Merge "fix return from finally"
diff --git a/Android.mk b/Android.mk
index 84cad4e..30318d6 100644
--- a/Android.mk
+++ b/Android.mk
@@ -263,6 +263,7 @@
 	core/java/android/speech/tts/ITextToSpeechService.aidl \
 	core/java/com/android/internal/app/IAppOpsCallback.aidl \
 	core/java/com/android/internal/app/IAppOpsService.aidl \
+	core/java/com/android/internal/app/IAssistScreenshotReceiver.aidl \
 	core/java/com/android/internal/app/IBatteryStats.aidl \
 	core/java/com/android/internal/app/IProcessStats.aidl \
 	core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl \
diff --git a/api/current.txt b/api/current.txt
index 7bac613..29f0a29 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -4908,6 +4908,53 @@
     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_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);
   }
@@ -8626,6 +8673,7 @@
     field public int descriptionRes;
     field public boolean enabled;
     field public int flags;
+    field public boolean hardwareAccelerated;
     field public int largestWidthLimitDp;
     field public java.lang.String manageSpaceActivityName;
     field public java.lang.String nativeLibraryDir;
@@ -15145,7 +15193,7 @@
     method public void setPropertyString(java.lang.String, java.lang.String);
     field public static final int EVENT_KEY_EXPIRED = 3; // 0x3
     field public static final int EVENT_KEY_REQUIRED = 2; // 0x2
-    field public static final int EVENT_PROVISION_REQUIRED = 1; // 0x1
+    field public static final deprecated int EVENT_PROVISION_REQUIRED = 1; // 0x1
     field public static final int EVENT_SESSION_RECLAIMED = 5; // 0x5
     field public static final int EVENT_VENDOR_DEFINED = 4; // 0x4
     field public static final int KEY_TYPE_OFFLINE = 2; // 0x2
@@ -16550,11 +16598,13 @@
     method public boolean isPrivate();
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator<android.media.midi.MidiDeviceInfo> CREATOR;
+    field public static final java.lang.String PROPERTY_BLUETOOTH_DEVICE = "bluetooth_device";
     field public static final java.lang.String PROPERTY_MANUFACTURER = "manufacturer";
     field public static final java.lang.String PROPERTY_NAME = "name";
     field public static final java.lang.String PROPERTY_PRODUCT = "product";
     field public static final java.lang.String PROPERTY_SERIAL_NUMBER = "serial_number";
     field public static final java.lang.String PROPERTY_USB_DEVICE = "usb_device";
+    field public static final int TYPE_BLUETOOTH = 3; // 0x3
     field public static final int TYPE_USB = 1; // 0x1
     field public static final int TYPE_VIRTUAL = 2; // 0x2
   }
@@ -17122,6 +17172,10 @@
     field public static final java.lang.String COLUMN_DISPLAY_NUMBER = "display_number";
     field public static final java.lang.String COLUMN_INPUT_ID = "input_id";
     field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data";
+    field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1";
+    field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG2 = "internal_provider_flag2";
+    field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG3 = "internal_provider_flag3";
+    field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG4 = "internal_provider_flag4";
     field public static final java.lang.String COLUMN_NETWORK_AFFILIATION = "network_affiliation";
     field public static final java.lang.String COLUMN_ORIGINAL_NETWORK_ID = "original_network_id";
     field public static final java.lang.String COLUMN_SEARCHABLE = "searchable";
@@ -23034,6 +23088,7 @@
     field public static final java.lang.String DISALLOW_OUTGOING_BEAM = "no_outgoing_beam";
     field public static final java.lang.String DISALLOW_OUTGOING_CALLS = "no_outgoing_calls";
     field public static final java.lang.String DISALLOW_REMOVE_USER = "no_remove_user";
+    field public static final java.lang.String DISALLOW_SAFE_BOOT = "no_safe_boot";
     field public static final java.lang.String DISALLOW_SHARE_LOCATION = "no_share_location";
     field public static final java.lang.String DISALLOW_SMS = "no_sms";
     field public static final java.lang.String DISALLOW_UNINSTALL_APPS = "no_uninstall_apps";
@@ -24638,6 +24693,7 @@
     field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/email_v2";
     field public static final android.net.Uri CONTENT_URI;
     field public static final java.lang.String DISPLAY_NAME = "data4";
+    field public static final android.net.Uri ENTERPRISE_CONTENT_LOOKUP_URI;
     field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
     field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
     field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
@@ -27886,6 +27942,7 @@
     field public static final java.lang.String SERVICE_INTERFACE = "android.service.voice.VoiceInteractionService";
     field public static final java.lang.String SERVICE_META_DATA = "android.voice_interaction";
     field public static final int START_WITH_ASSIST = 1; // 0x1
+    field public static final int START_WITH_SCREENSHOT = 2; // 0x2
   }
 
   public abstract class VoiceInteractionSession implements android.view.KeyEvent.Callback {
@@ -27909,6 +27966,7 @@
     method public void onDestroy();
     method public boolean[] onGetSupportedCommands(android.service.voice.VoiceInteractionSession.Caller, java.lang.String[]);
     method public void onHandleAssist(android.os.Bundle);
+    method public void onHandleScreenshot(android.graphics.Bitmap);
     method public void onHide();
     method public boolean onKeyDown(int, android.view.KeyEvent);
     method public boolean onKeyLongPress(int, android.view.KeyEvent);
@@ -29056,6 +29114,7 @@
 
   public class Voicemail implements android.os.Parcelable {
     method public static android.telecom.Voicemail.Builder createForInsertion(long, java.lang.String);
+    method public static android.telecom.Voicemail.Builder createForUpdate(long, java.lang.String);
     method public int describeContents();
     method public long getDuration();
     method public long getId();
@@ -29585,8 +29644,10 @@
     method public android.telephony.IccOpenLogicalChannelResponse iccOpenLogicalChannel(java.lang.String);
     method public java.lang.String iccTransmitApduBasicChannel(int, int, int, int, int, java.lang.String);
     method public java.lang.String iccTransmitApduLogicalChannel(int, int, int, int, int, int, java.lang.String);
+    method public boolean isHearingAidCompatibilitySupported();
     method public boolean isNetworkRoaming();
     method public boolean isSmsCapable();
+    method public boolean isTtyModeSupported();
     method public boolean isVoiceCapable();
     method public boolean isWorldPhone();
     method public void listen(android.telephony.PhoneStateListener, int);
@@ -30749,6 +30810,7 @@
     method public int getSpanStart(java.lang.Object);
     method public T[] getSpans(int, int, java.lang.Class<T>);
     method public deprecated int getTextRunCursor(int, int, int, int, int, android.graphics.Paint);
+    method public int getTextWatcherDepth();
     method public android.text.SpannableStringBuilder insert(int, java.lang.CharSequence, int, int);
     method public android.text.SpannableStringBuilder insert(int, java.lang.CharSequence);
     method public int length();
@@ -32918,6 +32980,7 @@
     method public boolean getTitleOptionalHint();
     method public int getType();
     method public abstract void invalidate();
+    method public void invalidateContentRect();
     method public boolean isTitleOptional();
     method public abstract void setCustomView(android.view.View);
     method public abstract void setSubtitle(java.lang.CharSequence);
@@ -32938,6 +33001,11 @@
     method public abstract boolean onPrepareActionMode(android.view.ActionMode, android.view.Menu);
   }
 
+  public static abstract class ActionMode.Callback2 implements android.view.ActionMode.Callback {
+    ctor public ActionMode.Callback2();
+    method public void onGetContentRect(android.view.ActionMode, android.view.View, android.graphics.Rect);
+  }
+
   public abstract class ActionProvider {
     ctor public ActionProvider(android.content.Context);
     method public boolean hasSubMenu();
@@ -37444,6 +37512,7 @@
     method public void goBack();
     method public void goBackOrForward(int);
     method public void goForward();
+    method public void insertVisualStateCallback(long, android.webkit.WebView.VisualStateCallback);
     method public void invokeZoomPicker();
     method public boolean isPrivateBrowsingEnabled();
     method public void loadData(java.lang.String, java.lang.String, java.lang.String);
@@ -37518,6 +37587,11 @@
     method public abstract deprecated void onNewPicture(android.webkit.WebView, android.graphics.Picture);
   }
 
+  public static abstract class WebView.VisualStateCallback {
+    ctor public WebView.VisualStateCallback();
+    method public abstract void onComplete(long);
+  }
+
   public class WebView.WebViewTransport {
     ctor public WebView.WebViewTransport();
     method public synchronized android.webkit.WebView getWebView();
@@ -37529,6 +37603,7 @@
     method public void doUpdateVisitedHistory(android.webkit.WebView, java.lang.String, boolean);
     method public void onFormResubmission(android.webkit.WebView, android.os.Message, android.os.Message);
     method public void onLoadResource(android.webkit.WebView, java.lang.String);
+    method public void onPageCommitVisible(android.webkit.WebView, java.lang.String);
     method public void onPageFinished(android.webkit.WebView, java.lang.String);
     method public void onPageStarted(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
     method public void onReceivedClientCertRequest(android.webkit.WebView, android.webkit.ClientCertRequest);
@@ -39942,7 +40017,8 @@
     method public final void setText(char[], int, int);
     method public final void setText(int);
     method public final void setText(int, android.widget.TextView.BufferType);
-    method public void setTextAppearance(android.content.Context, int);
+    method public void setTextAppearance(int);
+    method public deprecated void setTextAppearance(android.content.Context, int);
     method public void setTextColor(int);
     method public void setTextColor(android.content.res.ColorStateList);
     method public void setTextIsSelectable(boolean);
diff --git a/api/system-current.txt b/api/system-current.txt
index 89c0460e..c98f7a3 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -4998,6 +4998,53 @@
     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_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);
   }
@@ -8841,6 +8888,7 @@
     field public int descriptionRes;
     field public boolean enabled;
     field public int flags;
+    field public boolean hardwareAccelerated;
     field public int largestWidthLimitDp;
     field public java.lang.String manageSpaceActivityName;
     field public java.lang.String nativeLibraryDir;
@@ -16334,7 +16382,7 @@
     method public void unprovisionDevice();
     field public static final int EVENT_KEY_EXPIRED = 3; // 0x3
     field public static final int EVENT_KEY_REQUIRED = 2; // 0x2
-    field public static final int EVENT_PROVISION_REQUIRED = 1; // 0x1
+    field public static final deprecated int EVENT_PROVISION_REQUIRED = 1; // 0x1
     field public static final int EVENT_SESSION_RECLAIMED = 5; // 0x5
     field public static final int EVENT_VENDOR_DEFINED = 4; // 0x4
     field public static final int KEY_TYPE_OFFLINE = 2; // 0x2
@@ -17805,11 +17853,13 @@
     method public boolean isPrivate();
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator<android.media.midi.MidiDeviceInfo> CREATOR;
+    field public static final java.lang.String PROPERTY_BLUETOOTH_DEVICE = "bluetooth_device";
     field public static final java.lang.String PROPERTY_MANUFACTURER = "manufacturer";
     field public static final java.lang.String PROPERTY_NAME = "name";
     field public static final java.lang.String PROPERTY_PRODUCT = "product";
     field public static final java.lang.String PROPERTY_SERIAL_NUMBER = "serial_number";
     field public static final java.lang.String PROPERTY_USB_DEVICE = "usb_device";
+    field public static final int TYPE_BLUETOOTH = 3; // 0x3
     field public static final int TYPE_USB = 1; // 0x1
     field public static final int TYPE_VIRTUAL = 2; // 0x2
   }
@@ -18390,6 +18440,10 @@
     field public static final java.lang.String COLUMN_DISPLAY_NUMBER = "display_number";
     field public static final java.lang.String COLUMN_INPUT_ID = "input_id";
     field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data";
+    field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1";
+    field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG2 = "internal_provider_flag2";
+    field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG3 = "internal_provider_flag3";
+    field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG4 = "internal_provider_flag4";
     field public static final java.lang.String COLUMN_LOCKED = "locked";
     field public static final java.lang.String COLUMN_NETWORK_AFFILIATION = "network_affiliation";
     field public static final java.lang.String COLUMN_ORIGINAL_NETWORK_ID = "original_network_id";
@@ -18559,6 +18613,7 @@
     method public android.content.pm.ServiceInfo getServiceInfo();
     method public int getType();
     method public boolean isConnectedToHdmiSwitch();
+    method public boolean isHardwareInput();
     method public boolean isHidden(android.content.Context);
     method public boolean isPassthroughInput();
     method public java.lang.CharSequence loadCustomLabel(android.content.Context);
@@ -24828,6 +24883,7 @@
     field public static final java.lang.String DISALLOW_OUTGOING_BEAM = "no_outgoing_beam";
     field public static final java.lang.String DISALLOW_OUTGOING_CALLS = "no_outgoing_calls";
     field public static final java.lang.String DISALLOW_REMOVE_USER = "no_remove_user";
+    field public static final java.lang.String DISALLOW_SAFE_BOOT = "no_safe_boot";
     field public static final java.lang.String DISALLOW_SHARE_LOCATION = "no_share_location";
     field public static final java.lang.String DISALLOW_SMS = "no_sms";
     field public static final java.lang.String DISALLOW_UNINSTALL_APPS = "no_uninstall_apps";
@@ -26432,6 +26488,7 @@
     field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/email_v2";
     field public static final android.net.Uri CONTENT_URI;
     field public static final java.lang.String DISPLAY_NAME = "data4";
+    field public static final android.net.Uri ENTERPRISE_CONTENT_LOOKUP_URI;
     field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
     field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
     field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
@@ -29770,6 +29827,7 @@
     field public static final java.lang.String SERVICE_INTERFACE = "android.service.voice.VoiceInteractionService";
     field public static final java.lang.String SERVICE_META_DATA = "android.voice_interaction";
     field public static final int START_WITH_ASSIST = 1; // 0x1
+    field public static final int START_WITH_SCREENSHOT = 2; // 0x2
   }
 
   public abstract class VoiceInteractionSession implements android.view.KeyEvent.Callback {
@@ -29793,6 +29851,7 @@
     method public void onDestroy();
     method public boolean[] onGetSupportedCommands(android.service.voice.VoiceInteractionSession.Caller, java.lang.String[]);
     method public void onHandleAssist(android.os.Bundle);
+    method public void onHandleScreenshot(android.graphics.Bitmap);
     method public void onHide();
     method public boolean onKeyDown(int, android.view.KeyEvent);
     method public boolean onKeyLongPress(int, android.view.KeyEvent);
@@ -31374,6 +31433,7 @@
 
   public class Voicemail implements android.os.Parcelable {
     method public static android.telecom.Voicemail.Builder createForInsertion(long, java.lang.String);
+    method public static android.telecom.Voicemail.Builder createForUpdate(long, java.lang.String);
     method public int describeContents();
     method public long getDuration();
     method public long getId();
@@ -31923,6 +31983,7 @@
     method public java.lang.String iccTransmitApduBasicChannel(int, int, int, int, int, java.lang.String);
     method public java.lang.String iccTransmitApduLogicalChannel(int, int, int, int, int, int, java.lang.String);
     method public boolean isDataConnectivityPossible();
+    method public boolean isHearingAidCompatibilitySupported();
     method public boolean isIdle();
     method public boolean isNetworkRoaming();
     method public boolean isOffhook();
@@ -31930,6 +31991,7 @@
     method public boolean isRinging();
     method public boolean isSimPinEnabled();
     method public boolean isSmsCapable();
+    method public boolean isTtyModeSupported();
     method public boolean isVideoCallingEnabled();
     method public boolean isVoiceCapable();
     method public boolean isWorldPhone();
@@ -33105,6 +33167,7 @@
     method public int getSpanStart(java.lang.Object);
     method public T[] getSpans(int, int, java.lang.Class<T>);
     method public deprecated int getTextRunCursor(int, int, int, int, int, android.graphics.Paint);
+    method public int getTextWatcherDepth();
     method public android.text.SpannableStringBuilder insert(int, java.lang.CharSequence, int, int);
     method public android.text.SpannableStringBuilder insert(int, java.lang.CharSequence);
     method public int length();
@@ -35274,6 +35337,7 @@
     method public boolean getTitleOptionalHint();
     method public int getType();
     method public abstract void invalidate();
+    method public void invalidateContentRect();
     method public boolean isTitleOptional();
     method public abstract void setCustomView(android.view.View);
     method public abstract void setSubtitle(java.lang.CharSequence);
@@ -35294,6 +35358,11 @@
     method public abstract boolean onPrepareActionMode(android.view.ActionMode, android.view.Menu);
   }
 
+  public static abstract class ActionMode.Callback2 implements android.view.ActionMode.Callback {
+    ctor public ActionMode.Callback2();
+    method public void onGetContentRect(android.view.ActionMode, android.view.View, android.graphics.Rect);
+  }
+
   public abstract class ActionProvider {
     ctor public ActionProvider(android.content.Context);
     method public boolean hasSubMenu();
@@ -39876,6 +39945,7 @@
     method public void goBack();
     method public void goBackOrForward(int);
     method public void goForward();
+    method public void insertVisualStateCallback(long, android.webkit.WebView.VisualStateCallback);
     method public void invokeZoomPicker();
     method public boolean isPrivateBrowsingEnabled();
     method public void loadData(java.lang.String, java.lang.String, java.lang.String);
@@ -39980,6 +40050,11 @@
     method public void super_setLayoutParams(android.view.ViewGroup.LayoutParams);
   }
 
+  public static abstract class WebView.VisualStateCallback {
+    ctor public WebView.VisualStateCallback();
+    method public abstract void onComplete(long);
+  }
+
   public class WebView.WebViewTransport {
     ctor public WebView.WebViewTransport();
     method public synchronized android.webkit.WebView getWebView();
@@ -39991,6 +40066,7 @@
     method public void doUpdateVisitedHistory(android.webkit.WebView, java.lang.String, boolean);
     method public void onFormResubmission(android.webkit.WebView, android.os.Message, android.os.Message);
     method public void onLoadResource(android.webkit.WebView, java.lang.String);
+    method public void onPageCommitVisible(android.webkit.WebView, java.lang.String);
     method public void onPageFinished(android.webkit.WebView, java.lang.String);
     method public void onPageStarted(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
     method public void onReceivedClientCertRequest(android.webkit.WebView, android.webkit.ClientCertRequest);
@@ -40137,6 +40213,7 @@
     method public abstract void goBackOrForward(int);
     method public abstract void goForward();
     method public abstract void init(java.util.Map<java.lang.String, java.lang.Object>, boolean);
+    method public abstract void insertVisualStateCallback(long, android.webkit.WebView.VisualStateCallback);
     method public abstract void invokeZoomPicker();
     method public abstract boolean isPaused();
     method public abstract boolean isPrivateBrowsingEnabled();
@@ -42598,7 +42675,8 @@
     method public final void setText(char[], int, int);
     method public final void setText(int);
     method public final void setText(int, android.widget.TextView.BufferType);
-    method public void setTextAppearance(android.content.Context, int);
+    method public void setTextAppearance(int);
+    method public deprecated void setTextAppearance(android.content.Context, int);
     method public void setTextColor(int);
     method public void setTextColor(android.content.res.ColorStateList);
     method public void setTextIsSelectable(boolean);
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index 85a6aff..b824e97 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -2870,7 +2870,7 @@
                     contentView.setProgressBar(
                             R.id.progress, mProgressMax, mProgress, mProgressIndeterminate);
                     contentView.setProgressBackgroundTintList(
-                            R.id.progress, ColorStateList.valueOf(mContext.getResources().getColor(
+                            R.id.progress, ColorStateList.valueOf(mContext.getColor(
                                     R.color.notification_progress_background_color)));
                     if (mColor != COLOR_DEFAULT) {
                         ColorStateList colorStateList = ColorStateList.valueOf(mColor);
@@ -3044,7 +3044,7 @@
         private void processLegacyAction(Action action, RemoteViews button) {
             if (!isLegacy() || mColorUtil.isGrayscaleIcon(mContext, action.icon)) {
                 button.setTextViewCompoundDrawablesRelativeColorFilter(R.id.action0, 0,
-                        mContext.getResources().getColor(R.color.notification_action_color_filter),
+                        mContext.getColor(R.color.notification_action_color_filter),
                         PorterDuff.Mode.MULTIPLY);
             }
         }
@@ -3142,7 +3142,7 @@
 
         private int resolveColor() {
             if (mColor == COLOR_DEFAULT) {
-                return mContext.getResources().getColor(R.color.notification_icon_bg_color);
+                return mContext.getColor(R.color.notification_icon_bg_color);
             }
             return mColor;
         }
@@ -4321,9 +4321,9 @@
          * Applies the special text colors for media notifications to all text views.
          */
         private void styleText(RemoteViews contentView) {
-            int primaryColor = mBuilder.mContext.getResources().getColor(
+            int primaryColor = mBuilder.mContext.getColor(
                     R.color.notification_media_primary_color);
-            int secondaryColor = mBuilder.mContext.getResources().getColor(
+            int secondaryColor = mBuilder.mContext.getColor(
                     R.color.notification_media_secondary_color);
             contentView.setTextColor(R.id.title, primaryColor);
             if (mBuilder.showsTimeOrChronometer()) {
@@ -5468,6 +5468,470 @@
     }
 
     /**
+     * <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 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/content/Intent.java b/core/java/android/content/Intent.java
index 2ed8c44..f685475 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -2790,6 +2790,31 @@
     /** {@hide} */
     public static final String ACTION_MASTER_CLEAR = "android.intent.action.MASTER_CLEAR";
 
+    /**
+     * Broadcast action: report that a settings element is being restored from backup.  The intent
+     * contains three extras: EXTRA_SETTING_NAME is a string naming the restored setting,
+     * EXTRA_SETTING_NEW_VALUE is the value being restored, and EXTRA_SETTING_PREVIOUS_VALUE
+     * is the value of that settings entry prior to the restore operation.  All of these values are
+     * represented as strings.
+     *
+     * <p>This broadcast is sent only for settings provider entries known to require special handling
+     * around restore time.  These entries are found in the BROADCAST_ON_RESTORE table within
+     * the provider's backup agent implementation.
+     *
+     * @see #EXTRA_SETTING_NAME
+     * @see #EXTRA_SETTING_PREVIOUS_VALUE
+     * @see #EXTRA_SETTING_NEW_VALUE
+     * {@hide}
+     */
+    public static final String ACTION_SETTING_RESTORED = "android.os.action.SETTING_RESTORED";
+
+    /** {@hide} */
+    public static final String EXTRA_SETTING_NAME = "setting_name";
+    /** {@hide} */
+    public static final String EXTRA_SETTING_PREVIOUS_VALUE = "previous_value";
+    /** {@hide} */
+    public static final String EXTRA_SETTING_NEW_VALUE = "new_value";
+
     // ---------------------------------------------------------------------
     // ---------------------------------------------------------------------
     // Standard intent categories (see addCategory()).
diff --git a/core/java/android/content/UndoManager.java b/core/java/android/content/UndoManager.java
index 1d5ed8a..46c2c6e 100644
--- a/core/java/android/content/UndoManager.java
+++ b/core/java/android/content/UndoManager.java
@@ -119,15 +119,13 @@
     }
 
     /**
-     * Flatten the current undo state into a Parcelable object, which can later be restored
-     * with {@link #restoreInstanceState(android.os.Parcelable)}.
+     * Flatten the current undo state into a Parcel object, which can later be restored
+     * with {@link #restoreInstanceState(android.os.Parcel, java.lang.ClassLoader)}.
      */
-    public Parcelable saveInstanceState() {
+    public void saveInstanceState(Parcel p) {
         if (mUpdateCount > 0) {
             throw new IllegalStateException("Can't save state while updating");
         }
-        ParcelableParcel pp = new ParcelableParcel(getClass().getClassLoader());
-        Parcel p = pp.getParcel();
         mStateSeq++;
         if (mStateSeq <= 0) {
             mStateSeq = 0;
@@ -151,7 +149,6 @@
             mRedos.get(i).writeToParcel(p);
         }
         p.writeInt(0);
-        return pp;
     }
 
     void saveOwner(UndoOwner owner, Parcel out) {
@@ -168,26 +165,24 @@
     }
 
     /**
-     * Restore an undo state previously created with {@link #saveInstanceState()}.  This will
-     * restore the UndoManager's state to almost exactly what it was at the point it had
+     * Restore an undo state previously created with {@link #saveInstanceState(Parcel)}.  This
+     * will restore the UndoManager's state to almost exactly what it was at the point it had
      * been previously saved; the only information not restored is the data object
      * associated with each {@link UndoOwner}, which requires separate calls to
      * {@link #getOwner(String, Object)} to re-associate the owner with its data.
      */
-    public void restoreInstanceState(Parcelable state) {
+    public void restoreInstanceState(Parcel p, ClassLoader loader) {
         if (mUpdateCount > 0) {
             throw new IllegalStateException("Can't save state while updating");
         }
         forgetUndos(null, -1);
         forgetRedos(null, -1);
-        ParcelableParcel pp = (ParcelableParcel)state;
-        Parcel p = pp.getParcel();
         mHistorySize = p.readInt();
         mStateOwners = new UndoOwner[p.readInt()];
 
         int stype;
         while ((stype=p.readInt()) != 0) {
-            UndoState ustate = new UndoState(this, p, pp.getClassLoader());
+            UndoState ustate = new UndoState(this, p, loader);
             if (stype == 1) {
                 mUndos.add(0, ustate);
             } else {
@@ -311,12 +306,15 @@
         }
 
         int removed = 0;
-        for (int i=0; i<mUndos.size() && removed < count; i++) {
+        int i = 0;
+        while (i < mUndos.size() && removed < count) {
             UndoState state = mUndos.get(i);
             if (count > 0 && matchOwners(state, owners)) {
                 state.destroy();
                 mUndos.remove(i);
                 removed++;
+            } else {
+                i++;
             }
         }
 
@@ -329,12 +327,15 @@
         }
 
         int removed = 0;
-        for (int i=0; i<mRedos.size() && removed < count; i++) {
+        int i = 0;
+        while (i < mRedos.size() && removed < count) {
             UndoState state = mRedos.get(i);
             if (count > 0 && matchOwners(state, owners)) {
                 state.destroy();
                 mRedos.remove(i);
                 removed++;
+            } else {
+                i++;
             }
         }
 
diff --git a/core/java/android/content/pm/ApplicationInfo.java b/core/java/android/content/pm/ApplicationInfo.java
index e1a2aa9..29befc8 100644
--- a/core/java/android/content/pm/ApplicationInfo.java
+++ b/core/java/android/content/pm/ApplicationInfo.java
@@ -334,6 +334,18 @@
     public static final int FLAG_FULL_BACKUP_ONLY = 1<<26;
 
     /**
+     * Value for {@link #flags}: {@code true} if the application may use cleartext network traffic
+     * (e.g., HTTP rather than HTTPS; WebSockets rather than WebSockets Secure; XMPP, IMAP, STMP
+     * without STARTTLS or TLS). If {@code false}, the app declares that it does not intend to use
+     * cleartext network traffic, in which case platform components (e.g., HTTP stacks,
+     * {@code WebView}, {@code MediaPlayer}) will refuse app's requests to use cleartext traffic.
+     * Third-party libraries are encouraged to honor this flag as well.
+     *
+     * @hide
+     */
+    public static final int FLAG_USES_CLEARTEXT_TRAFFIC = 1<<27;
+
+    /**
      * Value for {@link #flags}: true if code from this application will need to be
      * loaded into other applications' processes. On devices that support multiple
      * instruction sets, this implies the code might be loaded into a process that's
@@ -598,6 +610,11 @@
      */
     public int installLocation = PackageInfo.INSTALL_LOCATION_UNSPECIFIED;
 
+    /**
+     * True when the application's rendering should be hardware accelerated.
+     */
+    public boolean hardwareAccelerated;
+
     public void dump(Printer pw, String prefix) {
         super.dumpFront(pw, prefix);
         if (className != null) {
@@ -637,6 +654,7 @@
         }
         pw.println(prefix + "enabled=" + enabled + " targetSdkVersion=" + targetSdkVersion
                 + " versionCode=" + versionCode);
+        pw.println(prefix + "hardwareAccelerated=" + hardwareAccelerated);
         if (manageSpaceActivityName != null) {
             pw.println(prefix + "manageSpaceActivityName="+manageSpaceActivityName);
         }
@@ -722,6 +740,7 @@
         descriptionRes = orig.descriptionRes;
         uiOptions = orig.uiOptions;
         backupAgentName = orig.backupAgentName;
+        hardwareAccelerated = orig.hardwareAccelerated;
     }
 
 
@@ -773,6 +792,7 @@
         dest.writeString(backupAgentName);
         dest.writeInt(descriptionRes);
         dest.writeInt(uiOptions);
+        dest.writeInt(hardwareAccelerated ? 1 : 0);
     }
 
     public static final Parcelable.Creator<ApplicationInfo> CREATOR
@@ -823,6 +843,7 @@
         backupAgentName = source.readString();
         descriptionRes = source.readInt();
         uiOptions = source.readInt();
+        hardwareAccelerated = source.readInt() != 0;
     }
 
     /**
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index 0365689..3da57cb 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -3692,11 +3692,11 @@
      * {@link #addPreferredActivity}, that are
      * currently registered with the system.
      *
-     * @param outFilters A list in which to place the filters of all of the
-     * preferred activities, or null for none.
-     * @param outActivities A list in which to place the component names of
-     * all of the preferred activities, or null for none.
-     * @param packageName An option package in which you would like to limit
+     * @param outFilters A required list in which to place the filters of all of the
+     * preferred activities.
+     * @param outActivities A required list in which to place the component names of
+     * all of the preferred activities.
+     * @param packageName An optional package in which you would like to limit
      * the list.  If null, all activities will be returned; if non-null, only
      * those activities in the given package are returned.
      *
@@ -3704,8 +3704,8 @@
      * (the number of distinct IntentFilter records, not the number of unique
      * activity components) that were found.
      */
-    public abstract int getPreferredActivities(List<IntentFilter> outFilters,
-            List<ComponentName> outActivities, String packageName);
+    public abstract int getPreferredActivities(@NonNull List<IntentFilter> outFilters,
+            @NonNull List<ComponentName> outActivities, String packageName);
 
     /**
      * Ask for the set of available 'home' activities and the current explicit
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index 1140756..c443ff3 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -2519,6 +2519,7 @@
         owner.baseHardwareAccelerated = sa.getBoolean(
                 com.android.internal.R.styleable.AndroidManifestApplication_hardwareAccelerated,
                 owner.applicationInfo.targetSdkVersion >= Build.VERSION_CODES.ICE_CREAM_SANDWICH);
+        ai.hardwareAccelerated = owner.baseHardwareAccelerated;
 
         if (sa.getBoolean(
                 com.android.internal.R.styleable.AndroidManifestApplication_hasCode,
@@ -2551,6 +2552,12 @@
         }
 
         if (sa.getBoolean(
+                com.android.internal.R.styleable.AndroidManifestApplication_usesCleartextTraffic,
+                true)) {
+            ai.flags |= ApplicationInfo.FLAG_USES_CLEARTEXT_TRAFFIC;
+        }
+
+        if (sa.getBoolean(
                 com.android.internal.R.styleable.AndroidManifestApplication_supportsRtl,
                 false /* default is no RTL support*/)) {
             ai.flags |= ApplicationInfo.FLAG_SUPPORTS_RTL;
diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java
index 5dc9ef9..95ad57e 100644
--- a/core/java/android/content/res/Resources.java
+++ b/core/java/android/content/res/Resources.java
@@ -927,6 +927,7 @@
      * @deprecated Use {@link #getColor(int, Theme)} instead.
      */
     @ColorInt
+    @Deprecated
     public int getColor(@ColorRes int id) throws NotFoundException {
         return getColor(id, null);
     }
@@ -996,6 +997,7 @@
      * @deprecated Use {@link #getColorStateList(int, Theme)} instead.
      */
     @Nullable
+    @Deprecated
     public ColorStateList getColorStateList(@ColorRes int id) throws NotFoundException {
         final ColorStateList csl = getColorStateList(id, null);
         if (csl != null && csl.canApplyTheme()) {
@@ -1049,8 +1051,6 @@
         return res;
     }
 
-
-
     /**
      * Return a boolean associated with a particular resource ID.  This can be
      * used with any integral resource value, and will return true if it is
diff --git a/core/java/android/content/res/StringBlock.java b/core/java/android/content/res/StringBlock.java
index 9652db7..5cfc41f 100644
--- a/core/java/android/content/res/StringBlock.java
+++ b/core/java/android/content/res/StringBlock.java
@@ -328,7 +328,7 @@
                 String name = color.substring(1);
                 int colorRes = res.getIdentifier(name, "color", "android");
                 if (colorRes != 0) {
-                    ColorStateList colors = res.getColorStateList(colorRes);
+                    ColorStateList colors = res.getColorStateList(colorRes, null);
                     if (foreground) {
                         return new TextAppearanceSpan(null, 0, 0, colors, null);
                     } else {
diff --git a/core/java/android/hardware/camera2/CameraManager.java b/core/java/android/hardware/camera2/CameraManager.java
index faa782a..b513379 100644
--- a/core/java/android/hardware/camera2/CameraManager.java
+++ b/core/java/android/hardware/camera2/CameraManager.java
@@ -1013,10 +1013,10 @@
                 if (DEBUG) {
                     Log.v(TAG,
                             String.format(
-                                "Device status was previously available (%d), " +
-                                " and is now again available (%d)" +
+                                "Device status was previously available (%b), " +
+                                " and is now again available (%b)" +
                                 "so no new client visible update will be sent",
-                                isAvailable(status), isAvailable(status)));
+                                isAvailable(oldStatus), isAvailable(status)));
                 }
                 return;
             }
diff --git a/core/java/android/hardware/camera2/legacy/LegacyCameraDevice.java b/core/java/android/hardware/camera2/legacy/LegacyCameraDevice.java
index 367a078..b5a019d 100644
--- a/core/java/android/hardware/camera2/legacy/LegacyCameraDevice.java
+++ b/core/java/android/hardware/camera2/legacy/LegacyCameraDevice.java
@@ -292,6 +292,10 @@
                     Log.e(TAG, "configureOutputs - null outputs are not allowed");
                     return BAD_VALUE;
                 }
+                if (!output.isValid()) {
+                    Log.e(TAG, "configureOutputs - invalid output surfaces are not allowed");
+                    return BAD_VALUE;
+                }
                 StreamConfigurationMap streamConfigurations = mStaticCharacteristics.
                         get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
 
@@ -522,7 +526,7 @@
      * @return the width and height of the surface
      *
      * @throws NullPointerException if the {@code surface} was {@code null}
-     * @throws IllegalStateException if the {@code surface} was invalid
+     * @throws BufferQueueAbandonedException if the {@code surface} was invalid
      */
     public static Size getSurfaceSize(Surface surface) throws BufferQueueAbandonedException {
         checkNotNull(surface);
diff --git a/core/java/android/hardware/camera2/legacy/LegacyExceptionUtils.java b/core/java/android/hardware/camera2/legacy/LegacyExceptionUtils.java
index 7e0c01b..4b7cfbf 100644
--- a/core/java/android/hardware/camera2/legacy/LegacyExceptionUtils.java
+++ b/core/java/android/hardware/camera2/legacy/LegacyExceptionUtils.java
@@ -60,7 +60,7 @@
             case CameraBinderDecorator.NO_ERROR: {
                 return CameraBinderDecorator.NO_ERROR;
             }
-            case CameraBinderDecorator.ENODEV: {
+            case CameraBinderDecorator.BAD_VALUE: {
                 throw new BufferQueueAbandonedException();
             }
         }
diff --git a/core/java/android/hardware/camera2/legacy/RequestThreadManager.java b/core/java/android/hardware/camera2/legacy/RequestThreadManager.java
index ff74c59..691798f 100644
--- a/core/java/android/hardware/camera2/legacy/RequestThreadManager.java
+++ b/core/java/android/hardware/camera2/legacy/RequestThreadManager.java
@@ -498,6 +498,10 @@
             return;
         }
         for(Surface s : surfaces) {
+            if (s == null || !s.isValid()) {
+                Log.w(TAG, "Jpeg surface is invalid, skipping...");
+                continue;
+            }
             try {
                 LegacyCameraDevice.setSurfaceFormat(s, LegacyMetadataMapper.HAL_PIXEL_FORMAT_BLOB);
             } catch (LegacyExceptionUtils.BufferQueueAbandonedException e) {
diff --git a/core/java/android/hardware/location/GeofenceHardwareImpl.java b/core/java/android/hardware/location/GeofenceHardwareImpl.java
index 6e5d064..4696b2a 100644
--- a/core/java/android/hardware/location/GeofenceHardwareImpl.java
+++ b/core/java/android/hardware/location/GeofenceHardwareImpl.java
@@ -436,7 +436,7 @@
             int monitoringType,
             int sourcesUsed) {
         if(location == null) {
-            Log.e(TAG, String.format("Invalid Geofence Transition: location=%p", location));
+            Log.e(TAG, String.format("Invalid Geofence Transition: location=null"));
             return;
         }
         if(DEBUG) {
diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java
index e303f61..de970cb 100644
--- a/core/java/android/os/PowerManager.java
+++ b/core/java/android/os/PowerManager.java
@@ -364,6 +364,12 @@
     public static final int GO_TO_SLEEP_REASON_HDMI = 5;
 
     /**
+     * Go to sleep reason code: Going to sleep due to the sleep button being pressed.
+     * @hide
+     */
+    public static final int GO_TO_SLEEP_REASON_SLEEP_BUTTON = 6;
+
+    /**
      * Go to sleep flag: Skip dozing state and directly go to full sleep.
      * @hide
      */
diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java
index 4834f97..0de9c70 100644
--- a/core/java/android/os/Process.java
+++ b/core/java/android/os/Process.java
@@ -631,6 +631,9 @@
             if ((debugFlags & Zygote.DEBUG_ENABLE_CHECKJNI) != 0) {
                 argsForZygote.add("--enable-checkjni");
             }
+            if ((debugFlags & Zygote.DEBUG_ENABLE_JIT) != 0) {
+                argsForZygote.add("--enable-jit");
+            }
             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 706e0d0..3601a1c 100644
--- a/core/java/android/os/UserManager.java
+++ b/core/java/android/os/UserManager.java
@@ -400,6 +400,18 @@
     public static final String DISALLOW_WALLPAPER = "no_wallpaper";
 
     /**
+     * Specifies if the user is not allowed to reboot the device into safe boot mode.
+     * This can only be set by device owners and profile owners on the primary user.
+     * The default value is <code>false</code>.
+     *
+     * <p/>Key for user restrictions.
+     * <p/>Type: Boolean
+     * @see #setUserRestrictions(Bundle)
+     * @see #getUserRestrictions()
+     */
+    public static final String DISALLOW_SAFE_BOOT = "no_safe_boot";
+
+    /**
      * Application restriction key that is used to indicate the pending arrival
      * of real restrictions for the app.
      *
diff --git a/core/java/android/print/PrintDocumentInfo.java b/core/java/android/print/PrintDocumentInfo.java
index e4e753e..44e6410 100644
--- a/core/java/android/print/PrintDocumentInfo.java
+++ b/core/java/android/print/PrintDocumentInfo.java
@@ -212,7 +212,7 @@
         result = prime * result + mContentType;
         result = prime * result + mPageCount;
         result = prime * result + (int) mDataSize;
-        result = prime * result + (int) mDataSize >> 32;
+        result = prime * result + (int) (mDataSize >> 32);
         return result;
     }
 
diff --git a/core/java/android/provider/ContactsContract.java b/core/java/android/provider/ContactsContract.java
index 91a19dc..06862d7 100644
--- a/core/java/android/provider/ContactsContract.java
+++ b/core/java/android/provider/ContactsContract.java
@@ -4994,14 +4994,16 @@
                 "phone_lookup");
 
         /**
-         * URI used for the "enterprise caller-id".
+         * <p>URI used for the "enterprise caller-id".</p>
          *
+         * <p>
          * It supports the same semantics as {@link #CONTENT_FILTER_URI} and returns the same
          * columns.  If the device has no corp profile that is linked to the current profile, it
          * behaves in the exact same way as {@link #CONTENT_FILTER_URI}.  If there is a corp profile
          * linked to the current profile, it first queries against the personal contact database,
          * and if no matching contacts are found there, then queries against the
          * corp contacts database.
+         * </p>
          * <p>
          * If a result is from the corp profile, it makes the following changes to the data:
          * <ul>
@@ -5984,6 +5986,45 @@
                     "lookup");
 
             /**
+            * <p>URI used for enterprise email lookup.</p>
+            *
+            * <p>
+            * It supports the same semantics as {@link #CONTENT_LOOKUP_URI} and returns the same
+            * columns.  If the device has no corp profile that is linked to the current profile, it
+            * behaves in the exact same way as {@link #CONTENT_LOOKUP_URI}.  If there is a
+            * corp profile linked to the current profile, it first queries against the personal contact database,
+            * and if no matching contacts are found there, then queries against the
+            * corp contacts database.
+            * </p>
+            * <p>
+            * If a result is from the corp profile, it makes the following changes to the data:
+            * <ul>
+            *     <li>
+            *     {@link #PHOTO_THUMBNAIL_URI} and {@link #PHOTO_URI} will be rewritten to special
+            *     URIs.  Use {@link ContentResolver#openAssetFileDescriptor} or its siblings to
+            *     load pictures from them.
+            *     {@link #PHOTO_ID} and {@link #PHOTO_FILE_ID} will be set to null.  Do not
+            *     use them.
+            *     </li>
+            *     <li>
+            *     Corp contacts will get artificial {@link #CONTACT_ID}s.  In order to tell whether
+            *     a contact
+            *     is from the corp profile, use
+            *     {@link ContactsContract.Contacts#isEnterpriseContactId(long)}.
+            *     </li>
+            * </ul>
+            * <p>
+            * This URI does NOT support selection nor order-by.
+            *
+            * <pre>
+            * Uri lookupUri = Uri.withAppendedPath(Email.ENTERPRISE_CONTENT_LOOKUP_URI,
+            *         Uri.encode(email));
+            * </pre>
+            */
+            public static final Uri ENTERPRISE_CONTENT_LOOKUP_URI =
+                    Uri.withAppendedPath(CONTENT_URI, "lookup_enterprise");
+
+            /**
              * <p>
              * The content:// style URL for email lookup using a filter. The filter returns
              * records of MIME type {@link #CONTENT_ITEM_TYPE}. The filter is applied
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 4c452aa..3813277 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -5374,6 +5374,7 @@
             ACCESSIBILITY_SCRIPT_INJECTION,
             BACKUP_AUTO_RESTORE,
             ENABLED_ACCESSIBILITY_SERVICES,
+            ENABLED_NOTIFICATION_LISTENERS,
             TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES,
             TOUCH_EXPLORATION_ENABLED,
             ACCESSIBILITY_ENABLED,
@@ -5398,6 +5399,9 @@
             WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON,            // moved to global
             WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY,               // moved to global
             WIFI_NUM_OPEN_NETWORKS_KEPT,                        // moved to global
+            SELECTED_SPELL_CHECKER,
+            SELECTED_SPELL_CHECKER_SUBTYPE,
+            SPELL_CHECKER_ENABLED,
             MOUNT_PLAY_NOTIFICATION_SND,
             MOUNT_UMS_AUTOSTART,
             MOUNT_UMS_PROMPT,
diff --git a/core/java/android/security/keymaster/KeymasterDefs.java b/core/java/android/security/keymaster/KeymasterDefs.java
index 88cad79..e653b74 100644
--- a/core/java/android/security/keymaster/KeymasterDefs.java
+++ b/core/java/android/security/keymaster/KeymasterDefs.java
@@ -37,6 +37,7 @@
     public static final int KM_BOOL = 7 << 28;
     public static final int KM_BIGNUM = 8 << 28;
     public static final int KM_BYTES = 9 << 28;
+    public static final int KM_LONG_REP = 10 << 28;
 
     // Tag values.
     public static final int KM_TAG_INVALID = KM_INVALID | 0;
@@ -66,9 +67,10 @@
 
     public static final int KM_TAG_ALL_USERS = KM_BOOL | 500;
     public static final int KM_TAG_USER_ID = KM_INT | 501;
-    public static final int KM_TAG_NO_AUTH_REQUIRED = KM_BOOL | 502;
-    public static final int KM_TAG_USER_AUTH_ID = KM_INT_REP | 503;
-    public static final int KM_TAG_AUTH_TIMEOUT = KM_INT | 504;
+    public static final int KM_TAG_USER_SECURE_ID = KM_LONG_REP | 502;
+    public static final int KM_TAG_NO_AUTH_REQUIRED = KM_BOOL | 503;
+    public static final int KM_TAG_USER_AUTH_TYPE = KM_ENUM | 504;
+    public static final int KM_TAG_AUTH_TIMEOUT = KM_INT | 505;
 
     public static final int KM_TAG_ALL_APPLICATIONS = KM_BOOL | 600;
     public static final int KM_TAG_APPLICATION_ID = KM_BYTES | 601;
@@ -82,6 +84,7 @@
     public static final int KM_TAG_ASSOCIATED_DATA = KM_BYTES | 1000;
     public static final int KM_TAG_NONCE = KM_BYTES | 1001;
     public static final int KM_TAG_CHUNK_LENGTH = KM_INT | 1002;
+    public static final int KM_TAG_AUTH_TOKEN = KM_BYTES | 1003;
 
     // Algorithm values.
     public static final int KM_ALGORITHM_RSA = 1;
diff --git a/core/java/android/service/voice/IVoiceInteractionSession.aidl b/core/java/android/service/voice/IVoiceInteractionSession.aidl
index 797457a..4f4b2d5 100644
--- a/core/java/android/service/voice/IVoiceInteractionSession.aidl
+++ b/core/java/android/service/voice/IVoiceInteractionSession.aidl
@@ -17,6 +17,7 @@
 package android.service.voice;
 
 import android.content.Intent;
+import android.graphics.Bitmap;
 import android.os.Bundle;
 
 /**
@@ -26,6 +27,7 @@
     void show(in Bundle sessionArgs, int flags);
     void hide();
     void handleAssist(in Bundle assistData);
+    void handleScreenshot(in Bitmap screenshot);
     void taskStarted(in Intent intent, int taskId);
     void taskFinished(in Intent intent, int taskId);
     void closeSystemDialogs();
diff --git a/core/java/android/service/voice/VoiceInteractionService.java b/core/java/android/service/voice/VoiceInteractionService.java
index 0c01b25..419b92b 100644
--- a/core/java/android/service/voice/VoiceInteractionService.java
+++ b/core/java/android/service/voice/VoiceInteractionService.java
@@ -71,11 +71,17 @@
     public static final String SERVICE_META_DATA = "android.voice_interaction";
 
     /**
-     * Flag for use with {@link #showSession: request that the session be started with
+     * Flag for use with {@link #showSession}: request that the session be started with
      * assist data from the currently focused activity.
      */
     public static final int START_WITH_ASSIST = 1<<0;
 
+    /**
+     * Flag for use with {@link #showSession}: request that the session be started with
+     * a screen shot of the currently focused activity.
+     */
+    public static final int START_WITH_SCREENSHOT = 1<<1;
+
     IVoiceInteractionService mInterface = new IVoiceInteractionService.Stub() {
         @Override public void ready() {
             mHandler.sendEmptyMessage(MSG_READY);
diff --git a/core/java/android/service/voice/VoiceInteractionSession.java b/core/java/android/service/voice/VoiceInteractionSession.java
index 11eaa06..7a5bb90 100644
--- a/core/java/android/service/voice/VoiceInteractionSession.java
+++ b/core/java/android/service/voice/VoiceInteractionSession.java
@@ -22,6 +22,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.TypedArray;
+import android.graphics.Bitmap;
 import android.graphics.Rect;
 import android.graphics.Region;
 import android.inputmethodservice.SoftInputWindow;
@@ -179,6 +180,12 @@
         }
 
         @Override
+        public void handleScreenshot(Bitmap screenshot) {
+            mHandlerCaller.sendMessage(mHandlerCaller.obtainMessageO(MSG_HANDLE_SCREENSHOT,
+                    screenshot));
+        }
+
+        @Override
         public void taskStarted(Intent intent, int taskId) {
             mHandlerCaller.sendMessage(mHandlerCaller.obtainMessageIO(MSG_TASK_STARTED,
                     taskId, intent));
@@ -323,8 +330,9 @@
     static final int MSG_CLOSE_SYSTEM_DIALOGS = 102;
     static final int MSG_DESTROY = 103;
     static final int MSG_HANDLE_ASSIST = 104;
-    static final int MSG_SHOW = 105;
-    static final int MSG_HIDE = 106;
+    static final int MSG_HANDLE_SCREENSHOT = 105;
+    static final int MSG_SHOW = 106;
+    static final int MSG_HIDE = 107;
 
     class MyCallbacks implements HandlerCaller.Callback, SoftInputWindow.Callback {
         @Override
@@ -396,9 +404,13 @@
                     doDestroy();
                     break;
                 case MSG_HANDLE_ASSIST:
-                    if (DEBUG) Log.d(TAG, "onHandleAssist: " + (Bundle)msg.obj);
+                    if (DEBUG) Log.d(TAG, "onHandleAssist: " + msg.obj);
                     onHandleAssist((Bundle) msg.obj);
                     break;
+                case MSG_HANDLE_SCREENSHOT:
+                    if (DEBUG) Log.d(TAG, "onHandleScreenshot: " + msg.obj);
+                    onHandleScreenshot((Bitmap) msg.obj);
+                    break;
                 case MSG_SHOW:
                     if (DEBUG) Log.d(TAG, "doShow: args=" + msg.obj
                             + " flags=" + msg.arg1);
@@ -768,6 +780,9 @@
     public void onHandleAssist(Bundle assistBundle) {
     }
 
+    public void onHandleScreenshot(Bitmap screenshot) {
+    }
+
     public boolean onKeyDown(int keyCode, KeyEvent event) {
         return false;
     }
diff --git a/core/java/android/text/Html.java b/core/java/android/text/Html.java
index dc93bc2..8cf1b4b 100644
--- a/core/java/android/text/Html.java
+++ b/core/java/android/text/Html.java
@@ -672,7 +672,7 @@
                     String name = f.mColor.substring(1);
                     int colorRes = res.getIdentifier(name, "color", "android");
                     if (colorRes != 0) {
-                        ColorStateList colors = res.getColorStateList(colorRes);
+                        ColorStateList colors = res.getColorStateList(colorRes, null);
                         text.setSpan(new TextAppearanceSpan(null, 0, 0, colors, null),
                                 where, len,
                                 Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
diff --git a/core/java/android/text/SpannableStringBuilder.java b/core/java/android/text/SpannableStringBuilder.java
index 7ce44e1..992dc4d 100644
--- a/core/java/android/text/SpannableStringBuilder.java
+++ b/core/java/android/text/SpannableStringBuilder.java
@@ -1006,28 +1006,43 @@
         return new String(buf);
     }
 
+    /**
+     * Returns the depth of TextWatcher callbacks. Returns 0 when the object is not handling
+     * TextWatchers. A return value greater than 1 implies that a TextWatcher caused a change that
+     * recursively triggered a TextWatcher.
+     */
+    public int getTextWatcherDepth() {
+        return mTextWatcherDepth;
+    }
+
     private void sendBeforeTextChanged(TextWatcher[] watchers, int start, int before, int after) {
         int n = watchers.length;
 
+        mTextWatcherDepth++;
         for (int i = 0; i < n; i++) {
             watchers[i].beforeTextChanged(this, start, before, after);
         }
+        mTextWatcherDepth--;
     }
 
     private void sendTextChanged(TextWatcher[] watchers, int start, int before, int after) {
         int n = watchers.length;
 
+        mTextWatcherDepth++;
         for (int i = 0; i < n; i++) {
             watchers[i].onTextChanged(this, start, before, after);
         }
+        mTextWatcherDepth--;
     }
 
     private void sendAfterTextChanged(TextWatcher[] watchers) {
         int n = watchers.length;
 
+        mTextWatcherDepth++;
         for (int i = 0; i < n; i++) {
             watchers[i].afterTextChanged(this);
         }
+        mTextWatcherDepth--;
     }
 
     private void sendSpanAdded(Object what, int start, int end) {
@@ -1524,6 +1539,10 @@
     private IdentityHashMap<Object, Integer> mIndexOfSpan;
     private int mLowWaterMark;  // indices below this have not been touched
 
+    // TextWatcher callbacks may trigger changes that trigger more callbacks. This keeps track of
+    // how deep the callbacks go.
+    private int mTextWatcherDepth;
+
     // TODO These value are tightly related to the public SPAN_MARK/POINT values in {@link Spanned}
     private static final int MARK = 1;
     private static final int POINT = 2;
diff --git a/core/java/android/text/util/Linkify.java b/core/java/android/text/util/Linkify.java
index 8e9eb48..c119277 100644
--- a/core/java/android/text/util/Linkify.java
+++ b/core/java/android/text/util/Linkify.java
@@ -525,10 +525,6 @@
 
                 return 0;
             }
-
-            public final boolean equals(Object o) {
-                return false;
-            }
         };
 
         Collections.sort(links, c);
diff --git a/core/java/android/util/PathParser.java b/core/java/android/util/PathParser.java
index 92b19be..18dc262 100644
--- a/core/java/android/util/PathParser.java
+++ b/core/java/android/util/PathParser.java
@@ -164,7 +164,7 @@
      * @return array of floats
      */
     private static float[] getFloats(String s) {
-        if (s.charAt(0) == 'z' | s.charAt(0) == 'Z') {
+        if (s.charAt(0) == 'z' || s.charAt(0) == 'Z') {
             return new float[0];
         }
         try {
diff --git a/core/java/android/view/ActionMode.java b/core/java/android/view/ActionMode.java
index a018138..9f202a9 100644
--- a/core/java/android/view/ActionMode.java
+++ b/core/java/android/view/ActionMode.java
@@ -18,6 +18,7 @@
 
 
 import android.annotation.StringRes;
+import android.graphics.Rect;
 
 /**
  * Represents a contextual mode of the user interface. Action modes can be used to provide
@@ -197,6 +198,15 @@
     public abstract void invalidate();
 
     /**
+     * Invalidate the content rect associated to this ActionMode. This only makes sense for
+     * action modes that support dynamic positioning on the screen, and provides a more efficient
+     * way to reposition it without invalidating the whole action mode.
+     *
+     * @see Callback2#onGetContentRect(ActionMode, View, Rect) .
+     */
+    public void invalidateContentRect() {}
+
+    /**
      * Finish and close this action mode. The action mode's {@link ActionMode.Callback} will
      * have its {@link Callback#onDestroyActionMode(ActionMode)} method called.
      */
@@ -298,4 +308,31 @@
          */
         public void onDestroyActionMode(ActionMode mode);
     }
-}
\ No newline at end of file
+
+    /**
+     * Extension of {@link ActionMode.Callback} to provide content rect information. This is
+     * required for ActionModes with dynamic positioning such as the ones with type
+     * {@link ActionMode#TYPE_FLOATING} to ensure the positioning doesn't obscure app content. If
+     * an app fails to provide a subclass of this class, a default implementation will be used.
+     */
+    public static abstract class Callback2 implements ActionMode.Callback {
+
+        /**
+         * Called when an ActionMode needs to be positioned on screen, potentially occluding view
+         * content. Note this may be called on a per-frame basis.
+         *
+         * @param mode The ActionMode that requires positioning.
+         * @param view The View that originated the ActionMode, in whose coordinates the Rect should
+         *          be provided.
+         * @param outRect The Rect to be populated with the content position.
+         */
+        public void onGetContentRect(ActionMode mode, View view, Rect outRect) {
+            if (view != null) {
+                outRect.set(0, 0, view.getWidth(), view.getHeight());
+            } else {
+                outRect.set(0, 0, 0, 0);
+            }
+        }
+
+    }
+}
diff --git a/core/java/android/view/DisplayListCanvas.java b/core/java/android/view/DisplayListCanvas.java
index 90e1f86..3caf6f0 100644
--- a/core/java/android/view/DisplayListCanvas.java
+++ b/core/java/android/view/DisplayListCanvas.java
@@ -18,6 +18,7 @@
 
 import android.annotation.NonNull;
 import android.graphics.Bitmap;
+import android.graphics.Canvas;
 import android.graphics.CanvasProperty;
 import android.graphics.NinePatch;
 import android.graphics.Paint;
@@ -32,8 +33,10 @@
  * This is intended for use with a DisplayList. This class keeps a list of all the Paint and
  * Bitmap objects that it draws, preventing the backing memory of Bitmaps from being freed while
  * the DisplayList is still holding a native reference to the memory.
+ *
+ * @hide
  */
-class DisplayListCanvas extends HardwareCanvas {
+public class DisplayListCanvas extends Canvas {
     // The recording canvas pool should be large enough to handle a deeply nested
     // view hierarchy because display lists are generated recursively.
     private static final int POOL_LIMIT = 25;
@@ -85,7 +88,6 @@
     // Constructors
     ///////////////////////////////////////////////////////////////////////////
 
-
     private DisplayListCanvas() {
         super(nCreateDisplayListRenderer());
     }
@@ -103,6 +105,16 @@
     ///////////////////////////////////////////////////////////////////////////
 
     @Override
+    public boolean isHardwareAccelerated() {
+        return true;
+    }
+
+    @Override
+    public void setBitmap(Bitmap bitmap) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
     public boolean isOpaque() {
         return false;
     }
@@ -171,7 +183,11 @@
 
     private static native void nInsertReorderBarrier(long renderer, boolean enableReorder);
 
-    @Override
+    /**
+     * Invoked before any drawing operation is performed in this canvas.
+     *
+     * @param dirty The dirty rectangle to update, can be null.
+     */
     public void onPreDraw(Rect dirty) {
         if (dirty != null) {
             nPrepareDirty(mNativeCanvasWrapper, dirty.left, dirty.top, dirty.right, dirty.bottom);
@@ -183,7 +199,9 @@
     private static native void nPrepare(long renderer);
     private static native void nPrepareDirty(long renderer, int left, int top, int right, int bottom);
 
-    @Override
+    /**
+     * Invoked after all drawing operation have been performed.
+     */
     public void onPostDraw() {
         nFinish(mNativeCanvasWrapper);
     }
@@ -194,7 +212,13 @@
     // Functor
     ///////////////////////////////////////////////////////////////////////////
 
-    @Override
+    /**
+     * Calls the function specified with the drawGLFunction function pointer. This is
+     * functionality used by webkit for calling into their renderer from our display lists.
+     * This function may return true if an invalidation is needed after the call.
+     *
+     * @param drawGLFunction A native function pointer
+     */
     public void callDrawGLFunction2(long drawGLFunction) {
         nCallDrawGLFunction(mNativeCanvasWrapper, drawGLFunction);
     }
@@ -207,7 +231,23 @@
 
     protected static native long nFinishRecording(long renderer);
 
-    @Override
+    /**
+     * Draws the specified display list onto this canvas. The display list can only
+     * be drawn if {@link android.view.RenderNode#isValid()} returns true.
+     *
+     * @param renderNode The RenderNode to replay.
+     */
+    public void drawRenderNode(RenderNode renderNode) {
+        drawRenderNode(renderNode, RenderNode.FLAG_CLIP_CHILDREN);
+    }
+
+    /**
+     * Draws the specified display list onto this canvas.
+     *
+     * @param renderNode The RenderNode to replay.
+     * @param flags Optional flags about drawing, see {@link RenderNode} for
+     *              the possible flags.
+     */
     public void drawRenderNode(RenderNode renderNode, int flags) {
         nDrawRenderNode(mNativeCanvasWrapper, renderNode.getNativeDisplayList(), flags);
     }
@@ -219,6 +259,14 @@
     // Hardware layer
     ///////////////////////////////////////////////////////////////////////////
 
+    /**
+     * Draws the specified layer onto this canvas.
+     *
+     * @param layer The layer to composite on this canvas
+     * @param x The left coordinate of the layer
+     * @param y The top coordinate of the layer
+     * @param paint The paint used to draw the layer
+     */
     void drawHardwareLayer(HardwareLayer layer, float x, float y, Paint paint) {
         layer.setLayerPaint(paint);
         nDrawLayer(mNativeCanvasWrapper, layer.getLayerHandle(), x, y);
@@ -253,7 +301,6 @@
     private static native void nDrawPatch(long renderer, long bitmap, long chunk,
             float left, float top, float right, float bottom, long paint);
 
-    @Override
     public void drawCircle(CanvasProperty<Float> cx, CanvasProperty<Float> cy,
             CanvasProperty<Float> radius, CanvasProperty<Paint> paint) {
         nDrawCircle(mNativeCanvasWrapper, cx.getNativeContainer(), cy.getNativeContainer(),
@@ -263,7 +310,6 @@
     private static native void nDrawCircle(long renderer, long propCx,
             long propCy, long propRadius, long propPaint);
 
-    @Override
     public void drawRoundRect(CanvasProperty<Float> left, CanvasProperty<Float> top,
             CanvasProperty<Float> right, CanvasProperty<Float> bottom, CanvasProperty<Float> rx,
             CanvasProperty<Float> ry, CanvasProperty<Paint> paint) {
diff --git a/core/java/android/view/GhostView.java b/core/java/android/view/GhostView.java
index 20baad0..d58e7c0 100644
--- a/core/java/android/view/GhostView.java
+++ b/core/java/android/view/GhostView.java
@@ -46,14 +46,14 @@
 
     @Override
     protected void onDraw(Canvas canvas) {
-        if (canvas instanceof HardwareCanvas) {
-            HardwareCanvas hwCanvas = (HardwareCanvas) canvas;
+        if (canvas instanceof DisplayListCanvas) {
+            DisplayListCanvas dlCanvas = (DisplayListCanvas) canvas;
             mView.mRecreateDisplayList = true;
             RenderNode renderNode = mView.getDisplayList();
             if (renderNode.isValid()) {
-                hwCanvas.insertReorderBarrier(); // enable shadow for this rendernode
-                hwCanvas.drawRenderNode(renderNode);
-                hwCanvas.insertInorderBarrier(); // re-disable reordering/shadows
+                dlCanvas.insertReorderBarrier(); // enable shadow for this rendernode
+                dlCanvas.drawRenderNode(renderNode);
+                dlCanvas.insertInorderBarrier(); // re-disable reordering/shadows
             }
         }
     }
diff --git a/core/java/android/view/HardwareCanvas.java b/core/java/android/view/HardwareCanvas.java
deleted file mode 100644
index fc2b55b..0000000
--- a/core/java/android/view/HardwareCanvas.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (C) 2010 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.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.CanvasProperty;
-import android.graphics.Paint;
-import android.graphics.Rect;
-
-/**
- * Hardware accelerated canvas.
- *
- * @hide
- */
-public abstract class HardwareCanvas extends Canvas {
-
-    /**
-     * Pass a reference to the native renderer to our superclass's
-     * constructor.
-     */
-    protected HardwareCanvas(long renderer) {
-        super(renderer);
-    }
-
-    @Override
-    public boolean isHardwareAccelerated() {
-        return true;
-    }
-
-    @Override
-    public void setBitmap(Bitmap bitmap) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Invoked before any drawing operation is performed in this canvas.
-     *
-     * @param dirty The dirty rectangle to update, can be null.
-     *
-     * @hide
-     */
-    public abstract void onPreDraw(Rect dirty);
-
-    /**
-     * Invoked after all drawing operation have been performed.
-     *
-     * @hide
-     */
-    public abstract void onPostDraw();
-
-    /**
-     * Draws the specified display list onto this canvas. The display list can only
-     * be drawn if {@link android.view.RenderNode#isValid()} returns true.
-     *
-     * @param renderNode The RenderNode to replay.
-     */
-    public void drawRenderNode(RenderNode renderNode) {
-        drawRenderNode(renderNode, RenderNode.FLAG_CLIP_CHILDREN);
-    }
-
-    /**
-     * Draws the specified display list onto this canvas.
-     *
-     * @param renderNode The RenderNode to replay.
-     * @param dirty Ignored, can be null.
-     * @param flags Optional flags about drawing, see {@link RenderNode} for
-     *              the possible flags.
-     *
-     * @hide
-     */
-    public abstract void drawRenderNode(RenderNode renderNode, int flags);
-
-    /**
-     * Draws the specified layer onto this canvas.
-     *
-     * @param layer The layer to composite on this canvas
-     * @param x The left coordinate of the layer
-     * @param y The top coordinate of the layer
-     * @param paint The paint used to draw the layer
-     *
-     * @hide
-     */
-    abstract void drawHardwareLayer(HardwareLayer layer, float x, float y, Paint paint);
-
-    /**
-     * Calls the function specified with the drawGLFunction function pointer. This is
-     * functionality used by webkit for calling into their renderer from our display lists.
-     * This function may return true if an invalidation is needed after the call.
-     *
-     * @param drawGLFunction A native function pointer
-     *
-     * @hide
-     */
-    public void callDrawGLFunction2(long drawGLFunction) {
-        // Noop - this is done in the display list recorder subclass
-    }
-
-    public abstract void drawCircle(CanvasProperty<Float> cx, CanvasProperty<Float> cy,
-            CanvasProperty<Float> radius, CanvasProperty<Paint> paint);
-
-    public abstract void drawRoundRect(CanvasProperty<Float> left, CanvasProperty<Float> top,
-            CanvasProperty<Float> right, CanvasProperty<Float> bottom,
-            CanvasProperty<Float> rx, CanvasProperty<Float> ry,
-            CanvasProperty<Paint> paint);
-
-    public static void setProperty(String name, String value) {
-        DisplayListCanvas.setProperty(name, value);
-    }
-}
diff --git a/core/java/android/view/HardwareRenderer.java b/core/java/android/view/HardwareRenderer.java
index afa7f51..6632f39 100644
--- a/core/java/android/view/HardwareRenderer.java
+++ b/core/java/android/view/HardwareRenderer.java
@@ -326,7 +326,7 @@
          *
          * @param canvas The Canvas used to render the view.
          */
-        void onHardwarePreDraw(HardwareCanvas canvas);
+        void onHardwarePreDraw(DisplayListCanvas canvas);
 
         /**
          * Invoked after a view is drawn by a hardware renderer.
@@ -334,7 +334,7 @@
          *
          * @param canvas The Canvas used to render the view.
          */
-        void onHardwarePostDraw(HardwareCanvas canvas);
+        void onHardwarePostDraw(DisplayListCanvas canvas);
     }
 
     /**
diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl
index 8ac8bc5..d6625c8 100644
--- a/core/java/android/view/IWindowManager.aidl
+++ b/core/java/android/view/IWindowManager.aidl
@@ -16,6 +16,7 @@
 
 package android.view;
 
+import com.android.internal.app.IAssistScreenshotReceiver;
 import com.android.internal.view.IInputContext;
 import com.android.internal.view.IInputMethodClient;
 
@@ -220,10 +221,14 @@
     boolean isRotationFrozen();
 
     /**
+     * Used only for assist -- request a screenshot of the current application.
+     */
+    boolean requestAssistScreenshot(IAssistScreenshotReceiver receiver);
+
+    /**
      * Create a screenshot of the applications currently displayed.
      */
-    Bitmap screenshotApplications(IBinder appToken, int displayId, int maxWidth,
-            int maxHeight, boolean force565);
+    Bitmap screenshotApplications(IBinder appToken, int displayId, int maxWidth, int maxHeight);
 
     /**
      * Called by the status bar to notify Views of changes to System UI visiblity.
diff --git a/core/java/android/view/PhoneWindow.java b/core/java/android/view/PhoneWindow.java
index 8aef18a..05796bb 100644
--- a/core/java/android/view/PhoneWindow.java
+++ b/core/java/android/view/PhoneWindow.java
@@ -1759,7 +1759,8 @@
                 } else {
                     MediaSessionLegacyHelper.getHelper(getContext()).sendAdjustVolumeBy(
                             mVolumeControlStreamType, direction,
-                            AudioManager.FLAG_SHOW_UI | AudioManager.FLAG_VIBRATE);
+                            AudioManager.FLAG_SHOW_UI | AudioManager.FLAG_VIBRATE
+                                    | AudioManager.FLAG_FROM_KEY);
                 }
                 return true;
             }
@@ -1837,15 +1838,15 @@
         switch (keyCode) {
             case KeyEvent.KEYCODE_VOLUME_UP:
             case KeyEvent.KEYCODE_VOLUME_DOWN: {
+                final int flags = AudioManager.FLAG_PLAY_SOUND | AudioManager.FLAG_VIBRATE
+                        | AudioManager.FLAG_FROM_KEY;
                 // If we have a session send it the volume command, otherwise
                 // use the suggested stream.
                 if (mMediaController != null) {
-                    mMediaController.adjustVolume(0, AudioManager.FLAG_PLAY_SOUND
-                            | AudioManager.FLAG_VIBRATE);
+                    mMediaController.adjustVolume(0, flags);
                 } else {
                     MediaSessionLegacyHelper.getHelper(getContext()).sendAdjustVolumeBy(
-                            mVolumeControlStreamType, 0,
-                            AudioManager.FLAG_PLAY_SOUND | AudioManager.FLAG_VIBRATE);
+                            mVolumeControlStreamType, 0, flags);
                 }
                 return true;
             }
@@ -2669,17 +2670,13 @@
         @Override
         public ActionMode startActionModeForChild(View originalView,
                 ActionMode.Callback callback) {
-            // originalView can be used here to be sure that we don't obscure
-            // relevant content with the context mode UI.
-            return startActionMode(callback);
+            return startActionModeForChild(originalView, callback, ActionMode.TYPE_PRIMARY);
         }
 
         @Override
         public ActionMode startActionModeForChild(
                 View child, ActionMode.Callback callback, int type) {
-            // originalView can be used here to be sure that we don't obscure
-            // relevant content with the context mode UI.
-            return startActionMode(callback, type);
+            return startActionMode(child, callback, type);
         }
 
         @Override
@@ -2689,7 +2686,12 @@
 
         @Override
         public ActionMode startActionMode(ActionMode.Callback callback, int type) {
-            ActionMode.Callback wrappedCallback = new ActionModeCallbackWrapper(callback);
+            return startActionMode(this, callback, type);
+        }
+
+        private ActionMode startActionMode(
+                View originatingView, ActionMode.Callback callback, int type) {
+            ActionMode.Callback2 wrappedCallback = new ActionModeCallback2Wrapper(callback);
             ActionMode mode = null;
             if (getCallback() != null && !isDestroyed()) {
                 try {
@@ -2979,8 +2981,8 @@
 
                             if (mStatusGuard == null) {
                                 mStatusGuard = new View(mContext);
-                                mStatusGuard.setBackgroundColor(mContext.getResources()
-                                        .getColor(R.color.input_method_navigation_guard));
+                                mStatusGuard.setBackgroundColor(mContext.getColor(
+                                        R.color.input_method_navigation_guard));
                                 addView(mStatusGuard, indexOfChild(mStatusColorViewState.view),
                                         new LayoutParams(LayoutParams.MATCH_PARENT,
                                                 mlp.topMargin, Gravity.START | Gravity.TOP));
@@ -3039,8 +3041,8 @@
                 // position the navigation guard view, creating it if necessary
                 if (mNavigationGuard == null) {
                     mNavigationGuard = new View(mContext);
-                    mNavigationGuard.setBackgroundColor(mContext.getResources()
-                            .getColor(R.color.input_method_navigation_guard));
+                    mNavigationGuard.setBackgroundColor(mContext.getColor(
+                            R.color.input_method_navigation_guard));
                     addView(mNavigationGuard, indexOfChild(mNavigationColorViewState.view),
                             new LayoutParams(LayoutParams.MATCH_PARENT,
                                     insets.getSystemWindowInsetBottom(),
@@ -3291,12 +3293,12 @@
         }
 
         /**
-         * Clears out internal reference when the action mode is destroyed.
+         * Clears out internal references when the action mode is destroyed.
          */
-        private class ActionModeCallbackWrapper implements ActionMode.Callback {
-            private ActionMode.Callback mWrapped;
+        private class ActionModeCallback2Wrapper extends ActionMode.Callback2 {
+            private final ActionMode.Callback mWrapped;
 
-            public ActionModeCallbackWrapper(ActionMode.Callback wrapped) {
+            public ActionModeCallback2Wrapper(ActionMode.Callback wrapped) {
                 mWrapped = wrapped;
             }
 
diff --git a/core/java/android/view/RenderNode.java b/core/java/android/view/RenderNode.java
index 38867a8..ef98bbc 100644
--- a/core/java/android/view/RenderNode.java
+++ b/core/java/android/view/RenderNode.java
@@ -26,7 +26,7 @@
 /**
  * <p>A display list records a series of graphics related operations and can replay
  * them later. Display lists are usually built by recording operations on a
- * {@link HardwareCanvas}. Replaying the operations from a display list avoids
+ * {@link DisplayListCanvas}. Replaying the operations from a display list avoids
  * executing application code on every frame, and is thus much more efficient.</p>
  *
  * <p>Display lists are used internally for all views by default, and are not
@@ -43,7 +43,7 @@
  * affected paragraph needs to be recorded again.</p>
  *
  * <h3>Hardware acceleration</h3>
- * <p>Display lists can only be replayed using a {@link HardwareCanvas}. They are not
+ * <p>Display lists can only be replayed using a {@link DisplayListCanvas}. They are not
  * supported in software. Always make sure that the {@link android.graphics.Canvas}
  * you are using to render a display list is hardware accelerated using
  * {@link android.graphics.Canvas#isHardwareAccelerated()}.</p>
@@ -53,7 +53,7 @@
  *     HardwareRenderer renderer = myView.getHardwareRenderer();
  *     if (renderer != null) {
  *         DisplayList displayList = renderer.createDisplayList();
- *         HardwareCanvas canvas = displayList.start(width, height);
+ *         DisplayListCanvas canvas = displayList.start(width, height);
  *         try {
  *             // Draw onto the canvas
  *             // For instance: canvas.drawBitmap(...);
@@ -67,8 +67,8 @@
  * <pre class="prettyprint">
  *     protected void onDraw(Canvas canvas) {
  *         if (canvas.isHardwareAccelerated()) {
- *             HardwareCanvas hardwareCanvas = (HardwareCanvas) canvas;
- *             hardwareCanvas.drawDisplayList(mDisplayList);
+ *             DisplayListCanvas displayListCanvas = (DisplayListCanvas) canvas;
+ *             displayListCanvas.drawDisplayList(mDisplayList);
  *         }
  *     }
  * </pre>
@@ -92,7 +92,7 @@
  * <pre class="prettyprint">
  *     private void createDisplayList() {
  *         mDisplayList = DisplayList.create("MyDisplayList");
- *         HardwareCanvas canvas = mDisplayList.start(width, height);
+ *         DisplayListCanvas canvas = mDisplayList.start(width, height);
  *         try {
  *             for (Bitmap b : mBitmaps) {
  *                 canvas.drawBitmap(b, 0.0f, 0.0f, null);
@@ -105,8 +105,8 @@
  *
  *     protected void onDraw(Canvas canvas) {
  *         if (canvas.isHardwareAccelerated()) {
- *             HardwareCanvas hardwareCanvas = (HardwareCanvas) canvas;
- *             hardwareCanvas.drawDisplayList(mDisplayList);
+ *             DisplayListCanvas displayListCanvas = (DisplayListCanvas) canvas;
+ *             displayListCanvas.drawDisplayList(mDisplayList);
  *         }
  *     }
  *
@@ -128,7 +128,7 @@
 public class RenderNode {
     /**
      * Flag used when calling
-     * {@link HardwareCanvas#drawRenderNode(RenderNode, android.graphics.Rect, int)}
+     * {@link DisplayListCanvas#drawRenderNode
      * When this flag is set, draw operations lying outside of the bounds of the
      * display list will be culled early. It is recommeneded to always set this
      * flag.
@@ -140,29 +140,29 @@
     /**
      * Indicates that the display list is done drawing.
      *
-     * @see HardwareCanvas#drawRenderNode(RenderNode, android.graphics.Rect, int)
+     * @see DisplayListCanvas#drawRenderNode(RenderNode, int)
      */
     public static final int STATUS_DONE = 0x0;
 
     /**
      * Indicates that the display list needs another drawing pass.
      *
-     * @see HardwareCanvas#drawRenderNode(RenderNode, android.graphics.Rect, int)
+     * @see DisplayListCanvas#drawRenderNode(RenderNode, int)
      */
     public static final int STATUS_DRAW = 0x1;
 
     /**
      * Indicates that the display list needs to re-execute its GL functors.
      *
-     * @see HardwareCanvas#drawRenderNode(RenderNode, android.graphics.Rect, int)
-     * @see HardwareCanvas#callDrawGLFunction(long)
+     * @see DisplayListCanvas#drawRenderNode(RenderNode, int)
+     * @see DisplayListCanvas#callDrawGLFunction2(long)
      */
     public static final int STATUS_INVOKE = 0x2;
 
     /**
      * Indicates that the display list performed GL drawing operations.
      *
-     * @see HardwareCanvas#drawRenderNode(RenderNode, android.graphics.Rect, int)
+     * @see DisplayListCanvas#drawRenderNode(RenderNode, int)
      */
     public static final int STATUS_DREW = 0x4;
 
@@ -213,7 +213,7 @@
      * stored in this display list.
      *
      * Calling this method will mark the render node invalid until
-     * {@link #end(HardwareCanvas)} is called.
+     * {@link #end(DisplayListCanvas)} is called.
      * Only valid render nodes can be replayed.
      *
      * @param width The width of the recording viewport
@@ -221,11 +221,11 @@
      *
      * @return A canvas to record drawing operations.
      *
-     * @see #end(HardwareCanvas)
+     * @see #end(DisplayListCanvas)
      * @see #isValid()
      */
-    public HardwareCanvas start(int width, int height) {
-        HardwareCanvas canvas = DisplayListCanvas.obtain(this);
+    public DisplayListCanvas start(int width, int height) {
+        DisplayListCanvas canvas = DisplayListCanvas.obtain(this);
         canvas.setViewport(width, height);
         // The dirty rect should always be null for a display list
         canvas.onPreDraw(null);
@@ -240,7 +240,7 @@
      * @see #start(int, int)
      * @see #isValid()
      */
-    public void end(HardwareCanvas endCanvas) {
+    public void end(DisplayListCanvas endCanvas) {
         if (!(endCanvas instanceof DisplayListCanvas)) {
             throw new IllegalArgumentException("Passed an invalid canvas to end!");
         }
diff --git a/core/java/android/view/Surface.java b/core/java/android/view/Surface.java
index 83b8100..6de4d3e 100644
--- a/core/java/android/view/Surface.java
+++ b/core/java/android/view/Surface.java
@@ -572,7 +572,7 @@
     private final class HwuiContext {
         private final RenderNode mRenderNode;
         private long mHwuiRenderer;
-        private HardwareCanvas mCanvas;
+        private DisplayListCanvas mCanvas;
 
         HwuiContext() {
             mRenderNode = RenderNode.create("HwuiCanvas", null);
diff --git a/core/java/android/view/ThreadedRenderer.java b/core/java/android/view/ThreadedRenderer.java
index 51fefe9..031be07 100644
--- a/core/java/android/view/ThreadedRenderer.java
+++ b/core/java/android/view/ThreadedRenderer.java
@@ -276,7 +276,7 @@
         updateViewTreeDisplayList(view);
 
         if (mRootNodeNeedsUpdate || !mRootNode.isValid()) {
-            HardwareCanvas canvas = mRootNode.start(mSurfaceWidth, mSurfaceHeight);
+            DisplayListCanvas canvas = mRootNode.start(mSurfaceWidth, mSurfaceHeight);
             try {
                 final int saveCount = canvas.save();
                 canvas.translate(mInsetLeft, mInsetTop);
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index d345bed..f5de8e3 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -14216,7 +14216,7 @@
             int height = mBottom - mTop;
             int layerType = getLayerType();
 
-            final HardwareCanvas canvas = renderNode.start(width, height);
+            final DisplayListCanvas canvas = renderNode.start(width, height);
             canvas.setHighContrastText(mAttachInfo.mHighContrastText);
 
             try {
@@ -15197,7 +15197,7 @@
                 if (layer != null && layer.isValid()) {
                     int restoreAlpha = mLayerPaint.getAlpha();
                     mLayerPaint.setAlpha((int) (alpha * 255));
-                    ((HardwareCanvas) canvas).drawHardwareLayer(layer, 0, 0, mLayerPaint);
+                    ((DisplayListCanvas) canvas).drawHardwareLayer(layer, 0, 0, mLayerPaint);
                     mLayerPaint.setAlpha(restoreAlpha);
                     layerRendered = true;
                 } else {
@@ -15220,7 +15220,7 @@
                     }
                 } else {
                     mPrivateFlags &= ~PFLAG_DIRTY_MASK;
-                    ((HardwareCanvas) canvas).drawRenderNode(renderNode, flags);
+                    ((DisplayListCanvas) canvas).drawRenderNode(renderNode, flags);
                 }
             }
         } else if (cache != null) {
@@ -15494,7 +15494,7 @@
             final RenderNode renderNode = mBackgroundRenderNode;
             if (renderNode != null && renderNode.isValid()) {
                 setBackgroundRenderNodeProperties(renderNode);
-                ((HardwareCanvas) canvas).drawRenderNode(renderNode);
+                ((DisplayListCanvas) canvas).drawRenderNode(renderNode);
                 return;
             }
         }
@@ -15531,7 +15531,7 @@
         final Rect bounds = drawable.getBounds();
         final int width = bounds.width();
         final int height = bounds.height();
-        final HardwareCanvas canvas = renderNode.start(width, height);
+        final DisplayListCanvas canvas = renderNode.start(width, height);
 
         // Reverse left/top translation done by drawable canvas, which will
         // instead be applied by rendernode's LTRB bounds below. This way, the
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 1473806..e790d4c 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -2309,12 +2309,12 @@
     final Paint mResizePaint = new Paint();
 
     @Override
-    public void onHardwarePreDraw(HardwareCanvas canvas) {
+    public void onHardwarePreDraw(DisplayListCanvas canvas) {
         canvas.translate(-mHardwareXOffset, -mHardwareYOffset);
     }
 
     @Override
-    public void onHardwarePostDraw(HardwareCanvas canvas) {
+    public void onHardwarePostDraw(DisplayListCanvas canvas) {
         if (mResizeBuffer != null) {
             mResizePaint.setAlpha(mResizeAlpha);
             canvas.drawHardwareLayer(mResizeBuffer, mHardwareXOffset, mHardwareYOffset,
diff --git a/core/java/android/view/WindowManagerGlobal.java b/core/java/android/view/WindowManagerGlobal.java
index 1cebe3f..57558ff 100644
--- a/core/java/android/view/WindowManagerGlobal.java
+++ b/core/java/android/view/WindowManagerGlobal.java
@@ -249,12 +249,12 @@
         final WindowManager.LayoutParams wparams = (WindowManager.LayoutParams) params;
         if (parentWindow != null) {
             parentWindow.adjustLayoutParamsForSubWindow(wparams);
-        } else if (ActivityManager.isHighEndGfx()) {
-            // If there's no parent and we're running on L or above (or in the
-            // system context), assume we want hardware acceleration.
+        } else {
+            // If there's no parent, then hardware acceleration for this view is
+            // set from the application's hardware acceleration setting.
             final Context context = view.getContext();
-            if (context != null && context.getApplicationInfo().targetSdkVersion
-                    >= Build.VERSION_CODES.LOLLIPOP) {
+            if (context != null
+                    && context.getApplicationInfo().hardwareAccelerated) {
                 wparams.flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
             }
         }
diff --git a/core/java/android/view/accessibility/AccessibilityWindowInfo.java b/core/java/android/view/accessibility/AccessibilityWindowInfo.java
index e1942be..a75e8a7 100644
--- a/core/java/android/view/accessibility/AccessibilityWindowInfo.java
+++ b/core/java/android/view/accessibility/AccessibilityWindowInfo.java
@@ -573,7 +573,7 @@
         if (other.mType != mType) {
             throw new IllegalArgumentException("Not same type.");
         }
-        if (!mBoundsInScreen.equals(mBoundsInScreen)) {
+        if (!mBoundsInScreen.equals(other.mBoundsInScreen)) {
             return true;
         }
         if (mLayer != other.mLayer) {
diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java
index 0996810..78604bf 100644
--- a/core/java/android/view/inputmethod/InputMethodManager.java
+++ b/core/java/android/view/inputmethod/InputMethodManager.java
@@ -1992,8 +1992,8 @@
                 List<Object> info = mService.getShortcutInputMethodsAndSubtypes();
                 // "info" has imi1, subtype1, subtype2, imi2, subtype2, imi3, subtype3..in the list
                 ArrayList<InputMethodSubtype> subtypes = null;
-                final int N = info.size();
-                if (info != null && N > 0) {
+                if (info != null && !info.isEmpty()) {
+                    final int N = info.size();
                     for (int i = 0; i < N; ++i) {
                         Object o = info.get(i);
                         if (o instanceof InputMethodInfo) {
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 67ad642..6711a6b 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -364,6 +364,20 @@
     }
 
     /**
+     * Callback interface supplied to {@link #insertVisualStateCallback} for receiving
+     * notifications about the visual state.
+     */
+    public static abstract class VisualStateCallback {
+        /**
+         * Invoked when the visual state is ready to be drawn in the next {@link #onDraw}.
+         *
+         * @param requestId the id supplied to the corresponding {@link #insertVisualStateCallback}
+         * request
+         */
+        public abstract void onComplete(long requestId);
+    }
+
+    /**
      * Interface to listen for new pictures as they change.
      *
      * @deprecated This interface is now obsolete.
@@ -1144,6 +1158,60 @@
     }
 
     /**
+     * Inserts a {@link VisualStateCallback}.
+     *
+     * <p>Updates to the the DOM are reflected asynchronously such that when the DOM is updated the
+     * subsequent {@link WebView#onDraw} invocation might not reflect those updates. The
+     * {@link VisualStateCallback} provides a mechanism to notify the caller when the contents of
+     * the DOM at the current time are ready to be drawn the next time the {@link WebView} draws.
+     * By current time we mean the time at which this API was called. The next draw after the
+     * callback completes is guaranteed to reflect all the updates to the DOM applied before the
+     * current time, but it may also contain updates applied after the current time.</p>
+     *
+     * <p>The state of the DOM covered by this API includes the following:
+     * <ul>
+     * <li>primitive HTML elements (div, img, span, etc..)</li>
+     * <li>images</li>
+     * <li>CSS animations</li>
+     * <li>WebGL</li>
+     * <li>canvas</li>
+     * </ul>
+     * It does not include the state of:
+     * <ul>
+     * <li>the video tag</li>
+     * </ul></p>
+     *
+     * <p>To guarantee that the {@link WebView} will successfully render the first frame
+     * after the {@link VisualStateCallback#onComplete} method has been called a set of conditions
+     * must be met:
+     * <ul>
+     * <li>If the {@link WebView}'s visibility is set to {@link View#VISIBLE VISIBLE} then
+     * the {@link WebView} must be attached to the view hierarchy.</li>
+     * <li>If the {@link WebView}'s visibility is set to {@link View#INVISIBLE INVISIBLE}
+     * then the {@link WebView} must be attached to the view hierarchy and must be made
+     * {@link View#VISIBLE VISIBLE} from the {@link VisualStateCallback#onComplete} method.</li>
+     * <li>If the {@link WebView}'s visibility is set to {@link View#GONE GONE} then the
+     * {@link WebView} must be attached to the view hierarchy and its
+     * {@link AbsoluteLayout.LayoutParams LayoutParams}'s width and height need to be set to fixed
+     * values and must be made {@link View#VISIBLE VISIBLE} from the
+     * {@link VisualStateCallback#onComplete} method.</li>
+     * </ul></p>
+     *
+     * <p>When using this API it is also recommended to enable pre-rasterization if the
+     * {@link WebView} is offscreen to avoid flickering. See WebSettings#setOffscreenPreRaster for
+     * more details and do consider its caveats.</p>
+     *
+     * @param requestId an id that will be returned in the callback to allow callers to match
+     * requests with callbacks.
+     * @param callback the callback to be invoked.
+     */
+    public void insertVisualStateCallback(long requestId, VisualStateCallback callback) {
+        checkThread();
+        if (TRACE) Log.d(LOGTAG, "insertVisualStateCallback");
+        mProvider.insertVisualStateCallback(requestId, callback);
+    }
+
+    /**
      * Clears this WebView so that onDraw() will draw nothing but white background,
      * and onMeasure() will return 0 if MeasureSpec is not MeasureSpec.EXACTLY.
      * @deprecated Use WebView.loadUrl("about:blank") to reliably reset the view state
diff --git a/core/java/android/webkit/WebViewClient.java b/core/java/android/webkit/WebViewClient.java
index 34b8cf6..53c7e04 100644
--- a/core/java/android/webkit/WebViewClient.java
+++ b/core/java/android/webkit/WebViewClient.java
@@ -83,6 +83,32 @@
     }
 
     /**
+     * Notify the host application that the page commit is visible.
+     *
+     * <p>This is the earliest point at which we can guarantee that the contents of the previously
+     * loaded page will not longer be drawn in the next {@link WebView#onDraw}. The next draw will
+     * render the {@link WebView#setBackgroundColor background color} of the WebView or some of the
+     * contents from the committed page already. This callback may be useful when reusing
+     * {@link WebView}s to ensure that no stale content is shown. This method is only called for
+     * the main frame.</p>
+     *
+     * <p>This method is called when the state of the DOM at the point at which the
+     * body of the HTTP response (commonly the string of html) had started loading will be visible.
+     * If you set a background color for the page in the HTTP response body this will most likely
+     * be visible and perhaps some other elements. At that point no other resources had usually
+     * been loaded, so you can expect images for example to not be visible. If you want
+     * a finer level of granularity consider calling {@link WebView#insertVisualStateCallback}
+     * directly.</p>
+     *
+     * <p>Please note that all the conditions and recommendations presented in
+     * {@link WebView#insertVisualStateCallback} also apply to this API.<p>
+     *
+     * @param url the url of the committed page
+     */
+    public void onPageCommitVisible(WebView view, String url) {
+    }
+
+    /**
      * Notify the host application of a resource request and allow the
      * application to return the data.  If the return value is null, the WebView
      * will continue to load the resource as usual.  Otherwise, the return
diff --git a/core/java/android/webkit/WebViewDelegate.java b/core/java/android/webkit/WebViewDelegate.java
index ac360fa..23af384 100644
--- a/core/java/android/webkit/WebViewDelegate.java
+++ b/core/java/android/webkit/WebViewDelegate.java
@@ -25,7 +25,7 @@
 import android.os.SystemProperties;
 import android.os.Trace;
 import android.util.SparseArray;
-import android.view.HardwareCanvas;
+import android.view.DisplayListCanvas;
 import android.view.View;
 import android.view.ViewRootImpl;
 
@@ -101,12 +101,12 @@
      * @throws IllegalArgumentException if the canvas is not hardware accelerated
      */
     public void callDrawGlFunction(Canvas canvas, long nativeDrawGLFunctor) {
-        if (!(canvas instanceof HardwareCanvas)) {
+        if (!(canvas instanceof DisplayListCanvas)) {
             // Canvas#isHardwareAccelerated() is only true for subclasses of HardwareCanvas.
             throw new IllegalArgumentException(canvas.getClass().getName()
-                    + " is not hardware accelerated");
+                    + " is not a DisplayList canvas");
         }
-        ((HardwareCanvas) canvas).callDrawGLFunction2(nativeDrawGLFunctor);
+        ((DisplayListCanvas) canvas).callDrawGLFunction2(nativeDrawGLFunctor);
     }
 
     /**
@@ -153,7 +153,7 @@
     }
 
     /**
-     * Adds the WebView asset path to {@link AssetManager}.
+     * Adds the WebView asset path to {@link android.content.res.AssetManager}.
      */
     public void addWebViewAssetPath(Context context) {
         context.getAssets().addAssetPath(
diff --git a/core/java/android/webkit/WebViewProvider.java b/core/java/android/webkit/WebViewProvider.java
index 0cdb875..fa2ce1b 100644
--- a/core/java/android/webkit/WebViewProvider.java
+++ b/core/java/android/webkit/WebViewProvider.java
@@ -40,6 +40,8 @@
 import android.view.inputmethod.InputConnection;
 import android.webkit.WebView.HitTestResult;
 import android.webkit.WebView.PictureListener;
+import android.webkit.WebView.VisualStateCallback;
+
 
 import java.io.BufferedWriter;
 import java.io.File;
@@ -146,6 +148,8 @@
 
     public boolean pageDown(boolean bottom);
 
+    public void insertVisualStateCallback(long requestId, VisualStateCallback callback);
+
     public void clearView();
 
     public Picture capturePicture();
diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java
index d93b212..fd34415 100644
--- a/core/java/android/widget/Editor.java
+++ b/core/java/android/widget/Editor.java
@@ -77,14 +77,14 @@
 import android.util.Log;
 import android.view.ActionMode;
 import android.view.ActionMode.Callback;
-import android.view.RenderNode;
+import android.view.DisplayListCanvas;
 import android.view.DragEvent;
 import android.view.Gravity;
-import android.view.HardwareCanvas;
 import android.view.LayoutInflater;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.MotionEvent;
+import android.view.RenderNode;
 import android.view.View;
 import android.view.View.DragShadowBuilder;
 import android.view.View.OnClickListener;
@@ -236,12 +236,17 @@
     }
 
     ParcelableParcel saveInstanceState() {
-        // For now there is only undo state.
-        return (ParcelableParcel) mUndoManager.saveInstanceState();
+        ParcelableParcel state = new ParcelableParcel(getClass().getClassLoader());
+        Parcel parcel = state.getParcel();
+        mUndoManager.saveInstanceState(parcel);
+        mUndoInputFilter.saveInstanceState(parcel);
+        return state;
     }
 
     void restoreInstanceState(ParcelableParcel state) {
-        mUndoManager.restoreInstanceState(state);
+        Parcel parcel = state.getParcel();
+        mUndoManager.restoreInstanceState(parcel, state.getClassLoader());
+        mUndoInputFilter.restoreInstanceState(parcel);
         // Re-associate this object as the owner of undo state.
         mUndoOwner = mUndoManager.getOwner(UNDO_OWNER_TAG, this);
     }
@@ -309,7 +314,7 @@
             mTextView.setHasTransientState(false);
 
             // We had an active selection from before, start the selection mode.
-            startSelectionActionMode();
+            startSelectionActionModeWithSelection();
         }
 
         getPositionListener().addSubscriber(mCursorAnchorInfoNotifier, true);
@@ -976,14 +981,15 @@
     }
 
     public boolean performLongClick(boolean handled) {
-        // Long press in empty space moves cursor and shows the Paste affordance if available.
+        // Long press in empty space moves cursor and starts the selection action mode.
         if (!handled && !isPositionOnText(mLastDownPositionX, mLastDownPositionY) &&
                 mInsertionControllerEnabled) {
             final int offset = mTextView.getOffsetForPosition(mLastDownPositionX,
                     mLastDownPositionY);
             stopSelectionActionMode();
             Selection.setSelection((Spannable) mTextView.getText(), offset);
-            getInsertionController().showWithActionPopup();
+            getInsertionController().show();
+            startSelectionActionModeWithoutSelection();
             handled = true;
         }
 
@@ -999,14 +1005,14 @@
                 stopSelectionActionMode();
             } else {
                 stopSelectionActionMode();
-                startSelectionActionMode();
+                startSelectionActionModeWithSelection();
             }
             handled = true;
         }
 
         // Start a new selection
         if (!handled) {
-            handled = startSelectionActionMode();
+            handled = startSelectionActionModeWithSelection();
         }
 
         return handled;
@@ -1508,18 +1514,18 @@
 
                     // Rebuild display list if it is invalid
                     if (blockDisplayListIsInvalid) {
-                        final HardwareCanvas hardwareCanvas = blockDisplayList.start(
+                        final DisplayListCanvas displayListCanvas = blockDisplayList.start(
                                 right - left, bottom - top);
                         try {
                             // drawText is always relative to TextView's origin, this translation
                             // brings this range of text back to the top left corner of the viewport
-                            hardwareCanvas.translate(-left, -top);
-                            layout.drawText(hardwareCanvas, blockBeginLine, blockEndLine);
+                            displayListCanvas.translate(-left, -top);
+                            layout.drawText(displayListCanvas, blockBeginLine, blockEndLine);
                             mTextDisplayLists[blockIndex].isDirty = false;
                             // No need to untranslate, previous context is popped after
                             // drawDisplayList
                         } finally {
-                            blockDisplayList.end(hardwareCanvas);
+                            blockDisplayList.end(displayListCanvas);
                             // Same as drawDisplayList below, handled by our TextView's parent
                             blockDisplayList.setClipToBounds(false);
                         }
@@ -1530,7 +1536,7 @@
                     blockDisplayList.setLeftTopRightBottom(left, top, right, bottom);
                 }
 
-                ((HardwareCanvas) canvas).drawRenderNode(blockDisplayList,
+                ((DisplayListCanvas) canvas).drawRenderNode(blockDisplayList,
                         0 /* no child clipping, our TextView parent enforces it */);
 
                 endOfPreviousBlock = blockEndLine;
@@ -1657,7 +1663,21 @@
     /**
      * @return true if the selection mode was actually started.
      */
-    boolean startSelectionActionMode() {
+    private boolean startSelectionActionModeWithoutSelection() {
+        if (mSelectionActionMode != null) {
+            // Selection action mode is already started
+            // TODO: revisit invocations to minimize this case.
+            return false;
+        }
+        ActionMode.Callback actionModeCallback = new SelectionActionModeCallback();
+        mSelectionActionMode = mTextView.startActionMode(actionModeCallback);
+        return mSelectionActionMode != null;
+    }
+
+    /**
+     * @return true if the selection mode was actually started.
+     */
+    boolean startSelectionActionModeWithSelection() {
         if (mSelectionActionMode != null) {
             // Selection action mode is already started
             return false;
@@ -3254,7 +3274,7 @@
                             if (isTopLeftVisible || isBottomRightVisible) {
                                 characterBoundsFlags |= CursorAnchorInfo.FLAG_HAS_VISIBLE_REGION;
                             }
-                            if (!isTopLeftVisible || !isTopLeftVisible) {
+                            if (!isTopLeftVisible || !isBottomRightVisible) {
                                 characterBoundsFlags |= CursorAnchorInfo.FLAG_HAS_INVISIBLE_REGION;
                             }
                             if (isRtl) {
@@ -3320,14 +3340,10 @@
         private float mIdealVerticalOffset;
         // Parent's (TextView) previous position in window
         private int mLastParentX, mLastParentY;
-        // Transient action popup window for Paste and Replace actions
-        protected ActionPopupWindow mActionPopupWindow;
         // Previous text character offset
         private int mPreviousOffset = -1;
         // Previous text character offset
         private boolean mPositionHasChanged = true;
-        // Used to delay the appearance of the action popup window
-        private Runnable mActionPopupShower;
         // Minimum touch target size for handles
         private int mMinSize;
         // Indicates the line of text that the handle is on.
@@ -3429,8 +3445,6 @@
             // Make sure the offset is always considered new, even when focusing at same position
             mPreviousOffset = -1;
             positionAtCursorOffset(getCurrentCursorOffset(), false);
-
-            hideActionPopupWindow();
         }
 
         protected void dismiss() {
@@ -3445,31 +3459,6 @@
             getPositionListener().removeSubscriber(this);
         }
 
-        void showActionPopupWindow(int delay) {
-            if (mActionPopupWindow == null) {
-                mActionPopupWindow = new ActionPopupWindow();
-            }
-            if (mActionPopupShower == null) {
-                mActionPopupShower = new Runnable() {
-                    public void run() {
-                        mActionPopupWindow.show();
-                    }
-                };
-            } else {
-                mTextView.removeCallbacks(mActionPopupShower);
-            }
-            mTextView.postDelayed(mActionPopupShower, delay);
-        }
-
-        protected void hideActionPopupWindow() {
-            if (mActionPopupShower != null) {
-                mTextView.removeCallbacks(mActionPopupShower);
-            }
-            if (mActionPopupWindow != null) {
-                mActionPopupWindow.hide();
-            }
-        }
-
         public boolean isShowing() {
             return mContainer.isShowing();
         }
@@ -3670,20 +3659,16 @@
             return mIsDragging;
         }
 
-        void onHandleMoved() {
-            hideActionPopupWindow();
-        }
+        void onHandleMoved() {}
 
-        public void onDetached() {
-            hideActionPopupWindow();
-        }
+        public void onDetached() {}
     }
 
     private class InsertionHandleView extends HandleView {
         private static final int DELAY_BEFORE_HANDLE_FADES_OUT = 4000;
         private static final int RECENT_CUT_COPY_DURATION = 15 * 1000; // seconds
 
-        // Used to detect taps on the insertion handle, which will affect the ActionPopupWindow
+        // Used to detect taps on the insertion handle, which will affect the selection action mode
         private float mDownPositionX, mDownPositionY;
         private Runnable mHider;
 
@@ -3698,17 +3683,12 @@
             final long durationSinceCutOrCopy =
                     SystemClock.uptimeMillis() - TextView.LAST_CUT_OR_COPY_TIME;
             if (durationSinceCutOrCopy < RECENT_CUT_COPY_DURATION) {
-                showActionPopupWindow(0);
+                startSelectionActionModeWithoutSelection();
             }
 
             hideAfterDelay();
         }
 
-        public void showWithActionPopup() {
-            show();
-            showActionPopupWindow(0);
-        }
-
         private void hideAfterDelay() {
             if (mHider == null) {
                 mHider = new Runnable() {
@@ -3770,11 +3750,11 @@
                         final int touchSlop = viewConfiguration.getScaledTouchSlop();
 
                         if (distanceSquared < touchSlop * touchSlop) {
-                            if (mActionPopupWindow != null && mActionPopupWindow.isShowing()) {
-                                // Tapping on the handle dismisses the displayed action popup
-                                mActionPopupWindow.hide();
+                            // Tapping on the handle toggles the selection action mode.
+                            if (mSelectionActionMode != null) {
+                                mSelectionActionMode.finish();
                             } else {
-                                showWithActionPopup();
+                                startSelectionActionModeWithoutSelection();
                             }
                         }
                     }
@@ -3909,10 +3889,6 @@
             }
         }
 
-        public ActionPopupWindow getActionPopupWindow() {
-            return mActionPopupWindow;
-        }
-
         @Override
         public boolean onTouchEvent(MotionEvent event) {
             boolean superResult = super.onTouchEvent(event);
@@ -4013,10 +3989,6 @@
             }
         }
 
-        public void setActionPopupWindow(ActionPopupWindow actionPopupWindow) {
-            mActionPopupWindow = actionPopupWindow;
-        }
-
         @Override
         public boolean onTouchEvent(MotionEvent event) {
             boolean superResult = super.onTouchEvent(event);
@@ -4059,10 +4031,6 @@
             getHandle().show();
         }
 
-        public void showWithActionPopup() {
-            getHandle().showWithActionPopup();
-        }
-
         public void hide() {
             if (mHandle != null) {
                 mHandle.hide();
@@ -4149,11 +4117,6 @@
             mStartHandle.show();
             mEndHandle.show();
 
-            // Make sure both left and right handles share the same ActionPopupWindow (so that
-            // moving any of the handles hides the action popup).
-            mStartHandle.showActionPopupWindow(DELAY_BEFORE_REPLACE_ACTION);
-            mEndHandle.setActionPopupWindow(mStartHandle.getActionPopupWindow());
-
             hideInsertionPointCursorController();
         }
 
@@ -4203,7 +4166,7 @@
                             boolean stayedInArea = distanceSquared < doubleTapSlop * doubleTapSlop;
 
                             if (stayedInArea && isPositionOnText(x, y)) {
-                                startSelectionActionMode();
+                                startSelectionActionModeWithSelection();
                                 mDiscardNextActionUp = true;
                             }
                         }
@@ -4576,20 +4539,30 @@
         // Whether the current filter pass is directly caused by an end-user text edit.
         private boolean mIsUserEdit;
 
-        // Whether this is the first pass through the filter for a given end-user text edit.
-        private boolean mFirstFilterPass;
+        // Whether the text field is handling an IME composition. Must be parceled in case the user
+        // rotates the screen during composition.
+        private boolean mHasComposition;
 
         public UndoInputFilter(Editor editor) {
             mEditor = editor;
         }
 
+        public void saveInstanceState(Parcel parcel) {
+            parcel.writeInt(mIsUserEdit ? 1 : 0);
+            parcel.writeInt(mHasComposition ? 1 : 0);
+        }
+
+        public void restoreInstanceState(Parcel parcel) {
+            mIsUserEdit = parcel.readInt() != 0;
+            mHasComposition = parcel.readInt() != 0;
+        }
+
         /**
          * Signals that a user-triggered edit is starting.
          */
         public void beginBatchEdit() {
             if (DEBUG_UNDO) Log.d(TAG, "beginBatchEdit");
             mIsUserEdit = true;
-            mFirstFilterPass = true;
         }
 
         public void endBatchEdit() {
@@ -4610,17 +4583,63 @@
                 return null;
             }
 
+            // Check for and handle IME composition edits.
+            if (handleCompositionEdit(source, start, end, dstart)) {
+                return null;
+            }
+
+            // Handle keyboard edits.
+            handleKeyboardEdit(source, start, end, dest, dstart, dend);
+            return null;
+        }
+
+        /**
+         * Returns true iff the edit was handled, either because it should be ignored or because
+         * this function created an undo operation for it.
+         */
+        private boolean handleCompositionEdit(CharSequence source, int start, int end, int dstart) {
+            // Ignore edits while the user is composing.
+            if (isComposition(source)) {
+                mHasComposition = true;
+                return true;
+            }
+            final boolean hadComposition = mHasComposition;
+            mHasComposition = false;
+
+            // Check for the transition out of the composing state.
+            if (hadComposition) {
+                // If there was no text the user canceled composition. Ignore the edit.
+                if (start == end) {
+                    return true;
+                }
+
+                // Otherwise the user inserted the composition.
+                String newText = TextUtils.substring(source, start, end);
+                EditOperation edit = new EditOperation(mEditor, false, "", dstart, newText);
+                recordEdit(edit);
+                return true;
+            }
+
+            // This was neither a composition event nor a transition out of composing.
+            return false;
+        }
+
+        private void handleKeyboardEdit(CharSequence source, int start, int end,
+                Spanned dest, int dstart, int dend) {
             // An application may install a TextWatcher to provide additional modifications after
             // the initial input filters run (e.g. a credit card formatter that adds spaces to a
             // string). This results in multiple filter() calls for what the user considers to be
             // a single operation. Always undo the whole set of changes in one step.
-            final boolean forceMerge = !mFirstFilterPass;
-            mFirstFilterPass = false;
+            final boolean forceMerge = isInTextWatcher();
 
             // Build a new operation with all the information from this edit.
-            EditOperation edit = new EditOperation(mEditor, forceMerge,
-                    source, start, end, dest, dstart, dend);
+            String newText = TextUtils.substring(source, start, end);
+            String oldText = TextUtils.substring(dest, dstart, dend);
+            EditOperation edit = new EditOperation(mEditor, forceMerge, oldText, dstart, newText);
+            recordEdit(edit);
+        }
 
+        private void recordEdit(EditOperation edit) {
             // Fetch the last edit operation and attempt to merge in the new edit.
             final UndoManager um = mEditor.mUndoManager;
             um.beginUpdate("Edit text");
@@ -4646,7 +4665,6 @@
                 um.addOperation(edit, UndoManager.MERGE_MODE_NONE);
             }
             um.endUpdate();
-            return null;  // Text not changed.
         }
 
         private boolean canUndoEdit(CharSequence source, int start, int end,
@@ -4678,6 +4696,23 @@
 
             return true;
         }
+
+        private boolean isComposition(CharSequence source) {
+            if (!(source instanceof Spannable)) {
+                return false;
+            }
+            // This is a composition edit if the source has a non-zero-length composing span.
+            Spannable text = (Spannable) source;
+            int composeBegin = EditableInputConnection.getComposingSpanStart(text);
+            int composeEnd = EditableInputConnection.getComposingSpanEnd(text);
+            return composeBegin < composeEnd;
+        }
+
+        private boolean isInTextWatcher() {
+            CharSequence text = mEditor.mTextView.getText();
+            return (text instanceof SpannableStringBuilder)
+                    && ((SpannableStringBuilder) text).getTextWatcherDepth() > 0;
+        }
     }
 
     /**
@@ -4699,17 +4734,16 @@
         private int mNewCursorPos;
 
         /**
-         * Constructs an edit operation from a text input operation that replaces the range
-         * (dstart, dend) of dest with (start, end) of source. See {@link InputFilter#filter}.
-         * If forceMerge is true then always forcibly merge this operation with any previous one.
+         * Constructs an edit operation from a text input operation on editor that replaces the
+         * oldText starting at dstart with newText. If forceMerge is true then always forcibly
+         * merge this operation with any previous one.
          */
-        public EditOperation(Editor editor, boolean forceMerge,
-                CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
+        public EditOperation(Editor editor, boolean forceMerge, String oldText, int dstart,
+                String newText) {
             super(editor.mUndoOwner);
             mForceMerge = forceMerge;
-
-            mOldText = dest.subSequence(dstart, dend).toString();
-            mNewText = source.subSequence(start, end).toString();
+            mOldText = oldText;
+            mNewText = newText;
 
             // Determine the type of the edit and store where it occurred. Avoid storing
             // irrevelant data (e.g. mNewTextStart for a delete) because that makes the
@@ -4728,7 +4762,7 @@
 
             // Store cursor data.
             mOldCursorPos = editor.mTextView.getSelectionStart();
-            mNewCursorPos = dstart + (end - start);
+            mNewCursorPos = dstart + mNewText.length();
         }
 
         public EditOperation(Parcel src, ClassLoader loader) {
diff --git a/core/java/android/widget/FastScroller.java b/core/java/android/widget/FastScroller.java
index 133e102..21213ac 100644
--- a/core/java/android/widget/FastScroller.java
+++ b/core/java/android/widget/FastScroller.java
@@ -753,13 +753,13 @@
         final View track = mTrackImage;
         final View thumb = mThumbImage;
         final Rect container = mContainerRect;
-        final int containerWidth = container.width();
-        final int widthMeasureSpec = MeasureSpec.makeMeasureSpec(containerWidth, MeasureSpec.AT_MOST);
+        final int maxWidth = container.width();
+        final int widthMeasureSpec = MeasureSpec.makeMeasureSpec(maxWidth, MeasureSpec.AT_MOST);
         final int heightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
         track.measure(widthMeasureSpec, heightMeasureSpec);
 
         final int trackWidth = track.getMeasuredWidth();
-        final int thumbHalfHeight = thumb == null ? 0 : thumb.getHeight() / 2;
+        final int thumbHalfHeight = thumb.getHeight() / 2;
         final int left = thumb.getLeft() + (thumb.getWidth() - trackWidth) / 2;
         final int right = left + trackWidth;
         final int top = container.top + thumbHalfHeight;
diff --git a/core/java/android/widget/SuggestionsAdapter.java b/core/java/android/widget/SuggestionsAdapter.java
index 4323851..aad0625 100644
--- a/core/java/android/widget/SuggestionsAdapter.java
+++ b/core/java/android/widget/SuggestionsAdapter.java
@@ -378,7 +378,7 @@
             // Lazily get the URL color from the current theme.
             TypedValue colorValue = new TypedValue();
             context.getTheme().resolveAttribute(R.attr.textColorSearchUrl, colorValue, true);
-            mUrlColor = context.getResources().getColorStateList(colorValue.resourceId);
+            mUrlColor = context.getColorStateList(colorValue.resourceId);
         }
 
         SpannableString text = new SpannableString(url);
diff --git a/core/java/android/widget/TabHost.java b/core/java/android/widget/TabHost.java
index 110d79b0..c521f72 100644
--- a/core/java/android/widget/TabHost.java
+++ b/core/java/android/widget/TabHost.java
@@ -603,7 +603,7 @@
             if (context.getApplicationInfo().targetSdkVersion <= Build.VERSION_CODES.DONUT) {
                 // Donut apps get old color scheme
                 tabIndicator.setBackgroundResource(R.drawable.tab_indicator_v4);
-                tv.setTextColor(context.getResources().getColorStateList(R.color.tab_indicator_text_v4));
+                tv.setTextColor(context.getColorStateList(R.color.tab_indicator_text_v4));
             }
 
             return tabIndicator;
@@ -648,7 +648,7 @@
             if (context.getApplicationInfo().targetSdkVersion <= Build.VERSION_CODES.DONUT) {
                 // Donut apps get old color scheme
                 tabIndicator.setBackgroundResource(R.drawable.tab_indicator_v4);
-                tv.setTextColor(context.getResources().getColorStateList(R.color.tab_indicator_text_v4));
+                tv.setTextColor(context.getColorStateList(R.color.tab_indicator_text_v4));
             }
 
             return tabIndicator;
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 447e9ac..718ef93 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -111,8 +111,6 @@
 import android.view.HapticFeedbackConstants;
 import android.view.KeyCharacterMap;
 import android.view.KeyEvent;
-import android.view.Menu;
-import android.view.MenuItem;
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewAssistStructure;
@@ -2644,94 +2642,92 @@
     }
 
     /**
+     * Sets the text appearance from the specified style resource.
+     * <p>
+     * Use a framework-defined {@code TextAppearance} style like
+     * {@link android.R.style#TextAppearance_Material_Body1 @android:style/TextAppearance.Material.Body1}
+     * or see {@link android.R.styleable#TextAppearance TextAppearance} for the
+     * set of attributes that can be used in a custom style.
+     *
+     * @param resId the resource identifier of the style to apply
+     * @attr ref android.R.styleable#TextView_textAppearance
+     */
+    @SuppressWarnings("deprecation")
+    public void setTextAppearance(@StyleRes int resId) {
+        setTextAppearance(mContext, resId);
+    }
+
+    /**
      * Sets the text color, size, style, hint color, and highlight color
      * from the specified TextAppearance resource.
+     *
+     * @deprecated Use {@link #setTextAppearance(int)} instead.
      */
-    public void setTextAppearance(Context context, @StyleRes int resid) {
-        TypedArray appearance =
-            context.obtainStyledAttributes(resid,
-                                           com.android.internal.R.styleable.TextAppearance);
+    @Deprecated
+    public void setTextAppearance(Context context, @StyleRes int resId) {
+        final TypedArray ta = context.obtainStyledAttributes(resId, R.styleable.TextAppearance);
 
-        int color;
-        ColorStateList colors;
-        int ts;
-
-        color = appearance.getColor(
-                com.android.internal.R.styleable.TextAppearance_textColorHighlight, 0);
-        if (color != 0) {
-            setHighlightColor(color);
+        final int textColorHighlight = ta.getColor(
+                R.styleable.TextAppearance_textColorHighlight, 0);
+        if (textColorHighlight != 0) {
+            setHighlightColor(textColorHighlight);
         }
 
-        colors = appearance.getColorStateList(com.android.internal.R.styleable.
-                                              TextAppearance_textColor);
-        if (colors != null) {
-            setTextColor(colors);
+        final ColorStateList textColor = ta.getColorStateList(R.styleable.TextAppearance_textColor);
+        if (textColor != null) {
+            setTextColor(textColor);
         }
 
-        ts = appearance.getDimensionPixelSize(com.android.internal.R.styleable.
-                                              TextAppearance_textSize, 0);
-        if (ts != 0) {
-            setRawTextSize(ts);
+        final int textSize = ta.getDimensionPixelSize(R.styleable.TextAppearance_textSize, 0);
+        if (textSize != 0) {
+            setRawTextSize(textSize);
         }
 
-        colors = appearance.getColorStateList(com.android.internal.R.styleable.
-                                              TextAppearance_textColorHint);
-        if (colors != null) {
-            setHintTextColor(colors);
+        final ColorStateList textColorHint = ta.getColorStateList(
+                R.styleable.TextAppearance_textColorHint);
+        if (textColorHint != null) {
+            setHintTextColor(textColorHint);
         }
 
-        colors = appearance.getColorStateList(com.android.internal.R.styleable.
-                                              TextAppearance_textColorLink);
-        if (colors != null) {
-            setLinkTextColor(colors);
+        final ColorStateList textColorLink = ta.getColorStateList(
+                R.styleable.TextAppearance_textColorLink);
+        if (textColorLink != null) {
+            setLinkTextColor(textColorLink);
         }
 
-        String familyName;
-        int typefaceIndex, styleIndex;
+        final String fontFamily = ta.getString(R.styleable.TextAppearance_fontFamily);
+        final int typefaceIndex = ta.getInt(R.styleable.TextAppearance_typeface, -1);
+        final int styleIndex = ta.getInt(R.styleable.TextAppearance_textStyle, -1);
+        setTypefaceFromAttrs(fontFamily, typefaceIndex, styleIndex);
 
-        familyName = appearance.getString(com.android.internal.R.styleable.
-                                          TextAppearance_fontFamily);
-        typefaceIndex = appearance.getInt(com.android.internal.R.styleable.
-                                          TextAppearance_typeface, -1);
-        styleIndex = appearance.getInt(com.android.internal.R.styleable.
-                                       TextAppearance_textStyle, -1);
-
-        setTypefaceFromAttrs(familyName, typefaceIndex, styleIndex);
-
-        final int shadowcolor = appearance.getInt(
-                com.android.internal.R.styleable.TextAppearance_shadowColor, 0);
-        if (shadowcolor != 0) {
-            final float dx = appearance.getFloat(
-                    com.android.internal.R.styleable.TextAppearance_shadowDx, 0);
-            final float dy = appearance.getFloat(
-                    com.android.internal.R.styleable.TextAppearance_shadowDy, 0);
-            final float r = appearance.getFloat(
-                    com.android.internal.R.styleable.TextAppearance_shadowRadius, 0);
-
-            setShadowLayer(r, dx, dy, shadowcolor);
+        final int shadowColor = ta.getInt(R.styleable.TextAppearance_shadowColor, 0);
+        if (shadowColor != 0) {
+            final float dx = ta.getFloat(R.styleable.TextAppearance_shadowDx, 0);
+            final float dy = ta.getFloat(R.styleable.TextAppearance_shadowDy, 0);
+            final float r = ta.getFloat(R.styleable.TextAppearance_shadowRadius, 0);
+            setShadowLayer(r, dx, dy, shadowColor);
         }
 
-        if (appearance.getBoolean(com.android.internal.R.styleable.TextAppearance_textAllCaps,
-                false)) {
+        if (ta.getBoolean(R.styleable.TextAppearance_textAllCaps, false)) {
             setTransformationMethod(new AllCapsTransformationMethod(getContext()));
         }
 
-        if (appearance.hasValue(com.android.internal.R.styleable.TextAppearance_elegantTextHeight)) {
-            setElegantTextHeight(appearance.getBoolean(
-                com.android.internal.R.styleable.TextAppearance_elegantTextHeight, false));
+        if (ta.hasValue(R.styleable.TextAppearance_elegantTextHeight)) {
+            setElegantTextHeight(ta.getBoolean(
+                R.styleable.TextAppearance_elegantTextHeight, false));
         }
 
-        if (appearance.hasValue(com.android.internal.R.styleable.TextAppearance_letterSpacing)) {
-            setLetterSpacing(appearance.getFloat(
-                com.android.internal.R.styleable.TextAppearance_letterSpacing, 0));
+        if (ta.hasValue(R.styleable.TextAppearance_letterSpacing)) {
+            setLetterSpacing(ta.getFloat(
+                R.styleable.TextAppearance_letterSpacing, 0));
         }
 
-        if (appearance.hasValue(com.android.internal.R.styleable.TextAppearance_fontFeatureSettings)) {
-            setFontFeatureSettings(appearance.getString(
-                com.android.internal.R.styleable.TextAppearance_fontFeatureSettings));
+        if (ta.hasValue(R.styleable.TextAppearance_fontFeatureSettings)) {
+            setFontFeatureSettings(ta.getString(
+                R.styleable.TextAppearance_fontFeatureSettings));
         }
 
-        appearance.recycle();
+        ta.recycle();
     }
 
     /**
@@ -5106,7 +5102,7 @@
         // - onFocusChanged cannot start it when focus is given to a view with selected text (after
         //   a screen rotation) since layout is not yet initialized at that point.
         if (mEditor != null && mEditor.mCreatedWithASelection) {
-            mEditor.startSelectionActionMode();
+            mEditor.startSelectionActionModeWithSelection();
             mEditor.mCreatedWithASelection = false;
         }
 
@@ -5114,7 +5110,7 @@
         // ExtractEditText does not call onFocus when it is displayed, and mHasSelectionOnFocus can
         // not be set. Do the test here instead.
         if (this instanceof ExtractEditText && hasSelection() && mEditor != null) {
-            mEditor.startSelectionActionMode();
+            mEditor.startSelectionActionModeWithSelection();
         }
 
         unregisterForPreDraw();
@@ -8747,7 +8743,7 @@
                             Selection.setSelection((Spannable) text, start, end);
                             // Make sure selection mode is engaged.
                             if (mEditor != null) {
-                                mEditor.startSelectionActionMode();
+                                mEditor.startSelectionActionModeWithSelection();
                             }
                             return true;
                         }
@@ -8959,9 +8955,10 @@
      *
      * A custom implementation can add new entries in the default menu in its
      * {@link android.view.ActionMode.Callback#onPrepareActionMode(ActionMode, Menu)} method. The
-     * default actions can also be removed from the menu using {@link Menu#removeItem(int)} and
-     * passing {@link android.R.id#selectAll}, {@link android.R.id#cut}, {@link android.R.id#copy}
-     * or {@link android.R.id#paste} ids as parameters.
+     * default actions can also be removed from the menu using
+     * {@link android.view.Menu#removeItem(int)} and passing {@link android.R.id#selectAll},
+     * {@link android.R.id#cut}, {@link android.R.id#copy} or {@link android.R.id#paste} ids as
+     * parameters.
      *
      * Returning false from
      * {@link android.view.ActionMode.Callback#onCreateActionMode(ActionMode, Menu)} will prevent
@@ -9536,7 +9533,6 @@
         // TODO: Add an option to configure this
         private static final float MARQUEE_DELTA_MAX = 0.07f;
         private static final int MARQUEE_DELAY = 1200;
-        private static final int MARQUEE_RESTART_DELAY = 1200;
         private static final int MARQUEE_DP_PER_SECOND = 30;
 
         private static final byte MARQUEE_STOPPED = 0x0;
diff --git a/core/java/com/android/internal/app/IAssistScreenshotReceiver.aidl b/core/java/com/android/internal/app/IAssistScreenshotReceiver.aidl
new file mode 100644
index 0000000..a987a16
--- /dev/null
+++ b/core/java/com/android/internal/app/IAssistScreenshotReceiver.aidl
@@ -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.
+ */
+
+package com.android.internal.app;
+
+import android.graphics.Bitmap;
+
+/** @hide */
+oneway interface IAssistScreenshotReceiver {
+    void send(in Bitmap screenshot);
+}
diff --git a/core/java/com/android/internal/app/WindowDecorActionBar.java b/core/java/com/android/internal/app/WindowDecorActionBar.java
index 2bf02f1..7ae7d0f 100644
--- a/core/java/com/android/internal/app/WindowDecorActionBar.java
+++ b/core/java/com/android/internal/app/WindowDecorActionBar.java
@@ -23,7 +23,6 @@
 
 import com.android.internal.R;
 import com.android.internal.view.ActionBarPolicy;
-import com.android.internal.view.ActionModeWrapper;
 import com.android.internal.view.menu.MenuBuilder;
 import com.android.internal.view.menu.MenuPopupHelper;
 import com.android.internal.view.menu.SubMenuBuilder;
diff --git a/core/java/com/android/internal/inputmethod/InputMethodUtils.java b/core/java/com/android/internal/inputmethod/InputMethodUtils.java
index 29326d3a..57fcf57 100644
--- a/core/java/com/android/internal/inputmethod/InputMethodUtils.java
+++ b/core/java/com/android/internal/inputmethod/InputMethodUtils.java
@@ -120,18 +120,6 @@
                 & ApplicationInfo.FLAG_SYSTEM) != 0;
     }
 
-    /**
-     * @deprecated Use {@link #isSystemImeThatHasSubtypeOf(InputMethodInfo, Context, boolean,
-     * Locale, boolean, String)} instead.
-     */
-    @Deprecated
-    public static boolean isSystemImeThatHasEnglishKeyboardSubtype(InputMethodInfo imi) {
-        if (!isSystemIme(imi)) {
-            return false;
-        }
-        return containsSubtypeOf(imi, ENGLISH_LOCALE.getLanguage(), SUBTYPE_MODE_KEYBOARD);
-    }
-
     public static boolean isSystemImeThatHasSubtypeOf(final InputMethodInfo imi,
             final Context context, final boolean checkDefaultAttribute,
             @Nullable final Locale requiredLocale, final boolean checkCountry,
@@ -382,35 +370,6 @@
                 .build();
     }
 
-    /**
-     * @deprecated Use {@link #isSystemImeThatHasSubtypeOf(InputMethodInfo, Context, boolean,
-     * Locale, boolean, String)} instead.
-     */
-    @Deprecated
-    public static boolean isValidSystemDefaultIme(
-            boolean isSystemReady, InputMethodInfo imi, Context context) {
-        if (!isSystemReady) {
-            return false;
-        }
-        if (!isSystemIme(imi)) {
-            return false;
-        }
-        if (imi.getIsDefaultResourceId() != 0) {
-            try {
-                if (imi.isDefault(context) && containsSubtypeOf(
-                        imi, context.getResources().getConfiguration().locale.getLanguage(),
-                        SUBTYPE_MODE_ANY)) {
-                    return true;
-                }
-            } catch (Resources.NotFoundException ex) {
-            }
-        }
-        if (imi.getSubtypeCount() == 0) {
-            Slog.w(TAG, "Found no subtypes in a system IME: " + imi.getPackageName());
-        }
-        return false;
-    }
-
     public static Locale constructLocaleFromString(String localeStr) {
         if (TextUtils.isEmpty(localeStr)) {
             return null;
@@ -459,25 +418,6 @@
         return false;
     }
 
-    /**
-     * @deprecated Use {@link #containsSubtypeOf(InputMethodInfo, Locale, boolean, String)} instead.
-     */
-    @Deprecated
-    public static boolean containsSubtypeOf(InputMethodInfo imi, String language, String mode) {
-        final int N = imi.getSubtypeCount();
-        for (int i = 0; i < N; ++i) {
-            final InputMethodSubtype subtype = imi.getSubtypeAt(i);
-            if (!subtype.getLocale().startsWith(language)) {
-                continue;
-            }
-            if (mode == SUBTYPE_MODE_ANY || TextUtils.isEmpty(mode) ||
-                    mode.equalsIgnoreCase(subtype.getMode())) {
-                return true;
-            }
-        }
-        return false;
-    }
-
     public static ArrayList<InputMethodSubtype> getSubtypes(InputMethodInfo imi) {
         ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>();
         final int subtypeCount = imi.getSubtypeCount();
@@ -510,12 +450,15 @@
         while (i > 0) {
             i--;
             final InputMethodInfo imi = enabledImes.get(i);
-            if (InputMethodUtils.isSystemImeThatHasEnglishKeyboardSubtype(imi)
-                    && !imi.isAuxiliaryIme()) {
+            if (imi.isAuxiliaryIme()) {
+                continue;
+            }
+            if (InputMethodUtils.isSystemIme(imi)
+                    && containsSubtypeOf(imi, ENGLISH_LOCALE, false /* checkCountry */,
+                            SUBTYPE_MODE_KEYBOARD)) {
                 return imi;
             }
-            if (firstFoundSystemIme < 0 && InputMethodUtils.isSystemIme(imi)
-                    && !imi.isAuxiliaryIme()) {
+            if (firstFoundSystemIme < 0 && InputMethodUtils.isSystemIme(imi)) {
                 firstFoundSystemIme = i;
             }
         }
diff --git a/core/java/com/android/internal/os/Zygote.java b/core/java/com/android/internal/os/Zygote.java
index fced092..8674a21 100644
--- a/core/java/com/android/internal/os/Zygote.java
+++ b/core/java/com/android/internal/os/Zygote.java
@@ -34,10 +34,13 @@
     public static final int DEBUG_ENABLE_CHECKJNI   = 1 << 1;
     /** enable Java programming language "assert" statements */
     public static final int DEBUG_ENABLE_ASSERT     = 1 << 2;
-    /** disable the JIT compiler */
+    /** disable the AOT compiler and JIT */
     public static final int DEBUG_ENABLE_SAFEMODE   = 1 << 3;
     /** Enable logging of third-party JNI activity. */
     public static final int DEBUG_ENABLE_JNI_LOGGING = 1 << 4;
+    /** enable the JIT compiler */
+    public static final int DEBUG_ENABLE_JIT         = 1 << 5;
+
 
     /** 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 7acd8f5..4d405b2 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, and --enable-jni-logging.
+         * --enable-safemode, --enable-jit, and --enable-jni-logging.
          */
         int debugFlags;
 
@@ -431,6 +431,8 @@
                     debugFlags |= Zygote.DEBUG_ENABLE_SAFEMODE;
                 } else if (arg.equals("--enable-checkjni")) {
                     debugFlags |= Zygote.DEBUG_ENABLE_CHECKJNI;
+                } else if (arg.equals("--enable-jit")) {
+                    debugFlags |= Zygote.DEBUG_ENABLE_JIT;
                 } else if (arg.equals("--enable-jni-logging")) {
                     debugFlags |= Zygote.DEBUG_ENABLE_JNI_LOGGING;
                 } else if (arg.equals("--enable-assert")) {
diff --git a/core/java/com/android/internal/util/UserIcons.java b/core/java/com/android/internal/util/UserIcons.java
index c69d14f..daf745f 100644
--- a/core/java/com/android/internal/util/UserIcons.java
+++ b/core/java/com/android/internal/util/UserIcons.java
@@ -70,8 +70,8 @@
             // Return colored icon instead
             colorResId = USER_ICON_COLORS[userId % USER_ICON_COLORS.length];
         }
-        Drawable icon = Resources.getSystem().getDrawable(R.drawable.ic_account_circle).mutate();
-        icon.setColorFilter(Resources.getSystem().getColor(colorResId), Mode.SRC_IN);
+        Drawable icon = Resources.getSystem().getDrawable(R.drawable.ic_account_circle, null).mutate();
+        icon.setColorFilter(Resources.getSystem().getColor(colorResId, null), Mode.SRC_IN);
         icon.setBounds(0, 0, icon.getIntrinsicWidth(), icon.getIntrinsicHeight());
         return icon;
     }
diff --git a/core/java/com/android/internal/view/ActionModeWrapper.java b/core/java/com/android/internal/view/ActionModeWrapper.java
deleted file mode 100644
index d98617d..0000000
--- a/core/java/com/android/internal/view/ActionModeWrapper.java
+++ /dev/null
@@ -1,211 +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.view;
-
-import android.content.Context;
-import android.view.ActionMode;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.View;
-
-import com.android.internal.view.menu.MenuBuilder;
-
-/**
- * ActionMode implementation that wraps several actions modes and creates them on the fly depending
- * on the ActionMode type chosen by the client.
- */
-public class ActionModeWrapper extends ActionMode {
-
-    /**
-     * Interface to defer the ActionMode creation until the type is chosen.
-     */
-    public interface ActionModeProvider {
-        /**
-         * Create the desired ActionMode, that will immediately be used as the current active mode
-         * in the decorator.
-         *
-         * @param callback The {@link ActionMode.Callback} to be used.
-         * @param menuBuilder The {@link MenuBuilder} that should be used by the created
-         *      {@link ActionMode}. This will already have been populated.
-         * @return A new {@link ActionMode} ready to be used that uses menuBuilder as its menu.
-         */
-        ActionMode createActionMode(ActionMode.Callback callback, MenuBuilder menuBuilder);
-    }
-
-    private ActionMode mActionMode;
-    private final Context mContext;
-    private MenuBuilder mMenu;
-    private final ActionMode.Callback mCallback;
-    private boolean mTypeLocked = false;
-
-    private CharSequence mTitle;
-    private CharSequence mSubtitle;
-    private View mCustomView;
-    
-    private final ActionModeProvider mActionModeProvider;
-
-    public ActionModeWrapper(
-            Context context, ActionMode.Callback callback, ActionModeProvider actionModeProvider) {
-        mContext = context;
-        mMenu = new MenuBuilder(context).setDefaultShowAsAction(
-                MenuItem.SHOW_AS_ACTION_IF_ROOM);
-        mCallback = callback;
-        mActionModeProvider = actionModeProvider;
-    }
-
-    @Override
-    public void setTitle(CharSequence title) {
-        if (mActionMode != null) {
-            mActionMode.setTitle(title);
-        } else {
-            mTitle = title;
-        }
-    }
-
-    @Override
-    public void setTitle(int resId) {
-        if (mActionMode != null) {
-            mActionMode.setTitle(resId);
-        } else {
-            mTitle = resId != 0 ? mContext.getString(resId) : null;
-        }
-    }
-
-    @Override
-    public void setSubtitle(CharSequence subtitle) {
-        if (mActionMode != null) {
-            mActionMode.setSubtitle(subtitle);
-        } else {
-            mSubtitle = subtitle;
-        }
-    }
-
-    @Override
-    public void setSubtitle(int resId) {
-        if (mActionMode != null) {
-            mActionMode.setSubtitle(resId);
-        } else {
-            mSubtitle = resId != 0 ? mContext.getString(resId) : null;
-        }
-    }
-
-    @Override
-    public void setCustomView(View view) {
-        if (mActionMode != null) {
-            mActionMode.setCustomView(view);
-        } else {
-            mCustomView = view;
-        }
-    }
-
-    public ActionMode getWrappedActionMode() {
-        return mActionMode;
-    }
-
-    /**
-     * Set the current type as final and create the necessary ActionMode. After this call, any
-     * changes to the ActionMode type will be ignored.
-     */
-    public void lockType() {
-        mTypeLocked = true;
-        switch (getType()) {
-            case ActionMode.TYPE_PRIMARY:
-            default:
-                mActionMode = mActionModeProvider.createActionMode(mCallback, mMenu);
-                break;
-            case ActionMode.TYPE_FLOATING:
-                // Not implemented yet.
-                break;
-        }
-
-        if (mActionMode == null) {
-            return;
-        }
-
-        mActionMode.setTitle(mTitle);
-        mActionMode.setSubtitle(mSubtitle);
-        if (mCustomView != null) {
-            mActionMode.setCustomView(mCustomView);
-        }
-
-        mTitle = null;
-        mSubtitle = null;
-        mCustomView = null;
-    }
-
-    @Override
-    public void setType(int type) {
-        if (!mTypeLocked) {
-            super.setType(type);
-        } else {
-            throw new IllegalStateException(
-                    "You can't change the ActionMode's type after onCreateActionMode.");
-        }
-    }
-
-    @Override
-    public void invalidate() {
-        if (mActionMode != null) {
-            mActionMode.invalidate();
-        }
-    }
-
-    @Override
-    public void finish() {
-        if (mActionMode != null) {
-            mActionMode.finish();
-        } else {
-            mCallback.onDestroyActionMode(this);
-        }
-    }
-
-    @Override
-    public Menu getMenu() {
-        return mMenu;
-    }
-
-    @Override
-    public CharSequence getTitle() {
-        if (mActionMode != null) {
-            return mActionMode.getTitle();
-        }
-        return mTitle;
-    }
-
-    @Override
-    public CharSequence getSubtitle() {
-        if (mActionMode != null) {
-            return mActionMode.getSubtitle();
-        }
-        return mSubtitle;
-    }
-
-    @Override
-    public View getCustomView() {
-        if (mActionMode != null) {
-            return mActionMode.getCustomView();
-        }
-        return mCustomView;
-    }
-
-    @Override
-    public MenuInflater getMenuInflater() {
-        return new MenuInflater(mContext);
-    }
-
-}
diff --git a/core/java/com/android/internal/widget/LockPatternView.java b/core/java/com/android/internal/widget/LockPatternView.java
index 52bbabf..8be34e7 100644
--- a/core/java/com/android/internal/widget/LockPatternView.java
+++ b/core/java/com/android/internal/widget/LockPatternView.java
@@ -269,9 +269,9 @@
         mPathPaint.setAntiAlias(true);
         mPathPaint.setDither(true);
 
-        mRegularColor = getResources().getColor(R.color.lock_pattern_view_regular_color);
-        mErrorColor = getResources().getColor(R.color.lock_pattern_view_error_color);
-        mSuccessColor = getResources().getColor(R.color.lock_pattern_view_success_color);
+        mRegularColor = context.getColor(R.color.lock_pattern_view_regular_color);
+        mErrorColor = context.getColor(R.color.lock_pattern_view_error_color);
+        mSuccessColor = context.getColor(R.color.lock_pattern_view_success_color);
         mRegularColor = a.getColor(R.styleable.LockPatternView_regularColor, mRegularColor);
         mErrorColor = a.getColor(R.styleable.LockPatternView_errorColor, mErrorColor);
         mSuccessColor = a.getColor(R.styleable.LockPatternView_successColor, mSuccessColor);
diff --git a/core/jni/android_hardware_camera2_legacy_LegacyCameraDevice.cpp b/core/jni/android_hardware_camera2_legacy_LegacyCameraDevice.cpp
index 87896df..afdfd8f 100644
--- a/core/jni/android_hardware_camera2_legacy_LegacyCameraDevice.cpp
+++ b/core/jni/android_hardware_camera2_legacy_LegacyCameraDevice.cpp
@@ -373,8 +373,7 @@
         return NULL;
     }
     if (anw == NULL) {
-        jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException",
-                "Surface had no valid native window.");
+        ALOGE("%s: Surface had no valid native window.", __FUNCTION__);
         return NULL;
     }
     return anw;
diff --git a/core/jni/android_media_AudioRecord.cpp b/core/jni/android_media_AudioRecord.cpp
index df9f893..b2e8f16 100644
--- a/core/jni/android_media_AudioRecord.cpp
+++ b/core/jni/android_media_AudioRecord.cpp
@@ -387,10 +387,7 @@
     }
 
     // read the new audio data from the native AudioRecord object
-    ssize_t recorderBuffSize = lpRecorder->frameCount()*lpRecorder->frameSize();
-    ssize_t readSize = lpRecorder->read(recordBuff + offsetInBytes,
-                                        sizeInBytes > (jint)recorderBuffSize ?
-                                            (jint)recorderBuffSize : sizeInBytes );
+    ssize_t readSize = lpRecorder->read(recordBuff + offsetInBytes, sizeInBytes);
     env->ReleaseByteArrayElements(javaAudioData, recordBuff, 0);
 
     if (readSize < 0) {
@@ -430,11 +427,8 @@
     }
 
     // read the new audio data from the native AudioRecord object
-    const size_t recorderBuffSize = lpRecorder->frameCount()*lpRecorder->frameSize();
     const size_t sizeInBytes = sizeInShorts * sizeof(short);
-    ssize_t readSize = lpRecorder->read(recordBuff + offsetInShorts,
-                                        sizeInBytes > recorderBuffSize ?
-                                            recorderBuffSize : sizeInBytes);
+    ssize_t readSize = lpRecorder->read(recordBuff + offsetInShorts, sizeInBytes);
 
     env->ReleaseShortArrayElements(javaAudioData, recordBuff, 0);
 
diff --git a/core/jni/android_net_NetUtils.cpp b/core/jni/android_net_NetUtils.cpp
index f283675..5693a03 100644
--- a/core/jni/android_net_NetUtils.cpp
+++ b/core/jni/android_net_NetUtils.cpp
@@ -109,7 +109,7 @@
     result = ::dhcp_get_results(nameStr, ipaddr, gateway, &prefixLength,
             dns, server, &lease, vendorInfo, domains, mtu);
     if (result != 0) {
-        ALOGD("dhcp_get_results failed : %s (%s)", nameStr);
+        ALOGD("dhcp_get_results failed : %s (%s)", nameStr, ::dhcp_get_errmsg());
     }
 
     env->ReleaseStringUTFChars(ifname, nameStr);
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index ed4776b..4d6b5f6 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -90,6 +90,8 @@
     <protected-broadcast android:name="android.appwidget.action.APPWIDGET_HOST_RESTORED" />
     <protected-broadcast android:name="android.appwidget.action.APPWIDGET_RESTORED" />
 
+    <protected-broadcast android:name="android.os.action.SETTING_RESTORED" />
+
     <protected-broadcast android:name="android.backup.intent.RUN" />
     <protected-broadcast android:name="android.backup.intent.CLEAR" />
     <protected-broadcast android:name="android.backup.intent.INIT" />
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index e661c5da..5400752 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -123,8 +123,7 @@
     <string name="roamingText11" msgid="4154476854426920970">"Swerfbanier aan"</string>
     <string name="roamingText12" msgid="1189071119992726320">"Swerfbanier af"</string>
     <string name="roamingTextSearching" msgid="8360141885972279963">"Soek vir diens"</string>
-    <!-- no translation found for wfcRegErrorTitle (2301376280632110664) -->
-    <skip />
+    <string name="wfcRegErrorTitle" msgid="2301376280632110664">"Wi-Fi-oproepe"</string>
   <string-array name="wfcOperatorErrorMessages">
   </string-array>
     <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Nie aangestuur nie"</string>
@@ -1302,8 +1301,7 @@
       <item quantity="one">Oop Wi-Fi-netwerk beskikbaar</item>
     </plurals>
     <string name="wifi_available_sign_in" msgid="9157196203958866662">"Meld aan by Wi-Fi-netwerk"</string>
-    <!-- no translation found for network_available_sign_in (1848877297365446605) -->
-    <skip />
+    <string name="network_available_sign_in" msgid="1848877297365446605">"Meld by netwerk aan"</string>
     <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
     <skip />
     <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Kon nie aan Wi-Fikoppel nie"</string>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index 4ad9b98..5e55c41 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -123,8 +123,7 @@
     <string name="roamingText11" msgid="4154476854426920970">"የዝውውር ሰንደቅ በርቷል"</string>
     <string name="roamingText12" msgid="1189071119992726320">"የዝውውር ሰንደቅ ጠፍቷል"</string>
     <string name="roamingTextSearching" msgid="8360141885972279963">"አገልግሎት ፍለጋ"</string>
-    <!-- no translation found for wfcRegErrorTitle (2301376280632110664) -->
-    <skip />
+    <string name="wfcRegErrorTitle" msgid="2301376280632110664">"የWi-Fi ጥሪ ማድረጊያ"</string>
   <string-array name="wfcOperatorErrorMessages">
   </string-array>
     <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>፡አልተላለፈም"</string>
@@ -1302,8 +1301,7 @@
       <item quantity="other">የሚገኙ የWi-Fi አውታረ መረቦችን ክፈት</item>
     </plurals>
     <string name="wifi_available_sign_in" msgid="9157196203958866662">"ወደ Wi-Fi አውታረ መረብ በመለያ ግባ"</string>
-    <!-- no translation found for network_available_sign_in (1848877297365446605) -->
-    <skip />
+    <string name="network_available_sign_in" msgid="1848877297365446605">"ወደ አውታረ መረብ በመለያ ይግቡ"</string>
     <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
     <skip />
     <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"ወደ Wi-Fi ለማያያዝ አልተቻለም"</string>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index 05c474e..1ccea6d 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -127,8 +127,7 @@
     <string name="roamingText11" msgid="4154476854426920970">"إعلان بانر للتجوال قيد التشغيل"</string>
     <string name="roamingText12" msgid="1189071119992726320">"إعلان بانر للتجوال متوقف"</string>
     <string name="roamingTextSearching" msgid="8360141885972279963">"البحث عن خدمة"</string>
-    <!-- no translation found for wfcRegErrorTitle (2301376280632110664) -->
-    <skip />
+    <string name="wfcRegErrorTitle" msgid="2301376280632110664">"‏الاتصال عبر Wi-Fi"</string>
   <string-array name="wfcOperatorErrorMessages">
   </string-array>
     <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: لم تتم إعادة التوجيه"</string>
@@ -1330,8 +1329,7 @@
       <item quantity="one">‏تتوفر شبكة Wi-Fi واحدة مفتوحة</item>
     </plurals>
     <string name="wifi_available_sign_in" msgid="9157196203958866662">"‏تسجيل الدخول إلى شبكة Wi-Fi"</string>
-    <!-- no translation found for network_available_sign_in (1848877297365446605) -->
-    <skip />
+    <string name="network_available_sign_in" msgid="1848877297365446605">"تسجيل الدخول إلى الشبكة"</string>
     <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
     <skip />
     <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"‏تعذر الاتصال بـ Wi-Fi"</string>
diff --git a/core/res/res/values-bn-rBD/strings.xml b/core/res/res/values-bn-rBD/strings.xml
index 2d93f7b..650f1c3 100644
--- a/core/res/res/values-bn-rBD/strings.xml
+++ b/core/res/res/values-bn-rBD/strings.xml
@@ -1270,7 +1270,7 @@
     <string name="new_app_action" msgid="5472756926945440706">"<xliff:g id="OLD_APP">%1$s</xliff:g> শুরু করুন"</string>
     <string name="new_app_description" msgid="1932143598371537340">"সংরক্ষণ না করেই পুরোনো অ্যাপ্লিকেশানটি বন্ধ করুন৷"</string>
     <string name="dump_heap_notification" msgid="2618183274836056542">"<xliff:g id="PROC">%1$s</xliff:g> মেমরি সীমা অতিক্রম করেছে"</string>
-    <string name="dump_heap_notification_detail" msgid="2075673362317481664">"হিপ ডাম্প সংগ্রহ করা হয়েছে; ভাগ করার জন্য স্পর্শ করুন"</string>
+    <string name="dump_heap_notification_detail" msgid="2075673362317481664">"অনেক ডাটা সংগ্রহ করা হয়েছে; ভাগ করার জন্য স্পর্শ করুন"</string>
     <string name="dump_heap_title" msgid="5864292264307651673">"হিপ ডাম্প ভাগ করবেন?"</string>
     <string name="dump_heap_text" msgid="4809417337240334941">"<xliff:g id="PROC">%1$s</xliff:g> প্রক্রিয়াটি তার <xliff:g id="SIZE">%2$s</xliff:g> এর মেমরি সীমা অতিক্রম করেছে৷ তার বিকাশকারীর সাথে ভাগ করার জন্য একটি হিপ ডাম্প উপলব্ধ৷ সতর্কতা অবলম্বন করুন: এই হিপ ডাম্পে অ্যাপ্লিকেশানটির অ্যাক্সেস আছে এমন আপনার যেকোন ব্যক্তিগত তথ্য থাকতে পারে৷"</string>
     <string name="sendText" msgid="5209874571959469142">"পাঠ্যের জন্য একটি কাজ বেছে নিন"</string>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index baa1b8a..9077a83 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -123,8 +123,7 @@
     <string name="roamingText11" msgid="4154476854426920970">"Roamingbanner til"</string>
     <string name="roamingText12" msgid="1189071119992726320">"Roamingbanner fra"</string>
     <string name="roamingTextSearching" msgid="8360141885972279963">"Søger efter tjeneste"</string>
-    <!-- no translation found for wfcRegErrorTitle (2301376280632110664) -->
-    <skip />
+    <string name="wfcRegErrorTitle" msgid="2301376280632110664">"Opkald via Wi-Fi"</string>
   <string-array name="wfcOperatorErrorMessages">
   </string-array>
     <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Ikke viderestillet"</string>
@@ -1302,8 +1301,7 @@
       <item quantity="other">Åbne Wi-Fi-netværk er tilgængelige</item>
     </plurals>
     <string name="wifi_available_sign_in" msgid="9157196203958866662">"Log ind på Wi-Fi-netværk"</string>
-    <!-- no translation found for network_available_sign_in (1848877297365446605) -->
-    <skip />
+    <string name="network_available_sign_in" msgid="1848877297365446605">"Log ind på netværk"</string>
     <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
     <skip />
     <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Kunne ikke oprette forbindelse til Wi-Fi"</string>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index 2ffbaea..02b21ec 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -123,8 +123,7 @@
     <string name="roamingText11" msgid="4154476854426920970">"Ενεργό διαφημιστικό πλαίσιο περιαγωγής"</string>
     <string name="roamingText12" msgid="1189071119992726320">"Διαφημιστικό πλαίσιο περιαγωγής απενεργοποιημένο"</string>
     <string name="roamingTextSearching" msgid="8360141885972279963">"Αναζήτηση υπηρεσιών"</string>
-    <!-- no translation found for wfcRegErrorTitle (2301376280632110664) -->
-    <skip />
+    <string name="wfcRegErrorTitle" msgid="2301376280632110664">"Κλήση Wi-Fi"</string>
   <string-array name="wfcOperatorErrorMessages">
   </string-array>
     <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Δεν προωθήθηκε"</string>
@@ -1302,8 +1301,7 @@
       <item quantity="one">Υπάρχει διαθέσιμο ανοικτό δίκτυο Wi-Fi</item>
     </plurals>
     <string name="wifi_available_sign_in" msgid="9157196203958866662">"Συνδεθείτε στο δίκτυο Wi-Fi"</string>
-    <!-- no translation found for network_available_sign_in (1848877297365446605) -->
-    <skip />
+    <string name="network_available_sign_in" msgid="1848877297365446605">"Σύνδεση στο δίκτυο"</string>
     <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
     <skip />
     <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Δεν είναι δυνατή η σύνδεση στο Wi-Fi"</string>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index 0a69e00..eafd4dc 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -123,8 +123,7 @@
     <string name="roamingText11" msgid="4154476854426920970">"Roaming Banner On"</string>
     <string name="roamingText12" msgid="1189071119992726320">"Roaming Banner Off"</string>
     <string name="roamingTextSearching" msgid="8360141885972279963">"Searching for Service"</string>
-    <!-- no translation found for wfcRegErrorTitle (2301376280632110664) -->
-    <skip />
+    <string name="wfcRegErrorTitle" msgid="2301376280632110664">"Wi-Fi Calling"</string>
   <string-array name="wfcOperatorErrorMessages">
   </string-array>
     <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Not forwarded"</string>
@@ -1302,8 +1301,7 @@
       <item quantity="one">Open Wi-Fi network available</item>
     </plurals>
     <string name="wifi_available_sign_in" msgid="9157196203958866662">"Sign in to a Wi-Fi network"</string>
-    <!-- no translation found for network_available_sign_in (1848877297365446605) -->
-    <skip />
+    <string name="network_available_sign_in" msgid="1848877297365446605">"Sign in to network"</string>
     <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
     <skip />
     <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Couldn\'t connect to Wi-Fi"</string>
diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml
index 0a69e00..eafd4dc 100644
--- a/core/res/res/values-en-rIN/strings.xml
+++ b/core/res/res/values-en-rIN/strings.xml
@@ -123,8 +123,7 @@
     <string name="roamingText11" msgid="4154476854426920970">"Roaming Banner On"</string>
     <string name="roamingText12" msgid="1189071119992726320">"Roaming Banner Off"</string>
     <string name="roamingTextSearching" msgid="8360141885972279963">"Searching for Service"</string>
-    <!-- no translation found for wfcRegErrorTitle (2301376280632110664) -->
-    <skip />
+    <string name="wfcRegErrorTitle" msgid="2301376280632110664">"Wi-Fi Calling"</string>
   <string-array name="wfcOperatorErrorMessages">
   </string-array>
     <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Not forwarded"</string>
@@ -1302,8 +1301,7 @@
       <item quantity="one">Open Wi-Fi network available</item>
     </plurals>
     <string name="wifi_available_sign_in" msgid="9157196203958866662">"Sign in to a Wi-Fi network"</string>
-    <!-- no translation found for network_available_sign_in (1848877297365446605) -->
-    <skip />
+    <string name="network_available_sign_in" msgid="1848877297365446605">"Sign in to network"</string>
     <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
     <skip />
     <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Couldn\'t connect to Wi-Fi"</string>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index a71bef0..23446ff 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -123,8 +123,7 @@
     <string name="roamingText11" msgid="4154476854426920970">"Banner de roaming activado"</string>
     <string name="roamingText12" msgid="1189071119992726320">"Banner de roaming desactivado"</string>
     <string name="roamingTextSearching" msgid="8360141885972279963">"Buscando servicio"</string>
-    <!-- no translation found for wfcRegErrorTitle (2301376280632110664) -->
-    <skip />
+    <string name="wfcRegErrorTitle" msgid="2301376280632110664">"Llamada por Wi-Fi"</string>
   <string-array name="wfcOperatorErrorMessages">
   </string-array>
     <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: no se ha remitido"</string>
@@ -1270,7 +1269,7 @@
     <string name="new_app_action" msgid="5472756926945440706">"Inicio <xliff:g id="OLD_APP">%1$s</xliff:g>"</string>
     <string name="new_app_description" msgid="1932143598371537340">"Interrumpe la aplicación anterior sin guardar los cambios."</string>
     <string name="dump_heap_notification" msgid="2618183274836056542">"<xliff:g id="PROC">%1$s</xliff:g> superó el límite de memoria."</string>
-    <string name="dump_heap_notification_detail" msgid="2075673362317481664">"Se recopiló el volcado de pila, toca para compartir."</string>
+    <string name="dump_heap_notification_detail" msgid="2075673362317481664">"Se recopiló el volcado de pila. Toca para compartir."</string>
     <string name="dump_heap_title" msgid="5864292264307651673">"¿Compartir volcado de pila?"</string>
     <string name="dump_heap_text" msgid="4809417337240334941">"El proceso <xliff:g id="PROC">%1$s</xliff:g> superó el límite de memoria de proceso de <xliff:g id="SIZE">%2$s</xliff:g>. Hay un volcado de pila disponible para que puedas compartirlo con el programador. Ten cuidado, este volcado de pila puede contener información personal a la que la aplicación tiene acceso."</string>
     <string name="sendText" msgid="5209874571959469142">"Seleccionar una acción para el texto"</string>
@@ -1302,8 +1301,7 @@
       <item quantity="one">Abrir red de Wi-Fi disponible</item>
     </plurals>
     <string name="wifi_available_sign_in" msgid="9157196203958866662">"Accede a una red Wi-Fi."</string>
-    <!-- no translation found for network_available_sign_in (1848877297365446605) -->
-    <skip />
+    <string name="network_available_sign_in" msgid="1848877297365446605">"Acceder a la red"</string>
     <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
     <skip />
     <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"No se pudo conectar a la red Wi-Fi."</string>
diff --git a/core/res/res/values-et-rEE/strings.xml b/core/res/res/values-et-rEE/strings.xml
index c55c895..c7e78ea 100644
--- a/core/res/res/values-et-rEE/strings.xml
+++ b/core/res/res/values-et-rEE/strings.xml
@@ -123,8 +123,7 @@
     <string name="roamingText11" msgid="4154476854426920970">"Rändluse bänner sees"</string>
     <string name="roamingText12" msgid="1189071119992726320">"Rändlusbänner väljas"</string>
     <string name="roamingTextSearching" msgid="8360141885972279963">"Teenuse otsimine"</string>
-    <!-- no translation found for wfcRegErrorTitle (2301376280632110664) -->
-    <skip />
+    <string name="wfcRegErrorTitle" msgid="2301376280632110664">"WiFi-kõned"</string>
   <string-array name="wfcOperatorErrorMessages">
   </string-array>
     <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: pole suunatud"</string>
@@ -1302,8 +1301,7 @@
       <item quantity="one">Avatud WiFi-võrk on saadaval</item>
     </plurals>
     <string name="wifi_available_sign_in" msgid="9157196203958866662">"Logi sisse WiFi-võrku"</string>
-    <!-- no translation found for network_available_sign_in (1848877297365446605) -->
-    <skip />
+    <string name="network_available_sign_in" msgid="1848877297365446605">"Võrku sisselogimine"</string>
     <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
     <skip />
     <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Ei saanud WiFi-ga ühendust"</string>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index a354f22..58a53b5 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -123,8 +123,7 @@
     <string name="roamingText11" msgid="4154476854426920970">"اعلان رومینگ روشن"</string>
     <string name="roamingText12" msgid="1189071119992726320">"اعلان رومینگ خاموش"</string>
     <string name="roamingTextSearching" msgid="8360141885972279963">"جستجوی سرویس"</string>
-    <!-- no translation found for wfcRegErrorTitle (2301376280632110664) -->
-    <skip />
+    <string name="wfcRegErrorTitle" msgid="2301376280632110664">"‏تماس از طریق Wi-Fi"</string>
   <string-array name="wfcOperatorErrorMessages">
   </string-array>
     <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: هدایت نشده"</string>
@@ -1302,8 +1301,7 @@
       <item quantity="other">‏شبکه‌ Wi-Fi باز در دسترس</item>
     </plurals>
     <string name="wifi_available_sign_in" msgid="9157196203958866662">"‏ورود به شبکه Wi-Fi"</string>
-    <!-- no translation found for network_available_sign_in (1848877297365446605) -->
-    <skip />
+    <string name="network_available_sign_in" msgid="1848877297365446605">"ورود به سیستم شبکه"</string>
     <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
     <skip />
     <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"‏اتصال به Wi-Fi ممکن نیست"</string>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index f4cbc11..37718fa 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -123,8 +123,7 @@
     <string name="roamingText11" msgid="4154476854426920970">"Roaming-banneri käytössä"</string>
     <string name="roamingText12" msgid="1189071119992726320">"Roaming-banneri pois käytöstä"</string>
     <string name="roamingTextSearching" msgid="8360141885972279963">"Etsitään signaalia"</string>
-    <!-- no translation found for wfcRegErrorTitle (2301376280632110664) -->
-    <skip />
+    <string name="wfcRegErrorTitle" msgid="2301376280632110664">"Wi-Fi-puhelut"</string>
   <string-array name="wfcOperatorErrorMessages">
   </string-array>
     <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: ei siirretty"</string>
@@ -1302,8 +1301,7 @@
       <item quantity="one">Avoin Wi-Fi-verkko käytettävissä</item>
     </plurals>
     <string name="wifi_available_sign_in" msgid="9157196203958866662">"Kirjaudu Wi-Fi-verkkoon"</string>
-    <!-- no translation found for network_available_sign_in (1848877297365446605) -->
-    <skip />
+    <string name="network_available_sign_in" msgid="1848877297365446605">"Kirjaudu verkkoon"</string>
     <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
     <skip />
     <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Wi-Fi-yhteyden muodostaminen epäonnistui"</string>
diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml
index d406d1d..98a299f 100644
--- a/core/res/res/values-fr-rCA/strings.xml
+++ b/core/res/res/values-fr-rCA/strings.xml
@@ -123,8 +123,7 @@
     <string name="roamingText11" msgid="4154476854426920970">"Bannière d\'itinérance activée"</string>
     <string name="roamingText12" msgid="1189071119992726320">"Bannière d\'itinérance désactivée"</string>
     <string name="roamingTextSearching" msgid="8360141885972279963">"Recherche des services disponibles"</string>
-    <!-- no translation found for wfcRegErrorTitle (2301376280632110664) -->
-    <skip />
+    <string name="wfcRegErrorTitle" msgid="2301376280632110664">"Appels Wi-Fi"</string>
   <string-array name="wfcOperatorErrorMessages">
   </string-array>
     <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g> : non transféré"</string>
@@ -1302,8 +1301,7 @@
       <item quantity="other">Réseaux Wi-Fi ouverts à proximité</item>
     </plurals>
     <string name="wifi_available_sign_in" msgid="9157196203958866662">"Connectez-vous au réseau Wi-Fi"</string>
-    <!-- no translation found for network_available_sign_in (1848877297365446605) -->
-    <skip />
+    <string name="network_available_sign_in" msgid="1848877297365446605">"Connectez-vous au réseau"</string>
     <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
     <skip />
     <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Impossible de se connecter au Wi-Fi."</string>
diff --git a/core/res/res/values-hu-watch/strings.xml b/core/res/res/values-hu-watch/strings.xml
index 7355022..9f2e97f 100644
--- a/core/res/res/values-hu-watch/strings.xml
+++ b/core/res/res/values-hu-watch/strings.xml
@@ -20,5 +20,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="android_upgrading_apk" msgid="1090732262010398759">"<xliff:g id="NUMBER_1">%2$d</xliff:g>/<xliff:g id="NUMBER_0">%1$d</xliff:g>. alkalmazás"</string>
+    <string name="android_upgrading_apk" msgid="1090732262010398759">"<xliff:g id="NUMBER_0">%1$d</xliff:g>/<xliff:g id="NUMBER_1">%2$d</xliff:g>. alkalmazás"</string>
 </resources>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index da94674..ddeefa8 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -123,8 +123,7 @@
     <string name="roamingText11" msgid="4154476854426920970">"Spanduk Roaming Hidup"</string>
     <string name="roamingText12" msgid="1189071119992726320">"Spanduk Roaming Mati"</string>
     <string name="roamingTextSearching" msgid="8360141885972279963">"Mencari layanan"</string>
-    <!-- no translation found for wfcRegErrorTitle (2301376280632110664) -->
-    <skip />
+    <string name="wfcRegErrorTitle" msgid="2301376280632110664">"Panggilan Wi-Fi"</string>
   <string-array name="wfcOperatorErrorMessages">
   </string-array>
     <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Tidak diteruskan"</string>
@@ -1302,8 +1301,7 @@
       <item quantity="one">Jaringan Wi-Fi terbuka tersedia</item>
     </plurals>
     <string name="wifi_available_sign_in" msgid="9157196203958866662">"Masuk ke jaringan Wi-Fi"</string>
-    <!-- no translation found for network_available_sign_in (1848877297365446605) -->
-    <skip />
+    <string name="network_available_sign_in" msgid="1848877297365446605">"Masuk ke jaringan"</string>
     <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
     <skip />
     <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Tidak dapat tersambung ke Wi-Fi"</string>
diff --git a/core/res/res/values-is-rIS/strings.xml b/core/res/res/values-is-rIS/strings.xml
index f76d2b5..957a224 100644
--- a/core/res/res/values-is-rIS/strings.xml
+++ b/core/res/res/values-is-rIS/strings.xml
@@ -123,8 +123,7 @@
     <string name="roamingText11" msgid="4154476854426920970">"Kveikt á reikiborða"</string>
     <string name="roamingText12" msgid="1189071119992726320">"Slökkt á reikiborða"</string>
     <string name="roamingTextSearching" msgid="8360141885972279963">"Leitar að þjónustu"</string>
-    <!-- no translation found for wfcRegErrorTitle (2301376280632110664) -->
-    <skip />
+    <string name="wfcRegErrorTitle" msgid="2301376280632110664">"Wi-Fi símtöl"</string>
   <string-array name="wfcOperatorErrorMessages">
   </string-array>
     <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Ekki áframsent"</string>
@@ -1301,10 +1300,8 @@
       <item quantity="one">Opin Wi-Fi net í boði</item>
       <item quantity="other">Opin Wi-Fi net í boði</item>
     </plurals>
-    <!-- no translation found for wifi_available_sign_in (9157196203958866662) -->
-    <skip />
-    <!-- no translation found for network_available_sign_in (1848877297365446605) -->
-    <skip />
+    <string name="wifi_available_sign_in" msgid="9157196203958866662">"Skrá inn á Wi-Fi net"</string>
+    <string name="network_available_sign_in" msgid="1848877297365446605">"Skrá inn á net"</string>
     <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
     <skip />
     <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Ekki var hægt að tengjast Wi-Fi"</string>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index 72814f2..e04c8e4 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -123,8 +123,7 @@
     <string name="roamingText11" msgid="4154476854426920970">"Banner roaming attivato"</string>
     <string name="roamingText12" msgid="1189071119992726320">"Banner roaming disattivato"</string>
     <string name="roamingTextSearching" msgid="8360141885972279963">"Ricerca servizio"</string>
-    <!-- no translation found for wfcRegErrorTitle (2301376280632110664) -->
-    <skip />
+    <string name="wfcRegErrorTitle" msgid="2301376280632110664">"Chiamate Wi-Fi"</string>
   <string-array name="wfcOperatorErrorMessages">
   </string-array>
     <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: inoltro non effettuato"</string>
@@ -1302,8 +1301,7 @@
       <item quantity="one">Apri rete Wi-Fi disponibile</item>
     </plurals>
     <string name="wifi_available_sign_in" msgid="9157196203958866662">"Accedi a rete Wi-Fi"</string>
-    <!-- no translation found for network_available_sign_in (1848877297365446605) -->
-    <skip />
+    <string name="network_available_sign_in" msgid="1848877297365446605">"Accedi alla rete"</string>
     <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
     <skip />
     <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Impossibile connettersi alla rete Wi-Fi"</string>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index 4a68ef7..25a6ffd 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -125,8 +125,7 @@
     <string name="roamingText11" msgid="4154476854426920970">"מודעת באנר נודדת מופעלת"</string>
     <string name="roamingText12" msgid="1189071119992726320">"מודעת באנר נודדת כבויה"</string>
     <string name="roamingTextSearching" msgid="8360141885972279963">"מחפש שירות"</string>
-    <!-- no translation found for wfcRegErrorTitle (2301376280632110664) -->
-    <skip />
+    <string name="wfcRegErrorTitle" msgid="2301376280632110664">"‏שיחות ב-Wi-Fi"</string>
   <string-array name="wfcOperatorErrorMessages">
   </string-array>
     <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: ללא העברה"</string>
@@ -1316,8 +1315,7 @@
       <item quantity="one">‏יש רשת Wi-Fi פתוחה וזמינה</item>
     </plurals>
     <string name="wifi_available_sign_in" msgid="9157196203958866662">"‏היכנס לרשת Wi-Fi"</string>
-    <!-- no translation found for network_available_sign_in (1848877297365446605) -->
-    <skip />
+    <string name="network_available_sign_in" msgid="1848877297365446605">"היכנס לרשת"</string>
     <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
     <skip />
     <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"‏אין אפשרות להתחבר ל-Wi-Fi"</string>
diff --git a/core/res/res/values-lo-rLA/strings.xml b/core/res/res/values-lo-rLA/strings.xml
index 9003274..be720e8 100644
--- a/core/res/res/values-lo-rLA/strings.xml
+++ b/core/res/res/values-lo-rLA/strings.xml
@@ -123,8 +123,7 @@
     <string name="roamingText11" msgid="4154476854426920970">"ເປີດໂຣມມິງແບນເນີ"</string>
     <string name="roamingText12" msgid="1189071119992726320">"ປິດໂຣມມິງແບນເນີ"</string>
     <string name="roamingTextSearching" msgid="8360141885972279963">"ຊອກຫາບໍລິການ"</string>
-    <!-- no translation found for wfcRegErrorTitle (2301376280632110664) -->
-    <skip />
+    <string name="wfcRegErrorTitle" msgid="2301376280632110664">"ການ​ໂທ Wi-Fi"</string>
   <string-array name="wfcOperatorErrorMessages">
   </string-array>
     <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: ບໍ່ຖືກສົ່ງຕໍ່"</string>
@@ -1302,8 +1301,7 @@
       <item quantity="one">ເປີດເຄືອຂ່າຍ Wi-Fi  ທີ່ມີໃຫ້</item>
     </plurals>
     <string name="wifi_available_sign_in" msgid="9157196203958866662">"ເຂົ້າສູ່ລະບົບເຄືອຂ່າຍ Wi-Fi"</string>
-    <!-- no translation found for network_available_sign_in (1848877297365446605) -->
-    <skip />
+    <string name="network_available_sign_in" msgid="1848877297365446605">"ລົງຊື່ເຂົ້າເຄືອຂ່າຍ"</string>
     <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
     <skip />
     <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"ບໍ່ສາມາດເຊື່ອມຕໍ່ Wi-Fi ໄດ້"</string>
diff --git a/core/res/res/values-mcc310-mnc260-af/strings.xml b/core/res/res/values-mcc310-mnc260-af/strings.xml
new file mode 100644
index 0000000..e33c27b
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc260-af/strings.xml
@@ -0,0 +1,28 @@
+<?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 my obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<!--  These resources are around just to allow their values to be customized
+     for different hardware and product builds.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="wfcOperatorErrorMessages">
+    <item msgid="931634632269046788">"Wi-Fi-oproepe is nie beskikbaar nie. Kontak jou diensverskaffer om Wi-Fi-oproepe te aktiveer."</item>
+  </string-array>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc260-am/strings.xml b/core/res/res/values-mcc310-mnc260-am/strings.xml
new file mode 100644
index 0000000..24a88097
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc260-am/strings.xml
@@ -0,0 +1,28 @@
+<?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 my obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<!--  These resources are around just to allow their values to be customized
+     for different hardware and product builds.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="wfcOperatorErrorMessages">
+    <item msgid="931634632269046788">"Wi-Fi ጥሪ ማድረጊያ አይገኝም። የ Wi-Fi ጥሪ ማድረጊያን ለማንቃት የእርስዎን አገልግሎት አቅራቢ ያነጋግሩ።"</item>
+  </string-array>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc260-ar/strings.xml b/core/res/res/values-mcc310-mnc260-ar/strings.xml
new file mode 100644
index 0000000..8c2e6f6
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc260-ar/strings.xml
@@ -0,0 +1,28 @@
+<?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 my obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<!--  These resources are around just to allow their values to be customized
+     for different hardware and product builds.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="wfcOperatorErrorMessages">
+    <item msgid="931634632269046788">"‏الاتصال عبر Wi-Fi ليس متوفرًا. اتصل بمشغل شبكة الجوّال لتمكين الاتصال عبر Wi-Fi."</item>
+  </string-array>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc260-da/strings.xml b/core/res/res/values-mcc310-mnc260-da/strings.xml
new file mode 100644
index 0000000..20532b2
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc260-da/strings.xml
@@ -0,0 +1,28 @@
+<?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 my obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<!--  These resources are around just to allow their values to be customized
+     for different hardware and product builds.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="wfcOperatorErrorMessages">
+    <item msgid="931634632269046788">"Opkald via Wi-Fi er ikke muligt. Kontakt dit mobilselskab for at aktivere Opkald via Wi-Fi."</item>
+  </string-array>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc260-el/strings.xml b/core/res/res/values-mcc310-mnc260-el/strings.xml
new file mode 100644
index 0000000..cd5d615
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc260-el/strings.xml
@@ -0,0 +1,28 @@
+<?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 my obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<!--  These resources are around just to allow their values to be customized
+     for different hardware and product builds.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="wfcOperatorErrorMessages">
+    <item msgid="931634632269046788">"Η κλήση Wi-Fi δεν είναι διαθέσιμη. Επικοινωνήστε με την εταιρεία κινητής τηλεφωνίας σας για να ενεργοποιήσετε την κλήση Wi-Fi."</item>
+  </string-array>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc260-en-rGB/strings.xml b/core/res/res/values-mcc310-mnc260-en-rGB/strings.xml
new file mode 100644
index 0000000..3f764c0
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc260-en-rGB/strings.xml
@@ -0,0 +1,28 @@
+<?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 my obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<!--  These resources are around just to allow their values to be customized
+     for different hardware and product builds.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="wfcOperatorErrorMessages">
+    <item msgid="931634632269046788">"Wi-Fi Calling isn\'t available. Contact your operator to enable Wi-Fi Calling."</item>
+  </string-array>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc260-en-rIN/strings.xml b/core/res/res/values-mcc310-mnc260-en-rIN/strings.xml
new file mode 100644
index 0000000..3f764c0
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc260-en-rIN/strings.xml
@@ -0,0 +1,28 @@
+<?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 my obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<!--  These resources are around just to allow their values to be customized
+     for different hardware and product builds.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="wfcOperatorErrorMessages">
+    <item msgid="931634632269046788">"Wi-Fi Calling isn\'t available. Contact your operator to enable Wi-Fi Calling."</item>
+  </string-array>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc260-es-rUS/strings.xml b/core/res/res/values-mcc310-mnc260-es-rUS/strings.xml
new file mode 100644
index 0000000..3e13ebb
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc260-es-rUS/strings.xml
@@ -0,0 +1,28 @@
+<?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 my obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<!--  These resources are around just to allow their values to be customized
+     for different hardware and product builds.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="wfcOperatorErrorMessages">
+    <item msgid="931634632269046788">"Las llamadas con Wi-Fi no están disponibles. Comunícate con el proveedor para habilitar la función."</item>
+  </string-array>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc260-et-rEE/strings.xml b/core/res/res/values-mcc310-mnc260-et-rEE/strings.xml
new file mode 100644
index 0000000..465507a
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc260-et-rEE/strings.xml
@@ -0,0 +1,28 @@
+<?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 my obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<!--  These resources are around just to allow their values to be customized
+     for different hardware and product builds.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="wfcOperatorErrorMessages">
+    <item msgid="931634632269046788">"WiFi-kõned pole saadaval. WiFi-kõnede lubamiseks võtke ühendust operaatoriga."</item>
+  </string-array>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc260-fa/strings.xml b/core/res/res/values-mcc310-mnc260-fa/strings.xml
new file mode 100644
index 0000000..083a613
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc260-fa/strings.xml
@@ -0,0 +1,28 @@
+<?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 my obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<!--  These resources are around just to allow their values to be customized
+     for different hardware and product builds.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="wfcOperatorErrorMessages">
+    <item msgid="931634632269046788">"‏تماس از طریق Wi-Fi امکان‌پذیر نیست. برای فعال کردن تماس Wi-Fi، با شرکت مخابراتی‌تان تماس بگیرید."</item>
+  </string-array>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc260-fi/strings.xml b/core/res/res/values-mcc310-mnc260-fi/strings.xml
new file mode 100644
index 0000000..43efe46
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc260-fi/strings.xml
@@ -0,0 +1,28 @@
+<?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 my obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<!--  These resources are around just to allow their values to be customized
+     for different hardware and product builds.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="wfcOperatorErrorMessages">
+    <item msgid="931634632269046788">"Wi-Fi-puhelut eivät ole käytettävissä. Pyydä operaattoriasi ottamaan Wi-Fi-puhelut käyttöön."</item>
+  </string-array>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc260-fr-rCA/strings.xml b/core/res/res/values-mcc310-mnc260-fr-rCA/strings.xml
new file mode 100644
index 0000000..2d63c89
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc260-fr-rCA/strings.xml
@@ -0,0 +1,28 @@
+<?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 my obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<!--  These resources are around just to allow their values to be customized
+     for different hardware and product builds.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="wfcOperatorErrorMessages">
+    <item msgid="931634632269046788">"La fonction d\'appel par Wi-Fi n\'est pas disponible. Communiquez avec votre fournisseur de services pour activer les appels par Wi-Fi."</item>
+  </string-array>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc260-in/strings.xml b/core/res/res/values-mcc310-mnc260-in/strings.xml
new file mode 100644
index 0000000..669d384
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc260-in/strings.xml
@@ -0,0 +1,28 @@
+<?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 my obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<!--  These resources are around just to allow their values to be customized
+     for different hardware and product builds.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="wfcOperatorErrorMessages">
+    <item msgid="931634632269046788">"Panggilan Wi-Fi tidak tersedia. Hubungi operator untuk mengaktifkan Panggilan Wi-Fi."</item>
+  </string-array>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc260-is-rIS/strings.xml b/core/res/res/values-mcc310-mnc260-is-rIS/strings.xml
new file mode 100644
index 0000000..2549756
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc260-is-rIS/strings.xml
@@ -0,0 +1,28 @@
+<?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 my obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<!--  These resources are around just to allow their values to be customized
+     for different hardware and product builds.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="wfcOperatorErrorMessages">
+    <item msgid="931634632269046788">"Wi-Fi símtöl eru ekki í boði. Hafðu samband við símafyrirtækið þitt til að virkja Wi-Fi símtöl."</item>
+  </string-array>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc260-it/strings.xml b/core/res/res/values-mcc310-mnc260-it/strings.xml
new file mode 100644
index 0000000..7f58424
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc260-it/strings.xml
@@ -0,0 +1,28 @@
+<?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 my obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<!--  These resources are around just to allow their values to be customized
+     for different hardware and product builds.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="wfcOperatorErrorMessages">
+    <item msgid="931634632269046788">"Le chiamate Wi-Fi non sono disponibili. Contatta il tuo operatore per attivarle."</item>
+  </string-array>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc260-iw/strings.xml b/core/res/res/values-mcc310-mnc260-iw/strings.xml
new file mode 100644
index 0000000..161c868
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc260-iw/strings.xml
@@ -0,0 +1,28 @@
+<?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 my obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<!--  These resources are around just to allow their values to be customized
+     for different hardware and product builds.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="wfcOperatorErrorMessages">
+    <item msgid="931634632269046788">"‏שיחות ב-Wi-Fi אינן זמינות. צור קשר עם הספק שלך כדי להפעיל שיחות ב-Wi-Fi."</item>
+  </string-array>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc260-lo-rLA/strings.xml b/core/res/res/values-mcc310-mnc260-lo-rLA/strings.xml
new file mode 100644
index 0000000..8f826e4
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc260-lo-rLA/strings.xml
@@ -0,0 +1,28 @@
+<?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 my obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<!--  These resources are around just to allow their values to be customized
+     for different hardware and product builds.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="wfcOperatorErrorMessages">
+    <item msgid="931634632269046788">"ການໂທ Wi-Fi ບໍ່ພ້ອມໃຊ້ງານ. ໃຫ້ຕິດຕໍ່ຫາຜູ້ໃຫ້ບໍລິການຂອງທ່ານເພື່ອເປີດໃຊ້ການໂທ Wi-Fi."</item>
+  </string-array>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc260-ms-rMY/strings.xml b/core/res/res/values-mcc310-mnc260-ms-rMY/strings.xml
new file mode 100644
index 0000000..aa13114
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc260-ms-rMY/strings.xml
@@ -0,0 +1,28 @@
+<?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 my obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<!--  These resources are around just to allow their values to be customized
+     for different hardware and product builds.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="wfcOperatorErrorMessages">
+    <item msgid="931634632269046788">"Panggilan Wi-Fi tidak tersedia. Hubungi pembawa anda untuk mendayakan Panggilan Wi-Fi."</item>
+  </string-array>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc260-my-rMM/strings.xml b/core/res/res/values-mcc310-mnc260-my-rMM/strings.xml
new file mode 100644
index 0000000..90e99af
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc260-my-rMM/strings.xml
@@ -0,0 +1,28 @@
+<?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 my obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<!--  These resources are around just to allow their values to be customized
+     for different hardware and product builds.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="wfcOperatorErrorMessages">
+    <item msgid="931634632269046788">"ဝိုင်ဖိုင်ခေါ်ဆိုမှု မရပါ။ ဝိုင်ဖိုင် ခေါ်နိုင်ရန် သင်၏ ဖုန်းဝန်ဆောင်မှုပေးသူအား ဆက်သွယ်ပါ။"</item>
+  </string-array>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc260-ne-rNP/strings.xml b/core/res/res/values-mcc310-mnc260-ne-rNP/strings.xml
new file mode 100644
index 0000000..532cf17
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc260-ne-rNP/strings.xml
@@ -0,0 +1,28 @@
+<?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 my obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<!--  These resources are around just to allow their values to be customized
+     for different hardware and product builds.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="wfcOperatorErrorMessages">
+    <item msgid="931634632269046788">"Wi-Fi कलिङ् उपलब्ध छैन। Wi-Fi कलिङ सक्षम पार्न तपाईँको वाहकलाई सम्पर्क गर्नुहोस्।"</item>
+  </string-array>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc260-pt-rPT/strings.xml b/core/res/res/values-mcc310-mnc260-pt-rPT/strings.xml
new file mode 100644
index 0000000..bb22d9e
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc260-pt-rPT/strings.xml
@@ -0,0 +1,28 @@
+<?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 my obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<!--  These resources are around just to allow their values to be customized
+     for different hardware and product builds.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="wfcOperatorErrorMessages">
+    <item msgid="931634632269046788">"As chamadas Wi-Fi não estão disponíveis. Contacte o seu operador para as ativar."</item>
+  </string-array>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc260-pt/strings.xml b/core/res/res/values-mcc310-mnc260-pt/strings.xml
new file mode 100644
index 0000000..d422e83
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc260-pt/strings.xml
@@ -0,0 +1,28 @@
+<?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 my obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<!--  These resources are around just to allow their values to be customized
+     for different hardware and product builds.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="wfcOperatorErrorMessages">
+    <item msgid="931634632269046788">"A chamada por Wi-Fi não está disponível. Entre em contato com sua operadora para ativá-la."</item>
+  </string-array>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc260-ro/strings.xml b/core/res/res/values-mcc310-mnc260-ro/strings.xml
new file mode 100644
index 0000000..422280f
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc260-ro/strings.xml
@@ -0,0 +1,28 @@
+<?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 my obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<!--  These resources are around just to allow their values to be customized
+     for different hardware and product builds.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="wfcOperatorErrorMessages">
+    <item msgid="931634632269046788">"Apelarea prin Wi-Fi nu este disponibilă. Contactați-vă operatorul pentru a activa Apelarea prin Wi-Fi."</item>
+  </string-array>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc260-sk/strings.xml b/core/res/res/values-mcc310-mnc260-sk/strings.xml
new file mode 100644
index 0000000..527388f
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc260-sk/strings.xml
@@ -0,0 +1,28 @@
+<?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 my obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<!--  These resources are around just to allow their values to be customized
+     for different hardware and product builds.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="wfcOperatorErrorMessages">
+    <item msgid="931634632269046788">"Volanie cez Wi-Fi nie je k dispozícii. Kontaktujte svojho operátora a požiadajte ho o povolenie volania cez Wi-Fi."</item>
+  </string-array>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc260-sv/strings.xml b/core/res/res/values-mcc310-mnc260-sv/strings.xml
new file mode 100644
index 0000000..8e0d159
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc260-sv/strings.xml
@@ -0,0 +1,28 @@
+<?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 my obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<!--  These resources are around just to allow their values to be customized
+     for different hardware and product builds.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="wfcOperatorErrorMessages">
+    <item msgid="931634632269046788">"Det går inte att ringa Wi-Fi-samtal. Kontakta operatören om du vill aktivera Wi-Fi-samtal."</item>
+  </string-array>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc260-sw/strings.xml b/core/res/res/values-mcc310-mnc260-sw/strings.xml
new file mode 100644
index 0000000..ff9bf3f
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc260-sw/strings.xml
@@ -0,0 +1,28 @@
+<?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 my obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<!--  These resources are around just to allow their values to be customized
+     for different hardware and product builds.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="wfcOperatorErrorMessages">
+    <item msgid="931634632269046788">"Huduma ya Upigaji simu kwa Wi-Fi haipatikani. Wasiliana na mtoa huduma wako ili awashe Upigaji simu kwa Wi-Fi."</item>
+  </string-array>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc260-th/strings.xml b/core/res/res/values-mcc310-mnc260-th/strings.xml
new file mode 100644
index 0000000..52dc04f
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc260-th/strings.xml
@@ -0,0 +1,28 @@
+<?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 my obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<!--  These resources are around just to allow their values to be customized
+     for different hardware and product builds.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="wfcOperatorErrorMessages">
+    <item msgid="931634632269046788">"การโทรผ่าน Wi-Fi ไม่พร้อมใช้งาน โปรดติดต่อผู้ให้บริการของคุณเพื่อเปิดใช้การโทรผ่าน Wi-Fi"</item>
+  </string-array>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc260-uk/strings.xml b/core/res/res/values-mcc310-mnc260-uk/strings.xml
new file mode 100644
index 0000000..243c7b0
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc260-uk/strings.xml
@@ -0,0 +1,28 @@
+<?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 my obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<!--  These resources are around just to allow their values to be customized
+     for different hardware and product builds.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="wfcOperatorErrorMessages">
+    <item msgid="931634632269046788">"Ви не можете телефонувати через Wi-Fi. Щоб увімкнути цю функцію, зв’яжіться з оператором."</item>
+  </string-array>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc260-zu/strings.xml b/core/res/res/values-mcc310-mnc260-zu/strings.xml
new file mode 100644
index 0000000..a037bb8
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc260-zu/strings.xml
@@ -0,0 +1,28 @@
+<?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 my obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<!--  These resources are around just to allow their values to be customized
+     for different hardware and product builds.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="wfcOperatorErrorMessages">
+    <item msgid="931634632269046788">"Ukushaya kwe-Wi-Fi akutholakali. Xhumana nenkampani yakho yenethiwekhi ukuze unike amandla ukushaya kwe-Wi-Fi."</item>
+  </string-array>
+</resources>
diff --git a/core/res/res/values-ms-rMY/strings.xml b/core/res/res/values-ms-rMY/strings.xml
index 6545081..9a80da8 100644
--- a/core/res/res/values-ms-rMY/strings.xml
+++ b/core/res/res/values-ms-rMY/strings.xml
@@ -123,8 +123,7 @@
     <string name="roamingText11" msgid="4154476854426920970">"Sepanduk Perayauan Dihidupkan"</string>
     <string name="roamingText12" msgid="1189071119992726320">"Sepanduk Perayauan Dimatikan"</string>
     <string name="roamingTextSearching" msgid="8360141885972279963">"Mencari Perkhidmatan"</string>
-    <!-- no translation found for wfcRegErrorTitle (2301376280632110664) -->
-    <skip />
+    <string name="wfcRegErrorTitle" msgid="2301376280632110664">"Panggilan Wi-Fi"</string>
   <string-array name="wfcOperatorErrorMessages">
   </string-array>
     <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Tidak dimajukan"</string>
@@ -1302,8 +1301,7 @@
       <item quantity="one">Rangkaian Wi-Fi terbuka tersedia</item>
     </plurals>
     <string name="wifi_available_sign_in" msgid="9157196203958866662">"Log masuk ke rangkaian Wi-Fi"</string>
-    <!-- no translation found for network_available_sign_in (1848877297365446605) -->
-    <skip />
+    <string name="network_available_sign_in" msgid="1848877297365446605">"Log masuk ke rangkaian"</string>
     <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
     <skip />
     <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Tidak boleh menyambung kepada Wi-Fi"</string>
diff --git a/core/res/res/values-my-rMM/strings.xml b/core/res/res/values-my-rMM/strings.xml
index 605d53c..cb46c91 100644
--- a/core/res/res/values-my-rMM/strings.xml
+++ b/core/res/res/values-my-rMM/strings.xml
@@ -123,8 +123,7 @@
     <string name="roamingText11" msgid="4154476854426920970">"ရုန်းမင်းစာတမ်းဖွင့်ရန်"</string>
     <string name="roamingText12" msgid="1189071119992726320">"ရုန်းမင်းစာတမ်းပိတ်ထားရန်"</string>
     <string name="roamingTextSearching" msgid="8360141885972279963">"ဆားဗစ်အားရှာဖွေနေသည်"</string>
-    <!-- no translation found for wfcRegErrorTitle (2301376280632110664) -->
-    <skip />
+    <string name="wfcRegErrorTitle" msgid="2301376280632110664">"ဝိုင်ဖိုင် ခေါ်ဆိုမှု"</string>
   <string-array name="wfcOperatorErrorMessages">
   </string-array>
     <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: ထပ်ဆင့်မပို့နိုင်ပါ"</string>
@@ -1301,10 +1300,8 @@
       <item quantity="other">Wi-Fi ကွန်ယက်များရရှိနိုင်သည်အား ဖွင့်ပါ</item>
       <item quantity="one">Wi-Fi ကွန်ယက်ရရှိနိုင်သည်အား ဖွင့်ပါ</item>
     </plurals>
-    <!-- no translation found for wifi_available_sign_in (9157196203958866662) -->
-    <skip />
-    <!-- no translation found for network_available_sign_in (1848877297365446605) -->
-    <skip />
+    <string name="wifi_available_sign_in" msgid="9157196203958866662">"ဝိုင်ဖိုင်ကွန်ရက်သို့ လက်မှတ်ထိုးဝင်ပါ"</string>
+    <string name="network_available_sign_in" msgid="1848877297365446605">"ကွန်ယက်သို့ လက်မှတ်ထိုးဝင်ရန်"</string>
     <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
     <skip />
     <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"ဝိုင်ဖိုင်ကိုချိတ်ဆက်မရပါ"</string>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 1cfc116..1d1373c 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -1271,7 +1271,7 @@
     <string name="new_app_description" msgid="1932143598371537340">"Stopp den gamle appen uten å lagre."</string>
     <string name="dump_heap_notification" msgid="2618183274836056542">"<xliff:g id="PROC">%1$s</xliff:g> er over minnegrensen"</string>
     <string name="dump_heap_notification_detail" msgid="2075673362317481664">"Minnedumpen («heap dump») er samlet inn – trykk for å dele"</string>
-    <string name="dump_heap_title" msgid="5864292264307651673">"Vil du dele minnedumpen? («heap dump»)"</string>
+    <string name="dump_heap_title" msgid="5864292264307651673">"Vil du dele minnedumpen («heap dump»)?"</string>
     <string name="dump_heap_text" msgid="4809417337240334941">"<xliff:g id="PROC">%1$s</xliff:g>-prosessen er <xliff:g id="SIZE">%2$s</xliff:g> over grensen for prosessminne. En minnedump («heap dump») er tilgjengelig for deling med utvikleren. Vær forsiktig – denne minnedumpen kan inneholde noen av de personlige opplysningene dine som appen har tilgang til."</string>
     <string name="sendText" msgid="5209874571959469142">"Velg handling for tekst"</string>
     <string name="volume_ringtone" msgid="6885421406845734650">"Ringetonevolum"</string>
diff --git a/core/res/res/values-ne-rNP/strings.xml b/core/res/res/values-ne-rNP/strings.xml
index 01acc31..7f47246 100644
--- a/core/res/res/values-ne-rNP/strings.xml
+++ b/core/res/res/values-ne-rNP/strings.xml
@@ -123,8 +123,7 @@
     <string name="roamingText11" msgid="4154476854426920970">"रोमिङ ध्वजा चालु छ"</string>
     <string name="roamingText12" msgid="1189071119992726320">"रोमिङ ब्यानर बन्द छ"</string>
     <string name="roamingTextSearching" msgid="8360141885972279963">"सेवाको खोजी गर्दै…"</string>
-    <!-- no translation found for wfcRegErrorTitle (2301376280632110664) -->
-    <skip />
+    <string name="wfcRegErrorTitle" msgid="2301376280632110664">"Wi-Fi कलिङ्"</string>
   <string-array name="wfcOperatorErrorMessages">
   </string-array>
     <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: अगाडि पठाइएको छैन"</string>
@@ -1308,8 +1307,7 @@
       <item quantity="one">खुल्ला Wi-Fi सञ्जाल उपलब्ध छ</item>
     </plurals>
     <string name="wifi_available_sign_in" msgid="9157196203958866662">"वाइफाइ नेटवर्कमा साइन इन गर्नुहोस्"</string>
-    <!-- no translation found for network_available_sign_in (1848877297365446605) -->
-    <skip />
+    <string name="network_available_sign_in" msgid="1848877297365446605">"सञ्जालमा साइन इन गर्नुहोस्"</string>
     <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
     <skip />
     <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"वाइ-फाइसँग जडान गर्न सकेन"</string>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index 6085ccc..39ae51c 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -123,8 +123,7 @@
     <string name="roamingText11" msgid="4154476854426920970">"Faixa de Roaming activada"</string>
     <string name="roamingText12" msgid="1189071119992726320">"Faixa de Roaming desativada"</string>
     <string name="roamingTextSearching" msgid="8360141885972279963">"A procurar Serviço"</string>
-    <!-- no translation found for wfcRegErrorTitle (2301376280632110664) -->
-    <skip />
+    <string name="wfcRegErrorTitle" msgid="2301376280632110664">"Chamadas Wi-Fi"</string>
   <string-array name="wfcOperatorErrorMessages">
   </string-array>
     <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Não reencaminhado"</string>
@@ -1302,8 +1301,7 @@
       <item quantity="one">Rede Wi-Fi aberta disponível</item>
     </plurals>
     <string name="wifi_available_sign_in" msgid="9157196203958866662">"Iniciar sessão na rede Wi-Fi"</string>
-    <!-- no translation found for network_available_sign_in (1848877297365446605) -->
-    <skip />
+    <string name="network_available_sign_in" msgid="1848877297365446605">"Início de sessão na rede"</string>
     <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
     <skip />
     <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Não foi possível ligar a Wi-Fi"</string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index 5bf6332..3a22dd3 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -123,8 +123,7 @@
     <string name="roamingText11" msgid="4154476854426920970">"Banner de roaming ativado"</string>
     <string name="roamingText12" msgid="1189071119992726320">"Banner de roaming desativado"</string>
     <string name="roamingTextSearching" msgid="8360141885972279963">"Pesquisando serviço"</string>
-    <!-- no translation found for wfcRegErrorTitle (2301376280632110664) -->
-    <skip />
+    <string name="wfcRegErrorTitle" msgid="2301376280632110664">"Chamadas por Wi-Fi"</string>
   <string-array name="wfcOperatorErrorMessages">
   </string-array>
     <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Não encaminhado"</string>
@@ -1302,8 +1301,7 @@
       <item quantity="other">Abrir redes Wi-Fi disponíveis</item>
     </plurals>
     <string name="wifi_available_sign_in" msgid="9157196203958866662">"Fazer login na rede Wi-Fi"</string>
-    <!-- no translation found for network_available_sign_in (1848877297365446605) -->
-    <skip />
+    <string name="network_available_sign_in" msgid="1848877297365446605">"Fazer login na rede"</string>
     <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
     <skip />
     <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Não foi possível se conectar a redes Wi-Fi"</string>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index 24b2826..722b59a 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -124,8 +124,7 @@
     <string name="roamingText11" msgid="4154476854426920970">"Banner roaming activat"</string>
     <string name="roamingText12" msgid="1189071119992726320">"Banner roaming dezactivat"</string>
     <string name="roamingTextSearching" msgid="8360141885972279963">"Se caută serviciul"</string>
-    <!-- no translation found for wfcRegErrorTitle (2301376280632110664) -->
-    <skip />
+    <string name="wfcRegErrorTitle" msgid="2301376280632110664">"Apelare prin Wi-Fi"</string>
   <string-array name="wfcOperatorErrorMessages">
   </string-array>
     <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: neredirecţionată"</string>
@@ -1309,8 +1308,7 @@
       <item quantity="one">Rețea Wi-Fi deschisă disponibilă</item>
     </plurals>
     <string name="wifi_available_sign_in" msgid="9157196203958866662">"Conectaţi-vă la reţeaua Wi-Fi"</string>
-    <!-- no translation found for network_available_sign_in (1848877297365446605) -->
-    <skip />
+    <string name="network_available_sign_in" msgid="1848877297365446605">"Conectați-vă la rețea"</string>
     <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
     <skip />
     <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Nu se poate conecta la Wi-Fi"</string>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index 5b7a945..fefc92e 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -125,8 +125,7 @@
     <string name="roamingText11" msgid="4154476854426920970">"Banner roamingu je zapnutý"</string>
     <string name="roamingText12" msgid="1189071119992726320">"Banner roamingu je vypnutý"</string>
     <string name="roamingTextSearching" msgid="8360141885972279963">"Vyhľadávanie služby"</string>
-    <!-- no translation found for wfcRegErrorTitle (2301376280632110664) -->
-    <skip />
+    <string name="wfcRegErrorTitle" msgid="2301376280632110664">"Volanie cez Wi-Fi"</string>
   <string-array name="wfcOperatorErrorMessages">
   </string-array>
     <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Nepresmerované"</string>
@@ -1316,8 +1315,7 @@
       <item quantity="one">K dispozícii je verejná sieť Wi-Fi</item>
     </plurals>
     <string name="wifi_available_sign_in" msgid="9157196203958866662">"Prihlásiť sa do siete Wi-Fi"</string>
-    <!-- no translation found for network_available_sign_in (1848877297365446605) -->
-    <skip />
+    <string name="network_available_sign_in" msgid="1848877297365446605">"Prihlásenie do siete"</string>
     <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
     <skip />
     <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Nepodarilo sa pripojiť k sieti Wi-Fi"</string>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index feaf093..0c13a51 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -1282,7 +1282,7 @@
     <string name="dump_heap_notification" msgid="2618183274836056542">"Proces <xliff:g id="PROC">%1$s</xliff:g> je presegel omejitev pomnilnika"</string>
     <string name="dump_heap_notification_detail" msgid="2075673362317481664">"Izvoz kopice je zbran; dotaknite se za deljenje z drugimi"</string>
     <string name="dump_heap_title" msgid="5864292264307651673">"Deljenje izvoza kopice z drugimi?"</string>
-    <string name="dump_heap_text" msgid="4809417337240334941">"Proces <xliff:g id="PROC">%1$s</xliff:g> je presegel <xliff:g id="SIZE">%2$s</xliff:g> omejitve pomnilnika za procese. Izvoz kopice je na voljo, da ga delite z razvijalcem. Previdno: izvoz kopica lahko vsebuje vaše osebne podatke, do katerih ima aplikacija dostop."</string>
+    <string name="dump_heap_text" msgid="4809417337240334941">"Proces <xliff:g id="PROC">%1$s</xliff:g> je presegel <xliff:g id="SIZE">%2$s</xliff:g> omejitve pomnilnika za proces. Izvoz kopice je na voljo, da ga delite z razvijalcem. Previdno: izvoz kopice lahko vsebuje vaše osebne podatke, do katerih ima aplikacija dostop."</string>
     <string name="sendText" msgid="5209874571959469142">"Izberite dejanje za besedilo"</string>
     <string name="volume_ringtone" msgid="6885421406845734650">"Glasnost zvonjenja"</string>
     <string name="volume_music" msgid="5421651157138628171">"Glasnost predstavnosti"</string>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index ba68c0b..450b2ff 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -123,8 +123,7 @@
     <string name="roamingText11" msgid="4154476854426920970">"Roamingbanner på"</string>
     <string name="roamingText12" msgid="1189071119992726320">"Roamingbanner av"</string>
     <string name="roamingTextSearching" msgid="8360141885972279963">"Söker efter tjänst"</string>
-    <!-- no translation found for wfcRegErrorTitle (2301376280632110664) -->
-    <skip />
+    <string name="wfcRegErrorTitle" msgid="2301376280632110664">"Wi-Fi-samtal"</string>
   <string-array name="wfcOperatorErrorMessages">
   </string-array>
     <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Vidarebefordras inte"</string>
@@ -1302,8 +1301,7 @@
       <item quantity="one">Öppet Wi-Fi-nätverk är tillgängligt</item>
     </plurals>
     <string name="wifi_available_sign_in" msgid="9157196203958866662">"Logga in på ett Wi-Fi-nätverk"</string>
-    <!-- no translation found for network_available_sign_in (1848877297365446605) -->
-    <skip />
+    <string name="network_available_sign_in" msgid="1848877297365446605">"Logga in på nätverket"</string>
     <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
     <skip />
     <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Det gick inte att ansluta till Wi-Fi"</string>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index 7ddf7d8..129287d 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -123,8 +123,7 @@
     <string name="roamingText11" msgid="4154476854426920970">"Washa Bango la Uzururaji"</string>
     <string name="roamingText12" msgid="1189071119992726320">"Zima Bango la Uzururaji"</string>
     <string name="roamingTextSearching" msgid="8360141885972279963">"Inatafuta Huduma"</string>
-    <!-- no translation found for wfcRegErrorTitle (2301376280632110664) -->
-    <skip />
+    <string name="wfcRegErrorTitle" msgid="2301376280632110664">"Upigaji Simu kwa Wi-Fi"</string>
   <string-array name="wfcOperatorErrorMessages">
   </string-array>
     <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Haijatumiwa mwingine"</string>
@@ -1302,8 +1301,7 @@
       <item quantity="one">Fungua mtandao wa Wi-Fi unaopatikana</item>
     </plurals>
     <string name="wifi_available_sign_in" msgid="9157196203958866662">"Ingia kwa mtandao wa Wi-Fi"</string>
-    <!-- no translation found for network_available_sign_in (1848877297365446605) -->
-    <skip />
+    <string name="network_available_sign_in" msgid="1848877297365446605">"Ingia katika mtandao"</string>
     <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
     <skip />
     <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Haikuweza kuunganisha kwa Mtandao-Hewa"</string>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index eb1d7d2..0c73ea1f 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -123,8 +123,7 @@
     <string name="roamingText11" msgid="4154476854426920970">"เปิดโรมมิ่งแบนเนอร์"</string>
     <string name="roamingText12" msgid="1189071119992726320">"ปิดโรมมิ่งแบนเนอร์"</string>
     <string name="roamingTextSearching" msgid="8360141885972279963">"กำลังค้นหาบริการ"</string>
-    <!-- no translation found for wfcRegErrorTitle (2301376280632110664) -->
-    <skip />
+    <string name="wfcRegErrorTitle" msgid="2301376280632110664">"การโทรผ่าน Wi-Fi"</string>
   <string-array name="wfcOperatorErrorMessages">
   </string-array>
     <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: ไม่ได้โอนสาย"</string>
@@ -1302,8 +1301,7 @@
       <item quantity="one">มี 1 เครือข่าย Wi-Fi สาธารณะที่ใช้งานได้</item>
     </plurals>
     <string name="wifi_available_sign_in" msgid="9157196203958866662">"ลงชื่อเข้าใช้เครือข่าย WiFi"</string>
-    <!-- no translation found for network_available_sign_in (1848877297365446605) -->
-    <skip />
+    <string name="network_available_sign_in" msgid="1848877297365446605">"ลงชื่อเข้าใช้เครือข่าย"</string>
     <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
     <skip />
     <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"ไม่สามารถเชื่อมต่อ WiFi"</string>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 4aad890..a865f92 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -125,8 +125,7 @@
     <string name="roamingText11" msgid="4154476854426920970">"Банер роум-гу ввімк."</string>
     <string name="roamingText12" msgid="1189071119992726320">"Банер роум-гу вимк."</string>
     <string name="roamingTextSearching" msgid="8360141885972279963">"Пошук служби"</string>
-    <!-- no translation found for wfcRegErrorTitle (2301376280632110664) -->
-    <skip />
+    <string name="wfcRegErrorTitle" msgid="2301376280632110664">"Дзвінок через Wi-Fi"</string>
   <string-array name="wfcOperatorErrorMessages">
   </string-array>
     <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: не переслано"</string>
@@ -1316,8 +1315,7 @@
       <item quantity="other">Відкриті мережі Wi-Fi доступні</item>
     </plurals>
     <string name="wifi_available_sign_in" msgid="9157196203958866662">"Вхід у мережу Wi-Fi"</string>
-    <!-- no translation found for network_available_sign_in (1848877297365446605) -->
-    <skip />
+    <string name="network_available_sign_in" msgid="1848877297365446605">"Вхід у мережу"</string>
     <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
     <skip />
     <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Не вдалося під’єднатися до мережі Wi-Fi"</string>
diff --git a/core/res/res/values-watch/config.xml b/core/res/res/values-watch/config.xml
index 745aa73..9044802 100644
--- a/core/res/res/values-watch/config.xml
+++ b/core/res/res/values-watch/config.xml
@@ -23,7 +23,7 @@
 
     <!-- Only show settings item due to smaller real estate. -->
     <string-array translatable="false" name="config_globalActionsList">
-        <item>voiceassist</item>
+        <item>assist</item>
     </string-array>
 
     <!-- Base "touch slop" value used by ViewConfiguration as a
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index 0c16cb6..4a3a7c5 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -793,7 +793,7 @@
     <string name="permlab_readNetworkUsageHistory" msgid="7862593283611493232">"读取网络使用情况历史记录"</string>
     <string name="permdesc_readNetworkUsageHistory" msgid="7689060749819126472">"允许应用读取特定网络和应用的网络使用情况历史记录。"</string>
     <string name="permlab_manageNetworkPolicy" msgid="2562053592339859990">"管理网络政策"</string>
-    <string name="permdesc_manageNetworkPolicy" msgid="7537586771559370668">"允许应用管理网络政策和定义专门针对应用的规则。"</string>
+    <string name="permdesc_manageNetworkPolicy" msgid="7537586771559370668">"允许应用管理网络规范和定义专门针对应用的规则。"</string>
     <string name="permlab_modifyNetworkAccounting" msgid="5088217309088729650">"修改网络使用情况记录方式"</string>
     <string name="permdesc_modifyNetworkAccounting" msgid="5443412866746198123">"允许该应用修改对于各应用的网络使用情况的统计方式。普通应用不应使用此权限。"</string>
     <string name="permlab_accessNotifications" msgid="7673416487873432268">"访问通知"</string>
@@ -1269,10 +1269,10 @@
     <string name="old_app_description" msgid="2082094275580358049">"不启动新的应用。"</string>
     <string name="new_app_action" msgid="5472756926945440706">"启动<xliff:g id="OLD_APP">%1$s</xliff:g>"</string>
     <string name="new_app_description" msgid="1932143598371537340">"停止旧的应用,但不保存。"</string>
-    <string name="dump_heap_notification" msgid="2618183274836056542">"<xliff:g id="PROC">%1$s</xliff:g>所占的内存已超出限制"</string>
-    <string name="dump_heap_notification_detail" msgid="2075673362317481664">"已收集堆转储;触摸即可共享"</string>
-    <string name="dump_heap_title" msgid="5864292264307651673">"要共享堆转储吗?"</string>
-    <string name="dump_heap_text" msgid="4809417337240334941">"<xliff:g id="PROC">%1$s</xliff:g>进程所占的内存已超出限制 (<xliff:g id="SIZE">%2$s</xliff:g>)。您可以将收集的堆转储共享给相应的开发者。请注意:此堆转储中可能包含该应用有权存取的您的个人信息。"</string>
+    <string name="dump_heap_notification" msgid="2618183274836056542">"<xliff:g id="PROC">%1$s</xliff:g>占用的内存已超出限制"</string>
+    <string name="dump_heap_notification_detail" msgid="2075673362317481664">"已收集堆转储数据;触摸即可共享"</string>
+    <string name="dump_heap_title" msgid="5864292264307651673">"要共享堆转储数据吗?"</string>
+    <string name="dump_heap_text" msgid="4809417337240334941">"<xliff:g id="PROC">%1$s</xliff:g>进程占用的内存已超出限制 (<xliff:g id="SIZE">%2$s</xliff:g>)。您可以将收集的堆转储数据共享给相应的开发者。请注意:此数据中可能包含该应用有权存取的您的个人信息。"</string>
     <string name="sendText" msgid="5209874571959469142">"选择要对文字执行的操作"</string>
     <string name="volume_ringtone" msgid="6885421406845734650">"铃声音量"</string>
     <string name="volume_music" msgid="5421651157138628171">"媒体音量"</string>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index 49b6884..a30ae97 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -1270,9 +1270,9 @@
     <string name="new_app_action" msgid="5472756926945440706">"啟動 <xliff:g id="OLD_APP">%1$s</xliff:g>"</string>
     <string name="new_app_description" msgid="1932143598371537340">"停止舊的應用程式且不儲存。"</string>
     <string name="dump_heap_notification" msgid="2618183274836056542">"<xliff:g id="PROC">%1$s</xliff:g> 已超出記憶體上限"</string>
-    <string name="dump_heap_notification_detail" msgid="2075673362317481664">"已收集堆積傾印文件;輕觸即可分享"</string>
-    <string name="dump_heap_title" msgid="5864292264307651673">"分享堆積傾印文件?"</string>
-    <string name="dump_heap_text" msgid="4809417337240334941">"程序「<xliff:g id="PROC">%1$s</xliff:g>」已超出 <xliff:g id="SIZE">%2$s</xliff:g> 的程序記憶體上限。已有堆積傾印文件可供您與開發人員分享。請注意:這份堆積傾印文件可能包含應用程式可存取的個人資訊。"</string>
+    <string name="dump_heap_notification_detail" msgid="2075673362317481664">"已取得記憶體快照資料;輕觸這裡即可分享"</string>
+    <string name="dump_heap_title" msgid="5864292264307651673">"分享記憶體快照資料?"</string>
+    <string name="dump_heap_text" msgid="4809417337240334941">"程序「<xliff:g id="PROC">%1$s</xliff:g>」已超出 <xliff:g id="SIZE">%2$s</xliff:g> 的程序記憶體上限。系統已產生記憶體快照資料,可供您與開發人員分享。請注意:記憶體快照資料中可能包含應用程式可存取的個人資訊。"</string>
     <string name="sendText" msgid="5209874571959469142">"選取傳送文字內容的方式"</string>
     <string name="volume_ringtone" msgid="6885421406845734650">"鈴聲音量"</string>
     <string name="volume_music" msgid="5421651157138628171">"媒體音量"</string>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index 37dcec9..f905a91 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -123,8 +123,7 @@
     <string name="roamingText11" msgid="4154476854426920970">"Ibhena Yokuzulazula Ivuliwe"</string>
     <string name="roamingText12" msgid="1189071119992726320">"Ibhena yokuzulazula ivaliwe"</string>
     <string name="roamingTextSearching" msgid="8360141885972279963">"Iseshela Isevisi"</string>
-    <!-- no translation found for wfcRegErrorTitle (2301376280632110664) -->
-    <skip />
+    <string name="wfcRegErrorTitle" msgid="2301376280632110664">"Ukushaya kwe-Wi-Fi"</string>
   <string-array name="wfcOperatorErrorMessages">
   </string-array>
     <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Akudlulisiwe"</string>
@@ -1302,8 +1301,7 @@
       <item quantity="other">Vula amanethiwekhi we-Wi-Fi atholakalayo</item>
     </plurals>
     <string name="wifi_available_sign_in" msgid="9157196203958866662">"Ngena ngemvume kunethiwekhi ye-Wi-Fi"</string>
-    <!-- no translation found for network_available_sign_in (1848877297365446605) -->
-    <skip />
+    <string name="network_available_sign_in" msgid="1848877297365446605">"Ngena ngemvume kunethiwekhi"</string>
     <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
     <skip />
     <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Ayikwazanga ukuxhuma kwi-Wi-Fi"</string>
diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml
index 9678322..c0b2cbe 100644
--- a/core/res/res/values/attrs_manifest.xml
+++ b/core/res/res/values/attrs_manifest.xml
@@ -389,6 +389,15 @@
          with the same {@link android.R.attr#taskAffinity} as it has. -->
     <attr name="allowTaskReparenting" format="boolean" />
 
+    <!-- Declare that this application may use cleartext traffic (e.g., HTTP rather than HTTPS;
+         WebSockets rather than WebSockets Secure; XMPP, IMAP, STMP without STARTTLS or TLS).
+         Defaults to true. If set to false {@code false}, the app declares that it does not
+         intend to use cleartext network traffic, in which case platform components (e.g.,
+         HTTP stacks, {@code WebView}, {@code MediaPlayer}) will refuse app's requests to use
+         cleartext traffic. Third-party libraries are encouraged to honor this flag as well.
+         @hide -->
+    <attr name="usesCleartextTraffic" format="boolean" />
+
     <!-- Declare that code from this application will need to be loaded into other
          applications' processes. On devices that support multiple instruction sets,
          this implies the code might be loaded into a process that's using any of the devices
@@ -1151,6 +1160,14 @@
              "com.google". -->
         <attr name="requiredAccountType" format="string"/>
         <attr name="isGame" />
+        <!-- Declare that this application may use cleartext traffic (e.g., HTTP rather than HTTPS;
+             WebSockets rather than WebSockets Secure; XMPP, IMAP, STMP without STARTTLS or TLS).
+             Defaults to true. If set to false {@code false}, the app declares that it does not
+             intend to use cleartext network traffic, in which case platform components (e.g.,
+             HTTP stacks, {@code WebView}, {@code MediaPlayer}) will refuse app's requests to use
+             cleartext traffic. Third-party libraries are encouraged to honor this flag as well.
+             @hide -->
+        <attr name="usesCleartextTraffic" />
         <attr name="multiArch" />
     </declare-styleable>
     
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index a781786..37c9598 100755
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -664,6 +664,12 @@
     -->
     <integer name="config_triplePressOnPowerBehavior">0</integer>
 
+    <!-- Control the behavior when the user presses the sleep button.
+            0 - Go to sleep (doze)
+            1 - Go to sleep (doze) and go home
+    -->
+    <integer name="config_shortPressOnSleepBehavior">0</integer>
+
     <!-- Package name for default keyguard appwidget [DO NOT TRANSLATE] -->
     <string name="widget_default_package_name" translatable="false"></string>
 
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 4189b83..19cae03 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -488,6 +488,9 @@
     <!-- label for item that launches settings in phone options dialog [CHAR LIMIT=15]-->
     <string name="global_action_settings">Settings</string>
 
+    <!-- label for item that launches assist in phone options dialog [CHAR LIMIT=15]-->
+    <string name="global_action_assist">Assist</string>
+
     <!-- label for item that launches voice assist in phone options dialog [CHAR LIMIT=15]-->
     <string name="global_action_voice_assist">Voice Assist</string>
 
diff --git a/core/res/res/values/styles_micro.xml b/core/res/res/values/styles_micro.xml
index cf90b39..c6052ff 100644
--- a/core/res/res/values/styles_micro.xml
+++ b/core/res/res/values/styles_micro.xml
@@ -16,7 +16,7 @@
 <resources>
     <style name="Animation.Micro"/>
 
-    <style name="Animation.Micro.Activity" parent="Animation.Holo.Activity">
+    <style name="Animation.Micro.Activity" parent="Animation.Material.Activity">
         <item name="activityOpenEnterAnimation">@anim/slide_in_micro</item>
         <item name="activityOpenExitAnimation">@null</item>
         <item name="activityCloseEnterAnimation">@null</item>
@@ -35,7 +35,7 @@
         <item name="wallpaperIntraCloseExitAnimation">@null</item>
     </style>
 
-    <style name="AlertDialog.Micro" parent="AlertDialog.Holo.Light">
+    <style name="AlertDialog.Micro" parent="AlertDialog.Material.Light">
         <item name="fullDark">@null</item>
         <item name="topDark">@null</item>
         <item name="centerDark">@null</item>
@@ -55,19 +55,19 @@
         <item name="textAppearance">@style/TextAppearance.Micro.DialogWindowTitle</item>
     </style>
 
-    <style name="TextAppearance.Micro" parent="TextAppearance.Holo">
+    <style name="TextAppearance.Micro" parent="TextAppearance.Material">
         <item name="textSize">20sp</item>
         <item name="fontFamily">sans-serif-condensed-light</item>
         <item name="textColor">@color/micro_text_light</item>
     </style>
 
-    <style name="TextAppearance.Micro.DialogWindowTitle" parent="TextAppearance.Holo.DialogWindowTitle">
+    <style name="TextAppearance.Micro.DialogWindowTitle" parent="TextAppearance.Material.DialogWindowTitle">
         <item name="textSize">20sp</item>
         <item name="fontFamily">sans-serif-condensed-light</item>
         <item name="textColor">@color/micro_text_light</item>
     </style>
 
-    <style name="Widget.Micro" parent="Widget.Holo" />
+    <style name="Widget.Micro" parent="Widget.Material" />
 
     <style name="Widget.Micro.TextView">
         <item name="fontFamily">sans-serif-condensed</item>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 20ec563..203b017 100755
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -367,6 +367,7 @@
   <java-symbol type="integer" name="config_shortPressOnPowerBehavior" />
   <java-symbol type="integer" name="config_toastDefaultGravity" />
   <java-symbol type="integer" name="config_triplePressOnPowerBehavior" />
+  <java-symbol type="integer" name="config_shortPressOnSleepBehavior" />
   <java-symbol type="integer" name="config_wifi_framework_scan_interval" />
   <java-symbol type="integer" name="config_wifi_supplicant_scan_interval" />
   <java-symbol type="integer" name="config_wifi_scan_interval_p2p_connected" />
@@ -1528,6 +1529,7 @@
   <java-symbol type="string" name="global_action_toggle_silent_mode" />
   <java-symbol type="string" name="global_action_lockdown" />
   <java-symbol type="string" name="global_action_voice_assist" />
+  <java-symbol type="string" name="global_action_assist" />
   <java-symbol type="string" name="invalidPuk" />
   <java-symbol type="string" name="lockscreen_carrier_default" />
   <java-symbol type="style" name="Animation.LockScreen" />
@@ -1618,6 +1620,7 @@
   <java-symbol type="drawable" name="ic_menu_refresh" />
   <java-symbol type="drawable" name="ic_settings" />
   <java-symbol type="drawable" name="ic_voice_search" />
+  <java-symbol type="drawable" name="ic_action_assist_focused" />
   <java-symbol type="drawable" name="stat_notify_car_mode" />
   <java-symbol type="drawable" name="stat_notify_disabled_data" />
   <java-symbol type="drawable" name="stat_notify_disk_full" />
diff --git a/core/res/res/values/themes_micro.xml b/core/res/res/values/themes_micro.xml
index e730dff..112afa6 100644
--- a/core/res/res/values/themes_micro.xml
+++ b/core/res/res/values/themes_micro.xml
@@ -14,7 +14,7 @@
      limitations under the License.
 -->
 <resources>
-    <style name="Theme.Micro" parent="Theme.Holo.NoActionBar">
+    <style name="Theme.Micro" parent="Theme.Material.NoActionBar">
         <item name="alertDialogTheme">@style/Theme.Micro.Dialog.Alert</item>
         <item name="alertDialogStyle">@style/AlertDialog.Micro</item>
         <item name="dialogTheme">@style/Theme.Micro.Dialog</item>
@@ -29,7 +29,7 @@
         <item name="windowOverscan">true</item>
     </style>
 
-    <style name="Theme.Micro.Light" parent="Theme.Holo.Light.NoActionBar">
+    <style name="Theme.Micro.Light" parent="Theme.Material.Light.NoActionBar">
         <item name="alertDialogTheme">@style/Theme.Micro.Dialog.Alert</item>
         <item name="alertDialogStyle">@style/AlertDialog.Micro</item>
         <item name="dialogTheme">@style/Theme.Micro.Dialog</item>
@@ -44,7 +44,7 @@
         <item name="windowOverscan">true</item>
     </style>
 
-    <style name="Theme.Micro.Dialog" parent="Theme.Holo.Light.Dialog">
+    <style name="Theme.Micro.Dialog" parent="Theme.Material.Light.Dialog">
         <item name="windowTitleStyle">@android:style/DialogWindowTitle.Micro</item>
         <item name="windowIsFloating">false</item>
         <item name="windowFullscreen">true</item>
diff --git a/docs/html/auto/images/assets/landing/01.gif b/docs/html/auto/images/assets/landing/01.gif
index 34c9fa8..7a75f87 100644
--- a/docs/html/auto/images/assets/landing/01.gif
+++ b/docs/html/auto/images/assets/landing/01.gif
Binary files differ
diff --git a/docs/html/auto/images/assets/landing/02.gif b/docs/html/auto/images/assets/landing/02.gif
index d50e06b..655c5bc 100644
--- a/docs/html/auto/images/assets/landing/02.gif
+++ b/docs/html/auto/images/assets/landing/02.gif
Binary files differ
diff --git a/docs/html/auto/images/assets/landing/03.gif b/docs/html/auto/images/assets/landing/03.gif
index 7992021..195315a 100644
--- a/docs/html/auto/images/assets/landing/03.gif
+++ b/docs/html/auto/images/assets/landing/03.gif
Binary files differ
diff --git a/docs/html/auto/images/assets/landing/04.png b/docs/html/auto/images/assets/landing/04.png
index a0e75f3..aecdb58 100644
--- a/docs/html/auto/images/assets/landing/04.png
+++ b/docs/html/auto/images/assets/landing/04.png
Binary files differ
diff --git a/docs/html/auto/images/assets/landing/05.png b/docs/html/auto/images/assets/landing/05.png
index f3d2ab8..a3baba4 100644
--- a/docs/html/auto/images/assets/landing/05.png
+++ b/docs/html/auto/images/assets/landing/05.png
Binary files differ
diff --git a/docs/html/auto/images/assets/landing/06.png b/docs/html/auto/images/assets/landing/06.png
index b19a6bb..fe74a49 100644
--- a/docs/html/auto/images/assets/landing/06.png
+++ b/docs/html/auto/images/assets/landing/06.png
Binary files differ
diff --git a/docs/html/auto/images/assets/landing/07.png b/docs/html/auto/images/assets/landing/07.png
index 380e8da..f51d526 100644
--- a/docs/html/auto/images/assets/landing/07.png
+++ b/docs/html/auto/images/assets/landing/07.png
Binary files differ
diff --git a/docs/html/auto/images/assets/landing/08.png b/docs/html/auto/images/assets/landing/08.png
index 9889b39..cc65ff3 100644
--- a/docs/html/auto/images/assets/landing/08.png
+++ b/docs/html/auto/images/assets/landing/08.png
Binary files differ
diff --git a/docs/html/auto/images/logos/apps/TextMe.png b/docs/html/auto/images/logos/apps/TextMe.png
deleted file mode 100644
index b96f81a..0000000
--- a/docs/html/auto/images/logos/apps/TextMe.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/auto/images/logos/apps/contacts.png b/docs/html/auto/images/logos/apps/contacts.png
new file mode 100644
index 0000000..f1e1e30
--- /dev/null
+++ b/docs/html/auto/images/logos/apps/contacts.png
Binary files differ
diff --git a/docs/html/auto/images/logos/apps/icq.png b/docs/html/auto/images/logos/apps/icq.png
new file mode 100644
index 0000000..3e14bd4
--- /dev/null
+++ b/docs/html/auto/images/logos/apps/icq.png
Binary files differ
diff --git a/docs/html/auto/images/logos/apps/iheartradio.png b/docs/html/auto/images/logos/apps/iheartradio.png
index 8feb38d..da625df 100644
--- a/docs/html/auto/images/logos/apps/iheartradio.png
+++ b/docs/html/auto/images/logos/apps/iheartradio.png
Binary files differ
diff --git a/docs/html/auto/images/logos/apps/joyride.png b/docs/html/auto/images/logos/apps/joyride.png
index 8c2897e..10ba931 100644
--- a/docs/html/auto/images/logos/apps/joyride.png
+++ b/docs/html/auto/images/logos/apps/joyride.png
Binary files differ
diff --git a/docs/html/auto/images/logos/apps/kik.png b/docs/html/auto/images/logos/apps/kik.png
index 056ef7e..718b0ee 100644
--- a/docs/html/auto/images/logos/apps/kik.png
+++ b/docs/html/auto/images/logos/apps/kik.png
Binary files differ
diff --git a/docs/html/auto/images/logos/apps/mlb.png b/docs/html/auto/images/logos/apps/mlb.png
deleted file mode 100644
index ddde4cd..0000000
--- a/docs/html/auto/images/logos/apps/mlb.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/auto/images/logos/apps/npr.png b/docs/html/auto/images/logos/apps/npr.png
index 5234201..33de546 100644
--- a/docs/html/auto/images/logos/apps/npr.png
+++ b/docs/html/auto/images/logos/apps/npr.png
Binary files differ
diff --git a/docs/html/auto/images/logos/apps/pandora.png b/docs/html/auto/images/logos/apps/pandora.png
deleted file mode 100644
index 13fa1d3..0000000
--- a/docs/html/auto/images/logos/apps/pandora.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/auto/images/logos/apps/pocketcasts.png b/docs/html/auto/images/logos/apps/pocketcasts.png
index 5227937..44129f1 100644
--- a/docs/html/auto/images/logos/apps/pocketcasts.png
+++ b/docs/html/auto/images/logos/apps/pocketcasts.png
Binary files differ
diff --git a/docs/html/auto/images/logos/apps/skype.png b/docs/html/auto/images/logos/apps/skype.png
new file mode 100644
index 0000000..0012b58
--- /dev/null
+++ b/docs/html/auto/images/logos/apps/skype.png
Binary files differ
diff --git a/docs/html/auto/images/logos/apps/songza.png b/docs/html/auto/images/logos/apps/songza.png
deleted file mode 100644
index 3bd7107..0000000
--- a/docs/html/auto/images/logos/apps/songza.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/auto/images/logos/apps/soundcloud.png b/docs/html/auto/images/logos/apps/soundcloud.png
deleted file mode 100644
index a5bdbe3..0000000
--- a/docs/html/auto/images/logos/apps/soundcloud.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/auto/images/logos/apps/spotify.png b/docs/html/auto/images/logos/apps/spotify.png
index d039fd3..8b55ff5 100644
--- a/docs/html/auto/images/logos/apps/spotify.png
+++ b/docs/html/auto/images/logos/apps/spotify.png
Binary files differ
diff --git a/docs/html/auto/images/logos/apps/stitcher.png b/docs/html/auto/images/logos/apps/stitcher.png
index b77da12..c05cb3d 100644
--- a/docs/html/auto/images/logos/apps/stitcher.png
+++ b/docs/html/auto/images/logos/apps/stitcher.png
Binary files differ
diff --git a/docs/html/auto/images/logos/apps/talkray.png b/docs/html/auto/images/logos/apps/talkray.png
new file mode 100644
index 0000000..0f170c7
--- /dev/null
+++ b/docs/html/auto/images/logos/apps/talkray.png
Binary files differ
diff --git a/docs/html/auto/images/logos/apps/textme.png b/docs/html/auto/images/logos/apps/textme.png
new file mode 100644
index 0000000..24efb85
--- /dev/null
+++ b/docs/html/auto/images/logos/apps/textme.png
Binary files differ
diff --git a/docs/html/auto/images/logos/apps/textplus.png b/docs/html/auto/images/logos/apps/textplus.png
index 2a640c4..3482181 100644
--- a/docs/html/auto/images/logos/apps/textplus.png
+++ b/docs/html/auto/images/logos/apps/textplus.png
Binary files differ
diff --git a/docs/html/auto/images/logos/apps/threema.png b/docs/html/auto/images/logos/apps/threema.png
new file mode 100644
index 0000000..012cbdc
--- /dev/null
+++ b/docs/html/auto/images/logos/apps/threema.png
Binary files differ
diff --git a/docs/html/auto/images/logos/apps/tunein.png b/docs/html/auto/images/logos/apps/tunein.png
index 137ba81..db3b75c 100644
--- a/docs/html/auto/images/logos/apps/tunein.png
+++ b/docs/html/auto/images/logos/apps/tunein.png
Binary files differ
diff --git a/docs/html/auto/images/logos/apps/umano.png b/docs/html/auto/images/logos/apps/umano.png
index 7b59f95..478e268 100644
--- a/docs/html/auto/images/logos/apps/umano.png
+++ b/docs/html/auto/images/logos/apps/umano.png
Binary files differ
diff --git a/docs/html/auto/images/logos/apps/whatsapp.png b/docs/html/auto/images/logos/apps/whatsapp.png
deleted file mode 100644
index fb5866e..0000000
--- a/docs/html/auto/images/logos/apps/whatsapp.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/auto/images/ui/gearhead_custom_UI.png b/docs/html/auto/images/ui/gearhead_custom_UI.png
index 345db12..a3baba4 100644
--- a/docs/html/auto/images/ui/gearhead_custom_UI.png
+++ b/docs/html/auto/images/ui/gearhead_custom_UI.png
Binary files differ
diff --git a/docs/html/auto/images/ui/gearhead_custom_user_actions.png b/docs/html/auto/images/ui/gearhead_custom_user_actions.png
index 6cc0dcb..8e65ee04 100644
--- a/docs/html/auto/images/ui/gearhead_custom_user_actions.png
+++ b/docs/html/auto/images/ui/gearhead_custom_user_actions.png
Binary files differ
diff --git a/docs/html/auto/images/ui/gearhead_day.png b/docs/html/auto/images/ui/gearhead_day.png
index 81ead75..a3baba4 100644
--- a/docs/html/auto/images/ui/gearhead_day.png
+++ b/docs/html/auto/images/ui/gearhead_day.png
Binary files differ
diff --git a/docs/html/auto/images/ui/gearhead_drawer_generic.png b/docs/html/auto/images/ui/gearhead_drawer_generic.png
index d203aed..94dd305 100644
--- a/docs/html/auto/images/ui/gearhead_drawer_generic.png
+++ b/docs/html/auto/images/ui/gearhead_drawer_generic.png
Binary files differ
diff --git a/docs/html/auto/images/ui/gearhead_drawers_customized.png b/docs/html/auto/images/ui/gearhead_drawers_customized.png
index 44915b5..fe74a49 100644
--- a/docs/html/auto/images/ui/gearhead_drawers_customized.png
+++ b/docs/html/auto/images/ui/gearhead_drawers_customized.png
Binary files differ
diff --git a/docs/html/auto/images/ui/gearhead_generic_UI.png b/docs/html/auto/images/ui/gearhead_generic_UI.png
index beb0701..d7cd53d 100644
--- a/docs/html/auto/images/ui/gearhead_generic_UI.png
+++ b/docs/html/auto/images/ui/gearhead_generic_UI.png
Binary files differ
diff --git a/docs/html/auto/images/ui/gearhead_lens_switching.png b/docs/html/auto/images/ui/gearhead_lens_switching.png
index 9dbfe6c..9fb8b65 100644
--- a/docs/html/auto/images/ui/gearhead_lens_switching.png
+++ b/docs/html/auto/images/ui/gearhead_lens_switching.png
Binary files differ
diff --git a/docs/html/auto/images/ui/gearhead_night.png b/docs/html/auto/images/ui/gearhead_night.png
index 3f8c593..8f1ecdd 100644
--- a/docs/html/auto/images/ui/gearhead_night.png
+++ b/docs/html/auto/images/ui/gearhead_night.png
Binary files differ
diff --git a/docs/html/auto/images/ui/gearhead_overview.png b/docs/html/auto/images/ui/gearhead_overview.png
index 4332ddf3..00b35ce 100644
--- a/docs/html/auto/images/ui/gearhead_overview.png
+++ b/docs/html/auto/images/ui/gearhead_overview.png
Binary files differ
diff --git a/docs/html/auto/index.jd b/docs/html/auto/index.jd
index d113a7d..ca63a54 100644
--- a/docs/html/auto/index.jd
+++ b/docs/html/auto/index.jd
@@ -3,6 +3,7 @@
 fullpage=true
 no_footer_links=true
 page.type=about
+page.image=/auto/images/hero.jpg
 
 @jd:body
 
@@ -238,74 +239,72 @@
                    width="120" height="120" class="img-logo" style="margin-top:30px" />
             </div>
             <div class="col-4">
-              <img src="{@docRoot}auto/images/logos/apps/mlb.png"
-                   width="160" height="160" class="img-logo" />
+              <img src="{@docRoot}auto/images/logos/apps/tunein.png"
+                   width="160" height="160" class="img-logo"
+                   />
             </div>
           </div>
 
           <div class="cols">
             <div class="col-4">
-              <img src="{@docRoot}auto/images/logos/apps/pandora.png"
-                   width="160" height="160" class="img-logo" />
+              <img src="{@docRoot}auto/images/logos/apps/talkray.png"
+                   width="120" height="44" class="img-logo" style="margin-top:40px"
+                   />
             </div>
             <div class="col-4">
-              <img src="{@docRoot}auto/images/logos/apps/pocketcasts.png"
-                   width="160" height="160" class="img-logo" />
+              <img src="{@docRoot}auto/images/logos/apps/icq.png"
+                   width="150" height="53" class="img-logo" style="margin-top:40px"
+                   />
             </div>
             <div class="col-4">
-              <img src="{@docRoot}auto/images/logos/apps/songza.png"
-                   width="160" height="160" class="img-logo" />
+              <img src="{@docRoot}auto/images/logos/apps/stitcher.png"
+                   width="160" height="160" class="img-logo" style="margin-top:-20px"
+                   />
             </div>
             <div class="col-4">
-              <img src="/auto/images/logos/apps/soundcloud.png"
-                   width="100" height="100" class="img-logo"
-                   style="margin-top:30px" />
+              <img src="/auto/images/logos/apps/pocketcasts.png"
+                   width="160" height="160" class="img-logo" style="margin-top:-10px"
+                   />
             </div>
           </div>
 
           <div class="cols">
             <div class="col-4">
+              <img src="/auto/images/logos/apps/threema.png"
+                   width="100" height="91" class="img-logo" style="margin-top:30px"
+                   />
+            </div>
+            <div class="col-4">
+              <img src="{@docRoot}auto/images/logos/apps/umano.png"
+                   width="160" height="160" class="img-logo" />
+            </div>
+            <div class="col-4">
               <img src="/auto/images/logos/apps/spotify.png"
                    width="160" height="160" class="img-logo" />
             </div>
             <div class="col-4">
-              <img src="{@docRoot}auto/images/logos/apps/stitcher.png"
-                   width="160" height="160" class="img-logo" />
-            </div>
-            <div class="col-4">
-              <img src="/auto/images/logos/apps/TextMe.png"
-                   width="100" height="100" class="img-logo" style="margin-top:30px" />
-            </div>
-            <div class="col-4">
               <img src="/auto/images/logos/apps/textplus.png"
-                   width="120" height="24" class="img-logo" style="margin-top:70px" />
+                   width="120" height="24" class="img-logo" style="margin-top:60px"
+                   />
             </div>
           </div>
 
           <div class="cols">
             <div class="col-4">
-              <img src="{@docRoot}auto/images/logos/apps/tunein.png"
-                   width="160" height="160" class="img-logo" style="margin-left:160px" />
+              <img src="{@docRoot}auto/images/logos/apps/contacts.png"
+                   width="160" height="160" class="img-logo" style="margin-left:140px"
+                   />
             </div>
             <div class="col-4">
-              <img src="{@docRoot}auto/images/logos/apps/umano.png"
-                   width="160" height="160" class="img-logo" style="margin-left:370px" />
+              <img src="{@docRoot}auto/images/logos/apps/skype.png"
+                   width="160" height="70" class="img-logo" style="margin-top:40px; margin-left:160px"
+                   />
             </div>
-          </div>
-
-          <div class="cols" style="margin-top:40px">
-              <div class="col-4">
-                <img src="/auto/images/logos/apps/whatsapp.png"
-                     width="120" height="120" class="img-logo" />
-              </div>
-              <div class="col-8">
-                <p><em>
-                "We were able to get messaging functionality for text
-                implemented easily on Android Auto, with minimal development
-                effort. We're excited to participate in Android Auto which
-                provides a notification interface for the car that is both
-                user-friendly and highly safety-minded."</em></p>
-              </div>
+            <div class="col-4">
+              <img src="{@docRoot}auto/images/logos/apps/textme.png"
+                   width="80" height="80" class="img-logo" style="margin-top:30px;margin-left:200px"
+                   />
+            </div>
           </div>
 
           <div class="cols" style="margin-top:60px">
diff --git a/docs/html/design/auto/images/auto-overview.png b/docs/html/design/auto/images/auto-overview.png
new file mode 100644
index 0000000..cc6db08
--- /dev/null
+++ b/docs/html/design/auto/images/auto-overview.png
Binary files differ
diff --git a/docs/html/design/auto/index.jd b/docs/html/design/auto/index.jd
index e45bd36..06f8592 100644
--- a/docs/html/design/auto/index.jd
+++ b/docs/html/design/auto/index.jd
@@ -13,8 +13,8 @@
 <div class="sidebox">
   <h2><strong>UI Guidelines</strong></h2>
   <ul>
-  <li><a href="{@docRoot}shareables/auto/AndroidAuto-media-apps.pdf">
-    <strong>Auto Media Apps (PDF)</strong></a>
+  <li><a href="{@docRoot}shareables/auto/AndroidAuto-audio-apps.pdf">
+    <strong>Auto Audio Apps (PDF)</strong></a>
   </li>
   <li><a href="{@docRoot}shareables/auto/AndroidAuto-messaging-apps.pdf">
     <strong>Auto Messaging Apps (PDF)</strong></a>
diff --git a/docs/html/distribute/essentials/quality/auto.jd b/docs/html/distribute/essentials/quality/auto.jd
index 757305e..db0f20a 100644
--- a/docs/html/distribute/essentials/quality/auto.jd
+++ b/docs/html/distribute/essentials/quality/auto.jd
@@ -19,8 +19,8 @@
       Core App Quality</a></li>
     <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">
       Optimize Your App</a></li>
-    <li><a href="{@docRoot}shareables/auto/AndroidAuto-media-apps.pdf">Android Auto UX Guidelines
-      for Media Applications</a></li>
+    <li><a href="{@docRoot}shareables/auto/AndroidAuto-audio-apps.pdf">Android Auto UX Guidelines
+      for Audio Applications</a></li>
     <li><a href="{@docRoot}shareables/auto/AndroidAuto-messaging-apps.pdf">Android Auto UX Guidelines
       for Messaging Applications</a></li>
   </ol>
@@ -43,8 +43,8 @@
 </p>
 
 <p class="caution">
-  <strong>Important:</strong> The criteria listed in this page apply to your app's user interface 
-  and behavior when running on devices connected to an Android Auto screen. Apps must meet these 
+  <strong>Important:</strong> The criteria listed in this page apply to your app's user interface
+  and behavior when running on devices connected to an Android Auto screen. Apps must meet these
   criteria to qualify as an Android Auto app on Google Play.
 </p>
 
@@ -94,7 +94,7 @@
 </tr>
 
 <tr>
-  <td rowspan="4" id="safety">
+  <td rowspan="5" id="safety">
     Driver Attention
   </td>
 
@@ -127,9 +127,9 @@
   </td>
   <td>
     <p style="margin-bottom:.5em;">
-    App elements do not display any images on the Auto screen. Exceptions include: app may display 
+    App elements do not display any images on the Auto screen. Exceptions include: app may display
     a single static image for
-    content context in the background of the consumption screen, such as album art, and app may 
+    content context in the background of the consumption screen, such as album art, and app may
     display icons in the content navigation drawer.
     </p>
   </td>
@@ -146,14 +146,25 @@
   </td>
 </tr>
 
+<tr>
+  <td id="AU-VI">
+    AU-VI
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    App never presents any form of visual information (notifications, toasts, video, images,
+    advertising, etc.) on the phone screen while the app is active in Android Auto.
+    </p>
+  </td>
+</tr>
+
 
 
 <tr>
-  <td rowspan="4" id="layout">
+  <td rowspan="3" id="layout">
     Layout
   </td>
 
-<tr>
   <td id="AU-SC">
     AU-SC
   </td>
@@ -188,20 +199,57 @@
 </tr>
 
 <tr>
-  <td id="contrast">
+  <td rowspan="4" id="contrast">
     Visual Contrast
   </td>
 
+  <td id="AU-DM">
+    AU-DM
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     App supports day mode, which renders dark text and controls on a light background.
+     (<a href="{@docRoot}shareables/auto/AndroidAuto-custom-colors.pdf">Learn How</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
   <td id="AU-NM">
     AU-NM
   </td>
   <td>
     <p style="margin-bottom:.5em;">
-     App supports night mode, rendering light text and controls on a dark background.
+     App supports night mode, which renders light text and controls on a dark background.
+     (<a href="{@docRoot}shareables/auto/AndroidAuto-custom-colors.pdf">Learn How</a>)
     </p>
   </td>
 </tr>
 
+<tr>
+  <td id="AU-WI">
+    AU-WI
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     App provides white icon sets that the system colorizes to provide automatic
+     contrast compensation.
+     (<a href="{@docRoot}shareables/auto/AndroidAuto-custom-colors.pdf">Learn How</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-OC">
+    AU-OC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     App provides colors that the system can optimize for easy in-vehicle readability.
+     (<a href="{@docRoot}shareables/auto/AndroidAuto-custom-colors.pdf">Learn How</a>)
+    </p>
+  </td>
+</tr>
 
 <tr>
   <td rowspan="2" id="interaction">
@@ -269,10 +317,32 @@
 </tr>
 
 <tr>
-  <td rowspan="2" id="general">
+  <td rowspan="5" id="general">
    General
   </td>
 
+  <td id="AU-LT">
+    AU-LT
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     App loads in no more than 10 seconds.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-FP">
+    AU-FP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     Auto app functionality works as expected or described in the app's Google Play Store listing.
+    </p>
+  </td>
+</tr>
+
+<tr>
   <td id="AU-RL">
     AU-RL
   </td>
@@ -284,8 +354,7 @@
   </td>
 </tr>
 
-
-</tr>
+<tr>
   <td id="AU-SS">
     AU-SS
   </td>
@@ -296,6 +365,17 @@
   </td>
 </tr>
 
+<tr>
+  <td id="AU-GO">
+    AU-GO
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     Any app button which is non-functional or disabled must be grayed out.
+    </p>
+  </td>
+</tr>
+
 
 <tr>
   <td rowspan="2" id="media">
@@ -309,9 +389,8 @@
   <td>
     <p style="margin-bottom:.5em;">
      App has no more than four primary actions plus one optional action overflow toggle (or five if
-     no action overflow is used). For more information, see details on the media control card in the
-     <a href="{@docRoot}shareables/auto/AndroidAuto-media-apps.pdf">Android Auto UX Guidelines
-      for Media Applications</a>.
+     no action overflow is used).
+     (<a href="{@docRoot}shareables/auto/AndroidAuto-audio-apps.pdf">Learn How</a>)
     </p>
   </td>
 </tr>
@@ -322,10 +401,8 @@
   </td>
   <td>
     <p style="margin-bottom:.5em;">
-     App has no more than four optional secondary actions plus one action overflow toggle. For more
-     information, see details on the media control card in the
-     <a href="{@docRoot}shareables/auto/AndroidAuto-media-apps.pdf">Android Auto UX Guidelines
-      for Media Applications</a>.
+     App has no more than four optional secondary actions plus one action overflow toggle.
+     (<a href="{@docRoot}shareables/auto/AndroidAuto-audio-apps.pdf">Learn How</a>)
     </p>
   </td>
 </tr>
@@ -401,11 +478,11 @@
   review, and will not be
   available for distribution until the app is approved. Because this is the same APK as
   for phones and tablets, your Play Store updates for those devices will not be available until the
-  Auto approval process is complete.  
+  Auto approval process is complete.
 </p>
 
 <p class="caution">
   <strong>Important:</strong> Due to this restriction, you should not use your production APK
-  for Auto support prototyping. 
+  for Auto support prototyping.
 </p>
 
diff --git a/docs/html/distribute/googleplay/auto.jd b/docs/html/distribute/googleplay/auto.jd
new file mode 100644
index 0000000..af24a54
--- /dev/null
+++ b/docs/html/distribute/googleplay/auto.jd
@@ -0,0 +1,237 @@
+page.title=Distributing to Android Auto
+page.image=/design/auto/images/auto-overview.png
+meta.tags="auto", "publish", "quality"
+page.tags="auto", "publish", "googleplay"
+page.metaDescription=Distribute your apps and content to Android Auto.
+
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>How to Participate</h2>
+<ol>
+<li><a href="#understand_guidelines">Understand the guidelines</a></li>
+<li><a href="#develop_app">Develop a great app for Auto</a></li>
+<li><a href="#test_app">Test for Auto App Quality</a></li>
+<li><a href="#opt_in">Agree to terms</a></li>
+<li><a href="#track_review">Track your review</a></li>
+</ol>
+
+<h2>You Should Also Read</h2>
+<ol>
+<li><a href="{@docRoot}distribute/essentials/quality/auto.html">Auto App Quality</a></li>
+</ol>
+
+</div></div>
+
+<p>
+  If you've got a great app, Android Auto and Google Play can help you
+  bring it to users right in their vehicles. You can
+  extend your new or existing apps for Auto and then publish them using familiar
+  tools and processes in Google Play.
+</p>
+
+<p>
+  To get started, review the sections in this document to learn how to
+  distribute your Auto apps to users through Google Play. Be sure to read
+  <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto App Quality</a>
+  for information on the usability, quality, and safety-related guidelines that your apps should
+  meet. When your app is ready, you can accept the terms in the Developer Console and upload your
+  APK for review.
+</p>
+
+<h2 id="how_to_participate">
+  How to Participate
+</h2>
+
+<p>
+  Google Play lets you deliver apps for use in vehicles. You can develop and publish using your
+  existing Developer Console account and your current distribution and pricing settings. It's easy
+  to participate — the sections below outline the process.
+</p>
+
+<div style="float:right;margin:1em 0 1.5em 2em;">
+  <img src="{@docRoot}images/gp-auto-process.png">
+</div>
+
+<h3 id="understand_guidelines">
+  1. Understand guidelines and requirements
+</h3>
+
+<p>
+  To prepare for a successful launch on Android Auto, start by reviewing the
+  guidelines for creating great experiences on Auto. See the <a href=
+  "{@docRoot}design/auto/index.html">Android Auto design guidelines</a> for ideas
+  on extending your app for Auto and details on design and usability.
+</p>
+
+<p>
+  As you get started designing your Auto experience, make sure to read and
+  understand the quality criteria for Auto apps. Only apps that are usable on Auto
+  will be designated as Auto apps on Google Play &mdash; your apps can participate
+  if they meet a set of basic quality criteria. See
+  <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto
+  App Quality</a> for details.
+</p>
+
+<h3 id="develop_app">2. Develop a great app for Auto</h3>
+
+<p>
+  A great app for Auto is designed for vehicle use and takes advantage of the
+  capabilities of Android Auto. The app offers a high-quality experience while the user is on the
+  go such as providing playback for audio content or accessing messages.
+</p>
+
+<p>
+  As you consider your Auto app, review the <a href=
+  "{@docRoot}training/auto/start/index.html">developer documentation</a> and
+  usability guidelines and plan on supporting them to the greatest extent
+  possible. Make sure to design a great experience and adhere to our guidelines for preventing
+  driver distraction.
+</p>
+
+<p>
+  You must deliver your Auto experience as part of your existing app for phones, tablets, and other
+  devices, using the same package name and store listing.
+</p>
+
+<h3 id="test_app">3. Test for Auto App Quality</h3>
+
+<p>
+  Your Auto apps should be designed to perform well, look great in the car,
+  and offer the best user experience possible. Google Play will showcase selected high-quality
+  Auto apps for easy discovery by users in Google Play. Here’s how you
+  can participate and deliver an Android Auto app that users will enjoy:
+</p>
+
+<ul>
+  <li>Meet <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto App
+  Quality</a> guidelines
+    <ul>
+      <li>Follow our best practices for <a href="{@docRoot}training/auto/index.html">
+      Auto app development</a></li>
+      <li>Make sure your app meets all of the <a href=
+      "{@docRoot}distribute/essentials/quality/auto.html">Auto App Quality</a> criteria</li>
+    </ul>
+  </li>
+</ul>
+
+<h3 id="opt_in">4. Agree to Android Auto terms and publish</h3>
+
+<p>
+  Before you can upload your APK and publish the app for review, the developer account owner
+  must agree to the
+  <a href="https://play.google.com/about/auto/developer-distribution-agreement-addendum.html">Android
+  Auto terms</a> from the <strong>Pricing and Distribution</strong> section of the
+  Developer Console. Agreeing to the terms means that you want your app to be made available
+  to Android Auto users through Google Play, and that
+  your app meets <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto
+  App Quality</a> guidelines.
+</p>
+
+<p>
+  Your Auto app can be uploaded only after you have agreed to the terms. The following describes
+  which apps are determined to be Auto apps:
+</p>
+
+<ul>
+  <li>Your app manifest must declare the <code>com.google.android.gms.car.application</code>
+  metadata entry in the manifest with auto capabilities that the app uses. For more information
+  about configuring your app for use with Android Auto, see
+  <a href="{@docRoot}training/auto/start/index.html#auto-metadata">Getting Started with Auto</a>.
+  </li>
+</ul>
+
+<p>
+  When you've built your release-ready APK and tested to ensure that it meets
+  all of the <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto App
+  Quality</a> guidelines, upload it to the Developer Console. Update your store
+  listing with any additional Auto functionality information, and set distribution options as
+  needed. If you aren't familiar with how to prepare for launch on Google Play,
+  see the <a href=
+  "{@docRoot}distribute/googleplay/publish/preparing.html">Launch
+  Checklist.</a>
+</p>
+
+<p>
+  After you agree to the terms and save the changes, you can upload and publish your app as usual.
+  Before making the app available to Android Auto users, Google Play submits
+  your app for review against the <a href=
+  "{@docRoot}distribute/essentials/quality/auto.html">Auto App Quality</a> criteria
+  and notifies you of the result. If your app is approved, Google Play makes that app
+  available to Android Auto users. See the next section for details on how to track the approval
+  status of your app.
+</p>
+
+<p>
+  Note that the review affects the availability of your app to other devices in
+  Google Play Store &mdash; on phones and tablets, for example.
+  If you have an existing app that includes updates to the phone/tablet component,
+  the Android Auto component must pass review before the updated app
+  is made available on the Google Play Store.
+</p>
+
+<p>
+  Here are the steps to agree to Android Auto terms in the Developer Console:
+</p>
+
+<ol>
+  <li>Make sure your app meets all <a href=
+  "{@docRoot}distribute/essentials/quality/auto.html">Auto App Quality</a> criteria
+  </li>
+
+  <li>In the <strong>All Applications</strong> page, click the app you want to publish.
+  </li>
+
+  <li>Under <strong>Pricing and Distribution</strong>, scroll down to find <em>Android Auto</em> and the
+  link to the terms.
+  </li>
+
+  <li>Click the <em>terms</em> link.
+  </li>
+
+  <li>Read through the terms and click <em>Agree</em>.
+  </li>
+</ol>
+
+<div style="padding-top:1em">
+  <img style="border:2px solid #ddd;" src="{@docRoot}images/gp-auto-opt-in.png">
+  <p class="caption">
+    <strong>Agree to terms for Auto:</strong> Include your app in Android Auto by agreeing to the
+    terms from the Developer Console.
+  </p>
+</div>
+
+<h3 id="track_review">5. Track your review</h3>
+
+<p>
+  Your app will be reviewed for compliance with driver distraction guidelines and the
+  technical and quality criteria described above. This detailed review process may take
+  more time than you are accustomed to when submitting phone/tablet apps.
+  Until your app is approved, your app or app update won’t be published to the Google Play Store.
+  After a successful review, your app will be published and made available on the Google Play
+  Store.
+</p>
+
+<p>If your app is not accepted, you’ll receive a <strong>notification email sent to your
+  developer account address</strong>, with a summary of the areas that you need to address. When
+  you’ve made the necessary adjustments, you can upload a new version of your app to the Developer
+  Console.
+</p>
+
+<p>
+  Note that if the submitted app is an update to an existing app and your updated app does not meet
+  the review criteria, the update is rejected and the existing app remains published in the Google
+  Play Store.
+</p>
+
+<p>To understand how your apps are evaluated, please see the <a href=
+"{@docRoot}distribute/essentials/quality/auto.html">Auto App Quality</a> document. </p>
+
+
+  <h3>Related resources</h3>
+
+  <div class="resource-widget resource-flow-layout col-16"
+    data-query="collection:autolanding"
+    data-cardSizes="9x6, 6x3x2"
+    data-maxResults="6">
+  </div>
diff --git a/docs/html/distribute/googleplay/googleplay_toc.cs b/docs/html/distribute/googleplay/googleplay_toc.cs
index 3f4dbac..594d6d6 100644
--- a/docs/html/distribute/googleplay/googleplay_toc.cs
+++ b/docs/html/distribute/googleplay/googleplay_toc.cs
@@ -24,6 +24,12 @@
     </div>
   </li>
   <li class="nav-section">
+    <div class="nav-section-header empty" style="font-weight:normal"><a href="<?cs var:toroot?>distribute/googleplay/auto.html">
+          <span class="en">Distributing to <span style="white-space:nowrap">Android Auto</span></span>
+        </a>
+    </div>
+  </li>
+  <li class="nav-section">
     <div class="nav-section-header empty" style="font-weight:normal"><a href="<?cs var:toroot?>distribute/googleplay/tv.html">
           <span class="en">Distributing to <span style="white-space:nowrap">Android TV</span></span>
         </a>
diff --git a/docs/html/guide/topics/manifest/application-element.jd b/docs/html/guide/topics/manifest/application-element.jd
index 8a0e837..b5af9c3 100644
--- a/docs/html/guide/topics/manifest/application-element.jd
+++ b/docs/html/guide/topics/manifest/application-element.jd
@@ -449,11 +449,15 @@
 <dt><a name="vmSafeMode"></a>{@code android:vmSafeMode}</dt>
 <dd>Indicates whether the app would like the virtual machine (VM) to operate
 in safe mode. The default value is {@code "false"}.
+
+<p> This attribute was added in API level 8 where a value of "true"
+disabled the Dalvik just-in-time (JIT) compiler. </p>
+
+<p> This attribute was adapted in API level 22 where a value of "true"
+disabled the ART ahead-of-time (AOT) compiler. </p>
 </dd>
 
 
-
-
 </dl></dd>
 
 <!-- ##api level indication## -->
diff --git a/docs/html/guide/topics/manifest/uses-feature-element.jd b/docs/html/guide/topics/manifest/uses-feature-element.jd
index 2385592..c1ccef0 100644
--- a/docs/html/guide/topics/manifest/uses-feature-element.jd
+++ b/docs/html/guide/topics/manifest/uses-feature-element.jd
@@ -143,12 +143,12 @@
   the feature specified in <code>android:name</code>.
 
 <ul>
-<li>When you declare <code>"android:required="true"</code> for a feature,
+<li>When you declare <code>android:required="true"</code> for a feature,
 you are specifying that the application <em>cannot function, or is not
 designed to function</em>, when the specified feature is not present on the
 device. </li>
 
-<li>When you declare <code>"android:required="false"</code> for a feature, it
+<li>When you declare <code>android:required="false"</code> for a feature, it
 means that the application <em>prefers to use the feature</em> if present on
 the device, but that it <em>is designed to function without the specified
 feature</em>, if necessary. </li>
diff --git a/docs/html/guide/topics/ui/layout/grid.jd b/docs/html/guide/topics/ui/layout/grid.jd
index c2f1321..3474f48 100644
--- a/docs/html/guide/topics/ui/layout/grid.jd
+++ b/docs/html/guide/topics/ui/layout/grid.jd
@@ -181,7 +181,7 @@
 <li>Run the application.</li>
 </ol>
 <p>You should see the following:</p>
-<img src="images/hello-tablelayout.png" width="150px" />
+<img src="{@docRoot}guide/topics/ui/images/hello-tablelayout.png" width="150px" />
 
 
 
diff --git a/docs/html/guide/topics/ui/layout/gridview.jd b/docs/html/guide/topics/ui/layout/gridview.jd
index a4bf224..13467ae 100644
--- a/docs/html/guide/topics/ui/layout/gridview.jd
+++ b/docs/html/guide/topics/ui/layout/gridview.jd
@@ -70,8 +70,10 @@
     gridview.setAdapter(new ImageAdapter(this));
 
     gridview.setOnItemClickListener(new OnItemClickListener() {
-        public void onItemClick(AdapterView&lt;?> parent, View v, int position, long id) {
-            Toast.makeText(HelloGridView.this, "" + position, Toast.LENGTH_SHORT).show();
+        public void onItemClick(AdapterView&lt;?> parent, View v,
+                int position, long id) {
+            Toast.makeText(HelloGridView.this, "" + position,
+                    Toast.LENGTH_SHORT).show();
         }
     });
 }
@@ -118,7 +120,8 @@
     // create a new ImageView for each item referenced by the Adapter
     public View getView(int position, View convertView, ViewGroup parent) {
         ImageView imageView;
-        if (convertView == null) {  // if it's not recycled, initialize some attributes
+        if (convertView == null) {
+            // if it's not recycled, initialize some attributes
             imageView = new ImageView(mContext);
             imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
             imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
diff --git a/docs/html/images/gp-auto-opt-in.png b/docs/html/images/gp-auto-opt-in.png
new file mode 100644
index 0000000..938a63c
--- /dev/null
+++ b/docs/html/images/gp-auto-opt-in.png
Binary files differ
diff --git a/docs/html/images/gp-auto-process.png b/docs/html/images/gp-auto-process.png
new file mode 100644
index 0000000..c1fd6e6
--- /dev/null
+++ b/docs/html/images/gp-auto-process.png
Binary files differ
diff --git a/docs/html/jd_collections.js b/docs/html/jd_collections.js
index 127134f..05a8a3e 100644
--- a/docs/html/jd_collections.js
+++ b/docs/html/jd_collections.js
@@ -84,7 +84,7 @@
   },
   "distribute/gp/gpfelanding": {
     "resources": [
-      "distribute/googleplay/guide.html",
+      "distribute/googleplay/auto.html",
       "distribute/googleplay/tv.html",
       "distribute/googleplay/wear.html",
       "distribute/googleplay/edu/about.html"
@@ -1074,6 +1074,14 @@
       "https://support.google.com/googleplay/answer/2651410"
     ]
   },
+  "autolanding": {
+    "title": "",
+    "resources": [
+      "auto/index.html",
+      "design/auto/index.html",
+      "training/auto/index.html"
+    ]
+  },
   "tvlanding": {
     "title": "",
     "resources": [
@@ -1099,11 +1107,42 @@
   "design/auto/auto_ui_guidelines": {
     "title": "",
     "resources": [
-      "shareables/auto/AndroidAuto-media-apps.pdf",
+      "shareables/auto/AndroidAuto-audio-apps.pdf",
       "shareables/auto/AndroidAuto-messaging-apps.pdf",
       "shareables/auto/AndroidAuto-custom-colors.pdf"
     ]
   },
+  "training/auto/overview": {
+    "title": "",
+    "resources": [
+      "training/auto/start/index.html",
+      "design/auto/index.html",
+      "shareables/auto/AndroidAuto-custom-colors.pdf"
+    ]
+  },
+  "training/auto/messaging": {
+    "title": "",
+    "resources": [
+      "training/auto/messaging/index.html",
+      "shareables/auto/AndroidAuto-messaging-apps.pdf",
+      "samples/MessagingService/index.html"
+    ]
+  },
+  "training/auto/media": {
+    "title": "",
+    "resources": [
+      "training/auto/audio/index.html",
+      "shareables/auto/AndroidAuto-audio-apps.pdf",
+      "samples/MediaBrowserService/index.html"
+    ]
+  },
+  "training/auto/distribute": {
+    "title": "",
+    "resources": [
+      "distribute/essentials/quality/auto.html",
+      "distribute/googleplay/auto.html"
+    ]
+  },
   "distribute/stories/games": {
     "title": "",
     "resources": [
diff --git a/docs/html/jd_extras.js b/docs/html/jd_extras.js
index 288b614..bad0e14 100644
--- a/docs/html/jd_extras.js
+++ b/docs/html/jd_extras.js
@@ -1642,13 +1642,13 @@
     "lang": "en",
     "group": "",
     "tags": [],
-    "url": "shareables/auto/AndroidAuto-media-apps.pdf",
+    "url": "shareables/auto/AndroidAuto-audio-apps.pdf",
     "timestamp": null,
     "image": "auto/images/assets/icons/media_app_playback.png",
-    "title": "Android Auto Media Apps UI Guidelines",
+    "title": "Android Auto Audio Apps UI Guidelines",
     "summary": "Guidelines for designing audio apps that work with Auto. ",
     "keywords": ["design", "Auto", "Automotive"],
-    "type": "PDF DOWNLOAD (1.1MB)",
+    "type": "Design",
     "titleFriendly": ""
   },
   {
@@ -1661,7 +1661,7 @@
     "title": "Android Auto Messaging Apps UI Guidelines",
     "summary": "Guidelines for designing messaging apps that work with Auto. ",
     "keywords": ["design", "Auto", "Automotive"],
-    "type": "PDF DOWNLOAD (628KB)",
+    "type": "Design",
     "titleFriendly": ""
   },
   {
@@ -1670,11 +1670,11 @@
     "tags": [],
     "url": "shareables/auto/AndroidAuto-custom-colors.pdf",
     "timestamp": null,
-    "image": "auto/images/assets/icons/auto_app_in_simulator.png",
+    "image": "auto/images/ui/gearhead_generic_UI.png",
     "title": "Android Auto Color Customization UI Guidelines",
     "summary": "Guidelines for color-customizing apps that work with Auto. ",
     "keywords": ["design", "Auto", "Automotive"],
-    "type": "PDF DOWNLOAD (779KB)",
+    "type": "Design",
     "titleFriendly": ""
   },
   {
diff --git a/docs/html/sdk/index.jd b/docs/html/sdk/index.jd
index a43ba3c..06577720 100644
--- a/docs/html/sdk/index.jd
+++ b/docs/html/sdk/index.jd
@@ -28,21 +28,21 @@
 
 
 
-sdk.linux_download=android-sdk_r24.0.2-linux.tgz
-sdk.linux_bytes=140097024
-sdk.linux_checksum=b6fd75e8b06b0028c2427e6da7d8a09d8f956a86
+sdk.linux_download=android-sdk_r24.1.2-linux.tgz
+sdk.linux_bytes=168121693
+sdk.linux_checksum=68980e4a26cca0182abb1032abffbb72a1240c51
 
-sdk.mac_download=android-sdk_r24.0.2-macosx.zip
-sdk.mac_bytes=87262823
-sdk.mac_checksum=3ab5e0ab0db5e7c45de9da7ff525dee6cfa97455
+sdk.mac_download=android-sdk_r24.1.2-macosx.zip
+sdk.mac_bytes=89151287
+sdk.mac_checksum=00e43ff1557e8cba7da53e4f64f3a34498048256
 
-sdk.win_download=android-sdk_r24.0.2-windows.zip
-sdk.win_bytes=139473113
-sdk.win_checksum=51269c8336f936fc9b9538f9b9ca236b78fb4e4b
+sdk.win_download=android-sdk_r24.1.2-windows.zip
+sdk.win_bytes=159778618
+sdk.win_checksum=704f6c874373b98e061fe2e7eb34f9fcb907a341
 
-sdk.win_installer=installer_r24.0.2-windows.exe
-sdk.win_installer_bytes=91428280
-sdk.win_installer_checksum=edac14e1541e97d68821fa3a709b4ea8c659e676
+sdk.win_installer=installer_r24.1.2-windows.exe
+sdk.win_installer_bytes=111364285
+sdk.win_installer_checksum=e0ec864efa0e7449db2d7ed069c03b1f4d36f0cd
 
 
 
diff --git a/docs/html/training/auto/audio/index.jd b/docs/html/training/auto/audio/index.jd
index aa25769..56ec90a 100644
--- a/docs/html/training/auto/audio/index.jd
+++ b/docs/html/training/auto/audio/index.jd
@@ -2,6 +2,9 @@
 page.tags="auto", "car", "automotive", "audio"
 page.article=true
 
+page.metaDescription=Learn how to extend your audio apps for use in Android Auto devices.
+page.image=auto/images/assets/icons/media_app_playback.png
+
 @jd:body
 
 <div id="tb-wrapper">
@@ -31,8 +34,8 @@
 
     <ul>
       <li>
-        <a href="{@docRoot}shareables/auto/AndroidAuto-media-apps.pdf">
-              User Experience Guidelines: Media Apps</a>
+        <a href="{@docRoot}shareables/auto/AndroidAuto-audio-apps.pdf">
+              User Experience Guidelines: Audio Apps</a>
       </li>
       <li><a href="{@docRoot}training/managing-audio/index.html">Managing Audio
         Playback</a></li>
@@ -279,8 +282,8 @@
 applications have strict limits on how large a menu they can display. This is
 intended to prevent distracting the driver, and to make it easy for the driver
 to operate the app via voice commands. For more information on the Auto user
-experience restrictions, see the <a href="{@docRoot}shareables/auto/AndroidAuto-media-apps.pdf">
-Auto Media Apps</a> guidelines.</p>
+experience restrictions, see the <a href="{@docRoot}shareables/auto/AndroidAuto-audio-apps.pdf">
+Auto Audio Apps</a> guidelines.</p>
 
 <p>Your implementation of {@link android.service.media.MediaBrowserService#onGetRoot
 onGetRoot()} returns information about the root node of the menu
@@ -466,10 +469,4 @@
 <p>For more information about playing audio content, see
 <a href="{@docRoot}guide/topics/media/mediaplayer.html">Media Playback</a>,
 <a href="{@docRoot}training/managing-audio/index.html">Managing Audio Playback</a>, and
-<a href="{@docRoot}guide/topics/media/exoplayer.html">ExoPlayer</a>.
-
-
-(for example, by using a {@link
-android.media.MediaPlayer} or <a
-href="{@docRoot}guide/topics/media/exoplayer.html">ExoPlayer</a>). If the phone
-is connected to an Auto device, .</p>
+<a href="{@docRoot}guide/topics/media/exoplayer.html">ExoPlayer</a>.</p>
diff --git a/docs/html/training/auto/index.jd b/docs/html/training/auto/index.jd
index 26eee32..c34911c 100644
--- a/docs/html/training/auto/index.jd
+++ b/docs/html/training/auto/index.jd
@@ -1,9 +1,84 @@
 page.title=Building Apps for Auto
-page.trainingcourse=true
+page.article=true
+
+meta.tags="auto"
+page.tags="auto"
+
 page.metaDescription=Starting point for building apps for Auto, with guidelines, information, and examples.
-page.image=design/tv/images/focus.png
+
 @jd:body
 
+<iframe width="448" height="252" src="//www.youtube.com/embed/ctiaVxgclsg?autohide=1&amp;showinfo=0" frameborder="0" allowfullscreen="" style="float: right; margin: 0 0 20px 20px;"></iframe>
+
+<p>
+  The Android platform enables you to extend your app to work with in-vehicle console systems
+  running Android Auto. These systems provide a simplified interface for apps that can be used in
+  a car, allowing users to take your app with them on the way to the grocery store or on a long
+  road trip.
+</p>
+
+<p>
+  Apps that work with Android Auto consoles run on a connected device, such as a phone or
+  tablet. The app communicates via specific APIs with the in-dash console, which provides a user
+  interface for the connected app that is designed for use in a car.
+</p>
+
+<p>
+  For more information, follow the links below to learn how to extend your Android app to support
+  use in vehicles.
+</p>
 
 
-<p>These classes teach you how to build and extend apps to work with Auto devices.</p>
\ No newline at end of file
+<h2 id="overview">Get Started</h2>
+
+<p>
+  Learn the basics of extending your app for use in vehicles, with information about app
+  configuration and user interface design considerations:
+</p>
+
+<div class="resource-widget resource-flow-layout col-12"
+  data-query="collection:training/auto/overview"
+  data-cardSizes="12x6, 6x3x2"
+  data-maxresults="6">
+</div>
+
+
+<h2 id="media">Audio Apps</h2>
+
+<p>
+  Learn how to extend your audio app to enable content navigation and playback through a vehicle
+  console:
+</p>
+
+<div class="resource-widget resource-flow-layout landing col-12"
+  data-query="collection:training/auto/media"
+  data-cardSizes="9x6, 9x3x2"
+  data-maxResults="4">
+</div>
+
+
+<h2 id="messaging">Messaging Apps</h2>
+
+<p>
+  Learn how to extend your messaging app to provide text communication services through a vehicle
+  console:
+</p>
+
+<div class="resource-widget resource-flow-layout landing col-12"
+  data-query="collection:training/auto/messaging"
+  data-cardSizes="9x6, 9x3x2"
+  data-maxResults="6">
+</div>
+
+
+<h2 id="distribute">App Quality and Distribution</h2>
+
+<p>
+  Learn how to distribute your Auto app and how apps are evaluated for quality and driver safety:
+</p>
+
+<div class="resource-widget resource-flow-layout landing col-12"
+  data-query="collection:training/auto/distribute"
+  data-cardSizes="9x3"
+  data-maxResults="6">
+</div>
diff --git a/docs/html/training/auto/messaging/index.jd b/docs/html/training/auto/messaging/index.jd
index 70ac205..7540a3f 100644
--- a/docs/html/training/auto/messaging/index.jd
+++ b/docs/html/training/auto/messaging/index.jd
@@ -2,6 +2,9 @@
 page.tags="auto", "car", "automotive", "messaging"
 page.article=true
 
+page.metaDescription=Learn how to extend your messaging app for use in Android Auto devices.
+page.image=auto/images/assets/icons/messaging_app_notifications.png
+
 @jd:body
 
 <div id="tb-wrapper">
diff --git a/docs/html/training/enterprise/index.jd b/docs/html/training/enterprise/index.jd
index 10be14e..fce09b9 100644
--- a/docs/html/training/enterprise/index.jd
+++ b/docs/html/training/enterprise/index.jd
@@ -2,7 +2,6 @@
 meta.tags="work, enterprise, corporate"
 page.tags="work", "enterprise", "corporate"
 page.metaDescription=Learn how to build Android apps for the enterprise and take advantage of Google's Android for Work program.
-page.tags="education"
 page.article=true
 
 @jd:body
diff --git a/docs/image_sources/distribute/gp-auto-process.graffle b/docs/image_sources/distribute/gp-auto-process.graffle
new file mode 100644
index 0000000..0e7fd27
--- /dev/null
+++ b/docs/image_sources/distribute/gp-auto-process.graffle
@@ -0,0 +1,1636 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>ActiveLayerIndex</key>
+	<integer>0</integer>
+	<key>ApplicationVersion</key>
+	<array>
+		<string>com.omnigroup.OmniGraffle6</string>
+		<string>156.11.0.206384</string>
+	</array>
+	<key>AutoAdjust</key>
+	<true/>
+	<key>BackgroundGraphic</key>
+	<dict>
+		<key>Bounds</key>
+		<string>{{0, 0}, {576, 734}}</string>
+		<key>Class</key>
+		<string>SolidGraphic</string>
+		<key>ID</key>
+		<integer>2</integer>
+		<key>Style</key>
+		<dict>
+			<key>stroke</key>
+			<dict>
+				<key>Draws</key>
+				<string>NO</string>
+			</dict>
+		</dict>
+	</dict>
+	<key>BaseZoom</key>
+	<integer>0</integer>
+	<key>CanvasOrigin</key>
+	<string>{0, 0}</string>
+	<key>ColumnAlign</key>
+	<integer>1</integer>
+	<key>ColumnSpacing</key>
+	<real>36</real>
+	<key>CreationDate</key>
+	<string>2014-11-01 20:41:29 +0000</string>
+	<key>Creator</key>
+	<string>Dirk Dougherty</string>
+	<key>DisplayScale</key>
+	<string>1 in = 1 in</string>
+	<key>ExportShapes</key>
+	<array>
+		<dict>
+			<key>InspectorGroup</key>
+			<real>255</real>
+			<key>ShapeImageRect</key>
+			<string>{{2, 2}, {22, 22}}</string>
+			<key>ShapeName</key>
+			<string>C0B19DB6-318A-41B1-89F7-2A2E7D0C2D0C-579-00007EC8FCD3DE04</string>
+			<key>ShouldExport</key>
+			<string>YES</string>
+			<key>StrokePath</key>
+			<dict>
+				<key>elements</key>
+				<array>
+					<dict>
+						<key>element</key>
+						<string>MOVETO</string>
+						<key>point</key>
+						<string>{-0.5, -0.50000000000000011}</string>
+					</dict>
+					<dict>
+						<key>element</key>
+						<string>LINETO</string>
+						<key>point</key>
+						<string>{-0.5, 0.49999999999999978}</string>
+					</dict>
+					<dict>
+						<key>element</key>
+						<string>LINETO</string>
+						<key>point</key>
+						<string>{0.49999999999999989, 0.49999999999999978}</string>
+					</dict>
+					<dict>
+						<key>element</key>
+						<string>LINETO</string>
+						<key>point</key>
+						<string>{0.49999999999999989, -0.50000000000000011}</string>
+					</dict>
+					<dict>
+						<key>element</key>
+						<string>CLOSE</string>
+					</dict>
+					<dict>
+						<key>element</key>
+						<string>MOVETO</string>
+						<key>point</key>
+						<string>{-0.12357954545454553, 0.33399999999999985}</string>
+					</dict>
+					<dict>
+						<key>element</key>
+						<string>LINETO</string>
+						<key>point</key>
+						<string>{0.035511363636363646, 0.33399999999999985}</string>
+					</dict>
+					<dict>
+						<key>element</key>
+						<string>LINETO</string>
+						<key>point</key>
+						<string>{0.035511363636363646, 0.36999999999999988}</string>
+					</dict>
+					<dict>
+						<key>element</key>
+						<string>LINETO</string>
+						<key>point</key>
+						<string>{-0.12357954545454553, 0.36999999999999988}</string>
+					</dict>
+					<dict>
+						<key>element</key>
+						<string>CLOSE</string>
+					</dict>
+					<dict>
+						<key>element</key>
+						<string>MOVETO</string>
+						<key>point</key>
+						<string>{-0.12357954545454553, 0.33399999999999985}</string>
+					</dict>
+				</array>
+			</dict>
+			<key>TextBounds</key>
+			<string>{{0, 0}, {1, 1}}</string>
+			<key>combined</key>
+			<dict>
+				<key>Bounds</key>
+				<string>{{52.875, 262.125}, {352, 375}}</string>
+				<key>shapes</key>
+				<array>
+					<dict>
+						<key>ShapeName</key>
+						<string>Rectangle</string>
+						<key>graphic</key>
+						<dict>
+							<key>Bounds</key>
+							<string>{{185.375, 574.875}, {56, 13.5}}</string>
+						</dict>
+					</dict>
+					<dict>
+						<key>ShapeName</key>
+						<string>Rectangle</string>
+						<key>graphic</key>
+						<dict>
+							<key>Bounds</key>
+							<string>{{52.875, 262.125}, {352, 375}}</string>
+						</dict>
+					</dict>
+				</array>
+				<key>type</key>
+				<integer>3</integer>
+			</dict>
+		</dict>
+	</array>
+	<key>FileType</key>
+	<string>flat</string>
+	<key>GraphDocumentVersion</key>
+	<integer>11</integer>
+	<key>GraphicsList</key>
+	<array>
+		<dict>
+			<key>Bounds</key>
+			<string>{{160.875, 343.125}, {175, 115}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Color</key>
+				<dict>
+					<key>w</key>
+					<string>0</string>
+				</dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>12</real>
+			</dict>
+			<key>ID</key>
+			<integer>40</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Align</key>
+				<integer>0</integer>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf210
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1}}
+{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}}
+\deftab720
+\pard\tx220\tx424\tx441\pardeftab720\li457\fi-458\sl360\slmult1
+\ls1\ilvl0
+\f0\i\fs24 \cf0 {\listtext	\'95	}Design for Auto\
+{\listtext	\'95	}Adhere to driver distraction\
+      requirements\
+{\listtext	\'95	}Meet Auto App Quality\
+}</string>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{265.75, 531.75}, {56, 27}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Color</key>
+				<dict>
+					<key>w</key>
+					<string>0</string>
+				</dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>14</real>
+			</dict>
+			<key>ID</key>
+			<integer>48</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf210
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\deftab720
+\pard\pardeftab720\qc
+
+\f0\fs28 \cf0 Review}</string>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{105.4375, 496.25}, {49, 27}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Color</key>
+				<dict>
+					<key>w</key>
+					<string>0</string>
+				</dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>14</real>
+			</dict>
+			<key>ID</key>
+			<integer>49</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf210
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\deftab720
+\pard\pardeftab720\qc
+
+\f0\fs28 \cf0 Opt-In}</string>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{102.4375, 517.125}, {55, 27}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Color</key>
+				<dict>
+					<key>w</key>
+					<string>0</string>
+				</dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>14</real>
+			</dict>
+			<key>ID</key>
+			<integer>50</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf210
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\deftab720
+\pard\pardeftab720\qc
+
+\f0\fs28 \cf0 Upload}</string>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{102.4375, 537.75}, {56, 27}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Color</key>
+				<dict>
+					<key>w</key>
+					<string>0</string>
+				</dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>14</real>
+			</dict>
+			<key>ID</key>
+			<integer>51</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf210
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\deftab720
+\pard\pardeftab720\qc
+
+\f0\fs28 \cf0 Publish}</string>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{79.875, 501.75}, {100.125, 54}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Color</key>
+				<dict>
+					<key>w</key>
+					<string>0</string>
+				</dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>12</real>
+			</dict>
+			<key>ID</key>
+			<integer>52</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>1</string>
+						<key>g</key>
+						<string>1</string>
+						<key>r</key>
+						<string>1</string>
+					</dict>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{52.875, 262.125}, {352, 375}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Color</key>
+				<dict>
+					<key>w</key>
+					<string>0</string>
+				</dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>12</real>
+			</dict>
+			<key>ID</key>
+			<integer>58</integer>
+			<key>ImageID</key>
+			<integer>3</integer>
+			<key>Shape</key>
+			<string>C0B19DB6-318A-41B1-89F7-2A2E7D0C2D0C-579-00007EC8FCD3DE04</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+		</dict>
+	</array>
+	<key>GridInfo</key>
+	<dict/>
+	<key>GuidesLocked</key>
+	<string>NO</string>
+	<key>GuidesVisible</key>
+	<string>YES</string>
+	<key>HPages</key>
+	<integer>1</integer>
+	<key>ImageCounter</key>
+	<integer>4</integer>
+	<key>Images</key>
+	<array>
+		<dict>
+			<key>Extension</key>
+			<string>png</string>
+			<key>ID</key>
+			<integer>3</integer>
+			<key>RawData</key>
+			<data>
+			iVBORw0KGgoAAAANSUhEUgAAAWAAAAF3CAYAAACbspFvAAAKQWlD
+			Q1BJQ0MgUHJvZmlsZQAASA2dlndUU9kWh8+9N73QEiIgJfQaegkg
+			0jtIFQRRiUmAUAKGhCZ2RAVGFBEpVmRUwAFHhyJjRRQLg4Ji1wny
+			EFDGwVFEReXdjGsJ7601896a/cdZ39nnt9fZZ+9917oAUPyCBMJ0
+			WAGANKFYFO7rwVwSE8vE9wIYEAEOWAHA4WZmBEf4RALU/L09mZmo
+			SMaz9u4ugGS72yy/UCZz1v9/kSI3QyQGAApF1TY8fiYX5QKUU7PF
+			GTL/BMr0lSkyhjEyFqEJoqwi48SvbPan5iu7yZiXJuShGlnOGbw0
+			noy7UN6aJeGjjAShXJgl4GejfAdlvVRJmgDl9yjT0/icTAAwFJlf
+			zOcmoWyJMkUUGe6J8gIACJTEObxyDov5OWieAHimZ+SKBIlJYqYR
+			15hp5ejIZvrxs1P5YjErlMNN4Yh4TM/0tAyOMBeAr2+WRQElWW2Z
+			aJHtrRzt7VnW5mj5v9nfHn5T/T3IevtV8Sbsz55BjJ5Z32zsrC+9
+			FgD2JFqbHbO+lVUAtG0GQOXhrE/vIADyBQC03pzzHoZsXpLE4gwn
+			C4vs7GxzAZ9rLivoN/ufgm/Kv4Y595nL7vtWO6YXP4EjSRUzZUXl
+			pqemS0TMzAwOl89k/fcQ/+PAOWnNycMsnJ/AF/GF6FVR6JQJhIlo
+			u4U8gViQLmQKhH/V4X8YNicHGX6daxRodV8AfYU5ULhJB8hvPQBD
+			IwMkbj96An3rWxAxCsi+vGitka9zjzJ6/uf6Hwtcim7hTEEiU+b2
+			DI9kciWiLBmj34RswQISkAd0oAo0gS4wAixgDRyAM3AD3iAAhIBI
+			EAOWAy5IAmlABLJBPtgACkEx2AF2g2pwANSBetAEToI2cAZcBFfA
+			DXALDIBHQAqGwUswAd6BaQiC8BAVokGqkBakD5lC1hAbWgh5Q0FQ
+			OBQDxUOJkBCSQPnQJqgYKoOqoUNQPfQjdBq6CF2D+qAH0CA0Bv0B
+			fYQRmALTYQ3YALaA2bA7HAhHwsvgRHgVnAcXwNvhSrgWPg63whfh
+			G/AALIVfwpMIQMgIA9FGWAgb8URCkFgkAREha5EipAKpRZqQDqQb
+			uY1IkXHkAwaHoWGYGBbGGeOHWYzhYlZh1mJKMNWYY5hWTBfmNmYQ
+			M4H5gqVi1bGmWCesP3YJNhGbjS3EVmCPYFuwl7ED2GHsOxwOx8AZ
+			4hxwfrgYXDJuNa4Etw/XjLuA68MN4SbxeLwq3hTvgg/Bc/BifCG+
+			Cn8cfx7fjx/GvyeQCVoEa4IPIZYgJGwkVBAaCOcI/YQRwjRRgahP
+			dCKGEHnEXGIpsY7YQbxJHCZOkxRJhiQXUiQpmbSBVElqIl0mPSa9
+			IZPJOmRHchhZQF5PriSfIF8lD5I/UJQoJhRPShxFQtlOOUq5QHlA
+			eUOlUg2obtRYqpi6nVpPvUR9Sn0vR5Mzl/OX48mtk6uRa5Xrl3sl
+			T5TXl3eXXy6fJ18hf0r+pvy4AlHBQMFTgaOwVqFG4bTCPYVJRZqi
+			lWKIYppiiWKD4jXFUSW8koGStxJPqUDpsNIlpSEaQtOledK4tE20
+			Otpl2jAdRzek+9OT6cX0H+i99AllJWVb5SjlHOUa5bPKUgbCMGD4
+			M1IZpYyTjLuMj/M05rnP48/bNq9pXv+8KZX5Km4qfJUilWaVAZWP
+			qkxVb9UU1Z2qbapP1DBqJmphatlq+9Uuq43Pp893ns+dXzT/5PyH
+			6rC6iXq4+mr1w+o96pMamhq+GhkaVRqXNMY1GZpumsma5ZrnNMe0
+			aFoLtQRa5VrntV4wlZnuzFRmJbOLOaGtru2nLdE+pN2rPa1jqLNY
+			Z6NOs84TXZIuWzdBt1y3U3dCT0svWC9fr1HvoT5Rn62fpL9Hv1t/
+			ysDQINpgi0GbwaihiqG/YZ5ho+FjI6qRq9Eqo1qjO8Y4Y7ZxivE+
+			41smsImdSZJJjclNU9jU3lRgus+0zwxr5mgmNKs1u8eisNxZWaxG
+			1qA5wzzIfKN5m/krCz2LWIudFt0WXyztLFMt6ywfWSlZBVhttOqw
+			+sPaxJprXWN9x4Zq42Ozzqbd5rWtqS3fdr/tfTuaXbDdFrtOu8/2
+			DvYi+yb7MQc9h3iHvQ732HR2KLuEfdUR6+jhuM7xjOMHJ3snsdNJ
+			p9+dWc4pzg3OowsMF/AX1C0YctFx4bgccpEuZC6MX3hwodRV25Xj
+			Wuv6zE3Xjed2xG3E3dg92f24+ysPSw+RR4vHlKeT5xrPC16Il69X
+			kVevt5L3Yu9q76c+Oj6JPo0+E752vqt9L/hh/QL9dvrd89fw5/rX
+			+08EOASsCegKpARGBFYHPgsyCRIFdQTDwQHBu4IfL9JfJFzUFgJC
+			/EN2hTwJNQxdFfpzGC4sNKwm7Hm4VXh+eHcELWJFREPEu0iPyNLI
+			R4uNFksWd0bJR8VF1UdNRXtFl0VLl1gsWbPkRoxajCCmPRYfGxV7
+			JHZyqffS3UuH4+ziCuPuLjNclrPs2nK15anLz66QX8FZcSoeGx8d
+			3xD/iRPCqeVMrvRfuXflBNeTu4f7kufGK+eN8V34ZfyRBJeEsoTR
+			RJfEXYljSa5JFUnjAk9BteB1sl/ygeSplJCUoykzqdGpzWmEtPi0
+			00IlYYqwK10zPSe9L8M0ozBDuspp1e5VE6JA0ZFMKHNZZruYjv5M
+			9UiMJJslg1kLs2qy3mdHZZ/KUcwR5vTkmuRuyx3J88n7fjVmNXd1
+			Z752/ob8wTXuaw6thdauXNu5Tnddwbrh9b7rj20gbUjZ8MtGy41l
+			G99uit7UUaBRsL5gaLPv5sZCuUJR4b0tzlsObMVsFWzt3WazrWrb
+			lyJe0fViy+KK4k8l3JLr31l9V/ndzPaE7b2l9qX7d+B2CHfc3em6
+			81iZYlle2dCu4F2t5czyovK3u1fsvlZhW3FgD2mPZI+0MqiyvUqv
+			akfVp+qk6oEaj5rmvep7t+2d2sfb17/fbX/TAY0DxQc+HhQcvH/I
+			91BrrUFtxWHc4azDz+ui6rq/Z39ff0TtSPGRz0eFR6XHwo911TvU
+			1zeoN5Q2wo2SxrHjccdv/eD1Q3sTq+lQM6O5+AQ4ITnx4sf4H++e
+			DDzZeYp9qukn/Z/2ttBailqh1tzWibakNml7THvf6YDTnR3OHS0/
+			m/989Iz2mZqzymdLz5HOFZybOZ93fvJCxoXxi4kXhzpXdD66tOTS
+			na6wrt7LgZevXvG5cqnbvfv8VZerZ645XTt9nX297Yb9jdYeu56W
+			X+x+aem172296XCz/ZbjrY6+BX3n+l37L972un3ljv+dGwOLBvru
+			Lr57/17cPel93v3RB6kPXj/Mejj9aP1j7OOiJwpPKp6qP6391fjX
+			Zqm99Oyg12DPs4hnj4a4Qy//lfmvT8MFz6nPK0a0RupHrUfPjPmM
+			3Xqx9MXwy4yX0+OFvyn+tveV0auffnf7vWdiycTwa9HrmT9K3qi+
+			OfrW9m3nZOjk03dp76anit6rvj/2gf2h+2P0x5Hp7E/4T5WfjT93
+			fAn88ngmbWbm3/eE8/syOll+AAAACXBIWXMAAAsTAAALEwEAmpwY
+			AAAB1WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0
+			YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1Q
+			IENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0
+			dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1u
+			cyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0i
+			IgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRv
+			YmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOkNvbXBy
+			ZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0
+			aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb24+MjwvdGlmZjpQ
+			aG90b21ldHJpY0ludGVycHJldGF0aW9uPgogICAgICAgICA8dGlm
+			ZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAg
+			ICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6
+			eG1wbWV0YT4KsOMy3QAAQABJREFUeAHsXQdgHMXVnrtTl4tsyUUu
+			uOJu03sgEEMICQQIvUOAUAM4CWn0UPKHhCSEEghJILRgejMYAphm
+			gysG995tWZJl9X53//fN3juvzidZklVOd+/Zo5mdtrPfzn777k1Z
+			Y1QUAUVAEVAEFAFFQBFQBBQBRUARUAQUAUVAEVAEFAFFQBFQBBQB
+			RUARUAQUAUVAEVAEFAFFQBFQBBQBRUARUAQUAUVAEVAEFAFFQBFQ
+			BBQBRUARUAQUAUVAEVAEFAFFQBFQBBQBRUARUAQUAUVAEVAEFAFF
+			QBFQBBQBRUARUAQUAUVAEVAEFAFFQBFQBBQBRUARUAQUAUVAEVAE
+			FAFFQBFQBBQBRUARUAQUAUVAEVAEFAFFQBFQBBQBRUARUAQUAUVA
+			EVAEFAFFQBFQBBQBRUARUAQUAUVAEVAEFAFFQBFQBBQBRUARUAQU
+			AUVAEVAEFAFFQBFQBBQBRUARUAQUAUVAEVAEFAFFQBFQBBQBRUAR
+			UAQUAUVAEVAEFAFFQBFQBBQBRUARUAQUAUVAEVAEFAFFQBFQBBQB
+			RUARUAQUAUVAEVAEFAFFQBFQBBQBRUARUAQUAUVAEVAEFAFFQBFQ
+			BBQBRUARUAQUAUVAEVAEFAFFQBFQBBQBRUARUAQUAUVAEVAEFAFF
+			QBFQBBQBRUARUAQUAUVAEVAEFAFFQBFQBBQBRUARUAQUAUVAEVAE
+			FAFFQBFQBBQBRUARUAQUAUVAEVAEFAFFQBFQBBQBRUARUAQUAUVA
+			EVAEFAFFQBFQBBQBRUARUAQUAUVAEVAEFAFFQBFQBBQBRUARUAQU
+			gXZCIM3n8wXhKuHK6bxe73z45+7N+VDHZpSfuDd1aFlFQBFQBOId
+			AUvAuMgRoQtNTkpKmgwC3QoSPm8vLn4flE3Zi/JaVBFQBBSBuEcg
+			koDtBYOAb4D7Wq4eZPwTHC8NuRskHmR9DNLehSuAexHxWUxD+HV4
+			ltQRPgnlFsD/HO4SuKeZBzIJ4SeR9iu4tXDzk5OT93OS9K8ioAgo
+			AvGPQFQCBhEeDHKsxeXD850KclwHsj0RxxMRXoa4CwgNwl9TY0Zw
+			GOJexvEtoXgxQaQjvhjuLOQ7HunfwK1iHhwfgfg6+A/icBTCr8K9
+			xTQVRUARUAQSAYGoBIwLHw4yrIefCv99kOYvBAyEr0bcGzhORngb
+			3LUMw/WAGwRHYrYEjHzfhxONl2x+BdJWM0+IgAsR9IWOj0TaSoZV
+			FAFFILER8Cby5YMcBweDwRXAoAb+SI/HcwvIM58O4d8jvi9cHcI/
+			gT8F8UVw1GRJxGFB+gkobzVeRvr9/i/DiQggbTujGVdfX18OL51h
+			FUVAEUhsBBKagEGMZ4I8F4S6QAn860GefUMuF/4PEJcCf1YgENgX
+			/lE4prnh3lAZ8fyohwNyVkDsuRIO+YGIYz1UBBQBRcAkGgFT88yA
+			6wMzAM0NF4JU72E/wPFH8M6BS6MDyXLg7OcI94D/FfyecN/ATYXr
+			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
+			oAhEQ2BvHig3AaeOGjXq9Ggn0Liuh8B+++33Q7Q6HU5ImPdaXrxd
+			74K0xYpAjCJA7aY1Ig8kNSP7xYgePXoc2pqKtEzsIdC7d2/OiOCM
+			FhmMc5sgSMQcmFNRBBSBvUSgpRqwaEH0Sb60/dKl4ms9/eCrxAEC
+			qampfXA/RQOWr4GIGYL3XkURUATaAIGWEjBPyQeQ5cQ2aAkYCy0y
+			mKjS9RHw+XzpmJZGDdg9G4L3nCSsBNz1b7FeQYwg0FoTBB9COj6Q
+			SdCW+KA2S2rq/WZZfqkpC9aaMX16mJyUdH2im4Vch2dK433FN0fl
+			Rct7ze/dqSgCikAbIdAaAqYmJI4PZTK0pWYTcGF5jblj2mKz3VNh
+			Dp/Y3Uwe0tcc2ivX9EvVVcptdE/bpJrQPY00P/C+y8tX7cBtgrRW
+			ksgItIaAiZdov1YDxnGz6+FyqnK/35RUBM2clcWmylSa1ZX55pCs
+			AWZC9/4my5oeeQqVTkZAyJf3lk7It5ObpadXBOIHgWYTZ8Qliwbs
+			xc9UL7QlEnGzxAPq9qV5jLfWYyrKfWbVBvyq9Raa+qRys746z+zX
+			faAZkdHPZPg4A0qlExHgPfXh/vpghpD7LdpvJzZLT60IxA8CLSVg
+			9wPIsDyYzSZgAwZOSvGZ5HQU9QRNaWWS2bTdY7qlVhpvzwozt6LU
+			bKvLM6MyBppBaf2hejW/6li6LXgpGWxyY2rr6kxyUpJJSUkxGNyK
+			pSbuqS3sG2yw3GO59/RVFAFFoA0QaCkBu0/pfiCb/VBaDRjKbXKA
+			BIz/Hq8pqfaadQUek5lcZbqlFJtt9RWmuqbE5NdtM0PTBptsX7bx
+			eVvX1Pr6erNz506zs7jU1NZW45Rek9ktw+T2728w3cp9PW0arqio
+			MMtXrjLr1q0zQwbvYyZOHG+wLedenQNbSJqqqmrj9Xr2uq5mNITE
+			K/dYsjf7PksB9RUBRaBxBFrHarvsgXwgRUNq/CyuFPCtScnwQbPF
+			7DVowB6QiReaYWFNslmSn2QyUkvNvlnVWAFQa/I9xabGn2d6B/uY
+			gUnDTXdvb6hkzdMiqYEW7thhFn6z2HhgeB4yZKDJ6pllioqKzPz5
+			Xxkkm4MPOgDx++Al0Pa8giW9JhOuvKzCkmYStOC9lcqqKrNo0SLU
+			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
+			9QAAAABJRU5ErkJggg==
+			</data>
+		</dict>
+	</array>
+	<key>KeepToScale</key>
+	<false/>
+	<key>Layers</key>
+	<array>
+		<dict>
+			<key>Lock</key>
+			<string>NO</string>
+			<key>Name</key>
+			<string>Layer 1</string>
+			<key>Print</key>
+			<string>YES</string>
+			<key>View</key>
+			<string>YES</string>
+		</dict>
+	</array>
+	<key>LayoutInfo</key>
+	<dict>
+		<key>Animate</key>
+		<string>NO</string>
+		<key>circoMinDist</key>
+		<real>18</real>
+		<key>circoSeparation</key>
+		<real>0.0</real>
+		<key>layoutEngine</key>
+		<string>dot</string>
+		<key>neatoLineLength</key>
+		<real>0.20000000298023224</real>
+		<key>neatoSeparation</key>
+		<real>0.0</real>
+		<key>twopiSeparation</key>
+		<real>0.0</real>
+	</dict>
+	<key>LinksVisible</key>
+	<string>NO</string>
+	<key>MagnetsVisible</key>
+	<string>NO</string>
+	<key>MasterSheets</key>
+	<array/>
+	<key>ModificationDate</key>
+	<string>2015-03-09 18:49:18 +0000</string>
+	<key>Modifier</key>
+	<string>Luan Nguyen</string>
+	<key>NotesVisible</key>
+	<string>NO</string>
+	<key>Orientation</key>
+	<integer>2</integer>
+	<key>OriginVisible</key>
+	<string>NO</string>
+	<key>PageBreaks</key>
+	<string>YES</string>
+	<key>PrintInfo</key>
+	<dict>
+		<key>NSBottomMargin</key>
+		<array>
+			<string>float</string>
+			<string>40</string>
+		</array>
+		<key>NSLeftMargin</key>
+		<array>
+			<string>float</string>
+			<string>18</string>
+		</array>
+		<key>NSPaperSize</key>
+		<array>
+			<string>size</string>
+			<string>{612, 792}</string>
+		</array>
+		<key>NSRightMargin</key>
+		<array>
+			<string>float</string>
+			<string>18</string>
+		</array>
+		<key>NSTopMargin</key>
+		<array>
+			<string>float</string>
+			<string>18</string>
+		</array>
+	</dict>
+	<key>PrintOnePage</key>
+	<false/>
+	<key>ReadOnly</key>
+	<string>NO</string>
+	<key>RowAlign</key>
+	<integer>1</integer>
+	<key>RowSpacing</key>
+	<real>36</real>
+	<key>SheetTitle</key>
+	<string>Canvas 1</string>
+	<key>SmartAlignmentGuidesActive</key>
+	<string>YES</string>
+	<key>SmartDistanceGuidesActive</key>
+	<string>NO</string>
+	<key>UniqueID</key>
+	<integer>1</integer>
+	<key>UseEntirePage</key>
+	<false/>
+	<key>VPages</key>
+	<integer>1</integer>
+	<key>WindowInfo</key>
+	<dict>
+		<key>BottomSlabHeight</key>
+		<real>478</real>
+		<key>CurrentSheet</key>
+		<integer>0</integer>
+		<key>Expanded_Canvases</key>
+		<array/>
+		<key>ShowInfo</key>
+		<true/>
+		<key>ShowRuler</key>
+		<true/>
+		<key>Sidebar</key>
+		<true/>
+		<key>SidebarWidth</key>
+		<integer>230</integer>
+		<key>VisibleRegion</key>
+		<string>{{14, 41}, {475, 680}}</string>
+		<key>Zoom</key>
+		<real>1</real>
+		<key>ZoomValues</key>
+		<array>
+			<array>
+				<string>Canvas 1</string>
+				<real>1</real>
+				<real>2</real>
+			</array>
+		</array>
+	</dict>
+</dict>
+</plist>
diff --git a/docs/image_sources/distribute/gp-tv-process.graffle b/docs/image_sources/distribute/gp-tv-process.graffle
new file mode 100644
index 0000000..3fab6cc
--- /dev/null
+++ b/docs/image_sources/distribute/gp-tv-process.graffle
@@ -0,0 +1,1524 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>ActiveLayerIndex</key>
+	<integer>0</integer>
+	<key>ApplicationVersion</key>
+	<array>
+		<string>com.omnigroup.OmniGraffle6</string>
+		<string>156.11.0.206384</string>
+	</array>
+	<key>AutoAdjust</key>
+	<true/>
+	<key>BackgroundGraphic</key>
+	<dict>
+		<key>Bounds</key>
+		<string>{{0, 0}, {576, 734}}</string>
+		<key>Class</key>
+		<string>SolidGraphic</string>
+		<key>ID</key>
+		<integer>2</integer>
+		<key>Style</key>
+		<dict>
+			<key>stroke</key>
+			<dict>
+				<key>Draws</key>
+				<string>NO</string>
+			</dict>
+		</dict>
+	</dict>
+	<key>BaseZoom</key>
+	<integer>0</integer>
+	<key>CanvasOrigin</key>
+	<string>{0, 0}</string>
+	<key>ColumnAlign</key>
+	<integer>1</integer>
+	<key>ColumnSpacing</key>
+	<real>36</real>
+	<key>CreationDate</key>
+	<string>2014-11-01 20:41:29 +0000</string>
+	<key>Creator</key>
+	<string>Dirk Dougherty</string>
+	<key>DisplayScale</key>
+	<string>1 in = 1 in</string>
+	<key>FileType</key>
+	<string>flat</string>
+	<key>GraphDocumentVersion</key>
+	<integer>11</integer>
+	<key>GraphicsList</key>
+	<array>
+		<dict>
+			<key>Bounds</key>
+			<string>{{161.25, 343.625}, {148, 94}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Color</key>
+				<dict>
+					<key>w</key>
+					<string>0</string>
+				</dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>12</real>
+			</dict>
+			<key>ID</key>
+			<integer>40</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Align</key>
+				<integer>0</integer>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf210
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1}}
+{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}}
+\deftab720
+\pard\tx220\tx424\tx441\pardeftab720\li457\fi-458\sl360\slmult1
+\ls1\ilvl0
+\f0\i\fs24 \cf0 {\listtext	\'95	}Design for TV\
+{\listtext	\'95	}Use Leanback Library\
+{\listtext	\'95	}Meet TV App Quality\
+}</string>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{265.75, 531.75}, {56, 27}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Color</key>
+				<dict>
+					<key>w</key>
+					<string>0</string>
+				</dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>14</real>
+			</dict>
+			<key>ID</key>
+			<integer>48</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf210
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\deftab720
+\pard\pardeftab720\qc
+
+\f0\fs28 \cf0 Review}</string>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{105.4375, 515.25}, {49, 27}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Color</key>
+				<dict>
+					<key>w</key>
+					<string>0</string>
+				</dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>14</real>
+			</dict>
+			<key>ID</key>
+			<integer>49</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf210
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\deftab720
+\pard\pardeftab720\qc
+
+\f0\fs28 \cf0 Opt-In}</string>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{102.4375, 494.125}, {55, 27}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Color</key>
+				<dict>
+					<key>w</key>
+					<string>0</string>
+				</dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>14</real>
+			</dict>
+			<key>ID</key>
+			<integer>50</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf210
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\deftab720
+\pard\pardeftab720\qc
+
+\f0\fs28 \cf0 Upload}</string>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{101.9375, 536.625}, {56, 27}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Color</key>
+				<dict>
+					<key>w</key>
+					<string>0</string>
+				</dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>14</real>
+			</dict>
+			<key>ID</key>
+			<integer>51</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf210
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\deftab720
+\pard\pardeftab720\qc
+
+\f0\fs28 \cf0 Publish}</string>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{79.875, 501.75}, {100.125, 54}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Color</key>
+				<dict>
+					<key>w</key>
+					<string>0</string>
+				</dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>12</real>
+			</dict>
+			<key>ID</key>
+			<integer>52</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>1</string>
+						<key>g</key>
+						<string>1</string>
+						<key>r</key>
+						<string>1</string>
+					</dict>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{52.875, 262.125}, {352, 375}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Color</key>
+				<dict>
+					<key>w</key>
+					<string>0</string>
+				</dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>12</real>
+			</dict>
+			<key>ID</key>
+			<integer>53</integer>
+			<key>ImageID</key>
+			<integer>3</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+		</dict>
+	</array>
+	<key>GridInfo</key>
+	<dict/>
+	<key>GuidesLocked</key>
+	<string>NO</string>
+	<key>GuidesVisible</key>
+	<string>YES</string>
+	<key>HPages</key>
+	<integer>1</integer>
+	<key>ImageCounter</key>
+	<integer>4</integer>
+	<key>Images</key>
+	<array>
+		<dict>
+			<key>Extension</key>
+			<string>png</string>
+			<key>ID</key>
+			<integer>3</integer>
+			<key>RawData</key>
+			<data>
+			iVBORw0KGgoAAAANSUhEUgAAAWAAAAF3CAYAAACbspFvAAAKQWlD
+			Q1BJQ0MgUHJvZmlsZQAASA2dlndUU9kWh8+9N73QEiIgJfQaegkg
+			0jtIFQRRiUmAUAKGhCZ2RAVGFBEpVmRUwAFHhyJjRRQLg4Ji1wny
+			EFDGwVFEReXdjGsJ7601896a/cdZ39nnt9fZZ+9917oAUPyCBMJ0
+			WAGANKFYFO7rwVwSE8vE9wIYEAEOWAHA4WZmBEf4RALU/L09mZmo
+			SMaz9u4ugGS72yy/UCZz1v9/kSI3QyQGAApF1TY8fiYX5QKUU7PF
+			GTL/BMr0lSkyhjEyFqEJoqwi48SvbPan5iu7yZiXJuShGlnOGbw0
+			noy7UN6aJeGjjAShXJgl4GejfAdlvVRJmgDl9yjT0/icTAAwFJlf
+			zOcmoWyJMkUUGe6J8gIACJTEObxyDov5OWieAHimZ+SKBIlJYqYR
+			15hp5ejIZvrxs1P5YjErlMNN4Yh4TM/0tAyOMBeAr2+WRQElWW2Z
+			aJHtrRzt7VnW5mj5v9nfHn5T/T3IevtV8Sbsz55BjJ5Z32zsrC+9
+			FgD2JFqbHbO+lVUAtG0GQOXhrE/vIADyBQC03pzzHoZsXpLE4gwn
+			C4vs7GxzAZ9rLivoN/ufgm/Kv4Y595nL7vtWO6YXP4EjSRUzZUXl
+			pqemS0TMzAwOl89k/fcQ/+PAOWnNycMsnJ/AF/GF6FVR6JQJhIlo
+			u4U8gViQLmQKhH/V4X8YNicHGX6daxRodV8AfYU5ULhJB8hvPQBD
+			IwMkbj96An3rWxAxCsi+vGitka9zjzJ6/uf6Hwtcim7hTEEiU+b2
+			DI9kciWiLBmj34RswQISkAd0oAo0gS4wAixgDRyAM3AD3iAAhIBI
+			EAOWAy5IAmlABLJBPtgACkEx2AF2g2pwANSBetAEToI2cAZcBFfA
+			DXALDIBHQAqGwUswAd6BaQiC8BAVokGqkBakD5lC1hAbWgh5Q0FQ
+			OBQDxUOJkBCSQPnQJqgYKoOqoUNQPfQjdBq6CF2D+qAH0CA0Bv0B
+			fYQRmALTYQ3YALaA2bA7HAhHwsvgRHgVnAcXwNvhSrgWPg63whfh
+			G/AALIVfwpMIQMgIA9FGWAgb8URCkFgkAREha5EipAKpRZqQDqQb
+			uY1IkXHkAwaHoWGYGBbGGeOHWYzhYlZh1mJKMNWYY5hWTBfmNmYQ
+			M4H5gqVi1bGmWCesP3YJNhGbjS3EVmCPYFuwl7ED2GHsOxwOx8AZ
+			4hxwfrgYXDJuNa4Etw/XjLuA68MN4SbxeLwq3hTvgg/Bc/BifCG+
+			Cn8cfx7fjx/GvyeQCVoEa4IPIZYgJGwkVBAaCOcI/YQRwjRRgahP
+			dCKGEHnEXGIpsY7YQbxJHCZOkxRJhiQXUiQpmbSBVElqIl0mPSa9
+			IZPJOmRHchhZQF5PriSfIF8lD5I/UJQoJhRPShxFQtlOOUq5QHlA
+			eUOlUg2obtRYqpi6nVpPvUR9Sn0vR5Mzl/OX48mtk6uRa5Xrl3sl
+			T5TXl3eXXy6fJ18hf0r+pvy4AlHBQMFTgaOwVqFG4bTCPYVJRZqi
+			lWKIYppiiWKD4jXFUSW8koGStxJPqUDpsNIlpSEaQtOledK4tE20
+			Otpl2jAdRzek+9OT6cX0H+i99AllJWVb5SjlHOUa5bPKUgbCMGD4
+			M1IZpYyTjLuMj/M05rnP48/bNq9pXv+8KZX5Km4qfJUilWaVAZWP
+			qkxVb9UU1Z2qbapP1DBqJmphatlq+9Uuq43Pp893ns+dXzT/5PyH
+			6rC6iXq4+mr1w+o96pMamhq+GhkaVRqXNMY1GZpumsma5ZrnNMe0
+			aFoLtQRa5VrntV4wlZnuzFRmJbOLOaGtru2nLdE+pN2rPa1jqLNY
+			Z6NOs84TXZIuWzdBt1y3U3dCT0svWC9fr1HvoT5Rn62fpL9Hv1t/
+			ysDQINpgi0GbwaihiqG/YZ5ho+FjI6qRq9Eqo1qjO8Y4Y7ZxivE+
+			41smsImdSZJJjclNU9jU3lRgus+0zwxr5mgmNKs1u8eisNxZWaxG
+			1qA5wzzIfKN5m/krCz2LWIudFt0WXyztLFMt6ywfWSlZBVhttOqw
+			+sPaxJprXWN9x4Zq42Ozzqbd5rWtqS3fdr/tfTuaXbDdFrtOu8/2
+			DvYi+yb7MQc9h3iHvQ732HR2KLuEfdUR6+jhuM7xjOMHJ3snsdNJ
+			p9+dWc4pzg3OowsMF/AX1C0YctFx4bgccpEuZC6MX3hwodRV25Xj
+			Wuv6zE3Xjed2xG3E3dg92f24+ysPSw+RR4vHlKeT5xrPC16Il69X
+			kVevt5L3Yu9q76c+Oj6JPo0+E752vqt9L/hh/QL9dvrd89fw5/rX
+			+08EOASsCegKpARGBFYHPgsyCRIFdQTDwQHBu4IfL9JfJFzUFgJC
+			/EN2hTwJNQxdFfpzGC4sNKwm7Hm4VXh+eHcELWJFREPEu0iPyNLI
+			R4uNFksWd0bJR8VF1UdNRXtFl0VLl1gsWbPkRoxajCCmPRYfGxV7
+			JHZyqffS3UuH4+ziCuPuLjNclrPs2nK15anLz66QX8FZcSoeGx8d
+			3xD/iRPCqeVMrvRfuXflBNeTu4f7kufGK+eN8V34ZfyRBJeEsoTR
+			RJfEXYljSa5JFUnjAk9BteB1sl/ygeSplJCUoykzqdGpzWmEtPi0
+			00IlYYqwK10zPSe9L8M0ozBDuspp1e5VE6JA0ZFMKHNZZruYjv5M
+			9UiMJJslg1kLs2qy3mdHZZ/KUcwR5vTkmuRuyx3J88n7fjVmNXd1
+			Z752/ob8wTXuaw6thdauXNu5Tnddwbrh9b7rj20gbUjZ8MtGy41l
+			G99uit7UUaBRsL5gaLPv5sZCuUJR4b0tzlsObMVsFWzt3WazrWrb
+			lyJe0fViy+KK4k8l3JLr31l9V/ndzPaE7b2l9qX7d+B2CHfc3em6
+			81iZYlle2dCu4F2t5czyovK3u1fsvlZhW3FgD2mPZI+0MqiyvUqv
+			akfVp+qk6oEaj5rmvep7t+2d2sfb17/fbX/TAY0DxQc+HhQcvH/I
+			91BrrUFtxWHc4azDz+ui6rq/Z39ff0TtSPGRz0eFR6XHwo911TvU
+			1zeoN5Q2wo2SxrHjccdv/eD1Q3sTq+lQM6O5+AQ4ITnx4sf4H++e
+			DDzZeYp9qukn/Z/2ttBailqh1tzWibakNml7THvf6YDTnR3OHS0/
+			m/989Iz2mZqzymdLz5HOFZybOZ93fvJCxoXxi4kXhzpXdD66tOTS
+			na6wrt7LgZevXvG5cqnbvfv8VZerZ645XTt9nX297Yb9jdYeu56W
+			X+x+aem172296XCz/ZbjrY6+BX3n+l37L972un3ljv+dGwOLBvru
+			Lr57/17cPel93v3RB6kPXj/Mejj9aP1j7OOiJwpPKp6qP6391fjX
+			Zqm99Oyg12DPs4hnj4a4Qy//lfmvT8MFz6nPK0a0RupHrUfPjPmM
+			3Xqx9MXwy4yX0+OFvyn+tveV0auffnf7vWdiycTwa9HrmT9K3qi+
+			OfrW9m3nZOjk03dp76anit6rvj/2gf2h+2P0x5Hp7E/4T5WfjT93
+			fAn88ngmbWbm3/eE8/syOll+AAAACXBIWXMAAAsTAAALEwEAmpwY
+			AAAB1WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0
+			YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1Q
+			IENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0
+			dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1u
+			cyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0i
+			IgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRv
+			YmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOkNvbXBy
+			ZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0
+			aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb24+MjwvdGlmZjpQ
+			aG90b21ldHJpY0ludGVycHJldGF0aW9uPgogICAgICAgICA8dGlm
+			ZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAg
+			ICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6
+			eG1wbWV0YT4KsOMy3QAAQABJREFUeAHsXQdgHMXVnrtTl4tsyUUu
+			uOJu03sgEEMICQQIvUOAUAM4CWn0UPKHhCSEEghJILRgejMYAphm
+			gysG995tWZJl9X53//fN3juvzidZklVOd+/Zo5mdtrPfzn777k1Z
+			Y1QUAUVAEVAEFAFFQBFQBBQBRUARUAQUAUVAEVAEFAFFQBFQBBQB
+			RUARUAQUAUVAEVAEFAFFQBFQBBQBRUARUAQUAUVAEVAEFAFFQBFQ
+			BBQBRUARUAQUAUVAEVAEFAFFQBFQBBQBRUARUAQUAUVAEVAEFAFF
+			QBFQBBQBRUARUAQUAUVAEVAEFAFFQBFQBBQBRUARUAQUAUVAEVAE
+			FAFFQBFQBBQBRUARUAQUAUVAEVAEFAFFQBFQBBQBRUARUAQUAUVA
+			EVAEFAFFQBFQBBQBRUARUAQUAUVAEVAEFAFFQBFQBBQBRUARUAQU
+			AUVAEVAEFAFFQBFQBBQBRUARUAQUAUVAEVAEFAFFQBFQBBQBRUAR
+			UAQUAUVAEVAEFAFFQBFQBBQBRUARUAQUAUVAEVAEFAFFQBFQBBQB
+			RUARUAQUAUVAEVAEFAFFQBFQBBQBRUARUAQUAUVAEVAEFAFFQBFQ
+			BBQBRUARUAQUAUVAEVAEFAFFQBFQBBQBRUARUAQUAUVAEVAEFAFF
+			QBFQBBQBRUARUAQUAUVAEVAEFAFFQBFQBBQBRUARUAQUAUVAEVAE
+			FAFFQBFQBBQBRUARUAQUAUVAEVAEFAFFQBFQBBQBRUARUAQUAUVA
+			EVAEFAFFQBFQBBQBRUARUAQUAUVAEVAEFAFFQBFQBBQBRUARUAQU
+			gXZCIM3n8wXhKuHK6bxe73z45+7N+VDHZpSfuDd1aFlFQBFQBOId
+			AUvAuMgRoQtNTkpKmgwC3QoSPm8vLn4flE3Zi/JaVBFQBBSBuEcg
+			koDtBYOAb4D7Wq4eZPwTHC8NuRskHmR9DNLehSuAexHxWUxD+HV4
+			ltQRPgnlFsD/HO4SuKeZBzIJ4SeR9iu4tXDzk5OT93OS9K8ioAgo
+			AvGPQFQCBhEeDHKsxeXD850KclwHsj0RxxMRXoa4CwgNwl9TY0Zw
+			GOJexvEtoXgxQaQjvhjuLOQ7HunfwK1iHhwfgfg6+A/icBTCr8K9
+			xTQVRUARUAQSAYGoBIwLHw4yrIefCv99kOYvBAyEr0bcGzhORngb
+			3LUMw/WAGwRHYrYEjHzfhxONl2x+BdJWM0+IgAsR9IWOj0TaSoZV
+			FAFFILER8Cby5YMcBweDwRXAoAb+SI/HcwvIM58O4d8jvi9cHcI/
+			gT8F8UVw1GRJxGFB+gkobzVeRvr9/i/DiQggbTujGVdfX18OL51h
+			FUVAEUhsBBKagEGMZ4I8F4S6QAn860GefUMuF/4PEJcCf1YgENgX
+			/lE4prnh3lAZ8fyohwNyVkDsuRIO+YGIYz1UBBQBRcAkGgFT88yA
+			6wMzAM0NF4JU72E/wPFH8M6BS6MDyXLg7OcI94D/FfyecN/ATYXr
+			DRcWEPlMuO8iYjCcD+Hrw4kaUAQUAUWgEQSSGomPy2iQ6qLQhVXA
+			/xha65nwaYKgaeBepL8Fsl2HeL6YvobWexX8UhxPQ9pWhGeDXHOQ
+			5yaEwwISfw1x4+E+RiQxfRduJJyKIqAIKAKKQDMR8CAfiTMaeQ5F
+			/Fi4aEJb8Sg4DrR5YYI4HoT9UrSMGqcIKAKKgCLQtgjkQvvdANK9
+			Au40hBfCP6ttT6G1KQKKQLwhQI1PpQ0Q4JximCI4lzgT1U2HSeP9
+			NqhWq1AEFAFFQBFQBBQBRUARUAQUAUVAEVAEFAFFQBFQBBQBRUAR
+			UAQUAUVAEVAEFAFFQBFQBBQBRUARUAQUAUVAEVAEFAFFQBFQBKIh
+			oPOAo6HixLUGm2Dj1WmKIqAIKAINEWgNyTSsoesfRWLA48i4llyl
+			m4QlLH5L6tG8ioAiEOcI7A3RdHVo3Ncuu8KJz2tzh5t7rUK09CUs
+			W1G645pbn+ZTBBSBOEaAO3clokSSL8mWcXTuMLFpDhEL2QrJCumK
+			z3okLHkZp6IIKAIJjECiEjBvuZtwSbJ2JzP4QsDiC1mLz7KREo14
+			Sbj8CgbLMcz66CsBAwQVRUARcPauTTQchEjph4nX98el5fh2kKTt
+			PSYeT9B/8zhu4k7S5Xfn6Ms5GVZRBBSBBEcgUTVgEqE4knASyfe6
+			A/sZr89jvB6PwX+HLRlGBq+Xvsf4Qgks5MQhH+J8Xq/Nx2SGf/3B
+			Ghbjt+NIvqL1iqaMKBVFQBFIdAQSlYAtf+Lm0+xA53xkE7FkTXEI
+			WiHBkjk9waChjmyplkzLnPQg+FKG8YCkKTbJhkyK49m/Qr62KsTQ
+			V1EEFIEERoBElEgSYk17ybx2ki9fQg4BhwwDoFmHcENMKoxJtuU/
+			y5wgXMuhJF7JZ+McMkYiJRWOdQvRC/GHaJtZVBQBRSBREUg0Apb7
+			LEQsJEyCdCzCksPyq6VaMqpDuijFkC0cVnMdLiUJ85+jEjtxOCD5
+			kuBZP88VTkBYRRFQBBIcgUQmYF67OIeAXUNjll9DJGs13BAXWw0Y
+			4TA/g1JpfrDOoWlUG8q8i3zdBCwsneBdTy9fEVAEEpmAefdJhsTA
+			IWCJge8QrEOk/Gu52GrCNDkwo8SxEkTYOIRCaU6OBqYHpiQq3iE4
+			1FMEFAE3AolICEKR9MU5OOAvNVmKkxDKGopzJqk1jAtnRjGmSHkb
+			v0vDZpJgHaoglEM9RUARSFgEhBQSFQBeP12YFMWOazlXYsUU4VAs
+			SJYlmEiHA0ZIXsTIAT7U6TY97EqwefSPIqAIJDoCiUzAbsp0cAjb
+			gCMJ1eFYZwCOZgYUtSxMJobYY1Ixj0OkbBPCtMxIOZ/4Tg79qwgo
+			AgmLQCITsNz0MCF6XGgwUswJDJNjqR07JEuCRtjyLRJsgFG2lNRL
+			nxGuWt1JGlYEFIFERyARyYGkSIn0TRAasGixDrc6WYSIRQN2lF/m
+			cCQcCgekaslh/cjIyOMGmfVAEVAE4h+BRCTgxu8q0HBswMgSJlMn
+			Ow899g98Uif+NFB4bZyTV/8qAoqAItAcBJSA3Si5bMAOuYb0YZIt
+			88GnNhyyOIRMEIxGKshZNOXd2Nt9Dg0rAoqAIhBCQAk4sitYpg1F
+			CvHiUMwOpGLyLcWx+YaI12HocJyTQ/8qAoqAItA4AolEwKRIoVe5
+			bjl2fMQ62q0zwCYaLX2r5IZyW+sE4mw6DkQDZrJTRqpt9Hw8fzhT
+			47dHUxQBRSCeEYj33dDcJCekJ3NzeSzhcD4bIAtz+8ldqq4lZm5T
+			SaOE7IYWTm/QQ1iDpWjG8kDOK+fjOZkhnCnKMaJUFAFFIN4RICnE
+			o5D4LJfC5zW6HQmQLx46NynaLdMtK4aIVzRgsm+Yi1GtzUOSDvGo
+			oyHL6Rgv4TDByznpu520iwUYDhdEWEURUATiHAE+9PEmQmJuUhPS
+			k53JhBDtMVas0bcUyELibByPreaLAM0O+GdPYBkZITdZ24RwFM0R
+			3lDdrN/t3O1xk3DkqaUJ6isCikAcIhCPBCy3iWTmNbd+OMT6juZJ
+			EuQWkbJNpDvsfDQIiQ7NOsSLQ6vnOtxqh+DssbVJMGS1YydVNGbx
+			UVSI1n0+aQN9n/nZq0Phi/arBAwwVBSBREGAJBBP4jAhuBMXZZ2v
+			e79vzP1LMpq6yPDsM/friJYEEiw1XGq+8G0QcbQB77L/OqfkcSgU
+			OjWK3ff1Z6yGLNy4BCvx5c6cUDqbwiKsyrYgFK+eIqAIxCEC8UbA
+			cotIYHRe/9alB/oGjp/17cGZ9UN7pvZ1vt0GErXrjoP2+20sZMmT
+			9BdiS5KtmBcs2YZokTRL86/dGQ0+q6HGa9kSZRwaDpr7Txhpi7Me
+			+405VMdvyDFM901eef7j8zcn+1fP+RaT4Hh2e1b4FFulE9S/ioAi
+			EI8INK2cdb0rFgIjodH5zOyXKnzjvjNnfbD7OT2TPeW905MzLKGG
+			iJGXaAkSpMjC/Cgn/Qbka0kTUSTcUDnWwU/AMbctj7PZsJ094eRz
+			8kJfljKsF7kWbi3Z8cRXm5PN+gUXBv9+6XIbvYtwSbziQknqKQKK
+			QDwiEK8ETA7ltVkSDsx+Md879IAvNiT1O6t7sq8iOwMkjEQSJsnR
+			EjKPQ+TrkKtNddKZZjOSrB1CteURZ/+RdHky5gn5HpvPObapobR5
+			W4qLnvp6m9cs+fBS/xNXfYXsQrb0xRoicaxORRFQBOIUgXgmYMuJ
+			uG+8xqTggrd2eHsP+XJDtyE/yvSZ6j7dUtJJqpYi4TtasEOiYUIO
+			EavNh4yWbJ0C9gvITnlnVgS/iCzp1rzB/Kw/5LP+2ZuKdj63KM9r
+			vnj1Cv8Lv16EdpFwYQK2jmFxSsAAQ0URiHcEEoGAHVMESXjJBzu9
+			6T2+2NhrzGlpXm9N324paeRTIV8PDLu00wppOgQb0n7ZE5DZF9Js
+			ORvY5mO01y7NsOnUfFFFqE5SslN+5oai4heXbDfmo39d7X/7D8sQ
+			XQ9XBycETF+IV3xEqSgCikC8IhCPBMx7ZXk15DPM6yQRJwVXziyB
+			hjprU86EU1K9ntp+3VLTmJtk6pCvQ8BiTiAJhwkaGR1ydkgV9Tma
+			MH3mC2nMTn6SMkgacZ+vKyp5dVlBwEz/23XeT/+1MhAIkHjpSMJ0
+			kSSMKEvG9FUUAUUgThGINwLmbSLhipB0eSxaMMO+pE0Ly4N15TM3
+			9T3o5CSPqcvtnpJKzZWUR8+GScggVamMBEuhBkzhkdWQQ/E2jFge
+			hu3EOPhk3Y7SN1cU+M3bv/+p94sX1tbV1dWiqJCv+ELA1HzFDIGg
+			iiKgCMQzAvFKwJYfQzeOjEkncV5ooN6kLUvLgyUFn28ZeOj3QJ7+
+			gd1TU8mtjvbqEK9Dqk5BMqsX9Og2UdDUwJwkXWsDRoAnYR0MzFhT
+			WPbOqvxa89IdN3jmv7Ee9dXi3CRgIWE3AQv50qdTUQQUgThHIF4J
+			mLeNXEgR303CHkvC+SvLgzu3fbZ10OHfA+MFBnVPSxWCDWu/JF4S
+			KzmVfqhKhm3lYOFwXp4M8STmD0G+760urDZTb7nJs2j6RpIvtN8a
+			ZBECFhKm9kszhFvzVQIGICqKQLwjEI8EzHtGdiSJ0ReHoBUeU0jC
+			JqlgTWVw+9pPtw456rt1KDGkV3qKLUCyDRFumGxRyG1eEGK2lYF1
+			+Y8E/t6qgvKP1hRWmuduvtGz7KPNKF8D8q1GPiFg+pH2XxIwRXzn
+			SP8qAopA3CIQrwTMG0YejaZJCjFb35Jw0YbK4OZVn+QNO/r4Gr/x
+			DM1KT2EFFCFfEitrJOnSx38rQro8Zto7KwvLP1ubX2aennKjZ9Xn
+			W1G+OkS+JGBqvfRpehDzg2i/bI+SL0BQUQQSBYF4JmDeQ/Kim4Qb
+			kK+kWRIu3lQV3LRoRt6wYydX1XuShvVOS7EaLish6UJE43X8XaYH
+			pjPHtJWFFV9syC82T15/k2fdnLwI8qXWS0fiJRG7TQ9KvgBERRFI
+			NATinYB5P90kLGHxw/fbknDJtprg+gUfbx/5nePKa03K8N5pyUKu
+			1jaMqki+rJEVhIK2jrdW7qiYszF/h/nXVTd5NizMjyBf0X6VfMOI
+			a0ARUAQSgYB5l92EK2Hxw73AknBZfo1ZNeej/FGTv11a50ndNzs9
+			OUy60FNJuqIBW3JGxBvLCyoXbtpeEHzs8hs9W5bsUPINQ6oBRUAR
+			aAKBRCFgQuAmXAmLH4aIJOyrKKw1K2Z+tGP0CUcX1XjS983JAAmz
+			goYaMGt8bVlB1eJNBdsCj15yk2f7yiKQrwy4UetVzTeMrAYUAUUg
+			EoFEImBeu5tw3eEGuICEPb6qnXXBpZ9+VDTq+CMLqk3m6JxMqwmL
+			BkxVGKvbqpZtyt8UePSiKZ6CtcWNkG+06WZq822AuB4oAomJQKIR
+			MO+ym3jdYXcPCFpNuLqkPrj4ww93jj/p8LwqT/cx0IR9IN4A6POV
+			ZQXVq7YWrA8+dO4UT9HGUhf5cqBNNF8lXzeqGlYEFIEGCCQiAROA
+			xoiXadRObbol4dryuuDCdz4omXDyYVurTM+xfTKSXl5WWL0uL39l
+			4K9nTDHF28pc5CvTzOhHzvXlFDPVfAGCiiKgCDgIJCoB8+r3RMIk
+			SwMSDvrqquqDC6a9Vzrx5INL6z2elZsL1gX+/KMbPeWFFSHylSlm
+			4pOA3QstlHwJpooioAg0QIAklMgi1y/7RfCFJB/N5Ic0uSCDzoaT
+			e+amBqa8/Afvn8/4janawaXFQrIkXLeTeM71VfIFCCqKgCKwOwJC
+			QLunJE6MYOAmYRIxiddNxgwznvkoJFZZTCEr22R1G32mK/kCBBVF
+			QBGIjkC8fpQz+tVGjxWbL8nSLdRohURJtCRfIWCWEXuuaLtuX8pJ
+			HmRXUQQUAUWgIQJKwA4ejZGwEC0JmJpvNAJmGh1JlySs5AsQVBQB
+			RWDPCMjP7z3nTIwcggfJlmG3WULCgoSQsxCukDCPKeI7R/pXEVAE
+			FIEIBIRwIqIT+lAwERIWIqYvTgAS8uVxZFjyqK8IKAKKQFQEhGyi
+			JiZwpBsXEjFFfIaZLhowj0XbdccxXkURUAQUgUYRcBNNo5kSOMGN
+			D8PuY5KtiBKvIKG+IqAINBsBN6E0u1CCZoyGlZuEExQWvWxFQBFQ
+			BBQBRUARUAQUgdhAwOfzXQTnhyuHq4ArhHsHrdu3PVqYnJx8oNfr
+			XdUedWudioAiEJ8IuAeW4u4Kg8Hg136/vxtcJtwIHH8MEp6DC82J
+			u4vVC1IEFIEuh0BcE3DE3SjBxjr3I24JNNWrQ2mZIOR/4ngT/BnQ
+			Yg9lPMLPwJ0ZysPjM+EeDR1PQviTUJmnENdD8rl8JHvvgdsKtwXu
+			VqRZGzLK8iVwIeIWwq1E+AxXOQ0qAopAAiGQSARsbyu04JnYwWwC
+			D0B+j8PLBjF/F/7j8KfD7408NCWcDydyEeIW46AHynyI8BvIezSO
+			a3H8tGQSH8R6Lc5xIvIcBvcdxF+AfJeE0o+Afyniz0SeWxD+Jxz3
+			nVBRBBQBRSA+EADhXQQiXBB5NYj7FdJeRXwv+Fw6PFTy4PgjuAtx
+			PBp+GfxUuAyES+H3gX8F3GyERXJwzD0jMt02YJxjIeIvk0w4vh7H
+			7/EYfk1SUtJRkobjt3B8vByrrwgoAomDQMLtBQGtcx9osF+DMIdD
+			C/WCAGkTFslE2jQcrIC/GsR4HPwMHM+CK0B4JMpPRJl8KQCfvyKy
+			Xcf8jP1Q2JzDRI3jtSjbR/LU19e7B+vWox0k5A8kXX1FQBFIDAQS
+			jYB9IMLTQIjXYC/fEhBpPYhyGG51Reh294LPTdUpU5H3ZPi08f6X
+			EZASuPdR5jR75PwZAG8bnHtgbwnIexCIdimzoJ7ROOcXDIeEdQqJ
+			T0RY6pd09RUBRUAR6LoIgFxpgliIK6AGSzccce/AzUCYLx4f0tfh
+			+EqEKYNxvBWa8QHOoRmO4w2MwzEJ0yDtcOQnCe/DY4TPR/pKhiNM
+			EL9B2jOIToPzIPwhnCVt+DUo81uWgdDUQfKfZI/0jyKgCCgC8YAA
+			iI3zgIPiQHqbEP4Xrq2vXB9NDIgrRNpS+GXwOSgWFsTNgXslHIEA
+			8tyDOJLoUrgNqIODcQ0IGIeDQumb4S9H/rcRl858LAv3LuIXwS+G
+			fxvjVRQBRUARSEQEUnHR1EDdJoQ94ZADjXc/ZGpq9gL3Dh4DRxNF
+			WEjAOOC5GJ8ZTtCAIqAIKAKKQPsi4CLg9j2R1q4IKAIxjwC1NJUO
+			RACDcR4Myn2KU9Z14Gn1VIqAIqAIKAKKgCKgCCgCioAioAgoAoqA
+			IqAIKAKKgCKQmAh4EvOyW3TVLcVIN2lvEbyaWRFIXARaSi7xjJRg
+			Eem39pqFiCP91tan5RQBRSDOEEi0pcjRbp+bcBl2O+aX9Ghlo8W5
+			CZdhcZJX0uVYfUVAEUhQBBKdgN1kyzA31qGLjGf32BMRC7EK4Yov
+			n6uXY9YleRlWUQQUgQRFIJEJ2E2yQrz0OTdajt152EUaI2EhVCFZ
+			+kK8/lA5OWY9FCnjHOlfRUARSDgEEpmAebNJqEK2Pt/9S2RXtLbp
+			CFhz4b95XBYq477DIiRiJV9BQ31FIIERSFQCdmu2ovVaLK4/uB/3
+			8zVeOPy3DI1t02wYf514dhikWeb2OnHM70XYVhwq/+sP1vAwOaJ/
+			kXwZT1EidnDQv4pAQiKQqATMm00SFO2XOFiiJPlaEg1lgAeaDFpS
+			pm8ZExlIxpaV4bOMkw9/QcIUiULQvWEPi7sds6ooAopAgiJAAkpE
+			IUvSifZLu699GWGfBosHqZahMLkyNsSqpGiby+ZFPvqozZZAmBVL
+			PQiSgFk3zyH2ZTk/olQUAUUgURFIVALm/RYSFBLe/dcAWdaSKwg3
+			HHaI1hZ2qblk5AZkbau33Yr1CgHzXHJem6h/FAFFIHERSGQC5l0X
+			MhQSbtATLL/yD7VaesxtlV2HkMOcHCJil9brZHRqo2lDNV8HC/2r
+			CCgCLgQSlYCFeOkTg4YEzFiIQ7Ah+y+OHesw4x1CZh6Hn5mT4VDB
+			kGcjG5oeeB6migtlUU8RUAQSEYFEJWDeayFB+kLClmRFk3UyUNt1
+			7MGOHUKKwrd2CR5DkFnKie8khLVfJd8QIOopAoqAg0AiE7D0ATcR
+			O9ptiJstvzIVYj1quDbAgTdG8sBGWHVZNOBd8yjst+KUeAmgiiKg
+			COyGQKITcIg9Q4zbAB4wrKRKPFnXRoemnlkWJhNDkLeh5huKd2ph
+			TVKb+LaY/lEEFIHERSARCTiSAOXY+qLFskswoiGpOlkdgwSZ2BmM
+			s2Us34aIuWF/YiGn4C5fcki8HKuvCCgCCYRAIhJwk7eXhOsQLMgV
+			OUmudI7JwSlKE4Oj/Ia1XJtANnWXd3LrX0VAEVAEoiOgBByBiyVc
+			UVhD/BpSbsmuTm4wrWP+JTm7tGQysJMQUaseKgKKgCKwOwJKwBGY
+			7DI5hKaakXQDCDMfyTVEuMLF9KkRh80QiLB5rf4cUbkeKgKKgCLg
+			QkAJ2AVGOOgwqHMYIl0eWNNEmHAleRcpOzH46y4fjtSAIqAIKAIN
+			EUhUAiZFRnMWHUe7dey8ohHT+EBNV4THNElYm6+jBodsx2KpCOeN
+			dh6Jk+rUVwQUgQREYPf9D+IPBGFCt+/eGIcvITqbbs0JxICkyu0l
+			oQE7dmFHA2Y6NWHZDU3SWETEOZGlaEbxkE7O4/aZSRyCNkxfRRFQ
+			BBIAgXgmYIcHdxGgmwiFgCN9S64sYm266ABWw7UDa2RQNxkjV1jz
+			RTxo1BPaipKMSqIOCQk38jw8ZjaKbNAux4xzh3msoggoAnGIQLwS
+			sLAfyY8iWifjGeZ103GjHAmTFMParrA146gNW0KGb5kRiaIBW6oN
+			EbRNjNgPGAQeSb48H0lXhKeSzxVJmL6SsCCkviIQpwgIQcXj5ZHE
+			6Lzmu7/gnrwkQiFdEq/bJSUnJzPNarzWB/+RAUUTZhwOHA/VWnak
+			Bsx8YU0YxyRrxto0m90Xqtt9vl3Ef9gFqcjlfkE4J7FF9Y8ioAjE
+			MwKWdOLsAoXA6NN5fcdfVm6Ov6zJy3SrpOGMDsuiBi951aFdaLhi
+			A25AzkwPab9OeacZwfu+/ozVWPU6XHHDgH/2c5mhGDaDBVlE/FCS
+			eoqAIhBvCMQjAfMekbzEeY2//s1u6UnjTxvZa0QSyNT5dhsG0jxU
+			PIOGcVRuWcAtVuHlH2q1lniRh0SLOBJyeH/gEPFS691FykFz/wkj
+			bb0+5G/wvTjkr8fc4vs+Wbs2v7RyCc7pNGQX8bIpJGEVRUARiGME
+			4tUEQQKjsz/t/Y+cf1l5RdWi11fu3EDis+yJZGqylkzlBosGy5IQ
+			MqCbVGVgzSlns1iCFXNDmHxD5UM17GJ2y+jG1NYHzD0zVm3ILy79
+			xv+X069ETXwR2rbCl7Y7J9C/ioAiELcINPXLuKtetBCYEJrPlBb4
+			gt+8+l79AWfvv7qsrsfo7IwePpCtkxE+iNE6MC6/bkzi5LH9MjJy
+			MYZMK9qvkz/ElFI2RN5Mc7KzTmrWqMepwf6t9QfNvTNWbynaWTzf
+			/+cTp5gdeX7kp+nB8n2Ez6pUFAFFIE4RiFcNmLeLhCbiMYWFxn/f
+			MT+vLCn98uXlhdtq/QFyakg7DXEf0LDaraVKx8wQ4k7HYwHLr8jF
+			IrsqsGcLk6+UlyawGPJWQ/u+95NVeTt3FMzx//64X5viYrYv3Aoe
+			QNztdmL0ryKgCMQlAvGsAQux8SXD6/SZ+vqk4JfPfeo/4IyRq8pN
+			n1E5GZnJ1IRBjtaB+izH2mOHNG08CofTwZdWM2YecGU4v0sDdupz
+			tGmGqQFXW813RUFpft7n3vtP/F2gtrYe1YqjFhxNE0a0iiKgCMQr
+			AvFKwLxfbgIWEsaAnN8X/OypWf4DThu0stLXf3TvzIwUHwmYBUCW
+			YprAsWOO2EWkTGc+1izEyxP5OIjHaJKtq7w1QYCkq0C+v/9k9Y7y
+			rZtmeP98yh/r6upIvHVwQsD0hYDFHIEoFUVAEYhnBOKRgOV+hajS
+			ciMJeBcJgzOT5kydUzfxe32XVyUPGpOTkZ5E4gQRW7EEi+zwScJC
+			xFazZUWWhW1yA9KVeIegaf81pqIuYP7wyeqdFVvW/M/z4Ol/Qx11
+			gUCA5FsLR1+IOJKA1RQBcFQUgXhGIF4JmEzamLNkDBL0Js19aX79
+			2O/0XFqZPGxs325pKT5MUQNrOpou/zparSVeHIQH4UjWPMYfBHfl
+			s/G7ypfV+c2fPltdUrVx2TTPw+c+hvy10H5JvOKUfOP56dJrUwT2
+			gEA8E7BcOnmUQl8cSdjj82GG7pyXF9aPPiZtSU3mSMyOSHXMEQ7B
+			OmSMjNBFrWmB5Cy1oSoSMMWH2Q5h0wOOWa4UJt4/z1xfWr3um9c9
+			j138b+StQVItiN/6DMMJAdMEQdODmh8AgooikCgIxCsBR94/IV6J
+			t8cgQ0MSNnNfXeQfcYRvSW330aOzM1PTknfZdEmy5FkhWxw5WnIo
+			jmRL8qVI3pJav/nzF+vLalYveNHzjx8/i6QaEjC032qERfulL7Zf
+			MT/Q7CAOQRVFQBGIZwQShYAj72HYvhoiYWPmvb4kMPxQ/+K6HuNH
+			ZWekpCftgoYkSxYmLZNqLRkzKlSrTQ6R8M4av/nrFxvL61bNec7z
+			zytfQJZq5K8OkS+1X3Fu7TeSgEM1q6cIKALxjMAulonnq2x4bUK+
+			YT9MwvPfWB4ccmDN4vqsiaN6gYRTHJuwNUWE2NZSMMJOnKMNWzsw
+			WLiout48NHtjRf2yWU95nrzmZZzWTb6i/ZKASb50JF4lX4Cgoggk
+			IgKJSMC8z2HylZseJuGv3lrhHzypfFF97wP2zc5IxvSIsMZLDdgS
+			L3Vf5z8VY5teCPJ95MtNlYElnzzheeaG11FvJPmK7VfJV0BXXxFI
+			cAQSlYB524WEw11ASNizcNrqwKDxRYv92QeN7J2e3C3Z5xCvlHBp
+			wDRHkHz/PmdjVf3ijx7xPPezt1Ehbb5idqDmq+QbRlkDioAiIAgk
+			MgETA6FUwcMICXu/mb7G339UwRLT59ARvTOSu6X4rKYL7rVkLBrw
+			9oo6848FW6v8C9//q/eFX04n8cLJgJuSbxhZDSgCikAkAolOwMSD
+			JNyAiEMk7PEuen+dP2f41sXB3COG9UpP6g6bsOz5S1NEHsj3ya+2
+			VfvnT/uT96XffEDyRV3RyLepGQ9sg4oioAgkIAJKwLtueiQJBzFF
+			zXiXfLDR33ufDYs9A741JCstqWdqktWAt5TVmKe/zquun/fmvd5X
+			bptBrRdVidmBYTE7KPnuwlhDioAi4EJACdgBQ8i3gTYc0oSD3qUf
+			bfL3HLhmSdLgY/bpmZZUinm+zy/aDvJ97U7vq3d+5iJfIV7x3VPN
+			3Ast5HyuW6FBRUARSDQElIB33XE3KYaJmCQMF0xa+ekmf1a/ZUuS
+			9vnOovyKev/c137te/13M0P23hrkEdIVzVfJdxe2GlIEFIEoCHBM
+			KdGFGNixNfhcosyvU9Dxw5n8mKc4fFszOTlwxl0HI87rfeWOefAD
+			WGAh08rcK9yUfAGOiiKgCDSNgBKwg08kCfOXgXzFmGRMEhZitpv5
+			4FhMCrKlpNh6hZBlgYXs7+DWsFFcRRFQBBIdAZKKyq5ZECRLt5A0
+			hWiJFYnZbuQDX9JItELC4iv5AhQVRUARaBoBJeBd+IiG2hgJk1wb
+			I2CWIemKE9JmnVIvgiqKgCKgCOxCQE0Qu7CQkJgj6Iu5QYhXtF/J
+			K1qwEHAk8Sr5ClLqKwKKwG4IqAa8GyQNNFYSKoVEKoTsfmkJAdOP
+			DPNYRRFQBBSBRhFwk0mjmRI0QbCh73aEg8dCsEK+4jNd0hhWUQQU
+			AUUgKgJCMlETNdIiIBhF+kwUoo30FTpFQBFQBPaIgJDKHjO2IkO0
+			uqPFtaJqLdJGCMiLg9W5w21UvVajCCgCTSHQ1oQYWR8HrSjiR4Yj
+			89vM+qfdECDJCtG6w25bN08uedqtIVqxIqAIOLbMtsDBTaQyc4D1
+			SpjpdELE4jOPSschIMRKwhUCpi/H4rvTOq51eiZFIMEQcBNnay9d
+			6qDP6VpCtL61a9d+p2/fvmekp6cf6fV6c5HWrbUn0XJth0AwGKzA
+			3hXbqqurZ23btu2VfffddwZqJ/nSySISNzG33cm1JkVAEWgzBEi2
+			QrxcupsGlzFz5sz9a2trP8eDrtIFEKipqZk5bdo07nHRAy4TLhWO
+			91PmPyOooggoAm2NAMmztSLkKwTMh9W3ZMmSo8eOHfs8dgnLam3F
+			Wq7jEcB7onjevHkXH3rooZ/j7LKkmr5owtSOVRQBRaANEWitLdZN
+			3JZ40aakN998E9yr5NuG96fDquIL86CDDnrmqaeeGoeTcvMhasBc
+			qON+0eJQRRFQBNoKATeRtqROeShJvnxI+bCmVFVWvZmWnnZESyrS
+			vLGFQGVl5ezMzMwz0SrZ35i7vIldmL6KIqAItBECrdGAhXxZNkzA
+			n3/++WQl3za6K51YTUZGxmFvv/32ZDRB7MB8wfI+8363pr+gmIoi
+			oAhEQ2BvHig3AaeOGjXq9Ggn0Liuh8B+++33Q7Q6HU5ImPdaXrxd
+			74K0xYpAjCJA7aY1Ig8kNSP7xYgePXoc2pqKtEzsIdC7d2/OiOCM
+			FhmMc5sgSMQcmFNRBBSBvUSgpRqwaEH0Sb60/dKl4ms9/eCrxAEC
+			qampfXA/RQOWr4GIGYL3XkURUATaAIGWEjBPyQeQ5cQ2aAkYCy0y
+			mKjS9RHw+XzpmJZGDdg9G4L3nCSsBNz1b7FeQYwg0FoTBB9COj6Q
+			SdCW+KA2S2rq/WZZfqkpC9aaMX16mJyUdH2im4Vch2dK433FN0fl
+			Rct7ze/dqSgCikAbIdAaAqYmJI4PZTK0pWYTcGF5jblj2mKz3VNh
+			Dp/Y3Uwe0tcc2ivX9EvVVcptdE/bpJrQPY00P/C+y8tX7cBtgrRW
+			ksgItIaAiZdov1YDxnGz6+FyqnK/35RUBM2clcWmylSa1ZX55pCs
+			AWZC9/4my5oeeQqVTkZAyJf3lk7It5ObpadXBOIHgWYTZ8Qliwbs
+			xc9UL7QlEnGzxAPq9qV5jLfWYyrKfWbVBvyq9Raa+qRys746z+zX
+			faAZkdHPZPg4A0qlExHgPfXh/vpghpD7LdpvJzZLT60IxA8CLSVg
+			9wPIsDyYzSZgAwZOSvGZ5HQU9QRNaWWS2bTdY7qlVhpvzwozt6LU
+			bKvLM6MyBppBaf2hejW/6li6LXgpGWxyY2rr6kxyUpJJSUkxGNyK
+			pSbuqS3sG2yw3GO59/RVFAFFoA0QaCkBu0/pfiCb/VBaDRjKbXKA
+			BIz/Hq8pqfaadQUek5lcZbqlFJtt9RWmuqbE5NdtM0PTBptsX7bx
+			eVvX1Pr6erNz506zs7jU1NZW45Rek9ktw+T2728w3cp9PW0arqio
+			MMtXrjLr1q0zQwbvYyZOHG+wLedenQNbSJqqqmrj9Xr2uq5mNITE
+			K/dYsjf7PksB9RUBRaBxBFrHarvsgXwgRUNq/CyuFPCtScnwQbPF
+			7DVowB6QiReaYWFNslmSn2QyUkvNvlnVWAFQa/I9xabGn2d6B/uY
+			gUnDTXdvb6hkzdMiqYEW7thhFn6z2HhgeB4yZKDJ6pllioqKzPz5
+			Xxkkm4MPOgDx++Al0Pa8giW9JhOuvKzCkmYStOC9lcqqKrNo0SLU
+			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
+			9QAAAABJRU5ErkJggg==
+			</data>
+		</dict>
+	</array>
+	<key>KeepToScale</key>
+	<false/>
+	<key>Layers</key>
+	<array>
+		<dict>
+			<key>Lock</key>
+			<string>NO</string>
+			<key>Name</key>
+			<string>Layer 1</string>
+			<key>Print</key>
+			<string>YES</string>
+			<key>View</key>
+			<string>YES</string>
+		</dict>
+	</array>
+	<key>LayoutInfo</key>
+	<dict>
+		<key>Animate</key>
+		<string>NO</string>
+		<key>circoMinDist</key>
+		<real>18</real>
+		<key>circoSeparation</key>
+		<real>0.0</real>
+		<key>layoutEngine</key>
+		<string>dot</string>
+		<key>neatoLineLength</key>
+		<real>0.20000000298023224</real>
+		<key>neatoSeparation</key>
+		<real>0.0</real>
+		<key>twopiSeparation</key>
+		<real>0.0</real>
+	</dict>
+	<key>LinksVisible</key>
+	<string>NO</string>
+	<key>MagnetsVisible</key>
+	<string>NO</string>
+	<key>MasterSheets</key>
+	<array/>
+	<key>ModificationDate</key>
+	<string>2014-11-01 21:30:52 +0000</string>
+	<key>Modifier</key>
+	<string>Dirk Dougherty</string>
+	<key>NotesVisible</key>
+	<string>NO</string>
+	<key>Orientation</key>
+	<integer>2</integer>
+	<key>OriginVisible</key>
+	<string>NO</string>
+	<key>PageBreaks</key>
+	<string>YES</string>
+	<key>PrintInfo</key>
+	<dict>
+		<key>NSBottomMargin</key>
+		<array>
+			<string>float</string>
+			<string>40</string>
+		</array>
+		<key>NSLeftMargin</key>
+		<array>
+			<string>float</string>
+			<string>18</string>
+		</array>
+		<key>NSPaperSize</key>
+		<array>
+			<string>size</string>
+			<string>{612, 792}</string>
+		</array>
+		<key>NSRightMargin</key>
+		<array>
+			<string>float</string>
+			<string>18</string>
+		</array>
+		<key>NSTopMargin</key>
+		<array>
+			<string>float</string>
+			<string>18</string>
+		</array>
+	</dict>
+	<key>PrintOnePage</key>
+	<false/>
+	<key>ReadOnly</key>
+	<string>NO</string>
+	<key>RowAlign</key>
+	<integer>1</integer>
+	<key>RowSpacing</key>
+	<real>36</real>
+	<key>SheetTitle</key>
+	<string>Canvas 1</string>
+	<key>SmartAlignmentGuidesActive</key>
+	<string>YES</string>
+	<key>SmartDistanceGuidesActive</key>
+	<string>NO</string>
+	<key>UniqueID</key>
+	<integer>1</integer>
+	<key>UseEntirePage</key>
+	<false/>
+	<key>VPages</key>
+	<integer>1</integer>
+	<key>WindowInfo</key>
+	<dict>
+		<key>BottomSlabHeight</key>
+		<real>478</real>
+		<key>CurrentSheet</key>
+		<integer>0</integer>
+		<key>Expanded_Canvases</key>
+		<array/>
+		<key>ShowInfo</key>
+		<true/>
+		<key>ShowRuler</key>
+		<true/>
+		<key>Sidebar</key>
+		<true/>
+		<key>SidebarWidth</key>
+		<integer>230</integer>
+		<key>VisibleRegion</key>
+		<string>{{15, 41}, {475, 680}}</string>
+		<key>Zoom</key>
+		<real>1</real>
+		<key>ZoomValues</key>
+		<array>
+			<array>
+				<string>Canvas 1</string>
+				<real>1</real>
+				<real>2</real>
+			</array>
+		</array>
+	</dict>
+</dict>
+</plist>
diff --git a/graphics/java/android/graphics/Matrix.java b/graphics/java/android/graphics/Matrix.java
index b4e6bab..90e5a4e 100644
--- a/graphics/java/android/graphics/Matrix.java
+++ b/graphics/java/android/graphics/Matrix.java
@@ -35,7 +35,7 @@
     public static final int MPERSP_2 = 8;   //!< use with getValues/setValues
 
     /** @hide */
-    public static Matrix IDENTITY_MATRIX = new Matrix() {
+    public final static Matrix IDENTITY_MATRIX = new Matrix() {
         void oops() {
             throw new IllegalStateException("Matrix can not be modified");
         }
diff --git a/graphics/java/android/graphics/drawable/RippleBackground.java b/graphics/java/android/graphics/drawable/RippleBackground.java
index 6d1b1fe..1c14e2f 100644
--- a/graphics/java/android/graphics/drawable/RippleBackground.java
+++ b/graphics/java/android/graphics/drawable/RippleBackground.java
@@ -25,7 +25,7 @@
 import android.graphics.Paint;
 import android.graphics.Rect;
 import android.util.FloatProperty;
-import android.view.HardwareCanvas;
+import android.view.DisplayListCanvas;
 import android.view.RenderNodeAnimator;
 import android.view.animation.LinearInterpolator;
 
@@ -73,7 +73,7 @@
     }
 
     @Override
-    protected boolean drawHardware(HardwareCanvas c) {
+    protected boolean drawHardware(DisplayListCanvas c) {
         c.drawCircle(mPropX, mPropY, mPropRadius, mPropPaint);
         return true;
     }
diff --git a/graphics/java/android/graphics/drawable/RippleComponent.java b/graphics/java/android/graphics/drawable/RippleComponent.java
index 79407f7..0412e35 100644
--- a/graphics/java/android/graphics/drawable/RippleComponent.java
+++ b/graphics/java/android/graphics/drawable/RippleComponent.java
@@ -20,7 +20,7 @@
 import android.graphics.Canvas;
 import android.graphics.Paint;
 import android.graphics.Rect;
-import android.view.HardwareCanvas;
+import android.view.DisplayListCanvas;
 import android.view.RenderNodeAnimator;
 
 import java.util.ArrayList;
@@ -36,7 +36,7 @@
     protected final Rect mBounds;
 
     /** Whether we can use hardware acceleration for the exit animation. */
-    private boolean mHasHardwareCanvas;
+    private boolean mHasDisplayListCanvas;
 
     private boolean mHasPendingHardwareAnimator;
     private RenderNodeAnimatorSet mHardwareAnimator;
@@ -93,7 +93,7 @@
     public final void exit() {
         cancel();
 
-        if (mHasHardwareCanvas) {
+        if (mHasDisplayListCanvas) {
             // We don't have access to a canvas here, but we expect one on the
             // next frame. We'll start the render thread animation then.
             mHasPendingHardwareAnimator = true;
@@ -132,19 +132,19 @@
      * @return {@code true} if something was drawn, {@code false} otherwise
      */
     public boolean draw(Canvas c, Paint p) {
-        final boolean hasHardwareCanvas = c.isHardwareAccelerated()
-                && c instanceof HardwareCanvas;
-        if (mHasHardwareCanvas != hasHardwareCanvas) {
-            mHasHardwareCanvas = hasHardwareCanvas;
+        final boolean hasDisplayListCanvas = c.isHardwareAccelerated()
+                && c instanceof DisplayListCanvas;
+        if (mHasDisplayListCanvas != hasDisplayListCanvas) {
+            mHasDisplayListCanvas = hasDisplayListCanvas;
 
-            if (!hasHardwareCanvas) {
+            if (!hasDisplayListCanvas) {
                 // We've switched from hardware to non-hardware mode. Panic.
                 endHardwareAnimations();
             }
         }
 
-        if (hasHardwareCanvas) {
-            final HardwareCanvas hw = (HardwareCanvas) c;
+        if (hasDisplayListCanvas) {
+            final DisplayListCanvas hw = (DisplayListCanvas) c;
             startPendingAnimation(hw, p);
 
             if (mHardwareAnimator != null) {
@@ -173,7 +173,7 @@
      * @param hw hardware canvas on which the animation should draw
      * @param p paint whose properties the hardware canvas should use
      */
-    private void startPendingAnimation(HardwareCanvas hw, Paint p) {
+    private void startPendingAnimation(DisplayListCanvas hw, Paint p) {
         if (mHasPendingHardwareAnimator) {
             mHasPendingHardwareAnimator = false;
 
@@ -193,6 +193,7 @@
     private void cancelSoftwareAnimations() {
         if (mSoftwareAnimator != null) {
             mSoftwareAnimator.cancel();
+            mSoftwareAnimator = null;
         }
     }
 
@@ -203,6 +204,7 @@
     private void endSoftwareAnimations() {
         if (mSoftwareAnimator != null) {
             mSoftwareAnimator.end();
+            mSoftwareAnimator = null;
         }
     }
 
@@ -258,7 +260,7 @@
 
     protected abstract RenderNodeAnimatorSet createHardwareExit(Paint p);
 
-    protected abstract boolean drawHardware(HardwareCanvas c);
+    protected abstract boolean drawHardware(DisplayListCanvas c);
 
     protected abstract boolean drawSoftware(Canvas c, Paint p);
 
@@ -279,7 +281,7 @@
             mAnimators.clear();
         }
 
-        public void start(HardwareCanvas target) {
+        public void start(DisplayListCanvas target) {
             if (target == null) {
                 throw new IllegalArgumentException("Hardware canvas must be non-null");
             }
diff --git a/graphics/java/android/graphics/drawable/RippleDrawable.java b/graphics/java/android/graphics/drawable/RippleDrawable.java
index 66160c0..23f93fd 100644
--- a/graphics/java/android/graphics/drawable/RippleDrawable.java
+++ b/graphics/java/android/graphics/drawable/RippleDrawable.java
@@ -212,19 +212,12 @@
         }
 
         cancelExitingRipples();
-        invalidateSelf();
     }
 
-    private boolean cancelExitingRipples() {
-        boolean needsDraw = false;
-
+    private void cancelExitingRipples() {
         final int count = mExitingRipplesCount;
         final RippleForeground[] ripples = mExitingRipples;
         for (int i = 0; i < count; i++) {
-            // If the ripple is animating on the hardware thread, we'll need to
-            // draw an additional frame after canceling to restore the software
-            // drawing path.
-            needsDraw |= ripples[i].isHardwareAnimating();
             ripples[i].end();
         }
 
@@ -233,21 +226,8 @@
         }
         mExitingRipplesCount = 0;
 
-        return needsDraw;
-    }
-
-    @Override
-    public void setAlpha(int alpha) {
-        super.setAlpha(alpha);
-
-        // TODO: Should we support this?
-    }
-
-    @Override
-    public void setColorFilter(ColorFilter colorFilter) {
-        super.setColorFilter(colorFilter);
-
-        // TODO: Should we support this?
+        // Always draw an additional "clean" frame after canceling animations.
+        invalidateSelf();
     }
 
     @Override
@@ -606,7 +586,6 @@
         }
 
         cancelExitingRipples();
-        invalidateSelf();
     }
 
     @Override
diff --git a/graphics/java/android/graphics/drawable/RippleForeground.java b/graphics/java/android/graphics/drawable/RippleForeground.java
index 334122d..4853b04 100644
--- a/graphics/java/android/graphics/drawable/RippleForeground.java
+++ b/graphics/java/android/graphics/drawable/RippleForeground.java
@@ -27,7 +27,7 @@
 import android.graphics.Rect;
 import android.util.FloatProperty;
 import android.util.MathUtils;
-import android.view.HardwareCanvas;
+import android.view.DisplayListCanvas;
 import android.view.RenderNodeAnimator;
 import android.view.animation.LinearInterpolator;
 
@@ -127,7 +127,7 @@
     }
 
     @Override
-    protected boolean drawHardware(HardwareCanvas c) {
+    protected boolean drawHardware(DisplayListCanvas c) {
         c.drawCircle(mPropX, mPropY, mPropRadius, mPropPaint);
         return true;
     }
diff --git a/libs/hwui/FontRenderer.cpp b/libs/hwui/FontRenderer.cpp
index d1d2fcc..6bef7c7 100644
--- a/libs/hwui/FontRenderer.cpp
+++ b/libs/hwui/FontRenderer.cpp
@@ -19,6 +19,8 @@
 #include "Caches.h"
 #include "Debug.h"
 #include "Extensions.h"
+#include "Glop.h"
+#include "GlopBuilder.h"
 #include "OpenGLRenderer.h"
 #include "PixelBuffer.h"
 #include "Rect.h"
@@ -44,10 +46,12 @@
 // blur inputs smaller than this constant will bypass renderscript
 #define RS_MIN_INPUT_CUTOFF 10000
 
+#define USE_GLOPS true
+
 ///////////////////////////////////////////////////////////////////////////////
 // TextSetupFunctor
 ///////////////////////////////////////////////////////////////////////////////
-status_t TextSetupFunctor::setup(GLenum glyphFormat) {
+void TextSetupFunctor::setup(GLenum glyphFormat) {
     renderer->setupDraw();
     renderer->setupDrawTextGamma(paint);
     renderer->setupDrawDirtyRegionsDisabled();
@@ -84,8 +88,24 @@
     renderer->setupDrawColorFilterUniforms(paint->getColorFilter());
     renderer->setupDrawShaderUniforms(paint->getShader(), pureTranslate);
     renderer->setupDrawTextGammaUniforms();
+}
 
-    return NO_ERROR;
+void TextSetupFunctor::draw(CacheTexture& texture, bool linearFiltering) {
+    int textureFillFlags = static_cast<int>(texture.getFormat() == GL_ALPHA
+            ? TextureFillFlags::kIsAlphaMaskTexture : TextureFillFlags::kNone);
+    if (linearFiltering) {
+        textureFillFlags |= TextureFillFlags::kForceFilter;
+    }
+    const Matrix4& transform = pureTranslate ? Matrix4::identity() : *(renderer->currentTransform());
+    Glop glop;
+    GlopBuilder(renderer->mRenderState, renderer->mCaches, &glop)
+            .setMeshTexturedIndexedQuads(texture.mesh(), texture.meshElementCount())
+            .setFillTexturePaint(texture.getTexture(), textureFillFlags, paint, renderer->currentSnapshot()->alpha)
+            .setTransform(renderer->currentSnapshot()->getOrthoMatrix(), transform, false)
+            .setModelViewOffsetRect(0, 0, Rect(0, 0, 0, 0))
+            .setRoundRectClipState(renderer->currentSnapshot()->roundRectClipState)
+            .build();
+    renderer->renderGlop(glop);
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -196,7 +216,7 @@
             while (it.next()) {
                 it.value()->invalidateTextureCache(cacheTexture);
             }
-            cacheTexture->releaseTexture();
+            cacheTexture->releasePixelBuffer();
         }
     }
 }
@@ -290,7 +310,7 @@
     if (!cacheTexture->getPixelBuffer()) {
         Caches::getInstance().textureState().activateTexture(0);
         // Large-glyph texture memory is allocated only as needed
-        cacheTexture->allocateTexture();
+        cacheTexture->allocatePixelBuffer();
     }
     if (!cacheTexture->mesh()) {
         cacheTexture->allocateMesh();
@@ -402,7 +422,7 @@
 
     if (allocate) {
         Caches::getInstance().textureState().activateTexture(0);
-        cacheTexture->allocateTexture();
+        cacheTexture->allocatePixelBuffer();
         cacheTexture->allocateMesh();
     }
 
@@ -488,8 +508,10 @@
 void FontRenderer::issueDrawCommand(Vector<CacheTexture*>& cacheTextures) {
     if (!mFunctor) return;
 
+#if !USE_GLOPS
     Caches& caches = mFunctor->renderer->getCaches();
     RenderState& renderState = mFunctor->renderer->renderState();
+#endif
 
     bool first = true;
     bool forceRebind = false;
@@ -497,9 +519,10 @@
         CacheTexture* texture = cacheTextures[i];
         if (texture->canDraw()) {
             if (first) {
+                checkTextureUpdate();
+#if !USE_GLOPS
                 mFunctor->setup(texture->getFormat());
 
-                checkTextureUpdate();
                 renderState.meshState().bindQuadIndicesBuffer();
 
                 // If returns true, a VBO was bound and we must
@@ -508,12 +531,17 @@
                 forceRebind = renderState.meshState().unbindMeshBuffer();
 
                 caches.textureState().activateTexture(0);
+#endif
                 first = false;
                 mDrawn = true;
             }
+#if USE_GLOPS
+            mFunctor->draw(*texture, mLinearFiltering);
+#endif
 
+#if !USE_GLOPS
             caches.textureState().bindTexture(texture->getTextureId());
-            texture->setLinearFiltering(mLinearFiltering, false);
+            texture->setLinearFiltering(mLinearFiltering);
 
             TextureVertex* mesh = texture->mesh();
             MeshState& meshState = renderState.meshState();
@@ -522,7 +550,7 @@
 
             glDrawElements(GL_TRIANGLES, texture->meshElementCount(),
                     GL_UNSIGNED_SHORT, texture->indices());
-
+#endif
             texture->resetMesh();
             forceRebind = false;
         }
diff --git a/libs/hwui/FontRenderer.h b/libs/hwui/FontRenderer.h
index cb63684..0603389 100644
--- a/libs/hwui/FontRenderer.h
+++ b/libs/hwui/FontRenderer.h
@@ -59,7 +59,9 @@
         , paint(paint) {
     }
 
-    status_t setup(GLenum glyphFormat);
+    void setup(GLenum glyphFormat);
+
+    void draw(CacheTexture& texture, bool linearFiltering);
 
     OpenGLRenderer* renderer;
     float x;
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index 622b570..3781969 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -2935,27 +2935,27 @@
 }
 
 void OpenGLRenderer::restore() {
-    return mState.restore();
+    mState.restore();
 }
 
 void OpenGLRenderer::restoreToCount(int saveCount) {
-    return mState.restoreToCount(saveCount);
+    mState.restoreToCount(saveCount);
 }
 
 void OpenGLRenderer::translate(float dx, float dy, float dz) {
-    return mState.translate(dx, dy, dz);
+    mState.translate(dx, dy, dz);
 }
 
 void OpenGLRenderer::rotate(float degrees) {
-    return mState.rotate(degrees);
+    mState.rotate(degrees);
 }
 
 void OpenGLRenderer::scale(float sx, float sy) {
-    return mState.scale(sx, sy);
+    mState.scale(sx, sy);
 }
 
 void OpenGLRenderer::skew(float sx, float sy) {
-    return mState.skew(sx, sy);
+    mState.skew(sx, sy);
 }
 
 void OpenGLRenderer::setMatrix(const Matrix4& matrix) {
diff --git a/libs/hwui/PathCache.cpp b/libs/hwui/PathCache.cpp
index 5b2e5e2..2703072 100644
--- a/libs/hwui/PathCache.cpp
+++ b/libs/hwui/PathCache.cpp
@@ -40,25 +40,25 @@
 // Cache entries
 ///////////////////////////////////////////////////////////////////////////////
 
-PathDescription::PathDescription():
-        type(kShapeNone),
-        join(SkPaint::kDefault_Join),
-        cap(SkPaint::kDefault_Cap),
-        style(SkPaint::kFill_Style),
-        miter(4.0f),
-        strokeWidth(1.0f),
-        pathEffect(nullptr) {
+PathDescription::PathDescription()
+        : type(kShapeNone)
+        , join(SkPaint::kDefault_Join)
+        , cap(SkPaint::kDefault_Cap)
+        , style(SkPaint::kFill_Style)
+        , miter(4.0f)
+        , strokeWidth(1.0f)
+        , pathEffect(nullptr) {
     memset(&shape, 0, sizeof(Shape));
 }
 
-PathDescription::PathDescription(ShapeType type, const SkPaint* paint):
-        type(type),
-        join(paint->getStrokeJoin()),
-        cap(paint->getStrokeCap()),
-        style(paint->getStyle()),
-        miter(paint->getStrokeMiter()),
-        strokeWidth(paint->getStrokeWidth()),
-        pathEffect(paint->getPathEffect()) {
+PathDescription::PathDescription(ShapeType type, const SkPaint* paint)
+        : type(type)
+        , join(paint->getStrokeJoin())
+        , cap(paint->getStrokeCap())
+        , style(paint->getStyle())
+        , miter(paint->getStrokeMiter())
+        , strokeWidth(paint->getStrokeWidth())
+        , pathEffect(paint->getPathEffect()) {
     memset(&shape, 0, sizeof(Shape));
 }
 
@@ -132,18 +132,6 @@
     canvas.drawPath(*path, pathPaint);
 }
 
-static PathTexture* createTexture(float left, float top, float offset,
-        uint32_t width, uint32_t height, uint32_t id) {
-    PathTexture* texture = new PathTexture(Caches::getInstance());
-    texture->left = left;
-    texture->top = top;
-    texture->offset = offset;
-    texture->width = width;
-    texture->height = height;
-    texture->generation = id;
-    return texture;
-}
-
 ///////////////////////////////////////////////////////////////////////////////
 // Cache constructor/destructor
 ///////////////////////////////////////////////////////////////////////////////
@@ -267,7 +255,8 @@
     SkBitmap bitmap;
     drawPath(path, paint, bitmap, left, top, offset, width, height);
 
-    PathTexture* texture = createTexture(left, top, offset, width, height,
+    PathTexture* texture = new PathTexture(Caches::getInstance(),
+            left, top, offset, width, height,
             path->getGenerationID());
     generateTexture(entry, &bitmap, texture);
 
@@ -441,7 +430,7 @@
     if (generate) {
         // It is important to specify the generation ID so we do not
         // attempt to precache the same path several times
-        texture = createTexture(0.0f, 0.0f, 0.0f, 0, 0, path->getGenerationID());
+        texture = new PathTexture(Caches::getInstance(), path->getGenerationID());
         sp<PathTask> task = new PathTask(path, paint, texture);
         texture->setTask(task);
 
diff --git a/libs/hwui/PathCache.h b/libs/hwui/PathCache.h
index 23e35cb..4297693 100644
--- a/libs/hwui/PathCache.h
+++ b/libs/hwui/PathCache.h
@@ -59,7 +59,19 @@
  * Alpha texture used to represent a path.
  */
 struct PathTexture: public Texture {
-    PathTexture(Caches& caches): Texture(caches) {
+    PathTexture(Caches& caches, float left, float top,
+            float offset, int width, int height, int generation)
+            : Texture(caches)
+            , left(left)
+            , top(top)
+            , offset(offset) {
+        this->width = width;
+        this->height = height;
+        this->generation = generation;
+    }
+    PathTexture(Caches& caches, int generation)
+        : Texture(caches) {
+        this->generation = generation;
     }
 
     ~PathTexture() {
@@ -69,15 +81,15 @@
     /**
      * Left coordinate of the path bounds.
      */
-    float left;
+    float left = 0;
     /**
      * Top coordinate of the path bounds.
      */
-    float top;
+    float top = 0;
     /**
      * Offset to draw the path at the correct origin.
      */
-    float offset;
+    float offset = 0;
 
     sp<Task<SkBitmap*> > task() const {
         return mTask;
diff --git a/libs/hwui/Texture.h b/libs/hwui/Texture.h
index dfec462..7227ce0 100644
--- a/libs/hwui/Texture.h
+++ b/libs/hwui/Texture.h
@@ -78,7 +78,7 @@
     /**
      * Indicates whether this texture should be cleaned up after use.
      */
-    bool cleanup= false;
+    bool cleanup = false;
     /**
      * Optional, size of the original bitmap.
      */
diff --git a/libs/hwui/font/CacheTexture.cpp b/libs/hwui/font/CacheTexture.cpp
index 9314126..845cf30 100644
--- a/libs/hwui/font/CacheTexture.cpp
+++ b/libs/hwui/font/CacheTexture.cpp
@@ -109,13 +109,17 @@
 // CacheTexture
 ///////////////////////////////////////////////////////////////////////////////
 
-CacheTexture::CacheTexture(uint16_t width, uint16_t height, GLenum format, uint32_t maxQuadCount) :
-            mTexture(nullptr), mTextureId(0), mWidth(width), mHeight(height), mFormat(format),
-            mLinearFiltering(false), mDirty(false), mNumGlyphs(0),
-            mMesh(nullptr), mCurrentQuad(0), mMaxQuadCount(maxQuadCount),
-            mCaches(Caches::getInstance()) {
+CacheTexture::CacheTexture(uint16_t width, uint16_t height, GLenum format, uint32_t maxQuadCount)
+        : mTexture(Caches::getInstance())
+        , mFormat(format)
+        , mMaxQuadCount(maxQuadCount)
+        , mCaches(Caches::getInstance()) {
+    mTexture.width = width;
+    mTexture.height = height;
+    mTexture.blend = true;
+
     mCacheBlocks = new CacheBlock(TEXTURE_BORDER_SIZE, TEXTURE_BORDER_SIZE,
-            mWidth - TEXTURE_BORDER_SIZE, mHeight - TEXTURE_BORDER_SIZE);
+            getWidth() - TEXTURE_BORDER_SIZE, getHeight() - TEXTURE_BORDER_SIZE);
 
     // OpenGL ES 3.0+ lets us specify the row length for unpack operations such
     // as glTexSubImage2D(). This allows us to upload a sub-rectangle of a texture.
@@ -125,7 +129,7 @@
 
 CacheTexture::~CacheTexture() {
     releaseMesh();
-    releaseTexture();
+    releasePixelBuffer();
     reset();
 }
 
@@ -144,35 +148,28 @@
     // reset, then create a new remainder space to start again
     reset();
     mCacheBlocks = new CacheBlock(TEXTURE_BORDER_SIZE, TEXTURE_BORDER_SIZE,
-            mWidth - TEXTURE_BORDER_SIZE, mHeight - TEXTURE_BORDER_SIZE);
+            getWidth() - TEXTURE_BORDER_SIZE, getHeight() - TEXTURE_BORDER_SIZE);
 }
 
 void CacheTexture::releaseMesh() {
     delete[] mMesh;
 }
 
-void CacheTexture::releaseTexture() {
-    if (mTexture) {
-        delete mTexture;
-        mTexture = nullptr;
+void CacheTexture::releasePixelBuffer() {
+    if (mPixelBuffer) {
+        delete mPixelBuffer;
+        mPixelBuffer = nullptr;
     }
-    if (mTextureId) {
-        mCaches.textureState().deleteTexture(mTextureId);
-        mTextureId = 0;
+    if (mTexture.id) {
+        mCaches.textureState().deleteTexture(mTexture.id);
+        mTexture.id = 0;
     }
     mDirty = false;
     mCurrentQuad = 0;
 }
 
-void CacheTexture::setLinearFiltering(bool linearFiltering, bool bind) {
-   if (linearFiltering != mLinearFiltering) {
-       mLinearFiltering = linearFiltering;
-
-       const GLenum filtering = linearFiltering ? GL_LINEAR : GL_NEAREST;
-       if (bind) mCaches.textureState().bindTexture(getTextureId());
-       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filtering);
-       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filtering);
-   }
+void CacheTexture::setLinearFiltering(bool linearFiltering) {
+    mTexture.setFilter(linearFiltering ? GL_LINEAR : GL_NEAREST);
 }
 
 void CacheTexture::allocateMesh() {
@@ -181,18 +178,18 @@
     }
 }
 
-void CacheTexture::allocateTexture() {
-    if (!mTexture) {
-        mTexture = PixelBuffer::create(mFormat, mWidth, mHeight);
+void CacheTexture::allocatePixelBuffer() {
+    if (!mPixelBuffer) {
+        mPixelBuffer = PixelBuffer::create(mFormat, getWidth(), getHeight());
     }
 
-    if (!mTextureId) {
-        glGenTextures(1, &mTextureId);
+    if (!mTexture.id) {
+        glGenTextures(1, &mTexture.id);
 
-        mCaches.textureState().bindTexture(mTextureId);
+        mCaches.textureState().bindTexture(mTexture.id);
         glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
         // Initialize texture dimensions
-        glTexImage2D(GL_TEXTURE_2D, 0, mFormat, mWidth, mHeight, 0,
+        glTexImage2D(GL_TEXTURE_2D, 0, mFormat, getWidth(), getHeight(), 0,
                 mFormat, GL_UNSIGNED_BYTE, nullptr);
 
         const GLenum filtering = getLinearFiltering() ? GL_LINEAR : GL_NEAREST;
@@ -209,16 +206,16 @@
 
     uint32_t x = mHasUnpackRowLength ? dirtyRect.left : 0;
     uint32_t y = dirtyRect.top;
-    uint32_t width = mHasUnpackRowLength ? dirtyRect.getWidth() : mWidth;
+    uint32_t width = mHasUnpackRowLength ? dirtyRect.getWidth() : getWidth();
     uint32_t height = dirtyRect.getHeight();
 
     // The unpack row length only needs to be specified when a new
     // texture is bound
     if (mHasUnpackRowLength) {
-        glPixelStorei(GL_UNPACK_ROW_LENGTH, mWidth);
+        glPixelStorei(GL_UNPACK_ROW_LENGTH, getWidth());
     }
 
-    mTexture->upload(x, y, width, height);
+    mPixelBuffer->upload(x, y, width, height);
     setDirty(false);
 
     return mHasUnpackRowLength;
@@ -258,7 +255,7 @@
             return false;
     }
 
-    if (glyph.fHeight + TEXTURE_BORDER_SIZE * 2 > mHeight) {
+    if (glyph.fHeight + TEXTURE_BORDER_SIZE * 2 > getHeight()) {
         return false;
     }
 
@@ -295,10 +292,10 @@
                 cacheBlock->mWidth -= roundedUpW;
                 cacheBlock->mX += roundedUpW;
 
-                if (mHeight - glyphH >= glyphH) {
+                if (getHeight() - glyphH >= glyphH) {
                     // There's enough height left over to create a new CacheBlock
                     CacheBlock* newBlock = new CacheBlock(oldX, glyphH + TEXTURE_BORDER_SIZE,
-                            roundedUpW, mHeight - glyphH - TEXTURE_BORDER_SIZE);
+                            roundedUpW, getHeight() - glyphH - TEXTURE_BORDER_SIZE);
 #if DEBUG_FONT_RENDERER
                     ALOGD("fitBitmap: Created new block: this, x, y, w, h = %p, %d, %d, %d, %d",
                             newBlock, newBlock->mX, newBlock->mY,
diff --git a/libs/hwui/font/CacheTexture.h b/libs/hwui/font/CacheTexture.h
index 5d3f959..6dabc76 100644
--- a/libs/hwui/font/CacheTexture.h
+++ b/libs/hwui/font/CacheTexture.h
@@ -17,15 +17,15 @@
 #ifndef ANDROID_HWUI_CACHE_TEXTURE_H
 #define ANDROID_HWUI_CACHE_TEXTURE_H
 
+#include "PixelBuffer.h"
+#include "Rect.h"
+#include "Texture.h"
+#include "Vertex.h"
+
 #include <GLES3/gl3.h>
-
 #include <SkScalerContext.h>
-
 #include <utils/Log.h>
 
-#include "../PixelBuffer.h"
-#include "../Rect.h"
-#include "../Vertex.h"
 
 namespace android {
 namespace uirenderer {
@@ -80,9 +80,9 @@
     void init();
 
     void releaseMesh();
-    void releaseTexture();
+    void releasePixelBuffer();
 
-    void allocateTexture();
+    void allocatePixelBuffer();
     void allocateMesh();
 
     // Returns true if glPixelStorei(GL_UNPACK_ROW_LENGTH) must be reset
@@ -92,11 +92,11 @@
     bool fitBitmap(const SkGlyph& glyph, uint32_t* retOriginX, uint32_t* retOriginY);
 
     inline uint16_t getWidth() const {
-        return mWidth;
+        return mTexture.width;
     }
 
     inline uint16_t getHeight() const {
-        return mHeight;
+        return mTexture.height;
     }
 
     inline GLenum getFormat() const {
@@ -104,7 +104,7 @@
     }
 
     inline uint32_t getOffset(uint16_t x, uint16_t y) const {
-        return (y * mWidth + x) * PixelBuffer::formatSize(mFormat);
+        return (y * getWidth() + x) * PixelBuffer::formatSize(mFormat);
     }
 
     inline const Rect* getDirtyRect() const {
@@ -112,12 +112,17 @@
     }
 
     inline PixelBuffer* getPixelBuffer() const {
+        return mPixelBuffer;
+    }
+
+    Texture& getTexture() {
+        allocatePixelBuffer();
         return mTexture;
     }
 
     GLuint getTextureId() {
-        allocateTexture();
-        return mTextureId;
+        allocatePixelBuffer();
+        return mTexture.id;
     }
 
     inline bool isDirty() const {
@@ -131,7 +136,7 @@
     /**
      * This method assumes that the proper texture unit is active.
      */
-    void setLinearFiltering(bool linearFiltering, bool bind = true);
+    void setLinearFiltering(bool linearFiltering);
 
     inline uint16_t getGlyphCount() const {
         return mNumGlyphs;
@@ -176,16 +181,14 @@
 private:
     void setDirty(bool dirty);
 
-    PixelBuffer* mTexture;
-    GLuint mTextureId;
-    uint16_t mWidth;
-    uint16_t mHeight;
+    PixelBuffer* mPixelBuffer = nullptr;
+    Texture mTexture;
     GLenum mFormat;
-    bool mLinearFiltering;
-    bool mDirty;
-    uint16_t mNumGlyphs;
-    TextureVertex* mMesh;
-    uint32_t mCurrentQuad;
+    bool mLinearFiltering = false;
+    bool mDirty = false;
+    uint16_t mNumGlyphs = 0;
+    TextureVertex* mMesh = nullptr;
+    uint32_t mCurrentQuad = 0;
     uint32_t mMaxQuadCount;
     Caches& mCaches;
     CacheBlock* mCacheBlocks;
diff --git a/libs/hwui/utils/Macros.h b/libs/hwui/utils/Macros.h
index 9f7ac1c..1b31059 100644
--- a/libs/hwui/utils/Macros.h
+++ b/libs/hwui/utils/Macros.h
@@ -36,8 +36,8 @@
         #Type " must have standard layout")
 
 #define MAKE_FLAGS_ENUM(enumType) \
-        inline int operator|=(int lhs, enumType rhs) { \
-            return lhs | static_cast<int>(rhs); \
+        inline void operator|=(int& lhs, enumType rhs) { \
+            lhs |= static_cast<int>(rhs); \
         } \
         inline int operator|(int lhs, enumType rhs) { \
             return lhs | static_cast<int>(rhs); \
@@ -48,8 +48,8 @@
         inline int operator|(enumType lhs, enumType rhs) { \
             return static_cast<int>(lhs) | static_cast<int>(rhs); \
         } \
-        inline int operator&=(int lhs, enumType rhs) { \
-            return lhs & static_cast<int>(rhs); \
+        inline void operator&=(int& lhs, enumType rhs) { \
+            lhs &= static_cast<int>(rhs); \
         } \
         inline int operator&(int lhs, enumType rhs) { \
             return lhs & static_cast<int>(rhs); \
diff --git a/location/java/com/android/internal/location/GpsNetInitiatedHandler.java b/location/java/com/android/internal/location/GpsNetInitiatedHandler.java
index 0a3e073..95b3eb3 100644
--- a/location/java/com/android/internal/location/GpsNetInitiatedHandler.java
+++ b/location/java/com/android/internal/location/GpsNetInitiatedHandler.java
@@ -385,7 +385,7 @@
         // if not to popup dialog immediately, pending intent will open the dialog
         Intent intent = !mPopupImmediately ? getDlgIntent(notif) : new Intent();
         PendingIntent pi = PendingIntent.getBroadcast(mContext, 0, intent, 0);
-        mNiNotification.color = mContext.getResources().getColor(
+        mNiNotification.color = mContext.getColor(
                 com.android.internal.R.color.system_notification_accent_color);
         mNiNotification.setLatestEventInfo(mContext, title, message, pi);
 
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java
index 5200454..28941b9 100644
--- a/media/java/android/media/AudioManager.java
+++ b/media/java/android/media/AudioManager.java
@@ -438,6 +438,12 @@
      */
     public static final int FLAG_SHOW_VIBRATE_HINT = 1 << 11;
 
+    /**
+     * Adjusting the volume due to a hardware key press.
+     * @hide
+     */
+    public static final int FLAG_FROM_KEY = 1 << 12;
+
     private static final String[] FLAG_NAMES = {
         "FLAG_SHOW_UI",
         "FLAG_ALLOW_RINGER_MODES",
@@ -451,6 +457,7 @@
         "FLAG_ACTIVE_MEDIA_ONLY",
         "FLAG_SHOW_UI_WARNINGS",
         "FLAG_SHOW_VIBRATE_HINT",
+        "FLAG_FROM_KEY",
     };
 
     /** @hide */
diff --git a/media/java/android/media/ImageReader.java b/media/java/android/media/ImageReader.java
index 824a7ad..18ffe12 100644
--- a/media/java/android/media/ImageReader.java
+++ b/media/java/android/media/ImageReader.java
@@ -443,6 +443,7 @@
     @Override
     public void close() {
         setOnImageAvailableListener(null, null);
+        if (mSurface != null) mSurface.release();
         nativeClose();
     }
 
diff --git a/media/java/android/media/MediaDrm.java b/media/java/android/media/MediaDrm.java
index d7752b9..6b37a34 100644
--- a/media/java/android/media/MediaDrm.java
+++ b/media/java/android/media/MediaDrm.java
@@ -254,6 +254,9 @@
      * This event type indicates that the app needs to request a certificate from
      * the provisioning server.  The request message data is obtained using
      * {@link #getProvisionRequest}
+     *
+     * @deprecated Handle provisioning via {@link android.media.NotProvisionedException}
+     * instead.
      */
     public static final int EVENT_PROVISION_REQUIRED = 1;
 
diff --git a/media/java/android/media/midi/MidiDeviceInfo.java b/media/java/android/media/midi/MidiDeviceInfo.java
index 93e0939..7201e25 100644
--- a/media/java/android/media/midi/MidiDeviceInfo.java
+++ b/media/java/android/media/midi/MidiDeviceInfo.java
@@ -43,6 +43,11 @@
     public static final int TYPE_VIRTUAL = 2;
 
     /**
+     * Constant representing Bluetooth MIDI devices for {@link #getType}
+     */
+    public static final int TYPE_BLUETOOTH = 3;
+
+    /**
      * Bundle key for the device's user visible name property.
      * Used with the {@link android.os.Bundle} returned by {@link #getProperties}.
      * For USB devices, this is a concatenation of the manufacturer and product names.
@@ -78,6 +83,13 @@
     public static final String PROPERTY_USB_DEVICE = "usb_device";
 
     /**
+     * Bundle key for the device's {@link android.bluetooth.BluetoothDevice}.
+     * Only set for Bluetooth MIDI devices.
+     * Used with the {@link android.os.Bundle} returned by {@link #getProperties}
+     */
+    public static final String PROPERTY_BLUETOOTH_DEVICE = "bluetooth_device";
+
+    /**
      * Bundle key for the device's ALSA card number.
      * Only set for USB MIDI devices.
      * Used with the {@link android.os.Bundle} returned by {@link #getProperties}
diff --git a/media/java/android/media/session/MediaSessionLegacyHelper.java b/media/java/android/media/session/MediaSessionLegacyHelper.java
index 3276f0c..c61d7ad 100644
--- a/media/java/android/media/session/MediaSessionLegacyHelper.java
+++ b/media/java/android/media/session/MediaSessionLegacyHelper.java
@@ -197,17 +197,17 @@
                 break;
         }
         if (down || up) {
-            int flags;
+            int flags = AudioManager.FLAG_FROM_KEY;
             if (musicOnly) {
                 // This flag is used when the screen is off to only affect
                 // active media
-                flags = AudioManager.FLAG_ACTIVE_MEDIA_ONLY;
+                flags |= AudioManager.FLAG_ACTIVE_MEDIA_ONLY;
             } else {
                 // These flags are consistent with the home screen
                 if (up) {
-                    flags = AudioManager.FLAG_PLAY_SOUND | AudioManager.FLAG_VIBRATE;
+                    flags |= AudioManager.FLAG_PLAY_SOUND | AudioManager.FLAG_VIBRATE;
                 } else {
-                    flags = AudioManager.FLAG_SHOW_UI | AudioManager.FLAG_VIBRATE;
+                    flags |= AudioManager.FLAG_SHOW_UI | AudioManager.FLAG_VIBRATE;
                 }
             }
             if (direction != 0) {
diff --git a/media/java/android/media/tv/TvContract.java b/media/java/android/media/tv/TvContract.java
index bc9722e..438e767 100644
--- a/media/java/android/media/tv/TvContract.java
+++ b/media/java/android/media/tv/TvContract.java
@@ -733,6 +733,50 @@
         public static final String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data";
 
         /**
+         * Internal integer flag used by individual TV input services.
+         * <p>
+         * This is internal to the provider that inserted it, and should not be decoded by other
+         * apps.
+         * </p><p>
+         * Type: INTEGER
+         * </p>
+         */
+        public static final String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1";
+
+        /**
+         * Internal integer flag used by individual TV input services.
+         * <p>
+         * This is internal to the provider that inserted it, and should not be decoded by other
+         * apps.
+         * </p><p>
+         * Type: INTEGER
+         * </p>
+         */
+        public static final String COLUMN_INTERNAL_PROVIDER_FLAG2 = "internal_provider_flag2";
+
+        /**
+         * Internal integer flag used by individual TV input services.
+         * <p>
+         * This is internal to the provider that inserted it, and should not be decoded by other
+         * apps.
+         * </p><p>
+         * Type: INTEGER
+         * </p>
+         */
+        public static final String COLUMN_INTERNAL_PROVIDER_FLAG3 = "internal_provider_flag3";
+
+        /**
+         * Internal integer flag used by individual TV input services.
+         * <p>
+         * This is internal to the provider that inserted it, and should not be decoded by other
+         * apps.
+         * </p><p>
+         * Type: INTEGER
+         * </p>
+         */
+        public static final String COLUMN_INTERNAL_PROVIDER_FLAG4 = "internal_provider_flag4";
+
+        /**
          * The version number of this row entry used by TV input services.
          * <p>
          * This is best used by sync adapters to identify the rows to update. The number can be
diff --git a/media/java/android/media/tv/TvInputInfo.java b/media/java/android/media/tv/TvInputInfo.java
index b9e99d2..5c1193f 100644
--- a/media/java/android/media/tv/TvInputInfo.java
+++ b/media/java/android/media/tv/TvInputInfo.java
@@ -116,12 +116,13 @@
     private final ResolveInfo mService;
     private final String mId;
     private final String mParentId;
+    private final int mType;
+    private final boolean mIsHardwareInput;
 
     // Attributes from XML meta data.
     private String mSetupActivity;
     private String mSettingsActivity;
 
-    private int mType = TYPE_TUNER;
     private HdmiDeviceInfo mHdmiDeviceInfo;
     private String mLabel;
     private Uri mIconUri;
@@ -153,7 +154,7 @@
             throws XmlPullParserException, IOException {
         return createTvInputInfo(context, service, generateInputIdForComponentName(
                 new ComponentName(service.serviceInfo.packageName, service.serviceInfo.name)),
-                null, TYPE_TUNER, null, null, false);
+                null, TYPE_TUNER, false, null, null, false);
     }
 
     /**
@@ -177,7 +178,7 @@
         boolean isConnectedToHdmiSwitch = (hdmiDeviceInfo.getPhysicalAddress() & 0x0FFF) != 0;
         TvInputInfo input = createTvInputInfo(context, service, generateInputIdForHdmiDevice(
                 new ComponentName(service.serviceInfo.packageName, service.serviceInfo.name),
-                hdmiDeviceInfo), parentId, TYPE_HDMI, label, iconUri, isConnectedToHdmiSwitch);
+                hdmiDeviceInfo), parentId, TYPE_HDMI, true, label, iconUri, isConnectedToHdmiSwitch);
         input.mHdmiDeviceInfo = hdmiDeviceInfo;
         return input;
     }
@@ -202,12 +203,12 @@
         int inputType = sHardwareTypeToTvInputType.get(hardwareInfo.getType(), TYPE_TUNER);
         return createTvInputInfo(context, service, generateInputIdForHardware(
                 new ComponentName(service.serviceInfo.packageName, service.serviceInfo.name),
-                hardwareInfo), null, inputType, label, iconUri, false);
+                hardwareInfo), null, inputType, true, label, iconUri, false);
     }
 
     private static TvInputInfo createTvInputInfo(Context context, ResolveInfo service,
-            String id, String parentId, int inputType, String label, Uri iconUri,
-            boolean isConnectedToHdmiSwitch)
+            String id, String parentId, int inputType, boolean isHardwareInput, String label,
+            Uri iconUri, boolean isConnectedToHdmiSwitch)
                     throws XmlPullParserException, IOException {
         ServiceInfo si = service.serviceInfo;
         PackageManager pm = context.getPackageManager();
@@ -233,7 +234,7 @@
                         "Meta-data does not start with tv-input-service tag in " + si.name);
             }
 
-            TvInputInfo input = new TvInputInfo(service, id, parentId, inputType);
+            TvInputInfo input = new TvInputInfo(service, id, parentId, inputType, isHardwareInput);
             TypedArray sa = res.obtainAttributes(attrs,
                     com.android.internal.R.styleable.TvInputService);
             input.mSetupActivity = sa.getString(
@@ -272,12 +273,16 @@
      * @param id ID of this TV input. Should be generated via generateInputId*().
      * @param parentId ID of this TV input's parent input. {@code null} if none exists.
      * @param type The type of this TV input service.
+     * @param isHardwareInput {@code true} if this TV input represents a hardware device.
+     *         {@code false} otherwise.
      */
-    private TvInputInfo(ResolveInfo service, String id, String parentId, int type) {
+    private TvInputInfo(ResolveInfo service, String id, String parentId, int type,
+            boolean isHardwareInput) {
         mService = service;
         mId = id;
         mParentId = parentId;
         mType = type;
+        mIsHardwareInput = isHardwareInput;
     }
 
     /**
@@ -381,6 +386,16 @@
     }
 
     /**
+     * Returns {@code true} if this TV input represents a hardware device. (e.g. built-in tuner,
+     * HDMI1) {@code false} otherwise.
+     * @hide
+     */
+    @SystemApi
+    public boolean isHardwareInput() {
+        return mIsHardwareInput;
+    }
+
+    /**
      * Returns {@code true}, if a CEC device for this TV input is connected to an HDMI switch, i.e.,
      * the device isn't directly connected to a HDMI port.
      * @hide
@@ -499,6 +514,7 @@
         dest.writeString(mSetupActivity);
         dest.writeString(mSettingsActivity);
         dest.writeInt(mType);
+        dest.writeByte(mIsHardwareInput ? (byte) 1 : 0);
         dest.writeParcelable(mHdmiDeviceInfo, flags);
         dest.writeParcelable(mIconUri, flags);
         dest.writeString(mLabel);
@@ -572,6 +588,7 @@
         mSetupActivity = in.readString();
         mSettingsActivity = in.readString();
         mType = in.readInt();
+        mIsHardwareInput = in.readByte() == 1 ? true : false;
         mHdmiDeviceInfo = in.readParcelable(null);
         mIconUri = in.readParcelable(null);
         mLabel = in.readString();
diff --git a/media/java/android/media/tv/TvInputService.java b/media/java/android/media/tv/TvInputService.java
index 6607765..cf1b441 100644
--- a/media/java/android/media/tv/TvInputService.java
+++ b/media/java/android/media/tv/TvInputService.java
@@ -241,7 +241,7 @@
         final Handler mHandler;
         private WindowManager.LayoutParams mWindowParams;
         private Surface mSurface;
-        private Context mContext;
+        private final Context mContext;
         private FrameLayout mOverlayViewContainer;
         private View mOverlayView;
         private OverlayViewCleanUpTask mOverlayViewCleanUpTask;
@@ -249,11 +249,11 @@
         private IBinder mWindowToken;
         private Rect mOverlayFrame;
 
-        private Object mLock = new Object();
+        private final Object mLock = new Object();
         // @GuardedBy("mLock")
         private ITvInputSessionCallback mSessionCallback;
         // @GuardedBy("mLock")
-        private List<Runnable> mPendingActions = new ArrayList<>();
+        private final List<Runnable> mPendingActions = new ArrayList<>();
 
         /**
          * Creates a new Session.
@@ -614,16 +614,17 @@
         public void onSetMain(boolean isMain) {
         }
 
-    /**
-     * Sets the {@link Surface} for the current input session on which the TV input renders video.
-     * <p>
-     * When {@code setSurface(null)} is called, the implementation should stop using the Surface
-     * object previously given and release any references to it.
-     *
-     * @param surface possibly {@code null} {@link Surface} an application passes to this TV input
-     *        session.
-     * @return {@code true} if the surface was set, {@code false} otherwise.
-     */
+        /**
+         * Sets the {@link Surface} for the current input session on which the TV input renders
+         * video.
+         * <p>
+         * When {@code setSurface(null)} is called, the implementation should stop using the Surface
+         * object previously given and release any references to it.
+         *
+         * @param surface possibly {@code null} {@link Surface} an application passes to this TV
+         *            input session.
+         * @return {@code true} if the surface was set, {@code false} otherwise.
+         */
         public abstract boolean onSetSurface(Surface surface);
 
         /**
@@ -662,11 +663,11 @@
 
         /**
          * Tunes to a given channel. When the video is available, {@link #notifyVideoAvailable()}
-         * should be called. Also, {@link #notifyVideoUnavailable(int)} should be called when the
-         * TV input cannot continue playing the given channel.
+         * should be called. Also, {@link #notifyVideoUnavailable(int)} should be called when the TV
+         * input cannot continue playing the given channel.
          *
          * @param channelUri The URI of the channel.
-         * @return {@code true} the tuning was successful, {@code false} otherwise.
+         * @return {@code true} if the tuning was successful, {@code false} otherwise.
          */
         public abstract boolean onTune(Uri channelUri);
 
@@ -675,7 +676,7 @@
          *
          * @param channelUri The URI of the channel.
          * @param params The extra parameters from other applications.
-         * @return {@code true} the tuning was successful, {@code false} otherwise.
+         * @return {@code true} if the tuning was successful, {@code false} otherwise.
          * @hide
          */
         @SystemApi
@@ -711,10 +712,10 @@
         }
 
         /**
-         * Select a given track.
+         * Selects a given track.
          * <p>
          * If this is done successfully, the implementation should call {@link #notifyTrackSelected}
-         * to help applications maintain the selcted track lists.
+         * to help applications maintain the up-to-date list of the selected tracks.
          * </p>
          *
          * @param trackId The ID of the track to select. {@code null} means to unselect the current
@@ -722,6 +723,7 @@
          * @param type The type of the track to select. The type can be
          *            {@link TvTrackInfo#TYPE_AUDIO}, {@link TvTrackInfo#TYPE_VIDEO} or
          *            {@link TvTrackInfo#TYPE_SUBTITLE}.
+         * @return {@code true} if the track selection was successful, {@code false} otherwise.
          * @see #notifyTrackSelected
          */
         public boolean onSelectTrack(int type, String trackId) {
diff --git a/media/jni/soundpool/SoundPool.cpp b/media/jni/soundpool/SoundPool.cpp
index 1205f9d..10233f3 100644
--- a/media/jni/soundpool/SoundPool.cpp
+++ b/media/jni/soundpool/SoundPool.cpp
@@ -256,7 +256,7 @@
     dump();
 
     // allocate a channel
-    channel = allocateChannel_l(priority);
+    channel = allocateChannel_l(priority, sampleID);
 
     // no channel allocated - return 0
     if (!channel) {
@@ -271,13 +271,25 @@
     return channelID;
 }
 
-SoundChannel* SoundPool::allocateChannel_l(int priority)
+SoundChannel* SoundPool::allocateChannel_l(int priority, int sampleID)
 {
     List<SoundChannel*>::iterator iter;
     SoundChannel* channel = NULL;
 
-    // allocate a channel
+    // check if channel for given sampleID still available
     if (!mChannels.empty()) {
+        for (iter = mChannels.begin(); iter != mChannels.end(); ++iter) {
+            if (sampleID == (*iter)->getPrevSampleID() && (*iter)->state() == SoundChannel::IDLE) {
+                channel = *iter;
+                mChannels.erase(iter);
+                ALOGV("Allocated recycled channel for same sampleID");
+                break;
+            }
+        }
+    }
+
+    // allocate any channel
+    if (!channel && !mChannels.empty()) {
         iter = mChannels.begin();
         if (priority >= (*iter)->priority()) {
             channel = *iter;
@@ -648,6 +660,7 @@
 void SoundChannel::init(SoundPool* soundPool)
 {
     mSoundPool = soundPool;
+    mPrevSampleID = -1;
 }
 
 // call with sound pool lock held
@@ -656,7 +669,7 @@
 {
     sp<AudioTrack> oldTrack;
     sp<AudioTrack> newTrack;
-    status_t status;
+    status_t status = NO_ERROR;
 
     { // scope for the lock
         Mutex::Autolock lock(&mLock);
@@ -703,38 +716,43 @@
         }
 #endif
 
-        // mToggle toggles each time a track is started on a given channel.
-        // The toggle is concatenated with the SoundChannel address and passed to AudioTrack
-        // as callback user data. This enables the detection of callbacks received from the old
-        // audio track while the new one is being started and avoids processing them with
-        // wrong audio audio buffer size  (mAudioBufferSize)
-        unsigned long toggle = mToggle ^ 1;
-        void *userData = (void *)((unsigned long)this | toggle);
-        audio_channel_mask_t channelMask = audio_channel_out_mask_from_count(numChannels);
+        if (!mAudioTrack.get() || mPrevSampleID != sample->sampleID()) {
+            // mToggle toggles each time a track is started on a given channel.
+            // The toggle is concatenated with the SoundChannel address and passed to AudioTrack
+            // as callback user data. This enables the detection of callbacks received from the old
+            // audio track while the new one is being started and avoids processing them with
+            // wrong audio audio buffer size  (mAudioBufferSize)
+            unsigned long toggle = mToggle ^ 1;
+            void *userData = (void *)((unsigned long)this | toggle);
+            audio_channel_mask_t channelMask = audio_channel_out_mask_from_count(numChannels);
 
-        // do not create a new audio track if current track is compatible with sample parameters
-#ifdef USE_SHARED_MEM_BUFFER
-        newTrack = new AudioTrack(streamType, sampleRate, sample->format(),
-                channelMask, sample->getIMemory(), AUDIO_OUTPUT_FLAG_FAST, callback, userData);
-#else
-        uint32_t bufferFrames = (totalFrames + (kDefaultBufferCount - 1)) / kDefaultBufferCount;
-        newTrack = new AudioTrack(streamType, sampleRate, sample->format(),
-                channelMask, frameCount, AUDIO_OUTPUT_FLAG_FAST, callback, userData,
-                bufferFrames);
-#endif
-        oldTrack = mAudioTrack;
-        status = newTrack->initCheck();
-        if (status != NO_ERROR) {
-            ALOGE("Error creating AudioTrack");
-            goto exit;
+            // do not create a new audio track if current track is compatible with sample parameters
+    #ifdef USE_SHARED_MEM_BUFFER
+            newTrack = new AudioTrack(streamType, sampleRate, sample->format(),
+                    channelMask, sample->getIMemory(), AUDIO_OUTPUT_FLAG_FAST, callback, userData);
+    #else
+            uint32_t bufferFrames = (totalFrames + (kDefaultBufferCount - 1)) / kDefaultBufferCount;
+            newTrack = new AudioTrack(streamType, sampleRate, sample->format(),
+                    channelMask, frameCount, AUDIO_OUTPUT_FLAG_FAST, callback, userData,
+                    bufferFrames);
+    #endif
+            oldTrack = mAudioTrack;
+            status = newTrack->initCheck();
+            if (status != NO_ERROR) {
+                ALOGE("Error creating AudioTrack");
+                goto exit;
+            }
+            // From now on, AudioTrack callbacks received with previous toggle value will be ignored.
+            mToggle = toggle;
+            mAudioTrack = newTrack;
+            ALOGV("using new track %p for sample %d", newTrack.get(), sample->sampleID());
+        } else {
+            newTrack = mAudioTrack;
+            newTrack->setSampleRate(sampleRate);
+            ALOGV("reusing track %p for sample %d", mAudioTrack.get(), sample->sampleID());
         }
-        ALOGV("setVolume %p", newTrack.get());
         newTrack->setVolume(leftVolume, rightVolume);
         newTrack->setLoop(0, frameCount, loop);
-
-        // From now on, AudioTrack callbacks received with previous toggle value will be ignored.
-        mToggle = toggle;
-        mAudioTrack = newTrack;
         mPos = 0;
         mSample = sample;
         mChannelID = nextChannelID;
@@ -877,6 +895,7 @@
         setVolume_l(0, 0);
         ALOGV("stop");
         mAudioTrack->stop();
+        mPrevSampleID = mSample->sampleID();
         mSample.clear();
         mState = IDLE;
         mPriority = IDLE_PRIORITY;
diff --git a/media/jni/soundpool/SoundPool.h b/media/jni/soundpool/SoundPool.h
index d19cd91..4aacf53 100644
--- a/media/jni/soundpool/SoundPool.h
+++ b/media/jni/soundpool/SoundPool.h
@@ -136,6 +136,7 @@
     void nextEvent();
     int nextChannelID() { return mNextEvent.channelID(); }
     void dump();
+    int getPrevSampleID(void) { return mPrevSampleID; }
 
 private:
     static void callback(int event, void* user, void *info);
@@ -152,6 +153,7 @@
     int                 mAudioBufferSize;
     unsigned long       mToggle;
     bool                mAutoPaused;
+    int                 mPrevSampleID;
 };
 
 // application object for managing a pool of sounds
@@ -193,7 +195,7 @@
     sp<Sample> findSample(int sampleID) { return mSamples.valueFor(sampleID); }
     SoundChannel* findChannel (int channelID);
     SoundChannel* findNextChannel (int channelID);
-    SoundChannel* allocateChannel_l(int priority);
+    SoundChannel* allocateChannel_l(int priority, int sampleID);
     void moveToFront_l(SoundChannel* channel);
     void notify(SoundPoolEvent event);
     void dump();
diff --git a/packages/CaptivePortalLogin/res/values-af/strings.xml b/packages/CaptivePortalLogin/res/values-af/strings.xml
index 24fc2ae..f36746a 100644
--- a/packages/CaptivePortalLogin/res/values-af/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-af/strings.xml
@@ -4,6 +4,5 @@
     <string name="app_name" msgid="5934709770924185752">"CaptivePortal-aanmelding"</string>
     <string name="action_use_network" msgid="6076184727448466030">"Gebruik hierdie netwerk nes dit is"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Moenie hierdie netwerk gebruik nie"</string>
-    <!-- no translation found for action_bar_label (917235635415966620) -->
-    <skip />
+    <string name="action_bar_label" msgid="917235635415966620">"Meld by netwerk aan"</string>
 </resources>
diff --git a/packages/CaptivePortalLogin/res/values-am/strings.xml b/packages/CaptivePortalLogin/res/values-am/strings.xml
index 260f139..d49e146 100644
--- a/packages/CaptivePortalLogin/res/values-am/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-am/strings.xml
@@ -4,6 +4,5 @@
     <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string>
     <string name="action_use_network" msgid="6076184727448466030">"ይህን አውታረ መረብ እንዳለ ተጠቀምበት"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"ይህን አውታረ መረብ አትጠቀምበት"</string>
-    <!-- no translation found for action_bar_label (917235635415966620) -->
-    <skip />
+    <string name="action_bar_label" msgid="917235635415966620">"ወደ አውታረ መረብ በመለያ ይግቡ"</string>
 </resources>
diff --git a/packages/CaptivePortalLogin/res/values-ar/strings.xml b/packages/CaptivePortalLogin/res/values-ar/strings.xml
index b42bc93..a5150fd 100644
--- a/packages/CaptivePortalLogin/res/values-ar/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-ar/strings.xml
@@ -4,6 +4,5 @@
     <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string>
     <string name="action_use_network" msgid="6076184727448466030">"استخدام هذه الشبكة كما هي"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"عدم استخدام هذه الشبكة"</string>
-    <!-- no translation found for action_bar_label (917235635415966620) -->
-    <skip />
+    <string name="action_bar_label" msgid="917235635415966620">"تسجيل الدخول إلى الشبكة"</string>
 </resources>
diff --git a/packages/CaptivePortalLogin/res/values-da/strings.xml b/packages/CaptivePortalLogin/res/values-da/strings.xml
index 3d4db16..0b24ea8 100644
--- a/packages/CaptivePortalLogin/res/values-da/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-da/strings.xml
@@ -4,6 +4,5 @@
     <string name="app_name" msgid="5934709770924185752">"Login til captive portal"</string>
     <string name="action_use_network" msgid="6076184727448466030">"Brug dette netværk, som det er"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Brug ikke dette netværk"</string>
-    <!-- no translation found for action_bar_label (917235635415966620) -->
-    <skip />
+    <string name="action_bar_label" msgid="917235635415966620">"Log ind på netværk"</string>
 </resources>
diff --git a/packages/CaptivePortalLogin/res/values-el/strings.xml b/packages/CaptivePortalLogin/res/values-el/strings.xml
index e9ffac7..2a67af5 100644
--- a/packages/CaptivePortalLogin/res/values-el/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-el/strings.xml
@@ -4,6 +4,5 @@
     <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string>
     <string name="action_use_network" msgid="6076184727448466030">"Χρήση αυτού του δικτύου ως έχει"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Να μη χρησιμοποιείται αυτό το δίκτυο"</string>
-    <!-- no translation found for action_bar_label (917235635415966620) -->
-    <skip />
+    <string name="action_bar_label" msgid="917235635415966620">"Σύνδεση στο δίκτυο"</string>
 </resources>
diff --git a/packages/CaptivePortalLogin/res/values-en-rGB/strings.xml b/packages/CaptivePortalLogin/res/values-en-rGB/strings.xml
index 7346de4..c1c03f8 100644
--- a/packages/CaptivePortalLogin/res/values-en-rGB/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-en-rGB/strings.xml
@@ -4,6 +4,5 @@
     <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string>
     <string name="action_use_network" msgid="6076184727448466030">"Use this network as is"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Do not use this network"</string>
-    <!-- no translation found for action_bar_label (917235635415966620) -->
-    <skip />
+    <string name="action_bar_label" msgid="917235635415966620">"Sign in to network"</string>
 </resources>
diff --git a/packages/CaptivePortalLogin/res/values-en-rIN/strings.xml b/packages/CaptivePortalLogin/res/values-en-rIN/strings.xml
index 7346de4..c1c03f8 100644
--- a/packages/CaptivePortalLogin/res/values-en-rIN/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-en-rIN/strings.xml
@@ -4,6 +4,5 @@
     <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string>
     <string name="action_use_network" msgid="6076184727448466030">"Use this network as is"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Do not use this network"</string>
-    <!-- no translation found for action_bar_label (917235635415966620) -->
-    <skip />
+    <string name="action_bar_label" msgid="917235635415966620">"Sign in to network"</string>
 </resources>
diff --git a/packages/CaptivePortalLogin/res/values-es-rUS/strings.xml b/packages/CaptivePortalLogin/res/values-es-rUS/strings.xml
index 5e4cc65..6c116f9 100644
--- a/packages/CaptivePortalLogin/res/values-es-rUS/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-es-rUS/strings.xml
@@ -4,6 +4,5 @@
     <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string>
     <string name="action_use_network" msgid="6076184727448466030">"Usar esta red como está"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"No usar esta red"</string>
-    <!-- no translation found for action_bar_label (917235635415966620) -->
-    <skip />
+    <string name="action_bar_label" msgid="917235635415966620">"Acceder a la red"</string>
 </resources>
diff --git a/packages/CaptivePortalLogin/res/values-et-rEE/strings.xml b/packages/CaptivePortalLogin/res/values-et-rEE/strings.xml
index ed9b2bb..306e332 100644
--- a/packages/CaptivePortalLogin/res/values-et-rEE/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-et-rEE/strings.xml
@@ -4,6 +4,5 @@
     <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string>
     <string name="action_use_network" msgid="6076184727448466030">"Kasuta seda võrku olemasoleval kujul"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Ära kasuta seda võrku"</string>
-    <!-- no translation found for action_bar_label (917235635415966620) -->
-    <skip />
+    <string name="action_bar_label" msgid="917235635415966620">"Logi võrku sisse"</string>
 </resources>
diff --git a/packages/CaptivePortalLogin/res/values-fa/strings.xml b/packages/CaptivePortalLogin/res/values-fa/strings.xml
index cef9974..b57e692 100644
--- a/packages/CaptivePortalLogin/res/values-fa/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-fa/strings.xml
@@ -4,6 +4,5 @@
     <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string>
     <string name="action_use_network" msgid="6076184727448466030">"از این شبکه همانطور که هست استفاده شود"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"از این شبکه استفاده نشود"</string>
-    <!-- no translation found for action_bar_label (917235635415966620) -->
-    <skip />
+    <string name="action_bar_label" msgid="917235635415966620">"ورود به سیستم شبکه"</string>
 </resources>
diff --git a/packages/CaptivePortalLogin/res/values-fi/strings.xml b/packages/CaptivePortalLogin/res/values-fi/strings.xml
index e2df340..1d48d60 100644
--- a/packages/CaptivePortalLogin/res/values-fi/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-fi/strings.xml
@@ -4,6 +4,5 @@
     <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string>
     <string name="action_use_network" msgid="6076184727448466030">"Käytä tätä verkkoa sellaisenaan"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Älä käytä tätä verkkoa"</string>
-    <!-- no translation found for action_bar_label (917235635415966620) -->
-    <skip />
+    <string name="action_bar_label" msgid="917235635415966620">"Kirjaudu verkkoon"</string>
 </resources>
diff --git a/packages/CaptivePortalLogin/res/values-fr-rCA/strings.xml b/packages/CaptivePortalLogin/res/values-fr-rCA/strings.xml
index 4b012ce..535a9cf 100644
--- a/packages/CaptivePortalLogin/res/values-fr-rCA/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-fr-rCA/strings.xml
@@ -4,6 +4,5 @@
     <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string>
     <string name="action_use_network" msgid="6076184727448466030">"Utiliser ce réseau tel quel"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Ne pas utiliser ce réseau"</string>
-    <!-- no translation found for action_bar_label (917235635415966620) -->
-    <skip />
+    <string name="action_bar_label" msgid="917235635415966620">"Connectez-vous au réseau"</string>
 </resources>
diff --git a/packages/CaptivePortalLogin/res/values-in/strings.xml b/packages/CaptivePortalLogin/res/values-in/strings.xml
index 41a4f53..196d327 100644
--- a/packages/CaptivePortalLogin/res/values-in/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-in/strings.xml
@@ -4,6 +4,5 @@
     <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string>
     <string name="action_use_network" msgid="6076184727448466030">"Gunakan jaringan ini sebagaimana adanya"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Jangan gunakan jaringan ini"</string>
-    <!-- no translation found for action_bar_label (917235635415966620) -->
-    <skip />
+    <string name="action_bar_label" msgid="917235635415966620">"Masuk ke jaringan"</string>
 </resources>
diff --git a/packages/CaptivePortalLogin/res/values-is-rIS/strings.xml b/packages/CaptivePortalLogin/res/values-is-rIS/strings.xml
index 83ad5ec..27dc12b 100644
--- a/packages/CaptivePortalLogin/res/values-is-rIS/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-is-rIS/strings.xml
@@ -4,6 +4,5 @@
     <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string>
     <string name="action_use_network" msgid="6076184727448466030">"Nota þetta net óbreytt"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Ekki nota þetta net"</string>
-    <!-- no translation found for action_bar_label (917235635415966620) -->
-    <skip />
+    <string name="action_bar_label" msgid="917235635415966620">"Skrá inn á net"</string>
 </resources>
diff --git a/packages/CaptivePortalLogin/res/values-it/strings.xml b/packages/CaptivePortalLogin/res/values-it/strings.xml
index 02b6586..fc4fcd9 100644
--- a/packages/CaptivePortalLogin/res/values-it/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-it/strings.xml
@@ -4,6 +4,5 @@
     <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string>
     <string name="action_use_network" msgid="6076184727448466030">"Utilizza questa rete così com\'è"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Non utilizzare questa rete"</string>
-    <!-- no translation found for action_bar_label (917235635415966620) -->
-    <skip />
+    <string name="action_bar_label" msgid="917235635415966620">"Accedi alla rete"</string>
 </resources>
diff --git a/packages/CaptivePortalLogin/res/values-iw/strings.xml b/packages/CaptivePortalLogin/res/values-iw/strings.xml
index 71e1143..c88dd0d 100644
--- a/packages/CaptivePortalLogin/res/values-iw/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-iw/strings.xml
@@ -4,6 +4,5 @@
     <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string>
     <string name="action_use_network" msgid="6076184727448466030">"השתמש ברשת זו כפי שהיא"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"אל תשתמש ברשת זו"</string>
-    <!-- no translation found for action_bar_label (917235635415966620) -->
-    <skip />
+    <string name="action_bar_label" msgid="917235635415966620">"היכנס לרשת"</string>
 </resources>
diff --git a/packages/CaptivePortalLogin/res/values-lo-rLA/strings.xml b/packages/CaptivePortalLogin/res/values-lo-rLA/strings.xml
index 587267c..0cd0f4e 100644
--- a/packages/CaptivePortalLogin/res/values-lo-rLA/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-lo-rLA/strings.xml
@@ -4,6 +4,5 @@
     <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string>
     <string name="action_use_network" msgid="6076184727448466030">"​ໃຊ້​ເຄືອ​ຂ່າຍ​ນີ້​ຕາມ​ທີ່​ມັນ​ເປັນ"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"ບໍ່​ໃຊ້​ເຄືອ​ຂ່າຍ​ນີ້"</string>
-    <!-- no translation found for action_bar_label (917235635415966620) -->
-    <skip />
+    <string name="action_bar_label" msgid="917235635415966620">"ລົງຊື່ເຂົ້າເຄືອຂ່າຍ"</string>
 </resources>
diff --git a/packages/CaptivePortalLogin/res/values-ms-rMY/strings.xml b/packages/CaptivePortalLogin/res/values-ms-rMY/strings.xml
index dfed2db..91b2070 100644
--- a/packages/CaptivePortalLogin/res/values-ms-rMY/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-ms-rMY/strings.xml
@@ -4,6 +4,5 @@
     <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string>
     <string name="action_use_network" msgid="6076184727448466030">"Gunakan rangkaian ini"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Jangan gunakan rangkaian ini"</string>
-    <!-- no translation found for action_bar_label (917235635415966620) -->
-    <skip />
+    <string name="action_bar_label" msgid="917235635415966620">"Log masuk ke rangkaian"</string>
 </resources>
diff --git a/packages/CaptivePortalLogin/res/values-my-rMM/strings.xml b/packages/CaptivePortalLogin/res/values-my-rMM/strings.xml
index c1db1f8..b82ced3 100644
--- a/packages/CaptivePortalLogin/res/values-my-rMM/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-my-rMM/strings.xml
@@ -4,6 +4,5 @@
     <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string>
     <string name="action_use_network" msgid="6076184727448466030">"ဒီကွန်ရက်ကို လက်ရှိအတိုင်း သုံးရန်"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"ဒီကွန်ရက်ကို မသုံးပါနှင့်"</string>
-    <!-- no translation found for action_bar_label (917235635415966620) -->
-    <skip />
+    <string name="action_bar_label" msgid="917235635415966620">"ကွန်ယက်သို့ လက်မှတ်ထိုးဝင်ရန်"</string>
 </resources>
diff --git a/packages/CaptivePortalLogin/res/values-ne-rNP/strings.xml b/packages/CaptivePortalLogin/res/values-ne-rNP/strings.xml
index 1a8969a..ccae893 100644
--- a/packages/CaptivePortalLogin/res/values-ne-rNP/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-ne-rNP/strings.xml
@@ -4,6 +4,5 @@
     <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string>
     <string name="action_use_network" msgid="6076184727448466030">"यो सञ्जाल जस्तो छ प्रयोग गर्नुहोस्"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"यो सञ्जाल प्रयोग नगर्नुहोस्"</string>
-    <!-- no translation found for action_bar_label (917235635415966620) -->
-    <skip />
+    <string name="action_bar_label" msgid="917235635415966620">"सञ्जालमा साइन इन गर्नुहोस्"</string>
 </resources>
diff --git a/packages/CaptivePortalLogin/res/values-pt-rPT/strings.xml b/packages/CaptivePortalLogin/res/values-pt-rPT/strings.xml
index d06ff6c..241d977 100644
--- a/packages/CaptivePortalLogin/res/values-pt-rPT/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-pt-rPT/strings.xml
@@ -4,6 +4,5 @@
     <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string>
     <string name="action_use_network" msgid="6076184727448466030">"Utilizar esta rede como está"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Não utilizar esta rede"</string>
-    <!-- no translation found for action_bar_label (917235635415966620) -->
-    <skip />
+    <string name="action_bar_label" msgid="917235635415966620">"Início de sessão na rede"</string>
 </resources>
diff --git a/packages/CaptivePortalLogin/res/values-pt/strings.xml b/packages/CaptivePortalLogin/res/values-pt/strings.xml
index 524a6ee..b1e6ac9 100644
--- a/packages/CaptivePortalLogin/res/values-pt/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-pt/strings.xml
@@ -4,6 +4,5 @@
     <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string>
     <string name="action_use_network" msgid="6076184727448466030">"Usar esta rede como está"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Não usar esta rede"</string>
-    <!-- no translation found for action_bar_label (917235635415966620) -->
-    <skip />
+    <string name="action_bar_label" msgid="917235635415966620">"Fazer login na rede"</string>
 </resources>
diff --git a/packages/CaptivePortalLogin/res/values-ro/strings.xml b/packages/CaptivePortalLogin/res/values-ro/strings.xml
index ca95028..36a1516 100644
--- a/packages/CaptivePortalLogin/res/values-ro/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-ro/strings.xml
@@ -4,6 +4,5 @@
     <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string>
     <string name="action_use_network" msgid="6076184727448466030">"Utilizați această rețea în starea actuală"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Nu utilizați această rețea"</string>
-    <!-- no translation found for action_bar_label (917235635415966620) -->
-    <skip />
+    <string name="action_bar_label" msgid="917235635415966620">"Conectați-vă la rețea"</string>
 </resources>
diff --git a/packages/CaptivePortalLogin/res/values-sk/strings.xml b/packages/CaptivePortalLogin/res/values-sk/strings.xml
index 1b0efd6..560bdc484 100644
--- a/packages/CaptivePortalLogin/res/values-sk/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-sk/strings.xml
@@ -4,6 +4,5 @@
     <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string>
     <string name="action_use_network" msgid="6076184727448466030">"Použiť túto sieť tak, ako je"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Túto sieť nepoužívať"</string>
-    <!-- no translation found for action_bar_label (917235635415966620) -->
-    <skip />
+    <string name="action_bar_label" msgid="917235635415966620">"Prihlásiť sa do siete"</string>
 </resources>
diff --git a/packages/CaptivePortalLogin/res/values-sv/strings.xml b/packages/CaptivePortalLogin/res/values-sv/strings.xml
index 93acce1..1de6630 100644
--- a/packages/CaptivePortalLogin/res/values-sv/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-sv/strings.xml
@@ -4,6 +4,5 @@
     <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string>
     <string name="action_use_network" msgid="6076184727448466030">"Använd det här nätverket som det är"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Använd inte det här nätverket"</string>
-    <!-- no translation found for action_bar_label (917235635415966620) -->
-    <skip />
+    <string name="action_bar_label" msgid="917235635415966620">"Logga in på nätverket"</string>
 </resources>
diff --git a/packages/CaptivePortalLogin/res/values-sw/strings.xml b/packages/CaptivePortalLogin/res/values-sw/strings.xml
index 59ab43e..d4d22a6 100644
--- a/packages/CaptivePortalLogin/res/values-sw/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-sw/strings.xml
@@ -4,6 +4,5 @@
     <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string>
     <string name="action_use_network" msgid="6076184727448466030">"Tumia mtandao huu jinsi ulivyo"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Usitumie mtandao huu"</string>
-    <!-- no translation found for action_bar_label (917235635415966620) -->
-    <skip />
+    <string name="action_bar_label" msgid="917235635415966620">"Ingia katika mtandao"</string>
 </resources>
diff --git a/packages/CaptivePortalLogin/res/values-th/strings.xml b/packages/CaptivePortalLogin/res/values-th/strings.xml
index ab276bb..1bfe45d 100644
--- a/packages/CaptivePortalLogin/res/values-th/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-th/strings.xml
@@ -4,6 +4,5 @@
     <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string>
     <string name="action_use_network" msgid="6076184727448466030">"ใช้เครือข่ายนี้ตามที่เป็นอยู่"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"ไม่ใช้เครือข่ายนี้"</string>
-    <!-- no translation found for action_bar_label (917235635415966620) -->
-    <skip />
+    <string name="action_bar_label" msgid="917235635415966620">"ลงชื่อเข้าใช้เครือข่าย"</string>
 </resources>
diff --git a/packages/CaptivePortalLogin/res/values-uk/strings.xml b/packages/CaptivePortalLogin/res/values-uk/strings.xml
index ced9a91..a39607c 100644
--- a/packages/CaptivePortalLogin/res/values-uk/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-uk/strings.xml
@@ -4,6 +4,5 @@
     <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string>
     <string name="action_use_network" msgid="6076184727448466030">"Використовувати цю мережу як є"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Не використовувати цю мережу"</string>
-    <!-- no translation found for action_bar_label (917235635415966620) -->
-    <skip />
+    <string name="action_bar_label" msgid="917235635415966620">"Увійти в мережу"</string>
 </resources>
diff --git a/packages/CaptivePortalLogin/res/values-zu/strings.xml b/packages/CaptivePortalLogin/res/values-zu/strings.xml
index 6791b00..aef043c 100644
--- a/packages/CaptivePortalLogin/res/values-zu/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-zu/strings.xml
@@ -4,6 +4,5 @@
     <string name="app_name" msgid="5934709770924185752">"I-CaptivePortalLogin"</string>
     <string name="action_use_network" msgid="6076184727448466030">"Sebenzisa le nethiwekhi njengoba injalo"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Ungasebenzisi le nethiwekhi"</string>
-    <!-- no translation found for action_bar_label (917235635415966620) -->
-    <skip />
+    <string name="action_bar_label" msgid="917235635415966620">"Ngena ngemvume kunethiwekhi"</string>
 </resources>
diff --git a/packages/DocumentsUI/src/com/android/documentsui/IconUtils.java b/packages/DocumentsUI/src/com/android/documentsui/IconUtils.java
index 5378ea9..b43fedf 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/IconUtils.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/IconUtils.java
@@ -268,7 +268,7 @@
     public static Drawable applyTintColor(Context context, int drawableId, int tintColorId) {
         final Drawable icon = context.getDrawable(drawableId);
         icon.mutate();
-        icon.setTintList(context.getResources().getColorStateList(tintColorId));
+        icon.setTintList(context.getColorStateList(tintColorId));
         return icon;
     }
 
diff --git a/packages/PrintSpooler/src/com/android/printspooler/model/NotificationController.java b/packages/PrintSpooler/src/com/android/printspooler/model/NotificationController.java
index 5233c79..33db831 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/model/NotificationController.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/model/NotificationController.java
@@ -125,7 +125,7 @@
                 .setWhen(System.currentTimeMillis())
                 .setOngoing(true)
                 .setShowWhen(true)
-                .setColor(mContext.getResources().getColor(
+                .setColor(mContext.getColor(
                         com.android.internal.R.color.system_notification_accent_color));
         mNotificationManager.notify(0, builder.build());
     }
@@ -143,7 +143,7 @@
                 .setWhen(System.currentTimeMillis())
                 .setOngoing(true)
                 .setShowWhen(true)
-                .setColor(mContext.getResources().getColor(
+                .setColor(mContext.getColor(
                         com.android.internal.R.color.system_notification_accent_color));
         mNotificationManager.notify(0, builder.build());
     }
@@ -159,7 +159,7 @@
                 .setWhen(System.currentTimeMillis())
                 .setOngoing(true)
                 .setShowWhen(true)
-                .setColor(mContext.getResources().getColor(
+                .setColor(mContext.getColor(
                         com.android.internal.R.color.system_notification_accent_color));
            mNotificationManager.notify(0, builder.build());
     }
@@ -173,7 +173,7 @@
                 .setWhen(System.currentTimeMillis())
                 .setOngoing(true)
                 .setShowWhen(true)
-                .setColor(mContext.getResources().getColor(
+                .setColor(mContext.getColor(
                         com.android.internal.R.color.system_notification_accent_color));
         mNotificationManager.notify(0, builder.build());
     }
@@ -206,7 +206,7 @@
 
         builder.setNumber(printJobCount);
         builder.setStyle(inboxStyle);
-        builder.setColor(mContext.getResources().getColor(
+        builder.setColor(mContext.getColor(
                 com.android.internal.R.color.system_notification_accent_color));
 
         mNotificationManager.notify(0, builder.build());
diff --git a/packages/PrintSpooler/src/com/android/printspooler/widget/PrintContentView.java b/packages/PrintSpooler/src/com/android/printspooler/widget/PrintContentView.java
index bfcd334..e6613fa 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/widget/PrintContentView.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/widget/PrintContentView.java
@@ -87,7 +87,7 @@
         super(context, attrs);
         mDragger = ViewDragHelper.create(this, new DragCallbacks());
 
-        mScrimColor = context.getResources().getColor(R.color.print_preview_scrim_color);
+        mScrimColor = context.getColor(R.color.print_preview_scrim_color);
 
         // The options view is sliding under the static header but appears
         // after it in the layout, so we will draw in opposite order.
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
index eac83d8..7f826ef 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
@@ -793,7 +793,7 @@
         }
 
         // Figure out the white list and redirects to the global table.
-        String[] whitelist = null;
+        final String[] whitelist;
         if (contentUri.equals(Settings.Secure.CONTENT_URI)) {
             whitelist = Settings.Secure.SETTINGS_TO_BACKUP;
         } else if (contentUri.equals(Settings.System.CONTENT_URI)) {
@@ -809,6 +809,7 @@
         Map<String, String> cachedEntries = new HashMap<String, String>();
         ContentValues contentValues = new ContentValues(2);
         SettingsHelper settingsHelper = mSettingsHelper;
+        ContentResolver cr = getContentResolver();
 
         final int whiteListSize = whitelist.length;
         for (int i = 0; i < whiteListSize; i++) {
@@ -841,14 +842,7 @@
             final Uri destination = (movedToGlobal != null && movedToGlobal.contains(key))
                     ? Settings.Global.CONTENT_URI
                     : contentUri;
-
-            // The helper doesn't care what namespace the keys are in
-            if (settingsHelper.restoreValue(key, value)) {
-                contentValues.clear();
-                contentValues.put(Settings.NameValueTable.NAME, key);
-                contentValues.put(Settings.NameValueTable.VALUE, value);
-                getContentResolver().insert(destination, contentValues);
-            }
+            settingsHelper.restoreValue(this, cr, contentValues, destination, key, value);
 
             if (DEBUG) {
                 Log.d(TAG, "Restored setting: " + destination + " : "+ key + "=" + value);
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
index 4144c80..30786f0 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
@@ -19,7 +19,10 @@
 import android.app.ActivityManagerNative;
 import android.app.IActivityManager;
 import android.app.backup.IBackupManager;
+import android.content.ContentResolver;
+import android.content.ContentValues;
 import android.content.Context;
+import android.content.Intent;
 import android.content.res.Configuration;
 import android.location.LocationManager;
 import android.media.AudioManager;
@@ -28,10 +31,12 @@
 import android.os.IPowerManager;
 import android.os.RemoteException;
 import android.os.ServiceManager;
+import android.os.UserHandle;
 import android.os.UserManager;
 import android.provider.Settings;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
+import android.util.ArraySet;
 
 import java.util.Locale;
 
@@ -41,6 +46,49 @@
     private AudioManager mAudioManager;
     private TelephonyManager mTelephonyManager;
 
+    /**
+     * A few settings elements are special in that a restore of those values needs to
+     * be post-processed by relevant parts of the OS.  A restore of any settings element
+     * mentioned in this table will therefore cause the system to send a broadcast with
+     * the {@link Intent#ACTION_SETTING_RESTORED} action, with extras naming the
+     * affected setting and supplying its pre-restore value for comparison.
+     *
+     * @see Intent#ACTION_SETTING_RESTORED
+     * @see System#SETTINGS_TO_BACKUP
+     * @see Secure#SETTINGS_TO_BACKUP
+     * @see Global#SETTINGS_TO_BACKUP
+     *
+     * {@hide}
+     */
+    private static final ArraySet<String> sBroadcastOnRestore;
+    static {
+        sBroadcastOnRestore = new ArraySet<String>(2);
+        sBroadcastOnRestore.add(Settings.Secure.ENABLED_NOTIFICATION_LISTENERS);
+        sBroadcastOnRestore.add(Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES);
+    }
+
+    private interface SettingsLookup {
+        public String lookup(ContentResolver resolver, String name, int userHandle);
+    }
+
+    private static SettingsLookup sSystemLookup = new SettingsLookup() {
+        public String lookup(ContentResolver resolver, String name, int userHandle) {
+            return Settings.System.getStringForUser(resolver, name, userHandle);
+        }
+    };
+
+    private static SettingsLookup sSecureLookup = new SettingsLookup() {
+        public String lookup(ContentResolver resolver, String name, int userHandle) {
+            return Settings.Secure.getStringForUser(resolver, name, userHandle);
+        }
+    };
+
+    private static SettingsLookup sGlobalLookup = new SettingsLookup() {
+        public String lookup(ContentResolver resolver, String name, int userHandle) {
+            return Settings.Global.getStringForUser(resolver, name, userHandle);
+        }
+    };
+
     public SettingsHelper(Context context) {
         mContext = context;
         mAudioManager = (AudioManager) context
@@ -58,24 +106,67 @@
      * some cases the data will be written by the call to the appropriate API,
      * and in some cases the property value needs to be modified before setting.
      */
-    public boolean restoreValue(String name, String value) {
-        if (Settings.System.SCREEN_BRIGHTNESS.equals(name)) {
-            setBrightness(Integer.parseInt(value));
-        } else if (Settings.System.SOUND_EFFECTS_ENABLED.equals(name)) {
-            setSoundEffects(Integer.parseInt(value) == 1);
-        } else if (Settings.Secure.LOCATION_PROVIDERS_ALLOWED.equals(name)) {
-            setGpsLocation(value);
-            return false;
-        } else if (Settings.Secure.BACKUP_AUTO_RESTORE.equals(name)) {
-            setAutoRestore(Integer.parseInt(value) == 1);
-        } else if (isAlreadyConfiguredCriticalAccessibilitySetting(name)) {
-            return false;
-        } else if (Settings.System.RINGTONE.equals(name)
-                || Settings.System.NOTIFICATION_SOUND.equals(name)) {
-            setRingtone(name, value);
-            return false;
+    public void restoreValue(Context context, ContentResolver cr, ContentValues contentValues,
+            Uri destination, String name, String value) {
+        // Will we need a post-restore broadcast for this element?
+        String oldValue = null;
+        boolean sendBroadcast = false;
+        final SettingsLookup table;
+
+        if (destination.equals(Settings.Secure.CONTENT_URI)) {
+            table = sSecureLookup;
+        } else if (destination.equals(Settings.System.CONTENT_URI)) {
+            table = sSystemLookup;
+        } else { /* must be GLOBAL; this was preflighted by the caller */
+            table = sGlobalLookup;
         }
-        return true;
+
+        if (sBroadcastOnRestore.contains(name)) {
+            oldValue = table.lookup(cr, name, UserHandle.USER_OWNER);
+            sendBroadcast = true;
+        }
+
+        try {
+            if (Settings.System.SCREEN_BRIGHTNESS.equals(name)) {
+                setBrightness(Integer.parseInt(value));
+                // fall through to the ordinary write to settings
+            } else if (Settings.System.SOUND_EFFECTS_ENABLED.equals(name)) {
+                setSoundEffects(Integer.parseInt(value) == 1);
+                // fall through to the ordinary write to settings
+            } else if (Settings.Secure.LOCATION_PROVIDERS_ALLOWED.equals(name)) {
+                setGpsLocation(value);
+                return;
+            } else if (Settings.Secure.BACKUP_AUTO_RESTORE.equals(name)) {
+                setAutoRestore(Integer.parseInt(value) == 1);
+            } else if (isAlreadyConfiguredCriticalAccessibilitySetting(name)) {
+                return;
+            } else if (Settings.System.RINGTONE.equals(name)
+                    || Settings.System.NOTIFICATION_SOUND.equals(name)) {
+                setRingtone(name, value);
+                return;
+            }
+
+            // Default case: write the restored value to settings
+            contentValues.clear();
+            contentValues.put(Settings.NameValueTable.NAME, name);
+            contentValues.put(Settings.NameValueTable.VALUE, value);
+            cr.insert(destination, contentValues);
+        } catch (Exception e) {
+            // If we fail to apply the setting, by definition nothing happened
+            sendBroadcast = false;
+        } finally {
+            // If this was an element of interest, send the "we just restored it"
+            // broadcast with the historical value now that the new value has
+            // been committed and observers kicked off.
+            if (sendBroadcast) {
+                Intent intent = new Intent(Intent.ACTION_SETTING_RESTORED)
+                        .setPackage("android").addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY)
+                        .putExtra(Intent.EXTRA_SETTING_NAME, name)
+                        .putExtra(Intent.EXTRA_SETTING_NEW_VALUE, value)
+                        .putExtra(Intent.EXTRA_SETTING_PREVIOUS_VALUE, oldValue);
+                context.sendBroadcastAsUser(intent, UserHandle.OWNER, null);
+            }
+        }
     }
 
     public String onBackupValue(String name, String value) {
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java
index 84e66ff..3bf6828 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java
@@ -17,7 +17,6 @@
 package com.android.providers.settings;
 
 import android.os.Handler;
-import android.os.HandlerThread;
 import android.os.Message;
 import android.os.SystemClock;
 import android.provider.Settings;
@@ -27,6 +26,7 @@
 import android.util.Slog;
 import android.util.Xml;
 import com.android.internal.annotations.GuardedBy;
+import com.android.internal.os.BackgroundThread;
 import libcore.io.IoUtils;
 import libcore.util.Objects;
 import org.xmlpull.v1.XmlPullParser;
@@ -153,7 +153,7 @@
         final int settingCount = mSettings.size();
         for (int i = settingCount - 1; i >= 0; i--) {
             String name = mSettings.keyAt(i);
-            // Settings defined by us are never dropped.
+            // Settings defined by use are never dropped.
             if (Settings.System.PUBLIC_SETTINGS.contains(name)
                     || Settings.System.PRIVATE_SETTINGS.contains(name)) {
                 continue;
@@ -494,7 +494,7 @@
         public static final int MSG_PERSIST_SETTINGS = 1;
 
         public MyHandler() {
-            super(PersistThread.getInstance().getLooper());
+            super(BackgroundThread.getHandler().getLooper());
         }
 
         @Override
@@ -574,24 +574,4 @@
             return true;
         }
     }
-
-    private static final class PersistThread extends HandlerThread {
-        private static final Object sLock = new Object();
-
-        private static PersistThread sInstance;
-
-        private PersistThread() {
-            super("settings.persist");
-        }
-
-        public static PersistThread getInstance() {
-            synchronized (sLock) {
-                if (sInstance == null) {
-                    sInstance = new PersistThread();
-                    sInstance.start();
-                }
-                return sInstance;
-            }
-        }
-    }
 }
diff --git a/packages/Shell/src/com/android/shell/BugreportReceiver.java b/packages/Shell/src/com/android/shell/BugreportReceiver.java
index 48ecaa5..e1bfc43 100644
--- a/packages/Shell/src/com/android/shell/BugreportReceiver.java
+++ b/packages/Shell/src/com/android/shell/BugreportReceiver.java
@@ -93,7 +93,7 @@
                         context, 0, notifIntent, PendingIntent.FLAG_CANCEL_CURRENT))
                 .setAutoCancel(true)
                 .setLocalOnly(true)
-                .setColor(context.getResources().getColor(
+                .setColor(context.getColor(
                         com.android.internal.R.color.system_notification_accent_color));
 
         NotificationManager.from(context).notify(TAG, 0, builder.build());
diff --git a/packages/SystemUI/res/layout/recents.xml b/packages/SystemUI/res/layout/recents.xml
index 26523f9..bdda527 100644
--- a/packages/SystemUI/res/layout/recents.xml
+++ b/packages/SystemUI/res/layout/recents.xml
@@ -32,12 +32,6 @@
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:focusable="true">
-        <!-- MultiStack Debug View -->
-        <ViewStub android:id="@+id/multistack_debug_view_stub"
-               android:layout="@layout/recents_multistack_debug"
-               android:layout_width="wrap_content"
-               android:layout_height="wrap_content"
-               android:layout_gravity="left|bottom" />
     </com.android.systemui.recents.views.RecentsView>
 
     <!-- Empty View -->
diff --git a/packages/SystemUI/res/layout/recents_multistack_debug.xml b/packages/SystemUI/res/layout/recents_multistack_debug.xml
deleted file mode 100644
index 6524a54..0000000
--- a/packages/SystemUI/res/layout/recents_multistack_debug.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    android:layout_gravity="left|bottom"
-    android:orientation="vertical">
-    <Button
-        android:id="@+id/add_stack"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:gravity="center"
-        android:padding="8dp"
-        android:textSize="20sp"
-        android:textColor="#ffffffff"
-        android:text="@string/recents_multistack_add_stack"
-        android:fontFamily="sans-serif"
-        android:background="#000000"
-        android:alpha="0.5" />
-    <Button
-        android:id="@+id/resize_stack"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:gravity="center"
-        android:padding="8dp"
-        android:textSize="20sp"
-        android:textColor="#ffffffff"
-        android:text="@string/recents_multistack_resize_stack"
-        android:fontFamily="sans-serif"
-        android:background="#000000"
-        android:alpha="0.5" />
-</LinearLayout>
\ No newline at end of file
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index 3b0a059..34e4beb 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Geen netwerk nie"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi af"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Geen gestoorde netwerke beskikbaar nie"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Uitsaaiskerm"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Saai tans uit"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Onbenoemde toestel"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Gereed om uit te saai"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"soek"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Kon nie <xliff:g id="APP">%s</xliff:g> begin nie."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Maak alle programme toe"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Verdeel horisontaal"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Verdeel vertikaal"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Verdeel gepasmaak"</string>
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index 2ceb2e4..827a8a3 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"ምንም አውታረ መረብ የለም"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi ጠፍቷል"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"ምንም የተቀመጡ አውታረ መረቦች አይገኙም"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"ማያ ገጽ ውሰድ"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"በመውሰድ ላይ"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"ያልተሰየመ መሳሪያ"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"ለመውሰድ ዝግጁ"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"ፈልግ"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g>ን መጀመር አልተቻለም።"</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"ሁሉንም ማመልከቻዎች አሰናብት"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"አግድም ክፈል"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"ቁልቁል ክፈል"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"በብጁ ክፈል"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"ከመክፈትዎ በፊት ይመልከቷቸው"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"አይ፣ አመሰግናለሁ"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"አዋቅር"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="screen_pinning_title" msgid="3273740381976175811">"ማያ ገጽ ተሰክቷል"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"ይህ እስከሚነቅሉት ድረስ ድረስ በዕይታ ውስጥ እንዲቆይ ያደርገዋል። ለመንቀል በተመሳሳይ ጊዜ ተመለስን እና አጠቃላይ ዕይታን አንድ ላይ ነክተው ይያዙ።"</string>
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index 8e7580b..104067a 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -261,7 +261,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"لا تتوفر شبكة"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"‏إيقاف Wi-Fi"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"لا تتوفر أية شبكة محفوظة"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"إرسال الشاشة"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"جارٍ الإرسال"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"جهاز لا يحمل اسمًا"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"جاهز للإرسال"</string>
@@ -291,9 +292,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"بحث"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"تعذر بدء <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"تجاهل كل التطبيقات"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"تقسيم أفقي"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"تقسيم رأسي"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"تقسيم مخصص"</string>
@@ -371,10 +369,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"الاطلاع عليها قبل إلغاء القفل"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"لا، شكرًا"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"إعداد"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="screen_pinning_title" msgid="3273740381976175811">"تم تثبيت الشاشة"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"يساعد هذا على استمرار العرض حتى يتم إلغاء التثبيت. ويمكنك لمس \"رجوع\" و\"عرض عام\" مع الاستمرار في وقت واحد لإلغاء التثبيت."</string>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index 2a97eaa..a4251be 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Няма мрежа"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi е изключен"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Няма налични запазени мрежи"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Екран за предаване"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Предава се"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Устройство без име"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Готово за предаване"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"търсене"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> не можа да стартира."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Отхвърляне на всички приложения"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Хоризонтално разделяне"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Вертикално разделяне"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Персонализирано разделяне"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Вижте известията, преди да отключите"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Няма нужда"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Настройване"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="screen_pinning_title" msgid="3273740381976175811">"Екранът е фиксиран"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Така екранът ще се показва, докато не го освободите. За да направите това, докоснете и задръжте бутона за връщане назад и този за общ преглед едновременно."</string>
diff --git a/packages/SystemUI/res/values-bn-rBD/strings.xml b/packages/SystemUI/res/values-bn-rBD/strings.xml
index bc305d5..b085767 100644
--- a/packages/SystemUI/res/values-bn-rBD/strings.xml
+++ b/packages/SystemUI/res/values-bn-rBD/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"কোনো নেটওয়ার্ক নেই"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi বন্ধ"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"কোন সংরক্ষিত নেটওয়ার্ক উপলব্ধ নেই"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"স্ক্রীন কাস্ট করুন"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"কাস্ট করা হচ্ছে"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"নামবিহীন ডিভাইস"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"কাস্ট করার জন্য প্রস্তুত"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"অনুসন্ধান"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> শুরু করা যায়নি৷"</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"সমস্ত অ্যাপ্লিকেশন খারিজ করুন"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"অনুভূমিক স্প্লিট"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"উল্লম্ব স্প্লিট"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"কাস্টম স্প্লিট করুন"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"আপনি আনলক করার আগে ওগুলো দেখুন"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"না থাক"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"সেট আপ"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="screen_pinning_title" msgid="3273740381976175811">"স্ক্রীন পিন করা হয়েছে"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"এটি আপনার আনপিন না করা পর্যন্ত এটিকে দর্শনে রাখে৷ আনপিন করতে একই সময়ে ফিরুন এবং ওভারভিউ এ স্পর্শ করে ধরে রাখুন৷"</string>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index 2854d0d..b260e44 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -259,7 +259,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"No hi ha cap xarxa"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi desconnectada"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"No hi ha cap xarxa desada disponible."</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Envia pantalla"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"En emissió"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Dispositiu sense nom"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"A punt per a l\'emissió"</string>
@@ -289,9 +290,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"cerca"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"No s\'ha pogut iniciar <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Descarta totes les aplicacions"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Divisió horitzontal"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Divisió vertical"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Divisió personalitzada"</string>
@@ -369,10 +367,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Mostra-les abans de desbloquejar"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"No"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Configura"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="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>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index 57ff15f..f1cbb7e 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -261,7 +261,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Žádná síť"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi vypnuta"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Nejsou dostupné žádné uložené sítě"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Odesílání obrazovky"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Odesílání"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Nepojmenované zařízení"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Připraveno k vysílání"</string>
@@ -291,9 +292,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"vyhledat"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Aplikaci <xliff:g id="APP">%s</xliff:g> nelze spustit."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Odstranit všechny aplikace"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Vodorovné rozdělení"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Vertikální rozdělení"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Vlastní rozdělení"</string>
@@ -371,10 +369,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Můžete si je přečíst před odemčením obrazovky."</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Ne, děkuji"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Nastavit"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="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>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index b1d0021..92efc89 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Intet netværk"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi slået fra"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Der er ingen tilgængelige gemte netværk"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Cast skærm"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Caster"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Enhed uden navn"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Klar til at caste"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"søg"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> kunne ikke startes."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Luk alle applikationer"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Opdel vandret"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Opdel lodret"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Opdel brugerdefineret"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Se dem, før du låser op"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Nej tak"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Konfigurer"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="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>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index 251b0de..1119f1f 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -259,7 +259,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Kein Netz"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"WLAN aus"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Keine gespeicherten Netzwerke verfügbar"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Bildschirm übertragen"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Wird übertragen"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Unbenanntes Gerät"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Startklar"</string>
@@ -289,9 +290,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"Suche"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> konnte nicht gestartet werden."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Alle Apps entfernen"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Geteilte Schaltfläche – horizontal"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Geteilte Schaltfläche – vertikal"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Geteilte Schaltfläche – benutzerdefiniert"</string>
@@ -369,10 +367,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Vor dem Entsperren anzeigen"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Nein danke"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Einrichten"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="screen_pinning_title" msgid="3273740381976175811">"Bildschirm ist fixiert"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Hiermit wird sie angezeigt, bis Sie die Fixierung aufheben. Berühren und halten Sie \"Zurück\" und \"Übersicht\" gleichzeitig, um die Fixierung aufzuheben."</string>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index 6586a3f..bc1b7a2 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -259,7 +259,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Κανένα δίκτυο"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi ανενεργό"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Δεν υπάρχουν διαθέσιμα αποθηκευμένα δίκτυα"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Οθόνη μετάδοσης"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Μετάδοση"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Ανώνυμη συσκευή"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Έτοιμο για μετάδοση"</string>
@@ -289,9 +290,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"αναζήτηση"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Δεν ήταν δυνατή η εκκίνηση της εφαρμογής <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Παράβλεψη όλων των εφαρμογών"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Οριζόντιος διαχωρισμός"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Κάθετος διαχωρισμός"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Προσαρμοσμένος διαχωρισμός"</string>
@@ -369,10 +367,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Εμφάνιση πριν το ξεκλείδωμα"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Όχι"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Ρύθμιση"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="screen_pinning_title" msgid="3273740381976175811">"Η οθόνη καρφιτσώθηκε"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Με αυτόν τον τρόπο παραμένει σε προβολή έως ότου την ξεκαρφιτσώσετε. Αγγίξτε παρατεταμένα \"Επιστροφή\" και \"Επισκόπηση\" ταυτόχρονα για ξεκαρφίτσωμα."</string>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index 94bb70e..9ac2a64 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"No Network"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi Off"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"No saved networks available"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Cast screen"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Casting"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Unnamed device"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Ready to cast"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"search"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Could not start <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Dismiss all applications"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Split Horizontal"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Split Vertical"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Split Customised"</string>
diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml
index 94bb70e..9ac2a64 100644
--- a/packages/SystemUI/res/values-en-rIN/strings.xml
+++ b/packages/SystemUI/res/values-en-rIN/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"No Network"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi Off"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"No saved networks available"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Cast screen"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Casting"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Unnamed device"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Ready to cast"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"search"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Could not start <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Dismiss all applications"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Split Horizontal"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Split Vertical"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Split Customised"</string>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index 1babfba..a605a03 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -259,7 +259,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Sin red"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi desactivada"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"No hay redes guardadas disponibles"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Transmitir pantalla"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Transmitiendo"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Dispositivo sin nombre"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Listo para transmitir"</string>
@@ -289,9 +290,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"buscar"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"No se pudo iniciar <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Descartar todas las aplicaciones"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"División horizontal"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"División vertical"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"División personalizada"</string>
@@ -369,10 +367,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Ver antes de desbloquear"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"No"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Configurar"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="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>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index 3c6cf4c..dcffc65 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"No hay red."</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi desactivado"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"No hay redes guardadas disponibles"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Enviar pantalla"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Enviando"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Dispositivo sin nombre"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Listo para enviar"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"buscar"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"No se ha podido iniciar <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Ignorar todas las aplicaciones"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"División horizontal"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"División vertical"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"División personalizada"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Ver antes de desbloquear"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"No, gracias"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Configurar"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="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>
diff --git a/packages/SystemUI/res/values-et-rEE/strings.xml b/packages/SystemUI/res/values-et-rEE/strings.xml
index 90a6ede..1a74a8f 100644
--- a/packages/SystemUI/res/values-et-rEE/strings.xml
+++ b/packages/SystemUI/res/values-et-rEE/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Võrku pole"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"WiFi-ühendus on väljas"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Ühtegi salvestatud võrku pole saadaval"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Ülekandeekraan"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Osatäitjad"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Nimeta seade"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Valmis ülekandmiseks"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"otsing"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Rakendust <xliff:g id="APP">%s</xliff:g> ei saanud käivitada."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Loobu kõikidest rakendustest"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Horisontaalne poolitamine"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Vertikaalne poolitamine"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Kohandatud poolitamine"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Näete neid enne avamist"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Tänan, ei"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Seadistus"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="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>
diff --git a/packages/SystemUI/res/values-eu-rES/strings.xml b/packages/SystemUI/res/values-eu-rES/strings.xml
index 74aae79..c7019d9 100644
--- a/packages/SystemUI/res/values-eu-rES/strings.xml
+++ b/packages/SystemUI/res/values-eu-rES/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Ez dago sarerik"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi konexioa desaktibatuta"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Ez dago gordetako sarerik erabilgarri"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Igorri pantailako edukia"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Igortzen"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Izenik gabeko gailua"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Igortzeko prest"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"bilatu"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Ezin izan da hasi <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Baztertu aplikazio guztiak"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Banaketa horizontala"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Banaketa bertikala"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Banaketa pertsonalizatua"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Ikusi desblokeatu baino lehen"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Ez, eskerrik asko"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Konfiguratu"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="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>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index 33ed3b4..398e0b0 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"شبکه‌ای موجود نیست"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"‏Wi-Fi خاموش است"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"شبکه ذخیره شده‌ای در دسترس نیست"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"فرستادن صفحه‌نمایش"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"در حال فرستادن"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"دستگاه بدون نام"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"آماده برای فرستادن"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"جستجو"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> شروع نشد."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"رد کردن همه برنامه‌ها"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"تقسیم افقی"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"تقسیم عمودی"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"سفارشی کردن تقسیم"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"قبل از باز کردن قفل آنها را مشاهده کنید"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"خیر، سپاسگزارم"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"راه‌اندازی"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="screen_pinning_title" msgid="3273740381976175811">"صفحه نمایش پین شد"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"تا زمانی که پین را بردارید، در نما نگه‌داشته می‌شود. برای برداشتن پین، برگشت و نمای کلی را به صورت هم‌زمان لمس کنید و نگه‌دارید."</string>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index e472cff..61e591a 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Ei verkkoa"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi-yhteys pois käytöstä"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Tallennettuja verkkoja ei ole käytettävissä"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Lähetysnäyttö"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Lähetetään"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Nimetön laite"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Valmis lähetystä varten"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"haku"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Sovelluksen <xliff:g id="APP">%s</xliff:g> käynnistäminen epäonnistui."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Hylkää kaikki sovellukset"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Vaakasuuntainen jako"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Pystysuuntainen jako"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Muokattu jako"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Näytä ennen lukituksen avaamista"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Ei kiitos"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Määritä asetukset"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="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>
diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml
index d07bdc3..3427cfa 100644
--- a/packages/SystemUI/res/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/res/values-fr-rCA/strings.xml
@@ -259,7 +259,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Aucun réseau"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi désactivé"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Aucun des réseaux enregistrés n\'est disponible"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Diffuser l\'écran"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Diffusion"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Appareil sans nom"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Prêt à diffuser"</string>
@@ -289,9 +290,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"rechercher"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Impossible de lancer <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Supprimer toutes les applications"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Séparation horizontale"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Séparation verticale"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Séparation personnalisée"</string>
@@ -369,10 +367,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Afficher les notifications avant de déverrouiller l\'appareil"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Non, merci"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Configurer"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="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>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index 7bc3249..393a0f8 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -259,7 +259,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Aucun réseau"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi désactivé"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Aucun réseau enregistré disponible."</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Caster l\'écran"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Diffusion"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Appareil sans nom"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Prêt à caster"</string>
@@ -289,9 +290,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"rechercher"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Impossible de lancer <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Supprimer toutes les applications"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"–"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Séparation horizontale"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Séparation verticale"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Séparation personnalisée"</string>
@@ -369,10 +367,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Afficher les notifications avant de déverrouiller l\'appareil"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Non, merci"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Configurer"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="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>
diff --git a/packages/SystemUI/res/values-gl-rES/strings.xml b/packages/SystemUI/res/values-gl-rES/strings.xml
index d26d8f2..c47fc4e 100644
--- a/packages/SystemUI/res/values-gl-rES/strings.xml
+++ b/packages/SystemUI/res/values-gl-rES/strings.xml
@@ -259,7 +259,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Non hai rede"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wifi desactivada"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Non hai redes gardadas dispoñibles"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Enviar pantalla"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Emitindo"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Dispositivo sen nome"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Listo para emitir"</string>
@@ -289,9 +290,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"buscar"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Non foi posible iniciar <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Rexeitar todas as aplicacións"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Dividir en horizontal"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Dividir en vertical"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Dividir de xeito personalizado"</string>
@@ -369,10 +367,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Consúltaas antes de desbloquear"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Non grazas"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Configurar"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="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>
diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml
index 0fd7e6e..516ae5e 100644
--- a/packages/SystemUI/res/values-hi/strings.xml
+++ b/packages/SystemUI/res/values-hi/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"कोई नेटवर्क नहीं"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"वाई-फ़ाई  बंद"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"कोई भी सहेजा गया नेटवर्क उपलब्ध नहीं"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"स्क्रीन कास्ट करें"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"कास्टिंग"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"अनाम डिवाइस"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"कास्ट करने के लिए तैयार"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"खोज"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> प्रारंभ नहीं किया जा सका."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"सभी ऐप्लिकेशन ख़ारिज करें"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"क्षैतिज रूप से विभाजित करें"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"लम्बवत रूप से विभाजित करें"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"कस्‍टम रूप से विभाजित करें"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"आपके द्वारा उन्हें अनलॉक किए जाने से पहले देखें"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"नहीं धन्यवाद"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"सेट करें"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="screen_pinning_title" msgid="3273740381976175811">"स्‍क्रीन पिन कर दी गई है"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"इससे वह तब तक दृश्‍य में रहता है जब तक कि आप उसे अनपिन नहीं कर देते. अनपिन करने के लिए वापस जाएं और अवलोकन करें को एक ही समय पर स्‍पर्श करके रखें."</string>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index b8c3e1c..f63b1cd 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -258,7 +258,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Nema mreže"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi isključen"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Spremljene mreže nisu dostupne"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Emitiranje zaslona"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Emitiranje"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Uređaj bez naziva"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Spreman za emitiranje"</string>
@@ -288,9 +289,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"pretraži"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Aplikacija <xliff:g id="APP">%s</xliff:g> nije pokrenuta."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Odbaci sve aplikacije"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Podijeli vodoravno"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Podijeli okomito"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Podijeli prilagođeno"</string>
@@ -368,10 +366,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Pogledajte ih prije otključavanja"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Ne, hvala"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Postavi"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="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>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index e956e06..621bdb8 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Nincs hálózat"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi kikapcsolva"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Nem áll rendelkezésre mentett hálózat"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Képernyőtartalom átküldése"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Átküldés"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Név nélküli eszköz"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Küldésre kész"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"keresés"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Nem lehet elindítani a következőt: <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Összes alkalmazás elvetése"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"–"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Osztott vízszintes"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Osztott függőleges"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Osztott egyéni"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Már a képernyőzár feloldása előtt megtekintheti őket"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Nem, köszönöm"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Beállítás"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="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>
diff --git a/packages/SystemUI/res/values-hy-rAM/strings.xml b/packages/SystemUI/res/values-hy-rAM/strings.xml
index 50d0ca1..4529415 100644
--- a/packages/SystemUI/res/values-hy-rAM/strings.xml
+++ b/packages/SystemUI/res/values-hy-rAM/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Ցանց չկա"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi-ը անջատված է"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Հասանելի պահված ցանցեր չկան"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Հեռակա էկրան"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Հեռարձակում"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Անանուն սարք"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Պատրաստ է հեռարձակման"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"որոնել"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Հնարավոր չէ գործարկել <xliff:g id="APP">%s</xliff:g>-ը:"</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Հեռացնել բոլոր հավելվածները"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Հորիզոնական տրոհում"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Ուղղահայաց տրոհում"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Հատուկ տրոհում"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Տեսեք դրանք մինչև ապակողպելը"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Ոչ, շնորհակալություն"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Կարգավորել"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="screen_pinning_title" msgid="3273740381976175811">"Էկրանն ամրացված է"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Էկրանը կմնա տեսադաշտում, մինչև այն ապամրացնեք: Ապամրացնելու համար միաժամանակ հպեք և պահեք Համատեսքի և Հետ կոճակները:"</string>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index eb5eb01..66a7df0 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -31,7 +31,7 @@
     </plurals>
     <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Tidak ada pemberitahuan"</string>
     <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Berkelanjutan"</string>
-    <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Pemberitahuan"</string>
+    <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notifikasi"</string>
     <string name="battery_low_title" msgid="6456385927409742437">"Baterai lemah"</string>
     <string name="battery_low_percent_format" msgid="2900940511201380775">"Tersisa <xliff:g id="PERCENTAGE">%s</xliff:g>"</string>
     <string name="battery_low_percent_format_saver_started" msgid="6859235584035338833">"Tersisa <xliff:g id="PERCENTAGE">%s</xliff:g>. Penghemat baterai aktif."</string>
@@ -48,7 +48,7 @@
     <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Rotasi layar otomatis"</string>
     <string name="status_bar_settings_mute_label" msgid="554682549917429396">"BUNGKAM"</string>
     <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string>
-    <string name="status_bar_settings_notifications" msgid="397146176280905137">"Pemberitahuan"</string>
+    <string name="status_bar_settings_notifications" msgid="397146176280905137">"Notifikasi"</string>
     <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth tertambat"</string>
     <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Menyiapkan metode masukan"</string>
     <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Keyboard fisik"</string>
@@ -147,7 +147,7 @@
     <string name="accessibility_airplane_mode" msgid="834748999790763092">"Mode pesawat."</string>
     <string name="accessibility_battery_level" msgid="7451474187113371965">"Baterai <xliff:g id="NUMBER">%d</xliff:g> persen."</string>
     <string name="accessibility_settings_button" msgid="799583911231893380">"Setelan sistem."</string>
-    <string name="accessibility_notifications_button" msgid="4498000369779421892">"Pemberitahuan."</string>
+    <string name="accessibility_notifications_button" msgid="4498000369779421892">"Notifikasi."</string>
     <string name="accessibility_remove_notification" msgid="3603099514902182350">"Menghapus pemberitahuan."</string>
     <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS diaktifkan."</string>
     <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Memperoleh GPS."</string>
@@ -160,7 +160,7 @@
     <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_notification_dismissed" msgid="854211387186306927">"Pemberitahuan disingkirkan."</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>
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Tidak Ada Jaringan"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi Mati"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Jaringan yang tersimpan tak tersedia"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Layar transmisi"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Melakukan transmisi"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Perangkat tanpa nama"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Siap melakukan transmisi"</string>
@@ -272,7 +273,7 @@
     <string name="quick_settings_connecting" msgid="47623027419264404">"Menyambung..."</string>
     <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Menambatkan"</string>
     <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Hotspot"</string>
-    <string name="quick_settings_notifications_label" msgid="4818156442169154523">"Pemberitahuan"</string>
+    <string name="quick_settings_notifications_label" msgid="4818156442169154523">"Notifikasi"</string>
     <string name="quick_settings_flashlight_label" msgid="2133093497691661546">"Lampu senter"</string>
     <string name="quick_settings_cellular_detail_title" msgid="8575062783675171695">"Data seluler"</string>
     <string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"Penggunaan data"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"telusuri"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Tidak dapat memulai <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Tutup semua aplikasi"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Pisahkan Horizontal"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Pisahkan Vertikal"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Pisahkan Khusus"</string>
@@ -308,7 +306,7 @@
     <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="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 darurat di bawah"</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>
@@ -367,16 +365,14 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Lihat sebelum membuka kunci"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Tidak"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Siapkan"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="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>
     <string name="screen_pinning_positive" msgid="3783985798366751226">"Mengerti"</string>
-    <string name="screen_pinning_negative" msgid="3741602308343880268">"Tidak, terima kasih"</string>
+    <string name="screen_pinning_negative" msgid="3741602308343880268">"Lain kali"</string>
     <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Sembunyikan <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
     <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Ini akan muncul kembali saat Anda mengaktifkannya dalam setelan."</string>
     <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Sembunyikan"</string>
diff --git a/packages/SystemUI/res/values-is-rIS/strings.xml b/packages/SystemUI/res/values-is-rIS/strings.xml
index bc4b707..1ae4566 100644
--- a/packages/SystemUI/res/values-is-rIS/strings.xml
+++ b/packages/SystemUI/res/values-is-rIS/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Ekkert net"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Slökkt á Wi-Fi"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Engin vistuð net til staðar"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Skjáútsending"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Sendir út"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Ónefnt tæki"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Tilbúið í útsendingu"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"leita"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Ekki var hægt að ræsa <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Fjarlægja öll forrit"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Lárétt skipting"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Lóðrétt skipting"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Sérsniðin skipting"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Sjáðu þær áður en þú opnar"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Nei, takk"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Setja upp"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="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>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index 6a07df8..c9ccf05 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -259,7 +259,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Nessuna rete"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi disattivato"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Nessuna rete salvata disponibile"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Trasmetti schermo"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"In trasmissione"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Dispositivo senza nome"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Pronto a trasmettere"</string>
@@ -289,9 +290,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"cerca"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Impossibile avviare <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Rimuovi tutte le applicazioni"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Divisione in orizzontale"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Divisione in verticale"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Divisione personalizzata"</string>
@@ -369,10 +367,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Visualizza prima di sbloccare"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"No, grazie"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Configura"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="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>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index 43fb0a4..ff7fc57 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -259,7 +259,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"אין רשת"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"‏Wi-Fi כבוי"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"אין רשתות שמורות זמינות"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"העבר מסך"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"מעביר"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"מכשיר ללא שם"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"מוכן להעביר"</string>
@@ -289,9 +290,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"חפש"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"לא ניתן היה להפעיל את <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"סגור את כל האפליקציות"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"פיצול אופקי"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"פיצול אנכי"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"פיצול מותאם אישית"</string>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index e4a3d0b..ca6aec9 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -259,7 +259,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"ネットワークなし"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi OFF"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"保存されているネットワークがありません"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"画面のキャスト"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"キャストしています"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"名前のないデバイス"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"キャスト準備完了"</string>
@@ -289,9 +290,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"検索"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g>を開始できません。"</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"すべてのアプリケーションを消去"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"横に分割"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"縦に分割"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"分割(カスタム)"</string>
@@ -369,10 +367,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"ロックを解除する前にご確認ください"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"キャンセル"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"設定"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="screen_pinning_title" msgid="3273740381976175811">"画面が固定されました"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"固定を解除するまで画面が常に表示されるようになります。[戻る]と[最近]を同時に押し続けると固定が解除されます。"</string>
diff --git a/packages/SystemUI/res/values-ka-rGE/strings.xml b/packages/SystemUI/res/values-ka-rGE/strings.xml
index 5520830..100af70 100644
--- a/packages/SystemUI/res/values-ka-rGE/strings.xml
+++ b/packages/SystemUI/res/values-ka-rGE/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"ქსელი არ არის"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi გამორთულია"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"შენახული ქსელები მიუწვდომელია"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"ეკრანის გადაცემა"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"გადაიცემა"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"უსახელო მოწყობილობა"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"მზად არის სამაუწყებლოდ"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"ძიება"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g>-ის გამოძახება ვერ მოხერხდა."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"ყველა აპლიკაციის გაუქმება"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"ჰორიზონტალური გაყოფა"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"ვერტიკალური გაყოფა"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"ინდივიდუალური გაყობა"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"იხილეთ განბლოკვამდე"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"არა, გმადლობთ"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"დაყენება"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="screen_pinning_title" msgid="3273740381976175811">"ეკრანი ჩამაგრებულია"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"ამით ის ხედში დარჩება, სანამ ჩამაგრებას არ გააუქმებთ. ჩამაგრების გასაუქმებლად შეეხეთ და დააყოვნეთ „დაბრუნება“-ზე და „მიმოხილვა“-ზე ერთდროულად."</string>
diff --git a/packages/SystemUI/res/values-kk-rKZ/strings.xml b/packages/SystemUI/res/values-kk-rKZ/strings.xml
index 1b43bd4..9ed07ca 100644
--- a/packages/SystemUI/res/values-kk-rKZ/strings.xml
+++ b/packages/SystemUI/res/values-kk-rKZ/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Желі жоқ"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi өшірулі"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Сақталған желілер қол жетімді емес"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Экранды трансляциялау"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Трансляциялануда"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Атаусыз құрылғы"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Трансляциялауға дайын"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"іздеу"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> іске қосу мүмкін болмады."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Барлық қолданбаларды қабылдамау"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Бөлінген көлденең"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Бөлінген тік"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Бөлінген теңшелетін"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Бекітпесін ашу алдында оларды көру"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Жоқ, рақмет"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Реттеу"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="screen_pinning_title" msgid="3273740381976175811">"Экран түйрелді"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Бұл сіз оны босатқанша оны көрсетіп тұрады. Босату үшін «Кері» және «Шолу» түймелерін бір уақытта басып тұрыңыз."</string>
diff --git a/packages/SystemUI/res/values-km-rKH/strings.xml b/packages/SystemUI/res/values-km-rKH/strings.xml
index 743a81c..de48a23 100644
--- a/packages/SystemUI/res/values-km-rKH/strings.xml
+++ b/packages/SystemUI/res/values-km-rKH/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"គ្មាន​បណ្ដាញ"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"វ៉ាយហ្វាយ​បានបិទ"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"មិន​មាន​បណ្ដាញ​ដែល​បាន​រក្សាទុក"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"ខាស​អេក្រង់"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"ការ​ចាត់​ថ្នាក់"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"ឧបករណ៍​​ដែល​មិន​មាន​ឈ្មោះ"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"ត្រៀម​រួចរាល់​ដើម្បី​ចាត់​ថ្នាក់"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"ស្វែងរក"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"មិន​អាច​ចាប់ផ្ដើម <xliff:g id="APP">%s</xliff:g> ទេ។"</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"បោះបង់កម្មវិធីទាំងអស់"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"បំបែកផ្តេក"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"បំបែកបញ្ឈរ"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"បំបែកផ្ទាល់ខ្លួន"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"ឃើញ​ពួកវា​មុន​ពេល​ដោះ​សោ"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"ទេ អរគុណ!"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"រៀបចំ"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="screen_pinning_title" msgid="3273740381976175811">"អេក្រង់​ត្រូវ​បាន​ភ្ជាប់"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"រក្សាទុក​វា​ក្នុង​ទិដ្ឋភាព​រហូត​ដល់​អ្នក​ផ្ដាច់។ ប៉ះ ហើយ​សង្កត់​ថយក្រោយ និង​ទិដ្ឋភាព​នៅ​ពេល​តែ​មួយ​ដើម្បី​ផ្ដាច់។"</string>
diff --git a/packages/SystemUI/res/values-kn-rIN/strings.xml b/packages/SystemUI/res/values-kn-rIN/strings.xml
index dd02d92..2687de1 100644
--- a/packages/SystemUI/res/values-kn-rIN/strings.xml
+++ b/packages/SystemUI/res/values-kn-rIN/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"ನೆಟ್‌ವರ್ಕ್ ಇಲ್ಲ"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi ಆಫ್"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"ಯಾವುದೇ ಉಳಿಸಲಾದ ನೆಟ್‌ವರ್ಕ್‌ಗಳು ಲಭ್ಯವಿಲ್ಲ"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"ಬಿತ್ತರದ ಪರದೆ"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"ಬಿತ್ತರಿಸಲಾಗುತ್ತಿದೆ"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"ಹೆಸರಿಸದಿರುವ ಸಾಧನ"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"ಬಿತ್ತರಿಸಲು ಸಿದ್ದವಾಗಿದೆ"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"ಹುಡುಕಾಟ"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> ಪ್ರಾರಂಭಿಸಲು ಸಾದ್ಯವಿಲ್ಲ."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"ಎಲ್ಲಾ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ವಜಾಗೊಳಿಸಿ"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"ಅಡ್ಡಲಾಗಿ ವಿಭಜಿಸಿದ"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"ಲಂಬವಾಗಿ ವಿಭಜಿಸಿದ"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"ಕಸ್ಟಮ್ ವಿಭಜಿಸಿದ"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"ನೀವು ಅನ್‌ಲಾಕ್‌ ಮಾಡುವ ಮೊದಲೇ ಅವುಗಳನ್ನು ನೋಡಿ"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"ಬೇಡ ಧನ್ಯವಾದಗಳು"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"ಹೊಂದಿಸು"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="screen_pinning_title" msgid="3273740381976175811">"ಪರದೆಯನ್ನು ಪಿನ್ ಮಾಡಲಾಗಿದೆ"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"ನೀವು ಅನ್‌ಪಿನ್ ಮಾಡುವವರೆಗೆ ಅದನ್ನು ವೀಕ್ಷಣೆಯಲ್ಲಿಡುತ್ತದೆ. ಅನ್‌ಪಿನ್ ಮಾಡಲು ಒಂದೇ ಸಮಯದಲ್ಲಿ ಸ್ಪರ್ಶಿಸಿ ಮತ್ತು ಒತ್ತಿ ಹಿಡಿದುಕೊಳ್ಳಿ ಹಾಗೂ ಅವಲೋಕಿಸಿ."</string>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index bc30a50..993bef4 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"네트워크가 연결되지 않음"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi 꺼짐"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"저장된 네트워크가 없습니다."</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"화면 전송"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"전송 중"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"이름이 없는 기기"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"전송 준비 완료"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"검색"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g>을(를) 시작할 수 없습니다."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"모든 애플리케이션 닫기"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"수평 분할"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"수직 분할"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"맞춤 분할"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"잠금 해제하기 전에 알림을 봅니다."</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"사용 안함"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"설정"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="screen_pinning_title" msgid="3273740381976175811">"화면 고정됨"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"고정 해제하기 전까지 계속 표시됩니다. 고정 해제하려면 뒤로와 개요를 동시에 길게 터치합니다."</string>
diff --git a/packages/SystemUI/res/values-ky-rKG/strings.xml b/packages/SystemUI/res/values-ky-rKG/strings.xml
index e34c659..25471e5 100644
--- a/packages/SystemUI/res/values-ky-rKG/strings.xml
+++ b/packages/SystemUI/res/values-ky-rKG/strings.xml
@@ -282,7 +282,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Желе жок"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi өчүк"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Сакталган тармактар жок"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Тышкы экранга чыгаруу"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Тышкы экранга чыгарылууда"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Аты жок түзмөк"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Тышкы экранга чыгарууга даяр"</string>
@@ -312,9 +313,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"издөө"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> баштай алган жок."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Бардык колдонмолорду көз жаздымда калтыруу"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Туурасынан бөлүү"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Тигинен бөлүү"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Ыңгайлаштырылган бөлүү"</string>
@@ -392,10 +390,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Аларды кулпудан чыгараардан мурун көрүңүз"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Жок, рахмат"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Орнотуу"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="screen_pinning_title" msgid="3273740381976175811">"Экран кадалган"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Бул бошотулмайынча көрүнө берет. Бошотуу үчүн, бир убакта Артка жана Карап чыгууну коё бербей басып туруңуз."</string>
diff --git a/packages/SystemUI/res/values-lo-rLA/strings.xml b/packages/SystemUI/res/values-lo-rLA/strings.xml
index e9e2219..b5e1bfe 100644
--- a/packages/SystemUI/res/values-lo-rLA/strings.xml
+++ b/packages/SystemUI/res/values-lo-rLA/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"ບໍ່ມີເຄືອຂ່າຍ"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi​-Fi ປິດ"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"ບໍ່​ມີ​ເຄືອ​ຂ່າຍ​ທີ່​ບັນ​ທຶກ​ໄວ້​ທີ່​ສາ​ມາດ​ໃຊ້​ໄດ້"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"​ສົ່ງ​ສັນ​ຍານ​ໜ້າ​ຈໍ"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"​ກຳ​ລັງ​ສົ່ງ​ສັນ​ຍານ"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"​ອຸ​ປະ​ກອນບໍ່​ມີ​ຊື່"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"​ພ້ອ​ມ​ສົ່ງ​ສັນ​ຍານ​ແລ້ວ"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"ຊອກຫາ"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"ບໍ່​ສາ​ມາດ​ເລີ່ມ <xliff:g id="APP">%s</xliff:g> ໄດ້."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"ປ່ອຍ​ທຸກ​ແອັບ​ພ​ລິ​ເຄ"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"ການ​ແຍກ​ລວງ​ຂວາງ"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"ການ​ແຍກ​ລວງ​ຕັ້ງ"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"ການ​ແຍກ​ກຳ​ນົດ​ເອງ"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"ເບິ່ງພວກ​ມັນກ່ອນ​ທ່ານຈະ​ປົດລັອກ"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"ບໍ່, ຂອບໃຈ"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"ຕັ້ງຄ່າ"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="screen_pinning_title" msgid="3273740381976175811">"ປັກ​ໝຸດໜ້າ​ຈໍ​ແລ້ວ"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"ມັນ​ຈະ​ຮັກ​ສາ​ໜ້າ​ຈໍ​ໄວ້​ໃນ​ມຸມມອງ​ຂອງ​ທ່ານ​ຈົນ​ກວ່າ​ທ່ານ​ຈະ​ຖອດ​ໝຸດ. ​ແຕະ​ປຸ່ມ ກັບ​ຄືນ ແລະ ພາບ​ຮວມ​ ຄ້າງ​ໄວ້​ພ້ອມ​ກັນ​ເພື່ອ​ຖອດ​ໝຸດ."</string>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index dceb996..0fc6fbb 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -259,7 +259,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Tinklo nėra"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"„Wi-Fi“ išjungta"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Nėra pasiekiamų išsaugotų tinklų"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Perdavimo ekranas"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Perduodama"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Įrenginys be pavadinimo"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Paruošta perduoti"</string>
@@ -289,9 +290,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"paieška"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Nepavyko paleisti <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Atsisakyti visų programų"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"–"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Horizontalus skaidymas"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Vertikalus skaidymas"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Tinkintas skaidymas"</string>
@@ -369,10 +367,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Peržiūrėti prieš atrakinant"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Ne, ačiū"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Nustatyti"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="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>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index 76d3372..54cc36a 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -258,7 +258,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Nav tīkla"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi ir izslēgts"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Nav pieejams neviens saglabātais tīkls."</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Apraides ekrāns"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Notiek apraide…"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Nenosaukta ierīce"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Gatavs apraidei"</string>
@@ -288,9 +289,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"Meklēt"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Nevarēja palaist lietotni <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Noņemt visas lietojumprogrammas"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Horizontāls dalījums"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Vertikāls dalījums"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Pielāgots dalījums"</string>
@@ -368,10 +366,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Skatiet tos pirms atbloķēšanas."</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Nē"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Iestatīt"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="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>
diff --git a/packages/SystemUI/res/values-mk-rMK/strings.xml b/packages/SystemUI/res/values-mk-rMK/strings.xml
index 0656901..2be9c4c 100644
--- a/packages/SystemUI/res/values-mk-rMK/strings.xml
+++ b/packages/SystemUI/res/values-mk-rMK/strings.xml
@@ -259,7 +259,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Нема мрежа"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi е исклучено"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Нема достапни зачувани мрежи"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Емитувај екран"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Емитување"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Неименуван уред"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Подготвено за емитување"</string>
@@ -289,9 +290,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"пребарај"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> не може да се вклучи."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Отфрли ги сите апликации"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"22°"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"22°"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"22°"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Раздели хоризонтално"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Раздели вертикално"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Раздели прилагодено"</string>
@@ -369,10 +367,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Видете ги пред да отклучите"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Не, фала"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Постави"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="screen_pinning_title" msgid="3273740381976175811">"Екранот е прикачен"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Ќе се гледа сè додека не го откачите. Допрете и држете Назад и Краток преглед истовремено за откачување."</string>
diff --git a/packages/SystemUI/res/values-ml-rIN/strings.xml b/packages/SystemUI/res/values-ml-rIN/strings.xml
index d0532e8..c446927 100644
--- a/packages/SystemUI/res/values-ml-rIN/strings.xml
+++ b/packages/SystemUI/res/values-ml-rIN/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"നെറ്റ്‌വർക്ക് ഒന്നുമില്ല"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi ഓഫുചെയ്യുക"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"സംരംക്ഷിച്ച നെറ്റ്‌വർക്കുകളൊന്നും ലഭ്യമല്ല"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"കാസ്‌റ്റ് സ്‌ക്രീൻ"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"കാസ്റ്റുചെയ്യുന്നു"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"പേരിടാത്ത ഉപകരണം"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"കാസ്‌റ്റ് ചെയ്യാൻ തയ്യാറാണ്"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"തിരയുക"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> ആരംഭിക്കാനായില്ല."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"എല്ലാ അപ്ലിക്കേഷനുകളും നിരസിക്കുക"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"തിരശ്ചീനമായി വേർതിരിക്കുക"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"ലംബമായി വേർതിരിക്കുക"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"ഇഷ്‌ടാനുസൃതമായി വേർതിരിക്കുക"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"അൺലോക്കുചെയ്യുന്നതിന് മുമ്പ് അവ കാണുക"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"വേണ്ട, നന്ദി"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"സജ്ജീകരിക്കുക"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="screen_pinning_title" msgid="3273740381976175811">"സ്‌ക്രീൻ പിൻ ചെയ്‌തു"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"നിങ്ങൾ അൺപിൻ ചെയ്യുന്നതുവരെ ഇത് കാണുന്ന വിധത്തിൽ നിലനിർത്തുന്നു. അൺപിൻ ചെയ്യാൻ \'മടങ്ങുക\', \'ചുരുക്കവിവരണം\' എന്നിവ ഒരേ സമയം സ്‌പർശിച്ച് പിടിക്കുക."</string>
diff --git a/packages/SystemUI/res/values-mn-rMN/strings.xml b/packages/SystemUI/res/values-mn-rMN/strings.xml
index 3de40d5..a767983 100644
--- a/packages/SystemUI/res/values-mn-rMN/strings.xml
+++ b/packages/SystemUI/res/values-mn-rMN/strings.xml
@@ -255,7 +255,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Сүлжээгүй"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi унтарсан"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Хадгалагдсан сүлжээ байхгүй"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Дамжуулах дэлгэц"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Дамжуулж байна"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Нэргүй төхөөрөмж"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Дамжуулахад бэлэн"</string>
@@ -285,9 +286,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"хайх"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g>-г эхлүүлж чадсангүй."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Бүх програмыг арилгах"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Хэвтээ чиглэлд хуваах"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Босоо чиглэлд хуваах"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Хүссэн хэлбэрээр хуваах"</string>
@@ -365,10 +363,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Түгжээг тайлахын өмнө үзнэ үү"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Үгүй"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Тохируулах"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="screen_pinning_title" msgid="3273740381976175811">"Дэлгэц эхэнд байрлуулагдсан"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Таныг эхэнд нээхийг болиулах хүртэл харагдана. Хүрээд, Back дээр удаан дараад хаахдаа Overview-ийг дар"</string>
diff --git a/packages/SystemUI/res/values-mr-rIN/strings.xml b/packages/SystemUI/res/values-mr-rIN/strings.xml
index d461e0555..6023d49 100644
--- a/packages/SystemUI/res/values-mr-rIN/strings.xml
+++ b/packages/SystemUI/res/values-mr-rIN/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"नेटवर्क नाही"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"वाय-फाय बंद"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"कोणतीही जतन केलेली नेटवर्क उपलब्ध नाहीत"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"स्क्रीन कास्‍ट करा"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"कास्ट करत आहे"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"निनावी डिव्हाइस"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"कास्ट करण्यास सज्ज"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"शोधा"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> प्रारंभ करणे शक्य झाले नाही."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"सर्व अनुप्रयोग डिसमिस करा"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"क्षैतिज विभाजित करा"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"अनुलंब विभाजित करा"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"सानुकूल विभाजित करा"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"आपण अनलॉक करण्‍यापूर्वी त्यांना पहा"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"नाही धन्यवाद"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"सेट अप"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="screen_pinning_title" msgid="3273740381976175811">"स्क्रीन पिन केलेली आहे"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"हे आपण अनपिन करेपर्यंत दृश्यामध्ये ते ठेवते. अनपिन करण्यासाठी एकाच वेळी परत आणि अलीकडील ला स्पर्श करा आणि धरून ठेवा आणि विहंगावलोकन करा."</string>
diff --git a/packages/SystemUI/res/values-ms-rMY/strings.xml b/packages/SystemUI/res/values-ms-rMY/strings.xml
index e0e7327..8579e07 100644
--- a/packages/SystemUI/res/values-ms-rMY/strings.xml
+++ b/packages/SystemUI/res/values-ms-rMY/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Tiada Rangkaian"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi Dimatikan"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Tiada rangkaian disimpan tersedia"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Skrin Cast"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Menghantar"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Peranti tidak bernama"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Bersedia untuk menghantar"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"cari"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Tidak dapat memulakan <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Ketepikan semua aplikasi"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Mendatar Terpisah"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Menegak Terpisah"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Tersuai Terpisah"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Lihat sebelum anda membuka kunci"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Tidak"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Sediakan"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="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>
diff --git a/packages/SystemUI/res/values-my-rMM/strings.xml b/packages/SystemUI/res/values-my-rMM/strings.xml
index 8ec709e..b6feaa2 100644
--- a/packages/SystemUI/res/values-my-rMM/strings.xml
+++ b/packages/SystemUI/res/values-my-rMM/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"ကွန်ရက်မရှိပါ"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"ဝိုင်ဖိုင်ပိတ်ရန်"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"သိမ်းဆည်းထား ကွန်ရက်များ မရှိ"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"ကာစ်တ် မျက်နှာပြင်"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"ကာစ်တင်"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"အမည်မတပ် ကိရိယာ"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"ကာစ်တ် လုပ်ရန် အသင့် ရှိနေပြီ"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"ရှာဖွေရန်"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> ကို မစနိုင်ပါ။"</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"အပလီကေးရှင်းများအားလုံး ဖယ်ထုတ်မည်"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"−"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"..."</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"ရေပြင်ညီ ပိုင်းမည်"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"ဒေါင်လိုက်ပိုင်းမည်"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"စိတ်ကြိုက် ပိုင်းမည်"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"မဖွင့်ခင် ၎င်းတို့ကို ကြည့်ပါ"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"မလိုအပ်ပါ"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"သတ်မှတ်ရန်"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="screen_pinning_title" msgid="3273740381976175811">"မျက်နှာပြင် ပင်ထိုးပြီးပါပြီ"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"သင်ပင်ဖြုတ်သည့် တိုင်အောင် ၎င်းအား မြင်ကွင်းတွင် ထားရှိပါမည်။ ပင်ဖြုတ်ရန် အနောက်နှင့် ခြုံငုံကြည့်ခြင်းကို ဖိ၍ နှိပ်ထားနိုင်သည်။"</string>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index a5e912d..0a67650 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Ingen nettverk"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi er av"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Ingen lagrede nettverk er tilgjengelige"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Cast skjermen"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Casting"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Enhet uten navn"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Klar til å caste"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"Søk"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Kunne ikke starte <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Avvis alle apper"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Del horisontalt"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Del vertikalt"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Del tilpasset"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Se dem før du låser opp"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Nei takk"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Konfigurer"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="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>
diff --git a/packages/SystemUI/res/values-ne-rNP/strings.xml b/packages/SystemUI/res/values-ne-rNP/strings.xml
index 277e1f1..71247d9 100644
--- a/packages/SystemUI/res/values-ne-rNP/strings.xml
+++ b/packages/SystemUI/res/values-ne-rNP/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"नेटवर्क छैन"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"वाइफाइ बन्द"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"उपलब्ध सञ्जाल सुरक्षित गरिएन"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"स्क्रिन प्रसारण गर्नुहोस्"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"प्रसारण गर्दै"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"बेनाम उपकरण"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"प्रसारण गर्न तयार"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"खोजी गर्नुहोस्"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"सुरु गर्न सकिएन <xliff:g id="APP">%s</xliff:g>।"</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"सबै अनुप्रयोगहरू खारेज गर्नुहोस्"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"तेर्सो रूपमा विभाजन गर्नुहोस्"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"ठाडो रूपमा विभाजन गर्नुहोस्"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"अनुकूलन विभाजन गर्नुहोस्"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"तपाईँले अनलक गर्नअघि तिनीहरूलाई हेर्नुहोस्"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"धन्यवाद पर्दैन"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"सेटअप गर्नुहोस्"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="screen_pinning_title" msgid="3273740381976175811">"पर्दा राखेका छ"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"तपाईं अनपिन सम्म यो दृश्य मा राख्छ। छुनुहोस् र अनपिन फिर्ता र सिंहावलोकन नै समय मा पकड।"</string>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index 2e403c2..16d4eea 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Geen netwerk"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wifi uit"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Geen opgeslagen netwerken beschikbaar"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Scherm casten"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Casten"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Naamloos apparaat"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Klaar om te casten"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"zoeken"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Kan <xliff:g id="APP">%s</xliff:g> niet starten."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Alle apps sluiten"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Horizontaal splitsen"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Verticaal splitsen"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Aangepast splitsen"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Weergeven voordat u ontgrendelt"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Nee, bedankt"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Configureren"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="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>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index 83998622..3b9efe7 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -259,7 +259,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Brak sieci"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi wyłączone"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Brak dostępnych zapisanych sieci"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Prześlij ekran"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Przesyłam"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Urządzenie bez nazwy"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Wszystko gotowe do przesyłania"</string>
@@ -289,9 +290,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"szukaj"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Nie udało się uruchomić aplikacji <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Zamknij wszystkie aplikacje"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Podziel poziomo"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Podziel pionowo"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Podziel niestandardowo"</string>
@@ -369,10 +367,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Zobacz powiadomienia, jeszcze zanim odblokujesz ekran"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Nie, dziękuję"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Skonfiguruj"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="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>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index fd79d33..03ca5ee 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Sem Rede"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi Desligado"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Sem redes guardadas disponíveis"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Transmitir ecrã"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Transmissão"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Dispositivo sem nome"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Pronto para transmitir"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"pesquisar"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Não foi possível iniciar o <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Ignorar todas as aplicações"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Divisão horizontal"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Divisão vertical"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Divisão personalizada"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Ver antes de desbloquear"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Não, obrigado"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Configurar"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="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>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index b5d7b53..5a68f7d 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -259,7 +259,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Sem rede"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi desligado"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Não há redes salvas disponíveis"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Transmitir tela"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Transmitindo"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Dispositivo sem nome"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Pronto para transmitir"</string>
@@ -289,9 +290,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"pesquisar"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Não foi possível iniciar <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Dispensar todos os apps"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Divisão horizontal"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Divisão vertical"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Divisão personalizada"</string>
@@ -369,10 +367,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Veja-as antes de desbloquear"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Não, obrigado"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Configurar"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="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>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index 8afa826..5887c79 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -258,7 +258,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Nicio reţea"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi deconectat"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Nicio rețea salvată disponibilă"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Proiectați ecranul"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Se proiectează"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Dispozitiv nedenumit"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Pregătit pentru proiecție"</string>
@@ -288,9 +289,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"căutare"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> nu a putut porni."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Închideți toate aplicațiile"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Divizare pe orizontală"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Divizare pe verticală"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Divizare personalizată"</string>
@@ -368,10 +366,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Doresc să se afișeze înainte de deblocare"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Nu, mulț."</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Config."</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="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>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index c215f69..23e8b3a 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -261,7 +261,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Нет сети"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi выкл."</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Нет доступных сохраненных сетей"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Передать изображение экрана"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Передача изображения"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Безымянное устройство"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Готово к передаче"</string>
@@ -291,9 +292,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"поиск"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Не удалось запустить приложение \"<xliff:g id="APP">%s</xliff:g>\""</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Закрыть все приложения"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"–"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Разделить по горизонтали"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Разделить по вертикали"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Разделить по-другому"</string>
@@ -371,10 +369,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Просматривайте уведомления на заблокированном экране."</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Закрыть"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Настроить"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="screen_pinning_title" msgid="3273740381976175811">"Блокировка в приложении включена"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Это приложение останется активным, пока вы не отмените блокировку, одновременно нажав кнопки \"Назад\" и \"Обзор\"."</string>
diff --git a/packages/SystemUI/res/values-si-rLK/strings.xml b/packages/SystemUI/res/values-si-rLK/strings.xml
index 100e88c..becf69d 100644
--- a/packages/SystemUI/res/values-si-rLK/strings.xml
+++ b/packages/SystemUI/res/values-si-rLK/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"ජාලයක් නැත"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi අක්‍රියයි"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"තිබෙන ජාල සුරැකුවේ නැත"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"රංගන තිරය"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"කාස්ට් කිරීම"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"නම් නොකළ උපාංගය"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"කාස්ට් කිරීමට සුදානම්"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"සෙවීම"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> ආරම්භ කළ නොහැක."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"සියලුම යෙදුම් අස් කරන්න"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"තිරස්ව වෙන් කරන්න"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"සිරස්ව වෙන් කරන්න"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"අභිමත ලෙස වෙන් කරන්න"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"ඔබ අඟුළු හැරීමට කලින් ඒවා බලන්න"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"එපා ස්තූතියි"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"සකසන්න"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="screen_pinning_title" msgid="3273740381976175811">"තීරය අමුණන ලදි"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"ඔබ ගලවන තෙක් එය දර්ශනය තුළ මෙය තබයි. ගැලවීමට ආපසු සහ දළ විශ්ලේෂණය එකම වේලාවක ස්පර්ෂ කර අල්ලා සිටින්න."</string>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index 50fbf90..4fc086d 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -261,7 +261,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Žiadna sieť"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Sieť Wi-Fi je vypnutá"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Nie sú k dispozícii žiadne uložené siete"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Prenos obrazovky"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Prenáša sa"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Nepomenované zariadenie"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Pripravené na prenášanie"</string>
@@ -291,9 +292,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"hľadať"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Aplikáciu <xliff:g id="APP">%s</xliff:g> sa nepodarilo spustiť"</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Odmietnuť všetky aplikácie"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Rozdeliť vodorovné"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Rozdeliť zvislé"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Rozdeliť vlastné"</string>
@@ -371,10 +369,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Zobraziť pred odomknutím"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Nie, vďaka"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Nastaviť"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="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>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index af996e7..f20596b 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -259,7 +259,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Ni omrežja"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi izklopljen"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Na voljo ni nobeno shranjeno omrežje"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Zaslon za predvajanje"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Predvajanje"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Neimenovana naprava"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Pripravljeno za predvajanje"</string>
@@ -289,9 +290,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"iskanje"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Aplikacije <xliff:g id="APP">%s</xliff:g> ni bilo mogoče zagnati."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Opusti vse aplikacije"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Razdeli vodoravno"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Razdeli navpično"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Razdeli po meri"</string>
@@ -369,10 +367,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Oglejte si jih pred odklepanjem"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Ne, hvala"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Nastavitev"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="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>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index f02ef5c..74b44f4 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -258,7 +258,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Нема мреже"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi је искључен"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Није доступна ниједна сачувана мрежа"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Пребацивање екрана"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Пребацивање"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Неименовани уређај"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Спремно за пребацивање"</string>
@@ -288,9 +289,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"претражи"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Покретање апликације <xliff:g id="APP">%s</xliff:g> није успело."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Одбаци све апликације"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Подели хоризонтално"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Подели вертикално"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Прилагођено дељење"</string>
@@ -368,10 +366,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Прегледајте их пре откључавања"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Не, хвала"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Подеси"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="screen_pinning_title" msgid="3273740381976175811">"Екран је закачен"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"На овај начин ово остаје приказано док га не откачите. Истовремено додирните и задржите Назад и Преглед да бисте га откачили."</string>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index 2d29894..de4b84c 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Inget nätverk"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi av"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Inga sparade nätverk tillgängliga"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Casta skärmen"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Castar"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Namnlös enhet"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Redo att casta"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"sök"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Det gick inte att starta appen <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Ta bort alla appar"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Dela horisontellt"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Dela vertikalt"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Dela anpassad"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Visa dem innan du låser upp"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Nej tack"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Konfig."</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="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>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index 3c8f251..c6c4ff0 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Hakuna Mtandao"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi Imezimwa"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Hakuna mitandao iliyohifadhiwa inayopatikana"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Tuma skrini"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Inatuma"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Kifaa hakina jina"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Tayari kutuma"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"tafuta"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Haikuweza kuanzisha <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Ondoa programu zote"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Gawanya Mlalo"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Gawanya Wima"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Maalum Iliyogawanywa"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Zitazame kabla hujafungua"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Hapana, asante"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Sanidi"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="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>
diff --git a/packages/SystemUI/res/values-ta-rIN/strings.xml b/packages/SystemUI/res/values-ta-rIN/strings.xml
index 257e55f..c9da1b8 100644
--- a/packages/SystemUI/res/values-ta-rIN/strings.xml
+++ b/packages/SystemUI/res/values-ta-rIN/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"நெட்வொர்க் இல்லை"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"வைஃபையை முடக்கு"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"சேமித்த நெட்வொர்க்குகள் இல்லை"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"திரையை அனுப்பு"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"அனுப்புகிறது"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"பெயரிடப்படாத சாதனம்"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"அனுப்பத் தயார்"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"தேடு"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g>ஐத் தொடங்க முடியவில்லை."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"எல்லா பயன்பாடுகளையும் விலக்கு"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"கிடைமட்டமாகப் பிரி"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"செங்குத்தாகப் பிரி"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"தனிவிருப்பத்தில் பிரி"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"திறக்கும் முன் அவற்றைப் பார்க்கவும்"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"வேண்டாம்"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"அமை"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="screen_pinning_title" msgid="3273740381976175811">"திரை பொருத்தப்பட்டது"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"பொருத்தியதை விலக்கும்வரை இதைக் காட்சியில் வைக்கும். விலக்க, பின் மற்றும் மேலோட்டப் பார்வையை ஒரே நேரத்தில் தொட்டுப் பிடிக்கவும்."</string>
diff --git a/packages/SystemUI/res/values-te-rIN/strings.xml b/packages/SystemUI/res/values-te-rIN/strings.xml
index fcd725a..62c377e 100644
--- a/packages/SystemUI/res/values-te-rIN/strings.xml
+++ b/packages/SystemUI/res/values-te-rIN/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"నెట్‌వర్క్ లేదు"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi ఆఫ్‌లో ఉంది"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"సేవ్ చేసిన నెట్‌వర్క్‌లు ఏవీ అందుబాటులో లేవు"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"ప్రసార స్క్రీన్"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"ప్రసారం చేస్తోంది"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"పేరులేని పరికరం"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"ప్రసారం చేయడానికి సిద్ధంగా ఉంది"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"శోధించు"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g>ని ప్రారంభించడం సాధ్యపడలేదు."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"అన్ని అనువర్తనాలను తీసివేయి"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"సమతలంగా విభజించు"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"లంబంగా విభజించు"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"అనుకూలంగా విభజించు"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"వీటిని మీరు అన్‌లాక్ చేయకముందే చూడండి"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"వద్దు, ధన్యవాదాలు"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"సెటప్ చేయి"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="screen_pinning_title" msgid="3273740381976175811">"స్క్రీన్ పిన్ చేయబడింది"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"ఇది మీరు అన్‌పిన్ చేసే వరకు దీన్ని వీక్షణలో ఉంచుతుంది. అన్‌పిన్ చేయడానికి వెనుకకు మరియు స్థూలదృష్టిని ఒకేసారి తాకి, ఉంచండి."</string>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index 2c24eee..6ef2791 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"ไม่มีเครือข่าย"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"ปิด WiFi"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"เครือข่ายที่บันทึกไว้ทั้งหมดไม่พร้อมใช้งาน"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"ส่งหน้าจอ"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"กำลังส่ง"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"อุปกรณ์ที่ไม่มีชื่อ"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"พร้อมที่จะส่ง"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"ค้นหา"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"ไม่สามารถเริ่มใช้ <xliff:g id="APP">%s</xliff:g>"</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"ปิดแอปพลิเคชันทั้งหมด"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"แยกในแนวนอน"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"แยกในแนวตั้ง"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"แยกแบบกำหนดเอง"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"ดูก่อนปลดล็อก"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"ไม่เป็นไร"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"ตั้งค่า"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="screen_pinning_title" msgid="3273740381976175811">"ตรึงหน้าจอแล้ว"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"การดำเนินการนี้จะเปิดหน้าจอนี้ไว้เสมอจนกว่าคุณจะเลิกตรึง แตะ \"กลับ\" และ \"ภาพรวม\" พร้อมกันค้างไว้เพื่อเลิกตรึง"</string>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index 8c8755d..493c9e7 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Walang Network"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Naka-off ang Wi-Fi"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Walang available na naka-save na mga network"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"I-cast ang screen"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Nagka-cast"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Walang pangalang device"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Handang mag-cast"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"maghanap"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Hindi masimulan <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"I-dismiss ang lahat ng application"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Split Horizontal"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Split Vertical"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Split Custom"</string>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index 64e3ea9..df07342 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Ağ yok"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Kablosuz Kapalı"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Kullanılabilir kaydedilmiş ağ yok"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Ekranı yayınla"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Yayınlanıyor"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Adsız cihaz"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Yayın için hazır"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"ara"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> başlatılamadı."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Tüm uygulamaları kapat"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Yatay Ayırma"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Dikey Ayırma"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Özel Ayırma"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Kilidi açmadan bildirimleri görün"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Hayır, teşekkürler"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Kur"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="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>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index d26b2c9..879bbbc 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -259,7 +259,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Немає мережі"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi вимкнено"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Немає збережених мереж"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Транслювати екран"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Трансляція"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Пристрій без назви"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Можна транслювати"</string>
@@ -289,9 +290,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"пошук"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Не вдалося запустити <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Закрити всі додатки"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Розділити горизонтально"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Розділити вертикально"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Розділити (власний варіант)"</string>
@@ -369,10 +367,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Переглядайте сповіщення, перш ніж розблокувати екран"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Ні, дякую"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Налаштув."</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="screen_pinning_title" msgid="3273740381976175811">"Екран закріплено"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Закріпить екран, щоб ви могли постійно його бачити, доки не відкріпите. Щоб відкріпити, одночасно натисніть і втримуйте кнопки \"Назад\" і \"Огляд\"."</string>
diff --git a/packages/SystemUI/res/values-ur-rPK/strings.xml b/packages/SystemUI/res/values-ur-rPK/strings.xml
index 7e26dd3..25cdd2d 100644
--- a/packages/SystemUI/res/values-ur-rPK/strings.xml
+++ b/packages/SystemUI/res/values-ur-rPK/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"کوئی نیٹ ورک نہیں ہے"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"‏Wi-Fi آف ہے"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"کوئی محفوظ کردہ نیٹ ورکس دستیاب نہیں ہیں"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"کاسٹ اسکرین"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"کاسٹنگ"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"بغیر نام والا آلہ"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"کاسٹ کرنے کیلئے تیار"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"تلاش کریں"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> کو شروع نہیں کیا جا سکا۔"</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"سبھی ایپلیکیشنز کو برخاست کریں"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"بلحاظ افقی الگ کریں"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"بلحاظ عمودی الگ کریں"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"بلحاظ حسب ضرورت الگ کریں"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"غیر مقفل کرنے سے پہلے انہیں دیکھیں"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"نہیں شکریہ"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"ترتیب دیں"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="screen_pinning_title" msgid="3273740381976175811">"اسکرین پن کردہ ہے"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"یہ اس کو اس وقت تک منظر میں رکھتا ہے جب تک آپ اس سے پن نہیں ہٹا دیتے۔ پن ہٹانے کیلئے واپس اور عمومی جائزہ کو ایک ساتھ ٹچ کریں اور پکڑ کر رکھیں۔"</string>
diff --git a/packages/SystemUI/res/values-uz-rUZ/strings.xml b/packages/SystemUI/res/values-uz-rUZ/strings.xml
index f316e4f..7d7df5f 100644
--- a/packages/SystemUI/res/values-uz-rUZ/strings.xml
+++ b/packages/SystemUI/res/values-uz-rUZ/strings.xml
@@ -257,7 +257,8 @@
     <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="1893629685050355115">"Ekranni translatsiya qilish"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <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>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"qidirish"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"“<xliff:g id="APP">%s</xliff:g>” ilovasini ishga tushirib bo‘lmadi."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Barcha ilovalarni olib tashlash"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Gorizontal yo‘nalishda bo‘lish"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Vertikal yo‘nalishda bo‘lish"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Boshqa usulda bo‘lish"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Ularni qulfdan chiqarishdan oldin ko‘ring"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Yo‘q, kerak emas"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Sozlash"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="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>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index e742239..14b8e1e 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Không có mạng nào"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Tắt Wi-Fi"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Không có mạng nào được lưu"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Màn hình truyền"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Đang truyền"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Thiết bị không có tên"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Sẵn sàng truyền"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"tìm kiếm"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Không thể khởi động <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Bỏ qua tất cả các ứng dụng"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Phân tách ngang"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Phân tách dọc"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Tùy chỉnh phân tách"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Xem thông báo trước khi bạn mở khóa"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Ko, cảm ơn"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Thiết lập"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="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>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index f543211..43dd4f1 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -259,7 +259,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"无网络"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"WLAN:关闭"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"没有可用的已保存网络"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"投射屏幕"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"正在投射"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"未命名设备"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"已准备好投射"</string>
@@ -289,9 +290,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"搜索"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"无法启动<xliff:g id="APP">%s</xliff:g>。"</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"关闭所有应用"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"水平分割"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"垂直分割"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"自定义分割"</string>
@@ -369,10 +367,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"无需解锁即可查看通知"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"不用了"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"设置"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="screen_pinning_title" msgid="3273740381976175811">"已固定屏幕"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"这将会固定显示此屏幕,直到您取消固定为止。触摸并同时按住“返回”和“概览”即可取消固定屏幕。"</string>
diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml
index f2f1c23..78eadee 100644
--- a/packages/SystemUI/res/values-zh-rHK/strings.xml
+++ b/packages/SystemUI/res/values-zh-rHK/strings.xml
@@ -259,7 +259,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"沒有網絡"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi 關閉"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"找不到已儲存的網絡"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"放送螢幕"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"正在放送"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"未命名的裝置"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"放送準備完成"</string>
@@ -289,9 +290,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"搜尋"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"無法啟動「<xliff:g id="APP">%s</xliff:g>」。"</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"關閉所有應用程式"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"水平分割"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"垂直分割"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"自訂分割"</string>
@@ -369,10 +367,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"解鎖前顯示"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"不用了,謝謝"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"設定"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="screen_pinning_title" msgid="3273740381976175811">"螢幕已固定"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"在您取消固定前,它會保持在檢視狀態。輕觸並同時按住 [返回] 和 [概覽],即可取消固定。"</string>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index 3d83fa6..5505db4 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -259,7 +259,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"沒有網路"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi 已關閉"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"找不到已儲存的網路"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"投放螢幕"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"投放"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"未命名的裝置"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"可以開始投放了"</string>
@@ -289,9 +290,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"搜尋"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"無法啟動「<xliff:g id="APP">%s</xliff:g>」。"</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"關閉所有應用程式"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"水平分割"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"垂直分割"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"自訂分割"</string>
@@ -369,10 +367,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"解鎖前顯示"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"不用了,謝謝"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"設定"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="screen_pinning_title" msgid="3273740381976175811">"螢幕已固定"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"這會讓目前的螢幕畫面保持顯示狀態,直到取消固定為止。同時按住返回按鈕和總覽按鈕即可取消固定。"</string>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index 3689b80..a020f21 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -257,7 +257,8 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Ayikho inethiwekhi"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"I-Wi-Fi icimile"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Awekho amanethiwekhi alondoloziwe atholakalayo"</string>
-    <string name="quick_settings_cast_title" msgid="1893629685050355115">"Isikrini sabadlali"</string>
+    <!-- no translation found for quick_settings_cast_title (7709016546426454729) -->
+    <skip />
     <string name="quick_settings_casting" msgid="6601710681033353316">"Ukusakaza"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Idivayisi engenalo igama"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Ilungele ukusakaza"</string>
@@ -287,9 +288,6 @@
     <string name="recents_search_bar_label" msgid="8074997400187836677">"sesha"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Ayikwazanga ukuqala i-<xliff:g id="APP">%s</xliff:g>."</string>
     <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Cashisa zonke izinhlelo zokusebenza"</string>
-    <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string>
-    <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string>
-    <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Hlukanisa okuvundlile"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Hlukanisa okumile"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Hlukanisa kwezifiso"</string>
@@ -367,10 +365,8 @@
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Ibone ngaphambi kokuthi uyivule"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Cha ngiyabonga"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Lungisa"</string>
-    <!-- no translation found for notification_expand_button_text (1037425494153780718) -->
-    <skip />
-    <!-- no translation found for notification_collapse_button_text (6883253262134328057) -->
-    <skip />
+    <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="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>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index d9aff44..66d494b 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -621,7 +621,7 @@
     <!-- QuickSettings: Wifi detail panel, text when there are no items [CHAR LIMIT=NONE] -->
     <string name="quick_settings_wifi_detail_empty_text">No saved networks available</string>
     <!-- QuickSettings: Cast title [CHAR LIMIT=NONE] -->
-    <string name="quick_settings_cast_title">Cast screen</string>
+    <string name="quick_settings_cast_title">Cast</string>
     <!-- QuickSettings: Cast detail panel, status text when casting [CHAR LIMIT=NONE] -->
     <string name="quick_settings_casting">Casting</string>
     <!-- QuickSettings: Cast detail panel, default device name [CHAR LIMIT=NONE] -->
@@ -682,12 +682,6 @@
     <!-- Recents: Dismiss all button. [CHAR LIMIT=NONE] -->
     <string name="recents_dismiss_all_message">Dismiss all applications</string>
 
-    <!-- Recents: MultiStack add stack button. [CHAR LIMIT=NONE] -->
-    <string name="recents_multistack_add_stack">+</string>
-    <!-- Recents: MultiStack remove stack button. [CHAR LIMIT=NONE] -->
-    <string name="recents_multistack_remove_stack">-</string>
-    <!-- Recents: MultiStack resize stack button. [CHAR LIMIT=NONE] -->
-    <string name="recents_multistack_resize_stack">[]</string>
     <!-- Recents: MultiStack add stack split horizontal radio button. [CHAR LIMIT=NONE] -->
     <string name="recents_multistack_add_stack_dialog_split_horizontal">Split Horizontal</string>
     <!-- Recents: MultiStack add stack split vertical radio button. [CHAR LIMIT=NONE] -->
diff --git a/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java b/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java
index 9bb626d..2e95498 100755
--- a/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java
+++ b/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java
@@ -193,7 +193,7 @@
         TypedArray atts = context.obtainStyledAttributes(attrs, R.styleable.BatteryMeterView,
                 defStyle, 0);
         final int frameColor = atts.getColor(R.styleable.BatteryMeterView_frameColor,
-                res.getColor(R.color.batterymeter_frame_color));
+                context.getColor(R.color.batterymeter_frame_color));
         TypedArray levels = res.obtainTypedArray(R.array.batterymeter_color_levels);
         TypedArray colors = res.obtainTypedArray(R.array.batterymeter_color_values);
 
@@ -240,10 +240,10 @@
         mWarningTextPaint.setTypeface(font);
         mWarningTextPaint.setTextAlign(Paint.Align.CENTER);
 
-        mChargeColor = getResources().getColor(R.color.batterymeter_charge_color);
+        mChargeColor = context.getColor(R.color.batterymeter_charge_color);
 
         mBoltPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
-        mBoltPaint.setColor(res.getColor(R.color.batterymeter_bolt_color));
+        mBoltPaint.setColor(context.getColor(R.color.batterymeter_bolt_color));
         mBoltPoints = loadBoltPoints(res);
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/SearchPanelCircleView.java b/packages/SystemUI/src/com/android/systemui/SearchPanelCircleView.java
index d8fb6da..f33e2b8 100644
--- a/packages/SystemUI/src/com/android/systemui/SearchPanelCircleView.java
+++ b/packages/SystemUI/src/com/android/systemui/SearchPanelCircleView.java
@@ -132,8 +132,8 @@
         mDisappearInterpolator = AnimationUtils.loadInterpolator(mContext,
                 android.R.interpolator.fast_out_linear_in);
         mBackgroundPaint.setAntiAlias(true);
-        mBackgroundPaint.setColor(getResources().getColor(R.color.search_panel_circle_color));
-        mRipplePaint.setColor(getResources().getColor(R.color.search_panel_ripple_color));
+        mBackgroundPaint.setColor(context.getColor(R.color.search_panel_circle_color));
+        mRipplePaint.setColor(context.getColor(R.color.search_panel_ripple_color));
         mRipplePaint.setAntiAlias(true);
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java b/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java
index 63dd17f..af1f795 100644
--- a/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java
+++ b/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java
@@ -159,7 +159,7 @@
                 .setContentText(mContext.getString(R.string.invalid_charger_text))
                 .setPriority(Notification.PRIORITY_MAX)
                 .setVisibility(Notification.VISIBILITY_PUBLIC)
-                .setColor(mContext.getResources().getColor(
+                .setColor(mContext.getColor(
                         com.android.internal.R.color.system_notification_accent_color));
         final Notification n = nb.build();
         if (n.headsUpContentView != null) {
@@ -183,7 +183,7 @@
                 .setDeleteIntent(pendingBroadcast(ACTION_DISMISSED_WARNING))
                 .setPriority(Notification.PRIORITY_MAX)
                 .setVisibility(Notification.VISIBILITY_PUBLIC)
-                .setColor(mContext.getResources().getColor(
+                .setColor(mContext.getColor(
                         com.android.internal.R.color.battery_saver_mode_color));
         if (hasBatterySettings()) {
             nb.setContentIntent(pendingBroadcast(ACTION_SHOW_BATTERY_SETTINGS));
@@ -214,7 +214,7 @@
                 .setOngoing(true)
                 .setShowWhen(false)
                 .setVisibility(Notification.VISIBILITY_PUBLIC)
-                .setColor(mContext.getResources().getColor(
+                .setColor(mContext.getColor(
                         com.android.internal.R.color.battery_saver_mode_color));
         addStopSaverAction(nb);
         if (hasSaverSettings()) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/DataUsageGraph.java b/packages/SystemUI/src/com/android/systemui/qs/DataUsageGraph.java
index d55ceaa..aff5d2b 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/DataUsageGraph.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/DataUsageGraph.java
@@ -44,10 +44,10 @@
     public DataUsageGraph(Context context, AttributeSet attrs) {
         super(context, attrs);
         final Resources res = context.getResources();
-        mTrackColor = res.getColor(R.color.data_usage_graph_track);
-        mUsageColor = res.getColor(R.color.system_accent_color);
-        mOverlimitColor = res.getColor(R.color.system_warning_color);
-        mWarningColor = res.getColor(R.color.data_usage_graph_warning);
+        mTrackColor = context.getColor(R.color.data_usage_graph_track);
+        mUsageColor = context.getColor(R.color.system_accent_color);
+        mOverlimitColor = context.getColor(R.color.system_warning_color);
+        mWarningColor = context.getColor(R.color.data_usage_graph_warning);
         mMarkerWidth = res.getDimensionPixelSize(R.dimen.data_usage_graph_marker_width);
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTileView.java b/packages/SystemUI/src/com/android/systemui/qs/QSTileView.java
index 16ae6b4..ec83ca7 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSTileView.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSTileView.java
@@ -88,7 +88,7 @@
         addView(mIcon);
 
         mDivider = new View(mContext);
-        mDivider.setBackgroundColor(res.getColor(R.color.qs_tile_divider));
+        mDivider.setBackgroundColor(context.getColor(R.color.qs_tile_divider));
         final int dh = res.getDimensionPixelSize(R.dimen.qs_tile_divider_height);
         mDivider.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, dh));
         addView(mDivider);
@@ -138,8 +138,8 @@
             mDualLabel = new QSDualTileLabel(mContext);
             mDualLabel.setId(android.R.id.title);
             mDualLabel.setBackgroundResource(R.drawable.btn_borderless_rect);
-            mDualLabel.setFirstLineCaret(res.getDrawable(R.drawable.qs_dual_tile_caret));
-            mDualLabel.setTextColor(res.getColor(R.color.qs_tile_text));
+            mDualLabel.setFirstLineCaret(mContext.getDrawable(R.drawable.qs_dual_tile_caret));
+            mDualLabel.setTextColor(mContext.getColor(R.color.qs_tile_text));
             mDualLabel.setPadding(0, mDualTileVerticalPaddingPx, 0, mDualTileVerticalPaddingPx);
             mDualLabel.setTypeface(CONDENSED);
             mDualLabel.setTextSize(TypedValue.COMPLEX_UNIT_PX,
@@ -157,7 +157,7 @@
         } else {
             mLabel = new TextView(mContext);
             mLabel.setId(android.R.id.title);
-            mLabel.setTextColor(res.getColor(R.color.qs_tile_text));
+            mLabel.setTextColor(mContext.getColor(R.color.qs_tile_text));
             mLabel.setGravity(Gravity.CENTER_HORIZONTAL);
             mLabel.setMinLines(2);
             mLabel.setPadding(0, 0, 0, 0);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DataUsageDetailView.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DataUsageDetailView.java
index eb816b7..d0ae383 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DataUsageDetailView.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DataUsageDetailView.java
@@ -96,7 +96,7 @@
         title.setText(titleId);
         final TextView usage = (TextView) findViewById(R.id.usage_text);
         usage.setText(formatBytes(bytes));
-        usage.setTextColor(res.getColor(usageColor));
+        usage.setTextColor(mContext.getColor(usageColor));
         final DataUsageGraph graph = (DataUsageGraph) findViewById(R.id.usage_graph);
         graph.setLevels(info.limitLevel, info.warningLevel, info.usageLevel);
         final TextView carrier = (TextView) findViewById(R.id.usage_carrier_text);
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
index 1561f70..1248672 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
@@ -74,8 +74,8 @@
     View mEmptyView;
     DebugOverlayView mDebugOverlay;
 
-    // MultiStack debug
-    RecentsMultiStackDialog mMultiStackDebugDialog;
+    // Resize task debug
+    RecentsResizeTaskDialog mResizeTaskDebugDialog;
 
     // Search AppWidget
     RecentsAppWidgetHost mAppWidgetHost;
@@ -592,37 +592,18 @@
     }
 
 
-    /**** RecentsMultiStackDialog ****/
+    /**** RecentsResizeTaskDialog ****/
 
-    private RecentsMultiStackDialog getMultiStackDebugDialog() {
-        if (mMultiStackDebugDialog == null) {
-            mMultiStackDebugDialog = new RecentsMultiStackDialog(getFragmentManager());
+    private RecentsResizeTaskDialog getResizeTaskDebugDialog() {
+        if (mResizeTaskDebugDialog == null) {
+            mResizeTaskDebugDialog = new RecentsResizeTaskDialog(getFragmentManager());
         }
-        return mMultiStackDebugDialog;
+        return mResizeTaskDebugDialog;
     }
 
     @Override
-    public void onMultiStackAddStack() {
-        RecentsMultiStackDialog dialog = getMultiStackDebugDialog();
-        dialog.showAddStackDialog();
-    }
-
-    @Override
-    public void onMultiStackResizeStack() {
-        RecentsMultiStackDialog dialog = getMultiStackDebugDialog();
-        dialog.showResizeStackDialog();
-    }
-
-    @Override
-    public void onMultiStackRemoveStack() {
-        RecentsMultiStackDialog dialog = getMultiStackDebugDialog();
-        dialog.showRemoveStackDialog();
-    }
-
-    @Override
-    public void onMultiStackMoveTask(Task t) {
-        RecentsMultiStackDialog dialog = getMultiStackDebugDialog();
-        dialog.showMoveTaskDialog(t);
+    public void onTaskResize(Task t) {
+        getResizeTaskDebugDialog().showResizeTaskDialog(t);
     }
 
     /**** RecentsView.RecentsViewCallbacks Implementation ****/
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java
index 1736c77..9263543 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java
@@ -248,14 +248,11 @@
         taskViewThumbnailAlpha = res.getFloat(R.dimen.recents_task_view_thumbnail_alpha);
 
         // Task bar colors
-        taskBarViewDefaultBackgroundColor =
-                res.getColor(R.color.recents_task_bar_default_background_color, null);
-        taskBarViewLightTextColor =
-                res.getColor(R.color.recents_task_bar_light_text_color, null);
-        taskBarViewDarkTextColor =
-                res.getColor(R.color.recents_task_bar_dark_text_color, null);
-        taskBarViewHighlightColor =
-                res.getColor(R.color.recents_task_bar_highlight_color, null);
+        taskBarViewDefaultBackgroundColor = context.getColor(
+                R.color.recents_task_bar_default_background_color);
+        taskBarViewLightTextColor = context.getColor(R.color.recents_task_bar_light_text_color);
+        taskBarViewDarkTextColor = context.getColor(R.color.recents_task_bar_dark_text_color);
+        taskBarViewHighlightColor = context.getColor(R.color.recents_task_bar_highlight_color);
         taskBarViewAffiliationColorMinAlpha = res.getFloat(
                 R.dimen.recents_task_affiliation_color_min_alpha_percentage);
 
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsMultiStackDialog.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsMultiStackDialog.java
deleted file mode 100644
index fdf9d39..0000000
--- a/packages/SystemUI/src/com/android/systemui/recents/RecentsMultiStackDialog.java
+++ /dev/null
@@ -1,339 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.recents;
-
-import android.app.ActivityManager;
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.app.FragmentManager;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.pm.ActivityInfo;
-import android.content.pm.ResolveInfo;
-import android.graphics.Rect;
-import android.os.Bundle;
-import android.util.MutableInt;
-import android.util.SparseArray;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.widget.EditText;
-import android.widget.Toast;
-import com.android.systemui.R;
-import com.android.systemui.recents.misc.SystemServicesProxy;
-import com.android.systemui.recents.model.RecentsTaskLoader;
-import com.android.systemui.recents.model.Task;
-
-import java.util.List;
-
-/**
- * A helper for the dialogs that show when multistack debugging is on.
- */
-public class RecentsMultiStackDialog extends DialogFragment {
-
-    static final String TAG = "RecentsMultiStackDialog";
-
-    public static final int ADD_STACK_DIALOG = 0;
-    public static final int ADD_STACK_PICK_APP_DIALOG = 1;
-    public static final int REMOVE_STACK_DIALOG = 2;
-    public static final int RESIZE_STACK_DIALOG = 3;
-    public static final int RESIZE_STACK_PICK_STACK_DIALOG = 4;
-    public static final int MOVE_TASK_DIALOG = 5;
-
-    FragmentManager mFragmentManager;
-    int mCurrentDialogType;
-    MutableInt mTargetStackIndex = new MutableInt(0);
-    Task mTaskToMove;
-    SparseArray<ActivityManager.StackInfo> mStacks;
-    List<ResolveInfo> mLauncherActivities;
-    Rect mAddStackRect;
-    Intent mAddStackIntent;
-
-    View mAddStackDialogContent;
-
-    public RecentsMultiStackDialog() {}
-
-    public RecentsMultiStackDialog(FragmentManager mgr) {
-        mFragmentManager = mgr;
-    }
-
-    /** Shows the add-stack dialog. */
-    void showAddStackDialog() {
-        mCurrentDialogType = ADD_STACK_DIALOG;
-        show(mFragmentManager, TAG);
-    }
-
-    /** Creates a new add-stack dialog. */
-    private void createAddStackDialog(final Context context, LayoutInflater inflater,
-            AlertDialog.Builder builder, final SystemServicesProxy ssp) {
-        builder.setTitle("Add Stack - Enter new dimensions");
-        mAddStackDialogContent =
-                inflater.inflate(R.layout.recents_multistack_stack_size_dialog, null, false);
-        Rect windowRect = ssp.getWindowRect();
-        setDimensionInEditText(mAddStackDialogContent, R.id.inset_left, windowRect.left);
-        setDimensionInEditText(mAddStackDialogContent, R.id.inset_top, windowRect.top);
-        setDimensionInEditText(mAddStackDialogContent, R.id.inset_right, windowRect.right);
-        setDimensionInEditText(mAddStackDialogContent, R.id.inset_bottom, windowRect.bottom);
-        builder.setView(mAddStackDialogContent);
-        builder.setPositiveButton("Add Stack", new DialogInterface.OnClickListener() {
-            @Override
-            public void onClick(DialogInterface dialog, int which) {
-                int left = getDimensionFromEditText(mAddStackDialogContent, R.id.inset_left);
-                int top = getDimensionFromEditText(mAddStackDialogContent, R.id.inset_top);
-                int right = getDimensionFromEditText(mAddStackDialogContent, R.id.inset_right);
-                int bottom = getDimensionFromEditText(mAddStackDialogContent, R.id.inset_bottom);
-                if (bottom <= top || right <= left) {
-                    Toast.makeText(context, "Invalid dimensions", Toast.LENGTH_SHORT).show();
-                    dismiss();
-                    return;
-                }
-
-                // Prompt the user for the app to start
-                dismiss();
-                mCurrentDialogType = ADD_STACK_PICK_APP_DIALOG;
-                mAddStackRect = new Rect(left, top, right, bottom);
-                show(mFragmentManager, TAG);
-            }
-        });
-        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
-            @Override
-            public void onClick(DialogInterface dialog, int which) {
-                dismiss();
-            }
-        });
-    }
-
-    /** Creates a new add-stack pick-app dialog. */
-    private void createAddStackPickAppDialog(final Context context, LayoutInflater inflater,
-            AlertDialog.Builder builder, final SystemServicesProxy ssp) {
-        mLauncherActivities = ssp.getLauncherApps();
-        mAddStackIntent = null;
-        int activityCount = mLauncherActivities.size();
-        CharSequence[] activityNames = new CharSequence[activityCount];
-        for (int i = 0; i < activityCount; i++) {
-            activityNames[i] = ssp.getActivityLabel(mLauncherActivities.get(i).activityInfo);
-        }
-        builder.setTitle("Add Stack - Pick starting app");
-        builder.setSingleChoiceItems(activityNames, -1,
-                new DialogInterface.OnClickListener() {
-                    @Override
-                    public void onClick(DialogInterface dialog, int which) {
-                        ActivityInfo ai = mLauncherActivities.get(which).activityInfo;
-                        mAddStackIntent = new Intent(Intent.ACTION_MAIN);
-                        mAddStackIntent.addCategory(Intent.CATEGORY_LAUNCHER);
-                        mAddStackIntent.setComponent(new ComponentName(ai.packageName, ai.name));
-                    }
-                });
-        builder.setPositiveButton("Add Stack", new DialogInterface.OnClickListener() {
-            @Override
-            public void onClick(DialogInterface dialog, int which) {
-                // Display 0 = default display
-                ssp.createNewStack(0, mAddStackRect, mAddStackIntent);
-            }
-        });
-        builder.setNegativeButton("Skip", new DialogInterface.OnClickListener() {
-            @Override
-            public void onClick(DialogInterface dialog, int which) {
-                // Display 0 = default display
-                ssp.createNewStack(0, mAddStackRect, null);
-            }
-        });
-    }
-
-    /** Shows the resize-stack dialog. */
-    void showResizeStackDialog() {
-        mCurrentDialogType = RESIZE_STACK_PICK_STACK_DIALOG;
-        show(mFragmentManager, TAG);
-    }
-
-    /** Creates a new resize-stack pick-stack dialog. */
-    private void createResizeStackPickStackDialog(final Context context, LayoutInflater inflater,
-            AlertDialog.Builder builder, final SystemServicesProxy ssp) {
-        mStacks = ssp.getAllStackInfos();
-        mTargetStackIndex.value = -1;
-        CharSequence[] stackNames = getAllStacksDescriptions(mStacks, -1, null);
-        builder.setTitle("Resize Stack - Pick stack");
-        builder.setSingleChoiceItems(stackNames, mTargetStackIndex.value,
-                new DialogInterface.OnClickListener() {
-                    @Override
-                    public void onClick(DialogInterface dialog, int which) {
-                        mTargetStackIndex.value = which;
-                    }
-                });
-        builder.setPositiveButton("Resize Stack", new DialogInterface.OnClickListener() {
-            @Override
-            public void onClick(DialogInterface dialog, int which) {
-                if (mTargetStackIndex.value != -1) {
-                    // Prompt the user for the new dimensions
-                    dismiss();
-                    mCurrentDialogType = RESIZE_STACK_DIALOG;
-                    show(mFragmentManager, TAG);
-                }
-            }
-        });
-        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
-            @Override
-            public void onClick(DialogInterface dialog, int which) {
-                dismiss();
-            }
-        });
-    }
-
-    /** Creates a new resize-stack dialog. */
-    private void createResizeStackDialog(final Context context, LayoutInflater inflater,
-            AlertDialog.Builder builder, final SystemServicesProxy ssp) {
-        builder.setTitle("Resize Stack - Enter new dimensions");
-        final ActivityManager.StackInfo stack = mStacks.valueAt(mTargetStackIndex.value);
-        mAddStackDialogContent =
-                inflater.inflate(R.layout.recents_multistack_stack_size_dialog, null, false);
-        setDimensionInEditText(mAddStackDialogContent, R.id.inset_left, stack.bounds.left);
-        setDimensionInEditText(mAddStackDialogContent, R.id.inset_top, stack.bounds.top);
-        setDimensionInEditText(mAddStackDialogContent, R.id.inset_right, stack.bounds.right);
-        setDimensionInEditText(mAddStackDialogContent, R.id.inset_bottom, stack.bounds.bottom);
-        builder.setView(mAddStackDialogContent);
-        builder.setPositiveButton("Resize Stack", new DialogInterface.OnClickListener() {
-            @Override
-            public void onClick(DialogInterface dialog, int which) {
-                int left = getDimensionFromEditText(mAddStackDialogContent, R.id.inset_left);
-                int top = getDimensionFromEditText(mAddStackDialogContent, R.id.inset_top);
-                int right = getDimensionFromEditText(mAddStackDialogContent, R.id.inset_right);
-                int bottom = getDimensionFromEditText(mAddStackDialogContent, R.id.inset_bottom);
-                if (bottom <= top || right <= left) {
-                    Toast.makeText(context, "Invalid dimensions", Toast.LENGTH_SHORT).show();
-                    dismiss();
-                    return;
-                }
-                ssp.resizeStack(stack.stackId, new Rect(left, top, right, bottom));
-            }
-        });
-        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
-            @Override
-            public void onClick(DialogInterface dialog, int which) {
-                dismiss();
-            }
-        });
-    }
-
-    /** Shows the remove-stack dialog. */
-    void showRemoveStackDialog() {
-        mCurrentDialogType = REMOVE_STACK_DIALOG;
-        show(mFragmentManager, TAG);
-    }
-
-    /** Shows the move-task dialog. */
-    void showMoveTaskDialog(Task task) {
-        mCurrentDialogType = MOVE_TASK_DIALOG;
-        mTaskToMove = task;
-        show(mFragmentManager, TAG);
-    }
-
-    /** Creates a new move-stack dialog. */
-    private void createMoveTaskDialog(final Context context, LayoutInflater inflater,
-                                AlertDialog.Builder builder, final SystemServicesProxy ssp) {
-        mStacks = ssp.getAllStackInfos();
-        mTargetStackIndex.value = -1;
-        CharSequence[] stackNames = getAllStacksDescriptions(mStacks, mTaskToMove.key.stackId,
-                mTargetStackIndex);
-        builder.setTitle("Move Task to Stack");
-        builder.setSingleChoiceItems(stackNames, mTargetStackIndex.value,
-                new DialogInterface.OnClickListener() {
-                    @Override
-                    public void onClick(DialogInterface dialog, int which) {
-                        mTargetStackIndex.value = which;
-                    }
-                });
-        builder.setPositiveButton("Move Task", new DialogInterface.OnClickListener() {
-            @Override
-            public void onClick(DialogInterface dialog, int which) {
-                if (mTargetStackIndex.value != -1) {
-                    ActivityManager.StackInfo toStack = mStacks.valueAt(mTargetStackIndex.value);
-                    if (toStack.stackId != mTaskToMove.key.stackId) {
-                        ssp.moveTaskToStack(mTaskToMove.key.id, toStack.stackId, true);
-                        mTaskToMove.setStackId(toStack.stackId);
-                    }
-                }
-            }
-        });
-        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
-            @Override
-            public void onClick(DialogInterface dialog, int which) {
-                dismiss();
-            }
-        });
-    }
-
-    /** Helper to get an integer value from an edit text. */
-    private int getDimensionFromEditText(View container, int id) {
-        String text = ((EditText) container.findViewById(id)).getText().toString();
-        if (text.trim().length() != 0) {
-            return Integer.parseInt(text.trim());
-        }
-        return 0;
-    }
-
-    /** Helper to set an integer value to an edit text. */
-    private void setDimensionInEditText(View container, int id, int value) {
-        ((EditText) container.findViewById(id)).setText("" + value);
-    }
-
-    /** Gets a list of all the stacks. */
-    private CharSequence[] getAllStacksDescriptions(SparseArray<ActivityManager.StackInfo> stacks,
-            int targetStackId, MutableInt indexOfTargetStackId) {
-        int stackCount = stacks.size();
-        CharSequence[] stackNames = new CharSequence[stackCount];
-        for (int i = 0; i < stackCount; i++) {
-            ActivityManager.StackInfo stack = stacks.valueAt(i);
-            Rect b = stack.bounds;
-            String desc = "Stack " + stack.stackId + " / " +
-                    "" + (stack.taskIds.length > 0 ? stack.taskIds.length : "No") + " tasks\n" +
-                    "(" + b.left + ", " + b.top + ")-(" + b.right + ", " + b.bottom + ")\n";
-            stackNames[i] = desc;
-            if (targetStackId != -1 && stack.stackId == targetStackId) {
-                indexOfTargetStackId.value = i;
-            }
-        }
-        return stackNames;
-    }
-
-    @Override
-    public Dialog onCreateDialog(Bundle args) {
-        final Context context = this.getActivity();
-        final SystemServicesProxy ssp = RecentsTaskLoader.getInstance().getSystemServicesProxy();
-        LayoutInflater inflater = getActivity().getLayoutInflater();
-        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
-        switch(mCurrentDialogType) {
-            case ADD_STACK_DIALOG:
-                createAddStackDialog(context, inflater, builder, ssp);
-                break;
-            case ADD_STACK_PICK_APP_DIALOG:
-                createAddStackPickAppDialog(context, inflater, builder, ssp);
-                break;
-            case MOVE_TASK_DIALOG:
-                createMoveTaskDialog(context, inflater, builder, ssp);
-                break;
-            case RESIZE_STACK_PICK_STACK_DIALOG:
-                createResizeStackPickStackDialog(context, inflater, builder, ssp);
-                break;
-            case RESIZE_STACK_DIALOG:
-                createResizeStackDialog(context, inflater, builder, ssp);
-                break;
-        }
-        return builder.create();
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsResizeTaskDialog.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsResizeTaskDialog.java
new file mode 100644
index 0000000..d67eceb
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsResizeTaskDialog.java
@@ -0,0 +1,128 @@
+/*
+ * 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.recents;
+
+import android.app.ActivityManager;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.app.FragmentManager;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.content.pm.ResolveInfo;
+import android.graphics.Rect;
+import android.os.Bundle;
+import android.util.MutableInt;
+import android.util.SparseArray;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.Toast;
+import com.android.systemui.R;
+import com.android.systemui.recents.misc.SystemServicesProxy;
+import com.android.systemui.recents.model.RecentsTaskLoader;
+import com.android.systemui.recents.model.Task;
+
+import java.util.List;
+
+/**
+ * A helper for the dialogs that show when task debugging is on.
+ */
+public class RecentsResizeTaskDialog extends DialogFragment {
+
+    static final String TAG = "RecentsResizeTaskDialog";
+
+    // The task we want to resize.
+    Task mTaskToResize;
+    FragmentManager mFragmentManager;
+    View mResizeTaskDialogContent;
+
+    public RecentsResizeTaskDialog() {}
+
+    public RecentsResizeTaskDialog(FragmentManager mgr) {
+        mFragmentManager = mgr;
+    }
+
+    /** Shows the resize-task dialog. */
+    void showResizeTaskDialog(Task t) {
+        mTaskToResize = t;
+        show(mFragmentManager, TAG);
+    }
+
+    /** Creates a new resize-task dialog. */
+    private void createResizeTaskDialog(final Context context, LayoutInflater inflater,
+            AlertDialog.Builder builder, final SystemServicesProxy ssp) {
+        builder.setTitle("Resize Task - Enter new dimensions");
+        mResizeTaskDialogContent =
+                inflater.inflate(R.layout.recents_multistack_stack_size_dialog, null, false);
+        Rect bounds = ssp.getTaskBounds(mTaskToResize.key.stackId);
+        setDimensionInEditText(mResizeTaskDialogContent, R.id.inset_left, bounds.left);
+        setDimensionInEditText(mResizeTaskDialogContent, R.id.inset_top, bounds.top);
+        setDimensionInEditText(mResizeTaskDialogContent, R.id.inset_right, bounds.right);
+        setDimensionInEditText(mResizeTaskDialogContent, R.id.inset_bottom, bounds.bottom);
+        builder.setView(mResizeTaskDialogContent);
+        builder.setPositiveButton("Resize Task", new DialogInterface.OnClickListener() {
+            @Override
+            public void onClick(DialogInterface dialog, int which) {
+                int left = getDimensionFromEditText(mResizeTaskDialogContent, R.id.inset_left);
+                int top = getDimensionFromEditText(mResizeTaskDialogContent, R.id.inset_top);
+                int right = getDimensionFromEditText(mResizeTaskDialogContent, R.id.inset_right);
+                int bottom = getDimensionFromEditText(mResizeTaskDialogContent, R.id.inset_bottom);
+                if (bottom <= top || right <= left) {
+                    Toast.makeText(context, "Invalid dimensions", Toast.LENGTH_SHORT).show();
+                    dismiss();
+                    return;
+                }
+                ssp.resizeTask(mTaskToResize.key.id, new Rect(left, top, right, bottom));
+                dismiss();
+            }
+        });
+        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
+            @Override
+            public void onClick(DialogInterface dialog, int which) {
+                dismiss();
+            }
+        });
+    }
+
+    /** Helper to get an integer value from an edit text. */
+    private int getDimensionFromEditText(View container, int id) {
+        String text = ((EditText) container.findViewById(id)).getText().toString();
+        if (text.trim().length() != 0) {
+            return Integer.parseInt(text.trim());
+        }
+        return 0;
+    }
+
+    /** Helper to set an integer value to an edit text. */
+    private void setDimensionInEditText(View container, int id, int value) {
+        ((EditText) container.findViewById(id)).setText("" + value);
+    }
+
+    @Override
+    public Dialog onCreateDialog(Bundle args) {
+        final Context context = this.getActivity();
+        final SystemServicesProxy ssp = RecentsTaskLoader.getInstance().getSystemServicesProxy();
+        LayoutInflater inflater = getActivity().getLayoutInflater();
+        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+        createResizeTaskDialog(context, inflater, builder, ssp);
+        return builder.create();
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java b/packages/SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java
index 502862e..cbf5c05 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java
@@ -144,7 +144,7 @@
             boolean isLandscape = isLandscapePhone(mContext);
 
             inflateView(isLandscape);
-            int bgColor = mContext.getResources().getColor(
+            int bgColor = mContext.getColor(
                     R.color.screen_pinning_request_window_bg);
             if (ActivityManager.isHighEndGfx()) {
                 mLayout.setAlpha(0f);
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 72040fe..a473a29 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java
@@ -233,23 +233,6 @@
         return null;
     }
 
-    /** Returns a list of all the launcher apps sorted by name. */
-    public List<ResolveInfo> getLauncherApps() {
-        if (mPm == null) return new ArrayList<ResolveInfo>();
-
-        final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
-        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
-        List<ResolveInfo> activities = mPm.queryIntentActivities(mainIntent, 0 /* flags */);
-        Collections.sort(activities, new Comparator<ResolveInfo>() {
-            @Override
-            public int compare(ResolveInfo o1, ResolveInfo o2) {
-                return getActivityLabel(o1.activityInfo).compareTo(
-                        getActivityLabel(o2.activityInfo));
-            }
-        });
-        return activities;
-    }
-
     /** Returns whether the recents is currently running */
     public boolean isRecentsTopMost(ActivityManager.RunningTaskInfo topTask,
             AtomicBoolean isHomeTopMost) {
@@ -272,27 +255,20 @@
         return false;
     }
 
-    /** Create a new stack. */
-    public void createNewStack(int displayId, Rect bounds, Intent activity) {
-        try {
-            IActivityContainer container = mIam.createStackOnDisplay(displayId);
-            if (container != null) {
-                // Resize the stack
-                resizeStack(container.getStackId(), bounds);
-                // Start the new activity on that stack
-                container.startActivity(activity);
-            }
-        } catch (RemoteException e) {
-            e.printStackTrace();
-        }
+    /** Get the bounds of a stack / task. */
+    public Rect getTaskBounds(int stackId) {
+        ActivityManager.StackInfo info = getAllStackInfos().get(stackId);
+        if (info != null)
+          return getAllStackInfos().get(stackId).bounds;
+        return new Rect();
     }
 
-    /** Resizes a stack. */
-    public void resizeStack(int stackId, Rect bounds) {
+    /** Resize a given task. */
+    public void resizeTask(int taskId, Rect bounds) {
         if (mIam == null) return;
 
         try {
-            mIam.resizeStack(stackId, bounds);
+            mIam.resizeTask(taskId, bounds);
         } catch (RemoteException e) {
             e.printStackTrace();
         }
@@ -406,18 +382,6 @@
         }
     }
 
-    /** Moves a task to another stack. */
-    public void moveTaskToStack(int taskId, int stackId, boolean toTop) {
-        if (mIam == null) return;
-        if (Constants.DebugFlags.App.EnableSystemServicesProxy) return;
-
-        try {
-            mIam.moveTaskToStack(taskId, stackId, toTop);
-        } catch (RemoteException e) {
-            e.printStackTrace();
-        }
-    }
-
     /** Removes the task */
     public void removeTask(int taskId) {
         if (mAm == null) return;
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java
index d46e41b..448a7a9 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java
@@ -59,17 +59,12 @@
         public void onExitToHomeAnimationTriggered();
         public void onScreenPinningRequest();
 
-        public void onMultiStackAddStack();
-        public void onMultiStackResizeStack();
-        public void onMultiStackRemoveStack();
-        public void onMultiStackMoveTask(Task t);
+        public void onTaskResize(Task t);
     }
 
     RecentsConfiguration mConfig;
     LayoutInflater mInflater;
     DebugOverlayView mDebugOverlay;
-    ViewStub mMultiStackDebugStub;
-    View mMultiStackDebugView;
     RecentsViewLayoutAlgorithm mLayoutAlgorithm;
 
     ArrayList<TaskStack> mStacks;
@@ -96,28 +91,6 @@
         mLayoutAlgorithm = new RecentsViewLayoutAlgorithm(mConfig);
     }
 
-    @Override
-    protected void onFinishInflate() {
-        if (!mConfig.multiStackEnabled) return;
-
-        mMultiStackDebugStub = (ViewStub) findViewById(R.id.multistack_debug_view_stub);
-        if (mMultiStackDebugView == null) {
-            mMultiStackDebugView = mMultiStackDebugStub.inflate();
-            mMultiStackDebugView.findViewById(R.id.add_stack).setOnClickListener(new View.OnClickListener() {
-                @Override
-                public void onClick(View v) {
-                    mCb.onMultiStackAddStack();
-                }
-            });
-            mMultiStackDebugView.findViewById(R.id.resize_stack).setOnClickListener(new View.OnClickListener() {
-                @Override
-                public void onClick(View v) {
-                    mCb.onMultiStackResizeStack();
-                }
-            });
-        }
-    }
-
     /** Sets the callbacks */
     public void setCallbacks(RecentsViewCallbacks cb) {
         mCb = cb;
@@ -167,11 +140,6 @@
             }
         }
 
-        // Bring the debug view to the front
-        if (mMultiStackDebugView != null) {
-            mMultiStackDebugView.bringToFront();
-        }
-
         // Trigger a new layout
         requestLayout();
     }
@@ -330,11 +298,6 @@
             }
         }
 
-        // Measure the multistack debug view
-        if (mMultiStackDebugView != null) {
-            mMultiStackDebugView.measure(width, height);
-        }
-
         setMeasuredDimension(width, height);
     }
 
@@ -363,18 +326,6 @@
                         top + stackView.getMeasuredHeight());
             }
         }
-
-        // Layout the multistack debug view
-        if (mMultiStackDebugView != null) {
-            Rect taskStackBounds = new Rect();
-            mConfig.getAvailableTaskStackBounds(getMeasuredWidth(), getMeasuredHeight(),
-                    mConfig.systemInsets.top, mConfig.systemInsets.right, taskStackBounds);
-            mMultiStackDebugView.layout(left,
-                    taskStackBounds.bottom - mConfig.systemInsets.bottom -
-                            mMultiStackDebugView.getMeasuredHeight(),
-                    left + mMultiStackDebugView.getMeasuredWidth(),
-                    taskStackBounds.bottom - mConfig.systemInsets.bottom);
-        }
     }
 
     @Override
@@ -638,9 +589,9 @@
     }
 
     @Override
-    public void onMultiStackMoveTask(Task t) {
+    public void onTaskResize(Task t) {
         if (mCb != null) {
-            mCb.onMultiStackMoveTask(t);
+            mCb.onTaskResize(t);
         }
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java
index 21975b0..e81a1d0 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java
@@ -61,7 +61,7 @@
         public void onTaskStackFilterTriggered();
         public void onTaskStackUnfilterTriggered();
 
-        public void onMultiStackMoveTask(Task t);
+        public void onTaskResize(Task t);
     }
 
     RecentsConfiguration mConfig;
@@ -1339,9 +1339,9 @@
     }
 
     @Override
-    public void onMultiStackMoveTask(TaskView tv) {
+    public void onTaskResize(TaskView tv) {
         if (mCb != null) {
-            mCb.onMultiStackMoveTask(tv.getTask());
+            mCb.onTaskResize(tv.getTask());
         }
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java
index 6cdddc5..509560eb 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java
@@ -24,6 +24,7 @@
 import android.view.ViewConfiguration;
 import android.view.ViewParent;
 import com.android.systemui.recents.Constants;
+import com.android.systemui.recents.Recents;
 import com.android.systemui.recents.RecentsConfiguration;
 
 import java.util.List;
@@ -53,6 +54,8 @@
     int mScrollTouchSlop;
     // The page touch slop is used to calculate when we start swiping
     float mPagingTouchSlop;
+    // Used to calculate when a tap is outside a task view rectangle.
+    final int mWindowTouchSlop;
 
     SwipeHelper mSwipeHelper;
     boolean mInterceptedBySwipeHelper;
@@ -64,6 +67,7 @@
         mMaximumVelocity = configuration.getScaledMaximumFlingVelocity();
         mScrollTouchSlop = configuration.getScaledTouchSlop();
         mPagingTouchSlop = configuration.getScaledPagingTouchSlop();
+        mWindowTouchSlop = configuration.getScaledWindowTouchSlop();
         mSv = sv;
         mScroller = scroller;
         mConfig = config;
@@ -314,6 +318,9 @@
                 } else if (mScroller.isScrollOutOfBounds()) {
                     // Animate the scroll back into bounds
                     mScroller.animateBoundScroll();
+                } else if (mActiveTaskView == null) {
+                    // This tap didn't start on a task.
+                    maybeHideRecentsFromBackgroundTap((int) ev.getX(), (int) ev.getY());
                 }
 
                 mActivePointerId = INACTIVE_POINTER_ID;
@@ -351,6 +358,34 @@
         return true;
     }
 
+    /** Hides recents if the up event at (x, y) is a tap on the background area. */
+    void maybeHideRecentsFromBackgroundTap(int x, int y) {
+        // Ignore the up event if it's too far from its start position. The user might have been
+        // trying to scroll or swipe.
+        int dx = Math.abs(mInitialMotionX - x);
+        int dy = Math.abs(mInitialMotionY - y);
+        if (dx > mScrollTouchSlop || dy > mScrollTouchSlop) {
+            return;
+        }
+
+        // Shift the tap position toward the center of the task stack and check to see if it would
+        // have hit a view. The user might have tried to tap on a task and missed slightly.
+        int shiftedX = x;
+        if (x > mSv.getTouchableRegion().centerX()) {
+            shiftedX -= mWindowTouchSlop;
+        } else {
+            shiftedX += mWindowTouchSlop;
+        }
+        if (findViewAtPoint(shiftedX, y) != null) {
+            return;
+        }
+
+        // The user intentionally tapped on the background, which is like a tap on the "desktop".
+        // Hide recents and transition to the launcher.
+        Recents recents = Recents.getInstanceAndStartIfNeeded(mSv.getContext());
+        recents.hideRecents(false /* altTab */, true /* homeKey */);
+    }
+
     /** Handles generic motion events */
     public boolean onGenericMotionEvent(MotionEvent ev) {
         if ((ev.getSource() & InputDevice.SOURCE_CLASS_POINTER) ==
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java
index 098f2f9..682775b 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java
@@ -46,7 +46,7 @@
         public void onTaskViewClipStateChanged(TaskView tv);
         public void onTaskViewFocusChanged(TaskView tv, boolean focused);
 
-        public void onMultiStackMoveTask(TaskView tv);
+        public void onTaskResize(TaskView tv);
     }
 
     RecentsConfiguration mConfig;
@@ -732,7 +732,7 @@
                         dismissTask();
                     } else if (v == mHeaderView.mMoveTaskButton) {
                         if (mCb != null) {
-                            mCb.onMultiStackMoveTask(tv);
+                            mCb.onTaskResize(tv);
                         }
                     }
                 }
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
index 1b71668..9d349ab 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
@@ -724,7 +724,7 @@
             .setVisibility(Notification.VISIBILITY_PUBLIC) // ok to show outside lockscreen
             .setCategory(Notification.CATEGORY_ERROR)
             .setAutoCancel(true)
-            .setColor(context.getResources().getColor(
+            .setColor(context.getColor(
                         com.android.internal.R.color.system_notification_accent_color));
         Notification n =
             new Notification.BigTextStyle(b)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java b/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java
index 0e5fd94..c0b3a9b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java
@@ -154,15 +154,15 @@
         mAppearAnimationFilter = new PorterDuffColorFilter(0, PorterDuff.Mode.SRC_ATOP);
         mRoundedRectCornerRadius = getResources().getDimensionPixelSize(
                 R.dimen.notification_material_rounded_rect_radius);
-        mLegacyColor = getResources().getColor(R.color.notification_legacy_background_color);
-        mNormalColor = getResources().getColor(R.color.notification_material_background_color);
-        mLowPriorityColor = getResources().getColor(
+        mLegacyColor = context.getColor(R.color.notification_legacy_background_color);
+        mNormalColor = context.getColor(R.color.notification_material_background_color);
+        mLowPriorityColor = context.getColor(
                 R.color.notification_material_background_low_priority_color);
-        mTintedRippleColor = context.getResources().getColor(
+        mTintedRippleColor = context.getColor(
                 R.color.notification_ripple_tinted_color);
-        mLowPriorityRippleColor = context.getResources().getColor(
+        mLowPriorityRippleColor = context.getColor(
                 R.color.notification_ripple_color_low_priority);
-        mNormalRippleColor = context.getResources().getColor(
+        mNormalRippleColor = context.getColor(
                 R.color.notification_ripple_untinted_color);
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
index fab7409..55bdcac 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
@@ -661,7 +661,7 @@
                     .setContentText(mContext.getString(R.string.hidden_notifications_text))
                     .setPriority(Notification.PRIORITY_HIGH)
                     .setOngoing(true)
-                    .setColor(res.getColor(colorRes))
+                    .setColor(mContext.getColor(colorRes))
                     .setContentIntent(setupIntent)
                     .addAction(R.drawable.ic_close,
                             mContext.getString(R.string.hidden_notifications_cancel),
@@ -789,7 +789,7 @@
             final int color = sbn.getNotification().color;
             if (isMediaNotification(entry)) {
                 entry.row.setTintColor(color == Notification.COLOR_DEFAULT
-                        ? mContext.getResources().getColor(
+                        ? mContext.getColor(
                                 R.color.notification_material_background_media_default_color)
                         : color);
             }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationOverflowIconsView.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationOverflowIconsView.java
index da8ef3e..88bb714 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationOverflowIconsView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationOverflowIconsView.java
@@ -45,7 +45,7 @@
     protected void onFinishInflate() {
         super.onFinishInflate();
         mNotificationColorUtil = NotificationColorUtil.getInstance(getContext());
-        mTintColor = getResources().getColor(R.color.keyguard_overflow_content_color);
+        mTintColor = getContext().getColor(R.color.keyguard_overflow_content_color);
         mIconSize = getResources().getDimensionPixelSize(
                 com.android.internal.R.dimen.status_bar_icon_size);
     }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationTemplateViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationTemplateViewWrapper.java
index 59b62e5..958b8b5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationTemplateViewWrapper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationTemplateViewWrapper.java
@@ -60,7 +60,7 @@
         super(view);
         mIconDarkAlpha = ctx.getResources().getInteger(R.integer.doze_small_icon_alpha);
         mIconBackgroundDarkColor =
-                ctx.getResources().getColor(R.color.doze_small_icon_background_color);
+                ctx.getColor(R.color.doze_small_icon_background_color);
         mLinearOutSlowInInterpolator = AnimationUtils.loadInterpolator(ctx,
                 android.R.interpolator.linear_out_slow_in);
         resolveViews();
@@ -79,7 +79,8 @@
 
         // If the icon already has a color filter, we assume that we already forced the icon to be
         // white when we created the notification.
-        mIconForceGraysaleWhenDark = mIcon != null && mIcon.getDrawable().getColorFilter() != null;
+        final Drawable iconDrawable = mIcon != null ? mIcon.getDrawable() : null;
+        mIconForceGraysaleWhenDark = iconDrawable != null && iconDrawable.getColorFilter() != null;
     }
 
     private ImageView resolveIcon(ImageView largeIcon, ImageView rightIcon) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java
index d02cd17..e6847d8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java
@@ -55,7 +55,7 @@
         mSlot = slot;
         mNumberPain = new Paint();
         mNumberPain.setTextAlign(Paint.Align.CENTER);
-        mNumberPain.setColor(res.getColor(R.drawable.notification_number_text_color));
+        mNumberPain.setColor(context.getColor(R.drawable.notification_number_text_color));
         mNumberPain.setAntiAlias(true);
         setNotification(notification);
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java
index 2d76645..1601b83 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java
@@ -145,12 +145,12 @@
                 mTransparent = 0x2f0000ff;
                 mWarning = 0xffff0000;
             } else {
-                mOpaque = res.getColor(R.color.system_bar_background_opaque);
-                mSemiTransparent = res.getColor(R.color.system_bar_background_semi_transparent);
-                mTransparent = res.getColor(R.color.system_bar_background_transparent);
-                mWarning = res.getColor(com.android.internal.R.color.battery_saver_mode_color);
+                mOpaque = context.getColor(R.color.system_bar_background_opaque);
+                mSemiTransparent = context.getColor(R.color.system_bar_background_semi_transparent);
+                mTransparent = context.getColor(R.color.system_bar_background_transparent);
+                mWarning = context.getColor(com.android.internal.R.color.battery_saver_mode_color);
             }
-            mGradient = res.getDrawable(gradientResourceId);
+            mGradient = context.getDrawable(gradientResourceId);
             mInterpolator = new LinearInterpolator();
         }
 
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 f3ec34a..2c389fb 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -535,8 +535,7 @@
         updateDisplaySize();
         mScrimSrcModeEnabled = mContext.getResources().getBoolean(
                 R.bool.config_status_bar_scrim_behind_use_src);
-        mLightModeIconColor = mContext.getResources().getColor(R.color.light_mode_icon_color,
-                mContext.getTheme());
+        mLightModeIconColor = mContext.getColor(R.color.light_mode_icon_color);
 
         super.start(); // calls createAndAddWindows()
 
@@ -613,7 +612,7 @@
 
         if (!ActivityManager.isHighEndGfx()) {
             mStatusBarWindow.setBackground(null);
-            mNotificationPanel.setBackground(new FastColorDrawable(context.getResources().getColor(
+            mNotificationPanel.setBackground(new FastColorDrawable(context.getColor(
                     R.color.notification_panel_solid_background)));
         }
         if (ENABLE_HEADS_UP) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonRipple.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonRipple.java
index a3ebb09..3f63b5f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonRipple.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonRipple.java
@@ -26,7 +26,7 @@
 import android.graphics.Paint;
 import android.graphics.PixelFormat;
 import android.graphics.drawable.Drawable;
-import android.view.HardwareCanvas;
+import android.view.DisplayListCanvas;
 import android.view.RenderNodeAnimator;
 import android.view.View;
 import android.view.animation.Interpolator;
@@ -106,7 +106,7 @@
     public void draw(Canvas canvas) {
         mSupportHardware = canvas.isHardwareAccelerated();
         if (mSupportHardware) {
-            drawHardware((HardwareCanvas) canvas);
+            drawHardware((DisplayListCanvas) canvas);
         } else {
             drawSoftware(canvas);
         }
@@ -131,7 +131,7 @@
         return getBounds().width() > getBounds().height();
     }
 
-    private void drawHardware(HardwareCanvas c) {
+    private void drawHardware(DisplayListCanvas c) {
         if (mDrawingHardwareGlow) {
             c.drawRoundRect(mLeftProp, mTopProp, mRightProp, mBottomProp, mRxProp, mRyProp,
                     mPaintProp);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcherScrim.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcherScrim.java
index 2d04d8e..353e07d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcherScrim.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcherScrim.java
@@ -47,7 +47,7 @@
 
     public KeyguardUserSwitcherScrim(View host) {
         host.addOnLayoutChangeListener(this);
-        mDarkColor = host.getResources().getColor(
+        mDarkColor = host.getContext().getColor(
                 R.color.keyguard_user_switcher_background_gradient_color);
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java b/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java
index f804736..5771d22 100644
--- a/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java
+++ b/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java
@@ -327,7 +327,7 @@
                 pi = PendingIntent.getBroadcastAsUser(mContext, 0, intent, 0,
                         UserHandle.CURRENT);
             }
-            mUsbStorageNotification.color = mContext.getResources().getColor(
+            mUsbStorageNotification.color = mContext.getColor(
                     com.android.internal.R.color.system_notification_accent_color);
             mUsbStorageNotification.setLatestEventInfo(mContext, title, message, pi);
             mUsbStorageNotification.visibility = Notification.VISIBILITY_PUBLIC;
@@ -422,7 +422,7 @@
             }
 
             mMediaStorageNotification.icon = icon;
-            mMediaStorageNotification.color = mContext.getResources().getColor(
+            mMediaStorageNotification.color = mContext.getColor(
                     com.android.internal.R.color.system_notification_accent_color);
             mMediaStorageNotification.setLatestEventInfo(mContext, title, message, pi);
             mMediaStorageNotification.visibility = Notification.VISIBILITY_PUBLIC;
diff --git a/packages/SystemUI/src/com/android/systemui/volume/SegmentedButtons.java b/packages/SystemUI/src/com/android/systemui/volume/SegmentedButtons.java
index 2f02f7c..5f5b881 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/SegmentedButtons.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/SegmentedButtons.java
@@ -60,7 +60,7 @@
             final Object tag = c.getTag();
             final boolean selected = Objects.equals(mSelectedValue, tag);
             c.setSelected(selected);
-            c.getCompoundDrawables()[1].setTint(mContext.getResources().getColor(selected
+            c.getCompoundDrawables()[1].setTint(mContext.getColor(selected
                     ? R.color.segmented_button_selected : R.color.segmented_button_unselected));
         }
         fireOnSelected();
diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeUI.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeUI.java
index 687452d..ac08904 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/VolumeUI.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeUI.java
@@ -330,7 +330,7 @@
                                     PendingIntent.FLAG_UPDATE_CURRENT))
                             .setPriority(Notification.PRIORITY_MIN)
                             .setVisibility(Notification.VISIBILITY_PUBLIC)
-                            .setColor(mContext.getResources().getColor(
+                            .setColor(mContext.getColor(
                                     com.android.internal.R.color.system_notification_accent_color))
                             .build());
         }
diff --git a/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java b/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java
index 6cecc8f..878ab712 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java
@@ -124,9 +124,8 @@
         mPrefs = new Prefs();
         mInflater = LayoutInflater.from(mContext.getApplicationContext());
         mIconPulser = new IconPulser(mContext);
-        final Resources res = mContext.getResources();
-        mSubheadWarningColor = res.getColor(R.color.system_warning_color);
-        mSubheadColor = res.getColor(R.color.qs_subhead);
+        mSubheadWarningColor = context.getColor(R.color.system_warning_color);
+        mSubheadColor = context.getColor(R.color.qs_subhead);
         mInterpolator = AnimationUtils.loadInterpolator(mContext,
                 com.android.internal.R.interpolator.fast_out_slow_in);
         mForeverId = Condition.newId(mContext).appendPath("forever").build();
diff --git a/rs/java/android/renderscript/Allocation.java b/rs/java/android/renderscript/Allocation.java
index c6afa2c..523c8fb 100644
--- a/rs/java/android/renderscript/Allocation.java
+++ b/rs/java/android/renderscript/Allocation.java
@@ -76,6 +76,8 @@
             new HashMap<Long, Allocation>();
     OnBufferAvailableListener mBufferNotifier;
 
+    private Surface mGetSurfaceSurface = null;
+
     private Element.DataType validateObjectIsPrimitiveArray(Object d, boolean checkType) {
         final Class c = d.getClass();
         if (!c.isArray()) {
@@ -1990,7 +1992,12 @@
         if ((mUsage & USAGE_IO_INPUT) == 0) {
             throw new RSInvalidStateException("Allocation is not a surface texture.");
         }
-        return mRS.nAllocationGetSurface(getID(mRS));
+
+        if (mGetSurfaceSurface == null) {
+            mGetSurfaceSurface = mRS.nAllocationGetSurface(getID(mRS));
+        }
+
+        return mGetSurfaceSurface;
     }
 
     /**
diff --git a/rs/java/android/renderscript/Mesh.java b/rs/java/android/renderscript/Mesh.java
index 1a5dc9e..5b4cadb 100644
--- a/rs/java/android/renderscript/Mesh.java
+++ b/rs/java/android/renderscript/Mesh.java
@@ -811,9 +811,7 @@
 
             sm.getVertexAllocation(0).copy1DRangeFromUnchecked(0, mMaxIndex, mVtxData);
             if(uploadToBufferObject) {
-                if (uploadToBufferObject) {
-                    sm.getVertexAllocation(0).syncAll(Allocation.USAGE_SCRIPT);
-                }
+                sm.getVertexAllocation(0).syncAll(Allocation.USAGE_SCRIPT);
             }
 
             sm.getIndexSetAllocation(0).copy1DRangeFromUnchecked(0, mIndexCount, mIndexData);
diff --git a/rs/java/android/renderscript/Script.java b/rs/java/android/renderscript/Script.java
index 83aeedd..65056ac 100644
--- a/rs/java/android/renderscript/Script.java
+++ b/rs/java/android/renderscript/Script.java
@@ -251,9 +251,14 @@
                 "At least one of ain or aout is required to be non-null.");
         }
 
-        long[] in_ids = new long[ains.length];
-        for (int index = 0; index < ains.length; ++index) {
-            in_ids[index] = ains[index].getID(mRS);
+        long[] in_ids;
+        if (ains != null) {
+            in_ids = new long[ains.length];
+            for (int index = 0; index < ains.length; ++index) {
+                in_ids[index] = ains[index].getID(mRS);
+            }
+        } else {
+            in_ids = null;
         }
 
         long out_id = 0;
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
index a712d78..bb5ff1b 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -352,6 +352,7 @@
         intentFilter.addAction(Intent.ACTION_USER_SWITCHED);
         intentFilter.addAction(Intent.ACTION_USER_REMOVED);
         intentFilter.addAction(Intent.ACTION_USER_PRESENT);
+        intentFilter.addAction(Intent.ACTION_SETTING_RESTORED);
 
         mContext.registerReceiverAsUser(new BroadcastReceiver() {
             @Override
@@ -369,6 +370,15 @@
                             onUserStateChangedLocked(userState);
                         }
                     }
+                } else if (Intent.ACTION_SETTING_RESTORED.equals(action)) {
+                    final String which = intent.getStringExtra(Intent.EXTRA_SETTING_NAME);
+                    if (Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES.equals(which)) {
+                        synchronized (mLock) {
+                            restoreEnabledAccessibilityServicesLocked(
+                                    intent.getStringExtra(Intent.EXTRA_SETTING_PREVIOUS_VALUE),
+                                    intent.getStringExtra(Intent.EXTRA_SETTING_NEW_VALUE));
+                        }
+                    }
                 }
             }
         }, UserHandle.ALL, intentFilter, null, null);
@@ -857,6 +867,21 @@
         }
     }
 
+    // Called only during settings restore; currently supports only the owner user
+    void restoreEnabledAccessibilityServicesLocked(String oldSetting, String newSetting) {
+        readComponentNamesFromStringLocked(oldSetting, mTempComponentNameSet, false);
+        readComponentNamesFromStringLocked(newSetting, mTempComponentNameSet, true);
+
+        UserState userState = getUserStateLocked(UserHandle.USER_OWNER);
+        userState.mEnabledServices.clear();
+        userState.mEnabledServices.addAll(mTempComponentNameSet);
+        persistComponentNamesToSettingLocked(
+                Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES,
+                userState.mEnabledServices,
+                UserHandle.USER_OWNER);
+        onUserStateChangedLocked(userState);
+    }
+
     private InteractionBridge getInteractionBridgeLocked() {
         if (mInteractionBridge == null) {
             mInteractionBridge = new InteractionBridge();
@@ -1129,10 +1154,27 @@
             Set<ComponentName> outComponentNames) {
         String settingValue = Settings.Secure.getStringForUser(mContext.getContentResolver(),
                 settingName, userId);
-        outComponentNames.clear();
-        if (settingValue != null) {
+        readComponentNamesFromStringLocked(settingValue, outComponentNames, false);
+    }
+
+    /**
+     * Populates a set with the {@link ComponentName}s contained in a colon-delimited string.
+     *
+     * @param names The colon-delimited string to parse.
+     * @param outComponentNames The set of component names to be populated based on
+     *    the contents of the <code>names</code> string.
+     * @param doMerge If true, the parsed component names will be merged into the output
+     *    set, rather than replacing the set's existing contents entirely.
+     */
+    private void readComponentNamesFromStringLocked(String names,
+            Set<ComponentName> outComponentNames,
+            boolean doMerge) {
+        if (!doMerge) {
+            outComponentNames.clear();
+        }
+        if (names != null) {
             TextUtils.SimpleStringSplitter splitter = mStringColonSplitter;
-            splitter.setString(settingValue);
+            splitter.setString(names);
             while (splitter.hasNext()) {
                 String str = splitter.next();
                 if (str == null || str.length() <= 0) {
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 45694518..201c755 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -2998,7 +2998,7 @@
             notification.icon = icon;
             notification.flags = Notification.FLAG_AUTO_CANCEL;
             notification.tickerText = title;
-            notification.color = mContext.getResources().getColor(
+            notification.color = mContext.getColor(
                     com.android.internal.R.color.system_notification_accent_color);
             notification.setLatestEventInfo(mContext, title, details, notification.contentIntent);
             notification.contentIntent = intent;
diff --git a/services/core/java/com/android/server/InputMethodManagerService.java b/services/core/java/com/android/server/InputMethodManagerService.java
index 4d0868a..fd35b5e 100644
--- a/services/core/java/com/android/server/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/InputMethodManagerService.java
@@ -764,9 +764,11 @@
 
         InputMethodInfo defIm = null;
         for (InputMethodInfo imi : mMethodList) {
-            if (defIm == null) {
-                if (InputMethodUtils.isValidSystemDefaultIme(
-                        mSystemReady, imi, context)) {
+            if (defIm == null && mSystemReady) {
+                final Locale systemLocale = context.getResources().getConfiguration().locale;
+                if (InputMethodUtils.isSystemImeThatHasSubtypeOf(imi, context,
+                        true /* checkDefaultAttribute */, systemLocale, false /* checkCountry */,
+                        InputMethodUtils.SUBTYPE_MODE_ANY)) {
                     defIm = imi;
                     Slog.i(TAG, "Selected default: " + imi.getId());
                 }
@@ -1597,7 +1599,7 @@
                     final CharSequence summary = InputMethodUtils.getImeAndSubtypeDisplayName(
                             mContext, imi, mCurrentSubtype);
 
-                    mImeSwitcherNotification.color = mContext.getResources().getColor(
+                    mImeSwitcherNotification.color = mContext.getColor(
                             com.android.internal.R.color.system_notification_accent_color);
                     mImeSwitcherNotification.setLatestEventInfo(
                             mContext, title, summary, mImeSwitchPendingIntent);
diff --git a/services/core/java/com/android/server/UiModeManagerService.java b/services/core/java/com/android/server/UiModeManagerService.java
index aeacd45..87dc420 100644
--- a/services/core/java/com/android/server/UiModeManagerService.java
+++ b/services/core/java/com/android/server/UiModeManagerService.java
@@ -596,7 +596,7 @@
                 n.defaults = Notification.DEFAULT_LIGHTS;
                 n.flags = Notification.FLAG_ONGOING_EVENT;
                 n.when = 0;
-                n.color = context.getResources().getColor(
+                n.color = context.getColor(
                         com.android.internal.R.color.system_notification_accent_color);
                 n.setLatestEventInfo(
                         context,
diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java
index 9339b35..a64e6c3 100644
--- a/services/core/java/com/android/server/accounts/AccountManagerService.java
+++ b/services/core/java/com/android/server/accounts/AccountManagerService.java
@@ -1736,7 +1736,7 @@
         }
         UserHandle user = new UserHandle(userId);
         Context contextForUser = getContextForUser(user);
-        n.color = contextForUser.getResources().getColor(
+        n.color = contextForUser.getColor(
                 com.android.internal.R.color.system_notification_accent_color);
         n.setLatestEventInfo(contextForUser, title, subtitle,
                 PendingIntent.getActivityAsUser(mContext, 0, intent,
@@ -3009,7 +3009,7 @@
                 Context contextForUser = getContextForUser(user);
                 final String notificationTitleFormat =
                         contextForUser.getText(R.string.notification_title).toString();
-                n.color = contextForUser.getResources().getColor(
+                n.color = contextForUser.getColor(
                         com.android.internal.R.color.system_notification_accent_color);
                 n.setLatestEventInfo(contextForUser,
                         String.format(notificationTitleFormat, account.name),
diff --git a/services/core/java/com/android/server/am/ActivityManagerDebugConfig.java b/services/core/java/com/android/server/am/ActivityManagerDebugConfig.java
index ae4006d..fd4974e 100644
--- a/services/core/java/com/android/server/am/ActivityManagerDebugConfig.java
+++ b/services/core/java/com/android/server/am/ActivityManagerDebugConfig.java
@@ -30,10 +30,10 @@
     // will be tagged with their class names instead fot the generic tag.
     static final boolean TAG_WITH_CLASS_NAME = false;
 
-    // While debugging it is sometimes useful to have the category name of the log prepended to the
+    // While debugging it is sometimes useful to have the category name of the log appended to the
     // base log tag to make sifting through logs with the same base tag easier. By setting this
-    // constant to true, the category name of the log point will be prepended to the log tag.
-    static final boolean PREPEND_CATEGORY_NAME = false;
+    // constant to true, the category name of the log point will be appended to the log tag.
+    static final boolean APPEND_CATEGORY_NAME = false;
 
     // Default log tag for the activity manager package.
     static final String TAG_AM = "ActivityManager";
@@ -74,12 +74,17 @@
     static final boolean DEBUG_USER_LEAVING = DEBUG_ALL || false;
     static final boolean DEBUG_VISBILITY = DEBUG_ALL || false;
 
-    static final String POSTFIX_BACKUP = (PREPEND_CATEGORY_NAME) ? "_Backup" : "";
-    static final String POSTFIX_BROADCAST = (PREPEND_CATEGORY_NAME) ? "_Broadcast" : "";
-    static final String POSTFIX_CLEANUP = (PREPEND_CATEGORY_NAME) ? "_Cleanup" : "";
+    static final String POSTFIX_BACKUP = (APPEND_CATEGORY_NAME) ? "_Backup" : "";
+    static final String POSTFIX_BROADCAST = (APPEND_CATEGORY_NAME) ? "_Broadcast" : "";
+    static final String POSTFIX_CLEANUP = (APPEND_CATEGORY_NAME) ? "_Cleanup" : "";
+    static final String POSTFIX_CONFIGURATION = (APPEND_CATEGORY_NAME) ? "_Configuration" : "";
+    static final String POSTFIX_FOCUS = (APPEND_CATEGORY_NAME) ? "_Focus" : "";
+    static final String POSTFIX_IMMERSIVE = (APPEND_CATEGORY_NAME) ? "_Immersive" : "";
+    static final String POSTFIX_LRU = (APPEND_CATEGORY_NAME) ? "_LRU" : "";
     static final String POSTFIX_MU = "_MU";
-    static final String POSTFIX_SERVICE = (PREPEND_CATEGORY_NAME) ? "_Service" : "";
+    static final String POSTFIX_OOM_ADJ = (APPEND_CATEGORY_NAME) ? "_OomAdj" : "";
+    static final String POSTFIX_SERVICE = (APPEND_CATEGORY_NAME) ? "_Service" : "";
     static final String POSTFIX_SERVICE_EXECUTING =
-            (PREPEND_CATEGORY_NAME) ? "_ServiceExecuting" : "";
+            (APPEND_CATEGORY_NAME) ? "_ServiceExecuting" : "";
 
 }
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index a366c7b..6f7dfa2 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -254,15 +254,14 @@
     private static final String TAG_BACKUP = TAG + POSTFIX_BACKUP;
     private static final String TAG_BROADCAST = TAG + POSTFIX_BROADCAST;
     private static final String TAG_CLEANUP = TAG + POSTFIX_CLEANUP;
+    private static final String TAG_CONFIGURATION = TAG + POSTFIX_CONFIGURATION;
+    private static final String TAG_FOCUS = TAG + POSTFIX_FOCUS;
+    private static final String TAG_IMMERSIVE = TAG + POSTFIX_IMMERSIVE;
+    private static final String TAG_LRU = TAG + POSTFIX_LRU;
     private static final String TAG_MU = TAG + POSTFIX_MU;
+    private static final String TAG_OOM_ADJ = TAG + POSTFIX_OOM_ADJ;
 
     // TODO(ogunwale): Migrate all the constants below to use ActivityManagerDebugConfig class.
-    static final boolean DEBUG_CONFIGURATION = DEBUG_ALL || false;
-    static final boolean DEBUG_FOCUS = false;
-    static final boolean DEBUG_IMMERSIVE = DEBUG_ALL || false;
-    static final boolean DEBUG_MU = DEBUG_ALL || false;
-    static final boolean DEBUG_OOM_ADJ = DEBUG_ALL || false;
-    static final boolean DEBUG_LRU = DEBUG_ALL || false;
     static final boolean DEBUG_PAUSE = DEBUG_ALL || false;
     static final boolean DEBUG_POWER = DEBUG_ALL || false;
     static final boolean DEBUG_POWER_QUICK = DEBUG_POWER || false;
@@ -283,8 +282,6 @@
     static final boolean DEBUG_PSS = DEBUG_ALL || false;
     static final boolean DEBUG_LOCKSCREEN = DEBUG_ALL || false;
     static final boolean DEBUG_RECENTS = DEBUG_ALL || false;
-    static final boolean VALIDATE_TOKENS = false;
-    static final boolean SHOW_ACTIVITY_START_TIME = true;
 
     // Control over CPU and battery monitoring.
     static final long BATTERY_STATS_TIME = 30*60*1000;      // write battery stats every 30 minutes.
@@ -1594,7 +1591,7 @@
                     notification.defaults = 0; // please be quiet
                     notification.sound = null;
                     notification.vibrate = null;
-                    notification.color = mContext.getResources().getColor(
+                    notification.color = mContext.getColor(
                             com.android.internal.R.color.system_notification_accent_color);
                     notification.setLatestEventInfo(context, text,
                             mContext.getText(R.string.heavy_weight_notification_detail),
@@ -1705,10 +1702,9 @@
             case IMMERSIVE_MODE_LOCK_MSG: {
                 final boolean nextState = (msg.arg1 != 0);
                 if (mUpdateLock.isHeld() != nextState) {
-                    if (DEBUG_IMMERSIVE) {
-                        final ActivityRecord r = (ActivityRecord) msg.obj;
-                        Slog.d(TAG, "Applying new update lock state '" + nextState + "' for " + r);
-                    }
+                    if (DEBUG_IMMERSIVE) Slog.d(TAG_IMMERSIVE,
+                            "Applying new update lock state '" + nextState
+                            + "' for " + (ActivityRecord)msg.obj);
                     if (nextState) {
                         mUpdateLock.acquire();
                     } else {
@@ -1866,7 +1862,7 @@
                 notification.defaults = 0; // please be quiet
                 notification.sound = null;
                 notification.vibrate = null;
-                notification.color = mContext.getResources().getColor(
+                notification.color = mContext.getColor(
                         com.android.internal.R.color.system_notification_accent_color);
                 Intent deleteIntent = new Intent();
                 deleteIntent.setAction(DumpHeapActivity.ACTION_DELETE_DUMPHEAP);
@@ -2480,15 +2476,15 @@
     }
 
     final void setFocusedActivityLocked(ActivityRecord r, String reason) {
-        if (mFocusedActivity != r) {
-            if (DEBUG_FOCUS) Slog.d(TAG, "setFocusedActivityLocked: r=" + r);
+        if (r != null && mFocusedActivity != r) {
+            if (DEBUG_FOCUS) Slog.d(TAG_FOCUS, "setFocusedActivityLocked: r=" + r);
             mFocusedActivity = r;
             if (r.task != null && r.task.voiceInteractor != null) {
                 startRunningVoiceLocked(r.task.voiceSession, r.info.applicationInfo.uid);
             } else {
                 finishRunningVoiceLocked();
             }
-            if (r != null && mStackSupervisor.setFocusedStack(r, reason + " setFocusedActivity")) {
+            if (mStackSupervisor.setFocusedStack(r, reason + " setFocusedActivity")) {
                 mWindowManager.setFocusedApp(r.appToken, true);
             }
             applyUpdateLockStateLocked(r);
@@ -2505,7 +2501,7 @@
 
     @Override
     public void setFocusedStack(int stackId) {
-        if (DEBUG_FOCUS) Slog.d(TAG, "setFocusedStack: stackId=" + stackId);
+        if (DEBUG_FOCUS) Slog.d(TAG_FOCUS, "setFocusedStack: stackId=" + stackId);
         synchronized (ActivityManagerService.this) {
             ActivityStack stack = mStackSupervisor.getStack(stackId);
             if (stack != null) {
@@ -2587,7 +2583,7 @@
         if (index > 0) {
             index--;
         }
-        if (DEBUG_LRU) Slog.d(TAG, "Moving dep from " + lrui + " to " + index
+        if (DEBUG_LRU) Slog.d(TAG_LRU, "Moving dep from " + lrui + " to " + index
                 + " in LRU list: " + app);
         mLruProcesses.add(index, app);
         return index;
@@ -2633,13 +2629,13 @@
         if (hasActivity) {
             final int N = mLruProcesses.size();
             if (N > 0 && mLruProcesses.get(N-1) == app) {
-                if (DEBUG_LRU) Slog.d(TAG, "Not moving, already top activity: " + app);
+                if (DEBUG_LRU) Slog.d(TAG_LRU, "Not moving, already top activity: " + app);
                 return;
             }
         } else {
             if (mLruProcessServiceStart > 0
                     && mLruProcesses.get(mLruProcessServiceStart-1) == app) {
-                if (DEBUG_LRU) Slog.d(TAG, "Not moving, already top other: " + app);
+                if (DEBUG_LRU) Slog.d(TAG_LRU, "Not moving, already top other: " + app);
                 return;
             }
         }
@@ -2649,7 +2645,7 @@
         if (app.persistent && lrui >= 0) {
             // We don't care about the position of persistent processes, as long as
             // they are in the list.
-            if (DEBUG_LRU) Slog.d(TAG, "Not moving, persistent: " + app);
+            if (DEBUG_LRU) Slog.d(TAG_LRU, "Not moving, persistent: " + app);
             return;
         }
 
@@ -2718,27 +2714,29 @@
         int nextIndex;
         if (hasActivity) {
             final int N = mLruProcesses.size();
-            if (app.activities.size() == 0 && mLruProcessActivityStart < (N-1)) {
+            if (app.activities.size() == 0 && mLruProcessActivityStart < (N - 1)) {
                 // Process doesn't have activities, but has clients with
                 // activities...  move it up, but one below the top (the top
                 // should always have a real activity).
-                if (DEBUG_LRU) Slog.d(TAG, "Adding to second-top of LRU activity list: " + app);
-                mLruProcesses.add(N-1, app);
+                if (DEBUG_LRU) Slog.d(TAG_LRU,
+                        "Adding to second-top of LRU activity list: " + app);
+                mLruProcesses.add(N - 1, app);
                 // To keep it from spamming the LRU list (by making a bunch of clients),
                 // we will push down any other entries owned by the app.
                 final int uid = app.info.uid;
-                for (int i=N-2; i>mLruProcessActivityStart; i--) {
+                for (int i = N - 2; i > mLruProcessActivityStart; i--) {
                     ProcessRecord subProc = mLruProcesses.get(i);
                     if (subProc.info.uid == uid) {
                         // We want to push this one down the list.  If the process after
                         // it is for the same uid, however, don't do so, because we don't
                         // want them internally to be re-ordered.
-                        if (mLruProcesses.get(i-1).info.uid != uid) {
-                            if (DEBUG_LRU) Slog.d(TAG, "Pushing uid " + uid + " swapping at " + i
-                                    + ": " + mLruProcesses.get(i) + " : " + mLruProcesses.get(i-1));
+                        if (mLruProcesses.get(i - 1).info.uid != uid) {
+                            if (DEBUG_LRU) Slog.d(TAG_LRU,
+                                    "Pushing uid " + uid + " swapping at " + i + ": "
+                                    + mLruProcesses.get(i) + " : " + mLruProcesses.get(i - 1));
                             ProcessRecord tmp = mLruProcesses.get(i);
-                            mLruProcesses.set(i, mLruProcesses.get(i-1));
-                            mLruProcesses.set(i-1, tmp);
+                            mLruProcesses.set(i, mLruProcesses.get(i - 1));
+                            mLruProcesses.set(i - 1, tmp);
                             i--;
                         }
                     } else {
@@ -2748,13 +2746,13 @@
                 }
             } else {
                 // Process has activities, put it at the very tipsy-top.
-                if (DEBUG_LRU) Slog.d(TAG, "Adding to top of LRU activity list: " + app);
+                if (DEBUG_LRU) Slog.d(TAG_LRU, "Adding to top of LRU activity list: " + app);
                 mLruProcesses.add(app);
             }
             nextIndex = mLruProcessServiceStart;
         } else if (hasService) {
             // Process has services, put it at the top of the service list.
-            if (DEBUG_LRU) Slog.d(TAG, "Adding to top of LRU service list: " + app);
+            if (DEBUG_LRU) Slog.d(TAG_LRU, "Adding to top of LRU service list: " + app);
             mLruProcesses.add(mLruProcessActivityStart, app);
             nextIndex = mLruProcessServiceStart;
             mLruProcessActivityStart++;
@@ -2765,7 +2763,7 @@
                 // If there is a client, don't allow the process to be moved up higher
                 // in the list than that client.
                 int clientIndex = mLruProcesses.lastIndexOf(client);
-                if (DEBUG_LRU && clientIndex < 0) Slog.d(TAG, "Unknown client " + client
+                if (DEBUG_LRU && clientIndex < 0) Slog.d(TAG_LRU, "Unknown client " + client
                         + " when updating " + app);
                 if (clientIndex <= lrui) {
                     // Don't allow the client index restriction to push it down farther in the
@@ -2776,7 +2774,7 @@
                     index = clientIndex;
                 }
             }
-            if (DEBUG_LRU) Slog.d(TAG, "Adding at " + index + " of LRU list: " + app);
+            if (DEBUG_LRU) Slog.d(TAG_LRU, "Adding at " + index + " of LRU list: " + app);
             mLruProcesses.add(index, app);
             nextIndex = index-1;
             mLruProcessActivityStart++;
@@ -3104,6 +3102,15 @@
             if ("1".equals(SystemProperties.get("debug.checkjni"))) {
                 debugFlags |= Zygote.DEBUG_ENABLE_CHECKJNI;
             }
+            String jitDebugProperty = SystemProperties.get("debug.usejit");
+            if ("true".equals(jitDebugProperty)) {
+                debugFlags |= Zygote.DEBUG_ENABLE_JIT;
+            } else if (!"false".equals(jitDebugProperty)) {
+                // If we didn't force disable by setting false, defer to the dalvik vm options.
+                if ("true".equals(SystemProperties.get("dalvik.vm.usejit"))) {
+                    debugFlags |= Zygote.DEBUG_ENABLE_JIT;
+                }
+            }
             if ("1".equals(SystemProperties.get("debug.jni.logging"))) {
                 debugFlags |= Zygote.DEBUG_ENABLE_JNI_LOGGING;
             }
@@ -5599,7 +5606,7 @@
             if (app.instrumentationClass != null) {
                 ensurePackageDexOpt(app.instrumentationClass.getPackageName());
             }
-            if (DEBUG_CONFIGURATION) Slog.v(TAG, "Binding proc "
+            if (DEBUG_CONFIGURATION) Slog.v(TAG_CONFIGURATION, "Binding proc "
                     + processName + " with config " + mConfiguration);
             ApplicationInfo appInfo = app.instrumentationInfo != null
                     ? app.instrumentationInfo : app.info;
@@ -6137,8 +6144,7 @@
             int callingUid, int userId, IBinder token, String resultWho,
             int requestCode, Intent[] intents, String[] resolvedTypes, int flags,
             Bundle options) {
-        if (DEBUG_MU)
-            Slog.v(TAG_MU, "getIntentSenderLocked(): uid=" + callingUid);
+        if (DEBUG_MU) Slog.v(TAG_MU, "getIntentSenderLocked(): uid=" + callingUid);
         ActivityRecord activity = null;
         if (type == ActivityManager.INTENT_SENDER_ACTIVITY_RESULT) {
             activity = ActivityRecord.isInStackLocked(token);
@@ -8616,8 +8622,8 @@
                         STOCK_PM_FLAGS | PackageManager.GET_URI_PERMISSION_PATTERNS);
         } catch (RemoteException ex) {
         }
-        if (DEBUG_MU)
-            Slog.v(TAG_MU, "generateApplicationProvidersLocked, app.info.uid = " + app.uid);
+        if (DEBUG_MU) Slog.v(TAG_MU,
+                "generateApplicationProvidersLocked, app.info.uid = " + app.uid);
         int userId = app.userId;
         if (providers != null) {
             int N = providers.size();
@@ -8644,8 +8650,8 @@
                     cpr = new ContentProviderRecord(this, cpi, app.info, comp, singleton);
                     mProviderMap.putProviderByClass(comp, cpr);
                 }
-                if (DEBUG_MU)
-                    Slog.v(TAG_MU, "generateApplicationProvidersLocked, cpi.uid = " + cpr.uid);
+                if (DEBUG_MU) Slog.v(TAG_MU,
+                        "generateApplicationProvidersLocked, cpi.uid = " + cpr.uid);
                 app.pubProviders.put(cpi.name, cpr);
                 if (!cpi.multiprocess || !"android".equals(cpi.packageName)) {
                     // Don't add this if it is a platform component that is marked
@@ -9174,10 +9180,9 @@
                     return null;
                 }
                 try {
-                    if (DEBUG_MU) {
-                        Slog.v(TAG_MU, "Waiting to start provider " + cpr + " launchingApp="
-                                + cpr.launchingApp);
-                    }
+                    if (DEBUG_MU) Slog.v(TAG_MU,
+                            "Waiting to start provider " + cpr
+                            + " launchingApp=" + cpr.launchingApp);
                     if (conn != null) {
                         conn.waiting = true;
                     }
@@ -9299,8 +9304,7 @@
         enforceNotIsolatedCaller("publishContentProviders");
         synchronized (this) {
             final ProcessRecord r = getRecordForAppLocked(caller);
-            if (DEBUG_MU)
-                Slog.v(TAG_MU, "ProcessRecord uid = " + r.uid);
+            if (DEBUG_MU) Slog.v(TAG_MU, "ProcessRecord uid = " + r.uid);
             if (r == null) {
                 throw new SecurityException(
                         "Unable to find app for caller " + caller
@@ -9317,8 +9321,7 @@
                     continue;
                 }
                 ContentProviderRecord dst = r.pubProviders.get(src.info.name);
-                if (DEBUG_MU)
-                    Slog.v(TAG_MU, "ContentProviderRecord uid = " + dst.uid);
+                if (DEBUG_MU) Slog.v(TAG_MU, "ContentProviderRecord uid = " + dst.uid);
                 if (dst != null) {
                     ComponentName comp = new ComponentName(dst.info.packageName, dst.info.name);
                     mProviderMap.putProviderByClass(comp, dst);
@@ -10400,9 +10403,7 @@
 
             // update associated state if we're frontmost
             if (r == mFocusedActivity) {
-                if (DEBUG_IMMERSIVE) {
-                    Slog.d(TAG, "Frontmost changed immersion: "+ r);
-                }
+                if (DEBUG_IMMERSIVE) Slog.d(TAG_IMMERSIVE, "Frontmost changed immersion: "+ r);
                 applyUpdateLockStateLocked(r);
             }
         }
@@ -10751,7 +10752,8 @@
             // This happens before any activities are started, so we can
             // change mConfiguration in-place.
             updateConfigurationLocked(configuration, null, false, true);
-            if (DEBUG_CONFIGURATION) Slog.v(TAG, "Initial config: " + mConfiguration);
+            if (DEBUG_CONFIGURATION) Slog.v(TAG_CONFIGURATION,
+                    "Initial config: " + mConfiguration);
         }
     }
 
@@ -15094,10 +15096,9 @@
             result = UserHandle.isSameApp(aInfo.uid, Process.PHONE_UID)
                     || (aInfo.flags & ApplicationInfo.FLAG_PERSISTENT) != 0;
         }
-        if (DEBUG_MU) {
-            Slog.v(TAG, "isSingleton(" + componentProcessName + ", " + aInfo
-                    + ", " + className + ", 0x" + Integer.toHexString(flags) + ") = " + result);
-        }
+        if (DEBUG_MU) Slog.v(TAG_MU,
+                "isSingleton(" + componentProcessName + ", " + aInfo + ", " + className + ", 0x"
+                + Integer.toHexString(flags) + ") = " + result);
         return result;
     }
 
@@ -16484,9 +16485,8 @@
             Configuration newConfig = new Configuration(mConfiguration);
             changes = newConfig.updateFrom(values);
             if (changes != 0) {
-                if (DEBUG_SWITCH || DEBUG_CONFIGURATION) {
-                    Slog.i(TAG, "Updating configuration to: " + values);
-                }
+                if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.i(TAG_CONFIGURATION,
+                        "Updating configuration to: " + values);
 
                 EventLog.writeEvent(EventLogTags.CONFIGURATION_CHANGED, changes);
 
@@ -16537,7 +16537,7 @@
                     ProcessRecord app = mLruProcesses.get(i);
                     try {
                         if (app.thread != null) {
-                            if (DEBUG_CONFIGURATION) Slog.v(TAG, "Sending to proc "
+                            if (DEBUG_CONFIGURATION) Slog.v(TAG_CONFIGURATION, "Sending to proc "
                                     + app.processName + " new config " + mConfiguration);
                             app.thread.scheduleConfigurationChanged(configCopy);
                         }
@@ -17740,15 +17740,15 @@
 
         if (app.curAdj != app.setAdj) {
             ProcessList.setOomAdj(app.pid, app.info.uid, app.curAdj);
-            if (DEBUG_SWITCH || DEBUG_OOM_ADJ) Slog.v(
-                TAG, "Set " + app.pid + " " + app.processName +
-                " adj " + app.curAdj + ": " + app.adjType);
+            if (DEBUG_SWITCH || DEBUG_OOM_ADJ) Slog.v(TAG_OOM_ADJ,
+                    "Set " + app.pid + " " + app.processName + " adj " + app.curAdj + ": "
+                    + app.adjType);
             app.setAdj = app.curAdj;
         }
 
         if (app.setSchedGroup != app.curSchedGroup) {
             app.setSchedGroup = app.curSchedGroup;
-            if (DEBUG_SWITCH || DEBUG_OOM_ADJ) Slog.v(TAG,
+            if (DEBUG_SWITCH || DEBUG_OOM_ADJ) Slog.v(TAG_OOM_ADJ,
                     "Setting process group of " + app.processName
                     + " to " + app.curSchedGroup);
             if (app.waitingToKill != null &&
@@ -17832,7 +17832,7 @@
             }
         }
         if (app.setProcState != app.curProcState) {
-            if (DEBUG_SWITCH || DEBUG_OOM_ADJ) Slog.v(TAG,
+            if (DEBUG_SWITCH || DEBUG_OOM_ADJ) Slog.v(TAG_OOM_ADJ,
                     "Proc state change of " + app.processName
                     + " to " + app.curProcState);
             boolean setImportant = app.setProcState < ActivityManager.PROCESS_STATE_SERVICE;
@@ -18097,7 +18097,7 @@
                             // step that cached level.
                             app.curRawAdj = curCachedAdj;
                             app.curAdj = app.modifyRawOomAdj(curCachedAdj);
-                            if (DEBUG_LRU && false) Slog.d(TAG, "Assigning activity LRU #" + i
+                            if (DEBUG_LRU && false) Slog.d(TAG_LRU, "Assigning activity LRU #" + i
                                     + " adj: " + app.curAdj + " (curCachedAdj=" + curCachedAdj
                                     + ")");
                             if (curCachedAdj != nextCachedAdj) {
@@ -18120,7 +18120,7 @@
                             // state is still as a service), which is what we want.
                             app.curRawAdj = curEmptyAdj;
                             app.curAdj = app.modifyRawOomAdj(curEmptyAdj);
-                            if (DEBUG_LRU && false) Slog.d(TAG, "Assigning empty LRU #" + i
+                            if (DEBUG_LRU && false) Slog.d(TAG_LRU, "Assigning empty LRU #" + i
                                     + " adj: " + app.curAdj + " (curEmptyAdj=" + curEmptyAdj
                                     + ")");
                             if (curEmptyAdj != nextEmptyAdj) {
@@ -18210,13 +18210,13 @@
         // We always allow the memory level to go up (better).  We only allow it to go
         // down if we are in a state where that is allowed, *and* the total number of processes
         // has gone down since last time.
-        if (DEBUG_OOM_ADJ) Slog.d(TAG, "oom: memFactor=" + memFactor + " last=" + mLastMemoryLevel
-                + " allowLow=" + mAllowLowerMemLevel + " numProcs=" + mLruProcesses.size()
-                + " last=" + mLastNumProcesses);
+        if (DEBUG_OOM_ADJ) Slog.d(TAG_OOM_ADJ, "oom: memFactor=" + memFactor
+                + " last=" + mLastMemoryLevel + " allowLow=" + mAllowLowerMemLevel
+                + " numProcs=" + mLruProcesses.size() + " last=" + mLastNumProcesses);
         if (memFactor > mLastMemoryLevel) {
             if (!mAllowLowerMemLevel || mLruProcesses.size() >= mLastNumProcesses) {
                 memFactor = mLastMemoryLevel;
-                if (DEBUG_OOM_ADJ) Slog.d(TAG, "Keeping last mem factor!");
+                if (DEBUG_OOM_ADJ) Slog.d(TAG_OOM_ADJ, "Keeping last mem factor!");
             }
         }
         mLastMemoryLevel = memFactor;
@@ -18256,9 +18256,8 @@
                         && !app.killedByAm) {
                     if (app.trimMemoryLevel < curLevel && app.thread != null) {
                         try {
-                            if (DEBUG_SWITCH || DEBUG_OOM_ADJ) Slog.v(TAG,
-                                    "Trimming memory of " + app.processName
-                                    + " to " + curLevel);
+                            if (DEBUG_SWITCH || DEBUG_OOM_ADJ) Slog.v(TAG_OOM_ADJ,
+                                    "Trimming memory of " + app.processName + " to " + curLevel);
                             app.thread.scheduleTrimMemory(curLevel);
                         } catch (RemoteException e) {
                         }
@@ -18293,7 +18292,7 @@
                     if (app.trimMemoryLevel < ComponentCallbacks2.TRIM_MEMORY_BACKGROUND
                             && app.thread != null) {
                         try {
-                            if (DEBUG_SWITCH || DEBUG_OOM_ADJ) Slog.v(TAG,
+                            if (DEBUG_SWITCH || DEBUG_OOM_ADJ) Slog.v(TAG_OOM_ADJ,
                                     "Trimming memory of heavy-weight " + app.processName
                                     + " to " + ComponentCallbacks2.TRIM_MEMORY_BACKGROUND);
                             app.thread.scheduleTrimMemory(
@@ -18311,7 +18310,7 @@
                         final int level = ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN;
                         if (app.trimMemoryLevel < level && app.thread != null) {
                             try {
-                                if (DEBUG_SWITCH || DEBUG_OOM_ADJ) Slog.v(TAG,
+                                if (DEBUG_SWITCH || DEBUG_OOM_ADJ) Slog.v(TAG_OOM_ADJ,
                                         "Trimming memory of bg-ui " + app.processName
                                         + " to " + level);
                                 app.thread.scheduleTrimMemory(level);
@@ -18322,7 +18321,7 @@
                     }
                     if (app.trimMemoryLevel < fgTrimLevel && app.thread != null) {
                         try {
-                            if (DEBUG_SWITCH || DEBUG_OOM_ADJ) Slog.v(TAG,
+                            if (DEBUG_SWITCH || DEBUG_OOM_ADJ) Slog.v(TAG_OOM_ADJ,
                                     "Trimming memory of fg " + app.processName
                                     + " to " + fgTrimLevel);
                             app.thread.scheduleTrimMemory(fgTrimLevel);
@@ -18348,7 +18347,7 @@
                     if (app.trimMemoryLevel < ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN
                             && app.thread != null) {
                         try {
-                            if (DEBUG_SWITCH || DEBUG_OOM_ADJ) Slog.v(TAG,
+                            if (DEBUG_SWITCH || DEBUG_OOM_ADJ) Slog.v(TAG_OOM_ADJ,
                                     "Trimming memory of ui hidden " + app.processName
                                     + " to " + ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN);
                             app.thread.scheduleTrimMemory(
@@ -18383,12 +18382,12 @@
         }
 
         if (DEBUG_OOM_ADJ) {
+            final long duration = SystemClock.uptimeMillis() - now;
             if (false) {
-                RuntimeException here = new RuntimeException("here");
-                here.fillInStackTrace();
-                Slog.d(TAG, "Did OOM ADJ in " + (SystemClock.uptimeMillis()-now) + "ms", here);
+                Slog.d(TAG_OOM_ADJ, "Did OOM ADJ in " + duration + "ms",
+                        new RuntimeException("here").fillInStackTrace());
             } else {
-                Slog.d(TAG, "Did OOM ADJ in " + (SystemClock.uptimeMillis()-now) + "ms");
+                Slog.d(TAG_OOM_ADJ, "Did OOM ADJ in " + duration + "ms");
             }
         }
     }
diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java
index ca2721c..d34b33b 100755
--- a/services/core/java/com/android/server/am/ActivityRecord.java
+++ b/services/core/java/com/android/server/am/ActivityRecord.java
@@ -76,6 +76,7 @@
 final class ActivityRecord {
     private static final String TAG = TAG_WITH_CLASS_NAME ? "ActivityRecord" : TAG_AM;
 
+    private static final boolean SHOW_ACTIVITY_START_TIME = true;
     static final boolean DEBUG_SAVED_STATE = ActivityStackSupervisor.DEBUG_SAVED_STATE;
     final public static String RECENTS_PACKAGE_NAME = "com.android.systemui.recents";
 
@@ -939,7 +940,7 @@
             final long thisTime = curTime - fullyDrawnStartTime;
             final long totalTime = stack.mFullyDrawnStartTime != 0
                     ? (curTime - stack.mFullyDrawnStartTime) : thisTime;
-            if (ActivityManagerService.SHOW_ACTIVITY_START_TIME) {
+            if (SHOW_ACTIVITY_START_TIME) {
                 Trace.asyncTraceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER, "drawing", 0);
                 EventLog.writeEvent(EventLogTags.AM_ACTIVITY_FULLY_DRAWN_TIME,
                         userId, System.identityHashCode(this), shortComponentName,
@@ -973,7 +974,7 @@
         final long thisTime = curTime - displayStartTime;
         final long totalTime = stack.mLaunchStartTime != 0
                 ? (curTime - stack.mLaunchStartTime) : thisTime;
-        if (ActivityManagerService.SHOW_ACTIVITY_START_TIME) {
+        if (SHOW_ACTIVITY_START_TIME) {
             Trace.asyncTraceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER, "launching", 0);
             EventLog.writeEvent(EventLogTags.AM_ACTIVITY_LAUNCH_TIME,
                     userId, System.identityHashCode(this), shortComponentName,
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java
index 456ed33..b102a07 100644
--- a/services/core/java/com/android/server/am/ActivityStack.java
+++ b/services/core/java/com/android/server/am/ActivityStack.java
@@ -17,7 +17,6 @@
 package com.android.server.am;
 
 import static com.android.server.am.ActivityManagerDebugConfig.*;
-import static com.android.server.am.ActivityManagerService.DEBUG_CONFIGURATION;
 import static com.android.server.am.ActivityManagerService.DEBUG_PAUSE;
 import static com.android.server.am.ActivityManagerService.DEBUG_RESULTS;
 import static com.android.server.am.ActivityManagerService.DEBUG_STACK;
@@ -26,7 +25,6 @@
 import static com.android.server.am.ActivityManagerService.DEBUG_TRANSITION;
 import static com.android.server.am.ActivityManagerService.DEBUG_USER_LEAVING;
 import static com.android.server.am.ActivityManagerService.DEBUG_VISBILITY;
-import static com.android.server.am.ActivityManagerService.VALIDATE_TOKENS;
 
 import static com.android.server.am.ActivityRecord.HOME_ACTIVITY_TYPE;
 import static com.android.server.am.ActivityRecord.APPLICATION_ACTIVITY_TYPE;
@@ -97,6 +95,9 @@
 
     private static final String TAG = TAG_WITH_CLASS_NAME ? "ActivityStack" : TAG_AM;
     private static final String TAG_CLEANUP = TAG + POSTFIX_CLEANUP;
+    private static final String TAG_CONFIGURATION = TAG + POSTFIX_CONFIGURATION;
+
+    private static final boolean VALIDATE_TOKENS = false;
 
     // Ticks during which we check progress while waiting for an app to launch.
     static final int LAUNCH_TICK = 500;
@@ -131,8 +132,6 @@
     // convertToTranslucent().
     static final long TRANSLUCENT_CONVERSION_TIMEOUT = 2000;
 
-    static final boolean SCREENSHOT_FORCE_565 = ActivityManager.isLowRamDeviceStatic();
-
     enum ActivityState {
         INITIALIZING,
         RESUMED,
@@ -507,6 +506,8 @@
                 mStacks.remove(this);
                 mStacks.add(this);
             }
+            // TODO(multi-display): Focus stack currently adjusted in call to move home stack.
+            // Needs to also work if focus is moving to the non-home display.
             if (isOnHomeDisplay()) {
                 mStackSupervisor.moveHomeStack(homeStack, reason, lastFocusStack);
             }
@@ -787,7 +788,7 @@
         if (w > 0) {
             if (DEBUG_SCREENSHOTS) Slog.d(TAG, "\tTaking screenshot");
             return mWindowManager.screenshotApplications(who.appToken, Display.DEFAULT_DISPLAY,
-                    w, h, SCREENSHOT_FORCE_565);
+                    w, h);
         }
         Slog.e(TAG, "Invalid thumbnail dimensions: " + w + "x" + h);
         return null;
@@ -2573,7 +2574,11 @@
                     }
                     // Move the home stack to the top if this stack is fullscreen or there is no
                     // other visible stack.
-                    mStackSupervisor.moveHomeStackTaskToTop(task.getTaskToReturnTo(), myReason);
+                    if (mStackSupervisor.moveHomeStackTaskToTop(
+                            task.getTaskToReturnTo(), myReason)) {
+                        // Activity focus was already adjusted. Nothing else to do...
+                        return;
+                    }
                 }
             }
 
@@ -3575,7 +3580,6 @@
                 mTaskHistory.remove(taskNdx);
                 mTaskHistory.add(top, task);
                 updateTaskMovement(task, true);
-                mWindowManager.moveTaskToTop(task.taskId);
                 return;
             }
         }
@@ -3600,12 +3604,14 @@
         // Shift all activities with this task up to the top
         // of the stack, keeping them in the same internal order.
         insertTaskAtTop(tr);
-        moveToFront(reason);
+
+        // Set focus to the top running activity of this stack.
+        ActivityRecord r = topRunningActivityLocked(null);
+        mService.setFocusedActivityLocked(r, reason);
 
         if (DEBUG_TRANSITION) Slog.v(TAG, "Prepare to front transition: task=" + tr);
         if (noAnimation) {
             mWindowManager.prepareAppTransition(AppTransition.TRANSIT_NONE, false);
-            ActivityRecord r = topRunningActivityLocked(null);
             if (r != null) {
                 mNoAnimActivities.add(r);
             }
@@ -3740,12 +3746,12 @@
     final boolean ensureActivityConfigurationLocked(ActivityRecord r,
             int globalChanges) {
         if (mConfigWillChange) {
-            if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG,
+            if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG_CONFIGURATION,
                     "Skipping config check (will change): " + r);
             return true;
         }
 
-        if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG,
+        if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG_CONFIGURATION,
                 "Ensuring correct configuration: " + r);
 
         // Make sure the current stack override configuration is supported by the top task
@@ -3758,7 +3764,7 @@
                     mWindowManager.forceStackToFullscreen(mStackId, !topTask.mResizeable);
             updateOverrideConfiguration(newOverrideConfig);
             mForcedFullscreen = !prevFullscreen && mFullscreen;
-            if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG,
+            if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG_CONFIGURATION,
                     "Updated stack config to support task=" + topTask
                             + " resizeable=" + topTask.mResizeable
                             + " mForcedFullscreen=" + mForcedFullscreen
@@ -3772,14 +3778,14 @@
         if (r.configuration == newConfig
                 && r.stackConfigOverride == mOverrideConfig
                 && !r.forceNewConfig) {
-            if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG,
+            if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG_CONFIGURATION,
                     "Configuration unchanged in " + r);
             return true;
         }
 
         // We don't worry about activities that are finishing.
         if (r.finishing) {
-            if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG,
+            if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG_CONFIGURATION,
                     "Configuration doesn't matter in finishing " + r);
             r.stopFreezingScreenLocked(false);
             return true;
@@ -3813,7 +3819,7 @@
         }
         final int changes = oldConfig.diff(newConfig) | stackChanges;
         if (changes == 0 && !r.forceNewConfig) {
-            if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG,
+            if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG_CONFIGURATION,
                     "Configuration no differences in " + r);
             return true;
         }
@@ -3821,7 +3827,7 @@
         // If the activity isn't currently running, just leave the new
         // configuration and it will pick that up next time it starts.
         if (r.app == null || r.app.thread == null) {
-            if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG,
+            if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG_CONFIGURATION,
                     "Configuration doesn't matter not running " + r);
             r.stopFreezingScreenLocked(false);
             r.forceNewConfig = false;
@@ -3829,26 +3835,25 @@
         }
 
         // Figure out how to handle the changes between the configurations.
-        if (DEBUG_SWITCH || DEBUG_CONFIGURATION) {
-            Slog.v(TAG, "Checking to restart " + r.info.name + ": changed=0x"
-                    + Integer.toHexString(changes) + ", handles=0x"
-                    + Integer.toHexString(r.info.getRealConfigChanged())
-                    + ", newConfig=" + newConfig);
-        }
+        if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG_CONFIGURATION,
+                "Checking to restart " + r.info.name + ": changed=0x"
+                + Integer.toHexString(changes) + ", handles=0x"
+                + Integer.toHexString(r.info.getRealConfigChanged()) + ", newConfig=" + newConfig);
+
         if ((changes&(~r.info.getRealConfigChanged())) != 0 || r.forceNewConfig) {
             // Aha, the activity isn't handling the change, so DIE DIE DIE.
             r.configChangeFlags |= changes;
             r.startFreezingScreenLocked(r.app, globalChanges);
             r.forceNewConfig = false;
             if (r.app == null || r.app.thread == null) {
-                if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG,
+                if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG_CONFIGURATION,
                         "Config is destroying non-running " + r);
                 destroyActivityLocked(r, true, "config");
             } else if (r.state == ActivityState.PAUSING) {
                 // A little annoying: we are waiting for this activity to
                 // finish pausing.  Let's not do anything now, but just
                 // flag that it needs to be restarted when done pausing.
-                if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG,
+                if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG_CONFIGURATION,
                         "Config is skipping already pausing " + r);
                 r.configDestroy = true;
                 return true;
@@ -3857,12 +3862,12 @@
                 // and we need to restart the top, resumed activity.
                 // Instead of doing the normal handshaking, just say
                 // "restart!".
-                if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG,
+                if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG_CONFIGURATION,
                         "Config is relaunching resumed " + r);
                 relaunchActivityLocked(r, r.configChangeFlags, true);
                 r.configChangeFlags = 0;
             } else {
-                if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG,
+                if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG_CONFIGURATION,
                         "Config is relaunching non-resumed " + r);
                 relaunchActivityLocked(r, r.configChangeFlags, false);
                 r.configChangeFlags = 0;
@@ -3879,7 +3884,7 @@
         // system level configuration it last got.
         if (r.app != null && r.app.thread != null) {
             try {
-                if (DEBUG_CONFIGURATION) Slog.v(TAG, "Sending new config to " + r);
+                if (DEBUG_CONFIGURATION) Slog.v(TAG_CONFIGURATION, "Sending new config to " + r);
                 r.app.thread.scheduleActivityConfigurationChanged(
                         r.appToken, new Configuration(mOverrideConfig));
             } catch (RemoteException e) {
diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
index f56f65f..8782950 100644
--- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
@@ -17,12 +17,12 @@
 package com.android.server.am;
 
 import static android.Manifest.permission.START_ANY_ACTIVITY;
+import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TASK;
+import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP;
 import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
 import static android.content.Intent.FLAG_ACTIVITY_TASK_ON_HOME;
 import static android.content.pm.PackageManager.PERMISSION_GRANTED;
 import static com.android.server.am.ActivityManagerDebugConfig.*;
-import static com.android.server.am.ActivityManagerService.DEBUG_CONFIGURATION;
-import static com.android.server.am.ActivityManagerService.DEBUG_FOCUS;
 import static com.android.server.am.ActivityManagerService.DEBUG_PAUSE;
 import static com.android.server.am.ActivityManagerService.DEBUG_RECENTS;
 import static com.android.server.am.ActivityManagerService.DEBUG_RESULTS;
@@ -117,6 +117,8 @@
 
 public final class ActivityStackSupervisor implements DisplayListener {
     private static final String TAG = TAG_WITH_CLASS_NAME ? "ActivityStackSupervisor" : TAG_AM;
+    private static final String TAG_CONFIGURATION = TAG + POSTFIX_CONFIGURATION;
+    private static final String TAG_FOCUS = TAG + POSTFIX_FOCUS;
 
     static final boolean DEBUG = DEBUG_ALL || false;
     static final boolean DEBUG_ADD_REMOVE = DEBUG || false;
@@ -415,13 +417,15 @@
         if (topNdx <= 0) {
             return;
         }
-        ActivityStack topStack = stacks.get(topNdx);
-        final boolean homeInFront = topStack == mHomeStack;
-        if (homeInFront != toFront) {
+
+        // The home stack should either be at the top or bottom of the stack list.
+        if ((toFront && (stacks.get(topNdx) != mHomeStack))
+                || (!toFront && (stacks.get(0) != mHomeStack))) {
+            if (DEBUG_STACK) Slog.d(TAG, "moveHomeTask: topStack old="
+                    + ((lastFocusedStack != null) ? lastFocusedStack : stacks.get(topNdx))
+                    + " new=" + mFocusedStack);
             stacks.remove(mHomeStack);
             stacks.add(toFront ? topNdx : 0, mHomeStack);
-            if (DEBUG_STACK) Slog.d(TAG, "moveHomeTask: topStack old=" + topStack + " new="
-                    + mFocusedStack);
         }
 
         if (lastFocusedStack != null) {
@@ -441,13 +445,21 @@
         }
     }
 
-    void moveHomeStackTaskToTop(int homeStackTaskType, String reason) {
+    /** Returns true if the focus activity was adjusted to the home stack top activity. */
+    boolean moveHomeStackTaskToTop(int homeStackTaskType, String reason) {
         if (homeStackTaskType == RECENTS_ACTIVITY_TYPE) {
             mWindowManager.showRecentApps();
-            return;
+            return false;
         }
-        moveHomeStack(true, reason);
+
         mHomeStack.moveHomeStackTaskToTop(homeStackTaskType);
+
+        final ActivityRecord top = mHomeStack.topRunningActivityLocked(null);
+        if (top == null) {
+            return false;
+        }
+        mService.setFocusedActivityLocked(top, reason);
+        return true;
     }
 
     boolean resumeHomeStackTask(int homeStackTaskType, ActivityRecord prev, String reason) {
@@ -460,14 +472,13 @@
             mWindowManager.showRecentApps();
             return false;
         }
-        moveHomeStackTaskToTop(homeStackTaskType, reason);
+
         if (prev != null) {
             prev.task.setTaskToReturnTo(APPLICATION_ACTIVITY_TYPE);
         }
 
         ActivityRecord r = mHomeStack.topRunningActivityLocked(null);
-        // if (r != null && (r.isHomeActivity() || r.isRecentsActivity())) {
-        if (r != null && r.isHomeActivity()) {
+        if (r != null) {
             mService.setFocusedActivityLocked(r, reason);
             return resumeTopActivitiesLocked(mHomeStack, prev, null);
         }
@@ -908,7 +919,7 @@
                 stack = container.mStack;
             }
             stack.mConfigWillChange = config != null && mService.mConfiguration.diff(config) != 0;
-            if (DEBUG_CONFIGURATION) Slog.v(TAG,
+            if (DEBUG_CONFIGURATION) Slog.v(TAG_CONFIGURATION,
                     "Starting activity when config will change = " + stack.mConfigWillChange);
 
             final long origId = Binder.clearCallingIdentity();
@@ -998,7 +1009,7 @@
                 mService.enforceCallingPermission(android.Manifest.permission.CHANGE_CONFIGURATION,
                         "updateConfiguration()");
                 stack.mConfigWillChange = false;
-                if (DEBUG_CONFIGURATION) Slog.v(TAG,
+                if (DEBUG_CONFIGURATION) Slog.v(TAG_CONFIGURATION,
                         "Updating to new configuration after starting activity.");
                 mService.updateConfigurationLocked(config, null, false, false);
             }
@@ -1575,10 +1586,11 @@
                 stack = task.stack;
                 if (stack.isOnHomeDisplay()) {
                     if (mFocusedStack != stack) {
-                        if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG, "computeStackFocus: Setting " +
-                                "focused stack to r=" + r + " task=" + task);
+                        if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG_FOCUS,
+                                "computeStackFocus: Setting " + "focused stack to r=" + r
+                                + " task=" + task);
                     } else {
-                        if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG,
+                        if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG_FOCUS,
                             "computeStackFocus: Focused stack already=" + mFocusedStack);
                     }
                 }
@@ -1594,7 +1606,7 @@
 
             if (mFocusedStack != mHomeStack && (!newTask ||
                     mFocusedStack.mActivityContainer.isEligibleForNewTasks())) {
-                if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG,
+                if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG_FOCUS,
                         "computeStackFocus: Have a focused stack=" + mFocusedStack);
                 return mFocusedStack;
             }
@@ -1603,7 +1615,7 @@
             for (int stackNdx = homeDisplayStacks.size() - 1; stackNdx >= 0; --stackNdx) {
                 stack = homeDisplayStacks.get(stackNdx);
                 if (!stack.isHomeStack()) {
-                    if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG,
+                    if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG_FOCUS,
                             "computeStackFocus: Setting focused stack=" + stack);
                     return stack;
                 }
@@ -1611,8 +1623,8 @@
 
             // Need to create an app stack for this user.
             stack = createStackOnDisplay(getNextStackId(), Display.DEFAULT_DISPLAY);
-            if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG, "computeStackFocus: New stack r=" + r +
-                    " stackId=" + stack.mStackId);
+            if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG_FOCUS, "computeStackFocus: New stack r="
+                    + r + " stackId=" + stack.mStackId);
             return stack;
         }
         return mHomeStack;
@@ -1874,11 +1886,6 @@
                     if (r.task == null) {
                         r.task = intentActivity.task;
                     }
-                    targetStack = intentActivity.task.stack;
-                    targetStack.mLastPausedActivity = null;
-                    if (DEBUG_TASKS) Slog.d(TAG, "Bring to front target: " + targetStack
-                            + " from " + intentActivity);
-                    targetStack.moveToFront("intentActivityFound");
                     if (intentActivity.task.intent == null) {
                         // This task was started because of movement of
                         // the activity based on affinity...  now that we
@@ -1886,29 +1893,31 @@
                         // base intent.
                         intentActivity.task.setIntent(r);
                     }
+                    targetStack = intentActivity.task.stack;
+                    targetStack.mLastPausedActivity = null;
                     // If the target task is not in the front, then we need
                     // to bring it to the front...  except...  well, with
                     // SINGLE_TASK_LAUNCH it's not entirely clear.  We'd like
                     // to have the same behavior as if a new instance was
                     // being started, which means not bringing it to the front
                     // if the caller is not itself in the front.
-                    final ActivityStack lastStack = getLastStack();
-                    ActivityRecord curTop = lastStack == null?
-                            null : lastStack.topRunningNonDelayedActivityLocked(notTop);
+                    final ActivityStack focusStack = getFocusedStack();
+                    ActivityRecord curTop = (focusStack == null)
+                            ? null : focusStack.topRunningNonDelayedActivityLocked(notTop);
                     boolean movedToFront = false;
                     if (curTop != null && (curTop.task != intentActivity.task ||
-                            curTop.task != lastStack.topTask())) {
+                            curTop.task != focusStack.topTask())) {
                         r.intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
                         if (sourceRecord == null || (sourceStack.topActivity() != null &&
                                 sourceStack.topActivity().task == sourceRecord.task)) {
-                            // We really do want to push this one into the
-                            // user's face, right now.
+                            // We really do want to push this one into the user's face, right now.
                             if (launchTaskBehind && sourceRecord != null) {
                                 intentActivity.setTaskToAffiliateWith(sourceRecord.task);
                             }
                             movedHome = true;
                             targetStack.moveTaskToFrontLocked(intentActivity.task, noAnimation,
                                     options, "bringingFoundTaskToFront");
+                            movedToFront = true;
                             if ((launchFlags &
                                     (FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_TASK_ON_HOME))
                                     == (FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_TASK_ON_HOME)) {
@@ -1916,9 +1925,14 @@
                                 intentActivity.task.setTaskToReturnTo(HOME_ACTIVITY_TYPE);
                             }
                             options = null;
-                            movedToFront = true;
                         }
                     }
+                    if (!movedToFront) {
+                        if (DEBUG_TASKS) Slog.d(TAG, "Bring to front target: " + targetStack
+                                + " from " + intentActivity);
+                        targetStack.moveToFront("intentActivityFound");
+                    }
+
                     // If the caller has requested that the target task be
                     // reset, then do so.
                     if ((launchFlags&Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED) != 0) {
@@ -1943,15 +1957,15 @@
                         return ActivityManager.START_RETURN_INTENT_TO_CALLER;
                     }
                     if ((launchFlags &
-                            (Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TASK))
-                            == (Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TASK)) {
+                            (FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK))
+                            == (FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK)) {
                         // The caller has requested to completely replace any
                         // existing task with its new activity.  Well that should
                         // not be too hard...
                         reuseTask = intentActivity.task;
                         reuseTask.performClearTaskLocked();
                         reuseTask.setIntent(r);
-                    } else if ((launchFlags&Intent.FLAG_ACTIVITY_CLEAR_TOP) != 0
+                    } else if ((launchFlags & FLAG_ACTIVITY_CLEAR_TOP) != 0
                             || launchSingleInstance || launchSingleTask) {
                         // In this situation we want to remove all activities
                         // from the task up to the one being started.  In most
@@ -1971,15 +1985,22 @@
                                     r, top.task);
                             top.deliverNewIntentLocked(callingUid, r.intent, r.launchedFromPackage);
                         } else {
-                            // A special case: we need to
-                            // start the activity because it is not currently
-                            // running, and the caller has asked to clear the
-                            // current task to have this activity at the top.
+                            // A special case: we need to start the activity because it is not
+                            // currently running, and the caller has asked to clear the current
+                            // task to have this activity at the top.
                             addingToTask = true;
-                            // Now pretend like this activity is being started
-                            // by the top of its task, so it is put in the
-                            // right place.
+                            // Now pretend like this activity is being started by the top of its
+                            // task, so it is put in the right place.
                             sourceRecord = intentActivity;
+                            TaskRecord task = sourceRecord.task;
+                            if (task != null && task.stack == null) {
+                                // Target stack got cleared when we all activities were removed
+                                // above. Go ahead and reset it.
+                                targetStack = computeStackFocus(sourceRecord, false /* newTask */);
+                                targetStack.addTask(
+                                        task, !launchTaskBehind /* toTop */, false /* moving */);
+                            }
+
                         }
                     } else if (r.realActivity.equals(intentActivity.task.realActivity)) {
                         // In this case the top activity on the task is the
@@ -2120,8 +2141,8 @@
             }
             if (!movedHome) {
                 if ((launchFlags &
-                        (Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_TASK_ON_HOME))
-                        == (Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_TASK_ON_HOME)) {
+                        (FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_TASK_ON_HOME))
+                        == (FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_TASK_ON_HOME)) {
                     // Caller wants to appear on home activity, so before starting
                     // their own activity we will bring home to the front.
                     r.task.setTaskToReturnTo(HOME_ACTIVITY_TYPE);
diff --git a/services/core/java/com/android/server/am/CompatModePackages.java b/services/core/java/com/android/server/am/CompatModePackages.java
index ce63d75..0fe9231 100644
--- a/services/core/java/com/android/server/am/CompatModePackages.java
+++ b/services/core/java/com/android/server/am/CompatModePackages.java
@@ -46,7 +46,7 @@
 
 public final class CompatModePackages {
     private static final String TAG = TAG_WITH_CLASS_NAME ? "CompatModePackages" : TAG_AM;
-    private final boolean DEBUG_CONFIGURATION = ActivityManagerService.DEBUG_CONFIGURATION;
+    private static final String TAG_CONFIGURATION = TAG + POSTFIX_CONFIGURATION;
 
     private final ActivityManagerService mService;
     private final AtomicFile mFile;
@@ -334,7 +334,7 @@
                 }
                 try {
                     if (app.thread != null) {
-                        if (DEBUG_CONFIGURATION) Slog.v(TAG, "Sending to proc "
+                        if (DEBUG_CONFIGURATION) Slog.v(TAG_CONFIGURATION, "Sending to proc "
                                 + app.processName + " new compat " + ci);
                         app.thread.updatePackageCompatibilityInfo(packageName, ci);
                     }
diff --git a/services/core/java/com/android/server/am/ServiceRecord.java b/services/core/java/com/android/server/am/ServiceRecord.java
index 6c2e120..f7d241e 100644
--- a/services/core/java/com/android/server/am/ServiceRecord.java
+++ b/services/core/java/com/android/server/am/ServiceRecord.java
@@ -463,7 +463,7 @@
                                         appInfo.packageName, null));
                                 PendingIntent pi = PendingIntent.getActivity(ams.mContext, 0,
                                         runningIntent, PendingIntent.FLAG_UPDATE_CURRENT);
-                                localForegroundNoti.color = ams.mContext.getResources().getColor(
+                                localForegroundNoti.color = ams.mContext.getColor(
                                         com.android.internal
                                                 .R.color.system_notification_accent_color);
                                 localForegroundNoti.setLatestEventInfo(ctx,
diff --git a/services/core/java/com/android/server/audio/MediaFocusControl.java b/services/core/java/com/android/server/audio/MediaFocusControl.java
index fcdd9d9..f05e6aa 100644
--- a/services/core/java/com/android/server/audio/MediaFocusControl.java
+++ b/services/core/java/com/android/server/audio/MediaFocusControl.java
@@ -653,6 +653,7 @@
                 return;
             } else {
                 mFocusFollowers.add(ff);
+                notifyExtPolicyCurrentFocusAsync(ff);
             }
         }
     }
@@ -672,6 +673,32 @@
     }
 
     /**
+     * @param pcb non null
+     */
+    void notifyExtPolicyCurrentFocusAsync(IAudioPolicyCallback pcb) {
+        final IAudioPolicyCallback pcb2 = pcb;
+        final Thread thread = new Thread() {
+            @Override
+            public void run() {
+                synchronized(mAudioFocusLock) {
+                    if (mFocusStack.isEmpty()) {
+                        return;
+                    }
+                    try {
+                        pcb2.notifyAudioFocusGrant(mFocusStack.peek().toAudioFocusInfo(),
+                                // top of focus stack always has focus
+                                AudioManager.AUDIOFOCUS_REQUEST_GRANTED);
+                    } catch (RemoteException e) {
+                        Log.e(TAG, "Can't call notifyAudioFocusGrant() on IAudioPolicyCallback "
+                                + pcb2.asBinder(), e);
+                    }
+                }
+            }
+        };
+        thread.start();
+    }
+
+    /**
      * Called synchronized on mAudioFocusLock
      */
     void notifyExtPolicyFocusGrant_syncAf(AudioFocusInfo afi, int requestResult) {
@@ -680,7 +707,7 @@
                 // oneway
                 pcb.notifyAudioFocusGrant(afi, requestResult);
             } catch (RemoteException e) {
-                Log.e(TAG, "Can't call newAudioFocusLoser() on IAudioPolicyCallback "
+                Log.e(TAG, "Can't call notifyAudioFocusGrant() on IAudioPolicyCallback "
                         + pcb.asBinder(), e);
             }
         }
@@ -695,7 +722,7 @@
                 // oneway
                 pcb.notifyAudioFocusLoss(afi, wasDispatched);
             } catch (RemoteException e) {
-                Log.e(TAG, "Can't call newAudioFocusLoser() on IAudioPolicyCallback "
+                Log.e(TAG, "Can't call notifyAudioFocusLoss() on IAudioPolicyCallback "
                         + pcb.asBinder(), e);
             }
         }
diff --git a/services/core/java/com/android/server/connectivity/Tethering.java b/services/core/java/com/android/server/connectivity/Tethering.java
index f9b6270..4c08960 100644
--- a/services/core/java/com/android/server/connectivity/Tethering.java
+++ b/services/core/java/com/android/server/connectivity/Tethering.java
@@ -478,7 +478,7 @@
         mTetheredNotification.flags = Notification.FLAG_ONGOING_EVENT;
         mTetheredNotification.tickerText = title;
         mTetheredNotification.visibility = Notification.VISIBILITY_PUBLIC;
-        mTetheredNotification.color = mContext.getResources().getColor(
+        mTetheredNotification.color = mContext.getColor(
                 com.android.internal.R.color.system_notification_accent_color);
         mTetheredNotification.setLatestEventInfo(mContext, title, message, pi);
         mTetheredNotification.category = Notification.CATEGORY_STATUS;
diff --git a/services/core/java/com/android/server/content/SyncManager.java b/services/core/java/com/android/server/content/SyncManager.java
index 1ea9673..191df2f 100644
--- a/services/core/java/com/android/server/content/SyncManager.java
+++ b/services/core/java/com/android/server/content/SyncManager.java
@@ -3119,7 +3119,7 @@
                 new Notification(R.drawable.stat_notify_sync_error,
                         mContext.getString(R.string.contentServiceSync),
                         System.currentTimeMillis());
-            notification.color = contextForUser.getResources().getColor(
+            notification.color = contextForUser.getColor(
                     com.android.internal.R.color.system_notification_accent_color);
             notification.setLatestEventInfo(contextForUser,
                     contextForUser.getString(R.string.contentServiceSyncNotificationTitle),
diff --git a/services/core/java/com/android/server/input/InputManagerService.java b/services/core/java/com/android/server/input/InputManagerService.java
index 15dcd44..17b4f9c 100644
--- a/services/core/java/com/android/server/input/InputManagerService.java
+++ b/services/core/java/com/android/server/input/InputManagerService.java
@@ -796,7 +796,7 @@
                     .setContentIntent(keyboardLayoutIntent)
                     .setSmallIcon(R.drawable.ic_settings_language)
                     .setPriority(Notification.PRIORITY_LOW)
-                    .setColor(mContext.getResources().getColor(
+                    .setColor(mContext.getColor(
                             com.android.internal.R.color.system_notification_accent_color))
                     .build();
             mNotificationManager.notifyAsUser(null,
diff --git a/services/core/java/com/android/server/net/LockdownVpnTracker.java b/services/core/java/com/android/server/net/LockdownVpnTracker.java
index 752614f..6ffe6ac 100644
--- a/services/core/java/com/android/server/net/LockdownVpnTracker.java
+++ b/services/core/java/com/android/server/net/LockdownVpnTracker.java
@@ -341,7 +341,7 @@
                 .setOngoing(true)
                 .addAction(R.drawable.ic_menu_refresh, mContext.getString(R.string.reset),
                         mResetIntent)
-                .setColor(mContext.getResources().getColor(
+                .setColor(mContext.getColor(
                         com.android.internal.R.color.system_notification_accent_color));
 
         NotificationManager.from(mContext).notify(TAG, 0, builder.build());
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
index cc0fcf5..8044333 100644
--- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
+++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
@@ -789,7 +789,7 @@
         final Notification.Builder builder = new Notification.Builder(mContext);
         builder.setOnlyAlertOnce(true);
         builder.setWhen(0L);
-        builder.setColor(mContext.getResources().getColor(
+        builder.setColor(mContext.getColor(
                 com.android.internal.R.color.system_notification_accent_color));
 
         final Resources res = mContext.getResources();
@@ -916,7 +916,7 @@
         builder.setTicker(title);
         builder.setContentTitle(title);
         builder.setContentText(body);
-        builder.setColor(mContext.getResources().getColor(
+        builder.setColor(mContext.getColor(
                 com.android.internal.R.color.system_notification_accent_color));
 
         final Intent intent = buildAllowBackgroundDataIntent();
diff --git a/services/core/java/com/android/server/notification/ManagedServices.java b/services/core/java/com/android/server/notification/ManagedServices.java
index 0c7d71b..9ccb2ea 100644
--- a/services/core/java/com/android/server/notification/ManagedServices.java
+++ b/services/core/java/com/android/server/notification/ManagedServices.java
@@ -18,10 +18,12 @@
 
 import android.app.ActivityManager;
 import android.app.PendingIntent;
+import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
+import android.content.IntentFilter;
 import android.content.ServiceConnection;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
@@ -51,6 +53,7 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Objects;
 import java.util.Set;
 
 /**
@@ -74,6 +77,7 @@
     private final UserProfiles mUserProfiles;
     private final SettingsObserver mSettingsObserver;
     private final Config mConfig;
+    private ArraySet<String> mRestored;
 
     // contains connections to all connected services, including app services
     // and system services
@@ -91,6 +95,8 @@
     // user change).
     private int[] mLastSeenProfileIds;
 
+    private final BroadcastReceiver mRestoreReceiver;
+
     public ManagedServices(Context context, Handler handler, Object mutex,
             UserProfiles userProfiles) {
         mContext = context;
@@ -98,6 +104,24 @@
         mUserProfiles = userProfiles;
         mConfig = getConfig();
         mSettingsObserver = new SettingsObserver(handler);
+
+        mRestoreReceiver = new SettingRestoredReceiver();
+        IntentFilter filter = new IntentFilter(Intent.ACTION_SETTING_RESTORED);
+        context.registerReceiver(mRestoreReceiver, filter);
+    }
+
+    class SettingRestoredReceiver extends BroadcastReceiver {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            if (Intent.ACTION_SETTING_RESTORED.equals(intent.getAction())) {
+                String element = intent.getStringExtra(Intent.EXTRA_SETTING_NAME);
+                if (Objects.equals(element, mConfig.secureSettingName)) {
+                    String prevValue = intent.getStringExtra(Intent.EXTRA_SETTING_PREVIOUS_VALUE);
+                    String newValue = intent.getStringExtra(Intent.EXTRA_SETTING_NEW_VALUE);
+                    settingRestored(element, prevValue, newValue, getSendingUserId());
+                }
+            }
+        }
     }
 
     abstract protected Config getConfig();
@@ -140,6 +164,31 @@
         }
     }
 
+    // By convention, restored settings are replicated to another settings
+    // entry, named similarly but with a disambiguation suffix.
+    public static final String restoredSettingName(Config config) {
+        return config.secureSettingName + ":restored";
+    }
+
+    // The OS has done a restore of this service's saved state.  We clone it to the
+    // 'restored' reserve, and then once we return and the actual write to settings is
+    // performed, our observer will do the work of maintaining the restored vs live
+    // settings data.
+    public void settingRestored(String element, String oldValue, String newValue, int userid) {
+        if (DEBUG) Slog.d(TAG, "Restored managed service setting: " + element
+                + " ovalue=" + oldValue + " nvalue=" + newValue);
+        if (mConfig.secureSettingName.equals(element)) {
+            if (element != null) {
+                mRestored = null;
+                Settings.Secure.putStringForUser(mContext.getContentResolver(),
+                        restoredSettingName(mConfig),
+                        newValue,
+                        userid);
+                disableNonexistentServices(userid);
+            }
+        }
+    }
+
     public void onPackagesChanged(boolean queryReplace, String[] pkgList) {
         if (DEBUG) Slog.d(TAG, "onPackagesChanged queryReplace=" + queryReplace
                 + " pkgList=" + (pkgList == null ? null : Arrays.asList(pkgList))
@@ -211,8 +260,23 @@
     }
 
     private void disableNonexistentServices(int userId) {
+        final ContentResolver cr = mContext.getContentResolver();
+        boolean restoredChanged = false;
+        if (mRestored == null) {
+            String restoredSetting = Settings.Secure.getStringForUser(
+                    cr,
+                    restoredSettingName(mConfig),
+                    userId);
+            if (!TextUtils.isEmpty(restoredSetting)) {
+                if (DEBUG) Slog.d(TAG, "restored: " + restoredSetting);
+                String[] restored = restoredSetting.split(ENABLED_SERVICES_SEPARATOR);
+                mRestored = new ArraySet<String>(Arrays.asList(restored));
+            } else {
+                mRestored = new ArraySet<String>();
+            }
+        }
         String flatIn = Settings.Secure.getStringForUser(
-                mContext.getContentResolver(),
+                cr,
                 mConfig.secureSettingName,
                 userId);
         if (!TextUtils.isEmpty(flatIn)) {
@@ -228,14 +292,16 @@
                 ResolveInfo resolveInfo = installedServices.get(i);
                 ServiceInfo info = resolveInfo.serviceInfo;
 
+                ComponentName component = new ComponentName(info.packageName, info.name);
                 if (!mConfig.bindPermission.equals(info.permission)) {
                     Slog.w(TAG, "Skipping " + getCaption() + " service "
                             + info.packageName + "/" + info.name
                             + ": it does not require the permission "
                             + mConfig.bindPermission);
+                    restoredChanged |= mRestored.remove(component.flattenToString());
                     continue;
                 }
-                installed.add(new ComponentName(info.packageName, info.name));
+                installed.add(component);
             }
 
             String flatOut = "";
@@ -246,16 +312,27 @@
                     ComponentName enabledComponent = ComponentName.unflattenFromString(enabled[i]);
                     if (installed.contains(enabledComponent)) {
                         remaining.add(enabled[i]);
+                        restoredChanged |= mRestored.remove(enabled[i]);
                     }
                 }
+                remaining.addAll(mRestored);
                 flatOut = TextUtils.join(ENABLED_SERVICES_SEPARATOR, remaining);
             }
             if (DEBUG) Slog.v(TAG, "flat after: " + flatOut);
             if (!flatIn.equals(flatOut)) {
-                Settings.Secure.putStringForUser(mContext.getContentResolver(),
+                Settings.Secure.putStringForUser(cr,
                         mConfig.secureSettingName,
                         flatOut, userId);
             }
+            if (restoredChanged) {
+                if (DEBUG) Slog.d(TAG, "restored changed; rewriting");
+                final String flatRestored = TextUtils.join(ENABLED_SERVICES_SEPARATOR,
+                        mRestored.toArray());
+                Settings.Secure.putStringForUser(cr,
+                        restoredSettingName(mConfig),
+                        flatRestored,
+                        userId);
+            }
         }
     }
 
diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java
index d353494..b820d7e8 100644
--- a/services/core/java/com/android/server/pm/Settings.java
+++ b/services/core/java/com/android/server/pm/Settings.java
@@ -1681,6 +1681,7 @@
                     //
                     // DO NOT MODIFY THIS FORMAT UNLESS YOU CAN ALSO MODIFY ITS USERS
                     // FROM NATIVE CODE. AT THE MOMENT, LOOK AT THE FOLLOWING SOURCES:
+                    //   system/core/logd/LogStatistics.cpp
                     //   system/core/run-as/run-as.c
                     //   system/core/sdcard/sdcard.c
                     //   external/libselinux/src/android.c:package_info_init()
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index e4f5e7d..26ecb72 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -918,6 +918,7 @@
         writeBoolean(serializer, restrictions, UserManager.DISALLOW_CROSS_PROFILE_COPY_PASTE);
         writeBoolean(serializer, restrictions, UserManager.DISALLOW_OUTGOING_BEAM);
         writeBoolean(serializer, restrictions, UserManager.DISALLOW_WALLPAPER);
+        writeBoolean(serializer, restrictions, UserManager.DISALLOW_SAFE_BOOT);
         serializer.endTag(null, TAG_RESTRICTIONS);
     }
 
@@ -1065,6 +1066,7 @@
         readBoolean(parser, restrictions, UserManager.DISALLOW_CROSS_PROFILE_COPY_PASTE);
         readBoolean(parser, restrictions, UserManager.DISALLOW_OUTGOING_BEAM);
         readBoolean(parser, restrictions, UserManager.DISALLOW_WALLPAPER);
+        readBoolean(parser, restrictions, UserManager.DISALLOW_SAFE_BOOT);
     }
 
     private void readBoolean(XmlPullParser parser, Bundle restrictions,
diff --git a/services/core/java/com/android/server/policy/BurnInProtectionHelper.java b/services/core/java/com/android/server/policy/BurnInProtectionHelper.java
index b99c436..847eee8 100644
--- a/services/core/java/com/android/server/policy/BurnInProtectionHelper.java
+++ b/services/core/java/com/android/server/policy/BurnInProtectionHelper.java
@@ -16,28 +16,27 @@
 
 package com.android.server.policy;
 
+import android.animation.Animator;
+import android.animation.ValueAnimator;
 import android.app.AlarmManager;
 import android.app.PendingIntent;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.content.res.Resources;
 import android.hardware.display.DisplayManager;
 import android.hardware.display.DisplayManagerInternal;
-import android.os.Build;
-import android.os.Handler;
 import android.os.SystemClock;
-import android.os.SystemProperties;
-import android.util.Log;
 import android.view.Display;
+import android.view.animation.LinearInterpolator;
 
 import com.android.server.LocalServices;
 
 import java.io.PrintWriter;
 import java.util.concurrent.TimeUnit;
 
-public class BurnInProtectionHelper implements DisplayManager.DisplayListener {
+public class BurnInProtectionHelper implements DisplayManager.DisplayListener,
+        Animator.AnimatorListener, ValueAnimator.AnimatorUpdateListener {
     private static final String TAG = "BurnInProtection";
 
     // Default value when max burnin radius is not set.
@@ -50,8 +49,11 @@
             "android.internal.policy.action.BURN_IN_PROTECTION";
 
     private static final int BURN_IN_SHIFT_STEP = 2;
+    private static final long CENTERING_ANIMATION_DURATION_MS = 100;
+    private final ValueAnimator mCenteringAnimator;
 
     private boolean mBurnInProtectionActive;
+    private boolean mFirstUpdate;
 
     private final int mMinHorizontalBurnInOffset;
     private final int mMaxHorizontalBurnInOffset;
@@ -82,11 +84,10 @@
     public BurnInProtectionHelper(Context context, int minHorizontalOffset,
             int maxHorizontalOffset, int minVerticalOffset, int maxVerticalOffset,
             int maxOffsetRadius) {
-        final Resources resources = context.getResources();
         mMinHorizontalBurnInOffset = minHorizontalOffset;
         mMaxHorizontalBurnInOffset = maxHorizontalOffset;
         mMinVerticalBurnInOffset = minVerticalOffset;
-        mMaxVerticalBurnInOffset = maxHorizontalOffset;
+        mMaxVerticalBurnInOffset = maxVerticalOffset;
         if (maxOffsetRadius != BURN_IN_MAX_RADIUS_DEFAULT) {
             mBurnInRadiusMaxSquared = maxOffsetRadius * maxOffsetRadius;
         } else {
@@ -106,20 +107,35 @@
                 (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
         mDisplay = displayManager.getDisplay(Display.DEFAULT_DISPLAY);
         displayManager.registerDisplayListener(this, null /* handler */);
+
+        mCenteringAnimator = ValueAnimator.ofFloat(1f, 0f);
+        mCenteringAnimator.setDuration(CENTERING_ANIMATION_DURATION_MS);
+        mCenteringAnimator.setInterpolator(new LinearInterpolator());
+        mCenteringAnimator.addListener(this);
+        mCenteringAnimator.addUpdateListener(this);
     }
 
     public void startBurnInProtection() {
         if (!mBurnInProtectionActive) {
             mBurnInProtectionActive = true;
+            mFirstUpdate = true;
+            mCenteringAnimator.cancel();
             updateBurnInProtection();
         }
     }
 
     private void updateBurnInProtection() {
         if (mBurnInProtectionActive) {
-            adjustOffsets();
-            mDisplayManagerInternal.setDisplayOffsets(mDisplay.getDisplayId(),
-                    mLastBurnInXOffset, mLastBurnInYOffset);
+            // We don't want to adjust offsets immediately after the device goes into ambient mode.
+            // Instead, we want to wait until it's more likely that the user is not observing the
+            // screen anymore.
+            if (mFirstUpdate) {
+                mFirstUpdate = false;
+            } else {
+                adjustOffsets();
+                mDisplayManagerInternal.setDisplayOffsets(mDisplay.getDisplayId(),
+                        mLastBurnInXOffset, mLastBurnInYOffset);
+            }
             // Next adjustment at least ten seconds in the future.
             long next = SystemClock.elapsedRealtime() + BURNIN_PROTECTION_MINIMAL_INTERVAL_MS;
             // And aligned to the minute.
@@ -128,7 +144,7 @@
             mAlarmManager.set(AlarmManager.ELAPSED_REALTIME, next, mBurnInProtectionIntent);
         } else {
             mAlarmManager.cancel(mBurnInProtectionIntent);
-            mDisplayManagerInternal.setDisplayOffsets(mDisplay.getDisplayId(), 0, 0);
+            mCenteringAnimator.start();
         }
     }
 
@@ -214,4 +230,33 @@
             }
         }
     }
+
+    @Override
+    public void onAnimationStart(Animator animator) {
+    }
+
+    @Override
+    public void onAnimationEnd(Animator animator) {
+        if (animator == mCenteringAnimator && !mBurnInProtectionActive) {
+            // No matter how the animation finishes, we want to zero the offsets.
+            mDisplayManagerInternal.setDisplayOffsets(mDisplay.getDisplayId(), 0, 0);
+        }
+    }
+
+    @Override
+    public void onAnimationCancel(Animator animator) {
+    }
+
+    @Override
+    public void onAnimationRepeat(Animator animator) {
+    }
+
+    @Override
+    public void onAnimationUpdate(ValueAnimator valueAnimator) {
+        if (!mBurnInProtectionActive) {
+            final float value = (Float) valueAnimator.getAnimatedValue();
+            mDisplayManagerInternal.setDisplayOffsets(mDisplay.getDisplayId(),
+                    (int) (mLastBurnInXOffset * value), (int) (mLastBurnInYOffset * value));
+        }
+    }
 }
diff --git a/services/core/java/com/android/server/policy/GlobalActions.java b/services/core/java/com/android/server/policy/GlobalActions.java
index d768fe3..b431b33 100644
--- a/services/core/java/com/android/server/policy/GlobalActions.java
+++ b/services/core/java/com/android/server/policy/GlobalActions.java
@@ -100,6 +100,7 @@
     private static final String GLOBAL_ACTION_KEY_SETTINGS = "settings";
     private static final String GLOBAL_ACTION_KEY_LOCKDOWN = "lockdown";
     private static final String GLOBAL_ACTION_KEY_VOICEASSIST = "voiceassist";
+    private static final String GLOBAL_ACTION_KEY_ASSIST = "assist";
 
     private final Context mContext;
     private final WindowManagerFuncs mWindowManagerFuncs;
@@ -293,6 +294,8 @@
                 mItems.add(getLockdownAction());
             } else if (GLOBAL_ACTION_KEY_VOICEASSIST.equals(actionKey)) {
                 mItems.add(getVoiceAssistAction());
+            } else if (GLOBAL_ACTION_KEY_ASSIST.equals(actionKey)) {
+                mItems.add(getAssistAction());
             } else {
                 Log.e(TAG, "Invalid global action key " + actionKey);
             }
@@ -339,8 +342,12 @@
 
         @Override
         public boolean onLongPress() {
-            mWindowManagerFuncs.rebootSafeMode(true);
-            return true;
+            UserManager um = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
+            if (!um.hasUserRestriction(UserManager.DISALLOW_SAFE_BOOT)) {
+                mWindowManagerFuncs.rebootSafeMode(true);
+                return true;
+            }
+            return false;
         }
 
         @Override
@@ -438,6 +445,28 @@
         };
     }
 
+    private Action getAssistAction() {
+        return new SinglePressAction(com.android.internal.R.drawable.ic_action_assist_focused,
+                R.string.global_action_assist) {
+            @Override
+            public void onPress() {
+                Intent intent = new Intent(Intent.ACTION_ASSIST);
+                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
+                mContext.startActivity(intent);
+            }
+
+            @Override
+            public boolean showDuringKeyguard() {
+                return true;
+            }
+
+            @Override
+            public boolean showBeforeProvisioning() {
+                return true;
+            }
+        };
+    }
+
     private Action getVoiceAssistAction() {
         return new SinglePressAction(com.android.internal.R.drawable.ic_voice_search,
                 R.string.global_action_voice_assist) {
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index cdd6c7f..d8cb240 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -176,6 +176,9 @@
     static final int DOUBLE_TAP_HOME_NOTHING = 0;
     static final int DOUBLE_TAP_HOME_RECENT_SYSTEM_UI = 1;
 
+    static final int SHORT_PRESS_SLEEP_GO_TO_SLEEP = 0;
+    static final int SHORT_PRESS_SLEEP_GO_TO_SLEEP_AND_GO_HOME = 1;
+
     static final int APPLICATION_MEDIA_SUBLAYER = -2;
     static final int APPLICATION_MEDIA_OVERLAY_SUBLAYER = -1;
     static final int APPLICATION_PANEL_SUBLAYER = 1;
@@ -371,6 +374,7 @@
     int mLongPressOnPowerBehavior;
     int mDoublePressOnPowerBehavior;
     int mTriplePressOnPowerBehavior;
+    int mShortPressOnSleepBehavior;
     boolean mAwake;
     boolean mScreenOnEarly;
     boolean mScreenOnFully;
@@ -1057,6 +1061,20 @@
         }
     }
 
+    private void sleepPress(KeyEvent event) {
+        switch (mShortPressOnSleepBehavior) {
+            case SHORT_PRESS_SLEEP_GO_TO_SLEEP:
+                mPowerManager.goToSleep(event.getEventTime(),
+                        PowerManager.GO_TO_SLEEP_REASON_SLEEP_BUTTON, 0);
+                break;
+            case SHORT_PRESS_SLEEP_GO_TO_SLEEP_AND_GO_HOME:
+                launchHomeFromHotKey(false /* awakenDreams */);
+                mPowerManager.goToSleep(event.getEventTime(),
+                        PowerManager.GO_TO_SLEEP_REASON_SLEEP_BUTTON, 0);
+                break;
+        }
+    }
+
     private int getResolvedLongPressOnPowerBehavior() {
         if (FactoryTest.isLongPressOnPowerOffEnabled()) {
             return LONG_PRESS_POWER_SHUT_OFF_NO_CONFIRM;
@@ -1321,6 +1339,8 @@
                 com.android.internal.R.integer.config_doublePressOnPowerBehavior);
         mTriplePressOnPowerBehavior = mContext.getResources().getInteger(
                 com.android.internal.R.integer.config_triplePressOnPowerBehavior);
+        mShortPressOnSleepBehavior = mContext.getResources().getInteger(
+                com.android.internal.R.integer.config_shortPressOnSleepBehavior);
 
         mUseTvRouting = AudioSystem.getPlatformType(mContext) == AudioSystem.PLATFORM_TELEVISION;
 
@@ -2652,7 +2672,7 @@
                     voiceIntent = new Intent(RecognizerIntent.ACTION_VOICE_SEARCH_HANDS_FREE);
                     voiceIntent.putExtra(RecognizerIntent.EXTRA_SECURE, true);
                 }
-                mContext.startActivityAsUser(voiceIntent, UserHandle.CURRENT_OR_SELF);
+                startActivityAsUser(voiceIntent, UserHandle.CURRENT_OR_SELF);
             }
         } else if (keyCode == KeyEvent.KEYCODE_SYSRQ) {
             if (down && repeatCount == 0) {
@@ -2692,7 +2712,7 @@
                 Settings.System.putIntForUser(mContext.getContentResolver(),
                         Settings.System.SCREEN_BRIGHTNESS, brightness,
                         UserHandle.USER_CURRENT_OR_SELF);
-                mContext.startActivityAsUser(new Intent(Intent.ACTION_SHOW_BRIGHTNESS_DIALOG),
+                startActivityAsUser(new Intent(Intent.ACTION_SHOW_BRIGHTNESS_DIALOG),
                         UserHandle.CURRENT_OR_SELF);
             }
             return -1;
@@ -2720,7 +2740,7 @@
                     if (shortcutIntent != null) {
                         shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                         try {
-                            mContext.startActivityAsUser(shortcutIntent, UserHandle.CURRENT);
+                            startActivityAsUser(shortcutIntent, UserHandle.CURRENT);
                         } catch (ActivityNotFoundException ex) {
                             Slog.w(TAG, "Dropping shortcut key combination because "
                                     + "the activity to which it is registered was not found: "
@@ -2746,7 +2766,7 @@
                 if (shortcutIntent != null) {
                     shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                     try {
-                        mContext.startActivityAsUser(shortcutIntent, UserHandle.CURRENT);
+                        startActivityAsUser(shortcutIntent, UserHandle.CURRENT);
                     } catch (ActivityNotFoundException ex) {
                         Slog.w(TAG, "Dropping shortcut key combination because "
                                 + "the activity to which it is registered was not found: "
@@ -2764,7 +2784,7 @@
                 Intent intent = Intent.makeMainSelectorActivity(Intent.ACTION_MAIN, category);
                 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                 try {
-                    mContext.startActivityAsUser(intent, UserHandle.CURRENT);
+                    startActivityAsUser(intent, UserHandle.CURRENT);
                 } catch (ActivityNotFoundException ex) {
                     Slog.w(TAG, "Dropping application launch key because "
                             + "the activity to which it is registered was not found: "
@@ -2914,7 +2934,7 @@
             if (searchManager != null) {
                 searchManager.stopSearch();
             }
-            mContext.startActivityAsUser(intent, UserHandle.CURRENT);
+            startActivityAsUser(intent, UserHandle.CURRENT);
         } catch (ActivityNotFoundException e) {
             Slog.w(TAG, "No activity to handle assist long press action.", e);
         }
@@ -2936,13 +2956,21 @@
                     | Intent.FLAG_ACTIVITY_SINGLE_TOP
                     | Intent.FLAG_ACTIVITY_CLEAR_TOP);
             try {
-                mContext.startActivityAsUser(intent, UserHandle.CURRENT);
+                startActivityAsUser(intent, UserHandle.CURRENT);
             } catch (ActivityNotFoundException e) {
                 Slog.w(TAG, "No activity to handle assist action.", e);
             }
         }
     }
 
+    private void startActivityAsUser(Intent intent, UserHandle handle) {
+        if (isUserSetupComplete()) {
+            mContext.startActivityAsUser(intent, handle);
+        } else {
+            Slog.i(TAG, "Not starting activity because user setup is in progress: " + intent);
+        }
+    }
+
     private SearchManager getSearchManager() {
         if (mSearchManager == null) {
             mSearchManager = (SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE);
@@ -3028,11 +3056,15 @@
         }
     }
 
+    void launchHomeFromHotKey() {
+        launchHomeFromHotKey(true /* awakenFromDreams */);
+    }
+
     /**
      * A home key -> launch home action was detected.  Take the appropriate action
      * given the situation with the keyguard.
      */
-    void launchHomeFromHotKey() {
+    void launchHomeFromHotKey(final boolean awakenFromDreams) {
         if (isKeyguardShowingAndNotOccluded()) {
             // don't launch home if keyguard showing
         } else if (!mHideLockScreen && mKeyguardDelegate.isInputRestricted()) {
@@ -3047,7 +3079,7 @@
                         } catch (RemoteException e) {
                         }
                         sendCloseSystemWindows(SYSTEM_DIALOG_REASON_HOME_KEY);
-                        startDockOrHome(true /*fromHomeKey*/);
+                        startDockOrHome(true /*fromHomeKey*/, awakenFromDreams);
                     }
                 }
             });
@@ -3059,13 +3091,15 @@
             }
             if (mRecentsVisible) {
                 // Hide Recents and notify it to launch Home
-                awakenDreams();
+                if (awakenFromDreams) {
+                    awakenDreams();
+                }
                 sendCloseSystemWindows(SYSTEM_DIALOG_REASON_HOME_KEY);
                 hideRecentApps(false, true);
             } else {
                 // Otherwise, just launch Home
                 sendCloseSystemWindows(SYSTEM_DIALOG_REASON_HOME_KEY);
-                startDockOrHome(true /*fromHomeKey*/);
+                startDockOrHome(true /*fromHomeKey*/, awakenFromDreams);
             }
         }
     }
@@ -4390,7 +4424,7 @@
                 intent = new Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA);
             }
             wakeUp(whenNanos / 1000000, mAllowTheaterModeWakeFromCameraLens);
-            mContext.startActivityAsUser(intent, UserHandle.CURRENT_OR_SELF);
+            startActivityAsUser(intent, UserHandle.CURRENT_OR_SELF);
         }
         mCameraLensCoverState = lensCoverState;
     }
@@ -4712,12 +4746,11 @@
 
             case KeyEvent.KEYCODE_SLEEP: {
                 result &= ~ACTION_PASS_TO_USER;
+                isWakeKey = false;
                 if (!mPowerManager.isInteractive()) {
                     useHapticFeedback = false; // suppress feedback if already non-interactive
                 }
-                mPowerManager.goToSleep(event.getEventTime(),
-                        PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON, 0);
-                isWakeKey = false;
+                sleepPress(event);
                 break;
             }
 
@@ -4905,7 +4938,8 @@
             return;
         }
         int keyCode = event.getKeyCode();
-        int flags = AudioManager.FLAG_SHOW_UI | AudioManager.FLAG_PLAY_SOUND;
+        int flags = AudioManager.FLAG_SHOW_UI | AudioManager.FLAG_PLAY_SOUND
+                | AudioManager.FLAG_FROM_KEY;
         String pkgName = mContext.getOpPackageName();
         switch (keyCode) {
             case KeyEvent.KEYCODE_VOLUME_UP:
@@ -4991,7 +5025,7 @@
         Intent voiceIntent =
             new Intent(RecognizerIntent.ACTION_VOICE_SEARCH_HANDS_FREE);
         voiceIntent.putExtra(RecognizerIntent.EXTRA_SECURE, keyguardActive);
-        mContext.startActivityAsUser(voiceIntent, UserHandle.CURRENT_OR_SELF);
+        startActivityAsUser(voiceIntent, UserHandle.CURRENT_OR_SELF);
         mBroadcastWakeLock.release();
     }
 
@@ -5896,8 +5930,10 @@
         return null;
     }
 
-    void startDockOrHome(boolean fromHomeKey) {
-        awakenDreams();
+    void startDockOrHome(boolean fromHomeKey, boolean awakenFromDreams) {
+        if (awakenFromDreams) {
+            awakenDreams();
+        }
 
         Intent dock = createHomeDockIntent();
         if (dock != null) {
@@ -5905,7 +5941,7 @@
                 if (fromHomeKey) {
                     dock.putExtra(WindowManagerPolicy.EXTRA_FROM_HOME_KEY, fromHomeKey);
                 }
-                mContext.startActivityAsUser(dock, UserHandle.CURRENT);
+                startActivityAsUser(dock, UserHandle.CURRENT);
                 return;
             } catch (ActivityNotFoundException e) {
             }
@@ -5920,7 +5956,7 @@
             intent = mHomeIntent;
         }
 
-        mContext.startActivityAsUser(intent, UserHandle.CURRENT);
+        startActivityAsUser(mHomeIntent, UserHandle.CURRENT);
     }
 
     /**
@@ -5928,6 +5964,10 @@
      * @return whether it did anything
      */
     boolean goHome() {
+        if (!isUserSetupComplete()) {
+            Slog.i(TAG, "Not going home because user setup is in progress.");
+            return false;
+        }
         if (false) {
             // This code always brings home to the front.
             try {
@@ -5935,7 +5975,7 @@
             } catch (RemoteException e) {
             }
             sendCloseSystemWindows();
-            startDockOrHome(false /*fromHomeKey*/);
+            startDockOrHome(false /*fromHomeKey*/, true /* awakenFromDreams */);
         } else {
             // This code brings home to the front or, if it is already
             // at the front, puts the device to sleep.
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index 66c2f5f..9e373b7 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -1080,6 +1080,9 @@
                 case PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON:
                     Slog.i(TAG, "Going to sleep due to power button (uid " + uid +")...");
                     break;
+                case PowerManager.GO_TO_SLEEP_REASON_SLEEP_BUTTON:
+                    Slog.i(TAG, "Going to sleep due to sleep button (uid " + uid +")...");
+                    break;
                 case PowerManager.GO_TO_SLEEP_REASON_HDMI:
                     Slog.i(TAG, "Going to sleep due to HDMI standby (uid " + uid +")...");
                     break;
diff --git a/services/core/java/com/android/server/power/ShutdownThread.java b/services/core/java/com/android/server/power/ShutdownThread.java
index da11387..1e0185da 100644
--- a/services/core/java/com/android/server/power/ShutdownThread.java
+++ b/services/core/java/com/android/server/power/ShutdownThread.java
@@ -39,6 +39,7 @@
 import android.os.SystemClock;
 import android.os.SystemProperties;
 import android.os.UserHandle;
+import android.os.UserManager;
 import android.os.Vibrator;
 import android.os.SystemVibrator;
 import android.os.storage.IMountService;
@@ -202,6 +203,11 @@
      * @param confirm true if user confirmation is needed before shutting down.
      */
     public static void rebootSafeMode(final Context context, boolean confirm) {
+        UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE);
+        if (um.hasUserRestriction(UserManager.DISALLOW_SAFE_BOOT)) {
+            return;
+        }
+
         mReboot = true;
         mRebootSafeMode = true;
         mRebootReason = null;
diff --git a/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java b/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java
index b819993..2673557 100644
--- a/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java
+++ b/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java
@@ -471,7 +471,7 @@
         Notification notification = new Notification.Builder(context)
                 .setSmallIcon(com.android.internal.R.drawable.stat_notify_disk_full)
                 .setTicker(title)
-                .setColor(context.getResources().getColor(
+                .setColor(context.getColor(
                     com.android.internal.R.color.system_notification_accent_color))
                 .setContentTitle(title)
                 .setContentText(details)
diff --git a/services/core/java/com/android/server/wm/AccessibilityController.java b/services/core/java/com/android/server/wm/AccessibilityController.java
index b5d4caf..ae8832a 100644
--- a/services/core/java/com/android/server/wm/AccessibilityController.java
+++ b/services/core/java/com/android/server/wm/AccessibilityController.java
@@ -669,7 +669,7 @@
                     TypedValue typedValue = new TypedValue();
                     context.getTheme().resolveAttribute(R.attr.colorActivatedHighlight,
                             typedValue, true);
-                    final int borderColor = context.getResources().getColor(typedValue.resourceId);
+                    final int borderColor = context.getColor(typedValue.resourceId);
 
                     mPaint.setStyle(Paint.Style.STROKE);
                     mPaint.setStrokeWidth(mBorderWidth);
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 99bad07..9a97a2d 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -29,6 +29,7 @@
 
 import android.view.IWindowSessionCallback;
 import android.view.WindowContentFrameStats;
+import com.android.internal.app.IAssistScreenshotReceiver;
 import com.android.internal.app.IBatteryStats;
 import com.android.internal.util.FastPrintWriter;
 import com.android.internal.view.IInputContext;
@@ -38,6 +39,7 @@
 import com.android.server.AttributeCache;
 import com.android.server.DisplayThread;
 import com.android.server.EventLogTags;
+import com.android.server.FgThread;
 import com.android.server.LocalServices;
 import com.android.server.UiThread;
 import com.android.server.Watchdog;
@@ -5997,26 +5999,57 @@
      * Takes a snapshot of the screen.  In landscape mode this grabs the whole screen.
      * In portrait mode, it grabs the upper region of the screen based on the vertical dimension
      * of the target image.
+     */
+    @Override
+    public boolean requestAssistScreenshot(final IAssistScreenshotReceiver receiver) {
+        if (!checkCallingPermission(Manifest.permission.READ_FRAME_BUFFER,
+                "requestAssistScreenshot()")) {
+            throw new SecurityException("Requires READ_FRAME_BUFFER permission");
+        }
+
+        FgThread.getHandler().post(new Runnable() {
+            @Override
+            public void run() {
+                Bitmap bm = screenshotApplicationsInner(null, Display.DEFAULT_DISPLAY, -1, -1,
+                        true);
+                try {
+                    receiver.send(bm);
+                } catch (RemoteException e) {
+                }
+            }
+        });
+
+        return true;
+    }
+
+    /**
+     * Takes a snapshot of the screen.  In landscape mode this grabs the whole screen.
+     * In portrait mode, it grabs the upper region of the screen based on the vertical dimension
+     * of the target image.
      *
      * @param displayId the Display to take a screenshot of.
      * @param width the width of the target bitmap
      * @param height the height of the target bitmap
-     * @param force565 if true the returned bitmap will be RGB_565, otherwise it
-     *                 will be the same config as the surface
      */
     @Override
-    public Bitmap screenshotApplications(IBinder appToken, int displayId, int width,
-            int height, boolean force565) {
+    public Bitmap screenshotApplications(IBinder appToken, int displayId, int width, int height) {
         if (!checkCallingPermission(Manifest.permission.READ_FRAME_BUFFER,
                 "screenshotApplications()")) {
             throw new SecurityException("Requires READ_FRAME_BUFFER permission");
         }
+        return screenshotApplicationsInner(appToken, displayId, width, height, false);
+    }
 
-        final DisplayContent displayContent = getDisplayContentLocked(displayId);
-        if (displayContent == null) {
-            if (DEBUG_SCREENSHOT) Slog.i(TAG, "Screenshot of " + appToken
-                    + ": returning null. No Display for displayId=" + displayId);
-            return null;
+    Bitmap screenshotApplicationsInner(IBinder appToken, int displayId, int width, int height,
+            boolean includeFullDisplay) {
+        final DisplayContent displayContent;
+        synchronized(mWindowMap) {
+            displayContent = getDisplayContentLocked(displayId);
+            if (displayContent == null) {
+                if (DEBUG_SCREENSHOT) Slog.i(TAG, "Screenshot of " + appToken
+                        + ": returning null. No Display for displayId=" + displayId);
+                return null;
+            }
         }
         final DisplayInfo displayInfo = displayContent.getDisplayInfo();
         int dw = displayInfo.logicalWidth;
@@ -6033,9 +6066,6 @@
         final Rect frame = new Rect();
         final Rect stackBounds = new Rect();
 
-        float scale = 0;
-        int rot = Surface.ROTATION_0;
-
         boolean screenshotReady;
         int minLayer;
         if (appToken == null) {
@@ -6116,7 +6146,7 @@
                     }
 
                     // Don't include wallpaper in bounds calculation
-                    if (!ws.mIsWallpaper) {
+                    if (!includeFullDisplay && !ws.mIsWallpaper) {
                         final Rect wf = ws.mFrame;
                         final Rect cr = ws.mContentInsets;
                         int left = wf.left + cr.left;
@@ -6170,8 +6200,21 @@
                     return null;
                 }
 
-                // Constrain frame to the screen size.
-                frame.intersect(0, 0, dw, dh);
+                if (!includeFullDisplay) {
+                    // Constrain frame to the screen size.
+                    frame.intersect(0, 0, dw, dh);
+                } else {
+                    // Caller just wants entire display.
+                    frame.set(0, 0, dw, dh);
+                }
+
+
+                if (width < 0) {
+                    width = frame.width();
+                }
+                if (height < 0) {
+                    height = frame.height();
+                }
 
                 // Tell surface flinger what part of the image to crop. Take the top
                 // right part of the application, and crop the larger dimension to fit.
@@ -6185,7 +6228,7 @@
                 }
 
                 // The screenshot API does not apply the current screen rotation.
-                rot = getDefaultDisplayContentLocked().getDisplay().getRotation();
+                int rot = getDefaultDisplayContentLocked().getDisplay().getRotation();
 
                 if (rot == Surface.ROTATION_90 || rot == Surface.ROTATION_270) {
                     rot = (rot == Surface.ROTATION_90) ? Surface.ROTATION_270 : Surface.ROTATION_90;
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index 0080d9e..663c919 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -179,6 +179,7 @@
         DEVICE_OWNER_USER_RESTRICTIONS.add(UserManager.DISALLOW_UNMUTE_MICROPHONE);
         DEVICE_OWNER_USER_RESTRICTIONS.add(UserManager.DISALLOW_ADJUST_VOLUME);
         DEVICE_OWNER_USER_RESTRICTIONS.add(UserManager.DISALLOW_SMS);
+        DEVICE_OWNER_USER_RESTRICTIONS.add(UserManager.DISALLOW_SAFE_BOOT);
     }
 
     // The following user restrictions cannot be changed by any active admin, including device
@@ -1763,7 +1764,7 @@
                 .setContentIntent(notifyIntent)
                 .setPriority(Notification.PRIORITY_HIGH)
                 .setShowWhen(false)
-                .setColor(mContext.getResources().getColor(
+                .setColor(mContext.getColor(
                         com.android.internal.R.color.system_notification_accent_color))
                 .build();
 
@@ -3079,8 +3080,11 @@
             long ident = Binder.clearCallingIdentity();
             try {
                 if ((flags & WIPE_RESET_PROTECTION_DATA) != 0) {
+                    boolean ownsInitialization = isDeviceInitializer(admin.info.getPackageName())
+                            && !hasUserSetupCompleted(userHandle);
                     if (userHandle != UserHandle.USER_OWNER
-                            || !isDeviceOwner(admin.info.getPackageName())) {
+                            || !(isDeviceOwner(admin.info.getPackageName())
+                                    || ownsInitialization)) {
                         throw new SecurityException(
                                "Only device owner admins can set WIPE_RESET_PROTECTION_DATA");
                     }
diff --git a/services/print/java/com/android/server/print/PrintManagerService.java b/services/print/java/com/android/server/print/PrintManagerService.java
index 6785cb8..34347cf 100644
--- a/services/print/java/com/android/server/print/PrintManagerService.java
+++ b/services/print/java/com/android/server/print/PrintManagerService.java
@@ -761,7 +761,7 @@
                     .setWhen(System.currentTimeMillis())
                     .setAutoCancel(true)
                     .setShowWhen(true)
-                    .setColor(mContext.getResources().getColor(
+                    .setColor(mContext.getColor(
                             com.android.internal.R.color.system_notification_accent_color));
 
             NotificationManager notificationManager = (NotificationManager) mContext
diff --git a/services/usb/java/com/android/server/usb/UsbDeviceManager.java b/services/usb/java/com/android/server/usb/UsbDeviceManager.java
index b7ed8d1..41cf2ef 100644
--- a/services/usb/java/com/android/server/usb/UsbDeviceManager.java
+++ b/services/usb/java/com/android/server/usb/UsbDeviceManager.java
@@ -771,7 +771,7 @@
                                     "com.android.settings.UsbSettings"));
                     PendingIntent pi = PendingIntent.getActivityAsUser(mContext, 0,
                             intent, 0, null, UserHandle.CURRENT);
-                    notification.color = mContext.getResources().getColor(
+                    notification.color = mContext.getColor(
                             com.android.internal.R.color.system_notification_accent_color);
                     notification.setLatestEventInfo(mContext, title, message, pi);
                     notification.visibility = Notification.VISIBILITY_PUBLIC;
@@ -809,7 +809,7 @@
                                     "com.android.settings.DevelopmentSettings"));
                     PendingIntent pi = PendingIntent.getActivityAsUser(mContext, 0,
                             intent, 0, null, UserHandle.CURRENT);
-                    notification.color = mContext.getResources().getColor(
+                    notification.color = mContext.getColor(
                             com.android.internal.R.color.system_notification_accent_color);
                     notification.setLatestEventInfo(mContext, title, message, pi);
                     notification.visibility = Notification.VISIBILITY_PUBLIC;
diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionSessionConnection.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionSessionConnection.java
index 30d97b9..7a379c2 100644
--- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionSessionConnection.java
+++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionSessionConnection.java
@@ -26,6 +26,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.ServiceConnection;
+import android.graphics.Bitmap;
 import android.net.Uri;
 import android.os.Binder;
 import android.os.Bundle;
@@ -39,6 +40,7 @@
 import android.util.Slog;
 import android.view.IWindowManager;
 import android.view.WindowManager;
+import com.android.internal.app.IAssistScreenshotReceiver;
 import com.android.internal.app.IVoiceInteractor;
 import com.android.internal.os.IResultReceiver;
 
@@ -70,6 +72,8 @@
     IVoiceInteractor mInteractor;
     boolean mHaveAssistData;
     Bundle mAssistData;
+    boolean mHaveScreenshot;
+    Bitmap mScreenshot;
 
     public interface Callback {
         public void sessionConnectionGone(VoiceInteractionSessionConnection connection);
@@ -91,7 +95,20 @@
                 if (mShown) {
                     mHaveAssistData = true;
                     mAssistData = resultData;
-                    deliverAssistData();
+                    deliverSessionDataLocked();
+                }
+            }
+        }
+    };
+
+    final IAssistScreenshotReceiver mScreenshotReceiver = new IAssistScreenshotReceiver.Stub() {
+        @Override
+        public void send(Bitmap screenshot) throws RemoteException {
+            synchronized (mLock) {
+                if (mShown) {
+                    mHaveScreenshot = true;
+                    mScreenshot = screenshot;
+                    deliverSessionDataLocked();
                 }
             }
         }
@@ -144,6 +161,7 @@
             mShown = true;
             mShowArgs = args;
             mShowFlags = flags;
+            mHaveAssistData = false;
             if ((flags&VoiceInteractionService.START_WITH_ASSIST) != 0) {
                 try {
                     mAm.requestAssistContextExtras(ActivityManager.ASSIST_CONTEXT_FULL,
@@ -151,9 +169,17 @@
                 } catch (RemoteException e) {
                 }
             } else {
-                mHaveAssistData = false;
                 mAssistData = null;
             }
+            mHaveScreenshot = false;
+            if ((flags&VoiceInteractionService.START_WITH_SCREENSHOT) != 0) {
+                try {
+                    mIWindowManager.requestAssistScreenshot(mScreenshotReceiver);
+                } catch (RemoteException e) {
+                }
+            } else {
+                mScreenshot = null;
+            }
             if (mSession != null) {
                 try {
                     mSession.show(mShowArgs, mShowFlags);
@@ -161,7 +187,7 @@
                     mShowFlags = 0;
                 } catch (RemoteException e) {
                 }
-                deliverAssistData();
+                deliverSessionDataLocked();
             }
             return true;
         }
@@ -210,39 +236,50 @@
         }
     }
 
-    void deliverAssistData() {
-        if (mSession == null || !mHaveAssistData) {
+    void deliverSessionDataLocked() {
+        if (mSession == null) {
             return;
         }
-        if (mAssistData != null) {
-            int uid = mAssistData.getInt(Intent.EXTRA_ASSIST_UID, -1);
-            if (uid >= 0) {
-                Bundle assistContext = mAssistData.getBundle(Intent.EXTRA_ASSIST_CONTEXT);
-                if (assistContext != null) {
-                    AssistContent content = AssistContent.getAssistContent(assistContext);
-                    if (content != null) {
-                        Intent intent = content.getIntent();
-                        if (intent != null) {
-                            ClipData data = intent.getClipData();
-                            if (data != null && Intent.isAccessUriMode(intent.getFlags())) {
-                                grantClipDataPermissions(data, intent.getFlags(), uid,
-                                        mCallingUid, mSessionComponentName.getPackageName());
+        if (mHaveAssistData) {
+            if (mAssistData != null) {
+                int uid = mAssistData.getInt(Intent.EXTRA_ASSIST_UID, -1);
+                if (uid >= 0) {
+                    Bundle assistContext = mAssistData.getBundle(Intent.EXTRA_ASSIST_CONTEXT);
+                    if (assistContext != null) {
+                        AssistContent content = AssistContent.getAssistContent(assistContext);
+                        if (content != null) {
+                            Intent intent = content.getIntent();
+                            if (intent != null) {
+                                ClipData data = intent.getClipData();
+                                if (data != null && Intent.isAccessUriMode(intent.getFlags())) {
+                                    grantClipDataPermissions(data, intent.getFlags(), uid,
+                                            mCallingUid, mSessionComponentName.getPackageName());
+                                }
                             }
-                        }
-                        ClipData data = content.getClipData();
-                        if (data != null) {
-                            grantClipDataPermissions(data, Intent.FLAG_GRANT_READ_URI_PERMISSION,
-                                    uid, mCallingUid, mSessionComponentName.getPackageName());
+                            ClipData data = content.getClipData();
+                            if (data != null) {
+                                grantClipDataPermissions(data,
+                                        Intent.FLAG_GRANT_READ_URI_PERMISSION,
+                                        uid, mCallingUid, mSessionComponentName.getPackageName());
+                            }
                         }
                     }
                 }
             }
-        }
-        try {
-            mSession.handleAssist(mAssistData);
+            try {
+                mSession.handleAssist(mAssistData);
+            } catch (RemoteException e) {
+            }
             mAssistData = null;
             mHaveAssistData = false;
-        } catch (RemoteException e) {
+        }
+        if (mHaveScreenshot) {
+            try {
+                mSession.handleScreenshot(mScreenshot);
+            } catch (RemoteException e) {
+            }
+            mScreenshot = null;
+            mHaveScreenshot = false;
         }
     }
 
@@ -288,14 +325,7 @@
                 mShowFlags = 0;
             } catch (RemoteException e) {
             }
-            if (mHaveAssistData) {
-                try {
-                    session.handleAssist(mAssistData);
-                    mAssistData = null;
-                    mHaveAssistData = false;
-                } catch (RemoteException e) {
-                }
-            }
+            deliverSessionDataLocked();
         }
         return true;
     }
diff --git a/telecomm/java/android/telecom/Call.java b/telecomm/java/android/telecom/Call.java
index ab586515..22b7bb1 100644
--- a/telecomm/java/android/telecom/Call.java
+++ b/telecomm/java/android/telecom/Call.java
@@ -208,16 +208,22 @@
          */
         public static final int CAPABILITY_WIFI = 0x00010000;
 
-        //******************************************************************************************
-        // Next CAPABILITY value: 0x00020000
-        //******************************************************************************************
-
         /**
          * Indicates that the current device callback number should be shown.
          *
          * @hide
          */
-        public static final int CAPABILITY_SHOW_CALLBACK_NUMBER = 0x00008000;
+        public static final int CAPABILITY_SHOW_CALLBACK_NUMBER = 0x00020000;
+
+        /**
+         * Speed up audio setup for MT call.
+         * @hide
+         */
+        public static final int CAPABILITY_SPEED_UP_MT_AUDIO = 0x00040000;
+
+        //**********************************************************************************************
+        // Next CAPABILITY value: 0x00080000
+        //**********************************************************************************************
 
         private final Uri mHandle;
         private final int mHandlePresentation;
@@ -316,6 +322,9 @@
             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_IMS_MT_AUDIO");
+            }
             builder.append("]");
             return builder.toString();
         }
diff --git a/telecomm/java/android/telecom/Connection.java b/telecomm/java/android/telecom/Connection.java
index f7a19f8..a335e47 100644
--- a/telecomm/java/android/telecom/Connection.java
+++ b/telecomm/java/android/telecom/Connection.java
@@ -173,18 +173,22 @@
      */
     public static final int CAPABILITY_WIFI = 0x000010000;
 
-    //**********************************************************************************************
-    // Next CAPABILITY value: 0x00020000
-    //**********************************************************************************************
-
     /**
      * Indicates that the current device callback number should be shown.
      *
      * @hide
      */
-    public static final int CAPABILITY_SHOW_CALLBACK_NUMBER = 0x00008000;
+    public static final int CAPABILITY_SHOW_CALLBACK_NUMBER = 0x00020000;
 
+    /**
+     * Speed up audio setup for MT call.
+     * @hide
+     */
+    public static final int CAPABILITY_SPEED_UP_MT_AUDIO = 0x00040000;
 
+    //**********************************************************************************************
+    // Next CAPABILITY value: 0x00080000
+    //**********************************************************************************************
 
     // Flag controlling whether PII is emitted into the logs
     private static final boolean PII_DEBUG = Log.isLoggable(android.util.Log.DEBUG);
@@ -287,6 +291,9 @@
         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_IMS_MT_AUDIO");
+        }
         builder.append("]");
         return builder.toString();
     }
diff --git a/telecomm/java/android/telecom/PhoneAccount.java b/telecomm/java/android/telecom/PhoneAccount.java
index 9eb2f5d..07f9053 100644
--- a/telecomm/java/android/telecom/PhoneAccount.java
+++ b/telecomm/java/android/telecom/PhoneAccount.java
@@ -94,7 +94,6 @@
      * <p>
      * See {@link #getCapabilities}
      */
-    @SystemApi
     public static final int CAPABILITY_VIDEO_CALLING = 0x8;
 
     /**
diff --git a/telecomm/java/android/telecom/Voicemail.java b/telecomm/java/android/telecom/Voicemail.java
index 864c6b1..a884c5f 100644
--- a/telecomm/java/android/telecom/Voicemail.java
+++ b/telecomm/java/android/telecom/Voicemail.java
@@ -57,6 +57,16 @@
     }
 
     /**
+     * Create a {@link Builder} for a {@link Voicemail} to be updated (or deleted).
+     * <p>
+     * The id and source data fields are mandatory for update - id is necessary for updating the
+     * database and source data is necessary for updating the server.
+     */
+    public static Builder createForUpdate(long id, String sourceData) {
+        return new Builder().setId(id).setSourceData(sourceData);
+    }
+
+    /**
      * Builder pattern for creating a {@link Voicemail}. The builder must be created with the
      * {@link #createForInsertion(long, String)} method.
      * <p>
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index eef91e1..b44fa6c 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -603,7 +603,10 @@
             return null;
         }
         try {
-            return getSubscriberInfo().getDeviceSvnUsingSubId(subId[0]);
+            IPhoneSubInfo info = getSubscriberInfo();
+            if (info == null)
+                return null;
+            return info.getDeviceSvnUsingSubId(subId[0]);
         } catch (RemoteException ex) {
             return null;
         } catch (NullPointerException ex) {
@@ -620,7 +623,10 @@
      */
     public String getDeviceId() {
         try {
-            return getITelephony().getDeviceId();
+            ITelephony telephony = getITelephony();
+            if (telephony == null)
+                return null;
+            return telephony.getDeviceId();
         } catch (RemoteException ex) {
             return null;
         } catch (NullPointerException ex) {
@@ -641,7 +647,10 @@
     public String getDeviceId(int slotId) {
         // FIXME this assumes phoneId == slotId
         try {
-            return getSubscriberInfo().getDeviceIdForPhone(slotId);
+            IPhoneSubInfo info = getSubscriberInfo();
+            if (info == null)
+                return null;
+            return info.getDeviceIdForPhone(slotId);
         } catch (RemoteException ex) {
             return null;
         } catch (NullPointerException ex) {
@@ -672,7 +681,10 @@
     public String getImei(int slotId) {
         int[] subId = SubscriptionManager.getSubId(slotId);
         try {
-            return getSubscriberInfo().getImeiForSubscriber(subId[0]);
+            IPhoneSubInfo info = getSubscriberInfo();
+            if (info == null)
+                return null;
+            return info.getImeiForSubscriber(subId[0]);
         } catch (RemoteException ex) {
             return null;
         } catch (NullPointerException ex) {
@@ -698,7 +710,10 @@
     public String getNai(int slotId) {
         int[] subId = SubscriptionManager.getSubId(slotId);
         try {
-            String nai = getSubscriberInfo().getNaiForSubscriber(subId[0]);
+            IPhoneSubInfo info = getSubscriberInfo();
+            if (info == null)
+                return null;
+            String nai = info.getNaiForSubscriber(subId[0]);
             if (Log.isLoggable(TAG, Log.VERBOSE)) {
                 Rlog.v(TAG, "Nai = " + nai);
             }
@@ -727,7 +742,10 @@
      */
     public CellLocation getCellLocation() {
         try {
-            Bundle bundle = getITelephony().getCellLocation();
+            ITelephony telephony = getITelephony();
+            if (telephony == null)
+                return null;
+            Bundle bundle = telephony.getCellLocation();
             if (bundle.isEmpty()) return null;
             CellLocation cl = CellLocation.newFromBundle(bundle);
             if (cl.isEmpty())
@@ -766,7 +784,9 @@
     /** @hide */
     public void enableLocationUpdates(int subId) {
         try {
-            getITelephony().enableLocationUpdatesForSubscriber(subId);
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                telephony.enableLocationUpdatesForSubscriber(subId);
         } catch (RemoteException ex) {
         } catch (NullPointerException ex) {
         }
@@ -788,7 +808,9 @@
     /** @hide */
     public void disableLocationUpdates(int subId) {
         try {
-            getITelephony().disableLocationUpdatesForSubscriber(subId);
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                telephony.disableLocationUpdatesForSubscriber(subId);
         } catch (RemoteException ex) {
         } catch (NullPointerException ex) {
         }
@@ -807,7 +829,10 @@
      */
     public List<NeighboringCellInfo> getNeighboringCellInfo() {
         try {
-            return getITelephony().getNeighboringCellInfo(mContext.getOpPackageName());
+            ITelephony telephony = getITelephony();
+            if (telephony == null)
+                return null;
+            return telephony.getNeighboringCellInfo(mContext.getOpPackageName());
         } catch (RemoteException ex) {
             return null;
         } catch (NullPointerException ex) {
@@ -1513,7 +1538,10 @@
     public boolean hasIccCard(int slotId) {
 
         try {
-            return getITelephony().hasIccCardUsingSlotId(slotId);
+            ITelephony telephony = getITelephony();
+            if (telephony == null)
+                return false;
+            return telephony.hasIccCardUsingSlotId(slotId);
         } catch (RemoteException ex) {
             // Assume no ICC card if remote exception which shouldn't happen
             return false;
@@ -1745,7 +1773,10 @@
     /** {@hide} */
     public String getSimSerialNumber(int subId) {
         try {
-            return getSubscriberInfo().getIccSerialNumberForSubscriber(subId);
+            IPhoneSubInfo info = getSubscriberInfo();
+            if (info == null)
+                return null;
+            return info.getIccSerialNumberForSubscriber(subId);
         } catch (RemoteException ex) {
             return null;
         } catch (NullPointerException ex) {
@@ -1781,7 +1812,10 @@
     /** {@hide} */
     public int getLteOnCdmaMode(int subId) {
         try {
-            return getITelephony().getLteOnCdmaModeForSubscriber(subId);
+            ITelephony telephony = getITelephony();
+            if (telephony == null)
+                return PhoneConstants.LTE_ON_CDMA_UNKNOWN;
+            return telephony.getLteOnCdmaModeForSubscriber(subId);
         } catch (RemoteException ex) {
             // Assume no ICC card if remote exception which shouldn't happen
             return PhoneConstants.LTE_ON_CDMA_UNKNOWN;
@@ -1821,7 +1855,10 @@
     /** {@hide} */
     public String getSubscriberId(int subId) {
         try {
-            return getSubscriberInfo().getSubscriberIdForSubscriber(subId);
+            IPhoneSubInfo info = getSubscriberInfo();
+            if (info == null)
+                return null;
+            return info.getSubscriberIdForSubscriber(subId);
         } catch (RemoteException ex) {
             return null;
         } catch (NullPointerException ex) {
@@ -1839,7 +1876,10 @@
      */
     public String getGroupIdLevel1() {
         try {
-            return getSubscriberInfo().getGroupIdLevel1();
+            IPhoneSubInfo info = getSubscriberInfo();
+            if (info == null)
+                return null;
+            return info.getGroupIdLevel1();
         } catch (RemoteException ex) {
             return null;
         } catch (NullPointerException ex) {
@@ -1860,7 +1900,10 @@
     /** {@hide} */
     public String getGroupIdLevel1(int subId) {
         try {
-            return getSubscriberInfo().getGroupIdLevel1ForSubscriber(subId);
+            IPhoneSubInfo info = getSubscriberInfo();
+            if (info == null)
+                return null;
+            return info.getGroupIdLevel1ForSubscriber(subId);
         } catch (RemoteException ex) {
             return null;
         } catch (NullPointerException ex) {
@@ -1893,7 +1936,9 @@
     public String getLine1NumberForSubscriber(int subId) {
         String number = null;
         try {
-            number = getITelephony().getLine1NumberForDisplay(subId);
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                number = telephony.getLine1NumberForDisplay(subId);
         } catch (RemoteException ex) {
         } catch (NullPointerException ex) {
         }
@@ -1901,7 +1946,10 @@
             return number;
         }
         try {
-            return getSubscriberInfo().getLine1NumberForSubscriber(subId);
+            IPhoneSubInfo info = getSubscriberInfo();
+            if (info == null)
+                return null;
+            return info.getLine1NumberForSubscriber(subId);
         } catch (RemoteException ex) {
             return null;
         } catch (NullPointerException ex) {
@@ -1944,7 +1992,9 @@
      */
     public boolean setLine1NumberForDisplayForSubscriber(int subId, String alphaTag, String number) {
         try {
-            return getITelephony().setLine1NumberForDisplayForSubscriber(subId, alphaTag, number);
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.setLine1NumberForDisplayForSubscriber(subId, alphaTag, number);
         } catch (RemoteException ex) {
         } catch (NullPointerException ex) {
         }
@@ -1978,7 +2028,9 @@
     public String getLine1AlphaTagForSubscriber(int subId) {
         String alphaTag = null;
         try {
-            alphaTag = getITelephony().getLine1AlphaTagForDisplay(subId);
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                alphaTag = telephony.getLine1AlphaTagForDisplay(subId);
         } catch (RemoteException ex) {
         } catch (NullPointerException ex) {
         }
@@ -1986,7 +2038,10 @@
             return alphaTag;
         }
         try {
-            return getSubscriberInfo().getLine1AlphaTagForSubscriber(subId);
+            IPhoneSubInfo info = getSubscriberInfo();
+            if (info == null)
+                return null;
+            return info.getLine1AlphaTagForSubscriber(subId);
         } catch (RemoteException ex) {
             return null;
         } catch (NullPointerException ex) {
@@ -2005,7 +2060,9 @@
      */
     public @Nullable String[] getMergedSubscriberIds() {
         try {
-            return getITelephony().getMergedSubscriberIds();
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.getMergedSubscriberIds();
         } catch (RemoteException ex) {
         } catch (NullPointerException ex) {
         }
@@ -2037,7 +2094,10 @@
     /** {@hide} */
     public String getMsisdn(int subId) {
         try {
-            return getSubscriberInfo().getMsisdnForSubscriber(subId);
+            IPhoneSubInfo info = getSubscriberInfo();
+            if (info == null)
+                return null;
+            return info.getMsisdnForSubscriber(subId);
         } catch (RemoteException ex) {
             return null;
         } catch (NullPointerException ex) {
@@ -2067,7 +2127,10 @@
     /** {@hide} */
     public String getVoiceMailNumber(int subId) {
         try {
-            return getSubscriberInfo().getVoiceMailNumberForSubscriber(subId);
+            IPhoneSubInfo info = getSubscriberInfo();
+            if (info == null)
+                return null;
+            return info.getVoiceMailNumberForSubscriber(subId);
         } catch (RemoteException ex) {
             return null;
         } catch (NullPointerException ex) {
@@ -2099,7 +2162,10 @@
     /** {@hide} */
     public String getCompleteVoiceMailNumber(int subId) {
         try {
-            return getSubscriberInfo().getCompleteVoiceMailNumberForSubscriber(subId);
+            IPhoneSubInfo info = getSubscriberInfo();
+            if (info == null)
+                return null;
+            return info.getCompleteVoiceMailNumberForSubscriber(subId);
         } catch (RemoteException ex) {
             return null;
         } catch (NullPointerException ex) {
@@ -2134,7 +2200,9 @@
     /** {@hide} */
     public boolean setVoiceMailNumber(int subId, String alphaTag, String number) {
         try {
-            return getITelephony().setVoiceMailNumber(subId, alphaTag, number);
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.setVoiceMailNumber(subId, alphaTag, number);
         } catch (RemoteException ex) {
         } catch (NullPointerException ex) {
         }
@@ -2162,7 +2230,10 @@
     /** {@hide} */
     public int getVoiceMessageCount(int subId) {
         try {
-            return getITelephony().getVoiceMessageCountForSubscriber(subId);
+            ITelephony telephony = getITelephony();
+            if (telephony == null)
+                return 0;
+            return telephony.getVoiceMessageCountForSubscriber(subId);
         } catch (RemoteException ex) {
             return 0;
         } catch (NullPointerException ex) {
@@ -2194,7 +2265,10 @@
     /** {@hide} */
     public String getVoiceMailAlphaTag(int subId) {
         try {
-            return getSubscriberInfo().getVoiceMailAlphaTagForSubscriber(subId);
+            IPhoneSubInfo info = getSubscriberInfo();
+            if (info == null)
+                return null;
+            return info.getVoiceMailAlphaTagForSubscriber(subId);
         } catch (RemoteException ex) {
             return null;
         } catch (NullPointerException ex) {
@@ -2210,7 +2284,10 @@
      */
     public String getIsimImpi() {
         try {
-            return getSubscriberInfo().getIsimImpi();
+            IPhoneSubInfo info = getSubscriberInfo();
+            if (info == null)
+                return null;
+            return info.getIsimImpi();
         } catch (RemoteException ex) {
             return null;
         } catch (NullPointerException ex) {
@@ -2226,7 +2303,10 @@
      */
     public String getIsimDomain() {
         try {
-            return getSubscriberInfo().getIsimDomain();
+            IPhoneSubInfo info = getSubscriberInfo();
+            if (info == null)
+                return null;
+            return info.getIsimDomain();
         } catch (RemoteException ex) {
             return null;
         } catch (NullPointerException ex) {
@@ -2243,7 +2323,10 @@
      */
     public String[] getIsimImpu() {
         try {
-            return getSubscriberInfo().getIsimImpu();
+            IPhoneSubInfo info = getSubscriberInfo();
+            if (info == null)
+                return null;
+            return info.getIsimImpu();
         } catch (RemoteException ex) {
             return null;
         } catch (NullPointerException ex) {
@@ -2287,7 +2370,10 @@
     /** {@hide} */
     public int getCallState(int subId) {
         try {
-            return getITelephony().getCallStateForSubscriber(subId);
+            ITelephony telephony = getITelephony();
+            if (telephony == null)
+                return CALL_STATE_IDLE;
+            return telephony.getCallStateForSubscriber(subId);
         } catch (RemoteException ex) {
             // the phone process is restarting.
             return CALL_STATE_IDLE;
@@ -2323,7 +2409,10 @@
      */
     public int getDataActivity() {
         try {
-            return getITelephony().getDataActivity();
+            ITelephony telephony = getITelephony();
+            if (telephony == null)
+                return DATA_ACTIVITY_NONE;
+            return telephony.getDataActivity();
         } catch (RemoteException ex) {
             // the phone process is restarting.
             return DATA_ACTIVITY_NONE;
@@ -2359,7 +2448,10 @@
      */
     public int getDataState() {
         try {
-            return getITelephony().getDataState();
+            ITelephony telephony = getITelephony();
+            if (telephony == null)
+                return DATA_DISCONNECTED;
+            return telephony.getDataState();
         } catch (RemoteException ex) {
             // the phone process is restarting.
             return DATA_DISCONNECTED;
@@ -2438,7 +2530,10 @@
     /** {@hide} */
     public int getCdmaEriIconIndex(int subId) {
         try {
-            return getITelephony().getCdmaEriIconIndexForSubscriber(subId);
+            ITelephony telephony = getITelephony();
+            if (telephony == null)
+                return -1;
+            return telephony.getCdmaEriIconIndexForSubscriber(subId);
         } catch (RemoteException ex) {
             // the phone process is restarting.
             return -1;
@@ -2466,7 +2561,10 @@
     /** {@hide} */
     public int getCdmaEriIconMode(int subId) {
         try {
-            return getITelephony().getCdmaEriIconModeForSubscriber(subId);
+            ITelephony telephony = getITelephony();
+            if (telephony == null)
+                return -1;
+            return telephony.getCdmaEriIconModeForSubscriber(subId);
         } catch (RemoteException ex) {
             // the phone process is restarting.
             return -1;
@@ -2491,7 +2589,10 @@
     /** {@hide} */
     public String getCdmaEriText(int subId) {
         try {
-            return getITelephony().getCdmaEriTextForSubscriber(subId);
+            ITelephony telephony = getITelephony();
+            if (telephony == null)
+                return null;
+            return telephony.getCdmaEriTextForSubscriber(subId);
         } catch (RemoteException ex) {
             // the phone process is restarting.
             return null;
@@ -2558,7 +2659,10 @@
      */
     public List<CellInfo> getAllCellInfo() {
         try {
-            return getITelephony().getAllCellInfo();
+            ITelephony telephony = getITelephony();
+            if (telephony == null)
+                return null;
+            return telephony.getAllCellInfo();
         } catch (RemoteException ex) {
             return null;
         } catch (NullPointerException ex) {
@@ -2580,7 +2684,9 @@
      */
     public void setCellInfoListRate(int rateInMillis) {
         try {
-            getITelephony().setCellInfoListRate(rateInMillis);
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                telephony.setCellInfoListRate(rateInMillis);
         } catch (RemoteException ex) {
         } catch (NullPointerException ex) {
         }
@@ -2618,7 +2724,9 @@
      */
     public IccOpenLogicalChannelResponse iccOpenLogicalChannel(String AID) {
         try {
-            return getITelephony().iccOpenLogicalChannel(AID);
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.iccOpenLogicalChannel(AID);
         } catch (RemoteException ex) {
         } catch (NullPointerException ex) {
         }
@@ -2640,7 +2748,9 @@
      */
     public boolean iccCloseLogicalChannel(int channel) {
         try {
-            return getITelephony().iccCloseLogicalChannel(channel);
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.iccCloseLogicalChannel(channel);
         } catch (RemoteException ex) {
         } catch (NullPointerException ex) {
         }
@@ -2671,7 +2781,9 @@
     public String iccTransmitApduLogicalChannel(int channel, int cla,
             int instruction, int p1, int p2, int p3, String data) {
         try {
-            return getITelephony().iccTransmitApduLogicalChannel(channel, cla,
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.iccTransmitApduLogicalChannel(channel, cla,
                     instruction, p1, p2, p3, data);
         } catch (RemoteException ex) {
         } catch (NullPointerException ex) {
@@ -2701,7 +2813,9 @@
     public String iccTransmitApduBasicChannel(int cla,
             int instruction, int p1, int p2, int p3, String data) {
         try {
-            return getITelephony().iccTransmitApduBasicChannel(cla,
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.iccTransmitApduBasicChannel(cla,
                     instruction, p1, p2, p3, data);
         } catch (RemoteException ex) {
         } catch (NullPointerException ex) {
@@ -2727,8 +2841,9 @@
     public byte[] iccExchangeSimIO(int fileID, int command, int p1, int p2, int p3,
             String filePath) {
         try {
-            return getITelephony().iccExchangeSimIO(fileID, command, p1, p2,
-                p3, filePath);
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.iccExchangeSimIO(fileID, command, p1, p2, p3, filePath);
         } catch (RemoteException ex) {
         } catch (NullPointerException ex) {
         }
@@ -2751,7 +2866,9 @@
      */
     public String sendEnvelopeWithStatus(String content) {
         try {
-            return getITelephony().sendEnvelopeWithStatus(content);
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.sendEnvelopeWithStatus(content);
         } catch (RemoteException ex) {
         } catch (NullPointerException ex) {
         }
@@ -2773,7 +2890,9 @@
      */
     public String nvReadItem(int itemID) {
         try {
-            return getITelephony().nvReadItem(itemID);
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.nvReadItem(itemID);
         } catch (RemoteException ex) {
             Rlog.e(TAG, "nvReadItem RemoteException", ex);
         } catch (NullPointerException ex) {
@@ -2798,7 +2917,9 @@
      */
     public boolean nvWriteItem(int itemID, String itemValue) {
         try {
-            return getITelephony().nvWriteItem(itemID, itemValue);
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.nvWriteItem(itemID, itemValue);
         } catch (RemoteException ex) {
             Rlog.e(TAG, "nvWriteItem RemoteException", ex);
         } catch (NullPointerException ex) {
@@ -2822,7 +2943,9 @@
      */
     public boolean nvWriteCdmaPrl(byte[] preferredRoamingList) {
         try {
-            return getITelephony().nvWriteCdmaPrl(preferredRoamingList);
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.nvWriteCdmaPrl(preferredRoamingList);
         } catch (RemoteException ex) {
             Rlog.e(TAG, "nvWriteCdmaPrl RemoteException", ex);
         } catch (NullPointerException ex) {
@@ -2847,7 +2970,9 @@
      */
     public boolean nvResetConfig(int resetType) {
         try {
-            return getITelephony().nvResetConfig(resetType);
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.nvResetConfig(resetType);
         } catch (RemoteException ex) {
             Rlog.e(TAG, "nvResetConfig RemoteException", ex);
         } catch (NullPointerException ex) {
@@ -3051,7 +3176,10 @@
      */
     public String getIsimIst() {
         try {
-            return getSubscriberInfo().getIsimIst();
+            IPhoneSubInfo info = getSubscriberInfo();
+            if (info == null)
+                return null;
+            return info.getIsimIst();
         } catch (RemoteException ex) {
             return null;
         } catch (NullPointerException ex) {
@@ -3068,7 +3196,10 @@
      */
     public String[] getIsimPcscf() {
         try {
-            return getSubscriberInfo().getIsimPcscf();
+            IPhoneSubInfo info = getSubscriberInfo();
+            if (info == null)
+                return null;
+            return info.getIsimPcscf();
         } catch (RemoteException ex) {
             return null;
         } catch (NullPointerException ex) {
@@ -3087,7 +3218,10 @@
      */
     public String getIsimChallengeResponse(String nonce){
         try {
-            return getSubscriberInfo().getIsimChallengeResponse(nonce);
+            IPhoneSubInfo info = getSubscriberInfo();
+            if (info == null)
+                return null;
+            return info.getIsimChallengeResponse(nonce);
         } catch (RemoteException ex) {
             return null;
         } catch (NullPointerException ex) {
@@ -3107,7 +3241,10 @@
      */
     public String getIccSimChallengeResponse(int subId, int appType, String data) {
         try {
-            return getSubscriberInfo().getIccSimChallengeResponse(subId, appType, data);
+            IPhoneSubInfo info = getSubscriberInfo();
+            if (info == null)
+                return null;
+            return info.getIccSimChallengeResponse(subId, appType, data);
         } catch (RemoteException ex) {
             return null;
         } catch (NullPointerException ex) {
@@ -3136,7 +3273,10 @@
      */
     public String[] getPcscfAddress(String apnType) {
         try {
-            return getITelephony().getPcscfAddress(apnType);
+            ITelephony telephony = getITelephony();
+            if (telephony == null)
+                return new String[0];
+            return telephony.getPcscfAddress(apnType);
         } catch (RemoteException e) {
             return new String[0];
         }
@@ -3150,7 +3290,9 @@
      */
     public void setImsRegistrationState(boolean registered) {
         try {
-            getITelephony().setImsRegistrationState(registered);
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                telephony.setImsRegistrationState(registered);
         } catch (RemoteException e) {
         }
     }
@@ -3168,7 +3310,9 @@
      */
     public int getPreferredNetworkType() {
         try {
-            return getITelephony().getPreferredNetworkType();
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.getPreferredNetworkType();
         } catch (RemoteException ex) {
             Rlog.e(TAG, "getPreferredNetworkType RemoteException", ex);
         } catch (NullPointerException ex) {
@@ -3191,7 +3335,9 @@
      */
     public boolean setPreferredNetworkType(int networkType) {
         try {
-            return getITelephony().setPreferredNetworkType(networkType);
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.setPreferredNetworkType(networkType);
         } catch (RemoteException ex) {
             Rlog.e(TAG, "setPreferredNetworkType RemoteException", ex);
         } catch (NullPointerException ex) {
@@ -3223,7 +3369,9 @@
      */
     public int getTetherApnRequired() {
         try {
-            return getITelephony().getTetherApnRequired();
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.getTetherApnRequired();
         } catch (RemoteException ex) {
             Rlog.e(TAG, "hasMatchedTetherApnSetting RemoteException", ex);
         } catch (NullPointerException ex) {
@@ -3256,8 +3404,9 @@
      */
     public boolean hasCarrierPrivileges() {
         try {
-            return getITelephony().getCarrierPrivilegeStatus() ==
-                CARRIER_PRIVILEGE_STATUS_HAS_ACCESS;
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.getCarrierPrivilegeStatus() == CARRIER_PRIVILEGE_STATUS_HAS_ACCESS;
         } catch (RemoteException ex) {
             Rlog.e(TAG, "hasCarrierPrivileges RemoteException", ex);
         } catch (NullPointerException ex) {
@@ -3282,7 +3431,9 @@
      */
     public boolean setOperatorBrandOverride(String brand) {
         try {
-            return getITelephony().setOperatorBrandOverride(brand);
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.setOperatorBrandOverride(brand);
         } catch (RemoteException ex) {
             Rlog.e(TAG, "setOperatorBrandOverride RemoteException", ex);
         } catch (NullPointerException ex) {
@@ -3314,8 +3465,10 @@
             List<String> gsmNonRoamingList, List<String> cdmaRoamingList,
             List<String> cdmaNonRoamingList) {
         try {
-            return getITelephony().setRoamingOverride(gsmRoamingList, gsmNonRoamingList,
-                    cdmaRoamingList, cdmaNonRoamingList);
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.setRoamingOverride(gsmRoamingList, gsmNonRoamingList,
+                        cdmaRoamingList, cdmaNonRoamingList);
         } catch (RemoteException ex) {
             Rlog.e(TAG, "setRoamingOverride RemoteException", ex);
         } catch (NullPointerException ex) {
@@ -3338,7 +3491,10 @@
     @SystemApi
     public String getCdmaMdn(int subId) {
         try {
-            return getITelephony().getCdmaMdn(subId);
+            ITelephony telephony = getITelephony();
+            if (telephony == null)
+                return null;
+            return telephony.getCdmaMdn(subId);
         } catch (RemoteException ex) {
             return null;
         } catch (NullPointerException ex) {
@@ -3356,7 +3512,10 @@
     @SystemApi
     public String getCdmaMin(int subId) {
         try {
-            return getITelephony().getCdmaMin(subId);
+            ITelephony telephony = getITelephony();
+            if (telephony == null)
+                return null;
+            return telephony.getCdmaMin(subId);
         } catch (RemoteException ex) {
             return null;
         } catch (NullPointerException ex) {
@@ -3368,7 +3527,9 @@
     @SystemApi
     public int checkCarrierPrivilegesForPackage(String pkgname) {
         try {
-            return getITelephony().checkCarrierPrivilegesForPackage(pkgname);
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.checkCarrierPrivilegesForPackage(pkgname);
         } catch (RemoteException ex) {
             Rlog.e(TAG, "checkCarrierPrivilegesForPackage RemoteException", ex);
         } catch (NullPointerException ex) {
@@ -3381,7 +3542,9 @@
     @SystemApi
     public List<String> getCarrierPackageNamesForIntent(Intent intent) {
         try {
-            return getITelephony().getCarrierPackageNamesForIntent(intent);
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.getCarrierPackageNamesForIntent(intent);
         } catch (RemoteException ex) {
             Rlog.e(TAG, "getCarrierPackageNamesForIntent RemoteException", ex);
         } catch (NullPointerException ex) {
@@ -3394,7 +3557,9 @@
     @SystemApi
     public void dial(String number) {
         try {
-            getITelephony().dial(number);
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                telephony.dial(number);
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelephony#dial", e);
         }
@@ -3404,7 +3569,9 @@
     @SystemApi
     public void call(String callingPackage, String number) {
         try {
-            getITelephony().call(callingPackage, number);
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                telephony.call(callingPackage, number);
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelephony#call", e);
         }
@@ -3414,7 +3581,9 @@
     @SystemApi
     public boolean endCall() {
         try {
-            return getITelephony().endCall();
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.endCall();
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelephony#endCall", e);
         }
@@ -3425,7 +3594,9 @@
     @SystemApi
     public void answerRingingCall() {
         try {
-            getITelephony().answerRingingCall();
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                telephony.answerRingingCall();
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelephony#answerRingingCall", e);
         }
@@ -3445,7 +3616,9 @@
     @SystemApi
     public boolean isOffhook() {
         try {
-            return getITelephony().isOffhook();
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.isOffhook();
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelephony#isOffhook", e);
         }
@@ -3456,7 +3629,9 @@
     @SystemApi
     public boolean isRinging() {
         try {
-            return getITelephony().isRinging();
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.isRinging();
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelephony#isRinging", e);
         }
@@ -3467,7 +3642,9 @@
     @SystemApi
     public boolean isIdle() {
         try {
-            return getITelephony().isIdle();
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.isIdle();
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelephony#isIdle", e);
         }
@@ -3478,7 +3655,9 @@
     @SystemApi
     public boolean isRadioOn() {
         try {
-            return getITelephony().isRadioOn();
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.isRadioOn();
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelephony#isRadioOn", e);
         }
@@ -3489,7 +3668,9 @@
     @SystemApi
     public boolean isSimPinEnabled() {
         try {
-            return getITelephony().isSimPinEnabled();
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.isSimPinEnabled();
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelephony#isSimPinEnabled", e);
         }
@@ -3500,7 +3681,9 @@
     @SystemApi
     public boolean supplyPin(String pin) {
         try {
-            return getITelephony().supplyPin(pin);
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.supplyPin(pin);
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelephony#supplyPin", e);
         }
@@ -3511,7 +3694,9 @@
     @SystemApi
     public boolean supplyPuk(String puk, String pin) {
         try {
-            return getITelephony().supplyPuk(puk, pin);
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.supplyPuk(puk, pin);
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelephony#supplyPuk", e);
         }
@@ -3522,7 +3707,9 @@
     @SystemApi
     public int[] supplyPinReportResult(String pin) {
         try {
-            return getITelephony().supplyPinReportResult(pin);
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.supplyPinReportResult(pin);
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelephony#supplyPinReportResult", e);
         }
@@ -3533,7 +3720,9 @@
     @SystemApi
     public int[] supplyPukReportResult(String puk, String pin) {
         try {
-            return getITelephony().supplyPukReportResult(puk, pin);
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.supplyPukReportResult(puk, pin);
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelephony#]", e);
         }
@@ -3544,7 +3733,9 @@
     @SystemApi
     public boolean handlePinMmi(String dialString) {
         try {
-            return getITelephony().handlePinMmi(dialString);
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.handlePinMmi(dialString);
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelephony#handlePinMmi", e);
         }
@@ -3555,7 +3746,9 @@
     @SystemApi
     public boolean handlePinMmiForSubscriber(int subId, String dialString) {
         try {
-            return getITelephony().handlePinMmiForSubscriber(subId, dialString);
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.handlePinMmiForSubscriber(subId, dialString);
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelephony#handlePinMmi", e);
         }
@@ -3566,7 +3759,9 @@
     @SystemApi
     public void toggleRadioOnOff() {
         try {
-            getITelephony().toggleRadioOnOff();
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                telephony.toggleRadioOnOff();
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelephony#toggleRadioOnOff", e);
         }
@@ -3576,7 +3771,9 @@
     @SystemApi
     public boolean setRadio(boolean turnOn) {
         try {
-            return getITelephony().setRadio(turnOn);
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.setRadio(turnOn);
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelephony#setRadio", e);
         }
@@ -3587,7 +3784,9 @@
     @SystemApi
     public boolean setRadioPower(boolean turnOn) {
         try {
-            return getITelephony().setRadioPower(turnOn);
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.setRadioPower(turnOn);
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelephony#setRadioPower", e);
         }
@@ -3598,7 +3797,9 @@
     @SystemApi
     public void updateServiceLocation() {
         try {
-            getITelephony().updateServiceLocation();
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                telephony.updateServiceLocation();
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelephony#updateServiceLocation", e);
         }
@@ -3608,7 +3809,9 @@
     @SystemApi
     public boolean enableDataConnectivity() {
         try {
-            return getITelephony().enableDataConnectivity();
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.enableDataConnectivity();
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelephony#enableDataConnectivity", e);
         }
@@ -3619,7 +3822,9 @@
     @SystemApi
     public boolean disableDataConnectivity() {
         try {
-            return getITelephony().disableDataConnectivity();
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.disableDataConnectivity();
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelephony#disableDataConnectivity", e);
         }
@@ -3630,7 +3835,9 @@
     @SystemApi
     public boolean isDataConnectivityPossible() {
         try {
-            return getITelephony().isDataConnectivityPossible();
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.isDataConnectivityPossible();
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelephony#isDataConnectivityPossible", e);
         }
@@ -3641,7 +3848,9 @@
     @SystemApi
     public boolean needsOtaServiceProvisioning() {
         try {
-            return getITelephony().needsOtaServiceProvisioning();
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.needsOtaServiceProvisioning();
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelephony#needsOtaServiceProvisioning", e);
         }
@@ -3659,7 +3868,9 @@
     public void setDataEnabled(int subId, boolean enable) {
         try {
             Log.d(TAG, "setDataEnabled: enabled=" + enable);
-            getITelephony().setDataEnabled(subId, enable);
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                telephony.setDataEnabled(subId, enable);
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelephony#setDataEnabled", e);
         }
@@ -3676,7 +3887,9 @@
     public boolean getDataEnabled(int subId) {
         boolean retVal = false;
         try {
-            retVal = getITelephony().getDataEnabled(subId);
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                retVal = telephony.getDataEnabled(subId);
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelephony#getDataEnabled", e);
         } catch (NullPointerException e) {
@@ -3697,7 +3910,9 @@
      */
     public int invokeOemRilRequestRaw(byte[] oemReq, byte[] oemResp) {
         try {
-            return getITelephony().invokeOemRilRequestRaw(oemReq, oemResp);
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.invokeOemRilRequestRaw(oemReq, oemResp);
         } catch (RemoteException ex) {
         } catch (NullPointerException ex) {
         }
@@ -3708,7 +3923,9 @@
     @SystemApi
     public void enableVideoCalling(boolean enable) {
         try {
-            getITelephony().enableVideoCalling(enable);
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                telephony.enableVideoCalling(enable);
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelephony#enableVideoCalling", e);
         }
@@ -3718,7 +3935,9 @@
     @SystemApi
     public boolean isVideoCallingEnabled() {
         try {
-            return getITelephony().isVideoCallingEnabled();
+            ITelephony telephony = getITelephony();
+            if (telephony != null)
+                return telephony.isVideoCallingEnabled();
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelephony#isVideoCallingEnabled", e);
         }
@@ -3754,12 +3973,32 @@
     }
 
     /**
-     * This function retrieves value for setting "name+subId", and if that is not found
-     * retrieves value for setting "name", and if that is not found uses def as default
+     * Whether the phone supports TTY mode.
      *
-     * @hide */
-    public static int getIntWithSubId(ContentResolver cr, String name, int subId, int def) {
-        return Settings.Global.getInt(cr, name + subId, Settings.Global.getInt(cr, name, def));
+     * @return {@code true} if the device supports TTY mode, and {@code false} otherwise.
+     */
+    public boolean isTtyModeSupported() {
+        try {
+            return getITelephony().isTtyModeSupported();
+        } catch (RemoteException e) {
+            Log.e(TAG, "Error calling ITelephony#isTtyModeSupported", e);
+        }
+        return false;
+    }
+
+    /**
+     * Whether the phone supports hearing aid compatibility.
+     *
+     * @return {@code true} if the device supports hearing aid compatibility, and {@code false}
+     * otherwise.
+     */
+    public boolean isHearingAidCompatibilitySupported() {
+        try {
+            return getITelephony().isHearingAidCompatibilitySupported();
+        } catch (RemoteException e) {
+            Log.e(TAG, "Error calling ITelephony#isHearingAidCompatibilitySupported", e);
+        }
+        return false;
     }
 
     /**
@@ -3806,7 +4045,10 @@
     */
    public boolean isImsRegistered() {
        try {
-           return getITelephony().isImsRegistered();
+           ITelephony telephony = getITelephony();
+           if (telephony == null)
+               return false;
+           return telephony.isImsRegistered();
        } catch (RemoteException ex) {
            return false;
        } catch (NullPointerException ex) {
diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl
index 3769dee..f9e15f3 100644
--- a/telephony/java/com/android/internal/telephony/ITelephony.aidl
+++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl
@@ -882,6 +882,20 @@
     boolean isWorldPhone();
 
     /**
+     * Whether the phone supports TTY mode.
+     *
+     * @return {@code true} if the device supports TTY mode.
+     */
+    boolean isTtyModeSupported();
+
+    /**
+     * Whether the phone supports hearing aid compatibility.
+     *
+     * @return {@code true} if the device supports hearing aid compatibility.
+     */
+    boolean isHearingAidCompatibilitySupported();
+
+    /**
      * Get IMS Registration Status
      */
     boolean isImsRegistered();
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/CirclePropActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/CirclePropActivity.java
index afd6a8d..5bc8934 100644
--- a/tests/HwAccelerationTest/src/com/android/test/hwui/CirclePropActivity.java
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/CirclePropActivity.java
@@ -24,7 +24,7 @@
 import android.graphics.Paint.Style;
 import android.os.Bundle;
 import android.os.Trace;
-import android.view.HardwareCanvas;
+import android.view.DisplayListCanvas;
 import android.view.RenderNodeAnimator;
 import android.view.View;
 import android.widget.LinearLayout;
@@ -88,8 +88,8 @@
             super.onDraw(canvas);
 
             if (canvas.isHardwareAccelerated()) {
-                HardwareCanvas hwcanvas = (HardwareCanvas) canvas;
-                hwcanvas.drawCircle(mX, mY, mRadius, mPaint);
+                DisplayListCanvas displayListCanvas = (DisplayListCanvas) canvas;
+                displayListCanvas.drawCircle(mX, mY, mRadius, mPaint);
             }
         }
 
diff --git a/tests/JobSchedulerTestApp/src/com/android/demo/jobSchedulerApp/MainActivity.java b/tests/JobSchedulerTestApp/src/com/android/demo/jobSchedulerApp/MainActivity.java
index b9a2a7e..dfbbd7e 100644
--- a/tests/JobSchedulerTestApp/src/com/android/demo/jobSchedulerApp/MainActivity.java
+++ b/tests/JobSchedulerTestApp/src/com/android/demo/jobSchedulerApp/MainActivity.java
@@ -51,9 +51,9 @@
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         Resources res = getResources();
-        defaultColor = res.getColor(R.color.none_received);
-        startJobColor = res.getColor(R.color.start_received);
-        stopJobColor = res.getColor(R.color.stop_received);
+        defaultColor = getColor(R.color.none_received);
+        startJobColor = getColor(R.color.start_received);
+        stopJobColor = getColor(R.color.stop_received);
 
         // Set up UI.
         mShowStartView = (TextView) findViewById(R.id.onstart_textview);
diff --git a/tests/VoiceInteraction/res/layout/voice_interaction_session.xml b/tests/VoiceInteraction/res/layout/voice_interaction_session.xml
index 10571765..d44afb0 100644
--- a/tests/VoiceInteraction/res/layout/voice_interaction_session.xml
+++ b/tests/VoiceInteraction/res/layout/voice_interaction_session.xml
@@ -26,7 +26,7 @@
         android:layout_height="match_parent"
         android:fitsSystemWindows="true">
 
-        <FrameLayout android:id="@+id/top_content"
+        <LinearLayout android:id="@+id/top_content"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_gravity="top"
@@ -34,15 +34,16 @@
             android:background="#ffffffff"
             android:elevation="8dp"
             >
-
             <Button android:id="@+id/start"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_gravity="top|right"
                 android:text="@string/start"
                 />
-
-        </FrameLayout>
+            <ImageView android:id="@+id/screenshot"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"/>
+        </LinearLayout>
 
         <LinearLayout android:id="@+id/bottom_content"
             android:layout_width="match_parent"
diff --git a/tests/VoiceInteraction/src/com/android/test/voiceinteraction/AssistVisualizer.java b/tests/VoiceInteraction/src/com/android/test/voiceinteraction/AssistVisualizer.java
index bae19a6..2ad23ed5 100644
--- a/tests/VoiceInteraction/src/com/android/test/voiceinteraction/AssistVisualizer.java
+++ b/tests/VoiceInteraction/src/com/android/test/voiceinteraction/AssistVisualizer.java
@@ -55,6 +55,7 @@
                 buildTextRects(window, 0, 0);
             }
         }
+        invalidate();
     }
 
     public void clearAssistData() {
diff --git a/tests/VoiceInteraction/src/com/android/test/voiceinteraction/MainInteractionService.java b/tests/VoiceInteraction/src/com/android/test/voiceinteraction/MainInteractionService.java
index 722b0de..15196b4 100644
--- a/tests/VoiceInteraction/src/com/android/test/voiceinteraction/MainInteractionService.java
+++ b/tests/VoiceInteraction/src/com/android/test/voiceinteraction/MainInteractionService.java
@@ -79,7 +79,7 @@
             Bundle args = new Bundle();
             args.putParcelable("intent", new Intent(this, TestInteractionActivity.class));
             args.putBundle("assist", intent.getExtras());
-            startSession(args, START_WITH_ASSIST);
+            startSession(args, START_WITH_ASSIST|START_WITH_SCREENSHOT);
         } else {
             Log.w(TAG, "Not starting -- not current voice interaction service");
         }
diff --git a/tests/VoiceInteraction/src/com/android/test/voiceinteraction/MainInteractionSession.java b/tests/VoiceInteraction/src/com/android/test/voiceinteraction/MainInteractionSession.java
index ad339be..bc18ca9 100644
--- a/tests/VoiceInteraction/src/com/android/test/voiceinteraction/MainInteractionSession.java
+++ b/tests/VoiceInteraction/src/com/android/test/voiceinteraction/MainInteractionSession.java
@@ -21,11 +21,13 @@
 import android.app.VoiceInteractor;
 import android.content.Context;
 import android.content.Intent;
+import android.graphics.Bitmap;
 import android.os.Bundle;
 import android.service.voice.VoiceInteractionSession;
 import android.util.Log;
 import android.view.View;
 import android.widget.Button;
+import android.widget.ImageView;
 import android.widget.TextView;
 
 public class MainInteractionSession extends VoiceInteractionSession
@@ -39,6 +41,7 @@
     View mBottomContent;
     TextView mText;
     Button mStartButton;
+    ImageView mScreenshot;
     Button mConfirmButton;
     Button mCompleteButton;
     Button mAbortButton;
@@ -76,6 +79,7 @@
         if (mAssistVisualizer != null) {
             mAssistVisualizer.clearAssistData();
         }
+        onHandleScreenshot(null);
         updateState();
     }
 
@@ -101,6 +105,7 @@
         mText = (TextView)mContentView.findViewById(R.id.text);
         mStartButton = (Button)mContentView.findViewById(R.id.start);
         mStartButton.setOnClickListener(this);
+        mScreenshot = (ImageView)mContentView.findViewById(R.id.screenshot);
         mConfirmButton = (Button)mContentView.findViewById(R.id.confirm);
         mConfirmButton.setOnClickListener(this);
         mCompleteButton = (Button)mContentView.findViewById(R.id.complete);
@@ -119,6 +124,18 @@
         }
     }
 
+    @Override
+    public void onHandleScreenshot(Bitmap screenshot) {
+        if (screenshot != null) {
+            mScreenshot.setImageBitmap(screenshot);
+            mScreenshot.setAdjustViewBounds(true);
+            mScreenshot.setMaxWidth(screenshot.getWidth()/3);
+            mScreenshot.setMaxHeight(screenshot.getHeight()/3);
+        } else {
+            mScreenshot.setImageDrawable(null);
+        }
+    }
+
     void parseAssistData(Bundle assistBundle) {
         if (assistBundle != null) {
             Bundle assistContext = assistBundle.getBundle(Intent.EXTRA_ASSIST_CONTEXT);
diff --git a/tools/aapt/XMLNode.cpp b/tools/aapt/XMLNode.cpp
index b38b2ed..d2cd2d6 100644
--- a/tools/aapt/XMLNode.cpp
+++ b/tools/aapt/XMLNode.cpp
@@ -466,7 +466,7 @@
     block->restart();
 
     Vector<namespace_entry> namespaces;
-    
+
     ResXMLTree::event_code_t code;
     int depth = 0;
     while ((code=block->next()) != ResXMLTree::END_DOCUMENT && code != ResXMLTree::BAD_DOCUMENT) {
@@ -520,7 +520,12 @@
                 printf("\n");
             }
         } else if (code == ResXMLTree::END_TAG) {
-            depth--;
+            // Invalid tag nesting can be misused to break the parsing
+            // code below. Break if detected.
+            if (--depth < 0) {
+                printf("***BAD DEPTH in XMLBlock: %d\n", depth);
+                break;
+            }
         } else if (code == ResXMLTree::START_NAMESPACE) {
             namespace_entry ns;
             size_t len;
@@ -536,7 +541,10 @@
                     ns.uri.string());
             depth++;
         } else if (code == ResXMLTree::END_NAMESPACE) {
-            depth--;
+            if (--depth < 0) {
+                printf("***BAD DEPTH in XMLBlock: %d\n", depth);
+                break;
+            }
             const namespace_entry& ns = namespaces.top();
             size_t len;
             const char16_t* prefix16 = block->getNamespacePrefix(&len);
@@ -714,7 +722,7 @@
 {
     return mFilename;
 }
-    
+
 const Vector<XMLNode::attribute_entry>&
     XMLNode::getAttributes() const
 {
@@ -730,7 +738,7 @@
             return &ae;
         }
     }
-    
+
     return NULL;
 }
 
@@ -774,14 +782,14 @@
             && mElementName == tagName) {
         return this;
     }
-    
+
     for (size_t i=0; i<mChildren.size(); i++) {
         sp<XMLNode> found = mChildren.itemAt(i)->searchElement(tagNamespace, tagName);
         if (found != NULL) {
             return found;
         }
     }
-    
+
     return NULL;
 }
 
@@ -795,7 +803,7 @@
             return child;
         }
     }
-    
+
     return NULL;
 }
 
@@ -977,7 +985,7 @@
                               ResourceTable* table)
 {
     bool hasErrors = false;
-    
+
     if (getType() == TYPE_ELEMENT) {
         const size_t N = mAttributes.size();
         String16 defPackage(assets->getPackage());
@@ -1013,7 +1021,7 @@
                                     const ResourceTable* table)
 {
     bool hasErrors = false;
-    
+
     if (getType() == TYPE_ELEMENT) {
         String16 attr("attr");
         const char* errorMsg;
@@ -1093,7 +1101,7 @@
 {
     StringPool strings(mUTF8);
     Vector<uint32_t> resids;
-    
+
     // First collect just the strings for attribute names that have a
     // resource ID assigned to them.  This ensures that the resource ID
     // array is compact, and makes it easier to deal with attribute names
@@ -1141,7 +1149,7 @@
                 dest->getSize(), (stringPool->getSize()*100)/dest->getSize(),
                 dest->getPath().string());
     }
-        
+
     return NO_ERROR;
 }
 
@@ -1217,7 +1225,7 @@
         printf("Start Namespace: %s %s\n", prefix, uri);
     }
     ParseState* st = (ParseState*)userData;
-    sp<XMLNode> node = XMLNode::newNamespace(st->filename, 
+    sp<XMLNode> node = XMLNode::newNamespace(st->filename,
             String16(prefix != NULL ? prefix : ""), String16(uri));
     node->setStartLineNumber(XML_GetCurrentLineNumber(st->parser));
     if (st->stack.size() > 0) {
@@ -1338,7 +1346,7 @@
         bool stripComments, bool stripRawValues) const
 {
     collect_attr_strings(dest, outResIds, true);
-    
+
     int i;
     if (RESOURCES_TOOLS_NAMESPACE != mNamespaceUri) {
         if (mNamespacePrefix.size() > 0) {
diff --git a/tools/layoutlib/bridge/src/android/graphics/BitmapShader_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/BitmapShader_Delegate.java
index 610c867..e9b5d6e 100644
--- a/tools/layoutlib/bridge/src/android/graphics/BitmapShader_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/BitmapShader_Delegate.java
@@ -23,6 +23,8 @@
 
 import android.graphics.Shader.TileMode;
 
+import java.awt.image.ColorModel;
+
 /**
  * Delegate implementing the native methods of android.graphics.BitmapShader
  *
@@ -124,6 +126,11 @@
                 localMatrix = new java.awt.geom.AffineTransform();
             }
 
+            if (!colorModel.isCompatibleRaster(mImage.getRaster())) {
+                // Fallback to the default ARGB color model
+                colorModel = ColorModel.getRGBdefault();
+            }
+
             return new BitmapShaderContext(canvasMatrix, localMatrix, colorModel);
         }
 
@@ -153,8 +160,9 @@
 
             @Override
             public java.awt.image.Raster getRaster(int x, int y, int w, int h) {
-                java.awt.image.BufferedImage image = new java.awt.image.BufferedImage(w, h,
-                        java.awt.image.BufferedImage.TYPE_INT_ARGB);
+                java.awt.image.BufferedImage image = new java.awt.image.BufferedImage(
+                    mColorModel, mColorModel.createCompatibleWritableRaster(w, h),
+                    mColorModel.isAlphaPremultiplied(), null);
 
                 int[] data = new int[w*h];
 
diff --git a/tools/layoutlib/bridge/src/android/graphics/LinearGradient_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/LinearGradient_Delegate.java
index 55c4b98..703719c 100644
--- a/tools/layoutlib/bridge/src/android/graphics/LinearGradient_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/LinearGradient_Delegate.java
@@ -172,8 +172,9 @@
 
             @Override
             public java.awt.image.Raster getRaster(int x, int y, int w, int h) {
-                java.awt.image.BufferedImage image = new java.awt.image.BufferedImage(w, h,
-                        java.awt.image.BufferedImage.TYPE_INT_ARGB);
+                java.awt.image.BufferedImage image = new java.awt.image.BufferedImage(
+                    mColorModel, mColorModel.createCompatibleWritableRaster(w, h),
+                    mColorModel.isAlphaPremultiplied(), null);
 
                 int[] data = new int[w*h];
 
diff --git a/tools/layoutlib/bridge/src/android/graphics/RadialGradient_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/RadialGradient_Delegate.java
index eb29835..04e423b 100644
--- a/tools/layoutlib/bridge/src/android/graphics/RadialGradient_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/RadialGradient_Delegate.java
@@ -160,8 +160,9 @@
 
             @Override
             public java.awt.image.Raster getRaster(int x, int y, int w, int h) {
-                java.awt.image.BufferedImage image = new java.awt.image.BufferedImage(w, h,
-                        java.awt.image.BufferedImage.TYPE_INT_ARGB);
+                java.awt.image.BufferedImage image = new java.awt.image.BufferedImage(
+                    mColorModel, mColorModel.createCompatibleWritableRaster(w, h),
+                    mColorModel.isAlphaPremultiplied(), null);
 
                 int[] data = new int[w*h];
 
diff --git a/tools/layoutlib/bridge/src/android/graphics/SweepGradient_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/SweepGradient_Delegate.java
index 95a57a9..544ba98 100644
--- a/tools/layoutlib/bridge/src/android/graphics/SweepGradient_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/SweepGradient_Delegate.java
@@ -152,8 +152,9 @@
 
             @Override
             public java.awt.image.Raster getRaster(int x, int y, int w, int h) {
-                java.awt.image.BufferedImage image = new java.awt.image.BufferedImage(w, h,
-                        java.awt.image.BufferedImage.TYPE_INT_ARGB);
+                java.awt.image.BufferedImage image = new java.awt.image.BufferedImage(
+                    mColorModel, mColorModel.createCompatibleWritableRaster(w, h),
+                    mColorModel.isAlphaPremultiplied(), null);
 
                 int[] data = new int[w*h];
 
diff --git a/tools/layoutlib/bridge/src/android/view/BridgeInflater.java b/tools/layoutlib/bridge/src/android/view/BridgeInflater.java
index 8192b5f..4acbd1c 100644
--- a/tools/layoutlib/bridge/src/android/view/BridgeInflater.java
+++ b/tools/layoutlib/bridge/src/android/view/BridgeInflater.java
@@ -39,6 +39,8 @@
 
 import java.io.File;
 
+import static com.android.layoutlib.bridge.android.BridgeContext.getBaseContext;
+
 /**
  * Custom implementation of {@link LayoutInflater} to handle custom views.
  */
@@ -60,7 +62,12 @@
 
     protected BridgeInflater(LayoutInflater original, Context newContext) {
         super(original, newContext);
-        mProjectCallback = null;
+        newContext = getBaseContext(newContext);
+        if (newContext instanceof BridgeContext) {
+            mProjectCallback = ((BridgeContext) newContext).getProjectCallback();
+        } else {
+            mProjectCallback = null;
+        }
     }
 
     /**
@@ -154,9 +161,7 @@
     @Override
     public View inflate(int resource, ViewGroup root) {
         Context context = getContext();
-        while (context instanceof ContextThemeWrapper) {
-            context = ((ContextThemeWrapper) context).getBaseContext();
-        }
+        context = getBaseContext(context);
         if (context instanceof BridgeContext) {
             BridgeContext bridgeContext = (BridgeContext)context;
 
@@ -219,9 +224,7 @@
 
     private void setupViewInContext(View view, AttributeSet attrs) {
         Context context = getContext();
-        while (context instanceof ContextThemeWrapper) {
-            context = ((ContextThemeWrapper) context).getBaseContext();
-        }
+        context = getBaseContext(context);
         if (context instanceof BridgeContext) {
             BridgeContext bc = (BridgeContext) context;
             // get the view key
diff --git a/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java b/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java
index 32305a0..818940d 100644
--- a/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java
+++ b/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java
@@ -17,6 +17,7 @@
 package android.view;
 
 import android.graphics.Point;
+import com.android.internal.app.IAssistScreenshotReceiver;
 import com.android.internal.view.IInputContext;
 import com.android.internal.view.IInputMethodClient;
 
@@ -275,8 +276,15 @@
     }
 
     @Override
-    public Bitmap screenshotApplications(IBinder arg0, int displayId, int arg1,
-            int arg2, boolean arg3) throws RemoteException {
+    public boolean requestAssistScreenshot(IAssistScreenshotReceiver receiver)
+            throws RemoteException {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    @Override
+    public Bitmap screenshotApplications(IBinder appToken, int displayId, int maxWidth,
+            int maxHeight) throws RemoteException {
         // TODO Auto-generated method stub
         return null;
     }
diff --git a/tools/layoutlib/bridge/src/android/view/MenuInflater_Delegate.java b/tools/layoutlib/bridge/src/android/view/MenuInflater_Delegate.java
index dafc96b..08a97d6 100644
--- a/tools/layoutlib/bridge/src/android/view/MenuInflater_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/view/MenuInflater_Delegate.java
@@ -48,9 +48,7 @@
             AttributeSet attrs) {
         if (menuItem instanceof BridgeMenuItemImpl) {
             Context context = thisInflater.getContext();
-            while (context instanceof ContextThemeWrapper) {
-                context = ((ContextThemeWrapper) context).getBaseContext();
-            }
+            context = BridgeContext.getBaseContext(context);
             if (context instanceof BridgeContext) {
                 Object viewKey = BridgeInflater.getViewKeyFromParser(
                         attrs, ((BridgeContext) context), null, false);
diff --git a/tools/layoutlib/bridge/src/android/view/ViewGroup_Delegate.java b/tools/layoutlib/bridge/src/android/view/ViewGroup_Delegate.java
index 3915046..82ae1df 100644
--- a/tools/layoutlib/bridge/src/android/view/ViewGroup_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/view/ViewGroup_Delegate.java
@@ -122,9 +122,7 @@
     @NonNull
     private static DisplayMetrics getMetrics(View view) {
         Context context = view.getContext();
-        while (context instanceof ContextThemeWrapper) {
-            context = ((ContextThemeWrapper) context).getBaseContext();
-        }
+        context = BridgeContext.getBaseContext(context);
         if (context instanceof BridgeContext) {
             return ((BridgeContext) context).getMetrics();
         }
diff --git a/tools/layoutlib/bridge/src/com/android/internal/view/menu/BridgeMenuItemImpl.java b/tools/layoutlib/bridge/src/com/android/internal/view/menu/BridgeMenuItemImpl.java
index 8d1d0c1..bb95c4e 100644
--- a/tools/layoutlib/bridge/src/com/android/internal/view/menu/BridgeMenuItemImpl.java
+++ b/tools/layoutlib/bridge/src/com/android/internal/view/menu/BridgeMenuItemImpl.java
@@ -19,7 +19,6 @@
 import com.android.layoutlib.bridge.android.BridgeContext;
 
 import android.content.Context;
-import android.view.ContextThemeWrapper;
 import android.view.View;
 
 /**
@@ -42,9 +41,7 @@
             CharSequence title, int showAsAction) {
         super(menu, group, id, categoryOrder, ordering, title, showAsAction);
         Context context = menu.getContext();
-        while (context instanceof ContextThemeWrapper) {
-            context = ((ContextThemeWrapper) context).getBaseContext();
-        }
+        context = BridgeContext.getBaseContext(context);
         if (context instanceof BridgeContext) {
             mContext = ((BridgeContext) context);
         }
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 179a8e7..e1c58fd 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
@@ -40,6 +40,7 @@
 import android.content.ComponentName;
 import android.content.ContentResolver;
 import android.content.Context;
+import android.content.ContextWrapper;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.IntentSender;
@@ -963,6 +964,13 @@
         return defValue;
     }
 
+    public static Context getBaseContext(Context context) {
+        while (context instanceof ContextWrapper) {
+            context = ((ContextWrapper) context).getBaseContext();
+        }
+        return context;
+    }
+
     //------------ NOT OVERRIDEN --------------------
 
     @Override
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/AppCompatActionBar.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/AppCompatActionBar.java
index e5023b8..ee57067 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/AppCompatActionBar.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/AppCompatActionBar.java
@@ -21,11 +21,15 @@
 import com.android.ide.common.rendering.api.RenderResources;
 import com.android.ide.common.rendering.api.ResourceValue;
 import com.android.ide.common.rendering.api.SessionParams;
+import com.android.ide.common.rendering.api.StyleResourceValue;
 import com.android.layoutlib.bridge.android.BridgeContext;
 import com.android.layoutlib.bridge.impl.ResourceHelper;
 import com.android.resources.ResourceType;
 
+import android.content.Context;
 import android.graphics.drawable.Drawable;
+import android.view.ContextThemeWrapper;
+import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.FrameLayout;
@@ -55,7 +59,7 @@
         View contentView = getDecorContent().findViewById(contentRootId);
         if (contentView != null) {
             assert contentView instanceof FrameLayout;
-            setContentRoot(((FrameLayout) contentView));
+            setContentRoot((FrameLayout) contentView);
         } else {
             // Something went wrong. Create a new FrameLayout in the enclosing layout.
             FrameLayout contentRoot = new FrameLayout(context);
@@ -85,6 +89,27 @@
     }
 
     @Override
+    protected LayoutInflater getInflater(BridgeContext context) {
+        // Other than the resource resolution part, the code has been taken from the support
+        // library. see code from line 269 onwards in
+        // https://android.googlesource.com/platform/frameworks/support/+/android-5.1.0_r1/v7/appcompat/src/android/support/v7/app/ActionBarActivityDelegateBase.java
+        Context themedContext = context;
+        RenderResources resources = context.getRenderResources();
+        ResourceValue actionBarTheme = resources.findItemInTheme("actionBarTheme", false);
+        if (actionBarTheme != null) {
+            // resolve it, if needed.
+            actionBarTheme = resources.resolveResValue(actionBarTheme);
+        }
+        if (actionBarTheme instanceof StyleResourceValue) {
+            int styleId = context.getDynamicIdByStyle(((StyleResourceValue) actionBarTheme));
+            if (styleId != 0) {
+                themedContext = new ContextThemeWrapper(context, styleId);
+            }
+        }
+        return LayoutInflater.from(themedContext);
+    }
+
+    @Override
     protected void setTitle(CharSequence title) {
         if (title != null && mWindowDecorActionBar != null) {
             Method setTitle = getMethod(mWindowActionBarClass, "setTitle", CharSequence.class);
@@ -104,8 +129,8 @@
     protected void setIcon(String icon) {
         // Do this only if the action bar doesn't already have an icon.
         if (icon != null && !icon.isEmpty() && mWindowDecorActionBar != null) {
-            if (((Boolean) invoke(getMethod(mWindowActionBarClass, "hasIcon"), mWindowDecorActionBar)
-            )) {
+            if (invoke(getMethod(mWindowActionBarClass, "hasIcon"), mWindowDecorActionBar)
+                    == Boolean.TRUE) {
                 Drawable iconDrawable = getDrawable(icon, false);
                 if (iconDrawable != null) {
                     Method setIcon = getMethod(mWindowActionBarClass, "setIcon", Drawable.class);
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/BridgeActionBar.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/BridgeActionBar.java
index b29d25f..2a83ea1 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/BridgeActionBar.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/BridgeActionBar.java
@@ -44,6 +44,7 @@
     private final View mDecorContent;
     private final ActionBarCallback mCallback;
 
+    @SuppressWarnings("NullableProblems")  // Should be initialized by subclasses.
     @NonNull private FrameLayout mContentRoot;
 
     public BridgeActionBar(@NonNull BridgeContext context, @NonNull SessionParams params,
@@ -80,7 +81,7 @@
         }
 
         // Inflate action bar layout.
-        mDecorContent = LayoutInflater.from(context).inflate(layoutId, mEnclosingLayout, true);
+        mDecorContent = getInflater(context).inflate(layoutId, mEnclosingLayout, true);
 
     }
 
@@ -91,7 +92,11 @@
      */
     protected abstract ResourceValue getLayoutResource(BridgeContext context);
 
-    protected void setContentRoot(FrameLayout contentRoot) {
+    protected LayoutInflater getInflater(BridgeContext context) {
+        return LayoutInflater.from(context);
+    }
+
+    protected void setContentRoot(@NonNull FrameLayout contentRoot) {
         mContentRoot = contentRoot;
     }
 
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 c9aa400..7c11284d 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
@@ -1128,8 +1128,7 @@
             }
         } else {
             // action bar overrides title bar so only look for this one if action bar is hidden
-            boolean windowNoTitle = getBooleanThemeValue(resources,
-                    "windowNoTitle", false, !isThemeAppCompat(resources));
+            boolean windowNoTitle = getBooleanThemeValue(resources, "windowNoTitle", false, true);
 
             if (!windowNoTitle) {