am 864682f9: Merge "email: prevent stock email app to unset firstSnippet on mark/unmark as read"

* commit '864682f9717b460b88c6b7120c1651bbbe27fe21':
  email: prevent stock email app to unset firstSnippet on mark/unmark as read
diff --git a/Android.mk b/Android.mk
index ef3693a..d00c9c1 100644
--- a/Android.mk
+++ b/Android.mk
@@ -19,7 +19,7 @@
 
 #Include res dir from libraries
 appcompat_dir := ../../../prebuilts/sdk/current/support/v7/appcompat/res
-photo_dir := ../../../frameworks/opt/photoviewer/res ../../../frameworks/opt/photoviewer/activity/res
+photo_dir := ../../../frameworks/opt/photoviewer/res ../../../frameworks/opt/photoviewer/appcompat/res
 gridlayout_dir := ../../../prebuilts/sdk/current/support/v7/gridlayout/res
 bitmap_dir := ../../../frameworks/opt/bitmap/res
 datetimepicker_dir := ../../../frameworks/opt/datetimepicker/res
@@ -33,7 +33,7 @@
 LOCAL_PACKAGE_NAME := UnifiedEmail
 
 LOCAL_STATIC_JAVA_LIBRARIES := libchips
-LOCAL_STATIC_JAVA_LIBRARIES += libphotoviewer
+LOCAL_STATIC_JAVA_LIBRARIES += libphotoviewer_appcompat
 LOCAL_STATIC_JAVA_LIBRARIES += guava
 LOCAL_STATIC_JAVA_LIBRARIES += android-common
 LOCAL_STATIC_JAVA_LIBRARIES += android-support-v4
@@ -53,6 +53,9 @@
 LOCAL_AAPT_FLAGS += --extra-packages com.android.ex.chips:com.android.ex.photo:android.support.v7.appcompat:android.support.v7.gridlayout:com.android.bitmap:com.android.datetimepicker
 
 LOCAL_PROGUARD_FLAG_FILES := proguard.flags
+ifeq (eng,$(TARGET_BUILD_VARIANT))
+  LOCAL_PROGUARD_FLAG_FILES += proguard-test.flags
+endif
 
 LOCAL_EMMA_COVERAGE_FILTER := +com.android.mail.*, +com.android.emailcommon.*, +com.google.android.mail.*
 
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index a8dd8d7..2a72ac1 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -28,7 +28,7 @@
     <uses-permission android:name="android.permission.NFC" />
 
     <!-- This needs to be present when we are doing unbundled releases. -->
-    <uses-sdk android:targetSdkVersion="19" android:minSdkVersion="14" />
+    <uses-sdk android:targetSdkVersion="21" android:minSdkVersion="14" />
 
     <application
         android:icon="@mipmap/ic_launcher_mail"
@@ -43,7 +43,8 @@
             android:label="@string/app_name"
             android:name=".ui.MailActivity"
             android:launchMode="singleTop"
-            android:theme="@style/MailActivityTheme" >
+            android:theme="@style/MailActivityTheme"
+            android:windowSoftInputMode="stateAlwaysHidden|adjustPan">
             <intent-filter >
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="android.intent.category.LAUNCHER" />
@@ -58,7 +59,6 @@
                 <action android:name="android.intent.action.SEARCH" />
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
-            <meta-data android:name="android.app.searchable" android:resource="@xml/searchable" />
         </activity>
         <activity android:name=".compose.ComposeActivity"
             android:theme="@style/ComposeTheme">
@@ -108,7 +108,7 @@
         <activity
             android:name=".photo.MailPhotoViewActivity"
             android:label="@string/app_name"
-            android:theme="@style/PhotoViewTheme" >
+            android:theme="@style/MailPhotoViewTheme" >
         </activity>
         <activity
                 android:name=".browse.EmlViewerActivity"
@@ -159,13 +159,6 @@
             <grant-uri-permission android:pathPattern=".*" />
         </provider>
 
-        <!-- The android:name is the name of the Provider class which is stored in
-          UnifiedEmail, and has package name com.android.mail.providers and the class is
-          called SuggestionsProvider. The authority name is specified in the MailAppProvider
-          which is specific to the two apps separately. -->
-        <provider android:name="com.android.mail.providers.SuggestionsProvider"
-            android:authorities="com.android.mail.suggestionsprovider" />
-
         <service android:name=".compose.EmptyService"/>
 
         <!-- Widget -->
diff --git a/CleanSpec.mk b/CleanSpec.mk
index 5a74018..1ddfa6c 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -51,3 +51,4 @@
 $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/UnifiedEmail_intermediates)
 $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/UnifiedEmail_intermediates)
 $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/UnifiedEmail_intermediates)
+$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/UnifiedEmail_intermediates)
diff --git a/assets/script.js b/assets/script.js
index c792b02..f79648d 100644
--- a/assets/script.js
+++ b/assets/script.js
@@ -504,6 +504,11 @@
         return src;
     }
 
+    // preserve cid urls as is
+    if (src.substring(0, 4) == "cid:") {
+        return src;
+    }
+
     return null;
 };
 
@@ -557,7 +562,7 @@
 function blockImage(imageElement) {
     var src = imageElement.src;
     if (src.indexOf("http://") == 0 || src.indexOf("https://") == 0 ||
-            src.indexOf("content://") == 0) {
+            src.indexOf("content://") == 0 || src.indexOf("cid:") == 0) {
         imageElement.setAttribute(BLOCKED_SRC_ATTR, src);
         imageElement.src = "data:";
     }
@@ -729,6 +734,7 @@
         msg = block.firstChild;
     }
     parent.removeChild(block);
+    disablePostForms();
     measurePositions();
 }
 
@@ -748,9 +754,16 @@
     for (i = 0, len = messageIds.length; i < len; i++) {
         id = messageIds[i];
         msgContentDiv = document.querySelector("#" + id + " > .mail-message-content");
-        msgContentDiv.innerHTML = window.mail.getMessageBody(id);
-        processNewMessageBody(msgContentDiv);
+        // Check if we actually have a div before trying to replace this message body.
+        if (msgContentDiv) {
+            msgContentDiv.innerHTML = window.mail.getMessageBody(id);
+            processNewMessageBody(msgContentDiv);
+        } else {
+            // There's no message div, just skip it. We're in a really busted state.
+            console.log("Mail message content for msg " + id + " to replace not found.");
+        }
     }
+    disablePostForms();
     measurePositions();
 }
 
@@ -761,9 +774,31 @@
     var body = msg.children[0];  // toss the outer div, it was just to render innerHTML into
     document.body.insertBefore(body, document.getElementById("conversation-footer"));
     processNewMessageBody(body.querySelector(".mail-message-content"));
+    disablePostForms();
     measurePositions();
 }
 
+function disablePostForms() {
+    var forms = document.getElementsByTagName('FORM');
+    var i;
+    var j;
+    var elements;
+
+    for (i = 0; i < forms.length; ++i) {
+        if (forms[i].method.toUpperCase() === 'POST') {
+            forms[i].onsubmit = function() {
+                alert(MSG_FORMS_ARE_DISABLED);
+                return false;
+            }
+            elements = forms[i].elements;
+            for (j = 0; j < elements.length; ++j) {
+                if (elements[j].type != 'submit') {
+                    elements[j].disabled = true;
+                }
+            }
+        }
+    }
+}
 // END Java->JavaScript handlers
 
 // Do this first to ensure that the readiness signal comes through,
@@ -778,5 +813,5 @@
 if (!RUNNING_KITKAT_OR_LATER) {
     restoreScrollPosition();
 }
+disablePostForms();
 measurePositions();
-
diff --git a/proguard-test.flags b/proguard-test.flags
new file mode 100644
index 0000000..2eb8cfa
--- /dev/null
+++ b/proguard-test.flags
@@ -0,0 +1,38 @@
+# These flags are in addition to the one in proguard.flags, which is included by the build
+# directives in Android.mk.
+
+-keep class ** {
+  *** *ForTest(...);
+}
+
+-keep class com.android.emailcommon.internet.MimeBodyPart
+-keep class com.android.emailcommon.internet.MimeMessage {
+  <init>(...);
+  *** set*(...);
+  *** get*(...);
+}
+-keep class com.android.emailcommon.internet.MimeMultipart
+-keep class com.android.emailcommon.internet.MimeUtility {
+  public static java.lang.String foldAndEncode(java.lang.String);
+}
+-keep class com.android.emailcommon.mail.PackedString {
+  <init>(...);
+}
+-keep class com.android.emailcommon.mail.PackedString$Builder {
+  public <init>(...);
+  public void put(java.lang.String, java.lang.String);
+  public java.lang.String get(java.lang.String);
+}
+-keep class com.android.emailcommon.utility.ConversionUtilities
+
+-keep class com.android.email.LegacyConversions {
+  public static boolean updateMessageFields(...);
+}
+
+-keep class com.android.mail.utils.Utils {
+  public static android.text.Spanned insertStringWithStyle(...);
+}
+
+-keepclasseswithmembers class * {
+  *** findProviderForDomain(...);
+}
diff --git a/proguard.flags b/proguard.flags
index 7267eab..f88d37f 100644
--- a/proguard.flags
+++ b/proguard.flags
@@ -28,4 +28,3 @@
 -keepclasseswithmembers class * extends com.android.mail.ui.ConversationSpecialItemView {
   *** setAnimatedHeight(...);
 }
-
diff --git a/res/color/folder_item_text_color.xml b/res/color/folder_item_text_color.xml
deleted file mode 100644
index 7b97512..0000000
--- a/res/color/folder_item_text_color.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2013 Google Inc.
-     Licensed to 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.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android"
-          xmlns:app="http://schemas.android.com/apk/res-auto">
-    <item app:state_drag_mode="true" android:state_drag_can_accept="false"
-          android:color="@color/folder_disabled_drop_target_text_color" />
-    <item android:state_activated="true" android:color="@android:color/white" />
-    <item android:color="@color/folder_item_text_color_normal" />
-</selector>
diff --git a/res/drawable/folder_teaser_item_background.xml b/res/color/folder_unread_text_color.xml
similarity index 76%
rename from res/drawable/folder_teaser_item_background.xml
rename to res/color/folder_unread_text_color.xml
index 32701fc..a51f6ba 100644
--- a/res/drawable/folder_teaser_item_background.xml
+++ b/res/color/folder_unread_text_color.xml
@@ -15,10 +15,8 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
+
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <item android:state_pressed="true" android:drawable="@drawable/list_pressed_holo"/>
-    <item android:state_focused="true" android:drawable="@drawable/list_focused_holo"/>
-    <item android:drawable="@android:color/transparent"/>
-
-</selector>
\ No newline at end of file
+    <item android:state_activated="true" android:color="@color/text_color_black" />
+    <item android:color="@color/text_color_grey" />
+</selector>
diff --git a/res/drawable-hdpi-v19/btn_default_pressed_holo_light.9.png b/res/drawable-hdpi-v19/btn_default_pressed_holo_light.9.png
deleted file mode 100644
index bf09b6f..0000000
--- a/res/drawable-hdpi-v19/btn_default_pressed_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/btn_default_disabled_focused_holo_light.9.png b/res/drawable-hdpi/btn_default_disabled_focused_holo_light.9.png
deleted file mode 100644
index 735bcb8..0000000
--- a/res/drawable-hdpi/btn_default_disabled_focused_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/btn_default_disabled_holo_light.9.png b/res/drawable-hdpi/btn_default_disabled_holo_light.9.png
deleted file mode 100644
index b5a25f7..0000000
--- a/res/drawable-hdpi/btn_default_disabled_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/btn_default_focused_holo_light.9.png b/res/drawable-hdpi/btn_default_focused_holo_light.9.png
deleted file mode 100644
index 6555635..0000000
--- a/res/drawable-hdpi/btn_default_focused_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/btn_default_normal_holo_light.9.png b/res/drawable-hdpi/btn_default_normal_holo_light.9.png
deleted file mode 100644
index 3367a76..0000000
--- a/res/drawable-hdpi/btn_default_normal_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/btn_default_pressed_holo_light.9.png b/res/drawable-hdpi/btn_default_pressed_holo_light.9.png
deleted file mode 100644
index d9ead96..0000000
--- a/res/drawable-hdpi/btn_default_pressed_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/empty_folders.png b/res/drawable-hdpi/empty_folders.png
deleted file mode 100644
index 982a947..0000000
--- a/res/drawable-hdpi/empty_folders.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/empty_inbox.png b/res/drawable-hdpi/empty_inbox.png
deleted file mode 100644
index 98dacfc..0000000
--- a/res/drawable-hdpi/empty_inbox.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/empty_search.png b/res/drawable-hdpi/empty_search.png
deleted file mode 100644
index 976cb61..0000000
--- a/res/drawable-hdpi/empty_search.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/empty_spam.png b/res/drawable-hdpi/empty_spam.png
deleted file mode 100644
index 7c2198b..0000000
--- a/res/drawable-hdpi/empty_spam.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/empty_trash.png b/res/drawable-hdpi/empty_trash.png
deleted file mode 100644
index b0fa7e0..0000000
--- a/res/drawable-hdpi/empty_trash.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/folder_parent_icon.png b/res/drawable-hdpi/folder_parent_icon.png
deleted file mode 100644
index 2c395b8..0000000
--- a/res/drawable-hdpi/folder_parent_icon.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_sent.png b/res/drawable-hdpi/ic_anonymous_avatar_40dp.png
similarity index 72%
copy from res/drawable-xhdpi/ic_drawer_sent.png
copy to res/drawable-hdpi/ic_anonymous_avatar_40dp.png
index a25f185..072f172 100644
--- a/res/drawable-xhdpi/ic_drawer_sent.png
+++ b/res/drawable-hdpi/ic_anonymous_avatar_40dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_arrow.png b/res/drawable-hdpi/ic_arrow.png
deleted file mode 100644
index 8d0dfcd..0000000
--- a/res/drawable-hdpi/ic_arrow.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_drawer_trash.png b/res/drawable-hdpi/ic_arrow_back_24dp.png
similarity index 88%
copy from res/drawable-hdpi/ic_drawer_trash.png
copy to res/drawable-hdpi/ic_arrow_back_24dp.png
index a9451fe..9b5f436 100644
--- a/res/drawable-hdpi/ic_drawer_trash.png
+++ b/res/drawable-hdpi/ic_arrow_back_24dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_attach_file.png b/res/drawable-hdpi/ic_attach_file.png
deleted file mode 100644
index 7479681..0000000
--- a/res/drawable-hdpi/ic_attach_file.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_sent.png b/res/drawable-hdpi/ic_attach_file_18dp.png
similarity index 80%
copy from res/drawable-xhdpi/ic_drawer_sent.png
copy to res/drawable-hdpi/ic_attach_file_18dp.png
index a25f185..8bd05da 100644
--- a/res/drawable-xhdpi/ic_drawer_sent.png
+++ b/res/drawable-hdpi/ic_attach_file_18dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_attach_file_20dp.png b/res/drawable-hdpi/ic_attach_file_20dp.png
deleted file mode 100644
index 29f06d4..0000000
--- a/res/drawable-hdpi/ic_attach_file_20dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_attach_image_holo_light.png b/res/drawable-hdpi/ic_attach_image_holo_light.png
deleted file mode 100644
index 555a5e4..0000000
--- a/res/drawable-hdpi/ic_attach_image_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_drawer_sent.png b/res/drawable-hdpi/ic_cancel_24dp.png
similarity index 76%
copy from res/drawable-hdpi/ic_drawer_sent.png
copy to res/drawable-hdpi/ic_cancel_24dp.png
index 0cbdfab..070f1fe 100644
--- a/res/drawable-hdpi/ic_drawer_sent.png
+++ b/res/drawable-hdpi/ic_cancel_24dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_cancel_wht.png b/res/drawable-hdpi/ic_cancel_wht_24dp.png
similarity index 100%
rename from res/drawable-hdpi/ic_cancel_wht.png
rename to res/drawable-hdpi/ic_cancel_wht_24dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_drawer_trash.png b/res/drawable-hdpi/ic_check_24dp.png
similarity index 88%
copy from res/drawable-hdpi/ic_drawer_trash.png
copy to res/drawable-hdpi/ic_check_24dp.png
index a9451fe..1513e1a 100644
--- a/res/drawable-hdpi/ic_drawer_trash.png
+++ b/res/drawable-hdpi/ic_check_24dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_drawer_trash.png b/res/drawable-hdpi/ic_close_24dp.png
similarity index 87%
copy from res/drawable-hdpi/ic_drawer_trash.png
copy to res/drawable-hdpi/ic_close_24dp.png
index a9451fe..33db9ee 100644
--- a/res/drawable-hdpi/ic_drawer_trash.png
+++ b/res/drawable-hdpi/ic_close_24dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_compose_56dp.png b/res/drawable-hdpi/ic_compose_56dp.png
deleted file mode 100644
index 75dd9b2..0000000
--- a/res/drawable-hdpi/ic_compose_56dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_compose_pressed_56dp.png b/res/drawable-hdpi/ic_compose_pressed_56dp.png
deleted file mode 100644
index e058e65..0000000
--- a/res/drawable-hdpi/ic_compose_pressed_56dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_drawer_sent.png b/res/drawable-hdpi/ic_cv_loading_24dp.png
similarity index 80%
copy from res/drawable-hdpi/ic_drawer_sent.png
copy to res/drawable-hdpi/ic_cv_loading_24dp.png
index 0cbdfab..077b8d0 100644
--- a/res/drawable-hdpi/ic_drawer_sent.png
+++ b/res/drawable-hdpi/ic_cv_loading_24dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_drawer_trash.png b/res/drawable-hdpi/ic_drawer_accnt_check_24dp.png
similarity index 86%
copy from res/drawable-hdpi/ic_drawer_trash.png
copy to res/drawable-hdpi/ic_drawer_accnt_check_24dp.png
index a9451fe..cdc86b6 100644
--- a/res/drawable-hdpi/ic_drawer_trash.png
+++ b/res/drawable-hdpi/ic_drawer_accnt_check_24dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_drawer_drafts.png b/res/drawable-hdpi/ic_drawer_drafts.png
deleted file mode 100644
index 949072c..0000000
--- a/res/drawable-hdpi/ic_drawer_drafts.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_drawer_drafts_24dp.png b/res/drawable-hdpi/ic_drawer_drafts_24dp.png
new file mode 100644
index 0000000..0b7bc97
--- /dev/null
+++ b/res/drawable-hdpi/ic_drawer_drafts_24dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_drawer_folder.png b/res/drawable-hdpi/ic_drawer_folder.png
deleted file mode 100644
index 2d3db47..0000000
--- a/res/drawable-hdpi/ic_drawer_folder.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_drawer_folder_24dp.png b/res/drawable-hdpi/ic_drawer_folder_24dp.png
new file mode 100644
index 0000000..69f4a18
--- /dev/null
+++ b/res/drawable-hdpi/ic_drawer_folder_24dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_drawer_help.png b/res/drawable-hdpi/ic_drawer_help.png
deleted file mode 100644
index c7a1081..0000000
--- a/res/drawable-hdpi/ic_drawer_help.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_drawer_help_24dp.png b/res/drawable-hdpi/ic_drawer_help_24dp.png
new file mode 100644
index 0000000..324498c
--- /dev/null
+++ b/res/drawable-hdpi/ic_drawer_help_24dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_drawer_inbox.png b/res/drawable-hdpi/ic_drawer_inbox.png
deleted file mode 100644
index 2b950a1..0000000
--- a/res/drawable-hdpi/ic_drawer_inbox.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_drawer_sent.png b/res/drawable-hdpi/ic_drawer_inbox_24dp.png
similarity index 85%
rename from res/drawable-hdpi/ic_drawer_sent.png
rename to res/drawable-hdpi/ic_drawer_inbox_24dp.png
index 0cbdfab..54c04ea 100644
--- a/res/drawable-hdpi/ic_drawer_sent.png
+++ b/res/drawable-hdpi/ic_drawer_inbox_24dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_drawer_outbox.png b/res/drawable-hdpi/ic_drawer_outbox.png
deleted file mode 100644
index dd6ffe3..0000000
--- a/res/drawable-hdpi/ic_drawer_outbox.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_drawer_sent.png b/res/drawable-hdpi/ic_drawer_outbox_24dp.png
similarity index 77%
copy from res/drawable-hdpi/ic_drawer_sent.png
copy to res/drawable-hdpi/ic_drawer_outbox_24dp.png
index 0cbdfab..3119d9a 100644
--- a/res/drawable-hdpi/ic_drawer_sent.png
+++ b/res/drawable-hdpi/ic_drawer_outbox_24dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_drawer_sent_24dp.png b/res/drawable-hdpi/ic_drawer_sent_24dp.png
new file mode 100644
index 0000000..b771392
--- /dev/null
+++ b/res/drawable-hdpi/ic_drawer_sent_24dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_drawer_settings.png b/res/drawable-hdpi/ic_drawer_settings.png
deleted file mode 100644
index 30ce257..0000000
--- a/res/drawable-hdpi/ic_drawer_settings.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_drawer_settings_24dp.png b/res/drawable-hdpi/ic_drawer_settings_24dp.png
new file mode 100644
index 0000000..3e4d234
--- /dev/null
+++ b/res/drawable-hdpi/ic_drawer_settings_24dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_drawer_starred.png b/res/drawable-hdpi/ic_drawer_starred.png
deleted file mode 100644
index 41e657c..0000000
--- a/res/drawable-hdpi/ic_drawer_starred.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_drawer_starred_24dp.png b/res/drawable-hdpi/ic_drawer_starred_24dp.png
new file mode 100644
index 0000000..de7502f
--- /dev/null
+++ b/res/drawable-hdpi/ic_drawer_starred_24dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_drawer_trash_24dp.png b/res/drawable-hdpi/ic_drawer_trash_24dp.png
new file mode 100644
index 0000000..b72a9f3
--- /dev/null
+++ b/res/drawable-hdpi/ic_drawer_trash_24dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_drawer_unread.png b/res/drawable-hdpi/ic_drawer_unread.png
deleted file mode 100644
index ed21b08..0000000
--- a/res/drawable-hdpi/ic_drawer_unread.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_drawer_unread_24dp.png b/res/drawable-hdpi/ic_drawer_unread_24dp.png
new file mode 100644
index 0000000..56c0a8c
--- /dev/null
+++ b/res/drawable-hdpi/ic_drawer_unread_24dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_ellipsis_24dp.png b/res/drawable-hdpi/ic_ellipsis_24dp.png
deleted file mode 100644
index da2e0a6..0000000
--- a/res/drawable-hdpi/ic_ellipsis_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_empty_default.png b/res/drawable-hdpi/ic_empty_default.png
new file mode 100644
index 0000000..7c09e7a
--- /dev/null
+++ b/res/drawable-hdpi/ic_empty_default.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_empty_inbox.png b/res/drawable-hdpi/ic_empty_inbox.png
new file mode 100644
index 0000000..f0623ec
--- /dev/null
+++ b/res/drawable-hdpi/ic_empty_inbox.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_empty_search.png b/res/drawable-hdpi/ic_empty_search.png
new file mode 100644
index 0000000..daea046
--- /dev/null
+++ b/res/drawable-hdpi/ic_empty_search.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_empty_spam.png b/res/drawable-hdpi/ic_empty_spam.png
new file mode 100644
index 0000000..5449bb5
--- /dev/null
+++ b/res/drawable-hdpi/ic_empty_spam.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_empty_trash.png b/res/drawable-hdpi/ic_empty_trash.png
new file mode 100644
index 0000000..4699709
--- /dev/null
+++ b/res/drawable-hdpi/ic_empty_trash.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_fab_4dpshadow.png b/res/drawable-hdpi/ic_fab_4dpshadow.png
new file mode 100644
index 0000000..dbb02ff
--- /dev/null
+++ b/res/drawable-hdpi/ic_fab_4dpshadow.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_drawer_trash.png b/res/drawable-hdpi/ic_folder_parent_24dp.png
similarity index 88%
copy from res/drawable-hdpi/ic_drawer_trash.png
copy to res/drawable-hdpi/ic_folder_parent_24dp.png
index a9451fe..3a5ced8 100644
--- a/res/drawable-hdpi/ic_drawer_trash.png
+++ b/res/drawable-hdpi/ic_folder_parent_24dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_generic_man.png b/res/drawable-hdpi/ic_generic_man.png
deleted file mode 100644
index b6b3129..0000000
--- a/res/drawable-hdpi/ic_generic_man.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_drawer_sent.png b/res/drawable-hdpi/ic_history_24dp.png
similarity index 65%
copy from res/drawable-hdpi/ic_drawer_sent.png
copy to res/drawable-hdpi/ic_history_24dp.png
index 0cbdfab..b93e929 100644
--- a/res/drawable-hdpi/ic_drawer_sent.png
+++ b/res/drawable-hdpi/ic_history_24dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_history_holo_light.png b/res/drawable-hdpi/ic_history_holo_light.png
deleted file mode 100644
index d3feeac..0000000
--- a/res/drawable-hdpi/ic_history_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_mark_read_wht_24dp.png b/res/drawable-hdpi/ic_mark_read_wht_24dp.png
similarity index 100%
rename from res/drawable-hdpi/ic_menu_mark_read_wht_24dp.png
rename to res/drawable-hdpi/ic_mark_read_wht_24dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_mark_unread_wht_24dp.png b/res/drawable-hdpi/ic_mark_unread_wht_24dp.png
similarity index 100%
rename from res/drawable-hdpi/ic_menu_mark_unread_wht_24dp.png
rename to res/drawable-hdpi/ic_mark_unread_wht_24dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_check_holo_light.png b/res/drawable-hdpi/ic_menu_check_holo_light.png
deleted file mode 100644
index df428e2..0000000
--- a/res/drawable-hdpi/ic_menu_check_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_done_holo_light.png b/res/drawable-hdpi/ic_menu_done_holo_light.png
deleted file mode 100644
index 3d9914f..0000000
--- a/res/drawable-hdpi/ic_menu_done_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_move_to_holo_light.png b/res/drawable-hdpi/ic_menu_move_to_holo_light.png
deleted file mode 100644
index 7fe7de8..0000000
--- a/res/drawable-hdpi/ic_menu_move_to_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_revert_holo_dark.png b/res/drawable-hdpi/ic_menu_revert_holo_dark.png
deleted file mode 100644
index 6165a98..0000000
--- a/res/drawable-hdpi/ic_menu_revert_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_drawer_raw.png b/res/drawable-hdpi/ic_menu_wht_24dp.png
similarity index 100%
rename from res/drawable-hdpi/ic_drawer_raw.png
rename to res/drawable-hdpi/ic_menu_wht_24dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_drawer_sent.png b/res/drawable-hdpi/ic_mic_24dp.png
similarity index 81%
copy from res/drawable-hdpi/ic_drawer_sent.png
copy to res/drawable-hdpi/ic_mic_24dp.png
index 0cbdfab..143ccc4 100644
--- a/res/drawable-hdpi/ic_drawer_sent.png
+++ b/res/drawable-hdpi/ic_mic_24dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_mic_wht_24dp.png b/res/drawable-hdpi/ic_mic_wht_24dp.png
new file mode 100644
index 0000000..eefd59e
--- /dev/null
+++ b/res/drawable-hdpi/ic_mic_wht_24dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_move_to_wht_24dp.png b/res/drawable-hdpi/ic_move_to_wht_24dp.png
new file mode 100644
index 0000000..0234156
--- /dev/null
+++ b/res/drawable-hdpi/ic_move_to_wht_24dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_drawer_trash.png b/res/drawable-hdpi/ic_next_24dp.png
similarity index 90%
rename from res/drawable-hdpi/ic_drawer_trash.png
rename to res/drawable-hdpi/ic_next_24dp.png
index a9451fe..b88f557 100644
--- a/res/drawable-hdpi/ic_drawer_trash.png
+++ b/res/drawable-hdpi/ic_next_24dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_edit_24dp.png b/res/drawable-hdpi/ic_pencil_24dp.png
similarity index 100%
rename from res/drawable-hdpi/ic_edit_24dp.png
rename to res/drawable-hdpi/ic_pencil_24dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_pencil_wht_24dp.png b/res/drawable-hdpi/ic_pencil_wht_24dp.png
new file mode 100644
index 0000000..a59ff5a
--- /dev/null
+++ b/res/drawable-hdpi/ic_pencil_wht_24dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_vertical_shadow_end_2dp.9.png b/res/drawable-hdpi/ic_vertical_shadow_end_2dp.9.png
new file mode 100644
index 0000000..657c20c
--- /dev/null
+++ b/res/drawable-hdpi/ic_vertical_shadow_end_2dp.9.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_vertical_shadow_start_4dp.9.png b/res/drawable-hdpi/ic_vertical_shadow_start_4dp.9.png
new file mode 100644
index 0000000..030c32c
--- /dev/null
+++ b/res/drawable-hdpi/ic_vertical_shadow_start_4dp.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_sent.png b/res/drawable-hdpi/ic_warning_56dp.png
similarity index 63%
copy from res/drawable-xhdpi/ic_drawer_sent.png
copy to res/drawable-hdpi/ic_warning_56dp.png
index a25f185..20a20e3 100644
--- a/res/drawable-xhdpi/ic_drawer_sent.png
+++ b/res/drawable-hdpi/ic_warning_56dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_widget_compose_wht_24dp.png b/res/drawable-hdpi/ic_widget_compose_wht_24dp.png
deleted file mode 100644
index 540ab4d..0000000
--- a/res/drawable-hdpi/ic_widget_compose_wht_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/list_read_holo.9.png b/res/drawable-hdpi/list_read_holo.9.png
deleted file mode 100644
index 47e3a8b..0000000
--- a/res/drawable-hdpi/list_read_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/list_unread_holo.9.png b/res/drawable-hdpi/list_unread_holo.9.png
deleted file mode 100644
index 47e3a8b..0000000
--- a/res/drawable-hdpi/list_unread_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/toast_frame_focused.9.png b/res/drawable-hdpi/toast_frame_focused.9.png
deleted file mode 100644
index b0fd972..0000000
--- a/res/drawable-hdpi/toast_frame_focused.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/toast_frame_normal.9.png b/res/drawable-hdpi/toast_frame_normal.9.png
deleted file mode 100644
index ba89bf2..0000000
--- a/res/drawable-hdpi/toast_frame_normal.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/toast_frame_pressed.9.png b/res/drawable-hdpi/toast_frame_pressed.9.png
deleted file mode 100644
index f21d795..0000000
--- a/res/drawable-hdpi/toast_frame_pressed.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/ic_arrow.png b/res/drawable-ldrtl-hdpi/ic_arrow.png
deleted file mode 100644
index 6cbd0aa..0000000
--- a/res/drawable-ldrtl-hdpi/ic_arrow.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/ic_arrow_back_wht_24dp.png b/res/drawable-ldrtl-hdpi/ic_arrow_back_wht_24dp.png
deleted file mode 100644
index 0a98481..0000000
--- a/res/drawable-ldrtl-hdpi/ic_arrow_back_wht_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/ic_move_to_wht_24dp.png b/res/drawable-ldrtl-hdpi/ic_move_to_wht_24dp.png
new file mode 100644
index 0000000..84d1420
--- /dev/null
+++ b/res/drawable-ldrtl-hdpi/ic_move_to_wht_24dp.png
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/ic_vertical_shadow_end_2dp.9.png b/res/drawable-ldrtl-hdpi/ic_vertical_shadow_end_2dp.9.png
new file mode 100644
index 0000000..f893165
--- /dev/null
+++ b/res/drawable-ldrtl-hdpi/ic_vertical_shadow_end_2dp.9.png
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/ic_vertical_shadow_start_4dp.9.png b/res/drawable-ldrtl-hdpi/ic_vertical_shadow_start_4dp.9.png
new file mode 100644
index 0000000..88c72be
--- /dev/null
+++ b/res/drawable-ldrtl-hdpi/ic_vertical_shadow_start_4dp.9.png
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/ic_arrow.png b/res/drawable-ldrtl-mdpi/ic_arrow.png
deleted file mode 100644
index 0b5d175..0000000
--- a/res/drawable-ldrtl-mdpi/ic_arrow.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/ic_arrow_back_wht_24dp.png b/res/drawable-ldrtl-mdpi/ic_arrow_back_wht_24dp.png
deleted file mode 100644
index 98e52d7..0000000
--- a/res/drawable-ldrtl-mdpi/ic_arrow_back_wht_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/ic_move_to_wht_24dp.png b/res/drawable-ldrtl-mdpi/ic_move_to_wht_24dp.png
new file mode 100644
index 0000000..0fac2c2
--- /dev/null
+++ b/res/drawable-ldrtl-mdpi/ic_move_to_wht_24dp.png
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/ic_vertical_shadow_end_2dp.9.png b/res/drawable-ldrtl-mdpi/ic_vertical_shadow_end_2dp.9.png
new file mode 100644
index 0000000..b9fa648
--- /dev/null
+++ b/res/drawable-ldrtl-mdpi/ic_vertical_shadow_end_2dp.9.png
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/ic_vertical_shadow_start_4dp.9.png b/res/drawable-ldrtl-mdpi/ic_vertical_shadow_start_4dp.9.png
new file mode 100644
index 0000000..ec1555c
--- /dev/null
+++ b/res/drawable-ldrtl-mdpi/ic_vertical_shadow_start_4dp.9.png
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/ic_arrow.png b/res/drawable-ldrtl-xhdpi/ic_arrow.png
deleted file mode 100644
index 5697eac..0000000
--- a/res/drawable-ldrtl-xhdpi/ic_arrow.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/ic_arrow_back_wht_24dp.png b/res/drawable-ldrtl-xhdpi/ic_arrow_back_wht_24dp.png
deleted file mode 100644
index 0503033..0000000
--- a/res/drawable-ldrtl-xhdpi/ic_arrow_back_wht_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/ic_move_to_wht_24dp.png b/res/drawable-ldrtl-xhdpi/ic_move_to_wht_24dp.png
new file mode 100644
index 0000000..262dc4f
--- /dev/null
+++ b/res/drawable-ldrtl-xhdpi/ic_move_to_wht_24dp.png
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/ic_vertical_shadow_end_2dp.9.png b/res/drawable-ldrtl-xhdpi/ic_vertical_shadow_end_2dp.9.png
new file mode 100644
index 0000000..ea05a74
--- /dev/null
+++ b/res/drawable-ldrtl-xhdpi/ic_vertical_shadow_end_2dp.9.png
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/ic_vertical_shadow_start_4dp.9.png b/res/drawable-ldrtl-xhdpi/ic_vertical_shadow_start_4dp.9.png
new file mode 100644
index 0000000..2d100c0
--- /dev/null
+++ b/res/drawable-ldrtl-xhdpi/ic_vertical_shadow_start_4dp.9.png
Binary files differ
diff --git a/res/drawable-ldrtl-xxhdpi/ic_arrow.png b/res/drawable-ldrtl-xxhdpi/ic_arrow.png
deleted file mode 100644
index 491f548..0000000
--- a/res/drawable-ldrtl-xxhdpi/ic_arrow.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xxhdpi/ic_arrow_back_wht_24dp.png b/res/drawable-ldrtl-xxhdpi/ic_arrow_back_wht_24dp.png
deleted file mode 100644
index b6827ae..0000000
--- a/res/drawable-ldrtl-xxhdpi/ic_arrow_back_wht_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xxhdpi/ic_move_to_wht_24dp.png b/res/drawable-ldrtl-xxhdpi/ic_move_to_wht_24dp.png
new file mode 100644
index 0000000..9e49efa
--- /dev/null
+++ b/res/drawable-ldrtl-xxhdpi/ic_move_to_wht_24dp.png
Binary files differ
diff --git a/res/drawable-ldrtl-xxhdpi/ic_vertical_shadow_end_2dp.9.png b/res/drawable-ldrtl-xxhdpi/ic_vertical_shadow_end_2dp.9.png
new file mode 100644
index 0000000..7cb9e6e
--- /dev/null
+++ b/res/drawable-ldrtl-xxhdpi/ic_vertical_shadow_end_2dp.9.png
Binary files differ
diff --git a/res/drawable-ldrtl-xxhdpi/ic_vertical_shadow_start_4dp.9.png b/res/drawable-ldrtl-xxhdpi/ic_vertical_shadow_start_4dp.9.png
new file mode 100644
index 0000000..9edd16b
--- /dev/null
+++ b/res/drawable-ldrtl-xxhdpi/ic_vertical_shadow_start_4dp.9.png
Binary files differ
diff --git a/res/drawable-ldrtl-xxxhdpi/ic_move_to_wht_24dp.png b/res/drawable-ldrtl-xxxhdpi/ic_move_to_wht_24dp.png
new file mode 100644
index 0000000..646f973
--- /dev/null
+++ b/res/drawable-ldrtl-xxxhdpi/ic_move_to_wht_24dp.png
Binary files differ
diff --git a/res/drawable-ldrtl-xxxhdpi/ic_vertical_shadow_end_2dp.9.png b/res/drawable-ldrtl-xxxhdpi/ic_vertical_shadow_end_2dp.9.png
new file mode 100644
index 0000000..98580b3
--- /dev/null
+++ b/res/drawable-ldrtl-xxxhdpi/ic_vertical_shadow_end_2dp.9.png
Binary files differ
diff --git a/res/drawable-ldrtl-xxxhdpi/ic_vertical_shadow_start_4dp.9.png b/res/drawable-ldrtl-xxxhdpi/ic_vertical_shadow_start_4dp.9.png
new file mode 100644
index 0000000..33c93ee
--- /dev/null
+++ b/res/drawable-ldrtl-xxxhdpi/ic_vertical_shadow_start_4dp.9.png
Binary files differ
diff --git a/res/values-v19/drawables.xml b/res/drawable-ldrtl/ic_arrow_back_24dp_with_rtl.xml
similarity index 74%
copy from res/values-v19/drawables.xml
copy to res/drawable-ldrtl/ic_arrow_back_24dp_with_rtl.xml
index 17f03bf..1deff75 100644
--- a/res/values-v19/drawables.xml
+++ b/res/drawable-ldrtl/ic_arrow_back_24dp_with_rtl.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-    Copyright (C) 2013 Google Inc.
+    Copyright (C) 2014 Google Inc.
     Licensed to The Android Open Source Project.
 
     Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,6 +15,7 @@
     See the License for the specific language governing permissions and
     limitations under the License.
 -->
-<resources>
-    <drawable name="ic_attach">@drawable/ic_attach_file</drawable>
-</resources>
+<rotate xmlns:android="http://schemas.android.com/apk/res/android"
+    android:drawable="@drawable/ic_arrow_back_24dp"
+    android:fromDegrees="180"
+    android:toDegrees="180" />
\ No newline at end of file
diff --git a/res/values-v19/drawables.xml b/res/drawable-ldrtl/ic_arrow_back_wht_24dp_with_rtl.xml
similarity index 74%
copy from res/values-v19/drawables.xml
copy to res/drawable-ldrtl/ic_arrow_back_wht_24dp_with_rtl.xml
index 17f03bf..2dcee37 100644
--- a/res/values-v19/drawables.xml
+++ b/res/drawable-ldrtl/ic_arrow_back_wht_24dp_with_rtl.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-    Copyright (C) 2013 Google Inc.
+    Copyright (C) 2014 Google Inc.
     Licensed to The Android Open Source Project.
 
     Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,6 +15,7 @@
     See the License for the specific language governing permissions and
     limitations under the License.
 -->
-<resources>
-    <drawable name="ic_attach">@drawable/ic_attach_file</drawable>
-</resources>
+<rotate xmlns:android="http://schemas.android.com/apk/res/android"
+    android:drawable="@drawable/ic_arrow_back_wht_24dp"
+    android:fromDegrees="180"
+    android:toDegrees="180" />
\ No newline at end of file
diff --git a/res/values-v19/drawables.xml b/res/drawable-ldrtl/ic_next.xml
similarity index 75%
rename from res/values-v19/drawables.xml
rename to res/drawable-ldrtl/ic_next.xml
index 17f03bf..6e585df 100644
--- a/res/values-v19/drawables.xml
+++ b/res/drawable-ldrtl/ic_next.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-    Copyright (C) 2013 Google Inc.
+    Copyright (C) 2014 Google Inc.
     Licensed to The Android Open Source Project.
 
     Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,6 +15,7 @@
     See the License for the specific language governing permissions and
     limitations under the License.
 -->
-<resources>
-    <drawable name="ic_attach">@drawable/ic_attach_file</drawable>
-</resources>
+<rotate xmlns:android="http://schemas.android.com/apk/res/android"
+    android:drawable="@drawable/ic_next_24dp"
+    android:fromDegrees="180"
+    android:toDegrees="180" />
diff --git a/res/drawable/ic_drawer.xml b/res/drawable-ldrtl/ic_prev.xml
similarity index 88%
rename from res/drawable/ic_drawer.xml
rename to res/drawable-ldrtl/ic_prev.xml
index d78f5f4..34586dd 100644
--- a/res/drawable/ic_drawer.xml
+++ b/res/drawable-ldrtl/ic_prev.xml
@@ -15,7 +15,6 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
+
 <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
-        android:src="@drawable/ic_drawer_raw"
-        android:autoMirrored="true">
-</bitmap>
+    android:src="@drawable/ic_next_24dp" />
diff --git a/res/drawable-mdpi-v19/btn_default_pressed_holo_light.9.png b/res/drawable-mdpi-v19/btn_default_pressed_holo_light.9.png
deleted file mode 100644
index c73984e..0000000
--- a/res/drawable-mdpi-v19/btn_default_pressed_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/btn_default_disabled_focused_holo_light.9.png b/res/drawable-mdpi/btn_default_disabled_focused_holo_light.9.png
deleted file mode 100644
index d3ea4e5..0000000
--- a/res/drawable-mdpi/btn_default_disabled_focused_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/btn_default_disabled_holo_light.9.png b/res/drawable-mdpi/btn_default_disabled_holo_light.9.png
deleted file mode 100644
index 9fdc75e..0000000
--- a/res/drawable-mdpi/btn_default_disabled_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/btn_default_focused_holo_light.9.png b/res/drawable-mdpi/btn_default_focused_holo_light.9.png
deleted file mode 100644
index 9596ba9..0000000
--- a/res/drawable-mdpi/btn_default_focused_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/btn_default_normal_holo_light.9.png b/res/drawable-mdpi/btn_default_normal_holo_light.9.png
deleted file mode 100644
index 4ccfaac..0000000
--- a/res/drawable-mdpi/btn_default_normal_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/btn_default_pressed_holo_light.9.png b/res/drawable-mdpi/btn_default_pressed_holo_light.9.png
deleted file mode 100644
index e489850..0000000
--- a/res/drawable-mdpi/btn_default_pressed_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/empty_folders.png b/res/drawable-mdpi/empty_folders.png
deleted file mode 100644
index 1a371cb..0000000
--- a/res/drawable-mdpi/empty_folders.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/empty_inbox.png b/res/drawable-mdpi/empty_inbox.png
deleted file mode 100644
index 3a51a60..0000000
--- a/res/drawable-mdpi/empty_inbox.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/empty_search.png b/res/drawable-mdpi/empty_search.png
deleted file mode 100644
index dde3765..0000000
--- a/res/drawable-mdpi/empty_search.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/empty_spam.png b/res/drawable-mdpi/empty_spam.png
deleted file mode 100644
index f5343d8..0000000
--- a/res/drawable-mdpi/empty_spam.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/empty_trash.png b/res/drawable-mdpi/empty_trash.png
deleted file mode 100644
index 87f6d92..0000000
--- a/res/drawable-mdpi/empty_trash.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/folder_parent_icon.png b/res/drawable-mdpi/folder_parent_icon.png
deleted file mode 100644
index 5b1a815..0000000
--- a/res/drawable-mdpi/folder_parent_icon.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_drawer_sent.png b/res/drawable-mdpi/ic_anonymous_avatar_40dp.png
similarity index 82%
copy from res/drawable-hdpi/ic_drawer_sent.png
copy to res/drawable-mdpi/ic_anonymous_avatar_40dp.png
index 0cbdfab..ac0bbe3 100644
--- a/res/drawable-hdpi/ic_drawer_sent.png
+++ b/res/drawable-mdpi/ic_anonymous_avatar_40dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_arrow.png b/res/drawable-mdpi/ic_arrow.png
deleted file mode 100644
index 96440a2..0000000
--- a/res/drawable-mdpi/ic_arrow.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_drawer_trash.png b/res/drawable-mdpi/ic_arrow_back_24dp.png
similarity index 91%
copy from res/drawable-mdpi/ic_drawer_trash.png
copy to res/drawable-mdpi/ic_arrow_back_24dp.png
index c1583bd..3a5800d 100644
--- a/res/drawable-mdpi/ic_drawer_trash.png
+++ b/res/drawable-mdpi/ic_arrow_back_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_attach_file.png b/res/drawable-mdpi/ic_attach_file.png
deleted file mode 100644
index 772fcdd..0000000
--- a/res/drawable-mdpi/ic_attach_file.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_folder.png b/res/drawable-mdpi/ic_attach_file_18dp.png
similarity index 86%
copy from res/drawable-xhdpi/ic_drawer_folder.png
copy to res/drawable-mdpi/ic_attach_file_18dp.png
index 02cb6cd..599c764 100644
--- a/res/drawable-xhdpi/ic_drawer_folder.png
+++ b/res/drawable-mdpi/ic_attach_file_18dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_attach_file_20dp.png b/res/drawable-mdpi/ic_attach_file_20dp.png
deleted file mode 100644
index de0d05e..0000000
--- a/res/drawable-mdpi/ic_attach_file_20dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_attach_image_holo_light.png b/res/drawable-mdpi/ic_attach_image_holo_light.png
deleted file mode 100644
index 2613d13..0000000
--- a/res/drawable-mdpi/ic_attach_image_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_drawer_outbox.png b/res/drawable-mdpi/ic_cancel_24dp.png
similarity index 83%
copy from res/drawable-mdpi/ic_drawer_outbox.png
copy to res/drawable-mdpi/ic_cancel_24dp.png
index b5589d3..7fb163b 100644
--- a/res/drawable-mdpi/ic_drawer_outbox.png
+++ b/res/drawable-mdpi/ic_cancel_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_drawer_trash.png b/res/drawable-mdpi/ic_check_24dp.png
similarity index 91%
copy from res/drawable-mdpi/ic_drawer_trash.png
copy to res/drawable-mdpi/ic_check_24dp.png
index c1583bd..cb42400 100644
--- a/res/drawable-mdpi/ic_drawer_trash.png
+++ b/res/drawable-mdpi/ic_check_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_drawer_trash.png b/res/drawable-mdpi/ic_close_24dp.png
similarity index 90%
copy from res/drawable-mdpi/ic_drawer_trash.png
copy to res/drawable-mdpi/ic_close_24dp.png
index c1583bd..bd39f93 100644
--- a/res/drawable-mdpi/ic_drawer_trash.png
+++ b/res/drawable-mdpi/ic_close_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_compose_56dp.png b/res/drawable-mdpi/ic_compose_56dp.png
deleted file mode 100644
index 98f2c91..0000000
--- a/res/drawable-mdpi/ic_compose_56dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_compose_pressed_56dp.png b/res/drawable-mdpi/ic_compose_pressed_56dp.png
deleted file mode 100644
index 0ccc505..0000000
--- a/res/drawable-mdpi/ic_compose_pressed_56dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_drawer_outbox.png b/res/drawable-mdpi/ic_cv_loading_24dp.png
similarity index 86%
copy from res/drawable-mdpi/ic_drawer_outbox.png
copy to res/drawable-mdpi/ic_cv_loading_24dp.png
index b5589d3..d10e767 100644
--- a/res/drawable-mdpi/ic_drawer_outbox.png
+++ b/res/drawable-mdpi/ic_cv_loading_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_drawer_trash.png b/res/drawable-mdpi/ic_drawer_accnt_check_24dp.png
similarity index 90%
copy from res/drawable-mdpi/ic_drawer_trash.png
copy to res/drawable-mdpi/ic_drawer_accnt_check_24dp.png
index c1583bd..e90ecaa 100644
--- a/res/drawable-mdpi/ic_drawer_trash.png
+++ b/res/drawable-mdpi/ic_drawer_accnt_check_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_drawer_drafts.png b/res/drawable-mdpi/ic_drawer_drafts.png
deleted file mode 100644
index d899d17..0000000
--- a/res/drawable-mdpi/ic_drawer_drafts.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_drawer_drafts_24dp.png b/res/drawable-mdpi/ic_drawer_drafts_24dp.png
new file mode 100644
index 0000000..e53cf4a
--- /dev/null
+++ b/res/drawable-mdpi/ic_drawer_drafts_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_drawer_folder.png b/res/drawable-mdpi/ic_drawer_folder.png
deleted file mode 100644
index c079acf..0000000
--- a/res/drawable-mdpi/ic_drawer_folder.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_drawer_folder_24dp.png b/res/drawable-mdpi/ic_drawer_folder_24dp.png
new file mode 100644
index 0000000..1028bfa
--- /dev/null
+++ b/res/drawable-mdpi/ic_drawer_folder_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_drawer_help.png b/res/drawable-mdpi/ic_drawer_help.png
deleted file mode 100644
index bf6212f..0000000
--- a/res/drawable-mdpi/ic_drawer_help.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_drawer_help_24dp.png b/res/drawable-mdpi/ic_drawer_help_24dp.png
new file mode 100644
index 0000000..1efd1b5
--- /dev/null
+++ b/res/drawable-mdpi/ic_drawer_help_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_drawer_inbox.png b/res/drawable-mdpi/ic_drawer_inbox.png
deleted file mode 100644
index 752185b..0000000
--- a/res/drawable-mdpi/ic_drawer_inbox.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_drawer_trash.png b/res/drawable-mdpi/ic_drawer_inbox_24dp.png
similarity index 89%
copy from res/drawable-mdpi/ic_drawer_trash.png
copy to res/drawable-mdpi/ic_drawer_inbox_24dp.png
index c1583bd..6034b8a 100644
--- a/res/drawable-mdpi/ic_drawer_trash.png
+++ b/res/drawable-mdpi/ic_drawer_inbox_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_drawer_outbox.png b/res/drawable-mdpi/ic_drawer_outbox_24dp.png
similarity index 83%
copy from res/drawable-mdpi/ic_drawer_outbox.png
copy to res/drawable-mdpi/ic_drawer_outbox_24dp.png
index b5589d3..f20466c 100644
--- a/res/drawable-mdpi/ic_drawer_outbox.png
+++ b/res/drawable-mdpi/ic_drawer_outbox_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_drawer_sent.png b/res/drawable-mdpi/ic_drawer_sent.png
deleted file mode 100644
index 14a6dbd..0000000
--- a/res/drawable-mdpi/ic_drawer_sent.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_drawer_sent_24dp.png b/res/drawable-mdpi/ic_drawer_sent_24dp.png
new file mode 100644
index 0000000..6fef488
--- /dev/null
+++ b/res/drawable-mdpi/ic_drawer_sent_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_drawer_settings.png b/res/drawable-mdpi/ic_drawer_settings.png
deleted file mode 100644
index 0ec76c7..0000000
--- a/res/drawable-mdpi/ic_drawer_settings.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_drawer_settings_24dp.png b/res/drawable-mdpi/ic_drawer_settings_24dp.png
new file mode 100644
index 0000000..d2963c2
--- /dev/null
+++ b/res/drawable-mdpi/ic_drawer_settings_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_drawer_starred.png b/res/drawable-mdpi/ic_drawer_starred.png
deleted file mode 100644
index 39c03cd..0000000
--- a/res/drawable-mdpi/ic_drawer_starred.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_drawer_starred_24dp.png b/res/drawable-mdpi/ic_drawer_starred_24dp.png
new file mode 100644
index 0000000..89b79c4
--- /dev/null
+++ b/res/drawable-mdpi/ic_drawer_starred_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_drawer_trash_24dp.png b/res/drawable-mdpi/ic_drawer_trash_24dp.png
new file mode 100644
index 0000000..e757fdb
--- /dev/null
+++ b/res/drawable-mdpi/ic_drawer_trash_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_drawer_unread.png b/res/drawable-mdpi/ic_drawer_unread.png
deleted file mode 100644
index 75e11cd..0000000
--- a/res/drawable-mdpi/ic_drawer_unread.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_drawer_unread_24dp.png b/res/drawable-mdpi/ic_drawer_unread_24dp.png
new file mode 100644
index 0000000..b971cd9
--- /dev/null
+++ b/res/drawable-mdpi/ic_drawer_unread_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_ellipsis_24dp.png b/res/drawable-mdpi/ic_ellipsis_24dp.png
deleted file mode 100644
index 2545d9e..0000000
--- a/res/drawable-mdpi/ic_ellipsis_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_empty_default.png b/res/drawable-mdpi/ic_empty_default.png
new file mode 100644
index 0000000..39356c2
--- /dev/null
+++ b/res/drawable-mdpi/ic_empty_default.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_empty_inbox.png b/res/drawable-mdpi/ic_empty_inbox.png
new file mode 100644
index 0000000..2784ae7
--- /dev/null
+++ b/res/drawable-mdpi/ic_empty_inbox.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_empty_search.png b/res/drawable-mdpi/ic_empty_search.png
new file mode 100644
index 0000000..c1fd890
--- /dev/null
+++ b/res/drawable-mdpi/ic_empty_search.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_empty_spam.png b/res/drawable-mdpi/ic_empty_spam.png
new file mode 100644
index 0000000..5f0ecec
--- /dev/null
+++ b/res/drawable-mdpi/ic_empty_spam.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_empty_trash.png b/res/drawable-mdpi/ic_empty_trash.png
new file mode 100644
index 0000000..385d2fe
--- /dev/null
+++ b/res/drawable-mdpi/ic_empty_trash.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_fab_4dpshadow.png b/res/drawable-mdpi/ic_fab_4dpshadow.png
new file mode 100644
index 0000000..bb6b8aa
--- /dev/null
+++ b/res/drawable-mdpi/ic_fab_4dpshadow.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_drawer_trash.png b/res/drawable-mdpi/ic_folder_parent_24dp.png
similarity index 91%
copy from res/drawable-mdpi/ic_drawer_trash.png
copy to res/drawable-mdpi/ic_folder_parent_24dp.png
index c1583bd..732cb77 100644
--- a/res/drawable-mdpi/ic_drawer_trash.png
+++ b/res/drawable-mdpi/ic_folder_parent_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_generic_man.png b/res/drawable-mdpi/ic_generic_man.png
deleted file mode 100644
index f763dd2..0000000
--- a/res/drawable-mdpi/ic_generic_man.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_drawer_outbox.png b/res/drawable-mdpi/ic_history_24dp.png
similarity index 76%
copy from res/drawable-mdpi/ic_drawer_outbox.png
copy to res/drawable-mdpi/ic_history_24dp.png
index b5589d3..76b0a91 100644
--- a/res/drawable-mdpi/ic_drawer_outbox.png
+++ b/res/drawable-mdpi/ic_history_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_history_holo_light.png b/res/drawable-mdpi/ic_history_holo_light.png
deleted file mode 100644
index 2b6eec4..0000000
--- a/res/drawable-mdpi/ic_history_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_mark_read_wht_24dp.png b/res/drawable-mdpi/ic_mark_read_wht_24dp.png
similarity index 100%
rename from res/drawable-mdpi/ic_menu_mark_read_wht_24dp.png
rename to res/drawable-mdpi/ic_mark_read_wht_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_mark_unread_wht_24dp.png b/res/drawable-mdpi/ic_mark_unread_wht_24dp.png
similarity index 100%
rename from res/drawable-mdpi/ic_menu_mark_unread_wht_24dp.png
rename to res/drawable-mdpi/ic_mark_unread_wht_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_check_holo_light.png b/res/drawable-mdpi/ic_menu_check_holo_light.png
deleted file mode 100644
index c43372a..0000000
--- a/res/drawable-mdpi/ic_menu_check_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_done_holo_light.png b/res/drawable-mdpi/ic_menu_done_holo_light.png
deleted file mode 100644
index 111fb1b..0000000
--- a/res/drawable-mdpi/ic_menu_done_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_move_to_holo_light.png b/res/drawable-mdpi/ic_menu_move_to_holo_light.png
deleted file mode 100644
index 423cb1f..0000000
--- a/res/drawable-mdpi/ic_menu_move_to_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_revert_holo_dark.png b/res/drawable-mdpi/ic_menu_revert_holo_dark.png
deleted file mode 100644
index 97ee13d..0000000
--- a/res/drawable-mdpi/ic_menu_revert_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_drawer_raw.png b/res/drawable-mdpi/ic_menu_wht_24dp.png
similarity index 100%
rename from res/drawable-mdpi/ic_drawer_raw.png
rename to res/drawable-mdpi/ic_menu_wht_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_drawer_outbox.png b/res/drawable-mdpi/ic_mic_24dp.png
similarity index 87%
rename from res/drawable-mdpi/ic_drawer_outbox.png
rename to res/drawable-mdpi/ic_mic_24dp.png
index b5589d3..81d0c21 100644
--- a/res/drawable-mdpi/ic_drawer_outbox.png
+++ b/res/drawable-mdpi/ic_mic_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_mic_wht_24dp.png b/res/drawable-mdpi/ic_mic_wht_24dp.png
new file mode 100644
index 0000000..fca776f
--- /dev/null
+++ b/res/drawable-mdpi/ic_mic_wht_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_move_to_wht_24dp.png b/res/drawable-mdpi/ic_move_to_wht_24dp.png
new file mode 100644
index 0000000..ad26c0d
--- /dev/null
+++ b/res/drawable-mdpi/ic_move_to_wht_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_drawer_trash.png b/res/drawable-mdpi/ic_next_24dp.png
similarity index 92%
rename from res/drawable-mdpi/ic_drawer_trash.png
rename to res/drawable-mdpi/ic_next_24dp.png
index c1583bd..6ed579c 100644
--- a/res/drawable-mdpi/ic_drawer_trash.png
+++ b/res/drawable-mdpi/ic_next_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_edit_24dp.png b/res/drawable-mdpi/ic_pencil_24dp.png
similarity index 100%
rename from res/drawable-mdpi/ic_edit_24dp.png
rename to res/drawable-mdpi/ic_pencil_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_pencil_wht_24dp.png b/res/drawable-mdpi/ic_pencil_wht_24dp.png
new file mode 100644
index 0000000..d891960
--- /dev/null
+++ b/res/drawable-mdpi/ic_pencil_wht_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_vertical_shadow_end_2dp.9.png b/res/drawable-mdpi/ic_vertical_shadow_end_2dp.9.png
new file mode 100644
index 0000000..f039508
--- /dev/null
+++ b/res/drawable-mdpi/ic_vertical_shadow_end_2dp.9.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_vertical_shadow_start_4dp.9.png b/res/drawable-mdpi/ic_vertical_shadow_start_4dp.9.png
new file mode 100644
index 0000000..6ec2d6e
--- /dev/null
+++ b/res/drawable-mdpi/ic_vertical_shadow_start_4dp.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_sent.png b/res/drawable-mdpi/ic_warning_56dp.png
similarity index 69%
copy from res/drawable-xhdpi/ic_drawer_sent.png
copy to res/drawable-mdpi/ic_warning_56dp.png
index a25f185..6479994 100644
--- a/res/drawable-xhdpi/ic_drawer_sent.png
+++ b/res/drawable-mdpi/ic_warning_56dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_widget_compose_wht_24dp.png b/res/drawable-mdpi/ic_widget_compose_wht_24dp.png
deleted file mode 100644
index 8a2df39..0000000
--- a/res/drawable-mdpi/ic_widget_compose_wht_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/list_read_holo.9.png b/res/drawable-mdpi/list_read_holo.9.png
deleted file mode 100644
index 5865b73..0000000
--- a/res/drawable-mdpi/list_read_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/list_unread_holo.9.png b/res/drawable-mdpi/list_unread_holo.9.png
deleted file mode 100644
index 5865b73..0000000
--- a/res/drawable-mdpi/list_unread_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/toast_frame_focused.9.png b/res/drawable-mdpi/toast_frame_focused.9.png
deleted file mode 100644
index 08d0635..0000000
--- a/res/drawable-mdpi/toast_frame_focused.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/toast_frame_normal.9.png b/res/drawable-mdpi/toast_frame_normal.9.png
deleted file mode 100644
index 165494f..0000000
--- a/res/drawable-mdpi/toast_frame_normal.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/toast_frame_pressed.9.png b/res/drawable-mdpi/toast_frame_pressed.9.png
deleted file mode 100644
index d5a3edf..0000000
--- a/res/drawable-mdpi/toast_frame_pressed.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-hdpi/list_conversation_wide_read_focused_holo.9.png b/res/drawable-sw600dp-hdpi/list_conversation_wide_read_focused_holo.9.png
deleted file mode 100644
index b0101d9..0000000
--- a/res/drawable-sw600dp-hdpi/list_conversation_wide_read_focused_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-hdpi/list_conversation_wide_read_normal_holo.9.png b/res/drawable-sw600dp-hdpi/list_conversation_wide_read_normal_holo.9.png
deleted file mode 100644
index 8a80347..0000000
--- a/res/drawable-sw600dp-hdpi/list_conversation_wide_read_normal_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-hdpi/list_conversation_wide_read_pressed_holo.9.png b/res/drawable-sw600dp-hdpi/list_conversation_wide_read_pressed_holo.9.png
deleted file mode 100644
index 667fe98..0000000
--- a/res/drawable-sw600dp-hdpi/list_conversation_wide_read_pressed_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-hdpi/list_conversation_wide_read_selected_holo.9.png b/res/drawable-sw600dp-hdpi/list_conversation_wide_read_selected_holo.9.png
deleted file mode 100644
index 7dd0ac4..0000000
--- a/res/drawable-sw600dp-hdpi/list_conversation_wide_read_selected_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-hdpi/list_conversation_wide_unread_focused_holo.9.png b/res/drawable-sw600dp-hdpi/list_conversation_wide_unread_focused_holo.9.png
deleted file mode 100644
index b0101d9..0000000
--- a/res/drawable-sw600dp-hdpi/list_conversation_wide_unread_focused_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-hdpi/list_conversation_wide_unread_normal_holo.9.png b/res/drawable-sw600dp-hdpi/list_conversation_wide_unread_normal_holo.9.png
deleted file mode 100644
index 5381fd8..0000000
--- a/res/drawable-sw600dp-hdpi/list_conversation_wide_unread_normal_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-hdpi/list_conversation_wide_unread_pressed_holo.9.png b/res/drawable-sw600dp-hdpi/list_conversation_wide_unread_pressed_holo.9.png
deleted file mode 100644
index 667fe98..0000000
--- a/res/drawable-sw600dp-hdpi/list_conversation_wide_unread_pressed_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-hdpi/list_conversation_wide_unread_selected_holo.9.png b/res/drawable-sw600dp-hdpi/list_conversation_wide_unread_selected_holo.9.png
deleted file mode 100644
index 7dd0ac4..0000000
--- a/res/drawable-sw600dp-hdpi/list_conversation_wide_unread_selected_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-mdpi/list_conversation_wide_read_focused_holo.9.png b/res/drawable-sw600dp-mdpi/list_conversation_wide_read_focused_holo.9.png
deleted file mode 100644
index c8fdd0a..0000000
--- a/res/drawable-sw600dp-mdpi/list_conversation_wide_read_focused_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-mdpi/list_conversation_wide_read_normal_holo.9.png b/res/drawable-sw600dp-mdpi/list_conversation_wide_read_normal_holo.9.png
deleted file mode 100644
index 6e3697a..0000000
--- a/res/drawable-sw600dp-mdpi/list_conversation_wide_read_normal_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-mdpi/list_conversation_wide_read_pressed_holo.9.png b/res/drawable-sw600dp-mdpi/list_conversation_wide_read_pressed_holo.9.png
deleted file mode 100644
index dc8fd39..0000000
--- a/res/drawable-sw600dp-mdpi/list_conversation_wide_read_pressed_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-mdpi/list_conversation_wide_read_selected_holo.9.png b/res/drawable-sw600dp-mdpi/list_conversation_wide_read_selected_holo.9.png
deleted file mode 100644
index b0e111e..0000000
--- a/res/drawable-sw600dp-mdpi/list_conversation_wide_read_selected_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-mdpi/list_conversation_wide_unread_focused_holo.9.png b/res/drawable-sw600dp-mdpi/list_conversation_wide_unread_focused_holo.9.png
deleted file mode 100644
index c8fdd0a..0000000
--- a/res/drawable-sw600dp-mdpi/list_conversation_wide_unread_focused_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-mdpi/list_conversation_wide_unread_normal_holo.9.png b/res/drawable-sw600dp-mdpi/list_conversation_wide_unread_normal_holo.9.png
deleted file mode 100644
index 2d519d4..0000000
--- a/res/drawable-sw600dp-mdpi/list_conversation_wide_unread_normal_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-mdpi/list_conversation_wide_unread_pressed_holo.9.png b/res/drawable-sw600dp-mdpi/list_conversation_wide_unread_pressed_holo.9.png
deleted file mode 100644
index dc8fd39..0000000
--- a/res/drawable-sw600dp-mdpi/list_conversation_wide_unread_pressed_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-mdpi/list_conversation_wide_unread_selected_holo.9.png b/res/drawable-sw600dp-mdpi/list_conversation_wide_unread_selected_holo.9.png
deleted file mode 100644
index b0e111e..0000000
--- a/res/drawable-sw600dp-mdpi/list_conversation_wide_unread_selected_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xhdpi/list_conversation_wide_read_focused_holo.9.png b/res/drawable-sw600dp-xhdpi/list_conversation_wide_read_focused_holo.9.png
deleted file mode 100644
index ed48b7d..0000000
--- a/res/drawable-sw600dp-xhdpi/list_conversation_wide_read_focused_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xhdpi/list_conversation_wide_read_normal_holo.9.png b/res/drawable-sw600dp-xhdpi/list_conversation_wide_read_normal_holo.9.png
deleted file mode 100644
index c5bd35f..0000000
--- a/res/drawable-sw600dp-xhdpi/list_conversation_wide_read_normal_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xhdpi/list_conversation_wide_read_pressed_holo.9.png b/res/drawable-sw600dp-xhdpi/list_conversation_wide_read_pressed_holo.9.png
deleted file mode 100644
index 05b0fa5..0000000
--- a/res/drawable-sw600dp-xhdpi/list_conversation_wide_read_pressed_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xhdpi/list_conversation_wide_read_selected_holo.9.png b/res/drawable-sw600dp-xhdpi/list_conversation_wide_read_selected_holo.9.png
deleted file mode 100644
index d5df25d..0000000
--- a/res/drawable-sw600dp-xhdpi/list_conversation_wide_read_selected_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xhdpi/list_conversation_wide_unread_focused_holo.9.png b/res/drawable-sw600dp-xhdpi/list_conversation_wide_unread_focused_holo.9.png
deleted file mode 100644
index ed48b7d..0000000
--- a/res/drawable-sw600dp-xhdpi/list_conversation_wide_unread_focused_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xhdpi/list_conversation_wide_unread_normal_holo.9.png b/res/drawable-sw600dp-xhdpi/list_conversation_wide_unread_normal_holo.9.png
deleted file mode 100644
index df2e990..0000000
--- a/res/drawable-sw600dp-xhdpi/list_conversation_wide_unread_normal_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xhdpi/list_conversation_wide_unread_pressed_holo.9.png b/res/drawable-sw600dp-xhdpi/list_conversation_wide_unread_pressed_holo.9.png
deleted file mode 100644
index 05b0fa5..0000000
--- a/res/drawable-sw600dp-xhdpi/list_conversation_wide_unread_pressed_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xhdpi/list_conversation_wide_unread_selected_holo.9.png b/res/drawable-sw600dp-xhdpi/list_conversation_wide_unread_selected_holo.9.png
deleted file mode 100644
index d5df25d..0000000
--- a/res/drawable-sw600dp-xhdpi/list_conversation_wide_unread_selected_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xxhdpi/list_conversation_wide_read_focused_holo.9.png b/res/drawable-sw600dp-xxhdpi/list_conversation_wide_read_focused_holo.9.png
deleted file mode 100644
index b15d286..0000000
--- a/res/drawable-sw600dp-xxhdpi/list_conversation_wide_read_focused_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xxhdpi/list_conversation_wide_read_normal_holo.9.png b/res/drawable-sw600dp-xxhdpi/list_conversation_wide_read_normal_holo.9.png
deleted file mode 100644
index 060c2b0..0000000
--- a/res/drawable-sw600dp-xxhdpi/list_conversation_wide_read_normal_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xxhdpi/list_conversation_wide_read_pressed_holo.9.png b/res/drawable-sw600dp-xxhdpi/list_conversation_wide_read_pressed_holo.9.png
deleted file mode 100644
index 49b8230..0000000
--- a/res/drawable-sw600dp-xxhdpi/list_conversation_wide_read_pressed_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xxhdpi/list_conversation_wide_read_selected_holo.9.png b/res/drawable-sw600dp-xxhdpi/list_conversation_wide_read_selected_holo.9.png
deleted file mode 100644
index 80d17ee..0000000
--- a/res/drawable-sw600dp-xxhdpi/list_conversation_wide_read_selected_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xxhdpi/list_conversation_wide_unread_focused_holo.9.png b/res/drawable-sw600dp-xxhdpi/list_conversation_wide_unread_focused_holo.9.png
deleted file mode 100644
index 1bbc10a..0000000
--- a/res/drawable-sw600dp-xxhdpi/list_conversation_wide_unread_focused_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xxhdpi/list_conversation_wide_unread_normal_holo.9.png b/res/drawable-sw600dp-xxhdpi/list_conversation_wide_unread_normal_holo.9.png
deleted file mode 100644
index d91be95..0000000
--- a/res/drawable-sw600dp-xxhdpi/list_conversation_wide_unread_normal_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xxhdpi/list_conversation_wide_unread_pressed_holo.9.png b/res/drawable-sw600dp-xxhdpi/list_conversation_wide_unread_pressed_holo.9.png
deleted file mode 100644
index 691cbef..0000000
--- a/res/drawable-sw600dp-xxhdpi/list_conversation_wide_unread_pressed_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xxhdpi/list_conversation_wide_unread_selected_holo.9.png b/res/drawable-sw600dp-xxhdpi/list_conversation_wide_unread_selected_holo.9.png
deleted file mode 100644
index 39caf78..0000000
--- a/res/drawable-sw600dp-xxhdpi/list_conversation_wide_unread_selected_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp/widget_conversation_read_selector.xml b/res/drawable-sw600dp/widget_conversation_read_selector.xml
deleted file mode 100644
index 5302741..0000000
--- a/res/drawable-sw600dp/widget_conversation_read_selector.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2012 Google Inc.
-     Licensed to 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.
--->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_focused="true"
-          android:drawable="@drawable/list_conversation_wide_read_focused_holo" />
-    <item android:state_activated="true"
-          android:drawable="@drawable/list_conversation_wide_read_pressed_holo" />
-    <item android:state_pressed="true"
-          android:drawable="@drawable/list_conversation_wide_read_pressed_holo" />
-    <item android:state_selected="true"
-          android:drawable="@drawable/list_conversation_wide_read_selected_holo" />
-    <item android:state_selected="true"
-          android:state_activated="true"
-          android:drawable="@drawable/list_conversation_wide_read_selected_holo" />
-    <item android:drawable="@drawable/list_conversation_wide_read_normal_holo" />
-</selector>
diff --git a/res/drawable-sw600dp/widget_conversation_unread_selector.xml b/res/drawable-sw600dp/widget_conversation_unread_selector.xml
deleted file mode 100644
index 179a398..0000000
--- a/res/drawable-sw600dp/widget_conversation_unread_selector.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2012 Google Inc.
-     Licensed to 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.
--->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_focused="true"
-          android:drawable="@drawable/list_conversation_wide_unread_focused_holo" />
-    <item android:state_activated="true"
-          android:drawable="@drawable/list_conversation_wide_unread_pressed_holo" />
-    <item android:state_pressed="true"
-          android:drawable="@drawable/list_conversation_wide_unread_pressed_holo" />
-    <item android:state_selected="true"
-          android:drawable="@drawable/list_conversation_wide_unread_selected_holo" />
-    <item android:state_selected="true"
-          android:state_activated="true"
-          android:drawable="@drawable/list_conversation_wide_unread_selected_holo" />
-    <item android:drawable="@drawable/list_conversation_wide_unread_normal_holo" />
-</selector>
\ No newline at end of file
diff --git a/res/drawable-v19/conversation_wide_unread_selector.xml b/res/drawable-v19/conversation_wide_unread_selector.xml
deleted file mode 100644
index 39de4ac..0000000
--- a/res/drawable-v19/conversation_wide_unread_selector.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2011 Google Inc.
-     Licensed to 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.
--->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_focused="true"
-          android:drawable="@drawable/list_conversation_wide_unread_focused_holo" />
-    <item android:state_pressed="true"
-          android:drawable="@drawable/list_conversation_wide_unread_pressed_holo" />
-    <item android:state_activated="true"
-          android:drawable="@drawable/list_conversation_wide_unread_pressed_holo" />
-    <item android:state_selected="true"
-          android:drawable="@drawable/list_conversation_wide_unread_selected_holo" />
-    <item android:drawable="@drawable/list_conversation_wide_unread_normal_holo" />
-</selector>
diff --git a/res/drawable-v19/new_message_toast_background.xml b/res/drawable-v19/new_message_toast_background.xml
deleted file mode 100644
index 66f0d9b..0000000
--- a/res/drawable-v19/new_message_toast_background.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_window_focused="false"
-          android:state_enabled="true"
-          android:drawable="@drawable/toast_frame_normal" />
-
-    <item android:state_pressed="true"
-          android:drawable="@drawable/toast_frame_pressed" />
-
-    <item android:state_focused="true"
-          android:state_enabled="true"
-          android:drawable="@drawable/toast_frame_focused" />
-
-    <item android:drawable="@drawable/toast_frame_normal" />
-</selector>
diff --git a/res/drawable/ic_drawer.xml b/res/drawable-v21/compose_button.xml
similarity index 78%
copy from res/drawable/ic_drawer.xml
copy to res/drawable-v21/compose_button.xml
index d78f5f4..3fd49c5 100644
--- a/res/drawable/ic_drawer.xml
+++ b/res/drawable-v21/compose_button.xml
@@ -15,7 +15,7 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
-        android:src="@drawable/ic_drawer_raw"
-        android:autoMirrored="true">
-</bitmap>
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+        android:color="@color/compose_button_tint">
+    <item android:drawable="@drawable/compose_button_background" />
+</ripple>
\ No newline at end of file
diff --git a/res/drawable-v21/conversation_item_background.xml b/res/drawable-v21/conversation_item_background.xml
new file mode 100644
index 0000000..513a896
--- /dev/null
+++ b/res/drawable-v21/conversation_item_background.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2014 Google Inc.
+    Licensed to 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.
+-->
+
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+        android:color="@color/conversation_item_grey_ripple_color">
+    <item>
+        <selector>
+            <item android:state_checked="true"
+                  android:drawable="@color/conversation_item_grey_background_color" />
+            <item android:state_activated="true"
+                  android:drawable="@color/conversation_item_blue_background_color" />
+            <item android:drawable="@android:color/white" />
+        </selector>
+    </item>
+</ripple>
\ No newline at end of file
diff --git a/res/drawable-v21/ic_archive_wht_24dp.xml b/res/drawable-v21/ic_archive_wht_24dp.xml
new file mode 100644
index 0000000..3777649
--- /dev/null
+++ b/res/drawable-v21/ic_archive_wht_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#ffffffff"
+        android:pathData="M20.5,5.2l-1.4,-1.7C18.9,3.2 18.5,3.0 18.0,3.0L6.0,3.0C5.5,3.0 5.1,3.2 4.8,3.5L3.5,5.2C3.2,5.6 3.0,6.0 3.0,6.5L3.0,19.0c0.0,1.1 0.9,2.0 2.0,2.0l14.0,0.0c1.1,0.0 2.0,-0.9 2.0,-2.0L21.0,6.5C21.0,6.0 20.8,5.6 20.5,5.2zM12.0,17.5L6.5,12.0L10.0,12.0l0.0,-2.0l4.0,0.0l0.0,2.0l3.5,0.0L12.0,17.5zM5.1,5.0l0.8,-1.0l12.0,0.0l0.9,1.0L5.1,5.0z"/>
+</vector>
diff --git a/res/drawable-v21/ic_arrow_back_24dp.xml b/res/drawable-v21/ic_arrow_back_24dp.xml
new file mode 100644
index 0000000..170de0c
--- /dev/null
+++ b/res/drawable-v21/ic_arrow_back_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#8a000000"
+        android:pathData="M20.0,11.0L7.8,11.0l5.6,-5.6L12.0,4.0l-8.0,8.0l8.0,8.0l1.4,-1.4L7.8,13.0L20.0,13.0L20.0,11.0z"/>
+</vector>
diff --git a/res/drawable-v21/ic_arrow_back_wht_24dp.xml b/res/drawable-v21/ic_arrow_back_wht_24dp.xml
new file mode 100644
index 0000000..22925c2
--- /dev/null
+++ b/res/drawable-v21/ic_arrow_back_wht_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#ffffffff"
+        android:pathData="M20.0,11.0L7.8,11.0l5.6,-5.6L12.0,4.0l-8.0,8.0l8.0,8.0l1.4,-1.4L7.8,13.0L20.0,13.0L20.0,11.0z"/>
+</vector>
diff --git a/res/drawable-v21/ic_attach_file_wht_24dp.xml b/res/drawable-v21/ic_attach_file_wht_24dp.xml
new file mode 100644
index 0000000..b51492a
--- /dev/null
+++ b/res/drawable-v21/ic_attach_file_wht_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#ffffffff"
+        android:pathData="M7.5,18.0c-3.0,0.0 -5.5,-2.5 -5.5,-5.5S4.5,7.0 7.5,7.0L18.0,7.0c2.2,0.0 4.0,1.8 4.0,4.0s-1.8,4.0 -4.0,4.0L9.5,15.0C8.1,15.0 7.0,13.9 7.0,12.5S8.1,10.0 9.5,10.0L17.0,10.0l0.0,1.5L9.5,11.5c-0.6,0.0 -1.0,0.4 -1.0,1.0s0.4,1.0 1.0,1.0L18.0,13.5c1.4,0.0 2.5,-1.1 2.5,-2.5S19.4,8.5 18.0,8.5L7.5,8.5c-2.2,0.0 -4.0,1.8 -4.0,4.0s1.8,4.0 4.0,4.0L17.0,16.5L17.0,18.0L7.5,18.0z"/>
+</vector>
diff --git a/res/drawable-v21/ic_cancel_24dp.xml b/res/drawable-v21/ic_cancel_24dp.xml
new file mode 100644
index 0000000..0e5c113
--- /dev/null
+++ b/res/drawable-v21/ic_cancel_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#8a000000"
+        android:pathData="M12.0,2.0C6.5,2.0 2.0,6.5 2.0,12.0s4.5,10.0 10.0,10.0c5.5,0.0 10.0,-4.5 10.0,-10.0S17.5,2.0 12.0,2.0zM17.0,15.6L15.6,17.0L12.0,13.4L8.4,17.0L7.0,15.6l3.6,-3.6L7.0,8.4L8.4,7.0l3.6,3.6L15.6,7.0L17.0,8.4L13.4,12.0L17.0,15.6z"/>
+</vector>
diff --git a/res/drawable-v21/ic_cancel_wht_24dp.xml b/res/drawable-v21/ic_cancel_wht_24dp.xml
new file mode 100644
index 0000000..fe62a2b
--- /dev/null
+++ b/res/drawable-v21/ic_cancel_wht_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#ffffffff"
+        android:pathData="M12.0,2.0C6.5,2.0 2.0,6.5 2.0,12.0s4.5,10.0 10.0,10.0c5.5,0.0 10.0,-4.5 10.0,-10.0S17.5,2.0 12.0,2.0zM17.0,15.6L15.6,17.0L12.0,13.4L8.4,17.0L7.0,15.6l3.6,-3.6L7.0,8.4L8.4,7.0l3.6,3.6L15.6,7.0L17.0,8.4L13.4,12.0L17.0,15.6z"/>
+</vector>
diff --git a/res/drawable-v21/ic_check_24dp.xml b/res/drawable-v21/ic_check_24dp.xml
new file mode 100644
index 0000000..53f0018
--- /dev/null
+++ b/res/drawable-v21/ic_check_24dp.xml
@@ -0,0 +1,27 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:pathData="M0 0h24v24h-24z"
+        android:fillColor="#00000000"/>
+    <path
+        android:fillColor="#8a000000"
+        android:pathData="M9.0,16.17l-4.17,-4.17 -1.42,1.41 5.59,5.59 12.0,-12.0 -1.41,-1.41z"/>
+</vector>
diff --git a/res/drawable-v21/ic_close_24dp.xml b/res/drawable-v21/ic_close_24dp.xml
new file mode 100644
index 0000000..3d2f353
--- /dev/null
+++ b/res/drawable-v21/ic_close_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#8a000000"
+        android:pathData="M19.0,6.4l-1.4,-1.4 -5.6,5.6 -5.6,-5.6 -1.4,1.4 5.6,5.6 -5.6,5.6 1.4,1.4 5.6,-5.6 5.6,5.6 1.4,-1.4 -5.6,-5.6z"/>
+</vector>
diff --git a/res/drawable-v21/ic_close_wht_24dp.xml b/res/drawable-v21/ic_close_wht_24dp.xml
new file mode 100644
index 0000000..61fcb17
--- /dev/null
+++ b/res/drawable-v21/ic_close_wht_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#ffffffff"
+        android:pathData="M19.0,6.4l-1.4,-1.4 -5.6,5.6 -5.6,-5.6 -1.4,1.4 5.6,5.6 -5.6,5.6 1.4,1.4 5.6,-5.6 5.6,5.6 1.4,-1.4 -5.6,-5.6z"/>
+</vector>
diff --git a/res/drawable-v21/ic_cv_loading_24dp.xml b/res/drawable-v21/ic_cv_loading_24dp.xml
new file mode 100644
index 0000000..34a770d
--- /dev/null
+++ b/res/drawable-v21/ic_cv_loading_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#8a000000"
+        android:pathData="M17.6,6.4C16.2,4.9 14.2,4.0 12.0,4.0c-4.4,0.0 -8.0,3.6 -8.0,8.0s3.6,8.0 8.0,8.0c3.7,0.0 6.8,-2.6 7.7,-6.0l-2.1,0.0c-0.8,2.3 -3.0,4.0 -5.6,4.0c-3.3,0.0 -6.0,-2.7 -6.0,-6.0s2.7,-6.0 6.0,-6.0c1.7,0.0 3.1,0.7 4.2,1.8L13.0,11.0l7.0,0.0L20.0,4.0L17.6,6.4z"/>
+</vector>
diff --git a/res/drawable-v21/ic_delete_wht_24dp.xml b/res/drawable-v21/ic_delete_wht_24dp.xml
new file mode 100644
index 0000000..8cd047f
--- /dev/null
+++ b/res/drawable-v21/ic_delete_wht_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#ffffffff"
+        android:pathData="M6.0,19.0c0.0,1.1 0.9,2.0 2.0,2.0l8.0,0.0c1.1,0.0 2.0,-0.9 2.0,-2.0L18.0,7.0L6.0,7.0L6.0,19.0zM19.0,4.0l-3.5,0.0l-1.0,-1.0l-5.0,0.0l-1.0,1.0L5.0,4.0l0.0,2.0l14.0,0.0L19.0,4.0z"/>
+</vector>
diff --git a/res/drawable-v21/ic_drawer_accnt_check_24dp.xml b/res/drawable-v21/ic_drawer_accnt_check_24dp.xml
new file mode 100644
index 0000000..0cf2237
--- /dev/null
+++ b/res/drawable-v21/ic_drawer_accnt_check_24dp.xml
@@ -0,0 +1,27 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:pathData="M0 0h24v24h-24z"
+        android:fillColor="#00000000"/>
+    <path
+        android:fillColor="#ff000000"
+        android:pathData="M9.0,16.17l-4.17,-4.17 -1.42,1.41 5.59,5.59 12.0,-12.0 -1.41,-1.41z"/>
+</vector>
diff --git a/res/drawable-v21/ic_drawer_drafts_24dp.xml b/res/drawable-v21/ic_drawer_drafts_24dp.xml
new file mode 100644
index 0000000..b7978f4
--- /dev/null
+++ b/res/drawable-v21/ic_drawer_drafts_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#8a000000"
+        android:pathData="M6.0,2.0C4.9,2.0 4.0,2.9 4.0,4.0l0.0,16.0c0.0,1.1 0.9,2.0 2.0,2.0l12.0,0.0c1.1,0.0 2.0,-0.9 2.0,-2.0L20.0,8.0l-6.0,-6.0L6.0,2.0zM13.0,9.0L13.0,3.5L18.5,9.0L13.0,9.0z"/>
+</vector>
diff --git a/res/drawable-v21/ic_drawer_folder_24dp.xml b/res/drawable-v21/ic_drawer_folder_24dp.xml
new file mode 100644
index 0000000..dce6bb0
--- /dev/null
+++ b/res/drawable-v21/ic_drawer_folder_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#8a000000"
+        android:pathData="M10.0,4.0L4.0,4.0C2.9,4.0 2.0,4.9 2.0,6.0l0.0,12.0c0.0,1.1 0.9,2.0 2.0,2.0l16.0,0.0c1.1,0.0 2.0,-0.9 2.0,-2.0L22.0,8.0c0.0,-1.1 -0.9,-2.0 -2.0,-2.0l-8.0,0.0L10.0,4.0z"/>
+</vector>
diff --git a/res/drawable-v21/ic_drawer_help_24dp.xml b/res/drawable-v21/ic_drawer_help_24dp.xml
new file mode 100644
index 0000000..27cb28c
--- /dev/null
+++ b/res/drawable-v21/ic_drawer_help_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#8a000000"
+        android:pathData="M12.0,2.0C6.5,2.0 2.0,6.5 2.0,12.0s4.5,10.0 10.0,10.0c5.5,0.0 10.0,-4.5 10.0,-10.0S17.5,2.0 12.0,2.0zM13.0,19.0l-2.0,0.0l0.0,-2.0l2.0,0.0L13.0,19.0zM15.1,11.3l-0.9,0.9C13.4,12.9 13.0,13.5 13.0,15.0l-2.0,0.0l0.0,-0.5c0.0,-1.1 0.4,-2.1 1.2,-2.8l1.2,-1.3C13.8,10.1 14.0,9.6 14.0,9.0c0.0,-1.1 -0.9,-2.0 -2.0,-2.0c-1.1,0.0 -2.0,0.9 -2.0,2.0L8.0,9.0c0.0,-2.2 1.8,-4.0 4.0,-4.0c2.2,0.0 4.0,1.8 4.0,4.0C16.0,9.9 15.6,10.7 15.1,11.3z"/>
+</vector>
diff --git a/res/drawable-v21/ic_drawer_inbox_24dp.xml b/res/drawable-v21/ic_drawer_inbox_24dp.xml
new file mode 100644
index 0000000..c8b53ed
--- /dev/null
+++ b/res/drawable-v21/ic_drawer_inbox_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#8a000000"
+        android:pathData="M19.0,3.0L4.99,3.0C3.885,3.0 3.009,3.896 3.009,5.0L3.0,19.0C3.0,20.104 3.885,21.0 4.99,21.0L19.0,21.0C20.104,21.0 21.0,20.104 21.0,19.0L21.0,5.0C21.0,3.896 20.104,3.0 19.0,3.0L19.0,3.0ZM19.0,15.0L15.0,15.0C15.0,16.657 13.657,18.0 12.0,18.0C10.343,18.0 9.0,16.657 9.0,15.0L4.99,15.0L4.99,5.0L19.0,5.0L19.0,15.0L19.0,15.0Z"/>
+</vector>
diff --git a/res/drawable-v21/ic_drawer_outbox_24dp.xml b/res/drawable-v21/ic_drawer_outbox_24dp.xml
new file mode 100644
index 0000000..83ba35e
--- /dev/null
+++ b/res/drawable-v21/ic_drawer_outbox_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#8a000000"
+        android:pathData="M19.777779,2.0L4.211111,2.0C2.9833333,2.0 2.01,2.9955556 2.01,4.2222223L2.0,19.777779C2.0,21.004444 2.9833333,22.0 4.211111,22.0L19.777779,22.0C21.004444,22.0 22.0,21.004444 22.0,19.777779L22.0,4.2222223C22.0,2.9955556 21.004444,2.0 19.777779,2.0ZM6.0061903,18.0L19.0,12.0L6.0061903,6.0L6.0,10.666667L15.285714,12.0L6.0,13.333333L6.0061903,18.0Z"/>
+</vector>
diff --git a/res/drawable-v21/ic_drawer_sent_24dp.xml b/res/drawable-v21/ic_drawer_sent_24dp.xml
new file mode 100644
index 0000000..b7dd439
--- /dev/null
+++ b/res/drawable-v21/ic_drawer_sent_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#8a000000"
+        android:pathData="M2.0,21.0l21.0,-9.0 -21.0,-9.0 0.0,7.0 15.0,2.0 -15.0,2.0z"/>
+</vector>
diff --git a/res/drawable-v21/ic_drawer_settings_24dp.xml b/res/drawable-v21/ic_drawer_settings_24dp.xml
new file mode 100644
index 0000000..1bd6c19
--- /dev/null
+++ b/res/drawable-v21/ic_drawer_settings_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#8a000000"
+        android:pathData="M19.4,13.0c0.0,-0.3 0.1,-0.6 0.1,-1.0s0.0,-0.7 -0.1,-1.0l2.1,-1.7c0.2,-0.2 0.2,-0.4 0.1,-0.6l-2.0,-3.5C19.5,5.1 19.3,5.0 19.0,5.1l-2.5,1.0c-0.5,-0.4 -1.1,-0.7 -1.7,-1.0l-0.4,-2.6C14.5,2.2 14.2,2.0 14.0,2.0l-4.0,0.0C9.8,2.0 9.5,2.2 9.5,2.4L9.1,5.1C8.5,5.3 8.0,5.7 7.4,6.1L5.0,5.1C4.7,5.0 4.5,5.1 4.3,5.3l-2.0,3.5C2.2,8.9 2.3,9.2 2.5,9.4L4.6,11.0c0.0,0.3 -0.1,0.6 -0.1,1.0s0.0,0.7 0.1,1.0l-2.1,1.7c-0.2,0.2 -0.2,0.4 -0.1,0.6l2.0,3.5C4.5,18.9 4.7,19.0 5.0,18.9l2.5,-1.0c0.5,0.4 1.1,0.7 1.7,1.0l0.4,2.6c0.0,0.2 0.2,0.4 0.5,0.4l4.0,0.0c0.2,0.0 0.5,-0.2 0.5,-0.4l0.4,-2.6c0.6,-0.3 1.2,-0.6 1.7,-1.0l2.5,1.0c0.2,0.1 0.5,0.0 0.6,-0.2l2.0,-3.5c0.1,-0.2 0.1,-0.5 -0.1,-0.6L19.4,13.0zM12.0,15.5c-1.9,0.0 -3.5,-1.6 -3.5,-3.5s1.6,-3.5 3.5,-3.5s3.5,1.6 3.5,3.5S13.9,15.5 12.0,15.5z"/>
+</vector>
diff --git a/res/drawable-v21/ic_drawer_starred_24dp.xml b/res/drawable-v21/ic_drawer_starred_24dp.xml
new file mode 100644
index 0000000..c2b8076
--- /dev/null
+++ b/res/drawable-v21/ic_drawer_starred_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#8a000000"
+        android:pathData="M12.0,17.273l6.18,3.726999 -1.635,-7.029 5.455,-4.726999 -7.191,-0.617001 -2.809,-6.627 -2.809,6.627 -7.191,0.617001 5.455,4.726999 -1.635,7.029z"/>
+</vector>
diff --git a/res/drawable-v21/ic_drawer_trash_24dp.xml b/res/drawable-v21/ic_drawer_trash_24dp.xml
new file mode 100644
index 0000000..3e87cf9
--- /dev/null
+++ b/res/drawable-v21/ic_drawer_trash_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#8a000000"
+        android:pathData="M6.0,19.0c0.0,1.1 0.9,2.0 2.0,2.0l8.0,0.0c1.1,0.0 2.0,-0.9 2.0,-2.0L18.0,7.0L6.0,7.0L6.0,19.0zM19.0,4.0l-3.5,0.0l-1.0,-1.0l-5.0,0.0l-1.0,1.0L5.0,4.0l0.0,2.0l14.0,0.0L19.0,4.0z"/>
+</vector>
diff --git a/res/drawable-v21/ic_drawer_unread_24dp.xml b/res/drawable-v21/ic_drawer_unread_24dp.xml
new file mode 100644
index 0000000..dd06985
--- /dev/null
+++ b/res/drawable-v21/ic_drawer_unread_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#8a000000"
+        android:pathData="M22.0,8.0c0.0,-0.7 -0.4,-1.3 -0.9,-1.7L12.0,1.0L2.9,6.3C2.4,6.7 2.0,7.3 2.0,8.0l0.0,10.0c0.0,1.1 0.9,2.0 2.0,2.0l16.0,0.0c1.1,0.0 2.0,-0.9 2.0,-2.0L22.0,8.0zM12.0,13.0L3.7,7.8L12.0,3.0l8.3,4.8L12.0,13.0z"/>
+</vector>
diff --git a/res/drawable-v21/ic_drop_down_24dp.xml b/res/drawable-v21/ic_drop_down_24dp.xml
new file mode 100644
index 0000000..f6234be
--- /dev/null
+++ b/res/drawable-v21/ic_drop_down_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#8a000000"
+        android:pathData="M7.0,10.0l5.0,5.0 5.0,-5.0z"/>
+</vector>
diff --git a/res/drawable-v21/ic_drop_up_24dp.xml b/res/drawable-v21/ic_drop_up_24dp.xml
new file mode 100644
index 0000000..5ec36b7
--- /dev/null
+++ b/res/drawable-v21/ic_drop_up_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#8a000000"
+        android:pathData="M7.0,14.0l5.0,-5.0 5.0,5.0z"/>
+</vector>
diff --git a/res/drawable-v21/ic_empty_default.xml b/res/drawable-v21/ic_empty_default.xml
new file mode 100644
index 0000000..ab49e8d
--- /dev/null
+++ b/res/drawable-v21/ic_empty_default.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="120.0dp"
+        android:height="120.0dp"
+        android:viewportWidth="120.0"
+        android:viewportHeight="120.0">
+    <path
+        android:fillColor="#1e000000"
+        android:pathData="M106.667,0.0l-93.4,0.0c-7.36,0.0 -13.2,5.973 -13.2,13.333L0.0,106.667c0.0,7.36 5.907,13.333 13.267,13.333l93.4,0.0c7.36,0.0 13.333,-5.973 13.333,-13.333L120.0,13.333C120.001,5.973 114.027,0.0 106.667,0.0zM106.667,80.0L80.0,80.0c0.0,11.04 -8.953,20.0 -20.0,20.0c-11.04,0.0 -20.0,-8.96 -20.0,-20.0L13.267,80.0L13.267,13.333l93.4,0.0L106.667,80.0z"/>
+</vector>
diff --git a/res/drawable-v21/ic_empty_inbox.xml b/res/drawable-v21/ic_empty_inbox.xml
new file mode 100644
index 0000000..5006751
--- /dev/null
+++ b/res/drawable-v21/ic_empty_inbox.xml
@@ -0,0 +1,33 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="120.0dp"
+        android:height="120.0dp"
+        android:viewportWidth="120.0"
+        android:viewportHeight="120.0">
+    <path
+        android:fillColor="#1e000000"
+        android:pathData="M120.0,35.147423L93.98335,26.017664L84.8535,0.0L60.00065,11.941811L35.146503,0.0L26.017946,26.017664L0.0,35.147423L11.94194,60.0L0.0,84.85258L26.017946,93.98234L35.146503,120.0L60.00065,108.05819L84.8535,120.0L93.98335,93.98234L120.0,84.85258L108.05936,60.0L120.0,35.147423L120.0,35.147423ZM60.87031,103.18841C37.49792,103.18841 18.550724,84.24271 18.550724,60.87031C18.550724,37.49792 37.49792,18.550724 60.87031,18.550724C84.24121,18.550724 103.18841,37.49792 103.18841,60.87031C103.18841,84.24271 84.24121,103.18841 60.87031,103.18841L60.87031,103.18841Z"/>
+    <path
+        android:fillColor="#1e000000"
+        android:pathData="M48.11594,53.04348C48.11594,55.44596 46.168858,57.391304 43.76883,57.391304C41.364525,57.391304 39.420288,55.44596 39.420288,53.04348C39.420288,50.640995 41.364525,48.695652 43.76883,48.695652C46.168858,48.695652 48.11594,50.640995 48.11594,53.04348"/>
+    <path
+        android:fillColor="#1e000000"
+        android:pathData="M79.42029,53.04348C79.42029,55.44596 77.474945,57.391304 75.072464,57.391304C72.66998,57.391304 70.72464,55.44596 70.72464,53.04348C70.72464,50.640995 72.66998,48.695652 75.072464,48.695652C77.474945,48.695652 79.42029,50.640995 79.42029,53.04348"/>
+    <path
+        android:fillColor="#1e000000"
+        android:pathData="M59.960762,76.521736C56.727516,76.521736 53.628857,75.39135 51.46293,73.42202C50.239113,72.30343 50.085747,70.325676 51.12176,69.00493C52.159344,67.687546 53.991932,67.52077 55.222008,68.635994C57.469315,70.682816 62.54454,70.65586 64.74334,68.59556C65.95463,67.458435 67.795044,67.599945 68.848274,68.898796C69.90464,70.204384 69.77944,72.18214 68.56658,73.31757C66.39596,75.354294 63.25974,76.521736 59.960762,76.521736"/>
+</vector>
diff --git a/res/drawable-v21/ic_empty_search.xml b/res/drawable-v21/ic_empty_search.xml
new file mode 100644
index 0000000..98216aa
--- /dev/null
+++ b/res/drawable-v21/ic_empty_search.xml
@@ -0,0 +1,33 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="168.0dp"
+        android:height="120.0dp"
+        android:viewportWidth="168.0"
+        android:viewportHeight="120.0">
+    <path
+        android:fillColor="#1e000000"
+        android:pathData="M35.938198,120.0C16.121574,120.0 0.0,103.86999 0.0,84.04493C0.0,68.91421 9.302471,55.7046 23.126493,50.468014C22.787764,48.28352 22.617432,46.110645 22.617432,43.97069C22.617432,19.724356 42.33147,0.0 66.565125,0.0C83.85386,0.0 99.228294,9.981279 106.37451,25.34052C110.79348,23.556904 115.516335,22.629269 120.28371,22.629269C140.88037,22.629269 157.63489,39.394485 157.63489,60.0C157.63489,62.759666 157.32326,65.51546 156.7058,68.228645C163.75137,73.65503 168.0,82.118004 168.0,91.115486C168.0,106.55607 155.57928,119.38803 140.20872,119.961266C140.00935,119.98644 139.80612,120.0 139.60095,120.0L35.938198,120.0L35.938198,120.0ZM40.287903,110.27027L139.06424,110.27027C139.18796,110.25866 139.31363,110.25092 139.44122,110.248985C149.80159,110.04777 158.23256,101.4514 158.23256,91.08662C158.23256,84.26447 154.54582,77.89894 148.61263,74.47433C146.6233,73.32504 145.7166,70.93362 146.44157,68.75309C147.3966,65.8915 147.87993,62.946716 147.87993,60.0C147.87993,44.745945 135.48189,32.338 120.24003,32.338C115.337265,32.338 110.4925,33.66915 106.22772,36.190212C104.96336,36.938984 103.424484,37.07055 102.0538,36.546215C100.679245,36.025753 99.61788,34.905495 99.167435,33.504692C94.60493,19.283829 81.51092,9.72973 66.58611,9.72973C47.713573,9.72973 32.357647,25.096003 32.357647,43.985565C32.357647,46.783302 32.740433,49.67778 33.494408,52.589672C33.82113,53.8473 33.627804,55.184254 32.95696,56.298706C32.286118,57.41316 31.195755,58.2103 29.9314,58.510197C18.059217,61.327282 9.767442,71.817825 9.767442,84.02262C9.767442,98.49501 21.533295,110.27027 35.99605,110.27027C36.24931,110.27027 36.502567,110.264465 36.753895,110.25479L40.287903,110.27027L40.287903,110.27027Z"/>
+    <path
+        android:fillColor="#1e000000"
+        android:pathData="M69.023254,60.648647C69.023254,63.695793 66.54541,66.16216 63.488373,66.16216C60.42942,66.16216 57.953487,63.695793 57.953487,60.648647C57.953487,57.603416 60.42942,55.135136 63.488373,55.135136C66.54541,55.135136 69.023254,57.603416 69.023254,60.648647"/>
+    <path
+        android:fillColor="#1e000000"
+        android:pathData="M110.69768,60.648647C110.69768,63.695793 108.222176,66.16216 105.161835,66.16216C102.10532,66.16216 99.62791,63.695793 99.62791,60.648647C99.62791,57.603416 102.10532,55.135136 105.161835,55.135136C108.222176,55.135136 110.69768,57.603416 110.69768,60.648647"/>
+    <path
+        android:fillColor="#1e000000"
+        android:pathData="M84.373985,81.72973C88.44683,81.72973 92.34686,83.08095 95.073616,85.430885C96.619415,86.76251 96.81144,89.12421 95.50759,90.69866C94.19798,92.271164 91.88984,92.46895 90.34212,91.13732C87.51167,88.69534 81.11916,88.72863 78.35208,91.19215C76.82356,92.54728 74.50774,92.37691 73.18085,90.82595C71.852036,89.27107 72.00949,86.90351 73.536095,85.55425C76.26861,83.12402 80.22048,81.72973 84.373985,81.72973"/>
+</vector>
diff --git a/res/drawable-v21/ic_empty_spam.xml b/res/drawable-v21/ic_empty_spam.xml
new file mode 100644
index 0000000..4dbaf53
--- /dev/null
+++ b/res/drawable-v21/ic_empty_spam.xml
@@ -0,0 +1,33 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="120.0dp"
+        android:height="120.0dp"
+        android:viewportWidth="120.0"
+        android:viewportHeight="120.0">
+    <path
+        android:fillColor="#1e000000"
+        android:pathData="M33.0,50.0C33.0,52.76334 30.760263,55.0 28.000866,55.0C25.236273,55.0 23.0,52.76334 23.0,50.0C23.0,47.23839 25.236273,45.0 28.000866,45.0C30.760263,45.0 33.0,47.23839 33.0,50.0"/>
+    <path
+        android:fillColor="#1e000000"
+        android:pathData="M58.955223,50.0C58.955223,52.76334 56.718952,55.0 53.954357,55.0C51.19323,55.0 48.955223,52.76334 48.955223,50.0C48.955223,47.23839 51.19323,45.0 53.954357,45.0C56.718952,45.0 58.955223,47.23839 58.955223,50.0"/>
+    <path
+        android:fillColor="#1e000000"
+        android:pathData="M118.40214,33.54919L86.4503,1.5996603C85.42752,0.57507694 84.03895,0.0 82.59031,0.0L37.407867,0.0C35.959236,0.0 34.572475,0.57507694 33.54788,1.5996603L1.5978646,33.54919C0.5732658,34.571953 0.0,35.96051 0.0,37.409122L0.0,82.59088C0.0,84.03949 0.5732658,85.42805 1.5978646,86.45081L33.54788,118.40034C34.572475,119.42493 35.959236,120.0 37.407867,120.0L82.59031,120.0C84.03895,120.0 85.42752,119.42493 86.4503,118.40034L118.40214,86.45081C119.426735,85.42805 120.0,84.03949 120.0,82.59088L120.0,37.409122C120.0,35.96051 119.426735,34.571953 118.40214,33.54919L118.40214,33.54919ZM97.4515,63.969006L90.632805,64.0L89.0,38.305336C89.0,38.305336 89.0,37.0 90.27443,37.0L97.915276,37.0C97.915276,37.0 99.09197,37.0 98.99423,38.49129L97.4515,63.969006L97.4515,63.969006ZM98.95522,74.00201C98.95522,76.76326 96.71648,79.0 93.95522,79.0C91.19397,79.0 88.95522,76.76326 88.95522,74.00201C88.95522,71.23875 91.19397,69.0 93.95522,69.0C96.71648,69.0 98.95522,71.23875 98.95522,74.00201L98.95522,74.00201ZM10.746268,79.978264L10.746268,39.424725L39.56125,10.746268L45.13528,10.746268C61.74612,20.92232 72.83582,39.159702 72.83582,59.99828C72.83582,80.44114 62.156513,98.37176 46.06733,108.656715L39.56125,108.656715L10.746268,79.978264L10.746268,79.978264Z"/>
+    <path
+        android:fillColor="#1e000000"
+        android:pathData="M40.008118,77.25373C36.96599,77.25373 34.052753,76.2115 32.013485,74.400154C30.86055,73.37279 30.71577,71.554 31.692146,70.34086C32.66852,69.127716 34.393513,68.97537 35.54998,70.000885C37.66517,71.88469 42.439346,71.85868 44.50863,69.96001C45.649204,68.915924 47.379494,69.045975 48.371758,70.24054C49.364025,71.43882 49.24573,73.26504 48.105152,74.305405C46.06412,76.179924 43.11204,77.25373 40.008118,77.25373"/>
+</vector>
diff --git a/res/drawable-v21/ic_empty_trash.xml b/res/drawable-v21/ic_empty_trash.xml
new file mode 100644
index 0000000..9cfc6e8
--- /dev/null
+++ b/res/drawable-v21/ic_empty_trash.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="130.0dp"
+        android:height="120.0dp"
+        android:viewportWidth="130.0"
+        android:viewportHeight="120.0">
+    <path
+        android:fillColor="#1e000000"
+        android:pathData="M127.455,70.688l-6.304,-14.125c-1.424,-3.191 -5.198,-4.638 -8.412,-3.226l-6.219,2.735c-8.479,-13.163 -18.638,-20.733 -25.286,-17.809l-2.082,0.916l2.323,-21.125c0.065,-0.348 0.106,-0.7 0.117,-1.054l0.007,-0.066l-0.004,0.0c0.002,-0.053 0.009,-0.105 0.009,-0.157C81.606,7.511 63.337,0.0 40.804,0.0C18.268,0.0 0.0,7.511 0.0,16.777c0.0,0.052 0.007,0.103 0.009,0.157L0.006,16.934L0.013,17.0c0.011,0.354 0.052,0.706 0.117,1.054l9.09,82.675l0.078,0.0c0.507,9.028 14.4,16.27 31.504,16.27c17.106,0.0 30.999,-7.242 31.506,-16.27l0.078,0.0l3.211,-29.204c1.114,3.773 2.544,7.681 4.302,11.624c9.125,20.451 23.442,33.989 31.976,30.238l2.407,-1.058c6.65,-2.923 7.825,-15.478 3.705,-30.554l6.219,-2.735C127.42,77.628 128.877,73.881 127.455,70.688L127.455,70.688zM41.001,32.0C22.223,32.0 7.0,26.179 7.0,18.999S22.223,6.0 41.001,6.0C59.779,6.0 75.0,11.82 75.0,18.999S59.779,32.0 41.001,32.0L41.001,32.0zM122.02,73.783l-5.646,2.467c-0.901,-2.612 -1.951,-5.269 -3.151,-7.947c-1.202,-2.675 -2.493,-5.228 -3.848,-7.645l5.644,-2.465c0.406,-0.177 0.888,0.004 1.067,0.409l6.345,14.127C122.611,73.134 122.427,73.606 122.02,73.783L122.02,73.783z"/>
+</vector>
diff --git a/res/drawable-v21/ic_expand_more_24dp.xml b/res/drawable-v21/ic_expand_more_24dp.xml
new file mode 100644
index 0000000..f394179
--- /dev/null
+++ b/res/drawable-v21/ic_expand_more_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#8a000000"
+        android:pathData="M16.6,8.6l-4.6,4.599999 -4.6,-4.599999 -1.4,1.4 6.0,6.0 6.0,-6.0z"/>
+</vector>
diff --git a/res/drawable-v21/ic_folder_parent_24dp.xml b/res/drawable-v21/ic_folder_parent_24dp.xml
new file mode 100644
index 0000000..4a26931
--- /dev/null
+++ b/res/drawable-v21/ic_folder_parent_24dp.xml
@@ -0,0 +1,27 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#8a000000"
+        android:pathData="M2.0,6.033888L2.0,18.0C2.0,19.104 2.896,20.0 4.0,20.0L20.978577,20.0L20.978577,18.0L4.0,18.0L4.0,6.033888L2.0,6.033888Z"/>
+    <path
+        android:fillColor="#8a000000"
+        android:pathData="M6.7,3.0C5.76075,3.0 5.0085,3.783125 5.0085,4.75L5.0,15.25C5.0,16.216 5.76075,17.0 6.7,17.0L20.3,17.0C21.2384,17.0 22.0,16.216 22.0,15.25L22.0,6.5C22.0,5.533125 21.431126,4.9974437 20.492725,4.9974437L13.017483,4.9974437L12.0,3.0L6.7,3.0Z"/>
+</vector>
diff --git a/res/drawable-v21/ic_forward_24dp.xml b/res/drawable-v21/ic_forward_24dp.xml
new file mode 100644
index 0000000..bbc9388
--- /dev/null
+++ b/res/drawable-v21/ic_forward_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#8a000000"
+        android:pathData="M12.0,8.0l0.0,-4.0 8.0,8.0 -8.0,8.0 0.0,-4.0 -8.0,0.0 0.0,-8.0z"/>
+</vector>
diff --git a/res/drawable-v21/ic_history_24dp.xml b/res/drawable-v21/ic_history_24dp.xml
new file mode 100644
index 0000000..1564106
--- /dev/null
+++ b/res/drawable-v21/ic_history_24dp.xml
@@ -0,0 +1,27 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:pathData="M0 0h24v24h-24z"
+        android:fillColor="#00000000"/>
+    <path
+        android:fillColor="#8a000000"
+        android:pathData="M13.0,3.0c-4.97,0.0 -9.0,4.03 -9.0,9.0l-3.0,0.0l3.89,3.89 0.07,0.14 4.04,-4.03l-3.0,0.0c0.0,-3.87 3.13,-7.0 7.0,-7.0s7.0,3.13 7.0,7.0 -3.13,7.0 -7.0,7.0c-1.93,0.0 -3.68,-0.79 -4.94,-2.06l-1.42,1.42c1.63,1.63 3.87,2.64 6.36,2.64 4.97,0.0 9.0,-4.03 9.0,-9.0s-4.03,-9.0 -9.0,-9.0zm-1.0,5.0l0.0,5.0l4.28,2.54 0.72,-1.21 -3.5,-2.08l0.0,-4.25l-1.5,0.0z"/>
+</vector>
diff --git a/res/drawable-v21/ic_mark_read_wht_24dp.xml b/res/drawable-v21/ic_mark_read_wht_24dp.xml
new file mode 100644
index 0000000..db6222b
--- /dev/null
+++ b/res/drawable-v21/ic_mark_read_wht_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#ffffffff"
+        android:pathData="M20.0,4.0L4.0,4.0C2.9,4.0 2.0,4.9 2.0,6.0l0.0,12.0c0.0,1.1 0.9,2.0 2.0,2.0l16.0,0.0c1.1,0.0 2.0,-0.9 2.0,-2.0L22.0,6.0C22.0,4.9 21.1,4.0 20.0,4.0zM20.0,8.0l-8.0,5.0L4.0,8.0L4.0,6.0l8.0,5.0l8.0,-5.0L20.0,8.0z"/>
+</vector>
diff --git a/res/drawable-v21/ic_mark_unread_wht_24dp.xml b/res/drawable-v21/ic_mark_unread_wht_24dp.xml
new file mode 100644
index 0000000..dd06985
--- /dev/null
+++ b/res/drawable-v21/ic_mark_unread_wht_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#8a000000"
+        android:pathData="M22.0,8.0c0.0,-0.7 -0.4,-1.3 -0.9,-1.7L12.0,1.0L2.9,6.3C2.4,6.7 2.0,7.3 2.0,8.0l0.0,10.0c0.0,1.1 0.9,2.0 2.0,2.0l16.0,0.0c1.1,0.0 2.0,-0.9 2.0,-2.0L22.0,8.0zM12.0,13.0L3.7,7.8L12.0,3.0l8.3,4.8L12.0,13.0z"/>
+</vector>
diff --git a/res/drawable-v21/ic_menu_search.xml b/res/drawable-v21/ic_menu_search.xml
new file mode 100644
index 0000000..4ea382a
--- /dev/null
+++ b/res/drawable-v21/ic_menu_search.xml
@@ -0,0 +1,27 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#ffffffff"
+        android:pathData="M15.5,14.0l-0.79,0.0l-0.28,-0.27c0.98,-1.14 1.57,-2.62 1.57,-4.23 0.0,-3.59 -2.91,-6.5 -6.5,-6.5s-6.5,2.91 -6.5,6.5 2.91,6.5 6.5,6.5c1.61,0.0 3.09,-0.59 4.23,-1.57l0.27,0.28l0.0,0.79l5.0,4.99 1.49,-1.49 -4.99,-5.0zm-6.0,0.0c-2.49,0.0 -4.5,-2.01 -4.5,-4.5s2.01,-4.5 4.5,-4.5 4.5,2.01 4.5,4.5 -2.01,4.5 -4.5,4.5z"/>
+    <path
+        android:pathData="M0 0h24v24h-24z"
+        android:fillColor="#00000000"/>
+</vector>
diff --git a/res/drawable-v21/ic_menu_wht_24dp.xml b/res/drawable-v21/ic_menu_wht_24dp.xml
new file mode 100644
index 0000000..6122e6f
--- /dev/null
+++ b/res/drawable-v21/ic_menu_wht_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#ffffffff"
+        android:pathData="M3.0,18.0l18.0,0.0l0.0,-2.0L3.0,16.0L3.0,18.0zM3.0,13.0l18.0,0.0l0.0,-2.0L3.0,11.0L3.0,13.0zM3.0,6.0l0.0,2.0l18.0,0.0L21.0,6.0L3.0,6.0z"/>
+</vector>
diff --git a/res/drawable-v21/ic_mic_24dp.xml b/res/drawable-v21/ic_mic_24dp.xml
new file mode 100644
index 0000000..fdb6126
--- /dev/null
+++ b/res/drawable-v21/ic_mic_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#8a000000"
+        android:pathData="M12.0,14.0c1.7,0.0 3.0,-1.3 3.0,-3.0l0.0,-6.0c0.0,-1.7 -1.3,-3.0 -3.0,-3.0c-1.7,0.0 -3.0,1.3 -3.0,3.0l0.0,6.0C9.0,12.7 10.3,14.0 12.0,14.0zM17.3,11.0c0.0,3.0 -2.5,5.1 -5.3,5.1c-2.8,0.0 -5.3,-2.1 -5.3,-5.1L5.0,11.0c0.0,3.4 2.7,6.2 6.0,6.7L11.0,21.0l2.0,0.0l0.0,-3.3c3.3,-0.5 6.0,-3.3 6.0,-6.7L17.3,11.000001z"/>
+</vector>
diff --git a/res/drawable-v21/ic_mic_wht_24dp.xml b/res/drawable-v21/ic_mic_wht_24dp.xml
new file mode 100644
index 0000000..e4bd318
--- /dev/null
+++ b/res/drawable-v21/ic_mic_wht_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#ffffffff"
+        android:pathData="M12.0,14.0c1.7,0.0 3.0,-1.3 3.0,-3.0l0.0,-6.0c0.0,-1.7 -1.3,-3.0 -3.0,-3.0c-1.7,0.0 -3.0,1.3 -3.0,3.0l0.0,6.0C9.0,12.7 10.3,14.0 12.0,14.0zM17.3,11.0c0.0,3.0 -2.5,5.1 -5.3,5.1c-2.8,0.0 -5.3,-2.1 -5.3,-5.1L5.0,11.0c0.0,3.4 2.7,6.2 6.0,6.7L11.0,21.0l2.0,0.0l0.0,-3.3c3.3,-0.5 6.0,-3.3 6.0,-6.7L17.3,11.000001z"/>
+</vector>
diff --git a/res/drawable-v21/ic_move_to_inbox_wht_24dp.xml b/res/drawable-v21/ic_move_to_inbox_wht_24dp.xml
new file mode 100644
index 0000000..7d5aac0
--- /dev/null
+++ b/res/drawable-v21/ic_move_to_inbox_wht_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#ffffffff"
+        android:pathData="M19.0,3.0L5.0,3.0C3.9,3.0 3.0,3.9 3.0,5.0l0.0,14.0c0.0,1.1 0.9,2.0 2.0,2.0l14.0,0.0c1.1,0.0 2.0,-0.9 2.0,-2.0L21.0,5.0C21.0,3.9 20.1,3.0 19.0,3.0zM19.0,15.0l-4.0,0.0c0.0,1.7 -1.3,3.0 -3.0,3.0c-1.7,0.0 -3.0,-1.3 -3.0,-3.0L5.0,15.0L5.0,5.0l14.0,0.0L19.0,15.0zM16.0,10.0l-2.0,0.0L14.0,7.0l-4.0,0.0l0.0,3.0L8.0,10.0l4.0,4.0L16.0,10.0z"/>
+</vector>
diff --git a/res/drawable-v21/ic_move_to_wht_24dp.xml b/res/drawable-v21/ic_move_to_wht_24dp.xml
new file mode 100644
index 0000000..3be9cc0
--- /dev/null
+++ b/res/drawable-v21/ic_move_to_wht_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#ffffffff"
+        android:pathData="M20.0,6.0l-8.0,0.0l-2.0,-2.0L4.0,4.0C2.9,4.0 2.0,4.9 2.0,6.0l0.0,12.0c0.0,1.1 0.9,2.0 2.0,2.0l16.0,0.0c1.1,0.0 2.0,-0.9 2.0,-2.0L22.0,8.0C22.0,6.9 21.1,6.0 20.0,6.0zM9.0,18.0l0.0,-3.0L5.0,15.0l0.0,-4.0l4.0,0.0L9.0,8.0l5.0,5.0L9.0,18.0z"/>
+</vector>
diff --git a/res/drawable-v21/ic_next_24dp.xml b/res/drawable-v21/ic_next_24dp.xml
new file mode 100644
index 0000000..91577e1
--- /dev/null
+++ b/res/drawable-v21/ic_next_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#8a000000"
+        android:pathData="M8.6,16.3l4.599999,-4.499999 -4.599999,-4.6 1.4,-1.4 6.0,6.0 -6.0,5.999999z"/>
+</vector>
diff --git a/res/drawable-v21/ic_notification_anonymous_avatar_32dp.xml b/res/drawable-v21/ic_notification_anonymous_avatar_32dp.xml
new file mode 100644
index 0000000..45c5207
--- /dev/null
+++ b/res/drawable-v21/ic_notification_anonymous_avatar_32dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="32.0dp"
+        android:height="32.0dp"
+        android:viewportWidth="32.0"
+        android:viewportHeight="32.0">
+    <path
+        android:fillColor="#ffffffff"
+        android:pathData="M16.5,16.0C19.536,16.0 22.0,13.534625 22.0,10.5C22.0,7.464 19.536,5.0 16.5,5.0C13.464,5.0 11.0,7.464 11.0,10.5C11.0,13.534625 13.464,16.0 16.5,16.0L16.5,16.0ZM16.5,19.0C12.999562,19.0 6.0,20.78 6.0,24.333334L6.0,27.0L27.0,27.0L27.0,24.333334C27.0,20.78 20.000437,19.0 16.5,19.0L16.5,19.0Z"/>
+</vector>
diff --git a/res/drawable-v21/ic_notification_mail_24dp.xml b/res/drawable-v21/ic_notification_mail_24dp.xml
new file mode 100644
index 0000000..7fdf07e
--- /dev/null
+++ b/res/drawable-v21/ic_notification_mail_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#ffffffff"
+        android:pathData="M20.0,4.0L4.0,4.0C2.9,4.0 2.0,4.9 2.0,6.0l0.0,12.0c0.0,1.1 0.9,2.0 2.0,2.0l16.0,0.0c1.1,0.0 2.0,-0.9 2.0,-2.0L22.0,6.0C22.0,4.9 21.1,4.0 20.0,4.0zM20.0,18.0l-2.0,0.0L18.0,9.2L12.0,13.0L6.0,9.2L6.0,18.0L4.0,18.0L4.0,6.0l1.2,0.0l6.8,4.2L18.8,6.0L20.0,6.0L20.0,18.0z"/>
+</vector>
diff --git a/res/drawable-v21/ic_notification_multiple_mail_24dp.xml b/res/drawable-v21/ic_notification_multiple_mail_24dp.xml
new file mode 100644
index 0000000..2c24e3f
--- /dev/null
+++ b/res/drawable-v21/ic_notification_multiple_mail_24dp.xml
@@ -0,0 +1,27 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#8a000000"
+        android:pathData="M2.0,6.033888L2.0,18.0C2.0,19.104 2.896,20.0 4.0,20.0L20.978577,20.0L20.978577,18.0L4.0,18.0L4.0,6.033888L2.0,6.033888Z"/>
+    <path
+        android:fillColor="#8a000000"
+        android:pathData="M20.3,3.0L6.7,3.0C5.761175,3.0 5.008925,3.7835624 5.008925,4.75L5.0,15.25C5.0,16.216438 5.761175,17.0 6.7,17.0L20.3,17.0C21.238825,17.0 22.0,16.216438 22.0,15.25L22.0,4.75C22.0,3.7835624 21.238825,3.0 20.3,3.0L20.3,3.0ZM18.5,15.0L18.5,6.9974947L13.5,10.5L8.5,6.9974947L8.5,15.0L7.0,15.0L7.0,5.0L8.5,5.0L13.5,8.5L18.5,5.0L20.0,5.0L20.0,15.0L18.5,15.0Z"/>
+</vector>
diff --git a/res/drawable-v21/ic_overflow_24dp.xml b/res/drawable-v21/ic_overflow_24dp.xml
new file mode 100644
index 0000000..e06a4b7
--- /dev/null
+++ b/res/drawable-v21/ic_overflow_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#8a000000"
+        android:pathData="M12.0,8.0c1.1,0.0 2.0,-0.9 2.0,-2.0s-0.9,-2.0 -2.0,-2.0c-1.1,0.0 -2.0,0.9 -2.0,2.0S10.9,8.0 12.0,8.0zM12.0,10.0c-1.1,0.0 -2.0,0.9 -2.0,2.0s0.9,2.0 2.0,2.0c1.1,0.0 2.0,-0.9 2.0,-2.0S13.1,10.0 12.0,10.0zM12.0,16.0c-1.1,0.0 -2.0,0.9 -2.0,2.0s0.9,2.0 2.0,2.0c1.1,0.0 2.0,-0.9 2.0,-2.0S13.1,16.0 12.0,16.0z"/>
+</vector>
diff --git a/res/drawable-v21/ic_pencil_24dp.xml b/res/drawable-v21/ic_pencil_24dp.xml
new file mode 100644
index 0000000..929229f
--- /dev/null
+++ b/res/drawable-v21/ic_pencil_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#8a000000"
+        android:pathData="M3.0,17.2L3.0,21.0l3.8,0.0L17.8,9.9l-3.8,-3.8L3.0,17.2zM20.7,7.0c0.4,-0.4 0.4,-1.0 0.0,-1.4l-2.3,-2.3c-0.4,-0.4 -1.0,-0.4 -1.4,0.0l-1.8,1.8l3.8,3.8L20.7,7.0z"/>
+</vector>
diff --git a/res/drawable-v21/ic_pencil_wht_24dp.xml b/res/drawable-v21/ic_pencil_wht_24dp.xml
new file mode 100644
index 0000000..fbefd3a
--- /dev/null
+++ b/res/drawable-v21/ic_pencil_wht_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#ffffffff"
+        android:pathData="M3.0,17.2L3.0,21.0l3.8,0.0L17.8,9.9l-3.8,-3.8L3.0,17.2zM20.7,7.0c0.4,-0.4 0.4,-1.0 0.0,-1.4l-2.3,-2.3c-0.4,-0.4 -1.0,-0.4 -1.4,0.0l-1.8,1.8l3.8,3.8L20.7,7.0z"/>
+</vector>
diff --git a/res/drawable-v21/ic_remove_label_wht_24dp.xml b/res/drawable-v21/ic_remove_label_wht_24dp.xml
new file mode 100644
index 0000000..a5aae7e
--- /dev/null
+++ b/res/drawable-v21/ic_remove_label_wht_24dp.xml
@@ -0,0 +1,27 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#ffffffff"
+        android:pathData="M9.178,5.546C8.789,5.909 8.546,6.424 8.546,7.0l0.0,10.0c0.0,1.104 0.896,2.0 2.0,2.0l11.252,0.0c0.256,0.0 0.504,-0.032 0.741,-0.092l2.139,2.138l1.414,-1.414L8.414,1.954L7.0,3.368L9.178,5.546z"/>
+    <path
+        android:fillColor="#ffffffff"
+        android:pathData="M14.2,5.007L22.252,5.0c0.828,0.0 1.578,0.336 2.122,0.879L29.0,12.0l-3.361,4.447L14.2,5.007z"/>
+</vector>
diff --git a/res/drawable-v21/ic_reply_24dp.xml b/res/drawable-v21/ic_reply_24dp.xml
new file mode 100644
index 0000000..79f8a78
--- /dev/null
+++ b/res/drawable-v21/ic_reply_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#8a000000"
+        android:pathData="M10.0,9.0L10.0,5.0l-7.0,7.0l7.0,7.0l0.0,-4.1c5.0,0.0 8.5,1.6 11.0,5.1C20.0,15.0 17.0,10.0 10.0,9.0z"/>
+</vector>
diff --git a/res/drawable-v21/ic_reply_all_24dp.xml b/res/drawable-v21/ic_reply_all_24dp.xml
new file mode 100644
index 0000000..6ed312a
--- /dev/null
+++ b/res/drawable-v21/ic_reply_all_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#8a000000"
+        android:pathData="M7.0,8.0L7.0,5.0l-7.0,7.0l7.0,7.0l0.0,-3.0l-4.0,-4.0L7.0,8.0zM13.0,9.0L13.0,5.0l-7.0,7.0l7.0,7.0l0.0,-4.1c5.0,0.0 8.5,1.6 11.0,5.1C23.0,15.0 20.0,10.0 13.0,9.0z"/>
+</vector>
diff --git a/res/drawable-v21/ic_reply_all_wht_24dp.xml b/res/drawable-v21/ic_reply_all_wht_24dp.xml
new file mode 100644
index 0000000..411d302
--- /dev/null
+++ b/res/drawable-v21/ic_reply_all_wht_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#ffffffff"
+        android:pathData="M7.0,8.0L7.0,5.0l-7.0,7.0l7.0,7.0l0.0,-3.0l-4.0,-4.0L7.0,8.0zM13.0,9.0L13.0,5.0l-7.0,7.0l7.0,7.0l0.0,-4.1c5.0,0.0 8.5,1.6 11.0,5.1C23.0,15.0 20.0,10.0 13.0,9.0z"/>
+</vector>
diff --git a/res/drawable-v21/ic_reply_wht_24dp.xml b/res/drawable-v21/ic_reply_wht_24dp.xml
new file mode 100644
index 0000000..1086f97
--- /dev/null
+++ b/res/drawable-v21/ic_reply_wht_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#ffffffff"
+        android:pathData="M10.0,9.0L10.0,5.0l-7.0,7.0l7.0,7.0l0.0,-4.1c5.0,0.0 8.5,1.6 11.0,5.1C20.0,15.0 17.0,10.0 10.0,9.0z"/>
+</vector>
diff --git a/res/drawable-v21/ic_send_wht_24dp.xml b/res/drawable-v21/ic_send_wht_24dp.xml
new file mode 100644
index 0000000..f522da2
--- /dev/null
+++ b/res/drawable-v21/ic_send_wht_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#ffffffff"
+        android:pathData="M2.0,21.0l21.0,-9.0 -21.0,-9.0 0.0,7.0 15.0,2.0 -15.0,2.0z"/>
+</vector>
diff --git a/res/drawable-v21/ic_warning_56dp.xml b/res/drawable-v21/ic_warning_56dp.xml
new file mode 100644
index 0000000..c846807
--- /dev/null
+++ b/res/drawable-v21/ic_warning_56dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="56.0dp"
+        android:height="56.0dp"
+        android:viewportWidth="56.0"
+        android:viewportHeight="56.0">
+    <path
+        android:fillColor="#33000000"
+        android:pathData="M4.445252,50.0L50.926315,50.0C51.683216,50.0 52.297043,48.43342 51.847057,47.650127C44.175934,34.297085 36.50481,20.944044 28.83369,7.5910025C28.384596,6.8092675 26.592989,6.800956 26.146282,7.5785356L3.1414018,47.62289C2.6722271,48.43958 3.5554307,50.0 4.445252,50.0ZM25.0,37.0L31.0,37.0L31.0,43.0L25.0,43.0L25.0,37.0ZM25.0,23.0L31.0,23.0L31.0,33.0L25.0,33.0L25.0,23.0Z"/>
+</vector>
diff --git a/res/drawable-xhdpi-v19/btn_default_pressed_holo_light.9.png b/res/drawable-xhdpi-v19/btn_default_pressed_holo_light.9.png
deleted file mode 100644
index a4ac0c7..0000000
--- a/res/drawable-xhdpi-v19/btn_default_pressed_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/btn_default_disabled_focused_holo_light.9.png b/res/drawable-xhdpi/btn_default_disabled_focused_holo_light.9.png
deleted file mode 100644
index efb728a..0000000
--- a/res/drawable-xhdpi/btn_default_disabled_focused_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/btn_default_disabled_holo_light.9.png b/res/drawable-xhdpi/btn_default_disabled_holo_light.9.png
deleted file mode 100644
index 2139044..0000000
--- a/res/drawable-xhdpi/btn_default_disabled_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/btn_default_focused_holo_light.9.png b/res/drawable-xhdpi/btn_default_focused_holo_light.9.png
deleted file mode 100644
index 6fd626e..0000000
--- a/res/drawable-xhdpi/btn_default_focused_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/btn_default_normal_holo_light.9.png b/res/drawable-xhdpi/btn_default_normal_holo_light.9.png
deleted file mode 100644
index cd330ba..0000000
--- a/res/drawable-xhdpi/btn_default_normal_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/btn_default_pressed_holo_light.9.png b/res/drawable-xhdpi/btn_default_pressed_holo_light.9.png
deleted file mode 100644
index 681e561..0000000
--- a/res/drawable-xhdpi/btn_default_pressed_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/empty_folders.png b/res/drawable-xhdpi/empty_folders.png
deleted file mode 100644
index fa43006..0000000
--- a/res/drawable-xhdpi/empty_folders.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/empty_inbox.png b/res/drawable-xhdpi/empty_inbox.png
deleted file mode 100644
index 6d830a5..0000000
--- a/res/drawable-xhdpi/empty_inbox.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/empty_search.png b/res/drawable-xhdpi/empty_search.png
deleted file mode 100644
index 0bee01d..0000000
--- a/res/drawable-xhdpi/empty_search.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/empty_spam.png b/res/drawable-xhdpi/empty_spam.png
deleted file mode 100644
index cca17fd..0000000
--- a/res/drawable-xhdpi/empty_spam.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/empty_trash.png b/res/drawable-xhdpi/empty_trash.png
deleted file mode 100644
index 831f3a8..0000000
--- a/res/drawable-xhdpi/empty_trash.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/folder_parent_icon.png b/res/drawable-xhdpi/folder_parent_icon.png
deleted file mode 100644
index 132282e..0000000
--- a/res/drawable-xhdpi/folder_parent_icon.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_sent.png b/res/drawable-xhdpi/ic_anonymous_avatar_40dp.png
similarity index 66%
copy from res/drawable-xhdpi/ic_drawer_sent.png
copy to res/drawable-xhdpi/ic_anonymous_avatar_40dp.png
index a25f185..67efeb1 100644
--- a/res/drawable-xhdpi/ic_drawer_sent.png
+++ b/res/drawable-xhdpi/ic_anonymous_avatar_40dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_arrow.png b/res/drawable-xhdpi/ic_arrow.png
deleted file mode 100644
index 889c33f..0000000
--- a/res/drawable-xhdpi/ic_arrow.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_folder.png b/res/drawable-xhdpi/ic_arrow_back_24dp.png
similarity index 87%
rename from res/drawable-xhdpi/ic_drawer_folder.png
rename to res/drawable-xhdpi/ic_arrow_back_24dp.png
index 02cb6cd..73395b0 100644
--- a/res/drawable-xhdpi/ic_drawer_folder.png
+++ b/res/drawable-xhdpi/ic_arrow_back_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_attach_file.png b/res/drawable-xhdpi/ic_attach_file.png
deleted file mode 100644
index b926407..0000000
--- a/res/drawable-xhdpi/ic_attach_file.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_sent.png b/res/drawable-xhdpi/ic_attach_file_18dp.png
similarity index 75%
copy from res/drawable-xhdpi/ic_drawer_sent.png
copy to res/drawable-xhdpi/ic_attach_file_18dp.png
index a25f185..9ee48cc 100644
--- a/res/drawable-xhdpi/ic_drawer_sent.png
+++ b/res/drawable-xhdpi/ic_attach_file_18dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_attach_file_20dp.png b/res/drawable-xhdpi/ic_attach_file_20dp.png
deleted file mode 100644
index 831c2cb..0000000
--- a/res/drawable-xhdpi/ic_attach_file_20dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_attach_image_holo_light.png b/res/drawable-xhdpi/ic_attach_image_holo_light.png
deleted file mode 100644
index 8bfd8bd..0000000
--- a/res/drawable-xhdpi/ic_attach_image_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_sent.png b/res/drawable-xhdpi/ic_cancel_24dp.png
similarity index 72%
copy from res/drawable-xhdpi/ic_drawer_sent.png
copy to res/drawable-xhdpi/ic_cancel_24dp.png
index a25f185..511afd4 100644
--- a/res/drawable-xhdpi/ic_drawer_sent.png
+++ b/res/drawable-xhdpi/ic_cancel_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_folder.png b/res/drawable-xhdpi/ic_check_24dp.png
similarity index 86%
copy from res/drawable-xhdpi/ic_drawer_folder.png
copy to res/drawable-xhdpi/ic_check_24dp.png
index 02cb6cd..c7adde9 100644
--- a/res/drawable-xhdpi/ic_drawer_folder.png
+++ b/res/drawable-xhdpi/ic_check_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_folder.png b/res/drawable-xhdpi/ic_close_24dp.png
similarity index 84%
copy from res/drawable-xhdpi/ic_drawer_folder.png
copy to res/drawable-xhdpi/ic_close_24dp.png
index 02cb6cd..81efb70 100644
--- a/res/drawable-xhdpi/ic_drawer_folder.png
+++ b/res/drawable-xhdpi/ic_close_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_compose_56dp.png b/res/drawable-xhdpi/ic_compose_56dp.png
deleted file mode 100644
index e117919..0000000
--- a/res/drawable-xhdpi/ic_compose_56dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_compose_pressed_56dp.png b/res/drawable-xhdpi/ic_compose_pressed_56dp.png
deleted file mode 100644
index a93ecdc..0000000
--- a/res/drawable-xhdpi/ic_compose_pressed_56dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_sent.png b/res/drawable-xhdpi/ic_cv_loading_24dp.png
similarity index 75%
copy from res/drawable-xhdpi/ic_drawer_sent.png
copy to res/drawable-xhdpi/ic_cv_loading_24dp.png
index a25f185..6f18799 100644
--- a/res/drawable-xhdpi/ic_drawer_sent.png
+++ b/res/drawable-xhdpi/ic_cv_loading_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_folder.png b/res/drawable-xhdpi/ic_drawer_accnt_check_24dp.png
similarity index 84%
copy from res/drawable-xhdpi/ic_drawer_folder.png
copy to res/drawable-xhdpi/ic_drawer_accnt_check_24dp.png
index 02cb6cd..43e2cba 100644
--- a/res/drawable-xhdpi/ic_drawer_folder.png
+++ b/res/drawable-xhdpi/ic_drawer_accnt_check_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_drafts.png b/res/drawable-xhdpi/ic_drawer_drafts.png
deleted file mode 100644
index 7df7fc4..0000000
--- a/res/drawable-xhdpi/ic_drawer_drafts.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_drafts_24dp.png b/res/drawable-xhdpi/ic_drawer_drafts_24dp.png
new file mode 100644
index 0000000..ca03046
--- /dev/null
+++ b/res/drawable-xhdpi/ic_drawer_drafts_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_folder_24dp.png b/res/drawable-xhdpi/ic_drawer_folder_24dp.png
new file mode 100644
index 0000000..b4702e4
--- /dev/null
+++ b/res/drawable-xhdpi/ic_drawer_folder_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_help.png b/res/drawable-xhdpi/ic_drawer_help.png
deleted file mode 100644
index 7a0d07e..0000000
--- a/res/drawable-xhdpi/ic_drawer_help.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_help_24dp.png b/res/drawable-xhdpi/ic_drawer_help_24dp.png
new file mode 100644
index 0000000..d92a4fc
--- /dev/null
+++ b/res/drawable-xhdpi/ic_drawer_help_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_sent.png b/res/drawable-xhdpi/ic_drawer_inbox_24dp.png
similarity index 82%
rename from res/drawable-xhdpi/ic_drawer_sent.png
rename to res/drawable-xhdpi/ic_drawer_inbox_24dp.png
index a25f185..6f8eb17 100644
--- a/res/drawable-xhdpi/ic_drawer_sent.png
+++ b/res/drawable-xhdpi/ic_drawer_inbox_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_outbox.png b/res/drawable-xhdpi/ic_drawer_outbox.png
deleted file mode 100644
index b1ddedc..0000000
--- a/res/drawable-xhdpi/ic_drawer_outbox.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_sent.png b/res/drawable-xhdpi/ic_drawer_outbox_24dp.png
similarity index 73%
copy from res/drawable-xhdpi/ic_drawer_sent.png
copy to res/drawable-xhdpi/ic_drawer_outbox_24dp.png
index a25f185..fee5e79 100644
--- a/res/drawable-xhdpi/ic_drawer_sent.png
+++ b/res/drawable-xhdpi/ic_drawer_outbox_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_sent_24dp.png b/res/drawable-xhdpi/ic_drawer_sent_24dp.png
new file mode 100644
index 0000000..b2aeb4b
--- /dev/null
+++ b/res/drawable-xhdpi/ic_drawer_sent_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_settings.png b/res/drawable-xhdpi/ic_drawer_settings.png
deleted file mode 100644
index cda51d4..0000000
--- a/res/drawable-xhdpi/ic_drawer_settings.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_settings_24dp.png b/res/drawable-xhdpi/ic_drawer_settings_24dp.png
new file mode 100644
index 0000000..69a7cf0
--- /dev/null
+++ b/res/drawable-xhdpi/ic_drawer_settings_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_starred.png b/res/drawable-xhdpi/ic_drawer_starred.png
deleted file mode 100644
index 11d7f30..0000000
--- a/res/drawable-xhdpi/ic_drawer_starred.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_starred_24dp.png b/res/drawable-xhdpi/ic_drawer_starred_24dp.png
new file mode 100644
index 0000000..123c094
--- /dev/null
+++ b/res/drawable-xhdpi/ic_drawer_starred_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_trash.png b/res/drawable-xhdpi/ic_drawer_trash.png
deleted file mode 100644
index e1e74a5..0000000
--- a/res/drawable-xhdpi/ic_drawer_trash.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_trash_24dp.png b/res/drawable-xhdpi/ic_drawer_trash_24dp.png
new file mode 100644
index 0000000..d8cb09a
--- /dev/null
+++ b/res/drawable-xhdpi/ic_drawer_trash_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_unread.png b/res/drawable-xhdpi/ic_drawer_unread.png
deleted file mode 100644
index 7226408..0000000
--- a/res/drawable-xhdpi/ic_drawer_unread.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_unread_24dp.png b/res/drawable-xhdpi/ic_drawer_unread_24dp.png
new file mode 100644
index 0000000..9e01341
--- /dev/null
+++ b/res/drawable-xhdpi/ic_drawer_unread_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_ellipsis_24dp.png b/res/drawable-xhdpi/ic_ellipsis_24dp.png
deleted file mode 100644
index cd447fd..0000000
--- a/res/drawable-xhdpi/ic_ellipsis_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_empty_default.png b/res/drawable-xhdpi/ic_empty_default.png
new file mode 100644
index 0000000..a381f36
--- /dev/null
+++ b/res/drawable-xhdpi/ic_empty_default.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_empty_inbox.png b/res/drawable-xhdpi/ic_empty_inbox.png
new file mode 100644
index 0000000..029aeac
--- /dev/null
+++ b/res/drawable-xhdpi/ic_empty_inbox.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_empty_search.png b/res/drawable-xhdpi/ic_empty_search.png
new file mode 100644
index 0000000..6b2ad15
--- /dev/null
+++ b/res/drawable-xhdpi/ic_empty_search.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_empty_spam.png b/res/drawable-xhdpi/ic_empty_spam.png
new file mode 100644
index 0000000..61d86b3
--- /dev/null
+++ b/res/drawable-xhdpi/ic_empty_spam.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_empty_trash.png b/res/drawable-xhdpi/ic_empty_trash.png
new file mode 100644
index 0000000..17641b0
--- /dev/null
+++ b/res/drawable-xhdpi/ic_empty_trash.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_fab_4dpshadow.png b/res/drawable-xhdpi/ic_fab_4dpshadow.png
new file mode 100644
index 0000000..5458c36
--- /dev/null
+++ b/res/drawable-xhdpi/ic_fab_4dpshadow.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_folder.png b/res/drawable-xhdpi/ic_folder_parent_24dp.png
similarity index 85%
copy from res/drawable-xhdpi/ic_drawer_folder.png
copy to res/drawable-xhdpi/ic_folder_parent_24dp.png
index 02cb6cd..29a83d3 100644
--- a/res/drawable-xhdpi/ic_drawer_folder.png
+++ b/res/drawable-xhdpi/ic_folder_parent_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_generic_man.png b/res/drawable-xhdpi/ic_generic_man.png
deleted file mode 100644
index 212293d..0000000
--- a/res/drawable-xhdpi/ic_generic_man.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_sent.png b/res/drawable-xhdpi/ic_history_24dp.png
similarity index 60%
copy from res/drawable-xhdpi/ic_drawer_sent.png
copy to res/drawable-xhdpi/ic_history_24dp.png
index a25f185..61c0bfe 100644
--- a/res/drawable-xhdpi/ic_drawer_sent.png
+++ b/res/drawable-xhdpi/ic_history_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_history_holo_light.png b/res/drawable-xhdpi/ic_history_holo_light.png
deleted file mode 100644
index 83d61fa..0000000
--- a/res/drawable-xhdpi/ic_history_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_mark_read_wht_24dp.png b/res/drawable-xhdpi/ic_mark_read_wht_24dp.png
similarity index 100%
rename from res/drawable-xhdpi/ic_menu_mark_read_wht_24dp.png
rename to res/drawable-xhdpi/ic_mark_read_wht_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_mark_unread_wht_24dp.png b/res/drawable-xhdpi/ic_mark_unread_wht_24dp.png
similarity index 100%
rename from res/drawable-xhdpi/ic_menu_mark_unread_wht_24dp.png
rename to res/drawable-xhdpi/ic_mark_unread_wht_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_check_holo_light.png b/res/drawable-xhdpi/ic_menu_check_holo_light.png
deleted file mode 100644
index c0df227..0000000
--- a/res/drawable-xhdpi/ic_menu_check_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_done_holo_light.png b/res/drawable-xhdpi/ic_menu_done_holo_light.png
deleted file mode 100644
index d895df8..0000000
--- a/res/drawable-xhdpi/ic_menu_done_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_move_to_holo_light.png b/res/drawable-xhdpi/ic_menu_move_to_holo_light.png
deleted file mode 100644
index b3f6926..0000000
--- a/res/drawable-xhdpi/ic_menu_move_to_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_revert_holo_dark.png b/res/drawable-xhdpi/ic_menu_revert_holo_dark.png
deleted file mode 100644
index 48ff5bc..0000000
--- a/res/drawable-xhdpi/ic_menu_revert_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_raw.png b/res/drawable-xhdpi/ic_menu_wht_24dp.png
similarity index 100%
rename from res/drawable-xhdpi/ic_drawer_raw.png
rename to res/drawable-xhdpi/ic_menu_wht_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_sent.png b/res/drawable-xhdpi/ic_mic_24dp.png
similarity index 77%
copy from res/drawable-xhdpi/ic_drawer_sent.png
copy to res/drawable-xhdpi/ic_mic_24dp.png
index a25f185..1dcf56c 100644
--- a/res/drawable-xhdpi/ic_drawer_sent.png
+++ b/res/drawable-xhdpi/ic_mic_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_mic_wht_24dp.png b/res/drawable-xhdpi/ic_mic_wht_24dp.png
new file mode 100644
index 0000000..b7d8dc7
--- /dev/null
+++ b/res/drawable-xhdpi/ic_mic_wht_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_move_to_wht_24dp.png b/res/drawable-xhdpi/ic_move_to_wht_24dp.png
new file mode 100644
index 0000000..868329d
--- /dev/null
+++ b/res/drawable-xhdpi/ic_move_to_wht_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_drawer_trash.png b/res/drawable-xhdpi/ic_next_24dp.png
similarity index 88%
copy from res/drawable-mdpi/ic_drawer_trash.png
copy to res/drawable-xhdpi/ic_next_24dp.png
index c1583bd..1efbf09 100644
--- a/res/drawable-mdpi/ic_drawer_trash.png
+++ b/res/drawable-xhdpi/ic_next_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_edit_24dp.png b/res/drawable-xhdpi/ic_pencil_24dp.png
similarity index 100%
rename from res/drawable-xhdpi/ic_edit_24dp.png
rename to res/drawable-xhdpi/ic_pencil_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_pencil_wht_24dp.png b/res/drawable-xhdpi/ic_pencil_wht_24dp.png
new file mode 100644
index 0000000..f338b5a
--- /dev/null
+++ b/res/drawable-xhdpi/ic_pencil_wht_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_vertical_shadow_end_2dp.9.png b/res/drawable-xhdpi/ic_vertical_shadow_end_2dp.9.png
new file mode 100644
index 0000000..ccccd4c
--- /dev/null
+++ b/res/drawable-xhdpi/ic_vertical_shadow_end_2dp.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_vertical_shadow_start_4dp.9.png b/res/drawable-xhdpi/ic_vertical_shadow_start_4dp.9.png
new file mode 100644
index 0000000..772c512
--- /dev/null
+++ b/res/drawable-xhdpi/ic_vertical_shadow_start_4dp.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_warning_56dp.png b/res/drawable-xhdpi/ic_warning_56dp.png
new file mode 100644
index 0000000..e2000ee
--- /dev/null
+++ b/res/drawable-xhdpi/ic_warning_56dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_widget_compose_wht_24dp.png b/res/drawable-xhdpi/ic_widget_compose_wht_24dp.png
deleted file mode 100644
index 48e75be..0000000
--- a/res/drawable-xhdpi/ic_widget_compose_wht_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/list_read_holo.9.png b/res/drawable-xhdpi/list_read_holo.9.png
deleted file mode 100644
index ff8cd6d..0000000
--- a/res/drawable-xhdpi/list_read_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/list_unread_holo.9.png b/res/drawable-xhdpi/list_unread_holo.9.png
deleted file mode 100644
index ff8cd6d..0000000
--- a/res/drawable-xhdpi/list_unread_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/toast_frame_focused.9.png b/res/drawable-xhdpi/toast_frame_focused.9.png
deleted file mode 100644
index 2bc8545..0000000
--- a/res/drawable-xhdpi/toast_frame_focused.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/toast_frame_normal.9.png b/res/drawable-xhdpi/toast_frame_normal.9.png
deleted file mode 100644
index bfdcc6e..0000000
--- a/res/drawable-xhdpi/toast_frame_normal.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/toast_frame_pressed.9.png b/res/drawable-xhdpi/toast_frame_pressed.9.png
deleted file mode 100644
index c6fa03c..0000000
--- a/res/drawable-xhdpi/toast_frame_pressed.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi-v19/btn_default_pressed_holo_light.9.png b/res/drawable-xxhdpi-v19/btn_default_pressed_holo_light.9.png
deleted file mode 100644
index 9521603..0000000
--- a/res/drawable-xxhdpi-v19/btn_default_pressed_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/btn_default_disabled_focused_holo_light.9.png b/res/drawable-xxhdpi/btn_default_disabled_focused_holo_light.9.png
deleted file mode 100644
index 78f5270..0000000
--- a/res/drawable-xxhdpi/btn_default_disabled_focused_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/btn_default_disabled_holo_light.9.png b/res/drawable-xxhdpi/btn_default_disabled_holo_light.9.png
deleted file mode 100644
index 4f90109..0000000
--- a/res/drawable-xxhdpi/btn_default_disabled_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/btn_default_focused_holo_light.9.png b/res/drawable-xxhdpi/btn_default_focused_holo_light.9.png
deleted file mode 100644
index 2253d65..0000000
--- a/res/drawable-xxhdpi/btn_default_focused_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/btn_default_normal_holo_light.9.png b/res/drawable-xxhdpi/btn_default_normal_holo_light.9.png
deleted file mode 100644
index 5c7268e..0000000
--- a/res/drawable-xxhdpi/btn_default_normal_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/btn_default_pressed_holo_light.9.png b/res/drawable-xxhdpi/btn_default_pressed_holo_light.9.png
deleted file mode 100644
index 6005887..0000000
--- a/res/drawable-xxhdpi/btn_default_pressed_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/empty_folders.png b/res/drawable-xxhdpi/empty_folders.png
deleted file mode 100644
index 13c13eb..0000000
--- a/res/drawable-xxhdpi/empty_folders.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/empty_inbox.png b/res/drawable-xxhdpi/empty_inbox.png
deleted file mode 100644
index 436ab9a..0000000
--- a/res/drawable-xxhdpi/empty_inbox.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/empty_search.png b/res/drawable-xxhdpi/empty_search.png
deleted file mode 100644
index 4be1823..0000000
--- a/res/drawable-xxhdpi/empty_search.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/empty_spam.png b/res/drawable-xxhdpi/empty_spam.png
deleted file mode 100644
index b0a10a0..0000000
--- a/res/drawable-xxhdpi/empty_spam.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/empty_trash.png b/res/drawable-xxhdpi/empty_trash.png
deleted file mode 100644
index a88ac17..0000000
--- a/res/drawable-xxhdpi/empty_trash.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/folder_parent_icon.png b/res/drawable-xxhdpi/folder_parent_icon.png
deleted file mode 100644
index 5f90fbc..0000000
--- a/res/drawable-xxhdpi/folder_parent_icon.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_anonymous_avatar_40dp.png b/res/drawable-xxhdpi/ic_anonymous_avatar_40dp.png
new file mode 100644
index 0000000..b4229c9
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_anonymous_avatar_40dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_arrow.png b/res/drawable-xxhdpi/ic_arrow.png
deleted file mode 100644
index f8e7731..0000000
--- a/res/drawable-xxhdpi/ic_arrow.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_drawer_folder.png b/res/drawable-xxhdpi/ic_arrow_back_24dp.png
similarity index 83%
rename from res/drawable-xxhdpi/ic_drawer_folder.png
rename to res/drawable-xxhdpi/ic_arrow_back_24dp.png
index ba057d2..650351d 100644
--- a/res/drawable-xxhdpi/ic_drawer_folder.png
+++ b/res/drawable-xxhdpi/ic_arrow_back_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_attach_file.png b/res/drawable-xxhdpi/ic_attach_file.png
deleted file mode 100644
index 2a193df..0000000
--- a/res/drawable-xxhdpi/ic_attach_file.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_sent.png b/res/drawable-xxhdpi/ic_attach_file_18dp.png
similarity index 66%
copy from res/drawable-xhdpi/ic_drawer_sent.png
copy to res/drawable-xxhdpi/ic_attach_file_18dp.png
index a25f185..d2f2191 100644
--- a/res/drawable-xhdpi/ic_drawer_sent.png
+++ b/res/drawable-xxhdpi/ic_attach_file_18dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_attach_file_20dp.png b/res/drawable-xxhdpi/ic_attach_file_20dp.png
deleted file mode 100644
index bd54a2c..0000000
--- a/res/drawable-xxhdpi/ic_attach_file_20dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_attach_image_holo_light.png b/res/drawable-xxhdpi/ic_attach_image_holo_light.png
deleted file mode 100644
index 4d40633..0000000
--- a/res/drawable-xxhdpi/ic_attach_image_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_sent.png b/res/drawable-xxhdpi/ic_cancel_24dp.png
similarity index 62%
copy from res/drawable-xhdpi/ic_drawer_sent.png
copy to res/drawable-xxhdpi/ic_cancel_24dp.png
index a25f185..95c7b03 100644
--- a/res/drawable-xhdpi/ic_drawer_sent.png
+++ b/res/drawable-xxhdpi/ic_cancel_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_drawer_folder.png b/res/drawable-xxhdpi/ic_check_24dp.png
similarity index 81%
copy from res/drawable-xxhdpi/ic_drawer_folder.png
copy to res/drawable-xxhdpi/ic_check_24dp.png
index ba057d2..b0878bc 100644
--- a/res/drawable-xxhdpi/ic_drawer_folder.png
+++ b/res/drawable-xxhdpi/ic_check_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_drawer_folder.png b/res/drawable-xxhdpi/ic_close_24dp.png
similarity index 79%
copy from res/drawable-xxhdpi/ic_drawer_folder.png
copy to res/drawable-xxhdpi/ic_close_24dp.png
index ba057d2..0924e29 100644
--- a/res/drawable-xxhdpi/ic_drawer_folder.png
+++ b/res/drawable-xxhdpi/ic_close_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_compose_56dp.png b/res/drawable-xxhdpi/ic_compose_56dp.png
deleted file mode 100644
index 3b0b5fb..0000000
--- a/res/drawable-xxhdpi/ic_compose_56dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_compose_pressed_56dp.png b/res/drawable-xxhdpi/ic_compose_pressed_56dp.png
deleted file mode 100644
index 55655ef..0000000
--- a/res/drawable-xxhdpi/ic_compose_pressed_56dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_drawer_starred.png b/res/drawable-xxhdpi/ic_cv_loading_24dp.png
similarity index 67%
rename from res/drawable-xxhdpi/ic_drawer_starred.png
rename to res/drawable-xxhdpi/ic_cv_loading_24dp.png
index 714f236..38529dc 100644
--- a/res/drawable-xxhdpi/ic_drawer_starred.png
+++ b/res/drawable-xxhdpi/ic_cv_loading_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_drawer_folder.png b/res/drawable-xxhdpi/ic_drawer_accnt_check_24dp.png
similarity index 81%
copy from res/drawable-xxhdpi/ic_drawer_folder.png
copy to res/drawable-xxhdpi/ic_drawer_accnt_check_24dp.png
index ba057d2..a821abd 100644
--- a/res/drawable-xxhdpi/ic_drawer_folder.png
+++ b/res/drawable-xxhdpi/ic_drawer_accnt_check_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_drawer_drafts.png b/res/drawable-xxhdpi/ic_drawer_drafts.png
deleted file mode 100644
index bef7727..0000000
--- a/res/drawable-xxhdpi/ic_drawer_drafts.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_drawer_drafts_24dp.png b/res/drawable-xxhdpi/ic_drawer_drafts_24dp.png
new file mode 100644
index 0000000..b13c27f
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_drawer_drafts_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_drawer_folder_24dp.png b/res/drawable-xxhdpi/ic_drawer_folder_24dp.png
new file mode 100644
index 0000000..c885e88
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_drawer_folder_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_drawer_help.png b/res/drawable-xxhdpi/ic_drawer_help.png
deleted file mode 100644
index d00e59f..0000000
--- a/res/drawable-xxhdpi/ic_drawer_help.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_drawer_help_24dp.png b/res/drawable-xxhdpi/ic_drawer_help_24dp.png
new file mode 100644
index 0000000..d9e5300
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_drawer_help_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_drawer_inbox.png b/res/drawable-xxhdpi/ic_drawer_inbox_24dp.png
similarity index 76%
copy from res/drawable-xxhdpi/ic_drawer_inbox.png
copy to res/drawable-xxhdpi/ic_drawer_inbox_24dp.png
index 69a9b96..8b44898 100644
--- a/res/drawable-xxhdpi/ic_drawer_inbox.png
+++ b/res/drawable-xxhdpi/ic_drawer_inbox_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_drawer_starred.png b/res/drawable-xxhdpi/ic_drawer_outbox_24dp.png
similarity index 64%
copy from res/drawable-xxhdpi/ic_drawer_starred.png
copy to res/drawable-xxhdpi/ic_drawer_outbox_24dp.png
index 714f236..74b799b 100644
--- a/res/drawable-xxhdpi/ic_drawer_starred.png
+++ b/res/drawable-xxhdpi/ic_drawer_outbox_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_drawer_sent.png b/res/drawable-xxhdpi/ic_drawer_sent.png
deleted file mode 100644
index 3ded90d..0000000
--- a/res/drawable-xxhdpi/ic_drawer_sent.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_drawer_sent_24dp.png b/res/drawable-xxhdpi/ic_drawer_sent_24dp.png
new file mode 100644
index 0000000..24b0e9a
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_drawer_sent_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_drawer_settings.png b/res/drawable-xxhdpi/ic_drawer_settings.png
deleted file mode 100644
index f9b0d97..0000000
--- a/res/drawable-xxhdpi/ic_drawer_settings.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_drawer_settings_24dp.png b/res/drawable-xxhdpi/ic_drawer_settings_24dp.png
new file mode 100644
index 0000000..743ca67
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_drawer_settings_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_drawer_starred_24dp.png b/res/drawable-xxhdpi/ic_drawer_starred_24dp.png
new file mode 100644
index 0000000..ceed170
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_drawer_starred_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_drawer_trash.png b/res/drawable-xxhdpi/ic_drawer_trash.png
deleted file mode 100644
index 9689555..0000000
--- a/res/drawable-xxhdpi/ic_drawer_trash.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_drawer_trash_24dp.png b/res/drawable-xxhdpi/ic_drawer_trash_24dp.png
new file mode 100644
index 0000000..4886ab1
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_drawer_trash_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_drawer_unread.png b/res/drawable-xxhdpi/ic_drawer_unread.png
deleted file mode 100644
index 938718a..0000000
--- a/res/drawable-xxhdpi/ic_drawer_unread.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_drawer_unread_24dp.png b/res/drawable-xxhdpi/ic_drawer_unread_24dp.png
new file mode 100644
index 0000000..9b1c7e8
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_drawer_unread_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_ellipsis_24dp.png b/res/drawable-xxhdpi/ic_ellipsis_24dp.png
deleted file mode 100644
index 1e4e18d..0000000
--- a/res/drawable-xxhdpi/ic_ellipsis_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_empty_default.png b/res/drawable-xxhdpi/ic_empty_default.png
new file mode 100644
index 0000000..0ddbf5f
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_empty_default.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_empty_inbox.png b/res/drawable-xxhdpi/ic_empty_inbox.png
new file mode 100644
index 0000000..718cbd9
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_empty_inbox.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_empty_search.png b/res/drawable-xxhdpi/ic_empty_search.png
new file mode 100644
index 0000000..10708e2
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_empty_search.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_empty_spam.png b/res/drawable-xxhdpi/ic_empty_spam.png
new file mode 100644
index 0000000..208118c
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_empty_spam.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_empty_trash.png b/res/drawable-xxhdpi/ic_empty_trash.png
new file mode 100644
index 0000000..3ef44d0
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_empty_trash.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_fab_4dpshadow.png b/res/drawable-xxhdpi/ic_fab_4dpshadow.png
new file mode 100644
index 0000000..61a1093
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_fab_4dpshadow.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_drawer_folder.png b/res/drawable-xxhdpi/ic_folder_parent_24dp.png
similarity index 80%
copy from res/drawable-xxhdpi/ic_drawer_folder.png
copy to res/drawable-xxhdpi/ic_folder_parent_24dp.png
index ba057d2..c94acd2 100644
--- a/res/drawable-xxhdpi/ic_drawer_folder.png
+++ b/res/drawable-xxhdpi/ic_folder_parent_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_generic_man.png b/res/drawable-xxhdpi/ic_generic_man.png
deleted file mode 100644
index 130c670..0000000
--- a/res/drawable-xxhdpi/ic_generic_man.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_history_24dp.png b/res/drawable-xxhdpi/ic_history_24dp.png
new file mode 100644
index 0000000..4fe0a7e
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_history_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_history_holo_light.png b/res/drawable-xxhdpi/ic_history_holo_light.png
deleted file mode 100644
index b5e82bc..0000000
--- a/res/drawable-xxhdpi/ic_history_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_menu_mark_read_wht_24dp.png b/res/drawable-xxhdpi/ic_mark_read_wht_24dp.png
similarity index 100%
rename from res/drawable-xxhdpi/ic_menu_mark_read_wht_24dp.png
rename to res/drawable-xxhdpi/ic_mark_read_wht_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_menu_mark_unread_wht_24dp.png b/res/drawable-xxhdpi/ic_mark_unread_wht_24dp.png
similarity index 100%
rename from res/drawable-xxhdpi/ic_menu_mark_unread_wht_24dp.png
rename to res/drawable-xxhdpi/ic_mark_unread_wht_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_menu_check_holo_light.png b/res/drawable-xxhdpi/ic_menu_check_holo_light.png
deleted file mode 100644
index ca93e70..0000000
--- a/res/drawable-xxhdpi/ic_menu_check_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_menu_done_holo_light.png b/res/drawable-xxhdpi/ic_menu_done_holo_light.png
deleted file mode 100644
index bba4921..0000000
--- a/res/drawable-xxhdpi/ic_menu_done_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_menu_move_to_holo_light.png b/res/drawable-xxhdpi/ic_menu_move_to_holo_light.png
deleted file mode 100644
index 568009c..0000000
--- a/res/drawable-xxhdpi/ic_menu_move_to_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_menu_revert_holo_dark.png b/res/drawable-xxhdpi/ic_menu_revert_holo_dark.png
deleted file mode 100644
index b51df8a..0000000
--- a/res/drawable-xxhdpi/ic_menu_revert_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_drawer_raw.png b/res/drawable-xxhdpi/ic_menu_wht_24dp.png
similarity index 100%
rename from res/drawable-xxhdpi/ic_drawer_raw.png
rename to res/drawable-xxhdpi/ic_menu_wht_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_drawer_outbox.png b/res/drawable-xxhdpi/ic_mic_24dp.png
similarity index 69%
rename from res/drawable-xxhdpi/ic_drawer_outbox.png
rename to res/drawable-xxhdpi/ic_mic_24dp.png
index 96261e4..ce98904 100644
--- a/res/drawable-xxhdpi/ic_drawer_outbox.png
+++ b/res/drawable-xxhdpi/ic_mic_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_mic_wht_24dp.png b/res/drawable-xxhdpi/ic_mic_wht_24dp.png
new file mode 100644
index 0000000..658c5a5
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_mic_wht_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_move_to_wht_24dp.png b/res/drawable-xxhdpi/ic_move_to_wht_24dp.png
new file mode 100644
index 0000000..5cbc779
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_move_to_wht_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_folder.png b/res/drawable-xxhdpi/ic_next_24dp.png
similarity index 85%
copy from res/drawable-xhdpi/ic_drawer_folder.png
copy to res/drawable-xxhdpi/ic_next_24dp.png
index 02cb6cd..2d90b17 100644
--- a/res/drawable-xhdpi/ic_drawer_folder.png
+++ b/res/drawable-xxhdpi/ic_next_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_edit_24dp.png b/res/drawable-xxhdpi/ic_pencil_24dp.png
similarity index 100%
rename from res/drawable-xxhdpi/ic_edit_24dp.png
rename to res/drawable-xxhdpi/ic_pencil_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_pencil_wht_24dp.png b/res/drawable-xxhdpi/ic_pencil_wht_24dp.png
new file mode 100644
index 0000000..37cde30
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_pencil_wht_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_vertical_shadow_end_2dp.9.png b/res/drawable-xxhdpi/ic_vertical_shadow_end_2dp.9.png
new file mode 100644
index 0000000..25d91cb
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_vertical_shadow_end_2dp.9.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_vertical_shadow_start_4dp.9.png b/res/drawable-xxhdpi/ic_vertical_shadow_start_4dp.9.png
new file mode 100644
index 0000000..d29a2df
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_vertical_shadow_start_4dp.9.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_warning_56dp.png b/res/drawable-xxhdpi/ic_warning_56dp.png
new file mode 100644
index 0000000..85db289
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_warning_56dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_widget_compose_wht_24dp.png b/res/drawable-xxhdpi/ic_widget_compose_wht_24dp.png
deleted file mode 100644
index 24142c7..0000000
--- a/res/drawable-xxhdpi/ic_widget_compose_wht_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/list_read_holo.9.png b/res/drawable-xxhdpi/list_read_holo.9.png
deleted file mode 100644
index 20cfb22..0000000
--- a/res/drawable-xxhdpi/list_read_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/list_unread_holo.9.png b/res/drawable-xxhdpi/list_unread_holo.9.png
deleted file mode 100644
index 20cfb22..0000000
--- a/res/drawable-xxhdpi/list_unread_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/toast_frame_focused.9.png b/res/drawable-xxhdpi/toast_frame_focused.9.png
deleted file mode 100644
index 9509796..0000000
--- a/res/drawable-xxhdpi/toast_frame_focused.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/toast_frame_normal.9.png b/res/drawable-xxhdpi/toast_frame_normal.9.png
deleted file mode 100644
index 365bf35..0000000
--- a/res/drawable-xxhdpi/toast_frame_normal.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/toast_frame_pressed.9.png b/res/drawable-xxhdpi/toast_frame_pressed.9.png
deleted file mode 100644
index 02a2818..0000000
--- a/res/drawable-xxhdpi/toast_frame_pressed.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_anonymous_avatar_40dp.png b/res/drawable-xxxhdpi/ic_anonymous_avatar_40dp.png
new file mode 100644
index 0000000..6089d1e
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_anonymous_avatar_40dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_sent.png b/res/drawable-xxxhdpi/ic_arrow_back_24dp.png
similarity index 77%
copy from res/drawable-xhdpi/ic_drawer_sent.png
copy to res/drawable-xxxhdpi/ic_arrow_back_24dp.png
index a25f185..8068c1b 100644
--- a/res/drawable-xhdpi/ic_drawer_sent.png
+++ b/res/drawable-xxxhdpi/ic_arrow_back_24dp.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_attach_file_18dp.png b/res/drawable-xxxhdpi/ic_attach_file_18dp.png
new file mode 100644
index 0000000..d6aa439
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_attach_file_18dp.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_cancel_24dp.png b/res/drawable-xxxhdpi/ic_cancel_24dp.png
new file mode 100644
index 0000000..1e3c5c1
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_cancel_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_drawer_inbox.png b/res/drawable-xxxhdpi/ic_check_24dp.png
similarity index 76%
rename from res/drawable-xxhdpi/ic_drawer_inbox.png
rename to res/drawable-xxxhdpi/ic_check_24dp.png
index 69a9b96..73c945a 100644
--- a/res/drawable-xxhdpi/ic_drawer_inbox.png
+++ b/res/drawable-xxxhdpi/ic_check_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_sent.png b/res/drawable-xxxhdpi/ic_close_24dp.png
similarity index 74%
copy from res/drawable-xhdpi/ic_drawer_sent.png
copy to res/drawable-xxxhdpi/ic_close_24dp.png
index a25f185..cb7a27c 100644
--- a/res/drawable-xhdpi/ic_drawer_sent.png
+++ b/res/drawable-xxxhdpi/ic_close_24dp.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_cv_loading_24dp.png b/res/drawable-xxxhdpi/ic_cv_loading_24dp.png
new file mode 100644
index 0000000..5349075
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_cv_loading_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_sent.png b/res/drawable-xxxhdpi/ic_drawer_accnt_check_24dp.png
similarity index 76%
copy from res/drawable-xhdpi/ic_drawer_sent.png
copy to res/drawable-xxxhdpi/ic_drawer_accnt_check_24dp.png
index a25f185..9619115 100644
--- a/res/drawable-xhdpi/ic_drawer_sent.png
+++ b/res/drawable-xxxhdpi/ic_drawer_accnt_check_24dp.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_drawer_drafts_24dp.png b/res/drawable-xxxhdpi/ic_drawer_drafts_24dp.png
new file mode 100644
index 0000000..a2a58be
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_drawer_drafts_24dp.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_drawer_folder_24dp.png b/res/drawable-xxxhdpi/ic_drawer_folder_24dp.png
new file mode 100644
index 0000000..1bd3626
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_drawer_folder_24dp.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_drawer_help_24dp.png b/res/drawable-xxxhdpi/ic_drawer_help_24dp.png
new file mode 100644
index 0000000..667aea8
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_drawer_help_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_sent.png b/res/drawable-xxxhdpi/ic_drawer_inbox_24dp.png
similarity index 68%
copy from res/drawable-xhdpi/ic_drawer_sent.png
copy to res/drawable-xxxhdpi/ic_drawer_inbox_24dp.png
index a25f185..1797751 100644
--- a/res/drawable-xhdpi/ic_drawer_sent.png
+++ b/res/drawable-xxxhdpi/ic_drawer_inbox_24dp.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_drawer_outbox_24dp.png b/res/drawable-xxxhdpi/ic_drawer_outbox_24dp.png
new file mode 100644
index 0000000..7d1ad29
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_drawer_outbox_24dp.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_drawer_sent_24dp.png b/res/drawable-xxxhdpi/ic_drawer_sent_24dp.png
new file mode 100644
index 0000000..23e475e
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_drawer_sent_24dp.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_drawer_settings_24dp.png b/res/drawable-xxxhdpi/ic_drawer_settings_24dp.png
new file mode 100644
index 0000000..83b92c4
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_drawer_settings_24dp.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_drawer_starred_24dp.png b/res/drawable-xxxhdpi/ic_drawer_starred_24dp.png
new file mode 100644
index 0000000..d1b77ca
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_drawer_starred_24dp.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_drawer_trash_24dp.png b/res/drawable-xxxhdpi/ic_drawer_trash_24dp.png
new file mode 100644
index 0000000..3bf1f7e
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_drawer_trash_24dp.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_drawer_unread_24dp.png b/res/drawable-xxxhdpi/ic_drawer_unread_24dp.png
new file mode 100644
index 0000000..a36596d
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_drawer_unread_24dp.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_fab_4dpshadow.png b/res/drawable-xxxhdpi/ic_fab_4dpshadow.png
new file mode 100644
index 0000000..d5ac8f8
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_fab_4dpshadow.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_sent.png b/res/drawable-xxxhdpi/ic_folder_parent_24dp.png
similarity index 62%
copy from res/drawable-xhdpi/ic_drawer_sent.png
copy to res/drawable-xxxhdpi/ic_folder_parent_24dp.png
index a25f185..d218c6c 100644
--- a/res/drawable-xhdpi/ic_drawer_sent.png
+++ b/res/drawable-xxxhdpi/ic_folder_parent_24dp.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_history_24dp.png b/res/drawable-xxxhdpi/ic_history_24dp.png
new file mode 100644
index 0000000..420576b
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_history_24dp.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_menu_mark_read_wht_24dp.png b/res/drawable-xxxhdpi/ic_mark_read_wht_24dp.png
similarity index 100%
rename from res/drawable-xxxhdpi/ic_menu_mark_read_wht_24dp.png
rename to res/drawable-xxxhdpi/ic_mark_read_wht_24dp.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_menu_mark_unread_wht_24dp.png b/res/drawable-xxxhdpi/ic_mark_unread_wht_24dp.png
similarity index 100%
rename from res/drawable-xxxhdpi/ic_menu_mark_unread_wht_24dp.png
rename to res/drawable-xxxhdpi/ic_mark_unread_wht_24dp.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_drawer_raw.png b/res/drawable-xxxhdpi/ic_menu_wht_24dp.png
similarity index 100%
rename from res/drawable-xxxhdpi/ic_drawer_raw.png
rename to res/drawable-xxxhdpi/ic_menu_wht_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_drawer_outbox.png b/res/drawable-xxxhdpi/ic_mic_24dp.png
similarity index 62%
copy from res/drawable-xxhdpi/ic_drawer_outbox.png
copy to res/drawable-xxxhdpi/ic_mic_24dp.png
index 96261e4..c586bb5 100644
--- a/res/drawable-xxhdpi/ic_drawer_outbox.png
+++ b/res/drawable-xxxhdpi/ic_mic_24dp.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_mic_wht_24dp.png b/res/drawable-xxxhdpi/ic_mic_wht_24dp.png
new file mode 100644
index 0000000..fe00ae5
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_mic_wht_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_inbox.png b/res/drawable-xxxhdpi/ic_next_24dp.png
similarity index 82%
rename from res/drawable-xhdpi/ic_drawer_inbox.png
rename to res/drawable-xxxhdpi/ic_next_24dp.png
index 16d5f6f..4e7264d 100644
--- a/res/drawable-xhdpi/ic_drawer_inbox.png
+++ b/res/drawable-xxxhdpi/ic_next_24dp.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_pencil_wht_24dp.png b/res/drawable-xxxhdpi/ic_pencil_wht_24dp.png
new file mode 100644
index 0000000..6f06223
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_pencil_wht_24dp.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_vertical_shadow_end_2dp.9.png b/res/drawable-xxxhdpi/ic_vertical_shadow_end_2dp.9.png
new file mode 100644
index 0000000..7566ba2
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_vertical_shadow_end_2dp.9.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_vertical_shadow_start_4dp.9.png b/res/drawable-xxxhdpi/ic_vertical_shadow_start_4dp.9.png
new file mode 100644
index 0000000..542ae1a
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_vertical_shadow_start_4dp.9.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_warning_56dp.png b/res/drawable-xxxhdpi/ic_warning_56dp.png
new file mode 100644
index 0000000..65bc0fb
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_warning_56dp.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_widget_compose_wht_24dp.png b/res/drawable-xxxhdpi/ic_widget_compose_wht_24dp.png
deleted file mode 100644
index d3ff0ec..0000000
--- a/res/drawable-xxxhdpi/ic_widget_compose_wht_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/compose_button.xml b/res/drawable/compose_button.xml
index a550835..484747d 100644
--- a/res/drawable/compose_button.xml
+++ b/res/drawable/compose_button.xml
@@ -15,9 +15,19 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <item>
+        <selector>
+            <item android:state_pressed="true"
+                  android:drawable="@drawable/compose_button_pressed_background" />
+            <item android:state_focused="true"
+                  android:drawable="@drawable/compose_button_pressed_background" />
+            <item android:drawable="@drawable/compose_button_background" />
+        </selector>
+    </item>
 
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_pressed="true" android:drawable="@drawable/ic_compose_pressed_56dp" />
-    <item android:state_focused="true" android:drawable="@drawable/ic_compose_pressed_56dp" />
-    <item android:drawable="@drawable/ic_compose_56dp" />
-</selector>
+    <item>
+        <bitmap android:src="@drawable/ic_pencil_wht_24dp"
+                android:gravity="center" />
+    </item>
+</layer-list>
diff --git a/res/drawable/list_edge_tablet.xml b/res/drawable/compose_button_background.xml
similarity index 74%
copy from res/drawable/list_edge_tablet.xml
copy to res/drawable/compose_button_background.xml
index d6aae76..94ab905 100644
--- a/res/drawable/list_edge_tablet.xml
+++ b/res/drawable/compose_button_background.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     Copyright (C) 2013 Google Inc.
+     Copyright (C) 2014 Google Inc.
      Licensed to The Android Open Source Project.
 
      Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,9 +16,9 @@
      limitations under the License.
 -->
 
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
-    <size
-        android:width="1dp" />
-    <solid
-        android:color="@color/light_gray" />
-</shape>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+        android:shape="oval">
+    <solid android:color="@color/compose_button_background_color" />
+    <size android:width="@dimen/compose_button_width"
+          android:height="@dimen/compose_button_width" />
+</shape>
\ No newline at end of file
diff --git a/res/drawable/list_edge_tablet.xml b/res/drawable/compose_button_pressed_background.xml
similarity index 74%
copy from res/drawable/list_edge_tablet.xml
copy to res/drawable/compose_button_pressed_background.xml
index d6aae76..ae6f82d 100644
--- a/res/drawable/list_edge_tablet.xml
+++ b/res/drawable/compose_button_pressed_background.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     Copyright (C) 2013 Google Inc.
+     Copyright (C) 2014 Google Inc.
      Licensed to The Android Open Source Project.
 
      Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,9 +16,9 @@
      limitations under the License.
 -->
 
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
-    <size
-        android:width="1dp" />
-    <solid
-        android:color="@color/light_gray" />
-</shape>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+        android:shape="oval">
+    <solid android:color="@color/compose_button_pressed_background_color" />
+    <size android:width="@dimen/compose_button_width"
+          android:height="@dimen/compose_button_width" />
+</shape>
\ No newline at end of file
diff --git a/res/drawable/conversation_item_background_selector.xml b/res/drawable/conversation_item_background.xml
similarity index 77%
rename from res/drawable/conversation_item_background_selector.xml
rename to res/drawable/conversation_item_background.xml
index 2765ae5..c5cfe4a 100644
--- a/res/drawable/conversation_item_background_selector.xml
+++ b/res/drawable/conversation_item_background.xml
@@ -17,12 +17,10 @@
 -->
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:state_pressed="true"
-          android:drawable="@color/conversation_item_blue_background" />
-    <item android:state_selected="true"
-          android:drawable="@color/conversation_item_blue_background" />
+          android:drawable="@color/conversation_item_grey_pressed_color" />
+    <item android:state_checked="true"
+          android:drawable="@color/conversation_item_grey_background_color" />
     <item android:state_activated="true"
-          android:drawable="@color/conversation_item_blue_background" />
-    <item android:state_focused="true"
-          android:drawable="@android:color/white" />
+          android:drawable="@color/conversation_item_blue_background_color" />
     <item android:drawable="@android:color/white" />
 </selector>
diff --git a/res/drawable/list_edge_tablet.xml b/res/drawable/conversation_photo_teaser_checkmark_bg.xml
similarity index 84%
rename from res/drawable/list_edge_tablet.xml
rename to res/drawable/conversation_photo_teaser_checkmark_bg.xml
index d6aae76..484a3af 100644
--- a/res/drawable/list_edge_tablet.xml
+++ b/res/drawable/conversation_photo_teaser_checkmark_bg.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     Copyright (C) 2013 Google Inc.
+     Copyright (C) 2014 Google Inc.
      Licensed to The Android Open Source Project.
 
      Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,9 +16,7 @@
      limitations under the License.
 -->
 
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
-    <size
-        android:width="1dp" />
-    <solid
-        android:color="@color/light_gray" />
-</shape>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="oval">
+    <solid android:color="@android:color/white" />
+</shape>
\ No newline at end of file
diff --git a/res/drawable/conversation_wide_unread_selector.xml b/res/drawable/conversation_wide_unread_selector.xml
deleted file mode 100644
index 39de4ac..0000000
--- a/res/drawable/conversation_wide_unread_selector.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2011 Google Inc.
-     Licensed to 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.
--->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_focused="true"
-          android:drawable="@drawable/list_conversation_wide_unread_focused_holo" />
-    <item android:state_pressed="true"
-          android:drawable="@drawable/list_conversation_wide_unread_pressed_holo" />
-    <item android:state_activated="true"
-          android:drawable="@drawable/list_conversation_wide_unread_pressed_holo" />
-    <item android:state_selected="true"
-          android:drawable="@drawable/list_conversation_wide_unread_selected_holo" />
-    <item android:drawable="@drawable/list_conversation_wide_unread_normal_holo" />
-</selector>
diff --git a/res/drawable/folder_item.xml b/res/drawable/folder_item.xml
index f344803..f639396 100644
--- a/res/drawable/folder_item.xml
+++ b/res/drawable/folder_item.xml
@@ -17,8 +17,6 @@
 -->
 
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_pressed="true" android:drawable="@drawable/list_pressed_holo" />
-    <item android:state_activated="true" android:drawable="@color/mail_app_blue" />
-    <item android:state_focused="true" android:drawable="@drawable/list_focused_holo" />
+    <item android:state_activated="true" android:drawable="@color/drawer_item_activated_background_color" />
     <item android:drawable="@android:color/transparent" />
 </selector>
diff --git a/res/drawable/ic_collapse_24dp.xml b/res/drawable/ic_collapse_24dp.xml
new file mode 100644
index 0000000..903decb
--- /dev/null
+++ b/res/drawable/ic_collapse_24dp.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<rotate xmlns:android="http://schemas.android.com/apk/res/android"
+    android:drawable="@drawable/ic_expand_more_24dp"
+    android:fromDegrees="180"
+    android:toDegrees="180"
+    android:visible="true" />
\ No newline at end of file
diff --git a/res/drawable/ic_drawer.xml b/res/drawable/ic_next.xml
similarity index 88%
copy from res/drawable/ic_drawer.xml
copy to res/drawable/ic_next.xml
index d78f5f4..34586dd 100644
--- a/res/drawable/ic_drawer.xml
+++ b/res/drawable/ic_next.xml
@@ -15,7 +15,6 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
+
 <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
-        android:src="@drawable/ic_drawer_raw"
-        android:autoMirrored="true">
-</bitmap>
+    android:src="@drawable/ic_next_24dp" />
diff --git a/res/values-v19/drawables.xml b/res/drawable/ic_prev.xml
similarity index 75%
copy from res/values-v19/drawables.xml
copy to res/drawable/ic_prev.xml
index 17f03bf..6e585df 100644
--- a/res/values-v19/drawables.xml
+++ b/res/drawable/ic_prev.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-    Copyright (C) 2013 Google Inc.
+    Copyright (C) 2014 Google Inc.
     Licensed to The Android Open Source Project.
 
     Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,6 +15,7 @@
     See the License for the specific language governing permissions and
     limitations under the License.
 -->
-<resources>
-    <drawable name="ic_attach">@drawable/ic_attach_file</drawable>
-</resources>
+<rotate xmlns:android="http://schemas.android.com/apk/res/android"
+    android:drawable="@drawable/ic_next_24dp"
+    android:fromDegrees="180"
+    android:toDegrees="180" />
diff --git a/res/drawable/folder_teaser_item_background.xml b/res/drawable/mini_drawer_folder_background.xml
similarity index 70%
copy from res/drawable/folder_teaser_item_background.xml
copy to res/drawable/mini_drawer_folder_background.xml
index 32701fc..295643f 100644
--- a/res/drawable/folder_teaser_item_background.xml
+++ b/res/drawable/mini_drawer_folder_background.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     Copyright (C) 2013 Google Inc.
+     Copyright (C) 2014 Google Inc.
      Licensed to The Android Open Source Project.
 
      Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,9 +16,11 @@
      limitations under the License.
 -->
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <item android:state_pressed="true" android:drawable="@drawable/list_pressed_holo"/>
-    <item android:state_focused="true" android:drawable="@drawable/list_focused_holo"/>
-    <item android:drawable="@android:color/transparent"/>
-
-</selector>
\ No newline at end of file
+    <item android:state_activated="true">
+        <shape>
+            <corners android:radius="2dp" />
+            <solid android:color="@color/mini_drawer_activated_background_color" />
+        </shape>
+    </item>
+    <item android:drawable="@android:color/transparent" />
+</selector>
diff --git a/res/drawable/new_message_toast_background.xml b/res/drawable/new_message_toast_background.xml
deleted file mode 100644
index 5ed0301..0000000
--- a/res/drawable/new_message_toast_background.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_window_focused="false" android:state_enabled="true"
-        android:drawable="@drawable/btn_default_normal_holo_light" />
-    <item android:state_window_focused="false" android:state_enabled="false"
-        android:drawable="@drawable/btn_default_disabled_holo_light" />
-    <item android:state_pressed="true"
-        android:drawable="@drawable/btn_default_pressed_holo_light" />
-    <item android:state_focused="true" android:state_enabled="true"
-        android:drawable="@drawable/btn_default_focused_holo_light" />
-    <item android:state_enabled="true"
-        android:drawable="@drawable/btn_default_normal_holo_light" />
-    <item android:state_focused="true"
-        android:drawable="@drawable/btn_default_disabled_focused_holo_light" />
-    <item android:drawable="@drawable/btn_default_disabled_holo_light" />
-</selector>
diff --git a/res/drawable/toast_button_background.xml b/res/drawable/toast_button_background.xml
deleted file mode 100644
index 0bd9650..0000000
--- a/res/drawable/toast_button_background.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2013 Google Inc.
-    Licensed to 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.
--->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_pressed="true" android:drawable="@drawable/toast_frame_pressed" />
-    <item android:drawable="@android:color/transparent" />
-</selector>
\ No newline at end of file
diff --git a/res/layout-sw600dp/floating_actions.xml b/res/layout-sw600dp/floating_actions.xml
index 639e56b..d82642f 100644
--- a/res/layout-sw600dp/floating_actions.xml
+++ b/res/layout-sw600dp/floating_actions.xml
@@ -15,63 +15,47 @@
      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="match_parent"
+<com.android.mail.ui.ActionableToastBar
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/toast_bar"
+    android:layout_width="wrap_content"
     android:layout_height="wrap_content"
-    android:layout_gravity="bottom">
+    android:layout_gravity="bottom|start"
+    android:layout_marginLeft="@dimen/floating_action_bar_margin"
+    android:layout_marginRight="@dimen/floating_action_bar_margin"
+    android:layout_marginBottom="@dimen/floating_action_bar_margin"
+    android:background="@drawable/snack_bar_edge_tablet"
+    android:clickable="true"
+    android:visibility="gone">
 
-    <com.android.mail.ui.ActionableToastBar
-        android:id="@+id/toast_bar"
-        android:layout_width="wrap_content"
+    <LinearLayout
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:layout_gravity="bottom"
-        android:layout_marginLeft="@dimen/floating_action_bar_margin"
-        android:layout_marginRight="@dimen/floating_action_bar_margin"
-        android:layout_marginBottom="@dimen/floating_action_bar_margin"
-        android:background="@drawable/snack_bar_edge_tablet"
-        android:clickable="true"
-        android:visibility="gone">
+        android:orientation="horizontal">
 
-        <LinearLayout
+        <TextView
+            android:id="@+id/description_text"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_vertical"
+            android:layout_weight="1"
+            android:paddingTop="@dimen/snack_bar_margin_vertical"
+            android:paddingBottom="@dimen/snack_bar_margin_vertical"
+            android:textColor="@android:color/white"
+            style="@style/SnackBarDescriptionTextStyle" />
+
+        <TextView
+            android:id="@+id/action_text"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:orientation="horizontal">
+            android:layout_gravity="center_vertical"
+            android:gravity="center_horizontal"
+            android:maxWidth="190dp"
+            android:paddingTop="@dimen/snack_bar_margin_vertical"
+            android:paddingBottom="@dimen/snack_bar_margin_vertical"
+            android:textAllCaps="true"
+            android:textColor="@color/snack_bar_action_text_color"
+            style="@style/SnackBarActionTextStyle" />
+    </LinearLayout>
 
-            <TextView
-                android:id="@+id/description_text"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center_vertical"
-                android:layout_marginLeft="@dimen/snack_bar_margin_horizontal"
-                android:layout_marginRight="@dimen/snack_bar_margin_horizontal"
-                android:minWidth="240dp"
-                android:maxWidth="350dp"
-                android:paddingTop="@dimen/snack_bar_margin_vertical"
-                android:paddingBottom="@dimen/snack_bar_margin_vertical"
-                android:textColor="@android:color/white" />
-
-            <TextView
-                android:id="@+id/action_text"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center_vertical"
-                android:paddingTop="@dimen/snack_bar_margin_vertical"
-                android:paddingBottom="@dimen/snack_bar_margin_vertical"
-                android:textAllCaps="true"
-                android:textColor="@color/snack_bar_action_text_color"
-                style="@style/SnackBarActionTextStyle" />
-        </LinearLayout>
-
-    </com.android.mail.ui.ActionableToastBar>
-
-    <Space
-        android:layout_width="0dp"
-        android:layout_height="match_parent"
-        android:layout_weight="1" />
-
-    <ImageButton
-        android:id="@+id/compose_button"
-        android:contentDescription="@string/compose"
-        style="@style/FloatingActionButtonStyle" />
-
-</LinearLayout>
+</com.android.mail.ui.ActionableToastBar>
\ No newline at end of file
diff --git a/res/layout-sw600dp/mail_toolbar_view.xml b/res/layout-sw600dp/mail_toolbar_view.xml
new file mode 100644
index 0000000..8205676
--- /dev/null
+++ b/res/layout-sw600dp/mail_toolbar_view.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2014 Google Inc.
+    Licensed to 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.
+-->
+
+<com.android.mail.ui.CustomViewToolbar
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/mail_toolbar"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    app:contentInsetStart="@dimen/action_bar_content_inset_start"
+    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
+    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" >
+
+    <!-- Custom view for search icon -->
+    <LinearLayout
+        android:id="@+id/actionbar_custom_view"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+        <TextView
+            android:id="@+id/actionbar_title"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:gravity="center_vertical|start"
+            style="@style/ToolbarTitleStyle" />
+
+        <ImageView
+            android:id="@+id/actionbar_search_button"
+            android:layout_width="56dp"
+            android:layout_height="match_parent"
+            android:background="?attr/selectableItemBackgroundBorderless"
+            android:contentDescription="@string/menu_search"
+            android:scaleType="center"
+            android:src="@drawable/ic_menu_search" />
+
+    </LinearLayout>
+
+</com.android.mail.ui.CustomViewToolbar>
\ No newline at end of file
diff --git a/res/layout-ldrtl/conversation_message_attachment_bar_progress_bar.xml b/res/layout-v17/conversation_message_attachment_bar_progress_bar.xml
similarity index 100%
rename from res/layout-ldrtl/conversation_message_attachment_bar_progress_bar.xml
rename to res/layout-v17/conversation_message_attachment_bar_progress_bar.xml
diff --git a/res/layout-v19/conversation_message_upper_header_actions_land_or_tablet.xml b/res/layout-v19/conversation_message_upper_header_actions_land_or_tablet.xml
deleted file mode 100644
index 165ff77..0000000
--- a/res/layout-v19/conversation_message_upper_header_actions_land_or_tablet.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2011 Google Inc.
-     Licensed to 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.
--->
-<merge xmlns:android="http://schemas.android.com/apk/res/android">
-    <ImageView
-        android:id="@+id/edit_draft"
-        style="@style/MessageHeaderActionButtonStyle"
-        android:visibility="gone"
-        android:src="@drawable/ic_edit_24dp"
-        android:contentDescription="@string/resume_draft" />
-    <ImageView
-        android:id="@+id/reply"
-        style="@style/MessageHeaderActionButtonStyle"
-        android:src="@drawable/ic_reply_24dp"
-        android:contentDescription="@string/reply" />
-    <ImageView
-        android:id="@+id/reply_all"
-        style="@style/MessageHeaderActionButtonStyle"
-        android:src="@drawable/ic_reply_all_24dp"
-        android:contentDescription="@string/reply_all" />
-    <ImageView
-        android:id="@+id/forward"
-        style="@style/MessageHeaderActionButtonStyle"
-        android:src="@drawable/ic_forward_24dp"
-        android:contentDescription="@string/forward" />
-    <ImageView
-        android:id="@+id/overflow"
-        android:layout_height="@dimen/message_header_action_button_height"
-        android:layout_width="@dimen/message_header_action_button_width"
-        style="@style/OverflowButtonStyle" />
-</merge>
diff --git a/res/layout/account_item.xml b/res/layout/account_item.xml
index 51c6fa6..4bddb2d 100644
--- a/res/layout/account_item.xml
+++ b/res/layout/account_item.xml
@@ -20,7 +20,7 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_height="wrap_content"
     android:layout_width="match_parent"
-    android:padding="8dp"
+    android:padding="16dp"
     android:minHeight="@dimen/account_item_minimum_height"
     android:background="@drawable/nonfolder_item">
 
@@ -61,9 +61,9 @@
 
     <ImageView
         android:id="@+id/checkmark"
-        android:layout_width="48dp"
-        android:layout_height="48dp"
-        android:src="@drawable/ic_menu_check_holo_light"
+        android:layout_width="24dp"
+        android:layout_height="24dp"
+        android:src="@drawable/ic_drawer_accnt_check_24dp"
         android:layout_gravity="center_vertical" />
 
 </com.android.mail.ui.AccountItemView>
diff --git a/res/layout/attachment.xml b/res/layout/attachment.xml
index 6ca4c03..d0d01a7 100644
--- a/res/layout/attachment.xml
+++ b/res/layout/attachment.xml
@@ -16,41 +16,53 @@
      limitations under the License.
 -->
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    style="@style/AttachmentContainer"
-    android:focusableInTouchMode="true"
-    android:focusable="true">
+    android:layout_width="match_parent"
+    android:layout_height="48dp"
+    android:background="@drawable/attachment_bg_holo"
+    android:focusable="true"
+    android:focusableInTouchMode="true">
 
     <ImageView
         android:id="@+id/thumbnail"
-        android:src="@drawable/ic_attach_file_20dp"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:src="@drawable/ic_attach_file_18dp"
         android:layout_gravity="center_vertical"
         style="@style/AttachmentThumbnail"/>
 
     <!-- Attachment name and size -->
     <LinearLayout
         android:orientation="vertical"
-        android:layout_width="0dip"
+        android:layout_width="0dp"
         android:layout_height="wrap_content"
         android:layout_weight="1"
         android:layout_gravity="center_vertical"
         style="@style/AttachmentTextContainer" >
 
         <TextView android:id="@+id/attachment_name"
-            style="@style/AttachmentName" />
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:textAppearance="?android:attr/textAppearanceSmall"
+            android:textColor="@color/attachment_name_color"
+            android:singleLine="true" />
 
         <TextView android:id="@+id/attachment_size"
-            style="@style/AttachmentSize" />
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:textColor="@color/text_color_hint_grey"
+            android:textSize="12sp"
+            android:singleLine="true" />
 
     </LinearLayout>
 
     <!-- Remove button -->
     <ImageButton android:id="@+id/remove_attachment"
-        android:src="@drawable/ic_cancel_holo_light"
-        android:layout_width="48dip"
+        android:layout_width="48dp"
         android:layout_height="match_parent"
+        android:background="?android:attr/selectableItemBackground"
         android:clickable="true"
         android:gravity="center"
-        android:background="?android:attr/selectableItemBackground"/>
+        android:src="@drawable/ic_cancel_holo_light" />
 
 
 </LinearLayout>
diff --git a/res/layout/cc_bcc_view.xml b/res/layout/cc_bcc_view.xml
index 6f472a9..551dc08 100644
--- a/res/layout/cc_bcc_view.xml
+++ b/res/layout/cc_bcc_view.xml
@@ -27,12 +27,12 @@
         style="@style/RecipientComposeFieldLayout">
 
         <LinearLayout
+            android:id="@+id/cc_dropdown_anchor"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             style="@style/ComposeFieldContent">
 
             <TextView
-                android:id="@+id/cc_label"
                 android:contentDescription="@string/cc"
                 android:text="@string/cc"
                 style="@style/ComposeHeading" />
@@ -40,12 +40,12 @@
                 <com.android.ex.chips.RecipientEditTextView
                     android:id="@+id/cc"
                     android:contentDescription="@string/cc"
-                    android:dropDownAnchor="@id/cc_content"
+                    android:dropDownAnchor="@id/cc_dropdown_anchor"
                     style="@style/RecipientEditTextViewStyle" />
 
         </LinearLayout>
 
-        <View style="@style/RecipientComposeFieldSpacer" />
+        <View style="@style/DefaultDividerStyle" />
 
     </LinearLayout>
 
@@ -56,12 +56,12 @@
         style="@style/RecipientComposeFieldLayout">
 
         <LinearLayout
+            android:id="@+id/bcc_dropdown_anchor"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             style="@style/ComposeFieldContent">
 
             <TextView
-                android:id="@+id/bcc_label"
                 android:contentDescription="@string/bcc"
                 android:text="@string/bcc"
                 style="@style/ComposeHeading" />
@@ -69,12 +69,12 @@
             <com.android.ex.chips.RecipientEditTextView
                 android:id="@+id/bcc"
                 android:contentDescription="@string/bcc"
-                android:dropDownAnchor="@id/bcc_content"
+                android:dropDownAnchor="@id/bcc_dropdown_anchor"
                 style="@style/RecipientEditTextViewStyle" />
 
         </LinearLayout>
 
-        <View style="@style/RecipientComposeFieldSpacer" />
+        <View style="@style/DefaultDividerStyle" />
 
     </LinearLayout>
 
diff --git a/res/layout/child_folder_item.xml b/res/layout/child_folder_item.xml
deleted file mode 100644
index 3ce936b..0000000
--- a/res/layout/child_folder_item.xml
+++ /dev/null
@@ -1,95 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2012 Google Inc.
-     Licensed to 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.
--->
-
-<com.android.mail.ui.FolderItemView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_height="wrap_content"
-    android:layout_width="match_parent"
-    android:minHeight="@dimen/folder_list_item_minimum_height"
-    android:background="@drawable/folder_item"
-    android:paddingLeft="48dp">
-
-    <ImageView
-        android:id="@+id/folder_parent_icon"
-        android:layout_width="16dip"
-        android:layout_height="16dip"
-        android:layout_alignParentBottom="true"
-        android:layout_alignParentRight="true"
-        android:visibility="gone"
-        android:src="@drawable/folder_parent_icon" />
-
-    <ImageView
-        android:id="@+id/color_block"
-        style="@style/FolderColorBoxStyle" />
-
-    <TextView
-        android:id="@+id/unread"
-        style="@style/UnreadCountWithMarginEndStyle"
-        android:layout_alignWithParentIfMissing="true"
-        android:layout_toLeftOf="@id/folder_parent_icon"
-        android:textColor="@color/folder_name_color_primary_invertible" />
-
-    <TextView
-        android:id="@+id/unseen"
-        style="@style/UnseenCountWithMarginEndStyle"
-        android:layout_alignWithParentIfMissing="true"
-        android:layout_alignParentRight="true"
-        android:layout_toLeftOf="@id/folder_parent_icon" />
-
-    <RelativeLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_centerVertical="true"
-        android:layout_toLeftOf="@id/unread"
-        android:layout_alignWithParentIfMissing="true"
-        android:layout_marginTop="@dimen/folder_swatch_height"
-        android:layout_marginBottom="@dimen/folder_swatch_height"
-        style="@style/FolderListItemStartStyle" >
-
-        <ImageView
-            android:id="@+id/folder_icon"
-            android:layout_width="20dp"
-            android:layout_height="20dp"
-            android:layout_centerVertical="true"
-            android:layout_marginRight="10dp"
-            android:visibility="gone" />
-
-        <TextView
-            android:id="@+id/name"
-            android:layout_height="wrap_content"
-            android:layout_width="match_parent"
-            android:layout_toRightOf="@id/folder_icon"
-            android:maxLines="2"
-            android:ellipsize="end"
-            android:textColor="@color/folder_name_color_primary_invertible"
-            android:textAlignment="viewStart"
-            android:textAppearance="?android:attr/textAppearanceMedium" />
-
-        <TextView
-            android:id="@+id/description"
-            android:layout_height="wrap_content"
-            android:layout_width="match_parent"
-            android:layout_below="@id/name"
-            android:layout_toRightOf="@id/folder_icon"
-            android:textColor="@color/folder_name_color_primary_invertible"
-            android:textAppearance="?android:attr/textAppearanceSmall"
-            android:visibility="gone" />
-
-    </RelativeLayout>
-
-</com.android.mail.ui.FolderItemView>
diff --git a/res/layout/compose.xml b/res/layout/compose.xml
index 4ca2ef5..d95b5c6 100644
--- a/res/layout/compose.xml
+++ b/res/layout/compose.xml
@@ -18,7 +18,9 @@
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:background="@color/holo_light_background_color"
+    android:layout_gravity="center_horizontal"
+    android:paddingLeft="@dimen/compose_wrapper_side_padding"
+    android:paddingRight="@dimen/compose_wrapper_side_padding"
     style="@style/ComposeAreaWrapper">
 
     <include layout="@layout/wait_fragment" />
@@ -31,9 +33,11 @@
         android:orientation="vertical"
         android:visibility="gone">
 
+        <!-- Horizontal layout to get side paddings for tablets -->
         <LinearLayout
             android:layout_width="match_parent"
-            android:layout_height="match_parent">
+            android:layout_height="match_parent"
+            android:paddingTop="@dimen/compose_wrapper_top_padding">
 
             <!-- Start border -->
             <Space
@@ -88,7 +92,6 @@
                     android:id="@+id/composearea_tap_trap_bottom"
                     android:layout_width="match_parent"
                     android:layout_height="match_parent"
-                    android:background="@color/compose_background_color"
                     android:clickable="true" />
 
             </LinearLayout>
diff --git a/res/layout/compose_attachment_tile.xml b/res/layout/compose_attachment_tile.xml
index f3496f8..84896b7 100644
--- a/res/layout/compose_attachment_tile.xml
+++ b/res/layout/compose_attachment_tile.xml
@@ -72,7 +72,7 @@
 
         <ImageButton
             android:id="@+id/attachment_tile_close_button"
-            android:src="@drawable/ic_cancel_wht"
+            android:src="@drawable/ic_cancel_wht_24dp"
             android:layout_width="44dip"
             android:layout_height="44dip"
             android:layout_gravity="center_vertical|end|right"
diff --git a/res/layout/compose_from.xml b/res/layout/compose_from.xml
index f33dcdd..f83a1f9 100644
--- a/res/layout/compose_from.xml
+++ b/res/layout/compose_from.xml
@@ -71,6 +71,6 @@
 
     </LinearLayout>
 
-    <View style="@style/RecipientComposeFieldSpacer" />
+    <View style="@style/DefaultDividerStyle" />
 
 </LinearLayout>
diff --git a/res/layout/compose_mode_display_item.xml b/res/layout/compose_mode_display_item.xml
index fcf06f9..1c4b09e 100644
--- a/res/layout/compose_mode_display_item.xml
+++ b/res/layout/compose_mode_display_item.xml
@@ -17,7 +17,6 @@
 -->
 <TextView xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/mode"
-    style="?android:attr/spinnerItemStyle"
     android:layout_width="match_parent"
-    android:layout_height="?android:attr/listPreferredItemHeightSmall"
-    android:ellipsize="end"/>
\ No newline at end of file
+    android:layout_height="wrap_content"
+    style="@style/ToolbarTitleStyle" />
\ No newline at end of file
diff --git a/res/layout/compose_recipients.xml b/res/layout/compose_recipients.xml
index 3c3a0e4..8baf0fd 100644
--- a/res/layout/compose_recipients.xml
+++ b/res/layout/compose_recipients.xml
@@ -33,7 +33,6 @@
             style="@style/ComposeFieldContent">
 
             <TextView
-                android:id="@+id/to_label"
                 android:contentDescription="@string/to"
                 android:text="@string/to"
                 style="@style/ComposeHeading" />
@@ -75,9 +74,10 @@
 
         </LinearLayout>
 
-        <View style="@style/RecipientComposeFieldSpacer" />
     </LinearLayout>
 
+    <View style="@style/DefaultDividerStyle" />
+
     <!-- Cc/Bcc -->
     <com.android.mail.compose.CcBccView
         android:id="@+id/cc_bcc_wrapper"
diff --git a/res/layout/compose_subject.xml b/res/layout/compose_subject.xml
index ae464ad..92aeefc 100644
--- a/res/layout/compose_subject.xml
+++ b/res/layout/compose_subject.xml
@@ -24,13 +24,16 @@
         android:layout_height="wrap_content"
         style="@style/ComposeFieldContent">
 
-        <!-- Subject: localization cannot control what field pressing tab will bring the user to. This is controlled at runtime.  -->
+        <!--
+            Subject: localization cannot control what field pressing tab will bring the user to.
+            This is controlled at runtime.
+        -->
         <com.android.mail.compose.EnterSubject
             android:id="@+id/subject"
             style="@style/ComposeSubjectView" />
 
     </LinearLayout>
 
-    <View style="@style/RecipientComposeFieldSpacer"/>
+    <View style="@style/DefaultDividerStyle"/>
 
 </LinearLayout>
diff --git a/res/layout/conversation_footer.xml b/res/layout/conversation_footer.xml
index edd270a..f95f20b 100644
--- a/res/layout/conversation_footer.xml
+++ b/res/layout/conversation_footer.xml
@@ -19,7 +19,9 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="vertical"
     android:layout_width="match_parent"
-    android:layout_height="wrap_content" >
+    android:layout_height="wrap_content"
+    android:layout_marginTop="24dp"
+    android:background="@android:color/white" >
 
     <include layout="@layout/conversation_view_border" />
 
@@ -53,9 +55,8 @@
 
     </LinearLayout>
 
-    <View
+    <Space
         android:layout_width="match_parent"
-        android:layout_height="16dp"
-        android:background="@color/conversation_view_item_background_color" />
+        android:layout_height="48dp" />
 
-</com.android.mail.browse.ConversationFooterView>
\ No newline at end of file
+</com.android.mail.browse.ConversationFooterView>
diff --git a/res/layout/conversation_item_view.xml b/res/layout/conversation_item_view.xml
index 2b8065a..9427a62 100644
--- a/res/layout/conversation_item_view.xml
+++ b/res/layout/conversation_item_view.xml
@@ -118,8 +118,8 @@
                     android:id="@+id/paperclip"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:layout_marginTop="17dp"
-                    android:src="@drawable/ic_attach_file_20dp"
+                    android:layout_marginTop="20dp"
+                    android:src="@drawable/ic_attach_file_18dp"
                     style="@style/ConversationListPaperclipStyle" />
 
                 <!-- for Email -->
@@ -169,9 +169,7 @@
                     android:id="@+id/folders"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:layout_marginTop="4dp"
-                    android:includeFontPadding="false"
-                    android:textSize="12sp"
+                    android:textSize="@dimen/folder_tl_font_size"
                     style="@style/ConversationListSnippetAndFoldersStyle"/>
 
             </RelativeLayout>
diff --git a/res/layout/conversation_list.xml b/res/layout/conversation_list.xml
index 64f8fde..6ef4f22 100644
--- a/res/layout/conversation_list.xml
+++ b/res/layout/conversation_list.xml
@@ -19,7 +19,8 @@
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/between_chrome"
     android:layout_width="match_parent"
-    android:layout_height="match_parent">
+    android:layout_height="match_parent"
+    android:background="@color/conversation_list_background_color">
 
     <com.android.mail.ui.MailSwipeRefreshLayout
         android:id="@+id/swipe_refresh_widget"
@@ -37,13 +38,23 @@
             <!-- Offset by height of undo bar and action bar -->
             <include layout="@layout/conversation_list_empty_view" />
 
+            <include layout="@layout/security_hold_view" />
+
             <com.android.mail.ui.SwipeableListView
                 android:id="@+id/conversation_list_view"
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
                 style="@style/ConversationListFade" />
 
-            <include layout="@layout/conversation_load_spinner" />
+            <ProgressBar
+                android:id="@+id/conversation_list_loading_view"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:indeterminate="true"
+                android:indeterminateBehavior="repeat"
+                android:layout_gravity="center"
+                android:visibility="gone"
+                style="?android:attr/progressBarStyle" />
 
         </FrameLayout>
 
diff --git a/res/drawable/ic_drawer.xml b/res/layout/conversation_list_default_footer.xml
similarity index 80%
copy from res/drawable/ic_drawer.xml
copy to res/layout/conversation_list_default_footer.xml
index d78f5f4..8835d40 100644
--- a/res/drawable/ic_drawer.xml
+++ b/res/layout/conversation_list_default_footer.xml
@@ -15,7 +15,6 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
-        android:src="@drawable/ic_drawer_raw"
-        android:autoMirrored="true">
-</bitmap>
+<Space xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="88dp" />
\ No newline at end of file
diff --git a/res/layout/conversation_list_empty_view.xml b/res/layout/conversation_list_empty_view.xml
index c5dc31c..53dcf52 100644
--- a/res/layout/conversation_list_empty_view.xml
+++ b/res/layout/conversation_list_empty_view.xml
@@ -28,14 +28,16 @@
             android:id="@+id/empty_icon"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"/>
+
     <TextView
             android:id="@+id/empty_text"
-            android:layout_width="@dimen/empty_view_text_width"
+            android:maxWidth="@dimen/empty_view_text_width"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_marginTop="@dimen/empty_view_space"
             android:fontFamily="sans-serif-light"
-            android:textAlignment="center"
-            android:textColor="#80000000"
+            android:gravity="center"
+            android:textColor="@color/text_color_grey"
             android:textSize="@dimen/empty_view_text_size" />
 
 </com.android.mail.ui.ConversationListEmptyView>
diff --git a/res/layout/conversation_list_footer_view.xml b/res/layout/conversation_list_footer_view.xml
index 2909cdb..ed83563 100644
--- a/res/layout/conversation_list_footer_view.xml
+++ b/res/layout/conversation_list_footer_view.xml
@@ -22,41 +22,7 @@
     android:orientation="horizontal"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:background="@android:color/white">
-
-    <LinearLayout android:id="@+id/network_error"
-        android:layout_width="match_parent"
-        android:layout_height="?android:attr/listPreferredItemHeight"
-        android:padding="5dip"
-        android:visibility="gone"
-        android:gravity="center_vertical">
-
-        <ImageView
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:src="@drawable/ic_alert_grey" />
-
-        <TextView android:id="@+id/error_text"
-            android:layout_width="0dip"
-            android:layout_height="wrap_content"
-            android:layout_weight="1"
-            android:textAppearance="?android:attr/textAppearanceLargeInverse"
-            android:layout_marginBottom="1dip"
-            android:paddingLeft="5dip"
-            android:textColor="@android:color/black"
-            android:text="@string/network_error"/>
-
-        <Button android:id="@+id/error_action_button"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            style="?android:attr/buttonStyleSmall"
-            android:textColor="@android:color/black"
-            android:paddingTop="15dip"
-            android:paddingBottom="15dip"
-            android:paddingLeft="20dip"
-            android:paddingRight="20dip"/>
-
-    </LinearLayout>
+    android:background="@drawable/conversation_item_background">
 
     <LinearLayout android:id="@+id/loading"
         android:layout_width="match_parent"
@@ -65,28 +31,29 @@
         android:visibility="gone">
 
         <ProgressBar
-            style="?android:attr/progressBarStyle"
             android:indeterminate="true"
             android:layout_width="32dp"
-            android:layout_height="32dp" />
+            android:layout_height="32dp"
+            style="?android:attr/progressBarStyle" />
 
     </LinearLayout>
-    <LinearLayout android:id="@+id/load_more"
+    <LinearLayout
+        android:id="@+id/load_more"
         android:layout_width="match_parent"
         android:layout_height="?android:attr/listPreferredItemHeight"
-        android:gravity="center"
-        android:visibility="gone"
+        android:background="?android:attr/selectableItemBackground"
         android:clickable="true"
-        android:background="?android:attr/selectableItemBackground">
+        android:visibility="gone">
 
         <TextView
+            style="@style/ConversationListFooterLoadMoreStyle"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:textAppearance="?android:attr/textAppearanceLargeInverse"
-            android:layout_marginBottom="1dip"
-            android:paddingLeft="5dip"
-            android:textColor="@android:color/black"
-            android:text="@string/load_more"/>
+            android:layout_gravity="center_vertical"
+            android:text="@string/load_more"
+            android:textAllCaps="true"
+            android:textColor="@color/conversation_view_footer_load_more_text_color"
+            android:textSize="16sp" />
 
     </LinearLayout>
 </com.android.mail.browse.ConversationListFooterView>
diff --git a/res/layout/conversation_long_press_to_select_tip_view.xml b/res/layout/conversation_long_press_to_select_tip_view.xml
deleted file mode 100644
index 59b17ff..0000000
--- a/res/layout/conversation_long_press_to_select_tip_view.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (c) 2013 Google Inc. -->
-<com.android.mail.ui.ConversationLongPressTipView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:background="@color/swiped_bg_color" >
-
-    <LinearLayout
-        android:id="@+id/swipeable_content"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:background="@drawable/conversation_item_background_selector"
-        android:orientation="horizontal" >
-
-        <TextView
-            android:id="@+id/text"
-            android:layout_width="0dp"
-            android:layout_height="wrap_content"
-            android:layout_gravity="center_vertical"
-            android:layout_marginBottom="12dp"
-            android:layout_marginTop="12dp"
-            android:layout_weight="1"
-            android:duplicateParentState="true"
-            android:fontFamily="sans-serif-light"
-            android:text="@string/long_press_to_select_tip"
-            android:textColor="@color/teaser_main_text"
-            android:textSize="16sp"
-            style="@style/TeaserTextStyle" />
-
-        <View
-            android:id="@+id/dismiss_separator"
-            android:layout_width="1dip"
-            android:layout_height="match_parent"
-            android:background="@color/teaser_main_text"
-            android:layout_marginTop="16dp"
-            android:layout_marginBottom="16dp"
-            style="@style/DismissSeparatorStyle" />
-
-        <ImageButton
-            android:id="@+id/dismiss_button"
-            android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            android:background="?android:attr/selectableItemBackground"
-            android:clickable="true"
-            android:scaleType="center"
-            android:contentDescription="@string/dismiss_tip_hover_text"
-            android:src="@drawable/ic_cancel_holo_light"
-            style="@style/DismissButtonStyle" />
-
-        <include layout="@layout/teaser_right_edge" />
-    </LinearLayout>
-
-</com.android.mail.ui.ConversationLongPressTipView>
diff --git a/res/layout/conversation_message_footer.xml b/res/layout/conversation_message_footer.xml
index e3667bd..7d3ac7c 100644
--- a/res/layout/conversation_message_footer.xml
+++ b/res/layout/conversation_message_footer.xml
@@ -20,6 +20,7 @@
     android:id="@+id/attachments"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
+    android:background="@android:color/white"
     android:orientation="vertical">
 
     <TextView
diff --git a/res/layout/conversation_message_header.xml b/res/layout/conversation_message_header.xml
index 0f9dce2..77ae717 100644
--- a/res/layout/conversation_message_header.xml
+++ b/res/layout/conversation_message_header.xml
@@ -20,6 +20,7 @@
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:orientation="vertical"
+    android:background="@android:color/white"
     android:visibility="visible">
 
     <include layout="@layout/conversation_view_border"
diff --git a/res/layout/conversation_message_upper_header.xml b/res/layout/conversation_message_upper_header.xml
index a64122a..8eca29e 100644
--- a/res/layout/conversation_message_upper_header.xml
+++ b/res/layout/conversation_message_upper_header.xml
@@ -18,7 +18,6 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:addStatesFromChildren="true"
     android:background="?android:attr/selectableItemBackground"
     android:focusable="true">
 
diff --git a/res/layout/conversation_message_upper_header_actions.xml b/res/layout/conversation_message_upper_header_actions.xml
index 69297ad..269dc78 100644
--- a/res/layout/conversation_message_upper_header_actions.xml
+++ b/res/layout/conversation_message_upper_header_actions.xml
@@ -20,7 +20,7 @@
     <ImageView
         android:id="@+id/edit_draft"
         android:contentDescription="@string/resume_draft"
-        android:src="@drawable/ic_edit_24dp"
+        android:src="@drawable/ic_pencil_24dp"
         android:visibility="gone"
         style="@style/MessageHeaderActionButtonStyle" />
 
@@ -38,8 +38,8 @@
 
     <ImageView
         android:id="@+id/overflow"
-        android:layout_width="@dimen/message_header_action_button_width"
-        android:layout_height="@dimen/message_header_action_button_height"
-        style="@style/OverflowButtonStyle" />
+        android:contentDescription="@string/overflow_description"
+        android:src="@drawable/ic_overflow_24dp"
+        style="@style/MessageHeaderOverflowButtonStyle" />
 
 </merge>
diff --git a/res/layout/conversation_message_upper_header_actions_land_or_tablet.xml b/res/layout/conversation_message_upper_header_actions_land_or_tablet.xml
index e9ab53c..e5a28ae 100644
--- a/res/layout/conversation_message_upper_header_actions_land_or_tablet.xml
+++ b/res/layout/conversation_message_upper_header_actions_land_or_tablet.xml
@@ -20,7 +20,7 @@
         android:id="@+id/edit_draft"
         style="@style/MessageHeaderActionButtonStyle"
         android:visibility="gone"
-        android:src="@drawable/ic_edit_24dp"
+        android:src="@drawable/ic_pencil_24dp"
         android:contentDescription="@string/resume_draft" />
     <ImageView
         android:id="@+id/reply"
@@ -37,4 +37,9 @@
         style="@style/MessageHeaderActionButtonStyle"
         android:src="@drawable/ic_forward_24dp"
         android:contentDescription="@string/forward" />
+    <ImageView
+        android:id="@+id/overflow"
+        style="@style/MessageHeaderOverflowButtonStyle"
+        android:src="@drawable/ic_overflow_24dp"
+        android:contentDescription="@string/overflow_description" />
 </merge>
diff --git a/res/layout/conversation_message_upper_header_text.xml b/res/layout/conversation_message_upper_header_text.xml
index e311e64..2b362b6 100644
--- a/res/layout/conversation_message_upper_header_text.xml
+++ b/res/layout/conversation_message_upper_header_text.xml
@@ -43,7 +43,7 @@
         android:layout_marginTop="6dp"
         android:layout_toStartOf="@id/upper_date"
         android:layout_toLeftOf="@id/upper_date"
-        android:src="@drawable/ic_attach_file_20dp"
+        android:src="@drawable/ic_attach_file_18dp"
         style="@style/AttachmentIconStyle" />
 
     <TextView
@@ -59,6 +59,7 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_below="@id/sender_name"
+        android:ellipsize="end"
         style="@style/MessageHeaderSubtitleStyle" />
 
     <TextView
diff --git a/res/layout/conversation_outbox_tip_view.xml b/res/layout/conversation_outbox_tip_view.xml
deleted file mode 100644
index 6277c30..0000000
--- a/res/layout/conversation_outbox_tip_view.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (c) 2013 Google Inc. -->
-<com.android.mail.ui.ConversationsInOutboxTipView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:background="@color/swiped_bg_color" >
-
-    <LinearLayout
-        android:id="@+id/swipeable_content"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:background="@drawable/conversation_item_background_selector"
-        android:orientation="horizontal" >
-
-        <TextView
-            android:id="@+id/outbox"
-            android:layout_width="0dp"
-            android:layout_height="wrap_content"
-            android:layout_gravity="center_vertical"
-            android:layout_marginBottom="12dp"
-            android:layout_marginTop="12dp"
-            android:layout_weight="1"
-            android:duplicateParentState="true"
-            android:fontFamily="sans-serif-light"
-            android:textColor="@color/teaser_main_text"
-            android:textSize="16sp"
-            style="@style/TeaserTextStyle" />
-
-        <View
-            android:id="@+id/dismiss_separator"
-            android:layout_width="1dip"
-            android:layout_height="match_parent"
-            android:background="@color/teaser_main_text"
-            android:layout_marginTop="16dp"
-            android:layout_marginBottom="16dp"
-            style="@style/DismissSeparatorStyle" />
-
-        <ImageButton
-            android:id="@+id/dismiss_button"
-            android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            android:background="?android:attr/selectableItemBackground"
-            android:clickable="true"
-            android:scaleType="center"
-            android:contentDescription="@string/dismiss_tip_hover_text"
-            android:src="@drawable/ic_cancel_holo_light"
-            style="@style/DismissButtonStyle" />
-
-        <include layout="@layout/teaser_right_edge" />
-    </LinearLayout>
-
-</com.android.mail.ui.ConversationsInOutboxTipView>
diff --git a/res/layout/conversation_photo_teaser_view.xml b/res/layout/conversation_photo_teaser_view.xml
deleted file mode 100644
index 6aac4d8..0000000
--- a/res/layout/conversation_photo_teaser_view.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (c) 2013 Google Inc. -->
-<com.android.mail.ui.ConversationPhotoTeaserView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:background="@color/swiped_bg_color" >
-
-    <LinearLayout
-        android:id="@+id/swipeable_content"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:background="@drawable/conversation_item_background_selector"
-        android:orientation="horizontal" >
-
-        <ImageView
-            android:id="@+id/arrow"
-            android:layout_width="48dp"
-            android:layout_height="wrap_content"
-            android:layout_marginBottom="12dp"
-            android:duplicateParentState="true"
-            android:src="@drawable/ic_arrow"
-            android:visibility="invisible"
-            style="@style/ArrowStyle" />
-
-        <TextView
-            android:id="@+id/text"
-            android:layout_width="0dp"
-            android:layout_height="wrap_content"
-            android:layout_gravity="center_vertical"
-            android:layout_marginBottom="12dp"
-            android:layout_marginTop="12dp"
-            android:layout_weight="1"
-            android:duplicateParentState="true"
-            android:fontFamily="sans-serif-light"
-            android:text="@string/conversation_photo_welcome_text"
-            android:textColor="@color/teaser_main_text"
-            android:textSize="16sp" />
-
-        <View
-            android:id="@+id/dismiss_separator"
-            android:layout_width="1dip"
-            android:layout_height="match_parent"
-            android:background="@color/teaser_main_text"
-            android:layout_marginTop="16dp"
-            android:layout_marginBottom="16dp"
-            style="@style/DismissSeparatorStyle"/>
-
-        <ImageButton
-            android:id="@+id/dismiss_button"
-            android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            android:background="?android:attr/selectableItemBackground"
-            android:clickable="true"
-            android:scaleType="center"
-            android:contentDescription="@string/dismiss_tip_hover_text"
-            android:src="@drawable/ic_cancel_holo_light"
-            style="@style/DismissButtonStyle" />
-
-        <include layout="@layout/teaser_right_edge" />
-    </LinearLayout>
-
-</com.android.mail.ui.ConversationPhotoTeaserView>
diff --git a/res/layout/conversation_sync_disabled_tip_view.xml b/res/layout/conversation_sync_disabled_tip_view.xml
deleted file mode 100644
index 1ed63a7..0000000
--- a/res/layout/conversation_sync_disabled_tip_view.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (c) 2013 Google Inc. -->
-<com.android.mail.ui.ConversationSyncDisabledTipView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:background="@color/swiped_bg_color" >
-
-    <LinearLayout
-        android:id="@+id/swipeable_content"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:background="@drawable/conversation_item_background_selector"
-        android:orientation="horizontal" >
-
-        <LinearLayout
-            android:id="@+id/text_area"
-            android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            android:layout_weight="1"
-            android:orientation="vertical"
-            android:padding="16dp" >
-
-            <TextView
-                android:id="@+id/text_line1"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:duplicateParentState="true"
-                android:fontFamily="sans-serif-light"
-                android:textColor="@color/teaser_main_text"
-                android:textSize="16sp" />
-
-            <TextView
-                android:id="@+id/text_line2"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:duplicateParentState="true"
-                android:fontFamily="sans-serif-light"
-                android:textColor="@color/teaser_main_text"
-                android:textSize="16sp" />
-
-        </LinearLayout>
-
-        <View
-            android:id="@+id/dismiss_separator"
-            android:layout_width="1dip"
-            android:layout_height="match_parent"
-            android:background="@color/teaser_main_text"
-            android:layout_marginTop="16dp"
-            android:layout_marginBottom="16dp"
-            style="@style/DismissSeparatorStyle" />
-
-        <ImageButton
-            android:id="@+id/dismiss_button"
-            android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            android:background="?android:attr/selectableItemBackground"
-            android:clickable="true"
-            android:scaleType="center"
-            android:contentDescription="@string/dismiss_tip_hover_text"
-            android:src="@drawable/ic_cancel_holo_light"
-            style="@style/DismissButtonStyle" />
-
-        <include layout="@layout/teaser_right_edge" />
-    </LinearLayout>
-
-</com.android.mail.ui.ConversationSyncDisabledTipView>
diff --git a/res/layout/conversation_tip_view.xml b/res/layout/conversation_tip_view.xml
new file mode 100644
index 0000000..7f165e8
--- /dev/null
+++ b/res/layout/conversation_tip_view.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2014 Google Inc.
+    Licensed to 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:id="@+id/conversation_tip_swipeable_content"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="@color/tip_teaser_bg">
+
+    <ImageView
+        android:id="@+id/conversation_tip_icon1"
+        android:layout_width="40dp"
+        android:layout_height="40dp"
+        android:layout_gravity="center_vertical"
+        android:scaleType="center"
+        style="@style/TeaserStartMargin" />
+
+    <TextView
+        android:id="@+id/conversation_tip_text"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_vertical"
+        android:layout_weight="1"
+        android:paddingTop="16dp"
+        android:paddingBottom="16dp"
+        android:textColor="@color/tip_teaser_text"
+        android:textSize="16sp"
+        style="@style/TeaserStartMargin" />
+
+    <ImageView
+        android:id="@+id/dismiss_icon"
+        android:layout_width="56dp"
+        android:layout_height="match_parent"
+        android:layout_gravity="center_vertical"
+        android:contentDescription="@string/dismiss_tip_hover_text"
+        android:background="?android:attr/selectableItemBackground"
+        android:scaleType="center"
+        android:src="@drawable/ic_cancel_24dp" />
+
+</LinearLayout>
diff --git a/res/layout/conversation_topmost_overlay_items.xml b/res/layout/conversation_topmost_overlay_items.xml
index 10cd4c8..a2fc938 100644
--- a/res/layout/conversation_topmost_overlay_items.xml
+++ b/res/layout/conversation_topmost_overlay_items.xml
@@ -24,16 +24,45 @@
              android:layout_gravity="top"
              android:visibility="gone"/>
 
-    <Button xmlns:android="http://schemas.android.com/apk/res/android"
-            android:id="@+id/new_message_notification_bar"
-            style="@style/NewMessageButtonStyle"
-            android:layout_width="match_parent"
-            android:layout_height="48dip"
-            android:layout_gravity="bottom|center_horizontal"
-            android:animateLayoutChanges="true"
-            android:gravity="center"
-            android:paddingLeft="@dimen/new_message_button_padding"
-            android:paddingRight="@dimen/new_message_button_padding"
-            android:visibility="gone"/>
+    <com.android.mail.ui.ActionableToastBar
+        android:id="@+id/new_message_notification_bar"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_gravity="bottom|start"
+        android:layout_marginLeft="@dimen/conversation_view_snack_bar_margin"
+        android:layout_marginRight="@dimen/conversation_view_snack_bar_margin"
+        android:layout_marginBottom="@dimen/conversation_view_snack_bar_margin"
+        android:background="@color/snack_bar_background_color"
+        android:clickable="true"
+        android:visibility="gone">
 
+        <!-- These children are visible when description and action text fit on one line -->
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal">
+
+            <TextView
+                android:id="@+id/description_text"
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center_vertical"
+                android:layout_weight="1"
+                android:paddingTop="@dimen/snack_bar_margin_vertical"
+                android:paddingBottom="@dimen/snack_bar_margin_vertical"
+                android:textColor="@android:color/white"
+                style="@style/SnackBarDescriptionTextStyle" />
+
+            <TextView
+                android:id="@+id/action_text"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center_vertical"
+                android:paddingTop="@dimen/snack_bar_margin_vertical"
+                android:paddingBottom="@dimen/snack_bar_margin_vertical"
+                android:textAllCaps="true"
+                android:textColor="@color/snack_bar_action_text_color"
+                style="@style/SnackBarActionTextStyle"/>
+        </LinearLayout>
+    </com.android.mail.ui.ActionableToastBar>
 </merge>
diff --git a/res/layout/conversation_view_header.xml b/res/layout/conversation_view_header.xml
index 61bb93d..43ddd92 100644
--- a/res/layout/conversation_view_header.xml
+++ b/res/layout/conversation_view_header.xml
@@ -20,10 +20,9 @@
     android:id="@+id/conversation_header"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:background="@color/conversation_view_item_background_color"
+    android:background="@android:color/white"
     android:orientation="horizontal"
     android:minHeight="88sp"
-    android:nextFocusDown="@+id/upper_header"
     android:paddingTop="16dp"
     android:paddingBottom="16dp"
     style="@style/ConversationHeaderStyle" >
@@ -34,7 +33,6 @@
         android:layout_height="wrap_content"
         android:layout_gravity="center_vertical"
         android:layout_weight="1"
-        android:nextFocusDown="@+id/upper_header"
         android:textAlignment="viewStart"
         style="@style/ConversationSubjectStyle" />
 
@@ -43,7 +41,7 @@
         android:layout_width="@dimen/conversation_header_star_size"
         android:layout_height="@dimen/conversation_header_star_size"
         android:layout_gravity="center_vertical"
-        android:background="?android:attr/selectableItemBackground"
+        android:background="?attr/selectableItemBackgroundBorderless"
         android:scaleType="center"
         android:visibility="invisible"
         android:src="@drawable/star" />
diff --git a/res/layout/drawer_footer_item.xml b/res/layout/drawer_footer_item.xml
index 946bdd0..122ba32 100644
--- a/res/layout/drawer_footer_item.xml
+++ b/res/layout/drawer_footer_item.xml
@@ -18,45 +18,26 @@
 
 <!-- Item in the drawer that launches the Help or Feedback activities. -->
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:orientation="vertical" >
+    android:layout_width="match_parent"
+    android:minHeight="@dimen/drawer_footer_item_minimum_height"
+    android:gravity="center_vertical">
 
-    <View
-        android:id="@+id/top_border"
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/divider_height"
-        android:background="@color/divider_color"
-        android:layout_marginTop="8dp"
-        android:layout_marginBottom="8dp" />
-
-    <LinearLayout
+    <ImageView
+        android:id="@+id/drawer_footer_image"
+        android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_width="match_parent"
+        android:paddingLeft="@dimen/drawer_footer_item_padding"
+        android:paddingRight="@dimen/drawer_footer_item_padding" />
+
+    <TextView
+        android:id="@+id/drawer_footer_text"
+        android:layout_height="wrap_content"
+        android:layout_width="wrap_content"
+        android:ellipsize="end"
         android:paddingLeft="@dimen/drawer_footer_item_padding"
         android:paddingRight="@dimen/drawer_footer_item_padding"
-        android:minHeight="@dimen/drawer_footer_item_minimum_height"
-        android:gravity="center_vertical"
-        android:background="@drawable/nonfolder_item">
-
-        <ImageView
-            android:id="@+id/drawer_footer_image"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content" />
-
-        <TextView
-            android:id="@+id/drawer_footer_text"
-            android:layout_height="wrap_content"
-            android:layout_width="wrap_content"
-            android:ellipsize="end"
-            android:textColor="@color/folder_item_text_color_normal"
-            android:textSize="@dimen/drawer_item_font_size"
-            style="@style/DrawerFooterListItemStyle"/>
-    </LinearLayout>
-
-    <Space
-        android:id="@+id/bottom_margin"
-        android:layout_width="match_parent"
-        android:layout_height="8dp" />
-
+        android:textColor="@color/text_color_black"
+        android:textSize="@dimen/drawer_item_font_size"
+        style="@style/DrawerFontStyle" />
 </LinearLayout>
diff --git a/res/layout/fake_bottom_border.xml b/res/layout/fake_bottom_border.xml
index c80ff4a..e27d7d6 100644
--- a/res/layout/fake_bottom_border.xml
+++ b/res/layout/fake_bottom_border.xml
@@ -15,7 +15,6 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<View xmlns:android="http://schemas.android.com/apk/res/android"
+<Space xmlns:android="http://schemas.android.com/apk/res/android"
       android:layout_width="match_parent"
-      android:layout_height="wrap_content"
-      android:background="@color/conversation_view_item_background_color" />
+      android:layout_height="wrap_content" />
diff --git a/res/layout/floating_actions.xml b/res/layout/floating_actions.xml
index 9984cda..4c1d935 100644
--- a/res/layout/floating_actions.xml
+++ b/res/layout/floating_actions.xml
@@ -23,7 +23,6 @@
 
     <ImageButton
         android:id="@+id/compose_button"
-        android:contentDescription="@string/compose"
         style="@style/FloatingActionButtonStyle" />
 
     <com.android.mail.ui.ActionableToastBar
@@ -46,12 +45,11 @@
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_gravity="center_vertical"
-                android:layout_marginLeft="@dimen/snack_bar_margin_horizontal"
-                android:layout_marginRight="@dimen/snack_bar_margin_horizontal"
                 android:layout_weight="1"
                 android:paddingTop="@dimen/snack_bar_margin_vertical"
                 android:paddingBottom="@dimen/snack_bar_margin_vertical"
-                android:textColor="@android:color/white" />
+                android:textColor="@android:color/white"
+                style="@style/SnackBarDescriptionTextStyle" />
 
             <TextView
                 android:id="@+id/action_text"
@@ -78,17 +76,14 @@
                 android:layout_marginLeft="@dimen/snack_bar_margin_horizontal"
                 android:layout_marginRight="@dimen/snack_bar_margin_horizontal"
                 android:paddingTop="@dimen/snack_bar_margin_vertical"
-                android:paddingBottom="@dimen/snack_bar_margin_vertical"
                 android:textColor="@android:color/white" />
 
             <TextView
                 android:id="@+id/multiline_action_text"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:layout_marginTop="8dp"
-                android:layout_marginLeft="@dimen/snack_bar_margin_horizontal"
-                android:layout_marginRight="@dimen/snack_bar_margin_horizontal"
-                android:paddingTop="@dimen/snack_bar_margin_vertical"
+                android:background="?attr/selectableItemBackground"
+                android:paddingTop="8dp"
                 android:paddingBottom="@dimen/snack_bar_margin_vertical"
                 android:textAllCaps="true"
                 android:textColor="@color/snack_bar_action_text_color"
diff --git a/res/layout/folder_item.xml b/res/layout/folder_item.xml
index 309ada8..2812137 100644
--- a/res/layout/folder_item.xml
+++ b/res/layout/folder_item.xml
@@ -20,62 +20,44 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_height="wrap_content"
     android:layout_width="match_parent"
+    android:background="@drawable/folder_item"
+    android:gravity="center_vertical"
     android:minHeight="@dimen/folder_list_item_minimum_height"
-    android:background="@drawable/folder_item">
+    style="@style/FolderListItemEndStyle">
 
-    <ImageView
-        android:id="@+id/folder_parent_icon"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_alignParentBottom="true"
+    <View
+        android:id="@+id/nested_folder_space"
         android:visibility="gone"
-        android:src="@drawable/folder_parent_icon"
-        style="@style/FolderParentIconStyle" />
-
-    <FrameLayout
-        android:id="@+id/message_counts"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_centerVertical="true"
-        android:duplicateParentState="true"
-        style="@style/FolderListItemEndStyle" >
-
-        <TextView
-            android:id="@+id/unread"
-            android:duplicateParentState="true"
-            style="@style/UnreadCountRelativeLayout" />
-
-        <TextView
-            android:id="@+id/unseen"
-            style="@style/UnseenCount" />
-
-    </FrameLayout>
+        android:layout_width="@dimen/nested_folder_space"
+        android:layout_height="wrap_content" />
 
     <ImageView
         android:id="@+id/folder_icon"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_centerVertical="true"
-        android:duplicateParentState="true"
         style="@style/FolderListIconStyle" />
 
     <TextView
         android:id="@+id/name"
         android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
-        android:layout_centerVertical="true"
-        android:layout_toEndOf="@id/folder_icon"
-        android:layout_toRightOf="@id/folder_icon"
-        android:layout_toStartOf="@id/message_counts"
-        android:layout_toLeftOf="@id/message_counts"
-        android:layout_alignWithParentIfMissing="true"
-        android:duplicateParentState="true"
-        android:includeFontPadding="false"
+        android:layout_width="0dp"
+        android:layout_weight="1"
         android:maxLines="2"
         android:ellipsize="end"
         android:textAlignment="viewStart"
-        android:textColor="@color/folder_item_text_color"
+        android:textColor="@color/text_color_black"
         android:textSize="@dimen/drawer_item_font_size"
         style="@style/FolderListItemStyle" />
 
+    <TextView
+        android:id="@+id/unread"
+        style="@style/DrawerUnreadCount" />
+
+    <TextView
+        android:id="@+id/unseen"
+        android:includeFontPadding="false"
+        android:paddingTop="5dp"
+        android:paddingBottom="5dp"
+        style="@style/UnseenCount" />
+
 </com.android.mail.ui.FolderItemView>
diff --git a/res/layout/folder_list.xml b/res/layout/folder_list.xml
index 3632f9c..727314a 100644
--- a/res/layout/folder_list.xml
+++ b/res/layout/folder_list.xml
@@ -24,33 +24,20 @@
         android:id="@android:id/list"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:nextFocusRight="@+id/conversation_list_view"
-        android:fadingEdge="none" />
+        android:fadingEdge="none"
+        style="@style/DrawerNavigationStyle" />
 
     <com.android.mail.ui.MiniDrawerView
         android:id="@+id/mini_drawer"
         android:layout_width="@dimen/two_pane_drawer_width_mini"
         android:layout_height="match_parent"
+        android:focusable="true"
+        android:descendantFocusability="afterDescendants"
         android:paddingTop="20dp"
         android:paddingBottom="18dp"
         android:orientation="vertical">
 
-        <ImageView
-            android:id="@+id/current_account_avatar"
-            android:layout_width="match_parent"
-            android:layout_height="64dp"
-            android:paddingTop="16dp"
-            android:paddingBottom="16dp"
-            android:paddingLeft="20dp"
-            android:paddingRight="20dp"
-            style="@style/MiniDrawerItemStyleBase" />
-
-        <ImageView
-            android:id="@+id/dotdotdot"
-            android:layout_width="match_parent"
-            android:layout_height="56dp"
-            android:src="@drawable/ic_ellipsis_24dp"
-            style="@style/MiniDrawerFolderStyle" />
+        <include layout="@layout/mini_drawer_recent_account_item" />
 
         <Space
             android:id="@+id/spacer"
diff --git a/res/layout/folder_list_blank_header.xml b/res/layout/folder_list_blank_header.xml
index 89d15d1..0837338 100644
--- a/res/layout/folder_list_blank_header.xml
+++ b/res/layout/folder_list_blank_header.xml
@@ -16,11 +16,11 @@
      limitations under the License.
 -->
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_height="wrap_content"
-    android:layout_width="match_parent">
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content" >
     <View
         android:layout_width="match_parent"
         android:layout_height="@dimen/divider_height"
         android:layout_marginBottom="8dp"
-        android:background="@color/divider_color" />
-</FrameLayout>
+        android:background="@color/folder_list_divider_color" />
+</FrameLayout>
\ No newline at end of file
diff --git a/res/drawable/ic_drawer.xml b/res/layout/folder_list_bottom_space.xml
similarity index 80%
copy from res/drawable/ic_drawer.xml
copy to res/layout/folder_list_bottom_space.xml
index d78f5f4..114a463 100644
--- a/res/drawable/ic_drawer.xml
+++ b/res/layout/folder_list_bottom_space.xml
@@ -15,7 +15,6 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
-        android:src="@drawable/ic_drawer_raw"
-        android:autoMirrored="true">
-</bitmap>
+<Space xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_height="8dp"
+    android:layout_width="match_parent" />
diff --git a/res/layout/folder_list_header.xml b/res/layout/folder_list_header.xml
index 584f7cc..847f9c4 100644
--- a/res/layout/folder_list_header.xml
+++ b/res/layout/folder_list_header.xml
@@ -27,7 +27,7 @@
         android:layout_width="match_parent"
         android:layout_height="@dimen/divider_height"
         android:layout_marginTop="8dp"
-        android:background="@color/divider_color" />
+        android:background="@color/folder_list_divider_color" />
 
     <TextView
         android:id="@+id/header_text"
@@ -37,10 +37,10 @@
         android:gravity="bottom"
         android:ellipsize="end"
         android:singleLine="true"
-        android:textAllCaps="true"
         android:textColor="@color/folder_list_heading_text_color"
         android:paddingLeft="@dimen/folder_list_heading_padding_side"
         android:paddingRight="@dimen/folder_list_heading_padding_side"
         android:paddingBottom="@dimen/folder_list_heading_padding_bottom"
-        android:paddingTop="@dimen/folder_list_heading_padding_top" />
-</LinearLayout>
\ No newline at end of file
+        android:paddingTop="@dimen/folder_list_heading_padding_top"
+        style="@style/DrawerFontStyle" />
+</LinearLayout>
diff --git a/res/layout/folder_teaser_item.xml b/res/layout/folder_teaser_item.xml
index 65bd680..b1552c3 100644
--- a/res/layout/folder_teaser_item.xml
+++ b/res/layout/folder_teaser_item.xml
@@ -15,61 +15,72 @@
 -->
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="56dp"
-    android:background="@drawable/folder_teaser_item_background">
-
-    <ImageView
-        android:id="@+id/folder_imageView"
-        android:layout_width="24dp"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center_vertical"
-        android:duplicateParentState="true"
-        style="@style/FolderTeaserMarginStartStyle" />
+    android:layout_height="wrap_content"
+    android:orientation="vertical">
 
     <LinearLayout
-        android:id="@+id/text_layout"
-        android:layout_width="0dip"
+        android:id="@+id/folder_teaser_row"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:layout_weight="1"
-        android:layout_gravity="center_vertical"
-        android:duplicateParentState="true"
-        android:orientation="vertical"
-        style="@style/FolderTeaserLabelMarginStyle" >
+        android:minHeight="@dimen/folder_teaser_item_height"
+        android:background="?android:attr/selectableItemBackground"
+        style="@style/FolderTeaserPaddingEndStyle">
+
+        <ImageView
+            android:id="@+id/nested_folder_icon"
+            android:layout_width="@dimen/folder_teaser_start_margin"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_vertical"
+            android:paddingLeft="24dp"
+            android:paddingRight="24dp"
+            android:src="@drawable/ic_drawer_folder_24dp" />
+
+        <LinearLayout
+            android:id="@+id/text_layout"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:layout_gravity="center_vertical"
+            android:orientation="vertical"
+            style="@style/FolderTeaserPaddingEndStyle">
+
+            <TextView
+                android:id="@+id/folder_textView"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:ellipsize="end"
+                android:singleLine="true"
+                android:textSize="16sp"
+                android:textStyle="bold"
+                android:textColor="@color/folder_teaser_main_text"/>
+
+            <TextView
+                android:id="@+id/senders_textView"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:ellipsize="end"
+                android:singleLine="true"
+                android:textSize="14sp"
+                android:fontFamily="sans-serif-light"
+                android:textColor="@color/folder_teaser_sub_text" />
+
+        </LinearLayout>
 
         <TextView
-            android:id="@+id/folder_textView"
+            android:id="@+id/unread_count_textView"
             android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:duplicateParentState="true"
-            android:includeFontPadding="false"
-            android:textColor="@color/folder_teaser_main_text"
-            android:textSize="16sp"
-            android:textStyle="bold"
-            android:singleLine="true"
-            android:ellipsize="end" />
+            android:layout_height="match_parent"
+            style="@style/FolderTeaserUnreadCountTextStyle" />
 
         <TextView
-            android:id="@+id/senders_textView"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:duplicateParentState="true"
-            android:includeFontPadding="false"
-            android:fontFamily="sans-serif-light"
-            android:textColor="@color/folder_teaser_senders_text"
-            android:textSize="12sp"
-            android:singleLine="true"
-            android:ellipsize="end" />
+            android:id="@+id/unseen_count_textView"
+            android:minWidth="57sp"
+            android:textSize="14sp"
+            android:visibility="gone"
+            style="@style/UnseenCount" />
 
     </LinearLayout>
 
-    <TextView
-        android:id="@+id/count_textView"
-        android:layout_width="57sp"
-        android:layout_height="20sp"
-        android:layout_gravity="center_vertical"
-        android:gravity="center"
-        android:textColor="@color/folder_teaser_count_text"
-        android:textSize="14sp"
-        style="@style/FolderTeaserMarginEndStyle" />
+    <View style="@style/ConversationListDividerStyle" />
 
 </LinearLayout>
diff --git a/res/layout/from_item.xml b/res/layout/from_item.xml
index 027d1a6..e9da6d8 100644
--- a/res/layout/from_item.xml
+++ b/res/layout/from_item.xml
@@ -17,18 +17,26 @@
 -->
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="match_parent">
+    android:layout_height="match_parent"
+    android:background="?android:attr/selectableItemBackground">
+
+    <TextView
+        android:id="@+id/spinner_account_name"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textAlignment="viewStart"
+        style="@style/SpinnerAccountNameStyle" />
 
     <TextView
         android:id="@+id/spinner_account_address"
         android:layout_width="0dp"
         android:layout_height="wrap_content"
         android:layout_weight="1"
-        android:singleLine="true"
         android:textAlignment="viewStart"
         style="@style/ComposeFromTextViewStyle" />
 
     <ImageView
+        android:background="@null"
         android:src="@drawable/ic_expand_more_24dp"
         style="@style/ComposeFieldButton" />
 
diff --git a/res/layout/mail_actionbar_searchview.xml b/res/layout/mail_actionbar_searchview.xml
index 730f170..b65620c 100644
--- a/res/layout/mail_actionbar_searchview.xml
+++ b/res/layout/mail_actionbar_searchview.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     Copyright (C) 2011 Google Inc.
+     Copyright (C) 2014 Google Inc.
      Licensed to The Android Open Source Project.
 
      Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,12 +16,48 @@
      limitations under the License.
 -->
 
-<android.support.v7.widget.SearchView
+<com.android.mail.ui.MaterialSearchActionView
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/search_layout"
-    android:gravity="center_vertical"
-    android:layout_height="match_parent"
+    android:id="@+id/search_actionbar_view"
     android:layout_width="match_parent"
-    android:hint="@string/search_hint"
-    android:imeOptions="actionSearch"
-    android:maxWidth="@dimen/search_view_width" />
+    android:layout_height="match_parent"
+    android:alpha="0"
+    android:background="@android:color/white"
+    android:visibility="gone">
+
+    <ImageView
+        android:id="@+id/search_actionbar_back_button"
+        android:layout_width="@dimen/search_leading_button_width"
+        android:layout_height="match_parent"
+        android:background="?attr/selectableItemBackgroundBorderless"
+        android:contentDescription="@string/search_back_desc"
+        android:scaleType="center"
+        android:src="@drawable/ic_arrow_back_24dp_with_rtl" />
+
+    <EditText
+        android:id="@+id/search_actionbar_query_text"
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        android:layout_weight="1"
+        android:background="@android:color/transparent"
+        android:gravity="center_vertical"
+        android:hint="@string/search_hint"
+        android:imeOptions="actionSearch|flagNoExtractUi"
+        android:inputType="text|textNoSuggestions"
+        android:nextFocusDown="@+id/search_overlay_suggestion_list"
+        android:paddingLeft="@dimen/search_main_text_padding"
+        android:paddingRight="@dimen/search_main_text_padding"
+        android:singleLine="true"
+        android:textAlignment="viewStart"
+        android:textColor="@color/search_query_text"
+        android:textColorHint="@color/search_query_hint_text"
+        android:textSize="16sp" />
+
+    <ImageView
+        android:id="@+id/search_actionbar_ending_button"
+        android:layout_width="@dimen/search_ending_button_width"
+        android:layout_height="match_parent"
+        android:background="?attr/selectableItemBackgroundBorderless"
+        android:scaleType="center" />
+
+</com.android.mail.ui.MaterialSearchActionView>
\ No newline at end of file
diff --git a/res/layout/mail_toolbar_view.xml b/res/layout/mail_toolbar_view.xml
new file mode 100644
index 0000000..78a5172
--- /dev/null
+++ b/res/layout/mail_toolbar_view.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2014 Google Inc.
+    Licensed to 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.
+-->
+
+<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/mail_toolbar"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    app:contentInsetStart="@dimen/action_bar_content_inset_start"
+    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
+    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
\ No newline at end of file
diff --git a/res/layout/mini_drawer_folder_item.xml b/res/layout/mini_drawer_folder_item.xml
index ca55d49..fcfeacd 100644
--- a/res/layout/mini_drawer_folder_item.xml
+++ b/res/layout/mini_drawer_folder_item.xml
@@ -15,9 +15,12 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-
-<ImageView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="56dp"
-    style="@style/MiniDrawerFolderStyle" />
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_height="wrap_content"
+    android:layout_width="wrap_content"
+    android:layout_gravity="center_horizontal"
+    android:background="@drawable/mini_drawer_folder_background">
+    <ImageView
+        android:id="@+id/image_view"
+        style="@style/MiniDrawerFolderStyle" />
+</FrameLayout>
diff --git a/res/layout/mini_drawer_recent_account_item.xml b/res/layout/mini_drawer_recent_account_item.xml
index f348d19..c3a459f 100644
--- a/res/layout/mini_drawer_recent_account_item.xml
+++ b/res/layout/mini_drawer_recent_account_item.xml
@@ -17,6 +17,4 @@
 -->
 <ImageView
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="68dp"
     style="@style/MiniDrawerAccountStyle" />
diff --git a/res/layout/multi_folders_view.xml b/res/layout/multi_folders_view.xml
index ea49d2d..f0b4a94 100644
--- a/res/layout/multi_folders_view.xml
+++ b/res/layout/multi_folders_view.xml
@@ -19,19 +19,26 @@
 
 <!-- Describes an individual toggleable folder entry to be displayed in a list of folders in
      a folder selection UI. -->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/folders"
     android:layout_width="match_parent"
-    android:layout_height="wrap_content"
+    android:layout_height="@dimen/single_folder_list_item_height"
+    android:layout_gravity="center_vertical"
     android:minHeight="?android:attr/listPreferredItemHeight">
 
     <!-- Note: the checkbox is not focusable because the parent list item itself handles
          the toggling -->
-    <CheckBox android:id="@+id/checkbox"
-        style="@style/FolderSelectionItemStyle"/>
+    <ImageView
+        android:id="@+id/folder_icon"
+        android:layout_width="24dp"
+        android:layout_height="24dp"
+        android:layout_gravity="center_vertical"
+        style="@style/SingleFolderListIconStyle" />
 
-    <View
-        android:id="@+id/color_block"
-        style="@style/FolderColorBoxStyle"/>
+    <CheckedTextView android:id="@+id/checkbox"
+        android:layout_width="0dp"
+        android:layout_weight="1"
+        android:gravity="center_vertical"
+        style="@style/MultiFolderSelectionItemStyle"/>
 
-</FrameLayout>
+</LinearLayout>
diff --git a/res/layout/nested_folder_teaser_view.xml b/res/layout/nested_folder_teaser_view.xml
index 9e71f61..c652953 100644
--- a/res/layout/nested_folder_teaser_view.xml
+++ b/res/layout/nested_folder_teaser_view.xml
@@ -15,65 +15,56 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<com.android.mail.ui.NestedFolderTeaserView xmlns:android="http://schemas.android.com/apk/res/android"
+
+<com.android.mail.ui.NestedFolderTeaserView
+    xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:orientation="horizontal" >
+    android:background="@drawable/conversation_item_background"
+    android:orientation="vertical">
 
     <LinearLayout
-        android:layout_width="0dp"
+        android:id="@+id/nested_folder_container"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:layout_weight="1"
-        android:background="@drawable/conversation_item_background_selector"
-        android:orientation="vertical" >
+        android:orientation="vertical" />
 
-        <LinearLayout
-            android:id="@+id/nested_folder_container"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:orientation="vertical"
-            android:divider="?android:dividerHorizontal"
-            android:showDividers="middle|end" >
-        </LinearLayout>
+    <LinearLayout
+        android:id="@+id/show_more_folders_row"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_vertical"
+        android:background="?android:attr/selectableItemBackground"
+        android:minHeight="@dimen/folder_teaser_item_height"
+        style="@style/FolderTeaserPaddingEndStyle">
 
-        <LinearLayout
-            android:id="@+id/show_more_folders_row"
-            android:background="@drawable/folder_teaser_item_background"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:orientation="horizontal"
-            android:paddingBottom="12dp"
-            android:paddingTop="12dp" >
+        <ImageView
+            android:id="@+id/show_more_folders_icon"
+            android:layout_width="@dimen/folder_teaser_start_margin"
+            android:layout_height="match_parent"
+            android:paddingLeft="24dp"
+            android:paddingRight="24dp"
+            android:scaleType="center" />
 
-            <TextView
-                android:id="@+id/show_more_folders_textView"
-                android:layout_width="0dp"
-                android:layout_height="wrap_content"
-                android:layout_marginLeft="16dp"
-                android:layout_weight="1"
-                android:duplicateParentState="true"
-                android:ellipsize="end"
-                android:includeFontPadding="false"
-                android:singleLine="true"
-                android:textColor="@color/teaser_main_text"
-                android:textSize="16sp"
-                android:textStyle="bold" />
+        <TextView
+            android:id="@+id/show_more_folders_textView"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:ellipsize="end"
+            android:gravity="center_vertical"
+            android:singleLine="true"
+            android:textSize="16sp"
+            android:textColor="@color/folder_teaser_main_text" />
 
-            <TextView
-                android:id="@+id/show_more_folders_count_textView"
-                android:layout_width="wrap_content"
-                android:layout_height="24sp"
-                android:layout_marginLeft="12dp"
-                android:layout_marginRight="16dp"
-                android:gravity="center"
-                android:minWidth="@dimen/folder_teaser_count_textview_minwidth"
-                android:paddingLeft="16dp"
-                android:paddingRight="16dp"
-                android:textColor="@color/folder_teaser_count_text"
-                android:textSize="16sp" />
-        </LinearLayout>
+        <TextView
+            android:id="@+id/show_more_folders_count_textView"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            style="@style/FolderTeaserUnreadCountTextStyle" />
+
     </LinearLayout>
 
-    <include layout="@layout/teaser_right_edge" />
+    <View style="@style/ConversationListDividerStyle" />
 
-</com.android.mail.ui.NestedFolderTeaserView>
\ No newline at end of file
+</com.android.mail.ui.NestedFolderTeaserView>
diff --git a/res/layout/one_pane_activity.xml b/res/layout/one_pane_activity.xml
index 4726508..6705f55 100644
--- a/res/layout/one_pane_activity.xml
+++ b/res/layout/one_pane_activity.xml
@@ -18,7 +18,8 @@
 <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/drawer_container"
     android:layout_width="match_parent"
-    android:layout_height="match_parent">
+    android:layout_height="match_parent"
+    android:fitsSystemWindows="true">
 
     <!-- DrawerLayout current only supports one content view (b/8752191) -->
     <LinearLayout
@@ -26,15 +27,14 @@
         android:layout_height="match_parent"
         android:orientation="vertical">
 
-        <android.support.v7.widget.Toolbar
-            android:id="@+id/mail_toolbar"
-            android:layout_width="match_parent"
-            android:layout_height="?attr/actionBarSize"
-            android:background="?attr/colorPrimary" />
+        <!-- Custom toolbar/search overlay -->
+        <include layout="@layout/toolbar_with_search" />
 
         <FrameLayout
             android:layout_width="match_parent"
-            android:layout_height="match_parent">
+            android:layout_height="match_parent"
+            android:foregroundGravity="fill_horizontal|top"
+            android:foreground="?android:attr/windowContentOverlay">
 
             <FrameLayout
                 android:id="@+id/content_pane"
@@ -45,6 +45,8 @@
 
             <include layout="@layout/floating_actions" />
 
+            <include layout="@layout/search_suggestion_list" />
+
         </FrameLayout>
 
     </LinearLayout>
diff --git a/res/layout/quoted_text.xml b/res/layout/quoted_text.xml
index 4bde415..a591341 100644
--- a/res/layout/quoted_text.xml
+++ b/res/layout/quoted_text.xml
@@ -23,7 +23,7 @@
 
     <View android:id="@+id/upper_quotedtext_divider_bar"
         android:visibility="gone"
-        style="@style/RecipientComposeFieldSpacer" />
+        style="@style/DefaultDividerStyle" />
 
     <LinearLayout android:id="@+id/quoted_text_button_bar"
         android:layout_width="match_parent"
@@ -52,14 +52,14 @@
             android:background="?android:attr/selectableItemBackground"
             android:text="@string/respond_inline"
             android:textAllCaps="true"
-            android:textColor="@color/respond_inline_color"
+            android:textColor="@color/text_color_blue"
             android:textSize="14sp" />
 
     </LinearLayout>
 
     <View
         android:id="@+id/divider_bar"
-        style="@style/RecipientComposeFieldSpacer" />
+        style="@style/DefaultDividerStyle" />
 
     <WebView android:id="@+id/quoted_text_web_view"
         android:layout_height="wrap_content"
diff --git a/res/layout/custom_from_item.xml b/res/layout/search_suggestion_item.xml
similarity index 60%
rename from res/layout/custom_from_item.xml
rename to res/layout/search_suggestion_item.xml
index c793142..6f03117 100644
--- a/res/layout/custom_from_item.xml
+++ b/res/layout/search_suggestion_item.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     Copyright (C) 2011 Google Inc.
+     Copyright (C) 2014 Google Inc.
      Licensed to The Android Open Source Project.
 
      Licensed under the Apache License, Version 2.0 (the "License");
@@ -18,25 +18,26 @@
 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="match_parent">
-
-    <TextView
-        android:id="@+id/spinner_account_name"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:textAlignment="viewStart"
-        style="@style/ComposeFromTextViewStyle" />
-
-    <TextView
-        android:id="@+id/spinner_account_address"
-        android:layout_width="0dp"
-        android:layout_height="wrap_content"
-        android:layout_weight="1"
-        android:textAlignment="viewStart"
-        style="@style/SpinnerAccountAddressStyle" />
+    android:layout_height="wrap_content"
+    android:paddingTop="@dimen/search_suggestion_padding"
+    android:paddingBottom="@dimen/search_suggestion_padding">
 
     <ImageView
-        android:src="@drawable/ic_expand_more_24dp"
-        style="@style/ComposeFieldButton" />
+        android:id="@+id/search_overlay_item_icon"
+        android:layout_width="@dimen/search_leading_button_width"
+        android:layout_height="wrap_content"
+        android:scaleType="center" />
 
-</LinearLayout>
+    <TextView
+        android:id="@+id/search_overlay_item_text"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_vertical|start"
+        android:layout_weight="1"
+        android:paddingLeft="@dimen/search_main_text_padding"
+        android:paddingRight="@dimen/search_main_text_padding"
+        android:textAlignment="viewStart"
+        android:textColor="@color/search_suggestion_item_text"
+        android:textSize="16sp" />
+
+</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/search_suggestion_list.xml b/res/layout/search_suggestion_list.xml
new file mode 100644
index 0000000..076b74f
--- /dev/null
+++ b/res/layout/search_suggestion_list.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2014 Google Inc.
+     Licensed to 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.
+-->
+
+<com.android.mail.ui.MaterialSearchSuggestionsList
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/search_overlay_view"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:alpha="0"
+    android:orientation="vertical"
+    android:visibility="gone">
+
+    <com.android.mail.ui.AutoResizeListView
+        android:id="@+id/search_overlay_suggestion_list"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="@android:color/white"
+        android:divider="@null"
+        android:nextFocusUp="@+id/search_actionbar_query_text" />
+
+    <!-- Scrim to fade the background -->
+    <View
+        android:id="@+id/search_overlay_scrim"
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:layout_weight="1"
+        android:background="#33000000" />
+
+</com.android.mail.ui.MaterialSearchSuggestionsList>
\ No newline at end of file
diff --git a/res/layout/security_hold_view.xml b/res/layout/security_hold_view.xml
new file mode 100644
index 0000000..5716642
--- /dev/null
+++ b/res/layout/security_hold_view.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2014 Google Inc.
+     Licensed to 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:id="@+id/security_hold_view"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:gravity="center"
+    android:orientation="vertical"
+    android:visibility="invisible" >
+
+    <ImageView
+        android:id="@+id/security_hold_icon"
+        android:layout_height="wrap_content"
+        android:layout_width="wrap_content"
+        android:src="@drawable/ic_warning_56dp"/>
+
+    <TextView
+        android:id="@+id/security_hold_text"
+        android:fontFamily="sans-serif-light"
+        android:gravity="center"
+        android:layout_height="wrap_content"
+        android:layout_width="wrap_content"
+        android:layout_marginTop="20dp"
+        android:maxWidth="@dimen/security_hold_text_width"
+        android:textAllCaps="true"
+        android:textColor="#212121"
+        android:textSize="@dimen/security_hold_view_text_size"/>
+
+    <TextView
+        android:id="@+id/security_hold_button"
+        android:fontFamily="sans-serif-light"
+        android:gravity="center"
+        android:layout_height="wrap_content"
+        android:layout_width="wrap_content"
+        android:layout_marginTop="60dp"
+        android:text="@string/update_security_text"
+        android:textColor="@color/text_color_blue"
+        android:textSize="@dimen/security_hold_view_text_size"/>
+
+</LinearLayout>
diff --git a/res/layout/single_folders_view.xml b/res/layout/single_folders_view.xml
index 3f048da..ebb4adb 100644
--- a/res/layout/single_folders_view.xml
+++ b/res/layout/single_folders_view.xml
@@ -19,19 +19,25 @@
 
 <!-- Describes an individual toggleable folder entry to be displayed in a list of folders in
      a folder selection UI. -->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/folders"
     android:layout_width="match_parent"
-    android:layout_height="wrap_content"
+    android:layout_height="@dimen/single_folder_list_item_height"
+    android:layout_gravity="center_vertical"
     android:minHeight="?android:attr/listPreferredItemHeight">
 
     <!-- Note: the checkbox is not focusable because the parent list item itself handles
          the toggling -->
+    <ImageView
+        android:id="@+id/folder_icon"
+        android:layout_width="24dp"
+        android:layout_height="24dp"
+        android:layout_gravity="center_vertical"
+        style="@style/SingleFolderListIconStyle" />
+
     <TextView android:id="@+id/folder_name"
-        style="@style/FolderSelectionItemStyle" />
+        android:layout_width="0dp"
+        android:layout_weight="1"
+        style="@style/SingleFolderSelectionItemStyle" />
 
-    <View
-        android:id="@+id/color_block"
-        style="@style/FolderColorBoxStyle" />
-
-</FrameLayout>
+</LinearLayout>
diff --git a/res/layout/super_collapsed_block.xml b/res/layout/super_collapsed_block.xml
index 00433fa..281d198 100644
--- a/res/layout/super_collapsed_block.xml
+++ b/res/layout/super_collapsed_block.xml
@@ -33,13 +33,13 @@
 
         <View
             android:layout_width="match_parent"
-            android:layout_height="1dp"
+            android:layout_height="@dimen/divider_height"
             android:background="@color/conversation_view_border_color"/>
 
         <View
             android:layout_width="match_parent"
-            android:layout_height="1dp"
-            android:layout_marginTop="8dp"
+            android:layout_height="@dimen/divider_height"
+            android:layout_marginTop="4dp"
             android:background="@color/conversation_view_border_color"/>
 
     </LinearLayout>
@@ -54,4 +54,15 @@
         android:textSize="@dimen/super_collapsed_text_size"
         style="@style/MessageHeaderIconStyle" />
 
+    <ImageView
+        android:id="@+id/super_collapsed_progress"
+        android:layout_width="40sp"
+        android:layout_height="40sp"
+        android:background="@drawable/super_collapse_circle"
+        android:contentDescription="@null"
+        android:scaleType="center"
+        android:src="@drawable/ic_cv_loading_24dp"
+        android:visibility="gone"
+        style="@style/MessageHeaderIconStyle" />
+
 </com.android.mail.browse.SuperCollapsedBlock>
diff --git a/res/layout/swipe_leavebehind_body.xml b/res/layout/swipe_leavebehind_body.xml
index cfe8858..106c7e8 100644
--- a/res/layout/swipe_leavebehind_body.xml
+++ b/res/layout/swipe_leavebehind_body.xml
@@ -18,47 +18,25 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:clickable="true"
     android:orientation="horizontal">
+
     <TextView
-        android:id="@+id/undo_descriptionview"
-        android:layout_width="0dip"
+        android:id="@+id/undo_description_text"
+        android:layout_width="0dp"
         android:layout_height="match_parent"
         android:layout_weight="1"
         android:ellipsize="end"
         android:singleLine="true"
-        android:textColor="@android:color/white"
-        android:textAppearance="?android:attr/textAppearanceMedium"
-        android:clickable="true"
         android:gravity="center_vertical"
+        android:textColor="@android:color/white"
+        android:textSize="16sp"
         style="@style/UndoDescriptionStyle" />
 
-    <View
-        android:id="@+id/undo_separator"
-        android:layout_width="1dip"
-        android:layout_height="match_parent"
-        android:background="@android:color/white"
-        android:layout_marginTop="16dp"
-        android:layout_marginBottom="16dp" />
-
-    <ImageView
-        android:id="@+id/undo_icon"
-        android:layout_width="wrap_content"
-        android:layout_height="match_parent"
-        android:src="@drawable/ic_menu_revert_holo_dark"
-        android:background="?android:attr/selectableItemBackground"
-        android:duplicateParentState="true"
-        style="@style/UndoIconStyle" />
-
     <TextView
         android:id="@+id/undo_text"
-        style="@style/UndoTextStyle"
         android:layout_width="wrap_content"
         android:layout_height="match_parent"
-        android:text="@string/undo"
-        android:textAllCaps="true"
         android:gravity="center_vertical"
-        android:textColor="@android:color/white"
-        android:background="?android:attr/selectableItemBackground"
-        android:duplicateParentState="true"/>
+        style="@style/UndoTextStyle" />
+
 </LinearLayout>
diff --git a/res/layout/teaser_right_edge.xml b/res/layout/teaser_right_edge.xml
deleted file mode 100644
index c3c0270..0000000
--- a/res/layout/teaser_right_edge.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2013 Google Inc.
-     Licensed to 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.
--->
-<!-- This is used to show the line on the right edge of a list item in tablet ui -->
-<ImageView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/teaser_right_edge"
-    android:layout_width="wrap_content"
-    android:layout_height="match_parent"
-    android:src="@drawable/list_edge_tablet"/>
diff --git a/res/layout/toolbar_with_search.xml b/res/layout/toolbar_with_search.xml
new file mode 100644
index 0000000..a6030f2
--- /dev/null
+++ b/res/layout/toolbar_with_search.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2014 Google Inc.
+    Licensed to The Android Open Source Project.
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="?attr/actionBarSize"
+    android:background="?attr/colorPrimary"
+    android:elevation="2dp"
+    android:touchscreenBlocksFocus="true">
+
+    <include layout="@layout/mail_toolbar_view" />
+
+    <include layout="@layout/mail_actionbar_searchview" />
+
+</FrameLayout>
\ No newline at end of file
diff --git a/res/layout/two_pane_activity.xml b/res/layout/two_pane_activity.xml
index 2f8f6db..de1e21f 100644
--- a/res/layout/two_pane_activity.xml
+++ b/res/layout/two_pane_activity.xml
@@ -15,49 +15,95 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<com.android.mail.ui.TwoPaneLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/two_pane_activity"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:background="@color/tablet_background_gray">
+    android:orientation="vertical">
 
+    <!-- Custom toolbar/search overlay -->
+    <include layout="@layout/toolbar_with_search" />
+
+    <!-- Main content -->
     <FrameLayout
-        android:id="@+id/drawer"
-        android:layout_width="@dimen/two_pane_drawer_width_open"
+        android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:layout_gravity="left">
+        android:foreground="?android:attr/windowContentOverlay">
 
-        <include layout="@layout/drawer_fragment"
+        <com.android.mail.ui.TwoPaneLayout
+            android:id="@+id/two_pane_activity"
             android:layout_width="match_parent"
-            android:layout_height="match_parent" />
+            android:layout_height="match_parent"
+            android:foregroundGravity="fill_horizontal|top"
+            android:background="@android:color/white">
+
+            <FrameLayout
+                android:id="@+id/drawer"
+                android:layout_width="@dimen/two_pane_drawer_width_open"
+                android:layout_height="match_parent"
+                android:layout_gravity="left">
+
+                <include layout="@layout/drawer_fragment"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent" />
+
+            </FrameLayout>
+
+            <FrameLayout
+                android:id="@+id/conversation_list_pane"
+                android:layout_width="0dp"
+                android:layout_height="match_parent"
+                android:layout_gravity="left" >
+
+                <FrameLayout
+                    android:id="@+id/conversation_list_place_holder"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent" />
+
+                <ImageButton
+                    android:id="@+id/compose_button"
+                    style="@style/FloatingActionButtonStyle" />
+
+            </FrameLayout>
+
+            <com.android.mail.ui.ConversationViewFrame
+                android:id="@+id/conversation_frame"
+                android:layout_width="0dp"
+                android:layout_height="match_parent"
+                android:layout_gravity="left"
+                android:foreground="@drawable/ic_vertical_shadow_end_2dp">
+
+                <FrameLayout
+                    android:id="@+id/conversation_pane"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent">
+
+                    <!-- Empty icon view for CV landscape -->
+                    <ImageView
+                        android:id="@+id/conversation_pane_no_message_view"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_gravity="center"
+                        android:visibility="gone" />
+
+                    <include layout="@layout/conversation_pager"
+                        android:layout_width="match_parent"
+                        android:layout_height="match_parent" />
+
+                </FrameLayout>
+
+                <FrameLayout
+                    android:id="@+id/miscellaneous_pane"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent" />
+
+            </com.android.mail.ui.ConversationViewFrame>
+
+            <include layout="@layout/floating_actions" />
+
+        </com.android.mail.ui.TwoPaneLayout>
+
+        <include layout="@layout/search_suggestion_list" />
 
     </FrameLayout>
 
-    <FrameLayout
-        android:id="@+id/conversation_list_pane"
-        android:layout_width="0dp"
-        android:layout_height="match_parent"
-        android:layout_gravity="left"
-        style="@style/TwoPaneConversationList" />
-
-    <com.android.mail.ui.ConversationViewFrame
-        android:id="@+id/conversation_pane"
-        android:layout_width="0dp"
-        android:layout_height="match_parent"
-        android:layout_gravity="left">
-
-        <include layout="@layout/conversation_pager"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent" />
-
-    </com.android.mail.ui.ConversationViewFrame>
-
-    <com.android.mail.ui.ConversationViewFrame
-        android:id="@+id/miscellaneous_pane"
-        android:layout_width="0dp"
-        android:layout_height="match_parent"
-        android:layout_gravity="left" />
-
-    <include layout="@layout/floating_actions" />
-
-</com.android.mail.ui.TwoPaneLayout>
+</LinearLayout>
diff --git a/res/layout/undo_notification.xml b/res/layout/undo_notification.xml
index 9358da8..58b1fca 100644
--- a/res/layout/undo_notification.xml
+++ b/res/layout/undo_notification.xml
@@ -23,15 +23,7 @@
     android:layout_width="match_parent"
     android:layout_height="64dp"
     internal:layout_maxHeight="64dp"
-    internal:layout_minHeight="64dp"
-    android:background="@drawable/notification_bg" >
-
-    <ImageView
-        android:layout_width="@android:dimen/notification_large_icon_width"
-        android:layout_height="@android:dimen/notification_large_icon_height"
-        android:background="@color/notification_template_icon_low_bg"
-        android:scaleType="center"
-        android:src="@drawable/ic_notification_mail_24dp" />
+    internal:layout_minHeight="64dp" >
 
     <LinearLayout
         android:layout_width="match_parent"
@@ -39,45 +31,23 @@
         android:layout_gravity="fill_vertical"
         android:gravity="top"
         android:minHeight="@android:dimen/notification_large_icon_height"
-        android:orientation="horizontal"
-        android:paddingBottom="2dp"
-        android:paddingTop="2dp"
-        style="@style/UndoNotificationStyle" >
+        android:orientation="horizontal" >
 
         <TextView
             android:id="@+id/description_text"
             android:layout_width="0dp"
             android:layout_height="match_parent"
-            android:layout_marginLeft="8dp"
-            android:layout_marginRight="8dp"
             android:layout_weight="1"
-            android:ellipsize="marquee"
-            android:fadingEdge="horizontal"
-            android:gravity="center_vertical" />
-
-        <ImageView
-            android:layout_width="1dip"
-            android:layout_height="match_parent"
-            android:layout_marginBottom="10dip"
-            android:layout_marginRight="12dip"
-            android:layout_marginTop="10dip"
-            android:src="#aaaaaa" />
-
-        <ImageView
-            android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            android:layout_gravity="center_vertical"
-            android:layout_marginRight="4dip"
-            android:src="@drawable/ic_menu_revert_holo_dark" />
+            android:ellipsize="end"
+            android:gravity="center_vertical"
+            android:textSize="16sp"
+            style="@style/UndoNotificationDescriptionStyle" />
 
         <TextView
-            style="@style/UndoTextStyle"
             android:layout_width="wrap_content"
             android:layout_height="match_parent"
-            android:layout_marginLeft="4dip"
             android:gravity="center_vertical"
-            android:text="@string/undo"
-            android:textAllCaps="true" />
+            style="@style/UndoNotificationTextStyle" />
     </LinearLayout>
 
 </FrameLayout>
diff --git a/res/layout/vacation_responder.xml b/res/layout/vacation_responder.xml
index d71b6fd..70740f9 100644
--- a/res/layout/vacation_responder.xml
+++ b/res/layout/vacation_responder.xml
@@ -17,84 +17,180 @@
 -->
 
 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
-            xmlns:tools="http://schemas.android.com/tools"
-            android:layout_gravity="center_horizontal|top"
-            android:fillViewport="true"
-            style="@style/VacationResponderScrollViewStyle">
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:layout_gravity="center_horizontal|top"
+    android:fillViewport="true"
+    android:paddingLeft="@dimen/compose_wrapper_side_padding"
+    android:paddingRight="@dimen/compose_wrapper_side_padding">
 
+    <!-- Horizontal layout to get side paddings for tablets -->
     <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:orientation="vertical"
-            android:paddingTop="@dimen/vacation_responder_padding_vertical"
-            android:paddingBottom="@dimen/vacation_responder_padding_vertical"
-            android:background="@color/vacation_responder_foreground"
-            style="@style/VacationResponderStyle">
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:paddingTop="@dimen/compose_wrapper_top_padding">
 
-        <Switch android:id="@+id/vacation_responder_switch"
+        <!-- Start border -->
+        <Space
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="@integer/compose_padding_weight" />
+
+        <LinearLayout
+            android:orientation="vertical"
+            android:paddingLeft="@dimen/vacation_responder_padding_horizontal"
+            android:paddingRight="@dimen/vacation_responder_padding_horizontal"
+            style="@style/ComposeArea">
+
+            <Switch
+                android:id="@+id/vacation_responder_switch"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:layout_marginBottom="16dip"
+                android:background="?android:attr/selectableItemBackground"
+                android:minHeight="56dp"
                 android:text="@string/preferences_vacation_responder_title"
-                android:textAppearance="?android:attr/textAppearanceMedium"
-                style="@style/VacationResponderSwitch"/>
+                android:textColor="@color/vacation_responder_main_text_color"
+                android:textSize="@dimen/vacation_responder_main_text_size" />
 
-        <LinearLayout android:layout_width="match_parent"
-                      android:layout_height="wrap_content"
-                      android:layout_marginBottom="-12dip"
-                      android:minHeight="24dip">
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:paddingTop="16dp">
 
-            <TextView android:text="@string/pick_start_date_title"
-                      style="@style/VactionResponderStartDateLabel" />
-
-            <TextView android:text="@string/pick_end_date_title"
-                      style="@style/VactionResponderEndDateLabel" />
-
-        </LinearLayout>
-
-        <LinearLayout android:layout_width="match_parent"
-                      android:layout_height="wrap_content"
-                      android:layout_marginTop="-6dip">
-
-            <Button android:id="@+id/start_date"
-                    android:layout_width="0dip"
+                <!-- Start date -->
+                <LinearLayout
+                    android:layout_width="0dp"
                     android:layout_height="wrap_content"
                     android:layout_weight="1"
-                    style="@style/VactionResponderStartDateSpinner" />
+                    android:orientation="vertical"
+                    style="@style/VacationResponderDatePadding">
 
-            <Button android:id="@+id/end_date"
-                    android:layout_width="0dip"
-                    android:layout_height="wrap_content"
-                    android:layout_weight="1"
-                    style="@style/VactionResponderEndDateSpinner"/>
-
-        </LinearLayout>
-
-        <RelativeLayout style="@style/ComposeFieldLayout">
-            <!-- Subject: localization cannot control what field pressing tab
-                 will bring the user to. This is controlled at runtime.  -->
-            <com.android.mail.compose.EnterSubject
-                    android:id="@+id/subject"
-                    style="@style/VacationResponderSubject" />
-        </RelativeLayout>
-
-        <RelativeLayout android:layout_height="wrap_content"
+                    <TextView
                         android:layout_width="match_parent"
-                        android:id="@+id/body_wrapper"
-                        style="@style/ComposeFieldLayout">
+                        android:layout_height="wrap_content"
+                        android:text="@string/pick_start_date_title"
+                        android:textColor="@color/vacation_responder_header_text_color"
+                        android:textSize="@dimen/vacation_responder_header_text_size" />
 
-            <EditText android:id="@+id/body"
-                      android:hint="@string/vacation_responder_body_hint_text"
-                      style="@style/VacationResponderBody" />
+                    <!-- date selector -->
+                    <LinearLayout
+                        android:id="@+id/start_date_selector"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:background="?android:attr/selectableItemBackground">
 
-        </RelativeLayout>
+                        <TextView
+                            android:id="@+id/start_date"
+                            android:layout_width="0dp"
+                            android:layout_height="wrap_content"
+                            android:layout_weight="1"
+                            android:paddingTop="8dp"
+                            android:paddingBottom="8dp"
+                            android:textColor="@color/vacation_responder_main_text_color"
+                            android:textSize="@dimen/vacation_responder_main_text_size" />
 
-        <CheckedTextView android:id="@+id/checkbox_send_to_contacts"
-                         android:text="@string/send_to_contacts_text"
-                         style="@style/VacationResponderCheckBox" />
+                        <ImageView
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:layout_gravity="center_vertical"
+                            android:src="@drawable/ic_drop_down_24dp" />
 
-        <CheckedTextView android:id="@+id/checkbox_send_to_domain"
-                         tools:text="Send only to Google.com"
-                         style="@style/VacationResponderCheckBox" />
+                    </LinearLayout>
+
+                    <View
+                        android:layout_marginTop="8dp"
+                        style="@style/DefaultDividerStyle" />
+
+                </LinearLayout>
+
+                <!-- End date -->
+                <LinearLayout
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:orientation="vertical">
+
+                    <TextView
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:text="@string/pick_end_date_title"
+                        android:textColor="@color/vacation_responder_header_text_color"
+                        android:textSize="@dimen/vacation_responder_header_text_size" />
+
+                    <!-- date selector -->
+                    <LinearLayout
+                        android:id="@+id/end_date_selector"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:background="?android:attr/selectableItemBackground">
+
+                        <TextView
+                            android:id="@+id/end_date"
+                            android:layout_width="0dp"
+                            android:layout_height="wrap_content"
+                            android:layout_weight="1"
+                            android:paddingTop="8dp"
+                            android:paddingBottom="8dp"
+                            android:textColor="@color/vacation_responder_main_text_color"
+                            android:textSize="@dimen/vacation_responder_main_text_size" />
+
+                        <ImageView
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:layout_gravity="center_vertical"
+                            android:src="@drawable/ic_drop_down_24dp" />
+
+                    </LinearLayout>
+
+                    <View
+                        android:layout_marginTop="8dp"
+                        style="@style/DefaultDividerStyle" />
+
+                </LinearLayout>
+
+            </LinearLayout>
+
+            <com.android.mail.compose.EnterSubject
+                android:id="@+id/subject"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:hint="@string/subject_hint"
+                android:imeOptions="actionDone|flagNoExtractUi|flagNoFullscreen"
+                android:inputType="textEmailSubject|textAutoCorrect|textCapSentences|textImeMultiLine|textMultiLine"
+                android:maxLength="@integer/vacation_responder_subject_length"
+                style="@style/VacationResponderInputField" />
+
+            <View style="@style/DefaultDividerStyle" />
+
+            <EditText
+                android:id="@+id/body"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:hint="@string/vacation_responder_body_hint_text"
+                android:imeOptions="flagNoFullscreen|actionDone|flagNoEnterAction"
+                android:inputType="textLongMessage|textMultiLine|textAutoCorrect|textCapSentences"
+                android:maxLength="@integer/vacation_responder_body_length"
+                style="@style/VacationResponderInputField" />
+
+            <View style="@style/DefaultDividerStyle" />
+
+            <CheckedTextView
+                android:id="@+id/checkbox_send_to_contacts"
+                android:text="@string/send_to_contacts_text"
+                style="@style/VacationResponderCheckBox" />
+
+            <CheckedTextView
+                android:id="@+id/checkbox_send_to_domain"
+                style="@style/VacationResponderCheckBox" />
+
+        </LinearLayout>
+
+        <!-- End border -->
+        <Space
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="@integer/compose_padding_weight" />
+
     </LinearLayout>
+
 </ScrollView>
diff --git a/res/layout/vacation_responder_custom_action_bar.xml b/res/layout/vacation_responder_custom_action_bar.xml
index f70dc90..1b3bada 100644
--- a/res/layout/vacation_responder_custom_action_bar.xml
+++ b/res/layout/vacation_responder_custom_action_bar.xml
@@ -15,38 +15,41 @@
 -->
 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-              android:layout_width="match_parent"
-              android:layout_height="match_parent"
-              android:orientation="horizontal"
-              android:divider="?android:attr/dividerVertical"
-              android:dividerPadding="12dip"
-              android:showDividers="middle">
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="horizontal">
 
     <!-- id must match corresponding menu item id -->
     <LinearLayout
-            android:id="@+id/action_cancel"
-            style="@style/CustomActionButton">
+        android:id="@+id/action_cancel"
+        style="@style/VacationResponderActionButton">
 
         <ImageView
-                android:src="@drawable/ic_cancel_holo_light"
-                style="@style/CustomActionButtonImage" />
+            android:src="@drawable/ic_close_wht_24dp"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:padding="4dp" />
+
         <TextView
-                android:text="@string/cancel"
-                style="@style/CustomActionButtonText" />
+            android:text="@string/cancel"
+            style="@style/VacationResponderActionButtonText" />
 
     </LinearLayout>
 
     <!-- id must match corresponding menu item id -->
     <LinearLayout
-            android:id="@+id/action_done"
-            style="@style/CustomActionButton">
+        android:id="@+id/action_done"
+        style="@style/VacationResponderActionButton">
 
         <ImageView
-                android:src="@drawable/ic_menu_done_holo_light"
-                style="@style/CustomActionButtonImage" />
+            android:src="@drawable/ic_check_wht_24dp"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:padding="4dp" />
+
         <TextView
-                android:text="@string/done"
-                style="@style/CustomActionButtonText" />
+            android:text="@string/done"
+            style="@style/VacationResponderActionButtonText" />
 
     </LinearLayout>
 
diff --git a/res/layout/widget.xml b/res/layout/widget.xml
index c671a86..f59655f 100644
--- a/res/layout/widget.xml
+++ b/res/layout/widget.xml
@@ -26,34 +26,31 @@
     android:layout_marginBottom="@dimen/widget_margin_bottom"
     android:orientation="vertical">
 
-    <RelativeLayout
+    <LinearLayout
         android:id="@+id/widget_header"
         android:layout_width="match_parent"
         android:layout_height="48dp"
-        android:paddingLeft="16dp"
-        android:paddingRight="16dp"
-        android:background="@color/widget_header_bg_color">
-        <ImageButton
-            android:id="@+id/widget_compose"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:src="@drawable/ic_widget_compose_wht_24dp"
-            android:background="?android:attr/selectableItemBackground"
-            android:paddingLeft="16dp"
-            android:layout_alignParentRight="true"
-            android:layout_centerVertical="true"
-            android:contentDescription="@string/compose" />
+        android:background="@color/widget_header_bg_color"
+        style="@style/WidgetHeaderStartMargin">
         <TextView
             android:id="@+id/widget_folder"
-            style="@style/WidgetTitle"
-            android:layout_width="wrap_content"
+            android:layout_width="0dp"
             android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:layout_gravity="center_vertical"
             android:freezesText="true"
-            android:layout_toLeftOf="@id/widget_compose"
-            android:layout_alignParentLeft="true"
-            android:layout_centerVertical="true"
-            android:includeFontPadding="false" />
-    </RelativeLayout>
+            android:textAlignment="viewStart"
+            android:includeFontPadding="false"
+            style="@style/WidgetTitle"/>
+        <ImageButton
+            android:id="@+id/widget_compose"
+            android:layout_width="56dp"
+            android:layout_height="match_parent"
+            android:scaleType="center"
+            android:src="@drawable/ic_pencil_wht_24dp"
+            android:background="?android:attr/selectableItemBackground"
+            android:contentDescription="@string/compose" />
+    </LinearLayout>
 
     <LinearLayout
         android:id="@+id/widget_configuration"
@@ -83,7 +80,7 @@
         android:layout_weight="1"
         android:cacheColorHint="#00000000"
         android:background="@drawable/gradient_bg_widget_holo"
-        style="@style/ConversationListFade" />
+        style="@style/WidgetConversationListFade" />
     <TextView
         android:id="@+id/empty_conversation_list"
         android:layout_width="match_parent"
diff --git a/res/layout/widget_conversation_list_item.xml b/res/layout/widget_conversation_list_item.xml
index 92ebe50..ea2c405 100644
--- a/res/layout/widget_conversation_list_item.xml
+++ b/res/layout/widget_conversation_list_item.xml
@@ -29,12 +29,12 @@
         android:id="@+id/widget_unread_background"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:background="@drawable/conversation_item_background_selector" />
+        android:background="@drawable/conversation_item_background" />
     <ImageView
         android:id="@+id/widget_read_background"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:background="@drawable/conversation_item_background_selector" />
+        android:background="@drawable/conversation_item_background" />
     <LinearLayout
         android:id="@+id/content"
         android:layout_width="match_parent"
@@ -78,7 +78,8 @@
             android:layout_marginLeft="16dp"
             android:layout_marginRight="16dp"
             android:maxLines="1"
-            android:includeFontPadding="false" />
+            android:includeFontPadding="false"
+            android:textAlignment="viewStart"/>
 
         <TextView
             android:id="@+id/widget_snippet"
@@ -87,6 +88,7 @@
             android:layout_marginLeft="16dp"
             android:layout_marginRight="16dp"
             android:includeFontPadding="false"
+            android:textAlignment="viewStart"
             android:maxLines="1"/>
 
         <LinearLayout
@@ -113,4 +115,4 @@
                     android:scaleType="fitXY" />
         </LinearLayout>
     </LinearLayout>
-</FrameLayout>
\ No newline at end of file
+</FrameLayout>
diff --git a/res/layout/widget_loading.xml b/res/layout/widget_loading.xml
index 0d116a2..b3cde7b 100644
--- a/res/layout/widget_loading.xml
+++ b/res/layout/widget_loading.xml
@@ -20,7 +20,7 @@
     android:id="@+id/widget_loading"
     android:layout_width="match_parent"
     android:layout_height="64sp"
-    android:background="@drawable/conversation_item_background_selector">
+    android:background="@drawable/conversation_item_background">
     <TextView
         android:id="@+id/loading_text"
         android:layout_height="match_parent"
diff --git a/res/menu-sw600dp-land/conversation_actions.xml b/res/menu-sw600dp-land/conversation_actions.xml
index 78325b8..a2ffcc2 100644
--- a/res/menu-sw600dp-land/conversation_actions.xml
+++ b/res/menu-sw600dp-land/conversation_actions.xml
@@ -16,36 +16,32 @@
      limitations under the License.
 -->
 <!-- Action bar items for the tablet when viewing a conversation in landscape mode. -->
+<!-- Key differences: search menu item, keyboard shortcuts for compose/refresh. -->
 <menu xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:app="http://schemas.android.com/apk/res-auto">
 
-    <item android:id="@+id/search"
-        android:title="@string/menu_search"
-        app:showAsAction="always|collapseActionView"
-        android:icon="@drawable/ic_menu_search"
-        app:actionLayout="@layout/mail_actionbar_searchview" />
-
     <item
         android:id="@+id/archive"
         android:title="@string/archive"
         app:showAsAction="always"
         android:icon="@drawable/ic_archive_wht_24dp"
-        android:alphabeticShortcut="@string/trigger_y_char" />
+        android:alphabeticShortcut="@string/trigger_archive_char" />
 
     <item
         android:id="@+id/remove_folder"
         android:title="@string/remove_folder"
         app:showAsAction="always"
         android:icon="@drawable/ic_remove_label_wht_24dp"
-        android:alphabeticShortcut="@string/trigger_y_char"
-        android:visible="false" />
+        android:visible="false"
+        android:alphabeticShortcut="@string/trigger_archive_char" />
 
     <!-- Depends on FolderCapabilities.DELETE -->
     <item
         android:id="@+id/delete"
         android:title="@string/delete"
         app:showAsAction="always"
-        android:icon="@drawable/ic_delete_wht_24dp" />
+        android:icon="@drawable/ic_delete_wht_24dp"
+        android:alphabeticShortcut="@string/trigger_delete_char" />
 
     <!-- Depends on the user viewing a draft label, and the above menu item not being shown -->
     <item
@@ -53,33 +49,44 @@
         android:title="@string/discard_drafts"
         app:showAsAction="always"
         android:icon="@drawable/ic_delete_wht_24dp"
-        android:visible="false" />
+        android:visible="false"
+        android:alphabeticShortcut="@string/trigger_delete_char" />
     <!-- Depends on the user viewing a outbox label and the setting supports delete -->
     <item
         android:id="@+id/discard_outbox"
         android:title="@string/discard_failed"
         app:showAsAction="always"
         android:icon="@drawable/ic_delete_wht_24dp"
-        android:visible="false" />
+        android:visible="false"
+        android:alphabeticShortcut="@string/trigger_delete_char" />
 
+    <!-- Only one of mark-read or mark-unread is shown. -->
+    <!-- (mark read is only for landscape 2-pane's peek mode) -->
     <item
         android:id="@+id/inside_conversation_unread"
         android:title="@string/mark_unread"
         app:showAsAction="always"
-        android:icon="@drawable/ic_menu_mark_unread_wht_24dp" />
+        android:icon="@drawable/ic_mark_unread_wht_24dp" />
+
+    <item
+        android:id="@+id/read"
+        android:title="@string/mark_read"
+        app:showAsAction="always"
+        android:icon="@drawable/ic_mark_read_wht_24dp" />
 
     <item
         android:id="@+id/move_to"
         android:title="@string/menu_move_to"
-        app:showAsAction="never"
-        android:icon="@drawable/ic_menu_move_to_holo_light" />
+        app:showAsAction="always"
+        android:icon="@drawable/ic_move_to_wht_24dp" />
 
     <!-- Always available -->
     <item
         android:id="@+id/change_folders"
         android:title="@string/menu_change_folders"
         app:showAsAction="never"
-        android:icon="@drawable/ic_change_labels_wht_24dp" />
+        android:icon="@drawable/ic_change_labels_wht_24dp"
+        android:alphabeticShortcut="@string/trigger_change_label_char" />
 
     <item
         android:id="@+id/move_to_inbox"
@@ -103,8 +110,9 @@
         app:showAsAction="never" />
 
     <item android:id="@+id/print_all"
-          android:title="@string/print_all"
-          android:visible="false" />
+        android:title="@string/print_all"
+        android:visible="false"
+        android:alphabeticShortcut="@string/trigger_print_char" />
 
     <item
         android:id="@+id/show_original"
@@ -142,4 +150,40 @@
         android:visible="false"
         android:alphabeticShortcut="@string/trigger_refresh_char" />
 
+    <item
+        android:id="@+id/reply"
+        android:title="@string/reply"
+        android:visible="false"
+        android:alphabeticShortcut="@string/trigger_reply_char" />
+
+    <item
+        android:id="@+id/reply_all"
+        android:title="@string/reply_all"
+        android:visible="false"
+        android:alphabeticShortcut="@string/trigger_reply_all_char" />
+
+    <item
+        android:id="@+id/toggle_read_unread"
+        android:title="@string/toggle_read_unread"
+        android:visible="false"
+        android:alphabeticShortcut="@string/trigger_toggle_read_unread_char" />
+
+    <item
+        android:id="@+id/toggle_drawer"
+        android:title="@string/menu_toggle_drawer"
+        android:visible="false"
+        android:alphabeticShortcut="@string/trigger_toggle_drawer_char" />
+
+    <item
+        android:id="@+id/settings"
+        android:title="@string/menu_settings"
+        android:visible="false"
+        android:alphabeticShortcut="@string/trigger_settings_char" />
+
+    <item
+        android:id="@+id/help_info_menu_item"
+        android:title="@string/help_and_feedback"
+        android:visible="false"
+        android:alphabeticShortcut="@string/trigger_help_char" />
+
 </menu>
diff --git a/res/menu-sw600dp-land/conversation_list_search_results_actions.xml b/res/menu-sw600dp-land/conversation_list_search_results_actions.xml
index 1b784bc..c353dde 100644
--- a/res/menu-sw600dp-land/conversation_list_search_results_actions.xml
+++ b/res/menu-sw600dp-land/conversation_list_search_results_actions.xml
@@ -18,29 +18,25 @@
 <menu xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:app="http://schemas.android.com/apk/res-auto">
 
-    <item android:id="@+id/search"
-        android:title="@string/menu_search"
-        app:showAsAction="always|collapseActionView"
-        android:icon="@drawable/ic_menu_search"
-        app:actionLayout="@layout/mail_actionbar_searchview" />
-
     <item
         android:id="@+id/delete"
         android:title="@string/delete"
         app:showAsAction="always"
-        android:icon="@drawable/ic_delete_wht_24dp" />
+        android:icon="@drawable/ic_delete_wht_24dp"
+        android:alphabeticShortcut="@string/trigger_delete_char" />
 
     <item
         android:id="@+id/inside_conversation_unread"
         android:title="@string/mark_read"
         app:showAsAction="always"
-        android:icon="@drawable/ic_menu_mark_unread_wht_24dp" />
+        android:icon="@drawable/ic_mark_unread_wht_24dp" />
 
     <item
         android:id="@+id/change_folders"
         android:title="@string/menu_change_folders"
         app:showAsAction="never"
-        android:icon="@drawable/ic_change_labels_wht_24dp" />
+        android:icon="@drawable/ic_change_labels_wht_24dp"
+        android:alphabeticShortcut="@string/trigger_change_label_char" />
 
     <item
         android:id="@+id/mark_important"
@@ -64,9 +60,34 @@
         android:visible="false"
         android:alphabeticShortcut="@string/trigger_compose_char" />
 
-    <item android:id="@+id/refresh"
+    <item
+        android:id="@+id/refresh"
         android:title="@string/refresh"
         android:visible="false"
         android:alphabeticShortcut="@string/trigger_refresh_char" />
 
+    <item
+        android:id="@+id/toggle_read_unread"
+        android:title="@string/toggle_read_unread"
+        android:visible="false"
+        android:alphabeticShortcut="@string/trigger_toggle_read_unread_char" />
+
+    <item
+        android:id="@+id/toggle_drawer"
+        android:title="@string/menu_toggle_drawer"
+        android:visible="false"
+        android:alphabeticShortcut="@string/trigger_toggle_drawer_char" />
+
+    <item
+        android:id="@+id/settings"
+        android:title="@string/menu_settings"
+        android:visible="false"
+        android:alphabeticShortcut="@string/trigger_settings_char" />
+
+    <item
+        android:id="@+id/help_info_menu_item"
+        android:title="@string/help_and_feedback"
+        android:visible="false"
+        android:alphabeticShortcut="@string/trigger_help_char" />
+
 </menu>
diff --git a/res/menu/account_feedback_menu.xml b/res/menu/account_feedback_menu.xml
index 81e0ddf..4789bb3 100644
--- a/res/menu/account_feedback_menu.xml
+++ b/res/menu/account_feedback_menu.xml
@@ -24,7 +24,8 @@
         android:id="@+id/settings"
         android:title="@string/menu_settings"
         android:menuCategory="secondary"
-        app:showAsAction="never" />
+        app:showAsAction="never"
+        android:alphabeticShortcut="@string/trigger_settings_char" />
 
     <!-- Available if the account specifies a help url -->
     <item
@@ -32,5 +33,6 @@
         android:icon="@android:drawable/ic_menu_help"
         android:menuCategory="secondary"
         app:showAsAction="never"
-        android:title="@string/help_and_feedback" />
+        android:title="@string/help_and_feedback"
+        android:alphabeticShortcut="@string/trigger_help_char" />
 </menu>
\ No newline at end of file
diff --git a/res/menu/compose_menu.xml b/res/menu/compose_menu.xml
index 693afdc..31663e2 100644
--- a/res/menu/compose_menu.xml
+++ b/res/menu/compose_menu.xml
@@ -47,22 +47,26 @@
     <item android:id="@+id/send"
         android:icon="@drawable/ic_send_wht_24dp"
         android:title="@string/send"
-        app:showAsAction="always" />
+        app:showAsAction="always"
+        android:alphabeticShortcut="@string/trigger_send_char" />
 
     <item android:id="@+id/save"
         android:title="@string/save_draft"
-        app:showAsAction="never" />
+        app:showAsAction="never"
+        android:alphabeticShortcut="@string/trigger_save_char" />
 
     <item android:id="@+id/discard"
         android:title="@string/discard"
-        app:showAsAction="never" />
+        app:showAsAction="never"
+        android:alphabeticShortcut="@string/trigger_delete_char" />
 
     <item android:id="@+id/settings"
         android:title="@string/menu_settings"
-        app:showAsAction="never" />
+        app:showAsAction="never"
+        android:alphabeticShortcut="@string/trigger_settings_char" />
 
-    <item
-        android:id="@+id/help_info_menu_item"
-        android:title="@string/help_and_feedback" />
+    <item android:id="@+id/help_info_menu_item"
+        android:title="@string/help_and_feedback"
+        android:alphabeticShortcut="@string/trigger_help_char" />
 
 </menu>
diff --git a/res/menu/conversation_actions.xml b/res/menu/conversation_actions.xml
index 9cdb4e8..0c617b1 100644
--- a/res/menu/conversation_actions.xml
+++ b/res/menu/conversation_actions.xml
@@ -15,7 +15,7 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<!-- Action bar items for the tablet when viewing a conversation -->
+<!-- Action bar items when viewing a conversation -->
 
 <menu xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:app="http://schemas.android.com/apk/res-auto">
@@ -25,22 +25,23 @@
         android:title="@string/archive"
         app:showAsAction="always"
         android:icon="@drawable/ic_archive_wht_24dp"
-        android:alphabeticShortcut="@string/trigger_y_char" />
+        android:alphabeticShortcut="@string/trigger_archive_char" />
 
     <item
         android:id="@+id/remove_folder"
         android:title="@string/remove_folder"
         app:showAsAction="always"
         android:icon="@drawable/ic_remove_label_wht_24dp"
-        android:alphabeticShortcut="@string/trigger_y_char"
-        android:visible="false" />
+        android:visible="false"
+        android:alphabeticShortcut="@string/trigger_archive_char" />
 
     <!-- Depends on FolderCapabilities.DELETE -->
     <item
         android:id="@+id/delete"
         android:title="@string/delete"
         app:showAsAction="always"
-        android:icon="@drawable/ic_delete_wht_24dp" />
+        android:icon="@drawable/ic_delete_wht_24dp"
+        android:alphabeticShortcut="@string/trigger_delete_char" />
 
     <!-- Depends on the user viewing a draft label, and the above menu item not being shown -->
     <item
@@ -48,35 +49,38 @@
         android:title="@string/discard_drafts"
         app:showAsAction="always"
         android:icon="@drawable/ic_delete_wht_24dp"
-        android:visible="false" />
+        android:visible="false"
+        android:alphabeticShortcut="@string/trigger_delete_char" />
     <!-- Depends on the user viewing a outbox label and the setting supports delete -->
     <item
         android:id="@+id/discard_outbox"
         android:title="@string/discard_failed"
         app:showAsAction="always"
         android:icon="@drawable/ic_delete_wht_24dp"
-        android:visible="false" />
+        android:visible="false"
+        android:alphabeticShortcut="@string/trigger_delete_char" />
 
     <!-- Always available -->
     <item
         android:id="@+id/inside_conversation_unread"
         android:title="@string/mark_unread"
         app:showAsAction="always"
-        android:icon="@drawable/ic_menu_mark_unread_wht_24dp" />
+        android:icon="@drawable/ic_mark_unread_wht_24dp" />
 
     <!-- Always available -->
     <item
         android:id="@+id/move_to"
         android:title="@string/menu_move_to"
-        app:showAsAction="never"
-        android:icon="@drawable/ic_menu_move_to_holo_light" />
+        app:showAsAction="@string/menu_move_to_state"
+        android:icon="@drawable/ic_move_to_wht_24dp" />
 
     <!-- Always available -->
     <item
         android:id="@+id/change_folders"
         android:title="@string/menu_change_folders"
         app:showAsAction="never"
-        android:icon="@drawable/ic_change_labels_wht_24dp" />
+        android:icon="@drawable/ic_change_labels_wht_24dp"
+        android:alphabeticShortcut="@string/trigger_change_label_char" />
 
     <item
         android:id="@+id/move_to_inbox"
@@ -101,8 +105,9 @@
         android:title="@string/mute" />
 
     <item android:id="@+id/print_all"
-          android:title="@string/print_all"
-          android:visible="false" />
+        android:title="@string/print_all"
+        android:visible="false"
+        android:alphabeticShortcut="@string/trigger_print_char" />
 
     <item
         android:id="@+id/show_original"
@@ -123,4 +128,47 @@
         android:title="@string/report_phishing"
         android:visible="false" />
 
+    <!-- These invisible menu items are used to enable keyboard shortcuts -->
+    <item
+        android:id="@+id/compose"
+        android:title="@string/menu_compose"
+        android:visible="false"
+        android:alphabeticShortcut="@string/trigger_compose_char" />
+
+    <item
+        android:id="@+id/reply"
+        android:title="@string/reply"
+        android:visible="false"
+        android:alphabeticShortcut="@string/trigger_reply_char" />
+
+    <item
+        android:id="@+id/reply_all"
+        android:title="@string/reply_all"
+        android:visible="false"
+        android:alphabeticShortcut="@string/trigger_reply_all_char" />
+
+    <item
+        android:id="@+id/toggle_read_unread"
+        android:title="@string/toggle_read_unread"
+        android:visible="false"
+        android:alphabeticShortcut="@string/trigger_toggle_read_unread_char" />
+
+    <item
+        android:id="@+id/toggle_drawer"
+        android:title="@string/menu_toggle_drawer"
+        android:visible="false"
+        android:alphabeticShortcut="@string/trigger_toggle_drawer_char" />
+
+    <item
+        android:id="@+id/settings"
+        android:title="@string/menu_settings"
+        android:visible="false"
+        android:alphabeticShortcut="@string/trigger_settings_char" />
+
+    <item
+        android:id="@+id/help_info_menu_item"
+        android:title="@string/help_and_feedback"
+        android:visible="false"
+        android:alphabeticShortcut="@string/trigger_help_char" />
+
 </menu>
diff --git a/res/menu/conversation_list_menu.xml b/res/menu/conversation_list_menu.xml
index 05568bc..3d574d6 100644
--- a/res/menu/conversation_list_menu.xml
+++ b/res/menu/conversation_list_menu.xml
@@ -23,20 +23,22 @@
     <item
         android:id="@+id/empty_trash"
         android:title="@string/empty_trash"
-        app:showAsAction="always|withText" />
+        app:showAsAction="never"
+        android:alphabeticShortcut="@string/trigger_delete_char" />
 
     <!-- Available only in the spam folder, when the account supports emptying it -->
     <item
         android:id="@+id/empty_spam"
         android:title="@string/empty_spam"
-        app:showAsAction="always|withText" />
+        app:showAsAction="never"
+        android:alphabeticShortcut="@string/trigger_delete_char" />
 
     <!-- Available only for accounts with SERVER_SEARCH and in a folder
       that supports FOLDER_SERVER_SEARCH -->
-    <item android:id="@+id/search" android:title="@string/menu_search"
+    <item android:id="@+id/search"
+        android:title="@string/menu_search"
         app:showAsAction="ifRoom|collapseActionView"
-        android:icon="@drawable/ic_menu_search"
-        app:actionLayout="@layout/mail_actionbar_searchview" />
+        android:icon="@drawable/ic_menu_search" />
 
     <!-- These invisible menu item are used to enable keyboard shortcuts -->
     <item
@@ -45,9 +47,33 @@
         android:visible="false"
         android:alphabeticShortcut="@string/trigger_compose_char" />
 
-    <item android:id="@+id/refresh"
+    <item
+        android:id="@+id/refresh"
         android:title="@string/refresh"
         android:visible="false"
         android:alphabeticShortcut="@string/trigger_refresh_char" />
 
+    <item
+        android:id="@+id/toggle_read_unread"
+        android:title="@string/toggle_read_unread"
+        android:visible="false"
+        android:alphabeticShortcut="@string/trigger_toggle_read_unread_char" />
+
+    <item
+        android:id="@+id/toggle_drawer"
+        android:title="@string/menu_toggle_drawer"
+        android:visible="false"
+        android:alphabeticShortcut="@string/trigger_toggle_drawer_char" />
+
+    <item
+        android:id="@+id/settings"
+        android:title="@string/menu_settings"
+        android:visible="false"
+        android:alphabeticShortcut="@string/trigger_settings_char" />
+
+    <item
+        android:id="@+id/help_info_menu_item"
+        android:title="@string/help_and_feedback"
+        android:visible="false"
+        android:alphabeticShortcut="@string/trigger_help_char" />
 </menu>
diff --git a/res/menu/conversation_list_search_results_actions.xml b/res/menu/conversation_list_search_results_actions.xml
index 6708c83..337f2c9 100644
--- a/res/menu/conversation_list_search_results_actions.xml
+++ b/res/menu/conversation_list_search_results_actions.xml
@@ -19,12 +19,6 @@
 <menu xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:app="http://schemas.android.com/apk/res-auto">
 
-    <item android:id="@+id/search"
-      android:title="@string/menu_search"
-      app:showAsAction="ifRoom|collapseActionView"
-      android:icon="@drawable/ic_menu_search"
-      app:actionLayout="@layout/mail_actionbar_searchview" />
-
     <!-- This invisible menu item is used to map CTRL-C to the compose action -->
     <item
         android:id="@+id/compose"
@@ -32,9 +26,28 @@
         android:visible="false"
         android:alphabeticShortcut="@string/trigger_compose_char" />
 
-    <item android:id="@+id/refresh"
+    <item
+        android:id="@+id/refresh"
         android:title="@string/refresh"
         android:visible="false"
         android:alphabeticShortcut="@string/trigger_refresh_char" />
 
+    <item
+        android:id="@+id/toggle_read_unread"
+        android:title="@string/toggle_read_unread"
+        android:visible="false"
+        android:alphabeticShortcut="@string/trigger_toggle_read_unread_char" />
+
+    <item
+        android:id="@+id/settings"
+        android:title="@string/menu_settings"
+        android:visible="false"
+        android:alphabeticShortcut="@string/trigger_settings_char" />
+
+    <item
+        android:id="@+id/help_info_menu_item"
+        android:title="@string/help_and_feedback"
+        android:visible="false"
+        android:alphabeticShortcut="@string/trigger_help_char" />
+
 </menu>
diff --git a/res/menu/conversation_list_selection_actions_menu.xml b/res/menu/conversation_list_selection_actions_menu.xml
index 1dc095f..4c7733c 100644
--- a/res/menu/conversation_list_selection_actions_menu.xml
+++ b/res/menu/conversation_list_selection_actions_menu.xml
@@ -24,15 +24,13 @@
         android:id="@+id/archive"
         android:title="@string/archive"
         app:showAsAction="always"
-        android:icon="@drawable/ic_archive_wht_24dp"
-        android:alphabeticShortcut="@string/trigger_y_char"/>
+        android:icon="@drawable/ic_archive_wht_24dp" />
 
     <item
         android:id="@+id/remove_folder"
         android:title="@string/remove_folder"
         app:showAsAction="always"
         android:icon="@drawable/ic_remove_label_wht_24dp"
-        android:alphabeticShortcut="@string/trigger_y_char"
         android:visible="false" />
 
     <!-- Depends on FolderCapabilities.DELETE -->
@@ -40,7 +38,7 @@
         android:id="@+id/delete"
         android:title="@string/delete"
         app:showAsAction="always"
-        android:icon="@drawable/ic_delete_wht_24dp"/>
+        android:icon="@drawable/ic_delete_wht_24dp" />
 
     <!-- Depends on the user viewing a draft label, and the above menu item not being shown -->
     <item
@@ -53,7 +51,7 @@
     <item
         android:id="@+id/discard_outbox"
         android:title="@string/discard_failed"
-        android:showAsAction="always"
+        app:showAsAction="always"
         android:icon="@drawable/ic_delete_wht_24dp"
         android:visible="false" />
 
@@ -62,19 +60,19 @@
         android:id="@+id/read"
         android:title="@string/mark_read"
         app:showAsAction="always"
-        android:icon="@drawable/ic_menu_mark_read_wht_24dp" />
+        android:icon="@drawable/ic_mark_read_wht_24dp" />
 
     <item
         android:id="@+id/unread"
         android:title="@string/mark_unread"
         app:showAsAction="always"
-        android:icon="@drawable/ic_menu_mark_unread_wht_24dp" />
+        android:icon="@drawable/ic_mark_unread_wht_24dp" />
 
     <item
         android:id="@+id/move_to"
         android:title="@string/menu_move_to"
         app:showAsAction="never"
-        android:icon="@drawable/ic_menu_move_to_holo_light" />
+        android:icon="@drawable/ic_move_to_wht_24dp" />
 
     <item
         android:id="@+id/change_folders"
@@ -90,7 +88,7 @@
 
     <item android:id="@+id/star"
         android:title="@string/add_star"
-        android:showAsAction="never" />
+        app:showAsAction="never" />
 
     <item android:id="@+id/remove_star"
         android:title="@string/remove_star"
diff --git a/res/menu/eml_fragment_menu.xml b/res/menu/eml_fragment_menu.xml
index 11624f0..3efcf07 100644
--- a/res/menu/eml_fragment_menu.xml
+++ b/res/menu/eml_fragment_menu.xml
@@ -18,7 +18,7 @@
 
 <menu xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:id="@+id/print_message"
-          android:title="@string/print"
-          android:showAsAction="never" />
-
+        android:title="@string/print"
+        android:showAsAction="never"
+        android:alphabeticShortcut="@string/trigger_print_char" />
 </menu>
\ No newline at end of file
diff --git a/res/menu/general_prefs_fragment_menu.xml b/res/menu/general_prefs_fragment_menu.xml
index 030c765..5b2e9d9 100644
--- a/res/menu/general_prefs_fragment_menu.xml
+++ b/res/menu/general_prefs_fragment_menu.xml
@@ -30,7 +30,8 @@
     <item
         android:id="@+id/help_info_menu_item"
         android:icon="@android:drawable/ic_menu_help"
-        android:title="@string/help_and_feedback"/>
+        android:title="@string/help_and_feedback"
+        android:alphabeticShortcut="@string/trigger_help_char" />
 
     <!-- TODO add help menu item, once help support has been moved to UnifiedEmail -->
 </menu>
diff --git a/res/menu/help_menu.xml b/res/menu/help_menu.xml
index d7d1d29..9994e47 100644
--- a/res/menu/help_menu.xml
+++ b/res/menu/help_menu.xml
@@ -21,7 +21,8 @@
           android:showAsAction="never"/>
     <item android:id="@+id/print_dialog"
           android:title="@string/print_dialog"
-          android:showAsAction="never"/>
+          android:showAsAction="never"
+          android:alphabeticShortcut="@string/trigger_print_char" />
     <item android:id="@+id/copyright_information"
           android:title="@string/copyright_information"
           android:showAsAction="never"/>
diff --git a/res/menu/message_header_overflow_menu.xml b/res/menu/message_header_overflow_menu.xml
index 5c5f233..788ac2a 100644
--- a/res/menu/message_header_overflow_menu.xml
+++ b/res/menu/message_header_overflow_menu.xml
@@ -23,6 +23,10 @@
           android:title="@string/reply_all" />
     <item android:id="@+id/forward"
           android:title="@string/forward" />
+    <item android:id="@+id/add_star"
+          android:title="@string/add_star" />
+    <item android:id="@+id/remove_star"
+          android:title="@string/remove_star" />
     <item android:id="@+id/print_message"
           android:title="@string/print" />
     <item android:id="@+id/report_rendering_problem"
diff --git a/res/menu/message_header_overflow_menu_land_or_tablet_v19.xml b/res/menu/message_header_overflow_menu_land_or_tablet.xml
similarity index 87%
rename from res/menu/message_header_overflow_menu_land_or_tablet_v19.xml
rename to res/menu/message_header_overflow_menu_land_or_tablet.xml
index d48dbb5..8f7f1ba 100644
--- a/res/menu/message_header_overflow_menu_land_or_tablet_v19.xml
+++ b/res/menu/message_header_overflow_menu_land_or_tablet.xml
@@ -21,6 +21,10 @@
           android:title="@string/reply" />
     <item android:id="@+id/reply_all"
           android:title="@string/reply_all" />
+    <item android:id="@+id/add_star"
+          android:title="@string/add_star" />
+    <item android:id="@+id/remove_star"
+          android:title="@string/remove_star" />
     <item android:id="@+id/print_message"
           android:title="@string/print" />
     <item android:id="@+id/report_rendering_problem"
diff --git a/res/menu/photo_view_menu.xml b/res/menu/photo_view_menu.xml
index 3969575..9d15daa 100644
--- a/res/menu/photo_view_menu.xml
+++ b/res/menu/photo_view_menu.xml
@@ -21,7 +21,8 @@
         <item
             android:id="@+id/menu_save"
             android:showAsAction="never"
-            android:title="@string/save_attachment"/>
+            android:title="@string/save_attachment"
+            android:alphabeticShortcut="@string/trigger_save_char" />
         <item
             android:id="@+id/menu_save_all"
             android:showAsAction="never"
@@ -41,7 +42,8 @@
         <item
             android:id="@+id/menu_print"
             android:showAsAction="never"
-            android:title="@string/menu_photo_print"/>
+            android:title="@string/menu_photo_print"
+            android:alphabeticShortcut="@string/trigger_print_char" />
         <item
             android:id="@+id/menu_download_again"
             android:showAsAction="never"
diff --git a/res/menu/vacation_responder_menu.xml b/res/menu/vacation_responder_menu.xml
index 829b4b1..7bb3609 100644
--- a/res/menu/vacation_responder_menu.xml
+++ b/res/menu/vacation_responder_menu.xml
@@ -14,15 +14,14 @@
      limitations under the License.
 -->
 
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+      xmlns:app="http://schemas.android.com/apk/res-auto">
     <item android:id="@+id/action_cancel"
-          android:alphabeticShortcut="c"
           android:title="@string/cancel"
-          android:icon="@drawable/ic_cancel_holo_light"
-          android:showAsAction="withText|always" />
+          android:icon="@drawable/ic_close_wht_24dp"
+          app:showAsAction="withText|always" />
     <item android:id="@+id/action_done"
-          android:alphabeticShortcut="d"
           android:title="@string/done"
-          android:icon="@drawable/ic_menu_done_holo_light"
-          android:showAsAction="withText|always" />
-</menu>
\ No newline at end of file
+          android:icon="@drawable/ic_check_wht_24dp"
+          app:showAsAction="withText|always" />
+</menu>
diff --git a/res/menu/wait_mode_actions.xml b/res/menu/wait_mode_actions.xml
index 65314ab..75a8ed1 100644
--- a/res/menu/wait_mode_actions.xml
+++ b/res/menu/wait_mode_actions.xml
@@ -23,4 +23,21 @@
         android:visible="false"
         android:alphabeticShortcut="@string/trigger_refresh_char" />
 
+    <item
+        android:id="@+id/toggle_drawer"
+        android:title="@string/menu_toggle_drawer"
+        android:visible="false"
+        android:alphabeticShortcut="@string/trigger_toggle_drawer_char" />
+
+    <item
+        android:id="@+id/settings"
+        android:title="@string/menu_settings"
+        android:visible="false"
+        android:alphabeticShortcut="@string/trigger_settings_char" />
+
+    <item
+        android:id="@+id/help_info_menu_item"
+        android:title="@string/help_and_feedback"
+        android:visible="false"
+        android:alphabeticShortcut="@string/trigger_help_char" />
 </menu>
diff --git a/res/mipmap-hdpi/ic_launcher_mail.png b/res/mipmap-hdpi/ic_launcher_mail.png
new file mode 100644
index 0000000..d60d87d
--- /dev/null
+++ b/res/mipmap-hdpi/ic_launcher_mail.png
Binary files differ
diff --git a/res/mipmap-hdpi/ic_launcher_shortcut_folder.png b/res/mipmap-hdpi/ic_launcher_shortcut_folder.png
index 96eddb3..eb3a333 100644
--- a/res/mipmap-hdpi/ic_launcher_shortcut_folder.png
+++ b/res/mipmap-hdpi/ic_launcher_shortcut_folder.png
Binary files differ
diff --git a/res/mipmap-mdpi/ic_launcher_mail.png b/res/mipmap-mdpi/ic_launcher_mail.png
new file mode 100644
index 0000000..8c128e5
--- /dev/null
+++ b/res/mipmap-mdpi/ic_launcher_mail.png
Binary files differ
diff --git a/res/mipmap-mdpi/ic_launcher_shortcut_folder.png b/res/mipmap-mdpi/ic_launcher_shortcut_folder.png
index eb8653d..b1a5409 100644
--- a/res/mipmap-mdpi/ic_launcher_shortcut_folder.png
+++ b/res/mipmap-mdpi/ic_launcher_shortcut_folder.png
Binary files differ
diff --git a/res/mipmap-xhdpi/ic_launcher_mail.png b/res/mipmap-xhdpi/ic_launcher_mail.png
index 6e1c194..0776820 100644
--- a/res/mipmap-xhdpi/ic_launcher_mail.png
+++ b/res/mipmap-xhdpi/ic_launcher_mail.png
Binary files differ
diff --git a/res/mipmap-xhdpi/ic_launcher_shortcut_folder.png b/res/mipmap-xhdpi/ic_launcher_shortcut_folder.png
index 00ed48d..58acbc3 100644
--- a/res/mipmap-xhdpi/ic_launcher_shortcut_folder.png
+++ b/res/mipmap-xhdpi/ic_launcher_shortcut_folder.png
Binary files differ
diff --git a/res/mipmap-xxhdpi/ic_launcher_mail.png b/res/mipmap-xxhdpi/ic_launcher_mail.png
new file mode 100644
index 0000000..e82510b
--- /dev/null
+++ b/res/mipmap-xxhdpi/ic_launcher_mail.png
Binary files differ
diff --git a/res/mipmap-xxhdpi/ic_launcher_shortcut_folder.png b/res/mipmap-xxhdpi/ic_launcher_shortcut_folder.png
new file mode 100644
index 0000000..ebe0099
--- /dev/null
+++ b/res/mipmap-xxhdpi/ic_launcher_shortcut_folder.png
Binary files differ
diff --git a/res/mipmap-xxxhdpi/ic_launcher_mail.png b/res/mipmap-xxxhdpi/ic_launcher_mail.png
new file mode 100644
index 0000000..0aa63e2
--- /dev/null
+++ b/res/mipmap-xxxhdpi/ic_launcher_mail.png
Binary files differ
diff --git a/res/mipmap-xxxhdpi/ic_launcher_shortcut_folder.png b/res/mipmap-xxxhdpi/ic_launcher_shortcut_folder.png
new file mode 100644
index 0000000..b44e695
--- /dev/null
+++ b/res/mipmap-xxxhdpi/ic_launcher_shortcut_folder.png
Binary files differ
diff --git a/res/raw/template_conversation_lower.html b/res/raw/template_conversation_lower.html
index d4b59fc..4e76f34 100644
--- a/res/raw/template_conversation_lower.html
+++ b/res/raw/template_conversation_lower.html
@@ -13,6 +13,7 @@
   var ENABLE_MUNGE_TABLES = %s;
   var ENABLE_MUNGE_IMAGES = %s;
   var RUNNING_KITKAT_OR_LATER = %s;
+  var MSG_FORMS_ARE_DISABLED = '%s';
 </script>
 <script type="text/javascript" src="file:///android_asset/script.js"></script>
 </html>
diff --git a/res/raw/template_conversation_upper.html b/res/raw/template_conversation_upper.html
index 5966596..c3354aa 100644
--- a/res/raw/template_conversation_upper.html
+++ b/res/raw/template_conversation_upper.html
@@ -9,9 +9,9 @@
         color: purple;
     }
     .mail-elided-text {
-        color: #666;
-        font: bold 11px sans-serif;
-        margin: 12px 0 6px;
+        color: #4285f4;
+        font: 12px sans-serif;
+        padding: 24px 0;
     }
     .mail-message-content {
     }
diff --git a/res/values-af-sw600dp/strings.xml b/res/values-af-sw600dp/strings.xml
index 465a830..7f06fd9 100644
--- a/res/values-af-sw600dp/strings.xml
+++ b/res/values-af-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Cc/Bcc"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Bcc"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Bestuur vouers"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Gebruik as verstek vir antwoorde op boodskapkennisgewings"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ Cc/Bcc"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ Bcc"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Bestuur vouers"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Gebruik as verstek vir antwoorde op boodskapkennisgewings"</string>
 </resources>
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 57a36ef..3ce96a9 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Vouer-ikoon"</string>
     <string name="add_account" msgid="5905863370226612377">"Voeg rekening by"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Maak wenk toe"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Outo-sinkronisering is af."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Raak om aan te skakel."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Rekeningsinkronisering is af."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Skakel aan in <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Rekeninginstellings"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> ongestuur in <xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Skakel outo-sinkroniseer aan?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Veranderinge wat jy aan alle programme en rekeninge maak, nie net in Gmail nie, sal tussen die web, jou ander toestelle en jou <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g> gesinkroniseer word."</string>
diff --git a/res/values-am-sw600dp/strings.xml b/res/values-am-sw600dp/strings.xml
index 6e3ccd4..d0216b2 100644
--- a/res/values-am-sw600dp/strings.xml
+++ b/res/values-am-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ ካርቦን ቅጂ/ስውር ቅጂ"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ ስውር ቅጂ"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"አቃፊዎችን አስተዳድር"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"ለመልዕክት ማሳወቂያዎች ምላሾች እንደ ነባሪ ይጠቀሙ"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ ካርቦን ቅጂ/ስውር ቅጂ"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ ስውር ቅጂ"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"አቃፊዎችን አስተዳድር"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"ለመልዕክት ማሳወቂያዎች ምላሾች እንደ ነባሪ ይጠቀሙ"</string>
 </resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 1326b91..4489622 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"የአቃፊ አዶ"</string>
     <string name="add_account" msgid="5905863370226612377">"መለያ ያክሉ"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"ጠቃሚ ምክሩን ያሰናብቱ"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"ራስ-አመሳስል ጠፍቷል።"</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"ለማብራት ይንኩ።"</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"የመለያ ማመሳሰል ጠፍቷል።"</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"በ<xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g> ውስጥ አብራ።"</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"የመለያ ቅንብሮች"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> ያልተላከ በ<xliff:g id="OUTBOX">%2$s</xliff:g> ውስጥ"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"ራስ-አመሳስል ይብራ?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"በGmail ላይ ብቻ ሳይሆን በሁሉም መተግበሪያዎች እና መለያዎች ላይ የሚያደርጓቸው ለውጦች በድር፣ ሌሎች የእርስዎ መሣሪያዎች እና በእርስዎ <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g> መካከል ይመሳሰላሉ።"</string>
diff --git a/res/values-ar-sw600dp/strings.xml b/res/values-ar-sw600dp/strings.xml
index dd9d22b..de37bbd 100644
--- a/res/values-ar-sw600dp/strings.xml
+++ b/res/values-ar-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ نسخة إلى/ مخفية"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ نسخة مخفية الوجهة"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"إدارة المجلدات"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"الاستخدام كافتراضي مع الردود على إشعارات الرسائل"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ نسخة إلى/ مخفية"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ نسخة مخفية الوجهة"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"إدارة المجلدات"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"الاستخدام كافتراضي مع الردود على إشعارات الرسائل"</string>
 </resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 8a8a66c..e674100 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"رمز المجلد"</string>
     <string name="add_account" msgid="5905863370226612377">"إضافة حساب"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"تجاهل النصيحة"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"المزامنة التلقائية متوقفة."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"المس للتشغيل."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"مزامنة الحساب متوقفة."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"تشغيل في <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"إعدادات الحساب"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> من الرسائل التي لم يتم إرسالها في <xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"تشغيل المزامنة التلقائية؟"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"‏ستتم مزامنة التغييرات التي تجريها على جميع التطبيقات والحسابات، وليس Gmail فقط، بين الويب والأجهزة الأخرى و<xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>."</string>
diff --git a/res/values-bg-sw600dp/strings.xml b/res/values-bg-sw600dp/strings.xml
index 2461df8..8cc9a41 100644
--- a/res/values-bg-sw600dp/strings.xml
+++ b/res/values-bg-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Як/Ск"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Ск"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Управление на папките"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Използване като стандартна опция за отговори на известия за съобщения"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ Як/Ск"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ Ск"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Управление на папките"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Използване като стандартна опция за отговори на известия за съобщения"</string>
 </resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 5aed6b0..5a25797 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Икона на папката"</string>
     <string name="add_account" msgid="5905863370226612377">"Добавяне на профил"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Отхвърляне на съвета"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Автоматичното синхронизиране е изключено."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Докоснете, за да включите."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Синхронизирането на профила е изключено."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Включете от <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Настройки на профила"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> неизпратени от <xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Да се включи ли автоматичното синхронизиране?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Промените, които правите във всички приложения и профили, а не само в Gmail, ще се синхронизират между мрежата, другите ви устройства и <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g> ви."</string>
diff --git a/res/values-bn-rBD-sw600dp/strings.xml b/res/values-bn-rBD-sw600dp/strings.xml
deleted file mode 100644
index 563fc86..0000000
--- a/res/values-bn-rBD-sw600dp/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-     Copyright (C) 2012 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Cc/Bcc"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Bcc"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"ফোল্ডারগুলি পরিচালনা করুন"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"বার্তা বিজ্ঞপ্তিগুলিতে উত্তরগুলির জন্য ডিফল্ট হিসাবে ব্যবহার করুন"</string>
-</resources>
diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml
deleted file mode 100644
index 044553b..0000000
--- a/res/values-bn-rBD/strings.xml
+++ /dev/null
@@ -1,483 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-     Copyright (C) 2011 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="from" msgid="5159056500059912358">"প্রেরক"</string>
-    <string name="to" msgid="3971614275716830581">"প্রতি"</string>
-    <string name="cc" msgid="8768828862207919684">"Cc"</string>
-    <string name="bcc" msgid="519303553518479171">"Bcc"</string>
-    <string name="subject_hint" msgid="2136470287303571827">"বিষয়"</string>
-    <string name="body_hint" msgid="6478994981747057817">"ইমেল লিখুন"</string>
-    <string name="add_file_attachment" msgid="2604880054248593993">"ফাইল সংযুক্ত করুন"</string>
-    <string name="add_photo_attachment" msgid="7163589794940909528">"ছবি সংযুক্ত করুন"</string>
-    <string name="save_draft" msgid="2669523480789672118">"খসড়া সংরক্ষণ করুন"</string>
-    <string name="discard" msgid="4905982179911608430">"পরিত্যাগ করুন"</string>
-    <string name="compose" msgid="2602861958391035523">"লিখুন"</string>
-  <string-array name="compose_modes">
-    <item msgid="9000553538766397816">"উত্তর দিন"</item>
-    <item msgid="2767793214788399009">"সকলকে উত্তর দিন"</item>
-    <item msgid="2758162027982270607">"ফরোয়ার্ড"</item>
-  </string-array>
-    <string name="reply_attribution" msgid="1114972798797833259">"<xliff:g id="DATE">%s</xliff:g> এ, <xliff:g id="PERSON">%s</xliff:g> লিখেছেন:"</string>
-    <string name="forward_attribution" msgid="597850048345475752">"---------- ফরোয়ার্ড করা বার্তা ----------&lt;br&gt;থেকে: <xliff:g id="FROM">%1$s</xliff:g>&lt;br&gt;তারিখ: <xliff:g id="DATE">%2$s</xliff:g>&lt;br&gt;বিষয়: <xliff:g id="SUBJECT">%3$s</xliff:g>&lt;br&gt;প্রতি: <xliff:g id="TO">%4$s</xliff:g>&lt;br&gt;"</string>
-    <string name="forward_attribution_no_headers" msgid="1828826576779486239">"---------- ফরোয়ার্ড করা বার্তা ----------"</string>
-    <string name="cc_attribution" msgid="2928584226469388899">"Cc: <xliff:g id="CC">%1$s</xliff:g>&lt;br&gt;"</string>
-    <string name="select_attachment_type" msgid="353236686616663062">"সংযুক্তির প্রকার চয়ন করুন"</string>
-    <string name="too_large_to_attach_single" msgid="2669897137966512530">"<xliff:g id="MAXSIZE">%1$s</xliff:g> এর বেশি ফাইল সংযুক্ত করা যাবে না।"</string>
-    <string name="too_large_to_attach_multiple" msgid="1620163295709036343">"একটি বা তার বেশি ফাইল সংযুক্ত হয়নি। সীমা <xliff:g id="MAXSIZE">%1$s</xliff:g>।"</string>
-    <string name="too_large_to_attach_additional" msgid="4964155563465970480">"ফাইল সংযুক্ত হয়নি। <xliff:g id="MAXSIZE">%1$s</xliff:g> সীমাতে পৌঁছেছে।"</string>
-    <string name="generic_attachment_problem" msgid="4683974765387240723">"ফাইল সংযুক্ত করা যায়নি।"</string>
-    <string name="recipient_needed" msgid="319816879398937214">"কমপক্ষে একজন প্রাপককে জুড়ুন।"</string>
-    <string name="recipient_error_dialog_title" msgid="760741480291963706">"প্রাপক ত্রুটি"</string>
-    <string name="confirm_send_title" msgid="4664971589247101530">"বার্তা পাঠাবেন?"</string>
-    <string name="confirm_send_message_with_no_subject" msgid="1442628074022609987">"বার্তার বিষয়ে কোনো পাঠ্য নেই।"</string>
-    <string name="confirm_send_message_with_no_body" msgid="3329355318700201516">"বার্তার মূল অংশে কোনো পাঠ্য নেই।"</string>
-    <string name="confirm_send_message" msgid="6211518590166222735">"এই বার্তাটি পাঠাবেন?"</string>
-    <string name="message_discarded" msgid="6792661321962262024">"বার্তা পরিত্যাগ করা হয়েছে।"</string>
-    <string name="signature" msgid="3172144541947408374">\n\n"<xliff:g id="SIGNATURE">%s</xliff:g>"</string>
-    <string name="custom_from_account_label" msgid="5042317430007736322">"এই রূপে মেল পাঠান:"</string>
-    <string name="send" msgid="4269810089682120826">"পাঠান"</string>
-    <string name="mark_read" msgid="579388143288052493">"পঠিত বলে চিহ্নিত করুন"</string>
-    <string name="mark_unread" msgid="6245060538061533191">"অপঠিত হিসাবে চিহ্নিত করুন"</string>
-    <string name="mute" msgid="9164839998562321569">"নিঃশব্দ করুন"</string>
-    <string name="add_star" msgid="3275117671153616270">"তারা জুড়ুন"</string>
-    <string name="remove_star" msgid="9126690774161840733">"তারা চিহ্ন সরান"</string>
-    <string name="remove_folder" msgid="2379905457788576297">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> থেকে সরান"</string>
-    <string name="archive" msgid="5978663590021719939">"সংরক্ষণ করুন"</string>
-    <string name="report_spam" msgid="4106897677959987340">"স্প্যাম প্রতিবেদন করুন"</string>
-    <string name="mark_not_spam" msgid="8617774236231366651">"স্প্যাম নয় রূপে প্রতিবেদন করুন"</string>
-    <string name="report_phishing" msgid="8454666464488413739">"ফিশিং প্রতিবেদন করুন"</string>
-    <string name="delete" msgid="6784262386780496958">"মুছুন"</string>
-    <string name="discard_drafts" msgid="5881484193628472105">"খসড়াগুলি পরিত্যাগ করুন"</string>
-    <string name="discard_failed" msgid="7520780769812210279">"পরিত্যাগ করা ব্যর্থ হয়েছে"</string>
-    <string name="refresh" msgid="1533748989749277511">"রিফ্রেশ"</string>
-    <string name="reply" msgid="8337757482824207118">"উত্তর দিন"</string>
-    <string name="reply_all" msgid="5366796103758360957">"সকলকে উত্তর দিন"</string>
-    <string name="resume_draft" msgid="1272723181782570649">"সম্পাদনা করুন"</string>
-    <string name="forward" msgid="4397585145490426320">"ফরোয়ার্ড করুন"</string>
-    <string name="menu_compose" msgid="4575025207594709432">"লিখুন"</string>
-    <string name="menu_change_folders" msgid="2194946192901276625">"ফোল্ডারগুলি পরিবর্তন করুন"</string>
-    <string name="menu_move_to" msgid="7948877550284452830">"এতে সরান"</string>
-    <string name="menu_move_to_inbox" msgid="258554178236001444">"ইনবক্সে সরান"</string>
-    <string name="menu_manage_folders" msgid="8486398523679534519">"ফোল্ডার সেটিংস"</string>
-    <string name="menu_show_original" msgid="2330398228979616661">"স্বয়ং-আকারবদল ফেরান"</string>
-    <string name="menu_settings" msgid="7993485401501778040">"সেটিংস"</string>
-    <string name="menu_search" msgid="1949652467806052768">"অনুসন্ধান করুন"</string>
-    <string name="drawer_title" msgid="3766219846644975778">"নেভিগেশন"</string>
-    <string name="mark_important" msgid="8781680450177768820">"গুরুত্বপূর্ণ রূপে চিহ্নিত করুন"</string>
-    <string name="mark_not_important" msgid="3342258155408116917">"গুরুত্বপূর্ণ নয় বলে চিহ্নিত করুন"</string>
-    <string name="add_cc_label" msgid="2249679001141195213">"Cc/Bcc জুড়ুন"</string>
-    <string name="add_bcc_label" msgid="963745641238037813">"Bcc জুড়ুন"</string>
-    <string name="quoted_text" msgid="977782904293216533">"উদ্ধৃত পাঠ্যকে অন্তর্ভুক্ত করুন"</string>
-    <string name="quoted_text_label" msgid="2296807722849923934">"উদ্ধৃতি পাঠ্য"</string>
-    <string name="respond_inline" msgid="6609746292081928078">"ইনলাইন প্রতিক্রিয়া দিন"</string>
-    <string name="bytes" msgid="651011686747499628">"<xliff:g id="COUNT">%s</xliff:g> B"</string>
-    <string name="kilobytes" msgid="1523463964465770347">"<xliff:g id="COUNT">%s</xliff:g> KB"</string>
-    <string name="megabytes" msgid="4309397368708773323">"<xliff:g id="COUNT">%s</xliff:g> MB"</string>
-    <string name="attachment_image" msgid="6375306026208274564">"চিত্র"</string>
-    <string name="attachment_video" msgid="7119476472603939848">"ভিডিও"</string>
-    <string name="attachment_audio" msgid="7097658089301809284">"অডিও"</string>
-    <string name="attachment_text" msgid="3485853714965922173">"পাঠ্য"</string>
-    <string name="attachment_application_msword" msgid="2110108876623152162">"দস্তাবেজ"</string>
-    <string name="attachment_application_vnd_ms_powerpoint" msgid="425353008963359230">"উপস্থাপনা"</string>
-    <string name="attachment_application_vnd_ms_excel" msgid="5585781311136609103">"স্প্রেডশীট"</string>
-    <string name="attachment_application_pdf" msgid="4207340200944655970">"PDF"</string>
-    <string name="attachment_unknown" msgid="3360536730101083926">"<xliff:g id="ATTACHMENTEXTENSION">%s</xliff:g> ফাইল"</string>
-    <string name="preview_attachment" msgid="6265457626086113833">"পূর্বরূপ"</string>
-    <string name="save_attachment" msgid="375685179032130033">"সংরক্ষণ করুন"</string>
-    <string name="cancel_attachment" msgid="6900093625792891122">"বাতিল করুন"</string>
-    <string name="open_attachment" msgid="6100396056314739761">"খুলুন"</string>
-    <string name="install_attachment" msgid="8119470822958087928">"ইনস্টল করুন"</string>
-    <string name="download_again" msgid="8195787340878328119">"আবার ডাউনলোড করুন"</string>
-    <string name="more_info_attachment" msgid="2899691682394864507">"তথ্য"</string>
-    <string name="no_application_found" msgid="7309485680354949680">"কোনো অ্যাপ্লিকেশনই এই সংযুক্তিটিকে দেখার জন্য খুলতে পারছে না।"</string>
-    <string name="fetching_attachment" msgid="2286628490159574159">"সংযুক্তি আনা হচ্ছে"</string>
-    <string name="please_wait" msgid="3953824147776128899">"দয়া করে অপেক্ষা করুন..."</string>
-    <string name="saved" msgid="161536102236967534">"সংরক্ষণ হয়েছে, <xliff:g id="SIZE">%s</xliff:g>"</string>
-    <string name="download_failed" msgid="3878373998269062395">"ডাউনলোড করা যায়নি। পুনঃচেষ্টা করতে স্পর্শ করুন।"</string>
-    <string name="menu_photo_save_all" msgid="2742869476474613396">"সবকিছু সংরক্ষণ করুন"</string>
-    <string name="menu_photo_share" msgid="6410980274832639330">"ভাগ করুন"</string>
-    <string name="menu_photo_share_all" msgid="3049053252719665320">"সমস্ত ভাগ করুন"</string>
-    <string name="menu_photo_print" msgid="3084679038179342333">"মুদ্রণ"</string>
-    <string name="saving" msgid="6274238733828387433">"সংরক্ষণ হচ্ছে..."</string>
-    <string name="choosertitle_sharevia" msgid="3539537264873337959">"এর মাধ্যমে ভাগ করুন"</string>
-    <string name="contextmenu_openlink" msgid="6952228183947135362">"ব্রাউজারে খুলুন"</string>
-    <string name="contextmenu_copy" msgid="2584243784216385180">"অনুলিপি করুন"</string>
-    <string name="contextmenu_copylink" msgid="8659897702269320063">"লিঙ্ক URL অনুলিপি করুন"</string>
-    <string name="contextmenu_view_image" msgid="1031172763893491000">"চিত্র দেখুন"</string>
-    <string name="contextmenu_dial_dot" msgid="8881095692316726628">"ডায়াল করুন..."</string>
-    <string name="contextmenu_sms_dot" msgid="5319737001771622657">"SMS…"</string>
-    <string name="contextmenu_add_contact" msgid="2310064151427072475">"পরিচিতি জুড়ুন"</string>
-    <string name="contextmenu_send_mail" msgid="3834654593200105396">"ইমেল পাঠান"</string>
-    <string name="contextmenu_map" msgid="5118951927399465521">"মানচিত্র"</string>
-    <string name="contextmenu_sharelink" msgid="8670940060477758709">"লিঙ্ক ভাগ করুন"</string>
-    <string name="contextmenu_help" msgid="4209674157707873384">"সহায়তা"</string>
-    <string name="contextmenu_feedback" msgid="8319100902136337085">"প্রতিক্রিয়া পাঠান"</string>
-    <!-- no translation found for num_selected (7990204488812654380) -->
-    <skip />
-  <plurals name="move_conversation">
-    <item quantity="one" msgid="237882018518207244">"কথোপকথন সরান"</item>
-    <item quantity="other" msgid="6639576653114141743">"<xliff:g id="ID_1">%1$d</xliff:g>টি কথোপকথন সরান"</item>
-  </plurals>
-    <string name="content_description" msgid="854320355052962069">"<xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g> <xliff:g id="SUBJECT">%3$s</xliff:g> সম্পর্কে, <xliff:g id="SNIPPET">%4$s</xliff:g> <xliff:g id="DATE">%5$s</xliff:g> এ, <xliff:g id="READSTATE">%6$s</xliff:g>"</string>
-    <string name="content_description_today" msgid="1634422834354116955">"<xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g> <xliff:g id="SUBJECT">%3$s</xliff:g> সম্পর্কে, <xliff:g id="SNIPPET">%4$s</xliff:g> <xliff:g id="TIME">%5$s</xliff:g> এ, <xliff:g id="READSTATE">%6$s</xliff:g>"</string>
-    <string name="read_string" msgid="5495929677508576520">"কথোপকথন পঠন"</string>
-    <string name="unread_string" msgid="7342558841698083381">"কথোপকথন পড়া হয়নি"</string>
-    <string name="filtered_tag" msgid="721666921386074505">"[<xliff:g id="TAG">%1$s</xliff:g>]<xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="badge_and_subject" msgid="3979372269373936750">"<xliff:g id="ID_1">%1$s</xliff:g> <xliff:g id="ID_2">%2$s</xliff:g>"</string>
-  <plurals name="draft">
-    <item quantity="one" msgid="6717535677167943402">"খসড়া"</item>
-    <item quantity="other" msgid="1335781147509740039">"খসড়াগুলি"</item>
-  </plurals>
-    <string name="sending" msgid="5600034886763930499">"পাঠানো হচ্ছে..."</string>
-    <string name="message_retrying" msgid="5335188121407261331">"পুনরায় চেষ্টা করা হচ্ছে..."</string>
-    <string name="message_failed" msgid="7887650587384601790">"ব্যর্থ"</string>
-    <string name="send_failed" msgid="2186285547449865010">"বার্তা পাঠানো যায়নি।"</string>
-    <string name="me_object_pronoun" msgid="4674452244417913816">"আমি"</string>
-    <string name="me_subject_pronoun" msgid="7479328865714008288">"আমি"</string>
-  <plurals name="confirm_delete_conversation">
-    <item quantity="one" msgid="7605755011865575440">"এই কথোপকথনটি মুছবেন?"</item>
-    <item quantity="other" msgid="1585660381208712562">"এই <xliff:g id="COUNT">%1$d</xliff:g>টি কথোপকথন মুছবেন?"</item>
-  </plurals>
-  <plurals name="confirm_archive_conversation">
-    <item quantity="one" msgid="9105551557653306945">"এই কথোপকথনটি সংরক্ষণাগারভুক্ত করবেন?"</item>
-    <item quantity="other" msgid="2001972798185641108">"এই <xliff:g id="COUNT">%1$d</xliff:g>টি কথোপকথন সংরক্ষণাগারভুক্ত করবেন?"</item>
-  </plurals>
-  <plurals name="confirm_discard_drafts_conversation">
-    <item quantity="one" msgid="2030421499893210789">"এই বার্তাটি পরিত্যাগ করবেন?"</item>
-    <item quantity="other" msgid="782234447471532005">"এই <xliff:g id="COUNT">%1$d</xliff:g>টি বার্তা পরিত্যাগ করবেন?"</item>
-  </plurals>
-    <string name="confirm_discard_text" msgid="5172680524418848519">"এই বার্তাটি পরিত্যাগ করবেন?"</string>
-    <string name="loading_conversations" msgid="7255732786298655246">"লোড হচ্ছে..."</string>
-    <string name="empty_inbox" msgid="5901734942362315228">"আপনি সমস্ত মেল পড়ে ফেলেছেন! এখন আপনার দিনটি উপভোগ করুন।"</string>
-    <string name="empty_search" msgid="8564899353449880818">"ওহো! আমরা \"<xliff:g id="SEARCH_QUERY">%1$s</xliff:g>\" এর জন্য কিছু খুঁজে পাইনি।"</string>
-    <string name="empty_spam_folder" msgid="3288985543286122800">"কি আনন্দ, এখানে কোনো স্প্যাম নেই!"</string>
-    <string name="empty_trash_folder" msgid="378119063015945020">"এখানে কোনো ট্র্যাশ নেই। রিসাইকেল করার জন্য ধন্যবাদ!"</string>
-    <string name="empty_folder" msgid="3227552635613553855">"এখানে কোনো মেল ​​নেই।"</string>
-    <string name="getting_messages" msgid="8403333791332403244">"আপনার বার্তাগুলি প্রাপ্ত করা হচ্ছে"</string>
-    <string name="undo" msgid="8256285267701059609">"পূর্বাবস্থায় ফিরুন"</string>
-  <plurals name="conversation_unstarred">
-    <item quantity="one" msgid="839233699150563831">"<xliff:g id="COUNT">%1$d</xliff:g>টি কথোপকথন তারকা চিহ্নমুক্ত হচ্ছে।"</item>
-    <item quantity="other" msgid="7677305734833709789">"<xliff:g id="COUNT">%1$d</xliff:g>টি কথোপকথন তারকা চিহ্নমুক্ত হচ্ছে।"</item>
-  </plurals>
-  <plurals name="conversation_muted">
-    <item quantity="one" msgid="3339638225564408438">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;টি নিঃশব্দ করা হয়েছে।"</item>
-    <item quantity="other" msgid="4276111931404654219">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;টি নিঃশব্দ করা হয়েছে।"</item>
-  </plurals>
-  <plurals name="conversation_spammed">
-    <item quantity="one" msgid="6986172030710967687">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;টি স্প্যাম হিসাবে প্রতিবেদন করা হয়েছে।"</item>
-    <item quantity="other" msgid="5900913789259199137">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;টি স্প্যাম হিসাবে প্রতিবেদন করা হয়েছে।"</item>
-  </plurals>
-  <plurals name="conversation_not_spam">
-    <item quantity="one" msgid="2294904093653094150">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;টি স্প্যাম নয় হিসাবে প্রতিবেদন করা হয়েছে।"</item>
-    <item quantity="other" msgid="4966164423991098144">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;টি স্প্যাম নয় হিসাবে প্রতিবেদন করা হয়েছে।"</item>
-  </plurals>
-  <plurals name="conversation_not_important">
-    <item quantity="one" msgid="3824809189993339030">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;টি গুরুত্বপূর্ণ নয় হিসাবে চিহ্নিত হয়েছে।"</item>
-    <item quantity="other" msgid="1215472798075869124">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;টি গুরুত্বপূর্ণ নয় হিসাবে চিহ্নিত হয়েছে।"</item>
-  </plurals>
-  <plurals name="conversation_phished">
-    <item quantity="one" msgid="4330095881258771201">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;টি ফিশিং হিসাবে প্রতিবেদন করা হয়েছে।"</item>
-    <item quantity="other" msgid="9218674052779504277">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;টি ফিশিং হিসাবে প্রতিবেদন করা হয়েছে।"</item>
-  </plurals>
-  <plurals name="conversation_archived">
-    <item quantity="one" msgid="4127890884907503696">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;টি সংরক্ষণাগারভুক্ত হয়েছে।"</item>
-    <item quantity="other" msgid="7789480176789922968">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;টি সংরক্ষণাগারভুক্ত হয়েছে।"</item>
-  </plurals>
-  <plurals name="conversation_deleted">
-    <item quantity="one" msgid="5591889079235938982">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;টি মোছা হয়েছে।"</item>
-    <item quantity="other" msgid="7060256058737892078">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;টি মোছা হয়েছে।"</item>
-  </plurals>
-    <string name="deleted" msgid="7378013910782008375">"মোছা হয়েছে"</string>
-    <string name="archived" msgid="6283673603512713022">"সংরক্ষণাগারভুক্ত"</string>
-    <string name="folder_removed" msgid="5656281444688183676">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> থেকে সরানো হয়েছে"</string>
-  <plurals name="conversation_folder_changed">
-    <item quantity="one" msgid="6463727361987396734">"ফোল্ডার পরিবর্তন হয়েছে।"</item>
-    <item quantity="other" msgid="8815390494333090939">"ফোল্ডারগুলি পরিবর্তন হয়েছে।"</item>
-  </plurals>
-    <string name="conversation_folder_moved" msgid="6475872337373081683">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> এ সরানো হয়েছে"</string>
-    <string name="search_results_header" msgid="1529438451150580188">"ফলাফল"</string>
-    <string name="search_unsupported" msgid="2873920566477359177">"এই অ্যাকাউন্টে অনুসন্ধানের সুবিধা নেই।"</string>
-    <string name="add_label" msgid="3285338046038610902">"ফোল্ডার জুড়ুন"</string>
-    <string name="new_incoming_messages_one" msgid="5933087567495998661">"<xliff:g id="SENDER">%s</xliff:g> এর থেকে নতুন বার্তা দেখান।"</string>
-  <plurals name="new_incoming_messages_many">
-    <item quantity="other" msgid="4394042684501388790">"<xliff:g id="COUNT">%1$d</xliff:g>টি নতুন বার্তা দেখান।"</item>
-  </plurals>
-    <string name="date_and_view_details" msgid="2952994746916149969">"<xliff:g id="DATE">%1$s</xliff:g> &lt;a href=\'http://www.example.com\'&gt;বিশদ বিবরণ দেখুন&lt;/a&gt;"</string>
-    <string name="hide_details" msgid="8018801050702453314">"বিশদ বিবরণ লুকান"</string>
-    <string name="to_message_header" msgid="3954385178027011919">"<xliff:g id="RECIPIENTS">%1$s</xliff:g> কে"</string>
-    <string name="contact_info_string" msgid="6484930184867405276">"<xliff:g id="NAME">%1$s</xliff:g> এর যোগাযোগের তথ্য দেখান"</string>
-    <string name="contact_info_string_default" msgid="6204228921864816351">"যোগাযোগের তথ্য দেখান"</string>
-  <plurals name="show_messages_read">
-    <item quantity="other" msgid="5285673397387128129">"<xliff:g id="COUNT">%1$d</xliff:g>টি পুরোনো বার্তা"</item>
-  </plurals>
-    <string name="from_heading" msgid="48290556829713090">"প্রেরক:"</string>
-    <string name="replyto_heading" msgid="8275255318292059079">"একে-উত্তর দিন:"</string>
-    <string name="to_heading" msgid="3495203282540398336">"প্রতি: "</string>
-    <string name="to_heading_no_space" msgid="679167047628308670">"প্রতি:"</string>
-    <string name="cc_heading" msgid="5603892257866345823">"Cc:"</string>
-    <string name="bcc_heading" msgid="1482186590756218269">"Bcc:"</string>
-    <string name="date_heading" msgid="4213063948406397168">"তারিখ:"</string>
-    <string name="show_images" msgid="436044894053204084">"ছবিগুলি দেখান"</string>
-    <string name="always_show_images" msgid="556087529413707819">"এই প্রেরকের থেকে ছবিগুলি সর্বদা দেখান"</string>
-    <string name="always_show_images_toast" msgid="3763157294047555051">"এই প্রেরকের পাঠানো ছবিগুলি স্বয়ংক্রিয়ভাবে দেখানো হবে।"</string>
-    <string name="address_display_format" msgid="2098008376913966177">"<xliff:g id="NAME">%1$s</xliff:g> <xliff:g id="EMAIL">%2$s</xliff:g>"</string>
-    <string name="address_display_format_with_via_domain" msgid="8108294635074750048">"<xliff:g id="VIA_DOMAIN">%3$s</xliff:g> এর মাধ্যমে <xliff:g id="NAME">%1$s</xliff:g> <xliff:g id="EMAIL">%2$s</xliff:g>"</string>
-    <string name="message_saved" msgid="3291655042310241793">"বার্তাটি খসড়া হিসাবে সংরক্ষিত হয়েছে।"</string>
-    <string name="sending_message" msgid="2487846954946637084">"বার্তা পাঠানো হচ্ছে..."</string>
-    <string name="invalid_recipient" msgid="9157434699389936584">"<xliff:g id="WRONGEMAIL">%s</xliff:g> ঠিকানাটি অবৈধ।"</string>
-    <string name="show_elided" msgid="3456154624105704327">"উদ্ধৃত পাঠ্য দেখান"</string>
-    <string name="hide_elided" msgid="5768235486834692733">"▼ উদ্ধৃত পাঠ্য লুকান"</string>
-    <string name="message_invite_title" msgid="5985161025144867256">"ক্যালেন্ডার আমন্ত্রণ"</string>
-    <string name="message_invite_calendar_view" msgid="9181966650840809197">"ক্যালেন্ডারে দেখুন"</string>
-    <string name="message_invite_label_attending" msgid="4194264767870003397">"আসছেন?"</string>
-    <string name="message_invite_accept" msgid="8002758842580134835">"হ্যাঁ"</string>
-    <string name="message_invite_tentative" msgid="3199418731566655887">"হয়তো"</string>
-    <string name="message_invite_decline" msgid="6331040872447290777">"না"</string>
-    <string name="enumeration_comma" msgid="2848850136844740850">", "</string>
-    <string name="send_anyway" msgid="2727576121007079643">"তথাপিও পাঠান"</string>
-    <string name="ok" msgid="6178802457914802336">"ঠিক আছে"</string>
-    <string name="done" msgid="344354738335270292">"সম্পন্ন"</string>
-    <string name="cancel" msgid="4831678293149626190">"বাতিল করুন"</string>
-    <string name="clear" msgid="765949970989448022">"সাফ করুন"</string>
-    <string name="next" msgid="2662478712866255138">"পরবর্তী"</string>
-    <string name="previous" msgid="8985379053279804274">"পূর্ববর্তী"</string>
-  <string-array name="sync_status">
-    <item msgid="4600303222943450797">"সফল"</item>
-    <item msgid="2972425114100316260">"কোনো সংযোগ নেই৷"</item>
-    <item msgid="8594593386776437871">"সাইন ইন করা যায়নি।"</item>
-    <item msgid="1375193906551623606">"নিরাপত্তাজনিত ত্রুটি"</item>
-    <item msgid="195177374927979967">"সিঙ্ক করা যায়নি।"</item>
-    <item msgid="8026148967150231130">"অভ্যন্তরীণ ত্রুটি"</item>
-    <item msgid="5442620760791553027">"সার্ভার ত্রুটি"</item>
-  </string-array>
-    <string name="tap_to_configure" msgid="137172348280050643">"সেট আপ করতে স্পর্শ করুন"</string>
-    <string name="non_synced_folder_description" msgid="3044618511909304701">"কথোপকথনগুলি দেখতে, এই ফোল্ডারটি সিঙ্ক করুন।"</string>
-    <string name="tap_to_configure_folder_sync" msgid="3280434399275638071">"ফোল্ডার সিঙ্ক করুন"</string>
-    <string name="widget_large_unread_count" msgid="8699435859096455837">"%d+"</string>
-    <string name="large_unseen_count" msgid="3055042669246912518">"<xliff:g id="COUNT">%d</xliff:g>+ নতুন"</string>
-    <string name="unseen_count" msgid="5509898665569695288">"<xliff:g id="COUNT">%d</xliff:g>টি নতুন"</string>
-  <plurals name="actionbar_unread_messages">
-    <item quantity="other" msgid="3863201473731766006">"<xliff:g id="COUNT">%1$d</xliff:g>টি অপঠিত"</item>
-  </plurals>
-    <string name="actionbar_large_unread_count" msgid="753635978542372792">"<xliff:g id="COUNT">%1$d</xliff:g>টি+ অপঠিত"</string>
-    <string name="view_more_conversations" msgid="8377920000247101901">"আরো কথোপকথন দেখুন"</string>
-    <string name="loading_conversation" msgid="7931600025861500397">"লোড হচ্ছে..."</string>
-    <string name="activity_mailbox_selection" msgid="7489813868539767701">"অ্যাকাউন্ট চয়ন করুন"</string>
-    <string name="activity_folder_selection" msgid="8375243281001234750">"ফোল্ডার চয়ন করুন"</string>
-    <string name="folder_shortcut_widget_label" msgid="6466292659577092915">"ইমেল ফোল্ডার"</string>
-    <string name="change_folders_selection_dialog_title" msgid="9174464298613273814">"ফোল্ডারগুলি পরিবর্তন করুন"</string>
-    <string name="move_to_selection_dialog_title" msgid="4052506464467083621">"এতে সরান"</string>
-    <string name="search_hint" msgid="4916671414132334289">"মেল অনুসন্ধান করুন"</string>
-    <!-- no translation found for search_results_loaded (1784879343458807514) -->
-    <skip />
-    <string name="network_error" msgid="5931164247644972255">"কোনো সংযোগ নেই"</string>
-    <string name="retry" msgid="916102442074217293">"পুনরায় চেষ্টা করুন"</string>
-    <string name="load_more" msgid="8702691358453560575">"আরো লোড করুন"</string>
-    <!-- no translation found for load_attachment (3894318473827290350) -->
-    <skip />
-    <string name="shortcut_name_title" msgid="1562534040126088628">"ফোল্ডার শর্টকাটের নাম দিন"</string>
-    <string name="wait_for_sync_title" msgid="4577632826912823075">"সিঙ্কের জন্য অপেক্ষারত"</string>
-    <string name="not_synced_title" msgid="3600180500934086346">"অ্যাকাউন্ট সিঙ্ক হয়নি"</string>
-    <string name="wait_for_manual_sync_body" msgid="2823149409451003378">"এই অ্যাকাউন্টটি স্বয়ংক্রিয়ভাবে সিঙ্ক করার জন্য সেট আপ করা নেই।\nমেল একবার সিঙ্ক করার জন্য "<b>"এখন সিঙ্ক করুন"</b>" স্পর্শ করুন, অথবা মেল স্বয়ংক্রিয়ভাবে সিঙ্ক করার জন্য এই অ্যাকাউন্টটিকে সেট আপ করতে "<b>"সিঙ্ক সেটিংস পরিবর্তন করুন"</b>"।"</string>
-    <string name="manual_sync" msgid="2271479734895537848">"এখন সিঙ্ক করুন"</string>
-    <string name="change_sync_settings" msgid="3615852118397055361">"সিঙ্ক সেটিংস পরিবর্তন করুন"</string>
-    <string name="photo_load_failed" msgid="577471721679146999">"চিত্রটি লোড করা যায়নি"</string>
-    <string name="cant_move_or_change_labels" msgid="4155490583610926755">"নির্বাচনে একাধিক অ্যাকাউন্ট থাকার কারণে সরানো যাবে না।"</string>
-    <string name="multiple_new_message_notification_item" msgid="1386588046275174918"><b>"<xliff:g id="SENDER">%1$s</xliff:g>"</b>"   <xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="single_new_message_notification_big_text" msgid="2170154732664242904">"<xliff:g id="SUBJECT">%1$s</xliff:g>\n<xliff:g id="SNIPPET">%2$s</xliff:g>"</string>
-    <string name="ignore_spam_warning" msgid="8760314545535838430">"না, আমি এই বার্তাটিকে বিশ্বাস করি"</string>
-    <string name="via_domain" msgid="537951148511529082">"<xliff:g id="VIADOMAIN">%1$s</xliff:g> এর মাধ্যমে"</string>
-    <string name="signin" msgid="4699091478139791244">"সাইন-ইন করুন"</string>
-    <string name="info" msgid="1357564480946178121">"তথ্য"</string>
-    <string name="report" msgid="4318141326014579036">"প্রতিবেদন করুন"</string>
-    <string name="sync_error" msgid="1795794969006241678">"সিঙ্ক করা যায়নি।"</string>
-    <string name="sync_error_message" msgid="4182644657243736635">"সিঙ্ক করার জন্য আপনার ডিভাইসে পর্যাপ্ত সঞ্চয় স্থান নেই।"</string>
-    <string name="storage" msgid="4783683938444150638">"সঞ্চয়স্থান"</string>
-    <string name="senders_split_token" msgid="6549228851819460081">", "</string>
-    <string name="draft_count_format" msgid="9122583199850209286">" (<xliff:g id="COUNT">%1$s</xliff:g>)টি"</string>
-    <string name="all_folders_heading" msgid="9023770187629170967">"সকল ফোল্ডার"</string>
-    <string name="recent_folders_heading" msgid="8943134955788867702">"সাম্প্রতিক ফোল্ডারগুলি"</string>
-    <string name="message_details_title" msgid="60771875776494764">"বার্তার বিশদ বিবরণ"</string>
-    <string name="preference_advance_to_title" msgid="6385669491239514630">"স্বয়ং-স্থানান্তরণ"</string>
-  <string-array name="prefEntries_autoAdvance">
-    <item msgid="1505450878799459652">"অপেক্ষাকৃত নতুন"</item>
-    <item msgid="8000986144872247139">"অপেক্ষাকৃত পুরানো"</item>
-    <item msgid="8015001161633421314">"কথোপকথন তালিকা"</item>
-  </string-array>
-  <string-array name="prefSummaries_autoAdvance">
-    <item msgid="8221665977497655719">"আপনি মোছার পর অপেক্ষাকৃত নতুন কথোপকথন দেখান"</item>
-    <item msgid="1721869262893378141">"আপনি মোছার পর অপেক্ষাকৃত পুরানো কথোপকথন দেখান"</item>
-    <item msgid="880913657385630195">"আপনি মোছার পর কথোপকথন তালিকা দেখান"</item>
-  </string-array>
-    <string name="prefDialogTitle_autoAdvance" msgid="5459235590885640678">"এতে পাঠান"</string>
-    <string name="clear_display_images_whitelist_title" msgid="2012677202404471778">"ছবি অনুমোদনগুলি সাফ করুন"</string>
-    <string name="clear_display_images_whitelist_dialog_title" msgid="1942692501166848471">"ছবি অনুমোদনগুলি সাফ করবেন?"</string>
-    <string name="clear_display_images_whitelist_dialog_message" msgid="3952553078559373729">"আপনি পূর্বে যেসব প্রেরকদের অনুমোদন করেছিলেন তাদের থেকে ইনলাইন চিত্রগুলির প্রদর্শন বন্ধ করুন।"</string>
-    <string name="sender_whitelist_cleared" msgid="2490984995927904030">"ছবিগুলি স্বয়ংক্রিয়ভাবে দেখানো হবে না।"</string>
-    <string name="preferences_signature_title" msgid="2318034745474929902">"স্বাক্ষর"</string>
-    <string name="preferences_signature_dialog_title" msgid="4801741764511807064">"স্বাক্ষর"</string>
-    <string name="preferences_signature_summary_not_set" msgid="3776614319388053784">"সেট করা নেই"</string>
-    <string name="notification_action_reply" msgid="8378725460102575919">"উত্তর দিন"</string>
-    <string name="notification_action_reply_all" msgid="5693469099941000037">"সকলকে উত্তর দিন"</string>
-    <string name="notification_action_archive" msgid="2884874164831039047">"সংরক্ষণাগারে রাখুন"</string>
-    <string name="notification_action_remove_label" msgid="3714785653186750981">"লেবেল সরান"</string>
-    <string name="notification_action_delete" msgid="3201627482564624132">"মুছুন"</string>
-    <string name="notification_action_undo_archive" msgid="600186958134073582">"সংরক্ষণাগারভুক্ত"</string>
-    <string name="notification_action_undo_remove_label" msgid="8341924850540100690">"লেবেল সরানো হয়েছে"</string>
-    <string name="notification_action_undo_delete" msgid="6915612337413587103">"মোছা হয়েছে"</string>
-    <string name="veiled_address" msgid="2670378260196977266"></string>
-    <string name="veiled_alternate_text" msgid="6343564357099807582"></string>
-    <string name="veiled_alternate_text_unknown_person" msgid="6728323554307952217"></string>
-    <string name="veiled_summary_unknown_person" msgid="2122359944161241551"></string>
-    <string name="label_notification_ticker" msgid="323232821061341014">"<xliff:g id="LABEL">%s</xliff:g>: <xliff:g id="NOTIFICATION">%s</xliff:g>"</string>
-  <plurals name="new_messages">
-    <item quantity="one" msgid="3446656407520493241">"<xliff:g id="COUNT">%1$d</xliff:g>টি নতুন বার্তা"</item>
-    <item quantity="other" msgid="3531683811183204615">"<xliff:g id="COUNT">%1$d</xliff:g>টি নতুন বার্তা"</item>
-  </plurals>
-    <string name="single_new_message_notification_title" msgid="7954710563222504868">"<xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="silent_ringtone" msgid="1570794756474381886">"নীরব"</string>
-    <string name="preference_removal_action_title" msgid="4703834472477137634">"ক্রিয়াগুলি সংরক্ষণাগারভুক্ত করুন বা মুছুন"</string>
-  <string-array name="prefEntries_removal_action">
-    <item msgid="954772302016538814">"শুধুমাত্র সংরক্ষণাগার দেখান"</item>
-    <item msgid="7212690302706180254">"শুধুমাত্র মোছা দেখান"</item>
-    <item msgid="2539051197590685708">"সংরক্ষণ এবং মুছুন দেখান"</item>
-  </string-array>
-  <string-array name="prefSummaries_removal_action_summary">
-    <item msgid="6877416142040695022">"শুধুমাত্র সংরক্ষণাগার দেখান"</item>
-    <item msgid="1510017057984222376">"কেবলমাত্র মোছা দেখান"</item>
-    <item msgid="3196207224108008441">"সংরক্ষণাগার দেখান ও মুছুন"</item>
-  </string-array>
-    <string name="prefDialogTitle_removal_action" msgid="266548424110393246">"সংরক্ষণ এবং বিলোপ ক্রিয়াগুলি"</string>
-    <string name="preferences_default_reply_all_title" msgid="7255858488369635327">"সকলকে উত্তর দিন"</string>
-    <string name="preferences_default_reply_all_summary_impl" msgid="895581085692979709">"বার্তার উত্তরগুলির জন্য ডিফল্ট হিসাবে ব্যবহার করুন"</string>
-    <string name="preference_swipe_title_archive" msgid="9122333537761282714">"সংরক্ষণ করতে সোয়াইপ করুন"</string>
-    <string name="preference_swipe_title_delete" msgid="4860474024917543711">"মুছতে সোয়াইপ করুন"</string>
-    <string name="preference_swipe_description" msgid="3036560323237015010">"কথোপকথন তালিকাতে"</string>
-    <string name="preference_sender_image_title" msgid="7890813537985591865">"প্রেরকের চিত্র"</string>
-    <string name="preference_sender_image_description" msgid="3586817690132199889">"কথোপকথন তালিকায় নামের পাশে দেখান"</string>
-    <string name="empty_trash" msgid="3385937024924728399">"ট্র্যাশ খালি করুন"</string>
-    <string name="empty_spam" msgid="2911988289997281371">"স্প্যাম খালি করুন"</string>
-    <string name="empty_trash_dialog_title" msgid="2104898489663621508">"ট্র্যাশ খালি করবেন?"</string>
-    <string name="empty_spam_dialog_title" msgid="1130319045917820569">"স্প্যাম খালি করবেন?"</string>
-  <plurals name="empty_folder_dialog_message">
-    <item quantity="one" msgid="3315412388217832914">"<xliff:g id="COUNT">%1$d</xliff:g>টি বার্তা স্থায়ীভাবে মুছে যাবে।"</item>
-    <item quantity="other" msgid="263840304486020101">"<xliff:g id="COUNT">%1$d</xliff:g>টি বার্তা স্থায়ীভাবে মুছে যাবে।"</item>
-  </plurals>
-    <string name="drawer_open" msgid="2285557278907103851">"নেভিগেশান ড্রয়ার খুলুন"</string>
-    <string name="drawer_close" msgid="2065829742127544297">"নেভিগেশান ড্রয়ার বন্ধ করুন"</string>
-    <string name="conversation_photo_welcome_text" msgid="836483155429003787">"একটি প্রেরকের চিত্রকে স্পর্শ করে সেই কথোপকথনটি নির্বাচন করুন।"</string>
-    <string name="long_press_to_select_tip" msgid="1660881999120625177">"একটি কথোপকথন নির্বাচন করতে স্পর্শ করুন ও ধরে থাকুন, তারপর আরো নির্বাচন করতে স্পর্শ করুন।"</string>
-    <string name="folder_icon_desc" msgid="6272938864914794739">"ফোল্ডার আইকন"</string>
-    <string name="add_account" msgid="5905863370226612377">"অ্যাকাউন্ট জুড়ুন"</string>
-    <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"টিপ খারিজ করুন"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"স্বয়ং-সিঙ্ক বন্ধ আছে।"</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"চালু করতে স্পর্শ করুন।"</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"অ্যাকাউন্ট সিঙ্ক বন্ধ আছে।"</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"<xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g> এর মধ্যে চালু করুন।"</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"অ্যাকাউন্ট সেটিংস"</string>
-    <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="OUTBOX">%2$s</xliff:g> এ <xliff:g id="NUMBER">%1$s</xliff:g>টি অপ্রেরিত"</string>
-    <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"স্বয়ং-সিঙ্ক চালু করবেন?"</string>
-    <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"শুধুমাত্র Gmail এ নয়, সমস্ত অ্যাপ্লিকেশনে এবং অ্যাকাউন্টে আপনার করা পরিবর্তনগুলি, ওয়েব, আপনার অন্যান্য ডিভাইস, এবং আপনার <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g> এর মধ্যে সিঙ্ক্রোনাইজ হবে।"</string>
-    <string name="phone" msgid="4142617042507912053">"ফোন"</string>
-    <string name="tablet" msgid="4593581125469224791">"ট্যাবলেট"</string>
-    <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="7239160845196929866">"চালু করুন"</string>
-    <string name="show_n_more_folders" msgid="5769610839632786654">"আরো <xliff:g id="NUMBER">%1$s</xliff:g>টি ফোল্ডার দেখান"</string>
-    <string name="hide_folders" msgid="7618891933409521283">"ফোল্ডারগুলি লুকান"</string>
-    <string name="print" msgid="7987949243936577207">"মুদ্রণ"</string>
-    <string name="print_all" msgid="4011022762279519941">"সবগুলি মুদ্রণ করুন"</string>
-  <plurals name="num_messages">
-    <item quantity="one" msgid="8071234386915191851">"<xliff:g id="COUNT">%1$d</xliff:g>টি বার্তা"</item>
-    <item quantity="other" msgid="962415099931188360">"<xliff:g id="COUNT">%1$d</xliff:g>টি বার্তা"</item>
-  </plurals>
-    <string name="date_message_received_print" msgid="4168417403884350040">"<xliff:g id="DAY_AND_DATE">%1$s</xliff:g> তারিখে <xliff:g id="TIME">%2$s</xliff:g> এ"</string>
-    <string name="draft_to_heading" msgid="7370121943946205024">"খসড়া প্রতি:"</string>
-    <string name="draft_heading" msgid="7032951343184552800">"খসড়া"</string>
-    <string name="quoted_text_hidden_print" msgid="5256754205675159141">"উদ্ধৃত পাঠ্য লুক্কায়িত"</string>
-  <plurals name="num_attachments">
-    <item quantity="one" msgid="5494465717267988888">"<xliff:g id="COUNT">%1$d</xliff:g>টি সংযুক্তি"</item>
-    <item quantity="other" msgid="5422167728480739361">"<xliff:g id="COUNT">%1$d</xliff:g>টি সংযুক্তি"</item>
-  </plurals>
-    <string name="no_subject" msgid="5622708348540036959">"(কোনো বিষয় নেই)"</string>
-    <string name="vacation_responder" msgid="5570132559074523806">"ছুটিতে থাকাকালীন উত্তর"</string>
-    <string name="preferences_vacation_responder_title" msgid="2268482117730576123">"ছুটিতে থাকাকালীন উত্তর"</string>
-    <string name="vacation_responder_body_hint_text" msgid="9087613123105158494">"বার্তা"</string>
-    <string name="send_to_contacts_text" msgid="124432913980620545">"শুধুমাত্র আমার পরিচিতিগুলিকে পাঠান"</string>
-    <string name="send_to_domain_text" msgid="5064559546745918393">"শুধুমাত্র <xliff:g id="DOMAIN">%1$s</xliff:g> এ পাঠান"</string>
-    <string name="pick_start_date_title" msgid="2274665037355224165">"শুরু হবে"</string>
-    <string name="pick_end_date_title" msgid="733396083649496600">"শেষ হবে (ঐচ্ছিক)"</string>
-    <string name="date_not_set" msgid="3251555782945051904">"সেট করা নেই"</string>
-    <string name="set_end_date_dialog_title" msgid="7543009262788808443">"সমাপ্তি তারিখ (ঐচ্ছিক)"</string>
-    <string name="custom_date" msgid="5794846334232367838">"কাস্টম"</string>
-    <string name="date_none" msgid="1061426502665431412">"কোনো কিছুই নয়"</string>
-    <string name="discard_changes" msgid="5699760550972324746">"পরিবর্তনগুলি পরিত্যাগ করবেন?"</string>
-    <string name="vacation_responder_changes_saved" msgid="91448817268121249">"ছুটিতে থাকাকালীন উত্তরে করা পরিবর্তনগুলি সংরক্ষিত হয়েছে"</string>
-    <string name="vacation_responder_changes_discarded" msgid="21756037735539983">"ছুটিতে থাকাকালীন উত্তরে করা পরিবর্তনগুলি পরিত্যাগ করা হয়েছে"</string>
-    <string name="vacation_responder_off" msgid="4429909341193366667">"বন্ধ আছে"</string>
-    <string name="vacation_responder_on" msgid="4913238379320882449">"চালু আছে, <xliff:g id="DATE">%1$s</xliff:g> তারিখ থেকে"</string>
-    <string name="vacation_responder_on_with_end_date" msgid="4360941815371475955">"চালু আছে, <xliff:g id="START_DATE">%1$s</xliff:g> থেকে <xliff:g id="END_DATE">%2$s</xliff:g> পর্যন্ত"</string>
-    <string name="vacation_responder_empty_subject_and_body_warning" msgid="6233629618520852439">"একটি বিষয় বা বার্তা জুড়ুন"</string>
-    <string name="view_entire_message" msgid="823281796655014454">"সমগ্র বার্তাটি দেখুন"</string>
-    <string name="eml_loader_error_toast" msgid="6577383216635400167">"এই ফাইলটি খোলা যাচ্ছে না"</string>
-    <string name="help_and_info" msgid="3708286489943154681">"সহায়তা"</string>
-    <string name="help_and_feedback" msgid="7211458338163287670">"সহায়তা এবং প্রতিক্রিয়া"</string>
-    <string name="feedback" msgid="204247008751740034">"প্রতিক্রিয়া পাঠান"</string>
-    <string name="copyright" msgid="3121335168340432582">"©<xliff:g id="YEAR">%1$d</xliff:g> Google Inc."</string>
-    <string name="version" msgid="1161745345056656547">"<xliff:g id="APP_NAME">%1$s</xliff:g> সংস্করণ <xliff:g id="VERSION">%2$s</xliff:g>"</string>
-    <string name="view_app_page" msgid="3241990517052398927"></string>
-    <string name="print_dialog" msgid="8895536548487605661">"মুদ্রণ..."</string>
-    <string name="copyright_information" msgid="971422874488783312">"কপিরাইট তথ্য"</string>
-    <string name="privacy_policy" msgid="212094623396418302">"গোপনীয়তা নীতি"</string>
-    <string name="open_source_licenses" msgid="8643615555920977752">"মুক্ত উৎস লাইসেন্স"</string>
-    <string name="reply_choice_yes" msgid="3327633032975373220">"হ্যাঁ"</string>
-    <string name="reply_choice_no" msgid="7068775605915475207">"না"</string>
-    <string name="reply_choice_ok" msgid="7881073621845053152">"ঠিক আছে"</string>
-    <string name="reply_choice_hehe" msgid="6054314968043050748">"হে হে"</string>
-    <string name="reply_choice_thanks" msgid="4978961954288364694">"ধন্যবাদ"</string>
-    <string name="reply_choice_i_agree" msgid="2496652737796884298">"আমি সহমত জানাচ্ছি"</string>
-    <string name="reply_choice_nice" msgid="4465894941302838676">"সুন্দর"</string>
-    <string name="reply_on_my_way" msgid="5645003971107444269">"রাস্তায় আছি"</string>
-    <string name="reply_choice_later" msgid="4629219072859486413">"ঠিক আছে, পরে আমি আপনার সঙ্গে এই কথা বলছি"</string>
-    <string name="reply_choice_smiling_face" msgid="1772253938506548631">":)"</string>
-    <string name="reply_choice_frowning_face" msgid="6260338807944002651">":("</string>
-    <string name="preference_header_action_confirmations" msgid="3922674681156121948">"অ্যাকশনের নিশ্চিতকরণগুলি"</string>
-    <string name="preference_confirm_before_delete_title" msgid="7563587174619033835">"মোছার আগে নিশ্চিত করুন"</string>
-    <string name="preference_confirm_before_archive_title" msgid="7318645995655875718">"সংরক্ষণাগারভুক্ত করার আগে নিশ্চিত করুন"</string>
-    <string name="preference_confirm_before_send_title" msgid="4136585783513077039">"পাঠানোর আগে নিশ্চিত করুন"</string>
-    <string name="preferences_conversation_mode_title" msgid="389352009651720838">"বার্তা স্বয়ংক্রিয় ভাবে মানানসই"</string>
-    <string name="preferences_conversation_mode_summary" msgid="5730999743867653106">"স্ক্রীনের সাথে মানানসই করার জন্য বার্তাগুলিকে সংকুচিত করুন"</string>
-    <string name="preferences_disable_snap_headers_title" msgid="7257824136988429629">"বার্তা অ্যাকশনগুলি"</string>
-  <string-array name="prefSummaries_snapHeader">
-    <item msgid="43373293784193461">"সর্বদা স্ক্রীনের শীর্ষে বার্তা অ্যাকশনগুলি দেখান"</item>
-    <item msgid="1765271305989996747">"প্রতিকৃতি মোডে ঘোরানো হলেই কেবলমাত্র বার্তা অ্যাকশনগুলিকে স্ক্রীনের শীর্ষে দেখান"</item>
-    <item msgid="6311113076575333488">"বার্তার শিরোলেখের বাইরে বার্তা অ্যাকশনগুলি দেখাবেন না"</item>
-  </string-array>
-  <string-array name="prefEntries_snapHeader">
-    <item msgid="6906986566816683587">"সর্বদা দেখান"</item>
-    <item msgid="113299655708990672">"শুধুমাত্র প্রতিকৃতি মোডে দেখান"</item>
-    <item msgid="4403750311175924065">"দেখাবেন না"</item>
-  </string-array>
-    <string name="clear_history_title" msgid="5536216295725760357">"অনুসন্ধানের ইতিহাস সাফ করুন"</string>
-    <string name="search_history_cleared" msgid="1461946302763342640">"অনুসন্ধানের ইতিহাস সাফ করা হয়েছে৷"</string>
-    <string name="clear_history_dialog_title" msgid="3503603389704365385">"অনুসন্ধানের ইতিহাস সাফ করতে চান?"</string>
-    <string name="clear_history_dialog_message" msgid="5202922561632407778">"আপনার দ্বারা পূর্বে করা সমস্ত অনুসন্ধানকে সরানো হবে৷"</string>
-    <string name="manage_accounts_menu_item" msgid="4734660452395086786">"অ্যাকাউন্টগুলি পরিচালনা করুন"</string>
-    <string name="general_preferences_title" msgid="4212138728220418162">"সাধারণ সেটিংস"</string>
-    <string name="activity_preferences" msgid="8966077432517613292">"সেটিংস"</string>
-</resources>
diff --git a/res/values-ca-sw600dp/strings.xml b/res/values-ca-sw600dp/strings.xml
index 306fc3e..400dfd0 100644
--- a/res/values-ca-sw600dp/strings.xml
+++ b/res/values-ca-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Cc/Cco"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Cco"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Gestiona les carpetes"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Usa com a opció predeterminada per respondre notificacions de missatge"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ Cc/Cco"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ Cco"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Gestiona les carpetes"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Utilitza com a opció predeterminada per respondre notificacions de missatge"</string>
 </resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index a27324a..cb3f5ee 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Icona de la carpeta"</string>
     <string name="add_account" msgid="5905863370226612377">"Afegeix un compte"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Omet el consell"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"La sincronització automàtica està desactivada."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Toca aquí per activar-ho."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"La sincronització del compte està desactivada."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Activa-la a <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Configuració del compte"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> missatges no enviats a <xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Vols activar la sincronització automàtica?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Els canvis que facis a les aplicacions i als comptes, i no només a Gmail, se sincronitzaran al web, a la resta de dispositius i a <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>."</string>
diff --git a/res/values-cs-sw600dp/strings.xml b/res/values-cs-sw600dp/strings.xml
index e5c7371..8140e83 100644
--- a/res/values-cs-sw600dp/strings.xml
+++ b/res/values-cs-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Kopie/skrytá"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Skrytá kopie"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Správa složek"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Použít jako výchozí pro odpovědi na oznámení zpráv"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ Kopie/skrytá"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ Skrytá kopie"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Správa složek"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Použít jako výchozí pro odpovědi na oznámení zpráv"</string>
 </resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index abf09ec..9a40d9d 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -18,7 +18,7 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="from" msgid="5159056500059912358">"Od"</string>
+    <string name="from" msgid="5159056500059912358">"Odesílatel"</string>
     <string name="to" msgid="3971614275716830581">"Komu"</string>
     <string name="cc" msgid="8768828862207919684">"Kopie"</string>
     <string name="bcc" msgid="519303553518479171">"Skrytá kopie"</string>
@@ -227,7 +227,7 @@
   <plurals name="show_messages_read">
     <item quantity="other" msgid="5285673397387128129">"Starší zprávy: <xliff:g id="COUNT">%1$d</xliff:g>"</item>
   </plurals>
-    <string name="from_heading" msgid="48290556829713090">"Od:"</string>
+    <string name="from_heading" msgid="48290556829713090">"Odesílatel:"</string>
     <string name="replyto_heading" msgid="8275255318292059079">"Odpovědět:"</string>
     <string name="to_heading" msgid="3495203282540398336">"Komu: "</string>
     <string name="to_heading_no_space" msgid="679167047628308670">"Komu:"</string>
@@ -327,8 +327,8 @@
     <item msgid="880913657385630195">"Po smazání zobrazit seznam konverzací"</item>
   </string-array>
     <string name="prefDialogTitle_autoAdvance" msgid="5459235590885640678">"Pokračovat do"</string>
-    <string name="clear_display_images_whitelist_title" msgid="2012677202404471778">"Vymazat schválení obrázků"</string>
-    <string name="clear_display_images_whitelist_dialog_title" msgid="1942692501166848471">"Vymazat schválení obrázků?"</string>
+    <string name="clear_display_images_whitelist_title" msgid="2012677202404471778">"Zrušit schválení obrázků"</string>
+    <string name="clear_display_images_whitelist_dialog_title" msgid="1942692501166848471">"Zrušit schválení obrázků?"</string>
     <string name="clear_display_images_whitelist_dialog_message" msgid="3952553078559373729">"Přestat zobrazovat vložené obrázky od odesílatelů, u kterých jste to dříve povolili."</string>
     <string name="sender_whitelist_cleared" msgid="2490984995927904030">"Obrázky se nebudou zobrazovat automaticky."</string>
     <string name="preferences_signature_title" msgid="2318034745474929902">"Podpis"</string>
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Ikona složky"</string>
     <string name="add_account" msgid="5905863370226612377">"Přidat účet"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Zavřít tip"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Automatická synchronizace je vypnuta."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Zapnete ji klepnutím."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Synchronizace účtu je vypnuta"</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Zapněte ji v <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Nastavení účtu"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"Neodeslané zprávy ve složce <xliff:g id="OUTBOX">%2$s</xliff:g>: <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Zapnout automatickou synchronizaci?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Změny, které provedete ve všech aplikacích a účtech (nikoli jen v Gmailu), budou synchronizovány mezi webem, ostatními zařízeními a zařízením <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>."</string>
diff --git a/res/values-da-sw600dp/strings.xml b/res/values-da-sw600dp/strings.xml
index 21fc2e5..26bbf84 100644
--- a/res/values-da-sw600dp/strings.xml
+++ b/res/values-da-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Cc/Bcc"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Bcc"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Administrer mapper"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Anvend som standard ved svar på underretninger om meddelelser"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ Cc/Bcc"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ Bcc"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Administrer mapper"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Anvend som standard ved svar på underretninger om meddelelser"</string>
 </resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 887c051..c723c71 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -220,7 +220,7 @@
     <item quantity="other" msgid="4394042684501388790">"Vis <xliff:g id="COUNT">%1$d</xliff:g> nye meddelelser."</item>
   </plurals>
     <string name="date_and_view_details" msgid="2952994746916149969">"<xliff:g id="DATE">%1$s</xliff:g> &lt;a href=\'http://www.example.com\'&gt;Se info&lt;/a&gt;"</string>
-    <string name="hide_details" msgid="8018801050702453314">"Skjul info"</string>
+    <string name="hide_details" msgid="8018801050702453314">"Skjul oplysninger"</string>
     <string name="to_message_header" msgid="3954385178027011919">"til <xliff:g id="RECIPIENTS">%1$s</xliff:g>"</string>
     <string name="contact_info_string" msgid="6484930184867405276">"Vis kontaktoplysninger for <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="contact_info_string_default" msgid="6204228921864816351">"Vis kontaktoplysninger"</string>
@@ -295,9 +295,9 @@
     <string name="shortcut_name_title" msgid="1562534040126088628">"Genvej til navngivning af mappe"</string>
     <string name="wait_for_sync_title" msgid="4577632826912823075">"Venter på synkronisering"</string>
     <string name="not_synced_title" msgid="3600180500934086346">"Kontoen er ikke synkroniseret"</string>
-    <string name="wait_for_manual_sync_body" msgid="2823149409451003378">"Denne konto er ikke konfigureret til automatisk synkronisering.\nTryk på "<b>"Synkroniser nu"</b>" for at synkronisere e-mails én gang, eller tryk på "<b>"Rediger indstillinger for synkronisering"</b>" for at konfigurere denne konto til at synkronisere e-mail automatisk."</string>
+    <string name="wait_for_manual_sync_body" msgid="2823149409451003378">"Denne konto er ikke konfigureret til automatisk synkronisering.\nTryk på "<b>"Synkroniser nu"</b>" for at synkronisere e-mails én gang, eller tryk på "<b>"Skift synkroniseringsindstillinger"</b>" for at konfigurere denne konto til at synkronisere e-mail automatisk."</string>
     <string name="manual_sync" msgid="2271479734895537848">"Synkroniser nu"</string>
-    <string name="change_sync_settings" msgid="3615852118397055361">"Rediger indst. for synkr."</string>
+    <string name="change_sync_settings" msgid="3615852118397055361">"Skift synkroniseringsindst."</string>
     <string name="photo_load_failed" msgid="577471721679146999">"Billedet kunne ikke indlæses"</string>
     <string name="cant_move_or_change_labels" msgid="4155490583610926755">"Flytning er ikke mulig, fordi markeringen indeholder flere konti."</string>
     <string name="multiple_new_message_notification_item" msgid="1386588046275174918"><b>"<xliff:g id="SENDER">%1$s</xliff:g>"</b>"   <xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
@@ -371,7 +371,7 @@
     <string name="preference_swipe_title_delete" msgid="4860474024917543711">"Stryg til siden for at slette"</string>
     <string name="preference_swipe_description" msgid="3036560323237015010">"På samtaleliste"</string>
     <string name="preference_sender_image_title" msgid="7890813537985591865">"Afsenderbillede"</string>
-    <string name="preference_sender_image_description" msgid="3586817690132199889">"Vis ud for navnet på samtalelisten"</string>
+    <string name="preference_sender_image_description" msgid="3586817690132199889">"Vis ud for navnet i samtalelisten"</string>
     <string name="empty_trash" msgid="3385937024924728399">"Tøm papirkurv"</string>
     <string name="empty_spam" msgid="2911988289997281371">"Tøm spammappe"</string>
     <string name="empty_trash_dialog_title" msgid="2104898489663621508">"Skal papirkurven tømmes?"</string>
@@ -380,18 +380,13 @@
     <item quantity="one" msgid="3315412388217832914">"<xliff:g id="COUNT">%1$d</xliff:g> meddelelse vil blive slettet permanent."</item>
     <item quantity="other" msgid="263840304486020101">"<xliff:g id="COUNT">%1$d</xliff:g> meddelelser vil blive slettet permanent."</item>
   </plurals>
-    <string name="drawer_open" msgid="2285557278907103851">"Åbn menuen"</string>
-    <string name="drawer_close" msgid="2065829742127544297">"Luk menuen"</string>
+    <string name="drawer_open" msgid="2285557278907103851">"Åbn navigationsskuffen"</string>
+    <string name="drawer_close" msgid="2065829742127544297">"Luk navigationsskuffen"</string>
     <string name="conversation_photo_welcome_text" msgid="836483155429003787">"Tryk på afsenderbilledet for at markere samtalen."</string>
     <string name="long_press_to_select_tip" msgid="1660881999120625177">"Tryk og hold nede for at vælge en samtale, og tryk derefter igen for at vælge flere."</string>
     <string name="folder_icon_desc" msgid="6272938864914794739">"Mappeikon"</string>
     <string name="add_account" msgid="5905863370226612377">"Tilføj konto"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Afvis tip"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Automatisk synkronisering er slået fra."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Tryk for at slå til."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Kontosynkronisering er slået fra."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Aktivér i <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Kontoindstillinger"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> usendte meddelelser i <xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Vil du slå automatisk synkronisering til?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Ændringer, du foretager i alle apps og konti, ikke kun Gmail, synkroniseres mellem nettet, dine andre enheder og din <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>."</string>
@@ -462,11 +457,11 @@
     <string name="preference_confirm_before_send_title" msgid="4136585783513077039">"Bekræft før afsendelse"</string>
     <string name="preferences_conversation_mode_title" msgid="389352009651720838">"Tilpas meddelelser automatisk"</string>
     <string name="preferences_conversation_mode_summary" msgid="5730999743867653106">"Formindsk meddelelser, så de passer til skærmen"</string>
-    <string name="preferences_disable_snap_headers_title" msgid="7257824136988429629">"Meddelelseshandlinger"</string>
+    <string name="preferences_disable_snap_headers_title" msgid="7257824136988429629">"Beskedhandlinger"</string>
   <string-array name="prefSummaries_snapHeader">
-    <item msgid="43373293784193461">"Vis altid meddelelseshandlinger øverst på skærmen"</item>
-    <item msgid="1765271305989996747">"Vis kun meddelelseshandlinger øverst på skærmen i portrættilstand"</item>
-    <item msgid="6311113076575333488">"Vis ikke meddelelseshandlinger uden for meddelelsens header"</item>
+    <item msgid="43373293784193461">"Vis altid beskedhandlinger øverst på skærmen"</item>
+    <item msgid="1765271305989996747">"Vis kun beskedhandlinger øverst på skærmen i portrættilstand"</item>
+    <item msgid="6311113076575333488">"Vis ikke beskedhandlinger uden for meddelelsens sidehoved"</item>
   </string-array>
   <string-array name="prefEntries_snapHeader">
     <item msgid="6906986566816683587">"Vis altid"</item>
diff --git a/res/values-de-sw600dp/strings.xml b/res/values-de-sw600dp/strings.xml
index 22da783..f3b7ac2 100644
--- a/res/values-de-sw600dp/strings.xml
+++ b/res/values-de-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Cc/Bcc"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Bcc"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Ordner verwalten"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Als Standard für Antworten auf Benachrichtigungen verwenden"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ Cc/Bcc"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ Bcc"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Ordner verwalten"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Als Standard für Antworten auf Benachrichtigungen verwenden"</string>
 </resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 8fac094..b404da2 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Ordnersymbol"</string>
     <string name="add_account" msgid="5905863370226612377">"Konto hinzufügen"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Tipp schließen"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Automatische Synchronisierung ist deaktiviert."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Zum Aktivieren berühren"</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Kontosynchronisierung ist deaktiviert."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"In <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g> aktivieren"</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Kontoeinstellungen"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> nicht gesendete Nachricht(en) in <xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Automatische Synchronisierung aktivieren?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Änderungen, die Sie nicht nur an Gmail, sondern an allen Apps und Konten vornehmen, werden zwischen dem Web, Ihren anderen Geräten und Ihrem <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g> synchronisiert."</string>
@@ -452,7 +447,7 @@
     <string name="reply_choice_thanks" msgid="4978961954288364694">"Vielen Dank!"</string>
     <string name="reply_choice_i_agree" msgid="2496652737796884298">"Ich stimme zu."</string>
     <string name="reply_choice_nice" msgid="4465894941302838676">"Wunderbar"</string>
-    <string name="reply_on_my_way" msgid="5645003971107444269">"Bin auf dem Weg."</string>
+    <string name="reply_on_my_way" msgid="5645003971107444269">"Bin auf dem Weg"</string>
     <string name="reply_choice_later" msgid="4629219072859486413">"OK, ich werde mich melden."</string>
     <string name="reply_choice_smiling_face" msgid="1772253938506548631">":)"</string>
     <string name="reply_choice_frowning_face" msgid="6260338807944002651">":("</string>
diff --git a/res/values-el-sw600dp/strings.xml b/res/values-el-sw600dp/strings.xml
index 23c6bb1..e8af7b1 100644
--- a/res/values-el-sw600dp/strings.xml
+++ b/res/values-el-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Κοιν./Κρ.κοιν."</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Κρυφή κοιν."</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Διαχείριση φακέλων"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Χρήση ως προεπιλογή για απαντήσεις σε ειδοποιήσεις μηνυμάτων"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ Κοιν./Κρ.κοιν."</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ Κρυφή κοιν."</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Διαχείριση φακέλων"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Χρήση ως προεπιλογή για απαντήσεις σε ειδοποιήσεις μηνυμάτων"</string>
 </resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 54a225d..f95c509 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Εικονίδιο φακέλου"</string>
     <string name="add_account" msgid="5905863370226612377">"Προσθήκη λογαριασμού"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Παράβλεψη συμβουλής"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Ο αυτόματος συγχρονισμός είναι απενεργοποιημένος."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Αγγίξτε για ενεργοποίηση."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Ο συγχρονισμός του λογαριασμού είναι απενεργοποιημένος."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Ενεργοποιήστε τον στην ενότητα <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g> ."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Ρυθμίσεις λογαριασμού"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> μη απεσταλμένα σε <xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Ενεργοποίηση αυτόματου συγχρονισμού;"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Θα γίνει συγχρονισμός όλων των αλλαγών που πραγματοποιείτε σε όλες τις εφαρμογές και τους λογαριασμούς, όχι μόνο στο Gmail, στον ιστό, σε άλλες συσκευές και στο <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g> σας."</string>
diff --git a/res/values-en-rGB-sw600dp/strings.xml b/res/values-en-rGB-sw600dp/strings.xml
index b0fd86e..7b960e8 100644
--- a/res/values-en-rGB-sw600dp/strings.xml
+++ b/res/values-en-rGB-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Cc/Bcc"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Bcc"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Manage folders"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Use as default for replies to message notifications"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ Cc/Bcc"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ Bcc"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Manage folders"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Use as default for replies to message notifications"</string>
 </resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 63b235f..2973fe5 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -253,7 +253,7 @@
     <string name="enumeration_comma" msgid="2848850136844740850">", "</string>
     <string name="send_anyway" msgid="2727576121007079643">"Send anyway"</string>
     <string name="ok" msgid="6178802457914802336">"OK"</string>
-    <string name="done" msgid="344354738335270292">"Done"</string>
+    <string name="done" msgid="344354738335270292">"Finished"</string>
     <string name="cancel" msgid="4831678293149626190">"Cancel"</string>
     <string name="clear" msgid="765949970989448022">"Clear"</string>
     <string name="next" msgid="2662478712866255138">"Next"</string>
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Folder icon"</string>
     <string name="add_account" msgid="5905863370226612377">"Add account"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Dismiss tip"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Auto-sync is off."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Touch to turn on."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Account sync is off."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Turn on in <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Account settings"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> unsent in <xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Turn auto-sync on?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Changes you make to all apps and accounts, not just Gmail, will be synchronised between the web, your other devices and your <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>."</string>
diff --git a/res/values-en-rIN-sw600dp/strings.xml b/res/values-en-rIN-sw600dp/strings.xml
index b0fd86e..7b960e8 100644
--- a/res/values-en-rIN-sw600dp/strings.xml
+++ b/res/values-en-rIN-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Cc/Bcc"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Bcc"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Manage folders"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Use as default for replies to message notifications"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ Cc/Bcc"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ Bcc"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Manage folders"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Use as default for replies to message notifications"</string>
 </resources>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 63b235f..2973fe5 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -253,7 +253,7 @@
     <string name="enumeration_comma" msgid="2848850136844740850">", "</string>
     <string name="send_anyway" msgid="2727576121007079643">"Send anyway"</string>
     <string name="ok" msgid="6178802457914802336">"OK"</string>
-    <string name="done" msgid="344354738335270292">"Done"</string>
+    <string name="done" msgid="344354738335270292">"Finished"</string>
     <string name="cancel" msgid="4831678293149626190">"Cancel"</string>
     <string name="clear" msgid="765949970989448022">"Clear"</string>
     <string name="next" msgid="2662478712866255138">"Next"</string>
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Folder icon"</string>
     <string name="add_account" msgid="5905863370226612377">"Add account"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Dismiss tip"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Auto-sync is off."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Touch to turn on."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Account sync is off."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Turn on in <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Account settings"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> unsent in <xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Turn auto-sync on?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Changes you make to all apps and accounts, not just Gmail, will be synchronised between the web, your other devices and your <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>."</string>
diff --git a/res/values-es-rUS-sw600dp/strings.xml b/res/values-es-rUS-sw600dp/strings.xml
index 39e63da..9c8b1bf 100644
--- a/res/values-es-rUS-sw600dp/strings.xml
+++ b/res/values-es-rUS-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ CC/CCO"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ CCO"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Administrar carpetas"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Usar como opción predeterminada para responder notif. de mensajes"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ CC/CCO"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ CCO"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Administrar carpetas"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Usar como opción predeterminada para responder mensajes"</string>
 </resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index e5b5700..9c87529 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Ícono de carpeta"</string>
     <string name="add_account" msgid="5905863370226612377">"Agregar cuenta"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Descartar sugerencia"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"La sincronización automática está desactivada."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Toca para activar esta opción."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"La sincronización de la cuenta está desactivada."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Actívala en la <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Configuración de la cuenta"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> sin enviar en <xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"¿Activar la sincronización automática?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Los cambios que realices en todas las aplicaciones y cuentas, no solo en Gmail, se sincronizarán con la Web, con otros dispositivos que tengas y con tu <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>."</string>
diff --git a/res/values-es-sw600dp/strings.xml b/res/values-es-sw600dp/strings.xml
index 8c8d559..e29bde4 100644
--- a/res/values-es-sw600dp/strings.xml
+++ b/res/values-es-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Cc/Cco"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Cco"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Administrar carpetas"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Usar como predeterminada para responder a notificaciones de mensajes"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ Cc/Cco"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ Cco"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Administrar carpetas"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Usar como predeterminada para responder a notificaciones de mensajes"</string>
 </resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index dc7c0df..995a9ea 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -56,8 +56,8 @@
     <string name="mark_read" msgid="579388143288052493">"Marcar como leída"</string>
     <string name="mark_unread" msgid="6245060538061533191">"Marcar como no leída"</string>
     <string name="mute" msgid="9164839998562321569">"Silenciar"</string>
-    <string name="add_star" msgid="3275117671153616270">"Destacar"</string>
-    <string name="remove_star" msgid="9126690774161840733">"No destacar"</string>
+    <string name="add_star" msgid="3275117671153616270">"Añadir estrella"</string>
+    <string name="remove_star" msgid="9126690774161840733">"Eliminar estrella"</string>
     <string name="remove_folder" msgid="2379905457788576297">"Eliminar de <xliff:g id="FOLDERNAME">%1$s</xliff:g>"</string>
     <string name="archive" msgid="5978663590021719939">"Archivar"</string>
     <string name="report_spam" msgid="4106897677959987340">"Marcar como spam"</string>
@@ -149,8 +149,8 @@
     <string name="message_retrying" msgid="5335188121407261331">"Reintentando..."</string>
     <string name="message_failed" msgid="7887650587384601790">"Error"</string>
     <string name="send_failed" msgid="2186285547449865010">"No se ha enviado el mensaje."</string>
-    <string name="me_object_pronoun" msgid="4674452244417913816">"mí"</string>
-    <string name="me_subject_pronoun" msgid="7479328865714008288">"mí"</string>
+    <string name="me_object_pronoun" msgid="4674452244417913816">"yo"</string>
+    <string name="me_subject_pronoun" msgid="7479328865714008288">"yo"</string>
   <plurals name="confirm_delete_conversation">
     <item quantity="one" msgid="7605755011865575440">"¿Eliminar esta conversación?"</item>
     <item quantity="other" msgid="1585660381208712562">"¿Eliminar estas <xliff:g id="COUNT">%1$d</xliff:g> conversaciones?"</item>
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Icono de carpeta"</string>
     <string name="add_account" msgid="5905863370226612377">"Añadir cuenta"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Ignorar sugerencia"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"La opción de sincronización automática está desactivada."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Tocar para activar."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"La opción de sincronización de cuenta está desactivada."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Activar en <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Ajustes de la cuenta"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> sin enviar en <xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"¿Quieres activar la sincronización automática?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Los cambios que realices en todas las aplicaciones y cuentas, no solo en Gmail, se sincronizarán en la Web, otros de tus dispositivos y tu <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>."</string>
@@ -436,7 +431,7 @@
     <string name="view_entire_message" msgid="823281796655014454">"Ver todo el mensaje"</string>
     <string name="eml_loader_error_toast" msgid="6577383216635400167">"No se puede abrir el archivo"</string>
     <string name="help_and_info" msgid="3708286489943154681">"Ayuda"</string>
-    <string name="help_and_feedback" msgid="7211458338163287670">"Ayuda y sugerencias"</string>
+    <string name="help_and_feedback" msgid="7211458338163287670">"Ayuda y opiniones"</string>
     <string name="feedback" msgid="204247008751740034">"Enviar sugerencias"</string>
     <string name="copyright" msgid="3121335168340432582">"©<xliff:g id="YEAR">%1$d</xliff:g> Google Inc."</string>
     <string name="version" msgid="1161745345056656547">"<xliff:g id="APP_NAME">%1$s</xliff:g> versión <xliff:g id="VERSION">%2$s</xliff:g>"</string>
diff --git a/res/values-et-rEE-sw600dp/strings.xml b/res/values-et-rEE-sw600dp/strings.xml
index f250cf4..6877308 100644
--- a/res/values-et-rEE-sw600dp/strings.xml
+++ b/res/values-et-rEE-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ koopia/pimekoopia"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ pimekoopia"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Halda kaustu"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Kasuta vaikeseadena sõnumi märguannetele vastamisel"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ koopia/pimekoopia"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ pimekoopia"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Halda kaustu"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Kasuta vaikeseadena sõnumi märguannetele vastamisel"</string>
 </resources>
diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml
index 7e831ad..8b40bea 100644
--- a/res/values-et-rEE/strings.xml
+++ b/res/values-et-rEE/strings.xml
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Kausta ikoon"</string>
     <string name="add_account" msgid="5905863370226612377">"Lisa konto"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Nõuandest loobumine"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Automaatne sünkroonimine on välja lülitatud."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Puudutage sisselülitamiseks."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Konto sünkroonimine on välja lülitatud."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Lülitage sisse jaotises <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Konto seaded"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"Jaotises <xliff:g id="OUTBOX">%2$s</xliff:g> on <xliff:g id="NUMBER">%1$s</xliff:g> saatmata sõnumit"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Kas lülitada automaatne sünkroonimine sisse?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Kõikides rakendustes ja kontodel (mitte ainult Gmailis) tehtud muudatused sünkroonitakse veebi, teiste seadmete ja seadmega <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>."</string>
diff --git a/res/values-eu-rES-sw600dp/strings.xml b/res/values-eu-rES-sw600dp/strings.xml
deleted file mode 100644
index d2849f0..0000000
--- a/res/values-eu-rES-sw600dp/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-     Copyright (C) 2012 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Cc/Bcc"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Bcc"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Kudeatu karpetak"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Erabili balio lehenetsi gisa mezuen jakinarazpenen erantzunetan"</string>
-</resources>
diff --git a/res/values-eu-rES/strings.xml b/res/values-eu-rES/strings.xml
deleted file mode 100644
index 8a0f678..0000000
--- a/res/values-eu-rES/strings.xml
+++ /dev/null
@@ -1,483 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-     Copyright (C) 2011 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="from" msgid="5159056500059912358">"Igorlea"</string>
-    <string name="to" msgid="3971614275716830581">"Hartzailea"</string>
-    <string name="cc" msgid="8768828862207919684">"Cc"</string>
-    <string name="bcc" msgid="519303553518479171">"Bcc"</string>
-    <string name="subject_hint" msgid="2136470287303571827">"Gaia"</string>
-    <string name="body_hint" msgid="6478994981747057817">"Idatzi mezua"</string>
-    <string name="add_file_attachment" msgid="2604880054248593993">"Erantsi fitxategia"</string>
-    <string name="add_photo_attachment" msgid="7163589794940909528">"Erantsi irudia"</string>
-    <string name="save_draft" msgid="2669523480789672118">"Gorde zirriborroa"</string>
-    <string name="discard" msgid="4905982179911608430">"Baztertu"</string>
-    <string name="compose" msgid="2602861958391035523">"Idatzi"</string>
-  <string-array name="compose_modes">
-    <item msgid="9000553538766397816">"Erantzun"</item>
-    <item msgid="2767793214788399009">"Erantzun guztiei"</item>
-    <item msgid="2758162027982270607">"Birbidali"</item>
-  </string-array>
-    <string name="reply_attribution" msgid="1114972798797833259">"<xliff:g id="PERSON">%s</xliff:g> igorleak hau idatzi du (<xliff:g id="DATE">%s</xliff:g>):"</string>
-    <string name="forward_attribution" msgid="597850048345475752">"---------- Birbidalitako mezua ----------&lt;br&gt;Igorlea: <xliff:g id="FROM">%1$s</xliff:g>&lt;br&gt;Data: <xliff:g id="DATE">%2$s</xliff:g>&lt;br&gt;Gaia: <xliff:g id="SUBJECT">%3$s</xliff:g>&lt;br&gt;Hartzailea: <xliff:g id="TO">%4$s</xliff:g>&lt;br&gt;"</string>
-    <string name="forward_attribution_no_headers" msgid="1828826576779486239">"---------- Birbidalitako mezua ----------"</string>
-    <string name="cc_attribution" msgid="2928584226469388899">"Cc: <xliff:g id="CC">%1$s</xliff:g>&lt;br&gt;"</string>
-    <string name="select_attachment_type" msgid="353236686616663062">"Aukeratu eranskin mota"</string>
-    <string name="too_large_to_attach_single" msgid="2669897137966512530">"Ezin da <xliff:g id="MAXSIZE">%1$s</xliff:g>-ko baino gehiagoko fitxategirik erantsi."</string>
-    <string name="too_large_to_attach_multiple" msgid="1620163295709036343">"Ez dira fitxategi bat edo gehiago erantsi. Muga: <xliff:g id="MAXSIZE">%1$s</xliff:g>."</string>
-    <string name="too_large_to_attach_additional" msgid="4964155563465970480">"Ez da fitxategia erantsi. <xliff:g id="MAXSIZE">%1$s</xliff:g> muga gainditu da."</string>
-    <string name="generic_attachment_problem" msgid="4683974765387240723">"Ezin izan da fitxategia erantsi."</string>
-    <string name="recipient_needed" msgid="319816879398937214">"Gehitu gutxienez hartzaile bat."</string>
-    <string name="recipient_error_dialog_title" msgid="760741480291963706">"Hartzailearen errorea"</string>
-    <string name="confirm_send_title" msgid="4664971589247101530">"Mezua bidali nahi duzu?"</string>
-    <string name="confirm_send_message_with_no_subject" msgid="1442628074022609987">"Ez dago testurik mezuaren gaian."</string>
-    <string name="confirm_send_message_with_no_body" msgid="3329355318700201516">"Ez dago testurik mezuaren gorputzean."</string>
-    <string name="confirm_send_message" msgid="6211518590166222735">"Mezua bidali nahi duzu?"</string>
-    <string name="message_discarded" msgid="6792661321962262024">"Mezua baztertu da."</string>
-    <string name="signature" msgid="3172144541947408374">\n\n"<xliff:g id="SIGNATURE">%s</xliff:g>"</string>
-    <string name="custom_from_account_label" msgid="5042317430007736322">"Bidali mezua:"</string>
-    <string name="send" msgid="4269810089682120826">"Bidali"</string>
-    <string name="mark_read" msgid="579388143288052493">"Mark irakurritako gisa"</string>
-    <string name="mark_unread" msgid="6245060538061533191">"Markatu irakurri gabeko gisa"</string>
-    <string name="mute" msgid="9164839998562321569">"Ezkutatu"</string>
-    <string name="add_star" msgid="3275117671153616270">"Gehitu izarra"</string>
-    <string name="remove_star" msgid="9126690774161840733">"Kendu izarra"</string>
-    <string name="remove_folder" msgid="2379905457788576297">"Kendu <xliff:g id="FOLDERNAME">%1$s</xliff:g> karpetatik"</string>
-    <string name="archive" msgid="5978663590021719939">"Artxibatu"</string>
-    <string name="report_spam" msgid="4106897677959987340">"Markatu spam gisa"</string>
-    <string name="mark_not_spam" msgid="8617774236231366651">"Jakinarazi ez dela spama"</string>
-    <string name="report_phishing" msgid="8454666464488413739">"Markatu phishing gisa"</string>
-    <string name="delete" msgid="6784262386780496958">"Ezabatu"</string>
-    <string name="discard_drafts" msgid="5881484193628472105">"Baztertu zirriborroak"</string>
-    <string name="discard_failed" msgid="7520780769812210279">"Baztertu huts egindako mezuak"</string>
-    <string name="refresh" msgid="1533748989749277511">"Freskatu"</string>
-    <string name="reply" msgid="8337757482824207118">"Erantzun"</string>
-    <string name="reply_all" msgid="5366796103758360957">"Erantzun guztiei"</string>
-    <string name="resume_draft" msgid="1272723181782570649">"Editatu"</string>
-    <string name="forward" msgid="4397585145490426320">"Birbidali"</string>
-    <string name="menu_compose" msgid="4575025207594709432">"Idatzi"</string>
-    <string name="menu_change_folders" msgid="2194946192901276625">"Aldatu karpetaz"</string>
-    <string name="menu_move_to" msgid="7948877550284452830">"Eraman hona:"</string>
-    <string name="menu_move_to_inbox" msgid="258554178236001444">"Eraman sarrera-ontzira"</string>
-    <string name="menu_manage_folders" msgid="8486398523679534519">"Karpetaren ezarpenak"</string>
-    <string name="menu_show_original" msgid="2330398228979616661">"Leheneratu jatorrizko tamaina"</string>
-    <string name="menu_settings" msgid="7993485401501778040">"Ezarpenak"</string>
-    <string name="menu_search" msgid="1949652467806052768">"Bilatu"</string>
-    <string name="drawer_title" msgid="3766219846644975778">"Nabigazioa"</string>
-    <string name="mark_important" msgid="8781680450177768820">"Markatu garrantzitsu gisa"</string>
-    <string name="mark_not_important" msgid="3342258155408116917">"Markatu ez-garrantzitsu gisa"</string>
-    <string name="add_cc_label" msgid="2249679001141195213">"Gehitu Cc/Bcc eremuak"</string>
-    <string name="add_bcc_label" msgid="963745641238037813">"Gehitu Bcc eremua"</string>
-    <string name="quoted_text" msgid="977782904293216533">"Sartu aurreko testua"</string>
-    <string name="quoted_text_label" msgid="2296807722849923934">"Aurreko testua"</string>
-    <string name="respond_inline" msgid="6609746292081928078">"Erantzun txertatuta"</string>
-    <string name="bytes" msgid="651011686747499628">"<xliff:g id="COUNT">%s</xliff:g> B"</string>
-    <string name="kilobytes" msgid="1523463964465770347">"<xliff:g id="COUNT">%s</xliff:g> KB"</string>
-    <string name="megabytes" msgid="4309397368708773323">"<xliff:g id="COUNT">%s</xliff:g> MB"</string>
-    <string name="attachment_image" msgid="6375306026208274564">"Irudia"</string>
-    <string name="attachment_video" msgid="7119476472603939848">"Bideoa"</string>
-    <string name="attachment_audio" msgid="7097658089301809284">"Audioa"</string>
-    <string name="attachment_text" msgid="3485853714965922173">"Testua"</string>
-    <string name="attachment_application_msword" msgid="2110108876623152162">"Dokumentua"</string>
-    <string name="attachment_application_vnd_ms_powerpoint" msgid="425353008963359230">"Aurkezpena"</string>
-    <string name="attachment_application_vnd_ms_excel" msgid="5585781311136609103">"Kalkulu-orria"</string>
-    <string name="attachment_application_pdf" msgid="4207340200944655970">"PDFa"</string>
-    <string name="attachment_unknown" msgid="3360536730101083926">"<xliff:g id="ATTACHMENTEXTENSION">%s</xliff:g> fitxategia"</string>
-    <string name="preview_attachment" msgid="6265457626086113833">"Aurreikusi"</string>
-    <string name="save_attachment" msgid="375685179032130033">"Gorde"</string>
-    <string name="cancel_attachment" msgid="6900093625792891122">"Utzi"</string>
-    <string name="open_attachment" msgid="6100396056314739761">"Ireki"</string>
-    <string name="install_attachment" msgid="8119470822958087928">"Instalatu"</string>
-    <string name="download_again" msgid="8195787340878328119">"Deskargatu berriro"</string>
-    <string name="more_info_attachment" msgid="2899691682394864507">"Informazioa"</string>
-    <string name="no_application_found" msgid="7309485680354949680">"Ez dago eranskina erakuts dezakeen aplikaziorik."</string>
-    <string name="fetching_attachment" msgid="2286628490159574159">"Eranskina eskuratzen"</string>
-    <string name="please_wait" msgid="3953824147776128899">"Itxaron, mesedez…"</string>
-    <string name="saved" msgid="161536102236967534">"Gordeta, <xliff:g id="SIZE">%s</xliff:g>"</string>
-    <string name="download_failed" msgid="3878373998269062395">"Ezin izan da deskargatu. Berriro saiatzeko, ukitu hau."</string>
-    <string name="menu_photo_save_all" msgid="2742869476474613396">"Gorde guztiak"</string>
-    <string name="menu_photo_share" msgid="6410980274832639330">"Partekatu"</string>
-    <string name="menu_photo_share_all" msgid="3049053252719665320">"Partekatu guztiak"</string>
-    <string name="menu_photo_print" msgid="3084679038179342333">"Inprimatu"</string>
-    <string name="saving" msgid="6274238733828387433">"Gordetzen…"</string>
-    <string name="choosertitle_sharevia" msgid="3539537264873337959">"Partekatu honen bidez:"</string>
-    <string name="contextmenu_openlink" msgid="6952228183947135362">"Ireki arakatzailean"</string>
-    <string name="contextmenu_copy" msgid="2584243784216385180">"Kopiatu"</string>
-    <string name="contextmenu_copylink" msgid="8659897702269320063">"Kopiatu estekaren URLa"</string>
-    <string name="contextmenu_view_image" msgid="1031172763893491000">"Ikusi irudia"</string>
-    <string name="contextmenu_dial_dot" msgid="8881095692316726628">"Markatu…"</string>
-    <string name="contextmenu_sms_dot" msgid="5319737001771622657">"Bidali SMSa…"</string>
-    <string name="contextmenu_add_contact" msgid="2310064151427072475">"Gehitu kontaktua"</string>
-    <string name="contextmenu_send_mail" msgid="3834654593200105396">"Bidali mezu elektronikoa"</string>
-    <string name="contextmenu_map" msgid="5118951927399465521">"Mapa"</string>
-    <string name="contextmenu_sharelink" msgid="8670940060477758709">"Partekatu esteka"</string>
-    <string name="contextmenu_help" msgid="4209674157707873384">"Laguntza"</string>
-    <string name="contextmenu_feedback" msgid="8319100902136337085">"Bidali iritzia"</string>
-    <!-- no translation found for num_selected (7990204488812654380) -->
-    <skip />
-  <plurals name="move_conversation">
-    <item quantity="one" msgid="237882018518207244">"Eraman elkarrizketa"</item>
-    <item quantity="other" msgid="6639576653114141743">"Eraman <xliff:g id="ID_1">%1$d</xliff:g> elkarrizketa"</item>
-  </plurals>
-    <string name="content_description" msgid="854320355052962069">"Jasotzailea: <xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g>. Gaia: <xliff:g id="SUBJECT">%3$s</xliff:g>, <xliff:g id="SNIPPET">%4$s</xliff:g> (<xliff:g id="DATE">%5$s</xliff:g>), <xliff:g id="READSTATE">%6$s</xliff:g>"</string>
-    <string name="content_description_today" msgid="1634422834354116955">"Jasotzailea: <xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g>. Gaia: <xliff:g id="SUBJECT">%3$s</xliff:g>, <xliff:g id="SNIPPET">%4$s</xliff:g> (<xliff:g id="TIME">%5$s</xliff:g>), <xliff:g id="READSTATE">%6$s</xliff:g>"</string>
-    <string name="read_string" msgid="5495929677508576520">"elkarrizketa irakurri duzu"</string>
-    <string name="unread_string" msgid="7342558841698083381">"irakurri gabeko elkarrizketa"</string>
-    <string name="filtered_tag" msgid="721666921386074505">"[<xliff:g id="TAG">%1$s</xliff:g>]<xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="badge_and_subject" msgid="3979372269373936750">"<xliff:g id="ID_1">%1$s</xliff:g> <xliff:g id="ID_2">%2$s</xliff:g>"</string>
-  <plurals name="draft">
-    <item quantity="one" msgid="6717535677167943402">"Zirriborroa"</item>
-    <item quantity="other" msgid="1335781147509740039">"Zirriborroak"</item>
-  </plurals>
-    <string name="sending" msgid="5600034886763930499">"Bidaltzen…"</string>
-    <string name="message_retrying" msgid="5335188121407261331">"Berriro saiatzen…"</string>
-    <string name="message_failed" msgid="7887650587384601790">"Huts egin du"</string>
-    <string name="send_failed" msgid="2186285547449865010">"Ez da mezua bidali."</string>
-    <string name="me_object_pronoun" msgid="4674452244417913816">"ni"</string>
-    <string name="me_subject_pronoun" msgid="7479328865714008288">"nik"</string>
-  <plurals name="confirm_delete_conversation">
-    <item quantity="one" msgid="7605755011865575440">"Elkarrizketa ezabatu nahi duzu?"</item>
-    <item quantity="other" msgid="1585660381208712562">"<xliff:g id="COUNT">%1$d</xliff:g> elkarrizketa hauek ezabatu nahi dituzu?"</item>
-  </plurals>
-  <plurals name="confirm_archive_conversation">
-    <item quantity="one" msgid="9105551557653306945">"Elkarrizketa artxibatu nahi duzu?"</item>
-    <item quantity="other" msgid="2001972798185641108">"<xliff:g id="COUNT">%1$d</xliff:g> elkarrizketa hauek artxibatu nahi dituzu?"</item>
-  </plurals>
-  <plurals name="confirm_discard_drafts_conversation">
-    <item quantity="one" msgid="2030421499893210789">"Mezua baztertu nahi duzu?"</item>
-    <item quantity="other" msgid="782234447471532005">"<xliff:g id="COUNT">%1$d</xliff:g> mezuak baztertu nahi dituzu?"</item>
-  </plurals>
-    <string name="confirm_discard_text" msgid="5172680524418848519">"Mezua baztertu nahi duzu?"</string>
-    <string name="loading_conversations" msgid="7255732786298655246">"Kargatzen…"</string>
-    <string name="empty_inbox" msgid="5901734942362315228">"Amaitu duzu! Egun ona izan dezazula."</string>
-    <string name="empty_search" msgid="8564899353449880818">"Ez dugu \"<xliff:g id="SEARCH_QUERY">%1$s</xliff:g>\" bilaketaren emaitzarik aurkitu."</string>
-    <string name="empty_spam_folder" msgid="3288985543286122800">"Ez dago spamik"</string>
-    <string name="empty_trash_folder" msgid="378119063015945020">"Ez dago mezurik zaborrontzian. Eskerrik asko birziklatzeagatik!"</string>
-    <string name="empty_folder" msgid="3227552635613553855">"Ez dago postarik hemen."</string>
-    <string name="getting_messages" msgid="8403333791332403244">"Mezuak kargatzen"</string>
-    <string name="undo" msgid="8256285267701059609">"Desegin"</string>
-  <plurals name="conversation_unstarred">
-    <item quantity="one" msgid="839233699150563831">"<xliff:g id="COUNT">%1$d</xliff:g> elkarrizketari izarra kentzen."</item>
-    <item quantity="other" msgid="7677305734833709789">"<xliff:g id="COUNT">%1$d</xliff:g> elkarrizketari izarra kentzen."</item>
-  </plurals>
-  <plurals name="conversation_muted">
-    <item quantity="one" msgid="3339638225564408438">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ezkutatu da."</item>
-    <item quantity="other" msgid="4276111931404654219">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ezkutatu dira."</item>
-  </plurals>
-  <plurals name="conversation_spammed">
-    <item quantity="one" msgid="6986172030710967687">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; spam gisa markatu da."</item>
-    <item quantity="other" msgid="5900913789259199137">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; spam gisa markatu dira."</item>
-  </plurals>
-  <plurals name="conversation_not_spam">
-    <item quantity="one" msgid="2294904093653094150">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ez-spam gisa markatu da."</item>
-    <item quantity="other" msgid="4966164423991098144">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ez-spam gisa markatu dira."</item>
-  </plurals>
-  <plurals name="conversation_not_important">
-    <item quantity="one" msgid="3824809189993339030">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ez-garrantzitsu gisa markatu da."</item>
-    <item quantity="other" msgid="1215472798075869124">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ez-garrantzitsu gisa markatu dira."</item>
-  </plurals>
-  <plurals name="conversation_phished">
-    <item quantity="one" msgid="4330095881258771201">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; phishing gisa markatu da."</item>
-    <item quantity="other" msgid="9218674052779504277">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; phishing gisa markatu dira."</item>
-  </plurals>
-  <plurals name="conversation_archived">
-    <item quantity="one" msgid="4127890884907503696">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; artxibatu da."</item>
-    <item quantity="other" msgid="7789480176789922968">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; artxibatu dira."</item>
-  </plurals>
-  <plurals name="conversation_deleted">
-    <item quantity="one" msgid="5591889079235938982">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ezabatu da."</item>
-    <item quantity="other" msgid="7060256058737892078">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ezabatu dira."</item>
-  </plurals>
-    <string name="deleted" msgid="7378013910782008375">"Ezabatuta"</string>
-    <string name="archived" msgid="6283673603512713022">"Artxibatuta"</string>
-    <string name="folder_removed" msgid="5656281444688183676">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> karpetatik kendu da"</string>
-  <plurals name="conversation_folder_changed">
-    <item quantity="one" msgid="6463727361987396734">"Karpeta aldatu da."</item>
-    <item quantity="other" msgid="8815390494333090939">"Karpetak aldatu dira."</item>
-  </plurals>
-    <string name="conversation_folder_moved" msgid="6475872337373081683">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> karpetara eraman da"</string>
-    <string name="search_results_header" msgid="1529438451150580188">"Emaitzak"</string>
-    <string name="search_unsupported" msgid="2873920566477359177">"Bilaketa ez da kontu honetan onartzen."</string>
-    <string name="add_label" msgid="3285338046038610902">"Gehitu karpeta"</string>
-    <string name="new_incoming_messages_one" msgid="5933087567495998661">"Erakutsi <xliff:g id="SENDER">%s</xliff:g> kontaktuaren mezu berria."</string>
-  <plurals name="new_incoming_messages_many">
-    <item quantity="other" msgid="4394042684501388790">"Erakutsi <xliff:g id="COUNT">%1$d</xliff:g> mezu berri."</item>
-  </plurals>
-    <string name="date_and_view_details" msgid="2952994746916149969">"<xliff:g id="DATE">%1$s</xliff:g> &lt;a href=\'http://www.example.com\'&gt;Ikusi xehetasunak&lt;/a&gt;"</string>
-    <string name="hide_details" msgid="8018801050702453314">"Ezkutatu xehetasunak"</string>
-    <string name="to_message_header" msgid="3954385178027011919">"hartzailea: <xliff:g id="RECIPIENTS">%1$s</xliff:g>"</string>
-    <string name="contact_info_string" msgid="6484930184867405276">"Erakutsi <xliff:g id="NAME">%1$s</xliff:g> kontaktuaren informazioa"</string>
-    <string name="contact_info_string_default" msgid="6204228921864816351">"Erakutsi kontaktuaren informazioa"</string>
-  <plurals name="show_messages_read">
-    <item quantity="other" msgid="5285673397387128129">"<xliff:g id="COUNT">%1$d</xliff:g> mezu zaharrago"</item>
-  </plurals>
-    <string name="from_heading" msgid="48290556829713090">"Igorlea:"</string>
-    <string name="replyto_heading" msgid="8275255318292059079">"Erantzun honi:"</string>
-    <string name="to_heading" msgid="3495203282540398336">"Hartzailea: "</string>
-    <string name="to_heading_no_space" msgid="679167047628308670">"Hartzaileak:"</string>
-    <string name="cc_heading" msgid="5603892257866345823">"Cc:"</string>
-    <string name="bcc_heading" msgid="1482186590756218269">"Bcc:"</string>
-    <string name="date_heading" msgid="4213063948406397168">"Data:"</string>
-    <string name="show_images" msgid="436044894053204084">"Erakutsi irudiak"</string>
-    <string name="always_show_images" msgid="556087529413707819">"Erakutsi beti igorle honek bidalitako irudiak"</string>
-    <string name="always_show_images_toast" msgid="3763157294047555051">"Igorle honen irudiak automatikoki erakutsiko dira."</string>
-    <string name="address_display_format" msgid="2098008376913966177">"<xliff:g id="NAME">%1$s</xliff:g> <xliff:g id="EMAIL">%2$s</xliff:g>"</string>
-    <string name="address_display_format_with_via_domain" msgid="8108294635074750048">"<xliff:g id="NAME">%1$s</xliff:g> <xliff:g id="EMAIL">%2$s</xliff:g>, <xliff:g id="VIA_DOMAIN">%3$s</xliff:g> bidez"</string>
-    <string name="message_saved" msgid="3291655042310241793">"Mezua zirriborro gisa gorde da."</string>
-    <string name="sending_message" msgid="2487846954946637084">"Mezua bidaltzen…"</string>
-    <string name="invalid_recipient" msgid="9157434699389936584">"<xliff:g id="WRONGEMAIL">%s</xliff:g> helbidea baliogabea da."</string>
-    <string name="show_elided" msgid="3456154624105704327">"Erakutsi aurreko testua"</string>
-    <string name="hide_elided" msgid="5768235486834692733">"▼ Ezkutatu aurreko testua"</string>
-    <string name="message_invite_title" msgid="5985161025144867256">"Egutegiko gonbidapena"</string>
-    <string name="message_invite_calendar_view" msgid="9181966650840809197">"Ikusi egutegian"</string>
-    <string name="message_invite_label_attending" msgid="4194264767870003397">"Joatekoa zara?"</string>
-    <string name="message_invite_accept" msgid="8002758842580134835">"Bai"</string>
-    <string name="message_invite_tentative" msgid="3199418731566655887">"Agian"</string>
-    <string name="message_invite_decline" msgid="6331040872447290777">"Ez"</string>
-    <string name="enumeration_comma" msgid="2848850136844740850">", "</string>
-    <string name="send_anyway" msgid="2727576121007079643">"Bidali halere"</string>
-    <string name="ok" msgid="6178802457914802336">"Ados"</string>
-    <string name="done" msgid="344354738335270292">"Eginda"</string>
-    <string name="cancel" msgid="4831678293149626190">"Utzi"</string>
-    <string name="clear" msgid="765949970989448022">"Garbitu"</string>
-    <string name="next" msgid="2662478712866255138">"Hurrengoa"</string>
-    <string name="previous" msgid="8985379053279804274">"Aurrekoa"</string>
-  <string-array name="sync_status">
-    <item msgid="4600303222943450797">"Behar bezala burutu da"</item>
-    <item msgid="2972425114100316260">"Ez dago konexiorik."</item>
-    <item msgid="8594593386776437871">"Ezin izan da saioa hasi."</item>
-    <item msgid="1375193906551623606">"Segurtasun-errorea."</item>
-    <item msgid="195177374927979967">"Ezin izan da sinkronizatu."</item>
-    <item msgid="8026148967150231130">"Barneko errorea"</item>
-    <item msgid="5442620760791553027">"Zerbitzariaren errorea"</item>
-  </string-array>
-    <string name="tap_to_configure" msgid="137172348280050643">"Ukitu konfiguratzeko"</string>
-    <string name="non_synced_folder_description" msgid="3044618511909304701">"Elkarrizketak ikusteko, sinkronizatu karpeta hau."</string>
-    <string name="tap_to_configure_folder_sync" msgid="3280434399275638071">"Sinkronizatu karpeta"</string>
-    <string name="widget_large_unread_count" msgid="8699435859096455837">"%d+"</string>
-    <string name="large_unseen_count" msgid="3055042669246912518">"<xliff:g id="COUNT">%d</xliff:g>+ berri"</string>
-    <string name="unseen_count" msgid="5509898665569695288">"<xliff:g id="COUNT">%d</xliff:g> berri"</string>
-  <plurals name="actionbar_unread_messages">
-    <item quantity="other" msgid="3863201473731766006">"<xliff:g id="COUNT">%1$d</xliff:g> irakurri gabe"</item>
-  </plurals>
-    <string name="actionbar_large_unread_count" msgid="753635978542372792">"<xliff:g id="COUNT">%1$d</xliff:g>+ irakurri gabe"</string>
-    <string name="view_more_conversations" msgid="8377920000247101901">"Ikusi elkarrizketa gehiago"</string>
-    <string name="loading_conversation" msgid="7931600025861500397">"Kargatzen…"</string>
-    <string name="activity_mailbox_selection" msgid="7489813868539767701">"Aukeratu kontua"</string>
-    <string name="activity_folder_selection" msgid="8375243281001234750">"Aukeratu karpeta"</string>
-    <string name="folder_shortcut_widget_label" msgid="6466292659577092915">"Postako karpeta"</string>
-    <string name="change_folders_selection_dialog_title" msgid="9174464298613273814">"Aldatu karpetaz"</string>
-    <string name="move_to_selection_dialog_title" msgid="4052506464467083621">"Eraman hona:"</string>
-    <string name="search_hint" msgid="4916671414132334289">"Bilatu postan"</string>
-    <!-- no translation found for search_results_loaded (1784879343458807514) -->
-    <skip />
-    <string name="network_error" msgid="5931164247644972255">"Ez dago konexiorik"</string>
-    <string name="retry" msgid="916102442074217293">"Saiatu berriro"</string>
-    <string name="load_more" msgid="8702691358453560575">"Kargatu gehiago"</string>
-    <!-- no translation found for load_attachment (3894318473827290350) -->
-    <skip />
-    <string name="shortcut_name_title" msgid="1562534040126088628">"Eman izena karpetaren lasterbideari"</string>
-    <string name="wait_for_sync_title" msgid="4577632826912823075">"Sinkronizatzeko zain"</string>
-    <string name="not_synced_title" msgid="3600180500934086346">"Ez da kontua sinkronizatu"</string>
-    <string name="wait_for_manual_sync_body" msgid="2823149409451003378">"Kontua ez da automatikoki konfiguratu.\nPosta behin sinkronizatzeko, ukitu "<b>"Sinkronizatu"</b>". Bestela, kontuaren posta automatikoki sinkronizatzeko, ukitu "<b>"Aldatu sinkronizazio-ezarpenak"</b>"."</string>
-    <string name="manual_sync" msgid="2271479734895537848">"Sinkronizatu"</string>
-    <string name="change_sync_settings" msgid="3615852118397055361">"Aldatu sinkronizazio-ezarpenak"</string>
-    <string name="photo_load_failed" msgid="577471721679146999">"Ezin izan da irudia kargatu"</string>
-    <string name="cant_move_or_change_labels" msgid="4155490583610926755">"Ezin dira mezuak mugitu hautapenean kontu bat baino gehiagoko mezuak daudelako."</string>
-    <string name="multiple_new_message_notification_item" msgid="1386588046275174918"><b>"<xliff:g id="SENDER">%1$s</xliff:g>"</b>"   <xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="single_new_message_notification_big_text" msgid="2170154732664242904">"<xliff:g id="SUBJECT">%1$s</xliff:g>\n<xliff:g id="SNIPPET">%2$s</xliff:g>"</string>
-    <string name="ignore_spam_warning" msgid="8760314545535838430">"Egin ez ikusi; fidagarria da."</string>
-    <string name="via_domain" msgid="537951148511529082">"<xliff:g id="VIADOMAIN">%1$s</xliff:g> bidez"</string>
-    <string name="signin" msgid="4699091478139791244">"Hasi saioa"</string>
-    <string name="info" msgid="1357564480946178121">"Informazioa"</string>
-    <string name="report" msgid="4318141326014579036">"Eman honen berri"</string>
-    <string name="sync_error" msgid="1795794969006241678">"Ezin izan da sinkronizatu."</string>
-    <string name="sync_error_message" msgid="4182644657243736635">"Gailuan ez dago behar adina memoria sinkronizatu ahal izateko."</string>
-    <string name="storage" msgid="4783683938444150638">"Memoria"</string>
-    <string name="senders_split_token" msgid="6549228851819460081">", "</string>
-    <string name="draft_count_format" msgid="9122583199850209286">" (<xliff:g id="COUNT">%1$s</xliff:g>)"</string>
-    <string name="all_folders_heading" msgid="9023770187629170967">"Karpeta guztiak"</string>
-    <string name="recent_folders_heading" msgid="8943134955788867702">"Azken karpetak"</string>
-    <string name="message_details_title" msgid="60771875776494764">"Mezuaren xehetasunak"</string>
-    <string name="preference_advance_to_title" msgid="6385669491239514630">"Aurreratu automatikoki"</string>
-  <string-array name="prefEntries_autoAdvance">
-    <item msgid="1505450878799459652">"Berriagoa"</item>
-    <item msgid="8000986144872247139">"Zaharragoa"</item>
-    <item msgid="8015001161633421314">"Elkarrizketa-zerrenda"</item>
-  </string-array>
-  <string-array name="prefSummaries_autoAdvance">
-    <item msgid="8221665977497655719">"Ezabatu ondoren, erakutsi elkarrizketa berriagoa"</item>
-    <item msgid="1721869262893378141">"Ezabatu ondoren, erakutsi elkarrizketa zaharragoa"</item>
-    <item msgid="880913657385630195">"Ezabatu ondoren, erakutsi elkarrizketa-zerrenda"</item>
-  </string-array>
-    <string name="prefDialogTitle_autoAdvance" msgid="5459235590885640678">"Aurreratu hona"</string>
-    <string name="clear_display_images_whitelist_title" msgid="2012677202404471778">"Garbitu irudien onespenak"</string>
-    <string name="clear_display_images_whitelist_dialog_title" msgid="1942692501166848471">"Irudien onarpenak garbitu nahi dituzu?"</string>
-    <string name="clear_display_images_whitelist_dialog_message" msgid="3952553078559373729">"Utzi aurretik baimendutako hartzaileen txertatutako irudiak bistaratzeari."</string>
-    <string name="sender_whitelist_cleared" msgid="2490984995927904030">"Irudiak ez dira automatikoki erakutsiko."</string>
-    <string name="preferences_signature_title" msgid="2318034745474929902">"Sinadura"</string>
-    <string name="preferences_signature_dialog_title" msgid="4801741764511807064">"Sinadura"</string>
-    <string name="preferences_signature_summary_not_set" msgid="3776614319388053784">"Ezarri gabe"</string>
-    <string name="notification_action_reply" msgid="8378725460102575919">"Erantzun"</string>
-    <string name="notification_action_reply_all" msgid="5693469099941000037">"Erantzun guztiei"</string>
-    <string name="notification_action_archive" msgid="2884874164831039047">"Artxibatu"</string>
-    <string name="notification_action_remove_label" msgid="3714785653186750981">"Kendu etiketa"</string>
-    <string name="notification_action_delete" msgid="3201627482564624132">"Ezabatu"</string>
-    <string name="notification_action_undo_archive" msgid="600186958134073582">"Artxibatuta"</string>
-    <string name="notification_action_undo_remove_label" msgid="8341924850540100690">"Etiketa kendu da"</string>
-    <string name="notification_action_undo_delete" msgid="6915612337413587103">"Ezabatuta"</string>
-    <string name="veiled_address" msgid="2670378260196977266"></string>
-    <string name="veiled_alternate_text" msgid="6343564357099807582"></string>
-    <string name="veiled_alternate_text_unknown_person" msgid="6728323554307952217"></string>
-    <string name="veiled_summary_unknown_person" msgid="2122359944161241551"></string>
-    <string name="label_notification_ticker" msgid="323232821061341014">"<xliff:g id="LABEL">%s</xliff:g>: <xliff:g id="NOTIFICATION">%s</xliff:g>"</string>
-  <plurals name="new_messages">
-    <item quantity="one" msgid="3446656407520493241">"<xliff:g id="COUNT">%1$d</xliff:g> mezu berri"</item>
-    <item quantity="other" msgid="3531683811183204615">"<xliff:g id="COUNT">%1$d</xliff:g> mezu berri"</item>
-  </plurals>
-    <string name="single_new_message_notification_title" msgid="7954710563222504868">"<xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="silent_ringtone" msgid="1570794756474381886">"Isila"</string>
-    <string name="preference_removal_action_title" msgid="4703834472477137634">"Artxibatzeko eta ezabatzeko ekintzak"</string>
-  <string-array name="prefEntries_removal_action">
-    <item msgid="954772302016538814">"Erakutsi artxibatzeko aukera soilik"</item>
-    <item msgid="7212690302706180254">"Erakutsi ezabatzeko aukera soilik"</item>
-    <item msgid="2539051197590685708">"Erakutsi artxibatzeko eta ezabatzeko aukerak"</item>
-  </string-array>
-  <string-array name="prefSummaries_removal_action_summary">
-    <item msgid="6877416142040695022">"Erakutsi artxibatzeko aukera soilik"</item>
-    <item msgid="1510017057984222376">"Erakutsi ezabatzeko aukera soilik"</item>
-    <item msgid="3196207224108008441">"Erakutsi artxibatzeko eta ezabatzeko aukerak"</item>
-  </string-array>
-    <string name="prefDialogTitle_removal_action" msgid="266548424110393246">"Artxibatzeko eta ezabatzeko ekintzak"</string>
-    <string name="preferences_default_reply_all_title" msgid="7255858488369635327">"Erantzun guztiei"</string>
-    <string name="preferences_default_reply_all_summary_impl" msgid="895581085692979709">"Erabili balio lehenetsi gisa mezuen erantzunetan"</string>
-    <string name="preference_swipe_title_archive" msgid="9122333537761282714">"Artxibatzeko, pasatu hatza"</string>
-    <string name="preference_swipe_title_delete" msgid="4860474024917543711">"Ezabatzeko, pasatu hatza"</string>
-    <string name="preference_swipe_description" msgid="3036560323237015010">"Elkarrizketa-zerrendan"</string>
-    <string name="preference_sender_image_title" msgid="7890813537985591865">"Igorlearen irudia"</string>
-    <string name="preference_sender_image_description" msgid="3586817690132199889">"Erakutsi izenaren ondoan elkarrizketen zerrendan"</string>
-    <string name="empty_trash" msgid="3385937024924728399">"Hustu zaborrontzia"</string>
-    <string name="empty_spam" msgid="2911988289997281371">"Hustu Spam karpeta"</string>
-    <string name="empty_trash_dialog_title" msgid="2104898489663621508">"Zaborrontzia hustu nahi duzu?"</string>
-    <string name="empty_spam_dialog_title" msgid="1130319045917820569">"Spam karpeta hustu nahi duzu?"</string>
-  <plurals name="empty_folder_dialog_message">
-    <item quantity="one" msgid="3315412388217832914">"<xliff:g id="COUNT">%1$d</xliff:g> mezu betiko ezabatuko da."</item>
-    <item quantity="other" msgid="263840304486020101">"<xliff:g id="COUNT">%1$d</xliff:g> mezu betiko ezabatuko dira."</item>
-  </plurals>
-    <string name="drawer_open" msgid="2285557278907103851">"Ireki nabigazio-panel lerrakorra"</string>
-    <string name="drawer_close" msgid="2065829742127544297">"Itxi nabigazio-panel lerrakorra"</string>
-    <string name="conversation_photo_welcome_text" msgid="836483155429003787">"Ukitu igorlearen irudia elkarrizketa hori hautatzeko."</string>
-    <string name="long_press_to_select_tip" msgid="1660881999120625177">"Eduki ukituta elkarrizketa bat hautatzeko eta, ondoren, ukitu gehiago hautatzeko."</string>
-    <string name="folder_icon_desc" msgid="6272938864914794739">"Karpetaren ikonoa"</string>
-    <string name="add_account" msgid="5905863370226612377">"Gehitu kontua"</string>
-    <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Baztertu aholkua"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Sinkronizazio automatikoa desaktibatuta dago."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Ukitu aktibatzeko."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Kontuaren sinkronizazioa desaktibatuta dago."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Aktibatu <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g> atalean."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Kontuaren ezarpenak"</string>
-    <string name="unsent_messages_in_outbox" msgid="146722891559469589">"Bidali gabeko <xliff:g id="NUMBER">%1$s</xliff:g> mezu daude <xliff:g id="OUTBOX">%2$s</xliff:g>n"</string>
-    <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Sinkronizazio automatikoa aktibatu nahi duzu?"</string>
-    <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Aplikazio eta kontu guztietan (ez soilik Gmail) egiten dituzun aldaketak webgunearekin, zure beste gailuekin eta <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>rekin sinkronizatuko dira."</string>
-    <string name="phone" msgid="4142617042507912053">"telefonoa"</string>
-    <string name="tablet" msgid="4593581125469224791">"tableta"</string>
-    <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="7239160845196929866">"Aktibatu"</string>
-    <string name="show_n_more_folders" msgid="5769610839632786654">"Erakutsi <xliff:g id="NUMBER">%1$s</xliff:g> karpeta gehiago"</string>
-    <string name="hide_folders" msgid="7618891933409521283">"Ezkutatu karpetak"</string>
-    <string name="print" msgid="7987949243936577207">"Inprimatu"</string>
-    <string name="print_all" msgid="4011022762279519941">"Inprimatu guztiak"</string>
-  <plurals name="num_messages">
-    <item quantity="one" msgid="8071234386915191851">"<xliff:g id="COUNT">%1$d</xliff:g> mezu"</item>
-    <item quantity="other" msgid="962415099931188360">"<xliff:g id="COUNT">%1$d</xliff:g> mezu"</item>
-  </plurals>
-    <string name="date_message_received_print" msgid="4168417403884350040">"<xliff:g id="DAY_AND_DATE">%1$s</xliff:g> (<xliff:g id="TIME">%2$s</xliff:g>)"</string>
-    <string name="draft_to_heading" msgid="7370121943946205024">"Hartzaileak:"</string>
-    <string name="draft_heading" msgid="7032951343184552800">"Zirriborroa"</string>
-    <string name="quoted_text_hidden_print" msgid="5256754205675159141">"Aurreko testua ezkutatuta"</string>
-  <plurals name="num_attachments">
-    <item quantity="one" msgid="5494465717267988888">"<xliff:g id="COUNT">%1$d</xliff:g> eranskin"</item>
-    <item quantity="other" msgid="5422167728480739361">"<xliff:g id="COUNT">%1$d</xliff:g> eranskin"</item>
-  </plurals>
-    <string name="no_subject" msgid="5622708348540036959">"(gairik ez)"</string>
-    <string name="vacation_responder" msgid="5570132559074523806">"Erantzun automatikoa"</string>
-    <string name="preferences_vacation_responder_title" msgid="2268482117730576123">"Erantzun automatikoa"</string>
-    <string name="vacation_responder_body_hint_text" msgid="9087613123105158494">"Mezua"</string>
-    <string name="send_to_contacts_text" msgid="124432913980620545">"Bidali kontaktuei soilik"</string>
-    <string name="send_to_domain_text" msgid="5064559546745918393">"Bidali <xliff:g id="DOMAIN">%1$s</xliff:g> domeinura soilik"</string>
-    <string name="pick_start_date_title" msgid="2274665037355224165">"Hasiera-data"</string>
-    <string name="pick_end_date_title" msgid="733396083649496600">"Amaiera-data (aukerakoa)"</string>
-    <string name="date_not_set" msgid="3251555782945051904">"Ezarri gabe"</string>
-    <string name="set_end_date_dialog_title" msgid="7543009262788808443">"Amaiera-data (aukerakoa)"</string>
-    <string name="custom_date" msgid="5794846334232367838">"Pertsonalizatua"</string>
-    <string name="date_none" msgid="1061426502665431412">"Bat ere ez"</string>
-    <string name="discard_changes" msgid="5699760550972324746">"Aldaketak baztertu nahi dituzu?"</string>
-    <string name="vacation_responder_changes_saved" msgid="91448817268121249">"Erantzun automatikoaren aldaketak gorde dira"</string>
-    <string name="vacation_responder_changes_discarded" msgid="21756037735539983">"Erantzun automatikoaren aldaketak baztertu dira"</string>
-    <string name="vacation_responder_off" msgid="4429909341193366667">"Desaktibatuta"</string>
-    <string name="vacation_responder_on" msgid="4913238379320882449">"Aktibatuta. Hasiera-data: <xliff:g id="DATE">%1$s</xliff:g>"</string>
-    <string name="vacation_responder_on_with_end_date" msgid="4360941815371475955">"Aktibatuta: <xliff:g id="START_DATE">%1$s</xliff:g> - <xliff:g id="END_DATE">%2$s</xliff:g>"</string>
-    <string name="vacation_responder_empty_subject_and_body_warning" msgid="6233629618520852439">"Gehitu gaia edo mezua"</string>
-    <string name="view_entire_message" msgid="823281796655014454">"Ikusi mezu osoa"</string>
-    <string name="eml_loader_error_toast" msgid="6577383216635400167">"Ezin da fitxategia ireki"</string>
-    <string name="help_and_info" msgid="3708286489943154681">"Laguntza"</string>
-    <string name="help_and_feedback" msgid="7211458338163287670">"Laguntza eta iritziak"</string>
-    <string name="feedback" msgid="204247008751740034">"Bidali iritzia"</string>
-    <string name="copyright" msgid="3121335168340432582">"©<xliff:g id="YEAR">%1$d</xliff:g> Google Inc."</string>
-    <string name="version" msgid="1161745345056656547">"<xliff:g id="APP_NAME">%1$s</xliff:g>, <xliff:g id="VERSION">%2$s</xliff:g> bertsioa"</string>
-    <string name="view_app_page" msgid="3241990517052398927"></string>
-    <string name="print_dialog" msgid="8895536548487605661">"Inprimatu…"</string>
-    <string name="copyright_information" msgid="971422874488783312">"Copyright-informazioa"</string>
-    <string name="privacy_policy" msgid="212094623396418302">"Pribatutasun-gidalerroak"</string>
-    <string name="open_source_licenses" msgid="8643615555920977752">"Kode irekiko lizentziak"</string>
-    <string name="reply_choice_yes" msgid="3327633032975373220">"Bai"</string>
-    <string name="reply_choice_no" msgid="7068775605915475207">"Ez"</string>
-    <string name="reply_choice_ok" msgid="7881073621845053152">"Ados"</string>
-    <string name="reply_choice_hehe" msgid="6054314968043050748">"Kar-kar"</string>
-    <string name="reply_choice_thanks" msgid="4978961954288364694">"Eskerrik asko"</string>
-    <string name="reply_choice_i_agree" msgid="2496652737796884298">"Ados"</string>
-    <string name="reply_choice_nice" msgid="4465894941302838676">"Ederki"</string>
-    <string name="reply_on_my_way" msgid="5645003971107444269">"Banoa"</string>
-    <string name="reply_choice_later" msgid="4629219072859486413">"Ados, geroago erantzungo dizut"</string>
-    <string name="reply_choice_smiling_face" msgid="1772253938506548631">":)"</string>
-    <string name="reply_choice_frowning_face" msgid="6260338807944002651">":("</string>
-    <string name="preference_header_action_confirmations" msgid="3922674681156121948">"Ekintzen berrespenak"</string>
-    <string name="preference_confirm_before_delete_title" msgid="7563587174619033835">"Berretsi ezabatu aurretik"</string>
-    <string name="preference_confirm_before_archive_title" msgid="7318645995655875718">"Berretsi artxibatu aurretik"</string>
-    <string name="preference_confirm_before_send_title" msgid="4136585783513077039">"Berretsi bidali aurretik"</string>
-    <string name="preferences_conversation_mode_title" msgid="389352009651720838">"Doitu mezuak automatikoki"</string>
-    <string name="preferences_conversation_mode_summary" msgid="5730999743867653106">"Doitu mezuak pantailaren tamainara"</string>
-    <string name="preferences_disable_snap_headers_title" msgid="7257824136988429629">"Mezuei buruzko ekintzak"</string>
-  <string-array name="prefSummaries_snapHeader">
-    <item msgid="43373293784193461">"Erakutsi beti mezuei buruzko ekintzak pantailaren goialdean"</item>
-    <item msgid="1765271305989996747">"Erakutsi mezuei buruzko ekintzak pantailaren goialdean orientazio bertikalean bakarrik"</item>
-    <item msgid="6311113076575333488">"Ez erakutsi mezuei buruzko ekintzarik mezuen goiburutik kanpo"</item>
-  </string-array>
-  <string-array name="prefEntries_snapHeader">
-    <item msgid="6906986566816683587">"Erakutsi beti"</item>
-    <item msgid="113299655708990672">"Erakutsi orientazio bertikalean bakarrik"</item>
-    <item msgid="4403750311175924065">"Ez erakutsi"</item>
-  </string-array>
-    <string name="clear_history_title" msgid="5536216295725760357">"Garbitu bilaketa-historia"</string>
-    <string name="search_history_cleared" msgid="1461946302763342640">"Bilaketa-historia garbitu da."</string>
-    <string name="clear_history_dialog_title" msgid="3503603389704365385">"Bilaketa-historia garbitu nahi duzu?"</string>
-    <string name="clear_history_dialog_message" msgid="5202922561632407778">"Orain arte egin dituzun bilaketa guztiak kenduko dira."</string>
-    <string name="manage_accounts_menu_item" msgid="4734660452395086786">"Kudeatu kontuak"</string>
-    <string name="general_preferences_title" msgid="4212138728220418162">"Ezarpen orokorrak"</string>
-    <string name="activity_preferences" msgid="8966077432517613292">"Ezarpenak"</string>
-</resources>
diff --git a/res/values-fa-sw600dp/strings.xml b/res/values-fa-sw600dp/strings.xml
index 5647aca..0bdb119 100644
--- a/res/values-fa-sw600dp/strings.xml
+++ b/res/values-fa-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ گیرندهٔ کپی/گیرنده مخفی"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ گیرنده مخفی"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"مدیریت پوشه‌ها"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"به عنوان پیش‌فرض برای پاسخ به اعلان‌های پیام استفاده شود"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ گیرندهٔ کپی/گیرنده مخفی"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ گیرنده مخفی"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"مدیریت پوشه‌ها"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"به عنوان پیش‌فرض برای پاسخ به اعلان‌های پیام استفاده شود"</string>
 </resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index cee1829..dedcbd2 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -65,7 +65,7 @@
     <string name="report_phishing" msgid="8454666464488413739">"گزارش فیشینگ"</string>
     <string name="delete" msgid="6784262386780496958">"حذف"</string>
     <string name="discard_drafts" msgid="5881484193628472105">"صرفنظر کردن از پیش‌نویس‌ها"</string>
-    <string name="discard_failed" msgid="7520780769812210279">"صرف‌نظر انجام نشد"</string>
+    <string name="discard_failed" msgid="7520780769812210279">"نادیده گرفته نشد"</string>
     <string name="refresh" msgid="1533748989749277511">"بازخوانی"</string>
     <string name="reply" msgid="8337757482824207118">"پاسخ"</string>
     <string name="reply_all" msgid="5366796103758360957">"پاسخ به همه"</string>
@@ -260,10 +260,10 @@
     <string name="previous" msgid="8985379053279804274">"قبلی"</string>
   <string-array name="sync_status">
     <item msgid="4600303222943450797">"موفق شدید"</item>
-    <item msgid="2972425114100316260">"اتصال برقرار نیست."</item>
-    <item msgid="8594593386776437871">"ورود به برنامه انجام نشد."</item>
-    <item msgid="1375193906551623606">"خطای امنیتی."</item>
-    <item msgid="195177374927979967">"همگام‌سازی انجام نشد."</item>
+    <item msgid="2835492307658712596">"اتصال برقرار نیست"</item>
+    <item msgid="5932644761344898987">"ورود به سیستم ممکن نیست"</item>
+    <item msgid="7335227237106118306">"خطای امنیتی"</item>
+    <item msgid="8148525741623865182">"همگام‌سازی نشد"</item>
     <item msgid="8026148967150231130">"خطای داخلی"</item>
     <item msgid="5442620760791553027">"خطای سرور"</item>
   </string-array>
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"نماد پوشه"</string>
     <string name="add_account" msgid="5905863370226612377">"افزودن حساب"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"رد کردن نکته راهنما"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"همگام‌سازی خودکار خاموش است."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"برای روشن کردن لمس کنید."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"همگام‌سازی حساب خاموش است."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"همگام‌سازی را در <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g> روشن کنید."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"تنظیمات حساب"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> پیام ارسال نشده در <xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"همگام‌سازی خودکار روشن شود؟"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"‏تغییراتی که در تمام برنامه‌ها و حساب‌ها ایجاد می‌کنید نه فقط Gmail، بین وب، سایر دستگاه‌هایتان و <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g> شما همگام‌سازی می‌شود."</string>
diff --git a/res/values-fi-sw600dp/strings.xml b/res/values-fi-sw600dp/strings.xml
index 7c33b04..60da2c7 100644
--- a/res/values-fi-sw600dp/strings.xml
+++ b/res/values-fi-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Kopio/piilokopio"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Piilokopio"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Hallinnoi kansioita"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Käytä oletuksena vastauksissa viesti-ilmoituksiin"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ Kopio/piilokopio"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ Piilokopio"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Hallinnoi kansioita"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Käytä oletuksena vastauksissa viesti-ilmoituksiin"</string>
 </resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 76ba894..a638357 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Kansiokuvake"</string>
     <string name="add_account" msgid="5905863370226612377">"Lisää tili"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Hylkää vinkki"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Automaattinen synkronointi ei ole käytössä."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Ota käyttöön koskettamalla."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Tilin synkronointi ei ole käytössä."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Ota käyttöön täällä: <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Tilin asetukset"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="OUTBOX">%2$s</xliff:g>: <xliff:g id="NUMBER">%1$s</xliff:g> lähettämätöntä viestiä"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Otetaanko automaattinen synkronointi käyttöön?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Gmailiin ja kaikkiin muihin sovelluksiin ja tileihin tekemäsi muutokset synkronoidaan seuraavissa kohteissa: verkko, muut laitteet ja <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>."</string>
diff --git a/res/values-fr-rCA-sw600dp/strings.xml b/res/values-fr-rCA-sw600dp/strings.xml
index ac66844..c7ac392 100644
--- a/res/values-fr-rCA-sw600dp/strings.xml
+++ b/res/values-fr-rCA-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Cc/Cci"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Cci"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Gérer les dossiers"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Utiliser par défaut pour les réponses aux notifications de messages"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ Cc/Cci"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ Cci"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Gérer les dossiers"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Utiliser par défaut pour les réponses aux notifications de messages"</string>
 </resources>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 616f22b..272c546 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Icône de dossier"</string>
     <string name="add_account" msgid="5905863370226612377">"Ajouter un compte"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Masquer le conseil"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"La synchronisation automatique est désactivée."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Touchez ici pour activer la synchronisation automatique"</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"La synchronisation de votre compte est désactivée."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Activer dans « <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g> »."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Paramètres de compte"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> message(s) non envoyé(s) dans <xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Activer la synchronisation automatique?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Les modifications que vous apporterez dans l\'ensemble des applications et des comptes, pas seulement dans Gmail, seront synchronisées avec le Web, vos autres appareils et votre <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>."</string>
@@ -441,7 +436,7 @@
     <string name="copyright" msgid="3121335168340432582">"© <xliff:g id="YEAR">%1$d</xliff:g> Google Inc."</string>
     <string name="version" msgid="1161745345056656547">"<xliff:g id="APP_NAME">%1$s</xliff:g> version <xliff:g id="VERSION">%2$s</xliff:g>"</string>
     <string name="view_app_page" msgid="3241990517052398927"></string>
-    <string name="print_dialog" msgid="8895536548487605661">"Imprimer..."</string>
+    <string name="print_dialog" msgid="8895536548487605661">"Impression en cours…"</string>
     <string name="copyright_information" msgid="971422874488783312">"Droits d\'auteur"</string>
     <string name="privacy_policy" msgid="212094623396418302">"Politique confidentialité"</string>
     <string name="open_source_licenses" msgid="8643615555920977752">"Licences logiciel libre"</string>
@@ -453,7 +448,7 @@
     <string name="reply_choice_i_agree" msgid="2496652737796884298">"Je suis d\'accord"</string>
     <string name="reply_choice_nice" msgid="4465894941302838676">"Bien"</string>
     <string name="reply_on_my_way" msgid="5645003971107444269">"En chemin"</string>
-    <string name="reply_choice_later" msgid="4629219072859486413">"Je te réponds plus tard"</string>
+    <string name="reply_choice_later" msgid="4629219072859486413">"OK, je te réponds plus tard"</string>
     <string name="reply_choice_smiling_face" msgid="1772253938506548631">":)"</string>
     <string name="reply_choice_frowning_face" msgid="6260338807944002651">":("</string>
     <string name="preference_header_action_confirmations" msgid="3922674681156121948">"Confirmations des actions"</string>
diff --git a/res/values-fr-sw600dp/strings.xml b/res/values-fr-sw600dp/strings.xml
index b42ff6a..dba5e0f 100644
--- a/res/values-fr-sw600dp/strings.xml
+++ b/res/values-fr-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Cc/Cci"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Cci"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Gérer les dossiers"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Utiliser par défaut pour les réponses aux notifications de messages"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ Cc/Cci"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ Cci"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Gérer les dossiers"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Utiliser par défaut pour les réponses aux notifications de messages"</string>
 </resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 6397496..b711c2b 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -204,8 +204,8 @@
     <item quantity="one" msgid="5591889079235938982">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; conversation supprimée."</item>
     <item quantity="other" msgid="7060256058737892078">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; conversations supprimées."</item>
   </plurals>
-    <string name="deleted" msgid="7378013910782008375">"Supprimé"</string>
-    <string name="archived" msgid="6283673603512713022">"Archivé"</string>
+    <string name="deleted" msgid="7378013910782008375">"Supprimé."</string>
+    <string name="archived" msgid="6283673603512713022">"Archivé."</string>
     <string name="folder_removed" msgid="5656281444688183676">"Supprimé de <xliff:g id="FOLDERNAME">%1$s</xliff:g>"</string>
   <plurals name="conversation_folder_changed">
     <item quantity="one" msgid="6463727361987396734">"Dossier modifié."</item>
@@ -220,7 +220,7 @@
     <item quantity="other" msgid="4394042684501388790">"Afficher les <xliff:g id="COUNT">%1$d</xliff:g> nouveaux messages"</item>
   </plurals>
     <string name="date_and_view_details" msgid="2952994746916149969">"<xliff:g id="DATE">%1$s</xliff:g> &lt;a href=\'http://www.example.com\'&gt;Afficher les détails&lt;/a&gt;"</string>
-    <string name="hide_details" msgid="8018801050702453314">"Masquer les infos détaillées"</string>
+    <string name="hide_details" msgid="8018801050702453314">"Masquer les informations détaillées"</string>
     <string name="to_message_header" msgid="3954385178027011919">"à <xliff:g id="RECIPIENTS">%1$s</xliff:g>"</string>
     <string name="contact_info_string" msgid="6484930184867405276">"Afficher les coordonnées de <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="contact_info_string_default" msgid="6204228921864816351">"Afficher les coordonnées de l\'expéditeur"</string>
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Icône Dossier"</string>
     <string name="add_account" msgid="5905863370226612377">"Ajouter un compte"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Masquer le conseil"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"La synchronisation automatique est désactivée."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Appuyer ici pour activer la fonctionnalité"</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"La synchronisation de votre compte est désactivée."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Activer dans <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>"</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Paramètres de compte"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> message(s) non envoyé(s) dans <xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Activer la synchronisation automatique ?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Les modifications que vous apporterez dans l\'ensemble des applications et des comptes, pas seulement dans Gmail, seront synchronisées avec le Web, vos autres appareils et votre <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>."</string>
diff --git a/res/values-gl-rES-sw600dp/strings.xml b/res/values-gl-rES-sw600dp/strings.xml
deleted file mode 100644
index 5cc2be1..0000000
--- a/res/values-gl-rES-sw600dp/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-     Copyright (C) 2012 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Cc/Cco"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Cco"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Xestionar cartafoles"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Usar como predeterminado para responder notificacións de mensaxes"</string>
-</resources>
diff --git a/res/values-gl-rES/strings.xml b/res/values-gl-rES/strings.xml
deleted file mode 100644
index 734f720..0000000
--- a/res/values-gl-rES/strings.xml
+++ /dev/null
@@ -1,483 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-     Copyright (C) 2011 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="from" msgid="5159056500059912358">"De"</string>
-    <string name="to" msgid="3971614275716830581">"Para"</string>
-    <string name="cc" msgid="8768828862207919684">"Cc"</string>
-    <string name="bcc" msgid="519303553518479171">"Cco"</string>
-    <string name="subject_hint" msgid="2136470287303571827">"Asunto"</string>
-    <string name="body_hint" msgid="6478994981747057817">"Redactar correo electrónico"</string>
-    <string name="add_file_attachment" msgid="2604880054248593993">"Anexar ficheiro"</string>
-    <string name="add_photo_attachment" msgid="7163589794940909528">"Anexar imaxe"</string>
-    <string name="save_draft" msgid="2669523480789672118">"Gardar borrador"</string>
-    <string name="discard" msgid="4905982179911608430">"Descartar"</string>
-    <string name="compose" msgid="2602861958391035523">"Redactar"</string>
-  <string-array name="compose_modes">
-    <item msgid="9000553538766397816">"Responder"</item>
-    <item msgid="2767793214788399009">"Responder a todos"</item>
-    <item msgid="2758162027982270607">"Reenviar"</item>
-  </string-array>
-    <string name="reply_attribution" msgid="1114972798797833259">"O <xliff:g id="DATE">%s</xliff:g>, <xliff:g id="PERSON">%s</xliff:g> escribiu:"</string>
-    <string name="forward_attribution" msgid="597850048345475752">"---------- Mensaxe reenviada ----------&lt;br&gt;De: <xliff:g id="FROM">%1$s</xliff:g>&lt;br&gt;Data: <xliff:g id="DATE">%2$s</xliff:g>&lt;br&gt;Asunto: <xliff:g id="SUBJECT">%3$s</xliff:g>&lt;br&gt;Para: <xliff:g id="TO">%4$s</xliff:g>&lt;br&gt;"</string>
-    <string name="forward_attribution_no_headers" msgid="1828826576779486239">"---------- Mensaxe reenviada ----------"</string>
-    <string name="cc_attribution" msgid="2928584226469388899">"Cc: <xliff:g id="CC">%1$s</xliff:g>&lt;br&gt;"</string>
-    <string name="select_attachment_type" msgid="353236686616663062">"Selecciona o tipo de anexo"</string>
-    <string name="too_large_to_attach_single" msgid="2669897137966512530">"Non se poden anexar ficheiros de máis de <xliff:g id="MAXSIZE">%1$s</xliff:g>."</string>
-    <string name="too_large_to_attach_multiple" msgid="1620163295709036343">"Non se anexaron un ou máis ficheiros. Límite: <xliff:g id="MAXSIZE">%1$s</xliff:g>."</string>
-    <string name="too_large_to_attach_additional" msgid="4964155563465970480">"Non se anexou o ficheiro. Alcanzouse o límite de <xliff:g id="MAXSIZE">%1$s</xliff:g>."</string>
-    <string name="generic_attachment_problem" msgid="4683974765387240723">"Non se puido anexar o ficheiro."</string>
-    <string name="recipient_needed" msgid="319816879398937214">"Engade polo menos un destinatario."</string>
-    <string name="recipient_error_dialog_title" msgid="760741480291963706">"Erro de destinatario"</string>
-    <string name="confirm_send_title" msgid="4664971589247101530">"Enviar mensaxe?"</string>
-    <string name="confirm_send_message_with_no_subject" msgid="1442628074022609987">"Non hai texto no asunto da mensaxe."</string>
-    <string name="confirm_send_message_with_no_body" msgid="3329355318700201516">"Non hai texto no corpo da mensaxe."</string>
-    <string name="confirm_send_message" msgid="6211518590166222735">"Enviar esta mensaxe?"</string>
-    <string name="message_discarded" msgid="6792661321962262024">"Mensaxe descartada"</string>
-    <string name="signature" msgid="3172144541947408374">\n\n"<xliff:g id="SIGNATURE">%s</xliff:g>"</string>
-    <string name="custom_from_account_label" msgid="5042317430007736322">"Enviar como:"</string>
-    <string name="send" msgid="4269810089682120826">"Enviar"</string>
-    <string name="mark_read" msgid="579388143288052493">"Marcar como lida"</string>
-    <string name="mark_unread" msgid="6245060538061533191">"Marcar como non lida"</string>
-    <string name="mute" msgid="9164839998562321569">"Silenciar"</string>
-    <string name="add_star" msgid="3275117671153616270">"Engadir estrela"</string>
-    <string name="remove_star" msgid="9126690774161840733">"Eliminar estrela"</string>
-    <string name="remove_folder" msgid="2379905457788576297">"Eliminar de <xliff:g id="FOLDERNAME">%1$s</xliff:g>"</string>
-    <string name="archive" msgid="5978663590021719939">"Arquivar"</string>
-    <string name="report_spam" msgid="4106897677959987340">"Denunciar spam"</string>
-    <string name="mark_not_spam" msgid="8617774236231366651">"Informar de que non é spam"</string>
-    <string name="report_phishing" msgid="8454666464488413739">"Denunciar phishing"</string>
-    <string name="delete" msgid="6784262386780496958">"Eliminar"</string>
-    <string name="discard_drafts" msgid="5881484193628472105">"Descartar borradores"</string>
-    <string name="discard_failed" msgid="7520780769812210279">"Erro ao descartar"</string>
-    <string name="refresh" msgid="1533748989749277511">"Actualizar"</string>
-    <string name="reply" msgid="8337757482824207118">"Responder"</string>
-    <string name="reply_all" msgid="5366796103758360957">"Responder a todos"</string>
-    <string name="resume_draft" msgid="1272723181782570649">"Editar"</string>
-    <string name="forward" msgid="4397585145490426320">"Reenviar"</string>
-    <string name="menu_compose" msgid="4575025207594709432">"Redactar"</string>
-    <string name="menu_change_folders" msgid="2194946192901276625">"Cambiar cartafoles"</string>
-    <string name="menu_move_to" msgid="7948877550284452830">"Mover a"</string>
-    <string name="menu_move_to_inbox" msgid="258554178236001444">"Mover á caixa de entrada"</string>
-    <string name="menu_manage_folders" msgid="8486398523679534519">"Configuración do cartafol"</string>
-    <string name="menu_show_original" msgid="2330398228979616661">"Volver a tamaño orixinal"</string>
-    <string name="menu_settings" msgid="7993485401501778040">"Configuración"</string>
-    <string name="menu_search" msgid="1949652467806052768">"Buscar"</string>
-    <string name="drawer_title" msgid="3766219846644975778">"Navegación"</string>
-    <string name="mark_important" msgid="8781680450177768820">"Marcar como importante"</string>
-    <string name="mark_not_important" msgid="3342258155408116917">"Marcar como non importante"</string>
-    <string name="add_cc_label" msgid="2249679001141195213">"Engadir Cc/Cco"</string>
-    <string name="add_bcc_label" msgid="963745641238037813">"Engadir Cco"</string>
-    <string name="quoted_text" msgid="977782904293216533">"Incluír texto citado"</string>
-    <string name="quoted_text_label" msgid="2296807722849923934">"Citar texto"</string>
-    <string name="respond_inline" msgid="6609746292081928078">"Responder en liña"</string>
-    <string name="bytes" msgid="651011686747499628">"<xliff:g id="COUNT">%s</xliff:g> B"</string>
-    <string name="kilobytes" msgid="1523463964465770347">"<xliff:g id="COUNT">%s</xliff:g> kB"</string>
-    <string name="megabytes" msgid="4309397368708773323">"<xliff:g id="COUNT">%s</xliff:g> MB"</string>
-    <string name="attachment_image" msgid="6375306026208274564">"Imaxe"</string>
-    <string name="attachment_video" msgid="7119476472603939848">"Vídeo"</string>
-    <string name="attachment_audio" msgid="7097658089301809284">"Audio"</string>
-    <string name="attachment_text" msgid="3485853714965922173">"Texto"</string>
-    <string name="attachment_application_msword" msgid="2110108876623152162">"Documento"</string>
-    <string name="attachment_application_vnd_ms_powerpoint" msgid="425353008963359230">"Presentación"</string>
-    <string name="attachment_application_vnd_ms_excel" msgid="5585781311136609103">"Folla de cálculo"</string>
-    <string name="attachment_application_pdf" msgid="4207340200944655970">"PDF"</string>
-    <string name="attachment_unknown" msgid="3360536730101083926">"Ficheiro <xliff:g id="ATTACHMENTEXTENSION">%s</xliff:g>"</string>
-    <string name="preview_attachment" msgid="6265457626086113833">"Vista previa"</string>
-    <string name="save_attachment" msgid="375685179032130033">"Gardar"</string>
-    <string name="cancel_attachment" msgid="6900093625792891122">"Cancelar"</string>
-    <string name="open_attachment" msgid="6100396056314739761">"Abrir"</string>
-    <string name="install_attachment" msgid="8119470822958087928">"Instalar"</string>
-    <string name="download_again" msgid="8195787340878328119">"Descargar de novo"</string>
-    <string name="more_info_attachment" msgid="2899691682394864507">"Información"</string>
-    <string name="no_application_found" msgid="7309485680354949680">"Ningunha aplicación pode abrir este anexo para visualizalo."</string>
-    <string name="fetching_attachment" msgid="2286628490159574159">"Recuperando anexo"</string>
-    <string name="please_wait" msgid="3953824147776128899">"Agarda..."</string>
-    <string name="saved" msgid="161536102236967534">"Gardado, <xliff:g id="SIZE">%s</xliff:g>"</string>
-    <string name="download_failed" msgid="3878373998269062395">"Non se puido descargar. Toca para tentalo de novo."</string>
-    <string name="menu_photo_save_all" msgid="2742869476474613396">"Gardar todos"</string>
-    <string name="menu_photo_share" msgid="6410980274832639330">"Compartir"</string>
-    <string name="menu_photo_share_all" msgid="3049053252719665320">"Compartir todo"</string>
-    <string name="menu_photo_print" msgid="3084679038179342333">"Imprimir"</string>
-    <string name="saving" msgid="6274238733828387433">"Gardando…"</string>
-    <string name="choosertitle_sharevia" msgid="3539537264873337959">"Compartir a través de"</string>
-    <string name="contextmenu_openlink" msgid="6952228183947135362">"Abrir no navegador"</string>
-    <string name="contextmenu_copy" msgid="2584243784216385180">"Copiar"</string>
-    <string name="contextmenu_copylink" msgid="8659897702269320063">"Copiar o URL da ligazón"</string>
-    <string name="contextmenu_view_image" msgid="1031172763893491000">"Ver imaxe"</string>
-    <string name="contextmenu_dial_dot" msgid="8881095692316726628">"Marcar..."</string>
-    <string name="contextmenu_sms_dot" msgid="5319737001771622657">"SMS..."</string>
-    <string name="contextmenu_add_contact" msgid="2310064151427072475">"Engadir contacto"</string>
-    <string name="contextmenu_send_mail" msgid="3834654593200105396">"Enviar correo electrónico"</string>
-    <string name="contextmenu_map" msgid="5118951927399465521">"Mapa"</string>
-    <string name="contextmenu_sharelink" msgid="8670940060477758709">"Compartir a ligazón"</string>
-    <string name="contextmenu_help" msgid="4209674157707873384">"Axuda"</string>
-    <string name="contextmenu_feedback" msgid="8319100902136337085">"Enviar comentarios"</string>
-    <!-- no translation found for num_selected (7990204488812654380) -->
-    <skip />
-  <plurals name="move_conversation">
-    <item quantity="one" msgid="237882018518207244">"Mover conversa"</item>
-    <item quantity="other" msgid="6639576653114141743">"Mover <xliff:g id="ID_1">%1$d</xliff:g> conversas"</item>
-  </plurals>
-    <string name="content_description" msgid="854320355052962069">"<xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g> acerca de <xliff:g id="SUBJECT">%3$s</xliff:g>, <xliff:g id="SNIPPET">%4$s</xliff:g> o <xliff:g id="DATE">%5$s</xliff:g>, <xliff:g id="READSTATE">%6$s</xliff:g>"</string>
-    <string name="content_description_today" msgid="1634422834354116955">"<xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g> acerca de <xliff:g id="SUBJECT">%3$s</xliff:g>, <xliff:g id="SNIPPET">%4$s</xliff:g> ás <xliff:g id="TIME">%5$s</xliff:g>, <xliff:g id="READSTATE">%6$s</xliff:g>"</string>
-    <string name="read_string" msgid="5495929677508576520">"conversa lida"</string>
-    <string name="unread_string" msgid="7342558841698083381">"conversa non lida"</string>
-    <string name="filtered_tag" msgid="721666921386074505">"[<xliff:g id="TAG">%1$s</xliff:g>]<xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="badge_and_subject" msgid="3979372269373936750">"<xliff:g id="ID_1">%1$s</xliff:g> <xliff:g id="ID_2">%2$s</xliff:g>"</string>
-  <plurals name="draft">
-    <item quantity="one" msgid="6717535677167943402">"Borrador"</item>
-    <item quantity="other" msgid="1335781147509740039">"Borradores"</item>
-  </plurals>
-    <string name="sending" msgid="5600034886763930499">"Enviando..."</string>
-    <string name="message_retrying" msgid="5335188121407261331">"Reintentando…"</string>
-    <string name="message_failed" msgid="7887650587384601790">"Erro"</string>
-    <string name="send_failed" msgid="2186285547449865010">"Non se enviou a mensaxe."</string>
-    <string name="me_object_pronoun" msgid="4674452244417913816">"eu"</string>
-    <string name="me_subject_pronoun" msgid="7479328865714008288">"eu"</string>
-  <plurals name="confirm_delete_conversation">
-    <item quantity="one" msgid="7605755011865575440">"Eliminar esta conversa?"</item>
-    <item quantity="other" msgid="1585660381208712562">"Eliminar estas <xliff:g id="COUNT">%1$d</xliff:g> conversas?"</item>
-  </plurals>
-  <plurals name="confirm_archive_conversation">
-    <item quantity="one" msgid="9105551557653306945">"Arquivar esta conversa?"</item>
-    <item quantity="other" msgid="2001972798185641108">"Arquivar estas <xliff:g id="COUNT">%1$d</xliff:g> conversas?"</item>
-  </plurals>
-  <plurals name="confirm_discard_drafts_conversation">
-    <item quantity="one" msgid="2030421499893210789">"Queres descartar esta mensaxe?"</item>
-    <item quantity="other" msgid="782234447471532005">"Queres descartar estas <xliff:g id="COUNT">%1$d</xliff:g> mensaxes?"</item>
-  </plurals>
-    <string name="confirm_discard_text" msgid="5172680524418848519">"Descartar esta mensaxe?"</string>
-    <string name="loading_conversations" msgid="7255732786298655246">"Cargando..."</string>
-    <string name="empty_inbox" msgid="5901734942362315228">"Remataches. Que teñas bo día."</string>
-    <string name="empty_search" msgid="8564899353449880818">"Vaia. Non encontramos nada para \"<xliff:g id="SEARCH_QUERY">%1$s</xliff:g>\"."</string>
-    <string name="empty_spam_folder" msgid="3288985543286122800">"Non hai spam."</string>
-    <string name="empty_trash_folder" msgid="378119063015945020">"No hai lixo aquí. Grazas pola reciclaxe."</string>
-    <string name="empty_folder" msgid="3227552635613553855">"Aquí non hai correo."</string>
-    <string name="getting_messages" msgid="8403333791332403244">"Obtendo as túas mensaxes"</string>
-    <string name="undo" msgid="8256285267701059609">"Desfacer"</string>
-  <plurals name="conversation_unstarred">
-    <item quantity="one" msgid="839233699150563831">"Desmarcando con estrela <xliff:g id="COUNT">%1$d</xliff:g> conversa."</item>
-    <item quantity="other" msgid="7677305734833709789">"Eliminando estrela <xliff:g id="COUNT">%1$d</xliff:g> conversas."</item>
-  </plurals>
-  <plurals name="conversation_muted">
-    <item quantity="one" msgid="3339638225564408438">"Silenciouse &lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; conversa."</item>
-    <item quantity="other" msgid="4276111931404654219">"Silenciáronse &lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; conversas."</item>
-  </plurals>
-  <plurals name="conversation_spammed">
-    <item quantity="one" msgid="6986172030710967687">"Informouse de que &lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; conversa é spam."</item>
-    <item quantity="other" msgid="5900913789259199137">"Informouse de que &lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; conversas son spam."</item>
-  </plurals>
-  <plurals name="conversation_not_spam">
-    <item quantity="one" msgid="2294904093653094150">"Informouse de que &lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; conversa non é spam."</item>
-    <item quantity="other" msgid="4966164423991098144">"Informouse de que &lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; conversas non son spam."</item>
-  </plurals>
-  <plurals name="conversation_not_important">
-    <item quantity="one" msgid="3824809189993339030">"Marcouse &lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; conversa como non importante."</item>
-    <item quantity="other" msgid="1215472798075869124">"Marcáronse &lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; conversas como non importantes."</item>
-  </plurals>
-  <plurals name="conversation_phished">
-    <item quantity="one" msgid="4330095881258771201">"Informouse de que &lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; conversa non é phishing."</item>
-    <item quantity="other" msgid="9218674052779504277">"Informouse de que &lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; conversa é phishing."</item>
-  </plurals>
-  <plurals name="conversation_archived">
-    <item quantity="one" msgid="4127890884907503696">"Arquivouse &lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; conversa."</item>
-    <item quantity="other" msgid="7789480176789922968">"Arquiváronse &lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; conversas."</item>
-  </plurals>
-  <plurals name="conversation_deleted">
-    <item quantity="one" msgid="5591889079235938982">"Eliminouse &lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; conversa."</item>
-    <item quantity="other" msgid="7060256058737892078">"Elimináronse &lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; conversas."</item>
-  </plurals>
-    <string name="deleted" msgid="7378013910782008375">"Eliminada"</string>
-    <string name="archived" msgid="6283673603512713022">"Arquivada"</string>
-    <string name="folder_removed" msgid="5656281444688183676">"Eliminada de <xliff:g id="FOLDERNAME">%1$s</xliff:g>"</string>
-  <plurals name="conversation_folder_changed">
-    <item quantity="one" msgid="6463727361987396734">"Cartafol cambiado"</item>
-    <item quantity="other" msgid="8815390494333090939">"Cartafoles cambiados"</item>
-  </plurals>
-    <string name="conversation_folder_moved" msgid="6475872337373081683">"Moveuse a <xliff:g id="FOLDERNAME">%1$s</xliff:g>"</string>
-    <string name="search_results_header" msgid="1529438451150580188">"Resultados"</string>
-    <string name="search_unsupported" msgid="2873920566477359177">"Esta conta non admite a busca."</string>
-    <string name="add_label" msgid="3285338046038610902">"Engadir cartafol"</string>
-    <string name="new_incoming_messages_one" msgid="5933087567495998661">"Mostrar nova mensaxe de <xliff:g id="SENDER">%s</xliff:g>."</string>
-  <plurals name="new_incoming_messages_many">
-    <item quantity="other" msgid="4394042684501388790">"Mostrar <xliff:g id="COUNT">%1$d</xliff:g> mensaxes novas."</item>
-  </plurals>
-    <string name="date_and_view_details" msgid="2952994746916149969">"<xliff:g id="DATE">%1$s</xliff:g> &lt;a href=\'http://www.example.com\'&gt;Ver detalles&lt;/a&gt;"</string>
-    <string name="hide_details" msgid="8018801050702453314">"Ocultar detalles"</string>
-    <string name="to_message_header" msgid="3954385178027011919">"para <xliff:g id="RECIPIENTS">%1$s</xliff:g>"</string>
-    <string name="contact_info_string" msgid="6484930184867405276">"Mostrar información de contacto de <xliff:g id="NAME">%1$s</xliff:g>"</string>
-    <string name="contact_info_string_default" msgid="6204228921864816351">"Mostrar información do contacto"</string>
-  <plurals name="show_messages_read">
-    <item quantity="other" msgid="5285673397387128129">"<xliff:g id="COUNT">%1$d</xliff:g> mensaxes máis antigas"</item>
-  </plurals>
-    <string name="from_heading" msgid="48290556829713090">"De:"</string>
-    <string name="replyto_heading" msgid="8275255318292059079">"Responder a:"</string>
-    <string name="to_heading" msgid="3495203282540398336">"Para: "</string>
-    <string name="to_heading_no_space" msgid="679167047628308670">"Para:"</string>
-    <string name="cc_heading" msgid="5603892257866345823">"Cc:"</string>
-    <string name="bcc_heading" msgid="1482186590756218269">"Cco:"</string>
-    <string name="date_heading" msgid="4213063948406397168">"Data:"</string>
-    <string name="show_images" msgid="436044894053204084">"Mostrar imaxes"</string>
-    <string name="always_show_images" msgid="556087529413707819">"Mostrar sempre imaxes deste remitente"</string>
-    <string name="always_show_images_toast" msgid="3763157294047555051">"As imaxes deste remitente mostraranse automaticamente."</string>
-    <string name="address_display_format" msgid="2098008376913966177">"<xliff:g id="NAME">%1$s</xliff:g> <xliff:g id="EMAIL">%2$s</xliff:g>"</string>
-    <string name="address_display_format_with_via_domain" msgid="8108294635074750048">"<xliff:g id="NAME">%1$s</xliff:g> <xliff:g id="EMAIL">%2$s</xliff:g> a través de <xliff:g id="VIA_DOMAIN">%3$s</xliff:g>"</string>
-    <string name="message_saved" msgid="3291655042310241793">"Mensaxe gardada como borrador."</string>
-    <string name="sending_message" msgid="2487846954946637084">"Enviando a mensaxe..."</string>
-    <string name="invalid_recipient" msgid="9157434699389936584">"O enderezo <xliff:g id="WRONGEMAIL">%s</xliff:g> non é válido."</string>
-    <string name="show_elided" msgid="3456154624105704327">"Mostrar o texto citado"</string>
-    <string name="hide_elided" msgid="5768235486834692733">"▼ Ocultar texto citado"</string>
-    <string name="message_invite_title" msgid="5985161025144867256">"Invitación do calendario"</string>
-    <string name="message_invite_calendar_view" msgid="9181966650840809197">"Ver no calendario"</string>
-    <string name="message_invite_label_attending" msgid="4194264767870003397">"Vas asistir?"</string>
-    <string name="message_invite_accept" msgid="8002758842580134835">"Si"</string>
-    <string name="message_invite_tentative" msgid="3199418731566655887">"Quizais"</string>
-    <string name="message_invite_decline" msgid="6331040872447290777">"Non"</string>
-    <string name="enumeration_comma" msgid="2848850136844740850">", "</string>
-    <string name="send_anyway" msgid="2727576121007079643">"Enviar igualmente"</string>
-    <string name="ok" msgid="6178802457914802336">"Aceptar"</string>
-    <string name="done" msgid="344354738335270292">"Feito"</string>
-    <string name="cancel" msgid="4831678293149626190">"Cancelar"</string>
-    <string name="clear" msgid="765949970989448022">"Borrar"</string>
-    <string name="next" msgid="2662478712866255138">"Seguinte"</string>
-    <string name="previous" msgid="8985379053279804274">"Anterior"</string>
-  <string-array name="sync_status">
-    <item msgid="4600303222943450797">"Correcto"</item>
-    <item msgid="2972425114100316260">"Sen conexión"</item>
-    <item msgid="8594593386776437871">"Non se puido iniciar sesión."</item>
-    <item msgid="1375193906551623606">"Erro de seguranza"</item>
-    <item msgid="195177374927979967">"Non se puido sincronizar."</item>
-    <item msgid="8026148967150231130">"Erro interno"</item>
-    <item msgid="5442620760791553027">"Erro do servidor"</item>
-  </string-array>
-    <string name="tap_to_configure" msgid="137172348280050643">"Toca para configurar"</string>
-    <string name="non_synced_folder_description" msgid="3044618511909304701">"Para ver conversas, sincroniza este cartafol."</string>
-    <string name="tap_to_configure_folder_sync" msgid="3280434399275638071">"Sincronizar cartafol"</string>
-    <string name="widget_large_unread_count" msgid="8699435859096455837">"+ %d"</string>
-    <string name="large_unseen_count" msgid="3055042669246912518">"<xliff:g id="COUNT">%d</xliff:g> nov"</string>
-    <string name="unseen_count" msgid="5509898665569695288">"<xliff:g id="COUNT">%d</xliff:g> nov"</string>
-  <plurals name="actionbar_unread_messages">
-    <item quantity="other" msgid="3863201473731766006">"<xliff:g id="COUNT">%1$d</xliff:g> non lidas"</item>
-  </plurals>
-    <string name="actionbar_large_unread_count" msgid="753635978542372792">"Más de <xliff:g id="COUNT">%1$d</xliff:g> non lidos"</string>
-    <string name="view_more_conversations" msgid="8377920000247101901">"Ver máis conversas"</string>
-    <string name="loading_conversation" msgid="7931600025861500397">"Cargando..."</string>
-    <string name="activity_mailbox_selection" msgid="7489813868539767701">"Selecciona unha conta"</string>
-    <string name="activity_folder_selection" msgid="8375243281001234750">"Escoller cartafol"</string>
-    <string name="folder_shortcut_widget_label" msgid="6466292659577092915">"Cartafol de correo electrónico"</string>
-    <string name="change_folders_selection_dialog_title" msgid="9174464298613273814">"Cambiar cartafoles"</string>
-    <string name="move_to_selection_dialog_title" msgid="4052506464467083621">"Mover a"</string>
-    <string name="search_hint" msgid="4916671414132334289">"Buscar correo"</string>
-    <!-- no translation found for search_results_loaded (1784879343458807514) -->
-    <skip />
-    <string name="network_error" msgid="5931164247644972255">"Sen conexión"</string>
-    <string name="retry" msgid="916102442074217293">"Tentar de novo"</string>
-    <string name="load_more" msgid="8702691358453560575">"Cargar máis"</string>
-    <!-- no translation found for load_attachment (3894318473827290350) -->
-    <skip />
-    <string name="shortcut_name_title" msgid="1562534040126088628">"Asignar un nome ao atallo do cartafol"</string>
-    <string name="wait_for_sync_title" msgid="4577632826912823075">"Agardando pola sincronización"</string>
-    <string name="not_synced_title" msgid="3600180500934086346">"Conta non sincronizada"</string>
-    <string name="wait_for_manual_sync_body" msgid="2823149409451003378">"Esta conta non está configurada para sincronizala automaticamente.\nToca "<b>"Sincronizar agora"</b>" para sincronizar o correo unha vez ou "<b>"Cambiar configuración de sincronización"</b>" para configurar esta conta para sincronizar correo automaticamente."</string>
-    <string name="manual_sync" msgid="2271479734895537848">"Sincr. agora"</string>
-    <string name="change_sync_settings" msgid="3615852118397055361">"Cambiar config. sincronización"</string>
-    <string name="photo_load_failed" msgid="577471721679146999">"Non se puido cargar a imaxe"</string>
-    <string name="cant_move_or_change_labels" msgid="4155490583610926755">"Non se pode mover porque a selección contén varias contas."</string>
-    <string name="multiple_new_message_notification_item" msgid="1386588046275174918"><b>"<xliff:g id="SENDER">%1$s</xliff:g>"</b>"   <xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="single_new_message_notification_big_text" msgid="2170154732664242904">"<xliff:g id="SUBJECT">%1$s</xliff:g>\n<xliff:g id="SNIPPET">%2$s</xliff:g>"</string>
-    <string name="ignore_spam_warning" msgid="8760314545535838430">"Ignorar, mensaxe de confianza"</string>
-    <string name="via_domain" msgid="537951148511529082">"a través de <xliff:g id="VIADOMAIN">%1$s</xliff:g>"</string>
-    <string name="signin" msgid="4699091478139791244">"Iniciar sesión"</string>
-    <string name="info" msgid="1357564480946178121">"Información"</string>
-    <string name="report" msgid="4318141326014579036">"Enviar comentario"</string>
-    <string name="sync_error" msgid="1795794969006241678">"Non se puido sincronizar."</string>
-    <string name="sync_error_message" msgid="4182644657243736635">"O dispositivo non ten espazo de almacenamento suficiente para sincronizar."</string>
-    <string name="storage" msgid="4783683938444150638">"Almacenamento"</string>
-    <string name="senders_split_token" msgid="6549228851819460081">", "</string>
-    <string name="draft_count_format" msgid="9122583199850209286">" (<xliff:g id="COUNT">%1$s</xliff:g>)"</string>
-    <string name="all_folders_heading" msgid="9023770187629170967">"Todos os cartafoles"</string>
-    <string name="recent_folders_heading" msgid="8943134955788867702">"Cartafoles recentes"</string>
-    <string name="message_details_title" msgid="60771875776494764">"Detalles da mensaxe"</string>
-    <string name="preference_advance_to_title" msgid="6385669491239514630">"Avance automático"</string>
-  <string-array name="prefEntries_autoAdvance">
-    <item msgid="1505450878799459652">"Máis recente"</item>
-    <item msgid="8000986144872247139">"Máis antiga"</item>
-    <item msgid="8015001161633421314">"Lista de conversas"</item>
-  </string-array>
-  <string-array name="prefSummaries_autoAdvance">
-    <item msgid="8221665977497655719">"Mostrar conversa máis recente despois de eliminar"</item>
-    <item msgid="1721869262893378141">"Mostrar conversa máis antiga despois de eliminar"</item>
-    <item msgid="880913657385630195">"Mostrar lista de conversas despois de eliminar"</item>
-  </string-array>
-    <string name="prefDialogTitle_autoAdvance" msgid="5459235590885640678">"Avanzar a"</string>
-    <string name="clear_display_images_whitelist_title" msgid="2012677202404471778">"Borrar aprobacións de imaxes"</string>
-    <string name="clear_display_images_whitelist_dialog_title" msgid="1942692501166848471">"Borrar aprobacións de imaxes?"</string>
-    <string name="clear_display_images_whitelist_dialog_message" msgid="3952553078559373729">"Deter a visualización de imaxes en liña de remitentes anteriormente permitidos."</string>
-    <string name="sender_whitelist_cleared" msgid="2490984995927904030">"As imaxes non se mostrarán automaticamente."</string>
-    <string name="preferences_signature_title" msgid="2318034745474929902">"Sinatura"</string>
-    <string name="preferences_signature_dialog_title" msgid="4801741764511807064">"Sinatura"</string>
-    <string name="preferences_signature_summary_not_set" msgid="3776614319388053784">"Sen configurar"</string>
-    <string name="notification_action_reply" msgid="8378725460102575919">"Responder"</string>
-    <string name="notification_action_reply_all" msgid="5693469099941000037">"Responder a todos"</string>
-    <string name="notification_action_archive" msgid="2884874164831039047">"Arquivar"</string>
-    <string name="notification_action_remove_label" msgid="3714785653186750981">"Eliminar etiqueta"</string>
-    <string name="notification_action_delete" msgid="3201627482564624132">"Eliminar"</string>
-    <string name="notification_action_undo_archive" msgid="600186958134073582">"Arquivada"</string>
-    <string name="notification_action_undo_remove_label" msgid="8341924850540100690">"Etiqueta eliminada"</string>
-    <string name="notification_action_undo_delete" msgid="6915612337413587103">"Eliminada"</string>
-    <string name="veiled_address" msgid="2670378260196977266"></string>
-    <string name="veiled_alternate_text" msgid="6343564357099807582"></string>
-    <string name="veiled_alternate_text_unknown_person" msgid="6728323554307952217"></string>
-    <string name="veiled_summary_unknown_person" msgid="2122359944161241551"></string>
-    <string name="label_notification_ticker" msgid="323232821061341014">"<xliff:g id="LABEL">%s</xliff:g>: <xliff:g id="NOTIFICATION">%s</xliff:g>"</string>
-  <plurals name="new_messages">
-    <item quantity="one" msgid="3446656407520493241">"<xliff:g id="COUNT">%1$d</xliff:g> mensaxe nova"</item>
-    <item quantity="other" msgid="3531683811183204615">"<xliff:g id="COUNT">%1$d</xliff:g> mensaxes novas"</item>
-  </plurals>
-    <string name="single_new_message_notification_title" msgid="7954710563222504868">"<xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="silent_ringtone" msgid="1570794756474381886">"Silencio"</string>
-    <string name="preference_removal_action_title" msgid="4703834472477137634">"Accións de arquivar e eliminar"</string>
-  <string-array name="prefEntries_removal_action">
-    <item msgid="954772302016538814">"Mostrar só arquivar"</item>
-    <item msgid="7212690302706180254">"Mostrar só eliminar"</item>
-    <item msgid="2539051197590685708">"Mostrar arquivar e eliminar"</item>
-  </string-array>
-  <string-array name="prefSummaries_removal_action_summary">
-    <item msgid="6877416142040695022">"Mostrar só arquivar"</item>
-    <item msgid="1510017057984222376">"Mostra só eliminar"</item>
-    <item msgid="3196207224108008441">"Mostrar arquivar e eliminar"</item>
-  </string-array>
-    <string name="prefDialogTitle_removal_action" msgid="266548424110393246">"Accións de arquivar e eliminar"</string>
-    <string name="preferences_default_reply_all_title" msgid="7255858488369635327">"Responder a todos"</string>
-    <string name="preferences_default_reply_all_summary_impl" msgid="895581085692979709">"Usar como opción predeterminada para responder mensaxes"</string>
-    <string name="preference_swipe_title_archive" msgid="9122333537761282714">"Pasa o dedo para arquivar"</string>
-    <string name="preference_swipe_title_delete" msgid="4860474024917543711">"Pasa o dedo para eliminar"</string>
-    <string name="preference_swipe_description" msgid="3036560323237015010">"Na lista de conversas"</string>
-    <string name="preference_sender_image_title" msgid="7890813537985591865">"Imaxe do remitente"</string>
-    <string name="preference_sender_image_description" msgid="3586817690132199889">"Mostrar ao lado do nome na lista de conversas"</string>
-    <string name="empty_trash" msgid="3385937024924728399">"Baleirar a papeleira"</string>
-    <string name="empty_spam" msgid="2911988289997281371">"Baleirar cartafol de spam"</string>
-    <string name="empty_trash_dialog_title" msgid="2104898489663621508">"Queres baleirar a papeleira?"</string>
-    <string name="empty_spam_dialog_title" msgid="1130319045917820569">"Queres baleirar o cartafol de spam?"</string>
-  <plurals name="empty_folder_dialog_message">
-    <item quantity="one" msgid="3315412388217832914">"Eliminarase <xliff:g id="COUNT">%1$d</xliff:g> mensaxe permanentemente."</item>
-    <item quantity="other" msgid="263840304486020101">"Eliminaranse <xliff:g id="COUNT">%1$d</xliff:g> mensaxes permanentemente."</item>
-  </plurals>
-    <string name="drawer_open" msgid="2285557278907103851">"Abrir panel de navegación"</string>
-    <string name="drawer_close" msgid="2065829742127544297">"Pechar panel de navegación"</string>
-    <string name="conversation_photo_welcome_text" msgid="836483155429003787">"Toca a imaxe dun remitente para seleccionar esa conversa."</string>
-    <string name="long_press_to_select_tip" msgid="1660881999120625177">"Mantén premida unha conversa para seleccionala e, a continuación, toca máis para seleccionalas."</string>
-    <string name="folder_icon_desc" msgid="6272938864914794739">"Icona do cartafol"</string>
-    <string name="add_account" msgid="5905863370226612377">"Engadir conta"</string>
-    <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Rexeitar consello"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"A función de sincronización automática está desactivada."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Toca para activar."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Sincronización da conta desactivada."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Activar en <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Configuración da conta"</string>
-    <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> mensaxes non enviadas en <xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
-    <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Activar a sincronización automática?"</string>
-    <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Os cambios que fas en todas as aplicacións e contas, non só en Gmail, sincronizaranse entre a web, os demais dispositivos e o <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>."</string>
-    <string name="phone" msgid="4142617042507912053">"teléfono"</string>
-    <string name="tablet" msgid="4593581125469224791">"tablet"</string>
-    <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="7239160845196929866">"Activar"</string>
-    <string name="show_n_more_folders" msgid="5769610839632786654">"Mostrar <xliff:g id="NUMBER">%1$s</xliff:g> cartafoles máis"</string>
-    <string name="hide_folders" msgid="7618891933409521283">"Ocultar cartafoles"</string>
-    <string name="print" msgid="7987949243936577207">"Imprimir"</string>
-    <string name="print_all" msgid="4011022762279519941">"Imprimir todo"</string>
-  <plurals name="num_messages">
-    <item quantity="one" msgid="8071234386915191851">"<xliff:g id="COUNT">%1$d</xliff:g> mensaxe"</item>
-    <item quantity="other" msgid="962415099931188360">"<xliff:g id="COUNT">%1$d</xliff:g> mensaxes"</item>
-  </plurals>
-    <string name="date_message_received_print" msgid="4168417403884350040">"<xliff:g id="DAY_AND_DATE">%1$s</xliff:g> ás <xliff:g id="TIME">%2$s</xliff:g>"</string>
-    <string name="draft_to_heading" msgid="7370121943946205024">"Borrador para:"</string>
-    <string name="draft_heading" msgid="7032951343184552800">"Borrador"</string>
-    <string name="quoted_text_hidden_print" msgid="5256754205675159141">"Texto citado oculto"</string>
-  <plurals name="num_attachments">
-    <item quantity="one" msgid="5494465717267988888">"<xliff:g id="COUNT">%1$d</xliff:g> anexo"</item>
-    <item quantity="other" msgid="5422167728480739361">"<xliff:g id="COUNT">%1$d</xliff:g> anexos"</item>
-  </plurals>
-    <string name="no_subject" msgid="5622708348540036959">"(sen asunto)"</string>
-    <string name="vacation_responder" msgid="5570132559074523806">"Contestador automático"</string>
-    <string name="preferences_vacation_responder_title" msgid="2268482117730576123">"Contestador automático"</string>
-    <string name="vacation_responder_body_hint_text" msgid="9087613123105158494">"Mensaxe"</string>
-    <string name="send_to_contacts_text" msgid="124432913980620545">"Enviar só aos meus contactos"</string>
-    <string name="send_to_domain_text" msgid="5064559546745918393">"Enviar só a <xliff:g id="DOMAIN">%1$s</xliff:g>"</string>
-    <string name="pick_start_date_title" msgid="2274665037355224165">"Inicio"</string>
-    <string name="pick_end_date_title" msgid="733396083649496600">"Final (opcional)"</string>
-    <string name="date_not_set" msgid="3251555782945051904">"Sen configurar"</string>
-    <string name="set_end_date_dialog_title" msgid="7543009262788808443">"Data de finalización (opcional)"</string>
-    <string name="custom_date" msgid="5794846334232367838">"Personalizada"</string>
-    <string name="date_none" msgid="1061426502665431412">"Ningunha"</string>
-    <string name="discard_changes" msgid="5699760550972324746">"Descartar cambios?"</string>
-    <string name="vacation_responder_changes_saved" msgid="91448817268121249">"Gardáronse os cambios no contestador automático"</string>
-    <string name="vacation_responder_changes_discarded" msgid="21756037735539983">"Descartáronse os cambios no contestador automático"</string>
-    <string name="vacation_responder_off" msgid="4429909341193366667">"Desactivado"</string>
-    <string name="vacation_responder_on" msgid="4913238379320882449">"Activado desde o <xliff:g id="DATE">%1$s</xliff:g>"</string>
-    <string name="vacation_responder_on_with_end_date" msgid="4360941815371475955">"Activado do <xliff:g id="START_DATE">%1$s</xliff:g> ao <xliff:g id="END_DATE">%2$s</xliff:g>"</string>
-    <string name="vacation_responder_empty_subject_and_body_warning" msgid="6233629618520852439">"Engade un asunto ou unha mensaxe"</string>
-    <string name="view_entire_message" msgid="823281796655014454">"Ver a mensaxe completa"</string>
-    <string name="eml_loader_error_toast" msgid="6577383216635400167">"Non se pode abrir este ficheiro"</string>
-    <string name="help_and_info" msgid="3708286489943154681">"Axuda"</string>
-    <string name="help_and_feedback" msgid="7211458338163287670">"Axuda e comentarios"</string>
-    <string name="feedback" msgid="204247008751740034">"Enviar comentarios"</string>
-    <string name="copyright" msgid="3121335168340432582">"©<xliff:g id="YEAR">%1$d</xliff:g> Google Inc."</string>
-    <string name="version" msgid="1161745345056656547">"<xliff:g id="APP_NAME">%1$s</xliff:g> versión <xliff:g id="VERSION">%2$s</xliff:g>"</string>
-    <string name="view_app_page" msgid="3241990517052398927"></string>
-    <string name="print_dialog" msgid="8895536548487605661">"Imprimir..."</string>
-    <string name="copyright_information" msgid="971422874488783312">"Información de copyright"</string>
-    <string name="privacy_policy" msgid="212094623396418302">"Política de privacidade"</string>
-    <string name="open_source_licenses" msgid="8643615555920977752">"Licenzas de código aberto"</string>
-    <string name="reply_choice_yes" msgid="3327633032975373220">"Si"</string>
-    <string name="reply_choice_no" msgid="7068775605915475207">"Non"</string>
-    <string name="reply_choice_ok" msgid="7881073621845053152">"Aceptar"</string>
-    <string name="reply_choice_hehe" msgid="6054314968043050748">"He he"</string>
-    <string name="reply_choice_thanks" msgid="4978961954288364694">"Grazas"</string>
-    <string name="reply_choice_i_agree" msgid="2496652737796884298">"Acepto"</string>
-    <string name="reply_choice_nice" msgid="4465894941302838676">"Excelente"</string>
-    <string name="reply_on_my_way" msgid="5645003971107444269">"Á miña maneira"</string>
-    <string name="reply_choice_later" msgid="4629219072859486413">"De acordo, contactar contigo"</string>
-    <string name="reply_choice_smiling_face" msgid="1772253938506548631">":)"</string>
-    <string name="reply_choice_frowning_face" msgid="6260338807944002651">":("</string>
-    <string name="preference_header_action_confirmations" msgid="3922674681156121948">"Confirmacións de accións"</string>
-    <string name="preference_confirm_before_delete_title" msgid="7563587174619033835">"Confirmar antes de eliminar"</string>
-    <string name="preference_confirm_before_archive_title" msgid="7318645995655875718">"Confirmar antes de arquivar"</string>
-    <string name="preference_confirm_before_send_title" msgid="4136585783513077039">"Confirmar antes de enviar"</string>
-    <string name="preferences_conversation_mode_title" msgid="389352009651720838">"Axuste automático de mensaxes"</string>
-    <string name="preferences_conversation_mode_summary" msgid="5730999743867653106">"Reduce as mensaxes para adaptarse á pantalla"</string>
-    <string name="preferences_disable_snap_headers_title" msgid="7257824136988429629">"Accións de mensaxes"</string>
-  <string-array name="prefSummaries_snapHeader">
-    <item msgid="43373293784193461">"Mostrar sempre as accións das mensaxes na parte superior da pantalla"</item>
-    <item msgid="1765271305989996747">"Mostrar só as accións das mensaxes na parte superior da pantalla cando se xiran para o retrato"</item>
-    <item msgid="6311113076575333488">"Non mostrar as accións das mensaxes fóra do encabezado da mensaxe"</item>
-  </string-array>
-  <string-array name="prefEntries_snapHeader">
-    <item msgid="6906986566816683587">"Mostrar sempre"</item>
-    <item msgid="113299655708990672">"Mostrar só en retrato"</item>
-    <item msgid="4403750311175924065">"Non mostrar"</item>
-  </string-array>
-    <string name="clear_history_title" msgid="5536216295725760357">"Borrar o Historial de busca"</string>
-    <string name="search_history_cleared" msgid="1461946302763342640">"Borrouse o Historial de busca."</string>
-    <string name="clear_history_dialog_title" msgid="3503603389704365385">"Borrar Historial de busca?"</string>
-    <string name="clear_history_dialog_message" msgid="5202922561632407778">"Eliminaranse todas as buscas realizadas previamente."</string>
-    <string name="manage_accounts_menu_item" msgid="4734660452395086786">"Xestionar contas"</string>
-    <string name="general_preferences_title" msgid="4212138728220418162">"Configuración xeral"</string>
-    <string name="activity_preferences" msgid="8966077432517613292">"Configuración"</string>
-</resources>
diff --git a/res/values-hi-sw600dp/strings.xml b/res/values-hi-sw600dp/strings.xml
index e17e2cc..844674a 100644
--- a/res/values-hi-sw600dp/strings.xml
+++ b/res/values-hi-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"Cc/Bcc जोड़ें"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"Bcc जोड़ें"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"फ़ोल्‍डर प्रबंधित करें"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"संदेश नोटिफिकेशन के जवाबों के लिए डिफ़ॉल्ट के रूप में उपयोग करें"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"Cc/Bcc जोड़ें"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"Bcc जोड़ें"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"फ़ोल्‍डर प्रबंधित करें"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"संदेश सूचनाओं के जवाबों के लिए डिफ़ॉल्ट के रूप में उपयोग करें"</string>
 </resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 74fc73b..41d0281 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -24,28 +24,26 @@
     <string name="bcc" msgid="519303553518479171">"Bcc"</string>
     <string name="subject_hint" msgid="2136470287303571827">"विषय"</string>
     <string name="body_hint" msgid="6478994981747057817">"ईमेल लिखें"</string>
-    <string name="add_file_attachment" msgid="2604880054248593993">"फ़ाइल अटैच करें"</string>
+    <string name="add_file_attachment" msgid="2604880054248593993">"फ़ाइल अनुलग्‍न करें"</string>
     <string name="add_photo_attachment" msgid="7163589794940909528">"चित्र जोड़ें"</string>
     <string name="save_draft" msgid="2669523480789672118">"अधूरा ईमेल सहेजें"</string>
-    <string name="discard" msgid="4905982179911608430">"अभी नहीं"</string>
+    <string name="discard" msgid="4905982179911608430">"हटाएं"</string>
     <string name="compose" msgid="2602861958391035523">"लिखें"</string>
   <string-array name="compose_modes">
-    <item msgid="9000553538766397816">"उत्तर दें"</item>
-    <item msgid="2767793214788399009">"सभी प्रषकों को उत्तर दें"</item>
-    <item msgid="2758162027982270607">"आगे भेजें"</item>
+    <item msgid="9000553538766397816">"जवाब दें"</item>
+    <item msgid="2767793214788399009">"सभी को जवाब दें"</item>
+    <item msgid="2758162027982270607">"इसको भेजें"</item>
   </string-array>
     <string name="reply_attribution" msgid="1114972798797833259">"<xliff:g id="DATE">%s</xliff:g> को, <xliff:g id="PERSON">%s</xliff:g> ने लिखा:"</string>
     <string name="forward_attribution" msgid="597850048345475752">"---------- अग्रेषित संदेश ----------&lt;br&gt;प्रेषक: <xliff:g id="FROM">%1$s</xliff:g>&lt;br&gt;दिनांक: <xliff:g id="DATE">%2$s</xliff:g>&lt;br&gt;विषय: <xliff:g id="SUBJECT">%3$s</xliff:g>&lt;br&gt;प्रति: <xliff:g id="TO">%4$s</xliff:g>&lt;br&gt;"</string>
     <string name="forward_attribution_no_headers" msgid="1828826576779486239">"---------- अग्रेषित संदेश ----------"</string>
     <string name="cc_attribution" msgid="2928584226469388899">"Cc: <xliff:g id="CC">%1$s</xliff:g>&lt;br&gt;"</string>
     <string name="select_attachment_type" msgid="353236686616663062">"अटैचमेंट का प्रकार चुनें"</string>
-    <string name="too_large_to_attach_single" msgid="2669897137966512530">"<xliff:g id="MAXSIZE">%1$s</xliff:g> से बड़ी फ़ाइल अटैचमेंट नहीं कर सकते."</string>
-    <string name="too_large_to_attach_multiple" msgid="1620163295709036343">"एक या अधिक फ़ाइलें अटैचमेंट नहीं हुईं. सीमा <xliff:g id="MAXSIZE">%1$s</xliff:g> की है."</string>
-    <string name="too_large_to_attach_additional" msgid="4964155563465970480">"फ़ाइल अटैचमेंट नहीं हुई. <xliff:g id="MAXSIZE">%1$s</xliff:g> सीमा पूरी हो गई."</string>
+    <string name="too_large_to_attach_single" msgid="2669897137966512530">"<xliff:g id="MAXSIZE">%1$s</xliff:g> से बड़ी फ़ाइल संलग्न नहीं कर सकते."</string>
+    <string name="too_large_to_attach_multiple" msgid="1620163295709036343">"एक या अधिक फ़ाइलें संलग्न नहीं हुईं. सीमा <xliff:g id="MAXSIZE">%1$s</xliff:g> की है."</string>
+    <string name="too_large_to_attach_additional" msgid="4964155563465970480">"फ़ाइल संलग्न नहीं हुई. <xliff:g id="MAXSIZE">%1$s</xliff:g> सीमा पूरी हो गई."</string>
     <string name="generic_attachment_problem" msgid="4683974765387240723">"फ़ाइल अनुलग्न नहीं की जा सकी."</string>
     <string name="recipient_needed" msgid="319816879398937214">"कम से कम एक प्राप्तकर्ता जोड़ें."</string>
-    <string name="recipient_error_dialog_title" msgid="760741480291963706">"प्राप्तकर्ता त्रुटि"</string>
-    <string name="confirm_send_title" msgid="4664971589247101530">"संदेश भेजें?"</string>
     <string name="confirm_send_message_with_no_subject" msgid="1442628074022609987">"संदेश के विषय में कोई लेख नहीं है."</string>
     <string name="confirm_send_message_with_no_body" msgid="3329355318700201516">"संदेश के मुख्य भाग में कोई लेख नहीं है."</string>
     <string name="confirm_send_message" msgid="6211518590166222735">"यह संदेश भेजें?"</string>
@@ -67,13 +65,13 @@
     <string name="discard_drafts" msgid="5881484193628472105">"अधूरा ईमेल छोड़ें"</string>
     <string name="discard_failed" msgid="7520780769812210279">"विफल संदेशों को छोड़ें"</string>
     <string name="refresh" msgid="1533748989749277511">"रीफ्रेश करें"</string>
-    <string name="reply" msgid="8337757482824207118">"उत्तर दें"</string>
-    <string name="reply_all" msgid="5366796103758360957">"सभी प्रषकों को उत्तर दें"</string>
+    <string name="reply" msgid="8337757482824207118">"प्रत्‍युत्तर दें"</string>
+    <string name="reply_all" msgid="5366796103758360957">"सभी को जवाब दें"</string>
     <string name="resume_draft" msgid="1272723181782570649">"संपादित करें"</string>
-    <string name="forward" msgid="4397585145490426320">"आगे भेजें"</string>
+    <string name="forward" msgid="4397585145490426320">"इसको भेजें"</string>
     <string name="menu_compose" msgid="4575025207594709432">"लिखें"</string>
     <string name="menu_change_folders" msgid="2194946192901276625">"फ़ोल्डर बदलें"</string>
-    <string name="menu_move_to" msgid="7948877550284452830">"फ़ोल्डर ले जाएं"</string>
+    <string name="menu_move_to" msgid="7948877550284452830">"इसमें ले जाएं"</string>
     <string name="menu_move_to_inbox" msgid="258554178236001444">"इनबॉक्स में ले जाएं"</string>
     <string name="menu_manage_folders" msgid="8486398523679534519">"फ़ोल्डर सेटिंग"</string>
     <string name="menu_show_original" msgid="2330398228979616661">"स्वत: आकार बदलें वापस लाएं"</string>
@@ -84,8 +82,8 @@
     <string name="mark_not_important" msgid="3342258155408116917">"महत्वपूर्ण नहीं चिह्नित करें"</string>
     <string name="add_cc_label" msgid="2249679001141195213">"Cc/Bcc जोड़ें"</string>
     <string name="add_bcc_label" msgid="963745641238037813">"Bcc जोड़ें"</string>
-    <string name="quoted_text" msgid="977782904293216533">"उद्धरित लेख शामिल करें"</string>
-    <string name="quoted_text_label" msgid="2296807722849923934">"उद्धरित लेख"</string>
+    <string name="quoted_text" msgid="977782904293216533">"उद्धरित पाठ शामिल करें"</string>
+    <string name="quoted_text_label" msgid="2296807722849923934">"उद्धरित पाठ"</string>
     <string name="respond_inline" msgid="6609746292081928078">"इनलाइन प्रतिसाद दें"</string>
     <string name="bytes" msgid="651011686747499628">"<xliff:g id="COUNT">%s</xliff:g> B"</string>
     <string name="kilobytes" msgid="1523463964465770347">"<xliff:g id="COUNT">%s</xliff:g> KB"</string>
@@ -93,7 +91,7 @@
     <string name="attachment_image" msgid="6375306026208274564">"चित्र"</string>
     <string name="attachment_video" msgid="7119476472603939848">"वीडियो"</string>
     <string name="attachment_audio" msgid="7097658089301809284">"ऑडियो"</string>
-    <string name="attachment_text" msgid="3485853714965922173">"लेख"</string>
+    <string name="attachment_text" msgid="3485853714965922173">"पाठ"</string>
     <string name="attachment_application_msword" msgid="2110108876623152162">"दस्तावेज़"</string>
     <string name="attachment_application_vnd_ms_powerpoint" msgid="425353008963359230">"प्रस्‍तुति"</string>
     <string name="attachment_application_vnd_ms_excel" msgid="5585781311136609103">"स्प्रैडशीट"</string>
@@ -101,16 +99,14 @@
     <string name="attachment_unknown" msgid="3360536730101083926">"<xliff:g id="ATTACHMENTEXTENSION">%s</xliff:g> फ़ाइल"</string>
     <string name="preview_attachment" msgid="6265457626086113833">"पूर्वावलोकन"</string>
     <string name="save_attachment" msgid="375685179032130033">"सहेजें"</string>
-    <string name="cancel_attachment" msgid="6900093625792891122">"रहने दें"</string>
-    <string name="open_attachment" msgid="6100396056314739761">"खोलें"</string>
-    <string name="install_attachment" msgid="8119470822958087928">"इंस्‍टॉल"</string>
     <string name="download_again" msgid="8195787340878328119">"फिर से डाउनलोड करें"</string>
+    <string name="remove_attachment_desc" msgid="1478445871170879140">"<xliff:g id="ATTACHMENTNAME">%s</xliff:g> अटैचमेंट निकालें"</string>
     <string name="more_info_attachment" msgid="2899691682394864507">"जानकारी"</string>
     <string name="no_application_found" msgid="7309485680354949680">"कोई भी ऐप्स  इस अटैचमेंट को देखने के लिए नहीं खोल सकता."</string>
-    <string name="fetching_attachment" msgid="2286628490159574159">"अटैचमेंट फ़ेच कर रहा है"</string>
+    <string name="fetching_attachment" msgid="2286628490159574159">"अनुलग्‍नक फ़ेच कर रहा है"</string>
     <string name="please_wait" msgid="3953824147776128899">"कृपया प्रतीक्षा करें…"</string>
     <string name="saved" msgid="161536102236967534">"सहेजा गया, <xliff:g id="SIZE">%s</xliff:g>"</string>
-    <string name="download_failed" msgid="3878373998269062395">"डाउनलोड नहीं हो सका. पुनर्प्रयास के लिए स्पर्श करें."</string>
+    <string name="download_failed" msgid="3878373998269062395">"डाउनलोड नहीं हो सका. पुनर्प्रयास हेतु स्पर्श करें."</string>
     <string name="menu_photo_save_all" msgid="2742869476474613396">"सभी सहेजें"</string>
     <string name="menu_photo_share" msgid="6410980274832639330">"साझा करें"</string>
     <string name="menu_photo_share_all" msgid="3049053252719665320">"सभी साझा करें"</string>
@@ -125,7 +121,7 @@
     <string name="contextmenu_sms_dot" msgid="5319737001771622657">"SMS भेजें…"</string>
     <string name="contextmenu_add_contact" msgid="2310064151427072475">"संपर्क जोड़ें"</string>
     <string name="contextmenu_send_mail" msgid="3834654593200105396">"ईमेल भेजें"</string>
-    <string name="contextmenu_map" msgid="5118951927399465521">"मानचित्र"</string>
+    <string name="contextmenu_map" msgid="5118951927399465521">"नक्शा"</string>
     <string name="contextmenu_sharelink" msgid="8670940060477758709">"लिंक साझा करें"</string>
     <string name="contextmenu_help" msgid="4209674157707873384">"सहायता"</string>
     <string name="contextmenu_feedback" msgid="8319100902136337085">"सुझाव भेजें"</string>
@@ -142,7 +138,7 @@
     <string name="filtered_tag" msgid="721666921386074505">"[<xliff:g id="TAG">%1$s</xliff:g>]<xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
     <string name="badge_and_subject" msgid="3979372269373936750">"<xliff:g id="ID_1">%1$s</xliff:g> <xliff:g id="ID_2">%2$s</xliff:g>"</string>
   <plurals name="draft">
-    <item quantity="one" msgid="6717535677167943402">"अधूरा ईमेल"</item>
+    <item quantity="one" msgid="6717535677167943402">"ड्रॉफ़्ट"</item>
     <item quantity="other" msgid="1335781147509740039">"अधूरा ईमेल"</item>
   </plurals>
     <string name="sending" msgid="5600034886763930499">"भेज रहा है…"</string>
@@ -167,11 +163,11 @@
     <string name="loading_conversations" msgid="7255732786298655246">"लोड हो रहा है…"</string>
     <string name="empty_inbox" msgid="5901734942362315228">"आपने पूर्ण कर लिया है! कृपया अपने दिन का आनंद लें."</string>
     <string name="empty_search" msgid="8564899353449880818">"ओह! हमें \"<xliff:g id="SEARCH_QUERY">%1$s</xliff:g>\" के लिए कुछ भी नहीं मिला."</string>
-    <string name="empty_spam_folder" msgid="3288985543286122800">"हुर्रे, कोई अनचाहा ईमेल नहीं है!"</string>
-    <string name="empty_trash_folder" msgid="378119063015945020">"कोई मिटाए गए ईमेल नहीं है. रिसाइकलिंग के लिए धन्यवाद!"</string>
+    <string name="empty_spam_folder" msgid="3288985543286122800">"हुर्रे, कोई स्पैम नहीं है!"</string>
+    <string name="empty_trash_folder" msgid="378119063015945020">"कोई ट्रैश नहीं है. रिसाइकलिंग के लिए धन्यवाद!"</string>
     <string name="empty_folder" msgid="3227552635613553855">"कोई मेल नहीं है."</string>
     <string name="getting_messages" msgid="8403333791332403244">"आपके संदेश प्राप्त हो रहे हैं"</string>
-    <string name="undo" msgid="8256285267701059609">"वापस लाएं"</string>
+    <string name="undo" msgid="8256285267701059609">"पूर्ववत करें"</string>
   <plurals name="conversation_unstarred">
     <item quantity="one" msgid="839233699150563831">"<xliff:g id="COUNT">%1$d</xliff:g> बातचीत के तारांकन हटाए जा रहे हैं."</item>
     <item quantity="other" msgid="7677305734833709789">"<xliff:g id="COUNT">%1$d</xliff:g> बातचीत के तारांकन हटाए जा रहे हैं."</item>
@@ -181,8 +177,8 @@
     <item quantity="other" msgid="4276111931404654219">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; को म्‍यूट कि‍या गया."</item>
   </plurals>
   <plurals name="conversation_spammed">
-    <item quantity="one" msgid="6986172030710967687">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; की अनचाहा ईमेल के रूप में रिपोर्ट की गई."</item>
-    <item quantity="other" msgid="5900913789259199137">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; को अनचाहा के रूप में रिपोर्ट किया गया."</item>
+    <item quantity="one" msgid="1749550834135461470">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; की अनचाहा ईमेल के रूप में रिपोर्ट की गई"</item>
+    <item quantity="other" msgid="664292592683692920">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; की अनचाहा ईमेल के रूप में रिपोर्ट की गई"</item>
   </plurals>
   <plurals name="conversation_not_spam">
     <item quantity="one" msgid="2294904093653094150">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; को अनचाहा नहीं के रूप में रिपोर्ट किया गया."</item>
@@ -197,8 +193,8 @@
     <item quantity="other" msgid="9218674052779504277">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; को फ़िशिंग के रूप में रिपोर्ट किया गया."</item>
   </plurals>
   <plurals name="conversation_archived">
-    <item quantity="one" msgid="4127890884907503696">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ईमेल को संग्रहीत कि‍या गया."</item>
-    <item quantity="other" msgid="7789480176789922968">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ईमेल को संग्रहीत कि‍या गया."</item>
+    <item quantity="one" msgid="4859172326053399351">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ईमेल को संग्रहीत कि‍या गया"</item>
+    <item quantity="other" msgid="8520761617935818623">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ईमेल को संग्रहीत कि‍या गया"</item>
   </plurals>
   <plurals name="conversation_deleted">
     <item quantity="one" msgid="5591889079235938982">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; को हटा दिया गया."</item>
@@ -239,11 +235,11 @@
     <string name="always_show_images_toast" msgid="3763157294047555051">"इस प्रेषक के चित्रों को अपने आप दिखाया जाएगा."</string>
     <string name="address_display_format" msgid="2098008376913966177">"<xliff:g id="NAME">%1$s</xliff:g> <xliff:g id="EMAIL">%2$s</xliff:g>"</string>
     <string name="address_display_format_with_via_domain" msgid="8108294635074750048">"<xliff:g id="VIA_DOMAIN">%3$s</xliff:g> के द्वारा <xliff:g id="NAME">%1$s</xliff:g> <xliff:g id="EMAIL">%2$s</xliff:g>"</string>
-    <string name="message_saved" msgid="3291655042310241793">"संदेश अधूरा ईमेल के रूप में सहेजा गया."</string>
+    <string name="message_saved" msgid="3291655042310241793">"संदेश ड्राफ़्ट के रूप में सहेजा गया."</string>
     <string name="sending_message" msgid="2487846954946637084">"संदेश भेज रहा है..."</string>
     <string name="invalid_recipient" msgid="9157434699389936584">"<xliff:g id="WRONGEMAIL">%s</xliff:g> पता अमान्‍य है."</string>
-    <string name="show_elided" msgid="3456154624105704327">"उद्धृत लेख दिखाएं"</string>
-    <string name="hide_elided" msgid="5768235486834692733">"▼ उद्धृत लेख छिपाएं"</string>
+    <string name="show_elided" msgid="3456154624105704327">"उद्धृत पाठ दिखाएं"</string>
+    <string name="hide_elided" msgid="5768235486834692733">"▼ उद्धृत पाठ छिपाएं"</string>
     <string name="message_invite_title" msgid="5985161025144867256">"कैलेंडर आमंत्रण"</string>
     <string name="message_invite_calendar_view" msgid="9181966650840809197">"कैलेंडर में देखें"</string>
     <string name="message_invite_label_attending" msgid="4194264767870003397">"जा रहे हैं?"</string>
@@ -254,7 +250,7 @@
     <string name="send_anyway" msgid="2727576121007079643">"फिर भी भेजें"</string>
     <string name="ok" msgid="6178802457914802336">"ठीक"</string>
     <string name="done" msgid="344354738335270292">"पूर्ण"</string>
-    <string name="cancel" msgid="4831678293149626190">"रहने दें"</string>
+    <string name="cancel" msgid="4831678293149626190">"रद्द करें"</string>
     <string name="clear" msgid="765949970989448022">"साफ़ करें"</string>
     <string name="next" msgid="2662478712866255138">"अगला"</string>
     <string name="previous" msgid="8985379053279804274">"पिछला"</string>
@@ -268,7 +264,7 @@
     <item msgid="5442620760791553027">"सर्वर त्रुटि"</item>
   </string-array>
     <string name="tap_to_configure" msgid="137172348280050643">"सेट करने के लिए स्पर्श करें"</string>
-    <string name="non_synced_folder_description" msgid="3044618511909304701">"बातचीत देखने के लिए, फ़ोल्डर समन्वयित करें."</string>
+    <string name="non_synced_folder_description" msgid="3044618511909304701">"बातचीत देखने हेतु, फ़ोल्डर समन्वयित करें."</string>
     <string name="tap_to_configure_folder_sync" msgid="3280434399275638071">"फ़ोल्डर समन्वयित करें"</string>
     <string name="widget_large_unread_count" msgid="8699435859096455837">"%d+"</string>
     <string name="large_unseen_count" msgid="3055042669246912518">"<xliff:g id="COUNT">%d</xliff:g>+ नए"</string>
@@ -295,7 +291,7 @@
     <string name="shortcut_name_title" msgid="1562534040126088628">"नाम फ़ोल्‍डर शॉर्टकट"</string>
     <string name="wait_for_sync_title" msgid="4577632826912823075">"समन्‍वयन की प्रतीक्षा कर रहा है"</string>
     <string name="not_synced_title" msgid="3600180500934086346">"खाता समन्वयित नहीं है"</string>
-    <string name="wait_for_manual_sync_body" msgid="2823149409451003378">"यह खाता अपने आप समन्वयित करने के लिए सेट नहीं है. \nएक बार मेल समन्‍वयित करने के लिए, "<b>"अभी समन्वयित करें"</b>" स्‍पर्श करें, या इस खाते को मेल अपने आप समन्‍वयित करने के लिए सेट करने के लिए "<b>"समन्वयन सेटिंग बदलें"</b>" स्‍पर्श करें."</string>
+    <string name="wait_for_manual_sync_body" msgid="2823149409451003378">"यह खाता अपने आप समन्वयित करने के लिए सेट नहीं है. \nएक बार मेल समन्‍वयित करने के लिए, "<b>"अभी समन्वयित करें"</b>" स्‍पर्श करें, या इस खाते को मेल अपने आप समन्‍वयित करने के लिए सेट करने हेतु "<b>"समन्वयन सेटिंग बदलें"</b>" स्‍पर्श करें."</string>
     <string name="manual_sync" msgid="2271479734895537848">"अभी समन्वयित करें"</string>
     <string name="change_sync_settings" msgid="3615852118397055361">"समन्वयन सेटिंग बदलें"</string>
     <string name="photo_load_failed" msgid="577471721679146999">"चित्र लोड नहीं की जा सकी"</string>
@@ -308,14 +304,14 @@
     <string name="info" msgid="1357564480946178121">"जानकारी"</string>
     <string name="report" msgid="4318141326014579036">"रिपोर्ट करें"</string>
     <string name="sync_error" msgid="1795794969006241678">"समन्‍वयित नहीं किया जा सका."</string>
-    <string name="sync_error_message" msgid="4182644657243736635">"आपके डिवाइस में समन्वयित करने के लिए पर्याप्त मेमोरी स्थान नहीं है."</string>
-    <string name="storage" msgid="4783683938444150638">"मेमोरी"</string>
+    <string name="sync_error_message" msgid="4182644657243736635">"आपके उपकरण में समन्वयित करने के लिए पर्याप्त संग्रहण स्थान नहीं है."</string>
+    <string name="storage" msgid="4783683938444150638">"संग्रहण"</string>
     <string name="senders_split_token" msgid="6549228851819460081">", "</string>
     <string name="draft_count_format" msgid="9122583199850209286">" (<xliff:g id="COUNT">%1$s</xliff:g>)"</string>
     <string name="all_folders_heading" msgid="9023770187629170967">"सभी फ़ोल्डर"</string>
     <string name="recent_folders_heading" msgid="8943134955788867702">"हाल ही के फ़ोल्‍डर"</string>
     <string name="message_details_title" msgid="60771875776494764">"संदेश विवरण"</string>
-    <string name="preference_advance_to_title" msgid="6385669491239514630">"अतिरिक्त सुविधाएं"</string>
+    <string name="preference_advance_to_title" msgid="6385669491239514630">"स्वत: आगे"</string>
   <string-array name="prefEntries_autoAdvance">
     <item msgid="1505450878799459652">"नया"</item>
     <item msgid="8000986144872247139">"पुराना"</item>
@@ -334,8 +330,8 @@
     <string name="preferences_signature_title" msgid="2318034745474929902">"हस्ताक्षर"</string>
     <string name="preferences_signature_dialog_title" msgid="4801741764511807064">"हस्ताक्षर"</string>
     <string name="preferences_signature_summary_not_set" msgid="3776614319388053784">"सेट नहीं है"</string>
-    <string name="notification_action_reply" msgid="8378725460102575919">"उत्तर दें"</string>
-    <string name="notification_action_reply_all" msgid="5693469099941000037">"सभी प्रषकों को उत्तर दें"</string>
+    <string name="notification_action_reply" msgid="8378725460102575919">"जवाब दें"</string>
+    <string name="notification_action_reply_all" msgid="5693469099941000037">"सभी को जवाब दें"</string>
     <string name="notification_action_archive" msgid="2884874164831039047">"संग्रहीत करें"</string>
     <string name="notification_action_remove_label" msgid="3714785653186750981">"लेबल निकालें"</string>
     <string name="notification_action_delete" msgid="3201627482564624132">"हटाएं"</string>
@@ -364,7 +360,7 @@
     <item msgid="1510017057984222376">"केवल हटाएं दिखाएं"</item>
     <item msgid="3196207224108008441">"संगृहीत करें और हटाएं दिखाएं"</item>
   </string-array>
-    <string name="prefDialogTitle_removal_action" msgid="266548424110393246">"संगृहीत करें और हटाएं कार्यवाही"</string>
+    <string name="prefDialogTitle_removal_action" msgid="7914272565548361304">"डिफ़ॉल्ट सेटिंग"</string>
     <string name="preferences_default_reply_all_title" msgid="7255858488369635327">"सभी प्रषकों को उत्तर दें"</string>
     <string name="preferences_default_reply_all_summary_impl" msgid="895581085692979709">"संदेश के जवाबों के लिए डिफ़ॉल्ट के रूप में उपयोग करें"</string>
     <string name="preference_swipe_title_archive" msgid="9122333537761282714">"संगृहीत करने के लिए स्वाइप करें"</string>
@@ -372,10 +368,10 @@
     <string name="preference_swipe_description" msgid="3036560323237015010">"बातचीत की सूची में"</string>
     <string name="preference_sender_image_title" msgid="7890813537985591865">"प्रेषक का चित्र"</string>
     <string name="preference_sender_image_description" msgid="3586817690132199889">"बातचीत सूची में नाम के पास दिखाएं"</string>
-    <string name="empty_trash" msgid="3385937024924728399">"मिटाया हुआ खाली करें"</string>
-    <string name="empty_spam" msgid="2911988289997281371">"अनचाहा ईमेल खाली करें"</string>
-    <string name="empty_trash_dialog_title" msgid="2104898489663621508">"मिटाया हुआ खाली करें?"</string>
-    <string name="empty_spam_dialog_title" msgid="1130319045917820569">"अनचाहा खाली करें?"</string>
+    <string name="empty_trash" msgid="3385937024924728399">"मिटाया हुआ रिक्त करें"</string>
+    <string name="empty_spam" msgid="2911988289997281371">"स्पैम रिक्त करें"</string>
+    <string name="empty_trash_dialog_title" msgid="2104898489663621508">"मिटाया हुआ रिक्त करें?"</string>
+    <string name="empty_spam_dialog_title" msgid="1130319045917820569">"अनचाहा रिक्त करें?"</string>
   <plurals name="empty_folder_dialog_message">
     <item quantity="one" msgid="3315412388217832914">"<xliff:g id="COUNT">%1$d</xliff:g> संदेश स्थायी रूप हटा दिया जाएगा."</item>
     <item quantity="other" msgid="263840304486020101">"<xliff:g id="COUNT">%1$d</xliff:g> संदेश स्थायी रूप से हटा दिए जाएंगे."</item>
@@ -387,14 +383,9 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"फ़ोल्डर आइकन"</string>
     <string name="add_account" msgid="5905863370226612377">"खाता जोड़ें"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"युक्ति ख़ारिज करें"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"स्वत: समन्वयन बंद है."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"चालू करने के लिए स्पर्श करें."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"खाता समन्वयन बंद है."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"<xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g> में चालू करें."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"खाता सेटिंग"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="OUTBOX">%2$s</xliff:g> में <xliff:g id="NUMBER">%1$s</xliff:g> अप्रेषित"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"स्वत:-समन्वयन चालू करें?"</string>
-    <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"आपके द्वारा न केवल Gmail में, बल्कि सभी ऐप्स  और खातों में किए जाने वाले बदलाव, वेब, आपके अन्य डिवाइस, और आपके <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g> के बीच समन्वयित किए जाएंगे."</string>
+    <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"आपके द्वारा न केवल Gmail में, बल्कि सभी ऐप्स  और खातों में किए जाने वाले बदलाव, वेब, आपके अन्य उपकरणों, और आपके <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g> के बीच समन्वयित किए जाएंगे."</string>
     <string name="phone" msgid="4142617042507912053">"फ़ोन"</string>
     <string name="tablet" msgid="4593581125469224791">"टेबलेट"</string>
     <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="7239160845196929866">"चालू करें"</string>
@@ -409,7 +400,7 @@
     <string name="date_message_received_print" msgid="4168417403884350040">"<xliff:g id="DAY_AND_DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g> पर"</string>
     <string name="draft_to_heading" msgid="7370121943946205024">"इनके लिए ड्राफ़्ट:"</string>
     <string name="draft_heading" msgid="7032951343184552800">"ड्राफ़्ट"</string>
-    <string name="quoted_text_hidden_print" msgid="5256754205675159141">"उद्धृत लेख छिपा दिया गया है"</string>
+    <string name="quoted_text_hidden_print" msgid="5256754205675159141">"उद्धृत पाठ छिपा दिया गया है"</string>
   <plurals name="num_attachments">
     <item quantity="one" msgid="5494465717267988888">"<xliff:g id="COUNT">%1$d</xliff:g> अटैचमेंट"</item>
     <item quantity="other" msgid="5422167728480739361">"<xliff:g id="COUNT">%1$d</xliff:g> अटैचमेंट"</item>
@@ -439,7 +430,7 @@
     <string name="help_and_feedback" msgid="7211458338163287670">"सहायता और फ़ीडबैक"</string>
     <string name="feedback" msgid="204247008751740034">"सुझाव भेजें"</string>
     <string name="copyright" msgid="3121335168340432582">"©<xliff:g id="YEAR">%1$d</xliff:g> Google Inc."</string>
-    <string name="version" msgid="1161745345056656547">"<xliff:g id="APP_NAME">%1$s</xliff:g> वर्शन <xliff:g id="VERSION">%2$s</xliff:g>"</string>
+    <string name="version" msgid="1161745345056656547">"<xliff:g id="APP_NAME">%1$s</xliff:g> संस्करण <xliff:g id="VERSION">%2$s</xliff:g>"</string>
     <string name="view_app_page" msgid="3241990517052398927"></string>
     <string name="print_dialog" msgid="8895536548487605661">"प्रिंट करें…"</string>
     <string name="copyright_information" msgid="971422874488783312">"कॉपीराइट जानकारी"</string>
@@ -457,9 +448,9 @@
     <string name="reply_choice_smiling_face" msgid="1772253938506548631">":)"</string>
     <string name="reply_choice_frowning_face" msgid="6260338807944002651">":("</string>
     <string name="preference_header_action_confirmations" msgid="3922674681156121948">"कार्रवाई पुष्टिकरण"</string>
-    <string name="preference_confirm_before_delete_title" msgid="7563587174619033835">"हटाने से पहले दुबारा पूछें"</string>
-    <string name="preference_confirm_before_archive_title" msgid="7318645995655875718">"मेमोरी से पहले दुबारा पूछें"</string>
-    <string name="preference_confirm_before_send_title" msgid="4136585783513077039">"भेजने से पहले दुबारा पूछें"</string>
+    <string name="preference_confirm_before_delete_title" msgid="7563587174619033835">"हटाने से पहले पुष्टि करें"</string>
+    <string name="preference_confirm_before_archive_title" msgid="7318645995655875718">"संग्रहण से पहले पुष्टि करें"</string>
+    <string name="preference_confirm_before_send_title" msgid="4136585783513077039">"भेजने से पहले पुष्टि करें"</string>
     <string name="preferences_conversation_mode_title" msgid="389352009651720838">"संदेशों को स्वत: फ़िट करें"</string>
     <string name="preferences_conversation_mode_summary" msgid="5730999743867653106">"स्क्रीन पर फ़िट होने के लिए संदेशों को सिकोड़ें"</string>
     <string name="preferences_disable_snap_headers_title" msgid="7257824136988429629">"संदेश कार्रवाइयां"</string>
diff --git a/res/values-hr-sw600dp/strings.xml b/res/values-hr-sw600dp/strings.xml
index fe9f50e..d0ccab1 100644
--- a/res/values-hr-sw600dp/strings.xml
+++ b/res/values-hr-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Kopija/skriv. kop."</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Skrivena kopija"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Upravljanje mapama"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Upotrijebi kao zadano za odgovore na obavijesti o porukama"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ Kopija/skriv. kop."</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ Skrivena kopija"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Upravljanje mapama"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Upotrijebi kao zadano za odgovore na obavijesti o porukama"</string>
 </resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 80f85d5..d0eed0b 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -23,7 +23,7 @@
     <string name="cc" msgid="8768828862207919684">"Kopija"</string>
     <string name="bcc" msgid="519303553518479171">"Skr. kopija"</string>
     <string name="subject_hint" msgid="2136470287303571827">"Predmet"</string>
-    <string name="body_hint" msgid="6478994981747057817">"Stvori novu e-poruku"</string>
+    <string name="body_hint" msgid="6478994981747057817">"Stvori novu poruku e-pošte"</string>
     <string name="add_file_attachment" msgid="2604880054248593993">"Priloži datoteku"</string>
     <string name="add_photo_attachment" msgid="7163589794940909528">"Priloži sliku"</string>
     <string name="save_draft" msgid="2669523480789672118">"Spremi skicu"</string>
@@ -272,7 +272,7 @@
     <string name="tap_to_configure_folder_sync" msgid="3280434399275638071">"Sinkronizacija mape"</string>
     <string name="widget_large_unread_count" msgid="8699435859096455837">"%d+"</string>
     <string name="large_unseen_count" msgid="3055042669246912518">"Novo: <xliff:g id="COUNT">%d</xliff:g>+"</string>
-    <string name="unseen_count" msgid="5509898665569695288">"Nove: <xliff:g id="COUNT">%d</xliff:g>"</string>
+    <string name="unseen_count" msgid="5509898665569695288">"Novo: <xliff:g id="COUNT">%d</xliff:g>"</string>
   <plurals name="actionbar_unread_messages">
     <item quantity="other" msgid="3863201473731766006">"Nepročitano: <xliff:g id="COUNT">%1$d</xliff:g>"</item>
   </plurals>
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Ikona mape"</string>
     <string name="add_account" msgid="5905863370226612377">"Dodaj račun"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Odbacivanje savjeta"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Automatska sinkronizacija isključena."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Dodirnite za isključivanje."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Sinkronizacija računa nije uključena."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Uključite je u <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"postavkama računa"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"Broj neposlanih poruka u mapi <xliff:g id="OUTBOX">%2$s</xliff:g>: <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Želite li uključiti automatsku sinkronizaciju?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Promjene koje unesete na svim aplikacijama i računima, a ne samo na Gmailu, sinkronizirat će se na webu, vašim ostalim uređajima i vašem uređaju <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>."</string>
diff --git a/res/values-hu-sw600dp/strings.xml b/res/values-hu-sw600dp/strings.xml
index 517b21f..a9641e8 100644
--- a/res/values-hu-sw600dp/strings.xml
+++ b/res/values-hu-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Másolatok"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Titkos másolat"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Mappák kezelése"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Használat alapértelmezettként értesítő üzenetekhez"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ Másolatmezők"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ Titkos másolat"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Mappák kezelése"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Használat alapértelmezettként értesítő üzenetekhez"</string>
 </resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 6fbecc5..19dcda8 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Mappa ikon"</string>
     <string name="add_account" msgid="5905863370226612377">"Fiók hozzáadása"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Tipp elvetése"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Automatikus szinkronizálás kikapcsolva."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Érintse meg a bekapcsoláshoz."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Fiókszinkronizálás kikapcsolva."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Kapcsolja be itt: <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Fiókbeállítások"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> nem elküldött levél van itt: <xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Bekapcsolja az automatikus szinkronizálást?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Az összes alkalmazásban és fiókban (nem csak a Gmailben) végrehajtott módosítások szinkronizálva lesznek az internet, az egyéb eszközök és a <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g> között."</string>
diff --git a/res/values-hy-rAM-sw600dp/strings.xml b/res/values-hy-rAM-sw600dp/strings.xml
index dfc5663..5b0504e 100644
--- a/res/values-hy-rAM-sw600dp/strings.xml
+++ b/res/values-hy-rAM-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Պտճ/Ծածկպտճ"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Ծածկպտճ"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Կառավարել թղթապանակները"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Օգտագործել ըստ կանխադրման՝ բոլոր ծանուցումների համար"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ Պտճ/Ծածկպտճ"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ Ծածկպտճ"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Կառավարել թղթապանակները"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Օգտագործել որպես լռելյայն` հաղորդագրության ծանուցումների պատասխանների համար"</string>
 </resources>
diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml
index 54d4f01..a051556 100644
--- a/res/values-hy-rAM/strings.xml
+++ b/res/values-hy-rAM/strings.xml
@@ -55,6 +55,7 @@
     <string name="send" msgid="4269810089682120826">"Ուղարկել"</string>
     <string name="mark_read" msgid="579388143288052493">"Նշել որպես կարդացված"</string>
     <string name="mark_unread" msgid="6245060538061533191">"Նշել որպես չկարդացված"</string>
+    <string name="toggle_read_unread" msgid="1006469736520919028">"Նշել որպես կարդացված/չկարդացված"</string>
     <string name="mute" msgid="9164839998562321569">"Խլացնել"</string>
     <string name="add_star" msgid="3275117671153616270">"Ավելացնել աստղանիշ"</string>
     <string name="remove_star" msgid="9126690774161840733">"Հեռացնել աստղանիշը"</string>
@@ -65,7 +66,7 @@
     <string name="report_phishing" msgid="8454666464488413739">"Զեկուցել որսման մասին"</string>
     <string name="delete" msgid="6784262386780496958">"Ջնջել"</string>
     <string name="discard_drafts" msgid="5881484193628472105">"Հեռացնել սևագրերը"</string>
-    <string name="discard_failed" msgid="7520780769812210279">"Ջնջել ձախողված հաղորդագրությունները"</string>
+    <string name="discard_failed" msgid="7520780769812210279">"Ջնջել ձախողվածները"</string>
     <string name="refresh" msgid="1533748989749277511">"Թարմացնել"</string>
     <string name="reply" msgid="8337757482824207118">"Պատասխանել"</string>
     <string name="reply_all" msgid="5366796103758360957">"Պատասխանել բոլորին"</string>
@@ -137,6 +138,8 @@
   </plurals>
     <string name="content_description" msgid="854320355052962069">"<xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g> <xliff:g id="SUBJECT">%3$s</xliff:g>-ի մասին, <xliff:g id="SNIPPET">%4$s</xliff:g> <xliff:g id="DATE">%5$s</xliff:g>-ին, <xliff:g id="READSTATE">%6$s</xliff:g>"</string>
     <string name="content_description_today" msgid="1634422834354116955">"<xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g>-ի <xliff:g id="SUBJECT">%3$s</xliff:g> մասին, <xliff:g id="SNIPPET">%4$s</xliff:g> ժամը <xliff:g id="TIME">%5$s</xliff:g>-ին, <xliff:g id="READSTATE">%6$s</xliff:g>"</string>
+    <string name="content_description_with_folders" msgid="482368474097191879">"<xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g>, թեման՝ <xliff:g id="SUBJECT">%3$s</xliff:g>, <xliff:g id="SNIPPET">%4$s</xliff:g> <xliff:g id="DATE">%5$s</xliff:g>-ին, <xliff:g id="READSTATE">%6$s</xliff:g>, պիտակները՝ <xliff:g id="FOLDERS">%7$s</xliff:g>"</string>
+    <string name="content_description_today_with_folders" msgid="860548626146933495">"<xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g>, թեման՝ <xliff:g id="SUBJECT">%3$s</xliff:g>, <xliff:g id="SNIPPET">%4$s</xliff:g> <xliff:g id="TIME">%5$s</xliff:g>-ին, <xliff:g id="READSTATE">%6$s</xliff:g>, պիտակները՝ <xliff:g id="FOLDERS">%7$s</xliff:g>"</string>
     <string name="read_string" msgid="5495929677508576520">"խոսակցությունը կարդացված է"</string>
     <string name="unread_string" msgid="7342558841698083381">"կարդացված չէ"</string>
     <string name="filtered_tag" msgid="721666921386074505">"[<xliff:g id="TAG">%1$s</xliff:g>]<xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
@@ -149,8 +152,8 @@
     <string name="message_retrying" msgid="5335188121407261331">"Կրկին է փորձում..."</string>
     <string name="message_failed" msgid="7887650587384601790">"Ձախողվեց"</string>
     <string name="send_failed" msgid="2186285547449865010">"Հաղորդագրությունը չի ուղարկվել:"</string>
-    <string name="me_object_pronoun" msgid="4674452244417913816">"ես"</string>
-    <string name="me_subject_pronoun" msgid="7479328865714008288">"ես"</string>
+    <string name="me_object_pronoun" msgid="4674452244417913816">"ինձ"</string>
+    <string name="me_subject_pronoun" msgid="7479328865714008288">"ինձ"</string>
   <plurals name="confirm_delete_conversation">
     <item quantity="one" msgid="7605755011865575440">"Ջնջե՞լ այս խոսակցությունը:"</item>
     <item quantity="other" msgid="1585660381208712562">"Ջնջե՞լ այս <xliff:g id="COUNT">%1$d</xliff:g> խոսակցությունը:"</item>
@@ -274,9 +277,8 @@
     <string name="large_unseen_count" msgid="3055042669246912518">"<xliff:g id="COUNT">%d</xliff:g>+ նոր"</string>
     <string name="unseen_count" msgid="5509898665569695288">"<xliff:g id="COUNT">%d</xliff:g> նոր"</string>
   <plurals name="actionbar_unread_messages">
-    <item quantity="other" msgid="3863201473731766006">"<xliff:g id="COUNT">%1$d</xliff:g> չկարդացված"</item>
+    <item quantity="other" msgid="3863201473731766006">"<xliff:g id="COUNT">%1$d</xliff:g> չընթերցված"</item>
   </plurals>
-    <string name="actionbar_large_unread_count" msgid="753635978542372792">"<xliff:g id="COUNT">%1$d</xliff:g> + չկարդացված"</string>
     <string name="view_more_conversations" msgid="8377920000247101901">"Տեսնել այլ զրույցներ"</string>
     <string name="loading_conversation" msgid="7931600025861500397">"Բեռնում..."</string>
     <string name="activity_mailbox_selection" msgid="7489813868539767701">"Ընտրեք հաշիվը"</string>
@@ -387,11 +389,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Թղթապանակի պատկերակ"</string>
     <string name="add_account" msgid="5905863370226612377">"Ավելացնել հաշիվ"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Անտեսել հուշումը"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Ինքնահամաժամեցումն անջատված է:"</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Հպեք՝ միացնելու համար:"</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Հաշվի համաժամեցումն անջատված է:"</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Միացրեք <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>-ում:"</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Հաշվի կարգավորումներ"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> չուղարկված՝ <xliff:g id="OUTBOX">%2$s</xliff:g>-ում"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Միացնե՞լ ինքնահամաժամեցումը:"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Ոչ միայն Gmail-ում, այլև մյուս բոլոր հավելվածներում և հաշիվներում ձեր կատարած փոփոխությունները կհամաժամեցվեն ցանցի, ձեր մյուս սարքերի և ձեր  <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>-ի միջև:"</string>
diff --git a/res/values-in-sw600dp/strings.xml b/res/values-in-sw600dp/strings.xml
index fb749f7..438df39 100644
--- a/res/values-in-sw600dp/strings.xml
+++ b/res/values-in-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Cc/Bcc"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Bcc"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Kelola folder"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Gunakan sebagai default untuk menjawab pemberitahuan pesan"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ Cc/Bcc"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ Bcc"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Kelola folder"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Gunakan sebagai default untuk menjawab pemberitahuan pesan"</string>
 </resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index c077405..c1a12f8 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -34,7 +34,7 @@
     <item msgid="2767793214788399009">"Balas semua"</item>
     <item msgid="2758162027982270607">"Teruskan"</item>
   </string-array>
-    <string name="reply_attribution" msgid="1114972798797833259">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="PERSON">%s</xliff:g> menulis:"</string>
+    <string name="reply_attribution" msgid="1114972798797833259">"Pada <xliff:g id="DATE">%s</xliff:g>, <xliff:g id="PERSON">%s</xliff:g> menulis:"</string>
     <string name="forward_attribution" msgid="597850048345475752">"---------- Pesan Terusan----------&lt;br&gt; Dari: <xliff:g id="FROM">%1$s</xliff:g>&lt;br&gt;Tanggal: <xliff:g id="DATE">%2$s</xliff:g>&lt;br&gt;Subjek: <xliff:g id="SUBJECT">%3$s</xliff:g>&lt;br&gt;Kepada: <xliff:g id="TO">%4$s</xliff:g>&lt;br&gt;"</string>
     <string name="forward_attribution_no_headers" msgid="1828826576779486239">"---------- Pesan yang diteruskan ----------"</string>
     <string name="cc_attribution" msgid="2928584226469388899">"Cc: <xliff:g id="CC">%1$s</xliff:g>&lt;br&gt;"</string>
@@ -55,6 +55,7 @@
     <string name="send" msgid="4269810089682120826">"Kirim"</string>
     <string name="mark_read" msgid="579388143288052493">"Tandai telah dibaca"</string>
     <string name="mark_unread" msgid="6245060538061533191">"Tandai belum dibaca"</string>
+    <string name="toggle_read_unread" msgid="1006469736520919028">"Alihkan baca belum dibaca"</string>
     <string name="mute" msgid="9164839998562321569">"Bisukan"</string>
     <string name="add_star" msgid="3275117671153616270">"Bintangi"</string>
     <string name="remove_star" msgid="9126690774161840733">"Hapus bintang"</string>
@@ -111,7 +112,7 @@
     <string name="please_wait" msgid="3953824147776128899">"Harap tunggu..."</string>
     <string name="saved" msgid="161536102236967534">"Tersimpan, <xliff:g id="SIZE">%s</xliff:g>"</string>
     <string name="download_failed" msgid="3878373998269062395">"Tidak dapat mengunduh. Sentuh untuk mencoba lagi."</string>
-    <string name="menu_photo_save_all" msgid="2742869476474613396">"Simpan semua"</string>
+    <string name="menu_photo_save_all" msgid="2742869476474613396">"Smpn semua"</string>
     <string name="menu_photo_share" msgid="6410980274832639330">"Bagikan"</string>
     <string name="menu_photo_share_all" msgid="3049053252719665320">"Bagi semua"</string>
     <string name="menu_photo_print" msgid="3084679038179342333">"Cetak"</string>
@@ -173,12 +174,12 @@
     <string name="getting_messages" msgid="8403333791332403244">"Mendapatkan pesan Anda"</string>
     <string name="undo" msgid="8256285267701059609">"Urungkan"</string>
   <plurals name="conversation_unstarred">
-    <item quantity="one" msgid="839233699150563831">"Menghapus bintang pada <xliff:g id="COUNT">%1$d</xliff:g> percakapan."</item>
-    <item quantity="other" msgid="7677305734833709789">"Meredupkan bintang <xliff:g id="COUNT">%1$d</xliff:g> percakapan."</item>
+    <item quantity="one" msgid="1701235480675303125">"Hapus bintang <xliff:g id="COUNT">%1$d</xliff:g> percapakan"</item>
+    <item quantity="other" msgid="1154441830432477256">"Hapus bintang <xliff:g id="COUNT">%1$d</xliff:g> percakapan"</item>
   </plurals>
   <plurals name="conversation_muted">
-    <item quantity="one" msgid="3339638225564408438">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; dibisukan."</item>
-    <item quantity="other" msgid="4276111931404654219">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; dibisukan."</item>
+    <item quantity="one" msgid="3622533556738049499">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; tidak ditampilkan"</item>
+    <item quantity="other" msgid="4559007262578295280">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; tidak ditampilkan"</item>
   </plurals>
   <plurals name="conversation_spammed">
     <item quantity="one" msgid="6986172030710967687">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; dilaporkan sebagai spam."</item>
@@ -228,7 +229,7 @@
     <item quantity="other" msgid="5285673397387128129">"<xliff:g id="COUNT">%1$d</xliff:g> pesan lebih lama"</item>
   </plurals>
     <string name="from_heading" msgid="48290556829713090">"Dari:"</string>
-    <string name="replyto_heading" msgid="8275255318292059079">"Balas ke:"</string>
+    <string name="replyto_heading" msgid="8275255318292059079">"Balas-ke:"</string>
     <string name="to_heading" msgid="3495203282540398336">"Kepada: "</string>
     <string name="to_heading_no_space" msgid="679167047628308670">"Kepada:"</string>
     <string name="cc_heading" msgid="5603892257866345823">"Cc:"</string>
@@ -387,11 +388,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Ikon folder"</string>
     <string name="add_account" msgid="5905863370226612377">"Tambahkan akun"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Tutup kiat"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Sinkronisasi otomatis mati."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Sentuh untuk mengaktifkan."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Sinkronisasi akun mati."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Aktifkan di <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Setelan akun"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> tidak terkirim di <xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Aktifkan sinkronisasi otomatis?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Perubahan yang Anda lakukan pada semua aplikasi dan akun, bukan hanya Gmail, akan disinkronkan antara web, perangkat Anda lainnya, dan <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>."</string>
diff --git a/res/values-is-rIS-sw600dp/strings.xml b/res/values-is-rIS-sw600dp/strings.xml
deleted file mode 100644
index d17672f..0000000
--- a/res/values-is-rIS-sw600dp/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-     Copyright (C) 2012 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Afrit/falið afrit"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Falið afrit"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Stjórna möppum"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Nota sjálfgefið fyrir svör við skeytatilkynningum"</string>
-</resources>
diff --git a/res/values-is-rIS/strings.xml b/res/values-is-rIS/strings.xml
deleted file mode 100644
index 6dbb805..0000000
--- a/res/values-is-rIS/strings.xml
+++ /dev/null
@@ -1,483 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-     Copyright (C) 2011 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="from" msgid="5159056500059912358">"Frá"</string>
-    <string name="to" msgid="3971614275716830581">"Til"</string>
-    <string name="cc" msgid="8768828862207919684">"Afrit"</string>
-    <string name="bcc" msgid="519303553518479171">"Falið afr."</string>
-    <string name="subject_hint" msgid="2136470287303571827">"Efni"</string>
-    <string name="body_hint" msgid="6478994981747057817">"Skrifa tölvupóst"</string>
-    <string name="add_file_attachment" msgid="2604880054248593993">"Senda viðhengi"</string>
-    <string name="add_photo_attachment" msgid="7163589794940909528">"Senda mynd"</string>
-    <string name="save_draft" msgid="2669523480789672118">"Vista drög"</string>
-    <string name="discard" msgid="4905982179911608430">"Fleygja"</string>
-    <string name="compose" msgid="2602861958391035523">"Skrifa póst"</string>
-  <string-array name="compose_modes">
-    <item msgid="9000553538766397816">"Svara"</item>
-    <item msgid="2767793214788399009">"Svara öllum"</item>
-    <item msgid="2758162027982270607">"Áframsenda"</item>
-  </string-array>
-    <string name="reply_attribution" msgid="1114972798797833259">"<xliff:g id="DATE">%s</xliff:g> skrifaði <xliff:g id="PERSON">%s</xliff:g>:"</string>
-    <string name="forward_attribution" msgid="597850048345475752">"---------- Áframsent skeyti ----------&lt;br&gt;Frá: <xliff:g id="FROM">%1$s</xliff:g>&lt;br&gt;Dagsetning: <xliff:g id="DATE">%2$s</xliff:g>&lt;br&gt;Efni: <xliff:g id="SUBJECT">%3$s</xliff:g>&lt;br&gt;Til: <xliff:g id="TO">%4$s</xliff:g>&lt;br&gt;"</string>
-    <string name="forward_attribution_no_headers" msgid="1828826576779486239">"---------- Áframsent skeyti ----------"</string>
-    <string name="cc_attribution" msgid="2928584226469388899">"Afrit: <xliff:g id="CC">%1$s</xliff:g>&lt;br&gt;"</string>
-    <string name="select_attachment_type" msgid="353236686616663062">"Veldu gerð viðhengis"</string>
-    <string name="too_large_to_attach_single" msgid="2669897137966512530">"Ekki er hægt að hengja við skrá sem er stærri en <xliff:g id="MAXSIZE">%1$s</xliff:g>."</string>
-    <string name="too_large_to_attach_multiple" msgid="1620163295709036343">"Ein eða fleiri skrár voru ekki hengdar við. Hámarkið er <xliff:g id="MAXSIZE">%1$s</xliff:g>."</string>
-    <string name="too_large_to_attach_additional" msgid="4964155563465970480">"Skráin var ekki hengd við. <xliff:g id="MAXSIZE">%1$s</xliff:g> hámarki náð."</string>
-    <string name="generic_attachment_problem" msgid="4683974765387240723">"Ekki var hægt að hengja skrána við."</string>
-    <string name="recipient_needed" msgid="319816879398937214">"Bættu að minnsta kosti einum viðtakanda við."</string>
-    <string name="recipient_error_dialog_title" msgid="760741480291963706">"Villa í viðtakanda"</string>
-    <string name="confirm_send_title" msgid="4664971589247101530">"Senda skeyti?"</string>
-    <string name="confirm_send_message_with_no_subject" msgid="1442628074022609987">"Enginn texti er í efnislínu skeytisins."</string>
-    <string name="confirm_send_message_with_no_body" msgid="3329355318700201516">"Enginn texti er í meginmáli skeytisins."</string>
-    <string name="confirm_send_message" msgid="6211518590166222735">"Senda þetta skeyti?"</string>
-    <string name="message_discarded" msgid="6792661321962262024">"Skeyti fleygt."</string>
-    <string name="signature" msgid="3172144541947408374">\n\n"<xliff:g id="SIGNATURE">%s</xliff:g>"</string>
-    <string name="custom_from_account_label" msgid="5042317430007736322">"Senda póst sem:"</string>
-    <string name="send" msgid="4269810089682120826">"Senda"</string>
-    <string name="mark_read" msgid="579388143288052493">"Merkja sem lesið"</string>
-    <string name="mark_unread" msgid="6245060538061533191">"Merkja sem ólesið"</string>
-    <string name="mute" msgid="9164839998562321569">"Þagga"</string>
-    <string name="add_star" msgid="3275117671153616270">"Stjörnumerkja"</string>
-    <string name="remove_star" msgid="9126690774161840733">"Fjarlægja stjörnu"</string>
-    <string name="remove_folder" msgid="2379905457788576297">"Fjarlægja úr <xliff:g id="FOLDERNAME">%1$s</xliff:g>"</string>
-    <string name="archive" msgid="5978663590021719939">"Setja í geymslu"</string>
-    <string name="report_spam" msgid="4106897677959987340">"Tilkynna sem ruslpóst"</string>
-    <string name="mark_not_spam" msgid="8617774236231366651">"Tilkynna sem ekki ruslpóst"</string>
-    <string name="report_phishing" msgid="8454666464488413739">"Tilkynna vefveiðar"</string>
-    <string name="delete" msgid="6784262386780496958">"Eyða"</string>
-    <string name="discard_drafts" msgid="5881484193628472105">"Fleygja drögum"</string>
-    <string name="discard_failed" msgid="7520780769812210279">"Mistókst að fleygja"</string>
-    <string name="refresh" msgid="1533748989749277511">"Endurnýja"</string>
-    <string name="reply" msgid="8337757482824207118">"Svara"</string>
-    <string name="reply_all" msgid="5366796103758360957">"Svara öllum"</string>
-    <string name="resume_draft" msgid="1272723181782570649">"Breyta"</string>
-    <string name="forward" msgid="4397585145490426320">"Áframsenda"</string>
-    <string name="menu_compose" msgid="4575025207594709432">"Skrifa póst"</string>
-    <string name="menu_change_folders" msgid="2194946192901276625">"Skipta um möppu"</string>
-    <string name="menu_move_to" msgid="7948877550284452830">"Færa í"</string>
-    <string name="menu_move_to_inbox" msgid="258554178236001444">"Færa í pósthólf"</string>
-    <string name="menu_manage_folders" msgid="8486398523679534519">"Möppustillingar"</string>
-    <string name="menu_show_original" msgid="2330398228979616661">"Upphafleg stærð"</string>
-    <string name="menu_settings" msgid="7993485401501778040">"Stillingar"</string>
-    <string name="menu_search" msgid="1949652467806052768">"Leita"</string>
-    <string name="drawer_title" msgid="3766219846644975778">"Skoðun"</string>
-    <string name="mark_important" msgid="8781680450177768820">"Merkja sem mikilvægt"</string>
-    <string name="mark_not_important" msgid="3342258155408116917">"Merkja sem léttvægt"</string>
-    <string name="add_cc_label" msgid="2249679001141195213">"Senda afrit/falið afrit"</string>
-    <string name="add_bcc_label" msgid="963745641238037813">"Senda falið afrit"</string>
-    <string name="quoted_text" msgid="977782904293216533">"Hafa tilvitnun með"</string>
-    <string name="quoted_text_label" msgid="2296807722849923934">"Tilvitnun"</string>
-    <string name="respond_inline" msgid="6609746292081928078">"Svara í línu"</string>
-    <string name="bytes" msgid="651011686747499628">"<xliff:g id="COUNT">%s</xliff:g> B"</string>
-    <string name="kilobytes" msgid="1523463964465770347">"<xliff:g id="COUNT">%s</xliff:g> kB"</string>
-    <string name="megabytes" msgid="4309397368708773323">"<xliff:g id="COUNT">%s</xliff:g> MB"</string>
-    <string name="attachment_image" msgid="6375306026208274564">"Mynd"</string>
-    <string name="attachment_video" msgid="7119476472603939848">"Myndskeið"</string>
-    <string name="attachment_audio" msgid="7097658089301809284">"Hljóð"</string>
-    <string name="attachment_text" msgid="3485853714965922173">"Texti"</string>
-    <string name="attachment_application_msword" msgid="2110108876623152162">"Skjal"</string>
-    <string name="attachment_application_vnd_ms_powerpoint" msgid="425353008963359230">"Kynning"</string>
-    <string name="attachment_application_vnd_ms_excel" msgid="5585781311136609103">"Töflureiknir"</string>
-    <string name="attachment_application_pdf" msgid="4207340200944655970">"PDF"</string>
-    <string name="attachment_unknown" msgid="3360536730101083926">"<xliff:g id="ATTACHMENTEXTENSION">%s</xliff:g>-skrá"</string>
-    <string name="preview_attachment" msgid="6265457626086113833">"Forskoða"</string>
-    <string name="save_attachment" msgid="375685179032130033">"Vista"</string>
-    <string name="cancel_attachment" msgid="6900093625792891122">"Hætta við"</string>
-    <string name="open_attachment" msgid="6100396056314739761">"Opna"</string>
-    <string name="install_attachment" msgid="8119470822958087928">"Setja upp"</string>
-    <string name="download_again" msgid="8195787340878328119">"Sækja aftur"</string>
-    <string name="more_info_attachment" msgid="2899691682394864507">"Upplýsingar"</string>
-    <string name="no_application_found" msgid="7309485680354949680">"Ekkert forrit getur opnað þetta viðhengi til að skoða það."</string>
-    <string name="fetching_attachment" msgid="2286628490159574159">"Sækir viðhengi"</string>
-    <string name="please_wait" msgid="3953824147776128899">"Augnablik…"</string>
-    <string name="saved" msgid="161536102236967534">"Vistað, <xliff:g id="SIZE">%s</xliff:g>"</string>
-    <string name="download_failed" msgid="3878373998269062395">"Ekki var hægt að sækja. Snertu til að reyna aftur."</string>
-    <string name="menu_photo_save_all" msgid="2742869476474613396">"Vista allt"</string>
-    <string name="menu_photo_share" msgid="6410980274832639330">"Deila"</string>
-    <string name="menu_photo_share_all" msgid="3049053252719665320">"Deila öllum"</string>
-    <string name="menu_photo_print" msgid="3084679038179342333">"Prenta"</string>
-    <string name="saving" msgid="6274238733828387433">"Vistar…"</string>
-    <string name="choosertitle_sharevia" msgid="3539537264873337959">"Deila í gegnum"</string>
-    <string name="contextmenu_openlink" msgid="6952228183947135362">"Opna í vafra"</string>
-    <string name="contextmenu_copy" msgid="2584243784216385180">"Afrita"</string>
-    <string name="contextmenu_copylink" msgid="8659897702269320063">"Afrita vefslóð tengils"</string>
-    <string name="contextmenu_view_image" msgid="1031172763893491000">"Skoða mynd"</string>
-    <string name="contextmenu_dial_dot" msgid="8881095692316726628">"Hringja…"</string>
-    <string name="contextmenu_sms_dot" msgid="5319737001771622657">"SMS…"</string>
-    <string name="contextmenu_add_contact" msgid="2310064151427072475">"Bæta tengilið við"</string>
-    <string name="contextmenu_send_mail" msgid="3834654593200105396">"Senda tölvupóst"</string>
-    <string name="contextmenu_map" msgid="5118951927399465521">"Kort"</string>
-    <string name="contextmenu_sharelink" msgid="8670940060477758709">"Deila tengli"</string>
-    <string name="contextmenu_help" msgid="4209674157707873384">"Hjálp"</string>
-    <string name="contextmenu_feedback" msgid="8319100902136337085">"Senda ábendingu"</string>
-    <!-- no translation found for num_selected (7990204488812654380) -->
-    <skip />
-  <plurals name="move_conversation">
-    <item quantity="one" msgid="237882018518207244">"Færa samtal"</item>
-    <item quantity="other" msgid="6639576653114141743">"Færa <xliff:g id="ID_1">%1$d</xliff:g> samtöl"</item>
-  </plurals>
-    <string name="content_description" msgid="854320355052962069">"<xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g> um <xliff:g id="SUBJECT">%3$s</xliff:g>, <xliff:g id="SNIPPET">%4$s</xliff:g> <xliff:g id="DATE">%5$s</xliff:g>, <xliff:g id="READSTATE">%6$s</xliff:g>"</string>
-    <string name="content_description_today" msgid="1634422834354116955">"<xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g> um <xliff:g id="SUBJECT">%3$s</xliff:g>, <xliff:g id="SNIPPET">%4$s</xliff:g> klukkan <xliff:g id="TIME">%5$s</xliff:g>, <xliff:g id="READSTATE">%6$s</xliff:g>"</string>
-    <string name="read_string" msgid="5495929677508576520">"samtal lesið"</string>
-    <string name="unread_string" msgid="7342558841698083381">"samtal ekki lesið"</string>
-    <string name="filtered_tag" msgid="721666921386074505">"[<xliff:g id="TAG">%1$s</xliff:g>]<xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="badge_and_subject" msgid="3979372269373936750">"<xliff:g id="ID_1">%1$s</xliff:g> <xliff:g id="ID_2">%2$s</xliff:g>"</string>
-  <plurals name="draft">
-    <item quantity="one" msgid="6717535677167943402">"Drög"</item>
-    <item quantity="other" msgid="1335781147509740039">"Drög"</item>
-  </plurals>
-    <string name="sending" msgid="5600034886763930499">"Sendir…"</string>
-    <string name="message_retrying" msgid="5335188121407261331">"Reynir aftur…"</string>
-    <string name="message_failed" msgid="7887650587384601790">"Mistókst"</string>
-    <string name="send_failed" msgid="2186285547449865010">"Skeytið var ekki sent."</string>
-    <string name="me_object_pronoun" msgid="4674452244417913816">"ég"</string>
-    <string name="me_subject_pronoun" msgid="7479328865714008288">"ég"</string>
-  <plurals name="confirm_delete_conversation">
-    <item quantity="one" msgid="7605755011865575440">"Eyða þessu samtali?"</item>
-    <item quantity="other" msgid="1585660381208712562">"Eyða þessum <xliff:g id="COUNT">%1$d</xliff:g> samtölum?"</item>
-  </plurals>
-  <plurals name="confirm_archive_conversation">
-    <item quantity="one" msgid="9105551557653306945">"Setja þetta samtal í geymslu?"</item>
-    <item quantity="other" msgid="2001972798185641108">"Setja þessi <xliff:g id="COUNT">%1$d</xliff:g> samtöl í geymslu?"</item>
-  </plurals>
-  <plurals name="confirm_discard_drafts_conversation">
-    <item quantity="one" msgid="2030421499893210789">"Fleygja þessu skeyti?"</item>
-    <item quantity="other" msgid="782234447471532005">"Fleygja þessum <xliff:g id="COUNT">%1$d</xliff:g> skeytum?"</item>
-  </plurals>
-    <string name="confirm_discard_text" msgid="5172680524418848519">"Fleygja þessu skeyti?"</string>
-    <string name="loading_conversations" msgid="7255732786298655246">"Hleður…"</string>
-    <string name="empty_inbox" msgid="5901734942362315228">"Allt frágengið! Njóttu dagsins."</string>
-    <string name="empty_search" msgid="8564899353449880818">"Obbosí! „<xliff:g id="SEARCH_QUERY">%1$s</xliff:g>“ skilaði engum niðurstöðum."</string>
-    <string name="empty_spam_folder" msgid="3288985543286122800">"Húrra, hér er enginn ruslpóstur!"</string>
-    <string name="empty_trash_folder" msgid="378119063015945020">"Ekkert rusl hér. Láttu ekki þitt eftir liggja!"</string>
-    <string name="empty_folder" msgid="3227552635613553855">"Enginn póstur hér."</string>
-    <string name="getting_messages" msgid="8403333791332403244">"Sækir skeytin þín"</string>
-    <string name="undo" msgid="8256285267701059609">"Afturkalla"</string>
-  <plurals name="conversation_unstarred">
-    <item quantity="one" msgid="839233699150563831">"Fjarlægir stjörnu af <xliff:g id="COUNT">%1$d</xliff:g> samtali."</item>
-    <item quantity="other" msgid="7677305734833709789">"Stjörnur fjarlægðar af <xliff:g id="COUNT">%1$d</xliff:g> samtölum."</item>
-  </plurals>
-  <plurals name="conversation_muted">
-    <item quantity="one" msgid="3339638225564408438">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; þaggað."</item>
-    <item quantity="other" msgid="4276111931404654219">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; þögguð."</item>
-  </plurals>
-  <plurals name="conversation_spammed">
-    <item quantity="one" msgid="6986172030710967687">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; tilkynnt sem ruslpóstur."</item>
-    <item quantity="other" msgid="5900913789259199137">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; tilkynnt sem ruslpóstur."</item>
-  </plurals>
-  <plurals name="conversation_not_spam">
-    <item quantity="one" msgid="2294904093653094150">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; merkt sem ekki ruslpóstur."</item>
-    <item quantity="other" msgid="4966164423991098144">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; merkt sem ekki ruslpóstur."</item>
-  </plurals>
-  <plurals name="conversation_not_important">
-    <item quantity="one" msgid="3824809189993339030">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; merkt sem léttvægt."</item>
-    <item quantity="other" msgid="1215472798075869124">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; merkt sem léttvæg."</item>
-  </plurals>
-  <plurals name="conversation_phished">
-    <item quantity="one" msgid="4330095881258771201">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; tilkynnt sem vefveiðar."</item>
-    <item quantity="other" msgid="9218674052779504277">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; tilkynnt sem vefveiðar."</item>
-  </plurals>
-  <plurals name="conversation_archived">
-    <item quantity="one" msgid="4127890884907503696">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; sett í geymslu."</item>
-    <item quantity="other" msgid="7789480176789922968">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; í geymslu."</item>
-  </plurals>
-  <plurals name="conversation_deleted">
-    <item quantity="one" msgid="5591889079235938982">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; eytt."</item>
-    <item quantity="other" msgid="7060256058737892078">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; eytt."</item>
-  </plurals>
-    <string name="deleted" msgid="7378013910782008375">"Eytt"</string>
-    <string name="archived" msgid="6283673603512713022">"Sett í geymslu"</string>
-    <string name="folder_removed" msgid="5656281444688183676">"Fjarlægt úr <xliff:g id="FOLDERNAME">%1$s</xliff:g>"</string>
-  <plurals name="conversation_folder_changed">
-    <item quantity="one" msgid="6463727361987396734">"Möppu breytt."</item>
-    <item quantity="other" msgid="8815390494333090939">"Möppum breytt."</item>
-  </plurals>
-    <string name="conversation_folder_moved" msgid="6475872337373081683">"Fært í <xliff:g id="FOLDERNAME">%1$s</xliff:g>"</string>
-    <string name="search_results_header" msgid="1529438451150580188">"Niðurstöður"</string>
-    <string name="search_unsupported" msgid="2873920566477359177">"Leit er ekki studd á þessum reikningi."</string>
-    <string name="add_label" msgid="3285338046038610902">"Bæta möppu við"</string>
-    <string name="new_incoming_messages_one" msgid="5933087567495998661">"Sýna nýtt skeyti sem <xliff:g id="SENDER">%s</xliff:g> sendi."</string>
-  <plurals name="new_incoming_messages_many">
-    <item quantity="other" msgid="4394042684501388790">"Sýna <xliff:g id="COUNT">%1$d</xliff:g> ný skeyti."</item>
-  </plurals>
-    <string name="date_and_view_details" msgid="2952994746916149969">"<xliff:g id="DATE">%1$s</xliff:g> &lt;a href=\'http://www.example.com\'&gt;Skoða upplýsingar&lt;/a&gt;"</string>
-    <string name="hide_details" msgid="8018801050702453314">"Fela upplýsingar"</string>
-    <string name="to_message_header" msgid="3954385178027011919">"til <xliff:g id="RECIPIENTS">%1$s</xliff:g>"</string>
-    <string name="contact_info_string" msgid="6484930184867405276">"Sýna samskiptaupplýsingar fyrir <xliff:g id="NAME">%1$s</xliff:g>"</string>
-    <string name="contact_info_string_default" msgid="6204228921864816351">"Sýna samskiptaupplýsingar"</string>
-  <plurals name="show_messages_read">
-    <item quantity="other" msgid="5285673397387128129">"<xliff:g id="COUNT">%1$d</xliff:g> eldri skeyti"</item>
-  </plurals>
-    <string name="from_heading" msgid="48290556829713090">"Frá:"</string>
-    <string name="replyto_heading" msgid="8275255318292059079">"Svarnetfang:"</string>
-    <string name="to_heading" msgid="3495203282540398336">"Til: "</string>
-    <string name="to_heading_no_space" msgid="679167047628308670">"Til:"</string>
-    <string name="cc_heading" msgid="5603892257866345823">"Cc:"</string>
-    <string name="bcc_heading" msgid="1482186590756218269">"Bcc:"</string>
-    <string name="date_heading" msgid="4213063948406397168">"Dags.:"</string>
-    <string name="show_images" msgid="436044894053204084">"Sýna myndir"</string>
-    <string name="always_show_images" msgid="556087529413707819">"Sýna alltaf myndir frá þessum sendanda"</string>
-    <string name="always_show_images_toast" msgid="3763157294047555051">"Myndir frá þessum sendanda verða sýndar sjálfkrafa."</string>
-    <string name="address_display_format" msgid="2098008376913966177">"<xliff:g id="NAME">%1$s</xliff:g> <xliff:g id="EMAIL">%2$s</xliff:g>"</string>
-    <string name="address_display_format_with_via_domain" msgid="8108294635074750048">"<xliff:g id="NAME">%1$s</xliff:g> <xliff:g id="EMAIL">%2$s</xliff:g> í gegnum <xliff:g id="VIA_DOMAIN">%3$s</xliff:g>"</string>
-    <string name="message_saved" msgid="3291655042310241793">"Skeyti vistað sem drög."</string>
-    <string name="sending_message" msgid="2487846954946637084">"Sendir skeyti…"</string>
-    <string name="invalid_recipient" msgid="9157434699389936584">"Netfangið <xliff:g id="WRONGEMAIL">%s</xliff:g> er ógilt."</string>
-    <string name="show_elided" msgid="3456154624105704327">"Sýna tilvitnun"</string>
-    <string name="hide_elided" msgid="5768235486834692733">"▼ Fela tilvitnun"</string>
-    <string name="message_invite_title" msgid="5985161025144867256">"Dagatalsboð"</string>
-    <string name="message_invite_calendar_view" msgid="9181966650840809197">"Skoða á dagatali"</string>
-    <string name="message_invite_label_attending" msgid="4194264767870003397">"Á að mæta?"</string>
-    <string name="message_invite_accept" msgid="8002758842580134835">"Já"</string>
-    <string name="message_invite_tentative" msgid="3199418731566655887">"Kannski"</string>
-    <string name="message_invite_decline" msgid="6331040872447290777">"Nei"</string>
-    <string name="enumeration_comma" msgid="2848850136844740850">", "</string>
-    <string name="send_anyway" msgid="2727576121007079643">"Senda samt"</string>
-    <string name="ok" msgid="6178802457914802336">"Í lagi"</string>
-    <string name="done" msgid="344354738335270292">"Lokið"</string>
-    <string name="cancel" msgid="4831678293149626190">"Hætta við"</string>
-    <string name="clear" msgid="765949970989448022">"Hreinsa"</string>
-    <string name="next" msgid="2662478712866255138">"Áfram"</string>
-    <string name="previous" msgid="8985379053279804274">"Til baka"</string>
-  <string-array name="sync_status">
-    <item msgid="4600303222943450797">"Tókst"</item>
-    <item msgid="2972425114100316260">"Engin tenging."</item>
-    <item msgid="8594593386776437871">"Innskráning tókst ekki."</item>
-    <item msgid="1375193906551623606">"Öryggisvilla."</item>
-    <item msgid="195177374927979967">"Ekki var hægt að samstilla."</item>
-    <item msgid="8026148967150231130">"Innri villa"</item>
-    <item msgid="5442620760791553027">"Villa á þjóni"</item>
-  </string-array>
-    <string name="tap_to_configure" msgid="137172348280050643">"Snertu til að setja upp"</string>
-    <string name="non_synced_folder_description" msgid="3044618511909304701">"Til að skoða samtöl skaltu samstilla þessa möppu."</string>
-    <string name="tap_to_configure_folder_sync" msgid="3280434399275638071">"Samstilla möppu"</string>
-    <string name="widget_large_unread_count" msgid="8699435859096455837">"%d+"</string>
-    <string name="large_unseen_count" msgid="3055042669246912518">"<xliff:g id="COUNT">%d</xliff:g>+ ný"</string>
-    <string name="unseen_count" msgid="5509898665569695288">"<xliff:g id="COUNT">%d</xliff:g> nýtt"</string>
-  <plurals name="actionbar_unread_messages">
-    <item quantity="other" msgid="3863201473731766006">"<xliff:g id="COUNT">%1$d</xliff:g> ólesin"</item>
-  </plurals>
-    <string name="actionbar_large_unread_count" msgid="753635978542372792">"<xliff:g id="COUNT">%1$d</xliff:g>+ ólesin"</string>
-    <string name="view_more_conversations" msgid="8377920000247101901">"Skoða fleiri samtöl"</string>
-    <string name="loading_conversation" msgid="7931600025861500397">"Hleður…"</string>
-    <string name="activity_mailbox_selection" msgid="7489813868539767701">"Velja reikning"</string>
-    <string name="activity_folder_selection" msgid="8375243281001234750">"Velja möppu"</string>
-    <string name="folder_shortcut_widget_label" msgid="6466292659577092915">"Tölvupóstsmappa"</string>
-    <string name="change_folders_selection_dialog_title" msgid="9174464298613273814">"Skipta um möppu"</string>
-    <string name="move_to_selection_dialog_title" msgid="4052506464467083621">"Færa í"</string>
-    <string name="search_hint" msgid="4916671414132334289">"Leita í pósti"</string>
-    <!-- no translation found for search_results_loaded (1784879343458807514) -->
-    <skip />
-    <string name="network_error" msgid="5931164247644972255">"Engin tenging"</string>
-    <string name="retry" msgid="916102442074217293">"Reyna aftur"</string>
-    <string name="load_more" msgid="8702691358453560575">"Hlaða fleiri"</string>
-    <!-- no translation found for load_attachment (3894318473827290350) -->
-    <skip />
-    <string name="shortcut_name_title" msgid="1562534040126088628">"Gefa möppuflýtileið heiti"</string>
-    <string name="wait_for_sync_title" msgid="4577632826912823075">"Bíður eftir samstillingu"</string>
-    <string name="not_synced_title" msgid="3600180500934086346">"Reikningur ekki samstilltur"</string>
-    <string name="wait_for_manual_sync_body" msgid="2823149409451003378">"Þessi reikningur er ekki settur upp fyrir sjálfvirka samstillingu.\nSnertu "<b>"Samstilla núna"</b>" til að samstilla póst einu sinni eða "<b>"Breyta samstillingarkostum"</b>" til að setja upp sjálfvirka samstillingu á þessum reikningi."</string>
-    <string name="manual_sync" msgid="2271479734895537848">"Samstilla núna"</string>
-    <string name="change_sync_settings" msgid="3615852118397055361">"Breyta samstillingarkostum"</string>
-    <string name="photo_load_failed" msgid="577471721679146999">"Ekki var hægt að hlaða mynd"</string>
-    <string name="cant_move_or_change_labels" msgid="4155490583610926755">"Ekki er hægt að færa skeytin vegna þess þau koma frá mörgum reikningum."</string>
-    <string name="multiple_new_message_notification_item" msgid="1386588046275174918"><b>"<xliff:g id="SENDER">%1$s</xliff:g>"</b>"   <xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="single_new_message_notification_big_text" msgid="2170154732664242904">"<xliff:g id="SUBJECT">%1$s</xliff:g>\n<xliff:g id="SNIPPET">%2$s</xliff:g>"</string>
-    <string name="ignore_spam_warning" msgid="8760314545535838430">"Hunsa, ég treysti þessu skeyti"</string>
-    <string name="via_domain" msgid="537951148511529082">"í gegnum <xliff:g id="VIADOMAIN">%1$s</xliff:g>"</string>
-    <string name="signin" msgid="4699091478139791244">"Skrá inn"</string>
-    <string name="info" msgid="1357564480946178121">"Upplýsingar"</string>
-    <string name="report" msgid="4318141326014579036">"Tilkynna"</string>
-    <string name="sync_error" msgid="1795794969006241678">"Ekki var hægt að samstilla."</string>
-    <string name="sync_error_message" msgid="4182644657243736635">"Ekki er nægt geymslurými í tækinu til að samstilla."</string>
-    <string name="storage" msgid="4783683938444150638">"Geymsla"</string>
-    <string name="senders_split_token" msgid="6549228851819460081">", "</string>
-    <string name="draft_count_format" msgid="9122583199850209286">" (<xliff:g id="COUNT">%1$s</xliff:g>)"</string>
-    <string name="all_folders_heading" msgid="9023770187629170967">"Allar möppur"</string>
-    <string name="recent_folders_heading" msgid="8943134955788867702">"Nýlegar möppur"</string>
-    <string name="message_details_title" msgid="60771875776494764">"Upplýsingar um skeyti"</string>
-    <string name="preference_advance_to_title" msgid="6385669491239514630">"Sjálfkrafa áfram"</string>
-  <string-array name="prefEntries_autoAdvance">
-    <item msgid="1505450878799459652">"Nýrri"</item>
-    <item msgid="8000986144872247139">"Eldri"</item>
-    <item msgid="8015001161633421314">"Samtalalisti"</item>
-  </string-array>
-  <string-array name="prefSummaries_autoAdvance">
-    <item msgid="8221665977497655719">"Sýna nýrra samtal eftir að þú eyðir"</item>
-    <item msgid="1721869262893378141">"Sýna eldra samtal eftir að þú eyðir"</item>
-    <item msgid="880913657385630195">"Sýna samtalalista eftir að þú eyðir"</item>
-  </string-array>
-    <string name="prefDialogTitle_autoAdvance" msgid="5459235590885640678">"Fara í"</string>
-    <string name="clear_display_images_whitelist_title" msgid="2012677202404471778">"Hreinsa myndasamþykki"</string>
-    <string name="clear_display_images_whitelist_dialog_title" msgid="1942692501166848471">"Hreinsa myndasamþykki?"</string>
-    <string name="clear_display_images_whitelist_dialog_message" msgid="3952553078559373729">"Hætta að birta myndir innan skeyta frá sendendum sem þú hefur áður valið að leyfa."</string>
-    <string name="sender_whitelist_cleared" msgid="2490984995927904030">"Myndir verða ekki sýndar sjálfkrafa."</string>
-    <string name="preferences_signature_title" msgid="2318034745474929902">"Undirskrift"</string>
-    <string name="preferences_signature_dialog_title" msgid="4801741764511807064">"Undirskrift"</string>
-    <string name="preferences_signature_summary_not_set" msgid="3776614319388053784">"Ekki stillt"</string>
-    <string name="notification_action_reply" msgid="8378725460102575919">"Svara"</string>
-    <string name="notification_action_reply_all" msgid="5693469099941000037">"Svara öllum"</string>
-    <string name="notification_action_archive" msgid="2884874164831039047">"Setja í geymslu"</string>
-    <string name="notification_action_remove_label" msgid="3714785653186750981">"Fjarlægja flokk"</string>
-    <string name="notification_action_delete" msgid="3201627482564624132">"Eyða"</string>
-    <string name="notification_action_undo_archive" msgid="600186958134073582">"Sett í geymslu"</string>
-    <string name="notification_action_undo_remove_label" msgid="8341924850540100690">"Flokkur fjarlægður"</string>
-    <string name="notification_action_undo_delete" msgid="6915612337413587103">"Eytt"</string>
-    <string name="veiled_address" msgid="2670378260196977266"></string>
-    <string name="veiled_alternate_text" msgid="6343564357099807582"></string>
-    <string name="veiled_alternate_text_unknown_person" msgid="6728323554307952217"></string>
-    <string name="veiled_summary_unknown_person" msgid="2122359944161241551"></string>
-    <string name="label_notification_ticker" msgid="323232821061341014">"<xliff:g id="LABEL">%s</xliff:g>: <xliff:g id="NOTIFICATION">%s</xliff:g>"</string>
-  <plurals name="new_messages">
-    <item quantity="one" msgid="3446656407520493241">"<xliff:g id="COUNT">%1$d</xliff:g> nýtt skeyti"</item>
-    <item quantity="other" msgid="3531683811183204615">"<xliff:g id="COUNT">%1$d</xliff:g> ný skeyti"</item>
-  </plurals>
-    <string name="single_new_message_notification_title" msgid="7954710563222504868">"<xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="silent_ringtone" msgid="1570794756474381886">"Hljóðlaust"</string>
-    <string name="preference_removal_action_title" msgid="4703834472477137634">"Aðgerðir til að setja í geymslu og eyða"</string>
-  <string-array name="prefEntries_removal_action">
-    <item msgid="954772302016538814">"Sýna aðeins geymslu"</item>
-    <item msgid="7212690302706180254">"Sýna aðeins eyðingu"</item>
-    <item msgid="2539051197590685708">"Sýna valkosti fyrir geymslu og eyðingu"</item>
-  </string-array>
-  <string-array name="prefSummaries_removal_action_summary">
-    <item msgid="6877416142040695022">"Sýna aðeins geymslu"</item>
-    <item msgid="1510017057984222376">"Sýna aðeins valkost fyrir eyðingu"</item>
-    <item msgid="3196207224108008441">"Sýna geymslu og eyðingu"</item>
-  </string-array>
-    <string name="prefDialogTitle_removal_action" msgid="266548424110393246">"Aðgerðir til að setja í geymslu og eyða"</string>
-    <string name="preferences_default_reply_all_title" msgid="7255858488369635327">"Svara öllum"</string>
-    <string name="preferences_default_reply_all_summary_impl" msgid="895581085692979709">"Nota sem sjálfgefið þegar skeytum er svarað"</string>
-    <string name="preference_swipe_title_archive" msgid="9122333537761282714">"Strjúka til að setja í geymslu"</string>
-    <string name="preference_swipe_title_delete" msgid="4860474024917543711">"Strjúka til að eyða"</string>
-    <string name="preference_swipe_description" msgid="3036560323237015010">"Á samtalalista"</string>
-    <string name="preference_sender_image_title" msgid="7890813537985591865">"Mynd sendanda"</string>
-    <string name="preference_sender_image_description" msgid="3586817690132199889">"Sýna við hlið nafns í samtalalista"</string>
-    <string name="empty_trash" msgid="3385937024924728399">"Tæma ruslið"</string>
-    <string name="empty_spam" msgid="2911988289997281371">"Tæma ruslpóst"</string>
-    <string name="empty_trash_dialog_title" msgid="2104898489663621508">"Tæma ruslið?"</string>
-    <string name="empty_spam_dialog_title" msgid="1130319045917820569">"Tæma ruslpóst?"</string>
-  <plurals name="empty_folder_dialog_message">
-    <item quantity="one" msgid="3315412388217832914">"<xliff:g id="COUNT">%1$d</xliff:g> skeyti verður eytt fyrir fullt og allt."</item>
-    <item quantity="other" msgid="263840304486020101">"<xliff:g id="COUNT">%1$d</xliff:g> skeytum verður eytt fyrir fullt og allt."</item>
-  </plurals>
-    <string name="drawer_open" msgid="2285557278907103851">"Opna yfirlitsskúffu"</string>
-    <string name="drawer_close" msgid="2065829742127544297">"Loka yfirlitsskúffu"</string>
-    <string name="conversation_photo_welcome_text" msgid="836483155429003787">"Snertu mynd sendanda til að velja það samtal."</string>
-    <string name="long_press_to_select_tip" msgid="1660881999120625177">"Haltu inni til að velja eitt samtal og snertu svo fleiri til að velja."</string>
-    <string name="folder_icon_desc" msgid="6272938864914794739">"Möpputákn"</string>
-    <string name="add_account" msgid="5905863370226612377">"Bæta reikningi við"</string>
-    <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Hunsa ábendingu"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Slökkt er á sjálfvirkri samstillingu."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Snertu til að kveikja."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Slökkt er á samstillingu reiknings."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Kveiktu á undir <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Reikningsstillingar"</string>
-    <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> ósend í <xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
-    <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Kveikja á sjálfvirkri samstillingu?"</string>
-    <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Breytingar sem þú gerir á öllum forritum og reikningum, ekki bara Gmail, verða samstilltar á milli vefs, annarra tækja og <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>."</string>
-    <string name="phone" msgid="4142617042507912053">"sími"</string>
-    <string name="tablet" msgid="4593581125469224791">"spjaldtölva"</string>
-    <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="7239160845196929866">"Kveikja"</string>
-    <string name="show_n_more_folders" msgid="5769610839632786654">"Sýna <xliff:g id="NUMBER">%1$s</xliff:g> möppur í viðbót"</string>
-    <string name="hide_folders" msgid="7618891933409521283">"Fela möppur"</string>
-    <string name="print" msgid="7987949243936577207">"Prenta"</string>
-    <string name="print_all" msgid="4011022762279519941">"Prenta allt"</string>
-  <plurals name="num_messages">
-    <item quantity="one" msgid="8071234386915191851">"<xliff:g id="COUNT">%1$d</xliff:g> skeyti"</item>
-    <item quantity="other" msgid="962415099931188360">"<xliff:g id="COUNT">%1$d</xliff:g> skeyti"</item>
-  </plurals>
-    <string name="date_message_received_print" msgid="4168417403884350040">"<xliff:g id="DAY_AND_DATE">%1$s</xliff:g> kl. <xliff:g id="TIME">%2$s</xliff:g>"</string>
-    <string name="draft_to_heading" msgid="7370121943946205024">"Drög til:"</string>
-    <string name="draft_heading" msgid="7032951343184552800">"Drög"</string>
-    <string name="quoted_text_hidden_print" msgid="5256754205675159141">"Tilvitnun falin"</string>
-  <plurals name="num_attachments">
-    <item quantity="one" msgid="5494465717267988888">"<xliff:g id="COUNT">%1$d</xliff:g> viðhengi"</item>
-    <item quantity="other" msgid="5422167728480739361">"<xliff:g id="COUNT">%1$d</xliff:g> viðhengi"</item>
-  </plurals>
-    <string name="no_subject" msgid="5622708348540036959">"(enginn titill)"</string>
-    <string name="vacation_responder" msgid="5570132559074523806">"Forfallatilkynning"</string>
-    <string name="preferences_vacation_responder_title" msgid="2268482117730576123">"Forfallatilkynning"</string>
-    <string name="vacation_responder_body_hint_text" msgid="9087613123105158494">"Skilaboð"</string>
-    <string name="send_to_contacts_text" msgid="124432913980620545">"Senda aðeins mínum tengiliðum"</string>
-    <string name="send_to_domain_text" msgid="5064559546745918393">"Senda aðeins á <xliff:g id="DOMAIN">%1$s</xliff:g>"</string>
-    <string name="pick_start_date_title" msgid="2274665037355224165">"Hefst"</string>
-    <string name="pick_end_date_title" msgid="733396083649496600">"Lýkur (valfrjálst)"</string>
-    <string name="date_not_set" msgid="3251555782945051904">"Ekki valin"</string>
-    <string name="set_end_date_dialog_title" msgid="7543009262788808443">"Lokadagur (valfrjálst)"</string>
-    <string name="custom_date" msgid="5794846334232367838">"Sérsniðið"</string>
-    <string name="date_none" msgid="1061426502665431412">"Engin"</string>
-    <string name="discard_changes" msgid="5699760550972324746">"Hætta við breytingar?"</string>
-    <string name="vacation_responder_changes_saved" msgid="91448817268121249">"Breytingar á forfallatilkynningu vistaðar"</string>
-    <string name="vacation_responder_changes_discarded" msgid="21756037735539983">"Breytingum á forfallatilkynningu fleygt"</string>
-    <string name="vacation_responder_off" msgid="4429909341193366667">"Slökkt"</string>
-    <string name="vacation_responder_on" msgid="4913238379320882449">"Kveikt, frá <xliff:g id="DATE">%1$s</xliff:g>"</string>
-    <string name="vacation_responder_on_with_end_date" msgid="4360941815371475955">"Kveikt, frá <xliff:g id="START_DATE">%1$s</xliff:g> fram til <xliff:g id="END_DATE">%2$s</xliff:g>"</string>
-    <string name="vacation_responder_empty_subject_and_body_warning" msgid="6233629618520852439">"Bættu við efni eða skilaboðum"</string>
-    <string name="view_entire_message" msgid="823281796655014454">"Skoða allt skeytið"</string>
-    <string name="eml_loader_error_toast" msgid="6577383216635400167">"Ekki er hægt að opna þessa skrá"</string>
-    <string name="help_and_info" msgid="3708286489943154681">"Hjálp"</string>
-    <string name="help_and_feedback" msgid="7211458338163287670">"Hjálp og ábendingar"</string>
-    <string name="feedback" msgid="204247008751740034">"Senda ábendingu"</string>
-    <string name="copyright" msgid="3121335168340432582">"©<xliff:g id="YEAR">%1$d</xliff:g> Google Inc."</string>
-    <string name="version" msgid="1161745345056656547">"<xliff:g id="APP_NAME">%1$s</xliff:g> útgáfa <xliff:g id="VERSION">%2$s</xliff:g>"</string>
-    <string name="view_app_page" msgid="3241990517052398927"></string>
-    <string name="print_dialog" msgid="8895536548487605661">"Prenta…"</string>
-    <string name="copyright_information" msgid="971422874488783312">"Um höfundarrétt"</string>
-    <string name="privacy_policy" msgid="212094623396418302">"Persónuverndarstefna"</string>
-    <string name="open_source_licenses" msgid="8643615555920977752">"Leyfi opins kóða"</string>
-    <string name="reply_choice_yes" msgid="3327633032975373220">"Já"</string>
-    <string name="reply_choice_no" msgid="7068775605915475207">"Nei"</string>
-    <string name="reply_choice_ok" msgid="7881073621845053152">"Ókei"</string>
-    <string name="reply_choice_hehe" msgid="6054314968043050748">"Hehe"</string>
-    <string name="reply_choice_thanks" msgid="4978961954288364694">"Takk"</string>
-    <string name="reply_choice_i_agree" msgid="2496652737796884298">"Ég er sammála"</string>
-    <string name="reply_choice_nice" msgid="4465894941302838676">"Flott"</string>
-    <string name="reply_on_my_way" msgid="5645003971107444269">"Er á leiðinni"</string>
-    <string name="reply_choice_later" msgid="4629219072859486413">"Segjum það, ég verð í sambandi"</string>
-    <string name="reply_choice_smiling_face" msgid="1772253938506548631">":)"</string>
-    <string name="reply_choice_frowning_face" msgid="6260338807944002651">":("</string>
-    <string name="preference_header_action_confirmations" msgid="3922674681156121948">"Stafestingar aðgerða"</string>
-    <string name="preference_confirm_before_delete_title" msgid="7563587174619033835">"Staðfesta áður en eytt er"</string>
-    <string name="preference_confirm_before_archive_title" msgid="7318645995655875718">"Staðfesta fyrir geymslu"</string>
-    <string name="preference_confirm_before_send_title" msgid="4136585783513077039">"Staðfesta fyrir sendingu"</string>
-    <string name="preferences_conversation_mode_title" msgid="389352009651720838">"Láta skeyti passa sjálfkrafa"</string>
-    <string name="preferences_conversation_mode_summary" msgid="5730999743867653106">"Minnka skeyti svo þau passi á skjáinn"</string>
-    <string name="preferences_disable_snap_headers_title" msgid="7257824136988429629">"Aðgerðir skeyta"</string>
-  <string-array name="prefSummaries_snapHeader">
-    <item msgid="43373293784193461">"Sýna alltaf aðgerðir skeyta efst á skjánum"</item>
-    <item msgid="1765271305989996747">"Sýna aðeins aðgerðir skeyta efst á skjánum þegar honum er snúið í skammsnið"</item>
-    <item msgid="6311113076575333488">"Ekki sýna aðgerðir skeyta utan skeytahauss"</item>
-  </string-array>
-  <string-array name="prefEntries_snapHeader">
-    <item msgid="6906986566816683587">"Sýna alltaf"</item>
-    <item msgid="113299655708990672">"Sýna aðeins í skammsniði"</item>
-    <item msgid="4403750311175924065">"Ekki sýna"</item>
-  </string-array>
-    <string name="clear_history_title" msgid="5536216295725760357">"Hreinsa leitarferil"</string>
-    <string name="search_history_cleared" msgid="1461946302763342640">"Leitarferill hreinsaður."</string>
-    <string name="clear_history_dialog_title" msgid="3503603389704365385">"Hreinsa leitarferil?"</string>
-    <string name="clear_history_dialog_message" msgid="5202922561632407778">"Allar fyrri leitir verða fjarlægðar."</string>
-    <string name="manage_accounts_menu_item" msgid="4734660452395086786">"Stjórna reikningum"</string>
-    <string name="general_preferences_title" msgid="4212138728220418162">"Almennar stillingar"</string>
-    <string name="activity_preferences" msgid="8966077432517613292">"Stillingar"</string>
-</resources>
diff --git a/res/values-it-sw600dp/strings.xml b/res/values-it-sw600dp/strings.xml
index 06869e1..3300e51 100644
--- a/res/values-it-sw600dp/strings.xml
+++ b/res/values-it-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Cc/Ccn"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Ccn"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Gestisci cartelle"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Usa come predefinito per le risposte alle notifiche"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ Cc/Ccn"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ Ccn"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Gestisci cartelle"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Usa come predefinito per le risposte alle notifiche"</string>
 </resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 8362d9d..5cdfe07 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Icona cartella"</string>
     <string name="add_account" msgid="5905863370226612377">"Aggiungi account"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Ignora suggerimento"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"La sincronizzazione automatica non è attiva."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Tocca per attivare."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"La sincronizzazione dell\'account non è attiva."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Attiva in <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Impostazioni dell\'account"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> non inviati in <xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Attivare la sincronizzazione automatica?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Le modifiche apportate a tutti gli account (non solo Gmail) e le app verranno sincronizzate tra il Web, gli altri tuoi dispositivi e il tuo <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>."</string>
diff --git a/res/values-iw-sw600dp/strings.xml b/res/values-iw-sw600dp/strings.xml
index 8adb421..4fe2ee4 100644
--- a/res/values-iw-sw600dp/strings.xml
+++ b/res/values-iw-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ עותק/עותק מוסתר"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ עותק מוסתר"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"ניהול תיקיות"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"השתמש כברירת מחדל עבור תשובות להודעות בדבר כניסת הודעות"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ עותק/עותק מוסתר"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ עותק מוסתר"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"ניהול תיקיות"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"השתמש כברירת מחדל עבור תשובה להתראות על הודעות"</string>
 </resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 1699617..1f61d43 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -23,7 +23,7 @@
     <string name="cc" msgid="8768828862207919684">"עותק"</string>
     <string name="bcc" msgid="519303553518479171">"עותק מוסתר"</string>
     <string name="subject_hint" msgid="2136470287303571827">"נושא"</string>
-    <string name="body_hint" msgid="6478994981747057817">"כתוב אימייל"</string>
+    <string name="body_hint" msgid="6478994981747057817">"כתבו דוא\"ל"</string>
     <string name="add_file_attachment" msgid="2604880054248593993">"צרף קובץ"</string>
     <string name="add_photo_attachment" msgid="7163589794940909528">"צרף תמונה"</string>
     <string name="save_draft" msgid="2669523480789672118">"שמור טיוטה"</string>
@@ -124,7 +124,7 @@
     <string name="contextmenu_dial_dot" msgid="8881095692316726628">"חייג..."</string>
     <string name="contextmenu_sms_dot" msgid="5319737001771622657">"SMS…"</string>
     <string name="contextmenu_add_contact" msgid="2310064151427072475">"הוסף איש קשר"</string>
-    <string name="contextmenu_send_mail" msgid="3834654593200105396">"שלח אימייל"</string>
+    <string name="contextmenu_send_mail" msgid="3834654593200105396">"שלח דוא\"ל"</string>
     <string name="contextmenu_map" msgid="5118951927399465521">"מפה"</string>
     <string name="contextmenu_sharelink" msgid="8670940060477758709">"שתף קישור"</string>
     <string name="contextmenu_help" msgid="4209674157707873384">"עזרה"</string>
@@ -272,7 +272,7 @@
     <string name="tap_to_configure_folder_sync" msgid="3280434399275638071">"סנכרן תיקיה"</string>
     <string name="widget_large_unread_count" msgid="8699435859096455837">"%d+"</string>
     <string name="large_unseen_count" msgid="3055042669246912518">"<xliff:g id="COUNT">%d</xliff:g>+ חדשות"</string>
-    <string name="unseen_count" msgid="5509898665569695288">"<xliff:g id="COUNT">%d</xliff:g> חדש"</string>
+    <string name="unseen_count" msgid="5509898665569695288">"<xliff:g id="COUNT">%d</xliff:g>חד\'"</string>
   <plurals name="actionbar_unread_messages">
     <item quantity="other" msgid="3863201473731766006">"<xliff:g id="COUNT">%1$d</xliff:g> לא נקראו"</item>
   </plurals>
@@ -281,7 +281,7 @@
     <string name="loading_conversation" msgid="7931600025861500397">"טוען..."</string>
     <string name="activity_mailbox_selection" msgid="7489813868539767701">"בחר חשבון"</string>
     <string name="activity_folder_selection" msgid="8375243281001234750">"בחר תיקיה"</string>
-    <string name="folder_shortcut_widget_label" msgid="6466292659577092915">"תיקיית אימייל"</string>
+    <string name="folder_shortcut_widget_label" msgid="6466292659577092915">"תיקיית דוא\"ל"</string>
     <string name="change_folders_selection_dialog_title" msgid="9174464298613273814">"שנה תיקיות"</string>
     <string name="move_to_selection_dialog_title" msgid="4052506464467083621">"העבר אל"</string>
     <string name="search_hint" msgid="4916671414132334289">"חפש בדואר"</string>
@@ -293,11 +293,11 @@
     <!-- no translation found for load_attachment (3894318473827290350) -->
     <skip />
     <string name="shortcut_name_title" msgid="1562534040126088628">"תן שם לקיצור הדרך של התיקיה"</string>
-    <string name="wait_for_sync_title" msgid="4577632826912823075">"ממתין לסנכרון"</string>
+    <string name="wait_for_sync_title" msgid="4577632826912823075">"ממתין לסינכרון"</string>
     <string name="not_synced_title" msgid="3600180500934086346">"החשבון אינו מסונכרן"</string>
-    <string name="wait_for_manual_sync_body" msgid="2823149409451003378">"חשבון זה אינו מוגדר לסנכרון באופן אוטומטי.\nגע באפשרות "<b>"סנכרן כעת"</b>" כדי לסנכרן את הדואר פעם אחת, או באפשרות "<b>"שנה הגדרות סנכרון"</b>" כדי להגדיר חשבון זה לבצע סנכרון דואר באופן אוטומטי."</string>
+    <string name="wait_for_manual_sync_body" msgid="2823149409451003378">"חשבון זה אינו מוגדר לסינכרון באופן אוטומטי.\nגע באפשרות "<b>"סנכרן כעת"</b>" כדי לסנכרן את הדואר פעם אחת, או באפשרות "<b>"שנה הגדרות סינכרון"</b>" כדי להגדיר חשבון זה לבצע סינכרון דואר באופן אוטומטי."</string>
     <string name="manual_sync" msgid="2271479734895537848">"סנכרן עכשיו"</string>
-    <string name="change_sync_settings" msgid="3615852118397055361">"שנה הגדרות סנכרון"</string>
+    <string name="change_sync_settings" msgid="3615852118397055361">"שנה הגדרות סינכרון"</string>
     <string name="photo_load_failed" msgid="577471721679146999">"לא ניתן היה לטעון את התמונה"</string>
     <string name="cant_move_or_change_labels" msgid="4155490583610926755">"לא ניתן לבצע העברה מכיוון שהבחירה כוללת מספר חשבונות."</string>
     <string name="multiple_new_message_notification_item" msgid="1386588046275174918"><b>"‏<xliff:g id="SENDER">%1$s</xliff:g>‏"</b>"‏   <xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"סמל תיקיה"</string>
     <string name="add_account" msgid="5905863370226612377">"הוסף חשבון"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"סגור את הטיפ"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"הסנכרון האוטומטי כבוי."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"גע כדי להפעיל."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"סנכרון החשבון כבוי."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"הפעל ב<xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"הגדרות חשבון"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> לא נשלחו ב<xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"האם להפעיל סנכרון אוטומטי?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"‏שינויים שתבצע בכל האפליקציות והחשבונות, ולא רק ב-Gmail, יסונכרנו בין האינטרנט, המכשירים האחרים שלך וה<xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g> שלך."</string>
diff --git a/res/values-ja-sw600dp/strings.xml b/res/values-ja-sw600dp/strings.xml
index 2e6e4ba..4ba17e7 100644
--- a/res/values-ja-sw600dp/strings.xml
+++ b/res/values-ja-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"Cc/Bccを追加"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"Bccを追加"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"フォルダを管理"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"メッセージ通知への返信時の既定値として使用する"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"Cc/Bccを追加"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"Bccを追加"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"フォルダを管理"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"メッセージ通知への返信時のデフォルトとして使用する"</string>
 </resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 66ecaa2..b5ee734 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -18,7 +18,7 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="from" msgid="5159056500059912358">"From"</string>
+    <string name="from" msgid="5159056500059912358">"差出人"</string>
     <string name="to" msgid="3971614275716830581">"To"</string>
     <string name="cc" msgid="8768828862207919684">"Cc"</string>
     <string name="bcc" msgid="519303553518479171">"Bcc"</string>
@@ -272,7 +272,7 @@
     <string name="tap_to_configure_folder_sync" msgid="3280434399275638071">"フォルダを同期"</string>
     <string name="widget_large_unread_count" msgid="8699435859096455837">"%d超"</string>
     <string name="large_unseen_count" msgid="3055042669246912518">"新着<xliff:g id="COUNT">%d</xliff:g>件以上"</string>
-    <string name="unseen_count" msgid="5509898665569695288">"<xliff:g id="COUNT">%d</xliff:g>通の新着"</string>
+    <string name="unseen_count" msgid="5509898665569695288">"新着<xliff:g id="COUNT">%d</xliff:g>件"</string>
   <plurals name="actionbar_unread_messages">
     <item quantity="other" msgid="3863201473731766006">"<xliff:g id="COUNT">%1$d</xliff:g>件の未読"</item>
   </plurals>
@@ -367,8 +367,7 @@
     <string name="prefDialogTitle_removal_action" msgid="266548424110393246">"アーカイブ/削除操作"</string>
     <string name="preferences_default_reply_all_title" msgid="7255858488369635327">"全員に返信"</string>
     <string name="preferences_default_reply_all_summary_impl" msgid="895581085692979709">"返信時の既定値として使用する"</string>
-    <string name="preference_swipe_title_archive" msgid="9122333537761282714">"スワイプしてアーカイブ"</string>
-    <string name="preference_swipe_title_delete" msgid="4860474024917543711">"スワイプして削除"</string>
+    <string name="preference_swipe_title" msgid="2073613840893904205">"スワイプの動作"</string>
     <string name="preference_swipe_description" msgid="3036560323237015010">"スレッドリスト内"</string>
     <string name="preference_sender_image_title" msgid="7890813537985591865">"送信者の画像"</string>
     <string name="preference_sender_image_description" msgid="3586817690132199889">"スレッドリストの名前の横に表示する"</string>
@@ -387,11 +386,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"フォルダアイコン"</string>
     <string name="add_account" msgid="5905863370226612377">"アカウントを追加"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"ヒントを表示しない"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"自動同期はOFFです。"</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"ONにするにはタップします。"</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"アカウントの同期はOFFです。"</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"<xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>でONにできます。"</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"アカウント設定"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="OUTBOX">%2$s</xliff:g>内の未送信件数: <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"自動同期をONにしますか?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Gmailだけでなく、すべてのアプリとアカウントへの変更は、ウェブ、その他の端末、お使いの<xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>の間で同期されます。"</string>
diff --git a/res/values-ka-rGE-sw600dp/strings.xml b/res/values-ka-rGE-sw600dp/strings.xml
index 554a195..c58636d 100644
--- a/res/values-ka-rGE-sw600dp/strings.xml
+++ b/res/values-ka-rGE-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ ასლი/უხილავი ასლი"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ უხილავი ასლი"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"საქაღალდეების მართვა"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"წერილების შეტყობინებების პასუხებში ნაგულისხმევად გამოყენება"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ ასლი/უხილავი ასლი"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ უხილავი ასლი"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"საქაღალდეების მართვა"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"გამოიყენე ნაგულისხმევად წერილების შეტყობინებების პასუხებში"</string>
 </resources>
diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml
index b8b0f73..cad9481 100644
--- a/res/values-ka-rGE/strings.xml
+++ b/res/values-ka-rGE/strings.xml
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"საქაღალდის ხატულა"</string>
     <string name="add_account" msgid="5905863370226612377">"ანგარიშის დამატება"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"რჩევის დახურვა"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"ავტო სინქრონიზაცია გამორთულია."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"ჩასართავად შეეხეთ."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"ანგარიშის სინქრონიზაცია გამორთულია."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"ჩართეთ <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>-ში."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"ანგარიშის პარამეტრები"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> გასაგზავნი <xliff:g id="OUTBOX">%2$s</xliff:g>-ში"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"ჩაირთოს ავტომატური სინქრონიზაცია?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"ცვლილებები, რომლებსაც თქვენ ახორციელებთ ყველა აპსა და ანგარიშში, და არა მხოლოდ Gmail-ში, სინქრონიზებული იქნება ვებს, თქვენს სხვა მოწყობილობებსა და <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>-ს შორის."</string>
diff --git a/res/values-kk-rKZ-sw600dp/strings.xml b/res/values-kk-rKZ-sw600dp/strings.xml
deleted file mode 100644
index 33a6c30..0000000
--- a/res/values-kk-rKZ-sw600dp/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-     Copyright (C) 2012 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Көш./Жасырын көш."</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Жасырын көшірме"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Қалталарды басқару"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Хабар туралы хабарландырулар үшін әдепкі ретінде пайдалану"</string>
-</resources>
diff --git a/res/values-kk-rKZ/strings.xml b/res/values-kk-rKZ/strings.xml
deleted file mode 100644
index d7099a2..0000000
--- a/res/values-kk-rKZ/strings.xml
+++ /dev/null
@@ -1,485 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-     Copyright (C) 2011 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- no translation found for from (5159056500059912358) -->
-    <skip />
-    <string name="to" msgid="3971614275716830581">"Кімге"</string>
-    <string name="cc" msgid="8768828862207919684">"Көшірме"</string>
-    <string name="bcc" msgid="519303553518479171">"Жасырын көшірме"</string>
-    <string name="subject_hint" msgid="2136470287303571827">"Тақырып"</string>
-    <string name="body_hint" msgid="6478994981747057817">"Электрондық пошта хабарын жазу"</string>
-    <string name="add_file_attachment" msgid="2604880054248593993">"Файл тіркеу"</string>
-    <string name="add_photo_attachment" msgid="7163589794940909528">"Сурет тіркеу"</string>
-    <string name="save_draft" msgid="2669523480789672118">"Жоба жазбаны сақтау"</string>
-    <string name="discard" msgid="4905982179911608430">"Жою"</string>
-    <string name="compose" msgid="2602861958391035523">"Жазу"</string>
-  <string-array name="compose_modes">
-    <item msgid="9000553538766397816">"Жауап беру"</item>
-    <item msgid="2767793214788399009">"Барл. жау. беру"</item>
-    <item msgid="2758162027982270607">"Қайта жіберу"</item>
-  </string-array>
-    <string name="reply_attribution" msgid="1114972798797833259">"<xliff:g id="DATE">%s</xliff:g> күні <xliff:g id="PERSON">%s</xliff:g> жазды:"</string>
-    <string name="forward_attribution" msgid="597850048345475752">"---------- Қайта жіберілген хабар ----------&lt;br&gt;Кімнен: <xliff:g id="FROM">%1$s</xliff:g>&lt;br&gt;Күні: <xliff:g id="DATE">%2$s</xliff:g>&lt;br&gt;Тақырыбы: <xliff:g id="SUBJECT">%3$s</xliff:g>&lt;br&gt;Кімге: <xliff:g id="TO">%4$s</xliff:g>&lt;br&gt;"</string>
-    <string name="forward_attribution_no_headers" msgid="1828826576779486239">"---------- Қайта жіберілген хабар ----------"</string>
-    <string name="cc_attribution" msgid="2928584226469388899">"Көшірме: <xliff:g id="CC">%1$s</xliff:g>&lt;br&gt;"</string>
-    <string name="select_attachment_type" msgid="353236686616663062">"Тіркеме түрін таңдау"</string>
-    <string name="too_large_to_attach_single" msgid="2669897137966512530">"<xliff:g id="MAXSIZE">%1$s</xliff:g> асатын файлды тіркеу мүмкін емес."</string>
-    <string name="too_large_to_attach_multiple" msgid="1620163295709036343">"Бір немесе бірнеше файл тіркелмеді. Шегі: <xliff:g id="MAXSIZE">%1$s</xliff:g>."</string>
-    <string name="too_large_to_attach_additional" msgid="4964155563465970480">"Файл тіркелмеді. <xliff:g id="MAXSIZE">%1$s</xliff:g> шегіне жеттіңіз."</string>
-    <string name="generic_attachment_problem" msgid="4683974765387240723">"Файлды тіркеу мүмкін болмады."</string>
-    <string name="recipient_needed" msgid="319816879398937214">"Кемінде бір алушыны қосыңыз."</string>
-    <string name="recipient_error_dialog_title" msgid="760741480291963706">"Алушы қатесі"</string>
-    <string name="confirm_send_title" msgid="4664971589247101530">"Хабарды жіберу қажет пе?"</string>
-    <string name="confirm_send_message_with_no_subject" msgid="1442628074022609987">"Хабар тақырыбында мәтін жоқ."</string>
-    <string name="confirm_send_message_with_no_body" msgid="3329355318700201516">"Хабардың негізгі мәтінінде мәтін жоқ."</string>
-    <string name="confirm_send_message" msgid="6211518590166222735">"Бұл хабарды жіберу қажет пе?"</string>
-    <string name="message_discarded" msgid="6792661321962262024">"Хабар жойылды."</string>
-    <string name="signature" msgid="3172144541947408374">\n\n"<xliff:g id="SIGNATURE">%s</xliff:g>"</string>
-    <string name="custom_from_account_label" msgid="5042317430007736322">"Басқаша жіберу:"</string>
-    <string name="send" msgid="4269810089682120826">"Жіберу"</string>
-    <string name="mark_read" msgid="579388143288052493">"Оқылған деп белгілеу"</string>
-    <string name="mark_unread" msgid="6245060538061533191">"Оқылмаған деп белгілеу"</string>
-    <string name="mute" msgid="9164839998562321569">"Үнсіз"</string>
-    <string name="add_star" msgid="3275117671153616270">"Жұлдызша қосу"</string>
-    <string name="remove_star" msgid="9126690774161840733">"Жұлдызшаны жою"</string>
-    <string name="remove_folder" msgid="2379905457788576297">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> ішінен жою"</string>
-    <string name="archive" msgid="5978663590021719939">"Мұрағаттау"</string>
-    <string name="report_spam" msgid="4106897677959987340">"Спам деп есеп беру"</string>
-    <string name="mark_not_spam" msgid="8617774236231366651">"Спам емес деп есеп беру"</string>
-    <string name="report_phishing" msgid="8454666464488413739">"Фишинг деп есеп беру"</string>
-    <string name="delete" msgid="6784262386780496958">"Жою"</string>
-    <string name="discard_drafts" msgid="5881484193628472105">"Жоба жазбаларды жою"</string>
-    <!-- no translation found for discard_failed (7520780769812210279) -->
-    <skip />
-    <string name="refresh" msgid="1533748989749277511">"Жаңарту"</string>
-    <string name="reply" msgid="8337757482824207118">"Жауап беру"</string>
-    <string name="reply_all" msgid="5366796103758360957">"Барлығына жауап беру"</string>
-    <string name="resume_draft" msgid="1272723181782570649">"Өңдеу"</string>
-    <string name="forward" msgid="4397585145490426320">"Қайта жіберу"</string>
-    <string name="menu_compose" msgid="4575025207594709432">"Жазу"</string>
-    <string name="menu_change_folders" msgid="2194946192901276625">"Қалталарды өзгерту"</string>
-    <string name="menu_move_to" msgid="7948877550284452830">"Мынаған жылжыту:"</string>
-    <string name="menu_move_to_inbox" msgid="258554178236001444">"«Кіріс» қалтасына жылжыту"</string>
-    <string name="menu_manage_folders" msgid="8486398523679534519">"Қалта параметрлері"</string>
-    <string name="menu_show_original" msgid="2330398228979616661">"Өлшемді автоматты түрде орнатуды болдырмау"</string>
-    <string name="menu_settings" msgid="7993485401501778040">"Параметрлер"</string>
-    <string name="menu_search" msgid="1949652467806052768">"Іздеу"</string>
-    <string name="drawer_title" msgid="3766219846644975778">"Шарлау"</string>
-    <string name="mark_important" msgid="8781680450177768820">"Маңызды деп белгілеу"</string>
-    <string name="mark_not_important" msgid="3342258155408116917">"Маңызды емес етіп белгілеу"</string>
-    <string name="add_cc_label" msgid="2249679001141195213">"Көшірме/жасырын көшірме қосу"</string>
-    <string name="add_bcc_label" msgid="963745641238037813">"Жасырын көшірмені қосу"</string>
-    <string name="quoted_text" msgid="977782904293216533">"Тырнақшаға алынған мәтін қосу"</string>
-    <string name="quoted_text_label" msgid="2296807722849923934">"Дәйексөз мәтіні"</string>
-    <string name="respond_inline" msgid="6609746292081928078">"Кірістірілген жауап"</string>
-    <string name="bytes" msgid="651011686747499628">"<xliff:g id="COUNT">%s</xliff:g> Б"</string>
-    <string name="kilobytes" msgid="1523463964465770347">"<xliff:g id="COUNT">%s</xliff:g> КБ"</string>
-    <string name="megabytes" msgid="4309397368708773323">"<xliff:g id="COUNT">%s</xliff:g> МБ"</string>
-    <string name="attachment_image" msgid="6375306026208274564">"Кескін"</string>
-    <string name="attachment_video" msgid="7119476472603939848">"Бейне"</string>
-    <string name="attachment_audio" msgid="7097658089301809284">"Aудио"</string>
-    <string name="attachment_text" msgid="3485853714965922173">"Мәтін"</string>
-    <string name="attachment_application_msword" msgid="2110108876623152162">"Құжат"</string>
-    <string name="attachment_application_vnd_ms_powerpoint" msgid="425353008963359230">"Көрсетілім"</string>
-    <string name="attachment_application_vnd_ms_excel" msgid="5585781311136609103">"Электрондық кесте"</string>
-    <string name="attachment_application_pdf" msgid="4207340200944655970">"PDF"</string>
-    <string name="attachment_unknown" msgid="3360536730101083926">"<xliff:g id="ATTACHMENTEXTENSION">%s</xliff:g> файлы"</string>
-    <string name="preview_attachment" msgid="6265457626086113833">"Алдын ала қарау"</string>
-    <string name="save_attachment" msgid="375685179032130033">"Сақтау"</string>
-    <string name="cancel_attachment" msgid="6900093625792891122">"Бас тарту"</string>
-    <string name="open_attachment" msgid="6100396056314739761">"Ашу"</string>
-    <string name="install_attachment" msgid="8119470822958087928">"Орнату"</string>
-    <string name="download_again" msgid="8195787340878328119">"Қайта жүктеу"</string>
-    <string name="more_info_attachment" msgid="2899691682394864507">"Ақпарат"</string>
-    <string name="no_application_found" msgid="7309485680354949680">"Ешбір қолданба бұл тіркемені көру үшін аша алмайды."</string>
-    <string name="fetching_attachment" msgid="2286628490159574159">"Тіркемені алу"</string>
-    <string name="please_wait" msgid="3953824147776128899">"Күте тұрыңыз…"</string>
-    <string name="saved" msgid="161536102236967534">"Сақталды, <xliff:g id="SIZE">%s</xliff:g>"</string>
-    <string name="download_failed" msgid="3878373998269062395">"Жүктеп алу мүмкін болмады. Қайталау үшін түртіңіз."</string>
-    <string name="menu_photo_save_all" msgid="2742869476474613396">"Барлығын сақтау"</string>
-    <string name="menu_photo_share" msgid="6410980274832639330">"Бөлісу"</string>
-    <string name="menu_photo_share_all" msgid="3049053252719665320">"Барлығымен бөлісу"</string>
-    <string name="menu_photo_print" msgid="3084679038179342333">"Басып шығару"</string>
-    <string name="saving" msgid="6274238733828387433">"Сақталуда…"</string>
-    <string name="choosertitle_sharevia" msgid="3539537264873337959">"Бөлісу қолданбасы"</string>
-    <string name="contextmenu_openlink" msgid="6952228183947135362">"Браузерде ашу"</string>
-    <string name="contextmenu_copy" msgid="2584243784216385180">"Көшіру"</string>
-    <string name="contextmenu_copylink" msgid="8659897702269320063">"Сілтеменің URL мекенжайын көшіру"</string>
-    <string name="contextmenu_view_image" msgid="1031172763893491000">"Кескінді көру"</string>
-    <string name="contextmenu_dial_dot" msgid="8881095692316726628">"Теру…"</string>
-    <string name="contextmenu_sms_dot" msgid="5319737001771622657">"SMS…"</string>
-    <string name="contextmenu_add_contact" msgid="2310064151427072475">"Контакт қосу"</string>
-    <string name="contextmenu_send_mail" msgid="3834654593200105396">"Электрондық хабар жіберу"</string>
-    <string name="contextmenu_map" msgid="5118951927399465521">"Карта"</string>
-    <string name="contextmenu_sharelink" msgid="8670940060477758709">"Сілтемені бөлісу"</string>
-    <string name="contextmenu_help" msgid="4209674157707873384">"Анықтама"</string>
-    <string name="contextmenu_feedback" msgid="8319100902136337085">"Пікір жіберу"</string>
-    <!-- no translation found for num_selected (7990204488812654380) -->
-    <skip />
-  <plurals name="move_conversation">
-    <item quantity="one" msgid="237882018518207244">"Сөйлесімді жылжыту"</item>
-    <item quantity="other" msgid="6639576653114141743">"<xliff:g id="ID_1">%1$d</xliff:g> сөйлесімді жылжыту"</item>
-  </plurals>
-    <string name="content_description" msgid="854320355052962069">"<xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g>, <xliff:g id="SUBJECT">%3$s</xliff:g> туралы, <xliff:g id="SNIPPET">%4$s</xliff:g>, <xliff:g id="DATE">%5$s</xliff:g> күні, <xliff:g id="READSTATE">%6$s</xliff:g>"</string>
-    <string name="content_description_today" msgid="1634422834354116955">"<xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g>, <xliff:g id="SUBJECT">%3$s</xliff:g> туралы, <xliff:g id="SNIPPET">%4$s</xliff:g>, <xliff:g id="TIME">%5$s</xliff:g> уақытында, <xliff:g id="READSTATE">%6$s</xliff:g>"</string>
-    <string name="read_string" msgid="5495929677508576520">"сөйлесім оқылды"</string>
-    <string name="unread_string" msgid="7342558841698083381">"сөйлесім оқылмаған"</string>
-    <string name="filtered_tag" msgid="721666921386074505">"[<xliff:g id="TAG">%1$s</xliff:g>]<xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="badge_and_subject" msgid="3979372269373936750">"<xliff:g id="ID_1">%1$s</xliff:g> <xliff:g id="ID_2">%2$s</xliff:g>"</string>
-  <plurals name="draft">
-    <item quantity="one" msgid="6717535677167943402">"Жоба жазба"</item>
-    <item quantity="other" msgid="1335781147509740039">"Жоба жазбалар"</item>
-  </plurals>
-    <string name="sending" msgid="5600034886763930499">"Жіберілуде…"</string>
-    <string name="message_retrying" msgid="5335188121407261331">"Қайталау…"</string>
-    <string name="message_failed" msgid="7887650587384601790">"Сәтсіз аяқталды"</string>
-    <string name="send_failed" msgid="2186285547449865010">"Хабар жіберілмеді."</string>
-    <string name="me_object_pronoun" msgid="4674452244417913816">"мен"</string>
-    <string name="me_subject_pronoun" msgid="7479328865714008288">"мен"</string>
-  <plurals name="confirm_delete_conversation">
-    <item quantity="one" msgid="7605755011865575440">"Осы сөйлесімді жою қажет пе?"</item>
-    <item quantity="other" msgid="1585660381208712562">"Осы <xliff:g id="COUNT">%1$d</xliff:g> сөйлесімді жою қажет пе?"</item>
-  </plurals>
-  <plurals name="confirm_archive_conversation">
-    <item quantity="one" msgid="9105551557653306945">"Бұл сөйлесімді мұрағаттау қажет пе?"</item>
-    <item quantity="other" msgid="2001972798185641108">"Осы <xliff:g id="COUNT">%1$d</xliff:g> сөйлесімді мұрағаттау қажет пе?"</item>
-  </plurals>
-  <plurals name="confirm_discard_drafts_conversation">
-    <item quantity="one" msgid="2030421499893210789">"Бұл хабарды жою қажет пе?"</item>
-    <item quantity="other" msgid="782234447471532005">"Осы <xliff:g id="COUNT">%1$d</xliff:g> хабарды жою қажет пе?"</item>
-  </plurals>
-    <string name="confirm_discard_text" msgid="5172680524418848519">"Бұл хабарды жабу қажет пе?"</string>
-    <string name="loading_conversations" msgid="7255732786298655246">"Жүктелуде…"</string>
-    <string name="empty_inbox" msgid="5901734942362315228">"Барлығы бітті! Күніңізді рахаттанып өткізіңіз."</string>
-    <string name="empty_search" msgid="8564899353449880818">"Ой! «<xliff:g id="SEARCH_QUERY">%1$s</xliff:g>» үшін ешнәрсе таба алмадық."</string>
-    <string name="empty_spam_folder" msgid="3288985543286122800">"Бәрекелді, еш спам жоқ!"</string>
-    <string name="empty_trash_folder" msgid="378119063015945020">"Қоқыс жоқ. Себетке жібергеніңіз үшін рақмет!"</string>
-    <string name="empty_folder" msgid="3227552635613553855">"Бұл жерде пошта жоқ."</string>
-    <string name="getting_messages" msgid="8403333791332403244">"Хабарларды алу"</string>
-    <string name="undo" msgid="8256285267701059609">"Болдырмау"</string>
-  <plurals name="conversation_unstarred">
-    <item quantity="one" msgid="839233699150563831">"<xliff:g id="COUNT">%1$d</xliff:g> сөйлесімнің жұлдызшасы алынуда."</item>
-    <item quantity="other" msgid="7677305734833709789">"<xliff:g id="COUNT">%1$d</xliff:g> сөйлесімнен белгі алынды."</item>
-  </plurals>
-  <plurals name="conversation_muted">
-    <item quantity="one" msgid="3339638225564408438">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; дыбысы өшірілді."</item>
-    <item quantity="other" msgid="4276111931404654219">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; дыбысы өшірілді."</item>
-  </plurals>
-  <plurals name="conversation_spammed">
-    <item quantity="one" msgid="6986172030710967687">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; спам ретінде хабарланды."</item>
-    <item quantity="other" msgid="5900913789259199137">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; спам ретінде хабарланды."</item>
-  </plurals>
-  <plurals name="conversation_not_spam">
-    <item quantity="one" msgid="2294904093653094150">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; спам емес деп белгіленді."</item>
-    <item quantity="other" msgid="4966164423991098144">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; спам емес деп белгіленді."</item>
-  </plurals>
-  <plurals name="conversation_not_important">
-    <item quantity="one" msgid="3824809189993339030">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; маңызды емес деп белгіленді."</item>
-    <item quantity="other" msgid="1215472798075869124">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; маңызды емес деп белгіленді."</item>
-  </plurals>
-  <plurals name="conversation_phished">
-    <item quantity="one" msgid="4330095881258771201">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; фишинг ретінде белгіленді."</item>
-    <item quantity="other" msgid="9218674052779504277">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; фишинг ретінде белгіленді."</item>
-  </plurals>
-  <plurals name="conversation_archived">
-    <item quantity="one" msgid="4127890884907503696">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; мұрағатталды."</item>
-    <item quantity="other" msgid="7789480176789922968">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; мұрағатталды."</item>
-  </plurals>
-  <plurals name="conversation_deleted">
-    <item quantity="one" msgid="5591889079235938982">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; жойылды."</item>
-    <item quantity="other" msgid="7060256058737892078">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; жойылды."</item>
-  </plurals>
-    <string name="deleted" msgid="7378013910782008375">"Жойылды"</string>
-    <string name="archived" msgid="6283673603512713022">"Мұрағатталды"</string>
-    <string name="folder_removed" msgid="5656281444688183676">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> ішінен жойылды"</string>
-  <plurals name="conversation_folder_changed">
-    <item quantity="one" msgid="6463727361987396734">"Өзгертілген қалта."</item>
-    <item quantity="other" msgid="8815390494333090939">"Өзгертілген қалталар."</item>
-  </plurals>
-    <string name="conversation_folder_moved" msgid="6475872337373081683">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> ішіне жылжытылды"</string>
-    <string name="search_results_header" msgid="1529438451150580188">"Нәтижелер"</string>
-    <string name="search_unsupported" msgid="2873920566477359177">"Бұл есептік жазбада іздеуге қолдау көрсетілмейді."</string>
-    <string name="add_label" msgid="3285338046038610902">"Қалта қосу"</string>
-    <string name="new_incoming_messages_one" msgid="5933087567495998661">"<xliff:g id="SENDER">%s</xliff:g> жіберген жаңа хабарды көрсету."</string>
-  <plurals name="new_incoming_messages_many">
-    <item quantity="other" msgid="4394042684501388790">"<xliff:g id="COUNT">%1$d</xliff:g> жаңа хабар көрсету."</item>
-  </plurals>
-    <string name="date_and_view_details" msgid="2952994746916149969">"<xliff:g id="DATE">%1$s</xliff:g> &lt;a href=\'http://www.example.com\'&gt;Мәліметтерді көру&lt;/a&gt;"</string>
-    <string name="hide_details" msgid="8018801050702453314">"Мәліметтерді жасыру"</string>
-    <string name="to_message_header" msgid="3954385178027011919">"Алушы: <xliff:g id="RECIPIENTS">%1$s</xliff:g>"</string>
-    <string name="contact_info_string" msgid="6484930184867405276">"<xliff:g id="NAME">%1$s</xliff:g> үшін контакт туралы ақпаратты көрсету"</string>
-    <string name="contact_info_string_default" msgid="6204228921864816351">"Контакт туралы ақпаратты көрсету"</string>
-  <plurals name="show_messages_read">
-    <item quantity="other" msgid="5285673397387128129">"<xliff:g id="COUNT">%1$d</xliff:g> ескі хабар"</item>
-  </plurals>
-    <string name="from_heading" msgid="48290556829713090">"Кімнен:"</string>
-    <string name="replyto_heading" msgid="8275255318292059079">"Жауап беру:"</string>
-    <string name="to_heading" msgid="3495203282540398336">"Кімге: "</string>
-    <string name="to_heading_no_space" msgid="679167047628308670">"Кімге:"</string>
-    <string name="cc_heading" msgid="5603892257866345823">"Көшірме:"</string>
-    <string name="bcc_heading" msgid="1482186590756218269">"Жасырын көшірме"</string>
-    <string name="date_heading" msgid="4213063948406397168">"Күні:"</string>
-    <string name="show_images" msgid="436044894053204084">"Суреттерді көрсету"</string>
-    <string name="always_show_images" msgid="556087529413707819">"Осы жіберушінің суретт. әрқашан көрсету"</string>
-    <string name="always_show_images_toast" msgid="3763157294047555051">"Осы жіберушінің суреттері автоматты түрде көрсетіледі."</string>
-    <string name="address_display_format" msgid="2098008376913966177">"<xliff:g id="NAME">%1$s</xliff:g> <xliff:g id="EMAIL">%2$s</xliff:g>"</string>
-    <string name="address_display_format_with_via_domain" msgid="8108294635074750048">"<xliff:g id="NAME">%1$s</xliff:g> <xliff:g id="EMAIL">%2$s</xliff:g> <xliff:g id="VIA_DOMAIN">%3$s</xliff:g> арқылы"</string>
-    <string name="message_saved" msgid="3291655042310241793">"Хабар жоба жазба ретінде сақталды."</string>
-    <string name="sending_message" msgid="2487846954946637084">"Хабар жіберілуде…"</string>
-    <string name="invalid_recipient" msgid="9157434699389936584">"<xliff:g id="WRONGEMAIL">%s</xliff:g> мекенжайы жарамсыз."</string>
-    <string name="show_elided" msgid="3456154624105704327">"Тырнақшаға алынған мәтінді көрсету"</string>
-    <string name="hide_elided" msgid="5768235486834692733">"▼ Тырнақшаға алынған мәтінді жасыру"</string>
-    <string name="message_invite_title" msgid="5985161025144867256">"Күнтізбе шақыруы"</string>
-    <string name="message_invite_calendar_view" msgid="9181966650840809197">"Күнтізбеде көрсету"</string>
-    <string name="message_invite_label_attending" msgid="4194264767870003397">"Барасыз ба?"</string>
-    <string name="message_invite_accept" msgid="8002758842580134835">"Иә"</string>
-    <string name="message_invite_tentative" msgid="3199418731566655887">"Мүмкін"</string>
-    <string name="message_invite_decline" msgid="6331040872447290777">"Жоқ"</string>
-    <string name="enumeration_comma" msgid="2848850136844740850">", "</string>
-    <string name="send_anyway" msgid="2727576121007079643">"Бәрібір жіберу"</string>
-    <string name="ok" msgid="6178802457914802336">"Жарайды"</string>
-    <string name="done" msgid="344354738335270292">"Орындалды"</string>
-    <string name="cancel" msgid="4831678293149626190">"Бас тарту"</string>
-    <string name="clear" msgid="765949970989448022">"Тазалау"</string>
-    <string name="next" msgid="2662478712866255138">"Келесі"</string>
-    <string name="previous" msgid="8985379053279804274">"Алдыңғы"</string>
-  <string-array name="sync_status">
-    <item msgid="4600303222943450797">"Сәтті"</item>
-    <item msgid="2972425114100316260">"Байланыс жоқ."</item>
-    <item msgid="8594593386776437871">"Жүйеге кіру мүмкін болмады."</item>
-    <item msgid="1375193906551623606">"Қауіпсіздік қатесі."</item>
-    <item msgid="195177374927979967">"Синхрондау мүмкін болмады."</item>
-    <item msgid="8026148967150231130">"Ішкі қате"</item>
-    <item msgid="5442620760791553027">"Сервер қатесі"</item>
-  </string-array>
-    <string name="tap_to_configure" msgid="137172348280050643">"Реттеу үшін түртіңіз."</string>
-    <string name="non_synced_folder_description" msgid="3044618511909304701">"Сөйлесімдерді көру үшін осы қалтаны синхрондаңыз."</string>
-    <string name="tap_to_configure_folder_sync" msgid="3280434399275638071">"Қалтаны синхрондау"</string>
-    <string name="widget_large_unread_count" msgid="8699435859096455837">"%d+"</string>
-    <string name="large_unseen_count" msgid="3055042669246912518">"<xliff:g id="COUNT">%d</xliff:g>+ жаңа"</string>
-    <string name="unseen_count" msgid="5509898665569695288">"<xliff:g id="COUNT">%d</xliff:g> жаңа"</string>
-  <plurals name="actionbar_unread_messages">
-    <item quantity="other" msgid="3863201473731766006">"<xliff:g id="COUNT">%1$d</xliff:g> оқылмаған"</item>
-  </plurals>
-    <string name="actionbar_large_unread_count" msgid="753635978542372792">"<xliff:g id="COUNT">%1$d</xliff:g>+ оқылмаған"</string>
-    <string name="view_more_conversations" msgid="8377920000247101901">"Қосымша сөйлесімдерді көру"</string>
-    <string name="loading_conversation" msgid="7931600025861500397">"Жүктелуде…"</string>
-    <string name="activity_mailbox_selection" msgid="7489813868539767701">"Есептік жазба таңдау"</string>
-    <string name="activity_folder_selection" msgid="8375243281001234750">"Қалтаны таңдау"</string>
-    <string name="folder_shortcut_widget_label" msgid="6466292659577092915">"Электрондық пошта қалтасы"</string>
-    <string name="change_folders_selection_dialog_title" msgid="9174464298613273814">"Қалталарды өзгерту"</string>
-    <string name="move_to_selection_dialog_title" msgid="4052506464467083621">"Мынаған жылжыту:"</string>
-    <string name="search_hint" msgid="4916671414132334289">"Поштадан іздеу"</string>
-    <!-- no translation found for search_results_loaded (1784879343458807514) -->
-    <skip />
-    <string name="network_error" msgid="5931164247644972255">"Байланыс жоқ"</string>
-    <string name="retry" msgid="916102442074217293">"Қайталау"</string>
-    <string name="load_more" msgid="8702691358453560575">"Тағы жүктеу"</string>
-    <!-- no translation found for load_attachment (3894318473827290350) -->
-    <skip />
-    <string name="shortcut_name_title" msgid="1562534040126088628">"Қалтаның таңбашасына атау беру"</string>
-    <string name="wait_for_sync_title" msgid="4577632826912823075">"Синхрондау күтілуде"</string>
-    <string name="not_synced_title" msgid="3600180500934086346">"Есептік жазба синхрондалмаған"</string>
-    <string name="wait_for_manual_sync_body" msgid="2823149409451003378">"Бұл есептік жазбаның автоматты түрде синхрондалуы орнатылмаған.\n Поштаны бір рет синхрондау үшін "<b>"Қазір синхрондау"</b>" немесе бұл есептік жазбаның поштаны автоматты түрде синхрондауын орнату үшін "<b>"Синхрондау параметрлерін өзгерту"</b>" түймесін басыңыз."</string>
-    <string name="manual_sync" msgid="2271479734895537848">"Қазір синхрондау"</string>
-    <string name="change_sync_settings" msgid="3615852118397055361">"Синх-у параметрлерін өзгерту"</string>
-    <string name="photo_load_failed" msgid="577471721679146999">"Кескінді жүктеу мүмкін болмады"</string>
-    <string name="cant_move_or_change_labels" msgid="4155490583610926755">"Жылжыту мүмкін емес, өйткені таңдауда бірнеше есептік жазба бар."</string>
-    <string name="multiple_new_message_notification_item" msgid="1386588046275174918"><b>"<xliff:g id="SENDER">%1$s</xliff:g>"</b>"   <xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="single_new_message_notification_big_text" msgid="2170154732664242904">"<xliff:g id="SUBJECT">%1$s</xliff:g>\n<xliff:g id="SNIPPET">%2$s</xliff:g>"</string>
-    <string name="ignore_spam_warning" msgid="8760314545535838430">"Елемеу, бұл хабар сенімді"</string>
-    <string name="via_domain" msgid="537951148511529082">"<xliff:g id="VIADOMAIN">%1$s</xliff:g> арқылы"</string>
-    <string name="signin" msgid="4699091478139791244">"Кіру"</string>
-    <string name="info" msgid="1357564480946178121">"Ақпарат"</string>
-    <string name="report" msgid="4318141326014579036">"Есеп беру"</string>
-    <string name="sync_error" msgid="1795794969006241678">"Синхрондау мүмкін болмады."</string>
-    <string name="sync_error_message" msgid="4182644657243736635">"Синхрондау үшін құрылғыңызда сақтау орны жеткіліксіз."</string>
-    <string name="storage" msgid="4783683938444150638">"Жад"</string>
-    <string name="senders_split_token" msgid="6549228851819460081">", "</string>
-    <string name="draft_count_format" msgid="9122583199850209286">" (<xliff:g id="COUNT">%1$s</xliff:g>)"</string>
-    <string name="all_folders_heading" msgid="9023770187629170967">"Барлық қалталар"</string>
-    <string name="recent_folders_heading" msgid="8943134955788867702">"Соңғы қалталар"</string>
-    <string name="message_details_title" msgid="60771875776494764">"Хабар мәліметтері"</string>
-    <string name="preference_advance_to_title" msgid="6385669491239514630">"Автоматты ілгерілету"</string>
-  <string-array name="prefEntries_autoAdvance">
-    <item msgid="1505450878799459652">"Жаңалауы"</item>
-    <item msgid="8000986144872247139">"Ескілеу"</item>
-    <item msgid="8015001161633421314">"Сөйлесімдер тізімі"</item>
-  </string-array>
-  <string-array name="prefSummaries_autoAdvance">
-    <item msgid="8221665977497655719">"Жойғаннан кейін жаңарақ сөйлесімді көрсету"</item>
-    <item msgid="1721869262893378141">"Жойғаннан кейін ескірек сөйлесімді көрсету"</item>
-    <item msgid="880913657385630195">"Жойғаннан кейін сөйлесімдер тізімін көрсету"</item>
-  </string-array>
-    <string name="prefDialogTitle_autoAdvance" msgid="5459235590885640678">"Ілгері жылжыту"</string>
-    <string name="clear_display_images_whitelist_title" msgid="2012677202404471778">"Сурет бекітулерін тазалау"</string>
-    <string name="clear_display_images_whitelist_dialog_title" msgid="1942692501166848471">"Кескін бекітулерін тазарту қажет пе?"</string>
-    <string name="clear_display_images_whitelist_dialog_message" msgid="3952553078559373729">"Сіз бұған дейін рұқсат берген жіберушілерден кірістірілген кескіндерді көрсетпеу."</string>
-    <string name="sender_whitelist_cleared" msgid="2490984995927904030">"Суреттер автоматты түрде көрсетілмейді."</string>
-    <string name="preferences_signature_title" msgid="2318034745474929902">"Қолтаңба"</string>
-    <string name="preferences_signature_dialog_title" msgid="4801741764511807064">"Қолтаңба"</string>
-    <string name="preferences_signature_summary_not_set" msgid="3776614319388053784">"Орнатылмаған"</string>
-    <string name="notification_action_reply" msgid="8378725460102575919">"Жауап беру"</string>
-    <string name="notification_action_reply_all" msgid="5693469099941000037">"Барлығына жауап беру"</string>
-    <string name="notification_action_archive" msgid="2884874164831039047">"Мұрағаттау"</string>
-    <string name="notification_action_remove_label" msgid="3714785653186750981">"Белгіні жою"</string>
-    <string name="notification_action_delete" msgid="3201627482564624132">"Жою"</string>
-    <string name="notification_action_undo_archive" msgid="600186958134073582">"Мұрағатталған"</string>
-    <string name="notification_action_undo_remove_label" msgid="8341924850540100690">"Белгі жойылды"</string>
-    <string name="notification_action_undo_delete" msgid="6915612337413587103">"Жойылды"</string>
-    <string name="veiled_address" msgid="2670378260196977266"></string>
-    <string name="veiled_alternate_text" msgid="6343564357099807582"></string>
-    <string name="veiled_alternate_text_unknown_person" msgid="6728323554307952217"></string>
-    <string name="veiled_summary_unknown_person" msgid="2122359944161241551"></string>
-    <string name="label_notification_ticker" msgid="323232821061341014">"<xliff:g id="LABEL">%s</xliff:g>: <xliff:g id="NOTIFICATION">%s</xliff:g>"</string>
-  <plurals name="new_messages">
-    <item quantity="one" msgid="3446656407520493241">"<xliff:g id="COUNT">%1$d</xliff:g> жаңа хабар"</item>
-    <item quantity="other" msgid="3531683811183204615">"<xliff:g id="COUNT">%1$d</xliff:g> жаңа хабар"</item>
-  </plurals>
-    <string name="single_new_message_notification_title" msgid="7954710563222504868">"<xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="silent_ringtone" msgid="1570794756474381886">"Дыбыссыз"</string>
-    <string name="preference_removal_action_title" msgid="4703834472477137634">"Мұрағаттау және жою әрекеттері"</string>
-  <string-array name="prefEntries_removal_action">
-    <item msgid="954772302016538814">"Мұрағаттауды ғана көрсету"</item>
-    <item msgid="7212690302706180254">"Жоюды ғана көрсету"</item>
-    <item msgid="2539051197590685708">"Мұрағаттау және жоюды көрсету"</item>
-  </string-array>
-  <string-array name="prefSummaries_removal_action_summary">
-    <item msgid="6877416142040695022">"Мұрағаттауды ғана көрсету"</item>
-    <item msgid="1510017057984222376">"Жоюды ғана көрсету"</item>
-    <item msgid="3196207224108008441">"Мұрағаттау және жоюды көрсету"</item>
-  </string-array>
-    <string name="prefDialogTitle_removal_action" msgid="266548424110393246">"Мұрағаттау және жою әрекеттері"</string>
-    <string name="preferences_default_reply_all_title" msgid="7255858488369635327">"Барлығына жауап беру"</string>
-    <string name="preferences_default_reply_all_summary_impl" msgid="895581085692979709">"Хабар жауаптары үшін әдепкі ретінде пайдалану"</string>
-    <string name="preference_swipe_title_archive" msgid="9122333537761282714">"Мұрағаттау үшін жанаңыз"</string>
-    <string name="preference_swipe_title_delete" msgid="4860474024917543711">"Жою үшін жанаңыз"</string>
-    <string name="preference_swipe_description" msgid="3036560323237015010">"Сөйлесімдер тізімінде"</string>
-    <string name="preference_sender_image_title" msgid="7890813537985591865">"Жіберуші суреті"</string>
-    <string name="preference_sender_image_description" msgid="3586817690132199889">"Сөйлесімдер тізімінде аттың жанында көрсету"</string>
-    <string name="empty_trash" msgid="3385937024924728399">"Қоқысты босату"</string>
-    <string name="empty_spam" msgid="2911988289997281371">"Спамды босату"</string>
-    <string name="empty_trash_dialog_title" msgid="2104898489663621508">"Себетті босату қажет пе?"</string>
-    <string name="empty_spam_dialog_title" msgid="1130319045917820569">"Спамды босату қажет пе?"</string>
-  <plurals name="empty_folder_dialog_message">
-    <item quantity="one" msgid="3315412388217832914">"<xliff:g id="COUNT">%1$d</xliff:g> хабар біржола жойылады."</item>
-    <item quantity="other" msgid="263840304486020101">"<xliff:g id="COUNT">%1$d</xliff:g> хабар біржола жойылады."</item>
-  </plurals>
-    <string name="drawer_open" msgid="2285557278907103851">"Шарлау тартпасын ашу"</string>
-    <string name="drawer_close" msgid="2065829742127544297">"Шарлау тартпасын жабу"</string>
-    <string name="conversation_photo_welcome_text" msgid="836483155429003787">"Сөйлесімді таңдау үшін жіберушінің кескінін түртіңіз."</string>
-    <string name="long_press_to_select_tip" msgid="1660881999120625177">"Бір сөйлесімді таңдау үшін түртіп, ұстап тұрыңыз, содан кейін тағы таңдау үшін түртіңіз."</string>
-    <string name="folder_icon_desc" msgid="6272938864914794739">"Қалта белгішесі"</string>
-    <string name="add_account" msgid="5905863370226612377">"Есептік жазба қосу"</string>
-    <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Кеңесті жабу"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Автоматты түрде синхрондау өшірулі."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Қосу үшін түртіңіз."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Есептік жазба синхрондалуы өшірулі."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"<xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g> ішінде қосу."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Есептік жазба параметрлері"</string>
-    <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="OUTBOX">%2$s</xliff:g> қалтасында <xliff:g id="NUMBER">%1$s</xliff:g> жіберілмеген"</string>
-    <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Автоматты синхрондауды қосу қажет пе?"</string>
-    <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Сіз Gmail ғана емес, барлық қолданбалар мен есептік жазбаларға енгізетін өзгерістер веб, сіздің басқа құрылғыларыңыз және сіздің <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g> арасында синхрондалады."</string>
-    <string name="phone" msgid="4142617042507912053">"телефон"</string>
-    <string name="tablet" msgid="4593581125469224791">"планшет"</string>
-    <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="7239160845196929866">"Қосу"</string>
-    <string name="show_n_more_folders" msgid="5769610839632786654">"Қосымша <xliff:g id="NUMBER">%1$s</xliff:g> қалта көрсету"</string>
-    <string name="hide_folders" msgid="7618891933409521283">"Қалталарды жасыру"</string>
-    <string name="print" msgid="7987949243936577207">"Басып шығару"</string>
-    <string name="print_all" msgid="4011022762279519941">"Барлығын басып шығару"</string>
-  <plurals name="num_messages">
-    <item quantity="one" msgid="8071234386915191851">"<xliff:g id="COUNT">%1$d</xliff:g> хабар"</item>
-    <item quantity="other" msgid="962415099931188360">"<xliff:g id="COUNT">%1$d</xliff:g> хабар"</item>
-  </plurals>
-    <string name="date_message_received_print" msgid="4168417403884350040">"Күні: <xliff:g id="DAY_AND_DATE">%1$s</xliff:g>; уақыты <xliff:g id="TIME">%2$s</xliff:g>"</string>
-    <string name="draft_to_heading" msgid="7370121943946205024">"Жоба нұсқасы, кімге:"</string>
-    <string name="draft_heading" msgid="7032951343184552800">"Жоба жазба"</string>
-    <string name="quoted_text_hidden_print" msgid="5256754205675159141">"Тырнақшаға алынған мәтін жасырылған"</string>
-  <plurals name="num_attachments">
-    <item quantity="one" msgid="5494465717267988888">"<xliff:g id="COUNT">%1$d</xliff:g> тіркеме"</item>
-    <item quantity="other" msgid="5422167728480739361">"<xliff:g id="COUNT">%1$d</xliff:g> тіркеме"</item>
-  </plurals>
-    <string name="no_subject" msgid="5622708348540036959">"(тақырыпсыз)"</string>
-    <string name="vacation_responder" msgid="5570132559074523806">"Авто жауап қайтарушы"</string>
-    <string name="preferences_vacation_responder_title" msgid="2268482117730576123">"Авто жауап қайтарушы"</string>
-    <string name="vacation_responder_body_hint_text" msgid="9087613123105158494">"Хабар"</string>
-    <string name="send_to_contacts_text" msgid="124432913980620545">"Тек контактілеріме жіберу"</string>
-    <string name="send_to_domain_text" msgid="5064559546745918393">"Тек <xliff:g id="DOMAIN">%1$s</xliff:g> алушысына ғана жіберу"</string>
-    <string name="pick_start_date_title" msgid="2274665037355224165">"Басталуы"</string>
-    <string name="pick_end_date_title" msgid="733396083649496600">"Аяқталуы (міндетті емес)"</string>
-    <string name="date_not_set" msgid="3251555782945051904">"Реттелмеген"</string>
-    <string name="set_end_date_dialog_title" msgid="7543009262788808443">"Аяқталу күні (міндетті емес)"</string>
-    <string name="custom_date" msgid="5794846334232367838">"Теңшелетін"</string>
-    <string name="date_none" msgid="1061426502665431412">"Ешқандай"</string>
-    <string name="discard_changes" msgid="5699760550972324746">"Өзгерістерді жою қажет пе?"</string>
-    <string name="vacation_responder_changes_saved" msgid="91448817268121249">"Авто жауап қайтарушы өзгерістері сақталды"</string>
-    <string name="vacation_responder_changes_discarded" msgid="21756037735539983">"Авто жауап қайтарушы өзгерістері жойылды"</string>
-    <string name="vacation_responder_off" msgid="4429909341193366667">"Өшірулі"</string>
-    <string name="vacation_responder_on" msgid="4913238379320882449">"Қосулы, басы: <xliff:g id="DATE">%1$s</xliff:g>"</string>
-    <string name="vacation_responder_on_with_end_date" msgid="4360941815371475955">"<xliff:g id="START_DATE">%1$s</xliff:g> бастап <xliff:g id="END_DATE">%2$s</xliff:g> дейін қосулы"</string>
-    <string name="vacation_responder_empty_subject_and_body_warning" msgid="6233629618520852439">"Тақырып немесе хабар қосыңыз"</string>
-    <string name="view_entire_message" msgid="823281796655014454">"Бүкіл хабарды көру"</string>
-    <string name="eml_loader_error_toast" msgid="6577383216635400167">"Бұл файлды ашу мүмкін емес"</string>
-    <string name="help_and_info" msgid="3708286489943154681">"Анықтама"</string>
-    <string name="help_and_feedback" msgid="7211458338163287670">"Анықтама және кері байланыс"</string>
-    <string name="feedback" msgid="204247008751740034">"Пікір жіберу"</string>
-    <string name="copyright" msgid="3121335168340432582">"©<xliff:g id="YEAR">%1$d</xliff:g> Google Inc."</string>
-    <string name="version" msgid="1161745345056656547">"<xliff:g id="APP_NAME">%1$s</xliff:g> нұсқасы: <xliff:g id="VERSION">%2$s</xliff:g>"</string>
-    <string name="view_app_page" msgid="3241990517052398927"></string>
-    <string name="print_dialog" msgid="8895536548487605661">"Басып шығару…"</string>
-    <string name="copyright_information" msgid="971422874488783312">"Авторлық құқық туралы ақпарат"</string>
-    <string name="privacy_policy" msgid="212094623396418302">"Құпиялық саясаты"</string>
-    <string name="open_source_licenses" msgid="8643615555920977752">"Ашық бастапқы код лицензиялары"</string>
-    <string name="reply_choice_yes" msgid="3327633032975373220">"Иә"</string>
-    <string name="reply_choice_no" msgid="7068775605915475207">"Жоқ"</string>
-    <string name="reply_choice_ok" msgid="7881073621845053152">"Жарайды"</string>
-    <string name="reply_choice_hehe" msgid="6054314968043050748">"Хехе"</string>
-    <string name="reply_choice_thanks" msgid="4978961954288364694">"Рақмет"</string>
-    <string name="reply_choice_i_agree" msgid="2496652737796884298">"Келісемін"</string>
-    <string name="reply_choice_nice" msgid="4465894941302838676">"Жақсы"</string>
-    <string name="reply_on_my_way" msgid="5645003971107444269">"Жолдамын"</string>
-    <string name="reply_choice_later" msgid="4629219072859486413">"Жарайды, сізге хабарласамын"</string>
-    <string name="reply_choice_smiling_face" msgid="1772253938506548631">":)"</string>
-    <string name="reply_choice_frowning_face" msgid="6260338807944002651">":("</string>
-    <string name="preference_header_action_confirmations" msgid="3922674681156121948">"Әрекет растаулары"</string>
-    <string name="preference_confirm_before_delete_title" msgid="7563587174619033835">"Жоюдың алдында растау"</string>
-    <string name="preference_confirm_before_archive_title" msgid="7318645995655875718">"Мұрағаттау алдында растау"</string>
-    <string name="preference_confirm_before_send_title" msgid="4136585783513077039">"Жіберудің алдында растау"</string>
-    <string name="preferences_conversation_mode_title" msgid="389352009651720838">"Хабарларды авто қиыстыру"</string>
-    <string name="preferences_conversation_mode_summary" msgid="5730999743867653106">"Хабарларды экранға қиыстыру үшін қысу"</string>
-    <string name="preferences_disable_snap_headers_title" msgid="7257824136988429629">"Хабар әрекеттері"</string>
-  <string-array name="prefSummaries_snapHeader">
-    <item msgid="43373293784193461">"Әрқашан хабар әрекеттерін экранның жоғарғы жағында көрсету"</item>
-    <item msgid="1765271305989996747">"Портреттік бағдарға бұрылғанда ғана хабар әрекеттерін экранның жоғарғы жағында көрсету"</item>
-    <item msgid="6311113076575333488">"Хабар әрекеттерін хабар тақырыбынан тыс көрсетпеу"</item>
-  </string-array>
-  <string-array name="prefEntries_snapHeader">
-    <item msgid="6906986566816683587">"Әрқашан көрсету"</item>
-    <item msgid="113299655708990672">"Тек портретте көрсету"</item>
-    <item msgid="4403750311175924065">"Көрсетпеу"</item>
-  </string-array>
-    <string name="clear_history_title" msgid="5536216295725760357">"Іздеу тарихын өшіру"</string>
-    <string name="search_history_cleared" msgid="1461946302763342640">"Іздеу тарихы тазаланды."</string>
-    <string name="clear_history_dialog_title" msgid="3503603389704365385">"Іздеу тарихын тазалау керек пе?"</string>
-    <string name="clear_history_dialog_message" msgid="5202922561632407778">"Сіз бұрын орындаған барлық іздеулер жойылады."</string>
-    <string name="manage_accounts_menu_item" msgid="4734660452395086786">"Есептік жазбаларды басқару"</string>
-    <string name="general_preferences_title" msgid="4212138728220418162">"Жалпы параметрлер"</string>
-    <string name="activity_preferences" msgid="8966077432517613292">"Параметрлер"</string>
-</resources>
diff --git a/res/values-km-rKH-sw600dp/strings.xml b/res/values-km-rKH-sw600dp/strings.xml
index 0ffcd84..244f617 100644
--- a/res/values-km-rKH-sw600dp/strings.xml
+++ b/res/values-km-rKH-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ ចម្លង​ជូន/ចម្លង​ជា​សម្ងាត់​ជូន"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ ចម្លង​ជា​សម្ងាត់​ជូន"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"គ្រប់គ្រង​ថត"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"ប្រើ​ជា​លំនាំ​ដើម​សម្រាប់​ឆ្លើយតប​​​ការ​ជូន​ដំណឹង​សារ"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ ចម្លង​ជូន/ចម្លង​ជា​សម្ងាត់​ជូន"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ចម្លង​ជា​សម្ងាត់​ជូន"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"គ្រប់គ្រង​ថត"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"ប្រើ​ជា​លំនាំ​ដើម​សម្រាប់​ឆ្លើយ​តប​ទៅ​នឹង​ការ​ជូន​ដំណឹង​សារ"</string>
 </resources>
diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml
index e3154d0..6b4ea29 100644
--- a/res/values-km-rKH/strings.xml
+++ b/res/values-km-rKH/strings.xml
@@ -127,14 +127,6 @@
     <string name="contextmenu_send_mail" msgid="3834654593200105396">"ផ្ញើ​អ៊ីមែល"</string>
     <string name="contextmenu_map" msgid="5118951927399465521">"ផែនទី"</string>
     <string name="contextmenu_sharelink" msgid="8670940060477758709">"ចែករំលែក​តំណ"</string>
-    <string name="contextmenu_help" msgid="4209674157707873384">"ជំនួយ"</string>
-    <string name="contextmenu_feedback" msgid="8319100902136337085">"ផ្ញើ​មតិ​ស្ថាបនា"</string>
-    <!-- no translation found for num_selected (7990204488812654380) -->
-    <skip />
-  <plurals name="move_conversation">
-    <item quantity="one" msgid="237882018518207244">"ផ្លាស់ទី​ការ​សន្ទនា"</item>
-    <item quantity="other" msgid="6639576653114141743">"ផ្លាស់ទី​ការ​សន្ទនា <xliff:g id="ID_1">%1$d</xliff:g>"</item>
-  </plurals>
     <string name="content_description" msgid="854320355052962069">"<xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g> អំពី <xliff:g id="SUBJECT">%3$s</xliff:g>, <xliff:g id="SNIPPET">%4$s</xliff:g> នៅ <xliff:g id="DATE">%5$s</xliff:g>, <xliff:g id="READSTATE">%6$s</xliff:g>"</string>
     <string name="content_description_today" msgid="1634422834354116955">"<xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g> អំពី <xliff:g id="SUBJECT">%3$s</xliff:g>, <xliff:g id="SNIPPET">%4$s</xliff:g> នៅ​ម៉ោង <xliff:g id="TIME">%5$s</xliff:g>, <xliff:g id="READSTATE">%6$s</xliff:g>"</string>
     <string name="read_string" msgid="5495929677508576520">"អាន​ការ​សន្ទនា"</string>
@@ -165,7 +157,7 @@
   </plurals>
     <string name="confirm_discard_text" msgid="5172680524418848519">"បោះបង់​សារ​នេះ​?"</string>
     <string name="loading_conversations" msgid="7255732786298655246">"កំពុង​ផ្ទុក…"</string>
-    <string name="empty_inbox" msgid="5901734942362315228">"រួចរាល់​អស់​ហើយ! សូម​អ្នក​រីករាយ​ចុះ។"</string>
+    <string name="empty_inbox" msgid="5901734942362315228">"អ្នក​រួចរាល់​ហើយ! សូម​រីករាយ​ចុះ។"</string>
     <string name="empty_search" msgid="8564899353449880818">"អូ! យើង​​រក​មិន​ឃើញ​អ្វី​សម្រាប់ \"<xliff:g id="SEARCH_QUERY">%1$s</xliff:g>\" ទេ។"</string>
     <string name="empty_spam_folder" msgid="3288985543286122800">"អូ គ្មាន​សារ​ឥត​បាន​ការ​នៅ​ទីនេះ​ទេ!"</string>
     <string name="empty_trash_folder" msgid="378119063015945020">"មិន​មាន​ធុងសំរាម​នៅ​ទីនេះ។ អរគុណ​ចំពោះ​ការ​ប្រើ​ឡើងវិញ!"</string>
@@ -387,11 +379,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"រូប​តំណាង​ថត"</string>
     <string name="add_account" msgid="5905863370226612377">"បន្ថែម​គណនី"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"បោះបង់​ព័ត៌មាន​ជំនួយ"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"ការ​ធ្វើ​សម​កាល​កម្ម​ដោយ​ស្វ័យ​ប្រវត្តិ​បាន​បិទ។"</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"ប៉ះ​​ដើម្បី​បើក។"</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"សម​កាល​កម្ម​គណនី​បាន​បិទ។"</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"បើក​នៅ​ក្នុង <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>។"</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"ការ​កំណត់​គណនី"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"មិន​បាន​ផ្ញើ <xliff:g id="NUMBER">%1$s</xliff:g> ក្នុងមិនផ្ញើនៅ​ក្នុង <xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"បើក​សម​កាល​កម្ម​ដោយ​ស្វ័យ​ប្រវត្តិ​ឬ?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"ការ​ផ្លាស់​ប្ដូរ​ដែល​អ្នក​បាន​ធ្វើ​​លើ​​កម្មវិធី​ទាំង​អស់​ និង​គណនី​មិន​មែន​គ្រាន់​តែ​ជា​ Gmail ទេ ​នឹង​ត្រូវ​បាន​ធ្វើ​សម​កាល​កម្ម​រវាង​បណ្ដាញ​ឧបករណ៍​ផ្សេង​ទៀត​​ ​និង​ <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g> របស់​អ្នក។"</string>
@@ -436,8 +423,8 @@
     <string name="view_entire_message" msgid="823281796655014454">"មើល​សារ​ទាំង​មូល"</string>
     <string name="eml_loader_error_toast" msgid="6577383216635400167">"មិន​អាច​បើក​ឯកសារ​នេះ"</string>
     <string name="help_and_info" msgid="3708286489943154681">"ជំនួយ"</string>
-    <string name="help_and_feedback" msgid="7211458338163287670">"ជំនួយ &amp; មតិ​ស្ថាបនា"</string>
-    <string name="feedback" msgid="204247008751740034">"ផ្ញើ​មតិ​ស្ថាបនា"</string>
+    <string name="help_and_feedback" msgid="7211458338163287670">"ជំនួយ &amp; មតិ​ប្រតិកម្ម"</string>
+    <string name="feedback" msgid="204247008751740034">"ផ្ញើ​មតិ​ប្រតិកម្ម"</string>
     <string name="copyright" msgid="3121335168340432582">"©<xliff:g id="YEAR">%1$d</xliff:g> Google Inc។"</string>
     <string name="version" msgid="1161745345056656547">"<xliff:g id="APP_NAME">%1$s</xliff:g> កំណែ <xliff:g id="VERSION">%2$s</xliff:g>"</string>
     <string name="view_app_page" msgid="3241990517052398927"></string>
diff --git a/res/values-kn-rIN-sw600dp/strings.xml b/res/values-kn-rIN-sw600dp/strings.xml
deleted file mode 100644
index bc7f559..0000000
--- a/res/values-kn-rIN-sw600dp/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-     Copyright (C) 2012 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Cc/Bcc"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Bcc"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"ಫೊಲ್ಡರ್‍ಗಳನ್ನು ನಿರ್ವಹಿಸಿ"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"ಸಂದೇಶ ಅಧಿಸೂಚನೆಗಳಿಗೆ ಪ್ರತ್ಯುತ್ತರಿಸಲು ಡೀಫಾಲ್ಟ್ ಆಗಿ ಬಳಸಿ"</string>
-</resources>
diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn-rIN/strings.xml
deleted file mode 100644
index 019af87..0000000
--- a/res/values-kn-rIN/strings.xml
+++ /dev/null
@@ -1,483 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-     Copyright (C) 2011 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="from" msgid="5159056500059912358">"ಇವರಿಂದ"</string>
-    <string name="to" msgid="3971614275716830581">"ಗೆ"</string>
-    <string name="cc" msgid="8768828862207919684">"Cc"</string>
-    <string name="bcc" msgid="519303553518479171">"Bcc"</string>
-    <string name="subject_hint" msgid="2136470287303571827">"ವಿಷಯ"</string>
-    <string name="body_hint" msgid="6478994981747057817">"ಇಮೇಲ್ ರಚಿಸಿ"</string>
-    <string name="add_file_attachment" msgid="2604880054248593993">"ಫೈಲ್‌‎ ಲಗತ್ತಿಸು"</string>
-    <string name="add_photo_attachment" msgid="7163589794940909528">"ಚಿತ್ರವನ್ನು ಲಗತ್ತಿಸಿ"</string>
-    <string name="save_draft" msgid="2669523480789672118">"ಡ್ರಾಫ್ಟ್‌‌  ಉಳಿಸಿ"</string>
-    <string name="discard" msgid="4905982179911608430">"ತಿರಸ್ಕರಿಸು"</string>
-    <string name="compose" msgid="2602861958391035523">"ರಚಿಸಿ"</string>
-  <string-array name="compose_modes">
-    <item msgid="9000553538766397816">"ಪ್ರತ್ಯುತ್ತರ"</item>
-    <item msgid="2767793214788399009">"ಎಲ್ಲರಿಗೂ ಪ್ರತ್ಯುತ್ತರಿಸು"</item>
-    <item msgid="2758162027982270607">"ಫಾರ್ವರ್ಡ್"</item>
-  </string-array>
-    <string name="reply_attribution" msgid="1114972798797833259">"<xliff:g id="DATE">%s</xliff:g> ರಂದು, <xliff:g id="PERSON">%s</xliff:g> ಅವರು ಬರೆದರು:"</string>
-    <string name="forward_attribution" msgid="597850048345475752">"---------- ಫಾರ್ವರ್ಡ್ ಮಾಡಲಾದ ಸಂದೇಶ ----------&lt;br&gt;ಇಂದ: <xliff:g id="FROM">%1$s</xliff:g>&lt;br&gt;ದಿನಾಂಕ: <xliff:g id="DATE">%2$s</xliff:g>&lt;br&gt;ವಿಷಯ: <xliff:g id="SUBJECT">%3$s</xliff:g>&lt;br&gt;ಗೆ: <xliff:g id="TO">%4$s</xliff:g>&lt;br&gt;"</string>
-    <string name="forward_attribution_no_headers" msgid="1828826576779486239">"---------- ಫಾರ್ವರ್ಡ್ ಮಾಡಲಾದ ಸಂದೇಶ ----------"</string>
-    <string name="cc_attribution" msgid="2928584226469388899">"Cc: <xliff:g id="CC">%1$s</xliff:g>&lt;br&gt;"</string>
-    <string name="select_attachment_type" msgid="353236686616663062">"ಲಗತ್ತಿನ ವಿಧವನ್ನು ಆರಿಸಿ"</string>
-    <string name="too_large_to_attach_single" msgid="2669897137966512530">"ಫೈಲ್ <xliff:g id="MAXSIZE">%1$s</xliff:g> ಗೂ ಹೆಚ್ಚು ಗಾತ್ರ ಇರುವ ಕಾರಣ ಲಗತ್ತಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
-    <string name="too_large_to_attach_multiple" msgid="1620163295709036343">"ಒಂದು ಅಥವಾ ಹೆಚ್ಚಿನ ಫೈಲ್‍ಗಳನ್ನು ಲಗತ್ತಿಸಲಾಗಿಲ್ಲ. ಮಿತಿ <xliff:g id="MAXSIZE">%1$s</xliff:g>."</string>
-    <string name="too_large_to_attach_additional" msgid="4964155563465970480">"ಫೈಲ್ ಅನ್ನು ಲಗತ್ತಿಸಲಾಗಿಲ್ಲ. <xliff:g id="MAXSIZE">%1$s</xliff:g> ಮಿತಿಯನ್ನು ತಲುಪಿದೆ."</string>
-    <string name="generic_attachment_problem" msgid="4683974765387240723">"ಫೈಲ್ ಅನ್ನು ಲಗತ್ತಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ."</string>
-    <string name="recipient_needed" msgid="319816879398937214">"ಕನಿಷ್ಠ ಒಬ್ಬ ಸ್ವೀಕೃತದಾರರನ್ನಾದರೂ ಸೇರಿಸಿ"</string>
-    <string name="recipient_error_dialog_title" msgid="760741480291963706">"ಸ್ವೀಕರಿಸುವವರ ದೋಷ"</string>
-    <string name="confirm_send_title" msgid="4664971589247101530">"ಸಂದೇಶ ಕಳುಹಿಸುವುದೇ?"</string>
-    <string name="confirm_send_message_with_no_subject" msgid="1442628074022609987">"ಸಂದೇಶದ ವಿಷಯದಲ್ಲಿ ಯಾವುದೇ ಪಠ್ಯವಿಲ್ಲ."</string>
-    <string name="confirm_send_message_with_no_body" msgid="3329355318700201516">"ಸಂದೇಶದ ಮುಖ್ಯಪಠ್ಯದಲ್ಲಿ ಯಾವುದೇ ಪಠ್ಯವಿಲ್ಲ."</string>
-    <string name="confirm_send_message" msgid="6211518590166222735">"ಈ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸುವುದೇ?"</string>
-    <string name="message_discarded" msgid="6792661321962262024">"ಸಂದೇಶ ತಿರಸ್ಕರಿಸಲಾಗಿದೆ."</string>
-    <string name="signature" msgid="3172144541947408374">\n\n"<xliff:g id="SIGNATURE">%s</xliff:g>"</string>
-    <string name="custom_from_account_label" msgid="5042317430007736322">"ಮೇಲ್‌ ಅನ್ನು ಈ ರೀತಿಯಾಗಿ ಕಳುಹಿಸಿ:"</string>
-    <string name="send" msgid="4269810089682120826">"ಕಳುಹಿಸು"</string>
-    <string name="mark_read" msgid="579388143288052493">"ಓದಿರುವುದು ಎಂದು ಗುರುತಿಸಿ"</string>
-    <string name="mark_unread" msgid="6245060538061533191">"ಓದದಿರುವುದು ಎಂಬಂತೆ ಗುರುತಿಸು"</string>
-    <string name="mute" msgid="9164839998562321569">"ಮ್ಯೂಟ್ ಮಾಡು"</string>
-    <string name="add_star" msgid="3275117671153616270">"ನಕ್ಷತ್ರ ಸೇರಿಸು"</string>
-    <string name="remove_star" msgid="9126690774161840733">"ನಕ್ಷತ್ರ ತೆಗೆದುಹಾಕು"</string>
-    <string name="remove_folder" msgid="2379905457788576297">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> ನಿಂದ ತೆಗೆದುಹಾಕಿ"</string>
-    <string name="archive" msgid="5978663590021719939">"ಆರ್ಕೈವ್"</string>
-    <string name="report_spam" msgid="4106897677959987340">"ಸ್ಪ್ಯಾಮ್ ವರದಿ ಮಾಡು"</string>
-    <string name="mark_not_spam" msgid="8617774236231366651">"ಸ್ಪ್ಯಾಮ್ ಅಲ್ಲ ಎಂದು ವರದಿ ಮಾಡಿ"</string>
-    <string name="report_phishing" msgid="8454666464488413739">"ಫಿಶಿಂಗ್ ವರದಿ ಮಾಡಿ"</string>
-    <string name="delete" msgid="6784262386780496958">"ಅಳಿಸು"</string>
-    <string name="discard_drafts" msgid="5881484193628472105">"ಡ್ರಾಫ್ಟ್‌ಗಳನ್ನು ತಿರಸ್ಕರಿಸು"</string>
-    <string name="discard_failed" msgid="7520780769812210279">"ತ್ಯಜಿಸು ವಿಫಲವಾಗಿದೆ"</string>
-    <string name="refresh" msgid="1533748989749277511">"ರೀಫ್ರೆಶ್‌‌ ಮಾಡಿ"</string>
-    <string name="reply" msgid="8337757482824207118">"ಪ್ರತ್ಯುತ್ತರ"</string>
-    <string name="reply_all" msgid="5366796103758360957">"ಎಲ್ಲರಿಗೂ ಪ್ರತ್ಯುತ್ತರಿಸು"</string>
-    <string name="resume_draft" msgid="1272723181782570649">"ಸಂಪಾದಿಸು"</string>
-    <string name="forward" msgid="4397585145490426320">"ಫಾರ್ವರ್ಡ್ ಮಾಡಿ"</string>
-    <string name="menu_compose" msgid="4575025207594709432">"ರಚಿಸಿ"</string>
-    <string name="menu_change_folders" msgid="2194946192901276625">"ಫೋಲ್ಡರ್‍ಗಳನ್ನು ಬದಲಿಸಿ"</string>
-    <string name="menu_move_to" msgid="7948877550284452830">"ಇದಕ್ಕೆ ವರ್ಗಾಯಿಸು"</string>
-    <string name="menu_move_to_inbox" msgid="258554178236001444">"ಇನ್‌ಬಾಕ್ಸ್‌ಗೆ ಸರಿಸು"</string>
-    <string name="menu_manage_folders" msgid="8486398523679534519">"ಫೋಲ್ಡರ್ ಸೆಟ್ಟಿಂಗ್‍ಗಳು"</string>
-    <string name="menu_show_original" msgid="2330398228979616661">"ಸ್ವಯಂ-ಗ್ರಾತ್ರಗೊಳಿಸುವಿಕೆ ಹಿಂತಿರುಗಿಸು"</string>
-    <string name="menu_settings" msgid="7993485401501778040">"ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
-    <string name="menu_search" msgid="1949652467806052768">"ಹುಡುಕಾಟ"</string>
-    <string name="drawer_title" msgid="3766219846644975778">"ನ್ಯಾವಿಗೇಷನ್"</string>
-    <string name="mark_important" msgid="8781680450177768820">"ಪ್ರಮುಖವಾಗಿರುವುದನ್ನು ಗುರುತಿಸಿ"</string>
-    <string name="mark_not_important" msgid="3342258155408116917">"ಮುಖ್ಯವಲ್ಲ ಎಂದು ಗುರುತಿಸಿ"</string>
-    <string name="add_cc_label" msgid="2249679001141195213">"Cc / Bcc ಸೇರಿಸು"</string>
-    <string name="add_bcc_label" msgid="963745641238037813">"Bcc ಸೇರಿಸು"</string>
-    <string name="quoted_text" msgid="977782904293216533">"ಕೋಟ್ ಮಾಡಲಾದ ಪಠ್ಯವನ್ನು ಒಳಪಡಿಸು"</string>
-    <string name="quoted_text_label" msgid="2296807722849923934">"ಉಲ್ಲೇಖ ಪಠ್ಯ"</string>
-    <string name="respond_inline" msgid="6609746292081928078">"ಇನ್‌ಲೈನ್ ಪ್ರತಿಕ್ರಿಯೆ"</string>
-    <string name="bytes" msgid="651011686747499628">"<xliff:g id="COUNT">%s</xliff:g> B"</string>
-    <string name="kilobytes" msgid="1523463964465770347">"<xliff:g id="COUNT">%s</xliff:g> KB"</string>
-    <string name="megabytes" msgid="4309397368708773323">"<xliff:g id="COUNT">%s</xliff:g> MB"</string>
-    <string name="attachment_image" msgid="6375306026208274564">"ಚಿತ್ರ"</string>
-    <string name="attachment_video" msgid="7119476472603939848">"ವೀಡಿಯೊ"</string>
-    <string name="attachment_audio" msgid="7097658089301809284">"ಆಡಿಯೋ"</string>
-    <string name="attachment_text" msgid="3485853714965922173">"ಪಠ್ಯ"</string>
-    <string name="attachment_application_msword" msgid="2110108876623152162">"ಡಾಕ್ಯುಮೆಂಟ್"</string>
-    <string name="attachment_application_vnd_ms_powerpoint" msgid="425353008963359230">"ಪ್ರಸ್ತುತಿ"</string>
-    <string name="attachment_application_vnd_ms_excel" msgid="5585781311136609103">"ಸ್ಪ್ರೆಡ್‌ಶೀಟ್‌"</string>
-    <string name="attachment_application_pdf" msgid="4207340200944655970">"PDF"</string>
-    <string name="attachment_unknown" msgid="3360536730101083926">"<xliff:g id="ATTACHMENTEXTENSION">%s</xliff:g> ಫೈಲ್"</string>
-    <string name="preview_attachment" msgid="6265457626086113833">"ಪೂರ್ವವೀಕ್ಷಣೆ"</string>
-    <string name="save_attachment" msgid="375685179032130033">"ಉಳಿಸು"</string>
-    <string name="cancel_attachment" msgid="6900093625792891122">"ರದ್ದು"</string>
-    <string name="open_attachment" msgid="6100396056314739761">"ತೆರೆದಿದೆ"</string>
-    <string name="install_attachment" msgid="8119470822958087928">"ಸ್ಥಾಪಿಸು"</string>
-    <string name="download_again" msgid="8195787340878328119">"ಮರು ಡೌನ್‍ಲೋಡ್ ಮಾಡಿ"</string>
-    <string name="more_info_attachment" msgid="2899691682394864507">"ಮಾಹಿತಿ"</string>
-    <string name="no_application_found" msgid="7309485680354949680">"ವೀಕ್ಷಣೆಗಾಗಿ ಈ ಲಗತ್ತನ್ನು ಯಾವುದೇ ಅಪ್ಲಿಕೇಶನ್ ತೆರೆಯಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
-    <string name="fetching_attachment" msgid="2286628490159574159">"ಲಗತ್ತನ್ನು ಪಡೆಯಲಾಗುತ್ತಿದೆ"</string>
-    <string name="please_wait" msgid="3953824147776128899">"ದಯವಿಟ್ಟು ನಿರೀಕ್ಷಿಸಿ…"</string>
-    <string name="saved" msgid="161536102236967534">"ಉಳಿಸಲಾಗಿದೆ, <xliff:g id="SIZE">%s</xliff:g>"</string>
-    <string name="download_failed" msgid="3878373998269062395">"ಡೌನ್‍‍ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ಮರುಪ್ರಯತ್ನಿಸಲು ಸ್ಪರ್ಶಿಸಿ."</string>
-    <string name="menu_photo_save_all" msgid="2742869476474613396">"ಎಲ್ಲವನ್ನೂ ಉಳಿಸಿರಿ"</string>
-    <string name="menu_photo_share" msgid="6410980274832639330">"ಹಂಚು"</string>
-    <string name="menu_photo_share_all" msgid="3049053252719665320">"ಎಲ್ಲ ಹಂಚು"</string>
-    <string name="menu_photo_print" msgid="3084679038179342333">"ಮುದ್ರಿಸು"</string>
-    <string name="saving" msgid="6274238733828387433">"ಉಳಿಸಲಾಗುತ್ತಿದೆ.."</string>
-    <string name="choosertitle_sharevia" msgid="3539537264873337959">"ಈ ಮೂಲಕ ಹಂಚಿಕೊಳ್ಳಿ"</string>
-    <string name="contextmenu_openlink" msgid="6952228183947135362">"ಬ್ರೌಸರ್‌ನಲ್ಲಿ ತೆರೆ"</string>
-    <string name="contextmenu_copy" msgid="2584243784216385180">"ನಕಲಿಸು"</string>
-    <string name="contextmenu_copylink" msgid="8659897702269320063">"ಲಿಂಕ್ URL ನಕಲಿಸಿ"</string>
-    <string name="contextmenu_view_image" msgid="1031172763893491000">"ಚಿತ್ರವನ್ನು ವೀಕ್ಷಿಸಿ"</string>
-    <string name="contextmenu_dial_dot" msgid="8881095692316726628">"ಡಯಲ್‌…"</string>
-    <string name="contextmenu_sms_dot" msgid="5319737001771622657">"SMS…"</string>
-    <string name="contextmenu_add_contact" msgid="2310064151427072475">"ಸಂಪರ್ಕ ಸೇರಿಸಿ"</string>
-    <string name="contextmenu_send_mail" msgid="3834654593200105396">"ಇಮೇಲ್ ಕಳುಹಿಸಿ"</string>
-    <string name="contextmenu_map" msgid="5118951927399465521">"ಮ್ಯಾಪ್"</string>
-    <string name="contextmenu_sharelink" msgid="8670940060477758709">"ಲಿಂಕ್ ಹಂಚಿರಿ"</string>
-    <string name="contextmenu_help" msgid="4209674157707873384">"ಸಹಾಯ"</string>
-    <string name="contextmenu_feedback" msgid="8319100902136337085">"ಪ್ರತಿಕ್ರಿಯೆ ಕಳುಹಿಸಿ"</string>
-    <!-- no translation found for num_selected (7990204488812654380) -->
-    <skip />
-  <plurals name="move_conversation">
-    <item quantity="one" msgid="237882018518207244">"ಸಂವಾದವನ್ನು ಸರಿಸು"</item>
-    <item quantity="other" msgid="6639576653114141743">"<xliff:g id="ID_1">%1$d</xliff:g> ಸಂವಾದಗಳನ್ನು ಸರಿಸು"</item>
-  </plurals>
-    <string name="content_description" msgid="854320355052962069">"<xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g> <xliff:g id="DATE">%5$s</xliff:g>, <xliff:g id="READSTATE">%6$s</xliff:g> ರಂದು <xliff:g id="SUBJECT">%3$s</xliff:g>, <xliff:g id="SNIPPET">%4$s</xliff:g> ಕುರಿತು"</string>
-    <string name="content_description_today" msgid="1634422834354116955">"<xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g> <xliff:g id="TIME">%5$s</xliff:g>, <xliff:g id="READSTATE">%6$s</xliff:g> ಗೆ <xliff:g id="SUBJECT">%3$s</xliff:g>, <xliff:g id="SNIPPET">%4$s</xliff:g> ಕುರಿತು"</string>
-    <string name="read_string" msgid="5495929677508576520">"ಸಂವಾದವನ್ನು ಓದಿದೆ"</string>
-    <string name="unread_string" msgid="7342558841698083381">"ಓದದಿರುವ ಸಂವಾದಗಳು"</string>
-    <string name="filtered_tag" msgid="721666921386074505">"[<xliff:g id="TAG">%1$s</xliff:g>]<xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="badge_and_subject" msgid="3979372269373936750">"<xliff:g id="ID_1">%1$s</xliff:g> <xliff:g id="ID_2">%2$s</xliff:g>"</string>
-  <plurals name="draft">
-    <item quantity="one" msgid="6717535677167943402">"ಡ್ರಾಫ್ಟ್‌"</item>
-    <item quantity="other" msgid="1335781147509740039">"ಡ್ರಾಫ್ಟ್‌‌ಗಳು"</item>
-  </plurals>
-    <string name="sending" msgid="5600034886763930499">"ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ..."</string>
-    <string name="message_retrying" msgid="5335188121407261331">"ಮರು ಪ್ರಯತ್ನಿಸಲಾಗುತ್ತಿದೆ…"</string>
-    <string name="message_failed" msgid="7887650587384601790">"ವಿಫಲವಾಗಿದೆ"</string>
-    <string name="send_failed" msgid="2186285547449865010">"ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲಾಗಿಲ್ಲ."</string>
-    <string name="me_object_pronoun" msgid="4674452244417913816">"ನಾನು"</string>
-    <string name="me_subject_pronoun" msgid="7479328865714008288">"ನಾನು"</string>
-  <plurals name="confirm_delete_conversation">
-    <item quantity="one" msgid="7605755011865575440">"ಈ ಸಂವಾದವನ್ನು ಅಳಿಸುವುದೇ?"</item>
-    <item quantity="other" msgid="1585660381208712562">"ಈ <xliff:g id="COUNT">%1$d</xliff:g> ಸಂವಾದಗಳನ್ನು ಅಳಿಸುವುದೇ?"</item>
-  </plurals>
-  <plurals name="confirm_archive_conversation">
-    <item quantity="one" msgid="9105551557653306945">"ಈ ಸಂವಾದವನ್ನು ಆರ್ಕೈವ್ ಮಾಡುವುದೇ?"</item>
-    <item quantity="other" msgid="2001972798185641108">"ಈ <xliff:g id="COUNT">%1$d</xliff:g> ಸಂವಾದಗಳನ್ನು ಆರ್ಕೈವ್ ಮಾಡುವುದೇ?"</item>
-  </plurals>
-  <plurals name="confirm_discard_drafts_conversation">
-    <item quantity="one" msgid="2030421499893210789">"ಈ ಸಂದೇಶವನ್ನು ತಿರಸ್ಕರಿಸುವುದೇ?"</item>
-    <item quantity="other" msgid="782234447471532005">"ಈ <xliff:g id="COUNT">%1$d</xliff:g> ಸಂದೇಶಗಳನ್ನು ತ್ಯಜಿಸುವುದೇ?"</item>
-  </plurals>
-    <string name="confirm_discard_text" msgid="5172680524418848519">"ಈ ಸಂದೇಶವನ್ನು ತಿರಸ್ಕರಿಸುವುದೇ?"</string>
-    <string name="loading_conversations" msgid="7255732786298655246">"ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ..."</string>
-    <string name="empty_inbox" msgid="5901734942362315228">"ನೀವು ಎಲ್ಲವನ್ನೂ ಮುಗಿಸಿರುವಿರಿ! ನಿಮ್ಮ ದಿನವನ್ನು ಆನಂದಿಸಿ."</string>
-    <string name="empty_search" msgid="8564899353449880818">"ಓಹ್! ನಾವು \"<xliff:g id="SEARCH_QUERY">%1$s</xliff:g>\" ಗಾಗಿ ಏನನ್ನೂ ಕಂಡು ಹಿಡಿಯಲಾಗಲಿಲ್ಲ."</string>
-    <string name="empty_spam_folder" msgid="3288985543286122800">"ಹುರ‍್ರೇ, ಇಲ್ಲಿ ಯಾವುದೇ ಸ್ಪ್ಯಾಮ್ ಇಲ್ಲ!"</string>
-    <string name="empty_trash_folder" msgid="378119063015945020">"ಇಲ್ಲಿ ಯಾವುದೇ ಅನುಪಯುಕ್ತ ಇಲ್ಲ. ಮರುಬಳಕೆಗೆ ಧನ್ಯವಾದಗಳು!"</string>
-    <string name="empty_folder" msgid="3227552635613553855">"ಇಲ್ಲಿ ಯಾವುದೇ ಮೇಲ್‍ಗಳಿಲ್ಲ."</string>
-    <string name="getting_messages" msgid="8403333791332403244">"ನಿಮ್ಮ ಸಂದೇಶಗಳನ್ನು ಪಡೆದುಕೊಳ್ಳುವುದು"</string>
-    <string name="undo" msgid="8256285267701059609">"ರದ್ದುಮಾಡು"</string>
-  <plurals name="conversation_unstarred">
-    <item quantity="one" msgid="839233699150563831">"<xliff:g id="COUNT">%1$d</xliff:g> ಸಂವಾದದಲ್ಲಿ ನಕ್ಷತ್ರವನ್ನು ತೆಗೆದುಹಾಕಲಾಗುತ್ತಿದೆ."</item>
-    <item quantity="other" msgid="7677305734833709789">"<xliff:g id="COUNT">%1$d</xliff:g> ನಕ್ಷತ್ರ ತೆಗೆದುಹಾಕಿರುವ ಸಂವಾದಗಳು."</item>
-  </plurals>
-  <plurals name="conversation_muted">
-    <item quantity="one" msgid="3339638225564408438">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ಅನ್ನು ಮ್ಯೂಟ್ ಮಾಡಲಾಗಿದೆ."</item>
-    <item quantity="other" msgid="4276111931404654219">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ಅನ್ನು ಮ್ಯೂಟ್ ಮಾಡಲಾಗಿದೆ."</item>
-  </plurals>
-  <plurals name="conversation_spammed">
-    <item quantity="one" msgid="6986172030710967687">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ಅನ್ನು ಸ್ಪ್ಯಾಮ್ ಎಂದು ವರದಿ ಮಾಡಲಾಗಿದೆ."</item>
-    <item quantity="other" msgid="5900913789259199137">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ಅನ್ನು ಸ್ಪ್ಯಾಮ್ ಎಂದು ವರದಿ ಮಾಡಲಾಗಿದೆ."</item>
-  </plurals>
-  <plurals name="conversation_not_spam">
-    <item quantity="one" msgid="2294904093653094150">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ಅನ್ನು ಸ್ಪ್ಯಾಮ್ ಅಲ್ಲ ಎಂದು ವರದಿ ಮಾಡಲಾಗಿದೆ."</item>
-    <item quantity="other" msgid="4966164423991098144">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ಅನ್ನು ಸ್ಪ್ಯಾಮ್ ಅಲ್ಲ ಎಂದು ವರದಿ ಮಾಡಲಾಗಿದೆ."</item>
-  </plurals>
-  <plurals name="conversation_not_important">
-    <item quantity="one" msgid="3824809189993339030">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ಮುಖ್ಯವಾದುದಲ್ಲ ಎಂದು ಗುರುತಿಸಲಾಗಿದೆ."</item>
-    <item quantity="other" msgid="1215472798075869124">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ಅನ್ನು ಮುಖ್ಯವಾದುದಲ್ಲ ಎಂದು ಗುರುತಿಸಲಾಗಿದೆ."</item>
-  </plurals>
-  <plurals name="conversation_phished">
-    <item quantity="one" msgid="4330095881258771201">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ಅನ್ನು ಫಿಶಿಂಗ್ ಎಂದು ವರದಿ ಮಾಡಲಾಗಿದೆ."</item>
-    <item quantity="other" msgid="9218674052779504277">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ಅನ್ನು ಫಿಶಿಂಗ್ ಎಂದು ವರದಿ ಮಾಡಲಾಗಿದೆ."</item>
-  </plurals>
-  <plurals name="conversation_archived">
-    <item quantity="one" msgid="4127890884907503696">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ಅನ್ನು ಆರ್ಕೈವ್‌‌ ಮಾಡಲಾಗಿದೆ."</item>
-    <item quantity="other" msgid="7789480176789922968">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ಅನ್ನು ಆರ್ಕೈವ್‌‌ ಮಾಡಲಾಗಿದೆ."</item>
-  </plurals>
-  <plurals name="conversation_deleted">
-    <item quantity="one" msgid="5591889079235938982">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ಅನ್ನು ಅಳಿಸಲಾಗಿದೆ."</item>
-    <item quantity="other" msgid="7060256058737892078">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ಅನ್ನು ಅಳಿಸಲಾಗಿದೆ."</item>
-  </plurals>
-    <string name="deleted" msgid="7378013910782008375">"ಅಳಿಸಲಾಗಿದೆ"</string>
-    <string name="archived" msgid="6283673603512713022">"ಆರ್ಕೈವ್ ಮಾಡಲಾಗಿದೆ"</string>
-    <string name="folder_removed" msgid="5656281444688183676">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> ನಿಂದ ತೆಗೆದು ಹಾಕಲಾಗಿದೆ"</string>
-  <plurals name="conversation_folder_changed">
-    <item quantity="one" msgid="6463727361987396734">"ಫೋಲ್ಡರ್ ಬದಲಿಸಲಾಗಿದೆ."</item>
-    <item quantity="other" msgid="8815390494333090939">"ಫೋಲ್ಡರ್‍ಗಳನ್ನು ಬದಲಿಸಲಾಗಿದೆ."</item>
-  </plurals>
-    <string name="conversation_folder_moved" msgid="6475872337373081683">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> ಗೆ ಸರಿಸಲಾಗಿದೆ"</string>
-    <string name="search_results_header" msgid="1529438451150580188">"ಫಲಿತಾಂಶಗಳು"</string>
-    <string name="search_unsupported" msgid="2873920566477359177">"ಈ ಖಾತೆಯಲ್ಲಿ ಹುಡುಕಾಟ ಬೆಂಬಲಿಸುತ್ತಿಲ್ಲ."</string>
-    <string name="add_label" msgid="3285338046038610902">"ಫೋಲ್ಡರ್ ಸೇರಿಸಿ"</string>
-    <string name="new_incoming_messages_one" msgid="5933087567495998661">"<xliff:g id="SENDER">%s</xliff:g> ಅವರಿಂದ ಹೊಸ ಸಂದೇಶ ತೋರಿಸು."</string>
-  <plurals name="new_incoming_messages_many">
-    <item quantity="other" msgid="4394042684501388790">"<xliff:g id="COUNT">%1$d</xliff:g> ಹೊಸ ಸಂದೇಶಗಳನ್ನು ತೋರಿಸು."</item>
-  </plurals>
-    <string name="date_and_view_details" msgid="2952994746916149969">"<xliff:g id="DATE">%1$s</xliff:g> &lt;a href=\'http://www.example.com\'&gt;View details&lt;/a&gt;"</string>
-    <string name="hide_details" msgid="8018801050702453314">"ವಿವರಗಳನ್ನು ಮರೆಮಾಡಿ"</string>
-    <string name="to_message_header" msgid="3954385178027011919">"<xliff:g id="RECIPIENTS">%1$s</xliff:g> ಅವರಿಗೆ"</string>
-    <string name="contact_info_string" msgid="6484930184867405276">"<xliff:g id="NAME">%1$s</xliff:g> ಗಾಗಿ ಸಂಪರ್ಕ ಮಾಹಿತಿಯನ್ನು ತೋರಿಸು"</string>
-    <string name="contact_info_string_default" msgid="6204228921864816351">"ಸಂಪರ್ಕ ಮಾಹಿತಿ ತೋರಿಸು"</string>
-  <plurals name="show_messages_read">
-    <item quantity="other" msgid="5285673397387128129">"<xliff:g id="COUNT">%1$d</xliff:g> ಹಳೆಯ ಸಂದೇಶಗಳು"</item>
-  </plurals>
-    <string name="from_heading" msgid="48290556829713090">"ಇವರಿಂದ:"</string>
-    <string name="replyto_heading" msgid="8275255318292059079">"ಇದಕ್ಕೆ-ಪ್ರತ್ಯುತ್ತರಿಸಿ"</string>
-    <string name="to_heading" msgid="3495203282540398336">"ಗೆ: "</string>
-    <string name="to_heading_no_space" msgid="679167047628308670">"ಇವರಿಗೆ:"</string>
-    <string name="cc_heading" msgid="5603892257866345823">"Cc:"</string>
-    <string name="bcc_heading" msgid="1482186590756218269">"Bcc:"</string>
-    <string name="date_heading" msgid="4213063948406397168">"ದಿನಾಂಕ:"</string>
-    <string name="show_images" msgid="436044894053204084">"ಚಿತ್ರಗಳನ್ನು ತೋರಿಸಿ"</string>
-    <string name="always_show_images" msgid="556087529413707819">"ಯಾವಾಗಲೂ ಈ ಕಳುಹಿಸುವವರಿಂದ ಚಿತ್ರಗಳನ್ನು ತೋರಿಸು"</string>
-    <string name="always_show_images_toast" msgid="3763157294047555051">"ಈ ಕಳುಹಿಸುವವರಿಂದ ಚಿತ್ರಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ತೋರಿಸಲಾಗುತ್ತದೆ."</string>
-    <string name="address_display_format" msgid="2098008376913966177">"<xliff:g id="NAME">%1$s</xliff:g> <xliff:g id="EMAIL">%2$s</xliff:g>"</string>
-    <string name="address_display_format_with_via_domain" msgid="8108294635074750048">"<xliff:g id="VIA_DOMAIN">%3$s</xliff:g> ಮೂಲಕ <xliff:g id="NAME">%1$s</xliff:g> <xliff:g id="EMAIL">%2$s</xliff:g>"</string>
-    <string name="message_saved" msgid="3291655042310241793">"ಡ್ರಾಫ್ಟ್‌ನ ರೂಪದಲ್ಲಿ ಸಂದೇಶವನ್ನು ಉಳಿಸಲಾಗಿದೆ."</string>
-    <string name="sending_message" msgid="2487846954946637084">"ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ..."</string>
-    <string name="invalid_recipient" msgid="9157434699389936584">"<xliff:g id="WRONGEMAIL">%s</xliff:g> ವಿಳಾಸ ಅಮಾನ್ಯವಾಗಿದೆ"</string>
-    <string name="show_elided" msgid="3456154624105704327">"ಉಲ್ಲೇಖಿತ ಪಠ್ಯವನ್ನು ತೋರಿಸಿ"</string>
-    <string name="hide_elided" msgid="5768235486834692733">"▼ ಉಲ್ಲೇಖಿತ ಪಠ್ಯವನ್ನು ಮರೆಮಾಡಿ"</string>
-    <string name="message_invite_title" msgid="5985161025144867256">"ಕ್ಯಾಲೆಂಡರ್ ಆಹ್ವಾನ"</string>
-    <string name="message_invite_calendar_view" msgid="9181966650840809197">"ಕ್ಯಾಲೆಂಡರ್‌ನಲ್ಲಿ ವೀಕ್ಷಿಸಿ"</string>
-    <string name="message_invite_label_attending" msgid="4194264767870003397">"ಹೋಗುತ್ತಿರುವಿರಾ?"</string>
-    <string name="message_invite_accept" msgid="8002758842580134835">"ಹೌದು"</string>
-    <string name="message_invite_tentative" msgid="3199418731566655887">"ಬಹುಶಃ"</string>
-    <string name="message_invite_decline" msgid="6331040872447290777">"ಇಲ್ಲ"</string>
-    <string name="enumeration_comma" msgid="2848850136844740850">", "</string>
-    <string name="send_anyway" msgid="2727576121007079643">"ಹೇಗಾದರೂ ಕಳುಹಿಸು"</string>
-    <string name="ok" msgid="6178802457914802336">"ಸರಿ"</string>
-    <string name="done" msgid="344354738335270292">"ಮುಗಿದಿದೆ"</string>
-    <string name="cancel" msgid="4831678293149626190">"ರದ್ದು"</string>
-    <string name="clear" msgid="765949970989448022">"ತೆರವುಗೊಳಿಸು"</string>
-    <string name="next" msgid="2662478712866255138">"ಮುಂದೆ"</string>
-    <string name="previous" msgid="8985379053279804274">"ಹಿಂದೆ"</string>
-  <string-array name="sync_status">
-    <item msgid="4600303222943450797">"ಯಶಸ್ವಿಯಾಗಿದೆ"</item>
-    <item msgid="2972425114100316260">"ಯಾವುದೇ ಸಂಪರ್ಕವಿಲ್ಲ."</item>
-    <item msgid="8594593386776437871">"ಸೈನ್ ಇನ್ ಮಾಡಲಾಗಲಿಲ್ಲ."</item>
-    <item msgid="1375193906551623606">"ಭದ್ರತಾ ದೋಷ."</item>
-    <item msgid="195177374927979967">"ಸಿಂಕ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ."</item>
-    <item msgid="8026148967150231130">"ಆಂತರಿಕ ದೋಷ"</item>
-    <item msgid="5442620760791553027">"ಸರ್ವರ್ ದೋಷ"</item>
-  </string-array>
-    <string name="tap_to_configure" msgid="137172348280050643">"ಹೊಂದಿಸಲು ಸ್ಪರ್ಶಿಸಿ"</string>
-    <string name="non_synced_folder_description" msgid="3044618511909304701">"ಸಂವಾದಗಳನ್ನು ವೀಕ್ಷಿಸಲು, ಈ ಫೋಲ್ಡರ್ ಸಿಂಕ್ ಮಾಡಿ."</string>
-    <string name="tap_to_configure_folder_sync" msgid="3280434399275638071">"ಫೋಲ್ಡರ್ ಸಿಂಕ್ ಮಾಡಿ"</string>
-    <string name="widget_large_unread_count" msgid="8699435859096455837">"%d+"</string>
-    <string name="large_unseen_count" msgid="3055042669246912518">"<xliff:g id="COUNT">%d</xliff:g>+ ಹೊಸ"</string>
-    <string name="unseen_count" msgid="5509898665569695288">"<xliff:g id="COUNT">%d</xliff:g> ಹೊಸ"</string>
-  <plurals name="actionbar_unread_messages">
-    <item quantity="other" msgid="3863201473731766006">"<xliff:g id="COUNT">%1$d</xliff:g> ಓದದಿರುವುದು"</item>
-  </plurals>
-    <string name="actionbar_large_unread_count" msgid="753635978542372792">"<xliff:g id="COUNT">%1$d</xliff:g>+ ಓದದಿರುವುದು"</string>
-    <string name="view_more_conversations" msgid="8377920000247101901">"ಇನ್ನಷ್ಟು ಸಂವಾದಗಳನ್ನು ವೀಕ್ಷಿಸಿ"</string>
-    <string name="loading_conversation" msgid="7931600025861500397">"ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ..."</string>
-    <string name="activity_mailbox_selection" msgid="7489813868539767701">"ಖಾತೆಯನ್ನು ಆರಿಸಿಕೊಳ್ಳಿ"</string>
-    <string name="activity_folder_selection" msgid="8375243281001234750">"ಫೋಲ್ಡರ್ ಆರಿಸಿ"</string>
-    <string name="folder_shortcut_widget_label" msgid="6466292659577092915">"ಇಮೇಲ್ ಫೋಲ್ಡರ್"</string>
-    <string name="change_folders_selection_dialog_title" msgid="9174464298613273814">"ಫೋಲ್ಡರ್‍ಗಳನ್ನು ಬದಲಿಸಿ"</string>
-    <string name="move_to_selection_dialog_title" msgid="4052506464467083621">"ಇದಕ್ಕೆ ವರ್ಗಾಯಿಸು"</string>
-    <string name="search_hint" msgid="4916671414132334289">"ಮೇಲ್ ಹುಡುಕಿ"</string>
-    <!-- no translation found for search_results_loaded (1784879343458807514) -->
-    <skip />
-    <string name="network_error" msgid="5931164247644972255">"ಯಾವುದೇ ಸಂಪರ್ಕವಿಲ್ಲ"</string>
-    <string name="retry" msgid="916102442074217293">"ಮರುಪ್ರಯತ್ನಿಸಿ"</string>
-    <string name="load_more" msgid="8702691358453560575">"ಇನ್ನಷ್ಟು ಲೋಡ್ ಮಾಡಿ"</string>
-    <!-- no translation found for load_attachment (3894318473827290350) -->
-    <skip />
-    <string name="shortcut_name_title" msgid="1562534040126088628">"ಫೋಲ್ಡರ್ ಶಾರ್ಟ್‍ಕಟ್‌ಗೆ ಹೆಸರಿಡಿ"</string>
-    <string name="wait_for_sync_title" msgid="4577632826912823075">"ಸಿಂಕ್‍ಗಾಗಿ ನಿರೀಕ್ಷಿಸಲಾಗುತ್ತಿದೆ"</string>
-    <string name="not_synced_title" msgid="3600180500934086346">"ಖಾತೆ ಸಿಂಕ್ ಆಗಿಲ್ಲ"</string>
-    <string name="wait_for_manual_sync_body" msgid="2823149409451003378">"ಈ ಖಾತೆಯನ್ನು ಸ್ವಯಂಚಾಲಿತ ಸಿಂಕ್‍‍ಗೆ ಹೊಂದಿಸಲಾಗಿಲ್ಲ.\nಒಂದು ಬಾರಿ ಮೇಲ್‌ಗೆ ಸಿಂಕ್ ಮಾಡಲು "<b>"ಇದೀಗ ಸಿಂಕ್ ಮಾಡು"</b>", ಅಥವಾ ಈ ಖಾತೆಯನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸಿಂಕ್ ಮೇಲ್‍‍ಗೆ ಹೊಂದಿಸಲು "<b>"ಸಿಂಕ್ ಸೆಟ್ಟಿಂಗ್‍‍ಗಳನ್ನು ಬದಲಿಸು"</b>" ಅನ್ನು ಸ್ಪರ್ಶಿಸಿ."</string>
-    <string name="manual_sync" msgid="2271479734895537848">"ಇದೀಗ ಸಿಂಕ್ ಮಾಡಿ"</string>
-    <string name="change_sync_settings" msgid="3615852118397055361">"ಸಿಂಕ್ ಸೆಟ್ಟಿಂಗ್‍ಗಳನ್ನು ಬದಲಿಸಿ"</string>
-    <string name="photo_load_failed" msgid="577471721679146999">"ಚಿತ್ರವನ್ನು ಲೋಡ್ ಮಾಡಲಾಗಲಿಲ್ಲ"</string>
-    <string name="cant_move_or_change_labels" msgid="4155490583610926755">"ಆಯ್ಕೆಯು ಬಹು ಖಾತೆಗಳನ್ನು ಒಳಗೊಂಡಿರುವ ಕಾರಣದಿಂದಾಗಿ ಸರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
-    <string name="multiple_new_message_notification_item" msgid="1386588046275174918"><b>"<xliff:g id="SENDER">%1$s</xliff:g>"</b>"   <xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="single_new_message_notification_big_text" msgid="2170154732664242904">"<xliff:g id="SUBJECT">%1$s</xliff:g>\n<xliff:g id="SNIPPET">%2$s</xliff:g>"</string>
-    <string name="ignore_spam_warning" msgid="8760314545535838430">"ನಿರ್ಲಕ್ಷಿಸಿ, ಈ ಸಂದೇಶದ ಬಗ್ಗೆ ವಿಶ್ವಾಸವಿದೆ"</string>
-    <string name="via_domain" msgid="537951148511529082">"<xliff:g id="VIADOMAIN">%1$s</xliff:g> ಮುಖಾಂತರ"</string>
-    <string name="signin" msgid="4699091478139791244">"ಸೈನ್-ಇನ್"</string>
-    <string name="info" msgid="1357564480946178121">"ಮಾಹಿತಿ"</string>
-    <string name="report" msgid="4318141326014579036">"ವರದಿ ಮಾಡು"</string>
-    <string name="sync_error" msgid="1795794969006241678">"ಸಿಂಕ್ ಮಾಡಲಾಗುವುದಿಲ್ಲ."</string>
-    <string name="sync_error_message" msgid="4182644657243736635">"ಸಿಂಕ್ ಮಾಡಲು ಬೇಕಿರುವಷ್ಟು ಸಂಗ್ರಹಣಾ ಸ್ಥಳವಾಕಾಶ ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿಲ್ಲ."</string>
-    <string name="storage" msgid="4783683938444150638">"ಸಂಗ್ರಹಣೆ"</string>
-    <string name="senders_split_token" msgid="6549228851819460081">", "</string>
-    <string name="draft_count_format" msgid="9122583199850209286">" (<xliff:g id="COUNT">%1$s</xliff:g>)"</string>
-    <string name="all_folders_heading" msgid="9023770187629170967">"ಎಲ್ಲ ಫೋಲ್ಡರ್‌ಗಳು"</string>
-    <string name="recent_folders_heading" msgid="8943134955788867702">"ಇತ್ತೀಚಿನ ಫೋಲ್ಡರ್‍ಗಳು"</string>
-    <string name="message_details_title" msgid="60771875776494764">"ಸಂದೇಶದ ವಿವರಗಳು"</string>
-    <string name="preference_advance_to_title" msgid="6385669491239514630">"ಸ್ವಯಂ-ಪ್ರಗತಿ"</string>
-  <string-array name="prefEntries_autoAdvance">
-    <item msgid="1505450878799459652">"ಹೊಸದಾದ"</item>
-    <item msgid="8000986144872247139">"ಹಳೆಯದು"</item>
-    <item msgid="8015001161633421314">"ಸಂವಾದ ಪಟ್ಟಿ"</item>
-  </string-array>
-  <string-array name="prefSummaries_autoAdvance">
-    <item msgid="8221665977497655719">"ನೀವು ಅಳಿಸಿದ ನಂತರ ಹೊಸದಾದ ಸಂವಾದವನ್ನು ತೋರಿಸು"</item>
-    <item msgid="1721869262893378141">"ನೀವು ಅಳಿಸಿದ ನಂತರ ಹಳೆಯದಾದ ಸಂವಾದವನ್ನು ತೋರಿಸು"</item>
-    <item msgid="880913657385630195">"ನೀವು ಅಳಿಸಿದ ಬಳಿಕ ಸಂವಾದ ಪಟ್ಟಿಯನ್ನು ತೋರಿಸು"</item>
-  </string-array>
-    <string name="prefDialogTitle_autoAdvance" msgid="5459235590885640678">"ಇದಕ್ಕೆ ಕಳುಹಿಸಿ"</string>
-    <string name="clear_display_images_whitelist_title" msgid="2012677202404471778">"ಚಿತ್ರ ಅನುಮೋದನೆಗಳನ್ನು ತೆರವುಗೊಳಿಸಿ"</string>
-    <string name="clear_display_images_whitelist_dialog_title" msgid="1942692501166848471">"ಚಿತ್ರ ಅನುಮೋದನೆಗಳನ್ನು ತೆರವುಗೊಳಿಸುವುದೇ?"</string>
-    <string name="clear_display_images_whitelist_dialog_message" msgid="3952553078559373729">"ನೀವು ಈ ಹಿಂದೆ ಅನುಮತಿಸಿದ ಕಳುಹಿಸುವವರಿಂದ ಇನ್‍‍ಲೈನ್ ಚಿತ್ರಗಳ ಪ್ರದರ್ಶನ ನಿಲ್ಲಿಸಿ."</string>
-    <string name="sender_whitelist_cleared" msgid="2490984995927904030">"ಚಿತ್ರಗಳು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ತೋರಿಸಲಾಗುವುದಿಲ್ಲ."</string>
-    <string name="preferences_signature_title" msgid="2318034745474929902">"ಸಹಿ"</string>
-    <string name="preferences_signature_dialog_title" msgid="4801741764511807064">"ಸಹಿ"</string>
-    <string name="preferences_signature_summary_not_set" msgid="3776614319388053784">"ಹೊಂದಿಸಿಲ್ಲ"</string>
-    <string name="notification_action_reply" msgid="8378725460102575919">"ಪ್ರತ್ಯುತ್ತರ"</string>
-    <string name="notification_action_reply_all" msgid="5693469099941000037">"ಎಲ್ಲರಿಗೂ ಪ್ರತ್ಯುತ್ತರಿಸು"</string>
-    <string name="notification_action_archive" msgid="2884874164831039047">"ಆರ್ಕೈವ್"</string>
-    <string name="notification_action_remove_label" msgid="3714785653186750981">"ಲೇಬಲ್ ತೆಗೆದುಹಾಕು"</string>
-    <string name="notification_action_delete" msgid="3201627482564624132">"ಅಳಿಸು"</string>
-    <string name="notification_action_undo_archive" msgid="600186958134073582">"ಆರ್ಕೈವ್ ಮಾಡಲಾಗಿದೆ"</string>
-    <string name="notification_action_undo_remove_label" msgid="8341924850540100690">"ಲೇಬಲ್ ತೆಗೆದು ಹಾಕಲಾಗಿದೆ"</string>
-    <string name="notification_action_undo_delete" msgid="6915612337413587103">"ಅಳಿಸಲಾಗಿದೆ"</string>
-    <string name="veiled_address" msgid="2670378260196977266"></string>
-    <string name="veiled_alternate_text" msgid="6343564357099807582"></string>
-    <string name="veiled_alternate_text_unknown_person" msgid="6728323554307952217"></string>
-    <string name="veiled_summary_unknown_person" msgid="2122359944161241551"></string>
-    <string name="label_notification_ticker" msgid="323232821061341014">"<xliff:g id="LABEL">%s</xliff:g>: <xliff:g id="NOTIFICATION">%s</xliff:g>"</string>
-  <plurals name="new_messages">
-    <item quantity="one" msgid="3446656407520493241">"<xliff:g id="COUNT">%1$d</xliff:g> ಹೊಸ ಸಂದೇಶ"</item>
-    <item quantity="other" msgid="3531683811183204615">"<xliff:g id="COUNT">%1$d</xliff:g> ಹೊಸ ಸಂದೇಶಗಳು"</item>
-  </plurals>
-    <string name="single_new_message_notification_title" msgid="7954710563222504868">"<xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="silent_ringtone" msgid="1570794756474381886">"ಶಾಂತ"</string>
-    <string name="preference_removal_action_title" msgid="4703834472477137634">"ಆರ್ಕೈವ್ &amp; ಕ್ರಿಯೆಗಳನ್ನು ಅಳಿಸಿ"</string>
-  <string-array name="prefEntries_removal_action">
-    <item msgid="954772302016538814">"ಆರ್ಕೈವ್ ಮಾತ್ರ ತೋರಿಸು"</item>
-    <item msgid="7212690302706180254">"ಅಳಿಸು ಮಾತ್ರ ತೋರಿಸು"</item>
-    <item msgid="2539051197590685708">"ಆರ್ಕೈವ್ &amp; ಅಳಿಸು ಅನ್ನು ತೋರಿಸು"</item>
-  </string-array>
-  <string-array name="prefSummaries_removal_action_summary">
-    <item msgid="6877416142040695022">"ಆರ್ಕೈವ್ ಮಾತ್ರ ತೋರಿಸು"</item>
-    <item msgid="1510017057984222376">"ಅಳಿಸು ಮಾತ್ರ ತೋರಿಸು"</item>
-    <item msgid="3196207224108008441">"ಆರ್ಕೈವ್ ತೋರಿಸು &amp; ಅಳಿಸು"</item>
-  </string-array>
-    <string name="prefDialogTitle_removal_action" msgid="266548424110393246">"ಕ್ರಿಯೆಗಳನ್ನು ಆರ್ಕೈವ್ ಮಾಡಿ &amp; ಅಳಿಸಿ"</string>
-    <string name="preferences_default_reply_all_title" msgid="7255858488369635327">"ಎಲ್ಲರಿಗೂ ಪ್ರತ್ಯುತ್ತರಿಸು"</string>
-    <string name="preferences_default_reply_all_summary_impl" msgid="895581085692979709">"ಸಂದೇಶ ಪ್ರತ್ಯುತ್ತರಗಳಿಗಾಗಿ ಡೀಫಾಲ್ಟ್ ಆಗಿ ಬಳಸಿ"</string>
-    <string name="preference_swipe_title_archive" msgid="9122333537761282714">"ಆರ್ಕೈವ್ ಮಾಡಲು ಸ್ವೈಪ್ ಮಾಡಿ"</string>
-    <string name="preference_swipe_title_delete" msgid="4860474024917543711">"ಅಳಿಸಲು ಸ್ವೈಪ್ ಮಾಡಿ"</string>
-    <string name="preference_swipe_description" msgid="3036560323237015010">"ಸಂವಾದ ಪಟ್ಟಿಯಲ್ಲಿ"</string>
-    <string name="preference_sender_image_title" msgid="7890813537985591865">"ಕಳುಹಿಸಿದವರ ಚಿತ್ರ"</string>
-    <string name="preference_sender_image_description" msgid="3586817690132199889">"ಸಂವಾದ ಪಟ್ಟಿಯಲ್ಲಿ ಪಕ್ಕದಲ್ಲಿನ ಹೆಸರನ್ನು ತೋರಿಸು"</string>
-    <string name="empty_trash" msgid="3385937024924728399">"ಅನುಪಯುಕ್ತವನ್ನು ಖಾಲಿಮಾಡು"</string>
-    <string name="empty_spam" msgid="2911988289997281371">"ಸ್ಪ್ಯಾಮ್ ಖಾಲಿಯಾಗಿದೆ"</string>
-    <string name="empty_trash_dialog_title" msgid="2104898489663621508">"ಅನುಪಯುಕ್ತವನ್ನು ಖಾಲಿಮಾಡುವುದೇ?"</string>
-    <string name="empty_spam_dialog_title" msgid="1130319045917820569">"ಸ್ಪ್ಯಾಮ್ ಖಾಲಿಮಾಡುವುದೇ?"</string>
-  <plurals name="empty_folder_dialog_message">
-    <item quantity="one" msgid="3315412388217832914">"<xliff:g id="COUNT">%1$d</xliff:g> ಸಂದೇಶವನ್ನು ಶಾಶ್ವತವಾಗಿ ಅಳಿಸಲಾಗುತ್ತದೆ."</item>
-    <item quantity="other" msgid="263840304486020101">"<xliff:g id="COUNT">%1$d</xliff:g> ಸಂದೇಶಗಳನ್ನು ಶಾಶ್ವತವಾಗಿ ಅಳಿಸಲಾಗುತ್ತದೆ."</item>
-  </plurals>
-    <string name="drawer_open" msgid="2285557278907103851">"ನ್ಯಾವಿಗೇಶನ್ ಡ್ರಾಯರ್ ತೆರೆಯಿರಿ"</string>
-    <string name="drawer_close" msgid="2065829742127544297">"ನ್ಯಾವಿಗೇಶನ್ ಡ್ರಾಯರ್ ಮುಚ್ಚಿ"</string>
-    <string name="conversation_photo_welcome_text" msgid="836483155429003787">"ಆ ಸಂವಾದವನ್ನು ಆಯ್ಕೆ ಮಾಡಲು ಕಳುಹಿಸುವವರ ಚಿತ್ರವನ್ನು ಸ್ಪರ್ಶಿಸಿ."</string>
-    <string name="long_press_to_select_tip" msgid="1660881999120625177">"ಒಂದು ಸಂವಾದವನ್ನು ಆಯ್ಕೆ ಮಾಡಲು ಸ್ಪರ್ಶಿಸಿ &amp; ಹಿಡಿದಿಟ್ಟುಕೊಳ್ಳಿ, ನಂತರ ಹೆಚ್ಚು ಆಯ್ಕೆಗಾಗಿ ಸ್ಪರ್ಶಿಸಿ."</string>
-    <string name="folder_icon_desc" msgid="6272938864914794739">"ಫೋಲ್ಡರ್ ಐಕಾನ್"</string>
-    <string name="add_account" msgid="5905863370226612377">"ಖಾತೆಯನ್ನು ಸೇರಿಸಿ"</string>
-    <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"ಸಲಹೆ ವಜಾಗೊಳಿಸು"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"ಸ್ವಯಂ-ಸಿಂಕ್ ಆಫ್ ಆಗಿದೆ."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"ಆನ್ ಮಾಡಲು ಸ್ಪರ್ಶಿಸಿ."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"ಖಾತೆ ಸಿಂಕ್ ಆಫ್ ಆಗಿದೆ."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"<xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g> ನಲ್ಲಿ ಆನ್ ಮಾಡಿ."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"ಖಾತೆ ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
-    <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="OUTBOX">%2$s</xliff:g> ನಲ್ಲಿ <xliff:g id="NUMBER">%1$s</xliff:g> ಕಳುಹಿಸದಿರುವ"</string>
-    <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"ಸ್ವಯಂ-ಸಿಂಕ್‌ ಆನ್‌‌ ಮಾಡುವುದೇ?"</string>
-    <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"ಕೇವಲ Gmail ಮಾತ್ರವಲ್ಲ, ಎಲ್ಲಾ ಅಪ್ಲಿಕೇಶನ್‍‍ಗಳು ಮತ್ತು ಖಾತೆಗಳಿಗೆ ನೀವು ಮಾಡುವ ಬದಲಾವಣೆಗಳು, ವೆಬ್, ನಿಮ್ಮ ಇತರೆ ಸಾಧನಗಳು, ಮತ್ತು ನಿಮ್ಮ <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g> ನ ಮದ್ಯ ಸಿಂಕ್ರೊನೈಜ್ ಆಗುತ್ತವೆ."</string>
-    <string name="phone" msgid="4142617042507912053">"ಫೋನ್"</string>
-    <string name="tablet" msgid="4593581125469224791">"ಟ್ಯಾಬ್ಲೆಟ್‌‌"</string>
-    <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="7239160845196929866">"ಆನ್ ಮಾಡು"</string>
-    <string name="show_n_more_folders" msgid="5769610839632786654">"<xliff:g id="NUMBER">%1$s</xliff:g> ಹೆಚ್ಚಿನ ಫೋಲ್ಡರ್‍ಗಳನ್ನು ತೋರಿಸು"</string>
-    <string name="hide_folders" msgid="7618891933409521283">"ಫೋಲ್ಡರ್‍ಗಳನ್ನು ಮರೆಮಾಡಿ"</string>
-    <string name="print" msgid="7987949243936577207">"ಮುದ್ರಿಸು"</string>
-    <string name="print_all" msgid="4011022762279519941">"ಎಲ್ಲವನ್ನೂ ಮುದ್ರಿಸು"</string>
-  <plurals name="num_messages">
-    <item quantity="one" msgid="8071234386915191851">"<xliff:g id="COUNT">%1$d</xliff:g> ಸಂದೇಶ"</item>
-    <item quantity="other" msgid="962415099931188360">"<xliff:g id="COUNT">%1$d</xliff:g> ಸಂದೇಶಗಳು"</item>
-  </plurals>
-    <string name="date_message_received_print" msgid="4168417403884350040">"<xliff:g id="DAY_AND_DATE">%1$s</xliff:g> ಕ್ಕೆ <xliff:g id="TIME">%2$s</xliff:g>"</string>
-    <string name="draft_to_heading" msgid="7370121943946205024">"ಇವರಿಗೆ ಡ್ರಾಫ್ಟ್:"</string>
-    <string name="draft_heading" msgid="7032951343184552800">"ಡ್ರಾಫ್ಟ್‌"</string>
-    <string name="quoted_text_hidden_print" msgid="5256754205675159141">"ಉಲ್ಲೇಖಿತ ಪಠ್ಯವು ಅಡಗಿದೆ"</string>
-  <plurals name="num_attachments">
-    <item quantity="one" msgid="5494465717267988888">"<xliff:g id="COUNT">%1$d</xliff:g> ಲಗತ್ತು"</item>
-    <item quantity="other" msgid="5422167728480739361">"<xliff:g id="COUNT">%1$d</xliff:g> ಲಗತ್ತುಗಳು"</item>
-  </plurals>
-    <string name="no_subject" msgid="5622708348540036959">"(ವಿಷಯ ಇಲ್ಲ)"</string>
-    <string name="vacation_responder" msgid="5570132559074523806">"ರಜಾ ಕಾಲದ ಪ್ರತ್ಯುತ್ತರ"</string>
-    <string name="preferences_vacation_responder_title" msgid="2268482117730576123">"ರಜಾ ಕಾಲದ ಪ್ರತ್ಯುತ್ತರ"</string>
-    <string name="vacation_responder_body_hint_text" msgid="9087613123105158494">"ಸಂದೇಶ"</string>
-    <string name="send_to_contacts_text" msgid="124432913980620545">"ನನ್ನ ಸಂಪರ್ಕಗಳಿಗೆ ಮಾತ್ರ ಕಳುಹಿಸಿ"</string>
-    <string name="send_to_domain_text" msgid="5064559546745918393">"<xliff:g id="DOMAIN">%1$s</xliff:g> ಗೆ ಮಾತ್ರ ಕಳುಹಿಸು"</string>
-    <string name="pick_start_date_title" msgid="2274665037355224165">"ಆರಂಭ"</string>
-    <string name="pick_end_date_title" msgid="733396083649496600">"ಮುಕ್ತಾಯಗೊಂಡಿದೆ (ಐಚ್ಛಿಕ)"</string>
-    <string name="date_not_set" msgid="3251555782945051904">"ಹೊಂದಿಸಿಲ್ಲ"</string>
-    <string name="set_end_date_dialog_title" msgid="7543009262788808443">"ಅಂತಿಮ ದಿನಾಂಕ (ಐಚ್ಛಿಕ)"</string>
-    <string name="custom_date" msgid="5794846334232367838">"ಕಸ್ಟಮ್"</string>
-    <string name="date_none" msgid="1061426502665431412">"ಯಾವುದೂ ಇಲ್ಲ"</string>
-    <string name="discard_changes" msgid="5699760550972324746">"ಬದಲಾವಣೆಗಳನ್ನು ತಿರಸ್ಕರಿಸುವುದೇ?"</string>
-    <string name="vacation_responder_changes_saved" msgid="91448817268121249">"ರಜಾ ಕಾಲದ ಪ್ರತ್ಯುತ್ತರದ ಬದಲಾವಣೆಗಳನ್ನು ಉಳಿಸಲಾಗಿದೆ"</string>
-    <string name="vacation_responder_changes_discarded" msgid="21756037735539983">"ರಜಾ ಕಾಲದ ಪ್ರತ್ಯುತ್ತರದ ಬದಲಾವಣೆಗಳನ್ನು ತ್ಯಜಿಸಲಾಗಿದೆ"</string>
-    <string name="vacation_responder_off" msgid="4429909341193366667">"ಆಫ್ ಆಗಿದೆ"</string>
-    <string name="vacation_responder_on" msgid="4913238379320882449">"<xliff:g id="DATE">%1$s</xliff:g> ದಿನಾಂಕದಿಂದ, ಆನ್ ಆಗಿದೆ"</string>
-    <string name="vacation_responder_on_with_end_date" msgid="4360941815371475955">"ರಲ್ಲಿ, <xliff:g id="START_DATE">%1$s</xliff:g> ರಿಂದ <xliff:g id="END_DATE">%2$s</xliff:g> ಗೆ"</string>
-    <string name="vacation_responder_empty_subject_and_body_warning" msgid="6233629618520852439">"ವಿಷಯ ಅಥವಾ ಸಂದೇಶ ಸೇರಿಸಿ"</string>
-    <string name="view_entire_message" msgid="823281796655014454">"ಇಡೀ ಸಂದೇಶವನ್ನು ವೀಕ್ಷಿಸು"</string>
-    <string name="eml_loader_error_toast" msgid="6577383216635400167">"ಈ ಫೈಲ್ ಅನ್ನು ತೆರೆಯಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
-    <string name="help_and_info" msgid="3708286489943154681">"ಸಹಾಯ"</string>
-    <string name="help_and_feedback" msgid="7211458338163287670">"ಸಹಾಯ &amp; ಪ್ರತಿಕ್ರಿಯೆ"</string>
-    <string name="feedback" msgid="204247008751740034">"ಪ್ರತಿಕ್ರಿಯೆ ಕಳುಹಿಸಿ"</string>
-    <string name="copyright" msgid="3121335168340432582">"©<xliff:g id="YEAR">%1$d</xliff:g> Google Inc."</string>
-    <string name="version" msgid="1161745345056656547">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಆವೃತ್ತಿ <xliff:g id="VERSION">%2$s</xliff:g>"</string>
-    <string name="view_app_page" msgid="3241990517052398927"></string>
-    <string name="print_dialog" msgid="8895536548487605661">"ಮುದ್ರಿಸು..."</string>
-    <string name="copyright_information" msgid="971422874488783312">"ಹಕ್ಕುಸ್ವಾಮ್ಯ ಮಾಹಿತಿ"</string>
-    <string name="privacy_policy" msgid="212094623396418302">"ಗೌಪ್ಯತಾ ನೀತಿ"</string>
-    <string name="open_source_licenses" msgid="8643615555920977752">"ತೆರೆದ ಮೂಲ ಪರವಾನಗಿಗಳು"</string>
-    <string name="reply_choice_yes" msgid="3327633032975373220">"ಹೌದು"</string>
-    <string name="reply_choice_no" msgid="7068775605915475207">"ಇಲ್ಲ"</string>
-    <string name="reply_choice_ok" msgid="7881073621845053152">"ಸರಿ"</string>
-    <string name="reply_choice_hehe" msgid="6054314968043050748">"ಹೆಹೆ"</string>
-    <string name="reply_choice_thanks" msgid="4978961954288364694">"ಧನ್ಯವಾದಗಳು"</string>
-    <string name="reply_choice_i_agree" msgid="2496652737796884298">"ಒಪ್ಪುತ್ತೇನೆ"</string>
-    <string name="reply_choice_nice" msgid="4465894941302838676">"ಉತ್ತಮ"</string>
-    <string name="reply_on_my_way" msgid="5645003971107444269">"ನನ್ನ ಹಾದಿಯಲ್ಲಿದ್ದೇನೆ"</string>
-    <string name="reply_choice_later" msgid="4629219072859486413">"ಸರಿ, ನಂತರ ನಿಮ್ಮನ್ನು ಮತ್ತೆ ಸಂಪರ್ಕಿಸುತ್ತೇನೆ"</string>
-    <string name="reply_choice_smiling_face" msgid="1772253938506548631">":)"</string>
-    <string name="reply_choice_frowning_face" msgid="6260338807944002651">":("</string>
-    <string name="preference_header_action_confirmations" msgid="3922674681156121948">"ಕ್ರಿಯೆ ದೃಢೀಕರಣಗಳು"</string>
-    <string name="preference_confirm_before_delete_title" msgid="7563587174619033835">"ಅಳಿಸುವ ಮೊದಲು ದೃಢೀಕರಿಸಿ"</string>
-    <string name="preference_confirm_before_archive_title" msgid="7318645995655875718">"ಸಂಗ್ರಹಿಸುವ ಮೊದಲು ದೃಢೀಕರಿಸಿ"</string>
-    <string name="preference_confirm_before_send_title" msgid="4136585783513077039">"ಕಳುಹಿಸುವ ಮೊದಲು ದೃಢೀಕರಿಸಿ"</string>
-    <string name="preferences_conversation_mode_title" msgid="389352009651720838">"ಸಂದೇಶಗಳನ್ನು ಸ್ವಯಂ-ಹೊಂದಿಸಿ"</string>
-    <string name="preferences_conversation_mode_summary" msgid="5730999743867653106">"ಪರದೆಗೆ ಹೊಂದಿಸಲು ಸಂದೇಶಗಳನ್ನು ಕುಗ್ಗಿಸಿ"</string>
-    <string name="preferences_disable_snap_headers_title" msgid="7257824136988429629">"ಸಂದೇಶದ ಕ್ರಿಯೆಗಳು"</string>
-  <string-array name="prefSummaries_snapHeader">
-    <item msgid="43373293784193461">"ಪರದೆಯ ಮೇಲ್ಭಾಗದಲ್ಲಿ ಸಂದೇಶದ ಕ್ರಿಯೆಗಳನ್ನು ಯಾವಾಗಲೂ ತೋರಿಸಿ"</item>
-    <item msgid="1765271305989996747">"ಪೋಟ್ರೇಟ್ ಮೋಡ್‌ಗೆ ಬದಲಿಸಿದಾಗ ಪರದೆಯ ಮೇಲ್ಭಾಗದಲ್ಲಿ ಸಂದೇಶದ ಕ್ರಿಯೆಗಳನ್ನು ಯಾವಾಗಲೂ ತೋರಿಸಿ"</item>
-    <item msgid="6311113076575333488">"ಸಂದೇಶ ಶಿರೋಲೇಖದ ಹೊರಗೆ ಸಂದೇಶದ ಕ್ರಿಯೆಗಳನ್ನು ತೋರಿಸಬೇಡಿ"</item>
-  </string-array>
-  <string-array name="prefEntries_snapHeader">
-    <item msgid="6906986566816683587">"ಯಾವಾಗಲೂ ತೋರಿಸು"</item>
-    <item msgid="113299655708990672">"ಪೋಟ್ರೇಟ್‌ನಲ್ಲಿ ಮಾತ್ರ ತೋರಿಸು"</item>
-    <item msgid="4403750311175924065">"ತೋರಿಸಬೇಡ"</item>
-  </string-array>
-    <string name="clear_history_title" msgid="5536216295725760357">"ಹುಡುಕಾಟ ಇತಿಹಾಸವನ್ನು ತೆರವುಗೊಳಿಸಿ"</string>
-    <string name="search_history_cleared" msgid="1461946302763342640">"ಹುಡುಕಾಟ ಇತಿಹಾಸವನ್ನು ತೆರವುಗೊಳಿಸಲಾಗಿದೆ."</string>
-    <string name="clear_history_dialog_title" msgid="3503603389704365385">"ಹುಡುಕಾಟ ಇತಿಹಾಸವನ್ನು ತೆರವುಗೊಳಿಸುವುದೇ?"</string>
-    <string name="clear_history_dialog_message" msgid="5202922561632407778">"ನೀವು ಈ ಹಿಂದೆ ನಿರ್ವಹಿಸಿರುವ ಎಲ್ಲ ಹುಡುಕಾಟಗಳನ್ನು ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ."</string>
-    <string name="manage_accounts_menu_item" msgid="4734660452395086786">"ಖಾತೆಗಳನ್ನು ನಿರ್ವಹಿಸು"</string>
-    <string name="general_preferences_title" msgid="4212138728220418162">"ಸಾಮಾನ್ಯ ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
-    <string name="activity_preferences" msgid="8966077432517613292">"ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
-</resources>
diff --git a/res/values-ko-sw600dp/strings.xml b/res/values-ko-sw600dp/strings.xml
index 436e980..5fafa24 100644
--- a/res/values-ko-sw600dp/strings.xml
+++ b/res/values-ko-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ 참조/숨은참조"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ 숨은참조"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"폴더 관리"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"메일 알림에 답장 시 기본값으로 사용"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ 참조/숨은참조"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ 숨은참조"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"폴더 관리"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"메일 알림에 답장 시 기본값으로 사용"</string>
 </resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 78ff817..b35304f 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -65,7 +65,7 @@
     <string name="report_phishing" msgid="8454666464488413739">"피싱 신고"</string>
     <string name="delete" msgid="6784262386780496958">"삭제"</string>
     <string name="discard_drafts" msgid="5881484193628472105">"임시보관 메일 삭제"</string>
-    <string name="discard_failed" msgid="7520780769812210279">"전송 실패 메일 삭제"</string>
+    <string name="discard_failed" msgid="7520780769812210279">"전송 실패 메시지 삭제"</string>
     <string name="refresh" msgid="1533748989749277511">"새로고침"</string>
     <string name="reply" msgid="8337757482824207118">"답장"</string>
     <string name="reply_all" msgid="5366796103758360957">"전체답장"</string>
@@ -272,7 +272,7 @@
     <string name="tap_to_configure_folder_sync" msgid="3280434399275638071">"폴더 동기화"</string>
     <string name="widget_large_unread_count" msgid="8699435859096455837">"%d+"</string>
     <string name="large_unseen_count" msgid="3055042669246912518">"새 메시지 <xliff:g id="COUNT">%d</xliff:g>개 이상"</string>
-    <string name="unseen_count" msgid="5509898665569695288">"새 메일 <xliff:g id="COUNT">%d</xliff:g>개"</string>
+    <string name="unseen_count" msgid="5509898665569695288">"새 메시지 <xliff:g id="COUNT">%d</xliff:g>개"</string>
   <plurals name="actionbar_unread_messages">
     <item quantity="other" msgid="3863201473731766006">"읽지 않은 메일 <xliff:g id="COUNT">%1$d</xliff:g>개"</item>
   </plurals>
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"폴더 아이콘"</string>
     <string name="add_account" msgid="5905863370226612377">"계정 추가"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"도움말 닫기"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"자동 동기화가 사용 중지되어 있습니다."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"사용하려면 터치합니다."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"계정 동기화가 사용 중지되어 있습니다."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"<xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>에서 동기화를 설정하세요."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"계정 설정"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="OUTBOX">%2$s</xliff:g>에 보내지 않은 메일 <xliff:g id="NUMBER">%1$s</xliff:g>개 있음"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"자동 동기화를 사용하시겠습니까?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Gmail뿐만 아니라 모든 앱 및 계정의 변경사항이 웹, 다른 기기, <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g> 간에 동기화됩니다."</string>
@@ -450,10 +445,10 @@
     <string name="reply_choice_ok" msgid="7881073621845053152">"확인"</string>
     <string name="reply_choice_hehe" msgid="6054314968043050748">"하하"</string>
     <string name="reply_choice_thanks" msgid="4978961954288364694">"감사합니다"</string>
-    <string name="reply_choice_i_agree" msgid="2496652737796884298">"동의합니다"</string>
+    <string name="reply_choice_i_agree" msgid="2496652737796884298">"동의"</string>
     <string name="reply_choice_nice" msgid="4465894941302838676">"좋아요"</string>
-    <string name="reply_on_my_way" msgid="5645003971107444269">"가는 중입니다"</string>
-    <string name="reply_choice_later" msgid="4629219072859486413">"나중에 연락드리겠습니다"</string>
+    <string name="reply_on_my_way" msgid="5645003971107444269">"가는 중입니다."</string>
+    <string name="reply_choice_later" msgid="4629219072859486413">"나중에 연락드리겠습니다."</string>
     <string name="reply_choice_smiling_face" msgid="1772253938506548631">":)"</string>
     <string name="reply_choice_frowning_face" msgid="6260338807944002651">":("</string>
     <string name="preference_header_action_confirmations" msgid="3922674681156121948">"액션 확인"</string>
diff --git a/res/values-ky-rKG-sw600dp/strings.xml b/res/values-ky-rKG-sw600dp/strings.xml
deleted file mode 100644
index 163d6b0..0000000
--- a/res/values-ky-rKG-sw600dp/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-     Copyright (C) 2012 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Кчрм/Жашр.кчрм"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Жашр.кчрм"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Папкаларды башкаруу"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Билдирүү эскертмелерине демейки жооп катары колдонуу"</string>
-</resources>
diff --git a/res/values-ky-rKG/strings.xml b/res/values-ky-rKG/strings.xml
deleted file mode 100644
index 4584190..0000000
--- a/res/values-ky-rKG/strings.xml
+++ /dev/null
@@ -1,485 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-     Copyright (C) 2011 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- no translation found for from (5159056500059912358) -->
-    <skip />
-    <string name="to" msgid="3971614275716830581">"Кимге"</string>
-    <string name="cc" msgid="8768828862207919684">"Көчүрмө"</string>
-    <string name="bcc" msgid="519303553518479171">"Жашр.кчрм"</string>
-    <string name="subject_hint" msgid="2136470287303571827">"Темасы"</string>
-    <string name="body_hint" msgid="6478994981747057817">"Электрондук билдирүү жазуу"</string>
-    <string name="add_file_attachment" msgid="2604880054248593993">"Файл тиркөө"</string>
-    <string name="add_photo_attachment" msgid="7163589794940909528">"Сүрөт тиркөө"</string>
-    <string name="save_draft" msgid="2669523480789672118">"Сомону сактоо"</string>
-    <string name="discard" msgid="4905982179911608430">"Жарактан чгруу"</string>
-    <string name="compose" msgid="2602861958391035523">"Жазуу"</string>
-  <string-array name="compose_modes">
-    <item msgid="9000553538766397816">"Жооп берүү"</item>
-    <item msgid="2767793214788399009">"Баары жооп бер"</item>
-    <item msgid="2758162027982270607">"Багыттоо"</item>
-  </string-array>
-    <string name="reply_attribution" msgid="1114972798797833259">"<xliff:g id="DATE">%s</xliff:g> күнү, <xliff:g id="PERSON">%s</xliff:g> жазган:"</string>
-    <string name="forward_attribution" msgid="597850048345475752">"---------- Багытталган билдирүү ----------&lt;br&gt;Кимден: <xliff:g id="FROM">%1$s</xliff:g>&lt;br&gt;Күнү: <xliff:g id="DATE">%2$s</xliff:g>&lt;br&gt;Тема: <xliff:g id="SUBJECT">%3$s</xliff:g>&lt;br&gt;To: <xliff:g id="TO">%4$s</xliff:g>&lt;br&gt;"</string>
-    <string name="forward_attribution_no_headers" msgid="1828826576779486239">"---------- Багытталган билдирүү ----------"</string>
-    <string name="cc_attribution" msgid="2928584226469388899">"Көчүрмө: <xliff:g id="CC">%1$s</xliff:g>&lt;br&gt;"</string>
-    <string name="select_attachment_type" msgid="353236686616663062">"Тиркеме түрүн тандаңыз"</string>
-    <string name="too_large_to_attach_single" msgid="2669897137966512530">"<xliff:g id="MAXSIZE">%1$s</xliff:g> ашык файлды тиркөө мүмкүн эмес."</string>
-    <string name="too_large_to_attach_multiple" msgid="1620163295709036343">"Бир же бир нече файл тиркелген жок. Белгиленген эң жогорку чек <xliff:g id="MAXSIZE">%1$s</xliff:g>."</string>
-    <string name="too_large_to_attach_additional" msgid="4964155563465970480">"Файл тиркелген жок. Белгиленген эң жогорку <xliff:g id="MAXSIZE">%1$s</xliff:g> чекке жетти."</string>
-    <string name="generic_attachment_problem" msgid="4683974765387240723">"Файл тиркелген жок."</string>
-    <string name="recipient_needed" msgid="319816879398937214">"Жок дегенде бир алуучуну кошуңуз."</string>
-    <string name="recipient_error_dialog_title" msgid="760741480291963706">"Алуучунун катасы"</string>
-    <string name="confirm_send_title" msgid="4664971589247101530">"Билдирүү жөнөтүлсүнбү?"</string>
-    <string name="confirm_send_message_with_no_subject" msgid="1442628074022609987">"Билдирүүнүн темасы жок."</string>
-    <string name="confirm_send_message_with_no_body" msgid="3329355318700201516">"Билдирүүнүн тексти жок."</string>
-    <string name="confirm_send_message" msgid="6211518590166222735">"Бул билдирүү жөнөтүлсүнбү?"</string>
-    <string name="message_discarded" msgid="6792661321962262024">"Билдирүү жарактан чыгарылды."</string>
-    <string name="signature" msgid="3172144541947408374">\n\n"<xliff:g id="SIGNATURE">%s</xliff:g>"</string>
-    <string name="custom_from_account_label" msgid="5042317430007736322">"Билдирнү жнтүү:"</string>
-    <string name="send" msgid="4269810089682120826">"Жөнөтүү"</string>
-    <string name="mark_read" msgid="579388143288052493">"Окулду деп белгилөө"</string>
-    <string name="mark_unread" msgid="6245060538061533191">"Окула элек деп белгилөө"</string>
-    <string name="mute" msgid="9164839998562321569">"Үнсүз"</string>
-    <string name="add_star" msgid="3275117671153616270">"Жылдызча кошуу"</string>
-    <string name="remove_star" msgid="9126690774161840733">"Жылдызчаны алып салуу"</string>
-    <string name="remove_folder" msgid="2379905457788576297">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> ичинен алып салуу"</string>
-    <string name="archive" msgid="5978663590021719939">"Архивдөө"</string>
-    <string name="report_spam" msgid="4106897677959987340">"Спам деп кабарлоо"</string>
-    <string name="mark_not_spam" msgid="8617774236231366651">"Спам эмес деп кабарлоо"</string>
-    <string name="report_phishing" msgid="8454666464488413739">"Фишинг жөнүндө кабарлоо"</string>
-    <string name="delete" msgid="6784262386780496958">"Жок кылуу"</string>
-    <string name="discard_drafts" msgid="5881484193628472105">"Сомолорду жарактан чыгаруу"</string>
-    <!-- no translation found for discard_failed (7520780769812210279) -->
-    <skip />
-    <string name="refresh" msgid="1533748989749277511">"Жаңылоо"</string>
-    <string name="reply" msgid="8337757482824207118">"Жооп берүү"</string>
-    <string name="reply_all" msgid="5366796103758360957">"Баарына жооп берүү"</string>
-    <string name="resume_draft" msgid="1272723181782570649">"Түзөтүү"</string>
-    <string name="forward" msgid="4397585145490426320">"Багыттоо"</string>
-    <string name="menu_compose" msgid="4575025207594709432">"Жазуу"</string>
-    <string name="menu_change_folders" msgid="2194946192901276625">"Папкаларды өзгөртүү"</string>
-    <string name="menu_move_to" msgid="7948877550284452830">"Төмөнкүгө жылдыруу"</string>
-    <string name="menu_move_to_inbox" msgid="258554178236001444">"Кирүүчү кутусуна жылдыруу"</string>
-    <string name="menu_manage_folders" msgid="8486398523679534519">"Папка жөндөөлөрү"</string>
-    <string name="menu_show_original" msgid="2330398228979616661">"Авто-өлчөмдү кайтаруу"</string>
-    <string name="menu_settings" msgid="7993485401501778040">"Жөндөөлөр"</string>
-    <string name="menu_search" msgid="1949652467806052768">"Издөө"</string>
-    <string name="drawer_title" msgid="3766219846644975778">"Навигация"</string>
-    <string name="mark_important" msgid="8781680450177768820">"Маанилүү деп белгилөө"</string>
-    <string name="mark_not_important" msgid="3342258155408116917">"Маанилүү эмес деп белгилөө"</string>
-    <string name="add_cc_label" msgid="2249679001141195213">"Кчрм/Жашр.кчрм кошуу"</string>
-    <string name="add_bcc_label" msgid="963745641238037813">"Жашыр. көчүрмө кошуу"</string>
-    <string name="quoted_text" msgid="977782904293216533">"Цитата текстин кошуу"</string>
-    <string name="quoted_text_label" msgid="2296807722849923934">"Цитата тексти"</string>
-    <string name="respond_inline" msgid="6609746292081928078">"Саптын ичинде жооп берүү"</string>
-    <string name="bytes" msgid="651011686747499628">"<xliff:g id="COUNT">%s</xliff:g> Б"</string>
-    <string name="kilobytes" msgid="1523463964465770347">"<xliff:g id="COUNT">%s</xliff:g> Кб"</string>
-    <string name="megabytes" msgid="4309397368708773323">"<xliff:g id="COUNT">%s</xliff:g> Мб"</string>
-    <string name="attachment_image" msgid="6375306026208274564">"Сүрөт"</string>
-    <string name="attachment_video" msgid="7119476472603939848">"Видео"</string>
-    <string name="attachment_audio" msgid="7097658089301809284">"Аудио"</string>
-    <string name="attachment_text" msgid="3485853714965922173">"Текст"</string>
-    <string name="attachment_application_msword" msgid="2110108876623152162">"Документ"</string>
-    <string name="attachment_application_vnd_ms_powerpoint" msgid="425353008963359230">"Сунуштама"</string>
-    <string name="attachment_application_vnd_ms_excel" msgid="5585781311136609103">"Электрондук жадыбал"</string>
-    <string name="attachment_application_pdf" msgid="4207340200944655970">"PDF"</string>
-    <string name="attachment_unknown" msgid="3360536730101083926">"<xliff:g id="ATTACHMENTEXTENSION">%s</xliff:g> Файл"</string>
-    <string name="preview_attachment" msgid="6265457626086113833">"Алдын ала көрүү"</string>
-    <string name="save_attachment" msgid="375685179032130033">"Сактоо"</string>
-    <string name="cancel_attachment" msgid="6900093625792891122">"Жокко чгр."</string>
-    <string name="open_attachment" msgid="6100396056314739761">"Ачуу"</string>
-    <string name="install_attachment" msgid="8119470822958087928">"Орнотуу"</string>
-    <string name="download_again" msgid="8195787340878328119">"Кайра жүктөп алуу"</string>
-    <string name="more_info_attachment" msgid="2899691682394864507">"Маалымат"</string>
-    <string name="no_application_found" msgid="7309485680354949680">"Бул тиркемени бир дагы колдонмо ачып көрсөтө албайт."</string>
-    <string name="fetching_attachment" msgid="2286628490159574159">"Тиркемени өткөрүп алуу"</string>
-    <string name="please_wait" msgid="3953824147776128899">"Күтө туруңуз…"</string>
-    <string name="saved" msgid="161536102236967534">"Сакталган, <xliff:g id="SIZE">%s</xliff:g>"</string>
-    <string name="download_failed" msgid="3878373998269062395">"Жүктөлгөн жок. Кайра жүктөө үчүн, тийип коюңуз."</string>
-    <string name="menu_photo_save_all" msgid="2742869476474613396">"Бардыгын сактоо"</string>
-    <string name="menu_photo_share" msgid="6410980274832639330">"Бөлүшүү"</string>
-    <string name="menu_photo_share_all" msgid="3049053252719665320">"Бардыгын бөлүшүү"</string>
-    <string name="menu_photo_print" msgid="3084679038179342333">"Басып чыгаруу"</string>
-    <string name="saving" msgid="6274238733828387433">"Сакталууда…"</string>
-    <string name="choosertitle_sharevia" msgid="3539537264873337959">"Төмөндөгү аркылуу бөлүшүү:"</string>
-    <string name="contextmenu_openlink" msgid="6952228183947135362">"Серепчиден ачуу"</string>
-    <string name="contextmenu_copy" msgid="2584243784216385180">"Көчүрүү"</string>
-    <string name="contextmenu_copylink" msgid="8659897702269320063">"URL шилтемесин көчүрүү"</string>
-    <string name="contextmenu_view_image" msgid="1031172763893491000">"Сүрөттү көрүү"</string>
-    <string name="contextmenu_dial_dot" msgid="8881095692316726628">"Терүү…"</string>
-    <string name="contextmenu_sms_dot" msgid="5319737001771622657">"SMS…"</string>
-    <string name="contextmenu_add_contact" msgid="2310064151427072475">"Байланыш кошуу"</string>
-    <string name="contextmenu_send_mail" msgid="3834654593200105396">"Электрондук билдирүү жөнөтүү"</string>
-    <string name="contextmenu_map" msgid="5118951927399465521">"Карта"</string>
-    <string name="contextmenu_sharelink" msgid="8670940060477758709">"Шилтеме бөлүшүү"</string>
-    <string name="contextmenu_help" msgid="4209674157707873384">"Жардам"</string>
-    <string name="contextmenu_feedback" msgid="8319100902136337085">"Жооп иретинде пикир жөнөтүү"</string>
-    <!-- no translation found for num_selected (7990204488812654380) -->
-    <skip />
-  <plurals name="move_conversation">
-    <item quantity="one" msgid="237882018518207244">"Маекти жылдыруу"</item>
-    <item quantity="other" msgid="6639576653114141743">"<xliff:g id="ID_1">%1$d</xliff:g> маекти жылдыруу"</item>
-  </plurals>
-    <string name="content_description" msgid="854320355052962069">"<xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g> <xliff:g id="SUBJECT">%3$s</xliff:g>, <xliff:g id="SNIPPET">%4$s</xliff:g> тууралуу <xliff:g id="DATE">%5$s</xliff:g>, күнү <xliff:g id="READSTATE">%6$s</xliff:g>"</string>
-    <string name="content_description_today" msgid="1634422834354116955">"<xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g> <xliff:g id="SUBJECT">%3$s</xliff:g>, <xliff:g id="SNIPPET">%4$s</xliff:g> тууралуу саат <xliff:g id="TIME">%5$s</xliff:g>, <xliff:g id="READSTATE">%6$s</xliff:g>"</string>
-    <string name="read_string" msgid="5495929677508576520">"маек окулган"</string>
-    <string name="unread_string" msgid="7342558841698083381">"маек окула элек"</string>
-    <string name="filtered_tag" msgid="721666921386074505">"[<xliff:g id="TAG">%1$s</xliff:g>]<xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="badge_and_subject" msgid="3979372269373936750">"<xliff:g id="ID_1">%1$s</xliff:g> <xliff:g id="ID_2">%2$s</xliff:g>"</string>
-  <plurals name="draft">
-    <item quantity="one" msgid="6717535677167943402">"Сомо"</item>
-    <item quantity="other" msgid="1335781147509740039">"Сомолор"</item>
-  </plurals>
-    <string name="sending" msgid="5600034886763930499">"Жөнөтүлүүдө…"</string>
-    <string name="message_retrying" msgid="5335188121407261331">"Дагы аракет жасалууда…"</string>
-    <string name="message_failed" msgid="7887650587384601790">"Ишке ашкан жок"</string>
-    <string name="send_failed" msgid="2186285547449865010">"Билдирүү жөнөтүлгөн жок."</string>
-    <string name="me_object_pronoun" msgid="4674452244417913816">"өзүмө"</string>
-    <string name="me_subject_pronoun" msgid="7479328865714008288">"өзүмө"</string>
-  <plurals name="confirm_delete_conversation">
-    <item quantity="one" msgid="7605755011865575440">"Бул маек жок кылынсынбы?"</item>
-    <item quantity="other" msgid="1585660381208712562">"Бул <xliff:g id="COUNT">%1$d</xliff:g> маек жок кылынсынбы?"</item>
-  </plurals>
-  <plurals name="confirm_archive_conversation">
-    <item quantity="one" msgid="9105551557653306945">"Бул маек архивделсинби?"</item>
-    <item quantity="other" msgid="2001972798185641108">"Бул <xliff:g id="COUNT">%1$d</xliff:g> маек архивделсинби?"</item>
-  </plurals>
-  <plurals name="confirm_discard_drafts_conversation">
-    <item quantity="one" msgid="2030421499893210789">"Бул билдирүү жарактан чыгарылсынбы?"</item>
-    <item quantity="other" msgid="782234447471532005">"Бул <xliff:g id="COUNT">%1$d</xliff:g> билдирүү жарактан чыгарылсынбы?"</item>
-  </plurals>
-    <string name="confirm_discard_text" msgid="5172680524418848519">"Бул билдирүү жарактан чыгарылсынбы?"</string>
-    <string name="loading_conversations" msgid="7255732786298655246">"Жүктөлүүдө…"</string>
-    <string name="empty_inbox" msgid="5901734942362315228">"Бардык каттарды карап чыктыңыз. Күнүңүз көңүлдүү өтсүн!"</string>
-    <string name="empty_search" msgid="8564899353449880818">"Кап! \"<xliff:g id="SEARCH_QUERY">%1$s</xliff:g>\" боюнча эч нерсе табылган жок."</string>
-    <string name="empty_spam_folder" msgid="3288985543286122800">"Баракелде, бул жерде эми бир дагы спам жок!"</string>
-    <string name="empty_trash_folder" msgid="378119063015945020">"Бул жакта эми бир дагы таштанды жок. Кайра иштеткендигиңиз үчүн чоң рахмат!"</string>
-    <string name="empty_folder" msgid="3227552635613553855">"Бул жерде кат жок."</string>
-    <string name="getting_messages" msgid="8403333791332403244">"Билдирүүлөрүңүз алынууда"</string>
-    <string name="undo" msgid="8256285267701059609">"Артка кайтар"</string>
-  <plurals name="conversation_unstarred">
-    <item quantity="one" msgid="839233699150563831">"<xliff:g id="COUNT">%1$d</xliff:g> маектин жылдызчасы алынууда."</item>
-    <item quantity="other" msgid="7677305734833709789">"<xliff:g id="COUNT">%1$d</xliff:g> маектин жылдызчалары алынууда."</item>
-  </plurals>
-  <plurals name="conversation_muted">
-    <item quantity="one" msgid="3339638225564408438">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; үнү басылды."</item>
-    <item quantity="other" msgid="4276111931404654219">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; үнү басылды."</item>
-  </plurals>
-  <plurals name="conversation_spammed">
-    <item quantity="one" msgid="6986172030710967687">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; спам деп кабарланды."</item>
-    <item quantity="other" msgid="5900913789259199137">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; спам деп кабарланды."</item>
-  </plurals>
-  <plurals name="conversation_not_spam">
-    <item quantity="one" msgid="2294904093653094150">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; спам эмес деп кабарланды."</item>
-    <item quantity="other" msgid="4966164423991098144">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; спам эмес деп кабарланды."</item>
-  </plurals>
-  <plurals name="conversation_not_important">
-    <item quantity="one" msgid="3824809189993339030">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; маанилүү эмес деп белгиленди."</item>
-    <item quantity="other" msgid="1215472798075869124">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; маанилүү эмес деп белгиленди."</item>
-  </plurals>
-  <plurals name="conversation_phished">
-    <item quantity="one" msgid="4330095881258771201">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; фишинг деп кабарланды."</item>
-    <item quantity="other" msgid="9218674052779504277">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; фишинг деп кабарланды."</item>
-  </plurals>
-  <plurals name="conversation_archived">
-    <item quantity="one" msgid="4127890884907503696">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; архивделди."</item>
-    <item quantity="other" msgid="7789480176789922968">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; архивделди."</item>
-  </plurals>
-  <plurals name="conversation_deleted">
-    <item quantity="one" msgid="5591889079235938982">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; жок кылынды."</item>
-    <item quantity="other" msgid="7060256058737892078">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; жок кылынды."</item>
-  </plurals>
-    <string name="deleted" msgid="7378013910782008375">"Жок кылынды"</string>
-    <string name="archived" msgid="6283673603512713022">"Архивделди"</string>
-    <string name="folder_removed" msgid="5656281444688183676">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> ичинен алынып салынды"</string>
-  <plurals name="conversation_folder_changed">
-    <item quantity="one" msgid="6463727361987396734">"Өзгөртүлгөн папка."</item>
-    <item quantity="other" msgid="8815390494333090939">"Өзгөртүлгөн папкалар."</item>
-  </plurals>
-    <string name="conversation_folder_moved" msgid="6475872337373081683">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> жылдырылды"</string>
-    <string name="search_results_header" msgid="1529438451150580188">"Натыйжалар"</string>
-    <string name="search_unsupported" msgid="2873920566477359177">"Бул каттоо эсебинде издөөгө болбойт."</string>
-    <string name="add_label" msgid="3285338046038610902">"Папка кошуу"</string>
-    <string name="new_incoming_messages_one" msgid="5933087567495998661">"<xliff:g id="SENDER">%s</xliff:g> жаңы билдирүүсүн көрсөтүү."</string>
-  <plurals name="new_incoming_messages_many">
-    <item quantity="other" msgid="4394042684501388790">"<xliff:g id="COUNT">%1$d</xliff:g> жаңы билдирүүнү көрсөтүү."</item>
-  </plurals>
-    <string name="date_and_view_details" msgid="2952994746916149969">"<xliff:g id="DATE">%1$s</xliff:g> &lt;a href=\'http://www.example.com\'&gt;Чоо-жайын карап көрүү&lt;/a&gt;"</string>
-    <string name="hide_details" msgid="8018801050702453314">"Чоо-жайларды жашыруу"</string>
-    <string name="to_message_header" msgid="3954385178027011919">"кимге <xliff:g id="RECIPIENTS">%1$s</xliff:g>"</string>
-    <string name="contact_info_string" msgid="6484930184867405276">"<xliff:g id="NAME">%1$s</xliff:g> байланышынын маалыматы көрсөтүлсүн"</string>
-    <string name="contact_info_string_default" msgid="6204228921864816351">"Байланыштын маалыматы көрсөтүлсүн"</string>
-  <plurals name="show_messages_read">
-    <item quantity="other" msgid="5285673397387128129">"<xliff:g id="COUNT">%1$d</xliff:g> мурунку билдирүү"</item>
-  </plurals>
-    <string name="from_heading" msgid="48290556829713090">"Кимден:"</string>
-    <string name="replyto_heading" msgid="8275255318292059079">"Төмөнкүгө жооп:"</string>
-    <string name="to_heading" msgid="3495203282540398336">"Кимге: "</string>
-    <string name="to_heading_no_space" msgid="679167047628308670">"Кимге:"</string>
-    <string name="cc_heading" msgid="5603892257866345823">"Көчүрмө:"</string>
-    <string name="bcc_heading" msgid="1482186590756218269">"Жашр.кчрм:"</string>
-    <string name="date_heading" msgid="4213063948406397168">"Күнү:"</string>
-    <string name="show_images" msgid="436044894053204084">"Сүрөттөрдү көрсөтүү"</string>
-    <string name="always_show_images" msgid="556087529413707819">"Бул жөнөтүүчүнүн сүрөт. дайым көрсөтүлс."</string>
-    <string name="always_show_images_toast" msgid="3763157294047555051">"Бул жөнөтүүчүдөн келген сүрөттөр автоматтык түрдө көрсөтүлөт."</string>
-    <string name="address_display_format" msgid="2098008376913966177">"<xliff:g id="NAME">%1$s</xliff:g> <xliff:g id="EMAIL">%2$s</xliff:g>"</string>
-    <string name="address_display_format_with_via_domain" msgid="8108294635074750048">"<xliff:g id="VIA_DOMAIN">%3$s</xliff:g> аркылуу <xliff:g id="NAME">%1$s</xliff:g> <xliff:g id="EMAIL">%2$s</xliff:g>"</string>
-    <string name="message_saved" msgid="3291655042310241793">"Билдирүү сомо катары сакталды."</string>
-    <string name="sending_message" msgid="2487846954946637084">"Билдирүү жөнөтүлүүдө…"</string>
-    <string name="invalid_recipient" msgid="9157434699389936584">"Дарек <xliff:g id="WRONGEMAIL">%s</xliff:g> жараксыз."</string>
-    <string name="show_elided" msgid="3456154624105704327">"Цитата текстин көрсөтүү"</string>
-    <string name="hide_elided" msgid="5768235486834692733">"▼ Цитата текстин жашыруу"</string>
-    <string name="message_invite_title" msgid="5985161025144867256">"Жылнаама чакыруусу"</string>
-    <string name="message_invite_calendar_view" msgid="9181966650840809197">"Жылнаамадан көрүү"</string>
-    <string name="message_invite_label_attending" msgid="4194264767870003397">"Барасызбы?"</string>
-    <string name="message_invite_accept" msgid="8002758842580134835">"Ооба"</string>
-    <string name="message_invite_tentative" msgid="3199418731566655887">"Мүмкүн"</string>
-    <string name="message_invite_decline" msgid="6331040872447290777">"Жок"</string>
-    <string name="enumeration_comma" msgid="2848850136844740850">", "</string>
-    <string name="send_anyway" msgid="2727576121007079643">"Баары бир жөнөтүү"</string>
-    <string name="ok" msgid="6178802457914802336">"OK"</string>
-    <string name="done" msgid="344354738335270292">"Аткарылды"</string>
-    <string name="cancel" msgid="4831678293149626190">"Жокко чгр."</string>
-    <string name="clear" msgid="765949970989448022">"Тазалоо"</string>
-    <string name="next" msgid="2662478712866255138">"Кийинки"</string>
-    <string name="previous" msgid="8985379053279804274">"Мурунку"</string>
-  <string-array name="sync_status">
-    <item msgid="4600303222943450797">"Ийгиликтүү"</item>
-    <item msgid="2972425114100316260">"Туташкан жок."</item>
-    <item msgid="8594593386776437871">"Кирген жок."</item>
-    <item msgid="1375193906551623606">"Коопсуздук катасы."</item>
-    <item msgid="195177374927979967">"Шайкештештирилген жок."</item>
-    <item msgid="8026148967150231130">"Ички ката"</item>
-    <item msgid="5442620760791553027">"Сервер катасы"</item>
-  </string-array>
-    <string name="tap_to_configure" msgid="137172348280050643">"Орнотуу үчүн тийип коюңуз"</string>
-    <string name="non_synced_folder_description" msgid="3044618511909304701">"Маектерди көрүү үчүн, бул папканы шайкештештириңиз."</string>
-    <string name="tap_to_configure_folder_sync" msgid="3280434399275638071">"Папканы шайкештештирүү"</string>
-    <string name="widget_large_unread_count" msgid="8699435859096455837">"%d+"</string>
-    <string name="large_unseen_count" msgid="3055042669246912518">"<xliff:g id="COUNT">%d</xliff:g>+ жаңы"</string>
-    <string name="unseen_count" msgid="5509898665569695288">"<xliff:g id="COUNT">%d</xliff:g> жаңы"</string>
-  <plurals name="actionbar_unread_messages">
-    <item quantity="other" msgid="3863201473731766006">"<xliff:g id="COUNT">%1$d</xliff:g> окула элек"</item>
-  </plurals>
-    <string name="actionbar_large_unread_count" msgid="753635978542372792">"<xliff:g id="COUNT">%1$d</xliff:g>+ окула элек"</string>
-    <string name="view_more_conversations" msgid="8377920000247101901">"Көбүрөөк маектерди көрүү"</string>
-    <string name="loading_conversation" msgid="7931600025861500397">"Жүктөлүүдө…"</string>
-    <string name="activity_mailbox_selection" msgid="7489813868539767701">"Каттоо эсебин тандоо"</string>
-    <string name="activity_folder_selection" msgid="8375243281001234750">"Папка тандоо"</string>
-    <string name="folder_shortcut_widget_label" msgid="6466292659577092915">"Электрондук почта папкасы"</string>
-    <string name="change_folders_selection_dialog_title" msgid="9174464298613273814">"Папкаларды өзгөртүү"</string>
-    <string name="move_to_selection_dialog_title" msgid="4052506464467083621">"Төмөнкүгө жылдыруу"</string>
-    <string name="search_hint" msgid="4916671414132334289">"Кат издөө"</string>
-    <!-- no translation found for search_results_loaded (1784879343458807514) -->
-    <skip />
-    <string name="network_error" msgid="5931164247644972255">"Туташкан жок"</string>
-    <string name="retry" msgid="916102442074217293">"Дагы аракет кылуу"</string>
-    <string name="load_more" msgid="8702691358453560575">"Дагы жүктөө"</string>
-    <!-- no translation found for load_attachment (3894318473827290350) -->
-    <skip />
-    <string name="shortcut_name_title" msgid="1562534040126088628">"Папканын кыска жолуна ат берүү"</string>
-    <string name="wait_for_sync_title" msgid="4577632826912823075">"Шайкештештирүү күтүлүүдө"</string>
-    <string name="not_synced_title" msgid="3600180500934086346">"Каттоо эсеби шайкештештирилген жок"</string>
-    <string name="wait_for_manual_sync_body" msgid="2823149409451003378">"Бул каттоо эсебин автоматтык түрдө шайкештештирүү мүмкүн эмес. Почтаны бир жолу шайкештештирүү үчүн \nАзыр шайкештештирүүгө "<b>"тийип коюңуз"</b>" же бул каттоо эсебин почта менен автоматтык түрдө шайкештештирүү үчүн "<b>"Шайкештештирүү жөндөөлөрүн өзгөртүүгө"</b>" тийип коюңуз."</string>
-    <string name="manual_sync" msgid="2271479734895537848">"Азыр шайкштр"</string>
-    <string name="change_sync_settings" msgid="3615852118397055361">"Шайкештешт. жөндөөлрн өзгөртүү"</string>
-    <string name="photo_load_failed" msgid="577471721679146999">"Сүрөт жүктөлгөн жок"</string>
-    <string name="cant_move_or_change_labels" msgid="4155490583610926755">"Тандалган нерседе бир нече каттоо эсептери камтылгандыктан, жылдыруу мүмкүн эмес."</string>
-    <string name="multiple_new_message_notification_item" msgid="1386588046275174918"><b>"<xliff:g id="SENDER">%1$s</xliff:g>"</b>"   <xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="single_new_message_notification_big_text" msgid="2170154732664242904">"<xliff:g id="SUBJECT">%1$s</xliff:g>\n<xliff:g id="SNIPPET">%2$s</xliff:g>"</string>
-    <string name="ignore_spam_warning" msgid="8760314545535838430">"Коркпо, бул ишеничтүү билдирүү"</string>
-    <string name="via_domain" msgid="537951148511529082">"<xliff:g id="VIADOMAIN">%1$s</xliff:g> аркылуу"</string>
-    <string name="signin" msgid="4699091478139791244">"Кирүү"</string>
-    <string name="info" msgid="1357564480946178121">"Маалымат"</string>
-    <string name="report" msgid="4318141326014579036">"Отчет"</string>
-    <string name="sync_error" msgid="1795794969006241678">"Шайкештештирилген жок."</string>
-    <string name="sync_error_message" msgid="4182644657243736635">"Шайкештештирүү үчүн түзмөгүңүздүн сактоо мейкиндиги жетишсиз."</string>
-    <string name="storage" msgid="4783683938444150638">"Сактагыч"</string>
-    <string name="senders_split_token" msgid="6549228851819460081">", "</string>
-    <string name="draft_count_format" msgid="9122583199850209286">" (<xliff:g id="COUNT">%1$s</xliff:g>)"</string>
-    <string name="all_folders_heading" msgid="9023770187629170967">"Бардык папкалар"</string>
-    <string name="recent_folders_heading" msgid="8943134955788867702">"Акыркы папкалар"</string>
-    <string name="message_details_title" msgid="60771875776494764">"Билдирүүнүн чоо-жайы"</string>
-    <string name="preference_advance_to_title" msgid="6385669491239514630">"Авто-өркүндөтүү"</string>
-  <string-array name="prefEntries_autoAdvance">
-    <item msgid="1505450878799459652">"Жаңыраак"</item>
-    <item msgid="8000986144872247139">"Эскирээк"</item>
-    <item msgid="8015001161633421314">"Маек тизмеси"</item>
-  </string-array>
-  <string-array name="prefSummaries_autoAdvance">
-    <item msgid="8221665977497655719">"Жок кылуудан кийин акыркы маек көрсөтүлсүн"</item>
-    <item msgid="1721869262893378141">"Жок кылуудан кийин мурунку маек көрсөтүлсүн"</item>
-    <item msgid="880913657385630195">"Жок кылуудан кийин маектер тизмеси көрсөтүлсүн"</item>
-  </string-array>
-    <string name="prefDialogTitle_autoAdvance" msgid="5459235590885640678">"Төмөнкүгө өркүндөтүү"</string>
-    <string name="clear_display_images_whitelist_title" msgid="2012677202404471778">"Сүрөт уруксаттарын тазалоо"</string>
-    <string name="clear_display_images_whitelist_dialog_title" msgid="1942692501166848471">"Сүрөт уруксаттары тазалансынбы?"</string>
-    <string name="clear_display_images_whitelist_dialog_message" msgid="3952553078559373729">"Уруксат берилген жөнөтүүчүлөрдөн келген саптын ичиндеги сүрөттөр мындан ары чагылдырылбасын."</string>
-    <string name="sender_whitelist_cleared" msgid="2490984995927904030">"Сүрөттөр автоматтык түрдө көрсөтүлбөйт."</string>
-    <string name="preferences_signature_title" msgid="2318034745474929902">"Колтамга"</string>
-    <string name="preferences_signature_dialog_title" msgid="4801741764511807064">"Колтамга"</string>
-    <string name="preferences_signature_summary_not_set" msgid="3776614319388053784">"Коюлган эмес"</string>
-    <string name="notification_action_reply" msgid="8378725460102575919">"Жооп берүү"</string>
-    <string name="notification_action_reply_all" msgid="5693469099941000037">"Баарына жооп берүү"</string>
-    <string name="notification_action_archive" msgid="2884874164831039047">"Архивдөө"</string>
-    <string name="notification_action_remove_label" msgid="3714785653186750981">"Белгини алып салуу"</string>
-    <string name="notification_action_delete" msgid="3201627482564624132">"Жок кылуу"</string>
-    <string name="notification_action_undo_archive" msgid="600186958134073582">"Архивделди"</string>
-    <string name="notification_action_undo_remove_label" msgid="8341924850540100690">"Белги алынып салынды"</string>
-    <string name="notification_action_undo_delete" msgid="6915612337413587103">"Өчүрүлдү"</string>
-    <string name="veiled_address" msgid="2670378260196977266"></string>
-    <string name="veiled_alternate_text" msgid="6343564357099807582"></string>
-    <string name="veiled_alternate_text_unknown_person" msgid="6728323554307952217"></string>
-    <string name="veiled_summary_unknown_person" msgid="2122359944161241551"></string>
-    <string name="label_notification_ticker" msgid="323232821061341014">"<xliff:g id="LABEL">%s</xliff:g>: <xliff:g id="NOTIFICATION">%s</xliff:g>"</string>
-  <plurals name="new_messages">
-    <item quantity="one" msgid="3446656407520493241">"<xliff:g id="COUNT">%1$d</xliff:g> жаңы билдирүү"</item>
-    <item quantity="other" msgid="3531683811183204615">"<xliff:g id="COUNT">%1$d</xliff:g> жаңы билдирүү"</item>
-  </plurals>
-    <string name="single_new_message_notification_title" msgid="7954710563222504868">"<xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="silent_ringtone" msgid="1570794756474381886">"Үнсүз"</string>
-    <string name="preference_removal_action_title" msgid="4703834472477137634">"Архивдөө &amp; аракеттерди жок кылуу"</string>
-  <string-array name="prefEntries_removal_action">
-    <item msgid="954772302016538814">"Архивдөө гана көрсөтүлсүн"</item>
-    <item msgid="7212690302706180254">"Жок кылуу гана көрсөтүлсүн"</item>
-    <item msgid="2539051197590685708">"Архивдөө же жок кылуу көрсөтүлсүн"</item>
-  </string-array>
-  <string-array name="prefSummaries_removal_action_summary">
-    <item msgid="6877416142040695022">"Архив гана көрсөтүлсүн"</item>
-    <item msgid="1510017057984222376">"Жок кылуу гана көрсөтүлсүн"</item>
-    <item msgid="3196207224108008441">"Архивдөө же жок кылуу көрсөтүлсүн"</item>
-  </string-array>
-    <string name="prefDialogTitle_removal_action" msgid="266548424110393246">"Архивдөө &amp; аракеттерди жок кылуу"</string>
-    <string name="preferences_default_reply_all_title" msgid="7255858488369635327">"Баарына жооп берүү"</string>
-    <string name="preferences_default_reply_all_summary_impl" msgid="895581085692979709">"Билдирүү жооптору үчүн демейки катары колдонуу"</string>
-    <string name="preference_swipe_title_archive" msgid="9122333537761282714">"Архивдөө үчүн серпип коюңуз"</string>
-    <string name="preference_swipe_title_delete" msgid="4860474024917543711">"Жок кылуу үчүн серпип коюңуз"</string>
-    <string name="preference_swipe_description" msgid="3036560323237015010">"Маектер тизмесинде"</string>
-    <string name="preference_sender_image_title" msgid="7890813537985591865">"Жөнөтүүчүнүн сүрөтү"</string>
-    <string name="preference_sender_image_description" msgid="3586817690132199889">"Маектешүү тизмесинин жанында маектешүүчүлөрдүн ысымын көрсөтүү"</string>
-    <string name="empty_trash" msgid="3385937024924728399">"Таштандылар кутусун бошотуу"</string>
-    <string name="empty_spam" msgid="2911988289997281371">"Спамды бошотуу"</string>
-    <string name="empty_trash_dialog_title" msgid="2104898489663621508">"Таштандылар кутусу бошотулсунбу?"</string>
-    <string name="empty_spam_dialog_title" msgid="1130319045917820569">"Спам бошотулсунбу?"</string>
-  <plurals name="empty_folder_dialog_message">
-    <item quantity="one" msgid="3315412388217832914">"<xliff:g id="COUNT">%1$d</xliff:g> билдирүү биротоло жок кылынат."</item>
-    <item quantity="other" msgid="263840304486020101">"<xliff:g id="COUNT">%1$d</xliff:g> билдирүү биротоло жок кылынат."</item>
-  </plurals>
-    <string name="drawer_open" msgid="2285557278907103851">"Навигация суурмасын ачуу"</string>
-    <string name="drawer_close" msgid="2065829742127544297">"Навигация суурмасын жабуу"</string>
-    <string name="conversation_photo_welcome_text" msgid="836483155429003787">"Ал маекти тандоо үчүн жөнөтүүчүнүн сүрөтүнө тийип коюңуз."</string>
-    <string name="long_press_to_select_tip" msgid="1660881999120625177">"Бир маекти тандоо үчүн коё бербей &amp; басып туруңуз, андан соң көбүрөөк маекти тандоо үчүн жөн гана тийип коюңуз."</string>
-    <string name="folder_icon_desc" msgid="6272938864914794739">"Папка сүрөтчөсү"</string>
-    <string name="add_account" msgid="5905863370226612377">"Каттоо эсебин кошуу"</string>
-    <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Кеңешти этибарга албоо"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Авто-шайкештештирүү өчүрүлгөн."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Күйгүзүү үчүн тийип коюңуз."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Каттоо эсебинин шайкештештирилүүсү өчүрүлгөн."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"<xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g> ичинен күйгүзүү."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Каттоо эсебинин жөндөөлөрү"</string>
-    <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="OUTBOX">%2$s</xliff:g> ичинен <xliff:g id="NUMBER">%1$s</xliff:g> жөнөтүлө элек"</string>
-    <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Авто-шайкештештирүү күйгүзүлсүнбү?"</string>
-    <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Gmail\'де гана эмес, бардык колдонмолордо жана каттоо эсептеринде жасалган өзгөртүүлөр желе, башка түзмөктөр жана сиздин <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g> ортолорунда шайкештештирилет."</string>
-    <string name="phone" msgid="4142617042507912053">"телефон"</string>
-    <string name="tablet" msgid="4593581125469224791">"планшет"</string>
-    <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="7239160845196929866">"Күйгүзүү"</string>
-    <string name="show_n_more_folders" msgid="5769610839632786654">"Дагы <xliff:g id="NUMBER">%1$s</xliff:g> папка көрсөтүлсүн"</string>
-    <string name="hide_folders" msgid="7618891933409521283">"Папкаларды жашыруу"</string>
-    <string name="print" msgid="7987949243936577207">"Басып чыгаруу"</string>
-    <string name="print_all" msgid="4011022762279519941">"Баарын басып чыгаруу"</string>
-  <plurals name="num_messages">
-    <item quantity="one" msgid="8071234386915191851">"<xliff:g id="COUNT">%1$d</xliff:g> билдирүү"</item>
-    <item quantity="other" msgid="962415099931188360">"<xliff:g id="COUNT">%1$d</xliff:g> билдирүү"</item>
-  </plurals>
-    <string name="date_message_received_print" msgid="4168417403884350040">"<xliff:g id="DAY_AND_DATE">%1$s</xliff:g> саат <xliff:g id="TIME">%2$s</xliff:g>"</string>
-    <string name="draft_to_heading" msgid="7370121943946205024">"Сомо кимге:"</string>
-    <string name="draft_heading" msgid="7032951343184552800">"Сомо"</string>
-    <string name="quoted_text_hidden_print" msgid="5256754205675159141">"Цитата тексти жашырылган"</string>
-  <plurals name="num_attachments">
-    <item quantity="one" msgid="5494465717267988888">"<xliff:g id="COUNT">%1$d</xliff:g> тиркеме"</item>
-    <item quantity="other" msgid="5422167728480739361">"<xliff:g id="COUNT">%1$d</xliff:g> тиркеме"</item>
-  </plurals>
-    <string name="no_subject" msgid="5622708348540036959">"(темасы жок)"</string>
-    <string name="vacation_responder" msgid="5570132559074523806">"Эс алуу учурундагы жооп бергич"</string>
-    <string name="preferences_vacation_responder_title" msgid="2268482117730576123">"Эс алуу учурундагы жооп бергич"</string>
-    <string name="vacation_responder_body_hint_text" msgid="9087613123105158494">"Билдирүү"</string>
-    <string name="send_to_contacts_text" msgid="124432913980620545">"Менин Байланыштарыма гана жөнөтүлсүн"</string>
-    <string name="send_to_domain_text" msgid="5064559546745918393">"<xliff:g id="DOMAIN">%1$s</xliff:g> гана жөнөтүлсүн"</string>
-    <string name="pick_start_date_title" msgid="2274665037355224165">"Башталат"</string>
-    <string name="pick_end_date_title" msgid="733396083649496600">"Аяктайт (Милдеттүү эмес)"</string>
-    <string name="date_not_set" msgid="3251555782945051904">"Коюлган эмес"</string>
-    <string name="set_end_date_dialog_title" msgid="7543009262788808443">"Аяктоо күнү (милдеттүү эмес)"</string>
-    <string name="custom_date" msgid="5794846334232367838">"Өзгөчөлөнгөн"</string>
-    <string name="date_none" msgid="1061426502665431412">"Эч нерсе жок"</string>
-    <string name="discard_changes" msgid="5699760550972324746">"Өзгөртүүлөр жарактан чыгарылсынбы?"</string>
-    <string name="vacation_responder_changes_saved" msgid="91448817268121249">"Эс алуу учурундагы жооп бергичтин өзгөрүүлөрү сакталды"</string>
-    <string name="vacation_responder_changes_discarded" msgid="21756037735539983">"Эс алуу учурундагы жооп бергичтин өзгөрүүлөрү жарактан чыгарылды"</string>
-    <string name="vacation_responder_off" msgid="4429909341193366667">"Өчүк"</string>
-    <string name="vacation_responder_on" msgid="4913238379320882449">"Күйүк, <xliff:g id="DATE">%1$s</xliff:g> баштап"</string>
-    <string name="vacation_responder_on_with_end_date" msgid="4360941815371475955">"Күйүк, <xliff:g id="START_DATE">%1$s</xliff:g> баштап <xliff:g id="END_DATE">%2$s</xliff:g> чейин"</string>
-    <string name="vacation_responder_empty_subject_and_body_warning" msgid="6233629618520852439">"Тема же билдирүү кошуңуз"</string>
-    <string name="view_entire_message" msgid="823281796655014454">"Билдирүүнү толугу менен көрүү"</string>
-    <string name="eml_loader_error_toast" msgid="6577383216635400167">"Бул файл ачылбай жатат"</string>
-    <string name="help_and_info" msgid="3708286489943154681">"Жардам"</string>
-    <string name="help_and_feedback" msgid="7211458338163287670">"Жардам &amp; жооп пикир"</string>
-    <string name="feedback" msgid="204247008751740034">"Жооп иретинде пикир жөнөтүү"</string>
-    <string name="copyright" msgid="3121335168340432582">"©<xliff:g id="YEAR">%1$d</xliff:g> Google Inc."</string>
-    <string name="version" msgid="1161745345056656547">"<xliff:g id="APP_NAME">%1$s</xliff:g> нускасы <xliff:g id="VERSION">%2$s</xliff:g>"</string>
-    <string name="view_app_page" msgid="3241990517052398927"></string>
-    <string name="print_dialog" msgid="8895536548487605661">"Басып чыгаруу…"</string>
-    <string name="copyright_information" msgid="971422874488783312">"Автордук укук маалыматы"</string>
-    <string name="privacy_policy" msgid="212094623396418302">"Купуялуулук саясаты"</string>
-    <string name="open_source_licenses" msgid="8643615555920977752">"Ачык программ. уруксттма"</string>
-    <string name="reply_choice_yes" msgid="3327633032975373220">"Ооба"</string>
-    <string name="reply_choice_no" msgid="7068775605915475207">"Жок"</string>
-    <string name="reply_choice_ok" msgid="7881073621845053152">"OK"</string>
-    <string name="reply_choice_hehe" msgid="6054314968043050748">"Хе-хе"</string>
-    <string name="reply_choice_thanks" msgid="4978961954288364694">"Рахмат"</string>
-    <string name="reply_choice_i_agree" msgid="2496652737796884298">"Туура"</string>
-    <string name="reply_choice_nice" msgid="4465894941302838676">"Сонун"</string>
-    <string name="reply_on_my_way" msgid="5645003971107444269">"Жолдомун"</string>
-    <string name="reply_choice_later" msgid="4629219072859486413">"Макул, бир аздан кийин кайрыл."</string>
-    <string name="reply_choice_smiling_face" msgid="1772253938506548631">":)"</string>
-    <string name="reply_choice_frowning_face" msgid="6260338807944002651">":("</string>
-    <string name="preference_header_action_confirmations" msgid="3922674681156121948">"Аракетти ырастоолор"</string>
-    <string name="preference_confirm_before_delete_title" msgid="7563587174619033835">"Жок кылуудан мурун ырастоо"</string>
-    <string name="preference_confirm_before_archive_title" msgid="7318645995655875718">"Архивдөөдөн мурун ырастоо"</string>
-    <string name="preference_confirm_before_send_title" msgid="4136585783513077039">"Жөнөтүүдөн мурун ырастоо"</string>
-    <string name="preferences_conversation_mode_title" msgid="389352009651720838">"Билдирүүлөрдү авто чактоо"</string>
-    <string name="preferences_conversation_mode_summary" msgid="5730999743867653106">"Билдирүүлөрдү экранга чактап кысуу"</string>
-    <string name="preferences_disable_snap_headers_title" msgid="7257824136988429629">"Билдирүү аракеттери"</string>
-  <string-array name="prefSummaries_snapHeader">
-    <item msgid="43373293784193461">"Билдирүү аракеттери ар дайым экрандын жогору жагында көрсөтүлсүн"</item>
-    <item msgid="1765271305989996747">"Тигинен көрүнүшкө айландырганда билдирүү аракеттери ар дайым экрандын жогору жагында көрсөтүлсүн."</item>
-    <item msgid="6311113076575333488">"Билдирүү аракеттери билдирүүнүн баш атынан тышкары аймакта көрсөтүлбөсүн"</item>
-  </string-array>
-  <string-array name="prefEntries_snapHeader">
-    <item msgid="6906986566816683587">"Ар дайым көрсөтүлсүн"</item>
-    <item msgid="113299655708990672">"Тигинен гана көрсөтүлсүн"</item>
-    <item msgid="4403750311175924065">"Көрсөтүлбөсүн"</item>
-  </string-array>
-    <string name="clear_history_title" msgid="5536216295725760357">"Издөөлөр таржымалын тазалап салуу"</string>
-    <string name="search_history_cleared" msgid="1461946302763342640">"Издөөлөр таржымалы тазаланды."</string>
-    <string name="clear_history_dialog_title" msgid="3503603389704365385">"Издөөлөр таржымалы тазалансынбы?"</string>
-    <string name="clear_history_dialog_message" msgid="5202922561632407778">"Буга чейинки аткарылган издөө аракеттериңиздин бардыгы алынып салынат."</string>
-    <string name="manage_accounts_menu_item" msgid="4734660452395086786">"Каттоо эсептерин башкаруу"</string>
-    <string name="general_preferences_title" msgid="4212138728220418162">"Жалпы жөндөөлөр"</string>
-    <string name="activity_preferences" msgid="8966077432517613292">"Жөндөөлөр"</string>
-</resources>
diff --git a/res/values-land/arrays.xml b/res/values-land/arrays.xml
deleted file mode 100644
index ee7a5ad..0000000
--- a/res/values-land/arrays.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2011 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<resources>
-    <integer-array name="senders_with_attachment_lengths">
-        <item>40</item>
-        <item>40</item>
-    </integer-array>
-    <integer-array name="senders_lengths">
-        <item>42</item>
-        <item>42</item>
-    </integer-array>
-</resources>
\ No newline at end of file
diff --git a/res/values-land/constants.xml b/res/values-land/constants.xml
new file mode 100644
index 0000000..546ff53
--- /dev/null
+++ b/res/values-land/constants.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <!-- Maximum width in characters of the senders in the thread list -->
+    <integer name="senders_with_attachment_lengths">40</integer>
+    <integer name="senders_lengths">42</integer>
+</resources>
\ No newline at end of file
diff --git a/res/values-land/menus.xml b/res/values-land/menus.xml
index 694e663..3e8e058 100644
--- a/res/values-land/menus.xml
+++ b/res/values-land/menus.xml
@@ -18,5 +18,5 @@
 
 <resources>
     <item name="message_header_overflow_menu" type="menu">
-        @menu/message_header_overflow_menu_land_or_tablet_v19</item>
+        @menu/message_header_overflow_menu_land_or_tablet</item>
 </resources>
\ No newline at end of file
diff --git a/res/values-ldrtl-sw600dp-port/styles.xml b/res/values-ldrtl-sw600dp-port/styles.xml
deleted file mode 100644
index b328aac..0000000
--- a/res/values-ldrtl-sw600dp-port/styles.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2014 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<resources>
-    <style name="TwoPaneConversationList">
-        <item name="android:paddingEnd">@dimen/two_pane_tl_side</item>
-        <item name="android:paddingTop">@dimen/two_pane_tl_top</item>
-    </style>
-</resources>
diff --git a/res/values-ldrtl-sw600dp/styles-ldrtl-sw600dp.xml b/res/values-ldrtl-sw600dp/styles-ldrtl-sw600dp.xml
deleted file mode 100644
index 33f30d4..0000000
--- a/res/values-ldrtl-sw600dp/styles-ldrtl-sw600dp.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <style name="VacationResponderStyle">
-        <item name="android:paddingStart">@dimen/vacation_responder_padding_horizontal_wide</item>
-        <item name="android:paddingEnd">@dimen/vacation_responder_padding_horizontal_wide</item>
-    </style>
-</resources>
\ No newline at end of file
diff --git a/res/values-ldrtl/styles-ldrtl.xml b/res/values-ldrtl/styles-ldrtl.xml
index a6b45b1..3886a49 100644
--- a/res/values-ldrtl/styles-ldrtl.xml
+++ b/res/values-ldrtl/styles-ldrtl.xml
@@ -17,11 +17,6 @@
 -->
 
 <resources>
-    <style name="DismissButtonStyle">
-        <item name="android:paddingStart">@dimen/dismiss_button_padding_start</item>
-        <item name="android:paddingEnd">@dimen/dismiss_button_padding_end</item>
-    </style>
-
     <style name="MessageDetailsHeaderStyle">
         <item name="android:paddingStart">@dimen/message_details_header_padding_start_expanded</item>
         <item name="android:paddingEnd">@dimen/message_details_header_padding_end</item>
@@ -50,10 +45,6 @@
         <item name="android:paddingEnd">@dimen/send_mail_as_padding</item>
     </style>
 
-    <style name="UndoTextStyle" parent="AbstractUndoTextStyle">
-        <item name="android:paddingEnd">@dimen/undo_text_padding</item>
-    </style>
-
     <style name="MessageHeaderIconStyle">
         <item name="android:layout_marginStart">@dimen/message_header_icon_additional_margin_start</item>
     </style>
@@ -63,9 +54,8 @@
         <item name="android:layout_marginEnd">@dimen/conversation_border_margin_side</item>
     </style>
 
-    <style name="NewMessageButtonStyle" parent="AbstractNewMessageButtonStyle">
-        <item name="android:layout_marginStart">@dimen/toast_bar_margin</item>
-        <item name="android:layout_marginEnd">@dimen/toast_bar_margin</item>
+    <style name="DrawerNavigationStyle">
+        <item name="android:nextFocusLeft">@+id/conversation_list_view</item>
     </style>
 
     <style name="FolderListItemStartStyle">
@@ -73,19 +63,19 @@
     </style>
 
     <style name="FolderListItemEndStyle">
-        <item name="android:layout_marginEnd">@dimen/folder_list_item_end_margin</item>
-        <item name="android:layout_alignParentEnd">true</item>
+        <item name="android:paddingEnd">@dimen/folder_list_item_end_margin</item>
     </style>
 
-    <style name="DrawerFooterListItemStyle">
-        <item name="android:paddingStart">@dimen/drawer_footer_text_padding_start</item>
+    <style name="FolderListItemStyleBase">
+        <item name="android:layout_marginStart">@dimen/folder_list_item_text_start_margin</item>
+        <item name="android:layout_marginEnd">@dimen/folder_list_item_end_margin</item>
     </style>
 
     <style name="DismissSeparatorStyle">
         <item name="android:layout_marginStart">@dimen/dismiss_separator_padding</item>
     </style>
 
-    <style name="TeaserTextStyle">
+    <style name="TeaserStartMargin">
         <item name="android:layout_marginStart">@dimen/teaser_text_padding</item>
     </style>
 
@@ -107,8 +97,8 @@
         <item name="android:layout_marginStart">@dimen/attachment_icon_padding</item>
     </style>
 
-    <style name="UndoNotificationStyle">
-        <item name="android:layout_marginStart">@android:dimen/notification_large_icon_width</item>
+    <style name="AttachmentThumbnail">
+        <item name="android:layout_marginStart">@dimen/attachment_item_padding_start</item>
     </style>
 
     <style name="UnreadCountWithMarginEndStyle" parent="UnreadCountRelativeLayout">
@@ -124,62 +114,8 @@
         <item name="android:paddingStart">@dimen/compose_attachment_text_padding</item>
     </style>
 
-    <style name="AccountItemIcon" parent="AbstractAccountItemIcon">
-        <item name="android:layout_alignParentStart">true</item>
-    </style>
-
-    <style name="AccountRadioButtonStyle">
-        <item name="android:layout_marginStart">@dimen/account_item_margin_start</item>
-    </style>
-
-    <style name="AccountUnreadCountStyle" parent="UnreadCountRelativeLayout">
-        <item name="android:layout_marginEnd">@dimen/account_item_margin_end</item>
-        <item name="android:layout_alignParentEnd">true</item>
-    </style>
-
-    <style name="VacationResponderStyle">
-        <item name="android:paddingStart">@dimen/vacation_responder_padding_horizontal</item>
-        <item name="android:paddingEnd">@dimen/vacation_responder_padding_horizontal</item>
-    </style>
-
-    <style name="VacationResponderLabelSmall" parent="AbstractVacationResponderLabelSmall">
-        <item name="android:paddingStart">@dimen/vacation_responder_inner_padding</item>
-        <item name="android:paddingEnd">@dimen/vacation_responder_inner_padding</item>
-    </style>
-
-    <style name="VactionResponderStartDateLabel" parent="VacationResponderLabelSmall">
-        <item name="android:layout_marginEnd">
-            @dimen/vacation_responder_padding_between_date_spinners</item>
-    </style>
-
-    <style name="VactionResponderEndDateLabel" parent="VacationResponderLabelSmall">
-        <item name="android:layout_marginStart">
-            @dimen/vacation_responder_padding_between_date_spinners</item>
-    </style>
-
-    <style name="VacationResponderDateSpinner" parent="AbstractVacationResponderDateSpinner">
-        <item name="android:paddingStart">@dimen/vacation_responder_inner_padding</item>
-        <item name="android:paddingEnd">@dimen/vacation_responder_inner_padding</item>
-    </style>
-
-    <style name="VactionResponderStartDateSpinner" parent="VacationResponderDateSpinner">
-        <item name="android:layout_marginEnd">
-            @dimen/vacation_responder_padding_between_date_spinners</item>
-    </style>
-
-    <style name="VactionResponderEndDateSpinner" parent="VacationResponderDateSpinner">
-        <item name="android:layout_marginStart">
-            @dimen/vacation_responder_padding_between_date_spinners</item>
-    </style>
-
-    <style name="VacationResponderCheckBox" parent="AbstractVacationResponderCheckBox">
-        <item name="android:paddingStart">@dimen/vacation_responder_inner_padding</item>
-        <item name="android:paddingEnd">@dimen/vacation_responder_inner_padding</item>
-    </style>
-
-    <style name="VacationResponderSwitch">
-        <item name="android:paddingStart">@dimen/vacation_responder_inner_padding</item>
-        <item name="android:paddingEnd">@dimen/vacation_responder_inner_padding</item>
+    <style name="VacationResponderDatePadding">
+        <item name="android:layout_marginEnd">@dimen/vacation_responder_padding_between_date_spinners</item>
     </style>
 
     <style name="MessageSenderNameStyle" parent="AbstractMessageSenderNameStyle">
@@ -188,16 +124,24 @@
 
     <style name="MessageHeaderSubtitleStyle" parent="AbstractMessageHeaderSubtitleStyle">
         <item name="android:layout_alignParentStart">true</item>
+        <item name="android:maxLines">1</item>
     </style>
 
-    <style name="FloatingActionButtonStyle" parent="AbstractFloatingActionButtonStyle">
-        <item name="android:layout_gravity">bottom|end</item>
-        <item name="android:layout_marginEnd">@dimen/floating_action_bar_margin</item>
+    <style name="FloatingActionButtonStyle" parent="FloatingActionButtonBackgroundStyle">
+        <item name="android:layout_marginEnd">@dimen/compose_button_margin_side</item>
     </style>
 
-    <style name="SnackBarActionTextStyle">
-        <item name="android:layout_gravity">end</item>
-        <item name="android:paddingEnd">@dimen/snack_bar_margin_horizontal</item>
+    <style name="SnackBarDescriptionTextStyle">
+        <item name="android:layout_marginStart">@dimen/snack_bar_margin_horizontal</item>
+    </style>
+
+    <style name="MiniDrawerFolderStyle" parent="@style/MiniDrawerFolderStyleBase">
+        <item name="android:scaleX">-1</item>
+    </style>
+
+    <style name="SingleFolderListIconStyle">
+        <item name="android:layout_marginStart">@dimen/single_folder_list_item_start_margin</item>
+        <item name="android:scaleX">-1</item>
     </style>
 
     <style name="FolderSelectionItemStyle" parent="AbstractFolderSelectionItemStyle">
@@ -208,6 +152,7 @@
     <style name="FolderListIconStyle">
         <item name="android:layout_marginStart">@dimen/folder_list_item_start_margin</item>
         <item name="android:layout_alignParentStart">true</item>
+        <item name="android:scaleX">-1</item>
     </style>
 
     <style name="MessageHeaderUpperDateStyle" parent="MessageHeaderSmallStyle">
@@ -215,10 +160,6 @@
         <item name="android:layout_marginStart">@dimen/attachment_icon_padding</item>
     </style>
 
-    <style name="FolderParentIconStyle">
-        <item name="android:layout_alignParentEnd">true</item>
-    </style>
-
     <style name="MessageAttachmentBarMarginEndStyle">
         <item name="android:layout_marginEnd">@dimen/message_attachment_bar_padding</item>
     </style>
@@ -231,6 +172,10 @@
         <item name="android:paddingEnd">@dimen/widget_attachment_padding_end</item>
     </style>
 
+    <style name="WidgetHeaderStartMargin">
+        <item name="android:paddingStart">16dp</item>
+    </style>
+
     <!-- START Conversation list styles -->
     <style name="ConversationListContactImageStyle">
         <item name="android:layout_marginEnd">@dimen/conv_list_contact_image_padding_end</item>
@@ -338,10 +283,14 @@
     <style name="ConversationListSpaciousStarStyle">
         <item name="android:layout_marginEnd">@dimen/conv_list_spacious_star_padding_end</item>
     </style>
+
+    <style name="ConversationListFooterLoadMoreStyle">
+        <item name="android:paddingStart">@dimen/conv_list_footer_load_more_padding</item>
+    </style>
     <!-- END Conversation list styles -->
 
-    <style name="SpinnerAccountAddressStyle" parent="ComposeFromTextViewStyle">
-        <item name="android:paddingStart">@dimen/custom_from_inner_padding</item>
+    <style name="SpinnerAccountNameStyle" parent="ComposeFromTextViewStyle">
+        <item name="android:paddingEnd">@dimen/custom_from_inner_padding</item>
     </style>
 
     <style name="AbstractComposeAreaWithRtl" parent="@style/AbstractComposeArea">
@@ -362,6 +311,10 @@
         <item name="android:layout_marginEnd">@dimen/compose_content_end_padding</item>
     </style>
 
+    <style name="ComposeHeadingPadding">
+        <item name="android:paddingEnd">@dimen/compose_header_padding</item>
+    </style>
+
     <style name="ComposeFieldButton" parent="@style/BaseComposeFieldButton">
         <item name="android:layout_marginStart">@dimen/compose_header_btn_padding</item>
     </style>
@@ -370,17 +323,8 @@
         <item name="android:layout_marginStart">@dimen/quoted_text_checkbox_margin_offset</item>
     </style>
 
-    <style name="FolderTeaserLabelMarginStyle">
-        <item name="android:layout_marginStart">@dimen/folder_teaser_label_start_padding</item>
-        <item name="android:layout_marginEnd">@dimen/folder_teaser_label_end_padding</item>
-    </style>
-
-    <style name="FolderTeaserMarginStartStyle">
-        <item name="android:layout_marginStart">@dimen/folder_teaser_start_padding</item>
-    </style>
-
-    <style name="FolderTeaserMarginEndStyle">
-        <item name="android:layout_marginEnd">@dimen/folder_teaser_end_padding</item>
+    <style name="FolderTeaserPaddingEndStyle">
+        <item name="android:paddingEnd">@dimen/folder_teaser_end_padding</item>
     </style>
 
     <style name="ArrowStyle">
@@ -392,13 +336,9 @@
         <item name="android:paddingStart">@dimen/undo_description_padding</item>
     </style>
 
-    <style name="UndoIconStyle">
-        <item name="android:paddingStart">@dimen/undo_icon_padding_start</item>
-        <item name="android:paddingEnd">@dimen/undo_icon_padding_end</item>
-    </style>
-
     <style name="AccountItemNameStyle">
         <item name="android:paddingStart">@dimen/account_item_name_start_padding</item>
         <item name="android:paddingEnd">@dimen/account_item_name_end_padding</item>
     </style>
+
 </resources>
diff --git a/res/values-lo-rLA-sw600dp/strings.xml b/res/values-lo-rLA-sw600dp/strings.xml
index 6bd7a0e..0ba9c16 100644
--- a/res/values-lo-rLA-sw600dp/strings.xml
+++ b/res/values-lo-rLA-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Cc/Bcc"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Bcc"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"ຈັດການໂຟນເດີ"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"ໃຊ້​ເປັນ​ຄ່າ​ເລີ່ມ​ຕົ້ນ​ໃນ​ການ​ຕອບ​ກັບ​ຫາ​ການ​ແຈ້ງ​ເຕືອນ​ຂໍ້​ຄວາມ"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ Cc/Bcc"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ Bcc"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"ຈັດການໂຟນເດີ"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"ໃຊ້ເປັນມາດຕະຖານໂຕຕອບກັບຂໍ້ຄວາມການແຈ້ງເຕືອນ"</string>
 </resources>
diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml
index 2a4f002..345aa10 100644
--- a/res/values-lo-rLA/strings.xml
+++ b/res/values-lo-rLA/strings.xml
@@ -27,7 +27,7 @@
     <string name="add_file_attachment" msgid="2604880054248593993">"ແນບ​ໄຟລ໌"</string>
     <string name="add_photo_attachment" msgid="7163589794940909528">"ແນບຮູບ"</string>
     <string name="save_draft" msgid="2669523480789672118">"ບັນ​ທຶກ​ສະ​ບັບ​ຮ່າງ"</string>
-    <string name="discard" msgid="4905982179911608430">"ປ່ອຍຖິ້ມ"</string>
+    <string name="discard" msgid="4905982179911608430">"​ຍົກ​ເລີກ"</string>
     <string name="compose" msgid="2602861958391035523">"ຂຽນອີເມວ"</string>
   <string-array name="compose_modes">
     <item msgid="9000553538766397816">"ຕອບກັບ"</item>
@@ -64,8 +64,8 @@
     <string name="mark_not_spam" msgid="8617774236231366651">"ລາຍງານວ່າບໍ່ແມ່ນສະແປມ"</string>
     <string name="report_phishing" msgid="8454666464488413739">"ລາຍງານຟິດຊິ່ງ"</string>
     <string name="delete" msgid="6784262386780496958">"ລຶບ"</string>
-    <string name="discard_drafts" msgid="5881484193628472105">"ຖິ້ມ​ສະບັບ​ຮ່າງ"</string>
-    <string name="discard_failed" msgid="7520780769812210279">"ການປ່ອຍຖິ້ມລົ້ມເຫລວ"</string>
+    <string name="discard_drafts" msgid="5881484193628472105">"ຍົກເລີກສະບັບຮ່າງ"</string>
+    <string name="discard_failed" msgid="7520780769812210279">"​ການຍົກ​ເລີກ​ລົ້ມ​ເຫຼວ"</string>
     <string name="refresh" msgid="1533748989749277511">"ໂຫຼດໃໝ່"</string>
     <string name="reply" msgid="8337757482824207118">"ຕອບກັບ"</string>
     <string name="reply_all" msgid="5366796103758360957">"ຕອບກັບທັງຫມົດ"</string>
@@ -160,10 +160,10 @@
     <item quantity="other" msgid="2001972798185641108">"ຈັດເກັບ <xliff:g id="COUNT">%1$d</xliff:g> ການສົນທະນານີ້?"</item>
   </plurals>
   <plurals name="confirm_discard_drafts_conversation">
-    <item quantity="one" msgid="2030421499893210789">"ຖິ້ມ​ອີ​ເມວ​ນີ້ບໍ່?"</item>
-    <item quantity="other" msgid="782234447471532005">"ຖິ້ມ​ອີ​ເມວ <xliff:g id="COUNT">%1$d</xliff:g> ສະ​ບັບ​ນີ້​ບໍ່?"</item>
+    <item quantity="one" msgid="2030421499893210789">"​ຍົກ​ເລີກ​​ອີ​ເມວ​ນີ້ບໍ່?"</item>
+    <item quantity="other" msgid="782234447471532005">"​ຍົກ​ເລີກ​ອີ​ເມວ <xliff:g id="COUNT">%1$d</xliff:g> ສະ​ບັບ​ນີ້?"</item>
   </plurals>
-    <string name="confirm_discard_text" msgid="5172680524418848519">"ຖິ້ມ​​​ອີ​ເມວ​ນີ້​ບໍ?"</string>
+    <string name="confirm_discard_text" msgid="5172680524418848519">"​ຍົກ​ເລີກ​​ອີ​ເມວ​ນີ້ບໍ່?"</string>
     <string name="loading_conversations" msgid="7255732786298655246">"ກຳລັງໂຫລດ…"</string>
     <string name="empty_inbox" msgid="5901734942362315228">"ທ່ານອ່ານອີເມວໝົດແລ້ວ! ຂໍໃຫ້ມີຄວາມສຸກກັບມື້​ນີ້​ຂອງ​ທ່ານ."</string>
     <string name="empty_search" msgid="8564899353449880818">"ອຸຍ! ພວກ​ເຮົາ​ບໍ່​ສາ​ມາດ​ຊອກ​ຫາຂໍ້​ມູນ​ກ່ຽວ​ກັ​ບ \"<xliff:g id="SEARCH_QUERY">%1$s</xliff:g>\" ໄດ້."</string>
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"ໄອຄອນໂຟນເດີ"</string>
     <string name="add_account" msgid="5905863370226612377">"ເພີ່ມບັນຊີ"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"ປິດຄຳແນະນຳ"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"ການ​ຊິ້ງຂໍ້ມູນ​ອັດຕະໂນ​ມັດ​ຖືກປິດ."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"ແຕະເພື່ອເປີດໃຊ້."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"ການຊິ້ງຂໍ້ມູນບັນຊີຖືກປິດ."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"ເປີດໃຊ້ໃນ <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"ການຕັ້ງຄ່າບັນຊີ"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> ອີເມວທີ່ຍັງບໍ່ໄດ້ສົ່ງໃນ <xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"ປິດການຊິ້ງຂໍ້ມູນອັດຕະໂນມັດ?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"ການປ່ຽນແປງ​ທີ່ທ່ານເຮັດໃນທຸກແອັບຯ ແລະທຸກບັນຊີ​ບໍ່ສະເພາະພຽງແຕ່ Gmail ຈະໄດ້ຮັບການຊິ້ງຂໍ້ມູນ​ລະຫວ່າງເວັບໄຊ ແລະອຸປະກອນ​ອື່ນໆຂອງທ່ານ ຮວມທັງ <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g> ຂອງທ່ານນຳ."</string>
@@ -426,7 +421,7 @@
     <string name="set_end_date_dialog_title" msgid="7543009262788808443">"ມື້ສ​ິ້ນ​ສຸດ (ເປັນທາງເລືອກ)"</string>
     <string name="custom_date" msgid="5794846334232367838">"ກຳນົດເອງ"</string>
     <string name="date_none" msgid="1061426502665431412">"ບໍ່​ມີ"</string>
-    <string name="discard_changes" msgid="5699760550972324746">"ຖິ້ມ​ການ​ແກ້ໄຂ​ບໍ່?"</string>
+    <string name="discard_changes" msgid="5699760550972324746">"ຍົກເລີກການແກ້ໄຂບໍ່?"</string>
     <string name="vacation_responder_changes_saved" msgid="91448817268121249">"ການປ່ຽນແປງຂອງ​ການຕອບຂໍ້ຄວາມ​ລາພັກໄດ້ຖືກບັນທຶກແລ້ວ"</string>
     <string name="vacation_responder_changes_discarded" msgid="21756037735539983">"ການປ່ຽນແປງຂອງ​ການຕອບ​ຂໍ້ຄວາມ​ລາພັກຖືກຍົກເລີກແລ້ວ"</string>
     <string name="vacation_responder_off" msgid="4429909341193366667">"ປິດ"</string>
diff --git a/res/values-lt-sw600dp/strings.xml b/res/values-lt-sw600dp/strings.xml
index 7e04760..befd87d 100644
--- a/res/values-lt-sw600dp/strings.xml
+++ b/res/values-lt-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ kop. / nemat. kop."</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ nematomoji kopija"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Tvarkyti aplankus"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Naudoti kaip numatytąjį atsakant į pranešimus"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ kop. / nemat. kop."</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ nematomoji kopija"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Tvarkyti aplankus"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Naudoti kaip numatytąjį atsakant į pranešimus"</string>
 </resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index c17d510..c1e07c1 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Aplanko piktograma"</string>
     <string name="add_account" msgid="5905863370226612377">"Pridėti paskyrą"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Atsisakyti patarimo"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Automatinis sinchronizavimas išjungtas."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Įjungti palietus."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Automatinis sinchronizavimas išjungtas."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Įjunkite <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Paskyros nustatymai"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"„<xliff:g id="OUTBOX">%2$s</xliff:g>“ esančių neišsiųstų elementų: <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Įjungti automatinį sinchronizavimą?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Pakeitimai, atliekami visose programose ir paskyrose, o ne tik „Gmail“, bus sinchronizuojami žiniatinklyje, kituose įrenginiuose ir <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>."</string>
diff --git a/res/values-lv-sw600dp/strings.xml b/res/values-lv-sw600dp/strings.xml
index 8381845..7147f21 100644
--- a/res/values-lv-sw600dp/strings.xml
+++ b/res/values-lv-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Kopija/diskr. kop."</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Diskrētā kopija"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Pārvaldīt mapes"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Izmantot kā noklusējumu, atbildot uz paziņojumiem"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ Kopija/diskr. kop."</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ Diskrētā kopija"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Pārvaldīt mapes"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Izmantot kā noklusējumu, atbildot uz paziņojumiem"</string>
 </resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index c1ee838..8b80f8e 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Mapes ikona"</string>
     <string name="add_account" msgid="5905863370226612377">"Pievienot kontu"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Noraidīt padomu"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Automātiskā sinhronizācija ir izslēgta."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Pieskarieties, lai ieslēgtu."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Konta sinhronizācija ir izslēgta."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Ieslēdziet to sadaļā <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Konta iestatījumi"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> nenosūtīti ziņojumi sadaļā <xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Vai ieslēgt automātisko sinhronizāciju?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Izmaiņas, ko veicāt visām lietotnēm un kontiem (ne tikai Gmail), tiks sinhronizētas tīmeklī, citās jūsu ierīcēs un šādā jūsu ierīcē: <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>."</string>
diff --git a/res/values-mk-rMK-sw600dp/strings.xml b/res/values-mk-rMK-sw600dp/strings.xml
deleted file mode 100644
index b1e20ed..0000000
--- a/res/values-mk-rMK-sw600dp/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-     Copyright (C) 2012 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Цц/Бцц"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Бцц"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Управувај со папки"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Користи како стандард за одговарање на известувања за пораки"</string>
-</resources>
diff --git a/res/values-mk-rMK/strings.xml b/res/values-mk-rMK/strings.xml
deleted file mode 100644
index acb7787..0000000
--- a/res/values-mk-rMK/strings.xml
+++ /dev/null
@@ -1,485 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-     Copyright (C) 2011 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- no translation found for from (5159056500059912358) -->
-    <skip />
-    <string name="to" msgid="3971614275716830581">"До"</string>
-    <string name="cc" msgid="8768828862207919684">"Цц"</string>
-    <string name="bcc" msgid="519303553518479171">"Бцц"</string>
-    <string name="subject_hint" msgid="2136470287303571827">"Предмет"</string>
-    <string name="body_hint" msgid="6478994981747057817">"Состави е-пошта"</string>
-    <string name="add_file_attachment" msgid="2604880054248593993">"Прикачи датотека"</string>
-    <string name="add_photo_attachment" msgid="7163589794940909528">"Прикачи слика"</string>
-    <string name="save_draft" msgid="2669523480789672118">"Зачувај нацрт"</string>
-    <string name="discard" msgid="4905982179911608430">"Отфрли"</string>
-    <string name="compose" msgid="2602861958391035523">"Состави"</string>
-  <string-array name="compose_modes">
-    <item msgid="9000553538766397816">"Одговори"</item>
-    <item msgid="2767793214788399009">"Одговори на сите"</item>
-    <item msgid="2758162027982270607">"Проследи"</item>
-  </string-array>
-    <string name="reply_attribution" msgid="1114972798797833259">"На <xliff:g id="DATE">%s</xliff:g>, <xliff:g id="PERSON">%s</xliff:g> напиша:"</string>
-    <string name="forward_attribution" msgid="597850048345475752">"---------- Проследена порака ----------&lt;br&gt;Од: <xliff:g id="FROM">%1$s</xliff:g>&lt;br&gt;Датум: <xliff:g id="DATE">%2$s</xliff:g>&lt;br&gt;Предмет: <xliff:g id="SUBJECT">%3$s</xliff:g>&lt;br&gt;До: <xliff:g id="TO">%4$s</xliff:g>&lt;br&gt;"</string>
-    <string name="forward_attribution_no_headers" msgid="1828826576779486239">"---------- Проследена порака ----------"</string>
-    <string name="cc_attribution" msgid="2928584226469388899">"Цц: <xliff:g id="CC">%1$s</xliff:g>&lt;br&gt;"</string>
-    <string name="select_attachment_type" msgid="353236686616663062">"Избери тип прилог"</string>
-    <string name="too_large_to_attach_single" msgid="2669897137966512530">"Не може да се прикачи датотека поголема од <xliff:g id="MAXSIZE">%1$s</xliff:g>."</string>
-    <string name="too_large_to_attach_multiple" msgid="1620163295709036343">"Една или повеќе датотеки не се прикачени. Ограничување <xliff:g id="MAXSIZE">%1$s</xliff:g>."</string>
-    <string name="too_large_to_attach_additional" msgid="4964155563465970480">"Датотеката не е прикачена. <xliff:g id="MAXSIZE">%1$s</xliff:g> граница е достигната."</string>
-    <string name="generic_attachment_problem" msgid="4683974765387240723">"Не можеше да се прикачи датотека."</string>
-    <string name="recipient_needed" msgid="319816879398937214">"Додај најмалку еден примач."</string>
-    <string name="recipient_error_dialog_title" msgid="760741480291963706">"Грешка на примач"</string>
-    <string name="confirm_send_title" msgid="4664971589247101530">"Испрати порака?"</string>
-    <string name="confirm_send_message_with_no_subject" msgid="1442628074022609987">"Нема текст во предметот на пораката."</string>
-    <string name="confirm_send_message_with_no_body" msgid="3329355318700201516">"Нема текст во телото на пораката."</string>
-    <string name="confirm_send_message" msgid="6211518590166222735">"Испрати ја оваа порака?"</string>
-    <string name="message_discarded" msgid="6792661321962262024">"Пораката е отфрлена."</string>
-    <string name="signature" msgid="3172144541947408374">\n\n"<xliff:g id="SIGNATURE">%s</xliff:g>"</string>
-    <string name="custom_from_account_label" msgid="5042317430007736322">"Испрати како:"</string>
-    <string name="send" msgid="4269810089682120826">"Испрати"</string>
-    <string name="mark_read" msgid="579388143288052493">"Обележи како прочитано"</string>
-    <string name="mark_unread" msgid="6245060538061533191">"Обележи како непрочитано"</string>
-    <string name="mute" msgid="9164839998562321569">"Исклучи звук"</string>
-    <string name="add_star" msgid="3275117671153616270">"Додај ѕвезда"</string>
-    <string name="remove_star" msgid="9126690774161840733">"Отстрани ѕвезда"</string>
-    <string name="remove_folder" msgid="2379905457788576297">"Отстрани од <xliff:g id="FOLDERNAME">%1$s</xliff:g>"</string>
-    <string name="archive" msgid="5978663590021719939">"Архивирај"</string>
-    <string name="report_spam" msgid="4106897677959987340">"Пријави спам"</string>
-    <string name="mark_not_spam" msgid="8617774236231366651">"Пријави дека не е спам"</string>
-    <string name="report_phishing" msgid="8454666464488413739">"Пријави кражба на идентитет"</string>
-    <string name="delete" msgid="6784262386780496958">"Избриши"</string>
-    <string name="discard_drafts" msgid="5881484193628472105">"Отфрли нацрти"</string>
-    <!-- no translation found for discard_failed (7520780769812210279) -->
-    <skip />
-    <string name="refresh" msgid="1533748989749277511">"Освежи"</string>
-    <string name="reply" msgid="8337757482824207118">"Одговори"</string>
-    <string name="reply_all" msgid="5366796103758360957">"Одговори на сите"</string>
-    <string name="resume_draft" msgid="1272723181782570649">"Уреди"</string>
-    <string name="forward" msgid="4397585145490426320">"Проследи"</string>
-    <string name="menu_compose" msgid="4575025207594709432">"Состави"</string>
-    <string name="menu_change_folders" msgid="2194946192901276625">"Промени папки"</string>
-    <string name="menu_move_to" msgid="7948877550284452830">"Премести во"</string>
-    <string name="menu_move_to_inbox" msgid="258554178236001444">"Премести во Приемно сандаче"</string>
-    <string name="menu_manage_folders" msgid="8486398523679534519">"Поставки на папка"</string>
-    <string name="menu_show_original" msgid="2330398228979616661">"Врати автоматско приспособување големина"</string>
-    <string name="menu_settings" msgid="7993485401501778040">"Поставки"</string>
-    <string name="menu_search" msgid="1949652467806052768">"Барај"</string>
-    <string name="drawer_title" msgid="3766219846644975778">"Навигација"</string>
-    <string name="mark_important" msgid="8781680450177768820">"Обележи како важно"</string>
-    <string name="mark_not_important" msgid="3342258155408116917">"Обележи како неважно"</string>
-    <string name="add_cc_label" msgid="2249679001141195213">"Додај Цц/Бцц"</string>
-    <string name="add_bcc_label" msgid="963745641238037813">"Додај Бцц"</string>
-    <string name="quoted_text" msgid="977782904293216533">"Опфати цитиран текст"</string>
-    <string name="quoted_text_label" msgid="2296807722849923934">"Цитирај текст"</string>
-    <string name="respond_inline" msgid="6609746292081928078">"Одговори во линија"</string>
-    <string name="bytes" msgid="651011686747499628">"<xliff:g id="COUNT">%s</xliff:g> B"</string>
-    <string name="kilobytes" msgid="1523463964465770347">"<xliff:g id="COUNT">%s</xliff:g> КБ"</string>
-    <string name="megabytes" msgid="4309397368708773323">"<xliff:g id="COUNT">%s</xliff:g> МБ"</string>
-    <string name="attachment_image" msgid="6375306026208274564">"Слика"</string>
-    <string name="attachment_video" msgid="7119476472603939848">"Видео"</string>
-    <string name="attachment_audio" msgid="7097658089301809284">"Аудио"</string>
-    <string name="attachment_text" msgid="3485853714965922173">"Текст"</string>
-    <string name="attachment_application_msword" msgid="2110108876623152162">"Документ"</string>
-    <string name="attachment_application_vnd_ms_powerpoint" msgid="425353008963359230">"Презентација"</string>
-    <string name="attachment_application_vnd_ms_excel" msgid="5585781311136609103">"Табеларна пресметка"</string>
-    <string name="attachment_application_pdf" msgid="4207340200944655970">"PDF"</string>
-    <string name="attachment_unknown" msgid="3360536730101083926">"<xliff:g id="ATTACHMENTEXTENSION">%s</xliff:g> Датотека"</string>
-    <string name="preview_attachment" msgid="6265457626086113833">"Преглед"</string>
-    <string name="save_attachment" msgid="375685179032130033">"Зачувај"</string>
-    <string name="cancel_attachment" msgid="6900093625792891122">"Откажи"</string>
-    <string name="open_attachment" msgid="6100396056314739761">"Отвори"</string>
-    <string name="install_attachment" msgid="8119470822958087928">"Инсталирај"</string>
-    <string name="download_again" msgid="8195787340878328119">"Преземи повторно"</string>
-    <string name="more_info_attachment" msgid="2899691682394864507">"Информации"</string>
-    <string name="no_application_found" msgid="7309485680354949680">"Ниедна апликација не може да го отвори овој прилог за прикажување."</string>
-    <string name="fetching_attachment" msgid="2286628490159574159">"Земање прилог"</string>
-    <string name="please_wait" msgid="3953824147776128899">"Почекај..."</string>
-    <string name="saved" msgid="161536102236967534">"Зачувано, <xliff:g id="SIZE">%s</xliff:g>"</string>
-    <string name="download_failed" msgid="3878373998269062395">"Не можеше да се преземе. Допрете за да се обидете повторно."</string>
-    <string name="menu_photo_save_all" msgid="2742869476474613396">"Зачувај ги сите"</string>
-    <string name="menu_photo_share" msgid="6410980274832639330">"Сподели"</string>
-    <string name="menu_photo_share_all" msgid="3049053252719665320">"Сподели сè"</string>
-    <string name="menu_photo_print" msgid="3084679038179342333">"Печати"</string>
-    <string name="saving" msgid="6274238733828387433">"Се зачувува..."</string>
-    <string name="choosertitle_sharevia" msgid="3539537264873337959">"Сподели преку"</string>
-    <string name="contextmenu_openlink" msgid="6952228183947135362">"Отвори во прелистувач"</string>
-    <string name="contextmenu_copy" msgid="2584243784216385180">"Копирај"</string>
-    <string name="contextmenu_copylink" msgid="8659897702269320063">"Копирај УРЛ на врска"</string>
-    <string name="contextmenu_view_image" msgid="1031172763893491000">"Прикажи слика"</string>
-    <string name="contextmenu_dial_dot" msgid="8881095692316726628">"Бирај…"</string>
-    <string name="contextmenu_sms_dot" msgid="5319737001771622657">"СМС..."</string>
-    <string name="contextmenu_add_contact" msgid="2310064151427072475">"Додај контакт"</string>
-    <string name="contextmenu_send_mail" msgid="3834654593200105396">"Испрати е-пошта"</string>
-    <string name="contextmenu_map" msgid="5118951927399465521">"Карта"</string>
-    <string name="contextmenu_sharelink" msgid="8670940060477758709">"Сподели врска"</string>
-    <string name="contextmenu_help" msgid="4209674157707873384">"Помош"</string>
-    <string name="contextmenu_feedback" msgid="8319100902136337085">"Испраќај повратни информации"</string>
-    <!-- no translation found for num_selected (7990204488812654380) -->
-    <skip />
-  <plurals name="move_conversation">
-    <item quantity="one" msgid="237882018518207244">"Премести разговор"</item>
-    <item quantity="other" msgid="6639576653114141743">"Премести <xliff:g id="ID_1">%1$d</xliff:g> разговори"</item>
-  </plurals>
-    <string name="content_description" msgid="854320355052962069">"<xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g> за <xliff:g id="SUBJECT">%3$s</xliff:g>, <xliff:g id="SNIPPET">%4$s</xliff:g> на <xliff:g id="DATE">%5$s</xliff:g>, <xliff:g id="READSTATE">%6$s</xliff:g>"</string>
-    <string name="content_description_today" msgid="1634422834354116955">"<xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g> за <xliff:g id="SUBJECT">%3$s</xliff:g>, <xliff:g id="SNIPPET">%4$s</xliff:g> во <xliff:g id="TIME">%5$s</xliff:g>, <xliff:g id="READSTATE">%6$s</xliff:g>"</string>
-    <string name="read_string" msgid="5495929677508576520">"разговорот е прочитан"</string>
-    <string name="unread_string" msgid="7342558841698083381">"разговорот не е прочитан"</string>
-    <string name="filtered_tag" msgid="721666921386074505">"[<xliff:g id="TAG">%1$s</xliff:g>]<xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="badge_and_subject" msgid="3979372269373936750">"<xliff:g id="ID_1">%1$s</xliff:g> <xliff:g id="ID_2">%2$s</xliff:g>"</string>
-  <plurals name="draft">
-    <item quantity="one" msgid="6717535677167943402">"Нацрт"</item>
-    <item quantity="other" msgid="1335781147509740039">"Нацрти"</item>
-  </plurals>
-    <string name="sending" msgid="5600034886763930499">"Се испраќа..."</string>
-    <string name="message_retrying" msgid="5335188121407261331">"Повторно се обидуваме"</string>
-    <string name="message_failed" msgid="7887650587384601790">"Неуспешно"</string>
-    <string name="send_failed" msgid="2186285547449865010">"Пораката не се испрати."</string>
-    <string name="me_object_pronoun" msgid="4674452244417913816">"јас"</string>
-    <string name="me_subject_pronoun" msgid="7479328865714008288">"јас"</string>
-  <plurals name="confirm_delete_conversation">
-    <item quantity="one" msgid="7605755011865575440">"Избришете го овој разговор?"</item>
-    <item quantity="other" msgid="1585660381208712562">"Избришете ги овие <xliff:g id="COUNT">%1$d</xliff:g> разговори?"</item>
-  </plurals>
-  <plurals name="confirm_archive_conversation">
-    <item quantity="one" msgid="9105551557653306945">"Архивирајте го овој разговор?"</item>
-    <item quantity="other" msgid="2001972798185641108">"Архивирајте ги овие <xliff:g id="COUNT">%1$d</xliff:g> разговори?"</item>
-  </plurals>
-  <plurals name="confirm_discard_drafts_conversation">
-    <item quantity="one" msgid="2030421499893210789">"Отфрли ја оваа порака?"</item>
-    <item quantity="other" msgid="782234447471532005">"Отфрлете ги овие <xliff:g id="COUNT">%1$d</xliff:g> пораки?"</item>
-  </plurals>
-    <string name="confirm_discard_text" msgid="5172680524418848519">"Отфрли ја оваа порака?"</string>
-    <string name="loading_conversations" msgid="7255732786298655246">"Се вчитува..."</string>
-    <string name="empty_inbox" msgid="5901734942362315228">"Сè е завршено! Имајте убав ден."</string>
-    <string name="empty_search" msgid="8564899353449880818">"Не пронајдовме ништо за „<xliff:g id="SEARCH_QUERY">%1$s</xliff:g>“."</string>
-    <string name="empty_spam_folder" msgid="3288985543286122800">"Супер, нема спам тука!"</string>
-    <string name="empty_trash_folder" msgid="378119063015945020">"Овде нема ѓубре. Ви благодариме што рециклирате!"</string>
-    <string name="empty_folder" msgid="3227552635613553855">"Нема е-пошта во папката."</string>
-    <string name="getting_messages" msgid="8403333791332403244">"Се вчитуваат вашите пораки"</string>
-    <string name="undo" msgid="8256285267701059609">"Врати"</string>
-  <plurals name="conversation_unstarred">
-    <item quantity="one" msgid="839233699150563831">"Отстранување ѕвезда од <xliff:g id="COUNT">%1$d</xliff:g> разговор."</item>
-    <item quantity="other" msgid="7677305734833709789">"Отстранување ѕвезда од <xliff:g id="COUNT">%1$d</xliff:g> разговори."</item>
-  </plurals>
-  <plurals name="conversation_muted">
-    <item quantity="one" msgid="3339638225564408438">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; со исклучен звук."</item>
-    <item quantity="other" msgid="4276111931404654219">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; со исклучен звук."</item>
-  </plurals>
-  <plurals name="conversation_spammed">
-    <item quantity="one" msgid="6986172030710967687">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; пријавен како спам."</item>
-    <item quantity="other" msgid="5900913789259199137">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; пријавени како спам."</item>
-  </plurals>
-  <plurals name="conversation_not_spam">
-    <item quantity="one" msgid="2294904093653094150">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; пријавен дека не е спам."</item>
-    <item quantity="other" msgid="4966164423991098144">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; пријавени дека не се спам."</item>
-  </plurals>
-  <plurals name="conversation_not_important">
-    <item quantity="one" msgid="3824809189993339030">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; обележан како неважен."</item>
-    <item quantity="other" msgid="1215472798075869124">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; обележани како неважни."</item>
-  </plurals>
-  <plurals name="conversation_phished">
-    <item quantity="one" msgid="4330095881258771201">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; пријавен како кражба на идентитет."</item>
-    <item quantity="other" msgid="9218674052779504277">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; пријавени како кражба на идентитет."</item>
-  </plurals>
-  <plurals name="conversation_archived">
-    <item quantity="one" msgid="4127890884907503696">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; архивиран."</item>
-    <item quantity="other" msgid="7789480176789922968">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; архивирани."</item>
-  </plurals>
-  <plurals name="conversation_deleted">
-    <item quantity="one" msgid="5591889079235938982">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; избришан."</item>
-    <item quantity="other" msgid="7060256058737892078">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; избришани."</item>
-  </plurals>
-    <string name="deleted" msgid="7378013910782008375">"Избришан"</string>
-    <string name="archived" msgid="6283673603512713022">"Архивирано"</string>
-    <string name="folder_removed" msgid="5656281444688183676">"Отстранет од <xliff:g id="FOLDERNAME">%1$s</xliff:g>"</string>
-  <plurals name="conversation_folder_changed">
-    <item quantity="one" msgid="6463727361987396734">"Променета папка."</item>
-    <item quantity="other" msgid="8815390494333090939">"Променети папки."</item>
-  </plurals>
-    <string name="conversation_folder_moved" msgid="6475872337373081683">"Преместен во <xliff:g id="FOLDERNAME">%1$s</xliff:g>"</string>
-    <string name="search_results_header" msgid="1529438451150580188">"Резултати"</string>
-    <string name="search_unsupported" msgid="2873920566477359177">"Оваа сметка не поддржува пребарување."</string>
-    <string name="add_label" msgid="3285338046038610902">"Додај папка"</string>
-    <string name="new_incoming_messages_one" msgid="5933087567495998661">"Прикажи ја новата порака од <xliff:g id="SENDER">%s</xliff:g>."</string>
-  <plurals name="new_incoming_messages_many">
-    <item quantity="other" msgid="4394042684501388790">"Прикажи <xliff:g id="COUNT">%1$d</xliff:g> нови пораки."</item>
-  </plurals>
-    <string name="date_and_view_details" msgid="2952994746916149969">"<xliff:g id="DATE">%1$s</xliff:g> &lt;a href=\'http://www.example.com\'&gt;Прикажи детали&lt;/a&gt;"</string>
-    <string name="hide_details" msgid="8018801050702453314">"Сокриј детали"</string>
-    <string name="to_message_header" msgid="3954385178027011919">"до <xliff:g id="RECIPIENTS">%1$s</xliff:g>"</string>
-    <string name="contact_info_string" msgid="6484930184867405276">"Прикажи информации за контакт за <xliff:g id="NAME">%1$s</xliff:g>"</string>
-    <string name="contact_info_string_default" msgid="6204228921864816351">"Прикажи информации за контакт"</string>
-  <plurals name="show_messages_read">
-    <item quantity="other" msgid="5285673397387128129">"<xliff:g id="COUNT">%1$d</xliff:g> постари пораки"</item>
-  </plurals>
-    <string name="from_heading" msgid="48290556829713090">"Од:"</string>
-    <string name="replyto_heading" msgid="8275255318292059079">"Одговори на:"</string>
-    <string name="to_heading" msgid="3495203282540398336">"До: "</string>
-    <string name="to_heading_no_space" msgid="679167047628308670">"До:"</string>
-    <string name="cc_heading" msgid="5603892257866345823">"Цц:"</string>
-    <string name="bcc_heading" msgid="1482186590756218269">"Бцц:"</string>
-    <string name="date_heading" msgid="4213063948406397168">"Датум:"</string>
-    <string name="show_images" msgid="436044894053204084">"Прикажи слики"</string>
-    <string name="always_show_images" msgid="556087529413707819">"Секогаш прикажувај слики од овој испраќач"</string>
-    <string name="always_show_images_toast" msgid="3763157294047555051">"Сликите од овој испраќач ќе се прикажуваат автоматски."</string>
-    <string name="address_display_format" msgid="2098008376913966177">"<xliff:g id="NAME">%1$s</xliff:g> <xliff:g id="EMAIL">%2$s</xliff:g>"</string>
-    <string name="address_display_format_with_via_domain" msgid="8108294635074750048">"<xliff:g id="NAME">%1$s</xliff:g> <xliff:g id="EMAIL">%2$s</xliff:g> преку <xliff:g id="VIA_DOMAIN">%3$s</xliff:g>"</string>
-    <string name="message_saved" msgid="3291655042310241793">"Пораката е зачувана како нацрт."</string>
-    <string name="sending_message" msgid="2487846954946637084">"Пораката се испраќа…"</string>
-    <string name="invalid_recipient" msgid="9157434699389936584">"Адресата <xliff:g id="WRONGEMAIL">%s</xliff:g> е неважечка."</string>
-    <string name="show_elided" msgid="3456154624105704327">"Прикажи цитиран текст"</string>
-    <string name="hide_elided" msgid="5768235486834692733">"▼ Сокриј цитиран текст"</string>
-    <string name="message_invite_title" msgid="5985161025144867256">"Покана од календар"</string>
-    <string name="message_invite_calendar_view" msgid="9181966650840809197">"Прикажи во „Календар“"</string>
-    <string name="message_invite_label_attending" msgid="4194264767870003397">"Ќе одиш?"</string>
-    <string name="message_invite_accept" msgid="8002758842580134835">"Да"</string>
-    <string name="message_invite_tentative" msgid="3199418731566655887">"Можеби"</string>
-    <string name="message_invite_decline" msgid="6331040872447290777">"Не"</string>
-    <string name="enumeration_comma" msgid="2848850136844740850">", "</string>
-    <string name="send_anyway" msgid="2727576121007079643">"Сепак испрати"</string>
-    <string name="ok" msgid="6178802457914802336">"Во ред"</string>
-    <string name="done" msgid="344354738335270292">"Готово"</string>
-    <string name="cancel" msgid="4831678293149626190">"Откажи"</string>
-    <string name="clear" msgid="765949970989448022">"Исчисти"</string>
-    <string name="next" msgid="2662478712866255138">"Следно"</string>
-    <string name="previous" msgid="8985379053279804274">"Претходно"</string>
-  <string-array name="sync_status">
-    <item msgid="4600303222943450797">"Успешно"</item>
-    <item msgid="2972425114100316260">"Нема поврзување."</item>
-    <item msgid="8594593386776437871">"Не можеше да се пријави."</item>
-    <item msgid="1375193906551623606">"Грешка на безбедност."</item>
-    <item msgid="195177374927979967">"Не можеше да се синхронизира."</item>
-    <item msgid="8026148967150231130">"Внатрешна грешка"</item>
-    <item msgid="5442620760791553027">"Грешка на серверот"</item>
-  </string-array>
-    <string name="tap_to_configure" msgid="137172348280050643">"Допри за да поставиш"</string>
-    <string name="non_synced_folder_description" msgid="3044618511909304701">"За да ги гледате разговорите, синхронизирајте ја папката."</string>
-    <string name="tap_to_configure_folder_sync" msgid="3280434399275638071">"Синхронизирај папка"</string>
-    <string name="widget_large_unread_count" msgid="8699435859096455837">"%d+"</string>
-    <string name="large_unseen_count" msgid="3055042669246912518">"<xliff:g id="COUNT">%d</xliff:g>+ нови"</string>
-    <string name="unseen_count" msgid="5509898665569695288">"<xliff:g id="COUNT">%d</xliff:g> нови"</string>
-  <plurals name="actionbar_unread_messages">
-    <item quantity="other" msgid="3863201473731766006">"<xliff:g id="COUNT">%1$d</xliff:g> непрочитани"</item>
-  </plurals>
-    <string name="actionbar_large_unread_count" msgid="753635978542372792">"<xliff:g id="COUNT">%1$d</xliff:g>+ непрочитани"</string>
-    <string name="view_more_conversations" msgid="8377920000247101901">"Прикажи повеќе разговори"</string>
-    <string name="loading_conversation" msgid="7931600025861500397">"Се вчитува..."</string>
-    <string name="activity_mailbox_selection" msgid="7489813868539767701">"Избери сметка"</string>
-    <string name="activity_folder_selection" msgid="8375243281001234750">"Избери папка"</string>
-    <string name="folder_shortcut_widget_label" msgid="6466292659577092915">"Папка за е-пошта"</string>
-    <string name="change_folders_selection_dialog_title" msgid="9174464298613273814">"Промени папки"</string>
-    <string name="move_to_selection_dialog_title" msgid="4052506464467083621">"Премести во"</string>
-    <string name="search_hint" msgid="4916671414132334289">"Пребарај пошта"</string>
-    <!-- no translation found for search_results_loaded (1784879343458807514) -->
-    <skip />
-    <string name="network_error" msgid="5931164247644972255">"Нема поврзување"</string>
-    <string name="retry" msgid="916102442074217293">"Обиди се повторно"</string>
-    <string name="load_more" msgid="8702691358453560575">"Вчитај повеќе"</string>
-    <!-- no translation found for load_attachment (3894318473827290350) -->
-    <skip />
-    <string name="shortcut_name_title" msgid="1562534040126088628">"Именувај кратенка за папка"</string>
-    <string name="wait_for_sync_title" msgid="4577632826912823075">"Се чека синхронизирање"</string>
-    <string name="not_synced_title" msgid="3600180500934086346">"Сметката не е синхронизирана"</string>
-    <string name="wait_for_manual_sync_body" msgid="2823149409451003378">"Оваа сметка не е поставена за автоматско синхронизирање.\nДопрете "<b>"Синхронизирај сега"</b>" за да ја синхронизирате поштата еднаш или "<b>"Промени поставки на синхронизација"</b>" за да поставите автоматско синхронизирање пошта на оваа сметка."</string>
-    <string name="manual_sync" msgid="2271479734895537848">"Синхронизирај сега"</string>
-    <string name="change_sync_settings" msgid="3615852118397055361">"Промени поставки на синхронизација"</string>
-    <string name="photo_load_failed" msgid="577471721679146999">"Сликата не можеше да се вчита"</string>
-    <string name="cant_move_or_change_labels" msgid="4155490583610926755">"Не може да се премести бидејќи изборот содржи повеќе сметки."</string>
-    <string name="multiple_new_message_notification_item" msgid="1386588046275174918"><b>"<xliff:g id="SENDER">%1$s</xliff:g>"</b>" <xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="single_new_message_notification_big_text" msgid="2170154732664242904">"<xliff:g id="SUBJECT">%1$s</xliff:g>\n<xliff:g id="SNIPPET">%2$s</xliff:g>"</string>
-    <string name="ignore_spam_warning" msgid="8760314545535838430">"Игнорирај, ѝ верувам на оваа порака"</string>
-    <string name="via_domain" msgid="537951148511529082">"преку <xliff:g id="VIADOMAIN">%1$s</xliff:g>"</string>
-    <string name="signin" msgid="4699091478139791244">"Пријави се"</string>
-    <string name="info" msgid="1357564480946178121">"Информации"</string>
-    <string name="report" msgid="4318141326014579036">"Пријави"</string>
-    <string name="sync_error" msgid="1795794969006241678">"Не можеше да се синхронизира."</string>
-    <string name="sync_error_message" msgid="4182644657243736635">"Вашиот уред нема доволно простор во меморијата за синхронизирање."</string>
-    <string name="storage" msgid="4783683938444150638">"Меморија"</string>
-    <string name="senders_split_token" msgid="6549228851819460081">", "</string>
-    <string name="draft_count_format" msgid="9122583199850209286">" (<xliff:g id="COUNT">%1$s</xliff:g>)"</string>
-    <string name="all_folders_heading" msgid="9023770187629170967">"Сите папки"</string>
-    <string name="recent_folders_heading" msgid="8943134955788867702">"Неодамнешни папки"</string>
-    <string name="message_details_title" msgid="60771875776494764">"Детали на порака"</string>
-    <string name="preference_advance_to_title" msgid="6385669491239514630">"Автоматско продолжување"</string>
-  <string-array name="prefEntries_autoAdvance">
-    <item msgid="1505450878799459652">"Понови"</item>
-    <item msgid="8000986144872247139">"Постари"</item>
-    <item msgid="8015001161633421314">"Список со разговори"</item>
-  </string-array>
-  <string-array name="prefSummaries_autoAdvance">
-    <item msgid="8221665977497655719">"Прикажи понов разговор откако ќе избришеш"</item>
-    <item msgid="1721869262893378141">"Прикажи постар разговор откако ќе избришеш"</item>
-    <item msgid="880913657385630195">"Прикажи список со разговори откако ќе избришеш"</item>
-  </string-array>
-    <string name="prefDialogTitle_autoAdvance" msgid="5459235590885640678">"Продолжи до"</string>
-    <string name="clear_display_images_whitelist_title" msgid="2012677202404471778">"Исчисти одобрувања за слика"</string>
-    <string name="clear_display_images_whitelist_dialog_title" msgid="1942692501166848471">"Исчисти одобрувања за слика?"</string>
-    <string name="clear_display_images_whitelist_dialog_message" msgid="3952553078559373729">"Ќе престане прикажувањето подредени слики од испраќачи кои претходно сте ги овозможиле."</string>
-    <string name="sender_whitelist_cleared" msgid="2490984995927904030">"Сликите нема автоматски да се прикажат."</string>
-    <string name="preferences_signature_title" msgid="2318034745474929902">"Потпис"</string>
-    <string name="preferences_signature_dialog_title" msgid="4801741764511807064">"Потпис"</string>
-    <string name="preferences_signature_summary_not_set" msgid="3776614319388053784">"Не е поставено"</string>
-    <string name="notification_action_reply" msgid="8378725460102575919">"Одговори"</string>
-    <string name="notification_action_reply_all" msgid="5693469099941000037">"Одговори на сите"</string>
-    <string name="notification_action_archive" msgid="2884874164831039047">"Архивирај"</string>
-    <string name="notification_action_remove_label" msgid="3714785653186750981">"Отстрани етикета"</string>
-    <string name="notification_action_delete" msgid="3201627482564624132">"Избриши"</string>
-    <string name="notification_action_undo_archive" msgid="600186958134073582">"Архивирано"</string>
-    <string name="notification_action_undo_remove_label" msgid="8341924850540100690">"Етикетата е отстранета"</string>
-    <string name="notification_action_undo_delete" msgid="6915612337413587103">"Избришано"</string>
-    <string name="veiled_address" msgid="2670378260196977266"></string>
-    <string name="veiled_alternate_text" msgid="6343564357099807582"></string>
-    <string name="veiled_alternate_text_unknown_person" msgid="6728323554307952217"></string>
-    <string name="veiled_summary_unknown_person" msgid="2122359944161241551"></string>
-    <string name="label_notification_ticker" msgid="323232821061341014">"<xliff:g id="LABEL">%s</xliff:g>: <xliff:g id="NOTIFICATION">%s</xliff:g>"</string>
-  <plurals name="new_messages">
-    <item quantity="one" msgid="3446656407520493241">"<xliff:g id="COUNT">%1$d</xliff:g> нова порака"</item>
-    <item quantity="other" msgid="3531683811183204615">"<xliff:g id="COUNT">%1$d</xliff:g> нови пораки"</item>
-  </plurals>
-    <string name="single_new_message_notification_title" msgid="7954710563222504868">"<xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="silent_ringtone" msgid="1570794756474381886">"Тивко"</string>
-    <string name="preference_removal_action_title" msgid="4703834472477137634">"Архивирај и избриши дејства"</string>
-  <string-array name="prefEntries_removal_action">
-    <item msgid="954772302016538814">"Прикажи само архива"</item>
-    <item msgid="7212690302706180254">"Прикажи само избриши"</item>
-    <item msgid="2539051197590685708">"Прикажи архива и избриши"</item>
-  </string-array>
-  <string-array name="prefSummaries_removal_action_summary">
-    <item msgid="6877416142040695022">"Прикажи само архива"</item>
-    <item msgid="1510017057984222376">"Прикажи само избриши"</item>
-    <item msgid="3196207224108008441">"Прикажи архива и избриши"</item>
-  </string-array>
-    <string name="prefDialogTitle_removal_action" msgid="266548424110393246">"Архивирај и избриши дејства"</string>
-    <string name="preferences_default_reply_all_title" msgid="7255858488369635327">"Одговори на сите"</string>
-    <string name="preferences_default_reply_all_summary_impl" msgid="895581085692979709">"Користи како стандард за одговарање пораки"</string>
-    <string name="preference_swipe_title_archive" msgid="9122333537761282714">"Помини со прст за да се архивира"</string>
-    <string name="preference_swipe_title_delete" msgid="4860474024917543711">"Помини со прст за да избришеш"</string>
-    <string name="preference_swipe_description" msgid="3036560323237015010">"Во список на разговор"</string>
-    <string name="preference_sender_image_title" msgid="7890813537985591865">"Слика на испраќач"</string>
-    <string name="preference_sender_image_description" msgid="3586817690132199889">"Прикажи покрај името во списокот со разговори"</string>
-    <string name="empty_trash" msgid="3385937024924728399">"Испразни ја Корпата"</string>
-    <string name="empty_spam" msgid="2911988289997281371">"Испразни „Спам“"</string>
-    <string name="empty_trash_dialog_title" msgid="2104898489663621508">"Испразни ја Корпата?"</string>
-    <string name="empty_spam_dialog_title" msgid="1130319045917820569">"Испразни „Спам“?"</string>
-  <plurals name="empty_folder_dialog_message">
-    <item quantity="one" msgid="3315412388217832914">"<xliff:g id="COUNT">%1$d</xliff:g> порака трајно ќе се избрише."</item>
-    <item quantity="other" msgid="263840304486020101">"<xliff:g id="COUNT">%1$d</xliff:g> пораки трајно ќе се избришат."</item>
-  </plurals>
-    <string name="drawer_open" msgid="2285557278907103851">"Отвори фиока за навигација"</string>
-    <string name="drawer_close" msgid="2065829742127544297">"Затвори фиока за навигација"</string>
-    <string name="conversation_photo_welcome_text" msgid="836483155429003787">"Допрете ја сликата на испраќачот за да го изберете тој разговор."</string>
-    <string name="long_press_to_select_tip" msgid="1660881999120625177">"Допрете и задржете за да изберете еден разговор, потоа допрете за да изберете повеќе."</string>
-    <string name="folder_icon_desc" msgid="6272938864914794739">"Икона на папка"</string>
-    <string name="add_account" msgid="5905863370226612377">"Додај сметка"</string>
-    <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Отфрли совет"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Автоматското синхронизирање е исклучено."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Допри за да вклучиш."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Синхронизацијата на сметка е исклучена"</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Вклучете во <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Поставки на сметка"</string>
-    <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> не се испратени во <xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
-    <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Вклучи автоматско синхронизирање?"</string>
-    <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Промените што ги правите на сите апликации и сметки, не само на Gmail, ќе се синхронизираат на интернет, на останатите ваши уреди и на вашиот <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>."</string>
-    <string name="phone" msgid="4142617042507912053">"телефон"</string>
-    <string name="tablet" msgid="4593581125469224791">"таблет"</string>
-    <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="7239160845196929866">"Вклучи"</string>
-    <string name="show_n_more_folders" msgid="5769610839632786654">"Прикажи <xliff:g id="NUMBER">%1$s</xliff:g> повеќе папки"</string>
-    <string name="hide_folders" msgid="7618891933409521283">"Сокриј папки"</string>
-    <string name="print" msgid="7987949243936577207">"Печати"</string>
-    <string name="print_all" msgid="4011022762279519941">"Печати сѐ"</string>
-  <plurals name="num_messages">
-    <item quantity="one" msgid="8071234386915191851">"<xliff:g id="COUNT">%1$d</xliff:g> порака"</item>
-    <item quantity="other" msgid="962415099931188360">"<xliff:g id="COUNT">%1$d</xliff:g> пораки"</item>
-  </plurals>
-    <string name="date_message_received_print" msgid="4168417403884350040">"<xliff:g id="DAY_AND_DATE">%1$s</xliff:g> во <xliff:g id="TIME">%2$s</xliff:g>"</string>
-    <string name="draft_to_heading" msgid="7370121943946205024">"Нацрт до:"</string>
-    <string name="draft_heading" msgid="7032951343184552800">"Нацрт"</string>
-    <string name="quoted_text_hidden_print" msgid="5256754205675159141">"Цитираниот текст е сокриен"</string>
-  <plurals name="num_attachments">
-    <item quantity="one" msgid="5494465717267988888">"<xliff:g id="COUNT">%1$d</xliff:g> прилог"</item>
-    <item quantity="other" msgid="5422167728480739361">"<xliff:g id="COUNT">%1$d</xliff:g> прилози"</item>
-  </plurals>
-    <string name="no_subject" msgid="5622708348540036959">"(без предмет)"</string>
-    <string name="vacation_responder" msgid="5570132559074523806">"Автоматски одговор"</string>
-    <string name="preferences_vacation_responder_title" msgid="2268482117730576123">"Автоматски одговор"</string>
-    <string name="vacation_responder_body_hint_text" msgid="9087613123105158494">"Порака"</string>
-    <string name="send_to_contacts_text" msgid="124432913980620545">"Испрати само на моите „Контакти“"</string>
-    <string name="send_to_domain_text" msgid="5064559546745918393">"Испрати само на <xliff:g id="DOMAIN">%1$s</xliff:g>"</string>
-    <string name="pick_start_date_title" msgid="2274665037355224165">"Започнува"</string>
-    <string name="pick_end_date_title" msgid="733396083649496600">"Завршува (Изборно)"</string>
-    <string name="date_not_set" msgid="3251555782945051904">"Не е поставено"</string>
-    <string name="set_end_date_dialog_title" msgid="7543009262788808443">"Краен датум (изборно)"</string>
-    <string name="custom_date" msgid="5794846334232367838">"Приспособено"</string>
-    <string name="date_none" msgid="1061426502665431412">"Нема"</string>
-    <string name="discard_changes" msgid="5699760550972324746">"Отфрли промени?"</string>
-    <string name="vacation_responder_changes_saved" msgid="91448817268121249">"Промените на автоматскиот одговор се зачувани"</string>
-    <string name="vacation_responder_changes_discarded" msgid="21756037735539983">"Промените на автоматскиот одговор се отфрлени"</string>
-    <string name="vacation_responder_off" msgid="4429909341193366667">"Исклучено"</string>
-    <string name="vacation_responder_on" msgid="4913238379320882449">"Вклучено, од <xliff:g id="DATE">%1$s</xliff:g>"</string>
-    <string name="vacation_responder_on_with_end_date" msgid="4360941815371475955">"Вклучено, од <xliff:g id="START_DATE">%1$s</xliff:g> до <xliff:g id="END_DATE">%2$s</xliff:g>"</string>
-    <string name="vacation_responder_empty_subject_and_body_warning" msgid="6233629618520852439">"Додај предмет или порака"</string>
-    <string name="view_entire_message" msgid="823281796655014454">"Прикажи цела порака"</string>
-    <string name="eml_loader_error_toast" msgid="6577383216635400167">"Не може да се отвори датотеката"</string>
-    <string name="help_and_info" msgid="3708286489943154681">"Помош"</string>
-    <string name="help_and_feedback" msgid="7211458338163287670">"Помош и повратни информации"</string>
-    <string name="feedback" msgid="204247008751740034">"Испраќај повратни информации"</string>
-    <string name="copyright" msgid="3121335168340432582">"©<xliff:g id="YEAR">%1$d</xliff:g> Google Inc."</string>
-    <string name="version" msgid="1161745345056656547">"<xliff:g id="APP_NAME">%1$s</xliff:g> верзија <xliff:g id="VERSION">%2$s</xliff:g>"</string>
-    <string name="view_app_page" msgid="3241990517052398927"></string>
-    <string name="print_dialog" msgid="8895536548487605661">"Печати..."</string>
-    <string name="copyright_information" msgid="971422874488783312">"Информации за авторски права"</string>
-    <string name="privacy_policy" msgid="212094623396418302">"Политика за приватност"</string>
-    <string name="open_source_licenses" msgid="8643615555920977752">"Лиценци на софтвер со отворен код"</string>
-    <string name="reply_choice_yes" msgid="3327633032975373220">"Да"</string>
-    <string name="reply_choice_no" msgid="7068775605915475207">"Не"</string>
-    <string name="reply_choice_ok" msgid="7881073621845053152">"Во ред"</string>
-    <string name="reply_choice_hehe" msgid="6054314968043050748">"Хехе"</string>
-    <string name="reply_choice_thanks" msgid="4978961954288364694">"Фала"</string>
-    <string name="reply_choice_i_agree" msgid="2496652737796884298">"Се согласувам"</string>
-    <string name="reply_choice_nice" msgid="4465894941302838676">"Убаво"</string>
-    <string name="reply_on_my_way" msgid="5645003971107444269">"На пат сум"</string>
-    <string name="reply_choice_later" msgid="4629219072859486413">"Во ред, ќе ти јавам"</string>
-    <string name="reply_choice_smiling_face" msgid="1772253938506548631">":)"</string>
-    <string name="reply_choice_frowning_face" msgid="6260338807944002651">":("</string>
-    <string name="preference_header_action_confirmations" msgid="3922674681156121948">"Потврдување дејства"</string>
-    <string name="preference_confirm_before_delete_title" msgid="7563587174619033835">"Потврди пред бришење"</string>
-    <string name="preference_confirm_before_archive_title" msgid="7318645995655875718">"Потврди пред архивирање"</string>
-    <string name="preference_confirm_before_send_title" msgid="4136585783513077039">"Потврди пред испраќање"</string>
-    <string name="preferences_conversation_mode_title" msgid="389352009651720838">"Автоматски приспособи пораки"</string>
-    <string name="preferences_conversation_mode_summary" msgid="5730999743867653106">"Намали ја пораката за да ја собере на екранот"</string>
-    <string name="preferences_disable_snap_headers_title" msgid="7257824136988429629">"Дејства за пораки"</string>
-  <string-array name="prefSummaries_snapHeader">
-    <item msgid="43373293784193461">"Секогаш прикажувај ги дејствата за пораките на врвот на екранот"</item>
-    <item msgid="1765271305989996747">"Прикажувај ги дејствата за пораките на врвот на екранот само кога е свртен вертикално"</item>
-    <item msgid="6311113076575333488">"Не прикажувај ги дејствата за пораките надвор од заглавието на пораката"</item>
-  </string-array>
-  <string-array name="prefEntries_snapHeader">
-    <item msgid="6906986566816683587">"Секогаш прикажувај"</item>
-    <item msgid="113299655708990672">"Прикажувај само вертикално"</item>
-    <item msgid="4403750311175924065">"Не прикажувај"</item>
-  </string-array>
-    <string name="clear_history_title" msgid="5536216295725760357">"Исчисти историја на пребарување"</string>
-    <string name="search_history_cleared" msgid="1461946302763342640">"Историјата на пребарување е исчистена."</string>
-    <string name="clear_history_dialog_title" msgid="3503603389704365385">"Да се исчисти историјата на пребарување?"</string>
-    <string name="clear_history_dialog_message" msgid="5202922561632407778">"Ќе се отстранат сите пребарувања што сте ги извеле претходно."</string>
-    <string name="manage_accounts_menu_item" msgid="4734660452395086786">"Управувај со сметки"</string>
-    <string name="general_preferences_title" msgid="4212138728220418162">"Општи поставки"</string>
-    <string name="activity_preferences" msgid="8966077432517613292">"Поставки"</string>
-</resources>
diff --git a/res/values-ml-rIN-sw600dp/strings.xml b/res/values-ml-rIN-sw600dp/strings.xml
deleted file mode 100644
index 5396673..0000000
--- a/res/values-ml-rIN-sw600dp/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-     Copyright (C) 2012 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Cc/Bcc"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Bcc"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"ഫോൾഡറുകൾ നിയന്ത്രിക്കുക"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"സന്ദേശ അറിയിപ്പുകൾക്കുള്ള പ്രതികരണങ്ങൾക്ക് സ്ഥിരമായി ഉപയോഗിക്കുക"</string>
-</resources>
diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml-rIN/strings.xml
deleted file mode 100644
index ba2a957..0000000
--- a/res/values-ml-rIN/strings.xml
+++ /dev/null
@@ -1,483 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-     Copyright (C) 2011 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="from" msgid="5159056500059912358">"അയച്ചയാൾ"</string>
-    <string name="to" msgid="3971614275716830581">"സ്വീകർത്താവ്"</string>
-    <string name="cc" msgid="8768828862207919684">"Cc"</string>
-    <string name="bcc" msgid="519303553518479171">"Bcc"</string>
-    <string name="subject_hint" msgid="2136470287303571827">"വിഷയം"</string>
-    <string name="body_hint" msgid="6478994981747057817">"ഇമെയിൽ രചിക്കുക"</string>
-    <string name="add_file_attachment" msgid="2604880054248593993">"ഫയൽ അറ്റാച്ചുചെയ്യുക"</string>
-    <string name="add_photo_attachment" msgid="7163589794940909528">"ചിത്രം അറ്റാച്ചുചെയ്യുക"</string>
-    <string name="save_draft" msgid="2669523480789672118">"ഡ്രാഫ്റ്റ് സംരക്ഷിക്കുക"</string>
-    <string name="discard" msgid="4905982179911608430">"നിരസിക്കുക"</string>
-    <string name="compose" msgid="2602861958391035523">"രചിക്കുക"</string>
-  <string-array name="compose_modes">
-    <item msgid="9000553538766397816">"മറുപടി നൽകുക"</item>
-    <item msgid="2767793214788399009">"എല്ലാവർക്കും മറുപടി നൽകുക"</item>
-    <item msgid="2758162027982270607">"കൈമാറുക"</item>
-  </string-array>
-    <string name="reply_attribution" msgid="1114972798797833259">"<xliff:g id="DATE">%s</xliff:g>-ന് <xliff:g id="PERSON">%s</xliff:g> എഴുതി:"</string>
-    <string name="forward_attribution" msgid="597850048345475752">"---------- കൈമാറിയ സന്ദേശം ----------&lt;br&gt;അയച്ചയാൾ: <xliff:g id="FROM">%1$s</xliff:g>&lt;br&gt;തീയതി: <xliff:g id="DATE">%2$s</xliff:g>&lt;br&gt;വിഷയം: <xliff:g id="SUBJECT">%3$s</xliff:g>&lt;br&gt;സ്വീകർത്താവ്: <xliff:g id="TO">%4$s</xliff:g>&lt;br&gt;"</string>
-    <string name="forward_attribution_no_headers" msgid="1828826576779486239">"---------- കൈമാറിയ സന്ദേശം ----------"</string>
-    <string name="cc_attribution" msgid="2928584226469388899">"Cc: <xliff:g id="CC">%1$s</xliff:g>&lt;br&gt;"</string>
-    <string name="select_attachment_type" msgid="353236686616663062">"അറ്റാച്ചുമെന്റ് തരം തിരഞ്ഞെടുക്കുക"</string>
-    <string name="too_large_to_attach_single" msgid="2669897137966512530">"<xliff:g id="MAXSIZE">%1$s</xliff:g>-യിൽ കൂടുതൽ വലുപ്പമുള്ള ഫയൽ അറ്റാച്ചുചെയ്യാനാകില്ല."</string>
-    <string name="too_large_to_attach_multiple" msgid="1620163295709036343">"ഒന്നോ അതിലധികമോ ഫയലുകൾ അറ്റാച്ചുചെയ്‌തിട്ടില്ല. പരിധി <xliff:g id="MAXSIZE">%1$s</xliff:g>."</string>
-    <string name="too_large_to_attach_additional" msgid="4964155563465970480">"ഫയൽ അറ്റാച്ചുചെയ്‌തില്ല. <xliff:g id="MAXSIZE">%1$s</xliff:g> പരിധിയിലെത്തി."</string>
-    <string name="generic_attachment_problem" msgid="4683974765387240723">"ഫയൽ അറ്റാച്ചുചെയ്യാനായില്ല."</string>
-    <string name="recipient_needed" msgid="319816879398937214">"ഒരു സ്വീകർത്താവിനെയെങ്കിലും ചേർക്കുക."</string>
-    <string name="recipient_error_dialog_title" msgid="760741480291963706">"സ്വീകർത്താവിന്റെ ഭാഗത്തെ പിശക്"</string>
-    <string name="confirm_send_title" msgid="4664971589247101530">"സന്ദേശം അയയ്‌ക്കണോ?"</string>
-    <string name="confirm_send_message_with_no_subject" msgid="1442628074022609987">"സന്ദേശ വിഷയത്തിൽ ടെക്‌സ്റ്റ് ഒന്നുമില്ല."</string>
-    <string name="confirm_send_message_with_no_body" msgid="3329355318700201516">"സന്ദേശ ബോഡിയിൽ ടെക്‌സ്റ്റ് ഒന്നുമില്ല."</string>
-    <string name="confirm_send_message" msgid="6211518590166222735">"ഈ സന്ദേശം അയയ്‌ക്കണോ?"</string>
-    <string name="message_discarded" msgid="6792661321962262024">"സന്ദേശം നിരസിച്ചു."</string>
-    <string name="signature" msgid="3172144541947408374">\n\n"<xliff:g id="SIGNATURE">%s</xliff:g>"</string>
-    <string name="custom_from_account_label" msgid="5042317430007736322">"മെയില്‍ ഈ വിലാസത്തിൽ നിന്നും അയയ്‌ക്കുക:"</string>
-    <string name="send" msgid="4269810089682120826">"അയയ്‌ക്കുക"</string>
-    <string name="mark_read" msgid="579388143288052493">"വായിച്ചതെന്ന് അടയാളപ്പെടുത്തുക"</string>
-    <string name="mark_unread" msgid="6245060538061533191">"വായിക്കാത്തതായി അടയാളപ്പെടുത്തുക"</string>
-    <string name="mute" msgid="9164839998562321569">"മ്യൂട്ടുചെയ്യുക"</string>
-    <string name="add_star" msgid="3275117671153616270">"നക്ഷത്രം ചേർക്കുക"</string>
-    <string name="remove_star" msgid="9126690774161840733">"നക്ഷത്രം നീക്കംചെയ്യുക"</string>
-    <string name="remove_folder" msgid="2379905457788576297">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> എന്നതിൽ നിന്നും നീക്കംചെയ്യുക"</string>
-    <string name="archive" msgid="5978663590021719939">"ആര്‍ക്കൈവുചെയ്യുക"</string>
-    <string name="report_spam" msgid="4106897677959987340">"സ്പാം റിപ്പോർട്ടുചെയ്യുക"</string>
-    <string name="mark_not_spam" msgid="8617774236231366651">"സ്‌പാമല്ലെന്ന് റിപ്പോർട്ടുചെയ്യുക"</string>
-    <string name="report_phishing" msgid="8454666464488413739">"വഞ്ചന റിപ്പോർട്ടുചെയ്യുക"</string>
-    <string name="delete" msgid="6784262386780496958">"ഇല്ലാതാക്കുക"</string>
-    <string name="discard_drafts" msgid="5881484193628472105">"ഡ്രാഫ്റ്റുകൾ നിരസിക്കുക"</string>
-    <string name="discard_failed" msgid="7520780769812210279">"പരാജയപ്പെട്ടവ നിരസിക്കുക"</string>
-    <string name="refresh" msgid="1533748989749277511">"പുതുക്കുക"</string>
-    <string name="reply" msgid="8337757482824207118">"മറുപടി നൽകുക"</string>
-    <string name="reply_all" msgid="5366796103758360957">"എല്ലാവർക്കും മറുപടി നൽകുക"</string>
-    <string name="resume_draft" msgid="1272723181782570649">"എഡിറ്റുചെയ്യുക"</string>
-    <string name="forward" msgid="4397585145490426320">"കൈമാറുക"</string>
-    <string name="menu_compose" msgid="4575025207594709432">"രചിക്കുക"</string>
-    <string name="menu_change_folders" msgid="2194946192901276625">"ഫോൾഡറുകൾ മാറ്റുക"</string>
-    <string name="menu_move_to" msgid="7948877550284452830">"ഇതിലേക്ക് നീക്കുക"</string>
-    <string name="menu_move_to_inbox" msgid="258554178236001444">"ഇൻബോക്സിലേക്ക് നീക്കുക"</string>
-    <string name="menu_manage_folders" msgid="8486398523679534519">"ഫോൾഡർ ക്രമീകരണങ്ങൾ"</string>
-    <string name="menu_show_original" msgid="2330398228979616661">"യാന്ത്രികമായി വലുപ്പം മാറ്റൽ പഴയപടിയാക്കുക"</string>
-    <string name="menu_settings" msgid="7993485401501778040">"ക്രമീകരണങ്ങൾ"</string>
-    <string name="menu_search" msgid="1949652467806052768">"തിരയുക"</string>
-    <string name="drawer_title" msgid="3766219846644975778">"നാവിഗേഷന്‍"</string>
-    <string name="mark_important" msgid="8781680450177768820">"പ്രധാനമെന്ന് അടയാളപ്പെടുത്തുക"</string>
-    <string name="mark_not_important" msgid="3342258155408116917">"പ്രധാനമല്ലെന്ന് അടയാളപ്പെടുത്തുക"</string>
-    <string name="add_cc_label" msgid="2249679001141195213">"Cc/Bcc ചേർക്കുക"</string>
-    <string name="add_bcc_label" msgid="963745641238037813">"Bcc ചേർക്കുക"</string>
-    <string name="quoted_text" msgid="977782904293216533">"ഉദ്ധരിച്ച ടെക്സ്റ്റ് ഉൾപ്പെടുത്തുക"</string>
-    <string name="quoted_text_label" msgid="2296807722849923934">"ടെക്‌സ്റ്റ് ഉദ്ധരിക്കുക"</string>
-    <string name="respond_inline" msgid="6609746292081928078">"ഇൻലൈനിൽ പ്രതികരിക്കുക"</string>
-    <string name="bytes" msgid="651011686747499628">"<xliff:g id="COUNT">%s</xliff:g> B"</string>
-    <string name="kilobytes" msgid="1523463964465770347">"<xliff:g id="COUNT">%s</xliff:g> KB"</string>
-    <string name="megabytes" msgid="4309397368708773323">"<xliff:g id="COUNT">%s</xliff:g> MB"</string>
-    <string name="attachment_image" msgid="6375306026208274564">"ചിത്രം"</string>
-    <string name="attachment_video" msgid="7119476472603939848">"വീഡിയോ"</string>
-    <string name="attachment_audio" msgid="7097658089301809284">"ഓഡിയോ"</string>
-    <string name="attachment_text" msgid="3485853714965922173">"ടെക്‌സ്റ്റ്"</string>
-    <string name="attachment_application_msword" msgid="2110108876623152162">"പ്രമാണം"</string>
-    <string name="attachment_application_vnd_ms_powerpoint" msgid="425353008963359230">"അവതരണം"</string>
-    <string name="attachment_application_vnd_ms_excel" msgid="5585781311136609103">"സ്പ്രെഡ്ഷീറ്റ്"</string>
-    <string name="attachment_application_pdf" msgid="4207340200944655970">"PDF"</string>
-    <string name="attachment_unknown" msgid="3360536730101083926">"<xliff:g id="ATTACHMENTEXTENSION">%s</xliff:g> ഫയൽ"</string>
-    <string name="preview_attachment" msgid="6265457626086113833">"പ്രിവ്യൂ നടത്തുക"</string>
-    <string name="save_attachment" msgid="375685179032130033">"സംരക്ഷിക്കുക"</string>
-    <string name="cancel_attachment" msgid="6900093625792891122">"റദ്ദാക്കുക"</string>
-    <string name="open_attachment" msgid="6100396056314739761">"തുറക്കുക"</string>
-    <string name="install_attachment" msgid="8119470822958087928">"ഇന്‍സ്റ്റാളുചെയ്യുക"</string>
-    <string name="download_again" msgid="8195787340878328119">"വീണ്ടും ഡൗൺലോഡുചെയ്യുക"</string>
-    <string name="more_info_attachment" msgid="2899691682394864507">"വിവരം"</string>
-    <string name="no_application_found" msgid="7309485680354949680">"അപ്ലിക്കേഷനുകൾക്കൊന്നും ഈ അറ്റാച്ചുമെന്റ് കാണുന്നതിനായി തുറക്കാനാകില്ല."</string>
-    <string name="fetching_attachment" msgid="2286628490159574159">"അറ്റാച്ചുമെന്റ് ലഭ്യമാക്കുന്നു"</string>
-    <string name="please_wait" msgid="3953824147776128899">"കാത്തിരിക്കുക…"</string>
-    <string name="saved" msgid="161536102236967534">"സംരക്ഷിച്ചു, <xliff:g id="SIZE">%s</xliff:g>"</string>
-    <string name="download_failed" msgid="3878373998269062395">"ഡൗൺലോഡുചെയ്യാനായില്ല. വീണ്ടും ശ്രമിക്കാൻ സ്‌പർശിക്കുക."</string>
-    <string name="menu_photo_save_all" msgid="2742869476474613396">"എല്ലാം സംരക്ഷിക്കുക"</string>
-    <string name="menu_photo_share" msgid="6410980274832639330">"പങ്കിടുക"</string>
-    <string name="menu_photo_share_all" msgid="3049053252719665320">"എല്ലാം പങ്കിടുക"</string>
-    <string name="menu_photo_print" msgid="3084679038179342333">"പ്രിന്റുചെയ്യുക"</string>
-    <string name="saving" msgid="6274238733828387433">"സംരക്ഷിക്കുന്നു…"</string>
-    <string name="choosertitle_sharevia" msgid="3539537264873337959">"ഇതുവഴി പങ്കിടുക"</string>
-    <string name="contextmenu_openlink" msgid="6952228183947135362">"ബ്രൗസറിൽ തുറക്കുക"</string>
-    <string name="contextmenu_copy" msgid="2584243784216385180">"പകര്‍ത്തുക"</string>
-    <string name="contextmenu_copylink" msgid="8659897702269320063">"ലിങ്ക് URL പകർത്തുക"</string>
-    <string name="contextmenu_view_image" msgid="1031172763893491000">"ചിത്രം കാണുക"</string>
-    <string name="contextmenu_dial_dot" msgid="8881095692316726628">"ഡയൽ ചെയ്യുക…"</string>
-    <string name="contextmenu_sms_dot" msgid="5319737001771622657">"SMS അയയ്‌ക്കുക…"</string>
-    <string name="contextmenu_add_contact" msgid="2310064151427072475">"കോൺടാക്റ്റ് ചേർക്കുക"</string>
-    <string name="contextmenu_send_mail" msgid="3834654593200105396">"ഇമെയിൽ അയയ്‌ക്കുക"</string>
-    <string name="contextmenu_map" msgid="5118951927399465521">"മാപ്പ്"</string>
-    <string name="contextmenu_sharelink" msgid="8670940060477758709">"ലിങ്ക് പങ്കിടുക"</string>
-    <string name="contextmenu_help" msgid="4209674157707873384">"സഹായം"</string>
-    <string name="contextmenu_feedback" msgid="8319100902136337085">"ഫീഡ്‌ബാക്ക് അയയ്‌ക്കുക"</string>
-    <!-- no translation found for num_selected (7990204488812654380) -->
-    <skip />
-  <plurals name="move_conversation">
-    <item quantity="one" msgid="237882018518207244">"സംഭാഷണം നീക്കുക"</item>
-    <item quantity="other" msgid="6639576653114141743">"<xliff:g id="ID_1">%1$d</xliff:g> സംഭാഷണങ്ങൾ നീക്കുക"</item>
-  </plurals>
-    <string name="content_description" msgid="854320355052962069">"<xliff:g id="DATE">%5$s</xliff:g>-ന് <xliff:g id="SUBJECT">%3$s</xliff:g>, <xliff:g id="SNIPPET">%4$s</xliff:g> എന്നതിനെക്കുറിച്ച് <xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g>, <xliff:g id="READSTATE">%6$s</xliff:g>"</string>
-    <string name="content_description_today" msgid="1634422834354116955">"<xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g> എന്നതിനെക്കുറിച്ചുള്ള <xliff:g id="SUBJECT">%3$s</xliff:g>, <xliff:g id="SNIPPET">%4$s</xliff:g>,  <xliff:g id="TIME">%5$s</xliff:g>, <xliff:g id="READSTATE">%6$s</xliff:g>-ന്"</string>
-    <string name="read_string" msgid="5495929677508576520">"സംഭാഷണം വായിച്ചു"</string>
-    <string name="unread_string" msgid="7342558841698083381">"സംഭാഷണം വായിക്കാത്തതാണ്"</string>
-    <string name="filtered_tag" msgid="721666921386074505">"[<xliff:g id="TAG">%1$s</xliff:g>]<xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="badge_and_subject" msgid="3979372269373936750">"<xliff:g id="ID_1">%1$s</xliff:g> <xliff:g id="ID_2">%2$s</xliff:g>"</string>
-  <plurals name="draft">
-    <item quantity="one" msgid="6717535677167943402">"ഡ്രാഫ്റ്റ്"</item>
-    <item quantity="other" msgid="1335781147509740039">"ഡ്രാഫ്‌റ്റുകൾ"</item>
-  </plurals>
-    <string name="sending" msgid="5600034886763930499">"അയയ്‌ക്കുന്നു…"</string>
-    <string name="message_retrying" msgid="5335188121407261331">"വീണ്ടും ശ്രമിക്കുന്നു…"</string>
-    <string name="message_failed" msgid="7887650587384601790">"പരാജയപ്പെട്ടു"</string>
-    <string name="send_failed" msgid="2186285547449865010">"സന്ദേശം അയച്ചില്ല."</string>
-    <string name="me_object_pronoun" msgid="4674452244417913816">"ഞാന്‍‌"</string>
-    <string name="me_subject_pronoun" msgid="7479328865714008288">"ഞാന്‍‌"</string>
-  <plurals name="confirm_delete_conversation">
-    <item quantity="one" msgid="7605755011865575440">"ഈ സംഭാഷണം ഇല്ലാതാക്കണോ?"</item>
-    <item quantity="other" msgid="1585660381208712562">"ഈ <xliff:g id="COUNT">%1$d</xliff:g> സംഭാഷണങ്ങൾ ഇല്ലാതാക്കണോ?"</item>
-  </plurals>
-  <plurals name="confirm_archive_conversation">
-    <item quantity="one" msgid="9105551557653306945">"ഈ സംഭാഷണം ആർക്കൈവുചെയ്യണോ?"</item>
-    <item quantity="other" msgid="2001972798185641108">"ഈ <xliff:g id="COUNT">%1$d</xliff:g> സംഭാഷണങ്ങൾ ആർക്കൈവുചെയ്യണോ?"</item>
-  </plurals>
-  <plurals name="confirm_discard_drafts_conversation">
-    <item quantity="one" msgid="2030421499893210789">"സന്ദേശം നിരസിക്കണോ?"</item>
-    <item quantity="other" msgid="782234447471532005">"ഈ <xliff:g id="COUNT">%1$d</xliff:g> സന്ദേശങ്ങൾ നിരസിക്കണോ?"</item>
-  </plurals>
-    <string name="confirm_discard_text" msgid="5172680524418848519">"സന്ദേശം നിരസിക്കണോ?"</string>
-    <string name="loading_conversations" msgid="7255732786298655246">"ലോഡുചെയ്യുന്നു..."</string>
-    <string name="empty_inbox" msgid="5901734942362315228">"നിങ്ങൾ എല്ലാം പൂർത്തിയാക്കി! നിങ്ങളുടെ ദിവസം ആസ്വദിക്കൂ."</string>
-    <string name="empty_search" msgid="8564899353449880818">"ക്ഷമിക്കണം! \"<xliff:g id="SEARCH_QUERY">%1$s</xliff:g>\" എന്നതിനായി ഞങ്ങൾ ഒന്നും കണ്ടെത്തിയില്ല."</string>
-    <string name="empty_spam_folder" msgid="3288985543286122800">"ഹായ്, ഇവിടെ സ്പാം ഇല്ല!"</string>
-    <string name="empty_trash_folder" msgid="378119063015945020">"ഇവിടെ ട്രാഷൊന്നുമില്ല. റീസൈക്കിൾ ചെയ്‌തതിന് നന്ദി!"</string>
-    <string name="empty_folder" msgid="3227552635613553855">"ഇവിടെ മെയിലൊന്നുമില്ല."</string>
-    <string name="getting_messages" msgid="8403333791332403244">"നിങ്ങളുടെ സന്ദേശങ്ങൾ നേടുന്നു"</string>
-    <string name="undo" msgid="8256285267701059609">"പഴയപടിയാക്കുക"</string>
-  <plurals name="conversation_unstarred">
-    <item quantity="one" msgid="839233699150563831">"<xliff:g id="COUNT">%1$d</xliff:g> സംഭാഷണത്തിന് നക്ഷത്രമിട്ടത് മാറ്റുന്നു."</item>
-    <item quantity="other" msgid="7677305734833709789">"<xliff:g id="COUNT">%1$d</xliff:g> സംഭാഷണങ്ങൾക്ക് നക്ഷത്രമിട്ടത് മാറ്റുന്നു."</item>
-  </plurals>
-  <plurals name="conversation_muted">
-    <item quantity="one" msgid="3339638225564408438">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; എണ്ണം മ്യൂട്ടുചെയ്‌തു."</item>
-    <item quantity="other" msgid="4276111931404654219">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; എണ്ണം മ്യൂട്ടുചെയ്‌തു."</item>
-  </plurals>
-  <plurals name="conversation_spammed">
-    <item quantity="one" msgid="6986172030710967687">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; എണ്ണം സ്‌പാമായി റിപ്പോർട്ടുചെയ്‌തു."</item>
-    <item quantity="other" msgid="5900913789259199137">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; എണ്ണം സ്‌പാമായി റിപ്പോർട്ടുചെയ്‌തു."</item>
-  </plurals>
-  <plurals name="conversation_not_spam">
-    <item quantity="one" msgid="2294904093653094150">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; എണ്ണം സ്‌പാമല്ലെന്ന് റിപ്പോർട്ടുചെയ്‌തു."</item>
-    <item quantity="other" msgid="4966164423991098144">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; എണ്ണം സ്‌പാമല്ലെന്ന് റിപ്പോർട്ടുചെയ്‌തു."</item>
-  </plurals>
-  <plurals name="conversation_not_important">
-    <item quantity="one" msgid="3824809189993339030">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; എണ്ണം പ്രധാനമല്ലെന്ന് അടയാളപ്പെടുത്തി."</item>
-    <item quantity="other" msgid="1215472798075869124">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; എണ്ണം പ്രധാനമല്ലെന്ന് അടയാളപ്പെടുത്തി."</item>
-  </plurals>
-  <plurals name="conversation_phished">
-    <item quantity="one" msgid="4330095881258771201">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; എണ്ണം ഫിഷിംഗ് ആയി റിപ്പോർട്ടുചെയ്‌തു."</item>
-    <item quantity="other" msgid="9218674052779504277">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; എണ്ണം ഫിഷിംഗ് ആയി റിപ്പോർട്ടുചെയ്‌തു."</item>
-  </plurals>
-  <plurals name="conversation_archived">
-    <item quantity="one" msgid="4127890884907503696">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; എണ്ണം ആർക്കൈവുചെയ്‌തു."</item>
-    <item quantity="other" msgid="7789480176789922968">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; എണ്ണം ആർക്കൈവുചെയ്‌തു."</item>
-  </plurals>
-  <plurals name="conversation_deleted">
-    <item quantity="one" msgid="5591889079235938982">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; എണ്ണം ഇല്ലാതാക്കി."</item>
-    <item quantity="other" msgid="7060256058737892078">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; എണ്ണം ഇല്ലാതാക്കി."</item>
-  </plurals>
-    <string name="deleted" msgid="7378013910782008375">"ഇല്ലാതാക്കി"</string>
-    <string name="archived" msgid="6283673603512713022">"ആർക്കൈവുചെയ്‌തു"</string>
-    <string name="folder_removed" msgid="5656281444688183676">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> എന്നതിൽ നിന്ന് നീക്കംചെയ്‌തു"</string>
-  <plurals name="conversation_folder_changed">
-    <item quantity="one" msgid="6463727361987396734">"ഫോൾഡർ മാറ്റി."</item>
-    <item quantity="other" msgid="8815390494333090939">"ഫോൾഡറുകൾ മാറ്റി."</item>
-  </plurals>
-    <string name="conversation_folder_moved" msgid="6475872337373081683">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> എന്നതിലേക്ക് നീക്കി"</string>
-    <string name="search_results_header" msgid="1529438451150580188">"ഫലങ്ങള്‍"</string>
-    <string name="search_unsupported" msgid="2873920566477359177">"ഈ അക്കൗണ്ടിൽ തിരയലിനെ പിന്തുണയ്‌ക്കുന്നില്ല."</string>
-    <string name="add_label" msgid="3285338046038610902">"ഫോൾഡർ ചേർക്കുക"</string>
-    <string name="new_incoming_messages_one" msgid="5933087567495998661">"<xliff:g id="SENDER">%s</xliff:g> എന്നയാളിൽ നിന്നുള്ള പുതിയ സന്ദേശം കാണിക്കുക."</string>
-  <plurals name="new_incoming_messages_many">
-    <item quantity="other" msgid="4394042684501388790">"<xliff:g id="COUNT">%1$d</xliff:g> പുതിയ സന്ദേശങ്ങൾ കാണിക്കുക"</item>
-  </plurals>
-    <string name="date_and_view_details" msgid="2952994746916149969">"<xliff:g id="DATE">%1$s</xliff:g> &lt;a href=\'http://www.example.com\'&gt;വിശദാംശങ്ങൾ കാണുക&lt;/a&gt;"</string>
-    <string name="hide_details" msgid="8018801050702453314">"വിശദാംശങ്ങള്‍ മറയ്‌ക്കുക‍‌"</string>
-    <string name="to_message_header" msgid="3954385178027011919">"<xliff:g id="RECIPIENTS">%1$s</xliff:g> എന്നിവർക്ക്"</string>
-    <string name="contact_info_string" msgid="6484930184867405276">"<xliff:g id="NAME">%1$s</xliff:g> എന്നയാളെ ബന്ധപ്പെടാനുള്ള വിവരം കാണിക്കുക"</string>
-    <string name="contact_info_string_default" msgid="6204228921864816351">"ബന്ധപ്പെടാനുള്ള വിവരം കാണിക്കുക"</string>
-  <plurals name="show_messages_read">
-    <item quantity="other" msgid="5285673397387128129">"<xliff:g id="COUNT">%1$d</xliff:g> പഴയ സന്ദേശങ്ങൾ"</item>
-  </plurals>
-    <string name="from_heading" msgid="48290556829713090">"അയച്ചയാൾ:"</string>
-    <string name="replyto_heading" msgid="8275255318292059079">"ഇതിലേക്ക് മറുപടി അയയ്ക്കുക:"</string>
-    <string name="to_heading" msgid="3495203282540398336">"സ്വീകർത്താവ്: "</string>
-    <string name="to_heading_no_space" msgid="679167047628308670">"സ്വീകർത്താവ്:"</string>
-    <string name="cc_heading" msgid="5603892257866345823">"Cc :"</string>
-    <string name="bcc_heading" msgid="1482186590756218269">"Bcc:"</string>
-    <string name="date_heading" msgid="4213063948406397168">"തീയതി:"</string>
-    <string name="show_images" msgid="436044894053204084">"ചിത്രങ്ങൾ കാണിക്കുക"</string>
-    <string name="always_show_images" msgid="556087529413707819">"ഈ അയച്ചയാളിൽ നിന്നുള്ള ചിത്രങ്ങൾ എല്ലായ്പ്പോഴും കാണിക്കുക"</string>
-    <string name="always_show_images_toast" msgid="3763157294047555051">"ഈ അയച്ചയാളിൽ നിന്നുള്ള ചിത്രങ്ങൾ യാന്ത്രികമായി കാണിക്കും."</string>
-    <string name="address_display_format" msgid="2098008376913966177">"<xliff:g id="NAME">%1$s</xliff:g> <xliff:g id="EMAIL">%2$s</xliff:g>"</string>
-    <string name="address_display_format_with_via_domain" msgid="8108294635074750048">"<xliff:g id="NAME">%1$s</xliff:g>, <xliff:g id="VIA_DOMAIN">%3$s</xliff:g> വഴി <xliff:g id="EMAIL">%2$s</xliff:g>"</string>
-    <string name="message_saved" msgid="3291655042310241793">"സന്ദേശം ഡ്രാഫ്‌റ്റായി സംരക്ഷിച്ചു."</string>
-    <string name="sending_message" msgid="2487846954946637084">"സന്ദേശം അയയ്‌ക്കുന്നു…"</string>
-    <string name="invalid_recipient" msgid="9157434699389936584">"വിലാസം <xliff:g id="WRONGEMAIL">%s</xliff:g> അസാധുവാണ്."</string>
-    <string name="show_elided" msgid="3456154624105704327">"ഉദ്ധരിച്ച ടെക്‌സ്റ്റ് കാണിക്കുക"</string>
-    <string name="hide_elided" msgid="5768235486834692733">"▼ ഉദ്ധരിച്ച ടെക്‌സ്റ്റ് മറയ്‌ക്കുക"</string>
-    <string name="message_invite_title" msgid="5985161025144867256">"കലണ്ടർ ക്ഷണം"</string>
-    <string name="message_invite_calendar_view" msgid="9181966650840809197">"കലണ്ടറിൽ കാണുക"</string>
-    <string name="message_invite_label_attending" msgid="4194264767870003397">"പോകുന്നുണ്ടോ?"</string>
-    <string name="message_invite_accept" msgid="8002758842580134835">"ഉണ്ട്"</string>
-    <string name="message_invite_tentative" msgid="3199418731566655887">"ചിലപ്പോൾ"</string>
-    <string name="message_invite_decline" msgid="6331040872447290777">"ഇല്ല"</string>
-    <string name="enumeration_comma" msgid="2848850136844740850">", "</string>
-    <string name="send_anyway" msgid="2727576121007079643">"ഏതുവിധേനയും അയയ്‌ക്കുക"</string>
-    <string name="ok" msgid="6178802457914802336">"ശരി"</string>
-    <string name="done" msgid="344354738335270292">"പൂർത്തിയായി"</string>
-    <string name="cancel" msgid="4831678293149626190">"റദ്ദാക്കുക"</string>
-    <string name="clear" msgid="765949970989448022">"മായ്‌ക്കുക"</string>
-    <string name="next" msgid="2662478712866255138">"അടുത്തത്"</string>
-    <string name="previous" msgid="8985379053279804274">"മുമ്പത്തേത്"</string>
-  <string-array name="sync_status">
-    <item msgid="4600303222943450797">"വിജയകരം"</item>
-    <item msgid="2972425114100316260">"കണക്ഷനൊന്നുമില്ല."</item>
-    <item msgid="8594593386776437871">"സൈൻ ഇൻ ചെയ്യാനായില്ല."</item>
-    <item msgid="1375193906551623606">"സുരക്ഷാ പിശക്."</item>
-    <item msgid="195177374927979967">"സമന്വയിപ്പിക്കാനായില്ല."</item>
-    <item msgid="8026148967150231130">"ആന്തരിക പിശക്"</item>
-    <item msgid="5442620760791553027">"സെര്‍വര്‍ പിശക്"</item>
-  </string-array>
-    <string name="tap_to_configure" msgid="137172348280050643">"സജ്ജീകരിക്കാൻ സ്‌പർശിക്കുക"</string>
-    <string name="non_synced_folder_description" msgid="3044618511909304701">"സംഭാഷണങ്ങൾ കാണാൻ, ഈ ഫോൾഡർ സമന്വയിപ്പിക്കുക."</string>
-    <string name="tap_to_configure_folder_sync" msgid="3280434399275638071">"ഫോൾഡർ സമന്വയിപ്പിക്കുക"</string>
-    <string name="widget_large_unread_count" msgid="8699435859096455837">"%d+"</string>
-    <string name="large_unseen_count" msgid="3055042669246912518">"പുതിയത് <xliff:g id="COUNT">%d</xliff:g>+"</string>
-    <string name="unseen_count" msgid="5509898665569695288">"പുതിയത് <xliff:g id="COUNT">%d</xliff:g>"</string>
-  <plurals name="actionbar_unread_messages">
-    <item quantity="other" msgid="3863201473731766006">"<xliff:g id="COUNT">%1$d</xliff:g> വായിക്കാത്തവ"</item>
-  </plurals>
-    <string name="actionbar_large_unread_count" msgid="753635978542372792">"<xliff:g id="COUNT">%1$d</xliff:g>+ വായിക്കാത്തവ"</string>
-    <string name="view_more_conversations" msgid="8377920000247101901">"കൂടുതൽ സംഭാഷണങ്ങൾ കാണുക"</string>
-    <string name="loading_conversation" msgid="7931600025861500397">"ലോഡുചെയ്യുന്നു..."</string>
-    <string name="activity_mailbox_selection" msgid="7489813868539767701">"അക്കൗണ്ട് തിരഞ്ഞെടുക്കുക"</string>
-    <string name="activity_folder_selection" msgid="8375243281001234750">"ഫോൾഡർ തിരഞ്ഞെടുക്കുക"</string>
-    <string name="folder_shortcut_widget_label" msgid="6466292659577092915">"ഇമെയിൽ ഫോൾഡർ"</string>
-    <string name="change_folders_selection_dialog_title" msgid="9174464298613273814">"ഫോൾഡറുകൾ മാറ്റുക"</string>
-    <string name="move_to_selection_dialog_title" msgid="4052506464467083621">"ഇതിലേക്ക് നീക്കുക"</string>
-    <string name="search_hint" msgid="4916671414132334289">"മെയിൽ തിരയുക"</string>
-    <!-- no translation found for search_results_loaded (1784879343458807514) -->
-    <skip />
-    <string name="network_error" msgid="5931164247644972255">"കണക്ഷനൊന്നുമില്ല"</string>
-    <string name="retry" msgid="916102442074217293">"വീണ്ടും ശ്രമിക്കുക"</string>
-    <string name="load_more" msgid="8702691358453560575">"കൂടുതൽ ലോഡ് ചെയ്യുക"</string>
-    <!-- no translation found for load_attachment (3894318473827290350) -->
-    <skip />
-    <string name="shortcut_name_title" msgid="1562534040126088628">"ഫോൾഡർ കുറുക്കുവഴിയ്‌ക്ക് പേരുനൽകുക"</string>
-    <string name="wait_for_sync_title" msgid="4577632826912823075">"സമന്വയത്തിനായി കാത്തിരിക്കുന്നു"</string>
-    <string name="not_synced_title" msgid="3600180500934086346">"അക്കൗണ്ട് സമന്വയിപ്പിച്ചില്ല."</string>
-    <string name="wait_for_manual_sync_body" msgid="2823149409451003378">"യാന്ത്രികമായി സമന്വയിപ്പിക്കുന്നതിന് ഈ അക്കൗണ്ട് സജ്ജീകരിച്ചിട്ടില്ല.\nമെയിൽ ഒരു തവണ സമന്വയിപ്പിക്കാൻ "<b>"ഇപ്പോൾ സമന്വയിപ്പിക്കുക"</b>" സ്‌പർശിക്കുക, അല്ലെങ്കിൽ യാന്ത്രികമായി മെയിൽ സമന്വയിപ്പിക്കാൻ ഈ അക്കൗണ്ട് സജ്ജീകരിക്കുന്നതിന് "<b>"സമന്വയ ക്രമീകരണങ്ങൾ മാറ്റുക"</b>" സ്‌പർശിക്കുക."</string>
-    <string name="manual_sync" msgid="2271479734895537848">"ഇപ്പോൾ സമന്വയിപ്പിക്കുക"</string>
-    <string name="change_sync_settings" msgid="3615852118397055361">"സമന്വയ ക്രമീകരണങ്ങൾ മാറ്റുക"</string>
-    <string name="photo_load_failed" msgid="577471721679146999">"ചിത്രം ലോഡുചെയ്യാനായില്ല"</string>
-    <string name="cant_move_or_change_labels" msgid="4155490583610926755">"തിരഞ്ഞെടുത്തതിൽ ഒന്നിലധികം അക്കൗണ്ടുകൾ ഉള്ളതിനാൽ നീക്കാനാകില്ല."</string>
-    <string name="multiple_new_message_notification_item" msgid="1386588046275174918"><b>"<xliff:g id="SENDER">%1$s</xliff:g>"</b>"   <xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="single_new_message_notification_big_text" msgid="2170154732664242904">"<xliff:g id="SUBJECT">%1$s</xliff:g>\n<xliff:g id="SNIPPET">%2$s</xliff:g>"</string>
-    <string name="ignore_spam_warning" msgid="8760314545535838430">"അവഗണിക്കുക, ഈ സന്ദേശം എനിക്ക് പരിചിതമാണ്"</string>
-    <string name="via_domain" msgid="537951148511529082">"<xliff:g id="VIADOMAIN">%1$s</xliff:g> മുഖേന"</string>
-    <string name="signin" msgid="4699091478139791244">"സൈൻ ഇൻ ചെയ്യുക"</string>
-    <string name="info" msgid="1357564480946178121">"വിവരം"</string>
-    <string name="report" msgid="4318141326014579036">"റിപ്പോര്‍ട്ടുചെയ്യുക"</string>
-    <string name="sync_error" msgid="1795794969006241678">"സമന്വയിപ്പിക്കാനായില്ല."</string>
-    <string name="sync_error_message" msgid="4182644657243736635">"നിങ്ങളുടെ ഉപകരണത്തിൽ സമന്വയിപ്പിക്കുന്നതിനാവശ്യമായ സംഭരണമില്ല."</string>
-    <string name="storage" msgid="4783683938444150638">"സംഭരണം"</string>
-    <string name="senders_split_token" msgid="6549228851819460081">", "</string>
-    <string name="draft_count_format" msgid="9122583199850209286">" (<xliff:g id="COUNT">%1$s</xliff:g>)"</string>
-    <string name="all_folders_heading" msgid="9023770187629170967">"എല്ലാ ഫോള്‍ഡറുകളും"</string>
-    <string name="recent_folders_heading" msgid="8943134955788867702">"പുതിയ ഫോൾഡറുകൾ"</string>
-    <string name="message_details_title" msgid="60771875776494764">"സന്ദേശ വിശദാംശങ്ങൾ"</string>
-    <string name="preference_advance_to_title" msgid="6385669491239514630">"യാന്ത്രിക-അഡ്വാൻസ്"</string>
-  <string-array name="prefEntries_autoAdvance">
-    <item msgid="1505450878799459652">"പുതിയത്"</item>
-    <item msgid="8000986144872247139">"പഴയത്"</item>
-    <item msgid="8015001161633421314">"സംഭാഷണ ലിസ്റ്റ്"</item>
-  </string-array>
-  <string-array name="prefSummaries_autoAdvance">
-    <item msgid="8221665977497655719">"നിങ്ങൾ ഇല്ലാതാക്കിയതിനുശേഷം പുതിയ സംഭാഷണം കാണിക്കുക"</item>
-    <item msgid="1721869262893378141">"നിങ്ങൾ ഇല്ലാതാക്കിയതിനുശേഷം പഴയ സംഭാഷണം കാണിക്കുക"</item>
-    <item msgid="880913657385630195">"നിങ്ങൾ ഇല്ലാതാക്കിയതിനുശേഷം സംഭാഷണ ലിസ്റ്റ് കാണിക്കുക"</item>
-  </string-array>
-    <string name="prefDialogTitle_autoAdvance" msgid="5459235590885640678">"ഇതിനുമുമ്പായി"</string>
-    <string name="clear_display_images_whitelist_title" msgid="2012677202404471778">"ചിത്രത്തിന്റെ അംഗീകാരങ്ങൾ മായ്‌ക്കുക"</string>
-    <string name="clear_display_images_whitelist_dialog_title" msgid="1942692501166848471">"ചിത്രത്തിന്റെ അംഗീകാരങ്ങൾ മായ്‌ക്കണോ?"</string>
-    <string name="clear_display_images_whitelist_dialog_message" msgid="3952553078559373729">"നിങ്ങൾ മുമ്പ് അനുവദിച്ച അയച്ചയാളുകളിൽ നിന്നുള്ള ഇൻലൈൻ ചിത്രങ്ങൾ പ്രദർശിപ്പിക്കുന്നത് അവസാനിപ്പിക്കുക."</string>
-    <string name="sender_whitelist_cleared" msgid="2490984995927904030">"ചിത്രങ്ങൾ യാന്ത്രികമായി കാണിക്കില്ല."</string>
-    <string name="preferences_signature_title" msgid="2318034745474929902">"ഒപ്പ്"</string>
-    <string name="preferences_signature_dialog_title" msgid="4801741764511807064">"ഒപ്പ്"</string>
-    <string name="preferences_signature_summary_not_set" msgid="3776614319388053784">"സജ്ജീകരിച്ചിട്ടില്ല"</string>
-    <string name="notification_action_reply" msgid="8378725460102575919">"മറുപടി നൽകുക"</string>
-    <string name="notification_action_reply_all" msgid="5693469099941000037">"എല്ലാവർക്കും മറുപടി നൽകുക"</string>
-    <string name="notification_action_archive" msgid="2884874164831039047">"ആര്‍ക്കൈവുചെയ്യുക"</string>
-    <string name="notification_action_remove_label" msgid="3714785653186750981">"ലേബല്‍ നീക്കുക"</string>
-    <string name="notification_action_delete" msgid="3201627482564624132">"ഇല്ലാതാക്കുക"</string>
-    <string name="notification_action_undo_archive" msgid="600186958134073582">"ആര്‍ക്കൈവുചെയ്തു"</string>
-    <string name="notification_action_undo_remove_label" msgid="8341924850540100690">"ലേബൽ നീക്കംചെയ്‌തു"</string>
-    <string name="notification_action_undo_delete" msgid="6915612337413587103">"ഇല്ലാതാക്കി"</string>
-    <string name="veiled_address" msgid="2670378260196977266"></string>
-    <string name="veiled_alternate_text" msgid="6343564357099807582"></string>
-    <string name="veiled_alternate_text_unknown_person" msgid="6728323554307952217"></string>
-    <string name="veiled_summary_unknown_person" msgid="2122359944161241551"></string>
-    <string name="label_notification_ticker" msgid="323232821061341014">"<xliff:g id="LABEL">%s</xliff:g>: <xliff:g id="NOTIFICATION">%s</xliff:g>"</string>
-  <plurals name="new_messages">
-    <item quantity="one" msgid="3446656407520493241">"<xliff:g id="COUNT">%1$d</xliff:g> പുതിയ സന്ദേശം"</item>
-    <item quantity="other" msgid="3531683811183204615">"<xliff:g id="COUNT">%1$d</xliff:g> പുതിയ സന്ദേശങ്ങൾ"</item>
-  </plurals>
-    <string name="single_new_message_notification_title" msgid="7954710563222504868">"<xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="silent_ringtone" msgid="1570794756474381886">"നിശബ്‌ദം"</string>
-    <string name="preference_removal_action_title" msgid="4703834472477137634">"ആർക്കൈവുചെയ്യുക &amp; ഇല്ലാതാക്കുക പ്രവർത്തനങ്ങൾ"</string>
-  <string-array name="prefEntries_removal_action">
-    <item msgid="954772302016538814">"ആർക്കൈവുചെയ്‌തവ മാത്രം കാണിക്കുക"</item>
-    <item msgid="7212690302706180254">"ഇല്ലാതാക്കിയവ മാത്രം കാണിക്കുക"</item>
-    <item msgid="2539051197590685708">"ആർക്കൈവുചെയ്‌തവയും ഇല്ലാതാക്കിയവയും കാണിക്കുക"</item>
-  </string-array>
-  <string-array name="prefSummaries_removal_action_summary">
-    <item msgid="6877416142040695022">"ആർക്കൈവുചെയ്‌തവ മാത്രം കാണിക്കുക"</item>
-    <item msgid="1510017057984222376">"ഇല്ലാതാക്കിയവ മാത്രം കാണിക്കുക"</item>
-    <item msgid="3196207224108008441">"ആർക്കൈവുചെയ്‌തവയും ഇല്ലാതാക്കിയവയും കാണിക്കുക"</item>
-  </string-array>
-    <string name="prefDialogTitle_removal_action" msgid="266548424110393246">"പ്രവർത്തനങ്ങൾ ആർക്കവുചെയ്യുക &amp; ഇല്ലാതാക്കുക"</string>
-    <string name="preferences_default_reply_all_title" msgid="7255858488369635327">"എല്ലാവർക്കും മറുപടി നൽകുക"</string>
-    <string name="preferences_default_reply_all_summary_impl" msgid="895581085692979709">"സന്ദേശത്തിനുള്ള മറുപടികൾക്ക് സ്ഥിരമായി ഉപയോഗിക്കുക"</string>
-    <string name="preference_swipe_title_archive" msgid="9122333537761282714">"ആർക്കൈവുചെയ്യാൻ സ്വൈപ്പുചെയ്യുക"</string>
-    <string name="preference_swipe_title_delete" msgid="4860474024917543711">"ഇല്ലാതാക്കാൻ സ്വൈപ്പുചെയ്യുക"</string>
-    <string name="preference_swipe_description" msgid="3036560323237015010">"സംഭാഷണ ലിസ്റ്റിൽ"</string>
-    <string name="preference_sender_image_title" msgid="7890813537985591865">"അയച്ചയാളുടെ ചിത്രം"</string>
-    <string name="preference_sender_image_description" msgid="3586817690132199889">"സംഭാഷണ ലിസ്റ്റിന് സമീപം പേര് കാണിക്കുക"</string>
-    <string name="empty_trash" msgid="3385937024924728399">"ട്രാഷ് ശൂന്യമാക്കുക"</string>
-    <string name="empty_spam" msgid="2911988289997281371">"സ്‌പാം ശൂന്യമാക്കുക"</string>
-    <string name="empty_trash_dialog_title" msgid="2104898489663621508">"ട്രാഷ് ശൂന്യമാക്കണോ?"</string>
-    <string name="empty_spam_dialog_title" msgid="1130319045917820569">"സ്‌പാം ശൂന്യമാക്കണോ?"</string>
-  <plurals name="empty_folder_dialog_message">
-    <item quantity="one" msgid="3315412388217832914">"<xliff:g id="COUNT">%1$d</xliff:g> സന്ദേശം ശാശ്വതമായി ഇല്ലാതാക്കപ്പെടും."</item>
-    <item quantity="other" msgid="263840304486020101">"<xliff:g id="COUNT">%1$d</xliff:g> സന്ദേശങ്ങൾ ശാശ്വതമായി ഇല്ലാതാക്കപ്പെടും."</item>
-  </plurals>
-    <string name="drawer_open" msgid="2285557278907103851">"നാവിഗേഷൻ ഡ്രോയർ തുറക്കുക"</string>
-    <string name="drawer_close" msgid="2065829742127544297">"നാവിഗേഷൻ ഡ്രോയർ അടയ്‌ക്കുക"</string>
-    <string name="conversation_photo_welcome_text" msgid="836483155429003787">"ഒരു സംഭാഷണം തിരഞ്ഞെടുക്കാൻ അയച്ചയാളുടെ ചിത്രത്തിൽ സ്‌പർശിക്കുക."</string>
-    <string name="long_press_to_select_tip" msgid="1660881999120625177">"ഒരു സംഭാഷണം തിരഞ്ഞെടുക്കാൻ സ്‌പർശിച്ച് പിടിക്കുക, കൂടുതൽ തിരഞ്ഞെടുക്കാൻ തുടർന്ന് സ്പർശിക്കുക."</string>
-    <string name="folder_icon_desc" msgid="6272938864914794739">"ഫോൾഡർ ഐക്കൺ"</string>
-    <string name="add_account" msgid="5905863370226612377">"അക്കൗണ്ട് ചേർക്കുക"</string>
-    <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"നുറുങ്ങ് നിരസിക്കുക"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"യാന്ത്രിക സമന്വയം ഓഫാണ്."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"ഓണാക്കാൻ സ്‌പർശിക്കുക."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"അക്കൗണ്ട് സമന്വയം ഓഫാണ്."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"<xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g> എന്നതിൽ ഓണാക്കുക."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"അക്കൗണ്ട് ക്രമീകരണങ്ങൾ"</string>
-    <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="OUTBOX">%2$s</xliff:g>-ൽ <xliff:g id="NUMBER">%1$s</xliff:g> എണ്ണം അയച്ചിട്ടില്ല"</string>
-    <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"യാന്ത്രിക സമന്വയം ഓൺ ചെയ്യണോ?"</string>
-    <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"എല്ലാ അപ്ലിക്കേഷനുകളിലും അക്കൗണ്ടുകളിലും നിങ്ങൾ വരുത്തുന്ന മാറ്റങ്ങൾ Gmail-ൽ മാത്രമല്ല, വെബിലും മറ്റ് ഉപകരങ്ങൾക്കും നിങ്ങളുടെ <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g> എന്നതിനിടയിലും സമന്വയിപ്പിക്കപ്പെടും."</string>
-    <string name="phone" msgid="4142617042507912053">"ഫോണ്‍"</string>
-    <string name="tablet" msgid="4593581125469224791">"ടാബ്‌ലെറ്റ്"</string>
-    <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="7239160845196929866">"ഓൺ ചെയ്യുക"</string>
-    <string name="show_n_more_folders" msgid="5769610839632786654">"<xliff:g id="NUMBER">%1$s</xliff:g>-ലധികം ഫോൾഡറുകൾ കാണിക്കുക"</string>
-    <string name="hide_folders" msgid="7618891933409521283">"ഫോൾഡറുകൾ മറയ്‌ക്കുക"</string>
-    <string name="print" msgid="7987949243936577207">"പ്രിന്റുചെയ്യുക"</string>
-    <string name="print_all" msgid="4011022762279519941">"എല്ലാം പ്രിന്റുചെയ്യുക"</string>
-  <plurals name="num_messages">
-    <item quantity="one" msgid="8071234386915191851">"<xliff:g id="COUNT">%1$d</xliff:g> സന്ദേശം"</item>
-    <item quantity="other" msgid="962415099931188360">"<xliff:g id="COUNT">%1$d</xliff:g> സന്ദേശങ്ങൾ"</item>
-  </plurals>
-    <string name="date_message_received_print" msgid="4168417403884350040">"<xliff:g id="DAY_AND_DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>-ന്"</string>
-    <string name="draft_to_heading" msgid="7370121943946205024">"ഡ്രാഫ്‌റ്റ് സ്വീകർത്താവ്:"</string>
-    <string name="draft_heading" msgid="7032951343184552800">"ഡ്രാഫ്റ്റ്"</string>
-    <string name="quoted_text_hidden_print" msgid="5256754205675159141">"ഉദ്ധരിച്ച ടെക്സ്റ്റ് മറച്ചിരിക്കുകയാണ്"</string>
-  <plurals name="num_attachments">
-    <item quantity="one" msgid="5494465717267988888">"<xliff:g id="COUNT">%1$d</xliff:g> അറ്റാച്ചുമെന്റ്"</item>
-    <item quantity="other" msgid="5422167728480739361">"<xliff:g id="COUNT">%1$d</xliff:g> അറ്റാച്ചുമെന്റുകൾ"</item>
-  </plurals>
-    <string name="no_subject" msgid="5622708348540036959">"(വിഷയമൊന്നുമില്ല)"</string>
-    <string name="vacation_responder" msgid="5570132559074523806">"ഒഴിവുകാല പ്രതികരണം"</string>
-    <string name="preferences_vacation_responder_title" msgid="2268482117730576123">"ഒഴിവുകാല പ്രതികരണം"</string>
-    <string name="vacation_responder_body_hint_text" msgid="9087613123105158494">"സന്ദേശം"</string>
-    <string name="send_to_contacts_text" msgid="124432913980620545">"എന്റെ കോൺടാക്റ്റുകളിലേക്ക് മാത്രം അയയ്‌ക്കുക"</string>
-    <string name="send_to_domain_text" msgid="5064559546745918393">"<xliff:g id="DOMAIN">%1$s</xliff:g> എന്നതിലേക്ക് മാത്രം അയയ്‌ക്കുക"</string>
-    <string name="pick_start_date_title" msgid="2274665037355224165">"ആരംഭിക്കുന്നത്"</string>
-    <string name="pick_end_date_title" msgid="733396083649496600">"അവസാനിക്കുന്നത് (ഓപ്‌ഷണൽ)"</string>
-    <string name="date_not_set" msgid="3251555782945051904">"സജ്ജീകരിച്ചിട്ടില്ല"</string>
-    <string name="set_end_date_dialog_title" msgid="7543009262788808443">"അവസാനിക്കുന്ന തീയതി (ഓപ്‌ഷണൽ)"</string>
-    <string name="custom_date" msgid="5794846334232367838">"ഇഷ്‌ടാനുസൃതം"</string>
-    <string name="date_none" msgid="1061426502665431412">"ഒന്നുമില്ല"</string>
-    <string name="discard_changes" msgid="5699760550972324746">"മാറ്റങ്ങൾ നിരസിക്കണോ?"</string>
-    <string name="vacation_responder_changes_saved" msgid="91448817268121249">"ഒഴിവുകാല പ്രതികരണം മാറ്റങ്ങൾ സംരക്ഷിച്ചു"</string>
-    <string name="vacation_responder_changes_discarded" msgid="21756037735539983">"ഒഴിവുകാല പ്രതികരണം മാറ്റങ്ങൾ നിരസിച്ചു"</string>
-    <string name="vacation_responder_off" msgid="4429909341193366667">"ഓഫാണ്"</string>
-    <string name="vacation_responder_on" msgid="4913238379320882449">"<xliff:g id="DATE">%1$s</xliff:g> മുതൽ ഓണാണ്"</string>
-    <string name="vacation_responder_on_with_end_date" msgid="4360941815371475955">"<xliff:g id="START_DATE">%1$s</xliff:g> മുതൽ <xliff:g id="END_DATE">%2$s</xliff:g> വരെ ഓണാണ്"</string>
-    <string name="vacation_responder_empty_subject_and_body_warning" msgid="6233629618520852439">"ഒരു വിഷയമോ സന്ദേശമോ ചേർക്കുക"</string>
-    <string name="view_entire_message" msgid="823281796655014454">"സന്ദേശം പൂര്‍ണ്ണമായി കാണുക"</string>
-    <string name="eml_loader_error_toast" msgid="6577383216635400167">"ഈ ഫയൽ തുറക്കാനാകില്ല"</string>
-    <string name="help_and_info" msgid="3708286489943154681">"സഹായം"</string>
-    <string name="help_and_feedback" msgid="7211458338163287670">"സഹായവും ഫീഡ്‌ബാക്കും"</string>
-    <string name="feedback" msgid="204247008751740034">"ഫീഡ്‌ബാക്ക് അയയ്‌ക്കുക"</string>
-    <string name="copyright" msgid="3121335168340432582">"©<xliff:g id="YEAR">%1$d</xliff:g> Google Inc."</string>
-    <string name="version" msgid="1161745345056656547">"<xliff:g id="APP_NAME">%1$s</xliff:g> പതിപ്പ് <xliff:g id="VERSION">%2$s</xliff:g>"</string>
-    <string name="view_app_page" msgid="3241990517052398927"></string>
-    <string name="print_dialog" msgid="8895536548487605661">"പ്രിന്റുചെയ്യുക…"</string>
-    <string name="copyright_information" msgid="971422874488783312">"പകർപ്പവകാശ വിവരം"</string>
-    <string name="privacy_policy" msgid="212094623396418302">"സ്വകാര്യതാ നയം"</string>
-    <string name="open_source_licenses" msgid="8643615555920977752">"ഓപ്പൺ സോഴ്‌സ് ലൈസൻസുകൾ"</string>
-    <string name="reply_choice_yes" msgid="3327633032975373220">"അതെ"</string>
-    <string name="reply_choice_no" msgid="7068775605915475207">"ഇല്ല"</string>
-    <string name="reply_choice_ok" msgid="7881073621845053152">"ശരി"</string>
-    <string name="reply_choice_hehe" msgid="6054314968043050748">"ഹാ"</string>
-    <string name="reply_choice_thanks" msgid="4978961954288364694">"നന്ദി"</string>
-    <string name="reply_choice_i_agree" msgid="2496652737796884298">"ഞാൻ അംഗീകരിക്കുന്നു"</string>
-    <string name="reply_choice_nice" msgid="4465894941302838676">"കൊള്ളാം"</string>
-    <string name="reply_on_my_way" msgid="5645003971107444269">"യാത്രയിലാണ്"</string>
-    <string name="reply_choice_later" msgid="4629219072859486413">"ശരി, നിങ്ങളുമായി ബന്ധപ്പെടാൻ എന്നെ അനുവദിക്കുക"</string>
-    <string name="reply_choice_smiling_face" msgid="1772253938506548631">":)"</string>
-    <string name="reply_choice_frowning_face" msgid="6260338807944002651">":("</string>
-    <string name="preference_header_action_confirmations" msgid="3922674681156121948">"പ്രവർത്തന സ്ഥിരീകരണങ്ങൾ"</string>
-    <string name="preference_confirm_before_delete_title" msgid="7563587174619033835">"ഇല്ലാതാക്കുന്നതിന് മുമ്പ് സ്ഥിരീകരിക്കുക"</string>
-    <string name="preference_confirm_before_archive_title" msgid="7318645995655875718">"ആർക്കൈവ് ചെയ്യുന്നതിനുമുമ്പ് സ്ഥിരീകരിക്കുക"</string>
-    <string name="preference_confirm_before_send_title" msgid="4136585783513077039">"അയയ്‌ക്കുന്നതിന് മുമ്പായി സ്ഥിരീകരിക്കുക"</string>
-    <string name="preferences_conversation_mode_title" msgid="389352009651720838">"യാന്ത്രികമായി ഉൾക്കൊള്ളിച്ച സന്ദേശങ്ങൾ"</string>
-    <string name="preferences_conversation_mode_summary" msgid="5730999743867653106">"സ്ക്രീനിലേക്ക് ഉൾക്കൊള്ളിക്കുന്നതിന് സന്ദേശങ്ങൾ ചുരുക്കുക"</string>
-    <string name="preferences_disable_snap_headers_title" msgid="7257824136988429629">"സന്ദേശ പ്രവർത്തനങ്ങൾ"</string>
-  <string-array name="prefSummaries_snapHeader">
-    <item msgid="43373293784193461">"സന്ദേശ പ്രവർത്തനങ്ങൾ എപ്പോഴും സ്ക്രീനിന് മുകളിൽ കാണിക്കുക"</item>
-    <item msgid="1765271305989996747">"പോർട്രെയ്‌റ്റിലേക്ക് തിരിക്കുമ്പോൾ സന്ദേശ പ്രവർത്തനങ്ങൾ എപ്പോഴും സ്ക്രീനിന് മുകളിൽ മാത്രം കാണിക്കുക"</item>
-    <item msgid="6311113076575333488">"സന്ദേശ ശീർഷകത്തിന് പുറത്ത് സന്ദേശ പ്രവർത്തനങ്ങൾ കാണിക്കരുത്"</item>
-  </string-array>
-  <string-array name="prefEntries_snapHeader">
-    <item msgid="6906986566816683587">"എല്ലായ്പ്പോഴും ദൃശ്യമാക്കുക"</item>
-    <item msgid="113299655708990672">"പോർട്രെയ്‌റ്റിൽ മാത്രം കാണിക്കുക"</item>
-    <item msgid="4403750311175924065">"കാണിക്കരുത്"</item>
-  </string-array>
-    <string name="clear_history_title" msgid="5536216295725760357">"തിരയൽ ചരിത്രം മായ്‌ക്കുക"</string>
-    <string name="search_history_cleared" msgid="1461946302763342640">"തിരയൽ ചരിത്രം മായ്‌ച്ചു."</string>
-    <string name="clear_history_dialog_title" msgid="3503603389704365385">"തിരയൽ ചരിത്രം മായ്ക്കണോ?"</string>
-    <string name="clear_history_dialog_message" msgid="5202922561632407778">"നിങ്ങൾ മുമ്പ് നടത്തിയ എല്ലാ തിരയലുകളും നീക്കംചെയ്യും."</string>
-    <string name="manage_accounts_menu_item" msgid="4734660452395086786">"അക്കൗണ്ടുകൾ നിയന്ത്രിക്കുക"</string>
-    <string name="general_preferences_title" msgid="4212138728220418162">"പൊതുക്രമീകരണങ്ങൾ"</string>
-    <string name="activity_preferences" msgid="8966077432517613292">"ക്രമീകരണങ്ങൾ"</string>
-</resources>
diff --git a/res/values-mn-rMN-sw600dp/strings.xml b/res/values-mn-rMN-sw600dp/strings.xml
index e83d037..a120985 100644
--- a/res/values-mn-rMN-sw600dp/strings.xml
+++ b/res/values-mn-rMN-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Cc/Bcc"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Bcc"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Фолдеруудыг удирдах"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Мессеж мэдэгдлүүдийн үндсэн хариулт болгон ашиглах"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ Cc/Bcc"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ Bcc"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Фолдеруудыг удирдах"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Мессеж мэдэгдлүүдийн үндсэн хариулт болгон ашиглах"</string>
 </resources>
diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml
index 2ca5fc2..3317e7d 100644
--- a/res/values-mn-rMN/strings.xml
+++ b/res/values-mn-rMN/strings.xml
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Хавтасны дүрс"</string>
     <string name="add_account" msgid="5905863370226612377">"Акаунт нэмэх"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Зөвлөмжийг хаах"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Автомат синк идэвхгүй."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Асаах бол хүрнэ үү."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Акаунтын синк идэвхгүй."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"<xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>-г асаах."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Акаунтын тохиргоо"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="OUTBOX">%2$s</xliff:g> дотор <xliff:g id="NUMBER">%1$s</xliff:g> илгээгүй"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Автомат синкийг асаах уу?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Gmail төдөөгүй бүх апп болон акаунтад таны хийсэн өөрчлөлтүүд нь веб болон таны бусад төхөөрөмжүүд, <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g> хооронд синк хийгдэх болно."</string>
diff --git a/res/values-mr-rIN-sw600dp/strings.xml b/res/values-mr-rIN-sw600dp/strings.xml
deleted file mode 100644
index 7c5b390..0000000
--- a/res/values-mr-rIN-sw600dp/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-     Copyright (C) 2012 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Cc/Bcc"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Bcc"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"फोल्डर व्यवस्थापित करा"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"संदेश सूचनांना देण्यात येणाऱ्या प्रत्युत्तरांसाठी डीफॉल्ट म्हणून वापरा"</string>
-</resources>
diff --git a/res/values-mr-rIN/strings.xml b/res/values-mr-rIN/strings.xml
deleted file mode 100644
index 4f98198..0000000
--- a/res/values-mr-rIN/strings.xml
+++ /dev/null
@@ -1,483 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-     Copyright (C) 2011 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="from" msgid="5159056500059912358">"प्रेषक"</string>
-    <string name="to" msgid="3971614275716830581">"प्रति"</string>
-    <string name="cc" msgid="8768828862207919684">"Cc"</string>
-    <string name="bcc" msgid="519303553518479171">"Bcc"</string>
-    <string name="subject_hint" msgid="2136470287303571827">"विषय"</string>
-    <string name="body_hint" msgid="6478994981747057817">"ईमेल तयार करा"</string>
-    <string name="add_file_attachment" msgid="2604880054248593993">"फाइल संलग्न करा"</string>
-    <string name="add_photo_attachment" msgid="7163589794940909528">"चित्र संलग्न करा"</string>
-    <string name="save_draft" msgid="2669523480789672118">"मसुदा जतन करा"</string>
-    <string name="discard" msgid="4905982179911608430">"टाकून द्या"</string>
-    <string name="compose" msgid="2602861958391035523">"तयार करा"</string>
-  <string-array name="compose_modes">
-    <item msgid="9000553538766397816">"प्रत्युत्तर द्या"</item>
-    <item msgid="2767793214788399009">"सर्वांना प्रत्युत्तर द्या"</item>
-    <item msgid="2758162027982270607">"अग्रेषित करा"</item>
-  </string-array>
-    <string name="reply_attribution" msgid="1114972798797833259">"<xliff:g id="DATE">%s</xliff:g> रोजी, <xliff:g id="PERSON">%s</xliff:g> ने लिहिले:"</string>
-    <string name="forward_attribution" msgid="597850048345475752">"---------- अग्रेषित संदेश ----------&lt;br&gt;प्रेषक: <xliff:g id="FROM">%1$s</xliff:g>&lt;br&gt;तारीख: <xliff:g id="DATE">%2$s</xliff:g>&lt;br&gt;विषय: <xliff:g id="SUBJECT">%3$s</xliff:g>&lt;br&gt;प्रति: <xliff:g id="TO">%4$s</xliff:g>&lt;br&gt;"</string>
-    <string name="forward_attribution_no_headers" msgid="1828826576779486239">"---------- अग्रेषित संदेश ----------"</string>
-    <string name="cc_attribution" msgid="2928584226469388899">"Cc: <xliff:g id="CC">%1$s</xliff:g>&lt;br&gt;"</string>
-    <string name="select_attachment_type" msgid="353236686616663062">"संलग्नकाचा प्रकार निवडा"</string>
-    <string name="too_large_to_attach_single" msgid="2669897137966512530">"<xliff:g id="MAXSIZE">%1$s</xliff:g> पेक्षा मोठी फाईल संलग्न करू शकत नाही."</string>
-    <string name="too_large_to_attach_multiple" msgid="1620163295709036343">"एक किंवा अधिक फायली संलग्न केल्या नाहीत. <xliff:g id="MAXSIZE">%1$s</xliff:g> मर्यादित करा."</string>
-    <string name="too_large_to_attach_additional" msgid="4964155563465970480">"फाइल संलग्न केली नाही. <xliff:g id="MAXSIZE">%1$s</xliff:g> मर्यादा गाठली."</string>
-    <string name="generic_attachment_problem" msgid="4683974765387240723">"फाईल संलग्न करू शकलो नाही."</string>
-    <string name="recipient_needed" msgid="319816879398937214">"किमान एक प्राप्तकर्ता जोडा."</string>
-    <string name="recipient_error_dialog_title" msgid="760741480291963706">"प्राप्तकर्ता त्रुटी"</string>
-    <string name="confirm_send_title" msgid="4664971589247101530">"संदेश पाठवायचा?"</string>
-    <string name="confirm_send_message_with_no_subject" msgid="1442628074022609987">"संदेश विषयात कोणताही मजकूर नाहीये."</string>
-    <string name="confirm_send_message_with_no_body" msgid="3329355318700201516">"संदेशाच्या मुख्य भागात कोणताही मजकूर नाहीये."</string>
-    <string name="confirm_send_message" msgid="6211518590166222735">"हा संदेश पाठवायचा?"</string>
-    <string name="message_discarded" msgid="6792661321962262024">"संदेश टाकून दिला."</string>
-    <string name="signature" msgid="3172144541947408374">\n\n"<xliff:g id="SIGNATURE">%s</xliff:g>"</string>
-    <string name="custom_from_account_label" msgid="5042317430007736322">"या स्वरुपात मेल पाठवा:"</string>
-    <string name="send" msgid="4269810089682120826">"पाठवा"</string>
-    <string name="mark_read" msgid="579388143288052493">"वाचले म्हणून चिन्हांकित करा"</string>
-    <string name="mark_unread" msgid="6245060538061533191">"न वाचलेले म्हणून चिन्हांकित करा"</string>
-    <string name="mute" msgid="9164839998562321569">"नि:शब्द करा"</string>
-    <string name="add_star" msgid="3275117671153616270">"तारा जोडा"</string>
-    <string name="remove_star" msgid="9126690774161840733">"तारा काढा"</string>
-    <string name="remove_folder" msgid="2379905457788576297">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> वरून काढा"</string>
-    <string name="archive" msgid="5978663590021719939">"संग्रहण करा"</string>
-    <string name="report_spam" msgid="4106897677959987340">"स्पॅमचा अहवाल द्या"</string>
-    <string name="mark_not_spam" msgid="8617774236231366651">"स्पॅम नाही म्हणून अहवाल द्या"</string>
-    <string name="report_phishing" msgid="8454666464488413739">"फिशिंगचा अहवाल द्या"</string>
-    <string name="delete" msgid="6784262386780496958">"हटवा"</string>
-    <string name="discard_drafts" msgid="5881484193628472105">"मसुदे टाकून द्या"</string>
-    <string name="discard_failed" msgid="7520780769812210279">"अयशस्वी झालेले टाकून द्या"</string>
-    <string name="refresh" msgid="1533748989749277511">"रीफ्रेश करा"</string>
-    <string name="reply" msgid="8337757482824207118">"प्रत्युत्तर द्या"</string>
-    <string name="reply_all" msgid="5366796103758360957">"सर्वांना प्रत्युत्तर द्या"</string>
-    <string name="resume_draft" msgid="1272723181782570649">"संपादित करा"</string>
-    <string name="forward" msgid="4397585145490426320">"अग्रेषित करा"</string>
-    <string name="menu_compose" msgid="4575025207594709432">"तयार करा"</string>
-    <string name="menu_change_folders" msgid="2194946192901276625">"फोल्डर बदला"</string>
-    <string name="menu_move_to" msgid="7948877550284452830">"यावर हलवा"</string>
-    <string name="menu_move_to_inbox" msgid="258554178236001444">"इनबॉक्समध्ये हलवा"</string>
-    <string name="menu_manage_folders" msgid="8486398523679534519">"फोल्डर सेटिंग्ज"</string>
-    <string name="menu_show_original" msgid="2330398228979616661">"स्वयं-आकार देणे उलट करा"</string>
-    <string name="menu_settings" msgid="7993485401501778040">"सेटिंग्ज"</string>
-    <string name="menu_search" msgid="1949652467806052768">"शोधा"</string>
-    <string name="drawer_title" msgid="3766219846644975778">"नेव्हिगेशन"</string>
-    <string name="mark_important" msgid="8781680450177768820">"महत्त्वाचे म्हणून चिन्हांकित करा"</string>
-    <string name="mark_not_important" msgid="3342258155408116917">"महत्त्वाचे नाही म्हणून चिन्हांकित करा"</string>
-    <string name="add_cc_label" msgid="2249679001141195213">"Cc/Bcc जोडा"</string>
-    <string name="add_bcc_label" msgid="963745641238037813">"Bcc जोडा"</string>
-    <string name="quoted_text" msgid="977782904293216533">"अवतरणचिन्हांमधील मजकूर अंतर्भूत करा"</string>
-    <string name="quoted_text_label" msgid="2296807722849923934">"मजकूर कोट करा"</string>
-    <string name="respond_inline" msgid="6609746292081928078">"इनलाइन प्रतिसाद द्या"</string>
-    <string name="bytes" msgid="651011686747499628">"<xliff:g id="COUNT">%s</xliff:g> B"</string>
-    <string name="kilobytes" msgid="1523463964465770347">"<xliff:g id="COUNT">%s</xliff:g> KB"</string>
-    <string name="megabytes" msgid="4309397368708773323">"<xliff:g id="COUNT">%s</xliff:g> MB"</string>
-    <string name="attachment_image" msgid="6375306026208274564">"प्रतिमा"</string>
-    <string name="attachment_video" msgid="7119476472603939848">"व्हिडिओ"</string>
-    <string name="attachment_audio" msgid="7097658089301809284">"ऑडिओ"</string>
-    <string name="attachment_text" msgid="3485853714965922173">"मजकूर"</string>
-    <string name="attachment_application_msword" msgid="2110108876623152162">"दस्तऐवज"</string>
-    <string name="attachment_application_vnd_ms_powerpoint" msgid="425353008963359230">"सादरीकरण"</string>
-    <string name="attachment_application_vnd_ms_excel" msgid="5585781311136609103">"स्प्रेडशीट"</string>
-    <string name="attachment_application_pdf" msgid="4207340200944655970">"PDF"</string>
-    <string name="attachment_unknown" msgid="3360536730101083926">"<xliff:g id="ATTACHMENTEXTENSION">%s</xliff:g> फाईल"</string>
-    <string name="preview_attachment" msgid="6265457626086113833">"पूर्वावलोकन"</string>
-    <string name="save_attachment" msgid="375685179032130033">"जतन करा"</string>
-    <string name="cancel_attachment" msgid="6900093625792891122">"रद्द करा"</string>
-    <string name="open_attachment" msgid="6100396056314739761">"उघडा"</string>
-    <string name="install_attachment" msgid="8119470822958087928">"स्थापित करा"</string>
-    <string name="download_again" msgid="8195787340878328119">"पुन्हा डाउनलोड करा"</string>
-    <string name="more_info_attachment" msgid="2899691682394864507">"माहिती"</string>
-    <string name="no_application_found" msgid="7309485680354949680">"पाहण्यासाठी कोणताही अॅप हे संलग्नक उघडू शकत नाही."</string>
-    <string name="fetching_attachment" msgid="2286628490159574159">"संलग्नक आणत आहे"</string>
-    <string name="please_wait" msgid="3953824147776128899">"कृपया प्रतीक्षा करा..."</string>
-    <string name="saved" msgid="161536102236967534">"जतन केला, <xliff:g id="SIZE">%s</xliff:g>"</string>
-    <string name="download_failed" msgid="3878373998269062395">"डाउनलोड करू शकलो नाही. पुन्हा प्रयत्न करण्यासाठी स्पर्श करा."</string>
-    <string name="menu_photo_save_all" msgid="2742869476474613396">"सर्व जतन करा"</string>
-    <string name="menu_photo_share" msgid="6410980274832639330">"सामायिक करा"</string>
-    <string name="menu_photo_share_all" msgid="3049053252719665320">"सर्व सामायिक करा"</string>
-    <string name="menu_photo_print" msgid="3084679038179342333">"मुद्रण करा"</string>
-    <string name="saving" msgid="6274238733828387433">"जतन करीत आहे..."</string>
-    <string name="choosertitle_sharevia" msgid="3539537264873337959">"द्वारे सामायिक करा"</string>
-    <string name="contextmenu_openlink" msgid="6952228183947135362">"ब्राउझरमध्ये उघडा"</string>
-    <string name="contextmenu_copy" msgid="2584243784216385180">"कॉपी करा"</string>
-    <string name="contextmenu_copylink" msgid="8659897702269320063">"दुवा URL कॉपी करा"</string>
-    <string name="contextmenu_view_image" msgid="1031172763893491000">"प्रतिमा पहा"</string>
-    <string name="contextmenu_dial_dot" msgid="8881095692316726628">"डायल करा…"</string>
-    <string name="contextmenu_sms_dot" msgid="5319737001771622657">"SMS…"</string>
-    <string name="contextmenu_add_contact" msgid="2310064151427072475">"संपर्क जोडा"</string>
-    <string name="contextmenu_send_mail" msgid="3834654593200105396">"ईमेल पाठवा"</string>
-    <string name="contextmenu_map" msgid="5118951927399465521">"नकाशा"</string>
-    <string name="contextmenu_sharelink" msgid="8670940060477758709">"दुवा सामायिक करा"</string>
-    <string name="contextmenu_help" msgid="4209674157707873384">"मदत"</string>
-    <string name="contextmenu_feedback" msgid="8319100902136337085">"अभिप्राय पाठवा"</string>
-    <!-- no translation found for num_selected (7990204488812654380) -->
-    <skip />
-  <plurals name="move_conversation">
-    <item quantity="one" msgid="237882018518207244">"संभाषण हलवा"</item>
-    <item quantity="other" msgid="6639576653114141743">"<xliff:g id="ID_1">%1$d</xliff:g> संभाषणे हलवा"</item>
-  </plurals>
-    <string name="content_description" msgid="854320355052962069">"<xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g> <xliff:g id="SUBJECT">%3$s</xliff:g> विषयी, <xliff:g id="SNIPPET">%4$s</xliff:g> <xliff:g id="DATE">%5$s</xliff:g> रोजी, <xliff:g id="READSTATE">%6$s</xliff:g>"</string>
-    <string name="content_description_today" msgid="1634422834354116955">"<xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g> <xliff:g id="SUBJECT">%3$s</xliff:g> विषयी, <xliff:g id="SNIPPET">%4$s</xliff:g> <xliff:g id="TIME">%5$s</xliff:g> वाजता, <xliff:g id="READSTATE">%6$s</xliff:g>"</string>
-    <string name="read_string" msgid="5495929677508576520">"संभाषण वाचले"</string>
-    <string name="unread_string" msgid="7342558841698083381">"न वाचलेले संभाषण"</string>
-    <string name="filtered_tag" msgid="721666921386074505">"[<xliff:g id="TAG">%1$s</xliff:g>]<xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="badge_and_subject" msgid="3979372269373936750">"<xliff:g id="ID_1">%1$s</xliff:g> <xliff:g id="ID_2">%2$s</xliff:g>"</string>
-  <plurals name="draft">
-    <item quantity="one" msgid="6717535677167943402">"मसुदा"</item>
-    <item quantity="other" msgid="1335781147509740039">"मसुदे"</item>
-  </plurals>
-    <string name="sending" msgid="5600034886763930499">"पाठवित आहे..."</string>
-    <string name="message_retrying" msgid="5335188121407261331">"पुन्हा प्रयत्न करत आहे…"</string>
-    <string name="message_failed" msgid="7887650587384601790">"अयशस्वी झाले"</string>
-    <string name="send_failed" msgid="2186285547449865010">"संदेश पाठवला गेला नाही."</string>
-    <string name="me_object_pronoun" msgid="4674452244417913816">"मी"</string>
-    <string name="me_subject_pronoun" msgid="7479328865714008288">"मी"</string>
-  <plurals name="confirm_delete_conversation">
-    <item quantity="one" msgid="7605755011865575440">"हे संभाषण हटवायचे?"</item>
-    <item quantity="other" msgid="1585660381208712562">"ही <xliff:g id="COUNT">%1$d</xliff:g> संभाषणे हटवायची?"</item>
-  </plurals>
-  <plurals name="confirm_archive_conversation">
-    <item quantity="one" msgid="9105551557653306945">"हे संभाषण संग्रहित करायचे?"</item>
-    <item quantity="other" msgid="2001972798185641108">"ही <xliff:g id="COUNT">%1$d</xliff:g> संभाषणे संग्रहित करायची?"</item>
-  </plurals>
-  <plurals name="confirm_discard_drafts_conversation">
-    <item quantity="one" msgid="2030421499893210789">"हा संदेश टाकून द्यायचा?"</item>
-    <item quantity="other" msgid="782234447471532005">"हे <xliff:g id="COUNT">%1$d</xliff:g> संदेश टाकून द्यायचे?"</item>
-  </plurals>
-    <string name="confirm_discard_text" msgid="5172680524418848519">"हा संदेश टाकून द्यायचा?"</string>
-    <string name="loading_conversations" msgid="7255732786298655246">"लोड करीत आहे..."</string>
-    <string name="empty_inbox" msgid="5901734942362315228">"आपण सर्व पूर्ण केले! कृपया आपला दिवस आनंदात घालवा."</string>
-    <string name="empty_search" msgid="8564899353449880818">"अरेरे! आम्हाला \"<xliff:g id="SEARCH_QUERY">%1$s</xliff:g>\" साठी काहीही सापडले नाही."</string>
-    <string name="empty_spam_folder" msgid="3288985543286122800">"वा, येथे स्पॅम नाही!"</string>
-    <string name="empty_trash_folder" msgid="378119063015945020">"येथे कचरा नाही. पुनर्प्रक्रियेबद्दल धन्यवाद!"</string>
-    <string name="empty_folder" msgid="3227552635613553855">"येथे कोणताही मेल नाहीये."</string>
-    <string name="getting_messages" msgid="8403333791332403244">"आपले संदेश मिळवत आहे"</string>
-    <string name="undo" msgid="8256285267701059609">"पूर्ववत करा"</string>
-  <plurals name="conversation_unstarred">
-    <item quantity="one" msgid="839233699150563831">"<xliff:g id="COUNT">%1$d</xliff:g> संभाषणाचे तारांकन रद्द करत आहे."</item>
-    <item quantity="other" msgid="7677305734833709789">"<xliff:g id="COUNT">%1$d</xliff:g> संभाषणांचे तारांकन रद्द करत आहे."</item>
-  </plurals>
-  <plurals name="conversation_muted">
-    <item quantity="one" msgid="3339638225564408438">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; निःशब्द केले."</item>
-    <item quantity="other" msgid="4276111931404654219">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; निःशब्द केले."</item>
-  </plurals>
-  <plurals name="conversation_spammed">
-    <item quantity="one" msgid="6986172030710967687">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; स्पॅम म्हणून अहवाल दिला."</item>
-    <item quantity="other" msgid="5900913789259199137">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; स्पॅम म्हणून अहवाल दिला."</item>
-  </plurals>
-  <plurals name="conversation_not_spam">
-    <item quantity="one" msgid="2294904093653094150">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; स्पॅम नाही म्हणून अहवाल दिला."</item>
-    <item quantity="other" msgid="4966164423991098144">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; स्पॅम नाही म्हणून अहवाल दिला."</item>
-  </plurals>
-  <plurals name="conversation_not_important">
-    <item quantity="one" msgid="3824809189993339030">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; महत्त्वाचे नाही म्हणून चिन्हांकित केले."</item>
-    <item quantity="other" msgid="1215472798075869124">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; महत्त्वाचे नाही म्हणून चिन्हांकित केले."</item>
-  </plurals>
-  <plurals name="conversation_phished">
-    <item quantity="one" msgid="4330095881258771201">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; फिशिंग म्हणून अहवाल दिला."</item>
-    <item quantity="other" msgid="9218674052779504277">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; फिशिंग म्हणून अहवाल दिला."</item>
-  </plurals>
-  <plurals name="conversation_archived">
-    <item quantity="one" msgid="4127890884907503696">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; संग्रहित."</item>
-    <item quantity="other" msgid="7789480176789922968">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; संग्रहित."</item>
-  </plurals>
-  <plurals name="conversation_deleted">
-    <item quantity="one" msgid="5591889079235938982">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; हटविले."</item>
-    <item quantity="other" msgid="7060256058737892078">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; हटविले."</item>
-  </plurals>
-    <string name="deleted" msgid="7378013910782008375">"हटविला"</string>
-    <string name="archived" msgid="6283673603512713022">"संग्रहित"</string>
-    <string name="folder_removed" msgid="5656281444688183676">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> मधून काढले"</string>
-  <plurals name="conversation_folder_changed">
-    <item quantity="one" msgid="6463727361987396734">"फोल्डर बदलले."</item>
-    <item quantity="other" msgid="8815390494333090939">"फोल्डर बदलली."</item>
-  </plurals>
-    <string name="conversation_folder_moved" msgid="6475872337373081683">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> वर हलविले"</string>
-    <string name="search_results_header" msgid="1529438451150580188">"परिणाम"</string>
-    <string name="search_unsupported" msgid="2873920566477359177">"या खात्यावर शोध समर्थित नाही."</string>
-    <string name="add_label" msgid="3285338046038610902">"फोल्डर जोडा"</string>
-    <string name="new_incoming_messages_one" msgid="5933087567495998661">"<xliff:g id="SENDER">%s</xliff:g> कडील नवीन संदेश दर्शवा."</string>
-  <plurals name="new_incoming_messages_many">
-    <item quantity="other" msgid="4394042684501388790">"<xliff:g id="COUNT">%1$d</xliff:g> नवीन संदेश दर्शवा."</item>
-  </plurals>
-    <string name="date_and_view_details" msgid="2952994746916149969">"<xliff:g id="DATE">%1$s</xliff:g> &lt;a href=\'http://www.example.com\'&gt;View details&lt;/a&gt;"</string>
-    <string name="hide_details" msgid="8018801050702453314">"तपशील लपवा"</string>
-    <string name="to_message_header" msgid="3954385178027011919">"प्रति <xliff:g id="RECIPIENTS">%1$s</xliff:g>"</string>
-    <string name="contact_info_string" msgid="6484930184867405276">"<xliff:g id="NAME">%1$s</xliff:g> साठी संपर्क माहिती दर्शवा"</string>
-    <string name="contact_info_string_default" msgid="6204228921864816351">"संपर्क माहिती दर्शवा"</string>
-  <plurals name="show_messages_read">
-    <item quantity="other" msgid="5285673397387128129">"<xliff:g id="COUNT">%1$d</xliff:g> जुने संदेश"</item>
-  </plurals>
-    <string name="from_heading" msgid="48290556829713090">"प्रेषक:"</string>
-    <string name="replyto_heading" msgid="8275255318292059079">"यांना-प्रत्युत्तर द्या:"</string>
-    <string name="to_heading" msgid="3495203282540398336">"प्रति: "</string>
-    <string name="to_heading_no_space" msgid="679167047628308670">"प्रति:"</string>
-    <string name="cc_heading" msgid="5603892257866345823">"Cc:"</string>
-    <string name="bcc_heading" msgid="1482186590756218269">"Bcc:"</string>
-    <string name="date_heading" msgid="4213063948406397168">"तारीख:"</string>
-    <string name="show_images" msgid="436044894053204084">"चित्रे दर्शवा"</string>
-    <string name="always_show_images" msgid="556087529413707819">"या प्रेषकाकडील चित्रे नेहमी दर्शवा"</string>
-    <string name="always_show_images_toast" msgid="3763157294047555051">"या प्रेषकाकडील चित्रे स्वयंचलितपणे दर्शविली जातील."</string>
-    <string name="address_display_format" msgid="2098008376913966177">"<xliff:g id="NAME">%1$s</xliff:g> <xliff:g id="EMAIL">%2$s</xliff:g>"</string>
-    <string name="address_display_format_with_via_domain" msgid="8108294635074750048">"<xliff:g id="VIA_DOMAIN">%3$s</xliff:g> मार्गे <xliff:g id="NAME">%1$s</xliff:g> <xliff:g id="EMAIL">%2$s</xliff:g>"</string>
-    <string name="message_saved" msgid="3291655042310241793">"मसुदा म्हणून संदेश जतन केला."</string>
-    <string name="sending_message" msgid="2487846954946637084">"संदेश पाठवित आहे…"</string>
-    <string name="invalid_recipient" msgid="9157434699389936584">"<xliff:g id="WRONGEMAIL">%s</xliff:g> पत्ता अवैध आहे."</string>
-    <string name="show_elided" msgid="3456154624105704327">"कोट केलेला मजकूर दर्शवा"</string>
-    <string name="hide_elided" msgid="5768235486834692733">"▼ कोट केलेला मजकूर लपवा"</string>
-    <string name="message_invite_title" msgid="5985161025144867256">"कॅलेंडर आमंत्रण"</string>
-    <string name="message_invite_calendar_view" msgid="9181966650840809197">"कॅलेंडरमध्ये पहा"</string>
-    <string name="message_invite_label_attending" msgid="4194264767870003397">"जात आहात?"</string>
-    <string name="message_invite_accept" msgid="8002758842580134835">"होय"</string>
-    <string name="message_invite_tentative" msgid="3199418731566655887">"कदाचित"</string>
-    <string name="message_invite_decline" msgid="6331040872447290777">"नाही"</string>
-    <string name="enumeration_comma" msgid="2848850136844740850">", "</string>
-    <string name="send_anyway" msgid="2727576121007079643">"कशाही प्रकारे पाठवा"</string>
-    <string name="ok" msgid="6178802457914802336">"ठिक आहे"</string>
-    <string name="done" msgid="344354738335270292">"पूर्ण केले"</string>
-    <string name="cancel" msgid="4831678293149626190">"रद्द करा"</string>
-    <string name="clear" msgid="765949970989448022">"साफ करा"</string>
-    <string name="next" msgid="2662478712866255138">"पुढील"</string>
-    <string name="previous" msgid="8985379053279804274">"मागील"</string>
-  <string-array name="sync_status">
-    <item msgid="4600303222943450797">"यशस्वी"</item>
-    <item msgid="2972425114100316260">"कोणतेही कनेक्शन नाही."</item>
-    <item msgid="8594593386776437871">"साइन इन करू शकलो नाही."</item>
-    <item msgid="1375193906551623606">"सुरक्षितता त्रुटी."</item>
-    <item msgid="195177374927979967">"संकालन करू शकलो नाही."</item>
-    <item msgid="8026148967150231130">"अंतर्गत त्रुटी"</item>
-    <item msgid="5442620760791553027">"सर्व्हर त्रुटी"</item>
-  </string-array>
-    <string name="tap_to_configure" msgid="137172348280050643">"सेट करण्यासाठी स्पर्श करा"</string>
-    <string name="non_synced_folder_description" msgid="3044618511909304701">"संभाषणे पाहण्यासाठी, हे फोल्डर संकालित करा."</string>
-    <string name="tap_to_configure_folder_sync" msgid="3280434399275638071">"फोल्डर संकालित करा"</string>
-    <string name="widget_large_unread_count" msgid="8699435859096455837">"%d+"</string>
-    <string name="large_unseen_count" msgid="3055042669246912518">"<xliff:g id="COUNT">%d</xliff:g>+ नवीन"</string>
-    <string name="unseen_count" msgid="5509898665569695288">"<xliff:g id="COUNT">%d</xliff:g> नवीन"</string>
-  <plurals name="actionbar_unread_messages">
-    <item quantity="other" msgid="3863201473731766006">"<xliff:g id="COUNT">%1$d</xliff:g> न वाचलेले"</item>
-  </plurals>
-    <string name="actionbar_large_unread_count" msgid="753635978542372792">"<xliff:g id="COUNT">%1$d</xliff:g>+ न वाचलेले"</string>
-    <string name="view_more_conversations" msgid="8377920000247101901">"अधिक संभाषणे पहा"</string>
-    <string name="loading_conversation" msgid="7931600025861500397">"लोड करीत आहे..."</string>
-    <string name="activity_mailbox_selection" msgid="7489813868539767701">"खाते निवडा"</string>
-    <string name="activity_folder_selection" msgid="8375243281001234750">"फोल्डर निवडा"</string>
-    <string name="folder_shortcut_widget_label" msgid="6466292659577092915">"ईमेल फोल्डर"</string>
-    <string name="change_folders_selection_dialog_title" msgid="9174464298613273814">"फोल्डर बदला"</string>
-    <string name="move_to_selection_dialog_title" msgid="4052506464467083621">"यावर हलवा"</string>
-    <string name="search_hint" msgid="4916671414132334289">"मेल शोधा"</string>
-    <!-- no translation found for search_results_loaded (1784879343458807514) -->
-    <skip />
-    <string name="network_error" msgid="5931164247644972255">"कोणतेही कनेक्शन नाही"</string>
-    <string name="retry" msgid="916102442074217293">"पुन्हा प्रयत्न करा"</string>
-    <string name="load_more" msgid="8702691358453560575">"अधिक लोड करा"</string>
-    <!-- no translation found for load_attachment (3894318473827290350) -->
-    <skip />
-    <string name="shortcut_name_title" msgid="1562534040126088628">"नाव फोल्डर शॉर्टकट"</string>
-    <string name="wait_for_sync_title" msgid="4577632826912823075">"संकालनाची प्रतीक्षा करत आहे"</string>
-    <string name="not_synced_title" msgid="3600180500934086346">"खाते संकालित केलेले नाही"</string>
-    <string name="wait_for_manual_sync_body" msgid="2823149409451003378">"हे खाते स्वयंचलितपणे संकालनासाठी सेट केलेले नाही.\nमेल एकदा संकालित करण्यासाठी "<b>"आता संकालित करा"</b>" ला स्पर्श करा किंवा मेल स्वयंचलितपणे संकालित करण्यासाठी हे खाते सेट करण्यासाठी "<b>"संकालन सेटिंग्ज बदला"</b>"."</string>
-    <string name="manual_sync" msgid="2271479734895537848">"आता संकालन करा"</string>
-    <string name="change_sync_settings" msgid="3615852118397055361">"संकालन सेटिंग्ज बदला"</string>
-    <string name="photo_load_failed" msgid="577471721679146999">"प्रतिमा लोड करू शकलो नाही"</string>
-    <string name="cant_move_or_change_labels" msgid="4155490583610926755">"निवडीमध्ये एकाधिक खाती असल्यामुळे हलवू शकत नाही."</string>
-    <string name="multiple_new_message_notification_item" msgid="1386588046275174918"><b>"<xliff:g id="SENDER">%1$s</xliff:g>"</b>"   <xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="single_new_message_notification_big_text" msgid="2170154732664242904">"<xliff:g id="SUBJECT">%1$s</xliff:g>\n<xliff:g id="SNIPPET">%2$s</xliff:g>"</string>
-    <string name="ignore_spam_warning" msgid="8760314545535838430">"दुर्लक्ष करा, माझा या संदेशावर विश्वास आहे"</string>
-    <string name="via_domain" msgid="537951148511529082">"<xliff:g id="VIADOMAIN">%1$s</xliff:g> द्वारे"</string>
-    <string name="signin" msgid="4699091478139791244">"साइन-इन करा"</string>
-    <string name="info" msgid="1357564480946178121">"माहिती"</string>
-    <string name="report" msgid="4318141326014579036">"अहवाल द्या"</string>
-    <string name="sync_error" msgid="1795794969006241678">"संकालन करू शकलो नाही."</string>
-    <string name="sync_error_message" msgid="4182644657243736635">"संकालन करण्यासाठी आपल्या डिव्हाइसमध्ये पुरेसे संचयन स्थान नाही."</string>
-    <string name="storage" msgid="4783683938444150638">"संचयन"</string>
-    <string name="senders_split_token" msgid="6549228851819460081">", "</string>
-    <string name="draft_count_format" msgid="9122583199850209286">" (<xliff:g id="COUNT">%1$s</xliff:g>)"</string>
-    <string name="all_folders_heading" msgid="9023770187629170967">"सर्व फोल्डर"</string>
-    <string name="recent_folders_heading" msgid="8943134955788867702">"अलीकडील फोल्डर"</string>
-    <string name="message_details_title" msgid="60771875776494764">"संदेश तपशील"</string>
-    <string name="preference_advance_to_title" msgid="6385669491239514630">"स्वयं-प्रगत"</string>
-  <string-array name="prefEntries_autoAdvance">
-    <item msgid="1505450878799459652">"नवीनतर"</item>
-    <item msgid="8000986144872247139">"अधिक जुने"</item>
-    <item msgid="8015001161633421314">"संभाषण सूची"</item>
-  </string-array>
-  <string-array name="prefSummaries_autoAdvance">
-    <item msgid="8221665977497655719">"आपण हटवल्यानंतर नवीनतर संभाषण दर्शवा"</item>
-    <item msgid="1721869262893378141">"आपण हटवल्यानंतर अधिक जुने संभाषण दर्शवा"</item>
-    <item msgid="880913657385630195">"आपण हटवल्यानंतर संभाषण सूची दर्शवा"</item>
-  </string-array>
-    <string name="prefDialogTitle_autoAdvance" msgid="5459235590885640678">"यावर अग्रिम"</string>
-    <string name="clear_display_images_whitelist_title" msgid="2012677202404471778">"चित्र मंजुरी साफ करा"</string>
-    <string name="clear_display_images_whitelist_dialog_title" msgid="1942692501166848471">"चित्र मंजुरी स्पष्ट करायची?"</string>
-    <string name="clear_display_images_whitelist_dialog_message" msgid="3952553078559373729">"आपण मागे अनुमती दिलेल्या प्रेषकांकडील इनलाइन प्रतिमा प्रदर्शित करणे थांबवा."</string>
-    <string name="sender_whitelist_cleared" msgid="2490984995927904030">"चित्रे स्वयंचलितपणे दर्शविली जाणार नाही."</string>
-    <string name="preferences_signature_title" msgid="2318034745474929902">"स्वाक्षरी"</string>
-    <string name="preferences_signature_dialog_title" msgid="4801741764511807064">"स्वाक्षरी"</string>
-    <string name="preferences_signature_summary_not_set" msgid="3776614319388053784">"सेट नाही"</string>
-    <string name="notification_action_reply" msgid="8378725460102575919">"प्रत्युत्तर द्या"</string>
-    <string name="notification_action_reply_all" msgid="5693469099941000037">"सर्वांना प्रत्युत्तर द्या"</string>
-    <string name="notification_action_archive" msgid="2884874164831039047">"संग्रहण करा"</string>
-    <string name="notification_action_remove_label" msgid="3714785653186750981">"लेबल काढा"</string>
-    <string name="notification_action_delete" msgid="3201627482564624132">"हटवा"</string>
-    <string name="notification_action_undo_archive" msgid="600186958134073582">"संग्रहित"</string>
-    <string name="notification_action_undo_remove_label" msgid="8341924850540100690">"लेबल काढले"</string>
-    <string name="notification_action_undo_delete" msgid="6915612337413587103">"हटविला"</string>
-    <string name="veiled_address" msgid="2670378260196977266"></string>
-    <string name="veiled_alternate_text" msgid="6343564357099807582"></string>
-    <string name="veiled_alternate_text_unknown_person" msgid="6728323554307952217"></string>
-    <string name="veiled_summary_unknown_person" msgid="2122359944161241551"></string>
-    <string name="label_notification_ticker" msgid="323232821061341014">"<xliff:g id="LABEL">%s</xliff:g>: <xliff:g id="NOTIFICATION">%s</xliff:g>"</string>
-  <plurals name="new_messages">
-    <item quantity="one" msgid="3446656407520493241">"<xliff:g id="COUNT">%1$d</xliff:g> नवीन संदेश"</item>
-    <item quantity="other" msgid="3531683811183204615">"<xliff:g id="COUNT">%1$d</xliff:g> नवीन संदेश"</item>
-  </plurals>
-    <string name="single_new_message_notification_title" msgid="7954710563222504868">"<xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="silent_ringtone" msgid="1570794756474381886">"मूक"</string>
-    <string name="preference_removal_action_title" msgid="4703834472477137634">"क्रियांचे संग्रहण करा आणि हटवा"</string>
-  <string-array name="prefEntries_removal_action">
-    <item msgid="954772302016538814">"केवळ संग्रहण दर्शवा"</item>
-    <item msgid="7212690302706180254">"केवळ हटवा दर्शवा"</item>
-    <item msgid="2539051197590685708">"संग्रहण करा आणि हटवा दर्शवा"</item>
-  </string-array>
-  <string-array name="prefSummaries_removal_action_summary">
-    <item msgid="6877416142040695022">"केवळ संग्रहण दर्शवा"</item>
-    <item msgid="1510017057984222376">"केवळ हटवा दर्शवा"</item>
-    <item msgid="3196207224108008441">"संग्रहण करा आणि हटवा दर्शवा"</item>
-  </string-array>
-    <string name="prefDialogTitle_removal_action" msgid="266548424110393246">"क्रियांचे संग्रहण करा आणि हटवा"</string>
-    <string name="preferences_default_reply_all_title" msgid="7255858488369635327">"सर्वांना प्रत्युत्तर द्या"</string>
-    <string name="preferences_default_reply_all_summary_impl" msgid="895581085692979709">"संदेश प्रत्युत्तरांसाठी डीफॉल्ट म्हणून वापरा"</string>
-    <string name="preference_swipe_title_archive" msgid="9122333537761282714">"संग्रहण करण्यासाठी स्वाइप करा"</string>
-    <string name="preference_swipe_title_delete" msgid="4860474024917543711">"हटविण्यासाठी स्वाइप करा"</string>
-    <string name="preference_swipe_description" msgid="3036560323237015010">"संभाषण सूचीमध्ये"</string>
-    <string name="preference_sender_image_title" msgid="7890813537985591865">"प्रेषक प्रतिमा"</string>
-    <string name="preference_sender_image_description" msgid="3586817690132199889">"संभाषण सूचीमध्ये बाजूचे नाव दर्शवा"</string>
-    <string name="empty_trash" msgid="3385937024924728399">"कचरा रिक्त करा"</string>
-    <string name="empty_spam" msgid="2911988289997281371">"स्पॅम रिक्त करा"</string>
-    <string name="empty_trash_dialog_title" msgid="2104898489663621508">"कचरा रिक्त करायचा?"</string>
-    <string name="empty_spam_dialog_title" msgid="1130319045917820569">"स्पॅम रिक्त करायचे?"</string>
-  <plurals name="empty_folder_dialog_message">
-    <item quantity="one" msgid="3315412388217832914">"<xliff:g id="COUNT">%1$d</xliff:g> संदेश कायमचा हटविला जाईल."</item>
-    <item quantity="other" msgid="263840304486020101">"<xliff:g id="COUNT">%1$d</xliff:g> संदेश कायमचे हटविले जातील."</item>
-  </plurals>
-    <string name="drawer_open" msgid="2285557278907103851">"नेव्हिगेशन ड्रॉवर उघडा"</string>
-    <string name="drawer_close" msgid="2065829742127544297">"नेव्हिगेशन ड्रॉवर बंद करा"</string>
-    <string name="conversation_photo_welcome_text" msgid="836483155429003787">"ते संभाषण निवडण्यासाठी प्रेषक प्रतिमेस स्पर्श करा."</string>
-    <string name="long_press_to_select_tip" msgid="1660881999120625177">"एक संभाषण निवडण्यासाठी स्पर्श करा आणि धरून ठेवा, नंतर अधिक निवडण्यासाठी स्पर्श करा."</string>
-    <string name="folder_icon_desc" msgid="6272938864914794739">"फोल्डर चिन्ह"</string>
-    <string name="add_account" msgid="5905863370226612377">"खाते जोडा"</string>
-    <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"टीप डिसमिस करा"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"स्वयं-संकालन बंद आहे."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"चालू करण्यासाठी स्पर्श करा."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"खाते संकालन बंद आहे."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"<xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g> मध्ये चालू करा."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"खाते सेटिंग्ज"</string>
-    <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="OUTBOX">%2$s</xliff:g> मधील <xliff:g id="NUMBER">%1$s</xliff:g> न पाठवलेले"</string>
-    <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"स्वयं- संकालन चालू करायचे?"</string>
-    <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"फक्त Gmail मध्ये नाही, तर आपण सर्व अॅप्स आणि खात्यांमध्ये करता ते बदल, वेब, आपले अन्य डिव्हाइसेस आणि आपला <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g> या दरम्यान संकालित केले जातील."</string>
-    <string name="phone" msgid="4142617042507912053">"फोन"</string>
-    <string name="tablet" msgid="4593581125469224791">"टॅब्लेट"</string>
-    <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="7239160845196929866">"चालू करा"</string>
-    <string name="show_n_more_folders" msgid="5769610839632786654">"अधिक <xliff:g id="NUMBER">%1$s</xliff:g> फोल्डर दर्शवा"</string>
-    <string name="hide_folders" msgid="7618891933409521283">"फोल्डर लपवा"</string>
-    <string name="print" msgid="7987949243936577207">"मुद्रण करा"</string>
-    <string name="print_all" msgid="4011022762279519941">"सर्व मुद्रित करा"</string>
-  <plurals name="num_messages">
-    <item quantity="one" msgid="8071234386915191851">"<xliff:g id="COUNT">%1$d</xliff:g> संदेश"</item>
-    <item quantity="other" msgid="962415099931188360">"<xliff:g id="COUNT">%1$d</xliff:g> संदेश"</item>
-  </plurals>
-    <string name="date_message_received_print" msgid="4168417403884350040">"<xliff:g id="DAY_AND_DATE">%1$s</xliff:g> रोजी <xliff:g id="TIME">%2$s</xliff:g> वाजता"</string>
-    <string name="draft_to_heading" msgid="7370121943946205024">"मसुदा प्रति:"</string>
-    <string name="draft_heading" msgid="7032951343184552800">"मसुदा"</string>
-    <string name="quoted_text_hidden_print" msgid="5256754205675159141">"अवतरणचिन्हांकित मजकूर लपवला आहे"</string>
-  <plurals name="num_attachments">
-    <item quantity="one" msgid="5494465717267988888">"<xliff:g id="COUNT">%1$d</xliff:g> संलग्नक"</item>
-    <item quantity="other" msgid="5422167728480739361">"<xliff:g id="COUNT">%1$d</xliff:g> संलग्नके"</item>
-  </plurals>
-    <string name="no_subject" msgid="5622708348540036959">"(विषय नाही)"</string>
-    <string name="vacation_responder" msgid="5570132559074523806">"सुट्टीतील उत्तरप्रेषक"</string>
-    <string name="preferences_vacation_responder_title" msgid="2268482117730576123">"सुट्टीतील उत्तरप्रेषक"</string>
-    <string name="vacation_responder_body_hint_text" msgid="9087613123105158494">"संदेश"</string>
-    <string name="send_to_contacts_text" msgid="124432913980620545">"केवळ माझ्या संपर्कांवर पाठवा"</string>
-    <string name="send_to_domain_text" msgid="5064559546745918393">"केवळ <xliff:g id="DOMAIN">%1$s</xliff:g> वर पाठवा"</string>
-    <string name="pick_start_date_title" msgid="2274665037355224165">"प्रारंभ होतो"</string>
-    <string name="pick_end_date_title" msgid="733396083649496600">"समाप्त होते (पर्यायी)"</string>
-    <string name="date_not_set" msgid="3251555782945051904">"सेट नाही"</string>
-    <string name="set_end_date_dialog_title" msgid="7543009262788808443">"समाप्ती तारीख (पर्यायी)"</string>
-    <string name="custom_date" msgid="5794846334232367838">"सानुकूल"</string>
-    <string name="date_none" msgid="1061426502665431412">"काहीही नाही"</string>
-    <string name="discard_changes" msgid="5699760550972324746">"बदल टाकून द्यायचे?"</string>
-    <string name="vacation_responder_changes_saved" msgid="91448817268121249">"सुट्टीतील उत्तरप्रेषक बदल जतन केले"</string>
-    <string name="vacation_responder_changes_discarded" msgid="21756037735539983">"सुट्टीतील उत्तरप्रेषक बदल टाकून दिले"</string>
-    <string name="vacation_responder_off" msgid="4429909341193366667">"बंद"</string>
-    <string name="vacation_responder_on" msgid="4913238379320882449">"चालू, <xliff:g id="DATE">%1$s</xliff:g> पासून"</string>
-    <string name="vacation_responder_on_with_end_date" msgid="4360941815371475955">"चालू, <xliff:g id="START_DATE">%1$s</xliff:g> पासून <xliff:g id="END_DATE">%2$s</xliff:g> पर्यंत"</string>
-    <string name="vacation_responder_empty_subject_and_body_warning" msgid="6233629618520852439">"एक विषय किंवा संदेश जोडा"</string>
-    <string name="view_entire_message" msgid="823281796655014454">"संपूर्ण संदेश पहा"</string>
-    <string name="eml_loader_error_toast" msgid="6577383216635400167">"ही फाईल उघडू शकत नाही"</string>
-    <string name="help_and_info" msgid="3708286489943154681">"मदत"</string>
-    <string name="help_and_feedback" msgid="7211458338163287670">"मदत आणि अभिप्राय"</string>
-    <string name="feedback" msgid="204247008751740034">"अभिप्राय पाठवा"</string>
-    <string name="copyright" msgid="3121335168340432582">"©<xliff:g id="YEAR">%1$d</xliff:g> Google Inc."</string>
-    <string name="version" msgid="1161745345056656547">"<xliff:g id="APP_NAME">%1$s</xliff:g> आवृत्ती <xliff:g id="VERSION">%2$s</xliff:g>"</string>
-    <string name="view_app_page" msgid="3241990517052398927"></string>
-    <string name="print_dialog" msgid="8895536548487605661">"मुद्रण करा…"</string>
-    <string name="copyright_information" msgid="971422874488783312">"कॉपीराईट माहिती"</string>
-    <string name="privacy_policy" msgid="212094623396418302">"गोपनीयता धोरण"</string>
-    <string name="open_source_licenses" msgid="8643615555920977752">"मुक्त स्त्रोत परवाने"</string>
-    <string name="reply_choice_yes" msgid="3327633032975373220">"होय"</string>
-    <string name="reply_choice_no" msgid="7068775605915475207">"नाही"</string>
-    <string name="reply_choice_ok" msgid="7881073621845053152">"ठीक आहे"</string>
-    <string name="reply_choice_hehe" msgid="6054314968043050748">"हेहे"</string>
-    <string name="reply_choice_thanks" msgid="4978961954288364694">"धन्यवाद"</string>
-    <string name="reply_choice_i_agree" msgid="2496652737796884298">"मी सहमत आहे"</string>
-    <string name="reply_choice_nice" msgid="4465894941302838676">"छान"</string>
-    <string name="reply_on_my_way" msgid="5645003971107444269">"मी वाटेत आहे"</string>
-    <string name="reply_choice_later" msgid="4629219072859486413">"ठीक, मला आपल्याशी संपर्क करू द्या"</string>
-    <string name="reply_choice_smiling_face" msgid="1772253938506548631">":)"</string>
-    <string name="reply_choice_frowning_face" msgid="6260338807944002651">":("</string>
-    <string name="preference_header_action_confirmations" msgid="3922674681156121948">"क्रिया पुष्टीकरणे"</string>
-    <string name="preference_confirm_before_delete_title" msgid="7563587174619033835">"हटविण्यापूर्वी पुष्टी करा"</string>
-    <string name="preference_confirm_before_archive_title" msgid="7318645995655875718">"संग्रहण करण्यापूर्वी पुष्टी करा"</string>
-    <string name="preference_confirm_before_send_title" msgid="4136585783513077039">"पाठविण्यापूर्वी पुष्टी करा"</string>
-    <string name="preferences_conversation_mode_title" msgid="389352009651720838">"संदेश स्वयं-फिट करा"</string>
-    <string name="preferences_conversation_mode_summary" msgid="5730999743867653106">"स्क्रीनवर फिट करण्यासाठी संदेश आकुंचित करा"</string>
-    <string name="preferences_disable_snap_headers_title" msgid="7257824136988429629">"संदेश क्रिया"</string>
-  <string-array name="prefSummaries_snapHeader">
-    <item msgid="43373293784193461">"नेहमी स्क्रीनच्या शीर्षस्थानी संदेश क्रिया दर्शवा"</item>
-    <item msgid="1765271305989996747">"केवळ पोर्ट्रेटवर फिरविले जाते तेव्हा स्क्रीनच्या शीर्षस्थानी संदेश कृती दर्शवा"</item>
-    <item msgid="6311113076575333488">"संदेश शीर्षलेखाबाहेर संदेश क्रिया दर्शवू नका"</item>
-  </string-array>
-  <string-array name="prefEntries_snapHeader">
-    <item msgid="6906986566816683587">"नेहमी दर्शवा"</item>
-    <item msgid="113299655708990672">"केवळ पोर्ट्रेटमध्ये दर्शवा"</item>
-    <item msgid="4403750311175924065">"दर्शवू नका"</item>
-  </string-array>
-    <string name="clear_history_title" msgid="5536216295725760357">"शोध इतिहास साफ करा"</string>
-    <string name="search_history_cleared" msgid="1461946302763342640">"शोध इतिहास साफ केला."</string>
-    <string name="clear_history_dialog_title" msgid="3503603389704365385">"शोध इतिहास साफ करायचा?"</string>
-    <string name="clear_history_dialog_message" msgid="5202922561632407778">"आपण यापूर्वी केलेले सर्व शोध काढले जातील."</string>
-    <string name="manage_accounts_menu_item" msgid="4734660452395086786">"खात्‍यांचे व्यवस्थापन करा"</string>
-    <string name="general_preferences_title" msgid="4212138728220418162">"सामान्य सेटिंग्ज"</string>
-    <string name="activity_preferences" msgid="8966077432517613292">"सेटिंग्ज"</string>
-</resources>
diff --git a/res/values-ms-rMY-sw600dp/strings.xml b/res/values-ms-rMY-sw600dp/strings.xml
index aa64b81..85051e8 100644
--- a/res/values-ms-rMY-sw600dp/strings.xml
+++ b/res/values-ms-rMY-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Sk/Skt"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Skt"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Urus folder"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Gunakan sebagai tetapan lalai untuk balasan kepada pemberitahuan mesej"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ Sk/Skt"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ Skt"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Urus folder"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Gunakan sebagai tetapan lalai untuk balasan kepada pemberitahuan mesej"</string>
 </resources>
diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml
index cf1efcd..b65acc7 100644
--- a/res/values-ms-rMY/strings.xml
+++ b/res/values-ms-rMY/strings.xml
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Ikon folder"</string>
     <string name="add_account" msgid="5905863370226612377">"Tambah akaun"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Ketepikan petua"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Auto penyegerakan dimatikan."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Sentuh untuk menghidupkan."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Penyegerakan akaun dimatikan."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Hidupkan dalam <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Tetapan akaun"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> tidak dihantar dalam <xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Hidupkan auto segerak?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Perubahan yang anda lakukan kepada semua apl dan akaun, bukan hanya Gmail, akan disegerakkan antara web, peranti anda yang lain dan <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g> anda."</string>
diff --git a/res/values-my-rMM-sw600dp/strings.xml b/res/values-my-rMM-sw600dp/strings.xml
deleted file mode 100644
index 65ec1c9..0000000
--- a/res/values-my-rMM-sw600dp/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-     Copyright (C) 2012 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Cc/Bcc"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Bcc"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"ဖိုလ်ဒါများ စီမံရန်"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"အကြောင်းကြားချက် စာများကို တုံ့ပြန်ရန် ပုံသေအဖြစ် အသုံးပြု"</string>
-</resources>
diff --git a/res/values-my-rMM/strings.xml b/res/values-my-rMM/strings.xml
deleted file mode 100644
index 1d001a7..0000000
--- a/res/values-my-rMM/strings.xml
+++ /dev/null
@@ -1,483 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-     Copyright (C) 2011 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="from" msgid="5159056500059912358">"မှ"</string>
-    <string name="to" msgid="3971614275716830581">"သို့​"</string>
-    <string name="cc" msgid="8768828862207919684">"Cc"</string>
-    <string name="bcc" msgid="519303553518479171">"Bcc"</string>
-    <string name="subject_hint" msgid="2136470287303571827">"အကြောင်းအရာ"</string>
-    <string name="body_hint" msgid="6478994981747057817">"အီးမေးလ် ရေးဖွဲ့ရန်"</string>
-    <string name="add_file_attachment" msgid="2604880054248593993">"ဖိုင်ကို ပူးတွဲရန်"</string>
-    <string name="add_photo_attachment" msgid="7163589794940909528">"ပုံကို ပူးတွဲရန်"</string>
-    <string name="save_draft" msgid="2669523480789672118">"မူကြမ်းကို သိမ်းဆည်းရန်"</string>
-    <string name="discard" msgid="4905982179911608430">"စွန့်ပစ်ရန်"</string>
-    <string name="compose" msgid="2602861958391035523">"ရေးဖွဲ့ရန်"</string>
-  <string-array name="compose_modes">
-    <item msgid="9000553538766397816">"ဖြေကြားရန်"</item>
-    <item msgid="2767793214788399009">"အားလုံးကို ဖြေ"</item>
-    <item msgid="2758162027982270607">"တစ်ဆင့်ပို့"</item>
-  </string-array>
-    <string name="reply_attribution" msgid="1114972798797833259">"<xliff:g id="DATE">%s</xliff:g>တွင် <xliff:g id="PERSON">%s</xliff:g> ရေးခဲ့:"</string>
-    <string name="forward_attribution" msgid="597850048345475752">"---------- တစ်ဆင့်ပို့လိုက်သည့် စာ----------&lt;br&gt;မှ - <xliff:g id="FROM">%1$s</xliff:g>&lt;br&gt;ရက်စွဲ: <xliff:g id="DATE">%2$s</xliff:g>&lt;br&gt;အကြောင်းအရာ: <xliff:g id="SUBJECT">%3$s</xliff:g>&lt;br&gt;သို့: <xliff:g id="TO">%4$s</xliff:g>&lt;br&gt;"</string>
-    <string name="forward_attribution_no_headers" msgid="1828826576779486239">"တစ်ဆင့်ပို့လိုက်သည့် စာ"</string>
-    <string name="cc_attribution" msgid="2928584226469388899">"Cc: <xliff:g id="CC">%1$s</xliff:g>&lt;br&gt;"</string>
-    <string name="select_attachment_type" msgid="353236686616663062">"ပူးတွဲမှု ပုံစံကို ရွေးချယ်ရန်"</string>
-    <string name="too_large_to_attach_single" msgid="2669897137966512530">"<xliff:g id="MAXSIZE">%1$s</xliff:g> ထက် ပိုကြီးသော ဖိုင်ကို မပူးတွဲနိုင်ပါ။"</string>
-    <string name="too_large_to_attach_multiple" msgid="1620163295709036343">"ဖိုင် တစ်ခု သို့မဟုတ် ပိုများတာကို မပူးတွဲခဲ့ပါ။ <xliff:g id="MAXSIZE">%1$s</xliff:g> ကန့်သတ်မှု။"</string>
-    <string name="too_large_to_attach_additional" msgid="4964155563465970480">"ဖိုင် ပူးတွဲ မပေးခဲ့ပါ။ <xliff:g id="MAXSIZE">%1$s</xliff:g> ကန့်သတ်ချက် ပြည့်သွားပြီ။"</string>
-    <string name="generic_attachment_problem" msgid="4683974765387240723">"ဖိုင်ကို မပူးတွဲနိုင်ခဲ့ပါ။"</string>
-    <string name="recipient_needed" msgid="319816879398937214">"လက်ခံသူ အနည်းဆုံး တစ်ဦးကို ထည့်ပါ။"</string>
-    <string name="recipient_error_dialog_title" msgid="760741480291963706">"ရရှိသူ အမှား"</string>
-    <string name="confirm_send_title" msgid="4664971589247101530">"စာကို ပို့ရမလား?"</string>
-    <string name="confirm_send_message_with_no_subject" msgid="1442628074022609987">"စာ အကြောင်းအရာ ထဲတွင် စာသား မရှိ။"</string>
-    <string name="confirm_send_message_with_no_body" msgid="3329355318700201516">"စာ ကိုယ်ထည် ထဲတွင် စာသား မရှိ။"</string>
-    <string name="confirm_send_message" msgid="6211518590166222735">"ဤ စာကို ပို့မလား?"</string>
-    <string name="message_discarded" msgid="6792661321962262024">"စာကို စွန့်ပစ်ခဲ့သည်။"</string>
-    <string name="signature" msgid="3172144541947408374">\n\n"<xliff:g id="SIGNATURE">%s</xliff:g>"</string>
-    <string name="custom_from_account_label" msgid="5042317430007736322">"အဖြစ် စာပို့:"</string>
-    <string name="send" msgid="4269810089682120826">"ပို့ရန်"</string>
-    <string name="mark_read" msgid="579388143288052493">"ဖတ်ပြီး မှတ်သား"</string>
-    <string name="mark_unread" msgid="6245060538061533191">"မဖတ်ရသေးဟု မှတ်သားရန်"</string>
-    <string name="mute" msgid="9164839998562321569">"အသံတိတ်"</string>
-    <string name="add_star" msgid="3275117671153616270">"စတား ထည့်ရန်"</string>
-    <string name="remove_star" msgid="9126690774161840733">"စတားကို ဖယ်ရှားရန်"</string>
-    <string name="remove_folder" msgid="2379905457788576297">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> မှ ဖယ်ရှားရန်"</string>
-    <string name="archive" msgid="5978663590021719939">"မော်ကွန်းတင်ရန်"</string>
-    <string name="report_spam" msgid="4106897677959987340">"စပမ်ကို သတင်းပို့ရန်"</string>
-    <string name="mark_not_spam" msgid="8617774236231366651">"စပမ် မဟုတ်ဟု အစီရင်ခံ"</string>
-    <string name="report_phishing" msgid="8454666464488413739">"မျှားယူမှုကို သတင်းပို့ရန်"</string>
-    <string name="delete" msgid="6784262386780496958">"ဖျက်ပစ်ရန်"</string>
-    <string name="discard_drafts" msgid="5881484193628472105">"မူကြမ်းများကို စွန့်ပစ်ရန်"</string>
-    <string name="discard_failed" msgid="7520780769812210279">"မအောင်မြင်သော ဖျက်သိမ်းမှု"</string>
-    <string name="refresh" msgid="1533748989749277511">"ဆန်းသစ်ယူရန်"</string>
-    <string name="reply" msgid="8337757482824207118">"ဖြေကြားရန်"</string>
-    <string name="reply_all" msgid="5366796103758360957">"အားလုံးကို ဖြေကြား"</string>
-    <string name="resume_draft" msgid="1272723181782570649">"တည်းဖြတ်ရန်"</string>
-    <string name="forward" msgid="4397585145490426320">"တစ်ဆင့်ပို့"</string>
-    <string name="menu_compose" msgid="4575025207594709432">"စာရေးဖွဲ့ရန်"</string>
-    <string name="menu_change_folders" msgid="2194946192901276625">"ဖိုလ်ဒါများ ပြောင်းရန်"</string>
-    <string name="menu_move_to" msgid="7948877550284452830">"ရွှေ့ရန်"</string>
-    <string name="menu_move_to_inbox" msgid="258554178236001444">"ဝင်စာသို့ ရွှေ့ရန်"</string>
-    <string name="menu_manage_folders" msgid="8486398523679534519">"ဖိုလ်ဒါ ဆက်တင်များ"</string>
-    <string name="menu_show_original" msgid="2330398228979616661">"အော်တို-ဆိုက် ပြောင်းရန်"</string>
-    <string name="menu_settings" msgid="7993485401501778040">"ဆက်တင်များ"</string>
-    <string name="menu_search" msgid="1949652467806052768">"ရှာဖွေရန်"</string>
-    <string name="drawer_title" msgid="3766219846644975778">"သွားလာရန်"</string>
-    <string name="mark_important" msgid="8781680450177768820">"အရေးကြီးဟု မှတ်သား"</string>
-    <string name="mark_not_important" msgid="3342258155408116917">"အရေးမကြီးတာ မှတ်သားရန်"</string>
-    <string name="add_cc_label" msgid="2249679001141195213">"Cc/Bcc ကို ထည့်ရန်"</string>
-    <string name="add_bcc_label" msgid="963745641238037813">"Bcc ကို ထည့်ရန်"</string>
-    <string name="quoted_text" msgid="977782904293216533">"ကိုးကား စာသားကို ထည့်ဖေါ်ပြရန်"</string>
-    <string name="quoted_text_label" msgid="2296807722849923934">"ကိုးကား စာသား"</string>
-    <string name="respond_inline" msgid="6609746292081928078">"အင်လိုင်း တုံ့ပြန်ရန်"</string>
-    <string name="bytes" msgid="651011686747499628">"<xliff:g id="COUNT">%s</xliff:g> B"</string>
-    <string name="kilobytes" msgid="1523463964465770347">"<xliff:g id="COUNT">%s</xliff:g> KB"</string>
-    <string name="megabytes" msgid="4309397368708773323">"<xliff:g id="COUNT">%s</xliff:g> MB"</string>
-    <string name="attachment_image" msgid="6375306026208274564">"ပုံ"</string>
-    <string name="attachment_video" msgid="7119476472603939848">"ဗီဒီယို"</string>
-    <string name="attachment_audio" msgid="7097658089301809284">"အသံ"</string>
-    <string name="attachment_text" msgid="3485853714965922173">"စာသား"</string>
-    <string name="attachment_application_msword" msgid="2110108876623152162">"စာတမ်း"</string>
-    <string name="attachment_application_vnd_ms_powerpoint" msgid="425353008963359230">"မိတ်ဆက် တင်ပြမှု"</string>
-    <string name="attachment_application_vnd_ms_excel" msgid="5585781311136609103">"ဇယားစာတမ်း"</string>
-    <string name="attachment_application_pdf" msgid="4207340200944655970">"PDF"</string>
-    <string name="attachment_unknown" msgid="3360536730101083926">"<xliff:g id="ATTACHMENTEXTENSION">%s</xliff:g> ဖိုင်"</string>
-    <string name="preview_attachment" msgid="6265457626086113833">"အစမ်းကြည့်မှု"</string>
-    <string name="save_attachment" msgid="375685179032130033">"သိမ်းဆည်း"</string>
-    <string name="cancel_attachment" msgid="6900093625792891122">"ထားတော့"</string>
-    <string name="open_attachment" msgid="6100396056314739761">"ဖွင့်ရန်"</string>
-    <string name="install_attachment" msgid="8119470822958087928">"တပ်ဆင်ရန်"</string>
-    <string name="download_again" msgid="8195787340878328119">"ဒေါင်းလုဒ် ထပ်လုပ"</string>
-    <string name="more_info_attachment" msgid="2899691682394864507">"အင်ဖို"</string>
-    <string name="no_application_found" msgid="7309485680354949680">"မည်သည့်appကမှ ဤပူးတွဲမှုကို ကြည့်ရှုရန် မဖွင့်နိုင်။"</string>
-    <string name="fetching_attachment" msgid="2286628490159574159">"ပူးတွဲမှုကို သွားယူနေ"</string>
-    <string name="please_wait" msgid="3953824147776128899">"ကျေးဇူးပြု၍ စောင့်ပါ…"</string>
-    <string name="saved" msgid="161536102236967534">"<xliff:g id="SIZE">%s</xliff:g> သိမ်းဆည်းပြီး"</string>
-    <string name="download_failed" msgid="3878373998269062395">"ဒေါင်းလုဒ် မလုပ်နိုင်ခဲ့ပါ။ ထပ်စမ်းရန် ထိပါ။"</string>
-    <string name="menu_photo_save_all" msgid="2742869476474613396">"အားလုံး သိမ်းဆည်း"</string>
-    <string name="menu_photo_share" msgid="6410980274832639330">"မျှဝေရန်"</string>
-    <string name="menu_photo_share_all" msgid="3049053252719665320">"အားလုံးကို မျှဝေရန်"</string>
-    <string name="menu_photo_print" msgid="3084679038179342333">"ပရင့်ထုတ်ယူရန်"</string>
-    <string name="saving" msgid="6274238733828387433">"သိမ်းဆည်းနေ…"</string>
-    <string name="choosertitle_sharevia" msgid="3539537264873337959">"မှတစ်ဆင့် မျှဝေပါ"</string>
-    <string name="contextmenu_openlink" msgid="6952228183947135362">"ဘရောင်ဇာမှာ ဖွင့်ရန်"</string>
-    <string name="contextmenu_copy" msgid="2584243784216385180">"ကူးယူရန်"</string>
-    <string name="contextmenu_copylink" msgid="8659897702269320063">"လင့် URL ကူးယူရန်"</string>
-    <string name="contextmenu_view_image" msgid="1031172763893491000">"ပုံ ကြည့်ရှုရန်"</string>
-    <string name="contextmenu_dial_dot" msgid="8881095692316726628">"နံပါတ်လှည့်ရန်…"</string>
-    <string name="contextmenu_sms_dot" msgid="5319737001771622657">"SMS…"</string>
-    <string name="contextmenu_add_contact" msgid="2310064151427072475">"လိပ်စာ ထည့်ရန်"</string>
-    <string name="contextmenu_send_mail" msgid="3834654593200105396">"အီးမေးလ် ပို့ရန်"</string>
-    <string name="contextmenu_map" msgid="5118951927399465521">"မြေပုံ"</string>
-    <string name="contextmenu_sharelink" msgid="8670940060477758709">"လင့်ကို မျှဝေရန်"</string>
-    <string name="contextmenu_help" msgid="4209674157707873384">"အကူအညီ"</string>
-    <string name="contextmenu_feedback" msgid="8319100902136337085">"တုံ့ပြန်ချက် ပို့ရန်"</string>
-    <!-- no translation found for num_selected (7990204488812654380) -->
-    <skip />
-  <plurals name="move_conversation">
-    <item quantity="one" msgid="237882018518207244">"စကားဝိုင်းကို ရွှေ့ရန်"</item>
-    <item quantity="other" msgid="6639576653114141743">"စကားဝိုင်းများ <xliff:g id="ID_1">%1$d</xliff:g> ကို ရွှေ့"</item>
-  </plurals>
-    <string name="content_description" msgid="854320355052962069">"<xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g> က <xliff:g id="SUBJECT">%3$s</xliff:g>၊ <xliff:g id="SNIPPET">%4$s</xliff:g> အကြောင်း <xliff:g id="DATE">%5$s</xliff:g>၊ <xliff:g id="READSTATE">%6$s</xliff:g> မှာ"</string>
-    <string name="content_description_today" msgid="1634422834354116955">"<xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g> က <xliff:g id="SUBJECT">%3$s</xliff:g>၊ <xliff:g id="SNIPPET">%4$s</xliff:g> အကြောင်း<xliff:g id="TIME">%5$s</xliff:g>၊ <xliff:g id="READSTATE">%6$s</xliff:g> မှာ"</string>
-    <string name="read_string" msgid="5495929677508576520">"စကားဝိုင်းကို ဖတ်ပြီး"</string>
-    <string name="unread_string" msgid="7342558841698083381">"စကားဝိုင်းကို မဖတ်ရသေး"</string>
-    <string name="filtered_tag" msgid="721666921386074505">"[<xliff:g id="TAG">%1$s</xliff:g>]<xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="badge_and_subject" msgid="3979372269373936750">"<xliff:g id="ID_1">%1$s</xliff:g> <xliff:g id="ID_2">%2$s</xliff:g>"</string>
-  <plurals name="draft">
-    <item quantity="one" msgid="6717535677167943402">"မူကြမ်း"</item>
-    <item quantity="other" msgid="1335781147509740039">"မူကြမ်းများ"</item>
-  </plurals>
-    <string name="sending" msgid="5600034886763930499">"ပို့နေ…"</string>
-    <string name="message_retrying" msgid="5335188121407261331">"ပြန်ကြိုးစားနေ..."</string>
-    <string name="message_failed" msgid="7887650587384601790">"မအောင်မြင်ခဲ့"</string>
-    <string name="send_failed" msgid="2186285547449865010">"စာကို မပို့ဖြစ်ခဲ့ပါ။"</string>
-    <string name="me_object_pronoun" msgid="4674452244417913816">"ကျွန်ုပ်"</string>
-    <string name="me_subject_pronoun" msgid="7479328865714008288">"ကျွန်ုပ်"</string>
-  <plurals name="confirm_delete_conversation">
-    <item quantity="one" msgid="7605755011865575440">"ဒီစကားဝိုင်းကို ဖျက်မလား?"</item>
-    <item quantity="other" msgid="1585660381208712562">"ဤ<xliff:g id="COUNT">%1$d</xliff:g> စကားဝိုင်းများကို ဖျက်မလား?"</item>
-  </plurals>
-  <plurals name="confirm_archive_conversation">
-    <item quantity="one" msgid="9105551557653306945">"ဤစကားဝိုင်း မော်ကွန်းတင်မလား?"</item>
-    <item quantity="other" msgid="2001972798185641108">"ဒီစကားဝိုင်း <xliff:g id="COUNT">%1$d</xliff:g> ကို မော်ကွန်းတင်မလား?"</item>
-  </plurals>
-  <plurals name="confirm_discard_drafts_conversation">
-    <item quantity="one" msgid="2030421499893210789">"ဤ စာကို စွန့်ပစ်မလား?"</item>
-    <item quantity="other" msgid="782234447471532005">"ဒီစာ <xliff:g id="COUNT">%1$d</xliff:g>ကို စွန့်ပစ်မလား?"</item>
-  </plurals>
-    <string name="confirm_discard_text" msgid="5172680524418848519">"ဤ စာကို စွန့်ပစ်မလား?"</string>
-    <string name="loading_conversations" msgid="7255732786298655246">"တင်နေ…"</string>
-    <string name="empty_inbox" msgid="5901734942362315228">"သင် အားလုံး လုပ်ပြီးသွားပြီ။ ကျေးဇူးပြုပြီး ပျော်ပျော် နေလိုက်စမ်းပါ။"</string>
-    <string name="empty_search" msgid="8564899353449880818">"အူပ်စ်! \"<xliff:g id="SEARCH_QUERY">%1$s</xliff:g>\" အတွက် ဘာကိုမှ ကျွန်ုပ်တို့ ရှာမတွေ့ခဲ့ပါ။"</string>
-    <string name="empty_spam_folder" msgid="3288985543286122800">"ဟူးရေး၊ ဒီမှာ စပမ် မရှိတော့ပါ!"</string>
-    <string name="empty_trash_folder" msgid="378119063015945020">"အမှိုက် မရှိတော့ပါ။ ပြန်သုံးတဲ့ အတွက် ကျေးဇူးပဲ!"</string>
-    <string name="empty_folder" msgid="3227552635613553855">"ဤနေရာမှာ စာ မရှိပါ။"</string>
-    <string name="getting_messages" msgid="8403333791332403244">"သင်၏ စာများကို ရယူနေ"</string>
-    <string name="undo" msgid="8256285267701059609">"ပြန်ဖျက်ရန်"</string>
-  <plurals name="conversation_unstarred">
-    <item quantity="one" msgid="839233699150563831">"စကားဝိုင်း <xliff:g id="COUNT">%1$d</xliff:g> ကို စတားဖြုတ်နေ။"</item>
-    <item quantity="other" msgid="7677305734833709789">"စကားဝိုင်း <xliff:g id="COUNT">%1$d</xliff:g> ခုကို ကြယ်ဖြုတ်နေသည်။"</item>
-  </plurals>
-  <plurals name="conversation_muted">
-    <item quantity="one" msgid="3339638225564408438">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; အသံတိတ်ခဲ့သည်။"</item>
-    <item quantity="other" msgid="4276111931404654219">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&amp;gt အသံတိတ်ခဲ့။"</item>
-  </plurals>
-  <plurals name="conversation_spammed">
-    <item quantity="one" msgid="6986172030710967687">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;စပမ် အဖြစ် အစီရင်ခံခဲ့။"</item>
-    <item quantity="other" msgid="5900913789259199137">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&amp;gt စပမ် အဖြစ် အစီရင်ခံခဲ့သည်။"</item>
-  </plurals>
-  <plurals name="conversation_not_spam">
-    <item quantity="one" msgid="2294904093653094150">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&amp;gt စပမ် မဟုတ်ဟု အစီရင်ခံခဲ့။"</item>
-    <item quantity="other" msgid="4966164423991098144">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&amp;gt စပမ် မဟုတ်ဟု အစီရင်ခံခဲ့သည်။"</item>
-  </plurals>
-  <plurals name="conversation_not_important">
-    <item quantity="one" msgid="3824809189993339030">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&amp;gt ကို အရေးမကြီးဟု မှတ်သားခဲ့သည်။"</item>
-    <item quantity="other" msgid="1215472798075869124">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&amp;gt ကို အရေးမကြီးဟု မှတ်သားခဲ့သည်။"</item>
-  </plurals>
-  <plurals name="conversation_phished">
-    <item quantity="one" msgid="4330095881258771201">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&amp;gt မျှားယူမှု အဖြစ် အစီရင်ခံခဲ့သည်။"</item>
-    <item quantity="other" msgid="9218674052779504277">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&amp;gt မျှားယူမှု အဖြစ် အစီရင်ခံခဲ့သည်။"</item>
-  </plurals>
-  <plurals name="conversation_archived">
-    <item quantity="one" msgid="4127890884907503696">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; မော်ကွန်းတင်ပြီး။"</item>
-    <item quantity="other" msgid="7789480176789922968">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&amp;gt မော်ကွန်းတင်ပြီး။"</item>
-  </plurals>
-  <plurals name="conversation_deleted">
-    <item quantity="one" msgid="5591889079235938982">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&amp;gt ကို ဖျက်ပြီး။"</item>
-    <item quantity="other" msgid="7060256058737892078">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&amp;gt ကို ဖျက်ပြီး။"</item>
-  </plurals>
-    <string name="deleted" msgid="7378013910782008375">"ဖျက်ပြီး"</string>
-    <string name="archived" msgid="6283673603512713022">"မော်ကွန်းတင်ထား"</string>
-    <string name="folder_removed" msgid="5656281444688183676">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> မှ ဖယ်ရှားခဲ့"</string>
-  <plurals name="conversation_folder_changed">
-    <item quantity="one" msgid="6463727361987396734">"ပြောင်းထားသည့် ဖိုလ်ဒါ။"</item>
-    <item quantity="other" msgid="8815390494333090939">"ပြောင်းထားသည့် ဖိုလ်ဒါများ။"</item>
-  </plurals>
-    <string name="conversation_folder_moved" msgid="6475872337373081683">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> သို့ ရွှေ့ရန်"</string>
-    <string name="search_results_header" msgid="1529438451150580188">"ရလဒ်များ"</string>
-    <string name="search_unsupported" msgid="2873920566477359177">"ဤအကောင့် ထဲမှာ ရှာဖွေမှုကို ပံ့ပိုးမပေးပါ။"</string>
-    <string name="add_label" msgid="3285338046038610902">"ဖိုလ်ဒါကို ထည့်ရန်"</string>
-    <string name="new_incoming_messages_one" msgid="5933087567495998661">"<xliff:g id="SENDER">%s</xliff:g> ထံမှ စာ အသစ်ကို ပြပါ။"</string>
-  <plurals name="new_incoming_messages_many">
-    <item quantity="other" msgid="4394042684501388790">"စာအသစ် <xliff:g id="COUNT">%1$d</xliff:g> စောင်ကို ပြသပါ။"</item>
-  </plurals>
-    <string name="date_and_view_details" msgid="2952994746916149969">"<xliff:g id="DATE">%1$s</xliff:g> &lt;a href=\'http://www.example.com\'&gt;သေးစိတ် ကြည့်&lt;/a&gt;"</string>
-    <string name="hide_details" msgid="8018801050702453314">"အသေးစိတ်များ ဝှက်ထားရန်"</string>
-    <string name="to_message_header" msgid="3954385178027011919">"<xliff:g id="RECIPIENTS">%1$s</xliff:g> ထံသို့"</string>
-    <string name="contact_info_string" msgid="6484930184867405276">"<xliff:g id="NAME">%1$s</xliff:g> အတွက် ဆက်သွယ်ရေး အချက်အလက်ကို ပြပါ။"</string>
-    <string name="contact_info_string_default" msgid="6204228921864816351">"ဆက်သွယ်ရေး အချက်အလက်ကို ပြရန်"</string>
-  <plurals name="show_messages_read">
-    <item quantity="other" msgid="5285673397387128129">"စာ အဟောင်း <xliff:g id="COUNT">%1$d</xliff:g> ခု"</item>
-  </plurals>
-    <string name="from_heading" msgid="48290556829713090">"မှ:"</string>
-    <string name="replyto_heading" msgid="8275255318292059079">"သို့ ဖြေကြားရန်:"</string>
-    <string name="to_heading" msgid="3495203282540398336">"သို့: "</string>
-    <string name="to_heading_no_space" msgid="679167047628308670">"သို့:"</string>
-    <string name="cc_heading" msgid="5603892257866345823">"Cc:"</string>
-    <string name="bcc_heading" msgid="1482186590756218269">"Bcc:"</string>
-    <string name="date_heading" msgid="4213063948406397168">"ရက်စွဲ:"</string>
-    <string name="show_images" msgid="436044894053204084">"ပုံများကို ပြရန်"</string>
-    <string name="always_show_images" msgid="556087529413707819">"ဤပို့သူထံမှ ဓာတ်ပုံများကို အမြဲပြ"</string>
-    <string name="always_show_images_toast" msgid="3763157294047555051">"ဤပို့သူထံမှ ပုံများကို အလိုအလျောက် ပြပေးမည်။"</string>
-    <string name="address_display_format" msgid="2098008376913966177">"<xliff:g id="NAME">%1$s</xliff:g> <xliff:g id="EMAIL">%2$s</xliff:g>"</string>
-    <string name="address_display_format_with_via_domain" msgid="8108294635074750048">"<xliff:g id="NAME">%1$s</xliff:g><xliff:g id="EMAIL">%2$s</xliff:g> မှတစ်ဆင့် <xliff:g id="VIA_DOMAIN">%3$s</xliff:g>"</string>
-    <string name="message_saved" msgid="3291655042310241793">"စာကို မူကြမ်း အဖြစ် သိမ်းဆည်းပြီး"</string>
-    <string name="sending_message" msgid="2487846954946637084">"စာကို ပို့နေ…"</string>
-    <string name="invalid_recipient" msgid="9157434699389936584">"<xliff:g id="WRONGEMAIL">%s</xliff:g> လိပ်စာ မမှန်ပါ။"</string>
-    <string name="show_elided" msgid="3456154624105704327">"ကိုးကား စာသားကို ပြရန်"</string>
-    <string name="hide_elided" msgid="5768235486834692733">"▼ ကိုးကား စာသားကို ဝှက်ထားရန်"</string>
-    <string name="message_invite_title" msgid="5985161025144867256">"ပြက္ခဒိန် ဖိတ်ကြားမှု"</string>
-    <string name="message_invite_calendar_view" msgid="9181966650840809197">"ပြက္ခဒိန်မှာ ကြည့်ရန်"</string>
-    <string name="message_invite_label_attending" msgid="4194264767870003397">"သွားမလား?"</string>
-    <string name="message_invite_accept" msgid="8002758842580134835">"လက်ခံ"</string>
-    <string name="message_invite_tentative" msgid="3199418731566655887">"ဖြစ်နိုင်"</string>
-    <string name="message_invite_decline" msgid="6331040872447290777">"လက်မခံ"</string>
-    <string name="enumeration_comma" msgid="2848850136844740850">"၊ "</string>
-    <string name="send_anyway" msgid="2727576121007079643">"ဘာဘဲဖြစ်ဖြစ် ပို့ရန်"</string>
-    <string name="ok" msgid="6178802457914802336">"အိုကေ"</string>
-    <string name="done" msgid="344354738335270292">"လုပ်ပြီး"</string>
-    <string name="cancel" msgid="4831678293149626190">"ထားတော့"</string>
-    <string name="clear" msgid="765949970989448022">"ရှင်းရန်"</string>
-    <string name="next" msgid="2662478712866255138">"ရှေ့ဆက်"</string>
-    <string name="previous" msgid="8985379053279804274">"ယခင်"</string>
-  <string-array name="sync_status">
-    <item msgid="4600303222943450797">"အောင်မြင်"</item>
-    <item msgid="2972425114100316260">"ချိတ်ဆက်မှု မရှိပါ။"</item>
-    <item msgid="8594593386776437871">"လက်မှတ်ထိုး မဝင်နိုင်ခဲ့။"</item>
-    <item msgid="1375193906551623606">"လုံခြုံရေး အမှား။"</item>
-    <item msgid="195177374927979967">"စင့်က်လုပ် မရနိုင်ခဲ့ပါ။"</item>
-    <item msgid="8026148967150231130">"အင်တာနက် အမှား"</item>
-    <item msgid="5442620760791553027">"ဆာဗား အမှား"</item>
-  </string-array>
-    <string name="tap_to_configure" msgid="137172348280050643">"စသတ်မှတ်ရန် တို့ထိပါ"</string>
-    <string name="non_synced_folder_description" msgid="3044618511909304701">"စကားဝိုင်းကို ကြည့်ရန် ဤဖိုလ်ဒါကို စင့်က်လုပ်ပါ။"</string>
-    <string name="tap_to_configure_folder_sync" msgid="3280434399275638071">"ဖိုလ်ဒါကို စင့်က် လုပ်ရန်"</string>
-    <string name="widget_large_unread_count" msgid="8699435859096455837">"%d+"</string>
-    <string name="large_unseen_count" msgid="3055042669246912518">"<xliff:g id="COUNT">%d</xliff:g>+ သစ်"</string>
-    <string name="unseen_count" msgid="5509898665569695288">"<xliff:g id="COUNT">%d</xliff:g> သစ်"</string>
-  <plurals name="actionbar_unread_messages">
-    <item quantity="other" msgid="3863201473731766006">"မဖတ်ရသေး <xliff:g id="COUNT">%1$d</xliff:g>"</item>
-  </plurals>
-    <string name="actionbar_large_unread_count" msgid="753635978542372792">"<xliff:g id="COUNT">%1$d</xliff:g>+ မဖတ်ရသေး"</string>
-    <string name="view_more_conversations" msgid="8377920000247101901">"စကားဝိုင်းများ နောက်ထပ် ကြည့်မည်"</string>
-    <string name="loading_conversation" msgid="7931600025861500397">"တင်နေ…"</string>
-    <string name="activity_mailbox_selection" msgid="7489813868539767701">"အကောင့်ကို ရွေးရန်"</string>
-    <string name="activity_folder_selection" msgid="8375243281001234750">"ဖိုလ်ဒါကို ရွေးရန်"</string>
-    <string name="folder_shortcut_widget_label" msgid="6466292659577092915">"ဖိုလ်ဒါကို အီးမေးလ် လုပ်ရန်"</string>
-    <string name="change_folders_selection_dialog_title" msgid="9174464298613273814">"ဖိုလ်ဒါများ ပြောင်းရန်"</string>
-    <string name="move_to_selection_dialog_title" msgid="4052506464467083621">"ရွှေ့ရန်"</string>
-    <string name="search_hint" msgid="4916671414132334289">"စာကို ရှာရန်"</string>
-    <!-- no translation found for search_results_loaded (1784879343458807514) -->
-    <skip />
-    <string name="network_error" msgid="5931164247644972255">"ချိတ်ဆက်မှု မရှိ"</string>
-    <string name="retry" msgid="916102442074217293">"ထပ်စမ်းရန်"</string>
-    <string name="load_more" msgid="8702691358453560575">"ထပ် တင်ရန်"</string>
-    <!-- no translation found for load_attachment (3894318473827290350) -->
-    <skip />
-    <string name="shortcut_name_title" msgid="1562534040126088628">"ဖိုလ်ဒါ ဖြတ်လမ်းကို အမည်ပေးရန်"</string>
-    <string name="wait_for_sync_title" msgid="4577632826912823075">"စင့်က် လုပ်ရန် စောင့်နေ"</string>
-    <string name="not_synced_title" msgid="3600180500934086346">"အကောင့်ကို စင့်က် မလုပ်ရသေး"</string>
-    <string name="wait_for_manual_sync_body" msgid="2823149409451003378">"ဤအကောင့်ကို အလိုအလျောက် စင့်က်လုပ်ရန် သတ်မှတ် မထားပါ။ မေးလ်ကို တစ်ကြိမ် စင့်က်လုပ်ရန်\n "<b>" ယခု စင့်က်လုပ်"</b>" ကို ထိပါ၊ သို့မဟုတ် ဒီအကောင့်အတွက် အလိုအလျောက် မေးလ်ကို စင့်က် လုပ်ရန်ကို သတ်မှတ်ရန် "<b>" စင့်က်လုပ်မှု ဆက်တင် ပြောင်းလဲရန် "</b>" ထဲမှာ သတ်မှတ်ပေးပါ။"</string>
-    <string name="manual_sync" msgid="2271479734895537848">"ယခု စင့်လုပ်"</string>
-    <string name="change_sync_settings" msgid="3615852118397055361">"စင့်က် ဆက်တင်များ ပြောင်းရန်"</string>
-    <string name="photo_load_failed" msgid="577471721679146999">"ပုံကို မတင်နိုင်ခဲ့"</string>
-    <string name="cant_move_or_change_labels" msgid="4155490583610926755">"ရွေးမှုထဲမှာ အကောင့်အများ ပါနေ၍ မရွှေ့နိုင်ပါ။"</string>
-    <string name="multiple_new_message_notification_item" msgid="1386588046275174918"><b>"<xliff:g id="SENDER">%1$s</xliff:g>"</b>"<xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="single_new_message_notification_big_text" msgid="2170154732664242904">"<xliff:g id="SUBJECT">%1$s</xliff:g>\n<xliff:g id="SNIPPET">%2$s</xliff:g>"</string>
-    <string name="ignore_spam_warning" msgid="8760314545535838430">"လျစ်လျူရှုပါ၊ စာကို ယုံသည်"</string>
-    <string name="via_domain" msgid="537951148511529082">"<xliff:g id="VIADOMAIN">%1$s</xliff:g> မှတစ်ဆင့်"</string>
-    <string name="signin" msgid="4699091478139791244">"လက်မှတ်ထိုး ဝင်ရန်"</string>
-    <string name="info" msgid="1357564480946178121">"အင်ဖို"</string>
-    <string name="report" msgid="4318141326014579036">"အစီရင်ခံရန်"</string>
-    <string name="sync_error" msgid="1795794969006241678">"စင့်က်လုပ် မရနိုင်ခဲ့။"</string>
-    <string name="sync_error_message" msgid="4182644657243736635">"သင်၏ ကိရိယာ ထဲတွင် စင့်က်လုပ်ရန် နေရာ မလုံလောက်ပါ။"</string>
-    <string name="storage" msgid="4783683938444150638">"သိုလှောင်မှု"</string>
-    <string name="senders_split_token" msgid="6549228851819460081">"၊ "</string>
-    <string name="draft_count_format" msgid="9122583199850209286">" (<xliff:g id="COUNT">%1$s</xliff:g>)"</string>
-    <string name="all_folders_heading" msgid="9023770187629170967">"ဖိုလ်ဒါများ အားလုံး"</string>
-    <string name="recent_folders_heading" msgid="8943134955788867702">"မကြာခင်က ဖိုလ်ဒါများ"</string>
-    <string name="message_details_title" msgid="60771875776494764">"စာ၏အသေးစိတ်များ"</string>
-    <string name="preference_advance_to_title" msgid="6385669491239514630">"အော်တို-ရှေ့တိုး"</string>
-  <string-array name="prefEntries_autoAdvance">
-    <item msgid="1505450878799459652">"ပိုသစ်သော"</item>
-    <item msgid="8000986144872247139">"ပိုဟောင်း"</item>
-    <item msgid="8015001161633421314">"စကားဝိုင်း စာရင်း"</item>
-  </string-array>
-  <string-array name="prefSummaries_autoAdvance">
-    <item msgid="8221665977497655719">"သင် ဖျက်ပြီး နောက်မှာ ပိုသစ်သော စကားဝိုင်းကို ပြရန်"</item>
-    <item msgid="1721869262893378141">"သင် ဖျက်ပြီးနောက်မှာ ပိုဟောင်းသော စကားဝိုင်းကို ပြရန်"</item>
-    <item msgid="880913657385630195">"သင် ဖျက်ပြီး နောက်မှာ စကားဝိုင်း စာရင်းကို ပြရန်"</item>
-  </string-array>
-    <string name="prefDialogTitle_autoAdvance" msgid="5459235590885640678">"သို့ ရှေ့တိုးရန်"</string>
-    <string name="clear_display_images_whitelist_title" msgid="2012677202404471778">"ပုံ အတည်ပြုချက်များကို ရှင်းရန်"</string>
-    <string name="clear_display_images_whitelist_dialog_title" msgid="1942692501166848471">"ပုံ ခွင့်ပြုချက်များကို ရှင်းလင်းရမလား?"</string>
-    <string name="clear_display_images_whitelist_dialog_message" msgid="3952553078559373729">"သင် ယခင်က ခွင့်ပြုခဲ့သော ပို့သူများထံမှ ထည့်သွင်း ပုံများ ပြသမှုကို ရပ်မည်။"</string>
-    <string name="sender_whitelist_cleared" msgid="2490984995927904030">"ပုံများကို အလိုအလျောက် ပြမည် မဟုတ်။"</string>
-    <string name="preferences_signature_title" msgid="2318034745474929902">"လက်မှတ်"</string>
-    <string name="preferences_signature_dialog_title" msgid="4801741764511807064">"လက်မှတ်"</string>
-    <string name="preferences_signature_summary_not_set" msgid="3776614319388053784">"မသတ်မှတ် ရသေး"</string>
-    <string name="notification_action_reply" msgid="8378725460102575919">"ဖြေကြားရန်"</string>
-    <string name="notification_action_reply_all" msgid="5693469099941000037">"အားလုံးကို ဖြေကြား"</string>
-    <string name="notification_action_archive" msgid="2884874164831039047">"မော်ကွန်းတင်ရန်"</string>
-    <string name="notification_action_remove_label" msgid="3714785653186750981">"တံဆပ်ကို ဖယ်ရှားရန်"</string>
-    <string name="notification_action_delete" msgid="3201627482564624132">"ဖျက်ပစ်ရန်"</string>
-    <string name="notification_action_undo_archive" msgid="600186958134073582">"မော်ကွန်းတင်ပြီး"</string>
-    <string name="notification_action_undo_remove_label" msgid="8341924850540100690">"တံဆိပ်ကို ဖယ်ရှားပြီး"</string>
-    <string name="notification_action_undo_delete" msgid="6915612337413587103">"ဖျက်ပြီး"</string>
-    <string name="veiled_address" msgid="2670378260196977266"></string>
-    <string name="veiled_alternate_text" msgid="6343564357099807582"></string>
-    <string name="veiled_alternate_text_unknown_person" msgid="6728323554307952217"></string>
-    <string name="veiled_summary_unknown_person" msgid="2122359944161241551"></string>
-    <string name="label_notification_ticker" msgid="323232821061341014">"<xliff:g id="LABEL">%s</xliff:g>: <xliff:g id="NOTIFICATION">%s</xliff:g>"</string>
-  <plurals name="new_messages">
-    <item quantity="one" msgid="3446656407520493241">"စာ အသစ် <xliff:g id="COUNT">%1$d</xliff:g> ခု"</item>
-    <item quantity="other" msgid="3531683811183204615">"စာ အသစ် <xliff:g id="COUNT">%1$d</xliff:g> ခု"</item>
-  </plurals>
-    <string name="single_new_message_notification_title" msgid="7954710563222504868">"<xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="silent_ringtone" msgid="1570794756474381886">"အသံတိတ်"</string>
-    <string name="preference_removal_action_title" msgid="4703834472477137634">"လုပ်ဆောင်ချက်များကို မော်ကွန်းတင်ရန် &amp;amp ဖျက်ရန်"</string>
-  <string-array name="prefEntries_removal_action">
-    <item msgid="954772302016538814">"မော်ကွန်းကိုသာ ပြရန်"</item>
-    <item msgid="7212690302706180254">"ဖျက်ရန်ကိုသာ ပြရန်"</item>
-    <item msgid="2539051197590685708">"မော်ကွန်းတင်မလား &amp;amp ဖျက်မလား"</item>
-  </string-array>
-  <string-array name="prefSummaries_removal_action_summary">
-    <item msgid="6877416142040695022">"မော်ကွန်းကိုသာ ပြရန်"</item>
-    <item msgid="1510017057984222376">"ဖျက်ရန်ကိုသာ ပြရန်"</item>
-    <item msgid="3196207224108008441">"မော်ကွန်းတင်ရန် &amp;amp ဖျက်ရန်"</item>
-  </string-array>
-    <string name="prefDialogTitle_removal_action" msgid="266548424110393246">"မော်ကွန်းတင်ရန် &amp;amp ဖျက်ရန် လုပ်ဆောင်ချက်များ"</string>
-    <string name="preferences_default_reply_all_title" msgid="7255858488369635327">"အားလုံးကို ဖြေကြားရန်"</string>
-    <string name="preferences_default_reply_all_summary_impl" msgid="895581085692979709">"စာ ဖြေကြားမှုများ အတွက် ပုံသေ အဖြစ် အသုံးပြုရန်"</string>
-    <string name="preference_swipe_title_archive" msgid="9122333537761282714">"မော်ကွန်းတင်ရန် ပွတ်ဆွဲပါ"</string>
-    <string name="preference_swipe_title_delete" msgid="4860474024917543711">"ဖျက်ရန် ပွတ်ဆွဲပါ"</string>
-    <string name="preference_swipe_description" msgid="3036560323237015010">"စကားဝိုင်း စာရင်း ထဲမှာ"</string>
-    <string name="preference_sender_image_title" msgid="7890813537985591865">"ပို့သူ ပုံ"</string>
-    <string name="preference_sender_image_description" msgid="3586817690132199889">"စကားဝိုင်း စာရင်း ထဲမှာ အမည်၏ ဘေးမှာ ပြရန်"</string>
-    <string name="empty_trash" msgid="3385937024924728399">"အမှိုက်ပုံးကို ရှင်းပါ"</string>
-    <string name="empty_spam" msgid="2911988289997281371">"စပမ်ကို ရှင်းပစ်မည်"</string>
-    <string name="empty_trash_dialog_title" msgid="2104898489663621508">"အမှိုက်ပုံး ရှင်းမလား?"</string>
-    <string name="empty_spam_dialog_title" msgid="1130319045917820569">"စပမ်ကို ရှင်းပစ်ရမလား?"</string>
-  <plurals name="empty_folder_dialog_message">
-    <item quantity="one" msgid="3315412388217832914">"စာ <xliff:g id="COUNT">%1$d</xliff:g> ထာဝရ ဖျက်ခံရမည်။"</item>
-    <item quantity="other" msgid="263840304486020101">"စာ <xliff:g id="COUNT">%1$d</xliff:g> ထာဝရ ဖျက်ခံရမည်။"</item>
-  </plurals>
-    <string name="drawer_open" msgid="2285557278907103851">"လမ်းကြောင်းပြ အံဆွဲကို ဖွင့်ပါ"</string>
-    <string name="drawer_close" msgid="2065829742127544297">"လမ်းကြောင်းပြ အံဆွဲကို ပိတ်ပါ"</string>
-    <string name="conversation_photo_welcome_text" msgid="836483155429003787">"ပို့သူ ပုံကို ထိခြင်းဖြင့် ထိုစကားဝိုင်းကို ရွေးပါ။"</string>
-    <string name="long_press_to_select_tip" msgid="1660881999120625177">"&amp;amp ကို ထိပါ၊ ​စကားဝိုင်း တစ်ခုကို ရွေးရန် ဖိကိုင်ထားပါ၊ ပြီးနောက် ထပ်ရွေးရန် ထိပါ။"</string>
-    <string name="folder_icon_desc" msgid="6272938864914794739">"ဖိုလ်ဒါ အိုင်ကွန်"</string>
-    <string name="add_account" msgid="5905863370226612377">"အကောင့် ထည့်ဂရန်"</string>
-    <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"အကြံပေးမှုကို ပယ်ရန်"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"အော်တိုစင့်က် ပိတ်ထား။"</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"ဖွင့်ရန် တို့ထိပါ။"</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"အကောင့် စင့်က် လုပ်မှု ပိတ်ထားသည်။"</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"<xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g> တွင် ဖွင့်ပါ"</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"အကောင့် ဆက်တင်များ"</string>
-    <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="OUTBOX">%2$s</xliff:g> တွင် <xliff:g id="NUMBER">%1$s</xliff:g> ကို မပို့ရသေး"</string>
-    <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"အော်တို-စင့်က်ကို ဖွင့်ရမလား?"</string>
-    <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Gmail သာမက၊ appများ နှင့် အကောင့်များ အားလုံးထဲ သင်ပြုလုပ်ခဲ့သော အပြောင်းအလဲများကို ၀က်ဘ်၊ သင်၏ ကိရိယာများ နှင့် သင်၏<xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g> အကြားမှာ စင့်က်လုပ်ပေးမည်။"</string>
-    <string name="phone" msgid="4142617042507912053">"ဖုန်း"</string>
-    <string name="tablet" msgid="4593581125469224791">"တက်ဘလက်"</string>
-    <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="7239160845196929866">"ဖွင့်ရန်"</string>
-    <string name="show_n_more_folders" msgid="5769610839632786654">"နောက်ထပ် ဖိုလ်ဒါ <xliff:g id="NUMBER">%1$s</xliff:g> ခုကို ပြရန်"</string>
-    <string name="hide_folders" msgid="7618891933409521283">"ဖိုလ်ဒါများကို ဝှက်ထားရန်"</string>
-    <string name="print" msgid="7987949243936577207">"ပရင့် ထုတ်ယူရန်"</string>
-    <string name="print_all" msgid="4011022762279519941">"အားလုံးကို ပရင့်ထုတ်ရန်"</string>
-  <plurals name="num_messages">
-    <item quantity="one" msgid="8071234386915191851">"စာ <xliff:g id="COUNT">%1$d</xliff:g> စောင်"</item>
-    <item quantity="other" msgid="962415099931188360">"စာ <xliff:g id="COUNT">%1$d</xliff:g>"</item>
-  </plurals>
-    <string name="date_message_received_print" msgid="4168417403884350040">"<xliff:g id="DAY_AND_DATE">%1$s</xliff:g> <xliff:g id="TIME">%2$s</xliff:g> တွင်"</string>
-    <string name="draft_to_heading" msgid="7370121943946205024">"သို့ မူကြမ်း:"</string>
-    <string name="draft_heading" msgid="7032951343184552800">"မူကြမ်း"</string>
-    <string name="quoted_text_hidden_print" msgid="5256754205675159141">"ကိုးကား စာသားကို ဝှက်ထားရန်"</string>
-  <plurals name="num_attachments">
-    <item quantity="one" msgid="5494465717267988888">"ပူးတွဲမှု <xliff:g id="COUNT">%1$d</xliff:g>"</item>
-    <item quantity="other" msgid="5422167728480739361">"ပူးတွဲမှုများ <xliff:g id="COUNT">%1$d</xliff:g>"</item>
-  </plurals>
-    <string name="no_subject" msgid="5622708348540036959">"(အကြောင်းအရာ မပါ)"</string>
-    <string name="vacation_responder" msgid="5570132559074523806">"အပန်းဖြေမှု တုံ့ပြန်သူ"</string>
-    <string name="preferences_vacation_responder_title" msgid="2268482117730576123">"အပန်းဖြေမှု တုံ့ပြန်သူ"</string>
-    <string name="vacation_responder_body_hint_text" msgid="9087613123105158494">"စာ"</string>
-    <string name="send_to_contacts_text" msgid="124432913980620545">"ကျွန်ုပ်၏ အဆက်အသွယ်များသို့သာ ပို့ရန်"</string>
-    <string name="send_to_domain_text" msgid="5064559546745918393">"<xliff:g id="DOMAIN">%1$s</xliff:g> သို့သာ ပို့ရန်"</string>
-    <string name="pick_start_date_title" msgid="2274665037355224165">"စတင်"</string>
-    <string name="pick_end_date_title" msgid="733396083649496600">"ပြီးဆုံး (လိုချင်မှ လုပ်ရန်)"</string>
-    <string name="date_not_set" msgid="3251555782945051904">"မသတ်မှတ် ရသေး"</string>
-    <string name="set_end_date_dialog_title" msgid="7543009262788808443">"ပြီးဆုံး ရက်စွဲ (လိုချင်မှ ထည့်ရန်)"</string>
-    <string name="custom_date" msgid="5794846334232367838">"စိတ်တိုင်းကျ"</string>
-    <string name="date_none" msgid="1061426502665431412">"နတ္တိ"</string>
-    <string name="discard_changes" msgid="5699760550972324746">"ပြောင်းလဲမှုများကို စွန့်ပစ်မလား?"</string>
-    <string name="vacation_responder_changes_saved" msgid="91448817268121249">"အပန်းဖြေမှု တုံ့ပြန်သူ အပြောင်းအလဲများ သိမ်းဆည်းခဲ့"</string>
-    <string name="vacation_responder_changes_discarded" msgid="21756037735539983">"အပန်းဖြေမှု တုံ့ပြန်သူ အပြောင်းအလဲများ စွန့်ပစ်ပြီး"</string>
-    <string name="vacation_responder_off" msgid="4429909341193366667">"ပိတ်ရန်"</string>
-    <string name="vacation_responder_on" msgid="4913238379320882449">"<xliff:g id="DATE">%1$s</xliff:g>နေ့မှ ဖွင့်ရန်"</string>
-    <string name="vacation_responder_on_with_end_date" msgid="4360941815371475955">"<xliff:g id="START_DATE">%1$s</xliff:g> မှ <xliff:g id="END_DATE">%2$s</xliff:g> အထိ ဖွင့်ထား"</string>
-    <string name="vacation_responder_empty_subject_and_body_warning" msgid="6233629618520852439">"အကြောင်းအရာ သို့မဟုတ် စာကို ထည့်ရန်"</string>
-    <string name="view_entire_message" msgid="823281796655014454">"စာ တစ်စောင်လုံးကို ကြည့်ရှုရန်"</string>
-    <string name="eml_loader_error_toast" msgid="6577383216635400167">"ဤဖိုင်ကို မဖွင့်နိုင်"</string>
-    <string name="help_and_info" msgid="3708286489943154681">"အကူအညီ"</string>
-    <string name="help_and_feedback" msgid="7211458338163287670">"အကူအညီ &amp; တုန့်ပြန်ချက်"</string>
-    <string name="feedback" msgid="204247008751740034">"တုံ့ပြန်ချက် ပို့ရန်"</string>
-    <string name="copyright" msgid="3121335168340432582">"©<xliff:g id="YEAR">%1$d</xliff:g> Google Inc."</string>
-    <string name="version" msgid="1161745345056656547">"<xliff:g id="APP_NAME">%1$s</xliff:g> ဗားရှင်း <xliff:g id="VERSION">%2$s</xliff:g>"</string>
-    <string name="view_app_page" msgid="3241990517052398927"></string>
-    <string name="print_dialog" msgid="8895536548487605661">"ပရင့် ထုတ်ရန်…"</string>
-    <string name="copyright_information" msgid="971422874488783312">"မူပိုင်ခွင့် အချက်လက်များ"</string>
-    <string name="privacy_policy" msgid="212094623396418302">"ကိုယ်ရေး မူဝါဒ"</string>
-    <string name="open_source_licenses" msgid="8643615555920977752">"အခမဲ့ ရင်းမြစ် လိုင်စင်"</string>
-    <string name="reply_choice_yes" msgid="3327633032975373220">"ဟုတ်"</string>
-    <string name="reply_choice_no" msgid="7068775605915475207">"မဟုတ်"</string>
-    <string name="reply_choice_ok" msgid="7881073621845053152">"အိုကေ"</string>
-    <string name="reply_choice_hehe" msgid="6054314968043050748">"ဟဲဟဲ"</string>
-    <string name="reply_choice_thanks" msgid="4978961954288364694">"ကျေးဇူးပဲ"</string>
-    <string name="reply_choice_i_agree" msgid="2496652737796884298">"ကျွန်ုပ် သဘောတူသည်"</string>
-    <string name="reply_choice_nice" msgid="4465894941302838676">"ကောင်း"</string>
-    <string name="reply_on_my_way" msgid="5645003971107444269">"ကျွန်ုပ်၏ လမ်းပေါ်မှာ"</string>
-    <string name="reply_choice_later" msgid="4629219072859486413">"အိုကေ၊ ကျွန်ုပ် ပြန်ဖြေပါရစေ"</string>
-    <string name="reply_choice_smiling_face" msgid="1772253938506548631">":)"</string>
-    <string name="reply_choice_frowning_face" msgid="6260338807944002651">":("</string>
-    <string name="preference_header_action_confirmations" msgid="3922674681156121948">"လုပ်ဆောင်ချက် အတည်ပြုမှုများ"</string>
-    <string name="preference_confirm_before_delete_title" msgid="7563587174619033835">"မဖျက်ခင် အတည်ပြုရန်"</string>
-    <string name="preference_confirm_before_archive_title" msgid="7318645995655875718">"မော်ကွန်း မတင်မီ အတည်ပြုရန်"</string>
-    <string name="preference_confirm_before_send_title" msgid="4136585783513077039">"မပို့မီ အတည်ပြုရန်"</string>
-    <string name="preferences_conversation_mode_title" msgid="389352009651720838">"အော်တို-အံကိုက် စာများ"</string>
-    <string name="preferences_conversation_mode_summary" msgid="5730999743867653106">"စာများကို မျက်နှာပြင်နှင့် အံကိုက်စေရန် ချုံ့ပါ"</string>
-    <string name="preferences_disable_snap_headers_title" msgid="7257824136988429629">"စာ လုပ်ဆောင်ချက်များ"</string>
-  <string-array name="prefSummaries_snapHeader">
-    <item msgid="43373293784193461">"စာ လုပ်ဆောင်ချက်များကို မျက်နှာပြင် ထိပ်မှာ အမြဲ ပြရန်"</item>
-    <item msgid="1765271305989996747">"ပုံတူနှင့် ဆက်စပ်မှသာ စာ လုပ်ဆောင်ချက်များကို မျက်နှာပြင် ထိပ်မှာ အမြဲ ပြရန်"</item>
-    <item msgid="6311113076575333488">"စာ လုပ်ဆောင်ချက်များကို စာ၏ ခေါင်းစီး အပြင်မှာ မပြပါနှင့်"</item>
-  </string-array>
-  <string-array name="prefEntries_snapHeader">
-    <item msgid="6906986566816683587">"အမြဲ ပြရန်"</item>
-    <item msgid="113299655708990672">"ပုံတူ ထဲမှာသာ ပြရန်"</item>
-    <item msgid="4403750311175924065">"မပြပါနှင့်"</item>
-  </string-array>
-    <string name="clear_history_title" msgid="5536216295725760357">"ရှာဖွေမှု မှတ်တမ်းကို ရှင်းရန်"</string>
-    <string name="search_history_cleared" msgid="1461946302763342640">"ရှာဖွေမှု မှတ်တမ်း ရှင်းပြီးပြီ။"</string>
-    <string name="clear_history_dialog_title" msgid="3503603389704365385">"ရှာဖွေမှု မှတ်တမ်းကို ရှင်းရမလား?"</string>
-    <string name="clear_history_dialog_message" msgid="5202922561632407778">"သင် အရင်တုန်းက လုပ်ခဲ့သည့် ရှာဖွေမှု အားလုံး ဖယ်ရှားခံရမည်၊"</string>
-    <string name="manage_accounts_menu_item" msgid="4734660452395086786">"အကောင့်များကို စီမံခန့်ခွဲရန်"</string>
-    <string name="general_preferences_title" msgid="4212138728220418162">"အထွေထွေ ဆက်တင်များ"</string>
-    <string name="activity_preferences" msgid="8966077432517613292">"ဆက်တင်များ"</string>
-</resources>
diff --git a/res/values-nb-sw600dp/strings.xml b/res/values-nb-sw600dp/strings.xml
index 84ac843..bc7d035 100644
--- a/res/values-nb-sw600dp/strings.xml
+++ b/res/values-nb-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ kopi/blindkopi"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Blindkopi"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Administrer mapper"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Bruk som standard for e-postsvar"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ Kopi/blindkopi"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ Blindkopi"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Administrer mapper"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Bruk som standard for e-postsvar"</string>
 </resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index c93d9e0..908e228 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -149,7 +149,7 @@
     <string name="message_retrying" msgid="5335188121407261331">"Prøver på nytt …"</string>
     <string name="message_failed" msgid="7887650587384601790">"Mislyktes"</string>
     <string name="send_failed" msgid="2186285547449865010">"E-posten ble ikke sendt."</string>
-    <string name="me_object_pronoun" msgid="4674452244417913816">"meg"</string>
+    <string name="me_object_pronoun" msgid="4674452244417913816">"Jeg"</string>
     <string name="me_subject_pronoun" msgid="7479328865714008288">"Jeg"</string>
   <plurals name="confirm_delete_conversation">
     <item quantity="one" msgid="7605755011865575440">"Vil du slette denne samtalen?"</item>
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Mappeikon"</string>
     <string name="add_account" msgid="5905863370226612377">"Legg til konto"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Avslå tips"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Automatisk synkronisering er slått av."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Trykk for å slå på."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Kontosynkronisering er slått av."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Slå på i <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Kontoinnstillinger"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> usendte i <xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Vil du aktivere automatisk synkronisering?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Endringer du gjør i apper og kontoer, ikke bare i Gmail, blir synkronisert mellom nettet, de andre enhetene dine og <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>."</string>
diff --git a/res/values-ne-rNP-sw600dp/strings.xml b/res/values-ne-rNP-sw600dp/strings.xml
deleted file mode 100644
index 5d68ffb..0000000
--- a/res/values-ne-rNP-sw600dp/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-     Copyright (C) 2012 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Cc/Bcc"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Bcc"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"फोल्डरहरु ब्वस्थापन गर्नुहोस्"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"सन्देश सूचनाको जवाफ दिनको लागि पूर्वनिर्धारितको रूपमा प्रयोग गर्नुहोस्"</string>
-</resources>
diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne-rNP/strings.xml
deleted file mode 100644
index 10e872c..0000000
--- a/res/values-ne-rNP/strings.xml
+++ /dev/null
@@ -1,483 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-     Copyright (C) 2011 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="from" msgid="5159056500059912358">"प्रेषक"</string>
-    <string name="to" msgid="3971614275716830581">"प्रापक"</string>
-    <string name="cc" msgid="8768828862207919684">"Cc"</string>
-    <string name="bcc" msgid="519303553518479171">"Bcc"</string>
-    <string name="subject_hint" msgid="2136470287303571827">"विषय"</string>
-    <string name="body_hint" msgid="6478994981747057817">"इमेल रचना गर्नुहोस्"</string>
-    <string name="add_file_attachment" msgid="2604880054248593993">"फाइल संलग्न गर्नुहोस्"</string>
-    <string name="add_photo_attachment" msgid="7163589794940909528">"चित्र संलग्न गर्नुहोस्"</string>
-    <string name="save_draft" msgid="2669523480789672118">"ड्राफ्ट बचत गर्नुहोस्"</string>
-    <string name="discard" msgid="4905982179911608430">"बेवास्ता गर्नुहोस्"</string>
-    <string name="compose" msgid="2602861958391035523">"रचना गर्नुहोस्"</string>
-  <string-array name="compose_modes">
-    <item msgid="9000553538766397816">"जवाफ पठाउनुहोस्"</item>
-    <item msgid="2767793214788399009">"सबैलाई जवाफ दिनुहोस्"</item>
-    <item msgid="2758162027982270607">"अग्रप्रेषण गर्नुहोस्"</item>
-  </string-array>
-    <string name="reply_attribution" msgid="1114972798797833259">"<xliff:g id="DATE">%s</xliff:g>मा <xliff:g id="PERSON">%s</xliff:g>ले लेख्नुभयो:"</string>
-    <string name="forward_attribution" msgid="597850048345475752">"---------- फर्वाड गरिएका सन्देश ----------&lt;br&gt;प्रेषक: <xliff:g id="FROM">%1$s</xliff:g>&lt;br&gt;मिति: <xliff:g id="DATE">%2$s</xliff:g>&lt;br&gt;विषय: <xliff:g id="SUBJECT">%3$s</xliff:g>&lt;br&gt;प्रापक: <xliff:g id="TO">%4$s</xliff:g>&lt;br&gt;"</string>
-    <string name="forward_attribution_no_headers" msgid="1828826576779486239">"---------- अग्रेषित गरिएको सन्देश ----------"</string>
-    <string name="cc_attribution" msgid="2928584226469388899">"Cc: <xliff:g id="CC">%1$s</xliff:g>&lt;br&gt;"</string>
-    <string name="select_attachment_type" msgid="353236686616663062">"संलग्नकको प्रकार छनौट गर्नुहोस्"</string>
-    <string name="too_large_to_attach_single" msgid="2669897137966512530">"<xliff:g id="MAXSIZE">%1$s</xliff:g> मा फाइल एट्याच गर्न सकिंदैन।"</string>
-    <string name="too_large_to_attach_multiple" msgid="1620163295709036343">"एक वा बढी फाइलहरुलाई एट्याच गरिएको छैन। <xliff:g id="MAXSIZE">%1$s</xliff:g> सीमित गर्नुहोस्।"</string>
-    <string name="too_large_to_attach_additional" msgid="4964155563465970480">"फाईल संलग्न भएको छैन। <xliff:g id="MAXSIZE">%1$s</xliff:g> सीमा पुग्यो।"</string>
-    <string name="generic_attachment_problem" msgid="4683974765387240723">"फाइल संलग्न गर्न सकेन।"</string>
-    <string name="recipient_needed" msgid="319816879398937214">"कम्तिमा पनि एउटा प्राप्तकर्ता थप्नुहोस्।"</string>
-    <string name="recipient_error_dialog_title" msgid="760741480291963706">"प्राप्तकर्ता त्रुटि"</string>
-    <string name="confirm_send_title" msgid="4664971589247101530">"सन्देश पठाउनुहुन्छ?"</string>
-    <string name="confirm_send_message_with_no_subject" msgid="1442628074022609987">"सन्देशको विषयमा कुनै पाठ छैन।"</string>
-    <string name="confirm_send_message_with_no_body" msgid="3329355318700201516">"सन्देशको मूख्य भागमा कुनै पाठ छैन।"</string>
-    <string name="confirm_send_message" msgid="6211518590166222735">"यस सन्देश पठाउने हो?"</string>
-    <string name="message_discarded" msgid="6792661321962262024">"सन्देश त्यागियो।"</string>
-    <string name="signature" msgid="3172144541947408374">\n\n"<xliff:g id="SIGNATURE">%s</xliff:g>"</string>
-    <string name="custom_from_account_label" msgid="5042317430007736322">"को रूपमा मेल पठाउनुहोस्"</string>
-    <string name="send" msgid="4269810089682120826">"पठाउनुहोस्"</string>
-    <string name="mark_read" msgid="579388143288052493">"पढेको चिन्ह लगाउनुहोस्"</string>
-    <string name="mark_unread" msgid="6245060538061533191">"नपढिएकोलाई चिन्ह लगाउनुहोस्"</string>
-    <string name="mute" msgid="9164839998562321569">"आवाज बन्द गर्नुहोस्"</string>
-    <string name="add_star" msgid="3275117671153616270">"स्टार थप गर्नुहोस्"</string>
-    <string name="remove_star" msgid="9126690774161840733">"तारा हटाउनुहोस्"</string>
-    <string name="remove_folder" msgid="2379905457788576297">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> बाट हटाउनुहोस्"</string>
-    <string name="archive" msgid="5978663590021719939">"अभिलेख"</string>
-    <string name="report_spam" msgid="4106897677959987340">"स्प्याम रिपोर्ट गर्नुहोस्"</string>
-    <string name="mark_not_spam" msgid="8617774236231366651">"स्प्याम नभएको रिपोर्ट"</string>
-    <string name="report_phishing" msgid="8454666464488413739">"फिसिङ रिपोर्ट गर्नुहोस्"</string>
-    <string name="delete" msgid="6784262386780496958">"मेट्नुहोस्"</string>
-    <string name="discard_drafts" msgid="5881484193628472105">"ड्राफ्ट खारेज गर्नुहोस्"</string>
-    <string name="discard_failed" msgid="7520780769812210279">"खारेज असफल"</string>
-    <string name="refresh" msgid="1533748989749277511">"पुनः ताजा गर्नुहोस्"</string>
-    <string name="reply" msgid="8337757482824207118">"जवाफ पठाउनुहोस्"</string>
-    <string name="reply_all" msgid="5366796103758360957">"सबैलाई जवाफ दिनुहोस्"</string>
-    <string name="resume_draft" msgid="1272723181782570649">"सम्पादन गर्नुहोस्"</string>
-    <string name="forward" msgid="4397585145490426320">"अग्रप्रेषण गर्नुहोस्"</string>
-    <string name="menu_compose" msgid="4575025207594709432">"रचना गर्नुहोस्"</string>
-    <string name="menu_change_folders" msgid="2194946192901276625">"फोल्डरहरु परिवर्तन गर्नुहोस्"</string>
-    <string name="menu_move_to" msgid="7948877550284452830">"मा सार्नुहोस्"</string>
-    <string name="menu_move_to_inbox" msgid="258554178236001444">"इनबक्समा सार्नुहोस्"</string>
-    <string name="menu_manage_folders" msgid="8486398523679534519">"फोल्डर सेटिङ्स"</string>
-    <string name="menu_show_original" msgid="2330398228979616661">"स्वत: पूर्वाकारमा परिवर्तित"</string>
-    <string name="menu_settings" msgid="7993485401501778040">"सेटिङ्स"</string>
-    <string name="menu_search" msgid="1949652467806052768">"खोजी गर्नुहोस्"</string>
-    <string name="drawer_title" msgid="3766219846644975778">"नेभिगेसन"</string>
-    <string name="mark_important" msgid="8781680450177768820">"महत्त्वपूर्णका रूपमा चिनो लगाउनुहोस्"</string>
-    <string name="mark_not_important" msgid="3342258155408116917">"महत्त्वपूर्ण हैन भनी चिनो लगाउनुहोस्"</string>
-    <string name="add_cc_label" msgid="2249679001141195213">"Cc/Bcc थप्नुहोस्"</string>
-    <string name="add_bcc_label" msgid="963745641238037813">"Bcc"</string>
-    <string name="quoted_text" msgid="977782904293216533">"उद्धृत पाठ समावेश गर्नुहोस्"</string>
-    <string name="quoted_text_label" msgid="2296807722849923934">"पाठ उद्धृत गर्नुहोस्"</string>
-    <string name="respond_inline" msgid="6609746292081928078">"इनलाइन प्रतिक्रिया दिनुहोस्"</string>
-    <string name="bytes" msgid="651011686747499628">"<xliff:g id="COUNT">%s</xliff:g> B"</string>
-    <string name="kilobytes" msgid="1523463964465770347">"<xliff:g id="COUNT">%s</xliff:g> KB"</string>
-    <string name="megabytes" msgid="4309397368708773323">"<xliff:g id="COUNT">%s</xliff:g> MB"</string>
-    <string name="attachment_image" msgid="6375306026208274564">"तस्बिर"</string>
-    <string name="attachment_video" msgid="7119476472603939848">"भिडियो"</string>
-    <string name="attachment_audio" msgid="7097658089301809284">"अडियो"</string>
-    <string name="attachment_text" msgid="3485853714965922173">"पाठ"</string>
-    <string name="attachment_application_msword" msgid="2110108876623152162">"कागजात"</string>
-    <string name="attachment_application_vnd_ms_powerpoint" msgid="425353008963359230">"प्रस्तुतीकरण"</string>
-    <string name="attachment_application_vnd_ms_excel" msgid="5585781311136609103">"स्प्रिडशिट"</string>
-    <string name="attachment_application_pdf" msgid="4207340200944655970">"PDF"</string>
-    <string name="attachment_unknown" msgid="3360536730101083926">"<xliff:g id="ATTACHMENTEXTENSION">%s</xliff:g> फाइल"</string>
-    <string name="preview_attachment" msgid="6265457626086113833">"पूर्वावलोकन"</string>
-    <string name="save_attachment" msgid="375685179032130033">"सुरक्षित गर्नुहोस्"</string>
-    <string name="cancel_attachment" msgid="6900093625792891122">"रद्द गर्नुहोस्।"</string>
-    <string name="open_attachment" msgid="6100396056314739761">"खोल्नुहोस्"</string>
-    <string name="install_attachment" msgid="8119470822958087928">"स्थापना गर्नुहोस्"</string>
-    <string name="download_again" msgid="8195787340878328119">"पुन: डाउनलोड गर्नुहोस्"</string>
-    <string name="more_info_attachment" msgid="2899691682394864507">"जानकारी"</string>
-    <string name="no_application_found" msgid="7309485680354949680">"कुनै अनुप्रयोगले हेर्नको लागि यो संलग्नकलाई खोल्न सक्दैन।"</string>
-    <string name="fetching_attachment" msgid="2286628490159574159">"संलग्नक ल्याइँदै"</string>
-    <string name="please_wait" msgid="3953824147776128899">"कृपया प्रतीक्षा गर्नुहोला..."</string>
-    <string name="saved" msgid="161536102236967534">"<xliff:g id="SIZE">%s</xliff:g>, सुरक्षित भयो"</string>
-    <string name="download_failed" msgid="3878373998269062395">"डाउनलोड गर्न सकिएन। पुन: प्रयास गर्नको लागि छुनुहोस्।"</string>
-    <string name="menu_photo_save_all" msgid="2742869476474613396">"सबै सुरक्षित गर्नुहोस्"</string>
-    <string name="menu_photo_share" msgid="6410980274832639330">"साझेदारी गर्नुहोस्"</string>
-    <string name="menu_photo_share_all" msgid="3049053252719665320">"सबै साझेदारी गर्नुहोस्"</string>
-    <string name="menu_photo_print" msgid="3084679038179342333">"प्रिन्ट गर्नुहोस्"</string>
-    <string name="saving" msgid="6274238733828387433">"सुरक्षित हुदैछ ..."</string>
-    <string name="choosertitle_sharevia" msgid="3539537264873337959">"यस माध्यमबाट साझेदारी गर्नुहोस्"</string>
-    <string name="contextmenu_openlink" msgid="6952228183947135362">"ब्राउजरमा खोल्नुहोस्"</string>
-    <string name="contextmenu_copy" msgid="2584243784216385180">"प्रतिलिपि गर्नुहोस्"</string>
-    <string name="contextmenu_copylink" msgid="8659897702269320063">"लिङ्क URL प्रतिलिपि गर्नुहोस्"</string>
-    <string name="contextmenu_view_image" msgid="1031172763893491000">"तस्बिर हेर्नुहोस्"</string>
-    <string name="contextmenu_dial_dot" msgid="8881095692316726628">"डायल गर्नुहोस्..."</string>
-    <string name="contextmenu_sms_dot" msgid="5319737001771622657">"SMS..."</string>
-    <string name="contextmenu_add_contact" msgid="2310064151427072475">"सम्पर्क थप्नुहोस्"</string>
-    <string name="contextmenu_send_mail" msgid="3834654593200105396">"इमेल पठाउनुहोस्"</string>
-    <string name="contextmenu_map" msgid="5118951927399465521">"नक्शा"</string>
-    <string name="contextmenu_sharelink" msgid="8670940060477758709">"लिङ्क साझेदारी गर्नुहोस्"</string>
-    <string name="contextmenu_help" msgid="4209674157707873384">"मद्दत गर्नुहोस्"</string>
-    <string name="contextmenu_feedback" msgid="8319100902136337085">"प्रतिक्रिया पठाउनुहोस्"</string>
-    <!-- no translation found for num_selected (7990204488812654380) -->
-    <skip />
-  <plurals name="move_conversation">
-    <item quantity="one" msgid="237882018518207244">"कुराकानी सार्नुहोस्"</item>
-    <item quantity="other" msgid="6639576653114141743">"<xliff:g id="ID_1">%1$d</xliff:g> कुराकानीहरू सार्नुहोस्"</item>
-  </plurals>
-    <string name="content_description" msgid="854320355052962069">"<xliff:g id="TOHEADER">%1$s</xliff:g> <xliff:g id="PARTICIPANT">%2$s</xliff:g> बारेमा <xliff:g id="SUBJECT">%3$s</xliff:g> , <xliff:g id="SNIPPET">%4$s</xliff:g> यस <xliff:g id="DATE">%5$s</xliff:g> , <xliff:g id="READSTATE">%6$s</xliff:g>मा"</string>
-    <string name="content_description_today" msgid="1634422834354116955">"<xliff:g id="TOHEADER">%1$s</xliff:g> <xliff:g id="PARTICIPANT">%2$s</xliff:g> बारेमा <xliff:g id="SUBJECT">%3$s</xliff:g> , <xliff:g id="SNIPPET">%4$s</xliff:g> यस<xliff:g id="TIME">%5$s</xliff:g>, <xliff:g id="READSTATE">%6$s</xliff:g>मा"</string>
-    <string name="read_string" msgid="5495929677508576520">"कुराकानी पढाई"</string>
-    <string name="unread_string" msgid="7342558841698083381">"नपढिएको कुराकानी"</string>
-    <string name="filtered_tag" msgid="721666921386074505">"[<xliff:g id="TAG">%1$s</xliff:g>]<xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="badge_and_subject" msgid="3979372269373936750">"<xliff:g id="ID_1">%1$s</xliff:g> <xliff:g id="ID_2">%2$s</xliff:g>"</string>
-  <plurals name="draft">
-    <item quantity="one" msgid="6717535677167943402">"ड्राफ्ट"</item>
-    <item quantity="other" msgid="1335781147509740039">"ड्राफ्ट"</item>
-  </plurals>
-    <string name="sending" msgid="5600034886763930499">"पठाउँदै..."</string>
-    <string name="message_retrying" msgid="5335188121407261331">"पुन: प्रयास गर्दै..."</string>
-    <string name="message_failed" msgid="7887650587384601790">"विफल भयो"</string>
-    <string name="send_failed" msgid="2186285547449865010">"सन्देश पठाइएको थिएन।"</string>
-    <string name="me_object_pronoun" msgid="4674452244417913816">"म"</string>
-    <string name="me_subject_pronoun" msgid="7479328865714008288">"म"</string>
-  <plurals name="confirm_delete_conversation">
-    <item quantity="one" msgid="7605755011865575440">"यो कुराकानी मेटाउने हो?"</item>
-    <item quantity="other" msgid="1585660381208712562">"यी <xliff:g id="COUNT">%1$d</xliff:g> कुराकानीहरू मेटाउनु हुन्छ?"</item>
-  </plurals>
-  <plurals name="confirm_archive_conversation">
-    <item quantity="one" msgid="9105551557653306945">"यस कुराकानीको सङ्ग्रह राख्ने हो?"</item>
-    <item quantity="other" msgid="2001972798185641108">"यी <xliff:g id="COUNT">%1$d</xliff:g> कुराकानीहरू अभिलेख गर्नुहुन्छ?"</item>
-  </plurals>
-  <plurals name="confirm_discard_drafts_conversation">
-    <item quantity="one" msgid="2030421499893210789">"यो सन्देश खारेज गर्नुहुन्छ?"</item>
-    <item quantity="other" msgid="782234447471532005">"यी <xliff:g id="COUNT">%1$d</xliff:g> सन्देशहरू खारेज गर्नुहुन्छ?"</item>
-  </plurals>
-    <string name="confirm_discard_text" msgid="5172680524418848519">"यो सन्देश खारेज गर्नुहुन्छ?"</string>
-    <string name="loading_conversations" msgid="7255732786298655246">"लोड हुँदै..."</string>
-    <string name="empty_inbox" msgid="5901734942362315228">"तपाईँले सबै गर्नुभयो! आफ्नो दिन रमाइलोसँग मनाउनुहोस्।"</string>
-    <string name="empty_search" msgid="8564899353449880818">"ओहो! हामीले \"<xliff:g id="SEARCH_QUERY">%1$s</xliff:g>\"को लागि केहि पनि पाएनौँ।"</string>
-    <string name="empty_spam_folder" msgid="3288985543286122800">"हुर्रे, यहाँ कुनै स्प्याम छैन!"</string>
-    <string name="empty_trash_folder" msgid="378119063015945020">"यहाँ कुनै रद्दी सामाग्री छैन। रिसाइक्लिङ्ग गर्नुभएकोमा धन्यवाद!"</string>
-    <string name="empty_folder" msgid="3227552635613553855">"यहाँ कुनै मेल छैन।"</string>
-    <string name="getting_messages" msgid="8403333791332403244">"तपाईँका सन्देशहरू प्राप्त गर्दै"</string>
-    <string name="undo" msgid="8256285267701059609">"पूर्ववत"</string>
-  <plurals name="conversation_unstarred">
-    <item quantity="one" msgid="839233699150563831">"ताराङ्कन हटाउँदै <xliff:g id="COUNT">%1$d</xliff:g> कुराकानी।"</item>
-    <item quantity="other" msgid="7677305734833709789">"ताराङ्कन हटाउँदै <xliff:g id="COUNT">%1$d</xliff:g> कुराकानीहरू।"</item>
-  </plurals>
-  <plurals name="conversation_muted">
-    <item quantity="one" msgid="3339638225564408438">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; मौन गरियो।"</item>
-    <item quantity="other" msgid="4276111931404654219">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; मौन गरियो।"</item>
-  </plurals>
-  <plurals name="conversation_spammed">
-    <item quantity="one" msgid="6986172030710967687">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; स्प्यामको रूपमा रिपोर्ट गरियो।"</item>
-    <item quantity="other" msgid="5900913789259199137">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; स्प्यामको रूपमा रिपोर्ट गरियो।"</item>
-  </plurals>
-  <plurals name="conversation_not_spam">
-    <item quantity="one" msgid="2294904093653094150">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; स्प्याम होइन भनी रिपोर्ट गरियो।"</item>
-    <item quantity="other" msgid="4966164423991098144">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; स्प्याम होइन भनी रिपोर्ट गरियो।"</item>
-  </plurals>
-  <plurals name="conversation_not_important">
-    <item quantity="one" msgid="3824809189993339030">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; महत्त्वपूर्ण होइन भनी चिनो लगाइयो।"</item>
-    <item quantity="other" msgid="1215472798075869124">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; महत्त्वपूर्ण होइन भनी चिनो लगाइयो।"</item>
-  </plurals>
-  <plurals name="conversation_phished">
-    <item quantity="one" msgid="4330095881258771201">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; फिशिंगको रूपमा रिपोर्ट गरियो।"</item>
-    <item quantity="other" msgid="9218674052779504277">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; फिशिंगको रूपमा रिपोर्ट गरियो।"</item>
-  </plurals>
-  <plurals name="conversation_archived">
-    <item quantity="one" msgid="4127890884907503696">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; सङ्ग्रहित।"</item>
-    <item quantity="other" msgid="7789480176789922968">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; सङ्ग्रहित।"</item>
-  </plurals>
-  <plurals name="conversation_deleted">
-    <item quantity="one" msgid="5591889079235938982">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; मेटाइयो।"</item>
-    <item quantity="other" msgid="7060256058737892078">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; मेटाइयो।"</item>
-  </plurals>
-    <string name="deleted" msgid="7378013910782008375">"मेटाइयो"</string>
-    <string name="archived" msgid="6283673603512713022">"भण्डार गरियो"</string>
-    <string name="folder_removed" msgid="5656281444688183676">"<xliff:g id="FOLDERNAME">%1$s</xliff:g>बाट निकालियो"</string>
-  <plurals name="conversation_folder_changed">
-    <item quantity="one" msgid="6463727361987396734">"फोल्डर परिवर्तन भयो।"</item>
-    <item quantity="other" msgid="8815390494333090939">"फोल्डरहरु परिवर्तन भए।"</item>
-  </plurals>
-    <string name="conversation_folder_moved" msgid="6475872337373081683">"<xliff:g id="FOLDERNAME">%1$s</xliff:g>मा सारियो"</string>
-    <string name="search_results_header" msgid="1529438451150580188">"परिणामहरू"</string>
-    <string name="search_unsupported" msgid="2873920566477359177">"यस खातामा खोजी समर्थित छैन।"</string>
-    <string name="add_label" msgid="3285338046038610902">"फोल्डर थप्नुहोस्"</string>
-    <string name="new_incoming_messages_one" msgid="5933087567495998661">"<xliff:g id="SENDER">%s</xliff:g> बाट नयाँ सन्देश देखाउनुहोस्।"</string>
-  <plurals name="new_incoming_messages_many">
-    <item quantity="other" msgid="4394042684501388790">"<xliff:g id="COUNT">%1$d</xliff:g> नयाँ सन्देशहरू देखाउनुहोस्।"</item>
-  </plurals>
-    <string name="date_and_view_details" msgid="2952994746916149969">"<xliff:g id="DATE">%1$s</xliff:g> &lt;a href=\'http://www.example.com\'&gt;विवरणहरू हेर्नुहोस्&lt;/a&gt;"</string>
-    <string name="hide_details" msgid="8018801050702453314">"विवरण लुकाउनुहोस्"</string>
-    <string name="to_message_header" msgid="3954385178027011919">"<xliff:g id="RECIPIENTS">%1$s</xliff:g> लाई"</string>
-    <string name="contact_info_string" msgid="6484930184867405276">"<xliff:g id="NAME">%1$s</xliff:g>को लागि सम्पर्क जानकारी देखाउनुहोस्"</string>
-    <string name="contact_info_string_default" msgid="6204228921864816351">"सम्पर्क जानकारी देखाउनुहोस्"</string>
-  <plurals name="show_messages_read">
-    <item quantity="other" msgid="5285673397387128129">"<xliff:g id="COUNT">%1$d</xliff:g> पुरानो सन्देश"</item>
-  </plurals>
-    <string name="from_heading" msgid="48290556829713090">"प्रेषक:"</string>
-    <string name="replyto_heading" msgid="8275255318292059079">"यसमा जवाफ पठाउनुहोस्:"</string>
-    <string name="to_heading" msgid="3495203282540398336">"प्रापक: "</string>
-    <string name="to_heading_no_space" msgid="679167047628308670">"प्रापक:"</string>
-    <string name="cc_heading" msgid="5603892257866345823">"Cc:"</string>
-    <string name="bcc_heading" msgid="1482186590756218269">"Bcc:"</string>
-    <string name="date_heading" msgid="4213063948406397168">"मिति:"</string>
-    <string name="show_images" msgid="436044894053204084">"चित्रहरू देखाउनुहोस्"</string>
-    <string name="always_show_images" msgid="556087529413707819">"यस प्रेषकबाट सधैँ चित्र देखाउनुहोस्"</string>
-    <string name="always_show_images_toast" msgid="3763157294047555051">"यस प्रेषकबाट पठाइएका चित्रहरू स्वचालित रूपमा देखाइने छन्।"</string>
-    <string name="address_display_format" msgid="2098008376913966177">"<xliff:g id="NAME">%1$s</xliff:g> <xliff:g id="EMAIL">%2$s</xliff:g>"</string>
-    <string name="address_display_format_with_via_domain" msgid="8108294635074750048">"<xliff:g id="NAME">%1$s</xliff:g> <xliff:g id="EMAIL">%2$s</xliff:g> <xliff:g id="VIA_DOMAIN">%3$s</xliff:g> मार्फत"</string>
-    <string name="message_saved" msgid="3291655042310241793">"सन्देश ड्राफ्टको रूपमा सुरक्षित गरियो।"</string>
-    <string name="sending_message" msgid="2487846954946637084">"सन्देश पठाउँदै..."</string>
-    <string name="invalid_recipient" msgid="9157434699389936584">"ठेगाना <xliff:g id="WRONGEMAIL">%s</xliff:g> अमान्य छ।"</string>
-    <string name="show_elided" msgid="3456154624105704327">"उद्धृत पाठ देखाउनुहोस्"</string>
-    <string name="hide_elided" msgid="5768235486834692733">"▼ उद्धृत पाठ लुकाउनुहोस्"</string>
-    <string name="message_invite_title" msgid="5985161025144867256">"पात्रो आमन्त्रण"</string>
-    <string name="message_invite_calendar_view" msgid="9181966650840809197">"क्यालेन्डरमा हेर्नुहोस्"</string>
-    <string name="message_invite_label_attending" msgid="4194264767870003397">"जाँदै हुनुहुन्छ?"</string>
-    <string name="message_invite_accept" msgid="8002758842580134835">"हो"</string>
-    <string name="message_invite_tentative" msgid="3199418731566655887">"सायद"</string>
-    <string name="message_invite_decline" msgid="6331040872447290777">"होइन"</string>
-    <string name="enumeration_comma" msgid="2848850136844740850">", "</string>
-    <string name="send_anyway" msgid="2727576121007079643">"जसरी नि पठाउनुहोस्"</string>
-    <string name="ok" msgid="6178802457914802336">"ठीक छ"</string>
-    <string name="done" msgid="344354738335270292">"सम्पन्न भयो"</string>
-    <string name="cancel" msgid="4831678293149626190">"रद्द गर्नुहोस्।"</string>
-    <string name="clear" msgid="765949970989448022">"क्लियर गर्नुहोस्"</string>
-    <string name="next" msgid="2662478712866255138">"अर्को"</string>
-    <string name="previous" msgid="8985379053279804274">"अघिल्लो"</string>
-  <string-array name="sync_status">
-    <item msgid="4600303222943450797">"सफलता"</item>
-    <item msgid="2972425114100316260">"जडान छैन"</item>
-    <item msgid="8594593386776437871">"साइन इन गर्न सकिँदैन।"</item>
-    <item msgid="1375193906551623606">"सुरक्षा त्रुटि।"</item>
-    <item msgid="195177374927979967">"सिङ्क हुन सकेन"</item>
-    <item msgid="8026148967150231130">"आन्तरिक त्रुटि"</item>
-    <item msgid="5442620760791553027">"सर्भर त्रुटि"</item>
-  </string-array>
-    <string name="tap_to_configure" msgid="137172348280050643">"स्थापित गर्नको लागि छुनुहोस्"</string>
-    <string name="non_synced_folder_description" msgid="3044618511909304701">"कुराकानी हेर्नको लागि यो फोल्डर सिङ्क गर्नुहोस्।"</string>
-    <string name="tap_to_configure_folder_sync" msgid="3280434399275638071">"सिङ्क फोल्डर"</string>
-    <string name="widget_large_unread_count" msgid="8699435859096455837">"%d+"</string>
-    <string name="large_unseen_count" msgid="3055042669246912518">"<xliff:g id="COUNT">%d</xliff:g> + नयाँ"</string>
-    <string name="unseen_count" msgid="5509898665569695288">"<xliff:g id="COUNT">%d</xliff:g> नयाँ"</string>
-  <plurals name="actionbar_unread_messages">
-    <item quantity="other" msgid="3863201473731766006">"<xliff:g id="COUNT">%1$d</xliff:g> नपढेको"</item>
-  </plurals>
-    <string name="actionbar_large_unread_count" msgid="753635978542372792">"<xliff:g id="COUNT">%1$d</xliff:g>+ अपठित"</string>
-    <string name="view_more_conversations" msgid="8377920000247101901">"थप कुराकानीहरू हेर्नुहोस्"</string>
-    <string name="loading_conversation" msgid="7931600025861500397">"लोड हुँदै..."</string>
-    <string name="activity_mailbox_selection" msgid="7489813868539767701">"खाता छान्नुहोस्"</string>
-    <string name="activity_folder_selection" msgid="8375243281001234750">"फोल्डर छान्नुहोस्"</string>
-    <string name="folder_shortcut_widget_label" msgid="6466292659577092915">"इमेल फोल्डर"</string>
-    <string name="change_folders_selection_dialog_title" msgid="9174464298613273814">"फोल्डरहरु परिवर्तन गर्नुहोस्"</string>
-    <string name="move_to_selection_dialog_title" msgid="4052506464467083621">"मा सार्नुहोस्"</string>
-    <string name="search_hint" msgid="4916671414132334289">"मेल खोज्नुहोस्"</string>
-    <!-- no translation found for search_results_loaded (1784879343458807514) -->
-    <skip />
-    <string name="network_error" msgid="5931164247644972255">"जडान छैन"</string>
-    <string name="retry" msgid="916102442074217293">"पुन:प्रयास गर्नुहोला।"</string>
-    <string name="load_more" msgid="8702691358453560575">"अधिक लोड गर्नुहोस्"</string>
-    <!-- no translation found for load_attachment (3894318473827290350) -->
-    <skip />
-    <string name="shortcut_name_title" msgid="1562534040126088628">"फोल्डर शर्टकटको नाम दिनुहोस्"</string>
-    <string name="wait_for_sync_title" msgid="4577632826912823075">"सिङ्क हुनको लागि प्रतीक्षा गर्दै"</string>
-    <string name="not_synced_title" msgid="3600180500934086346">"खाता सिङ्क भएको छैन"</string>
-    <string name="wait_for_manual_sync_body" msgid="2823149409451003378">"यस  खातामा स्वचालित रूप मा सिङ्क गर्नको लागि सेटअप गरिएको छैन।\nछुनुहोस्"<b>"अहिले सिङ्क"</b>" एक पटक मेल सिङ्क गर्नको लागि वा "<b>" सिङ्क सेटिङहरू परिवर्तन गर्नुहोस् "</b>" सिङ्क मेलमा स्वतः यस  खाता सेटअप गर्नको लागि।"</string>
-    <string name="manual_sync" msgid="2271479734895537848">"अहिले सिङ्क गर्नुहोस्"</string>
-    <string name="change_sync_settings" msgid="3615852118397055361">"सिङ्क सेटिङ्स परिवर्तन गर्नुहोस्"</string>
-    <string name="photo_load_failed" msgid="577471721679146999">"तस्बिरलाई लोड गर्न सकेन"</string>
-    <string name="cant_move_or_change_labels" msgid="4155490583610926755">"सार्न सकिएन किनकि छनोट भएका भित्र एक भन्दा बढी खाताहरु छन्।"</string>
-    <string name="multiple_new_message_notification_item" msgid="1386588046275174918"><b>"<xliff:g id="SENDER">%1$s</xliff:g>"</b>"  <xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="single_new_message_notification_big_text" msgid="2170154732664242904">"<xliff:g id="SUBJECT">%1$s</xliff:g>\n<xliff:g id="SNIPPET">%2$s</xliff:g>"</string>
-    <string name="ignore_spam_warning" msgid="8760314545535838430">"बेवास्ता गर्नुहोस्, म यो सन्देशलाई विश्वास गर्दछु"</string>
-    <string name="via_domain" msgid="537951148511529082">"<xliff:g id="VIADOMAIN">%1$s</xliff:g> को माध्यम बाट"</string>
-    <string name="signin" msgid="4699091478139791244">"साइन- इन गर्नुहोस्"</string>
-    <string name="info" msgid="1357564480946178121">"जानकारी"</string>
-    <string name="report" msgid="4318141326014579036">"रिपोर्ट गर्नुहोस्"</string>
-    <string name="sync_error" msgid="1795794969006241678">"सिङ्क हुन सकेन"</string>
-    <string name="sync_error_message" msgid="4182644657243736635">"तपाईँको उपकरणसँग सिङ्क गर्नको लागि पर्याप्त भण्डारण स्थान छैन।"</string>
-    <string name="storage" msgid="4783683938444150638">"भण्डारण"</string>
-    <string name="senders_split_token" msgid="6549228851819460081">", "</string>
-    <string name="draft_count_format" msgid="9122583199850209286">" (<xliff:g id="COUNT">%1$s</xliff:g>)"</string>
-    <string name="all_folders_heading" msgid="9023770187629170967">"सबै फोल्डरहरू"</string>
-    <string name="recent_folders_heading" msgid="8943134955788867702">"भर्खरका फोल्डरहरु"</string>
-    <string name="message_details_title" msgid="60771875776494764">"सन्देश विवरणहरू"</string>
-    <string name="preference_advance_to_title" msgid="6385669491239514630">"स्वत:-उन्नत"</string>
-  <string-array name="prefEntries_autoAdvance">
-    <item msgid="1505450878799459652">"नयाँ"</item>
-    <item msgid="8000986144872247139">"पुरानो"</item>
-    <item msgid="8015001161633421314">"कुराकानी सूची"</item>
-  </string-array>
-  <string-array name="prefSummaries_autoAdvance">
-    <item msgid="8221665977497655719">"तपाईंले मेटाए पछि नयाँ कुराकानी देखाउनुहोस्"</item>
-    <item msgid="1721869262893378141">"तपाईंले मेटाए पछि पुरानो कुराकानी देखाउनुहोस्"</item>
-    <item msgid="880913657385630195">"तपाईंले मेटाए पछि कुराकानी सूची देखाउनुहोस्"</item>
-  </string-array>
-    <string name="prefDialogTitle_autoAdvance" msgid="5459235590885640678">"निम्नमा उन्नत"</string>
-    <string name="clear_display_images_whitelist_title" msgid="2012677202404471778">"तस्बिर अनुमोदनहरू हटाउनुहोस्"</string>
-    <string name="clear_display_images_whitelist_dialog_title" msgid="1942692501166848471">"तस्बिर अनुमोदनहरू हटाउनु हुन्छ?"</string>
-    <string name="clear_display_images_whitelist_dialog_message" msgid="3952553078559373729">"तपाईँले पहिले अनुमति दिनुभएका प्रेषकहरूबाट इनलाइन चित्रहरू प्रदर्शन गर्न रोक्नुहोस्।"</string>
-    <string name="sender_whitelist_cleared" msgid="2490984995927904030">"तस्बिरहरू स्वचालित रूपमा देखाइने छैन।"</string>
-    <string name="preferences_signature_title" msgid="2318034745474929902">"हस्ताक्षर"</string>
-    <string name="preferences_signature_dialog_title" msgid="4801741764511807064">"हस्ताक्षर"</string>
-    <string name="preferences_signature_summary_not_set" msgid="3776614319388053784">"सेट गरेको छैन"</string>
-    <string name="notification_action_reply" msgid="8378725460102575919">"जवाफ पठाउनुहोस्"</string>
-    <string name="notification_action_reply_all" msgid="5693469099941000037">"सबैलाई जवाफ दिनुहोस्"</string>
-    <string name="notification_action_archive" msgid="2884874164831039047">"अभिलेख"</string>
-    <string name="notification_action_remove_label" msgid="3714785653186750981">"लेबलहरू हटाउनुहोस्"</string>
-    <string name="notification_action_delete" msgid="3201627482564624132">"मेट्नुहोस्"</string>
-    <string name="notification_action_undo_archive" msgid="600186958134073582">"भण्डार गरियो"</string>
-    <string name="notification_action_undo_remove_label" msgid="8341924850540100690">"लेबल हटाईयो"</string>
-    <string name="notification_action_undo_delete" msgid="6915612337413587103">"मेटाइयो"</string>
-    <string name="veiled_address" msgid="2670378260196977266"></string>
-    <string name="veiled_alternate_text" msgid="6343564357099807582"></string>
-    <string name="veiled_alternate_text_unknown_person" msgid="6728323554307952217"></string>
-    <string name="veiled_summary_unknown_person" msgid="2122359944161241551"></string>
-    <string name="label_notification_ticker" msgid="323232821061341014">"<xliff:g id="LABEL">%s</xliff:g>: <xliff:g id="NOTIFICATION">%s</xliff:g>"</string>
-  <plurals name="new_messages">
-    <item quantity="one" msgid="3446656407520493241">"<xliff:g id="COUNT">%1$d</xliff:g> नयाँ सन्देश"</item>
-    <item quantity="other" msgid="3531683811183204615">"<xliff:g id="COUNT">%1$d</xliff:g> नयाँ सन्देशहरू"</item>
-  </plurals>
-    <string name="single_new_message_notification_title" msgid="7954710563222504868">"<xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="silent_ringtone" msgid="1570794756474381886">"मौन"</string>
-    <string name="preference_removal_action_title" msgid="4703834472477137634">"अभिलेख र कार्य मेट्नुहोस्"</string>
-  <string-array name="prefEntries_removal_action">
-    <item msgid="954772302016538814">"केवल संग्रह देखाउनुहोस्"</item>
-    <item msgid="7212690302706180254">"मेट्ने मात्र देखाउनुहोस्"</item>
-    <item msgid="2539051197590685708">"अभिलेख देखाउँनुहोस्&amp; मेट्नुहोस्"</item>
-  </string-array>
-  <string-array name="prefSummaries_removal_action_summary">
-    <item msgid="6877416142040695022">"केवल संग्रह देखाउनुहोस्"</item>
-    <item msgid="1510017057984222376">"मेट्ने मात्र देखाउनुहोस्"</item>
-    <item msgid="3196207224108008441">"अभिलेख देखाउँनुहोस्&amp; मेट्नुहोस्"</item>
-  </string-array>
-    <string name="prefDialogTitle_removal_action" msgid="266548424110393246">"अभिलेख र कार्य मेट्नुहोस्"</string>
-    <string name="preferences_default_reply_all_title" msgid="7255858488369635327">"सबैलाई जवाफ दिनुहोस्"</string>
-    <string name="preferences_default_reply_all_summary_impl" msgid="895581085692979709">"सन्देश जवाफहरूको लागि पूर्वनिर्धारितको रूपमा प्रयोग गर्नुहोस्"</string>
-    <string name="preference_swipe_title_archive" msgid="9122333537761282714">"सङ्ग्रह गर्न स्वाइप गर्नुहोस्"</string>
-    <string name="preference_swipe_title_delete" msgid="4860474024917543711">"मेट्नको लागि स्वाइप गर्नुहोस्"</string>
-    <string name="preference_swipe_description" msgid="3036560323237015010">"वार्तालाप सूचीमा"</string>
-    <string name="preference_sender_image_title" msgid="7890813537985591865">"प्रेषक चित्र"</string>
-    <string name="preference_sender_image_description" msgid="3586817690132199889">"कुराकानी सूचीमा पछाडिको नाम देखाउनुहोस्"</string>
-    <string name="empty_trash" msgid="3385937024924728399">"रद्दीटोकरी खाली गर्नुहोस्"</string>
-    <string name="empty_spam" msgid="2911988289997281371">"खाली स्प्याम"</string>
-    <string name="empty_trash_dialog_title" msgid="2104898489663621508">"रद्दी टोकरी खाली गर्ने हो?"</string>
-    <string name="empty_spam_dialog_title" msgid="1130319045917820569">"खाली स्प्याम?"</string>
-  <plurals name="empty_folder_dialog_message">
-    <item quantity="one" msgid="3315412388217832914">"<xliff:g id="COUNT">%1$d</xliff:g> सन्देश स्थायी रूपमा मेटाईनेछ।"</item>
-    <item quantity="other" msgid="263840304486020101">"<xliff:g id="COUNT">%1$d</xliff:g> सन्देशहरू स्थायी रूपमा मेटाईनेछन्।"</item>
-  </plurals>
-    <string name="drawer_open" msgid="2285557278907103851">"नेभिगेसन ड्रअर खोल्नुहोस्"</string>
-    <string name="drawer_close" msgid="2065829742127544297">"नेभिगेसन ड्रअर बन्द गर्नुहोस्"</string>
-    <string name="conversation_photo_welcome_text" msgid="836483155429003787">"त्यस  कुराकानीलाई छान्नको लागि एक प्रेषकको चित्रलाई छुनुहोस्।"</string>
-    <string name="long_press_to_select_tip" msgid="1660881999120625177">"एउटा कुराकानी छान्न छुनुहोस् र समाउनुहोस्, त्यसपछि थप चयन गर्न छुनुहोस्।"</string>
-    <string name="folder_icon_desc" msgid="6272938864914794739">"फोल्डर आइकन"</string>
-    <string name="add_account" msgid="5905863370226612377">"खाता थप्नुहोस्"</string>
-    <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"टिप खारेज गर्नुहोस्"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"स्वचालित सिङ्क बन्द छ।"</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"खोल्नको लागि छुनुहोस्।"</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"खाता सिङ्क बन्द छ।"</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"<xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g> मा सक्रिय बनाउनुहोस्"</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"खाता सेटिङ्स"</string>
-    <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="OUTBOX">%2$s</xliff:g>मा नपठाइएको <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
-    <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"स्वचालित सिङ्क सक्रिय पार्ने हो?"</string>
-    <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Gmail मा मात्र नभई, समपूर्ण अनुप्रयोग र खाताहरूमा तपाईँले गर्नुहुने वेब, तपाईँका अन्य उपकरणहरू र <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g> मा सिङ्ख्रोनाइज हुनेछ।"</string>
-    <string name="phone" msgid="4142617042507912053">"फोन"</string>
-    <string name="tablet" msgid="4593581125469224791">"ट्याबलेट"</string>
-    <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="7239160845196929866">"सक्रिय पार्नुहोस्"</string>
-    <string name="show_n_more_folders" msgid="5769610839632786654">"<xliff:g id="NUMBER">%1$s</xliff:g> थप फोल्डर देखाउनुहोस्"</string>
-    <string name="hide_folders" msgid="7618891933409521283">"फोल्डरहरु लुकाउनुहोस्"</string>
-    <string name="print" msgid="7987949243936577207">"प्रिन्ट गर्नुहोस्"</string>
-    <string name="print_all" msgid="4011022762279519941">"सबै मुद्रण गरिएको छ"</string>
-  <plurals name="num_messages">
-    <item quantity="one" msgid="8071234386915191851">"<xliff:g id="COUNT">%1$d</xliff:g> सन्देश"</item>
-    <item quantity="other" msgid="962415099931188360">"<xliff:g id="COUNT">%1$d</xliff:g> सन्देशहरु"</item>
-  </plurals>
-    <string name="date_message_received_print" msgid="4168417403884350040">"<xliff:g id="DAY_AND_DATE">%1$s</xliff:g> यस <xliff:g id="TIME">%2$s</xliff:g>मा"</string>
-    <string name="draft_to_heading" msgid="7370121943946205024">"निम्नलाई ड्राफ्ट:"</string>
-    <string name="draft_heading" msgid="7032951343184552800">"मस्यौदा"</string>
-    <string name="quoted_text_hidden_print" msgid="5256754205675159141">"प्रेषकको सन्देश लुकाइयो"</string>
-  <plurals name="num_attachments">
-    <item quantity="one" msgid="5494465717267988888">"<xliff:g id="COUNT">%1$d</xliff:g> एट्याच्मेन्ट"</item>
-    <item quantity="other" msgid="5422167728480739361">"<xliff:g id="COUNT">%1$d</xliff:g> एट्याच्मेन्टहरू"</item>
-  </plurals>
-    <string name="no_subject" msgid="5622708348540036959">"(कुनै विषय छैन)"</string>
-    <string name="vacation_responder" msgid="5570132559074523806">"बिदा जवाफकर्ता"</string>
-    <string name="preferences_vacation_responder_title" msgid="2268482117730576123">"बिदा जवाफकर्ता"</string>
-    <string name="vacation_responder_body_hint_text" msgid="9087613123105158494">"सन्देश"</string>
-    <string name="send_to_contacts_text" msgid="124432913980620545">"मेरो सम्पर्कका व्यक्तिहरूलाई मात्र जवाफ पठाउनुहोस्"</string>
-    <string name="send_to_domain_text" msgid="5064559546745918393">"<xliff:g id="DOMAIN">%1$s</xliff:g> लाई मात्र जवाफ पठाउनुहोस्"</string>
-    <string name="pick_start_date_title" msgid="2274665037355224165">"सुरू हुन्छ"</string>
-    <string name="pick_end_date_title" msgid="733396083649496600">"समाप्ती (वैकल्पिक)"</string>
-    <string name="date_not_set" msgid="3251555782945051904">"सेट गरेको छैन"</string>
-    <string name="set_end_date_dialog_title" msgid="7543009262788808443">"मिति सकियो (वैकल्पिक)"</string>
-    <string name="custom_date" msgid="5794846334232367838">"अनुकूलन"</string>
-    <string name="date_none" msgid="1061426502665431412">"कुनै पनि होइन"</string>
-    <string name="discard_changes" msgid="5699760550972324746">"परिवर्तनहरू रद्द गर्नुहुन्छ?"</string>
-    <string name="vacation_responder_changes_saved" msgid="91448817268121249">"अवकाश प्रत्युत्तर परिवर्तन बचत गरियो"</string>
-    <string name="vacation_responder_changes_discarded" msgid="21756037735539983">"अवकाश प्रत्युत्तर परिवर्त रद्द गरियो"</string>
-    <string name="vacation_responder_off" msgid="4429909341193366667">"बन्द"</string>
-    <string name="vacation_responder_on" msgid="4913238379320882449">"मा, <xliff:g id="DATE">%1$s</xliff:g> देखि"</string>
-    <string name="vacation_responder_on_with_end_date" msgid="4360941815371475955">"मा, <xliff:g id="START_DATE">%1$s</xliff:g> देखि <xliff:g id="END_DATE">%2$s</xliff:g> सम्म"</string>
-    <string name="vacation_responder_empty_subject_and_body_warning" msgid="6233629618520852439">"विषय वा सन्देश थप्नुहोस्"</string>
-    <string name="view_entire_message" msgid="823281796655014454">"पूरै खबर हेर्नुहोस्"</string>
-    <string name="eml_loader_error_toast" msgid="6577383216635400167">"यो फाइल खोल्न सकिंदैन"</string>
-    <string name="help_and_info" msgid="3708286489943154681">"मद्दत गर्नुहोस्"</string>
-    <string name="help_and_feedback" msgid="7211458338163287670">"मद्दत र प्रतिक्रिया"</string>
-    <string name="feedback" msgid="204247008751740034">"प्रतिक्रिया पठाउनुहोस्"</string>
-    <string name="copyright" msgid="3121335168340432582">"©<xliff:g id="YEAR">%1$d</xliff:g> Google Inc."</string>
-    <string name="version" msgid="1161745345056656547">"<xliff:g id="APP_NAME">%1$s</xliff:g> संस्करण <xliff:g id="VERSION">%2$s</xliff:g>"</string>
-    <string name="view_app_page" msgid="3241990517052398927"></string>
-    <string name="print_dialog" msgid="8895536548487605661">"प्रिन्ट गर्नुहोस्…"</string>
-    <string name="copyright_information" msgid="971422874488783312">"प्रतिलिपि अधिकार सम्बन्धी जानकारी"</string>
-    <string name="privacy_policy" msgid="212094623396418302">"गोपनीयता नीति"</string>
-    <string name="open_source_licenses" msgid="8643615555920977752">"खुला स्रोत इजाजत पत्रहरू"</string>
-    <string name="reply_choice_yes" msgid="3327633032975373220">"हो"</string>
-    <string name="reply_choice_no" msgid="7068775605915475207">"होइन"</string>
-    <string name="reply_choice_ok" msgid="7881073621845053152">"ठीक छ"</string>
-    <string name="reply_choice_hehe" msgid="6054314968043050748">"हिहि"</string>
-    <string name="reply_choice_thanks" msgid="4978961954288364694">"धन्यवाद"</string>
-    <string name="reply_choice_i_agree" msgid="2496652737796884298">"मेरो सहमत छ"</string>
-    <string name="reply_choice_nice" msgid="4465894941302838676">"उत्तम"</string>
-    <string name="reply_on_my_way" msgid="5645003971107444269">"मेरो बाटोमा"</string>
-    <string name="reply_choice_later" msgid="4629219072859486413">"ठीक छ, तपाईँ समक्ष पुग्न मलाई अनुमति दिनुहोस्"</string>
-    <string name="reply_choice_smiling_face" msgid="1772253938506548631">":)"</string>
-    <string name="reply_choice_frowning_face" msgid="6260338807944002651">":("</string>
-    <string name="preference_header_action_confirmations" msgid="3922674681156121948">"कार्य पुष्टिकरण"</string>
-    <string name="preference_confirm_before_delete_title" msgid="7563587174619033835">"मेट्नुभन्दा पहिले निश्चित गर्नुहोस्"</string>
-    <string name="preference_confirm_before_archive_title" msgid="7318645995655875718">"सङ्ग्रह गर्नु पहिले निश्चित गर्नुहोस्"</string>
-    <string name="preference_confirm_before_send_title" msgid="4136585783513077039">"पठाउनुअघि निश्चित गर्नुहोस्"</string>
-    <string name="preferences_conversation_mode_title" msgid="389352009651720838">"सन्देशहरू स्वतः-फिट गर्नुहोस्"</string>
-    <string name="preferences_conversation_mode_summary" msgid="5730999743867653106">"स्क्रिन फिट गर्न सन्देशहरू स्रिङ्क गर्नुहोस्"</string>
-    <string name="preferences_disable_snap_headers_title" msgid="7257824136988429629">"सन्देश कार्यहरू"</string>
-  <string-array name="prefSummaries_snapHeader">
-    <item msgid="43373293784193461">"सधैँ स्क्रिनको शीर्षमा सन्देश कार्यहरू देखाउनुहोस्"</item>
-    <item msgid="1765271305989996747">"पोर्ट्रेटमा घुमाउँदा स्क्रिनको शीर्षमा सन्देशहरू मात्र देखाउनुहोस्"</item>
-    <item msgid="6311113076575333488">"सन्देश शीर्ष बाहिर सन्देश कार्यहरू नदेखाउनुहोस्"</item>
-  </string-array>
-  <string-array name="prefEntries_snapHeader">
-    <item msgid="6906986566816683587">"सधैँ देखाउनुहोस्"</item>
-    <item msgid="113299655708990672">"केवल पोर्ट्रेटमा देखाउनुहोस्"</item>
-    <item msgid="4403750311175924065">"नदेखाउनुहोस्"</item>
-  </string-array>
-    <string name="clear_history_title" msgid="5536216295725760357">"खोज इतिहास हटाउनुहोस्"</string>
-    <string name="search_history_cleared" msgid="1461946302763342640">"खोजी इतिहास हटाइयो।"</string>
-    <string name="clear_history_dialog_title" msgid="3503603389704365385">"खोज इतिहास खाली गर्नुहुन्छ?"</string>
-    <string name="clear_history_dialog_message" msgid="5202922561632407778">"तपाईँले पहिला गर्नुभएका सबै खोजीहरू हटाइने छन्।"</string>
-    <string name="manage_accounts_menu_item" msgid="4734660452395086786">"खाताहरू व्यवस्थापन गर्नुहोस्"</string>
-    <string name="general_preferences_title" msgid="4212138728220418162">"साधारण सेटिङहरू"</string>
-    <string name="activity_preferences" msgid="8966077432517613292">"सेटिङ्स"</string>
-</resources>
diff --git a/res/values-nl-sw600dp/strings.xml b/res/values-nl-sw600dp/strings.xml
index b2a9c2a..a9991f1 100644
--- a/res/values-nl-sw600dp/strings.xml
+++ b/res/values-nl-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Cc/Bcc"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Bcc"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Mappen beheren"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Gebruiken als standaard voor antwoorden op berichtmeldingen"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ Cc/Bcc"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ Bcc"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Mappen beheren"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Gebruiken als standaard voor antwoorden op berichtmeldingen"</string>
 </resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 2a8a650..c52f294 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -27,7 +27,7 @@
     <string name="add_file_attachment" msgid="2604880054248593993">"Bestand bijvoegen"</string>
     <string name="add_photo_attachment" msgid="7163589794940909528">"Foto bijvoegen"</string>
     <string name="save_draft" msgid="2669523480789672118">"Concept opslaan"</string>
-    <string name="discard" msgid="4905982179911608430">"Verwijderen"</string>
+    <string name="discard" msgid="4905982179911608430">"Weggooien"</string>
     <string name="compose" msgid="2602861958391035523">"Opstellen"</string>
   <string-array name="compose_modes">
     <item msgid="9000553538766397816">"Beantwoorden"</item>
@@ -160,10 +160,10 @@
     <item quantity="other" msgid="2001972798185641108">"Deze <xliff:g id="COUNT">%1$d</xliff:g> conversaties archiveren?"</item>
   </plurals>
   <plurals name="confirm_discard_drafts_conversation">
-    <item quantity="one" msgid="2030421499893210789">"Dit bericht verwijderen?"</item>
-    <item quantity="other" msgid="782234447471532005">"Deze <xliff:g id="COUNT">%1$d</xliff:g> berichten verwijderen?"</item>
+    <item quantity="one" msgid="2030421499893210789">"Dit bericht weggooien?"</item>
+    <item quantity="other" msgid="782234447471532005">"Deze <xliff:g id="COUNT">%1$d</xliff:g> berichten weggooien?"</item>
   </plurals>
-    <string name="confirm_discard_text" msgid="5172680524418848519">"Dit bericht verwijderen?"</string>
+    <string name="confirm_discard_text" msgid="5172680524418848519">"Dit bericht weggooien?"</string>
     <string name="loading_conversations" msgid="7255732786298655246">"Laden…"</string>
     <string name="empty_inbox" msgid="5901734942362315228">"U bent klaar. Nog een fijne dag gewenst."</string>
     <string name="empty_search" msgid="8564899353449880818">"Oeps! We hebben geen resultaten gevonden voor \'<xliff:g id="SEARCH_QUERY">%1$s</xliff:g>\'."</string>
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Mappictogram"</string>
     <string name="add_account" msgid="5905863370226612377">"Account toevoegen"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Tip negeren"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Automatische synchronisatie is uitgeschakeld."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Raak aan om in te schakelen."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Accountsynchronisatie is uitgeschakeld."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Inschakelen in <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Accountinstellingen"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> niet verzonden in <xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Automatisch synchroniseren inschakelen?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Wijzigingen die u aanbrengt in alle apps en accounts, niet alleen in Gmail, worden gesynchroniseerd tussen internet, uw andere apparaten en uw <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>."</string>
diff --git a/res/values-pl-sw600dp/strings.xml b/res/values-pl-sw600dp/strings.xml
index e0cfece..5407220 100644
--- a/res/values-pl-sw600dp/strings.xml
+++ b/res/values-pl-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ DW/UDW"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ UDW"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Zarządzaj folderami"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Używaj domyślnie dla odpowiedzi na powiadomienia o wiadomościach"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ DW/UDW"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ UDW"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Zarządzaj folderami"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Używaj domyślnie dla odpowiedzi na powiadomienia o wiadomościach"</string>
 </resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index d5d2b7c..c72f824 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -23,7 +23,7 @@
     <string name="cc" msgid="8768828862207919684">"DW"</string>
     <string name="bcc" msgid="519303553518479171">"UDW"</string>
     <string name="subject_hint" msgid="2136470287303571827">"Temat"</string>
-    <string name="body_hint" msgid="6478994981747057817">"Napisz e-maila"</string>
+    <string name="body_hint" msgid="6478994981747057817">"Napisz e-maila."</string>
     <string name="add_file_attachment" msgid="2604880054248593993">"Załącz plik"</string>
     <string name="add_photo_attachment" msgid="7163589794940909528">"Dołącz zdjęcie"</string>
     <string name="save_draft" msgid="2669523480789672118">"Zapisz wersję roboczą"</string>
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Ikona folderu"</string>
     <string name="add_account" msgid="5905863370226612377">"Dodaj konto"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Zamknij wskazówkę"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Autosynchronizacja jest wyłączona."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Kliknij, by włączyć."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Synchronizacja konta jest wyłączona."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Włącz w sekcji <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Ustawienia konta"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"Niewysłane wiadomości w folderze <xliff:g id="OUTBOX">%2$s</xliff:g>: <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Włączyć autosynchronizację?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Synchronizacja zmian wprowadzonych przez Ciebie nie tylko w Gmailu, ale we wszystkich aplikacjach i na wszystkich kontach, obejmie internet, Twoje pozostałe urządzenia i Twój <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>."</string>
diff --git a/res/values-pt-rPT-sw600dp/strings.xml b/res/values-pt-rPT-sw600dp/strings.xml
index 50fd323..b26141b 100644
--- a/res/values-pt-rPT-sw600dp/strings.xml
+++ b/res/values-pt-rPT-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Cc/Bcc"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Bcc"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Gerir pastas"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Utilizar como predefinição para respostas a notificações de mensagens"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ Cc/Bcc"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ Bcc"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Gerir pastas"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Utilizar como predefinição para respostas a notificações de mensagens"</string>
 </resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 548844c..274d7cf 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Ícone de pasta"</string>
     <string name="add_account" msgid="5905863370226612377">"Adicionar conta"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Ignorar sugestão"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"A sincronização automática está desativada."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Tocar para ativar."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"A sincronização de conta está desativada."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Ative em <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Definições da conta"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> não enviada(s) na <xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Ativar a sincronização automática?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"As alterações efetuadas a todas as aplicações e contas, e não apenas ao Gmail, serão sincronizadas entre a Web, os seus outros dispositivos e o <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>."</string>
diff --git a/res/values-pt-sw600dp/strings.xml b/res/values-pt-sw600dp/strings.xml
index 6aef326..e85899d 100644
--- a/res/values-pt-sw600dp/strings.xml
+++ b/res/values-pt-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Cc/Cco"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Cco"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Gerenciar pastas"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Usar como padrão para respostas a notificações de mensagens"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ Cc/Cco"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ Cco"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Gerenciar pastas"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Usar como padrão para notificações de mensagens"</string>
 </resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 5ef28f5..13b3df4 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -106,7 +106,7 @@
     <string name="install_attachment" msgid="8119470822958087928">"Instalar"</string>
     <string name="download_again" msgid="8195787340878328119">"Fazer novo download"</string>
     <string name="more_info_attachment" msgid="2899691682394864507">"Informações"</string>
-    <string name="no_application_found" msgid="7309485680354949680">"Nenhum app pode abrir este anexo para visualização."</string>
+    <string name="no_application_found" msgid="7309485680354949680">"Nenhum aplicativo pode abrir este anexo para visualização."</string>
     <string name="fetching_attachment" msgid="2286628490159574159">"Buscando anexo"</string>
     <string name="please_wait" msgid="3953824147776128899">"Aguarde…"</string>
     <string name="saved" msgid="161536102236967534">"Salvo, <xliff:g id="SIZE">%s</xliff:g>"</string>
@@ -272,7 +272,7 @@
     <string name="tap_to_configure_folder_sync" msgid="3280434399275638071">"Sincronizar pasta"</string>
     <string name="widget_large_unread_count" msgid="8699435859096455837">"%d+"</string>
     <string name="large_unseen_count" msgid="3055042669246912518">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="unseen_count" msgid="5509898665569695288">"<xliff:g id="COUNT">%d</xliff:g> nov"</string>
+    <string name="unseen_count" msgid="5509898665569695288">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
   <plurals name="actionbar_unread_messages">
     <item quantity="other" msgid="3863201473731766006">"<xliff:g id="COUNT">%1$d</xliff:g> não lidas"</item>
   </plurals>
@@ -295,7 +295,7 @@
     <string name="shortcut_name_title" msgid="1562534040126088628">"Atalho da pasta Nome"</string>
     <string name="wait_for_sync_title" msgid="4577632826912823075">"Aguardando sincronização"</string>
     <string name="not_synced_title" msgid="3600180500934086346">"Conta não sincronizada"</string>
-    <string name="wait_for_manual_sync_body" msgid="2823149409451003378">"Esta conta não está configurada para autossincronizar.\nToque em "<b>"Sincronizar agora"</b>" para sincronizar os e-mails uma vez ou em "<b>"Alterar configurações de sincronização"</b>" para configurar a autossincronização de e-mails desta conta."</string>
+    <string name="wait_for_manual_sync_body" msgid="2823149409451003378">"Esta conta não está configurada para sincronizar automaticamente.\nToque em "<b>"Sincronizar agora"</b>" para sincronizar os e-mails uma vez ou em "<b>"Alterar configurações de sincronização"</b>" para configurar a sincronização automática de e-mails desta conta."</string>
     <string name="manual_sync" msgid="2271479734895537848">"Sincr. agora"</string>
     <string name="change_sync_settings" msgid="3615852118397055361">"Alterar config. de sincr."</string>
     <string name="photo_load_failed" msgid="577471721679146999">"Impossível carregar a imagem"</string>
@@ -387,14 +387,9 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Ícone de pasta"</string>
     <string name="add_account" msgid="5905863370226612377">"Adicionar conta"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Dispensar dica"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"A sincronização automática está desativada."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Toque para ativar."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"A sincronização da conta está desativada."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Ative em <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Configurações da conta"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> não enviadas em <xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Ativar sincronização automática?"</string>
-    <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"As alterações em todos os apps e contas, e não apenas o Gmail, serão sincronizadas entre a Web, seus outros dispositivos e seu <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>."</string>
+    <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"As alterações em todos os aplicativos e contas, e não apenas o Gmail, serão sincronizadas entre a Web, seus outros dispositivos e seu <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>."</string>
     <string name="phone" msgid="4142617042507912053">"telefone"</string>
     <string name="tablet" msgid="4593581125469224791">"tablet"</string>
     <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="7239160845196929866">"Ativar"</string>
diff --git a/res/values-rm/strings.xml b/res/values-rm/strings.xml
index 870f6eb..698deef 100644
--- a/res/values-rm/strings.xml
+++ b/res/values-rm/strings.xml
@@ -592,16 +592,6 @@
     <skip />
     <!-- no translation found for dismiss_tip_hover_text (1930345936314578166) -->
     <skip />
-    <!-- no translation found for auto_sync_off (7185342309138211107) -->
-    <skip />
-    <!-- no translation found for tap_to_enable_sync (3334767826332383085) -->
-    <skip />
-    <!-- no translation found for account_sync_off (5699548271856775808) -->
-    <skip />
-    <!-- no translation found for enable_sync_in_account_settings (7707227409018294927) -->
-    <skip />
-    <!-- no translation found for account_settings_param (5277032997773498476) -->
-    <skip />
     <!-- no translation found for unsent_messages_in_outbox (8754987959475577698) -->
     <skip />
     <!-- no translation found for turn_auto_sync_on_dialog_title (8981949974921704813) -->
diff --git a/res/values-ro-sw600dp/strings.xml b/res/values-ro-sw600dp/strings.xml
index b81cc35..9ac2992 100644
--- a/res/values-ro-sw600dp/strings.xml
+++ b/res/values-ro-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Cc/Bcc"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Bcc"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Gestionaţi dosarele"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Utilizați ca prestabilit pentru răspunsurile la notificările de mesaje"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ Cc/Bcc"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ Bcc"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Gestionaţi dosarele"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Utilizați ca prestabilit pentru răspunsurile la notificările de mesaje"</string>
 </resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 84d2389..c3d8877 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Pictogramă dosar"</string>
     <string name="add_account" msgid="5905863370226612377">"Adăugați un cont"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Ignorați sugestia"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Sincronizarea automată este dezactivată."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Atingeți pentru a activa."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Sincronizarea contului este dezactivată."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Activați din <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>"</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Setările contului"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> netrimise în <xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Activați sincronizarea automată?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Modificările pe care le efectuați în toate aplicațiile și conturile, nu doar în Gmail, vor fi sincronizate între web, alte dispozitive ale dvs. și <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>."</string>
diff --git a/res/values-ru-sw600dp/strings.xml b/res/values-ru-sw600dp/strings.xml
index 0a48346..130f614 100644
--- a/res/values-ru-sw600dp/strings.xml
+++ b/res/values-ru-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"Копия"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"Скрытая копия"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Управление папками"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Использовать по умолчанию для всех оповещений"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"Копия"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"Скрытая копия"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Управление папками"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Использовать по умолчанию для всех уведомлений"</string>
 </resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 72ca54e..1966893 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -146,7 +146,7 @@
     <item quantity="other" msgid="1335781147509740039">"Черновики"</item>
   </plurals>
     <string name="sending" msgid="5600034886763930499">"Отправка…"</string>
-    <string name="message_retrying" msgid="5335188121407261331">"Повтор..."</string>
+    <string name="message_retrying" msgid="5335188121407261331">"Повторная попытка..."</string>
     <string name="message_failed" msgid="7887650587384601790">"Ошибка"</string>
     <string name="send_failed" msgid="2186285547449865010">"Не отправлено."</string>
     <string name="me_object_pronoun" msgid="4674452244417913816">"мне"</string>
@@ -197,8 +197,8 @@
     <item quantity="other" msgid="9218674052779504277">"Цепочек, помеченных как фишинг: &lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;."</item>
   </plurals>
   <plurals name="conversation_archived">
-    <item quantity="one" msgid="4127890884907503696">"Архивировано: &lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;."</item>
-    <item quantity="other" msgid="7789480176789922968">"Архивировано: &lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;."</item>
+    <item quantity="one" msgid="4859172326053399351">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; цепочка архивирована"</item>
+    <item quantity="other" msgid="8520761617935818623">"Цепочки архивированы: &lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;"</item>
   </plurals>
   <plurals name="conversation_deleted">
     <item quantity="one" msgid="5591889079235938982">"Удалено цепочек: &lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;."</item>
@@ -271,8 +271,8 @@
     <string name="non_synced_folder_description" msgid="3044618511909304701">"Для просмотра цепочек писем синхронизируйте эту папку."</string>
     <string name="tap_to_configure_folder_sync" msgid="3280434399275638071">"Синхронизировать папку"</string>
     <string name="widget_large_unread_count" msgid="8699435859096455837">"%d+"</string>
-    <string name="large_unseen_count" msgid="3055042669246912518">"&gt;<xliff:g id="COUNT">%d</xliff:g> нов."</string>
-    <string name="unseen_count" msgid="5509898665569695288">"<xliff:g id="COUNT">%d</xliff:g> нов."</string>
+    <string name="large_unseen_count" msgid="3055042669246912518">"Новых: &gt;<xliff:g id="COUNT">%d</xliff:g>"</string>
+    <string name="unseen_count" msgid="5509898665569695288">"Новых: <xliff:g id="COUNT">%d</xliff:g>"</string>
   <plurals name="actionbar_unread_messages">
     <item quantity="other" msgid="3863201473731766006">"Новых: <xliff:g id="COUNT">%1$d</xliff:g>"</item>
   </plurals>
@@ -296,7 +296,7 @@
     <string name="wait_for_sync_title" msgid="4577632826912823075">"Синхронизация…"</string>
     <string name="not_synced_title" msgid="3600180500934086346">"Аккаунт не синхронизирован"</string>
     <string name="wait_for_manual_sync_body" msgid="2823149409451003378">"В этом аккаунте не настроена автоматическая синхронизация.\nВыберите "<b>"Настройки синхронизации"</b>", чтобы включить ее, или "<b>"Синхронизировать сейчас"</b>", чтобы синхронизировать почту один раз."</string>
-    <string name="manual_sync" msgid="2271479734895537848">"Синхронизировать"</string>
+    <string name="manual_sync" msgid="2271479734895537848">"Синхр."</string>
     <string name="change_sync_settings" msgid="3615852118397055361">"Настройки синхронизации"</string>
     <string name="photo_load_failed" msgid="577471721679146999">"Не удалось загрузить фото"</string>
     <string name="cant_move_or_change_labels" msgid="4155490583610926755">"Не удалось переместить сообщения, так как они находятся в разных аккаунтах."</string>
@@ -317,9 +317,9 @@
     <string name="message_details_title" msgid="60771875776494764">"Сведения о сообщении"</string>
     <string name="preference_advance_to_title" msgid="6385669491239514630">"Автопереход"</string>
   <string-array name="prefEntries_autoAdvance">
-    <item msgid="1505450878799459652">"Следующему письму"</item>
-    <item msgid="8000986144872247139">"Предыдущему письму"</item>
-    <item msgid="8015001161633421314">"Списку писем"</item>
+    <item msgid="1505450878799459652">"Следующее письмо"</item>
+    <item msgid="8000986144872247139">"Предыдущее письмо"</item>
+    <item msgid="8015001161633421314">"Список писем"</item>
   </string-array>
   <string-array name="prefSummaries_autoAdvance">
     <item msgid="8221665977497655719">"Показывать более позднюю цепочку после удаления текущей"</item>
@@ -364,7 +364,7 @@
     <item msgid="1510017057984222376">"Только удалять"</item>
     <item msgid="3196207224108008441">"Архивировать или удалять"</item>
   </string-array>
-    <string name="prefDialogTitle_removal_action" msgid="266548424110393246">"Я предпочитаю:"</string>
+    <string name="prefDialogTitle_removal_action" msgid="7914272565548361304">"Действие по умолчанию"</string>
     <string name="preferences_default_reply_all_title" msgid="7255858488369635327">"Функция \"Ответить всем\""</string>
     <string name="preferences_default_reply_all_summary_impl" msgid="895581085692979709">"Использовать по умолчанию для всех ответов"</string>
     <string name="preference_swipe_title_archive" msgid="9122333537761282714">"Быстрая архивация"</string>
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Значок папки"</string>
     <string name="add_account" msgid="5905863370226612377">"Добавить аккаунт"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Закрыть подсказку"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Автосинхронизация отключена"</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Нажмите, чтобы включить."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Синхронизация для этого аккаунта отключена."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Чтобы включить ее, перейдите в <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"настройки аккаунта"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"Неотправленных сообщений в папке \"<xliff:g id="OUTBOX">%2$s</xliff:g>\": <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Включить автосинхронизацию?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Изменения, которые вы вносите во все приложения и аккаунты (не только Gmail), будут синхронизироваться между Интернетом, другими вашими устройствами и вашим <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>."</string>
@@ -422,17 +417,17 @@
     <string name="send_to_domain_text" msgid="5064559546745918393">"Отправлять только адресатам из домена <xliff:g id="DOMAIN">%1$s</xliff:g>"</string>
     <string name="pick_start_date_title" msgid="2274665037355224165">"Начало"</string>
     <string name="pick_end_date_title" msgid="733396083649496600">"Окончание (необязательно)"</string>
-    <string name="date_not_set" msgid="3251555782945051904">"Не задано"</string>
+    <string name="date_not_set" msgid="3251555782945051904">"Не установлена"</string>
     <string name="set_end_date_dialog_title" msgid="7543009262788808443">"Окончание (необязательно)"</string>
     <string name="custom_date" msgid="5794846334232367838">"Произвольная дата"</string>
     <string name="date_none" msgid="1061426502665431412">"Нет"</string>
     <string name="discard_changes" msgid="5699760550972324746">"Отменить изменения?"</string>
     <string name="vacation_responder_changes_saved" msgid="91448817268121249">"Изменения настроек автоответчика сохранены"</string>
     <string name="vacation_responder_changes_discarded" msgid="21756037735539983">"Изменения настроек автоответчика отменены"</string>
-    <string name="vacation_responder_off" msgid="4429909341193366667">"Выключен"</string>
+    <string name="vacation_responder_off" msgid="4429909341193366667">"Отключить"</string>
     <string name="vacation_responder_on" msgid="4913238379320882449">"Включить с <xliff:g id="DATE">%1$s</xliff:g>"</string>
-    <string name="vacation_responder_on_with_end_date" msgid="4360941815371475955">"Включен с <xliff:g id="START_DATE">%1$s</xliff:g> по <xliff:g id="END_DATE">%2$s</xliff:g>"</string>
-    <string name="vacation_responder_empty_subject_and_body_warning" msgid="6233629618520852439">"Введите тему и текст сообщения."</string>
+    <string name="vacation_responder_on_with_end_date" msgid="4360941815371475955">"Включить с <xliff:g id="START_DATE">%1$s</xliff:g> по <xliff:g id="END_DATE">%2$s</xliff:g>"</string>
+    <string name="vacation_responder_empty_subject_and_body_warning" msgid="6233629618520852439">"Введите тему и текст сообщения"</string>
     <string name="view_entire_message" msgid="823281796655014454">"Показать полностью"</string>
     <string name="eml_loader_error_toast" msgid="6577383216635400167">"Не удалось открыть файл"</string>
     <string name="help_and_info" msgid="3708286489943154681">"Справка"</string>
diff --git a/res/values-si-rLK-sw600dp/strings.xml b/res/values-si-rLK-sw600dp/strings.xml
deleted file mode 100644
index 84b03d6..0000000
--- a/res/values-si-rLK-sw600dp/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-     Copyright (C) 2012 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ කා.පි/ර.කා.පි."</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ ර.කා.පි."</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"ෆෝල්ඩර කළමනාකරණය කරන්න"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"පණිවිඩ දැනුම්දීම් වලට ප්‍රතිචාර සඳහා සුපුරුදු ලෙස භාවිතා කරන්න"</string>
-</resources>
diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml
deleted file mode 100644
index 04ef9bf..0000000
--- a/res/values-si-rLK/strings.xml
+++ /dev/null
@@ -1,483 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-     Copyright (C) 2011 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="from" msgid="5159056500059912358">"වෙතින්"</string>
-    <string name="to" msgid="3971614275716830581">"වෙත"</string>
-    <string name="cc" msgid="8768828862207919684">"කා.පි"</string>
-    <string name="bcc" msgid="519303553518479171">"ර.කා.පි."</string>
-    <string name="subject_hint" msgid="2136470287303571827">"කාරණය"</string>
-    <string name="body_hint" msgid="6478994981747057817">"ඊ-තැපෑලක් සකසන්න"</string>
-    <string name="add_file_attachment" msgid="2604880054248593993">"ගොනුව අමුණන්න"</string>
-    <string name="add_photo_attachment" msgid="7163589794940909528">"පින්තුරයක් අමුණන්න"</string>
-    <string name="save_draft" msgid="2669523480789672118">"ක‍ටු සටහන සුරකින්න"</string>
-    <string name="discard" msgid="4905982179911608430">"ඉවත ලන්න"</string>
-    <string name="compose" msgid="2602861958391035523">"සකසනය"</string>
-  <string-array name="compose_modes">
-    <item msgid="9000553538766397816">"පිළිතුරු දෙන්න"</item>
-    <item msgid="2767793214788399009">"සියල්ලන්ටම පිළිතුරු යවන්න"</item>
-    <item msgid="2758162027982270607">"ඉදිරියට"</item>
-  </string-array>
-    <string name="reply_attribution" msgid="1114972798797833259">"<xliff:g id="DATE">%s</xliff:g> දින, <xliff:g id="PERSON">%s</xliff:g> ලියන ලදි:"</string>
-    <string name="forward_attribution" msgid="597850048345475752">"---------- ඉදිරියට යවන ලද පණිවිඩය ----------&lt;br&gt;වෙතින්: <xliff:g id="FROM">%1$s</xliff:g>&lt;br&gt;දිනය: <xliff:g id="DATE">%2$s</xliff:g>&lt;br&gt;කාරණය: <xliff:g id="SUBJECT">%3$s</xliff:g>&lt;br&gt;වෙත: <xliff:g id="TO">%4$s</xliff:g>&lt;br&gt;"</string>
-    <string name="forward_attribution_no_headers" msgid="1828826576779486239">"---------- ඉදිරියට යැවූ පණිවිඩය ----------"</string>
-    <string name="cc_attribution" msgid="2928584226469388899">"කා.පි: <xliff:g id="CC">%1$s</xliff:g>&lt;br&gt;"</string>
-    <string name="select_attachment_type" msgid="353236686616663062">"ඇමුණුම් වර්ගය තෝරන්න"</string>
-    <string name="too_large_to_attach_single" msgid="2669897137966512530">"<xliff:g id="MAXSIZE">%1$s</xliff:g> වඩා වැඩි ගොනු ඇමිණිය නොහැක."</string>
-    <string name="too_large_to_attach_multiple" msgid="1620163295709036343">"ගොනුවක් හෝ කිහිපයක් අමුණ නැත. සිමාව <xliff:g id="MAXSIZE">%1$s</xliff:g>"</string>
-    <string name="too_large_to_attach_additional" msgid="4964155563465970480">"ගොනුව ඇමිණී නැත. <xliff:g id="MAXSIZE">%1$s</xliff:g> සීමාවට ළඟා විණි."</string>
-    <string name="generic_attachment_problem" msgid="4683974765387240723">"ගොනුව ඇමිණිමට නොහැකි විය."</string>
-    <string name="recipient_needed" msgid="319816879398937214">"අඩු තරමේ එක් ලබන්නෙක් එක් කරන්න."</string>
-    <string name="recipient_error_dialog_title" msgid="760741480291963706">"ලබන්නාගේ දෝෂයකි"</string>
-    <string name="confirm_send_title" msgid="4664971589247101530">"පණිවිඩය යවන්නද?"</string>
-    <string name="confirm_send_message_with_no_subject" msgid="1442628074022609987">"පණිවිඩ කාරණාවේ පෙළ නොමැත."</string>
-    <string name="confirm_send_message_with_no_body" msgid="3329355318700201516">"පණිවිඩ බොඩියේ පෙළ නොමැත."</string>
-    <string name="confirm_send_message" msgid="6211518590166222735">"මෙම පණිවිඩය යවන්නද?"</string>
-    <string name="message_discarded" msgid="6792661321962262024">"පණිවිඩය ඉවතලන ලදි."</string>
-    <string name="signature" msgid="3172144541947408374">\n\n"<xliff:g id="SIGNATURE">%s</xliff:g>"</string>
-    <string name="custom_from_account_label" msgid="5042317430007736322">"තැපැල් යවන්නේ:"</string>
-    <string name="send" msgid="4269810089682120826">"යවන්න"</string>
-    <string name="mark_read" msgid="579388143288052493">"කියවූ ලෙස සලකුණු කරන්න"</string>
-    <string name="mark_unread" msgid="6245060538061533191">"නොකියවූ සලකුණු කරන්න"</string>
-    <string name="mute" msgid="9164839998562321569">"නිශ්ශබ්ද කරන්න"</string>
-    <string name="add_star" msgid="3275117671153616270">"තරුවක් එක් කරන්න"</string>
-    <string name="remove_star" msgid="9126690774161840733">"තරුව ඉවත් කරන්න"</string>
-    <string name="remove_folder" msgid="2379905457788576297">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> ගෙන් ඉවත් කරන්න"</string>
-    <string name="archive" msgid="5978663590021719939">"සංරක්ෂිත කරන්න"</string>
-    <string name="report_spam" msgid="4106897677959987340">"අයාචිත තැපැල් ලෙස වාර්තා කරන්න"</string>
-    <string name="mark_not_spam" msgid="8617774236231366651">"අයාචිත තැපෑල ලෙස වාර්තා නොකරන්න"</string>
-    <string name="report_phishing" msgid="8454666464488413739">"තතුබෑම වාර්තා කරන්න"</string>
-    <string name="delete" msgid="6784262386780496958">"මකන්න"</string>
-    <string name="discard_drafts" msgid="5881484193628472105">"කටු සටහන් ඉවත ලන්න"</string>
-    <string name="discard_failed" msgid="7520780769812210279">"ඉවත ලෑම අසාර්ථක විය"</string>
-    <string name="refresh" msgid="1533748989749277511">"නැවුම් කරන්න"</string>
-    <string name="reply" msgid="8337757482824207118">"පිළිතුරු දෙන්න"</string>
-    <string name="reply_all" msgid="5366796103758360957">"සියල්ලන්ටම ප්‍රතිඋත්තර යවන්න"</string>
-    <string name="resume_draft" msgid="1272723181782570649">"සංස්කරණය කරන්න"</string>
-    <string name="forward" msgid="4397585145490426320">"ඉදිරියට"</string>
-    <string name="menu_compose" msgid="4575025207594709432">"සකසනය"</string>
-    <string name="menu_change_folders" msgid="2194946192901276625">"ෆෝල්ඩර වෙනස් කරන්න"</string>
-    <string name="menu_move_to" msgid="7948877550284452830">"ගෙන යන්නේ"</string>
-    <string name="menu_move_to_inbox" msgid="258554178236001444">"එන ලිපි වෙත ගෙනයන්න"</string>
-    <string name="menu_manage_folders" msgid="8486398523679534519">"ෆෝල්ඩර සැකසීම්"</string>
-    <string name="menu_show_original" msgid="2330398228979616661">"ස්වයංක්‍රීය-ප්‍රමාණ කිරීම ප්‍රතිවර්තනය කරන්න"</string>
-    <string name="menu_settings" msgid="7993485401501778040">"සැකසීම්"</string>
-    <string name="menu_search" msgid="1949652467806052768">"සෙවීම"</string>
-    <string name="drawer_title" msgid="3766219846644975778">"සංචලනය"</string>
-    <string name="mark_important" msgid="8781680450177768820">"වැදගත්යැයි ලකුණු කරන්න"</string>
-    <string name="mark_not_important" msgid="3342258155408116917">"නොවැදගත් ලෙස සලකුණු කරන්න"</string>
-    <string name="add_cc_label" msgid="2249679001141195213">"කා.පි/ර.කා.පි. එකතු කරන්න"</string>
-    <string name="add_bcc_label" msgid="963745641238037813">"ර.කා.පි. එක් කරන්න"</string>
-    <string name="quoted_text" msgid="977782904293216533">"ගෙන හැර දක්වූ පාඨ ඇතුලත් කරන්න"</string>
-    <string name="quoted_text_label" msgid="2296807722849923934">"පෙළ ගෙන හැර දක්වන්න"</string>
-    <string name="respond_inline" msgid="6609746292081928078">"පේළිගතව පිළිතුරු සපයන්න"</string>
-    <string name="bytes" msgid="651011686747499628">"<xliff:g id="COUNT">%s</xliff:g> B"</string>
-    <string name="kilobytes" msgid="1523463964465770347">"<xliff:g id="COUNT">%s</xliff:g> KB"</string>
-    <string name="megabytes" msgid="4309397368708773323">"<xliff:g id="COUNT">%s</xliff:g> MB"</string>
-    <string name="attachment_image" msgid="6375306026208274564">"රූපය"</string>
-    <string name="attachment_video" msgid="7119476472603939848">"වීඩියෝව"</string>
-    <string name="attachment_audio" msgid="7097658089301809284">"ශ්‍රව්‍ය"</string>
-    <string name="attachment_text" msgid="3485853714965922173">"පෙළ"</string>
-    <string name="attachment_application_msword" msgid="2110108876623152162">"ලේඛනය"</string>
-    <string name="attachment_application_vnd_ms_powerpoint" msgid="425353008963359230">"ඉදිරිපත් කිරීම"</string>
-    <string name="attachment_application_vnd_ms_excel" msgid="5585781311136609103">"පැතිරුම්පත්"</string>
-    <string name="attachment_application_pdf" msgid="4207340200944655970">"PDF"</string>
-    <string name="attachment_unknown" msgid="3360536730101083926">"<xliff:g id="ATTACHMENTEXTENSION">%s</xliff:g> ගොනුව"</string>
-    <string name="preview_attachment" msgid="6265457626086113833">"පූර්ව දර්ශනය"</string>
-    <string name="save_attachment" msgid="375685179032130033">"සුරකින්න"</string>
-    <string name="cancel_attachment" msgid="6900093625792891122">"අවලංගු කරන්න"</string>
-    <string name="open_attachment" msgid="6100396056314739761">"විවෘත කරන්න"</string>
-    <string name="install_attachment" msgid="8119470822958087928">"ස්ථාපනය"</string>
-    <string name="download_again" msgid="8195787340878328119">"නැවත බාගැනීම කරන්න"</string>
-    <string name="more_info_attachment" msgid="2899691682394864507">"තොරතුරු"</string>
-    <string name="no_application_found" msgid="7309485680354949680">"නැරඹීම සඳහා මෙම ඇමුණුම කිසිදු යෙදුමකට විවෘත කළ නොහැක."</string>
-    <string name="fetching_attachment" msgid="2286628490159574159">"ඇමුණුම ලබාගනිමින්"</string>
-    <string name="please_wait" msgid="3953824147776128899">"කරුණාකර රැඳී සිටින්න..."</string>
-    <string name="saved" msgid="161536102236967534">"<xliff:g id="SIZE">%s</xliff:g>, සුරකින ලදි"</string>
-    <string name="download_failed" msgid="3878373998269062395">"බාගැනීම කිරීමට නොහැක. නැවත උත්සහ කිරීමට ස්පර්ශ කරන්න."</string>
-    <string name="menu_photo_save_all" msgid="2742869476474613396">"සියල්ල සුරකින්න"</string>
-    <string name="menu_photo_share" msgid="6410980274832639330">"බෙදාගන්න"</string>
-    <string name="menu_photo_share_all" msgid="3049053252719665320">"සියල්ලම බෙදාගන්න"</string>
-    <string name="menu_photo_print" msgid="3084679038179342333">"මුද්‍රණය කරන්න"</string>
-    <string name="saving" msgid="6274238733828387433">"සුරැකේ...."</string>
-    <string name="choosertitle_sharevia" msgid="3539537264873337959">"බෙදාගන්නේ"</string>
-    <string name="contextmenu_openlink" msgid="6952228183947135362">"බ්‍රව්සරයේ විවෘත කරන්න"</string>
-    <string name="contextmenu_copy" msgid="2584243784216385180">"පිටපත් කරන්න"</string>
-    <string name="contextmenu_copylink" msgid="8659897702269320063">"URL සබැඳුම පිටපත් කරන්න"</string>
-    <string name="contextmenu_view_image" msgid="1031172763893491000">"පින්තූරය බලන්න"</string>
-    <string name="contextmenu_dial_dot" msgid="8881095692316726628">"අමතන්න..."</string>
-    <string name="contextmenu_sms_dot" msgid="5319737001771622657">"SMS..."</string>
-    <string name="contextmenu_add_contact" msgid="2310064151427072475">"සම්බන්ධතාවය එක් කරන්න"</string>
-    <string name="contextmenu_send_mail" msgid="3834654593200105396">"ඊ-තැපෑල යවන්න"</string>
-    <string name="contextmenu_map" msgid="5118951927399465521">"සිතියම"</string>
-    <string name="contextmenu_sharelink" msgid="8670940060477758709">"සබැඳුම බෙදාගන්න"</string>
-    <string name="contextmenu_help" msgid="4209674157707873384">"සහාය"</string>
-    <string name="contextmenu_feedback" msgid="8319100902136337085">"ප්‍රතිපෝෂණ යවන්න"</string>
-    <!-- no translation found for num_selected (7990204488812654380) -->
-    <skip />
-  <plurals name="move_conversation">
-    <item quantity="one" msgid="237882018518207244">"සංවාදය ගෙන යන්න"</item>
-    <item quantity="other" msgid="6639576653114141743">"සංවාද <xliff:g id="ID_1">%1$d</xliff:g> ගෙන යන්න"</item>
-  </plurals>
-    <string name="content_description" msgid="854320355052962069">"<xliff:g id="SUBJECT">%3$s</xliff:g> <xliff:g id="SNIPPET">%4$s</xliff:g> පිළිබඳව, <xliff:g id="DATE">%5$s</xliff:g> <xliff:g id="READSTATE">%6$s</xliff:g> දින, <xliff:g id="TOHEADER">%1$s</xliff:g> <xliff:g id="PARTICIPANT">%2$s</xliff:g>"</string>
-    <string name="content_description_today" msgid="1634422834354116955">"<xliff:g id="SUBJECT">%3$s</xliff:g> <xliff:g id="SNIPPET">%4$s</xliff:g> පිළිබඳව, <xliff:g id="TIME">%5$s</xliff:g> <xliff:g id="READSTATE">%6$s</xliff:g> ට, <xliff:g id="TOHEADER">%1$s</xliff:g> <xliff:g id="PARTICIPANT">%2$s</xliff:g>"</string>
-    <string name="read_string" msgid="5495929677508576520">"සංවාදය කියවයි"</string>
-    <string name="unread_string" msgid="7342558841698083381">"සංවාදය නොකියවා ඇත"</string>
-    <string name="filtered_tag" msgid="721666921386074505">"[<xliff:g id="TAG">%1$s</xliff:g>]<xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="badge_and_subject" msgid="3979372269373936750">"<xliff:g id="ID_1">%1$s</xliff:g> <xliff:g id="ID_2">%2$s</xliff:g>"</string>
-  <plurals name="draft">
-    <item quantity="one" msgid="6717535677167943402">"කටු සටහන"</item>
-    <item quantity="other" msgid="1335781147509740039">"කටු සටහන්"</item>
-  </plurals>
-    <string name="sending" msgid="5600034886763930499">"යවමින්..."</string>
-    <string name="message_retrying" msgid="5335188121407261331">"යළි උත්සාහ කරමින්"</string>
-    <string name="message_failed" msgid="7887650587384601790">"අසාර්ථක වුණි"</string>
-    <string name="send_failed" msgid="2186285547449865010">"පණිවිඩය නොයවන ලදි."</string>
-    <string name="me_object_pronoun" msgid="4674452244417913816">"මම"</string>
-    <string name="me_subject_pronoun" msgid="7479328865714008288">"මම"</string>
-  <plurals name="confirm_delete_conversation">
-    <item quantity="one" msgid="7605755011865575440">"මෙම සංවාදය මකන්න?"</item>
-    <item quantity="other" msgid="1585660381208712562">"මෙම සංවාද <xliff:g id="COUNT">%1$d</xliff:g> මකන්නද?"</item>
-  </plurals>
-  <plurals name="confirm_archive_conversation">
-    <item quantity="one" msgid="9105551557653306945">"මෙම සංවාදය සංරක්ෂණය කරන්නද?"</item>
-    <item quantity="other" msgid="2001972798185641108">"මෙම සංවාද <xliff:g id="COUNT">%1$d</xliff:g> සංරක්ෂණය කරන්නද?"</item>
-  </plurals>
-  <plurals name="confirm_discard_drafts_conversation">
-    <item quantity="one" msgid="2030421499893210789">"මෙම පණිවිඩය ඉවතලන්නද?"</item>
-    <item quantity="other" msgid="782234447471532005">"මෙම පණිවිඩ <xliff:g id="COUNT">%1$d</xliff:g> ඉවතලන්නද?"</item>
-  </plurals>
-    <string name="confirm_discard_text" msgid="5172680524418848519">"මෙම පණිවිඩය ඉවතලන්නද?"</string>
-    <string name="loading_conversations" msgid="7255732786298655246">"පූරණය වෙමින්..."</string>
-    <string name="empty_inbox" msgid="5901734942362315228">"ඔබ සියල්ල සම්පූර්ණ කර ඇත! කරුණාකර ඔබගේ දවස ප්‍රීතියෙන් ගත කරන්න."</string>
-    <string name="empty_search" msgid="8564899353449880818">"අපොයි! අපට \"<xliff:g id="SEARCH_QUERY">%1$s</xliff:g>\" සඳහා කිසිවක් සොයාගත නොහැකි විය."</string>
-    <string name="empty_spam_folder" msgid="3288985543286122800">"නියමයි, මෙතන අයාචිත තැපැල් නැහැ!"</string>
-    <string name="empty_trash_folder" msgid="378119063015945020">"මෙහි ඉවත ලන දේ නොමැත. ප්‍රතිචක්‍රකරණය කිරීම පිළිබඳ ස්තූතියි!"</string>
-    <string name="empty_folder" msgid="3227552635613553855">"මෙහි තැපැල් නොමැත."</string>
-    <string name="getting_messages" msgid="8403333791332403244">"ඔබගේ පණිවිඩ ලබාගනිමින්"</string>
-    <string name="undo" msgid="8256285267701059609">"අස් කරන්න"</string>
-  <plurals name="conversation_unstarred">
-    <item quantity="one" msgid="839233699150563831">"<xliff:g id="COUNT">%1$d</xliff:g> සංවාදක් තරු සලකුණු නොකරයි."</item>
-    <item quantity="other" msgid="7677305734833709789">"සංවාද <xliff:g id="COUNT">%1$d</xliff:g> ක් තරු නොකරයි."</item>
-  </plurals>
-  <plurals name="conversation_muted">
-    <item quantity="one" msgid="3339638225564408438">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ක් නිශ්ශබ්ද .කරන ලදී"</item>
-    <item quantity="other" msgid="4276111931404654219">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ක් නිශ්ශබ්ද කරන ලදී."</item>
-  </plurals>
-  <plurals name="conversation_spammed">
-    <item quantity="one" msgid="6986172030710967687">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ක් අයාවිත තැපැල් ලෙස වාර්තා කරන ලදි."</item>
-    <item quantity="other" msgid="5900913789259199137">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ක් අයාවිත තැපෑලක් ලෙස වාර්තා කරන ලදි."</item>
-  </plurals>
-  <plurals name="conversation_not_spam">
-    <item quantity="one" msgid="2294904093653094150">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ක් අයාවිත තැපෑලක් ලෙස වාර්තා නොකරන ලදි."</item>
-    <item quantity="other" msgid="4966164423991098144">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ක් අයාවිත තැපෑලක් ලෙස වාර්තා කරන ලදි."</item>
-  </plurals>
-  <plurals name="conversation_not_important">
-    <item quantity="one" msgid="3824809189993339030">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ක් වැදගත් නොවන ලෙස සලකුණු කරන ලදි."</item>
-    <item quantity="other" msgid="1215472798075869124">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ක් වැදගත් නොවන ලෙස සලකුණු කරන ලදි."</item>
-  </plurals>
-  <plurals name="conversation_phished">
-    <item quantity="one" msgid="4330095881258771201">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ක් තතුබෑමක් ලෙස වාර්තා කරන ලදි."</item>
-    <item quantity="other" msgid="9218674052779504277">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ක් තතුබෑමක් ලෙස වාර්තා කරන ලදි."</item>
-  </plurals>
-  <plurals name="conversation_archived">
-    <item quantity="one" msgid="4127890884907503696">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ක් සංරක්ෂණය කරන ලදි."</item>
-    <item quantity="other" msgid="7789480176789922968">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ක් සංරක්ෂණය කරන ලදි."</item>
-  </plurals>
-  <plurals name="conversation_deleted">
-    <item quantity="one" msgid="5591889079235938982">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ක් මකන ලදි."</item>
-    <item quantity="other" msgid="7060256058737892078">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ක් මකාදමන ලදි."</item>
-  </plurals>
-    <string name="deleted" msgid="7378013910782008375">"මකාදමන ලදී"</string>
-    <string name="archived" msgid="6283673603512713022">"සංරක්ෂිත"</string>
-    <string name="folder_removed" msgid="5656281444688183676">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> වෙතින් ඉවත් කරන ලදි"</string>
-  <plurals name="conversation_folder_changed">
-    <item quantity="one" msgid="6463727361987396734">"වෙනස් කරන ලද ෆෝල්ඩරය."</item>
-    <item quantity="other" msgid="8815390494333090939">"වෙනස් කරන ලද ෆෝල්ඩර."</item>
-  </plurals>
-    <string name="conversation_folder_moved" msgid="6475872337373081683">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> වෙත ගෙනයන ලදි"</string>
-    <string name="search_results_header" msgid="1529438451150580188">"ප්‍රතිඵල"</string>
-    <string name="search_unsupported" msgid="2873920566477359177">"මෙම ගිණුම සෙවුමට සහය නොදෙයි."</string>
-    <string name="add_label" msgid="3285338046038610902">"ෆෝල්ඩරය එකතු කරන්න"</string>
-    <string name="new_incoming_messages_one" msgid="5933087567495998661">"<xliff:g id="SENDER">%s</xliff:g> වෙතින් නව පණිවිඩ පෙන්වන්න."</string>
-  <plurals name="new_incoming_messages_many">
-    <item quantity="other" msgid="4394042684501388790">"නව පණිවිඩ <xliff:g id="COUNT">%1$d</xliff:g> ක් පෙන්වන්න."</item>
-  </plurals>
-    <string name="date_and_view_details" msgid="2952994746916149969">"<xliff:g id="DATE">%1$s</xliff:g> &lt;a href=\'http://www.example.com\'&gt;විස්තර පෙන්වන්න&lt;/a&gt;"</string>
-    <string name="hide_details" msgid="8018801050702453314">"විස්තර සඟවන්න"</string>
-    <string name="to_message_header" msgid="3954385178027011919">"<xliff:g id="RECIPIENTS">%1$s</xliff:g> වෙත"</string>
-    <string name="contact_info_string" msgid="6484930184867405276">"<xliff:g id="NAME">%1$s</xliff:g> සඳහා සම්බන්ධතා තොරතුරු පෙන්වන්න"</string>
-    <string name="contact_info_string_default" msgid="6204228921864816351">"සම්බන්ධතා තොරතුරු පෙන්වන්න"</string>
-  <plurals name="show_messages_read">
-    <item quantity="other" msgid="5285673397387128129">"පැරණි පණිවිඩ <xliff:g id="COUNT">%1$d</xliff:g> ක්"</item>
-  </plurals>
-    <string name="from_heading" msgid="48290556829713090">"වෙතින්:"</string>
-    <string name="replyto_heading" msgid="8275255318292059079">"පිළිතුරු යවන්නේ"</string>
-    <string name="to_heading" msgid="3495203282540398336">"වෙත: "</string>
-    <string name="to_heading_no_space" msgid="679167047628308670">"වෙත:"</string>
-    <string name="cc_heading" msgid="5603892257866345823">"කා.පි.:"</string>
-    <string name="bcc_heading" msgid="1482186590756218269">"ර.කා.පි.:"</string>
-    <string name="date_heading" msgid="4213063948406397168">"දිනය:"</string>
-    <string name="show_images" msgid="436044894053204084">"පින්තූර පෙන්වන්න"</string>
-    <string name="always_show_images" msgid="556087529413707819">"මෙම යවන්නාගෙන් සෑම විටම පින්තූර පෙන්වන්න"</string>
-    <string name="always_show_images_toast" msgid="3763157294047555051">"මෙම යවන්නාගෙන් පින්තූර ස්වයංක්‍රියව පෙන්වනු ඇත."</string>
-    <string name="address_display_format" msgid="2098008376913966177">"<xliff:g id="NAME">%1$s</xliff:g> <xliff:g id="EMAIL">%2$s</xliff:g>"</string>
-    <string name="address_display_format_with_via_domain" msgid="8108294635074750048">"<xliff:g id="VIA_DOMAIN">%3$s</xliff:g> මගින් <xliff:g id="NAME">%1$s</xliff:g> &lt;<xliff:g id="EMAIL">%2$s</xliff:g>&gt;"</string>
-    <string name="message_saved" msgid="3291655042310241793">"පණිවිඩය කටු සටහනක් ලෙස සුරැකිණි."</string>
-    <string name="sending_message" msgid="2487846954946637084">"පණිවිඩය යවමින්..."</string>
-    <string name="invalid_recipient" msgid="9157434699389936584">"<xliff:g id="WRONGEMAIL">%s</xliff:g> ලිපිනය අවලංගුය"</string>
-    <string name="show_elided" msgid="3456154624105704327">"උදෘත පෙළ පෙන්වන්න"</string>
-    <string name="hide_elided" msgid="5768235486834692733">"▼ උපුටා ගත් පෙළ සඟවන්න"</string>
-    <string name="message_invite_title" msgid="5985161025144867256">"දින දර්ශනයේ ආරාධනාව"</string>
-    <string name="message_invite_calendar_view" msgid="9181966650840809197">"දින දර්ශනය තුළ පෙන්වන්න"</string>
-    <string name="message_invite_label_attending" msgid="4194264767870003397">"යනවාද?"</string>
-    <string name="message_invite_accept" msgid="8002758842580134835">"ඔව්"</string>
-    <string name="message_invite_tentative" msgid="3199418731566655887">"සමහර විට"</string>
-    <string name="message_invite_decline" msgid="6331040872447290777">"නැත"</string>
-    <string name="enumeration_comma" msgid="2848850136844740850">", "</string>
-    <string name="send_anyway" msgid="2727576121007079643">"කෙසේ වුවත් යවන්න"</string>
-    <string name="ok" msgid="6178802457914802336">"හරි"</string>
-    <string name="done" msgid="344354738335270292">"හරි"</string>
-    <string name="cancel" msgid="4831678293149626190">"අවලංගු කරන්න"</string>
-    <string name="clear" msgid="765949970989448022">"හිස් කරන්න"</string>
-    <string name="next" msgid="2662478712866255138">"මීළඟ"</string>
-    <string name="previous" msgid="8985379053279804274">"පෙර"</string>
-  <string-array name="sync_status">
-    <item msgid="4600303222943450797">"සාර්ථකයි"</item>
-    <item msgid="2972425114100316260">"සම්බන්ධතාවය නැත."</item>
-    <item msgid="8594593386776437871">"පුරනය වීමට නොහැකි විය."</item>
-    <item msgid="1375193906551623606">"ආරක්‍ෂිත දෝෂයකි."</item>
-    <item msgid="195177374927979967">"සමමුහුර්තකරන කළ නොහැක."</item>
-    <item msgid="8026148967150231130">"අභ්‍යන්තර දෝෂය"</item>
-    <item msgid="5442620760791553027">"සේවාදායකයේ දෝෂයකි"</item>
-  </string-array>
-    <string name="tap_to_configure" msgid="137172348280050643">"සකස් කිරීමට ස්පර්ශ කරන්න"</string>
-    <string name="non_synced_folder_description" msgid="3044618511909304701">"අලුත් සංවාදයන් බැලීමට, මෙම ෆෝල්ඩරය සමමුහුර්ත කරන්න."</string>
-    <string name="tap_to_configure_folder_sync" msgid="3280434399275638071">"සමමුහුර්ත කිරීමේ ෆෝල්ඩරය"</string>
-    <string name="widget_large_unread_count" msgid="8699435859096455837">"%d+"</string>
-    <string name="large_unseen_count" msgid="3055042669246912518">"අලුත් <xliff:g id="COUNT">%d</xliff:g>+"</string>
-    <string name="unseen_count" msgid="5509898665569695288">"අලුත් <xliff:g id="COUNT">%d</xliff:g>"</string>
-  <plurals name="actionbar_unread_messages">
-    <item quantity="other" msgid="3863201473731766006">"නොකියවූ <xliff:g id="COUNT">%1$d</xliff:g>"</item>
-  </plurals>
-    <string name="actionbar_large_unread_count" msgid="753635978542372792">"නොකියවූ <xliff:g id="COUNT">%1$d</xliff:g>+"</string>
-    <string name="view_more_conversations" msgid="8377920000247101901">"තවත් සංවාද පෙන්වන්න"</string>
-    <string name="loading_conversation" msgid="7931600025861500397">"පූරණය වෙමින්..."</string>
-    <string name="activity_mailbox_selection" msgid="7489813868539767701">"ගිණුම තෝරන්න"</string>
-    <string name="activity_folder_selection" msgid="8375243281001234750">"ෆෝල්ඩරය තෝරන්න"</string>
-    <string name="folder_shortcut_widget_label" msgid="6466292659577092915">"ඊ-තැපැල් ෆෝල්ඩරය"</string>
-    <string name="change_folders_selection_dialog_title" msgid="9174464298613273814">"ෆෝල්ඩර වෙනස් කරන්න"</string>
-    <string name="move_to_selection_dialog_title" msgid="4052506464467083621">"ගෙනයන්නේ"</string>
-    <string name="search_hint" msgid="4916671414132334289">"තැපැල් සෙවීම"</string>
-    <!-- no translation found for search_results_loaded (1784879343458807514) -->
-    <skip />
-    <string name="network_error" msgid="5931164247644972255">"සම්බන්ධතාවය නැත"</string>
-    <string name="retry" msgid="916102442074217293">"නැවත උත්සාහ කරන්න"</string>
-    <string name="load_more" msgid="8702691358453560575">"තවත් පූරණය කරන්න"</string>
-    <!-- no translation found for load_attachment (3894318473827290350) -->
-    <skip />
-    <string name="shortcut_name_title" msgid="1562534040126088628">"ෆෝල්ඩරය කෙටිමග නම් කරන්න"</string>
-    <string name="wait_for_sync_title" msgid="4577632826912823075">"සමමුහුර්තය සඳහා රැඳීම"</string>
-    <string name="not_synced_title" msgid="3600180500934086346">"ගිණුම සමමුහුර්ත කර නොමැත"</string>
-    <string name="wait_for_manual_sync_body" msgid="2823149409451003378">"මෙම ගිණුම ස්වයංක්‍රියව සමමුහුර්ත කිරීමට සකසා නැත.\nතැපෑල එක වරක් සමමුහුර්ත කිරීමට "<b>"දැන් සමමුහුර්ත කිරීම"</b>", හෝ මෙම ගිණුම ස්වයංක්‍රිය සමමුහුර්ත කිරීම සැකසීමට "<b>"සමමුහුර්ත කිරීමේ සැකසීම් වෙනස් කිරීම"</b>" ස්පර්ශ කරන්න."</string>
-    <string name="manual_sync" msgid="2271479734895537848">"දැන් සමමුහුර්ත කරන්න"</string>
-    <string name="change_sync_settings" msgid="3615852118397055361">"සමමුහුර්ත කිරීමේ සැකසීම් වෙනස් කරන්න"</string>
-    <string name="photo_load_failed" msgid="577471721679146999">"රුපය පූරණ කළ නොහැක"</string>
-    <string name="cant_move_or_change_labels" msgid="4155490583610926755">"තේරීමට ගිණුම් කිහිපයක් අඩංගු වන බැවින් ගෙනයාමට නොහැක."</string>
-    <string name="multiple_new_message_notification_item" msgid="1386588046275174918"><b>"<xliff:g id="SENDER">%1$s</xliff:g>"</b>"   <xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="single_new_message_notification_big_text" msgid="2170154732664242904">"<xliff:g id="SUBJECT">%1$s</xliff:g>\n<xliff:g id="SNIPPET">%2$s</xliff:g>"</string>
-    <string name="ignore_spam_warning" msgid="8760314545535838430">"නොසලකා හරින්න, මම මෙය පණිවිඩය විශ්වාස කරනවා"</string>
-    <string name="via_domain" msgid="537951148511529082">"<xliff:g id="VIADOMAIN">%1$s</xliff:g> හරහා"</string>
-    <string name="signin" msgid="4699091478139791244">"පුරනය වන්න"</string>
-    <string name="info" msgid="1357564480946178121">"තොරතුරු"</string>
-    <string name="report" msgid="4318141326014579036">"වාර්තාව"</string>
-    <string name="sync_error" msgid="1795794969006241678">"සමමුහුර්ත කළ නොහැක."</string>
-    <string name="sync_error_message" msgid="4182644657243736635">"ඔබගේ උපාංගයේ සමමුහුර්ත කිරීමට ඇති තරම් ආචනය ඉඩ නොමැත."</string>
-    <string name="storage" msgid="4783683938444150638">"ආචයනය"</string>
-    <string name="senders_split_token" msgid="6549228851819460081">", "</string>
-    <string name="draft_count_format" msgid="9122583199850209286">" (<xliff:g id="COUNT">%1$s</xliff:g>)"</string>
-    <string name="all_folders_heading" msgid="9023770187629170967">"සියලුම ෆෝල්ඩර"</string>
-    <string name="recent_folders_heading" msgid="8943134955788867702">"මෑත කාලින ෆෝල්ඩර"</string>
-    <string name="message_details_title" msgid="60771875776494764">"පණිවිඩ විස්තර"</string>
-    <string name="preference_advance_to_title" msgid="6385669491239514630">"ස්වයංක්‍රිය උසස් කිරීම"</string>
-  <string-array name="prefEntries_autoAdvance">
-    <item msgid="1505450878799459652">"අලුත්"</item>
-    <item msgid="8000986144872247139">"පරණ"</item>
-    <item msgid="8015001161633421314">"සංවාද ලැයිස්තුව"</item>
-  </string-array>
-  <string-array name="prefSummaries_autoAdvance">
-    <item msgid="8221665977497655719">"ඔබ මැකීමෙන් පසුව නව සංවාද පෙන්වන්න"</item>
-    <item msgid="1721869262893378141">"ඔබ මැකීමෙන් පසුව පරණ සංවාද පෙන්වන්න"</item>
-    <item msgid="880913657385630195">"ඔබ මැකීමෙන් පසුව සංවාද ලැයිස්තුව පෙන්වන්න"</item>
-  </string-array>
-    <string name="prefDialogTitle_autoAdvance" msgid="5459235590885640678">"වෙත උසස් කරන්න"</string>
-    <string name="clear_display_images_whitelist_title" msgid="2012677202404471778">"පින්තූර අනුමැති හිස් කරන්න"</string>
-    <string name="clear_display_images_whitelist_dialog_title" msgid="1942692501166848471">"පින්තූර අනුමැති හිස් කරන්න ද?"</string>
-    <string name="clear_display_images_whitelist_dialog_message" msgid="3952553078559373729">"ඔබ පෙර අවසර දුන් යවන්නන්ගේ පේළිගත කළ පින්තූර පෙන්වීම නවත්වන්න."</string>
-    <string name="sender_whitelist_cleared" msgid="2490984995927904030">"පින්තූර ස්වයංක්‍රීයව නොපෙන්වනු ඇත."</string>
-    <string name="preferences_signature_title" msgid="2318034745474929902">"අත්සන"</string>
-    <string name="preferences_signature_dialog_title" msgid="4801741764511807064">"අත්සන"</string>
-    <string name="preferences_signature_summary_not_set" msgid="3776614319388053784">"පිහිටුවා නැත"</string>
-    <string name="notification_action_reply" msgid="8378725460102575919">"පිළිතුරු දෙන්න"</string>
-    <string name="notification_action_reply_all" msgid="5693469099941000037">"සියල්ලන්ටම ප්‍පිළිතුරු යවන්න"</string>
-    <string name="notification_action_archive" msgid="2884874164831039047">"සංරක්ෂිත කරන්න"</string>
-    <string name="notification_action_remove_label" msgid="3714785653186750981">"ලේබලය ඉවත් කරන්න"</string>
-    <string name="notification_action_delete" msgid="3201627482564624132">"මකන්න"</string>
-    <string name="notification_action_undo_archive" msgid="600186958134073582">"සංරක්ෂිතය කරන ලද"</string>
-    <string name="notification_action_undo_remove_label" msgid="8341924850540100690">"ලේබලය ඉවත් කරන ලදි"</string>
-    <string name="notification_action_undo_delete" msgid="6915612337413587103">"මකාදමන ලදි"</string>
-    <string name="veiled_address" msgid="2670378260196977266"></string>
-    <string name="veiled_alternate_text" msgid="6343564357099807582"></string>
-    <string name="veiled_alternate_text_unknown_person" msgid="6728323554307952217"></string>
-    <string name="veiled_summary_unknown_person" msgid="2122359944161241551"></string>
-    <string name="label_notification_ticker" msgid="323232821061341014">"<xliff:g id="LABEL">%s</xliff:g>: <xliff:g id="NOTIFICATION">%s</xliff:g>"</string>
-  <plurals name="new_messages">
-    <item quantity="one" msgid="3446656407520493241">"අලුත් පණිවිඩ <xliff:g id="COUNT">%1$d</xliff:g>"</item>
-    <item quantity="other" msgid="3531683811183204615">"අලුත් පණිවිඩ <xliff:g id="COUNT">%1$d</xliff:g>"</item>
-  </plurals>
-    <string name="single_new_message_notification_title" msgid="7954710563222504868">"<xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="silent_ringtone" msgid="1570794756474381886">"නිශ්ශබ්ද වන්න"</string>
-    <string name="preference_removal_action_title" msgid="4703834472477137634">"සංරක්ෂණය සහ මැකීමේ ක්‍රියාවන්"</string>
-  <string-array name="prefEntries_removal_action">
-    <item msgid="954772302016538814">"සංරක්ෂිතය පමණක් පෙන්වන්න"</item>
-    <item msgid="7212690302706180254">"මැකීම පමණක් පෙන්වන්න"</item>
-    <item msgid="2539051197590685708">"සංරක්ෂණය පෙන්වන්න සහ මකන්න"</item>
-  </string-array>
-  <string-array name="prefSummaries_removal_action_summary">
-    <item msgid="6877416142040695022">"සංරක්ෂිතය පමණක් පෙන්වන්න"</item>
-    <item msgid="1510017057984222376">"මැකීම පමණක් පෙන්වන්න"</item>
-    <item msgid="3196207224108008441">"සංරක්ෂණය පෙන්වන්න සහ මකන්න"</item>
-  </string-array>
-    <string name="prefDialogTitle_removal_action" msgid="266548424110393246">"සංරක්ෂණය සහ මැකීමේ ක්‍රියාවන්"</string>
-    <string name="preferences_default_reply_all_title" msgid="7255858488369635327">"සියල්ලන්ටම ප්‍රතිඋත්තර යවන්න"</string>
-    <string name="preferences_default_reply_all_summary_impl" msgid="895581085692979709">"පණිවිඩ ප්‍රතිචාර සඳහා සුපුරුදු ලෙස භාවිතා කරන්න"</string>
-    <string name="preference_swipe_title_archive" msgid="9122333537761282714">"සංරක්ෂිත කිරීමට ස්වයිප් කරන්න"</string>
-    <string name="preference_swipe_title_delete" msgid="4860474024917543711">"මැකීමට ස්වයිප් කරන්න"</string>
-    <string name="preference_swipe_description" msgid="3036560323237015010">"සංවාද ලැයිස්තුව තුළ"</string>
-    <string name="preference_sender_image_title" msgid="7890813537985591865">"යවන්නාගේ රූපය"</string>
-    <string name="preference_sender_image_description" msgid="3586817690132199889">"සංවාද ලැයිස්තුවේ නම අසලින් පෙන්වන්න"</string>
-    <string name="empty_trash" msgid="3385937024924728399">"අපද්‍රව්‍ය හිස් කරන්න"</string>
-    <string name="empty_spam" msgid="2911988289997281371">"අයාචිත තැපෑල හිස්කරන්නද?"</string>
-    <string name="empty_trash_dialog_title" msgid="2104898489663621508">"අපද්‍රව්‍ය හිස් කරන්න ද?"</string>
-    <string name="empty_spam_dialog_title" msgid="1130319045917820569">"අයාචිත තැපෑල හිස්කරන්නද?"</string>
-  <plurals name="empty_folder_dialog_message">
-    <item quantity="one" msgid="3315412388217832914">"<xliff:g id="COUNT">%1$d</xliff:g> පණිවිඩයක් ස්ථිරවම මැකෙනු ඇත."</item>
-    <item quantity="other" msgid="263840304486020101">"පණිවිඩ <xliff:g id="COUNT">%1$d</xliff:g> ක් ස්ථිරවම මැකෙනු ඇත."</item>
-  </plurals>
-    <string name="drawer_open" msgid="2285557278907103851">"සංචාලන ඇදීම විවෘත කරන්න"</string>
-    <string name="drawer_close" msgid="2065829742127544297">"සංචාලන ඇදීම වසන්න"</string>
-    <string name="conversation_photo_welcome_text" msgid="836483155429003787">"සංවාදය තේරීමට යවන්නාගේ රූපය ස්පර්ශ කරන්න."</string>
-    <string name="long_press_to_select_tip" msgid="1660881999120625177">"තනි සංවාදයක් තේරීමට රඳවන්න සහ ස්පර්ශ කරන්න, පසුව තව තේරීමට ස්පර්ශ කරන්න"</string>
-    <string name="folder_icon_desc" msgid="6272938864914794739">"ෆෝල්ඩර නිරූපකය"</string>
-    <string name="add_account" msgid="5905863370226612377">"ගිණුමක් එකතු කරන්න"</string>
-    <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"චාරිකාව අස් කරන්න"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"ස්වයංක්‍රිය සමමුහුර්තය අක්‍රියයි."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"සක්‍රිය කිරීමට ස්පර්ශ කරන්න."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"ගිණුම් සමමුහුර්තය අක්‍රියයි."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"<xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g> හි සක්‍රිය කරන්න."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"ගිණුම් සැකසීම්"</string>
-    <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="OUTBOX">%2$s</xliff:g> හි නොයැවූ <xliff:g id="NUMBER">%1$s</xliff:g> කි"</string>
-    <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"ස්වයංක්‍රිය-සමමුහුර්ත වීම සක්‍රිය කරන්නද?"</string>
-    <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Gmail පමණක් නොව, සියලුම යෙදුම් සහ ගිණුම්වලට ඔබ කරන වෙනස්කම්, වෙබය, ඔබගේ අනෙකුත් උපාංග සහ ඔබගේ <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g> අතර සමමුහුර්ත වේ."</string>
-    <string name="phone" msgid="4142617042507912053">"දුරකථනය"</string>
-    <string name="tablet" msgid="4593581125469224791">"ටැබ්ලට්"</string>
-    <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="7239160845196929866">"සක්‍රිය කරන්න"</string>
-    <string name="show_n_more_folders" msgid="5769610839632786654">"තවත් ෆෝල්ඩර <xliff:g id="NUMBER">%1$s</xliff:g> ක් පෙන්වන්න"</string>
-    <string name="hide_folders" msgid="7618891933409521283">"ෆෝල්ඩර සඟවන්න"</string>
-    <string name="print" msgid="7987949243936577207">"මුද්‍රණ කරන්න"</string>
-    <string name="print_all" msgid="4011022762279519941">"සියල්ල මුද්‍රණය කරන්න"</string>
-  <plurals name="num_messages">
-    <item quantity="one" msgid="8071234386915191851">"<xliff:g id="COUNT">%1$d</xliff:g> පණිවිඩයි"</item>
-    <item quantity="other" msgid="962415099931188360">"පණිවිඩ <xliff:g id="COUNT">%1$d</xliff:g>"</item>
-  </plurals>
-    <string name="date_message_received_print" msgid="4168417403884350040">"<xliff:g id="DAY_AND_DATE">%1$s</xliff:g> <xliff:g id="TIME">%2$s</xliff:g>"</string>
-    <string name="draft_to_heading" msgid="7370121943946205024">"වෙත කටු සටහනක්:"</string>
-    <string name="draft_heading" msgid="7032951343184552800">"කටු සටහන"</string>
-    <string name="quoted_text_hidden_print" msgid="5256754205675159141">"උදෘත පෙළ සඟවා ඇත"</string>
-  <plurals name="num_attachments">
-    <item quantity="one" msgid="5494465717267988888">"ඇමුණුම් <xliff:g id="COUNT">%1$d</xliff:g>"</item>
-    <item quantity="other" msgid="5422167728480739361">"ඇමුණුම් <xliff:g id="COUNT">%1$d</xliff:g>"</item>
-  </plurals>
-    <string name="no_subject" msgid="5622708348540036959">"(මාතෘකාවක් නොමැත)"</string>
-    <string name="vacation_responder" msgid="5570132559074523806">"නිවාඩු ප්‍රතිචාරකය"</string>
-    <string name="preferences_vacation_responder_title" msgid="2268482117730576123">"නිවාඩු ප්‍රතිචාරකය"</string>
-    <string name="vacation_responder_body_hint_text" msgid="9087613123105158494">"පණිවිඩය"</string>
-    <string name="send_to_contacts_text" msgid="124432913980620545">"මගේ සම්බන්ධතාවලට පමණක් යවන්න"</string>
-    <string name="send_to_domain_text" msgid="5064559546745918393">"<xliff:g id="DOMAIN">%1$s</xliff:g> වෙත පමණක් යවන්න"</string>
-    <string name="pick_start_date_title" msgid="2274665037355224165">"ආරම්භය"</string>
-    <string name="pick_end_date_title" msgid="733396083649496600">"අවසානය (විකල්ප)"</string>
-    <string name="date_not_set" msgid="3251555782945051904">"පිහිටුවා නැත"</string>
-    <string name="set_end_date_dialog_title" msgid="7543009262788808443">"අවසාන දිනය (විකල්ප)"</string>
-    <string name="custom_date" msgid="5794846334232367838">"අභිරුචි"</string>
-    <string name="date_none" msgid="1061426502665431412">"කිසිවක් නැත"</string>
-    <string name="discard_changes" msgid="5699760550972324746">"වෙනස්කම් ඉවතලන්න ද?"</string>
-    <string name="vacation_responder_changes_saved" msgid="91448817268121249">"නිවාඩු ප්‍රතිචාරක වෙනස් කිරීම් සුරකින ලදි"</string>
-    <string name="vacation_responder_changes_discarded" msgid="21756037735539983">"නිවාඩු ප්‍රතිචාරක වෙනස් කිරීම් ඉවතලන ලදි"</string>
-    <string name="vacation_responder_off" msgid="4429909341193366667">"අක්‍රියයි"</string>
-    <string name="vacation_responder_on" msgid="4913238379320882449">"<xliff:g id="DATE">%1$s</xliff:g> දින සිට, සක්‍රියයි"</string>
-    <string name="vacation_responder_on_with_end_date" msgid="4360941815371475955">"<xliff:g id="START_DATE">%1$s</xliff:g> දින සිට, <xliff:g id="END_DATE">%2$s</xliff:g> දක්වා සක්‍රියයි"</string>
-    <string name="vacation_responder_empty_subject_and_body_warning" msgid="6233629618520852439">"මාතෘකාව හෝ පණිවිඩය එකතු කරන්න"</string>
-    <string name="view_entire_message" msgid="823281796655014454">"සම්පූර්ණ පණිවිඩය පෙන්වන්න"</string>
-    <string name="eml_loader_error_toast" msgid="6577383216635400167">"මෙම ගොනුව විවෘත කළ නොහැක"</string>
-    <string name="help_and_info" msgid="3708286489943154681">"සහාය"</string>
-    <string name="help_and_feedback" msgid="7211458338163287670">"උදවු සහ ප්‍රතිපෝෂණ"</string>
-    <string name="feedback" msgid="204247008751740034">"ප්‍රතිපෝෂණය යවන්න"</string>
-    <string name="copyright" msgid="3121335168340432582">"©<xliff:g id="YEAR">%1$d</xliff:g> Google Inc."</string>
-    <string name="version" msgid="1161745345056656547">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="VERSION">%2$s</xliff:g> අනුවාදය"</string>
-    <string name="view_app_page" msgid="3241990517052398927"></string>
-    <string name="print_dialog" msgid="8895536548487605661">"මුද්‍රණ කරන්න..."</string>
-    <string name="copyright_information" msgid="971422874488783312">"ප්‍රකාශන හිමිකම් තොරතුරු"</string>
-    <string name="privacy_policy" msgid="212094623396418302">"පෞද්ගලිකත්ව ප්‍රතිපත්තිය"</string>
-    <string name="open_source_licenses" msgid="8643615555920977752">"විවෘත මූල බලපත්‍ර"</string>
-    <string name="reply_choice_yes" msgid="3327633032975373220">"ඔව්"</string>
-    <string name="reply_choice_no" msgid="7068775605915475207">"නැත"</string>
-    <string name="reply_choice_ok" msgid="7881073621845053152">"හරි"</string>
-    <string name="reply_choice_hehe" msgid="6054314968043050748">"හා හා"</string>
-    <string name="reply_choice_thanks" msgid="4978961954288364694">"ස්තූතියි"</string>
-    <string name="reply_choice_i_agree" msgid="2496652737796884298">"මම එකඟයි"</string>
-    <string name="reply_choice_nice" msgid="4465894941302838676">"හොඳයි"</string>
-    <string name="reply_on_my_way" msgid="5645003971107444269">"මම එන ගමන්"</string>
-    <string name="reply_choice_later" msgid="4629219072859486413">"හරි, මම ඔබ වෙත පැමිණෙන්නම්"</string>
-    <string name="reply_choice_smiling_face" msgid="1772253938506548631">":)"</string>
-    <string name="reply_choice_frowning_face" msgid="6260338807944002651">":("</string>
-    <string name="preference_header_action_confirmations" msgid="3922674681156121948">"ක්‍රියා තහවුරු කිරීම්"</string>
-    <string name="preference_confirm_before_delete_title" msgid="7563587174619033835">"මැකීමට පෙර තහවුරු කරන්න"</string>
-    <string name="preference_confirm_before_archive_title" msgid="7318645995655875718">"සංරක්ෂණය කිරීමට පෙර තහවුරු කරන්න"</string>
-    <string name="preference_confirm_before_send_title" msgid="4136585783513077039">"යැවීමට පෙර තහවුරු කරන්න"</string>
-    <string name="preferences_conversation_mode_title" msgid="389352009651720838">"පණිවිඩ ස්වයංක්‍රියව හැඩගස්වන්න"</string>
-    <string name="preferences_conversation_mode_summary" msgid="5730999743867653106">"තිරයට සුදුසු පරිදි පණිවිඩය හකුළන්න"</string>
-    <string name="preferences_disable_snap_headers_title" msgid="7257824136988429629">"පණිවිඩ ක්‍රියාවන්"</string>
-  <string-array name="prefSummaries_snapHeader">
-    <item msgid="43373293784193461">"පණිවිඩ ක්‍රියාකාරකම් සැමවිටම තිරයේ ඉහළින්ම පෙන්වන්න"</item>
-    <item msgid="1765271305989996747">"සිරස් වෙත කරකවා ඇතිවිට පමණක් පණිවිඩ ක්‍රියාකාරකම් තිරයේ ඉහළින්ම පෙන්වන්න"</item>
-    <item msgid="6311113076575333488">"පණිවිඩ ක්‍රියාකාරකම් පණිවිඩයේ ශීර්ෂකයට පිටතින් පෙන්වන්න එපා"</item>
-  </string-array>
-  <string-array name="prefEntries_snapHeader">
-    <item msgid="6906986566816683587">"සැමවිටම පෙන්වන්න"</item>
-    <item msgid="113299655708990672">"සිරස් ලෙස පමණක් පෙන්වන්න"</item>
-    <item msgid="4403750311175924065">"පෙන්වන්න එපා"</item>
-  </string-array>
-    <string name="clear_history_title" msgid="5536216295725760357">"සෙවීම් ඉතිහාසය හිස් කරන්න"</string>
-    <string name="search_history_cleared" msgid="1461946302763342640">"සෙවුම් ඉතිහාසය හිස් කෙරුණි."</string>
-    <string name="clear_history_dialog_title" msgid="3503603389704365385">"සෙවීම් ඉතිහාසය හිස් කරන්නද?"</string>
-    <string name="clear_history_dialog_message" msgid="5202922561632407778">"ඔබ පෙර කළ සියලු සෙවීම් ඉවත් වනු ඇත."</string>
-    <string name="manage_accounts_menu_item" msgid="4734660452395086786">"ගිණුම් කළමනාකරණය කරන්න"</string>
-    <string name="general_preferences_title" msgid="4212138728220418162">"සාමාන්‍ය සැකසීම්"</string>
-    <string name="activity_preferences" msgid="8966077432517613292">"සැකසීම්"</string>
-</resources>
diff --git a/res/values-sk-sw600dp/strings.xml b/res/values-sk-sw600dp/strings.xml
index 76ed7da..11a8d00 100644
--- a/res/values-sk-sw600dp/strings.xml
+++ b/res/values-sk-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ kópia/skr.kópia"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ skrytá kópia"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Správa priečinkov"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Použiť ako predvolenú možnosť pre odpovede na upozornenia na správy"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ kópia/skr.kópia"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ skrytá kópia"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Správa priečinkov"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Použiť ako predvolenú možnosť pre odpovede na upozornenia na správy"</string>
 </resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 4796657..3fd388c 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -62,7 +62,7 @@
     <string name="archive" msgid="5978663590021719939">"Archivovať"</string>
     <string name="report_spam" msgid="4106897677959987340">"Nahlásiť spam"</string>
     <string name="mark_not_spam" msgid="8617774236231366651">"Nahlásiť, že to nie je spam"</string>
-    <string name="report_phishing" msgid="8454666464488413739">"Nahlásiť phishing"</string>
+    <string name="report_phishing" msgid="8454666464488413739">"Nahlásiť neopráv. získ. údajov"</string>
     <string name="delete" msgid="6784262386780496958">"Odstrániť"</string>
     <string name="discard_drafts" msgid="5881484193628472105">"Zahodiť koncepty"</string>
     <string name="discard_failed" msgid="7520780769812210279">"Správy sa nepodarilo zahodiť"</string>
@@ -272,7 +272,7 @@
     <string name="tap_to_configure_folder_sync" msgid="3280434399275638071">"Synchronizovať priečinok"</string>
     <string name="widget_large_unread_count" msgid="8699435859096455837">"%d+"</string>
     <string name="large_unseen_count" msgid="3055042669246912518">"viac ako <xliff:g id="COUNT">%d</xliff:g> nových"</string>
-    <string name="unseen_count" msgid="5509898665569695288">"Nové (<xliff:g id="COUNT">%d</xliff:g>)"</string>
+    <string name="unseen_count" msgid="5509898665569695288">"Nové: <xliff:g id="COUNT">%d</xliff:g>"</string>
   <plurals name="actionbar_unread_messages">
     <item quantity="other" msgid="3863201473731766006">"Počet neprečítaných správ: <xliff:g id="COUNT">%1$d</xliff:g>"</item>
   </plurals>
@@ -295,9 +295,9 @@
     <string name="shortcut_name_title" msgid="1562534040126088628">"Pomenovať skratku priečinka"</string>
     <string name="wait_for_sync_title" msgid="4577632826912823075">"Čaká sa na synchronizáciu…"</string>
     <string name="not_synced_title" msgid="3600180500934086346">"Účet nie je synchronizovaný"</string>
-    <string name="wait_for_manual_sync_body" msgid="2823149409451003378">"Tento účet nemá nastavenú automatickú synchronizáciu.\nAk chcete jednorazovo synchronizovať poštu, dotknite sa tlačidla "<b>"Synchronizovať"</b>". Ak chcete nastaviť, aby účet synchronizoval poštu automaticky, dotknite sa tlačidla "<b>"Zmeniť synchronizáciu"</b>"."</string>
-    <string name="manual_sync" msgid="2271479734895537848">"Synchronizovať"</string>
-    <string name="change_sync_settings" msgid="3615852118397055361">"Zmeniť synchronizáciu"</string>
+    <string name="wait_for_manual_sync_body" msgid="2823149409451003378">"Tento účet nie je nastavený na automatickú synchronizáciu.\nAk chcete synchronizovať e-maily jednorazovo, dotknite sa položky "<b>"Synchronizovať"</b>". Ak chcete nastaviť, aby účet synchronizoval e-maily automaticky, dotknite sa položky "<b>"Zmeniť nastavenia synchronizácie"</b>"."</string>
+    <string name="manual_sync" msgid="2271479734895537848">"Synchroniz."</string>
+    <string name="change_sync_settings" msgid="3615852118397055361">"Zmeniť nastav. synchronizácie"</string>
     <string name="photo_load_failed" msgid="577471721679146999">"Obrázok sa nepodarilo načítať"</string>
     <string name="cant_move_or_change_labels" msgid="4155490583610926755">"Presun nie je možné uskutočniť, pretože vybraté správy pochádzajú z rôznych účtov."</string>
     <string name="multiple_new_message_notification_item" msgid="1386588046275174918"><b>"<xliff:g id="SENDER">%1$s</xliff:g>"</b>"   <xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
@@ -317,8 +317,8 @@
     <string name="message_details_title" msgid="60771875776494764">"Podrobnosti správy"</string>
     <string name="preference_advance_to_title" msgid="6385669491239514630">"Automatický prechod"</string>
   <string-array name="prefEntries_autoAdvance">
-    <item msgid="1505450878799459652">"Novšiu konverzáciu"</item>
-    <item msgid="8000986144872247139">"Staršiu konverzáciu"</item>
+    <item msgid="1505450878799459652">"Novšia konverzácia"</item>
+    <item msgid="8000986144872247139">"Staršia konverzácia"</item>
     <item msgid="8015001161633421314">"Zoznam konverzácií"</item>
   </string-array>
   <string-array name="prefSummaries_autoAdvance">
@@ -326,7 +326,7 @@
     <item msgid="1721869262893378141">"Po odstránení zobraziť staršiu konverzáciu"</item>
     <item msgid="880913657385630195">"Po odstránení zobraziť zoznam konverzácií"</item>
   </string-array>
-    <string name="prefDialogTitle_autoAdvance" msgid="5459235590885640678">"Prejsť na"</string>
+    <string name="prefDialogTitle_autoAdvance" msgid="5459235590885640678">"Pokračovať do"</string>
     <string name="clear_display_images_whitelist_title" msgid="2012677202404471778">"Vymazať schválenia obrázkov"</string>
     <string name="clear_display_images_whitelist_dialog_title" msgid="1942692501166848471">"Chcete vymazať schválenia obrázkov?"</string>
     <string name="clear_display_images_whitelist_dialog_message" msgid="3952553078559373729">"Prestanú sa zobrazovať vložené obrázky od odosielateľov, pre ktorých ste to predtým povolili."</string>
@@ -337,10 +337,10 @@
     <string name="notification_action_reply" msgid="8378725460102575919">"Odpovedať"</string>
     <string name="notification_action_reply_all" msgid="5693469099941000037">"Odpovedať všetkým"</string>
     <string name="notification_action_archive" msgid="2884874164831039047">"Archivovať"</string>
-    <string name="notification_action_remove_label" msgid="3714785653186750981">"Odstrániť štítok"</string>
+    <string name="notification_action_remove_label" msgid="3714785653186750981">"Odstrániť menovku"</string>
     <string name="notification_action_delete" msgid="3201627482564624132">"Odstrániť"</string>
     <string name="notification_action_undo_archive" msgid="600186958134073582">"Archivované"</string>
-    <string name="notification_action_undo_remove_label" msgid="8341924850540100690">"Štítok bol odstránený"</string>
+    <string name="notification_action_undo_remove_label" msgid="8341924850540100690">"Menovka bola odstránená"</string>
     <string name="notification_action_undo_delete" msgid="6915612337413587103">"Odstránené"</string>
     <string name="veiled_address" msgid="2670378260196977266"></string>
     <string name="veiled_alternate_text" msgid="6343564357099807582"></string>
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Ikona priečinka"</string>
     <string name="add_account" msgid="5905863370226612377">"Pridať účet"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Zatvoriť tip"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Automatická synchronizácia je vypnutá."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Dotykom zapnete."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Synchronizácia účtu je vypnutá."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Zapnite ju v <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Nastaveniach účtu"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"Počet neodoslaných správ v priečinku <xliff:g id="OUTBOX">%2$s</xliff:g>: <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Zapnúť automatickú synchronizáciu?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Zmeny, ktoré vykonáte vo všetkých aplikáciách a účtoch (nie iba v službe Gmail), budú synchronizované medzi webom, ďalšími zariadeniami a zariadením <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>."</string>
@@ -400,7 +395,7 @@
     <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="7239160845196929866">"Zapnúť"</string>
     <string name="show_n_more_folders" msgid="5769610839632786654">"Zobraziť ďalšie priečinky (počet: <xliff:g id="NUMBER">%1$s</xliff:g>)"</string>
     <string name="hide_folders" msgid="7618891933409521283">"Skryť priečinky"</string>
-    <string name="print" msgid="7987949243936577207">"Tlačiť"</string>
+    <string name="print" msgid="7987949243936577207">"Tlač"</string>
     <string name="print_all" msgid="4011022762279519941">"Vytlačiť všetky"</string>
   <plurals name="num_messages">
     <item quantity="one" msgid="8071234386915191851">"<xliff:g id="COUNT">%1$d</xliff:g> správa"</item>
diff --git a/res/values-sl-sw600dp/strings.xml b/res/values-sl-sw600dp/strings.xml
index 8dc6987..2508527 100644
--- a/res/values-sl-sw600dp/strings.xml
+++ b/res/values-sl-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Kp/Skp"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Skp"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Upravljanje map"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Uporabi kot privzeto za odgovore na obvestila o sporočilih"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ Kp/Skp"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ Skp"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Upravljanje map"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Uporabi kot privzeto za odgovore na obvestila o sporočilih"</string>
 </resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 4907ba3..c7a5688 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Ikona mape"</string>
     <string name="add_account" msgid="5905863370226612377">"Dodaj račun"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Opusti nasvet"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Samodejna sinhronizacija je izklopljena."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Dotaknite se za vklop."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Sinhronizacija računa je izklopljena."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Vklopite v: <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Nastavitve računa"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"Št. neposlanih sporočil v <xliff:g id="OUTBOX">%2$s</xliff:g>: <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Želite vklopiti samodejno sinhronizacijo?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Spremembe vseh aplikacij in računov, ne samo za Gmaila, bodo sinhronizirane med spletom, vašimi drugimi napravami in napravo <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>."</string>
diff --git a/res/values-sr-sw600dp/strings.xml b/res/values-sr-sw600dp/strings.xml
index 56cd437..a3e07dd 100644
--- a/res/values-sr-sw600dp/strings.xml
+++ b/res/values-sr-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Cc/Bcc"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Bcc"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Управљај директоријумима"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Користите као подразумевано за одговоре на обавештења о порукама"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ Cc/Bcc"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ Bcc"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Управљај директоријумима"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Коришћење опције као подразумеване за одговоре на обавештења о порук."</string>
 </resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 5083588..babe733 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -65,7 +65,7 @@
     <string name="report_phishing" msgid="8454666464488413739">"Пријави „пецање“"</string>
     <string name="delete" msgid="6784262386780496958">"Избриши"</string>
     <string name="discard_drafts" msgid="5881484193628472105">"Одбаци недовршене поруке"</string>
-    <string name="discard_failed" msgid="7520780769812210279">"Одбаци неуспешне"</string>
+    <string name="discard_failed" msgid="7520780769812210279">"Одбацивање није успело"</string>
     <string name="refresh" msgid="1533748989749277511">"Освежи"</string>
     <string name="reply" msgid="8337757482824207118">"Одговори"</string>
     <string name="reply_all" msgid="5366796103758360957">"Одговори свима"</string>
@@ -126,7 +126,7 @@
     <string name="contextmenu_add_contact" msgid="2310064151427072475">"Додај контакт"</string>
     <string name="contextmenu_send_mail" msgid="3834654593200105396">"Пошаљи имејл"</string>
     <string name="contextmenu_map" msgid="5118951927399465521">"Мапа"</string>
-    <string name="contextmenu_sharelink" msgid="8670940060477758709">"Дели линк"</string>
+    <string name="contextmenu_sharelink" msgid="8670940060477758709">"Дели везу"</string>
     <string name="contextmenu_help" msgid="4209674157707873384">"Помоћ"</string>
     <string name="contextmenu_feedback" msgid="8319100902136337085">"Пошаљи повратне информације"</string>
     <!-- no translation found for num_selected (7990204488812654380) -->
@@ -278,7 +278,7 @@
   </plurals>
     <string name="actionbar_large_unread_count" msgid="753635978542372792">"Непрочитаних: <xliff:g id="COUNT">%1$d</xliff:g>+"</string>
     <string name="view_more_conversations" msgid="8377920000247101901">"Прикажи још преписки"</string>
-    <string name="loading_conversation" msgid="7931600025861500397">"Учитава се..."</string>
+    <string name="loading_conversation" msgid="7931600025861500397">"Учитавање..."</string>
     <string name="activity_mailbox_selection" msgid="7489813868539767701">"Избор налога"</string>
     <string name="activity_folder_selection" msgid="8375243281001234750">"Избор директоријума"</string>
     <string name="folder_shortcut_widget_label" msgid="6466292659577092915">"Директоријум Е-пошта"</string>
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Икона директоријума"</string>
     <string name="add_account" msgid="5905863370226612377">"Додај налог"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Одбацивање савета"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Аутоматска синхронизација је искључена."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Додирните да бисте укључили."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Синхронизација налога је искључена."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Укључите у <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"подешавањима налога"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"Непослате поруке (<xliff:g id="NUMBER">%1$s</xliff:g>) у директоријуму <xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Желите ли да укључите аутоматску синхронизацију?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Промене које обављате у свим апликацијама и налозима, а не само у Gmail-у, биће синхронизоване између веба, других уређаја и <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>."</string>
diff --git a/res/values-sv-sw600dp/strings.xml b/res/values-sv-sw600dp/strings.xml
index b00d8dc..cb8e6fc 100644
--- a/res/values-sv-sw600dp/strings.xml
+++ b/res/values-sv-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+kopia/heml kop"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Hemlig kopia"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Hantera mappar"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Använd som standard för svar på meddelanden"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+kopia/heml kop"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ Hemlig kopia"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Hantera mappar"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Använd som standard för svar på meddelanden"</string>
 </resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 762612f..6996754 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Mappikon"</string>
     <string name="add_account" msgid="5905863370226612377">"Lägg till konto"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Ta bort tips"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Den automatiska synkroniseringen är inaktiverad."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Aktivera genom att trycka."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Kontosynkroniseringen är inaktiverad."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Aktivera i <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Kontoinställningar"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> osända meddelanden i <xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Vill du aktivera automatisk synkronisering?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Ändringar som du gör i alla appar och konton, inte bara i Gmail, synkroniseras mellan webben, dina andra enheter och din <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>."</string>
diff --git a/res/values-sw-sw600dp/strings.xml b/res/values-sw-sw600dp/strings.xml
index 4d35864..1ea08ab 100644
--- a/res/values-sw-sw600dp/strings.xml
+++ b/res/values-sw-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Nakala kwa/Nakala fiche kwa"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Nakala fiche kwa"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Dhibiti folda"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Tumia kama chaguo-msingi ya majibu kwa arifa za ujumbe"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ Nakala kwa/Nakala fiche kwa"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ Nakala fiche kwa"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Dhibiti folda"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Tumia kama chaguo-msingi ya majibu kwa arifa za ujumbe"</string>
 </resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 8e19e0e..b84daa2 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Ikoni ya folda"</string>
     <string name="add_account" msgid="5905863370226612377">"Ongeza akaunti"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Ondoa kidokezo"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Usawazishaji otomatiki umezimwa."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Gusa ili uwashe."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Usawazishaji wa akaunti umezimwa."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Washa kwenye <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Mipangilio ya akaunti"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> ambazo hazijatumwa katika <xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Unataka kuwasha usawazishaji kiotomatiki?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Mabadiliko unayofanyia programu na akaunti zote, sio tu Gmail, yatasawazishwa baina ya wavuti, vifaa vyako vingine na, <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g> yako."</string>
diff --git a/res/values-sw720dp-land/constants.xml b/res/values-sw360dp/dimen.xml
similarity index 81%
copy from res/values-sw720dp-land/constants.xml
copy to res/values-sw360dp/dimen.xml
index b29da6d..df9f91f 100644
--- a/res/values-sw720dp-land/constants.xml
+++ b/res/values-sw360dp/dimen.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     Copyright (C) 2011 Google Inc.
+     Copyright (C) 2014 Google Inc.
      Licensed to The Android Open Source Project.
 
      Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,7 +15,7 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
+
 <resources>
-    <!-- Whether to show single or 2 pane search results -->
-    <bool name="show_two_pane_search_results">true</bool>
-</resources>
+    <dimen name="drawer_width">304dp</dimen>
+</resources>
\ No newline at end of file
diff --git a/res/values-sw720dp-land/constants.xml b/res/values-sw400dp/dimen.xml
similarity index 81%
copy from res/values-sw720dp-land/constants.xml
copy to res/values-sw400dp/dimen.xml
index b29da6d..88ea9ed 100644
--- a/res/values-sw720dp-land/constants.xml
+++ b/res/values-sw400dp/dimen.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     Copyright (C) 2011 Google Inc.
+     Copyright (C) 2014 Google Inc.
      Licensed to The Android Open Source Project.
 
      Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,7 +15,7 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
+
 <resources>
-    <!-- Whether to show single or 2 pane search results -->
-    <bool name="show_two_pane_search_results">true</bool>
-</resources>
+    <dimen name="drawer_width">320dp</dimen>
+</resources>
\ No newline at end of file
diff --git a/res/values-sw600dp-land/constants.xml b/res/values-sw600dp-land/constants.xml
index 7d9fb02..4000724 100644
--- a/res/values-sw600dp-land/constants.xml
+++ b/res/values-sw600dp-land/constants.xml
@@ -15,10 +15,8 @@
      limitations under the License.
 -->
 <resources>
-    <!-- Whether the list is collapsible in conversation view mode -->
-    <bool name="list_collapsible">false</bool>
-    <!-- Whether to show single or 2 pane search results -->
-    <bool name="show_two_pane_search_results">true</bool>
+    <!-- Whether we are in landscape mode on a tablet or not -->
+    <bool name="is_tablet_landscape">true</bool>
 
     <!-- Used to force 70% of max width in compose for landscape tablet -->
     <integer name="compose_padding_weight">15</integer>
diff --git a/res/values-sw600dp-land/dimen.xml b/res/values-sw600dp-land/dimen.xml
index 92359cb..e24b9b0 100644
--- a/res/values-sw600dp-land/dimen.xml
+++ b/res/values-sw600dp-land/dimen.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     Copyright (C) 2012 Google Inc.
+     Copyright (C) 2014 Google Inc.
      Licensed to The Android Open Source Project.
 
      Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,5 +16,5 @@
      limitations under the License.
 -->
 <resources>
-    <dimen name="search_view_width">500dip</dimen>
-</resources>
+    <dimen name="vacation_responder_padding_horizontal">80dp</dimen>
+</resources>
\ No newline at end of file
diff --git a/res/values-sw600dp/arrays.xml b/res/values-sw600dp/arrays.xml
deleted file mode 100644
index ba18cb2..0000000
--- a/res/values-sw600dp/arrays.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2011 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<resources>
-    <integer-array name="senders_with_attachment_lengths">
-        <item>50</item>
-        <item>30</item>
-    </integer-array>
-    <integer-array name="senders_lengths">
-        <item>50</item>
-        <item>35</item>
-    </integer-array>
-</resources>
diff --git a/res/values-sw600dp/colors.xml b/res/values-sw600dp/colors.xml
index 6ea7a37..6a4e517 100644
--- a/res/values-sw600dp/colors.xml
+++ b/res/values-sw600dp/colors.xml
@@ -1,4 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
-    <color name="conversation_view_item_background_color">@android:color/white</color>
-</resources>
\ No newline at end of file
+    <color name="folder_list_divider_color">#b2b2b2</color>
+    <color name="mail_activity_status_bar_color">@color/primary_dark_color</color>
+    <color name="loading_messages_background_color">@android:color/white</color>
+    <color name="conversation_list_background_color">@android:color/white</color>
+</resources>
diff --git a/res/values-sw600dp/constants.xml b/res/values-sw600dp/constants.xml
index fc29399..78a4e86 100644
--- a/res/values-sw600dp/constants.xml
+++ b/res/values-sw600dp/constants.xml
@@ -20,9 +20,12 @@
     <bool name="use_tablet_ui">true</bool>
     <integer name="conversation_header_mode">1</integer>
 
-    <!-- Whether to show single or 2 pane search results -->
-    <bool name="show_two_pane_search_results">false</bool>
-
     <!-- Whether or not we should scroll down so cc aligns with the top -->
     <bool name="auto_scroll_cc">false</bool>
+
+    <integer name="conversation_desired_font_size_px">16</integer>
+
+    <!-- Maximum width in characters of the senders in the thread list -->
+    <integer name="senders_with_attachment_lengths">30</integer>
+    <integer name="senders_lengths">35</integer>
 </resources>
diff --git a/res/values-sw600dp/dimen.xml b/res/values-sw600dp/dimen.xml
index 5d2bea3..5451d7f 100644
--- a/res/values-sw600dp/dimen.xml
+++ b/res/values-sw600dp/dimen.xml
@@ -18,14 +18,12 @@
 <resources>
     <dimen name="conversation_message_content_margin_side">32dp</dimen>
     <dimen name="conversation_view_margin_side">24dp</dimen>
-    <dimen name="conversation_header_padding_side">24dp</dimen>
-    <dimen name="conversation_header_star_size">55dp</dimen>
+    <dimen name="conversation_view_snack_bar_margin">16dp</dimen>
+    <dimen name="conversation_header_padding_side">36dp</dimen>
     <dimen name="conversation_border_margin_side">24dp</dimen>
 
     <dimen name="message_header_icon_margin">24dp</dimen>
     <dimen name="message_header_icon_additional_margin_start">32dp</dimen>
-    <dimen name="message_header_action_button_width">56dp</dimen>
-    <dimen name="message_header_action_button_height">56dp</dimen>
     <dimen name="message_header_action_button_margin_top">8dp</dimen>
     <dimen name="message_header_text_margin_top">22dp</dimen>
     <dimen name="message_header_margin_bottom">24dp</dimen>
@@ -51,8 +49,12 @@
     <dimen name="search_view_width">400dip</dimen>
 
     <dimen name="empty_view_text_width">380dip</dimen>
-    <dimen name="empty_view_text_size">28sp</dimen>
     <dimen name="empty_view_space">16dip</dimen>
 
     <dimen name="chip_wrapper_start_padding">64dp</dimen>
+
+    <dimen name="action_bar_content_inset_start">60dp</dimen>
+
+    <dimen name="snack_bar_min_width">288dp</dimen>
+    <dimen name="snack_bar_max_width">320dp</dimen>
 </resources>
diff --git a/res/values-sw600dp/menus.xml b/res/values-sw600dp/menus.xml
index 694e663..3e8e058 100644
--- a/res/values-sw600dp/menus.xml
+++ b/res/values-sw600dp/menus.xml
@@ -18,5 +18,5 @@
 
 <resources>
     <item name="message_header_overflow_menu" type="menu">
-        @menu/message_header_overflow_menu_land_or_tablet_v19</item>
+        @menu/message_header_overflow_menu_land_or_tablet</item>
 </resources>
\ No newline at end of file
diff --git a/res/values-sw600dp/strings.xml b/res/values-sw600dp/strings.xml
index 77c90fb..164e344 100644
--- a/res/values-sw600dp/strings.xml
+++ b/res/values-sw600dp/strings.xml
@@ -22,6 +22,9 @@
     <string name="add_bcc_label">+ Bcc</string>
     <!-- Menu item: manages the folders for this account. [CHAR LIMIT = 30] -->
     <string name="menu_manage_folders">Manage folders</string>
+    <!-- Menu item move_to state for displaying as an action or in overflow -->
+    <!-- 2 corresponds to SHOW_AS_ACTION_ALWAYS -->
+    <string name="menu_move_to_state" translatable="false">2</string>
     <!--  Settings screen, Reply to all default setting summary [CHAR LIMIT=70] -->
     <string name="preferences_default_reply_all_summary">Use as default for replies to message notifications</string>
 </resources>
diff --git a/res/values-sw600dp/styles.xml b/res/values-sw600dp/styles.xml
index 3c86c8a..1a56abb 100644
--- a/res/values-sw600dp/styles.xml
+++ b/res/values-sw600dp/styles.xml
@@ -16,13 +16,7 @@
      limitations under the License.
 -->
 <resources>
-    <style name="VacationResponderStyle">
-        <item name="android:paddingLeft">@dimen/vacation_responder_padding_horizontal_wide</item>
-        <item name="android:paddingRight">@dimen/vacation_responder_padding_horizontal_wide</item>
-    </style>
-
-    <style name="VacationResponderScrollViewStyle">
-        <item name="android:layout_width">@dimen/vacation_responder_width</item>
-        <item name="android:layout_height">match_parent</item>
+    <style name="ComposeAreaWrapper">
+        <item name="android:background">@color/holo_light_background_color</item>
     </style>
 </resources>
diff --git a/res/values-sw600dp/themes.xml b/res/values-sw600dp/themes.xml
index 4909a9d..9f51e0f 100644
--- a/res/values-sw600dp/themes.xml
+++ b/res/values-sw600dp/themes.xml
@@ -1,14 +1,12 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
-    <style name="MailActivityTheme" parent="@style/UnifiedEmailTheme.Appcompat" />
-
     <!-- todo - comment out when theme exists -->
     <!--<style name="ShortcutWidgetTheme" parent="@style/Theme.Appcompat.Light.Dialog.MinWidth">-->
     <!--<item name="actionOverflowButtonStyle">@style/ActionBarOverflowButtonStyle</item>-->
-    <!--<item name="homeAsUpIndicator">@drawable/ic_arrow_back_wht_24dp</item>-->
+    <!--<item name="homeAsUpIndicator">@drawable/ic_arrow_back_wht_24dp_with_rtl</item>-->
     <!--</style>-->
 
     <style name="VacationResponderTheme" parent="@style/UnifiedEmailTheme.Appcompat">
-        <item name="android:windowBackground">@color/vacation_responder_background</item>
+        <item name="android:windowBackground">@color/vacation_responder_window_background</item>
     </style>
 </resources>
\ No newline at end of file
diff --git a/res/values-sw720dp/constants.xml b/res/values-sw720dp/constants.xml
index 3653baf..1274290 100644
--- a/res/values-sw720dp/constants.xml
+++ b/res/values-sw720dp/constants.xml
@@ -21,10 +21,4 @@
          Note: this this value should be set with the same qualifiers where
          show_two_pane_search_results is set to false -->
     <integer name="conversation_list_search_header_mode">0</integer>
-
-    <!-- Whether to show single or 2 pane search results -->
-    <bool name="show_two_pane_search_results">false</bool>
-
-    <!-- Whether or not to use a nice transition when showing the folder list fragment; used in 2-pane layouts -->
-    <integer name="use_folder_list_fragment_transition">0</integer>
 </resources>
diff --git a/res/values-sw720dp-land/constants.xml b/res/values-sw720dp/dimen.xml
similarity index 85%
rename from res/values-sw720dp-land/constants.xml
rename to res/values-sw720dp/dimen.xml
index b29da6d..3b775b3 100644
--- a/res/values-sw720dp-land/constants.xml
+++ b/res/values-sw720dp/dimen.xml
@@ -16,6 +16,5 @@
      limitations under the License.
 -->
 <resources>
-    <!-- Whether to show single or 2 pane search results -->
-    <bool name="show_two_pane_search_results">true</bool>
+    <dimen name="snack_bar_max_width">420dp</dimen>
 </resources>
diff --git a/res/values-ta-rIN-sw600dp/strings.xml b/res/values-ta-rIN-sw600dp/strings.xml
deleted file mode 100644
index 6780edb..0000000
--- a/res/values-ta-rIN-sw600dp/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-     Copyright (C) 2012 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Cc/Bcc"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Bcc"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"கோப்புறைகளை நிர்வகி"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"செய்தி அறிவிப்புகளுக்கான பதில்களுக்கு இயல்புநிலையாகப் பயன்படுத்து"</string>
-</resources>
diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta-rIN/strings.xml
deleted file mode 100644
index 26f8894..0000000
--- a/res/values-ta-rIN/strings.xml
+++ /dev/null
@@ -1,483 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-     Copyright (C) 2011 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="from" msgid="5159056500059912358">"அனுப்புநர்"</string>
-    <string name="to" msgid="3971614275716830581">"பெறுநர்"</string>
-    <string name="cc" msgid="8768828862207919684">"Cc"</string>
-    <string name="bcc" msgid="519303553518479171">"Bcc"</string>
-    <string name="subject_hint" msgid="2136470287303571827">"தலைப்பு"</string>
-    <string name="body_hint" msgid="6478994981747057817">"மின்னஞ்சலை எழுதவும்"</string>
-    <string name="add_file_attachment" msgid="2604880054248593993">"கோப்பை இணை"</string>
-    <string name="add_photo_attachment" msgid="7163589794940909528">"படத்தை இணை"</string>
-    <string name="save_draft" msgid="2669523480789672118">"வரைவைச் சேமி"</string>
-    <string name="discard" msgid="4905982179911608430">"விலக்கு"</string>
-    <string name="compose" msgid="2602861958391035523">"எழுது"</string>
-  <string-array name="compose_modes">
-    <item msgid="9000553538766397816">"பதிலளி"</item>
-    <item msgid="2767793214788399009">"எல்லோருக்கும் பதிலளி"</item>
-    <item msgid="2758162027982270607">"முன்னனுப்பு"</item>
-  </string-array>
-    <string name="reply_attribution" msgid="1114972798797833259">"<xliff:g id="DATE">%s</xliff:g> அன்று, <xliff:g id="PERSON">%s</xliff:g> எழுதியது:"</string>
-    <string name="forward_attribution" msgid="597850048345475752">"---------- முன்னனுப்பப்பட்ட செய்தி ----------&lt;br&gt;அனுப்புநர்: <xliff:g id="FROM">%1$s</xliff:g>&lt;br&gt;தேதி: <xliff:g id="DATE">%2$s</xliff:g>&lt;br&gt;தலைப்பு: <xliff:g id="SUBJECT">%3$s</xliff:g>&lt;br&gt;பெறுநர்: <xliff:g id="TO">%4$s</xliff:g>&lt;br&gt;"</string>
-    <string name="forward_attribution_no_headers" msgid="1828826576779486239">"---------- முன்னனுப்பப்பட்ட செய்தி ----------"</string>
-    <string name="cc_attribution" msgid="2928584226469388899">"Cc: <xliff:g id="CC">%1$s</xliff:g>&lt;br&gt;"</string>
-    <string name="select_attachment_type" msgid="353236686616663062">"இணைப்பின் வகையைத் தேர்வுசெய்யவும்"</string>
-    <string name="too_large_to_attach_single" msgid="2669897137966512530">"<xliff:g id="MAXSIZE">%1$s</xliff:g> விடப் பெரிய கோப்பை இணைக்க முடியாது."</string>
-    <string name="too_large_to_attach_multiple" msgid="1620163295709036343">"ஒன்று அல்லது அதற்கு மேற்பட்ட கோப்புகள் இணைக்கப்படவில்லை. வரம்பு <xliff:g id="MAXSIZE">%1$s</xliff:g> ஆகும்."</string>
-    <string name="too_large_to_attach_additional" msgid="4964155563465970480">"கோப்பு இணைக்கப்படவில்லை. <xliff:g id="MAXSIZE">%1$s</xliff:g> வரம்பு முடிந்தது."</string>
-    <string name="generic_attachment_problem" msgid="4683974765387240723">"கோப்பை இணைக்க முடியவில்லை."</string>
-    <string name="recipient_needed" msgid="319816879398937214">"குறைந்தது ஒரு பெறுநரையாவது சேர்க்க வேண்டும்."</string>
-    <string name="recipient_error_dialog_title" msgid="760741480291963706">"பெறுநர் பிழை"</string>
-    <string name="confirm_send_title" msgid="4664971589247101530">"செய்தியை அனுப்பவா?"</string>
-    <string name="confirm_send_message_with_no_subject" msgid="1442628074022609987">"செய்தித் தலைப்பில் எந்த உரையும் இல்லை."</string>
-    <string name="confirm_send_message_with_no_body" msgid="3329355318700201516">"செய்திப் பகுதியில் எந்த உரையும் இல்லை."</string>
-    <string name="confirm_send_message" msgid="6211518590166222735">"இந்தச் செய்தியை அனுப்பவா?"</string>
-    <string name="message_discarded" msgid="6792661321962262024">"செய்தி விலக்கப்பட்டது."</string>
-    <string name="signature" msgid="3172144541947408374">\n\n"<xliff:g id="SIGNATURE">%s</xliff:g>"</string>
-    <string name="custom_from_account_label" msgid="5042317430007736322">"அஞ்சலை இவ்வாறு அனுப்புக:"</string>
-    <string name="send" msgid="4269810089682120826">"அனுப்பு"</string>
-    <string name="mark_read" msgid="579388143288052493">"படித்ததாகக் குறி"</string>
-    <string name="mark_unread" msgid="6245060538061533191">"படித்ததெனக் குறி"</string>
-    <string name="mute" msgid="9164839998562321569">"முடக்கு"</string>
-    <string name="add_star" msgid="3275117671153616270">"நட்சத்திரத்தைச் சேர்"</string>
-    <string name="remove_star" msgid="9126690774161840733">"நட்சத்திரத்தை அகற்று"</string>
-    <string name="remove_folder" msgid="2379905457788576297">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> இலிருந்து அகற்று"</string>
-    <string name="archive" msgid="5978663590021719939">"காப்பிடு"</string>
-    <string name="report_spam" msgid="4106897677959987340">"ஸ்பேமைப் புகாரளி"</string>
-    <string name="mark_not_spam" msgid="8617774236231366651">"ஸ்பேம் இல்லையெனப் புகாரளி"</string>
-    <string name="report_phishing" msgid="8454666464488413739">"ஃபிஷிங்கைப் புகாரளி"</string>
-    <string name="delete" msgid="6784262386780496958">"நீக்கு"</string>
-    <string name="discard_drafts" msgid="5881484193628472105">"வரைவுகளை நிராகரி"</string>
-    <string name="discard_failed" msgid="7520780769812210279">"தோல்வியுற்றதை விலக்கு"</string>
-    <string name="refresh" msgid="1533748989749277511">"புதுப்பி"</string>
-    <string name="reply" msgid="8337757482824207118">"பதிலளி"</string>
-    <string name="reply_all" msgid="5366796103758360957">"எல்லோருக்கும் பதிலளி"</string>
-    <string name="resume_draft" msgid="1272723181782570649">"மாற்று"</string>
-    <string name="forward" msgid="4397585145490426320">"முன்னனுப்பு"</string>
-    <string name="menu_compose" msgid="4575025207594709432">"எழுது"</string>
-    <string name="menu_change_folders" msgid="2194946192901276625">"கோப்புறைகளை மாற்று"</string>
-    <string name="menu_move_to" msgid="7948877550284452830">"இதற்கு நகர்த்து"</string>
-    <string name="menu_move_to_inbox" msgid="258554178236001444">"இன்பாக்ஸிற்கு நகர்த்து"</string>
-    <string name="menu_manage_folders" msgid="8486398523679534519">"கோப்புறை அமைப்புகள்"</string>
-    <string name="menu_show_original" msgid="2330398228979616661">"தன்னியக்க அளவு மாற்றத்தை மாற்றியமை"</string>
-    <string name="menu_settings" msgid="7993485401501778040">"அமைப்புகள்"</string>
-    <string name="menu_search" msgid="1949652467806052768">"தேடு"</string>
-    <string name="drawer_title" msgid="3766219846644975778">"செல்"</string>
-    <string name="mark_important" msgid="8781680450177768820">"முக்கியமானதாகக் குறி"</string>
-    <string name="mark_not_important" msgid="3342258155408116917">"முக்கியமானதல்ல எனக் குறி"</string>
-    <string name="add_cc_label" msgid="2249679001141195213">"Cc/Bcc ஐச் சேர்"</string>
-    <string name="add_bcc_label" msgid="963745641238037813">"Bcc ஐச் சேர்"</string>
-    <string name="quoted_text" msgid="977782904293216533">"மேற்கோளிட்ட உரையைச் சேர்"</string>
-    <string name="quoted_text_label" msgid="2296807722849923934">"உரையை மேற்கோளிடு"</string>
-    <string name="respond_inline" msgid="6609746292081928078">"இன்லைனில் பதிலளி"</string>
-    <string name="bytes" msgid="651011686747499628">"<xliff:g id="COUNT">%s</xliff:g> பை."</string>
-    <string name="kilobytes" msgid="1523463964465770347">"<xliff:g id="COUNT">%s</xliff:g> கி.பை"</string>
-    <string name="megabytes" msgid="4309397368708773323">"<xliff:g id="COUNT">%s</xliff:g> மெபை"</string>
-    <string name="attachment_image" msgid="6375306026208274564">"படம்"</string>
-    <string name="attachment_video" msgid="7119476472603939848">"வீடியோ"</string>
-    <string name="attachment_audio" msgid="7097658089301809284">"ஆடியோ"</string>
-    <string name="attachment_text" msgid="3485853714965922173">"உரை"</string>
-    <string name="attachment_application_msword" msgid="2110108876623152162">"ஆவணம்"</string>
-    <string name="attachment_application_vnd_ms_powerpoint" msgid="425353008963359230">"விளக்கக்காட்சி"</string>
-    <string name="attachment_application_vnd_ms_excel" msgid="5585781311136609103">"விரிதாள்"</string>
-    <string name="attachment_application_pdf" msgid="4207340200944655970">"PDF"</string>
-    <string name="attachment_unknown" msgid="3360536730101083926">"<xliff:g id="ATTACHMENTEXTENSION">%s</xliff:g> கோப்பு"</string>
-    <string name="preview_attachment" msgid="6265457626086113833">"மாதிரிக்காட்சி"</string>
-    <string name="save_attachment" msgid="375685179032130033">"சேமி"</string>
-    <string name="cancel_attachment" msgid="6900093625792891122">"ரத்துசெய்"</string>
-    <string name="open_attachment" msgid="6100396056314739761">"திற"</string>
-    <string name="install_attachment" msgid="8119470822958087928">"நிறுவு"</string>
-    <string name="download_again" msgid="8195787340878328119">"மீண்டும் பதிவிறக்கு"</string>
-    <string name="more_info_attachment" msgid="2899691682394864507">"தகவல்"</string>
-    <string name="no_application_found" msgid="7309485680354949680">"பார்ப்பதற்கு, இந்த இணைப்பை எந்தப் பயன்பாட்டாலும் திறக்க முடியாது."</string>
-    <string name="fetching_attachment" msgid="2286628490159574159">"இணைப்பைப் பெறுகிறது"</string>
-    <string name="please_wait" msgid="3953824147776128899">"காத்திருக்கவும்…"</string>
-    <string name="saved" msgid="161536102236967534">"சேமிக்கப்பட்டது, <xliff:g id="SIZE">%s</xliff:g>"</string>
-    <string name="download_failed" msgid="3878373998269062395">"பதிவிறக்க முடியவில்லை. மீண்டும் முயற்சிக்க தொடவும்."</string>
-    <string name="menu_photo_save_all" msgid="2742869476474613396">"எல்லாவற்றையும் சேமி"</string>
-    <string name="menu_photo_share" msgid="6410980274832639330">"பகிர்"</string>
-    <string name="menu_photo_share_all" msgid="3049053252719665320">"அனைத்தையும் பகிர்"</string>
-    <string name="menu_photo_print" msgid="3084679038179342333">"அச்சிடு"</string>
-    <string name="saving" msgid="6274238733828387433">"சேமிக்கிறது..."</string>
-    <string name="choosertitle_sharevia" msgid="3539537264873337959">"இதன் வழியாகப் பகிர்"</string>
-    <string name="contextmenu_openlink" msgid="6952228183947135362">"உலாவியில் திற"</string>
-    <string name="contextmenu_copy" msgid="2584243784216385180">"நகலெடு"</string>
-    <string name="contextmenu_copylink" msgid="8659897702269320063">"இணைப்பு URL ஐ நகலெடு"</string>
-    <string name="contextmenu_view_image" msgid="1031172763893491000">"படத்தைக் காண்பி"</string>
-    <string name="contextmenu_dial_dot" msgid="8881095692316726628">"அழை..."</string>
-    <string name="contextmenu_sms_dot" msgid="5319737001771622657">"SMS…"</string>
-    <string name="contextmenu_add_contact" msgid="2310064151427072475">"தொடர்பைச் சேர்"</string>
-    <string name="contextmenu_send_mail" msgid="3834654593200105396">"மின்னஞ்சல் அனுப்பு"</string>
-    <string name="contextmenu_map" msgid="5118951927399465521">"வரைபடம்"</string>
-    <string name="contextmenu_sharelink" msgid="8670940060477758709">"இணைப்பைப் பகிர்"</string>
-    <string name="contextmenu_help" msgid="4209674157707873384">"உதவி"</string>
-    <string name="contextmenu_feedback" msgid="8319100902136337085">"கருத்தை அனுப்பு"</string>
-    <!-- no translation found for num_selected (7990204488812654380) -->
-    <skip />
-  <plurals name="move_conversation">
-    <item quantity="one" msgid="237882018518207244">"உரையாடலை நகர்த்து"</item>
-    <item quantity="other" msgid="6639576653114141743">"<xliff:g id="ID_1">%1$d</xliff:g> உரையாடல்களை நகர்த்து"</item>
-  </plurals>
-    <string name="content_description" msgid="854320355052962069">"<xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g> குறித்து <xliff:g id="SUBJECT">%3$s</xliff:g>, <xliff:g id="SNIPPET">%4$s</xliff:g> அன்று <xliff:g id="DATE">%5$s</xliff:g>, <xliff:g id="READSTATE">%6$s</xliff:g>"</string>
-    <string name="content_description_today" msgid="1634422834354116955">"<xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g> குறித்து <xliff:g id="SUBJECT">%3$s</xliff:g>, <xliff:g id="SNIPPET">%4$s</xliff:g> க்கு அனுப்பிய <xliff:g id="TIME">%5$s</xliff:g>, <xliff:g id="READSTATE">%6$s</xliff:g>"</string>
-    <string name="read_string" msgid="5495929677508576520">"உரையாடல் படிக்கப்பட்டது"</string>
-    <string name="unread_string" msgid="7342558841698083381">"படிக்காத உரையாடல்"</string>
-    <string name="filtered_tag" msgid="721666921386074505">"[<xliff:g id="TAG">%1$s</xliff:g>]<xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="badge_and_subject" msgid="3979372269373936750">"<xliff:g id="ID_1">%1$s</xliff:g> <xliff:g id="ID_2">%2$s</xliff:g>"</string>
-  <plurals name="draft">
-    <item quantity="one" msgid="6717535677167943402">"வரைவு"</item>
-    <item quantity="other" msgid="1335781147509740039">"வரைவுகள்"</item>
-  </plurals>
-    <string name="sending" msgid="5600034886763930499">"அனுப்புகிறது…"</string>
-    <string name="message_retrying" msgid="5335188121407261331">"மீண்டும் முயல்கிறது…"</string>
-    <string name="message_failed" msgid="7887650587384601790">"தோல்வி"</string>
-    <string name="send_failed" msgid="2186285547449865010">"செய்தி அனுப்பப்படவில்லை."</string>
-    <string name="me_object_pronoun" msgid="4674452244417913816">"எனக்கு"</string>
-    <string name="me_subject_pronoun" msgid="7479328865714008288">"எனக்கு"</string>
-  <plurals name="confirm_delete_conversation">
-    <item quantity="one" msgid="7605755011865575440">"உரையாடலை நீக்கவா?"</item>
-    <item quantity="other" msgid="1585660381208712562">"இந்த <xliff:g id="COUNT">%1$d</xliff:g> உரையாடல்களை நீக்கவா?"</item>
-  </plurals>
-  <plurals name="confirm_archive_conversation">
-    <item quantity="one" msgid="9105551557653306945">"உரையாடலைக் காப்பகப்படுத்தவா?"</item>
-    <item quantity="other" msgid="2001972798185641108">"இந்த <xliff:g id="COUNT">%1$d</xliff:g> உரையாடல்களைக் காப்பகப்படுத்தவா?"</item>
-  </plurals>
-  <plurals name="confirm_discard_drafts_conversation">
-    <item quantity="one" msgid="2030421499893210789">"செய்தியை நிராகரிக்கவா?"</item>
-    <item quantity="other" msgid="782234447471532005">"<xliff:g id="COUNT">%1$d</xliff:g> செய்திகளை நிராகரிக்கவா?"</item>
-  </plurals>
-    <string name="confirm_discard_text" msgid="5172680524418848519">"இந்தச் செய்தியை நிராகரிக்கவா?"</string>
-    <string name="loading_conversations" msgid="7255732786298655246">"ஏற்றுகிறது..."</string>
-    <string name="empty_inbox" msgid="5901734942362315228">"முடித்துவிட்டீர்கள்! இந்த நாளில் மகிழ்ச்சியாக இருங்கள்."</string>
-    <string name="empty_search" msgid="8564899353449880818">"அச்சச்சோ! \"<xliff:g id="SEARCH_QUERY">%1$s</xliff:g>\" க்கான எதையும் நாங்கள் கண்டறியவில்லை."</string>
-    <string name="empty_spam_folder" msgid="3288985543286122800">"ஆஹா, ஸ்பேம் இங்கு இல்லை!"</string>
-    <string name="empty_trash_folder" msgid="378119063015945020">"இங்கு குப்பை இல்லை. மறுசுழற்சி செய்ததற்கு நன்றி!"</string>
-    <string name="empty_folder" msgid="3227552635613553855">"இங்கு அஞ்சல் ஏதுமில்லை."</string>
-    <string name="getting_messages" msgid="8403333791332403244">"செய்திகளைப் பெறுகிறது"</string>
-    <string name="undo" msgid="8256285267701059609">"செயல்தவிர்"</string>
-  <plurals name="conversation_unstarred">
-    <item quantity="one" msgid="839233699150563831">"<xliff:g id="COUNT">%1$d</xliff:g> உரையாடலில் இருந்து நட்சத்திரம் நீக்கப்படுகிறது."</item>
-    <item quantity="other" msgid="7677305734833709789">"<xliff:g id="COUNT">%1$d</xliff:g> உரையாடல்களிலிருந்து நட்சத்திரம் நீக்கப்படுகிறது."</item>
-  </plurals>
-  <plurals name="conversation_muted">
-    <item quantity="one" msgid="3339638225564408438">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; உரையாடல் முடக்கப்பட்டது."</item>
-    <item quantity="other" msgid="4276111931404654219">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; உரையாடல்கள் முடக்கப்பட்டன."</item>
-  </plurals>
-  <plurals name="conversation_spammed">
-    <item quantity="one" msgid="6986172030710967687">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; உரையாடல் ஸ்பேம் எனப் புகாரளிக்கப்பட்டது."</item>
-    <item quantity="other" msgid="5900913789259199137">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; உரையாடல்கள் ஸ்பேம் எனப் புகாரளிக்கப்பட்டன."</item>
-  </plurals>
-  <plurals name="conversation_not_spam">
-    <item quantity="one" msgid="2294904093653094150">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; உரையாடல் ஸ்பேம் அல்ல என அறிவிக்கப்பட்டது."</item>
-    <item quantity="other" msgid="4966164423991098144">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; உரையாடல்கள் ஸ்பேம் அல்ல என அறிவிக்கப்பட்டன."</item>
-  </plurals>
-  <plurals name="conversation_not_important">
-    <item quantity="one" msgid="3824809189993339030">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; உரையாடல் முக்கியமில்லாதததாகக் குறிக்கப்பட்டது."</item>
-    <item quantity="other" msgid="1215472798075869124">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; உரையாடல் முக்கியமில்லாதவையாகக் குறிக்கப்பட்டன"</item>
-  </plurals>
-  <plurals name="conversation_phished">
-    <item quantity="one" msgid="4330095881258771201">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; உரையாடல் ஃபிஷிங் எனப் புகாரளிக்கப்பட்டது."</item>
-    <item quantity="other" msgid="9218674052779504277">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; உரையாடல்கள் ஃபிஷிங் எனப் புகாரளிக்கப்பட்டன."</item>
-  </plurals>
-  <plurals name="conversation_archived">
-    <item quantity="one" msgid="4127890884907503696">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; உரையாடல் காப்பகப்படுத்தப்பட்டது."</item>
-    <item quantity="other" msgid="7789480176789922968">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; உரையாடல்கள் காப்பகப்படுத்தப்பட்டன."</item>
-  </plurals>
-  <plurals name="conversation_deleted">
-    <item quantity="one" msgid="5591889079235938982">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; உரையாடல் நீக்கப்பட்டது."</item>
-    <item quantity="other" msgid="7060256058737892078">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; உரையாடல்கள் நீக்கப்பட்டன."</item>
-  </plurals>
-    <string name="deleted" msgid="7378013910782008375">"நீக்கப்பட்டது"</string>
-    <string name="archived" msgid="6283673603512713022">"காப்பகப்படுத்தப்பட்டது"</string>
-    <string name="folder_removed" msgid="5656281444688183676">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> இலிருந்து நீக்கப்பட்டது"</string>
-  <plurals name="conversation_folder_changed">
-    <item quantity="one" msgid="6463727361987396734">"மாற்றப்பட்ட கோப்புறை."</item>
-    <item quantity="other" msgid="8815390494333090939">"மாற்றப்பட்ட கோப்புறைகள்."</item>
-  </plurals>
-    <string name="conversation_folder_moved" msgid="6475872337373081683">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> க்கு நகர்த்தப்பட்டது"</string>
-    <string name="search_results_header" msgid="1529438451150580188">"முடிவுகள்"</string>
-    <string name="search_unsupported" msgid="2873920566477359177">"இந்தக் கணக்கில் தேடல் ஆதரிக்கப்படவில்லை."</string>
-    <string name="add_label" msgid="3285338046038610902">"கோப்புறையைச் சேர்"</string>
-    <string name="new_incoming_messages_one" msgid="5933087567495998661">"<xliff:g id="SENDER">%s</xliff:g> இடமிருந்து வந்த புதிய செய்தியை காட்டு."</string>
-  <plurals name="new_incoming_messages_many">
-    <item quantity="other" msgid="4394042684501388790">"<xliff:g id="COUNT">%1$d</xliff:g> புதிய செய்திகளைக் காட்டு."</item>
-  </plurals>
-    <string name="date_and_view_details" msgid="2952994746916149969">"<xliff:g id="DATE">%1$s</xliff:g> &lt;a href=\'http://www.example.com\'&gt;விவரங்களைக் காட்டு&lt;/a&gt;"</string>
-    <string name="hide_details" msgid="8018801050702453314">"விவரங்களை மறை"</string>
-    <string name="to_message_header" msgid="3954385178027011919">"<xliff:g id="RECIPIENTS">%1$s</xliff:g> அனுப்பப்பட்டது"</string>
-    <string name="contact_info_string" msgid="6484930184867405276">"<xliff:g id="NAME">%1$s</xliff:g> க்கான தொடர்பு தகவலைக் காட்டு"</string>
-    <string name="contact_info_string_default" msgid="6204228921864816351">"தொடர்பு தகவலைக் காட்டு"</string>
-  <plurals name="show_messages_read">
-    <item quantity="other" msgid="5285673397387128129">"<xliff:g id="COUNT">%1$d</xliff:g> பழைய செய்திகள்"</item>
-  </plurals>
-    <string name="from_heading" msgid="48290556829713090">"அனுப்புநர்:"</string>
-    <string name="replyto_heading" msgid="8275255318292059079">"பதிலளிக்கவேண்டியது:"</string>
-    <string name="to_heading" msgid="3495203282540398336">"பெறுநர்: "</string>
-    <string name="to_heading_no_space" msgid="679167047628308670">"பெறுநர்:"</string>
-    <string name="cc_heading" msgid="5603892257866345823">"Cc:"</string>
-    <string name="bcc_heading" msgid="1482186590756218269">"Bcc:"</string>
-    <string name="date_heading" msgid="4213063948406397168">"தேதி:"</string>
-    <string name="show_images" msgid="436044894053204084">"படங்களைக் காட்டு"</string>
-    <string name="always_show_images" msgid="556087529413707819">"இந்த அனுப்புநரிடமிருந்து வரும் படங்களை எப்போதும் காட்டு"</string>
-    <string name="always_show_images_toast" msgid="3763157294047555051">"இந்த அனுப்புநரிடமிருந்து வரும் படங்கள் தானாகவே காண்பிக்கப்படும்."</string>
-    <string name="address_display_format" msgid="2098008376913966177">"<xliff:g id="NAME">%1$s</xliff:g> <xliff:g id="EMAIL">%2$s</xliff:g>"</string>
-    <string name="address_display_format_with_via_domain" msgid="8108294635074750048">"<xliff:g id="VIA_DOMAIN">%3$s</xliff:g> வழியாக <xliff:g id="NAME">%1$s</xliff:g> <xliff:g id="EMAIL">%2$s</xliff:g>"</string>
-    <string name="message_saved" msgid="3291655042310241793">"செய்தி வரைவாகச் சேமிக்கப்பட்டது."</string>
-    <string name="sending_message" msgid="2487846954946637084">"செய்தியை அனுப்புகிறது…"</string>
-    <string name="invalid_recipient" msgid="9157434699389936584">"<xliff:g id="WRONGEMAIL">%s</xliff:g> முகவரி தவறானது."</string>
-    <string name="show_elided" msgid="3456154624105704327">"மேற்கோளிட்ட உரையைக் காட்டு"</string>
-    <string name="hide_elided" msgid="5768235486834692733">"▼ மேற்கோளிட்ட உரையை மறை"</string>
-    <string name="message_invite_title" msgid="5985161025144867256">"கேலெண்டர் அழைப்பு"</string>
-    <string name="message_invite_calendar_view" msgid="9181966650840809197">"கேலெண்டரில் காட்டு"</string>
-    <string name="message_invite_label_attending" msgid="4194264767870003397">"பங்கேற்கிறீர்களா?"</string>
-    <string name="message_invite_accept" msgid="8002758842580134835">"ஆம்"</string>
-    <string name="message_invite_tentative" msgid="3199418731566655887">"கலந்துகொள்ளலாம்"</string>
-    <string name="message_invite_decline" msgid="6331040872447290777">"இல்லை"</string>
-    <string name="enumeration_comma" msgid="2848850136844740850">", "</string>
-    <string name="send_anyway" msgid="2727576121007079643">"எப்படியேனும் அனுப்பு"</string>
-    <string name="ok" msgid="6178802457914802336">"சரி"</string>
-    <string name="done" msgid="344354738335270292">"முடிந்தது"</string>
-    <string name="cancel" msgid="4831678293149626190">"ரத்துசெய்"</string>
-    <string name="clear" msgid="765949970989448022">"அழி"</string>
-    <string name="next" msgid="2662478712866255138">"அடுத்து"</string>
-    <string name="previous" msgid="8985379053279804274">"முந்தையது"</string>
-  <string-array name="sync_status">
-    <item msgid="4600303222943450797">"வெற்றி"</item>
-    <item msgid="2972425114100316260">"இணைப்பு இல்லை."</item>
-    <item msgid="8594593386776437871">"உள்நுழைய முடியவில்லை."</item>
-    <item msgid="1375193906551623606">"பாதுகாப்புப் பிழை."</item>
-    <item msgid="195177374927979967">"ஒத்திசைக்க முடியவில்லை."</item>
-    <item msgid="8026148967150231130">"அகப் பிழை"</item>
-    <item msgid="5442620760791553027">"சேவையகப் பிழை"</item>
-  </string-array>
-    <string name="tap_to_configure" msgid="137172348280050643">"அமைக்க தொடவும்."</string>
-    <string name="non_synced_folder_description" msgid="3044618511909304701">"உரையாடல்களைப் பார்க்க, இந்தக் கோப்புறையை ஒத்திசைக்கவும்."</string>
-    <string name="tap_to_configure_folder_sync" msgid="3280434399275638071">"கோப்புறையை ஒத்திசை"</string>
-    <string name="widget_large_unread_count" msgid="8699435859096455837">"%d+"</string>
-    <string name="large_unseen_count" msgid="3055042669246912518">"<xliff:g id="COUNT">%d</xliff:g>+ புதியவை"</string>
-    <string name="unseen_count" msgid="5509898665569695288">"<xliff:g id="COUNT">%d</xliff:g> புதியவை"</string>
-  <plurals name="actionbar_unread_messages">
-    <item quantity="other" msgid="3863201473731766006">"<xliff:g id="COUNT">%1$d</xliff:g> படிக்காத செய்திகள்"</item>
-  </plurals>
-    <string name="actionbar_large_unread_count" msgid="753635978542372792">"<xliff:g id="COUNT">%1$d</xliff:g>+ படிக்காதவை"</string>
-    <string name="view_more_conversations" msgid="8377920000247101901">"மேலும் உரையாடல்களைக் காட்டு"</string>
-    <string name="loading_conversation" msgid="7931600025861500397">"ஏற்றுகிறது..."</string>
-    <string name="activity_mailbox_selection" msgid="7489813868539767701">"கணக்கைத் தேர்வுசெய்"</string>
-    <string name="activity_folder_selection" msgid="8375243281001234750">"கோப்புறையைத் தேர்வுசெய்"</string>
-    <string name="folder_shortcut_widget_label" msgid="6466292659577092915">"மின்னஞ்சல் கோப்புறை"</string>
-    <string name="change_folders_selection_dialog_title" msgid="9174464298613273814">"கோப்புறைகளை மாற்று"</string>
-    <string name="move_to_selection_dialog_title" msgid="4052506464467083621">"இதற்கு நகர்த்து"</string>
-    <string name="search_hint" msgid="4916671414132334289">"அஞ்சலில் தேடு"</string>
-    <!-- no translation found for search_results_loaded (1784879343458807514) -->
-    <skip />
-    <string name="network_error" msgid="5931164247644972255">"இணைப்பு இல்லை"</string>
-    <string name="retry" msgid="916102442074217293">"மீண்டும் முயற்சிசெய்க"</string>
-    <string name="load_more" msgid="8702691358453560575">"மேலும் ஏற்று"</string>
-    <!-- no translation found for load_attachment (3894318473827290350) -->
-    <skip />
-    <string name="shortcut_name_title" msgid="1562534040126088628">"கோப்புறையின் குறுக்குவழியைப் பெயரிடுக"</string>
-    <string name="wait_for_sync_title" msgid="4577632826912823075">"ஒத்திசைக்கப்படுவதற்காகக் காத்திருக்கிறது"</string>
-    <string name="not_synced_title" msgid="3600180500934086346">"கணக்கு ஒத்திசைக்கப்படவில்லை"</string>
-    <string name="wait_for_manual_sync_body" msgid="2823149409451003378">"இந்தக் கணக்கு தானாக ஒத்திசைக்க அமைக்கப்படவில்லை.\nஅஞ்சலை ஒருமுறை ஒத்திசைக்க "<b>"இப்போது ஒத்திசை"</b>" என்பதைத் தொடவும் அல்லது அஞ்சலைத் தானாக ஒத்திசைப்பதற்கு இந்தக் கணக்கை அமைக்க "<b>"ஒத்திசைவு அமைப்புகளை மாற்றவும்"</b>"."</string>
-    <string name="manual_sync" msgid="2271479734895537848">"இப்போது ஒத்திசை"</string>
-    <string name="change_sync_settings" msgid="3615852118397055361">"ஒத்திசைவு அமைப்புகளை மாற்று"</string>
-    <string name="photo_load_failed" msgid="577471721679146999">"படத்தை ஏற்ற முடியவில்லை"</string>
-    <string name="cant_move_or_change_labels" msgid="4155490583610926755">"பல கணக்குகளைத் தேர்வுசெய்துள்ளதால் செய்திகளை நகர்த்த முடியவில்லை."</string>
-    <string name="multiple_new_message_notification_item" msgid="1386588046275174918"><b>"<xliff:g id="SENDER">%1$s</xliff:g>"</b>"   <xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="single_new_message_notification_big_text" msgid="2170154732664242904">"<xliff:g id="SUBJECT">%1$s</xliff:g>\n<xliff:g id="SNIPPET">%2$s</xliff:g>"</string>
-    <string name="ignore_spam_warning" msgid="8760314545535838430">"தவிர், இந்தச் செய்தியை நம்புகிறேன்"</string>
-    <string name="via_domain" msgid="537951148511529082">"<xliff:g id="VIADOMAIN">%1$s</xliff:g> வழியாக"</string>
-    <string name="signin" msgid="4699091478139791244">"உள்நுழைக"</string>
-    <string name="info" msgid="1357564480946178121">"தகவல்"</string>
-    <string name="report" msgid="4318141326014579036">"அறிக்கையிடு"</string>
-    <string name="sync_error" msgid="1795794969006241678">"ஒத்திசைக்க முடியவில்லை."</string>
-    <string name="sync_error_message" msgid="4182644657243736635">"உங்கள் சாதனத்தில் ஒத்திசைக்கப் போதுமான சேமிப்பிடம் இல்லை."</string>
-    <string name="storage" msgid="4783683938444150638">"சேமிப்பிடம்"</string>
-    <string name="senders_split_token" msgid="6549228851819460081">", "</string>
-    <string name="draft_count_format" msgid="9122583199850209286">" (<xliff:g id="COUNT">%1$s</xliff:g>)"</string>
-    <string name="all_folders_heading" msgid="9023770187629170967">"அனைத்து கோப்புறைகள்"</string>
-    <string name="recent_folders_heading" msgid="8943134955788867702">"சமீபத்திய கோப்புறைகள்"</string>
-    <string name="message_details_title" msgid="60771875776494764">"செய்தி விவரங்கள்"</string>
-    <string name="preference_advance_to_title" msgid="6385669491239514630">"தன்னியக்க மேம்பாடு"</string>
-  <string-array name="prefEntries_autoAdvance">
-    <item msgid="1505450878799459652">"புதியது"</item>
-    <item msgid="8000986144872247139">"பழையது"</item>
-    <item msgid="8015001161633421314">"உரையாடல் பட்டியல்"</item>
-  </string-array>
-  <string-array name="prefSummaries_autoAdvance">
-    <item msgid="8221665977497655719">"நீக்கிய பின்னர் புதிய உரையாடலைக் காட்டு"</item>
-    <item msgid="1721869262893378141">"நீக்கிய பின்னர் பழைய உரையாடலைக் காட்டு"</item>
-    <item msgid="880913657385630195">"நீக்கிய பின்னர் உரையாடல் பட்டியலைக் காட்டு"</item>
-  </string-array>
-    <string name="prefDialogTitle_autoAdvance" msgid="5459235590885640678">"இதற்கு மேம்படுத்து"</string>
-    <string name="clear_display_images_whitelist_title" msgid="2012677202404471778">"பட அனுமதிகளை அழி"</string>
-    <string name="clear_display_images_whitelist_dialog_title" msgid="1942692501166848471">"பட அனுமதிகளை அழிக்கவா?"</string>
-    <string name="clear_display_images_whitelist_dialog_message" msgid="3952553078559373729">"முன்பு அனுமதித்த அனுப்பநர்களின் இன்லைன் படங்களைக் காண்பிப்பதை நிறத்தவும்."</string>
-    <string name="sender_whitelist_cleared" msgid="2490984995927904030">"படங்களைத் தானாகக் காண்பிக்க முடியாது."</string>
-    <string name="preferences_signature_title" msgid="2318034745474929902">"கையொப்பம்"</string>
-    <string name="preferences_signature_dialog_title" msgid="4801741764511807064">"கையொப்பம்"</string>
-    <string name="preferences_signature_summary_not_set" msgid="3776614319388053784">"அமைக்கப்படவில்லை"</string>
-    <string name="notification_action_reply" msgid="8378725460102575919">"பதிலளி"</string>
-    <string name="notification_action_reply_all" msgid="5693469099941000037">"எல்லோருக்கும் பதிலளி"</string>
-    <string name="notification_action_archive" msgid="2884874164831039047">"காப்பிடு"</string>
-    <string name="notification_action_remove_label" msgid="3714785653186750981">"லேபிளை அகற்று"</string>
-    <string name="notification_action_delete" msgid="3201627482564624132">"நீக்கு"</string>
-    <string name="notification_action_undo_archive" msgid="600186958134073582">"காப்பகப்படுத்தப்பட்டது"</string>
-    <string name="notification_action_undo_remove_label" msgid="8341924850540100690">"லேபிள் அகற்றப்பட்டது"</string>
-    <string name="notification_action_undo_delete" msgid="6915612337413587103">"நீக்கப்பட்டது"</string>
-    <string name="veiled_address" msgid="2670378260196977266"></string>
-    <string name="veiled_alternate_text" msgid="6343564357099807582"></string>
-    <string name="veiled_alternate_text_unknown_person" msgid="6728323554307952217"></string>
-    <string name="veiled_summary_unknown_person" msgid="2122359944161241551"></string>
-    <string name="label_notification_ticker" msgid="323232821061341014">"<xliff:g id="LABEL">%s</xliff:g>: <xliff:g id="NOTIFICATION">%s</xliff:g>"</string>
-  <plurals name="new_messages">
-    <item quantity="one" msgid="3446656407520493241">"<xliff:g id="COUNT">%1$d</xliff:g> புதிய செய்தி"</item>
-    <item quantity="other" msgid="3531683811183204615">"<xliff:g id="COUNT">%1$d</xliff:g> புதிய செய்திகள்"</item>
-  </plurals>
-    <string name="single_new_message_notification_title" msgid="7954710563222504868">"<xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="silent_ringtone" msgid="1570794756474381886">"நிசப்தம்"</string>
-    <string name="preference_removal_action_title" msgid="4703834472477137634">"காப்பிடு &amp; நீக்கு செயல்கள்"</string>
-  <string-array name="prefEntries_removal_action">
-    <item msgid="954772302016538814">"காப்பிடு என்பதை மட்டும் காட்டு"</item>
-    <item msgid="7212690302706180254">"நீக்கு என்பதை மட்டும் காட்டு"</item>
-    <item msgid="2539051197590685708">"காப்பிடு &amp; நீக்கு இரண்டையும் காட்டு"</item>
-  </string-array>
-  <string-array name="prefSummaries_removal_action_summary">
-    <item msgid="6877416142040695022">"காப்பிடு என்பதை மட்டும் காட்டு"</item>
-    <item msgid="1510017057984222376">"நீக்கு என்பதை மட்டும் காட்டு"</item>
-    <item msgid="3196207224108008441">"காப்பிடு &amp; நீக்கு இரண்டையும் காட்டு"</item>
-  </string-array>
-    <string name="prefDialogTitle_removal_action" msgid="266548424110393246">"காப்பிடு &amp; நீக்கு செயல்கள்"</string>
-    <string name="preferences_default_reply_all_title" msgid="7255858488369635327">"எல்லோருக்கும் பதிலளி"</string>
-    <string name="preferences_default_reply_all_summary_impl" msgid="895581085692979709">"செய்தி பதிலளிப்புகளுக்கான இயல்புநிலையாகப் பயன்படுத்து"</string>
-    <string name="preference_swipe_title_archive" msgid="9122333537761282714">"காப்பகப்படுத்த தேய்க்கவும்"</string>
-    <string name="preference_swipe_title_delete" msgid="4860474024917543711">"நீக்க ஸ்வைப் செய்யவும்"</string>
-    <string name="preference_swipe_description" msgid="3036560323237015010">"உரையாடல் பட்டியலில்"</string>
-    <string name="preference_sender_image_title" msgid="7890813537985591865">"அனுப்புநரின் படம்"</string>
-    <string name="preference_sender_image_description" msgid="3586817690132199889">"உரையாடல் பட்டியலில் பெயருக்கு அருகில் காட்டு"</string>
-    <string name="empty_trash" msgid="3385937024924728399">"குப்பையைக் காலியாக்கு"</string>
-    <string name="empty_spam" msgid="2911988289997281371">"ஸ்பேமைக் காலியாக்கு"</string>
-    <string name="empty_trash_dialog_title" msgid="2104898489663621508">"குப்பையைக் காலியாக்கவா?"</string>
-    <string name="empty_spam_dialog_title" msgid="1130319045917820569">"ஸ்பேமைக் காலியாக்கவா?"</string>
-  <plurals name="empty_folder_dialog_message">
-    <item quantity="one" msgid="3315412388217832914">"<xliff:g id="COUNT">%1$d</xliff:g> செய்தி நிரந்தரமாக நீக்கப்படும்."</item>
-    <item quantity="other" msgid="263840304486020101">"<xliff:g id="COUNT">%1$d</xliff:g> செய்திகள் நிரந்தரமாக நீக்கப்படும்."</item>
-  </plurals>
-    <string name="drawer_open" msgid="2285557278907103851">"வழிசெலுத்தல் டிராயரைத் திற"</string>
-    <string name="drawer_close" msgid="2065829742127544297">"வழிசெலுத்தல் டிராயரை மூடு"</string>
-    <string name="conversation_photo_welcome_text" msgid="836483155429003787">"உரையாடலைத் தேர்ந்தெடுக்க அனுப்புநர் படத்தைத் தொடவும்."</string>
-    <string name="long_press_to_select_tip" msgid="1660881999120625177">"ஒரு உரையாடலைத் தேர்ந்தெடுக்க அதைத் தொட்டுப் பிடிக்கவும், பிறகு மேலும் உரையாடல்களைத் தேர்ந்தெடுக்க தொடவும்."</string>
-    <string name="folder_icon_desc" msgid="6272938864914794739">"கோப்புறை ஐகான்"</string>
-    <string name="add_account" msgid="5905863370226612377">"கணக்கைச் சேர்"</string>
-    <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"உதவிக்குறிப்பை நிராகரி"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"தானாக ஒத்திசைப்பது முடக்கப்பட்டுள்ளது."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"இயக்க தொடவும்."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"கணக்கு ஒத்திசைவு முடக்கப்பட்டுள்ளது."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"<xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g> இல் இயக்கவும்."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"கணக்கு அமைப்புகள்"</string>
-    <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="OUTBOX">%2$s</xliff:g> இல் <xliff:g id="NUMBER">%1$s</xliff:g> அனுப்பப்படாத செய்திகள் உள்ளன"</string>
-    <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"தானாக ஒத்திசைப்பதை இயக்கவா?"</string>
-    <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"நீங்கள் மாற்றங்களைச் செய்யும் எல்லா பயன்பாடுகளும், கணக்குகளும், Gmail மட்டுமில்லாமல், இணையம், உங்களது பிற சாதனங்கள் மற்றும் உங்கள் <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g> ஆகிவற்றிற்கு இடையே ஒத்திசைக்கப்படும்."</string>
-    <string name="phone" msgid="4142617042507912053">"தொலைபேசி"</string>
-    <string name="tablet" msgid="4593581125469224791">"டேப்லெட்"</string>
-    <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="7239160845196929866">"இயக்கு"</string>
-    <string name="show_n_more_folders" msgid="5769610839632786654">"மேலும் <xliff:g id="NUMBER">%1$s</xliff:g> கோப்புறைகளைக் காட்டு"</string>
-    <string name="hide_folders" msgid="7618891933409521283">"கோப்புறைகளை மறை"</string>
-    <string name="print" msgid="7987949243936577207">"அச்சிடு"</string>
-    <string name="print_all" msgid="4011022762279519941">"அனைத்தையும் அச்சிடு"</string>
-  <plurals name="num_messages">
-    <item quantity="one" msgid="8071234386915191851">"<xliff:g id="COUNT">%1$d</xliff:g> செய்தி"</item>
-    <item quantity="other" msgid="962415099931188360">"<xliff:g id="COUNT">%1$d</xliff:g> செய்திகள்"</item>
-  </plurals>
-    <string name="date_message_received_print" msgid="4168417403884350040">"<xliff:g id="DAY_AND_DATE">%1$s</xliff:g> அன்று <xliff:g id="TIME">%2$s</xliff:g> மணிக்கு"</string>
-    <string name="draft_to_heading" msgid="7370121943946205024">"இவருக்கான வரைவு:"</string>
-    <string name="draft_heading" msgid="7032951343184552800">"வரைவு"</string>
-    <string name="quoted_text_hidden_print" msgid="5256754205675159141">"மேற்கோளிட்ட உரை மறைக்கப்பட்டுள்ளது"</string>
-  <plurals name="num_attachments">
-    <item quantity="one" msgid="5494465717267988888">"<xliff:g id="COUNT">%1$d</xliff:g> இணைப்பு"</item>
-    <item quantity="other" msgid="5422167728480739361">"<xliff:g id="COUNT">%1$d</xliff:g> இணைப்புகள்"</item>
-  </plurals>
-    <string name="no_subject" msgid="5622708348540036959">"(தலைப்பு இல்லை)"</string>
-    <string name="vacation_responder" msgid="5570132559074523806">"விடுமுறை பதிலளிப்பான்"</string>
-    <string name="preferences_vacation_responder_title" msgid="2268482117730576123">"விடுமுறை பதிலளிப்பான்"</string>
-    <string name="vacation_responder_body_hint_text" msgid="9087613123105158494">"செய்தி"</string>
-    <string name="send_to_contacts_text" msgid="124432913980620545">"எனது தொடர்புகளுக்கு மட்டும் அனுப்பு"</string>
-    <string name="send_to_domain_text" msgid="5064559546745918393">"<xliff:g id="DOMAIN">%1$s</xliff:g> க்கு மட்டும் அனுப்பு"</string>
-    <string name="pick_start_date_title" msgid="2274665037355224165">"தொடக்கம்"</string>
-    <string name="pick_end_date_title" msgid="733396083649496600">"முடிவு (விருப்பத்திற்குரியது)"</string>
-    <string name="date_not_set" msgid="3251555782945051904">"அமைக்கப்படவில்லை"</string>
-    <string name="set_end_date_dialog_title" msgid="7543009262788808443">"முடிவு தேதி (விருப்பத்திற்குரியது)"</string>
-    <string name="custom_date" msgid="5794846334232367838">"தனிப்பயன்"</string>
-    <string name="date_none" msgid="1061426502665431412">"ஏதுமில்லை"</string>
-    <string name="discard_changes" msgid="5699760550972324746">"மாற்றங்களை நிராகரிக்கவா?"</string>
-    <string name="vacation_responder_changes_saved" msgid="91448817268121249">"விடுமுறை பதிலளிப்பானில் செய்யப்பட்ட மாற்றங்கள் சேமிக்கப்பட்டன"</string>
-    <string name="vacation_responder_changes_discarded" msgid="21756037735539983">"விடுமுறை பதிலளிப்பானில் செய்யப்பட்ட மாற்றங்கள் நிராகரிக்கப்பட்டன"</string>
-    <string name="vacation_responder_off" msgid="4429909341193366667">"முடக்கு"</string>
-    <string name="vacation_responder_on" msgid="4913238379320882449">"<xliff:g id="DATE">%1$s</xliff:g> முதல் இயக்கத்தில் உள்ளது"</string>
-    <string name="vacation_responder_on_with_end_date" msgid="4360941815371475955">"<xliff:g id="START_DATE">%1$s</xliff:g> இலிருந்து <xliff:g id="END_DATE">%2$s</xliff:g> வரை இயக்கத்தில் இருக்கும்"</string>
-    <string name="vacation_responder_empty_subject_and_body_warning" msgid="6233629618520852439">"தலைப்பு அல்லது செய்தியைச் சேர்க்கவும்"</string>
-    <string name="view_entire_message" msgid="823281796655014454">"முழுத் தகவலையும் காட்டு"</string>
-    <string name="eml_loader_error_toast" msgid="6577383216635400167">"இந்தக் கோப்பைத் திறக்க முடியவில்லை"</string>
-    <string name="help_and_info" msgid="3708286489943154681">"உதவி"</string>
-    <string name="help_and_feedback" msgid="7211458338163287670">"உதவி &amp; கருத்துத் தெரிவி"</string>
-    <string name="feedback" msgid="204247008751740034">"கருத்தை அனுப்பு"</string>
-    <string name="copyright" msgid="3121335168340432582">"©<xliff:g id="YEAR">%1$d</xliff:g> Google Inc."</string>
-    <string name="version" msgid="1161745345056656547">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="VERSION">%2$s</xliff:g> பதிப்பு"</string>
-    <string name="view_app_page" msgid="3241990517052398927"></string>
-    <string name="print_dialog" msgid="8895536548487605661">"அச்சிடு..."</string>
-    <string name="copyright_information" msgid="971422874488783312">"பதிப்புரிமை தகவல்"</string>
-    <string name="privacy_policy" msgid="212094623396418302">"தனியுரிமைக் கொள்கை"</string>
-    <string name="open_source_licenses" msgid="8643615555920977752">"ஓப்பன் சோர்ஸ் உரிமங்கள்"</string>
-    <string name="reply_choice_yes" msgid="3327633032975373220">"ஆம்"</string>
-    <string name="reply_choice_no" msgid="7068775605915475207">"இல்லை"</string>
-    <string name="reply_choice_ok" msgid="7881073621845053152">"சரி"</string>
-    <string name="reply_choice_hehe" msgid="6054314968043050748">"ஹிஹி"</string>
-    <string name="reply_choice_thanks" msgid="4978961954288364694">"நன்றி"</string>
-    <string name="reply_choice_i_agree" msgid="2496652737796884298">"ஆம்"</string>
-    <string name="reply_choice_nice" msgid="4465894941302838676">"அருமை"</string>
-    <string name="reply_on_my_way" msgid="5645003971107444269">"வந்துகொண்டிருக்கிறேன்"</string>
-    <string name="reply_choice_later" msgid="4629219072859486413">"சரி, பின்னர் தெரிவிக்கிறேன்"</string>
-    <string name="reply_choice_smiling_face" msgid="1772253938506548631">":)"</string>
-    <string name="reply_choice_frowning_face" msgid="6260338807944002651">":("</string>
-    <string name="preference_header_action_confirmations" msgid="3922674681156121948">"செயலுக்கான உறுதிப்படுத்தல்கள்"</string>
-    <string name="preference_confirm_before_delete_title" msgid="7563587174619033835">"நீக்கும் முன் உறுதிசெய்"</string>
-    <string name="preference_confirm_before_archive_title" msgid="7318645995655875718">"காப்பகப்படுத்தும் முன் உறுதிசெய்"</string>
-    <string name="preference_confirm_before_send_title" msgid="4136585783513077039">"அனுப்பும் முன் உறுதிசெய்"</string>
-    <string name="preferences_conversation_mode_title" msgid="389352009651720838">"செய்திகளைத் தானாகப் பொருத்து"</string>
-    <string name="preferences_conversation_mode_summary" msgid="5730999743867653106">"திரைக்குப் பொருந்துமாறு செய்திகளைச் சுருக்கு"</string>
-    <string name="preferences_disable_snap_headers_title" msgid="7257824136988429629">"செய்தியின் செயல்கள்"</string>
-  <string-array name="prefSummaries_snapHeader">
-    <item msgid="43373293784193461">"எப்போதும் திரையின் மேல் பகுதியில் செய்தியின் செயல்களைக் காட்டு"</item>
-    <item msgid="1765271305989996747">"நீளவாக்கிற்கு சுழற்றும் போது, திரையில் மேல்பகுதியில் மட்டும் செய்தியின் செயல்களைக் காட்டு"</item>
-    <item msgid="6311113076575333488">"செய்தியின் தலைப்பிற்கு வெளியே செய்தியின் செயல்களைக் காட்டாதே"</item>
-  </string-array>
-  <string-array name="prefEntries_snapHeader">
-    <item msgid="6906986566816683587">"எப்போதும் காட்டு"</item>
-    <item msgid="113299655708990672">"நீளவாக்கில் மட்டும் காட்டு"</item>
-    <item msgid="4403750311175924065">"காட்டாதே"</item>
-  </string-array>
-    <string name="clear_history_title" msgid="5536216295725760357">"தேடல் வரலாற்றை அழி"</string>
-    <string name="search_history_cleared" msgid="1461946302763342640">"தேடல் வரலாறு அழிக்கப்பட்டது."</string>
-    <string name="clear_history_dialog_title" msgid="3503603389704365385">"தேடல் வரலாற்றை அழிக்கவா?"</string>
-    <string name="clear_history_dialog_message" msgid="5202922561632407778">"உங்களின் முந்தைய தேடல்கள் எல்லாம் அகற்றப்படும்."</string>
-    <string name="manage_accounts_menu_item" msgid="4734660452395086786">"கணக்குகளை நிர்வகி"</string>
-    <string name="general_preferences_title" msgid="4212138728220418162">"பொது அமைப்புகள்"</string>
-    <string name="activity_preferences" msgid="8966077432517613292">"அமைப்புகள்"</string>
-</resources>
diff --git a/res/values-te-rIN-sw600dp/strings.xml b/res/values-te-rIN-sw600dp/strings.xml
deleted file mode 100644
index 10f7f47..0000000
--- a/res/values-te-rIN-sw600dp/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-     Copyright (C) 2012 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Cc/Bcc"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Bcc"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"ఫోల్డర్‌లను నిర్వహించు"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"సందేశ నోటిఫికేషన్‌లకు ప్రత్యుత్తరాలను పంపడం కోసం డిఫాల్ట్‌గా ఉపయోగించు"</string>
-</resources>
diff --git a/res/values-te-rIN/strings.xml b/res/values-te-rIN/strings.xml
deleted file mode 100644
index ed7e5f1..0000000
--- a/res/values-te-rIN/strings.xml
+++ /dev/null
@@ -1,483 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-     Copyright (C) 2011 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="from" msgid="5159056500059912358">"వీరి నుండి"</string>
-    <string name="to" msgid="3971614275716830581">"వీరికి"</string>
-    <string name="cc" msgid="8768828862207919684">"Cc"</string>
-    <string name="bcc" msgid="519303553518479171">"Bcc"</string>
-    <string name="subject_hint" msgid="2136470287303571827">"విషయం"</string>
-    <string name="body_hint" msgid="6478994981747057817">"ఇమెయిల్‌ను కంపోజ్ చేయండి"</string>
-    <string name="add_file_attachment" msgid="2604880054248593993">"ఫైల్‌ను జోడించు"</string>
-    <string name="add_photo_attachment" msgid="7163589794940909528">"చిత్రాన్ని జోడించు"</string>
-    <string name="save_draft" msgid="2669523480789672118">"చిత్తుప్రతిని సేవ్ చేయి"</string>
-    <string name="discard" msgid="4905982179911608430">"విస్మరించు"</string>
-    <string name="compose" msgid="2602861958391035523">"కంపోజ్ చేయండి"</string>
-  <string-array name="compose_modes">
-    <item msgid="9000553538766397816">"ప్రత్యుత్తరం పంపండి"</item>
-    <item msgid="2767793214788399009">"అందరికీ ప్రత్యు."</item>
-    <item msgid="2758162027982270607">"ఫార్వార్డ్ చేయి"</item>
-  </string-array>
-    <string name="reply_attribution" msgid="1114972798797833259">"<xliff:g id="DATE">%s</xliff:g>న, <xliff:g id="PERSON">%s</xliff:g> వ్రాసినది:"</string>
-    <string name="forward_attribution" msgid="597850048345475752">"---------- ఫార్వార్డ్ చేసిన సందేశం ----------&lt;br&gt;వీరి నుండి: <xliff:g id="FROM">%1$s</xliff:g>&lt;br&gt;తేదీ: <xliff:g id="DATE">%2$s</xliff:g>&lt;br&gt;విషయం: <xliff:g id="SUBJECT">%3$s</xliff:g>&lt;br&gt;వీరికి: <xliff:g id="TO">%4$s</xliff:g>&lt;br&gt;"</string>
-    <string name="forward_attribution_no_headers" msgid="1828826576779486239">"---------- ఫార్వార్డ్ చేసిన సందేశం ----------"</string>
-    <string name="cc_attribution" msgid="2928584226469388899">"Cc: <xliff:g id="CC">%1$s</xliff:g>&lt;br&gt;"</string>
-    <string name="select_attachment_type" msgid="353236686616663062">"జోడింపు రకాన్ని ఎంచుకోండి"</string>
-    <string name="too_large_to_attach_single" msgid="2669897137966512530">"<xliff:g id="MAXSIZE">%1$s</xliff:g> కంటే ఎక్కువ పరిమాణం గల ఫైల్‌ను జోడించడం సాధ్యపడదు."</string>
-    <string name="too_large_to_attach_multiple" msgid="1620163295709036343">"ఒకటి లేదా అంతకంటే ఎక్కువ ఫైల్‌లు జోడించబడలేదు. పరిమితి <xliff:g id="MAXSIZE">%1$s</xliff:g>."</string>
-    <string name="too_large_to_attach_additional" msgid="4964155563465970480">"ఫైల్ జోడించబడలేదు. <xliff:g id="MAXSIZE">%1$s</xliff:g> పరిమితి చేరుకుంది."</string>
-    <string name="generic_attachment_problem" msgid="4683974765387240723">"ఫైల్‌ను జోడించడం సాధ్యపడలేదు."</string>
-    <string name="recipient_needed" msgid="319816879398937214">"కనీసం ఒక స్వీకర్తను జోడించండి."</string>
-    <string name="recipient_error_dialog_title" msgid="760741480291963706">"స్వీకర్త లోపం"</string>
-    <string name="confirm_send_title" msgid="4664971589247101530">"సందేశం పంపాలా?"</string>
-    <string name="confirm_send_message_with_no_subject" msgid="1442628074022609987">"సందేశ విషయంలో వచనం ఏదీ లేదు."</string>
-    <string name="confirm_send_message_with_no_body" msgid="3329355318700201516">"సందేశ విషయంలో వచనం ఏదీ లేదు."</string>
-    <string name="confirm_send_message" msgid="6211518590166222735">"ఈ సందేశం పంపాలా?"</string>
-    <string name="message_discarded" msgid="6792661321962262024">"సందేశం విస్మరించబడింది."</string>
-    <string name="signature" msgid="3172144541947408374">\n\n"<xliff:g id="SIGNATURE">%s</xliff:g>"</string>
-    <string name="custom_from_account_label" msgid="5042317430007736322">"మెయిల్‌ను ఇలా పంపండి:"</string>
-    <string name="send" msgid="4269810089682120826">"పంపు"</string>
-    <string name="mark_read" msgid="579388143288052493">"చదివినదిగా గుర్తు పెట్టు"</string>
-    <string name="mark_unread" msgid="6245060538061533191">"చదవనిదిగా గుర్తు పెట్టు"</string>
-    <string name="mute" msgid="9164839998562321569">"మ్యూట్ చేయి"</string>
-    <string name="add_star" msgid="3275117671153616270">"నక్షత్రాన్ని జోడించు"</string>
-    <string name="remove_star" msgid="9126690774161840733">"నక్షత్రం గుర్తు తీసివేయి"</string>
-    <string name="remove_folder" msgid="2379905457788576297">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> నుండి తీసివేయండి"</string>
-    <string name="archive" msgid="5978663590021719939">"ఆర్కైవ్ చేయి"</string>
-    <string name="report_spam" msgid="4106897677959987340">"స్పామ్‌ను నివేదించు"</string>
-    <string name="mark_not_spam" msgid="8617774236231366651">"స్పామ్ కానిదిగా గుర్తు పెట్టు"</string>
-    <string name="report_phishing" msgid="8454666464488413739">"ఫిషింగ్‌ను నివేదించు"</string>
-    <string name="delete" msgid="6784262386780496958">"తొలగించు"</string>
-    <string name="discard_drafts" msgid="5881484193628472105">"చిత్తుప్రతులను విస్మరించు"</string>
-    <string name="discard_failed" msgid="7520780769812210279">"తీసివేత విఫలమైంది"</string>
-    <string name="refresh" msgid="1533748989749277511">"రిఫ్రెష్ చేయి"</string>
-    <string name="reply" msgid="8337757482824207118">"ప్రత్యుత్తరం పంపు"</string>
-    <string name="reply_all" msgid="5366796103758360957">"అందరికీ ప్రత్యుత్తరం పంపు"</string>
-    <string name="resume_draft" msgid="1272723181782570649">"సవరించు"</string>
-    <string name="forward" msgid="4397585145490426320">"ఫార్వార్డ్ చేయి"</string>
-    <string name="menu_compose" msgid="4575025207594709432">"కంపోజ్ చేయి"</string>
-    <string name="menu_change_folders" msgid="2194946192901276625">"ఫోల్డర్‌లను మార్చు"</string>
-    <string name="menu_move_to" msgid="7948877550284452830">"దీనికి తరలించు"</string>
-    <string name="menu_move_to_inbox" msgid="258554178236001444">"ఇన్‌‌బాక్స్‌కు తరలించు"</string>
-    <string name="menu_manage_folders" msgid="8486398523679534519">"ఫోల్డర్ సెట్టింగ్‌లు"</string>
-    <string name="menu_show_original" msgid="2330398228979616661">"స్వీయ-పరిమాణాన్ని తిరిగి మార్చు"</string>
-    <string name="menu_settings" msgid="7993485401501778040">"సెట్టింగ్‌లు"</string>
-    <string name="menu_search" msgid="1949652467806052768">"శోధించు"</string>
-    <string name="drawer_title" msgid="3766219846644975778">"నావిగేషన్"</string>
-    <string name="mark_important" msgid="8781680450177768820">"ముఖ్యమైనదిగా గుర్తు పెట్టు"</string>
-    <string name="mark_not_important" msgid="3342258155408116917">"ముఖ్యం కానిదిగా గుర్తు పెట్టు"</string>
-    <string name="add_cc_label" msgid="2249679001141195213">"Cc/Bccని జోడించు"</string>
-    <string name="add_bcc_label" msgid="963745641238037813">"Bccని జోడించు"</string>
-    <string name="quoted_text" msgid="977782904293216533">"కోట్ చేసిన వచనాన్ని చేర్చండి"</string>
-    <string name="quoted_text_label" msgid="2296807722849923934">"వచనాన్ని కోట్ చేయండి"</string>
-    <string name="respond_inline" msgid="6609746292081928078">"ఇన్‌లైన్‌లో ప్రతిస్పందించు"</string>
-    <string name="bytes" msgid="651011686747499628">"<xliff:g id="COUNT">%s</xliff:g> B"</string>
-    <string name="kilobytes" msgid="1523463964465770347">"<xliff:g id="COUNT">%s</xliff:g> KB"</string>
-    <string name="megabytes" msgid="4309397368708773323">"<xliff:g id="COUNT">%s</xliff:g> MB"</string>
-    <string name="attachment_image" msgid="6375306026208274564">"చిత్రం"</string>
-    <string name="attachment_video" msgid="7119476472603939848">"వీడియో"</string>
-    <string name="attachment_audio" msgid="7097658089301809284">"ఆడియో"</string>
-    <string name="attachment_text" msgid="3485853714965922173">"వచనం"</string>
-    <string name="attachment_application_msword" msgid="2110108876623152162">"పత్రం"</string>
-    <string name="attachment_application_vnd_ms_powerpoint" msgid="425353008963359230">"ప్రెజెంటేషన్"</string>
-    <string name="attachment_application_vnd_ms_excel" msgid="5585781311136609103">"స్ప్రెడ్‌షీట్"</string>
-    <string name="attachment_application_pdf" msgid="4207340200944655970">"PDF"</string>
-    <string name="attachment_unknown" msgid="3360536730101083926">"<xliff:g id="ATTACHMENTEXTENSION">%s</xliff:g> ఫైల్"</string>
-    <string name="preview_attachment" msgid="6265457626086113833">"పరిదృశ్యం"</string>
-    <string name="save_attachment" msgid="375685179032130033">"సేవ్ చేయి"</string>
-    <string name="cancel_attachment" msgid="6900093625792891122">"రద్దు చేయి"</string>
-    <string name="open_attachment" msgid="6100396056314739761">"తెరువు"</string>
-    <string name="install_attachment" msgid="8119470822958087928">"ఇన్‌స్టాల్ చేయి"</string>
-    <string name="download_again" msgid="8195787340878328119">"మళ్లీ డౌన్‌లోడ్ చేయి"</string>
-    <string name="more_info_attachment" msgid="2899691682394864507">"సమాచారం"</string>
-    <string name="no_application_found" msgid="7309485680354949680">"ఈ జోడింపును వీక్షించడం కోసం తెరవగల అనువర్తనం ఏదీ లేదు."</string>
-    <string name="fetching_attachment" msgid="2286628490159574159">"జోడింపును పొందుతోంది"</string>
-    <string name="please_wait" msgid="3953824147776128899">"దయచేసి వేచి ఉండండి…"</string>
-    <string name="saved" msgid="161536102236967534">"సేవ్ చేయబడినది, <xliff:g id="SIZE">%s</xliff:g>"</string>
-    <string name="download_failed" msgid="3878373998269062395">"డౌన్‌లోడ్ చేయడం సాధ్యపడలేదు. మళ్లీ ప్రయత్నించడానికి తాకండి."</string>
-    <string name="menu_photo_save_all" msgid="2742869476474613396">"అన్నీ సేవ్ చేయి"</string>
-    <string name="menu_photo_share" msgid="6410980274832639330">"భాగస్వామ్యం చేయి"</string>
-    <string name="menu_photo_share_all" msgid="3049053252719665320">"అన్నీ భాగస్వామ్యం చేయి"</string>
-    <string name="menu_photo_print" msgid="3084679038179342333">"ముద్రించు"</string>
-    <string name="saving" msgid="6274238733828387433">"సేవ్ చేస్తోంది…"</string>
-    <string name="choosertitle_sharevia" msgid="3539537264873337959">"వీటి ద్వారా భాగస్వామ్యం చేయండి"</string>
-    <string name="contextmenu_openlink" msgid="6952228183947135362">"బ్రౌజర్‌లో తెరువు"</string>
-    <string name="contextmenu_copy" msgid="2584243784216385180">"కాపీ చేయి"</string>
-    <string name="contextmenu_copylink" msgid="8659897702269320063">"లింక్ URLని కాపీ చేయి"</string>
-    <string name="contextmenu_view_image" msgid="1031172763893491000">"చిత్రాన్ని వీక్షించండి"</string>
-    <string name="contextmenu_dial_dot" msgid="8881095692316726628">"డయల్ చేయి…"</string>
-    <string name="contextmenu_sms_dot" msgid="5319737001771622657">"SMS…"</string>
-    <string name="contextmenu_add_contact" msgid="2310064151427072475">"పరిచయాన్ని జోడించు"</string>
-    <string name="contextmenu_send_mail" msgid="3834654593200105396">"ఇమెయిల్ పంపు"</string>
-    <string name="contextmenu_map" msgid="5118951927399465521">"మ్యాప్‌"</string>
-    <string name="contextmenu_sharelink" msgid="8670940060477758709">"లింక్‌ను భాగస్వామ్యం చేయి"</string>
-    <string name="contextmenu_help" msgid="4209674157707873384">"సహాయం"</string>
-    <string name="contextmenu_feedback" msgid="8319100902136337085">"అభిప్రాయం పంపండి"</string>
-    <!-- no translation found for num_selected (7990204488812654380) -->
-    <skip />
-  <plurals name="move_conversation">
-    <item quantity="one" msgid="237882018518207244">"సంభాషణను తరలించండి"</item>
-    <item quantity="other" msgid="6639576653114141743">"<xliff:g id="ID_1">%1$d</xliff:g> సంభాషణలను తరలించండి"</item>
-  </plurals>
-    <string name="content_description" msgid="854320355052962069">"<xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g> <xliff:g id="SUBJECT">%3$s</xliff:g> గురించి, <xliff:g id="SNIPPET">%4$s</xliff:g> <xliff:g id="DATE">%5$s</xliff:g>న, <xliff:g id="READSTATE">%6$s</xliff:g>"</string>
-    <string name="content_description_today" msgid="1634422834354116955">"<xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g> <xliff:g id="SUBJECT">%3$s</xliff:g> గురించి, <xliff:g id="SNIPPET">%4$s</xliff:g> <xliff:g id="TIME">%5$s</xliff:g>కి, <xliff:g id="READSTATE">%6$s</xliff:g>"</string>
-    <string name="read_string" msgid="5495929677508576520">"సంభాషణ చదవబడింది"</string>
-    <string name="unread_string" msgid="7342558841698083381">"సంభాషణను చదవలేదు"</string>
-    <string name="filtered_tag" msgid="721666921386074505">"[<xliff:g id="TAG">%1$s</xliff:g>]<xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="badge_and_subject" msgid="3979372269373936750">"<xliff:g id="ID_1">%1$s</xliff:g> <xliff:g id="ID_2">%2$s</xliff:g>"</string>
-  <plurals name="draft">
-    <item quantity="one" msgid="6717535677167943402">"చిత్తుప్రతి"</item>
-    <item quantity="other" msgid="1335781147509740039">"చిత్తుప్రతులు"</item>
-  </plurals>
-    <string name="sending" msgid="5600034886763930499">"పంపుతోంది…"</string>
-    <string name="message_retrying" msgid="5335188121407261331">"మళ్లీ ప్రయత్నిస్తోంది..."</string>
-    <string name="message_failed" msgid="7887650587384601790">"విఫలమైంది"</string>
-    <string name="send_failed" msgid="2186285547449865010">"సందేశం పంపబడలేదు."</string>
-    <string name="me_object_pronoun" msgid="4674452244417913816">"నాకు"</string>
-    <string name="me_subject_pronoun" msgid="7479328865714008288">"నేను"</string>
-  <plurals name="confirm_delete_conversation">
-    <item quantity="one" msgid="7605755011865575440">"ఈ సంభాషణను తొలగించాలా?"</item>
-    <item quantity="other" msgid="1585660381208712562">"ఈ <xliff:g id="COUNT">%1$d</xliff:g> సంభాషణలను తొలగించాలా?"</item>
-  </plurals>
-  <plurals name="confirm_archive_conversation">
-    <item quantity="one" msgid="9105551557653306945">"ఈ సంభాషణను ఆర్కైవ్ చేయాలా?"</item>
-    <item quantity="other" msgid="2001972798185641108">"ఈ <xliff:g id="COUNT">%1$d</xliff:g> సంభాషణలను ఆర్కైవ్ చేయాలా?"</item>
-  </plurals>
-  <plurals name="confirm_discard_drafts_conversation">
-    <item quantity="one" msgid="2030421499893210789">"ఈ సందేశాన్ని విస్మరించాలా?"</item>
-    <item quantity="other" msgid="782234447471532005">"ఈ <xliff:g id="COUNT">%1$d</xliff:g> సందేశాలను విస్మరించాలా?"</item>
-  </plurals>
-    <string name="confirm_discard_text" msgid="5172680524418848519">"ఈ సందేశాన్ని విస్మరించాలా?"</string>
-    <string name="loading_conversations" msgid="7255732786298655246">"లోడ్ చేస్తోంది…"</string>
-    <string name="empty_inbox" msgid="5901734942362315228">"మీరు అంతా పూర్తి చేసారు! దయచేసి మీ రోజుని ఆనందించండి."</string>
-    <string name="empty_search" msgid="8564899353449880818">"అయ్యో! మేము \"<xliff:g id="SEARCH_QUERY">%1$s</xliff:g>\" కోసం దేన్నీ కనుగొనలేకపోయాము."</string>
-    <string name="empty_spam_folder" msgid="3288985543286122800">"హుర్రే, ఇక్కడ స్పామ్ లేదు!"</string>
-    <string name="empty_trash_folder" msgid="378119063015945020">"ఇక్కడ ట్రాష్ లేదు. పునర్వినియోగించినందుకు ధన్యవాదాలు!"</string>
-    <string name="empty_folder" msgid="3227552635613553855">"ఇక్కడ మెయిల్ ఏదీ లేదు."</string>
-    <string name="getting_messages" msgid="8403333791332403244">"మీ సందేశాలను పొందుతోంది"</string>
-    <string name="undo" msgid="8256285267701059609">"చర్యరద్దు చేయి"</string>
-  <plurals name="conversation_unstarred">
-    <item quantity="one" msgid="839233699150563831">"<xliff:g id="COUNT">%1$d</xliff:g> సంభాషణకు నక్షత్రం గుర్తు తీసివేస్తోంది."</item>
-    <item quantity="other" msgid="7677305734833709789">"<xliff:g id="COUNT">%1$d</xliff:g> సంభాషణలకు నక్షత్రం గుర్తు తీసివేస్తోంది."</item>
-  </plurals>
-  <plurals name="conversation_muted">
-    <item quantity="one" msgid="3339638225564408438">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; మ్యూట్ చేయబడింది."</item>
-    <item quantity="other" msgid="4276111931404654219">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; మ్యూట్ చేయబడ్డాయి."</item>
-  </plurals>
-  <plurals name="conversation_spammed">
-    <item quantity="one" msgid="6986172030710967687">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; స్పామ్ వలె నివేదించబడింది."</item>
-    <item quantity="other" msgid="5900913789259199137">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; స్పామ్ అని నివేదించబడ్డాయి."</item>
-  </plurals>
-  <plurals name="conversation_not_spam">
-    <item quantity="one" msgid="2294904093653094150">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; స్పామ్ కాదని నివేదించబడింది."</item>
-    <item quantity="other" msgid="4966164423991098144">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; స్పామ్ కావని నివేదించబడ్డాయి."</item>
-  </plurals>
-  <plurals name="conversation_not_important">
-    <item quantity="one" msgid="3824809189993339030">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ముఖ్యం కానిదిగా గుర్తు పెట్టబడింది."</item>
-    <item quantity="other" msgid="1215472798075869124">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ముఖ్యం కానిదిగా గుర్తు పెట్టబడింది."</item>
-  </plurals>
-  <plurals name="conversation_phished">
-    <item quantity="one" msgid="4330095881258771201">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ఫిషింగ్ అని నివేదించబడింది."</item>
-    <item quantity="other" msgid="9218674052779504277">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ఫిషింగ్ అని నివేదించబడ్డాయి."</item>
-  </plurals>
-  <plurals name="conversation_archived">
-    <item quantity="one" msgid="4127890884907503696">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ఆర్కైవ్ చేయబడింది."</item>
-    <item quantity="other" msgid="7789480176789922968">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ఆర్కైవ్ చేయబడ్డాయి."</item>
-  </plurals>
-  <plurals name="conversation_deleted">
-    <item quantity="one" msgid="5591889079235938982">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; తొలగించబడింది."</item>
-    <item quantity="other" msgid="7060256058737892078">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; తొలగించబడ్డాయి."</item>
-  </plurals>
-    <string name="deleted" msgid="7378013910782008375">"తొలగించబడింది"</string>
-    <string name="archived" msgid="6283673603512713022">"ఆర్కైవ్ చేయబడింది"</string>
-    <string name="folder_removed" msgid="5656281444688183676">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> నుండి తీసివేయబడింది"</string>
-  <plurals name="conversation_folder_changed">
-    <item quantity="one" msgid="6463727361987396734">"ఫోల్డర్ మార్చబడింది."</item>
-    <item quantity="other" msgid="8815390494333090939">"ఫోల్డర్‌లు మార్చబడ్డాయి."</item>
-  </plurals>
-    <string name="conversation_folder_moved" msgid="6475872337373081683">"<xliff:g id="FOLDERNAME">%1$s</xliff:g>కి తరలించబడింది"</string>
-    <string name="search_results_header" msgid="1529438451150580188">"ఫలితాలు"</string>
-    <string name="search_unsupported" msgid="2873920566477359177">"ఈ ఖాతాలో శోధనకు మద్దతు లేదు."</string>
-    <string name="add_label" msgid="3285338046038610902">"ఫోల్డర్‌ను జోడించండి"</string>
-    <string name="new_incoming_messages_one" msgid="5933087567495998661">"<xliff:g id="SENDER">%s</xliff:g> నుండి కొత్త సందేశాన్ని చూపు."</string>
-  <plurals name="new_incoming_messages_many">
-    <item quantity="other" msgid="4394042684501388790">"<xliff:g id="COUNT">%1$d</xliff:g> కొత్త సందేశాలను చూపు."</item>
-  </plurals>
-    <string name="date_and_view_details" msgid="2952994746916149969">"<xliff:g id="DATE">%1$s</xliff:g> &lt;a href=\'http://www.example.com\'&gt;వివరాలు వీక్షించండి&lt;/a&gt;"</string>
-    <string name="hide_details" msgid="8018801050702453314">"వివరాలను దాచు"</string>
-    <string name="to_message_header" msgid="3954385178027011919">"<xliff:g id="RECIPIENTS">%1$s</xliff:g>కి"</string>
-    <string name="contact_info_string" msgid="6484930184867405276">"<xliff:g id="NAME">%1$s</xliff:g> యొక్క సంప్రదింపు సమాచారాన్ని చూపు"</string>
-    <string name="contact_info_string_default" msgid="6204228921864816351">"సంప్రదింపు సమాచారాన్ని చూపు"</string>
-  <plurals name="show_messages_read">
-    <item quantity="other" msgid="5285673397387128129">"<xliff:g id="COUNT">%1$d</xliff:g> పాత సందేశాలు"</item>
-  </plurals>
-    <string name="from_heading" msgid="48290556829713090">"వీరి నుండి:"</string>
-    <string name="replyto_heading" msgid="8275255318292059079">"వీరికి ప్రత్యుత్తరం:"</string>
-    <string name="to_heading" msgid="3495203282540398336">"వీరికి: "</string>
-    <string name="to_heading_no_space" msgid="679167047628308670">"స్వీకర్త:"</string>
-    <string name="cc_heading" msgid="5603892257866345823">"Cc:"</string>
-    <string name="bcc_heading" msgid="1482186590756218269">"Bcc:"</string>
-    <string name="date_heading" msgid="4213063948406397168">"తేదీ:"</string>
-    <string name="show_images" msgid="436044894053204084">"చిత్రాలను చూపండి"</string>
-    <string name="always_show_images" msgid="556087529413707819">"ఈ పంపినవారి నుండి వచ్చే చిత్రాలను ఎల్లప్పుడూ చూపు"</string>
-    <string name="always_show_images_toast" msgid="3763157294047555051">"ఈ పంపినవారి నుండి వచ్చే చిత్రాలు స్వయంచాలకంగా చూపబడతాయి."</string>
-    <string name="address_display_format" msgid="2098008376913966177">"<xliff:g id="NAME">%1$s</xliff:g> <xliff:g id="EMAIL">%2$s</xliff:g>"</string>
-    <string name="address_display_format_with_via_domain" msgid="8108294635074750048">"<xliff:g id="VIA_DOMAIN">%3$s</xliff:g> ద్వారా <xliff:g id="NAME">%1$s</xliff:g> <xliff:g id="EMAIL">%2$s</xliff:g>"</string>
-    <string name="message_saved" msgid="3291655042310241793">"సందేశం చిత్తుప్రతిగా సేవ్ చేయబడింది."</string>
-    <string name="sending_message" msgid="2487846954946637084">"సందేశం పంపబడుతోంది…"</string>
-    <string name="invalid_recipient" msgid="9157434699389936584">"<xliff:g id="WRONGEMAIL">%s</xliff:g> చిరునామా చెల్లదు."</string>
-    <string name="show_elided" msgid="3456154624105704327">"కోట్ చేసిన వచనాన్ని చూపు"</string>
-    <string name="hide_elided" msgid="5768235486834692733">"▼ పేర్కొన్న వచనాన్ని దాచు"</string>
-    <string name="message_invite_title" msgid="5985161025144867256">"క్యాలెండర్ ఆహ్వానం"</string>
-    <string name="message_invite_calendar_view" msgid="9181966650840809197">"క్యాలెండర్‌లో వీక్షించండి"</string>
-    <string name="message_invite_label_attending" msgid="4194264767870003397">"హాజరవుతున్నారా?"</string>
-    <string name="message_invite_accept" msgid="8002758842580134835">"హాజరవుతున్నాను"</string>
-    <string name="message_invite_tentative" msgid="3199418731566655887">"హాజరు కావచ్చు"</string>
-    <string name="message_invite_decline" msgid="6331040872447290777">"వద్దు"</string>
-    <string name="enumeration_comma" msgid="2848850136844740850">", "</string>
-    <string name="send_anyway" msgid="2727576121007079643">"ఏదేమైనా పంపు"</string>
-    <string name="ok" msgid="6178802457914802336">"సరే"</string>
-    <string name="done" msgid="344354738335270292">"పూర్తయింది"</string>
-    <string name="cancel" msgid="4831678293149626190">"రద్దు చేయి"</string>
-    <string name="clear" msgid="765949970989448022">"క్లియర్ చేయి"</string>
-    <string name="next" msgid="2662478712866255138">"తదుపరి"</string>
-    <string name="previous" msgid="8985379053279804274">"మునుపటి"</string>
-  <string-array name="sync_status">
-    <item msgid="4600303222943450797">"విజయవంతం"</item>
-    <item msgid="2972425114100316260">"కనెక్షన్ లేదు."</item>
-    <item msgid="8594593386776437871">"సైన్ ఇన్ చేయడం సాధ్యపడలేదు."</item>
-    <item msgid="1375193906551623606">"భద్రతా లోపం."</item>
-    <item msgid="195177374927979967">"సమకాలీకరణ సాధ్యపడలేదు."</item>
-    <item msgid="8026148967150231130">"అంతర్గత లోపం"</item>
-    <item msgid="5442620760791553027">"సర్వర్ లోపం"</item>
-  </string-array>
-    <string name="tap_to_configure" msgid="137172348280050643">"సెటప్ చేయడానికి తాకండి"</string>
-    <string name="non_synced_folder_description" msgid="3044618511909304701">"సంభాషణలను వీక్షించడానికి, ఈ ఫోల్డర్‌ను సమకాలీకరించండి."</string>
-    <string name="tap_to_configure_folder_sync" msgid="3280434399275638071">"ఫోల్డర్‌ను సమకాలీకరించు"</string>
-    <string name="widget_large_unread_count" msgid="8699435859096455837">"%d+"</string>
-    <string name="large_unseen_count" msgid="3055042669246912518">"<xliff:g id="COUNT">%d</xliff:g>+ కొత్తవి"</string>
-    <string name="unseen_count" msgid="5509898665569695288">"<xliff:g id="COUNT">%d</xliff:g> కొత్తవి"</string>
-  <plurals name="actionbar_unread_messages">
-    <item quantity="other" msgid="3863201473731766006">"<xliff:g id="COUNT">%1$d</xliff:g> చదవనివి"</item>
-  </plurals>
-    <string name="actionbar_large_unread_count" msgid="753635978542372792">"<xliff:g id="COUNT">%1$d</xliff:g>+ చదవనివి"</string>
-    <string name="view_more_conversations" msgid="8377920000247101901">"మరిన్ని సంభాషణలను వీక్షించండి"</string>
-    <string name="loading_conversation" msgid="7931600025861500397">"లోడ్ చేస్తోంది…"</string>
-    <string name="activity_mailbox_selection" msgid="7489813868539767701">"ఖాతాను ఎంచుకోండి"</string>
-    <string name="activity_folder_selection" msgid="8375243281001234750">"ఫోల్డర్‌ను ఎంచుకోండి"</string>
-    <string name="folder_shortcut_widget_label" msgid="6466292659577092915">"ఇమెయిల్ ఫోల్డర్"</string>
-    <string name="change_folders_selection_dialog_title" msgid="9174464298613273814">"ఫోల్డర్‌లను మార్చండి"</string>
-    <string name="move_to_selection_dialog_title" msgid="4052506464467083621">"దీనికి తరలించండి"</string>
-    <string name="search_hint" msgid="4916671414132334289">"మెయిల్ శోధన"</string>
-    <!-- no translation found for search_results_loaded (1784879343458807514) -->
-    <skip />
-    <string name="network_error" msgid="5931164247644972255">"కనెక్షన్ లేదు"</string>
-    <string name="retry" msgid="916102442074217293">"మళ్లీ ప్రయత్నించు"</string>
-    <string name="load_more" msgid="8702691358453560575">"మరిన్ని లోడ్ చేయి"</string>
-    <!-- no translation found for load_attachment (3894318473827290350) -->
-    <skip />
-    <string name="shortcut_name_title" msgid="1562534040126088628">"ఫోల్డర్ సత్వరమార్గానికి పేరు పెట్టండి"</string>
-    <string name="wait_for_sync_title" msgid="4577632826912823075">"సమకాలీకరణ కోసం వేచి ఉంది"</string>
-    <string name="not_synced_title" msgid="3600180500934086346">"ఖాతా సమకాలీకరించబడలేదు"</string>
-    <string name="wait_for_manual_sync_body" msgid="2823149409451003378">"ఈ ఖాతా స్వయంచాలకంగా సమకాలీకరించడానికి సెటప్ చేయలేదు.\nమెయిల్‌ను ఒకసారి సమకాలీకరించడానికి "<b>"ఇప్పుడే సమకాలీకరించు"</b>" తాకండి లేదా మెయిల్ స్వయంచాలకంగా సమకాలీకరించబడేలా ఈ ఖాతాను సెటప్ చేయడానికి "<b>"సమకాలీకరణ సెట్టింగ్‌లను మార్చు"</b>" తాకండి."</string>
-    <string name="manual_sync" msgid="2271479734895537848">"ఇప్పుడే సమకాలీకరించు"</string>
-    <string name="change_sync_settings" msgid="3615852118397055361">"సమకాలీకరణ సెట్టింగ్‌లను మార్చండి"</string>
-    <string name="photo_load_failed" msgid="577471721679146999">"చిత్రాన్ని లోడ్ చేయడం సాధ్యపడలేదు"</string>
-    <string name="cant_move_or_change_labels" msgid="4155490583610926755">"ఎంపిక బహుళ ఖాతాలను కలిగి ఉన్నందున తరలింపు కుదరదు."</string>
-    <string name="multiple_new_message_notification_item" msgid="1386588046275174918"><b>"<xliff:g id="SENDER">%1$s</xliff:g>"</b>"   <xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="single_new_message_notification_big_text" msgid="2170154732664242904">"<xliff:g id="SUBJECT">%1$s</xliff:g>\n<xliff:g id="SNIPPET">%2$s</xliff:g>"</string>
-    <string name="ignore_spam_warning" msgid="8760314545535838430">"విస్మరించు, నేను ఈ సందేశాన్ని విశ్వసిస్తున్నాను"</string>
-    <string name="via_domain" msgid="537951148511529082">"<xliff:g id="VIADOMAIN">%1$s</xliff:g> ద్వారా"</string>
-    <string name="signin" msgid="4699091478139791244">"సైన్-ఇన్ చేయి"</string>
-    <string name="info" msgid="1357564480946178121">"సమాచారం"</string>
-    <string name="report" msgid="4318141326014579036">"నివేదించు"</string>
-    <string name="sync_error" msgid="1795794969006241678">"సమకాలీకరణ సాధ్యపడలేదు."</string>
-    <string name="sync_error_message" msgid="4182644657243736635">"మీ పరికరంలో సమకాలీకరించడానికి తగినంత నిల్వ స్థలం లేదు."</string>
-    <string name="storage" msgid="4783683938444150638">"నిల్వ"</string>
-    <string name="senders_split_token" msgid="6549228851819460081">", "</string>
-    <string name="draft_count_format" msgid="9122583199850209286">" (<xliff:g id="COUNT">%1$s</xliff:g>)"</string>
-    <string name="all_folders_heading" msgid="9023770187629170967">"అన్ని ఫోల్డర్‌లు"</string>
-    <string name="recent_folders_heading" msgid="8943134955788867702">"ఇటీవలి ఫోల్డర్‌లు"</string>
-    <string name="message_details_title" msgid="60771875776494764">"సందేశ వివరాలు"</string>
-    <string name="preference_advance_to_title" msgid="6385669491239514630">"స్వయంచాలక పురోగమనం"</string>
-  <string-array name="prefEntries_autoAdvance">
-    <item msgid="1505450878799459652">"కొత్తది"</item>
-    <item msgid="8000986144872247139">"పాతది"</item>
-    <item msgid="8015001161633421314">"సంభాషణ జాబితా"</item>
-  </string-array>
-  <string-array name="prefSummaries_autoAdvance">
-    <item msgid="8221665977497655719">"కొత్త సంభాషణ మీరు తొలగించిన తర్వాత చూపబడాలి"</item>
-    <item msgid="1721869262893378141">"పాత సంభాషణ మీరు తొలగించిన తర్వాత చూపబడాలి"</item>
-    <item msgid="880913657385630195">"సంభాషణ జాబితా మీరు తొలగించిన తర్వాత చూపబడాలి"</item>
-  </string-array>
-    <string name="prefDialogTitle_autoAdvance" msgid="5459235590885640678">"ఈ దిశలో ముందుకు వెళ్లు"</string>
-    <string name="clear_display_images_whitelist_title" msgid="2012677202404471778">"చిత్రం ఆమోదాలను క్లియర్ చేయి"</string>
-    <string name="clear_display_images_whitelist_dialog_title" msgid="1942692501166848471">"చిత్రం ఆమోదాలను క్లియర్ చేయాలా?"</string>
-    <string name="clear_display_images_whitelist_dialog_message" msgid="3952553078559373729">"మీరు మునుపు అనుమతించిన లేఖరుల నుండి ఇన్‌లైన్ చిత్రాలను ప్రదర్శించడం ఆపివేయండి."</string>
-    <string name="sender_whitelist_cleared" msgid="2490984995927904030">"చిత్రాలు స్వయంచాలకంగా చూపబడవు."</string>
-    <string name="preferences_signature_title" msgid="2318034745474929902">"సంతకం"</string>
-    <string name="preferences_signature_dialog_title" msgid="4801741764511807064">"సంతకం"</string>
-    <string name="preferences_signature_summary_not_set" msgid="3776614319388053784">"సెట్ చేయలేదు"</string>
-    <string name="notification_action_reply" msgid="8378725460102575919">"ప్రత్యుత్తరం పంపండి"</string>
-    <string name="notification_action_reply_all" msgid="5693469099941000037">"అందరికీ ప్రత్యుత్తరం పంపండి"</string>
-    <string name="notification_action_archive" msgid="2884874164831039047">"ఆర్కైవ్ చేయండి"</string>
-    <string name="notification_action_remove_label" msgid="3714785653186750981">"లేబుల్‌ను తీసివేయండి"</string>
-    <string name="notification_action_delete" msgid="3201627482564624132">"తొలగించండి"</string>
-    <string name="notification_action_undo_archive" msgid="600186958134073582">"ఆర్కైవ్ చేయబడింది"</string>
-    <string name="notification_action_undo_remove_label" msgid="8341924850540100690">"లేబుల్ తీసివేయబడింది"</string>
-    <string name="notification_action_undo_delete" msgid="6915612337413587103">"తొలగించబడింది"</string>
-    <string name="veiled_address" msgid="2670378260196977266"></string>
-    <string name="veiled_alternate_text" msgid="6343564357099807582"></string>
-    <string name="veiled_alternate_text_unknown_person" msgid="6728323554307952217"></string>
-    <string name="veiled_summary_unknown_person" msgid="2122359944161241551"></string>
-    <string name="label_notification_ticker" msgid="323232821061341014">"<xliff:g id="LABEL">%s</xliff:g>: <xliff:g id="NOTIFICATION">%s</xliff:g>"</string>
-  <plurals name="new_messages">
-    <item quantity="one" msgid="3446656407520493241">"<xliff:g id="COUNT">%1$d</xliff:g> కొత్త సందేశం"</item>
-    <item quantity="other" msgid="3531683811183204615">"<xliff:g id="COUNT">%1$d</xliff:g> కొత్త సందేశాలు"</item>
-  </plurals>
-    <string name="single_new_message_notification_title" msgid="7954710563222504868">"<xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="silent_ringtone" msgid="1570794756474381886">"నిశ్శబ్దం"</string>
-    <string name="preference_removal_action_title" msgid="4703834472477137634">"ఆర్కైవ్ &amp; తొలగింపు చర్యలు"</string>
-  <string-array name="prefEntries_removal_action">
-    <item msgid="954772302016538814">"ఆర్కైవ్‌ను మాత్రమే చూపు"</item>
-    <item msgid="7212690302706180254">"తొలగింపు మాత్రమే చూపు"</item>
-    <item msgid="2539051197590685708">"ఆర్కైవ్ &amp; తొలగింపు చూపు"</item>
-  </string-array>
-  <string-array name="prefSummaries_removal_action_summary">
-    <item msgid="6877416142040695022">"ఆర్కైవ్‌ను మాత్రమే చూపు"</item>
-    <item msgid="1510017057984222376">"తొలగింపు మాత్రమే చూపు"</item>
-    <item msgid="3196207224108008441">"ఆర్కైవ్ &amp; తొలగింపు చూపు"</item>
-  </string-array>
-    <string name="prefDialogTitle_removal_action" msgid="266548424110393246">"ఆర్కైవ్ &amp; తొలగింపు చర్యలు"</string>
-    <string name="preferences_default_reply_all_title" msgid="7255858488369635327">"అందరికీ ప్రత్యుత్తరం పంపండి"</string>
-    <string name="preferences_default_reply_all_summary_impl" msgid="895581085692979709">"సందేశ ప్రత్యుత్తరాల కోసం డిఫాల్ట్‌గా ఉపయోగించు"</string>
-    <string name="preference_swipe_title_archive" msgid="9122333537761282714">"ఆర్కైవ్ చేయడానికి స్వైప్ చేయండి"</string>
-    <string name="preference_swipe_title_delete" msgid="4860474024917543711">"తొలగించడానికి స్వైప్ చేయండి"</string>
-    <string name="preference_swipe_description" msgid="3036560323237015010">"సంభాషణ జాబితాలో"</string>
-    <string name="preference_sender_image_title" msgid="7890813537985591865">"పంపినవారి చిత్రం"</string>
-    <string name="preference_sender_image_description" msgid="3586817690132199889">"సంభాషణ జాబితాలో పేరుకి ప్రక్కన చూపు"</string>
-    <string name="empty_trash" msgid="3385937024924728399">"ట్రాష్‌ను ఖాళీ చేయి"</string>
-    <string name="empty_spam" msgid="2911988289997281371">"స్పామ్ ఖాళీగా ఉంది"</string>
-    <string name="empty_trash_dialog_title" msgid="2104898489663621508">"ట్రాష్‌ను ఖాళీ చేయాలా?"</string>
-    <string name="empty_spam_dialog_title" msgid="1130319045917820569">"స్పామ్‌ను ఖాళీ చేయాలా?"</string>
-  <plurals name="empty_folder_dialog_message">
-    <item quantity="one" msgid="3315412388217832914">"<xliff:g id="COUNT">%1$d</xliff:g> సందేశం శాశ్వతంగా తొలగించబడుతుంది."</item>
-    <item quantity="other" msgid="263840304486020101">"<xliff:g id="COUNT">%1$d</xliff:g> సందేశాలు శాశ్వతంగా తొలగించబడతాయి."</item>
-  </plurals>
-    <string name="drawer_open" msgid="2285557278907103851">"నావిగేషన్ డ్రాయర్‌ను తెరవండి"</string>
-    <string name="drawer_close" msgid="2065829742127544297">"నావిగేషన్ డ్రాయర్‌ను మూసివేయండి"</string>
-    <string name="conversation_photo_welcome_text" msgid="836483155429003787">"ఒక సంభాషణను ఎంచుకోవడానికి దాన్ని పంపినవారి చిత్రాన్ని తాకండి."</string>
-    <string name="long_press_to_select_tip" msgid="1660881999120625177">"ఒక సంభాషణను ఎంచుకోవడానికి దాన్ని తాకి, నొక్కి ఉంచండి, ఆపై మరిన్ని ఎంచుకోవడానికి తాకండి."</string>
-    <string name="folder_icon_desc" msgid="6272938864914794739">"ఫోల్డర్ చిహ్నం"</string>
-    <string name="add_account" msgid="5905863370226612377">"ఖాతాను జోడించు"</string>
-    <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"చిట్కాను తీసివేయి"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"స్వయం-సమకాలీకరణ ఆపివేయబడింది."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"ప్రారంభించడానికి తాకండి."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"ఖాతా సమకాలీకరణ ఆఫ్‌లో ఉంది."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"<xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>లో ప్రారంభించండి."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"ఖాతా సెట్టింగ్‌లు"</string>
-    <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="OUTBOX">%2$s</xliff:g>లో <xliff:g id="NUMBER">%1$s</xliff:g> పంపనివి ఉన్నాయి"</string>
-    <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"స్వయం-సమకాలీకరణను ప్రారంభించాలా?"</string>
-    <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"మీరు Gmail మాత్రమే కాకుండా అన్ని అనువర్తనాలకు మరియు ఖాతాలకు చేసే మార్పులు వెబ్, మీ ఇతర పరికరాలు మరియు మీ <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g> మధ్య సమకాలీకరించబడతాయి."</string>
-    <string name="phone" msgid="4142617042507912053">"ఫోన్"</string>
-    <string name="tablet" msgid="4593581125469224791">"టాబ్లెట్"</string>
-    <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="7239160845196929866">"ప్రారంభించు"</string>
-    <string name="show_n_more_folders" msgid="5769610839632786654">"మరో <xliff:g id="NUMBER">%1$s</xliff:g> ఫోల్డర్‌లను చూపు"</string>
-    <string name="hide_folders" msgid="7618891933409521283">"ఫోల్డర్‌లను దాచు"</string>
-    <string name="print" msgid="7987949243936577207">"ముద్రించు"</string>
-    <string name="print_all" msgid="4011022762279519941">"అన్నీ ముద్రించు"</string>
-  <plurals name="num_messages">
-    <item quantity="one" msgid="8071234386915191851">"<xliff:g id="COUNT">%1$d</xliff:g> సందేశం"</item>
-    <item quantity="other" msgid="962415099931188360">"<xliff:g id="COUNT">%1$d</xliff:g> సందేశాలు"</item>
-  </plurals>
-    <string name="date_message_received_print" msgid="4168417403884350040">"<xliff:g id="DAY_AND_DATE">%1$s</xliff:g>న <xliff:g id="TIME">%2$s</xliff:g>కి"</string>
-    <string name="draft_to_heading" msgid="7370121943946205024">"డ్రాఫ్ట్ స్వీకర్త:"</string>
-    <string name="draft_heading" msgid="7032951343184552800">"చిత్తుప్రతి"</string>
-    <string name="quoted_text_hidden_print" msgid="5256754205675159141">"కోట్ చేసిన వచనం దాచబడింది"</string>
-  <plurals name="num_attachments">
-    <item quantity="one" msgid="5494465717267988888">"<xliff:g id="COUNT">%1$d</xliff:g> జోడింపు"</item>
-    <item quantity="other" msgid="5422167728480739361">"<xliff:g id="COUNT">%1$d</xliff:g> జోడింపులు"</item>
-  </plurals>
-    <string name="no_subject" msgid="5622708348540036959">"(విషయం లేదు)"</string>
-    <string name="vacation_responder" msgid="5570132559074523806">"సెలవు ప్రత్యుత్తరం"</string>
-    <string name="preferences_vacation_responder_title" msgid="2268482117730576123">"సెలవు ప్రత్యుత్తరం"</string>
-    <string name="vacation_responder_body_hint_text" msgid="9087613123105158494">"సందేశం"</string>
-    <string name="send_to_contacts_text" msgid="124432913980620545">"నా పరిచయాలకు మాత్రమే పంపు"</string>
-    <string name="send_to_domain_text" msgid="5064559546745918393">"<xliff:g id="DOMAIN">%1$s</xliff:g>కి మాత్రమే పంపు"</string>
-    <string name="pick_start_date_title" msgid="2274665037355224165">"ప్రారంభం"</string>
-    <string name="pick_end_date_title" msgid="733396083649496600">"ముగింపు (ఐచ్ఛికం)"</string>
-    <string name="date_not_set" msgid="3251555782945051904">"సెట్ చేయలేదు"</string>
-    <string name="set_end_date_dialog_title" msgid="7543009262788808443">"ముగింపు తేదీ (ఐచ్ఛికం)"</string>
-    <string name="custom_date" msgid="5794846334232367838">"అనుకూలం"</string>
-    <string name="date_none" msgid="1061426502665431412">"ఏదీ వద్దు"</string>
-    <string name="discard_changes" msgid="5699760550972324746">"మార్పులను విస్మరించాలా?"</string>
-    <string name="vacation_responder_changes_saved" msgid="91448817268121249">"సెలవు ప్రత్యుత్తరం మార్పులు సేవ్ చేయబడ్డాయి"</string>
-    <string name="vacation_responder_changes_discarded" msgid="21756037735539983">"సెలవు ప్రత్యుత్తరం మార్పులు విస్మరించబడ్డాయి"</string>
-    <string name="vacation_responder_off" msgid="4429909341193366667">"ఆఫ్‌‌లో ఉంది"</string>
-    <string name="vacation_responder_on" msgid="4913238379320882449">"ఆన్‌లో, <xliff:g id="DATE">%1$s</xliff:g> నుండి"</string>
-    <string name="vacation_responder_on_with_end_date" msgid="4360941815371475955">"ఆన్‌లో ఉండేది, <xliff:g id="START_DATE">%1$s</xliff:g> నుండి <xliff:g id="END_DATE">%2$s</xliff:g> వరకు"</string>
-    <string name="vacation_responder_empty_subject_and_body_warning" msgid="6233629618520852439">"విషయాన్ని లేదా సందేశాన్ని జోడించండి"</string>
-    <string name="view_entire_message" msgid="823281796655014454">"మొత్తం సందేశాన్ని వీక్షించండి"</string>
-    <string name="eml_loader_error_toast" msgid="6577383216635400167">"ఈ ఫైల్‌ను తెరవడం కుదరదు"</string>
-    <string name="help_and_info" msgid="3708286489943154681">"సహాయం"</string>
-    <string name="help_and_feedback" msgid="7211458338163287670">"సహాయం &amp; అభిప్రాయం"</string>
-    <string name="feedback" msgid="204247008751740034">"అభిప్రాయం పంపండి"</string>
-    <string name="copyright" msgid="3121335168340432582">"©<xliff:g id="YEAR">%1$d</xliff:g> Google Inc."</string>
-    <string name="version" msgid="1161745345056656547">"<xliff:g id="APP_NAME">%1$s</xliff:g> సంస్కరణ <xliff:g id="VERSION">%2$s</xliff:g>"</string>
-    <string name="view_app_page" msgid="3241990517052398927"></string>
-    <string name="print_dialog" msgid="8895536548487605661">"ముద్రించు…"</string>
-    <string name="copyright_information" msgid="971422874488783312">"కాపీరైట్ సమాచారం"</string>
-    <string name="privacy_policy" msgid="212094623396418302">"గోప్యతా విధానం"</string>
-    <string name="open_source_licenses" msgid="8643615555920977752">"ఓపెన్ సోర్స్ లైసెన్స్‌లు"</string>
-    <string name="reply_choice_yes" msgid="3327633032975373220">"అవును"</string>
-    <string name="reply_choice_no" msgid="7068775605915475207">"వద్దు"</string>
-    <string name="reply_choice_ok" msgid="7881073621845053152">"సరే"</string>
-    <string name="reply_choice_hehe" msgid="6054314968043050748">"హెహే"</string>
-    <string name="reply_choice_thanks" msgid="4978961954288364694">"ధన్యవాదాలు"</string>
-    <string name="reply_choice_i_agree" msgid="2496652737796884298">"నేను అంగీకరిస్తున్నాను"</string>
-    <string name="reply_choice_nice" msgid="4465894941302838676">"బాగుంది"</string>
-    <string name="reply_on_my_way" msgid="5645003971107444269">"నేను ఆ పని మీదే ఉన్నాను"</string>
-    <string name="reply_choice_later" msgid="4629219072859486413">"సరే, నేను మిమ్మల్ని తర్వాత సంప్రదిస్తాను"</string>
-    <string name="reply_choice_smiling_face" msgid="1772253938506548631">":)"</string>
-    <string name="reply_choice_frowning_face" msgid="6260338807944002651">":("</string>
-    <string name="preference_header_action_confirmations" msgid="3922674681156121948">"చర్య నిర్ధారణలు"</string>
-    <string name="preference_confirm_before_delete_title" msgid="7563587174619033835">"తొలగించడానికి ముందు నిర్ధారించబడాలి"</string>
-    <string name="preference_confirm_before_archive_title" msgid="7318645995655875718">"ఆర్కైవ్ చేయడానికి ముందు నిర్ధారించబడాలి"</string>
-    <string name="preference_confirm_before_send_title" msgid="4136585783513077039">"పంపడానికి ముందు నిర్ధారించబడాలి"</string>
-    <string name="preferences_conversation_mode_title" msgid="389352009651720838">"సందేశాలను స్వీయ అమర్పు చేయి"</string>
-    <string name="preferences_conversation_mode_summary" msgid="5730999743867653106">"స్క్రీన్‌కు సరిపోయేలా సందేశాలను కుదించండి"</string>
-    <string name="preferences_disable_snap_headers_title" msgid="7257824136988429629">"సందేశ చర్యలు"</string>
-  <string-array name="prefSummaries_snapHeader">
-    <item msgid="43373293784193461">"స్క్రీన్ ఎగువన ఎల్లప్పుడూ సందేశ చర్యలను చూపు"</item>
-    <item msgid="1765271305989996747">"పోర్ట్రెయిట్‌కి తిప్పబడినప్పుడు స్క్రీన్ ఎగువన మాత్రమే సందేశ చర్యలను చూపు"</item>
-    <item msgid="6311113076575333488">"సందేశ ముఖ్యశీర్షికకు వెలుపల సందేశ చర్యలను చూపవద్దు"</item>
-  </string-array>
-  <string-array name="prefEntries_snapHeader">
-    <item msgid="6906986566816683587">"ఎల్లప్పుడూ చూపు"</item>
-    <item msgid="113299655708990672">"పోర్ట్రెయిట్‌లో మాత్రమే చూపు"</item>
-    <item msgid="4403750311175924065">"చూపవద్దు"</item>
-  </string-array>
-    <string name="clear_history_title" msgid="5536216295725760357">"శోధన చరిత్రను క్లియర్ చేయి"</string>
-    <string name="search_history_cleared" msgid="1461946302763342640">"శోధన చరిత్ర క్లియర్ చేయబడింది."</string>
-    <string name="clear_history_dialog_title" msgid="3503603389704365385">"శోధన చరిత్రను క్లియర్ చేయాలా?"</string>
-    <string name="clear_history_dialog_message" msgid="5202922561632407778">"మీరు మునుపు చేసిన అన్ని శోధనలు తీసివేయబడతాయి."</string>
-    <string name="manage_accounts_menu_item" msgid="4734660452395086786">"ఖాతాలను నిర్వహించు"</string>
-    <string name="general_preferences_title" msgid="4212138728220418162">"సాధారణ సెట్టింగ్‌లు"</string>
-    <string name="activity_preferences" msgid="8966077432517613292">"సెట్టింగ్‌లు"</string>
-</resources>
diff --git a/res/values-th-sw600dp/strings.xml b/res/values-th-sw600dp/strings.xml
index 8a226b5..82f6f27 100644
--- a/res/values-th-sw600dp/strings.xml
+++ b/res/values-th-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ สำเนา/สำเนาลับ"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ สำเนาลับ"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"จัดการโฟลเดอร์"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"ใช้เป็นค่าเริ่มต้นสำหรับการตอบกลับข้อความแจ้งเตือน"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ สำเนา/สำเนาลับ"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ สำเนาลับ"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"จัดการโฟลเดอร์"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"ใช้เป็นค่าเริ่มต้นสำหรับการตอบกลับข้อความแจ้งเตือน"</string>
 </resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 15384d6..797002b 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -31,7 +31,7 @@
     <string name="compose" msgid="2602861958391035523">"เขียน"</string>
   <string-array name="compose_modes">
     <item msgid="9000553538766397816">"ตอบ"</item>
-    <item msgid="2767793214788399009">"ตอบทุกคน"</item>
+    <item msgid="2767793214788399009">"ตอบทั้งหมด"</item>
     <item msgid="2758162027982270607">"ส่งต่อ"</item>
   </string-array>
     <string name="reply_attribution" msgid="1114972798797833259">"เมื่อ <xliff:g id="DATE">%s</xliff:g> <xliff:g id="PERSON">%s</xliff:g> เขียนว่า:"</string>
@@ -61,14 +61,14 @@
     <string name="remove_folder" msgid="2379905457788576297">"ลบจาก <xliff:g id="FOLDERNAME">%1$s</xliff:g>"</string>
     <string name="archive" msgid="5978663590021719939">"เก็บถาวร"</string>
     <string name="report_spam" msgid="4106897677959987340">"รายงานจดหมายขยะ"</string>
-    <string name="mark_not_spam" msgid="8617774236231366651">"รายงานว่าไม่ใช่จดหมายขยะ"</string>
+    <string name="mark_not_spam" msgid="8617774236231366651">"รายงานว่าไม่ใช่สแปม"</string>
     <string name="report_phishing" msgid="8454666464488413739">"รายงานฟิชชิง"</string>
     <string name="delete" msgid="6784262386780496958">"ลบ"</string>
     <string name="discard_drafts" msgid="5881484193628472105">"ยกเลิกข้อความร่าง"</string>
     <string name="discard_failed" msgid="7520780769812210279">"ยกเลิกไม่สำเร็จ"</string>
     <string name="refresh" msgid="1533748989749277511">"รีเฟรช"</string>
     <string name="reply" msgid="8337757482824207118">"ตอบ"</string>
-    <string name="reply_all" msgid="5366796103758360957">"ตอบทุกคน"</string>
+    <string name="reply_all" msgid="5366796103758360957">"ตอบทั้งหมด"</string>
     <string name="resume_draft" msgid="1272723181782570649">"แก้ไข"</string>
     <string name="forward" msgid="4397585145490426320">"ส่งต่อ"</string>
     <string name="menu_compose" msgid="4575025207594709432">"เขียน"</string>
@@ -169,7 +169,7 @@
     <string name="empty_search" msgid="8564899353449880818">"อ๊ะ! เราไม่พบผลลัพธ์ใดๆสำหรับ \"<xliff:g id="SEARCH_QUERY">%1$s</xliff:g>\""</string>
     <string name="empty_spam_folder" msgid="3288985543286122800">"ไชโย ไม่มีสแปมเลย!"</string>
     <string name="empty_trash_folder" msgid="378119063015945020">"ไม่มีขยะที่นี่ ขอขอบคุณที่รีไซเคิล!"</string>
-    <string name="empty_folder" msgid="3227552635613553855">"ที่นี่ไม่มีจดหมาย"</string>
+    <string name="empty_folder" msgid="3227552635613553855">"ไม่มีอีเมลที่นี่"</string>
     <string name="getting_messages" msgid="8403333791332403244">"กำลังโหลดข้อความของคุณ"</string>
     <string name="undo" msgid="8256285267701059609">"เลิกทำ"</string>
   <plurals name="conversation_unstarred">
@@ -272,7 +272,7 @@
     <string name="tap_to_configure_folder_sync" msgid="3280434399275638071">"ซิงค์โฟลเดอร์"</string>
     <string name="widget_large_unread_count" msgid="8699435859096455837">"%d+"</string>
     <string name="large_unseen_count" msgid="3055042669246912518">"<xliff:g id="COUNT">%d</xliff:g>+ ใหม่"</string>
-    <string name="unseen_count" msgid="5509898665569695288">"ใหม่ <xliff:g id="COUNT">%d</xliff:g>"</string>
+    <string name="unseen_count" msgid="5509898665569695288">"<xliff:g id="COUNT">%d</xliff:g> ใหม่"</string>
   <plurals name="actionbar_unread_messages">
     <item quantity="other" msgid="3863201473731766006">"ยังไม่ได้อ่าน <xliff:g id="COUNT">%1$d</xliff:g> ข้อความ"</item>
   </plurals>
@@ -335,7 +335,7 @@
     <string name="preferences_signature_dialog_title" msgid="4801741764511807064">"ลายเซ็น"</string>
     <string name="preferences_signature_summary_not_set" msgid="3776614319388053784">"ไม่ได้ตั้งค่า"</string>
     <string name="notification_action_reply" msgid="8378725460102575919">"ตอบ"</string>
-    <string name="notification_action_reply_all" msgid="5693469099941000037">"ตอบทุกคน"</string>
+    <string name="notification_action_reply_all" msgid="5693469099941000037">"ตอบทั้งหมด"</string>
     <string name="notification_action_archive" msgid="2884874164831039047">"เก็บถาวร"</string>
     <string name="notification_action_remove_label" msgid="3714785653186750981">"ลบป้ายกำกับ"</string>
     <string name="notification_action_delete" msgid="3201627482564624132">"ลบ"</string>
@@ -364,11 +364,11 @@
     <item msgid="1510017057984222376">"แสดงเฉพาะ \"ลบ\""</item>
     <item msgid="3196207224108008441">"แสดง \"เก็บ\" และ \"ลบ\""</item>
   </string-array>
-    <string name="prefDialogTitle_removal_action" msgid="266548424110393246">"การดำเนินการ \"เก็บ\" และ \"ลบ\""</string>
+    <string name="prefDialogTitle_removal_action" msgid="7914272565548361304">"การดำเนินการเริ่มต้น"</string>
     <string name="preferences_default_reply_all_title" msgid="7255858488369635327">"ตอบทุกคน"</string>
     <string name="preferences_default_reply_all_summary_impl" msgid="895581085692979709">"ใช้เป็นค่าเริ่มต้นสำหรับการตอบกลับข้อความ"</string>
-    <string name="preference_swipe_title_archive" msgid="9122333537761282714">"กวาดเพื่อเก็บ"</string>
-    <string name="preference_swipe_title_delete" msgid="4860474024917543711">"กวาดเพื่อลบ"</string>
+    <string name="preference_swipe_title_archive" msgid="9122333537761282714">"กวาดนิ้วเพื่อเก็บถาวร"</string>
+    <string name="preference_swipe_title_delete" msgid="4860474024917543711">"กวาดนิ้วเพื่อลบ"</string>
     <string name="preference_swipe_description" msgid="3036560323237015010">"ในรายการการสนทนา"</string>
     <string name="preference_sender_image_title" msgid="7890813537985591865">"ภาพของผู้ส่ง"</string>
     <string name="preference_sender_image_description" msgid="3586817690132199889">"แสดงข้างชื่อในรายการสนทนา"</string>
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"ไอคอนโฟลเดอร์"</string>
     <string name="add_account" msgid="5905863370226612377">"เพิ่มบัญชี"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"ปิดเคล็ดลับ"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"การซิงค์อัตโนมัติปิดอยู่"</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"แตะเพื่อเปิด"</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"การซิงค์บัญชีปิดอยู่"</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"เปิดใน<xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>"</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"การตั้งค่าบัญชี"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> ข้อความที่ยังไม่ได้ส่งใน <xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"เปิดซิงค์อัตโนมัติไหม"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"การเปลี่ยนแปลงที่คุณทำกับแอปและบัญชีทั้งหมด ไม่ใช่เพียง Gmail จะมีการซิงค์กันระหว่างเว็บ อุปกรณ์อื่นๆ และ <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g> ของคุณ"</string>
@@ -415,10 +410,10 @@
     <item quantity="other" msgid="5422167728480739361">"<xliff:g id="COUNT">%1$d</xliff:g> ไฟล์แนบ"</item>
   </plurals>
     <string name="no_subject" msgid="5622708348540036959">"(ไม่มีหัวเรื่อง)"</string>
-    <string name="vacation_responder" msgid="5570132559074523806">"การช่วยตอบอีเมลอัตโนมัติ"</string>
-    <string name="preferences_vacation_responder_title" msgid="2268482117730576123">"การช่วยตอบอีเมลอัตโนมัติ"</string>
+    <string name="vacation_responder" msgid="5570132559074523806">"โปรแกรมช่วยตอบอีเมลขณะพักร้อน"</string>
+    <string name="preferences_vacation_responder_title" msgid="2268482117730576123">"โปรแกรมช่วยตอบอีเมลขณะพักร้อน"</string>
     <string name="vacation_responder_body_hint_text" msgid="9087613123105158494">"ข้อความ"</string>
-    <string name="send_to_contacts_text" msgid="124432913980620545">"ส่งไปยังรายชื่อติดต่อของฉันเท่านั้น"</string>
+    <string name="send_to_contacts_text" msgid="124432913980620545">"ส่งไปยังที่อยู่ติดต่อของฉันเท่านั้น"</string>
     <string name="send_to_domain_text" msgid="5064559546745918393">"ส่งไปยัง <xliff:g id="DOMAIN">%1$s</xliff:g> เท่านั้น"</string>
     <string name="pick_start_date_title" msgid="2274665037355224165">"เริ่ม"</string>
     <string name="pick_end_date_title" msgid="733396083649496600">"สิ้นสุด (ไม่บังคับ)"</string>
@@ -427,8 +422,8 @@
     <string name="custom_date" msgid="5794846334232367838">"กำหนดเอง"</string>
     <string name="date_none" msgid="1061426502665431412">"ไม่มี"</string>
     <string name="discard_changes" msgid="5699760550972324746">"ยกเลิกการเปลี่ยนแปลงหรือไม่"</string>
-    <string name="vacation_responder_changes_saved" msgid="91448817268121249">"บันทึกการเปลี่ยนแปลงการช่วยตอบอีเมลอัตโนมัติแล้ว"</string>
-    <string name="vacation_responder_changes_discarded" msgid="21756037735539983">"ยกเลิกการเปลี่ยนแปลงการช่วยตอบอีเมลอัตโนมัติ"</string>
+    <string name="vacation_responder_changes_saved" msgid="91448817268121249">"บันทึกการเปลี่ยนแปลงโปรแกรมช่วยตอบอีเมลขณะพักร้อนแล้ว"</string>
+    <string name="vacation_responder_changes_discarded" msgid="21756037735539983">"ยกเลิกการเปลี่ยนแปลงโปรแกรมช่วยตอบอีเมลขณะพักร้อน"</string>
     <string name="vacation_responder_off" msgid="4429909341193366667">"ปิด"</string>
     <string name="vacation_responder_on" msgid="4913238379320882449">"เปิด ตั้งแต่ <xliff:g id="DATE">%1$s</xliff:g>"</string>
     <string name="vacation_responder_on_with_end_date" msgid="4360941815371475955">"เปิด ตั้งแต่ <xliff:g id="START_DATE">%1$s</xliff:g> ถึง <xliff:g id="END_DATE">%2$s</xliff:g>"</string>
diff --git a/res/values-tl-sw600dp/strings.xml b/res/values-tl-sw600dp/strings.xml
index 0472893..046c36d 100644
--- a/res/values-tl-sw600dp/strings.xml
+++ b/res/values-tl-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Cc/Bcc"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Bcc"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Pamahalaan ang mga folder"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Gamitin bilang default para sa mga tugon sa notification ng mensahe"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ Cc/Bcc"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ Bcc"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Pamahalaan ang mga folder"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Gamitin bilang default para sa mga tugon sa notification ng mensahe"</string>
 </resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 7a04089..326eb63 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Icon ng folder"</string>
     <string name="add_account" msgid="5905863370226612377">"Magdagdag ng account"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"I-dismiss ang tip"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Naka-off ang auto-sync."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Pindutin upang i-on."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Naka-off ang pag-sync sa account."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"I-on sa <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Mga setting ng account"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> ang hindi naipadala sa <xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"I-on ang auto-sync?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Ang mga pagbabagong iyong ginawa sa lahat ng apps at account, hindi lang sa Gmail, ay masi-synchronize sa web, iba mo pang mga device, at iyong <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g> ."</string>
diff --git a/res/values-tr-sw600dp/strings.xml b/res/values-tr-sw600dp/strings.xml
index f790c3a..53cf759 100644
--- a/res/values-tr-sw600dp/strings.xml
+++ b/res/values-tr-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Cc/Bcc"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Bcc"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Klasörleri yönet"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"İleti bildirimlerine yanıt için varsayılan olarak kullan"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ Cc/Bcc"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ Bcc"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Klasörleri yönet"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"İleti bildirimlerine yanıt için varsayılan olarak kullan"</string>
 </resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 7b084a4..c8acd0a 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -19,7 +19,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="from" msgid="5159056500059912358">"Gönderen"</string>
-    <string name="to" msgid="3971614275716830581">"Alıcı"</string>
+    <string name="to" msgid="3971614275716830581">"Alıcı:"</string>
     <string name="cc" msgid="8768828862207919684">"Cc"</string>
     <string name="bcc" msgid="519303553518479171">"Bcc"</string>
     <string name="subject_hint" msgid="2136470287303571827">"Konu"</string>
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Klasör simgesi"</string>
     <string name="add_account" msgid="5905863370226612377">"Hesap ekle"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"İpucunu kapat"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Otomatik senkronizasyon kapalı."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Açmak için dokun."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Hesap senkronizasyonu kapalı."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"<xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g> içinde açın."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Hesap ayarları"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="OUTBOX">%2$s</xliff:g> içinde gönderilmemiş <xliff:g id="NUMBER">%1$s</xliff:g> ileti var"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Otomatik senkronizasyon açılsın mı?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Yalnızca Gmail değil, tüm uygulamalarda ve hesaplarda yaptığınız değişiklikler web ile diğer cihazlarınız ve <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g> arasında senkronize edilir."</string>
diff --git a/res/values-uk-sw600dp/strings.xml b/res/values-uk-sw600dp/strings.xml
index 2082f78..2423ed8 100644
--- a/res/values-uk-sw600dp/strings.xml
+++ b/res/values-uk-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Копія/прихована"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Прихована копія"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Керувати папками"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Використ. за умовчанням для відповідей на сповіщення про повідомлення"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ Копія/прихована"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ Прихована копія"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Керувати папками"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Використ. за умовчанням для відповідей на сповіщення про повідомлення"</string>
 </resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 7224bbb..ad08a16 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -73,15 +73,15 @@
     <string name="forward" msgid="4397585145490426320">"Переслати"</string>
     <string name="menu_compose" msgid="4575025207594709432">"Написати"</string>
     <string name="menu_change_folders" msgid="2194946192901276625">"Змінити папки"</string>
-    <string name="menu_move_to" msgid="7948877550284452830">"Перемістити у"</string>
-    <string name="menu_move_to_inbox" msgid="258554178236001444">"Перемістити у вхідні"</string>
+    <string name="menu_move_to" msgid="7948877550284452830">"Перемістити в"</string>
+    <string name="menu_move_to_inbox" msgid="258554178236001444">"Перемістити до вхідних"</string>
     <string name="menu_manage_folders" msgid="8486398523679534519">"Налаштування папки"</string>
     <string name="menu_show_original" msgid="2330398228979616661">"Не змінювати розмір"</string>
     <string name="menu_settings" msgid="7993485401501778040">"Налаштування"</string>
     <string name="menu_search" msgid="1949652467806052768">"Пошук"</string>
     <string name="drawer_title" msgid="3766219846644975778">"Панель навігації"</string>
     <string name="mark_important" msgid="8781680450177768820">"Позначити як важливу"</string>
-    <string name="mark_not_important" msgid="3342258155408116917">"Позначити як неважливе"</string>
+    <string name="mark_not_important" msgid="3342258155408116917">"Позначити як неважливу"</string>
     <string name="add_cc_label" msgid="2249679001141195213">"Додати копію/приховану копію"</string>
     <string name="add_bcc_label" msgid="963745641238037813">"Додати прихов. копію"</string>
     <string name="quoted_text" msgid="977782904293216533">"Додати цитований текст"</string>
@@ -127,16 +127,10 @@
     <string name="contextmenu_send_mail" msgid="3834654593200105396">"Надіслати електронний лист"</string>
     <string name="contextmenu_map" msgid="5118951927399465521">"Карта"</string>
     <string name="contextmenu_sharelink" msgid="8670940060477758709">"Поділитися посиланням"</string>
-    <string name="contextmenu_help" msgid="4209674157707873384">"Довідка"</string>
-    <string name="contextmenu_feedback" msgid="8319100902136337085">"Надіслати відгук"</string>
-    <!-- no translation found for num_selected (7990204488812654380) -->
-    <skip />
-  <plurals name="move_conversation">
-    <item quantity="one" msgid="237882018518207244">"Перемістити ланцюжок"</item>
-    <item quantity="other" msgid="6639576653114141743">"Перемістити ланцюжки: <xliff:g id="ID_1">%1$d</xliff:g>"</item>
-  </plurals>
     <string name="content_description" msgid="854320355052962069">"<xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g>, тема: <xliff:g id="SUBJECT">%3$s</xliff:g>, <xliff:g id="SNIPPET">%4$s</xliff:g> <xliff:g id="DATE">%5$s</xliff:g>, <xliff:g id="READSTATE">%6$s</xliff:g>"</string>
     <string name="content_description_today" msgid="1634422834354116955">"<xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g>, тема: <xliff:g id="SUBJECT">%3$s</xliff:g>, <xliff:g id="SNIPPET">%4$s</xliff:g> о <xliff:g id="TIME">%5$s</xliff:g>, <xliff:g id="READSTATE">%6$s</xliff:g>"</string>
+    <string name="content_description_with_folders" msgid="482368474097191879">"<xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g> на тему \"<xliff:g id="SUBJECT">%3$s</xliff:g>\": \"<xliff:g id="SNIPPET">%4$s</xliff:g>\"; о <xliff:g id="DATE">%5$s</xliff:g>, <xliff:g id="READSTATE">%6$s</xliff:g>, мітки: <xliff:g id="FOLDERS">%7$s</xliff:g>"</string>
+    <string name="content_description_today_with_folders" msgid="860548626146933495">"<xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g> на тему \"<xliff:g id="SUBJECT">%3$s</xliff:g>\": \"<xliff:g id="SNIPPET">%4$s</xliff:g>\"; о <xliff:g id="TIME">%5$s</xliff:g>, <xliff:g id="READSTATE">%6$s</xliff:g>, мітки: <xliff:g id="FOLDERS">%7$s</xliff:g>"</string>
     <string name="read_string" msgid="5495929677508576520">"прочитано"</string>
     <string name="unread_string" msgid="7342558841698083381">"не прочитано"</string>
     <string name="filtered_tag" msgid="721666921386074505">"[<xliff:g id="TAG">%1$s</xliff:g>]<xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
@@ -152,12 +146,12 @@
     <string name="me_object_pronoun" msgid="4674452244417913816">"я"</string>
     <string name="me_subject_pronoun" msgid="7479328865714008288">"я"</string>
   <plurals name="confirm_delete_conversation">
-    <item quantity="one" msgid="7605755011865575440">"Видалити ланцюжок?"</item>
-    <item quantity="other" msgid="1585660381208712562">"Видалити ці ланцюжки (<xliff:g id="COUNT">%1$d</xliff:g>)?"</item>
+    <item quantity="one" msgid="7605755011865575440">"Видалити цю бесіду?"</item>
+    <item quantity="other" msgid="1585660381208712562">"Видалити ці бесіди (<xliff:g id="COUNT">%1$d</xliff:g>)?"</item>
   </plurals>
   <plurals name="confirm_archive_conversation">
-    <item quantity="one" msgid="9105551557653306945">"Архівувати цей ланцюжок повідомлень?"</item>
-    <item quantity="other" msgid="2001972798185641108">"Архівувати ці ланцюжки (<xliff:g id="COUNT">%1$d</xliff:g>)?"</item>
+    <item quantity="one" msgid="9105551557653306945">"Архівувати цю бесіду?"</item>
+    <item quantity="other" msgid="2001972798185641108">"Архівувати ці бесіди (<xliff:g id="COUNT">%1$d</xliff:g>)?"</item>
   </plurals>
   <plurals name="confirm_discard_drafts_conversation">
     <item quantity="one" msgid="2030421499893210789">"Відхилити повідомлення?"</item>
@@ -173,8 +167,8 @@
     <string name="getting_messages" msgid="8403333791332403244">"Завантаження повідомлень"</string>
     <string name="undo" msgid="8256285267701059609">"Відмінити"</string>
   <plurals name="conversation_unstarred">
-    <item quantity="one" msgid="839233699150563831">"Ланцюжків, з яких знімається позначка: <xliff:g id="COUNT">%1$d</xliff:g>."</item>
-    <item quantity="other" msgid="7677305734833709789">"Ланцюжків, з яких знімається позначка : <xliff:g id="COUNT">%1$d</xliff:g>."</item>
+    <item quantity="one" msgid="1701235480675303125">"Видалення зірочки з <xliff:g id="COUNT">%1$d</xliff:g> ланцюжка повідомлень"</item>
+    <item quantity="other" msgid="1154441830432477256">"Видалення зірочки з ланцюжків повідомлень (<xliff:g id="COUNT">%1$d</xliff:g>)"</item>
   </plurals>
   <plurals name="conversation_muted">
     <item quantity="one" msgid="3339638225564408438">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; проігноровано."</item>
@@ -268,7 +262,7 @@
     <item msgid="5442620760791553027">"Помилка сервера"</item>
   </string-array>
     <string name="tap_to_configure" msgid="137172348280050643">"Торкніться, щоб налаштувати"</string>
-    <string name="non_synced_folder_description" msgid="3044618511909304701">"Щоб переглядати ланцюжки, синхронізуйте цю папку."</string>
+    <string name="non_synced_folder_description" msgid="3044618511909304701">"Щоб переглядати бесіди, синхронізуйте цю папку."</string>
     <string name="tap_to_configure_folder_sync" msgid="3280434399275638071">"Синхронізувати папку"</string>
     <string name="widget_large_unread_count" msgid="8699435859096455837">"%d+"</string>
     <string name="large_unseen_count" msgid="3055042669246912518">"<xliff:g id="COUNT">%d</xliff:g>+ нов."</string>
@@ -276,7 +270,6 @@
   <plurals name="actionbar_unread_messages">
     <item quantity="other" msgid="3863201473731766006">"Не прочитано: <xliff:g id="COUNT">%1$d</xliff:g>"</item>
   </plurals>
-    <string name="actionbar_large_unread_count" msgid="753635978542372792">"Не прочитано: <xliff:g id="COUNT">%1$d</xliff:g>+"</string>
     <string name="view_more_conversations" msgid="8377920000247101901">"Інші ланцюжки повідомлень"</string>
     <string name="loading_conversation" msgid="7931600025861500397">"Завантаження…"</string>
     <string name="activity_mailbox_selection" msgid="7489813868539767701">"Вибрати обліковий запис"</string>
@@ -284,7 +277,7 @@
     <string name="folder_shortcut_widget_label" msgid="6466292659577092915">"Папка \"Електронна пошта\""</string>
     <string name="change_folders_selection_dialog_title" msgid="9174464298613273814">"Змінити папки"</string>
     <string name="move_to_selection_dialog_title" msgid="4052506464467083621">"Перемістити у"</string>
-    <string name="search_hint" msgid="4916671414132334289">"Пошук у пошті"</string>
+    <string name="search_hint" msgid="7060626585689391003">"Пошук"</string>
     <!-- no translation found for search_results_loaded (1784879343458807514) -->
     <skip />
     <string name="network_error" msgid="5931164247644972255">"Немає з’єднання"</string>
@@ -319,14 +312,14 @@
   <string-array name="prefEntries_autoAdvance">
     <item msgid="1505450878799459652">"Новіші"</item>
     <item msgid="8000986144872247139">"Старіші"</item>
-    <item msgid="8015001161633421314">"Список ланцюжків"</item>
+    <item msgid="8015001161633421314">"Список бесід"</item>
   </string-array>
   <string-array name="prefSummaries_autoAdvance">
-    <item msgid="8221665977497655719">"Показувати новіший ланцюжок повідомлень після видалення"</item>
-    <item msgid="1721869262893378141">"Показувати старіший ланцюжок повідомлень після видалення"</item>
-    <item msgid="880913657385630195">"Показувати список ланцюжків повідомлень після видалення"</item>
+    <item msgid="8221665977497655719">"Показувати новішу бесіду після видалення"</item>
+    <item msgid="1721869262893378141">"Показувати старішу бесіду після видалення"</item>
+    <item msgid="880913657385630195">"Показувати список бесід після видалення"</item>
   </string-array>
-    <string name="prefDialogTitle_autoAdvance" msgid="5459235590885640678">"Перехід"</string>
+    <string name="prefDialogTitle_autoAdvance" msgid="5459235590885640678">"Перейти до пункту"</string>
     <string name="clear_display_images_whitelist_title" msgid="2012677202404471778">"Заборонити показ зображень"</string>
     <string name="clear_display_images_whitelist_dialog_title" msgid="1942692501166848471">"Заборонити показ зображень?"</string>
     <string name="clear_display_images_whitelist_dialog_message" msgid="3952553078559373729">"Не показувати вставлені зображення від відправників, дозволені раніше."</string>
@@ -367,11 +360,10 @@
     <string name="prefDialogTitle_removal_action" msgid="266548424110393246">"Архівування та видалення"</string>
     <string name="preferences_default_reply_all_title" msgid="7255858488369635327">"Відповісти всім"</string>
     <string name="preferences_default_reply_all_summary_impl" msgid="895581085692979709">"Використовувати за умовчанням для відповідей на повідомлення"</string>
-    <string name="preference_swipe_title_archive" msgid="9122333537761282714">"Провести пальцем, щоб архівувати"</string>
-    <string name="preference_swipe_title_delete" msgid="4860474024917543711">"Провести пальцем, щоб видалити"</string>
+    <string name="preference_swipe_title" msgid="2073613840893904205">"Провести пальцем"</string>
     <string name="preference_swipe_description" msgid="3036560323237015010">"У списку ланцюжків"</string>
     <string name="preference_sender_image_title" msgid="7890813537985591865">"Зображення відправника"</string>
-    <string name="preference_sender_image_description" msgid="3586817690132199889">"Показувати біля імені в списку ланцюжків"</string>
+    <string name="preference_sender_image_description" msgid="3586817690132199889">"Показувати біля імені в списку бесід"</string>
     <string name="empty_trash" msgid="3385937024924728399">"Очистити кошик"</string>
     <string name="empty_spam" msgid="2911988289997281371">"Очистити папку для спаму"</string>
     <string name="empty_trash_dialog_title" msgid="2104898489663621508">"Очистити кошик?"</string>
@@ -382,16 +374,11 @@
   </plurals>
     <string name="drawer_open" msgid="2285557278907103851">"Висунути навігаційну панель"</string>
     <string name="drawer_close" msgid="2065829742127544297">"Сховати навігаційну панель"</string>
-    <string name="conversation_photo_welcome_text" msgid="836483155429003787">"Торкніться зображення відправника, щоб вибрати ланцюжок повідомлень."</string>
-    <string name="long_press_to_select_tip" msgid="1660881999120625177">"Щоб вибрати кілька ланцюжків, натисніть і утримуйте один із них, а потім натискайте інші."</string>
+    <string name="conversation_photo_welcome_text" msgid="836483155429003787">"Торкніться зображення відправника, щоб вибрати бесіду."</string>
+    <string name="long_press_to_select_tip" msgid="1660881999120625177">"Торкніться й утримуйте, щоб вибрати одну бесіду, а потім ще раз, щоб вибрати інші."</string>
     <string name="folder_icon_desc" msgid="6272938864914794739">"Значок папки"</string>
     <string name="add_account" msgid="5905863370226612377">"Додати обліковий запис"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Закрити пораду"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Автоматичну синхронізацію вимкнено."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Торкніться, щоб увімкнути."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Синхронізацію облікового запису вимкнено."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Увімкніть у меню \"<xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>\"."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Налаштування облікового запису"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"Ненадісланих листів у <xliff:g id="OUTBOX">%2$s</xliff:g>: <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Увімкнути автоматичну синхронізацію?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Зміни, які ви вносите до всіх програм і облікових записів (не лише Gmail), синхронізуватимуться з веб-службами, іншими пристроями та вашим <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>."</string>
diff --git a/res/values-ur-rPK-sw600dp/strings.xml b/res/values-ur-rPK-sw600dp/strings.xml
deleted file mode 100644
index 643df38..0000000
--- a/res/values-ur-rPK-sw600dp/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-     Copyright (C) 2012 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"‎+ Cc/Bcc"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"‎+ Bcc"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"فولڈرز کا نظم کریں"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"پیغام کی اطلاعات کے جوابات کیلئے ڈیفالٹ کے بطور استعمال کریں"</string>
-</resources>
diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur-rPK/strings.xml
deleted file mode 100644
index d6d8010..0000000
--- a/res/values-ur-rPK/strings.xml
+++ /dev/null
@@ -1,483 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-     Copyright (C) 2011 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="from" msgid="5159056500059912358">"منجانب"</string>
-    <string name="to" msgid="3971614275716830581">"بنام"</string>
-    <string name="cc" msgid="8768828862207919684">"Cc"</string>
-    <string name="bcc" msgid="519303553518479171">"Bcc"</string>
-    <string name="subject_hint" msgid="2136470287303571827">"موضوع"</string>
-    <string name="body_hint" msgid="6478994981747057817">"ای میل تحریر کریں"</string>
-    <string name="add_file_attachment" msgid="2604880054248593993">"فائل منسلک کریں"</string>
-    <string name="add_photo_attachment" msgid="7163589794940909528">"تصویر منسلک کریں"</string>
-    <string name="save_draft" msgid="2669523480789672118">"مسودہ محفوظ کریں"</string>
-    <string name="discard" msgid="4905982179911608430">"مسترد کریں"</string>
-    <string name="compose" msgid="2602861958391035523">"تحریر کریں"</string>
-  <string-array name="compose_modes">
-    <item msgid="9000553538766397816">"جواب دیں"</item>
-    <item msgid="2767793214788399009">"سب کو جواب دیں"</item>
-    <item msgid="2758162027982270607">"فارورڈ کریں"</item>
-  </string-array>
-    <string name="reply_attribution" msgid="1114972798797833259">"<xliff:g id="DATE">%s</xliff:g> کو <xliff:g id="PERSON">%s</xliff:g> نے لکھا:"</string>
-    <string name="forward_attribution" msgid="597850048345475752">"‏---------- فارورڈ کیا ہوا پیغام ----------&lt;br&gt;منجانب: <xliff:g id="FROM">%1$s</xliff:g>&lt;br&gt;تاریخ: <xliff:g id="DATE">%2$s</xliff:g>&lt;br&gt;موضوع: <xliff:g id="SUBJECT">%3$s</xliff:g>&lt;br&gt;بنام: <xliff:g id="TO">%4$s</xliff:g>&lt;br&gt;"</string>
-    <string name="forward_attribution_no_headers" msgid="1828826576779486239">"---------- فارورڈ کیا ہوا پیغام ----------"</string>
-    <string name="cc_attribution" msgid="2928584226469388899">"Cc: <xliff:g id="CC">%1$s</xliff:g>&lt;br&gt;"</string>
-    <string name="select_attachment_type" msgid="353236686616663062">"منسلکہ کی قسم منتخب کریں"</string>
-    <string name="too_large_to_attach_single" msgid="2669897137966512530">"<xliff:g id="MAXSIZE">%1$s</xliff:g> سے بڑی فائل منسلک نہیں ہوسکتی۔"</string>
-    <string name="too_large_to_attach_multiple" msgid="1620163295709036343">"ایک یا زائد فائلیں منسلک نہیں ہوئیں۔ حد <xliff:g id="MAXSIZE">%1$s</xliff:g>۔"</string>
-    <string name="too_large_to_attach_additional" msgid="4964155563465970480">"فائل منسلک نہیں ہے۔ <xliff:g id="MAXSIZE">%1$s</xliff:g> کی حد کو پہنچ گیا۔"</string>
-    <string name="generic_attachment_problem" msgid="4683974765387240723">"فائل منسلک نہیں کی جاسکی۔"</string>
-    <string name="recipient_needed" msgid="319816879398937214">"کم از کم ایک وصول کنندہ شامل کریں۔"</string>
-    <string name="recipient_error_dialog_title" msgid="760741480291963706">"وصول کنندہ کی خرابی"</string>
-    <string name="confirm_send_title" msgid="4664971589247101530">"پیغام بھیجیں؟"</string>
-    <string name="confirm_send_message_with_no_subject" msgid="1442628074022609987">"پیغام کے موضوع میں کوئی متن نہیں ہے۔"</string>
-    <string name="confirm_send_message_with_no_body" msgid="3329355318700201516">"پیغام کے نفس مضمون میں کوئی متن نہیں ہے۔"</string>
-    <string name="confirm_send_message" msgid="6211518590166222735">"یہ پیغام بھیجیں؟"</string>
-    <string name="message_discarded" msgid="6792661321962262024">"پیغام مسترد ہوگیا۔"</string>
-    <string name="signature" msgid="3172144541947408374">\n\n"<xliff:g id="SIGNATURE">%s</xliff:g>"</string>
-    <string name="custom_from_account_label" msgid="5042317430007736322">"میل بھیجیں بطور:"</string>
-    <string name="send" msgid="4269810089682120826">"بھیجیں"</string>
-    <string name="mark_read" msgid="579388143288052493">"پڑھی ہوئی کا نشان لگائیں"</string>
-    <string name="mark_unread" msgid="6245060538061533191">"بغیر پڑھا ہوا کا نشان لگائیں"</string>
-    <string name="mute" msgid="9164839998562321569">"خاموش کریں"</string>
-    <string name="add_star" msgid="3275117671153616270">"ستارے کا نشان شامل کریں"</string>
-    <string name="remove_star" msgid="9126690774161840733">"ستارے کا نشان ہٹائیں"</string>
-    <string name="remove_folder" msgid="2379905457788576297">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> سے ہٹائیں"</string>
-    <string name="archive" msgid="5978663590021719939">"آرکائیو کریں"</string>
-    <string name="report_spam" msgid="4106897677959987340">"سپام کی اطلاع دیں"</string>
-    <string name="mark_not_spam" msgid="8617774236231366651">"سپام نہیں کی اطلاع دیں"</string>
-    <string name="report_phishing" msgid="8454666464488413739">"فریب دہی کی اطلاع دیں"</string>
-    <string name="delete" msgid="6784262386780496958">"حذف کریں"</string>
-    <string name="discard_drafts" msgid="5881484193628472105">"مسودے مسترد کریں"</string>
-    <string name="discard_failed" msgid="7520780769812210279">"مسترد کرنا ناکام ہو گیا"</string>
-    <string name="refresh" msgid="1533748989749277511">"ریفریش کریں"</string>
-    <string name="reply" msgid="8337757482824207118">"جواب دیں"</string>
-    <string name="reply_all" msgid="5366796103758360957">"سب کو جواب دیں"</string>
-    <string name="resume_draft" msgid="1272723181782570649">"ترمیم کریں"</string>
-    <string name="forward" msgid="4397585145490426320">"فارورڈ کریں"</string>
-    <string name="menu_compose" msgid="4575025207594709432">"تحریر کریں"</string>
-    <string name="menu_change_folders" msgid="2194946192901276625">"فولڈرز تبدیل کریں"</string>
-    <string name="menu_move_to" msgid="7948877550284452830">"اس میں منتقل کریں"</string>
-    <string name="menu_move_to_inbox" msgid="258554178236001444">"ان باکس میں منتقل کریں"</string>
-    <string name="menu_manage_folders" msgid="8486398523679534519">"فولڈر کی ترتیبات"</string>
-    <string name="menu_show_original" msgid="2330398228979616661">"خودکار سائزنگ پر لوٹیں"</string>
-    <string name="menu_settings" msgid="7993485401501778040">"ترتیبات"</string>
-    <string name="menu_search" msgid="1949652467806052768">"تلاش کریں"</string>
-    <string name="drawer_title" msgid="3766219846644975778">"نیویگیشن"</string>
-    <string name="mark_important" msgid="8781680450177768820">"اہم کا نشان لگائیں"</string>
-    <string name="mark_not_important" msgid="3342258155408116917">"اہم نہیں کا نشان لگائیں"</string>
-    <string name="add_cc_label" msgid="2249679001141195213">"‏Cc/Bcc شامل کریں"</string>
-    <string name="add_bcc_label" msgid="963745641238037813">"‏Bcc شامل کریں"</string>
-    <string name="quoted_text" msgid="977782904293216533">"حوالے کا متن شامل کریں"</string>
-    <string name="quoted_text_label" msgid="2296807722849923934">"متن کا حوالہ دیں"</string>
-    <string name="respond_inline" msgid="6609746292081928078">"درون سطر جواب دیں"</string>
-    <string name="bytes" msgid="651011686747499628">"<xliff:g id="COUNT">%s</xliff:g> B"</string>
-    <string name="kilobytes" msgid="1523463964465770347">"<xliff:g id="COUNT">%s</xliff:g> KB"</string>
-    <string name="megabytes" msgid="4309397368708773323">"<xliff:g id="COUNT">%s</xliff:g> MB"</string>
-    <string name="attachment_image" msgid="6375306026208274564">"تصویر"</string>
-    <string name="attachment_video" msgid="7119476472603939848">"ویڈیو"</string>
-    <string name="attachment_audio" msgid="7097658089301809284">"آڈیو"</string>
-    <string name="attachment_text" msgid="3485853714965922173">"متن"</string>
-    <string name="attachment_application_msword" msgid="2110108876623152162">"دستاویز"</string>
-    <string name="attachment_application_vnd_ms_powerpoint" msgid="425353008963359230">"پیشکش"</string>
-    <string name="attachment_application_vnd_ms_excel" msgid="5585781311136609103">"اسپریڈشیٹ"</string>
-    <string name="attachment_application_pdf" msgid="4207340200944655970">"PDF"</string>
-    <string name="attachment_unknown" msgid="3360536730101083926">"<xliff:g id="ATTACHMENTEXTENSION">%s</xliff:g> فائل"</string>
-    <string name="preview_attachment" msgid="6265457626086113833">"پیش منظر"</string>
-    <string name="save_attachment" msgid="375685179032130033">"محفوظ کریں"</string>
-    <string name="cancel_attachment" msgid="6900093625792891122">"منسوخ کریں"</string>
-    <string name="open_attachment" msgid="6100396056314739761">"کھولیں"</string>
-    <string name="install_attachment" msgid="8119470822958087928">"انسٹال کریں"</string>
-    <string name="download_again" msgid="8195787340878328119">"دوبارہ ڈاؤن لوڈ کریں"</string>
-    <string name="more_info_attachment" msgid="2899691682394864507">"معلومات"</string>
-    <string name="no_application_found" msgid="7309485680354949680">"کوئی بھی ایپلیکیشن اس منسلکہ کو دیکھنے کیلئے نہیں کھول سکتی۔"</string>
-    <string name="fetching_attachment" msgid="2286628490159574159">"منسلکہ کو بازیافت کر رہا ہے"</string>
-    <string name="please_wait" msgid="3953824147776128899">"براہ کرم انتظار کریں…"</string>
-    <string name="saved" msgid="161536102236967534">"محفوظ ہوگیا، <xliff:g id="SIZE">%s</xliff:g>"</string>
-    <string name="download_failed" msgid="3878373998269062395">"ڈاؤن لوڈ نہیں کرسکا۔ پھر کوشش کرنے کیلئے ٹچ کریں۔"</string>
-    <string name="menu_photo_save_all" msgid="2742869476474613396">"سبھی محفوظ کریں"</string>
-    <string name="menu_photo_share" msgid="6410980274832639330">"اشتراک کریں"</string>
-    <string name="menu_photo_share_all" msgid="3049053252719665320">"سبھی کا اشتراک کریں"</string>
-    <string name="menu_photo_print" msgid="3084679038179342333">"پرنٹ کریں"</string>
-    <string name="saving" msgid="6274238733828387433">"محفوظ ہو رہا ہے…"</string>
-    <string name="choosertitle_sharevia" msgid="3539537264873337959">"اشتراک کریں بذریعہ"</string>
-    <string name="contextmenu_openlink" msgid="6952228183947135362">"براؤزر میں کھولیں"</string>
-    <string name="contextmenu_copy" msgid="2584243784216385180">"کاپی کریں"</string>
-    <string name="contextmenu_copylink" msgid="8659897702269320063">"‏لنک کا URL کاپی کریں"</string>
-    <string name="contextmenu_view_image" msgid="1031172763893491000">"تصویر دیکھیں"</string>
-    <string name="contextmenu_dial_dot" msgid="8881095692316726628">"ڈائل کریں…"</string>
-    <string name="contextmenu_sms_dot" msgid="5319737001771622657">"SMS…"</string>
-    <string name="contextmenu_add_contact" msgid="2310064151427072475">"رابطہ شامل کریں"</string>
-    <string name="contextmenu_send_mail" msgid="3834654593200105396">"ای میل بھیجیں"</string>
-    <string name="contextmenu_map" msgid="5118951927399465521">"نقشہ"</string>
-    <string name="contextmenu_sharelink" msgid="8670940060477758709">"لنک کا اشتراک کریں"</string>
-    <string name="contextmenu_help" msgid="4209674157707873384">"مدد"</string>
-    <string name="contextmenu_feedback" msgid="8319100902136337085">"تاثرات بھیجیں"</string>
-    <!-- no translation found for num_selected (7990204488812654380) -->
-    <skip />
-  <plurals name="move_conversation">
-    <item quantity="one" msgid="237882018518207244">"گفتگو منتقل کریں"</item>
-    <item quantity="other" msgid="6639576653114141743">"<xliff:g id="ID_1">%1$d</xliff:g> گفتگوئیں منتقل کریں"</item>
-  </plurals>
-    <string name="content_description" msgid="854320355052962069">"<xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g> <xliff:g id="SUBJECT">%3$s</xliff:g> کے بارے میں، <xliff:g id="SNIPPET">%4$s</xliff:g> بتاریخ <xliff:g id="DATE">%5$s</xliff:g>، <xliff:g id="READSTATE">%6$s</xliff:g>"</string>
-    <string name="content_description_today" msgid="1634422834354116955">"<xliff:g id="TOHEADER">%1$s</xliff:g><xliff:g id="PARTICIPANT">%2$s</xliff:g> <xliff:g id="SUBJECT">%3$s</xliff:g> کے بارے میں، <xliff:g id="SNIPPET">%4$s</xliff:g> بوقت <xliff:g id="TIME">%5$s</xliff:g>، <xliff:g id="READSTATE">%6$s</xliff:g>"</string>
-    <string name="read_string" msgid="5495929677508576520">"گفتگو پڑھ لی گئی"</string>
-    <string name="unread_string" msgid="7342558841698083381">"بغیر پڑھی ہوئی گفتگو"</string>
-    <string name="filtered_tag" msgid="721666921386074505">"[<xliff:g id="TAG">%1$s</xliff:g>]<xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="badge_and_subject" msgid="3979372269373936750">"<xliff:g id="ID_1">%1$s</xliff:g> <xliff:g id="ID_2">%2$s</xliff:g>"</string>
-  <plurals name="draft">
-    <item quantity="one" msgid="6717535677167943402">"مسودہ"</item>
-    <item quantity="other" msgid="1335781147509740039">"مسودے"</item>
-  </plurals>
-    <string name="sending" msgid="5600034886763930499">"بھیج رہا ہے…"</string>
-    <string name="message_retrying" msgid="5335188121407261331">"پھر کوشش ہو رہی ہے…"</string>
-    <string name="message_failed" msgid="7887650587384601790">"ناکام ہو گیا"</string>
-    <string name="send_failed" msgid="2186285547449865010">"پیغام نہیں بھیجا گیا۔"</string>
-    <string name="me_object_pronoun" msgid="4674452244417913816">"میں"</string>
-    <string name="me_subject_pronoun" msgid="7479328865714008288">"میں"</string>
-  <plurals name="confirm_delete_conversation">
-    <item quantity="one" msgid="7605755011865575440">"اس گفتگو کو حذف کریں؟"</item>
-    <item quantity="other" msgid="1585660381208712562">"ان <xliff:g id="COUNT">%1$d</xliff:g> گفتگوؤں کو حذف کریں؟"</item>
-  </plurals>
-  <plurals name="confirm_archive_conversation">
-    <item quantity="one" msgid="9105551557653306945">"اس گفتگو کو آرکائیو کریں؟"</item>
-    <item quantity="other" msgid="2001972798185641108">"ان <xliff:g id="COUNT">%1$d</xliff:g> گفتگوؤں کو آرکائیو کریں؟"</item>
-  </plurals>
-  <plurals name="confirm_discard_drafts_conversation">
-    <item quantity="one" msgid="2030421499893210789">"یہ پیغام مسترد کریں؟"</item>
-    <item quantity="other" msgid="782234447471532005">"ان <xliff:g id="COUNT">%1$d</xliff:g> پیغامات کو مسترد کریں؟"</item>
-  </plurals>
-    <string name="confirm_discard_text" msgid="5172680524418848519">"یہ پیغام مسترد کریں؟"</string>
-    <string name="loading_conversations" msgid="7255732786298655246">"لوڈ ہو رہی ہیں…"</string>
-    <string name="empty_inbox" msgid="5901734942362315228">"آپ نے سب کام مکمل کر لیا ہے! براہ کرم اپنے دن سے لطف اندوز ہوں۔"</string>
-    <string name="empty_search" msgid="8564899353449880818">"افوہ! ہمیں \"<xliff:g id="SEARCH_QUERY">%1$s</xliff:g>\" کیلئے کچھ نہیں ملا۔"</string>
-    <string name="empty_spam_folder" msgid="3288985543286122800">"ارے واہ، یہاں کوئی سپام نہیں ہے!"</string>
-    <string name="empty_trash_folder" msgid="378119063015945020">"یہاں کوئی کوڑے دان نہیں ہے۔ ری سائیکل کرنے کا شکریہ!"</string>
-    <string name="empty_folder" msgid="3227552635613553855">"یہاں کوئی میل نہیں ہے۔"</string>
-    <string name="getting_messages" msgid="8403333791332403244">"آپ کے پیغامات کو حاصل کیا جا رہا ہے"</string>
-    <string name="undo" msgid="8256285267701059609">"کالعدم کریں"</string>
-  <plurals name="conversation_unstarred">
-    <item quantity="one" msgid="839233699150563831">"<xliff:g id="COUNT">%1$d</xliff:g> گفتگو سے ستارہ کا نشان ہٹایا جا رہا ہے۔"</item>
-    <item quantity="other" msgid="7677305734833709789">"<xliff:g id="COUNT">%1$d</xliff:g> گفتگوؤں سے ستارے کا نشان ہٹایا جا رہا ہے۔"</item>
-  </plurals>
-  <plurals name="conversation_muted">
-    <item quantity="one" msgid="3339638225564408438">"‏‎&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;‎ کو خاموش کر دیا گیا۔"</item>
-    <item quantity="other" msgid="4276111931404654219">"‏‎&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;‎ کو خاموش کر دیا گیا۔"</item>
-  </plurals>
-  <plurals name="conversation_spammed">
-    <item quantity="one" msgid="6986172030710967687">"‏‎&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;‎ کی سپام کے بطور اطلاع دی گئی۔"</item>
-    <item quantity="other" msgid="5900913789259199137">"‏‎&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;‎ کی سپام کے بطور اطلاع دی گئی۔"</item>
-  </plurals>
-  <plurals name="conversation_not_spam">
-    <item quantity="one" msgid="2294904093653094150">"‏‎&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;‎ کی سپام نہیں کے بطور اطلاع دی گئی۔"</item>
-    <item quantity="other" msgid="4966164423991098144">"‏‎&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;‎ کی سپام نہیں کے بطور اطلاع دی گئی۔"</item>
-  </plurals>
-  <plurals name="conversation_not_important">
-    <item quantity="one" msgid="3824809189993339030">"‏‎&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;‎ پر غیر اہم کا نشان لگایا گیا۔"</item>
-    <item quantity="other" msgid="1215472798075869124">"‏‎&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;‎ پر اہم نہیں کا نشان لگایا گیا۔"</item>
-  </plurals>
-  <plurals name="conversation_phished">
-    <item quantity="one" msgid="4330095881258771201">"‏‎&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;‎ کی فریب دہی کے بطور اطلاع دی گئی۔"</item>
-    <item quantity="other" msgid="9218674052779504277">"‏‎&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;‎ کی فریب دہی کے بطور اطلاع دی گئی۔"</item>
-  </plurals>
-  <plurals name="conversation_archived">
-    <item quantity="one" msgid="4127890884907503696">"‏‎&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;‎ آرکائیو ہوگئی۔"</item>
-    <item quantity="other" msgid="7789480176789922968">"‏‎&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;‎ آرکائیو ہوگئیں۔"</item>
-  </plurals>
-  <plurals name="conversation_deleted">
-    <item quantity="one" msgid="5591889079235938982">"‏‎&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;‎ حذف ہوگئی۔"</item>
-    <item quantity="other" msgid="7060256058737892078">"‏‎&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;‎ حذف ہو گئیں۔"</item>
-  </plurals>
-    <string name="deleted" msgid="7378013910782008375">"حذف ہو گئی"</string>
-    <string name="archived" msgid="6283673603512713022">"آرکائیو ہو گئی"</string>
-    <string name="folder_removed" msgid="5656281444688183676">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> سے ہٹا دی گئی"</string>
-  <plurals name="conversation_folder_changed">
-    <item quantity="one" msgid="6463727361987396734">"فولڈر تبدیل کردیا۔"</item>
-    <item quantity="other" msgid="8815390494333090939">"فولڈرز تبدیل کردیے۔"</item>
-  </plurals>
-    <string name="conversation_folder_moved" msgid="6475872337373081683">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> میں منتقل کر دی گئی"</string>
-    <string name="search_results_header" msgid="1529438451150580188">"نتائج"</string>
-    <string name="search_unsupported" msgid="2873920566477359177">"تلاش اس اکاؤنٹ پر تعاون یافتہ نہیں ہے۔"</string>
-    <string name="add_label" msgid="3285338046038610902">"فولڈر شامل کریں"</string>
-    <string name="new_incoming_messages_one" msgid="5933087567495998661">"<xliff:g id="SENDER">%s</xliff:g> کی جانب سے نیا پیغام دکھائیں۔"</string>
-  <plurals name="new_incoming_messages_many">
-    <item quantity="other" msgid="4394042684501388790">"<xliff:g id="COUNT">%1$d</xliff:g> نئے پیغامات دکھائیں۔"</item>
-  </plurals>
-    <string name="date_and_view_details" msgid="2952994746916149969">"‏<xliff:g id="DATE">%1$s</xliff:g> &lt;a href=\'http://www.example.com\'&gt;تفصیل دیکھیں&lt;/a&gt;"</string>
-    <string name="hide_details" msgid="8018801050702453314">"تفصیلات چھپائیں"</string>
-    <string name="to_message_header" msgid="3954385178027011919">"بنام <xliff:g id="RECIPIENTS">%1$s</xliff:g>"</string>
-    <string name="contact_info_string" msgid="6484930184867405276">"<xliff:g id="NAME">%1$s</xliff:g> کیلئے رابطے کی معلومات دکھائیں"</string>
-    <string name="contact_info_string_default" msgid="6204228921864816351">"رابطے کی معلومات دکھائیں"</string>
-  <plurals name="show_messages_read">
-    <item quantity="other" msgid="5285673397387128129">"<xliff:g id="COUNT">%1$d</xliff:g> قدیم تر پیغامات"</item>
-  </plurals>
-    <string name="from_heading" msgid="48290556829713090">"منجانب:"</string>
-    <string name="replyto_heading" msgid="8275255318292059079">"جواب دیں بنام:"</string>
-    <string name="to_heading" msgid="3495203282540398336">"بنام: "</string>
-    <string name="to_heading_no_space" msgid="679167047628308670">"بنام:"</string>
-    <string name="cc_heading" msgid="5603892257866345823">"Cc:"</string>
-    <string name="bcc_heading" msgid="1482186590756218269">"Bcc:‎"</string>
-    <string name="date_heading" msgid="4213063948406397168">"تاریخ:"</string>
-    <string name="show_images" msgid="436044894053204084">"تصاویر دکھائیں"</string>
-    <string name="always_show_images" msgid="556087529413707819">"ہمیشہ اس مرسل کی جانب سے تصاویر دکھائیں"</string>
-    <string name="always_show_images_toast" msgid="3763157294047555051">"اس مرسل کی جانب سے تصاویر خود بخود دکھائی جائیں گی۔"</string>
-    <string name="address_display_format" msgid="2098008376913966177">"<xliff:g id="NAME">%1$s</xliff:g> <xliff:g id="EMAIL">%2$s</xliff:g>"</string>
-    <string name="address_display_format_with_via_domain" msgid="8108294635074750048">"<xliff:g id="NAME">%1$s</xliff:g> <xliff:g id="EMAIL">%2$s</xliff:g> بذریعہ <xliff:g id="VIA_DOMAIN">%3$s</xliff:g>"</string>
-    <string name="message_saved" msgid="3291655042310241793">"پیغام مسودہ کے بطور محفوظ ہو گیا۔"</string>
-    <string name="sending_message" msgid="2487846954946637084">"پیغام بھیج رہا ہے…"</string>
-    <string name="invalid_recipient" msgid="9157434699389936584">"پتہ <xliff:g id="WRONGEMAIL">%s</xliff:g> غلط ہے۔"</string>
-    <string name="show_elided" msgid="3456154624105704327">"حوالے کا متن دکھائیں"</string>
-    <string name="hide_elided" msgid="5768235486834692733">"▼ حوالہ کا متن چھپائیں"</string>
-    <string name="message_invite_title" msgid="5985161025144867256">"کیلنڈر کا دعوت نامہ"</string>
-    <string name="message_invite_calendar_view" msgid="9181966650840809197">"کیلنڈر میں دیکھیں"</string>
-    <string name="message_invite_label_attending" msgid="4194264767870003397">"جا رہے ہیں؟"</string>
-    <string name="message_invite_accept" msgid="8002758842580134835">"ہاں"</string>
-    <string name="message_invite_tentative" msgid="3199418731566655887">"شاید"</string>
-    <string name="message_invite_decline" msgid="6331040872447290777">"نہیں"</string>
-    <string name="enumeration_comma" msgid="2848850136844740850">"، "</string>
-    <string name="send_anyway" msgid="2727576121007079643">"بہر صورت بھیجیں"</string>
-    <string name="ok" msgid="6178802457914802336">"ٹھیک ہے"</string>
-    <string name="done" msgid="344354738335270292">"ہوگیا"</string>
-    <string name="cancel" msgid="4831678293149626190">"منسوخ کریں"</string>
-    <string name="clear" msgid="765949970989448022">"صاف کریں"</string>
-    <string name="next" msgid="2662478712866255138">"اگلا"</string>
-    <string name="previous" msgid="8985379053279804274">"پچھلا"</string>
-  <string-array name="sync_status">
-    <item msgid="4600303222943450797">"کامیابی"</item>
-    <item msgid="2972425114100316260">"کوئی کنکشن نہیں ہے۔"</item>
-    <item msgid="8594593386776437871">"سائن ان نہیں کر سکے۔"</item>
-    <item msgid="1375193906551623606">"سیکیورٹی کی خرابی۔"</item>
-    <item msgid="195177374927979967">"مطابقت پذیری نہیں کی جا سکی۔"</item>
-    <item msgid="8026148967150231130">"داخلی خرابی"</item>
-    <item msgid="5442620760791553027">"سرور کی خرابی"</item>
-  </string-array>
-    <string name="tap_to_configure" msgid="137172348280050643">"سیٹ اپ کیلئے چھوئیں"</string>
-    <string name="non_synced_folder_description" msgid="3044618511909304701">"گفتگوئیں دیکھنے کیلئے، یہ فولڈر مطابقت پذیر بنائیں۔"</string>
-    <string name="tap_to_configure_folder_sync" msgid="3280434399275638071">"فولڈر مطابقت پذیر بنائیں"</string>
-    <string name="widget_large_unread_count" msgid="8699435859096455837">"%d+"</string>
-    <string name="large_unseen_count" msgid="3055042669246912518">"‏‎<xliff:g id="COUNT">%d</xliff:g>+‎ نئے"</string>
-    <string name="unseen_count" msgid="5509898665569695288">"<xliff:g id="COUNT">%d</xliff:g> نئے"</string>
-  <plurals name="actionbar_unread_messages">
-    <item quantity="other" msgid="3863201473731766006">"<xliff:g id="COUNT">%1$d</xliff:g> بغیر پڑھے ہوئے"</item>
-  </plurals>
-    <string name="actionbar_large_unread_count" msgid="753635978542372792">"‏<xliff:g id="COUNT">%1$d</xliff:g>+‎ بغیر پڑھا ہوا"</string>
-    <string name="view_more_conversations" msgid="8377920000247101901">"مزید گفتگوئیں دیکھیں"</string>
-    <string name="loading_conversation" msgid="7931600025861500397">"لوڈ ہو رہی ہے…"</string>
-    <string name="activity_mailbox_selection" msgid="7489813868539767701">"اکاؤنٹ منتخب کریں"</string>
-    <string name="activity_folder_selection" msgid="8375243281001234750">"فولڈر منتخب کریں"</string>
-    <string name="folder_shortcut_widget_label" msgid="6466292659577092915">"ای میل فولڈر"</string>
-    <string name="change_folders_selection_dialog_title" msgid="9174464298613273814">"فولڈرز تبدیل کریں"</string>
-    <string name="move_to_selection_dialog_title" msgid="4052506464467083621">"اس میں منتقل کریں"</string>
-    <string name="search_hint" msgid="4916671414132334289">"میل تلاش کریں"</string>
-    <!-- no translation found for search_results_loaded (1784879343458807514) -->
-    <skip />
-    <string name="network_error" msgid="5931164247644972255">"کوئی کنکشن نہیں ہے"</string>
-    <string name="retry" msgid="916102442074217293">"دوبارہ کوشش کریں"</string>
-    <string name="load_more" msgid="8702691358453560575">"مزید لوڈ کریں"</string>
-    <!-- no translation found for load_attachment (3894318473827290350) -->
-    <skip />
-    <string name="shortcut_name_title" msgid="1562534040126088628">"فولڈر شارٹ کٹ کا نام دیں"</string>
-    <string name="wait_for_sync_title" msgid="4577632826912823075">"مطابقت پذیری کا انتظار ہے"</string>
-    <string name="not_synced_title" msgid="3600180500934086346">"اکاؤنٹ مطابقت پذیر نہیں ہے"</string>
-    <string name="wait_for_manual_sync_body" msgid="2823149409451003378">"یہ اکاؤنٹ خود کار طریقے سے مطابقت پذیر بنانے کیلئے متعین نہیں ہے\n میل کو ایک بار مطابقت پذیر بنانے کیلئے "<b>"ابھی مطابقت پذیر بنائیں"</b>" کو یا خود بخود میل کو مطابقت پذیر بنانے کے واسطے اس اکاؤنٹ کو متعین کرنے کیلئے "<b>"مطابقت پذیری کی ترتیبات تبدیل کریں"</b>" کو چھوئیں۔"</string>
-    <string name="manual_sync" msgid="2271479734895537848">"ابھی سنک کریں"</string>
-    <string name="change_sync_settings" msgid="3615852118397055361">"مطابقت پذیری ترتیبات تبدیل کریں"</string>
-    <string name="photo_load_failed" msgid="577471721679146999">"تصویر لوڈ نہیں ہو سکی"</string>
-    <string name="cant_move_or_change_labels" msgid="4155490583610926755">"انتخاب متعدد اکاؤنٹس پر مشتمل ہونے کی وجہ سے منتقل نہیں ہوسکتے۔"</string>
-    <string name="multiple_new_message_notification_item" msgid="1386588046275174918"><b>"<xliff:g id="SENDER">%1$s</xliff:g>"</b>"   <xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="single_new_message_notification_big_text" msgid="2170154732664242904">"<xliff:g id="SUBJECT">%1$s</xliff:g>\n<xliff:g id="SNIPPET">%2$s</xliff:g>"</string>
-    <string name="ignore_spam_warning" msgid="8760314545535838430">"مجھے اس پیغام پر بھروسہ ہے"</string>
-    <string name="via_domain" msgid="537951148511529082">"<xliff:g id="VIADOMAIN">%1$s</xliff:g> کے ذریعہ"</string>
-    <string name="signin" msgid="4699091478139791244">"سائن ان کریں"</string>
-    <string name="info" msgid="1357564480946178121">"معلومات"</string>
-    <string name="report" msgid="4318141326014579036">"اطلاع دیں"</string>
-    <string name="sync_error" msgid="1795794969006241678">"مطابقت پذیر نہیں بنایا جا سکا۔"</string>
-    <string name="sync_error_message" msgid="4182644657243736635">"مطابقت پذیر بنانے کیلئے آپ کے آلہ میں کافی اسٹوریج نہیں ہے۔"</string>
-    <string name="storage" msgid="4783683938444150638">"اسٹوریج"</string>
-    <string name="senders_split_token" msgid="6549228851819460081">"، "</string>
-    <string name="draft_count_format" msgid="9122583199850209286">" (<xliff:g id="COUNT">%1$s</xliff:g>)"</string>
-    <string name="all_folders_heading" msgid="9023770187629170967">"سبھی فولڈرز"</string>
-    <string name="recent_folders_heading" msgid="8943134955788867702">"حالیہ فولڈرز"</string>
-    <string name="message_details_title" msgid="60771875776494764">"پیغام کی تفصیلات"</string>
-    <string name="preference_advance_to_title" msgid="6385669491239514630">"خودکار پیش رفت"</string>
-  <string-array name="prefEntries_autoAdvance">
-    <item msgid="1505450878799459652">"جدید تر"</item>
-    <item msgid="8000986144872247139">"قدیم تر"</item>
-    <item msgid="8015001161633421314">"گفتگو کی فہرست"</item>
-  </string-array>
-  <string-array name="prefSummaries_autoAdvance">
-    <item msgid="8221665977497655719">"آپ کے حذف کرنے کے بعد جدید تر گفتگو دکھائیں"</item>
-    <item msgid="1721869262893378141">"آپ کے حذف کرنے کے بعد قدیم تر گفتگو دکھائیں"</item>
-    <item msgid="880913657385630195">"آپ کے حذف کرنے کے بعد گفتگو کی فہرست دکھائیں"</item>
-  </string-array>
-    <string name="prefDialogTitle_autoAdvance" msgid="5459235590885640678">"اس پر جائیں"</string>
-    <string name="clear_display_images_whitelist_title" msgid="2012677202404471778">"تصویر کی منظوریاں صاف کریں"</string>
-    <string name="clear_display_images_whitelist_dialog_title" msgid="1942692501166848471">"تصویر کی منظوریاں صاف کریں؟"</string>
-    <string name="clear_display_images_whitelist_dialog_message" msgid="3952553078559373729">"جن مرسلین کو آپ نے پہلے اجازت دی ان کی جانب سے ان لائن تصاویر کا ڈسپلے روکیں۔"</string>
-    <string name="sender_whitelist_cleared" msgid="2490984995927904030">"تصاویر خود بخود نہیں دکھائی جائیں گی"</string>
-    <string name="preferences_signature_title" msgid="2318034745474929902">"دستخط"</string>
-    <string name="preferences_signature_dialog_title" msgid="4801741764511807064">"دستخط"</string>
-    <string name="preferences_signature_summary_not_set" msgid="3776614319388053784">"سیٹ نہیں ہے"</string>
-    <string name="notification_action_reply" msgid="8378725460102575919">"جواب دیں"</string>
-    <string name="notification_action_reply_all" msgid="5693469099941000037">"سب کو جواب دیں"</string>
-    <string name="notification_action_archive" msgid="2884874164831039047">"آرکائیو کریں"</string>
-    <string name="notification_action_remove_label" msgid="3714785653186750981">"لیبل ہٹائیں"</string>
-    <string name="notification_action_delete" msgid="3201627482564624132">"حذف کریں"</string>
-    <string name="notification_action_undo_archive" msgid="600186958134073582">"آرکائیو ہوگیا"</string>
-    <string name="notification_action_undo_remove_label" msgid="8341924850540100690">"لیبل ہٹا دیا گیا"</string>
-    <string name="notification_action_undo_delete" msgid="6915612337413587103">"حذف ہو گیا"</string>
-    <string name="veiled_address" msgid="2670378260196977266"></string>
-    <string name="veiled_alternate_text" msgid="6343564357099807582"></string>
-    <string name="veiled_alternate_text_unknown_person" msgid="6728323554307952217"></string>
-    <string name="veiled_summary_unknown_person" msgid="2122359944161241551"></string>
-    <string name="label_notification_ticker" msgid="323232821061341014">"<xliff:g id="LABEL">%s</xliff:g>: <xliff:g id="NOTIFICATION">%s</xliff:g>"</string>
-  <plurals name="new_messages">
-    <item quantity="one" msgid="3446656407520493241">"<xliff:g id="COUNT">%1$d</xliff:g> نیا پیغام"</item>
-    <item quantity="other" msgid="3531683811183204615">"<xliff:g id="COUNT">%1$d</xliff:g> نئے پیغامات"</item>
-  </plurals>
-    <string name="single_new_message_notification_title" msgid="7954710563222504868">"<xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="silent_ringtone" msgid="1570794756474381886">"خاموش"</string>
-    <string name="preference_removal_action_title" msgid="4703834472477137634">"‏آرکائیو کرنے اور‎ حذف کرنے کی کارروائیاں"</string>
-  <string-array name="prefEntries_removal_action">
-    <item msgid="954772302016538814">"صرف آرکائیو دکھائیں"</item>
-    <item msgid="7212690302706180254">"صرف حذف دکھائیں"</item>
-    <item msgid="2539051197590685708">"آرکائیو اور حذف کریں دکھائیں"</item>
-  </string-array>
-  <string-array name="prefSummaries_removal_action_summary">
-    <item msgid="6877416142040695022">"صرف آرکائیو دکھائیں"</item>
-    <item msgid="1510017057984222376">"صرف حذف کریں دکھائیں"</item>
-    <item msgid="3196207224108008441">"آرکائیو اور حذف کریں دکھائیں"</item>
-  </string-array>
-    <string name="prefDialogTitle_removal_action" msgid="266548424110393246">"کارروائیاں آرکائیو اور حذف کریں"</string>
-    <string name="preferences_default_reply_all_title" msgid="7255858488369635327">"سب کو جواب دیں"</string>
-    <string name="preferences_default_reply_all_summary_impl" msgid="895581085692979709">"پیغام کے جوابات کیلئے بطور ڈیفالٹ استعمال کریں"</string>
-    <string name="preference_swipe_title_archive" msgid="9122333537761282714">"آرکائیو کرنے کیلئے سوائپ کریں"</string>
-    <string name="preference_swipe_title_delete" msgid="4860474024917543711">"حذف کرنے کیلئے سوائپ کریں"</string>
-    <string name="preference_swipe_description" msgid="3036560323237015010">"گفتگو کی فہرست میں"</string>
-    <string name="preference_sender_image_title" msgid="7890813537985591865">"مرسل کی تصویر"</string>
-    <string name="preference_sender_image_description" msgid="3586817690132199889">"گفتگو کی فہرست میں نام کے ساتھ دکھائیں"</string>
-    <string name="empty_trash" msgid="3385937024924728399">"کوڑے دان خالی کریں"</string>
-    <string name="empty_spam" msgid="2911988289997281371">"سپام خالی کریں"</string>
-    <string name="empty_trash_dialog_title" msgid="2104898489663621508">"کوڑے دان خالی کریں؟"</string>
-    <string name="empty_spam_dialog_title" msgid="1130319045917820569">"سپام خالی کریں؟"</string>
-  <plurals name="empty_folder_dialog_message">
-    <item quantity="one" msgid="3315412388217832914">"<xliff:g id="COUNT">%1$d</xliff:g> پیغام مستقل طور پر حذف ہو جائے گا۔"</item>
-    <item quantity="other" msgid="263840304486020101">"<xliff:g id="COUNT">%1$d</xliff:g> پیغامات مستقل طور پر حذف ہو جائیں گے۔"</item>
-  </plurals>
-    <string name="drawer_open" msgid="2285557278907103851">"نیویگیشن دراز کھولیں"</string>
-    <string name="drawer_close" msgid="2065829742127544297">"نیویگیشن دراز بند کریں"</string>
-    <string name="conversation_photo_welcome_text" msgid="836483155429003787">"وہ گفتگو منتخب کرنے کیلئے مرسل کی تصویر چھوئیں۔"</string>
-    <string name="long_press_to_select_tip" msgid="1660881999120625177">"ایک گفتگو منتخب کرنے کیلئے چھوئیں اور پکڑے رہیں، پھر مزید کو منتخب کرنے کیلئے چھوئیں۔"</string>
-    <string name="folder_icon_desc" msgid="6272938864914794739">"فولڈر کا آئیکن"</string>
-    <string name="add_account" msgid="5905863370226612377">"اکاؤنٹ شامل کریں"</string>
-    <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"تجویز برخاست کریں"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"خودکار مطابقت پذیری آف ہے۔"</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"آن کرنے کیلئے چھوئیں۔"</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"اکاؤنٹ کی مطابقت پذیری آف ہے۔"</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"<xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g> میں آن کردیں۔"</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"اکاؤنٹ کی ترتیبات"</string>
-    <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="OUTBOX">%2$s</xliff:g> میں <xliff:g id="NUMBER">%1$s</xliff:g> غیر مرسلہ"</string>
-    <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"خودکار مطابقت پذیری آن کریں؟"</string>
-    <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"‏صرف Gmail نہیں بلکہ سبھی ایپس اور اکاؤنٹس میں آپ جو تبدیلیاں کرتے ہیں وہ ویب، آپ کے دوسرے آلات اور آپ کے <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g> کے بیچ مطابقت پذیر ہوں گی۔"</string>
-    <string name="phone" msgid="4142617042507912053">"فون"</string>
-    <string name="tablet" msgid="4593581125469224791">"ٹیبلٹ"</string>
-    <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="7239160845196929866">"آن کریں"</string>
-    <string name="show_n_more_folders" msgid="5769610839632786654">"<xliff:g id="NUMBER">%1$s</xliff:g> مزید فولڈرز دکھائیں"</string>
-    <string name="hide_folders" msgid="7618891933409521283">"فولڈرز چھپائیں"</string>
-    <string name="print" msgid="7987949243936577207">"پرنٹ کریں"</string>
-    <string name="print_all" msgid="4011022762279519941">"سبھی پرنٹ کریں"</string>
-  <plurals name="num_messages">
-    <item quantity="one" msgid="8071234386915191851">"<xliff:g id="COUNT">%1$d</xliff:g> پیغام"</item>
-    <item quantity="other" msgid="962415099931188360">"<xliff:g id="COUNT">%1$d</xliff:g> پیغامات"</item>
-  </plurals>
-    <string name="date_message_received_print" msgid="4168417403884350040">"<xliff:g id="DAY_AND_DATE">%1$s</xliff:g> بوقت <xliff:g id="TIME">%2$s</xliff:g>"</string>
-    <string name="draft_to_heading" msgid="7370121943946205024">"مسودہ بنام:"</string>
-    <string name="draft_heading" msgid="7032951343184552800">"مسودہ"</string>
-    <string name="quoted_text_hidden_print" msgid="5256754205675159141">"حوالے کا متن مخفی ہوگیا"</string>
-  <plurals name="num_attachments">
-    <item quantity="one" msgid="5494465717267988888">"<xliff:g id="COUNT">%1$d</xliff:g> منسلکہ"</item>
-    <item quantity="other" msgid="5422167728480739361">"<xliff:g id="COUNT">%1$d</xliff:g> منسلکات"</item>
-  </plurals>
-    <string name="no_subject" msgid="5622708348540036959">"(کوئی موضوع نہیں ہے)"</string>
-    <string name="vacation_responder" msgid="5570132559074523806">"تعطیل کا جواب دہندہ"</string>
-    <string name="preferences_vacation_responder_title" msgid="2268482117730576123">"تعطیل کا جواب دہندہ"</string>
-    <string name="vacation_responder_body_hint_text" msgid="9087613123105158494">"پیغام"</string>
-    <string name="send_to_contacts_text" msgid="124432913980620545">"صرف میرے رابطوں کو بھیجیں"</string>
-    <string name="send_to_domain_text" msgid="5064559546745918393">"صرف <xliff:g id="DOMAIN">%1$s</xliff:g> کو بھیجیں"</string>
-    <string name="pick_start_date_title" msgid="2274665037355224165">"شروع ہوتی ہے"</string>
-    <string name="pick_end_date_title" msgid="733396083649496600">"ختم ہوتی ہے: (اختیاری)"</string>
-    <string name="date_not_set" msgid="3251555782945051904">"سیٹ نہیں ہے"</string>
-    <string name="set_end_date_dialog_title" msgid="7543009262788808443">"تاریخ اختتام (اختیاری)"</string>
-    <string name="custom_date" msgid="5794846334232367838">"حسب ضرورت"</string>
-    <string name="date_none" msgid="1061426502665431412">"کوئی نہیں"</string>
-    <string name="discard_changes" msgid="5699760550972324746">"تبدیلیاں مسترد کریں؟"</string>
-    <string name="vacation_responder_changes_saved" msgid="91448817268121249">"تعطیل کا جواب دہندہ میں تبدیلیاں محفوظ ہوگئیں"</string>
-    <string name="vacation_responder_changes_discarded" msgid="21756037735539983">"تعطیل کا جواب دہندہ میں تبدیلیاں ضائع ہوگئیں"</string>
-    <string name="vacation_responder_off" msgid="4429909341193366667">"آف"</string>
-    <string name="vacation_responder_on" msgid="4913238379320882449">"آن، <xliff:g id="DATE">%1$s</xliff:g> سے"</string>
-    <string name="vacation_responder_on_with_end_date" msgid="4360941815371475955">"آن، از <xliff:g id="START_DATE">%1$s</xliff:g> تا <xliff:g id="END_DATE">%2$s</xliff:g>"</string>
-    <string name="vacation_responder_empty_subject_and_body_warning" msgid="6233629618520852439">"ایک موضوع یا پیغام شامل کریں"</string>
-    <string name="view_entire_message" msgid="823281796655014454">"پورا پیغام ملاحظہ کریں"</string>
-    <string name="eml_loader_error_toast" msgid="6577383216635400167">"یہ فائل نہیں کھول سکتے"</string>
-    <string name="help_and_info" msgid="3708286489943154681">"مدد"</string>
-    <string name="help_and_feedback" msgid="7211458338163287670">"مدد اور تاثرات"</string>
-    <string name="feedback" msgid="204247008751740034">"تاثرات بھیجیں"</string>
-    <string name="copyright" msgid="3121335168340432582">"‎©<xliff:g id="YEAR">%1$d</xliff:g> Google Inc.‎"</string>
-    <string name="version" msgid="1161745345056656547">"<xliff:g id="APP_NAME">%1$s</xliff:g> ورژن <xliff:g id="VERSION">%2$s</xliff:g>"</string>
-    <string name="view_app_page" msgid="3241990517052398927"></string>
-    <string name="print_dialog" msgid="8895536548487605661">"پرنٹ کریں…"</string>
-    <string name="copyright_information" msgid="971422874488783312">"کاپی رائٹ کی معلومات"</string>
-    <string name="privacy_policy" msgid="212094623396418302">"راز داری کی پالیسی"</string>
-    <string name="open_source_licenses" msgid="8643615555920977752">"اوپن سورس لائسنسز"</string>
-    <string name="reply_choice_yes" msgid="3327633032975373220">"ہاں"</string>
-    <string name="reply_choice_no" msgid="7068775605915475207">"نہیں"</string>
-    <string name="reply_choice_ok" msgid="7881073621845053152">"ٹھیک ہے"</string>
-    <string name="reply_choice_hehe" msgid="6054314968043050748">"Hehe"</string>
-    <string name="reply_choice_thanks" msgid="4978961954288364694">"شکریہ"</string>
-    <string name="reply_choice_i_agree" msgid="2496652737796884298">"میں متفق ہوں"</string>
-    <string name="reply_choice_nice" msgid="4465894941302838676">"اچھا"</string>
-    <string name="reply_on_my_way" msgid="5645003971107444269">"راستے میں ہوں"</string>
-    <string name="reply_choice_later" msgid="4629219072859486413">"ٹھیک ہے، آپ سے رابطہ کرتا ہوں"</string>
-    <string name="reply_choice_smiling_face" msgid="1772253938506548631">"‎:)‎"</string>
-    <string name="reply_choice_frowning_face" msgid="6260338807944002651">"‎:(‎"</string>
-    <string name="preference_header_action_confirmations" msgid="3922674681156121948">"کارروائی کی توثیقات"</string>
-    <string name="preference_confirm_before_delete_title" msgid="7563587174619033835">"حذف کرنے سے پہلے توثیق کریں"</string>
-    <string name="preference_confirm_before_archive_title" msgid="7318645995655875718">"آرکائیو کرنے سے پہلے توثیق کریں"</string>
-    <string name="preference_confirm_before_send_title" msgid="4136585783513077039">"بھیجنے سے پہلے توثیق کریں"</string>
-    <string name="preferences_conversation_mode_title" msgid="389352009651720838">"پیغامات کو آٹو فٹ کریں"</string>
-    <string name="preferences_conversation_mode_summary" msgid="5730999743867653106">"پیغامات کو اسکرین میں فٹ کرنے کیلئے سکیڑیں"</string>
-    <string name="preferences_disable_snap_headers_title" msgid="7257824136988429629">"پیغام کی کارروائیاں"</string>
-  <string-array name="prefSummaries_snapHeader">
-    <item msgid="43373293784193461">"پیغام کی کارروائیوں کو ہمیشہ اسکرین کے اوپر دکھائیں"</item>
-    <item msgid="1765271305989996747">"صرف پورٹریٹ میں گھمائے جانے پر پیغام کی کارروائیوں کو اسکرین کے اوپر دکھائیں"</item>
-    <item msgid="6311113076575333488">"پیغام کی کارروائیوں کو پیغام ہیڈر کے باہر نہ دکھائیں"</item>
-  </string-array>
-  <string-array name="prefEntries_snapHeader">
-    <item msgid="6906986566816683587">"ہمیشہ دکھائیں"</item>
-    <item msgid="113299655708990672">"صرف پورٹریٹ میں دکھائیں"</item>
-    <item msgid="4403750311175924065">"نہ دکھائیں"</item>
-  </string-array>
-    <string name="clear_history_title" msgid="5536216295725760357">"تلاش کی سرگزشت صاف کریں"</string>
-    <string name="search_history_cleared" msgid="1461946302763342640">"تلاش کی سرگزشت صاف کر دی گئی۔"</string>
-    <string name="clear_history_dialog_title" msgid="3503603389704365385">"تلاش کی سرگزشت صاف کریں؟"</string>
-    <string name="clear_history_dialog_message" msgid="5202922561632407778">"آپ کے ذریعے کی گئی سبھی سابقہ تلاشیوں کو ہٹا دیا جائے گا۔"</string>
-    <string name="manage_accounts_menu_item" msgid="4734660452395086786">"اکاؤنٹس کا نظم کریں"</string>
-    <string name="general_preferences_title" msgid="4212138728220418162">"عام ترتیبات"</string>
-    <string name="activity_preferences" msgid="8966077432517613292">"ترتیبات"</string>
-</resources>
diff --git a/res/values-uz-rUZ-sw600dp/strings.xml b/res/values-uz-rUZ-sw600dp/strings.xml
deleted file mode 100644
index d506a7b..0000000
--- a/res/values-uz-rUZ-sw600dp/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-     Copyright (C) 2012 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Cc/Bcc"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Bcc"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Jildlarni boshqarish"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Barcha bildirishnomalar uchun standart sifatida foydalanish"</string>
-</resources>
diff --git a/res/values-uz-rUZ/strings.xml b/res/values-uz-rUZ/strings.xml
deleted file mode 100644
index 20441df..0000000
--- a/res/values-uz-rUZ/strings.xml
+++ /dev/null
@@ -1,485 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-     Copyright (C) 2011 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- no translation found for from (5159056500059912358) -->
-    <skip />
-    <string name="to" msgid="3971614275716830581">"Kimga"</string>
-    <string name="cc" msgid="8768828862207919684">"Cc"</string>
-    <string name="bcc" msgid="519303553518479171">"Bcc"</string>
-    <string name="subject_hint" msgid="2136470287303571827">"Mavzu"</string>
-    <string name="body_hint" msgid="6478994981747057817">"Xabar matni"</string>
-    <string name="add_file_attachment" msgid="2604880054248593993">"Fayl biriktirish"</string>
-    <string name="add_photo_attachment" msgid="7163589794940909528">"Rasm biriktirish"</string>
-    <string name="save_draft" msgid="2669523480789672118">"Qoralamani saqlash"</string>
-    <string name="discard" msgid="4905982179911608430">"Bekor qilish"</string>
-    <string name="compose" msgid="2602861958391035523">"Xat yozish"</string>
-  <string-array name="compose_modes">
-    <item msgid="9000553538766397816">"Javob berish"</item>
-    <item msgid="2767793214788399009">"Barchasiga"</item>
-    <item msgid="2758162027982270607">"Yo‘naltirish"</item>
-  </string-array>
-    <string name="reply_attribution" msgid="1114972798797833259">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="PERSON">%s</xliff:g> yozdi:"</string>
-    <string name="forward_attribution" msgid="597850048345475752">"---------- Qayta yo‘naltirilgan xabar ----------&lt;br&gt;Kimdan: <xliff:g id="FROM">%1$s</xliff:g>&lt;br&gt;Sana: <xliff:g id="DATE">%2$s</xliff:g>&lt;br&gt;Mavzu: <xliff:g id="SUBJECT">%3$s</xliff:g>&lt;br&gt;Kimga: <xliff:g id="TO">%4$s</xliff:g>&lt;br&gt;"</string>
-    <string name="forward_attribution_no_headers" msgid="1828826576779486239">"---------- Qayta yo‘naltirilgan xabar ----------"</string>
-    <string name="cc_attribution" msgid="2928584226469388899">"Cc: <xliff:g id="CC">%1$s</xliff:g>&lt;br&gt;"</string>
-    <string name="select_attachment_type" msgid="353236686616663062">"Biriktirma fayli turini tanlang"</string>
-    <string name="too_large_to_attach_single" msgid="2669897137966512530">"Fayl hajmi <xliff:g id="MAXSIZE">%1$s</xliff:g> dan oshib ketmasligi lozim."</string>
-    <string name="too_large_to_attach_multiple" msgid="1620163295709036343">"Bir yoki undan ortiq fayllar biriktirilmadi: cheklovdan (<xliff:g id="MAXSIZE">%1$s</xliff:g>) oshib ketdi."</string>
-    <string name="too_large_to_attach_additional" msgid="4964155563465970480">"Faylni biriktirib bo‘lmadi: cheklovdan (<xliff:g id="MAXSIZE">%1$s</xliff:g>) oshib ketdi."</string>
-    <string name="generic_attachment_problem" msgid="4683974765387240723">"Faylni biriktirib bo‘lmadi."</string>
-    <string name="recipient_needed" msgid="319816879398937214">"Kamida bitta qabul qiluvchini ko‘rsating."</string>
-    <string name="recipient_error_dialog_title" msgid="760741480291963706">"Qabul qiluvchi bilan bog‘liq xatolik"</string>
-    <string name="confirm_send_title" msgid="4664971589247101530">"Xabar yuborilsinmi?"</string>
-    <string name="confirm_send_message_with_no_subject" msgid="1442628074022609987">"Xabar mavzusini ko‘rsating."</string>
-    <string name="confirm_send_message_with_no_body" msgid="3329355318700201516">"Xabar matni bo‘m-bo‘sh."</string>
-    <string name="confirm_send_message" msgid="6211518590166222735">"Ushbu xabar yuborilsinmi?"</string>
-    <string name="message_discarded" msgid="6792661321962262024">"Xabar bekor qilindi."</string>
-    <string name="signature" msgid="3172144541947408374">\n\n"<xliff:g id="SIGNATURE">%s</xliff:g>"</string>
-    <string name="custom_from_account_label" msgid="5042317430007736322">"Kimdan:"</string>
-    <string name="send" msgid="4269810089682120826">"Yuborish"</string>
-    <string name="mark_read" msgid="579388143288052493">"O‘qilgan deb belgilash"</string>
-    <string name="mark_unread" msgid="6245060538061533191">"O‘qilmagan deb belgilash"</string>
-    <string name="mute" msgid="9164839998562321569">"Ko‘rsatmaslik"</string>
-    <string name="add_star" msgid="3275117671153616270">"Yulduzcha qo‘shish"</string>
-    <string name="remove_star" msgid="9126690774161840733">"Yulduzchani olib tashlash"</string>
-    <string name="remove_folder" msgid="2379905457788576297">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> jildidan olib tashlash"</string>
-    <string name="archive" msgid="5978663590021719939">"Arxivlash"</string>
-    <string name="report_spam" msgid="4106897677959987340">"Spam haqida xabar berish"</string>
-    <string name="mark_not_spam" msgid="8617774236231366651">"Spam emas deb belgilash"</string>
-    <string name="report_phishing" msgid="8454666464488413739">"Fishing haqida xabar berish"</string>
-    <string name="delete" msgid="6784262386780496958">"O‘chirish"</string>
-    <string name="discard_drafts" msgid="5881484193628472105">"Qoralamalarni bekor qilish"</string>
-    <!-- no translation found for discard_failed (7520780769812210279) -->
-    <skip />
-    <string name="refresh" msgid="1533748989749277511">"Yangilash"</string>
-    <string name="reply" msgid="8337757482824207118">"Javob berish"</string>
-    <string name="reply_all" msgid="5366796103758360957">"Barchasiga"</string>
-    <string name="resume_draft" msgid="1272723181782570649">"Tahrirlash"</string>
-    <string name="forward" msgid="4397585145490426320">"Qayta yo‘naltirish"</string>
-    <string name="menu_compose" msgid="4575025207594709432">"Xat yozish"</string>
-    <string name="menu_change_folders" msgid="2194946192901276625">"Jildlarni o‘zgartirish"</string>
-    <string name="menu_move_to" msgid="7948877550284452830">"Ko‘chirish"</string>
-    <string name="menu_move_to_inbox" msgid="258554178236001444">"Kelgan xatlarga ko‘chirish"</string>
-    <string name="menu_manage_folders" msgid="8486398523679534519">"Jild sozlamalari"</string>
-    <string name="menu_show_original" msgid="2330398228979616661">"Asl o‘lchamini ko‘rsatish"</string>
-    <string name="menu_settings" msgid="7993485401501778040">"Sozlamalar"</string>
-    <string name="menu_search" msgid="1949652467806052768">"Qidirish"</string>
-    <string name="drawer_title" msgid="3766219846644975778">"Navigatsiya"</string>
-    <string name="mark_important" msgid="8781680450177768820">"Muhim deb belgilash"</string>
-    <string name="mark_not_important" msgid="3342258155408116917">"Muhim emas deb belgilash"</string>
-    <string name="add_cc_label" msgid="2249679001141195213">"Cc/Bcc bandlarini qo‘shish"</string>
-    <string name="add_bcc_label" msgid="963745641238037813">"Bcc bandini qo‘shish"</string>
-    <string name="quoted_text" msgid="977782904293216533">"Iqtibos matnini ham kiritish"</string>
-    <string name="quoted_text_label" msgid="2296807722849923934">"Matndan iqtibos olish"</string>
-    <string name="respond_inline" msgid="6609746292081928078">"Xat bilan javob berish"</string>
-    <string name="bytes" msgid="651011686747499628">"<xliff:g id="COUNT">%s</xliff:g> B"</string>
-    <string name="kilobytes" msgid="1523463964465770347">"<xliff:g id="COUNT">%s</xliff:g> KB"</string>
-    <string name="megabytes" msgid="4309397368708773323">"<xliff:g id="COUNT">%s</xliff:g> MB"</string>
-    <string name="attachment_image" msgid="6375306026208274564">"Rasm"</string>
-    <string name="attachment_video" msgid="7119476472603939848">"Video"</string>
-    <string name="attachment_audio" msgid="7097658089301809284">"Audio"</string>
-    <string name="attachment_text" msgid="3485853714965922173">"Matn"</string>
-    <string name="attachment_application_msword" msgid="2110108876623152162">"Hujjat"</string>
-    <string name="attachment_application_vnd_ms_powerpoint" msgid="425353008963359230">"Taqdimot fayli"</string>
-    <string name="attachment_application_vnd_ms_excel" msgid="5585781311136609103">"Elektron jadval"</string>
-    <string name="attachment_application_pdf" msgid="4207340200944655970">"PDF"</string>
-    <string name="attachment_unknown" msgid="3360536730101083926">"<xliff:g id="ATTACHMENTEXTENSION">%s</xliff:g> fayl"</string>
-    <string name="preview_attachment" msgid="6265457626086113833">"Oldindan ko‘rish"</string>
-    <string name="save_attachment" msgid="375685179032130033">"Saqlash"</string>
-    <string name="cancel_attachment" msgid="6900093625792891122">"Bekor qilish"</string>
-    <string name="open_attachment" msgid="6100396056314739761">"Ochish"</string>
-    <string name="install_attachment" msgid="8119470822958087928">"O‘rnatish"</string>
-    <string name="download_again" msgid="8195787340878328119">"Qayta yuklab olish"</string>
-    <string name="more_info_attachment" msgid="2899691682394864507">"Ma’lumot"</string>
-    <string name="no_application_found" msgid="7309485680354949680">"O‘rnatilgan ilovalardan hech biri biriktirma faylini o‘cha olmaydi."</string>
-    <string name="fetching_attachment" msgid="2286628490159574159">"Biriktirma yuklab olinmoqda"</string>
-    <string name="please_wait" msgid="3953824147776128899">"Iltimos, kuting…"</string>
-    <string name="saved" msgid="161536102236967534">"Saqlandi, <xliff:g id="SIZE">%s</xliff:g>"</string>
-    <string name="download_failed" msgid="3878373998269062395">"Yuklab bo‘lmadi. Qayta urinish uchun bosing."</string>
-    <string name="menu_photo_save_all" msgid="2742869476474613396">"Barcha-ni saqlash"</string>
-    <string name="menu_photo_share" msgid="6410980274832639330">"Ulashish"</string>
-    <string name="menu_photo_share_all" msgid="3049053252719665320">"Barchasini ulashish"</string>
-    <string name="menu_photo_print" msgid="3084679038179342333">"Chop qilish"</string>
-    <string name="saving" msgid="6274238733828387433">"Saqlanmoqda…"</string>
-    <string name="choosertitle_sharevia" msgid="3539537264873337959">"Quyidagi orqali ulashish"</string>
-    <string name="contextmenu_openlink" msgid="6952228183947135362">"Brauzerda ochish"</string>
-    <string name="contextmenu_copy" msgid="2584243784216385180">"Nusxa olish"</string>
-    <string name="contextmenu_copylink" msgid="8659897702269320063">"URL linkidan nusxa olish"</string>
-    <string name="contextmenu_view_image" msgid="1031172763893491000">"Rasmni ko‘rish"</string>
-    <string name="contextmenu_dial_dot" msgid="8881095692316726628">"Raqam terish"</string>
-    <string name="contextmenu_sms_dot" msgid="5319737001771622657">"SMS yuborish"</string>
-    <string name="contextmenu_add_contact" msgid="2310064151427072475">"Kontakt qo‘shish"</string>
-    <string name="contextmenu_send_mail" msgid="3834654593200105396">"E-pochta xabarini yuborish"</string>
-    <string name="contextmenu_map" msgid="5118951927399465521">"Xarita"</string>
-    <string name="contextmenu_sharelink" msgid="8670940060477758709">"Link ulashish"</string>
-    <string name="contextmenu_help" msgid="4209674157707873384">"Yordam"</string>
-    <string name="contextmenu_feedback" msgid="8319100902136337085">"Fikr va mulohaza yuborish"</string>
-    <!-- no translation found for num_selected (7990204488812654380) -->
-    <skip />
-  <plurals name="move_conversation">
-    <item quantity="one" msgid="237882018518207244">"Suhbatni ko‘chirish"</item>
-    <item quantity="other" msgid="6639576653114141743">"<xliff:g id="ID_1">%1$d</xliff:g> ta suhbatni ko‘chirish"</item>
-  </plurals>
-    <string name="content_description" msgid="854320355052962069">"<xliff:g id="TOHEADER">%1$s</xliff:g>: <xliff:g id="PARTICIPANT">%2$s</xliff:g>. Mavzu: <xliff:g id="SUBJECT">%3$s</xliff:g>. Lavha: <xliff:g id="SNIPPET">%4$s</xliff:g>. <xliff:g id="READSTATE">%6$s</xliff:g>: <xliff:g id="DATE">%5$s</xliff:g>."</string>
-    <string name="content_description_today" msgid="1634422834354116955">"<xliff:g id="TOHEADER">%1$s</xliff:g>: <xliff:g id="PARTICIPANT">%2$s</xliff:g>. Mavzu: <xliff:g id="SUBJECT">%3$s</xliff:g>. Lavha: <xliff:g id="SNIPPET">%4$s</xliff:g>. <xliff:g id="READSTATE">%6$s</xliff:g>: <xliff:g id="TIME">%5$s</xliff:g>."</string>
-    <string name="read_string" msgid="5495929677508576520">"suhbat o‘qilgan"</string>
-    <string name="unread_string" msgid="7342558841698083381">"suhbat o‘qilmadi"</string>
-    <string name="filtered_tag" msgid="721666921386074505">"[<xliff:g id="TAG">%1$s</xliff:g>]<xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="badge_and_subject" msgid="3979372269373936750">"<xliff:g id="ID_1">%1$s</xliff:g> <xliff:g id="ID_2">%2$s</xliff:g>"</string>
-  <plurals name="draft">
-    <item quantity="one" msgid="6717535677167943402">"Qoralama"</item>
-    <item quantity="other" msgid="1335781147509740039">"Qoralamalar"</item>
-  </plurals>
-    <string name="sending" msgid="5600034886763930499">"Yuborilmoqda…"</string>
-    <string name="message_retrying" msgid="5335188121407261331">"Qayta urinish…"</string>
-    <string name="message_failed" msgid="7887650587384601790">"Yuklab bo‘lmadi"</string>
-    <string name="send_failed" msgid="2186285547449865010">"Xabar yuborilmadi."</string>
-    <string name="me_object_pronoun" msgid="4674452244417913816">"men"</string>
-    <string name="me_subject_pronoun" msgid="7479328865714008288">"men"</string>
-  <plurals name="confirm_delete_conversation">
-    <item quantity="one" msgid="7605755011865575440">"Ushbu suhbat o‘chirib tashlansinmi?"</item>
-    <item quantity="other" msgid="1585660381208712562">"Ushbu <xliff:g id="COUNT">%1$d</xliff:g> ta suhbat o‘chirib tashlansinmi?"</item>
-  </plurals>
-  <plurals name="confirm_archive_conversation">
-    <item quantity="one" msgid="9105551557653306945">"Ushbu suhbat arxivlansinmi?"</item>
-    <item quantity="other" msgid="2001972798185641108">"Ushbu <xliff:g id="COUNT">%1$d</xliff:g> ta suhbat arxivlansinmi?"</item>
-  </plurals>
-  <plurals name="confirm_discard_drafts_conversation">
-    <item quantity="one" msgid="2030421499893210789">"Ushbu xabar bekor qilinsinmi?"</item>
-    <item quantity="other" msgid="782234447471532005">"Ushbu <xliff:g id="COUNT">%1$d</xliff:g> ta xabar bekor qilinsinmi?"</item>
-  </plurals>
-    <string name="confirm_discard_text" msgid="5172680524418848519">"Ushbu xabar bekor etilsinmi?"</string>
-    <string name="loading_conversations" msgid="7255732786298655246">"Yuklanmoqda…"</string>
-    <string name="empty_inbox" msgid="5901734942362315228">"Hammasi tayyor! Kuningiz maroqli o‘tsin."</string>
-    <string name="empty_search" msgid="8564899353449880818">"Ana, xolos! “<xliff:g id="SEARCH_QUERY">%1$s</xliff:g>” bo‘yicha hech narsa topilmadi."</string>
-    <string name="empty_spam_folder" msgid="3288985543286122800">"Ura, bu yerda hech qanday spam yo‘q!"</string>
-    <string name="empty_trash_folder" msgid="378119063015945020">"Bu yerda hech narsa yo‘q. Tozalab tashlaganingiz uchun rahmat!"</string>
-    <string name="empty_folder" msgid="3227552635613553855">"Bu yerda hech narsa yo‘q."</string>
-    <string name="getting_messages" msgid="8403333791332403244">"Xabarlar yuklanmoqda…"</string>
-    <string name="undo" msgid="8256285267701059609">"Qaytarish"</string>
-  <plurals name="conversation_unstarred">
-    <item quantity="one" msgid="839233699150563831">"<xliff:g id="COUNT">%1$d</xliff:g> ta suhbatdagi yulduzcha olib tashlanmoqda."</item>
-    <item quantity="other" msgid="7677305734833709789">"<xliff:g id="COUNT">%1$d</xliff:g> ta suhbatdan yulduzcha olib tashlanmoqda."</item>
-  </plurals>
-  <plurals name="conversation_muted">
-    <item quantity="one" msgid="3339638225564408438">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ta suhbat ko‘rsatilmaydigan qilindi."</item>
-    <item quantity="other" msgid="4276111931404654219">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ta suhbat ko‘rsatilmaydigan qilindi."</item>
-  </plurals>
-  <plurals name="conversation_spammed">
-    <item quantity="one" msgid="6986172030710967687">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ta suhbat spam deb belgilandi."</item>
-    <item quantity="other" msgid="5900913789259199137">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ta suhbat spam deb belgilandi."</item>
-  </plurals>
-  <plurals name="conversation_not_spam">
-    <item quantity="one" msgid="2294904093653094150">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ta suhbat spam emas deb belgilandi."</item>
-    <item quantity="other" msgid="4966164423991098144">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ta suhbat spam emas deb belgilandi."</item>
-  </plurals>
-  <plurals name="conversation_not_important">
-    <item quantity="one" msgid="3824809189993339030">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ta suhbat muhim emas deb belgilandi."</item>
-    <item quantity="other" msgid="1215472798075869124">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ta suhbat muhim emas deb belgilandi."</item>
-  </plurals>
-  <plurals name="conversation_phished">
-    <item quantity="one" msgid="4330095881258771201">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ta suhbat fishing deb belgilandi."</item>
-    <item quantity="other" msgid="9218674052779504277">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ta suhbat fishing deb belgilandi."</item>
-  </plurals>
-  <plurals name="conversation_archived">
-    <item quantity="one" msgid="4127890884907503696">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ta suhbat arxivlandi."</item>
-    <item quantity="other" msgid="7789480176789922968">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ta suhbat arxivlandi."</item>
-  </plurals>
-  <plurals name="conversation_deleted">
-    <item quantity="one" msgid="5591889079235938982">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ta suhbat o‘chirib tashlandi."</item>
-    <item quantity="other" msgid="7060256058737892078">"&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; ta suhbat o‘chirib tashlandi."</item>
-  </plurals>
-    <string name="deleted" msgid="7378013910782008375">"O‘chirib tashlandi"</string>
-    <string name="archived" msgid="6283673603512713022">"Arxivlandi"</string>
-    <string name="folder_removed" msgid="5656281444688183676">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> jildidan olib tashlandi"</string>
-  <plurals name="conversation_folder_changed">
-    <item quantity="one" msgid="6463727361987396734">"Jild o‘zgartirildi."</item>
-    <item quantity="other" msgid="8815390494333090939">"Jildlar o‘zgartirildi."</item>
-  </plurals>
-    <string name="conversation_folder_moved" msgid="6475872337373081683">"<xliff:g id="FOLDERNAME">%1$s</xliff:g> jildiga ko‘chirildi"</string>
-    <string name="search_results_header" msgid="1529438451150580188">"Natijalar"</string>
-    <string name="search_unsupported" msgid="2873920566477359177">"Ushbu hisobda qidiruv qo‘llab-quvvatlanmaydi."</string>
-    <string name="add_label" msgid="3285338046038610902">"Jild qo‘shish"</string>
-    <string name="new_incoming_messages_one" msgid="5933087567495998661">"Yangi xabarni ko‘rsatish (muallif: <xliff:g id="SENDER">%s</xliff:g>)"</string>
-  <plurals name="new_incoming_messages_many">
-    <item quantity="other" msgid="4394042684501388790">"Yangi xabarlarni ko‘rsatish (<xliff:g id="COUNT">%1$d</xliff:g>)."</item>
-  </plurals>
-    <string name="date_and_view_details" msgid="2952994746916149969">"<xliff:g id="DATE">%1$s</xliff:g> &lt;a href=\'http://www.example.com\'&gt;Tafsilotlarni ko‘rish&lt;/a&gt;"</string>
-    <string name="hide_details" msgid="8018801050702453314">"Tafsilotlarni yashirish"</string>
-    <string name="to_message_header" msgid="3954385178027011919">"Kimga: <xliff:g id="RECIPIENTS">%1$s</xliff:g>"</string>
-    <string name="contact_info_string" msgid="6484930184867405276">"<xliff:g id="NAME">%1$s</xliff:g> foydalanuvchisining aloqa ma’lumotlarini ko‘rsatish"</string>
-    <string name="contact_info_string_default" msgid="6204228921864816351">"Aloqa ma’lumotlarini ko‘rsatish"</string>
-  <plurals name="show_messages_read">
-    <item quantity="other" msgid="5285673397387128129">"<xliff:g id="COUNT">%1$d</xliff:g> ta eski xabar"</item>
-  </plurals>
-    <string name="from_heading" msgid="48290556829713090">"Kimdan:"</string>
-    <string name="replyto_heading" msgid="8275255318292059079">"Javob berish:"</string>
-    <string name="to_heading" msgid="3495203282540398336">"Kimga: "</string>
-    <string name="to_heading_no_space" msgid="679167047628308670">"Kimga:"</string>
-    <string name="cc_heading" msgid="5603892257866345823">"Cc:"</string>
-    <string name="bcc_heading" msgid="1482186590756218269">"Bcc:"</string>
-    <string name="date_heading" msgid="4213063948406397168">"Sana:"</string>
-    <string name="show_images" msgid="436044894053204084">"Rasmlarni ko‘rsatish"</string>
-    <string name="always_show_images" msgid="556087529413707819">"Ushbu manzildan kelgan rasmlar har doim ko‘rsatilsin"</string>
-    <string name="always_show_images_toast" msgid="3763157294047555051">"Ushbu manzildan kelgan rasmlar avtomatik ravishda ko‘rsatiladi."</string>
-    <string name="address_display_format" msgid="2098008376913966177">"<xliff:g id="NAME">%1$s</xliff:g> <xliff:g id="EMAIL">%2$s</xliff:g>"</string>
-    <string name="address_display_format_with_via_domain" msgid="8108294635074750048">"<xliff:g id="NAME">%1$s</xliff:g> <xliff:g id="EMAIL">%2$s</xliff:g> (<xliff:g id="VIA_DOMAIN">%3$s</xliff:g> orqali)"</string>
-    <string name="message_saved" msgid="3291655042310241793">"Xabar qoralama sifatida saqlandi."</string>
-    <string name="sending_message" msgid="2487846954946637084">"Xabar yuborilmoqda…"</string>
-    <string name="invalid_recipient" msgid="9157434699389936584">"<xliff:g id="WRONGEMAIL">%s</xliff:g> manzili haqiqiy emas."</string>
-    <string name="show_elided" msgid="3456154624105704327">"Iqtibos matnini ko‘rsatish"</string>
-    <string name="hide_elided" msgid="5768235486834692733">"▼ Iqtibos matnini yashirish"</string>
-    <string name="message_invite_title" msgid="5985161025144867256">"Taqvim uchun taklif"</string>
-    <string name="message_invite_calendar_view" msgid="9181966650840809197">"Taqvimda ko‘rish"</string>
-    <string name="message_invite_label_attending" msgid="4194264767870003397">"Ishtirok etasizmi?"</string>
-    <string name="message_invite_accept" msgid="8002758842580134835">"Ha"</string>
-    <string name="message_invite_tentative" msgid="3199418731566655887">"Balki"</string>
-    <string name="message_invite_decline" msgid="6331040872447290777">"Yo‘q"</string>
-    <string name="enumeration_comma" msgid="2848850136844740850">", "</string>
-    <string name="send_anyway" msgid="2727576121007079643">"Baribir yuborilsin"</string>
-    <string name="ok" msgid="6178802457914802336">"OK"</string>
-    <string name="done" msgid="344354738335270292">"Tayyor"</string>
-    <string name="cancel" msgid="4831678293149626190">"Bekor qilish"</string>
-    <string name="clear" msgid="765949970989448022">"Tozalash"</string>
-    <string name="next" msgid="2662478712866255138">"Keyingi"</string>
-    <string name="previous" msgid="8985379053279804274">"Avval"</string>
-  <string-array name="sync_status">
-    <item msgid="4600303222943450797">"Bajarildi"</item>
-    <item msgid="2972425114100316260">"Internetga ulanmagan."</item>
-    <item msgid="8594593386776437871">"Tizimga kirib bo‘lmadi."</item>
-    <item msgid="1375193906551623606">"Xavfsizlik xatosi."</item>
-    <item msgid="195177374927979967">"Sinxronlab bo‘lmadi."</item>
-    <item msgid="8026148967150231130">"Ichki xatolik"</item>
-    <item msgid="5442620760791553027">"Server xatosi"</item>
-  </string-array>
-    <string name="tap_to_configure" msgid="137172348280050643">"Sozlash uchun bosing"</string>
-    <string name="non_synced_folder_description" msgid="3044618511909304701">"Suhbatlarni ko‘rish uchun ushbu jildni sinxronlang."</string>
-    <string name="tap_to_configure_folder_sync" msgid="3280434399275638071">"Jildni sinxronlash"</string>
-    <string name="widget_large_unread_count" msgid="8699435859096455837">"%d+"</string>
-    <string name="large_unseen_count" msgid="3055042669246912518">"<xliff:g id="COUNT">%d</xliff:g>+ yangi"</string>
-    <string name="unseen_count" msgid="5509898665569695288">"<xliff:g id="COUNT">%d</xliff:g> ta yangi"</string>
-  <plurals name="actionbar_unread_messages">
-    <item quantity="other" msgid="3863201473731766006">"O‘qilmagan: <xliff:g id="COUNT">%1$d</xliff:g>"</item>
-  </plurals>
-    <string name="actionbar_large_unread_count" msgid="753635978542372792">"O‘qilmagan: <xliff:g id="COUNT">%1$d</xliff:g>+"</string>
-    <string name="view_more_conversations" msgid="8377920000247101901">"Ko‘proq suhbatlarni ko‘rish"</string>
-    <string name="loading_conversation" msgid="7931600025861500397">"Yuklanmoqda…"</string>
-    <string name="activity_mailbox_selection" msgid="7489813868539767701">"Hisobni tanlash"</string>
-    <string name="activity_folder_selection" msgid="8375243281001234750">"Jild tanlash"</string>
-    <string name="folder_shortcut_widget_label" msgid="6466292659577092915">"E-pochta jildi"</string>
-    <string name="change_folders_selection_dialog_title" msgid="9174464298613273814">"Jildlarni o‘zgartirish"</string>
-    <string name="move_to_selection_dialog_title" msgid="4052506464467083621">"Ko‘chirish"</string>
-    <string name="search_hint" msgid="4916671414132334289">"E-pochtadan qidirish"</string>
-    <!-- no translation found for search_results_loaded (1784879343458807514) -->
-    <skip />
-    <string name="network_error" msgid="5931164247644972255">"Internetga ulanmagan"</string>
-    <string name="retry" msgid="916102442074217293">"Qayta urinish"</string>
-    <string name="load_more" msgid="8702691358453560575">"Ko‘proq yuklash"</string>
-    <!-- no translation found for load_attachment (3894318473827290350) -->
-    <skip />
-    <string name="shortcut_name_title" msgid="1562534040126088628">"Jild yorlig‘i uchun nom"</string>
-    <string name="wait_for_sync_title" msgid="4577632826912823075">"Sinxronlash kutilmoqda"</string>
-    <string name="not_synced_title" msgid="3600180500934086346">"Hisob sinxronlanmadi"</string>
-    <string name="wait_for_manual_sync_body" msgid="2823149409451003378">"Ushbu hisobda avtomatik sinxronlash funksiyasi sozlanmagan.\nUni yoqish uchun "<b>"Sinxronlasah sozlamalari"</b>" menyusiga o‘ting yoki e-pochtani bir marta sinxronlash uchun "<b>"Hozir sinxronlash"</b>" tugmasini bosing."</string>
-    <string name="manual_sync" msgid="2271479734895537848">"Sinxronlash"</string>
-    <string name="change_sync_settings" msgid="3615852118397055361">"Sinxronlash sozlamalari"</string>
-    <string name="photo_load_failed" msgid="577471721679146999">"Rasmni yuklab bo‘lmadi"</string>
-    <string name="cant_move_or_change_labels" msgid="4155490583610926755">"Xabarlarni ko‘chirib bo‘lmaydi, chunki ular turli hisoblarda joylashgan."</string>
-    <string name="multiple_new_message_notification_item" msgid="1386588046275174918"><b>"<xliff:g id="SENDER">%1$s</xliff:g>"</b>": <xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="single_new_message_notification_big_text" msgid="2170154732664242904">"<xliff:g id="SUBJECT">%1$s</xliff:g>\n<xliff:g id="SNIPPET">%2$s</xliff:g>"</string>
-    <string name="ignore_spam_warning" msgid="8760314545535838430">"Ushbu yuboruvchiga ishonaman"</string>
-    <string name="via_domain" msgid="537951148511529082">"<xliff:g id="VIADOMAIN">%1$s</xliff:g> orqali"</string>
-    <string name="signin" msgid="4699091478139791244">"Kirish"</string>
-    <string name="info" msgid="1357564480946178121">"Ma’lumot"</string>
-    <string name="report" msgid="4318141326014579036">"Xabar yuborish"</string>
-    <string name="sync_error" msgid="1795794969006241678">"Sinxronlab bo‘lmadi."</string>
-    <string name="sync_error_message" msgid="4182644657243736635">"Sinxronlash uchun qurilmangizda yetarli joy yo‘q."</string>
-    <string name="storage" msgid="4783683938444150638">"Xotira"</string>
-    <string name="senders_split_token" msgid="6549228851819460081">", "</string>
-    <string name="draft_count_format" msgid="9122583199850209286">" (<xliff:g id="COUNT">%1$s</xliff:g>)"</string>
-    <string name="all_folders_heading" msgid="9023770187629170967">"Barcha jildlar"</string>
-    <string name="recent_folders_heading" msgid="8943134955788867702">"So‘nggi jildlar"</string>
-    <string name="message_details_title" msgid="60771875776494764">"Xabar tafsilotlari"</string>
-    <string name="preference_advance_to_title" msgid="6385669491239514630">"Avtomatik o‘tish"</string>
-  <string-array name="prefEntries_autoAdvance">
-    <item msgid="1505450878799459652">"Yangiroq"</item>
-    <item msgid="8000986144872247139">"Eskiroq"</item>
-    <item msgid="8015001161633421314">"Suhbatlar ro‘yxati"</item>
-  </string-array>
-  <string-array name="prefSummaries_autoAdvance">
-    <item msgid="8221665977497655719">"O‘chirgandan so‘ng yangiroq suhbatni ko‘rsatish"</item>
-    <item msgid="1721869262893378141">"O‘chirgandan so‘ng eskiroq suhbatni ko‘rsatish"</item>
-    <item msgid="880913657385630195">"O‘chirgandan so‘ng suhbatlar ro‘yxatini ko‘rsatish"</item>
-  </string-array>
-    <string name="prefDialogTitle_autoAdvance" msgid="5459235590885640678">"Quyidagiga o‘tish"</string>
-    <string name="clear_display_images_whitelist_title" msgid="2012677202404471778">"Rasmlarni ko‘rsatishni taqiqlash"</string>
-    <string name="clear_display_images_whitelist_dialog_title" msgid="1942692501166848471">"Rasmlarni ko‘rsatish taqiqlansinmi?"</string>
-    <string name="clear_display_images_whitelist_dialog_message" msgid="3952553078559373729">"Siz haqiqatan ham avval ruxsat berilgan manzillardan kelgan rasmlarni ko‘rsatishni taqiqlamoqchimisiz?"</string>
-    <string name="sender_whitelist_cleared" msgid="2490984995927904030">"Rasmlar avtomatik ravishda ko‘rsatilmaydi."</string>
-    <string name="preferences_signature_title" msgid="2318034745474929902">"Imzo"</string>
-    <string name="preferences_signature_dialog_title" msgid="4801741764511807064">"Imzo"</string>
-    <string name="preferences_signature_summary_not_set" msgid="3776614319388053784">"Sozlanmagan"</string>
-    <string name="notification_action_reply" msgid="8378725460102575919">"Javob berish"</string>
-    <string name="notification_action_reply_all" msgid="5693469099941000037">"Barchasiga"</string>
-    <string name="notification_action_archive" msgid="2884874164831039047">"Arxivlash"</string>
-    <string name="notification_action_remove_label" msgid="3714785653186750981">"Yorliqni olib tashl."</string>
-    <string name="notification_action_delete" msgid="3201627482564624132">"O‘chirish"</string>
-    <string name="notification_action_undo_archive" msgid="600186958134073582">"Arxivlandi"</string>
-    <string name="notification_action_undo_remove_label" msgid="8341924850540100690">"Yorliq olib tashlandi"</string>
-    <string name="notification_action_undo_delete" msgid="6915612337413587103">"O‘chirib tashlandi"</string>
-    <string name="veiled_address" msgid="2670378260196977266"></string>
-    <string name="veiled_alternate_text" msgid="6343564357099807582"></string>
-    <string name="veiled_alternate_text_unknown_person" msgid="6728323554307952217"></string>
-    <string name="veiled_summary_unknown_person" msgid="2122359944161241551"></string>
-    <string name="label_notification_ticker" msgid="323232821061341014">"<xliff:g id="LABEL">%s</xliff:g>: <xliff:g id="NOTIFICATION">%s</xliff:g>"</string>
-  <plurals name="new_messages">
-    <item quantity="one" msgid="3446656407520493241">"<xliff:g id="COUNT">%1$d</xliff:g> ta yangi xabar"</item>
-    <item quantity="other" msgid="3531683811183204615">"<xliff:g id="COUNT">%1$d</xliff:g> ta yangi xabar"</item>
-  </plurals>
-    <string name="single_new_message_notification_title" msgid="7954710563222504868">"<xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="SUBJECT">%2$s</xliff:g>"</string>
-    <string name="silent_ringtone" msgid="1570794756474381886">"Ovozsiz"</string>
-    <string name="preference_removal_action_title" msgid="4703834472477137634">"Arxivlash va o‘chirish amallari"</string>
-  <string-array name="prefEntries_removal_action">
-    <item msgid="954772302016538814">"Faqat arxivni ko‘rsatish"</item>
-    <item msgid="7212690302706180254">"Faqat o‘chirish"</item>
-    <item msgid="2539051197590685708">"Arxivlash yoki o‘chirish"</item>
-  </string-array>
-  <string-array name="prefSummaries_removal_action_summary">
-    <item msgid="6877416142040695022">"Faqat arxivni ko‘rsatish"</item>
-    <item msgid="1510017057984222376">"Faqat o‘chirish"</item>
-    <item msgid="3196207224108008441">"Arxivlash yoki o‘chirish"</item>
-  </string-array>
-    <string name="prefDialogTitle_removal_action" msgid="266548424110393246">"Arxivlash va o‘chirish amallari"</string>
-    <string name="preferences_default_reply_all_title" msgid="7255858488369635327">"Barchasiga javob berish"</string>
-    <string name="preferences_default_reply_all_summary_impl" msgid="895581085692979709">"Barcha javoblar uchun standart sifatida foydalanish"</string>
-    <string name="preference_swipe_title_archive" msgid="9122333537761282714">"Arxivlash uchun surish"</string>
-    <string name="preference_swipe_title_delete" msgid="4860474024917543711">"O‘chirib tashlash uchun suring"</string>
-    <string name="preference_swipe_description" msgid="3036560323237015010">"Suhbatlar ro‘yxatida"</string>
-    <string name="preference_sender_image_title" msgid="7890813537985591865">"Yuboruvchining rasmi"</string>
-    <string name="preference_sender_image_description" msgid="3586817690132199889">"Suhbatlar ro‘yxatida ismlar yonida ko‘rsatish"</string>
-    <string name="empty_trash" msgid="3385937024924728399">"Chiqitdonni bo‘shatish"</string>
-    <string name="empty_spam" msgid="2911988289997281371">"Spamlarni o‘chirish"</string>
-    <string name="empty_trash_dialog_title" msgid="2104898489663621508">"Chiqitdon bo‘shatilsinmi?"</string>
-    <string name="empty_spam_dialog_title" msgid="1130319045917820569">"Spamlar o‘chirib tashlansinmi?"</string>
-  <plurals name="empty_folder_dialog_message">
-    <item quantity="one" msgid="3315412388217832914">"<xliff:g id="COUNT">%1$d</xliff:g> ta xabar butunlay o‘chirib tashlanadi."</item>
-    <item quantity="other" msgid="263840304486020101">"<xliff:g id="COUNT">%1$d</xliff:g> ta xabar butunlay o‘chirib tashlanadi."</item>
-  </plurals>
-    <string name="drawer_open" msgid="2285557278907103851">"Navigatsiya panelini ochish"</string>
-    <string name="drawer_close" msgid="2065829742127544297">"Navigatsiya panelini yopish"</string>
-    <string name="conversation_photo_welcome_text" msgid="836483155429003787">"Suhbatni ochish uchun yuboruvchining rasmi ustiga bosing."</string>
-    <string name="long_press_to_select_tip" msgid="1660881999120625177">"Bitta suhbatni tanlash uchun uning ustiga bosib turing, keyin ko‘proq tanlash uchun boshqalari ustiga bosing."</string>
-    <string name="folder_icon_desc" msgid="6272938864914794739">"Jild ikonkasi"</string>
-    <string name="add_account" msgid="5905863370226612377">"Hisob qo‘shish"</string>
-    <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Maslahatni yopish"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Avto-sinxronlash o‘chirilgan."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Yoqish uchun bosing."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Hisobni sinxronlash o‘chirib qo‘yilgan."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Uni yoqish uchun <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g> menyusiga o‘ting."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Hisob sozlamalari"</string>
-    <string name="unsent_messages_in_outbox" msgid="146722891559469589">"“<xliff:g id="OUTBOX">%2$s</xliff:g>” jildidagi yuborilmagan xabarlar soni: <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
-    <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Avto-sinxronlash yoqilsinmi?"</string>
-    <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Barcha ilova va hisoblarga (nafaqat Gmail) kiritgan o‘zgartirishlaringiz Internet, boshqa qurilmalaringiz va <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g> o‘rtasida sinxronlanadi."</string>
-    <string name="phone" msgid="4142617042507912053">"telefon"</string>
-    <string name="tablet" msgid="4593581125469224791">"planshet"</string>
-    <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="7239160845196929866">"Yoqish"</string>
-    <string name="show_n_more_folders" msgid="5769610839632786654">"Yana <xliff:g id="NUMBER">%1$s</xliff:g> ta jildni ko‘rsatish"</string>
-    <string name="hide_folders" msgid="7618891933409521283">"Jildlarni yashirish"</string>
-    <string name="print" msgid="7987949243936577207">"Chop qilish"</string>
-    <string name="print_all" msgid="4011022762279519941">"Barchasini chop qilish"</string>
-  <plurals name="num_messages">
-    <item quantity="one" msgid="8071234386915191851">"<xliff:g id="COUNT">%1$d</xliff:g> ta xabar"</item>
-    <item quantity="other" msgid="962415099931188360">"<xliff:g id="COUNT">%1$d</xliff:g> ta xabar"</item>
-  </plurals>
-    <string name="date_message_received_print" msgid="4168417403884350040">"<xliff:g id="TIME">%2$s</xliff:g>, <xliff:g id="DAY_AND_DATE">%1$s</xliff:g>"</string>
-    <string name="draft_to_heading" msgid="7370121943946205024">"Qoralama, kimga:"</string>
-    <string name="draft_heading" msgid="7032951343184552800">"Qoralama"</string>
-    <string name="quoted_text_hidden_print" msgid="5256754205675159141">"Iqtibos matni yashirilgan"</string>
-  <plurals name="num_attachments">
-    <item quantity="one" msgid="5494465717267988888">"<xliff:g id="COUNT">%1$d</xliff:g> ta biriktirma"</item>
-    <item quantity="other" msgid="5422167728480739361">"<xliff:g id="COUNT">%1$d</xliff:g> ta biriktirma"</item>
-  </plurals>
-    <string name="no_subject" msgid="5622708348540036959">"(mavzu yo‘q)"</string>
-    <string name="vacation_responder" msgid="5570132559074523806">"Avtomatik javob beruvchi"</string>
-    <string name="preferences_vacation_responder_title" msgid="2268482117730576123">"Avtomatik javob beruvchi"</string>
-    <string name="vacation_responder_body_hint_text" msgid="9087613123105158494">"Xabar"</string>
-    <string name="send_to_contacts_text" msgid="124432913980620545">"Faqat kontaktlarimdagi manzillarga yuborish"</string>
-    <string name="send_to_domain_text" msgid="5064559546745918393">"Faqat <xliff:g id="DOMAIN">%1$s</xliff:g> domenidagi manzillarga yuborish"</string>
-    <string name="pick_start_date_title" msgid="2274665037355224165">"Boshlanishi"</string>
-    <string name="pick_end_date_title" msgid="733396083649496600">"Tugashi (ixtiyoriy)"</string>
-    <string name="date_not_set" msgid="3251555782945051904">"O‘rnatilmagan"</string>
-    <string name="set_end_date_dialog_title" msgid="7543009262788808443">"Tugash sanasi (ixtiyoriy)"</string>
-    <string name="custom_date" msgid="5794846334232367838">"Ixtiyoriy sana"</string>
-    <string name="date_none" msgid="1061426502665431412">"Hech biri"</string>
-    <string name="discard_changes" msgid="5699760550972324746">"O‘zgartirishlar bekor qilinsinmi?"</string>
-    <string name="vacation_responder_changes_saved" msgid="91448817268121249">"Avtomatik javob bergich sozlamalaridagi o‘zgartirishlar saqlandi"</string>
-    <string name="vacation_responder_changes_discarded" msgid="21756037735539983">"Avtomatik javob bergich sozlamalaridagi o‘zgartirishlar bekor qilindi"</string>
-    <string name="vacation_responder_off" msgid="4429909341193366667">"O‘chirilgan"</string>
-    <string name="vacation_responder_on" msgid="4913238379320882449">"<xliff:g id="DATE">%1$s</xliff:g> sanasidan boshlab yoqish"</string>
-    <string name="vacation_responder_on_with_end_date" msgid="4360941815371475955">"<xliff:g id="START_DATE">%1$s</xliff:g> – <xliff:g id="END_DATE">%2$s</xliff:g> oralig‘i uchun yoqish"</string>
-    <string name="vacation_responder_empty_subject_and_body_warning" msgid="6233629618520852439">"Mavzu va xabar matnini kiriting"</string>
-    <string name="view_entire_message" msgid="823281796655014454">"To‘liq xabarni ko‘rish"</string>
-    <string name="eml_loader_error_toast" msgid="6577383216635400167">"Ushbu faylni ochib bo‘lmayapti"</string>
-    <string name="help_and_info" msgid="3708286489943154681">"Yordam"</string>
-    <string name="help_and_feedback" msgid="7211458338163287670">"Yordam va fikr-mulohaza"</string>
-    <string name="feedback" msgid="204247008751740034">"Fikr va mulohaza yuborish"</string>
-    <string name="copyright" msgid="3121335168340432582">"© Google Inc., <xliff:g id="YEAR">%1$d</xliff:g>"</string>
-    <string name="version" msgid="1161745345056656547">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="VERSION">%2$s</xliff:g> versiyasi)"</string>
-    <string name="view_app_page" msgid="3241990517052398927"></string>
-    <string name="print_dialog" msgid="8895536548487605661">"Chop qilish…"</string>
-    <string name="copyright_information" msgid="971422874488783312">"Mualliflik huquqlari"</string>
-    <string name="privacy_policy" msgid="212094623396418302">"Maxfiylik siyosati"</string>
-    <string name="open_source_licenses" msgid="8643615555920977752">"Ochiq kodli DT litsenz-ri"</string>
-    <string name="reply_choice_yes" msgid="3327633032975373220">"Ha"</string>
-    <string name="reply_choice_no" msgid="7068775605915475207">"Yo‘q"</string>
-    <string name="reply_choice_ok" msgid="7881073621845053152">"OK"</string>
-    <string name="reply_choice_hehe" msgid="6054314968043050748">"Ha-ha"</string>
-    <string name="reply_choice_thanks" msgid="4978961954288364694">"Rahmat"</string>
-    <string name="reply_choice_i_agree" msgid="2496652737796884298">"Yaxshi"</string>
-    <string name="reply_choice_nice" msgid="4465894941302838676">"Ajoyib"</string>
-    <string name="reply_on_my_way" msgid="5645003971107444269">"Yo‘ldaman"</string>
-    <string name="reply_choice_later" msgid="4629219072859486413">"OK, o‘zim aloqaga chiqaman"</string>
-    <string name="reply_choice_smiling_face" msgid="1772253938506548631">":)"</string>
-    <string name="reply_choice_frowning_face" msgid="6260338807944002651">":("</string>
-    <string name="preference_header_action_confirmations" msgid="3922674681156121948">"Harakatlarni tasdiqlash"</string>
-    <string name="preference_confirm_before_delete_title" msgid="7563587174619033835">"O‘chirishdan oldin tasdiqlash"</string>
-    <string name="preference_confirm_before_archive_title" msgid="7318645995655875718">"Arxivlashdan oldin tasdiqlash"</string>
-    <string name="preference_confirm_before_send_title" msgid="4136585783513077039">"Yuborishdan oldin tasdiqlash"</string>
-    <string name="preferences_conversation_mode_title" msgid="389352009651720838">"Xabarlarni avto-moslashtirish"</string>
-    <string name="preferences_conversation_mode_summary" msgid="5730999743867653106">"Xabarlarni ekranga moslashtirish uchun qisqartirish"</string>
-    <string name="preferences_disable_snap_headers_title" msgid="7257824136988429629">"Xabar harakatlari"</string>
-  <string-array name="prefSummaries_snapHeader">
-    <item msgid="43373293784193461">"Xabar harakatlari doim ekranning yuqorisida ko‘rsatilsin"</item>
-    <item msgid="1765271305989996747">"Xabar harakatlari faqat bo‘yiga rejimiga o‘tilganda ekranning yuqorisida ko‘rsatilsin"</item>
-    <item msgid="6311113076575333488">"Xabar harakatlari xabar sarlavhasidan tashqarida ko‘rsatilmasin"</item>
-  </string-array>
-  <string-array name="prefEntries_snapHeader">
-    <item msgid="6906986566816683587">"Har doim ko‘rsatilsin"</item>
-    <item msgid="113299655708990672">"Faqat bo‘yiga rejimida ko‘rsatilsin"</item>
-    <item msgid="4403750311175924065">"Ko‘rsatilmasin"</item>
-  </string-array>
-    <string name="clear_history_title" msgid="5536216295725760357">"Qidiruv tarixini tozalash"</string>
-    <string name="search_history_cleared" msgid="1461946302763342640">"Qidiruv tarixi tozalandi."</string>
-    <string name="clear_history_dialog_title" msgid="3503603389704365385">"Qidiruv tarixi tozalansinmi?"</string>
-    <string name="clear_history_dialog_message" msgid="5202922561632407778">"Avval amalga oshirilgan barcha qidiruvlar o‘chirib tashlanadi."</string>
-    <string name="manage_accounts_menu_item" msgid="4734660452395086786">"Hisoblarni boshqarish"</string>
-    <string name="general_preferences_title" msgid="4212138728220418162">"Umumiy sozlamalar"</string>
-    <string name="activity_preferences" msgid="8966077432517613292">"Sozlamalar"</string>
-</resources>
diff --git a/res/values-v19/colors.xml b/res/values-v19/colors.xml
deleted file mode 100644
index f32eca8..0000000
--- a/res/values-v19/colors.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2013 Google Inc.
-    Licensed to The Android Open Source Project.
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<resources>
-    <!-- The color of the new message bar text. -->
-    <color name="new_message_bar_text">@android:color/white</color>
-</resources>
\ No newline at end of file
diff --git a/res/values-v19/dimen.xml b/res/values-v19/dimen.xml
deleted file mode 100644
index 42bb6b2..0000000
--- a/res/values-v19/dimen.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2013 Google Inc.
-    Licensed to The Android Open Source Project.
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<resources>
-    <dimen name="toast_bar_margin">24dip</dimen>
-    <dimen name="new_message_button_padding">0dip</dimen>
-</resources>
\ No newline at end of file
diff --git a/res/values-v19/styles.xml b/res/values-v19/styles.xml
deleted file mode 100644
index 246fd84..0000000
--- a/res/values-v19/styles.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2013 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<resources>
-    <style name="NewMessageButtonStyle" parent="AbstractNewMessageButtonStyle">
-        <item name="android:layout_marginStart">@dimen/toast_bar_margin</item>
-        <item name="android:layout_marginEnd">@dimen/toast_bar_margin</item>
-        <item name="android:fontFamily">sans-serif-condensed</item>
-        <item name="android:textSize">16sp</item>
-    </style>
-</resources>
diff --git a/res/values-sw600dp-port/styles.xml b/res/values-v21/colors.xml
similarity index 74%
copy from res/values-sw600dp-port/styles.xml
copy to res/values-v21/colors.xml
index e59a9c2..45fe3a5 100644
--- a/res/values-sw600dp-port/styles.xml
+++ b/res/values-v21/colors.xml
@@ -15,10 +15,8 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-
 <resources>
-    <style name="TwoPaneConversationList">
-        <item name="android:paddingRight">@dimen/two_pane_tl_side</item>
-        <item name="android:paddingTop">@dimen/two_pane_tl_top</item>
-    </style>
+    <color name="mini_drawer_activated_background_color">#e4e4e4</color>
+    <color name="text_color_undo_notification">@color/text_color_grey</color>
+    <color name="text_color_undo_notification_description">@color/text_color_black</color>
 </resources>
diff --git a/res/values-sw600dp-port/styles.xml b/res/values-v21/dimen.xml
similarity index 78%
rename from res/values-sw600dp-port/styles.xml
rename to res/values-v21/dimen.xml
index e59a9c2..46f5e88 100644
--- a/res/values-sw600dp-port/styles.xml
+++ b/res/values-v21/dimen.xml
@@ -17,8 +17,8 @@
 -->
 
 <resources>
-    <style name="TwoPaneConversationList">
-        <item name="android:paddingRight">@dimen/two_pane_tl_side</item>
-        <item name="android:paddingTop">@dimen/two_pane_tl_top</item>
-    </style>
+    <dimen name="compose_button_margin_bottom">16dp</dimen>
+    <dimen name="compose_button_margin_side">16dp</dimen>
+
+    <dimen name="drawer_item_font_size">14sp</dimen>
 </resources>
diff --git a/res/values-v21/styles.xml b/res/values-v21/styles.xml
index b4390bc..041609e 100644
--- a/res/values-v21/styles.xml
+++ b/res/values-v21/styles.xml
@@ -18,8 +18,17 @@
 <resources>
     <style name="WaitFragmentTitleBase" parent="android:Widget.Material.TextView" />
 
-    <style name="AbstractNewMessageButtonStyleBase"
-        parent="@android:style/Widget.Material.Light.Button">
+    <style name="ActionBarOverflowButtonStyle" parent="@android:style/Widget.Material.ActionButton.Overflow" />
+
+    <style name="ActionBarShadow">
+        <item name="android:visibility">gone</item>
+    </style>
+
+    <!-- Use elevation with FAB to produce a shadow instead of working with an asset -->
+    <style name="FloatingActionButtonBackgroundStyle" parent="AbstractFloatingActionButtonStyle">
+        <item name="android:background">@drawable/compose_button</item>
+        <item name="android:src">@drawable/ic_pencil_wht_24dp</item>
+        <item name="android:elevation">@dimen/compose_button_elevation</item>
     </style>
 
     <style name="ConversationListFadeBase" parent="android:Widget.Material.Light.ListView" />
@@ -28,12 +37,31 @@
 
     <style name="MinTimeProgressDialogStyleBase" parent="@android:style/Theme.Material.Light.Dialog" />
 
-    <style name="MessageButtonStyleBase" parent="android:Widget.Material.Button.Borderless" />
-
-    <style name="AbstractVacationResponderDateSpinnerBase"
-           parent="android:Widget.Material.Light.Spinner" />
+    <style name="MessageButtonStyleBase" parent="android:Widget.Material.Button.Borderless">
+        <item name="android:background">?android:attr/selectableItemBackgroundBorderless</item>
+    </style>
 
     <style name="RecipientEditTextViewStyle" parent="@style/RecipientEditTextViewStyleBase">
         <item name="android:popupElevation">0dp</item>
     </style>
+
+    <style name="NotificationPrimaryText">
+        <item name="android:textColor">@color/text_color_black</item>
+    </style>
+
+    <style name="NotificationSecondaryText">
+        <item name="android:textColor">@color/text_color_grey</item>
+    </style>
+
+    <style name="DrawerFontStyle">
+        <item name="android:fontFamily">sans-serif-medium</item>
+    </style>
+
+    <style name="FolderListItemStyle" parent="@style/FolderListItemStyleBase">
+        <item name="android:fontFamily">sans-serif-medium</item>
+    </style>
+
+    <style name="DrawerUnreadCount" parent="@style/UnreadCount">
+        <item name="android:fontFamily">sans-serif-medium</item>
+    </style>
 </resources>
diff --git a/res/values-v21/themes.xml b/res/values-v21/themes.xml
index f45dd63..a25b428 100644
--- a/res/values-v21/themes.xml
+++ b/res/values-v21/themes.xml
@@ -4,10 +4,9 @@
         <item name="android:actionModeBackground">@color/action_mode_background</item>
         <item name="android:actionOverflowButtonStyle">@style/ActionBarOverflowButtonStyle</item>
         <item name="android:listViewWhiteStyle">@android:style/Widget.Material.Light.ListView</item>
-        <!-- ActionBar color -->
-        <item name="android:colorPrimary">@color/actionbar_color</item>
-        <!-- Used by the StatusBar and NavBar (currently broken?) -->
-        <item name="android:colorPrimaryDark">@color/statusbar_color</item>
+        <item name="android:colorPrimary">@color/primary_color</item>
+        <item name="android:colorPrimaryDark">@color/primary_dark_color</item>
         <item name="android:colorAccent">@color/accent_blue</item>
+        <item name="android:colorEdgeEffect">@color/edge_effect_color</item>
     </style>
 </resources>
\ No newline at end of file
diff --git a/res/values-vi-sw600dp/strings.xml b/res/values-vi-sw600dp/strings.xml
index 367e278..c4bf465 100644
--- a/res/values-vi-sw600dp/strings.xml
+++ b/res/values-vi-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Cc/Bcc"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Bcc"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Quản lý thư mục"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Sử dụng làm mặc định để trả lời các thông báo thư"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ Cc/Bcc"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ Bcc"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Quản lý thư mục"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Sử dụng làm mặc định để trả lời các thông báo thư"</string>
 </resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 82192e7..4fc2e5a 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Biểu tượng thư mục"</string>
     <string name="add_account" msgid="5905863370226612377">"Thêm tài khoản"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Bỏ qua mẹo"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Tự động đồng bộ hóa bị tắt."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Chạm để bật."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Đồng bộ hóa tài khoản bị tắt."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Bật trong <xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Cài đặt tài khoản"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> thư chưa được gửi trong <xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Bật tự động đồng bộ hóa?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Các thay đổi bạn thực hiện đối với tất cả các ứng dụng và tài khoản, không chỉ với Gmail, sẽ được đồng bộ hóa giữa web, các thiết bị khác của bạn và <xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g> của bạn."</string>
diff --git a/res/values-w600dp-h879dp/dimen.xml b/res/values-w600dp-h879dp/dimen.xml
index 4d21964..be63c8d 100644
--- a/res/values-w600dp-h879dp/dimen.xml
+++ b/res/values-w600dp-h879dp/dimen.xml
@@ -17,6 +17,7 @@
 -->
 
 <resources>
-    <dimen name="vacation_responder_width">600dip</dimen>
-    <dimen name="vacation_responder_padding_horizontal_wide">32dip</dimen>
+    <dimen name="vacation_responder_width_tablet">600dp</dimen>
+    <dimen name="vacation_responder_padding_horizontal_wide">32dp</dimen>
+    <dimen name="vacation_responder_margin_horizontal_wide">28dp</dimen>
 </resources>
diff --git a/res/values-zh-rCN-sw600dp/strings.xml b/res/values-zh-rCN-sw600dp/strings.xml
index 2d03603..5abe33e 100644
--- a/res/values-zh-rCN-sw600dp/strings.xml
+++ b/res/values-zh-rCN-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ 抄送/密送"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ 密送"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"管理文件夹"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"用作默认的邮件通知回复方式"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ 抄送/密送"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ 密送"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"管理文件夹"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"用作默认的邮件通知回复方式"</string>
 </resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 1f06850..ca5d2e7 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -65,7 +65,7 @@
     <string name="report_phishing" msgid="8454666464488413739">"举报网上诱骗行为"</string>
     <string name="delete" msgid="6784262386780496958">"删除"</string>
     <string name="discard_drafts" msgid="5881484193628472105">"舍弃草稿"</string>
-    <string name="discard_failed" msgid="7520780769812210279">"舍弃未成功发送的邮件"</string>
+    <string name="discard_failed" msgid="7520780769812210279">"舍弃未发送成功的邮件"</string>
     <string name="refresh" msgid="1533748989749277511">"刷新"</string>
     <string name="reply" msgid="8337757482824207118">"回复"</string>
     <string name="reply_all" msgid="5366796103758360957">"全部回复"</string>
@@ -166,7 +166,7 @@
     <string name="confirm_discard_text" msgid="5172680524418848519">"要舍弃此邮件吗?"</string>
     <string name="loading_conversations" msgid="7255732786298655246">"正在加载…"</string>
     <string name="empty_inbox" msgid="5901734942362315228">"没有需要处理的邮件!去放松一下吧。"</string>
-    <string name="empty_search" msgid="8564899353449880818">"抱歉!找不到与“<xliff:g id="SEARCH_QUERY">%1$s</xliff:g>”相符的结果。"</string>
+    <string name="empty_search" msgid="8564899353449880818">"抱歉!没有找到有关“<xliff:g id="SEARCH_QUERY">%1$s</xliff:g>”的任何结果。"</string>
     <string name="empty_spam_folder" msgid="3288985543286122800">"太棒了,没有任何垃圾邮件!"</string>
     <string name="empty_trash_folder" msgid="378119063015945020">"没有任何已删除的邮件。还是下次再来回收吧。"</string>
     <string name="empty_folder" msgid="3227552635613553855">"此文件夹中没有任何邮件。"</string>
@@ -181,12 +181,12 @@
     <item quantity="other" msgid="4276111931404654219">"已忽略 &lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; 个会话。"</item>
   </plurals>
   <plurals name="conversation_spammed">
-    <item quantity="one" msgid="6986172030710967687">"已将&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;个会话列为垃圾邮件。"</item>
-    <item quantity="other" msgid="5900913789259199137">"已将&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;个会话列为垃圾邮件。"</item>
+    <item quantity="one" msgid="1749550834135461470">"已将&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;个会话列为垃圾邮件"</item>
+    <item quantity="other" msgid="664292592683692920">"已将&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;个会话列为垃圾邮件"</item>
   </plurals>
   <plurals name="conversation_not_spam">
-    <item quantity="one" msgid="2294904093653094150">"已将&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;个会话列为非垃圾邮件。"</item>
-    <item quantity="other" msgid="4966164423991098144">"已将&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;个会话列为非垃圾邮件。"</item>
+    <item quantity="one" msgid="3680479171846552641">"已将&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;个会话列为非垃圾邮件"</item>
+    <item quantity="other" msgid="6351739502184556635">"已将&lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt;个会话列为非垃圾邮件"</item>
   </plurals>
   <plurals name="conversation_not_important">
     <item quantity="one" msgid="3824809189993339030">"已将 &lt;b&gt;<xliff:g id="COUNT">%1$d</xliff:g>&lt;/b&gt; 个会话标记为不重要。"</item>
@@ -272,7 +272,7 @@
     <string name="tap_to_configure_folder_sync" msgid="3280434399275638071">"同步文件夹"</string>
     <string name="widget_large_unread_count" msgid="8699435859096455837">"%d+"</string>
     <string name="large_unseen_count" msgid="3055042669246912518">"<xliff:g id="COUNT">%d</xliff:g>+封新邮件"</string>
-    <string name="unseen_count" msgid="5509898665569695288">"<xliff:g id="COUNT">%d</xliff:g>新"</string>
+    <string name="unseen_count" msgid="5509898665569695288">"<xliff:g id="COUNT">%d</xliff:g>封新邮件"</string>
   <plurals name="actionbar_unread_messages">
     <item quantity="other" msgid="3863201473731766006">"<xliff:g id="COUNT">%1$d</xliff:g>封未读邮件"</item>
   </plurals>
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"文件夹图标"</string>
     <string name="add_account" msgid="5905863370226612377">"添加帐户"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"忽略提示"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"自动同步功能已关闭。"</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"触摸即可开启。"</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"帐户同步功能已关闭。"</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"在“<xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>”中开启。"</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"帐户设置"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="OUTBOX">%2$s</xliff:g>中有<xliff:g id="NUMBER">%1$s</xliff:g>封未发送的邮件"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"要开启自动同步功能吗?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"您对所有应用和帐户(不只是 Gmail)所做的更改都会在网络、您的其他设备和您的<xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>之间同步。"</string>
@@ -419,7 +414,7 @@
     <string name="preferences_vacation_responder_title" msgid="2268482117730576123">"外出回复"</string>
     <string name="vacation_responder_body_hint_text" msgid="9087613123105158494">"邮件内容"</string>
     <string name="send_to_contacts_text" msgid="124432913980620545">"仅发送给我通讯录中的联系人"</string>
-    <string name="send_to_domain_text" msgid="5064559546745918393">"仅发送给<xliff:g id="DOMAIN">%1$s</xliff:g>中的联系人"</string>
+    <string name="send_to_domain_text" msgid="5064559546745918393">"仅发送给 <xliff:g id="DOMAIN">%1$s</xliff:g> 中的联系人"</string>
     <string name="pick_start_date_title" msgid="2274665037355224165">"开始日期"</string>
     <string name="pick_end_date_title" msgid="733396083649496600">"结束日期(可选)"</string>
     <string name="date_not_set" msgid="3251555782945051904">"未设置"</string>
diff --git a/res/values-zh-rHK-sw600dp/strings.xml b/res/values-zh-rHK-sw600dp/strings.xml
index 9a389df..03786dc 100644
--- a/res/values-zh-rHK-sw600dp/strings.xml
+++ b/res/values-zh-rHK-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"新增副本/密件副本"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"新增密件副本"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"管理資料夾"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"設為預設的訊息通知回覆方式"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"新增副本/密件副本"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"新增密件副本"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"管理資料夾"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"設為預設的訊息通知回覆方式"</string>
 </resources>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index ed13bce..f425aea 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"資料夾圖示"</string>
     <string name="add_account" msgid="5905863370226612377">"新增帳戶"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"關閉提示"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"自動同步功能已關閉。"</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"輕觸即可開啟。"</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"帳戶同步功能已關閉。"</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"在 [<xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>] 中開啟。"</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"帳戶設定"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="OUTBOX">%2$s</xliff:g>內有 <xliff:g id="NUMBER">%1$s</xliff:g> 封未傳送的郵件"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"開啟自動同步功能?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"系統將在網上、您的其他裝置和您的<xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>間,同步處理您對所有應用程式和帳戶 (不限於 Gmail) 所作的變更。"</string>
@@ -436,7 +431,7 @@
     <string name="view_entire_message" msgid="823281796655014454">"查看整封郵件"</string>
     <string name="eml_loader_error_toast" msgid="6577383216635400167">"無法開啟這個檔案"</string>
     <string name="help_and_info" msgid="3708286489943154681">"說明"</string>
-    <string name="help_and_feedback" msgid="7211458338163287670">"說明和意見反映"</string>
+    <string name="help_and_feedback" msgid="7211458338163287670">"說明與意見反映"</string>
     <string name="feedback" msgid="204247008751740034">"傳送意見"</string>
     <string name="copyright" msgid="3121335168340432582">"©<xliff:g id="YEAR">%1$d</xliff:g> Google Inc."</string>
     <string name="version" msgid="1161745345056656547">"<xliff:g id="APP_NAME">%1$s</xliff:g> 版本 <xliff:g id="VERSION">%2$s</xliff:g>"</string>
diff --git a/res/values-zh-rTW-sw600dp/strings.xml b/res/values-zh-rTW-sw600dp/strings.xml
index 9a389df..03786dc 100644
--- a/res/values-zh-rTW-sw600dp/strings.xml
+++ b/res/values-zh-rTW-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"新增副本/密件副本"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"新增密件副本"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"管理資料夾"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"設為預設的訊息通知回覆方式"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"新增副本/密件副本"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"新增密件副本"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"管理資料夾"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"設為預設的訊息通知回覆方式"</string>
 </resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index c9afa2c..407f031 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"資料夾圖示"</string>
     <string name="add_account" msgid="5905863370226612377">"新增帳戶"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"關閉提示"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"自動同步處理功能已關閉。"</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"輕觸即可開啟。"</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"帳戶同步處理功能已關閉。"</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"在 [<xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>] 中開啟。"</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"帳戶設定"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="OUTBOX">%2$s</xliff:g>內有 <xliff:g id="NUMBER">%1$s</xliff:g> 封未傳送的郵件"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"開啟自動同步功能?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"您對所有應用程式和帳戶 (不限於 Gmail) 所做的變更一律會在網路、您的其他裝置和您的<xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g>之間保持同步。"</string>
diff --git a/res/values-zu-sw600dp/strings.xml b/res/values-zu-sw600dp/strings.xml
index 70cf2c2..a286a59 100644
--- a/res/values-zu-sw600dp/strings.xml
+++ b/res/values-zu-sw600dp/strings.xml
@@ -18,8 +18,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="add_cc_label" msgid="5504248178750252553">"+ Cc/Bcc"</string>
-    <string name="add_bcc_label" msgid="2464329024392383408">"+ Bcc"</string>
-    <string name="menu_manage_folders" msgid="2575462565700103317">"Phatha amafolda"</string>
-    <string name="preferences_default_reply_all_summary" msgid="6407854387225415499">"Sebenzisa njengokuzenzakalelayo kuzimpendulo zezaziso zomlayezo"</string>
+    <string name="add_cc_label" msgid="6156834609108442458">"+ Cc/Bcc"</string>
+    <string name="add_bcc_label" msgid="7648769906379235693">"+ Bcc"</string>
+    <string name="menu_manage_folders" msgid="7574962882483466700">"Phatha amafolda"</string>
+    <string name="preferences_default_reply_all_summary" msgid="5318418012992612729">"Sebenzisa njengokuzenzakalelayo kuzimpendulo zezaziso zomlayezo"</string>
 </resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 67f0948..0ae3b25 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -387,11 +387,6 @@
     <string name="folder_icon_desc" msgid="6272938864914794739">"Isithonjana sefolda"</string>
     <string name="add_account" msgid="5905863370226612377">"Engeza i-akhawunti"</string>
     <string name="dismiss_tip_hover_text" msgid="5400049020835024519">"Cashisa ithiphu"</string>
-    <string name="auto_sync_off" msgid="3664082916022670831">"Ukuvumelanisa okuzenzakalelayo kuvaliwe."</string>
-    <string name="tap_to_enable_sync" msgid="30588010316606899">"Thinta ukuze uvule."</string>
-    <string name="account_sync_off" msgid="1351286883806741348">"Ukuvumelanisa kwe-akhawunti kuvaliwe."</string>
-    <string name="enable_sync_in_account_settings" msgid="2596841920743507047">"Yivule ku-<xliff:g id="ACCOUNT_SETTINGS">%1$s</xliff:g>."</string>
-    <string name="account_settings_param" msgid="3649244241101156660">"Izilungiselelo ze-akhawunti"</string>
     <string name="unsent_messages_in_outbox" msgid="146722891559469589">"<xliff:g id="NUMBER">%1$s</xliff:g> akuthunyelwanga ku-<xliff:g id="OUTBOX">%2$s</xliff:g>"</string>
     <string name="turn_auto_sync_on_dialog_title" msgid="543412762396502297">"Vula ukuvumelanisa okuzenzekalelalayo?"</string>
     <string name="turn_auto_sync_on_dialog_body" msgid="614939812938149398">"Ushintsho olwenza kuzo zonke izinhlelo zokusebenza nama-akhawunti, hhayi nje ku-Gmail kuphela, luzovumelaniswa phakathi kwewebhu, amanye amadivayisi wakho ne-<xliff:g id="PHONE_OR_TABLET">%1$s</xliff:g> yakho."</string>
diff --git a/res/values/animation_constants.xml b/res/values/animation_constants.xml
index 65bb190..532d144 100644
--- a/res/values/animation_constants.xml
+++ b/res/values/animation_constants.xml
@@ -21,7 +21,7 @@
     <integer name="dialog_animationDefaultDur">220</integer>
     <integer name="dialog_animationShortDur">150</integer>
     <integer name="shrink_animation_duration">200</integer>
-    <integer name="slide_animation_duration">320</integer>
+    <integer name="slide_animation_duration">200</integer>
     <integer name="fade_in_animation_duration">300</integer>
 
     <!-- Swipe constants -->
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
deleted file mode 100644
index 16c11ad..0000000
--- a/res/values/arrays.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2011 Google Inc.
-     Licensed to The Android Open Source Project.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<resources>
-    <integer-array name="senders_with_attachment_lengths">
-        <item>25</item>
-        <item>25</item>
-    </integer-array>
-    <integer-array name="senders_lengths">
-        <item>27</item>
-        <item>27</item>
-    </integer-array>
-</resources>
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
index 33acffe..55fad03 100644
--- a/res/values/attrs.xml
+++ b/res/values/attrs.xml
@@ -26,9 +26,6 @@
     <add-resource name="ComposeFieldLayout" type="style" />
     <add-resource name="RecipientComposeFieldLayout" type="style" />
     <add-resource name="ComposeSubjectStyle" type="style" />
-    <declare-styleable name="FolderItemViewDrawableState">
-        <attr name="state_drag_mode" format="boolean" />
-    </declare-styleable>
     <declare-styleable name="ButteryProgressBar">
         <attr name="barColor" format="color" />
         <attr name="barHeight" format="dimension" />
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 8b67dfb..6455cf8 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -16,27 +16,28 @@
      limitations under the License.
 -->
 <resources>
+    <color name="text_color_medium_grey">#9e9e9e</color>
     <color name="text_color_grey">#757575</color>
     <color name="text_color_black">#212121</color>
-    <color name="accent_blue">#00bfd8</color>
+    <color name="text_color_disabled">#bdbdbd</color>
+    <color name="accent_blue">#4285f4</color>
     <color name="text_color_blue">@color/accent_blue</color>
-    <color name="text_color_dark_blue">#4285f4</color>
-    <color name="text_color_draft_red">#da4336</color>
+    <color name="text_color_draft_red">@color/primary_color</color>
+    <color name="text_color_hint_grey">#949494</color>
     <color name="gray_text_color">#777777</color>
     <color name="dark_gray_text_color">#58585b</color>
-    <color name="light_gray_text_color">#b5b5b5</color>
     <color name="light_gray">#cccccc</color>
+    <color name="very_light_grey">#f5f5f5</color>
     <!-- if you want to make something blue, please try to use THIS blue -->
     <color name="mail_app_blue">@android:color/holo_blue_light</color>
-    <color name="tablet_background_gray">#eeeeee</color>
     <color name="divider_color">#e5e5e5</color>
 
     <!-- Conversation List Item Colors -->
     <color name="senders_text_color">@color/text_color_black</color>
-    <color name="subject_text_color_unread">@color/text_color_black</color>
     <color name="subject_text_color_read">@color/text_color_grey</color>
+    <color name="subject_text_color_unread">@color/text_color_black</color>
     <color name="snippet_text_color">@color/text_color_grey</color>
-    <color name="date_text_color_unread">@color/text_color_dark_blue</color>
+    <color name="date_text_color_unread">#4285f4</color>
     <color name="date_text_color_read">@color/text_color_grey</color>
     <color name="message_info_text_color">@color/gray_text_color</color>
     <color name="ap_background_color">#fff1f1f2</color>
@@ -44,7 +45,7 @@
     <color name="ap_overflow_text_color">#ff4f4c4c</color>
 
     <color name="attachment_bg_color">#ffdddddd</color>
-    <color name="swiped_bg_color">#ff999999</color>
+    <color name="swiped_bg_color">@color/text_color_grey</color>
     <color name="holo_light_background_color">#ffe8e8e8</color>
     <!-- Keep the following two colors in sync with LabelColorUtils.DEFAULT_COLORS (UnifiedGmail) -->
     <color name="default_folder_background_color">#dddddd</color>
@@ -52,42 +53,41 @@
 
     <!-- Folder List/Drawer colors -->
     <color name="account_item_selected_text_color">@color/mail_app_blue</color>
-    <color name="folder_list_heading_text_color">@color/light_gray</color>
+    <color name="folder_list_heading_text_color">@color/text_color_medium_grey</color>
     <color name="list_background_color">@android:color/white</color>
+    <color name="drawer_item_activated_background_color">#12000000</color>
+    <color name="mini_drawer_activated_background_color">#d3d3d3</color>
+
+    <!-- overridden in sw600dp -->
+    <color name="folder_list_divider_color">@color/divider_color</color>
 
     <!-- Compose colors -->
     <color name="compose_label_text">@color/text_color_grey</color>
     <color name="compose_user_text">@color/text_color_black</color>
-    <color name="compose_label_hint">@color/light_gray</color>
-    <color name="compose_divider_color">@color/light_gray</color>
-    <!-- Must match the quoted_text_background_color_string -->
-    <color name="compose_background_color">@android:color/white</color>
+    <color name="compose_label_hint">@color/text_color_hint_grey</color>
     <string name="quoted_text_font_color_string" translatable="false">@color/text_color_grey</string>
-    <color name="respond_inline_color">#00bfd8</color>
 
     <color name="conv_header_add_label_text">@android:color/black</color>
     <color name="conv_header_add_label_background">#eeeeee</color>
 
     <!-- Conversation message header colors -->
     <color name="conversation_view_border_color">@color/divider_color</color>
-    <color name="conversation_view_background_color">#f5f5f5</color>
-    <!-- Overridden on tablet to give a white background -->
-    <color name="conversation_view_item_background_color">@color/conversation_view_background_color</color>
+    <color name="conversation_view_background_color">@color/very_light_grey</color>
     <color name="conversation_view_text_color_light">@color/text_color_grey</color>
     <color name="conversation_view_text_color_dark">@color/text_color_black</color>
     <color name="conversation_view_text_color_link_blue">@color/text_color_blue</color>
-    <color name="conversation_view_footer_text_color">#999999</color>
-
-    <!-- Folder colors -->
-    <color name="folder_disabled_drop_target_text_color">#999999</color>
+    <color name="conversation_view_footer_text_color">#a7a7a7</color>
+    <color name="conversation_view_footer_load_more_text_color">@color/accent_blue</color>
 
     <!-- Widget colors -->
-    <color name="widget_header_bg_color">#da4336</color>
+    <color name="widget_header_bg_color">@color/primary_color</color>
+    <color name="widget_conversation_list_divider_color">#e5e5e5</color>
 
+    <color name="attachment_name_color">#333333</color>
     <!--  Color of the semi-transparent shadow box on attachment tiles -->
     <color name="attachment_tile_shadow_box_color">#7F000000</color>
     <!--  Color of the subtitle message in the attachment tile -->
-    <color name="attachment_tile_subtitle_color">#999999</color>
+    <color name="attachment_tile_subtitle_color">@color/text_color_hint_grey</color>
     <color name="attachment_image_background_color">#E5E5E5</color>
 
     <!-- Color of the parent folders and dividers for hierarchical folder descriptions in the move to folder -->
@@ -99,12 +99,15 @@
     <color name="low_spam_color">#333333</color>
     <color name="low_spam_warning_background_color">#FFF1A8</color>
 
-    <color name="notification_template_icon_low_bg">#0cffffff</color>
-    <color name="notification_icon_gmail_red">#da4336</color>
+    <color name="notification_icon_color">@color/primary_color</color>
 
     <!-- Search colors -->
+    <color name="search_query_hint_text">@color/text_color_grey</color>
+    <color name="search_query_text">@color/text_color_black</color>
+    <color name="search_suggestion_item_text">@color/text_color_grey</color>
     <color name="search_banner_bg">#f6f6f6</color>
     <color name="search_banner_text">@color/text_color_grey</color>
+    <color name="search_status_bar_color">#bdbdbd</color>
 
     <array name="letter_tile_colors">
         <item>#90a4ae</item>
@@ -129,6 +132,11 @@
     <!-- The color of the section name text in the teaser -->
     <color name="teaser_main_text">@color/dark_gray_text_color</color>
 
+    <!-- tip teaser colors -->
+    <color name="tip_teaser_bg">#e5e5e5</color>
+    <color name="tip_teaser_link">@color/text_color_blue</color>
+    <color name="tip_teaser_text">@color/text_color_black</color>
+
     <!-- swipe to refresh text color, this matches the color in
         progressbar_solid_holo.png -->
     <color name="swipe_to_refresh_text_color">#0099cc</color>
@@ -137,20 +145,14 @@
     <color name="message_header_background_color">@android:color/white</color>
 
     <!-- The color of the section name text in the folder teaser -->
-    <color name="folder_teaser_main_text">#212121</color>
+    <color name="folder_teaser_main_text">@color/text_color_black</color>
+    <color name="folder_teaser_sub_text">@color/text_color_grey</color>
     <!-- The color of the icon background in the teaser -->
     <color name="folder_teaser_icon_background">#eeeeee</color>
-    <!-- The color of the senders text in the teaser -->
-    <color name="folder_teaser_senders_text">#757575</color>
-    <!-- The color of the count text in the teaser -->
-    <color name="folder_teaser_count_text">@android:color/black</color>
 
-    <color name="vacation_responder_foreground">@android:color/white</color>
-    <color name="vacation_responder_background">#ffe9e9e9</color>
-    <color name="vacation_responder_spinner_text">#333333</color>
-
-    <!-- The color of the new message bar text. -->
-    <color name="new_message_bar_text">@color/dark_gray_text_color</color>
+    <color name="vacation_responder_window_background">#ffe9e9e9</color>
+    <color name="vacation_responder_header_text_color">@color/text_color_grey</color>
+    <color name="vacation_responder_main_text_color">@color/text_color_black</color>
 
     <!-- Swipe refresh progress bar colors -->
     <color name="swipe_refresh_color1">#ff0f9d58</color>
@@ -167,14 +169,29 @@
     <color name="mail_orange">#e7790d</color>
     <color name="statusbar_orange">#d06d0c</color>
 
-    <color name="actionbar_color">@color/mail_orange</color>
-    <color name="statusbar_color">@color/statusbar_orange</color>
-    <!-- TODO: get real color from UX -->
-    <color name="action_mode_background">#9b9b9b</color>
+    <color name="primary_color">@color/mail_orange</color>
+    <color name="primary_dark_color">@color/statusbar_orange</color>
+    <color name="mail_activity_status_bar_color">@android:color/transparent</color>
+    <color name="action_mode_background">@color/text_color_grey</color>
+    <color name="action_mode_statusbar_color">#616161</color>
+    <color name="edge_effect_color">#263238</color>
 
     <color name="snack_bar_background_color">#323232</color>
     <color name="snack_bar_action_text_color">#f4b400</color>
 
-    <color name="conversation_item_blue_background">#e5f8fb</color>
-    <color name="conversation_list_divider_color">#b2b2b2</color>
+    <color name="conversation_list_background_color">@android:color/transparent</color>
+    <color name="conversation_item_blue_background_color">#e3edfe</color>
+    <color name="conversation_item_grey_background_color">#ececec</color>
+    <color name="conversation_item_grey_pressed_color">#d9d9d9</color>
+    <color name="conversation_item_grey_ripple_color">#20444444</color>
+
+    <color name="compose_button_background_color">@color/primary_color</color>
+    <color name="compose_button_pressed_background_color">@color/primary_dark_color</color>
+    <color name="compose_button_tint">#20444444</color>
+
+    <color name="text_color_undo">#feb500</color>
+    <color name="text_color_undo_description">@android:color/white</color>
+
+    <color name="text_color_undo_notification">#feb500</color>
+    <color name="text_color_undo_notification_description">@android:color/white</color>
 </resources>
diff --git a/res/values/constants.xml b/res/values/constants.xml
index a92445a..a2ddeaf 100644
--- a/res/values/constants.xml
+++ b/res/values/constants.xml
@@ -49,17 +49,14 @@
     <!-- The smallest amount of time the toast bar must remain visible -->
     <integer name="toast_bar_min_duration_ms">500</integer>
     <!-- The largest amount of time the toast bar can remain visible -->
-    <integer name="toast_bar_max_duration_ms">3000</integer>
+    <integer name="toast_bar_max_duration_ms">8000</integer>
     <integer name="conversation_desired_font_size_px">14</integer>
     <!-- matches 'font-size' style in template_conversation_upper.html -->
     <integer name="conversation_unstyled_font_size_px">13</integer>
     <integer name="conversation_webview_viewport_px">980</integer>
 
-    <!-- Whether the list is collapsible in conversation view mode -->
-    <bool name="list_collapsible">true</bool>
-
-    <!-- Whether to show single or 2 pane search results -->
-    <bool name="show_two_pane_search_results">false</bool>
+    <!-- Whether we are in landscape mode on a tablet or not -->
+    <bool name="is_tablet_landscape">false</bool>
 
     <!-- Amount of memory in bytes allocated for image cache -->
     <integer name="config_image_cache_max_bytes">1500000</integer>
@@ -83,9 +80,6 @@
     <!-- The width or height of the preview will not exceed this -->
     <integer name="attachment_preview_max_size">256</integer>
 
-    <!-- Whether or not to use a nice transition when showing the folder list fragment; used in 2-pane layouts -->
-    <integer name="use_folder_list_fragment_transition">1</integer>
-
     <!-- The timeout, in milliseconds, before the "Undo" notification is removed. -->
     <integer name="undo_notification_timeout">6000</integer>
 
@@ -124,4 +118,8 @@
     <integer name="conversation_list_max_folder_count">4</integer>
     <integer name="folder_max_width_proportion">31</integer>
     <integer name="folder_cell_max_width_proportion">22</integer>
+
+    <!-- Maximum width in characters of the senders in the thread list -->
+    <integer name="senders_with_attachment_lengths">25</integer>
+    <integer name="senders_lengths">27</integer>
 </resources>
diff --git a/res/values/dimen.xml b/res/values/dimen.xml
index 86c808e..2c78bb1 100644
--- a/res/values/dimen.xml
+++ b/res/values/dimen.xml
@@ -17,13 +17,12 @@
 -->
 
 <resources>
-    <dimen name="account_avatar_dimension">48dp</dimen>
-    <dimen name="drawer_width">300dp</dimen>
+    <dimen name="account_avatar_dimension">40dp</dimen>
+    <dimen name="drawer_width">264dp</dimen>
     <dimen name="two_pane_drawer_width_mini">72dp</dimen>
     <dimen name="two_pane_drawer_width_open">288dp</dimen>
     <dimen name="two_pane_tl_side">24dp</dimen>
     <dimen name="two_pane_tl_top">16dp</dimen>
-    <dimen name="list_min_width_is_wide">720dp</dimen>
     <dimen name="senders_font_size">18sp</dimen>
     <dimen name="attachment_tile_min_size">120dp</dimen>
     <dimen name="attachment_tile_max_size">164dp</dimen>
@@ -36,30 +35,32 @@
     <dimen name="sender_image_touch_slop">8dip</dimen>
     <dimen name="standard_scaled_dimen">100sp</dimen>
 
+    <!-- folder chips -->
+    <dimen name="folder_rounded_corner_radius">1dp</dimen>
+    <dimen name="folder_start_padding">6dp</dimen>
     <!-- TL folder chips -->
-    <dimen name="folders_text_bottom_padding">3dp</dimen>
-    <dimen name="folder_cell_content_padding">6dp</dimen>
-    <dimen name="folders_start_padding">6dp</dimen>
-    <dimen name="folders_gradient_padding">8dp</dimen>
+    <dimen name="folder_tl_cell_content_padding">6dp</dimen>
+    <dimen name="folder_tl_gradient_padding">8dp</dimen>
+    <dimen name="folder_tl_font_size">11sp</dimen>
+    <!-- CV folder chips -->
+    <dimen name="folder_cv_cell_content_padding">8dp</dimen>
+    <dimen name="folder_cv_font_size">12sp</dimen>
+    <dimen name="folder_cv_vertical_offset">1dp</dimen>
 
     <dimen name="conversation_page_gutter">16dp</dimen>
     <dimen name="conversation_message_content_margin_side">16dp</dimen>
     <dimen name="conversation_view_margin_side">16dp</dimen>
+    <dimen name="conversation_view_snack_bar_margin">0dp</dimen>
     <dimen name="conversation_header_font_size">20sp</dimen>
     <dimen name="conversation_header_padding_side">16dp</dimen>
-    <dimen name="conversation_header_star_size">52dp</dimen>
+    <dimen name="conversation_header_star_size">48dp</dimen>
     <dimen name="conversation_border_margin_side">0dp</dimen>
-    <dimen name="conversation_folder_font_size">12sp</dimen>
-    <dimen name="conversation_folder_padding">1dp</dimen>
-    <dimen name="conversation_folder_padding_extra_width">8dp</dimen>
-    <dimen name="conversation_folder_padding_after">8dp</dimen>
-    <dimen name="folder_rounded_corner_radius">1dp</dimen>
-    <dimen name="conversation_folder_margin_top">6dp</dimen>
     <dimen name="message_details_header_padding_start_expanded">72dip</dimen>
     <dimen name="message_details_header_padding_end">16dp</dimen>
     <dimen name="message_details_header_vertical_padding">7dp</dimen>
     <dimen name="message_show_pics_header_padding_end">14dip</dimen>
     <dimen name="message_header_icon_additional_margin_start">16dp</dimen>
+    <dimen name="message_header_overflow_button_width">36dp</dimen>
     <dimen name="message_header_action_button_width">48dp</dimen>
     <dimen name="message_header_action_button_height">48dp</dimen>
     <dimen name="message_header_action_button_margin_top">0dp</dimen>
@@ -77,9 +78,21 @@
     <dimen name="message_header_icon_margin">16dp</dimen>
     <dimen name="message_header_inner_side_padding">16dp</dimen>
     <dimen name="attachment_toast_yoffset">-100dip</dimen>
+
+    <!-- Floating action bar and overlay values -->
     <dimen name="floating_action_bar_margin">16dp</dimen>
+    <dimen name="compose_button_width">56dp</dimen>
+    <dimen name="compose_button_margin_bottom">3dp</dimen>
+    <dimen name="compose_button_margin_side">6dp</dimen>
+    <dimen name="compose_button_padding_bottom">5dp</dimen>
+    <dimen name="compose_button_elevation">4dp</dimen>
     <dimen name="snack_bar_margin_horizontal">24dp</dimen>
     <dimen name="snack_bar_margin_vertical">14dp</dimen>
+    <!-- Default case for snack bar; negative values for min and max width indicate the natural snackbar width should be honored -->
+    <dimen name="snack_bar_min_width">-1dp</dimen>
+    <dimen name="snack_bar_max_width">-1dp</dimen>
+
+    <!-- Folder list & selection dimen -->
     <dimen name="folder_selection_margin_start">16dp</dimen>
     <dimen name="folder_selection_margin_end">24dp</dimen>
     <dimen name="folder_list_heading_padding_side">16dp</dimen>
@@ -88,19 +101,20 @@
     <dimen name="folder_list_item_start_margin">16dp</dimen>
     <dimen name="folder_list_item_text_start_margin">32dp</dimen>
     <dimen name="folder_list_item_end_margin">8dp</dimen>
+    <dimen name="nested_folder_space">28dp</dimen>
+    <dimen name="single_folder_list_item_height">48sp</dimen>
+    <dimen name="single_folder_list_item_start_margin">24dp</dimen>
+    <dimen name="single_folder_list_item_padding">0dp</dimen>
     <!-- Let's try to keep this consistent with color_block_height above, unless there's a good reason not to. -->
     <dimen name="folder_swatch_height">6dip</dimen>
     <dimen name="folder_list_popup_width">200dip</dimen>
     <dimen name="folder_list_folder_color_width">36dip</dimen>
     <dimen name="folder_list_item_minimum_height">48dip</dimen>
     <dimen name="folder_list_item_left_offset">9dp</dimen>
-    <dimen name="account_item_margin_start">14dp</dimen>
-    <dimen name="account_item_margin_end">8dp</dimen>
     <dimen name="account_item_minimum_height">48dip</dimen>
     <dimen name="account_item_swatch_height">8dip</dimen>
     <dimen name="account_item_folder_color_width">36dip</dimen>
     <dimen name="drawer_footer_item_padding">16dp</dimen>
-    <dimen name="drawer_footer_text_padding_start">32dp</dimen>
     <dimen name="drawer_footer_item_minimum_height">48dp</dimen>
     <dimen name="drawer_item_font_size">16sp</dimen>
     <dimen name="widget_subject_font_size">13sp</dimen>
@@ -109,45 +123,44 @@
     <dimen name="widget_margin_left">0dip</dimen>
     <dimen name="widget_margin_right">0dip</dimen>
     <dimen name="widget_margin_bottom">0dip</dimen>
-    <dimen name="search_view_width">400dip</dimen>
     <dimen name="wait_padding">16dp</dimen>
     <integer name="chips_max_lines">2</integer>
-    <dimen name="tile_letter_font_size">24dp</dimen>
-    <dimen name="tile_letter_font_size_small">16dp</dimen>
+    <dimen name="tile_letter_font_size_tiny">16dp</dimen>
+    <dimen name="tile_letter_font_size_small">24dp</dimen>
+    <dimen name="tile_letter_font_size_medium">40dp</dimen>
     <dimen name="tile_divider_width">1dp</dimen>
-    <dimen name="dismiss_button_padding_start">20dip</dimen>
-    <dimen name="dismiss_button_padding_end">28dip</dimen>
     <dimen name="checked_text_padding">16dip</dimen>
     <dimen name="send_mail_as_padding">8dip</dimen>
-    <dimen name="undo_text_padding">16dip</dimen>
     <dimen name="dismiss_separator_padding">16dip</dimen>
-    <dimen name="teaser_text_padding">16dip</dimen>
+    <dimen name="teaser_text_padding">16dp</dimen>
+    <dimen name="attachment_item_padding_start">8dp</dimen>
     <dimen name="attachment_padding_start">16dp</dimen>
     <dimen name="attachment_padding_end">16dp</dimen>
     <dimen name="attachment_icon_padding">5dip</dimen>
     <dimen name="recipient_summary_margin">16dip</dimen>
 
     <!-- Minimum width of the folder teaser count TextView -->
-    <dimen name="folder_teaser_count_textview_minwidth">68dp</dimen>
+    <dimen name="folder_teaser_item_height">56dp</dimen>
+    <dimen name="folder_teaser_count_textview_min_width">48dp</dimen>
+    <dimen name="folder_teaser_start_margin">72dp</dimen>
+    <dimen name="folder_teaser_end_padding">16dp</dimen>
 
     <dimen name="compose_attachment_text_padding">8dip</dimen>
 
-    <dimen name="toast_bar_margin">4dip</dimen>
-
-    <dimen name="vacation_responder_width">800dip</dimen>
-    <dimen name="vacation_responder_padding_vertical">16dip</dimen>
-    <dimen name="vacation_responder_padding_horizontal">16dip</dimen>
-    <dimen name="vacation_responder_padding_horizontal_wide">80dip</dimen>
-    <dimen name="vacation_responder_inner_padding">12dip</dimen>
-    <dimen name="vacation_responder_padding_between_date_spinners">8dip</dimen>
-
-    <dimen name="new_message_button_padding">24dip</dimen>
+    <dimen name="vacation_responder_padding_horizontal">16dp</dimen>
+    <dimen name="vacation_responder_padding_between_date_spinners">16dp</dimen>
+    <dimen name="vacation_responder_main_text_size">16sp</dimen>
+    <dimen name="vacation_responder_header_text_size">12sp</dimen>
 
     <dimen name="message_attachment_bar_padding">8dip</dimen>
 
     <dimen name="widget_senders_padding_end">16dip</dimen>
     <dimen name="widget_attachment_padding_end">8dp</dimen>
 
+    <dimen name="search_leading_button_width">56dp</dimen>
+    <dimen name="search_main_text_padding">16dp</dimen>
+    <dimen name="search_ending_button_width">56dp</dimen>
+    <dimen name="search_suggestion_padding">16dp</dimen>
     <dimen name="search_results_padding">16dp</dimen>
     <dimen name="search_banner_text_size">12sp</dimen>
 
@@ -170,12 +183,12 @@
     <dimen name="conv_list_wide_personal_indicator_padding_end">8dip</dimen>
     <dimen name="conv_list_wide_star_padding_start">32dip</dimen>
     <dimen name="conv_list_wide_color_block_padding_end">64dip</dimen>
-    <dimen name="conv_list_divider_inset">72dp</dimen>
 
     <dimen name="conv_list_spacious_padding_start">22dip</dimen>
     <dimen name="conv_list_spacious_padding_end">16dip</dimen>
     <dimen name="conv_list_spacious_contact_image_padding_end">16dip</dimen>
     <dimen name="conv_list_spacious_star_padding_end">-8dip</dimen>
+    <dimen name="conv_list_footer_load_more_padding">72dp</dimen>
 
     <dimen name="badge_padding_extra_width">6dip</dimen>
     <dimen name="badge_rounded_corner_radius">2dip</dimen>
@@ -184,25 +197,18 @@
 
     <dimen name="compose_attachment_tile_text_end_padding">4dip</dimen>
 
-    <dimen name="folder_teaser_start_padding">24dp</dimen>
-    <dimen name="folder_teaser_end_padding">16dp</dimen>
-
-    <dimen name="folder_teaser_label_start_padding">24dp</dimen>
-    <dimen name="folder_teaser_label_end_padding">16dp</dimen>
-
     <dimen name="teaser_arrow_margin_start">16dip</dimen>
     <dimen name="teaser_arrow_margin_end">12dip</dimen>
 
     <dimen name="empty_view_text_width">228dip</dimen>
-    <dimen name="empty_view_text_size">22sp</dimen>
+    <dimen name="empty_view_text_size">20sp</dimen>
     <dimen name="empty_view_space">16dip</dimen>
 
     <dimen name="avatar_border_width">.5dp</dimen>
     <dimen name="progress_bar_height">12dp</dimen>
 
-    <dimen name="undo_description_padding">16dip</dimen>
-    <dimen name="undo_icon_padding_start">12dip</dimen>
-    <dimen name="undo_icon_padding_end">8dip</dimen>
+    <dimen name="undo_text_padding">24dp</dimen>
+    <dimen name="undo_description_padding">24dp</dimen>
 
     <!-- The width of the wearable image background. -->
     <dimen name="wearable_background_width">320dp</dimen>
@@ -211,6 +217,7 @@
 
     <dimen name="compose_wrapper_top_padding">0dp</dimen>
     <dimen name="compose_wrapper_side_padding">0dp</dimen>
+    <dimen name="compose_header_padding">8dp</dimen>
     <dimen name="compose_header_btn_padding">8dp</dimen>
     <dimen name="compose_header_min_height">56dp</dimen>
     <dimen name="compose_header_text_size">16sp</dimen>
@@ -227,4 +234,8 @@
 
     <dimen name="account_item_name_start_padding">16dp</dimen>
     <dimen name="account_item_name_end_padding">8dp</dimen>
+
+    <dimen name="action_bar_content_inset_start">72dp</dimen>
+    <dimen name="security_hold_text_width">240dp</dimen>
+    <dimen name="security_hold_view_text_size">18sp</dimen>
 </resources>
diff --git a/res/values/drawables.xml b/res/values/drawables.xml
index 240604f..edbe769 100644
--- a/res/values/drawables.xml
+++ b/res/values/drawables.xml
@@ -16,5 +16,6 @@
     limitations under the License.
 -->
 <resources>
-    <drawable name="ic_attach">@drawable/ic_attach_image_holo_light</drawable>
+    <drawable name="ic_arrow_back_24dp_with_rtl">@drawable/ic_arrow_back_24dp</drawable>
+    <drawable name="ic_arrow_back_wht_24dp_with_rtl">@drawable/ic_arrow_back_wht_24dp</drawable>
 </resources>
diff --git a/res/values/shortcut_keys.xml b/res/values/shortcut_keys.xml
index c360f51..78be21d 100644
--- a/res/values/shortcut_keys.xml
+++ b/res/values/shortcut_keys.xml
@@ -15,15 +15,39 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+<resources>
+    <!-- All shortcuts need to be combined with CTRL -->
 
-    <!-- Character, that when combined with CTRL, should cause a save action -->
+    <!-- open compose -->
+    <string name="trigger_compose_char" translatable="false">n</string>
+    <!-- archive, can also be remove folder when archive is not applicable -->
+    <string name="trigger_archive_char" translatable="false">d</string>
+    <!-- delete (\u0008 is BACKSPACE), can also be clear trash/spam -->
+    <!-- TODO: there is a separate ASCII for DEL, should we support that? -->
+    <string name="trigger_delete_char" translatable="false">\u0008</string>
+    <!-- send (TODO: looks like edittext is consuming this event) -->
+    <string name="trigger_send_char" translatable="false">\u000a</string>
+    <!-- save draft -->
     <string name="trigger_save_char" translatable="false">s</string>
-    <!-- Character, that when combined with CTRL, should open compose -->
-    <string name="trigger_compose_char" translatable="false">c</string>
-    <!-- Character, that when combined with CTRL, should trigger a refresh -->
+    <!-- manual refresh -->
     <string name="trigger_refresh_char" translatable="false">u</string>
-    <!-- Character, that when combined with CTRL, should trigger the Y button action (sometimes archive, sometimes delete, etc) -->
-    <string name="trigger_y_char" translatable="false">y</string>
+    <!-- open navigation drawer -->
+    <string name="trigger_toggle_drawer_char" translatable="false">m</string>
+    <!-- Settings -->
+    <string name="trigger_settings_char" translatable="false">,</string>
+    <!-- Help & Feedback -->
+    <string name="trigger_help_char" translatable="false">/</string>
+    <!-- reply TODO -->
+    <string name="trigger_reply_char" translatable="false">`</string>
+    <!-- reply all -->
+    <string name="trigger_reply_all_char" translatable="false">r</string>
+    <!-- mark as read/unread -->
+    <string name="trigger_toggle_read_unread_char" translatable="false">i</string>
+    <!-- change label -->
+    <string name="trigger_change_label_char" translatable="false">l</string>
+    <!-- print -->
+    <string name="trigger_print_char" translatable="false">p</string>
+    <!-- undo in snack bar TODO punted -->
+    <string name="trigger_undo_char" translatable="false">z</string>
 
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 94071d8..608acdb 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -19,10 +19,6 @@
     <!-- Names of packages and authorities that are common to all apps
     and read from resources -->
 
-    <!-- Name of the search suggestions authority that looks up recent suggestions. This
-         needs to be modified in AndroidManifest.xml and res/xml/searchable.xml as well.  -->
-    <string name="suggestions_authority" translatable="false">com.android.mail.suggestionsprovider</string>
-
     <!-- Layout tests strings -->
     <string name="mock_content_provider" translatable="false">Mock Content Provider</string>
     <string name="conversation_content_provider" translatable="false">Conversation Content Provider</string>
@@ -56,6 +52,8 @@
     <string name="discard">Discard</string>
     <!-- The possible ways to reply to a message [CHAR LIMIT=15] -->
     <string name="compose">Compose</string>
+    <!-- The action bar title for the default compose mode [CHAR LIMIT=10] -->
+    <string name="compose_title">Compose</string>
     <!-- The possible ways to reply to a message [CHAR LIMIT=15] -->
     <string-array name="compose_modes">
         <!-- Reply -->
@@ -89,12 +87,10 @@
     <string name="too_large_to_attach_additional">File not attached. <xliff:g id="maxSize">%1$s</xliff:g> limit reached.</string>
     <!-- Toast, problem attaching file [CHAR LIMIT=100] -->
     <string name="generic_attachment_problem">Couldn\'t attach file.</string>
+    <!-- Toast, cannot attach the provided file because the calling context doesn't have the permission [CHAR LIMIT=100] -->
+    <string name="attachment_permission_denied">Permission denied for the attachment.</string>
     <!-- Displayed for one second after trying to send with no recipients in To field [CHAR LIMIT=200]-->
     <string name="recipient_needed">Add at least one recipient.</string>
-    <!-- Title for recipient error dialog [CHAR LIMIT=200]-->
-    <string name="recipient_error_dialog_title">Recipient error</string>
-    <!-- Title for send confirmation dialog [CHAR LIMIT=200]-->
-    <string name="confirm_send_title">Send message?</string>
     <!-- Messages for send confirmation dialog [CHAR LIMIT=100]-->
     <string name="confirm_send_message_with_no_subject">There\'s no text in the message subject.</string>
     <string name="confirm_send_message_with_no_body">There\'s no text in the message body.</string>
@@ -112,6 +108,8 @@
     <string name="mark_read">Mark read</string>
     <!-- Menu item: mark this conversation as unread -->
     <string name="mark_unread">Mark unread</string>
+    <!-- Menu item: toggle read/unread for menus that contain both read and unread options -->
+    <string name="toggle_read_unread">Toggle read unread</string>
     <!--  Menu item: mute this conversation -->
     <string name="mute">Mute</string>
     <!-- Menu item: add a star to this conversation -->
@@ -150,6 +148,9 @@
     <string name="menu_change_folders">Change folders</string>
     <!-- Menu item: moves to folders for selected conversation(s). [CHAR LIMIT = 30] -->
     <string name="menu_move_to">Move to</string>
+    <!-- Menu item move_to state for displaying as an action or in overflow -->
+    <!-- 0 corresponds to SHOW_AS_ACTION_NEVER -->
+    <string name="menu_move_to_state" translatable="false">0</string>
     <!-- Menu item: moves current or selected conversation(s) to Inbox. [CHAR LIMIT = 30] -->
     <string name="menu_move_to_inbox">Move to Inbox</string>
     <!-- Menu item: manages the folders for this account. [CHAR LIMIT = 30] -->
@@ -172,6 +173,8 @@
     <string name="menu_settings">Settings</string>
     <!-- Menu item: search through the Gmail inbox -->
     <string name="menu_search">Search</string>
+    <!-- Menu item: toggle drawer -->
+    <string name="menu_toggle_drawer">Toggle drawer</string>
     <!-- Title of the drawer, indicating what it is used for, which is navigation of the app -->
     <string name="drawer_title">Navigation</string>
 
@@ -222,16 +225,12 @@
     <string name="preview_attachment">Preview</string>
     <!-- Read email screen, button name. Save an attachment to sd card. [CHAR LIMIT=10] -->
     <string name="save_attachment">Save</string>
-    <!-- Read email screen, button name. Cancel a downloading attachment. [CHAR LIMIT=10] -->
-    <string name="cancel_attachment">Cancel</string>
-    <!-- Read email screen, button name. Open an attachment. [CHAR LIMIT=10] -->
-    <string name="open_attachment">Open</string>
-    <!-- Read email screen, button name. Install an attachment. [CHAR LIMIT=10] -->
-    <string name="install_attachment">Install</string>
     <!-- Read email screen, button name. Redownload an attachment [CHAR LIMIT=20]-->
     <string name="download_again">Download again</string>
     <!-- A supplemental option on attachments for apps to override. This string intentionally blank here. [CHAR LIMIT=20] -->
     <string name="attachment_extra_option1" translatable="false"></string>
+    <!-- Remove this attachment [CHAR LIMIT=50] -->
+    <string name="remove_attachment_desc">Remove attachment <xliff:g id="attachmentName">%s</xliff:g></string>
     <!-- Dialog box title [CHAR LIMIT=30] -->
     <string name="more_info_attachment">Info</string>
     <!-- Dialog box message, displayed when we could not view an attachment. [CHAR LIMIT=200]-->
@@ -278,27 +277,17 @@
     <string name="contextmenu_map">Map</string>
     <!-- Menu item to share link  [CHAR LIMIT=50]-->
     <string name="contextmenu_sharelink">Share link</string>
-    <!-- Menu item that displays the help page for Gmail.  [CHAR LIMIT=50]-->
-    <string name="contextmenu_help">Help</string>
-    <!-- Solicit feedback string in about screen [CHAR LIMIT=50]-->
-    <string name="contextmenu_feedback">Send feedback</string>
 
     <!-- Browse list item strings -->
-    <!-- Text indicating how many messages are selected in the top action bar
-    [CHAR LIMIT=40] -->
-    <string name="num_selected"><xliff:g id="number" example="7">%d</xliff:g></string>
-    <!--  Displayed when drag and drop conversations "Move ? conversations" [CHAR LIMIT=50] -->
-    <plurals name="move_conversation">
-        <!-- Move 1 conversation -->
-        <item quantity="one">Move conversation</item>
-        <!-- Move several conversations -->
-        <item quantity="other">Move <xliff:g>%1$d</xliff:g> conversations</item>
-    </plurals>
     <!-- Formatting string for the content description field of a conversation list item when device is in accessibility mode. [CHAR LIMIT=250] -->
     <string name="content_description"><xliff:g id="toHeader">%1$s</xliff:g><xliff:g id="participant">%2$s</xliff:g> about <xliff:g id="subject">%3$s</xliff:g>, <xliff:g id="snippet">%4$s</xliff:g> on <xliff:g id="date">%5$s</xliff:g>, <xliff:g id="readstate">%6$s</xliff:g></string>
     <!-- Formatting string for the content description field of a conversation list item when device is in accessibility mode and the message was received today. [CHAR LIMI=250] -->
     <string name="content_description_today"><xliff:g id="toHeader">%1$s</xliff:g><xliff:g id="participant">%2$s</xliff:g> about <xliff:g id="subject">%3$s</xliff:g>, <xliff:g id="snippet">%4$s</xliff:g> at <xliff:g id="time">%5$s</xliff:g>, <xliff:g id="readstate">%6$s</xliff:g></string>
-     <!-- String used in content description field of a conversation list item when device is in accessibility mode and the conversation was read [CHAR LIMIT=250] -->
+    <!-- Formatting string for the content description field of a conversation list item when device is in accessibility mode. [CHAR LIMIT=250] -->
+    <string name="content_description_with_folders"><xliff:g id="toHeader">%1$s</xliff:g><xliff:g id="participant">%2$s</xliff:g> about <xliff:g id="subject">%3$s</xliff:g>, <xliff:g id="snippet">%4$s</xliff:g> on <xliff:g id="date">%5$s</xliff:g>, <xliff:g id="readstate">%6$s</xliff:g>, labels: <xliff:g id="folders">%7$s</xliff:g></string>
+    <!-- Formatting string for the content description field of a conversation list item when device is in accessibility mode and the message was received today. [CHAR LIMI=250] -->
+    <string name="content_description_today_with_folders"><xliff:g id="toHeader">%1$s</xliff:g><xliff:g id="participant">%2$s</xliff:g> about <xliff:g id="subject">%3$s</xliff:g>, <xliff:g id="snippet">%4$s</xliff:g> at <xliff:g id="time">%5$s</xliff:g>, <xliff:g id="readstate">%6$s</xliff:g>, labels: <xliff:g id="folders">%7$s</xliff:g></string>
+    <!-- String used in content description field of a conversation list item when device is in accessibility mode and the conversation was read [CHAR LIMIT=250] -->
     <string name="read_string">conversation read</string>
     <!-- String used in content description field of a conversation list item when device is in accessibility mode and the conversation was not read [CHAR LIMIT=250] -->
     <string name="unread_string">conversation unread</string>
@@ -372,58 +361,58 @@
     <string name="undo">Undo</string>
 
     <plurals name="conversation_unstarred">
-        <item quantity="one">Unstarring <xliff:g id="count">%1$d</xliff:g> conversation.</item>
-        <item quantity="other">Unstarring <xliff:g id="count">%1$d</xliff:g> conversations.</item>
+        <item quantity="one">Unstarring <xliff:g id="count">%1$d</xliff:g> conversation</item>
+        <item quantity="other">Unstarring <xliff:g id="count">%1$d</xliff:g> conversations</item>
     </plurals>
 
     <!-- The following are shown as a toast after the operation has completed --><skip />
     <plurals name="conversation_muted">
         <!-- Displayed while muting one conversation -->
-        <item quantity="one">&lt;b><xliff:g id="count">%1$d</xliff:g>&lt;/b> muted.</item>
+        <item quantity="one">&lt;b><xliff:g id="count">%1$d</xliff:g>&lt;/b> muted</item>
         <!-- Displayed while muting several conversations -->
-        <item quantity="other">&lt;b><xliff:g id="count">%1$d</xliff:g>&lt;/b> muted.</item>
+        <item quantity="other">&lt;b><xliff:g id="count">%1$d</xliff:g>&lt;/b> muted</item>
     </plurals>
 
     <plurals name="conversation_spammed">
         <!-- Displayed while reporting one conversation as spam -->
-        <item quantity="one">&lt;b><xliff:g id="count">%1$d</xliff:g>&lt;/b> reported as spam.</item>
+        <item quantity="one">&lt;b><xliff:g id="count">%1$d</xliff:g>&lt;/b> reported as spam</item>
         <!-- Displayed while reporting several conversations as spam -->
-        <item quantity="other">&lt;b><xliff:g id="count">%1$d</xliff:g>&lt;/b> reported as spam.</item>
+        <item quantity="other">&lt;b><xliff:g id="count">%1$d</xliff:g>&lt;/b> reported as spam</item>
     </plurals>
 
     <plurals name="conversation_not_spam">
         <!-- Displayed while reporting one conversation as not spam -->
-        <item quantity="one">&lt;b><xliff:g id="count">%1$d</xliff:g>&lt;/b> reported as not spam.</item>
+        <item quantity="one">&lt;b><xliff:g id="count">%1$d</xliff:g>&lt;/b> reported as not spam</item>
         <!-- Displayed while reporting several conversations as not spam -->
-        <item quantity="other">&lt;b><xliff:g id="count">%1$d</xliff:g>&lt;/b> reported as not spam.</item>
+        <item quantity="other">&lt;b><xliff:g id="count">%1$d</xliff:g>&lt;/b> reported as not spam</item>
     </plurals>
 
     <plurals name="conversation_not_important">
         <!-- Displayed while reporting one conversation as not important in the important folder -->
-        <item quantity="one">&lt;b><xliff:g id="count">%1$d</xliff:g>&lt;/b> marked not important.</item>
+        <item quantity="one">&lt;b><xliff:g id="count">%1$d</xliff:g>&lt;/b> marked not important</item>
         <!-- Displayed while reporting several conversations as not important in the important folder -->
-        <item quantity="other">&lt;b><xliff:g id="count">%1$d</xliff:g>&lt;/b> marked not important.</item>
+        <item quantity="other">&lt;b><xliff:g id="count">%1$d</xliff:g>&lt;/b> marked not important</item>
     </plurals>
 
     <plurals name="conversation_phished">
         <!-- Displayed while reporting one conversation as phishing -->
-        <item quantity="one">&lt;b><xliff:g id="count">%1$d</xliff:g>&lt;/b> reported as phishing.</item>
+        <item quantity="one">&lt;b><xliff:g id="count">%1$d</xliff:g>&lt;/b> reported as phishing</item>
         <!-- Displayed while reporting several conversations as phishing -->
-        <item quantity="other">&lt;b><xliff:g id="count">%1$d</xliff:g>&lt;/b> reported as phishing.</item>
+        <item quantity="other">&lt;b><xliff:g id="count">%1$d</xliff:g>&lt;/b> reported as phishing</item>
     </plurals>
 
     <plurals name="conversation_archived">
         <!-- Displayed while archiving one conversation -->
-        <item quantity="one">&lt;b><xliff:g id="count">%1$d</xliff:g>&lt;/b> archived.</item>
+        <item quantity="one">&lt;b><xliff:g id="count">%1$d</xliff:g>&lt;/b> archived</item>
         <!-- Displayed while archiving multiple conversations -->
-        <item quantity="other">&lt;b><xliff:g id="count">%1$d</xliff:g>&lt;/b> archived.</item>
+        <item quantity="other">&lt;b><xliff:g id="count">%1$d</xliff:g>&lt;/b> archived</item>
     </plurals>
 
     <plurals name="conversation_deleted">
         <!-- Displayed while deleting one conversation -->
-        <item quantity="one">&lt;b><xliff:g id="count">%1$d</xliff:g>&lt;/b> deleted.</item>
+        <item quantity="one">&lt;b><xliff:g id="count">%1$d</xliff:g>&lt;/b> deleted</item>
         <!-- Displayed while deleting multiple conversations -->
-        <item quantity="other">&lt;b><xliff:g id="count">%1$d</xliff:g>&lt;/b> deleted.</item>
+        <item quantity="other">&lt;b><xliff:g id="count">%1$d</xliff:g>&lt;/b> deleted</item>
     </plurals>
     <!-- Displayed when swiping away a single conversation to delete it [CHAR LIMIT=80] -->
     <string name="deleted">Deleted</string>
@@ -434,9 +423,9 @@
 
     <plurals name="conversation_folder_changed">
         <!-- Displayed while adding and removing folders to a single conversation. [CHAR LIMIT=100] -->
-        <item quantity="one">Changed folder.</item>
+        <item quantity="one">Changed folder</item>
         <!-- Displayed while adding and removing folders to multiple conversations. [CHAR LIMIT=100] -->
-        <item quantity="other">Changed folders.</item>
+        <item quantity="other">Changed folders</item>
     </plurals>
 
     <!-- Displayed after moving a conversation to a different folder. [CHAR LIMIT=100] -->
@@ -446,17 +435,18 @@
     <string name="search_results_header">Results</string>
     <!-- Toast shown when the user taps the search hard key when viewing an account that does not support search [CHAR LIMIT=100] -->
     <string name="search_unsupported">Search is not supported on this account.</string>
+    <!-- Accessibility description for the search suggestion item [CHAR LIMIT=100] -->
+    <string name="search_suggestion_desc">Suggestion: <xliff:g id="suggestion">%s</xliff:g></string>
 
     <!-- Conversation view -->
     <!--  Text anchor for control to add / change labels on a conversation when
           viewing it. [CHAR LIMIT=40] -->
     <string name="add_label">Add folder</string>
 
-    <!-- New Message notification text that appears over conversation view on incoming message. [CHAR LIMIT=40] -->
-    <string name="new_incoming_messages_one">Show new message from <xliff:g id="sender">%s</xliff:g>.</string>
-    <!-- New Message notification text that appears over conversation view on incoming messages. Will only be used if there is more than one new message. [CHAR LIMIT=40] -->
-    <plurals name="new_incoming_messages_many">
-        <item quantity="other">Show <xliff:g id="count">%1$d</xliff:g> new messages.</item>
+    <!-- New Message notification text that appears over conversation view on incoming messages. [CHAR LIMIT=40] -->
+    <plurals name="new_incoming_messages">
+        <item quantity="one"><xliff:g id="count">%1$d</xliff:g> new message</item>
+        <item quantity="other"><xliff:g id="count">%1$d</xliff:g> new messages</item>
     </plurals>
 
     <!-- Conversation message header strings -->
@@ -466,14 +456,23 @@
     <string name="hide_details">Hide details</string>
     <!-- Shown to display the recipient(s) of the message [CHAR LIMIT=10] -->
     <string name="to_message_header">to <xliff:g id="recipients">%1$s</xliff:g></string>
+    <!-- Shown to display the bcc recipient(s) of the message [CHAR LIMIT=10] -->
+    <string name="bcc_header_for_recipient_summary">bcc:\u0020</string>
     <!--  Icon name for showing sender contact information. [CHAR LIMIT=100] -->
     <string name="contact_info_string">Show contact information for <xliff:g id="name">%1$s</xliff:g></string>
     <!--  Icon name for showing sender contact information when we cannot get sender info. [CHAR LIMIT=100] -->
     <string name="contact_info_string_default">Show contact information</string>
-    <!-- Shown in collapsed mode when a conversation has more than one read message.
-         The message count is shown to the right of this text. [CHAR LIMIT=70] -->
+    <!-- Used for accessibility purposes when a conversation has several previously read
+         messages that are collapsed into a single touch target. Tapping on this touch target
+         expands these messages. [CHAR LIMIT=UNLIMITED] -->
     <plurals name="show_messages_read">
-        <item quantity="other"><xliff:g id="count" example="4">%1$d</xliff:g> older messages</item>
+        <item quantity="other">Expand <xliff:g id="count" example="4">%1$d</xliff:g> older messages</item>
+    </plurals>
+    <!-- Used for accessibility purposes when a conversation has several previously read
+         messages that are collapsed into a single touch target to announce that the messages
+         have been expanded. [CHAR LIMIT=UNLIMITED] -->
+    <plurals name="super_collapsed_block_accessibility_announcement">
+        <item quantity="other">Expanded <xliff:g id="count" example="4">%1$d</xliff:g> older messages</item>
     </plurals>
     <!-- Shown to display the from address of the message [CHAR LIMIT=10] -->
     <string name="from_heading">From:</string>
@@ -543,10 +542,10 @@
     <!-- Sync status errors. Please do not change the order [CHAR LIMIT=100] -->
     <string-array name="sync_status">
         <item>Success</item>
-        <item>No connection.</item>
-        <item>Couldn\'t sign in.</item>
-        <item>Security error.</item>
-        <item>Couldn\'t sync.</item>
+        <item>No connection</item>
+        <item>Couldn\'t sign in</item>
+        <item>Security error</item>
+        <item>Couldn\'t sync</item>
         <item>Internal Error</item>
         <item>Server Error</item>
     </string-array>
@@ -577,9 +576,6 @@
         <item quantity="other"><xliff:g id="count" example="4">%1$d</xliff:g> unread</item>
     </plurals>
 
-    <!-- Displayed in the actionbar when unread count > 99. [CHAR LIMIT=30] -->
-    <string name="actionbar_large_unread_count"><xliff:g id="count">%1$d</xliff:g>+ unread</string>
-
     <!-- Displayed at the end of the conversation list in the widget. Tapping on this will open the default Inbox. [CHAR LIMIT=35] -->
     <string name="view_more_conversations">View more conversations</string>
 
@@ -605,9 +601,17 @@
     <!-- Title of the search dialog -->
     <string name="search_title" translatable="false">Unified Email</string>
     <!-- Shown in light gray in the Search box when no text has been entered [CHAR LIMIT=20]-->
-    <string name="search_hint">Search mail</string>
+    <string name="search_hint">Search</string>
     <!-- Search Results: Text for status of the search when the results are completely loaded [CHAR LIMIT=10] -->
     <string name="search_results_loaded"><xliff:g id="searchCount">%1$d</xliff:g></string>
+    <!-- Voice search is not supported on this device [CHAR LIMIT=100] -->
+    <string name="voice_search_not_supported">Voice search is not supported on this device.</string>
+    <!-- Description of the back button [CHAR LIMIT=100] -->
+    <string name="search_back_desc">Close search</string>
+    <!-- Description of the voice icon [CHAR LIMIT=100] -->
+    <string name="search_voice_desc">Start voice search</string>
+    <!-- Description of the clear icon (clears the current input text in the search bar) [CHAR LIMIT=100] -->
+    <string name="search_clear_desc">Clear search text</string>
 
     <!-- Shown in conversation list footer when application cannot make a connection [CHAR LIMIT=20]-->
     <string name="network_error">No connection</string>
@@ -662,6 +666,8 @@
     <string name="info">Info</string>
     <!-- Button text for the button to click to report feedback. [CHAR LIMIT=20]-->
     <string name="report">Report</string>
+    <!-- Button text for the button to click to show newly received messages in the active thread. [CHAR LIMIT=20]-->
+    <string name="show">Show</string>
     <!-- Dialog title when a sync error occurs. [CHAR LIMIT=50]-->
     <string name="sync_error">Couldn\'t sync.</string>
     <!-- Dialog title when a sync error occurs. [CHAR LIMIT=100]-->
@@ -798,26 +804,23 @@
     <string name="silent_ringtone">Silent</string>
 
     <!-- Settings screen, preference name for archive vs. delete [CHAR LIMIT=50] -->
-    <string name="preference_removal_action_title">Archive &amp; delete actions</string>
+    <string name="preference_removal_action_title">Default action</string>
     <!-- Options to select from for whether to have archive or delete as the remove action [CHAR LIMIT=50] -->
     <string-array name="prefEntries_removal_action">
-        <item>Show archive only</item>
-        <item>Show delete only</item>
-        <item>Show archive &amp; delete</item>
+        <item>Archive</item>
+        <item>Delete</item>
     </string-array>
     <!-- Description of currently selected option of whether to use archive or delete as remove action [CHAR LIMIT=200] -->
     <string-array name="prefSummaries_removal_action_summary">
-        <item>Show archive only</item>
-        <item>Show delete only</item>
-        <item>Show archive &amp; delete</item>
+        <item>Archive</item>
+        <item>Delete</item>
     </string-array>
     <string-array translatable="false" name="prefValues_removal_action">
         <item>archive</item>
         <item>delete</item>
-        <item>archive-and-delete</item>
     </string-array>
     <!-- Dialog title for the choosing whether to use archive or delete as remove action [CHAR LIMIT=150] -->
-    <string name="prefDialogTitle_removal_action">Archive &amp; delete actions</string>
+    <string name="prefDialogTitle_removal_action">Default action</string>
     <!-- The default value -->
     <string translatable="false" name="prefDefault_removal_action">archive</string>
 
@@ -828,10 +831,8 @@
     <!--  DO NOT TRANSLATE THE BELOW STRING - In order to allow overriding of this for K tablets (but not pre-K tablets), we use an indirection with the actual string defined above. -->
     <string name="preferences_default_reply_all_summary" translatable="false">@string/preferences_default_reply_all_summary_impl</string>
 
-    <!-- Preference name for swipe action when action is archive [CHAR LIMIT=100]-->
-    <string name="preference_swipe_title_archive">Swipe to archive</string>
-    <!-- Preference name for swipe action when action is delete [CHAR LIMIT=100]-->
-    <string name="preference_swipe_title_delete">Swipe to delete</string>
+    <!-- Preference name for swipe actions preference [CHAR LIMIT=100]-->
+    <string name="preference_swipe_title">Swipe actions</string>
     <!-- Preference description swiping in conversation list option [CHAR LIMIT=100] -->
     <string name="preference_swipe_description">In conversation list</string>
 
@@ -881,25 +882,13 @@
     <!-- Tip for letting user know that their device auto-sync setting
         is turned off, in case they are wondering why they are not
         receiving any new mail. [CHAR LIMIT=250] -->
-    <string name="auto_sync_off">Auto-sync is off.</string>
-
-    <!-- Tap to turn on device auto-sync setting.  [CHAR LIMIT=250] -->
-    <string name="tap_to_enable_sync">Touch to turn on.</string>
+    <string name="auto_sync_off">Auto-sync is off. Touch to turn on.</string>
 
     <!-- Tip for letting user know that their account level sync setting
         is turned off, in case they are wondering why they are not
-        receiving any new mail. [CHAR LIMIT=250] -->
-    <string name="account_sync_off">Account sync is off.</string>
-
-    <!-- Hint text for user to enable sync in Gmail's account settings.
-         The whole string should read "Turn on in Account settings.", but because we need
-         "Account settings" to appear as blue link text, it's a parameter here.
-         [CHAR LIMIT=250] -->
-    <string name="enable_sync_in_account_settings">Turn on in <xliff:g id="account_settings">%1$s</xliff:g>.</string>
-
-    <!-- This is used as a parameter to another string and combined reads
-         "Turn on in Account settings." [CHAR LIMIT=250] -->
-    <string name="account_settings_param">Account settings</string>
+        receiving any new mail. Then prompts the user to enable sync in Gmail's
+        account settings. [CHAR LIMIT=250] -->
+    <string name="account_sync_off">Account sync is off. Turn on in &lt;a href=\'http://www.example.com\'>Account\u00A0settings.&lt;/a></string>
 
     <!-- Hint text that there are X number of unsent messages users
     Outbox. [CHAR LIMIT=250] -->
@@ -926,7 +915,7 @@
     <string name="turn_auto_sync_on_dialog_confirm_btn">Turn on</string>
 
     <!-- Button in conversation list to show more folders [CHAR LIMIT=50] -->
-    <string name="show_n_more_folders">Show <xliff:g id="number">%1$s</xliff:g> more folders</string>
+    <string name="show_n_more_folders">Show <xliff:g id="number">%1$s</xliff:g> folders</string>
     <!-- Button in conversation list to hide folders [CHAR LIMIT=50] -->
     <string name="hide_folders">Hide folders</string>
 
@@ -1163,5 +1152,19 @@
     <!-- Name of the Settings activity -->
     <string name="activity_preferences">Settings</string>
 
+    <!-- Content description for the action menu overflow button. [CHAR LIMIT=NONE] -->
+    <string name="overflow_description">More options</string>
+
     <string name="user_agent_format" translatable="false">%1$s AndroidUnifiedEmail/%2$s</string>
+
+    <!-- Text when there is a security hold on an account that needs to be accepted. The email address param takes the for "abc@xyz.com" -->
+    <string name="security_hold_required_text">Security update required for <xliff:g id="email_address">%1$s</xliff:g></string>
+
+    <!-- Text to go to the dialog to accept the security hold -->
+    <string name="update_security_text">update now</string>
+    <!-- Shown when user submits a form. [CHAR LIMIT=40] -->
+    <string name="forms_are_disabled">Forms are disabled in Gmail</string>
+
+    <!-- activity name of the photoviewer -->
+    <string name="photo_view_activity" translatable="false">com.android.mail.photo.MailPhotoViewActivity</string>
 </resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index e049ed1..5e53375 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -16,11 +16,22 @@
      limitations under the License.
 -->
 <resources xmlns:tools="http://schemas.android.com/tools">
+    <style name="ToolbarTitleStyle" parent="@style/TextAppearance.Widget.AppCompat.Toolbar.Title">
+        <item name="android:ellipsize">end</item>
+        <item name="android:paddingLeft">12dp</item>
+        <item name="android:paddingRight">12dp</item>
+        <item name="android:singleLine">true</item>
+        <item name="android:textAlignment">viewStart</item>
+        <item name="android:textColor">@android:color/white</item>
+    </style>
+
     <!-- Compose Styles -->
     <style name="RecipientEditTextViewStyleBase" parent="@style/RecipientEditTextView">
         <item name="android:layout_gravity">center_vertical</item>
+        <item name="android:dropDownVerticalOffset">0dp</item>
         <item name="android:gravity">center_vertical</item>
         <item name="android:maxLines">@integer/chips_max_lines</item>
+        <item name="android:minHeight">@dimen/compose_header_min_height</item>
         <item name="android:paddingTop">12dp</item>
         <item name="android:paddingBottom">12dp</item>
         <item name="android:paddingLeft">0dp</item>
@@ -49,8 +60,8 @@
         <item name="android:layout_height">wrap_content</item>
         <item name="android:layout_gravity">center_vertical</item>
         <item name="android:background">@null</item>
-        <item name="android:paddingTop">20dp</item>
-        <item name="android:paddingBottom">20dp</item>
+        <item name="android:paddingTop">16dp</item>
+        <item name="android:paddingBottom">16dp</item>
     </style>
 
     <style name="ComposeSubjectView" parent="@style/ComposeEditTextView">
@@ -66,17 +77,21 @@
         <item name="android:textColorHint">@color/compose_label_hint</item>
     </style>
 
-    <style name="RecipientComposeFieldSpacer">
+    <style name="DefaultDividerStyle">
         <item name="android:layout_width">match_parent</item>
         <item name="android:layout_height">@dimen/divider_height</item>
-        <item name="android:background">@color/compose_divider_color</item>
+        <item name="android:background">@color/light_gray</item>
     </style>
 
-    <style name="ComposeHeading">
+    <style name="ComposeHeadingPadding">
+        <item name="android:paddingRight">@dimen/compose_header_padding</item>
+    </style>
+
+    <style name="ComposeHeading" parent="@style/ComposeHeadingPadding">
         <item name="android:layout_width">wrap_content</item>
         <item name="android:layout_height">wrap_content</item>
         <item name="android:gravity">center_vertical</item>
-        <item name="android:minHeight">56dp</item>
+        <item name="android:minHeight">@dimen/compose_header_min_height</item>
         <item name="android:minWidth">56dp</item>
         <item name="android:textAlignment">viewStart</item>
         <item name="android:textColor">@color/compose_label_text</item>
@@ -138,52 +153,22 @@
 
     <style name="ComposeArea" parent="AbstractComposeAreaWithRtl" />
 
-    <style name="ComposeAreaWrapper">
-        <item name="android:layout_gravity">center_horizontal</item>
-        <item name="android:paddingLeft">@dimen/compose_wrapper_side_padding</item>
-        <item name="android:paddingRight">@dimen/compose_wrapper_side_padding</item>
-        <item name="android:paddingTop">@dimen/compose_wrapper_top_padding</item>
-    </style>
+    <style name="ComposeAreaWrapper" />
 
     <style name="ComposeAttachmentTileTextEndStyle">
         <item name="android:paddingRight">@dimen/compose_attachment_tile_text_end_padding</item>
     </style>
 
-    <style name="AttachmentContainer">
-        <item name="android:background">@drawable/attachment_bg_holo</item>
-        <item name="android:layout_width">match_parent</item>
-        <item name="android:layout_height">48dip</item>
-    </style>
-
-    <style name="AttachmentTextContainer">
-        <item name="android:paddingLeft">@dimen/compose_attachment_text_padding</item>
-    </style>
-
-    <style name="AttachmentName">
-        <item name="android:singleLine">true</item>
-        <item name="android:layout_width">wrap_content</item>
-        <item name="android:layout_height">wrap_content</item>
-        <item name="android:textColor">#333333</item>
-        <item name="android:textAppearance">?android:attr/textAppearanceSmall</item>
-    </style>
-
-    <style name="AttachmentSize" parent="@style/AttachmentName">
-        <item name="android:textColor">#aaaaaa</item>
-        <item name="android:textSize">12sp</item>
-    </style>
-
-    <style name="AttachmentThumbnail">
-        <item name="android:layout_marginLeft">8dip</item>
-        <item name="android:layout_width">wrap_content</item>
-        <item name="android:layout_height">wrap_content</item>
-    </style>
-
     <style name="QuotedTextCheckbox">
         <item name="android:layout_marginLeft">@dimen/quoted_text_checkbox_margin_offset</item>
     </style>
 
     <!-- End Compose styles -->
 
+    <style name="DrawerUnreadCount" parent="@style/UnreadCount">
+        <item name="android:textStyle">bold</item>
+    </style>
+
     <style name="UnreadCount">
         <item name="android:layout_width">40dp</item>
         <item name="android:layout_height">wrap_content</item>
@@ -191,7 +176,7 @@
         <item name="android:singleLine">true</item>
         <item name="android:includeFontPadding">true</item>
         <item name="android:textSize">14sp</item>
-        <item name="android:textColor">@color/folder_item_text_color</item>
+        <item name="android:textColor">@color/folder_unread_text_color</item>
         <item name="android:paddingTop">4dp</item>
         <item name="android:paddingBottom">4dp</item>
     </style>
@@ -203,15 +188,12 @@
     <style name="UnseenCount">
         <item name="android:layout_width">wrap_content</item>
         <item name="android:layout_height">wrap_content</item>
-        <item name="android:layout_centerVertical">true</item>
+        <item name="android:layout_gravity">center_vertical</item>
         <item name="android:gravity">center</item>
         <item name="android:singleLine">true</item>
-        <item name="android:includeFontPadding">false</item>
         <item name="android:textSize">12sp</item>
         <item name="android:textColor">@android:color/white</item>
         <item name="android:textStyle">normal</item>
-        <item name="android:paddingTop">5dp</item>
-        <item name="android:paddingBottom">5dp</item>
         <item name="android:paddingLeft">6dp</item>
         <item name="android:paddingRight">6dp</item>
     </style>
@@ -221,34 +203,69 @@
     <style name="ConversationListFade" parent="@style/ConversationListFadeBase">
         <item name="android:divider">@null</item>
     </style>
+    <style name="WidgetConversationListFade" parent="@style/ConversationListFadeBase">
+        <item name="android:divider">@color/widget_conversation_list_divider_color</item>
+        <item name="android:dividerHeight">@dimen/divider_height</item>
+    </style>
     <!-- End browse list item styles -->
 
+    <!-- Shared by floating action button including v21 and rtl (never overriden) -->
     <style name="AbstractFloatingActionButtonStyle">
         <item name="android:layout_width">wrap_content</item>
         <item name="android:layout_height">wrap_content</item>
-        <item name="android:layout_marginBottom">@dimen/floating_action_bar_margin</item>
-        <item name="android:background">@drawable/compose_button</item>
+        <item name="android:layout_marginBottom">@dimen/compose_button_margin_bottom</item>
+        <item name="android:scaleType">center</item>
+        <item name="android:contentDescription">@string/compose</item>
+        <item name="android:focusable">false</item>
+        <item name="android:layout_gravity">bottom|end</item>
     </style>
 
-    <style name="FloatingActionButtonStyle" parent="AbstractFloatingActionButtonStyle">
-        <item name="android:layout_gravity">bottom|right</item>
-        <item name="android:layout_marginRight">@dimen/floating_action_bar_margin</item>
+    <!-- Used by floating action button to center the red circle & pencil over the shadow asset for
+        pre-L and overriden in v21 where we have elevation to produce the shadow
+    -->
+    <style name="FloatingActionButtonBackgroundStyle" parent="AbstractFloatingActionButtonStyle">
+        <item name="android:paddingBottom">@dimen/compose_button_padding_bottom</item>
+        <item name="android:background">@drawable/ic_fab_4dpshadow</item>
+        <item name="android:src">@drawable/compose_button</item>
+    </style>
+
+    <!-- Style to handle RTL for the floating action button -->
+    <style name="FloatingActionButtonStyle" parent="FloatingActionButtonBackgroundStyle">
+        <item name="android:layout_marginRight">@dimen/compose_button_margin_side</item>
     </style>
 
     <style name="SnackBarActionTextStyle">
-        <item name="android:layout_gravity">right</item>
+        <item name="android:layout_gravity">end</item>
+        <item name="android:background">?attr/selectableItemBackgroundBorderless</item>
+        <item name="android:paddingLeft">@dimen/snack_bar_margin_horizontal</item>
         <item name="android:paddingRight">@dimen/snack_bar_margin_horizontal</item>
     </style>
 
-    <!-- Undo bar styles -->
-    <style name="AbstractUndoTextStyle">
-        <item name="android:textSize">12sp</item>
-        <item name="android:textColor">#aaaaaa</item>
-        <item name="android:textStyle">bold</item>
+    <style name="SnackBarDescriptionTextStyle">
+        <item name="android:layout_marginLeft">@dimen/snack_bar_margin_horizontal</item>
     </style>
 
-    <style name="UndoTextStyle" parent="AbstractUndoTextStyle">
+    <!-- Undo bar styles -->
+    <style name="UndoTextStyle">
+        <item name="android:background">?android:attr/selectableItemBackground</item>
+        <item name="android:focusable">true</item>
+        <item name="android:paddingLeft">@dimen/undo_text_padding</item>
         <item name="android:paddingRight">@dimen/undo_text_padding</item>
+        <item name="android:text">@string/undo</item>
+        <item name="android:textAllCaps">true</item>
+        <item name="android:textColor">@color/text_color_undo</item>
+        <item name="android:textSize">16sp</item>
+    </style>
+
+    <style name="UndoNotificationTextStyle">
+        <item name="android:background">?android:attr/selectableItemBackground</item>
+        <item name="android:focusable">true</item>
+        <item name="android:paddingLeft">@dimen/undo_text_padding</item>
+        <item name="android:paddingRight">@dimen/undo_text_padding</item>
+        <item name="android:text">@string/undo</item>
+        <item name="android:textAllCaps">true</item>
+        <item name="android:textColor">@color/text_color_undo_notification</item>
+        <item name="android:textSize">16sp</item>
     </style>
     <!-- End undo bar styles -->
 
@@ -268,8 +285,8 @@
     </style>
 
     <style name="ConversationSubjectStyle">
+        <item name="android:lineSpacingExtra">4sp</item>
         <item name="android:textColor">@color/conversation_view_text_color_dark</item>
-        <item name="android:textIsSelectable">true</item>
         <item name="android:textSize">@dimen/conversation_header_font_size</item>
     </style>
 
@@ -279,10 +296,11 @@
 
     <style name="ConversationFooterButtonStyle">
         <item name="android:layout_width">0dp</item>
-        <item name="android:layout_height">80sp</item>
+        <item name="android:layout_height">wrap_content</item>
         <item name="android:layout_weight">1</item>
         <item name="android:background">?android:attr/selectableItemBackground</item>
-        <item name="android:gravity">center</item>
+        <item name="android:gravity">center_horizontal</item>
+        <item name="android:minHeight">80sp</item>
         <item name="android:paddingTop">12dp</item>
         <item name="android:textColor">@color/conversation_view_footer_text_color</item>
         <item name="android:textSize">14sp</item>
@@ -300,7 +318,6 @@
     </style>
 
     <style name="AbstractMessageHeaderSubtitleStyle">
-        <item name="android:singleLine">true</item>
         <item name="android:textSize">@dimen/message_header_subtitle_text_size</item>
         <item name="android:textColor">@color/conversation_view_text_color_light</item>
         <item name="android:textColorLink">@color/conversation_view_text_color_link_blue</item>
@@ -308,6 +325,7 @@
 
     <style name="MessageHeaderSubtitleStyle" parent="AbstractMessageHeaderSubtitleStyle">
         <item name="android:layout_alignParentLeft">true</item>
+        <item name="android:singleLine">true</item>
     </style>
 
     <style name="MessageHeaderSnippetStyle">
@@ -357,6 +375,12 @@
         <item name="android:scaleType">center</item>
     </style>
 
+    <style name="MessageHeaderOverflowButtonStyle" parent="@style/OverflowButtonStyle">
+        <item name="android:layout_width">@dimen/message_header_overflow_button_width</item>
+        <item name="android:layout_height">@dimen/message_header_action_button_height</item>
+        <item name="android:layout_marginTop">@dimen/message_header_action_button_margin_top</item>
+    </style>
+
     <style name="MessageAttachmentButtonBaseStyle" parent="@style/MessageButtonStyleBase">
         <item name="android:layout_width">wrap_content</item>
         <item name="android:minHeight">0dip</item>
@@ -375,16 +399,6 @@
     </style>
     <!-- End conversation view message header styles -->
 
-    <!-- Account Item (Folder List) styles -->
-    <style name="AbstractAccountItemIcon">
-        <item name="android:layout_height">@dimen/account_item_swatch_height</item>
-        <item name="android:layout_width">@dimen/account_item_folder_color_width</item>
-    </style>
-
-    <style name="AccountItemIcon" parent="AbstractAccountItemIcon">
-        <item name="android:layout_alignParentLeft">true</item>
-    </style>
-
     <!-- Folder styles -->
     <style name="AbstractFolderColorBoxStyle">
         <item name="android:layout_height">@dimen/folder_swatch_height</item>
@@ -407,6 +421,7 @@
         <item name="android:padding">8dp</item>
         <item name="android:focusable">false</item>
         <item name="android:focusableInTouchMode">false</item>
+        <item name="android:textAlignment">viewStart</item>
         <item name="android:textColor">@color/text_color_grey</item>
         <item name="android:textSize">16sp</item>
         <item name="android:layout_gravity">center_vertical</item>
@@ -417,6 +432,14 @@
         <item name="android:layout_marginRight">@dimen/folder_selection_margin_end</item>
     </style>
 
+    <style name="SingleFolderSelectionItemStyle" parent="FolderSelectionItemStyle">
+         <item name="android:padding">@dimen/single_folder_list_item_padding</item>
+    </style>
+
+    <style name="MultiFolderSelectionItemStyle" parent="SingleFolderSelectionItemStyle">
+        <item name="android:checkMark">?android:attr/listChoiceIndicatorMultiple</item>
+    </style>
+
     <!-- Widget styles -->
     <style name="WidgetTitle" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
         <item name="android:singleLine">true</item>
@@ -439,12 +462,24 @@
         <item name="android:src">@drawable/ic_menu_moreoverflow_mtrl_alpha</item>
     </style>
 
-    <style name="ActionBarOverflowButtonStyle.Appcompat" parent="@style/Widget.AppCompat.ActionButton.Overflow">
-        <item name="android:src">@drawable/ic_menu_moreoverflow_mtrl_alpha</item>
+    <style name="ActionBarShadow">
+        <item name="android:visibility">visible</item>
     </style>
 
     <style name="ActionBarStyle" parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">
-        <item name="android:background">@color/actionbar_color</item>
+        <item name="android:background">@color/primary_color</item>
+    </style>
+
+    <style name="ActionBarTextAppearanceLargeStyle" parent="@android:style/TextAppearance.Holo.Widget.PopupMenu.Large">
+        <item name="android:textColor">?android:attr/textColorPrimaryInverse</item>
+    </style>
+
+    <style name="ActionBarTextAppearanceSmallStyle" parent="@android:style/TextAppearance.Holo.Widget.PopupMenu.Small">
+        <item name="android:textColor">?android:attr/textColorPrimaryInverse</item>
+    </style>
+
+    <style name="ActionBarDividerlessListViewStyle" parent="@android:style/Widget.Holo.ListView">
+        <item name="android:divider">@null</item>
     </style>
 
     <style name="WaitFragmentTitleBase" parent="@android:style/Widget.Holo.TextView" />
@@ -462,8 +497,6 @@
     <style name="NotificationSecondaryText">
     </style>
 
-    <style name="TwoPaneConversationList" />
-
     <style name="AttachmentButtonStyle">
         <item name="android:clickable">true</item>
         <item name="android:layout_width">48dip</item>
@@ -530,27 +563,7 @@
     <style name="FailedTextAppearance" parent="@style/DraftTextAppearance"></style>
 
     <style name="LinksInTipTextAppearance">
-        <item name="android:textColor">?android:attr/textColorLink</item>
-    </style>
-
-    <style name="AbstractNewMessageButtonStyleBase" parent="@android:style/Widget.Holo.Light.Button" />
-
-    <style name="AbstractNewMessageButtonStyle" parent="@style/AbstractNewMessageButtonStyleBase">
-        <item name="android:layout_marginBottom">@dimen/toast_bar_margin</item>
-        <item name="android:background">@drawable/new_message_toast_background</item>
-        <item name="android:singleLine">true</item>
-        <item name="android:textColor">@color/new_message_bar_text</item>
-        <item name="android:textSize">14sp</item>
-    </style>
-
-    <style name="NewMessageButtonStyle" parent="AbstractNewMessageButtonStyle">
-        <item name="android:layout_marginLeft">@dimen/toast_bar_margin</item>
-        <item name="android:layout_marginRight">@dimen/toast_bar_margin</item>
-    </style>
-
-    <style name="DismissButtonStyle">
-        <item name="android:paddingLeft">@dimen/dismiss_button_padding_start</item>
-        <item name="android:paddingRight">@dimen/dismiss_button_padding_end</item>
+        <item name="android:textColor">@color/tip_teaser_link</item>
     </style>
 
     <style name="MessageDetailsHeaderStyle">
@@ -585,25 +598,36 @@
         <item name="android:layout_marginRight">@dimen/conversation_border_margin_side</item>
     </style>
 
-    <style name="MiniDrawerItemStyleBase">
+    <style name="DrawerNavigationStyle">
+        <item name="android:nextFocusRight">@+id/conversation_list_view</item>
+    </style>
+
+    <style name="MiniDrawerItemStyleBase" parent="@style/DrawerNavigationStyle">
+        <item name="android:layout_width">56dp</item>
+        <item name="android:layout_height">56dp</item>
+        <item name="android:layout_gravity">center_horizontal</item>
         <item name="android:background">?android:attr/selectableItemBackground</item>
         <item name="android:focusable">true</item>
-        <item name="android:nextFocusRight">@+id/conversation_list_view</item>
         <item name="android:scaleType">fitCenter</item>
     </style>
 
-    <style name="MiniDrawerFolderStyle" parent="@style/MiniDrawerItemStyleBase">
-        <item name="android:paddingTop">16dp</item>
-        <item name="android:paddingBottom">16dp</item>
-        <item name="android:paddingLeft">24dp</item>
-        <item name="android:paddingRight">24dp</item>
+    <style name="MiniDrawerFolderStyleBase" parent="@style/MiniDrawerItemStyleBase">
+        <item name="android:padding">16dp</item>
+    </style>
+
+    <style name="MiniDrawerFolderStyle" parent="@style/MiniDrawerFolderStyleBase">
+        <item name="android:scaleX">1</item>
     </style>
 
     <style name="MiniDrawerAccountStyle" parent="@style/MiniDrawerItemStyleBase">
-        <item name="android:paddingTop">18dp</item>
-        <item name="android:paddingBottom">18dp</item>
-        <item name="android:paddingLeft">20dp</item>
-        <item name="android:paddingRight">20dp</item>
+        <item name="android:layout_marginTop">6dp</item>
+        <item name="android:layout_marginBottom">6dp</item>
+        <item name="android:padding">12dp</item>
+    </style>
+
+    <style name="SingleFolderListIconStyle">
+        <item name="android:layout_marginLeft">@dimen/single_folder_list_item_start_margin</item>
+        <item name="android:scaleX">1</item>
     </style>
 
     <style name="FolderListItemStartStyle">
@@ -613,31 +637,27 @@
     <style name="FolderListIconStyle">
         <item name="android:layout_marginLeft">@dimen/folder_list_item_start_margin</item>
         <item name="android:layout_alignParentLeft">true</item>
-    </style>
-
-    <style name="FolderParentIconStyle">
-        <item name="android:layout_alignParentRight">true</item>
+        <item name="android:scaleX">1</item>
     </style>
 
     <style name="FolderListItemEndStyle">
-        <item name="android:layout_marginRight">@dimen/folder_list_item_end_margin</item>
-        <item name="android:layout_alignParentRight">true</item>
+        <item name="android:paddingRight">@dimen/folder_list_item_end_margin</item>
     </style>
 
-    <style name="FolderListItemStyle">
+    <style name="FolderListItemStyle" parent="@style/FolderListItemStyleBase" />
+
+    <style name="FolderListItemStyleBase">
         <item name="android:layout_marginLeft">@dimen/folder_list_item_text_start_margin</item>
         <item name="android:layout_marginRight">@dimen/folder_list_item_end_margin</item>
     </style>
 
-    <style name="DrawerFooterListItemStyle">
-        <item name="android:paddingLeft">@dimen/drawer_footer_text_padding_start</item>
-    </style>
+    <style name="DrawerFontStyle"/>
 
     <style name="DismissSeparatorStyle">
         <item name="android:layout_marginLeft">@dimen/dismiss_separator_padding</item>
     </style>
 
-    <style name="TeaserTextStyle">
+    <style name="TeaserStartMargin">
         <item name="android:layout_marginLeft">@dimen/teaser_text_padding</item>
     </style>
 
@@ -655,8 +675,12 @@
         <item name="android:layout_marginLeft">@dimen/attachment_icon_padding</item>
     </style>
 
-    <style name="UndoNotificationStyle">
-        <item name="android:layout_marginLeft">@android:dimen/notification_large_icon_width</item>
+    <style name="AttachmentTextContainer">
+        <item name="android:paddingLeft">@dimen/compose_attachment_text_padding</item>
+    </style>
+
+    <style name="AttachmentThumbnail">
+        <item name="android:layout_marginLeft">@dimen/attachment_item_padding_start</item>
     </style>
 
     <style name="UnreadCountWithMarginEndStyle" parent="UnreadCountRelativeLayout">
@@ -668,127 +692,50 @@
         <item name="android:layout_marginRight">@dimen/folder_list_item_end_margin</item>
     </style>
 
-    <style name="AccountRadioButtonStyle">
-        <item name="android:layout_marginLeft">@dimen/account_item_margin_start</item>
-    </style>
-
-    <style name="AccountUnreadCountStyle" parent="UnreadCountRelativeLayout">
-        <item name="android:layout_marginRight">@dimen/account_item_margin_end</item>
-        <item name="android:layout_alignParentRight">true</item>
-    </style>
-
-    <style name="CustomActionButtonBase" parent="@style/Widget.AppCompat.Light.ActionButton" />
-
-    <style name="CustomActionButton" parent="@style/CustomActionButtonBase">
-        <item name="android:layout_height">match_parent</item>
+    <style name="VacationResponderActionButton" parent="@style/Widget.AppCompat.Light.ActionButton">
         <item name="android:layout_width">0dp</item>
+        <item name="android:layout_height">match_parent</item>
         <item name="android:layout_weight">1</item>
         <item name="android:focusable">true</item>
         <item name="android:orientation">horizontal</item>
     </style>
 
-    <style name="CustomActionButtonImage">
+    <style name="VacationResponderActionButtonText">
         <item name="android:layout_height">wrap_content</item>
         <item name="android:layout_width">wrap_content</item>
-        <item name="android:padding">4dp</item>
-    </style>
-
-    <style name="CustomActionButtonText">
-        <item name="android:layout_height">wrap_content</item>
-        <item name="android:layout_width">wrap_content</item>
+        <item name="android:singleLine">true</item>
         <item name="android:textAppearance">?android:attr/actionMenuTextAppearance</item>
         <item name="android:textColor">?android:attr/actionMenuTextColor</item>
-        <item name="android:orientation">horizontal</item>
-        <item name="android:singleLine">true</item>
         <item name="android:ellipsize">none</item>
         <item name="android:padding">4dp</item>
     </style>
 
-    <style name="VacationResponderStyle">
-        <item name="android:paddingLeft">@dimen/vacation_responder_padding_horizontal</item>
-        <item name="android:paddingRight">@dimen/vacation_responder_padding_horizontal</item>
+    <style name="VacationResponderDatePadding">
+        <item name="android:layout_marginRight">@dimen/vacation_responder_padding_between_date_spinners</item>
     </style>
 
-    <style name="AbstractVacationResponderDateSpinnerBase"
-           parent="android:Widget.Holo.Light.Spinner" />
-
-    <style name="AbstractVacationResponderDateSpinner"
-           parent="@style/AbstractVacationResponderDateSpinnerBase">
-        <item name="android:textColor">@color/vacation_responder_spinner_text</item>
-        <item name="android:textSize">16sp</item>
+    <style name="VacationResponderInputField">
+        <item name="android:background">@android:color/transparent</item>
+        <item name="android:minHeight">56dp</item>
+        <item name="android:paddingLeft">0dp</item>
+        <item name="android:paddingRight">0dp</item>
+        <item name="android:textColorHint">@color/compose_label_hint</item>
     </style>
 
-    <style name="VacationResponderDateSpinner" parent="AbstractVacationResponderDateSpinner">
-        <item name="android:paddingLeft">@dimen/vacation_responder_inner_padding</item>
-        <item name="android:paddingRight">@dimen/vacation_responder_inner_padding</item>
-    </style>
-
-    <style name="VactionResponderStartDateSpinner" parent="VacationResponderDateSpinner">
-        <item name="android:layout_marginRight">
-            @dimen/vacation_responder_padding_between_date_spinners</item>
-    </style>
-
-    <style name="VactionResponderEndDateSpinner" parent="VacationResponderDateSpinner">
-        <item name="android:layout_marginLeft">
-            @dimen/vacation_responder_padding_between_date_spinners</item>
-    </style>
-
-    <style name="VacationResponderScrollViewStyle">
-        <item name="android:layout_width">match_parent</item>
-        <item name="android:layout_height">match_parent</item>
-    </style>
-
-    <style name="AbstractVacationResponderLabelSmall" parent="android:TextAppearance">
-        <item name="android:layout_width">0dip</item>
-        <item name="android:layout_height">wrap_content</item>
-        <item name="android:layout_weight">1</item>
-        <item name="android:textAllCaps">true</item>
-        <item name="android:textAppearance">?android:attr/textAppearanceSmall</item>
-        <item name="android:textSize">14sp</item>
-        <item name="android:textColor">@color/compose_label_text</item>
-    </style>
-
-    <style name="VacationResponderLabelSmall" parent="AbstractVacationResponderLabelSmall">
-        <item name="android:paddingLeft">@dimen/vacation_responder_inner_padding</item>
-        <item name="android:paddingRight">@dimen/vacation_responder_inner_padding</item>
-    </style>
-
-    <style name="VactionResponderStartDateLabel" parent="VacationResponderLabelSmall">
-        <item name="android:layout_marginRight">
-            @dimen/vacation_responder_padding_between_date_spinners</item>
-    </style>
-
-    <style name="VactionResponderEndDateLabel" parent="VacationResponderLabelSmall">
-        <item name="android:layout_marginLeft">
-            @dimen/vacation_responder_padding_between_date_spinners</item>
-    </style>
-
-    <style name="AbstractVacationResponderCheckBox">
+    <style name="VacationResponderCheckBox">
         <item name="android:layout_width">match_parent</item>
         <item name="android:layout_height">wrap_content</item>
+        <item name="android:background">?android:attr/selectableItemBackground</item>
         <item name="android:checked">true</item>
         <item name="android:checkMark">?android:attr/listChoiceIndicatorMultiple</item>
         <item name="android:gravity">center_vertical</item>
-        <item name="android:minHeight">?android:attr/listPreferredItemHeightSmall</item>
-        <item name="android:textAppearance">?android:attr/textAppearanceMedium</item>
+        <item name="android:minHeight">56dp</item>
+        <item name="android:textColor">@color/vacation_responder_main_text_color</item>
+        <item name="android:textSize">@dimen/vacation_responder_main_text_size</item>
     </style>
 
-    <style name="VacationResponderCheckBox" parent="AbstractVacationResponderCheckBox">
-        <item name="android:paddingLeft">@dimen/vacation_responder_inner_padding</item>
-        <item name="android:paddingRight">@dimen/vacation_responder_inner_padding</item>
-    </style>
-
-    <style name="VacationResponderSwitch">
-        <item name="android:paddingLeft">@dimen/vacation_responder_inner_padding</item>
-        <item name="android:paddingRight">@dimen/vacation_responder_inner_padding</item>
-    </style>
-
-    <style name="VacationResponderSubject" parent="ComposeSubjectView">
-        <item name="android:maxLength">@integer/vacation_responder_subject_length</item>
-    </style>
-
-    <style name="VacationResponderBody" parent="ComposeBodyView">
-        <item name="android:maxLength">@integer/vacation_responder_body_length</item>
+    <style name="VacationResponderActionBarStyle" parent="@style/Widget.AppCompat.ActionBar.Solid">
+        <item name="contentInsetStart">0dp</item>
     </style>
 
     <style name="MessageAttachmentBarMarginEndStyle">
@@ -803,6 +750,10 @@
         <item name="android:paddingRight">@dimen/widget_attachment_padding_end</item>
     </style>
 
+    <style name="WidgetHeaderStartMargin">
+        <item name="android:paddingLeft">16dp</item>
+    </style>
+
     <style name="SearchTextStyle">
         <item name="android:textColor">@color/search_banner_text</item>
         <item name="android:textSize">@dimen/search_banner_text_size</item>
@@ -915,6 +866,16 @@
     <style name="ConversationListSpaciousStarStyle">
         <item name="android:layout_marginRight">@dimen/conv_list_spacious_star_padding_end</item>
     </style>
+
+    <style name="ConversationListFooterLoadMoreStyle">
+        <item name="android:paddingLeft">@dimen/conv_list_footer_load_more_padding</item>
+    </style>
+
+    <style name="ConversationListDividerStyle">
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">@dimen/divider_height</item>
+        <item name="android:background">@color/divider_color</item>
+    </style>
     <!-- END Conversation list styles -->
 
     <style name="BadgeTextStyle">
@@ -923,21 +884,20 @@
         <item name="android:textStyle">bold</item>
     </style>
 
-    <style name="SpinnerAccountAddressStyle" parent="ComposeFromTextViewStyle">
-        <item name="android:paddingLeft">@dimen/custom_from_inner_padding</item>
+    <style name="SpinnerAccountNameStyle" parent="ComposeFromTextViewStyle">
+        <item name="android:paddingRight">@dimen/custom_from_inner_padding</item>
     </style>
 
-    <style name="FolderTeaserLabelMarginStyle">
-        <item name="android:layout_marginLeft">@dimen/folder_teaser_label_start_padding</item>
-        <item name="android:layout_marginRight">@dimen/folder_teaser_label_end_padding</item>
+    <style name="FolderTeaserUnreadCountTextStyle">
+        <item name="android:gravity">center_vertical|end</item>
+        <item name="android:minWidth">@dimen/folder_teaser_count_textview_min_width</item>
+        <item name="android:visibility">gone</item>
+        <item name="android:textColor">@color/folder_teaser_sub_text</item>
+        <item name="android:textSize">14sp</item>
     </style>
 
-    <style name="FolderTeaserMarginStartStyle">
-        <item name="android:layout_marginLeft">@dimen/folder_teaser_start_padding</item>
-    </style>
-
-    <style name="FolderTeaserMarginEndStyle">
-        <item name="android:layout_marginRight">@dimen/folder_teaser_end_padding</item>
+    <style name="FolderTeaserPaddingEndStyle">
+        <item name="android:paddingRight">@dimen/folder_teaser_end_padding</item>
     </style>
 
     <style name="ArrowStyle">
@@ -947,22 +907,17 @@
 
     <style name="UndoDescriptionStyle">
         <item name="android:paddingLeft">@dimen/undo_description_padding</item>
+        <item name="android:textColor">@color/text_color_undo_description</item>
     </style>
 
-    <style name="UndoIconStyle">
-        <item name="android:paddingLeft">@dimen/undo_icon_padding_start</item>
-        <item name="android:paddingRight">@dimen/undo_icon_padding_end</item>
-    </style>
-
-    <style name="Theme.AppCompat.Translucent">
-        <item name="android:windowBackground">@android:color/transparent</item>
-        <item name="android:colorBackgroundCacheHint">@null</item>
-        <item name="android:windowIsTranslucent">true</item>
-        <item name="android:windowAnimationStyle">@android:style/Animation</item>
+    <style name="UndoNotificationDescriptionStyle">
+        <item name="android:paddingLeft">@dimen/undo_description_padding</item>
+        <item name="android:textColor">@color/text_color_undo_notification_description</item>
     </style>
 
     <style name="AccountItemNameStyle">
         <item name="android:paddingLeft">@dimen/account_item_name_start_padding</item>
         <item name="android:paddingRight">@dimen/account_item_name_end_padding</item>
     </style>
+
 </resources>
diff --git a/res/values/themes.xml b/res/values/themes.xml
index 4b34591..2cee638 100644
--- a/res/values/themes.xml
+++ b/res/values/themes.xml
@@ -1,27 +1,43 @@
 <?xml version="1.0" encoding="utf-8"?>
-<resources>
+<resources xmlns:tools="http://schemas.android.com/tools">
     <style name="UnifiedEmailTheme" parent="@android:style/Theme.Holo.Light.DarkActionBar">
         <item name="android:actionBarStyle">@style/ActionBarStyle</item>
+        <item name="android:actionBarWidgetTheme">@style/ActionBarWidgetTheme</item>
         <item name="android:actionModeBackground">@color/action_mode_background</item>
         <item name="android:actionOverflowButtonStyle">@style/ActionBarOverflowButtonStyle</item>
-        <item name="android:homeAsUpIndicator">@drawable/ic_arrow_back_wht_24dp</item>
+        <item name="android:homeAsUpIndicator">@drawable/ic_arrow_back_wht_24dp_with_rtl</item>
         <item name="android:listViewWhiteStyle">@android:style/Widget.Holo.Light.ListView</item>
     </style>
 
+    <style name="ActionBarWidgetTheme" parent="@android:style/Theme.Holo">
+        <item name="android:dropDownListViewStyle">@style/ActionBarDividerlessListViewStyle</item>
+        <item name="android:popupMenuStyle">@android:style/Widget.Holo.Light.ListPopupWindow</item>
+        <item name="android:textAppearanceLargePopupMenu">@style/ActionBarTextAppearanceLargeStyle</item>
+        <item name="android:textAppearanceSmallPopupMenu">@style/ActionBarTextAppearanceSmallStyle</item>
+    </style>
+
     <style name="UnifiedEmailTheme.Appcompat" parent="@style/Theme.AppCompat.Light.DarkActionBar">
         <item name="actionModeBackground">@color/action_mode_background</item>
-        <item name="actionOverflowButtonStyle">@style/ActionBarOverflowButtonStyle.Appcompat</item>
-        <item name="colorPrimary">@color/actionbar_color</item>
-        <!-- Used by the StatusBar and NavBar (currently broken?) -->
-        <item name="colorPrimaryDark">@color/statusbar_color</item>
+        <item name="colorPrimary">@color/primary_color</item>
+        <item name="colorPrimaryDark">@color/primary_dark_color</item>
         <item name="colorAccent">@color/accent_blue</item>
-        <item name="homeAsUpIndicator">@drawable/ic_arrow_back_wht_24dp</item>
+        <item name="android:colorEdgeEffect">@color/edge_effect_color</item>
+        <item name="homeAsUpIndicator">@drawable/ic_arrow_back_wht_24dp_with_rtl</item>
     </style>
 
-    <style name="UnifiedEmailTheme.Appcompat.Toolbar" parent="@style/UnifiedEmailTheme.Appcompat">
-        <item name="android:windowNoTitle">true</item>
-        <item name="windowActionBar">false</item>
+    <style name="UnifiedEmailTheme.Appcompat.Toolbar" parent="@style/Theme.AppCompat.Light.NoActionBar">
+        <item name="actionBarPopupTheme">@style/ThemeOverlay.AppCompat.Light</item>
+        <item name="actionModeBackground">@color/action_mode_background</item>
+        <item name="colorPrimary">@color/primary_color</item>
+        <item name="colorPrimaryDark">@color/primary_dark_color</item>
+        <item name="colorAccent">@color/accent_blue</item>
+        <item name="android:colorEdgeEffect">@color/edge_effect_color</item>
+        <item name="homeAsUpIndicator">@drawable/ic_arrow_back_wht_24dp_with_rtl</item>
         <item name="windowActionModeOverlay">true</item>
+        <!-- Tell SystemUI that our activity window will draw the background for the status bar. -->
+        <item name="android:windowDrawsSystemBarBackgrounds" tools:ignore="NewApi">true</item>
+        <!-- Set the status bar to fully transparent. We’ll draw it ourselves since we want to draw other content over it. -->
+        <item name="android:statusBarColor" tools:ignore="NewApi">@color/mail_activity_status_bar_color</item>
     </style>
 
     <style name="MailActivityTheme" parent="@style/UnifiedEmailTheme.Appcompat.Toolbar" />
@@ -33,11 +49,14 @@
         <item name="android:windowBackground">@android:color/white</item>
     </style>
 
-    <style name="ComposeDropdownListViewStyle">
+    <style name="ComposeDropdownListViewStyle" parent="@style/Widget.AppCompat.Light.ListView.DropDown">
+        <item name="android:divider">@null</item>
         <item name="android:dividerHeight">0dp</item>
     </style>
 
-    <style name="VacationResponderTheme" parent="@style/UnifiedEmailTheme.Appcompat" />
+    <style name="VacationResponderTheme" parent="@style/UnifiedEmailTheme.Appcompat">
+        <item name="actionBarStyle">@style/VacationResponderActionBarStyle</item>
+    </style>
 
     <style name="ShortcutWidgetTheme" parent="@style/UnifiedEmailTheme.Appcompat" />
 
@@ -45,4 +64,16 @@
         <item name="android:windowNoDisplay">true</item>
     </style>
 
-</resources>
\ No newline at end of file
+    <style name="Theme.AppCompat.Translucent">
+        <item name="android:windowBackground">@android:color/transparent</item>
+        <item name="android:colorBackgroundCacheHint">@null</item>
+        <item name="android:windowIsTranslucent">true</item>
+        <item name="android:windowAnimationStyle">@android:style/Animation</item>
+    </style>
+
+    <style name="MailPhotoViewTheme" parent="@style/PhotoViewTheme">
+        <item name="colorPrimary">@color/primary_color</item>
+        <item name="android:colorEdgeEffect">@color/edge_effect_color</item>
+    </style>
+
+</resources>
diff --git a/res/xml/general_preferences.xml b/res/xml/general_preferences.xml
index 991d598..49e6b0d 100644
--- a/res/xml/general_preferences.xml
+++ b/res/xml/general_preferences.xml
@@ -34,7 +34,7 @@
             android:key="conversation-list-swipe"
             android:persistent="true"
             android:summary="@string/preference_swipe_description"
-            android:title="@string/preference_swipe_title_archive" />
+            android:title="@string/preference_swipe_title" />
 
     <CheckBoxPreference
             android:defaultValue="true"
@@ -71,17 +71,17 @@
             android:title="@string/preference_header_action_confirmations"
             android:key="removal-actions-group">
         <CheckBoxPreference
-                android:defaultValue="true"
+                android:defaultValue="false"
                 android:key="confirm-delete"
                 android:persistent="true"
                 android:title="@string/preference_confirm_before_delete_title" />
         <CheckBoxPreference
-                android:defaultValue="true"
+                android:defaultValue="false"
                 android:key="confirm-archive"
                 android:persistent="true"
                 android:title="@string/preference_confirm_before_archive_title" />
         <CheckBoxPreference
-                android:defaultValue="true"
+                android:defaultValue="false"
                 android:key="confirm-send"
                 android:persistent="true"
                 android:title="@string/preference_confirm_before_send_title" />
diff --git a/res/xml/searchable.xml b/res/xml/searchable.xml
deleted file mode 100644
index 5607f16..0000000
--- a/res/xml/searchable.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2012 Google Inc.
-     Licensed to 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.
--->
-
-<!-- Override the searchSuggestAuthority in the inheriting applications to point to the
-  correct package name.-->
-<searchable xmlns:android="http://schemas.android.com/apk/res/android"
-    android:label="@string/search_title"
-    android:hint="@string/search_hint"
-    android:icon="@drawable/ic_menu_search"
-    android:searchSuggestIntentAction="android.intent.action.SEARCH"
-    android:searchSuggestAuthority="com.android.mail"
-    android:imeOptions="actionSearch"
-    android:voiceSearchMode="showVoiceSearchButton|launchRecognizer" />
diff --git a/src/com/android/emailcommon/utility/MigrationUtils.java b/src/com/android/emailcommon/utility/MigrationUtils.java
new file mode 100644
index 0000000..3b5be30
--- /dev/null
+++ b/src/com/android/emailcommon/utility/MigrationUtils.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.emailcommon.utility;
+
+import com.android.mail.utils.LogUtils;
+
+public class MigrationUtils {
+    private static boolean sMigrationInProgress = false;
+
+    public static synchronized void migrationStarted() {
+        LogUtils.d(LogUtils.TAG, "migration started");
+        sMigrationInProgress = true;
+    }
+
+    public static synchronized void migrationFinished() {
+        LogUtils.d(LogUtils.TAG, "migration finished");
+        sMigrationInProgress = false;
+    }
+
+    public static synchronized boolean migrationInProgress() {
+        return sMigrationInProgress;
+    }
+}
diff --git a/src/com/android/mail/MailIntentService.java b/src/com/android/mail/MailIntentService.java
index 5996a96..8151dfc 100644
--- a/src/com/android/mail/MailIntentService.java
+++ b/src/com/android/mail/MailIntentService.java
@@ -21,7 +21,7 @@
 import android.net.Uri;
 
 import com.android.mail.analytics.Analytics;
-import com.android.mail.photo.ContactPhotoFetcher;
+import com.android.mail.photo.ContactFetcher;
 import com.android.mail.providers.Account;
 import com.android.mail.providers.Folder;
 import com.android.mail.utils.FolderUri;
@@ -74,7 +74,7 @@
 
         if (Intent.ACTION_LOCALE_CHANGED.equals(action)) {
             NotificationUtils.cancelAndResendNotificationsOnLocaleChange(
-                    this, getContactPhotoFetcher());
+                    this, getContactFetcher());
         } else if (ACTION_CLEAR_NEW_MAIL_NOTIFICATIONS.equals(action)) {
             final Account account = intent.getParcelableExtra(Utils.EXTRA_ACCOUNT);
             final Folder folder = intent.getParcelableExtra(Utils.EXTRA_FOLDER);
@@ -84,10 +84,13 @@
                     null, 0);
         } else if (ACTION_RESEND_NOTIFICATIONS.equals(action)) {
             final Uri accountUri = intent.getParcelableExtra(Utils.EXTRA_ACCOUNT_URI);
-            final Uri folderUri = intent.getParcelableExtra(Utils.EXTRA_FOLDER_URI);
 
-            NotificationUtils.resendNotifications(this, false, accountUri,
-                    new FolderUri(folderUri), getContactPhotoFetcher());
+            final Uri extraFolderUri = intent.getParcelableExtra(Utils.EXTRA_FOLDER_URI);
+            final FolderUri folderUri =
+                    extraFolderUri == null ? null : new FolderUri(extraFolderUri);
+
+            NotificationUtils.resendNotifications(
+                    this, false, accountUri, folderUri, getContactFetcher());
         } else if (ACTION_RESEND_NOTIFICATIONS_WEAR.equals(action)) {
             final Account account = intent.getParcelableExtra(Utils.EXTRA_ACCOUNT);
             final Folder folder = intent.getParcelableExtra(Utils.EXTRA_FOLDER);
@@ -97,7 +100,7 @@
             // when user replies to a conversation remotely from a Wear device.
             NotificationUtils.markConversationAsReadAndSeen(this, conversationUri);
             NotificationUtils.resendNotifications(this, false, account.uri,
-                    folder.folderUri, getContactPhotoFetcher());
+                    folder.folderUri, getContactFetcher());
         } else if (ACTION_SEND_SET_NEW_EMAIL_INDICATOR.equals(action)) {
             final int unreadCount = intent.getIntExtra(NotificationUtils.EXTRA_UNREAD_COUNT, 0);
             final int unseenCount = intent.getIntExtra(NotificationUtils.EXTRA_UNSEEN_COUNT, 0);
@@ -107,7 +110,7 @@
                     intent.getBooleanExtra(NotificationUtils.EXTRA_GET_ATTENTION, false);
 
             NotificationUtils.setNewEmailIndicator(this, unreadCount, unseenCount,
-                    account, folder, getAttention, getContactPhotoFetcher());
+                    account, folder, getAttention, getContactFetcher());
         } else if (Intent.ACTION_DEVICE_STORAGE_LOW.equals(action)) {
             // The storage_low state is recorded centrally even though
             // no handler might be present to change application state
@@ -120,15 +123,16 @@
 
     public static void broadcastBackupDataChanged(final Context context) {
         final Intent intent = new Intent(ACTION_BACKUP_DATA_CHANGED);
+        intent.setPackage(context.getPackageName());
         context.startService(intent);
     }
 
     /**
-     * Derived classes should override this method if they wish to provide their
-     * own photo loading behavior separate from the ContactProvider-based default.
-     * The default behavior of this method returns null.
+     * Derived classes should override this method if they wish to provide their own contact loading
+     * behavior separate from the ContactProvider-based default. The default behavior of this method
+     * returns null.
      */
-    public ContactPhotoFetcher getContactPhotoFetcher() {
+    public ContactFetcher getContactFetcher() {
         return null;
     }
 }
diff --git a/src/com/android/mail/SenderInfoLoader.java b/src/com/android/mail/SenderInfoLoader.java
index a58dae3..5596c5c 100644
--- a/src/com/android/mail/SenderInfoLoader.java
+++ b/src/com/android/mail/SenderInfoLoader.java
@@ -34,6 +34,7 @@
 import android.util.Pair;
 
 import com.android.bitmap.util.Trace;
+import com.android.mail.utils.Utils;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Maps;
 
@@ -240,9 +241,8 @@
         // The ContactsContract.IN_DEFAULT_DIRECTORY does not exist prior to android L. There is
         // no VERSION.SDK_INT value assigned for android L yet. Therefore, we must gate the
         // following logic on the development codename.
-        // TODO: use VERSION.SDK_INT once VERSION.SDK_INT is increased for L.
-        if (VERSION.CODENAME.startsWith("L")) {
-            return "in_default_directory ASC, " + Data._ID;
+        if (Utils.isRunningLOrLater()) {
+            return Contacts.IN_DEFAULT_DIRECTORY + " ASC, " + Data._ID;
         }
         return null;
     }
diff --git a/src/com/android/mail/adapter/DrawerItem.java b/src/com/android/mail/adapter/DrawerItem.java
deleted file mode 100644
index afd574a..0000000
--- a/src/com/android/mail/adapter/DrawerItem.java
+++ /dev/null
@@ -1,450 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mail.adapter;
-
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.TextView;
-
-import com.android.bitmap.BitmapCache;
-import com.android.mail.R;
-import com.android.mail.bitmap.ContactResolver;
-import com.android.mail.providers.Account;
-import com.android.mail.providers.Folder;
-import com.android.mail.ui.AccountItemView;
-import com.android.mail.ui.ControllableActivity;
-import com.android.mail.ui.FolderItemView;
-import com.android.mail.utils.FolderUri;
-import com.android.mail.utils.LogTag;
-import com.android.mail.utils.LogUtils;
-
-
-/**
- * An element that is shown in the {@link com.android.mail.ui.FolderListFragment}. This class is
- * only used for elements that are shown in the {@link com.android.mail.ui.DrawerFragment}.
- * This class is an enumeration of a few element types: Account, a folder, a recent folder,
- * or a header (a resource string). A {@link DrawerItem} can only be one type and can never
- * switch types. Items are created using methods like
- * {@link DrawerItem#ofAccount(ControllableActivity, Account, int, boolean, BitmapCache,
- * ContactResolver)},
- * {@link DrawerItem#ofWaitView(ControllableActivity)}, etc.
- *
- * Once created, the item can create a view using
- * {@link #getView(android.view.View, android.view.ViewGroup)}.
- */
-public class DrawerItem {
-    private static final String LOG_TAG = LogTag.getLogTag();
-    public final Folder mFolder;
-    public final Account mAccount;
-    private final int mResource;
-    /** True if the drawer item represents the current account, false otherwise */
-    private final boolean mIsSelected;
-    /** Either {@link #VIEW_ACCOUNT}, {@link #VIEW_FOLDER} or {@link #VIEW_HEADER} */
-    public final int mType;
-    /** A normal folder, also a child, if a parent is specified. */
-    public static final int VIEW_FOLDER = 0;
-    /** A text-label which serves as a header in sectioned lists. */
-    public static final int VIEW_HEADER = 1;
-    /** A text-label which serves as a header in sectioned lists. */
-    public static final int VIEW_BLANK_HEADER = 2;
-    /** An account object, which allows switching accounts rather than folders. */
-    public static final int VIEW_ACCOUNT = 3;
-    /** An expandable object for expanding/collapsing more of the list */
-    public static final int VIEW_WAITING_FOR_SYNC = 4;
-    /** The value (1-indexed) of the last View type.  Useful when returning the number of types. */
-    private static final int LAST_FIELD = VIEW_WAITING_FOR_SYNC + 1;
-
-    /** TODO: On adding another type, be sure to change getViewTypes() */
-
-    /** The parent activity */
-    private final ControllableActivity mActivity;
-    private final LayoutInflater mInflater;
-
-    // TODO(viki): Put all these constants in an interface.
-    /**
-     * Either {@link #FOLDER_INBOX}, {@link #FOLDER_RECENT} or {@link #FOLDER_OTHER} when
-     * {@link #mType} is {@link #VIEW_FOLDER}, or an {@link #ACCOUNT} in the case of
-     * accounts, and {@link #INERT_HEADER} otherwise.
-     */
-    public final int mFolderType;
-    /** Non existent item or folder type not yet set */
-    public static final int UNSET = 0;
-    /** An unclickable text-header visually separating the different types. */
-    public static final int INERT_HEADER = 0;
-    /** An inbox folder: Inbox, ...*/
-    public static final int FOLDER_INBOX = 1;
-    /** A folder from whom a conversation was recently viewed */
-    public static final int FOLDER_RECENT = 2;
-    /** A non-inbox folder that is shown in the "everything else" group. */
-    public static final int FOLDER_OTHER = 3;
-    /** An entry for the accounts the user has on the device. */
-    public static final int ACCOUNT = 4;
-
-    /** True if this view is enabled, false otherwise. */
-    private final boolean mIsEnabled;
-
-    private BitmapCache mImagesCache;
-    private ContactResolver mContactResolver;
-
-    @Override
-    public String toString() {
-        switch(mType) {
-            case VIEW_FOLDER:
-                return folderToString();
-            case VIEW_HEADER:
-                return headerToString();
-            case VIEW_BLANK_HEADER:
-                return blankHeaderToString();
-            case VIEW_ACCOUNT:
-                return accountToString();
-            case VIEW_WAITING_FOR_SYNC:
-                return waitToString();
-        }
-        // Should never come here.
-        return null;
-    }
-
-    /**
-     * Creates a drawer item with every instance variable specified.
-     *
-     * @param type the type of the item. This must be a VIEW_* element
-     * @param activity the underlying activity
-     * @param folder a non-null folder, if this is a folder type
-     * @param folderType the type of the folder. For folders this is:
-     *            {@link #FOLDER_INBOX}, {@link #FOLDER_RECENT},
-     *            {@link #FOLDER_OTHER}, or for non-folders this is
-     *            {@link #ACCOUNT}, or {@link #INERT_HEADER}
-     * @param account the account object, for an account drawer element
-     * @param resource either the string resource for a header, or the unread
-     *            count for an account.
-     * @param isCurrentAccount true if this item is the current account
-     */
-    private DrawerItem(int type, ControllableActivity activity, Folder folder, int folderType,
-            Account account, int resource, boolean isCurrentAccount, BitmapCache cache,
-            ContactResolver contactResolver) {
-        mActivity = activity;
-        mFolder = folder;
-        mFolderType = folderType;
-        mAccount = account;
-        mResource = resource;
-        mIsSelected = isCurrentAccount;
-        mInflater = LayoutInflater.from(activity.getActivityContext());
-        mType = type;
-        mIsEnabled = calculateEnabled();
-        mImagesCache = cache;
-        mContactResolver = contactResolver;
-    }
-
-    /**
-     * Create a folder item with the given type.
-     *
-     * @param activity the underlying activity
-     * @param folder a folder that this item represents
-     * @param folderType one of {@link #FOLDER_INBOX}, {@link #FOLDER_RECENT} or
-     * {@link #FOLDER_OTHER}
-     * @return a drawer item for the folder.
-     */
-    public static DrawerItem ofFolder(ControllableActivity activity, Folder folder,
-            int folderType) {
-        return new DrawerItem(VIEW_FOLDER, activity, folder,  folderType, null, -1, false,
-                null, null);
-    }
-
-    private String folderToString() {
-        final StringBuilder sb = new StringBuilder("[DrawerItem ");
-        sb.append(" VIEW_FOLDER ");
-        sb.append(", mFolder=");
-        sb.append(mFolder);
-        sb.append(", mFolderType=");
-        sb.append(mFolderType);
-        sb.append("]");
-        return sb.toString();
-    }
-
-    /**
-     * Creates an item from an account.
-     * @param activity the underlying activity
-     * @param account the account to create a drawer item for
-     * @param unreadCount the unread count of the account, pass zero if
-     * @param isCurrentAccount true if the account is the current account, false otherwise
-     * @return a drawer item for the account.
-     */
-    public static DrawerItem ofAccount(ControllableActivity activity, Account account,
-            int unreadCount, boolean isCurrentAccount, BitmapCache cache,
-            ContactResolver contactResolver) {
-        return new DrawerItem(VIEW_ACCOUNT, activity, null, ACCOUNT, account, unreadCount,
-                isCurrentAccount, cache, contactResolver);
-    }
-
-    private String accountToString() {
-        final StringBuilder sb = new StringBuilder("[DrawerItem ");
-        sb.append(" VIEW_ACCOUNT ");
-        sb.append(", mAccount=");
-        sb.append(mAccount);
-        sb.append("]");
-        return sb.toString();
-    }
-
-    /**
-     * Create a header item with a string resource.
-     *
-     * @param activity the underlying activity
-     * @param resource the string resource: R.string.all_folders_heading
-     * @return a drawer item for the header.
-     */
-    public static DrawerItem ofHeader(ControllableActivity activity, int resource) {
-        return new DrawerItem(VIEW_HEADER, activity, null, INERT_HEADER, null, resource, false,
-                null, null);
-    }
-
-    private String headerToString() {
-        final StringBuilder sb = new StringBuilder("[DrawerItem ");
-        sb.append(" VIEW_HEADER ");
-        sb.append(", mResource=");
-        sb.append(mResource);
-        sb.append("]");
-        return sb.toString();
-    }
-
-    public static DrawerItem ofBlankHeader(ControllableActivity activity) {
-        return new DrawerItem(VIEW_BLANK_HEADER, activity, null, INERT_HEADER, null, 0, false, null,
-                null);
-    }
-
-    private String blankHeaderToString() {
-        return "[DrawerItem VIEW_BLANK_HEADER]";
-    }
-
-    /**
-     * Create a "waiting for initialization" item.
-     *
-     * @param activity the underlying activity
-     * @return a drawer item with an indeterminate progress indicator.
-     */
-    public static DrawerItem ofWaitView(ControllableActivity activity) {
-        return new DrawerItem(VIEW_WAITING_FOR_SYNC, activity, null, INERT_HEADER, null, -1, false,
-                null, null);
-    }
-
-    private static String waitToString() {
-        return "[DrawerItem VIEW_WAITING_FOR_SYNC ]";
-    }
-
-    /**
-     * Returns a view for the given item. The method signature is identical to that required by a
-     * {@link android.widget.ListAdapter#getView(int, android.view.View, android.view.ViewGroup)}.
-     */
-    public View getView(View convertView, ViewGroup parent) {
-        final View result;
-        switch (mType) {
-            case VIEW_FOLDER:
-                result = getFolderView(convertView, parent);
-                break;
-            case VIEW_HEADER:
-                result = getHeaderView(convertView, parent);
-                break;
-            case VIEW_BLANK_HEADER:
-                result = getBlankHeaderView(convertView, parent);
-                break;
-            case VIEW_ACCOUNT:
-                result = getAccountView(convertView, parent);
-                break;
-            case VIEW_WAITING_FOR_SYNC:
-                result = getEmptyView(convertView, parent);
-                break;
-            default:
-                LogUtils.wtf(LOG_TAG, "DrawerItem.getView(%d) for an invalid type!", mType);
-                result = null;
-        }
-        return result;
-    }
-
-    /**
-     * Book-keeping for how many different view types there are. Be sure to
-     * increment this appropriately once adding more types as drawer items
-     * @return number of different types of view items
-     */
-    public static int getViewTypes() {
-        return LAST_FIELD;
-    }
-
-    /**
-     * Returns whether this view is enabled or not. An enabled view is one that accepts user taps
-     * and acts upon them.
-     * @return true if this view is enabled, false otherwise.
-     */
-    public boolean isItemEnabled() {
-        return mIsEnabled;
-    }
-
-    /** Calculate whether the item is enabled */
-    private boolean calculateEnabled() {
-        switch (mType) {
-            case VIEW_HEADER:
-            case VIEW_BLANK_HEADER:
-                // Headers are never enabled.
-                return false;
-            case VIEW_FOLDER:
-                // Folders are always enabled.
-                return true;
-            case VIEW_ACCOUNT:
-                // Accounts are always enabled.
-                return true;
-            case VIEW_WAITING_FOR_SYNC:
-                // Waiting for sync cannot be tapped, so never enabled.
-                return false;
-            default:
-                LogUtils.wtf(LOG_TAG, "DrawerItem.isItemEnabled() for invalid type %d", mType);
-                return false;
-        }
-    }
-
-    /**
-     * Returns whether this view is highlighted or not.
-     *
-     *
-     * @param currentFolder The current folder, according to the
-     *                      {@link com.android.mail.ui.FolderListFragment}
-     * @param currentType The type of the current folder. We want to only highlight a folder once.
-     *                    A folder might be in two places at once: in "All Folders", and in
-     *                    "Recent Folder". Valid types of selected folders are :
-     *                    {@link DrawerItem#FOLDER_INBOX}, {@link DrawerItem#FOLDER_RECENT} or
-     *                    {@link DrawerItem#FOLDER_OTHER}, or {@link DrawerItem#UNSET}.
-
-     * @return true if this DrawerItem results in a view that is highlighted (this DrawerItem is
-     *              the current folder.
-     */
-    public boolean isHighlighted(FolderUri currentFolder, int currentType) {
-        switch (mType) {
-            case VIEW_HEADER:
-            case VIEW_BLANK_HEADER:
-                // Headers are never highlighted
-                return false;
-            case VIEW_FOLDER:
-                // True if folder types and URIs are the same
-                if (currentFolder != null && mFolder != null && mFolder.folderUri != null) {
-                    return (mFolderType == currentType) && mFolder.folderUri.equals(currentFolder);
-                }
-                return false;
-            case VIEW_ACCOUNT:
-                // Accounts are never highlighted
-                return false;
-            case VIEW_WAITING_FOR_SYNC:
-                // Waiting for sync cannot be tapped, so never highlighted.
-                return false;
-            default:
-                LogUtils.wtf(LOG_TAG, "DrawerItem.isHighlighted() for invalid type %d", mType);
-                return false;
-        }
-    }
-
-    /**
-     * Return a view for an account object.
-     *
-     * @param convertView a view, possibly null, to be recycled.
-     * @param parent the parent viewgroup to attach to.
-     * @return a view to display at this position.
-     */
-    private View getAccountView(View convertView, ViewGroup parent) {
-        final AccountItemView accountItemView;
-        if (convertView != null) {
-            accountItemView = (AccountItemView) convertView;
-        } else {
-            accountItemView =
-                    (AccountItemView) mInflater.inflate(R.layout.account_item, parent, false);
-        }
-        accountItemView.bind(mActivity.getActivityContext(), mAccount, mIsSelected, mImagesCache,
-                mContactResolver);
-        return accountItemView;
-    }
-
-    /**
-     * Returns a text divider between divisions.
-     *
-     * @param convertView a previous view, perhaps null
-     * @param parent the parent of this view
-     * @return a text header at the given position.
-     */
-    private View getHeaderView(View convertView, ViewGroup parent) {
-        final View headerView;
-        if (convertView != null) {
-            headerView = convertView;
-        } else {
-            headerView = mInflater.inflate(R.layout.folder_list_header, parent, false);
-        }
-        final TextView textView = (TextView) headerView.findViewById(R.id.header_text);
-        textView.setText(mResource);
-        return headerView;
-    }
-
-    /**
-     * Returns a blank divider
-     *
-     * @param convertView A previous view, perhaps null
-     * @param parent the parent of this view
-     * @return a blank header
-     */
-    private View getBlankHeaderView(View convertView, ViewGroup parent) {
-        final View blankHeaderView;
-        if (convertView != null) {
-            blankHeaderView = convertView;
-        } else {
-            blankHeaderView = mInflater.inflate(R.layout.folder_list_blank_header, parent, false);
-        }
-        return blankHeaderView;
-    }
-
-    /**
-     * Return a folder: either a parent folder or a normal (child or flat)
-     * folder.
-     *
-     * @param convertView a view, possibly null, to be recycled.
-     * @return a view showing a folder at the given position.
-     */
-    private View getFolderView(View convertView, ViewGroup parent) {
-        final FolderItemView folderItemView;
-        if (convertView != null) {
-            folderItemView = (FolderItemView) convertView;
-        } else {
-            folderItemView =
-                    (FolderItemView) mInflater.inflate(R.layout.folder_item, parent, false);
-        }
-        folderItemView.bind(mFolder, mActivity);
-        folderItemView.setIcon(mFolder);
-        return folderItemView;
-    }
-
-    /**
-     * Return a view for the 'Waiting for sync' item with the indeterminate progress indicator.
-     *
-     * @param convertView a view, possibly null, to be recycled.
-     * @param parent the parent hosting this view.
-     * @return a view for "Waiting for sync..." at given position.
-     */
-    private View getEmptyView(View convertView, ViewGroup parent) {
-        final ViewGroup emptyView;
-        if (convertView != null) {
-            emptyView = (ViewGroup) convertView;
-        } else {
-            emptyView = (ViewGroup) mInflater.inflate(R.layout.drawer_empty_view, parent, false);
-        }
-        return emptyView;
-    }
-
-}
-
diff --git a/src/com/android/mail/analytics/Analytics.java b/src/com/android/mail/analytics/Analytics.java
index 10ddcb8..ded88a4 100644
--- a/src/com/android/mail/analytics/Analytics.java
+++ b/src/com/android/mail/analytics/Analytics.java
@@ -33,7 +33,10 @@
 
     public static final String EVENT_CATEGORY_MENU_ITEM = "menu_item";
 
-    public static final int CD_INDEX_ACCOUNT_TYPE = 1;
+    /**
+     * The email provider for this account.
+     */
+    public static final int CD_INDEX_ACCOUNT_EMAIL_PROVIDER = 1;
 
     public static final int CD_INDEX_ACCOUNT_COUNT = 2;
 
@@ -50,6 +53,34 @@
 
     public static final int CD_INDEX_AUTO_ADVANCE = 8;
 
+    /**
+     * Custom dimension in analytics to describe if the user already interacted with the app.
+     * The value is one of
+     * <ul>
+     *     <li>{@link #CD_VALUE_USER_RETENTION_TYPE_NEW},</li>
+     *     <li>{@link #CD_VALUE_USER_RETENTION_TYPE_UPGRADING} or</li>
+     *     <li>{@link @CD_VALUE_USER_RETENTION_TYPE_RETURNING}</li>
+     * </ul>
+     */
+    public static final int CD_INDEX_USER_RETENTION_TYPE = 9;
+
+    /**
+     * Value for {@link #CD_INDEX_USER_RETENTION_TYPE} meaning that the user has never used the
+     * Mail app anywhere before.
+     */
+    public static final String CD_VALUE_USER_RETENTION_TYPE_NEW = "new";
+    /**
+     * Value for {@link #CD_INDEX_USER_RETENTION_TYPE} meaning that the user has used an older
+     * version of the Mail app before.
+     */
+    public static final String CD_VALUE_USER_RETENTION_TYPE_UPGRADING = "upgrading";
+
+    /**
+     * Value for {@link #CD_INDEX_USER_RETENTION_TYPE} meaning that the user has already this
+     * version of the Mail app before.
+     */
+    public static final String CD_VALUE_USER_RETENTION_TYPE_RETURNING = "returning";
+
     private static Tracker sInstance;
 
     private Analytics() {
@@ -103,6 +134,8 @@
         @Override
         public void debugDispatchNow() {}
 
+        @Override
+        public void setEmail(String emailAddress, String accountManagerType) {}
     }
 
 }
diff --git a/src/com/android/mail/analytics/AnalyticsUtils.java b/src/com/android/mail/analytics/AnalyticsUtils.java
index 63b3e00..4d16e30 100644
--- a/src/com/android/mail/analytics/AnalyticsUtils.java
+++ b/src/com/android/mail/analytics/AnalyticsUtils.java
@@ -20,19 +20,6 @@
 import com.android.mail.R;
 
 public class AnalyticsUtils {
-
-    /**
-     * Map of email address suffixes to tags sent to analytics.
-     */
-    private static final String[][] SUFFIX_ACCOUNT_TYPES = {
-        {"@gmail.com", "gmail"},
-        {"@googlemail.com", "gmail"},
-        {"@google.com", "google-corp"},
-        {"@hotmail.com", "hotmail"},
-        {"@outlook.com", "outlook"},
-        {"@yahoo.com", "yahoo"},
-    };
-
     // individual apps should chain this method call with their own lookup tables if they have
     // app-specific menu items
     public static String getMenuItemString(int id) {
@@ -59,12 +46,12 @@
             s = "report_spam";
         } else if (id == R.id.mark_not_spam) {
             s = "mark_not_spam";
-        } else if (id == R.id.report_phishing) {
-            s = "report_phishing";
         } else if (id == R.id.compose) {
             s = "compose";
         } else if (id == R.id.refresh) {
             s = "refresh";
+        } else if (id == R.id.toggle_drawer) {
+            s = "toggle_drawer";
         } else if (id == R.id.settings) {
             s = "settings";
         } else if (id == R.id.help_info_menu_item) {
@@ -89,6 +76,8 @@
             s = "mark_read";
         } else if (id == R.id.unread) {
             s = "mark_unread";
+        } else if (id == R.id.toggle_read_unread) {
+            s = "toggle_read_unread";
         } else if (id == R.id.show_original) {
             s = "show_original";
         } else if (id == R.id.add_file_attachment) {
@@ -144,20 +133,4 @@
         }
         return s;
     }
-
-    public static String getAccountTypeForAccount(String name) {
-        if (name == null) {
-            return "unknown";
-        }
-
-        for (int i = 0; i < SUFFIX_ACCOUNT_TYPES.length; i++) {
-            final String[] row = SUFFIX_ACCOUNT_TYPES[i];
-            if (name.endsWith(row[0])) {
-                return row[1];
-            }
-        }
-
-        return "other";
-    }
-
 }
diff --git a/src/com/android/mail/analytics/Tracker.java b/src/com/android/mail/analytics/Tracker.java
index 6a9e710..5e276e9 100644
--- a/src/com/android/mail/analytics/Tracker.java
+++ b/src/com/android/mail/analytics/Tracker.java
@@ -27,10 +27,16 @@
     void activityStart(Activity a);
     void activityStop(Activity a);
     void sendEvent(String category, String action, String label, long value);
-    void sendTiming(String category, long millis, String name, String label);
     void sendMenuItemEvent(String category, int itemResId, String label, long value);
+    void sendTiming(String category, long millis, String name, String label);
     void sendView(String view);
     void setCustomDimension(int index, String value);
+    /**
+     * Sets the email address of the account being tracked,
+     * @param accountManagerType The accountManagerType of account in account manager.
+     */
+    public void setEmail(String emailAddress, String accountManagerType);
+
     void setCustomMetric(int index, Long value);
 
     void debugDispatchNow();
diff --git a/src/com/android/mail/bitmap/AbstractAvatarDrawable.java b/src/com/android/mail/bitmap/AbstractAvatarDrawable.java
new file mode 100644
index 0000000..4f65c84
--- /dev/null
+++ b/src/com/android/mail/bitmap/AbstractAvatarDrawable.java
@@ -0,0 +1,249 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.mail.bitmap;
+
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.BitmapShader;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.ColorFilter;
+import android.graphics.Matrix;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.graphics.Shader;
+import android.graphics.drawable.Drawable;
+
+import com.android.bitmap.BitmapCache;
+import com.android.bitmap.RequestKey;
+import com.android.bitmap.ReusableBitmap;
+
+import com.android.mail.R;
+import com.android.mail.bitmap.ContactResolver.ContactDrawableInterface;
+
+/**
+ * A drawable that encapsulates all the functionality needed to display a contact image,
+ * including request creation/cancelling and data unbinding/re-binding.
+ * <p>
+ * The actual contact resolving and decoding is handled by {@link ContactResolver}.
+ * <p>
+ * For better performance, you should define a cache with {@link #setBitmapCache(BitmapCache)}.
+ */
+public abstract class AbstractAvatarDrawable extends Drawable implements ContactDrawableInterface {
+    protected final Resources mResources;
+
+    private BitmapCache mCache;
+    private ContactResolver mContactResolver;
+
+    protected ContactRequest mContactRequest;
+    protected ReusableBitmap mBitmap;
+
+    protected final float mBorderWidth;
+    protected final Paint mBitmapPaint;
+    protected final Paint mBorderPaint;
+    protected final Matrix mMatrix;
+
+    private int mDecodedWidth;
+    private int mDecodedHeight;
+
+    public AbstractAvatarDrawable(final Resources res) {
+        mResources = res;
+
+        mBitmapPaint = new Paint();
+        mBitmapPaint.setAntiAlias(true);
+        mBitmapPaint.setFilterBitmap(true);
+        mBitmapPaint.setDither(true);
+
+        mBorderWidth = res.getDimensionPixelSize(R.dimen.avatar_border_width);
+
+        mBorderPaint = new Paint();
+        mBorderPaint.setColor(Color.TRANSPARENT);
+        mBorderPaint.setStyle(Paint.Style.STROKE);
+        mBorderPaint.setStrokeWidth(mBorderWidth);
+        mBorderPaint.setAntiAlias(true);
+
+        mMatrix = new Matrix();
+    }
+
+    public void setBitmapCache(final BitmapCache cache) {
+        mCache = cache;
+    }
+
+    public void setContactResolver(final ContactResolver contactResolver) {
+        mContactResolver = contactResolver;
+    }
+
+    @Override
+    public void draw(final Canvas canvas) {
+        final Rect bounds = getBounds();
+        if (!isVisible() || bounds.isEmpty()) {
+            return;
+        }
+
+        if (mBitmap != null && mBitmap.bmp != null) {
+            // Draw sender image.
+            drawBitmap(mBitmap.bmp, mBitmap.getLogicalWidth(), mBitmap.getLogicalHeight(), canvas);
+        } else {
+            // Draw the default image
+            drawDefaultAvatar(canvas);
+        }
+    }
+
+    protected abstract void drawDefaultAvatar(Canvas canvas);
+
+    /**
+     * Draw the bitmap onto the canvas at the current bounds taking into account the current scale.
+     */
+    protected void drawBitmap(final Bitmap bitmap, final int width, final int height,
+            final Canvas canvas) {
+        final Rect bounds = getBounds();
+        // Draw bitmap through shader first.
+        final BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP,
+                Shader.TileMode.CLAMP);
+        mMatrix.reset();
+
+        // Fit bitmap to bounds.
+        final float boundsWidth = (float) bounds.width();
+        final float boundsHeight = (float) bounds.height();
+        final float scale = Math.max(boundsWidth / width, boundsHeight / height);
+        mMatrix.postScale(scale, scale);
+
+        // Translate bitmap to dst bounds.
+        mMatrix.postTranslate(bounds.left, bounds.top);
+
+        shader.setLocalMatrix(mMatrix);
+        mBitmapPaint.setShader(shader);
+        drawCircle(canvas, bounds, mBitmapPaint);
+
+        // Then draw the border.
+        final float radius = bounds.width() / 2f - mBorderWidth / 2;
+        canvas.drawCircle(bounds.centerX(), bounds.centerY(), radius, mBorderPaint);
+    }
+
+    /**
+     * Draws the largest circle that fits within the given <code>bounds</code>.
+     *
+     * @param canvas the canvas on which to draw
+     * @param bounds the bounding box of the circle
+     * @param paint the paint with which to draw
+     */
+    protected static void drawCircle(Canvas canvas, Rect bounds, Paint paint) {
+        canvas.drawCircle(bounds.centerX(), bounds.centerY(), bounds.width() / 2, paint);
+    }
+
+    @Override
+    public int getDecodeWidth() {
+        return mDecodedWidth;
+    }
+
+    @Override
+    public int getDecodeHeight() {
+        return mDecodedHeight;
+    }
+
+    public void setDecodeDimensions(final int decodeWidth, final int decodeHeight) {
+        mDecodedWidth = decodeWidth;
+        mDecodedHeight = decodeHeight;
+    }
+
+    public void unbind() {
+        setImage(null);
+    }
+
+    public void bind(final String name, final String email) {
+        setImage(new ContactRequest(name, email));
+    }
+
+    private void setImage(final ContactRequest contactRequest) {
+        if (mContactRequest != null && mContactRequest.equals(contactRequest)) {
+            return;
+        }
+
+        if (mBitmap != null) {
+            mBitmap.releaseReference();
+            mBitmap = null;
+        }
+
+        if (mContactResolver != null) {
+            mContactResolver.remove(mContactRequest, this);
+        }
+
+        mContactRequest = contactRequest;
+
+        if (contactRequest == null) {
+            invalidateSelf();
+            return;
+        }
+
+        ReusableBitmap cached = null;
+        if (mCache != null) {
+            cached = mCache.get(contactRequest, true /* incrementRefCount */);
+        }
+
+        if (cached != null) {
+            setBitmap(cached);
+        } else {
+            decode();
+        }
+    }
+
+    private void decode() {
+        if (mContactRequest == null) {
+            return;
+        }
+        // Add to batch.
+        mContactResolver.add(mContactRequest, this);
+    }
+
+    private void setBitmap(final ReusableBitmap bmp) {
+        if (mBitmap != null && mBitmap != bmp) {
+            mBitmap.releaseReference();
+        }
+        mBitmap = bmp;
+        invalidateSelf();
+    }
+
+    @Override
+    public void onDecodeComplete(RequestKey key, ReusableBitmap result) {
+        final ContactRequest request = (ContactRequest) key;
+        // Remove from batch.
+        mContactResolver.remove(request, this);
+        if (request.equals(mContactRequest)) {
+            setBitmap(result);
+        } else {
+            // if the requests don't match (i.e. this request is stale), decrement the
+            // ref count to allow the bitmap to be pooled
+            if (result != null) {
+                result.releaseReference();
+            }
+        }
+    }
+
+    @Override
+    public void setAlpha(int alpha) {
+        mBitmapPaint.setAlpha(alpha);
+    }
+
+    @Override
+    public void setColorFilter(ColorFilter cf) {
+        mBitmapPaint.setColorFilter(cf);
+    }
+
+    @Override
+    public int getOpacity() {
+        return 0;
+    }
+}
diff --git a/src/com/android/mail/bitmap/AccountAvatarDrawable.java b/src/com/android/mail/bitmap/AccountAvatarDrawable.java
index 21f14c1..3269440 100644
--- a/src/com/android/mail/bitmap/AccountAvatarDrawable.java
+++ b/src/com/android/mail/bitmap/AccountAvatarDrawable.java
@@ -18,58 +18,22 @@
 import android.content.res.Resources;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
-import android.graphics.BitmapShader;
 import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.ColorFilter;
-import android.graphics.Matrix;
-import android.graphics.Paint;
-import android.graphics.Paint.Style;
-import android.graphics.Rect;
-import android.graphics.Shader.TileMode;
-import android.graphics.drawable.Drawable;
 
 import com.android.bitmap.BitmapCache;
-import com.android.bitmap.RequestKey;
-import com.android.bitmap.ReusableBitmap;
 import com.android.mail.R;
-import com.android.mail.bitmap.ContactResolver.ContactDrawableInterface;
 
-public class AccountAvatarDrawable extends Drawable implements ContactDrawableInterface {
-
-    private final BitmapCache mCache;
-    private final ContactResolver mContactResolver;
-
-    private ContactRequest mContactRequest;
-    private ReusableBitmap mBitmap;
-    private final float mBorderWidth;
-    private final Paint mBitmapPaint;
-    private final Paint mBorderPaint;
-    private final Matrix mMatrix;
-
-    private int mDecodeWidth;
-    private int mDecodeHeight;
-
+/**
+ * A contact drawable with a set default avatar.
+ */
+public class AccountAvatarDrawable extends AbstractAvatarDrawable {
     private static Bitmap DEFAULT_AVATAR = null;
 
     public AccountAvatarDrawable(final Resources res, final BitmapCache cache,
             final ContactResolver contactResolver) {
-        mCache = cache;
-        mContactResolver = contactResolver;
-        mBitmapPaint = new Paint();
-        mBitmapPaint.setAntiAlias(true);
-        mBitmapPaint.setFilterBitmap(true);
-        mBitmapPaint.setDither(true);
-
-        mBorderWidth = res.getDimensionPixelSize(R.dimen.avatar_border_width);
-
-        mBorderPaint = new Paint();
-        mBorderPaint.setColor(Color.TRANSPARENT);
-        mBorderPaint.setStyle(Style.STROKE);
-        mBorderPaint.setStrokeWidth(mBorderWidth);
-        mBorderPaint.setAntiAlias(true);
-
-        mMatrix = new Matrix();
+        super(res);
+        setBitmapCache(cache);
+        setContactResolver(contactResolver);
 
         if (DEFAULT_AVATAR == null) {
             DEFAULT_AVATAR = BitmapFactory.decodeResource(res, R.drawable.avatar_placeholder_gray);
@@ -77,144 +41,9 @@
     }
 
     @Override
-    public void draw(final Canvas canvas) {
-        final Rect bounds = getBounds();
-        if (!isVisible() || bounds.isEmpty()) {
-            return;
-        }
-
-        if (mBitmap != null && mBitmap.bmp != null) {
-            // Draw sender image.
-            drawBitmap(mBitmap.bmp, mBitmap.getLogicalWidth(), mBitmap.getLogicalHeight(), canvas);
-        } else {
-            // Draw the default image
-            drawBitmap(DEFAULT_AVATAR, DEFAULT_AVATAR.getWidth(), DEFAULT_AVATAR.getHeight(),
-                    canvas);
-        }
-    }
-
-    /**
-     * Draw the bitmap onto the canvas at the current bounds taking into account the current scale.
-     */
-    private void drawBitmap(final Bitmap bitmap, final int width, final int height,
-            final Canvas canvas) {
-        final Rect bounds = getBounds();
-        // Draw bitmap through shader first.
-        final BitmapShader shader = new BitmapShader(bitmap, TileMode.CLAMP, TileMode.CLAMP);
-        mMatrix.reset();
-
-        // Fit bitmap to bounds.
-        final float boundsWidth = (float) bounds.width();
-        final float boundsHeight = (float) bounds.height();
-        final float scale = Math.max(boundsWidth / width, boundsHeight / height);
-        mMatrix.postScale(scale, scale);
-
-        // Translate bitmap to dst bounds.
-        mMatrix.postTranslate(bounds.left, bounds.top);
-
-        shader.setLocalMatrix(mMatrix);
-        mBitmapPaint.setShader(shader);
-        canvas.drawCircle(bounds.centerX(), bounds.centerY(), bounds.width() / 2, mBitmapPaint);
-
-        // Then draw the border.
-        final float radius = bounds.width() / 2f - mBorderWidth / 2;
-        canvas.drawCircle(bounds.centerX(), bounds.centerY(), radius, mBorderPaint);
-    }
-
-    @Override
-    public void setAlpha(final int alpha) {
-        mBitmapPaint.setAlpha(alpha);
-    }
-
-    @Override
-    public void setColorFilter(final ColorFilter cf) {
-        mBitmapPaint.setColorFilter(cf);
-    }
-
-    @Override
-    public int getOpacity() {
-        return 0;
-    }
-
-    public void setDecodeDimensions(final int decodeWidth, final int decodeHeight) {
-        mDecodeWidth = decodeWidth;
-        mDecodeHeight = decodeHeight;
-    }
-
-    public void unbind() {
-        setImage(null);
-    }
-
-    public void bind(final String name, final String email) {
-        setImage(new ContactRequest(name, email));
-    }
-
-    private void setImage(final ContactRequest contactRequest) {
-        if (mContactRequest != null && mContactRequest.equals(contactRequest)) {
-            return;
-        }
-
-        if (mBitmap != null) {
-            mBitmap.releaseReference();
-            mBitmap = null;
-        }
-
-        mContactResolver.remove(mContactRequest, this);
-        mContactRequest = contactRequest;
-
-        if (contactRequest == null) {
-            invalidateSelf();
-            return;
-        }
-
-        final ReusableBitmap cached = mCache.get(contactRequest, true /* incrementRefCount */);
-        if (cached != null) {
-            setBitmap(cached);
-        } else {
-            decode();
-        }
-    }
-
-    private void setBitmap(final ReusableBitmap bmp) {
-        if (mBitmap != null && mBitmap != bmp) {
-            mBitmap.releaseReference();
-        }
-        mBitmap = bmp;
-        invalidateSelf();
-    }
-
-    private void decode() {
-        if (mContactRequest == null) {
-            return;
-        }
-        // Add to batch.
-        mContactResolver.add(mContactRequest, this);
-    }
-
-    @Override
-    public int getDecodeWidth() {
-        return mDecodeWidth;
-    }
-
-    @Override
-    public int getDecodeHeight() {
-        return mDecodeHeight;
-    }
-
-    @Override
-    public void onDecodeComplete(final RequestKey key, final ReusableBitmap result) {
-        final ContactRequest request = (ContactRequest) key;
-        // Remove from batch.
-        mContactResolver.remove(request, this);
-        if (request.equals(mContactRequest)) {
-            setBitmap(result);
-        } else {
-            // if the requests don't match (i.e. this request is stale), decrement the
-            // ref count to allow the bitmap to be pooled
-            if (result != null) {
-                result.releaseReference();
-            }
-        }
+    protected void drawDefaultAvatar(Canvas canvas) {
+        drawBitmap(DEFAULT_AVATAR, DEFAULT_AVATAR.getWidth(), DEFAULT_AVATAR.getHeight(),
+                canvas);
     }
 }
 
diff --git a/src/com/android/mail/bitmap/ColorPicker.java b/src/com/android/mail/bitmap/ColorPicker.java
new file mode 100644
index 0000000..f8303d9
--- /dev/null
+++ b/src/com/android/mail/bitmap/ColorPicker.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2012 Google Inc.
+ * Licensed to 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.mail.bitmap;
+
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+
+import com.android.mail.R;
+
+public interface ColorPicker {
+    /**
+     * Returns the color to use for the given email address.
+     * This method should return the same output for the same input.
+     * @param email The normalized email address.
+     * @return The color value in the format {@code 0xAARRGGBB}.
+     */
+    public int pickColor(final String email);
+
+    /**
+     * A simple implementation of a {@link ColorPicker}.
+     */
+    public class PaletteColorPicker implements ColorPicker {
+        /**
+         * The palette of colors, inflated from {@code R.array.letter_tile_colors}.
+         */
+        private static TypedArray sColors;
+
+        /**
+         * Cached value of {@code sColors.length()}.
+         */
+        private static int sColorCount;
+
+        /**
+         * Default color returned if the one chosen from {@code R.array.letter_tile_colors} is
+         * a {@link android.content.res.ColorStateList}.
+         */
+        private static int sDefaultColor;
+
+        public PaletteColorPicker(Resources res) {
+            if (sColors == null) {
+                sColors = res.obtainTypedArray(R.array.letter_tile_colors);
+                sColorCount = sColors.length();
+                sDefaultColor = res.getColor(R.color.letter_tile_default_color);
+            }
+        }
+
+        @Override
+        public int pickColor(final String email) {
+            final int color = Math.abs(email.hashCode()) % sColorCount;
+            return sColors.getColor(color, sDefaultColor);
+        }
+    }
+}
diff --git a/src/com/android/mail/bitmap/ContactDrawable.java b/src/com/android/mail/bitmap/ContactDrawable.java
index d71332c..0102b5e 100644
--- a/src/com/android/mail/bitmap/ContactDrawable.java
+++ b/src/com/android/mail/bitmap/ContactDrawable.java
@@ -16,91 +16,38 @@
 package com.android.mail.bitmap;
 
 import android.content.res.Resources;
-import android.content.res.TypedArray;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
-import android.graphics.BitmapShader;
 import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.ColorFilter;
-import android.graphics.Matrix;
 import android.graphics.Paint;
 import android.graphics.Paint.Align;
 import android.graphics.Rect;
-import android.graphics.Shader;
 import android.graphics.Typeface;
-import android.graphics.drawable.Drawable;
 
-import com.android.bitmap.BitmapCache;
-import com.android.bitmap.RequestKey;
-import com.android.bitmap.ReusableBitmap;
 import com.android.mail.R;
-import com.android.mail.bitmap.ContactResolver.ContactDrawableInterface;
 
 /**
- * A drawable that encapsulates all the functionality needed to display a contact image,
- * including request creation/cancelling and data unbinding/re-binding. While no contact images
- * can be shown, a default letter tile will be shown instead.
- *
- * <p/>
- * The actual contact resolving and decoding is handled by {@link ContactResolver}.
+ * A contact drawable with the default avatar as a letter tile.
  */
-public class ContactDrawable extends Drawable implements ContactDrawableInterface {
-
-    private BitmapCache mCache;
-    private ContactResolver mContactResolver;
-
-    private ContactRequest mContactRequest;
-    private ReusableBitmap mBitmap;
-    private final Paint mPaint;
-
+public class ContactDrawable extends AbstractAvatarDrawable {
     /** Letter tile */
-    private static TypedArray sColors;
-    private static int sColorCount;
-    private static int sDefaultColor;
+    private ColorPicker mTileColorPicker;
+
+    /** Reusable components to avoid new allocations */
     private static int sTileLetterFontSize;
     private static int sTileFontColor;
     private static Bitmap DEFAULT_AVATAR;
-    /** Reusable components to avoid new allocations */
     private static final Paint sPaint = new Paint();
     private static final Rect sRect = new Rect();
     private static final char[] sFirstChar = new char[1];
 
-    private final float mBorderWidth;
-    private final Paint mBitmapPaint;
-    private final Paint mBorderPaint;
-    private final Matrix mMatrix;
-
-    private int mDecodeWidth;
-    private int mDecodeHeight;
-
     public ContactDrawable(final Resources res) {
-        mPaint = new Paint();
-        mPaint.setFilterBitmap(true);
-        mPaint.setDither(true);
+        super(res);
 
-        mBitmapPaint = new Paint();
-        mBitmapPaint.setAntiAlias(true);
-        mBitmapPaint.setFilterBitmap(true);
-        mBitmapPaint.setDither(true);
-
-        mBorderWidth = res.getDimensionPixelSize(R.dimen.avatar_border_width);
-
-        mBorderPaint = new Paint();
-        mBorderPaint.setColor(Color.TRANSPARENT);
-        mBorderPaint.setStyle(Paint.Style.STROKE);
-        mBorderPaint.setStrokeWidth(mBorderWidth);
-        mBorderPaint.setAntiAlias(true);
-
-        mMatrix = new Matrix();
-
-        if (sColors == null) {
-            sColors = res.obtainTypedArray(R.array.letter_tile_colors);
-            sColorCount = sColors.length();
-            sDefaultColor = res.getColor(R.color.letter_tile_default_color);
-            sTileLetterFontSize = res.getDimensionPixelSize(R.dimen.tile_letter_font_size);
+        if (sTileLetterFontSize == 0) {
+            sTileLetterFontSize = res.getDimensionPixelSize(R.dimen.tile_letter_font_size_small);
             sTileFontColor = res.getColor(R.color.letter_tile_font_color);
-            DEFAULT_AVATAR = BitmapFactory.decodeResource(res, R.drawable.ic_generic_man);
+            DEFAULT_AVATAR = BitmapFactory.decodeResource(res, R.drawable.ic_anonymous_avatar_40dp);
 
             sPaint.setTypeface(Typeface.create("sans-serif-light", Typeface.NORMAL));
             sPaint.setTextAlign(Align.CENTER);
@@ -108,57 +55,30 @@
         }
     }
 
-    public void setBitmapCache(final BitmapCache cache) {
-        mCache = cache;
-    }
-
-    public void setContactResolver(final ContactResolver contactResolver) {
-        mContactResolver = contactResolver;
-    }
-
-    @Override
-    public void draw(final Canvas canvas) {
-        final Rect bounds = getBounds();
-        if (!isVisible() || bounds.isEmpty()) {
-            return;
-        }
-
-        if (mBitmap != null && mBitmap.bmp != null) {
-            // Draw sender image.
-            drawBitmap(mBitmap.bmp, mBitmap.getLogicalWidth(), mBitmap.getLogicalHeight(), canvas);
-        } else {
-            // Draw letter tile.
-            drawLetterTile(canvas);
-        }
+    /**
+     * Sets the {@link ColorPicker} for the background tile used in letter avatars.
+     * @param colorPicker
+     */
+    public void setTileColorPicker(ColorPicker colorPicker) {
+        mTileColorPicker = colorPicker;
     }
 
     /**
-     * Draw the bitmap onto the canvas at the current bounds taking into account the current scale.
+     * Returns the color picker for the background tile used in the letter avatars.
+     * If none was set, initializes a simple {@link ColorPicker.PaletteColorPicker} first.
+     * @return non-null color picker.
      */
-    private void drawBitmap(final Bitmap bitmap, final int width, final int height,
-            final Canvas canvas) {
-        final Rect bounds = getBounds();
-        // Draw bitmap through shader first.
-        final BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP,
-                Shader.TileMode.CLAMP);
-        mMatrix.reset();
+    public ColorPicker getTileColorPicker() {
+        if (mTileColorPicker == null) {
+            mTileColorPicker = new ColorPicker.PaletteColorPicker(mResources);
+        }
+        return mTileColorPicker;
+    }
 
-        // Fit bitmap to bounds.
-        final float boundsWidth = (float) bounds.width();
-        final float boundsHeight = (float) bounds.height();
-        final float scale = Math.max(boundsWidth / width, boundsHeight / height);
-        mMatrix.postScale(scale, scale);
-
-        // Translate bitmap to dst bounds.
-        mMatrix.postTranslate(bounds.left, bounds.top);
-
-        shader.setLocalMatrix(mMatrix);
-        mBitmapPaint.setShader(shader);
-        drawCircle(canvas, bounds, mBitmapPaint);
-
-        // Then draw the border.
-        final float radius = bounds.width() / 2f - mBorderWidth / 2;
-        canvas.drawCircle(bounds.centerX(), bounds.centerY(), radius, mBorderPaint);
+    @Override
+    protected void drawDefaultAvatar(Canvas canvas) {
+        // Draw letter tile as default
+        drawLetterTile(canvas);
     }
 
     private void drawLetterTile(final Canvas canvas) {
@@ -170,8 +90,9 @@
 
         // Draw background color.
         final String email = mContactRequest.getEmail();
-        sPaint.setColor(pickColor(email));
-        sPaint.setAlpha(mPaint.getAlpha());
+        // The email should already have been normalized by the ContactRequest.
+        sPaint.setColor(getTileColorPicker().pickColor(email));
+        sPaint.setAlpha(mBitmapPaint.getAlpha());
         drawCircle(canvas, bounds, sPaint);
 
         // Draw letter/digit or generic avatar.
@@ -191,122 +112,7 @@
         }
     }
 
-    /**
-     * Draws the largest circle that fits within the given <code>bounds</code>.
-     *
-     * @param canvas the canvas on which to draw
-     * @param bounds the bounding box of the circle
-     * @param paint the paint with which to draw
-     */
-    private static void drawCircle(Canvas canvas, Rect bounds, Paint paint) {
-        canvas.drawCircle(bounds.centerX(), bounds.centerY(), bounds.width() / 2, paint);
-    }
-
-    private static int pickColor(final String email) {
-        // String.hashCode() implementation is not supposed to change across java versions, so
-        // this should guarantee the same email address always maps to the same color.
-        // The email should already have been normalized by the ContactRequest.
-        final int color = Math.abs(email.hashCode()) % sColorCount;
-        return sColors.getColor(color, sDefaultColor);
-    }
-
     private static boolean isEnglishLetterOrDigit(final char c) {
         return ('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z') || ('0' <= c && c <= '9');
     }
-
-    @Override
-    public void setAlpha(final int alpha) {
-        mPaint.setAlpha(alpha);
-    }
-
-    @Override
-    public void setColorFilter(final ColorFilter cf) {
-        mPaint.setColorFilter(cf);
-    }
-
-    @Override
-    public int getOpacity() {
-        return 0;
-    }
-
-    public void setDecodeDimensions(final int decodeWidth, final int decodeHeight) {
-        mDecodeWidth = decodeWidth;
-        mDecodeHeight = decodeHeight;
-    }
-
-    public void unbind() {
-        setImage(null);
-    }
-
-    public void bind(final String name, final String email) {
-        setImage(new ContactRequest(name, email));
-    }
-
-    private void setImage(final ContactRequest contactRequest) {
-        if (mContactRequest != null && mContactRequest.equals(contactRequest)) {
-            return;
-        }
-
-        if (mBitmap != null) {
-            mBitmap.releaseReference();
-            mBitmap = null;
-        }
-
-        mContactResolver.remove(mContactRequest, this);
-        mContactRequest = contactRequest;
-
-        if (contactRequest == null) {
-            invalidateSelf();
-            return;
-        }
-
-        final ReusableBitmap cached = mCache.get(contactRequest, true /* incrementRefCount */);
-        if (cached != null) {
-            setBitmap(cached);
-        } else {
-            decode();
-        }
-    }
-
-    private void setBitmap(final ReusableBitmap bmp) {
-        if (mBitmap != null && mBitmap != bmp) {
-            mBitmap.releaseReference();
-        }
-        mBitmap = bmp;
-        invalidateSelf();
-    }
-
-    private void decode() {
-        if (mContactRequest == null) {
-            return;
-        }
-        // Add to batch.
-        mContactResolver.add(mContactRequest, this);
-    }
-
-    @Override
-    public int getDecodeWidth() {
-        return mDecodeWidth;
-    }
-
-    @Override
-    public int getDecodeHeight() {
-        return mDecodeHeight;
-    }
-
-    @Override
-    public void onDecodeComplete(final RequestKey key, final ReusableBitmap result) {
-        final ContactRequest request = (ContactRequest) key;
-        // Remove from batch.
-        mContactResolver.remove(request, this);
-        if (request.equals(mContactRequest)) {
-            setBitmap(result);
-        } else {
-            // if the requests don't match (i.e. this request is stale), decrement the
-            // ref count to allow the bitmap to be pooled
-            if (result != null) {
-                result.releaseReference();
-            }
-        }
-    }
 }
diff --git a/src/com/android/mail/bitmap/ContactResolver.java b/src/com/android/mail/bitmap/ContactResolver.java
index 1a91463..7bb5d65 100644
--- a/src/com/android/mail/bitmap/ContactResolver.java
+++ b/src/com/android/mail/bitmap/ContactResolver.java
@@ -50,6 +50,10 @@
 
     private static final String TAG = LogTag.getLogTag();
 
+    // The maximum size returned from ContactsContract.Contacts.Photo.PHOTO is 96px by 96px.
+    private static final int MAXIMUM_PHOTO_SIZE = 96;
+    private static final int HALF_MAXIMUM_PHOTO_SIZE = 48;
+
     protected final ContentResolver mResolver;
     private final BitmapCache mCache;
     /** Insertion ordered set allows us to work from the top down. */
@@ -219,10 +223,12 @@
                 // Synchronously decode the photo bytes. We are already in a background
                 // thread, and we want decodes to finish in order. The decodes are blazing
                 // fast so we don't need to kick off multiple threads.
+                final int width = HALF_MAXIMUM_PHOTO_SIZE >= request.destination.getDecodeWidth()
+                        ? HALF_MAXIMUM_PHOTO_SIZE : MAXIMUM_PHOTO_SIZE;
+                final int height = HALF_MAXIMUM_PHOTO_SIZE >= request.destination.getDecodeHeight()
+                        ? HALF_MAXIMUM_PHOTO_SIZE : MAXIMUM_PHOTO_SIZE;
                 final DecodeTask.DecodeOptions opts = new DecodeTask.DecodeOptions(
-                        request.destination.getDecodeWidth(),
-                        request.destination.getDecodeHeight(), 1 / 2f,
-                        DecodeTask.DecodeOptions.STRATEGY_ROUND_NEAREST);
+                        width, height, 1 / 2f, DecodeTask.DecodeOptions.STRATEGY_ROUND_NEAREST);
                 final ReusableBitmap result = new DecodeTask(request.contactRequest, opts, null,
                         null, mCache).decode();
                 request.contactRequest.bytes = null;
@@ -236,6 +242,9 @@
         }
 
         protected ImmutableMap<String, ContactInfo> loadContactPhotos(Set<String> emails) {
+            if (mResolver == null) {
+                return null;
+            }
             return SenderInfoLoader.loadContactPhotos(mResolver, emails, false /* decodeBitmaps */);
         }
 
@@ -249,7 +258,7 @@
             final ReusableBitmap bitmap = values[0].bitmap;
 
             // DecodeTask does not add null results to the cache.
-            if (bitmap == null) {
+            if (bitmap == null && mCache != null) {
                 // Cache null result.
                 mCache.put(request.contactRequest, null);
             }
diff --git a/src/com/android/mail/browse/AttachmentActionHandler.java b/src/com/android/mail/browse/AttachmentActionHandler.java
index 073de9d..ee569a6 100644
--- a/src/com/android/mail/browse/AttachmentActionHandler.java
+++ b/src/com/android/mail/browse/AttachmentActionHandler.java
@@ -254,8 +254,9 @@
         sOptionHandler = handler;
     }
 
-    public boolean shouldShowExtraOption1(String mimeType) {
-        return (sOptionHandler != null) && sOptionHandler.shouldShowExtraOption1(mimeType);
+    public boolean shouldShowExtraOption1(final String accountType, final String mimeType) {
+        return (sOptionHandler != null) && sOptionHandler.shouldShowExtraOption1(
+                accountType, mimeType);
     }
 
     public void handleOption1() {
@@ -274,7 +275,7 @@
      */
     public static class OptionHandler {
 
-        public boolean shouldShowExtraOption1(String mimeType) {
+        public boolean shouldShowExtraOption1(String accountType, String mimeType) {
             return false;
         }
 
diff --git a/src/com/android/mail/browse/ConversationContainer.java b/src/com/android/mail/browse/ConversationContainer.java
index 94958dc..01e6fbc 100644
--- a/src/com/android/mail/browse/ConversationContainer.java
+++ b/src/com/android/mail/browse/ConversationContainer.java
@@ -20,7 +20,7 @@
 import android.content.Context;
 import android.content.res.Configuration;
 import android.database.DataSetObserver;
-import android.support.annotation.IdRes;
+import android.graphics.Rect;
 import android.support.v4.view.ViewCompat;
 import android.util.AttributeSet;
 import android.util.SparseArray;
@@ -41,8 +41,10 @@
 import com.android.mail.utils.InputSmoother;
 import com.android.mail.utils.LogUtils;
 import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
 
 import java.util.List;
+import java.util.Set;
 
 /**
  * A specialized ViewGroup container for conversation view. It is designed to contain a single
@@ -577,12 +579,18 @@
             layoutOverlay(mAdditionalBottomBorder, lastBottom, containerHeight);
         } else {
             if (mAdditionalBottomBorder != null && mAdditionalBottomBorderAdded) {
-                removeViewInLayout(mAdditionalBottomBorder);
+                if (postAddView) {
+                    post(mRemoveBorderRunnable);
+                } else {
+                    mRemoveBorderRunnable.run();
+                }
                 mAdditionalBottomBorderAdded = false;
             }
         }
     }
 
+    private final RemoveBorderRunnable mRemoveBorderRunnable = new RemoveBorderRunnable();
+
     private void setAdditionalBottomBorderHeight(int speculativeHeight) {
         LayoutParams params = mAdditionalBottomBorder.getLayoutParams();
         params.height = speculativeHeight;
@@ -871,7 +879,7 @@
     }
 
     private class AddViewRunnable implements Runnable {
-        public final View mView;
+        private final View mView;
 
         public AddViewRunnable(View view) {
             mView = view;
@@ -884,6 +892,13 @@
         }
     };
 
+    private class RemoveBorderRunnable implements Runnable {
+        @Override
+        public void run() {
+            removeViewInLayout(mAdditionalBottomBorder);
+        }
+    }
+
     private boolean isSnapEnabled() {
         if (mAccountController == null || mAccountController.getAccount() == null
                 || mAccountController.getAccount().settings == null) {
@@ -983,6 +998,20 @@
         if (overlay != null) {
             final int height = getHeight();
             onOverlayScrolledOff(adapterIndex, overlay, height, height + overlay.view.getHeight());
+            LogUtils.i(TAG, "footer scrolled off. container height=%s, measuredHeight=%s",
+                    height, getMeasuredHeight());
+        } else {
+            LogUtils.i(TAG, "footer not found with adapterIndex=%s", adapterIndex);
+            for (int i = 0, size = mOverlayViews.size(); i < size; i++) {
+                final int index = mOverlayViews.keyAt(i);
+                final OverlayView overlayView = mOverlayViews.valueAt(i);
+                LogUtils.i(TAG, "OverlayView: adapterIndex=%s, itemType=%s, view=%s",
+                        index, overlayView.itemType, overlayView.view);
+            }
+            for (int i = 0, size = mOverlayAdapter.getCount(); i < size; i++) {
+                final ConversationOverlayItem item = mOverlayAdapter.getItem(i);
+                LogUtils.i(TAG, "adapter item: index=%s, item=%s", i, item);
+            }
         }
         // restore the offset to its original value after the view has been moved off-screen.
         mOffsetY = offsetY;
@@ -995,29 +1024,28 @@
         LogUtils.d(TAG, msg, params);
     }
 
+    @Override
+    protected boolean onRequestFocusInDescendants(int direction, Rect previouslyFocusedRect) {
+        if (mOverlayAdapter != null) {
+            return mOverlayAdapter.focusFirstMessageHeader();
+        }
+        return false;
+    }
+
     public void focusFirstMessageHeader() {
         mOverlayAdapter.focusFirstMessageHeader();
     }
 
-    public int getOverlayCount() {
-        return mOverlayAdapter.getCount();
-    }
-
-    public int getViewPosition(View v) {
-        return mOverlayAdapter.getViewPosition(v);
-    }
-
-    public View getNextOverlayView(int position, boolean isDown) {
-        return mOverlayAdapter.getNextOverlayView(position, isDown);
-    }
-
-    public boolean shouldInterceptLeftRightEvents(@IdRes int id, boolean isLeft, boolean isRight,
-            boolean twoPaneLand) {
-        return mOverlayAdapter.shouldInterceptLeftRightEvents(id, isLeft, isRight, twoPaneLand);
-    }
-
-    public boolean shouldNavigateAway(@IdRes int id, boolean isLeft, boolean twoPaneLand) {
-        return mOverlayAdapter.shouldNavigateAway(id, isLeft, twoPaneLand);
+    public View getNextOverlayView(View curr, boolean isDown) {
+        // Find the scraps that we should avoid when fetching the next view.
+        final Set<View> scraps = Sets.newHashSet();
+        mScrapViews.visitAll(new DequeMap.Visitor<View>() {
+            @Override
+            public void visit(View item) {
+                scraps.add(item);
+            }
+        });
+        return mOverlayAdapter.getNextOverlayView(curr, isDown, scraps);
     }
 
     private class AdapterObserver extends DataSetObserver {
diff --git a/src/com/android/mail/browse/ConversationItemView.java b/src/com/android/mail/browse/ConversationItemView.java
index f62c7dd..e2dcf47 100644
--- a/src/com/android/mail/browse/ConversationItemView.java
+++ b/src/com/android/mail/browse/ConversationItemView.java
@@ -21,8 +21,6 @@
 import android.animation.AnimatorSet;
 import android.animation.ObjectAnimator;
 import android.content.BroadcastReceiver;
-import android.content.ClipData;
-import android.content.ClipData.Item;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
@@ -31,15 +29,13 @@
 import android.graphics.BitmapFactory;
 import android.graphics.Canvas;
 import android.graphics.Color;
-import android.graphics.LinearGradient;
 import android.graphics.Paint;
-import android.graphics.Point;
 import android.graphics.Rect;
-import android.graphics.RectF;
-import android.graphics.Shader;
 import android.graphics.Typeface;
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.InsetDrawable;
+import android.support.annotation.Nullable;
+import android.support.v4.text.BidiFormatter;
 import android.support.v4.text.TextUtilsCompat;
 import android.support.v4.view.ViewCompat;
 import android.text.Layout.Alignment;
@@ -57,7 +53,6 @@
 import android.text.style.TextAppearanceSpan;
 import android.util.SparseArray;
 import android.util.TypedValue;
-import android.view.DragEvent;
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewGroup;
@@ -70,6 +65,7 @@
 import com.android.mail.bitmap.CheckableContactFlipDrawable;
 import com.android.mail.bitmap.ContactDrawable;
 import com.android.mail.perf.Timer;
+import com.android.mail.providers.Account;
 import com.android.mail.providers.Conversation;
 import com.android.mail.providers.Folder;
 import com.android.mail.providers.UIProvider;
@@ -78,13 +74,11 @@
 import com.android.mail.providers.UIProvider.FolderType;
 import com.android.mail.ui.AnimatedAdapter;
 import com.android.mail.ui.ControllableActivity;
-import com.android.mail.ui.ConversationSelectionSet;
+import com.android.mail.ui.ConversationCheckedSet;
 import com.android.mail.ui.ConversationSetObserver;
-import com.android.mail.ui.DividedImageCanvas.InvalidateCallback;
 import com.android.mail.ui.FolderDisplayer;
 import com.android.mail.ui.SwipeableItemView;
 import com.android.mail.ui.SwipeableListView;
-import com.android.mail.ui.ViewMode;
 import com.android.mail.utils.FolderUri;
 import com.android.mail.utils.HardwareLayerEnabler;
 import com.android.mail.utils.LogTag;
@@ -93,12 +87,11 @@
 import com.android.mail.utils.ViewUtils;
 import com.google.common.annotations.VisibleForTesting;
 
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
 
 public class ConversationItemView extends View
-        implements SwipeableItemView, ToggleableItem, InvalidateCallback, ConversationSetObserver,
+        implements SwipeableItemView, ToggleableItem, ConversationSetObserver,
         BadgeSpan.BadgeSpanDimensions {
 
     // Timer.
@@ -113,9 +106,13 @@
     private static final String PERF_TAG_CALCULATE_COORDINATES = "CCHV.coordinates";
     private static final String LOG_TAG = LogTag.getLogTag();
 
+    private static final Typeface SANS_SERIF_BOLD = Typeface.create("sans-serif", Typeface.BOLD);
+
     private static final Typeface SANS_SERIF_LIGHT = Typeface.create("sans-serif-light",
             Typeface.NORMAL);
 
+    private static final int[] CHECKED_STATE = new int[] { android.R.attr.state_checked };
+
     // Static bitmaps.
     private static Bitmap STAR_OFF;
     private static Bitmap STAR_ON;
@@ -129,8 +126,7 @@
     private static Bitmap STATE_FORWARDED;
     private static Bitmap STATE_REPLIED_AND_FORWARDED;
     private static Bitmap STATE_CALENDAR_INVITE;
-    private static Drawable VISIBLE_CONVERSATION_HIGHLIGHT;
-    private static Drawable RIGHT_EDGE_TABLET;
+    private static Drawable FOCUSED_CONVERSATION_HIGHLIGHT;
 
     private static String sSendersSplitToken;
     private static String sElidedPaddingToken;
@@ -146,8 +142,6 @@
     private static int sCabAnimationDuration;
     private static int sBadgePaddingExtraWidth;
     private static int sBadgeRoundedCornerRadius;
-    private static int sFolderRoundedCornerRadius;
-    private static int sDividerColor;
 
     // Static paints.
     private static final TextPaint sPaint = new TextPaint();
@@ -155,7 +149,6 @@
     private static final Paint sCheckBackgroundPaint = new Paint();
     private static final Paint sDividerPaint = new Paint();
 
-    private static int sDividerInset;
     private static int sDividerHeight;
 
     private static BroadcastReceiver sConfigurationChangedReceiver;
@@ -187,28 +180,24 @@
 
     private final Context mContext;
 
-    public ConversationItemViewModel mHeader;
+    private ConversationItemViewModel mHeader;
     private boolean mDownEvent;
-    private boolean mSelected = false;
-    private ConversationSelectionSet mSelectedConversationSet;
+    private boolean mChecked = false;
+    private ConversationCheckedSet mCheckedConversationSet;
     private Folder mDisplayedFolder;
     private boolean mStarEnabled;
     private boolean mSwipeEnabled;
-    private int mLastTouchX;
-    private int mLastTouchY;
+    private boolean mDividerEnabled;
     private AnimatedAdapter mAdapter;
     private float mAnimatedHeightFraction = 1.0f;
-    private final String mAccount;
+    private final Account mAccount;
     private ControllableActivity mActivity;
     private final TextView mSendersTextView;
     private final TextView mSubjectTextView;
     private final TextView mSnippetTextView;
     private int mGadgetMode;
 
-    private static int sFoldersStartPadding;
-    private static int sFoldersInnerPadding;
     private static int sFoldersMaxCount;
-    private static int sFoldersOverflowGradientPadding;
     private static TextAppearanceSpan sSubjectTextUnreadSpan;
     private static TextAppearanceSpan sSubjectTextReadSpan;
     private static TextAppearanceSpan sBadgeTextSpan;
@@ -222,7 +211,7 @@
     private int mBackgroundOverrideResId = -1;
     /** The bitmap to use, or <code>null</code> for the default */
     private Bitmap mPhotoBitmap = null;
-    private Rect mPhotoRect = null;
+    private Rect mPhotoRect = new Rect();
 
     /**
      * A listener for clicks on the various areas of a conversation item.
@@ -249,11 +238,24 @@
      * Handles displaying folders in a conversation header view.
      */
     static class ConversationItemFolderDisplayer extends FolderDisplayer {
-
+        private final BidiFormatter mFormatter;
         private int mFoldersCount;
 
-        public ConversationItemFolderDisplayer(Context context) {
+        public ConversationItemFolderDisplayer(Context context, BidiFormatter formatter) {
             super(context);
+            mFormatter = formatter;
+        }
+
+        @Override
+        protected void initializeDrawableResources() {
+            super.initializeDrawableResources();
+            final Resources res = mContext.getResources();
+            mFolderDrawableResources.overflowGradientPadding =
+                    res.getDimensionPixelOffset(R.dimen.folder_tl_gradient_padding);
+            mFolderDrawableResources.folderHorizontalPadding =
+                    res.getDimensionPixelOffset(R.dimen.folder_tl_cell_content_padding);
+            mFolderDrawableResources.folderFontSize =
+                    res.getDimensionPixelOffset(R.dimen.folder_tl_font_size);
         }
 
         @Override
@@ -274,166 +276,81 @@
         }
 
         /**
-         * Helper function to calculate exactly how much space the displayed folders should take.
-         * @return an array of integers that signifies the length in dp.
-         */
-        private MeasurementWrapper measureFolderDimen(ConversationItemViewCoordinates coordinates) {
-            // This signifies the absolute max for each folder cell, no exceptions.
-            final int maxCellWidth = coordinates.folderCellWidth;
-
-            final int numDisplayedFolders = Math.min(sFoldersMaxCount, mFoldersSortedSet.size());
-            if (numDisplayedFolders == 0) {
-                return new MeasurementWrapper(new int[0], new boolean[0]);
-            }
-
-            // This variable is calculated based on the number of folders we are displaying
-            final int maxAllowedCellSize = Math.min(maxCellWidth, (coordinates.folderLayoutWidth -
-                    (numDisplayedFolders - 1) * sFoldersStartPadding) / numDisplayedFolders);
-            final int[] measurements = new int[numDisplayedFolders];
-            final boolean[] overflow = new boolean[numDisplayedFolders];
-            final MeasurementWrapper result = new MeasurementWrapper(measurements, overflow);
-
-            int count = 0;
-            int missingWidth = 0;
-            int extraWidth = 0;
-            for (Folder f : mFoldersSortedSet) {
-                if (count > numDisplayedFolders - 1) {
-                    break;
-                }
-
-                final String folderString = f.name;
-                final int neededWidth = (int) sFoldersPaint.measureText(folderString) +
-                        2 * sFoldersInnerPadding;
-
-                if (neededWidth > maxAllowedCellSize) {
-                    // What we can take from others is the minimum of the width we need to borrow
-                    // and the width we are allowed to borrow.
-                    final int borrowedWidth = Math.min(neededWidth - maxAllowedCellSize,
-                            maxCellWidth - maxAllowedCellSize);
-                    final int extraWidthLeftover = extraWidth - borrowedWidth;
-                    if (extraWidthLeftover >= 0) {
-                        measurements[count] = Math.min(neededWidth, maxCellWidth);
-                        extraWidth = extraWidthLeftover;
-                    } else {
-                        measurements[count] = maxAllowedCellSize + extraWidth;
-                        extraWidth = 0;
-                    }
-                    missingWidth = -extraWidthLeftover;
-                    overflow[count] = neededWidth > measurements[count];
-                } else {
-                    extraWidth = maxAllowedCellSize - neededWidth;
-                    measurements[count] = neededWidth;
-                    if (missingWidth > 0) {
-                        if (extraWidth >= missingWidth) {
-                            measurements[count - 1] += missingWidth;
-                            extraWidth -= missingWidth;
-                            overflow[count - 1] = false;
-                        } else {
-                            measurements[count - 1] += extraWidth;
-                            extraWidth = 0;
-                        }
-                    }
-                    missingWidth = 0;
-                }
-
-                count++;
-            }
-
-            return result;
-        }
-
-        /**
          * @return how much total space the folders list requires.
          */
         private int measureFolders(ConversationItemViewCoordinates coordinates) {
-            int[] sizes = measureFolderDimen(coordinates).measurements;
-            return sumWidth(sizes);
+            final int[] measurements = measureFolderDimen(
+                    mFoldersSortedSet, coordinates.folderCellWidth, coordinates.folderLayoutWidth,
+                    mFolderDrawableResources.folderInBetweenPadding,
+                    mFolderDrawableResources.folderHorizontalPadding, sFoldersMaxCount,
+                    sFoldersPaint);
+            return sumWidth(measurements);
         }
 
         private int sumWidth(int[] arr) {
             int sum = 0;
-            for (int i = 0; i < arr.length; i++) {
-                sum += arr[i];
+            for (int i : arr) {
+                sum += i;
             }
-            return sum + (arr.length - 1) * sFoldersStartPadding;
+            return sum + (arr.length - 1) * mFolderDrawableResources.folderInBetweenPadding;
         }
 
-        public void drawFolders(
-                Canvas canvas, ConversationItemViewCoordinates coordinates, boolean isRtl) {
+        public void drawFolders(Canvas canvas, ConversationItemViewCoordinates coordinates,
+                boolean isRtl) {
             if (mFoldersCount == 0) {
                 return;
             }
 
-            final MeasurementWrapper wrapper = measureFolderDimen(coordinates);
-            final int[] measurements = wrapper.measurements;
-            final boolean[] overflow = wrapper.overflow;
+            final int[] measurements = measureFolderDimen(
+                    mFoldersSortedSet, coordinates.folderCellWidth, coordinates.folderLayoutWidth,
+                    mFolderDrawableResources.folderInBetweenPadding,
+                    mFolderDrawableResources.folderHorizontalPadding, sFoldersMaxCount,
+                    sFoldersPaint);
 
             final int right = coordinates.foldersRight;
             final int y = coordinates.foldersY;
-            final int height = coordinates.foldersHeight;
-            final int textBottomPadding = coordinates.foldersTextBottomPadding;
 
             sFoldersPaint.setTextSize(coordinates.foldersFontSize);
             sFoldersPaint.setTypeface(coordinates.foldersTypeface);
 
             // Initialize space and cell size based on the current mode.
+            final Paint.FontMetricsInt fm = sFoldersPaint.getFontMetricsInt();
             final int foldersCount = measurements.length;
             final int width = sumWidth(measurements);
-            int xLeft = (isRtl) ?  right - coordinates.folderLayoutWidth : right - width;
+            final int height = fm.bottom - fm.top;
+            int xStart = (isRtl) ? coordinates.snippetX + width : right - width;
 
             int index = 0;
-            for (Folder f : mFoldersSortedSet) {
+            for (Folder folder : mFoldersSortedSet) {
                 if (index > foldersCount - 1) {
                     break;
                 }
 
-                final String folderString = f.name;
-                final int fgColor = f.getForegroundColor(mDefaultFgColor);
-                final int bgColor = f.getBackgroundColor(mDefaultBgColor);
+                final int actualStart = isRtl ? xStart - measurements[index] : xStart;
+                drawFolder(canvas, actualStart, y, measurements[index], height, folder,
+                        mFolderDrawableResources, mFormatter, sFoldersPaint);
 
-                // Draw the box.
-                sFoldersPaint.setColor(bgColor);
-                sFoldersPaint.setStyle(Paint.Style.FILL);
-                final RectF rect =
-                        new RectF(xLeft, y, xLeft + measurements[index], y + height);
-                canvas.drawRoundRect(rect, sFolderRoundedCornerRadius, sFolderRoundedCornerRadius,
-                        sFoldersPaint);
-
-                // Draw the text.
-                sFoldersPaint.setColor(fgColor);
-                sFoldersPaint.setStyle(Paint.Style.FILL);
-                if (overflow[index]) {
-                    final int rightBorder = xLeft + measurements[index];
-                    final int x0 = (isRtl) ? xLeft + sFoldersOverflowGradientPadding :
-                            rightBorder - sFoldersOverflowGradientPadding;
-                    final int x1 = (isRtl) ?  xLeft + sFoldersInnerPadding :
-                            rightBorder - sFoldersInnerPadding;
-                    final Shader shader = new LinearGradient(x0, y, x1, y, fgColor,
-                            Utils.getTransparentColor(fgColor), Shader.TileMode.CLAMP);
-                    sFoldersPaint.setShader(shader);
-                }
-                canvas.drawText(folderString, xLeft + sFoldersInnerPadding,
-                        y + height - textBottomPadding, sFoldersPaint);
-                if (overflow[index]) {
-                    sFoldersPaint.setShader(null);
-                }
-
-                xLeft += measurements[index++] + sFoldersStartPadding;
+                // Increment the starting position accordingly for the next item
+                final int usedWidth = measurements[index++] +
+                        mFolderDrawableResources.folderInBetweenPadding;
+                xStart += (isRtl) ? -usedWidth : usedWidth;
             }
         }
 
-        private static class MeasurementWrapper {
-            final int[] measurements;
-            final boolean[] overflow;
-
-            public MeasurementWrapper(int[] m, boolean[] o) {
-                measurements = m;
-                overflow = o;
+        public @Nullable String getFoldersDesc() {
+            if (mFoldersSortedSet != null && !mFoldersSortedSet.isEmpty()) {
+                final StringBuilder builder = new StringBuilder();
+                final String comma = mContext.getString(R.string.enumeration_comma);
+                for (Folder f : mFoldersSortedSet) {
+                    builder.append(f.name).append(comma);
+                }
+                return builder.toString();
             }
+            return null;
         }
     }
 
-    public ConversationItemView(Context context, String account) {
+    public ConversationItemView(Context context, Account account) {
         super(context);
         Utils.traceBeginSection("CIVC constructor");
         setClickable(true);
@@ -441,7 +358,7 @@
         mContext = context.getApplicationContext();
         final Resources res = mContext.getResources();
         mTabletDevice = Utils.useTabletUI(res);
-        mListCollapsible = res.getBoolean(R.bool.list_collapsible);
+        mListCollapsible = !res.getBoolean(R.bool.is_tablet_landscape);
         mAccount = account;
 
         getItemViewResources(mContext);
@@ -453,20 +370,27 @@
 
         mSubjectTextView = new TextView(mContext);
         mSubjectTextView.setEllipsize(TextUtils.TruncateAt.END);
-        mSubjectTextView.setSingleLine(); // allow partial words to be elided
         mSubjectTextView.setIncludeFontPadding(false);
         ViewCompat.setLayoutDirection(mSubjectTextView, layoutDir);
         ViewUtils.setTextAlignment(mSubjectTextView, View.TEXT_ALIGNMENT_VIEW_START);
 
         mSnippetTextView = new TextView(mContext);
         mSnippetTextView.setEllipsize(TextUtils.TruncateAt.END);
-        mSnippetTextView.setSingleLine(); // allow partial words to be elided
         mSnippetTextView.setIncludeFontPadding(false);
         mSnippetTextView.setTypeface(SANS_SERIF_LIGHT);
         mSnippetTextView.setTextColor(getResources().getColor(R.color.snippet_text_color));
         ViewCompat.setLayoutDirection(mSnippetTextView, layoutDir);
         ViewUtils.setTextAlignment(mSnippetTextView, View.TEXT_ALIGNMENT_VIEW_START);
 
+        // hack for b/16345519. Root cause is b/17280038.
+        if (layoutDir == LAYOUT_DIRECTION_RTL) {
+            mSubjectTextView.setMaxLines(1);
+            mSnippetTextView.setMaxLines(1);
+        } else {
+            mSubjectTextView.setSingleLine();
+            mSnippetTextView.setSingleLine();
+        }
+
         mSendersImageView = new CheckableContactFlipDrawable(res, sCabAnimationDuration);
         mSendersImageView.setCallback(this);
 
@@ -490,7 +414,7 @@
             // Initialize static bitmaps.
             STAR_OFF = BitmapFactory.decodeResource(res, R.drawable.ic_star_outline_20dp);
             STAR_ON = BitmapFactory.decodeResource(res, R.drawable.ic_star_20dp);
-            ATTACHMENT = BitmapFactory.decodeResource(res, R.drawable.ic_attach_file_20dp);
+            ATTACHMENT = BitmapFactory.decodeResource(res, R.drawable.ic_attach_file_18dp);
             ONLY_TO_ME = BitmapFactory.decodeResource(res, R.drawable.ic_email_caret_double);
             TO_ME_AND_OTHERS = BitmapFactory.decodeResource(res, R.drawable.ic_email_caret_single);
             IMPORTANT_ONLY_TO_ME = BitmapFactory.decodeResource(res,
@@ -507,9 +431,8 @@
                     BitmapFactory.decodeResource(res, R.drawable.ic_badge_reply_forward_holo_light);
             STATE_CALENDAR_INVITE =
                     BitmapFactory.decodeResource(res, R.drawable.ic_badge_invite_holo_light);
-            VISIBLE_CONVERSATION_HIGHLIGHT = res.getDrawable(
+            FOCUSED_CONVERSATION_HIGHLIGHT = res.getDrawable(
                     R.drawable.visible_conversation_highlight);
-            RIGHT_EDGE_TABLET = res.getDrawable(R.drawable.list_edge_tablet);
 
             // Initialize colors.
             sActivatedTextSpan = CharacterStyle.wrap(new ForegroundColorSpan(
@@ -533,34 +456,27 @@
             sSendersSplitToken = res.getString(R.string.senders_split_token);
             sElidedPaddingToken = res.getString(R.string.elided_padding_token);
             sScrollSlop = res.getInteger(R.integer.swipeScrollSlop);
-            sFoldersStartPadding = res.getDimensionPixelOffset(R.dimen.folders_start_padding);
-            sFoldersInnerPadding = res.getDimensionPixelOffset(R.dimen.folder_cell_content_padding);
             sFoldersMaxCount = res.getInteger(R.integer.conversation_list_max_folder_count);
-            sFoldersOverflowGradientPadding =
-                    res.getDimensionPixelOffset(R.dimen.folders_gradient_padding);
             sCabAnimationDuration = res.getInteger(R.integer.conv_item_view_cab_anim_duration);
             sBadgePaddingExtraWidth = res.getDimensionPixelSize(R.dimen.badge_padding_extra_width);
             sBadgeRoundedCornerRadius =
                     res.getDimensionPixelSize(R.dimen.badge_rounded_corner_radius);
-            sFolderRoundedCornerRadius =
-                    res.getDimensionPixelOffset(R.dimen.folder_rounded_corner_radius);
-            sDividerColor = res.getColor(R.color.conversation_list_divider_color);
-            sDividerInset = res.getDimensionPixelSize(R.dimen.conv_list_divider_inset);
+            sDividerPaint.setColor(res.getColor(R.color.divider_color));
             sDividerHeight = res.getDimensionPixelSize(R.dimen.divider_height);
         }
     }
 
     public void bind(final Conversation conversation, final ControllableActivity activity,
-            final ConversationSelectionSet set, final Folder folder,
+            final ConversationCheckedSet set, final Folder folder,
             final int checkboxOrSenderImage,
             final boolean swipeEnabled, final boolean importanceMarkersEnabled,
             final boolean showChevronsEnabled, final AnimatedAdapter adapter) {
         Utils.traceBeginSection("CIVC.bind");
-        bind(ConversationItemViewModel.forConversation(mAccount, conversation), activity,
-                null /* conversationItemAreaClickListener */,
+        bind(ConversationItemViewModel.forConversation(mAccount.getEmailAddress(), conversation),
+                activity, null /* conversationItemAreaClickListener */,
                 set, folder, checkboxOrSenderImage, swipeEnabled, importanceMarkersEnabled,
                 showChevronsEnabled, adapter, -1 /* backgroundOverrideResId */,
-                null /* photoBitmap */, false /* useFullMargins */);
+                null /* photoBitmap */, false /* useFullMargins */, true /* mDividerEnabled */);
         Utils.traceEndSection();
     }
 
@@ -573,35 +489,36 @@
         bind(conversationItemViewModel, activity, conversationItemAreaClickListener, null /* set */,
                 folder, checkboxOrSenderImage, true /* swipeEnabled */,
                 false /* importanceMarkersEnabled */, false /* showChevronsEnabled */,
-                adapter, backgroundOverrideResId, photoBitmap, true /* useFullMargins */);
+                adapter, backgroundOverrideResId, photoBitmap, true /* useFullMargins */,
+                false /* mDividerEnabled */);
         Utils.traceEndSection();
     }
 
     private void bind(final ConversationItemViewModel header, final ControllableActivity activity,
             final ConversationItemAreaClickListener conversationItemAreaClickListener,
-            final ConversationSelectionSet set, final Folder folder,
+            final ConversationCheckedSet set, final Folder folder,
             final int checkboxOrSenderImage,
             boolean swipeEnabled, final boolean importanceMarkersEnabled,
             final boolean showChevronsEnabled, final AnimatedAdapter adapter,
             final int backgroundOverrideResId, final Bitmap photoBitmap,
-            final boolean useFullMargins) {
+            final boolean useFullMargins, final boolean dividerEnabled) {
         mBackgroundOverrideResId = backgroundOverrideResId;
         mPhotoBitmap = photoBitmap;
         mConversationItemAreaClickListener = conversationItemAreaClickListener;
+        mDividerEnabled = dividerEnabled;
 
         if (mHeader != null) {
             Utils.traceBeginSection("unbind");
             final boolean newlyBound = header.conversation.id != mHeader.conversation.id;
             // If this was previously bound to a different conversation, remove any contact photo
             // manager requests.
-            if (newlyBound || (mHeader.displayableNames != null && !mHeader
-                    .displayableNames.equals(header.displayableNames))) {
+            if (newlyBound || (!mHeader.displayableNames.equals(header.displayableNames))) {
                 mSendersImageView.getContactDrawable().unbind();
             }
 
             if (newlyBound) {
                 // Stop the photo flip animation
-                final boolean showSenders = !isSelected();
+                final boolean showSenders = !mChecked;
                 mSendersImageView.reset(showSenders);
             }
             Utils.traceEndSection();
@@ -609,9 +526,9 @@
         mCoordinates = null;
         mHeader = header;
         mActivity = activity;
-        mSelectedConversationSet = set;
-        if (mSelectedConversationSet != null) {
-            mSelectedConversationSet.addObserver(this);
+        mCheckedConversationSet = set;
+        if (mCheckedConversationSet != null) {
+            mCheckedConversationSet.addObserver(this);
         }
         mDisplayedFolder = folder;
         mStarEnabled = folder != null && !folder.isTrash();
@@ -632,7 +549,8 @@
         Utils.traceBeginSection("folder displayer");
         // Initialize folder displayer.
         if (mHeader.folderDisplayer == null) {
-            mHeader.folderDisplayer = new ConversationItemFolderDisplayer(mContext);
+            mHeader.folderDisplayer = new ConversationItemFolderDisplayer(mContext,
+                    mAdapter.getBidiFormatter());
         } else {
             mHeader.folderDisplayer.reset();
         }
@@ -705,8 +623,8 @@
     protected void onDetachedFromWindow() {
         super.onDetachedFromWindow();
 
-        if (mSelectedConversationSet != null) {
-            mSelectedConversationSet.removeObserver(this);
+        if (mCheckedConversationSet != null) {
+            mCheckedConversationSet.removeObserver(this);
         }
     }
 
@@ -757,8 +675,7 @@
         }
         mHeader.viewWidth = mViewWidth;
 
-        mConfig.updateWidth(wSize).setViewMode(currentMode)
-                .setLayoutDirection(ViewCompat.getLayoutDirection(this));
+        mConfig.updateWidth(wSize).setLayoutDirection(ViewCompat.getLayoutDirection(this));
 
         Resources res = getResources();
         mHeader.standardScaledDimen = res.getDimensionPixelOffset(R.dimen.standard_scaled_dimen);
@@ -767,8 +684,7 @@
                 mAdapter.getCoordinatesCache());
 
         if (mPhotoBitmap != null) {
-            mPhotoRect = new Rect(0, 0, mCoordinates.contactImagesWidth,
-                    mCoordinates.contactImagesHeight);
+            mPhotoRect.set(0, 0, mCoordinates.contactImagesWidth, mCoordinates.contactImagesHeight);
         }
 
         final int h = (mAnimatedHeightFraction != 1.0f) ?
@@ -814,10 +730,15 @@
     }
 
     private void setContentDescription() {
+        String foldersDesc = null;
+        if (mHeader != null && mHeader.folderDisplayer != null) {
+            foldersDesc = mHeader.folderDisplayer.getFoldersDesc();
+        }
+
         if (mActivity.isAccessibilityEnabled()) {
             mHeader.resetContentDescription();
-            setContentDescription(
-                    mHeader.getContentDescription(mContext, mDisplayedFolder.shouldShowRecipients()));
+            setContentDescription(mHeader.getContentDescription(
+                    mContext, mDisplayedFolder.shouldShowRecipients(), foldersDesc));
         }
     }
 
@@ -842,16 +763,13 @@
     private void calculateTextsAndBitmaps() {
         startTimer(PERF_TAG_CALCULATE_TEXTS_BITMAPS);
 
-        if (mSelectedConversationSet != null) {
-            mSelected = mSelectedConversationSet.contains(mHeader.conversation);
+        if (mCheckedConversationSet != null) {
+            setChecked(mCheckedConversationSet.contains(mHeader.conversation));
         }
-        setSelected(mSelected);
         mHeader.gadgetMode = mGadgetMode;
 
         updateBackground();
 
-        mHeader.sendersDisplayText = new SpannableStringBuilder();
-
         mHeader.hasDraftMessage = mHeader.conversation.numDrafts() > 0;
 
         // Parse senders fragments.
@@ -863,21 +781,17 @@
             Context context = getContext();
             mHeader.messageInfoString = SendersView
                     .createMessageInfo(context, mHeader.conversation, true);
-            int maxChars = ConversationItemViewCoordinates.getSendersLength(context,
-                    mCoordinates.getMode(), mHeader.conversation.hasAttachments);
-            mHeader.displayableEmails = new ArrayList<String>();
-            mHeader.displayableNames = new ArrayList<String>();
-            mHeader.styledNames = new ArrayList<SpannableString>();
+            final int maxChars = ConversationItemViewCoordinates.getSendersLength(context,
+                    mHeader.conversation.hasAttachments);
+
+            mHeader.mSenderAvatarModel.clear();
+            mHeader.displayableNames.clear();
+            mHeader.styledNames.clear();
 
             SendersView.format(context, mHeader.conversation.conversationInfo,
                     mHeader.messageInfoString.toString(), maxChars, mHeader.styledNames,
-                    mHeader.displayableNames, mHeader.displayableEmails, mAccount,
-                    mDisplayedFolder.shouldShowRecipients(), true);
-
-            if (mHeader.displayableEmails.isEmpty() && mHeader.hasDraftMessage) {
-                mHeader.displayableEmails.add(mAccount);
-                mHeader.displayableNames.add(mAccount);
-            }
+                    mHeader.displayableNames, mHeader.mSenderAvatarModel,
+                    mAccount, mDisplayedFolder.shouldShowRecipients(), true);
 
             // If we have displayable senders, load their thumbnails
             loadImages();
@@ -910,15 +824,13 @@
     // is immutable.
     private void loadImages() {
         if (mGadgetMode != ConversationItemViewCoordinates.GADGET_CONTACT_PHOTO
-                || mHeader.displayableEmails == null
-                || mHeader.displayableEmails.isEmpty()) {
+                || mHeader.mSenderAvatarModel.isNotPopulated()) {
             return;
         }
         if (mCoordinates.contactImagesWidth <= 0 || mCoordinates.contactImagesHeight <= 0) {
             LogUtils.w(LOG_TAG,
-                    "Contact image width(%d) or height(%d) is 0 for mode: (%d).",
-                    mCoordinates.contactImagesWidth, mCoordinates.contactImagesHeight,
-                    mCoordinates.getMode());
+                    "Contact image width(%d) or height(%d) is 0",
+                    mCoordinates.contactImagesWidth, mCoordinates.contactImagesHeight);
             return;
         }
 
@@ -929,7 +841,8 @@
         final ContactDrawable drawable = mSendersImageView.getContactDrawable();
         drawable.setDecodeDimensions(mCoordinates.contactImagesWidth,
                 mCoordinates.contactImagesHeight);
-        drawable.bind(mHeader.displayableNames.get(0), mHeader.displayableEmails.get(0));
+        drawable.bind(mHeader.mSenderAvatarModel.getName(),
+                mHeader.mSenderAvatarModel.getEmailAddress());
         Utils.traceEndSection();
     }
 
@@ -965,11 +878,11 @@
     private void createSubject(final boolean isUnread) {
         final String badgeText = mHeader.badgeText == null ? "" : mHeader.badgeText;
         String subject = filterTag(getContext(), mHeader.conversation.subject);
+        subject = mAdapter.getBidiFormatter().unicodeWrap(subject);
         subject = Conversation.getSubjectForDisplay(mContext, badgeText, subject);
         final Spannable displayedStringBuilder = new SpannableString(subject);
 
-        // since spans affect text metrics, add spans to the string before measure/layout or fancy
-        // ellipsizing
+        // since spans affect text metrics, add spans to the string before measure/layout or eliding
 
         final int badgeTextLength = formatBadgeText(displayedStringBuilder, badgeText);
 
@@ -1105,23 +1018,20 @@
         sPaint.setTextSize(mCoordinates.sendersFontSize);
         sPaint.setTypeface(Typeface.DEFAULT);
 
-        if (mHeader.styledNames != null) {
-            final SpannableStringBuilder participantText = elideParticipants(mHeader.styledNames);
-            layoutParticipantText(participantText);
-        } else {
-            // First pass to calculate width of each fragment.
-            if (mSendersWidth < 0) {
-                mSendersWidth = 0;
-            }
-
-            mHeader.sendersDisplayLayout = new StaticLayout(mHeader.sendersDisplayText, sPaint,
-                    mSendersWidth, Alignment.ALIGN_NORMAL, 1, 0, true);
-        }
-
+        // First pass to calculate width of each fragment.
         if (mSendersWidth < 0) {
             mSendersWidth = 0;
         }
 
+        // sendersDisplayText is only set when preserveSendersText is true.
+        if (mHeader.preserveSendersText) {
+            mHeader.sendersDisplayLayout = new StaticLayout(mHeader.sendersDisplayText, sPaint,
+                    mSendersWidth, Alignment.ALIGN_NORMAL, 1, 0, true);
+        } else {
+            final SpannableStringBuilder participantText = elideParticipants(mHeader.styledNames);
+            layoutParticipantText(participantText);
+        }
+
         pauseTimer(PERF_TAG_CALCULATE_COORDINATES);
     }
 
@@ -1152,7 +1062,7 @@
         }
 
         final SpannableStringBuilder messageInfoString = mHeader.messageInfoString;
-        if (messageInfoString.length() > 0) {
+        if (!TextUtils.isEmpty(messageInfoString)) {
             CharacterStyle[] spans = messageInfoString.getSpans(0, messageInfoString.length(),
                     CharacterStyle.class);
             // There is only 1 character style span; make sure we apply all the
@@ -1164,8 +1074,8 @@
             float messageInfoWidth = sPaint.measureText(messageInfoString.toString());
             totalWidth += messageInfoWidth;
         }
-       SpannableString prevSender = null;
-       SpannableString ellipsizedText;
+        SpannableString prevSender = null;
+        SpannableString ellipsizedText;
         for (SpannableString sender : parts) {
             // There may be null sender strings if there were dupes we had to remove.
             if (sender == null) {
@@ -1183,17 +1093,16 @@
             // If there are already senders present in this string, we need to
             // make sure we prepend the dividing token
             if (SendersView.sElidedString.equals(sender.toString())) {
-                prevSender = sender;
                 sender = copyStyles(spans, sElidedPaddingToken + sender + sElidedPaddingToken);
             } else if (!skipToHeader && builder.length() > 0
                     && (prevSender == null || !SendersView.sElidedString.equals(prevSender
                             .toString()))) {
-                prevSender = sender;
                 sender = copyStyles(spans, sSendersSplitToken + sender);
             } else {
-                prevSender = sender;
                 skipToHeader = false;
             }
+            prevSender = sender;
+
             if (spans.length > 0) {
                 spans[0].updateDrawState(sPaint);
             }
@@ -1221,7 +1130,9 @@
             builder.append(fragmentDisplayText);
         }
         mHeader.styledMessageInfoStringOffset = builder.length();
-        builder.append(messageInfoString);
+        if (!TextUtils.isEmpty(messageInfoString)) {
+            builder.append(messageInfoString);
+        }
         return builder;
     }
 
@@ -1254,6 +1165,11 @@
 
     @Override
     protected void onDraw(Canvas canvas) {
+        if (mCoordinates == null) {
+            LogUtils.e(LOG_TAG, "null coordinates in ConversationItemView#onDraw");
+            return;
+        }
+
         Utils.traceBeginSection("CIVC.draw");
 
         // Contact photo
@@ -1335,7 +1251,7 @@
 
         // Date.
         sPaint.setTextSize(mCoordinates.dateFontSize);
-        sPaint.setTypeface(isUnread ? Typeface.SANS_SERIF : SANS_SERIF_LIGHT);
+        sPaint.setTypeface(isUnread ? SANS_SERIF_BOLD : SANS_SERIF_LIGHT);
         sPaint.setColor(isUnread ? sDateTextColorUnread : sDateTextColorRead);
         drawText(canvas, mHeader.dateText, mDateX, mCoordinates.dateYBaseline, sPaint);
 
@@ -1344,40 +1260,51 @@
             canvas.drawBitmap(mHeader.paperclip, mPaperclipX, mCoordinates.paperclipY, sPaint);
         }
 
+        // Star.
         if (mStarEnabled) {
-            // Star.
             canvas.drawBitmap(getStarBitmap(), mCoordinates.starX, mCoordinates.starY, sPaint);
         }
 
-        // right-side edge effect when in tablet conversation mode and the list is not collapsed
-        if (Utils.getDisplayListRightEdgeEffect(mTabletDevice, mListCollapsible,
-                mConfig.getViewMode())) {
-            final boolean isRtl = ViewUtils.isViewRtl(this);
-            RIGHT_EDGE_TABLET.setBounds(
-                    (isRtl) ? 0 : getWidth() - RIGHT_EDGE_TABLET.getIntrinsicWidth(), 0,
-                    (isRtl) ? RIGHT_EDGE_TABLET.getIntrinsicWidth() : getWidth(), getHeight());
-            RIGHT_EDGE_TABLET.draw(canvas);
-
-            if (isActivated()) {
-                final int w = VISIBLE_CONVERSATION_HIGHLIGHT.getIntrinsicWidth();
-                VISIBLE_CONVERSATION_HIGHLIGHT.setBounds(
-                        (isRtl) ? getWidth() - w : 0, 0,
-                        (isRtl) ? getWidth() : w, getHeight());
-                VISIBLE_CONVERSATION_HIGHLIGHT.draw(canvas);
-            }
+        // Divider.
+        if (mDividerEnabled) {
+            final int dividerBottomY = getHeight();
+            final int dividerTopY = dividerBottomY - sDividerHeight;
+            canvas.drawRect(0, dividerTopY, getWidth(), dividerBottomY, sDividerPaint);
         }
 
-        // draw the inset divider
-        sDividerPaint.setColor(sDividerColor);
-        final int dividerBottomY = getHeight();
-        final int dividerTopY = dividerBottomY - sDividerHeight;
-        canvas.drawRect(sDividerInset, dividerTopY, getWidth(), dividerBottomY, sDividerPaint);
+        // The focused bar
+        final SwipeableListView listView = getListView();
+        if (listView != null && listView.isConversationSelected(getConversation())) {
+            final int w = FOCUSED_CONVERSATION_HIGHLIGHT.getIntrinsicWidth();
+            final boolean isRtl = ViewUtils.isViewRtl(this);
+            // This bar is on the right side of the conv list if it's RTL
+            FOCUSED_CONVERSATION_HIGHLIGHT.setBounds(
+                    (isRtl) ? getWidth() - w : 0, 0,
+                    (isRtl) ? getWidth() : w, getHeight());
+            FOCUSED_CONVERSATION_HIGHLIGHT.draw(canvas);
+        }
+
         Utils.traceEndSection();
     }
 
+    @Override
+    public void setSelected(boolean selected) {
+        // We catch the selected event here instead of using ListView#setOnItemSelectedListener
+        // because when the framework changes selection due to keyboard events, it sets the selected
+        // state, re-draw the affected views, and then call onItemSelected. That approach won't work
+        // because the view won't know about the new selected position during the re-draw.
+        if (selected) {
+            final SwipeableListView listView = getListView();
+            if (listView != null) {
+                listView.setSelectedConversation(getConversation());
+            }
+        }
+        super.setSelected(selected);
+    }
+
     private void drawSendersImage(final Canvas canvas) {
         if (!mSendersImageView.isFlipping()) {
-            final boolean showSenders = !isSelected();
+            final boolean showSenders = !mChecked;
             mSendersImageView.reset(showSenders);
         }
         canvas.translate(mCoordinates.contactImagesX, mCoordinates.contactImagesY);
@@ -1428,56 +1355,56 @@
         if (mBackgroundOverrideResId > 0) {
             background = mBackgroundOverrideResId;
         } else {
-            background = R.drawable.conversation_item_background_selector;
+            background = R.drawable.conversation_item_background;
         }
         setBackgroundResource(background);
     }
 
-    /**
-     * Toggle the check mark on this view and update the conversation or begin
-     * drag, if drag is enabled.
-     */
     @Override
-    public boolean toggleSelectedStateOrBeginDrag() {
-        ViewMode mode = mActivity.getViewMode();
-        if (mTabletDevice && mode.isListMode()) {
-            return beginDragMode();
-        } else {
-            return toggleSelectedState("long_press");
+    protected int[] onCreateDrawableState(int extraSpace) {
+        final int[] curr = super.onCreateDrawableState(extraSpace + 1);
+        if (mChecked) {
+            mergeDrawableStates(curr, CHECKED_STATE);
         }
+        return curr;
+    }
+
+    private void setChecked(boolean checked) {
+        mChecked = checked;
+        refreshDrawableState();
     }
 
     @Override
-    public boolean toggleSelectedState() {
-        return toggleSelectedState(null);
+    public boolean toggleCheckedState() {
+        return toggleCheckedState(null);
     }
 
-    private boolean toggleSelectedState(final String sourceOpt) {
-        if (mHeader != null && mHeader.conversation != null && mSelectedConversationSet != null) {
-            mSelected = !mSelected;
-            setSelected(mSelected);
+    @Override
+    public boolean toggleCheckedState(final String sourceOpt) {
+        if (mHeader != null && mHeader.conversation != null && mCheckedConversationSet != null) {
+            setChecked(!mChecked);
             final Conversation conv = mHeader.conversation;
             // Set the list position of this item in the conversation
             final SwipeableListView listView = getListView();
 
             try {
-                conv.position = mSelected && listView != null ? listView.getPositionForView(this)
+                conv.position = mChecked && listView != null ? listView.getPositionForView(this)
                         : Conversation.NO_POSITION;
             } catch (final NullPointerException e) {
                 // TODO(skennedy) Remove this if we find the root cause b/9527863
             }
 
-            if (mSelectedConversationSet.isEmpty()) {
+            if (mCheckedConversationSet.isEmpty()) {
                 final String source = (sourceOpt != null) ? sourceOpt : "checkbox";
                 Analytics.getInstance().sendEvent("enter_cab_mode", source, null, 0);
             }
 
-            mSelectedConversationSet.toggle(conv);
-            if (mSelectedConversationSet.isEmpty()) {
+            mCheckedConversationSet.toggle(conv);
+            if (mCheckedConversationSet.isEmpty()) {
                 listView.commitDestructiveActions(true);
             }
 
-            final boolean front = !mSelected;
+            final boolean front = !mChecked;
             mSendersImageView.flipTo(front);
 
             // We update the background after the checked state has changed
@@ -1498,10 +1425,10 @@
     }
 
     @Override
-    public void onSetPopulated(final ConversationSelectionSet set) { }
+    public void onSetPopulated(final ConversationCheckedSet set) { }
 
     @Override
-    public void onSetChanged(final ConversationSelectionSet set) { }
+    public void onSetChanged(final ConversationCheckedSet set) { }
 
     /**
      * Toggle the star on this view and update the conversation.
@@ -1530,7 +1457,7 @@
 
         // Allow touching a little right of the contact photo when we're already in selection mode
         final float extra;
-        if (mSelectedConversationSet == null || mSelectedConversationSet.isEmpty()) {
+        if (mCheckedConversationSet == null || mCheckedConversationSet.isEmpty()) {
             extra = 0;
         } else {
             extra = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 16,
@@ -1603,8 +1530,6 @@
 
         int x = (int) event.getX();
         int y = (int) event.getY();
-        mLastTouchX = x;
-        mLastTouchY = y;
         switch (event.getAction()) {
             case MotionEvent.ACTION_DOWN:
                 if (isTouchInContactPhoto(x, y) || isTouchInInfoIcon(x, y) || isTouchInStar(x, y)) {
@@ -1621,7 +1546,7 @@
                 if (mDownEvent) {
                     if (isTouchInContactPhoto(x, y)) {
                         // Touch on the check mark
-                        toggleSelectedState();
+                        toggleCheckedState();
                     } else if (isTouchInInfoIcon(x, y)) {
                         if (mConversationItemAreaClickListener != null) {
                             mConversationItemAreaClickListener.onInfoIconClicked();
@@ -1655,8 +1580,6 @@
         Utils.traceBeginSection("on touch event");
         int x = (int) event.getX();
         int y = (int) event.getY();
-        mLastTouchX = x;
-        mLastTouchY = y;
         if (!mSwipeEnabled) {
             Utils.traceEndSection();
             return onTouchEventNoSwipe(event);
@@ -1675,7 +1598,7 @@
                         // Touch on the check mark
                         Utils.traceEndSection();
                         mDownEvent = false;
-                        toggleSelectedState();
+                        toggleCheckedState();
                         Utils.traceEndSection();
                         return true;
                     } else if (isTouchInInfoIcon(x, y)) {
@@ -1848,105 +1771,12 @@
         return SwipeableView.from(this);
     }
 
-    /**
-     * Begin drag mode. Keep the conversation selected (NOT toggle selection) and start drag.
-     */
-    private boolean beginDragMode() {
-        if (mLastTouchX < 0 || mLastTouchY < 0 ||  mSelectedConversationSet == null) {
-            return false;
-        }
-        // If this is already checked, don't bother unchecking it!
-        if (!mSelected) {
-            toggleSelectedState();
-        }
-
-        // Clip data has form: [conversations_uri, conversationId1,
-        // maxMessageId1, label1, conversationId2, maxMessageId2, label2, ...]
-        final int count = mSelectedConversationSet.size();
-        String description = Utils.formatPlural(mContext, R.plurals.move_conversation, count);
-
-        final ClipData data = ClipData.newUri(mContext.getContentResolver(), description,
-                Conversation.MOVE_CONVERSATIONS_URI);
-        for (Conversation conversation : mSelectedConversationSet.values()) {
-            data.addItem(new Item(String.valueOf(conversation.position)));
-        }
-        // Protect against non-existent views: only happens for monkeys
-        final int width = this.getWidth();
-        final int height = this.getHeight();
-        final boolean isDimensionNegative = (width < 0) || (height < 0);
-        if (isDimensionNegative) {
-            LogUtils.e(LOG_TAG, "ConversationItemView: dimension is negative: "
-                        + "width=%d, height=%d", width, height);
-            return false;
-        }
-        mActivity.startDragMode();
-        // Start drag mode
-        startDrag(data, new ShadowBuilder(this, count, mLastTouchX, mLastTouchY), null, 0);
-
-        return true;
-    }
-
-    /**
-     * Handles the drag event.
-     *
-     * @param event the drag event to be handled
-     */
-    @Override
-    public boolean onDragEvent(DragEvent event) {
-        switch (event.getAction()) {
-            case DragEvent.ACTION_DRAG_ENDED:
-                mActivity.stopDragMode();
-                return true;
-        }
-        return false;
-    }
-
-    private class ShadowBuilder extends DragShadowBuilder {
-        private final Drawable mBackground;
-
-        private final View mView;
-        private final String mDragDesc;
-        private final int mTouchX;
-        private final int mTouchY;
-        private int mDragDescX;
-        private int mDragDescY;
-
-        public ShadowBuilder(View view, int count, int touchX, int touchY) {
-            super(view);
-            mView = view;
-            mBackground = mView.getResources().getDrawable(R.drawable.list_pressed_holo);
-            mDragDesc = Utils.formatPlural(mView.getContext(), R.plurals.move_conversation, count);
-            mTouchX = touchX;
-            mTouchY = touchY;
-        }
-
-        @Override
-        public void onProvideShadowMetrics(Point shadowSize, Point shadowTouchPoint) {
-            final int width = mView.getWidth();
-            final int height = mView.getHeight();
-
-            sPaint.setTextSize(mCoordinates.subjectFontSize);
-            mDragDescX = mCoordinates.sendersX;
-            mDragDescY = (height - (int) mCoordinates.subjectFontSize) / 2 ;
-            shadowSize.set(width, height);
-            shadowTouchPoint.set(mTouchX, mTouchY);
-        }
-
-        @Override
-        public void onDrawShadow(Canvas canvas) {
-            mBackground.setBounds(0, 0, mView.getWidth(), mView.getHeight());
-            mBackground.draw(canvas);
-            sPaint.setTextSize(mCoordinates.subjectFontSize);
-            canvas.drawText(mDragDesc, mDragDescX, mDragDescY - sPaint.ascent(), sPaint);
-        }
-    }
-
     @Override
     public float getMinAllowScrollDistance() {
         return sScrollSlop;
     }
 
-    public String getAccount() {
-        return mAccount;
+    public String getAccountEmailAddress() {
+        return mAccount.getEmailAddress();
     }
 }
diff --git a/src/com/android/mail/browse/ConversationItemViewCoordinates.java b/src/com/android/mail/browse/ConversationItemViewCoordinates.java
index fc1bea0..b6a1029 100644
--- a/src/com/android/mail/browse/ConversationItemViewCoordinates.java
+++ b/src/com/android/mail/browse/ConversationItemViewCoordinates.java
@@ -31,7 +31,6 @@
 import android.widget.TextView;
 
 import com.android.mail.R;
-import com.android.mail.ui.ViewMode;
 import com.android.mail.utils.Utils;
 import com.android.mail.utils.ViewUtils;
 import com.google.common.base.Objects;
@@ -48,11 +47,6 @@
 public class ConversationItemViewCoordinates {
     private static final int SINGLE_LINE = 1;
 
-    // Modes
-    static final int MODE_COUNT = 2;
-    static final int WIDE_MODE = 0;
-    static final int NORMAL_MODE = 1;
-
     // Left-side gadget modes
     static final int GADGET_NONE = 0;
     static final int GADGET_CONTACT_PHOTO = 1;
@@ -65,7 +59,6 @@
      */
     public static final class Config {
         private int mWidth;
-        private int mViewMode = ViewMode.UNKNOWN;
         private int mGadgetMode = GADGET_NONE;
         private int mLayoutDirection = View.LAYOUT_DIRECTION_LTR;
         private boolean mShowFolders = false;
@@ -74,11 +67,6 @@
         private boolean mShowPersonalIndicator = false;
         private boolean mUseFullMargins = false;
 
-        public Config setViewMode(int viewMode) {
-            mViewMode = viewMode;
-            return this;
-        }
-
         public Config withGadget(int gadget) {
             mGadgetMode = gadget;
             return this;
@@ -113,10 +101,6 @@
             return mWidth;
         }
 
-        public int getViewMode() {
-            return mViewMode;
-        }
-
         public int getGadgetMode() {
             return mGadgetMode;
         }
@@ -139,7 +123,7 @@
 
         private int getCacheKey() {
             // hash the attributes that contribute to item height and child view geometry
-            return Objects.hashCode(mWidth, mViewMode, mGadgetMode, mShowFolders, mShowReplyState,
+            return Objects.hashCode(mWidth, mGadgetMode, mShowFolders, mShowReplyState,
                     mShowPersonalIndicator, mLayoutDirection, mUseFullMargins);
         }
 
@@ -184,11 +168,6 @@
         }
     }
 
-    /**
-     * One of either NORMAL_MODE or WIDE_MODE.
-     */
-    private final int mMode;
-
     final int height;
 
     // Star.
@@ -224,10 +203,8 @@
     final int foldersLeft;
     final int foldersRight;
     final int foldersY;
-    final int foldersHeight;
     final Typeface foldersTypeface;
     final float foldersFontSize;
-    final int foldersTextBottomPadding;
 
     // Info icon
     final int infoIconX;
@@ -264,19 +241,10 @@
     final int contactImagesX;
     final int contactImagesY;
 
-
-    /**
-     * The smallest item width for which we use the "wide" layout.
-     */
-    private final int mMinListWidthForWide;
-
     private ConversationItemViewCoordinates(final Context context, final Config config,
             final CoordinatesCache cache) {
         Utils.traceBeginSection("CIV coordinates constructor");
         final Resources res = context.getResources();
-        mMinListWidthForWide = res.getDimensionPixelSize(R.dimen.list_min_width_is_wide);
-
-        mMode = calculateMode(res, config);
 
         final int layoutId = R.layout.conversation_item_view;
 
@@ -377,22 +345,16 @@
         snippetFontSize = snippet.getTextSize();
 
         if (config.areFoldersVisible()) {
-            // vertically align folders min left edge with subject
             foldersLeft = getX(folders);
             foldersRight = foldersLeft + folders.getWidth();
-            foldersY = getY(folders) + sendersTopAdjust;
-            foldersHeight = folders.getHeight();
+            foldersY = getY(folders);
             foldersTypeface = folders.getTypeface();
-            foldersTextBottomPadding = res
-                    .getDimensionPixelSize(R.dimen.folders_text_bottom_padding);
             foldersFontSize = folders.getTextSize();
         } else {
             foldersLeft = 0;
             foldersRight = 0;
             foldersY = 0;
-            foldersHeight = 0;
             foldersTypeface = null;
-            foldersTextBottomPadding = 0;
             foldersFontSize = 0;
         }
 
@@ -457,10 +419,6 @@
         }
     }
 
-    public int getMode() {
-        return mMode;
-    }
-
     /**
      * Returns a negative corrective value that you can apply to a TextView's vertical dimensions
      * that will nudge the first line of text upwards such that uppercase Latin characters are
@@ -476,22 +434,6 @@
     }
 
     /**
-     * Returns the mode of the header view (Wide/Normal).
-     */
-    private int calculateMode(Resources res, Config config) {
-        switch (config.getViewMode()) {
-            case ViewMode.CONVERSATION_LIST:
-                return config.getWidth() >= mMinListWidthForWide ? WIDE_MODE : NORMAL_MODE;
-
-            case ViewMode.SEARCH_RESULTS_LIST:
-                return res.getInteger(R.integer.conversation_list_search_header_mode);
-
-            default:
-                return res.getInteger(R.integer.conversation_header_mode);
-        }
-    }
-
-    /**
      * Returns the x coordinates of a view by tracing up its hierarchy.
      */
     private static int getX(View view) {
@@ -518,12 +460,12 @@
     /**
      * Returns the length (maximum of characters) of subject in this mode.
      */
-    public static int getSendersLength(Context context, int mode, boolean hasAttachments) {
+    public static int getSendersLength(Context context, boolean hasAttachments) {
         final Resources res = context.getResources();
         if (hasAttachments) {
-            return res.getIntArray(R.array.senders_with_attachment_lengths)[mode];
+            return res.getInteger(R.integer.senders_with_attachment_lengths);
         } else {
-            return res.getIntArray(R.array.senders_lengths)[mode];
+            return res.getInteger(R.integer.senders_lengths);
         }
     }
 
diff --git a/src/com/android/mail/browse/ConversationItemViewModel.java b/src/com/android/mail/browse/ConversationItemViewModel.java
index ebbffcd..ab6157d 100644
--- a/src/com/android/mail/browse/ConversationItemViewModel.java
+++ b/src/com/android/mail/browse/ConversationItemViewModel.java
@@ -24,7 +24,6 @@
 import android.text.StaticLayout;
 import android.text.TextUtils;
 import android.text.format.DateUtils;
-import android.text.style.CharacterStyle;
 import android.util.LruCache;
 import android.util.Pair;
 
@@ -119,21 +118,20 @@
     private String mContentDescription;
 
     /**
-     * Email addresses corresponding to the senders/recipients that will be displayed on the top
-     * line; used to generate the conversation icon.
+     * The email address and name of the sender whose avatar will be drawn as a conversation icon.
      */
-    public ArrayList<String> displayableEmails;
+    public final SenderAvatarModel mSenderAvatarModel = new SenderAvatarModel();
 
     /**
      * Display names corresponding to the email address for the senders/recipients that will be
      * displayed on the top line.
      */
-    public ArrayList<String> displayableNames;
+    public final ArrayList<String> displayableNames = new ArrayList<>();
 
     /**
      * A styled version of the {@link #displayableNames} to be displayed on the top line.
      */
-    public ArrayList<SpannableString> styledNames;
+    public final ArrayList<SpannableString> styledNames = new ArrayList<>();
 
     /**
      * Returns the view model for a conversation. If the model doesn't exist for this conversation
@@ -237,40 +235,6 @@
     }
 
     /**
-     * Describes the style of a Senders fragment.
-     */
-    static class SenderFragment {
-        // Indices that determine which substring of mSendersText we are
-        // displaying.
-        int start;
-        int end;
-
-        // The style to apply to the TextPaint object.
-        CharacterStyle style;
-
-        // Width of the fragment.
-        int width;
-
-        // Ellipsized text.
-        String ellipsizedText;
-
-        // Whether the fragment is fixed or not.
-        boolean isFixed;
-
-        // Should the fragment be displayed or not.
-        boolean shouldDisplay;
-
-        SenderFragment(int start, int end, CharSequence sendersText, CharacterStyle style,
-                boolean isFixed) {
-            this.start = start;
-            this.end = end;
-            this.style = style;
-            this.isFixed = isFixed;
-        }
-    }
-
-
-    /**
      * Reset the content description; enough content has changed that we need to
      * regenerate it.
      */
@@ -281,7 +245,8 @@
     /**
      * Get conversation information to use for accessibility.
      */
-    public CharSequence getContentDescription(Context context, boolean showToHeader) {
+    public CharSequence getContentDescription(Context context, boolean showToHeader,
+            String foldersDesc) {
         if (mContentDescription == null) {
             // If any are unread, get the first unread sender.
             // If all are unread, get the first sender.
@@ -325,9 +290,16 @@
                     .toString();
             String readString = context.getString(
                     conversation.read ? R.string.read_string : R.string.unread_string);
-            int res = isToday ? R.string.content_description_today : R.string.content_description;
+            final int res;
+            if (foldersDesc == null) {
+                res = isToday ? R.string.content_description_today : R.string.content_description;
+            } else {
+                res = isToday ? R.string.content_description_today_with_folders :
+                        R.string.content_description_with_folders;
+            }
             mContentDescription = context.getString(res, toHeader, participant,
-                    conversation.subject, conversation.getSnippet(), date, readString);
+                    conversation.subject, conversation.getSnippet(), date, readString,
+                    foldersDesc);
         }
         return mContentDescription;
     }
@@ -352,4 +324,50 @@
             sConversationHeaderMap.evictAll();
         }
     }
-}
\ No newline at end of file
+
+    /**
+     * This mutable model stores the name and email address of the sender for whom an avatar will
+     * be drawn as the conversation icon.
+     */
+    public static final class SenderAvatarModel {
+        private String mEmailAddress;
+        private String mName;
+
+        public String getEmailAddress() {
+            return mEmailAddress;
+        }
+
+        public String getName() {
+            return mName;
+        }
+
+        /**
+         * Removes the name and email address of the participant of this avatar.
+         */
+        public void clear() {
+            mName = null;
+            mEmailAddress = null;
+        }
+
+        /**
+         * @param name the name of the participant of this avatar
+         * @param emailAddress the email address of the participant of this avatar; may not be null
+         */
+        public void populate(String name, String emailAddress) {
+            if (TextUtils.isEmpty(emailAddress)) {
+                throw new IllegalArgumentException("email address may not be null or empty");
+            }
+
+            mName = name;
+            mEmailAddress = emailAddress;
+        }
+
+        /**
+         * @return <tt>true</tt> if this model does not yet contain enough data to produce an
+         *      avatar image; <tt>false</tt> otherwise
+         */
+        public boolean isNotPopulated() {
+            return TextUtils.isEmpty(mEmailAddress);
+        }
+    }
+}
diff --git a/src/com/android/mail/browse/ConversationListFooterView.java b/src/com/android/mail/browse/ConversationListFooterView.java
index 53ec81c..a7e8fdd 100644
--- a/src/com/android/mail/browse/ConversationListFooterView.java
+++ b/src/com/android/mail/browse/ConversationListFooterView.java
@@ -18,46 +18,29 @@
 package com.android.mail.browse;
 
 import android.content.Context;
-import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.os.Bundle;
 import android.util.AttributeSet;
 import android.view.View;
-import android.widget.Button;
 import android.widget.LinearLayout;
-import android.widget.TextView;
 
 import com.android.mail.R;
 import com.android.mail.providers.Folder;
 import com.android.mail.providers.UIProvider;
-import com.android.mail.ui.ViewMode;
-import com.android.mail.utils.Utils;
 
-public final class ConversationListFooterView extends LinearLayout implements View.OnClickListener,
-        ViewMode.ModeChangeListener {
+public final class ConversationListFooterView extends LinearLayout implements View.OnClickListener {
 
     public interface FooterViewClickListener {
-        void onFooterViewErrorActionClick(Folder folder, int errorStatus);
         void onFooterViewLoadMoreClick(Folder folder);
     }
 
     private View mLoading;
-    private View mNetworkError;
     private View mLoadMore;
-    private Button mErrorActionButton;
-    private TextView mErrorText;
-    private Folder mFolder;
     private Uri mLoadMoreUri;
-    private int mErrorStatus;
     private FooterViewClickListener mClickListener;
-    private final boolean mTabletDevice;
-    // Backgrounds for different states.
-    private static Drawable sWideBackground;
-    private static Drawable sNormalBackground;
 
     public ConversationListFooterView(Context context, AttributeSet attrs) {
         super(context, attrs);
-        mTabletDevice = Utils.useTabletUI(context.getResources());
     }
 
     @Override
@@ -65,12 +48,8 @@
         super.onFinishInflate();
 
         mLoading = findViewById(R.id.loading);
-        mNetworkError = findViewById(R.id.network_error);
         mLoadMore = findViewById(R.id.load_more);
         mLoadMore.setOnClickListener(this);
-        mErrorActionButton = (Button) findViewById(R.id.error_action_button);
-        mErrorActionButton.setOnClickListener(this);
-        mErrorText = (TextView)findViewById(R.id.error_text);
     }
 
     public void setClickListener(FooterViewClickListener listener) {
@@ -81,17 +60,13 @@
     public void onClick(View v) {
         final int id = v.getId();
         final Folder f = (Folder) v.getTag();
-        if (id == R.id.error_action_button) {
-            mClickListener.onFooterViewErrorActionClick(f, mErrorStatus);
-        } else if (id == R.id.load_more) {
+        if (id == R.id.load_more) {
             mClickListener.onFooterViewLoadMoreClick(f);
         }
     }
 
     public void setFolder(Folder folder) {
-        mFolder = folder;
-        mErrorActionButton.setTag(mFolder);
-        mLoadMore.setTag(mFolder);
+        mLoadMore.setTag(folder);
         mLoadMoreUri = folder.loadMoreUri;
     }
 
@@ -101,23 +76,18 @@
     public boolean updateStatus(final ConversationCursor cursor) {
         if (cursor == null) {
             mLoading.setVisibility(View.GONE);
-            mNetworkError.setVisibility(View.GONE);
             mLoadMore.setVisibility(View.GONE);
             return false;
         }
         boolean showFooter = true;
         final Bundle extras = cursor.getExtras();
         final int cursorStatus = extras.getInt(UIProvider.CursorExtraKeys.EXTRA_STATUS);
-        mErrorStatus = extras.containsKey(UIProvider.CursorExtraKeys.EXTRA_ERROR) ?
-                extras.getInt(UIProvider.CursorExtraKeys.EXTRA_ERROR)
-                : UIProvider.LastSyncResult.SUCCESS;
         final int totalCount = extras.getInt(UIProvider.CursorExtraKeys.EXTRA_TOTAL_COUNT);
 
         if (UIProvider.CursorStatus.isWaitingForResults(cursorStatus)) {
             if (cursor.getCount() != 0) {
                 // When loading more, show the spinner in the footer.
                 mLoading.setVisibility(View.VISIBLE);
-                mNetworkError.setVisibility(View.GONE);
                 mLoadMore.setVisibility(View.GONE);
             } else {
                 // We're currently loading, but we have no messages at all. We don't need to show
@@ -125,87 +95,15 @@
                 // conversation list itself.
                 showFooter = false;
             }
-        } else if (mErrorStatus != UIProvider.LastSyncResult.SUCCESS) {
-            // We are in some error state, show the footer with an error message.
-            mNetworkError.setVisibility(View.VISIBLE);
-            mErrorText.setText(Utils.getSyncStatusText(getContext(), mErrorStatus));
-            mLoading.setVisibility(View.GONE);
-            mLoadMore.setVisibility(View.GONE);
-            // Only show the "Retry" button for I/O errors; it won't help for
-            // internal errors.
-            mErrorActionButton.setVisibility(
-                    mErrorStatus != UIProvider.LastSyncResult.SECURITY_ERROR ?
-                    View.VISIBLE : View.GONE);
-
-            final int actionTextResourceId;
-            switch (mErrorStatus) {
-                case UIProvider.LastSyncResult.CONNECTION_ERROR:
-                    actionTextResourceId = R.string.retry;
-                    break;
-                case UIProvider.LastSyncResult.SERVER_ERROR:
-                    actionTextResourceId = R.string.retry;
-                    break;
-                case UIProvider.LastSyncResult.AUTH_ERROR:
-                    actionTextResourceId = R.string.signin;
-                    break;
-                case UIProvider.LastSyncResult.SECURITY_ERROR:
-                    actionTextResourceId = R.string.retry;
-                    mNetworkError.setVisibility(View.GONE);
-                    break; // Currently we do nothing for security errors.
-                case UIProvider.LastSyncResult.STORAGE_ERROR:
-                    actionTextResourceId = R.string.info;
-                    break;
-                case UIProvider.LastSyncResult.INTERNAL_ERROR:
-                    actionTextResourceId = R.string.report;
-                    break;
-                default:
-                    actionTextResourceId = R.string.retry;
-                    mNetworkError.setVisibility(View.GONE);
-                    break;
-            }
-            mErrorActionButton.setText(actionTextResourceId);
 
         } else if (mLoadMoreUri != null && cursor.getCount() < totalCount) {
             // We know that there are more messages on the server than we have locally, so we
             // need to show the footer with the "load more" button.
             mLoading.setVisibility(View.GONE);
-            mNetworkError.setVisibility(View.GONE);
             mLoadMore.setVisibility(View.VISIBLE);
         } else {
             showFooter = false;
         }
         return showFooter;
     }
-
-    /**
-     * Update to the appropriate background when the view mode changes.
-     */
-    @Override
-    public void onViewModeChanged(int newMode) {
-        final Drawable drawable;
-        if (mTabletDevice && newMode == ViewMode.CONVERSATION_LIST) {
-            drawable = getWideBackground();
-        } else {
-            drawable = getNormalBackground();
-        }
-        setBackgroundDrawable(drawable);
-    }
-
-    private Drawable getWideBackground() {
-        if (sWideBackground == null) {
-            sWideBackground = getBackground(R.drawable.conversation_wide_unread_selector);
-        }
-        return sWideBackground;
-    }
-
-    private Drawable getNormalBackground() {
-        if (sNormalBackground == null) {
-            sNormalBackground = getBackground(R.drawable.conversation_item_background_selector);
-        }
-        return sNormalBackground;
-    }
-
-    private Drawable getBackground(int resId) {
-        return getContext().getResources().getDrawable(resId);
-    }
 }
diff --git a/src/com/android/mail/browse/ConversationMessage.java b/src/com/android/mail/browse/ConversationMessage.java
index 2ac40ee..36ab441 100644
--- a/src/com/android/mail/browse/ConversationMessage.java
+++ b/src/com/android/mail/browse/ConversationMessage.java
@@ -77,7 +77,7 @@
      *
      */
     public int getStateHashCode() {
-        return Objects.hashCode(uri, read, starred, getAttachmentsStateHashCode());
+        return Objects.hashCode(uri, getAttachmentsStateHashCode());
     }
 
     private int getAttachmentsStateHashCode() {
@@ -94,6 +94,21 @@
         return c != null && c.isConversationStarred();
     }
 
+    /**
+     * Sets the starred state of this Message object and also updates the cached instance in
+     * {@link MessageCursor} (if not null)
+     *
+     * @param starred new starred state
+     */
+    public void setStarredInConversation(boolean starred) {
+        this.starred = starred;
+        final MessageCursor c = mController.getMessageCursor();
+        if (c != null) {
+            final ConversationMessage other = c.getMessageForId(id);
+            other.starred = starred;
+        }
+    }
+
     public void star(boolean newStarred) {
         final ConversationUpdater listController = mController.getListController();
         if (listController != null) {
diff --git a/src/com/android/mail/browse/ConversationPagerAdapter.java b/src/com/android/mail/browse/ConversationPagerAdapter.java
index 70620b4..6282ff4 100644
--- a/src/com/android/mail/browse/ConversationPagerAdapter.java
+++ b/src/com/android/mail/browse/ConversationPagerAdapter.java
@@ -19,7 +19,8 @@
 
 import android.app.Fragment;
 import android.app.FragmentManager;
-import android.content.res.Resources;
+import android.app.FragmentTransaction;
+import android.content.Context;
 import android.database.Cursor;
 import android.database.DataSetObserver;
 import android.os.Bundle;
@@ -27,6 +28,7 @@
 import android.support.v4.view.ViewPager;
 import android.view.ViewGroup;
 
+import com.android.mail.preferences.MailPrefs;
 import com.android.mail.providers.Account;
 import com.android.mail.providers.Conversation;
 import com.android.mail.providers.Folder;
@@ -36,7 +38,9 @@
 import com.android.mail.ui.ActivityController;
 import com.android.mail.ui.ConversationViewFragment;
 import com.android.mail.ui.SecureConversationViewFragment;
+import com.android.mail.ui.TwoPaneController;
 import com.android.mail.utils.FragmentStatePagerAdapter2;
+import com.android.mail.utils.HtmlSanitizer;
 import com.android.mail.utils.LogUtils;
 
 public class ConversationPagerAdapter extends FragmentStatePagerAdapter2
@@ -67,10 +71,8 @@
      * True iff we are in the process of handling a dataset change.
      */
     private boolean mInDataSetChange = false;
-    /**
-     * Need to keep this around to look up pager title strings.
-     */
-    private Resources mResources;
+
+    private Context mContext;
     /**
      * This isn't great to create a circular dependency, but our usage of {@link #getPageTitle(int)}
      * requires knowing which page is the currently visible to dynamically name offscreen pages
@@ -81,7 +83,16 @@
      * minimize dangling references.
      */
     private ViewPager mPager;
-    private boolean mSanitizedHtml;
+
+    /**
+     * <tt>true</tt> indicates the server has already sanitized all HTML email from this account.
+     */
+    private boolean mServerSanitizedHtml;
+
+    /**
+     * <tt>true</tt> indicates the client is permitted to sanitize all HTML email for this account.
+     */
+    private boolean mClientSanitizedHtml;
 
     private boolean mStopListeningMode = false;
 
@@ -99,21 +110,41 @@
      */
     private int mLastKnownCount;
 
+    /**
+     * Once this adapter is connected to a ViewPager's saved state (from a previous
+     * {@link #saveState()}), this field keeps the state around in case it later needs to be used
+     * to find and kill page fragments.
+     */
+    private Bundle mRestoredState;
+
+    private final FragmentManager mFragmentManager;
+
+    private boolean mPageChangeListenerEnabled;
+
     private static final String LOG_TAG = ConversationPagerController.LOG_TAG;
 
     private static final String BUNDLE_DETACHED_MODE =
             ConversationPagerAdapter.class.getName() + "-detachedmode";
+    /**
+     * This is the bundle key prefix for the saved pager fragments as stashed by the parent class.
+     * See the implementation of {@link FragmentStatePagerAdapter2#saveState()}. This assumes that
+     * value!!!
+     */
+    private static final String BUNDLE_FRAGMENT_PREFIX = "f";
 
-    public ConversationPagerAdapter(Resources res, FragmentManager fm, Account account,
+    public ConversationPagerAdapter(Context context, FragmentManager fm, Account account,
             Folder folder, Conversation initialConversation) {
         super(fm, false /* enableSavedStates */);
-        mResources = res;
+        mContext = context;
+        mFragmentManager = fm;
         mCommonFragmentArgs = AbstractConversationViewFragment.makeBasicArgs(account);
         mInitialConversation = initialConversation;
         mAccount = account;
         mFolder = folder;
-        mSanitizedHtml = mAccount.supportsCapability
-                (UIProvider.AccountCapabilities.SANITIZED_HTML);
+        mServerSanitizedHtml =
+                mAccount.supportsCapability(UIProvider.AccountCapabilities.SERVER_SANITIZED_HTML);
+        mClientSanitizedHtml =
+                mAccount.supportsCapability(UIProvider.AccountCapabilities.CLIENT_SANITIZED_HTML);
     }
 
     public boolean matches(Account account, Folder folder) {
@@ -194,11 +225,23 @@
     }
 
     private AbstractConversationViewFragment getConversationViewFragment(Conversation c) {
-        if (mSanitizedHtml) {
+        // if Html email bodies are already sanitized by the mail server, scripting can be enabled
+        if (mServerSanitizedHtml) {
             return ConversationViewFragment.newInstance(mCommonFragmentArgs, c);
-        } else {
-            return SecureConversationViewFragment.newInstance(mCommonFragmentArgs, c);
         }
+
+        // if this client is permitted to sanitize emails for this account, attempt to do so
+        if (mClientSanitizedHtml) {
+            // if the version of the Html Sanitizer meets or exceeds the required version, the
+            // results of the sanitizer can be trusted and scripting can be enabled
+            final MailPrefs mailPrefs = MailPrefs.get(mContext);
+            if (HtmlSanitizer.VERSION >= mailPrefs.getRequiredSanitizerVersionNumber()) {
+                return ConversationViewFragment.newInstance(mCommonFragmentArgs, c);
+            }
+        }
+
+        // otherwise we do not enable scripting
+        return SecureConversationViewFragment.newInstance(mCommonFragmentArgs, c);
     }
 
     @Override
@@ -259,10 +302,46 @@
             b.setClassLoader(loader);
             final boolean detached = b.getBoolean(BUNDLE_DETACHED_MODE);
             setDetachedMode(detached);
+
+            // save off the bundle in case it later needs to be consulted for fragments-to-kill
+            mRestoredState = b;
         }
         LogUtils.d(LOG_TAG, "OUT PagerAdapter.restoreState. this=%s", this);
     }
 
+    /**
+     * Part of an inelegant dance to clean up restored fragments after realizing
+     * we don't want the ViewPager around after all in 2-pane. See docs for
+     * {@link ConversationPagerController#killRestoredFragments()} and
+     * {@link TwoPaneController#restoreConversation}.
+     */
+    public void killRestoredFragments() {
+        if (mRestoredState == null) {
+            return;
+        }
+
+        FragmentTransaction ft = null;
+        for (String key : mRestoredState.keySet()) {
+            // WARNING: this code assumes implementation details in
+            // FragmentStatePagerAdapter2#restoreState
+            if (!key.startsWith(BUNDLE_FRAGMENT_PREFIX)) {
+                continue;
+            }
+            final Fragment f = mFragmentManager.getFragment(mRestoredState, key);
+            if (f != null) {
+                if (ft == null) {
+                    ft = mFragmentManager.beginTransaction();
+                }
+                ft.remove(f);
+            }
+        }
+        if (ft != null) {
+            ft.commitAllowingStateLoss();
+            mFragmentManager.executePendingTransactions();
+        }
+        mRestoredState = null;
+    }
+
     private void setDetachedMode(boolean detached) {
         if (mDetachedMode == detached) {
             return;
@@ -458,6 +537,10 @@
         LogUtils.d(LOG_TAG, "CPA.stopListening, this=%s", this);
     }
 
+    public void enablePageChangeListener(boolean enable) {
+        mPageChangeListenerEnabled = enable;
+    }
+
     @Override
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
         // no-op
@@ -465,7 +548,7 @@
 
     @Override
     public void onPageSelected(int position) {
-        if (mController == null) {
+        if (mController == null || !mPageChangeListenerEnabled) {
             return;
         }
         final ConversationCursor cursor = getCursor();
@@ -476,7 +559,7 @@
         final Conversation c = cursor.getConversation();
         c.position = position;
         LogUtils.d(LOG_TAG, "pager adapter setting current conv: %s", c);
-        mController.setCurrentConversation(c);
+        mController.onConversationViewSwitched(c);
     }
 
     @Override
diff --git a/src/com/android/mail/browse/ConversationPagerController.java b/src/com/android/mail/browse/ConversationPagerController.java
index 347b4ae..0daee9b 100644
--- a/src/com/android/mail/browse/ConversationPagerController.java
+++ b/src/com/android/mail/browse/ConversationPagerController.java
@@ -17,6 +17,7 @@
 
 package com.android.mail.browse;
 
+import android.animation.AnimatorListenerAdapter;
 import android.app.FragmentManager;
 import android.content.Context;
 import android.content.res.TypedArray;
@@ -25,6 +26,7 @@
 import android.graphics.drawable.Drawable;
 import android.support.v4.view.ViewPager;
 import android.view.View;
+import android.view.ViewPropertyAnimator;
 
 import com.android.mail.R;
 import com.android.mail.graphics.PageMarginDrawable;
@@ -84,6 +86,9 @@
      */
     private static final boolean ENABLE_SINGLETON_INITIAL_LOAD = false;
 
+    /** Duration of pager.show(...)'s animation */
+    private static final int SHOW_ANIMATION_DURATION = 300;
+
     public ConversationPagerController(RestrictedActivity activity,
             ActivityController controller) {
         mFragmentManager = activity.getFragmentManager();
@@ -92,8 +97,18 @@
         setupPageMargin(activity.getActivityContext());
     }
 
+    /**
+     * Show the conversation pager for the given conversation and animate in if specified along
+     * with given animation listener.
+     * @param account current account
+     * @param folder current folder
+     * @param initialConversation conversation to display initially in pager
+     * @param changeVisibility true if we need to make the pager appear
+     * @param pagerAnimationListener animation listener for pager fade-in, null indicates no
+     *                               animation should take place
+     */
     public void show(Account account, Folder folder, Conversation initialConversation,
-            boolean changeVisibility) {
+            boolean changeVisibility, AnimatorListenerAdapter pagerAnimationListener) {
         mInitialConversationLoading = true;
 
         if (mShown) {
@@ -105,7 +120,7 @@
                     && !mPagerAdapter.isDetached()) {
                 final int pos = mPagerAdapter.getConversationPosition(initialConversation);
                 if (pos >= 0) {
-                    mPager.setCurrentItem(pos);
+                    setCurrentItem(pos);
                     return;
                 }
             }
@@ -114,10 +129,26 @@
         }
 
         if (changeVisibility) {
-            mPager.setVisibility(View.VISIBLE);
+            // If we have a pagerAnimationListener, go ahead and animate
+            if (pagerAnimationListener != null) {
+                // Reset alpha to 0 before animating/making it visible
+                mPager.setAlpha(0f);
+                mPager.setVisibility(View.VISIBLE);
+
+                // Fade in pager to full visibility - this can be cancelled mid-animation
+                mPager.animate().alpha(1f)
+                        .setDuration(SHOW_ANIMATION_DURATION).setListener(pagerAnimationListener);
+
+            // Otherwise, make the pager appear without animation
+            } else {
+                // In case pager animation was cancelled and alpha value was not reset,
+                // ensure that the pager is completely visible for a non-animated pager.show
+                mPager.setAlpha(1f);
+                mPager.setVisibility(View.VISIBLE);
+            }
         }
 
-        mPagerAdapter = new ConversationPagerAdapter(mPager.getResources(), mFragmentManager,
+        mPagerAdapter = new ConversationPagerAdapter(mPager.getContext(), mFragmentManager,
                 account, folder, initialConversation);
         mPagerAdapter.setSingletonMode(ENABLE_SINGLETON_INITIAL_LOAD);
         mPagerAdapter.setActivityController(mActivityController);
@@ -134,7 +165,7 @@
             final int initialPos = mPagerAdapter.getConversationPosition(initialConversation);
             if (initialPos >= 0) {
                 LogUtils.d(LOG_TAG, "*** pager fragment init pos=%d", initialPos);
-                mPager.setCurrentItem(initialPos);
+                setCurrentItem(initialPos);
             }
         }
         Utils.sConvLoadTimer.mark("pager setAdapter");
@@ -142,12 +173,20 @@
         mShown = true;
     }
 
+    /**
+     * Hide the pager and cancel any running/pending animation
+     * @param changeVisibility true if we need to make the pager disappear
+     */
     public void hide(boolean changeVisibility) {
         if (!mShown) {
             LogUtils.d(LOG_TAG, "IN CPC.hide, but already hidden");
             return;
         }
         mShown = false;
+
+        // Cancel any potential animations to avoid listener methods running when they shouldn't
+        mPager.animate().cancel();
+
         if (changeVisibility) {
             mPager.setVisibility(View.GONE);
         }
@@ -157,11 +196,30 @@
         cleanup();
     }
 
+    /**
+     * Part of a delicate dance to kill fragments on restore after rotation if
+     * the device configuration no longer calls for them. You must call
+     * {@link #show(Account, Folder, Conversation, boolean, boolean)} first, and you probably want
+     * to call {@link #hide(boolean)} afterwards to finish the cleanup. See go/xqaxk. Sorry...
+     *
+     */
+    public void killRestoredFragments() {
+        mPagerAdapter.killRestoredFragments();
+    }
+
     // Explicitly set the focus to the conversation pager, specifically the conv overlay.
     public void focusPager() {
         mPager.requestFocus();
     }
 
+    private void setCurrentItem(int pos) {
+        // disable onPageSelected notifications during this operation. that listener is only there
+        // to update the rest of the app when the user swipes to another page.
+        mPagerAdapter.enablePageChangeListener(false);
+        mPager.setCurrentItem(pos);
+        mPagerAdapter.enablePageChangeListener(true);
+    }
+
     public boolean isInitialConversationLoading() {
         return mInitialConversationLoading;
     }
diff --git a/src/com/android/mail/browse/ConversationViewAdapter.java b/src/com/android/mail/browse/ConversationViewAdapter.java
index 57a356c..8545ee4 100644
--- a/src/com/android/mail/browse/ConversationViewAdapter.java
+++ b/src/com/android/mail/browse/ConversationViewAdapter.java
@@ -20,7 +20,6 @@
 import android.app.FragmentManager;
 import android.app.LoaderManager;
 import android.content.Context;
-import android.support.annotation.IdRes;
 import android.support.annotation.IntDef;
 import android.support.v4.text.BidiFormatter;
 import android.view.Gravity;
@@ -54,6 +53,7 @@
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * A specialized adapter that contains overlay views to draw on top of the underlying conversation
@@ -141,9 +141,6 @@
             v.setStarred(mConversation.starred);
             v.setTag(OVERLAY_ITEM_ROOT_TAG);
 
-            // Register the onkey listener for all relevant views
-            registerOnKeyListeners(v, v.findViewById(R.id.subject_and_folder_view));
-
             return v;
         }
 
@@ -151,7 +148,6 @@
         public void bindView(View v, boolean measureOnly) {
             ConversationViewHeader header = (ConversationViewHeader) v;
             header.bind(this);
-            mRootView = v;
         }
 
         @Override
@@ -355,6 +351,9 @@
         @Override
         public void setMessage(ConversationMessage message) {
             mMessage = message;
+            // setMessage signifies an in-place update to the message, so let's clear out recipient
+            // summary text so the view will refresh it on the next render.
+            recipientSummaryText = null;
         }
 
         public CharSequence getTimestampShort() {
@@ -721,7 +720,13 @@
             LogUtils.e(LOG_TAG, "not enough items in the adapter. count: %s", count);
             return null;
         }
-        return (ConversationFooterItem) mItems.get(count - 1);
+        final ConversationOverlayItem item = mItems.get(count - 1);
+        try {
+            return (ConversationFooterItem) item;
+        } catch (ClassCastException e) {
+            LogUtils.e(LOG_TAG, "Last item is not a conversation footer. type: %s", item.getType());
+            return null;
+        }
     }
 
     /**
@@ -738,87 +743,60 @@
 
     // This should be a safe call since all containers should have at least a conv header and a
     // message header.
-    // TODO: what to do when the first header is off the screen and recycled?
-    public void focusFirstMessageHeader() {
+    public boolean focusFirstMessageHeader() {
         if (mItems.size() > 1) {
             final View v = mItems.get(1).getFocusableView();
-            if (v != null) {
+            if (v != null && v.isShown() && v.isFocusable()) {
                 v.requestFocus();
+                return true;
             }
         }
-    }
-
-    /**
-     * Try to find the position of the provided view (or it's view container) in the adapter.
-     */
-    public int getViewPosition(View v) {
-        // First find the root view of the overlay item
-        while (v.getTag() != OVERLAY_ITEM_ROOT_TAG) {
-            final ViewParent parent = v.getParent();
-            if (parent != null && parent instanceof View) {
-                v = (View) parent;
-            } else {
-                return -1;
-            }
-        }
-        // Find the position of the root view
-        for (int i = 0; i < mItems.size(); i++) {
-            if (mItems.get(i).mRootView == v) {
-                return i;
-            }
-        }
-        return -1;
+        return false;
     }
 
     /**
      * Find the next view that should grab focus with respect to the current position.
      */
-    public View getNextOverlayView(int position, boolean isDown) {
-        if (isDown && position >= 0) {
-            while (++position < mItems.size()) {
-                final View v = mItems.get(position).getFocusableView();
-                if (v != null && v.isFocusable()) {
-                    return v;
-                }
-            }
-        } else {
-            while (--position >= 0) {
-                final View v = mItems.get(position).getFocusableView();
-                if (v != null && v.isFocusable()) {
-                    return v;
-                }
+    public View getNextOverlayView(View curr, boolean isDown, Set<View> scraps) {
+        // First find the root view of the overlay item
+        while (curr.getTag() != OVERLAY_ITEM_ROOT_TAG) {
+            final ViewParent parent = curr.getParent();
+            if (parent != null && parent instanceof View) {
+                curr = (View) parent;
+            } else {
+                return null;
             }
         }
-        // Special case two end points
-        if ((position == 0 && !isDown) || (position == mItems.size() - 1 && isDown)) {
 
+        // Find the position of the root view
+        for (int i = 0; i < mItems.size(); i++) {
+            if (mItems.get(i).mRootView == curr) {
+                // Found view, now find the next applicable view
+                if (isDown && i >= 0) {
+                    while (++i < mItems.size()) {
+                        final ConversationOverlayItem item = mItems.get(i);
+                        final View next = item.getFocusableView();
+                        if (item.mRootView != null && !scraps.contains(item.mRootView) &&
+                                next != null && next.isFocusable()) {
+                            return next;
+                        }
+                    }
+                } else {
+                    while (--i >= 0) {
+                        final ConversationOverlayItem item = mItems.get(i);
+                        final View next = item.getFocusableView();
+                        if (item.mRootView != null && !scraps.contains(item.mRootView) &&
+                                next != null && next.isFocusable()) {
+                            return next;
+                        }
+                    }
+                }
+                return null;
+            }
         }
         return null;
     }
 
-    public boolean shouldInterceptLeftRightEvents(@IdRes int id, boolean isLeft, boolean isRight,
-            boolean twoPaneLand) {
-        return twoPaneLand && (id == R.id.conversation_header ||
-                id == R.id.subject_and_folder_view ||
-                id == R.id.upper_header ||
-                id == R.id.super_collapsed_block ||
-                id == R.id.message_footer ||
-                (id == R.id.overflow && isRight) ||
-                (id == R.id.reply_button && isLeft) ||
-                (id == R.id.forward_button && isRight));
-    }
-
-    // Indicates if the direction with the provided id should navigate away from the conversation
-    // view. Note that this is only applicable in two-pane landscape mode.
-    public boolean shouldNavigateAway(@IdRes int id, boolean isLeft, boolean twoPaneLand) {
-        return twoPaneLand && isLeft &&
-                (id == R.id.conversation_header ||
-                id == R.id.subject_and_folder_view ||
-                id == R.id.upper_header ||
-                id == R.id.super_collapsed_block ||
-                id == R.id.message_footer ||
-                id == R.id.reply_button);
-    }
 
     public BidiFormatter getBidiFormatter() {
         return mBidiFormatter;
diff --git a/src/com/android/mail/browse/ConversationViewHeader.java b/src/com/android/mail/browse/ConversationViewHeader.java
index 68a1604..f64675d 100644
--- a/src/com/android/mail/browse/ConversationViewHeader.java
+++ b/src/com/android/mail/browse/ConversationViewHeader.java
@@ -17,7 +17,15 @@
 
 package com.android.mail.browse;
 
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.content.ClipData;
+import android.content.ClipboardManager;
 import android.content.Context;
+import android.content.DialogInterface;
+import android.os.Bundle;
 import android.util.AttributeSet;
 import android.view.View;
 import android.view.View.OnClickListener;
@@ -39,7 +47,8 @@
  * there is enough room to fit both without wrapping. If they overlap, it
  * adjusts the layout to position the folders below the subject.
  */
-public class ConversationViewHeader extends LinearLayout implements OnClickListener {
+public class ConversationViewHeader extends LinearLayout implements OnClickListener,
+        View.OnLongClickListener {
 
     public interface ConversationViewHeaderCallbacks {
         /**
@@ -53,6 +62,8 @@
          * @param newHeight the new height in px
          */
         void onConversationViewHeaderHeightChange(int newHeight);
+
+        Activity getActivity();
     }
 
     private static final String LOG_TAG = LogTag.getLogTag();
@@ -82,6 +93,7 @@
 
         mSubjectAndFolderView =
                 (SubjectAndFolderView) findViewById(R.id.subject_and_folder_view);
+        mSubjectAndFolderView.setOnLongClickListener(this);
         mStarView = (StarView) findViewById(R.id.conversation_header_star);
         mStarView.setOnClickListener(this);
     }
@@ -104,7 +116,9 @@
 
     public void setStarred(boolean isStarred) {
         mStarView.setStarred(isStarred);
-        mStarView.setVisibility(View.VISIBLE);
+        boolean showStar = mConversation != null && !mConversation.isInTrash();
+        mStarView.setStarred(isStarred);
+        mStarView.setVisibility(showStar ? View.VISIBLE : View.INVISIBLE);
     }
 
     public void bind(ConversationHeaderItem headerItem) {
@@ -113,7 +127,7 @@
         if (mSubjectAndFolderView != null) {
             mSubjectAndFolderView.bind(headerItem);
         }
-        mStarView.setVisibility(mConversation != null ? View.VISIBLE : View.INVISIBLE);
+        setStarred(mConversation.starred);
     }
 
     private int measureHeight() {
@@ -154,6 +168,52 @@
             mConversationUpdater.updateConversation(Conversation.listOf(mConversation),
                     UIProvider.ConversationColumns.STARRED, mConversation.starred);
         }
+    }
 
+    @Override
+    public boolean onLongClick(View v) {
+        final DialogFragment frag =
+                CopySubjectDialog.newInstance(mSubjectAndFolderView.getSubject());
+        frag.show(mCallbacks.getActivity().getFragmentManager(), CopySubjectDialog.TAG);
+        return true;
+    }
+
+    public static class CopySubjectDialog extends DialogFragment
+            implements DialogInterface.OnClickListener {
+
+        public static final String TAG = "copy-subject-dialog";
+
+        private static final String ARG_SUBJECT = "subject";
+
+        private String mSubject;
+
+        public static CopySubjectDialog newInstance(String subject) {
+            final CopySubjectDialog frag = new CopySubjectDialog();
+            final Bundle args = new Bundle(1);
+            args.putString(ARG_SUBJECT, subject);
+            frag.setArguments(args);
+            return frag;
+        }
+
+        public CopySubjectDialog() {}
+
+        @Override
+        public Dialog onCreateDialog(Bundle savedInstanceState) {
+            mSubject = getArguments().getString(ARG_SUBJECT);
+            return new AlertDialog.Builder(getActivity())
+                    .setMessage(mSubject)
+                    .setPositiveButton(R.string.contextmenu_copy, this)
+                    .setNegativeButton(R.string.cancel, this)
+                    .create();
+        }
+
+        @Override
+        public void onClick(DialogInterface dialog, int which) {
+            if (which == DialogInterface.BUTTON_POSITIVE) {
+                final ClipboardManager clipboard = (ClipboardManager)
+                        getActivity().getSystemService(Context.CLIPBOARD_SERVICE);
+                clipboard.setPrimaryClip(ClipData.newPlainText(null, mSubject));
+            }
+        }
     }
 }
diff --git a/src/com/android/mail/browse/FolderSpan.java b/src/com/android/mail/browse/FolderSpan.java
deleted file mode 100644
index fad3de8..0000000
--- a/src/com/android/mail/browse/FolderSpan.java
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc.
- * Licensed to 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.mail.browse;
-
-import android.graphics.Canvas;
-import android.graphics.Paint;
-import android.graphics.Paint.FontMetricsInt;
-import android.graphics.RectF;
-import android.text.Spanned;
-import android.text.TextPaint;
-import android.text.TextUtils;
-import android.text.style.CharacterStyle;
-import android.text.style.ReplacementSpan;
-
-/**
- * A replacement span to use when displaying folders in conversation view. Prevents a folder name
- * from wrapping mid-name, and ellipsizes very long folder names that can't fit on a single line.
- * Also ensures that folder text is drawn vertically centered within the background color chip.
- *
- */
-public class FolderSpan extends ReplacementSpan {
-
-    public interface FolderSpanDimensions {
-
-        /**
-         * Returns the padding value used for the label inside of its background.
-         */
-        int getPadding();
-
-        /**
-         * Returns the padding value that corresponds to the horizontal padding
-         * surrounding the text inside the background color.
-         */
-        int getPaddingExtraWidth();
-
-        /**
-         * Returns the padding value for the space between folders.
-         */
-        int getPaddingAfter();
-
-        /**
-         * Returns the maximum width the span is allowed to use.
-         */
-        int getMaxWidth();
-
-        /**
-         * Returns the radius to use for the rounded corners on the background rect.
-         */
-        float getRoundedCornerRadius();
-
-        /**
-         * Returns the size of the text.
-         */
-        float getFolderSpanTextSize();
-
-        /**
-         * Returns the margin above the span that should be used.
-         * It is used to enable the appearance of line spacing.
-         */
-        int getMarginTop();
-
-        /**
-         * Returns {@link true} if the span should format itself in RTL mode.
-         */
-        boolean isRtl();
-    }
-
-    private final TextPaint mWorkPaint = new TextPaint();
-    private final FontMetricsInt mFontMetrics = new FontMetricsInt();
-
-    /**
-     * A reference to the enclosing Spanned object to collect other CharacterStyle spans and take
-     * them into account when drawing.
-     */
-    private final Spanned mSpanned;
-    private final FolderSpanDimensions mDims;
-
-    public FolderSpan(Spanned spanned, FolderSpanDimensions dims) {
-        mSpanned = spanned;
-        mDims = dims;
-    }
-
-    @Override
-    public int getSize(Paint paint, CharSequence text, int start, int end, FontMetricsInt fm) {
-        setupFontMetrics(start, end, fm, paint);
-        if (fm != null) {
-            final int padding = mDims.getPadding();
-            final int margin = mDims.getMarginTop();
-            fm.ascent = Math.min(fm.top, fm.ascent - padding) - margin;
-            fm.descent = Math.max(fm.bottom, padding);
-            fm.top = fm.ascent;
-            fm.bottom = fm.descent;
-        }
-        return measureWidth(mWorkPaint, text, start, end, true);
-    }
-
-    private int measureWidth(Paint paint, CharSequence text, int start, int end,
-            boolean includePaddingAfter) {
-        final int paddingW = mDims.getPadding() + mDims.getPaddingExtraWidth();
-        final int maxWidth = mDims.getMaxWidth();
-
-        int w = (int) paint.measureText(text, start, end) + 2 * paddingW;
-        if (includePaddingAfter) {
-            w += mDims.getPaddingAfter();
-        }
-        // TextView doesn't handle spans that are wider than the view very well, so cap their widths
-        if (w > maxWidth) {
-            w = maxWidth;
-        }
-        return w;
-    }
-
-    private void setupFontMetrics(int start, int end, FontMetricsInt fm, Paint p) {
-        mWorkPaint.set(p);
-        // take into account the style spans when painting
-        final CharacterStyle[] otherSpans = mSpanned.getSpans(start, end, CharacterStyle.class);
-        for (CharacterStyle otherSpan : otherSpans) {
-            otherSpan.updateDrawState(mWorkPaint);
-        }
-        mWorkPaint.setTextSize(mDims.getFolderSpanTextSize());
-        if (fm != null) {
-            mWorkPaint.getFontMetricsInt(fm);
-        }
-    }
-
-    @Override
-    public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top,
-            int y, int bottom, Paint paint) {
-
-        final int padding = mDims.getPadding();
-        final int paddingW = padding + mDims.getPaddingExtraWidth();
-        final int maxWidth = mDims.getMaxWidth();
-
-        setupFontMetrics(start, end, mFontMetrics, paint);
-        final int bgWidth = measureWidth(mWorkPaint, text, start, end, false);
-        mFontMetrics.top = Math.min(mFontMetrics.top, mFontMetrics.ascent - padding);
-        mFontMetrics.bottom = Math.max(mFontMetrics.bottom, padding);
-        top = y + mFontMetrics.top - mFontMetrics.bottom;
-        bottom = y;
-        y =  bottom - mFontMetrics.bottom;
-
-        final boolean isRtl = mDims.isRtl();
-        final int paddingAfter = mDims.getPaddingAfter();
-        // paint a background if present
-        if (mWorkPaint.bgColor != 0) {
-            final int prevColor = mWorkPaint.getColor();
-            final Paint.Style prevStyle = mWorkPaint.getStyle();
-
-            mWorkPaint.setColor(mWorkPaint.bgColor);
-            mWorkPaint.setStyle(Paint.Style.FILL);
-            final float left;
-            if (isRtl) {
-                left = x + paddingAfter;
-            } else {
-                left = x;
-            }
-            final float right = left + bgWidth;
-            final RectF rect = new RectF(left, top, right, bottom);
-            final float radius = mDims.getRoundedCornerRadius();
-            canvas.drawRoundRect(rect, radius, radius, mWorkPaint);
-
-            mWorkPaint.setColor(prevColor);
-            mWorkPaint.setStyle(prevStyle);
-        }
-
-        // middle-ellipsize long strings
-        if (bgWidth == maxWidth) {
-            text = TextUtils.ellipsize(text.subSequence(start, end).toString(), mWorkPaint,
-                    bgWidth - 2 * paddingW, TextUtils.TruncateAt.MIDDLE);
-            start = 0;
-            end = text.length();
-        }
-        float textX = x + paddingW;
-        if (isRtl) {
-            textX += paddingAfter;
-        }
-        canvas.drawText(text, start, end, textX, y, mWorkPaint);
-    }
-
-}
diff --git a/src/com/android/mail/browse/MessageAttachmentBar.java b/src/com/android/mail/browse/MessageAttachmentBar.java
index 91c63ba..0274d66 100644
--- a/src/com/android/mail/browse/MessageAttachmentBar.java
+++ b/src/com/android/mail/browse/MessageAttachmentBar.java
@@ -313,7 +313,8 @@
 
     private boolean shouldShowExtraOption1() {
         return !mHideExtraOptionOne &&
-                mActionHandler.shouldShowExtraOption1(mAttachment.getContentType());
+                mActionHandler.shouldShowExtraOption1(mAccount.getType(),
+                        mAttachment.getContentType());
     }
 
     private boolean shouldShowOverflow() {
@@ -360,6 +361,7 @@
         if (mAttachment.canPreview()) {
             final Intent previewIntent =
                     new Intent(Intent.ACTION_VIEW, mAttachment.previewIntentUri);
+            previewIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
             getContext().startActivity(previewIntent);
 
             Analytics.getInstance().sendEvent(
diff --git a/src/com/android/mail/browse/MessageHeaderView.java b/src/com/android/mail/browse/MessageHeaderView.java
index 1242e66..724125e 100644
--- a/src/com/android/mail/browse/MessageHeaderView.java
+++ b/src/com/android/mail/browse/MessageHeaderView.java
@@ -23,11 +23,6 @@
 import android.content.res.Resources;
 import android.database.DataSetObserver;
 import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Paint;
-import android.graphics.PorterDuff;
-import android.graphics.PorterDuffXfermode;
 import android.support.v4.text.BidiFormatter;
 import android.text.Html;
 import android.text.Spannable;
@@ -66,6 +61,7 @@
 import com.android.mail.text.EmailAddressSpan;
 import com.android.mail.ui.AbstractConversationViewFragment;
 import com.android.mail.ui.ImageCanvas;
+import com.android.mail.utils.BitmapUtil;
 import com.android.mail.utils.LogTag;
 import com.android.mail.utils.LogUtils;
 import com.android.mail.utils.StyleUtils;
@@ -529,10 +525,8 @@
         switch (mSendingState) {
             case UIProvider.ConversationSendingState.QUEUED:
             case UIProvider.ConversationSendingState.SENDING:
-                title = getResources().getString(R.string.sending);
-                break;
             case UIProvider.ConversationSendingState.RETRYING:
-                title = getResources().getString(R.string.message_retrying);
+                title = getResources().getString(R.string.sending);
                 break;
             case UIProvider.ConversationSendingState.SEND_ERROR:
                 title = getResources().getString(R.string.message_failed);
@@ -721,7 +715,7 @@
 
         builder.append(to);
         builder.append(cc);
-        builder.append(bcc);
+        builder.appendBcc(bcc);
 
         return builder.build();
     }
@@ -740,7 +734,7 @@
         private final BidiFormatter mBidiFormatter;
 
         int mRecipientCount = 0;
-        boolean mFirst = true;
+        boolean mSkipComma = true;
 
         public RecipientListsBuilder(Context context, String meEmailAddress, String myName,
                 Map<String, Address> addressCache, VeiledAddressMatcher matcher,
@@ -762,6 +756,20 @@
             }
         }
 
+        public void appendBcc(String[] recipients) {
+            final int addLimit = SUMMARY_MAX_RECIPIENTS - mRecipientCount;
+            if (shouldAppendRecipients(recipients, addLimit)) {
+                // add the comma before the bcc header
+                // and then reset mSkipComma so we don't add a comma after "bcc: "
+                if (!mSkipComma) {
+                    mBuilder.append(mComma);
+                    mSkipComma = true;
+                }
+                mBuilder.append(mContext.getString(R.string.bcc_header_for_recipient_summary));
+            }
+            append(recipients);
+        }
+
         /**
          * Appends formatted recipients of the message to the recipient list,
          * as long as there are recipients left to append and the maximum number
@@ -770,9 +778,8 @@
          * @param maxToCopy The maximum number of addresses to append.
          * @return {@code true} if a recipient has been appended. {@code false}, otherwise.
          */
-        private boolean appendRecipients(String[] rawAddrs,
-                int maxToCopy) {
-            if (rawAddrs == null || rawAddrs.length == 0 || maxToCopy == 0) {
+        private boolean appendRecipients(String[] rawAddrs, int maxToCopy) {
+            if (!shouldAppendRecipients(rawAddrs, maxToCopy)) {
                 return false;
             }
 
@@ -795,8 +802,8 @@
                 }
 
                 // duplicate TextUtils.join() logic to minimize temporary allocations
-                if (mFirst) {
-                    mFirst = false;
+                if (mSkipComma) {
+                    mSkipComma = false;
                 } else {
                     mBuilder.append(mComma);
                 }
@@ -806,6 +813,15 @@
             return true;
         }
 
+        /**
+         * @param rawAddrs The addresses to append.
+         * @param maxToCopy The maximum number of addresses to append.
+         * @return {@code true} if a recipient should be appended. {@code false}, otherwise.
+         */
+        private boolean shouldAppendRecipients(String[] rawAddrs, int maxToCopy) {
+            return rawAddrs != null && rawAddrs.length != 0 && maxToCopy != 0;
+        }
+
         public CharSequence build() {
             return mContext.getString(R.string.to_message_header, mBuilder);
         }
@@ -830,7 +846,6 @@
         boolean photoSet = false;
         final String email = mSender.getAddress();
         final ContactInfo info = mContactInfoSource.getContactInfo(email);
-        final Resources res = getResources();
         if (info != null) {
             if (info.contactUri != null) {
                 mPhotoView.assignContactUri(info.contactUri);
@@ -839,7 +854,7 @@
             }
 
             if (info.photo != null) {
-                mPhotoView.setImageBitmap(frameBitmapInCircle(info.photo));
+                mPhotoView.setImageBitmap(BitmapUtil.frameBitmapInCircle(info.photo));
                 photoSet = true;
             }
         } else {
@@ -848,14 +863,14 @@
 
         if (!photoSet) {
             mPhotoView.setImageBitmap(
-                    frameBitmapInCircle(makeLetterTile(mSender.getPersonal(), email)));
+                    BitmapUtil.frameBitmapInCircle(makeLetterTile(mSender.getPersonal(), email)));
         }
     }
 
     private Bitmap makeLetterTile(
             String displayName, String senderAddress) {
         if (mLetterTileProvider == null) {
-            mLetterTileProvider = new LetterTileProvider(getContext());
+            mLetterTileProvider = new LetterTileProvider(getContext().getResources());
         }
 
         final ImageCanvas.Dimensions dimensions = new ImageCanvas.Dimensions(
@@ -863,46 +878,6 @@
         return mLetterTileProvider.getLetterTile(dimensions, displayName, senderAddress);
     }
 
-    /**
-     * Frames the input bitmap in a circle.
-     */
-    private static Bitmap frameBitmapInCircle(Bitmap input) {
-        if (input == null) {
-            return null;
-        }
-
-        // Crop the image if not squared.
-        int inputWidth = input.getWidth();
-        int inputHeight = input.getHeight();
-        int targetX, targetY, targetSize;
-        if (inputWidth >= inputHeight) {
-            targetX = inputWidth / 2 - inputHeight / 2;
-            targetY = 0;
-            targetSize = inputHeight;
-        } else {
-            targetX = 0;
-            targetY = inputHeight / 2 - inputWidth / 2;
-            targetSize = inputWidth;
-        }
-
-        // Create an output bitmap and a canvas to draw on it.
-        Bitmap output = Bitmap.createBitmap(targetSize, targetSize, Bitmap.Config.ARGB_8888);
-        Canvas canvas = new Canvas(output);
-
-        // Create a black paint to draw the mask.
-        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
-        paint.setColor(Color.BLACK);
-
-        // Draw a circle.
-        canvas.drawCircle(targetSize / 2, targetSize / 2, targetSize / 2, paint);
-
-        // Replace the black parts of the mask with the input image.
-        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
-        canvas.drawBitmap(input, targetX /* left */, targetY /* top */, paint);
-
-        return output;
-    }
-
     @Override
     public boolean onMenuItemClick(MenuItem item) {
         mPopup.dismiss();
@@ -932,6 +907,10 @@
             ComposeActivity.replyAll(getContext(), getAccount(), mMessage);
         } else if (id == R.id.forward) {
             ComposeActivity.forward(getContext(), getAccount(), mMessage);
+        } else if (id == R.id.add_star) {
+            mMessage.star(true);
+        } else if (id == R.id.remove_star) {
+            mMessage.star(false);
         } else if (id == R.id.print_message) {
             printMessage();
         } else if (id == R.id.report_rendering_problem) {
@@ -958,6 +937,15 @@
             m.findItem(R.id.reply_all).setVisible(!defaultReplyAll);
             m.findItem(R.id.print_message).setVisible(Utils.isRunningKitkatOrLater());
 
+            final boolean isStarred = mMessage.starred;
+            boolean showStar = true;
+            final Conversation conversation = mMessage.getConversation();
+            if (conversation != null) {
+                showStar = !conversation.isInTrash();
+            }
+            m.findItem(R.id.add_star).setVisible(showStar && !isStarred);
+            m.findItem(R.id.remove_star).setVisible(showStar && isStarred);
+
             final boolean reportRendering = ENABLE_REPORT_RENDERING_PROBLEM
                 && mCallbacks.supportsMessageTransforms();
             m.findItem(R.id.report_rendering_improvement).setVisible(reportRendering);
diff --git a/src/com/android/mail/browse/SelectedConversationsActionMenu.java b/src/com/android/mail/browse/SelectedConversationsActionMenu.java
index ed47826..e2878bb 100644
--- a/src/com/android/mail/browse/SelectedConversationsActionMenu.java
+++ b/src/com/android/mail/browse/SelectedConversationsActionMenu.java
@@ -40,8 +40,8 @@
 import com.android.mail.providers.UIProvider.FolderCapabilities;
 import com.android.mail.providers.UIProvider.FolderType;
 import com.android.mail.ui.ControllableActivity;
+import com.android.mail.ui.ConversationCheckedSet;
 import com.android.mail.ui.ConversationListCallbacks;
-import com.android.mail.ui.ConversationSelectionSet;
 import com.android.mail.ui.ConversationSetObserver;
 import com.android.mail.ui.ConversationUpdater;
 import com.android.mail.ui.DestructiveAction;
@@ -68,7 +68,7 @@
     /**
      * The set of conversations to display the menu for.
      */
-    protected final ConversationSelectionSet mSelectionSet;
+    protected final ConversationCheckedSet mCheckedSet;
 
     private final ControllableActivity mActivity;
     private final ConversationListCallbacks mListController;
@@ -95,10 +95,10 @@
     private MenuItem mDiscardOutboxMenuItem;
 
     public SelectedConversationsActionMenu(
-            ControllableActivity activity, ConversationSelectionSet selectionSet, Folder folder) {
+            ControllableActivity activity, ConversationCheckedSet checkedSet, Folder folder) {
         mActivity = activity;
         mListController = activity.getListHandler();
-        mSelectionSet = selectionSet;
+        mCheckedSet = checkedSet;
         mAccountObserver = new AccountObserver() {
             @Override
             public void onChanged(Account newAccount) {
@@ -111,6 +111,10 @@
         mUpdater = activity.getConversationUpdater();
     }
 
+    public boolean onActionItemClicked(MenuItem item) {
+        return onActionItemClicked(mActionMode, item);
+    }
+
     @Override
     public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
         boolean handled = true;
@@ -135,24 +139,24 @@
             LogUtils.i(LOG_TAG, "Archive selected from CAB menu");
             performDestructiveAction(R.id.archive, undoCallback);
         } else if (itemId == R.id.remove_folder) {
-            destroy(R.id.remove_folder, mSelectionSet.values(),
-                    mUpdater.getDeferredRemoveFolder(mSelectionSet.values(), mFolder, true,
+            destroy(R.id.remove_folder, mCheckedSet.values(),
+                    mUpdater.getDeferredRemoveFolder(mCheckedSet.values(), mFolder, true,
                             true, true, undoCallback));
         } else if (itemId == R.id.mute) {
-            destroy(R.id.mute, mSelectionSet.values(), mUpdater.getBatchAction(R.id.mute,
+            destroy(R.id.mute, mCheckedSet.values(), mUpdater.getBatchAction(R.id.mute,
                     undoCallback));
         } else if (itemId == R.id.report_spam) {
-            destroy(R.id.report_spam, mSelectionSet.values(),
+            destroy(R.id.report_spam, mCheckedSet.values(),
                     mUpdater.getBatchAction(R.id.report_spam, undoCallback));
         } else if (itemId == R.id.mark_not_spam) {
             // Currently, since spam messages are only shown in list with other spam messages,
             // marking a message not as spam is a destructive action
             destroy (R.id.mark_not_spam,
-                    mSelectionSet.values(), mUpdater.getBatchAction(R.id.mark_not_spam,
+                    mCheckedSet.values(), mUpdater.getBatchAction(R.id.mark_not_spam,
                             undoCallback)) ;
         } else if (itemId == R.id.report_phishing) {
             destroy(R.id.report_phishing,
-                    mSelectionSet.values(), mUpdater.getBatchAction(R.id.report_phishing,
+                    mCheckedSet.values(), mUpdater.getBatchAction(R.id.report_phishing,
                             undoCallback));
         } else if (itemId == R.id.read) {
             markConversationsRead(true);
@@ -160,6 +164,10 @@
             markConversationsRead(false);
         } else if (itemId == R.id.star) {
             starConversations(true);
+        } else if (itemId == R.id.toggle_read_unread) {
+            if (mActionMode != null) {
+                markConversationsRead(mActionMode.getMenu().findItem(R.id.read).isVisible());
+            }
         } else if (itemId == R.id.remove_star) {
             if (mFolder.isType(UIProvider.FolderType.STARRED)) {
                 LogUtils.d(LOG_TAG, "We are in a starred folder, removing the star");
@@ -174,7 +182,7 @@
             // Special handling for virtual folders
             if (mFolder.supportsCapability(FolderCapabilities.IS_VIRTUAL)) {
                 Uri accountUri = null;
-                for (Conversation conv: mSelectionSet.values()) {
+                for (Conversation conv: mCheckedSet.values()) {
                     if (accountUri == null) {
                         accountUri = conv.accountUri;
                     } else if (!accountUri.equals(conv.accountUri)) {
@@ -192,7 +200,7 @@
             }
             if (!cantMove) {
                 final FolderSelectionDialog dialog = FolderSelectionDialog.getInstance(
-                        acct, mSelectionSet.values(), true, mFolder,
+                        acct, mCheckedSet.values(), true, mFolder,
                         item.getItemId() == R.id.move_to);
                 if (dialog != null) {
                     dialog.show(mActivity.getFragmentManager(), null);
@@ -212,7 +220,7 @@
                     final List<FolderOperation> ops = Lists.newArrayListWithCapacity(1);
                     // Add inbox
                     ops.add(new FolderOperation(moveToInbox, true));
-                    mUpdater.assignFolder(ops, mSelectionSet.values(), true,
+                    mUpdater.assignFolder(ops, mCheckedSet.values(), true,
                             true /* showUndo */, false /* isMoveTo */);
                 }
             }.execute((Void[]) null);
@@ -233,8 +241,8 @@
     /**
      * Clear the selection and perform related UI changes to keep the state consistent.
      */
-    private void clearSelection() {
-        mSelectionSet.clear();
+    private void clearChecked() {
+        mCheckedSet.clear();
     }
 
     /**
@@ -252,7 +260,7 @@
     }
 
     private void performDestructiveAction(final int action, UndoCallback undoCallback) {
-        final Collection<Conversation> conversations = mSelectionSet.values();
+        final Collection<Conversation> conversations = mCheckedSet.values();
         final Settings settings = mAccount.settings;
         final boolean showDialog;
         // no confirmation dialog by default unless user preference or common sense dictates one
@@ -304,7 +312,7 @@
      * marked unread.
      */
     private void markConversationsRead(boolean read) {
-        final Collection<Conversation> targets = mSelectionSet.values();
+        final Collection<Conversation> targets = mCheckedSet.values();
         // The conversations are marked read but not viewed.
         mUpdater.markConversationsRead(targets, read, false);
         updateSelection();
@@ -317,7 +325,7 @@
      * are to be marked not important.
      */
     private void markConversationsImportant(boolean important) {
-        final Collection<Conversation> target = mSelectionSet.values();
+        final Collection<Conversation> target = mCheckedSet.values();
         final int priority = important ? UIProvider.ConversationPriority.HIGH
                 : UIProvider.ConversationPriority.LOW;
         mUpdater.updateConversation(target, ConversationColumns.PRIORITY, priority);
@@ -334,7 +342,7 @@
      * stars from all conversations
      */
     private void starConversations(boolean star) {
-        final Collection<Conversation> target = mSelectionSet.values();
+        final Collection<Conversation> target = mCheckedSet.values();
         mUpdater.updateConversation(target, ConversationColumns.STARRED, star);
         // Update the conversations in the selection too.
         for (final Conversation c : target) {
@@ -345,24 +353,25 @@
 
     @Override
     public boolean onCreateActionMode(ActionMode mode, Menu menu) {
-        mSelectionSet.addObserver(this);
+        mCheckedSet.addObserver(this);
         final MenuInflater inflater = mActivity.getMenuInflater();
         inflater.inflate(R.menu.conversation_list_selection_actions_menu, menu);
         mActionMode = mode;
+        updateCount();
         return true;
     }
 
     @Override
     public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
         // Update the actionbar to select operations available on the current conversation.
-        final Collection<Conversation> conversations = mSelectionSet.values();
+        final Collection<Conversation> conversations = mCheckedSet.values();
         boolean showStar = false;
         boolean showMarkUnread = false;
         boolean showMarkImportant = false;
         boolean showMarkNotSpam = false;
         boolean showMarkAsPhishing = false;
 
-        // TODO(shahrk): Clean up these dirty calls using Utils.setMenuItemVisibility(...) or
+        // TODO(shahrk): Clean up these dirty calls using Utils.setMenuItemPresent(...) or
         // in another way
 
         for (Conversation conversation : conversations) {
@@ -386,14 +395,16 @@
                 break;
             }
         }
+        final boolean canStar = mFolder != null && !mFolder.isTrash();
         final MenuItem star = menu.findItem(R.id.star);
-        star.setVisible(showStar);
+        star.setVisible(showStar && canStar);
         final MenuItem unstar = menu.findItem(R.id.remove_star);
-        unstar.setVisible(!showStar);
+        unstar.setVisible(!showStar && canStar);
         final MenuItem read = menu.findItem(R.id.read);
         read.setVisible(!showMarkUnread);
         final MenuItem unread = menu.findItem(R.id.unread);
         unread.setVisible(showMarkUnread);
+
         // We only ever show one of:
         // 1) remove folder
         // 2) archive
@@ -455,7 +466,6 @@
         mDiscardOutboxMenuItem = menu.findItem(R.id.discard_outbox);
         if (mDiscardOutboxMenuItem != null) {
             mDiscardOutboxMenuItem.setVisible(shouldShowDiscardOutbox);
-            mDiscardOutboxMenuItem.setEnabled(shouldEnableDiscardOutbox(conversations));
         }
         final boolean showDelete = mFolder != null && !mFolder.isType(FolderType.OUTBOX)
                 && mFolder.supportsCapability(UIProvider.FolderCapabilities.DELETE);
@@ -474,18 +484,6 @@
         return true;
     }
 
-    private boolean shouldEnableDiscardOutbox(Collection<Conversation> conversations) {
-        boolean shouldEnableDiscardOutbox = true;
-        // Java should be smart enough to realize that once showDiscardOutbox becomes false it can
-        // just skip everything remaining in the for-loop..
-        for (Conversation conv : conversations) {
-            shouldEnableDiscardOutbox &=
-                    conv.sendingState != UIProvider.ConversationSendingState.SENDING &&
-                    conv.sendingState != UIProvider.ConversationSendingState.RETRYING;
-        }
-        return shouldEnableDiscardOutbox;
-    }
-
     @Override
     public void onDestroyActionMode(ActionMode mode) {
         mActionMode = null;
@@ -502,7 +500,7 @@
     }
 
     @Override
-    public void onSetPopulated(ConversationSelectionSet set) {
+    public void onSetPopulated(ConversationCheckedSet set) {
         // Noop. This object can only exist while the set is non-empty.
     }
 
@@ -513,16 +511,22 @@
     }
 
     @Override
-    public void onSetChanged(ConversationSelectionSet set) {
+    public void onSetChanged(ConversationCheckedSet set) {
         // If the set is empty, the menu buttons are invalid and most like the menu will be cleaned
         // up. Avoid making any changes to stop flickering ("Add Star" -> "Remove Star") just
         // before hiding the menu.
         if (set.isEmpty()) {
             return;
         }
+        updateCount();
+    }
 
-        if (mFolder.isType(FolderType.OUTBOX) && mDiscardOutboxMenuItem != null) {
-            mDiscardOutboxMenuItem.setEnabled(shouldEnableDiscardOutbox(set.values()));
+    /**
+     * Updates the visible count of how many conversations are selected.
+     */
+    private void updateCount() {
+        if (mActionMode != null) {
+            mActionMode.setTitle(String.format("%d", mCheckedSet.size()));
         }
     }
 
@@ -531,7 +535,7 @@
      * set is non-empty.
      */
     public void activate() {
-        if (mSelectionSet.isEmpty()) {
+        if (mCheckedSet.isEmpty()) {
             return;
         }
         mListController.onCabModeEntered();
@@ -547,14 +551,16 @@
      */
     public void deactivate() {
         mListController.onCabModeExited();
-
+        mActivated = false;
         if (mActionMode != null) {
-            mActivated = false;
             mActionMode.finish();
         }
     }
 
     @VisibleForTesting
+    /**
+     * Returns true if CAB mode is active.
+     */
     public boolean isActivated() {
         return mActivated;
     }
@@ -564,8 +570,8 @@
      */
     private void destroy() {
         deactivate();
-        mSelectionSet.removeObserver(this);
-        clearSelection();
+        mCheckedSet.removeObserver(this);
+        clearChecked();
         mUpdater.refreshConversationList();
         if (mAccountObserver != null) {
             mAccountObserver.unregisterAndDestroy();
diff --git a/src/com/android/mail/browse/SendersView.java b/src/com/android/mail/browse/SendersView.java
index 3f05ab5..898568c 100644
--- a/src/com/android/mail/browse/SendersView.java
+++ b/src/com/android/mail/browse/SendersView.java
@@ -24,27 +24,32 @@
 import android.content.res.Resources;
 import android.graphics.Typeface;
 import android.support.v4.text.BidiFormatter;
-import android.text.Spannable;
 import android.text.SpannableString;
 import android.text.SpannableStringBuilder;
+import android.text.Spanned;
 import android.text.TextUtils;
 import android.text.style.CharacterStyle;
 import android.text.style.TextAppearanceSpan;
 
 import com.android.mail.R;
+import com.android.mail.providers.Account;
 import com.android.mail.providers.Conversation;
 import com.android.mail.providers.ConversationInfo;
 import com.android.mail.providers.ParticipantInfo;
 import com.android.mail.providers.UIProvider;
-import com.android.mail.ui.DividedImageCanvas;
 import com.android.mail.utils.ObjectCache;
 import com.google.common.base.Objects;
+import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 
 import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 
 public class SendersView {
+    /** The maximum number of senders to display for a given conversation */
+    private static final int MAX_SENDER_COUNT = 4;
+
     private static final Integer DOES_NOT_EXIST = -5;
     // FIXME(ath): make all of these statics instance variables, and have callers hold onto this
     // instance as long as appropriate (e.g. activity lifetime).
@@ -141,8 +146,8 @@
         SpannableStringBuilder messageInfo = new SpannableStringBuilder();
 
         try {
-            ConversationInfo conversationInfo = conv.conversationInfo;
-            int sendingStatus = conv.sendingState;
+            final ConversationInfo conversationInfo = conv.conversationInfo;
+            final int sendingStatus = conv.sendingState;
             boolean hasSenders = false;
             // This covers the case where the sender is "me" and this is a draft
             // message, which means this will only run once most of the time.
@@ -153,56 +158,48 @@
                 }
             }
             getSenderResources(context, resourceCachingRequired);
-            int count = conversationInfo.messageCount;
-            int draftCount = conversationInfo.draftCount;
+            final int count = conversationInfo.messageCount;
+            final int draftCount = conversationInfo.draftCount;
             if (count > 1) {
-                messageInfo.append(count + "");
-            }
-            messageInfo.setSpan(CharacterStyle.wrap(
-                    conv.read ? sMessageInfoReadStyleSpan : sMessageInfoUnreadStyleSpan),
-                    0, messageInfo.length(), 0);
-            if (draftCount > 0) {
-                // If we are showing a message count or any draft text and there
-                // is at least 1 sender, prepend the sending state text with a
-                // comma.
-                if (hasSenders || count > 1) {
-                    messageInfo.append(sSendersSplitToken);
-                }
-                SpannableStringBuilder draftString = new SpannableStringBuilder();
-                if (draftCount == 1) {
-                    draftString.append(sDraftSingularString);
-                } else {
-                    draftString.append(sDraftPluralString).append(
-                            String.format(sDraftCountFormatString, draftCount));
-                }
-                draftString.setSpan(CharacterStyle.wrap(sDraftsStyleSpan), 0,
-                        draftString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
-                messageInfo.append(draftString);
+                appendMessageInfo(messageInfo, Integer.toString(count), CharacterStyle.wrap(
+                        conv.read ? sMessageInfoReadStyleSpan : sMessageInfoUnreadStyleSpan),
+                        false, conv.read);
             }
 
-            boolean showState = sendingStatus == UIProvider.ConversationSendingState.SENDING ||
+            boolean appendSplitToken = hasSenders || count > 1;
+            if (draftCount > 0) {
+                final CharSequence draftText;
+                if (draftCount == 1) {
+                    draftText = sDraftSingularString;
+                } else {
+                    draftText = sDraftPluralString +
+                            String.format(sDraftCountFormatString, draftCount);
+                }
+
+                appendMessageInfo(messageInfo, draftText, sDraftsStyleSpan, appendSplitToken,
+                        conv.read);
+            }
+
+            final boolean showState = sendingStatus == UIProvider.ConversationSendingState.SENDING ||
                     sendingStatus == UIProvider.ConversationSendingState.RETRYING ||
                     sendingStatus == UIProvider.ConversationSendingState.SEND_ERROR;
             if (showState) {
-                // If we are showing a message count or any draft text, prepend
-                // the sending state text with a comma.
-                if (count > 1 || draftCount > 0) {
-                    messageInfo.append(sSendersSplitToken);
-                }
+                appendSplitToken |= draftCount > 0;
 
-                SpannableStringBuilder stateSpan = new SpannableStringBuilder();
-
+                final CharSequence statusText;
+                final Object span;
                 if (sendingStatus == UIProvider.ConversationSendingState.SENDING) {
-                    stateSpan.append(sSendingString);
-                    stateSpan.setSpan(sSendingStyleSpan, 0, stateSpan.length(), 0);
+                    statusText = sSendingString;
+                    span = sSendingStyleSpan;
                 } else if (sendingStatus == UIProvider.ConversationSendingState.RETRYING) {
-                    stateSpan.append(sRetryingString);
-                    stateSpan.setSpan(sRetryingStyleSpan, 0, stateSpan.length(), 0);
-                } else if (sendingStatus == UIProvider.ConversationSendingState.SEND_ERROR) {
-                    stateSpan.append(sFailedString);
-                    stateSpan.setSpan(sFailedStyleSpan, 0, stateSpan.length(), 0);
+                    statusText = sSendingString;
+                    span = sSendingStyleSpan;
+                } else {
+                    statusText = sFailedString;
+                    span = sFailedStyleSpan;
                 }
-                messageInfo.append(stateSpan);
+
+                appendMessageInfo(messageInfo, statusText, span, appendSplitToken, conv.read);
             }
 
             // Prepend a space if we are showing other message info text.
@@ -218,14 +215,30 @@
         return messageInfo;
     }
 
+    private static void appendMessageInfo(SpannableStringBuilder sb, CharSequence text,
+            Object span, boolean appendSplitToken, boolean convRead) {
+        int startIndex = sb.length();
+        if (appendSplitToken) {
+            sb.append(sSendersSplitToken);
+            sb.setSpan(CharacterStyle.wrap(convRead ?
+                    sMessageInfoReadStyleSpan : sMessageInfoUnreadStyleSpan),
+                    startIndex, sb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+        }
+
+        startIndex = sb.length();
+        sb.append(text);
+        sb.setSpan(span, startIndex, sb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+    }
+
     public static void format(Context context, ConversationInfo conversationInfo,
             String messageInfo, int maxChars, ArrayList<SpannableString> styledSenders,
-            ArrayList<String> displayableSenderNames, ArrayList<String> displayableSenderEmails,
-            String account, final boolean showToHeader, final boolean resourceCachingRequired) {
+            ArrayList<String> displayableSenderNames,
+            ConversationItemViewModel.SenderAvatarModel senderAvatarModel,
+            Account account, final boolean showToHeader, final boolean resourceCachingRequired) {
         try {
             getSenderResources(context, resourceCachingRequired);
             format(context, conversationInfo, messageInfo, maxChars, styledSenders,
-                    displayableSenderNames, displayableSenderEmails, account,
+                    displayableSenderNames, senderAvatarModel, account,
                     sUnreadStyleSpan, sReadStyleSpan, showToHeader, resourceCachingRequired);
         } finally {
             if (!resourceCachingRequired) {
@@ -236,14 +249,15 @@
 
     public static void format(Context context, ConversationInfo conversationInfo,
             String messageInfo, int maxChars, ArrayList<SpannableString> styledSenders,
-            ArrayList<String> displayableSenderNames, ArrayList<String> displayableSenderEmails,
-            String account, final TextAppearanceSpan notificationUnreadStyleSpan,
+            ArrayList<String> displayableSenderNames,
+            ConversationItemViewModel.SenderAvatarModel senderAvatarModel,
+            Account account, final TextAppearanceSpan notificationUnreadStyleSpan,
             final CharacterStyle notificationReadStyleSpan, final boolean showToHeader,
             final boolean resourceCachingRequired) {
         try {
             getSenderResources(context, resourceCachingRequired);
             handlePriority(maxChars, messageInfo, conversationInfo, styledSenders,
-                    displayableSenderNames, displayableSenderEmails, account,
+                    displayableSenderNames, senderAvatarModel, account,
                     notificationUnreadStyleSpan, notificationReadStyleSpan, showToHeader);
         } finally {
             if (!resourceCachingRequired) {
@@ -254,10 +268,12 @@
 
     private static void handlePriority(int maxChars, String messageInfoString,
             ConversationInfo conversationInfo, ArrayList<SpannableString> styledSenders,
-            ArrayList<String> displayableSenderNames, ArrayList<String> displayableSenderEmails,
-            String account, final TextAppearanceSpan unreadStyleSpan,
+            ArrayList<String> displayableSenderNames,
+            ConversationItemViewModel.SenderAvatarModel senderAvatarModel,
+            Account account, final TextAppearanceSpan unreadStyleSpan,
             final CharacterStyle readStyleSpan, final boolean showToHeader) {
-        boolean shouldAddPhotos = displayableSenderEmails != null;
+        final boolean shouldSelectSenders = displayableSenderNames != null;
+        final boolean shouldSelectAvatar = senderAvatarModel != null;
         int maxPriorityToInclude = -1; // inclusive
         int numCharsUsed = messageInfoString.length(); // draft, number drafts,
                                                        // count
@@ -297,18 +313,15 @@
         } finally {
             PRIORITY_LENGTH_MAP_CACHE.release(priorityToLength);
         }
-        // We want to include this entry if
-        // 1) The onlyShowUnread flags is not set
-        // 2) The above flag is set, and the message is unread
-        ParticipantInfo currentParticipant;
+
         SpannableString spannableDisplay;
-        CharacterStyle style;
         boolean appendedElided = false;
-        Map<String, Integer> displayHash = Maps.newHashMap();
-        String firstDisplayableSenderEmail = null;
-        String firstDisplayableSender = null;
+        final Map<String, Integer> displayHash = Maps.newHashMap();
+        final List<String> senderEmails = Lists.newArrayListWithExpectedSize(MAX_SENDER_COUNT);
+        String firstSenderEmail = null;
+        String firstSenderName = null;
         for (int i = 0; i < conversationInfo.participantInfos.size(); i++) {
-            currentParticipant = conversationInfo.participantInfos.get(i);
+            final ParticipantInfo currentParticipant = conversationInfo.participantInfos.get(i);
             final String currentEmail = currentParticipant.email;
 
             final String currentName = currentParticipant.name;
@@ -323,8 +336,8 @@
             }
 
             final int priority = currentParticipant.priority;
-            style = CharacterStyle.wrap(currentParticipant.readConversation ? readStyleSpan :
-                    unreadStyleSpan);
+            final CharacterStyle style = CharacterStyle.wrap(currentParticipant.readConversation ?
+                    readStyleSpan : unreadStyleSpan);
             if (priority <= maxPriorityToInclude) {
                 spannableDisplay = new SpannableString(sBidiFormatter.unicodeWrap(nameString));
                 // Don't duplicate senders; leave the first instance, unless the
@@ -340,8 +353,8 @@
                             && oldPos < styledSenders.size()) {
                         // Remove the old one!
                         styledSenders.set(oldPos, null);
-                        if (shouldAddPhotos && !TextUtils.isEmpty(currentEmail)) {
-                            displayableSenderEmails.remove(currentEmail);
+                        if (shouldSelectSenders && !TextUtils.isEmpty(currentEmail)) {
+                            senderEmails.remove(currentEmail);
                             displayableSenderNames.remove(currentName);
                         }
                     }
@@ -357,38 +370,67 @@
                     styledSenders.add(spannableDisplay);
                 }
             }
-            if (shouldAddPhotos) {
-                String senderEmail = TextUtils.isEmpty(currentName) ?
-                        account :
-                            TextUtils.isEmpty(currentEmail) ? currentName : currentEmail;
+
+            final String senderEmail = TextUtils.isEmpty(currentName) ? account.getEmailAddress() :
+                    TextUtils.isEmpty(currentEmail) ? currentName : currentEmail;
+
+            if (shouldSelectSenders) {
                 if (i == 0) {
                     // Always add the first sender!
-                    firstDisplayableSenderEmail = senderEmail;
-                    firstDisplayableSender = currentName;
+                    firstSenderEmail = senderEmail;
+                    firstSenderName = currentName;
                 } else {
-                    if (!Objects.equal(firstDisplayableSenderEmail, senderEmail)) {
-                        int indexOf = displayableSenderEmails.indexOf(senderEmail);
+                    if (!Objects.equal(firstSenderEmail, senderEmail)) {
+                        int indexOf = senderEmails.indexOf(senderEmail);
                         if (indexOf > -1) {
-                            displayableSenderEmails.remove(indexOf);
+                            senderEmails.remove(indexOf);
                             displayableSenderNames.remove(indexOf);
                         }
-                        displayableSenderEmails.add(senderEmail);
+                        senderEmails.add(senderEmail);
                         displayableSenderNames.add(currentName);
-                        if (displayableSenderEmails.size() > DividedImageCanvas.MAX_DIVISIONS) {
-                            displayableSenderEmails.remove(0);
+                        if (senderEmails.size() > MAX_SENDER_COUNT) {
+                            senderEmails.remove(0);
                             displayableSenderNames.remove(0);
                         }
                     }
                 }
             }
+
+            // if the corresponding message from this participant is unread and no sender avatar
+            // is yet chosen, choose this one
+            if (shouldSelectAvatar && senderAvatarModel.isNotPopulated() &&
+                    !currentParticipant.readConversation) {
+                senderAvatarModel.populate(currentName, senderEmail);
+            }
         }
-        if (shouldAddPhotos && !TextUtils.isEmpty(firstDisplayableSenderEmail)) {
-            if (displayableSenderEmails.size() < DividedImageCanvas.MAX_DIVISIONS) {
-                displayableSenderEmails.add(0, firstDisplayableSenderEmail);
-                displayableSenderNames.add(0, firstDisplayableSender);
+
+        // always add the first sender to the display
+        if (shouldSelectSenders && !TextUtils.isEmpty(firstSenderEmail)) {
+            if (displayableSenderNames.size() < MAX_SENDER_COUNT) {
+                displayableSenderNames.add(0, firstSenderName);
             } else {
-                displayableSenderEmails.set(0, firstDisplayableSenderEmail);
-                displayableSenderNames.set(0, firstDisplayableSender);
+                displayableSenderNames.set(0, firstSenderName);
+            }
+        }
+
+        // if all messages in the thread were read, we must search for an appropriate avatar
+        if (shouldSelectAvatar && senderAvatarModel.isNotPopulated()) {
+            // search for the last sender that is not the current account
+            for (int i = conversationInfo.participantInfos.size() - 1; i >= 0; i--) {
+                final ParticipantInfo participant = conversationInfo.participantInfos.get(i);
+                // empty name implies it is the current account and should not be chosen
+                if (!TextUtils.isEmpty(participant.name)) {
+                    // use the participant name in place of unusable email addresses
+                    final String senderEmail = TextUtils.isEmpty(participant.email) ?
+                            participant.name : participant.email;
+                    senderAvatarModel.populate(participant.name, senderEmail);
+                    break;
+                }
+            }
+
+            // if we still don't have an avatar, the account is emailing itself
+            if (senderAvatarModel.isNotPopulated()) {
+                senderAvatarModel.populate(account.getDisplayName(), account.getEmailAddress());
             }
         }
     }
diff --git a/src/com/android/mail/browse/StarView.java b/src/com/android/mail/browse/StarView.java
index c14ca4f..37df733 100644
--- a/src/com/android/mail/browse/StarView.java
+++ b/src/com/android/mail/browse/StarView.java
@@ -34,6 +34,8 @@
      */
     public void setStarred(boolean isStarred) {
         mIsStarred = isStarred;
+        setContentDescription(
+                getResources().getString(mIsStarred ? R.string.remove_star : R.string.add_star));
         refreshDrawableState();
     }
 
diff --git a/src/com/android/mail/browse/SubjectAndFolderView.java b/src/com/android/mail/browse/SubjectAndFolderView.java
index 67ccf6e..8baf2ce 100644
--- a/src/com/android/mail/browse/SubjectAndFolderView.java
+++ b/src/com/android/mail/browse/SubjectAndFolderView.java
@@ -19,16 +19,15 @@
 
 import android.content.Context;
 import android.content.res.Resources;
+import android.graphics.Canvas;
+import android.graphics.Paint;
 import android.graphics.drawable.Drawable;
 import android.support.v4.text.BidiFormatter;
 import android.text.Layout;
-import android.text.Spannable;
 import android.text.SpannableStringBuilder;
 import android.text.Spanned;
 import android.text.method.LinkMovementMethod;
-import android.text.style.BackgroundColorSpan;
-import android.text.style.DynamicDrawableSpan;
-import android.text.style.ForegroundColorSpan;
+import android.text.style.ReplacementSpan;
 import android.util.AttributeSet;
 import android.widget.TextView;
 
@@ -39,24 +38,21 @@
 import com.android.mail.providers.Folder;
 import com.android.mail.providers.Settings;
 import com.android.mail.text.ChangeLabelsSpan;
+import com.android.mail.text.FolderSpan;
 import com.android.mail.ui.FolderDisplayer;
-import com.android.mail.utils.ViewUtils;
 
 /**
  * A TextView that displays the conversation subject and list of folders for the message.
- * The view knows the widest that any of its containing {@link FolderSpan}s can be.
- * They cannot exceed the TextView line width, or else {@link Layout}
- * will split up the spans in strange places.
+ * The view knows the widest that any of its containing {@link com.android.mail.text.FolderSpan}s
+ * can be. They cannot exceed the TextView line width, or else {@link Layout} will split up the
+ * spans in strange places.
  */
-public class SubjectAndFolderView extends TextView
-        implements FolderSpan.FolderSpanDimensions {
-
-    private final int mFolderPadding;
-    private final int mFolderPaddingExtraWidth;
-    private final int mFolderPaddingAfter;
-    private final int mRoundedCornerRadius;
-    private final float mFolderSpanTextSize;
-    private final int mFolderMarginTop;
+public class SubjectAndFolderView extends TextView implements FolderSpan.FolderSpanDimensions {
+    private final String mNoFolderChipName;
+    private final int mNoFolderBgColor;
+    private final int mNoFolderFgColor;
+    private final Drawable mImportanceMarkerDrawable;
+    private final int mChipVerticalOffset;
 
     private int mMaxSpanWidth;
 
@@ -77,19 +73,18 @@
     public SubjectAndFolderView(Context context, AttributeSet attrs) {
         super(context, attrs);
 
-        mVisibleFolders = false;
-        mFolderDisplayer = new ConversationFolderDisplayer(getContext(), this);
+        final Resources res = getResources();
+        mNoFolderChipName = res.getString(R.string.add_label);
+        mNoFolderBgColor = res.getColor(R.color.conv_header_add_label_background);
+        mNoFolderFgColor = res.getColor(R.color.conv_header_add_label_text);
+        mImportanceMarkerDrawable = res.getDrawable(
+                R.drawable.ic_email_caret_none_important_unread);
+        mImportanceMarkerDrawable.setBounds(0, 0, mImportanceMarkerDrawable.getIntrinsicWidth(),
+                mImportanceMarkerDrawable.getIntrinsicHeight());
+        mChipVerticalOffset = res.getDimensionPixelOffset(R.dimen.folder_cv_vertical_offset);
 
-        final Resources r = getResources();
-        mFolderPadding = r.getDimensionPixelOffset(R.dimen.conversation_folder_padding);
-        mFolderPaddingExtraWidth = r.getDimensionPixelOffset(
-                R.dimen.conversation_folder_padding_extra_width);
-        mFolderPaddingAfter = r.getDimensionPixelOffset(
-                R.dimen.conversation_folder_padding_after);
-        mRoundedCornerRadius = r.getDimensionPixelOffset(
-                R.dimen.folder_rounded_corner_radius);
-        mFolderSpanTextSize = r.getDimension(R.dimen.conversation_folder_font_size);
-        mFolderMarginTop = r.getDimensionPixelOffset(R.dimen.conversation_folder_margin_top);
+        mVisibleFolders = false;
+        mFolderDisplayer = new ConversationFolderDisplayer(getContext());
     }
 
     @Override
@@ -100,46 +95,6 @@
         super.onMeasure(widthMeasureSpec, heightMeasureSpec);
     }
 
-    @Override
-    public int getPadding() {
-        return mFolderPadding;
-    }
-
-    @Override
-    public int getPaddingExtraWidth() {
-        return mFolderPaddingExtraWidth;
-    }
-
-    @Override
-    public int getPaddingAfter() {
-        return mFolderPaddingAfter;
-    }
-
-    @Override
-    public int getMaxWidth() {
-        return mMaxSpanWidth;
-    }
-
-    @Override
-    public float getRoundedCornerRadius() {
-        return mRoundedCornerRadius;
-    }
-
-    @Override
-    public float getFolderSpanTextSize() {
-        return mFolderSpanTextSize;
-    }
-
-    @Override
-    public int getMarginTop() {
-        return mFolderMarginTop;
-    }
-
-    @Override
-    public boolean isRtl() {
-        return ViewUtils.isViewRtl(this);
-    }
-
     public void setSubject(String subject) {
         mSubject = Conversation.getSubjectForDisplay(getContext(), null /* badgeText */, subject);
 
@@ -148,32 +103,40 @@
         }
     }
 
-    public void setFolders(
-            ConversationViewHeaderCallbacks callbacks, Account account, Conversation conv) {
+    public void setFolders(ConversationViewHeaderCallbacks callbacks, Account account,
+            Conversation conv) {
         mVisibleFolders = true;
         final BidiFormatter bidiFormatter = getBidiFormatter();
-        final SpannableStringBuilder sb =
-                new SpannableStringBuilder(bidiFormatter.unicodeWrap(mSubject));
+        final String wrappedSubject = mSubject == null ? "" : bidiFormatter.unicodeWrap(mSubject);
+        final SpannableStringBuilder sb = new SpannableStringBuilder(wrappedSubject);
         sb.append('\u0020');
         final Settings settings = account.settings;
         final int start = sb.length();
         if (settings.importanceMarkersEnabled && conv.isImportant()) {
             sb.append(".\u0020");
-            sb.setSpan(new DynamicDrawableSpan(DynamicDrawableSpan.ALIGN_BASELINE) {
-                           @Override
-                           public Drawable getDrawable() {
-                               Drawable d = getContext().getResources().getDrawable(
-                                       R.drawable.ic_email_caret_none_important_unread);
-                               d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
-                               return d;
-                           }
-                       },
-                    start, start + 1, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
+            sb.setSpan(new ReplacementSpan() {
+                @Override
+                public int getSize(Paint paint, CharSequence text, int start, int end,
+                        Paint.FontMetricsInt fm) {
+                    return mImportanceMarkerDrawable.getIntrinsicWidth();
+                }
+
+                @Override
+                public void draw(Canvas canvas, CharSequence text, int start, int end, float x,
+                        int top, int baseline, int bottom, Paint paint) {
+                    canvas.save();
+                    final int transY = baseline + mChipVerticalOffset -
+                            mImportanceMarkerDrawable.getIntrinsicHeight();
+                    canvas.translate(x, transY);
+                    mImportanceMarkerDrawable.draw(canvas);
+                    canvas.restore();
+                }
+            }, start, start + 1, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
         }
 
         mFolderDisplayer.loadConversationFolders(conv, null /* ignoreFolder */,
                 -1 /* ignoreFolderType */);
-        mFolderDisplayer.appendFolderSpans(sb, bidiFormatter);
+        mFolderDisplayer.constructFolderChips(sb);
 
         final int end = sb.length();
         sb.setSpan(new ChangeLabelsSpan(callbacks), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
@@ -199,43 +162,51 @@
         return mBidiFormatter;
     }
 
-    private static class ConversationFolderDisplayer extends FolderDisplayer {
+    public String getSubject() {
+        return mSubject;
+    }
 
-        private final FolderSpan.FolderSpanDimensions mDims;
+    @Override
+    public int getMaxChipWidth() {
+        return mMaxSpanWidth;
+    }
 
-        public ConversationFolderDisplayer(Context context, FolderSpan.FolderSpanDimensions dims) {
+    private class ConversationFolderDisplayer extends FolderDisplayer {
+
+        public ConversationFolderDisplayer(Context context) {
             super(context);
-            mDims = dims;
         }
 
-        public void appendFolderSpans(SpannableStringBuilder sb, BidiFormatter bidiFormatter) {
+        @Override
+        protected void initializeDrawableResources() {
+            super.initializeDrawableResources();
+            final Resources res = mContext.getResources();
+            mFolderDrawableResources.overflowGradientPadding = 0;   // not applicable
+            mFolderDrawableResources.folderHorizontalPadding =
+                    res.getDimensionPixelOffset(R.dimen.folder_cv_cell_content_padding);
+            mFolderDrawableResources.folderFontSize =
+                    res.getDimensionPixelOffset(R.dimen.folder_cv_font_size);
+            mFolderDrawableResources.folderVerticalOffset = mChipVerticalOffset;
+        }
+
+        private void constructFolderChips(SpannableStringBuilder sb) {
             for (final Folder f : mFoldersSortedSet) {
-                final int bgColor = f.getBackgroundColor(mDefaultBgColor);
-                final int fgColor = f.getForegroundColor(mDefaultFgColor);
-                addSpan(sb, f.name, bgColor, fgColor, bidiFormatter);
+                addSpan(sb, f.name, f.getForegroundColor(mFolderDrawableResources.defaultFgColor),
+                        f.getBackgroundColor(mFolderDrawableResources.defaultBgColor));
             }
 
             if (mFoldersSortedSet.isEmpty()) {
-                final Resources r = mContext.getResources();
-                final String name = r.getString(R.string.add_label);
-                final int bgColor = r.getColor(R.color.conv_header_add_label_background);
-                final int fgColor = r.getColor(R.color.conv_header_add_label_text);
-                addSpan(sb, name, bgColor, fgColor, bidiFormatter);
+                addSpan(sb, mNoFolderChipName, mNoFolderFgColor, mNoFolderBgColor);
             }
         }
 
-        private void addSpan(SpannableStringBuilder sb, String name,
-                int bgColor, int fgColor, BidiFormatter bidiFormatter) {
+        private void addSpan(SpannableStringBuilder sb, String name, int fgColor, int bgColor) {
+            final FolderSpan span = new FolderSpan(name, fgColor, bgColor, mFolderDrawableResources,
+                    getBidiFormatter(), SubjectAndFolderView.this);
             final int start = sb.length();
-            sb.append(bidiFormatter.unicodeWrap(name));
-            final int end = sb.length();
-
-            sb.setSpan(new BackgroundColorSpan(bgColor), start, end,
-                    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
-            sb.setSpan(new ForegroundColorSpan(fgColor), start, end,
-                    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
-            sb.setSpan(new FolderSpan(sb, mDims), start, end,
-                    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+            sb.append(name);
+            sb.setSpan(span, start, start + name.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+            sb.append(" ");
         }
     }
 }
diff --git a/src/com/android/mail/browse/SuperCollapsedBlock.java b/src/com/android/mail/browse/SuperCollapsedBlock.java
index 94f91c5..126c6dc 100644
--- a/src/com/android/mail/browse/SuperCollapsedBlock.java
+++ b/src/com/android/mail/browse/SuperCollapsedBlock.java
@@ -26,6 +26,7 @@
 
 import com.android.mail.R;
 import com.android.mail.browse.ConversationViewAdapter.SuperCollapsedBlockItem;
+import com.android.mail.utils.ViewUtils;
 
 import java.text.NumberFormat;
 
@@ -47,6 +48,9 @@
     private SuperCollapsedBlockItem mSuperCollapsedItem;
     private OnClickListener mClick;
     private TextView mSuperCollapsedText;
+    private View mSuperCollapsedProgress;
+
+    private int mCount;
 
     public SuperCollapsedBlock(Context context) {
         this(context, null);
@@ -66,28 +70,35 @@
     protected void onFinishInflate() {
         super.onFinishInflate();
         mSuperCollapsedText = (TextView) findViewById(R.id.super_collapsed_text);
+        mSuperCollapsedProgress = findViewById(R.id.super_collapsed_progress);
     }
 
     public void bind(SuperCollapsedBlockItem item) {
         mSuperCollapsedItem = item;
+        mSuperCollapsedText.setVisibility(VISIBLE);
+        mSuperCollapsedProgress.setVisibility(GONE);
         setCount(item.getEnd() - item.getStart() + 1);
     }
 
     public void setCount(int count) {
-        final String strCount = NumberFormat.getIntegerInstance().format(count);
+        mCount = count;
+        final String strCount = NumberFormat.getIntegerInstance().format(mCount);
         mSuperCollapsedText.setText(strCount);
         final Resources res = getResources();
         final int colorId = mSuperCollapsedItem.hasDraft() ?
                 R.color.text_color_draft_red : R.color.conversation_view_text_color_light;
         mSuperCollapsedText.setTextColor(res.getColor(colorId));
         setContentDescription(
-                res.getQuantityString(R.plurals.show_messages_read, count, count));
+                res.getQuantityString(R.plurals.show_messages_read, mCount, mCount));
     }
 
     @Override
     public void onClick(final View v) {
-        ((TextView) findViewById(R.id.super_collapsed_text)).setText(
-                R.string.loading_conversation);
+        mSuperCollapsedText.setVisibility(GONE);
+        mSuperCollapsedProgress.setVisibility(VISIBLE);
+        final String announcement = getResources().getQuantityString(
+                R.plurals.super_collapsed_block_accessibility_announcement, mCount, mCount);
+        ViewUtils.announceForAccessibility(this, announcement);
 
         if (mClick != null) {
             getHandler().post(new Runnable() {
diff --git a/src/com/android/mail/browse/SwipeableConversationItemView.java b/src/com/android/mail/browse/SwipeableConversationItemView.java
index 78044e6..10657f4 100644
--- a/src/com/android/mail/browse/SwipeableConversationItemView.java
+++ b/src/com/android/mail/browse/SwipeableConversationItemView.java
@@ -23,18 +23,18 @@
 import android.widget.FrameLayout;
 import android.widget.ListView;
 
+import com.android.mail.providers.Account;
 import com.android.mail.providers.Conversation;
 import com.android.mail.providers.Folder;
-import com.android.mail.providers.UIProvider;
 import com.android.mail.ui.AnimatedAdapter;
 import com.android.mail.ui.ControllableActivity;
-import com.android.mail.ui.ConversationSelectionSet;
+import com.android.mail.ui.ConversationCheckedSet;
 
 public class SwipeableConversationItemView extends FrameLayout implements ToggleableItem {
 
     private final ConversationItemView mConversationItemView;
 
-    public SwipeableConversationItemView(Context context, String account) {
+    public SwipeableConversationItemView(Context context, Account account) {
         super(context);
         mConversationItemView = new ConversationItemView(context, account);
         addView(mConversationItemView);
@@ -53,18 +53,10 @@
     }
 
     public void bind(final Conversation conversation, final ControllableActivity activity,
-            final ConversationSelectionSet set, final Folder folder,
+            final ConversationCheckedSet set, final Folder folder,
             final int checkboxOrSenderImage, boolean swipeEnabled,
             final boolean importanceMarkersEnabled, final boolean showChevronsEnabled,
             final AnimatedAdapter animatedAdapter) {
-        // Only enable delete for failed items in the Outbox.
-        // Necessary to do it here because Outbox is the only place where we selectively enable
-        // swipe on a item-by-item basis.
-        if (folder.isType(UIProvider.FolderType.OUTBOX)) {
-            swipeEnabled &=
-                    conversation.sendingState != UIProvider.ConversationSendingState.SENDING &&
-                    conversation.sendingState != UIProvider.ConversationSendingState.RETRYING;
-        }
         mConversationItemView.bind(conversation, activity, set, folder, checkboxOrSenderImage,
                 swipeEnabled, importanceMarkersEnabled, showChevronsEnabled, animatedAdapter);
     }
@@ -84,12 +76,12 @@
     }
 
     @Override
-    public boolean toggleSelectedStateOrBeginDrag() {
-        return mConversationItemView.toggleSelectedStateOrBeginDrag();
+    public boolean toggleCheckedState(String sourceForAnalytics) {
+        return mConversationItemView.toggleCheckedState(sourceForAnalytics);
     }
 
     @Override
-    public boolean toggleSelectedState() {
-        return mConversationItemView.toggleSelectedState();
+    public boolean toggleCheckedState() {
+        return mConversationItemView.toggleCheckedState();
     }
 }
diff --git a/src/com/android/mail/browse/ToggleableItem.java b/src/com/android/mail/browse/ToggleableItem.java
index b2cfa94..4498ab7 100644
--- a/src/com/android/mail/browse/ToggleableItem.java
+++ b/src/com/android/mail/browse/ToggleableItem.java
@@ -18,6 +18,6 @@
 package com.android.mail.browse;
 
 public interface ToggleableItem {
-    boolean toggleSelectedStateOrBeginDrag();
-    boolean toggleSelectedState();
+    boolean toggleCheckedState(String sourceForAnalytics);
+    boolean toggleCheckedState();
 }
diff --git a/src/com/android/mail/compose/AttachmentComposeView.java b/src/com/android/mail/compose/AttachmentComposeView.java
index 2c4198c..89216e1 100644
--- a/src/com/android/mail/compose/AttachmentComposeView.java
+++ b/src/com/android/mail/compose/AttachmentComposeView.java
@@ -60,8 +60,10 @@
 
     @Override
     public void addDeleteListener(OnClickListener clickListener) {
-        ImageButton deleteButton = (ImageButton) findViewById(R.id.remove_attachment);
+        final ImageButton deleteButton = (ImageButton) findViewById(R.id.remove_attachment);
         deleteButton.setOnClickListener(clickListener);
+        deleteButton.setContentDescription(getResources().getString(R.string.remove_attachment_desc,
+                mAttachment.getName()));
     }
 
     private void populateAttachmentData(Context context) {
diff --git a/src/com/android/mail/compose/ComposeActivity.java b/src/com/android/mail/compose/ComposeActivity.java
index af53fb9..b7bab75 100644
--- a/src/com/android/mail/compose/ComposeActivity.java
+++ b/src/com/android/mail/compose/ComposeActivity.java
@@ -27,6 +27,7 @@
 import android.app.FragmentTransaction;
 import android.app.LoaderManager;
 import android.content.ClipData;
+import android.content.ClipDescription;
 import android.content.ContentResolver;
 import android.content.ContentValues;
 import android.content.Context;
@@ -42,6 +43,7 @@
 import android.os.AsyncTask;
 import android.os.Build;
 import android.os.Bundle;
+import android.os.Environment;
 import android.os.Handler;
 import android.os.HandlerThread;
 import android.os.ParcelFileDescriptor;
@@ -49,6 +51,7 @@
 import android.support.v4.app.RemoteInput;
 import android.support.v7.app.ActionBar;
 import android.support.v7.app.ActionBarActivity;
+import android.support.v7.view.ActionMode;
 import android.text.Editable;
 import android.text.Html;
 import android.text.SpanWatcher;
@@ -111,11 +114,13 @@
 import com.android.mail.utils.LogUtils;
 import com.android.mail.utils.NotificationActionUtils;
 import com.android.mail.utils.Utils;
+import com.android.mail.utils.ViewUtils;
 import com.google.android.mail.common.html.parser.HtmlTree;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 
+import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
@@ -127,8 +132,10 @@
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map.Entry;
+import java.util.Random;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicInteger;
 
 public class ComposeActivity extends ActionBarActivity
         implements OnClickListener, ActionBar.OnNavigationListener,
@@ -165,6 +172,9 @@
     private static final String EXTRA_SUBJECT = "subject";
 
     private static final String EXTRA_BODY = "body";
+    private static final String EXTRA_TEXT_CHANGED ="extraTextChanged";
+
+    private static final String EXTRA_SKIP_PARSING_BODY = "extraSkipParsingBody";
 
     /**
      * Expected to be html formatted text.
@@ -211,8 +221,10 @@
     // the previously instantiated map.  If ComposeActivity.onCreate() is called, with a bundle
     // (restoring data from a previous instance), and the map hasn't been created, we will attempt
     // to populate the map with data stored in shared preferences.
-    // FIXME: values in this map are never read.
-    private static ConcurrentHashMap<Integer, Long> sRequestMessageIdMap = null;
+    private static final ConcurrentHashMap<Integer, Long> sRequestMessageIdMap =
+            new ConcurrentHashMap<Integer, Long>(10);
+    private static final Random sRandom = new Random(System.currentTimeMillis());
+
     /**
      * Notifies the {@code Activity} that the caller is an Email
      * {@code Activity}, so that the back behavior may be modified accordingly.
@@ -258,17 +270,27 @@
 
     private static final String KEY_INNER_SAVED_STATE = "compose_state";
 
-    /**
-     * A single thread for running tasks in the background.
-     */
-    private final static Handler SEND_SAVE_TASK_HANDLER;
+    // A single thread for running tasks in the background.
+    private static final Handler SEND_SAVE_TASK_HANDLER;
+    @VisibleForTesting
+    public static final AtomicInteger PENDING_SEND_OR_SAVE_TASKS_NUM = new AtomicInteger(0);
+
+    // String representing the uri of the data directory (used for attachment uri checking).
+    private static final String DATA_DIRECTORY_ROOT;
+    private static final String ALTERNATE_DATA_DIRECTORY_ROOT;
+
+    // Static initializations
     static {
         HandlerThread handlerThread = new HandlerThread("Send Message Task Thread");
         handlerThread.start();
-
         SEND_SAVE_TASK_HANDLER = new Handler(handlerThread.getLooper());
+
+        DATA_DIRECTORY_ROOT = Environment.getDataDirectory().toString();
+        ALTERNATE_DATA_DIRECTORY_ROOT = DATA_DIRECTORY_ROOT + DATA_DIRECTORY_ROOT;
     }
 
+    private final Rect mRect = new Rect();
+
     private ScrollView mScrollView;
     private RecipientEditTextView mTo;
     private RecipientEditTextView mCc;
@@ -316,18 +338,26 @@
     protected Bundle mInnerSavedState;
     private ContentValues mExtraValues = null;
 
-    // Array of the outstanding send or save tasks.  Access is synchronized
-    // with the object itself
-    /* package for testing */
-    @VisibleForTesting
-    public final ArrayList<SendOrSaveTask> mActiveTasks = Lists.newArrayList();
-    // FIXME: this variable is never read. related to sRequestMessageIdMap.
+    // This is used to track pending requests, refer to sRequestMessageIdMap
     private int mRequestId;
     private String mSignature;
     private Account[] mAccounts;
     private boolean mRespondedInline;
     private boolean mPerformedSendOrDiscard = false;
 
+    // OnKeyListener solely used for intercepting CTRL+ENTER event for SEND.
+    private final View.OnKeyListener mKeyListenerForSendShortcut = new View.OnKeyListener() {
+        @Override
+        public boolean onKey(View v, int keyCode, KeyEvent event) {
+            if (event.hasModifiers(KeyEvent.META_CTRL_ON) &&
+                    keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP) {
+                doSend();
+                return true;
+            }
+            return false;
+        }
+    };
+
     private final HtmlTree.ConverterFactory mSpanConverterFactory =
             new HtmlTree.ConverterFactory() {
             @Override
@@ -482,6 +512,9 @@
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        // Change the title for accessibility so we announce "Compose" instead
+        // of the app_name while still showing the app_name in recents.
+        setTitle(R.string.compose_title);
         setContentView(R.layout.compose);
         final ActionBar actionBar = getSupportActionBar();
         if (actionBar != null) {
@@ -516,6 +549,16 @@
             quotedText = savedState.getCharSequence(EXTRA_QUOTED_TEXT);
 
             mExtraValues = savedState.getParcelable(EXTRA_VALUES);
+
+            // Get the draft id from the request id if there is one.
+            if (savedState.containsKey(EXTRA_REQUEST_ID)) {
+                final int requestId = savedState.getInt(EXTRA_REQUEST_ID);
+                if (sRequestMessageIdMap.containsKey(requestId)) {
+                    synchronized (mDraftLock) {
+                        mDraftId = sRequestMessageIdMap.get(requestId);
+                    }
+                }
+            }
         } else {
             account = obtainAccount(intent);
             action = intent.getIntExtra(EXTRA_ACTION, COMPOSE);
@@ -834,6 +877,9 @@
         if (mRespondedInline) {
             mQuotedTextView.setVisibility(View.GONE);
         }
+
+        mTextChanged = (savedInstanceState != null) ?
+                savedInstanceState.getBoolean(EXTRA_TEXT_CHANGED) : false;
     }
 
     private static boolean hadSavedInstanceStateMessage(final Bundle savedInstanceState) {
@@ -1054,6 +1100,11 @@
                 EXTRA_ATTACHMENT_PREVIEWS, mAttachmentsView.getAttachmentPreviews());
 
         state.putParcelable(EXTRA_VALUES, mExtraValues);
+
+        state.putBoolean(EXTRA_TEXT_CHANGED, mTextChanged);
+        // On configuration changes, we don't actually need to parse the body html ourselves because
+        // the framework can correctly restore the body EditText to its exact original state.
+        state.putBoolean(EXTRA_SKIP_PARSING_BODY, isChangingConfigurations());
     }
 
     private int getMode() {
@@ -1085,7 +1136,16 @@
         message.setReplyTo(null);
         message.dateReceivedMs = 0;
         message.bodyHtml = spannedBodyToHtml(body, true);
-        message.bodyText = mBodyView.getText().toString();
+        message.bodyText = body.toString();
+        // Fallback to use the text version if html conversion fails for whatever the reason.
+        final String htmlInPlainText = Utils.convertHtmlToPlainText(message.bodyHtml);
+        if (message.bodyText != null && message.bodyText.trim().length() > 0 &&
+                TextUtils.isEmpty(htmlInPlainText)) {
+            LogUtils.w(LOG_TAG, "FAILED HTML CONVERSION: from %d to %d", message.bodyText.length(),
+                    htmlInPlainText.length());
+            Analytics.getInstance().sendEvent("errors", "failed_html_conversion", null, 0);
+            message.bodyHtml = "<p>" + message.bodyText + "</p>";
+        }
         message.embedsExternalResources = false;
         message.refMessageUri = mRefMessage != null ? mRefMessage.uri : null;
         message.appendRefMessageContent = mQuotedTextView.getQuotedTextIfIncluded() != null;
@@ -1162,7 +1222,7 @@
         }
         if (mReplyFromAccount == null) {
             if (mDraft != null) {
-                mReplyFromAccount = getReplyFromAccountFromDraft(mAccount, mDraft);
+                mReplyFromAccount = getReplyFromAccountFromDraft(mDraft);
             } else if (mRefMessage != null) {
                 mReplyFromAccount = getReplyFromAccountForReply(mAccount, mRefMessage);
             }
@@ -1269,20 +1329,15 @@
                 account.getSenderName(), account.getEmailAddress(), true, false);
     }
 
-    private ReplyFromAccount getReplyFromAccountFromDraft(final Account account,
-            final Message msg) {
+    private ReplyFromAccount getReplyFromAccountFromDraft(final Message msg) {
         final Address[] draftFroms = Address.parse(msg.getFrom());
         final String sender = draftFroms.length > 0 ? draftFroms[0].getAddress() : "";
         ReplyFromAccount replyFromAccount = null;
-        List<ReplyFromAccount> replyFromAccounts = mFromSpinner.getReplyFromAccounts();
-        if (TextUtils.equals(account.getEmailAddress(), sender)) {
-            replyFromAccount = getDefaultReplyFromAccount(account);
-        } else {
-            for (ReplyFromAccount fromAccount : replyFromAccounts) {
-                if (TextUtils.equals(fromAccount.address, sender)) {
-                    replyFromAccount = fromAccount;
-                    break;
-                }
+        // Do not try to check against the "default" account because the default might be an alias.
+        for (ReplyFromAccount fromAccount : mFromSpinner.getReplyFromAccounts()) {
+            if (TextUtils.equals(fromAccount.address, sender)) {
+                replyFromAccount = fromAccount;
+                break;
             }
         }
         return replyFromAccount;
@@ -1298,25 +1353,39 @@
         mCcBccView = (CcBccView) findViewById(R.id.cc_bcc_wrapper);
         mAttachmentsView = (AttachmentsView)findViewById(R.id.attachments);
         mTo = (RecipientEditTextView) findViewById(R.id.to);
+        mTo.setOnKeyListener(mKeyListenerForSendShortcut);
         initializeRecipientEditTextView(mTo);
         mTo.setAlternatePopupAnchor(findViewById(R.id.compose_to_dropdown_anchor));
         mCc = (RecipientEditTextView) findViewById(R.id.cc);
+        mCc.setOnKeyListener(mKeyListenerForSendShortcut);
         initializeRecipientEditTextView(mCc);
         mBcc = (RecipientEditTextView) findViewById(R.id.bcc);
+        mBcc.setOnKeyListener(mKeyListenerForSendShortcut);
         initializeRecipientEditTextView(mBcc);
         // TODO: add special chips text change watchers before adding
         // this as a text changed watcher to the to, cc, bcc fields.
         mSubject = (TextView) findViewById(R.id.subject);
+        mSubject.setOnKeyListener(mKeyListenerForSendShortcut);
         mSubject.setOnEditorActionListener(this);
         mSubject.setOnFocusChangeListener(this);
         mQuotedTextView = (QuotedTextView) findViewById(R.id.quoted_text_view);
         mQuotedTextView.setRespondInlineListener(this);
         mBodyView = (EditText) findViewById(R.id.body);
+        mBodyView.setOnKeyListener(mKeyListenerForSendShortcut);
         mBodyView.setOnFocusChangeListener(this);
         mFromStatic = findViewById(R.id.static_from_content);
         mFromStaticText = (TextView) findViewById(R.id.from_account_name);
         mFromSpinnerWrapper = findViewById(R.id.spinner_from_content);
         mFromSpinner = (FromAddressSpinner) findViewById(R.id.from_picker);
+
+        // Bottom placeholder to forward click events to the body
+        findViewById(R.id.composearea_tap_trap_bottom).setOnClickListener(new OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                mBodyView.requestFocus();
+                mBodyView.setSelection(mBodyView.getText().length());
+            }
+        });
     }
 
     private void initializeRecipientEditTextView(RecipientEditTextView view) {
@@ -1423,7 +1492,7 @@
         }
         if (mComposeMode == ComposeActivity.COMPOSE) {
             actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
-            actionBar.setTitle(R.string.compose);
+            actionBar.setTitle(R.string.compose_title);
         } else {
             actionBar.setTitle(null);
             if (mComposeModeAdapter == null) {
@@ -1486,12 +1555,20 @@
     }
 
     private void initFromDraftMessage(Message message) {
-        LogUtils.d(LOG_TAG, "Intializing draft from previous draft message: %s", message);
+        LogUtils.d(LOG_TAG, "Initializing draft from previous draft message: %s", message);
 
-        mDraft = message;
-        mDraftId = message.id;
+        synchronized (mDraftLock) {
+            // Draft id might already be set by the request to id map, if so we don't need to set it
+            if (mDraftId == UIProvider.INVALID_MESSAGE_ID) {
+                mDraftId = message.id;
+            } else {
+                message.id = mDraftId;
+            }
+            mDraft = message;
+        }
         mSubject.setText(message.subject);
         mForward = message.draftType == UIProvider.DraftType.FORWARD;
+
         final List<String> toAddresses = Arrays.asList(message.getToAddressesUnescaped());
         addToAddresses(toAddresses);
         addCcAddresses(Arrays.asList(message.getCcAddressesUnescaped()), toAddresses);
@@ -1502,6 +1579,14 @@
                 addAttachmentAndUpdateView(a);
             }
         }
+
+        // If we don't need to re-populate the body, and the quoted text will be restored from
+        // ref message. So we can skip rest of this code.
+        if (mInnerSavedState != null && mInnerSavedState.getBoolean(EXTRA_SKIP_PARSING_BODY)) {
+            LogUtils.i(LOG_TAG, "Skipping manually populating body and quoted text from draft.");
+            return;
+        }
+
         int quotedTextIndex = message.appendRefMessageContent ? message.quotedTextOffset : -1;
         // Set the body
         CharSequence quotedText = null;
@@ -1541,7 +1626,7 @@
                     quotedText = body.substring(quotedTextIndex);
                 }
             }
-            mBodyView.setText(bodyText);
+            setBody(bodyText, false);
         }
         if (quotedTextIndex > -1 && quotedText != null) {
             mQuotedTextView.setQuotedTextFromDraft(quotedText, mForward);
@@ -1797,77 +1882,22 @@
         if (!mAttachmentsChanged) {
             long totalSize = 0;
             if (extras.containsKey(EXTRA_ATTACHMENTS)) {
-                String[] uris = (String[]) extras.getSerializable(EXTRA_ATTACHMENTS);
-                for (String uriString : uris) {
-                    final Uri uri = Uri.parse(uriString);
-                    long size = 0;
-                    try {
-                        if (handleSpecialAttachmentUri(uri)) {
-                            continue;
-                        }
-
-                        final Attachment a = mAttachmentsView.generateLocalAttachment(uri);
-                        size = mAttachmentsView.addAttachment(mAccount, a);
-
-                        Analytics.getInstance().sendEvent("send_intent_attachment",
-                                Utils.normalizeMimeType(a.getContentType()), null, size);
-
-                    } catch (AttachmentFailureException e) {
-                        LogUtils.e(LOG_TAG, e, "Error adding attachment");
-                        showAttachmentTooBigToast(e.getErrorRes());
-                    }
-                    totalSize += size;
+                final String[] uris = (String[]) extras.getSerializable(EXTRA_ATTACHMENTS);
+                final ArrayList<Uri> parsedUris = Lists.newArrayListWithCapacity(uris.length);
+                for (String uri : uris) {
+                    parsedUris.add(Uri.parse(uri));
                 }
+                totalSize += handleAttachmentUrisFromIntent(parsedUris);
             }
             if (extras.containsKey(Intent.EXTRA_STREAM)) {
                 if (Intent.ACTION_SEND_MULTIPLE.equals(action)) {
                     final ArrayList<Uri> uris = extras
                             .getParcelableArrayList(Intent.EXTRA_STREAM);
-                    ArrayList<Attachment> attachments = new ArrayList<Attachment>();
-                    for (Uri uri : uris) {
-                        if (uri == null) {
-                            continue;
-                        }
-                        try {
-                            if (handleSpecialAttachmentUri(uri)) {
-                                continue;
-                            }
-
-                            final Attachment a = mAttachmentsView.generateLocalAttachment(uri);
-                            attachments.add(a);
-
-                            Analytics.getInstance().sendEvent("send_intent_attachment",
-                                    Utils.normalizeMimeType(a.getContentType()), null, a.size);
-
-                        } catch (AttachmentFailureException e) {
-                            LogUtils.e(LOG_TAG, e, "Error adding attachment");
-                            String maxSize = AttachmentUtils.convertToHumanReadableSize(
-                                    getApplicationContext(),
-                                    mAccount.settings.getMaxAttachmentSize());
-                            showErrorToast(getString
-                                    (R.string.generic_attachment_problem, maxSize));
-                        }
-                    }
-                    totalSize += addAttachments(attachments);
+                    totalSize += handleAttachmentUrisFromIntent(uris);
                 } else {
                     final Uri uri = extras.getParcelable(Intent.EXTRA_STREAM);
-                    if (uri != null) {
-                        long size = 0;
-                        try {
-                            if (!handleSpecialAttachmentUri(uri)) {
-                                final Attachment a = mAttachmentsView.generateLocalAttachment(uri);
-                                size = mAttachmentsView.addAttachment(mAccount, a);
-
-                                Analytics.getInstance().sendEvent("send_intent_attachment",
-                                        Utils.normalizeMimeType(a.getContentType()), null, size);
-                            }
-
-                        } catch (AttachmentFailureException e) {
-                            LogUtils.e(LOG_TAG, e, "Error adding attachment");
-                            showAttachmentTooBigToast(e.getErrorRes());
-                        }
-                        totalSize += size;
-                    }
+                    final ArrayList<Uri> uris = Lists.newArrayList(uri);
+                    totalSize += handleAttachmentUrisFromIntent(uris);
                 }
             }
 
@@ -1881,6 +1911,66 @@
         }
     }
 
+    /**
+     * Helper function to handle a list of uris to attach.
+     * @return the total size of all successfully attached files.
+     */
+    private long handleAttachmentUrisFromIntent(List<Uri> uris) {
+        ArrayList<Attachment> attachments = Lists.newArrayList();
+        for (Uri uri : uris) {
+            try {
+                if (uri != null) {
+                    if ("file".equals(uri.getScheme())) {
+                        final File f = new File(uri.getPath());
+                        // We should not be attaching any files from the data directory UNLESS
+                        // the data directory is part of the calling process.
+                        final String filePath = f.getCanonicalPath();
+                        if (filePath.startsWith(DATA_DIRECTORY_ROOT)) {
+                            final String callingPackage = getCallingPackage();
+                            if (callingPackage == null) {
+                                showErrorToast(getString(R.string.attachment_permission_denied));
+                                continue;
+                            }
+
+                            // So it looks like the data directory are usually /data/data, but
+                            // DATA_DIRECTORY_ROOT is only /data.. so let's check for both
+                            final String pathWithoutRoot;
+                            // We add 1 to the length for the additional / before the package name.
+                            if (filePath.startsWith(ALTERNATE_DATA_DIRECTORY_ROOT)) {
+                                pathWithoutRoot = filePath.substring(
+                                        ALTERNATE_DATA_DIRECTORY_ROOT.length() + 1);
+                            } else {
+                                pathWithoutRoot = filePath.substring(
+                                        DATA_DIRECTORY_ROOT.length() + 1);
+                            }
+
+                            // If we are trying to access a data package that's not part of the
+                            // calling package, show error toast and ignore this attachment.
+                            if (!pathWithoutRoot.startsWith(callingPackage)) {
+                                showErrorToast(getString(R.string.attachment_permission_denied));
+                                continue;
+                            }
+                        }
+                    }
+                    if (!handleSpecialAttachmentUri(uri)) {
+                        final Attachment a = mAttachmentsView.generateLocalAttachment(uri);
+                        attachments.add(a);
+
+                        Analytics.getInstance().sendEvent("send_intent_attachment",
+                                Utils.normalizeMimeType(a.getContentType()), null, a.size);
+                    }
+                }
+            } catch (AttachmentFailureException e) {
+                LogUtils.e(LOG_TAG, e, "Error adding attachment");
+                showAttachmentTooBigToast(e.getErrorRes());
+            } catch (IOException | SecurityException e) {
+                LogUtils.e(LOG_TAG, e, "Error adding attachment");
+                showErrorToast(getString(R.string.attachment_permission_denied));
+            }
+        }
+        return addAttachments(attachments);
+    }
+
     protected void initQuotedText(CharSequence quotedText, boolean shouldQuoteText) {
         mQuotedTextView.setQuotedTextFromHtml(quotedText, shouldQuoteText);
         mShowQuotedText = true;
@@ -2254,9 +2344,8 @@
                 mCc.getLocationOnScreen(coords);
 
                 // Subtract status bar and action bar height from y-coord.
-                final Rect rect = new Rect();
-                getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
-                final int deltaY = coords[1] - getSupportActionBar().getHeight() - rect.top;
+                getWindow().getDecorView().getWindowVisibleDisplayFrame(mRect);
+                final int deltaY = coords[1] - getSupportActionBar().getHeight() - mRect.top;
 
                 // Only scroll down
                 if (deltaY > 0) {
@@ -2298,7 +2387,7 @@
                     : (Intent.ACTION_SEND.equals(action)
                             || Intent.ACTION_SEND_MULTIPLE.equals(action)
                             || Intent.ACTION_SENDTO.equals(action)
-                            || shouldSave()));
+                            || isDraftDirty()));
 
         final MenuItem helpItem = menu.findItem(R.id.help_info_menu_item);
         final MenuItem sendFeedbackItem = menu.findItem(R.id.feedback_menu_item);
@@ -2401,201 +2490,179 @@
 
     @VisibleForTesting
     public interface SendOrSaveCallback {
-        void initializeSendOrSave(SendOrSaveTask sendOrSaveTask);
+        void initializeSendOrSave();
         void notifyMessageIdAllocated(SendOrSaveMessage sendOrSaveMessage, Message message);
-        Message getMessage();
-        void sendOrSaveFinished(SendOrSaveTask sendOrSaveTask, boolean success);
-        void incrementRecipientsTimesContacted(List<String> recipients);
+        long getMessageId();
+        void sendOrSaveFinished(SendOrSaveMessage message, boolean success);
     }
 
-    @VisibleForTesting
-    public static class SendOrSaveTask implements Runnable {
-        private final Context mContext;
-        @VisibleForTesting
-        public final SendOrSaveCallback mSendOrSaveCallback;
-        @VisibleForTesting
-        public final SendOrSaveMessage mSendOrSaveMessage;
-        private ReplyFromAccount mExistingDraftAccount;
-
-        public SendOrSaveTask(Context context, SendOrSaveMessage message,
-                SendOrSaveCallback callback, ReplyFromAccount draftAccount) {
-            mContext = context;
-            mSendOrSaveCallback = callback;
-            mSendOrSaveMessage = message;
-            mExistingDraftAccount = draftAccount;
-        }
-
-        @Override
-        public void run() {
-            final SendOrSaveMessage sendOrSaveMessage = mSendOrSaveMessage;
-
-            final ReplyFromAccount selectedAccount = sendOrSaveMessage.mAccount;
-            Message message = mSendOrSaveCallback.getMessage();
-            long messageId = message != null ? message.id : UIProvider.INVALID_MESSAGE_ID;
-            // If a previous draft has been saved, in an account that is different
-            // than what the user wants to send from, remove the old draft, and treat this
-            // as a new message
-            if (mExistingDraftAccount != null
-                    && !selectedAccount.account.uri.equals(mExistingDraftAccount.account.uri)) {
-                if (messageId != UIProvider.INVALID_MESSAGE_ID) {
-                    ContentResolver resolver = mContext.getContentResolver();
-                    ContentValues values = new ContentValues();
-                    values.put(BaseColumns._ID, messageId);
-                    if (mExistingDraftAccount.account.expungeMessageUri != null) {
-                        new ContentProviderTask.UpdateTask()
-                                .run(resolver, mExistingDraftAccount.account.expungeMessageUri,
-                                        values, null, null);
-                    } else {
-                        // TODO(mindyp) delete the conversation.
-                    }
-                    // reset messageId to 0, so a new message will be created
-                    messageId = UIProvider.INVALID_MESSAGE_ID;
-                }
-            }
-
-            final long messageIdToSave = messageId;
-            sendOrSaveMessage(messageIdToSave, sendOrSaveMessage, selectedAccount);
-
-            if (!sendOrSaveMessage.mSave) {
-                incrementRecipientsTimesContacted(
-                        (String) sendOrSaveMessage.mValues.get(UIProvider.MessageColumns.TO),
-                        (String) sendOrSaveMessage.mValues.get(UIProvider.MessageColumns.CC),
-                        (String) sendOrSaveMessage.mValues.get(UIProvider.MessageColumns.BCC));
-            }
-            mSendOrSaveCallback.sendOrSaveFinished(SendOrSaveTask.this, true);
-        }
-
-        private void incrementRecipientsTimesContacted(
-                final String toAddresses, final String ccAddresses, final String bccAddresses) {
-            final List<String> recipients = Lists.newArrayList();
-            addAddressesToRecipientList(recipients, toAddresses);
-            addAddressesToRecipientList(recipients, ccAddresses);
-            addAddressesToRecipientList(recipients, bccAddresses);
-            mSendOrSaveCallback.incrementRecipientsTimesContacted(recipients);
-        }
-
-        private void addAddressesToRecipientList(
-                final List<String> recipients, final String addressString) {
-            if (recipients == null) {
-                throw new IllegalArgumentException("recipientList cannot be null");
-            }
-            if (TextUtils.isEmpty(addressString)) {
-                return;
-            }
-            final Rfc822Token[] tokens = Rfc822Tokenizer.tokenize(addressString);
-            for (final Rfc822Token token : tokens) {
-                recipients.add(token.getAddress());
-            }
-        }
-
-        /**
-         * Send or Save a message.
-         */
-        private void sendOrSaveMessage(final long messageIdToSave,
-                final SendOrSaveMessage sendOrSaveMessage, final ReplyFromAccount selectedAccount) {
-            final ContentResolver resolver = mContext.getContentResolver();
-            final boolean updateExistingMessage = messageIdToSave != UIProvider.INVALID_MESSAGE_ID;
-
-            final String accountMethod = sendOrSaveMessage.mSave ?
-                    UIProvider.AccountCallMethods.SAVE_MESSAGE :
-                    UIProvider.AccountCallMethods.SEND_MESSAGE;
-
-            try {
-                if (updateExistingMessage) {
-                    sendOrSaveMessage.mValues.put(BaseColumns._ID, messageIdToSave);
-
-                    callAccountSendSaveMethod(resolver,
-                            selectedAccount.account, accountMethod, sendOrSaveMessage);
+    private void runSendOrSaveProviderCalls(SendOrSaveMessage sendOrSaveMessage,
+            SendOrSaveCallback callback, ReplyFromAccount currReplyFromAccount,
+            ReplyFromAccount originalReplyFromAccount) {
+        long messageId = callback.getMessageId();
+        // If a previous draft has been saved, in an account that is different
+        // than what the user wants to send from, remove the old draft, and treat this
+        // as a new message
+        if (originalReplyFromAccount != null
+                && !currReplyFromAccount.account.uri.equals(originalReplyFromAccount.account.uri)) {
+            if (messageId != UIProvider.INVALID_MESSAGE_ID) {
+                ContentResolver resolver = getContentResolver();
+                ContentValues values = new ContentValues();
+                values.put(BaseColumns._ID, messageId);
+                if (originalReplyFromAccount.account.expungeMessageUri != null) {
+                    new ContentProviderTask.UpdateTask()
+                            .run(resolver, originalReplyFromAccount.account.expungeMessageUri,
+                                    values, null, null);
                 } else {
-                    Uri messageUri = null;
-                    final Bundle result = callAccountSendSaveMethod(resolver,
-                            selectedAccount.account, accountMethod, sendOrSaveMessage);
-                    if (result != null) {
-                        // If a non-null value was returned, then the provider handled the call
-                        // method
-                        messageUri = result.getParcelable(UIProvider.MessageColumns.URI);
-                    }
-                    if (sendOrSaveMessage.mSave && messageUri != null) {
-                        final Cursor messageCursor = resolver.query(messageUri,
-                                UIProvider.MESSAGE_PROJECTION, null, null, null);
-                        if (messageCursor != null) {
-                            try {
-                                if (messageCursor.moveToFirst()) {
-                                    // Broadcast notification that a new message has
-                                    // been allocated
-                                    mSendOrSaveCallback.notifyMessageIdAllocated(sendOrSaveMessage,
-                                            new Message(messageCursor));
-                                }
-                            } finally {
-                                messageCursor.close();
-                            }
-                        }
-                    }
+                    // TODO(mindyp) delete the conversation.
                 }
-            } finally {
-                // Close any opened file descriptors
-                closeOpenedAttachmentFds(sendOrSaveMessage);
+                // reset messageId to 0, so a new message will be created
+                messageId = UIProvider.INVALID_MESSAGE_ID;
             }
         }
 
-        private static void closeOpenedAttachmentFds(final SendOrSaveMessage sendOrSaveMessage) {
-            final Bundle openedFds = sendOrSaveMessage.attachmentFds();
-            if (openedFds != null) {
-                final Set<String> keys = openedFds.keySet();
-                for (final String key : keys) {
-                    final ParcelFileDescriptor fd = openedFds.getParcelable(key);
-                    if (fd != null) {
+        final long messageIdToSave = messageId;
+        sendOrSaveMessage(callback, messageIdToSave, sendOrSaveMessage, currReplyFromAccount);
+
+        if (!sendOrSaveMessage.mSave) {
+            incrementRecipientsTimesContacted(
+                    (String) sendOrSaveMessage.mValues.get(UIProvider.MessageColumns.TO),
+                    (String) sendOrSaveMessage.mValues.get(UIProvider.MessageColumns.CC),
+                    (String) sendOrSaveMessage.mValues.get(UIProvider.MessageColumns.BCC));
+        }
+        callback.sendOrSaveFinished(sendOrSaveMessage, true);
+    }
+
+    private void incrementRecipientsTimesContacted(
+            final String toAddresses, final String ccAddresses, final String bccAddresses) {
+        final List<String> recipients = Lists.newArrayList();
+        addAddressesToRecipientList(recipients, toAddresses);
+        addAddressesToRecipientList(recipients, ccAddresses);
+        addAddressesToRecipientList(recipients, bccAddresses);
+        incrementRecipientsTimesContacted(recipients);
+    }
+
+    private void addAddressesToRecipientList(
+            final List<String> recipients, final String addressString) {
+        if (recipients == null) {
+            throw new IllegalArgumentException("recipientList cannot be null");
+        }
+        if (TextUtils.isEmpty(addressString)) {
+            return;
+        }
+        final Rfc822Token[] tokens = Rfc822Tokenizer.tokenize(addressString);
+        for (final Rfc822Token token : tokens) {
+            recipients.add(token.getAddress());
+        }
+    }
+
+    /**
+     * Send or Save a message.
+     */
+    private void sendOrSaveMessage(SendOrSaveCallback callback, final long messageIdToSave,
+            final SendOrSaveMessage sendOrSaveMessage, final ReplyFromAccount selectedAccount) {
+        final ContentResolver resolver = getContentResolver();
+        final boolean updateExistingMessage = messageIdToSave != UIProvider.INVALID_MESSAGE_ID;
+
+        final String accountMethod = sendOrSaveMessage.mSave ?
+                UIProvider.AccountCallMethods.SAVE_MESSAGE :
+                UIProvider.AccountCallMethods.SEND_MESSAGE;
+
+        try {
+            if (updateExistingMessage) {
+                sendOrSaveMessage.mValues.put(BaseColumns._ID, messageIdToSave);
+
+                callAccountSendSaveMethod(resolver,
+                        selectedAccount.account, accountMethod, sendOrSaveMessage);
+            } else {
+                Uri messageUri = null;
+                final Bundle result = callAccountSendSaveMethod(resolver,
+                        selectedAccount.account, accountMethod, sendOrSaveMessage);
+                if (result != null) {
+                    // If a non-null value was returned, then the provider handled the call
+                    // method
+                    messageUri = result.getParcelable(UIProvider.MessageColumns.URI);
+                }
+                if (sendOrSaveMessage.mSave && messageUri != null) {
+                    final Cursor messageCursor = resolver.query(messageUri,
+                            UIProvider.MESSAGE_PROJECTION, null, null, null);
+                    if (messageCursor != null) {
                         try {
-                            fd.close();
-                        } catch (IOException e) {
-                            // Do nothing
+                            if (messageCursor.moveToFirst()) {
+                                // Broadcast notification that a new message has
+                                // been allocated
+                                callback.notifyMessageIdAllocated(sendOrSaveMessage,
+                                        new Message(messageCursor));
+                            }
+                        } finally {
+                            messageCursor.close();
                         }
                     }
                 }
             }
+        } finally {
+            // Close any opened file descriptors
+            closeOpenedAttachmentFds(sendOrSaveMessage);
         }
+    }
 
-        /**
-         * Use the {@link ContentResolver#call} method to send or save the message.
-         *
-         * If this was successful, this method will return an non-null Bundle instance
-         */
-        private static Bundle callAccountSendSaveMethod(final ContentResolver resolver,
-                final Account account, final String method,
-                final SendOrSaveMessage sendOrSaveMessage) {
-            // Copy all of the values from the content values to the bundle
-            final Bundle methodExtras = new Bundle(sendOrSaveMessage.mValues.size());
-            final Set<Entry<String, Object>> valueSet = sendOrSaveMessage.mValues.valueSet();
-
-            for (Entry<String, Object> entry : valueSet) {
-                final Object entryValue = entry.getValue();
-                final String key = entry.getKey();
-                if (entryValue instanceof String) {
-                    methodExtras.putString(key, (String)entryValue);
-                } else if (entryValue instanceof Boolean) {
-                    methodExtras.putBoolean(key, (Boolean)entryValue);
-                } else if (entryValue instanceof Integer) {
-                    methodExtras.putInt(key, (Integer)entryValue);
-                } else if (entryValue instanceof Long) {
-                    methodExtras.putLong(key, (Long)entryValue);
-                } else {
-                    LogUtils.wtf(LOG_TAG, "Unexpected object type: %s",
-                            entryValue.getClass().getName());
+    private static void closeOpenedAttachmentFds(final SendOrSaveMessage sendOrSaveMessage) {
+        final Bundle openedFds = sendOrSaveMessage.attachmentFds();
+        if (openedFds != null) {
+            final Set<String> keys = openedFds.keySet();
+            for (final String key : keys) {
+                final ParcelFileDescriptor fd = openedFds.getParcelable(key);
+                if (fd != null) {
+                    try {
+                        fd.close();
+                    } catch (IOException e) {
+                        // Do nothing
+                    }
                 }
             }
-
-            // If the SendOrSaveMessage has some opened fds, add them to the bundle
-            final Bundle fdMap = sendOrSaveMessage.attachmentFds();
-            if (fdMap != null) {
-                methodExtras.putParcelable(
-                        UIProvider.SendOrSaveMethodParamKeys.OPENED_FD_MAP, fdMap);
-            }
-
-            return resolver.call(account.uri, method, account.uri.toString(), methodExtras);
         }
     }
 
     /**
+     * Use the {@link ContentResolver#call} method to send or save the message.
+     *
+     * If this was successful, this method will return an non-null Bundle instance
+     */
+    private static Bundle callAccountSendSaveMethod(final ContentResolver resolver,
+            final Account account, final String method,
+            final SendOrSaveMessage sendOrSaveMessage) {
+        // Copy all of the values from the content values to the bundle
+        final Bundle methodExtras = new Bundle(sendOrSaveMessage.mValues.size());
+        final Set<Entry<String, Object>> valueSet = sendOrSaveMessage.mValues.valueSet();
+
+        for (Entry<String, Object> entry : valueSet) {
+            final Object entryValue = entry.getValue();
+            final String key = entry.getKey();
+            if (entryValue instanceof String) {
+                methodExtras.putString(key, (String)entryValue);
+            } else if (entryValue instanceof Boolean) {
+                methodExtras.putBoolean(key, (Boolean)entryValue);
+            } else if (entryValue instanceof Integer) {
+                methodExtras.putInt(key, (Integer)entryValue);
+            } else if (entryValue instanceof Long) {
+                methodExtras.putLong(key, (Long)entryValue);
+            } else {
+                LogUtils.wtf(LOG_TAG, "Unexpected object type: %s",
+                        entryValue.getClass().getName());
+            }
+        }
+
+        // If the SendOrSaveMessage has some opened fds, add them to the bundle
+        final Bundle fdMap = sendOrSaveMessage.attachmentFds();
+        if (fdMap != null) {
+            methodExtras.putParcelable(
+                    UIProvider.SendOrSaveMethodParamKeys.OPENED_FD_MAP, fdMap);
+        }
+
+        return resolver.call(account.uri, method, account.uri.toString(), methodExtras);
+    }
+
+    /**
      * Reports recipients that have been contacted in order to improve auto-complete
      * suggestions. Default behavior updates usage statistics in ContactsProvider.
      * @param recipients addresses
@@ -2607,80 +2674,80 @@
 
     @VisibleForTesting
     public static class SendOrSaveMessage {
-        final ReplyFromAccount mAccount;
+        final int mRequestId;
         final ContentValues mValues;
         final String mRefMessageId;
         @VisibleForTesting
         public final boolean mSave;
-        final int mRequestId;
         private final Bundle mAttachmentFds;
 
-        public SendOrSaveMessage(Context context, ReplyFromAccount account, ContentValues values,
-                String refMessageId, List<Attachment> attachments, boolean save) {
-            mAccount = account;
+        public SendOrSaveMessage(Context context, int requestId, ContentValues values,
+                String refMessageId, List<Attachment> attachments, Bundle optionalAttachmentFds,
+                boolean save) {
+            mRequestId = requestId;
             mValues = values;
             mRefMessageId = refMessageId;
             mSave = save;
-            mRequestId = mValues.hashCode() ^ hashCode();
 
-            mAttachmentFds = initializeAttachmentFds(context, attachments);
-        }
-
-        int requestId() {
-            return mRequestId;
+            // If the attachments are already open for us (pre-JB), then don't open them again
+            if (optionalAttachmentFds != null) {
+                mAttachmentFds = optionalAttachmentFds;
+            } else {
+                mAttachmentFds = initializeAttachmentFds(context, attachments);
+            }
         }
 
         Bundle attachmentFds() {
             return mAttachmentFds;
         }
+    }
 
-        /**
-         * Opens {@link ParcelFileDescriptor} for each of the attachments.  This method must be
-         * called before the ComposeActivity finishes.
-         * Note: The caller is responsible for closing these file descriptors.
-         */
-        private static Bundle initializeAttachmentFds(final Context context,
-                final List<Attachment> attachments) {
-            if (attachments == null || attachments.size() == 0) {
-                return null;
-            }
-
-            final Bundle result = new Bundle(attachments.size());
-            final ContentResolver resolver = context.getContentResolver();
-
-            for (Attachment attachment : attachments) {
-                if (attachment == null || Utils.isEmpty(attachment.contentUri)) {
-                    continue;
-                }
-
-                ParcelFileDescriptor fileDescriptor;
-                try {
-                    fileDescriptor = resolver.openFileDescriptor(attachment.contentUri, "r");
-                } catch (FileNotFoundException e) {
-                    LogUtils.e(LOG_TAG, e, "Exception attempting to open attachment");
-                    fileDescriptor = null;
-                } catch (SecurityException e) {
-                    // We have encountered a security exception when attempting to open the file
-                    // specified by the content uri.  If the attachment has been cached, this
-                    // isn't a problem, as even through the original permission may have been
-                    // revoked, we have cached the file.  This will happen when saving/sending
-                    // a previously saved draft.
-                    // TODO(markwei): Expose whether the attachment has been cached through the
-                    // attachment object.  This would allow us to limit when the log is made, as
-                    // if the attachment has been cached, this really isn't an error
-                    LogUtils.e(LOG_TAG, e, "Security Exception attempting to open attachment");
-                    // Just set the file descriptor to null, as the underlying provider needs
-                    // to handle the file descriptor not being set.
-                    fileDescriptor = null;
-                }
-
-                if (fileDescriptor != null) {
-                    result.putParcelable(attachment.contentUri.toString(), fileDescriptor);
-                }
-            }
-
-            return result;
+    /**
+     * Opens {@link ParcelFileDescriptor} for each of the attachments.  This method must be
+     * called before the ComposeActivity finishes.
+     * Note: The caller is responsible for closing these file descriptors.
+     */
+    private static Bundle initializeAttachmentFds(final Context context,
+            final List<Attachment> attachments) {
+        if (attachments == null || attachments.size() == 0) {
+            return null;
         }
+
+        final Bundle result = new Bundle(attachments.size());
+        final ContentResolver resolver = context.getContentResolver();
+
+        for (Attachment attachment : attachments) {
+            if (attachment == null || Utils.isEmpty(attachment.contentUri)) {
+                continue;
+            }
+
+            ParcelFileDescriptor fileDescriptor;
+            try {
+                fileDescriptor = resolver.openFileDescriptor(attachment.contentUri, "r");
+            } catch (FileNotFoundException e) {
+                LogUtils.e(LOG_TAG, e, "Exception attempting to open attachment");
+                fileDescriptor = null;
+            } catch (SecurityException e) {
+                // We have encountered a security exception when attempting to open the file
+                // specified by the content uri.  If the attachment has been cached, this
+                // isn't a problem, as even through the original permission may have been
+                // revoked, we have cached the file.  This will happen when saving/sending
+                // a previously saved draft.
+                // TODO(markwei): Expose whether the attachment has been cached through the
+                // attachment object.  This would allow us to limit when the log is made, as
+                // if the attachment has been cached, this really isn't an error
+                LogUtils.e(LOG_TAG, e, "Security Exception attempting to open attachment");
+                // Just set the file descriptor to null, as the underlying provider needs
+                // to handle the file descriptor not being set.
+                fileDescriptor = null;
+            }
+
+            if (fileDescriptor != null) {
+                result.putParcelable(attachment.contentUri.toString(), fileDescriptor);
+            }
+        }
+
+        return result;
     }
 
     /**
@@ -2784,14 +2851,14 @@
      */
     public void updateSaveUi() {
         if (mSave != null) {
-            mSave.setEnabled((shouldSave() && !isBlank()));
+            mSave.setEnabled((isDraftDirty() && !isBlank()));
         }
     }
 
     /**
-     * Returns true if we need to save the current draft.
+     * Returns true if the current draft is modified from the version we previously saved.
      */
-    private boolean shouldSave() {
+    private boolean isDraftDirty() {
         synchronized (mDraftLock) {
             // The message should only be saved if:
             // It hasn't been sent AND
@@ -3067,10 +3134,11 @@
         return mSubject.getText().toString();
     }
 
-    private int sendOrSaveInternal(Context context, ReplyFromAccount replyFromAccount,
-            Message message, final Message refMessage, final CharSequence quotedText,
-            SendOrSaveCallback callback, Handler handler, boolean save, int composeMode,
-            ReplyFromAccount draftAccount, final ContentValues extraValues) {
+    private void sendOrSaveInternal(Context context, int requestId,
+            ReplyFromAccount currReplyFromAccount, ReplyFromAccount originalReplyFromAccount,
+            Message message, Message refMessage, CharSequence quotedText,
+            SendOrSaveCallback callback, boolean save, int composeMode, ContentValues extraValues,
+            Bundle optionalAttachmentFds) {
         final ContentValues values = new ContentValues();
 
         final String refMessageId = refMessage != null ? refMessage.uri.toString() : "";
@@ -3085,21 +3153,22 @@
         // bodyHtml already have the composing spans removed.
         final String htmlBody = message.bodyHtml;
         final String textBody = message.bodyText;
-        // fullbody will contain the actual body plus the quoted text.
-        final String fullBody;
-        final String quotedString;
+        // fullbodyhtml/fullbodytext will contain the actual body plus the quoted text.
+        String fullBodyHtml = htmlBody;
+        String fullBodyText = textBody;
+        String quotedString = null;
         final boolean hasQuotedText = !TextUtils.isEmpty(quotedText);
         if (hasQuotedText) {
             // The quoted text is HTML at this point.
             quotedString = quotedText.toString();
-            fullBody = htmlBody + quotedString;
+            fullBodyHtml = htmlBody + quotedString;
+            fullBodyText = textBody + Utils.convertHtmlToPlainText(quotedString);
             MessageModification.putForward(values, composeMode == ComposeActivity.FORWARD);
             MessageModification.putAppendRefMessageContent(values, true /* include quoted */);
-        } else {
-            fullBody = htmlBody;
-            quotedString = null;
         }
+
         // Only take refMessage into account if either one of its html/text is not empty.
+        int quotedTextPos = -1;
         if (refMessage != null && !(TextUtils.isEmpty(refMessage.bodyHtml) &&
                 TextUtils.isEmpty(refMessage.bodyText))) {
             // The code below might need to be revisited. The quoted text position is different
@@ -3108,17 +3177,15 @@
             // if both exist.  Issues like this made me file b/14256940 to make sure that we
             // properly handle the existing of both text/html and text/plain parts and to verify
             // that we are not making some assumptions that break if there is no text/html part.
-            int quotedTextPos = -1;
             if (!TextUtils.isEmpty(refMessage.bodyHtml)) {
-                MessageModification.putBodyHtml(values, fullBody.toString());
+                MessageModification.putBodyHtml(values, fullBodyHtml);
                 if (hasQuotedText) {
                     quotedTextPos = htmlBody.length() +
                             QuotedTextView.getQuotedTextOffset(quotedString);
                 }
             }
             if (!TextUtils.isEmpty(refMessage.bodyText)) {
-                MessageModification.putBody(values,
-                        Utils.convertHtmlToPlainText(fullBody.toString()));
+                MessageModification.putBody(values, fullBodyText);
                 if (hasQuotedText && (quotedTextPos == -1)) {
                     quotedTextPos = textBody.length();
                 }
@@ -3132,8 +3199,8 @@
                 MessageModification.putQuoteStartPos(values, quotedTextPos);
             }
         } else {
-            MessageModification.putBodyHtml(values, fullBody.toString());
-            MessageModification.putBody(values, Utils.convertHtmlToPlainText(fullBody.toString()));
+            MessageModification.putBodyHtml(values, fullBodyHtml);
+            MessageModification.putBody(values, fullBodyText);
         }
         int draftType = getDraftType(composeMode);
         MessageModification.putDraftType(values, draftType);
@@ -3144,17 +3211,16 @@
         if (extraValues != null) {
             values.putAll(extraValues);
         }
-        SendOrSaveMessage sendOrSaveMessage = new SendOrSaveMessage(context, replyFromAccount,
-                values, refMessageId, message.getAttachments(), save);
-        SendOrSaveTask sendOrSaveTask = new SendOrSaveTask(context, sendOrSaveMessage, callback,
-                draftAccount);
 
-        callback.initializeSendOrSave(sendOrSaveTask);
-        // Do the send/save action on the specified handler to avoid possible
-        // ANRs
-        handler.post(sendOrSaveTask);
+        SendOrSaveMessage sendOrSaveMessage = new SendOrSaveMessage(context, requestId,
+                values, refMessageId, message.getAttachments(), optionalAttachmentFds, save);
+        runSendOrSaveProviderCalls(sendOrSaveMessage, callback, currReplyFromAccount,
+                originalReplyFromAccount);
 
-        return sendOrSaveMessage.requestId();
+        LogUtils.i(LOG_TAG, "[compose] SendOrSaveMessage [%s] posted (isSave: %s) - " +
+                "bodyHtml length: %d, bodyText length: %d, quoted text pos: %d, attach count: %d",
+                requestId, save, message.bodyHtml.length(), message.bodyText.length(),
+                quotedTextPos, message.getAttachmentCount(true));
     }
 
     /**
@@ -3218,23 +3284,41 @@
         }
 
         final SendOrSaveCallback callback = new SendOrSaveCallback() {
-            // FIXME: unused
-            private int mRestoredRequestId;
-
             @Override
-            public void initializeSendOrSave(SendOrSaveTask sendOrSaveTask) {
-                synchronized (mActiveTasks) {
-                    int numTasks = mActiveTasks.size();
-                    if (numTasks == 0) {
+            public void initializeSendOrSave() {
+                final Intent i = new Intent(ComposeActivity.this, EmptyService.class);
+
+                // API 16+ allows for setClipData. For pre-16 we are going to open the fds
+                // on the main thread.
+                if (Utils.isRunningJellybeanOrLater()) {
+                    // Grant the READ permission for the attachments to the service so that
+                    // as long as the service stays alive we won't hit PermissionExceptions.
+                    final ClipDescription desc = new ClipDescription("attachment_uris",
+                            new String[]{ClipDescription.MIMETYPE_TEXT_URILIST});
+                    ClipData clipData = null;
+                    for (Attachment a : mAttachmentsView.getAttachments()) {
+                        if (a != null && !Utils.isEmpty(a.contentUri)) {
+                            final ClipData.Item uriItem = new ClipData.Item(a.contentUri);
+                            if (clipData == null) {
+                                clipData = new ClipData(desc, uriItem);
+                            } else {
+                                clipData.addItem(uriItem);
+                            }
+                        }
+                    }
+                    i.setClipData(clipData);
+                    i.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+                }
+
+                synchronized (PENDING_SEND_OR_SAVE_TASKS_NUM) {
+                    if (PENDING_SEND_OR_SAVE_TASKS_NUM.getAndAdd(1) == 0) {
                         // Start service so we won't be killed if this app is
                         // put in the background.
-                        startService(new Intent(ComposeActivity.this, EmptyService.class));
+                        startService(i);
                     }
-
-                    mActiveTasks.add(sendOrSaveTask);
                 }
                 if (sTestSendOrSaveCallback != null) {
-                    sTestSendOrSaveCallback.initializeSendOrSave(sendOrSaveTask);
+                    sTestSendOrSaveCallback.initializeSendOrSave();
                 }
             }
 
@@ -3242,11 +3326,10 @@
             public void notifyMessageIdAllocated(SendOrSaveMessage sendOrSaveMessage,
                     Message message) {
                 synchronized (mDraftLock) {
-                    mDraftAccount = sendOrSaveMessage.mAccount;
                     mDraftId = message.id;
                     mDraft = message;
                     if (sRequestMessageIdMap != null) {
-                        sRequestMessageIdMap.put(sendOrSaveMessage.requestId(), mDraftId);
+                        sRequestMessageIdMap.put(sendOrSaveMessage.mRequestId, mDraftId);
                     }
                     // Cache request message map, in case the process is killed
                     saveRequestMap();
@@ -3257,14 +3340,14 @@
             }
 
             @Override
-            public Message getMessage() {
+            public long getMessageId() {
                 synchronized (mDraftLock) {
-                    return mDraft;
+                    return mDraftId;
                 }
             }
 
             @Override
-            public void sendOrSaveFinished(SendOrSaveTask task, boolean success) {
+            public void sendOrSaveFinished(SendOrSaveMessage message, boolean success) {
                 // Update the last sent from account.
                 if (mAccount != null) {
                     MailAppProvider.getInstance().setLastSentFromAccount(mAccount.uri.toString());
@@ -3280,37 +3363,39 @@
                             .show();
                 }
 
-                int numTasks;
-                synchronized (mActiveTasks) {
-                    // Remove the task from the list of active tasks
-                    mActiveTasks.remove(task);
-                    numTasks = mActiveTasks.size();
-                }
-
-                if (numTasks == 0) {
-                    // Stop service so we can be killed.
-                    stopService(new Intent(ComposeActivity.this, EmptyService.class));
+                synchronized (PENDING_SEND_OR_SAVE_TASKS_NUM) {
+                    if (PENDING_SEND_OR_SAVE_TASKS_NUM.addAndGet(-1) == 0) {
+                        // Stop service so we can be killed.
+                        stopService(new Intent(ComposeActivity.this, EmptyService.class));
+                    }
                 }
                 if (sTestSendOrSaveCallback != null) {
-                    sTestSendOrSaveCallback.sendOrSaveFinished(task, success);
+                    sTestSendOrSaveCallback.sendOrSaveFinished(message, success);
                 }
             }
-
-            @Override
-            public void incrementRecipientsTimesContacted(final List<String> recipients) {
-                ComposeActivity.this.incrementRecipientsTimesContacted(recipients);
-            }
         };
         setAccount(mReplyFromAccount.account);
 
         final Spanned body = removeComposingSpans(mBodyView.getText());
+        callback.initializeSendOrSave();
+
+        // For pre-JB we need to open the fds on the main thread
+        final Bundle attachmentFds;
+        if (!Utils.isRunningJellybeanOrLater()) {
+            attachmentFds = initializeAttachmentFds(this, mAttachmentsView.getAttachments());
+        } else {
+            attachmentFds = null;
+        }
+
+        // Generate a unique message id for this request
+        mRequestId = sRandom.nextInt();
         SEND_SAVE_TASK_HANDLER.post(new Runnable() {
             @Override
             public void run() {
                 final Message msg = createMessage(mReplyFromAccount, mRefMessage, getMode(), body);
-                mRequestId = sendOrSaveInternal(ComposeActivity.this, mReplyFromAccount, msg,
-                        mRefMessage, mQuotedTextView.getQuotedTextIfIncluded(), callback,
-                        SEND_SAVE_TASK_HANDLER, save, mComposeMode, mDraftAccount, mExtraValues);
+                sendOrSaveInternal(ComposeActivity.this, mRequestId, mReplyFromAccount,
+                        mDraftAccount, msg, mRefMessage, mQuotedTextView.getQuotedTextIfIncluded(),
+                        callback, save, mComposeMode, mExtraValues, attachmentFds);
             }
         });
 
@@ -3521,11 +3606,13 @@
 
     /**
      * Set the body of the message.
+     * Please try to exclusively use this method instead of calling mBodyView.setText(..) directly.
      *
      * @param text text to set
      * @param withSignature True to append a signature.
      */
     public void setBody(CharSequence text, boolean withSignature) {
+        LogUtils.i(LOG_TAG, "Body populated, len: %d, sig: %b", text.length(), withSignature);
         mBodyView.setText(text);
         if (withSignature) {
             appendSignature();
@@ -3566,7 +3653,7 @@
             if (!TextUtils.isEmpty(oldSignature)) {
                 int pos = getSignatureStartPosition(oldSignature, bodyText);
                 if (pos > -1) {
-                    mBodyView.setText(bodyText.substring(0, pos));
+                    setBody(bodyText.substring(0, pos), false);
                 }
             }
             setAccount(mReplyFromAccount.account);
@@ -3611,9 +3698,15 @@
     }
 
     private void doDiscard() {
-        final DialogFragment frag = new DiscardConfirmDialogFragment();
-        frag.show(getFragmentManager(), "discard confirm");
+        // Only need to ask for confirmation if the draft is in a dirty state.
+        if (isDraftDirty()) {
+            final DialogFragment frag = new DiscardConfirmDialogFragment();
+            frag.show(getFragmentManager(), "discard confirm");
+        } else {
+            doDiscardWithoutConfirmation();
+        }
     }
+
     /**
      * Effectively discard the current message.
      *
@@ -3655,7 +3748,7 @@
             return;
         }
 
-        if (shouldSave()) {
+        if (isDraftDirty()) {
             doSave(!mAddingAttachment /* show toast */);
         }
     }
@@ -3906,9 +3999,21 @@
         @Override
         protected void onPostExecute(Spanned spanned) {
             mBodyView.removeTextChangedListener(ComposeActivity.this);
-            mBodyView.setText(spanned);
+            setBody(spanned, false);
             mTextChanged = false;
             mBodyView.addTextChangedListener(ComposeActivity.this);
         }
     }
+
+    @Override
+    public void onSupportActionModeStarted(ActionMode mode) {
+        super.onSupportActionModeStarted(mode);
+        ViewUtils.setStatusBarColor(this, R.color.action_mode_statusbar_color);
+    }
+
+    @Override
+    public void onSupportActionModeFinished(ActionMode mode) {
+        super.onSupportActionModeFinished(mode);
+        ViewUtils.setStatusBarColor(this, R.color.primary_dark_color);
+    }
 }
diff --git a/src/com/android/mail/compose/ComposeAttachmentTile.java b/src/com/android/mail/compose/ComposeAttachmentTile.java
index 844a7a3..f0f4459 100644
--- a/src/com/android/mail/compose/ComposeAttachmentTile.java
+++ b/src/com/android/mail/compose/ComposeAttachmentTile.java
@@ -33,6 +33,8 @@
     public void render(Attachment attachment, AttachmentPreviewCache attachmentPreviewCache) {
         // the super implementation is good enough. just broaden its access.
         super.render(attachment, attachmentPreviewCache);
+        mDeleteButton.setContentDescription(
+                getResources().getString(R.string.remove_attachment_desc, attachment.getName()));
     }
 
     @Override
diff --git a/src/com/android/mail/compose/FromAddressSpinnerAdapter.java b/src/com/android/mail/compose/FromAddressSpinnerAdapter.java
index a719c10..0d6804d 100644
--- a/src/com/android/mail/compose/FromAddressSpinnerAdapter.java
+++ b/src/com/android/mail/compose/FromAddressSpinnerAdapter.java
@@ -36,16 +36,8 @@
  * @author mindyp@google.com
  */
 public class FromAddressSpinnerAdapter extends ArrayAdapter<ReplyFromAccount> {
-    private static final int FROM = 0;
-    private static final int CUSTOM_FROM = 1;
     private static String sFormatString;
 
-    public static int REAL_ACCOUNT = 2;
-
-    public static int ACCOUNT_DISPLAY = 0;
-
-    public static int ACCOUNT_ADDRESS = 1;
-
     private LayoutInflater mInflater;
 
     public FromAddressSpinnerAdapter(Context context) {
@@ -62,27 +54,19 @@
     }
 
     @Override
-    public int getViewTypeCount() {
-        // FROM and CUSTOM_FROM
-        return 2;
-    }
-
-    @Override
-    public int getItemViewType(int pos) {
-        return getItem(pos).isCustomFrom ? CUSTOM_FROM : FROM;
-    }
-
-    @Override
     public View getView(int position, View convertView, ViewGroup parent) {
-        ReplyFromAccount fromItem = getItem(position);
-        int res = fromItem.isCustomFrom ? R.layout.custom_from_item : R.layout.from_item;
-        View fromEntry = convertView == null ? getInflater().inflate(res, null) : convertView;
+        final ReplyFromAccount fromItem = getItem(position);
+        final View fromEntry = convertView == null ?
+                getInflater().inflate(R.layout.from_item, null) : convertView;
+        final TextView nameView = (TextView) fromEntry.findViewById(R.id.spinner_account_name);
         if (fromItem.isCustomFrom) {
-            ((TextView) fromEntry.findViewById(R.id.spinner_account_name)).setText(fromItem.name);
+            nameView.setText(fromItem.name);
+            nameView.setVisibility(View.VISIBLE);
 
             ((TextView) fromEntry.findViewById(R.id.spinner_account_address))
                     .setText(formatAddress(fromItem.address));
         } else {
+            nameView.setVisibility(View.GONE);
             ((TextView) fromEntry.findViewById(R.id.spinner_account_address))
                     .setText(fromItem.address);
         }
@@ -91,10 +75,10 @@
 
     @Override
     public View getDropDownView(int position, View convertView, ViewGroup parent) {
-        ReplyFromAccount fromItem = getItem(position);
-        int res = fromItem.isCustomFrom ? R.layout.custom_from_dropdown_item
+        final ReplyFromAccount fromItem = getItem(position);
+        final int res = fromItem.isCustomFrom ? R.layout.custom_from_dropdown_item
                 : R.layout.from_dropdown_item;
-        View fromEntry = getInflater().inflate(res, null);
+        final View fromEntry = getInflater().inflate(res, null);
         if (fromItem.isCustomFrom) {
             ((TextView) fromEntry.findViewById(R.id.spinner_account_name)).setText(fromItem.name);
             ((TextView) fromEntry.findViewById(R.id.spinner_account_address))
diff --git a/src/com/android/mail/drawer/AccountDrawerItem.java b/src/com/android/mail/drawer/AccountDrawerItem.java
new file mode 100644
index 0000000..cdd4932
--- /dev/null
+++ b/src/com/android/mail/drawer/AccountDrawerItem.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.mail.drawer;
+
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.bitmap.BitmapCache;
+import com.android.mail.R;
+import com.android.mail.bitmap.ContactResolver;
+import com.android.mail.providers.Account;
+import com.android.mail.ui.AccountItemView;
+import com.android.mail.ui.ControllableActivity;
+import com.android.mail.utils.FolderUri;
+
+class AccountDrawerItem extends DrawerItem {
+    /** True if the drawer item represents the current account, false otherwise */
+    private final boolean mIsSelected;
+    private final BitmapCache mImagesCache;
+    private final ContactResolver mContactResolver;
+
+    AccountDrawerItem(ControllableActivity activity, Account account,
+            int unreadCount, boolean isCurrentAccount, BitmapCache cache,
+            ContactResolver contactResolver) {
+        super(activity, null, NONFOLDER_ITEM, account);
+        mIsSelected = isCurrentAccount;
+        mImagesCache = cache;
+        mContactResolver = contactResolver;
+        // TODO: Unread count should eventually percolate through to the account switcher
+    }
+
+    @Override
+    public String toString() {
+        return "[DrawerItem VIEW_ACCOUNT, mAccount=" + mAccount + "]";
+    }
+
+    /**
+     * Return a view for an account object.
+     *
+     * @param convertView a view, possibly null, to be recycled.
+     * @param parent the parent viewgroup to attach to.
+     * @return a view to display at this position.
+     */
+    @Override
+    public View getView(View convertView, ViewGroup parent) {
+        final AccountItemView accountItemView;
+        if (convertView != null) {
+            accountItemView = (AccountItemView) convertView;
+        } else {
+            accountItemView =
+                    (AccountItemView) mInflater.inflate(R.layout.account_item, parent, false);
+        }
+        accountItemView.bind(mActivity.getActivityContext(), mAccount, mIsSelected,
+                mImagesCache, mContactResolver);
+        return accountItemView;
+    }
+
+    @Override
+    public boolean isHighlighted(FolderUri currentFolder, int currentType) {
+        return false;
+    }
+
+    @Override
+    public boolean isItemEnabled() {
+        return true;
+    }
+
+    @Override
+    public @DrawerItemType int getType() {
+        return VIEW_ACCOUNT;
+    }
+}
diff --git a/src/com/android/mail/drawer/BlankHeaderDrawerItem.java b/src/com/android/mail/drawer/BlankHeaderDrawerItem.java
new file mode 100644
index 0000000..35abcfc
--- /dev/null
+++ b/src/com/android/mail/drawer/BlankHeaderDrawerItem.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.mail.drawer;
+
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.mail.R;
+import com.android.mail.ui.ControllableActivity;
+import com.android.mail.utils.FolderUri;
+
+class BlankHeaderDrawerItem extends DrawerItem {
+    BlankHeaderDrawerItem(ControllableActivity activity) {
+        super(activity, null, NONFOLDER_ITEM, null);
+    }
+
+    @Override
+    public String toString() {
+        return "[DrawerItem VIEW_BLANK_HEADER]";
+    }
+
+    /**
+     * Returns a blank divider
+     *
+     * @param convertView A previous view, perhaps null
+     * @param parent the parent of this view
+     * @return a blank header
+     */
+    @Override
+    public View getView(View convertView, ViewGroup parent) {
+        final View blankHeaderView;
+        if (convertView != null) {
+            blankHeaderView = convertView;
+        } else {
+            blankHeaderView = mInflater.inflate(R.layout.folder_list_blank_header, parent,
+                    false);
+        }
+        return blankHeaderView;
+    }
+
+    @Override
+    public boolean isHighlighted(FolderUri currentFolder, int currentType) {
+        return false;
+    }
+
+    @Override
+    public boolean isItemEnabled() {
+        return false;
+    }
+
+    @Override
+    public @DrawerItemType int getType() {
+        return VIEW_BLANK_HEADER;
+    }
+}
diff --git a/src/com/android/mail/drawer/BottomSpaceDrawerItem.java b/src/com/android/mail/drawer/BottomSpaceDrawerItem.java
new file mode 100644
index 0000000..9d8ef5e
--- /dev/null
+++ b/src/com/android/mail/drawer/BottomSpaceDrawerItem.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.mail.drawer;
+
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.mail.R;
+import com.android.mail.ui.ControllableActivity;
+import com.android.mail.utils.FolderUri;
+
+class BottomSpaceDrawerItem extends DrawerItem {
+    BottomSpaceDrawerItem(ControllableActivity activity) {
+        super(activity, null, NONFOLDER_ITEM, null);
+    }
+
+    @Override
+    public String toString() {
+        return "[DrawerItem VIEW_BOTTOM_SPACE]";
+    }
+
+    /**
+     * Returns a blank spacer
+     *
+     * @param convertView A previous view, perhaps null
+     * @param parent the parent of this view
+     * @return a blank spacer
+     */
+    @Override
+    public View getView(View convertView, ViewGroup parent) {
+        final View blankHeaderView;
+        if (convertView != null) {
+            blankHeaderView = convertView;
+        } else {
+            blankHeaderView = mInflater.inflate(R.layout.folder_list_bottom_space, parent,
+                    false);
+        }
+        return blankHeaderView;
+    }
+
+    @Override
+    public boolean isHighlighted(FolderUri currentFolder, int currentType) {
+        return false;
+    }
+
+    @Override
+    public boolean isItemEnabled() {
+        return false;
+    }
+
+    @Override
+    public @DrawerItemType int getType() {
+        return VIEW_BOTTOM_SPACE;
+    }
+}
diff --git a/src/com/android/mail/drawer/DrawerItem.java b/src/com/android/mail/drawer/DrawerItem.java
new file mode 100644
index 0000000..a360f12
--- /dev/null
+++ b/src/com/android/mail/drawer/DrawerItem.java
@@ -0,0 +1,231 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.mail.drawer;
+
+import android.support.annotation.IntDef;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.bitmap.BitmapCache;
+import com.android.mail.bitmap.ContactResolver;
+import com.android.mail.providers.Account;
+import com.android.mail.providers.Folder;
+import com.android.mail.ui.ControllableActivity;
+import com.android.mail.ui.FolderListFragment;
+import com.android.mail.utils.FolderUri;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+
+/**
+ * An element that is shown in the {@link com.android.mail.ui.FolderListFragment}. This class is
+ * only used for elements that are shown in the {@link com.android.mail.ui.DrawerFragment}.
+ * This class is an enumeration of a few element types: Account, a folder, a recent folder,
+ * or a header (a resource string). A {@link DrawerItem} can only be one type and can never
+ * switch types. Items are created using methods like
+ * {@link DrawerItem#ofAccount(ControllableActivity, Account, int, boolean, BitmapCache,
+ * ContactResolver)},
+ * {@link DrawerItem#ofWaitView(ControllableActivity)}, etc.
+ *
+ * Once created, the item can create a view using
+ * {@link #getView(android.view.View, android.view.ViewGroup)}.
+ */
+public abstract class DrawerItem {
+    public final Folder mFolder;
+    public final Account mAccount;
+
+    /** These are view types for view recycling purposes */
+    @Retention(RetentionPolicy.CLASS)
+    @IntDef({VIEW_FOLDER, VIEW_HEADER, VIEW_BLANK_HEADER, VIEW_BOTTOM_SPACE, VIEW_ACCOUNT,
+            VIEW_WAITING_FOR_SYNC, VIEW_FOOTER_HELP, VIEW_FOOTER_SETTINGS})
+    public @interface DrawerItemType {}
+    /** A normal folder, also a child, if a parent is specified. */
+    public static final int VIEW_FOLDER = 0;
+    /** A text-label which serves as a header in sectioned lists. */
+    public static final int VIEW_HEADER = 1;
+    /** A blank divider which serves as a header in sectioned lists. */
+    public static final int VIEW_BLANK_HEADER = 2;
+    /** A spacer which serves as a footer below the last item. */
+    public static final int VIEW_BOTTOM_SPACE = 3;
+    /** An account object, which allows switching accounts rather than folders. */
+    public static final int VIEW_ACCOUNT = 4;
+    /** An expandable object for expanding/collapsing more of the list */
+    public static final int VIEW_WAITING_FOR_SYNC = 5;
+    /** A footer item for Help */
+    public static final int VIEW_FOOTER_HELP = 6;
+    /** A footer item for Settings */
+    public static final int VIEW_FOOTER_SETTINGS = 7;
+    /** The value (1-indexed) of the last View type.  Useful when returning the number of types. */
+    private static final int LAST_FIELD = VIEW_FOOTER_SETTINGS + 1;
+
+    /** The parent activity */
+    protected final ControllableActivity mActivity;
+    protected final LayoutInflater mInflater;
+
+    /**
+     * These values determine the behavior of the drawer items.
+     *
+     * Either {@link #FOLDER_INBOX}, {@link #FOLDER_RECENT} or {@link #FOLDER_OTHER} when
+     * {@link #getType()} is {@link #VIEW_FOLDER}, or {@link #NONFOLDER_ITEM} otherwise.
+     */
+    @Retention(RetentionPolicy.CLASS)
+    @IntDef({UNSET, NONFOLDER_ITEM, FOLDER_INBOX, FOLDER_RECENT, FOLDER_OTHER})
+    public @interface DrawerItemCategory {}
+    public final @DrawerItemCategory int mItemCategory;
+    /** Non existent item or folder type not yet set */
+    public static final int UNSET = 0;
+    /** An unclickable text-header visually separating the different types. */
+    public static final int NONFOLDER_ITEM = 0;
+    /** An inbox folder: Inbox, ...*/
+    public static final int FOLDER_INBOX = 1;
+    /** A folder from whom a conversation was recently viewed */
+    public static final int FOLDER_RECENT = 2;
+    /** A non-inbox folder that is shown in the "everything else" group. */
+    public static final int FOLDER_OTHER = 3;
+
+    /**
+     * Creates a drawer item with every instance variable specified.
+     *
+     * @param activity the underlying activity
+     * @param folder a non-null folder, if this is a folder type
+     * @param itemCategory the type of the folder. For folders this is:
+     *            {@link #FOLDER_INBOX}, {@link #FOLDER_RECENT}, {@link #FOLDER_OTHER},
+     *            or for non-folders this is {@link #NONFOLDER_ITEM}
+     * @param account the account object, for an account drawer element
+     */
+    protected DrawerItem(ControllableActivity activity, Folder folder,
+            @DrawerItemCategory int itemCategory, Account account) {
+        mActivity = activity;
+        mFolder = folder;
+        mItemCategory = itemCategory;
+        mAccount = account;
+        mInflater = LayoutInflater.from(activity.getActivityContext());
+    }
+
+    /**
+     * Create a folder item with the given type.
+     *
+     * @param activity the underlying activity
+     * @param folder a folder that this item represents
+     * @param itemCategory one of {@link #FOLDER_INBOX}, {@link #FOLDER_RECENT} or
+     * {@link #FOLDER_OTHER}
+     * @return a drawer item for the folder.
+     */
+    public static DrawerItem ofFolder(ControllableActivity activity, Folder folder,
+            @DrawerItemCategory int itemCategory) {
+        return new FolderDrawerItem(activity, folder, itemCategory);
+    }
+
+    /**
+     * Creates an item from an account.
+     * @param activity the underlying activity
+     * @param account the account to create a drawer item for
+     * @param unreadCount the unread count of the account, pass zero if
+     * @param isCurrentAccount true if the account is the current account, false otherwise
+     * @return a drawer item for the account.
+     */
+    public static DrawerItem ofAccount(ControllableActivity activity, Account account,
+            int unreadCount, boolean isCurrentAccount, BitmapCache cache,
+            ContactResolver contactResolver) {
+        return new AccountDrawerItem(activity, account, unreadCount, isCurrentAccount, cache,
+                contactResolver);
+    }
+
+    /**
+     * Create a header item with a string resource.
+     *
+     * @param activity the underlying activity
+     * @param resource the string resource: R.string.all_folders_heading
+     * @return a drawer item for the header.
+     */
+    public static DrawerItem ofHeader(ControllableActivity activity, int resource) {
+        return new HeaderDrawerItem(activity, resource);
+    }
+
+    public static DrawerItem ofBlankHeader(ControllableActivity activity) {
+        return new BlankHeaderDrawerItem(activity);
+    }
+
+    public static DrawerItem ofBottomSpace(ControllableActivity activity) {
+        return new BottomSpaceDrawerItem(activity);
+    }
+
+    /**
+     * Create a "waiting for initialization" item.
+     *
+     * @param activity the underlying activity
+     * @return a drawer item with an indeterminate progress indicator.
+     */
+    public static DrawerItem ofWaitView(ControllableActivity activity) {
+        return new WaitViewDrawerItem(activity);
+    }
+
+    public static DrawerItem ofHelpItem(ControllableActivity activity, Account account,
+            FolderListFragment.DrawerStateListener drawerListener) {
+        return new HelpItem(activity, account, drawerListener);
+    }
+
+    public static DrawerItem ofSettingsItem(ControllableActivity activity, Account account,
+            FolderListFragment.DrawerStateListener drawerListener) {
+        return new SettingsItem(activity, account, drawerListener);
+    }
+
+    /**
+     * Returns a view for the given item. The method signature is identical to that required by a
+     * {@link android.widget.ListAdapter#getView(int, android.view.View, android.view.ViewGroup)}.
+     */
+    public abstract View getView(View convertView, ViewGroup parent);
+
+    /**
+     * Book-keeping for how many different view types there are.
+     * @return number of different types of view items
+     */
+    public static int getViewTypeCount() {
+        return LAST_FIELD;
+    }
+
+    /**
+     * Returns whether this view is enabled or not. An enabled view is one that accepts user taps
+     * and acts upon them.
+     * @return true if this view is enabled, false otherwise.
+     */
+    public abstract boolean isItemEnabled();
+
+    /**
+     * Returns whether this view is highlighted or not.
+     *
+     *
+     * @param currentFolder The current folder, according to the
+     *                      {@link com.android.mail.ui.FolderListFragment}
+     * @param currentType The type of the current folder. We want to only highlight a folder once.
+     *                    A folder might be in two places at once: in "All Folders", and in
+     *                    "Recent Folder". Valid types of selected folders are :
+     *                    {@link DrawerItem#FOLDER_INBOX}, {@link DrawerItem#FOLDER_RECENT} or
+     *                    {@link DrawerItem#FOLDER_OTHER}, or {@link DrawerItem#UNSET}.
+
+     * @return true if this DrawerItem results in a view that is highlighted (this DrawerItem is
+     *              the current folder.
+     */
+    public abstract boolean isHighlighted(FolderUri currentFolder, int currentType);
+
+    public abstract @DrawerItemType int getType();
+
+    public void onClick(View v) {}
+}
+
diff --git a/src/com/android/mail/drawer/FolderDrawerItem.java b/src/com/android/mail/drawer/FolderDrawerItem.java
new file mode 100644
index 0000000..823d686
--- /dev/null
+++ b/src/com/android/mail/drawer/FolderDrawerItem.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.mail.drawer;
+
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.mail.R;
+import com.android.mail.providers.Folder;
+import com.android.mail.ui.ControllableActivity;
+import com.android.mail.ui.FolderItemView;
+import com.android.mail.utils.FolderUri;
+
+class FolderDrawerItem extends DrawerItem {
+    FolderDrawerItem(ControllableActivity activity, Folder folder,
+            @DrawerItemCategory int folderCategory) {
+        super(activity, folder,  folderCategory, null);
+    }
+
+    @Override
+    public String toString() {
+        return "[DrawerItem VIEW_FOLDER, mFolder=" + mFolder + ", mItemCategory=" +
+                mItemCategory + "]";
+    }
+
+    /**
+     * Return a folder: either a parent folder or a normal (child or flat)
+     * folder.
+     *
+     * @param convertView a view, possibly null, to be recycled.
+     * @return a view showing a folder at the given position.
+     */
+    @Override
+    public View getView(View convertView, ViewGroup parent) {
+        final FolderItemView folderItemView;
+        if (convertView != null) {
+            folderItemView = (FolderItemView) convertView;
+        } else {
+            folderItemView =
+                    (FolderItemView) mInflater.inflate(R.layout.folder_item, parent, false);
+        }
+        folderItemView.bind(mFolder, null /* parentUri */);
+        folderItemView.setIcon(mFolder);
+        return folderItemView;
+    }
+
+    @Override
+    public boolean isHighlighted(FolderUri currentFolder, int currentType) {
+        // True if folder types and URIs are the same
+        if (currentFolder != null && mFolder != null && mFolder.folderUri != null) {
+            return (mItemCategory == currentType) && mFolder.folderUri.equals(currentFolder);
+        }
+        return false;
+    }
+
+    @Override
+    public boolean isItemEnabled() {
+        return true;
+    }
+
+    @Override
+    public @DrawerItemType int getType() {
+        return VIEW_FOLDER;
+    }
+}
diff --git a/src/com/android/mail/drawer/FooterItem.java b/src/com/android/mail/drawer/FooterItem.java
new file mode 100644
index 0000000..51bebd3
--- /dev/null
+++ b/src/com/android/mail/drawer/FooterItem.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.mail.drawer;
+
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.android.mail.R;
+import com.android.mail.providers.Account;
+import com.android.mail.ui.ControllableActivity;
+import com.android.mail.ui.DrawerController;
+import com.android.mail.ui.FolderListFragment;
+
+/**
+ * The base class of all footer items. Subclasses must fill in the logic of
+ * {@link #onFooterClicked()} which contains the behavior when the item is selected.
+ */
+public abstract class FooterItem extends DrawerItem implements View.OnClickListener {
+
+    private final FolderListFragment.DrawerStateListener mDrawerListener;
+    private final int mImageResourceId;
+    private final int mTextResourceId;
+
+    FooterItem(ControllableActivity activity, Account account,
+            FolderListFragment.DrawerStateListener drawerListener,
+            final int imageResourceId, final int textResourceId) {
+        super(activity, null, NONFOLDER_ITEM, account);
+        mDrawerListener = drawerListener;
+        mImageResourceId = imageResourceId;
+        mTextResourceId = textResourceId;
+    }
+
+    private int getImageResourceId() {
+        return mImageResourceId;
+    }
+
+    private int getTextResourceId() {
+        return mTextResourceId;
+    }
+
+    /**
+     * Executes the behavior associated with this footer item.<br>
+     * <br>
+     * WARNING: you probably don't want to call this directly; use {@link #onClick(View)} instead.
+     * This method actually performs the action, and its execution may be deferred from when the
+     * 'click' happens so we can smoothly close the drawer beforehand.
+     */
+    public abstract void onFooterClicked();
+
+    @Override
+    public final void onClick(View v) {
+        final DrawerController dc = mActivity.getDrawerController();
+        if (dc.isDrawerEnabled()) {
+            // close the drawer and defer handling the click until onDrawerClosed
+            mActivity.getAccountController().closeDrawer(false /* hasNewFolderOrAccount */,
+                    null /* nextAccount */, null /* nextFolder */);
+            mDrawerListener.setPendingFooterClick(this);
+        } else {
+            onFooterClicked();
+        }
+    }
+
+    /**
+     * For analytics
+     * @return label for analytics event
+     */
+    protected String getEventLabel() {
+        return "drawer_footer/" + mActivity.getViewMode().getModeString();
+    }
+
+    @Override
+    public View getView(View convertView, ViewGroup parent) {
+        final ViewGroup footerItemView;
+        if (convertView != null) {
+            footerItemView = (ViewGroup) convertView;
+        } else {
+            footerItemView =
+                    (ViewGroup) mInflater.inflate(R.layout.drawer_footer_item, parent, false);
+        }
+
+        // adjust the text of the footer item
+        final TextView textView = (TextView) footerItemView.
+                findViewById(R.id.drawer_footer_text);
+        textView.setText(getTextResourceId());
+
+        // adjust the icon of the footer item
+        final ImageView imageView = (ImageView) footerItemView.
+                findViewById(R.id.drawer_footer_image);
+        imageView.setImageResource(getImageResourceId());
+        return footerItemView;
+    }
+}
diff --git a/src/com/android/mail/drawer/HeaderDrawerItem.java b/src/com/android/mail/drawer/HeaderDrawerItem.java
new file mode 100644
index 0000000..e21daf1
--- /dev/null
+++ b/src/com/android/mail/drawer/HeaderDrawerItem.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.mail.drawer;
+
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import com.android.mail.R;
+import com.android.mail.ui.ControllableActivity;
+import com.android.mail.utils.FolderUri;
+
+class HeaderDrawerItem extends DrawerItem {
+    private final int mResource;
+
+    HeaderDrawerItem(ControllableActivity activity, int resource) {
+        super(activity, null, NONFOLDER_ITEM, null);
+        mResource = resource;
+    }
+
+    @Override
+    public String toString() {
+        return "[DrawerItem VIEW_HEADER, mResource=" + mResource + "]";
+    }
+
+    /**
+     * Returns a text divider between divisions.
+     *
+     * @param convertView a previous view, perhaps null
+     * @param parent the parent of this view
+     * @return a text header at the given position.
+     */
+    @Override
+    public View getView(View convertView, ViewGroup parent) {
+        final View headerView;
+        if (convertView != null) {
+            headerView = convertView;
+        } else {
+            headerView = mInflater.inflate(R.layout.folder_list_header, parent, false);
+        }
+        final TextView textView = (TextView) headerView.findViewById(R.id.header_text);
+        textView.setText(mResource);
+        return headerView;
+    }
+
+    @Override
+    public boolean isHighlighted(FolderUri currentFolder, int currentType) {
+        return false;
+    }
+
+    @Override
+    public boolean isItemEnabled() {
+        return false;
+    }
+
+    @Override
+    public @DrawerItemType int getType() {
+        return VIEW_HEADER;
+    }
+}
diff --git a/src/com/android/mail/drawer/HelpItem.java b/src/com/android/mail/drawer/HelpItem.java
new file mode 100644
index 0000000..651b7d3
--- /dev/null
+++ b/src/com/android/mail/drawer/HelpItem.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.mail.drawer;
+
+import com.android.mail.R;
+import com.android.mail.analytics.Analytics;
+import com.android.mail.providers.Account;
+import com.android.mail.ui.ControllableActivity;
+import com.android.mail.ui.FolderListFragment;
+import com.android.mail.ui.ViewMode;
+import com.android.mail.utils.FolderUri;
+
+class HelpItem extends FooterItem {
+    HelpItem(ControllableActivity activity, Account account,
+            FolderListFragment.DrawerStateListener drawerListener) {
+        super(activity, account, drawerListener,
+                R.drawable.ic_drawer_help_24dp, R.string.help_and_feedback);
+    }
+
+    @Override
+    public void onFooterClicked() {
+        Analytics.getInstance().sendMenuItemEvent(Analytics.EVENT_CATEGORY_MENU_ITEM,
+                R.id.help_info_menu_item, getEventLabel(), 0);
+        mActivity.showHelp(mAccount, ViewMode.CONVERSATION_LIST);
+    }
+
+    @Override
+    public int getType() {
+        return VIEW_FOOTER_HELP;
+    }
+
+    @Override
+    public String toString() {
+        return "[FooterItem VIEW_HELP_ITEM]";
+    }
+
+    @Override
+    public boolean isItemEnabled() {
+        return false;
+    }
+
+    @Override
+    public boolean isHighlighted(FolderUri currentFolder, int currentType) {
+        return false;
+    }
+}
diff --git a/src/com/android/mail/drawer/SettingsItem.java b/src/com/android/mail/drawer/SettingsItem.java
new file mode 100644
index 0000000..07d3fca
--- /dev/null
+++ b/src/com/android/mail/drawer/SettingsItem.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.mail.drawer;
+
+import com.android.mail.R;
+import com.android.mail.analytics.Analytics;
+import com.android.mail.providers.Account;
+import com.android.mail.ui.ControllableActivity;
+import com.android.mail.ui.FolderListFragment;
+import com.android.mail.utils.FolderUri;
+import com.android.mail.utils.Utils;
+
+class SettingsItem extends FooterItem {
+    SettingsItem(ControllableActivity activity, Account account,
+            FolderListFragment.DrawerStateListener drawerListener) {
+        super(activity, account, drawerListener,
+                R.drawable.ic_drawer_settings_24dp, R.string.menu_settings);
+    }
+
+    @Override
+    public void onFooterClicked() {
+        Analytics.getInstance().sendMenuItemEvent(Analytics.EVENT_CATEGORY_MENU_ITEM,
+                R.id.settings, getEventLabel(), 0);
+        Utils.showSettings(mActivity.getActivityContext(), mAccount);
+    }
+
+    @Override
+    public int getType() {
+        return VIEW_FOOTER_SETTINGS;
+    }
+
+    @Override
+    public boolean isHighlighted(FolderUri currentFolder, int currentType) {
+        return false;
+    }
+
+    @Override
+    public boolean isItemEnabled() {
+        return false;
+    }
+
+    @Override
+    public String toString() {
+        return "[FooterItem VIEW_SETTINGS_ITEM]";
+    }
+}
diff --git a/src/com/android/mail/drawer/WaitViewDrawerItem.java b/src/com/android/mail/drawer/WaitViewDrawerItem.java
new file mode 100644
index 0000000..ba9fc19
--- /dev/null
+++ b/src/com/android/mail/drawer/WaitViewDrawerItem.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.mail.drawer;
+
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.mail.R;
+import com.android.mail.ui.ControllableActivity;
+import com.android.mail.utils.FolderUri;
+
+class WaitViewDrawerItem extends DrawerItem {
+    WaitViewDrawerItem(ControllableActivity activity) {
+        super(activity, null, NONFOLDER_ITEM, null);
+    }
+
+    @Override
+    public String toString() {
+        return "[DrawerItem VIEW_WAITING_FOR_SYNC]";
+    }
+
+    /**
+     * Return a view for the 'Waiting for sync' item with the indeterminate progress indicator.
+     *
+     * @param convertView a view, possibly null, to be recycled.
+     * @param parent the parent hosting this view.
+     * @return a view for "Waiting for sync..." at given position.
+     */
+    @Override
+    public View getView(View convertView, ViewGroup parent) {
+        final ViewGroup emptyView;
+        if (convertView != null) {
+            emptyView = (ViewGroup) convertView;
+        } else {
+            emptyView = (ViewGroup) mInflater.inflate(R.layout.drawer_empty_view, parent, false);
+        }
+        return emptyView;
+    }
+
+    @Override
+    public boolean isHighlighted(FolderUri currentFolder, int currentType) {
+        return false;
+    }
+
+    @Override
+    public boolean isItemEnabled() {
+        return false;
+    }
+
+    @Override
+    public @DrawerItemType int getType() {
+        return VIEW_WAITING_FOR_SYNC;
+    }
+}
diff --git a/src/com/android/mail/lib/base/ByteArrays.java b/src/com/android/mail/lib/base/ByteArrays.java
deleted file mode 100644
index da811f2..0000000
--- a/src/com/android/mail/lib/base/ByteArrays.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.mail.lib.base;
-
-/**
- * Static utility methods pertaining especially to byte arrays. Note that I/O-related functionality
- * belongs in the {@code com.google.common.io} package.
- *
- * @author Chris Nokleberg
- * @author Hiroshi Yamauchi
- */
-public final class ByteArrays {
-  private ByteArrays() {}
-
-  private static final char[] HEX_DIGITS = "0123456789abcdef".toCharArray();
-
-  /**
-   * Returns the byte array formatted as a lowercase hexadecimal string. The string will be
-   * {@code 2 * bytes.length} characters long.
-   */
-  public static String toHexString(byte[] bytes) {
-    StringBuilder sb = new StringBuilder(2 * bytes.length);
-    for (byte b : bytes) {
-      sb.append(HEX_DIGITS[(b >> 4) & 0xf]).append(HEX_DIGITS[b & 0xf]);
-    }
-    return sb.toString();
-  }
-}
\ No newline at end of file
diff --git a/src/com/android/mail/lib/base/CharEscaper.java b/src/com/android/mail/lib/base/CharEscaper.java
deleted file mode 100644
index 63ee395..0000000
--- a/src/com/android/mail/lib/base/CharEscaper.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * Copyright (C) 2006 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.mail.lib.base;
-
-import static com.android.mail.lib.base.Preconditions.checkNotNull;
-
-import java.io.IOException;
-
-/**
- * An object that converts literal text into a format safe for inclusion in a particular context
- * (such as an XML document). Typically (but not always), the inverse process of "unescaping" the
- * text is performed automatically by the relevant parser.
- *
- * <p>For example, an XML escaper would convert the literal string {@code "Foo<Bar>"} into {@code
- * "Foo&lt;Bar&gt;"} to prevent {@code "<Bar>"} from being confused with an XML tag. When the
- * resulting XML document is parsed, the parser API will return this text as the original literal
- * string {@code "Foo<Bar>"}.
- *
- * <p>A {@code CharEscaper} instance is required to be stateless, and safe when used concurrently by
- * multiple threads.
- *
- * <p>Several popular escapers are defined as constants in the class {@link CharEscapers}. To create
- * your own escapers, use {@link CharEscaperBuilder}, or extend this class and implement the {@link
- * #escape(char)} method.
- *
- * @author sven@google.com (Sven Mawson)
- */
-public abstract class CharEscaper extends Escaper {
-  /**
-   * Returns the escaped form of a given literal string.
-   *
-   * @param string the literal string to be escaped
-   * @return the escaped form of {@code string}
-   * @throws NullPointerException if {@code string} is null
-   */
-  @Override public String escape(String string) {
-    checkNotNull(string);
-    // Inlineable fast-path loop which hands off to escapeSlow() only if needed
-    int length = string.length();
-    for (int index = 0; index < length; index++) {
-      if (escape(string.charAt(index)) != null) {
-        return escapeSlow(string, index);
-      }
-    }
-    return string;
-  }
-
-  /**
-   * Returns an {@code Appendable} instance which automatically escapes all text appended to it
-   * before passing the resulting text to an underlying {@code Appendable}.
-   *
-   * <p>The methods of the returned object will propagate any exceptions thrown by the underlying
-   * {@code Appendable}, and will throw {@link NullPointerException} if asked to append {@code
-   * null}, but do not otherwise throw any exceptions.
-   *
-   * <p>The escaping behavior is identical to that of {@link #escape(String)}, so the following code
-   * is always equivalent to {@code escaper.escape(string)}: <pre>   {@code
-   *
-   *   StringBuilder sb = new StringBuilder();
-   *   escaper.escape(sb).append(string);
-   *   return sb.toString();}</pre>
-   *
-   * @param out the underlying {@code Appendable} to append escaped output to
-   * @return an {@code Appendable} which passes text to {@code out} after escaping it
-   * @throws NullPointerException if {@code out} is null.
-   */
-  @Override public Appendable escape(final Appendable out) {
-    checkNotNull(out);
-
-    return new Appendable() {
-      @Override public Appendable append(CharSequence csq) throws IOException {
-        out.append(escape(csq.toString()));
-        return this;
-      }
-
-      @Override public Appendable append(CharSequence csq, int start, int end) throws IOException {
-        out.append(escape(csq.subSequence(start, end).toString()));
-        return this;
-      }
-
-      @Override public Appendable append(char c) throws IOException {
-        char[] escaped = escape(c);
-        if (escaped == null) {
-          out.append(c);
-        } else {
-          for (char e : escaped) {
-            out.append(e);
-          }
-        }
-        return this;
-      }
-    };
-  }
-
-  /**
-   * Returns the escaped form of a given literal string, starting at the given index. This method is
-   * called by the {@link #escape(String)} method when it discovers that escaping is required. It is
-   * protected to allow subclasses to override the fastpath escaping function to inline their
-   * escaping test. See {@link CharEscaperBuilder} for an example usage.
-   *
-   * @param s the literal string to be escaped
-   * @param index the index to start escaping from
-   * @return the escaped form of {@code string}
-   * @throws NullPointerException if {@code string} is null
-   */
-  protected String escapeSlow(String s, int index) {
-    int slen = s.length();
-
-    // Get a destination buffer and setup some loop variables.
-    char[] dest = Platform.charBufferFromThreadLocal();
-    int destSize = dest.length;
-    int destIndex = 0;
-    int lastEscape = 0;
-
-    // Loop through the rest of the string, replacing when needed into the
-    // destination buffer, which gets grown as needed as well.
-    for (; index < slen; index++) {
-
-      // Get a replacement for the current character.
-      char[] r = escape(s.charAt(index));
-
-      // If no replacement is needed, just continue.
-      if (r == null) continue;
-
-      int rlen = r.length;
-      int charsSkipped = index - lastEscape;
-
-      // This is the size needed to add the replacement, not the full size needed by the string. We
-      // only regrow when we absolutely must.
-      int sizeNeeded = destIndex + charsSkipped + rlen;
-      if (destSize < sizeNeeded) {
-        destSize = sizeNeeded + (slen - index) + DEST_PAD;
-        dest = growBuffer(dest, destIndex, destSize);
-      }
-
-      // If we have skipped any characters, we need to copy them now.
-      if (charsSkipped > 0) {
-        s.getChars(lastEscape, index, dest, destIndex);
-        destIndex += charsSkipped;
-      }
-
-      // Copy the replacement string into the dest buffer as needed.
-      if (rlen > 0) {
-        System.arraycopy(r, 0, dest, destIndex, rlen);
-        destIndex += rlen;
-      }
-      lastEscape = index + 1;
-    }
-
-    // Copy leftover characters if there are any.
-    int charsLeft = slen - lastEscape;
-    if (charsLeft > 0) {
-      int sizeNeeded = destIndex + charsLeft;
-      if (destSize < sizeNeeded) {
-
-        // Regrow and copy, expensive! No padding as this is the final copy.
-        dest = growBuffer(dest, destIndex, sizeNeeded);
-      }
-      s.getChars(lastEscape, slen, dest, destIndex);
-      destIndex = sizeNeeded;
-    }
-    return new String(dest, 0, destIndex);
-  }
-
-  /**
-   * Returns the escaped form of the given character, or {@code null} if this character does not
-   * need to be escaped. If an empty array is returned, this effectively strips the input character
-   * from the resulting text.
-   *
-   * <p>If the character does not need to be escaped, this method should return {@code null}, rather
-   * than a one-character array containing the character itself. This enables the escaping algorithm
-   * to perform more efficiently.
-   *
-   * <p>An escaper is expected to be able to deal with any {@code char} value, so this method should
-   * not throw any exceptions.
-   *
-   * @param c the character to escape if necessary
-   * @return the replacement characters, or {@code null} if no escaping was needed
-   */
-  protected abstract char[] escape(char c);
-
-  /**
-   * Helper method to grow the character buffer as needed, this only happens once in a while so it's
-   * ok if it's in a method call. If the index passed in is 0 then no copying will be done.
-   */
-  private static char[] growBuffer(char[] dest, int index, int size) {
-    char[] copy = new char[size];
-    if (index > 0) {
-      System.arraycopy(dest, 0, copy, 0, index);
-    }
-    return copy;
-  }
-
-  /**
-   * The amount of padding to use when growing the escape buffer.
-   */
-  private static final int DEST_PAD = 32;
-}
\ No newline at end of file
diff --git a/src/com/android/mail/lib/base/CharEscaperBuilder.java b/src/com/android/mail/lib/base/CharEscaperBuilder.java
deleted file mode 100644
index a11eac2..0000000
--- a/src/com/android/mail/lib/base/CharEscaperBuilder.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright (C) 2006-2007 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.mail.lib.base;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Simple helper class to build a "sparse" array of objects based on the indexes that were added to
- * it. The array will be from 0 to the maximum index given. All non-set indexes will contain null
- * (so it's not really a sparse array, just a pseudo sparse array). The builder can also return a
- * CharEscaper based on the generated array.
- *
- * @author sven@google.com (Sven Mawson)
- */
-public class CharEscaperBuilder {
-  /**
-   * Simple decorator that turns an array of replacement char[]s into a CharEscaper, this results in
-   * a very fast escape method.
-   */
-  private static class CharArrayDecorator extends CharEscaper {
-    private final char[][] replacements;
-    private final int replaceLength;
-
-    CharArrayDecorator(char[][] replacements) {
-      this.replacements = replacements;
-      this.replaceLength = replacements.length;
-    }
-
-    /*
-     * Overriding escape method to be slightly faster for this decorator. We test the replacements
-     * array directly, saving a method call.
-     */
-    @Override public String escape(String s) {
-      int slen = s.length();
-      for (int index = 0; index < slen; index++) {
-        char c = s.charAt(index);
-        if (c < replacements.length && replacements[c] != null) {
-          return escapeSlow(s, index);
-        }
-      }
-      return s;
-    }
-
-    @Override protected char[] escape(char c) {
-      return c < replaceLength ? replacements[c] : null;
-    }
-  }
-
-  // Replacement mappings.
-  private final Map<Character, String> map;
-
-  // The highest index we've seen so far.
-  private int max = -1;
-
-  /**
-   * Construct a new sparse array builder.
-   */
-  public CharEscaperBuilder() {
-    this.map = new HashMap<Character, String>();
-  }
-
-  /**
-   * Add a new mapping from an index to an object to the escaping.
-   */
-  public CharEscaperBuilder addEscape(char c, String r) {
-    map.put(c, r);
-    if (c > max) {
-      max = c;
-    }
-    return this;
-  }
-
-  /**
-   * Add multiple mappings at once for a particular index.
-   */
-  public CharEscaperBuilder addEscapes(char[] cs, String r) {
-    for (char c : cs) {
-      addEscape(c, r);
-    }
-    return this;
-  }
-
-  /**
-   * Convert this builder into an array of char[]s where the maximum index is the value of the
-   * highest character that has been seen. The array will be sparse in the sense that any unseen
-   * index will default to null.
-   *
-   * @return a "sparse" array that holds the replacement mappings.
-   */
-  public char[][] toArray() {
-    char[][] result = new char[max + 1][];
-    for (Map.Entry<Character, String> entry : map.entrySet()) {
-      result[entry.getKey()] = entry.getValue().toCharArray();
-    }
-    return result;
-  }
-
-  /**
-   * Convert this builder into a char escaper which is just a decorator around the underlying array
-   * of replacement char[]s.
-   *
-   * @return an escaper that escapes based on the underlying array.
-   */
-  public CharEscaper toEscaper() {
-    return new CharArrayDecorator(toArray());
-  }
-}
\ No newline at end of file
diff --git a/src/com/android/mail/lib/base/CharEscapers.java b/src/com/android/mail/lib/base/CharEscapers.java
deleted file mode 100644
index 7a76ffe..0000000
--- a/src/com/android/mail/lib/base/CharEscapers.java
+++ /dev/null
@@ -1,1102 +0,0 @@
-/*
- * Copyright (C) 2006 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.mail.lib.base;
-
-import static com.android.mail.lib.base.Preconditions.checkNotNull;
-
-import java.io.IOException;
-
-/**
- * Utility functions for dealing with {@code CharEscaper}s, and some commonly
- * used {@code CharEscaper} instances.
- *
- * @author sven@google.com (Sven Mawson)
- * @author laurence@google.com (Laurence Gonsalves)
- */
-public final class CharEscapers {
-  private CharEscapers() {}
-
-  // TODO(matevossian): To implementors of escapers --
-  //                    For each xxxEscaper method, please add links to external
-  //                    reference pages that we consider authoritative for what
-  //                    that escaper should exactly be doing.
-
-  /**
-   * Performs no escaping.
-   */
-  private static final CharEscaper NULL_ESCAPER = new CharEscaper() {
-      @Override
-    public String escape(String string) {
-        checkNotNull(string);
-        return string;
-      }
-
-      @Override
-      public Appendable escape(final Appendable out) {
-        checkNotNull(out);
-
-        // we can't simply return out because the CharEscaper contract says that
-        // the returned Appendable will throw a NullPointerException if asked to
-        // append null.
-        return new Appendable() {
-            @Override public Appendable append(CharSequence csq) throws IOException {
-              checkNotNull(csq);
-              out.append(csq);
-              return this;
-            }
-
-            @Override public Appendable append(CharSequence csq, int start, int end)
-                throws IOException {
-              checkNotNull(csq);
-              out.append(csq, start, end);
-              return this;
-            }
-
-            @Override public Appendable append(char c) throws IOException {
-              out.append(c);
-              return this;
-            }
-          };
-      }
-
-      @Override
-      protected char[] escape(char c) {
-        return null;
-      }
-    };
-
-  /**
-   * Returns a {@link CharEscaper} that does no escaping.
-   */
-  public static CharEscaper nullEscaper() {
-    return NULL_ESCAPER;
-  }
-
-  /**
-   * Returns a {@link CharEscaper} instance that escapes special characters in a
-   * string so it can safely be included in an XML document in either element
-   * content or attribute values.
-   *
-   * <p><b>Note</b></p>: silently removes null-characters and control
-   * characters, as there is no way to represent them in XML.
-   */
-  public static CharEscaper xmlEscaper() {
-    return XML_ESCAPER;
-  }
-
-  /**
-   * Escapes special characters from a string so it can safely be included in an
-   * XML document in either element content or attribute values.  Also removes
-   * null-characters and control characters, as there is no way to represent
-   * them in XML.
-   */
-  private static final CharEscaper XML_ESCAPER = newBasicXmlEscapeBuilder()
-      .addEscape('"', "&quot;")
-      .addEscape('\'', "&apos;")
-      .toEscaper();
-
-  /**
-   * Returns a {@link CharEscaper} instance that escapes special characters in a
-   * string so it can safely be included in an XML document in element content.
-   *
-   * <p><b>Note</b></p>: double and single quotes are not escaped, so it is not
-   * safe to use this escaper to escape attribute values. Use the
-   * {@link #xmlEscaper()} escaper to escape attribute values or if you are
-   * unsure. Also silently removes non-whitespace control characters, as there
-   * is no way to represent them in XML.
-   */
-  public static CharEscaper xmlContentEscaper() {
-    return XML_CONTENT_ESCAPER;
-  }
-
-  /**
-   * Escapes special characters from a string so it can safely be included in an
-   * XML document in element content.  Note that quotes are <em>not</em>
-   * escaped, so <em>this is not safe for use in attribute values</em>. Use
-   * {@link #XML_ESCAPER} for attribute values, or if you are unsure.  Also
-   * removes non-whitespace control characters, as there is no way to represent
-   * them in XML.
-   */
-  private static final CharEscaper XML_CONTENT_ESCAPER =
-      newBasicXmlEscapeBuilder().toEscaper();
-
-  /**
-   * Returns a {@link CharEscaper} instance that escapes special characters in a
-   * string so it can safely be included in an HTML document in either element
-   * content or attribute values.
-   *
-   * <p><b>Note</b></p>: alters non-ASCII and control characters.
-   *
-   * The entity list was taken from:
-   * <a href="http://www.w3.org/TR/html4/sgml/entities.html">here</a>
-   */
-  public static CharEscaper htmlEscaper() {
-    return HtmlEscaperHolder.HTML_ESCAPER;
-  }
-
-  /**
-   * A lazy initialization holder for HTML_ESCAPER.
-   */
-  private static class HtmlEscaperHolder {
-    private static final CharEscaper HTML_ESCAPER
-        = new HtmlCharEscaper(new CharEscaperBuilder()
-            .addEscape('"',      "&quot;")
-            .addEscape('\'',     "&#39;")
-            .addEscape('&',      "&amp;")
-            .addEscape('<',      "&lt;")
-            .addEscape('>',      "&gt;")
-            .addEscape('\u00A0', "&nbsp;")
-            .addEscape('\u00A1', "&iexcl;")
-            .addEscape('\u00A2', "&cent;")
-            .addEscape('\u00A3', "&pound;")
-            .addEscape('\u00A4', "&curren;")
-            .addEscape('\u00A5', "&yen;")
-            .addEscape('\u00A6', "&brvbar;")
-            .addEscape('\u00A7', "&sect;")
-            .addEscape('\u00A8', "&uml;")
-            .addEscape('\u00A9', "&copy;")
-            .addEscape('\u00AA', "&ordf;")
-            .addEscape('\u00AB', "&laquo;")
-            .addEscape('\u00AC', "&not;")
-            .addEscape('\u00AD', "&shy;")
-            .addEscape('\u00AE', "&reg;")
-            .addEscape('\u00AF', "&macr;")
-            .addEscape('\u00B0', "&deg;")
-            .addEscape('\u00B1', "&plusmn;")
-            .addEscape('\u00B2', "&sup2;")
-            .addEscape('\u00B3', "&sup3;")
-            .addEscape('\u00B4', "&acute;")
-            .addEscape('\u00B5', "&micro;")
-            .addEscape('\u00B6', "&para;")
-            .addEscape('\u00B7', "&middot;")
-            .addEscape('\u00B8', "&cedil;")
-            .addEscape('\u00B9', "&sup1;")
-            .addEscape('\u00BA', "&ordm;")
-            .addEscape('\u00BB', "&raquo;")
-            .addEscape('\u00BC', "&frac14;")
-            .addEscape('\u00BD', "&frac12;")
-            .addEscape('\u00BE', "&frac34;")
-            .addEscape('\u00BF', "&iquest;")
-            .addEscape('\u00C0', "&Agrave;")
-            .addEscape('\u00C1', "&Aacute;")
-            .addEscape('\u00C2', "&Acirc;")
-            .addEscape('\u00C3', "&Atilde;")
-            .addEscape('\u00C4', "&Auml;")
-            .addEscape('\u00C5', "&Aring;")
-            .addEscape('\u00C6', "&AElig;")
-            .addEscape('\u00C7', "&Ccedil;")
-            .addEscape('\u00C8', "&Egrave;")
-            .addEscape('\u00C9', "&Eacute;")
-            .addEscape('\u00CA', "&Ecirc;")
-            .addEscape('\u00CB', "&Euml;")
-            .addEscape('\u00CC', "&Igrave;")
-            .addEscape('\u00CD', "&Iacute;")
-            .addEscape('\u00CE', "&Icirc;")
-            .addEscape('\u00CF', "&Iuml;")
-            .addEscape('\u00D0', "&ETH;")
-            .addEscape('\u00D1', "&Ntilde;")
-            .addEscape('\u00D2', "&Ograve;")
-            .addEscape('\u00D3', "&Oacute;")
-            .addEscape('\u00D4', "&Ocirc;")
-            .addEscape('\u00D5', "&Otilde;")
-            .addEscape('\u00D6', "&Ouml;")
-            .addEscape('\u00D7', "&times;")
-            .addEscape('\u00D8', "&Oslash;")
-            .addEscape('\u00D9', "&Ugrave;")
-            .addEscape('\u00DA', "&Uacute;")
-            .addEscape('\u00DB', "&Ucirc;")
-            .addEscape('\u00DC', "&Uuml;")
-            .addEscape('\u00DD', "&Yacute;")
-            .addEscape('\u00DE', "&THORN;")
-            .addEscape('\u00DF', "&szlig;")
-            .addEscape('\u00E0', "&agrave;")
-            .addEscape('\u00E1', "&aacute;")
-            .addEscape('\u00E2', "&acirc;")
-            .addEscape('\u00E3', "&atilde;")
-            .addEscape('\u00E4', "&auml;")
-            .addEscape('\u00E5', "&aring;")
-            .addEscape('\u00E6', "&aelig;")
-            .addEscape('\u00E7', "&ccedil;")
-            .addEscape('\u00E8', "&egrave;")
-            .addEscape('\u00E9', "&eacute;")
-            .addEscape('\u00EA', "&ecirc;")
-            .addEscape('\u00EB', "&euml;")
-            .addEscape('\u00EC', "&igrave;")
-            .addEscape('\u00ED', "&iacute;")
-            .addEscape('\u00EE', "&icirc;")
-            .addEscape('\u00EF', "&iuml;")
-            .addEscape('\u00F0', "&eth;")
-            .addEscape('\u00F1', "&ntilde;")
-            .addEscape('\u00F2', "&ograve;")
-            .addEscape('\u00F3', "&oacute;")
-            .addEscape('\u00F4', "&ocirc;")
-            .addEscape('\u00F5', "&otilde;")
-            .addEscape('\u00F6', "&ouml;")
-            .addEscape('\u00F7', "&divide;")
-            .addEscape('\u00F8', "&oslash;")
-            .addEscape('\u00F9', "&ugrave;")
-            .addEscape('\u00FA', "&uacute;")
-            .addEscape('\u00FB', "&ucirc;")
-            .addEscape('\u00FC', "&uuml;")
-            .addEscape('\u00FD', "&yacute;")
-            .addEscape('\u00FE', "&thorn;")
-            .addEscape('\u00FF', "&yuml;")
-            .addEscape('\u0152', "&OElig;")
-            .addEscape('\u0153', "&oelig;")
-            .addEscape('\u0160', "&Scaron;")
-            .addEscape('\u0161', "&scaron;")
-            .addEscape('\u0178', "&Yuml;")
-            .addEscape('\u0192', "&fnof;")
-            .addEscape('\u02C6', "&circ;")
-            .addEscape('\u02DC', "&tilde;")
-            .addEscape('\u0391', "&Alpha;")
-            .addEscape('\u0392', "&Beta;")
-            .addEscape('\u0393', "&Gamma;")
-            .addEscape('\u0394', "&Delta;")
-            .addEscape('\u0395', "&Epsilon;")
-            .addEscape('\u0396', "&Zeta;")
-            .addEscape('\u0397', "&Eta;")
-            .addEscape('\u0398', "&Theta;")
-            .addEscape('\u0399', "&Iota;")
-            .addEscape('\u039A', "&Kappa;")
-            .addEscape('\u039B', "&Lambda;")
-            .addEscape('\u039C', "&Mu;")
-            .addEscape('\u039D', "&Nu;")
-            .addEscape('\u039E', "&Xi;")
-            .addEscape('\u039F', "&Omicron;")
-            .addEscape('\u03A0', "&Pi;")
-            .addEscape('\u03A1', "&Rho;")
-            .addEscape('\u03A3', "&Sigma;")
-            .addEscape('\u03A4', "&Tau;")
-            .addEscape('\u03A5', "&Upsilon;")
-            .addEscape('\u03A6', "&Phi;")
-            .addEscape('\u03A7', "&Chi;")
-            .addEscape('\u03A8', "&Psi;")
-            .addEscape('\u03A9', "&Omega;")
-            .addEscape('\u03B1', "&alpha;")
-            .addEscape('\u03B2', "&beta;")
-            .addEscape('\u03B3', "&gamma;")
-            .addEscape('\u03B4', "&delta;")
-            .addEscape('\u03B5', "&epsilon;")
-            .addEscape('\u03B6', "&zeta;")
-            .addEscape('\u03B7', "&eta;")
-            .addEscape('\u03B8', "&theta;")
-            .addEscape('\u03B9', "&iota;")
-            .addEscape('\u03BA', "&kappa;")
-            .addEscape('\u03BB', "&lambda;")
-            .addEscape('\u03BC', "&mu;")
-            .addEscape('\u03BD', "&nu;")
-            .addEscape('\u03BE', "&xi;")
-            .addEscape('\u03BF', "&omicron;")
-            .addEscape('\u03C0', "&pi;")
-            .addEscape('\u03C1', "&rho;")
-            .addEscape('\u03C2', "&sigmaf;")
-            .addEscape('\u03C3', "&sigma;")
-            .addEscape('\u03C4', "&tau;")
-            .addEscape('\u03C5', "&upsilon;")
-            .addEscape('\u03C6', "&phi;")
-            .addEscape('\u03C7', "&chi;")
-            .addEscape('\u03C8', "&psi;")
-            .addEscape('\u03C9', "&omega;")
-            .addEscape('\u03D1', "&thetasym;")
-            .addEscape('\u03D2', "&upsih;")
-            .addEscape('\u03D6', "&piv;")
-            .addEscape('\u2002', "&ensp;")
-            .addEscape('\u2003', "&emsp;")
-            .addEscape('\u2009', "&thinsp;")
-            .addEscape('\u200C', "&zwnj;")
-            .addEscape('\u200D', "&zwj;")
-            .addEscape('\u200E', "&lrm;")
-            .addEscape('\u200F', "&rlm;")
-            .addEscape('\u2013', "&ndash;")
-            .addEscape('\u2014', "&mdash;")
-            .addEscape('\u2018', "&lsquo;")
-            .addEscape('\u2019', "&rsquo;")
-            .addEscape('\u201A', "&sbquo;")
-            .addEscape('\u201C', "&ldquo;")
-            .addEscape('\u201D', "&rdquo;")
-            .addEscape('\u201E', "&bdquo;")
-            .addEscape('\u2020', "&dagger;")
-            .addEscape('\u2021', "&Dagger;")
-            .addEscape('\u2022', "&bull;")
-            .addEscape('\u2026', "&hellip;")
-            .addEscape('\u2030', "&permil;")
-            .addEscape('\u2032', "&prime;")
-            .addEscape('\u2033', "&Prime;")
-            .addEscape('\u2039', "&lsaquo;")
-            .addEscape('\u203A', "&rsaquo;")
-            .addEscape('\u203E', "&oline;")
-            .addEscape('\u2044', "&frasl;")
-            .addEscape('\u20AC', "&euro;")
-            .addEscape('\u2111', "&image;")
-            .addEscape('\u2118', "&weierp;")
-            .addEscape('\u211C', "&real;")
-            .addEscape('\u2122', "&trade;")
-            .addEscape('\u2135', "&alefsym;")
-            .addEscape('\u2190', "&larr;")
-            .addEscape('\u2191', "&uarr;")
-            .addEscape('\u2192', "&rarr;")
-            .addEscape('\u2193', "&darr;")
-            .addEscape('\u2194', "&harr;")
-            .addEscape('\u21B5', "&crarr;")
-            .addEscape('\u21D0', "&lArr;")
-            .addEscape('\u21D1', "&uArr;")
-            .addEscape('\u21D2', "&rArr;")
-            .addEscape('\u21D3', "&dArr;")
-            .addEscape('\u21D4', "&hArr;")
-            .addEscape('\u2200', "&forall;")
-            .addEscape('\u2202', "&part;")
-            .addEscape('\u2203', "&exist;")
-            .addEscape('\u2205', "&empty;")
-            .addEscape('\u2207', "&nabla;")
-            .addEscape('\u2208', "&isin;")
-            .addEscape('\u2209', "&notin;")
-            .addEscape('\u220B', "&ni;")
-            .addEscape('\u220F', "&prod;")
-            .addEscape('\u2211', "&sum;")
-            .addEscape('\u2212', "&minus;")
-            .addEscape('\u2217', "&lowast;")
-            .addEscape('\u221A', "&radic;")
-            .addEscape('\u221D', "&prop;")
-            .addEscape('\u221E', "&infin;")
-            .addEscape('\u2220', "&ang;")
-            .addEscape('\u2227', "&and;")
-            .addEscape('\u2228', "&or;")
-            .addEscape('\u2229', "&cap;")
-            .addEscape('\u222A', "&cup;")
-            .addEscape('\u222B', "&int;")
-            .addEscape('\u2234', "&there4;")
-            .addEscape('\u223C', "&sim;")
-            .addEscape('\u2245', "&cong;")
-            .addEscape('\u2248', "&asymp;")
-            .addEscape('\u2260', "&ne;")
-            .addEscape('\u2261', "&equiv;")
-            .addEscape('\u2264', "&le;")
-            .addEscape('\u2265', "&ge;")
-            .addEscape('\u2282', "&sub;")
-            .addEscape('\u2283', "&sup;")
-            .addEscape('\u2284', "&nsub;")
-            .addEscape('\u2286', "&sube;")
-            .addEscape('\u2287', "&supe;")
-            .addEscape('\u2295', "&oplus;")
-            .addEscape('\u2297', "&otimes;")
-            .addEscape('\u22A5', "&perp;")
-            .addEscape('\u22C5', "&sdot;")
-            .addEscape('\u2308', "&lceil;")
-            .addEscape('\u2309', "&rceil;")
-            .addEscape('\u230A', "&lfloor;")
-            .addEscape('\u230B', "&rfloor;")
-            .addEscape('\u2329', "&lang;")
-            .addEscape('\u232A', "&rang;")
-            .addEscape('\u25CA', "&loz;")
-            .addEscape('\u2660', "&spades;")
-            .addEscape('\u2663', "&clubs;")
-            .addEscape('\u2665', "&hearts;")
-            .addEscape('\u2666', "&diams;")
-            .toArray());
-  }
-
-  /**
-   * Returns a {@link CharEscaper} instance that escapes special characters in a
-   * string so it can safely be included in an HTML document in either element
-   * content or attribute values.
-   *
-   * <p><b>Note</b></p>: does not alter non-ASCII and control characters.
-   */
-  public static CharEscaper asciiHtmlEscaper() {
-    return ASCII_HTML_ESCAPER;
-  }
-
-  /**
-   * Escapes special characters from a string so it can safely be included in an
-   * HTML document in either element content or attribute values. Does
-   * <em>not</em> alter non-ASCII characters or control characters.
-   */
-  private static final CharEscaper ASCII_HTML_ESCAPER = new CharEscaperBuilder()
-      .addEscape('"', "&quot;")
-      .addEscape('\'', "&#39;")
-      .addEscape('&', "&amp;")
-      .addEscape('<', "&lt;")
-      .addEscape('>', "&gt;")
-      .toEscaper();
-
-  /**
-   * Returns an {@link Escaper} instance that escapes Java chars so they can be
-   * safely included in URIs. For details on escaping URIs, see section 2.4 of
-   * <a href="http://www.ietf.org/rfc/rfc2396.txt">RFC 2396</a>.
-   *
-   * <p>When encoding a String, the following rules apply:
-   * <ul>
-   * <li>The alphanumeric characters "a" through "z", "A" through "Z" and "0"
-   *     through "9" remain the same.
-   * <li>The special characters ".", "-", "*", and "_" remain the same.
-   * <li>The space character " " is converted into a plus sign "+".
-   * <li>All other characters are converted into one or more bytes using UTF-8
-   *     encoding and each byte is then represented by the 3-character string
-   *     "%XY", where "XY" is the two-digit, uppercase, hexadecimal
-   *     representation of the byte value.
-   * <ul>
-   *
-   * <p><b>Note</b>: Unlike other escapers, URI escapers produce uppercase
-   * hexadecimal sequences. From <a href="http://www.ietf.org/rfc/rfc3986.txt">
-   * RFC 3986</a>:<br>
-   * <i>"URI producers and normalizers should use uppercase hexadecimal digits
-   * for all percent-encodings."</i>
-   *
-   * <p>This escaper has identical behavior to (but is potentially much faster
-   * than):
-   * <ul>
-   * <li>{@link com.google.httputil.FastURLEncoder#encode(String)}
-   * <li>{@link com.google.httputil.FastURLEncoder#encode(String,String)}
-   *     with the encoding name "UTF-8"
-   * <li>{@link java.net.URLEncoder#encode(String, String)}
-   *     with the encoding name "UTF-8"
-   * </ul>
-   *
-   * <p>This method is equivalent to {@code uriEscaper(true)}.
-   */
-  public static Escaper uriEscaper() {
-    return uriEscaper(true);
-  }
-
-  /**
-   * Returns an {@link Escaper} instance that escapes Java chars so they can be
-   * safely included in URI path segments. For details on escaping URIs, see
-   * section 2.4 of <a href="http://www.ietf.org/rfc/rfc3986.txt">RFC 3986</a>.
-   *
-   * <p>When encoding a String, the following rules apply:
-   * <ul>
-   * <li>The alphanumeric characters "a" through "z", "A" through "Z" and "0"
-   *     through "9" remain the same.
-   * <li>The unreserved characters ".", "-", "~", and "_" remain the same.
-   * <li>The general delimiters "@" and ":" remain the same.
-   * <li>The subdelimiters "!", "$", "&amp;", "'", "(", ")", "*", ",", ";",
-   *     and "=" remain the same.
-   * <li>The space character " " is converted into %20.
-   * <li>All other characters are converted into one or more bytes using UTF-8
-   *     encoding and each byte is then represented by the 3-character string
-   *     "%XY", where "XY" is the two-digit, uppercase, hexadecimal
-   *     representation of the byte value.
-   * </ul>
-   *
-   * <p><b>Note</b>: Unlike other escapers, URI escapers produce uppercase
-   * hexadecimal sequences. From <a href="http://www.ietf.org/rfc/rfc3986.txt">
-   * RFC 3986</a>:<br>
-   * <i>"URI producers and normalizers should use uppercase hexadecimal digits
-   * for all percent-encodings."</i>
-   */
-  public static Escaper uriPathEscaper() {
-    return URI_PATH_ESCAPER;
-  }
-
-  /**
-   * Returns an {@link Escaper} instance that escapes Java chars so they can be
-   * safely included in URI query string segments. When the query string
-   * consists of a sequence of name=value pairs separated by &amp;, the names
-   * and values should be individually encoded. If you escape an entire query
-   * string in one pass with this escaper, then the "=" and "&amp;" characters
-   * used as separators will also be escaped.
-   *
-   * <p>This escaper is also suitable for escaping fragment identifiers.
-   *
-   * <p>For details on escaping URIs, see
-   * section 2.4 of <a href="http://www.ietf.org/rfc/rfc3986.txt">RFC 3986</a>.
-   *
-   * <p>When encoding a String, the following rules apply:
-   * <ul>
-   * <li>The alphanumeric characters "a" through "z", "A" through "Z" and "0"
-   *     through "9" remain the same.
-   * <li>The unreserved characters ".", "-", "~", and "_" remain the same.
-   * <li>The general delimiters "@" and ":" remain the same.
-   * <li>The path delimiters "/" and "?" remain the same.
-   * <li>The subdelimiters "!", "$", "'", "(", ")", "*", ",", and ";",
-   *     remain the same.
-   * <li>The space character " " is converted into %20.
-   * <li>The equals sign "=" is converted into %3D.
-   * <li>The ampersand "&amp;" is converted into %26.
-   * <li>All other characters are converted into one or more bytes using UTF-8
-   *     encoding and each byte is then represented by the 3-character string
-   *     "%XY", where "XY" is the two-digit, uppercase, hexadecimal
-   *     representation of the byte value.
-   * </ul>
-   *
-   * <p><b>Note</b>: Unlike other escapers, URI escapers produce uppercase
-   * hexadecimal sequences. From <a href="http://www.ietf.org/rfc/rfc3986.txt">
-   * RFC 3986</a>:<br>
-   * <i>"URI producers and normalizers should use uppercase hexadecimal digits
-   * for all percent-encodings."</i>
-   *
-   * <p>This method is equivalent to {@code uriQueryStringEscaper(false)}.
-   */
-  public static Escaper uriQueryStringEscaper() {
-    return uriQueryStringEscaper(false);
-  }
-
-  /**
-   * Returns a {@link Escaper} instance that escapes Java characters so they can
-   * be safely included in URIs. For details on escaping URIs, see section 2.4
-   * of <a href="http://www.ietf.org/rfc/rfc2396.txt">RFC 2396</a>.
-   *
-   * <p>When encoding a String, the following rules apply:
-   * <ul>
-   * <li>The alphanumeric characters "a" through "z", "A" through "Z" and "0"
-   *     through "9" remain the same.
-   * <li>The special characters ".", "-", "*", and "_" remain the same.
-   * <li>If {@code plusForSpace} was specified, the space character " " is
-   *     converted into a plus sign "+". Otherwise it is converted into "%20".
-   * <li>All other characters are converted into one or more bytes using UTF-8
-   *     encoding and each byte is then represented by the 3-character string
-   *     "%XY", where "XY" is the two-digit, uppercase, hexadecimal
-   *     representation of the byte value.
-   * </ul>
-   *
-   * <p><b>Note</b>: Unlike other escapers, URI escapers produce uppercase
-   * hexadecimal sequences. From <a href="http://www.ietf.org/rfc/rfc3986.txt">
-   * RFC 3986</a>:<br>
-   * <i>"URI producers and normalizers should use uppercase hexadecimal digits
-   * for all percent-encodings."</i>
-   *
-   * @param plusForSpace if {@code true} space is escaped to {@code +} otherwise
-   *        it is escaped to {@code %20}. Although common, the escaping of
-   *        spaces as plus signs has a very ambiguous status in the relevant
-   *        specifications. You should prefer {@code %20} unless you are doing
-   *        exact character-by-character comparisons of URLs and backwards
-   *        compatibility requires you to use plus signs.
-   *
-   * @see #uriEscaper()
-   */
-  public static Escaper uriEscaper(boolean plusForSpace) {
-    return plusForSpace ? URI_ESCAPER : URI_ESCAPER_NO_PLUS;
-  }
-
-  /**
-   * Returns an {@link Escaper} instance that escapes Java chars so they can be
-   * safely included in URI query string segments. When the query string
-   * consists of a sequence of name=value pairs separated by &amp;, the names
-   * and values should be individually encoded. If you escape an entire query
-   * string in one pass with this escaper, then the "=" and "&amp;" characters
-   * used as separators will also be escaped.
-   *
-   * <p>This escaper is also suitable for escaping fragment identifiers.
-   *
-   * <p>For details on escaping URIs, see
-   * section 2.4 of <a href="http://www.ietf.org/rfc/rfc3986.txt">RFC 3986</a>.
-   *
-   * <p>When encoding a String, the following rules apply:
-   * <ul>
-   * <li>The alphanumeric characters "a" through "z", "A" through "Z" and "0"
-   *     through "9" remain the same.
-   * <li>The unreserved characters ".", "-", "~", and "_" remain the same.
-   * <li>The general delimiters "@" and ":" remain the same.
-   * <li>The path delimiters "/" and "?" remain the same.
-   * <li>The subdelimiters "!", "$", "'", "(", ")", "*", ",", and ";",
-   *     remain the same.
-   * <li>If {@code plusForSpace} was specified, the space character " " is
-   *     converted into a plus sign "+". Otherwise it is converted into "%20".
-   * <li>The equals sign "=" is converted into %3D.
-   * <li>The ampersand "&amp;" is converted into %26.
-   * <li>All other characters are converted into one or more bytes using UTF-8
-   *     encoding and each byte is then represented by the 3-character string
-   *     "%XY", where "XY" is the two-digit, uppercase, hexadecimal
-   *     representation of the byte value.
-   * </ul>
-   *
-   * <p><b>Note</b>: Unlike other escapers, URI escapers produce uppercase
-   * hexadecimal sequences. From <a href="http://www.ietf.org/rfc/rfc3986.txt">
-   * RFC 3986</a>:<br>
-   * <i>"URI producers and normalizers should use uppercase hexadecimal digits
-   * for all percent-encodings."</i>
-   *
-   * @param plusForSpace if {@code true} space is escaped to {@code +} otherwise
-   *        it is escaped to {@code %20}. Although common, the escaping of
-   *        spaces as plus signs has a very ambiguous status in the relevant
-   *        specifications. You should prefer {@code %20} unless you are doing
-   *        exact character-by-character comparisons of URLs and backwards
-   *        compatibility requires you to use plus signs.
-   *
-   * @see #uriQueryStringEscaper()
-   */
-  public static Escaper uriQueryStringEscaper(boolean plusForSpace) {
-    return plusForSpace ?
-           URI_QUERY_STRING_ESCAPER_WITH_PLUS : URI_QUERY_STRING_ESCAPER;
-  }
-
-  private static final Escaper URI_ESCAPER =
-      new PercentEscaper(PercentEscaper.SAFECHARS_URLENCODER, true);
-
-  private static final Escaper URI_ESCAPER_NO_PLUS =
-      new PercentEscaper(PercentEscaper.SAFECHARS_URLENCODER, false);
-
-  private static final Escaper URI_PATH_ESCAPER =
-      new PercentEscaper(PercentEscaper.SAFEPATHCHARS_URLENCODER, false);
-
-  private static final Escaper URI_QUERY_STRING_ESCAPER =
-      new PercentEscaper(PercentEscaper.SAFEQUERYSTRINGCHARS_URLENCODER, false);
-
-  private static final Escaper URI_QUERY_STRING_ESCAPER_WITH_PLUS =
-      new PercentEscaper(PercentEscaper.SAFEQUERYSTRINGCHARS_URLENCODER, true);
-
-  /**
-   * Returns a {@link Escaper} instance that escapes Java characters in a manner
-   * compatible with the C++ webutil/url URL class (the {@code kGoogle1Escape}
-   * set).
-   *
-   * <p>When encoding a String, the following rules apply:
-   * <ul>
-   * <li>The alphanumeric characters "a" through "z", "A" through "Z" and "0"
-   * through "9" remain the same.
-   * <li>The special characters "!", "(", ")", "*", "-", ".", "_", "~", ",", "/"
-   * and ":" remain the same.
-   * <li>The space character " " is converted into a plus sign "+".
-   * <li>All other characters are converted into one or more bytes using UTF-8
-   *     encoding and each byte is then represented by the 3-character string
-   *     "%XY", where "XY" is the two-digit, uppercase, hexadecimal
-   *     representation of the byte value.
-   * </ul>
-   *
-   * <p><b>Note</b>: Unlike other escapers, URI escapers produce uppercase
-   * hexadecimal sequences. From <a href="http://www.ietf.org/rfc/rfc3986.txt">
-   * RFC 3986</a>:<br>
-   * <i>"URI producers and normalizers should use uppercase hexadecimal digits
-   * for all percent-encodings."</i>
-   *
-   * <p><b>Note</b>: This escaper is a special case and is <em>not
-   * compliant</em> with <a href="http://www.ietf.org/rfc/rfc2396.txt">
-   * RFC 2396</a>. Specifically it will not escape "/", ":" and ",". This is
-   * only provided for certain limited use cases and you should favor using
-   * {@link #uriEscaper()} whenever possible.
-   */
-  public static Escaper cppUriEscaper() {
-    return CPP_URI_ESCAPER;
-  }
-
-  // Based on comments from FastURLEncoder:
-  // These octets mimic the ones escaped by the C++ webutil/url URL class --
-  // the kGoogle1Escape set.
-  // To produce the same escaping as C++, use this set with the plusForSpace
-  // option.
-  // WARNING: Contrary to RFC 2396 ",", "/" and ":" are listed as safe here.
-  private static final Escaper CPP_URI_ESCAPER =
-      new PercentEscaper("!()*-._~,/:", true);
-
-  /**
-   * Returns a {@link CharEscaper} instance that escapes special characters in a
-   * string so it can safely be included in a Java string literal.
-   *
-   * <p><b>Note</b></p>: does not escape single quotes, so use the escaper
-   * returned by {@link #javaCharEscaper()} if you are generating char
-   * literals or if you are unsure.
-   */
-  public static CharEscaper javaStringEscaper() {
-    return JAVA_STRING_ESCAPER;
-  }
-
-  /**
-   * Escapes special characters from a string so it can safely be included in a
-   * Java string literal. Does <em>not</em> escape single-quotes, so use
-   * JAVA_CHAR_ESCAPE if you are generating char literals, or if you are unsure.
-   *
-   * <p>Note that non-ASCII characters will be octal or Unicode escaped.
-   */
-  private static final CharEscaper JAVA_STRING_ESCAPER
-      = new JavaCharEscaper(new CharEscaperBuilder()
-          .addEscape('\b', "\\b")
-          .addEscape('\f', "\\f")
-          .addEscape('\n', "\\n")
-          .addEscape('\r', "\\r")
-          .addEscape('\t', "\\t")
-          .addEscape('\"', "\\\"")
-          .addEscape('\\', "\\\\")
-          .toArray());
-
-  /**
-   * Returns a {@link CharEscaper} instance that escapes special characters in a
-   * string so it can safely be included in a Java char or string literal. The
-   * behavior of this escaper is the same as that of the
-   * {@link #javaStringEscaper()}, except it also escapes single quotes.
-   */
-  public static CharEscaper javaCharEscaper() {
-    return JAVA_CHAR_ESCAPER;
-  }
-
-  /**
-   * Escapes special characters from a string so it can safely be included in a
-   * Java char literal or string literal.
-   *
-   * <p>Note that non-ASCII characters will be octal or Unicode escaped.
-   *
-   * <p>This is the same as {@link #JAVA_STRING_ESCAPER}, except that it escapes
-   * single quotes.
-   */
-  private static final CharEscaper JAVA_CHAR_ESCAPER
-      = new JavaCharEscaper(new CharEscaperBuilder()
-          .addEscape('\b', "\\b")
-          .addEscape('\f', "\\f")
-          .addEscape('\n', "\\n")
-          .addEscape('\r', "\\r")
-          .addEscape('\t', "\\t")
-          .addEscape('\'', "\\'")
-          .addEscape('\"', "\\\"")
-          .addEscape('\\', "\\\\")
-          .toArray());
-
-  /**
-   * Returns a {@link CharEscaper} instance that replaces non-ASCII characters
-   * in a string with their Unicode escape sequences ({@code \\uxxxx} where
-   * {@code xxxx} is a hex number). Existing escape sequences won't be affected.
-   */
-  public static CharEscaper javaStringUnicodeEscaper() {
-    return JAVA_STRING_UNICODE_ESCAPER;
-  }
-
-  /**
-   * Escapes each non-ASCII character in with its Unicode escape sequence
-   * {@code \\uxxxx} where {@code xxxx} is a hex number. Existing escape
-   * sequences won't be affected.
-   */
-  private static final CharEscaper JAVA_STRING_UNICODE_ESCAPER
-      = new CharEscaper() {
-          @Override protected char[] escape(char c) {
-            if (c <= 127) {
-              return null;
-            }
-
-            char[] r = new char[6];
-            r[5] = HEX_DIGITS[c & 15];
-            c >>>= 4;
-            r[4] = HEX_DIGITS[c & 15];
-            c >>>= 4;
-            r[3] = HEX_DIGITS[c & 15];
-            c >>>= 4;
-            r[2] = HEX_DIGITS[c & 15];
-            r[1] = 'u';
-            r[0] = '\\';
-            return r;
-          }
-        };
-
-  /**
-   * Returns a {@link CharEscaper} instance that escapes special characters from
-   * a string so it can safely be included in a Python string literal. Does not
-   * have any special handling for non-ASCII characters.
-   */
-  public static CharEscaper pythonEscaper() {
-    return PYTHON_ESCAPER;
-  }
-
-  /**
-   * Escapes special characters in a string so it can safely be included in a
-   * Python string literal. Does not have any special handling for non-ASCII
-   * characters.
-   */
-  private static final CharEscaper PYTHON_ESCAPER = new CharEscaperBuilder()
-      // TODO(laurence): perhaps this should escape non-ASCII characters?
-      .addEscape('\n', "\\n")
-      .addEscape('\r', "\\r")
-      .addEscape('\t', "\\t")
-      .addEscape('\\', "\\\\")
-      .addEscape('\"', "\\\"")
-      .addEscape('\'', "\\\'")
-      .toEscaper();
-
-  /**
-   * Returns a {@link CharEscaper} instance that escapes non-ASCII characters in
-   * a string so it can safely be included in a Javascript string literal.
-   * Non-ASCII characters are replaced with their ASCII javascript escape
-   * sequences (e.g., \\uhhhh or \xhh).
-   */
-  public static CharEscaper javascriptEscaper() {
-    return JAVASCRIPT_ESCAPER;
-  }
-
-  /**
-   * {@code CharEscaper} to escape javascript strings. Turns all non-ASCII
-   * characters into ASCII javascript escape sequences (e.g., \\uhhhh or \xhh).
-   */
-  private static final CharEscaper JAVASCRIPT_ESCAPER
-      = new JavascriptCharEscaper(new CharEscaperBuilder()
-          .addEscape('\'', "\\x27")
-          .addEscape('"',  "\\x22")
-          .addEscape('<',  "\\x3c")
-          .addEscape('=',  "\\x3d")
-          .addEscape('>',  "\\x3e")
-          .addEscape('&',  "\\x26")
-          .addEscape('\b', "\\b")
-          .addEscape('\t', "\\t")
-          .addEscape('\n', "\\n")
-          .addEscape('\f', "\\f")
-          .addEscape('\r', "\\r")
-          .addEscape('\\', "\\\\")
-          .toArray());
-
-  private static CharEscaperBuilder newBasicXmlEscapeBuilder() {
-    return new CharEscaperBuilder()
-        .addEscape('&', "&amp;")
-        .addEscape('<', "&lt;")
-        .addEscape('>', "&gt;")
-        .addEscapes(new char[] {
-            '\000', '\001', '\002', '\003', '\004',
-            '\005', '\006', '\007', '\010', '\013',
-            '\014', '\016', '\017', '\020', '\021',
-            '\022', '\023', '\024', '\025', '\026',
-            '\027', '\030', '\031', '\032', '\033',
-            '\034', '\035', '\036', '\037'}, "");
-  }
-
-  /**
-   * Returns a composite {@link CharEscaper} instance that tries to escape
-   * characters using a primary {@code CharEscaper} first and falls back to a
-   * secondary one if there is no escaping.
-   *
-   * <p>The returned escaper will attempt to escape each character using the
-   * primary escaper, and if the primary escaper has no escaping for that
-   * character, it will use the secondary escaper. If the secondary escaper has
-   * no escaping for a character either, the original character will be used.
-   * If the primary escaper has an escape for a character, the secondary escaper
-   * will not be used at all for that character; the escaped output of the
-   * primary is not run through the secondary. For a case where you would like
-   * to first escape with one escaper, and then with another, it is recommended
-   * that you call each escaper in order.
-   *
-   * @param primary The primary {@code CharEscaper} to use
-   * @param secondary The secondary {@code CharEscaper} to use if the first one
-   *     has no escaping rule for a character
-   * @throws NullPointerException if any of the arguments is null
-   */
-  public static CharEscaper fallThrough(CharEscaper primary,
-      CharEscaper secondary) {
-    checkNotNull(primary);
-    checkNotNull(secondary);
-    return new FallThroughCharEscaper(primary, secondary);
-  }
-
-  /**
-   * A fast {@link CharEscaper} that uses an array of replacement characters and
-   * a range of safe characters. It overrides {@link #escape(String)} to improve
-   * performance. Rough benchmarking shows that this almost doubles the speed
-   * when processing strings that do not require escaping (providing the escape
-   * test itself is efficient).
-   */
-  private static abstract class FastCharEscaper extends CharEscaper {
-
-    protected final char[][] replacements;
-    protected final int replacementLength;
-    protected final char safeMin;
-    protected final char safeMax;
-
-    public FastCharEscaper(char[][] replacements, char safeMin, char safeMax) {
-      this.replacements = replacements;
-      this.replacementLength = replacements.length;
-      this.safeMin = safeMin;
-      this.safeMax = safeMax;
-    }
-
-    /** Overridden for performance (see {@link FastCharEscaper}). */
-    @Override public String escape(String s) {
-      int slen = s.length();
-      for (int index = 0; index < slen; index++) {
-        char c = s.charAt(index);
-        if ((c < replacementLength && replacements[c] != null)
-            || c < safeMin || c > safeMax) {
-          return escapeSlow(s, index);
-        }
-      }
-      return s;
-    }
-  }
-
-  /**
-   * Escaper for Java character escaping, contains both an array and a
-   * backup function.  We're not overriding the array decorator because we
-   * want to keep this as fast as possible, so no calls to super.escape first.
-   */
-  private static class JavaCharEscaper extends FastCharEscaper {
-
-    public JavaCharEscaper(char[][] replacements) {
-      super(replacements, ' ', '~');
-    }
-
-    @Override protected char[] escape(char c) {
-      // First check if our array has a valid escaping.
-      if (c < replacementLength) {
-        char[] r = replacements[c];
-        if (r != null) {
-          return r;
-        }
-      }
-
-      // This range is un-escaped.
-      if (safeMin <= c && c <= safeMax) {
-        return null;
-      }
-
-      if (c <= 0xFF) {
-        // Convert c to an octal-escaped string.
-        // Equivalent to String.format("\\%03o", (int)c);
-        char[] r = new char[4];
-        r[0] = '\\';
-        r[3] = HEX_DIGITS[c & 7];
-        c >>>= 3;
-        r[2] = HEX_DIGITS[c & 7];
-        c >>>= 3;
-        r[1] = HEX_DIGITS[c & 7];
-        return r;
-      }
-
-      // Convert c to a hex-escaped string.
-      // Equivalent to String.format("\\u%04x", (int)c);
-      char[] r = new char[6];
-      r[0] = '\\';
-      r[1] = 'u';
-      r[5] = HEX_DIGITS[c & 15];
-      c >>>= 4;
-      r[4] = HEX_DIGITS[c & 15];
-      c >>>= 4;
-      r[3] = HEX_DIGITS[c & 15];
-      c >>>= 4;
-      r[2] = HEX_DIGITS[c & 15];
-      return r;
-    }
-  }
-
-  /**
-   * Escaper for javascript character escaping, contains both an array and a
-   * backup function. We're not overriding the array decorator because we
-   * want to keep this as fast as possible, so no calls to super.escape first.
-   */
-  private static class JavascriptCharEscaper extends FastCharEscaper {
-
-    public JavascriptCharEscaper(char[][] replacements) {
-      super(replacements, ' ', '~');
-    }
-
-    @Override protected char[] escape(char c) {
-      // First check if our array has a valid escaping.
-      if (c < replacementLength) {
-        char[] r = replacements[c];
-        if (r != null) {
-          return r;
-        }
-      }
-
-      // This range is unescaped.
-      if (safeMin <= c && c <= safeMax) {
-        return null;
-      }
-
-      // we can do a 2 digit hex escape for chars less that 0x100
-      if (c < 0x100) {
-        char[] r = new char[4];
-        r[3] = HEX_DIGITS[c & 0xf];
-        c >>>= 4;
-        r[2] = HEX_DIGITS[c & 0xf];
-        r[1] = 'x';
-        r[0] = '\\';
-        return r;
-      }
-
-      // 4 digit hex escape everything else
-      char[] r = new char[6];
-      r[5] = HEX_DIGITS[c & 0xf];
-      c >>>= 4;
-      r[4] = HEX_DIGITS[c & 0xf];
-      c >>>= 4;
-      r[3] = HEX_DIGITS[c & 0xf];
-      c >>>= 4;
-      r[2] = HEX_DIGITS[c & 0xf];
-      r[1] = 'u';
-      r[0] = '\\';
-      return r;
-    }
-  }
-
-  /**
-   * Escaper for HTML character escaping, contains both an array and a
-   * backup function.  We're not overriding the array decorator because we
-   * want to keep this as fast as possible, so no calls to super.escape first.
-   */
-  private static class HtmlCharEscaper extends FastCharEscaper {
-
-    public HtmlCharEscaper(char[][] replacements) {
-      super(replacements, Character.MIN_VALUE, '~');
-    }
-
-    @Override protected char[] escape(char c) {
-      // First check if our array has a valid escaping.
-      if (c < replacementLength) {
-        char[] r = replacements[c];
-        if (r != null) {
-          return r;
-        }
-      }
-
-      // ~ is ASCII 126, the highest value char that does not need
-      // to be escaped
-      if (c <= safeMax) {
-        return null;
-      }
-
-      int index;
-      if (c < 1000) {
-        index = 4;
-      } else if (c < 10000) {
-        index = 5;
-      } else {
-        index = 6;
-      }
-      char[] result = new char[index + 2];
-      result[0] = '&';
-      result[1] = '#';
-      result[index + 1] = ';';
-
-      // TODO(sven): Convert this to a sequence of shifts/additions
-      // to avoid the division and modulo operators.
-      int intValue = c;
-      for (; index > 1; index--) {
-        result[index] = HEX_DIGITS[intValue % 10];
-        intValue /= 10;
-      }
-      return result;
-    }
-  }
-
-  /**
-   * A composite {@code CharEscaper} object that tries to escape characters
-   * using a primary {@code CharEscaper} first and falls back to a secondary
-   * one if there is no escaping.
-   */
-  private static class FallThroughCharEscaper extends CharEscaper {
-
-    private final CharEscaper primary;
-    private final CharEscaper secondary;
-
-    public FallThroughCharEscaper(CharEscaper primary, CharEscaper secondary) {
-      this.primary = primary;
-      this.secondary = secondary;
-    }
-
-    @Override
-    protected char[] escape(char c) {
-      char result[] = primary.escape(c);
-      if (result == null) {
-        result = secondary.escape(c);
-      }
-      return result;
-    }
-  }
-
-  private static final char[] HEX_DIGITS = "0123456789abcdef".toCharArray();
-}
\ No newline at end of file
diff --git a/src/com/android/mail/lib/base/CharMatcher.java b/src/com/android/mail/lib/base/CharMatcher.java
deleted file mode 100644
index 9ff3161..0000000
--- a/src/com/android/mail/lib/base/CharMatcher.java
+++ /dev/null
@@ -1,1124 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mail.lib.base;
-
-import static com.android.mail.lib.base.Preconditions.checkArgument;
-import static com.android.mail.lib.base.Preconditions.checkNotNull;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Determines a true or false value for any Java {@code char} value, just as
- * {@link Predicate} does for any {@link Object}. Also offers basic text
- * processing methods based on this function. Implementations are strongly
- * encouraged to be side-effect-free and immutable.
- *
- * <p>Throughout the documentation of this class, the phrase "matching
- * character" is used to mean "any character {@code c} for which {@code
- * this.matches(c)} returns {@code true}".
- *
- * <p><b>Note:</b> This class deals only with {@code char} values; it does not
- * understand supplementary Unicode code points in the range {@code 0x10000} to
- * {@code 0x10FFFF}. Such logical characters are encoded into a {@code String}
- * using surrogate pairs, and a {@code CharMatcher} treats these just as two
- * separate characters.
- *
- * @author Kevin Bourrillion
- * @since 2009.09.15 <b>tentative</b>
- */
-public abstract class CharMatcher implements Predicate<Character> {
-
-  // Constants
-
-  // Excludes 2000-2000a, which is handled as a range
-  private static final String BREAKING_WHITESPACE_CHARS =
-      "\t\n\013\f\r \u0085\u1680\u2028\u2029\u205f\u3000";
-
-  // Excludes 2007, which is handled as a gap in a pair of ranges
-  private static final String NON_BREAKING_WHITESPACE_CHARS =
-      "\u00a0\u180e\u202f";
-
-  /**
-   * Determines whether a character is whitespace according to the latest
-   * Unicode standard, as illustrated
-   * <a href="http://unicode.org/cldr/utility/list-unicodeset.jsp?a=%5Cp%7Bwhitespace%7D">here</a>.
-   * This is not the same definition used by other Java APIs. See a comparison
-   * of several definitions of "whitespace" at
-   * <a href="TODO">(TODO)</a>.
-   *
-   * <p><b>Note:</b> as the Unicode definition evolves, we will modify this
-   * constant to keep it up to date.
-   */
-  public static final CharMatcher WHITESPACE =
-      anyOf(BREAKING_WHITESPACE_CHARS + NON_BREAKING_WHITESPACE_CHARS)
-          .or(inRange('\u2000', '\u200a'));
-
-  /**
-   * Determines whether a character is a breaking whitespace (that is,
-   * a whitespace which can be interpreted as a break between words
-   * for formatting purposes).  See {@link #WHITESPACE} for a discussion
-   * of that term.
-   *
-   * @since 2010.01.04 <b>tentative</b>
-   */
-  public static final CharMatcher BREAKING_WHITESPACE =
-      anyOf(BREAKING_WHITESPACE_CHARS)
-          .or(inRange('\u2000', '\u2006'))
-          .or(inRange('\u2008', '\u200a'));
-
-  /**
-   * Determines whether a character is ASCII, meaning that its code point is
-   * less than 128.
-   */
-  public static final CharMatcher ASCII = inRange('\0', '\u007f');
-
-  /**
-   * Determines whether a character is a digit according to
-   * <a href="http://unicode.org/cldr/utility/list-unicodeset.jsp?a=%5Cp%7Bdigit%7D">Unicode</a>.
-   */
-  public static final CharMatcher DIGIT;
-
-  static {
-    CharMatcher digit = inRange('0', '9');
-    String zeroes =
-        "\u0660\u06f0\u07c0\u0966\u09e6\u0a66\u0ae6\u0b66\u0be6\u0c66"
-            + "\u0ce6\u0d66\u0e50\u0ed0\u0f20\u1040\u1090\u17e0\u1810\u1946"
-            + "\u19d0\u1b50\u1bb0\u1c40\u1c50\ua620\ua8d0\ua900\uaa50\uff10";
-    for (char base : zeroes.toCharArray()) {
-      digit = digit.or(inRange(base, (char) (base + 9)));
-    }
-    DIGIT = digit;
-  }
-
-  /**
-   * Determines whether a character is whitespace according to {@link
-   * Character#isWhitespace(char) Java's definition}; it is usually preferable
-   * to use {@link #WHITESPACE}. See a comparison of several definitions of
-   * "whitespace" at <a href="http://go/white+space">go/white+space</a>.
-   */
-  public static final CharMatcher JAVA_WHITESPACE
-      = inRange('\u0009', (char) 13)  // \\u000d doesn't work as a char literal
-      .or(inRange('\u001c', '\u0020'))
-      .or(is('\u1680'))
-      .or(is('\u180e'))
-      .or(inRange('\u2000', '\u2006'))
-      .or(inRange('\u2008', '\u200b'))
-      .or(inRange('\u2028', '\u2029'))
-      .or(is('\u205f'))
-      .or(is('\u3000'));
-
-  /**
-   * Determines whether a character is a digit according to {@link
-   * Character#isDigit(char) Java's definition}. If you only care to match
-   * ASCII digits, you can use {@code inRange('0', '9')}.
-   */
-  public static final CharMatcher JAVA_DIGIT = new CharMatcher() {
-    @Override public boolean matches(char c) {
-      return Character.isDigit(c);
-    }
-  };
-
-  /**
-   * Determines whether a character is a letter according to {@link
-   * Character#isLetter(char) Java's definition}. If you only care to match
-   * letters of the Latin alphabet, you can use {@code
-   * inRange('a', 'z').or(inRange('A', 'Z'))}.
-   */
-  public static final CharMatcher JAVA_LETTER = new CharMatcher() {
-    @Override public boolean matches(char c) {
-      return Character.isLetter(c);
-    }
-  };
-
-  /**
-   * Determines whether a character is a letter or digit according to {@link
-   * Character#isLetterOrDigit(char) Java's definition}.
-   */
-  public static final CharMatcher JAVA_LETTER_OR_DIGIT = new CharMatcher() {
-    @Override public boolean matches(char c) {
-      return Character.isLetterOrDigit(c);
-    }
-  };
-
-  /**
-   * Determines whether a character is upper case according to {@link
-   * Character#isUpperCase(char) Java's definition}.
-   */
-  public static final CharMatcher JAVA_UPPER_CASE = new CharMatcher() {
-    @Override public boolean matches(char c) {
-      return Character.isUpperCase(c);
-    }
-  };
-
-  /**
-   * Determines whether a character is lower case according to {@link
-   * Character#isLowerCase(char) Java's definition}.
-   */
-  public static final CharMatcher JAVA_LOWER_CASE = new CharMatcher() {
-    @Override public boolean matches(char c) {
-      return Character.isLowerCase(c);
-    }
-  };
-
-  /**
-   * Determines whether a character is an ISO control character according to
-   * {@link Character#isISOControl(char)}.
-   */
-  public static final CharMatcher JAVA_ISO_CONTROL = inRange('\u0000', '\u001f')
-      .or(inRange('\u007f', '\u009f'));
-
-  /**
-   * Determines whether a character is invisible; that is, if its Unicode
-   * category is any of SPACE_SEPARATOR, LINE_SEPARATOR,
-   * PARAGRAPH_SEPARATOR, CONTROL, FORMAT, SURROGATE, and PRIVATE_USE according
-   * to ICU4J.
-   */
-  public static final CharMatcher INVISIBLE = inRange('\u0000', '\u0020')
-      .or(inRange('\u007f', '\u00a0'))
-      .or(is('\u00ad'))
-      .or(inRange('\u0600', '\u0603'))
-      .or(anyOf("\u06dd\u070f\u1680\u17b4\u17b5\u180e"))
-      .or(inRange('\u2000', '\u200f'))
-      .or(inRange('\u2028', '\u202f'))
-      .or(inRange('\u205f', '\u2064'))
-      .or(inRange('\u206a', '\u206f'))
-      .or(is('\u3000'))
-      .or(inRange('\ud800', '\uf8ff'))
-      .or(anyOf("\ufeff\ufff9\ufffa\ufffb"));
-
-  /**
-   * Determines whether a character is single-width (not double-width).  When
-   * in doubt, this matcher errs on the side of returning {@code false} (that
-   * is, it tends to assume a character is double-width).
-   *
-   * <b>Note:</b> as the reference file evolves, we will modify this constant
-   * to keep it up to date.
-   */
-  public static final CharMatcher SINGLE_WIDTH = inRange('\u0000', '\u04f9')
-      .or(is('\u05be'))
-      .or(inRange('\u05d0', '\u05ea'))
-      .or(is('\u05f3'))
-      .or(is('\u05f4'))
-      .or(inRange('\u0600', '\u06ff'))
-      .or(inRange('\u0750', '\u077f'))
-      .or(inRange('\u0e00', '\u0e7f'))
-      .or(inRange('\u1e00', '\u20af'))
-      .or(inRange('\u2100', '\u213a'))
-      .or(inRange('\ufb50', '\ufdff'))
-      .or(inRange('\ufe70', '\ufeff'))
-      .or(inRange('\uff61', '\uffdc'));
-
-  /**
-   * Determines whether a character is whitespace according to an arbitrary definition used by
-   * {@link StringUtil} for years. Most likely you don't want to use this. See a comparison of
-   * several definitions of "whitespace" at <a href="http://goto/white space">goto/white space</a>.
-   *
-   * <p><b>To be deprecated.</b> use {@link #WHITESPACE} to switch to the Unicode definition, or
-   * create a matcher for the specific characters you want. Not deprecated yet because it is a
-   * stepping stone for getting off of many deprecated {@link StringUtil} methods.
-   */
-  @Deprecated
-  public static final CharMatcher LEGACY_WHITESPACE =
-      anyOf(" \r\n\t\u3000\u00A0\u2007\u202F").precomputed();
-
-
-  /** Matches any character. */
-  public static final CharMatcher ANY = new CharMatcher() {
-    @Override public boolean matches(char c) {
-      return true;
-    }
-
-    @Override public int indexIn(CharSequence sequence) {
-      return (sequence.length() == 0) ? -1 : 0;
-    }
-    @Override public int indexIn(CharSequence sequence, int start) {
-      int length = sequence.length();
-      Preconditions.checkPositionIndex(start, length);
-      return (start == length) ? -1 : start;
-    }
-    @Override public int lastIndexIn(CharSequence sequence) {
-      return sequence.length() - 1;
-    }
-    @Override public boolean matchesAllOf(CharSequence sequence) {
-      checkNotNull(sequence);
-      return true;
-    }
-    @Override public boolean matchesNoneOf(CharSequence sequence) {
-      return sequence.length() == 0;
-    }
-    @Override public String removeFrom(CharSequence sequence) {
-      checkNotNull(sequence);
-      return "";
-    }
-    @Override public String replaceFrom(
-        CharSequence sequence, char replacement) {
-      char[] array = new char[sequence.length()];
-      Arrays.fill(array, replacement);
-      return new String(array);
-    }
-    @Override public String replaceFrom(
-        CharSequence sequence, CharSequence replacement) {
-      StringBuilder retval = new StringBuilder(sequence.length() * replacement.length());
-      for (int i = 0; i < sequence.length(); i++) {
-        retval.append(replacement);
-      }
-      return retval.toString();
-    }
-    @Override public String collapseFrom(CharSequence sequence, char replacement) {
-      return (sequence.length() == 0) ? "" : String.valueOf(replacement);
-    }
-    @Override public String trimFrom(CharSequence sequence) {
-      checkNotNull(sequence);
-      return "";
-    }
-    @Override public int countIn(CharSequence sequence) {
-      return sequence.length();
-    }
-    @Override public CharMatcher and(CharMatcher other) {
-      return checkNotNull(other);
-    }
-    @Override public CharMatcher or(CharMatcher other) {
-      checkNotNull(other);
-      return this;
-    }
-    @Override public CharMatcher negate() {
-      return NONE;
-    }
-    @Override public CharMatcher precomputed() {
-      return this;
-    }
-  };
-
-  /** Matches no characters. */
-  public static final CharMatcher NONE = new CharMatcher() {
-    @Override public boolean matches(char c) {
-      return false;
-    }
-
-    @Override public int indexIn(CharSequence sequence) {
-      checkNotNull(sequence);
-      return -1;
-    }
-    @Override public int indexIn(CharSequence sequence, int start) {
-      int length = sequence.length();
-      Preconditions.checkPositionIndex(start, length);
-      return -1;
-    }
-    @Override public int lastIndexIn(CharSequence sequence) {
-      checkNotNull(sequence);
-      return -1;
-    }
-    @Override public boolean matchesAllOf(CharSequence sequence) {
-      return sequence.length() == 0;
-    }
-    @Override public boolean matchesNoneOf(CharSequence sequence) {
-      checkNotNull(sequence);
-      return true;
-    }
-    @Override public String removeFrom(CharSequence sequence) {
-      return sequence.toString();
-    }
-    @Override public String replaceFrom(
-        CharSequence sequence, char replacement) {
-      return sequence.toString();
-    }
-    @Override public String replaceFrom(
-        CharSequence sequence, CharSequence replacement) {
-      checkNotNull(replacement);
-      return sequence.toString();
-    }
-    @Override public String collapseFrom(
-        CharSequence sequence, char replacement) {
-      return sequence.toString();
-    }
-    @Override public String trimFrom(CharSequence sequence) {
-      return sequence.toString();
-    }
-    @Override public int countIn(CharSequence sequence) {
-      checkNotNull(sequence);
-      return 0;
-    }
-    @Override public CharMatcher and(CharMatcher other) {
-      checkNotNull(other);
-      return this;
-    }
-    @Override public CharMatcher or(CharMatcher other) {
-      return checkNotNull(other);
-    }
-    @Override public CharMatcher negate() {
-      return ANY;
-    }
-    @Override protected void setBits(LookupTable table) {
-    }
-    @Override public CharMatcher precomputed() {
-      return this;
-    }
-  };
-
-  // Static factories
-
-  /**
-   * Returns a {@code char} matcher that matches only one specified character.
-   */
-  public static CharMatcher is(final char match) {
-    return new CharMatcher() {
-      @Override public boolean matches(char c) {
-        return c == match;
-      }
-
-      @Override public String replaceFrom(
-          CharSequence sequence, char replacement) {
-        return sequence.toString().replace(match, replacement);
-      }
-      @Override public CharMatcher and(CharMatcher other) {
-        return other.matches(match) ? this : NONE;
-      }
-      @Override public CharMatcher or(CharMatcher other) {
-        return other.matches(match) ? other : super.or(other);
-      }
-      @Override public CharMatcher negate() {
-        return isNot(match);
-      }
-      @Override protected void setBits(LookupTable table) {
-        table.set(match);
-      }
-      @Override public CharMatcher precomputed() {
-        return this;
-      }
-    };
-  }
-
-  /**
-   * Returns a {@code char} matcher that matches any character except the one
-   * specified.
-   *
-   * <p>To negate another {@code CharMatcher}, use {@link #negate()}.
-   */
-  public static CharMatcher isNot(final char match) {
-    return new CharMatcher() {
-      @Override public boolean matches(char c) {
-        return c != match;
-      }
-
-      @Override public CharMatcher and(CharMatcher other) {
-        return other.matches(match) ? super.and(other) : other;
-      }
-      @Override public CharMatcher or(CharMatcher other) {
-        return other.matches(match) ? ANY : this;
-      }
-      @Override public CharMatcher negate() {
-        return is(match);
-      }
-    };
-  }
-
-  /**
-   * Returns a {@code char} matcher that matches any character present in the
-   * given character sequence.
-   */
-  public static CharMatcher anyOf(final CharSequence sequence) {
-    switch (sequence.length()) {
-      case 0:
-        return NONE;
-      case 1:
-        return is(sequence.charAt(0));
-      case 2:
-        final char match1 = sequence.charAt(0);
-        final char match2 = sequence.charAt(1);
-        return new CharMatcher() {
-          @Override public boolean matches(char c) {
-            return c == match1 || c == match2;
-          }
-          @Override protected void setBits(LookupTable table) {
-            table.set(match1);
-            table.set(match2);
-          }
-          @Override public CharMatcher precomputed() {
-            return this;
-          }
-        };
-    }
-
-    final char[] chars = sequence.toString().toCharArray();
-    Arrays.sort(chars); // not worth collapsing duplicates
-
-    return new CharMatcher() {
-      @Override public boolean matches(char c) {
-        return Arrays.binarySearch(chars, c) >= 0;
-      }
-      @Override protected void setBits(LookupTable table) {
-        for (char c : chars) {
-          table.set(c);
-        }
-      }
-    };
-  }
-
-  /**
-   * Returns a {@code char} matcher that matches any character not present in
-   * the given character sequence.
-   */
-  public static CharMatcher noneOf(CharSequence sequence) {
-    return anyOf(sequence).negate();
-  }
-
-  /**
-   * Returns a {@code char} matcher that matches any character in a given range
-   * (both endpoints are inclusive). For example, to match any lowercase letter
-   * of the English alphabet, use {@code CharMatcher.inRange('a', 'z')}.
-   *
-   * @throws IllegalArgumentException if {@code endInclusive < startInclusive}
-   */
-  public static CharMatcher inRange(
-      final char startInclusive, final char endInclusive) {
-    checkArgument(endInclusive >= startInclusive);
-    return new CharMatcher() {
-      @Override public boolean matches(char c) {
-        return startInclusive <= c && c <= endInclusive;
-      }
-      @Override protected void setBits(LookupTable table) {
-        char c = startInclusive;
-        while (true) {
-          table.set(c);
-          if (c++ == endInclusive) {
-            break;
-          }
-        }
-      }
-      @Override public CharMatcher precomputed() {
-        return this;
-      }
-    };
-  }
-
-  /**
-   * Returns a matcher with identical behavior to the given {@link
-   * Character}-based predicate, but which operates on primitive {@code char}
-   * instances instead.
-   */
-  public static CharMatcher forPredicate(
-      final Predicate<? super Character> predicate) {
-    checkNotNull(predicate);
-    if (predicate instanceof CharMatcher) {
-      return (CharMatcher) predicate;
-    }
-    return new CharMatcher() {
-      @Override public boolean matches(char c) {
-        return predicate.apply(c);
-      }
-      @Override public boolean apply(Character character) {
-        return predicate.apply(checkNotNull(character));
-      }
-    };
-  }
-
-  // Abstract methods
-
-  /** Determines a true or false value for the given character. */
-  public abstract boolean matches(char c);
-
-  // Non-static factories
-
-  /**
-   * Returns a matcher that matches any character not matched by this matcher.
-   */
-  public CharMatcher negate() {
-    final CharMatcher original = this;
-    return new CharMatcher() {
-      @Override public boolean matches(char c) {
-        return !original.matches(c);
-      }
-
-      @Override public boolean matchesAllOf(CharSequence sequence) {
-        return original.matchesNoneOf(sequence);
-      }
-      @Override public boolean matchesNoneOf(CharSequence sequence) {
-        return original.matchesAllOf(sequence);
-      }
-      @Override public int countIn(CharSequence sequence) {
-        return sequence.length() - original.countIn(sequence);
-      }
-      @Override public CharMatcher negate() {
-        return original;
-      }
-    };
-  }
-
-  /**
-   * Returns a matcher that matches any character matched by both this matcher
-   * and {@code other}.
-   */
-  public CharMatcher and(CharMatcher other) {
-    return new And(Arrays.asList(this, checkNotNull(other)));
-  }
-
-  private static class And extends CharMatcher {
-    List<CharMatcher> components;
-
-    And(List<CharMatcher> components) {
-      this.components = components; // Skip defensive copy (private)
-    }
-
-    @Override public boolean matches(char c) {
-      for (CharMatcher matcher : components) {
-        if (!matcher.matches(c)) {
-          return false;
-        }
-      }
-      return true;
-    }
-
-    @Override public CharMatcher and(CharMatcher other) {
-      List<CharMatcher> newComponents = new ArrayList<CharMatcher>(components);
-      newComponents.add(checkNotNull(other));
-      return new And(newComponents);
-    }
-  }
-
-  /**
-   * Returns a matcher that matches any character matched by either this matcher
-   * or {@code other}.
-   */
-  public CharMatcher or(CharMatcher other) {
-    return new Or(Arrays.asList(this, checkNotNull(other)));
-  }
-
-  private static class Or extends CharMatcher {
-    List<CharMatcher> components;
-
-    Or(List<CharMatcher> components) {
-      this.components = components; // Skip defensive copy (private)
-    }
-
-    @Override public boolean matches(char c) {
-      for (CharMatcher matcher : components) {
-        if (matcher.matches(c)) {
-          return true;
-        }
-      }
-      return false;
-    }
-
-    @Override public CharMatcher or(CharMatcher other) {
-      List<CharMatcher> newComponents = new ArrayList<CharMatcher>(components);
-      newComponents.add(checkNotNull(other));
-      return new Or(newComponents);
-    }
-
-    @Override protected void setBits(LookupTable table) {
-      for (CharMatcher matcher : components) {
-        matcher.setBits(table);
-      }
-    }
-  }
-
-  /**
-   * Returns a {@code char} matcher functionally equivalent to this one, but
-   * which may be faster to query than the original; your mileage may vary.
-   * Precomputation takes time and is likely to be worthwhile only if the
-   * precomputed matcher is queried many thousands of times.
-   *
-   * <p>This method has no effect (returns {@code this}) when called in GWT:
-   * it's unclear whether a precomputed matcher is faster, but it certainly
-   * consumes more memory, which doesn't seem like a worthwhile tradeoff in a
-   * browser.
-   */
-  public CharMatcher precomputed() {
-    return Platform.precomputeCharMatcher(this);
-  }
-
-  /**
-   * This is the actual implementation of {@link #precomputed}, but we bounce
-   * calls through a method on {@link Platform} so that we can have different
-   * behavior in GWT.
-   *
-   * <p>The default precomputation is to cache the configuration of the original
-   * matcher in an eight-kilobyte bit array. In some situations this produces a
-   * matcher which is faster to query than the original.
-   *
-   * <p>The default implementation creates a new bit array and passes it to
-   * {@link #setBits(LookupTable)}.
-   */
-  CharMatcher precomputedInternal() {
-    final LookupTable table = new LookupTable();
-    setBits(table);
-
-    return new CharMatcher() {
-      @Override public boolean matches(char c) {
-        return table.get(c);
-      }
-
-      // TODO: make methods like negate() smart
-
-      @Override public CharMatcher precomputed() {
-        return this;
-      }
-    };
-  }
-
-  /**
-   * For use by implementors; sets the bit corresponding to each character ('\0'
-   * to '{@literal \}uFFFF') that matches this matcher in the given bit array,
-   * leaving all other bits untouched.
-   *
-   * <p>The default implementation loops over every possible character value,
-   * invoking {@link #matches} for each one.
-   */
-  protected void setBits(LookupTable table) {
-    char c = Character.MIN_VALUE;
-    while (true) {
-      if (matches(c)) {
-        table.set(c);
-      }
-      if (c++ == Character.MAX_VALUE) {
-        break;
-      }
-    }
-  }
-
-  /**
-   * A bit array with one bit per {@code char} value, used by {@link
-   * CharMatcher#precomputed}.
-   *
-   * <p>TODO: possibly share a common BitArray class with BloomFilter
-   * and others... a simpler java.util.BitSet.
-   */
-  protected static class LookupTable {
-    int[] data = new int[2048];
-
-    void set(char index) {
-      data[index >> 5] |= (1 << index);
-    }
-    boolean get(char index) {
-      return (data[index >> 5] & (1 << index)) != 0;
-    }
-  }
-
-  // Text processing routines
-
-  /**
-   * Returns {@code true} if a character sequence contains only matching
-   * characters.
-   *
-   * <p>The default implementation iterates over the sequence, invoking {@link
-   * #matches} for each character, until this returns {@code false} or the end
-   * is reached.
-   *
-   * @param sequence the character sequence to examine, possibly empty
-   * @return {@code true} if this matcher matches every character in the
-   *     sequence, including when the sequence is empty
-   */
-  public boolean matchesAllOf(CharSequence sequence) {
-    for (int i = sequence.length() - 1; i >= 0; i--) {
-      if (!matches(sequence.charAt(i))) {
-        return false;
-      }
-    }
-    return true;
-  }
-
-  /**
-   * Returns {@code true} if a character sequence contains no matching
-   * characters.
-   *
-   * <p>The default implementation iterates over the sequence, invoking {@link
-   * #matches} for each character, until this returns {@code false} or the end is
-   * reached.
-   *
-   * @param sequence the character sequence to examine, possibly empty
-   * @return {@code true} if this matcher matches every character in the
-   *     sequence, including when the sequence is empty
-   */
-  public boolean matchesNoneOf(CharSequence sequence) {
-    return indexIn(sequence) == -1;
-  }
-
-  // TODO: perhaps add matchesAnyOf()
-
-  /**
-   * Returns the index of the first matching character in a character sequence,
-   * or {@code -1} if no matching character is present.
-   *
-   * <p>The default implementation iterates over the sequence in forward order
-   * calling {@link #matches} for each character.
-   *
-   * @param sequence the character sequence to examine from the beginning
-   * @return an index, or {@code -1} if no character matches
-   */
-  public int indexIn(CharSequence sequence) {
-    int length = sequence.length();
-    for (int i = 0; i < length; i++) {
-      if (matches(sequence.charAt(i))) {
-        return i;
-      }
-    }
-    return -1;
-  }
-
-  /**
-   * Returns the index of the first matching character in a character sequence,
-   * starting from a given position, or {@code -1} if no character matches after
-   * that position.
-   *
-   * <p>The default implementation iterates over the sequence in forward order,
-   * beginning at {@code start}, calling {@link #matches} for each character.
-   *
-   * @param sequence the character sequence to examine
-   * @param start the first index to examine; must be nonnegative and no
-   *     greater than {@code sequence.length()}
-   * @return the index of the first matching character, guaranteed to be no less
-   *     than {@code start}, or {@code -1} if no character matches
-   * @throws IndexOutOfBoundsException if start is negative or greater than
-   *     {@code sequence.length()}
-   */
-  public int indexIn(CharSequence sequence, int start) {
-    int length = sequence.length();
-    Preconditions.checkPositionIndex(start, length);
-    for (int i = start; i < length; i++) {
-      if (matches(sequence.charAt(i))) {
-        return i;
-      }
-    }
-    return -1;
-  }
-
-  /**
-   * Returns the index of the last matching character in a character sequence,
-   * or {@code -1} if no matching character is present.
-   *
-   * <p>The default implementation iterates over the sequence in reverse order
-   * calling {@link #matches} for each character.
-   *
-   * @param sequence the character sequence to examine from the end
-   * @return an index, or {@code -1} if no character matches
-   */
-  public int lastIndexIn(CharSequence sequence) {
-    for (int i = sequence.length() - 1; i >= 0; i--) {
-      if (matches(sequence.charAt(i))) {
-        return i;
-      }
-    }
-    return -1;
-  }
-
-  /**
-   * Returns the number of matching characters found in a character sequence.
-   */
-  public int countIn(CharSequence sequence) {
-    int count = 0;
-    for (int i = 0; i < sequence.length(); i++) {
-      if (matches(sequence.charAt(i))) {
-        count++;
-      }
-    }
-    return count;
-  }
-
-  /**
-   * Returns a string containing all non-matching characters of a character
-   * sequence, in order. For example: <pre>   {@code
-   *
-   *   CharMatcher.is('a').removeFrom("bazaar")}</pre>
-   *
-   * ... returns {@code "bzr"}.
-   */
-  public String removeFrom(CharSequence sequence) {
-    String string = sequence.toString();
-    int pos = indexIn(string);
-    if (pos == -1) {
-      return string;
-    }
-
-    char[] chars = string.toCharArray();
-    int spread = 1;
-
-    // This unusual loop comes from extensive benchmarking
-    OUT:
-    while (true) {
-      pos++;
-      while (true) {
-        if (pos == chars.length) {
-          break OUT;
-        }
-        if (matches(chars[pos])) {
-          break;
-        }
-        chars[pos - spread] = chars[pos];
-        pos++;
-      }
-      spread++;
-    }
-    return new String(chars, 0, pos - spread);
-  }
-
-  /**
-   * Returns a string containing all matching characters of a character
-   * sequence, in order. For example: <pre>   {@code
-   *
-   *   CharMatcher.is('a').retainFrom("bazaar")}</pre>
-   *
-   * ... returns {@code "aaa"}.
-   */
-  public String retainFrom(CharSequence sequence) {
-    return negate().removeFrom(sequence);
-  }
-
-  /**
-   * Returns a string copy of the input character sequence, with each character
-   * that matches this matcher replaced by a given replacement character. For
-   * example: <pre>   {@code
-   *
-   *   CharMatcher.is('a').replaceFrom("radar", 'o')}</pre>
-   *
-   * ... returns {@code "rodor"}.
-   *
-   * <p>The default implementation uses {@link #indexIn(CharSequence)} to find
-   * the first matching character, then iterates the remainder of the sequence
-   * calling {@link #matches(char)} for each character.
-   *
-   * @param sequence the character sequence to replace matching characters in
-   * @param replacement the character to append to the result string in place of
-   *     each matching character in {@code sequence}
-   * @return the new string
-   */
-  public String replaceFrom(CharSequence sequence, char replacement) {
-    String string = sequence.toString();
-    int pos = indexIn(string);
-    if (pos == -1) {
-      return string;
-    }
-    char[] chars = string.toCharArray();
-    chars[pos] = replacement;
-    for (int i = pos + 1; i < chars.length; i++) {
-      if (matches(chars[i])) {
-        chars[i] = replacement;
-      }
-    }
-    return new String(chars);
-  }
-
-  /**
-   * Returns a string copy of the input character sequence, with each character
-   * that matches this matcher replaced by a given replacement sequence. For
-   * example: <pre>   {@code
-   *
-   *   CharMatcher.is('a').replaceFrom("yaha", "oo")}</pre>
-   *
-   * ... returns {@code "yoohoo"}.
-   *
-   * <p><b>Note:</b> If the replacement is a fixed string with only one character,
-   * you are better off calling {@link #replaceFrom(CharSequence, char)} directly.
-   *
-   * @param sequence the character sequence to replace matching characters in
-   * @param replacement the characters to append to the result string in place
-   *     of each matching character in {@code sequence}
-   * @return the new string
-   */
-  public String replaceFrom(CharSequence sequence, CharSequence replacement) {
-    int replacementLen = replacement.length();
-    if (replacementLen == 0) {
-      return removeFrom(sequence);
-    }
-    if (replacementLen == 1) {
-      return replaceFrom(sequence, replacement.charAt(0));
-    }
-
-    String string = sequence.toString();
-    int pos = indexIn(string);
-    if (pos == -1) {
-      return string;
-    }
-
-    int len = string.length();
-    StringBuilder buf = new StringBuilder((int) (len * 1.5) + 16);
-
-    int oldpos = 0;
-    do {
-      buf.append(string, oldpos, pos);
-      buf.append(replacement);
-      oldpos = pos + 1;
-      pos = indexIn(string, oldpos);
-    } while (pos != -1);
-
-    buf.append(string, oldpos, len);
-    return buf.toString();
-  }
-
-  /**
-   * Returns a substring of the input character sequence that omits all
-   * characters this matcher matches from the beginning and from the end of the
-   * string. For example: <pre> {@code
-   *
-   *   CharMatcher.anyOf("ab").trimFrom("abacatbab")}</pre>
-   *
-   * ... returns {@code "cat"}.
-   *
-   * <p>Note that<pre>   {@code
-   *
-   *   CharMatcher.inRange('\0', ' ').trimFrom(str)}</pre>
-   *
-   * ... is equivalent to {@link String#trim()}.
-   */
-  public String trimFrom(CharSequence sequence) {
-    int len = sequence.length();
-    int first;
-    int last;
-
-    for (first = 0; first < len; first++) {
-      if (!matches(sequence.charAt(first))) {
-        break;
-      }
-    }
-    for (last = len - 1; last > first; last--) {
-      if (!matches(sequence.charAt(last))) {
-        break;
-      }
-    }
-
-    return sequence.subSequence(first, last + 1).toString();
-  }
-
-  /**
-   * Returns a substring of the input character sequence that omits all
-   * characters this matcher matches from the beginning of the
-   * string. For example: <pre> {@code
-   *
-   *   CharMatcher.anyOf("ab").trimLeadingFrom("abacatbab")}</pre>
-   *
-   * ... returns {@code "catbab"}.
-   */
-  public String trimLeadingFrom(CharSequence sequence) {
-    int len = sequence.length();
-    int first;
-
-    for (first = 0; first < len; first++) {
-      if (!matches(sequence.charAt(first))) {
-        break;
-      }
-    }
-
-    return sequence.subSequence(first, len).toString();
-  }
-
-  /**
-   * Returns a substring of the input character sequence that omits all
-   * characters this matcher matches from the end of the
-   * string. For example: <pre> {@code
-   *
-   *   CharMatcher.anyOf("ab").trimTrailingFrom("abacatbab")}</pre>
-   *
-   * ... returns {@code "abacat"}.
-   */
-  public String trimTrailingFrom(CharSequence sequence) {
-    int len = sequence.length();
-    int last;
-
-    for (last = len - 1; last >= 0; last--) {
-      if (!matches(sequence.charAt(last))) {
-        break;
-      }
-    }
-
-    return sequence.subSequence(0, last + 1).toString();
-  }
-
-  /**
-   * Returns a string copy of the input character sequence, with each group of
-   * consecutive characters that match this matcher replaced by a single
-   * replacement character. For example: <pre>   {@code
-   *
-   *   CharMatcher.anyOf("eko").collapseFrom("bookkeeper", '-')}</pre>
-   *
-   * ... returns {@code "b-p-r"}.
-   *
-   * <p>The default implementation uses {@link #indexIn(CharSequence)} to find
-   * the first matching character, then iterates the remainder of the sequence
-   * calling {@link #matches(char)} for each character.
-   *
-   * @param sequence the character sequence to replace matching groups of
-   *     characters in
-   * @param replacement the character to append to the result string in place of
-   *     each group of matching characters in {@code sequence}
-   * @return the new string
-   */
-  public String collapseFrom(CharSequence sequence, char replacement) {
-    int first = indexIn(sequence);
-    if (first == -1) {
-      return sequence.toString();
-    }
-
-    // TODO: this implementation can probably be made faster.
-
-    StringBuilder builder = new StringBuilder(sequence.length())
-        .append(sequence.subSequence(0, first))
-        .append(replacement);
-    boolean in = true;
-    for (int i = first + 1; i < sequence.length(); i++) {
-      char c = sequence.charAt(i);
-      if (apply(c)) {
-        if (!in) {
-          builder.append(replacement);
-          in = true;
-        }
-      } else {
-        builder.append(c);
-        in = false;
-      }
-    }
-    return builder.toString();
-  }
-
-  /**
-   * Collapses groups of matching characters exactly as {@link #collapseFrom}
-   * does, except that groups of matching characters at the start or end of the
-   * sequence are removed without replacement.
-   */
-  public String trimAndCollapseFrom(CharSequence sequence, char replacement) {
-    int first = negate().indexIn(sequence);
-    if (first == -1) {
-      return ""; // everything matches. nothing's left.
-    }
-    StringBuilder builder = new StringBuilder(sequence.length());
-    boolean inMatchingGroup = false;
-    for (int i = first; i < sequence.length(); i++) {
-      char c = sequence.charAt(i);
-      if (apply(c)) {
-        inMatchingGroup = true;
-      } else {
-        if (inMatchingGroup) {
-          builder.append(replacement);
-          inMatchingGroup = false;
-        }
-        builder.append(c);
-      }
-    }
-    return builder.toString();
-  }
-
-  // Predicate interface
-
-  /**
-   * Returns {@code true} if this matcher matches the given character.
-   *
-   * @throws NullPointerException if {@code character} is null
-   */
-  /*@Override*/ public boolean apply(Character character) {
-    return matches(character);
-  }
-}
\ No newline at end of file
diff --git a/src/com/android/mail/lib/base/Escaper.java b/src/com/android/mail/lib/base/Escaper.java
deleted file mode 100644
index 9f6b8f0..0000000
--- a/src/com/android/mail/lib/base/Escaper.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.mail.lib.base;
-
-/**
- * An object that converts literal text into a format safe for inclusion in a particular context
- * (such as an XML document). Typically (but not always), the inverse process of "unescaping" the
- * text is performed automatically by the relevant parser.
- *
- * <p>For example, an XML escaper would convert the literal string {@code "Foo<Bar>"} into {@code
- * "Foo&lt;Bar&gt;"} to prevent {@code "<Bar>"} from being confused with an XML tag. When the
- * resulting XML document is parsed, the parser API will return this text as the original literal
- * string {@code "Foo<Bar>"}.
- *
- * <p>An {@code Escaper} instance is required to be stateless, and safe when used concurrently by
- * multiple threads.
- *
- * <p>The two primary implementations of this interface are {@link CharEscaper} and {@link
- * UnicodeEscaper}. They are heavily optimized for performance and greatly simplify the task of
- * implementing new escapers. It is strongly recommended that when implementing a new escaper you
- * extend one of these classes. If you find that you are unable to achieve the desired behavior
- * using either of these classes, please contact the Java libraries team for advice.
- *
- * <p>Several popular escapers are defined as constants in the class {@link CharEscapers}. To create
- * your own escapers, use {@link CharEscaperBuilder}, or extend {@link CharEscaper} or {@code
- * UnicodeEscaper}.
- *
- * @author dbeaumont@google.com (David Beaumont)
- */
-public abstract class Escaper {
-  /**
-   * Returns the escaped form of a given literal string.
-   *
-   * <p>Note that this method may treat input characters differently depending on the specific
-   * escaper implementation.
-   *
-   * <ul>
-   * <li>{@link UnicodeEscaper} handles <a href="http://en.wikipedia.org/wiki/UTF-16">UTF-16</a>
-   *     correctly, including surrogate character pairs. If the input is badly formed the escaper
-   *     should throw {@link IllegalArgumentException}.
-   * <li>{@link CharEscaper} handles Java characters independently and does not verify the input
-   *     for well formed characters. A CharEscaper should not be used in situations where input is
-   *     not guaranteed to be restricted to the Basic Multilingual Plane (BMP).
-   * </ul>
-   *
-   * @param string the literal string to be escaped
-   * @return the escaped form of {@code string}
-   * @throws NullPointerException if {@code string} is null
-   * @throws IllegalArgumentException if {@code string} contains badly formed UTF-16 or cannot be
-   *         escaped for any other reason
-   */
-  public abstract String escape(String string);
-
-  /**
-   * Returns an {@code Appendable} instance which automatically escapes all text appended to it
-   * before passing the resulting text to an underlying {@code Appendable}.
-   *
-   * <p>Note that the Appendable returned by this method may treat input characters differently
-   * depending on the specific escaper implementation.
-   *
-   * <ul>
-   * <li>{@link UnicodeEscaper} handles <a href="http://en.wikipedia.org/wiki/UTF-16">UTF-16</a>
-   *     correctly, including surrogate character pairs. If the input is badly formed the escaper
-   *     should throw {@link IllegalArgumentException}.
-   * <li>{@link CharEscaper} handles Java characters independently and does not verify the input
-   *     for well formed characters. A CharEscaper should not be used in situations where input is
-   *     not guaranteed to be restricted to the Basic Multilingual Plane (BMP).
-   * </ul>
-   *
-   * <p>In all implementations the escaped Appendable should throw {@code NullPointerException} if
-   * given a {@code null} {@link CharSequence}.
-   *
-   * @param out the underlying {@code Appendable} to append escaped output to
-   * @return an {@code Appendable} which passes text to {@code out} after escaping it
-   */
-  public abstract Appendable escape(Appendable out);
-
-  private final Function<String, String> asFunction =
-      new Function<String, String>() {
-        public String apply(String from) {
-          return escape(from);
-        }
-      };
-
-  /**
-   * Returns a {@link Function} that invokes {@link #escape(String)} on this escaper.
-   */
-  public Function<String, String> asFunction() {
-    return asFunction;
-  }
-}
\ No newline at end of file
diff --git a/src/com/android/mail/lib/base/Function.java b/src/com/android/mail/lib/base/Function.java
deleted file mode 100644
index 6df8289..0000000
--- a/src/com/android/mail/lib/base/Function.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mail.lib.base;
-
-/**
- * A transformation from one object to another. For example, a
- * {@code StringToIntegerFunction} may implement
- * <code>Function&lt;String,Integer&gt;</code> and transform integers in
- * {@code String} format to {@code Integer} format.
- *
- * <p>The transformation on the source object does not necessarily result in
- * an object of a different type.  For example, a
- * {@code FarenheitToCelsiusFunction} may implement
- * <code>Function&lt;Float,Float&gt;</code>.
- *
- * <p>Implementations which may cause side effects upon evaluation are strongly
- * encouraged to state this fact clearly in their API documentation.
- *
- * @param <F> the type of the function input
- * @param <T> the type of the function output
- * @author Kevin Bourrillion
- * @author Scott Bonneau
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-public interface Function<F, T> {
-
-  /**
-   * Applies the function to an object of type {@code F}, resulting in an object
-   * of type {@code T}.  Note that types {@code F} and {@code T} may or may not
-   * be the same.
-   *
-   * @param from the source object
-   * @return the resulting object
-   */
-  T apply(F from);
-
-  /**
-   * Indicates whether some other object is equal to this {@code Function}.
-   * This method can return {@code true} <i>only</i> if the specified object is
-   * also a {@code Function} and, for every input object {@code o}, it returns
-   * exactly the same value.  Thus, {@code function1.equals(function2)} implies
-   * that either {@code function1.apply(o)} and {@code function2.apply(o)} are
-   * both null, or {@code function1.apply(o).equals(function2.apply(o))}.
-   *
-   * <p>Note that it is always safe <em>not</em> to override
-   * {@link Object#equals}.
-   */
-  boolean equals(Object obj);
-}
diff --git a/src/com/android/mail/lib/base/PercentEscaper.java b/src/com/android/mail/lib/base/PercentEscaper.java
deleted file mode 100644
index e7baa36..0000000
--- a/src/com/android/mail/lib/base/PercentEscaper.java
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.mail.lib.base;
-
-import static com.android.mail.lib.base.Preconditions.checkNotNull;
-
-/**
- * A {@code UnicodeEscaper} that escapes some set of Java characters using
- * the URI percent encoding scheme. The set of safe characters (those which
- * remain unescaped) can be specified on construction.
- *
- * <p>For details on escaping URIs for use in web pages, see section 2.4 of
- * <a href="http://www.ietf.org/rfc/rfc3986.txt">RFC 3986</a>.
- *
- * <p>In most cases this class should not need to be used directly. If you
- * have no special requirements for escaping your URIs, you should use either
- * {@link CharEscapers#uriEscaper()} or
- * {@link CharEscapers#uriEscaper(boolean)}.
- *
- * <p>When encoding a String, the following rules apply:
- * <ul>
- * <li>The alphanumeric characters "a" through "z", "A" through "Z" and "0"
- * through "9" remain the same.
- * <li>Any additionally specified safe characters remain the same.
- * <li>If {@code plusForSpace} was specified, the space character " " is
- * converted into a plus sign "+".
- * <li>All other characters are converted into one or more bytes using UTF-8
- *     encoding and each byte is then represented by the 3-character string
- *     "%XY", where "XY" is the two-digit, uppercase, hexadecimal representation
- *     of the byte value.
- * </ul>
- *
- * <p>RFC 2396 specifies the set of unreserved characters as "-", "_", ".", "!",
- * "~", "*", "'", "(" and ")". It goes on to state:
- *
- * <p><i>Unreserved characters can be escaped without changing the semantics
- * of the URI, but this should not be done unless the URI is being used
- * in a context that does not allow the unescaped character to appear.</i>
- *
- * <p>For performance reasons the only currently supported character encoding of
- * this class is UTF-8.
- *
- * <p><b>Note</b>: This escaper produces uppercase hexadecimal sequences. From
- * <a href="http://www.ietf.org/rfc/rfc3986.txt">RFC 3986</a>:<br>
- * <i>"URI producers and normalizers should use uppercase hexadecimal digits
- * for all percent-encodings."</i>
- *
- * @author dbeaumont@google.com (David Beaumont)
- */
-public class PercentEscaper extends UnicodeEscaper {
-  /**
-   * A string of safe characters that mimics the behavior of
-   * {@link java.net.URLEncoder}.
-   *
-   * TODO(dbeaumont): Fix escapers to be compliant with RFC 3986
-   */
-  public static final String SAFECHARS_URLENCODER = "-_.*";
-
-  /**
-   * A string of characters that do not need to be encoded when used in URI
-   * path segments, as specified in RFC 3986. Note that some of these
-   * characters do need to be escaped when used in other parts of the URI.
-   */
-  public static final String SAFEPATHCHARS_URLENCODER = "-_.!~*'()@:$&,;=";
-
-  /**
-   * A string of characters that do not need to be encoded when used in URI
-   * query strings, as specified in RFC 3986. Note that some of these
-   * characters do need to be escaped when used in other parts of the URI.
-   */
-  public static final String SAFEQUERYSTRINGCHARS_URLENCODER
-      = "-_.!~*'()@:$,;/?:";
-
-  // In some uri escapers spaces are escaped to '+'
-  private static final char[] URI_ESCAPED_SPACE = { '+' };
-
-  // TODO(dbeaumont): Remove this once UriEscaper uses lower case
-  private static final char[] UPPER_HEX_DIGITS =
-      "0123456789ABCDEF".toCharArray();
-
-  /**
-   * If true we should convert space to the {@code +} character.
-   */
-  private final boolean plusForSpace;
-
-  /**
-   * An array of flags where for any {@code char c} if {@code safeOctets[c]} is
-   * true then {@code c} should remain unmodified in the output. If
-   * {@code c > safeOctets.length} then it should be escaped.
-   */
-  private final boolean[] safeOctets;
-
-  /**
-   * Constructs a URI escaper with the specified safe characters and optional
-   * handling of the space character.
-   *
-   * @param safeChars a non null string specifying additional safe characters
-   *        for this escaper (the ranges 0..9, a..z and A..Z are always safe and
-   *        should not be specified here)
-   * @param plusForSpace true if ASCII space should be escaped to {@code +}
-   *        rather than {@code %20}
-   * @throws IllegalArgumentException if any of the parameters were invalid
-   */
-  public PercentEscaper(String safeChars, boolean plusForSpace) {
-    checkNotNull(safeChars);  // eager for GWT.
-
-    // Avoid any misunderstandings about the behavior of this escaper
-    if (safeChars.matches(".*[0-9A-Za-z].*")) {
-      throw new IllegalArgumentException(
-          "Alphanumeric characters are always 'safe' and should not be " +
-          "explicitly specified");
-    }
-    // Avoid ambiguous parameters. Safe characters are never modified so if
-    // space is a safe character then setting plusForSpace is meaningless.
-    if (plusForSpace && safeChars.contains(" ")) {
-      throw new IllegalArgumentException(
-          "plusForSpace cannot be specified when space is a 'safe' character");
-    }
-    if (safeChars.contains("%")) {
-      throw new IllegalArgumentException(
-          "The '%' character cannot be specified as 'safe'");
-    }
-    this.plusForSpace = plusForSpace;
-    this.safeOctets = createSafeOctets(safeChars);
-  }
-
-  /**
-   * Creates a boolean[] with entries corresponding to the character values
-   * for 0-9, A-Z, a-z and those specified in safeChars set to true. The array
-   * is as small as is required to hold the given character information.
-   */
-  private static boolean[] createSafeOctets(String safeChars) {
-    int maxChar = 'z';
-    char[] safeCharArray = safeChars.toCharArray();
-    for (char c : safeCharArray) {
-      maxChar = Math.max(c, maxChar);
-    }
-    boolean[] octets = new boolean[maxChar + 1];
-    for (int c = '0'; c <= '9'; c++) {
-      octets[c] = true;
-    }
-    for (int c = 'A'; c <= 'Z'; c++) {
-      octets[c] = true;
-    }
-    for (int c = 'a'; c <= 'z'; c++) {
-      octets[c] = true;
-    }
-    for (char c : safeCharArray) {
-      octets[c] = true;
-    }
-    return octets;
-  }
-
-  /*
-   * Overridden for performance. For unescaped strings this improved the
-   * performance of the uri escaper from ~760ns to ~400ns as measured by
-   * {@link CharEscapersBenchmark}.
-   */
-  @Override
-  protected int nextEscapeIndex(CharSequence csq, int index, int end) {
-    for (; index < end; index++) {
-      char c = csq.charAt(index);
-      if (c >= safeOctets.length || !safeOctets[c]) {
-        break;
-      }
-    }
-    return index;
-  }
-
-  /*
-   * Overridden for performance. For unescaped strings this improved the
-   * performance of the uri escaper from ~400ns to ~170ns as measured by
-   * {@link CharEscapersBenchmark}.
-   */
-  @Override
-  public String escape(String s) {
-    checkNotNull(s);
-    int slen = s.length();
-    for (int index = 0; index < slen; index++) {
-      char c = s.charAt(index);
-      if (c >= safeOctets.length || !safeOctets[c]) {
-        return escapeSlow(s, index);
-      }
-    }
-    return s;
-  }
-
-  /**
-   * Escapes the given Unicode code point in UTF-8.
-   */
-  @Override
-  protected char[] escape(int cp) {
-    // We should never get negative values here but if we do it will throw an
-    // IndexOutOfBoundsException, so at least it will get spotted.
-    if (cp < safeOctets.length && safeOctets[cp]) {
-      return null;
-    } else if (cp == ' ' && plusForSpace) {
-      return URI_ESCAPED_SPACE;
-    } else if (cp <= 0x7F) {
-      // Single byte UTF-8 characters
-      // Start with "%--" and fill in the blanks
-      char[] dest = new char[3];
-      dest[0] = '%';
-      dest[2] = UPPER_HEX_DIGITS[cp & 0xF];
-      dest[1] = UPPER_HEX_DIGITS[cp >>> 4];
-      return dest;
-    } else if (cp <= 0x7ff) {
-      // Two byte UTF-8 characters [cp >= 0x80 && cp <= 0x7ff]
-      // Start with "%--%--" and fill in the blanks
-      char[] dest = new char[6];
-      dest[0] = '%';
-      dest[3] = '%';
-      dest[5] = UPPER_HEX_DIGITS[cp & 0xF];
-      cp >>>= 4;
-      dest[4] = UPPER_HEX_DIGITS[0x8 | (cp & 0x3)];
-      cp >>>= 2;
-      dest[2] = UPPER_HEX_DIGITS[cp & 0xF];
-      cp >>>= 4;
-      dest[1] = UPPER_HEX_DIGITS[0xC | cp];
-      return dest;
-    } else if (cp <= 0xffff) {
-      // Three byte UTF-8 characters [cp >= 0x800 && cp <= 0xffff]
-      // Start with "%E-%--%--" and fill in the blanks
-      char[] dest = new char[9];
-      dest[0] = '%';
-      dest[1] = 'E';
-      dest[3] = '%';
-      dest[6] = '%';
-      dest[8] = UPPER_HEX_DIGITS[cp & 0xF];
-      cp >>>= 4;
-      dest[7] = UPPER_HEX_DIGITS[0x8 | (cp & 0x3)];
-      cp >>>= 2;
-      dest[5] = UPPER_HEX_DIGITS[cp & 0xF];
-      cp >>>= 4;
-      dest[4] = UPPER_HEX_DIGITS[0x8 | (cp & 0x3)];
-      cp >>>= 2;
-      dest[2] = UPPER_HEX_DIGITS[cp];
-      return dest;
-    } else if (cp <= 0x10ffff) {
-      char[] dest = new char[12];
-      // Four byte UTF-8 characters [cp >= 0xffff && cp <= 0x10ffff]
-      // Start with "%F-%--%--%--" and fill in the blanks
-      dest[0] = '%';
-      dest[1] = 'F';
-      dest[3] = '%';
-      dest[6] = '%';
-      dest[9] = '%';
-      dest[11] = UPPER_HEX_DIGITS[cp & 0xF];
-      cp >>>= 4;
-      dest[10] = UPPER_HEX_DIGITS[0x8 | (cp & 0x3)];
-      cp >>>= 2;
-      dest[8] = UPPER_HEX_DIGITS[cp & 0xF];
-      cp >>>= 4;
-      dest[7] = UPPER_HEX_DIGITS[0x8 | (cp & 0x3)];
-      cp >>>= 2;
-      dest[5] = UPPER_HEX_DIGITS[cp & 0xF];
-      cp >>>= 4;
-      dest[4] = UPPER_HEX_DIGITS[0x8 | (cp & 0x3)];
-      cp >>>= 2;
-      dest[2] = UPPER_HEX_DIGITS[cp & 0x7];
-      return dest;
-    } else {
-      // If this ever happens it is due to bug in UnicodeEscaper, not bad input.
-      throw new IllegalArgumentException(
-          "Invalid unicode character value " + cp);
-    }
-  }
-}
\ No newline at end of file
diff --git a/src/com/android/mail/lib/base/Platform.java b/src/com/android/mail/lib/base/Platform.java
deleted file mode 100644
index 78e29f3..0000000
--- a/src/com/android/mail/lib/base/Platform.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mail.lib.base;
-
-
-/**
- * Methods factored out so that they can be emulated differently in GWT.
- *
- * @author Jesse Wilson
- */
-final class Platform {
-  private Platform() {}
-
-  /**
-   * Calls {@link Class#isInstance(Object)}.
-   *
-   * <p>This method is not supported in GWT yet.
-   */
-  static boolean isInstance(Class<?> clazz, Object obj) {
-    return clazz.isInstance(obj);
-  }
-
-  /** Returns a thread-local 1024-char array. */
-  static char[] charBufferFromThreadLocal() {
-    return DEST_TL.get();
-  }
-
-  /**
-   * A thread-local destination buffer to keep us from creating new buffers.
-   * The starting size is 1024 characters.  If we grow past this we don't
-   * put it back in the threadlocal, we just keep going and grow as needed.
-   */
-  private static final ThreadLocal<char[]> DEST_TL = new ThreadLocal<char[]>() {
-    @Override
-    protected char[] initialValue() {
-      return new char[1024];
-    }
-  };
-
-  static CharMatcher precomputeCharMatcher(CharMatcher matcher) {
-    return matcher.precomputedInternal();
-  }
-}
diff --git a/src/com/android/mail/lib/base/Preconditions.java b/src/com/android/mail/lib/base/Preconditions.java
deleted file mode 100644
index ebf661a..0000000
--- a/src/com/android/mail/lib/base/Preconditions.java
+++ /dev/null
@@ -1,429 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mail.lib.base;
-
-import java.util.NoSuchElementException;
-
-/**
- * Simple static methods to be called at the start of your own methods to verify
- * correct arguments and state. This allows constructs such as
- * <pre>
- *     if (count <= 0) {
- *       throw new IllegalArgumentException("must be positive: " + count);
- *     }</pre>
- *
- * to be replaced with the more compact
- * <pre>
- *     checkArgument(count > 0, "must be positive: %s", count);</pre>
- *
- * Note that the sense of the expression is inverted; with {@code Preconditions}
- * you declare what you expect to be <i>true</i>, just as you do with an
- * <a href="http://java.sun.com/j2se/1.5.0/docs/guide/language/assert.html">
- * {@code assert}</a> or a JUnit {@code assertTrue} call.
- *
- * <p><b>Warning:</b> only the {@code "%s"} specifier is recognized as a
- * placeholder in these messages, not the full range of {@link
- * String#format(String, Object[])} specifiers.
- *
- * <p>Take care not to confuse precondition checking with other similar types
- * of checks! Precondition exceptions -- including those provided here, but also
- * {@link IndexOutOfBoundsException}, {@link NoSuchElementException}, {@link
- * UnsupportedOperationException} and others -- are used to signal that the
- * <i>calling method</i> has made an error. This tells the caller that it should
- * not have invoked the method when it did, with the arguments it did, or
- * perhaps ever. Postcondition or other invariant failures should not throw
- * these types of exceptions.
- *
- * @author Kevin Bourrillion
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-public class Preconditions {
-  private Preconditions() {}
-
-  /**
-   * Ensures the truth of an expression involving one or more parameters to the
-   * calling method.
-   *
-   * @param expression a boolean expression
-   * @throws IllegalArgumentException if {@code expression} is false
-   */
-  public static void checkArgument(boolean expression) {
-    if (!expression) {
-      throw new IllegalArgumentException();
-    }
-  }
-
-  /**
-   * Ensures the truth of an expression involving one or more parameters to the
-   * calling method.
-   *
-   * @param expression a boolean expression
-   * @param errorMessage the exception message to use if the check fails; will
-   *     be converted to a string using {@link String#valueOf(Object)}
-   * @throws IllegalArgumentException if {@code expression} is false
-   */
-  public static void checkArgument(boolean expression, Object errorMessage) {
-    if (!expression) {
-      throw new IllegalArgumentException(String.valueOf(errorMessage));
-    }
-  }
-
-  /**
-   * Ensures the truth of an expression involving one or more parameters to the
-   * calling method.
-   *
-   * @param expression a boolean expression
-   * @param errorMessageTemplate a template for the exception message should the
-   *     check fail. The message is formed by replacing each {@code %s}
-   *     placeholder in the template with an argument. These are matched by
-   *     position - the first {@code %s} gets {@code errorMessageArgs[0]}, etc.
-   *     Unmatched arguments will be appended to the formatted message in square
-   *     braces. Unmatched placeholders will be left as-is.
-   * @param errorMessageArgs the arguments to be substituted into the message
-   *     template. Arguments are converted to strings using
-   *     {@link String#valueOf(Object)}.
-   * @throws IllegalArgumentException if {@code expression} is false
-   * @throws NullPointerException if the check fails and either {@code
-   *     errorMessageTemplate} or {@code errorMessageArgs} is null (don't let
-   *     this happen)
-   */
-  public static void checkArgument(boolean expression,
-      String errorMessageTemplate, Object... errorMessageArgs) {
-    if (!expression) {
-      throw new IllegalArgumentException(
-          format(errorMessageTemplate, errorMessageArgs));
-    }
-  }
-
-  /**
-   * Ensures the truth of an expression involving the state of the calling
-   * instance, but not involving any parameters to the calling method.
-   *
-   * @param expression a boolean expression
-   * @throws IllegalStateException if {@code expression} is false
-   */
-  public static void checkState(boolean expression) {
-    if (!expression) {
-      throw new IllegalStateException();
-    }
-  }
-
-  /**
-   * Ensures the truth of an expression involving the state of the calling
-   * instance, but not involving any parameters to the calling method.
-   *
-   * @param expression a boolean expression
-   * @param errorMessage the exception message to use if the check fails; will
-   *     be converted to a string using {@link String#valueOf(Object)}
-   * @throws IllegalStateException if {@code expression} is false
-   */
-  public static void checkState(boolean expression, Object errorMessage) {
-    if (!expression) {
-      throw new IllegalStateException(String.valueOf(errorMessage));
-    }
-  }
-
-  /**
-   * Ensures the truth of an expression involving the state of the calling
-   * instance, but not involving any parameters to the calling method.
-   *
-   * @param expression a boolean expression
-   * @param errorMessageTemplate a template for the exception message should the
-   *     check fail. The message is formed by replacing each {@code %s}
-   *     placeholder in the template with an argument. These are matched by
-   *     position - the first {@code %s} gets {@code errorMessageArgs[0]}, etc.
-   *     Unmatched arguments will be appended to the formatted message in square
-   *     braces. Unmatched placeholders will be left as-is.
-   * @param errorMessageArgs the arguments to be substituted into the message
-   *     template. Arguments are converted to strings using
-   *     {@link String#valueOf(Object)}.
-   * @throws IllegalStateException if {@code expression} is false
-   * @throws NullPointerException if the check fails and either {@code
-   *     errorMessageTemplate} or {@code errorMessageArgs} is null (don't let
-   *     this happen)
-   */
-  public static void checkState(boolean expression,
-      String errorMessageTemplate, Object... errorMessageArgs) {
-    if (!expression) {
-      throw new IllegalStateException(
-          format(errorMessageTemplate, errorMessageArgs));
-    }
-  }
-
-  /**
-   * Ensures that an object reference passed as a parameter to the calling
-   * method is not null.
-   *
-   * @param reference an object reference
-   * @return the non-null reference that was validated
-   * @throws NullPointerException if {@code reference} is null
-   */
-  public static <T> T checkNotNull(T reference) {
-    if (reference == null) {
-      throw new NullPointerException();
-    }
-    return reference;
-  }
-
-  /**
-   * Ensures that an object reference passed as a parameter to the calling
-   * method is not null.
-   *
-   * @param reference an object reference
-   * @param errorMessage the exception message to use if the check fails; will
-   *     be converted to a string using {@link String#valueOf(Object)}
-   * @return the non-null reference that was validated
-   * @throws NullPointerException if {@code reference} is null
-   */
-  public static <T> T checkNotNull(T reference, Object errorMessage) {
-    if (reference == null) {
-      throw new NullPointerException(String.valueOf(errorMessage));
-    }
-    return reference;
-  }
-
-  /**
-   * Ensures that an object reference passed as a parameter to the calling
-   * method is not null.
-   *
-   * @param reference an object reference
-   * @param errorMessageTemplate a template for the exception message should the
-   *     check fail. The message is formed by replacing each {@code %s}
-   *     placeholder in the template with an argument. These are matched by
-   *     position - the first {@code %s} gets {@code errorMessageArgs[0]}, etc.
-   *     Unmatched arguments will be appended to the formatted message in square
-   *     braces. Unmatched placeholders will be left as-is.
-   * @param errorMessageArgs the arguments to be substituted into the message
-   *     template. Arguments are converted to strings using
-   *     {@link String#valueOf(Object)}.
-   * @return the non-null reference that was validated
-   * @throws NullPointerException if {@code reference} is null
-   */
-  public static <T> T checkNotNull(T reference, String errorMessageTemplate,
-      Object... errorMessageArgs) {
-    if (reference == null) {
-      // If either of these parameters is null, the right thing happens anyway
-      throw new NullPointerException(
-          format(errorMessageTemplate, errorMessageArgs));
-    }
-    return reference;
-  }
-
-  /*
-   * All recent hotspots (as of 2009) *really* like to have the natural code
-   *
-   * if (guardExpression) {
-   *    throw new BadException(messageExpression);
-   * }
-   *
-   * refactored so that messageExpression is moved to a separate
-   * String-returning method.
-   *
-   * if (guardExpression) {
-   *    throw new BadException(badMsg(...));
-   * }
-   *
-   * The alternative natural refactorings into void or Exception-returning
-   * methods are much slower.  This is a big deal - we're talking factors of
-   * 2-8 in microbenchmarks, not just 10-20%.  (This is a hotspot optimizer
-   * bug, which should be fixed, but that's a separate, big project).
-   *
-   * The coding pattern above is heavily used in java.util, e.g. in ArrayList.
-   * There is a RangeCheckMicroBenchmark in the JDK that was used to test this.
-   *
-   * But the methods in this class want to throw different exceptions,
-   * depending on the args, so it appears that this pattern is not directly
-   * applicable.  But we can use the ridiculous, devious trick of throwing an
-   * exception in the middle of the construction of another exception.
-   * Hotspot is fine with that.
-   */
-
-  /**
-   * Ensures that {@code index} specifies a valid <i>element</i> in an array,
-   * list or string of size {@code size}. An element index may range from zero,
-   * inclusive, to {@code size}, exclusive.
-   *
-   * @param index a user-supplied index identifying an element of an array, list
-   *     or string
-   * @param size the size of that array, list or string
-   * @return the value of {@code index}
-   * @throws IndexOutOfBoundsException if {@code index} is negative or is not
-   *     less than {@code size}
-   * @throws IllegalArgumentException if {@code size} is negative
-   */
-  public static int checkElementIndex(int index, int size) {
-    return checkElementIndex(index, size, "index");
-  }
-
-  /**
-   * Ensures that {@code index} specifies a valid <i>element</i> in an array,
-   * list or string of size {@code size}. An element index may range from zero,
-   * inclusive, to {@code size}, exclusive.
-   *
-   * @param index a user-supplied index identifying an element of an array, list
-   *     or string
-   * @param size the size of that array, list or string
-   * @param desc the text to use to describe this index in an error message
-   * @return the value of {@code index}
-   * @throws IndexOutOfBoundsException if {@code index} is negative or is not
-   *     less than {@code size}
-   * @throws IllegalArgumentException if {@code size} is negative
-   */
-  public static int checkElementIndex(int index, int size, String desc) {
-    // Carefully optimized for execution by hotspot (explanatory comment above)
-    if (index < 0 || index >= size) {
-      throw new IndexOutOfBoundsException(badElementIndex(index, size, desc));
-    }
-    return index;
-  }
-
-  private static String badElementIndex(int index, int size, String desc) {
-    if (index < 0) {
-      return format("%s (%s) must not be negative", desc, index);
-    } else if (size < 0) {
-      throw new IllegalArgumentException("negative size: " + size);
-    } else { // index >= size
-      return format("%s (%s) must be less than size (%s)", desc, index, size);
-    }
-  }
-
-  /**
-   * Ensures that {@code index} specifies a valid <i>position</i> in an array,
-   * list or string of size {@code size}. A position index may range from zero
-   * to {@code size}, inclusive.
-   *
-   * @param index a user-supplied index identifying a position in an array, list
-   *     or string
-   * @param size the size of that array, list or string
-   * @return the value of {@code index}
-   * @throws IndexOutOfBoundsException if {@code index} is negative or is
-   *     greater than {@code size}
-   * @throws IllegalArgumentException if {@code size} is negative
-   */
-  public static int checkPositionIndex(int index, int size) {
-    return checkPositionIndex(index, size, "index");
-  }
-
-  /**
-   * Ensures that {@code index} specifies a valid <i>position</i> in an array,
-   * list or string of size {@code size}. A position index may range from zero
-   * to {@code size}, inclusive.
-   *
-   * @param index a user-supplied index identifying a position in an array, list
-   *     or string
-   * @param size the size of that array, list or string
-   * @param desc the text to use to describe this index in an error message
-   * @return the value of {@code index}
-   * @throws IndexOutOfBoundsException if {@code index} is negative or is
-   *     greater than {@code size}
-   * @throws IllegalArgumentException if {@code size} is negative
-   */
-  public static int checkPositionIndex(int index, int size, String desc) {
-    // Carefully optimized for execution by hotspot (explanatory comment above)
-    if (index < 0 || index > size) {
-      throw new IndexOutOfBoundsException(badPositionIndex(index, size, desc));
-    }
-    return index;
-  }
-
-  private static String badPositionIndex(int index, int size, String desc) {
-    if (index < 0) {
-      return format("%s (%s) must not be negative", desc, index);
-    } else if (size < 0) {
-      throw new IllegalArgumentException("negative size: " + size);
-    } else { // index > size
-      return format("%s (%s) must not be greater than size (%s)",
-                    desc, index, size);
-    }
-  }
-
-  /**
-   * Ensures that {@code start} and {@code end} specify a valid <i>positions</i>
-   * in an array, list or string of size {@code size}, and are in order. A
-   * position index may range from zero to {@code size}, inclusive.
-   *
-   * @param start a user-supplied index identifying a starting position in an
-   *     array, list or string
-   * @param end a user-supplied index identifying a ending position in an array,
-   *     list or string
-   * @param size the size of that array, list or string
-   * @throws IndexOutOfBoundsException if either index is negative or is
-   *     greater than {@code size}, or if {@code end} is less than {@code start}
-   * @throws IllegalArgumentException if {@code size} is negative
-   */
-  public static void checkPositionIndexes(int start, int end, int size) {
-    // Carefully optimized for execution by hotspot (explanatory comment above)
-    if (start < 0 || end < start || end > size) {
-      throw new IndexOutOfBoundsException(badPositionIndexes(start, end, size));
-    }
-  }
-
-  private static String badPositionIndexes(int start, int end, int size) {
-    if (start < 0 || start > size) {
-      return badPositionIndex(start, size, "start index");
-    }
-    if (end < 0 || end > size) {
-      return badPositionIndex(end, size, "end index");
-    }
-    // end < start
-    return format("end index (%s) must not be less than start index (%s)",
-                  end, start);
-  }
-
-  /**
-   * Substitutes each {@code %s} in {@code template} with an argument. These
-   * are matched by position - the first {@code %s} gets {@code args[0]}, etc.
-   * If there are more arguments than placeholders, the unmatched arguments will
-   * be appended to the end of the formatted message in square braces.
-   *
-   * @param template a non-null string containing 0 or more {@code %s}
-   *     placeholders.
-   * @param args the arguments to be substituted into the message
-   *     template. Arguments are converted to strings using
-   *     {@link String#valueOf(Object)}. Arguments can be null.
-   */
-  static String format(String template, Object... args) {
-    // start substituting the arguments into the '%s' placeholders
-    StringBuilder builder = new StringBuilder(
-        template.length() + 16 * args.length);
-    int templateStart = 0;
-    int i = 0;
-    while (i < args.length) {
-      int placeholderStart = template.indexOf("%s", templateStart);
-      if (placeholderStart == -1) {
-        break;
-      }
-      builder.append(template.substring(templateStart, placeholderStart));
-      builder.append(args[i++]);
-      templateStart = placeholderStart + 2;
-    }
-    builder.append(template.substring(templateStart));
-
-    // if we run out of placeholders, append the extra args in square braces
-    if (i < args.length) {
-      builder.append(" [");
-      builder.append(args[i++]);
-      while (i < args.length) {
-        builder.append(", ");
-        builder.append(args[i++]);
-      }
-      builder.append("]");
-    }
-
-    return builder.toString();
-  }
-}
diff --git a/src/com/android/mail/lib/base/Predicate.java b/src/com/android/mail/lib/base/Predicate.java
deleted file mode 100644
index 009f028..0000000
--- a/src/com/android/mail/lib/base/Predicate.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mail.lib.base;
-
-
-/**
- * Determines a true or false value for a given input. For example, a
- * {@code RegexPredicate} might implement {@code Predicate<String>}, and return
- * {@code true} for any string that matches its given regular expression.
- *
- * <p>Implementations which may cause side effects upon evaluation are strongly
- * encouraged to state this fact clearly in their API documentation.
- *
- * @author Kevin Bourrillion
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-public interface Predicate<T> {
-
-  /*
-   * This interface does not extend Function<T, Boolean> because doing so would
-   * let predicates return null.
-   */
-
-  /**
-   * Applies this predicate to the given object.
-   *
-   * @param input the input that the predicate should act on
-   * @return the value of this predicate when applied to the input {@code t}
-   */
-  boolean apply(T input);
-
-  /**
-   * Indicates whether some other object is equal to this {@code Predicate}.
-   * This method can return {@code true} <i>only</i> if the specified object is
-   * also a {@code Predicate} and, for every input object {@code input}, it
-   * returns exactly the same value. Thus, {@code predicate1.equals(predicate2)}
-   * implies that either {@code predicate1.apply(input)} and
-   * {@code predicate2.apply(input)} are both {@code true} or both
-   * {@code false}.
-   *
-   * <p>Note that it is always safe <i>not</i> to override
-   * {@link Object#equals}.
-   */
-  boolean equals(Object obj);
-}
diff --git a/src/com/android/mail/lib/base/Splitter.java b/src/com/android/mail/lib/base/Splitter.java
deleted file mode 100644
index 205cd2c..0000000
--- a/src/com/android/mail/lib/base/Splitter.java
+++ /dev/null
@@ -1,457 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mail.lib.base;
-
-import static com.android.mail.lib.base.Preconditions.checkArgument;
-import static com.android.mail.lib.base.Preconditions.checkNotNull;
-import static com.android.mail.lib.base.Preconditions.checkState;
-
-import com.google.common.base.Joiner;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import java.util.StringTokenizer;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.regex.PatternSyntaxException;
-
-/**
- * An object that divides strings (or other instances of {@code CharSequence})
- * into substrings, by recognizing a <i>separator</i> (a.k.a. "delimiter")
- * which can be expressed as a single character, literal string, regular
- * expression, {@code CharMatcher}, or by using a fixed substring length. This
- * class provides the complementary functionality to {@link Joiner}.
- *
- * <p>Here is the most basic example of {@code Splitter} usage: <pre>   {@code
- *
- *   Splitter.on(',').split("foo,bar")}</pre>
- *
- * This invocation returns an {@code Iterable<String>} containing {@code "foo"}
- * and {@code "bar"}, in that order.
- *
- * <p>By default {@code Splitter}'s behavior is very simplistic: <pre>   {@code
- *
- *   Splitter.on(',').split("foo,,bar,  quux")}</pre>
- *
- * This returns an iterable containing {@code ["foo", "", "bar", "  quux"]}.
- * Notice that the splitter does not assume that you want empty strings removed,
- * or that you wish to trim whitespace. If you want features like these, simply
- * ask for them: <pre> {@code
- *
- *   private static final Splitter MY_SPLITTER = Splitter.on(',')
- *       .trimResults()
- *       .omitEmptyStrings();}</pre>
- *
- * Now {@code MY_SPLITTER.split("foo, ,bar,  quux,")} returns an iterable
- * containing just {@code ["foo", "bar", "quux"]}. Note that the order in which
- * the configuration methods are called is never significant; for instance,
- * trimming is always applied first before checking for an empty result,
- * regardless of the order in which the {@link #trimResults()} and
- * {@link #omitEmptyStrings()} methods were invoked.
- *
- * <p><b>Warning: splitter instances are always immutable</b>; a configuration
- * method such as {@code omitEmptyStrings} has no effect on the instance it
- * is invoked on! You must store and use the new splitter instance returned by
- * the method. This makes splitters thread-safe, and safe to store as {@code
- * static final} constants (as illustrated above). <pre>   {@code
- *
- *   // Bad! Do not do this!
- *   Splitter splitter = Splitter.on('/');
- *   splitter.trimResults(); // does nothing!
- *   return splitter.split("wrong / wrong / wrong");}</pre>
- *
- * The separator recognized by the splitter does not have to be a single
- * literal character as in the examples above. See the methods {@link
- * #on(String)}, {@link #on(Pattern)} and {@link #on(CharMatcher)} for examples
- * of other ways to specify separators.
- *
- * <p><b>Note:</b> this class does not mimic any of the quirky behaviors of
- * similar JDK methods; for instance, it does not silently discard trailing
- * separators, as does {@link String#split(String)}, nor does it have a default
- * behavior of using five particular whitespace characters as separators, like
- * {@link StringTokenizer}.
- *
- * @author Julien Silland
- * @author Jesse Wilson
- * @author Kevin Bourrillion
- * @since 2009.09.15 <b>tentative</b>
- */
-public final class Splitter {
-  private final CharMatcher trimmer;
-  private final boolean omitEmptyStrings;
-  private final Strategy strategy;
-
-  private Splitter(Strategy strategy) {
-    this(strategy, false, CharMatcher.NONE);
-  }
-
-  private Splitter(Strategy strategy, boolean omitEmptyStrings,
-      CharMatcher trimmer) {
-    this.strategy = strategy;
-    this.omitEmptyStrings = omitEmptyStrings;
-    this.trimmer = trimmer;
-  }
-
-  /**
-   * Returns a splitter that uses the given single-character separator. For
-   * example, {@code Splitter.on(',').split("foo,,bar")} returns an iterable
-   * containing {@code ["foo", "", "bar"]}.
-   *
-   * @param separator the character to recognize as a separator
-   * @return a splitter, with default settings, that recognizes that separator
-   */
-  public static Splitter on(char separator) {
-    return on(CharMatcher.is(separator));
-  }
-
-  /**
-   * Returns a splitter that considers any single character matched by the
-   * given {@code CharMatcher} to be a separator. For example, {@code
-   * Splitter.on(CharMatcher.anyOf(";,")).split("foo,;bar,quux")} returns an
-   * iterable containing {@code ["foo", "", "bar", "quux"]}.
-   *
-   * @param separatorMatcher a {@link CharMatcher} that determines whether a
-   *     character is a separator
-   * @return a splitter, with default settings, that uses this matcher
-   */
-  public static Splitter on(final CharMatcher separatorMatcher) {
-    checkNotNull(separatorMatcher);
-
-    return new Splitter(new Strategy() {
-      /*@Override*/ public SplittingIterator iterator(
-          Splitter splitter, final CharSequence toSplit) {
-        return new SplittingIterator(splitter, toSplit) {
-          @Override int separatorStart(int start) {
-            return separatorMatcher.indexIn(toSplit, start);
-          }
-
-          @Override int separatorEnd(int separatorPosition) {
-            return separatorPosition + 1;
-          }
-        };
-      }
-    });
-  }
-
-  /**
-   * Returns a splitter that uses the given fixed string as a separator. For
-   * example, {@code Splitter.on(", ").split("foo, bar, baz,qux")} returns an
-   * iterable containing {@code ["foo", "bar", "baz,qux"]}.
-   *
-   * @param separator the literal, nonempty string to recognize as a separator
-   * @return a splitter, with default settings, that recognizes that separator
-   */
-  public static Splitter on(final String separator) {
-    checkArgument(separator.length() != 0,
-        "The separator may not be the empty string.");
-
-    return new Splitter(new Strategy() {
-      /*@Override*/ public SplittingIterator iterator(
-          Splitter splitter, CharSequence toSplit) {
-        return new SplittingIterator(splitter, toSplit) {
-          @Override public int separatorStart(int start) {
-            int delimeterLength = separator.length();
-
-            positions:
-            for (int p = start, last = toSplit.length() - delimeterLength;
-                p <= last; p++) {
-              for (int i = 0; i < delimeterLength; i++) {
-                if (toSplit.charAt(i + p) != separator.charAt(i)) {
-                  continue positions;
-                }
-              }
-              return p;
-            }
-            return -1;
-          }
-
-          @Override public int separatorEnd(int separatorPosition) {
-            return separatorPosition + separator.length();
-          }
-        };
-      }
-    });
-  }
-
-  /**
-   * Returns a splitter that considers any subsequence matching {@code
-   * pattern} to be a separator. For example, {@code
-   * Splitter.on(Pattern.compile("\r?\n")).split(entireFile)} splits a string
-   * into lines whether it uses DOS-style or UNIX-style line terminators.
-   *
-   * @param separatorPattern the pattern that determines whether a subsequence
-   *     is a separator. This pattern may not match the empty string.
-   * @return a splitter, with default settings, that uses this pattern
-   * @throws IllegalArgumentException if {@code separatorPattern} matches the
-   *     empty string
-   */
-  public static Splitter on(final Pattern separatorPattern) {
-    checkNotNull(separatorPattern);
-    checkArgument(!separatorPattern.matcher("").matches(),
-        "The pattern may not match the empty string: %s", separatorPattern);
-
-    return new Splitter(new Strategy() {
-      /*@Override*/ public SplittingIterator iterator(
-          final Splitter splitter, CharSequence toSplit) {
-        final Matcher matcher = separatorPattern.matcher(toSplit);
-        return new SplittingIterator(splitter, toSplit) {
-          @Override public int separatorStart(int start) {
-            return matcher.find(start) ? matcher.start() : -1;
-          }
-
-          @Override public int separatorEnd(int separatorPosition) {
-            return matcher.end();
-          }
-        };
-      }
-    });
-  }
-
-  /**
-   * Returns a splitter that considers any subsequence matching a given
-   * pattern (regular expression) to be a separator. For example, {@code
-   * Splitter.onPattern("\r?\n").split(entireFile)} splits a string into lines
-   * whether it uses DOS-style or UNIX-style line terminators. This is
-   * equivalent to {@code Splitter.on(Pattern.compile(pattern))}.
-   *
-   * @param separatorPattern the pattern that determines whether a subsequence
-   *     is a separator. This pattern may not match the empty string.
-   * @return a splitter, with default settings, that uses this pattern
-   * @throws PatternSyntaxException if {@code separatorPattern} is a malformed
-   *     expression
-   * @throws IllegalArgumentException if {@code separatorPattern} matches the
-   *     empty string
-   */
-  public static Splitter onPattern(String separatorPattern) {
-    return on(Pattern.compile(separatorPattern));
-  }
-
-  /**
-   * Returns a splitter that divides strings into pieces of the given length.
-   * For example, {@code Splitter.atEach(2).split("abcde")} returns an
-   * iterable containing {@code ["ab", "cd", "e"]}. The last piece can be
-   * smaller than {@code length} but will never be empty.
-   *
-   * @param length the desired length of pieces after splitting
-   * @return a splitter, with default settings, that can split into fixed sized
-   *     pieces
-   */
-  public static Splitter fixedLength(final int length) {
-    checkArgument(length > 0, "The length may not be less than 1");
-
-    return new Splitter(new Strategy() {
-      /*@Override*/ public SplittingIterator iterator(
-          final Splitter splitter, CharSequence toSplit) {
-        return new SplittingIterator(splitter, toSplit) {
-          @Override public int separatorStart(int start) {
-            int nextChunkStart = start + length;
-            return (nextChunkStart < toSplit.length() ? nextChunkStart : -1);
-          }
-
-          @Override public int separatorEnd(int separatorPosition) {
-            return separatorPosition;
-          }
-        };
-      }
-    });
-  }
-
-  /**
-   * Returns a splitter that behaves equivalently to {@code this} splitter, but
-   * automatically omits empty strings from the results. For example, {@code
-   * Splitter.on(',').omitEmptyStrings().split(",a,,,b,c,,")} returns an
-   * iterable containing only {@code ["a", "b", "c"]}.
-   *
-   * <p>If either {@code trimResults} option is also specified when creating a
-   * splitter, that splitter always trims results first before checking for
-   * emptiness. So, for example, {@code
-   * Splitter.on(':').omitEmptyStrings().trimResults().split(": : : ")} returns
-   * an empty iterable.
-   *
-   * <p>Note that it is ordinarily not possible for {@link #split(CharSequence)}
-   * to return an empty iterable, but when using this option, it can (if the
-   * input sequence consists of nothing but separators).
-   *
-   * @return a splitter with the desired configuration
-   */
-  public Splitter omitEmptyStrings() {
-    return new Splitter(strategy, true, trimmer);
-  }
-
-  /**
-   * Returns a splitter that behaves equivalently to {@code this} splitter, but
-   * automatically removes leading and trailing {@linkplain
-   * CharMatcher#WHITESPACE whitespace} from each returned substring; equivalent
-   * to {@code trimResults(CharMatcher.WHITESPACE)}. For example, {@code
-   * Splitter.on(',').trimResults().split(" a, b  ,c  ")} returns an iterable
-   * containing {@code ["a", "b", "c"]}.
-   *
-   * @return a splitter with the desired configuration
-   */
-  public Splitter trimResults() {
-    return trimResults(CharMatcher.WHITESPACE);
-  }
-
-  /**
-   * Returns a splitter that behaves equivalently to {@code this} splitter, but
-   * removes all leading or trailing characters matching the given {@code
-   * CharMatcher} from each returned substring. For example, {@code
-   * Splitter.on(',').trimResults(CharMatcher.is('_')).split("_a ,_b_ ,c__")}
-   * returns an iterable containing {@code ["a ", "b_ ", "c"]}.
-   *
-   * @param trimmer a {@link CharMatcher} that determines whether a character
-   *     should be removed from the beginning/end of a subsequence
-   * @return a splitter with the desired configuration
-   */
-  public Splitter trimResults(CharMatcher trimmer) {
-    checkNotNull(trimmer);
-    return new Splitter(strategy, omitEmptyStrings, trimmer);
-  }
-
-  /**
-   * Splits the {@link CharSequence} passed in parameter.
-   *
-   * @param sequence the sequence of characters to split
-   * @return an iteration over the segments split from the parameter.
-   */
-  public Iterable<String> split(final CharSequence sequence) {
-    checkNotNull(sequence);
-
-    return new Iterable<String>() {
-      /*@Override*/ public Iterator<String> iterator() {
-        return strategy.iterator(Splitter.this, sequence);
-      }
-    };
-  }
-
-  private interface Strategy {
-    Iterator<String> iterator(Splitter splitter, CharSequence toSplit);
-  }
-
-  private abstract static class SplittingIterator
-      extends AbstractIterator<String> {
-    final CharSequence toSplit;
-    final CharMatcher trimmer;
-    final boolean omitEmptyStrings;
-
-    /**
-     * Returns the first index in {@code toSplit} at or after {@code start}
-     * that contains the separator.
-     */
-    abstract int separatorStart(int start);
-
-    /**
-     * Returns the first index in {@code toSplit} after {@code
-     * separatorPosition} that does not contain a separator. This method is only
-     * invoked after a call to {@code separatorStart}.
-     */
-    abstract int separatorEnd(int separatorPosition);
-
-    int offset = 0;
-
-    protected SplittingIterator(Splitter splitter, CharSequence toSplit) {
-      this.trimmer = splitter.trimmer;
-      this.omitEmptyStrings = splitter.omitEmptyStrings;
-      this.toSplit = toSplit;
-    }
-
-    @Override protected String computeNext() {
-      while (offset != -1) {
-        int start = offset;
-        int end;
-
-        int separatorPosition = separatorStart(offset);
-        if (separatorPosition == -1) {
-          end = toSplit.length();
-          offset = -1;
-        } else {
-          end = separatorPosition;
-          offset = separatorEnd(separatorPosition);
-        }
-
-        while (start < end && trimmer.matches(toSplit.charAt(start))) {
-          start++;
-        }
-        while (end > start && trimmer.matches(toSplit.charAt(end - 1))) {
-          end--;
-        }
-
-        if (omitEmptyStrings && start == end) {
-          continue;
-        }
-
-        return toSplit.subSequence(start, end).toString();
-      }
-      return endOfData();
-    }
-  }
-
-  /*
-   * Copied from common.collect.AbstractIterator. TODO: un-fork once these
-   * packages have been combined into a single library.
-   */
-  private static abstract class AbstractIterator<T> implements Iterator<T> {
-    State state = State.NOT_READY;
-
-    enum State {
-      READY, NOT_READY, DONE, FAILED,
-    }
-
-    T next;
-
-    protected abstract T computeNext();
-
-    protected final T endOfData() {
-      state = State.DONE;
-      return null;
-    }
-
-    public final boolean hasNext() {
-      checkState(state != State.FAILED);
-      switch (state) {
-        case DONE:
-          return false;
-        case READY:
-          return true;
-        default:
-      }
-      return tryToComputeNext();
-    }
-
-    boolean tryToComputeNext() {
-      state = State.FAILED; // temporary pessimism
-      next = computeNext();
-      if (state != State.DONE) {
-        state = State.READY;
-        return true;
-      }
-      return false;
-    }
-
-    public final T next() {
-      if (!hasNext()) {
-        throw new NoSuchElementException();
-      }
-      state = State.NOT_READY;
-      return next;
-    }
-
-    /*@Override*/ public void remove() {
-      throw new UnsupportedOperationException();
-    }
-  }
-}
diff --git a/src/com/android/mail/lib/base/StringUtil.java b/src/com/android/mail/lib/base/StringUtil.java
deleted file mode 100644
index 5bfca7f..0000000
--- a/src/com/android/mail/lib/base/StringUtil.java
+++ /dev/null
@@ -1,3205 +0,0 @@
-/*
- * Copyright (C) 2000 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.mail.lib.base;
-
-import static com.android.mail.lib.base.Preconditions.checkArgument;
-
-import com.google.common.base.Joiner;
-import com.google.common.base.Joiner.MapJoiner;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.StringTokenizer;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * Static utility methods and constants pertaining to {@code String} or {@code
- * CharSequence} instances.
- */
-public final class StringUtil {
-  private StringUtil() {} // COV_NF_LINE
-
-  /**
-   * A completely arbitrary selection of eight whitespace characters. See
-   * <a href="http://go/white+space">this spreadsheet</a> for more details
-   * about whitespace characters.
-   *
-   * @deprecated Rewrite your code to use {@link CharMatcher#WHITESPACE}, or
-   *     consider the precise set of characters you want to match and construct
-   *     the right explicit {@link CharMatcher} or {@link String} for your own
-   *     purposes.
-   */
-  @Deprecated
-  public static final String WHITE_SPACES = " \r\n\t\u3000\u00A0\u2007\u202F";
-
-  /** A string containing the carriage return and linefeed characters. */
-  public static final String LINE_BREAKS = "\r\n";
-
-  /**
-   * Old location of {@link Strings#isNullOrEmpty}; this method will be
-   * deprecated soon.
-   */
-  public static boolean isEmpty(String string) {
-    return Strings.isNullOrEmpty(string);
-  }
-
-  /**
-   * Returns {@code true} if the given string is null, empty, or comprises only
-   * whitespace characters, as defined by {@link CharMatcher#WHITESPACE}.
-   *
-   * <p><b>Warning:</b> there are many competing definitions of "whitespace";
-   * please see <a href="http://go/white+space">this spreadsheet</a> for
-   * details.
-   *
-   * @param string the string reference to check
-   * @return {@code true} if {@code string} is null, empty, or consists of
-   *     whitespace characters only
-   */
-  public static boolean isEmptyOrWhitespace(String string) {
-    return string == null || CharMatcher.WHITESPACE.matchesAllOf(string);
-  }
-
-  /**
-   * Old location of {@link Strings#nullToEmpty}; this method will be
-   * deprecated soon.
-   */
-  public static String makeSafe(String string) {
-    return Strings.nullToEmpty(string);
-  }
-
-  /**
-   * Old location of {@link Strings#emptyToNull}; this method will be
-   * deprecated soon.
-   */
-  public static String toNullIfEmpty(String string) {
-    return Strings.emptyToNull(string);
-  }
-
-  /**
-   * Returns the given string if it is nonempty and contains at least one
-   * non-whitespace character; {@code null} otherwise. See comment in {@link
-   * #isEmptyOrWhitespace} on the definition of whitespace.
-   *
-   * @param string the string to test and possibly return
-   * @return {@code null} if {@code string} is null, empty, or contains only
-   *     whitespace characters; {@code string} itself otherwise
-   */
-  public static String toNullIfEmptyOrWhitespace(
-      String string) {
-    return isEmptyOrWhitespace(string) ? null : string;
-  }
-
-  /**
-   * Old location of {@link Strings#repeat}; this method will be deprecated
-   * soon.
-   */
-  public static String repeat(String string, int count) {
-    return Strings.repeat(string, count);
-  }
-
-  /**
-   * Return the first index in the string of any of the specified characters,
-   * starting at a given index, or {@code -1} if none of the characters is
-   * present.
-   *
-   * @param string the non-null character sequence to look in
-   * @param chars a non-null character sequence containing the set of characters
-   *     to look for. If empty, this method will find no matches and return
-   *     {@code -1}
-   * @param fromIndex the index of the first character to examine in the input
-   *     string. If negative, the entire string will be searched. If greater
-   *     than or equal to the string length, no characters will be searched and
-   *     {@code -1} will be returned.
-   * @return the index of the first match, or {@code -1} if no match was found.
-   *     Guaranteed to be either {@code -1} or a number greater than or equal to
-   *     {@code fromIndex}
-   * @throws NullPointerException if any argument is null
-   */
-  // author: pault
-  public static int indexOfChars(
-      CharSequence string, CharSequence chars, int fromIndex) {
-    if (fromIndex >= string.length()) {
-      return -1;
-    }
-
-    /*
-     * Prepare lookup structures for the characters. TODO(pault): This loop
-     * could be factored into another method to allow caching of the resulting
-     * struct if a use-case of very large character sets exists.
-     */
-    Set<Character> charSet = Collections.emptySet();
-    boolean[] charArray = new boolean[128];
-    for (int i = 0; i < chars.length(); i++) {
-      char c = chars.charAt(i);
-      if (c < 128) {
-        charArray[c] = true;
-      } else {
-        if (charSet.isEmpty()) {
-          charSet = new HashSet<Character>();
-        }
-        charSet.add(c);
-      }
-    }
-
-    // Scan the string for matches
-    for (int i = Math.max(fromIndex, 0); i < string.length(); i++) {
-      char c = string.charAt(i);
-      if (c < 128) {
-        if (charArray[c]) {
-          return i;
-        }
-      } else if (charSet.contains(c)) {
-        return i;
-      }
-    }
-    return -1;
-  }
-
-/*
- * -------------------------------------------------------------------
- * This marks the end of the code that has been written or rewritten
- * in 2008 to the quality standards of the Java core libraries group.
- * Code below this point is still awaiting cleanup (you can help!).
- * See http://wiki/Nonconf/JavaCoreLibrariesStandards.
- * -------------------------------------------------------------------
- */
-
-
-  /**
-   * @param str the string to split.  Must not be null.
-   * @param delims the delimiter characters. Each character in the
-   *        string is individually treated as a delimiter.
-   * @return an array of tokens. Will not return null. Individual tokens
-   *        do not have leading/trailing whitespace removed.
-   * @deprecated see the detailed instructions under
-   *     {@link #split(String, String, boolean)}
-   */
-  @Deprecated
-  public static String[] split(String str, String delims) {
-    return split(str, delims, false);
-  }
-
-  /**
-   * This method is deprecated because it is too inflexible, providing
-   * only a very specific set of behaviors that almost never matches exactly
-   * what you intend. Prefer using a {@link Splitter}, which is more flexible
-   * and consistent in the way it handles trimming and empty tokens.
-   *
-   * <ul>
-   * <li>Create a {@link Splitter} using {@link Splitter#on(CharMatcher)} such
-   *     as {@code Splitter.on(CharMatcher.anyOf(delims))}.
-   * <li><i>If</i> you need whitespace trimmed from the ends of each segment,
-   *     adding {@code .trimResults()} to your splitter definition should work
-   *     in most cases. To match the exact behavior of this method, use
-   *     {@code .trimResults(CharMatcher.inRange('\0', ' '))}.
-   * <li>This method silently ignores empty tokens in the input, but allows
-   *     empty tokens to appear in the output if {@code trimTokens} is
-   *     {@code true}. Adding {@code .omitEmptyStrings()} to your splitter
-   *     definition will filter empty tokens out but will do so <i>after</i>
-   *     having performed trimming. If you absolutely require this method's
-   *     behavior in this respect, Splitter is not able to match it.
-   * <li>If you need the result as an array, use {@link
-   *     com.google.common.collect.Iterables#toArray(Iterable, Class)} on the
-   *     {@code Iterable<String>} returned by {@link Splitter#split}.
-   * </ul>
-   *
-   * @param str the string to split.  Must not be null.
-   * @param delims the delimiter characters. Each character in the string
-   *        is individually treated as a delimiter.
-   * @param trimTokens if true, leading/trailing whitespace is removed
-   *        from the tokens
-   * @return an array of tokens. Will not return null.
-   * @deprecated
-   */
-  @Deprecated
-  public static String[] split(
-      String str, String delims, boolean trimTokens) {
-    StringTokenizer tokenizer = new StringTokenizer(str, delims);
-    int n = tokenizer.countTokens();
-    String[] list = new String[n];
-    for (int i = 0; i < n; i++) {
-      if (trimTokens) {
-        list[i] = tokenizer.nextToken().trim();
-      } else {
-        list[i] = tokenizer.nextToken();
-      }
-    }
-    return list;
-  }
-
-  /**
-   * Trim characters from only the beginning of a string.
-   * This is a convenience method, it simply calls trimStart(s, null).
-   *
-   * @param s String to be trimmed
-   * @return String with whitespace characters removed from the beginning
-   */
-  public static String trimStart(String s) {
-    return trimStart(s, null);
-  }
-
-  /**
-   * Trim characters from only the beginning of a string.
-   * This method will remove all whitespace characters
-   * (defined by Character.isWhitespace(char), in addition to the characters
-   * provided, from the end of the provided string.
-   *
-   * @param s String to be trimmed
-   * @param extraChars Characters in addition to whitespace characters that
-   *                   should be trimmed.  May be null.
-   * @return String with whitespace and characters in extraChars removed
-   *                   from the beginning
-   */
-  public static String trimStart(String s, String extraChars) {
-    int trimCount = 0;
-    while (trimCount < s.length()) {
-      char ch = s.charAt(trimCount);
-      if (Character.isWhitespace(ch)
-        || (extraChars != null && extraChars.indexOf(ch) >= 0)) {
-        trimCount++;
-      } else {
-        break;
-      }
-    }
-
-    if (trimCount == 0) {
-      return s;
-    }
-    return s.substring(trimCount);
-  }
-
-  /**
-   * Trim characters from only the end of a string.
-   * This is a convenience method, it simply calls trimEnd(s, null).
-   *
-   * @param s String to be trimmed
-   * @return String with whitespace characters removed from the end
-   */
-  public static String trimEnd(String s) {
-    return trimEnd(s, null);
-  }
-
-  /**
-   * Trim characters from only the end of a string.
-   * This method will remove all whitespace characters
-   * (defined by Character.isWhitespace(char), in addition to the characters
-   * provided, from the end of the provided string.
-   *
-   * @param s String to be trimmed
-   * @param extraChars Characters in addition to whitespace characters that
-   *                   should be trimmed.  May be null.
-   * @return String with whitespace and characters in extraChars removed
-   *                   from the end
-   */
-  public static String trimEnd(String s, String extraChars) {
-    int trimCount = 0;
-    while (trimCount < s.length()) {
-      char ch = s.charAt(s.length() - trimCount - 1);
-      if (Character.isWhitespace(ch)
-        || (extraChars != null && extraChars.indexOf(ch) >= 0)) {
-        trimCount++;
-      } else {
-        break;
-      }
-    }
-
-    if (trimCount == 0) {
-      return s;
-    }
-    return s.substring(0, s.length() - trimCount);
-  }
-
-  /**
-   * @param str the string to split.  Must not be null.
-   * @param delims the delimiter characters. Each character in the
-   *        string is individually treated as a delimiter.
-   * @return an array of tokens. Will not return null. Leading/trailing
-   *        whitespace is removed from the tokens.
-   * @deprecated see the detailed instructions under
-   *     {@link #split(String, String, boolean)}
-   */
-  @Deprecated
-  public static String[] splitAndTrim(String str, String delims) {
-    return split(str, delims, true);
-  }
-
-  /** Parse comma-separated list of ints and return as array. */
-  public static int[] splitInts(String str) throws IllegalArgumentException {
-    StringTokenizer tokenizer = new StringTokenizer(str, ",");
-    int n = tokenizer.countTokens();
-    int[] list = new int[n];
-    for (int i = 0; i < n; i++) {
-      String token = tokenizer.nextToken();
-      list[i] = Integer.parseInt(token);
-    }
-    return list;
-  }
-
-  /** Parse comma-separated list of longs and return as array. */
-  public static long[] splitLongs(String str) throws IllegalArgumentException {
-    StringTokenizer tokenizer = new StringTokenizer(str, ",");
-    int n = tokenizer.countTokens();
-    long[] list = new long[n];
-    for (int i = 0; i < n; i++) {
-      String token = tokenizer.nextToken();
-      list[i] = Long.parseLong(token);
-    }
-    return list;
-  }
-
-  /** This replaces the occurrences of 'what' in 'str' with 'with'
-   *
-   * @param str the string to process
-   * @param what to replace
-   * @param with replace with this
-   * @return String str where 'what' was replaced with 'with'
-   *
-   * @deprecated Please use {@link String#replace(CharSequence, CharSequence)}.
-   */
-  @Deprecated
-  public static String replace(
-      String str, CharSequence what, CharSequence with) {
-    // Have to check this argument, for compatibility with the old impl.
-    // For the record, String.replace() is capable of handling an empty target
-    // string... but it does something kind of weird in that case.
-    checkArgument(what.length() > 0);
-    return str.replace(what, with);
-  }
-
-  private static final Splitter NEWLINE_SPLITTER =
-      Splitter.on('\n').omitEmptyStrings();
-
-  /**
-   * Reformats the given string to a fixed width by inserting carriage returns
-   * and trimming unnecessary whitespace. See
-   * {@link #fixedWidth(String[], int)} for details. The {@code str} argument
-   * to this method will be split on newline characters ({@code '\n'}) only
-   * (regardless of platform).  An array of resulting non-empty strings is
-   * then passed to {@link #fixedWidth(String[], int)} as the {@code lines}
-   * parameter.
-   *
-   * @param str the string to format
-   * @param width the fixed width (in characters)
-   */
-  public static String fixedWidth(String str, int width) {
-    List<String> lines = new ArrayList<String>();
-
-    for (String line : NEWLINE_SPLITTER.split(str)) {
-      lines.add(line);
-    }
-
-    String[] lineArray = lines.toArray(new String[0]);
-    return fixedWidth(lineArray, width);
-  }
-
-  /**
-   * Reformats the given array of lines to a fixed width by inserting
-   * newlines and trimming unnecessary whitespace.  This uses simple
-   * whitespace-based splitting, not sophisticated internationalized
-   * line breaking.  Newlines within a line are treated like any other
-   * whitespace.  Lines which are already short enough will be passed
-   * through unmodified.
-   *
-   * <p>Only breaking whitespace characters (those which match
-   * {@link CharMatcher#BREAKING_WHITESPACE}) are treated as whitespace by
-   * this method. Non-breaking whitespace characters will be considered as
-   * ordinary characters which are connected to any other adjacent
-   * non-whitespace characters, and will therefore appear in the returned
-   * string in their original context.
-   *
-   * @param lines array of lines to format
-   * @param width the fixed width (in characters)
-   */
-  public static String fixedWidth(String[] lines, int width) {
-    List<String> formattedLines = new ArrayList<String>();
-
-    for (String line : lines) {
-      formattedLines.add(formatLineToFixedWidth(line, width));
-    }
-
-    return Joiner.on('\n').join(formattedLines);
-  }
-
-  private static final Splitter TO_WORDS =
-      Splitter.on(CharMatcher.BREAKING_WHITESPACE).omitEmptyStrings();
-
-  /**
-   * Helper method for {@link #fixedWidth(String[], int)}
-   */
-  private static String formatLineToFixedWidth(String line, int width) {
-    if (line.length() <= width) {
-      return line;
-    }
-
-    StringBuilder builder = new StringBuilder();
-    int col = 0;
-
-    for (String word : TO_WORDS.split(line)) {
-      if (col == 0) {
-        col = word.length();
-      } else {
-        int newCol = col + word.length() + 1;  // +1 for the space
-
-        if (newCol <= width) {
-          builder.append(' ');
-          col = newCol;
-        } else {
-          builder.append('\n');
-          col = word.length();
-        }
-      }
-
-      builder.append(word);
-    }
-
-    return builder.toString();
-  }
-
-  /**
-   * Splits the argument original into a list of substrings.  All the
-   * substrings in the returned list (except possibly the last) will
-   * have length lineLen.
-   *
-   * @param lineLen  the length of the substrings to put in the list
-   * @param original the original string
-   *
-   * @return a list of strings of length lineLen that together make up the
-   *     original string
-   * @deprecated use {@code Splitter.fixedLength(lineLen).split(original))}
-   *     (note that it returns an {@code Iterable}, not a {@code List})
-   */
-  @Deprecated
-  public static List<String> fixedSplit(String original, int lineLen) {
-    List<String> output = new ArrayList<String>();
-    for (String elem : Splitter.fixedLength(lineLen).split(original)) {
-      output.add(elem);
-    }
-    return output;
-  }
-
-  /**
-   * Indents the given String per line.
-   * @param iString the string to indent
-   * @param iIndentDepth the depth of the indentation
-   * @return the indented string
-   */
-  public static String indent(String iString, int iIndentDepth) {
-    StringBuilder spacer = new StringBuilder();
-    spacer.append("\n");
-    for (int i = 0; i < iIndentDepth; i++) {
-      spacer.append("  ");
-    }
-    return iString.replace("\n", spacer.toString());
-  }
-
-  /**
-   * This is a both way strip.
-   *
-   * @param str the string to strip
-   * @param left strip from left
-   * @param right strip from right
-   * @param what character(s) to strip
-   * @return the stripped string
-   * @deprecated ensure the string is not null and use
-   *  <ul>
-   *    <li> {@code CharMatcher.anyOf(what).trimFrom(str)}
-   *        if {@code left == true} and {@code right == true}
-   *    <li> {@code CharMatcher.anyOf(what).trimLeadingFrom(str)}
-   *        if {@code left == true} and {@code right == false}
-   *    <li> {@code CharMatcher.anyOf(what).trimTrailingFrom(str)}
-   *        if {@code left == false} and {@code right == true}
-   *  </ul>
-   */
-  @Deprecated
-  public static String megastrip(String str,
-                                 boolean left, boolean right,
-                                 String what) {
-    if (str == null) {
-      return null;
-    }
-
-    CharMatcher matcher = CharMatcher.anyOf(what);
-    if (left) {
-      if (right) {
-        return matcher.trimFrom(str);
-      }
-      return matcher.trimLeadingFrom(str);
-    }
-    if (right) {
-      return matcher.trimTrailingFrom(str);
-    }
-    return str;
-  }
-
-  /** strip - strips both ways
-   *
-   * @param str what to strip
-   * @return String the striped string
-   * @deprecated ensure the string is not null and use {@code
-   *     CharMatcher.LEGACY_WHITESPACE.trimFrom(str)}; also consider whether you
-   *     really want the legacy whitespace definition, or something more
-   *     standard like {@link CharMatcher#WHITESPACE}.
-   */
-  @SuppressWarnings("deprecation") // this is deprecated itself
-  @Deprecated public static String strip(String str) {
-    return (str == null) ? null : CharMatcher.LEGACY_WHITESPACE.trimFrom(str);
-  }
-
-  /** Strip white spaces from both end, and collapse white spaces
-   * in the middle.
-   *
-   * @param str what to strip
-   * @return String the striped and collapsed string
-   * @deprecated ensure the string is not null and use {@code
-   *     CharMatcher.LEGACY_WHITESPACE.trimAndCollapseFrom(str, ' ')}; also
-   *     consider whether you really want the legacy whitespace definition, or
-   *     something more standard like {@link CharMatcher#WHITESPACE}.
-   */
-  @SuppressWarnings("deprecation") // this is deprecated itself
-  @Deprecated public static String stripAndCollapse(String str) {
-    return (str == null) ? null
-        : CharMatcher.LEGACY_WHITESPACE.trimAndCollapseFrom(str, ' ');
-  }
-
-  /**
-   * Give me a string and a potential prefix, and I return the string
-   * following the prefix if the prefix matches, else null.
-   * Analogous to the c++ functions strprefix and var_strprefix.
-   *
-   * @param str the string to strip
-   * @param prefix the expected prefix
-   * @return the stripped string or <code>null</code> if the string
-   * does not start with the prefix
-   */
-  public static String stripPrefix(String str, String prefix) {
-    return str.startsWith(prefix)
-        ? str.substring(prefix.length())
-        : null;
-  }
-
-  /**
-   * Case insensitive version of stripPrefix. Strings are compared in
-   * the same way as in {@link String#equalsIgnoreCase}.
-   * Analogous to the c++ functions strcaseprefix and var_strcaseprefix.
-   *
-   * @param str the string to strip
-   * @param prefix the expected prefix
-   * @return the stripped string or <code>null</code> if the string
-   * does not start with the prefix
-   */
-  public static String stripPrefixIgnoreCase(String str, String prefix) {
-    return startsWithIgnoreCase(str, prefix)
-        ? str.substring(prefix.length())
-        : null;
-  }
-
-  /**
-   * Give me a string and a potential suffix, and I return the string
-   * before the suffix if the suffix matches, else null.
-   * Analogous to the c++ function strsuffix.
-   *
-   * @param str the string to strip
-   * @param suffix the expected suffix
-   * @return the stripped string or <code>null</code> if the string
-   * does not end with the suffix
-   */
-  public static String stripSuffix(String str, String suffix) {
-    return str.endsWith(suffix)
-        ? str.substring(0, str.length() - suffix.length())
-        : null;
-  }
-
-  /**
-   * Case insensitive version of stripSuffix. Strings are compared in
-   * the same way as in {@link String#equalsIgnoreCase}.
-   * Analogous to the c++ function strcasesuffix.
-   *
-   * @param str the string to strip
-   * @param suffix the expected suffix
-   * @return the stripped string or <code>null</code> if the string
-   * does not end with the suffix
-   */
-  public static String stripSuffixIgnoreCase(
-      String str, String suffix) {
-    return endsWithIgnoreCase(str, suffix)
-        ? str.substring(0, str.length() - suffix.length())
-        : null;
-  }
-
-  /**
-   * Strips all non-digit characters from a string.
-   *
-   * The resulting string will only contain characters for which isDigit()
-   * returns true.
-   *
-   * @param str the string to strip
-   * @return a string consisting of digits only, or an empty string
-   * @deprecated use {@code CharMatcher.JAVA_DIGIT.retainFrom(str)} (also
-   *     consider whether this is really the definition of "digit" you wish to
-   *     use)
-   */
-  @Deprecated public static String stripNonDigits(String str) {
-    return CharMatcher.JAVA_DIGIT.retainFrom(str);
-  }
-
-  /**
-   * Finds the last index in str of a character not in the characters
-   * in 'chars' (similar to ANSI string.find_last_not_of).
-   *
-   * Returns -1 if no such character can be found.
-   *
-   * <p><b>Note:</b> If {@code fromIndex} is zero, use {@link CharMatcher}
-   * instead for this: {@code CharMatcher.noneOf(chars).lastIndexIn(str)}.
-   */
-  // TODO(kevinb): after adding fromIndex versions of (last)IndexOf to
-  // CharMatcher, deprecate this
-  public static int lastIndexNotOf(String str, String chars, int fromIndex) {
-    fromIndex = Math.min(fromIndex, str.length() - 1);
-
-    for (int pos = fromIndex; pos >= 0; pos--) {
-      if (chars.indexOf(str.charAt(pos)) < 0) {
-        return pos;
-      }
-    }
-
-    return -1;
-  }
-
-  /**
-   * Like String.replace() except that it accepts any number of old chars.
-   * Replaces any occurrances of 'oldchars' in 'str' with 'newchar'.
-   * Example: replaceChars("Hello, world!", "H,!", ' ') returns " ello  world "
-   *
-   * @deprecated use {@code CharMatcher#replaceFrom(String, char)}, for example
-   *     {@code CharMatcher.anyOf(oldchars).replaceFrom(str, newchar)}
-   */
-  @Deprecated public static String replaceChars(
-      String str, CharSequence oldchars, char newchar) {
-    return CharMatcher.anyOf(oldchars).replaceFrom(str, newchar);
-  }
-
-  /**
-   * Remove any occurrances of 'oldchars' in 'str'.
-   * Example: removeChars("Hello, world!", ",!") returns "Hello world"
-   *
-   * @deprecated use {@link CharMatcher#removeFrom(CharSequence)}, for example
-   *     {@code CharMatcher.anyOf(oldchars).removeFrom(str)}
-   */
-  @Deprecated public static String removeChars(
-      String str, CharSequence oldchars) {
-    return CharMatcher.anyOf(oldchars).removeFrom(str);
-  }
-
-  // See http://www.microsoft.com/typography/unicode/1252.htm
-  private static final CharMatcher FANCY_SINGLE_QUOTE
-      = CharMatcher.anyOf("\u0091\u0092\u2018\u2019");
-  private static final CharMatcher FANCY_DOUBLE_QUOTE
-      = CharMatcher.anyOf("\u0093\u0094\u201c\u201d");
-
-  /**
-   * Replaces microsoft "smart quotes" (curly " and ') with their
-   * ascii counterparts.
-   */
-  public static String replaceSmartQuotes(String str) {
-    String tmp = FANCY_SINGLE_QUOTE.replaceFrom(str, '\'');
-    return FANCY_DOUBLE_QUOTE.replaceFrom(tmp, '"');
-  }
-
-  /**
-   * Convert a string of hex digits to a byte array, with the first
-   * byte in the array being the MSB. The string passed in should be
-   * just the raw digits (upper or lower case), with no leading
-   * or trailing characters (like '0x' or 'h').
-   * An odd number of characters is supported.
-   * If the string is empty, an empty array will be returned.
-   *
-   * This is significantly faster than using
-   *   new BigInteger(str, 16).toByteArray();
-   * especially with larger strings. Here are the results of some
-   * microbenchmarks done on a P4 2.8GHz 2GB RAM running
-   * linux 2.4.22-gg11 and JDK 1.5 with an optimized build:
-   *
-   * String length        hexToBytes (usec)   BigInteger
-   * -----------------------------------------------------
-   * 16                       0.570                 1.43
-   * 256                      8.21                 44.4
-   * 1024                    32.8                 526
-   * 16384                  546                121000
-   */
-  public static byte[] hexToBytes(CharSequence str) {
-    byte[] bytes = new byte[(str.length() + 1) / 2];
-    if (str.length() == 0) {
-      return bytes;
-    }
-    bytes[0] = 0;
-    int nibbleIdx = (str.length() % 2);
-    for (int i = 0; i < str.length(); i++) {
-      char c = str.charAt(i);
-      if (!isHex(c)) {
-        throw new IllegalArgumentException("string contains non-hex chars");
-      }
-      if ((nibbleIdx % 2) == 0) {
-        bytes[nibbleIdx >> 1] = (byte) (hexValue(c) << 4);
-      } else {
-        bytes[nibbleIdx >> 1] += (byte) hexValue(c);
-      }
-      nibbleIdx++;
-    }
-    return bytes;
-  }
-
-  /**
-   * Converts any instances of "\r" or "\r\n" style EOLs into "\n" (Line Feed).
-   */
-  public static String convertEOLToLF(String input) {
-    StringBuilder res = new StringBuilder(input.length());
-    char[] s = input.toCharArray();
-    int from = 0;
-    final int end = s.length;
-    for (int i = 0; i < end; i++) {
-      if (s[i] == '\r') {
-        res.append(s, from, i - from);
-        res.append('\n');
-        if (i + 1 < end && s[i + 1] == '\n') {
-          i++;
-        }
-
-        from = i + 1;
-      }
-    }
-
-    if (from == 0) {   // no \r!
-      return input;
-    }
-
-    res.append(s, from, end - from);
-    return res.toString();
-  }
-
-  /**
-   * Old location of {@link Strings#padStart}; this method will be deprecated
-   * soon.
-   */
-  public static String padLeft(String s, int len, char padChar) {
-    return Strings.padStart(s, len, padChar);
-  }
-
-  /**
-   * Old location of {@link Strings#padEnd}; this method will be deprecated
-   * soon.
-   */
-  public static String padRight(String s, int len, char padChar) {
-    return Strings.padEnd(s, len, padChar);
-  }
-
-  /**
-   * Returns a string consisting of "s", with each of the first "len" characters
-   * replaced by "maskChar" character.
-   */
-  public static String maskLeft(String s, int len, char maskChar) {
-    if (len <= 0) {
-      return s;
-    }
-    len = Math.min(len, s.length());
-    StringBuilder sb = new StringBuilder();
-    for (int i = 0; i < len; i++) {
-      sb.append(maskChar);
-    }
-    sb.append(s.substring(len));
-    return sb.toString();
-  }
-
-  private static boolean isOctal(char c) {
-    return (c >= '0') && (c <= '7');
-  }
-
-  private static boolean isHex(char c) {
-    return ((c >= '0') && (c <= '9')) ||
-           ((c >= 'a') && (c <= 'f')) ||
-           ((c >= 'A') && (c <= 'F'));
-  }
-
-  private static int hexValue(char c) {
-    if ((c >= '0') && (c <= '9')) {
-      return (c - '0');
-    } else if ((c >= 'a') && (c <= 'f')) {
-      return (c - 'a') + 10;
-    } else {
-      return (c - 'A') + 10;
-    }
-  }
-
-  /**
-   * Unescape any C escape sequences (\n, \r, \\, \ooo, etc) and return the
-   * resulting string.
-   */
-  public static String unescapeCString(String s) {
-    if (s.indexOf('\\') < 0) {
-      // Fast path: nothing to unescape
-      return s;
-    }
-
-    StringBuilder sb = new StringBuilder();
-    int len = s.length();
-    for (int i = 0; i < len;) {
-      char c = s.charAt(i++);
-      if (c == '\\' && (i < len)) {
-        c = s.charAt(i++);
-        switch (c) {
-          case 'a':  c = '\007';  break;
-          case 'b':  c = '\b';    break;
-          case 'f':  c = '\f';    break;
-          case 'n':  c = '\n';    break;
-          case 'r':  c = '\r';    break;
-          case 't':  c = '\t';    break;
-          case 'v':  c = '\013';  break;
-          case '\\': c = '\\';    break;
-          case '?':  c = '?';     break;
-          case '\'': c = '\'';    break;
-          case '"':  c = '\"';    break;
-
-          default: {
-            if ((c == 'x') && (i < len) && isHex(s.charAt(i))) {
-              // "\xXX"
-              int v = hexValue(s.charAt(i++));
-              if ((i < len) && isHex(s.charAt(i))) {
-                v = v * 16 + hexValue(s.charAt(i++));
-              }
-              c = (char) v;
-            } else if (isOctal(c)) {
-              // "\OOO"
-              int v = (c - '0');
-              if ((i < len) && isOctal(s.charAt(i))) {
-                v = v * 8 + (s.charAt(i++) - '0');
-              }
-              if ((i < len) && isOctal(s.charAt(i))) {
-                v = v * 8 + (s.charAt(i++) - '0');
-              }
-              c = (char) v;
-            } else {
-              // Propagate unknown escape sequences.
-              sb.append('\\');
-            }
-            break;
-          }
-        }
-      }
-      sb.append(c);
-    }
-    return sb.toString();
-  }
-
-  /**
-   * Unescape any MySQL escape sequences.
-   * See MySQL language reference Chapter 6 at
-   * <a href="http://www.mysql.com/doc/">http://www.mysql.com/doc/</a>.
-   * This function will <strong>not</strong> work for other SQL-like
-   * dialects.
-   * @param s string to unescape, with the surrounding quotes.
-   * @return unescaped string, without the surrounding quotes.
-   * @exception IllegalArgumentException if s is not a valid MySQL string.
-   */
-  public static String unescapeMySQLString(String s)
-      throws IllegalArgumentException {
-    // note: the same buffer is used for both reading and writing
-    // it works because the writer can never outrun the reader
-    char chars[] = s.toCharArray();
-
-    // the string must be quoted 'like this' or "like this"
-    if (chars.length < 2 || chars[0] != chars[chars.length - 1] ||
-        (chars[0] != '\'' && chars[0] != '"')) {
-      throw new IllegalArgumentException("not a valid MySQL string: " + s);
-    }
-
-    // parse the string and decode the backslash sequences; in addition,
-    // quotes can be escaped 'like this: ''', "like this: """, or 'like this: "'
-    int j = 1;  // write position in the string (never exceeds read position)
-    int f = 0;  // state: 0 (normal), 1 (backslash), 2 (quote)
-    for (int i = 1; i < chars.length - 1; i++) {
-      if (f == 0) {             // previous character was normal
-        if (chars[i] == '\\') {
-          f = 1;  // backslash
-        } else if (chars[i] == chars[0]) {
-          f = 2;  // quoting character
-        } else {
-          chars[j++] = chars[i];
-        }
-      } else if (f == 1) {      // previous character was a backslash
-        switch (chars[i]) {
-          case '0':   chars[j++] = '\0';   break;
-          case '\'':  chars[j++] = '\'';   break;
-          case '"':   chars[j++] = '"';    break;
-          case 'b':   chars[j++] = '\b';   break;
-          case 'n':   chars[j++] = '\n';   break;
-          case 'r':   chars[j++] = '\r';   break;
-          case 't':   chars[j++] = '\t';   break;
-          case 'z':   chars[j++] = '\032'; break;
-          case '\\':  chars[j++] = '\\';   break;
-          default:
-            // if the character is not special, backslash disappears
-            chars[j++] = chars[i];
-            break;
-        }
-        f = 0;
-      } else {                  // previous character was a quote
-        // quoting characters must be doubled inside a string
-        if (chars[i] != chars[0]) {
-          throw new IllegalArgumentException("not a valid MySQL string: " + s);
-        }
-        chars[j++] = chars[0];
-        f = 0;
-      }
-    }
-    // string contents cannot end with a special character
-    if (f != 0) {
-      throw new IllegalArgumentException("not a valid MySQL string: " + s);
-    }
-
-    // done
-    return new String(chars, 1, j - 1);
-  }
-
-  // TODO(pbarry): move all HTML methods to common.html package
-
-  static final Map<String, Character> ESCAPE_STRINGS;
-  static final Set<Character> HEX_LETTERS;
-
-  static {
-    // HTML character entity references as defined in HTML 4
-    // see http://www.w3.org/TR/REC-html40/sgml/entities.html
-    ESCAPE_STRINGS = new HashMap<String, Character>(252);
-
-    ESCAPE_STRINGS.put("&nbsp", '\u00A0');
-    ESCAPE_STRINGS.put("&iexcl", '\u00A1');
-    ESCAPE_STRINGS.put("&cent", '\u00A2');
-    ESCAPE_STRINGS.put("&pound", '\u00A3');
-    ESCAPE_STRINGS.put("&curren", '\u00A4');
-    ESCAPE_STRINGS.put("&yen", '\u00A5');
-    ESCAPE_STRINGS.put("&brvbar", '\u00A6');
-    ESCAPE_STRINGS.put("&sect", '\u00A7');
-    ESCAPE_STRINGS.put("&uml", '\u00A8');
-    ESCAPE_STRINGS.put("&copy", '\u00A9');
-    ESCAPE_STRINGS.put("&ordf", '\u00AA');
-    ESCAPE_STRINGS.put("&laquo", '\u00AB');
-    ESCAPE_STRINGS.put("&not", '\u00AC');
-    ESCAPE_STRINGS.put("&shy", '\u00AD');
-    ESCAPE_STRINGS.put("&reg", '\u00AE');
-    ESCAPE_STRINGS.put("&macr", '\u00AF');
-    ESCAPE_STRINGS.put("&deg", '\u00B0');
-    ESCAPE_STRINGS.put("&plusmn", '\u00B1');
-    ESCAPE_STRINGS.put("&sup2", '\u00B2');
-    ESCAPE_STRINGS.put("&sup3", '\u00B3');
-    ESCAPE_STRINGS.put("&acute", '\u00B4');
-    ESCAPE_STRINGS.put("&micro", '\u00B5');
-    ESCAPE_STRINGS.put("&para", '\u00B6');
-    ESCAPE_STRINGS.put("&middot", '\u00B7');
-    ESCAPE_STRINGS.put("&cedil", '\u00B8');
-    ESCAPE_STRINGS.put("&sup1", '\u00B9');
-    ESCAPE_STRINGS.put("&ordm", '\u00BA');
-    ESCAPE_STRINGS.put("&raquo", '\u00BB');
-    ESCAPE_STRINGS.put("&frac14", '\u00BC');
-    ESCAPE_STRINGS.put("&frac12", '\u00BD');
-    ESCAPE_STRINGS.put("&frac34", '\u00BE');
-    ESCAPE_STRINGS.put("&iquest", '\u00BF');
-    ESCAPE_STRINGS.put("&Agrave", '\u00C0');
-    ESCAPE_STRINGS.put("&Aacute", '\u00C1');
-    ESCAPE_STRINGS.put("&Acirc", '\u00C2');
-    ESCAPE_STRINGS.put("&Atilde", '\u00C3');
-    ESCAPE_STRINGS.put("&Auml", '\u00C4');
-    ESCAPE_STRINGS.put("&Aring", '\u00C5');
-    ESCAPE_STRINGS.put("&AElig", '\u00C6');
-    ESCAPE_STRINGS.put("&Ccedil", '\u00C7');
-    ESCAPE_STRINGS.put("&Egrave", '\u00C8');
-    ESCAPE_STRINGS.put("&Eacute", '\u00C9');
-    ESCAPE_STRINGS.put("&Ecirc", '\u00CA');
-    ESCAPE_STRINGS.put("&Euml", '\u00CB');
-    ESCAPE_STRINGS.put("&Igrave", '\u00CC');
-    ESCAPE_STRINGS.put("&Iacute", '\u00CD');
-    ESCAPE_STRINGS.put("&Icirc", '\u00CE');
-    ESCAPE_STRINGS.put("&Iuml", '\u00CF');
-    ESCAPE_STRINGS.put("&ETH", '\u00D0');
-    ESCAPE_STRINGS.put("&Ntilde", '\u00D1');
-    ESCAPE_STRINGS.put("&Ograve", '\u00D2');
-    ESCAPE_STRINGS.put("&Oacute", '\u00D3');
-    ESCAPE_STRINGS.put("&Ocirc", '\u00D4');
-    ESCAPE_STRINGS.put("&Otilde", '\u00D5');
-    ESCAPE_STRINGS.put("&Ouml", '\u00D6');
-    ESCAPE_STRINGS.put("&times", '\u00D7');
-    ESCAPE_STRINGS.put("&Oslash", '\u00D8');
-    ESCAPE_STRINGS.put("&Ugrave", '\u00D9');
-    ESCAPE_STRINGS.put("&Uacute", '\u00DA');
-    ESCAPE_STRINGS.put("&Ucirc", '\u00DB');
-    ESCAPE_STRINGS.put("&Uuml", '\u00DC');
-    ESCAPE_STRINGS.put("&Yacute", '\u00DD');
-    ESCAPE_STRINGS.put("&THORN", '\u00DE');
-    ESCAPE_STRINGS.put("&szlig", '\u00DF');
-    ESCAPE_STRINGS.put("&agrave", '\u00E0');
-    ESCAPE_STRINGS.put("&aacute", '\u00E1');
-    ESCAPE_STRINGS.put("&acirc", '\u00E2');
-    ESCAPE_STRINGS.put("&atilde", '\u00E3');
-    ESCAPE_STRINGS.put("&auml", '\u00E4');
-    ESCAPE_STRINGS.put("&aring", '\u00E5');
-    ESCAPE_STRINGS.put("&aelig", '\u00E6');
-    ESCAPE_STRINGS.put("&ccedil", '\u00E7');
-    ESCAPE_STRINGS.put("&egrave", '\u00E8');
-    ESCAPE_STRINGS.put("&eacute", '\u00E9');
-    ESCAPE_STRINGS.put("&ecirc", '\u00EA');
-    ESCAPE_STRINGS.put("&euml", '\u00EB');
-    ESCAPE_STRINGS.put("&igrave", '\u00EC');
-    ESCAPE_STRINGS.put("&iacute", '\u00ED');
-    ESCAPE_STRINGS.put("&icirc", '\u00EE');
-    ESCAPE_STRINGS.put("&iuml", '\u00EF');
-    ESCAPE_STRINGS.put("&eth", '\u00F0');
-    ESCAPE_STRINGS.put("&ntilde", '\u00F1');
-    ESCAPE_STRINGS.put("&ograve", '\u00F2');
-    ESCAPE_STRINGS.put("&oacute", '\u00F3');
-    ESCAPE_STRINGS.put("&ocirc", '\u00F4');
-    ESCAPE_STRINGS.put("&otilde", '\u00F5');
-    ESCAPE_STRINGS.put("&ouml", '\u00F6');
-    ESCAPE_STRINGS.put("&divide", '\u00F7');
-    ESCAPE_STRINGS.put("&oslash", '\u00F8');
-    ESCAPE_STRINGS.put("&ugrave", '\u00F9');
-    ESCAPE_STRINGS.put("&uacute", '\u00FA');
-    ESCAPE_STRINGS.put("&ucirc", '\u00FB');
-    ESCAPE_STRINGS.put("&uuml", '\u00FC');
-    ESCAPE_STRINGS.put("&yacute", '\u00FD');
-    ESCAPE_STRINGS.put("&thorn", '\u00FE');
-    ESCAPE_STRINGS.put("&yuml", '\u00FF');
-    ESCAPE_STRINGS.put("&fnof", '\u0192');
-    ESCAPE_STRINGS.put("&Alpha", '\u0391');
-    ESCAPE_STRINGS.put("&Beta", '\u0392');
-    ESCAPE_STRINGS.put("&Gamma", '\u0393');
-    ESCAPE_STRINGS.put("&Delta", '\u0394');
-    ESCAPE_STRINGS.put("&Epsilon", '\u0395');
-    ESCAPE_STRINGS.put("&Zeta", '\u0396');
-    ESCAPE_STRINGS.put("&Eta", '\u0397');
-    ESCAPE_STRINGS.put("&Theta", '\u0398');
-    ESCAPE_STRINGS.put("&Iota", '\u0399');
-    ESCAPE_STRINGS.put("&Kappa", '\u039A');
-    ESCAPE_STRINGS.put("&Lambda", '\u039B');
-    ESCAPE_STRINGS.put("&Mu", '\u039C');
-    ESCAPE_STRINGS.put("&Nu", '\u039D');
-    ESCAPE_STRINGS.put("&Xi", '\u039E');
-    ESCAPE_STRINGS.put("&Omicron", '\u039F');
-    ESCAPE_STRINGS.put("&Pi", '\u03A0');
-    ESCAPE_STRINGS.put("&Rho", '\u03A1');
-    ESCAPE_STRINGS.put("&Sigma", '\u03A3');
-    ESCAPE_STRINGS.put("&Tau", '\u03A4');
-    ESCAPE_STRINGS.put("&Upsilon", '\u03A5');
-    ESCAPE_STRINGS.put("&Phi", '\u03A6');
-    ESCAPE_STRINGS.put("&Chi", '\u03A7');
-    ESCAPE_STRINGS.put("&Psi", '\u03A8');
-    ESCAPE_STRINGS.put("&Omega", '\u03A9');
-    ESCAPE_STRINGS.put("&alpha", '\u03B1');
-    ESCAPE_STRINGS.put("&beta", '\u03B2');
-    ESCAPE_STRINGS.put("&gamma", '\u03B3');
-    ESCAPE_STRINGS.put("&delta", '\u03B4');
-    ESCAPE_STRINGS.put("&epsilon", '\u03B5');
-    ESCAPE_STRINGS.put("&zeta", '\u03B6');
-    ESCAPE_STRINGS.put("&eta", '\u03B7');
-    ESCAPE_STRINGS.put("&theta", '\u03B8');
-    ESCAPE_STRINGS.put("&iota", '\u03B9');
-    ESCAPE_STRINGS.put("&kappa", '\u03BA');
-    ESCAPE_STRINGS.put("&lambda", '\u03BB');
-    ESCAPE_STRINGS.put("&mu", '\u03BC');
-    ESCAPE_STRINGS.put("&nu", '\u03BD');
-    ESCAPE_STRINGS.put("&xi", '\u03BE');
-    ESCAPE_STRINGS.put("&omicron", '\u03BF');
-    ESCAPE_STRINGS.put("&pi", '\u03C0');
-    ESCAPE_STRINGS.put("&rho", '\u03C1');
-    ESCAPE_STRINGS.put("&sigmaf", '\u03C2');
-    ESCAPE_STRINGS.put("&sigma", '\u03C3');
-    ESCAPE_STRINGS.put("&tau", '\u03C4');
-    ESCAPE_STRINGS.put("&upsilon", '\u03C5');
-    ESCAPE_STRINGS.put("&phi", '\u03C6');
-    ESCAPE_STRINGS.put("&chi", '\u03C7');
-    ESCAPE_STRINGS.put("&psi", '\u03C8');
-    ESCAPE_STRINGS.put("&omega", '\u03C9');
-    ESCAPE_STRINGS.put("&thetasym", '\u03D1');
-    ESCAPE_STRINGS.put("&upsih", '\u03D2');
-    ESCAPE_STRINGS.put("&piv", '\u03D6');
-    ESCAPE_STRINGS.put("&bull", '\u2022');
-    ESCAPE_STRINGS.put("&hellip", '\u2026');
-    ESCAPE_STRINGS.put("&prime", '\u2032');
-    ESCAPE_STRINGS.put("&Prime", '\u2033');
-    ESCAPE_STRINGS.put("&oline", '\u203E');
-    ESCAPE_STRINGS.put("&frasl", '\u2044');
-    ESCAPE_STRINGS.put("&weierp", '\u2118');
-    ESCAPE_STRINGS.put("&image", '\u2111');
-    ESCAPE_STRINGS.put("&real", '\u211C');
-    ESCAPE_STRINGS.put("&trade", '\u2122');
-    ESCAPE_STRINGS.put("&alefsym", '\u2135');
-    ESCAPE_STRINGS.put("&larr", '\u2190');
-    ESCAPE_STRINGS.put("&uarr", '\u2191');
-    ESCAPE_STRINGS.put("&rarr", '\u2192');
-    ESCAPE_STRINGS.put("&darr", '\u2193');
-    ESCAPE_STRINGS.put("&harr", '\u2194');
-    ESCAPE_STRINGS.put("&crarr", '\u21B5');
-    ESCAPE_STRINGS.put("&lArr", '\u21D0');
-    ESCAPE_STRINGS.put("&uArr", '\u21D1');
-    ESCAPE_STRINGS.put("&rArr", '\u21D2');
-    ESCAPE_STRINGS.put("&dArr", '\u21D3');
-    ESCAPE_STRINGS.put("&hArr", '\u21D4');
-    ESCAPE_STRINGS.put("&forall", '\u2200');
-    ESCAPE_STRINGS.put("&part", '\u2202');
-    ESCAPE_STRINGS.put("&exist", '\u2203');
-    ESCAPE_STRINGS.put("&empty", '\u2205');
-    ESCAPE_STRINGS.put("&nabla", '\u2207');
-    ESCAPE_STRINGS.put("&isin", '\u2208');
-    ESCAPE_STRINGS.put("&notin", '\u2209');
-    ESCAPE_STRINGS.put("&ni", '\u220B');
-    ESCAPE_STRINGS.put("&prod", '\u220F');
-    ESCAPE_STRINGS.put("&sum", '\u2211');
-    ESCAPE_STRINGS.put("&minus", '\u2212');
-    ESCAPE_STRINGS.put("&lowast", '\u2217');
-    ESCAPE_STRINGS.put("&radic", '\u221A');
-    ESCAPE_STRINGS.put("&prop", '\u221D');
-    ESCAPE_STRINGS.put("&infin", '\u221E');
-    ESCAPE_STRINGS.put("&ang", '\u2220');
-    ESCAPE_STRINGS.put("&and", '\u2227');
-    ESCAPE_STRINGS.put("&or", '\u2228');
-    ESCAPE_STRINGS.put("&cap", '\u2229');
-    ESCAPE_STRINGS.put("&cup", '\u222A');
-    ESCAPE_STRINGS.put("&int", '\u222B');
-    ESCAPE_STRINGS.put("&there4", '\u2234');
-    ESCAPE_STRINGS.put("&sim", '\u223C');
-    ESCAPE_STRINGS.put("&cong", '\u2245');
-    ESCAPE_STRINGS.put("&asymp", '\u2248');
-    ESCAPE_STRINGS.put("&ne", '\u2260');
-    ESCAPE_STRINGS.put("&equiv", '\u2261');
-    ESCAPE_STRINGS.put("&le", '\u2264');
-    ESCAPE_STRINGS.put("&ge", '\u2265');
-    ESCAPE_STRINGS.put("&sub", '\u2282');
-    ESCAPE_STRINGS.put("&sup", '\u2283');
-    ESCAPE_STRINGS.put("&nsub", '\u2284');
-    ESCAPE_STRINGS.put("&sube", '\u2286');
-    ESCAPE_STRINGS.put("&supe", '\u2287');
-    ESCAPE_STRINGS.put("&oplus", '\u2295');
-    ESCAPE_STRINGS.put("&otimes", '\u2297');
-    ESCAPE_STRINGS.put("&perp", '\u22A5');
-    ESCAPE_STRINGS.put("&sdot", '\u22C5');
-    ESCAPE_STRINGS.put("&lceil", '\u2308');
-    ESCAPE_STRINGS.put("&rceil", '\u2309');
-    ESCAPE_STRINGS.put("&lfloor", '\u230A');
-    ESCAPE_STRINGS.put("&rfloor", '\u230B');
-    ESCAPE_STRINGS.put("&lang", '\u2329');
-    ESCAPE_STRINGS.put("&rang", '\u232A');
-    ESCAPE_STRINGS.put("&loz", '\u25CA');
-    ESCAPE_STRINGS.put("&spades", '\u2660');
-    ESCAPE_STRINGS.put("&clubs", '\u2663');
-    ESCAPE_STRINGS.put("&hearts", '\u2665');
-    ESCAPE_STRINGS.put("&diams", '\u2666');
-    ESCAPE_STRINGS.put("&quot", '\u0022');
-    ESCAPE_STRINGS.put("&amp", '\u0026');
-    ESCAPE_STRINGS.put("&lt", '\u003C');
-    ESCAPE_STRINGS.put("&gt", '\u003E');
-    ESCAPE_STRINGS.put("&OElig", '\u0152');
-    ESCAPE_STRINGS.put("&oelig", '\u0153');
-    ESCAPE_STRINGS.put("&Scaron", '\u0160');
-    ESCAPE_STRINGS.put("&scaron", '\u0161');
-    ESCAPE_STRINGS.put("&Yuml", '\u0178');
-    ESCAPE_STRINGS.put("&circ", '\u02C6');
-    ESCAPE_STRINGS.put("&tilde", '\u02DC');
-    ESCAPE_STRINGS.put("&ensp", '\u2002');
-    ESCAPE_STRINGS.put("&emsp", '\u2003');
-    ESCAPE_STRINGS.put("&thinsp", '\u2009');
-    ESCAPE_STRINGS.put("&zwnj", '\u200C');
-    ESCAPE_STRINGS.put("&zwj", '\u200D');
-    ESCAPE_STRINGS.put("&lrm", '\u200E');
-    ESCAPE_STRINGS.put("&rlm", '\u200F');
-    ESCAPE_STRINGS.put("&ndash", '\u2013');
-    ESCAPE_STRINGS.put("&mdash", '\u2014');
-    ESCAPE_STRINGS.put("&lsquo", '\u2018');
-    ESCAPE_STRINGS.put("&rsquo", '\u2019');
-    ESCAPE_STRINGS.put("&sbquo", '\u201A');
-    ESCAPE_STRINGS.put("&ldquo", '\u201C');
-    ESCAPE_STRINGS.put("&rdquo", '\u201D');
-    ESCAPE_STRINGS.put("&bdquo", '\u201E');
-    ESCAPE_STRINGS.put("&dagger", '\u2020');
-    ESCAPE_STRINGS.put("&Dagger", '\u2021');
-    ESCAPE_STRINGS.put("&permil", '\u2030');
-    ESCAPE_STRINGS.put("&lsaquo", '\u2039');
-    ESCAPE_STRINGS.put("&rsaquo", '\u203A');
-    ESCAPE_STRINGS.put("&euro", '\u20AC');
-
-    HEX_LETTERS = new HashSet<Character>(12);
-
-    HEX_LETTERS.add('a');
-    HEX_LETTERS.add('A');
-    HEX_LETTERS.add('b');
-    HEX_LETTERS.add('B');
-    HEX_LETTERS.add('c');
-    HEX_LETTERS.add('C');
-    HEX_LETTERS.add('d');
-    HEX_LETTERS.add('D');
-    HEX_LETTERS.add('e');
-    HEX_LETTERS.add('E');
-    HEX_LETTERS.add('f');
-    HEX_LETTERS.add('F');
-  }
-
-  /**
-   * <p>
-   * Replace all the occurences of HTML escape strings with the
-   * respective characters.
-   * </p>
-   * <p>
-   * The default mode is strict (requiring semicolons).
-   * </p>
-   *
-   * @param s a <code>String</code> value
-   * @return a <code>String</code> value
-   * @throws NullPointerException if the input string is null.
-   */
-  public static final String unescapeHTML(String s) {
-    return unescapeHTML(s, false);
-  }
-
-  /**
-   * Replace all the occurences of HTML escape strings with the
-   * respective characters.
-   *
-   * @param s a <code>String</code> value
-   * @param emulateBrowsers a <code>Boolean</code> value that tells the method
-   *     to allow entity refs not terminated with a semicolon to be unescaped.
-   *     (a quirk of this feature, and some browsers, is that an explicit
-   *     terminating character is needed - e.g., &lt$ would be unescaped, but
-   *     not &ltab - see the tests for a more in-depth description of browsers)
-   * @return a <code>String</code> value
-   * @throws NullPointerException if the input string is null.
-   */
-  public static final String unescapeHTML(String s, boolean emulateBrowsers) {
-
-    // See if there are any '&' in the string since that is what we look
-    // for to escape. If there isn't, then we don't need to escape this string
-    // Based on similar technique used in the escape function.
-    int index = s.indexOf('&');
-    if (index == -1) {
-      // Nothing to escape. Return the original string.
-      return s;
-    }
-
-    // We found an escaped character. Start slow escaping from there.
-    char[] chars = s.toCharArray();
-    char[] escaped = new char[chars.length];
-    System.arraycopy(chars, 0, escaped, 0, index);
-
-    // Note: escaped[pos] = end of the escaped char array.
-    int pos = index;
-
-    for (int i = index; i < chars.length;) {
-      if (chars[i] != '&') {
-        escaped[pos++] = chars[i++];
-        continue;
-      }
-
-      // Allow e.g. &#123;
-      int j = i + 1;
-      boolean isNumericEntity = false;
-      if (j < chars.length && chars[j] == '#') {
-        j++;
-        isNumericEntity = true;
-      }
-
-      // if it's numeric, also check for hex
-      boolean isHexEntity = false;
-      if (j < chars.length && (chars[j] == 'x' || chars[j] == 'X')) {
-        j++;
-        isHexEntity = true;
-      }
-
-      // Scan until we find a char that is not valid for this sequence.
-      for (; j < chars.length; j++) {
-        char ch = chars[j];
-        boolean isDigit = Character.isDigit(ch);
-        if (isNumericEntity) {
-          // non-hex numeric sequence end condition
-          if (!isHexEntity && !isDigit) {
-            break;
-          }
-          // hex sequence end contition
-          if (isHexEntity && !isDigit && !HEX_LETTERS.contains(ch)) {
-            break;
-          }
-        }
-        // anything other than a digit or letter is always an end condition
-        if (!isDigit && !Character.isLetter(ch)) {
-          break;
-        }
-      }
-
-      boolean replaced = false;
-      if ((j <= chars.length && emulateBrowsers) ||
-          (j < chars.length && chars[j] == ';')) {
-        // Check for &#D; and &#xD; pattern
-        if (i + 2 < chars.length && s.charAt(i + 1) == '#') {
-          try {
-            long charcode = 0;
-            char ch = s.charAt(i + 2);
-            if (isHexEntity) {
-              charcode = Long.parseLong(
-                  new String(chars, i + 3, j - i - 3), 16);
-            } else if (Character.isDigit(ch)) {
-              charcode = Long.parseLong(
-                  new String(chars, i + 2, j - i - 2));
-            }
-            if (charcode > 0 && charcode < 65536) {
-              escaped[pos++] = (char) charcode;
-              replaced = true;
-            }
-          } catch (NumberFormatException ex) {
-            // Failed, not replaced.
-          }
-        } else {
-          String key = new String(chars, i, j - i);
-          Character repl = ESCAPE_STRINGS.get(key);
-          if (repl != null) {
-            escaped[pos++] = repl;
-            replaced = true;
-          }
-        }
-        // Skip over ';'
-        if (j < chars.length && chars[j] == ';') {
-          j++;
-        }
-      }
-
-      if (!replaced) {
-        // Not a recognized escape sequence, leave as-is
-        System.arraycopy(chars, i, escaped, pos, j - i);
-        pos += j - i;
-      }
-      i = j;
-    }
-    return new String(escaped, 0, pos);
-  }
-
-  // Escaper for < and > only.
-  private static final CharEscaper LT_GT_ESCAPE =
-      new CharEscaperBuilder()
-        .addEscape('<', "&lt;")
-        .addEscape('>', "&gt;")
-        .toEscaper();
-
-  private static final Pattern htmlTagPattern =
-      Pattern.compile("</?[a-zA-Z][^>]*>");
-
-  /**
-   * Given a <code>String</code>, returns an equivalent <code>String</code> with
-   * all HTML tags stripped. Note that HTML entities, such as "&amp;amp;" will
-   * still be preserved.
-   */
-  public static String stripHtmlTags(String string) {
-    if ((string == null) || "".equals(string)) {
-      return string;
-    }
-    String stripped = htmlTagPattern.matcher(string).replaceAll("");
-    /*
-     * Certain inputs result in a well-formed HTML:
-     * <<X>script>alert(0)<</X>/script> results in <script>alert(0)</script>
-     * The following step ensures that no HTML can slip through by replacing all
-     * < and > characters with &lt; and &gt; after HTML tags were stripped.
-     */
-    return LT_GT_ESCAPE.escape(stripped);
-  }
-
-  /**
-   * We escape some characters in s to be able to insert strings into JavaScript
-   * code. Also, make sure that we don't write out {@code -->} or
-   * {@code </script>}, which may close a script tag, or any char in ["'>] which
-   * might close a tag or attribute if seen inside an attribute.
-   */
-  public static String javaScriptEscape(CharSequence s) {
-    return javaScriptEscapeHelper(s, false);
-  }
-
-  /**
-   * We escape some characters in s to be able to insert strings into JavaScript
-   * code. Also, make sure that we don't write out {@code -->} or
-   * {@code </script>}, which may close a script tag, or any char in ["'>] which
-   * might close a tag or attribute if seen inside an attribute.
-   * Turns all non-ascii characters into ASCII javascript escape sequences
-   * (eg \\uhhhh or \ooo).
-   */
-  public static String javaScriptEscapeToAscii(CharSequence s) {
-    return javaScriptEscapeHelper(s, true);
-  }
-
-  /**
-   * Represents the type of javascript escaping to perform.  Each enum below
-   * determines whether to use octal escapes and how to handle quotes.
-   */
-  public static enum JsEscapingMode {
-    /** No octal escapes, pass-through ', and escape " as \". */
-    JSON,
-
-    /** Octal escapes, escapes ' and " to \42 and \47, respectively. */
-    EMBEDDABLE_JS,
-
-    /** Octal escapes, escapes ' and " to \' and \". */
-    MINIMAL_JS
-  }
-
-  /**
-   * Helper for javaScriptEscape and javaScriptEscapeToAscii
-   */
-  private static String javaScriptEscapeHelper(CharSequence s,
-                                               boolean escapeToAscii) {
-    StringBuilder sb = new StringBuilder(s.length() * 9 / 8);
-    try {
-      escapeStringBody(s, escapeToAscii, JsEscapingMode.EMBEDDABLE_JS, sb);
-    } catch (IOException ex) {
-      // StringBuilder.append does not throw IOExceptions.
-      throw new RuntimeException(ex);
-    }
-    return sb.toString();
-  }
-
-  /**
-   * Appends the javascript string literal equivalent of plainText to the given
-   * out buffer.
-   * @param plainText the string to escape.
-   * @param escapeToAscii true to encode all characters not in ascii [\x20-\x7e]
-   *   <br>
-   *   Full escaping of unicode entites isn't required but this makes
-   *   sure that unicode strings will survive regardless of the
-   *   content-encoding of the javascript file which is important when
-   *   we use this function to autogenerated javascript source files.
-   *   This is disabled by default because it makes non-latin strings very long.
-   *   <br>
-   *   If you seem to have trouble with character-encodings, maybe
-   *   turn this on to see if the problem goes away.  If so, you need
-   *   to specify a character encoding for your javascript somewhere.
-   * @param jsEscapingMode determines the type of escaping to perform.
-   * @param out the buffer to append output to.
-   */
-  /*
-   * To avoid fallthrough, we would have to either use a hybrid switch-case/if
-   * approach (which would obscure our special handling for ' and "), duplicate
-   * the content of the default case, or pass a half-dozen parameters to a
-   * helper method containing the code from the default case.
-   */
-  @SuppressWarnings("fallthrough")
-  public static void escapeStringBody(
-      CharSequence plainText, boolean escapeToAscii,
-      JsEscapingMode jsEscapingMode, Appendable out)
-      throws IOException {
-    int pos = 0;  // Index just past the last char in plainText written to out.
-    int len = plainText.length();
-    for (int codePoint, charCount, i = 0; i < len; i += charCount) {
-      codePoint = Character.codePointAt(plainText, i);
-      charCount = Character.charCount(codePoint);
-
-      if (!shouldEscapeChar(codePoint, escapeToAscii, jsEscapingMode)) {
-        continue;
-      }
-
-      out.append(plainText, pos, i);
-      pos = i + charCount;
-      switch (codePoint) {
-        case '\b': out.append("\\b"); break;
-        case '\t': out.append("\\t"); break;
-        case '\n': out.append("\\n"); break;
-        case '\f': out.append("\\f"); break;
-        case '\r': out.append("\\r"); break;
-        case '\\': out.append("\\\\"); break;
-        case '"': case '\'':
-          if (jsEscapingMode == JsEscapingMode.JSON && '\'' == codePoint) {
-            // JSON does not escape a single quote (and it should be surrounded
-            // by double quotes).
-            out.append((char) codePoint);
-            break;
-          } else if (jsEscapingMode != JsEscapingMode.EMBEDDABLE_JS) {
-            out.append('\\').append((char) codePoint);
-            break;
-          }
-          // fall through
-        default:
-          if (codePoint >= 0x100 || jsEscapingMode == JsEscapingMode.JSON) {
-            appendHexJavaScriptRepresentation(codePoint, out);
-          } else {
-            // Output the minimal octal encoding.  We can't use an encoding
-            // shorter than three digits if the next digit is a valid octal
-            // digit.
-            boolean pad = i + charCount >= len
-                || isOctal(plainText.charAt(i + charCount));
-            appendOctalJavaScriptRepresentation((char) codePoint, pad, out);
-          }
-          break;
-      }
-    }
-    out.append(plainText, pos, len);
-  }
-
-  /**
-   * Helper for escapeStringBody, which decides whether to escape a character.
-   */
-  private static boolean shouldEscapeChar(int codePoint,
-      boolean escapeToAscii, JsEscapingMode jsEscapingMode) {
-    // If non-ASCII chars should be escaped, identify non-ASCII code points.
-    if (escapeToAscii && (codePoint < 0x20 || codePoint > 0x7e)) {
-      return true;
-    }
-
-    // If in JSON escaping mode, check JSON *and* JS escaping rules. The JS
-    // escaping rules will escape more characters than needed for JSON,
-    // but it is safe to escape any character in JSON.
-    // TODO(bbavar): Remove unnecessary escaping for JSON, as long as it can be
-    //               shown that this change in legacy behavior is safe.
-    if (jsEscapingMode == JsEscapingMode.JSON) {
-      return mustEscapeCharInJsonString(codePoint)
-          || mustEscapeCharInJsString(codePoint);
-    }
-
-    // Finally, just check the default JS escaping rules.
-    return mustEscapeCharInJsString(codePoint);
-  }
-
-  /**
-   * Returns a javascript representation of the character in a hex escaped
-   * format.
-   *
-   * @param codePoint The codepoint to append.
-   * @param out The buffer to which the hex representation should be appended.
-   */
-  private static void appendHexJavaScriptRepresentation(
-      int codePoint, Appendable out)
-      throws IOException {
-    if (Character.isSupplementaryCodePoint(codePoint)) {
-      // Handle supplementary unicode values which are not representable in
-      // javascript.  We deal with these by escaping them as two 4B sequences
-      // so that they will round-trip properly when sent from java to javascript
-      // and back.
-      char[] surrogates = Character.toChars(codePoint);
-      appendHexJavaScriptRepresentation(surrogates[0], out);
-      appendHexJavaScriptRepresentation(surrogates[1], out);
-      return;
-    }
-    out.append("\\u")
-        .append(HEX_CHARS[(codePoint >>> 12) & 0xf])
-        .append(HEX_CHARS[(codePoint >>> 8) & 0xf])
-        .append(HEX_CHARS[(codePoint >>> 4) & 0xf])
-        .append(HEX_CHARS[codePoint & 0xf]);
-  }
-
-  /**
-   * Returns a javascript representation of the character in a hex escaped
-   * format. Although this is a rather specific method, it is made public
-   * because it is also used by the JSCompiler.
-   *
-   * @param ch The character to append.
-   * @param pad true to force use of the full 3 digit representation.
-   * @param out The buffer to which the hex representation should be appended.
-   */
-  private static void appendOctalJavaScriptRepresentation(
-      char ch, boolean pad, Appendable out) throws IOException {
-    if (ch >= 0100
-        // Be paranoid at the end of a string since someone might call
-        // this method again with another string segment.
-        || pad) {
-      out.append('\\')
-          .append(OCTAL_CHARS[(ch >>> 6) & 0x7])
-          .append(OCTAL_CHARS[(ch >>> 3) & 0x7])
-          .append(OCTAL_CHARS[ch & 0x7]);
-    } else if (ch >= 010) {
-      out.append('\\')
-          .append(OCTAL_CHARS[(ch >>> 3) & 0x7])
-          .append(OCTAL_CHARS[ch & 0x7]);
-    } else {
-      out.append('\\')
-          .append(OCTAL_CHARS[ch & 0x7]);
-    }
-  }
-
-  /**
-   * Although this is a rather specific method, it is made public
-   * because it is also used by the JSCompiler.
-   *
-   * @see #appendHexJavaScriptRepresentation(int, Appendable)
-   */
-  public static void appendHexJavaScriptRepresentation(StringBuilder sb,
-                                                       char c) {
-    try {
-      appendHexJavaScriptRepresentation(c, sb);
-    } catch (IOException ex) {
-      // StringBuilder does not throw IOException.
-      throw new RuntimeException(ex);
-    }
-  }
-
-  /**
-   * Undo escaping as performed in javaScriptEscape(.)
-   * Throws an IllegalArgumentException if the string contains
-   * bad escaping.
-   */
-  public static String javaScriptUnescape(String s) {
-    StringBuilder sb = new StringBuilder(s.length());
-    for (int i = 0; i < s.length(); ) {
-      char c = s.charAt(i);
-      if (c == '\\') {
-        i = javaScriptUnescapeHelper(s, i + 1, sb);
-      } else {
-        sb.append(c);
-        i++;
-      }
-    }
-    return sb.toString();
-  }
-
-  /**
-   * Looks for an escape code starting at index i of s,
-   * and appends it to sb.
-   * @return the index of the first character in s
-   * after the escape code.
-   * @throws IllegalArgumentException if the escape code
-   * is invalid
-   */
-  private static int javaScriptUnescapeHelper(String s, int i,
-                                              StringBuilder sb) {
-    if (i >= s.length()) {
-      throw new IllegalArgumentException(
-          "End-of-string after escape character in [" + s + "]");
-    }
-
-    char c = s.charAt(i++);
-    switch (c) {
-      case 'n': sb.append('\n'); break;
-      case 'r': sb.append('\r'); break;
-      case 't': sb.append('\t'); break;
-      case 'b': sb.append('\b'); break;
-      case 'f': sb.append('\f'); break;
-      case '\\':
-      case '\"':
-      case '\'':
-      case '>':
-        sb.append(c);
-        break;
-      case '0': case '1': case '2': case '3':
-      case '4': case '5': case '6': case '7':
-        --i;  // backup to first octal digit
-        int nOctalDigits = 1;
-        int digitLimit = c < '4' ? 3 : 2;
-        while (nOctalDigits < digitLimit && i + nOctalDigits < s.length()
-               && isOctal(s.charAt(i + nOctalDigits))) {
-          ++nOctalDigits;
-        }
-        sb.append(
-            (char) Integer.parseInt(s.substring(i, i + nOctalDigits), 8));
-        i += nOctalDigits;
-        break;
-      case 'x':
-      case 'u':
-        String hexCode;
-        int nHexDigits = (c == 'u' ? 4 : 2);
-        try {
-          hexCode = s.substring(i, i + nHexDigits);
-        } catch (IndexOutOfBoundsException ioobe) {
-          throw new IllegalArgumentException(
-              "Invalid unicode sequence [" + s.substring(i) + "] at index " + i
-              + " in [" + s + "]");
-        }
-        int unicodeValue;
-        try {
-          unicodeValue = Integer.parseInt(hexCode, 16);
-        } catch (NumberFormatException nfe) {
-          throw new IllegalArgumentException(
-              "Invalid unicode sequence [" + hexCode + "] at index " + i +
-              " in [" + s + "]");
-        }
-        sb.append((char) unicodeValue);
-        i += nHexDigits;
-        break;
-      default:
-        throw new IllegalArgumentException(
-            "Unknown escape code [" + c + "] at index " + i + " in [" + s + "]"
-            );
-    }
-
-    return i;
-  }
-
-  // C0 control characters except \t, \n, and \r and 0xFFFE and 0xFFFF
-  private static final CharMatcher CONTROL_MATCHER = CharMatcher.anyOf(
-      "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007" +
-      "\u0008\u000B\u000C\u000E\u000F" +
-      "\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017" +
-      "\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F" +
-      "\uFFFE\uFFFF");
-
-  /**
-   * Escape a string that is meant to be embedded in a CDATA section.
-   * The returned string is guaranteed to be valid CDATA content.
-   * The syntax of CDATA sections is the following:
-   * <blockquote>
-   *   <code>&lt;[!CDATA[...]]&gt;</code>
-   * </blockquote>
-   * The only invalid character sequence in a CDATA tag is "]]&gt;".
-   * If this sequence is present in the input string, we replace
-   * it by closing the current CDATA field, then write ']]&amp;gt;',
-   * then reopen a new CDATA section.
-   */
-  public static String xmlCDataEscape(String s) {
-     // Make sure there are no illegal control characters.
-     s = CONTROL_MATCHER.removeFrom(s);
-    // Return the original reference if the string doesn't have a match.
-    int found = s.indexOf("]]>");
-    if (found == -1) {
-      return s;
-    }
-
-    // For each occurrence of "]]>", append a string that adds "]]&gt;" after
-    // the end of the CDATA which has just been closed, then opens a new CDATA.
-    StringBuilder sb = new StringBuilder();
-    int prev = 0;
-    do {
-      sb.append(s.substring(prev, found + 3));
-      sb.append("]]&gt;<![CDATA[");
-      prev = found + 3;
-    } while ((found = s.indexOf("]]>", prev)) != -1);
-    sb.append(s.substring(prev));
-    return sb.toString();
-  }
-
-  /**
-   * We escape some characters in s to be able to insert strings into Java code
-   *
-   * @deprecated Use {@link CharEscapers#asciiHtmlEscaper()} and {@link
-   * CharEscapers#javaCharEscaper()} or {@link CharEscapers#javaStringEscaper()}
-   * instead. This method combines two forms of escaping in a way that's rarely
-   * desired.
-   */
-  @Deprecated
-  public static String javaEscape(String s) {
-    return JAVA_ESCAPE.escape(s);
-  }
-
-  // Java escaper.
-  private static final CharEscaper JAVA_ESCAPE =
-      new CharEscaperBuilder()
-        .addEscape('\n', "\\n")
-        .addEscape('\r', "\\r")
-        .addEscape('\t', "\\t")
-        .addEscape('\\', "\\\\")
-        .addEscape('\"', "\\\"")
-        .addEscape('&', "&amp;")
-        .addEscape('<', "&lt;")
-        .addEscape('>', "&gt;")
-        .addEscape('\'', "\\\'")
-        .toEscaper();
-
-  /**
-   * Escapes the special characters from a string so it can be used as part of
-   * a regex pattern. This method is for use on gnu.regexp style regular
-   * expressions.
-   *
-   * @deprecated Use {@link Pattern#quote(String)} instead. Note that it may not
-   * be compatible with gnu.regexp style regular expressions.
-   */
-  @Deprecated
-  public static String regexEscape(String s) {
-    return REGEX_ESCAPE.escape(s);
-  }
-
-  // Regex escaper escapes all regex characters.
-  private static final CharEscaper REGEX_ESCAPE =
-      new CharEscaperBuilder()
-        .addEscape('(', "\\(")
-        .addEscape(')', "\\)")
-        .addEscape('|', "\\|")
-        .addEscape('*', "\\*")
-        .addEscape('+', "\\+")
-        .addEscape('?', "\\?")
-        .addEscape('.', "\\.")
-        .addEscape('{', "\\{")
-        .addEscape('}', "\\}")
-        .addEscape('[', "\\[")
-        .addEscape(']', "\\]")
-        .addEscape('$', "\\$")
-        .addEscape('^', "\\^")
-        .addEscape('\\', "\\\\")
-        .toEscaper();
-
-  /**
-   *  If you want to preserve the exact
-   * current (odd) behavior when {@code doStrip} is {@code true}, use
-   * {@code .trimResults(CharMatcher.LEGACY_WHITESPACE).omitEmptyStrings()} on
-   * the splitter.
-   *
-   * @param in what to process
-   * @param delimiter the delimiting string
-   * @return the tokens
-   * @deprecated see the detailed instructions under
-   *     {@link #split(String, String, boolean)}
-   */
-  @Deprecated
-  public static LinkedList<String> string2List(
-      String in, String delimiter, boolean doStrip) {
-    if (in == null) {
-      return null;
-    }
-
-    LinkedList<String> out = new LinkedList<String>();
-    string2Collection(in, delimiter, doStrip, out);
-    return out;
-  }
-
-  /**
-   * See the detailed instructions under {@link
-   * #split(String, String, boolean)}. Pass the resulting {@code Iterable} to
-   * {@link com.google.common.collect.Sets#newHashSet(Iterable)}. If you want to
-   * preserve the exact current (odd) behavior when {@code doStrip} is {@code
-   * true}, use {@code
-   * .trimResults(CharMatcher.LEGACY_WHITESPACE).omitEmptyStrings()} on the
-   * splitter.
-   *
-   * @param in what to process
-   * @param delimiter the delimiting string
-   * @param doStrip to strip the substrings before adding to the list
-   * @return the tokens
-   * @deprecated see the detailed instructions under
-   *     {@link #split(String, String, boolean)}
-   */
-  @Deprecated
-  public static Set<String> string2Set(
-       String in, String delimiter, boolean doStrip) {
-    if (in == null) {
-      return null;
-    }
-
-    HashSet<String> out = new HashSet<String>();
-    string2Collection(in, delimiter, doStrip, out);
-    return out;
-  }
-
-  /**
-   * See the detailed instructions under {@link
-   * #split(String, String, boolean)}. If you want to preserve the exact current
-   * (odd) behavior when {@code doStrip} is {@code true}, use {@code
-   * .trimResults(CharMatcher.LEGACY_WHITESPACE).omitEmptyStrings()} on the
-   * splitter.
-   *
-   * @param in The delimited input string to process
-   * @param delimiter The string delimiting entries in the input string.
-   * @param doStrip whether to strip the substrings before adding to the
-   *          collection
-   * @param collection The collection to which the strings will be added. If
-   *          <code>null</code>, a new <code>List</code> will be created.
-   * @return The collection to which the substrings were added. This is
-   *         syntactic sugar to allow call chaining.
-   * @deprecated see the detailed instructions under
-   *     {@link #split(String, String, boolean)}
-   */
-  @Deprecated
-  public static Collection<String> string2Collection(
-      String in,
-      String delimiter,
-      boolean doStrip,
-      Collection<String> collection) {
-    if (in == null) {
-      return null;
-    }
-    if (collection == null) {
-      collection = new ArrayList<String>();
-    }
-    if (delimiter == null || delimiter.length() == 0) {
-      collection.add(in);
-      return collection;
-    }
-
-    int fromIndex = 0;
-    int pos;
-    while ((pos = in.indexOf(delimiter, fromIndex)) >= 0) {
-      String interim = in.substring(fromIndex, pos);
-      if (doStrip) {
-        interim = strip(interim);
-      }
-      if (!doStrip || interim.length() > 0) {
-        collection.add(interim);
-      }
-
-      fromIndex = pos + delimiter.length();
-    }
-
-    String interim = in.substring(fromIndex);
-    if (doStrip) {
-      interim = strip(interim);
-    }
-    if (!doStrip || interim.length() > 0) {
-      collection.add(interim);
-    }
-
-    return collection;
-  }
-
-  /**
-   * This converts a string to a Map. It will first split the string into
-   * entries using delimEntry. Then each entry is split into a key and a value
-   * using delimKey. By default we strip the keys. Use doStripEntry to strip
-   * also the entries.
-   *
-   * Note that this method returns a {@link HashMap}, which means that entries
-   * will be in no particular order. See {@link #stringToOrderedMap}.
-   *
-   * @param in the string to be processed
-   * @param delimEntry delimiter for the entries
-   * @param delimKey delimiter between keys and values
-   * @param doStripEntry strip entries before inserting in the map
-   *
-   * @return HashMap
-   */
-  public static HashMap<String, String> string2Map(
-      String in, String delimEntry, String delimKey,
-      boolean doStripEntry) {
-    if (in == null) {
-      return null;
-    }
-
-    return stringToMapImpl(new HashMap<String, String>(), in, delimEntry,
-        delimKey, doStripEntry);
-  }
-
-  /**
-   * This converts a string to a Map, with entries in the same order as the
-   * key/value pairs in the input string. It will first split the string into
-   * entries using delimEntry. Then each entry is split into a key and a value
-   * using delimKey. By default we strip the keys. Use doStripEntry to strip
-   * also the entries.
-   *
-   * @param in the string to be processed
-   * @param delimEntry delimiter for the entries
-   * @param delimKey delimiter between keys and values
-   * @param doStripEntry strip entries before inserting in the map
-   *
-   * @return key/value pairs as a Map, in order
-   */
-  public static Map<String, String> stringToOrderedMap(
-      String in, String delimEntry, String delimKey,
-      boolean doStripEntry) {
-    if (in == null) {
-      return null;
-    }
-
-    return stringToMapImpl(new LinkedHashMap<String, String>(), in, delimEntry,
-        delimKey, doStripEntry);
-  }
-
-  /**
-   * This adds key/value pairs from the given string to the given Map.
-   * It will first split the string into entries using delimEntry. Then each
-   * entry is split into a key and a value using delimKey. By default we
-   * strip the keys. Use doStripEntry to strip also the entries.
-   *
-   * @param out - Map to output into
-   * @param in - the string to be processed
-   * @param delimEntry - delimiter for the entries
-   * @param delimKey - delimiter between keys and values
-   * @param doStripEntry - strip entries before inserting in the map
-   * @return out, for caller's convenience
-   */
-  private static <T extends Map<String, String>> T stringToMapImpl(T out,
-      String in, String delimEntry, String delimKey, boolean doStripEntry) {
-
-    if (isEmpty(delimEntry) || isEmpty(delimKey)) {
-      out.put(strip(in), "");
-      return out;
-    }
-
-    Iterator<String> it = string2List(in, delimEntry, false).iterator();
-    int len = delimKey.length();
-    while (it.hasNext()) {
-      String entry = it.next();
-      int pos = entry.indexOf(delimKey);
-      if (pos > 0) {
-        String value = entry.substring(pos + len);
-        if (doStripEntry) {
-          value = strip(value);
-        }
-        out.put(strip(entry.substring(0, pos)), value);
-      } else {
-        out.put(strip(entry), "");
-      }
-    }
-
-    return out;
-  }
-
-  /**
-   * This function concatenates the elements of a Map in a string with form
-   *  "<key1><sepKey><value1><sepEntry>...<keyN><sepKey><valueN>"
-   *
-   * @param in - the map to be converted
-   * @param sepKey - the separator to put between key and value
-   * @param sepEntry - the separator to put between map entries
-   * @return String
-   * @deprecated create a {@link MapJoiner}, for example {@code
-   *     Joiner.on(sepEntry).withKeyValueSeparator(sepKey)}. Ensure that your
-   *     map is non-null and use this map joiner's {@link MapJoiner#join(Map)}
-   *     method. To preserve behavior exactly, just in-line this method call.
-   */
-  @Deprecated public static <K, V> String map2String(
-      Map<K, V> in, String sepKey, String sepEntry) {
-    return (in == null) ? null : Joiner
-        .on(sepEntry)
-        .useForNull("null")
-        .withKeyValueSeparator(sepKey)
-        .join(in);
-  }
-
-  /**
-   * Given a map, creates and returns a new map in which all keys are the
-   * lower-cased version of each key.
-   *
-   * @param map A map containing String keys to be lowercased
-   * @throws IllegalArgumentException if the map contains duplicate string keys
-   *           after lower casing
-   */
-  public static <V> Map<String, V> lowercaseKeys(Map<String, V> map) {
-    Map<String, V> result = new HashMap<String, V>(map.size());
-    for (Map.Entry<String, V> entry : map.entrySet()) {
-      String key = entry.getKey();
-      if (result.containsKey(key.toLowerCase())) {
-        throw new IllegalArgumentException(
-            "Duplicate string key in map when lower casing");
-      }
-      result.put(key.toLowerCase(), entry.getValue());
-    }
-    return result;
-  }
-
-  /**
-   * Replaces any string of adjacent whitespace characters with the whitespace
-   * character " ".
-   *
-   * @param str the string you want to munge
-   * @return String with no more excessive whitespace!
-   * @deprecated ensure the string is not null and use {@code
-   *     CharMatcher.LEGACY_WHITESPACE.collapseFrom(str, ' ')}; also consider
-   *     whether you really want the legacy whitespace definition, or something
-   *     more standard like {@link CharMatcher#WHITESPACE}.
-   */
-  @Deprecated public static String collapseWhitespace(String str) {
-    return (str == null) ? null
-        : CharMatcher.LEGACY_WHITESPACE.collapseFrom(str, ' ');
-  }
-
-  /**
-   * Replaces any string of matched characters with the supplied string.<p>
-   *
-   * This is a more general version of collapseWhitespace.
-   *
-   * <pre>
-   *   E.g. collapse("hello     world", " ", "::")
-   *   will return the following string: "hello::world"
-   * </pre>
-   *
-   * @param str the string you want to munge
-   * @param chars all of the characters to be considered for munge
-   * @param replacement the replacement string
-   * @return munged and replaced string.
-   * @deprecated if {@code replacement} is the empty string, use {@link
-   *     CharMatcher#removeFrom(CharSequence)}; if it is a single character,
-   *     use {@link CharMatcher#collapseFrom(CharSequence, char)}; for longer
-   *     replacement strings use {@link String#replaceAll(String, String)} with
-   *     a regular expression that matches one or more occurrences of {@code
-   *     chars}. In all cases you must first ensure that {@code str} is not
-   *     null.
-   */
-  @Deprecated public static String collapse(
-      String str, String chars, String replacement) {
-    if (str == null) {
-      return null;
-    }
-
-    StringBuilder newStr = new StringBuilder();
-
-    boolean prevCharMatched = false;
-    char c;
-    for (int i = 0; i < str.length(); i++) {
-      c = str.charAt(i);
-      if (chars.indexOf(c) != -1) {
-        // this character is matched
-        if (prevCharMatched) {
-          // apparently a string of matched chars, so don't append anything
-          // to the string
-          continue;
-        }
-        prevCharMatched = true;
-        newStr.append(replacement);
-      } else {
-        prevCharMatched = false;
-        newStr.append(c);
-      }
-    }
-
-    return newStr.toString();
-  }
-
-  /**
-   * Returns a string with all sequences of ISO control chars (0x00 to 0x1F and
-   * 0x7F to 0x9F) replaced by the supplied string.  ISO control characters are
-   * identified via {@link Character#isISOControl(char)}.
-   *
-   * @param str the string you want to strip of ISO control chars
-   * @param replacement the replacement string
-   * @return a String with all control characters replaced by the replacement
-   * string, or null if input is null.
-   * @deprecated use {@link CharMatcher#JAVA_ISO_CONTROL}. If {@code
-   *     replacement} is the empty string, use {@link
-   *     CharMatcher#removeFrom(CharSequence)}; if it is a single character,
-   *     use {@link CharMatcher#collapseFrom(CharSequence, char)}; for longer
-   *     replacement strings use
-   *     {@code str.replaceAll("\p{Cntrl}+", replacement)}.
-   *     In all cases you must first ensure that {@code str} is not null.
-   */
-  @Deprecated public static String collapseControlChars(
-      String str, String replacement) {
-    /*
-     * We re-implement the StringUtil.collapse() loop here rather than call
-     * collapse() with an input String of control chars, because matching via
-     * isISOControl() is about 10x faster.
-     */
-    if (str == null) {
-      return null;
-    }
-
-    StringBuilder newStr = new StringBuilder();
-
-    boolean prevCharMatched = false;
-    char c;
-    for (int i = 0; i < str.length(); i++) {
-      c = str.charAt(i);
-      if (Character.isISOControl(c)) {
-        // this character is matched
-        if (prevCharMatched) {
-          // apparently a string of matched chars, so don't append anything
-          // to the string
-          continue;
-        }
-        prevCharMatched = true;
-        newStr.append(replacement);
-      } else {
-        prevCharMatched = false;
-        newStr.append(c);
-      }
-    }
-
-    return newStr.toString();
-  }
-
-  /**
-   * Read a String of up to maxLength bytes from an InputStream.
-   *
-   * <p>Note that this method uses the default platform encoding, and expects
-   * that encoding to be single-byte, which is not always the case. Its use
-   * is discouraged. For reading the entire stream (maxLength == -1) you can use:
-   * <pre>
-   *   CharStreams.toString(new InputStreamReader(is, Charsets.ISO_8859_1))
-   * </pre>
-   * {@code CharStreams} is in the {@code com.google.common.io} package.
-   *
-   * <p>For maxLength >= 0 a literal translation would be
-   * <pre>
-   *   CharStreams.toString(new InputStreamReader(
-   *       new LimitInputStream(is, maxLength), Charsets.ISO_8859_1))
-   * </pre>
-   * For multi-byte encodings that is broken because the limit could end in
-   * the middle of the character--it would be better to limit the reader than
-   * the underlying stream.
-   *
-   * @param is input stream
-   * @param maxLength max number of bytes to read from "is". If this is -1, we
-   *          read everything.
-   *
-   * @return String up to maxLength bytes, read from "is"
-   * @deprecated see the advice above
-   */
-  @Deprecated public static String stream2String(InputStream is, int maxLength)
-      throws IOException {
-    byte[] buffer = new byte[4096];
-    StringWriter sw = new StringWriter();
-    int totalRead = 0;
-    int read = 0;
-
-    do {
-      sw.write(new String(buffer, 0, read));
-      totalRead += read;
-      read = is.read(buffer, 0, buffer.length);
-    } while (((-1 == maxLength) || (totalRead < maxLength)) && (read != -1));
-
-    return sw.toString();
-  }
-
-  /**
-   * Parse a list of substrings separated by a given delimiter. The delimiter
-   * can also appear in substrings (just double them):
-   *
-   * parseDelimitedString("this|is", '|') returns ["this","is"]
-   * parseDelimitedString("this||is", '|') returns ["this|is"]
-   *
-   * @param list String containing delimited substrings
-   * @param delimiter Delimiter (anything except ' ' is allowed)
-   *
-   * @return String[] A String array of parsed substrings
-   */
-  public static String[] parseDelimitedList(String list,
-                                            char delimiter) {
-    String delim = "" + delimiter;
-    // Append a sentinel of delimiter + space
-    // (see comments below for more info)
-    StringTokenizer st = new StringTokenizer(list + delim + " ",
-                                             delim,
-                                             true);
-    ArrayList<String> v = new ArrayList<String>();
-    String lastToken = "";
-    StringBuilder word = new StringBuilder();
-
-    // We keep a sliding window of 2 tokens
-    //
-    // delimiter : delimiter -> append delimiter to current word
-    //                          and clear most recent token
-    //                          (so delim : delim : delim will not
-    //                          be treated as two escaped delims.)
-    //
-    // tok : delimiter -> append tok to current word
-    //
-    // delimiter : tok -> add current word to list, and clear it.
-    //                    (We append a sentinel that conforms to this
-    //                    pattern to make sure we've pushed every parsed token)
-    while (st.hasMoreTokens()) {
-      String tok = st.nextToken();
-      if (lastToken != null) {
-        if (tok.equals(delim)) {
-          word.append(lastToken);
-          if (lastToken.equals(delim)) { tok = null; }
-        } else {
-          if (word.length() != 0) {
-            v.add(word.toString());
-          }
-          word.setLength(0);
-        }
-      }
-      lastToken = tok;
-    }
-
-    return v.toArray(new String[0]);
-  }
-
-  /**
-   * Compares two strings, guarding against nulls.
-   *
-   * @param nullsAreGreater true if nulls should be greater than any string,
-   *  false is less than.
-   * @deprecated use {@link String#CASE_INSENSITIVE_ORDER}, together with
-   *     {@link com.google.common.collect.Ordering#nullsFirst()} or
-   *     {@link com.google.common.collect.Ordering#nullsLast()} if
-   *     needed
-   */
-  @Deprecated public static int compareToIgnoreCase(String s1, String s2,
-      boolean nullsAreGreater) {
-    if (s1 == s2) {
-      return 0; // Either both the same String, or both null
-    }
-    if (s1 == null) {
-      return nullsAreGreater ? 1 : -1;
-    }
-    if (s2 == null) {
-      return nullsAreGreater ? -1 : 1;
-    }
-    return s1.compareToIgnoreCase(s2);
-  }
-
-  /**
-   * Splits s with delimiters in delimiter and returns the last token
-   */
-  public static String lastToken(String s, String delimiter) {
-    return s.substring(CharMatcher.anyOf(delimiter).lastIndexIn(s) + 1);
-  }
-
-  private static final Pattern characterReferencePattern =
-      Pattern.compile("&#?[a-zA-Z0-9]{1,8};");
-
-  /**
-   * Determines if a string contains what looks like an html character
-   * reference. Useful for deciding whether unescaping is necessary.
-   */
-  public static boolean containsCharRef(String s) {
-    return characterReferencePattern.matcher(s).find();
-  }
-
-  /**
-   * Determines if a string is a Hebrew word. A string is considered to be
-   * a Hebrew word if {@link #isHebrew(int)} is true for any of its characters.
-   */
-  public static boolean isHebrew(String s) {
-    int len = s.length();
-    for (int i = 0; i < len; ++i) {
-      if (isHebrew(s.codePointAt(i))) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  /**
-   * Determines if a character is a Hebrew character.
-   */
-  public static boolean isHebrew(int codePoint) {
-    return Character.UnicodeBlock.HEBREW.equals(
-               Character.UnicodeBlock.of(codePoint));
-  }
-
-  /**
-   * Determines if a string is a CJK word. A string is considered to be CJK
-   * if {@link #isCjk(char)} is true for any of its characters.
-   */
-  public static boolean isCjk(String s) {
-    int len = s.length();
-    for (int i = 0; i < len; ++i) {
-      if (isCjk(s.codePointAt(i))) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  /**
-   * Unicode code blocks containing CJK characters.
-   */
-  private static final Set<Character.UnicodeBlock> CJK_BLOCKS;
-  static {
-    Set<Character.UnicodeBlock> set = new HashSet<Character.UnicodeBlock>();
-    set.add(Character.UnicodeBlock.HANGUL_JAMO);
-    set.add(Character.UnicodeBlock.CJK_RADICALS_SUPPLEMENT);
-    set.add(Character.UnicodeBlock.KANGXI_RADICALS);
-    set.add(Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION);
-    set.add(Character.UnicodeBlock.HIRAGANA);
-    set.add(Character.UnicodeBlock.KATAKANA);
-    set.add(Character.UnicodeBlock.BOPOMOFO);
-    set.add(Character.UnicodeBlock.HANGUL_COMPATIBILITY_JAMO);
-    set.add(Character.UnicodeBlock.KANBUN);
-    set.add(Character.UnicodeBlock.BOPOMOFO_EXTENDED);
-    set.add(Character.UnicodeBlock.KATAKANA_PHONETIC_EXTENSIONS);
-    set.add(Character.UnicodeBlock.ENCLOSED_CJK_LETTERS_AND_MONTHS);
-    set.add(Character.UnicodeBlock.CJK_COMPATIBILITY);
-    set.add(Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A);
-    set.add(Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS);
-    set.add(Character.UnicodeBlock.HANGUL_SYLLABLES);
-    set.add(Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS);
-    set.add(Character.UnicodeBlock.CJK_COMPATIBILITY_FORMS);
-    set.add(Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS);
-    set.add(Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B);
-    set.add(Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT);
-    CJK_BLOCKS = Collections.unmodifiableSet(set);
-  }
-
-  /**
-   * Determines if a character is a CJK ideograph or a character typically
-   * used only in CJK text.
-   *
-   * Note: This function cannot handle supplementary characters. To handle all
-   * Unicode characters, including supplementary characters, use the function
-   * {@link #isCjk(int)}.
-   */
-  public static boolean isCjk(char ch) {
-    return isCjk((int) ch);
-  }
-
-  /**
-   * Determines if a character is a CJK ideograph or a character typically
-   * used only in CJK text.
-   */
-  public static boolean isCjk(int codePoint) {
-    // Time-saving early exit for all Latin-1 characters.
-    if ((codePoint & 0xFFFFFF00) == 0) {
-      return false;
-    }
-
-    return CJK_BLOCKS.contains(Character.UnicodeBlock.of(codePoint));
-  }
-
-  /**
-   * Returns the approximate display width of the string, measured in units of
-   * ascii characters.
-   *
-   * @see StringUtil#displayWidth(char)
-   */
-  public static int displayWidth(String s) {
-    // TODO(kevinb): could reimplement this as
-    // return s.length() * 2 - CharMatcher.SINGLE_WIDTH.countIn(s);
-    int width = 0;
-    int len = s.length();
-    for (int i = 0; i < len; ++i) {
-      width += displayWidth(s.charAt(i));
-    }
-    return width;
-  }
-
-  /**
-   * Returns the approximate display width of the character, measured
-   * in units of ascii characters.
-   *
-   * This method should err on the side of caution. By default, characters
-   * are assumed to have width 2; this covers CJK ideographs, various
-   * symbols and miscellaneous weird scripts. Given below are some Unicode
-   * ranges for which it seems safe to assume that no character is
-   * substantially wider than an ascii character:
-   *   - Latin, extended Latin, even more extended Latin.
-   *   - Greek, extended Greek, Cyrillic.
-   *   - Some symbols (including currency symbols) and punctuation.
-   *   - Half-width Katakana and Hangul.
-   *   - Hebrew
-   *   - Arabic
-   *   - Thai
-   * Characters in these ranges are given a width of 1.
-   *
-   * IMPORTANT: this function has analogs in C++ (encodingutils.cc,
-   * named UnicodeCharWidth) and JavaScript
-   * (java/com/google/ads/common/frontend/adwordsbase/resources/CreateAdUtil.js),
-   * which need to be updated if you change the implementation here.
-   */
-  public static int displayWidth(char ch) {
-    if (ch <= '\u04f9' ||   // CYRILLIC SMALL LETTER YERU WITH DIAERESIS
-        ch == '\u05be' ||   // HEBREW PUNCTUATION MAQAF
-        (ch >= '\u05d0' && ch <= '\u05ea') ||  // HEBREW LETTER ALEF ... TAV
-        ch == '\u05F3' ||   // HEBREW PUNCTUATION GERESH
-        ch == '\u05f4' ||   // HEBREW PUNCTUATION GERSHAYIM
-        (ch >= '\u0600' && ch <= '\u06ff') || // Block=Arabic
-        (ch >= '\u0750' && ch <= '\u077f') || // Block=Arabic_Supplement
-        (ch >= '\ufb50' && ch <= '\ufdff') || // Block=Arabic_Presentation_Forms-A
-        (ch >= '\ufe70' && ch <= '\ufeff') || // Block=Arabic_Presentation_Forms-B
-        (ch >= '\u1e00' && ch <= '\u20af') || /* LATIN CAPITAL LETTER A WITH RING BELOW
-                                                 ... DRACHMA SIGN */
-        (ch >= '\u2100' && ch <= '\u213a') || // ACCOUNT OF ... ROTATED CAPITAL Q
-        (ch >= '\u0e00' && ch <= '\u0e7f') || // Thai
-        (ch >= '\uff61' && ch <= '\uffdc')) { /* HALFWIDTH IDEOGRAPHIC FULL STOP
-                                                 ... HALFWIDTH HANGUL LETTER I */
-      return 1;
-    }
-    return 2;
-  }
-
-  /**
-   * @return a string representation of the given native array.
-   */
-  public static String toString(float[] iArray) {
-    if (iArray == null) {
-      return "NULL";
-    }
-
-    StringBuilder buffer = new StringBuilder();
-    buffer.append("[");
-    for (int i = 0; i < iArray.length; i++) {
-      buffer.append(iArray[i]);
-      if (i != (iArray.length - 1)) {
-        buffer.append(", ");
-      }
-    }
-    buffer.append("]");
-    return buffer.toString();
-  }
-
-  /**
-   * @return a string representation of the given native array.
-   */
-  public static String toString(long[] iArray) {
-    if (iArray == null) {
-      return "NULL";
-    }
-
-    StringBuilder buffer = new StringBuilder();
-    buffer.append("[");
-    for (int i = 0; i < iArray.length; i++) {
-      buffer.append(iArray[i]);
-      if (i != (iArray.length - 1)) {
-        buffer.append(", ");
-      }
-    }
-    buffer.append("]");
-    return buffer.toString();
-  }
-
-  /**
-   * @return a string representation of the given native array
-   */
-  public static String toString(int[] iArray) {
-    if (iArray == null) {
-      return "NULL";
-    }
-
-    StringBuilder buffer = new StringBuilder();
-    buffer.append("[");
-    for (int i = 0; i < iArray.length; i++) {
-      buffer.append(iArray[i]);
-      if (i != (iArray.length - 1)) {
-        buffer.append(", ");
-      }
-    }
-    buffer.append("]");
-    return buffer.toString();
-  }
-
-  /**
-   * @return a string representation of the given array.
-   */
-  public static String toString(String[] iArray) {
-    if (iArray == null) { return "NULL"; }
-
-    StringBuilder buffer = new StringBuilder();
-    buffer.append("[");
-    for (int i = 0; i < iArray.length; i++) {
-      buffer.append("'").append(iArray[i]).append("'");
-      if (i != iArray.length - 1) {
-        buffer.append(", ");
-      }
-    }
-    buffer.append("]");
-
-    return buffer.toString();
-  }
-
-  /**
-   * Returns the string, in single quotes, or "NULL". Intended only for
-   * logging.
-   *
-   * @param s the string
-   * @return the string, in single quotes, or the string "null" if it's null.
-   */
-  public static String toString(String s) {
-    if (s == null) {
-      return "NULL";
-    } else {
-      return new StringBuilder(s.length() + 2).append("'").append(s)
-                                              .append("'").toString();
-    }
-  }
-
-  /**
-   * @return a string representation of the given native array
-   */
-  public static String toString(int[][] iArray) {
-    if (iArray == null) {
-      return "NULL";
-    }
-
-    StringBuilder buffer = new StringBuilder();
-    buffer.append("[");
-    for (int i = 0; i < iArray.length; i++) {
-      buffer.append("[");
-      for (int j = 0; j < iArray[i].length; j++) {
-        buffer.append(iArray[i][j]);
-        if (j != (iArray[i].length - 1)) {
-          buffer.append(", ");
-        }
-      }
-      buffer.append("]");
-      if (i != iArray.length - 1) {
-        buffer.append(" ");
-      }
-    }
-    buffer.append("]");
-    return buffer.toString();
-  }
-
-  /**
-   * @return a string representation of the given native array.
-   */
-  public static String toString(long[][] iArray) {
-    if (iArray == null) { return "NULL"; }
-
-    StringBuilder buffer = new StringBuilder();
-    buffer.append("[");
-    for (int i = 0; i < iArray.length; i++) {
-      buffer.append("[");
-      for (int j = 0; j < iArray[i].length; j++) {
-        buffer.append(iArray[i][j]);
-        if (j != (iArray[i].length - 1)) {
-          buffer.append(", ");
-        }
-      }
-      buffer.append("]");
-      if (i != iArray.length - 1) {
-        buffer.append(" ");
-      }
-    }
-    buffer.append("]");
-    return buffer.toString();
-  }
-
-  /**
-   * @return a String representation of the given object array.
-   * The strings are obtained by calling toString() on the
-   * underlying objects.
-   */
-  public static String toString(Object[] obj) {
-    if (obj == null) { return "NULL"; }
-    StringBuilder tmp = new StringBuilder();
-    tmp.append("[");
-    for (int i = 0; i < obj.length; i++) {
-      tmp.append(obj[i].toString());
-      if (i != obj.length - 1) {
-        tmp.append(",");
-      }
-    }
-    tmp.append("]");
-    return tmp.toString();
-  }
-
-  private static final char[] HEX_CHARS
-      = { '0', '1', '2', '3', '4', '5', '6', '7',
-          '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
-  private static final char[] OCTAL_CHARS = HEX_CHARS;  // ignore the last 8 :)
-
-  /**
-   * Convert a byte array to a hex-encoding string: "a33bff00..."
-   *
-   * @deprecated Use {@link ByteArrays#toHexString}.
-   */
-  @Deprecated public static String bytesToHexString(final byte[] bytes) {
-    return ByteArrays.toHexString(bytes);
-  }
-
-  /**
-   * Convert a byte array to a hex-encoding string with the specified
-   * delimiter: "a3&lt;delimiter&gt;3b&lt;delimiter&gt;ff..."
-   */
-  public static String bytesToHexString(final byte[] bytes,
-      Character delimiter) {
-    StringBuilder hex =
-      new StringBuilder(bytes.length * (delimiter == null ? 2 : 3));
-    int nibble1, nibble2;
-    for (int i = 0; i < bytes.length; i++) {
-      nibble1 = (bytes[i] >>> 4) & 0xf;
-      nibble2 = bytes[i] & 0xf;
-      if (i > 0 && delimiter != null) { hex.append(delimiter.charValue()); }
-      hex.append(HEX_CHARS[nibble1]);
-      hex.append(HEX_CHARS[nibble2]);
-    }
-    return hex.toString();
-  }
-
-  /**
-   * Safely convert the string to uppercase.
-   * @return upper case representation of the String; or null if
-   * the input string is null.
-   */
-  public static String toUpperCase(String src) {
-    if (src == null) {
-      return null;
-    } else {
-      return src.toUpperCase();
-    }
-  }
-
-  /**
-   * Safely convert the string to lowercase.
-   * @return lower case representation of the String; or null if
-   * the input string is null.
-   */
-  public static String toLowerCase(String src) {
-    if (src == null) {
-      return null;
-    } else {
-      return src.toLowerCase();
-    }
-  }
-
-  private static final Pattern dbSpecPattern =
-      Pattern.compile("(.*)\\{(\\d+),(\\d+)\\}(.*)");
-
-  /**
-   * @param dbSpecComponent a single component of a DBDescriptor spec
-   * (e.g. the host or database component). The expected format of the string is:
-   * <br>
-   *             <center>(prefix){(digits),(digits)}(suffix)</center>
-   * </br>
-   * @return a shard expansion of the given String.
-   * Note that unless the pattern is matched exactly, no expansion is
-   * performed and the original string is returned unaltered.
-   * For example, 'db{0,1}.adz' is expanded into 'db0.adz, db1.adz'.
-   * Note that this method is added to StringUtil instead of
-   * DBDescriptor to better encapsulate the choice of regexp implementation.
-   * @throws IllegalArgumentException if the string does not parse.
-   */
-  public static String expandShardNames(String dbSpecComponent)
-      throws IllegalArgumentException, IllegalStateException {
-
-    Matcher matcher = dbSpecPattern.matcher(dbSpecComponent);
-    if (matcher.find()) {
-      try {
-        String prefix = dbSpecComponent.substring(
-          matcher.start(1), matcher.end(1));
-        int minShard =
-          Integer.parseInt(
-            dbSpecComponent.substring(
-              matcher.start(2), matcher.end(2)));
-        int maxShard =
-          Integer.parseInt(
-            dbSpecComponent.substring(
-              matcher.start(3), matcher.end(3)));
-        String suffix = dbSpecComponent.substring(
-          matcher.start(4), matcher.end(4));
-        //Log2.logEvent(prefix + " " + minShard + " " + maxShard + " " + suffix);
-        if (minShard > maxShard) {
-          throw new IllegalArgumentException(
-            "Maximum shard must be greater than or equal to " +
-            "the minimum shard");
-        }
-        StringBuilder tmp = new StringBuilder();
-        for (int shard = minShard; shard <= maxShard; shard++) {
-          tmp.append(prefix).append(shard).append(suffix);
-          if (shard != maxShard) {
-            tmp.append(",");
-          }
-        }
-        return tmp.toString();
-      } catch (NumberFormatException nfex) {
-        throw new IllegalArgumentException(
-          "Malformed DB specification component: " + dbSpecComponent);
-      }
-    } else {
-      return dbSpecComponent;
-    }
-  }
-
-
-  /**
-  * Returns a string that is equivalent to the specified string with its
-  * first character converted to uppercase as by {@link String#toUpperCase()}.
-  * The returned string will have the same value as the specified string if
-  * its first character is non-alphabetic, if its first character is already
-  * uppercase, or if the specified string is of length 0.
-  *
-  * <p>For example:
-  * <pre>
-  *    capitalize("foo bar").equals("Foo bar");
-  *    capitalize("2b or not 2b").equals("2b or not 2b")
-  *    capitalize("Foo bar").equals("Foo bar");
-  *    capitalize("").equals("");
-  * </pre>
-  *
-  * @param s the string whose first character is to be uppercased
-  * @return a string equivalent to <tt>s</tt> with its first character
-  *     converted to uppercase
-  * @throws NullPointerException if <tt>s</tt> is null
-  */
-  public static String capitalize(String s) {
-    if (s.length() == 0) {
-      return s;
-    }
-    char first = s.charAt(0);
-    char capitalized = Character.toUpperCase(first);
-    return (first == capitalized)
-        ? s
-        : capitalized + s.substring(1);
-  }
-
-  /**
-   * Examine a string to see if it starts with a given prefix (case
-   * insensitive). Just like String.startsWith() except doesn't
-   * respect case. Strings are compared in the same way as in
-   * {@link String#equalsIgnoreCase}.
-   *
-   * @param str the string to examine
-   * @param prefix the prefix to look for
-   * @return a boolean indicating if str starts with prefix (case insensitive)
-   */
-  public static boolean startsWithIgnoreCase(String str, String prefix) {
-    return str.regionMatches(true, 0, prefix, 0, prefix.length());
-  }
-
-  /**
-   * Examine a string to see if it ends with a given suffix (case
-   * insensitive). Just like String.endsWith() except doesn't respect
-   * case. Strings are compared in the same way as in
-   * {@link String#equalsIgnoreCase}.
-   *
-   * @param str the string to examine
-   * @param suffix the suffix to look for
-   * @return a boolean indicating if str ends with suffix (case insensitive)
-   */
-  public static boolean endsWithIgnoreCase(String str, String suffix) {
-    int len = suffix.length();
-    return str.regionMatches(true, str.length() - len, suffix, 0, len);
-  }
-
-  /**
-   * @param c one codePoint
-   * @return the number of bytes needed to encode this codePoint in UTF-8
-   */
-  private static int bytesUtf8(int c) {
-    if (c < 0x80) {
-      return 1;
-    } else if (c < 0x00800) {
-      return 2;
-    } else if (c < 0x10000) {
-      return 3;
-    } else if (c < 0x200000) {
-      return 4;
-
-    // RFC 3629 forbids the use of UTF-8 for codePoint greater than 0x10FFFF,
-    // so if the caller respects this RFC, this should not happen
-    } else if (c < 0x4000000) {
-      return 5;
-    } else {
-      return 6;
-    }
-  }
-
-  /**
-   * @param str a string
-   * @return the number of bytes required to represent this string in UTF-8
-   */
-  public static int bytesStorage(String str) {
-    // offsetByCodePoint has a bug if its argument is the result of a
-    // call to substring. To avoid this, we create a new String
-    // See http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6242664
-    String s = new String(str);
-
-    int len = 0;
-    for (int i = 0; i < s.length(); i = s.offsetByCodePoints(i, 1)) {
-      len += bytesUtf8(s.codePointAt(i));
-    }
-    return len;
-  }
-
-  /**
-   * @param str a string
-   * @param maxbytes
-   * @return the beginning of the string, so that it uses less than
-   *     maxbytes bytes in UTF-8
-   * @throws IndexOutOfBoundsException if maxbytes is negative
-   */
-  public static String truncateStringForUtf8Storage(String str, int maxbytes) {
-    if (maxbytes < 0) {
-      throw new IndexOutOfBoundsException();
-    }
-
-    // offsetByCodePoint has a bug if its argument is the result of a
-    // call to substring. To avoid this, we create a new String
-    // See http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6242664
-    // TODO(cquinn): should be fixed as of 1.5.0_01
-    String s = new String(str);
-
-    int codepoints = 0;
-    int bytesUsed = 0;
-    for (codepoints = 0; codepoints < s.length();
-        codepoints = s.offsetByCodePoints(codepoints, 1)) {
-      int glyphBytes = StringUtil.bytesUtf8(s.codePointAt(codepoints));
-      if (bytesUsed + glyphBytes > maxbytes) {
-        break;
-      }
-      bytesUsed += glyphBytes;
-    }
-    return s.substring(0, codepoints);
-  }
-
-  /**
-   * If the given string is of length {@code maxLength} or less, then it is
-   * returned as is.
-   * If the string is longer than {@code maxLength}, the returned string is
-   * truncated before the last space character on or before
-   * {@code source.charAt(maxLength)}. If the string has no spaces, the
-   * returned string is truncated to {@code maxLength}.
-   *
-   * @param source the string to truncate if necessary
-   * @param maxLength
-   * @return the original string if its length is less than or equal to
-   *     maxLength, otherwise a truncated string as mentioned above
-   */
-  public static String truncateIfNecessary(String source, int maxLength) {
-    if (source.length() <= maxLength) {
-      return source;
-    }
-    String str = unicodePreservingSubstring(source, 0, maxLength);
-
-    @SuppressWarnings("deprecation") // we'll make this go away before that does
-    CharMatcher whitespaceMatcher = CharMatcher.LEGACY_WHITESPACE;
-    String truncated = whitespaceMatcher.trimTrailingFrom(str);
-
-    // We may have had multiple spaces at maxLength, which were stripped away
-    if (truncated.length() < maxLength) {
-      return truncated;
-    }
-    // We have a truncated string of length maxLength. If the next char was a
-    // space, we truncated at a word boundary, so we can return immediately
-    if (Character.isSpaceChar(source.charAt(maxLength))) {
-      return truncated;
-    }
-    // We truncated in the middle of the word. Try to truncate before
-    // the last space, if it exists. Otherwise, return the truncated string
-    for (int i = truncated.length() - 1; i >= 0; --i) {
-      if (Character.isSpaceChar(truncated.charAt(i))) {
-        String substr = truncated.substring(0, i);
-        return whitespaceMatcher.trimTrailingFrom(substr);
-      }
-    }
-    return truncated;
-  }
-
-  /**
-   * If this given string is of length {@code maxLength} or less, it will
-   * be returned as-is.
-   * Otherwise it will be trucated to {@code maxLength}, regardless of whether
-   * there are any space characters in the String. If an ellipsis is requested
-   * to be appended to the truncated String, the String will be truncated so
-   * that the ellipsis will also fit within maxLength.
-   * If no truncation was necessary, no ellipsis will be added.
-   *
-   * @param source the String to truncate if necessary
-   * @param maxLength the maximum number of characters to keep
-   * @param addEllipsis if true, and if the String had to be truncated,
-   *     add "..." to the end of the String before returning. Additionally,
-   *     the ellipsis will only be added if maxLength is greater than 3.
-   * @return the original string if its length is less than or equal to
-   *     maxLength, otherwise a truncated string as mentioned above
-   */
-  public static String truncateAtMaxLength(String source, int maxLength,
-      boolean addEllipsis) {
-
-    if (source.length() <= maxLength) {
-      return source;
-    }
-    if (addEllipsis && maxLength > 3) {
-      return unicodePreservingSubstring(source, 0, maxLength - 3) + "...";
-    }
-    return unicodePreservingSubstring(source, 0, maxLength);
-  }
-
-  /**
-   * Normalizes {@code index} such that it respects Unicode character
-   * boundaries in {@code str}.
-   *
-   * <p>If {@code index} is the low surrogate of a unicode character,
-   * the method returns {@code index - 1}. Otherwise, {@code index} is
-   * returned.
-   *
-   * <p>In the case in which {@code index} falls in an invalid surrogate pair
-   * (e.g. consecutive low surrogates, consecutive high surrogates), or if
-   * if it is not a valid index into {@code str}, the original value of
-   * {@code index} is returned.
-   *
-   * @param str the String
-   * @param index the index to be normalized
-   * @return a normalized index that does not split a Unicode character
-   */
-  public static int unicodePreservingIndex(String str, int index) {
-    if (index > 0 && index < str.length()) {
-      if (Character.isHighSurrogate(str.charAt(index - 1)) &&
-          Character.isLowSurrogate(str.charAt(index))) {
-        return index - 1;
-      }
-    }
-    return index;
-  }
-
-  /**
-   * Returns a substring of {@code str} that respects Unicode character
-   * boundaries.
-   *
-   * <p>The string will never be split between a [high, low] surrogate pair,
-   * as defined by {@link Character#isHighSurrogate} and
-   * {@link Character#isLowSurrogate}.
-   *
-   * <p>If {@code begin} or {@code end} are the low surrogate of a unicode
-   * character, it will be offset by -1.
-   *
-   * <p>This behavior guarantees that
-   * {@code str.equals(StringUtil.unicodePreservingSubstring(str, 0, n) +
-   *     StringUtil.unicodePreservingSubstring(str, n, str.length())) } is
-   * true for all {@code n}.
-   * </pre>
-   *
-   * <p>This means that unlike {@link String#substring(int, int)}, the length of
-   * the returned substring may not necessarily be equivalent to
-   * {@code end - begin}.
-   *
-   * @param str the original String
-   * @param begin the beginning index, inclusive
-   * @param end the ending index, exclusive
-   * @return the specified substring, possibly adjusted in order to not
-   *   split unicode surrogate pairs
-   * @throws IndexOutOfBoundsException if the {@code begin} is negative,
-   *   or {@code end} is larger than the length of {@code str}, or
-   *   {@code begin} is larger than {@code end}
-   */
-  public static String unicodePreservingSubstring(
-      String str, int begin, int end) {
-    return str.substring(unicodePreservingIndex(str, begin),
-        unicodePreservingIndex(str, end));
-  }
-
-  /**
-   * Equivalent to:
-   *
-   * <pre>
-   * {@link #unicodePreservingSubstring(String, int, int)}(
-   *     str, begin, str.length())
-   * </pre>
-   */
-  public static String unicodePreservingSubstring(String str, int begin) {
-    return unicodePreservingSubstring(str, begin, str.length());
-  }
-
-  /**
-   * True iff the given character needs to be escaped in a javascript string
-   * literal.
-   * <p>
-   * We need to escape the following characters in javascript string literals.
-   * <dl>
-   * <dt> \           <dd> the escape character
-   * <dt> ', "        <dd> string delimiters.
-   *                       TODO(msamuel): what about backticks (`) which are
-   *                       non-standard but recognized as attribute delimiters.
-   * <dt> &, <, >, =  <dd> so that a string literal can be embedded in XHTML
-   *                       without further escaping.
-   * </dl>
-   * TODO(msamuel): If we're being paranoid, should we escape + to avoid UTF-7
-   * attacks?
-   * <p>
-   * Unicode format control characters (category Cf) must be escaped since they
-   * are removed by javascript parser in a pre-lex pass.
-   * <br>According to EcmaScript 262 Section 7.1:
-   * <blockquote>
-   *     The format control characters can occur anywhere in the source text of
-   *     an ECMAScript program. These characters are removed from the source
-   *     text before applying the lexical grammar.
-   * </blockquote>
-   * <p>
-   * Additionally, line terminators are not allowed to appear inside strings
-   * and Section 7.3 says
-   * <blockquote>
-   *     The following characters are considered to be line terminators:<pre>
-   *         Code Point Value   Name                  Formal Name
-   *         \u000A             Line Feed             [LF]
-   *         \u000D             Carriage Return       [CR]
-   *         \u2028             Line separator        [LS]
-   *         \u2029             Paragraph separator   [PS]
-   * </pre></blockquote>
-   *
-   * @param codepoint a char instead of an int since the javascript language
-   *    does not support extended unicode.
-   */
-  static boolean mustEscapeCharInJsString(int codepoint) {
-    return JS_ESCAPE_CHARS.contains(codepoint);
-  }
-
-  /**
-   * True iff the given character needs to be escaped in a JSON string literal.
-   * <p>
-   * We need to escape the following characters in JSON string literals.
-   * <dl>
-   * <dt> \           <dd> the escape character
-   * <dt> "           <dd> string delimiter
-   * <dt> 0x00 - 0x1F <dd> control characters
-   * </dl>
-   * <p>
-   * See EcmaScript 262 Section 15.12.1 for the full JSON grammar.
-   */
-  static boolean mustEscapeCharInJsonString(int codepoint) {
-    return JSON_ESCAPE_CHARS.contains(codepoint);
-  }
-
-  /**
-   * Builds a small set of code points.
-   * {@code com.google.common.base} cannot depend on ICU4J, thus avoiding ICU's
-   * {@code UnicodeSet}.
-   * For all other purposes, please use {@code com.ibm.icu.text.UnicodeSet}.
-   */
-  private static class UnicodeSetBuilder {
-    Set<Integer> codePointSet = new HashSet<Integer>();
-
-    UnicodeSetBuilder addCodePoint(int c) {
-      codePointSet.add(c);
-      return this;
-    }
-
-    UnicodeSetBuilder addRange(int from, int to) {
-      for (int i = from; i <= to; i++) {
-        codePointSet.add(i);
-      }
-      return this;
-    }
-
-    Set<Integer> create() {
-      return codePointSet;
-    }
-  }
-
-  private static final Set<Integer> JS_ESCAPE_CHARS = new UnicodeSetBuilder()
-      // All characters in the class of format characters, [:Cf:].
-      // Source: http://unicode.org/cldr/utility/list-unicodeset.jsp.
-      .addCodePoint(0xAD)
-      .addRange(0x600, 0x603)
-      .addCodePoint(0x6DD)
-      .addCodePoint(0x070F)
-      .addRange(0x17B4, 0x17B5)
-      .addRange(0x200B, 0x200F)
-      .addRange(0x202A, 0x202E)
-      .addRange(0x2060, 0x2064)
-      .addRange(0x206A, 0x206F)
-      .addCodePoint(0xFEFF)
-      .addRange(0xFFF9, 0xFFFB)
-      .addRange(0x0001D173, 0x0001D17A)
-      .addCodePoint(0x000E0001)
-      .addRange(0x000E0020, 0x000E007F)
-      // Plus characters mentioned in the docs of mustEscapeCharInJsString().
-      .addCodePoint(0x0000)
-      .addCodePoint(0x000A)
-      .addCodePoint(0x000D)
-      .addRange(0x2028, 0x2029)
-      .addCodePoint(0x0085)
-      .addCodePoint(Character.codePointAt("'", 0))
-      .addCodePoint(Character.codePointAt("\"", 0))
-      .addCodePoint(Character.codePointAt("&", 0))
-      .addCodePoint(Character.codePointAt("<", 0))
-      .addCodePoint(Character.codePointAt(">", 0))
-      .addCodePoint(Character.codePointAt("=", 0))
-      .addCodePoint(Character.codePointAt("\\", 0))
-      .create();
-
-  private static final Set<Integer> JSON_ESCAPE_CHARS = new UnicodeSetBuilder()
-      .addCodePoint(Character.codePointAt("\"", 0))
-      .addCodePoint(Character.codePointAt("\\", 0))
-      .addRange(0x0000, 0x001F)
-      .create();
-
-  /**
-   * <b>To be deprecated:</b> use {@link CharEscapers#xmlEscaper()} instead.
-   */
-  public static String xmlEscape(String s) {
-    return CharEscapers.xmlEscaper().escape(s);
-  }
-
-  /**
-   * <b>To be deprecated:</b> use {@link CharEscapers#asciiHtmlEscaper()} instead.
-   */
-  public static String htmlEscape(String s) {
-    return CharEscapers.asciiHtmlEscaper().escape(s);
-  }
-}
\ No newline at end of file
diff --git a/src/com/android/mail/lib/base/Strings.java b/src/com/android/mail/lib/base/Strings.java
deleted file mode 100644
index 2fd6a97..0000000
--- a/src/com/android/mail/lib/base/Strings.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mail.lib.base;
-
-import static com.android.mail.lib.base.Preconditions.checkArgument;
-import static com.android.mail.lib.base.Preconditions.checkNotNull;
-
-import java.util.Formatter;
-
-/**
- * Static utility methods pertaining to {@code String} or {@code CharSequence}
- * instances.
- *
- * @author Kevin Bourrillion
- * @since 3
- */
-public final class Strings {
-  private Strings() {}
-
-  /**
-   * Returns the given string if it is non-null; the empty string otherwise.
-   *
-   * @param string the string to test and possibly return
-   * @return {@code string} itself if it is non-null; {@code ""} if it is null
-   */
-  public static String nullToEmpty(String string) {
-    return (string == null) ? "" : string;
-  }
-
-  /**
-   * Returns the given string if it is nonempty; {@code null} otherwise.
-   *
-   * @param string the string to test and possibly return
-   * @return {@code string} itself if it is nonempty; {@code null} if it is
-   *     empty or null
-   */
-  public static String emptyToNull(String string) {
-    return isNullOrEmpty(string) ? null : string;
-  }
-
-  /**
-   * Returns {@code true} if the given string is null or is the empty string.
-   *
-   * <p>Consider normalizing your string references with {@link #nullToEmpty}.
-   * If you do, you can use {@link String#isEmpty()} instead of this
-   * method, and you won't need special null-safe forms of methods like {@link
-   * String#toUpperCase} either. Or, if you'd like to normalize "in the other
-   * direction," converting empty strings to {@code null}, you can use {@link
-   * #emptyToNull}.
-   *
-   * @param string a string reference to check
-   * @return {@code true} if the string is null or is the empty string
-   */
-  public static boolean isNullOrEmpty(String string) {
-    return string == null || string.length() == 0; // string.isEmpty() in Java 6
-  }
-
-  /**
-   * Returns a string, of length at least {@code minLength}, consisting of
-   * {@code string} prepended with as many copies of {@code padChar} as are
-   * necessary to reach that length. For example,
-   *
-   * <ul>
-   * <li>{@code padStart("7", 3, '0')} returns {@code "007"}
-   * <li>{@code padStart("2010", 3, '0')} returns {@code "2010"}
-   * </ul>
-   *
-   * <p>See {@link Formatter} for a richer set of formatting capabilities.
-   *
-   * @param string the string which should appear at the end of the result
-   * @param minLength the minimum length the resulting string must have. Can be
-   *     zero or negative, in which case the input string is always returned.
-   * @param padChar the character to insert at the beginning of the result until
-   *     the minimum length is reached
-   * @return the padded string
-   */
-  public static String padStart(String string, int minLength, char padChar) {
-    checkNotNull(string);  // eager for GWT.
-    if (string.length() >= minLength) {
-      return string;
-    }
-    StringBuilder sb = new StringBuilder(minLength);
-    for (int i = string.length(); i < minLength; i++) {
-      sb.append(padChar);
-    }
-    sb.append(string);
-    return sb.toString();
-  }
-
-  /**
-   * Returns a string, of length at least {@code minLength}, consisting of
-   * {@code string} appended with as many copies of {@code padChar} as are
-   * necessary to reach that length. For example,
-   *
-   * <ul>
-   * <li>{@code padEnd("4.", 5, '0')} returns {@code "4.000"}
-   * <li>{@code padEnd("2010", 3, '!')} returns {@code "2010"}
-   * </ul>
-   *
-   * <p>See {@link Formatter} for a richer set of formatting capabilities.
-   *
-   * @param string the string which should appear at the beginning of the result
-   * @param minLength the minimum length the resulting string must have. Can be
-   *     zero or negative, in which case the input string is always returned.
-   * @param padChar the character to append to the end of the result until the
-   *     minimum length is reached
-   * @return the padded string
-   */
-  public static String padEnd(String string, int minLength, char padChar) {
-    checkNotNull(string);  // eager for GWT.
-    if (string.length() >= minLength) {
-      return string;
-    }
-    StringBuilder sb = new StringBuilder(minLength);
-    sb.append(string);
-    for (int i = string.length(); i < minLength; i++) {
-      sb.append(padChar);
-    }
-    return sb.toString();
-  }
-
-  /**
-   * Returns a string consisting of a specific number of concatenated copies of
-   * an input string. For example, {@code repeat("hey", 3)} returns the string
-   * {@code "heyheyhey"}.
-   *
-   * @param string any non-null string
-   * @param count the number of times to repeat it; a nonnegative integer
-   * @return a string containing {@code string} repeated {@code count} times
-   *     (the empty string if {@code count} is zero)
-   * @throws IllegalArgumentException if {@code count} is negative
-   */
-  public static String repeat(String string, int count) {
-    checkNotNull(string);  // eager for GWT.
-    checkArgument(count >= 0, "invalid count: %s", count);
-
-    // If this multiplication overflows, a NegativeArraySizeException or
-    // OutOfMemoryError is not far behind
-    StringBuilder builder = new StringBuilder(string.length() * count);
-    for (int i = 0; i < count; i++) {
-      builder.append(string);
-    }
-    return builder.toString();
-  }
-}
diff --git a/src/com/android/mail/lib/base/UnicodeEscaper.java b/src/com/android/mail/lib/base/UnicodeEscaper.java
deleted file mode 100644
index 95eb06e..0000000
--- a/src/com/android/mail/lib/base/UnicodeEscaper.java
+++ /dev/null
@@ -1,430 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mail.lib.base;
-
-import static com.android.mail.lib.base.Preconditions.checkNotNull;
-import static com.android.mail.lib.base.Preconditions.checkPositionIndexes;
-
-import java.io.IOException;
-
-/**
- * An {@link Escaper} that converts literal text into a format safe for
- * inclusion in a particular context (such as an XML document). Typically (but
- * not always), the inverse process of "unescaping" the text is performed
- * automatically by the relevant parser.
- *
- * <p>For example, an XML escaper would convert the literal string {@code
- * "Foo<Bar>"} into {@code "Foo&lt;Bar&gt;"} to prevent {@code "<Bar>"} from
- * being confused with an XML tag. When the resulting XML document is parsed,
- * the parser API will return this text as the original literal string {@code
- * "Foo<Bar>"}.
- *
- * <p><b>Note:</b> This class is similar to {@link CharEscaper} but with one
- * very important difference. A CharEscaper can only process Java
- * <a href="http://en.wikipedia.org/wiki/UTF-16">UTF16</a> characters in
- * isolation and may not cope when it encounters surrogate pairs. This class
- * facilitates the correct escaping of all Unicode characters.
- *
- * <p>As there are important reasons, including potential security issues, to
- * handle Unicode correctly if you are considering implementing a new escaper
- * you should favor using UnicodeEscaper wherever possible.
- *
- * <p>A {@code UnicodeEscaper} instance is required to be stateless, and safe
- * when used concurrently by multiple threads.
- *
- * <p>Several popular escapers are defined as constants in the class {@link
- * CharEscapers}. To create your own escapers extend this class and implement
- * the {@link #escape(int)} method.
- *
- * @author dbeaumont@google.com (David Beaumont)
- */
-public abstract class UnicodeEscaper extends Escaper {
-  /** The amount of padding (chars) to use when growing the escape buffer. */
-  private static final int DEST_PAD = 32;
-
-  /**
-   * Returns the escaped form of the given Unicode code point, or {@code null}
-   * if this code point does not need to be escaped. When called as part of an
-   * escaping operation, the given code point is guaranteed to be in the range
-   * {@code 0 <= cp <= Character#MAX_CODE_POINT}.
-   *
-   * <p>If an empty array is returned, this effectively strips the input
-   * character from the resulting text.
-   *
-   * <p>If the character does not need to be escaped, this method should return
-   * {@code null}, rather than an array containing the character representation
-   * of the code point. This enables the escaping algorithm to perform more
-   * efficiently.
-   *
-   * <p>If the implementation of this method cannot correctly handle a
-   * particular code point then it should either throw an appropriate runtime
-   * exception or return a suitable replacement character. It must never
-   * silently discard invalid input as this may constitute a security risk.
-   *
-   * @param cp the Unicode code point to escape if necessary
-   * @return the replacement characters, or {@code null} if no escaping was
-   *     needed
-   */
-  protected abstract char[] escape(int cp);
-
-  /**
-   * Scans a sub-sequence of characters from a given {@link CharSequence},
-   * returning the index of the next character that requires escaping.
-   *
-   * <p><b>Note:</b> When implementing an escaper, it is a good idea to override
-   * this method for efficiency. The base class implementation determines
-   * successive Unicode code points and invokes {@link #escape(int)} for each of
-   * them. If the semantics of your escaper are such that code points in the
-   * supplementary range are either all escaped or all unescaped, this method
-   * can be implemented more efficiently using {@link CharSequence#charAt(int)}.
-   *
-   * <p>Note however that if your escaper does not escape characters in the
-   * supplementary range, you should either continue to validate the correctness
-   * of any surrogate characters encountered or provide a clear warning to users
-   * that your escaper does not validate its input.
-   *
-   * <p>See {@link PercentEscaper} for an example.
-   *
-   * @param csq a sequence of characters
-   * @param start the index of the first character to be scanned
-   * @param end the index immediately after the last character to be scanned
-   * @throws IllegalArgumentException if the scanned sub-sequence of {@code csq}
-   *     contains invalid surrogate pairs
-   */
-  protected int nextEscapeIndex(CharSequence csq, int start, int end) {
-    int index = start;
-    while (index < end) {
-      int cp = codePointAt(csq, index, end);
-      if (cp < 0 || escape(cp) != null) {
-        break;
-      }
-      index += Character.isSupplementaryCodePoint(cp) ? 2 : 1;
-    }
-    return index;
-  }
-
-  /**
-   * Returns the escaped form of a given literal string.
-   *
-   * <p>If you are escaping input in arbitrary successive chunks, then it is not
-   * generally safe to use this method. If an input string ends with an
-   * unmatched high surrogate character, then this method will throw
-   * {@link IllegalArgumentException}. You should either ensure your input is
-   * valid <a href="http://en.wikipedia.org/wiki/UTF-16">UTF-16</a> before
-   * calling this method or use an escaped {@link Appendable} (as returned by
-   * {@link #escape(Appendable)}) which can cope with arbitrarily split input.
-   *
-   * <p><b>Note:</b> When implementing an escaper it is a good idea to override
-   * this method for efficiency by inlining the implementation of
-   * {@link #nextEscapeIndex(CharSequence, int, int)} directly. Doing this for
-   * {@link PercentEscaper} more than doubled the performance for unescaped
-   * strings (as measured by {@link CharEscapersBenchmark}).
-   *
-   * @param string the literal string to be escaped
-   * @return the escaped form of {@code string}
-   * @throws NullPointerException if {@code string} is null
-   * @throws IllegalArgumentException if invalid surrogate characters are
-   *         encountered
-   */
-  @Override
-  public String escape(String string) {
-    checkNotNull(string);
-    int end = string.length();
-    int index = nextEscapeIndex(string, 0, end);
-    return index == end ? string : escapeSlow(string, index);
-  }
-
-  /**
-   * Returns the escaped form of a given literal string, starting at the given
-   * index.  This method is called by the {@link #escape(String)} method when it
-   * discovers that escaping is required.  It is protected to allow subclasses
-   * to override the fastpath escaping function to inline their escaping test.
-   * See {@link CharEscaperBuilder} for an example usage.
-   *
-   * <p>This method is not reentrant and may only be invoked by the top level
-   * {@link #escape(String)} method.
-   *
-   * @param s the literal string to be escaped
-   * @param index the index to start escaping from
-   * @return the escaped form of {@code string}
-   * @throws NullPointerException if {@code string} is null
-   * @throws IllegalArgumentException if invalid surrogate characters are
-   *         encountered
-   */
-  protected final String escapeSlow(String s, int index) {
-    int end = s.length();
-
-    // Get a destination buffer and setup some loop variables.
-    char[] dest = Platform.charBufferFromThreadLocal();
-    int destIndex = 0;
-    int unescapedChunkStart = 0;
-
-    while (index < end) {
-      int cp = codePointAt(s, index, end);
-      if (cp < 0) {
-        throw new IllegalArgumentException(
-            "Trailing high surrogate at end of input");
-      }
-      // It is possible for this to return null because nextEscapeIndex() may
-      // (for performance reasons) yield some false positives but it must never
-      // give false negatives.
-      char[] escaped = escape(cp);
-      int nextIndex = index + (Character.isSupplementaryCodePoint(cp) ? 2 : 1);
-      if (escaped != null) {
-        int charsSkipped = index - unescapedChunkStart;
-
-        // This is the size needed to add the replacement, not the full
-        // size needed by the string.  We only regrow when we absolutely must.
-        int sizeNeeded = destIndex + charsSkipped + escaped.length;
-        if (dest.length < sizeNeeded) {
-          int destLength = sizeNeeded + (end - index) + DEST_PAD;
-          dest = growBuffer(dest, destIndex, destLength);
-        }
-        // If we have skipped any characters, we need to copy them now.
-        if (charsSkipped > 0) {
-          s.getChars(unescapedChunkStart, index, dest, destIndex);
-          destIndex += charsSkipped;
-        }
-        if (escaped.length > 0) {
-          System.arraycopy(escaped, 0, dest, destIndex, escaped.length);
-          destIndex += escaped.length;
-        }
-        // If we dealt with an escaped character, reset the unescaped range.
-        unescapedChunkStart = nextIndex;
-      }
-      index = nextEscapeIndex(s, nextIndex, end);
-    }
-
-    // Process trailing unescaped characters - no need to account for escaped
-    // length or padding the allocation.
-    int charsSkipped = end - unescapedChunkStart;
-    if (charsSkipped > 0) {
-      int endIndex = destIndex + charsSkipped;
-      if (dest.length < endIndex) {
-        dest = growBuffer(dest, destIndex, endIndex);
-      }
-      s.getChars(unescapedChunkStart, end, dest, destIndex);
-      destIndex = endIndex;
-    }
-    return new String(dest, 0, destIndex);
-  }
-
-  /**
-   * Returns an {@code Appendable} instance which automatically escapes all
-   * text appended to it before passing the resulting text to an underlying
-   * {@code Appendable}.
-   *
-   * <p>Unlike {@link #escape(String)} it is permitted to append arbitrarily
-   * split input to this Appendable, including input that is split over a
-   * surrogate pair. In this case the pending high surrogate character will not
-   * be processed until the corresponding low surrogate is appended. This means
-   * that a trailing high surrogate character at the end of the input cannot be
-   * detected and will be silently ignored. This is unavoidable since the
-   * Appendable interface has no {@code close()} method, and it is impossible to
-   * determine when the last characters have been appended.
-   *
-   * <p>The methods of the returned object will propagate any exceptions thrown
-   * by the underlying {@code Appendable}.
-   *
-   * <p>For well formed <a href="http://en.wikipedia.org/wiki/UTF-16">UTF-16</a>
-   * the escaping behavior is identical to that of {@link #escape(String)} and
-   * the following code is equivalent to (but much slower than)
-   * {@code escaper.escape(string)}: <pre>{@code
-   *
-   *   StringBuilder sb = new StringBuilder();
-   *   escaper.escape(sb).append(string);
-   *   return sb.toString();}</pre>
-   *
-   * @param out the underlying {@code Appendable} to append escaped output to
-   * @return an {@code Appendable} which passes text to {@code out} after
-   *     escaping it
-   * @throws NullPointerException if {@code out} is null
-   * @throws IllegalArgumentException if invalid surrogate characters are
-   *         encountered
-   *
-   * TODO(dbeaumont): Maybe return a Writer here so we have a close() method
-   */
-  @Override
-  public Appendable escape(final Appendable out) {
-    checkNotNull(out);
-
-    return new Appendable() {
-      char pendingHighSurrogate = 0;
-
-      @Override
-      public Appendable append(CharSequence csq) throws IOException {
-        return append(csq, 0, csq.length());
-      }
-
-      @Override
-      public Appendable append(CharSequence csq, int start, int end)
-          throws IOException {
-        checkNotNull(csq);
-        checkPositionIndexes(start, end, csq.length());
-
-        // If there is a pending high surrogate, handle it and start at the
-        // next character.
-        if (pendingHighSurrogate != 0 && start < end) {
-          completeSurrogatePair(csq.charAt(start++));
-        }
-
-        if (start < end) {
-          // If the string ends with a high surrogate, store it for the next
-          // append, and skip that character from the current escaping.
-          char last = csq.charAt(end - 1);
-          if (Character.isHighSurrogate(last)) {
-            pendingHighSurrogate = last;
-            end--;
-          }
-
-          // Escape the subsequence from start to end, which cannot legally
-          // contain an unpaired surrogate
-          out.append(escape(csq.subSequence(start, end).toString()));
-        }
-        return this;
-      }
-
-      @Override
-      public Appendable append(char c) throws IOException {
-        if (pendingHighSurrogate != 0) {
-          completeSurrogatePair(c);
-        } else if (Character.isHighSurrogate(c)) {
-          pendingHighSurrogate = c;
-        } else {
-          if (Character.isLowSurrogate(c)) {
-            throw new IllegalArgumentException(
-                "Unexpected low surrogate character '" + c +
-                "' with value " + (int) c);
-          }
-          // This is a normal (non surrogate) char.
-          char[] escaped = escape(c);
-          if (escaped != null) {
-            outputChars(escaped);
-          } else {
-            out.append(c);
-          }
-        }
-        return this;
-      }
-
-      /**
-       * Our last append operation ended halfway through a surrogate pair so we
-       * complete the surrogate pair using {@code c}, which must be a low
-       * surrogate.
-       */
-      private void completeSurrogatePair(char c) throws IOException {
-        if (!Character.isLowSurrogate(c)) {
-          throw new IllegalArgumentException(
-              "Expected low surrogate character but got '" + c +
-              "' with value " + (int) c);
-        }
-        char[] escaped = escape(
-            Character.toCodePoint(pendingHighSurrogate, c));
-        if (escaped != null) {
-          outputChars(escaped);
-        } else {
-          out.append(pendingHighSurrogate);
-          out.append(c);
-        }
-        pendingHighSurrogate = 0;
-      }
-
-      /**
-       * Output some characters to the underlying appendable.
-       */
-      private void outputChars(char[] chars) throws IOException {
-        for (int n = 0; n < chars.length; n++) {
-          out.append(chars[n]);
-        }
-      }
-    };
-  }
-
-  /**
-   * Returns the Unicode code point of the character at the given index.
-   *
-   * <p>Unlike {@link Character#codePointAt(CharSequence, int)} or
-   * {@link String#codePointAt(int)} this method will never fail silently when
-   * encountering an invalid surrogate pair.
-   *
-   * <p>The behaviour of this method is as follows:
-   * <ol>
-   * <li>If {@code index >= end}, {@link IndexOutOfBoundsException} is thrown.
-   * <li><b>If the character at the specified index is not a surrogate, it is
-   *     returned.</b>
-   * <li>If the first character was a high surrogate value, then an attempt is
-   *     made to read the next character.
-   *     <ol>
-   *     <li><b>If the end of the sequence was reached, the negated value of
-   *         the trailing high surrogate is returned.</b>
-   *     <li><b>If the next character was a valid low surrogate, the code point
-   *         value of the high/low surrogate pair is returned.</b>
-   *     <li>If the next character was not a low surrogate value, then
-   *         {@link IllegalArgumentException} is thrown.
-   *     </ol>
-   * <li>If the first character was a low surrogate value,
-   *     {@link IllegalArgumentException} is thrown.
-   * </ol>
-   *
-   * @param seq the sequence of characters from which to decode the code point
-   * @param index the index of the first character to decode
-   * @param end the index beyond the last valid character to decode
-   * @return the Unicode code point for the given index or the negated value of
-   *         the trailing high surrogate character at the end of the sequence
-   */
-  protected static final int codePointAt(CharSequence seq, int index, int end) {
-    if (index < end) {
-      char c1 = seq.charAt(index++);
-      if (c1 < Character.MIN_HIGH_SURROGATE ||
-          c1 > Character.MAX_LOW_SURROGATE) {
-        // Fast path (first test is probably all we need to do)
-        return c1;
-      } else if (c1 <= Character.MAX_HIGH_SURROGATE) {
-        // If the high surrogate was the last character, return its inverse
-        if (index == end) {
-          return -c1;
-        }
-        // Otherwise look for the low surrogate following it
-        char c2 = seq.charAt(index);
-        if (Character.isLowSurrogate(c2)) {
-          return Character.toCodePoint(c1, c2);
-        }
-        throw new IllegalArgumentException(
-            "Expected low surrogate but got char '" + c2 +
-            "' with value " + (int) c2 + " at index " + index);
-      } else {
-        throw new IllegalArgumentException(
-            "Unexpected low surrogate character '" + c1 +
-            "' with value " + (int) c1 + " at index " + (index - 1));
-      }
-    }
-    throw new IndexOutOfBoundsException("Index exceeds specified range");
-  }
-
-  /**
-   * Helper method to grow the character buffer as needed, this only happens
-   * once in a while so it's ok if it's in a method call.  If the index passed
-   * in is 0 then no copying will be done.
-   */
-  private static final char[] growBuffer(char[] dest, int index, int size) {
-    char[] copy = new char[size];
-    if (index > 0) {
-      System.arraycopy(dest, 0, copy, 0, index);
-    }
-    return copy;
-  }
-}
\ No newline at end of file
diff --git a/src/com/android/mail/lib/base/X.java b/src/com/android/mail/lib/base/X.java
deleted file mode 100644
index 62bf032..0000000
--- a/src/com/android/mail/lib/base/X.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (C) 2000 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mail.lib.base;
-
-/**
- * A utility class that contains some very widely used functionality.
- * This class is named "X" just to get a short name that can be typed
- * everywhere without cluttering up the code.  For example, it
- * seems a lot less verbose to say: "X.assertTrue(empty())" instead of
- * "Assert.assertTrue(empty())".
- *
- * <p>Consider using {@link Preconditions} instead though.
- *
- * <p>If your application is using JDK 1.4, feel free to use the built-in
- * assert() methods instead. <b>NOTE:</b> Except remember that JDK assertions
- * are not normally enabled unless you pass the -ea flag to the jvm.
- */
-public final class X {
-
-  /**
-   * This class should not be instantiated. It provides static methods
-   * only.
-   */
-  private X() {}
-
-  /**
-   * Raise a runtime exception if the supplied argument is false (note: if you
-   * are checking a precondition, please use {@link Preconditions} instead).
-   */
-  public static void assertTrue(boolean b) {
-    if (!b)
-      throw new RuntimeException("Assertion failed");
-  }
-
-  /**
-   * Raise a runtime exception if the supplied argument is false and print
-   * out the error message (note: if you are checking a precondition, please use
-   * {@link Preconditions} instead).
-   */
-  public static void assertTrue(boolean b, String msg) {
-    if (!b)
-      throw new RuntimeException("Assertion failed: " + msg);
-  }
-}
\ No newline at end of file
diff --git a/src/com/android/mail/lib/html/parser/HTML.java b/src/com/android/mail/lib/html/parser/HTML.java
deleted file mode 100644
index 0ed05f7..0000000
--- a/src/com/android/mail/lib/html/parser/HTML.java
+++ /dev/null
@@ -1,237 +0,0 @@
-/**
- * Copyright (c) 2004, Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.mail.lib.html.parser;
-
-import com.android.mail.lib.base.Preconditions;
-
-import java.util.Set;
-
-/**
- * HTML class defines Element and Attribute classes.
- *
- * @author jlim@google.com (Jing Yee Lim)
- */
-public final class HTML {
-
-  /**
-   * Html element
-   */
-  public static final class Element {
-
-    // TODO(ptucker) other candidate types are list and form elements. Better for this to be
-    // enumerated type.
-    /** Types */
-    public static final int NO_TYPE = 0;
-    public static final int TABLE_TYPE = 1;
-
-    /**
-     * INLINE - charater level elements and text strings
-     * BLOCK  - block-like elements; e.g., paragraphs and lists
-     * NONE   - everything else
-     */
-    public enum Flow {
-      INLINE,
-      BLOCK,
-      NONE
-    }
-
-    private final String name;
-    private final int type;
-    private final boolean empty;
-    private final boolean optionalEndTag;
-    private final boolean breaksFlow;
-    private final Flow flow;
-
-    /**
-     * Construct an Element.
-     *
-     * NOTE: Even though breaksFlow and flow are named similarly, they're not quite the same thing.
-     * Flow refers to whether the element is inherently character or block level. Breaks flow
-     * refers to whether it forces a line break.
-     *
-     * @throws IllegalArgumentException if name or flow is null.
-     */
-    public Element(String name, int type, boolean empty,
-                   boolean optionalEndTag, boolean breaksFlow, Flow flow) {
-      Preconditions.checkNotNull(name, "Element name can not be null");
-      Preconditions.checkNotNull(flow, "Element flow can not be null");
-      this.name = name;
-      this.type = type;
-      this.empty = empty;
-      this.optionalEndTag = optionalEndTag;
-      this.breaksFlow = breaksFlow;
-      this.flow = flow;
-    }
-
-    /**
-     * Construct an Element with inline=true.
-     */
-    public Element(String name, int type, boolean empty,
-                   boolean optionalEndTag, boolean breaksFlow) {
-      this(name, type, empty, optionalEndTag, breaksFlow, Flow.NONE);
-    }
-
-    /** Name of the element, in lowercase, e.g. "a", "br" */
-    public String getName() {
-      return name;
-    }
-
-    /** Type, e.g. TABLE_TYPE */
-    public int getType() {
-      return type;
-    }
-
-    /** True if it's empty, has no inner elements or end tag */
-    public boolean isEmpty() {
-      return empty;
-    }
-
-    /** True if the end tag is optional */
-    public boolean isEndTagOptional() {
-      return optionalEndTag;
-    }
-
-    /**
-     * True if it breaks the flow, and may force a new line before/after the
-     * tag.
-     */
-    public boolean breaksFlow() {
-      return breaksFlow;
-    }
-
-    /** Flow type. */
-    public Flow getFlow() {
-      return flow;
-    }
-
-    /**
-     * @return just name, not proper HTML
-     */
-    @Override
-    public String toString() {
-      return name;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-      if (o == this) {
-        return true;
-      }
-      if (o instanceof HTML.Element) {
-        HTML.Element that = (HTML.Element) o;
-        return this.name.equals(that.name);
-      }
-      return false;
-    }
-
-    @Override
-    public int hashCode() {
-      return this.name.hashCode();
-    }
-  }
-
-  /**
-   * Html attribute
-   */
-  public static final class Attribute {
-    /** Value types */
-    public static final int NO_TYPE = 0;
-    public static final int URI_TYPE = 1;
-    public static final int SCRIPT_TYPE = 2;
-    public static final int ENUM_TYPE = 3;
-    public static final int BOOLEAN_TYPE = 4;
-
-    /** Name of the element, e.g. "HREF" */
-    private final String name;
-
-    /** Type of the attribute value, e.g. URI_TYPE */
-    private final int type;
-
-    /** The list of allowed values, or null if any value is allowed */
-    private final Set<String> values;
-
-    /**
-     * Construct an Attribute
-     * @throws IllegalArgumentException if name is null
-     */
-    public Attribute(String name, int type) {
-      this(name, type, null);
-    }
-
-    /**
-     * Construct an Attribute
-     * @throws IllegalArgumentException if name is null
-     * or if Attribute is of type ENUM_TYPE and the values are null
-     */
-    public Attribute(String name, int type, Set<String> values) {
-      Preconditions.checkNotNull(name, "Attribute name can not be null");
-      Preconditions.checkArgument((values == null) ^ (type == ENUM_TYPE),
-          "Only ENUM_TYPE can have values != null");
-      this.name = name;
-      this.type = type;
-      this.values = values;
-    }
-
-    /** Gets the name of the attribute, in lowercase */
-    public String getName() {
-      return name;
-    }
-
-    /** Gets the type, e.g. URI_TYPE */
-    public int getType() {
-      return type;
-    }
-
-    /**
-     * When called on an attribute of ENUM_TYPE, returns a Set of Strings
-     * containing the allowed attribute values. The return set is guaranteed to
-     * only contain lower case Strings.
-     *
-     * @return a Set of Strings, in lower case, for the allowed attribute
-     *         values.
-     * @throws IllegalStateException if attribute type is not ENUM_TYPE
-     */
-    public Set<String> getEnumValues() {
-      Preconditions.checkState(type == ENUM_TYPE);
-      return values;
-    }
-
-    /**
-     * @return Element name (name only, not proper HTML).
-     */
-    @Override
-    public String toString() {
-      return name;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-      if (o == this) {
-        return true;
-      }
-      if (o instanceof HTML.Attribute) {
-        HTML.Attribute that = (HTML.Attribute) o;
-        return this.name.equals(that.name);
-      }
-      return false;
-    }
-
-    @Override
-    public int hashCode() {
-      return this.name.hashCode();
-    }
-  }
-}
\ No newline at end of file
diff --git a/src/com/android/mail/lib/html/parser/HTML4.java b/src/com/android/mail/lib/html/parser/HTML4.java
deleted file mode 100644
index 9101fa2..0000000
--- a/src/com/android/mail/lib/html/parser/HTML4.java
+++ /dev/null
@@ -1,399 +0,0 @@
-/**
- * Copyright (c) 2004, Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.mail.lib.html.parser;
-
-import com.google.common.collect.Maps;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * HTML4 contains HTML 4.0 definitions and specifications
- * See http://www.w3.org/TR/html401/
- * See http://www.w3.org/TR/html401/index/elements.html
- * See http://www.w3.org/TR/html401/index/attributes.html
- *
- * @author jlim@google.com (Jing Yee Lim)
- */
-public final class HTML4 {
-
-  /** Map of all elements */
-  private static final HashMap<String,HTML.Element> elements = Maps.newHashMap();
-
-  /** Map of all attributes */
-  private static final HashMap<String,HTML.Attribute> attributes = Maps.newHashMap();
-
-  /** Default Whitelist */
-  private static final HtmlWhitelist defaultWhitelist = new HtmlWhitelist() {
-    /**
-     * @see com.google.common.html.parser.HtmlWhitelist#lookupElement(String)
-     */
-    public HTML.Element lookupElement(String name) {
-      return HTML4.lookupElement(name);
-    }
-
-    /**
-     * @see com.google.common.html.parser.HtmlWhitelist#lookupAttribute(String)
-     */
-    public HTML.Attribute lookupAttribute(String name) {
-      return HTML4.lookupAttribute(name);
-    }
-  };
-
-  /** Gets the default Whitelist */
-  public static HtmlWhitelist getWhitelist() {
-    return HTML4.defaultWhitelist;
-  }
-
-  /** Looks for a HTML4 element */
-  public static HTML.Element lookupElement(String name) {
-    return elements.get(name.toLowerCase());
-  }
-
-  /** Looks for a HTML4 attribute */
-  public static HTML.Attribute lookupAttribute(String name) {
-    return attributes.get(name.toLowerCase());
-  }
-
-  /**
-   * @return Unmodifiable Map of all valid HTML4 elements.  Key is lowercase
-   * element name.
-   */
-  public static Map<String, HTML.Element> getAllElements() {
-    return Collections.unmodifiableMap(elements);
-  }
-
-  /**
-   * @return Unmodifiable Map of all valid HTML4 attributes.  Key is lowercase
-   * attribute name.
-   */
-  public static Map<String, HTML.Attribute> getAllAttributes() {
-    return Collections.unmodifiableMap(attributes);
-  }
-
-  /** Creates and adds a element to the map */
-  private static HTML.Element addElement(String tag, String flags) {
-    return addElement(tag, flags, HTML.Element.Flow.NONE);
-  }
-
-  /** Creates and adds a element to the map */
-  private static HTML.Element addElement(String tag, String flags, HTML.Element.Flow flow) {
-    return addElement(tag, flags, flow, HTML.Element.NO_TYPE);
-  }
-
-  /** Creates and adds a element to the map */
-  private static HTML.Element addTableElement(String tag, String flags, HTML.Element.Flow flow) {
-    return addElement(tag, flags, flow, HTML.Element.TABLE_TYPE);
-  }
-
-  /** Creates and adds a element to the map */
-  private static HTML.Element addElement(String tag, String flags, HTML.Element.Flow flow,
-      int type) {
-    tag = tag.toLowerCase();
-
-    boolean empty = false;
-    boolean optionalEndTag = false;
-    boolean breaksFlow = false;
-    for (int i = 0; i < flags.length(); i++) {
-      switch (flags.charAt(i)) {
-        case 'E': empty = true; break;
-        case 'O': optionalEndTag = true; break;
-        case 'B': breaksFlow = true; break;
-        default: throw new Error("Unknown element flag");
-      }
-    }
-    HTML.Element element = new HTML.Element(tag, type, empty, optionalEndTag, breaksFlow, flow);
-    elements.put(tag, element);
-    return element;
-  }
-
-  /** Creates and add an attribute to the map */
-  private static HTML.Attribute addAttribute(String attribute) {
-    return addAttribute(attribute, HTML.Attribute.NO_TYPE);
-  }
-
-  private static HTML.Attribute addAttribute(String attribute, int type) {
-    return addAttribute(attribute, type, null);
-  }
-
-  private static HTML.Attribute addAttribute(String attribute,
-                                             int type,
-                                             String[] values) {
-    attribute = attribute.toLowerCase();
-    Set<String> valueSet = null;
-    if (values != null) {
-      valueSet = new HashSet<String>();
-      for (String x : values) {
-        valueSet.add(x.toLowerCase());
-      }
-      valueSet = Collections.unmodifiableSet(valueSet);
-    }
-    HTML.Attribute attr = new HTML.Attribute(attribute, type, valueSet);
-    attributes.put(attribute, attr);
-    return attr;
-  }
-
-  /**
-   * All HTML4 elements.
-   *
-   * Block vs inline flow:
-   * http://www.w3.org/TR/REC-html40/sgml/dtd.html#block
-   * http://www.w3.org/TR/REC-html40/sgml/dtd.html#inline
-   * Some deprecated elements aren't listed there so we make an educated guess:
-   * - CENTER is equivalent to DIV align=center, so we make it BLOCK.
-   * - S, STRIKE and FONT are clearly inline like U, I, etc.
-   * - MENU and DIR are like OL and UL, so we make them block.
-   *
-   * Optional end tag and empty:
-   * http://www.w3.org/TR/REC-html40/index/elements.html
-   */
-  public static final HTML.Element
-    A_ELEMENT          = addElement("A", "", HTML.Element.Flow.INLINE),
-    ABBR_ELEMENT       = addElement("ABBR", "", HTML.Element.Flow.INLINE),
-    ACRONYM_ELEMENT    = addElement("ACRONYM", "", HTML.Element.Flow.INLINE),
-    ADDRESS_ELEMENT    = addElement("ADDRESS", "", HTML.Element.Flow.BLOCK),
-    APPLET_ELEMENT     = addElement("APPLET", ""),
-    AREA_ELEMENT       = addElement("AREA", "E"),
-    B_ELEMENT          = addElement("B", "", HTML.Element.Flow.INLINE),
-    BASE_ELEMENT       = addElement("BASE", "E"),
-    BASEFONT_ELEMENT   = addElement("BASEFONT", "E"),
-    BDO_ELEMENT        = addElement("BDO", "", HTML.Element.Flow.INLINE),
-    BIG_ELEMENT        = addElement("BIG", "", HTML.Element.Flow.INLINE),
-    BLOCKQUOTE_ELEMENT = addElement("BLOCKQUOTE", "B", HTML.Element.Flow.BLOCK),
-    BODY_ELEMENT       = addElement("BODY", "O"),
-    BR_ELEMENT         = addElement("BR", "EB", HTML.Element.Flow.INLINE),
-    BUTTON_ELEMENT     = addElement("BUTTON", "", HTML.Element.Flow.INLINE),
-    CAPTION_ELEMENT    = addTableElement("CAPTION", "", HTML.Element.Flow.NONE),
-    CENTER_ELEMENT     = addElement("CENTER", "B", HTML.Element.Flow.BLOCK),
-    CITE_ELEMENT       = addElement("CITE", "", HTML.Element.Flow.INLINE),
-    CODE_ELEMENT       = addElement("CODE", "", HTML.Element.Flow.INLINE),
-    COL_ELEMENT        = addTableElement("COL", "E", HTML.Element.Flow.NONE),
-    COLGROUP_ELEMENT   = addTableElement("COLGROUP", "O", HTML.Element.Flow.NONE),
-    DD_ELEMENT         = addElement("DD", "OB"),
-    DEL_ELEMENT        = addElement("DEL", ""),
-    DFN_ELEMENT        = addElement("DFN", "", HTML.Element.Flow.INLINE),
-    DIR_ELEMENT        = addElement("DIR", "B", HTML.Element.Flow.BLOCK),
-    DIV_ELEMENT        = addElement("DIV", "B", HTML.Element.Flow.BLOCK),
-    DL_ELEMENT         = addElement("DL", "B", HTML.Element.Flow.BLOCK),
-    DT_ELEMENT         = addElement("DT", "OB"),
-    EM_ELEMENT         = addElement("EM", "", HTML.Element.Flow.INLINE),
-    FIELDSET_ELEMENT   = addElement("FIELDSET", "", HTML.Element.Flow.BLOCK),
-    FONT_ELEMENT       = addElement("FONT", "", HTML.Element.Flow.INLINE),
-    FORM_ELEMENT       = addElement("FORM", "B", HTML.Element.Flow.BLOCK),
-    FRAME_ELEMENT      = addElement("FRAME", "E"),
-    FRAMESET_ELEMENT   = addElement("FRAMESET", ""),
-    H1_ELEMENT         = addElement("H1", "B", HTML.Element.Flow.BLOCK),
-    H2_ELEMENT         = addElement("H2", "B", HTML.Element.Flow.BLOCK),
-    H3_ELEMENT         = addElement("H3", "B", HTML.Element.Flow.BLOCK),
-    H4_ELEMENT         = addElement("H4", "B", HTML.Element.Flow.BLOCK),
-    H5_ELEMENT         = addElement("H5", "B", HTML.Element.Flow.BLOCK),
-    H6_ELEMENT         = addElement("H6", "B", HTML.Element.Flow.BLOCK),
-    HEAD_ELEMENT       = addElement("HEAD", "OB"),
-    HR_ELEMENT         = addElement("HR", "EB", HTML.Element.Flow.BLOCK),
-    HTML_ELEMENT       = addElement("HTML", "OB"),
-    I_ELEMENT          = addElement("I", "", HTML.Element.Flow.INLINE),
-    IFRAME_ELEMENT     = addElement("IFRAME", ""),
-    IMG_ELEMENT        = addElement("IMG", "E", HTML.Element.Flow.INLINE),
-    INPUT_ELEMENT      = addElement("INPUT", "E", HTML.Element.Flow.INLINE),
-    INS_ELEMENT        = addElement("INS", ""),
-    ISINDEX_ELEMENT    = addElement("ISINDEX", "EB"),
-    KBD_ELEMENT        = addElement("KBD", "", HTML.Element.Flow.INLINE),
-    LABEL_ELEMENT      = addElement("LABEL", "", HTML.Element.Flow.INLINE),
-    LEGEND_ELEMENT     = addElement("LEGEND", ""),
-    LI_ELEMENT         = addElement("LI", "OB"),
-    LINK_ELEMENT       = addElement("LINK", "E"),
-    MAP_ELEMENT        = addElement("MAP", "", HTML.Element.Flow.INLINE),
-    MENU_ELEMENT       = addElement("MENU", "B", HTML.Element.Flow.BLOCK),
-    META_ELEMENT       = addElement("META", "E"),
-    NOFRAMES_ELEMENT   = addElement("NOFRAMES", "B"),
-    NOSCRIPT_ELEMENT   = addElement("NOSCRIPT", "", HTML.Element.Flow.BLOCK),
-    OBJECT_ELEMENT     = addElement("OBJECT", "", HTML.Element.Flow.INLINE),
-    OL_ELEMENT         = addElement("OL", "B", HTML.Element.Flow.BLOCK),
-    OPTGROUP_ELEMENT   = addElement("OPTGROUP", ""),
-    OPTION_ELEMENT     = addElement("OPTION", "O"),
-    P_ELEMENT          = addElement("P", "OB", HTML.Element.Flow.BLOCK),
-    PARAM_ELEMENT      = addElement("PARAM", "E"),
-    PRE_ELEMENT        = addElement("PRE", "B", HTML.Element.Flow.BLOCK),
-    Q_ELEMENT          = addElement("Q", "", HTML.Element.Flow.INLINE),
-    S_ELEMENT          = addElement("S", "", HTML.Element.Flow.INLINE),
-    SAMP_ELEMENT       = addElement("SAMP", "", HTML.Element.Flow.INLINE),
-    SCRIPT_ELEMENT     = addElement("SCRIPT", "", HTML.Element.Flow.INLINE),
-    SELECT_ELEMENT     = addElement("SELECT", "", HTML.Element.Flow.INLINE),
-    SMALL_ELEMENT      = addElement("SMALL", "", HTML.Element.Flow.INLINE),
-    SPAN_ELEMENT       = addElement("SPAN", "", HTML.Element.Flow.INLINE),
-    STRIKE_ELEMENT     = addElement("STRIKE", "", HTML.Element.Flow.INLINE),
-    STRONG_ELEMENT     = addElement("STRONG", "", HTML.Element.Flow.INLINE),
-    STYLE_ELEMENT      = addElement("STYLE", ""),
-    SUB_ELEMENT        = addElement("SUB", "", HTML.Element.Flow.INLINE),
-    SUP_ELEMENT        = addElement("SUP", "", HTML.Element.Flow.INLINE),
-    TABLE_ELEMENT      = addTableElement("TABLE", "B", HTML.Element.Flow.BLOCK),
-    TBODY_ELEMENT      = addTableElement("TBODY", "O", HTML.Element.Flow.NONE),
-    TD_ELEMENT         = addTableElement("TD", "OB", HTML.Element.Flow.NONE),
-    TEXTAREA_ELEMENT   = addElement("TEXTAREA", "", HTML.Element.Flow.INLINE),
-    TFOOT_ELEMENT      = addTableElement("TFOOT", "O", HTML.Element.Flow.NONE),
-    TH_ELEMENT         = addTableElement("TH", "OB", HTML.Element.Flow.NONE),
-    THEAD_ELEMENT      = addTableElement("THEAD", "O", HTML.Element.Flow.NONE),
-    TITLE_ELEMENT      = addElement("TITLE", "B"),
-    TR_ELEMENT         = addTableElement("TR", "OB", HTML.Element.Flow.NONE),
-    TT_ELEMENT         = addElement("TT", "", HTML.Element.Flow.INLINE),
-    U_ELEMENT          = addElement("U", "", HTML.Element.Flow.INLINE),
-    UL_ELEMENT         = addElement("UL", "B", HTML.Element.Flow.BLOCK),
-    VAR_ELEMENT        = addElement("VAR", "", HTML.Element.Flow.INLINE);
-
-  /**
-   * All the HTML4 attributes
-   */
-  public static final HTML.Attribute
-    ABBR_ATTRIBUTE           = addAttribute("ABBR"),
-    ACCEPT_ATTRIBUTE         = addAttribute("ACCEPT"),
-    ACCEPT_CHARSET_ATTRIBUTE = addAttribute("ACCEPT-CHARSET"),
-    ACCESSKEY_ATTRIBUTE      = addAttribute("ACCESSKEY"),
-    ACTION_ATTRIBUTE         = addAttribute("ACTION", HTML.Attribute.URI_TYPE),
-    ALIGN_ATTRIBUTE          = addAttribute("ALIGN",
-        HTML.Attribute.ENUM_TYPE,
-        new String[] {"left", "center", "right", "justify",
-            "char", "top", "bottom", "middle"}),
-    ALINK_ATTRIBUTE          = addAttribute("ALINK"),
-    ALT_ATTRIBUTE            = addAttribute("ALT"),
-    ARCHIVE_ATTRIBUTE        = addAttribute("ARCHIVE", HTML.Attribute.URI_TYPE),
-    AXIS_ATTRIBUTE           = addAttribute("AXIS"),
-    BACKGROUND_ATTRIBUTE     = addAttribute("BACKGROUND", HTML.Attribute.URI_TYPE),
-    BGCOLOR_ATTRIBUTE        = addAttribute("BGCOLOR"),
-    BORDER_ATTRIBUTE         = addAttribute("BORDER"),
-    CELLPADDING_ATTRIBUTE    = addAttribute("CELLPADDING"),
-    CELLSPACING_ATTRIBUTE    = addAttribute("CELLSPACING"),
-    CHAR_ATTRIBUTE           = addAttribute("CHAR"),
-    CHAROFF_ATTRIBUTE        = addAttribute("CHAROFF"),
-    CHARSET_ATTRIBUTE        = addAttribute("CHARSET"),
-    CHECKED_ATTRIBUTE        = addAttribute("CHECKED", HTML.Attribute.BOOLEAN_TYPE),
-    CITE_ATTRIBUTE           = addAttribute("CITE", HTML.Attribute.URI_TYPE),
-    CLASS_ATTRIBUTE          = addAttribute("CLASS"),
-    CLASSID_ATTRIBUTE        = addAttribute("CLASSID", HTML.Attribute.URI_TYPE),
-    CLEAR_ATTRIBUTE          = addAttribute("CLEAR",
-        HTML.Attribute.ENUM_TYPE,
-        new String[] {"left", "all", "right", "none"}),
-    CODE_ATTRIBUTE           = addAttribute("CODE"),
-    CODEBASE_ATTRIBUTE       = addAttribute("CODEBASE", HTML.Attribute.URI_TYPE),
-    CODETYPE_ATTRIBUTE       = addAttribute("CODETYPE"),
-    COLOR_ATTRIBUTE          = addAttribute("COLOR"),
-    COLS_ATTRIBUTE           = addAttribute("COLS"),
-    COLSPAN_ATTRIBUTE        = addAttribute("COLSPAN"),
-    COMPACT_ATTRIBUTE        = addAttribute("COMPACT", HTML.Attribute.BOOLEAN_TYPE),
-    CONTENT_ATTRIBUTE        = addAttribute("CONTENT"),
-    COORDS_ATTRIBUTE         = addAttribute("COORDS"),
-    DATA_ATTRIBUTE           = addAttribute("DATA", HTML.Attribute.URI_TYPE),
-    DATETIME_ATTRIBUTE       = addAttribute("DATETIME"),
-    DECLARE_ATTRIBUTE        = addAttribute("DECLARE", HTML.Attribute.BOOLEAN_TYPE),
-    DEFER_ATTRIBUTE          = addAttribute("DEFER", HTML.Attribute.BOOLEAN_TYPE),
-    DIR_ATTRIBUTE            = addAttribute("DIR",
-        HTML.Attribute.ENUM_TYPE,
-        new String[] {"ltr", "rtl"}),
-    DISABLED_ATTRIBUTE       = addAttribute("DISABLED", HTML.Attribute.BOOLEAN_TYPE),
-    ENCTYPE_ATTRIBUTE        = addAttribute("ENCTYPE"),
-    FACE_ATTRIBUTE           = addAttribute("FACE"),
-    FOR_ATTRIBUTE            = addAttribute("FOR"),
-    FRAME_ATTRIBUTE          = addAttribute("FRAME"),
-    FRAMEBORDER_ATTRIBUTE    = addAttribute("FRAMEBORDER",
-        HTML.Attribute.ENUM_TYPE,
-        new String[] {"1", "0"}),
-    HEADERS_ATTRIBUTE        = addAttribute("HEADERS"),
-    HEIGHT_ATTRIBUTE         = addAttribute("HEIGHT"),
-    HREF_ATTRIBUTE           = addAttribute("HREF", HTML.Attribute.URI_TYPE),
-    HREFLANG_ATTRIBUTE       = addAttribute("HREFLANG"),
-    HSPACE_ATTRIBUTE         = addAttribute("HSPACE"),
-    HTTP_EQUIV_ATTRIBUTE     = addAttribute("HTTP-EQUIV"),
-    ID_ATTRIBUTE             = addAttribute("ID"),
-    ISMAP_ATTRIBUTE          = addAttribute("ISMAP", HTML.Attribute.BOOLEAN_TYPE),
-    LABEL_ATTRIBUTE          = addAttribute("LABEL"),
-    LANG_ATTRIBUTE           = addAttribute("LANG"),
-    LANGUAGE_ATTRIBUTE       = addAttribute("LANGUAGE"),
-    LINK_ATTRIBUTE           = addAttribute("LINK"),
-    LONGDESC_ATTRIBUTE       = addAttribute("LONGDESC", HTML.Attribute.URI_TYPE),
-    MARGINHEIGHT_ATTRIBUTE   = addAttribute("MARGINHEIGHT"),
-    MARGINWIDTH_ATTRIBUTE    = addAttribute("MARGINWIDTH"),
-    MAXLENGTH_ATTRIBUTE      = addAttribute("MAXLENGTH"),
-    MEDIA_ATTRIBUTE          = addAttribute("MEDIA"),
-    METHOD_ATTRIBUTE         = addAttribute("METHOD",
-        HTML.Attribute.ENUM_TYPE,
-        new String[] {"get", "post"}),
-    MULTIPLE_ATTRIBUTE       = addAttribute("MULTIPLE", HTML.Attribute.BOOLEAN_TYPE),
-    NAME_ATTRIBUTE           = addAttribute("NAME"),
-    NOHREF_ATTRIBUTE         = addAttribute("NOHREF", HTML.Attribute.BOOLEAN_TYPE),
-    NORESIZE_ATTRIBUTE       = addAttribute("NORESIZE", HTML.Attribute.BOOLEAN_TYPE),
-    NOSHADE_ATTRIBUTE        = addAttribute("NOSHADE", HTML.Attribute.BOOLEAN_TYPE),
-    NOWRAP_ATTRIBUTE         = addAttribute("NOWRAP", HTML.Attribute.BOOLEAN_TYPE),
-    OBJECT_ATTRIBUTE         = addAttribute("OBJECT"),
-    ONBLUR_ATTRIBUTE         = addAttribute("ONBLUR", HTML.Attribute.SCRIPT_TYPE),
-    ONCHANGE_ATTRIBUTE       = addAttribute("ONCHANGE", HTML.Attribute.SCRIPT_TYPE),
-    ONCLICK_ATTRIBUTE        = addAttribute("ONCLICK", HTML.Attribute.SCRIPT_TYPE),
-    ONDBLCLICK_ATTRIBUTE     = addAttribute("ONDBLCLICK", HTML.Attribute.SCRIPT_TYPE),
-    ONFOCUS_ATTRIBUTE        = addAttribute("ONFOCUS", HTML.Attribute.SCRIPT_TYPE),
-    ONKEYDOWN_ATTRIBUTE      = addAttribute("ONKEYDOWN", HTML.Attribute.SCRIPT_TYPE),
-    ONKEYPRESS_ATTRIBUTE     = addAttribute("ONKEYPRESS", HTML.Attribute.SCRIPT_TYPE),
-    ONKEYUP_ATTRIBUTE        = addAttribute("ONKEYUP", HTML.Attribute.SCRIPT_TYPE),
-    ONLOAD_ATTRIBUTE         = addAttribute("ONLOAD", HTML.Attribute.SCRIPT_TYPE),
-    ONMOUSEDOWN_ATTRIBUTE    = addAttribute("ONMOUSEDOWN", HTML.Attribute.SCRIPT_TYPE),
-    ONMOUSEMOVE_ATTRIBUTE    = addAttribute("ONMOUSEMOVE", HTML.Attribute.SCRIPT_TYPE),
-    ONMOUSEOUT_ATTRIBUTE     = addAttribute("ONMOUSEOUT", HTML.Attribute.SCRIPT_TYPE),
-    ONMOUSEOVER_ATTRIBUTE    = addAttribute("ONMOUSEOVER", HTML.Attribute.SCRIPT_TYPE),
-    ONMOUSEUP_ATTRIBUTE      = addAttribute("ONMOUSEUP", HTML.Attribute.SCRIPT_TYPE),
-    ONRESET_ATTRIBUTE        = addAttribute("ONRESET", HTML.Attribute.SCRIPT_TYPE),
-    ONSELECT_ATTRIBUTE       = addAttribute("ONSELECT", HTML.Attribute.SCRIPT_TYPE),
-    ONSUBMIT_ATTRIBUTE       = addAttribute("ONSUBMIT", HTML.Attribute.SCRIPT_TYPE),
-    ONUNLOAD_ATTRIBUTE       = addAttribute("ONUNLOAD", HTML.Attribute.SCRIPT_TYPE),
-    PROFILE_ATTRIBUTE        = addAttribute("PROFILE", HTML.Attribute.URI_TYPE),
-    PROMPT_ATTRIBUTE         = addAttribute("PROMPT"),
-    READONLY_ATTRIBUTE       = addAttribute("READONLY", HTML.Attribute.BOOLEAN_TYPE),
-    REL_ATTRIBUTE            = addAttribute("REL"),
-    REV_ATTRIBUTE            = addAttribute("REV"),
-    ROWS_ATTRIBUTE           = addAttribute("ROWS"),
-    ROWSPAN_ATTRIBUTE        = addAttribute("ROWSPAN"),
-    RULES_ATTRIBUTE          = addAttribute("RULES"),
-    SCHEME_ATTRIBUTE         = addAttribute("SCHEME"),
-    SCOPE_ATTRIBUTE          = addAttribute("SCOPE"),
-    SCROLLING_ATTRIBUTE      = addAttribute("SCROLLING",
-        HTML.Attribute.ENUM_TYPE,
-        new String[] {"yes", "no", "auto"}),
-    SELECTED_ATTRIBUTE       = addAttribute("SELECTED", HTML.Attribute.BOOLEAN_TYPE),
-    SHAPE_ATTRIBUTE          = addAttribute("SHAPE"),
-    SIZE_ATTRIBUTE           = addAttribute("SIZE"),
-    SPAN_ATTRIBUTE           = addAttribute("SPAN"),
-    SRC_ATTRIBUTE            = addAttribute("SRC", HTML.Attribute.URI_TYPE),
-    STANDBY_ATTRIBUTE        = addAttribute("STANDBY"),
-    START_ATTRIBUTE          = addAttribute("START"),
-    STYLE_ATTRIBUTE          = addAttribute("STYLE"),
-    SUMMARY_ATTRIBUTE        = addAttribute("SUMMARY"),
-    TABINDEX_ATTRIBUTE       = addAttribute("TABINDEX"),
-    TARGET_ATTRIBUTE         = addAttribute("TARGET"),
-    TEXT_ATTRIBUTE           = addAttribute("TEXT"),
-    TITLE_ATTRIBUTE          = addAttribute("TITLE"),
-    TYPE_ATTRIBUTE           = addAttribute("TYPE"),
-    USEMAP_ATTRIBUTE         = addAttribute("USEMAP", HTML.Attribute.URI_TYPE),
-    VALIGN_ATTRIBUTE         = addAttribute("VALIGN",
-        HTML.Attribute.ENUM_TYPE,
-        new String[] {"top", "middle", "bottom", "baseline"}),
-    VALUE_ATTRIBUTE          = addAttribute("VALUE"),
-    VALUETYPE_ATTRIBUTE      = addAttribute("VALUETYPE",
-        HTML.Attribute.ENUM_TYPE,
-        new String[] {"data", "ref", "object"}),
-    VERSION_ATTRIBUTE        = addAttribute("VERSION"),
-    VLINK_ATTRIBUTE          = addAttribute("VLINK"),
-    VSPACE_ATTRIBUTE         = addAttribute("VSPACE"),
-    WIDTH_ATTRIBUTE          = addAttribute("WIDTH");
-}
\ No newline at end of file
diff --git a/src/com/android/mail/lib/html/parser/HtmlDocument.java b/src/com/android/mail/lib/html/parser/HtmlDocument.java
deleted file mode 100644
index 09a6bbc..0000000
--- a/src/com/android/mail/lib/html/parser/HtmlDocument.java
+++ /dev/null
@@ -1,1272 +0,0 @@
-/**
- * Copyright (c) 2004, Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.mail.lib.html.parser;
-
-import com.android.mail.lib.base.CharEscapers;
-import com.android.mail.lib.base.CharMatcher;
-import com.android.mail.lib.base.StringUtil;
-import com.android.mail.lib.base.X;
-import com.google.common.collect.Lists;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-
-/**
- * HtmlDocument is a container for a list of html nodes, and represents the
- * entire html document. It contains toHTML() method which prints out the html
- * text, toXHTML for printing out XHTML text and toString() which prints out in
- * debug format.
- *
- * @author jlim@google.com (Jing Yee Lim)
- */
-public class HtmlDocument {
-  /** List of Node objects */
-  private final List<Node> nodes;
-
-  /**
-   * Creates a Html document.
-   * @param nodes list of html nodes
-   */
-  public HtmlDocument(List<Node> nodes) {
-    this.nodes = nodes;
-  }
-
-  /** Gets the list of nodes */
-  public List<Node> getNodes() {
-    return nodes;
-  }
-
-  /** Returns a HTML string for the current document */
-  public String toHTML() {
-    StringBuilder sb = new StringBuilder(nodes.size() * 10);
-    for (Node n : nodes) {
-      n.toHTML(sb);
-    }
-    return sb.toString();
-  }
-
-  /** Returns a XHTML string for the current document */
-  public String toXHTML() {
-    StringBuilder sb = new StringBuilder(nodes.size() * 10);
-    for (Node n : nodes) {
-      n.toXHTML(sb);
-    }
-    return sb.toString();
-  }
-
-  /**
-   * Returns, as much as possible, original content of preparsed nodes.  This
-   * is only different from toHTML() if the nodes were created with original
-   * content, e.g., by HtmlParser in preserve mode.
-   */
-  public String toOriginalHTML() {
-    StringBuilder sb = new StringBuilder(nodes.size() * 10);
-    for (Node n : nodes) {
-      n.toOriginalHTML(sb);
-    }
-    return sb.toString();
-  }
-
-  /** Returns the HTML document in debug format */
-  @Override
-  public String toString() {
-    StringWriter strWriter = new StringWriter();
-    accept(new DebugPrinter(new PrintWriter(strWriter)));
-    return strWriter.toString();
-  }
-
-  /**
-   * Creates start Tag Node.
-   * @see HtmlDocument#createTag(HTML.Element, List, String, String)
-   */
-  public static Tag createTag(HTML.Element element, List<TagAttribute> attributes) {
-    return createTag(element, attributes, null, null);
-  }
-
-  /**
-   * Creates start Tag Node.
-   * @see HtmlDocument.Tag#Tag(HTML.Element, List, boolean, String, String)
-   */
-  public static Tag createTag(HTML.Element element,
-      List<TagAttribute> attributes, String originalHtmlBeforeAttributes,
-      String originalHtmlAfterAttributes) {
-    return new Tag(element, attributes, false, originalHtmlBeforeAttributes,
-        originalHtmlAfterAttributes);
-  }
-
-  /**
-   * Creates self-terminating Tag Node.
-   * @see HtmlDocument#createSelfTerminatingTag(HTML.Element, List, String, String)
-   */
-  public static Tag createSelfTerminatingTag(HTML.Element element,
-      List<TagAttribute> attributes) {
-    return createSelfTerminatingTag(element, attributes, null, null);
-  }
-
-  /**
-   * Creates self-terminating Tag Node.
-   * @see HtmlDocument#createTag(HTML.Element, List, String, String)
-   */
-  public static Tag createSelfTerminatingTag(HTML.Element element,
-      List<TagAttribute> attributes, String originalHtmlBeforeAttributes,
-      String originalHtmlAfterAttributes) {
-    return new Tag(element, attributes, true, originalHtmlBeforeAttributes,
-        originalHtmlAfterAttributes);
-  }
-
-  /**
-   * @see HtmlDocument#createEndTag(HTML.Element, String)
-   */
-  public static EndTag createEndTag(HTML.Element element) {
-    return createEndTag(element, null);
-  }
-
-  /**
-   * @see HtmlDocument.EndTag#EndTag(HTML.Element, String)
-   */
-  public static EndTag createEndTag(HTML.Element element, String originalHtml) {
-    return new EndTag(element, originalHtml);
-  }
-
-  /**
-   * @see HtmlDocument#createTagAttribute(HTML.Attribute, String, String)
-   */
-  public static TagAttribute createTagAttribute(HTML.Attribute attr, String value) {
-    return createTagAttribute(attr, value, null);
-  }
-
-  /**
-   * @see HtmlDocument.TagAttribute#TagAttribute(HTML.Attribute, String, String)
-   */
-  public static TagAttribute createTagAttribute(HTML.Attribute attr,
-      String value, String originalHtml) {
-    X.assertTrue(attr != null);
-    return new TagAttribute(attr, value, originalHtml);
-  }
-
-  /**
-   * @see HtmlDocument#createText(String, String)
-   */
-  public static Text createText(String text) {
-    return createText(text, null);
-  }
-
-  /**
-   * Creates a Text node.
-   * @see UnescapedText#UnescapedText(String, String)
-   */
-  public static Text createText(String text, String original) {
-    return new UnescapedText(text, original);
-  }
-
-  /**
-   * Creates a Text node where the content hasn't been unescaped yet (this will
-   * be done lazily).
-   */
-  public static Text createEscapedText(String htmlText, String original) {
-    return new EscapedText(htmlText, original);
-  }
-
-  /**
-   * Creates an Comment node.
-   * @see Comment#Comment(String)
-   */
-  public static Comment createHtmlComment(String content) {
-    return new Comment(content);
-  }
-
-  /**
-   * Creates a CDATA node.
-   * @see CDATA#CDATA(String)
-   */
-  public static CDATA createCDATA(String text) {
-    return new CDATA(text);
-  }
-
-  /** Accepts a Visitor */
-  public void accept(Visitor v) {
-    v.start();
-    for (Node node : nodes) {
-      node.accept(v);
-    }
-    v.finish();
-  }
-
-  /**
-   * @param filter results of this filter replace the existing nodes
-   * @return new document with filtered nodes
-   */
-  public HtmlDocument filter(MultiplexFilter filter) {
-    filter.start();
-    List<Node> newNodes = new ArrayList<Node>();
-    for (Node node : nodes) {
-      filter.filter(node, newNodes);
-    }
-    filter.finish(newNodes);
-    return new HtmlDocument(newNodes);
-  }
-
-  /**
-   * Html node
-   */
-  public static abstract class Node {
-
-    /** Accepts a visitor */
-    public abstract void accept(Visitor visitor);
-
-    /** Converts to HTML */
-    public String toHTML() {
-      StringBuilder sb = new StringBuilder();
-      toHTML(sb);
-      return sb.toString();
-    }
-
-    /** Converts to HTML */
-    public abstract void toHTML(StringBuilder sb);
-
-    /** Converts to XHTML */
-    public String toXHTML() {
-      StringBuilder sb = new StringBuilder();
-      toXHTML(sb);
-      return sb.toString();
-    }
-
-    /** Converts to XHTML */
-    public abstract void toXHTML(StringBuilder sb);
-
-    /**
-     * @return Original if it's available; otherwise, returns
-     * <code>toHTML()</code>
-     */
-    public String toOriginalHTML() {
-      StringBuilder sb = new StringBuilder();
-      toOriginalHTML(sb);
-      return sb.toString();
-    }
-
-    /**
-     * @param sb Destination of HTML to be appended.  Appends original if it's
-     * available; otherwise, appends <code>toHTML()</code>
-     */
-    public abstract void toOriginalHTML(StringBuilder sb);
-  }
-
-  /**
-   * HTML comment node.
-   */
-  public static class Comment extends Node {
-
-    private final String content;
-
-    /**
-     * @param content Raw comment, including "&lt;!--" and "--&gt;".
-     */
-    public Comment(String content) {
-      this.content = content;
-    }
-
-    @Override
-    public void accept(Visitor visitor) {
-      visitor.visitComment(this);
-    }
-
-    /**
-     * Emit original unchanged.
-     * @param sb Destination of result.
-     */
-    @Override
-    public void toHTML(StringBuilder sb) {
-      sb.append(content);
-    }
-
-    /**
-     * Emit original unchanged.
-     * @param sb Destination of result.
-     */
-    @Override
-    public void toXHTML(StringBuilder sb) {
-      sb.append(content);
-    }
-
-    /**
-     * Emit original unchanged.
-     * @param sb Destination of result.
-     */
-    @Override
-    public void toOriginalHTML(StringBuilder sb) {
-      sb.append(content);
-    }
-
-    /**
-     * @return Original unchanged.
-     */
-    public String getContent() {
-      return content;
-    }
-  }
-
-  /**
-   * Text node
-   */
-  public static abstract class Text extends Node {
-
-    /**
-     * unaltered original content of this node
-     */
-    private final String originalHtml;
-
-    /**
-     * content of this node in HTML format
-     */
-    private String html;
-
-    /**
-     * @param originalHtml Unaltered original HTML. If not null,
-     *        toOriginalHTML() will return this.
-     */
-    protected Text(String originalHtml) {
-      this.originalHtml = originalHtml;
-    }
-
-    /**
-     * Gets the plain, unescaped text.
-     */
-    abstract public String getText();
-
-    // Returns true if it contains only white space
-    public boolean isWhitespace() {
-      String text = getText();
-      int len = text.length();
-      for (int i = 0; i < len; i++) {
-        if (!Character.isWhitespace(text.charAt(i))) {
-          return false;
-        }
-      }
-      return true;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-      if (o == this) {
-        return true;
-      }
-      if (o instanceof Text) {
-        Text that = (Text) o;
-
-        return this.originalHtml == null ? that.originalHtml == null
-            : this.originalHtml.equals(that.originalHtml);
-      }
-      return false;
-    }
-
-    @Override
-    public int hashCode() {
-      return originalHtml == null ? 0 : originalHtml.hashCode();
-    }
-
-    @Override
-    public String toString() {
-      return getText();
-    }
-
-    /** Extends Node.accept */
-    @Override
-    public void accept(Visitor visitor) {
-      visitor.visitText(this);
-    }
-
-    /**
-     * Gets the HTML, with HTML entities escaped.
-     */
-    @Override
-    public void toHTML(StringBuilder sb) {
-      if (html == null) {
-        html = CharEscapers.asciiHtmlEscaper().escape(getText());
-      }
-      sb.append(html);
-    }
-
-    /**
-     * @see HtmlDocument.Text#toHTML(StringBuilder)
-     */
-    @Override
-    public void toXHTML(StringBuilder sb) {
-      toHTML(sb);
-    }
-
-    /**
-     * @param sb Appends original HTML to this if available.  Otherwise,
-     * same as toHTML().
-     */
-    @Override
-    public void toOriginalHTML(StringBuilder sb) {
-      if (originalHtml != null) {
-        sb.append(originalHtml);
-      } else {
-        toHTML(sb);
-      }
-    }
-
-    /**
-     * @return the original HTML (possibly with entities unescaped if the
-     * document was malformed). May be null if original HTML was not preserved
-     * (see constructor argument of {@link HtmlParser})
-     */
-    public String getOriginalHTML() {
-      return originalHtml;
-    }
-  }
-
-  /**
-   * {@link Text} implementation where the given text is assumed to have been
-   * already HTML unescaped.
-   */
-  private static class UnescapedText extends Text {
-    /**
-     * content of this node as plain, unescaped text
-     */
-    protected final String text;
-
-    private UnescapedText(String plainText, String originalHtml) {
-      super(originalHtml);
-      X.assertTrue(plainText != null);
-      this.text = plainText;
-    }
-
-    @Override public String getText() {
-      return text;
-    }
-  }
-
-  /**
-   * {@link Text} implementation where the given text is not unescaped yet, and
-   * unescaping will only be done lazily.
-   */
-  private static class EscapedText extends Text {
-    private final String htmlText;
-    private String text;
-
-    private EscapedText(String htmlText, String originalHtml) {
-      super(originalHtml);
-      this.htmlText = htmlText;
-    }
-
-    @Override public String getText() {
-      if (text == null) {
-        text = StringUtil.unescapeHTML(htmlText);
-      }
-      return text;
-    }
-  }
-
-  /**
-   * CDATA node is a subclass of Text node.
-   */
-  public static class CDATA extends UnescapedText {
-    private CDATA(String text) {
-      super(text, text);
-    }
-
-    @Override public void toHTML(StringBuilder sb) {
-      // Do not htmlescape CDATA text
-      sb.append(text);
-    }
-
-    @Override public void toXHTML(StringBuilder sb) {
-      sb.append("<![CDATA[")
-        .append(text)
-        .append("]]>");
-    }
-  }
-
-  /**
-   * Tag is a HTML open tag.
-   */
-  public static class Tag extends Node {
-    // The element
-    private final HTML.Element element;
-
-    // List of TagAttribute objects. This may be null.
-    private List<TagAttribute> attributes;
-
-    private final boolean isSelfTerminating;
-
-    private final String originalHtmlBeforeAttributes;
-
-    private final String originalHtmlAfterAttributes;
-
-    /**
-     * @param element the HTML4 element
-     * @param attributes list of TagAttribute objects, may be null
-     * @param isSelfTerminating
-     * @param originalHtmlBeforeAttributes Original tag's full content before
-     *        first attribute, including beginning '&lt;'. This should not
-     *        include preceeding whitespace for the first attribute, as that
-     *        should be included in the attribute node. If not null, tag will
-     *        preserve this original content. e.g., if original tag were
-     *        "&lt;foO bar='zbc'&gt;", case of foO would be preserved. This
-     *        method does not validate that
-     *        <code>originalHtmlBeforeAttributes</code> is a valid tag String.
-     * @param originalHtmlAfterAttributes Full content of original tag after
-     *        last attribute, including ending '>'. If not null, tag will
-     *        preserve this original content. e.g., if original tag were
-     *        "&lt;foo bar='zbc'  &gt;", the spaces before '&gt;' be preserved.
-     *        This method does not validate that
-     *        <code>originalHtmlAfterAttributes</code> is a valid tag String.
-     */
-    private Tag(HTML.Element element, List<TagAttribute> attributes,
-        boolean isSelfTerminating, String originalHtmlBeforeAttributes,
-        String originalHtmlAfterAttributes) {
-      X.assertTrue(element != null);
-      this.element = element;
-      this.attributes = attributes;
-      this.isSelfTerminating = isSelfTerminating;
-      this.originalHtmlBeforeAttributes = originalHtmlBeforeAttributes;
-      this.originalHtmlAfterAttributes = originalHtmlAfterAttributes;
-    }
-
-    /** Gets the name */
-    public String getName() {
-      return element.getName();
-    }
-
-    /** Gets the element */
-    public HTML.Element getElement() {
-      return element;
-    }
-
-    /** Adds an attribute */
-    public void addAttribute(HTML.Attribute attr, String value) {
-      X.assertTrue(attr != null);
-      addAttribute(new TagAttribute(attr, value, null));
-    }
-
-    /** Adds an attribute */
-    public void addAttribute(TagAttribute attr) {
-      X.assertTrue(attr != null);
-      if (attributes == null) {
-        attributes = new ArrayList<TagAttribute>();
-      }
-      attributes.add(attr);
-    }
-
-    /** Gets the list of attributes, note that this maybe null. */
-    public List<TagAttribute> getAttributes() {
-      return attributes;
-    }
-
-    /** Finds and returns a TagAttribute, or null if not found */
-    public TagAttribute getAttribute(HTML.Attribute attr) {
-      if (attributes != null) {
-        for (TagAttribute attribute : attributes) {
-          if (attribute.getAttribute().equals(attr)) {
-            return attribute;
-          }
-        }
-      }
-      return null;
-    }
-
-    /**
-     * Finds and returns list of TagAttribute of given attribute
-     * type, or empty list if not found,
-     */
-    public List<TagAttribute> getAttributes(HTML.Attribute attr) {
-      List<TagAttribute> result = Lists.newArrayList();
-      if (attributes != null) {
-        for (TagAttribute attribute : attributes) {
-          if (attribute.getAttribute().equals(attr)) {
-            result.add(attribute);
-          }
-        }
-      }
-      return result;
-    }
-
-    /** Returns debug string */
-    @Override
-    public String toString() {
-      StringBuilder sb = new StringBuilder();
-      sb.append("Start Tag: ");
-      sb.append(element.getName());
-      if (attributes != null) {
-        for (TagAttribute attr : attributes) {
-          sb.append(' ');
-          sb.append(attr.toString());
-        }
-      }
-      return sb.toString();
-    }
-
-    /** Implements Node.accept */
-    @Override
-    public void accept(Visitor visitor) {
-      visitor.visitTag(this);
-    }
-
-    /** Implements Node.toHTML */
-    @Override
-    public void toHTML(StringBuilder sb) {
-      serialize(sb, SerializeType.HTML);
-    }
-
-    @Override
-    public void toXHTML(StringBuilder sb) {
-      serialize(sb, SerializeType.XHTML);
-    }
-
-    @Override
-    public void toOriginalHTML(StringBuilder sb) {
-      serialize(sb, SerializeType.ORIGINAL_HTML);
-    }
-
-    /**
-     * Specifies format of serialized output.
-     */
-    private enum SerializeType {
-      ORIGINAL_HTML, HTML, XHTML
-    }
-
-    private void serialize(StringBuilder sb, SerializeType type) {
-      // before attributes
-      if (type == SerializeType.ORIGINAL_HTML && originalHtmlBeforeAttributes != null) {
-        sb.append(originalHtmlBeforeAttributes);
-      } else {
-        sb.append('<');
-        sb.append(element.getName());
-      }
-
-      // attributes
-      if (attributes != null) {
-        for (TagAttribute attr : attributes) {
-          // attribute includes leading whitespace, so we needn't add it here
-          if (type == SerializeType.ORIGINAL_HTML) {
-            attr.toOriginalHTML(sb);
-          } else if (type == SerializeType.HTML) {
-            attr.toHTML(sb);
-          } else {
-            attr.toXHTML(sb);
-          }
-        }
-      }
-
-      // after attributes
-      if (type == SerializeType.ORIGINAL_HTML && originalHtmlAfterAttributes != null) {
-        sb.append(originalHtmlAfterAttributes);
-      } else if (type == SerializeType.XHTML && (isSelfTerminating || getElement().isEmpty())) {
-        sb.append(" />");
-      } else {
-        sb.append('>');
-      }
-    }
-
-    public boolean isSelfTerminating() {
-      return isSelfTerminating;
-    }
-
-    public String getOriginalHtmlBeforeAttributes() {
-      return originalHtmlBeforeAttributes;
-    }
-
-    public String getOriginalHtmlAfterAttributes() {
-      return originalHtmlAfterAttributes;
-    }
-  }
-
-  /**
-   * EndTag is a closing HTML tag.
-   */
-  public static class EndTag extends Node {
-    // The element
-    private final HTML.Element element;
-
-    private final String originalHtml;
-
-    /**
-     * @param element The HTML.Element element.  Can not be null.
-     * @param originalHtml Full content of original tag, including beginning
-     * and ending '<' and '>'.  If not null, tag will preserve this original
-     * content. e.g., if original tag were "&lt;/foo &gt;", the space after foo
-     * would be preserved.  This method does not validate that originalHtml is a
-     * valid tag String.
-     */
-    private EndTag(HTML.Element element, String originalHtml) {
-      X.assertTrue(element != null);
-      this.element = element;
-      this.originalHtml = originalHtml;
-    }
-
-    /** Gets the name */
-    public String getName() {
-      return element.getName();
-    }
-
-    /** Gets the element */
-    public HTML.Element getElement() {
-      return element;
-    }
-
-    /** Returns debug string */
-    @Override
-    public String toString() {
-      return "End Tag: " + element.getName();
-    }
-
-    /** Implements Node.accept */
-    @Override
-    public void accept(Visitor visitor) {
-      visitor.visitEndTag(this);
-    }
-
-    /** Implements Node.toHTML */
-    @Override
-    public void toHTML(StringBuilder sb) {
-      sb.append("</");
-      sb.append(element.getName());
-      sb.append('>');
-    }
-
-    @Override
-    public void toXHTML(StringBuilder sb) {
-      toHTML(sb);
-    }
-
-    @Override
-    public void toOriginalHTML(StringBuilder sb) {
-      if (originalHtml != null) {
-        sb.append(originalHtml);
-      } else {
-        toHTML(sb);
-      }
-    }
-  }
-
-  /**
-   * TagAttribute represents an attribute in a HTML tag.
-   */
-  public static class TagAttribute {
-    private final HTML.Attribute attribute;
-    private String value;
-    private String originalHtml;
-
-    /**
-     * @param attribute the HTML.Attribute. Can't be null.
-     * @param value The value in plain-text format. This can be null if the
-     *        attribute has no value.
-     * @param originalHtml If not null, toOriginalHTML() will preserve original
-     *        content. This should contain any leading whitespace from the
-     *        original.
-     */
-    private TagAttribute(HTML.Attribute attribute, String value, String originalHtml) {
-      X.assertTrue(attribute != null);
-      this.attribute = attribute;
-      this.value = value;
-      this.originalHtml = originalHtml;
-    }
-
-    /** Gets the name */
-    public String getName() {
-      return attribute.getName();
-    }
-
-    /** Gets the HTML.Attribute information */
-    public HTML.Attribute getAttribute() {
-      return attribute;
-    }
-
-    /**
-     * Sets the attribute value.
-     * This value must be in plain-text, not html-escaped.
-     * This can be null, if the attribute has no values.
-     * This clears <code>originalHtml_</code> if it were set, so
-     * <code>toOriginalHTML()</code> might not preserve original any more.
-     */
-    public void setValue(String value) {
-      this.value = value;
-      originalHtml = null;
-    }
-
-    /** Returns the attribute value in plain-text, never null */
-    public String getValue() {
-      return value != null ? value : "";
-    }
-
-    /** Returns true if the attribute value is not empty */
-    public boolean hasValue() {
-      return value != null;
-    }
-
-    /**
-     * Writes out the attribute in HTML format with all necessary preceding
-     * whitespace. Emits originalHtml_ if it were specified to the constructor.
-     * Otherwise, emits a new name="value" string with a single preceding space.
-     */
-    public void toHTML(StringBuilder sb) {
-      sb.append(' ');
-      sb.append(attribute.getName());
-      if (value != null && attribute.getType() != HTML.Attribute.BOOLEAN_TYPE) {
-        sb.append("=\"");
-        sb.append(CharEscapers.asciiHtmlEscaper().escape(value));
-        sb.append("\"");
-      }
-    }
-
-    /** Returns the attribute html string */
-    public String toHTML() {
-      StringBuilder sb = new StringBuilder();
-      toHTML(sb);
-      return sb.toString();
-    }
-
-    /**
-     * Writes out the attribute in XHTML format (value is always appended,
-     * even if it is empty) with all necessary preceeding whitespace.
-     */
-    public void toXHTML(StringBuilder sb) {
-      sb.append(' ');
-      sb.append(attribute.getName()).append("=\"");
-
-      // Assume that value-less attribute are boolean attributes like "disabled"
-      if (hasValue()) {
-        sb.append(CharEscapers.asciiHtmlEscaper().escape(value));
-      } else {
-        sb.append(attribute.getName());
-      }
-
-      sb.append("\"");
-    }
-
-    /** Returns the attribute XHTML string */
-    public String toXHTML() {
-      StringBuilder sb = new StringBuilder();
-      toXHTML(sb);
-      return sb.toString();
-    }
-
-    /**
-     * @param sb Destination to which attribute is written, in its original
-     * preparsed form if possible.
-     */
-    public void toOriginalHTML(StringBuilder sb) {
-      if (originalHtml != null) {
-        sb.append(originalHtml);
-      } else {
-        toHTML(sb);
-      }
-    }
-
-    /**
-     * Writes out the attribute in its original form as it was parsed..
-     */
-    public String toOriginalHTML() {
-      StringBuilder sb = new StringBuilder();
-      toOriginalHTML(sb);
-      return sb.toString();
-    }
-
-    @Override
-    public String toString() {
-      return "{" + attribute.getName() + "=" + value + "}";
-    }
-  }
-
-  /**
-   * Filter is like Visitor, except it implies that the nodes may be changed,
-   * whereas HtmlDocument.Visitor just implies that the nodes are iterated
-   * over. A Filter can behave just like a Visitor if it merely returns the
-   * same node that it visited. Also, methods may be called on a node to change
-   * the values it contains. Alternatively, a new node entirely can be created
-   * and returned, which will essentially replace the previous node with the
-   * new node in the document tree. A node may be removed by returning null
-   * instead of a node.
-   */
-  public static interface Filter {
-    /** This is called first */
-    void start();
-
-    /** A text node */
-    Text visitText(Text n);
-
-    /** An open tag */
-    Tag visitTag(Tag n);
-
-    /** End tag */
-    EndTag visitEndTag(EndTag n);
-
-    /** HTML comment */
-    Comment visitComment(Comment n);
-
-    /* Called at the end. */
-    void finish();
-  }
-
-  /**
-   * Like Filter, except each node may be replaced by multiple nodes.  Also,
-   * does not do double dispatch accept/visit.
-   */
-  public static interface MultiplexFilter {
-    /**
-     * Called first.
-     */
-    void start();
-
-    /**
-     * @param originalNode node to filter
-     * @param out Destination to which this object appends nodes to replace
-     * originalNode.  Can not be null.
-     */
-    void filter(Node originalNode, List<Node> out);
-
-    /**
-     * Called at the end.
-     * @param out Destination to which this object appends nodes at the end of
-     * the document.  Can not be null.
-     */
-    void finish(List<Node> out);
-  }
-
-  /**
-   * Converts a normal {@link Filter} into a {@link MultiplexFilter}.
-   */
-  public static class MultiplexFilterAdapter implements MultiplexFilter {
-
-    private final Filter filter;
-
-    public MultiplexFilterAdapter(Filter filter) {
-      this.filter = filter;
-    }
-
-    public void start() {
-      filter.start();
-    }
-
-    public void filter(Node originalNode, List<Node> out) {
-      if (originalNode == null) {
-        return;
-      }
-
-      Node resultNode;
-      if (originalNode instanceof Tag) {
-        resultNode = filter.visitTag((Tag) originalNode);
-      } else if (originalNode instanceof Text) {
-        resultNode = filter.visitText((Text) originalNode);
-      } else if (originalNode instanceof EndTag) {
-        resultNode = filter.visitEndTag((EndTag) originalNode);
-      } else if (originalNode instanceof Comment) {
-        resultNode = filter.visitComment((Comment) originalNode);
-      } else {
-        throw new IllegalArgumentException("unknown node type: " + originalNode.getClass());
-      }
-
-      if (resultNode != null) {
-        out.add(resultNode);
-      }
-    }
-
-    public void finish(List<Node> out) {
-      filter.finish();
-    }
-  }
-
-  /**
-   * Like Filter, except each node may be replaced by multiple nodes.  Also,
-   * does not do double dispatch accept/visit.  Dispatches filterNode() to
-   * node-specific methods.
-   */
-  public static abstract class SimpleMultiplexFilter implements MultiplexFilter {
-
-    /**
-     * @see HtmlDocument.MultiplexFilter#filter(HtmlDocument.Node, List)
-     */
-    public void filter(Node originalNode, List<Node> out) {
-      if (originalNode == null) {
-        return;
-      }
-
-      if (originalNode instanceof Tag) {
-        filterTag((Tag) originalNode, out);
-      } else if (originalNode instanceof Text) {
-        filterText((Text) originalNode, out);
-      } else if (originalNode instanceof EndTag) {
-        filterEndTag((EndTag) originalNode, out);
-      } else if (originalNode instanceof Comment) {
-        filterComment((Comment) originalNode, out);
-      } else {
-        throw new IllegalArgumentException("unknown node type: "
-            + originalNode.getClass());
-      }
-    }
-
-    public abstract void filterTag(Tag originalTag, List<Node> out);
-
-    public abstract void filterText(Text originalText, List<Node> out);
-
-    public abstract void filterEndTag(EndTag originalEndTag, List<Node> out);
-
-    public void filterComment(Comment originalComment, List<Node> out) {
-    }
-  }
-
-  /**
-   * Contains a list of filters which are applied, in order, to each Node.  The
-   * output of each becomes the input to the next.  As soon as one returns an
-   * empty list it breaks the chain.
-   */
-  public static class MultiplexFilterChain implements MultiplexFilter {
-
-    private final List<MultiplexFilter> filters = new ArrayList<MultiplexFilter>();
-
-    /**
-     * @param sourceFilters these filters are applied in List order
-     */
-    public MultiplexFilterChain(List<MultiplexFilter> sourceFilters) {
-      filters.addAll(sourceFilters);
-    }
-
-    /**
-     * @see HtmlDocument.MultiplexFilter#start()
-     */
-    public void start() {
-      for (MultiplexFilter filter : filters) {
-        filter.start();
-      }
-    }
-
-    /**
-     * @see HtmlDocument.MultiplexFilter#filter(HtmlDocument.Node, List)
-     */
-    public void filter(Node originalNode, List<Node> out) {
-      List<Node> result = new ArrayList<Node>();
-      result.add(originalNode);
-
-      // loop through filters until one returns nothing, or until we're out of
-      // filters
-      for (MultiplexFilter filter : filters) {
-        if (result.isEmpty()) {
-          return;
-        }
-
-        // apply filter to each node and collect results
-        List<Node> newResult = new ArrayList<Node>();
-        for (Node node : result) {
-          filter.filter(node, newResult);
-        }
-        result = newResult;
-      }
-
-      out.addAll(result);
-    }
-
-    /**
-     * @see HtmlDocument.MultiplexFilter#finish(List)
-     */
-    public void finish(List<Node> out) {
-      List<Node> result = new ArrayList<Node>();
-
-      // loop through filters until one returns nothing, or until we're out of
-      // filters
-      for (MultiplexFilter filter : filters) {
-        // apply filter to each node and collect results
-        List<Node> newResult = new ArrayList<Node>();
-        for (Node node : result) {
-          filter.filter(node, newResult);
-        }
-        filter.finish(newResult);
-        result = newResult;
-      }
-
-      out.addAll(result);
-    }
-  }
-
-  /**
-   * Html visitor allows external code to iterate through the nodes in the
-   * document. See HtmlDocument.accept.
-   */
-  public static interface Visitor {
-    /** This is called first */
-    void start();
-
-    /** A text node */
-    void visitText(Text n);
-
-    /** An open tag */
-    void visitTag(Tag n);
-
-    /** End tag */
-    void visitEndTag(EndTag n);
-
-    /** comment */
-    void visitComment(Comment n);
-
-    /* Called at the end. */
-    void finish();
-  }
-
-  /**
-   * An implementation of the Visitor interface which simply delegates its
-   * methods to a wrapped instance of another Visitor.
-   *
-   * <p>This is useful for chaining Visitors together.
-   */
-  public static class VisitorWrapper implements Visitor {
-    private final Visitor wrapped;
-
-    protected VisitorWrapper(Visitor wrap) {
-      wrapped = wrap;
-    }
-
-    public void start() {
-      wrapped.start();
-    }
-
-    public void visitText(Text n) {
-      wrapped.visitText(n);
-    }
-
-    public void visitTag(Tag n) {
-      wrapped.visitTag(n);
-    }
-
-    public void visitEndTag(EndTag n) {
-      wrapped.visitEndTag(n);
-    }
-
-    public void visitComment(Comment n) {
-      wrapped.visitComment(n);
-    }
-
-    public void finish() {
-      wrapped.finish();
-    }
-  }
-
-  /**
-   * A special helper Visitor that builds a HtmlDocument.
-   */
-  public static class Builder implements Visitor {
-    private final boolean preserveComments;
-    private final List<Node> nodes = new ArrayList<Node>();
-    private HtmlDocument doc;
-
-    /**
-     * @see Builder#Builder(boolean)
-     */
-    public Builder() {
-      this(false);
-    }
-
-    /**
-     * @param preserveComments If false, ignores Comment nodes
-     */
-    public Builder(boolean preserveComments) {
-      this.preserveComments = preserveComments;
-    }
-
-    public void addNode(Node node) {
-      nodes.add(node);
-    }
-    public void start() {
-    }
-    public void visitText(Text t) {
-      addNode(t);
-    }
-    public void visitTag(Tag t) {
-      addNode(t);
-    }
-    public void visitComment(Comment n) {
-      if (preserveComments) {
-        addNode(n);
-      }
-    }
-    public void visitEndTag(EndTag t) {
-      addNode(t);
-    }
-    public void finish() {
-      doc = new HtmlDocument(nodes);
-    }
-
-    /** Gets the html document that has been constructed */
-    public HtmlDocument getDocument() {
-      return doc;
-    }
-  }
-
-  /**
-   * A Visitor that prints out the html document in debug format.
-   */
-  public static class DebugPrinter implements Visitor {
-
-    private final PrintWriter writer;
-
-    public DebugPrinter(PrintWriter writer) {
-      this.writer = writer;
-    }
-
-    public void start() {
-    }
-
-    public void visitText(Text t) {
-      writeCollapsed("TEXT", t.getText());
-    }
-
-    public void visitComment(Comment n) {
-      writeCollapsed("COMMENT", n.getContent());
-    }
-
-    private void writeCollapsed(String type, String s) {
-      writer.print(type);
-      writer.print(": ");
-      String noNewlines = s.replace("\n", " ");
-      // Use CharMatcher#WHITESPACE?
-      String collapsed = CharMatcher.LEGACY_WHITESPACE.trimAndCollapseFrom(noNewlines, ' ');
-      writer.print(collapsed);
-    }
-
-    public void visitTag(Tag tag) {
-      writer.print("==<" + tag.getName() + ">");
-      List<TagAttribute> attributes = tag.getAttributes();
-      if (attributes != null) {
-
-        // Attribute values
-        List<String> attrs = new ArrayList<String>();
-        for (TagAttribute a : attributes) {
-          attrs.add("[" + a.getName() + " : " + a.getValue() + "]");
-        }
-        String[] array = attrs.toArray(new String[attrs.size()]);
-
-        // Sort the attributes so that it's easier to read and compare
-        Arrays.sort(array);
-        for (int i = 0; i < array.length; i++) {
-          writer.print(" " + array[i]);
-        }
-      }
-      writer.println();
-    }
-
-    public void visitEndTag(EndTag endtag) {
-      writer.println("==</" + endtag.getName() + ">");
-    }
-
-    public void finish() {
-    }
-  }
-
-}
\ No newline at end of file
diff --git a/src/com/android/mail/lib/html/parser/HtmlParser.java b/src/com/android/mail/lib/html/parser/HtmlParser.java
deleted file mode 100644
index a501c85..0000000
--- a/src/com/android/mail/lib/html/parser/HtmlParser.java
+++ /dev/null
@@ -1,1131 +0,0 @@
-/**
- * Copyright (c) 2004, Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.mail.lib.html.parser;
-
-import com.android.mail.lib.base.CharEscapers;
-import com.android.mail.lib.base.CharMatcher;
-import com.android.mail.lib.base.Preconditions;
-import com.android.mail.lib.base.StringUtil;
-import com.android.mail.lib.base.X;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.io.ByteStreams;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * HtmlParser is a simple but efficient html parser.
- * - It's simple because it does not do incremental parsing like some other
- * parser. It assumes that the entire html text is available.
- * - It offers 3 levels of aggressiveness in correcting errors in HTML (see
- * HtmlParser.ParseStyle).
- * - HTML comments are ignored unless initialized with ParseStyle.PRESERVE_ALL.
- */
-public class HtmlParser {
-
-  // States
-  private enum State {
-    IN_TEXT, IN_TAG, IN_COMMENT, IN_CDATA
-  }
-
-  // The current state
-  private State state;
-
-  private int clipLength = Integer.MAX_VALUE;
-  private boolean clipped;
-
-  // The html text
-  private String html;
-
-  // The entire array of nodes
-  private List<HtmlDocument.Node> nodes;
-
-  // Turn on for debug information.
-  private static boolean DEBUG = false;
-
-  // Default whitelist
-  public static final HtmlWhitelist DEFAULT_WHITELIST = HTML4.getWhitelist();
-
-  // Whitelists for looking up accepted HTML tags and attributes
-  private List<HtmlWhitelist> whitelists = Lists.newArrayList(DEFAULT_WHITELIST);
-
-  /**
-   * This setting controls how much of the original HTML is preserved.  In
-   * ascending order of aggressiveness:
-   * - PRESERVE_ALL: Preserves all of original content.
-   * *** Warning - PRESERVE_ALL mode preserves invalid and unsafe HTML. ***
-   * - PRESERVE_VALID: Preserves only valid visible HTML handled by
-   * most browsers.  Discards comments, unknown tags and attributes, and
-   * nameless end tags.  Encodes all '<' characters that aren't part of a tag.
-   * - NORMALIZE: In addition to the changes made by PRESERVE_VALID, also
-   *   - unescapes then reescapes text to normalize entities
-   *   - normalizes whitespace and quotes around tag attributes
-   */
-  public enum ParseStyle { NORMALIZE, PRESERVE_VALID, PRESERVE_ALL }
-
-  /**
-   * True only in PRESERVE_ALL mode.
-   * @see HtmlParser.ParseStyle
-   */
-  private final boolean preserveAll;
-
-  /**
-   * True in either PRESERVE_ALL or PRESERVE_VALID mode.
-   * @see HtmlParser.ParseStyle
-   */
-  private final boolean preserveValidHtml;
-
-  /**
-   * @see HtmlParser#HtmlParser(HtmlParser.ParseStyle)
-   */
-  public HtmlParser() {
-    this(ParseStyle.NORMALIZE);
-  }
-
-  /**
-   * @param parseStyle Level of aggressiveness for how different
-   * toHTML()/toXHTML() are from original.
-   * @see HtmlParser.ParseStyle
-   */
-  public HtmlParser(ParseStyle parseStyle) {
-    preserveAll = (parseStyle == ParseStyle.PRESERVE_ALL);
-    preserveValidHtml = preserveAll || (parseStyle == ParseStyle.PRESERVE_VALID);
-  }
-
-  /**
-   * Sets the maximum length, in characters, of an HTML message.
-   *
-   * @param clipLength must be greater than zero.
-   * (It starts as Integer.MAX_VALUE)
-   */
-  public void setClipLength(int clipLength) {
-    if (clipLength <= 0) {
-      throw new IllegalArgumentException(
-        "clipLength '" + clipLength + "' <= 0");
-    }
-    this.clipLength = clipLength;
-  }
-
-  public boolean isClipped() {
-    return clipped;
-  }
-
-  /**
-   * Sets the HTML whitelist. Calling this overrides any whitelist(s) that
-   * the parser is configured to use. By default, the parser uses the standard
-   * HTML4 whitelist.
-   *
-   * This has no effect in <code>ParseStyle.PRESERVE_ALL</code> mode.
-   *
-   * @param whitelist The whitelist to use. Must not be null.
-   */
-  public void setWhitelist(HtmlWhitelist whitelist) {
-    Preconditions.checkNotNull(whitelist);
-    whitelists = Lists.newArrayList(whitelist);
-  }
-
-  /**
-   * Adds an HTML whitelist to the list of whitelists consulted when
-   * processing an element or attribute. By default, the parser only uses
-   * the standard HTML4 whitelist.
-   *
-   * Whitelists are consulted in reverse chronological order (starting from
-   * the most recently added whitelist). The last whitelist consulted will
-   * always be the standard HTML4 whitelist, unless this was overridden by
-   * a call to {@link #setWhitelist}.
-   *
-   * This has no effect in <code>ParseStyle.PRESERVE_ALL</code> mode.
-   *
-   * @param whitelist The whitelist to use.
-   */
-  public void addWhitelist(HtmlWhitelist whitelist) {
-    whitelists.add(whitelist);
-  }
-
-  /**
-   * These are characters that we don't want to allow unquoted in an attribute
-   * value because they might be interpreted by the browser as HTML control
-   * characters. They are the 5 characters that are escaped by
-   * com.google.common.base.CharEscapers.HTML_ESCAPE, plus '=' and whitespace.
-   * Note that it shouldn't be possible for '>' or whitespace to be parsed as
-   * part of an unquoted attribute value, but we leave them here for
-   * completeness.
-   * Package visibility for unit tests.
-   */
-  static Pattern NEEDS_QUOTING_ATTRIBUTE_VALUE_REGEX = Pattern.compile("[\"\'&<>=\\s]");
-
-  //------------------------------------------------------------------------
-  // Parsing
-  //------------------------------------------------------------------------
-
-  /**
-   * Parses a String as HTML.
-   *
-   * @param html String to parse
-   * @return an Html document
-   */
-  public HtmlDocument parse(String html) {
-    this.html = html;
-    // Use a LinkedList because we don't know the number of nodes ahead of
-    // time. This will be compacted into an ArrayList in coalesceTextNodes().
-    nodes = Lists.newLinkedList();
-    state = State.IN_TEXT;
-
-    clipped = false;
-    int end = html.length();
-    int clipEnd = Math.min(clipLength, end);
-
-    for (int i = 0; i < end && !clipped;) {
-
-      // At any one time, the parser is in one of these states:
-      int pos;
-      switch (state) {
-        case IN_TEXT:
-          // text will not attempt to parse beyond the clipping length
-          pos = scanText(i, clipEnd);
-          X.assertTrue(pos > i || state != State.IN_TEXT); // Must make progress.
-          break;
-
-        case IN_TAG:
-          pos = scanTag(i, end);
-          X.assertTrue(pos > i);        // Must make progress
-          break;
-
-        case IN_COMMENT:
-          pos = scanComment(i, end);
-          state = State.IN_TEXT;
-          X.assertTrue(pos > i);        // Must make progress
-          break;
-
-        case IN_CDATA:
-          pos = scanCDATA(i, end);
-          X.assertTrue(pos > i || state != State.IN_CDATA); // Must make progress
-          break;
-
-        default:
-          throw new Error("Unknown state!");
-      }
-
-      i = pos;
-
-      // If we've reached or gone beyond the clipping length, stop.
-      clipped = pos >= clipLength;
-    }
-
-    nodes = coalesceTextNodes(nodes);
-
-    HtmlDocument doc = new HtmlDocument(nodes);
-    nodes = null;
-    html = null;
-    return doc;
-  }
-
-  /**
-   * During the course of parsing, we may have multiple adjacent Text nodes,
-   * due to the sanitizer stripping out nodes between Text nodes. It is
-   * important to coalesce them so that later steps in the pipeline can
-   * treat the text as a single block (e.g. the step that inserts <wbr> tags).
-   * @param nodes Original nodes.
-   * @return Nodes with text nodes changed.
-   */
-  static List<HtmlDocument.Node> coalesceTextNodes(
-      List<HtmlDocument.Node> nodes) {
-    List<HtmlDocument.Node> out =
-        new ArrayList<HtmlDocument.Node>(nodes.size());
-    LinkedList<HtmlDocument.Text> textNodes = Lists.newLinkedList();
-
-    for (HtmlDocument.Node node : nodes) {
-      if (node instanceof HtmlDocument.Text) {
-        textNodes.add((HtmlDocument.Text) node);
-      } else {
-        mergeTextNodes(textNodes, out);
-        out.add(node);
-      }
-    }
-    mergeTextNodes(textNodes, out);
-    return out;
-  }
-
-  /**
-   * Flushes any Text nodes in {@code textNodes} into a single Text node
-   * in {@code output}. {@code textNodes} is guaranteed to be empty when
-   * the function returns.
-   * @param textNodes Text nodes.
-   * @param output Destination to which results are added.
-   */
-  private static void mergeTextNodes(LinkedList<HtmlDocument.Text> textNodes,
-                                     List<HtmlDocument.Node> output) {
-    if (!textNodes.isEmpty()) {
-      if (textNodes.size() == 1) {
-        output.add(textNodes.removeFirst());
-      } else {
-        int combinedTextLen = 0;
-        int combinedInputLen = 0;
-        for (HtmlDocument.Text text : textNodes) {
-          combinedTextLen += text.getText().length();
-          if (text.getOriginalHTML() != null) {
-            combinedInputLen += text.getOriginalHTML().length();
-          }
-        }
-        StringBuilder combinedText = new StringBuilder(combinedTextLen);
-        StringBuilder combinedInput = new StringBuilder(combinedInputLen);
-        while (!textNodes.isEmpty()) {
-          HtmlDocument.Text text = textNodes.removeFirst();
-          combinedText.append(text.getText());
-          if (text.getOriginalHTML() != null) {
-            combinedInput.append(text.getOriginalHTML());
-          }
-        }
-        String originalInput = combinedInputLen > 0 ? combinedInput.toString() : null;
-        output.add(HtmlDocument.createText(combinedText.toString(), originalInput));
-      }
-    }
-  }
-
-  //------------------------------------------------------------------------
-  // Text scanning
-  //------------------------------------------------------------------------
-  /**
-   * A truncated entity is something like <pre>&nbs or &#1a3</pre>.
-   * We only want to find these at the end of a clipped text.
-   */
-  private static final Pattern TRUNCATED_ENTITY =
-    Pattern.compile("\\& \\#? [0-9a-zA-Z]{0,8} $", Pattern.COMMENTS);
-
-  /**
-   * In a text mode, scan for a tag
-   * @param start Position in original html.
-   * @param end Position in original html.
-   * @return End position of scanned content.
-   */
-  int scanText(final int start, final int end) {
-    int pos;
-    for (pos = start; pos < end; pos++) {
-      char ch = html.charAt(pos);
-      if (ch == '<' && pos + 1 < end) {
-        // Check the next char
-        ch = html.charAt(pos + 1);
-        if (ch == '/' || Character.isLetter(ch) || ch == '!' || ch == '?') {
-
-          // Check if it's an html comment or tag
-          if (html.regionMatches(pos + 1, "!--", 0, 3)) {
-            state = State.IN_COMMENT;
-          } else {
-            state = State.IN_TAG;
-          }
-          break;
-        }
-      }
-    }
-
-    if (pos > start) {
-      int finalPos = pos;
-      String htmlTail = this.html.substring(start, finalPos);
-
-      if ((pos == clipLength) && (clipLength < html.length())) {
-        // We're clipping this HTML, not running off the end.
-        // If we're ending with what looks like a truncated entity,
-        // then clip that part off, too.
-        // If it really was a truncated entity, great.
-        // If it was a false positive, the user won't notice that we clipped
-        // an additional handful of characters.
-        Matcher matcher = TRUNCATED_ENTITY.matcher(htmlTail);
-        if (matcher.find()) {
-          int matchStart = matcher.start();
-          // The matcher matched in htmlTail, not html.
-          // htmlTail starts at html[start]
-          finalPos = start + matchStart;
-          htmlTail = htmlTail.substring(0, matchStart);
-        }
-      }
-
-      if (finalPos > start) {
-        String originalHtml = null;
-        if (preserveAll) {
-          originalHtml = htmlTail;
-        } else if (preserveValidHtml) {
-          // the only way htmlTail can start with '<' is if it's the last character
-          // in html; otherwise, we would have entered State.IN_TAG or
-          // State.IN_COMMENT above
-
-          // officially a '<' can be valid in a text node, but to be safe we
-          // always escape them
-          originalHtml = CharMatcher.is('<').replaceFrom(htmlTail, "&lt;");
-        }
-
-        HtmlDocument.Text textnode = HtmlDocument.createEscapedText(htmlTail, originalHtml);
-        nodes.add(textnode);
-      }
-    }
-    return pos;
-  }
-
-  //------------------------------------------------------------------------
-  // Tag name scanning utility class
-  //------------------------------------------------------------------------
-  private static class TagNameScanner {
-    private final String html;
-    private String tagName;
-    private int startNamePos = -1;
-    private int endNamePos = -1;
-
-    public TagNameScanner(String html) {
-      this.html = html;
-    }
-
-    /**
-     * Scans for a tag name. Sets #startNamePos and #endNamePos.
-     * @param start Position in original html.
-     * @param end Position in original html.
-     * @return End position of scanned content.
-     */
-    public int scanName(final int start, final int end) {
-      int pos;
-      for (pos = start; pos < end; pos++) {
-        char ch = html.charAt(pos);
-
-        // End of tag or end of name.
-        if ((ch == '>') || (ch == '/') || Character.isWhitespace(ch)) {
-          break;
-        }
-      }
-      if (pos > start) {
-        startNamePos = start;
-        endNamePos = pos;
-      }
-      return pos;
-    }
-
-    /**
-     * @return Tag name.
-     */
-    public String getTagName() {
-      if (tagName == null && startNamePos != -1 && endNamePos != -1) {
-        tagName = html.substring(startNamePos, endNamePos);
-      }
-      return tagName;
-    }
-  }
-
-  //------------------------------------------------------------------------
-  // Attribute scanning utility class
-  //------------------------------------------------------------------------
-  private static class AttributeScanner {
-    private final String html;
-    private String name;
-    private String value;
-
-    // The following have package visibility because they are accessed from
-    // HtmlParser.addAttribute() to handle preservation of original content
-    // around the attribute value, but quoting and escaping of the value itself.
-    int startNamePos = -1;
-    int endNamePos = -1;
-    int startValuePos = -1;
-    int endValuePos = -1;
-    boolean attrValueIsQuoted = false;
-
-    public AttributeScanner(String html) {
-      this.html = html;
-    }
-
-    /**
-     * Reset to scan another attribute.
-     */
-    public void reset() {
-      startNamePos = -1;
-      endNamePos = -1;
-      startValuePos = -1;
-      endValuePos = -1;
-      attrValueIsQuoted = false;
-      name = null;
-      value = null;
-    }
-
-    /**
-     * Scans for a tag attribute name. Sets startNamePos and endNamePos. Sets
-     * 'attrName'.
-     *
-     * @param start Position in original html
-     * @param end Position in original html
-     * @return End position of scanned content
-     */
-    int scanName(final int start, final int end) {
-      X.assertTrue(html.charAt(start) != '>');
-      if (start == end) {
-        // No attribute name
-        return start;
-      }
-
-      int pos;
-      for (pos = start + 1; pos < end; pos++) {
-        char ch = html.charAt(pos);
-
-        // End of tag or end of name.
-        if ((ch == '>') || (ch == '=') || (ch == '/') || Character.isWhitespace(ch)) {
-          break;
-        }
-      }
-      startNamePos = start;
-      endNamePos = pos;
-      return pos;
-    }
-
-    /**
-     * Scans for a tag attribute value. Sets startValuePos_ and endValuePos_.
-     *
-     * @param start Position in original html
-     * @param end Position in original html
-     * @return End position of scanned content
-     */
-    int scanValue(final int start, final int end) {
-      // Skip whitespace before '='.
-      int pos = skipSpaces(start, end);
-
-      // Handle cases with no attribute value.
-      if ((pos == end) || (html.charAt(pos) != '=')) {
-        // Return start so spaces will be parsed as part of next attribute,
-        // or end of tag.
-        return start;
-      }
-
-      // Skip '=' and whitespace after it.
-      pos++;
-      pos = skipSpaces(pos, end);
-
-      // Handle cases with no attribute value.
-      if (pos == end) {
-        return pos;
-      }
-
-      // Check for quote character ' or "
-      char ch = html.charAt(pos);
-      if (ch == '\'' || ch == '\"') {
-        attrValueIsQuoted = true;
-        pos++;
-        int valueStart = pos;
-        while (pos < end && html.charAt(pos) != ch) {
-          pos++;
-        }
-        startValuePos = valueStart;
-        endValuePos = pos;
-        if (pos < end) {
-          pos++;                        // Skip the ending quote char
-        }
-      } else {
-        int valueStart = pos;
-        for (; pos < end; pos++) {
-          ch = html.charAt(pos);
-
-          // End of tag or end of value. Not that '/' is included in the value
-          // even if it is the '/>' at the end of the tag.
-          if ((ch == '>') || Character.isWhitespace(ch)) {
-            break;
-          }
-        }
-        startValuePos = valueStart;
-        endValuePos = pos;
-      }
-
-      X.assertTrue(startValuePos > -1);
-      X.assertTrue(endValuePos > -1);
-      X.assertTrue(startValuePos <= endValuePos);
-      X.assertTrue(pos <= end);
-
-      return pos;
-    }
-
-    /**
-     * Skips white spaces.
-     *
-     * @param start Position in original html
-     * @param end Position in original html
-     * @return End position of scanned content
-     */
-    private int skipSpaces(final int start, final int end) {
-      int pos;
-      for (pos = start; pos < end; pos++) {
-        if (!Character.isWhitespace(html.charAt(pos))) {
-          break;
-        }
-      }
-      return pos;
-    }
-
-    public String getName() {
-      if (name == null && startNamePos != -1 && endNamePos != -1) {
-        name = html.substring(startNamePos, endNamePos);
-      }
-      return name;
-    }
-
-    public String getValue() {
-      if (value == null && startValuePos != -1 && endValuePos != -1) {
-        value = html.substring(startValuePos, endValuePos);
-      }
-      return value;
-    }
-  }
-
-  /**
-   * Holds any unrecognized elements we encounter.  Only applicable in
-   * PRESERVE_ALL mode.
-   */
-  private final HashMap<String,HTML.Element> unknownElements = Maps.newHashMap();
-
-  /**
-   * Holds any unrecognized attributes we encounter.  Only applicable in
-   * PRESERVE_ALL mode.
-   */
-  private final HashMap<String,HTML.Attribute> unknownAttributes = Maps.newHashMap();
-
-  /**
-   * @param name Element name.
-   * @return "Dummy" element.  Not useful for any real HTML processing, but
-   * gives us a placeholder for tracking original HTML contents.
-   */
-  private HTML.Element lookupUnknownElement(String name) {
-    name = name.toLowerCase();
-    HTML.Element result = unknownElements.get(name);
-    if (result == null) {
-      result = new HTML.Element(name,
-          HTML.Element.NO_TYPE,
-          /* empty */ false,
-          /* optional end tag */ true,
-          /* breaks flow*/ false,
-          HTML.Element.Flow.NONE);
-      unknownElements.put(name, result);
-    }
-    return result;
-  }
-
-  /**
-   * @param name Attribute name.
-   * @return "Dummy" attribute. Not useful for any real HTML processing, but
-   *         gives us a placeholder for tracking original HTML contents.
-   */
-  private HTML.Attribute lookupUnknownAttribute(String name) {
-    name = name.toLowerCase();
-    HTML.Attribute result = unknownAttributes.get(name);
-    if (result == null) {
-      result = new HTML.Attribute(name, HTML.Attribute.NO_TYPE);
-      unknownAttributes.put(name, result);
-    }
-    return result;
-  }
-
-  /**
-   * Scans for an HTML tag.
-   *
-   * @param start Position in original html.
-   * @param end Position in original html.
-   * @return End position of scanned content.
-   */
-  int scanTag(final int start, final int end) {
-    X.assertTrue(html.charAt(start) == '<');
-
-    // nameStart is where we begin scanning for the tag name and attributes,
-    // so we skip '<'.
-    int nameStart = start + 1;
-
-    // Next state is Text, except the case when we see a STYLE/SCRIPT tag. See
-    // code below.
-    state = State.IN_TEXT;
-
-    // End tag?
-    boolean isEndTag = false;
-    if (html.charAt(nameStart) == '/') {
-      isEndTag = true;
-      ++nameStart;
-    }
-
-    // Tag name and element
-    TagNameScanner tagNameScanner = new TagNameScanner(html);
-    int pos = tagNameScanner.scanName(nameStart, end);
-    String tagName = tagNameScanner.getTagName();
-    HTML.Element element = null;
-    if (tagName == null) {
-      // For some reason, browsers treat start and end tags differently
-      // when they don't have a valid tag name - end tags are swallowed
-      // (e.g., "</ >"), start tags treated as text (e.g., "< >")
-      if (!isEndTag) {
-        // This is not really a tag, treat the '<' as text.
-        HtmlDocument.Text text = HtmlDocument.createText("<", preserveAll ? "<" : null);
-        nodes.add(text);
-        state = State.IN_TEXT;
-        return nameStart;
-      }
-
-      if (preserveAll) {
-        element = lookupUnknownElement("");
-      }
-    } else {
-      element = lookupElement(tagName);
-      if (element == null) {
-        if (DEBUG) {
-          // Unknown element
-          debug("Unknown element: " + tagName);
-        }
-        if (preserveAll) {
-          element = lookupUnknownElement(tagName);
-        }
-      }
-    }
-
-    // Attributes
-    boolean isSingleTag = false;
-    ArrayList<HtmlDocument.TagAttribute> attributes = null;
-    int allAttributesStartPos = pos;
-    int nextAttributeStartPos = pos;
-    AttributeScanner attributeScanner = new AttributeScanner(html);
-    while (pos < end) {
-      int startPos = pos;
-      char ch = html.charAt(pos);
-
-      // Are we at the end of the tag?
-      if ((pos + 1 < end) && (ch == '/') && (html.charAt(pos + 1) == '>')) {
-        isSingleTag = true;
-        ++pos;
-        break;                          // Done
-      }
-      if (ch == '>') {
-        break;                          // Done
-      }
-
-      // See bug 870742 (Buganizer).
-      if (isEndTag && ('<' == ch)) {
-        // '<' not allowed in end tag, so we finish processing this tag and
-        // return to State.IN_TEXT. We mimic Safari & Firefox, which both
-        // terminate the tag when it contains a '<'.
-        if (element != null) {
-          addEndTag(element, start, allAttributesStartPos, pos);
-        }
-        state = State.IN_TEXT;
-        return pos;
-      }
-
-      if (Character.isWhitespace(ch)) {
-        // White space, skip it.
-        ++pos;
-      } else {
-        // Scan for attribute
-        attributeScanner.reset();
-        pos = attributeScanner.scanName(pos, end);
-        X.assertTrue(pos > startPos);
-
-        // If it's a valid attribute, scan attribute values
-        if (attributeScanner.getName() != null) {
-          pos = attributeScanner.scanValue(pos, end);
-
-          // Add the attribute to the list
-          if (element != null) {
-            if (attributes == null) {
-              attributes = new ArrayList<HtmlDocument.TagAttribute>();
-            }
-            addAttribute(attributes, attributeScanner, nextAttributeStartPos, pos);
-          }
-          nextAttributeStartPos = pos;
-        }
-      }
-
-      // Make sure that we make progress!
-      X.assertTrue(pos > startPos);
-    }
-
-    // Cannot find the close tag, so we treat this as text
-    if (pos == end) {
-      X.assertTrue(start < end);
-      String textNodeContent = html.substring(start, end);
-      String originalContent = null;
-      if (preserveAll) {
-        originalContent = textNodeContent;
-      } else if (preserveValidHtml) {
-        // Officially a '<' can be valid in a text node, but to be safe we
-        // always escape them.
-        originalContent =
-            CharMatcher.is('<').replaceFrom(html.substring(start, end), "&lt;");
-      }
-      nodes.add(HtmlDocument.createEscapedText(textNodeContent, originalContent));
-      return end;
-    }
-
-    // Skip '>'
-    X.assertTrue(html.charAt(pos) == '>');
-    pos++;
-
-    // Check if it's an element we're keeping (either an HTML4 element, or an
-    // unknown element we're preserving). If not, ignore the tag.
-    if (element != null) {
-      if (isEndTag) {
-        addEndTag(element, start, allAttributesStartPos, pos);
-      } else {
-        // Special case: if it's a STYLE/SCRIPT element, we go to into
-        // CDATA state.
-        if (HTML4.SCRIPT_ELEMENT.equals(element) || HTML4.STYLE_ELEMENT.equals(element)) {
-          state = State.IN_CDATA;
-        }
-
-        addStartTag(element, start, allAttributesStartPos,
-            nextAttributeStartPos,
-            pos, isSingleTag, attributes);
-      }
-    }
-
-    return pos;
-  }
-
-  /**
-   * Lookups the element in our whitelist(s). Whitelists are consulted in
-   * reverse chronological order (starting from the most recently added
-   * whitelist), allowing clients to override the default behavior.
-   *
-   * @param name Element name.
-   * @return Element.
-   */
-  HTML.Element lookupElement(String name) {
-    ListIterator<HtmlWhitelist> iter = whitelists.listIterator(whitelists.size());
-    while (iter.hasPrevious()) {
-      HTML.Element elem = iter.previous().lookupElement(name);
-      if (elem != null) {
-        return elem;
-      }
-    }
-    return null;
-  }
-
-  /**
-   * Lookups the attribute in our whitelist(s). Whitelists are consulted in
-   * reverse chronological order (starting from the most recently added
-   * whitelist), allowing clients to override the default behavior.
-   *
-   * @param name Attribute name.
-   * @return Attribute.
-   */
-  HTML.Attribute lookupAttribute(String name) {
-    ListIterator<HtmlWhitelist> iter = whitelists.listIterator(whitelists.size());
-    while (iter.hasPrevious()) {
-      HTML.Attribute attr = iter.previous().lookupAttribute(name);
-      if (attr != null) {
-        return attr;
-      }
-    }
-    return null;
-  }
-
-  /**
-   * @param element Tag element
-   * @param startPos Start of tag, including '<'
-   * @param startAttributesPos Start of attributes. This is the first
-   * character after the tag name. If there are no attributes, this is the end
-   * of the tag.
-   * @param endAttributesPos First position after last attribute
-   * @param endPos End of tag, including '>' character
-   * @param isSingleTag True iff this is a self-terminating tag
-   * @param attributes Tag attributes
-   */
-  private void addStartTag(HTML.Element element, final int startPos,
-      final int startAttributesPos, final int endAttributesPos,
-      final int endPos, final boolean isSingleTag,
-      ArrayList<HtmlDocument.TagAttribute> attributes) {
-    X.assertTrue(startPos < startAttributesPos);
-    X.assertTrue(startAttributesPos <= endAttributesPos);
-    X.assertTrue(endAttributesPos <= endPos);
-
-    if (preserveAll) {
-      String beforeAttrs = html.substring(startPos, startAttributesPos);
-      String afterAttrs = html.substring(endAttributesPos, endPos);
-      HtmlDocument.Tag tag = (isSingleTag)
-          ? HtmlDocument.createSelfTerminatingTag(element, attributes,
-              beforeAttrs, afterAttrs)
-          : HtmlDocument.createTag(element, attributes,
-              beforeAttrs, afterAttrs);
-      nodes.add(tag);
-    } else if (preserveValidHtml) {
-      // This is the beginning of the tag up through the tag name. It should not
-      // be possible for this to contain characters needing escaping, but we add
-      // this redundant check to avoid an XSS attack that might get past our
-      // parser but trick a browser into executing a script.
-      X.assertTrue(html.charAt(startPos) == '<');
-      StringBuilder beforeAttrs = new StringBuilder("<");
-      String tagName = html.substring(startPos + 1, startAttributesPos);
-      beforeAttrs.append(CharEscapers.asciiHtmlEscaper().escape(tagName));
-
-      // Verify end-of-tag characters
-      int endContentPos = endPos - 1;
-      X.assertTrue(html.charAt(endContentPos) == '>');
-      if (isSingleTag) {
-        --endContentPos;
-        X.assertTrue(html.charAt(endContentPos) == '/');
-      }
-      X.assertTrue(endAttributesPos <= endContentPos);
-
-      // This is any extra characters between the last attribute and the end of
-      // the tag.
-      X.assertTrue(endAttributesPos < endPos);
-      String afterAttrs = html.substring(endAttributesPos, endPos);
-
-      // Strip all but preceding whitespace.
-      HtmlDocument.Tag tag = (isSingleTag)
-          ? HtmlDocument.createSelfTerminatingTag(element, attributes,
-              beforeAttrs.toString(), afterAttrs)
-          : HtmlDocument.createTag(element, attributes,
-              beforeAttrs.toString(), afterAttrs);
-      nodes.add(tag);
-    } else {
-      // Normalize.
-      HtmlDocument.Tag tag = (isSingleTag)
-          ? HtmlDocument.createSelfTerminatingTag(element, attributes)
-          : HtmlDocument.createTag(element, attributes);
-      nodes.add(tag);
-    }
-  }
-
- /**
-   * @param element End tag element.
-   * @param startPos Start of tag, including '<'.
-   * @param startAttributesPos Start of attributes. This is the first
-   * character after the tag name. If there are no attributes, this is the end
-   * of the tag.
-   * @param endPos End of tag. This usually contains the '>' character, but in
-   * the case where browsers force a termination of a malformed tag, it doesn't.
-   */
-  private void addEndTag(HTML.Element element, final int startPos,
-      final int startAttributesPos, final int endPos) {
-    X.assertTrue(element != null);
-    X.assertTrue(html.charAt(startPos) == '<');
-    X.assertTrue(html.charAt(startPos + 1) == '/');
-
-    if (preserveAll) {
-      // Preserve all: keep actual content even if it's malformed.
-      X.assertTrue(startPos < endPos);
-      String content = html.substring(startPos, endPos);
-      nodes.add(HtmlDocument.createEndTag(element, content));
-    } else if (preserveValidHtml) {
-      // Preserve valid: terminate the tag.
-
-      StringBuilder validContent = new StringBuilder("</");
-
-      // This is the beginning of the tag up through the tag name. It should not
-      // be possible for this to contain characters needing escaping, but we add
-      // this redundant check to avoid an XSS attack that might get past our
-      // parser but trick a browser into executing a script.
-      X.assertTrue(startPos < startAttributesPos);
-      String tagName = html.substring(startPos + 2, startAttributesPos);
-      validContent.append(CharEscapers.asciiHtmlEscaper().escape(tagName));
-
-      // This is the rest of the tag, including any attributes.
-      // See bug 874396 (Buganizer). We don't allow attributes in an end tag.
-      X.assertTrue(startAttributesPos <= endPos);
-      String endOfTag = html.substring(startAttributesPos, endPos);
-      if (endOfTag.charAt(endOfTag.length() - 1) != '>') {
-        endOfTag += '>';
-      }
-
-      // Strip everything but leading whitespace.
-      validContent.append(endOfTag.replaceAll("\\S+.*>", ">"));
-
-      nodes.add(HtmlDocument.createEndTag(element, validContent.toString()));
-    } else {
-      // Normalize: ignore the original content.
-      nodes.add(HtmlDocument.createEndTag(element));
-    }
-  }
-
-  /**
-   * Creates and adds an attribute to the list.
-   *
-   * @param attributes Destination of new attribute.
-   * @param scanner Scanned attribute.
-   * @param startPos start position (inclusive) in original HTML of this
-   *        attribute, including preceeding separator characters (generally this
-   *        is whitespace, but it might contain other characters). This is the
-   *        end position of the tag name or previous attribute +1.
-   * @param endPos end position (exclusive) in original HTML of this attribute.
-   */
-  private void addAttribute(ArrayList<HtmlDocument.TagAttribute> attributes,
-      AttributeScanner scanner, final int startPos, final int endPos) {
-    X.assertTrue(startPos < endPos);
-
-    String name = scanner.getName();
-    X.assertTrue(name != null);
-    HTML.Attribute htmlAttribute = lookupAttribute(name);
-
-    // This can be null when there's no value, e.g., input.checked attribute.
-    String value = scanner.getValue();
-
-    if (htmlAttribute == null) {
-      // Unknown attribute.
-      if (DEBUG) {
-        debug("Unknown attribute: " + name);
-      }
-      if (preserveAll) {
-        String original = html.substring(startPos, endPos);
-        attributes.add(HtmlDocument.createTagAttribute(
-            lookupUnknownAttribute(name), value, original));
-      }
-    } else {
-      String unescapedValue = (value == null) ? null : StringUtil.unescapeHTML(value);
-      if (preserveAll) {
-        attributes.add(HtmlDocument.createTagAttribute(htmlAttribute,
-            unescapedValue, html.substring(startPos, endPos)));
-      } else if (preserveValidHtml) {
-        StringBuilder original = new StringBuilder();
-
-        // This includes any separator characters between the tag name or
-        // preceding attribute and this one.
-        // This addresses bugs 870757 and 875303 (Buganizer).
-        // Don't allow non-whitespace separators between attributes.
-        X.assertTrue(startPos <= scanner.startNamePos);
-        String originalPrefix = html.substring(
-            startPos, scanner.startNamePos).replaceAll("\\S+", "");
-        if (originalPrefix.length() == 0) {
-          originalPrefix = " ";
-        }
-        original.append(originalPrefix);
-
-        if (value == null) {
-          // This includes the name and any following whitespace. Escape in case
-          // the name has any quotes or '<' that could confuse a browser.
-          X.assertTrue(scanner.startNamePos < endPos);
-          String nameEtc = html.substring(scanner.startNamePos, endPos);
-          original.append(CharEscapers.asciiHtmlEscaper().escape(nameEtc));
-        } else {
-          // Escape name in case the name has any quotes or '<' that could
-          // confuse a browser.
-          original.append(CharEscapers.asciiHtmlEscaper().escape(name));
-
-          // This includes the equal sign, and any other whitespace
-          // between the name and value. It also contains the opening quote
-          // character if there is one.
-          X.assertTrue(scanner.endNamePos < scanner.startValuePos);
-          original.append(html.substring(scanner.endNamePos, scanner.startValuePos));
-
-          // This is the value, excluding any quotes.
-          if (scanner.attrValueIsQuoted) {
-            // Officially a '<' can be valid in an attribute value, but to be
-            // safe we always escape them.
-            original.append(value.replaceAll("<", "&lt;"));
-          } else {
-            // This addresses bug 881426 (Buganizer). Put quotes around any
-            // dangerous characters, which is what most of the browsers do.
-            if (NEEDS_QUOTING_ATTRIBUTE_VALUE_REGEX.matcher(value).find()) {
-              original.append('"');
-              original.append(value.replaceAll("\"", "&quot;"));
-              original.append('"');
-            } else {
-              original.append(value);
-            }
-          }
-
-          // This includes end quote, if applicable.
-          X.assertTrue(scanner.endValuePos <= endPos);
-          original.append(html.substring(scanner.endValuePos, endPos));
-        }
-
-        attributes.add(HtmlDocument.createTagAttribute(
-            htmlAttribute, unescapedValue, original.toString()));
-      } else {
-        attributes.add(HtmlDocument.createTagAttribute(
-            htmlAttribute, unescapedValue));
-      }
-    }
-  }
-
-  //------------------------------------------------------------------------
-  // Comment scanning
-  //------------------------------------------------------------------------
-  private static final String START_COMMENT = "<!--";
-  private static final String END_COMMENT = "-->";
-
-  private int scanComment(final int start, final int end) {
-
-    X.assertTrue(html.regionMatches(start, START_COMMENT, 0, START_COMMENT.length()));
-
-    // Scan for end of comment
-    int pos = html.indexOf(END_COMMENT, start + START_COMMENT.length());
-    if (pos != -1) {
-      pos += END_COMMENT.length();
-    } else {
-      // Look for '>'. If we can't find that, the rest of the text is comments.
-      pos = html.indexOf('>', start + 4);
-      if (pos != -1) {
-        ++pos;
-      } else {
-        pos = end;
-      }
-    }
-
-    if (preserveAll) {
-      nodes.add(HtmlDocument.createHtmlComment(html.substring(start, pos)));
-    }
-
-    return pos;
-  }
-
-  //------------------------------------------------------------------------
-  // CDATA scanning
-  //------------------------------------------------------------------------
-  int scanCDATA(final int start, final int end) {
-
-    // Get the tag: must be either STYLE or SCRIPT
-    HtmlDocument.Tag tag = (HtmlDocument.Tag) nodes.get(nodes.size() - 1);
-    HTML.Element element = tag.getElement();
-    X.assertTrue(HTML4.SCRIPT_ELEMENT.equals(element) || HTML4.STYLE_ELEMENT.equals(element));
-
-    int pos;
-    for (pos = start; pos < end; pos++) {
-      if (pos + 2 < end &&
-          html.charAt(pos) == '<' &&
-          html.charAt(pos + 1) == '/' &&
-          html.regionMatches(true, pos + 2, element.getName(), 0,
-                              element.getName().length())) {
-        break;
-      }
-    }
-
-    // Add a CDATA node
-    if (pos > start) {
-      HtmlDocument.CDATA cdata =
-        HtmlDocument.createCDATA(html.substring(start, pos));
-      nodes.add(cdata);
-    }
-
-    state = State.IN_TAG;
-    return pos;
-  }
-
-  //------------------------------------------------------------------------
-  public static void main(String[] args) throws IOException {
-
-    DEBUG = true;
-
-    String html = new String(ByteStreams.toByteArray(System.in), "ISO-8859-1");
-
-    HtmlParser parser = new HtmlParser();
-    HtmlDocument doc = parser.parse(html);
-    System.out.println(doc.toString());
-  }
-
-  private static void debug(String str) {
-    System.err.println(str);
-  }
-}
\ No newline at end of file
diff --git a/src/com/android/mail/lib/html/parser/HtmlTree.java b/src/com/android/mail/lib/html/parser/HtmlTree.java
deleted file mode 100644
index e64a8d5..0000000
--- a/src/com/android/mail/lib/html/parser/HtmlTree.java
+++ /dev/null
@@ -1,965 +0,0 @@
-/**
- * Copyright (c) 2004, Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.mail.lib.html.parser;
-
-import com.android.mail.lib.base.CharMatcher;
-import com.android.mail.lib.base.Preconditions;
-import com.android.mail.lib.base.X;
-import com.google.common.collect.ImmutableSet;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Set;
-import java.util.Stack;
-import java.util.logging.Logger;
-
-/**
- * HtmlTree represents a parsed and well-formed html text, it provides
- * methods to convert to plain text. It also provides methods to find
- * well-formed blocks of text, for quote detection.
- *
- * We don't really build a html tree data structure. Instead, for
- * efficiency, and for the ability to do a simple in-order-traversal
- * of the tree, we simply keeps a linear list of nodes (in-order).
- * The begin_ and end_ arrays keeps track of the starting end ending
- * nodes:
- *
- * For a string node, begin_[node] = end_[node] = node
- * For an open tag, begin_[node] = node, end_[node] = the matching end tag
- * For a close tag, end_[node] = the matching open tag, end_[node] = node
- *
- * @author jlim@google.com (Jing Yee Lim)
- */
-public class HtmlTree {
-
-  /**
-   * An interface that allows clients to provide their own implementation
-   * of a {@link PlainTextConverter}.
-   */
-  public static interface PlainTextConverterFactory {
-    /**
-     * Creates a new instance of a {@link PlainTextConverter} to convert
-     * the contents of an {@link HtmlTree} to plain text.
-     */
-    PlainTextConverter createInstance();
-  }
-
-  /**
-   * An interface for an object which converts a single HtmlTree into
-   * plaintext.
-   */
-  public static interface PlainTextConverter {
-    /**
-     * Adds the given node {@code n} to plain text.
-     *
-     * @param n The node to convert to text.
-     * @param nodeNum The number of the node among the list of all notes.
-     * @param endNum The number of the ending node if this is a start node,
-     *    otherwise the same as {@code nodeNum}.
-     */
-    void addNode(HtmlDocument.Node n, int nodeNum, int endNum);
-
-    /**
-     * Returns the current length of the plain text.
-     */
-    int getPlainTextLength();
-
-    /**
-     * Returns the current plain text.
-     */
-    String getPlainText();
-  }
-
-  /** A factory that produces converters of the default implementation. */
-  private static final PlainTextConverterFactory DEFAULT_CONVERTER_FACTORY =
-      new PlainTextConverterFactory() {
-        public PlainTextConverter createInstance() {
-          return new DefaultPlainTextConverter();
-        }
-      };
-
-  /** Contains html nodes */
-  private final List<HtmlDocument.Node> nodes = new ArrayList<HtmlDocument.Node>();
-
-  /** Keeps track of beginning and end of each node */
-  private final Stack<Integer> begins = new Stack<Integer>();
-  private final Stack<Integer> ends = new Stack<Integer>();
-
-  /** Plain text (lazy creation) */
-  private String plainText;
-
-  /** The html string (lazy creation) */
-  private String html;
-
-  /** textPositions[node pos] = the text position */
-  private int[] textPositions;
-
-  private PlainTextConverterFactory converterFactory = DEFAULT_CONVERTER_FACTORY;
-
-  // For debugging only
-  private static final boolean DEBUG = false;
-
-  private static final Logger logger = Logger.getLogger(HtmlTree.class.getName());
-
-  //------------------------------------------------------------------------
-
-  /** HtmlTree can only be constructed from this package */
-  HtmlTree() {
-  }
-
-  /**
-   * Sets a new {@link PlainTextConverterFactory} to be used to convert
-   * the contents of this tree to plaintext.
-   */
-  public void setPlainTextConverterFactory(PlainTextConverterFactory factory) {
-    if (factory == null) {
-      throw new NullPointerException("factory must not be null");
-    }
-    converterFactory = factory;
-  }
-
-  /**
-   * Gets the list of node objects. A node can be either a
-   * Tag, EngTag or a String object.
-   * @return the nodes of the tree
-   */
-  public List<HtmlDocument.Node> getNodesList() {
-    return Collections.unmodifiableList(nodes);
-  }
-
-  /**
-   * @return number of nodes
-   */
-  public int getNumNodes() {
-    return nodes.size();
-  }
-
-  /**
-   * Gets the entire html.
-   */
-  public String getHtml() {
-    return getHtml(-1);
-  }
-
-  /**
-   * Gets the entire html, if wrapSize is > 0, it tries to do wrapping at the
-   * specified size.
-   */
-  public String getHtml(int wrapSize) {
-    if (html == null) {
-      html = getHtml(0, nodes.size(), wrapSize);
-    }
-    return html;
-  }
-
-  /** Gets parts of the html */
-  public String getHtml(int fromNode, int toNode) {
-    return getHtml(fromNode, toNode, -1);
-  }
-
-  /**
-   * Gets parts of the html, if wrapSize is > 0, it tries
-   * to do wrapping at the specified size.
-   */
-  public String getHtml(int fromNode, int toNode, int wrapSize) {
-    X.assertTrue(fromNode >= 0 && toNode <= nodes.size());
-
-    int estSize = (toNode - fromNode) * 10;
-    StringBuilder sb = new StringBuilder(estSize);
-    int lastWrapIndex = 0;      // used for wrapping
-    for (int n = fromNode; n < toNode; n++) {
-      HtmlDocument.Node node = nodes.get(n);
-      node.toHTML(sb);
-      // TODO: maybe we can be smarter about this and not add newlines
-      // within <pre> tags, unless the whole long line is encompassed
-      // by the <pre> tag.
-      if (wrapSize > 0) {
-        // We can only wrap if the last outputted node is an element that
-        // breaks the flow. Otherwise, we risk the possibility of inserting
-        // spaces where they shouldn't be.
-        if ((node instanceof HtmlDocument.Tag &&
-              ((HtmlDocument.Tag) node).getElement().breaksFlow()) ||
-            (node instanceof HtmlDocument.EndTag &&
-              ((HtmlDocument.EndTag) node).getElement().breaksFlow())) {
-          // Check to see if there is a newline in the most recent node's html.
-          int recentNewLine = sb.substring(lastWrapIndex + 1).lastIndexOf('\n');
-          if (recentNewLine != -1) {
-            lastWrapIndex += recentNewLine;
-          }
-          // If the last index - last index of a newline is greater than
-          // wrapSize, add a newline.
-          if (((sb.length() - 1) - lastWrapIndex) > wrapSize) {
-            sb.append('\n');
-            lastWrapIndex = sb.length() - 1;
-          }
-        }
-      }
-    }
-
-    return sb.toString();
-  }
-
-  /**
-   * Convert a html region into chunks of html code, each containing
-   * roughly chunkSize characters.
-   */
-  public ArrayList<String> getHtmlChunks(int fromNode, int toNode, int chunkSize) {
-    X.assertTrue(fromNode >= 0 && toNode <= nodes.size());
-
-    ArrayList<String> chunks = new ArrayList<String>();
-
-    // Do a best effort attempt to not split apart certain elements (as of now,
-    // just the <textarea>). We cannot guarantee that they will not be split
-    // because the client may specify endpoint nodes that land in the middle
-    // of an element (although this shouldn't happen if the endpoints returned
-    // by createBlocks() are properly used).
-    int stack = 0;
-    boolean balanced = true;
-
-    StringBuilder sb = new StringBuilder(chunkSize + 256);
-    for (int n = fromNode; n < toNode; n++) {
-      HtmlDocument.Node node = nodes.get(n);
-      node.toHTML(sb);
-
-      if (node instanceof HtmlDocument.Tag) {
-        if (HTML4.TEXTAREA_ELEMENT.equals(
-            ((HtmlDocument.Tag)node).getElement())) {
-          stack++;
-        }
-      }
-      if (node instanceof HtmlDocument.EndTag) {
-        if (HTML4.TEXTAREA_ELEMENT.equals(
-            ((HtmlDocument.EndTag)node).getElement())) {
-          if (stack == 0) {
-            balanced = false;
-          } else {
-            stack--;
-          }
-        }
-      }
-
-      if (stack == 0 && sb.length() >= chunkSize) {
-        chunks.add(sb.toString());
-        sb.setLength(0);
-      }
-    }
-
-    // Don't forget the last chunk!
-    if (sb.length() > 0) {
-      chunks.add(sb.toString());
-    }
-
-    // If the tree is not balanced (cut off in the middle of a node), log
-    // debug data. Clients should fix their code so that the endpoints from
-    // createBlocks() are properly used.
-    if (!balanced || stack != 0) {
-      StringBuilder debug = new StringBuilder("Returning unbalanced HTML:\n");
-      debug.append(getHtml());
-      debug.append("\nfromNode: ").append(fromNode);
-      debug.append("\ntoNode: ").append(toNode);
-      debug.append("\nNum nodes_: ").append(getNumNodes());
-      for (String chunk : chunks) {
-        debug.append("\nChunk:\n").append(chunk);
-      }
-      logger.severe(debug.toString());
-    }
-
-    return chunks;
-  }
-
-  /**
-   * Returns height (maximum length from root to a leaf) of the HTML tree.
-   * @return height of the HTML tree.
-   */
-  public int getTreeHeight() {
-    int currentHeight = 0;
-    int maxHeight = 0;
-
-    for (int i = 0; i < nodes.size(); i++) {
-      HtmlDocument.Node node = nodes.get(i);
-      if (node instanceof HtmlDocument.Tag) {
-        currentHeight++;
-        if (currentHeight > maxHeight) {
-          maxHeight = currentHeight;
-        }
-        if (((HtmlDocument.Tag) node).getElement().isEmpty()) {
-          // Empty tags have no closing pair, so decrease counter here.
-          currentHeight--;
-        }
-      } else if (node instanceof HtmlDocument.EndTag) {
-        currentHeight--;
-      }
-    }
-
-    // TODO(anatol): make this value cachable?
-    return maxHeight;
-  }
-
-  //------------------------------------------------------------------------
-  // Creating well-formed blocks within the html tree.
-  //------------------------------------------------------------------------
-  /**
-   * A Block represents a region of a html tree that
-   * 1) is well-formed, i.e. for each node in the block, all its descendants
-   * are also contained in the block. So it's safe to wrap the region
-   * within a <table> or <div>, etc.
-   * 2) starts at the beginning of a "line", e.g. a <div>, a <br>.
-   */
-  public static class Block {
-    /* The starting node */
-    public int start_node;
-
-    /* The ending node (non-inclusive to the block) */
-    public int end_node;
-  }
-
-  /**
-   * Creates a list of Blocks, given a text-range.
-   * We may create multiple blocks if one single well-formed Block cannot be
-   * created.
-   *
-   * @param textStart beginning plain-text offset
-   * @param textEnd beginning plain-text offset
-   * @param minNode the smallest node number
-   * @param maxNode the largest node number
-   * @return a list of 0 or more Block objects, never null
-   */
-  public ArrayList<Block> createBlocks(int textStart, int textEnd, int minNode, int maxNode) {
-
-    ArrayList<Block> blocks = new ArrayList<Block>();
-    int startNode = Math.max(getBlockStart(textStart), minNode);
-    int endNode = Math.min(getBlockEnd(textEnd), maxNode);
-
-    if (DEBUG) {
-      debug("Creating block: " +
-            "text pos: " + textStart + "-" + textEnd + "\n" +
-            "node pos: " + startNode + "-" + endNode + "\n" +
-            plainText.substring(textStart, textEnd));
-    }
-
-    // Split up the block [start, end) into one or more blocks that
-    // are well-formed, and begins at a "line" boundary.
-    int blockStart = -1;
-    for (int n = startNode; n < endNode;) {
-
-      // The node n spans [nBegin, nEnd]
-      int nBegin = begins.get(n);
-      int nEnd = ends.get(n);
-
-      if (blockStart == -1) {
-        // Check if this is a valid start node
-        if (nBegin >= n && nEnd <= endNode &&
-            canBeginBlockAt(n)) {
-          blockStart = n;
-          n = nEnd + 1;
-        } else {
-          n++;
-        }
-        continue;
-      }
-
-      // If the node [nBegin, nEnd) lies completely within
-      // the region then proceed to the (nEnd + 1).
-      if (nBegin >= blockStart && nEnd < endNode) {
-        n = nEnd + 1;
-        continue;
-      }
-
-      // If we got here, we have to break up the region into one
-      // or more blocks because the current node cannot be included
-      // in the region.
-      if (DEBUG) {
-        debug("Forcing new block: " + n + " ("  + nBegin + " " + nEnd +
-              ") exceeds (" + blockStart + " " + endNode + ")");
-      }
-      Block b = new Block();
-      b.start_node = blockStart;
-      b.end_node = n;
-      blocks.add(b);
-
-      blockStart = -1;
-      n++;
-    }
-
-    // Last block
-    if (blockStart != -1) {
-      Block b = new Block();
-      b.start_node = blockStart;
-      b.end_node = endNode;
-      blocks.add(b);
-    }
-
-    if (DEBUG) {
-      for (int i = 0; i < blocks.size(); i++) {
-        Block b = blocks.get(i);
-        debug("Block " + i + "/" + blocks.size() + ": " +
-              b.start_node + "-" + b.end_node + " " +
-              getPlainText(b.start_node, b.end_node));
-      }
-    }
-
-    return blocks;
-  }
-
-  /**
-   * Checks if a block can begin starting from a node position
-   */
-  private boolean canBeginBlockAt(int nodePos) {
-    int textPos = textPositions[nodePos];
-
-    // Make sure that we don't exceed the text position, this happens
-    // for the last tag nodes.
-    if (textPos == plainText.length()) {
-      textPos--;
-    }
-
-    // Scan backwards to check if a nodePos is at the beginning
-    // of a line.
-    for (int i = textPos; i > 0; i--) {
-      char ch = plainText.charAt(i);
-      if (ch == '\n') {
-        return true;
-      }
-      if (i < textPos && !Character.isWhitespace(ch)) {
-        return false;
-      }
-    }
-    return true;
-  }
-
-  /**
-   * Returns the start of a block given a text-pos
-   */
-  private int getBlockStart(int textPos) {
-    int nodenum = Arrays.binarySearch(textPositions, textPos);
-    if (nodenum >= 0) {
-      // Got an exact node alignment. Get the outer most pos that
-      // matches the text position
-      while ((nodenum - 1) >= 0 && textPositions[nodenum - 1] == textPos) {
-        nodenum--;
-      }
-    } else {
-      // textPos matches the middle of a node.
-      nodenum = -nodenum - 1;
-    }
-
-    X.assertTrue(nodenum >= 0 && nodenum <= nodes.size());
-    return nodenum;
-  }
-
-  /**
-   * Returns the end of a block given a text-pos
-   */
-  private int getBlockEnd(int textPos) {
-    int nodenum = Arrays.binarySearch(textPositions, textPos);
-    if (nodenum >= 0) {
-      // Got an exact node alignment.
-      while ((nodenum + 1) < textPositions.length && textPositions[nodenum + 1] == textPos) {
-        nodenum++;
-      }
-    } else {
-      // textPos matches the middle of a node.
-      nodenum = -nodenum - 2;
-    }
-    X.assertTrue(nodenum >= 0 && nodenum <= nodes.size());
-    return nodenum;
-  }
-
-  //------------------------------------------------------------------------
-  // Plain text view of the html tree
-  //------------------------------------------------------------------------
-  /**
-   * @return the plain-text position corresponding to the node
-   */
-  public int getTextPosition(int node) {
-    return textPositions[node];
-  }
-
-  /**
-   * @return a plain-text String of the html tree
-   */
-  public String getPlainText() {
-    if (plainText == null) {
-      convertToPlainText();
-    }
-    return plainText;
-  }
-
-  /**
-   * @return a plain-text String of a part of the html tree
-   */
-  public String getPlainText(int fromNode, int toNode) {
-    if (plainText == null) {
-      convertToPlainText();
-    }
-    int textstart = textPositions[fromNode];
-    int textend = textPositions[toNode];
-    return plainText.substring(textstart, textend);
-  }
-
-  /**
-   * Converts the html tree to plain text.
-   * We simply iterate through the nodes in the tree.
-   * As we output the plain-text, we keep track of the text position
-   * of each node.
-   * For String nodes, we replace '\n' with ' ' unless we're in a
-   * <pre> block.
-   */
-  private void convertToPlainText() {
-    X.assertTrue(plainText == null && textPositions == null);
-
-    int numNodes = nodes.size();
-
-    // Keeps track of start text position of each node, including a last
-    // entry for the size of the text.
-    textPositions = new int[numNodes + 1];
-
-    PlainTextConverter converter = converterFactory.createInstance();
-
-    for (int i = 0; i < numNodes; i++) {
-      textPositions[i] = converter.getPlainTextLength();
-      converter.addNode(nodes.get(i), i, ends.get(i));
-    }
-
-    // Add a last entry, so that textPositions_[nodes_.size()] is valid.
-    textPositions[numNodes] = converter.getPlainTextLength();
-
-    plainText = converter.getPlainText();
-
-    if (DEBUG) {
-      debug("Plain text: " + plainText);
-
-      for (int i = 0; i < nodes.size(); i++) {
-        int textPos = textPositions[i];
-        String text = plainText.substring(textPos, textPositions[i + 1]);
-        debug("At " + i + ": pos=" + textPos + " " +  text);
-      }
-    }
-  }
-
-  /**
-   * Encapsulates the logic for outputting plain text with respect to text
-   * segments, white space separators, line breaks, and quote marks.
-   */
-  static final class PlainTextPrinter {
-    /**
-     * Separators are whitespace inserted between segments of text. The
-     * semantics are such that between any two segments of text, there is
-     * at most one separator. As such, separators are ordered in increasing
-     * priority, and setting a separator multiple times between text will
-     * result in the single separator with the highest priority being used.
-     * For example, a LineBreak (one newline) will override a Space, but will
-     * be overriden by a BlankLine (two newlines).
-     */
-    static enum Separator {
-      // The values here must be ordered by increasing priority, as the
-      // enum's ordinal() method is used when determining if a new separator
-      // should override an existing one.
-      None,
-      Space,      // single space
-      LineBreak,  // single new line
-      BlankLine   // two new lines
-    }
-
-    // White space characters that are collapsed as a single space.
-    // Note that characters such as the non-breaking whitespace
-    // and full-width spaces are not equivalent to the normal spaces.
-    private static final String HTML_SPACE_EQUIVALENTS = " \n\r\t\f";
-
-    /**
-     * Determines if the given character is considered an HTML space character.
-     * Consecutive HTML space characters are collapsed into a single space when
-     * not within a PRE element.
-     */
-    private static boolean isHtmlWhiteSpace(char ch) {
-      return HTML_SPACE_EQUIVALENTS.indexOf(ch) >= 0;
-    }
-
-    // The buffer in which we accumulate the converted plain text
-    private final StringBuilder sb = new StringBuilder();
-
-    // How many <blockquote> blocks we are in.
-    private int quoteDepth = 0;
-
-    // How many logical newlines are at the end of the buffer we've outputted.
-    // Note that we can't simply count the newlines at the end of the output
-    // buffer because a logical new line may be followed by quote marks.
-    //
-    // We initialize the value to 2 so that we consume any initial separators,
-    // since we don't need separators at the beginning of the output. This also
-    // results in correctly outputting any quote marks at the beginning of the
-    // output if the first piece of text is within a BLOCKQUOTE element.
-    private int endingNewLines = 2;
-
-    // The next separator to be inserted between two text nodes.
-    private Separator separator = Separator.None;
-
-    /** Returns the current length of the text. */
-    final int getTextLength() {
-      return sb.length();
-    }
-
-    /** Returns the current text. */
-    final String getText() {
-      return sb.toString();
-    }
-
-    /**
-     * Sets the next separator between two text nodes. A Space separator is
-     * used if there is any whitespace between the two text nodes when there is
-     * no intervening element that breaks flow. This is automatically handled
-     * by the {@link #appendNormalText} function so the client never needs to
-     * specify this separator.
-     * <p>
-     * A LineBreak separator (single new line) is used if text segments are
-     * separated or enclosed by elements that break flow (e.g. DIV, TABLE, HR,
-     * etc.). The client should set this separator for opening and closing tags
-     * of any element that breaks flow.
-     * <p>
-     * A BlankLine separator (two new lines) should be set for opening and
-     * closing P tags.
-     * <p>
-     * If this method is called multiple times between text nodes, a
-     * separator with a higher priority will override that of a lower priority.
-     */
-    final void setSeparator(Separator newSeparator) {
-      if (newSeparator.ordinal() > separator.ordinal()) {
-        separator = newSeparator;
-      }
-    }
-
-    /** Increments the current quote depth of the text. */
-    final void incQuoteDepth() {
-      quoteDepth++;
-    }
-
-    /** Decrements the current quote depth of the text. */
-    final void decQuoteDepth() {
-      quoteDepth = Math.max(0, quoteDepth - 1);
-    }
-
-    /**
-     * Normalizes the HTML whitespace in the given {@code text} and appends it
-     * as the next segment of text. This will flush any separator that should
-     * be appended before the text, as well as any quote marks that should
-     * follow the last newline if the quote depth is non-zero.
-     */
-    final void appendNormalText(String text) {
-      if (text.length() == 0) {
-        return;
-      }
-      boolean startsWithSpace = isHtmlWhiteSpace(text.charAt(0));
-      boolean endsWithSpace = isHtmlWhiteSpace(text.charAt(text.length() - 1));
-
-      // Strip beginning and ending whitespace.
-      text = CharMatcher.anyOf(HTML_SPACE_EQUIVALENTS).trimFrom(text);
-
-      // Collapse whitespace within the text.
-      text = CharMatcher.anyOf(HTML_SPACE_EQUIVALENTS).collapseFrom(text, ' ');
-
-      if (startsWithSpace) {
-        setSeparator(Separator.Space);
-      }
-
-      appendTextDirect(text);
-
-      if (endsWithSpace) {
-        setSeparator(Separator.Space);
-      }
-    }
-
-    /**
-     * Appends the given text, preserving all whitespace. This is used for
-     * appending text in a PRE element.
-     */
-    final void appendPreText(String text) {
-      // We're in a <pre> block. Split the text into lines, and append
-      // each line with appendTextDirect() to preserve white space.
-      String[] lines = text.split("[\\r\\n]", -1);
-
-      // split() will always return an array with at least one element.
-      appendTextDirect(lines[0]);
-
-      // For all of the remaining lines, we append a newline first, which
-      // takes care of any quote marks that we need to output if the quote
-      // depth is non-zero.
-      for (int i = 1; i < lines.length; i++) {
-        appendNewLine();
-        appendTextDirect(lines[i]);
-      }
-    }
-
-    /**
-     * Appends the {@code text} directly to the output, taking into account
-     * any separator that should be appended before it, and any quote marks
-     * that should follow the last newline if the quote depth is non-zero.
-     * <p>
-     * {@code text} must not contain any new lines--in order to handle
-     * quoting correctly, it is up to the caller to either normalize away the
-     * newlines, or split the text up into separate lines and handle new lines
-     * with the {@link #appendNewLine} method.
-     * <p>
-     * The original {@code text} is not modified in any way. Use this method
-     * when you need to preserve the original white space.
-     * <p>
-     * If the given {@code text} is non empty, this method will result in
-     * {@code endingNewLines} being reset to 0.
-     */
-    private void appendTextDirect(String text) {
-      if (text.length() == 0) {
-        return;
-      }
-      Preconditions.checkArgument(text.indexOf('\n') < 0,
-                                  "text must not contain newlines.");
-      flushSeparator();
-      maybeAddQuoteMarks(true);
-      sb.append(text);
-      endingNewLines = 0;
-    }
-
-    /**
-     * Appends a forced line break, which is the equivalent of a BR element.
-     */
-    final void appendForcedLineBreak() {
-      flushSeparator();
-      appendNewLine();
-    }
-
-    /**
-     * Appends any pending separator to the output buffer. This should be
-     * called before appending text to the buffer.
-     */
-    private void flushSeparator() {
-      switch (separator) {
-        case Space:
-          if (endingNewLines == 0) {
-            // Only append a space separator if we are not following a new
-            // line character. For example, we don't append a separator
-            // space after a <br> tag, since the <br>'s newline fulfills the
-            // space separation requirement.
-            sb.append(" ");
-          }
-          break;
-        case LineBreak:
-          while (endingNewLines < 1) {
-            appendNewLine();
-          }
-          break;
-        case BlankLine:
-          while (endingNewLines < 2) {
-            appendNewLine();
-          }
-          break;
-      }
-      separator = Separator.None;
-    }
-
-    /**
-     * Adds a newline to the output. This handles any quote marks that should
-     * follow any previous new lines, and increments {@code endingNewLines}.
-     */
-    private void appendNewLine() {
-      maybeAddQuoteMarks(false);
-      sb.append('\n');
-      endingNewLines++;
-    }
-
-    /**
-     * Adds quote marks to the output if we are at the beginning of a line.
-     * One '>' character is used for every level of quoting we are in.
-     *
-     * @param includeEndingSpace Includes a single space after the quote marks.
-     */
-    private void maybeAddQuoteMarks(boolean includeEndingSpace) {
-      // We only need to add quote marks if we are at the beginning of line.
-      if (endingNewLines > 0 && quoteDepth > 0) {
-        for (int i = 0; i < quoteDepth; i++) {
-          sb.append('>');
-        }
-        if (includeEndingSpace) {
-          sb.append(' ');
-        }
-      }
-    }
-  }
-
-  /**
-   * Contains the logic for converting the contents of one HtmlTree into
-   * plaintext.
-   */
-  public static class DefaultPlainTextConverter implements PlainTextConverter {
-
-    private static final Set<HTML.Element> BLANK_LINE_ELEMENTS =
-        ImmutableSet.of(
-            HTML4.P_ELEMENT,
-            HTML4.BLOCKQUOTE_ELEMENT,
-            HTML4.PRE_ELEMENT);
-
-    private final PlainTextPrinter printer = new PlainTextPrinter();
-
-    private int preDepth = 0;
-
-    public void addNode(HtmlDocument.Node n, int nodeNum, int endNum) {
-      if (n instanceof HtmlDocument.Text) {        // A string node
-
-        HtmlDocument.Text textNode = (HtmlDocument.Text) n;
-        String str = textNode.getText();
-
-        if (preDepth > 0) {
-          printer.appendPreText(str);
-
-        } else {
-          printer.appendNormalText(str);
-        }
-
-      } else if (n instanceof HtmlDocument.Tag) {
-
-        // Check for linebreaking tags.
-        HtmlDocument.Tag tag = (HtmlDocument.Tag) n;
-        HTML.Element element = tag.getElement();
-
-        if (BLANK_LINE_ELEMENTS.contains(element)) {
-          printer.setSeparator(PlainTextPrinter.Separator.BlankLine);
-
-        } else if (HTML4.BR_ELEMENT.equals(element)) {
-          // The <BR> element is special in that it always adds a newline.
-          printer.appendForcedLineBreak();
-
-        } else if (element.breaksFlow()) {
-          // All other elements that break the flow add a LineBreak separator.
-          printer.setSeparator(PlainTextPrinter.Separator.LineBreak);
-
-          if (HTML4.HR_ELEMENT.equals(element)) {
-            printer.appendNormalText("________________________________");
-            printer.setSeparator(PlainTextPrinter.Separator.LineBreak);
-          }
-        }
-
-        if (HTML4.BLOCKQUOTE_ELEMENT.equals(element)) {
-          printer.incQuoteDepth();
-
-        } else if (HTML4.PRE_ELEMENT.equals(element)) {
-          preDepth++;
-        }
-
-      } else if (n instanceof HtmlDocument.EndTag) {
-
-        // Check for linebreaking tags.
-        HtmlDocument.EndTag endTag = (HtmlDocument.EndTag) n;
-        HTML.Element element = endTag.getElement();
-
-        if (BLANK_LINE_ELEMENTS.contains(element)) {
-          printer.setSeparator(PlainTextPrinter.Separator.BlankLine);
-
-        } else if (element.breaksFlow()) {
-          // All other elements that break the flow add a LineBreak separator.
-          printer.setSeparator(PlainTextPrinter.Separator.LineBreak);
-        }
-
-        if (HTML4.BLOCKQUOTE_ELEMENT.equals(element)) {
-          printer.decQuoteDepth();
-
-        } else if (HTML4.PRE_ELEMENT.equals(element)) {
-          preDepth--;
-        }
-      }
-    }
-
-    public final int getPlainTextLength() {
-      return printer.getTextLength();
-    }
-
-    public final String getPlainText() {
-      return printer.getText();
-    }
-  }
-
-  //------------------------------------------------------------------------
-  // The following methods are used to build the html tree.
-  //------------------------------------------------------------------------
-  /** For building the html tree */
-  private Stack<Integer> stack;
-  private int parent;
-
-  /** Starts the build process */
-  void start() {
-    stack = new Stack<Integer>();
-    parent = -1;
-  }
-
-  /** Finishes the build process */
-  void finish() {
-    X.assertTrue(stack.size() == 0);
-    X.assertTrue(parent == -1);
-  }
-
-  /**
-   * to add the matching end tag
-   */
-  void addStartTag(HtmlDocument.Tag t) {
-    int nodenum = nodes.size();
-    addNode(t, nodenum, -1);
-
-    stack.add(parent);
-    parent = nodenum;
-  }
-
-  /**
-   * Adds a html end tag, this must be preceded by a previous matching open tag
-   */
-  void addEndTag(HtmlDocument.EndTag t) {
-    int nodenum = nodes.size();
-    addNode(t, parent, nodenum);
-
-    if (parent != -1) {
-      ends.set(parent, nodenum);
-    }
-
-    //is this the right pop?
-    parent = stack.pop();
-  }
-
-  /** Adds a singular tag that does not have a corresponding end tag */
-  void addSingularTag(HtmlDocument.Tag t) {
-    int nodenum = nodes.size();
-    addNode(t, nodenum, nodenum);
-  }
-
-  /**
-   * Adds a text
-   * @param t a plain-text string
-   */
-  void addText(HtmlDocument.Text t) {
-    int nodenum = nodes.size();
-    addNode(t, nodenum, nodenum);
-  }
-
-  /** Adds a node */
-  private void addNode(HtmlDocument.Node n, int begin, int end) {
-
-    nodes.add(n);
-    begins.add(begin);
-    ends.add(end);
-  }
-
-  /** For debugging */
-  private static final void debug(String str) {
-    logger.finest(str);
-  }
-
-}
\ No newline at end of file
diff --git a/src/com/android/mail/lib/html/parser/HtmlTreeBuilder.java b/src/com/android/mail/lib/html/parser/HtmlTreeBuilder.java
deleted file mode 100644
index e5d975d..0000000
--- a/src/com/android/mail/lib/html/parser/HtmlTreeBuilder.java
+++ /dev/null
@@ -1,308 +0,0 @@
-/**
- * Copyright (c) 2004, Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.mail.lib.html.parser;
-
-import com.android.mail.lib.base.X;
-import com.android.mail.lib.html.parser.HtmlDocument.EndTag;
-import com.google.common.io.ByteStreams;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * HtmlTreeBuilder builds a well-formed HtmlTree.
- *
- * @see HtmlTree
- * @author jlim@google.com (Jing Yee Lim)
- */
-public class HtmlTreeBuilder implements HtmlDocument.Visitor {
-
-  private static final Logger logger = Logger.getLogger(HtmlTreeBuilder.class.getName());
-
-  /** Stack contains HTML4.Element objects to keep track of unclosed tags */
-  private final List<HTML.Element> stack = new ArrayList<HTML.Element>();
-  private final TableFixer tableFixer = new TableFixer();
-  private HtmlTree tree;
-  private boolean built = false;
-
-  /** Gets the built html tree */
-  public HtmlTree getTree() {
-    X.assertTrue(built);
-    return tree;
-  }
-
-  /** Implements HtmlDocument.Visitor.start */
-  public void start() {
-    tree = new HtmlTree();
-    tree.start();
-  }
-
-  /** Implements HtmlDocument.Visitor.finish */
-  public void finish() {
-    // Close all tags
-    while (stack.size() > 0) {
-      addMissingEndTag();
-    }
-    tableFixer.finish();
-    tree.finish();
-
-    built = true;
-  }
-
-  /** Implements HtmlDocument.Visitor.visitTag */
-  public void visitTag(HtmlDocument.Tag t) {
-    tableFixer.seeTag(t);
-
-    HTML.Element element = t.getElement();
-    if (element.isEmpty()) {
-      tree.addSingularTag(t);
-    } else if (t.isSelfTerminating()) {
-      // Explicitly create a non-selfterminating open tag and add it to the tree
-      // and also immediately add the corresponding close tag. This is done
-      // so that the toHTML, toXHTML and toOriginalHTML of the tree's node list
-      // will be balanced consistently.
-      // Otherwise there is a possibility of "<span /></span>" for example, if
-      // the created tree is converted to string through toXHTML.
-      tree.addStartTag(HtmlDocument.createTag(element,
-          t.getAttributes(), t.getOriginalHtmlBeforeAttributes(),
-          t.getOriginalHtmlAfterAttributes()));
-      EndTag end = HtmlDocument.createEndTag(element);
-      tableFixer.seeEndTag(end);
-      tree.addEndTag(end);
-    } else {
-      tree.addStartTag(t);
-      push(element);                       // Track the open tags
-    }
-  }
-
-  /** Implements HtmlVisitor.visit */
-  public void visitEndTag(HtmlDocument.EndTag t) {
-
-    // Here we pop back to the start tag
-    HTML.Element element = t.getElement();
-    int pos = findStartTag(element);
-    if (pos >= 0) {
-
-      // Add missing end-tags if any
-      while (pos < stack.size() - 1) {
-        addMissingEndTag();
-      }
-
-      pop();
-      tableFixer.seeEndTag(t);
-      tree.addEndTag(t);
-
-    } else {
-      // Not found, ignore this end tag
-      logger.finest("Ignoring end tag: " + element.getName());
-    }
-  }
-
-  /** Implements HtmlDocument.Visitor.visitText */
-  public void visitText(HtmlDocument.Text t) {
-    tableFixer.seeText(t);
-    tree.addText(t);
-  }
-
-  /** Implements HtmlDocument.Visitor.visitComment */
-  public void visitComment(HtmlDocument.Comment n) {
-    // ignore
-  }
-
-  /** Finds the start tag from the stack, returns -1 if not found */
-  private int findStartTag(HTML.Element element) {
-    for (int i = stack.size() - 1; i >= 0; i--) {
-      HTML.Element e = stack.get(i);
-      if (e == element) {
-        return i;
-      }
-    }
-    return -1;
-  }
-
-  /**
-   * Adds a close tag corresponding to a tag on the stack, if
-   * the tag needs a close tag.
-   */
-  private void addMissingEndTag() {
-    HTML.Element element = pop();
-
-    HtmlDocument.EndTag endTag = HtmlDocument.createEndTag(element);
-    tableFixer.seeEndTag(endTag);
-    tree.addEndTag(endTag);
-  }
-
-  /** Pushes a tag onto the stack */
-  private void push(HTML.Element element) {
-    stack.add(element);
-  }
-
-  /** Pops an elemnt from the stack */
-  private HTML.Element pop() {
-    return stack.remove(stack.size() - 1);
-  }
-
-  /**
-   * The TableFixer makes sure that a <table> structure is more or less well
-   * formed. Note that it only ensures that data within the <table> tag doesn't
-   * "leak out" of the table.
-   *
-   * For instance, all the tags here are balanced with end tags. But the
-   * 'outside' text ends up leaking out of the table.
-   * <table><tr><td bgcolor=yellow>
-   * <table><table>inside</table><td>outside</td></table>
-   * </td></tr></table>
-   *
-   * The TableFixer makes sure that
-   * 1) Within a table:, text and other elements are enclosed within a TD.
-   *    A TD tag is inserted where necessary.
-   * 2) All table structure tags are enclosed within a <table>. A TABLE tag
-   *    is inserted where necessary.
-   *
-   * Note that the TableFixer only adds open tags, it doesn't add end tags.
-   * The HtmlTreeVerifier ensures that all open tags are properly matched
-   * up and closed.
-   *
-   * @author Jing Yee Lim (jlim@google.com)
-   */
-  class TableFixer {
-
-    private int tables = 0;             // table nesting level
-
-    // States within a <table>
-    static final int NULL = 0;
-    static final int IN_CELL = 1;       // in a <td> or <th> tag
-    static final int IN_CAPTION = 2;    // in a <caption> tag
-
-    private int state;
-
-    void seeTag(HtmlDocument.Tag tag) {
-      HTML.Element element = tag.getElement();
-      if (element.getType() == HTML.Element.TABLE_TYPE) {
-
-        if (HTML4.TABLE_ELEMENT.equals(element)) {
-          if (tables > 0) {
-            ensureCellState();
-          }
-          tables++;
-          state = NULL;
-
-        } else {
-          // Make sure that we're in a table
-          ensureTableState();
-
-          // In cell/caption?
-          if (HTML4.TD_ELEMENT.equals(element) ||
-              HTML4.TH_ELEMENT.equals(element)) {
-            state = IN_CELL;
-
-          } else if (HTML4.CAPTION_ELEMENT.equals(element)) {
-            state = IN_CAPTION;
-          }
-        }
-      } else {
-        if (tables > 0) {
-
-          // Ok to have a form element outside a table cell.
-          // e.g. <TR><FORM><TD>...
-          if (!HTML4.FORM_ELEMENT.equals(element)) {
-            ensureCellState();
-          }
-        }
-      }
-    }
-
-    void seeEndTag(HtmlDocument.EndTag endTag) {
-      HTML.Element element= endTag.getElement();
-
-      if (tables > 0 && element.getType() == HTML.Element.TABLE_TYPE) {
-
-        if (HTML4.TD_ELEMENT.equals(element) ||
-            HTML4.TR_ELEMENT.equals(element) ||
-            HTML4.TH_ELEMENT.equals(element)) {
-          // End of a cell
-          state = NULL;
-
-        } else if (HTML4.CAPTION_ELEMENT.equals(element)) { // End caption
-          state = NULL;
-
-        } else if (HTML4.TABLE_ELEMENT.equals(element)) { // End table
-          X.assertTrue(tables > 0);
-          tables--;
-          state = (tables > 0) ? IN_CELL : NULL;
-        }
-      }
-    }
-
-    void seeText(HtmlDocument.Text textNode) {
-      // If we're in a table, but not in a cell or caption, and the
-      // text is not whitespace, add a <TD>
-      if (tables > 0 &&
-          state == NULL &&
-          !textNode.isWhitespace()) {
-        ensureCellState();
-      }
-    }
-
-    void finish() {
-      X.assertTrue(tables == 0);
-      X.assertTrue(state == NULL);
-    }
-
-    // Ensure that we're within a TABLE
-    private void ensureTableState() {
-      if (tables == 0) {
-        push(HTML4.TABLE_ELEMENT);
-
-        HtmlDocument.Tag tableTag =
-          HtmlDocument.createTag(HTML4.TABLE_ELEMENT, null);
-        tree.addStartTag(tableTag);
-
-        tables++;
-      }
-    }
-
-    // Ensure that we're within a TD or TH cell
-    private void ensureCellState() {
-      if (state != IN_CELL) {
-        push(HTML4.TD_ELEMENT);
-
-        HtmlDocument.Tag tdTag = HtmlDocument.createTag(HTML4.TD_ELEMENT, null);
-        tree.addStartTag(tdTag);
-
-        state = IN_CELL;
-      }
-    }
-  }
-
-  /** For testing */
-  public static void main(String[] args) throws IOException {
-    logger.setLevel(Level.FINEST);
-
-    String html = new String(ByteStreams.toByteArray(System.in));
-    HtmlParser parser = new HtmlParser();
-    HtmlDocument doc = parser.parse(html);
-
-    HtmlTreeBuilder builder = new HtmlTreeBuilder();
-    doc.accept(builder);
-    String outputHtml = builder.getTree().getHtml();
-
-    System.out.println(outputHtml);
-  }
-}
\ No newline at end of file
diff --git a/src/com/android/mail/lib/html/parser/HtmlWhitelist.java b/src/com/android/mail/lib/html/parser/HtmlWhitelist.java
deleted file mode 100644
index 836633b..0000000
--- a/src/com/android/mail/lib/html/parser/HtmlWhitelist.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * Copyright (c) 2004, Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.mail.lib.html.parser;
-
-/**
- * HtmlWhitelist is an interface that defines methods required by HtmlParser for
- * looking up accepted HTML elements and attributes.
- *
- * @author sammy@google.com (Sammy Leong)
- */
-public interface HtmlWhitelist {
-  /**
-   * Looks up the HTML.Element object associated with the given element tag
-   * name.
-   *
-   * @param name The tag name of the element to lookup
-   * @return The HTML.Element object associated with the given element tag name,
-   * or null if the given name is not in the whitelist.
-   */
-  HTML.Element lookupElement(String name);
-
-  /**
-   * Looks up the HTML.Attribute object associated with the given attribute
-   * name.
-   *
-   * @param name The name of the attribute to lookup
-   * @return The HTML.Attribute object associated with the given attribute name,
-   * or null if the given name is not in the whitelist.
-   */
-  HTML.Attribute lookupAttribute(String name);
-}
\ No newline at end of file
diff --git a/src/com/android/mail/photo/ContactPhotoFetcher.java b/src/com/android/mail/photo/ContactFetcher.java
similarity index 88%
rename from src/com/android/mail/photo/ContactPhotoFetcher.java
rename to src/com/android/mail/photo/ContactFetcher.java
index 2bb03ca..b7b5557 100644
--- a/src/com/android/mail/photo/ContactPhotoFetcher.java
+++ b/src/com/android/mail/photo/ContactFetcher.java
@@ -20,9 +20,14 @@
 
 import com.android.mail.utils.NotificationUtils;
 
-public interface ContactPhotoFetcher {
+/**
+ * Interface for retrieving contact details for senders (given an account name).
+ */
+public interface ContactFetcher {
+
     NotificationUtils.ContactIconInfo getContactPhoto(
             Context context, String accountName, String senderAddress,
             int idealIconWidth, int idealIconHeight,
             int idealWearableBgWidth, int idealWearableBgHeight);
+
 }
diff --git a/src/com/android/mail/photo/MailPhotoViewActivity.java b/src/com/android/mail/photo/MailPhotoViewActivity.java
index 88807d5..2926d3f 100644
--- a/src/com/android/mail/photo/MailPhotoViewActivity.java
+++ b/src/com/android/mail/photo/MailPhotoViewActivity.java
@@ -23,6 +23,7 @@
 import com.android.ex.photo.Intents;
 import com.android.ex.photo.PhotoViewActivity;
 import com.android.ex.photo.PhotoViewController;
+import com.android.mail.R;
 import com.android.mail.browse.ConversationMessage;
 import com.android.mail.providers.UIProvider;
 
@@ -34,6 +35,7 @@
         MailPhotoViewController.ActivityInterface {
 
     static final String EXTRA_ACCOUNT = MailPhotoViewActivity.class.getName() + "-acct";
+    static final String EXTRA_ACCOUNT_TYPE = MailPhotoViewActivity.class.getName() + "-accttype";
     static final String EXTRA_MESSAGE = MailPhotoViewActivity.class.getName() + "-msg";
     static final String EXTRA_HIDE_EXTRA_OPTION_ONE =
             MailPhotoViewActivity.class.getName() + "-hide-extra-option-one";
@@ -41,19 +43,23 @@
     /**
      * Start a new MailPhotoViewActivity to view the given images.
      *
-     * @param photoIndex The index of the photo to show first.
+     * @param context The context.
+     * @param account The email address of the account.
+     * @param accountType The type of the account.
+     * @param msg The text of the message for this photo.
+     * @param photoIndex The index of the photo within the album.
      */
     public static void startMailPhotoViewActivity(final Context context, final String account,
-            final ConversationMessage msg, final int photoIndex) {
+            final String accountType, final ConversationMessage msg, final int photoIndex) {
         final Intents.PhotoViewIntentBuilder builder =
                 Intents.newPhotoViewIntentBuilder(context,
-                        "com.android.mail.photo.MailPhotoViewActivity");
+                        context.getString(R.string.photo_view_activity));
         builder
                 .setPhotosUri(msg.attachmentListUri.toString())
                 .setProjection(UIProvider.ATTACHMENT_PROJECTION)
                 .setPhotoIndex(photoIndex);
 
-        context.startActivity(wrapIntent(builder.build(), account, msg));
+        context.startActivity(wrapIntent(builder.build(), account, accountType, msg));
     }
 
     /**
@@ -62,28 +68,31 @@
      * @param initialPhotoUri The uri of the photo to show first.
      */
     public static void startMailPhotoViewActivity(final Context context, final String account,
-            final ConversationMessage msg, final String initialPhotoUri) {
+            final String accountType, final ConversationMessage msg, final String initialPhotoUri) {
         context.startActivity(
-                buildMailPhotoViewActivityIntent(context, account, msg, initialPhotoUri));
+                buildMailPhotoViewActivityIntent(context, account, accountType, msg,
+                        initialPhotoUri));
     }
 
     public static Intent buildMailPhotoViewActivityIntent(
-            final Context context, final String account, final ConversationMessage msg,
-            final String initialPhotoUri) {
+            final Context context, final String account, final String accountType,
+            final ConversationMessage msg, final String initialPhotoUri) {
         final Intents.PhotoViewIntentBuilder builder = Intents.newPhotoViewIntentBuilder(
-                context, "com.android.mail.photo.MailPhotoViewActivity");
+                context, context.getString(R.string.photo_view_activity));
 
         builder.setPhotosUri(msg.attachmentListUri.toString())
                 .setProjection(UIProvider.ATTACHMENT_PROJECTION)
                 .setInitialPhotoUri(initialPhotoUri);
 
-        return wrapIntent(builder.build(), account, msg);
+        return wrapIntent(builder.build(), account, accountType, msg);
     }
 
     private static Intent wrapIntent(
-            final Intent intent, final String account, final ConversationMessage msg) {
+            final Intent intent, final String account, final String accountType,
+            final ConversationMessage msg) {
         intent.putExtra(EXTRA_MESSAGE, msg);
         intent.putExtra(EXTRA_ACCOUNT, account);
+        intent.putExtra(EXTRA_ACCOUNT_TYPE, accountType);
         intent.putExtra(EXTRA_HIDE_EXTRA_OPTION_ONE, msg.getConversation() == null);
         return intent;
     }
diff --git a/src/com/android/mail/photo/MailPhotoViewController.java b/src/com/android/mail/photo/MailPhotoViewController.java
index 4945c6b..28a88de 100644
--- a/src/com/android/mail/photo/MailPhotoViewController.java
+++ b/src/com/android/mail/photo/MailPhotoViewController.java
@@ -68,6 +68,7 @@
 
     private static final String LOG_TAG = LogTag.getLogTag();
 
+    private String mAccountType;
     private MenuItem mSaveItem;
     private MenuItem mSaveAllItem;
     private MenuItem mShareItem;
@@ -97,6 +98,7 @@
         mActionHandler.initialize(mMailActivity.getFragmentManager());
 
         final Intent intent = mMailActivity.getIntent();
+        mAccountType = intent.getStringExtra(MailPhotoViewActivity.EXTRA_ACCOUNT_TYPE);
         final String account = intent.getStringExtra(MailPhotoViewActivity.EXTRA_ACCOUNT);
         final Message msg = intent.getParcelableExtra(MailPhotoViewActivity.EXTRA_MESSAGE);
         mHideExtraOptionOne = intent.getBooleanExtra(
@@ -176,12 +178,9 @@
             mShareItem.setEnabled(canShare);
             mPrintItem.setEnabled(canShare);
             mDownloadAgainItem.setEnabled(attachment.canSave() && attachment.isDownloading());
-            if (mHideExtraOptionOne) {
-                mExtraOption1Item.setVisible(false);
-            } else {
-                mExtraOption1Item.setEnabled(
-                        mActionHandler.shouldShowExtraOption1(attachment.getContentType()));
-            }
+            mExtraOption1Item.setVisible(!mHideExtraOptionOne &&
+                    mActionHandler.shouldShowExtraOption1(mAccountType,
+                            attachment.getContentType()));
         } else {
             if (mMenu != null) {
                 mMenu.setGroupEnabled(R.id.photo_view_menu_group, false);
diff --git a/src/com/android/mail/photomanager/LetterTileProvider.java b/src/com/android/mail/photomanager/LetterTileProvider.java
index bf17acb..2593e21 100644
--- a/src/com/android/mail/photomanager/LetterTileProvider.java
+++ b/src/com/android/mail/photomanager/LetterTileProvider.java
@@ -16,9 +16,7 @@
 
 package com.android.mail.photomanager;
 
-import android.content.Context;
 import android.content.res.Resources;
-import android.content.res.TypedArray;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.graphics.Canvas;
@@ -29,6 +27,7 @@
 import android.text.TextUtils;
 
 import com.android.mail.R;
+import com.android.mail.bitmap.ColorPicker;
 import com.android.mail.ui.ImageCanvas.Dimensions;
 import com.android.mail.utils.BitmapUtil;
 import com.android.mail.utils.LogTag;
@@ -42,7 +41,6 @@
  * tile. If there is no English alphabet character (or digit), it creates a
  * bitmap with the default contact avatar.
  */
-@Deprecated
 public class LetterTileProvider {
     private static final String TAG = LogTag.getLogTag();
     private final Bitmap mDefaultBitmap;
@@ -54,20 +52,19 @@
     private final int mTileLetterFontSizeSmall;
     private final int mTileFontColor;
     private final TextPaint mPaint = new TextPaint();
-    private final TypedArray mColors;
-    private final int mColorCount;
-    private final int mDefaultColor;
     private final Canvas mCanvas = new Canvas();
-    private final Dimensions mDims = new Dimensions();
     private final char[] mFirstChar = new char[1];
 
     private static final int POSSIBLE_BITMAP_SIZES = 3;
+    private final ColorPicker mTileColorPicker;
 
-    public LetterTileProvider(Context context) {
-        final Resources res = context.getResources();
-        mTileLetterFontSize = res.getDimensionPixelSize(R.dimen.tile_letter_font_size);
-        mTileLetterFontSizeSmall = res
-                .getDimensionPixelSize(R.dimen.tile_letter_font_size_small);
+    public LetterTileProvider(Resources res) {
+        this(res, new ColorPicker.PaletteColorPicker(res));
+    }
+
+    public LetterTileProvider(Resources res, ColorPicker colorPicker) {
+        mTileLetterFontSize = res.getDimensionPixelSize(R.dimen.tile_letter_font_size_small);
+        mTileLetterFontSizeSmall = res.getDimensionPixelSize(R.dimen.tile_letter_font_size_tiny);
         mTileFontColor = res.getColor(R.color.letter_tile_font_color);
         mSansSerifLight = Typeface.create("sans-serif-light", Typeface.NORMAL);
         mBounds = new Rect();
@@ -77,12 +74,10 @@
         mPaint.setAntiAlias(true);
         mBitmapBackgroundCache = new Bitmap[POSSIBLE_BITMAP_SIZES];
 
-        mDefaultBitmap = BitmapFactory.decodeResource(res, R.drawable.ic_generic_man);
+        mDefaultBitmap = BitmapFactory.decodeResource(res, R.drawable.ic_anonymous_avatar_40dp);
         mDefaultBitmapCache = new Bitmap[POSSIBLE_BITMAP_SIZES];
 
-        mColors = res.obtainTypedArray(R.array.letter_tile_colors);
-        mColorCount = mColors.length();
-        mDefaultColor = res.getColor(R.color.letter_tile_default_color);
+        mTileColorPicker = colorPicker;
     }
 
     public Bitmap getLetterTile(final Dimensions dimensions, final String displayName,
@@ -100,13 +95,14 @@
 
         final Canvas c = mCanvas;
         c.setBitmap(bitmap);
-        c.drawColor(pickColor(address));
+        c.drawColor(mTileColorPicker.pickColor(address));
 
         // If its a valid English alphabet letter,
         // draw the letter on top of the color
         if (isEnglishLetterOrDigit(firstChar)) {
             mFirstChar[0] = Character.toUpperCase(firstChar);
-            mPaint.setTextSize(getFontSize(dimensions.scale));
+            mPaint.setTextSize(
+                    dimensions.fontSize > 0 ? dimensions.fontSize : getFontSize(dimensions.scale));
             mPaint.getTextBounds(mFirstChar, 0, 1, mBounds);
             c.drawText(mFirstChar, 0, 1, 0 + dimensions.width / 2,
                     0 + dimensions.height / 2 + (mBounds.bottom - mBounds.top) / 2, mPaint);
@@ -163,11 +159,4 @@
             return mTileLetterFontSizeSmall;
         }
     }
-
-    private int pickColor(String emailAddress) {
-        // String.hashCode() implementation is not supposed to change across java versions, so
-        // this should guarantee the same email address always maps to the same color.
-        int color = Math.abs(emailAddress.hashCode()) % mColorCount;
-        return mColors.getColor(color, mDefaultColor);
-    }
 }
diff --git a/src/com/android/mail/preferences/MailPrefs.java b/src/com/android/mail/preferences/MailPrefs.java
index cb4eb01..c8d83cd 100644
--- a/src/com/android/mail/preferences/MailPrefs.java
+++ b/src/com/android/mail/preferences/MailPrefs.java
@@ -20,6 +20,7 @@
 import android.content.Context;
 import android.content.SharedPreferences;
 import android.support.annotation.StringDef;
+import android.text.TextUtils;
 
 import com.android.mail.R;
 import com.android.mail.providers.Account;
@@ -112,10 +113,32 @@
 
         public static final String CONVERSATION_OVERVIEW_MODE = "conversation-overview-mode";
 
+        public static final String ALWAYS_LAUNCH_GMAIL_FROM_EMAIL_TOMBSTONE =
+                "always-launch-gmail-from-email-tombstone";
+
         public static final String SNAP_HEADER_MODE = "snap-header-mode";
 
         public static final String RECENT_ACCOUNTS = "recent-accounts";
 
+        public static final String REQUIRED_SANITIZER_VERSION_NUMBER =
+                "required-sanitizer-version-number";
+
+        public static final String MIGRATION_STATE = "migration-state";
+
+        /**
+         * The time in epoch ms when the number of accounts in the app was reported to analytics.
+         */
+        public static final String ANALYTICS_NB_ACCOUNT_LATEST_REPORT =
+                "analytics-send-nb_accounts-epoch";
+
+        // State indicating that no migration has yet occurred.
+        public static final int MIGRATION_STATE_NONE = 0;
+        // State indicating that we have migrated imap and pop accounts, but not
+        // Exchange accounts.
+        public static final int MIGRATION_STATE_IMAP_POP = 1;
+        // State indicating that we have migrated all accounts.
+        public static final int MIGRATION_STATE_ALL = 2;
+
         public static final ImmutableSet<String> BACKUP_KEYS =
                 new ImmutableSet.Builder<String>()
                 .add(DEFAULT_REPLY_ALL)
@@ -143,17 +166,17 @@
     @Retention(RetentionPolicy.SOURCE)
     @StringDef({
             RemovalActions.ARCHIVE,
-            RemovalActions.ARCHIVE_AND_DELETE,
             RemovalActions.DELETE
     })
     public @interface RemovalActionTypes {}
     public static final class RemovalActions {
         public static final String ARCHIVE = "archive";
         public static final String DELETE = "delete";
+        @Deprecated
         public static final String ARCHIVE_AND_DELETE = "archive-and-delete";
     }
 
-    public static MailPrefs get(final Context c) {
+    public static synchronized MailPrefs get(final Context c) {
         if (sInstance == null) {
             sInstance = new MailPrefs(c, PREFS_NAME);
         }
@@ -243,8 +266,13 @@
         }
 
         final SharedPreferences sharedPreferences = getSharedPreferences();
+        final String removalAction =
+                sharedPreferences.getString(PreferenceKeys.REMOVAL_ACTION, null);
+        if (TextUtils.equals(removalAction, RemovalActions.ARCHIVE_AND_DELETE)) {
+            return RemovalActions.ARCHIVE;
+        }
         return sharedPreferences.getString(PreferenceKeys.REMOVAL_ACTION,
-                RemovalActions.ARCHIVE_AND_DELETE);
+                RemovalActions.ARCHIVE);
     }
 
     /**
@@ -501,6 +529,18 @@
         return getSharedPreferences().contains(PreferenceKeys.CONVERSATION_OVERVIEW_MODE);
     }
 
+    public void setAlwaysLaunchGmailFromEmailTombstone(final boolean alwaysLaunchGmail) {
+        getEditor()
+                .putBoolean(PreferenceKeys.ALWAYS_LAUNCH_GMAIL_FROM_EMAIL_TOMBSTONE,
+                        alwaysLaunchGmail)
+                .apply();
+    }
+
+    public boolean getAlwaysLaunchGmailFromEmailTombstone() {
+        return getSharedPreferences()
+                .getBoolean(PreferenceKeys.ALWAYS_LAUNCH_GMAIL_FROM_EMAIL_TOMBSTONE, false);
+    }
+
     public void setSnapHeaderMode(final int snapHeaderMode) {
         getEditor().putInt(PreferenceKeys.SNAP_HEADER_MODE, snapHeaderMode).apply();
     }
@@ -514,6 +554,15 @@
         return mSnapHeaderDefault;
     }
 
+    public int getMigrationState() {
+        return getSharedPreferences()
+                .getInt(PreferenceKeys.MIGRATION_STATE, PreferenceKeys.MIGRATION_STATE_NONE);
+    }
+
+    public void setMigrationState(final int state) {
+        getEditor().putInt(PreferenceKeys.MIGRATION_STATE, state).apply();
+    }
+
     public Set<String> getRecentAccounts() {
         return getSharedPreferences().getStringSet(PreferenceKeys.RECENT_ACCOUNTS, null);
     }
@@ -521,4 +570,38 @@
     public void setRecentAccounts(Set<String> recentAccounts) {
         getEditor().putStringSet(PreferenceKeys.RECENT_ACCOUNTS, recentAccounts).apply();
     }
+
+    /**
+     * Returns the minimum version number of the {@link com.android.mail.utils.HtmlSanitizer} which
+     * is trusted. If the version of the HtmlSanitizer does not meet or exceed this value,
+     * sanitization will be deemed untrustworthy and emails will be displayed in a sandbox that does
+     * not allow script execution.
+     */
+    public int getRequiredSanitizerVersionNumber() {
+        return getSharedPreferences().getInt(PreferenceKeys.REQUIRED_SANITIZER_VERSION_NUMBER, 1);
+    }
+
+    /**
+     * @param versionNumber the minimum version number of the
+     *      {@link com.android.mail.utils.HtmlSanitizer} which produces trusted output
+     */
+    public void setRequiredSanitizerVersionNumber(int versionNumber) {
+        getEditor().putInt(PreferenceKeys.REQUIRED_SANITIZER_VERSION_NUMBER, versionNumber).apply();
+    }
+
+    /**
+     * Returns the latest time the number of accounts in the application was sent to Analyitcs.
+     * @return the datetime in epoch milliseconds.
+     */
+    public long getNbAccountsLatestReport() {
+        return getSharedPreferences().getLong(PreferenceKeys.ANALYTICS_NB_ACCOUNT_LATEST_REPORT, 0);
+    }
+
+    /**
+     * Set the latest time the number of accounts in the application was sent to Analytics.
+     */
+    public void setNbAccountsLatestReport(long timeMs) {
+        getEditor().putLong(
+                PreferenceKeys.ANALYTICS_NB_ACCOUNT_LATEST_REPORT, timeMs);
+    }
 }
diff --git a/src/com/android/mail/print/PrintUtils.java b/src/com/android/mail/print/PrintUtils.java
index ee04d9c..ac41fb3 100644
--- a/src/com/android/mail/print/PrintUtils.java
+++ b/src/com/android/mail/print/PrintUtils.java
@@ -85,21 +85,22 @@
      *
      * Sets up a webview to perform the printing work.
      */
-    @SuppressLint("NewApi")
+    @SuppressLint({"NewApi", "SetJavaScriptEnabled"})
     private static void printHtml(Context context, String html,
             String baseUri, String subject, boolean useJavascript) {
         final WebView webView = new WebView(context);
         final WebSettings settings = webView.getSettings();
         settings.setBlockNetworkImage(false);
         settings.setJavaScriptEnabled(useJavascript);
-        webView.loadDataWithBaseURL(baseUri, html,
-                "text/html", "utf-8", null);
+        webView.loadDataWithBaseURL(baseUri, html, "text/html", "utf-8", null);
         final PrintManager printManager =
                 (PrintManager) context.getSystemService(Context.PRINT_SERVICE);
 
         final String printJobName = buildPrintJobName(context, subject);
         printManager.print(printJobName,
-                webView.createPrintDocumentAdapter(),
+                Utils.isRunningLOrLater() ?
+                        webView.createPrintDocumentAdapter(printJobName) :
+                        webView.createPrintDocumentAdapter(),
                 new PrintAttributes.Builder().build());
     }
 
@@ -160,7 +161,8 @@
         final long when = message.dateReceivedMs;
         final String date = dateBuilder.formatDateTimeForPrinting(when);
 
-        templates.appendMessage(fromAddress.getPersonal(), fromAddress.getAddress(), date,
+        templates.appendMessage(fromAddress == null ? "" : fromAddress.getPersonal(),
+                fromAddress == null ? "" : fromAddress.getAddress(), date,
                 renderRecipients(res, addressCache, message), message.getBodyAsHtml(),
                 renderAttachments(context, res, message));
     }
diff --git a/src/com/android/mail/providers/Account.java b/src/com/android/mail/providers/Account.java
index a4d7b14..5a53225 100644
--- a/src/com/android/mail/providers/Account.java
+++ b/src/com/android/mail/providers/Account.java
@@ -18,7 +18,6 @@
 
 import android.content.ContentResolver;
 import android.content.ContentValues;
-import android.content.Context;
 import android.database.Cursor;
 import android.database.MatrixCursor;
 import android.net.Uri;
@@ -26,16 +25,16 @@
 import android.os.Parcelable;
 import android.text.TextUtils;
 
-import com.android.mail.R;
 import com.android.mail.content.CursorCreator;
 import com.android.mail.content.ObjectCursor;
-import com.android.mail.lib.base.Preconditions;
 import com.android.mail.providers.UIProvider.AccountCapabilities;
 import com.android.mail.providers.UIProvider.AccountColumns;
 import com.android.mail.providers.UIProvider.SyncStatus;
 import com.android.mail.utils.LogTag;
 import com.android.mail.utils.LogUtils;
 import com.android.mail.utils.Utils;
+import com.google.android.mail.common.base.Preconditions;
+import com.google.android.mail.common.base.Strings;
 import com.google.common.base.Objects;
 import com.google.common.collect.Lists;
 
@@ -74,13 +73,11 @@
     /**
      * Account type. MUST MATCH SYSTEM ACCOUNT MANAGER TYPE
      */
-
     private final String type;
 
     /**
      * Cached android.accounts.Account based on the above two values
      */
-
     private android.accounts.Account amAccount;
 
     /**
@@ -173,10 +170,12 @@
     public final Uri composeIntentUri;
 
     public final String mimeType;
+
     /**
      * URI for recent folders for this account.
      */
     public final Uri recentFolderListUri;
+
     /**
      * The color used for this account in combined view (Email)
      */
@@ -185,6 +184,7 @@
      * URI for default recent folders for this account, if any.
      */
     public final Uri defaultRecentFolderListUri;
+
     /**
      * Settings object for this account.
      */
@@ -233,6 +233,16 @@
     public final String settingsFragmentClass;
 
     /**
+     * Nonzero value indicates that this account is on a security hold.
+     */
+    public final int securityHold;
+
+    /**
+     * Uri to launch the account security activity.
+     */
+    public final String accountSecurityUri;
+
+    /**
      * Transient cache of parsed {@link #accountFromAddresses}, plus an entry for the main account
      * address.
      */
@@ -285,6 +295,8 @@
             json.put(AccountColumns.SYNC_AUTHORITY, syncAuthority);
             json.put(AccountColumns.QUICK_RESPONSE_URI, quickResponseUri);
             json.put(AccountColumns.SETTINGS_FRAGMENT_CLASS, settingsFragmentClass);
+            json.put(AccountColumns.SECURITY_HOLD, securityHold);
+            json.put(AccountColumns.ACCOUNT_SECURITY_URI, accountSecurityUri);
             if (settings != null) {
                 json.put(SETTINGS_KEY, settings.toJSON());
             }
@@ -386,8 +398,7 @@
         allFolderListUri = Utils.getValidUri(json
                 .optString(AccountColumns.ALL_FOLDER_LIST_URI));
         searchUri = Utils.getValidUri(json.optString(AccountColumns.SEARCH_URI));
-        accountFromAddresses = json.optString(AccountColumns.ACCOUNT_FROM_ADDRESSES,
-                "");
+        accountFromAddresses = json.optString(AccountColumns.ACCOUNT_FROM_ADDRESSES, "");
         expungeMessageUri = Utils.getValidUri(json
                 .optString(AccountColumns.EXPUNGE_MESSAGE_URI));
         undoUri = Utils.getValidUri(json.optString(AccountColumns.UNDO_URI));
@@ -418,6 +429,8 @@
         syncAuthority = json.optString(AccountColumns.SYNC_AUTHORITY);
         quickResponseUri = Utils.getValidUri(json.optString(AccountColumns.QUICK_RESPONSE_URI));
         settingsFragmentClass = json.optString(AccountColumns.SETTINGS_FRAGMENT_CLASS, "");
+        securityHold = json.optInt(AccountColumns.SECURITY_HOLD);
+        accountSecurityUri = json.optString(AccountColumns.ACCOUNT_SECURITY_URI);
 
         final Settings jsonSettings = Settings.newInstance(json.optJSONObject(SETTINGS_KEY));
         if (jsonSettings != null) {
@@ -437,8 +450,8 @@
                 cursor.getColumnIndex(UIProvider.AccountColumns.ACCOUNT_MANAGER_NAME));
         accountId = cursor.getString(
                 cursor.getColumnIndex(UIProvider.AccountColumns.ACCOUNT_ID));
-        accountFromAddresses = cursor.getString(
-                cursor.getColumnIndex(UIProvider.AccountColumns.ACCOUNT_FROM_ADDRESSES));
+        accountFromAddresses = Strings.nullToEmpty(cursor.getString(
+                cursor.getColumnIndex(UIProvider.AccountColumns.ACCOUNT_FROM_ADDRESSES)));
 
         final int capabilitiesColumnIndex =
                 cursor.getColumnIndex(UIProvider.AccountColumns.CAPABILITIES);
@@ -500,6 +513,13 @@
                 cursor.getColumnIndex(AccountColumns.QUICK_RESPONSE_URI)));
         settingsFragmentClass = cursor.getString(cursor.getColumnIndex(
                 AccountColumns.SETTINGS_FRAGMENT_CLASS));
+        final int securityHoldIndex = cursor.getColumnIndex(AccountColumns.SECURITY_HOLD);
+        securityHold = (securityHoldIndex >= 0 ?
+                cursor.getInt(cursor.getColumnIndex(AccountColumns.SECURITY_HOLD)) : 0);
+        final int accountSecurityIndex =
+                cursor.getColumnIndex(AccountColumns.ACCOUNT_SECURITY_URI);
+        accountSecurityUri = (accountSecurityIndex >= 0 ?
+                cursor.getString(accountSecurityIndex) : "");
         settings = new Settings(cursor);
     }
 
@@ -566,6 +586,13 @@
         return !isAccountInitializationRequired() && !isAccountSyncRequired();
     }
 
+    /**
+     * @return The account manager account type.
+     */
+    public String getType() {
+        return type;
+    }
+
     protected Account(Parcel in, ClassLoader loader) {
         displayName = in.readString();
         senderName = in.readString();
@@ -602,6 +629,8 @@
         }
         quickResponseUri = in.readParcelable(null);
         settingsFragmentClass = in.readString();
+        securityHold = in.readInt();
+        accountSecurityUri = in.readString();
         final int hasSettings = in.readInt();
         if (hasSettings == 0) {
             LogUtils.e(LOG_TAG, new Throwable(), "Unexpected null settings in Account(Parcel)");
@@ -646,6 +675,8 @@
         dest.writeString(syncAuthority);
         dest.writeParcelable(quickResponseUri, 0);
         dest.writeString(settingsFragmentClass);
+        dest.writeInt(securityHold);
+        dest.writeString(accountSecurityUri);
         if (settings == null) {
             LogUtils.e(LOG_TAG, "unexpected null settings object in writeToParcel");
             dest.writeInt(0);
@@ -710,6 +741,8 @@
                 Objects.equal(syncAuthority, other.syncAuthority) &&
                 Objects.equal(quickResponseUri, other.quickResponseUri) &&
                 Objects.equal(settingsFragmentClass, other.settingsFragmentClass) &&
+                Objects.equal(securityHold, other.securityHold) &&
+                Objects.equal(accountSecurityUri, other.accountSecurityUri) &&
                 Objects.equal(settings, other.settings);
     }
 
@@ -762,7 +795,9 @@
                 updateSettingsUri,
                 enableMessageTransforms,
                 syncAuthority,
-                quickResponseUri);
+                quickResponseUri,
+                securityHold,
+                accountSecurityUri);
     }
 
     /**
@@ -924,6 +959,8 @@
         map.put(AccountColumns.SYNC_AUTHORITY, syncAuthority);
         map.put(AccountColumns.QUICK_RESPONSE_URI, quickResponseUri);
         map.put(AccountColumns.SETTINGS_FRAGMENT_CLASS, settingsFragmentClass);
+        map.put(AccountColumns.SECURITY_HOLD, securityHold);
+        map.put(AccountColumns.ACCOUNT_SECURITY_URI, accountSecurityUri);
         settings.getValueMap(map);
 
         return map;
diff --git a/src/com/android/mail/providers/Conversation.java b/src/com/android/mail/providers/Conversation.java
index ee985b8..2f4a32c 100644
--- a/src/com/android/mail/providers/Conversation.java
+++ b/src/com/android/mail/providers/Conversation.java
@@ -261,8 +261,6 @@
 
     };
 
-    public static final Uri MOVE_CONVERSATIONS_URI = Uri.parse("content://moveconversations");
-
     /**
      * The column that needs to be updated to change the folders for a conversation.
      */
@@ -759,6 +757,19 @@
     }
 
     /**
+     * Returns {@code true} if the conversation is in the trash folder.
+     */
+    public boolean isInTrash() {
+        for (Folder folder : getRawFolders()) {
+            if (folder.isTrash()) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
      * Create a human-readable string of all the conversations
      * @param collection Any collection of conversations
      * @return string with a human readable representation of the conversations.
diff --git a/src/com/android/mail/providers/Folder.java b/src/com/android/mail/providers/Folder.java
index 9e02db9..9b6fa50 100644
--- a/src/com/android/mail/providers/Folder.java
+++ b/src/com/android/mail/providers/Folder.java
@@ -22,13 +22,16 @@
 import android.graphics.PorterDuff;
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.PaintDrawable;
+import android.graphics.drawable.StateListDrawable;
 import android.net.Uri;
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.text.TextUtils;
+import android.util.StateSet;
 import android.view.View;
 import android.widget.ImageView;
 
+import com.android.mail.R;
 import com.android.mail.content.CursorCreator;
 import com.android.mail.content.ObjectCursorLoader;
 import com.android.mail.providers.UIProvider.FolderType;
@@ -357,13 +360,12 @@
         this.lastSyncResult = lastSyncResult;
         this.type = type;
         this.iconResId = iconResId;
-        this.notificationIconResId = notificationIconResId;
         this.bgColor = bgColor;
         this.fgColor = fgColor;
-        if (bgColor != null) {
+        if (!TextUtils.isEmpty(bgColor)) {
             this.bgColorInt = Integer.parseInt(bgColor);
         }
-        if (fgColor != null) {
+        if (!TextUtils.isEmpty(fgColor)) {
             this.fgColorInt = Integer.parseInt(fgColor);
         }
         this.loadMoreUri = loadMoreUri;
@@ -397,13 +399,12 @@
         lastSyncResult = cursor.getInt(UIProvider.FOLDER_LAST_SYNC_RESULT_COLUMN);
         type = cursor.getInt(UIProvider.FOLDER_TYPE_COLUMN);
         iconResId = cursor.getInt(UIProvider.FOLDER_ICON_RES_ID_COLUMN);
-        notificationIconResId = cursor.getInt(UIProvider.FOLDER_NOTIFICATION_ICON_RES_ID_COLUMN);
         bgColor = cursor.getString(UIProvider.FOLDER_BG_COLOR_COLUMN);
         fgColor = cursor.getString(UIProvider.FOLDER_FG_COLOR_COLUMN);
-        if (bgColor != null) {
+        if (!TextUtils.isEmpty(bgColor)) {
             bgColorInt = Integer.parseInt(bgColor);
         }
-        if (fgColor != null) {
+        if (!TextUtils.isEmpty(fgColor)) {
             fgColorInt = Integer.parseInt(fgColor);
         }
         String loadMore = cursor.getString(UIProvider.FOLDER_LOAD_MORE_URI_COLUMN);
@@ -456,13 +457,12 @@
         lastSyncResult = in.readInt();
         type = in.readInt();
         iconResId = in.readInt();
-        notificationIconResId = in.readInt();
         bgColor = in.readString();
         fgColor = in.readString();
-        if (bgColor != null) {
+        if (!TextUtils.isEmpty(bgColor)) {
             bgColorInt = Integer.parseInt(bgColor);
         }
-        if (fgColor != null) {
+        if (!TextUtils.isEmpty(fgColor)) {
             fgColorInt = Integer.parseInt(fgColor);
         }
         loadMoreUri = in.readParcelable(loader);
@@ -493,7 +493,6 @@
         dest.writeInt(lastSyncResult);
         dest.writeInt(type);
         dest.writeInt(iconResId);
-        dest.writeInt(notificationIconResId);
         dest.writeString(bgColor);
         dest.writeString(fgColor);
         dest.writeParcelable(loadMoreUri, 0);
@@ -640,20 +639,45 @@
         }
     }
 
+    private static final int[] ACTIVATED_STATE_LIST = new int[] {android.R.attr.state_activated};
+
     public static void setIcon(Folder folder, ImageView iconView) {
         if (iconView == null) {
             return;
         }
-        final int icon = folder.iconResId;
+        int icon = folder.iconResId;
+
+        // If we're using the default folders, make sure we show the parent icon
+        if (icon == R.drawable.ic_drawer_folder_24dp && folder.hasChildren) {
+            icon = R.drawable.ic_folder_parent_24dp;
+        }
+
         if (icon > 0) {
-            final Drawable iconDrawable = iconView.getResources().getDrawable(icon);
-            if (iconDrawable != null &&
-                    folder.supportsCapability(UIProvider.FolderCapabilities.TINT_ICON)) {
-                // Default multiply by white
-                iconDrawable.mutate().setColorFilter(folder.getBackgroundColor(0xFFFFFF),
-                        PorterDuff.Mode.MULTIPLY);
+            final Drawable defaultIconDrawable = iconView.getResources().getDrawable(icon);
+            if (defaultIconDrawable != null) {
+                final Drawable iconDrawable;
+                if (folder.supportsCapability(UIProvider.FolderCapabilities.TINT_ICON)) {
+                    // Default multiply by white
+                    defaultIconDrawable.mutate().setColorFilter(folder.getBackgroundColor(0xFFFFFF),
+                            PorterDuff.Mode.MULTIPLY);
+                    iconDrawable = defaultIconDrawable;
+                } else {
+                    final StateListDrawable listDrawable = new StateListDrawable();
+
+                    final Drawable activatedIconDrawable =
+                            iconView.getResources().getDrawable(icon);
+                    activatedIconDrawable.mutate().setColorFilter(0xff000000,
+                            PorterDuff.Mode.MULTIPLY);
+
+                    listDrawable.addState(ACTIVATED_STATE_LIST, activatedIconDrawable);
+                    listDrawable.addState(StateSet.WILD_CARD, defaultIconDrawable);
+
+                    iconDrawable = listDrawable;
+                }
+                iconView.setImageDrawable(iconDrawable);
+            } else {
+                iconView.setImageDrawable(null);
             }
-            iconView.setImageDrawable(iconDrawable);
         } else {
             LogUtils.e(LogUtils.TAG, "No icon returned for folder %s", folder);
         }
@@ -667,11 +691,11 @@
     }
 
     public int getBackgroundColor(int defaultColor) {
-        return bgColor != null ? bgColorInt : defaultColor;
+        return !TextUtils.isEmpty(bgColor) ? bgColorInt : defaultColor;
     }
 
     public int getForegroundColor(int defaultColor) {
-        return fgColor != null ? fgColorInt : defaultColor;
+        return !TextUtils.isEmpty(fgColor) ? fgColorInt : defaultColor;
     }
 
     /**
@@ -889,10 +913,10 @@
         f.iconResId = Integer.parseInt(split[index++]);
         f.bgColor = split[index++];
         f.fgColor = split[index++];
-        if (f.bgColor != null) {
+        if (!TextUtils.isEmpty(f.bgColor)) {
             f.bgColorInt = Integer.parseInt(f.bgColor);
         }
-        if (f.fgColor != null) {
+        if (!TextUtils.isEmpty(f.fgColor)) {
             f.fgColorInt = Integer.parseInt(f.fgColor);
         }
         f.loadMoreUri = getValidUri(split[index++]);
diff --git a/src/com/android/mail/providers/MailAppProvider.java b/src/com/android/mail/providers/MailAppProvider.java
index d0b6863..9aec329 100644
--- a/src/com/android/mail/providers/MailAppProvider.java
+++ b/src/com/android/mail/providers/MailAppProvider.java
@@ -38,7 +38,10 @@
 import com.android.mail.utils.LogTag;
 import com.android.mail.utils.LogUtils;
 import com.android.mail.utils.MatrixCursorWithExtra;
+import com.android.mail.utils.RankedComparator;
+import com.google.android.mail.common.base.Function;
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 
@@ -46,6 +49,8 @@
 import org.json.JSONException;
 import org.json.JSONObject;
 
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -89,6 +94,13 @@
     private final Map<CursorLoader, Boolean> mAccountsLoaded = Maps.newHashMap();
 
     private ContentResolver mResolver;
+
+    /**
+     * Compares {@link AccountCacheEntry} based on the position of the
+     * {@link AccountCacheEntry#mAccountsQueryUri} in {@code R.array.account_providers}.
+     */
+    private Comparator<AccountCacheEntry> mAccountComparator;
+
     private static String sAuthority;
     private static MailAppProvider sInstance;
 
@@ -101,13 +113,6 @@
     protected abstract String getAuthority();
 
     /**
-     * Authority for the suggestions provider. Email and Gmail must specify different authorities,
-     * much like the implementation of {@link #getAuthority()}.
-     * @return the suggestion authority associated with this provider.
-     */
-    public abstract String getSuggestionAuthority();
-
-    /**
      * Allows the implementing provider to specify an intent that should be used in a call to
      * {@link Context#startActivityForResult(android.content.Intent)} when the account provider
      * doesn't return any accounts.
@@ -153,6 +158,19 @@
         // Load the uris for the account list
         final String[] accountQueryUris = res.getStringArray(R.array.account_providers);
 
+        final Function<AccountCacheEntry, String> accountQueryUriExtractor =
+                new Function<AccountCacheEntry, String>() {
+                    @Override
+                    public String apply(AccountCacheEntry accountCacheEntry) {
+                        if (accountCacheEntry == null) {
+                            return null;
+                        }
+                        return accountCacheEntry.mAccountsQueryUri.toString();
+                    }
+                };
+        mAccountComparator = new RankedComparator<AccountCacheEntry, String>(
+                accountQueryUris, accountQueryUriExtractor);
+
         for (String accountQueryUri : accountQueryUris) {
             final Uri uri = Uri.parse(accountQueryUri);
             addAccountsForUriAsync(uri);
@@ -183,12 +201,16 @@
         final Bundle extras = new Bundle();
         extras.putInt(AccountCursorExtraKeys.ACCOUNTS_LOADED, allAccountsLoaded() ? 1 : 0);
 
-        // Make a copy of the account cache
         final List<AccountCacheEntry> accountList;
         synchronized (mAccountCache) {
-            accountList = ImmutableList.copyOf(mAccountCache.values());
+            accountList = Lists.newArrayList(mAccountCache.values());
         }
 
+        // The order in which providers respond will affect the order of accounts. Because
+        // mAccountComparator only compares mAccountsQueryUri it will ensure that they are always
+        // sorted first based on that and later based on order returned by each provider.
+        Collections.sort(accountList, mAccountComparator);
+
         final MatrixCursor cursor =
                 new MatrixCursorWithExtra(resultProjection, accountList.size(), extras);
 
@@ -543,6 +565,5 @@
                 throw new IllegalArgumentException(e);
             }
         }
-
     }
 }
diff --git a/src/com/android/mail/providers/Message.java b/src/com/android/mail/providers/Message.java
index dce414b..b90f76b 100644
--- a/src/com/android/mail/providers/Message.java
+++ b/src/com/android/mail/providers/Message.java
@@ -243,14 +243,16 @@
 
     /**
      * Helper equality function to check if the two Message objects are equal in terms of
-     * the fields that the user can input from ComposeActivity. This is primarily used to
-     * ensure draft preview/composition are synced.
+     * the fields that are visible in ConversationView.
+     *
      * @param o the Message being compared to
      * @return True if they are equal in fields, false otherwise
      */
     public boolean isEqual(Message o) {
         return TextUtils.equals(this.getFrom(), o.getFrom()) &&
                 this.sendingState == o.sendingState &&
+                this.starred == o.starred &&
+                this.read == o.read &&
                 TextUtils.equals(this.getTo(), o.getTo()) &&
                 TextUtils.equals(this.getCc(), o.getCc()) &&
                 TextUtils.equals(this.getBcc(), o.getBcc()) &&
@@ -655,7 +657,7 @@
     public int getAttachmentCount(boolean includeInline) {
         // If include inline, just return the full list count.
         if (includeInline) {
-            return mAttachments.size();
+            return getAttachments().size();
         }
 
         // Otherwise, iterate through the attachment list,
diff --git a/src/com/android/mail/providers/SearchRecentSuggestionsProvider.java b/src/com/android/mail/providers/SearchRecentSuggestionsProvider.java
index 99ac4df..6b172ee 100644
--- a/src/com/android/mail/providers/SearchRecentSuggestionsProvider.java
+++ b/src/com/android/mail/providers/SearchRecentSuggestionsProvider.java
@@ -18,37 +18,37 @@
 package com.android.mail.providers;
 
 import android.app.SearchManager;
-import android.content.ContentProvider;
 import android.content.ContentResolver;
 import android.content.ContentValues;
 import android.content.Context;
-import android.content.UriMatcher;
 import android.database.Cursor;
 import android.database.sqlite.SQLiteDatabase;
 import android.database.sqlite.SQLiteOpenHelper;
-import android.net.Uri;
-import android.text.TextUtils;
+import android.support.annotation.Nullable;
 
 import com.android.mail.R;
 
 import java.util.ArrayList;
 
-public class SearchRecentSuggestionsProvider extends ContentProvider {
+public class SearchRecentSuggestionsProvider {
     /*
      * String used to delimit different parts of a query.
      */
     public static final String QUERY_TOKEN_SEPARATOR = " ";
 
-    // client-provided configuration values
-    private String mAuthority;
-    private int mMode;
-
     // general database configuration and tables
     private SQLiteOpenHelper mOpenHelper;
-    private static final String sDatabaseName = "suggestions.db";
-    private static final String sSuggestions = "suggestions";
-    private static final String ORDER_BY = "date DESC";
-    private static final String NULL_COLUMN = "query";
+    private static final String DATABASE_NAME = "suggestions.db";
+    private static final String SUGGESTIONS_TABLE = "suggestions";
+
+    private static final String QUERY =
+            " SELECT _id" +
+            "   , display1 AS " + SearchManager.SUGGEST_COLUMN_TEXT_1 +
+            "   , ? || query AS " + SearchManager.SUGGEST_COLUMN_QUERY +
+            "   , ? AS " + SearchManager.SUGGEST_COLUMN_ICON_1 +
+            " FROM " + SUGGESTIONS_TABLE +
+            " WHERE display1 LIKE ?" +
+            " ORDER BY date DESC";
 
     // Table of database versions.  Don't forget to update!
     // NOTE:  These version values are shifted left 8 bits (x 256) in order to create space for
@@ -56,23 +56,35 @@
     //
     // 1      original implementation with queries, and 1 or 2 display columns
     // 1->2   added UNIQUE constraint to display1 column
-    private static final int DATABASE_VERSION = 2 * 256;
+    // 2->3   <redacted> being dumb and accidentally upgraded, this should be ignored.
+    private static final int DATABASE_VERSION = 3 * 256;
 
-    /**
-     * This mode bit configures the database to record recent queries.  <i>required</i>
-     *
-     * @see #setupSuggestions(String, int)
-     */
-    public static final int DATABASE_MODE_QUERIES = 1;
+    private static final int DATABASE_VERSION_2 = 2 * 256;
+    private static final int DATABASE_VERSION_3 = 3 * 256;
 
-    // Uri and query support
-    private static final int URI_MATCH_SUGGEST = 1;
+    private String mHistoricalIcon;
 
-    private Uri mSuggestionsUri;
-    private UriMatcher mUriMatcher;
+    protected final Context mContext;
+    private ArrayList<String> mFullQueryTerms;
 
-    private String mSuggestSuggestionClause;
-    private String[] mSuggestionProjection;
+    private final Object mDbLock = new Object();
+    private boolean mClosed;
+
+    public SearchRecentSuggestionsProvider(Context context) {
+        mContext = context;
+        mOpenHelper = new DatabaseHelper(mContext, DATABASE_VERSION);
+
+        // The URI of the icon that we will include on every suggestion here.
+        mHistoricalIcon = ContentResolver.SCHEME_ANDROID_RESOURCE + "://"
+                + mContext.getPackageName() + "/" + R.drawable.ic_history_24dp;
+    }
+
+    public void cleanup() {
+        synchronized (mDbLock) {
+            mOpenHelper.close();
+            mClosed = true;
+        }
+    }
 
     /**
      * Builds the database.  This version has extra support for using the version field
@@ -83,193 +95,35 @@
      */
     private static class DatabaseHelper extends SQLiteOpenHelper {
         public DatabaseHelper(Context context, int newVersion) {
-            super(context, sDatabaseName, null, newVersion);
+            super(context, DATABASE_NAME, null, newVersion);
         }
 
         @Override
         public void onCreate(SQLiteDatabase db) {
-            StringBuilder builder = new StringBuilder();
-            builder.append("CREATE TABLE suggestions (" +
+            final String create = "CREATE TABLE suggestions (" +
                     "_id INTEGER PRIMARY KEY" +
                     ",display1 TEXT UNIQUE ON CONFLICT REPLACE" +
                     ",query TEXT" +
                     ",date LONG" +
-                    ");");
-            db.execSQL(builder.toString());
+                    ");";
+            db.execSQL(create);
         }
 
         @Override
         public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+            // When checking the old version clear the last 8 bits
+            oldVersion = oldVersion & ~0xff;
+            newVersion = newVersion & ~0xff;
+            if (oldVersion == DATABASE_VERSION_2 && newVersion == DATABASE_VERSION_3) {
+                // Oops, didn't mean to upgrade this database. Ignore this upgrade.
+                return;
+            }
             db.execSQL("DROP TABLE IF EXISTS suggestions");
             onCreate(db);
         }
     }
 
     /**
-     * In order to use this class, you must extend it, and call this setup function from your
-     * constructor.  In your application or activities, you must provide the same values when
-     * you create the {@link android.provider.SearchRecentSuggestions} helper.
-     *
-     * @param authority This must match the authority that you've declared in your manifest.
-     * @param mode You can use mode flags here to determine certain functional aspects of your
-     * database.  Note, this value should not change from run to run, because when it does change,
-     * your suggestions database may be wiped.
-     *
-     * @see #DATABASE_MODE_QUERIES
-     */
-    protected void setupSuggestions(String authority, int mode) {
-        if (TextUtils.isEmpty(authority) ||
-                ((mode & DATABASE_MODE_QUERIES) == 0)) {
-            throw new IllegalArgumentException();
-        }
-
-        // saved values
-        mAuthority = new String(authority);
-        mMode = mode;
-
-        // derived values
-        mSuggestionsUri = Uri.parse("content://" + mAuthority + "/suggestions");
-        mUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
-        mUriMatcher.addURI(mAuthority, SearchManager.SUGGEST_URI_PATH_QUERY, URI_MATCH_SUGGEST);
-
-        // The URI of the icon that we will include on every suggestion here.
-        final String historicalIcon = ContentResolver.SCHEME_ANDROID_RESOURCE + "://"
-                + getContext().getPackageName() + "/" + R.drawable.ic_history_holo_light;
-
-        mSuggestSuggestionClause = "display1 LIKE ?";
-        mSuggestionProjection = new String [] {
-                "_id",
-                "display1 AS " + SearchManager.SUGGEST_COLUMN_TEXT_1,
-                "query AS " + SearchManager.SUGGEST_COLUMN_QUERY,
-                "'" + historicalIcon + "' AS " + SearchManager.SUGGEST_COLUMN_ICON_1
-        };
-    }
-
-    /**
-     * This method is provided for use by the ContentResolver.  Do not override, or directly
-     * call from your own code.
-     */
-    @Override
-    public int delete(Uri uri, String selection, String[] selectionArgs) {
-        SQLiteDatabase db = mOpenHelper.getWritableDatabase();
-
-        final int length = uri.getPathSegments().size();
-        if (length != 1) {
-            throw new IllegalArgumentException("Unknown Uri");
-        }
-
-        final String base = uri.getPathSegments().get(0);
-        int count = 0;
-        if (base.equals(sSuggestions)) {
-            count = db.delete(sSuggestions, selection, selectionArgs);
-        } else {
-            throw new IllegalArgumentException("Unknown Uri");
-        }
-        getContext().getContentResolver().notifyChange(uri, null);
-        return count;
-    }
-
-    /**
-     * This method is provided for use by the ContentResolver.  Do not override, or directly
-     * call from your own code.
-     */
-    @Override
-    public String getType(Uri uri) {
-        if (mUriMatcher.match(uri) == URI_MATCH_SUGGEST) {
-            return SearchManager.SUGGEST_MIME_TYPE;
-        }
-        int length = uri.getPathSegments().size();
-        if (length >= 1) {
-            String base = uri.getPathSegments().get(0);
-            if (base.equals(sSuggestions)) {
-                if (length == 1) {
-                    return "vnd.android.cursor.dir/suggestion";
-                } else if (length == 2) {
-                    return "vnd.android.cursor.item/suggestion";
-                }
-            }
-        }
-        throw new IllegalArgumentException("Unknown Uri");
-    }
-
-    /**
-     * This method is provided for use by the ContentResolver.  Do not override, or directly
-     * call from your own code.
-     */
-    @Override
-    public Uri insert(Uri uri, ContentValues values) {
-        SQLiteDatabase db = mOpenHelper.getWritableDatabase();
-
-        int length = uri.getPathSegments().size();
-        if (length < 1) {
-            throw new IllegalArgumentException("Unknown Uri");
-        }
-        // Note:  This table has on-conflict-replace semantics, so insert() may actually replace()
-        long rowID = -1;
-        String base = uri.getPathSegments().get(0);
-        Uri newUri = null;
-        if (base.equals(sSuggestions)) {
-            if (length == 1) {
-                rowID = db.insert(sSuggestions, NULL_COLUMN, values);
-                if (rowID > 0) {
-                    newUri = Uri.withAppendedPath(mSuggestionsUri, String.valueOf(rowID));
-                }
-            }
-        }
-        if (rowID < 0) {
-            throw new IllegalArgumentException("Unknown Uri");
-        }
-        getContext().getContentResolver().notifyChange(newUri, null);
-        return newUri;
-    }
-
-    /**
-     * This method is provided for use by the ContentResolver.  Do not override, or directly
-     * call from your own code.
-     */
-    @Override
-    public boolean onCreate() {
-        if (mAuthority == null || mMode == 0) {
-            throw new IllegalArgumentException("Provider not configured");
-        }
-        int mWorkingDbVersion = DATABASE_VERSION + mMode;
-        mOpenHelper = new DatabaseHelper(getContext(), mWorkingDbVersion);
-
-        return true;
-    }
-
-    private ArrayList<String> mFullQueryTerms;
-
-    /**
-     *  Copy the projection, and change the query field alone.
-     * @param selectionArgs
-     * @return projection
-     */
-    private String[] createProjection(String[] selectionArgs) {
-        String[] newProjection = new String[mSuggestionProjection.length];
-        String queryAs;
-        int fullSize = (mFullQueryTerms != null) ? mFullQueryTerms.size() : 0;
-        if (fullSize > 0) {
-            String realQuery = "'";
-            for (int i = 0; i < fullSize; i++) {
-                realQuery+= mFullQueryTerms.get(i);
-                if (i < fullSize -1) {
-                    realQuery += QUERY_TOKEN_SEPARATOR;
-                }
-            }
-            queryAs = realQuery + " ' || query AS " + SearchManager.SUGGEST_COLUMN_QUERY;
-        } else {
-            queryAs = "query AS " + SearchManager.SUGGEST_COLUMN_QUERY;
-        }
-        for (int i = 0; i < mSuggestionProjection.length; i++) {
-            newProjection[i] = mSuggestionProjection[i];
-        }
-        // Assumes that newProjection[length-2] is the query field.
-        newProjection[mSuggestionProjection.length - 2] = queryAs;
-        return newProjection;
-    }
-
-    /**
      * Set the other query terms to be included in the user's query.
      * These are in addition to what is being looked up for suggestions.
      * @param terms
@@ -278,44 +132,63 @@
         mFullQueryTerms = terms;
     }
 
-    /**
-     * This method is provided for use by the ContentResolver. Do not override,
-     * or directly call from your own code.
-     */
-    // TODO: Confirm no injection attacks here, or rewrite.
-    @Override
-    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
-            String sortOrder) {
-        SQLiteDatabase db = mOpenHelper.getReadableDatabase();
-
-        // special case for actual suggestions (from search manager)
-        String suggestSelection;
-        String[] myArgs;
-        if (TextUtils.isEmpty(selectionArgs[0])) {
-            suggestSelection = null;
-            myArgs = null;
-        } else {
-            String like = "%" + selectionArgs[0] + "%";
-            myArgs = new String[] { like };
-            suggestSelection = mSuggestSuggestionClause;
+    private @Nullable SQLiteDatabase getDatabase(boolean readOnly) {
+        synchronized (mDbLock) {
+            if (!mClosed) {
+                return readOnly ? mOpenHelper.getReadableDatabase() :
+                        mOpenHelper.getWritableDatabase();
+            }
         }
-        // Suggestions are always performed with the default sort order
-        // Add this to the query:
-        // "select 'real_query' as SearchManager.SUGGEST_COLUMN_QUERY.
-        // rest of query
-        // real query will then show up in the suggestion
-        Cursor c = db.query(sSuggestions, createProjection(selectionArgs), suggestSelection, myArgs,
-                null, null, ORDER_BY, null);
-        c.setNotificationUri(getContext().getContentResolver(), uri);
-        return c;
+        return null;
+    }
+
+    public Cursor query(String query) {
+        final SQLiteDatabase db = getDatabase(true /* readOnly */);
+        if (db != null) {
+            final StringBuilder builder = new StringBuilder();
+            if (mFullQueryTerms != null) {
+                for (String token : mFullQueryTerms) {
+                    builder.append(token).append(QUERY_TOKEN_SEPARATOR);
+                }
+            }
+
+            final String[] args = new String[] {
+                    builder.toString(), mHistoricalIcon, "%" + query + "%" };
+
+            try {
+                // db could have been closed due to cleanup, simply don't do anything.
+                return db.rawQuery(QUERY, args);
+            } catch (IllegalStateException e) {}
+        }
+        return null;
     }
 
     /**
-     * This method is provided for use by the ContentResolver.  Do not override, or directly
-     * call from your own code.
+     * We are going to keep track of recent suggestions ourselves and not depend on the framework.
+     * Note that this writes to disk. DO NOT CALL FROM MAIN THREAD.
      */
-    @Override
-    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
-        throw new UnsupportedOperationException("Not implemented");
+    public void saveRecentQuery(String query) {
+        final SQLiteDatabase db = getDatabase(false /* readOnly */);
+        if (db != null) {
+            ContentValues values = new ContentValues(3);
+            values.put("display1", query);
+            values.put("query", query);
+            values.put("date", System.currentTimeMillis());
+            // Note:  This table has on-conflict-replace semantics, so insert may actually replace
+            try {
+                // db could have been closed due to cleanup, simply don't do anything.
+                db.insert(SUGGESTIONS_TABLE, null, values);
+            } catch (IllegalStateException e) {}
+        }
+    }
+
+    public void clearHistory() {
+        final SQLiteDatabase db = getDatabase(false /* readOnly */);
+        if (db != null) {
+            try {
+                // db could have been closed due to cleanup, simply don't do anything.
+                db.delete(SUGGESTIONS_TABLE, null, null);
+            } catch (IllegalStateException e) {}
+        }
     }
 }
\ No newline at end of file
diff --git a/src/com/android/mail/providers/Settings.java b/src/com/android/mail/providers/Settings.java
index c1f5cf9..b179239 100644
--- a/src/com/android/mail/providers/Settings.java
+++ b/src/com/android/mail/providers/Settings.java
@@ -31,6 +31,7 @@
 import com.android.mail.utils.LogTag;
 import com.android.mail.utils.LogUtils;
 import com.android.mail.utils.Utils;
+import com.google.android.mail.common.base.Strings;
 import com.google.common.base.Objects;
 
 import org.json.JSONException;
@@ -164,7 +165,8 @@
     }
 
     public Settings(Cursor cursor) {
-        signature = cursor.getString(cursor.getColumnIndex(SettingsColumns.SIGNATURE));
+        signature = Strings.nullToEmpty(
+                cursor.getString(cursor.getColumnIndex(SettingsColumns.SIGNATURE)));
         mAutoAdvance = cursor.getInt(cursor.getColumnIndex(SettingsColumns.AUTO_ADVANCE));
         snapHeaders = cursor.getInt(cursor.getColumnIndex(SettingsColumns.SNAP_HEADERS));
         replyBehavior = cursor.getInt(cursor.getColumnIndex(SettingsColumns.REPLY_BEHAVIOR));
@@ -174,8 +176,8 @@
         confirmSend = cursor.getInt(cursor.getColumnIndex(SettingsColumns.CONFIRM_SEND)) != 0;
         defaultInbox = Utils.getValidUri(
                 cursor.getString(cursor.getColumnIndex(SettingsColumns.DEFAULT_INBOX)));
-        defaultInboxName =
-                cursor.getString(cursor.getColumnIndex(SettingsColumns.DEFAULT_INBOX_NAME));
+        defaultInboxName = Strings.nullToEmpty(
+                cursor.getString(cursor.getColumnIndex(SettingsColumns.DEFAULT_INBOX_NAME)));
         forceReplyFromDefault = cursor.getInt(
                 cursor.getColumnIndex(SettingsColumns.FORCE_REPLY_FROM_DEFAULT)) != 0;
         maxAttachmentSize =
@@ -189,8 +191,8 @@
                 cursor.getString(cursor.getColumnIndex(SettingsColumns.SETUP_INTENT_URI)));
         conversationViewMode =
                 cursor.getInt(cursor.getColumnIndex(SettingsColumns.CONVERSATION_VIEW_MODE));
-        veiledAddressPattern =
-                cursor.getString(cursor.getColumnIndex(SettingsColumns.VEILED_ADDRESS_PATTERN));
+        veiledAddressPattern = Strings.nullToEmpty(
+                cursor.getString(cursor.getColumnIndex(SettingsColumns.VEILED_ADDRESS_PATTERN)));
         moveToInbox = Utils.getValidUri(
                 cursor.getString(cursor.getColumnIndex(SettingsColumns.MOVE_TO_INBOX)));
         showImages = cursor.getInt(cursor.getColumnIndex(SettingsColumns.SHOW_IMAGES));
diff --git a/src/com/android/mail/providers/SuggestionsProvider.java b/src/com/android/mail/providers/SuggestionsProvider.java
index 92c7bcc..4492daa 100644
--- a/src/com/android/mail/providers/SuggestionsProvider.java
+++ b/src/com/android/mail/providers/SuggestionsProvider.java
@@ -35,17 +35,10 @@
 /**
  * Simple extension / instantiation of SearchRecentSuggestionsProvider, independent
  * of mail account or account capabilities.  Offers suggestions from historical searches
- * and contact email addresses on the device. The authority fro for this provider is obtained
- * through the MailAppProvider as follows:
- * final String AUTHORITY = MailAppProvider.getInstance().getSuggestionAuthority()
- * It needs to be done after the MailAppProvider is constructed.
+ * and contact email addresses on the device.
  */
 public class SuggestionsProvider extends SearchRecentSuggestionsProvider {
     /**
-     * Mode used in the constructor of SuggestionsProvider.
-     */
-    public final static int MODE = DATABASE_MODE_QUERIES;
-    /**
      * Columns over the contacts database that we return in the {@link ContactsCursor}.
      */
     private static final String[] CONTACTS_COLUMNS = new String[] {
@@ -65,23 +58,13 @@
      */
     static private final int MIN_QUERY_LENGTH_FOR_CONTACTS = 2;
 
-    public SuggestionsProvider() {
-        super();
+    public SuggestionsProvider(Context context) {
+        super(context);
     }
 
     @Override
-    public boolean onCreate() {
-        final String authority = getContext().getString(R.string.suggestions_authority);
-        setupSuggestions(authority, MODE);
-        super.onCreate();
-        return true;
-    }
-
-    @Override
-    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
-            String sortOrder) {
-        String query = selectionArgs[0];
-        MergeCursor mergeCursor = null;
+    public Cursor query(String query) {
+        Cursor mergeCursor = null;
 
         synchronized (mTermsLock) {
             mFullQueryTerms = null;
@@ -110,12 +93,18 @@
             ArrayList<Cursor> cursors = new ArrayList<Cursor>();
             // Pass query; at this point it is either the last term OR the
             // only term.
-            cursors.add(super.query(uri, projection, selection, new String[] { query }, sortOrder));
+            final Cursor c = super.query(query);
+            if (c != null) {
+                cursors.add(c);
+            }
 
             if (query.length() >= MIN_QUERY_LENGTH_FOR_CONTACTS) {
                 cursors.add(new ContactsCursor().query(query));
             }
-            mergeCursor = new MergeCursor(cursors.toArray(new Cursor[cursors.size()]));
+
+            if (cursors.size() > 0) {
+                mergeCursor = new MergeCursor(cursors.toArray(new Cursor[cursors.size()]));
+            }
         }
         return mergeCursor;
     }
@@ -124,10 +113,8 @@
      * Utility class to return a cursor over the contacts database
      */
     private final class ContactsCursor extends MatrixCursorWithCachedColumns {
-        private final Context mContext;
         public ContactsCursor() {
             super(CONTACTS_COLUMNS);
-            mContext = getContext();
         }
 
         /**
@@ -170,8 +157,8 @@
         final StringBuilder query = new StringBuilder();
         if (mFullQueryTerms != null) {
             synchronized (mTermsLock) {
-                for (int i = 0, size = mFullQueryTerms.size(); i < size; i++) {
-                    query.append(mFullQueryTerms.get(i)).append(QUERY_TOKEN_SEPARATOR);
+                for (String token : mFullQueryTerms) {
+                    query.append(token).append(QUERY_TOKEN_SEPARATOR);
                 }
             }
         }
diff --git a/src/com/android/mail/providers/UIProvider.java b/src/com/android/mail/providers/UIProvider.java
index 7f22bca..783e4f3 100644
--- a/src/com/android/mail/providers/UIProvider.java
+++ b/src/com/android/mail/providers/UIProvider.java
@@ -27,6 +27,7 @@
 import android.provider.OpenableColumns;
 import android.text.TextUtils;
 
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 
@@ -104,6 +105,48 @@
         public static final int INTERNAL_ERROR = 5;
         /** The sync wasn't completed due to an error in the mail server */
         public static final int SERVER_ERROR = 6;
+
+        public static String toString(int result) {
+            switch (result) {
+                case SUCCESS: return "success";
+                case CONNECTION_ERROR: return "connection_error";
+                case AUTH_ERROR: return "auth_error";
+                case SECURITY_ERROR: return "security_error";
+                case STORAGE_ERROR: return "storage_error";
+                case INTERNAL_ERROR: return "internal_error";
+                case SERVER_ERROR: return "server_error";
+                default: throw new IllegalArgumentException("Invalid LastSyncResult: " + result);
+            }
+        }
+    }
+
+    /**
+     * Combines the reason for the sync request (user vs. background sync) with the status of the
+     * request (success vs failure reason) into a single integer value.
+     *
+     * @param syncStatus {@link SyncStatus} value describing the reason for the sync
+     * @param lastSyncResult {@link LastSyncResult} value describing the result of the sync
+     * @return a single integer packed with the status and result values
+     */
+    @VisibleForTesting
+    public static int createSyncValue(int syncStatus, int lastSyncResult) {
+        return lastSyncResult | (syncStatus << 4);
+    }
+
+    /**
+     * @param lastSyncValue value containing the {@link SyncStatus} and {@link LastSyncResult}
+     * @return the {@link LastSyncResult} within the <code>lastSyncValue</code>
+     */
+    public static int getResultFromLastSyncResult(int lastSyncValue) {
+        return lastSyncValue & 0x0f;
+    }
+
+    /**
+     * @param lastSyncValue value containing the {@link SyncStatus} and {@link LastSyncResult}
+     * @return the {@link SyncStatus} within the <code>lastSyncValue</code>
+     */
+    public static int getStatusFromLastSyncResult(int lastSyncValue) {
+        return lastSyncValue >> 4;
     }
 
     // The actual content provider should define its own authority
@@ -186,6 +229,8 @@
             .put(AccountColumns.SettingsColumns.MOVE_TO_INBOX, String.class)
             .put(AccountColumns.SettingsColumns.SHOW_IMAGES, Integer.class)
             .put(AccountColumns.SettingsColumns.WELCOME_TOUR_SHOWN_VERSION, Integer.class)
+            .put(AccountColumns.SECURITY_HOLD, Integer.class)
+            .put(AccountColumns.ACCOUNT_SECURITY_URI, String.class)
             .build();
 
     public static final Map<String, Class<?>> ACCOUNTS_COLUMNS =
@@ -238,7 +283,7 @@
         /**
          * Whether the server sends us sanitized HTML (guaranteed to not contain malicious HTML).
          */
-        public static final int SANITIZED_HTML = 0x0080;
+        public static final int SERVER_SANITIZED_HTML = 0x0080;
         /**
          * Whether the server allows synchronization of draft messages. This does NOT require
          * SYNCABLE_FOLDERS to be set.
@@ -316,6 +361,10 @@
          * Whether the account supports nested folders
          */
         public static final int NESTED_FOLDERS = 0x800000;
+        /**
+         * Whether the client is permitted to sanitize HTML for this account.
+         */
+        public static final int CLIENT_SANITIZED_HTML = 0x1000000;
     }
 
     public static final class AccountColumns implements BaseColumns {
@@ -510,6 +559,14 @@
          * Fragment class name for account settings
          */
         public static final String SETTINGS_FRAGMENT_CLASS = "settingsFragmentClass";
+        /**
+         * Whether this account is on a security hold
+         */
+        public static final String SECURITY_HOLD = "securityHold";
+        /**
+         * Uri to access the account security activity.
+         */
+        public static final String ACCOUNT_SECURITY_URI = "accountSecurityUri";
 
         public static final class SettingsColumns {
             /**
diff --git a/src/com/android/mail/providers/protos/mock/MockUiProvider.java b/src/com/android/mail/providers/protos/mock/MockUiProvider.java
index dcd4019..37a219b 100644
--- a/src/com/android/mail/providers/protos/mock/MockUiProvider.java
+++ b/src/com/android/mail/providers/protos/mock/MockUiProvider.java
@@ -318,7 +318,7 @@
                         AccountCapabilities.MUTE |
                         AccountCapabilities.SERVER_SEARCH |
                         AccountCapabilities.FOLDER_SERVER_SEARCH |
-                        AccountCapabilities.SANITIZED_HTML |
+                        AccountCapabilities.SERVER_SANITIZED_HTML |
                         AccountCapabilities.DRAFT_SYNCHRONIZATION |
                         AccountCapabilities.MULTIPLE_FROM_ADDRESSES |
                         AccountCapabilities.SMART_REPLY |
diff --git a/src/com/android/mail/text/FolderSpan.java b/src/com/android/mail/text/FolderSpan.java
new file mode 100644
index 0000000..39c8ecf
--- /dev/null
+++ b/src/com/android/mail/text/FolderSpan.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2012 Google Inc.
+ * Licensed to 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.mail.text;
+
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.support.v4.text.BidiFormatter;
+import android.text.TextPaint;
+import android.text.TextUtils;
+import android.text.style.ReplacementSpan;
+
+import com.android.mail.ui.FolderDisplayer;
+
+/**
+ * A replacement span to use when displaying folders in conversation view. Prevents a folder name
+ * from wrapping mid-name, and ellipsizes very long folder names that can't fit on a single line.
+ */
+public class FolderSpan extends ReplacementSpan {
+    private final TextPaint mWorkPaint = new TextPaint();
+    private final String mName;
+    private final int mFgColor;
+    private final int mBgColor;
+    private final FolderDisplayer.FolderDrawableResources mRes;
+    private final BidiFormatter mFormatter;
+    private final FolderSpanDimensions mDim;
+
+    public FolderSpan(String name, int fgColor, int bgColor,
+            FolderDisplayer.FolderDrawableResources res, BidiFormatter formatter,
+            FolderSpanDimensions dim) {
+        super();
+
+        mName = name;
+        mFgColor = fgColor;
+        mBgColor = bgColor;
+        mRes = res;
+        mFormatter = formatter;
+        mDim = dim;
+    }
+
+    private int getWidth(Paint p) {
+        p.setTextSize(mRes.folderFontSize);
+        return Math.min((int) p.measureText(mName) + 2 * mRes.folderHorizontalPadding,
+                mDim.getMaxChipWidth());
+    }
+
+    private int getHeight(Paint p) {
+        p.setTextSize(mRes.folderFontSize);
+        final Paint.FontMetricsInt fm = p.getFontMetricsInt();
+        return fm.bottom - fm.top;
+    }
+
+    @Override
+    public int getSize(Paint p, CharSequence text, int start, int end, Paint.FontMetricsInt fm) {
+        mWorkPaint.set(p);
+        return getWidth(mWorkPaint);
+    }
+
+    @Override
+    public void draw(Canvas canvas, CharSequence charSequence, int start, int end, float x, int top,
+            int baseline, int bottom, Paint paint) {
+        mWorkPaint.set(paint);
+        mWorkPaint.setTextSize(mRes.folderFontSize);
+        final int width = getWidth(mWorkPaint);
+        final int height = getHeight(mWorkPaint);
+        String name = mName;
+        if (width == mDim.getMaxChipWidth()) {
+            name = TextUtils.ellipsize(mName, mWorkPaint, width - 2 * mRes.folderHorizontalPadding,
+                    TextUtils.TruncateAt.MIDDLE).toString();
+        }
+        FolderDisplayer.drawFolder(canvas, x, baseline - height, width, height, name, mFgColor,
+                mBgColor, mRes, mFormatter, mWorkPaint);
+    }
+
+    public static interface FolderSpanDimensions {
+        int getMaxChipWidth();
+    }
+}
diff --git a/src/com/android/mail/ui/AbstractActivityController.java b/src/com/android/mail/ui/AbstractActivityController.java
index 6d75402..a7de33b 100644
--- a/src/com/android/mail/ui/AbstractActivityController.java
+++ b/src/com/android/mail/ui/AbstractActivityController.java
@@ -46,11 +46,10 @@
 import android.os.Handler;
 import android.os.Parcelable;
 import android.os.SystemClock;
-import android.provider.SearchRecentSuggestions;
-import android.support.v4.app.ActionBarDrawerToggle;
+import android.speech.RecognizerIntent;
 import android.support.v4.widget.DrawerLayout;
 import android.support.v7.app.ActionBar;
-import android.view.DragEvent;
+import android.support.v7.app.ActionBarDrawerToggle;
 import android.view.Gravity;
 import android.view.KeyEvent;
 import android.view.Menu;
@@ -66,12 +65,12 @@
 import com.android.mail.R;
 import com.android.mail.analytics.Analytics;
 import com.android.mail.analytics.AnalyticsTimer;
-import com.android.mail.analytics.AnalyticsUtils;
 import com.android.mail.browse.ConfirmDialogFragment;
 import com.android.mail.browse.ConversationCursor;
 import com.android.mail.browse.ConversationCursor.ConversationOperation;
 import com.android.mail.browse.ConversationItemViewModel;
 import com.android.mail.browse.ConversationMessage;
+import com.android.mail.browse.ConversationPagerAdapter;
 import com.android.mail.browse.ConversationPagerController;
 import com.android.mail.browse.SelectedConversationsActionMenu;
 import com.android.mail.browse.SyncErrorDialogFragment;
@@ -87,7 +86,6 @@
 import com.android.mail.providers.FolderWatcher;
 import com.android.mail.providers.MailAppProvider;
 import com.android.mail.providers.Settings;
-import com.android.mail.providers.SuggestionsProvider;
 import com.android.mail.providers.UIProvider;
 import com.android.mail.providers.UIProvider.AccountCapabilities;
 import com.android.mail.providers.UIProvider.AccountCursorExtraKeys;
@@ -145,7 +143,7 @@
     private static final String SAVED_FOLDER = "saved-folder";
     /** Tag for {@link #mCurrentConversation} */
     private static final String SAVED_CONVERSATION = "saved-conversation";
-    /** Tag for {@link #mSelectedSet} */
+    /** Tag for {@link #mCheckedSet} */
     private static final String SAVED_SELECTED_SET = "saved-selected-set";
     /** Tag for {@link ActionableToastBar#getOperation()} */
     private static final String SAVED_TOAST_BAR_OP = "saved-toast-bar-op";
@@ -196,6 +194,7 @@
     protected final RecentFolderList mRecentFolderList;
     protected ConversationListContext mConvListContext;
     protected Conversation mCurrentConversation;
+    protected MaterialSearchViewController mSearchViewController;
     /**
      * The hash of {@link #mCurrentConversation} in detached mode. 0 if we are not in detached mode.
      */
@@ -278,7 +277,7 @@
     /**
      * Selected conversations, if any.
      */
-    private final ConversationSelectionSet mSelectedSet = new ConversationSelectionSet();
+    private final ConversationCheckedSet mCheckedSet = new ConversationCheckedSet();
 
     private final int mFolderItemUpdateDelayMs;
 
@@ -451,6 +450,9 @@
      *  or account */
     private static final int CHANGE_NAVIGATION_REQUEST_CODE = 3;
 
+    /** Code returned from voice search intent */
+    public static final int VOICE_SEARCH_REQUEST_CODE = 4;
+
     public static final String EXTRA_FOLDER = "extra-folder";
     public static final String EXTRA_ACCOUNT = "extra-account";
 
@@ -458,13 +460,12 @@
     private DestructiveAction mPendingDestruction;
     protected AsyncRefreshTask mFolderSyncTask;
     private Folder mFolderListFolder;
-    private boolean mIsDragHappening;
     private final int mShowUndoBarDelay;
     private boolean mRecentsDataUpdated;
     /** A wait fragment we added, if any. */
     private WaitFragment mWaitFragment;
     /** True if we have results from a search query */
-    private boolean mHaveSearchResults = false;
+    protected boolean mHaveSearchResults = false;
     /** If a confirmation dialog is being show, the listener for the positive action. */
     private OnClickListener mDialogListener;
     /**
@@ -527,7 +528,7 @@
         mTracker = new ConversationPositionTracker(this);
         // Allow the fragment to observe changes to its own selection set. No other object is
         // aware of the selected set.
-        mSelectedSet.addObserver(this);
+        mCheckedSet.addObserver(this);
 
         final Resources r = mContext.getResources();
         mFolderItemUpdateDelayMs = r.getInteger(R.integer.folder_item_refresh_delay_ms);
@@ -538,11 +539,22 @@
     }
 
     @Override
+    public final String toString() {
+        final StringBuilder sb = new StringBuilder(super.toString());
+        sb.append("{");
+        sb.append("mCurrentConversation=");
+        sb.append(mCurrentConversation);
+        appendToString(sb);
+        sb.append("}");
+        return sb.toString();
+    }
+
+    protected void appendToString(StringBuilder sb) {}
+
     public Account getCurrentAccount() {
         return mAccount;
     }
 
-    @Override
     public ConversationListContext getCurrentListContext() {
         return mConvListContext;
     }
@@ -610,12 +622,9 @@
             return;
         }
 
-        final boolean isSearch = mActivity.getIntent() != null
-                && Intent.ACTION_SEARCH.equals(mActivity.getIntent().getAction());
-        mActionBarController = isSearch ?
-                new SearchActionBarController(mContext) :
-                new ActionBarController(mContext);
+        mActionBarController = new ActionBarController(mContext);
         mActionBarController.initialize(mActivity, this, actionBar);
+        actionBar.setShowHideAnimationEnabled(false);
 
         // init the action bar to allow the 'up' affordance.
         // any configurations that disallow 'up' should do that later.
@@ -718,8 +727,7 @@
         if (accountChanged) {
             commitDestructiveActions(false);
         }
-        Analytics.getInstance().setCustomDimension(Analytics.CD_INDEX_ACCOUNT_TYPE,
-                AnalyticsUtils.getAccountTypeForAccount(emailAddress));
+
         // Change the account here
         setAccount(account);
         // And carry out associated actions.
@@ -873,15 +881,13 @@
         mActivity.getLoaderManager().restartLoader(LOADER_SEARCH, args, mFolderCallbacks);
     }
 
-    @Override
-    public void onFolderChanged(Folder folder, final boolean force) {
+    protected void onFolderChanged(Folder folder, final boolean force) {
         if (isDrawerEnabled()) {
             /** If the folder doesn't exist, or its parent URI is empty,
              * this is not a child folder */
             final boolean isTopLevel = Folder.isRoot(folder);
             final int mode = mViewMode.getMode();
-            mDrawerToggle.setDrawerIndicatorEnabled(
-                    getShouldShowDrawerIndicator(mode, isTopLevel));
+            updateDrawerIndicator(mode, isTopLevel);
             mDrawerContainer.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
 
             mDrawerContainer.closeDrawers();
@@ -934,7 +940,9 @@
             setListContext(folder, query);
             showConversationList(mConvListContext);
             // Touch the current folder: it is different, and it has been accessed.
-            mRecentFolderList.touchFolder(mFolder, mAccount);
+            if (mFolder != null) {
+                mRecentFolderList.touchFolder(mFolder, mAccount);
+            }
         }
         resetActionBarIcon();
     }
@@ -968,8 +976,10 @@
         return mRecentFolderList;
     }
 
-    @Override
-    public void loadAccountInbox() {
+    /**
+     * Load the default inbox associated with the current account.
+     */
+    protected void loadAccountInbox() {
         boolean handled = false;
         if (mFolderWatcher != null) {
             final Folder inbox = mFolderWatcher.getDefaultInbox(mAccount);
@@ -1077,8 +1087,10 @@
         return mFolderListFolder;
     }
 
-    @Override
-    public void setHierarchyFolder(Folder folder) {
+    /**
+     * Set the folder currently selected in the folder selection hierarchy fragments.
+     */
+    protected void setHierarchyFolder(Folder folder) {
         mFolderListFolder = folder;
     }
 
@@ -1117,7 +1129,10 @@
                 }
                 break;
             case CHANGE_NAVIGATION_REQUEST_CODE:
-                if (resultCode == Activity.RESULT_OK && data != null) {
+                if (ViewMode.isSearchMode(mViewMode.getMode())) {
+                    mActivity.setResult(resultCode, data);
+                    mActivity.finish();
+                } else if (resultCode == Activity.RESULT_OK && data != null) {
                     // We have have received a result that indicates we need to navigate to a
                     // different folder or account. This happens if someone navigates using the
                     // drawer on the search results activity.
@@ -1132,6 +1147,17 @@
                     }
                 }
                 break;
+            case VOICE_SEARCH_REQUEST_CODE:
+                if (resultCode == Activity.RESULT_OK) {
+                    final ArrayList<String> matches = data.getStringArrayListExtra(
+                            RecognizerIntent.EXTRA_RESULTS);
+                    if (!matches.isEmpty()) {
+                        // not sure how dependable the API is, but it's all we have.
+                        // take the top choice.
+                        mSearchViewController.onSearchPerformed(matches.get(0));
+                    }
+                }
+                break;
         }
     }
 
@@ -1150,6 +1176,9 @@
 
     @Override
     public void onConversationListVisibilityChanged(boolean visible) {
+        mFloatingComposeButton.setVisibility(
+                !ViewMode.isSearchMode(mViewMode.getMode()) && visible ? View.VISIBLE : View.GONE);
+
         informCursorVisiblity(visible);
         commitAutoAdvanceOperation();
 
@@ -1266,7 +1295,7 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean onCreate(Bundle savedState) {
+    public void onCreate(Bundle savedState) {
         initializeActionBar();
         initializeDevLoggingService();
         // Allow shortcut keys to function for the ActionBar and menus.
@@ -1280,16 +1309,20 @@
         mFloatingComposeButton.setOnClickListener(this);
 
         if (isDrawerEnabled()) {
-            mDrawerToggle = new ActionBarDrawerToggle(mActivity, mDrawerContainer, false,
-                    R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close);
+            mDrawerToggle = new ActionBarDrawerToggle(mActivity, mDrawerContainer,
+                    R.string.drawer_open, R.string.drawer_close);
             mDrawerContainer.setDrawerListener(mDrawerListener);
             mDrawerContainer.setDrawerShadow(
                     mContext.getResources().getDrawable(R.drawable.drawer_shadow), Gravity.START);
 
-            mDrawerToggle.setDrawerIndicatorEnabled(isDrawerEnabled());
+            // Disable default drawer indicator as we are setting the drawer indicator icons.
+            // TODO(shahrk): Once we can disable/enable drawer animation, go back to using
+            // drawer indicators.
+            mDrawerToggle.setDrawerIndicatorEnabled(false);
+            mDrawerToggle.setHomeAsUpIndicator(R.drawable.ic_menu_wht_24dp);
         } else {
             final ActionBar ab = mActivity.getSupportActionBar();
-            ab.setHomeAsUpIndicator(R.drawable.ic_drawer);
+            ab.setHomeAsUpIndicator(R.drawable.ic_menu_wht_24dp);
             ab.setHomeActionContentDescription(R.string.drawer_open);
             ab.setDisplayHomeAsUpEnabled(true);
         }
@@ -1306,6 +1339,10 @@
 
         final Intent intent = mActivity.getIntent();
 
+        mSearchViewController = new MaterialSearchViewController(mActivity, this, intent,
+                savedState);
+        addConversationListLayoutListener(mSearchViewController);
+
         // Immediately handle a clean launch with intent, and any state restoration
         // that does not rely on restored fragments or loader data
         // any state restoration that relies on those can be done later in
@@ -1330,7 +1367,6 @@
         // Create the accounts loader; this loads the account switch spinner.
         mActivity.getLoaderManager().initLoader(LOADER_ACCOUNT_CURSOR, Bundle.EMPTY,
                 mAccountCallbacks);
-        return true;
     }
 
     /**
@@ -1371,7 +1407,7 @@
             ComposeActivity.compose(mActivity.getActivityContext(), getAccount());
         } else if (viewId == android.R.id.home) {
             // TODO: b/16627877
-            onUpPressed();
+            handleUpPress();
         }
     }
 
@@ -1502,7 +1538,6 @@
 
         final int id = item.getItemId();
         LogUtils.d(LOG_TAG, "AbstractController.onOptionsItemSelected(%d) called.", id);
-        boolean handled = true;
         /** This is NOT a batch action. */
         final boolean isBatch = false;
         final Collection<Conversation> target = Conversation.listOf(mCurrentConversation);
@@ -1513,92 +1548,123 @@
         final UndoCallback undoCallback = getUndoCallbackForDestructiveActionsWithAutoAdvance(
                 id, mCurrentConversation);
 
-        if (id == R.id.archive) {
-            final boolean showDialog = (settings != null && settings.confirmArchive);
-            confirmAndDelete(id, target, showDialog, R.plurals.confirm_archive_conversation, undoCallback);
-        } else if (id == R.id.remove_folder) {
-            delete(R.id.remove_folder, target,
-                    getDeferredRemoveFolder(target, mFolder, true, isBatch, true, undoCallback),
-                    isBatch);
-        } else if (id == R.id.delete) {
-            final boolean showDialog = (settings != null && settings.confirmDelete);
-            confirmAndDelete(id, target, showDialog, R.plurals.confirm_delete_conversation, undoCallback);
-        } else if (id == R.id.discard_drafts) {
-            // drafts are lost forever, so always confirm
-            confirmAndDelete(id, target, true /* showDialog */,
-                    R.plurals.confirm_discard_drafts_conversation, undoCallback);
-        } else if (id == R.id.discard_outbox) {
-            // discard in outbox means we discard the failed message and save them in drafts
-            delete(id, target, getDeferredAction(id, target, isBatch, undoCallback), isBatch);
-        } else if (id == R.id.mark_important) {
-            updateConversation(Conversation.listOf(mCurrentConversation),
-                    ConversationColumns.PRIORITY, UIProvider.ConversationPriority.HIGH);
-        } else if (id == R.id.mark_not_important) {
-            if (mFolder != null && mFolder.isImportantOnly()) {
-                delete(R.id.mark_not_important, target,
-                        getDeferredAction(R.id.mark_not_important, target, isBatch, undoCallback),
+        // Menu items that are targetted, only perform if there actually is a target and the
+        // cursor is showing the target in the list.
+        boolean handled = false;
+        if (target.size() > 0 &&
+                ConversationCursor.isCursorReadyToShow(getConversationListCursor())) {
+            handled = true;
+            if (id == R.id.archive) {
+                final boolean showDialog = (settings != null && settings.confirmArchive);
+                confirmAndDelete(id, target, showDialog, R.plurals.confirm_archive_conversation,
+                        undoCallback);
+            } else if (id == R.id.remove_folder) {
+                delete(R.id.remove_folder, target,
+                        getDeferredRemoveFolder(target, mFolder, true, isBatch, true, undoCallback),
                         isBatch);
-            } else {
+            } else if (id == R.id.delete) {
+                final boolean showDialog = (settings != null && settings.confirmDelete);
+                confirmAndDelete(id, target, showDialog, R.plurals.confirm_delete_conversation,
+                        undoCallback);
+            } else if (id == R.id.discard_drafts) {
+                // drafts are lost forever, so always confirm
+                confirmAndDelete(id, target, true /* showDialog */,
+                        R.plurals.confirm_discard_drafts_conversation, undoCallback);
+            } else if (id == R.id.discard_outbox) {
+                // discard in outbox means we discard the failed message and save them in drafts
+                delete(id, target, getDeferredAction(id, target, isBatch, undoCallback), isBatch);
+            } else if (id == R.id.mark_important) {
                 updateConversation(Conversation.listOf(mCurrentConversation),
-                        ConversationColumns.PRIORITY, UIProvider.ConversationPriority.LOW);
-            }
-        } else if (id == R.id.mute) {
-            delete(R.id.mute, target, getDeferredAction(R.id.mute, target, isBatch, undoCallback),
-                    isBatch);
-        } else if (id == R.id.report_spam) {
-            delete(R.id.report_spam, target,
-                    getDeferredAction(R.id.report_spam, target, isBatch, undoCallback), isBatch);
-        } else if (id == R.id.mark_not_spam) {
-            // Currently, since spam messages are only shown in list with
-            // other spam messages,
-            // marking a message not as spam is a destructive action
-            delete(R.id.mark_not_spam, target,
-                    getDeferredAction(R.id.mark_not_spam, target, isBatch, undoCallback), isBatch);
-        } else if (id == R.id.report_phishing) {
-            delete(R.id.report_phishing, target,
-                    getDeferredAction(R.id.report_phishing, target, isBatch, undoCallback), isBatch);
-        } else if (id == android.R.id.home) {
-            onUpPressed();
-        } else if (id == R.id.compose) {
-            ComposeActivity.compose(mActivity.getActivityContext(), mAccount);
-        } else if (id == R.id.refresh) {
-            requestFolderRefresh();
-        } else if (id == R.id.settings) {
-            Utils.showSettings(mActivity.getActivityContext(), mAccount);
-        } else if (id == R.id.help_info_menu_item) {
-            mActivity.showHelp(mAccount, mViewMode.getMode());
-        } else if (id == R.id.move_to || id == R.id.change_folders) {
-            final FolderSelectionDialog dialog = FolderSelectionDialog.getInstance(mAccount,
-                    Conversation.listOf(mCurrentConversation), isBatch, mFolder,
-                    id == R.id.move_to);
-            if (dialog != null) {
-                dialog.show(mActivity.getFragmentManager(), null);
-            }
-        } else if (id == R.id.move_to_inbox) {
-            new AsyncTask<Void, Void, Folder>() {
-                @Override
-                protected Folder doInBackground(final Void... params) {
-                    // Get the "move to" inbox
-                    return Utils.getFolder(mContext, mAccount.settings.moveToInbox,
-                            true /* allowHidden */);
+                        ConversationColumns.PRIORITY, UIProvider.ConversationPriority.HIGH);
+            } else if (id == R.id.mark_not_important) {
+                if (mFolder != null && mFolder.isImportantOnly()) {
+                    delete(R.id.mark_not_important, target,
+                            getDeferredAction(R.id.mark_not_important, target, isBatch, undoCallback),
+                            isBatch);
+                } else {
+                    updateConversation(target, ConversationColumns.PRIORITY,
+                            UIProvider.ConversationPriority.LOW);
                 }
+            } else if (id == R.id.mute) {
+                delete(R.id.mute, target, getDeferredAction(R.id.mute, target, isBatch, undoCallback),
+                        isBatch);
+            } else if (id == R.id.report_spam) {
+                delete(R.id.report_spam, target,
+                        getDeferredAction(R.id.report_spam, target, isBatch, undoCallback),
+                        isBatch);
+            } else if (id == R.id.mark_not_spam) {
+                // Currently, since spam messages are only shown in list with
+                // other spam messages,
+                // marking a message not as spam is a destructive action
+                delete(R.id.mark_not_spam, target,
+                        getDeferredAction(R.id.mark_not_spam, target, isBatch, undoCallback),
+                        isBatch);
+            } else if (id == R.id.report_phishing) {
+                delete(R.id.report_phishing, target,
+                        getDeferredAction(R.id.report_phishing, target, isBatch, undoCallback),
+                        isBatch);
+            } else if (id == R.id.move_to || id == R.id.change_folders) {
+                final FolderSelectionDialog dialog = FolderSelectionDialog.getInstance(mAccount,
+                        target, isBatch, mFolder, id == R.id.move_to);
+                if (dialog != null) {
+                    dialog.show(mActivity.getFragmentManager(), null);
+                }
+            } else if (id == R.id.move_to_inbox) {
+                new AsyncTask<Void, Void, Folder>() {
+                    @Override
+                    protected Folder doInBackground(final Void... params) {
+                        // Get the "move to" inbox
+                        return Utils.getFolder(mContext, mAccount.settings.moveToInbox,
+                                true /* allowHidden */);
+                    }
 
-                @Override
-                protected void onPostExecute(final Folder moveToInbox) {
-                    final List<FolderOperation> ops = Lists.newArrayListWithCapacity(1);
-                    // Add inbox
-                    ops.add(new FolderOperation(moveToInbox, true));
-                    assignFolder(ops, Conversation.listOf(mCurrentConversation), true,
-                            true /* showUndo */, false /* isMoveTo */);
-                }
-            }.execute((Void[]) null);
-        } else if (id == R.id.empty_trash) {
-            showEmptyDialog();
-        } else if (id == R.id.empty_spam) {
-            showEmptyDialog();
-        } else {
-            handled = false;
+                    @Override
+                    protected void onPostExecute(final Folder moveToInbox) {
+                        final List<FolderOperation> ops = Lists.newArrayListWithCapacity(1);
+                        // Add inbox
+                        ops.add(new FolderOperation(moveToInbox, true));
+                        assignFolder(ops, target, true, true /* showUndo */, false /* isMoveTo */);
+                    }
+                }.execute((Void[]) null);
+            } else {
+                handled = false;
+            }
         }
+
+        // Not handled by the targetted menu items, check the general ones.
+        if (!handled) {
+            handled = true;
+            if (id == android.R.id.home) {
+                handleUpPress();
+            } else if (id == R.id.compose) {
+                ComposeActivity.compose(mActivity.getActivityContext(), mAccount);
+            } else if (id == R.id.refresh) {
+                requestFolderRefresh();
+            } else if (id == R.id.toggle_drawer) {
+                toggleDrawerState();
+            } else if (id == R.id.settings) {
+                Utils.showSettings(mActivity.getActivityContext(), mAccount);
+            } else if (id == R.id.help_info_menu_item) {
+                mActivity.showHelp(mAccount, mViewMode.getMode());
+            } else if (id == R.id.empty_trash) {
+                showEmptyDialog();
+            } else if (id == R.id.empty_spam) {
+                showEmptyDialog();
+            } else if (id == R.id.search) {
+                mSearchViewController.showSearchActionBar(
+                        MaterialSearchViewController.SEARCH_VIEW_STATE_VISIBLE);
+            } else {
+                handled = false;
+            }
+        }
+
+        // If the controller didn't handle this event, check the CAB menu if it's active.
+        // This is necessary because keyboard shortcuts don't seem to check CAB menus.
+        if (!handled && mCabActionMenu != null && mCabActionMenu.isActivated() &&
+                    mCabActionMenu.onActionItemClicked(item)) {
+            handled = true;
+        }
+
         return handled;
     }
 
@@ -1656,15 +1722,16 @@
     }
 
     @Override
-    public final boolean onUpPressed() {
-        return handleUpPress();
-    }
-
-    @Override
     public final boolean onBackPressed() {
         if (isDrawerEnabled() && mDrawerContainer.isDrawerVisible(mDrawerPullout)) {
             mDrawerContainer.closeDrawers();
             return true;
+        } else if (mSearchViewController.handleBackPress()) {
+            return true;
+        // If we're in CAB mode, let the activity handle onBackPressed.
+        // It will handle closing CAB mode for us.
+        } else if (mCabActionMenu != null && mCabActionMenu.isActivated()) {
+            return false;
         }
 
         return handleBackPress();
@@ -1704,9 +1771,7 @@
     @Override
     public void markConversationMessagesUnread(final Conversation conv,
             final Set<Uri> unreadMessageUris, final byte[] originalConversationInfo) {
-        // The only caller of this method is the conversation view, from where marking unread should
-        // *always* take you back to list mode.
-        showConversation(null);
+        onPreMarkUnread();
 
         // locally mark conversation unread (the provider is supposed to propagate message unread
         // to conversation unread)
@@ -1727,6 +1792,18 @@
         }
     }
 
+    /**
+     * Hook to do stuff before actually marking a conversation unread (only called from within
+     * conversation view). Most configurations do the default behavior of popping out of
+     * CV to go back to TL.
+     *
+     */
+    protected void onPreMarkUnread() {
+        // The only caller of this method is the conversation view, from where marking unread should
+        // take you back to list mode in most cases. Two-pane view is the exception.
+        showConversation(null);
+    }
+
     private void doMarkConversationMessagesUnread(Conversation conv, Set<Uri> unreadMessageUris,
             byte[] originalConversationInfo) {
         // Only do a granular 'mark unread' if a subset of messages are unread
@@ -1784,6 +1861,24 @@
         }
     }
 
+    /**
+     * Mark a single conversation 'seen', which is a combination of 'viewed' and 'read'. In some
+     * configurations (peek mode), this operation may be prevented and the method will return false.
+     *
+     * @param conv the conversation to mark seen
+     * @return true if the operation was a success
+     */
+    @Override
+    public boolean markConversationSeen(Conversation conv) {
+        if (isCurrentConversationJustPeeking()) {
+            LogUtils.i(LOG_TAG, "AAC is in peek mode, not marking seen. conv=%s", conv);
+            return false;
+        } else {
+            markConversationsRead(Arrays.asList(conv), true /* read */, true /* viewed */);
+            return true;
+        }
+    }
+
     @Override
     public void markConversationsRead(final Collection<Conversation> targets, final boolean read,
             final boolean viewed) {
@@ -1912,25 +2007,37 @@
             final int autoAdvance = (autoAdvanceSetting == AutoAdvance.UNSET) ?
                     AutoAdvance.DEFAULT : autoAdvanceSetting;
 
-            final Conversation next = mTracker.getNextConversation(autoAdvance, target);
-            LogUtils.d(LOG_TAG, "showNextConversation: showing %s next.", next);
             // Set mAutoAdvanceOp *before* showConversation() to ensure that it runs when the
             // transition doesn't run (i.e. it "completes" immediately).
             mAutoAdvanceOp = operation;
-            showConversation(next);
+            doShowNextConversation(target, autoAdvance);
             return (mAutoAdvanceOp == null);
         }
 
         return true;
     }
 
+    /**
+     * Do the actual work of selecting a next conversation to show and showing it. Two-pane
+     * overrides this in landscape to prefer peeking rather than staring at an empty CV pane when
+     * auto-advance=LIST.
+     *
+     * @param target conversations being destroyed, of which the current convo is one
+     * @param autoAdvance auto-advance pref value
+     */
+    protected void doShowNextConversation(Collection<Conversation> target, int autoAdvance) {
+        final Conversation next = mTracker.getNextConversation(autoAdvance, target);
+        LogUtils.d(LOG_TAG, "showNextConversation: showing %s next.", next);
+        showConversation(next);
+    }
+
     @Override
     public void starMessage(ConversationMessage msg, boolean starred) {
         if (msg.starred == starred) {
             return;
         }
 
-        msg.starred = starred;
+        msg.setStarredInConversation(starred);
 
         // locally propagate the change to the owning conversation
         // (figure the provider will properly propagate the change when it commits it)
@@ -2014,16 +2121,14 @@
             }
         };
 
-        if (!showNextConversation(target, operation)) {
-            // This method will be called again if the user selects an autoadvance option
-            return;
-        }
+        showNextConversation(target, operation);
+
         // If the conversation is in the selected set, remove it from the set.
         // Batch selections are cleared in the end of the action, so not done for batch actions.
         if (!isBatch) {
             for (final Conversation conv : target) {
-                if (mSelectedSet.contains(conv)) {
-                    mSelectedSet.toggle(conv);
+                if (mCheckedSet.contains(conv)) {
+                    mCheckedSet.toggle(conv);
                 }
             }
         }
@@ -2055,8 +2160,8 @@
     }
 
     @Override
-    public boolean onPrepareOptionsMenu(Menu menu) {
-        return mActionBarController.onPrepareOptionsMenu(menu);
+    public void onPrepareOptionsMenu(Menu menu) {
+        mActionBarController.onPrepareOptionsMenu(menu);
     }
 
     @Override
@@ -2098,8 +2203,8 @@
         if (mCurrentConversation != null && mViewMode.isConversationMode()) {
             outState.putParcelable(SAVED_CONVERSATION, mCurrentConversation);
         }
-        if (!mSelectedSet.isEmpty()) {
-            outState.putParcelable(SAVED_SELECTED_SET, mSelectedSet);
+        if (!mCheckedSet.isEmpty()) {
+            outState.putParcelable(SAVED_SELECTED_SET, mCheckedSet);
         }
         if (mToastBar.getVisibility() == View.VISIBLE) {
             outState.putParcelable(SAVED_TOAST_BAR_OP, mToastBar.getOperation());
@@ -2124,6 +2229,8 @@
 
         outState.putBundle(SAVED_CONVERSATION_LIST_SCROLL_POSITIONS,
                 mConversationListScrollPositions);
+
+        mSearchViewController.saveState(outState);
     }
 
     /**
@@ -2141,7 +2248,8 @@
         intent.putExtra(ConversationListContext.EXTRA_SEARCH_QUERY, query);
         intent.putExtra(Utils.EXTRA_ACCOUNT, mAccount);
         intent.setComponent(mActivity.getComponentName());
-        mActionBarController.collapseSearch();
+        mSearchViewController.showSearchActionBar(
+                MaterialSearchViewController.SEARCH_VIEW_STATE_GONE);
         // Call startActivityForResult here so we can tell if we have navigated to a different folder
         // or account from search results.
         mActivity.startActivityForResult(intent, CHANGE_NAVIGATION_REQUEST_CODE);
@@ -2167,6 +2275,7 @@
         mDestroyed = true;
         mHandler.removeCallbacks(mLogServiceChecker);
         mLogServiceChecker = null;
+        mSearchViewController.onDestroy();
     }
 
     /**
@@ -2182,10 +2291,6 @@
      */
     @Override
     public void onViewModeChanged(int newMode) {
-        // The floating action compose button is only visible in the conversation/search lists
-        final int composeVisible = ViewMode.isListMode(newMode) ? View.VISIBLE : View.GONE;
-        mFloatingComposeButton.setVisibility(composeVisible);
-
         // When we step away from the conversation mode, we don't have a current conversation
         // anymore. Let's blank it out so clients calling getCurrentConversation are not misled.
         if (!ViewMode.isConversationMode(newMode)) {
@@ -2201,25 +2306,27 @@
             /** If the folder doesn't exist, or its parent URI is empty,
              * this is not a child folder */
             final boolean isTopLevel = Folder.isRoot(mFolder);
-            mDrawerToggle.setDrawerIndicatorEnabled(
-                    getShouldShowDrawerIndicator(newMode, isTopLevel));
+            updateDrawerIndicator(newMode, isTopLevel);
             mDrawerContainer.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
             closeDrawerIfOpen();
         }
     }
 
     /**
-     * Returns true if the drawer icon is shown
+     * Update the drawer indicator to either be the burger or the back arrow.
      * @param viewMode the current view mode
      * @param isTopLevel true if the current folder is not a child
-     * @return whether the drawer indicator is shown
      */
-    private boolean getShouldShowDrawerIndicator(final int viewMode,
-            final boolean isTopLevel) {
-        // If search list/conv mode: disable indicator
-        // Indicator is enabled either in conversation list or folder list mode.
-        return isDrawerEnabled() && !ViewMode.isSearchMode(viewMode)
-            && (viewMode == ViewMode.CONVERSATION_LIST  && isTopLevel);
+    private void updateDrawerIndicator(final int viewMode, final boolean isTopLevel) {
+        // Show burger if we're either in conversation list or folder list mode.
+        if (isDrawerEnabled() && !ViewMode.isSearchMode(viewMode)
+            && (viewMode == ViewMode.CONVERSATION_LIST  && isTopLevel)) {
+            mDrawerToggle.setHomeAsUpIndicator(R.drawable.ic_menu_wht_24dp);
+
+        // Otherwise, show the back arrow for the indicator.
+        } else {
+            mDrawerToggle.setHomeAsUpIndicator(R.drawable.ic_arrow_back_wht_24dp_with_rtl);
+        }
     }
 
     public void disablePagerUpdates() {
@@ -2261,6 +2368,9 @@
         }
         LogUtils.d(LOG_TAG, "AbstractActivityController.setAccount(): account = %s", account.uri);
         mAccount = account;
+
+        Analytics.getInstance().setEmail(account.getEmailAddress(), account.getType());
+
         // Only change AAC state here. Do *not* modify any other object's state. The object
         // should listen on account changes.
         restartOptionalLoader(LOADER_RECENT_FOLDERS, mFolderCallbacks, Bundle.EMPTY);
@@ -2293,12 +2403,7 @@
         if (savedState.containsKey(SAVED_CONVERSATION)) {
             // Open the conversation.
             final Conversation conversation = savedState.getParcelable(SAVED_CONVERSATION);
-            if (conversation != null && conversation.position < 0) {
-                // Set the position to 0 on this conversation, as we don't know where it is
-                // in the list
-                conversation.position = 0;
-            }
-            showConversation(conversation);
+            restoreConversation(conversation);
         }
 
         if (savedState.containsKey(SAVED_TOAST_BAR_OP)) {
@@ -2362,8 +2467,7 @@
             final boolean isConversationMode = intent.hasExtra(Utils.EXTRA_CONVERSATION);
 
             if (intent.getBooleanExtra(Utils.EXTRA_FROM_NOTIFICATION, false)) {
-                Analytics.getInstance().setCustomDimension(Analytics.CD_INDEX_ACCOUNT_TYPE,
-                        AnalyticsUtils.getAccountTypeForAccount(mAccount.getEmailAddress()));
+                Analytics.getInstance().setEmail(mAccount.getEmailAddress(), mAccount.getType());
                 Analytics.getInstance().sendEvent("notification_click",
                         isConversationMode ? "conversation" : "conversation_list", null, 0);
             }
@@ -2402,12 +2506,9 @@
         } else if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
             if (intent.hasExtra(Utils.EXTRA_ACCOUNT)) {
                 mHaveSearchResults = false;
-                // Save this search query for future suggestions.
+                // Save this search query for future suggestions
                 final String query = intent.getStringExtra(SearchManager.QUERY);
-                final String authority = mContext.getString(R.string.suggestions_authority);
-                final SearchRecentSuggestions suggestions = new SearchRecentSuggestions(
-                        mContext, authority, SuggestionsProvider.MODE);
-                suggestions.saveRecentQuery(query, null);
+                mSearchViewController.saveRecentQuery(query);
                 setAccount((Account) intent.getParcelableExtra(Utils.EXTRA_ACCOUNT));
                 fetchSearchFolder(intent);
                 if (shouldEnterSearchConvMode()) {
@@ -2429,7 +2530,7 @@
      * Returns true if we should enter conversation mode with search.
      */
     protected final boolean shouldEnterSearchConvMode() {
-        return mHaveSearchResults && Utils.showTwoPaneSearchResults(mActivity.getActivityContext());
+        return mHaveSearchResults && shouldShowFirstConversation();
     }
 
     /**
@@ -2439,17 +2540,26 @@
      */
     private void restoreSelectedConversations(Bundle savedState) {
         if (savedState == null) {
-            mSelectedSet.clear();
+            mCheckedSet.clear();
             return;
         }
-        final ConversationSelectionSet selectedSet = savedState.getParcelable(SAVED_SELECTED_SET);
+        final ConversationCheckedSet selectedSet = savedState.getParcelable(SAVED_SELECTED_SET);
         if (selectedSet == null || selectedSet.isEmpty()) {
-            mSelectedSet.clear();
+            mCheckedSet.clear();
             return;
         }
 
         // putAll will take care of calling our registered onSetPopulated method
-        mSelectedSet.putAll(selectedSet);
+        mCheckedSet.putAll(selectedSet);
+    }
+
+    protected void restoreConversation(Conversation conversation) {
+        if (conversation != null && conversation.position < 0) {
+            // Set the position to 0 on this conversation, as we don't know where it is
+            // in the list
+            conversation.position = 0;
+        }
+        showConversation(conversation);
     }
 
     /**
@@ -2461,10 +2571,20 @@
      * onLoadFinished(Loader, Cursor) on any callback.
      */
     protected void showConversation(Conversation conversation) {
-        showConversation(conversation, true /* markAsRead */);
+        showConversation(conversation, false /* shouldAnimate */);
     }
 
-    protected void showConversation(Conversation conversation, boolean markAsRead) {
+    /**
+     * Helper method to allow for conversation view animation control. Implementing classes should
+     * directly override this to handle the animation.
+     * @param conversation
+     * @param shouldAnimate true if we want to animate the conversation in, false otherwise
+     */
+    protected void showConversation(Conversation conversation, boolean shouldAnimate) {
+        showConversationWithPeek(conversation, false /* peek */);
+    }
+
+    protected void showConversationWithPeek(Conversation conversation, boolean peek) {
         if (conversation != null) {
             Utils.sConvLoadTimer.start();
         }
@@ -2475,11 +2595,10 @@
     }
 
     /**
+     * Show the wait for account initialization mode.
      * Children can override this method, but they must call super.showWaitForInitialization().
-     * {@inheritDoc}
      */
-    @Override
-    public void showWaitForInitialization() {
+    protected void showWaitForInitialization() {
         mViewMode.enterWaitingForInitializationMode();
         mWaitFragment = WaitFragment.newInstance(mAccount, true /* expectingMessages */);
     }
@@ -2532,12 +2651,12 @@
     }
 
     /**
-     * Children can override this method, but they must call super.showConversationList().
-     * {@inheritDoc}
+     * Show the conversation List with the list context provided here. On certain layouts, this
+     * might show more than just the conversation list. For instance, on tablets this might show
+     * the conversations along with the conversation list.
+     * @param listContext context providing information on what conversation list to display.
      */
-    @Override
-    public void showConversationList(ConversationListContext listContext) {
-    }
+    protected abstract void showConversationList(ConversationListContext listContext);
 
     @Override
     public void onConversationSelected(Conversation conversation, boolean inLoaderCallbacks) {
@@ -2548,7 +2667,7 @@
         // Only animate destructive actions if we are going to be showing the
         // conversation list when we show the next conversation.
         commitDestructiveActions(mIsTablet);
-        showConversation(conversation);
+        showConversation(conversation, true /* shouldAnimate */);
     }
 
     @Override
@@ -2600,6 +2719,22 @@
     }
 
     /**
+     * Invoked by {@link ConversationPagerAdapter} when a new page in the ViewPager is selected.
+     *
+     * @param conversation the conversation of the now currently visible fragment
+     *
+     */
+    @Override
+    public void onConversationViewSwitched(Conversation conversation) {
+        setCurrentConversation(conversation);
+    }
+
+    @Override
+    public boolean isCurrentConversationJustPeeking() {
+        return false;
+    }
+
+    /**
      * {@link LoaderManager} currently has a bug in
      * {@link LoaderManager#restartLoader(int, Bundle, android.app.LoaderManager.LoaderCallbacks)}
      * where, if a previous onCreateLoader returned a null loader, this method will NPE. Work around
@@ -2739,7 +2874,7 @@
 
         // 1. current account is already set and is in allAccounts:
         //    1a. It has changed -> load the updated account.
-        //    2b. It is unchanged -> no-op
+        //    1b. It is unchanged -> no-op
         // 2. current account is set and is not in allAccounts -> pick first (acct was deleted?)
         // 3. saved preference has an account -> pick that one
         // 4. otherwise just pick first
@@ -2921,7 +3056,7 @@
                 mConversationListCursor.moveFailedIntoDrafts(mTarget);
                 undoEnabled = false;
             }
-            if (undoEnabled) {
+            if (undoEnabled && mTarget.size() > 0) {
                 mHandler.postDelayed(new Runnable() {
                     @Override
                     public void run() {
@@ -2932,7 +3067,7 @@
             }
             refreshConversationList();
             if (mIsSelectedSet) {
-                mSelectedSet.clear();
+                mCheckedSet.clear();
             }
         }
 
@@ -3014,7 +3149,7 @@
 
     @Override
     public final void onRefreshRequired() {
-        if (isAnimating() || isDragging()) {
+        if (isAnimating()) {
             final ConversationListFragment f = getConversationListFragment();
             LogUtils.w(ConversationCursor.LOG_TAG,
                     "onRefreshRequired: delay until animating done. cursor=%s adapter=%s",
@@ -3028,29 +3163,6 @@
     }
 
     @Override
-    public void startDragMode() {
-        mIsDragHappening = true;
-    }
-
-    @Override
-    public void stopDragMode() {
-        mIsDragHappening = false;
-        if (mConversationListCursor.isRefreshReady()) {
-            LogUtils.i(ConversationCursor.LOG_TAG, "Stopped dragging: try sync");
-            onRefreshReady();
-        }
-
-        if (mConversationListCursor.isRefreshRequired()) {
-            LogUtils.i(ConversationCursor.LOG_TAG, "Stopped dragging: refresh");
-            mConversationListCursor.refresh();
-        }
-    }
-
-    private boolean isDragging() {
-        return mIsDragHappening;
-    }
-
-    @Override
     public boolean isAnimating() {
         boolean isAnimating = false;
         ConversationListFragment convListFragment = getConversationListFragment();
@@ -3085,14 +3197,14 @@
                     mConversationListCursor, getConversationListFragment().getAnimatedAdapter());
         }
         mTracker.onCursorUpdated();
-        perhapsShowFirstSearchResult();
+        perhapsShowFirstConversation();
     }
 
     @Override
     public final void onDataSetChanged() {
         updateConversationListFragment();
         mConversationListObservable.notifyChanged();
-        mSelectedSet.validateAgainstCursor(mConversationListCursor);
+        mCheckedSet.validateAgainstCursor(mConversationListCursor);
     }
 
     /**
@@ -3174,7 +3286,7 @@
     }
 
     @Override
-    public void onSetPopulated(ConversationSelectionSet set) {
+    public void onSetPopulated(ConversationCheckedSet set) {
         mCabActionMenu = new SelectedConversationsActionMenu(mActivity, set, mFolder);
         if (mViewMode.isListMode() || (mIsTablet && mViewMode.isConversationMode())) {
             enableCabMode();
@@ -3182,13 +3294,13 @@
     }
 
     @Override
-    public void onSetChanged(ConversationSelectionSet set) {
+    public void onSetChanged(ConversationCheckedSet set) {
         // Do nothing. We don't care about changes to the set.
     }
 
     @Override
-    public ConversationSelectionSet getSelectedSet() {
-        return mSelectedSet;
+    public ConversationCheckedSet getCheckedSet() {
+        return mCheckedSet;
     }
 
     /**
@@ -3216,7 +3328,7 @@
      * Re-enable CAB mode only if we have an active selection
      */
     protected void maybeEnableCabMode() {
-        if (!mSelectedSet.isEmpty()) {
+        if (!mCheckedSet.isEmpty()) {
             if (mCabActionMenu != null) {
                 mCabActionMenu.activate();
             }
@@ -3227,7 +3339,7 @@
      * Unselect conversations and exit CAB mode.
      */
     protected final void exitCabMode() {
-        mSelectedSet.clear();
+        mCheckedSet.clear();
     }
 
     @Override
@@ -3238,7 +3350,8 @@
             return;
         }
         if (mAccount.supportsSearch()) {
-            mActionBarController.expandSearch();
+            mSearchViewController.showSearchActionBar(
+                    MaterialSearchViewController.SEARCH_VIEW_STATE_VISIBLE);
         } else {
             Toast.makeText(mActivity.getActivityContext(), mActivity.getActivityContext()
                     .getString(R.string.search_unsupported), Toast.LENGTH_SHORT).show();
@@ -3246,165 +3359,6 @@
     }
 
     @Override
-    public void exitSearchMode() {
-        if (mViewMode.getMode() == ViewMode.SEARCH_RESULTS_LIST) {
-            mActivity.finish();
-        }
-    }
-
-    /**
-     * Supports dragging conversations to a folder.
-     */
-    @Override
-    public boolean supportsDrag(DragEvent event, Folder folder) {
-        return (folder != null
-                && event != null
-                && event.getClipDescription() != null
-                && folder.supportsCapability
-                    (UIProvider.FolderCapabilities.CAN_ACCEPT_MOVED_MESSAGES)
-                && !mFolder.equals(folder));
-    }
-
-    /**
-     * Handles dropping conversations to a folder.
-     */
-    @Override
-    public void handleDrop(DragEvent event, final Folder folder) {
-        if (!supportsDrag(event, folder)) {
-            return;
-        }
-        if (folder.isType(UIProvider.FolderType.STARRED)) {
-            // Moving a conversation to the starred folder adds the star and
-            // removes the current label
-            handleDropInStarred(folder);
-            return;
-        }
-        if (mFolder.isType(UIProvider.FolderType.STARRED)) {
-            handleDragFromStarred(folder);
-            return;
-        }
-        final ArrayList<FolderOperation> dragDropOperations = new ArrayList<FolderOperation>();
-        final Collection<Conversation> conversations = mSelectedSet.values();
-        // Add the drop target folder.
-        dragDropOperations.add(new FolderOperation(folder, true));
-        // Remove the current folder unless the user is viewing "all".
-        // That operation should just add the new folder.
-        boolean isDestructive = !mFolder.isViewAll()
-                && mFolder.supportsCapability
-                    (UIProvider.FolderCapabilities.CAN_ACCEPT_MOVED_MESSAGES);
-        if (isDestructive) {
-            dragDropOperations.add(new FolderOperation(mFolder, false));
-        }
-        // Drag and drop is destructive: we remove conversations from the
-        // current folder.
-        final DestructiveAction action =
-                getFolderChange(conversations, dragDropOperations, isDestructive,
-                        true /* isBatch */, true /* showUndo */, true /* isMoveTo */, folder,
-                        null /* undoCallback */);
-        if (isDestructive) {
-            delete(0, conversations, action, true);
-        } else {
-            action.performAction();
-        }
-    }
-
-    private void handleDragFromStarred(Folder folder) {
-        final Collection<Conversation> conversations = mSelectedSet.values();
-        // The conversation list deletes and performs the action if it exists.
-        final ConversationListFragment convListFragment = getConversationListFragment();
-        // There should always be a convlistfragment, or the user could not have
-        // dragged/ dropped conversations.
-        if (convListFragment != null) {
-            LogUtils.d(LOG_TAG, "AAC.requestDelete: ListFragment is handling delete.");
-            ArrayList<ConversationOperation> ops = new ArrayList<ConversationOperation>();
-            ArrayList<Uri> folderUris;
-            ArrayList<Boolean> adds;
-            for (Conversation target : conversations) {
-                folderUris = new ArrayList<Uri>();
-                adds = new ArrayList<Boolean>();
-                folderUris.add(folder.folderUri.fullUri);
-                adds.add(Boolean.TRUE);
-                final HashMap<Uri, Folder> targetFolders =
-                        Folder.hashMapForFolders(target.getRawFolders());
-                targetFolders.put(folder.folderUri.fullUri, folder);
-                ops.add(mConversationListCursor.getConversationFolderOperation(target,
-                        folderUris, adds, targetFolders.values()));
-            }
-            if (mConversationListCursor != null) {
-                mConversationListCursor.updateBulkValues(ops);
-            }
-            refreshConversationList();
-            mSelectedSet.clear();
-        }
-    }
-
-    private void handleDropInStarred(Folder folder) {
-        final Collection<Conversation> conversations = mSelectedSet.values();
-        // The conversation list deletes and performs the action if it exists.
-        final ConversationListFragment convListFragment = getConversationListFragment();
-        // There should always be a convlistfragment, or the user could not have
-        // dragged/ dropped conversations.
-        if (convListFragment != null) {
-            LogUtils.d(LOG_TAG, "AAC.requestDelete: ListFragment is handling delete.");
-            convListFragment.requestDelete(R.id.change_folders, conversations,
-                    new DroppedInStarredAction(conversations, mFolder, folder));
-        }
-    }
-
-    // When dragging conversations to the starred folder, remove from the
-    // original folder and add a star
-    private class DroppedInStarredAction implements DestructiveAction {
-        private final Collection<Conversation> mConversations;
-        private final Folder mInitialFolder;
-        private final Folder mStarred;
-
-        public DroppedInStarredAction(Collection<Conversation> conversations, Folder initialFolder,
-                Folder starredFolder) {
-            mConversations = conversations;
-            mInitialFolder = initialFolder;
-            mStarred = starredFolder;
-        }
-
-        @Override
-        public void setUndoCallback(UndoCallback undoCallback) {
-            return;     // currently not applicable
-        }
-
-        @Override
-        public void performAction() {
-            ToastBarOperation undoOp = new ToastBarOperation(mConversations.size(),
-                    R.id.change_folders, ToastBarOperation.UNDO, true /* batch */, mInitialFolder);
-            onUndoAvailable(undoOp);
-            ArrayList<ConversationOperation> ops = new ArrayList<ConversationOperation>();
-            ContentValues values = new ContentValues();
-            ArrayList<Uri> folderUris;
-            ArrayList<Boolean> adds;
-            ConversationOperation operation;
-            for (Conversation target : mConversations) {
-                folderUris = new ArrayList<Uri>();
-                adds = new ArrayList<Boolean>();
-                folderUris.add(mStarred.folderUri.fullUri);
-                adds.add(Boolean.TRUE);
-                folderUris.add(mInitialFolder.folderUri.fullUri);
-                adds.add(Boolean.FALSE);
-                final HashMap<Uri, Folder> targetFolders =
-                        Folder.hashMapForFolders(target.getRawFolders());
-                targetFolders.put(mStarred.folderUri.fullUri, mStarred);
-                targetFolders.remove(mInitialFolder.folderUri.fullUri);
-                values.put(ConversationColumns.STARRED, true);
-                operation = mConversationListCursor.getConversationFolderOperation(target,
-                        folderUris, adds, targetFolders.values(), values);
-                ops.add(operation);
-            }
-            if (mConversationListCursor != null) {
-                mConversationListCursor.updateBulkValues(ops);
-            }
-            refreshConversationList();
-            mSelectedSet.clear();
-        }
-    }
-
-    @Override
     public void onTouchEvent(MotionEvent event) {
         if (event.getAction() == MotionEvent.ACTION_DOWN) {
             if (mToastBar != null && !mToastBar.isEventInToastBar(event)) {
@@ -3467,6 +3421,9 @@
             LogUtils.d(LOG_TAG,
                     "IN AAC.ConversationCursor.onLoadFinished, data=%s loader=%s this=%s",
                     data, loader, this);
+            if (isDestroyed()) {
+                return;
+            }
             if (isDrawerEnabled() && mDrawerListener.getDrawerState() != DrawerLayout.STATE_IDLE) {
                 LogUtils.d(LOG_TAG, "ConversationListLoaderCallbacks.onLoadFinished: ignoring.");
                 mConversationListLoadFinishedIgnored = true;
@@ -3492,7 +3449,7 @@
                 // check and inform the cursor of the change in visibility here.
                 informCursorVisiblity(true);
             }
-            perhapsShowFirstSearchResult();
+            perhapsShowFirstConversation();
         }
 
         @Override
@@ -3576,6 +3533,9 @@
             if (data == null) {
                 LogUtils.e(LOG_TAG, "Received null cursor from loader id: %d", loader.getId());
             }
+            if (isDestroyed()) {
+                return;
+            }
             switch (loader.getId()) {
                 case LOADER_FOLDER_CURSOR:
                     if (data != null && data.moveToFirst()) {
@@ -3709,6 +3669,9 @@
             if (data == null) {
                 LogUtils.e(LOG_TAG, "Received null cursor from loader id: %d", loader.getId());
             }
+            if (isDestroyed()) {
+                return;
+            }
             switch (loader.getId()) {
                 case LOADER_ACCOUNT_CURSOR:
                     // We have received an update on the list of accounts.
@@ -3765,7 +3728,6 @@
                                 mAccountObservers.notifyChanged();
                             }
                             perhapsEnterWaitMode();
-                            perhapsStartWelcomeTour();
                         } else {
                             LogUtils.e(LOG_TAG, "Got update for account: %s with current account:"
                                     + " %s", updatedAccount.uri, mAccount.uri);
@@ -3785,54 +3747,12 @@
     }
 
     /**
-     * Loads the preference that tells whether the welcome tour should be displayed,
-     * and calls the callback with this value.
-     * For this to function, the account must have been synced.
-     */
-    private void perhapsStartWelcomeTour() {
-        new AsyncTask<Void, Void, Boolean>() {
-            @Override
-            protected Boolean doInBackground(Void... params) {
-                if (mActivity.wasLatestWelcomeTourShownOnDeviceForAllAccounts()) {
-                    // No need to go through the WelcomeStateLoader machinery.
-                    return false;
-                }
-                return true;
-            }
-
-            @Override
-            protected void onPostExecute(Boolean result) {
-                if (result) {
-                    if (mAccount != null && mAccount.isAccountReady()) {
-                        LoaderManager.LoaderCallbacks<?> welcomeLoaderCallbacks =
-                                mActivity.getWelcomeCallbacks();
-                        if (welcomeLoaderCallbacks != null) {
-                            // The callback is responsible for showing the tour when appropriate.
-                            mActivity.getLoaderManager().initLoader(LOADER_WELCOME_TOUR_ACCOUNTS,
-                                    Bundle.EMPTY, welcomeLoaderCallbacks);
-                        }
-                    }
-                }
-            }
-        }.execute();
-    }
-
-    /**
      * Updates controller state based on search results and shows first conversation if required.
+     * Be sure to call the super-implementation if overriding.
      */
-    private void perhapsShowFirstSearchResult() {
-        if (mCurrentConversation == null) {
-            // Shown for search results in two-pane mode only.
-            mHaveSearchResults = Intent.ACTION_SEARCH.equals(mActivity.getIntent().getAction())
-                    && mConversationListCursor.getCount() > 0;
-            if (!shouldShowFirstConversation()) {
-                return;
-            }
-            mConversationListCursor.moveToPosition(0);
-            final Conversation conv = new Conversation(mConversationListCursor);
-            conv.position = 0;
-            onConversationSelected(conv, true /* checkSafeToModifyFragments */);
-        }
+    protected void perhapsShowFirstConversation() {
+        mHaveSearchResults = Intent.ACTION_SEARCH.equals(mActivity.getIntent().getAction())
+                && mConversationListCursor.getCount() > 0;
     }
 
     /**
@@ -3863,7 +3783,7 @@
 
     @Override
     public final DestructiveAction getBatchAction(int action, UndoCallback undoCallback) {
-        final DestructiveAction da = new ConversationAction(action, mSelectedSet.values(), true);
+        final DestructiveAction da = new ConversationAction(action, mCheckedSet.values(), true);
         da.setUndoCallback(undoCallback);
         registerDestructiveAction(da);
         return da;
@@ -3871,7 +3791,7 @@
 
     @Override
     public final DestructiveAction getDeferredBatchAction(int action, UndoCallback undoCallback) {
-        return getDeferredAction(action, mSelectedSet.values(), true, undoCallback);
+        return getDeferredAction(action, mCheckedSet.values(), true, undoCallback);
     }
 
     /**
@@ -3935,7 +3855,7 @@
             if (isPerformed()) {
                 return;
             }
-            if (mIsDestructive && mShowUndo) {
+            if (mIsDestructive && mShowUndo && mTarget.size() > 0) {
                 ToastBarOperation undoOp = new ToastBarOperation(mTarget.size(), mAction,
                         ToastBarOperation.UNDO, mIsSelectedSet, mActionFolder);
                 onUndoAvailable(undoOp);
@@ -3970,7 +3890,7 @@
             }
             refreshConversationList();
             if (mIsSelectedSet) {
-                mSelectedSet.clear();
+                mCheckedSet.clear();
             }
         }
 
@@ -4060,19 +3980,19 @@
         final ActionClickedListener listener;
         final int actionTextResourceId;
         final int lastSyncResult = folder.lastSyncResult;
-        switch (lastSyncResult & 0x0f) {
+        switch (UIProvider.getResultFromLastSyncResult(lastSyncResult)) {
             case UIProvider.LastSyncResult.CONNECTION_ERROR:
-                // The sync request that caused this failure.
-                final int syncRequest = lastSyncResult >> 4;
+                // The sync status that caused this failure.
+                final int syncStatus = UIProvider.getStatusFromLastSyncResult(lastSyncResult);
                 // Show: User explicitly pressed the refresh button and there is no connection
                 // Show: The first time the user enters the app and there is no connection
                 //       TODO(viki): Implement this.
                 // Reference: http://b/7202801
-                final boolean showToast = (syncRequest & UIProvider.SyncStatus.USER_REFRESH) != 0;
+                final boolean showToast = (syncStatus & UIProvider.SyncStatus.USER_REFRESH) != 0;
                 // Don't show: Already in the app; user switches to a synced label
                 // Don't show: In a live label and a background sync fails
                 final boolean avoidToast = !showToast && (folder.syncWindow > 0
-                        || (syncRequest & UIProvider.SyncStatus.BACKGROUND_SYNC) != 0);
+                        || (syncStatus & UIProvider.SyncStatus.BACKGROUND_SYNC) != 0);
                 if (avoidToast) {
                     return;
                 }
@@ -4100,6 +4020,7 @@
                 Utils.getSyncStatusText(mActivity.getActivityContext(), lastSyncResult),
                 actionTextResourceId,
                 replaceVisibleToast,
+                true /* autohide */,
                 new ToastBarOperation(1, 0, ToastBarOperation.ERROR, false, folder));
     }
 
@@ -4153,35 +4074,6 @@
     }
 
     @Override
-    public void onFooterViewErrorActionClick(Folder folder, int errorStatus) {
-        Uri uri = null;
-        switch (errorStatus) {
-            case UIProvider.LastSyncResult.CONNECTION_ERROR:
-                if (folder != null && folder.refreshUri != null) {
-                    uri = folder.refreshUri;
-                }
-                break;
-            case UIProvider.LastSyncResult.AUTH_ERROR:
-                promptUserForAuthentication(mAccount);
-                return;
-            case UIProvider.LastSyncResult.SECURITY_ERROR:
-                return; // Currently we do nothing for security errors.
-            case UIProvider.LastSyncResult.STORAGE_ERROR:
-                showStorageErrorDialog();
-                return;
-            case UIProvider.LastSyncResult.INTERNAL_ERROR:
-                Utils.sendFeedback(mActivity, mAccount, true /* reportingProblem */);
-                return;
-            default:
-                return;
-        }
-
-        if (uri != null) {
-            startAsyncRefreshTask(uri);
-        }
-    }
-
-    @Override
     public void onFooterViewLoadMoreClick(Folder folder) {
         if (folder != null && folder.loadMoreUri != null) {
             startAsyncRefreshTask(folder.loadMoreUri);
@@ -4223,7 +4115,7 @@
             UndoCallback undoCallback) {
         final Collection<Conversation> target;
         if (isBatch) {
-            target = mSelectedSet.values();
+            target = mCheckedSet.values();
         } else {
             LogUtils.d(LOG_TAG, "Will act upon %s", mCurrentConversation);
             target = Conversation.listOf(mCurrentConversation);
@@ -4290,6 +4182,11 @@
     }
 
     @Override
+    public boolean shouldPreventListSwipesEntirely() {
+        return false;
+    }
+
+    @Override
     public DrawerController getDrawerController() {
         return mDrawerListener;
     }
@@ -4353,7 +4250,7 @@
             // When closed, we want to use either the burger, or up, based on where we are
             final int mode = mViewMode.getMode();
             final boolean isTopLevel = Folder.isRoot(mFolder);
-            mDrawerToggle.setDrawerIndicatorEnabled(getShouldShowDrawerIndicator(mode, isTopLevel));
+            updateDrawerIndicator(mode, isTopLevel);
 
             for (DrawerLayout.DrawerListener l : mObservers) {
                 l.onDrawerClosed(drawerView);
@@ -4407,9 +4304,6 @@
 
             mOldSlideOffset = slideOffset;
 
-            // If we're sliding, we always want to show the burger
-            mDrawerToggle.setDrawerIndicatorEnabled(true /* enable */);
-
             for (DrawerLayout.DrawerListener l : mObservers) {
                 l.onDrawerSlide(drawerView, slideOffset);
             }
@@ -4552,16 +4446,20 @@
     }
 
     @Override
+    public boolean setupEmptyIconView(Folder folder, boolean isEmpty) {
+        return false;
+    }
+
+    @Override
     public View.OnClickListener getNavigationViewClickListener() {
         return mHomeButtonListener;
     }
 
     // TODO: Fold this into the outer class when b/16627877 is fixed
     private class HomeButtonListener implements View.OnClickListener {
-
         @Override
         public void onClick(View v) {
-            onUpPressed();
+            handleUpPress();
         }
     }
 }
diff --git a/src/com/android/mail/ui/AbstractConversationViewFragment.java b/src/com/android/mail/ui/AbstractConversationViewFragment.java
index f2122f1..9332c7b 100644
--- a/src/com/android/mail/ui/AbstractConversationViewFragment.java
+++ b/src/com/android/mail/ui/AbstractConversationViewFragment.java
@@ -26,6 +26,7 @@
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
+import android.support.annotation.Nullable;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
@@ -163,6 +164,50 @@
     }
 
     /**
+     * Marks a conversation either 'seen' (force=false), as in when the conversation is made visible
+     * and should be marked read, or 'read' (force=true), as in when the action bar menu item to
+     * mark this conversation read is selected.
+     *
+     * @param force true to force marking it read, false to allow peek mode to prevent it
+     */
+    private final void markRead(boolean force) {
+        final ControllableActivity activity = (ControllableActivity) getActivity();
+        if (activity == null) {
+            return;
+        }
+
+        // mark viewed/read if not previously marked viewed by this conversation view,
+        // or if unread messages still exist in the message list cursor
+        // we don't want to keep marking viewed on rotation or restore
+        // but we do want future re-renders to mark read (e.g. "New message from X" case)
+        final MessageCursor cursor = getMessageCursor();
+        LogUtils.d(LOG_TAG, "onConversationSeen() - mConversation.isViewed() = %b, "
+                + "cursor null = %b, cursor.isConversationRead() = %b",
+                mConversation.isViewed(), cursor == null,
+                cursor != null && cursor.isConversationRead());
+        if (!mConversation.isViewed() || (cursor != null && !cursor.isConversationRead())) {
+            // Mark the conversation read no matter what if force=true.
+            // else only mark it seen if appropriate (2-pane peek=true doesn't mark things seen)
+            final boolean convMarkedRead;
+            if (force) {
+                activity.getConversationUpdater()
+                        .markConversationsRead(Arrays.asList(mConversation), true /* read */,
+                                true /* viewed */);
+                convMarkedRead = true;
+            } else {
+                convMarkedRead = activity.getConversationUpdater()
+                        .markConversationSeen(mConversation);
+            }
+
+            // and update the Message objects in the cursor so the next time a cursor update
+            // happens with these messages marked read, we know to ignore it
+            if (convMarkedRead && cursor != null && !cursor.isClosed()) {
+                cursor.markMessagesRead();
+            }
+        }
+    }
+
+    /**
      * Subclasses must override this, since they may want to display a single or
      * many messages related to this conversation.
      */
@@ -278,7 +323,7 @@
     }
 
     @Override
-    public MessageCursor getMessageCursor() {
+    public @Nullable MessageCursor getMessageCursor() {
         return mCursor;
     }
 
@@ -326,17 +371,23 @@
             return false;
         }
 
-        boolean handled = false;
+        boolean handled = true;
         final int itemId = item.getItemId();
-        if (itemId == R.id.inside_conversation_unread) {
+        if (itemId == R.id.inside_conversation_unread || itemId == R.id.toggle_read_unread) {
             markUnread();
-            handled = true;
+        } else if (itemId == R.id.read) {
+            markRead(true /* force */);
+            mActivity.supportInvalidateOptionsMenu();
         } else if (itemId == R.id.show_original) {
             showUntransformedConversation();
-            handled = true;
         } else if (itemId == R.id.print_all) {
             printConversation();
-            handled = true;
+        } else if (itemId == R.id.reply) {
+            handleReply();
+        } else if (itemId == R.id.reply_all) {
+            handleReplyAll();
+        } else {
+            handled = false;
         }
         return handled;
     }
@@ -344,7 +395,7 @@
     @Override
     public void onPrepareOptionsMenu(Menu menu) {
         // Only show option if we support message transforms and message has been transformed.
-        Utils.setMenuItemVisibility(menu, R.id.show_original, supportsMessageTransforms() &&
+        Utils.setMenuItemPresent(menu, R.id.show_original, supportsMessageTransforms() &&
                 mHasConversationBeenTransformed && !mHasConversationTransformBeenReverted);
 
         final MenuItem printMenuItem = menu.findItem(R.id.print_all);
@@ -550,7 +601,7 @@
               mConversation.isRemote ? "unsynced" : "synced", mConversation.getNumMessages());
     }
 
-    protected void onConversationSeen() {
+    protected final void onConversationSeen() {
         LogUtils.d(LOG_TAG, "AbstractConversationViewFragment#onConversationSeen()");
 
         // Ignore unsafe calls made after a fragment is detached from an activity
@@ -576,26 +627,7 @@
         // do not want a  later mark-read operation to undo this.  So we check this variable which
         // is set in #markUnread() which suppresses automatic mark-read.
         if (!mSuppressMarkingViewed) {
-            // mark viewed/read if not previously marked viewed by this conversation view,
-            // or if unread messages still exist in the message list cursor
-            // we don't want to keep marking viewed on rotation or restore
-            // but we do want future re-renders to mark read (e.g. "New message from X" case)
-            final MessageCursor cursor = getMessageCursor();
-            LogUtils.d(LOG_TAG, "onConversationSeen() - mConversation.isViewed() = %b, "
-                    + "cursor null = %b, cursor.isConversationRead() = %b",
-                    mConversation.isViewed(), cursor == null,
-                    cursor != null && cursor.isConversationRead());
-            if (!mConversation.isViewed() || (cursor != null && !cursor.isConversationRead())) {
-                // Mark the conversation viewed and read.
-                activity.getConversationUpdater()
-                        .markConversationsRead(Arrays.asList(mConversation), true, true);
-
-                // and update the Message objects in the cursor so the next time a cursor update
-                // happens with these messages marked read, we know to ignore it
-                if (cursor != null && !cursor.isClosed()) {
-                    cursor.markMessagesRead();
-                }
-            }
+            markRead(false /* force */);
         }
         activity.getListHandler().onConversationSeen();
 
@@ -706,6 +738,10 @@
      */
     protected abstract void printConversation();
 
+    // These methods should perform default reply/replyall action on the last message.
+    protected abstract void handleReply();
+    protected abstract void handleReplyAll();
+
     public boolean shouldAlwaysShowImages() {
         return (mAccount != null) && (mAccount.settings.showImages == Settings.ShowImages.ALWAYS);
     }
diff --git a/src/com/android/mail/ui/AbstractConversationWebViewClient.java b/src/com/android/mail/ui/AbstractConversationWebViewClient.java
index 2a52d36..71e221c 100644
--- a/src/com/android/mail/ui/AbstractConversationWebViewClient.java
+++ b/src/com/android/mail/ui/AbstractConversationWebViewClient.java
@@ -100,9 +100,6 @@
         }
 
         final Uri queryUri = Uri.withAppendedPath(message.attachmentByCidUri, cid);
-        if (queryUri == null) {
-            return null;
-        }
 
         // query for the attachment using its cid
         final ContentResolver cr = getActivity().getContentResolver();
diff --git a/src/com/android/mail/ui/AbstractMailActivity.java b/src/com/android/mail/ui/AbstractMailActivity.java
index 3e336a0..41cc1d6 100644
--- a/src/com/android/mail/ui/AbstractMailActivity.java
+++ b/src/com/android/mail/ui/AbstractMailActivity.java
@@ -22,6 +22,9 @@
 import android.os.StrictMode;
 import android.support.v7.app.ActionBarActivity;
 
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+
 /**
  * <p>
  * A complete Mail activity instance. This is the toplevel class that creates the views and handles
@@ -38,8 +41,7 @@
 
     private final UiHandler mUiHandler = new UiHandler();
 
-    // STOPSHIP: ship with false
-    private static final boolean STRICT_MODE = true;
+    private static final boolean STRICT_MODE = false;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -86,4 +88,14 @@
     public Context getActivityContext() {
         return this;
     }
+
+    @Override
+    public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) {
+        super.dump(prefix, fd, writer, args);
+        // Supplementally dump the contents of the OS LoaderManager and FragmentManager.
+        // Both are still possible to use, and the supportlib dump reads from neither.
+        getLoaderManager().dump(prefix, fd, writer, args);
+        getFragmentManager().dump(prefix, fd, writer, args);
+    }
+
 }
diff --git a/src/com/android/mail/ui/AccountItemView.java b/src/com/android/mail/ui/AccountItemView.java
index 74b0245..5b87f7e 100644
--- a/src/com/android/mail/ui/AccountItemView.java
+++ b/src/com/android/mail/ui/AccountItemView.java
@@ -86,9 +86,15 @@
         if (isCurrentAccount) {
             mCheckmark.setVisibility(View.VISIBLE);
             mAccountDisplayName.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
+            final int blackColor = getResources().getColor(R.color.text_color_black);
+            mAccountDisplayName.setTextColor(blackColor);
+            mAccountAddress.setTextColor(blackColor);
         } else {
             mCheckmark.setVisibility(View.GONE);
             mAccountDisplayName.setTypeface(Typeface.DEFAULT);
+            final int greyColor = getResources().getColor(R.color.text_color_grey);
+            mAccountDisplayName.setTextColor(greyColor);
+            mAccountAddress.setTextColor(greyColor);
         }
 
         ImageView v = (ImageView) mAvatar.findViewById(R.id.avatar);
diff --git a/src/com/android/mail/ui/AccountLoadCallbacks.java b/src/com/android/mail/ui/AccountLoadCallbacks.java
index 323cbfe..f8a3e50 100644
--- a/src/com/android/mail/ui/AccountLoadCallbacks.java
+++ b/src/com/android/mail/ui/AccountLoadCallbacks.java
@@ -38,8 +38,7 @@
     public Loader<ObjectCursor<Account>> onCreateLoader(int id, Bundle args) {
         final String[] projection = UIProvider.ACCOUNTS_PROJECTION;
         final CursorCreator<Account> factory = Account.FACTORY;
-        return new ObjectCursorLoader<Account>(
-                mContext, mAccountUri, projection, factory);
+        return new ObjectCursorLoader<Account>(mContext, mAccountUri, projection, factory);
     }
 
     @Override
diff --git a/src/com/android/mail/ui/ActionBarController.java b/src/com/android/mail/ui/ActionBarController.java
index c73ebd0..217c521 100644
--- a/src/com/android/mail/ui/ActionBarController.java
+++ b/src/com/android/mail/ui/ActionBarController.java
@@ -17,31 +17,22 @@
 
 package com.android.mail.ui;
 
-import android.app.SearchManager;
-import android.app.SearchableInfo;
 import android.content.ContentResolver;
 import android.content.Context;
-import android.database.Cursor;
 import android.net.Uri;
 import android.os.AsyncTask;
 import android.os.Bundle;
-import android.support.v4.view.MenuItemCompat;
 import android.support.v7.app.ActionBar;
-import android.support.v7.widget.SearchView;
-import android.support.v7.widget.SearchView.OnQueryTextListener;
-import android.support.v7.widget.SearchView.OnSuggestionListener;
 import android.text.TextUtils;
 import android.view.Menu;
 import android.view.MenuItem;
 
-import com.android.mail.ConversationListContext;
 import com.android.mail.R;
 import com.android.mail.providers.Account;
 import com.android.mail.providers.AccountObserver;
 import com.android.mail.providers.Conversation;
 import com.android.mail.providers.Folder;
 import com.android.mail.providers.FolderObserver;
-import com.android.mail.providers.SearchRecentSuggestionsProvider;
 import com.android.mail.providers.UIProvider;
 import com.android.mail.providers.UIProvider.AccountCapabilities;
 import com.android.mail.providers.UIProvider.FolderCapabilities;
@@ -53,8 +44,7 @@
 /**
  * Controller to manage the various states of the {@link android.app.ActionBar}.
  */
-public class ActionBarController implements ViewMode.ModeChangeListener,
-        OnQueryTextListener, OnSuggestionListener, MenuItemCompat.OnActionExpandListener {
+public class ActionBarController implements ViewMode.ModeChangeListener {
 
     private final Context mContext;
 
@@ -75,8 +65,6 @@
      */
     private Folder mFolder;
 
-    private SearchView mSearchWidget;
-    private MenuItem mSearch;
     private MenuItem mEmptyTrashItem;
     private MenuItem mEmptySpamItem;
 
@@ -117,46 +105,9 @@
         mIsOnTablet = Utils.useTabletUI(context.getResources());
     }
 
-    public void expandSearch() {
-        if (mSearch != null) {
-            MenuItemCompat.expandActionView(mSearch);
-        }
-    }
-
-    /**
-     * Close the search view if it is expanded.
-     */
-    public void collapseSearch() {
-        if (mSearch != null) {
-            MenuItemCompat.collapseActionView(mSearch);
-        }
-    }
-
-    /**
-     * Get the search menu item.
-     */
-    protected MenuItem getSearch() {
-        return mSearch;
-    }
-
     public boolean onCreateOptionsMenu(Menu menu) {
         mEmptyTrashItem = menu.findItem(R.id.empty_trash);
         mEmptySpamItem = menu.findItem(R.id.empty_spam);
-        mSearch = menu.findItem(R.id.search);
-
-        if (mSearch != null) {
-            mSearchWidget = (SearchView) MenuItemCompat.getActionView(mSearch);
-            MenuItemCompat.setOnActionExpandListener(mSearch, this);
-            SearchManager searchManager = (SearchManager) mActivity.getActivityContext()
-                    .getSystemService(Context.SEARCH_SERVICE);
-            if (searchManager != null && mSearchWidget != null) {
-                SearchableInfo info = searchManager.getSearchableInfo(mActivity.getComponentName());
-                mSearchWidget.setSearchableInfo(info);
-                mSearchWidget.setOnQueryTextListener(this);
-                mSearchWidget.setOnSuggestionListener(this);
-                mSearchWidget.setIconifiedByDefault(true);
-            }
-        }
 
         // the menu should be displayed if the mode is known
         return getMode() != ViewMode.UNKNOWN;
@@ -230,6 +181,9 @@
 
     @Override
     public void onViewModeChanged(int newMode) {
+        final boolean mIsTabletLandscape =
+                mContext.getResources().getBoolean(R.bool.is_tablet_landscape);
+
         mActivity.supportInvalidateOptionsMenu();
         // Check if we are either on a phone, or in Conversation mode on tablet. For these, the
         // recent folders is enabled.
@@ -244,8 +198,14 @@
                 setEmptyMode();
                 break;
             case ViewMode.CONVERSATION:
+                // If on tablet landscape, show current folder instead of emptying the action bar
+                if (mIsTabletLandscape) {
+                    mActionBar.setDisplayHomeAsUpEnabled(true);
+                    showNavList();
+                    break;
+                }
+                // Otherwise, fall through to default behavior, shared with Ads ViewMode.
             case ViewMode.AD:
-                closeSearchField();
                 mActionBar.setDisplayHomeAsUpEnabled(true);
                 setEmptyMode();
                 break;
@@ -257,17 +217,6 @@
         }
     }
 
-    /**
-     * Close the search query entry field to avoid keyboard events, and to restore the actionbar
-     * to non-search mode.
-     */
-    private void closeSearchField() {
-        if (mSearch == null) {
-            return;
-        }
-        mSearch.collapseActionView();
-    }
-
     protected int getMode() {
         if (mViewModeController != null) {
             return mViewModeController.getMode();
@@ -281,23 +230,20 @@
      * conditions are properly set to the correct visibility
      */
     public void validateVolatileMenuOptionVisibility() {
-        if (mEmptyTrashItem != null) {
-            mEmptyTrashItem.setVisible(mAccount != null && mFolder != null
-                    && mAccount.supportsCapability(AccountCapabilities.EMPTY_TRASH)
-                    && mFolder.isTrash() && mFolder.totalCount > 0
-                    && (mController.getConversationListCursor() == null
-                    || mController.getConversationListCursor().getCount() > 0));
-        }
-        if (mEmptySpamItem != null) {
-            mEmptySpamItem.setVisible(mAccount != null && mFolder != null
-                    && mAccount.supportsCapability(AccountCapabilities.EMPTY_SPAM)
-                    && mFolder.isType(FolderType.SPAM) && mFolder.totalCount > 0
-                    && (mController.getConversationListCursor() == null
-                    || mController.getConversationListCursor().getCount() > 0));
-        }
+        Utils.setMenuItemPresent(mEmptyTrashItem, mAccount != null && mFolder != null
+                && mAccount.supportsCapability(AccountCapabilities.EMPTY_TRASH)
+                && mFolder.isTrash() && mFolder.totalCount > 0
+                && (mController.getConversationListCursor() == null
+                || mController.getConversationListCursor().getCount() > 0));
+        Utils.setMenuItemPresent(mEmptySpamItem, mAccount != null && mFolder != null
+                && mAccount.supportsCapability(AccountCapabilities.EMPTY_SPAM)
+                && mFolder.isType(FolderType.SPAM) && mFolder.totalCount > 0
+                && (mController.getConversationListCursor() == null
+                || mController.getConversationListCursor().getCount() > 0));
     }
 
-    public boolean onPrepareOptionsMenu(Menu menu) {
+    public void onPrepareOptionsMenu(Menu menu) {
+        menu.setQwertyMode(true);
         // We start out with every option enabled. Based on the current view, we disable actions
         // that are possible.
         LogUtils.d(LOG_TAG, "ActionBarView.onPrepareOptionsMenu().");
@@ -310,7 +256,7 @@
                 final MenuItem item = menu.getItem(i);
                 item.setVisible(false);
             }
-            return false;
+            return;
         }
         validateVolatileMenuOptionVisibility();
 
@@ -324,17 +270,13 @@
                 setConversationModeOptions(menu);
                 break;
             case ViewMode.CONVERSATION_LIST:
-                // Show search if the account supports it
-                Utils.setMenuItemVisibility(menu, R.id.search, mAccount.supportsSearch());
-                break;
             case ViewMode.SEARCH_RESULTS_LIST:
-                // Hide compose and search
-                Utils.setMenuItemVisibility(menu, R.id.compose, false);
-                Utils.setMenuItemVisibility(menu, R.id.search, false);
-                break;
+                // The search menu item should only be visible for non-tablet devices
+                Utils.setMenuItemPresent(menu, R.id.search,
+                        mAccount.supportsSearch() && !mIsOnTablet);
         }
 
-        return false;
+        return;
     }
 
     /**
@@ -382,71 +324,6 @@
         mActionBar.setHomeButtonEnabled(true);
     }
 
-    @Override
-    public boolean onQueryTextSubmit(String query) {
-        if (mSearch != null) {
-            MenuItemCompat.collapseActionView(mSearch);
-            mSearchWidget.setQuery("", false);
-        }
-        mController.executeSearch(query.trim());
-        return true;
-    }
-
-    @Override
-    public boolean onQueryTextChange(String newText) {
-        return false;
-    }
-
-    // Next two methods are called when search suggestions are clicked.
-    @Override
-    public boolean onSuggestionSelect(int position) {
-        return onSuggestionClick(position);
-    }
-
-    @Override
-    public boolean onSuggestionClick(int position) {
-        final Cursor c = mSearchWidget.getSuggestionsAdapter().getCursor();
-        final boolean haveValidQuery = (c != null) && c.moveToPosition(position);
-        if (!haveValidQuery) {
-            LogUtils.d(LOG_TAG, "onSuggestionClick: Couldn't get a search query");
-            // We haven't handled this query, but the default behavior will
-            // leave EXTRA_ACCOUNT un-populated, leading to a crash. So claim
-            // that we have handled the event.
-            return true;
-        }
-        collapseSearch();
-        // what is in the text field
-        String queryText = mSearchWidget.getQuery().toString();
-        // What the suggested query is
-        String query = c.getString(c.getColumnIndex(SearchManager.SUGGEST_COLUMN_TEXT_1));
-        // If the text the user typed in is a prefix of what is in the search
-        // widget suggestion query, just take the search widget suggestion
-        // query. Otherwise, it is a suffix and we want to remove matching
-        // prefix portions.
-        if (!TextUtils.isEmpty(queryText) && query.indexOf(queryText) != 0) {
-            final int queryTokenIndex = queryText
-                    .lastIndexOf(SearchRecentSuggestionsProvider.QUERY_TOKEN_SEPARATOR);
-            if (queryTokenIndex > -1) {
-                queryText = queryText.substring(0, queryTokenIndex);
-            }
-            // Since we auto-complete on each token in a query, if the query the
-            // user typed up until the last token is a substring of the
-            // suggestion they click, make sure we don't double include the
-            // query text. For example:
-            // user types john, that matches john palo alto
-            // User types john p, that matches john john palo alto
-            // Remove the first john
-            // Only do this if we have multiple query tokens.
-            if (queryTokenIndex > -1 && !TextUtils.isEmpty(query) && query.contains(queryText)
-                    && queryText.length() < query.length()) {
-                int start = query.indexOf(queryText);
-                query = query.substring(0, start) + query.substring(start + queryText.length());
-            }
-        }
-        mController.executeSearch(query.trim());
-        return true;
-    }
-
     /**
      * Uses the current state to update the current folder {@link #mFolder} and the current
      * account {@link #mAccount} shown in the actionbar. Also updates the actionbar subtitle to
@@ -487,36 +364,12 @@
             return;
         }
         /** True if we are changing folders. */
-        final boolean changingFolders = (mFolder == null || !mFolder.equals(folder));
         mFolder = folder;
         setFolderAndAccount();
-        final ConversationListContext listContext = mController == null ? null :
-                mController.getCurrentListContext();
-        if (changingFolders && !ConversationListContext.isSearchResult(listContext)) {
-            closeSearchField();
-        }
         // make sure that we re-validate the optional menu items
         validateVolatileMenuOptionVisibility();
     }
 
-    @Override
-    public boolean onMenuItemActionExpand(MenuItem item) {
-        // Do nothing. Required as part of the interface, we ar only interested in
-        // onMenuItemActionCollapse(MenuItem).
-        // Have to return true here. Unlike other callbacks, the return value here is whether
-        // we want to suppress the action (rather than consume the action). We don't want to
-        // suppress the action.
-        return true;
-    }
-
-    @Override
-    public boolean onMenuItemActionCollapse(MenuItem item) {
-        // Have to return true here. Unlike other callbacks, the return value
-        // here is whether we want to suppress the action (rather than consume the action). We
-        // don't want to suppress the action.
-        return true;
-    }
-
     /**
      * Sets the actionbar mode: Pass it an integer which contains each of these values, perhaps
      * OR'd together: {@link ActionBar#DISPLAY_SHOW_CUSTOM} and
@@ -538,36 +391,35 @@
             return;
         }
         final boolean showMarkImportant = !mCurrentConversation.isImportant();
-        Utils.setMenuItemVisibility(menu, R.id.mark_important, showMarkImportant
+        Utils.setMenuItemPresent(menu, R.id.mark_important, showMarkImportant
                 && mAccount.supportsCapability(UIProvider.AccountCapabilities.MARK_IMPORTANT));
-        Utils.setMenuItemVisibility(menu, R.id.mark_not_important, !showMarkImportant
+        Utils.setMenuItemPresent(menu, R.id.mark_not_important, !showMarkImportant
                 && mAccount.supportsCapability(UIProvider.AccountCapabilities.MARK_IMPORTANT));
         final boolean isOutbox = mFolder.isType(FolderType.OUTBOX);
-        final boolean showDiscardOutbox = mFolder != null && isOutbox &&
-                mCurrentConversation.sendingState == UIProvider.ConversationSendingState.SEND_ERROR;
-        Utils.setMenuItemVisibility(menu, R.id.discard_outbox, showDiscardOutbox);
+        final boolean showDiscardOutbox = mFolder != null && isOutbox;
+        Utils.setMenuItemPresent(menu, R.id.discard_outbox, showDiscardOutbox);
         final boolean showDelete = !isOutbox && mFolder != null &&
                 mFolder.supportsCapability(UIProvider.FolderCapabilities.DELETE);
-        Utils.setMenuItemVisibility(menu, R.id.delete, showDelete);
+        Utils.setMenuItemPresent(menu, R.id.delete, showDelete);
         // We only want to show the discard drafts menu item if we are not showing the delete menu
         // item, and the current folder is a draft folder and the account supports discarding
         // drafts for a conversation
         final boolean showDiscardDrafts = !showDelete && mFolder != null && mFolder.isDraft() &&
                 mAccount.supportsCapability(AccountCapabilities.DISCARD_CONVERSATION_DRAFTS);
-        Utils.setMenuItemVisibility(menu, R.id.discard_drafts, showDiscardDrafts);
+        Utils.setMenuItemPresent(menu, R.id.discard_drafts, showDiscardDrafts);
         final boolean archiveVisible = mAccount.supportsCapability(AccountCapabilities.ARCHIVE)
                 && mFolder != null && mFolder.supportsCapability(FolderCapabilities.ARCHIVE)
                 && !mFolder.isTrash();
-        Utils.setMenuItemVisibility(menu, R.id.archive, archiveVisible);
-        Utils.setMenuItemVisibility(menu, R.id.remove_folder, !archiveVisible && mFolder != null
+        Utils.setMenuItemPresent(menu, R.id.archive, archiveVisible);
+        Utils.setMenuItemPresent(menu, R.id.remove_folder, !archiveVisible && mFolder != null
                 && mFolder.supportsCapability(FolderCapabilities.CAN_ACCEPT_MOVED_MESSAGES)
                 && !mFolder.isProviderFolder()
                 && mAccount.supportsCapability(AccountCapabilities.ARCHIVE));
-        Utils.setMenuItemVisibility(menu, R.id.move_to, mFolder != null
+        Utils.setMenuItemPresent(menu, R.id.move_to, mFolder != null
                 && mFolder.supportsCapability(FolderCapabilities.ALLOWS_REMOVE_CONVERSATION));
-        Utils.setMenuItemVisibility(menu, R.id.move_to_inbox, mFolder != null
+        Utils.setMenuItemPresent(menu, R.id.move_to_inbox, mFolder != null
                 && mFolder.supportsCapability(FolderCapabilities.ALLOWS_MOVE_TO_INBOX));
-        Utils.setMenuItemVisibility(menu, R.id.change_folders, mAccount.supportsCapability(
+        Utils.setMenuItemPresent(menu, R.id.change_folders, mAccount.supportsCapability(
                 UIProvider.AccountCapabilities.MULTIPLE_FOLDERS_PER_CONV));
 
         final MenuItem removeFolder = menu.findItem(R.id.remove_folder);
@@ -575,20 +427,20 @@
             removeFolder.setTitle(mActivity.getApplicationContext().getString(
                     R.string.remove_folder, mFolder.name));
         }
-        Utils.setMenuItemVisibility(menu, R.id.report_spam,
+        Utils.setMenuItemPresent(menu, R.id.report_spam,
                 mAccount.supportsCapability(AccountCapabilities.REPORT_SPAM) && mFolder != null
                         && mFolder.supportsCapability(FolderCapabilities.REPORT_SPAM)
                         && !mCurrentConversation.spam);
-        Utils.setMenuItemVisibility(menu, R.id.mark_not_spam,
+        Utils.setMenuItemPresent(menu, R.id.mark_not_spam,
                 mAccount.supportsCapability(AccountCapabilities.REPORT_SPAM) && mFolder != null
                         && mFolder.supportsCapability(FolderCapabilities.MARK_NOT_SPAM)
                         && mCurrentConversation.spam);
-        Utils.setMenuItemVisibility(menu, R.id.report_phishing,
+        Utils.setMenuItemPresent(menu, R.id.report_phishing,
                 mAccount.supportsCapability(AccountCapabilities.REPORT_PHISHING) && mFolder != null
                         && mFolder.supportsCapability(FolderCapabilities.REPORT_PHISHING)
                         && !mCurrentConversation.phishing);
-        Utils.setMenuItemVisibility(menu, R.id.mute,
-                        mAccount.supportsCapability(AccountCapabilities.MUTE) && mFolder != null
+        Utils.setMenuItemPresent(menu, R.id.mute,
+                mAccount.supportsCapability(AccountCapabilities.MUTE) && mFolder != null
                         && mFolder.supportsCapability(FolderCapabilities.DESTRUCTIVE_MUTE)
                         && !mCurrentConversation.muted);
     }
diff --git a/src/com/android/mail/ui/ActionableToastBar.java b/src/com/android/mail/ui/ActionableToastBar.java
index 0b9056c..8ad9828 100644
--- a/src/com/android/mail/ui/ActionableToastBar.java
+++ b/src/com/android/mail/ui/ActionableToastBar.java
@@ -26,21 +26,22 @@
 import android.util.AttributeSet;
 import android.view.MotionEvent;
 import android.view.View;
+import android.view.ViewGroup;
 import android.view.animation.LinearInterpolator;
 import android.view.animation.PathInterpolator;
 import android.widget.FrameLayout;
-import android.widget.LinearLayout;
 import android.widget.TextView;
 
 import com.android.mail.R;
 import com.android.mail.utils.Utils;
+import com.android.mail.utils.ViewUtils;
 
 /**
  * A custom {@link View} that exposes an action to the user.
  */
 public class ActionableToastBar extends FrameLayout {
 
-    private boolean mHidden = false;
+    private boolean mHidden = true;
     private final Runnable mHideToastBarRunnable;
     private final Handler mHideToastBarHandler;
 
@@ -88,6 +89,12 @@
      * always <tt>null</tt> in two-pane layouts. */
     private TextView mMultiLineActionView;
 
+    /** The minimum width of this view; applicable when description text is very short. */
+    private int mMinWidth;
+
+    /** The maximum width of this view; applicable when description text is long enough to wrap. */
+    private int mMaxWidth;
+
     private ToastBarOperation mOperation;
 
     public ActionableToastBar(Context context) {
@@ -104,6 +111,8 @@
         mAnimationDuration = getResources().getInteger(R.integer.toast_bar_animation_duration_ms);
         mMinToastDuration = getResources().getInteger(R.integer.toast_bar_min_duration_ms);
         mMaxToastDuration = getResources().getInteger(R.integer.toast_bar_max_duration_ms);
+        mMinWidth = getResources().getDimensionPixelOffset(R.dimen.snack_bar_min_width);
+        mMaxWidth = getResources().getDimensionPixelOffset(R.dimen.snack_bar_max_width);
         mHideToastBarHandler = new Handler();
         mHideToastBarRunnable = new Runnable() {
             @Override
@@ -150,13 +159,27 @@
         // measure the view and its content
         super.onMeasure(widthMeasureSpec, heightMeasureSpec);
 
-        // if the description does not fit, switch to multi line display if one is present
-        final boolean descriptionIsMultiLine = mSingleLineDescriptionView.getLineCount() > 1;
-        final boolean haveMultiLineView = mMultiLineDescriptionView != null;
-        if (descriptionIsMultiLine && haveMultiLineView) {
-            setVisibility(true /* multiLine */, showAction);
+        // if specific views exist to handle the multiline case
+        if (mMultiLineDescriptionView != null) {
+            // if the description does not fit on a single line
+            if (mSingleLineDescriptionView.getLineCount() > 1) {
+                //switch to multi line display views
+                setVisibility(true /* multiLine */, showAction);
 
-            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+                super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+            }
+        // if width constraints were given explicitly, honor them; otherwise use the natural width
+        } else if (mMinWidth >= 0 && mMaxWidth >= 0) {
+            // otherwise, adjust the the single line view so wrapping occurs at the desired width
+            // (the total width of the toast bar must always fall between the given min and max
+            // width; if max width cannot accommodate all of the description text, it wraps)
+            if (getMeasuredWidth() < mMinWidth) {
+                widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(mMinWidth, MeasureSpec.EXACTLY);
+                super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+            } else if (getMeasuredWidth() > mMaxWidth) {
+                widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(mMaxWidth, MeasureSpec.EXACTLY);
+                super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+            }
         }
     }
 
@@ -173,11 +196,14 @@
      * @param actionTextResourceId resource ID for the text to show in the action button
      * @param replaceVisibleToast if true, this toast should replace any currently visible toast.
      *                            Otherwise, skip showing this toast.
+     * @param autohide <tt>true</tt> indicates the toast will be automatically hidden after a time
+     *                 delay; <tt>false</tt> indicate the toast will remain visible until the user
+     *                 dismisses it
      * @param op the operation that corresponds to the specific toast being shown
      */
     public void show(final ActionClickedListener listener, final CharSequence descriptionText,
                      @StringRes final int actionTextResourceId, final boolean replaceVisibleToast,
-                     final ToastBarOperation op) {
+                     final boolean autohide, final ToastBarOperation op) {
         if (!mHidden && !replaceVisibleToast) {
             return;
         }
@@ -190,7 +216,7 @@
         setActionClickListener(new OnClickListener() {
             @Override
             public void onClick(View widget) {
-                if (op.shouldTakeOnActionClickedPrecedence()) {
+                if (op != null && op.shouldTakeOnActionClickedPrecedence()) {
                     op.onActionClicked(getContext());
                 } else {
                     listener.onActionClicked(getContext());
@@ -200,14 +226,20 @@
         });
 
         setDescriptionText(descriptionText);
+        ViewUtils.announceForAccessibility(this, descriptionText);
         setActionText(actionTextResourceId);
 
-        mHidden = false;
+        // if this toast bar is not yet hidden, animate it in place; otherwise we just update the
+        // text that it displays
+        if (mHidden) {
+            mHidden = false;
+            popupToast();
+        }
 
-        popupToast();
-
-        // Set up runnable to execute hide toast once delay is completed
-        mHideToastBarHandler.postDelayed(mHideToastBarRunnable, mMaxToastDuration);
+        if (autohide) {
+            // Set up runnable to execute hide toast once delay is completed
+            mHideToastBarHandler.postDelayed(mHideToastBarRunnable, mMaxToastDuration);
+        }
     }
 
     public ToastBarOperation getOperation() {
@@ -416,7 +448,7 @@
      */
     private int getAnimationDistance() {
         // total height over which the animation takes place is the toast bar height + bottom margin
-        final LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) getLayoutParams();
+        final ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) getLayoutParams();
         return getHeight() + params.bottomMargin;
     }
 
diff --git a/src/com/android/mail/ui/ActivityController.java b/src/com/android/mail/ui/ActivityController.java
index fec109b..f64b275 100644
--- a/src/com/android/mail/ui/ActivityController.java
+++ b/src/com/android/mail/ui/ActivityController.java
@@ -22,17 +22,14 @@
 import android.content.res.Configuration;
 import android.os.Bundle;
 import android.support.annotation.LayoutRes;
-import android.view.DragEvent;
 import android.view.KeyEvent;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.MotionEvent;
 import android.view.View;
 
-import com.android.mail.ConversationListContext;
 import com.android.mail.browse.ConversationCursor.ConversationListener;
 import com.android.mail.browse.ConversationListFooterView;
-import com.android.mail.providers.Account;
 import com.android.mail.providers.Folder;
 import com.android.mail.ui.ViewMode.ModeChangeListener;
 
@@ -60,7 +57,7 @@
  */
 public interface ActivityController extends LayoutListener,
         ModeChangeListener, ConversationListCallbacks,
-        FolderChangeListener, ConversationSetObserver, ConversationListener, FolderSelector,
+        ConversationSetObserver, ConversationListener, FolderSelector,
         UndoListener, ConversationUpdater, ErrorListener, FolderController, AccountController,
         ConversationPositionTracker.Callbacks, ConversationListFooterView.FooterViewClickListener,
         RecentFolderController, FragmentLauncher, KeyboardNavigationController {
@@ -68,15 +65,6 @@
     // As far as possible, the methods here that correspond to Activity lifecycle have the same name
     // as their counterpart in the Activity lifecycle.
 
-    /**
-     * Returns the current account.
-     */
-    Account getCurrentAccount();
-
-    /**
-     * Returns the current conversation list context.
-     */
-    ConversationListContext getCurrentListContext();
 
     /**
      * @see android.app.Activity#onActivityResult
@@ -97,12 +85,6 @@
     boolean onBackPressed();
 
     /**
-     * Called by the Mail activity when the up button is pressed.
-     * @return
-     */
-    boolean onUpPressed();
-
-    /**
      * Called when the root activity calls onCreate. Any initialization needs to
      * be done here. Subclasses need to call their parents' onCreate method, since it performs
      * valuable initialization common to all subclasses.
@@ -111,9 +93,8 @@
      *
      * @see android.app.Activity#onCreate
      * @param savedState
-     * @return true if the controller was able to initialize successfully, false otherwise.
      */
-    boolean onCreate(Bundle savedState);
+    void onCreate(Bundle savedState);
 
     /**
      * @see android.app.Activity#onPostCreate
@@ -192,7 +173,7 @@
      * @param menu
      * @return
      */
-    boolean onPrepareOptionsMenu(Menu menu);
+    void onPrepareOptionsMenu(Menu menu);
 
     /**
      * Called by the Mail activity on Activity resume.
@@ -230,19 +211,6 @@
     void onWindowFocusChanged(boolean hasFocus);
 
     /**
-     * Show the conversation List with the list context provided here. On certain layouts, this
-     * might show more than just the conversation list. For instance, on tablets this might show
-     * the conversations along with the conversation list.
-     * @param listContext context providing information on what conversation list to display.
-     */
-    void showConversationList(ConversationListContext listContext);
-
-    /**
-     * Show the wait for account initialization mode.
-     */
-    public void showWaitForInitialization();
-
-    /**
      * Handle a touch event.
      */
     void onTouchEvent(MotionEvent event);
@@ -258,7 +226,7 @@
      * an empty set if no conversation is currently selected.
      * @return
      */
-    public ConversationSelectionSet getSelectedSet();
+    public ConversationCheckedSet getCheckedSet();
 
     /**
      * Start search mode if the account being view supports the search capability.
@@ -266,51 +234,16 @@
     void startSearch();
 
     /**
-     * Exit the search mode, popping off one activity so that the back stack is fine.
-     */
-    void exitSearchMode();
-
-    /**
-     * Supports dragging conversations to a folder.
-     */
-    boolean supportsDrag(DragEvent event, Folder folder);
-
-    /**
-     * Handles dropping conversations to a folder.
-     */
-    void handleDrop(DragEvent event, Folder folder);
-
-    /**
-     * Load the default inbox associated with the current account.
-     */
-    public void loadAccountInbox();
-
-    /**
      * Return the folder currently being viewed by the activity.
      */
     public Folder getHierarchyFolder();
 
     /**
-     * Set the folder currently selected in the folder selection hierarchy fragments.
-     */
-    void setHierarchyFolder(Folder folder);
-
-    /**
      * Handles the animation end of the animated adapter.
      */
     void onAnimationEnd(AnimatedAdapter animatedAdapter);
 
     /**
-     * Called when the user has started a drag/ drop gesture.
-     */
-    void startDragMode();
-
-    /**
-     * Called when the user has ended drag/drop.
-     */
-    void stopDragMode();
-
-    /**
      * Called when Accessibility is enabled or disabled.
      */
     void onAccessibilityStateChanged();
@@ -337,4 +270,21 @@
     @LayoutRes int getContentViewResource();
 
     View.OnClickListener getNavigationViewClickListener();
+
+    /**
+     * If the search bar should always be visible on top of the screen (e.g. search result list).
+     * @param viewMode the new view mode. This is passed as a parameter because we don't know
+     *   which onViewModeChanged callback gets called first, so the view modes might differ.
+     */
+    boolean shouldShowSearchBarByDefault(int viewMode);
+
+    /**
+     * If we should show the search menu item.
+     */
+    boolean shouldShowSearchMenuItem();
+
+    /**
+     * Attach layout listener so our custom toolbar can listen to thread list layout events.
+     */
+    void addConversationListLayoutListener(TwoPaneLayout.ConversationListLayoutListener listener);
 }
diff --git a/src/com/android/mail/ui/AddableFolderSelectorAdapter.java b/src/com/android/mail/ui/AddableFolderSelectorAdapter.java
index 745e793..fb15995 100644
--- a/src/com/android/mail/ui/AddableFolderSelectorAdapter.java
+++ b/src/com/android/mail/ui/AddableFolderSelectorAdapter.java
@@ -124,8 +124,6 @@
                     folder[UIProvider.FOLDER_TYPE_COLUMN] = type;
                     folder[UIProvider.FOLDER_ICON_RES_ID_COLUMN] = folderCursor
                             .getInt(UIProvider.FOLDER_ICON_RES_ID_COLUMN);
-                    folder[UIProvider.FOLDER_NOTIFICATION_ICON_RES_ID_COLUMN] = folderCursor
-                            .getInt(UIProvider.FOLDER_NOTIFICATION_ICON_RES_ID_COLUMN);
                     folder[UIProvider.FOLDER_BG_COLOR_COLUMN] = folderCursor
                             .getString(UIProvider.FOLDER_BG_COLOR_COLUMN);
                     folder[UIProvider.FOLDER_FG_COLOR_COLUMN] = folderCursor
diff --git a/src/com/android/mail/ui/AnimatedAdapter.java b/src/com/android/mail/ui/AnimatedAdapter.java
index 8436658..2b38d27 100644
--- a/src/com/android/mail/ui/AnimatedAdapter.java
+++ b/src/com/android/mail/ui/AnimatedAdapter.java
@@ -34,6 +34,7 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.SimpleCursorAdapter;
+import android.widget.Space;
 
 import com.android.bitmap.BitmapCache;
 import com.android.mail.R;
@@ -86,7 +87,7 @@
     /** The current account */
     private Account mAccount;
     private final Context mContext;
-    private final ConversationSelectionSet mBatchConversations;
+    private final ConversationCheckedSet mBatchConversations;
     private Runnable mCountDown;
     private final Handler mHandler;
     protected long mLastLeaveBehind = -1;
@@ -162,8 +163,10 @@
         void onAnimationEnd(AnimatedAdapter adapter);
     }
 
+    private Space mDefaultFooter;
     private View mFooter;
-    private boolean mShowFooter;
+    // If true, the last list item will be mFooter, otherwise it's mDefaultFooter.
+    private boolean mShowCustomFooter;
     private List<View> mHeaders = Lists.newArrayList();
     private Folder mFolder;
     private final SwipeableListView mListView;
@@ -246,14 +249,16 @@
     private final ContactResolver mContactResolver;
 
     public AnimatedAdapter(Context context, ConversationCursor cursor,
-            ConversationSelectionSet batch, ControllableActivity activity,
+            ConversationCheckedSet batch, ControllableActivity activity,
             SwipeableListView listView, final List<ConversationSpecialItemView> specialViews) {
         super(context, -1, cursor, UIProvider.CONVERSATION_PROJECTION, null, 0);
         mContext = context;
         mBatchConversations = batch;
         setAccount(mAccountListener.initialize(activity.getAccountController()));
         mActivity = activity;
-        mShowFooter = false;
+        mDefaultFooter = (Space) LayoutInflater.from(context).inflate(
+                R.layout.conversation_list_default_footer, listView, false);
+        mShowCustomFooter = false;
         mListView = listView;
 
         mSendersImagesCache = mActivity.getSenderImageCache();
@@ -307,8 +312,19 @@
         // mSpecialViews only contains the views that are currently being displayed
         final int specialViewCount = mSpecialViews.size();
 
-        return super.getCount() + specialViewCount +
-                (mShowFooter ? 1 : 0) + mHeaders.size();
+        // Headers are not included in the content count because their availability is not affected
+        // by the underlying cursor.
+        //
+        // !! This count still includes the teasers since they are separate from headers. !!
+        int contentCount = super.getCount() + specialViewCount;
+        // If we have no content, the only possible thing to show is custom footer (e.g. loading)
+        if (contentCount == 0) {
+            contentCount += mShowCustomFooter ? 1 : 0;
+        } else {
+            // Only add header & footer is always visible when there are content
+            contentCount += 1 /* footer */ + mHeaders.size();
+        }
+        return contentCount;
     }
 
     /**
@@ -366,7 +382,7 @@
     public View createConversationItemView(SwipeableConversationItemView view, Context context,
             Conversation conv) {
         if (view == null) {
-            view = new SwipeableConversationItemView(context, mAccount.getEmailAddress());
+            view = new SwipeableConversationItemView(context, mAccount);
         }
         view.bind(conv, mActivity, mBatchConversations, mFolder, getCheckboxSetting(),
                 mSwipeEnabled, mImportanceMarkersEnabled, mShowChevronsEnabled, this);
@@ -390,7 +406,7 @@
         // Try to recycle views.
         if (mHeaders.size() > position) {
             return TYPE_VIEW_HEADER;
-        } else if (mShowFooter && position == getCount() - 1) {
+        } else if (position == getCount() - 1) {
             return TYPE_VIEW_FOOTER;
         } else if (hasLeaveBehinds() || isAnimating()) {
             // Setting as type -1 means the recycler won't take this view and
@@ -472,8 +488,8 @@
     public View getView(int position, View convertView, ViewGroup parent) {
         if (mHeaders.size() > position) {
             return mHeaders.get(position);
-        } else if (mShowFooter && position == getCount() - 1) {
-            return mFooter;
+        } else if (position == getCount() - 1) {
+            return mShowCustomFooter ? mFooter : mDefaultFooter;
         }
 
         // Check if this is a special view
@@ -699,7 +715,7 @@
 
     @Override
     public long getItemId(int position) {
-        if ((mHeaders.size() > position) || (mShowFooter && position == getCount() - 1)) {
+        if ((mHeaders.size() > position) || (position == getCount() - 1)) {
             return -1;
         }
 
@@ -759,7 +775,7 @@
 
     @Override
     public View newView(Context context, Cursor cursor, ViewGroup parent) {
-        return new SwipeableConversationItemView(context, mAccount.getEmailAddress());
+        return new SwipeableConversationItemView(context, mAccount);
     }
 
     @Override
@@ -790,8 +806,8 @@
                 getSpecialViewsPos(position));
         if (mHeaders.size() > position) {
             return mHeaders.get(position);
-        } else if (mShowFooter && position == getCount() - 1) {
-            return mFooter;
+        } else if (position == getCount() - 1) {
+            return mShowCustomFooter ? mFooter : mDefaultFooter;
         } else if (specialView != null) {
             return specialView;
         }
@@ -871,8 +887,8 @@
     }
 
     public void setFooterVisibility(boolean show) {
-        if (mShowFooter != show) {
-            mShowFooter = show;
+        if (mShowCustomFooter != show) {
+            mShowCustomFooter = show;
             notifyDataSetChanged();
         }
     }
diff --git a/src/com/android/mail/ui/AttachmentTile.java b/src/com/android/mail/ui/AttachmentTile.java
index 3fc8dc5..da1a4b9 100644
--- a/src/com/android/mail/ui/AttachmentTile.java
+++ b/src/com/android/mail/ui/AttachmentTile.java
@@ -94,7 +94,7 @@
     protected void onLayout(boolean changed, int l, int t, int r, int b) {
         super.onLayout(changed, l, t, r, b);
 
-        ThumbnailLoadTask.setupThumbnailPreview(this, mAttachment, null);
+        ThumbnailLoadTask.setupThumbnailPreview(mAttachmentPreviewCache, this, mAttachment, null);
     }
 
     public Attachment getAttachment() {
@@ -136,7 +136,8 @@
             updateSubtitleText();
         }
 
-        ThumbnailLoadTask.setupThumbnailPreview(this, attachment, prevAttachment);
+        ThumbnailLoadTask.setupThumbnailPreview(mAttachmentPreviewCache, this, attachment,
+                prevAttachment);
     }
 
     private void updateSubtitleText() {
@@ -153,7 +154,7 @@
 
     @Override
     public void setThumbnailToDefault() {
-        Bitmap cachedPreview = mAttachmentPreviewCache.get(mAttachment);
+        final Bitmap cachedPreview = mAttachmentPreviewCache.get(mAttachment);
         if (cachedPreview != null) {
             setThumbnail(cachedPreview);
             return;
diff --git a/src/com/android/mail/ui/AttachmentTileGrid.java b/src/com/android/mail/ui/AttachmentTileGrid.java
index 5b1e76f..76df2a5 100644
--- a/src/com/android/mail/ui/AttachmentTileGrid.java
+++ b/src/com/android/mail/ui/AttachmentTileGrid.java
@@ -114,7 +114,7 @@
         final int photoIndex = indexOfChild(source);
 
         MailPhotoViewActivity.startMailPhotoViewActivity(getContext(), mAccount.getEmailAddress(),
-                mMessage, photoIndex);
+                mAccount.getType(), mMessage, photoIndex);
     }
 
     @Override
diff --git a/src/com/android/mail/ui/AutoResizeListView.java b/src/com/android/mail/ui/AutoResizeListView.java
new file mode 100644
index 0000000..eba28c8
--- /dev/null
+++ b/src/com/android/mail/ui/AutoResizeListView.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2014 Google Inc.
+ * Licensed to 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.mail.ui;
+
+import android.content.Context;
+import android.graphics.Rect;
+import android.util.AttributeSet;
+import android.widget.ListView;
+
+/**
+ * A list view that auto resizes depending on the height of the viewing frame. This means this
+ * list view will auto resize whenever the soft keyboard appears/disappears.
+ */
+public class AutoResizeListView extends ListView {
+    private final Rect mRect = new Rect();
+    private final int[] mCoords = new int[2];
+
+    public AutoResizeListView(Context context) {
+        this(context, null);
+    }
+
+    public AutoResizeListView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        getWindowVisibleDisplayFrame(mRect);
+        getLocationInWindow(mCoords);
+
+        // The desired height is the available height we have for VIEWING.
+        final int desiredHeight = mRect.bottom - mCoords[1];
+        final int heightMode = MeasureSpec.getMode(heightMeasureSpec);
+        final int heightSize = MeasureSpec.getSize(heightMeasureSpec);
+
+        // Measure height and obey the measure mode.
+        final int height;
+        if (heightMode == MeasureSpec.EXACTLY) {
+            height = heightSize;
+        } else {
+            // For AT_MOST and UNSPECIFIED we always want to get the minimum.
+            height = Math.min(desiredHeight, heightSize);
+        }
+
+        // Compile back to measure spec and pass it along
+        heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, heightMode);
+
+        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+    }
+}
diff --git a/src/com/android/mail/ui/BidiViewPagerHelper.java b/src/com/android/mail/ui/BidiViewPagerHelper.java
index f4bb985..ad97e49 100644
--- a/src/com/android/mail/ui/BidiViewPagerHelper.java
+++ b/src/com/android/mail/ui/BidiViewPagerHelper.java
@@ -33,19 +33,19 @@
     }
 
     public int getFirstPage() {
-        return getBidiIndex(0);
+        return getIndexFromBidiIndex(0);
     }
 
     public int getLastPage() {
-        return getBidiIndex(mViewPager.getAdapter().getCount() - 1);
+        return getIndexFromBidiIndex(mViewPager.getAdapter().getCount() - 1);
     }
 
     public int getPreviousPage() {
-        return clampToBounds(getBidiIndex(mViewPager.getCurrentItem() - 1));
+        return clampToBounds(getIndexFromBidiIndex(getBidiIndex(mViewPager.getCurrentItem()) - 1));
     }
 
     public int getNextPage() {
-        return clampToBounds(getBidiIndex(mViewPager.getCurrentItem() + 1));
+        return clampToBounds(getIndexFromBidiIndex(getBidiIndex(mViewPager.getCurrentItem()) + 1));
     }
 
     private int clampToBounds(int position) {
@@ -59,4 +59,10 @@
             return position;
         }
     }
-}
\ No newline at end of file
+
+    /** Inverse of {@link #getBidiIndex} function. */
+    private int getIndexFromBidiIndex(int position) {
+        // getBidiIndex is equal to its inverse function so we are just calling getBidiIndex.
+        return getBidiIndex(position);
+    }
+}
diff --git a/src/com/android/mail/ui/ControllableActivity.java b/src/com/android/mail/ui/ControllableActivity.java
index b9995b9..a978c66 100644
--- a/src/com/android/mail/ui/ControllableActivity.java
+++ b/src/com/android/mail/ui/ControllableActivity.java
@@ -30,8 +30,7 @@
  * able to attach the various view fragments and delegate the method calls between them.
  */
 public interface ControllableActivity extends RestrictedActivity,
-        FolderItemView.DropHandler, UndoListener,
-        AnimatedAdapter.Listener, ConversationListFooterView.FooterViewClickListener {
+        UndoListener, AnimatedAdapter.Listener, ConversationListFooterView.FooterViewClickListener {
     /**
      * Returns the ViewMode the activity is updating.
      * @see com.android.mail.ui.ViewMode
@@ -47,17 +46,11 @@
     ConversationListCallbacks getListHandler();
 
     /**
-     * Return the folder change listener for this activity
-     * @return
-     */
-    FolderChangeListener getFolderChangeListener();
-
-    /**
      * Get the set of currently selected conversations. This method returns a non-null value.
      * In case no conversation is currently selected, it returns an empty selection set.
      * @return
      */
-    ConversationSelectionSet getSelectedSet();
+    ConversationCheckedSet getCheckedSet();
 
     /**
      * Returns the listener for folder list selection changes in the folder list
@@ -103,10 +96,6 @@
 
     KeyboardNavigationController getKeyboardNavigationController();
 
-    void startDragMode();
-
-    void stopDragMode();
-
     boolean isAccessibilityEnabled();
 
     /**
diff --git a/src/com/android/mail/ui/ConversationSelectionSet.java b/src/com/android/mail/ui/ConversationCheckedSet.java
similarity index 93%
rename from src/com/android/mail/ui/ConversationSelectionSet.java
rename to src/com/android/mail/ui/ConversationCheckedSet.java
index 521222b..a2f0656 100644
--- a/src/com/android/mail/ui/ConversationSelectionSet.java
+++ b/src/com/android/mail/ui/ConversationCheckedSet.java
@@ -42,23 +42,23 @@
  * class <b>does not allow modifications</b> to the collection in observers when
  * responding to change events.
  */
-public class ConversationSelectionSet implements Parcelable {
-    public static final ClassLoaderCreator<ConversationSelectionSet> CREATOR =
-            new ClassLoaderCreator<ConversationSelectionSet>() {
+public class ConversationCheckedSet implements Parcelable {
+    public static final ClassLoaderCreator<ConversationCheckedSet> CREATOR =
+            new ClassLoaderCreator<ConversationCheckedSet>() {
 
         @Override
-        public ConversationSelectionSet createFromParcel(Parcel source) {
-            return new ConversationSelectionSet(source, null);
+        public ConversationCheckedSet createFromParcel(Parcel source) {
+            return new ConversationCheckedSet(source, null);
         }
 
         @Override
-        public ConversationSelectionSet createFromParcel(Parcel source, ClassLoader loader) {
-            return new ConversationSelectionSet(source, loader);
+        public ConversationCheckedSet createFromParcel(Parcel source, ClassLoader loader) {
+            return new ConversationCheckedSet(source, loader);
         }
 
         @Override
-        public ConversationSelectionSet[] newArray(int size) {
-            return new ConversationSelectionSet[size];
+        public ConversationCheckedSet[] newArray(int size) {
+            return new ConversationCheckedSet[size];
         }
 
     };
@@ -75,11 +75,11 @@
     /**
      * Create a new object,
      */
-    public ConversationSelectionSet() {
+    public ConversationCheckedSet() {
         // Do nothing.
     }
 
-    private ConversationSelectionSet(Parcel source, ClassLoader loader) {
+    private ConversationCheckedSet(Parcel source, ClassLoader loader) {
         Parcelable[] conversations = source.readParcelableArray(loader);
         for (Parcelable parceled : conversations) {
             Conversation conversation = (Conversation) parceled;
@@ -276,7 +276,7 @@
      * set.
      * @see java.util.HashMap#putAll(java.util.Map)
      */
-    public void putAll(ConversationSelectionSet other) {
+    public void putAll(ConversationCheckedSet other) {
         if (other == null) {
             return;
         }
diff --git a/src/com/android/mail/ui/ConversationListCallbacks.java b/src/com/android/mail/ui/ConversationListCallbacks.java
index c58a367..1b6ca10 100644
--- a/src/com/android/mail/ui/ConversationListCallbacks.java
+++ b/src/com/android/mail/ui/ConversationListCallbacks.java
@@ -24,6 +24,7 @@
 
 import com.android.mail.browse.ConversationCursor;
 import com.android.mail.providers.Conversation;
+import com.android.mail.providers.Folder;
 
 /**
  * A controller interface that is to receive user initiated events and handle them.
@@ -59,6 +60,7 @@
 
     Conversation getCurrentConversation();
     void setCurrentConversation(Conversation c);
+    void onConversationViewSwitched(Conversation c);
 
     /**
      * Returns whether the initial conversation has begun but not finished loading. If this returns
@@ -97,6 +99,12 @@
      */
     void setDetachedMode();
 
+    /**
+     * @return true if the List fragment should start up with list swipes disabled entirely
+     * (with no UI reaction)
+     */
+    boolean shouldPreventListSwipesEntirely();
+
     String CONVERSATION_LIST_SCROLL_POSITION_INDEX = "index";
     String CONVERSATION_LIST_SCROLL_POSITION_OFFSET = "offset";
 
@@ -118,4 +126,17 @@
      *            {@link #CONVERSATION_LIST_SCROLL_POSITION_OFFSET}
      */
     void setConversationListScrollPosition(String folderUri, Parcelable savedPosition);
+
+    /**
+     * Is the user peeking the current conversation or actually viewing it.
+     */
+    boolean isCurrentConversationJustPeeking();
+
+    /**
+     * Set up the empty icon depending on the current empty folder.
+     * @param isEmpty if false, then instead of showing the default empty icon, shows the no
+     *   selected message icon.
+     * @return true if the icon is setup, false otherwise.
+     */
+    boolean setupEmptyIconView(Folder folder, boolean isEmpty);
 }
diff --git a/src/com/android/mail/ui/ConversationListEmptyView.java b/src/com/android/mail/ui/ConversationListEmptyView.java
index 9b4d855..257d620 100644
--- a/src/com/android/mail/ui/ConversationListEmptyView.java
+++ b/src/com/android/mail/ui/ConversationListEmptyView.java
@@ -26,6 +26,7 @@
 
 import com.android.mail.R;
 import com.android.mail.providers.Folder;
+import com.android.mail.utils.EmptyStateUtils;
 
 /**
  * Empty view for {@link ConversationListFragment}.
@@ -55,36 +56,16 @@
      * Initializes the empty view to use the proper icon and text
      * based on the type of folder that will be visible.
      */
-    public void setupEmptyView(final Folder folder, final String searchQuery,
-            final BidiFormatter bidiFormatter) {
-        if (folder == null) {
-            setupIconAndText(R.drawable.empty_folders, R.string.empty_folder);
-            return;
-        }
-
-        if (folder.isInbox()) {
-            setupIconAndText(R.drawable.empty_inbox, R.string.empty_inbox);
-        } else if (folder.isSearch()) {
-            setupIconAndText(R.drawable.empty_search, R.string.empty_search,
-                    bidiFormatter.unicodeWrap(searchQuery));
-        } else if (folder.isSpam()) {
-            setupIconAndText(R.drawable.empty_spam, R.string.empty_spam_folder);
-        } else if (folder.isTrash()) {
-            setupIconAndText(R.drawable.empty_trash, R.string.empty_trash_folder);
+    public void setupEmptyText(final Folder folder, final String searchQuery,
+            final BidiFormatter bidiFormatter, boolean shouldShowIcon) {
+        if (shouldShowIcon) {
+            EmptyStateUtils.bindEmptyFolderIcon(mIcon, folder);
+            mIcon.setVisibility(VISIBLE);
         } else {
-            setupIconAndText(R.drawable.empty_folders, R.string.empty_folder);
+            mIcon.setVisibility(GONE);
         }
-    }
 
-    private void setupIconAndText(int iconId, int stringId) {
-        mIcon.setImageResource(iconId);
-        mText.setText(stringId);
-    }
-
-    private void setupIconAndText(int iconId, int stringId, String extra) {
-        mIcon.setImageResource(iconId);
-
-        final String text = getResources().getString(R.string.empty_search, extra);
-        mText.setText(text);
+        EmptyStateUtils.bindEmptyFolderText(mText, folder, getResources(), searchQuery,
+                bidiFormatter);
     }
 }
diff --git a/src/com/android/mail/ui/ConversationListFragment.java b/src/com/android/mail/ui/ConversationListFragment.java
index 77e2868..439f6b5 100644
--- a/src/com/android/mail/ui/ConversationListFragment.java
+++ b/src/com/android/mail/ui/ConversationListFragment.java
@@ -21,8 +21,10 @@
 import android.app.Activity;
 import android.app.Fragment;
 import android.app.LoaderManager;
+import android.content.Intent;
 import android.content.res.Resources;
 import android.database.DataSetObserver;
+import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Parcelable;
@@ -32,6 +34,7 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.AbsListView;
 import android.widget.AdapterView;
 import android.widget.AdapterView.OnItemLongClickListener;
 import android.widget.ListView;
@@ -61,9 +64,11 @@
 import com.android.mail.ui.SwipeableListView.ListItemsRemovedListener;
 import com.android.mail.ui.SwipeableListView.SwipeListener;
 import com.android.mail.ui.ViewMode.ModeChangeListener;
+import com.android.mail.utils.KeyboardUtils;
 import com.android.mail.utils.LogTag;
 import com.android.mail.utils.LogUtils;
 import com.android.mail.utils.Utils;
+import com.android.mail.utils.ViewUtils;
 import com.google.common.collect.ImmutableList;
 
 import java.util.Collection;
@@ -76,7 +81,8 @@
  */
 public final class ConversationListFragment extends Fragment implements
         OnItemLongClickListener, ModeChangeListener, ListItemSwipedListener, OnRefreshListener,
-        SwipeListener, OnKeyListener, AdapterView.OnItemClickListener {
+        SwipeListener, OnKeyListener, AdapterView.OnItemClickListener, View.OnClickListener,
+        AbsListView.OnScrollListener {
     /** Key used to pass data to {@link ConversationListFragment}. */
     private static final String CONVERSATION_LIST_KEY = "conversation-list";
     /** Key used to keep track of the scroll state of the list. */
@@ -133,12 +139,15 @@
 
     private ConversationListFooterView mFooterView;
     private ConversationListEmptyView mEmptyView;
+    private View mSecurityHoldView;
+    private TextView mSecurityHoldText;
+    private View mSecurityHoldButton;
     private View mLoadingView;
     private ErrorListener mErrorListener;
     private FolderObserver mFolderObserver;
     private DataSetObserver mConversationCursorObserver;
 
-    private ConversationSelectionSet mSelectedSet;
+    private ConversationCheckedSet mCheckedSet;
     private final AccountObserver mAccountObserver = new AccountObserver() {
         @Override
         public void onChanged(Account newAccount) {
@@ -155,33 +164,61 @@
     // True if NO DATA has returned, false if we either partially or fully loaded the data
     private boolean mInitialCursorLoading;
 
-    private @IdRes int mNextFocusLeftId;
+    private @IdRes int mNextFocusStartId;
     // Tracks if a onKey event was initiated from the listview (received ACTION_DOWN before
     // ACTION_UP). If not, the listview only receives ACTION_UP.
     private boolean mKeyInitiatedFromList;
 
+    // Default color id for what background should be while idle
+    private int mDefaultListBackgroundColor;
+
     /** Duration, in milliseconds, of the CAB mode (peek icon) animation. */
     private static long sSelectionModeAnimationDuration = -1;
 
     // Let's ensure that we are only showing one out of the three views at once
     private void showListView() {
+        setupEmptyIcon(false);
         mListView.setVisibility(View.VISIBLE);
         mEmptyView.setVisibility(View.INVISIBLE);
         mLoadingView.setVisibility(View.INVISIBLE);
+        mSecurityHoldView.setVisibility(View.INVISIBLE);
+    }
+
+    private void showSecurityHoldView() {
+        setupEmptyIcon(false);
+        mListView.setVisibility(View.INVISIBLE);
+        mEmptyView.setVisibility(View.INVISIBLE);
+        mLoadingView.setVisibility(View.INVISIBLE);
+        setupSecurityHoldView();
+        mSecurityHoldView.setVisibility(View.VISIBLE);
     }
 
     private void showEmptyView() {
-        mEmptyView.setupEmptyView(
-                mFolder, mViewContext.searchQuery, mListAdapter.getBidiFormatter());
+        // If the callbacks didn't set up the empty icon, then we should show it in the empty view.
+        final boolean shouldShowIcon = !setupEmptyIcon(true);
+        mEmptyView.setupEmptyText(mFolder, mViewContext.searchQuery,
+                mListAdapter.getBidiFormatter(), shouldShowIcon);
         mListView.setVisibility(View.INVISIBLE);
         mEmptyView.setVisibility(View.VISIBLE);
         mLoadingView.setVisibility(View.INVISIBLE);
+        mSecurityHoldView.setVisibility(View.INVISIBLE);
     }
 
     private void showLoadingView() {
+        setupEmptyIcon(false);
         mListView.setVisibility(View.INVISIBLE);
         mEmptyView.setVisibility(View.INVISIBLE);
         mLoadingView.setVisibility(View.VISIBLE);
+        mSecurityHoldView.setVisibility(View.INVISIBLE);
+    }
+
+    private boolean setupEmptyIcon(boolean isEmpty) {
+        return mCallbacks != null && mCallbacks.setupEmptyIconView(mFolder, isEmpty);
+    }
+
+    private void setupSecurityHoldView() {
+        mSecurityHoldText.setText(getString(R.string.security_hold_required_text,
+                mAccount.getDisplayName()));
     }
 
     private final Runnable mLoadingViewRunnable = new FragmentRunnable("LoadingRunnable", this) {
@@ -323,7 +360,7 @@
         }
 
         mListAdapter = new AnimatedAdapter(mActivity.getApplicationContext(), conversationCursor,
-                mActivity.getSelectedSet(), mActivity, mListView, specialItemViews);
+                mActivity.getCheckedSet(), mActivity, mListView, specialItemViews);
         mListAdapter.addFooter(mFooterView);
         // Show search result header only if we are in search mode
         final boolean showSearchHeader = ConversationListContext.isSearchResult(mViewContext);
@@ -335,8 +372,8 @@
         }
 
         mListView.setAdapter(mListAdapter);
-        mSelectedSet = mActivity.getSelectedSet();
-        mListView.setSelectionSet(mSelectedSet);
+        mCheckedSet = mActivity.getCheckedSet();
+        mListView.setCheckedSet(mCheckedSet);
         mListAdapter.setFooterVisibility(false);
         mFolderObserver = new FolderObserver(){
             @Override
@@ -349,11 +386,23 @@
         mUpdater = mActivity.getConversationUpdater();
         mUpdater.registerConversationListObserver(mConversationCursorObserver);
         mTabletDevice = Utils.useTabletUI(mActivity.getApplicationContext().getResources());
+
+        // Shadow mods to TL require background changes and scroll listening to avoid overdraw
+        mDefaultListBackgroundColor =
+                getResources().getColor(R.color.conversation_list_background_color);
+        getView().setBackgroundColor(mDefaultListBackgroundColor);
+        mListView.setOnScrollListener(this);
+
         // The onViewModeChanged callback doesn't get called when the mode
         // object is created, so
         // force setting the mode manually this time around.
         onViewModeChanged(mActivity.getViewMode().getMode());
         mActivity.getViewMode().addListener(this);
+        if (mActivity.getListHandler().shouldPreventListSwipesEntirely()) {
+            mListView.preventSwipesEntirely();
+        } else {
+            mListView.stopPreventingSwipes();
+        }
 
         if (mActivity.isFinishing()) {
             // Activity is finishing, just bail.
@@ -442,6 +491,14 @@
         sb.append(mListAdapter);
         sb.append(" folder=");
         sb.append(mViewContext.folder);
+        if (mListView != null) {
+            sb.append(" selectedPos=");
+            sb.append(mListView.getSelectedConversationPosDebug());
+            sb.append(" listSelectedPos=");
+            sb.append(mListView.getSelectedItemPosition());
+            sb.append(" isListInTouchMode=");
+            sb.append(mListView.isInTouchMode());
+        }
         sb.append("}");
         return sb.toString();
     }
@@ -450,9 +507,11 @@
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
         View rootView = inflater.inflate(R.layout.conversation_list, null);
         mEmptyView = (ConversationListEmptyView) rootView.findViewById(R.id.empty_view);
-        mLoadingView = rootView.findViewById(R.id.background_view);
-        mLoadingView.setVisibility(View.GONE);
-        mLoadingView.findViewById(R.id.loading_progress).setVisibility(View.VISIBLE);
+        mSecurityHoldView = rootView.findViewById(R.id.security_hold_view);
+        mSecurityHoldText = (TextView) rootView.findViewById(R.id.security_hold_text);
+        mSecurityHoldButton = rootView.findViewById(R.id.security_hold_button);
+        mSecurityHoldButton.setOnClickListener(this);
+        mLoadingView = rootView.findViewById(R.id.conversation_list_loading_view);
         mListView = (SwipeableListView) rootView.findViewById(R.id.conversation_list_view);
         mListView.setHeaderDividersEnabled(false);
         mListView.setOnItemLongClickListener(this);
@@ -461,9 +520,12 @@
         mListView.setSwipeListener(this);
         mListView.setOnKeyListener(this);
         mListView.setOnItemClickListener(this);
-        if (mNextFocusLeftId != 0) {
-            mListView.setNextFocusLeftId(mNextFocusLeftId);
+
+        // For tablets, the default left focus is the mini-drawer
+        if (mTabletDevice && mNextFocusStartId == 0) {
+            mNextFocusStartId = R.id.mini_drawer;
         }
+        setNextFocusStartOnList();
 
         // enable animateOnLayout (equivalent of setLayoutTransition) only for >=JB (b/14302062)
         if (Utils.isRunningJellybeanOrLater()) {
@@ -572,7 +634,7 @@
         if (!(view instanceof ConversationItemView)) {
             return false;
         }
-        return ((ConversationItemView) view).toggleSelectedStateOrBeginDrag();
+        return ((ConversationItemView) view).toggleCheckedState("long_press");
     }
 
     /**
@@ -601,13 +663,13 @@
         if (view instanceof ToggleableItem) {
             final boolean showSenderImage =
                     (mAccount.settings.convListIcon == ConversationListIcon.SENDER_IMAGE);
-            final boolean inCabMode = !mSelectedSet.isEmpty();
+            final boolean inCabMode = !mCheckedSet.isEmpty();
             if (!showSenderImage && inCabMode) {
-                ((ToggleableItem) view).toggleSelectedState();
+                ((ToggleableItem) view).toggleCheckedState();
             } else {
                 if (inCabMode) {
                     // this is a peek.
-                    Analytics.getInstance().sendEvent("peek", null, null, mSelectedSet.size());
+                    Analytics.getInstance().sendEvent("peek", null, null, mCheckedSet.size());
                 }
                 AnalyticsTimer.getInstance().trackStart(AnalyticsTimer.OPEN_CONV_VIEW_FROM_LIST);
                 viewConversation(position);
@@ -626,25 +688,41 @@
 
     @Override
     public boolean onKey(View view, int keyCode, KeyEvent keyEvent) {
-        SwipeableListView list = (SwipeableListView) view;
-        // Don't need to handle ENTER because it's auto-handled as a "click".
-        if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
-            if (keyEvent.getAction() == KeyEvent.ACTION_UP) {
-                if (mKeyInitiatedFromList) {
-                    onListItemSelected(list.getSelectedView(), list.getSelectedItemPosition());
+        if (view instanceof  SwipeableListView) {
+            SwipeableListView list = (SwipeableListView) view;
+            // Don't need to handle ENTER because it's auto-handled as a "click".
+            if (KeyboardUtils.isKeycodeDirectionEnd(keyCode, ViewUtils.isViewRtl(list))) {
+                if (keyEvent.getAction() == KeyEvent.ACTION_UP) {
+                    if (mKeyInitiatedFromList) {
+                        int currentPos = list.getSelectedItemPosition();
+                        if (currentPos < 0) {
+                            // Find the activated item if the focused item is non-existent.
+                            // This can happen when the user transitions from touch mode.
+                            currentPos = list.getCheckedItemPosition();
+                        }
+                        if (currentPos >= 0) {
+                            // We don't use onListItemSelected because right arrow should always
+                            // view the conversation even in CAB/no_sender_image mode.
+                            viewConversation(currentPos);
+                            commitDestructiveActions(Utils.useTabletUI(
+                                    mActivity.getActivityContext().getResources()));
+                        }
+                    }
+                    mKeyInitiatedFromList = false;
+                } else if (keyEvent.getAction() == KeyEvent.ACTION_DOWN) {
+                    mKeyInitiatedFromList = true;
                 }
-                mKeyInitiatedFromList = false;
-            } else if (keyEvent.getAction() == KeyEvent.ACTION_DOWN) {
-                mKeyInitiatedFromList = true;
-            }
-            return true;
-        } else if (keyEvent.getAction() == KeyEvent.ACTION_UP) {
-            if (keyCode == KeyEvent.KEYCODE_DPAD_UP || keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
+                return true;
+            } else if ((keyCode == KeyEvent.KEYCODE_DPAD_UP ||
+                    keyCode == KeyEvent.KEYCODE_DPAD_DOWN) &&
+                    keyEvent.getAction() == KeyEvent.ACTION_UP) {
                 final int position = list.getSelectedItemPosition();
-                final Object item = getAnimatedAdapter().getItem(position);
-                if (item != null && item instanceof ConversationCursor) {
-                    final Conversation conv = ((ConversationCursor) item).getConversation();
-                    mCallbacks.onConversationFocused(conv);
+                if (position >= 0) {
+                    final Object item = getAnimatedAdapter().getItem(position);
+                    if (item != null && item instanceof ConversationCursor) {
+                        final Conversation conv = ((ConversationCursor) item).getConversation();
+                        mCallbacks.onConversationFocused(conv);
+                    }
                 }
             }
         }
@@ -669,14 +747,14 @@
             restoreLastScrolledPosition();
         }
 
-        mSelectedSet.addObserver(mConversationSetObserver);
+        mCheckedSet.addObserver(mConversationSetObserver);
     }
 
     @Override
     public void onPause() {
         super.onPause();
 
-        mSelectedSet.removeObserver(mConversationSetObserver);
+        mCheckedSet.removeObserver(mConversationSetObserver);
 
         saveLastScrolledPosition();
     }
@@ -711,22 +789,10 @@
     public void onViewModeChanged(int newMode) {
         if (mTabletDevice) {
             if (ViewMode.isListMode(newMode)) {
-                // There are no selected conversations when in conversation list mode.
+                // There are no checked conversations when in conversation list mode.
                 clearChoicesAndActivated();
             }
         }
-        if (mFooterView != null) {
-            mFooterView.onViewModeChanged(newMode);
-        }
-
-        // Set default navigation
-        if (ViewMode.isListMode(newMode)) {
-            mListView.setNextFocusRightId(R.id.conversation_list_view);
-            mListView.requestFocus();
-        } else if (ViewMode.isConversationMode(newMode)) {
-            // This would only happen in two_pane
-            mListView.setNextFocusRightId(R.id.conversation_pager);
-        }
     }
 
     public boolean isAnimating() {
@@ -741,10 +807,10 @@
         return isScrolling;
     }
 
-    private void clearChoicesAndActivated() {
-        final int currentSelected = mListView.getCheckedItemPosition();
-        if (currentSelected != ListView.INVALID_POSITION) {
-            mListView.setItemChecked(mListView.getCheckedItemPosition(), false);
+    protected void clearChoicesAndActivated() {
+        final int currentChecked = mListView.getCheckedItemPosition();
+        if (currentChecked != ListView.INVALID_POSITION) {
+            mListView.setItemChecked(currentChecked, false);
         }
     }
 
@@ -783,53 +849,88 @@
     private void viewConversation(final int position) {
         LogUtils.d(LOG_TAG, "ConversationListFragment.viewConversation(%d)", position);
 
-        final ConversationCursor cursor =
-                (ConversationCursor) getAnimatedAdapter().getItem(position);
-
-        if (cursor == null) {
-            LogUtils.e(LOG_TAG,
-                    "unable to open conv at cursor pos=%s cursor=%s getPositionOffset=%s",
-                    position, cursor, getAnimatedAdapter().getPositionOffset(position));
-            return;
-        }
-
-        final Conversation conv = cursor.getConversation();
+        final Object item = getAnimatedAdapter().getItem(position);
+        if (item != null && item instanceof ConversationCursor) {
+            final ConversationCursor cursor = (ConversationCursor) item;
+            final Conversation conv = cursor.getConversation();
         /*
          * The cursor position may be different than the position method parameter because of
          * special views in the list.
          */
-        conv.position = cursor.getPosition();
-        setSelected(conv.position, true);
-        mCallbacks.onConversationSelected(conv, false /* inLoaderCallbacks */);
+            conv.position = cursor.getPosition();
+            setActivated(conv, true);
+            mCallbacks.onConversationSelected(conv, false /* inLoaderCallbacks */);
+        } else {
+            LogUtils.e(LOG_TAG,
+                    "unable to open conv at cursor pos=%s item=%s getPositionOffset=%s",
+                    position, item, getAnimatedAdapter().getPositionOffset(position));
+        }
     }
 
     /**
-     * Sets the selected conversation to the position given here.
-     * @param cursorPosition The position of the conversation in the cursor (as opposed to
-     * in the list)
-     * @param different if the currently selected conversation is different from the one provided
+     * Sets the checked conversation to the position given here.
+     * @param conversation the activated conversation.
+     * @param different if the currently checked conversation is different from the one provided
      * here.  This is a difference in conversations, not a difference in positions. For example, a
      * conversation at position 2 can move to position 4 as a result of new mail.
      */
-    public void setSelected(final int cursorPosition, boolean different) {
-        if (mListView.getChoiceMode() == ListView.CHOICE_MODE_NONE) {
+    public void setActivated(final Conversation conversation, boolean different) {
+        if (mListView.getChoiceMode() == ListView.CHOICE_MODE_NONE || conversation == null) {
             return;
         }
 
-        final int position =
-                cursorPosition + getAnimatedAdapter().getPositionOffset(cursorPosition);
-
-        setRawSelected(position, different);
+        final int cursorPosition = conversation.position;
+        final int position = cursorPosition + mListAdapter.getPositionOffset(cursorPosition);
+        setRawActivated(position, different);
+        setRawSelected(conversation, position);
     }
 
     /**
-     * Sets the selected conversation to the position given here.
+     * Set the selected conversation (used by the framework to indicate current focus in the list).
+     * @param conversation the selected conversation.
+     */
+    public void setSelected(final Conversation conversation) {
+        if (mListView.getChoiceMode() == ListView.CHOICE_MODE_NONE || conversation == null) {
+            return;
+        }
+
+        final int cursorPosition = conversation.position;
+        final int position = cursorPosition + mListAdapter.getPositionOffset(cursorPosition);
+        setRawSelected(conversation, position);
+    }
+
+    /**
+     * Set the selected conversation (used by the framework to indicate current focus in the list).
      * @param position The position of the item in the list
-     * @param different if the currently selected conversation is different from the one provided
+     */
+    private void setRawSelected(Conversation conversation, final int position) {
+        final View selectedView = mListView.getChildAt(
+                position - mListView.getFirstVisiblePosition());
+        // Don't do anything if the view is already selected.
+        if (!(selectedView != null && selectedView.isSelected())) {
+            final int firstVisible = mListView.getFirstVisiblePosition();
+            final int lastVisible = mListView.getLastVisiblePosition();
+            // Check if the view is off the screen
+            if (selectedView == null || position < firstVisible || position > lastVisible) {
+                mListView.setSelection(position);
+            } else {
+                // If the view is on screen, we call setSelectionFromTop with a top offset. This
+                // prevents the list from stupidly scrolling the item to the top because
+                // setSelection calls setSelectionFromTop with y = 0.
+                mListView.setSelectionFromTop(position, selectedView.getTop());
+            }
+            mListView.setSelectedConversation(conversation);
+        }
+    }
+
+    /**
+     * Sets the activated conversation to the position given here.
+     * @param position The position of the item in the list
+     * @param different if the currently activated conversation is different from the one provided
      * here.  This is a difference in conversations, not a difference in positions. For example, a
      * conversation at position 2 can move to position 4 as a result of new mail.
      */
-    public void setRawSelected(final int position, final boolean different) {
+    public void setRawActivated(final int position, final boolean different) {
         if (mListView.getChoiceMode() == ListView.CHOICE_MODE_NONE) {
             return;
         }
@@ -837,6 +938,8 @@
         if (different) {
             mListView.smoothScrollToPosition(position);
         }
+        // Internally setItemChecked will set the activated bit if the item does not implement
+        // the Checkable interface. We use checked state to indicated CAB selection mode.
         mListView.setItemChecked(position, true);
     }
 
@@ -945,8 +1048,9 @@
 
         // Even though cursor might be empty, the list adapter might have teasers/footers.
         // So we check the list adapter count if the cursor is fully/partially loaded.
-        if (cursor != null && ConversationCursor.isCursorReadyToShow(cursor) &&
-                mListAdapter.getCount() == 0) {
+        if (mAccount.securityHold != 0) {
+            showSecurityHoldView();
+        } else if (mListAdapter.getCount() == 0) {
             showEmptyView();
         } else {
             showListView();
@@ -1007,7 +1111,7 @@
     }
 
     /**
-     * Changes the conversation cursor in the list and sets selected position if none is set.
+     * Changes the conversation cursor in the list and sets checked position if none is set.
      */
     private void onCursorUpdated() {
         if (mCallbacks == null || mListAdapter == null) {
@@ -1043,13 +1147,14 @@
             }
         }
 
-        // If a current conversation is available, and none is selected in the list, then ask
+        // If a current conversation is available, and none is activated in the list, then ask
         // the list to select the current conversation.
         final Conversation conv = mCallbacks.getCurrentConversation();
-        if (conv != null) {
+        final boolean currentConvIsPeeking = mCallbacks.isCurrentConversationJustPeeking();
+        if (conv != null && !currentConvIsPeeking) {
             if (mListView.getChoiceMode() != ListView.CHOICE_MODE_NONE
                     && mListView.getCheckedItemPosition() == -1) {
-                setSelected(conv.position, true);
+                setActivated(conv, true);
             }
         }
     }
@@ -1094,7 +1199,7 @@
 
     private final ConversationSetObserver mConversationSetObserver = new ConversationSetObserver() {
         @Override
-        public void onSetPopulated(final ConversationSelectionSet set) {
+        public void onSetPopulated(final ConversationCheckedSet set) {
             // Disable the swipe to refresh widget.
             mSwipeRefreshWidget.setEnabled(false);
         }
@@ -1105,13 +1210,14 @@
         }
 
         @Override
-        public void onSetChanged(final ConversationSelectionSet set) {
+        public void onSetChanged(final ConversationCheckedSet set) {
             // Do nothing
         }
     };
 
     private void saveLastScrolledPosition() {
-        if (mListAdapter.getCursor() == null) {
+        if (mFolder == null || mFolder.conversationListUri == null ||
+                mListAdapter.getCursor() == null) {
             // If you save your scroll position in an empty list, you're gonna have a bad time
             return;
         }
@@ -1211,14 +1317,63 @@
         return ConversationCursor.isCursorReadyToShow(getConversationListCursor());
     }
 
-    public ListView getListView() {
+    public SwipeableListView getListView() {
         return mListView;
     }
 
-    public void setNextFocusLeftId(@IdRes int id) {
-        mNextFocusLeftId = id;
-        if (mListView != null) {
-            mListView.setNextFocusLeftId(mNextFocusLeftId);
+    public void setNextFocusStartId(@IdRes int id) {
+        mNextFocusStartId = id;
+        setNextFocusStartOnList();
+    }
+
+    private void setNextFocusStartOnList() {
+        if (mListView != null && mNextFocusStartId != 0) {
+            // Since we manually handle right navigation from the list, let's just always set both
+            // the default left and right navigation to the left id so that whenever the framework
+            // handles one of these directions, it will go to the left side regardless of RTL.
+            mListView.setNextFocusLeftId(mNextFocusStartId);
+            mListView.setNextFocusRightId(mNextFocusStartId);
+        }
+    }
+
+    public void onClick(View view) {
+        if (view == mSecurityHoldButton) {
+            final String accountSecurityUri = mAccount.accountSecurityUri;
+            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(accountSecurityUri));
+            startActivity(intent);
+        }
+    }
+
+    @Override
+    public final void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
+            int totalItemCount) {
+        mListView.onScroll(view, firstVisibleItem, visibleItemCount, totalItemCount);
+    }
+
+    /**
+     * Used with SwipeableListView to change conv_list backgrounds to work around shadow elevation
+     * issues causing and overdraw problems due to static backgrounds.
+     *
+     * @param view
+     * @param scrollState
+     */
+    @Override
+    public void onScrollStateChanged(final AbsListView view, final int scrollState) {
+        mListView.onScrollStateChanged(view, scrollState);
+
+        final View rootView = getView();
+
+        // It seems that the list view is reading the scroll state, but the onCreateView has not
+        // yet finished and the root view is null, so check that
+        if (rootView != null) {
+            // If not scrolling, assign default background - white for tablet, transparent for phone
+            if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
+                rootView.setBackgroundColor(mDefaultListBackgroundColor);
+
+                // Otherwise, list is scrolling, so remove background (corresponds to 0 input)
+            } else {
+                rootView.setBackgroundResource(0);
+            }
         }
     }
 }
diff --git a/src/com/android/mail/ui/ConversationListHelper.java b/src/com/android/mail/ui/ConversationListHelper.java
index 6c8b637..7054599 100644
--- a/src/com/android/mail/ui/ConversationListHelper.java
+++ b/src/com/android/mail/ui/ConversationListHelper.java
@@ -33,25 +33,26 @@
      */
     public ArrayList<ConversationSpecialItemView> makeConversationListSpecialViews(
             final Context context, final ControllableActivity activity, final Account account) {
+        // Note that these teasers have to be added in the order of importance because it's a stack,
+        // thus the last teaser added will appear on top.
+
+        // Sync disabled teaser view
         final ConversationSyncDisabledTipView conversationSyncDisabledTipView =
-                (ConversationSyncDisabledTipView) LayoutInflater.from(context)
-                        .inflate(R.layout.conversation_sync_disabled_tip_view, null);
+                new ConversationSyncDisabledTipView(context);
         conversationSyncDisabledTipView.bindAccount(account, activity);
 
+        // Message in outbox teaser view
         final ConversationsInOutboxTipView conversationsInOutboxTipView =
-                (ConversationsInOutboxTipView) LayoutInflater.from(context)
-                        .inflate(R.layout.conversation_outbox_tip_view, null);
+                new ConversationsInOutboxTipView(context);
         conversationsInOutboxTipView.bind(account, activity.getFolderSelector());
 
         // Conversation photo teaser view
         final ConversationPhotoTeaserView conversationPhotoTeaser =
-                (ConversationPhotoTeaserView) LayoutInflater.from(context)
-                        .inflate(R.layout.conversation_photo_teaser_view, null);
+                new ConversationPhotoTeaserView(context);
 
         // Long press to select tip
         final ConversationLongPressTipView conversationLongPressTipView =
-                (ConversationLongPressTipView) LayoutInflater.from(context)
-                        .inflate(R.layout.conversation_long_press_to_select_tip_view, null);
+                new ConversationLongPressTipView(context);
 
         final NestedFolderTeaserView nestedFolderTeaserView =
                 (NestedFolderTeaserView) LayoutInflater.from(context)
diff --git a/src/com/android/mail/ui/ConversationLongPressTipView.java b/src/com/android/mail/ui/ConversationLongPressTipView.java
index 163bdc2..d77aeca 100644
--- a/src/com/android/mail/ui/ConversationLongPressTipView.java
+++ b/src/com/android/mail/ui/ConversationLongPressTipView.java
@@ -16,101 +16,34 @@
 
 package com.android.mail.ui;
 
+import android.content.Context;
+
 import com.android.mail.R;
 import com.android.mail.analytics.Analytics;
 import com.android.mail.browse.ConversationCursor;
 import com.android.mail.preferences.MailPrefs;
 import com.android.mail.providers.Folder;
-import com.android.mail.utils.Utils;
-
-import android.animation.ObjectAnimator;
-import android.app.LoaderManager;
-import android.content.Context;
-import android.content.res.Resources;
-import android.os.Bundle;
-import android.util.AttributeSet;
-import android.view.View;
-import android.view.animation.DecelerateInterpolator;
-import android.widget.FrameLayout;
 
 /**
  * A tip to educate users about long press to enter CAB mode.  Appears on top of conversation list.
  */
-// TODO: this class was shamelessly copied from ConversationPhotoTeaserView.  Look into
-// extracting a common base class.
-public class ConversationLongPressTipView extends FrameLayout
-        implements ConversationSpecialItemView, SwipeableItemView {
-
-    private static int sScrollSlop = 0;
-    private static int sShrinkAnimationDuration;
-
+public class ConversationLongPressTipView extends ConversationTipView {
     private final MailPrefs mMailPrefs;
-    private AnimatedAdapter mAdapter;
-
-    private View mSwipeableContent;
-
     private boolean mShow;
-    private int mAnimatedHeight = -1;
-
-    private View mTeaserRightEdge;
-    /** Whether we are on a tablet device or not */
-    private final boolean mTabletDevice;
-    /** When in conversation mode, true if the list is hidden */
-    private final boolean mListCollapsible;
 
     public ConversationLongPressTipView(final Context context) {
-        this(context, null);
-    }
-
-    public ConversationLongPressTipView(final Context context, final AttributeSet attrs) {
-        this(context, attrs, -1);
-    }
-
-    public ConversationLongPressTipView(
-            final Context context, final AttributeSet attrs, final int defStyle) {
-        super(context, attrs, defStyle);
-
-        final Resources resources = context.getResources();
-
-        if (sScrollSlop == 0) {
-            sScrollSlop = resources.getInteger(R.integer.swipeScrollSlop);
-            sShrinkAnimationDuration = resources.getInteger(
-                    R.integer.shrink_animation_duration);
-        }
+        super(context);
 
         mMailPrefs = MailPrefs.get(context);
-
-        mTabletDevice = Utils.useTabletUI(resources);
-        mListCollapsible = resources.getBoolean(R.bool.list_collapsible);
-    }
-
-    @Override
-    protected void onFinishInflate() {
-        mSwipeableContent = findViewById(R.id.swipeable_content);
-
-        findViewById(R.id.dismiss_button).setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                dismiss();
-            }
-        });
-
-        mTeaserRightEdge = findViewById(R.id.teaser_right_edge);
+        setText(getResources().getString(R.string.long_press_to_select_tip));
     }
 
     @Override
     public void onUpdate(Folder folder, ConversationCursor cursor) {
-        // It's possible user has enabled/disabled sender images in settings, which affects
-        // whether we want to show this tip or not.
         mShow = checkWhetherToShow();
     }
 
     @Override
-    public void onGetView() {
-        // Do nothing
-    }
-
-    @Override
     public boolean getShouldDisplayInList() {
         mShow = checkWhetherToShow();
         return mShow;
@@ -123,30 +56,6 @@
     }
 
     @Override
-    public int getPosition() {
-        // We want this teaser to go before the first real conversation
-        return 0;
-    }
-
-    @Override
-    public void setAdapter(AnimatedAdapter adapter) {
-        mAdapter = adapter;
-    }
-
-    @Override
-    public void bindFragment(final LoaderManager loaderManager, final Bundle savedInstanceState) {
-    }
-
-    @Override
-    public void cleanup() {
-    }
-
-    @Override
-    public void onConversationSelected() {
-        // DO NOTHING
-    }
-
-    @Override
     public void onCabModeEntered() {
         if (mShow) {
             dismiss();
@@ -154,109 +63,16 @@
     }
 
     @Override
-    public void onCabModeExited() {
-        // Do nothing
-    }
-
-    @Override
-    public void onConversationListVisibilityChanged(final boolean visible) {
-        // Do nothing
-    }
-
-    @Override
-    public void saveInstanceState(final Bundle outState) {
-        // Do nothing
-    }
-
-    @Override
-    public boolean acceptsUserTaps() {
-        // No, we don't allow user taps.
-        return false;
-    }
-
-    @Override
     public void dismiss() {
-        setDismissed();
-        startDestroyAnimation();
-    }
-
-    private void setDismissed() {
         if (mShow) {
             mMailPrefs.setLongPressToSelectTipAlreadyShown();
             mShow = false;
             Analytics.getInstance().sendEvent("list_swipe", "long_press_tip", null, 0);
         }
+        super.dismiss();
     }
 
     protected boolean shouldShowSenderImage() {
         return mMailPrefs.getShowSenderImages();
     }
-
-    @Override
-    public SwipeableView getSwipeableView() {
-        return SwipeableView.from(mSwipeableContent);
-    }
-
-    @Override
-    public boolean canChildBeDismissed() {
-        return true;
-    }
-
-    @Override
-    public float getMinAllowScrollDistance() {
-        return sScrollSlop;
-    }
-
-    private void startDestroyAnimation() {
-        final int start = getHeight();
-        final int end = 0;
-        mAnimatedHeight = start;
-        final ObjectAnimator heightAnimator =
-                ObjectAnimator.ofInt(this, "animatedHeight", start, end);
-        heightAnimator.setInterpolator(new DecelerateInterpolator(2.0f));
-        heightAnimator.setDuration(sShrinkAnimationDuration);
-        heightAnimator.start();
-
-        /*
-         * Ideally, we would like to call mAdapter.notifyDataSetChanged() in a listener's
-         * onAnimationEnd(), but we are in the middle of a touch event, and this will cause all the
-         * views to get recycled, which will cause problems.
-         *
-         * Instead, we'll just leave the item in the list with a height of 0, and the next
-         * notifyDatasetChanged() will remove it from the adapter.
-         */
-    }
-
-    /**
-     * This method is used by the animator.  It is explicitly kept in proguard.flags to prevent it
-     * from being removed, inlined, or obfuscated.
-     * Edit ./packages/apps/UnifiedEmail/proguard.flags
-     * In the future, we want to use @Keep
-     */
-    public void setAnimatedHeight(final int height) {
-        mAnimatedHeight = height;
-        requestLayout();
-    }
-
-    @Override
-    protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
-        if (Utils.getDisplayListRightEdgeEffect(mTabletDevice, mListCollapsible,
-                mAdapter.getViewMode())) {
-            mTeaserRightEdge.setVisibility(VISIBLE);
-        } else {
-            mTeaserRightEdge.setVisibility(GONE);
-        }
-
-        if (mAnimatedHeight == -1) {
-            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-        } else {
-            setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), mAnimatedHeight);
-        }
-    }
-
-    @Override
-    public boolean commitLeaveBehindItem() {
-        // This view has no leave-behind
-        return false;
-    }
-}
+}
\ No newline at end of file
diff --git a/src/com/android/mail/ui/ConversationPhotoTeaserView.java b/src/com/android/mail/ui/ConversationPhotoTeaserView.java
index d12d815..f145339 100644
--- a/src/com/android/mail/ui/ConversationPhotoTeaserView.java
+++ b/src/com/android/mail/ui/ConversationPhotoTeaserView.java
@@ -1,162 +1,49 @@
 package com.android.mail.ui;
 
-import android.animation.ObjectAnimator;
-import android.app.LoaderManager;
 import android.content.Context;
-import android.content.res.Resources;
-import android.os.Bundle;
-import android.util.AttributeSet;
-import android.view.View;
-import android.view.animation.DecelerateInterpolator;
-import android.widget.FrameLayout;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.TextView;
 
 import com.android.mail.R;
 import com.android.mail.analytics.Analytics;
 import com.android.mail.browse.ConversationCursor;
 import com.android.mail.preferences.MailPrefs;
 import com.android.mail.providers.Folder;
-import com.android.mail.utils.Utils;
 
 /**
  * A teaser to introduce people to the contact photo check boxes
  */
-public class ConversationPhotoTeaserView extends FrameLayout
-        implements ConversationSpecialItemView, SwipeableItemView {
-    private static int sScrollSlop = 0;
-    private static int sShrinkAnimationDuration;
-
+public class ConversationPhotoTeaserView extends ConversationTipView {
     private final MailPrefs mMailPrefs;
-    private AnimatedAdapter mAdapter;
-
-    private View mSwipeableContent;
-
     private boolean mShown;
-    private int mAnimatedHeight = -1;
-    private boolean mNeedLayout;
-    private int mTextTop;
-
-    private View mTeaserRightEdge;
-    /** Whether we are on a tablet device or not */
-    private final boolean mTabletDevice;
-    /** When in conversation mode, true if the list is hidden */
-    private final boolean mListCollapsible;
 
     public ConversationPhotoTeaserView(final Context context) {
-        this(context, null);
-    }
-
-    public ConversationPhotoTeaserView(final Context context, final AttributeSet attrs) {
-        this(context, attrs, -1);
-    }
-
-    public ConversationPhotoTeaserView(
-            final Context context, final AttributeSet attrs, final int defStyle) {
-        super(context, attrs, defStyle);
-
-        final Resources resources = context.getResources();
-
-        synchronized (ConversationPhotoTeaserView.class) {
-            if (sScrollSlop == 0) {
-                sScrollSlop = resources.getInteger(R.integer.swipeScrollSlop);
-                sShrinkAnimationDuration = resources.getInteger(
-                        R.integer.shrink_animation_duration);
-            }
-        }
+        super(context);
 
         mMailPrefs = MailPrefs.get(context);
-
-        mNeedLayout = true;
-
-        mTabletDevice = Utils.useTabletUI(resources);
-        mListCollapsible = resources.getBoolean(R.bool.list_collapsible);
+        setText(getResources().getString(R.string.conversation_photo_welcome_text));
     }
 
     @Override
-    protected void onFinishInflate() {
-        mSwipeableContent = findViewById(R.id.swipeable_content);
-
-        findViewById(R.id.dismiss_button).setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                dismiss();
-            }
-        });
-
-        mTeaserRightEdge = findViewById(R.id.teaser_right_edge);
-    }
-
-    @Override
-    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
-        super.onLayout(changed, left, top, right, bottom);
-
-        final TextView text = (TextView) findViewById(R.id.text);
-        final ImageView arrow = (ImageView) findViewById(R.id.arrow);
-
-        // We post to avoid calling layout within layout
-        arrow.post(new Runnable() {
-            @Override
-            public void run() {
-
-                // The text top is changed when we move the arrow, so we need to
-                // do multiple passes
-                int textTop = text.getTop();
-                if (mNeedLayout || textTop != mTextTop) {
-                    mNeedLayout = false;
-                    mTextTop = textTop;
-
-                    final int lineHeight = text.getLineHeight();
-                    final LinearLayout.LayoutParams arrowParams = (LinearLayout.LayoutParams) arrow
-                            .getLayoutParams();
-                    arrowParams.topMargin = mTextTop + lineHeight / 2;
-                    arrow.setLayoutParams(arrowParams);
-                }
-                arrow.setVisibility(View.VISIBLE);
-            }
-        });
+    protected ImageAttrSet getStartIconAttr() {
+        return new ImageAttrSet(R.drawable.ic_check_24dp,
+                R.drawable.conversation_photo_teaser_checkmark_bg, null);
     }
 
     @Override
     public void onUpdate(Folder folder, ConversationCursor cursor) {
-        // Do nothing
-    }
-
-    @Override
-    public void onGetView() {
-        // Do nothing
+        mShown = checkWhetherToShow();
     }
 
     @Override
     public boolean getShouldDisplayInList() {
         // show if 1) sender images are enabled 2) there are items
-        mShown = shouldShowSenderImage() && !mAdapter.isEmpty()
-                && !mMailPrefs.isConversationPhotoTeaserAlreadyShown();
+        mShown = checkWhetherToShow();
         return mShown;
     }
 
-    @Override
-    public int getPosition() {
-        return 0;
-    }
-
-    @Override
-    public void setAdapter(AnimatedAdapter adapter) {
-        mAdapter = adapter;
-    }
-
-    @Override
-    public void bindFragment(final LoaderManager loaderManager, final Bundle savedInstanceState) {
-    }
-
-    @Override
-    public void cleanup() {
-    }
-
-    @Override
-    public void onConversationSelected() {
-        // DO NOTHING
+    private boolean checkWhetherToShow() {
+        // show if 1) sender images are disabled 2) there are items
+        return shouldShowSenderImage() && !mAdapter.isEmpty()
+                && !mMailPrefs.isConversationPhotoTeaserAlreadyShown();
     }
 
     @Override
@@ -167,109 +54,16 @@
     }
 
     @Override
-    public void onCabModeExited() {
-        // Do nothing
-    }
-
-    @Override
-    public void onConversationListVisibilityChanged(final boolean visible) {
-        // Do nothing
-    }
-
-    @Override
-    public void saveInstanceState(final Bundle outState) {
-        // Do nothing
-    }
-
-    @Override
-    public boolean acceptsUserTaps() {
-        // No, we don't allow user taps.
-        return false;
-    }
-
-    @Override
     public void dismiss() {
-        setDismissed();
-        startDestroyAnimation();
-    }
-
-    private void setDismissed() {
         if (mShown) {
             mMailPrefs.setConversationPhotoTeaserAlreadyShown();
             mShown = false;
             Analytics.getInstance().sendEvent("list_swipe", "photo_teaser", null, 0);
         }
+        super.dismiss();
     }
 
     protected boolean shouldShowSenderImage() {
         return mMailPrefs.getShowSenderImages();
     }
-
-    @Override
-    public SwipeableView getSwipeableView() {
-        return SwipeableView.from(mSwipeableContent);
-    }
-
-    @Override
-    public boolean canChildBeDismissed() {
-        return true;
-    }
-
-    @Override
-    public float getMinAllowScrollDistance() {
-        return sScrollSlop;
-    }
-
-    private void startDestroyAnimation() {
-        final int start = getHeight();
-        final int end = 0;
-        mAnimatedHeight = start;
-        final ObjectAnimator heightAnimator =
-                ObjectAnimator.ofInt(this, "animatedHeight", start, end);
-        heightAnimator.setInterpolator(new DecelerateInterpolator(2.0f));
-        heightAnimator.setDuration(sShrinkAnimationDuration);
-        heightAnimator.start();
-
-        /*
-         * Ideally, we would like to call mAdapter.notifyDataSetChanged() in a listener's
-         * onAnimationEnd(), but we are in the middle of a touch event, and this will cause all the
-         * views to get recycled, which will cause problems.
-         *
-         * Instead, we'll just leave the item in the list with a height of 0, and the next
-         * notifyDatasetChanged() will remove it from the adapter.
-         */
-    }
-
-    /**
-     * This method is used by the animator.  It is explicitly kept in proguard.flags to prevent it
-     * from being removed, inlined, or obfuscated.
-     * Edit ./packages/apps/UnifiedEmail/proguard.flags
-     * In the future, we want to use @Keep
-     */
-    public void setAnimatedHeight(final int height) {
-        mAnimatedHeight = height;
-        requestLayout();
-    }
-
-    @Override
-    protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
-        if (Utils.getDisplayListRightEdgeEffect(mTabletDevice, mListCollapsible,
-                mAdapter.getViewMode())) {
-            mTeaserRightEdge.setVisibility(VISIBLE);
-        } else {
-            mTeaserRightEdge.setVisibility(GONE);
-        }
-
-        if (mAnimatedHeight == -1) {
-            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-        } else {
-            setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), mAnimatedHeight);
-        }
-    }
-
-    @Override
-    public boolean commitLeaveBehindItem() {
-        // This view has no leave-behind
-        return false;
-    }
 }
diff --git a/src/com/android/mail/ui/ConversationSetObserver.java b/src/com/android/mail/ui/ConversationSetObserver.java
index bd85e03..b119f0c 100644
--- a/src/com/android/mail/ui/ConversationSetObserver.java
+++ b/src/com/android/mail/ui/ConversationSetObserver.java
@@ -25,7 +25,7 @@
  * listen to such user actions.
  */
 public interface ConversationSetObserver {
-    // TODO(viki): Consider passing a mutable instance of ConversationSelectionSet. In the current
+    // TODO(viki): Consider passing a mutable instance of ConversationCheckedSet. In the current
     // implementation, the observers can wreck the selection set unknowingly!!
 
     /**
@@ -37,11 +37,11 @@
      * Handle when the selection set is populated with some items. The observer should not make any
      * modifications to the set while handling this event.
      */
-    void onSetPopulated(ConversationSelectionSet set);
+    void onSetPopulated(ConversationCheckedSet set);
 
     /**
      * Handle when the selection set gets an element added or removed. The observer should not
      * make any modifications to the set while handling this event.
      */
-    void onSetChanged(ConversationSelectionSet set);
+    void onSetChanged(ConversationCheckedSet set);
 }
diff --git a/src/com/android/mail/ui/ConversationSyncDisabledTipView.java b/src/com/android/mail/ui/ConversationSyncDisabledTipView.java
index f9271a3..189c4ab 100644
--- a/src/com/android/mail/ui/ConversationSyncDisabledTipView.java
+++ b/src/com/android/mail/ui/ConversationSyncDisabledTipView.java
@@ -16,23 +16,18 @@
 
 package com.android.mail.ui;
 
-import android.animation.Animator;
-import android.animation.ObjectAnimator;
-import android.animation.Animator.AnimatorListener;
 import android.app.Activity;
-import android.app.LoaderManager;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.res.Resources;
-import android.os.Bundle;
+import android.text.Html;
+import android.text.Spannable;
 import android.text.SpannableString;
+import android.text.Spanned;
 import android.text.TextUtils;
 import android.text.style.TextAppearanceSpan;
-import android.util.AttributeSet;
+import android.util.Log;
 import android.view.View;
-import android.view.animation.DecelerateInterpolator;
-import android.widget.FrameLayout;
-import android.widget.TextView;
 
 import com.android.mail.R;
 import com.android.mail.analytics.Analytics;
@@ -43,45 +38,23 @@
 import com.android.mail.providers.Folder;
 import com.android.mail.utils.LogTag;
 import com.android.mail.utils.LogUtils;
+import com.android.mail.utils.StyleUtils;
 import com.android.mail.utils.Utils;
 
 /**
  * A tip displayed on top of conversation view to indicate that Gmail sync is
  * currently disabled on this account.
  */
-public class ConversationSyncDisabledTipView extends FrameLayout
-        implements ConversationSpecialItemView, SwipeableItemView {
-
-    private static final String LOG_TAG = LogTag.getLogTag();
-
-    private static int sScrollSlop = 0;
-    private static int sShrinkAnimationDuration;
-
+public class ConversationSyncDisabledTipView extends ConversationTipView {
+    public static final String LOG_TAG = LogTag.getLogTag();
     private Account mAccount = null;
     private Folder mFolder = null;
     private final MailPrefs mMailPrefs;
     private AccountPreferences mAccountPreferences;
-    private AnimatedAdapter mAdapter;
     private Activity mActivity;
 
-    private View mSwipeableContent;
-    private TextView mText1;
-    private TextView mText2;
-    private View mTextArea;
-    private SpannableString mEnableSyncInAccountSettingsText;
-    private final OnClickListener mAutoSyncOffTextClickedListener;
-    private final OnClickListener mAccountSyncOffTextClickedListener;
-
-    private int mAnimatedHeight = -1;
-
     private int mReasonSyncOff = ReasonSyncOff.NONE;
 
-    private View mTeaserRightEdge;
-    /** Whether we are on a tablet device or not */
-    private final boolean mTabletDevice;
-    /** When in conversation mode, true if the list is hidden */
-    private final boolean mListCollapsible;
-
     public interface ReasonSyncOff {
         // Background sync is enabled for current account, do not display this tip
         public static final int NONE = 0;
@@ -92,58 +65,25 @@
     }
 
     public ConversationSyncDisabledTipView(final Context context) {
-        this(context, null);
-    }
-
-    public ConversationSyncDisabledTipView(final Context context, final AttributeSet attrs) {
-        this(context, attrs, -1);
-    }
-
-    public ConversationSyncDisabledTipView(
-            final Context context, final AttributeSet attrs, final int defStyle) {
-        super(context, attrs, defStyle);
-
-        final Resources resources = context.getResources();
-
-        if (sScrollSlop == 0) {
-            sScrollSlop = resources.getInteger(R.integer.swipeScrollSlop);
-            sShrinkAnimationDuration = resources.getInteger(
-                    R.integer.shrink_animation_duration);
-        }
+        super(context);
 
         mMailPrefs = MailPrefs.get(context);
+    }
 
-        mAutoSyncOffTextClickedListener = new OnClickListener() {
+    @Override
+    protected OnClickListener getTextAreaOnClickListener() {
+        return new OnClickListener() {
             @Override
-            public void onClick(View v) {
-                final TurnAutoSyncOnDialog dialog = TurnAutoSyncOnDialog.newInstance(
-                        mAccount.getAccountManagerAccount(), mAccount.syncAuthority);
-                dialog.show(mActivity.getFragmentManager(), TurnAutoSyncOnDialog.DIALOG_TAG);
+            public void onClick(View view) {
+                if (mReasonSyncOff == ReasonSyncOff.AUTO_SYNC_OFF) {
+                    final TurnAutoSyncOnDialog dialog = TurnAutoSyncOnDialog.newInstance(
+                            mAccount.getAccountManagerAccount(), mAccount.syncAuthority);
+                    dialog.show(mActivity.getFragmentManager(), TurnAutoSyncOnDialog.DIALOG_TAG);
+                } else if (mReasonSyncOff == ReasonSyncOff.ACCOUNT_SYNC_OFF) {
+                    Utils.showAccountSettings(getContext(), mAccount);
+                }
             }
         };
-
-        mAccountSyncOffTextClickedListener = new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                Utils.showAccountSettings(getContext(), mAccount);
-            }
-        };
-
-        // Create the "Turn on in Account settings." text where "Account settings" appear as
-        // a blue link.
-        final String subString = resources.getString(R.string.account_settings_param);
-        final String entireString = resources.getString(
-                R.string.enable_sync_in_account_settings, subString);
-        mEnableSyncInAccountSettingsText = new SpannableString(entireString);
-        final int index = entireString.indexOf(subString);
-        mEnableSyncInAccountSettingsText.setSpan(
-                new TextAppearanceSpan(context, R.style.LinksInTipTextAppearance),
-                index,
-                index + subString.length(),
-                0);
-
-        mTabletDevice = Utils.useTabletUI(resources);
-        mListCollapsible = resources.getBoolean(R.bool.list_collapsible);
     }
 
     public void bindAccount(Account account, ControllableActivity activity) {
@@ -153,29 +93,6 @@
     }
 
     @Override
-    public void onGetView() {
-        // Do nothing
-    }
-
-    @Override
-    protected void onFinishInflate() {
-        mSwipeableContent = findViewById(R.id.swipeable_content);
-
-        mText1 = (TextView) findViewById(R.id.text_line1);
-        mText2 = (TextView) findViewById(R.id.text_line2);
-        mTextArea = findViewById(R.id.text_area);
-
-        findViewById(R.id.dismiss_button).setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                dismiss();
-            }
-        });
-
-        mTeaserRightEdge = findViewById(R.id.teaser_right_edge);
-    }
-
-    @Override
     public void onUpdate(Folder folder, ConversationCursor cursor) {
         mFolder = folder;
     }
@@ -238,76 +155,25 @@
     private void setReasonSyncOff(int reason) {
         if (mReasonSyncOff != reason) {
             mReasonSyncOff = reason;
+            final Resources resources = getResources();
             switch (mReasonSyncOff) {
                 case ReasonSyncOff.AUTO_SYNC_OFF:
-                    mText1.setText(R.string.auto_sync_off);
-                    mText2.setText(R.string.tap_to_enable_sync);
-                    mText2.setVisibility(View.VISIBLE);
-                    mTextArea.setClickable(true);
-                    mTextArea.setOnClickListener(mAutoSyncOffTextClickedListener);
+                    setText(resources.getString(R.string.auto_sync_off));
                     break;
                 case ReasonSyncOff.ACCOUNT_SYNC_OFF:
-                    mText1.setText(R.string.account_sync_off);
-                    mText2.setText(mEnableSyncInAccountSettingsText);
-                    mText2.setVisibility(View.VISIBLE);
-                    mTextArea.setClickable(true);
-                    mTextArea.setOnClickListener(mAccountSyncOffTextClickedListener);
+                    // Create the "Turn on in Account settings." text where "Account settings" appear as
+                    // a blue link.
+                    Spannable accountSyncOff = new SpannableString(
+                            Html.fromHtml(resources.getString(R.string.account_sync_off)));
+                    StyleUtils.stripUnderlinesAndLinkUrls(accountSyncOff, null);
+                    setText(accountSyncOff);
                     break;
                 default:
-                    // Doesn't matter what mText is since this view is not displayed
             }
         }
     }
 
     @Override
-    public int getPosition() {
-        // We want this teaser to go before the first real conversation
-        return 0;
-    }
-
-    @Override
-    public void setAdapter(AnimatedAdapter adapter) {
-        mAdapter = adapter;
-    }
-
-    @Override
-    public void bindFragment(LoaderManager loaderManager, final Bundle savedInstanceState) {
-    }
-
-    @Override
-    public void cleanup() {
-    }
-
-    @Override
-    public void onConversationSelected() {
-        // DO NOTHING
-    }
-
-    @Override
-    public void onCabModeEntered() {
-    }
-
-    @Override
-    public void onCabModeExited() {
-        // Do nothing
-    }
-
-    @Override
-    public void onConversationListVisibilityChanged(final boolean visible) {
-        // Do nothing
-    }
-
-    @Override
-    public void saveInstanceState(final Bundle outState) {
-        // Do nothing
-    }
-
-    @Override
-    public boolean acceptsUserTaps() {
-        return true;
-    }
-
-    @Override
     public void dismiss() {
         final String reason;
         switch (mReasonSyncOff) {
@@ -324,87 +190,6 @@
                 break;
         }
         Analytics.getInstance().sendEvent("list_swipe", "sync_disabled_tip", reason, 0);
-        startDestroyAnimation();
+        super.dismiss();
     }
-
-    @Override
-    public SwipeableView getSwipeableView() {
-        return SwipeableView.from(mSwipeableContent);
-    }
-
-    @Override
-    public boolean canChildBeDismissed() {
-        return true;
-    }
-
-    @Override
-    public float getMinAllowScrollDistance() {
-        return sScrollSlop;
-    }
-
-    private void startDestroyAnimation() {
-        final int start = getHeight();
-        final int end = 0;
-        mAnimatedHeight = start;
-        final ObjectAnimator heightAnimator =
-                ObjectAnimator.ofInt(this, "animatedHeight", start, end);
-        heightAnimator.setInterpolator(new DecelerateInterpolator(2.0f));
-        heightAnimator.setDuration(sShrinkAnimationDuration);
-        heightAnimator.addListener(new AnimatorListener() {
-            @Override
-            public void onAnimationStart(final Animator animation) {
-                // Do nothing
-            }
-
-            @Override
-            public void onAnimationRepeat(final Animator animation) {
-                // Do nothing
-            }
-
-            @Override
-            public void onAnimationEnd(final Animator animation) {
-                // We should no longer exist, so notify the adapter
-                mAdapter.notifyDataSetChanged();
-            }
-
-            @Override
-            public void onAnimationCancel(final Animator animation) {
-                // Do nothing
-            }
-        });
-        heightAnimator.start();
-    }
-
-    /**
-     * This method is used by the animator.  It is explicitly kept in proguard.flags to prevent it
-     * from being removed, inlined, or obfuscated.
-     * Edit ./vendor/unbundled/packages/apps/UnifiedGmail/proguard.flags
-     * In the future, we want to use @Keep
-     */
-    public void setAnimatedHeight(final int height) {
-        mAnimatedHeight = height;
-        requestLayout();
-    }
-
-    @Override
-    protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
-        if (Utils.getDisplayListRightEdgeEffect(mTabletDevice, mListCollapsible,
-                mAdapter.getViewMode())) {
-            mTeaserRightEdge.setVisibility(VISIBLE);
-        } else {
-            mTeaserRightEdge.setVisibility(GONE);
-        }
-
-        if (mAnimatedHeight == -1) {
-            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-        } else {
-            setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), mAnimatedHeight);
-        }
-    }
-
-    @Override
-    public boolean commitLeaveBehindItem() {
-        // This view has no leave-behind
-        return false;
-    }
-}
+}
\ No newline at end of file
diff --git a/src/com/android/mail/ui/ConversationTipView.java b/src/com/android/mail/ui/ConversationTipView.java
new file mode 100644
index 0000000..32c3fb7
--- /dev/null
+++ b/src/com/android/mail/ui/ConversationTipView.java
@@ -0,0 +1,282 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.mail.ui;
+
+import android.animation.ObjectAnimator;
+import android.app.LoaderManager;
+import android.content.Context;
+import android.content.res.Resources;
+import android.os.Bundle;
+import android.support.annotation.LayoutRes;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.animation.DecelerateInterpolator;
+import android.widget.AbsListView;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.android.mail.R;
+import com.android.mail.browse.ConversationCursor;
+import com.android.mail.providers.Folder;
+import com.android.mail.utils.LogTag;
+
+/**
+ * Base class to display tip teasers in the thread list.
+ * Supports two-line text and start/end icons.
+ */
+public abstract class ConversationTipView extends LinearLayout
+        implements ConversationSpecialItemView, SwipeableItemView, View.OnClickListener {
+    protected static final String LOG_TAG = LogTag.getLogTag();
+
+    protected Context mContext;
+    protected AnimatedAdapter mAdapter;
+
+    private int mScrollSlop;
+    private int mShrinkAnimationDuration;
+    private int mAnimatedHeight = -1;
+
+    protected View mSwipeableContent;
+    private View mContent;
+    private TextView mText;
+
+    public ConversationTipView(Context context) {
+        this(context, null);
+    }
+
+    public ConversationTipView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        mContext = context;
+
+        final Resources resources = context.getResources();
+        mScrollSlop = resources.getInteger(R.integer.swipeScrollSlop);
+        mShrinkAnimationDuration = resources.getInteger(
+                R.integer.shrink_animation_duration);
+
+        // Inflate the actual content and add it to this view
+        mContent = LayoutInflater.from(mContext).inflate(getChildLayout(), this, false);
+        addView(mContent);
+        setupViews();
+    }
+
+    @Override
+    public ViewGroup.LayoutParams getLayoutParams() {
+        ViewGroup.LayoutParams params = super.getLayoutParams();
+        if (params != null) {
+            params.width = ViewGroup.LayoutParams.MATCH_PARENT;
+            params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
+        }
+        return params;
+    }
+
+    protected @LayoutRes int getChildLayout() {
+        // Should override setupViews as well if this is overridden.
+        return R.layout.conversation_tip_view;
+    }
+
+    protected void setupViews() {
+        // If this is overridden, child classes cannot rely on setText/getStartIconAttr/etc.
+        mSwipeableContent = mContent.findViewById(R.id.conversation_tip_swipeable_content);
+        mText = (TextView) mContent.findViewById(R.id.conversation_tip_text);
+        final ImageView startImage = (ImageView) mContent.findViewById(R.id.conversation_tip_icon1);
+        final ImageView dismiss = (ImageView) mContent.findViewById(R.id.dismiss_icon);
+
+        // Bind content (text content must be bound by calling setText(..))
+        bindIcon(startImage, getStartIconAttr());
+
+        // Bind listeners
+        dismiss.setOnClickListener(this);
+        mText.setOnClickListener(getTextAreaOnClickListener());
+    }
+
+    /**
+     * Helper function to bind the additional attributes to the icon, or make the icon GONE.
+     */
+    private void bindIcon(ImageView image, ImageAttrSet attr) {
+        if (attr != null) {
+            image.setVisibility(VISIBLE);
+            image.setContentDescription(attr.contentDescription);
+            // Must override resId for the actual icon, so no need to check -1 here.
+            image.setImageResource(attr.resId);
+            if (attr.background != -1) {
+                image.setBackgroundResource(attr.background);
+            }
+        } else {
+            image.setVisibility(GONE);
+        }
+    }
+
+    @Override
+    protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
+        if (mAnimatedHeight == -1) {
+            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+        } else {
+            setMeasuredDimension(View.MeasureSpec.getSize(widthMeasureSpec), mAnimatedHeight);
+        }
+    }
+
+    protected ImageAttrSet getStartIconAttr() {
+        return null;
+    }
+
+    protected void setText(CharSequence text) {
+        mText.setText(text);
+    }
+
+    protected OnClickListener getTextAreaOnClickListener() {
+        return null;
+    }
+
+    @Override
+    public void onClick(View view) {
+        // Default on click for the default dismiss button
+        dismiss();
+    }
+
+    @Override
+    public void onUpdate(Folder folder, ConversationCursor cursor) {
+        // Do nothing by default
+    }
+
+    @Override
+    public void onGetView() {
+        // Do nothing by default
+    }
+
+    @Override
+    public int getPosition() {
+        // By default the tip teasers go on top of the list.
+        return 0;
+    }
+
+    @Override
+    public void setAdapter(AnimatedAdapter adapter) {
+        mAdapter = adapter;
+    }
+
+    @Override
+    public void bindFragment(LoaderManager loaderManager, Bundle savedInstanceState) {
+        // Do nothing by default
+    }
+
+    @Override
+    public void cleanup() {
+        // Do nothing by default
+    }
+
+    @Override
+    public void onConversationSelected() {
+        // Do nothing by default
+    }
+
+    @Override
+    public void onCabModeEntered() {
+        // Do nothing by default
+    }
+
+    @Override
+    public void onCabModeExited() {
+        // Do nothing by default
+    }
+
+    @Override
+    public boolean acceptsUserTaps() {
+        return true;
+    }
+
+    @Override
+    public void onConversationListVisibilityChanged(boolean visible) {
+        // Do nothing by default
+    }
+
+    @Override
+    public void saveInstanceState(Bundle outState) {
+        // Do nothing by default
+    }
+
+    @Override
+    public boolean commitLeaveBehindItem() {
+        // Tip has no leave-behind by default
+        return false;
+    }
+
+    @Override
+    public SwipeableView getSwipeableView() {
+        return SwipeableView.from(mSwipeableContent);
+    }
+
+    @Override
+    public boolean canChildBeDismissed() {
+        return true;
+    }
+
+    @Override
+    public void dismiss() {
+        startDestroyAnimation();
+    }
+
+    @Override
+    public float getMinAllowScrollDistance() {
+        return mScrollSlop;
+    }
+
+    private void startDestroyAnimation() {
+        final int start = getHeight();
+        final int end = 0;
+        mAnimatedHeight = start;
+        final ObjectAnimator heightAnimator =
+                ObjectAnimator.ofInt(this, "animatedHeight", start, end);
+        heightAnimator.setInterpolator(new DecelerateInterpolator(2.0f));
+        heightAnimator.setDuration(mShrinkAnimationDuration);
+        heightAnimator.start();
+
+        /*
+         * Ideally, we would like to call mAdapter.notifyDataSetChanged() in a listener's
+         * onAnimationEnd(), but we are in the middle of a touch event, and this will cause all the
+         * views to get recycled, which will cause problems.
+         *
+         * Instead, we'll just leave the item in the list with a height of 0, and the next
+         * notifyDatasetChanged() will remove it from the adapter.
+         */
+    }
+
+    /**
+     * This method is used by the animator.  It is explicitly kept in proguard.flags to prevent it
+     * from being removed, inlined, or obfuscated.
+     * Edit ./vendor/unbundled/packages/apps/UnifiedGmail/proguard.flags
+     * In the future, we want to use @Keep
+     */
+    public void setAnimatedHeight(final int height) {
+        mAnimatedHeight = height;
+        requestLayout();
+    }
+
+    public static class ImageAttrSet {
+        // -1 for these resIds to not override the default value.
+        public int resId;
+        public int background;
+        public String contentDescription;
+
+        public ImageAttrSet(int resId, int background, String contentDescription) {
+            this.resId = resId;
+            this.background = background;
+            this.contentDescription = contentDescription;
+        }
+    }
+}
diff --git a/src/com/android/mail/ui/ConversationUpdater.java b/src/com/android/mail/ui/ConversationUpdater.java
index da2204c..745d7d2 100644
--- a/src/com/android/mail/ui/ConversationUpdater.java
+++ b/src/com/android/mail/ui/ConversationUpdater.java
@@ -111,6 +111,15 @@
             byte[] originalConversationInfo);
 
     /**
+     * Mark a single conversation 'seen', which is a combination of 'viewed' and 'read'. In some
+     * configurations (peek mode), this operation may be prevented and the method will return false.
+     *
+     * @param conv the conversation to mark seen
+     * @return true if the operation was a success
+     */
+    boolean markConversationSeen(Conversation conv);
+
+    /**
      * Star a single message within a conversation. This method requires a
      * {@link ConversationMessage} to propagate the change to the owning {@link Conversation}.
      *
diff --git a/src/com/android/mail/ui/ConversationViewFragment.java b/src/com/android/mail/ui/ConversationViewFragment.java
index d3c7600..0f52cc705 100644
--- a/src/com/android/mail/ui/ConversationViewFragment.java
+++ b/src/com/android/mail/ui/ConversationViewFragment.java
@@ -28,6 +28,8 @@
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.os.SystemClock;
+import android.support.annotation.IdRes;
+import android.support.annotation.Nullable;
 import android.support.v4.text.BidiFormatter;
 import android.support.v4.util.ArrayMap;
 import android.text.TextUtils;
@@ -41,9 +43,9 @@
 import android.webkit.CookieSyncManager;
 import android.webkit.JavascriptInterface;
 import android.webkit.WebChromeClient;
+import android.webkit.WebResourceResponse;
 import android.webkit.WebSettings;
 import android.webkit.WebView;
-import android.widget.Button;
 
 import com.android.emailcommon.mail.Address;
 import com.android.mail.FormattedDateBuilder;
@@ -71,6 +73,7 @@
 import com.android.mail.browse.ScrollIndicatorsView;
 import com.android.mail.browse.SuperCollapsedBlock;
 import com.android.mail.browse.WebViewContextMenu;
+import com.android.mail.compose.ComposeActivity;
 import com.android.mail.content.ObjectCursor;
 import com.android.mail.print.PrintUtils;
 import com.android.mail.providers.Account;
@@ -80,9 +83,11 @@
 import com.android.mail.providers.UIProvider;
 import com.android.mail.ui.ConversationViewState.ExpansionState;
 import com.android.mail.utils.ConversationViewUtils;
+import com.android.mail.utils.KeyboardUtils;
 import com.android.mail.utils.LogTag;
 import com.android.mail.utils.LogUtils;
 import com.android.mail.utils.Utils;
+import com.android.mail.utils.ViewUtils;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
@@ -128,6 +133,9 @@
      */
     private final int LOAD_WAIT_UNTIL_VISIBLE = 2;
 
+    // Default scroll distance when the user tries to scroll with up/down
+    private final int DEFAULT_VERTICAL_SCROLL_DISTANCE_PX = 50;
+
     // Keyboard navigation
     private KeyboardNavigationController mNavigationController;
     // Since we manually control navigation for most of the conversation view due to problems
@@ -148,7 +156,8 @@
 
     private ConversationViewProgressController mProgressController;
 
-    private Button mNewMessageBar;
+    private ActionableToastBar mNewMessageBar;
+    private ActionableToastBar.ActionClickedListener mNewMessageBarActionListener;
 
     protected HtmlConversationTemplates mTemplates;
 
@@ -372,7 +381,6 @@
     @Override
     public View onCreateView(LayoutInflater inflater,
             ViewGroup container, Bundle savedInstanceState) {
-
         View rootView = inflater.inflate(R.layout.conversation_view, container, false);
         mConversationContainer = (ConversationContainer) rootView
                 .findViewById(R.id.conversation_container);
@@ -413,7 +421,7 @@
             @Override
             public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
                 if (consoleMessage.messageLevel() == ConsoleMessage.MessageLevel.ERROR) {
-                    LogUtils.wtf(LOG_TAG, "JS: %s (%s:%d) f=%s", consoleMessage.message(),
+                    LogUtils.e(LOG_TAG, "JS: %s (%s:%d) f=%s", consoleMessage.message(),
                             consoleMessage.sourceId(), consoleMessage.lineNumber(),
                             ConversationViewFragment.this);
                 } else {
@@ -436,6 +444,10 @@
 
         ConversationViewUtils.setTextZoom(getResources(), settings);
 
+        if (Utils.isRunningLOrLater()) {
+            CookieManager.getInstance().setAcceptThirdPartyCookies(mWebView, true /* accept */);
+        }
+
         mViewsCreated = true;
         mWebViewLoadedData = false;
 
@@ -447,14 +459,14 @@
     }
 
     protected void setupNewMessageBar() {
-        mNewMessageBar = (Button) mConversationContainer.findViewById(
+        mNewMessageBar = (ActionableToastBar) mConversationContainer.findViewById(
                 R.id.new_message_notification_bar);
-        mNewMessageBar.setOnClickListener(new View.OnClickListener() {
+        mNewMessageBarActionListener = new ActionableToastBar.ActionClickedListener() {
             @Override
-            public void onClick(View v) {
+            public void onActionClicked(Context context) {
                 onNewMessageBarClick();
             }
-        });
+        };
     }
 
     @Override
@@ -763,7 +775,7 @@
                 }
             } else {
                 // new messages that are not expanded default to being eligible for super-collapse
-                if (!msg.read || messageCursor.isLast()) {
+                if (msg.starred || !msg.read || messageCursor.isLast()) {
                     expandedState = ExpansionState.EXPANDED;
                 } else if (messageCursor.isFirst()) {
                     expandedState = ExpansionState.COLLAPSED;
@@ -826,7 +838,7 @@
         final boolean applyTransforms = shouldApplyTransforms();
 
         // If the conversation has specified a base uri, use it here, otherwise use mBaseUri
-        return mTemplates.endConversation(convFooterPx, mBaseUri,
+        return mTemplates.endConversation(mWebView.screenPxToWebPx(convFooterPx), mBaseUri,
                 mConversation.getBaseUri(mBaseUri),
                 mWebView.getViewportWidth(), mWebView.getWidthInDp(mSideMarginPx),
                 enableContentReadySignal, isOverviewMode(mAccount), applyTransforms,
@@ -834,12 +846,15 @@
     }
 
     private MessageHeaderItem getLastMessageHeaderItem() {
-        final int count = mAdapter.getCount();
-        if (count < 3) {
-            LogUtils.wtf(LOG_TAG, "not enough items in the adapter. count: %s", count);
-            return null;
+        int pos = mAdapter.getCount();
+        while (--pos >= 0) {
+            final ConversationOverlayItem item = mAdapter.getItem(pos);
+            if (item instanceof MessageHeaderItem) {
+                return (MessageHeaderItem) item;
+            }
         }
-        return (MessageHeaderItem) mAdapter.getItem(count - 2);
+        LogUtils.wtf(LOG_TAG, "No message header found");
+        return null;
     }
 
     private void renderSuperCollapsedBlock(int start, int end, boolean hasDraft) {
@@ -1010,9 +1025,13 @@
         mWebView.getSettings().setBlockNetworkImage(false);
 
         final Address sender = getAddress(senderRawAddress);
+        if (sender == null) {
+            // Don't need to unblock any images
+            return;
+        }
         final MessageCursor cursor = getMessageCursor();
 
-        final List<String> messageDomIds = new ArrayList<String>();
+        final List<String> messageDomIds = new ArrayList<>();
 
         int pos = -1;
         while (cursor.moveToPosition(++pos)) {
@@ -1051,7 +1070,10 @@
     @Override
     public void showUntransformedConversation() {
         super.showUntransformedConversation();
-        renderConversation(getMessageCursor());
+        final MessageCursor cursor = getMessageCursor();
+        if  (cursor != null) {
+            renderConversation(cursor);
+        }
     }
 
     @Override
@@ -1067,12 +1089,12 @@
     }
 
     private void showNewMessageNotification(NewMessagesInfo info) {
-        mNewMessageBar.setText(info.getNotificationText());
-        mNewMessageBar.setVisibility(View.VISIBLE);
+        mNewMessageBar.show(mNewMessageBarActionListener, info.getNotificationText(), R.string.show,
+                true /* replaceVisibleToast */, false /* autohide */, null /* ToastBarOperation */);
     }
 
     private void onNewMessageBarClick() {
-        mNewMessageBar.setVisibility(View.GONE);
+        mNewMessageBar.hide(true, true);
 
         renderConversation(getMessageCursor()); // mCursor is already up-to-date
                                                 // per onLoadFinished()
@@ -1087,7 +1109,7 @@
         return positions;
     }
 
-    protected Address getAddress(String rawFrom) {
+    protected @Nullable Address getAddress(String rawFrom) {
         return Utils.getAddress(mAddressCache, rawFrom);
     }
 
@@ -1137,8 +1159,39 @@
         if (domMessageId == null) {
             return null;
         }
+        final MessageCursor messageCursor = getMessageCursor();
+        if (messageCursor == null) {
+            return null;
+        }
         final String messageId = mTemplates.getMessageIdForDomId(domMessageId);
-        return getMessageCursor().getMessageForId(Long.parseLong(messageId));
+        return messageCursor.getMessageForId(Long.parseLong(messageId));
+    }
+
+    /**
+     * Determines if we should intercept the left/right key event generated by the hardware
+     * keyboard so the framework won't handle directional navigation for us.
+     */
+    private boolean shouldInterceptLeftRightEvents(@IdRes int id, boolean isLeft, boolean isRight,
+            boolean twoPaneLand) {
+        return twoPaneLand && (id == R.id.conversation_topmost_overlay ||
+                id == R.id.upper_header ||
+                id == R.id.super_collapsed_block ||
+                id == R.id.message_footer ||
+                (id == R.id.overflow && isRight) ||
+                (id == R.id.reply_button && isLeft) ||
+                (id == R.id.forward_button && isRight));
+    }
+
+    /**
+     * Indicates if the direction with the provided id should navigate away from the conversation
+     * view. Note that this is only applicable in two-pane landscape mode.
+     */
+    private boolean shouldNavigateAway(@IdRes int id, boolean isLeft, boolean twoPaneLand) {
+        return twoPaneLand && isLeft && (id == R.id.conversation_topmost_overlay ||
+                id == R.id.upper_header ||
+                id == R.id.super_collapsed_block ||
+                id == R.id.message_footer ||
+                id == R.id.reply_button);
     }
 
     @Override
@@ -1149,9 +1202,10 @@
 
         if (mOriginalKeyedView != null) {
             final int id = mOriginalKeyedView.getId();
+            final boolean isRtl = ViewUtils.isViewRtl(mOriginalKeyedView);
             final boolean isActionUp = keyEvent.getAction() == KeyEvent.ACTION_UP;
-            final boolean isLeft = keyCode == KeyEvent.KEYCODE_DPAD_LEFT;
-            final boolean isRight = keyCode == KeyEvent.KEYCODE_DPAD_RIGHT;
+            final boolean isStart = KeyboardUtils.isKeycodeDirectionStart(keyCode, isRtl);
+            final boolean isEnd = KeyboardUtils.isKeycodeDirectionEnd(keyCode, isRtl);
             final boolean isUp = keyCode == KeyEvent.KEYCODE_DPAD_UP;
             final boolean isDown = keyCode == KeyEvent.KEYCODE_DPAD_DOWN;
 
@@ -1159,15 +1213,14 @@
             // We manually check if the view+direction combination should shift focus away from the
             // conversation view to the thread list in two-pane landscape mode.
             final boolean isTwoPaneLand = mNavigationController.isTwoPaneLandscape();
-            final boolean navigateAway = mConversationContainer.shouldNavigateAway(id, isLeft,
-                    isTwoPaneLand);
+            final boolean navigateAway = shouldNavigateAway(id, isStart, isTwoPaneLand);
             if (mNavigationController.onInterceptKeyFromCV(keyCode, keyEvent, navigateAway)) {
                 return true;
             }
 
             // If controller didn't handle the event, check directional interception.
-            if ((isLeft || isRight) && mConversationContainer.shouldInterceptLeftRightEvents(
-                    id, isLeft, isRight, isTwoPaneLand)) {
+            if ((isStart || isEnd) && shouldInterceptLeftRightEvents(
+                    id, isStart, isEnd, isTwoPaneLand)) {
                 return true;
             } else if (isUp || isDown) {
                 // We don't do anything on up/down for overlay
@@ -1177,37 +1230,27 @@
 
                 // We manually handle up/down navigation through the overlay items because the
                 // system's default isn't optimal for two-pane landscape since it's not a real list.
-                final int position = mConversationContainer.getViewPosition(mOriginalKeyedView);
-                final View next = mConversationContainer.getNextOverlayView(position, isDown);
+                final View next = mConversationContainer.getNextOverlayView(mOriginalKeyedView,
+                        isDown);
                 if (next != null) {
-                    if (isActionUp) {
-                        next.requestFocus();
-
-                        // Make sure that v is in view
-                        final int[] coords = new int[2];
-                        next.getLocationOnScreen(coords);
-                        final int bottom = coords[1] + next.getHeight();
-                        if (bottom > mMaxScreenHeight) {
-                            mWebView.scrollBy(0, bottom - mMaxScreenHeight);
-                        } else if (coords[1] < mTopOfVisibleScreen) {
-                            mWebView.scrollBy(0, coords[1] - mTopOfVisibleScreen);
+                    focusAndScrollToView(next);
+                } else if (!isActionUp) {
+                    // Scroll in the direction of the arrow if next view isn't found.
+                    final int currentY = mWebView.getScrollY();
+                    if (isUp && currentY > 0) {
+                        mWebView.scrollBy(0,
+                                -Math.min(currentY, DEFAULT_VERTICAL_SCROLL_DISTANCE_PX));
+                    } else if (isDown) {
+                        final int webviewEnd = (int) (mWebView.getContentHeight() *
+                                mWebView.getScale());
+                        final int currentEnd = currentY + mWebView.getHeight();
+                        if (currentEnd < webviewEnd) {
+                            mWebView.scrollBy(0, Math.min(webviewEnd - currentEnd,
+                                    DEFAULT_VERTICAL_SCROLL_DISTANCE_PX));
                         }
                     }
-                    return true;
-                } else {
-                    // Special case two end points
-                    // Start is marked as index 1 because we are currently not allowing focus on
-                    // conversation view header.
-                    if ((position == mConversationContainer.getOverlayCount() - 1 && isDown) ||
-                            (position == 1 && isUp)) {
-                        mTopmostOverlay.requestFocus();
-                        // Scroll to the the top if we hit the first item
-                        if (isUp) {
-                            mWebView.scrollTo(0, 0);
-                        }
-                        return true;
-                    }
                 }
+                return true;
             }
 
             // Finally we handle the special keys
@@ -1219,8 +1262,8 @@
             } else if (keyCode == KeyEvent.KEYCODE_ENTER &&
                     id == R.id.conversation_topmost_overlay) {
                 if (isActionUp) {
-                    mConversationContainer.focusFirstMessageHeader();
                     mWebView.scrollTo(0, 0);
+                    mConversationContainer.focusFirstMessageHeader();
                 }
                 return true;
             }
@@ -1228,12 +1271,42 @@
         return false;
     }
 
+    private void focusAndScrollToView(View v) {
+        // Make sure that v is in view
+        final int[] coords = new int[2];
+        v.getLocationOnScreen(coords);
+        final int bottom = coords[1] + v.getHeight();
+        if (bottom > mMaxScreenHeight) {
+            mWebView.scrollBy(0, bottom - mMaxScreenHeight);
+        } else if (coords[1] < mTopOfVisibleScreen) {
+            mWebView.scrollBy(0, coords[1] - mTopOfVisibleScreen);
+        }
+        v.requestFocus();
+    }
+
     public class ConversationWebViewClient extends AbstractConversationWebViewClient {
         public ConversationWebViewClient(Account account) {
             super(account);
         }
 
         @Override
+        public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
+            // try to locate the message associated with the url
+            final ConversationMessage cm = getMessageForClickedUrl(url);
+            if (cm != null) {
+                // try to load the url assuming it is a cid url
+                final Uri uri = Uri.parse(url);
+                final WebResourceResponse response = loadCIDUri(uri, cm);
+                if (response != null) {
+                    return response;
+                }
+            }
+
+            // otherwise, attempt the default handling
+            return super.shouldInterceptRequest(view, url);
+        }
+
+        @Override
         public void onPageFinished(WebView view, String url) {
             // Ignore unsafe calls made after a fragment is detached from an activity.
             // This method needs to, for example, get at the loader manager, which needs
@@ -1361,7 +1434,13 @@
                 while (cursor.moveToPosition(++pos)) {
                     final ConversationMessage msg = cursor.getMessage();
                     if (TextUtils.equals(domId, mTemplates.getMessageDomId(msg))) {
-                        return getAddress(msg.getFrom()).getAddress();
+                        final Address address = getAddress(msg.getFrom());
+                        if (address != null) {
+                            return address.getAddress();
+                        } else {
+                            // Fall through to return an empty string
+                            break;
+                        }
                     }
                 }
 
@@ -1448,7 +1527,6 @@
     private class NewMessagesInfo {
         int count;
         int countFromSelf;
-        String senderAddress;
 
         /**
          * Return the display text for the new message notification overlay. It will be formatted
@@ -1457,15 +1535,7 @@
          * @return display text
          */
         public String getNotificationText() {
-            Resources res = getResources();
-            if (count > 1) {
-                return res.getQuantityString(R.plurals.new_incoming_messages_many, count, count);
-            } else {
-                final Address addr = getAddress(senderAddress);
-                return res.getString(R.string.new_incoming_messages_one,
-                        mBidiFormatter.unicodeWrap(TextUtils.isEmpty(addr.getPersonal())
-                                ? addr.getAddress() : addr.getPersonal()));
-            }
+            return getResources().getQuantityString(R.plurals.new_incoming_messages, count, count);
         }
     }
 
@@ -1567,7 +1637,6 @@
                 }
 
                 info.count++;
-                info.senderAddress = m.getFrom();
             }
         }
         return info;
@@ -1632,7 +1701,13 @@
         // Temporarily remove the ConversationFooterItem and its view.
         // It will get re-added right after the new message is added.
         final ConversationFooterItem footerItem = mAdapter.removeFooterItem();
-        mConversationContainer.removeViewAtAdapterIndex(footerItem.getPosition());
+        // if no footer, just skip the work for it. The rest should be fine to do.
+        if (footerItem != null) {
+            mConversationContainer.removeViewAtAdapterIndex(footerItem.getPosition());
+        } else {
+            LogUtils.i(LOG_TAG, "footer item not found");
+        }
+
         mTemplates.reset();
         // this method will add some items to mAdapter, but we deliberately want to avoid notifying
         // adapter listeners (i.e. ConversationContainer) until onWebContentGeometryChange is next
@@ -1741,4 +1816,26 @@
         PrintUtils.printConversation(mActivity.getActivityContext(), getMessageCursor(),
                 mAddressCache, mConversation.getBaseUri(mBaseUri), true /* useJavascript */);
     }
+
+    @Override
+    protected void handleReply() {
+        final MessageHeaderItem item = getLastMessageHeaderItem();
+        if (item != null) {
+            final ConversationMessage msg = item.getMessage();
+            if (msg != null) {
+                ComposeActivity.reply(getActivity(), mAccount, msg);
+            }
+        }
+    }
+
+    @Override
+    protected void handleReplyAll() {
+        final MessageHeaderItem item = getLastMessageHeaderItem();
+        if (item != null) {
+            final ConversationMessage msg = item.getMessage();
+            if (msg != null) {
+                ComposeActivity.replyAll(getActivity(), mAccount, msg);
+            }
+        }
+    }
 }
diff --git a/src/com/android/mail/ui/ConversationViewFrame.java b/src/com/android/mail/ui/ConversationViewFrame.java
index 73bbf45..de93334 100644
--- a/src/com/android/mail/ui/ConversationViewFrame.java
+++ b/src/com/android/mail/ui/ConversationViewFrame.java
@@ -17,8 +17,11 @@
 package com.android.mail.ui;
 
 import android.content.Context;
+import android.os.SystemClock;
+import android.support.annotation.NonNull;
 import android.util.AttributeSet;
 import android.view.MotionEvent;
+import android.view.ViewConfiguration;
 import android.widget.FrameLayout;
 
 /**
@@ -26,18 +29,26 @@
  */
 public class ConversationViewFrame extends FrameLayout {
 
+    private final ViewConfiguration mConfiguration;
+    private long mInterceptedTime;
+    private float mInterceptedXDown;
+    private float mInterceptedYDown;
+
     public interface DownEventListener {
-        boolean onInterceptCVDownEvent();
+        boolean shouldBlockTouchEvents();
+        void onConversationViewFrameTapped();
+        void onConversationViewTouchDown();
     }
 
     private DownEventListener mDownEventListener;
 
     public ConversationViewFrame(Context c) {
-        super(c, null);
+        this(c, null);
     }
 
     public ConversationViewFrame(Context c, AttributeSet attrs) {
         super(c, attrs);
+        mConfiguration = ViewConfiguration.get(c);
     }
 
     public void setDownEventListener(DownEventListener l) {
@@ -46,13 +57,39 @@
 
     @Override
     public boolean onInterceptTouchEvent(MotionEvent ev) {
-        boolean steal = false;
-        if (ev.getActionMasked() == MotionEvent.ACTION_DOWN && mDownEventListener != null) {
-            steal = mDownEventListener.onInterceptCVDownEvent();
-            // just drop the event stream that follows when we steal; we closed the drawer and
-            // that's enough.
+        final boolean steal = (mDownEventListener != null
+                && mDownEventListener.shouldBlockTouchEvents());
+        if (!steal && ev.getActionMasked() == MotionEvent.ACTION_DOWN
+                && mDownEventListener != null) {
+            // notify 2-pane that this CV is being interacted (to turn a peek->normal)
+            mDownEventListener.onConversationViewTouchDown();
         }
         return steal;
     }
 
+    @Override
+    public boolean onTouchEvent(@NonNull MotionEvent ev) {
+        if (mDownEventListener != null) {
+            switch (ev.getActionMasked()) {
+                case MotionEvent.ACTION_DOWN:
+                    mInterceptedTime = SystemClock.elapsedRealtime();
+                    mInterceptedXDown = ev.getX();
+                    mInterceptedYDown = ev.getY();
+                    break;
+                case MotionEvent.ACTION_UP:
+                    // Check for a tap
+                    final long timeDelta = SystemClock.elapsedRealtime() - mInterceptedTime;
+                    final float xDelta = ev.getX() - mInterceptedXDown;
+                    final float yDelta = ev.getY() - mInterceptedYDown;
+                    if (timeDelta < ViewConfiguration.getTapTimeout()
+                            && xDelta < mConfiguration.getScaledTouchSlop()
+                            && yDelta < mConfiguration.getScaledTouchSlop()) {
+                        mDownEventListener.onConversationViewFrameTapped();
+                    }
+            }
+            return true;
+        }
+        return false;
+    }
+
 }
diff --git a/src/com/android/mail/ui/ConversationsInOutboxTipView.java b/src/com/android/mail/ui/ConversationsInOutboxTipView.java
index 2dc1064..323edb1 100644
--- a/src/com/android/mail/ui/ConversationsInOutboxTipView.java
+++ b/src/com/android/mail/ui/ConversationsInOutboxTipView.java
@@ -16,9 +16,6 @@
 
 package com.android.mail.ui;
 
-import android.animation.Animator;
-import android.animation.ObjectAnimator;
-import android.animation.Animator.AnimatorListener;
 import android.app.LoaderManager;
 import android.app.LoaderManager.LoaderCallbacks;
 import android.content.Context;
@@ -26,12 +23,9 @@
 import android.content.res.Resources;
 import android.os.Bundle;
 import android.text.SpannableString;
+import android.text.Spanned;
 import android.text.style.TextAppearanceSpan;
-import android.util.AttributeSet;
 import android.view.View;
-import android.view.animation.DecelerateInterpolator;
-import android.widget.FrameLayout;
-import android.widget.TextView;
 
 import com.android.mail.R;
 import com.android.mail.browse.ConversationCursor;
@@ -41,62 +35,24 @@
 import com.android.mail.providers.Account;
 import com.android.mail.providers.Folder;
 import com.android.mail.providers.UIProvider;
-import com.android.mail.utils.Utils;
 
 /**
  * Tip that is displayed in conversation list of 'Sent' folder whenever there are
  * one or more messages in the Outbox.
  */
-public class ConversationsInOutboxTipView extends FrameLayout
-        implements ConversationSpecialItemView, SwipeableItemView {
-
-    private static int sScrollSlop = 0;
-    private static int sShrinkAnimationDuration;
-
+public class ConversationsInOutboxTipView extends ConversationTipView {
     private Account mAccount = null;
     private AccountPreferences mAccountPreferences;
-    private AnimatedAdapter mAdapter;
     private LoaderManager mLoaderManager;
     private FolderSelector mFolderSelector;
     private Folder mOutbox;
     private int mOutboxCount = -1;
 
-    private View mSwipeableContent;
-    private TextView mText;
-
-    private int mAnimatedHeight = -1;
-
-    private View mTeaserRightEdge;
-    /** Whether we are on a tablet device or not */
-    private final boolean mTabletDevice;
-    /** When in conversation mode, true if the list is hidden */
-    private final boolean mListCollapsible;
-
     private static final int LOADER_FOLDER_LIST =
             AbstractActivityController.LAST_FRAGMENT_LOADER_ID + 100;
 
-    public ConversationsInOutboxTipView(final Context context) {
-        this(context, null);
-    }
-
-    public ConversationsInOutboxTipView(final Context context, final AttributeSet attrs) {
-        this(context, attrs, -1);
-    }
-
-    public ConversationsInOutboxTipView(
-            final Context context, final AttributeSet attrs, final int defStyle) {
-        super(context, attrs, defStyle);
-
-        final Resources resources = context.getResources();
-
-        if (sScrollSlop == 0) {
-            sScrollSlop = resources.getInteger(R.integer.swipeScrollSlop);
-            sShrinkAnimationDuration = resources.getInteger(
-                    R.integer.shrink_animation_duration);
-        }
-
-        mTabletDevice = Utils.useTabletUI(resources);
-        mListCollapsible = resources.getBoolean(R.bool.list_collapsible);
+    public ConversationsInOutboxTipView(Context context) {
+        super(context);
     }
 
     public void bind(final Account account, final FolderSelector folderSelector) {
@@ -106,37 +62,15 @@
     }
 
     @Override
-    public void onGetView() {
-        // Do nothing
-    }
-
-    @Override
-    protected void onFinishInflate() {
-        mSwipeableContent = findViewById(R.id.swipeable_content);
-
-        mText = (TextView) findViewById(R.id.outbox);
-
-        findViewById(R.id.outbox).setOnClickListener(new View.OnClickListener() {
+    protected OnClickListener getTextAreaOnClickListener() {
+        return new OnClickListener() {
             @Override
-            public void onClick(View v) {
-                goToOutbox();
+            public void onClick(View view) {
+                if (mOutbox != null) {
+                    mFolderSelector.onFolderSelected(mOutbox);
+                }
             }
-        });
-
-        findViewById(R.id.dismiss_button).setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                dismiss();
-            }
-        });
-
-        mTeaserRightEdge = findViewById(R.id.teaser_right_edge);
-    }
-
-    private void goToOutbox() {
-        if (mOutbox != null) {
-            mFolderSelector.onFolderSelected(mOutbox);
-        }
+        };
     }
 
     @Override
@@ -176,9 +110,8 @@
             // query to load folders of a given type to make this more efficient, but should be
             // okay for now since this is triggered infrequently (only when user visits the
             // 'Sent' folder).
-            final ObjectCursorLoader<Folder> loader = new ObjectCursorLoader<Folder>(getContext(),
+            return new ObjectCursorLoader<Folder>(getContext(),
                     mAccount.folderListUri, UIProvider.FOLDERS_PROJECTION, Folder.FACTORY);
-            return loader;
         }
     };
 
@@ -186,9 +119,7 @@
         if (mOutboxCount != outboxCount) {
             mOutboxCount = outboxCount;
             if (outboxCount > 0) {
-                if (mText != null) {
-                    updateText();
-                }
+                updateText();
             }
         }
         if (outboxCount == 0) {
@@ -202,17 +133,13 @@
         // Update the display text to reflect current mOutboxCount
         final Resources resources = getContext().getResources();
         final String subString = mOutbox.name;
-        final String entireString = resources.getString(
-                R.string.unsent_messages_in_outbox,
+        final String entireString = resources.getString(R.string.unsent_messages_in_outbox,
                 String.valueOf(mOutboxCount), subString);
         final SpannableString text = new SpannableString(entireString);
         final int index = entireString.indexOf(subString);
-        text.setSpan(
-                new TextAppearanceSpan(getContext(), R.style.LinksInTipTextAppearance),
-                index,
-                index + subString.length(),
-                0);
-        mText.setText(text);
+        text.setSpan(new TextAppearanceSpan(getContext(), R.style.LinksInTipTextAppearance), index,
+                index + subString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+        setText(text);
     }
 
     @Override
@@ -221,54 +148,11 @@
     }
 
     @Override
-    public int getPosition() {
-        // We want this teaser to go before the first real conversation
-        return 0;
-    }
-
-    @Override
-    public void setAdapter(AnimatedAdapter adapter) {
-        mAdapter = adapter;
-    }
-
-    @Override
     public void bindFragment(final LoaderManager loaderManager, final Bundle savedInstanceState) {
         mLoaderManager = loaderManager;
     }
 
     @Override
-    public void cleanup() {
-    }
-
-    @Override
-    public void onConversationSelected() {
-        // DO NOTHING
-    }
-
-    @Override
-    public void onCabModeEntered() {
-    }
-
-    @Override
-    public void onCabModeExited() {
-    }
-
-    @Override
-    public void onConversationListVisibilityChanged(final boolean visible) {
-        // Do nothing
-    }
-
-    @Override
-    public void saveInstanceState(final Bundle outState) {
-        // Do nothing
-    }
-
-    @Override
-    public boolean acceptsUserTaps() {
-        return true;
-    }
-
-    @Override
     public void dismiss() {
         // Do not show this tip again until we have a new count.  Note this is not quite
         // ideal behavior since after a user dismisses an "1 unsent in outbox" tip,
@@ -278,88 +162,6 @@
         // However if user checks the Sent folder in between (when there were 0 messages
         // in Outbox), the preference is cleared (see {@link onOutboxTotalCount}).
         mAccountPreferences.setLastSeenOutboxCount(mOutboxCount);
-
-        startDestroyAnimation();
-    }
-
-    @Override
-    public SwipeableView getSwipeableView() {
-        return SwipeableView.from(mSwipeableContent);
-    }
-
-    @Override
-    public boolean canChildBeDismissed() {
-        return true;
-    }
-
-    @Override
-    public float getMinAllowScrollDistance() {
-        return sScrollSlop;
-    }
-
-    private void startDestroyAnimation() {
-        final int start = getHeight();
-        final int end = 0;
-        mAnimatedHeight = start;
-        final ObjectAnimator heightAnimator =
-                ObjectAnimator.ofInt(this, "animatedHeight", start, end);
-        heightAnimator.setInterpolator(new DecelerateInterpolator(2.0f));
-        heightAnimator.setDuration(sShrinkAnimationDuration);
-        heightAnimator.addListener(new AnimatorListener() {
-            @Override
-            public void onAnimationStart(final Animator animation) {
-                // Do nothing
-            }
-
-            @Override
-            public void onAnimationRepeat(final Animator animation) {
-                // Do nothing
-            }
-
-            @Override
-            public void onAnimationEnd(final Animator animation) {
-                // We should no longer exist, so notify the adapter
-                mAdapter.notifyDataSetChanged();
-            }
-
-            @Override
-            public void onAnimationCancel(final Animator animation) {
-                // Do nothing
-            }
-        });
-        heightAnimator.start();
-    }
-
-    /**
-     * This method is used by the animator.  It is explicitly kept in proguard.flags to prevent it
-     * from being removed, inlined, or obfuscated.
-     * Edit ./vendor/unbundled/packages/apps/UnifiedGmail/proguard.flags
-     * In the future, we want to use @Keep
-     */
-    public void setAnimatedHeight(final int height) {
-        mAnimatedHeight = height;
-        requestLayout();
-    }
-
-    @Override
-    protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
-        if (Utils.getDisplayListRightEdgeEffect(mTabletDevice, mListCollapsible,
-                mAdapter.getViewMode())) {
-            mTeaserRightEdge.setVisibility(VISIBLE);
-        } else {
-            mTeaserRightEdge.setVisibility(GONE);
-        }
-
-        if (mAnimatedHeight == -1) {
-            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-        } else {
-            setMeasuredDimension(View.MeasureSpec.getSize(widthMeasureSpec), mAnimatedHeight);
-        }
-    }
-
-    @Override
-    public boolean commitLeaveBehindItem() {
-        // This view has no leave-behind
-        return false;
+        super.dismiss();
     }
 }
diff --git a/src/com/android/mail/ui/CustomViewToolbar.java b/src/com/android/mail/ui/CustomViewToolbar.java
new file mode 100644
index 0000000..6fe712a
--- /dev/null
+++ b/src/com/android/mail/ui/CustomViewToolbar.java
@@ -0,0 +1,180 @@
+/*******************************************************************************
+ *      Copyright (C) 2014 Google Inc.
+ *      Licensed to 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.mail.ui;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.content.Context;
+import android.support.v7.widget.Toolbar;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import com.android.mail.R;
+import com.android.mail.analytics.Analytics;
+import com.android.mail.providers.Account;
+import com.android.mail.providers.AccountObserver;
+import com.android.mail.utils.ViewUtils;
+
+/**
+ * Custom toolbar that supports a custom view so we can display our search icon wherever we want.
+ */
+public class CustomViewToolbar extends Toolbar implements ViewMode.ModeChangeListener,
+        TwoPaneLayout.ConversationListLayoutListener {
+    private static final long FADE_ANIMATION_DURATION_MS = 150;
+
+    private ControllableActivity mActivity;
+    private ActivityController mController;
+    private ViewMode mViewMode;
+    private AccountObserver mAccountObserver = new AccountObserver() {
+        @Override
+        public void onChanged(Account newAccount) {
+            setSearchButtonVisibility(newAccount);
+        }
+    };
+
+    protected View mCustomView;
+    protected TextView mActionBarTitle;
+    protected View mSearchButton;
+
+    public CustomViewToolbar(Context context) {
+        super(context);
+    }
+
+    public CustomViewToolbar(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public void setController(ControllableActivity activity, ActivityController controller,
+            ViewMode viewMode) {
+        mActivity = activity;
+        mController = controller;
+        mViewMode = viewMode;
+        mViewMode.addListener(this);
+
+        mAccountObserver.initialize(mActivity.getAccountController());
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        super.onFinishInflate();
+
+        mCustomView = findViewById(R.id.actionbar_custom_view);
+        mActionBarTitle = (TextView) findViewById(R.id.actionbar_title);
+        mSearchButton = findViewById(R.id.actionbar_search_button);
+
+        mSearchButton.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                // Since search is no longer a menu item, log the search "menu" event here.
+                Analytics.getInstance().sendEvent(Analytics.EVENT_CATEGORY_MENU_ITEM,
+                        "search", "action_bar/" + mViewMode.getModeString(), 0);
+                mController.startSearch();
+            }
+        });
+    }
+
+    protected void onDestroy() {
+        mAccountObserver.unregisterAndDestroy();
+    }
+
+    /**
+     * Sets the search button visibility based on the current account.
+     */
+    private void setSearchButtonVisibility() {
+        setSearchButtonVisibility(mActivity.getAccountController().getAccount());
+    }
+
+    private void setSearchButtonVisibility(Account account) {
+        if (mSearchButton != null) {
+            final boolean visible = mController.shouldShowSearchMenuItem() &&
+                    account.supportsSearch();
+            mSearchButton.setVisibility(visible ? VISIBLE : INVISIBLE);
+        }
+    }
+
+    @Override
+    public void onViewModeChanged(int newMode) {
+        setSearchButtonVisibility();
+    }
+
+    @Override
+    public void onConversationListLayout(int xEnd, boolean drawerOpen) {
+        if (drawerOpen) {
+            mSearchButton.animate()
+                    .alpha(0f)
+                    .setDuration(FADE_ANIMATION_DURATION_MS)
+                    .setListener(new AnimatorListenerAdapter() {
+                        @Override
+                        public void onAnimationEnd(Animator animation) {
+                            mSearchButton.setVisibility(INVISIBLE);
+                        }
+                    });
+        } else {
+            setSearchButtonVisibility();
+            // setListener(null) is necessary because the animator carries the previously set
+            // listener over, aka the listener for fade out.
+            if (mSearchButton.isShown()) {
+                mSearchButton.animate()
+                        .alpha(1f)
+                        .setDuration(FADE_ANIMATION_DURATION_MS)
+                        .setListener(null);
+            }
+
+            final int[] coords = new int[2];
+            mCustomView.getLocationInWindow(coords);
+            final int newWidth;
+            if (ViewUtils.isViewRtl(this)) {
+                newWidth = coords[0] + mCustomView.getWidth() - xEnd;
+            } else {
+                newWidth = xEnd - coords[0];
+            }
+
+            // Only set the width if it's different than before so we avoid draw on layout pass.
+            if (mCustomView.getWidth() != newWidth) {
+                final ViewGroup.LayoutParams params = mCustomView.getLayoutParams();
+                params.width = newWidth;
+                mCustomView.setLayoutParams(params);
+            }
+        }
+    }
+
+    // OVERRIDE DEFAULT TOOLBAR TITLE FUNCTIONS SO THEY ARE RENDERED CORRECTLY.
+    // TODO: subtitles? we currently don't have any of those, but we will need to support them.
+
+    @Override
+    public void setTitle(int resId) {
+        setTitle(getResources().getString(resId));
+    }
+
+    @Override
+    public void setTitle(CharSequence title) {
+        mActionBarTitle.setText(title);
+    }
+
+    @Override
+    public void setTitleTextAppearance(Context context, int resId) {
+        mActionBarTitle.setTextAppearance(context, resId);
+    }
+
+    @Override
+    public void setTitleTextColor(int color) {
+        mActionBarTitle.setTextColor(color);
+    }
+}
diff --git a/src/com/android/mail/ui/DividedImageCanvas.java b/src/com/android/mail/ui/DividedImageCanvas.java
deleted file mode 100644
index 274327e..0000000
--- a/src/com/android/mail/ui/DividedImageCanvas.java
+++ /dev/null
@@ -1,463 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mail.ui;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.Matrix;
-import android.graphics.Paint;
-import android.graphics.PorterDuff.Mode;
-import android.graphics.PorterDuffXfermode;
-import android.graphics.Rect;
-
-import com.android.mail.R;
-import com.android.mail.utils.Utils;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-/**
- * DividedImageCanvas creates a canvas that can display into a minimum of 1
- * and maximum of 4 images. As images are added, they
- * are laid out according to the following algorithm:
- * 1 Image: Draw the bitmap filling the entire canvas.
- * 2 Images: Draw 2 bitmaps split vertically down the middle.
- * 3 Images: Draw 3 bitmaps: the first takes up all vertical space; the 2nd and 3rd are stacked in
- *           the second vertical position.
- * 4 Images: Divide the Canvas into 4 equal quadrants and draws 1 bitmap in each.
- */
-public class DividedImageCanvas implements ImageCanvas {
-    public static final int MAX_DIVISIONS = 4;
-
-    private final Map<String, Integer> mDivisionMap = Maps
-            .newHashMapWithExpectedSize(MAX_DIVISIONS);
-    private Bitmap mDividedBitmap;
-    private Canvas mCanvas;
-    private int mWidth;
-    private int mHeight;
-
-    private final Context mContext;
-    private final InvalidateCallback mCallback;
-    private final ArrayList<Bitmap> mDivisionImages = new ArrayList<Bitmap>(MAX_DIVISIONS);
-
-    /**
-     * Ignore any request to draw final output when not yet ready. This prevents partially drawn
-     * canvases from appearing.
-     */
-    private boolean mBitmapValid = false;
-
-    private int mGeneration;
-
-    private static final Paint sPaint = new Paint();
-    private static final Paint sClearPaint = new Paint();
-    private static final Rect sSrc = new Rect();
-    private static final Rect sDest = new Rect();
-
-    private static int sDividerLineWidth = -1;
-    private static int sDividerColor;
-
-    static {
-        sClearPaint.setXfermode(new PorterDuffXfermode(Mode.CLEAR));
-    }
-
-    public DividedImageCanvas(Context context, InvalidateCallback callback) {
-        mContext = context;
-        mCallback = callback;
-        setupDividerLines();
-    }
-
-    /**
-     * Get application context for this object.
-     */
-    public Context getContext() {
-        return mContext;
-    }
-
-    @Override
-    public String toString() {
-        final StringBuilder sb = new StringBuilder("{");
-        sb.append(super.toString());
-        sb.append(" mDivisionMap=");
-        sb.append(mDivisionMap);
-        sb.append(" mDivisionImages=");
-        sb.append(mDivisionImages);
-        sb.append(" mWidth=");
-        sb.append(mWidth);
-        sb.append(" mHeight=");
-        sb.append(mHeight);
-        sb.append("}");
-        return sb.toString();
-    }
-
-    /**
-     * Set the id associated with each quadrant. The quadrants are laid out:
-     * TopLeft, TopRight, Bottom Left, Bottom Right
-     * @param keys
-     */
-    public void setDivisionIds(List<Object> keys) {
-        if (keys.size() > MAX_DIVISIONS) {
-            throw new IllegalArgumentException("too many divisionIds: " + keys);
-        }
-
-        boolean needClear = getDivisionCount() != keys.size();
-        if (!needClear) {
-            for (int i = 0; i < keys.size(); i++) {
-                String divisionId = transformKeyToDivisionId(keys.get(i));
-                // different item or different place
-                if (!mDivisionMap.containsKey(divisionId) || mDivisionMap.get(divisionId) != i) {
-                    needClear = true;
-                    break;
-                }
-            }
-        }
-
-        if (needClear) {
-            mDivisionMap.clear();
-            mDivisionImages.clear();
-            int i = 0;
-            for (Object key : keys) {
-                String divisionId = transformKeyToDivisionId(key);
-                mDivisionMap.put(divisionId, i);
-                mDivisionImages.add(null);
-                i++;
-            }
-        }
-    }
-
-    private void draw(Bitmap b, int left, int top, int right, int bottom) {
-        if (b != null) {
-            // Some times we load taller images compared to the destination rect on the canvas
-            int srcTop = 0;
-            int srcBottom = b.getHeight();
-            int destHeight = bottom - top;
-            if (b.getHeight() > bottom - top) {
-                srcTop = b.getHeight() / 2 - destHeight/2;
-                srcBottom = b.getHeight() / 2 + destHeight/2;
-            }
-
-//            todo:markwei do not scale very small bitmaps
-            // l t r b
-            sSrc.set(0, srcTop, b.getWidth(), srcBottom);
-            sDest.set(left, top, right, bottom);
-            mCanvas.drawRect(sDest, sClearPaint);
-            mCanvas.drawBitmap(b, sSrc, sDest, sPaint);
-        } else {
-            // clear
-            mCanvas.drawRect(left, top, right, bottom, sClearPaint);
-        }
-    }
-
-    /**
-     * Get the desired dimensions and scale for the bitmap to be placed in the
-     * location corresponding to id. Caller must allocate the Dimensions object.
-     * @param key
-     * @param outDim a {@link ImageCanvas.Dimensions} object to write results into
-     */
-    @Override
-    public void getDesiredDimensions(Object key, Dimensions outDim) {
-        Utils.traceBeginSection("get desired dimensions");
-        int w = 0, h = 0;
-        float scale = 0;
-        final Integer pos = mDivisionMap.get(transformKeyToDivisionId(key));
-        if (pos != null && pos >= 0) {
-            final int size = mDivisionMap.size();
-            switch (size) {
-                case 0:
-                    break;
-                case 1:
-                    w = mWidth;
-                    h = mHeight;
-                    scale = Dimensions.SCALE_ONE;
-                    break;
-                case 2:
-                    w = mWidth / 2;
-                    h = mHeight;
-                    scale = Dimensions.SCALE_HALF;
-                    break;
-                case 3:
-                    switch (pos) {
-                        case 0:
-                            w = mWidth / 2;
-                            h = mHeight;
-                            scale = Dimensions.SCALE_HALF;
-                            break;
-                        default:
-                            w = mWidth / 2;
-                            h = mHeight / 2;
-                            scale = Dimensions.SCALE_QUARTER;
-                    }
-                    break;
-                case 4:
-                    w = mWidth / 2;
-                    h = mHeight / 2;
-                    scale = Dimensions.SCALE_QUARTER;
-                    break;
-            }
-        }
-        outDim.width = w;
-        outDim.height = h;
-        outDim.scale = scale;
-        Utils.traceEndSection();
-    }
-
-    @Override
-    public void drawImage(Bitmap b, Object key) {
-        addDivisionImage(b, key);
-    }
-
-    /**
-     * Add a bitmap to this view in the quadrant matching its id.
-     * @param b Bitmap
-     * @param key Id to look for that was previously set in setDivisionIds.
-     */
-    public void addDivisionImage(Bitmap b, Object key) {
-        if (b != null) {
-            addOrClearDivisionImage(b, key);
-        }
-    }
-
-    public void clearDivisionImage(Object key) {
-        addOrClearDivisionImage(null, key);
-    }
-    private void addOrClearDivisionImage(Bitmap b, Object key) {
-        Utils.traceBeginSection("add or clear division image");
-        final Integer pos = mDivisionMap.get(transformKeyToDivisionId(key));
-        if (pos != null && pos >= 0) {
-            mDivisionImages.set(pos, b);
-            boolean complete = false;
-            final int width = mWidth;
-            final int height = mHeight;
-            // Different layouts depending on count.
-            final int size = mDivisionMap.size();
-            switch (size) {
-                case 0:
-                    // Do nothing.
-                    break;
-                case 1:
-                    // Draw the bitmap filling the entire canvas.
-                    draw(mDivisionImages.get(0), 0, 0, width, height);
-                    complete = true;
-                    break;
-                case 2:
-                    // Draw 2 bitmaps split vertically down the middle
-                    switch (pos) {
-                        case 0:
-                            draw(mDivisionImages.get(0), 0, 0, width / 2, height);
-                            break;
-                        case 1:
-                            draw(mDivisionImages.get(1), width / 2, 0, width, height);
-                            break;
-                    }
-                    complete = mDivisionImages.get(0) != null && mDivisionImages.get(1) != null
-                            || isPartialBitmapComplete();
-                    if (complete) {
-                        // Draw dividers
-                        drawVerticalDivider(width, height);
-                    }
-                    break;
-                case 3:
-                    // Draw 3 bitmaps: the first takes up all vertical
-                    // space, the 2nd and 3rd are stacked in the second vertical
-                    // position.
-                    switch (pos) {
-                        case 0:
-                            draw(mDivisionImages.get(0), 0, 0, width / 2, height);
-                            break;
-                        case 1:
-                            draw(mDivisionImages.get(1), width / 2, 0, width, height / 2);
-                            break;
-                        case 2:
-                            draw(mDivisionImages.get(2), width / 2, height / 2, width, height);
-                            break;
-                    }
-                    complete = mDivisionImages.get(0) != null && mDivisionImages.get(1) != null
-                            && mDivisionImages.get(2) != null || isPartialBitmapComplete();
-                    if (complete) {
-                        // Draw dividers
-                        drawVerticalDivider(width, height);
-                        drawHorizontalDivider(width / 2, height / 2, width, height / 2);
-                    }
-                    break;
-                default:
-                    // Draw all 4 bitmaps in a grid
-                    switch (pos) {
-                        case 0:
-                            draw(mDivisionImages.get(0), 0, 0, width / 2, height / 2);
-                            break;
-                        case 1:
-                            draw(mDivisionImages.get(1), width / 2, 0, width, height / 2);
-                            break;
-                        case 2:
-                            draw(mDivisionImages.get(2), 0, height / 2, width / 2, height);
-                            break;
-                        case 3:
-                            draw(mDivisionImages.get(3), width / 2, height / 2, width, height);
-                            break;
-                    }
-                    complete = mDivisionImages.get(0) != null && mDivisionImages.get(1) != null
-                            && mDivisionImages.get(2) != null && mDivisionImages.get(3) != null
-                            || isPartialBitmapComplete();
-                    if (complete) {
-                        // Draw dividers
-                        drawVerticalDivider(width, height);
-                        drawHorizontalDivider(0, height / 2, width, height / 2);
-                    }
-                    break;
-            }
-            // Create the new image bitmap.
-            if (complete) {
-                mBitmapValid = true;
-                mCallback.invalidate();
-            }
-        }
-        Utils.traceEndSection();
-    }
-
-    public boolean hasImageFor(Object key) {
-        final Integer pos = mDivisionMap.get(transformKeyToDivisionId(key));
-        return pos != null && mDivisionImages.get(pos) != null;
-    }
-
-    private void setupDividerLines() {
-        if (sDividerLineWidth == -1) {
-            Resources res = getContext().getResources();
-            sDividerLineWidth = res
-                    .getDimensionPixelSize(R.dimen.tile_divider_width);
-            sDividerColor = res.getColor(R.color.tile_divider_color);
-        }
-    }
-
-    private static void setupPaint() {
-        sPaint.setStrokeWidth(sDividerLineWidth);
-        sPaint.setColor(sDividerColor);
-    }
-
-    protected void drawVerticalDivider(int width, int height) {
-        int x1 = width / 2, y1 = 0, x2 = width/2, y2 = height;
-        setupPaint();
-        mCanvas.drawLine(x1, y1, x2, y2, sPaint);
-    }
-
-    protected void drawHorizontalDivider(int x1, int y1, int x2, int y2) {
-        setupPaint();
-        mCanvas.drawLine(x1, y1, x2, y2, sPaint);
-    }
-
-    protected boolean isPartialBitmapComplete() {
-        return false;
-    }
-
-    protected String transformKeyToDivisionId(Object key) {
-        return key.toString();
-    }
-
-    /**
-     * Draw the contents of the DividedImageCanvas to the supplied canvas.
-     */
-    public void draw(Canvas canvas) {
-        if (mDividedBitmap != null && mBitmapValid) {
-            canvas.drawBitmap(mDividedBitmap, 0, 0, null);
-        }
-    }
-
-    /**
-     * Draw the contents of the DividedImageCanvas to the supplied canvas.
-     */
-    public void draw(final Canvas canvas, final Matrix matrix) {
-        if (mDividedBitmap != null && mBitmapValid) {
-            canvas.drawBitmap(mDividedBitmap, matrix, null);
-        }
-    }
-
-    @Override
-    public void reset() {
-        if (mCanvas != null && mDividedBitmap != null) {
-            mBitmapValid = false;
-        }
-        mDivisionMap.clear();
-        mDivisionImages.clear();
-        mGeneration++;
-    }
-
-    @Override
-    public int getGeneration() {
-        return mGeneration;
-    }
-
-    /**
-     * Set the width and height of the canvas.
-     * @param width
-     * @param height
-     */
-    public void setDimensions(int width, int height) {
-        Utils.traceBeginSection("set dimensions");
-        if (mWidth == width && mHeight == height) {
-            Utils.traceEndSection();
-            return;
-        }
-
-        mWidth = width;
-        mHeight = height;
-
-        mDividedBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
-        mCanvas = new Canvas(mDividedBitmap);
-
-        for (int i = 0; i < getDivisionCount(); i++) {
-            mDivisionImages.set(i, null);
-        }
-        mBitmapValid = false;
-        Utils.traceEndSection();
-    }
-
-    /**
-     * Get the resulting canvas width.
-     */
-    public int getWidth() {
-        return mWidth;
-    }
-
-    /**
-     * Get the resulting canvas height.
-     */
-    public int getHeight() {
-        return mHeight;
-    }
-
-    /**
-     * The class that will provided the canvas to which the DividedImageCanvas
-     * should render its contents must implement this interface.
-     */
-    public interface InvalidateCallback {
-        public void invalidate();
-    }
-
-    public int getDivisionCount() {
-        return mDivisionMap.size();
-    }
-
-    /**
-     * Get the division ids currently associated with this DivisionImageCanvas.
-     */
-    public ArrayList<String> getDivisionIds() {
-        return Lists.newArrayList(mDivisionMap.keySet());
-    }
-}
diff --git a/src/com/android/mail/ui/FolderChangeListener.java b/src/com/android/mail/ui/FolderChangeListener.java
deleted file mode 100644
index 0968fa7..0000000
--- a/src/com/android/mail/ui/FolderChangeListener.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- *      Copyright (C) 2012 Google Inc.
- *      Licensed to 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.mail.ui;
-
-import com.android.mail.providers.Folder;
-
-/**
- * The callback interface for when a list item has been selected.
- */
-public interface FolderChangeListener {
-    /**
-     * Handles selecting a folder from within the {@link FolderListFragment}.
-     *
-     * @param folder the selected folder
-     * @param force <code>true</code> to force a folder change, <code>false</code> to disallow
-     *          changing to the current folder
-     */
-    void onFolderChanged(Folder folder, boolean force);
-}
diff --git a/src/com/android/mail/ui/FolderDisplayer.java b/src/com/android/mail/ui/FolderDisplayer.java
index 39aba6b..0e4139e 100644
--- a/src/com/android/mail/ui/FolderDisplayer.java
+++ b/src/com/android/mail/ui/FolderDisplayer.java
@@ -18,6 +18,13 @@
 package com.android.mail.ui;
 
 import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Canvas;
+import android.graphics.LinearGradient;
+import android.graphics.Paint;
+import android.graphics.RectF;
+import android.graphics.Shader;
+import android.support.v4.text.BidiFormatter;
 
 import com.android.mail.R;
 import com.android.mail.providers.Conversation;
@@ -25,27 +32,50 @@
 import com.android.mail.providers.UIProvider.FolderType;
 import com.android.mail.utils.FolderUri;
 import com.android.mail.utils.LogTag;
+import com.android.mail.utils.Utils;
 import com.google.common.collect.Sets;
 
 import java.util.NavigableSet;
+import java.util.Set;
 
 /**
  * Used to generate folder display information given a raw folders string.
  * (The raw folders string can be obtained from {@link Conversation#getRawFolders()}.)
  */
-public class FolderDisplayer {
+public abstract class FolderDisplayer {
     public static final String LOG_TAG = LogTag.getLogTag();
     protected Context mContext;
     protected final NavigableSet<Folder> mFoldersSortedSet = Sets.newTreeSet();
+    protected final FolderDrawableResources mFolderDrawableResources =
+            new FolderDrawableResources();
 
-    protected final int mDefaultBgColor;
-    protected final int mDefaultFgColor;
+    public static class FolderDrawableResources {
+        public int defaultFgColor;
+        public int defaultBgColor;
+        public int folderRoundedCornerRadius;
+        public int overflowGradientPadding;
+        public int folderHorizontalPadding;
+        public int folderInBetweenPadding;
+        public int folderFontSize;
+        public int folderVerticalOffset;
+    }
 
     public FolderDisplayer(Context context) {
         mContext = context;
+        initializeDrawableResources();
+    }
 
-        mDefaultFgColor = context.getResources().getColor(R.color.default_folder_foreground_color);
-        mDefaultBgColor = context.getResources().getColor(R.color.default_folder_background_color);
+    protected void initializeDrawableResources() {
+        // Set default values used across all folder chips
+        final Resources res = mContext.getResources();
+        mFolderDrawableResources.defaultFgColor =
+                res.getColor(R.color.default_folder_foreground_color);
+        mFolderDrawableResources.defaultBgColor =
+                res.getColor(R.color.default_folder_background_color);
+        mFolderDrawableResources.folderRoundedCornerRadius =
+                res.getDimensionPixelOffset(R.dimen.folder_rounded_corner_radius);
+        mFolderDrawableResources.folderInBetweenPadding =
+                res.getDimensionPixelOffset(R.dimen.folder_start_padding);
     }
 
     /**
@@ -77,4 +107,159 @@
     public void reset() {
         mFoldersSortedSet.clear();
     }
+
+    /**
+     * Helper function to calculate exactly how much space the displayed folders should take.
+     * @param folders the set of folders to display.
+     * @param maxCellWidth this signifies the absolute max for each folder cell, no exceptions.
+     * @param maxLayoutWidth the view's layout width, aka how much space we have.
+     * @param foldersInBetweenPadding the padding between folder chips.
+     * @param foldersHorizontalPadding the padding between the edge of the chip and the text.
+     * @param maxFolderCount the maximum number of folder chips to display.
+     * @param paint work paint.
+     * @return an array of integers that signifies the length of each folder chip.
+     */
+    public static int[] measureFolderDimen(Set<Folder> folders, int maxCellWidth,
+            int maxLayoutWidth, int foldersInBetweenPadding, int foldersHorizontalPadding,
+            int maxFolderCount, Paint paint) {
+
+        final int numDisplayedFolders = Math.min(maxFolderCount, folders.size());
+        if (numDisplayedFolders == 0) {
+            return new int[0];
+        }
+
+        // This variable is calculated based on the number of folders we are displaying
+        final int maxAllowedCellSize = Math.min(maxCellWidth, (maxLayoutWidth -
+                (numDisplayedFolders - 1) * foldersInBetweenPadding) / numDisplayedFolders);
+        final int[] measurements = new int[numDisplayedFolders];
+
+        int count = 0;
+        int missingWidth = 0;
+        int extraWidth = 0;
+        for (Folder f : folders) {
+            if (count > numDisplayedFolders - 1) {
+                break;
+            }
+
+            final String folderString = f.name;
+            final int neededWidth = (int) paint.measureText(folderString) +
+                    2 * foldersHorizontalPadding;
+
+            if (neededWidth > maxAllowedCellSize) {
+                // What we can take from others is the minimum of the width we need to borrow
+                // and the width we are allowed to borrow.
+                final int borrowedWidth = Math.min(neededWidth - maxAllowedCellSize,
+                        maxCellWidth - maxAllowedCellSize);
+                final int extraWidthLeftover = extraWidth - borrowedWidth;
+                if (extraWidthLeftover >= 0) {
+                    measurements[count] = Math.min(neededWidth, maxCellWidth);
+                    extraWidth = extraWidthLeftover;
+                } else {
+                    measurements[count] = maxAllowedCellSize + extraWidth;
+                    extraWidth = 0;
+                }
+                missingWidth = -extraWidthLeftover;
+            } else {
+                extraWidth = maxAllowedCellSize - neededWidth;
+                measurements[count] = neededWidth;
+                if (missingWidth > 0) {
+                    if (extraWidth >= missingWidth) {
+                        measurements[count - 1] += missingWidth;
+                        extraWidth -= missingWidth;
+                    } else {
+                        measurements[count - 1] += extraWidth;
+                        extraWidth = 0;
+                    }
+                }
+                missingWidth = 0;
+            }
+
+            count++;
+        }
+
+        return measurements;
+    }
+
+    public static void drawFolder(Canvas canvas, float x, float y, int width, int height,
+            Folder f, FolderDisplayer.FolderDrawableResources res, BidiFormatter formatter,
+            Paint paint) {
+        drawFolder(canvas, x, y, width, height, f.name,
+                f.getForegroundColor(res.defaultFgColor), f.getBackgroundColor(res.defaultBgColor),
+                res, formatter, paint);
+    }
+
+    public static void drawFolder(Canvas canvas, float x, float y, int width, int height,
+            String name, int fgColor, int bgColor, FolderDisplayer.FolderDrawableResources res,
+            BidiFormatter formatter, Paint paint) {
+        canvas.save();
+        canvas.translate(x, y + res.folderVerticalOffset);
+
+        // Draw the box.
+        paint.setColor(bgColor);
+        paint.setStyle(Paint.Style.FILL);
+        final RectF rect = new RectF(0, 0, width, height);
+        canvas.drawRoundRect(rect, res.folderRoundedCornerRadius, res.folderRoundedCornerRadius,
+                paint);
+
+        // Draw the text based on the language locale and layout direction.
+        paint.setColor(fgColor);
+        paint.setStyle(Paint.Style.FILL);
+
+        // Compute the text/gradient indices
+        final int textLength = (int) paint.measureText(name);
+        final int gradientX0;
+        final int gradientX1;
+        final int textX;
+
+/***************************************************************************************************
+ * width               - the actual folder chip rectangle.                                         *
+ * textLength          - the length of the folder's full name (can be longer than                  *
+ *                         the actual chip, which is what overflow gradient is for).               *
+ * innerPadding        - the padding between the text and the chip edge.                           *
+ * overflowPadding     - the padding between start of overflow and the chip edge.                  *
+ *                                                                                                 *
+ *                                                                                                 *
+ * text is in a RTL language                                                                       *
+ *                                                                                                 *
+ *                   index-0                                                                       *
+ *                      |<---------------------------- width ---------------------------->|        *
+ *        |<-------------------------textLength------------------>|                       |        *
+ *        |             |<----- overflowPadding ----->|                                   |        *
+ *        |             |<- innerPadding ->|<-------->|<--------->|<- horizontalPadding ->|        *
+ *       textX                            gX1        gX0                                           *
+ *                                                                                                 *
+ *                                                                                                 *
+ * text is in a LTR language.                                                                      *
+ *                                                                                                 *
+ *     index-0                                                                                     *
+ *        |<------------------------------ width ------------------------------->|                 *
+ *        |                       |<-------------------------textLength-------------------->|      *
+ *        |                                   |<-------- overflowPadding ------->|                 *
+ *        |<- horizontalPadding ->|<--------->|<-------->|<- horizontalPadding ->|                 *
+ *                              textX        gX0        gX1                                        *
+ *                                                                                                 *
+ **************************************************************************************************/
+        if (formatter.isRtl(name)) {
+            gradientX0 = res.overflowGradientPadding;
+            gradientX1 = res.folderHorizontalPadding;
+            textX = width - res.folderHorizontalPadding - textLength;
+        } else {
+            gradientX0 = width - res.overflowGradientPadding;
+            gradientX1 = width - res.folderHorizontalPadding;
+            textX = res.folderHorizontalPadding;
+        }
+
+        // Draw the text and the possible overflow gradient
+        // Overflow happens when the text is longer than the chip width minus side paddings.
+        if (textLength > width - 2 * res.folderHorizontalPadding) {
+            final Shader shader = new LinearGradient(gradientX0, 0, gradientX1, 0, fgColor,
+                    Utils.getTransparentColor(fgColor), Shader.TileMode.CLAMP);
+            paint.setShader(shader);
+        }
+        final int textY = height / 2 - (int) (paint.descent() + paint.ascent()) / 2;
+        canvas.drawText(name, textX, textY, paint);
+        paint.setShader(null);
+
+        canvas.restore();
+    }
 }
diff --git a/src/com/android/mail/ui/FolderItemView.java b/src/com/android/mail/ui/FolderItemView.java
index 9f403ec..81da2d7 100644
--- a/src/com/android/mail/ui/FolderItemView.java
+++ b/src/com/android/mail/ui/FolderItemView.java
@@ -21,14 +21,14 @@
 import android.graphics.drawable.shapes.RoundRectShape;
 import android.graphics.drawable.shapes.Shape;
 import android.util.AttributeSet;
-import android.view.DragEvent;
 import android.view.View;
 import android.widget.ImageView;
-import android.widget.RelativeLayout;
+import android.widget.LinearLayout;
 import android.widget.TextView;
 
 import com.android.mail.R;
 import com.android.mail.providers.Folder;
+import com.android.mail.utils.FolderUri;
 import com.android.mail.utils.LogTag;
 import com.android.mail.utils.LogUtils;
 import com.android.mail.utils.Utils;
@@ -36,38 +36,15 @@
 /**
  * The view for each folder in the folder list.
  */
-public class FolderItemView extends RelativeLayout {
+public class FolderItemView extends LinearLayout {
     private final String LOG_TAG = LogTag.getLogTag();
 
-    private static final int[] STATE_DRAG_MODE = {R.attr.state_drag_mode};
-
     private static float[] sUnseenCornerRadii;
 
     private Folder mFolder;
     private TextView mFolderTextView;
     private TextView mUnreadCountTextView;
     private TextView mUnseenCountTextView;
-    private DropHandler mDropHandler;
-    private ImageView mFolderParentIcon;
-
-    private boolean mIsDragMode;
-
-    /**
-     * A delegate for a handler to handle a drop of an item.
-     */
-    public interface DropHandler {
-        /**
-         * Return whether or not the drag event is supported by the drop handler. The
-         *     {@code FolderItemView} will present appropriate visual affordances if the drag is
-         *     supported.
-         */
-        boolean supportsDrag(DragEvent event, Folder folder);
-
-        /**
-         * Handles a drop event, applying the appropriate logic.
-         */
-        void handleDrop(DragEvent event, Folder folder);
-    }
 
     public FolderItemView(Context context) {
         super(context);
@@ -85,7 +62,6 @@
         super(context, attrs, defStyle);
 
         loadResources(context);
-        mIsDragMode = false;
     }
 
     private void loadResources(Context context) {
@@ -108,7 +84,6 @@
         mFolderTextView = (TextView)findViewById(R.id.name);
         mUnreadCountTextView = (TextView)findViewById(R.id.unread);
         mUnseenCountTextView = (TextView)findViewById(R.id.unseen);
-        mFolderParentIcon = (ImageView) findViewById(R.id.folder_parent_icon);
     }
 
     /**
@@ -132,13 +107,19 @@
                 && a.unreadCount == b.unreadCount));
     }
 
-    public void bind(final Folder folder, final DropHandler dropHandler) {
+    public void bind(final Folder folder, final FolderUri parentUri) {
         mFolder = folder;
-        mDropHandler = dropHandler;
 
         mFolderTextView.setText(folder.name);
 
-        mFolderParentIcon.setVisibility(mFolder.hasChildren ? View.VISIBLE : View.GONE);
+        if (parentUri != null) {
+            final boolean isParent = folder.folderUri.equals(parentUri);
+
+            // If child folder, make spacer view visible, otherwise hide it away
+            findViewById(R.id.nested_folder_space).setVisibility(
+                    isParent ? View.GONE : View.VISIBLE);
+        }
+
         if (mFolder.isInbox() && mFolder.unseenCount > 0) {
             mUnreadCountTextView.setVisibility(View.GONE);
             setUnseenCount(mFolder.getBackgroundColor(Color.BLACK), mFolder.unseenCount);
@@ -190,60 +171,4 @@
         setUnreadCount(count);
     }
 
-    private boolean isDroppableTarget(DragEvent event) {
-        return (mDropHandler != null && mDropHandler.supportsDrag(event, mFolder));
-    }
-
-    /**
-     * Handles the drag event.
-     *
-     * @param event the drag event to be handled
-     */
-    @Override
-    public boolean onDragEvent(DragEvent event) {
-        switch (event.getAction()) {
-            case DragEvent.ACTION_DRAG_STARTED:
-                // Set drag mode state to true now that we have entered drag mode.
-                // This change updates the states of icons and text colors.
-                // Additional drawable states are updated by the framework
-                // based on the DragEvent.
-                setDragMode(true);
-            case DragEvent.ACTION_DRAG_ENTERED:
-            case DragEvent.ACTION_DRAG_EXITED:
-                // All of these states return based on isDroppableTarget's return value.
-                // If modifying, watch the switch's drop-through effects.
-                return isDroppableTarget(event);
-            case DragEvent.ACTION_DRAG_ENDED:
-                // Set drag mode to false since we're leaving drag mode.
-                // Updates all the states of icons and text colors back to non-drag values.
-                setDragMode(false);
-                return true;
-
-            case DragEvent.ACTION_DRAG_LOCATION:
-                return true;
-
-            case DragEvent.ACTION_DROP:
-                if (mDropHandler == null) {
-                    return false;
-                }
-
-                mDropHandler.handleDrop(event, mFolder);
-                return true;
-        }
-        return false;
-    }
-
-    @Override
-    protected int[] onCreateDrawableState(int extraSpace) {
-        final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
-        if (mIsDragMode) {
-            mergeDrawableStates(drawableState, STATE_DRAG_MODE);
-        }
-        return drawableState;
-    }
-
-    private void setDragMode(boolean isDragMode) {
-        mIsDragMode = isDragMode;
-        refreshDrawableState();
-    }
 }
diff --git a/src/com/android/mail/ui/FolderListFragment.java b/src/com/android/mail/ui/FolderListFragment.java
index 52cbe87..3ac54f0 100644
--- a/src/com/android/mail/ui/FolderListFragment.java
+++ b/src/com/android/mail/ui/FolderListFragment.java
@@ -17,6 +17,9 @@
 
 package com.android.mail.ui;
 
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.ObjectAnimator;
 import android.app.Activity;
 import android.app.ListFragment;
 import android.app.LoaderManager;
@@ -24,7 +27,9 @@
 import android.database.DataSetObserver;
 import android.net.Uri;
 import android.os.Bundle;
+import android.support.annotation.NonNull;
 import android.support.v4.widget.DrawerLayout;
+import android.text.TextUtils;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -33,17 +38,18 @@
 import android.widget.ImageView;
 import android.widget.ListAdapter;
 import android.widget.ListView;
-import android.widget.TextView;
 
 import com.android.bitmap.BitmapCache;
 import com.android.bitmap.UnrefedBitmapCache;
 import com.android.mail.R;
-import com.android.mail.adapter.DrawerItem;
 import com.android.mail.analytics.Analytics;
+import com.android.mail.bitmap.AccountAvatarDrawable;
 import com.android.mail.bitmap.ContactResolver;
 import com.android.mail.browse.MergedAdapter;
 import com.android.mail.content.ObjectCursor;
 import com.android.mail.content.ObjectCursorLoader;
+import com.android.mail.drawer.DrawerItem;
+import com.android.mail.drawer.FooterItem;
 import com.android.mail.providers.Account;
 import com.android.mail.providers.AccountObserver;
 import com.android.mail.providers.AllAccountObserver;
@@ -98,6 +104,9 @@
         LoaderManager.LoaderCallbacks<ObjectCursor<Folder>>,
         FolderWatcher.UnreadCountChangedListener {
     private static final String LOG_TAG = LogTag.getLogTag();
+    // Duration to fade alpha from 0 to 1 and vice versa.
+    private static final long DRAWER_FADE_VELOCITY_MS_PER_ALPHA = TwoPaneLayout.SLIDE_DURATION_MS;
+
     /** The parent activity */
     protected ControllableActivity mActivity;
     /** The underlying list view */
@@ -183,7 +192,7 @@
      * {@link DrawerItem#FOLDER_RECENT} or {@link DrawerItem#FOLDER_OTHER}.
      * Set as {@link DrawerItem#UNSET} to begin with, as there is nothing selected yet.
      */
-    private int mSelectedDrawerItemType = DrawerItem.UNSET;
+    private int mSelectedDrawerItemCategory = DrawerItem.UNSET;
 
     /** The FolderType of the selected folder {@link FolderType} */
     private int mSelectedFolderType = FolderType.INBOX;
@@ -206,7 +215,16 @@
 
     private boolean mMiniDrawerEnabled;
     private boolean mIsMinimized;
-    private MiniDrawerView mMiniDrawerView;
+    protected MiniDrawerView mMiniDrawerView;
+    private MiniDrawerAccountsAdapter mMiniDrawerAccountsAdapter;
+    // use the same dimen as AccountItemView to participate in recycling
+    // TODO: but Material account switcher doesn't recycle...
+    private int mMiniDrawerAvatarDecodeSize;
+
+    private AnimatorListenerAdapter mMiniDrawerFadeOutListener;
+    private AnimatorListenerAdapter mListViewFadeOutListener;
+    private AnimatorListenerAdapter mMiniDrawerFadeInListener;
+    private AnimatorListenerAdapter mListViewFadeInListener;
 
     /**
      * Constructor needs to be public to handle orientation changes and activity lifecycle events.
@@ -295,6 +313,9 @@
         }
         mActivity = (ControllableActivity) activity;
 
+        mMiniDrawerAvatarDecodeSize =
+                getResources().getDimensionPixelSize(R.dimen.account_avatar_dimension);
+
         final int avatarSize = getActivity().getResources().getDimensionPixelSize(
                 R.dimen.account_avatar_dimension);
 
@@ -305,12 +326,13 @@
         mContactResolver = new ContactResolver(getActivity().getContentResolver(),
                 mImagesCache);
 
-        mMiniDrawerView.setController(this);
-        if (!mMiniDrawerEnabled) {
-            mMiniDrawerView.setVisibility(View.GONE);
-        } else {
+        if (mMiniDrawerEnabled) {
+            setupMiniDrawerAccountsAdapter();
+            mMiniDrawerView.setController(this);
             // set up initial state
             setMinimized(isMinimized());
+        } else {
+            mMiniDrawerView.setVisibility(View.GONE);
         }
 
         final FolderController controller = mActivity.getFolderController();
@@ -374,9 +396,6 @@
                     }
                     mFolderWatcher.updateAccountList(getAllAccounts());
                     rebuildAccountList();
-                    if (mMiniDrawerEnabled) {
-                        mMiniDrawerView.refresh();
-                    }
                 }
             };
             mAllAccountsObserver.initialize(accountController);
@@ -399,7 +418,7 @@
 
         mListView.setChoiceMode(getListViewChoiceMode());
 
-        mMergedAdapter = new MergedAdapter<ListAdapter>();
+        mMergedAdapter = new MergedAdapter<>();
         if (mAccountsAdapter != null) {
             mMergedAdapter.setAdapters(mAccountsAdapter, mFolderAdapter, mFooterAdapter);
         } else {
@@ -451,14 +470,14 @@
         mListView = (ListView) rootView.findViewById(android.R.id.list);
         mListView.setEmptyView(null);
         mListView.setDivider(null);
-        addListHeader(inflater, mListView);
+        addListHeader(inflater, rootView, mListView);
         if (savedState != null && savedState.containsKey(BUNDLE_LIST_STATE)) {
             mListView.onRestoreInstanceState(savedState.getParcelable(BUNDLE_LIST_STATE));
         }
         if (savedState != null && savedState.containsKey(BUNDLE_SELECTED_FOLDER)) {
             mSelectedFolderUri =
                     new FolderUri(Uri.parse(savedState.getString(BUNDLE_SELECTED_FOLDER)));
-            mSelectedDrawerItemType = savedState.getInt(BUNDLE_SELECTED_ITEM_TYPE);
+            mSelectedDrawerItemCategory = savedState.getInt(BUNDLE_SELECTED_ITEM_TYPE);
             mSelectedFolderType = savedState.getInt(BUNDLE_SELECTED_TYPE);
         } else if (mParentFolder != null) {
             mSelectedFolderUri = mParentFolder.folderUri;
@@ -472,10 +491,16 @@
 
         mMiniDrawerView = (MiniDrawerView) rootView.findViewById(R.id.mini_drawer);
 
+        // Create default animator listeners
+        mMiniDrawerFadeOutListener = new FadeAnimatorListener(mMiniDrawerView, true /* fadeOut */);
+        mListViewFadeOutListener = new FadeAnimatorListener(mListView, true /* fadeOut */);
+        mMiniDrawerFadeInListener = new FadeAnimatorListener(mMiniDrawerView, false /* fadeOut */);
+        mListViewFadeInListener = new FadeAnimatorListener(mListView, false /* fadeOut */);
+
         return rootView;
     }
 
-    protected void addListHeader(LayoutInflater inflater, ListView list) {
+    protected void addListHeader(LayoutInflater inflater, View rootView, ListView list) {
         // Default impl does nothing
     }
 
@@ -503,7 +528,7 @@
         if (mSelectedFolderUri != null) {
             outState.putString(BUNDLE_SELECTED_FOLDER, mSelectedFolderUri.toString());
         }
-        outState.putInt(BUNDLE_SELECTED_ITEM_TYPE, mSelectedDrawerItemType);
+        outState.putInt(BUNDLE_SELECTED_ITEM_TYPE, mSelectedDrawerItemCategory);
         outState.putInt(BUNDLE_SELECTED_TYPE, mSelectedFolderType);
         outState.putBoolean(BUNDLE_INBOX_PRESENT, mInboxPresent);
     }
@@ -562,7 +587,7 @@
 
     protected void changeAccount(final Account account) {
         // Switching accounts takes you to the default inbox for that account.
-        mSelectedDrawerItemType = DrawerItem.FOLDER_INBOX;
+        mSelectedDrawerItemCategory = DrawerItem.FOLDER_INBOX;
         mSelectedFolderType = FolderType.INBOX;
         mNextAccount = account;
         mAccountController.closeDrawer(true, mNextAccount, getDefaultInbox(mNextAccount));
@@ -578,12 +603,12 @@
         final Object item = getListView().getAdapter().getItem(position);
         LogUtils.d(LOG_TAG, "viewFolderOrChangeAccount(%d): %s", position, item);
         final Folder folder;
-        int folderType = DrawerItem.UNSET;
+        @DrawerItem.DrawerItemCategory int itemCategory = DrawerItem.UNSET;
 
         if (item instanceof DrawerItem) {
             final DrawerItem drawerItem = (DrawerItem) item;
-            // Could be a folder or account.
-            final int itemType = drawerItem.mType;
+            // Could be a folder or account or footer
+            final @DrawerItem.DrawerItemType int itemType = drawerItem.getType();
             if (itemType == DrawerItem.VIEW_ACCOUNT) {
                 // Account, so switch.
                 folder = null;
@@ -591,10 +616,14 @@
             } else if (itemType == DrawerItem.VIEW_FOLDER) {
                 // Folder type, so change folders only.
                 folder = drawerItem.mFolder;
-                mSelectedDrawerItemType = folderType = drawerItem.mFolderType;
+                mSelectedDrawerItemCategory = itemCategory = drawerItem.mItemCategory;
                 mSelectedFolderType = folder.type;
                 LogUtils.d(LOG_TAG, "FLF.viewFolderOrChangeAccount folder=%s, type=%d",
-                        folder, mSelectedDrawerItemType);
+                        folder, mSelectedDrawerItemCategory);
+            } else if (itemType == DrawerItem.VIEW_FOOTER_HELP ||
+                    itemType == DrawerItem.VIEW_FOOTER_SETTINGS) {
+                folder = null;
+                drawerItem.onClick(null /* unused */);
             } else {
                 // Do nothing.
                 LogUtils.d(LOG_TAG, "FolderListFragment: viewFolderOrChangeAccount():"
@@ -603,16 +632,13 @@
             }
         } else if (item instanceof Folder) {
             folder = (Folder) item;
-        } else if (item instanceof FooterItem) {
-            folder = null;
-            ((FooterItem) item).onClick(null /* unused */);
         } else {
             // Don't know how we got here.
             LogUtils.wtf(LOG_TAG, "viewFolderOrChangeAccount(): invalid item");
             folder = null;
         }
         if (folder != null) {
-            final String label = (folderType == DrawerItem.FOLDER_RECENT) ? "recent" : "normal";
+            final String label = (itemCategory == DrawerItem.FOLDER_RECENT) ? "recent" : "normal";
             onFolderSelected(folder, label);
         }
     }
@@ -670,7 +696,7 @@
             LogUtils.wtf(LOG_TAG, "FLF.onCreateLoader() with weird type");
             return null;
         }
-        return new ObjectCursorLoader<Folder>(mActivity.getActivityContext(), folderListUri,
+        return new ObjectCursorLoader<>(mActivity.getActivityContext(), folderListUri,
                 UIProvider.FOLDERS_PROJECTION, Folder.FACTORY);
     }
 
@@ -746,14 +772,76 @@
 
         if (isMinimized()) {
             mMiniDrawerView.setVisibility(View.VISIBLE);
+            mMiniDrawerView.setAlpha(1f);
             mListView.setVisibility(View.INVISIBLE);
+            mListView.setAlpha(0f);
         } else {
             mMiniDrawerView.setVisibility(View.INVISIBLE);
+            mMiniDrawerView.setAlpha(0f);
+            mListView.setVisibility(View.VISIBLE);
+            mListView.setAlpha(1f);
+        }
+    }
+
+    public void animateMinimized(boolean minimized) {
+        if (!mMiniDrawerEnabled) {
+            return;
+        }
+
+        mIsMinimized = minimized;
+
+        Utils.enableHardwareLayer(mMiniDrawerView);
+        Utils.enableHardwareLayer(mListView);
+        if (mIsMinimized) {
+            // From the current state (either maximized or partially dragged) to minimized.
+            final float startAlpha = mListView.getAlpha();
+            final long duration = (long) (startAlpha * DRAWER_FADE_VELOCITY_MS_PER_ALPHA);
+            mMiniDrawerView.setVisibility(View.VISIBLE);
+
+            // Animate the mini-drawer to fade in.
+            mMiniDrawerView.animate()
+                    .alpha(1f)
+                    .setDuration(duration)
+                    .setListener(mMiniDrawerFadeInListener);
+            // Animate the list view to fade out.
+            mListView.animate()
+                    .alpha(0f)
+                    .setDuration(duration)
+                    .setListener(mListViewFadeOutListener);
+        } else {
+            // From the current state (either minimized or partially dragged) to maximized.
+            final float startAlpha = mMiniDrawerView.getAlpha();
+            final long duration = (long) (startAlpha * DRAWER_FADE_VELOCITY_MS_PER_ALPHA);
             mListView.setVisibility(View.VISIBLE);
             mListView.requestFocus();
+
+            // Animate the mini-drawer to fade out.
+            mMiniDrawerView.animate()
+                    .alpha(0f)
+                    .setDuration(duration)
+                    .setListener(mMiniDrawerFadeOutListener);
+            // Animate the list view to fade in.
+            mListView.animate()
+                    .alpha(1f)
+                    .setDuration(duration)
+                    .setListener(mListViewFadeInListener);
         }
     }
 
+    public void onDrawerDragStarted() {
+        Utils.enableHardwareLayer(mMiniDrawerView);
+        Utils.enableHardwareLayer(mListView);
+        // The drawer drag will always end with animating the drawers to their final states, so
+        // the animation will remove the hardware layer upon completion.
+    }
+
+    public void onDrawerDrag(float percent) {
+        mMiniDrawerView.setAlpha(1f - percent);
+        mListView.setAlpha(percent);
+        mMiniDrawerView.setVisibility(View.VISIBLE);
+        mListView.setVisibility(View.VISIBLE);
+    }
+
     /**
      * Interface for all cursor adapters that allow setting a cursor and being destroyed.
      */
@@ -790,7 +878,7 @@
          * {@link FolderListFragment#mIsDivided} for more information */
         private final boolean mIsDivided;
         /** All the items */
-        private List<DrawerItem> mItemList = new ArrayList<DrawerItem>();
+        private List<DrawerItem> mItemList = new ArrayList<>();
         /** Cursor into the folder list. This might be null. */
         private ObjectCursor<Folder> mCursor = null;
         /** Cursor into the all folder list. This might be null. */
@@ -817,9 +905,9 @@
         public View getView(int position, View convertView, ViewGroup parent) {
             final DrawerItem item = (DrawerItem) getItem(position);
             final View view = item.getView(convertView, parent);
-            final int type = item.mType;
+            final @DrawerItem.DrawerItemType int type = item.getType();
             final boolean isSelected =
-                    item.isHighlighted(mSelectedFolderUri, mSelectedDrawerItemType);
+                    item.isHighlighted(mSelectedFolderUri, mSelectedDrawerItemCategory);
             if (type == DrawerItem.VIEW_FOLDER) {
                 mListView.setItemChecked((mAccountsAdapter != null ?
                         mAccountsAdapter.getCount() : 0) +
@@ -840,12 +928,12 @@
         @Override
         public int getViewTypeCount() {
             // Accounts, headers, folders (all parts of drawer view types)
-            return DrawerItem.getViewTypes();
+            return DrawerItem.getViewTypeCount();
         }
 
         @Override
         public int getItemViewType(int position) {
-            return ((DrawerItem) getItem(position)).mType;
+            return ((DrawerItem) getItem(position)).getType();
         }
 
         @Override
@@ -871,7 +959,7 @@
          * @return a valid list of folders, which are all recent folders.
          */
         private List<Folder> getRecentFolders(RecentFolderList recentList) {
-            final List<Folder> folderList = new ArrayList<Folder>();
+            final List<Folder> folderList = new ArrayList<>();
             if (recentList == null) {
                 return folderList;
             }
@@ -909,7 +997,7 @@
          * This method modifies all the three lists on every single invocation.
          */
         private List<DrawerItem> recalculateListFolders() {
-            final List<DrawerItem> itemList = new ArrayList<DrawerItem>();
+            final List<DrawerItem> itemList = new ArrayList<>();
             // If we are waiting for folder initialization, we don't have any kinds of folders,
             // just the "Waiting for initialization" item. Note, this should only be done
             // when we're waiting for account initialization or initial sync.
@@ -919,22 +1007,43 @@
                 }
                 return itemList;
             }
-
-            if (!mIsDivided) {
+            if (mIsDivided) {
+                //Choose an adapter for a divided list with sections
+                return recalculateDividedListFolders(itemList);
+            } else {
                 // Adapter for a flat list. Everything is a FOLDER_OTHER, and there are no headers.
-                do {
-                    final Folder f = mCursor.getModel();
-                    if (!isFolderTypeExcluded(f)) {
-                        itemList.add(DrawerItem.ofFolder(mActivity, f, DrawerItem.FOLDER_OTHER));
-                    }
-                } while (mCursor.moveToNext());
-
-                return itemList;
+                return recalculateFlatListFolders(itemList);
             }
+        }
 
-            // Otherwise, this is an adapter for a divided list.
-            final List<DrawerItem> allFoldersList = new ArrayList<DrawerItem>();
-            final List<DrawerItem> inboxFolders = new ArrayList<DrawerItem>();
+        // Recalculate folder list intended to be flat (no hearders or sections shown).
+        // This is commonly used for the widget or other simple folder selections
+        private List<DrawerItem> recalculateFlatListFolders(List<DrawerItem> itemList) {
+            final List<DrawerItem> inboxFolders = new ArrayList<>();
+            final List<DrawerItem> allFoldersList = new ArrayList<>();
+            do {
+                final Folder f = mCursor.getModel();
+                if (!isFolderTypeExcluded(f)) {
+                    // Prioritize inboxes
+                    if (f.isInbox()) {
+                        inboxFolders.add(DrawerItem.ofFolder(
+                                mActivity, f, DrawerItem.FOLDER_OTHER));
+                    } else {
+                        allFoldersList.add(
+                                DrawerItem.ofFolder(mActivity, f, DrawerItem.FOLDER_OTHER));
+                    }
+                }
+            } while (mCursor.moveToNext());
+            itemList.addAll(inboxFolders);
+            itemList.addAll(allFoldersList);
+            return itemList;
+        }
+
+        // Recalculate folder list divided by sections (inboxes, recents, all, etc...)
+        // This is primarily used by the drawer
+        private List<DrawerItem> recalculateDividedListFolders(List<DrawerItem> itemList) {
+            final List<DrawerItem> allFoldersList = new ArrayList<>();
+            final List<DrawerItem> inboxFolders = new ArrayList<>();
             do {
                 final Folder f = mCursor.getModel();
                 if (!isFolderTypeExcluded(f)) {
@@ -1100,11 +1209,9 @@
         private static final int CHILD = 1;
         private final FolderUri mParentUri;
         private final Folder mParent;
-        private final FolderItemView.DropHandler mDropHandler;
 
         public HierarchicalFolderListAdapter(ObjectCursor<Folder> c, Folder parentFolder) {
             super(mActivity.getActivityContext(), R.layout.folder_item);
-            mDropHandler = mActivity;
             mParent = parentFolder;
             mParentUri = parentFolder.folderUri;
             setCursor(c);
@@ -1126,15 +1233,15 @@
         public View getView(int position, View convertView, ViewGroup parent) {
             final FolderItemView folderItemView;
             final Folder folder = getItem(position);
-            boolean isParent = folder.folderUri.equals(mParentUri);
+
             if (convertView != null) {
                 folderItemView = (FolderItemView) convertView;
             } else {
-                int resId = isParent ? R.layout.folder_item : R.layout.child_folder_item;
                 folderItemView = (FolderItemView) LayoutInflater.from(
-                        mActivity.getActivityContext()).inflate(resId, null);
+                        mActivity.getActivityContext()).inflate(R.layout.folder_item, null);
             }
-            folderItemView.bind(folder, mDropHandler);
+            folderItemView.bind(folder, mParentUri);
+
             if (folder.folderUri.equals(mSelectedFolderUri)) {
                 final ListView listView = getListView();
                 listView.setItemChecked((mAccountsAdapter != null ?
@@ -1184,17 +1291,22 @@
     }
 
     public void rebuildAccountList() {
-        if (!mIsFolderSelectionActivity && mAccountsAdapter != null) {
-            mAccountsAdapter.setAccounts(buildAccountList());
+        if (!mIsFolderSelectionActivity) {
+            if (mAccountsAdapter != null) {
+                mAccountsAdapter.setAccounts(buildAccountListDrawerItems());
+            }
+            if (mMiniDrawerAccountsAdapter != null) {
+                mMiniDrawerAccountsAdapter.setAccounts(getAllAccounts(), mCurrentAccount);
+            }
         }
     }
 
-    protected class AccountsAdapter extends BaseAdapter {
+    protected static class AccountsAdapter extends BaseAdapter {
 
         private List<DrawerItem> mAccounts;
 
         public AccountsAdapter() {
-            mAccounts = new ArrayList<DrawerItem>();
+            mAccounts = new ArrayList<>();
         }
 
         public void setAccounts(List<DrawerItem> accounts) {
@@ -1230,11 +1342,11 @@
     }
 
     /**
-     * Builds the list of accounts.
+     * Builds the drawer items for the list of accounts.
      */
-    private List<DrawerItem> buildAccountList() {
+    private List<DrawerItem> buildAccountListDrawerItems() {
         final Account[] allAccounts = getAllAccounts();
-        final List<DrawerItem> accountList = new ArrayList<DrawerItem>(allAccounts.length);
+        final List<DrawerItem> accountList = new ArrayList<>(allAccounts.length);
         // Add all accounts and then the current account
         final Uri currentAccountUri = getCurrentAccountUri();
         for (final Account account : allAccounts) {
@@ -1243,7 +1355,7 @@
                     currentAccountUri.equals(account.uri), mImagesCache, mContactResolver));
         }
         if (mCurrentAccount == null) {
-            LogUtils.wtf(LOG_TAG, "buildAccountList() with null current account.");
+            LogUtils.wtf(LOG_TAG, "buildAccountListDrawerItems() with null current account.");
         }
         return accountList;
     }
@@ -1260,17 +1372,13 @@
         return mMergedAdapter;
     }
 
-    public Account getCurrentAccount() {
-        return mCurrentAccount;
-    }
-
     public ObjectCursor<Folder> getFoldersCursor() {
         return (mFolderAdapter != null) ? mFolderAdapter.getCursor() : null;
     }
 
     private class FooterAdapter extends BaseAdapter {
 
-        private final List<FooterItem> mFooterItems = Lists.newArrayList();
+        private final List<DrawerItem> mFooterItems = Lists.newArrayList();
 
         private FooterAdapter() {
             update();
@@ -1282,7 +1390,7 @@
         }
 
         @Override
-        public Object getItem(int position) {
+        public DrawerItem getItem(int position) {
             return mFooterItems.get(position);
         }
 
@@ -1291,6 +1399,17 @@
             return position;
         }
 
+        @Override
+        public int getViewTypeCount() {
+            // Accounts, headers, folders (all parts of drawer view types)
+            return DrawerItem.getViewTypeCount();
+        }
+
+        @Override
+        public int getItemViewType(int position) {
+            return getItem(position).getType();
+        }
+
         /**
          * @param convertView a view, possibly null, to be recycled.
          * @param parent the parent hosting this view.
@@ -1298,31 +1417,7 @@
          */
         @Override
         public View getView(int position, View convertView, ViewGroup parent) {
-            final ViewGroup footerItemView;
-            if (convertView != null) {
-                footerItemView = (ViewGroup) convertView;
-            } else {
-                footerItemView = (ViewGroup) getActivity().getLayoutInflater().
-                        inflate(R.layout.drawer_footer_item, parent, false);
-            }
-
-            final FooterItem item = (FooterItem) getItem(position);
-
-            footerItemView.findViewById(R.id.top_border).setVisibility(
-                    item.shouldShowTopBorder() ? View.VISIBLE : View.GONE);
-            footerItemView.findViewById(R.id.bottom_margin).setVisibility(
-                    item.shouldIncludeBottomMargin() ? View.VISIBLE : View.GONE);
-
-            // adjust the text of the footer item
-            final TextView textView = (TextView) footerItemView.
-                    findViewById(R.id.drawer_footer_text);
-            textView.setText(item.getTextResourceID());
-
-            // adjust the icon of the footer item
-            final ImageView imageView = (ImageView) footerItemView.
-                    findViewById(R.id.drawer_footer_image);
-            imageView.setImageResource(item.getImageResourceID());
-            return footerItemView;
+            return getItem(position).getView(convertView, parent);
         }
 
         /**
@@ -1339,16 +1434,18 @@
             mFooterItems.clear();
 
             if (mCurrentAccount != null) {
-                mFooterItems.add(new SettingsItem());
+                mFooterItems.add(DrawerItem.ofSettingsItem(mActivity, mCurrentAccount,
+                        mDrawerListener));
             }
 
             if (mCurrentAccount != null && !Utils.isEmpty(mCurrentAccount.helpIntentUri)) {
-                mFooterItems.add(new HelpItem());
+                mFooterItems.add(DrawerItem.ofHelpItem(mActivity, mCurrentAccount,
+                        mDrawerListener));
             }
 
             if (!mFooterItems.isEmpty()) {
-                mFooterItems.get(0).setShowTopBorder(true);
-                mFooterItems.get(mFooterItems.size() - 1).setIncludeBottomMargin(true);
+                mFooterItems.add(0, DrawerItem.ofBlankHeader(mActivity));
+                mFooterItems.add(DrawerItem.ofBottomSpace(mActivity));
             }
 
             notifyDataSetChanged();
@@ -1377,20 +1474,29 @@
         //    any folder will take you to the default inbox for that account. (If you are in the
         //    default inbox already, back exits the app.)
         // In both these cases, the selected folder type is not set, and must be set.
-        if (mSelectedDrawerItemType == DrawerItem.UNSET || (mCurrentAccount != null
+        if (mSelectedDrawerItemCategory == DrawerItem.UNSET || (mCurrentAccount != null
                 && folder.folderUri.equals(mCurrentAccount.settings.defaultInbox))) {
-            mSelectedDrawerItemType =
+            mSelectedDrawerItemCategory =
                     folder.isInbox() ? DrawerItem.FOLDER_INBOX : DrawerItem.FOLDER_OTHER;
             mSelectedFolderType = folder.type;
         }
 
         mCurrentFolderForUnreadCheck = folder;
         mSelectedFolderUri = folder.folderUri;
-        if (mFolderAdapter != null && viewChanged) {
-            mFolderAdapter.notifyDataSetChanged();
+        if (viewChanged) {
+            if (mFolderAdapter != null) {
+                mFolderAdapter.notifyDataSetChanged();
+            }
+            if (mMiniDrawerView != null) {
+                mMiniDrawerView.refresh();
+            }
         }
     }
 
+    public boolean isSelectedFolder(@NonNull Folder folder) {
+        return folder.folderUri.equals(mSelectedFolderUri);
+    }
+
     /**
      * Sets the current account to the one provided here.
      * @param account the current account to set to.
@@ -1419,9 +1525,8 @@
             mCurrentFolderForUnreadCheck = null;
 
             // also set/update the mini-drawer
-            if (mMiniDrawerEnabled) {
-                //foobar
-                mMiniDrawerView.refresh();
+            if (mMiniDrawerAccountsAdapter != null) {
+                mMiniDrawerAccountsAdapter.setAccounts(getAllAccounts(), mCurrentAccount);
             }
 
         } else if (account == null) {
@@ -1462,110 +1567,11 @@
         return mAccountController.getFolderListViewChoiceMode();
     }
 
-    /**
-     * The base class of all footer items. Subclasses must fill in the logic of
-     * {@link #doFooterAction()} which contains the behavior when the item is selected.
-     */
-    private abstract class FooterItem implements View.OnClickListener {
-
-        private final int mImageResourceID;
-        private final int mTextResourceID;
-
-        private boolean mShowTopBorder;
-        private boolean mIncludeBottomMargin;
-
-        private FooterItem(final int imageResourceID, final int textResourceID) {
-            mImageResourceID = imageResourceID;
-            mTextResourceID = textResourceID;
-        }
-
-        private int getImageResourceID() {
-            return mImageResourceID;
-        }
-
-        private int getTextResourceID() {
-            return mTextResourceID;
-        }
-
-        /**
-         * Executes the behavior associated with this footer item.<br>
-         * <br>
-         * WARNING: you probably don't want to call this directly; use
-         * {@link #onClick(View)} instead. This method actually performs the action, and its
-         * execution may be deferred from when the 'click' happens so we can smoothly close the
-         * drawer beforehand.
-         */
-        abstract void doFooterAction();
-
-        @Override
-        public final void onClick(View v) {
-            final DrawerController dc = mActivity.getDrawerController();
-            if (dc.isDrawerEnabled()) {
-                // close the drawer and defer handling the click until onDrawerClosed
-                mAccountController.closeDrawer(false /* hasNewFolderOrAccount */,
-                        null /* nextAccount */, null /* nextFolder */);
-                mDrawerListener.setPendingFooterClick(this);
-            } else {
-                doFooterAction();
-            }
-        }
-
-        public boolean shouldShowTopBorder() {
-            return mShowTopBorder;
-        }
-
-        public void setShowTopBorder(boolean show) {
-            mShowTopBorder = show;
-        }
-
-        public boolean shouldIncludeBottomMargin() {
-            return mIncludeBottomMargin;
-        }
-
-        public void setIncludeBottomMargin(boolean include) {
-            mIncludeBottomMargin = include;
-        }
-
-        // for analytics
-        String getEventLabel() {
-            final StringBuilder sb = new StringBuilder("drawer_footer");
-            sb.append("/");
-            sb.append(mActivity.getViewMode().getModeString());
-            return sb.toString();
-        }
-
-    }
-
-    private class HelpItem extends FooterItem {
-        protected HelpItem() {
-            super(R.drawable.ic_drawer_help, R.string.help_and_feedback);
-        }
-
-        @Override
-        void doFooterAction() {
-            Analytics.getInstance().sendMenuItemEvent(Analytics.EVENT_CATEGORY_MENU_ITEM,
-                    R.id.help_info_menu_item, getEventLabel(), 0);
-            mActivity.showHelp(mCurrentAccount, ViewMode.CONVERSATION_LIST);
-        }
-    }
-
-    private class SettingsItem extends FooterItem {
-        protected SettingsItem() {
-            super(R.drawable.ic_drawer_settings, R.string.menu_settings);
-        }
-
-        @Override
-        void doFooterAction() {
-            Analytics.getInstance().sendMenuItemEvent(Analytics.EVENT_CATEGORY_MENU_ITEM,
-                    R.id.settings, getEventLabel(), 0);
-            Utils.showSettings(mActivity.getActivityContext(), mCurrentAccount);
-        }
-    }
 
     /**
      * Drawer listener for footer functionality to react to drawer state.
      */
-    private class DrawerStateListener implements DrawerLayout.DrawerListener {
+    public class DrawerStateListener implements DrawerLayout.DrawerListener {
 
         private FooterItem mPendingFooterClick;
 
@@ -1582,7 +1588,7 @@
         @Override
         public void onDrawerClosed(View drawerView) {
             if (mPendingFooterClick != null) {
-                mPendingFooterClick.doFooterAction();
+                mPendingFooterClick.onFooterClicked();
                 mPendingFooterClick = null;
             }
         }
@@ -1615,4 +1621,137 @@
         throw new UnsupportedOperationException("Use getListView().getAdapter() instead "
                 + "which accounts for any header or footer views.");
     }
+
+    protected class MiniDrawerAccountsAdapter extends BaseAdapter {
+
+        private List<Account> mAccounts = new ArrayList<>();
+
+        public void setAccounts(Account[] accounts, Account currentAccount) {
+            mAccounts.clear();
+            if (currentAccount == null) {
+                notifyDataSetChanged();
+                return;
+            }
+            mAccounts.add(currentAccount);
+            // TODO: sort by most recent accounts
+            for (final Account account : accounts) {
+                if (!account.getEmailAddress().equals(currentAccount.getEmailAddress())) {
+                    mAccounts.add(account);
+                }
+            }
+            notifyDataSetChanged();
+        }
+
+        @Override
+        public int getCount() {
+            return mAccounts.size();
+        }
+
+        @Override
+        public Object getItem(int position) {
+            // Is there an attempt made to access outside of the drawer item list?
+            if (position >= mAccounts.size()) {
+                return null;
+            } else {
+                return mAccounts.get(position);
+            }
+        }
+
+        @Override
+        public long getItemId(int position) {
+            return getItem(position).hashCode();
+        }
+
+        @Override
+        public View getView(int position, View convertView, ViewGroup parent) {
+            final ImageView iv = convertView != null ? (ImageView) convertView :
+                    (ImageView) LayoutInflater.from(getActivity()).inflate(
+                    R.layout.mini_drawer_recent_account_item, parent, false /* attachToRoot */);
+            final MiniDrawerAccountItem item = new MiniDrawerAccountItem(iv);
+            item.setupDrawable();
+            item.setAccount(mAccounts.get(position));
+            iv.setTag(item);
+            return iv;
+        }
+
+        private class MiniDrawerAccountItem implements View.OnClickListener {
+            private Account mAccount;
+            private AccountAvatarDrawable mDrawable;
+            public final ImageView view;
+
+            public MiniDrawerAccountItem(ImageView iv) {
+                view = iv;
+                view.setOnClickListener(this);
+            }
+
+            public void setupDrawable() {
+                mDrawable = new AccountAvatarDrawable(getResources(), getBitmapCache(),
+                        getContactResolver());
+                mDrawable.setDecodeDimensions(mMiniDrawerAvatarDecodeSize,
+                        mMiniDrawerAvatarDecodeSize);
+                view.setImageDrawable(mDrawable);
+            }
+
+            public void setAccount(Account acct) {
+                mAccount = acct;
+                mDrawable.bind(mAccount.getSenderName(), mAccount.getEmailAddress());
+                String contentDescription = mAccount.getDisplayName();
+                if (TextUtils.isEmpty(contentDescription)) {
+                    contentDescription = mAccount.getEmailAddress();
+                }
+                view.setContentDescription(contentDescription);
+            }
+
+            @Override
+            public void onClick(View v) {
+                onAccountSelected(mAccount);
+            }
+        }
+    }
+
+    protected void setupMiniDrawerAccountsAdapter() {
+        mMiniDrawerAccountsAdapter = new MiniDrawerAccountsAdapter();
+    }
+
+    protected ListAdapter getMiniDrawerAccountsAdapter() {
+        return mMiniDrawerAccountsAdapter;
+    }
+
+    private static class FadeAnimatorListener extends AnimatorListenerAdapter {
+        private boolean mCanceled;
+        private final View mView;
+        private final boolean mFadeOut;
+
+        FadeAnimatorListener(View v, boolean fadeOut) {
+            mView = v;
+            mFadeOut = fadeOut;
+        }
+
+        @Override
+        public void onAnimationStart(Animator animation) {
+            if (!mFadeOut) {
+                mView.setVisibility(View.VISIBLE);
+            }
+            mCanceled = false;
+        }
+
+        @Override
+        public void onAnimationCancel(Animator animation) {
+            mCanceled = true;
+        }
+
+        @Override
+        public void onAnimationEnd(Animator animation) {
+            if (!mCanceled) {
+                // Only need to set visibility to INVISIBLE for fade-out and not fade-in.
+                if (mFadeOut) {
+                    mView.setVisibility(View.INVISIBLE);
+                }
+                // If the animation is canceled, then the next animation onAnimationEnd will disable
+                // the hardware layer.
+                mView.setLayerType(View.LAYER_TYPE_NONE, null);
+            }
+        }
+    }
+
 }
diff --git a/src/com/android/mail/ui/FolderSelectionActivity.java b/src/com/android/mail/ui/FolderSelectionActivity.java
index 96b0649..53e3539 100644
--- a/src/com/android/mail/ui/FolderSelectionActivity.java
+++ b/src/com/android/mail/ui/FolderSelectionActivity.java
@@ -27,7 +27,6 @@
 import android.database.DataSetObserver;
 import android.os.Bundle;
 import android.support.v7.app.ActionBarActivity;
-import android.view.DragEvent;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.Button;
@@ -52,7 +51,7 @@
  * This activity displays the list of available folders for the current account.
  */
 public class FolderSelectionActivity extends ActionBarActivity implements OnClickListener,
-        DialogInterface.OnClickListener, FolderChangeListener, ControllableActivity,
+        DialogInterface.OnClickListener, ControllableActivity,
         FolderSelector {
     public static final String EXTRA_ACCOUNT_SHORTCUT = "account-shortcut";
 
@@ -257,8 +256,7 @@
         }
     }
 
-    @Override
-    public void onFolderChanged(Folder folder, final boolean force) {
+    private void onFolderChanged(Folder folder, final boolean force) {
         if (!folder.equals(mSelectedFolder)) {
             mSelectedFolder = folder;
             Intent resultIntent = new Intent();
@@ -322,12 +320,7 @@
     }
 
     @Override
-    public FolderChangeListener getFolderChangeListener() {
-        return this;
-    }
-
-    @Override
-    public ConversationSelectionSet getSelectedSet() {
+    public ConversationCheckedSet getCheckedSet() {
         return null;
     }
 
@@ -351,16 +344,6 @@
     }
 
     @Override
-    public boolean supportsDrag(DragEvent event, Folder folder) {
-        return false;
-    }
-
-    @Override
-    public void handleDrop(DragEvent event, Folder folder) {
-        // Do nothing.
-    }
-
-    @Override
     public void onUndoAvailable(ToastBarOperation undoOp) {
         // Do nothing.
     }
@@ -405,26 +388,11 @@
     }
 
     @Override
-    public void onFooterViewErrorActionClick(Folder folder, int errorStatus) {
-        // Unsupported
-    }
-
-    @Override
     public void onFooterViewLoadMoreClick(Folder folder) {
         // Unsupported
     }
 
     @Override
-    public void startDragMode() {
-        // Unsupported
-    }
-
-    @Override
-    public void stopDragMode() {
-        // Unsupported
-    }
-
-    @Override
     public RecentFolderController getRecentFolderController() {
         // Unsupported
         return null;
@@ -485,6 +453,6 @@
 
     @Override
     public void showHelp(Account account, int viewMode) {
-        //Unsupported
+        // Unsupported
     }
 }
diff --git a/src/com/android/mail/ui/FolderSelectorAdapter.java b/src/com/android/mail/ui/FolderSelectorAdapter.java
index 677c01a..cc2c3a6 100644
--- a/src/com/android/mail/ui/FolderSelectorAdapter.java
+++ b/src/com/android/mail/ui/FolderSelectorAdapter.java
@@ -32,6 +32,7 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.BaseAdapter;
+import android.widget.CheckedTextView;
 import android.widget.CompoundButton;
 import android.widget.ImageView;
 import android.widget.TextView;
@@ -318,7 +319,7 @@
         final Folder folder = row.getFolder();
         final String folderDisplay = !TextUtils.isEmpty(row.mPathName) ?
                 row.mPathName : folder.name;
-        final CompoundButton checkBox = (CompoundButton) view.findViewById(R.id.checkbox);
+        final CheckedTextView checkBox = (CheckedTextView) view.findViewById(R.id.checkbox);
         if (checkBox != null) {
             // Suppress the checkbox selection, and handle the toggling of the
             // folder on the parent list item's click handler.
@@ -330,8 +331,9 @@
         if (display != null) {
             display.setText(folderDisplay);
         }
-        final View colorBlock = view.findViewById(R.id.color_block);
-        Folder.setFolderBlockColor(folder, colorBlock);
+
+        final ImageView folderIcon = (ImageView) view.findViewById(R.id.folder_icon);
+        Folder.setIcon(folder, folderIcon);
         return view;
     }
 }
diff --git a/src/com/android/mail/ui/GmailDragHelper.java b/src/com/android/mail/ui/GmailDragHelper.java
new file mode 100644
index 0000000..71c5227
--- /dev/null
+++ b/src/com/android/mail/ui/GmailDragHelper.java
@@ -0,0 +1,177 @@
+/**
+ * Copyright (C) 2014 Google Inc.
+ * Licensed to 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.mail.ui;
+
+import android.content.Context;
+import android.support.annotation.Nullable;
+import android.view.MotionEvent;
+import android.view.VelocityTracker;
+import android.view.ViewConfiguration;
+
+/**
+ * Generic utility class that deals with capturing drag events in a particular horizontal direction
+ * and calls the callback interface for drag events.
+ *
+ * Usage:
+ *
+ * <code>
+ *
+ *  class CustomView extends ... {
+ *      private boolean mShouldInterceptDrag;
+ *      private int mDragMode;
+ *
+ *      public boolean onInterceptTouchEvent(MotionEvent ev) {
+ *          switch (ev.getAction()) {
+ *              case MotionEvent.ACTION_DOWN:
+ *                  // Check if the event is in the draggable area
+ *                  mShouldInterceptDrag = ...;
+ *                  mDragMode = ...;
+ *          }
+ *          return mShouldInterceptDrag && GmailDragHelper.processTouchEvent(ev, mDragMode);
+ *      }
+ *
+ *      public boolean onTouchEvent(MotionEvent ev) {
+ *          if (mShouldInterceptDrag) {
+ *              GmailDragHelper.processTouchEvent(ev, mDragMode);
+ *              return true;
+ *          }
+ *          return super.onTouchEvent(ev);
+ *      }
+ *  }
+ *
+ * </code>
+ */
+public class GmailDragHelper {
+    public static final int CAPTURE_LEFT_TO_RIGHT = 0;
+    public static final int CAPTURE_RIGHT_TO_LEFT = 1;
+
+    private final GmailDragHelperCallback mCallback;
+    private final ViewConfiguration mConfiguration;
+
+    private boolean mDragging;
+    private VelocityTracker mVelocityTracker;
+
+    private float mInitialInterceptedX;
+    private float mInitialInterceptedY;
+
+    private float mStartDragX;
+
+    public interface GmailDragHelperCallback {
+        public void onDragStarted();
+        public void onDrag(float deltaX);
+        public void onDragEnded(float deltaX, float velocityX, boolean isFling);
+    }
+
+    /**
+     */
+    public GmailDragHelper(Context context, GmailDragHelperCallback callback) {
+        mCallback = callback;
+        mConfiguration = ViewConfiguration.get(context);
+    }
+
+    /**
+     * Process incoming MotionEvent to compute the new drag state and coordinates.
+     *
+     * @param ev the captured MotionEvent
+     * @param dragMode either {@link GmailDragHelper#CAPTURE_LEFT_TO_RIGHT} or
+     *   {@link GmailDragHelper#CAPTURE_RIGHT_TO_LEFT}
+     * @return whether if drag is happening
+     */
+    public boolean processTouchEvent(MotionEvent ev, int dragMode) {
+        return processTouchEvent(ev, dragMode, null);
+    }
+
+    /**
+     * @param xThreshold optional parameter to specify that the drag can only happen if it crosses
+     *   the threshold coordinate. This can be used to only start the drag once the user hits the
+     *   edge of the view.
+     */
+    public boolean processTouchEvent(MotionEvent ev, int dragMode, @Nullable Float xThreshold) {
+        if (mVelocityTracker == null) {
+            mVelocityTracker = VelocityTracker.obtain();
+        }
+        mVelocityTracker.addMovement(ev);
+
+        switch (ev.getAction()) {
+            case MotionEvent.ACTION_DOWN:
+                mInitialInterceptedX = ev.getX();
+                mInitialInterceptedY = ev.getY();
+                break;
+            case MotionEvent.ACTION_MOVE:
+                if (mDragging) {
+                    mCallback.onDrag(ev.getX() - mStartDragX);
+                } else {
+                    // Try to start dragging
+                    final float evX = ev.getX();
+                    // Check for directional drag
+                    if ((dragMode == CAPTURE_LEFT_TO_RIGHT && evX <= mInitialInterceptedX) ||
+                            (dragMode == CAPTURE_RIGHT_TO_LEFT && evX >= mInitialInterceptedX)) {
+                        break;
+                    }
+
+                    // Check for optional threshold
+                    boolean passedThreshold = true;
+                    if (xThreshold != null) {
+                        if (dragMode == CAPTURE_LEFT_TO_RIGHT) {
+                            passedThreshold = evX > xThreshold;
+                        } else {
+                            passedThreshold = evX < xThreshold;
+                        }
+                    }
+
+                    // Check for drag threshold
+                    final float deltaX = Math.abs(evX - mInitialInterceptedX);
+                    final float deltaY = Math.abs(ev.getY() - mInitialInterceptedY);
+                    if (deltaX >= mConfiguration.getScaledTouchSlop() && deltaX >= deltaY
+                            && passedThreshold) {
+                        setDragging(true, evX);
+                    }
+                }
+                break;
+            case MotionEvent.ACTION_UP:
+                if (mDragging) {
+                    setDragging(false, ev.getX());
+                }
+                break;
+        }
+
+        return mDragging;
+    }
+
+    /**
+     * Set the internal dragging state and calls the appropriate callbacks.
+     */
+    private void setDragging(boolean dragging, float evX) {
+        mDragging = dragging;
+
+        if (mDragging) {
+            mStartDragX = evX;
+            mCallback.onDragStarted();
+        } else {
+            // Here velocity is in pixel/second, let's take that into account for evX.
+            mVelocityTracker.computeCurrentVelocity(1000);
+            // Check for fling
+            final float xVelocity = mVelocityTracker.getXVelocity();
+            final boolean isFling =
+                    Math.abs(xVelocity) > mConfiguration.getScaledMinimumFlingVelocity();
+            mVelocityTracker.clear();
+
+            mCallback.onDragEnded(evX - mStartDragX, xVelocity, isFling);
+        }
+    }
+}
diff --git a/src/com/android/mail/ui/HtmlConversationTemplates.java b/src/com/android/mail/ui/HtmlConversationTemplates.java
index 33aa505..124cb83 100644
--- a/src/com/android/mail/ui/HtmlConversationTemplates.java
+++ b/src/com/android/mail/ui/HtmlConversationTemplates.java
@@ -204,7 +204,8 @@
                 mContext.getString(R.string.hide_elided),
                 showElided, docBaseUri, conversationBaseUri, viewportWidth, webviewWidth,
                 enableContentReadySignal, normalizeMessageWidths,
-                enableMungeTables, enableMungeImages, Utils.isRunningKitkatOrLater());
+                enableMungeTables, enableMungeImages, Utils.isRunningKitkatOrLater(),
+                mContext.getString(R.string.forms_are_disabled));
 
         mInProgress = false;
 
diff --git a/src/com/android/mail/ui/ImageCanvas.java b/src/com/android/mail/ui/ImageCanvas.java
index 9fdf0ae..b19b3e8 100644
--- a/src/com/android/mail/ui/ImageCanvas.java
+++ b/src/com/android/mail/ui/ImageCanvas.java
@@ -31,6 +31,7 @@
         public int width;
         public int height;
         public float scale;
+        public float fontSize;
 
         public static final float SCALE_ONE = 1.0f;
         public static final float SCALE_HALF = 0.5f;
@@ -40,9 +41,14 @@
         }
 
         public Dimensions(int w, int h, float s) {
-            width = w;
-            height = h;
-            scale = s;
+            this(w, h, s, -1f);
+        }
+
+        public Dimensions(int width, int height, float scale, float fontSize) {
+            this.width = width;
+            this.height = height;
+            this.scale = scale;
+            this.fontSize = fontSize;
         }
 
         @Override
diff --git a/src/com/android/mail/ui/LeaveBehindItem.java b/src/com/android/mail/ui/LeaveBehindItem.java
index afd44fe..45e5104 100644
--- a/src/com/android/mail/ui/LeaveBehindItem.java
+++ b/src/com/android/mail/ui/LeaveBehindItem.java
@@ -103,9 +103,6 @@
                     cursor.undo(getContext(), mAccount.undoUri);
                 }
             }
-        } else if (id == R.id.undo_descriptionview) {
-            // Essentially, makes sure that tapping description view doesn't highlight
-            // either the undo button icon or text.
         }
     }
 
@@ -122,7 +119,7 @@
         // and button text as selected since they set duplicateParentState to true
         mSwipeableContent.setOnClickListener(this);
         mSwipeableContent.setAlpha(TRANSPARENT);
-        mText = ((TextView) findViewById(R.id.undo_descriptionview));
+        mText = ((TextView) findViewById(R.id.undo_description_text));
         mText.setText(Utils.convertHtmlToPlainText(mUndoOp
                 .getSingularDescription(getContext(), folder)));
         mText.setOnClickListener(this);
@@ -164,10 +161,7 @@
 
     /**
      * Animate shrinking the height of this view.
-     * @param item the conversation to animate
      * @param listener the method to call when the animation is done
-     * @param undo true if an operation is being undone. We animate the item
-     *            away during delete. Undoing populates the item.
      */
     public void startShrinkAnimation(AnimatorListener listener) {
         if (!mAnimating) {
diff --git a/src/com/android/mail/ui/MailActivity.java b/src/com/android/mail/ui/MailActivity.java
index 78507da..c497cc6 100644
--- a/src/com/android/mail/ui/MailActivity.java
+++ b/src/com/android/mail/ui/MailActivity.java
@@ -18,7 +18,6 @@
 package com.android.mail.ui;
 
 import android.app.Dialog;
-import android.app.LoaderManager;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
@@ -29,8 +28,8 @@
 import android.nfc.NfcEvent;
 import android.os.Bundle;
 import android.support.v7.app.ActionBar;
+import android.support.v7.view.ActionMode;
 import android.support.v7.widget.Toolbar;
-import android.view.DragEvent;
 import android.view.KeyEvent;
 import android.view.Menu;
 import android.view.MenuItem;
@@ -40,13 +39,17 @@
 import com.android.bitmap.BitmapCache;
 import com.android.bitmap.UnrefedBitmapCache;
 import com.android.mail.R;
+import com.android.mail.analytics.Analytics;
 import com.android.mail.analytics.AnalyticsTimer;
 import com.android.mail.bitmap.ContactResolver;
 import com.android.mail.compose.ComposeActivity;
 import com.android.mail.providers.Account;
 import com.android.mail.providers.Folder;
+import com.android.mail.providers.SearchRecentSuggestionsProvider;
+import com.android.mail.providers.SuggestionsProvider;
 import com.android.mail.utils.StorageLowState;
 import com.android.mail.utils.Utils;
+import com.android.mail.utils.ViewUtils;
 
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
@@ -86,6 +89,8 @@
 
     private BitmapCache mSendersImageCache;
 
+    private CustomViewToolbar mCustomViewToolbar;
+
     /**
      * Create an NFC message (in the NDEF: Nfc Data Exchange Format) to instruct the recepient to
      * send an email to the current account.
@@ -171,13 +176,16 @@
         setContentView(mController.getContentViewResource());
 
         final Toolbar toolbar = (Toolbar) findViewById(R.id.mail_toolbar);
-        // Toolbar is currently only used on phone layout, so this is expected to be null
-        // on tablets
-        if (toolbar != null) {
-            setSupportActionBar(toolbar);
-            toolbar.setNavigationOnClickListener(mController.getNavigationViewClickListener());
+        if (toolbar instanceof CustomViewToolbar) {
+            // Tablets use CustomViewToolbar to override the default search menu item positioning.
+            mCustomViewToolbar = (CustomViewToolbar) toolbar;
+            mCustomViewToolbar.setController(this, mController, mViewMode);
+            mController.addConversationListLayoutListener(mCustomViewToolbar);
         }
 
+        setSupportActionBar(toolbar);
+        toolbar.setNavigationOnClickListener(mController.getNavigationViewClickListener());
+
         final ActionBar actionBar = getSupportActionBar();
         if (actionBar != null) {
             // Hide the app icon.
@@ -195,6 +203,16 @@
         if (nfcAdapter != null) {
             nfcAdapter.setNdefPushMessageCallback(mNdefHandler, this);
         }
+
+        // Detect presence of hardware keyboard and log it on Analytics
+        final int hardKeyboardHidden = getResources().getConfiguration().hardKeyboardHidden;
+        if (hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) {
+            Analytics.getInstance().sendEvent("configuration", "keyboard", "use_hardware_keyboard",
+                    0);
+        } else {
+            Analytics.getInstance().sendEvent("configuration", "keyboard",
+                    "do_not_use_hardware_keyboard", 0);
+        }
     }
 
     @Override
@@ -313,6 +331,10 @@
     protected void onDestroy() {
         super.onDestroy();
         mController.onDestroy();
+
+        if (mCustomViewToolbar != null) {
+            mCustomViewToolbar.onDestroy();
+        }
     }
 
     @Override
@@ -328,6 +350,8 @@
         sb.append(mViewMode);
         sb.append(" controller=");
         sb.append(mController);
+        sb.append(" current_focus=");
+        sb.append(getCurrentFocus());
         sb.append("}");
         return sb.toString();
     }
@@ -338,11 +362,6 @@
     }
 
     @Override
-    public FolderChangeListener getFolderChangeListener() {
-        return mController;
-    }
-
-    @Override
     public FolderSelector getFolderSelector() {
         return mController;
     }
@@ -353,18 +372,8 @@
     }
 
     @Override
-    public ConversationSelectionSet getSelectedSet() {
-        return mController.getSelectedSet();
-    }
-
-    @Override
-    public boolean supportsDrag(DragEvent event, Folder folder) {
-        return mController.supportsDrag(event, folder);
-    }
-
-    @Override
-    public void handleDrop(DragEvent event, Folder folder) {
-        mController.handleDrop(event, folder);
+    public ConversationCheckedSet getCheckedSet() {
+        return mController.getCheckedSet();
     }
 
     @Override
@@ -423,26 +432,11 @@
     }
 
     @Override
-    public void onFooterViewErrorActionClick(Folder folder, int errorStatus) {
-        mController.onFooterViewErrorActionClick(folder, errorStatus);
-    }
-
-    @Override
     public void onFooterViewLoadMoreClick(Folder folder) {
         mController.onFooterViewLoadMoreClick(folder);
     }
 
     @Override
-    public void startDragMode() {
-        mController.startDragMode();
-    }
-
-    @Override
-    public void stopDragMode() {
-        mController.stopDragMode();
-    }
-
-    @Override
     public boolean isAccessibilityEnabled() {
         return mAccessibilityEnabled;
     }
@@ -497,29 +491,19 @@
         Utils.showHelp(this, account, getString(helpContext));
     }
 
-    /**
-     * Returns the loader callback that can create a
-     * {@link AbstractActivityController#LOADER_WELCOME_TOUR_ACCOUNTS} followed by a
-     * {@link AbstractActivityController#LOADER_WELCOME_TOUR} which determines whether the welcome
-     * tour should be displayed.
-     *
-     * The base implementation returns {@code null} and subclasses should return an actual
-     * implementation if they want to be invoked at appropriate time.
-     */
-    public LoaderManager.LoaderCallbacks<?> getWelcomeCallbacks() {
-        return null;
+    public SearchRecentSuggestionsProvider getSuggestionsProvider() {
+        return new SuggestionsProvider(this);
     }
 
-    /**
-     * Returns whether the latest version of the welcome tour was shown on this device.
-     * <p>
-     * The base implementation returns {@code true} and applications that implement a welcome tour
-     * should override this method in order to optimize
-     * {@link AbstractActivityController#perhapsStartWelcomeTour()}.
-     *
-     * @return Whether the latest version of the welcome tour was shown.
-     */
-    public boolean wasLatestWelcomeTourShownOnDeviceForAllAccounts() {
-        return true;
+    @Override
+    public void onSupportActionModeStarted(ActionMode mode) {
+        super.onSupportActionModeStarted(mode);
+        ViewUtils.setStatusBarColor(this, R.color.action_mode_statusbar_color);
+    }
+
+    @Override
+    public void onSupportActionModeFinished(ActionMode mode) {
+        super.onSupportActionModeFinished(mode);
+        ViewUtils.setStatusBarColor(this, R.color.mail_activity_status_bar_color);
     }
 }
diff --git a/src/com/android/mail/ui/MaterialSearchActionView.java b/src/com/android/mail/ui/MaterialSearchActionView.java
new file mode 100644
index 0000000..7b248ce
--- /dev/null
+++ b/src/com/android/mail/ui/MaterialSearchActionView.java
@@ -0,0 +1,247 @@
+/*
+ * Copyright (C) 2014 Google Inc.
+ * Licensed to 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.mail.ui;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.drawable.ColorDrawable;
+import android.graphics.drawable.Drawable;
+import android.support.annotation.DrawableRes;
+import android.text.Editable;
+import android.text.TextWatcher;
+import android.util.AttributeSet;
+import android.view.ActionMode;
+import android.view.KeyEvent;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.inputmethod.EditorInfo;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.android.mail.R;
+import com.android.mail.utils.ViewUtils;
+
+/**
+ * Custom view for the action bar when search is displayed.
+ */
+public class MaterialSearchActionView extends LinearLayout implements TextWatcher,
+        View.OnClickListener, TextView.OnEditorActionListener, View.OnKeyListener {
+    // Dark drawables are used for when the search bar is visible (thus dark icon on light bg).
+    // Light drawables are used when we are showing the default action bar.
+    private Drawable mLightBgDrawable;
+    private Drawable mDarkBgDrawable;
+    private @DrawableRes int mLightBgBackDrawable;
+    private @DrawableRes int mDarkBgBackDrawable;
+    private @DrawableRes int mLightBgClearTextDrawable;
+    private @DrawableRes int mDarkBgClearTextDrawable;
+    private @DrawableRes int mLightBgVoiceDrawable;
+    private @DrawableRes int mDarkBgVoiceDrawable;
+    private int mLightBgTextColor;
+    private int mDarkBgTextColor;
+
+    private MaterialSearchViewController mController;
+    private InputMethodManager mImm;
+    private boolean mSupportVoice;
+    private boolean mShowingClearButton;
+    private boolean mAlignWithTl;
+
+    private ImageView mBackButton;
+    private EditText mQueryText;
+    private ImageView mEndingButton;
+
+    public MaterialSearchActionView(Context context) {
+        this(context, null);
+    }
+
+    public MaterialSearchActionView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+
+        final Resources res = getResources();
+        mLightBgDrawable = new ColorDrawable(res.getColor(android.R.color.white));
+        mDarkBgDrawable = new ColorDrawable(res.getColor(R.color.primary_color));
+        mLightBgBackDrawable = R.drawable.ic_arrow_back_24dp_with_rtl;
+        mDarkBgBackDrawable = R.drawable.ic_arrow_back_wht_24dp_with_rtl;
+        mLightBgClearTextDrawable = R.drawable.ic_close_24dp;
+        mDarkBgClearTextDrawable = R.drawable.ic_close_wht_24dp;
+        mLightBgVoiceDrawable = R.drawable.ic_mic_24dp;
+        mDarkBgVoiceDrawable = R.drawable.ic_mic_wht_24dp;
+        mLightBgTextColor = res.getColor(R.color.search_query_text);
+        mDarkBgTextColor = res.getColor(android.R.color.white);
+    }
+
+    // PUBLIC API
+    public void setController(MaterialSearchViewController controller, String initialQuery,
+            boolean supportVoice) {
+        mController = controller;
+        mQueryText.setText(initialQuery);
+        mSupportVoice = supportVoice;
+    }
+
+    public void clearSearchQuery() {
+        mQueryText.setText("");
+    }
+
+    public void focusSearchBar(boolean hasFocus) {
+        if (hasFocus) {
+            mQueryText.requestFocus();
+            mImm.showSoftInput(mQueryText, 0);
+        } else {
+            mImm.hideSoftInputFromWindow(mQueryText.getWindowToken(), 0);
+        }
+    }
+
+    public void adjustViewForTwoPaneLandscape(boolean alignWithTl, int xEnd) {
+        mAlignWithTl = alignWithTl;
+        final ViewGroup.LayoutParams params = getLayoutParams();
+        if (alignWithTl) {
+            setBackgroundDrawable(mDarkBgDrawable);
+            mBackButton.setImageResource(mDarkBgBackDrawable);
+            mQueryText.setTextColor(mDarkBgTextColor);
+
+            if (ViewUtils.isViewRtl(this)) {
+                int[] coords = new int[2];
+                getLocationInWindow(coords);
+                params.width = coords[0] + getWidth() - xEnd;
+            } else {
+                params.width = xEnd;
+            }
+        } else {
+            setBackgroundDrawable(mLightBgDrawable);
+            mBackButton.setImageResource(mLightBgBackDrawable);
+            mQueryText.setTextColor(mLightBgTextColor);
+            params.width = ViewGroup.LayoutParams.MATCH_PARENT;
+        }
+        setupEndingButton(mQueryText.getText());
+        setLayoutParams(params);
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        super.onFinishInflate();
+
+        mImm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
+        mBackButton = (ImageView) findViewById(R.id.search_actionbar_back_button);
+        mBackButton.setOnClickListener(this);
+        mQueryText = (EditText) findViewById(R.id.search_actionbar_query_text);
+        mQueryText.addTextChangedListener(this);
+        mQueryText.setOnClickListener(this);
+        mQueryText.setOnEditorActionListener(this);
+        mQueryText.setOnKeyListener(this);
+        // Disable CAB for search edittext
+        mQueryText.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
+            @Override
+            public boolean onCreateActionMode(ActionMode mode, Menu menu) {
+                return false;
+            }
+
+            @Override
+            public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
+                return false;
+            }
+
+            @Override
+            public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
+                return false;
+            }
+
+            @Override
+            public void onDestroyActionMode(ActionMode mode) {
+            }
+        });
+        mEndingButton = (ImageView) findViewById(R.id.search_actionbar_ending_button);
+        mEndingButton.setOnClickListener(this);
+        setupEndingButton(mQueryText.getText());
+    }
+
+    private void setupEndingButton(CharSequence currentText) {
+        final Resources res = getResources();
+        if (!mSupportVoice || currentText.length() > 0) {
+            if (mAlignWithTl) {
+                mEndingButton.setImageResource(mDarkBgClearTextDrawable);
+            } else {
+                mEndingButton.setImageResource(mLightBgClearTextDrawable);
+            }
+            mEndingButton.setContentDescription(res.getString(R.string.search_clear_desc));
+            mShowingClearButton = true;
+        } else {
+            if (mAlignWithTl) {
+                mEndingButton.setImageResource(mDarkBgVoiceDrawable);
+            } else {
+                mEndingButton.setImageResource(mLightBgVoiceDrawable);
+            }
+            mEndingButton.setContentDescription(res.getString(R.string.search_voice_desc));
+            mShowingClearButton = false;
+        }
+    }
+
+    @Override
+    public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {
+        // Only care about onTextChanged
+    }
+
+    @Override
+    public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
+        mController.onQueryTextChanged(charSequence.toString());
+        setupEndingButton(charSequence);
+    }
+
+    @Override
+    public void afterTextChanged(Editable editable) {
+        // Only care about onTextChanged
+    }
+
+    @Override
+    public void onClick(View view) {
+        if (view == mBackButton) {
+            mController.onSearchCanceled();
+        } else if (view == mEndingButton) {
+            if (mShowingClearButton) {
+                mQueryText.setText("");
+                mController.showSearchActionBar(
+                        MaterialSearchViewController.SEARCH_VIEW_STATE_VISIBLE);
+            } else {
+                mController.onVoiceSearch();
+            }
+        } else if (view == mQueryText) {
+            mController.showSearchActionBar(MaterialSearchViewController.SEARCH_VIEW_STATE_VISIBLE);
+        }
+    }
+
+    @Override
+    public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) {
+        if (actionId == EditorInfo.IME_ACTION_SEARCH) {
+            mController.onSearchPerformed(mQueryText.getText().toString());
+        }
+        return false;
+    }
+
+    @Override
+    public boolean onKey(View v, int keyCode, KeyEvent event) {
+        // Hardware keyboard doesn't represent Enter as Search through imeOptions, so we need to
+        // capture them manually here.
+        if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_ENTER) {
+            mController.onSearchPerformed(mQueryText.getText().toString());
+        }
+        return false;
+    }
+}
diff --git a/src/com/android/mail/ui/MaterialSearchSuggestionsList.java b/src/com/android/mail/ui/MaterialSearchSuggestionsList.java
new file mode 100644
index 0000000..e40d42f
--- /dev/null
+++ b/src/com/android/mail/ui/MaterialSearchSuggestionsList.java
@@ -0,0 +1,221 @@
+/*
+ * Copyright (C) 2014 Google Inc.
+ * Licensed to 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.mail.ui;
+
+import android.app.SearchManager;
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.BaseAdapter;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.ListView;
+import android.widget.TextView;
+
+import com.android.mail.R;
+import com.android.mail.providers.SearchRecentSuggestionsProvider;
+import com.google.common.collect.Lists;
+
+import java.util.List;
+
+/**
+ * Custom quantum-styled search view that overlays the main activity.
+ */
+public class MaterialSearchSuggestionsList extends LinearLayout
+        implements AdapterView.OnItemClickListener, View.OnClickListener {
+    private MaterialSearchViewController mController;
+    private SearchRecentSuggestionsProvider mSuggestionsProvider;
+    private List<SuggestionItem> mSuggestions = Lists.newArrayList();
+    private String mQuery;
+
+    private MaterialSearchViewListAdapter mAdapter;
+    private QuerySuggestionsTask mQueryTask;
+
+    public MaterialSearchSuggestionsList(Context context) {
+        super(context);
+    }
+
+    public MaterialSearchSuggestionsList(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    // PUBLIC API
+    public void setController(MaterialSearchViewController controller,
+            SearchRecentSuggestionsProvider suggestionsProvider) {
+        mController = controller;
+        mSuggestionsProvider = suggestionsProvider;
+    }
+
+    public void setQuery(String query) {
+        mQuery = query;
+        if (mQueryTask != null) {
+            mQueryTask.cancel(true);
+        }
+        mQueryTask = new QuerySuggestionsTask();
+        mQueryTask.execute(query);
+    }
+
+    // PRIVATE API
+    @Override
+    protected void onFinishInflate() {
+        super.onFinishInflate();
+
+        final ListView listView = (ListView) findViewById(R.id.search_overlay_suggestion_list);
+        listView.setOnItemClickListener(this);
+        final View dummyHolder = findViewById(R.id.search_overlay_scrim);
+        dummyHolder.setOnClickListener(this);
+
+        // set up the adapter
+        mAdapter = new MaterialSearchViewListAdapter(getContext(), R.layout.search_suggestion_item);
+        listView.setAdapter(mAdapter);
+    }
+
+    @Override
+    public void setVisibility(int visibility) {
+        if (!isShown() && visibility == VISIBLE) {
+            // When we go from gone to visible, re-query for suggestions in case they changed.
+            setQuery(mQuery);
+        }
+        super.setVisibility(visibility);
+    }
+
+    @Override
+    public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
+        mController.onSearchPerformed(mSuggestions.get(position).suggestion);
+    }
+
+    @Override
+    public void onClick(View view) {
+        mController.showSearchActionBar(
+                MaterialSearchViewController.SEARCH_VIEW_STATE_ONLY_ACTIONBAR);
+    }
+
+    // Background task for querying the suggestions list
+    private class QuerySuggestionsTask extends AsyncTask<String, Void, List<SuggestionItem>> {
+        @Override
+        protected List<SuggestionItem> doInBackground(String... strings) {
+            String query = strings[0];
+            if (query == null) {
+                query = "";
+            }
+
+            Cursor c = null;
+            final List<SuggestionItem> result = Lists.newArrayList();
+            try {
+                c = mSuggestionsProvider.query(query);
+
+                if (c != null && c.moveToFirst()) {
+                    final int textIndex = c.getColumnIndex(SearchManager.SUGGEST_COLUMN_QUERY);
+                    final int iconIndex = c.getColumnIndex(SearchManager.SUGGEST_COLUMN_ICON_1);
+                    do {
+                        final String suggestion = c.getString(textIndex);
+                        final Uri iconUri = Uri.parse(c.getString(iconIndex));
+                        result.add(new SuggestionItem(suggestion, iconUri));
+                    } while (c.moveToNext());
+                }
+            } finally {
+                if (c != null) {
+                    c.close();
+                }
+            }
+
+            return result;
+        }
+
+        @Override
+        protected void onPostExecute(List<SuggestionItem> strings) {
+            if (!isCancelled()) {
+                // Should not have any race conditions here since we cancel the previous asynctask
+                // before starting the new one. It's unlikely that the new task finishes fast enough
+                // to get to onPostExecute when this one is in addAll.
+                mSuggestions.clear();
+                mSuggestions.addAll(strings);
+                mAdapter.notifyDataSetChanged();
+            }
+        }
+    }
+
+    private static class SuggestionItem {
+        final String suggestion;
+        final Uri icon;
+
+        public SuggestionItem(String s, Uri i) {
+            suggestion = s;
+            icon = i;
+        }
+    }
+
+    // Custom adapter to populate our list
+    private class MaterialSearchViewListAdapter extends BaseAdapter {
+        private final Context mContext;
+        private final int mResId;
+        private LayoutInflater mInflater;
+
+        public MaterialSearchViewListAdapter(Context context, int resource) {
+            super();
+            mContext = context;
+            mResId = resource;
+        }
+
+        private LayoutInflater getInflater() {
+            if (mInflater == null) {
+                mInflater = LayoutInflater.from(mContext);
+            }
+            return mInflater;
+        }
+
+        @Override
+        public int getCount() {
+            return mSuggestions.size();
+        }
+
+        @Override
+        public Object getItem(int i) {
+            return mSuggestions.get(i);
+        }
+
+        @Override
+        public long getItemId(int i) {
+            return 0;
+        }
+
+        @Override
+        public View getView(int position, View convertView, ViewGroup parent) {
+            if (convertView == null) {
+                convertView = getInflater().inflate(mResId, parent, false);
+            }
+
+            final SuggestionItem item = mSuggestions.get(position);
+            final TextView text =
+                    (TextView) convertView.findViewById(R.id.search_overlay_item_text);
+            text.setText(item.suggestion);
+            text.setContentDescription(getResources().getString(R.string.search_suggestion_desc,
+                    item.suggestion));
+            ((ImageView) convertView.findViewById(R.id.search_overlay_item_icon))
+                    .setImageURI(item.icon);
+
+            return convertView;
+        }
+    }
+}
diff --git a/src/com/android/mail/ui/MaterialSearchViewController.java b/src/com/android/mail/ui/MaterialSearchViewController.java
new file mode 100644
index 0000000..9e03a66
--- /dev/null
+++ b/src/com/android/mail/ui/MaterialSearchViewController.java
@@ -0,0 +1,331 @@
+/*
+ * Copyright (C) 2014 Google Inc.
+ * Licensed to 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.mail.ui;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.app.Activity;
+import android.content.ActivityNotFoundException;
+import android.content.Intent;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.speech.RecognizerIntent;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.Toast;
+
+import com.android.mail.ConversationListContext;
+import com.android.mail.R;
+import com.android.mail.providers.SearchRecentSuggestionsProvider;
+import com.android.mail.utils.ViewUtils;
+
+import java.util.Locale;
+
+/**
+ * Controller for interactions between ActivityController and our custom search views.
+ */
+public class MaterialSearchViewController implements ViewMode.ModeChangeListener,
+        TwoPaneLayout.ConversationListLayoutListener {
+    private static final long FADE_IN_OUT_DURATION_MS = 150;
+
+    // The controller is not in search mode. Both search action bar and the suggestion list
+    // are not visible to the user.
+    public static final int SEARCH_VIEW_STATE_GONE = 0;
+    // The controller is actively in search (as in the action bar is focused and the user can type
+    // into the search query). Both the search action bar and the suggestion list are visible.
+    public static final int SEARCH_VIEW_STATE_VISIBLE = 1;
+    // The controller is in a search ViewMode but not actively searching. This is relevant when
+    // we have to show the search actionbar on top while the user is not interacting with it.
+    public static final int SEARCH_VIEW_STATE_ONLY_ACTIONBAR = 2;
+
+    private static final String EXTRA_CONTROLLER_STATE = "extraSearchViewControllerViewState";
+
+    private MailActivity mActivity;
+    private ActivityController mController;
+
+    private SearchRecentSuggestionsProvider mSuggestionsProvider;
+
+    private MaterialSearchActionView mSearchActionView;
+    private MaterialSearchSuggestionsList mSearchSuggestionList;
+
+    private int mViewMode;
+    private int mControllerState;
+    private int mEndXCoordForTabletLandscape;
+
+    private boolean mSavePending;
+    private boolean mDestroyProvider;
+
+    public MaterialSearchViewController(MailActivity activity, ActivityController controller,
+            Intent intent, Bundle savedInstanceState) {
+        mActivity = activity;
+        mController = controller;
+
+        final Intent voiceIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
+        final boolean supportVoice =
+                voiceIntent.resolveActivity(mActivity.getPackageManager()) != null;
+
+        mSuggestionsProvider = mActivity.getSuggestionsProvider();
+        mSearchSuggestionList = (MaterialSearchSuggestionsList) mActivity.findViewById(
+                R.id.search_overlay_view);
+        mSearchSuggestionList.setController(this, mSuggestionsProvider);
+        mSearchActionView = (MaterialSearchActionView) mActivity.findViewById(
+                R.id.search_actionbar_view);
+        mSearchActionView.setController(this, intent.getStringExtra(
+                ConversationListContext.EXTRA_SEARCH_QUERY), supportVoice);
+
+        if (savedInstanceState != null && savedInstanceState.containsKey(EXTRA_CONTROLLER_STATE)) {
+            mControllerState = savedInstanceState.getInt(EXTRA_CONTROLLER_STATE);
+        }
+
+        mActivity.getViewMode().addListener(this);
+    }
+
+    /**
+     * This controller should not be used after this is called.
+     */
+    public void onDestroy() {
+        mDestroyProvider = mSavePending;
+        if (!mSavePending) {
+            mSuggestionsProvider.cleanup();
+        }
+        mActivity.getViewMode().removeListener(this);
+        mActivity = null;
+        mController = null;
+        mSearchActionView = null;
+        mSearchSuggestionList = null;
+    }
+
+    public void saveState(Bundle outState) {
+        outState.putInt(EXTRA_CONTROLLER_STATE, mControllerState);
+    }
+
+    @Override
+    public void onViewModeChanged(int newMode) {
+        final int oldMode = mViewMode;
+        mViewMode = newMode;
+        // Never animate visibility changes that are caused by view state changes.
+        if (mController.shouldShowSearchBarByDefault(mViewMode)) {
+            showSearchActionBar(SEARCH_VIEW_STATE_ONLY_ACTIONBAR, false /* animate */);
+        } else if (oldMode == ViewMode.UNKNOWN) {
+            showSearchActionBar(mControllerState, false /* animate */);
+        } else {
+            showSearchActionBar(SEARCH_VIEW_STATE_GONE, false /* animate */);
+        }
+    }
+
+    @Override
+    public void onConversationListLayout(int xEnd, boolean drawerOpen) {
+        // Only care about the first layout
+        if (mEndXCoordForTabletLandscape != xEnd) {
+            // This is called when we get into tablet landscape mode
+            mEndXCoordForTabletLandscape = xEnd;
+            if (ViewMode.isSearchMode(mViewMode)) {
+                final int defaultVisibility = mController.shouldShowSearchBarByDefault(mViewMode) ?
+                        View.VISIBLE : View.GONE;
+                setViewVisibilityAndAlpha(mSearchActionView,
+                        drawerOpen ? View.INVISIBLE : defaultVisibility);
+            }
+            adjustViewForTwoPaneLandscape();
+        }
+    }
+
+    public boolean handleBackPress() {
+        final boolean shouldShowSearchBar = mController.shouldShowSearchBarByDefault(mViewMode);
+        if (shouldShowSearchBar && mSearchSuggestionList.isShown()) {
+            showSearchActionBar(SEARCH_VIEW_STATE_ONLY_ACTIONBAR);
+            return true;
+        } else if (!shouldShowSearchBar && mSearchActionView.isShown()) {
+            showSearchActionBar(SEARCH_VIEW_STATE_GONE);
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * Set the new visibility state of the search controller.
+     * @param state the new view state, must be one of the following options:
+     *   {@link MaterialSearchViewController#SEARCH_VIEW_STATE_ONLY_ACTIONBAR},
+     *   {@link MaterialSearchViewController#SEARCH_VIEW_STATE_VISIBLE},
+     *   {@link MaterialSearchViewController#SEARCH_VIEW_STATE_GONE},
+     */
+    public void showSearchActionBar(int state) {
+        // By default animate the visibility changes
+        showSearchActionBar(state, true /* animate */);
+    }
+
+    /**
+     * @param animate if true, the search bar and suggestion list will fade in/out of view.
+     */
+    public void showSearchActionBar(int state, boolean animate) {
+        mControllerState = state;
+
+        // ACTIONBAR is only applicable in search mode
+        final boolean onlyActionBar = state == SEARCH_VIEW_STATE_ONLY_ACTIONBAR &&
+                mController.shouldShowSearchBarByDefault(mViewMode);
+        final boolean isStateVisible = state == SEARCH_VIEW_STATE_VISIBLE;
+
+        final boolean isSearchBarVisible = isStateVisible || onlyActionBar;
+
+        final int searchBarVisibility = isSearchBarVisible ? View.VISIBLE : View.GONE;
+        final int suggestionListVisibility = isStateVisible ? View.VISIBLE : View.GONE;
+        if (animate) {
+            fadeInOutView(mSearchActionView, searchBarVisibility);
+            fadeInOutView(mSearchSuggestionList, suggestionListVisibility);
+        } else {
+            setViewVisibilityAndAlpha(mSearchActionView, searchBarVisibility);
+            setViewVisibilityAndAlpha(mSearchSuggestionList, suggestionListVisibility);
+        }
+        mSearchActionView.focusSearchBar(isStateVisible);
+
+        final boolean useDefaultColor = !isSearchBarVisible || shouldAlignWithTl();
+        final int statusBarColor = useDefaultColor ? R.color.mail_activity_status_bar_color :
+                R.color.search_status_bar_color;
+        ViewUtils.setStatusBarColor(mActivity, statusBarColor);
+
+        // Specific actions for each view state
+        if (onlyActionBar) {
+            adjustViewForTwoPaneLandscape();
+        } else if (isStateVisible) {
+            // Set to default layout/assets
+            mSearchActionView.adjustViewForTwoPaneLandscape(false /* do not align */, 0);
+        } else {
+            // For non-search view mode, clear the query term for search
+            if (!ViewMode.isSearchMode(mViewMode)) {
+                mSearchActionView.clearSearchQuery();
+            }
+        }
+    }
+
+    /**
+     * Helper function to fade in/out the provided view by animating alpha.
+     */
+    private void fadeInOutView(final View v, final int visibility) {
+        if (visibility == View.VISIBLE) {
+            v.setVisibility(View.VISIBLE);
+            v.animate()
+                    .alpha(1f)
+                    .setDuration(FADE_IN_OUT_DURATION_MS)
+                    .setListener(null);
+        } else {
+            v.animate()
+                    .alpha(0f)
+                    .setDuration(FADE_IN_OUT_DURATION_MS)
+                    .setListener(new AnimatorListenerAdapter() {
+                        @Override
+                        public void onAnimationEnd(Animator animation) {
+                            v.setVisibility(visibility);
+                        }
+                    });
+        }
+    }
+
+    /**
+     * Sets the view's visibility and alpha so that we are guaranteed that alpha = 1 when the view
+     * is visible, and alpha = 0 otherwise.
+     */
+    private void setViewVisibilityAndAlpha(View v, int visibility) {
+        v.setVisibility(visibility);
+        if (visibility == View.VISIBLE) {
+            v.setAlpha(1f);
+        } else {
+            v.setAlpha(0f);
+        }
+    }
+
+    private boolean shouldAlignWithTl() {
+        return mController.isTwoPaneLandscape() &&
+                mControllerState == SEARCH_VIEW_STATE_ONLY_ACTIONBAR &&
+                ViewMode.isSearchMode(mViewMode);
+    }
+
+    private void adjustViewForTwoPaneLandscape() {
+        // Try to adjust if the layout happened already
+        if (mEndXCoordForTabletLandscape != 0) {
+            mSearchActionView.adjustViewForTwoPaneLandscape(shouldAlignWithTl(),
+                    mEndXCoordForTabletLandscape);
+        }
+    }
+
+    public void onQueryTextChanged(String query) {
+        mSearchSuggestionList.setQuery(query);
+    }
+
+    public void onSearchCanceled() {
+        // Special case search mode
+        if (ViewMode.isSearchMode(mViewMode)) {
+            mActivity.setResult(Activity.RESULT_OK);
+            mActivity.finish();
+        } else {
+            mSearchActionView.clearSearchQuery();
+            showSearchActionBar(SEARCH_VIEW_STATE_GONE);
+        }
+    }
+
+    public void onSearchPerformed(String query) {
+        query = query.trim();
+        if (!TextUtils.isEmpty(query)) {
+            mSearchActionView.clearSearchQuery();
+            mController.executeSearch(query);
+        }
+    }
+
+    public void onVoiceSearch() {
+        final Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
+        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
+                RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
+        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault().getLanguage());
+
+        // Some devices do not support the voice-to-speech functionality.
+        try {
+            mActivity.startActivityForResult(intent,
+                    AbstractActivityController.VOICE_SEARCH_REQUEST_CODE);
+        } catch (ActivityNotFoundException e) {
+            final String toast =
+                    mActivity.getResources().getString(R.string.voice_search_not_supported);
+            Toast.makeText(mActivity, toast, Toast.LENGTH_LONG).show();
+        }
+    }
+
+    public void saveRecentQuery(String query) {
+        new SaveRecentQueryTask().execute(query);
+    }
+
+    // static asynctask to save the query in the background.
+    private class SaveRecentQueryTask extends AsyncTask<String, Void, Void> {
+
+        @Override
+        protected void onPreExecute() {
+            mSavePending = true;
+        }
+
+        @Override
+        protected Void doInBackground(String... args) {
+            mSuggestionsProvider.saveRecentQuery(args[0]);
+            return null;
+        }
+
+        @Override
+        protected void onPostExecute(Void aVoid) {
+            if (mDestroyProvider) {
+                mSuggestionsProvider.cleanup();
+                mDestroyProvider = false;
+            }
+            mSavePending = false;
+        }
+    }
+}
diff --git a/src/com/android/mail/ui/MiniDrawerView.java b/src/com/android/mail/ui/MiniDrawerView.java
index 83c8f5d..b7d9286 100644
--- a/src/com/android/mail/ui/MiniDrawerView.java
+++ b/src/com/android/mail/ui/MiniDrawerView.java
@@ -17,21 +17,22 @@
 package com.android.mail.ui;
 
 import android.content.Context;
-import android.support.annotation.LayoutRes;
+import android.database.DataSetObserver;
+import android.graphics.Rect;
 import android.util.AttributeSet;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
+import android.widget.ListAdapter;
 
 import com.android.mail.R;
-import com.android.mail.bitmap.AccountAvatarDrawable;
 import com.android.mail.content.ObjectCursor;
-import com.android.mail.providers.Account;
 import com.android.mail.providers.Folder;
-import com.google.common.collect.Lists;
+import com.android.mail.utils.LogUtils;
 
-import java.util.List;
+import java.util.ArrayDeque;
+import java.util.Queue;
 
 /**
  * A smaller version of the account- and folder-switching drawer view for tablet UIs.
@@ -39,17 +40,9 @@
 public class MiniDrawerView extends LinearLayout {
 
     private FolderListFragment mController;
-    private final int mDrawWidth;
-    // use the same dimen as AccountItemView to participate in recycling
-    // TODO: but Material account switcher doesn't recycle...
-    private final int mAvatarDecodeSize;
 
-    private View mDotdotdot;
     private View mSpacer;
 
-    private AccountItem mCurrentAccount;
-    private final List<AccountItem> mRecentAccounts = Lists.newArrayList();
-
     private final LayoutInflater mInflater;
 
     private static final int NUM_RECENT_ACCOUNTS = 2;
@@ -61,9 +54,6 @@
     public MiniDrawerView(Context context, AttributeSet attrs) {
         super(context, attrs);
 
-        mDrawWidth = getResources().getDimensionPixelSize(R.dimen.two_pane_drawer_width_mini);
-        mAvatarDecodeSize = getResources().getDimensionPixelSize(R.dimen.account_avatar_dimension);
-
         mInflater = LayoutInflater.from(context);
     }
 
@@ -71,68 +61,80 @@
     protected void onFinishInflate() {
         super.onFinishInflate();
 
-        mCurrentAccount = new AccountItem((ImageView) findViewById(R.id.current_account_avatar));
         mSpacer = findViewById(R.id.spacer);
-        mDotdotdot = findViewById(R.id.dotdotdot);
-        mDotdotdot.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                mController.toggleDrawerState();
-            }
-        });
+    }
+
+    @Override
+    public boolean requestFocus(int direction, Rect previouslyFocusedRect) {
+        // This ViewGroup is focusable purely so it can act as a stable target for other views to
+        // designate as their left/right focus ID. When focus comes to this view, the XML
+        // declaration of descendantFocusability=FOCUS_AFTER_DESCENDANTS means it will always try
+        // to focus one of its children before resorting to this (great! we basically never want
+        // this container to gain focus).
+        //
+        // But the usual focus search towards the LEFT (in LTR) actually starts at the bottom,
+        // which is weird. So override all focus requests that land on this parent to use the
+        // FORWARD direction so the top-most item gets first focus. This will not affect focus
+        // traversal within this ViewGroup as the descendantFocusability prevents the parent from
+        // gaining focus.
+        return super.requestFocus(FOCUS_DOWN, previouslyFocusedRect);
     }
 
     public void setController(FolderListFragment flf) {
         mController = flf;
+        final ListAdapter adapter = mController.getMiniDrawerAccountsAdapter();
+        adapter.registerDataSetObserver(new Observer());
+    }
 
-        if (!mController.isMiniDrawerEnabled()) {
-            return;
+    private class Observer extends DataSetObserver {
+
+        @Override
+        public void onChanged() {
+            refresh();
         }
-
-        // wait for the controller to set these up
-        mCurrentAccount.setupDrawable();
     }
 
     public void refresh() {
-        if (mController == null) {
+        if (mController == null || !mController.isAdded()) {
             return;
         }
 
-        final Account currentAccount = mController.getCurrentAccount();
-        if (currentAccount != null) {
-            mCurrentAccount.setAccount(currentAccount);
+        final ListAdapter adapter =
+                mController.getMiniDrawerAccountsAdapter();
+
+        if (adapter.getCount() > 0) {
+            final View oldCurrentAccountView = getChildAt(0);
+            if (oldCurrentAccountView != null) {
+                removeView(oldCurrentAccountView);
+            }
+            final View newCurrentAccountView = adapter.getView(0, oldCurrentAccountView, this);
+            newCurrentAccountView.setClickable(false);
+            newCurrentAccountView.setFocusable(false);
+            addView(newCurrentAccountView, 0);
+        }
+
+        final int removePos = indexOfChild(mSpacer) + 1;
+        final int recycleCount = getChildCount() - removePos;
+        final Queue<View> recycleViews = new ArrayDeque<>(recycleCount);
+        for (int recycleIndex = 0; recycleIndex < recycleCount; recycleIndex++) {
+            final View recycleView = getChildAt(removePos);
+            recycleViews.add(recycleView);
+            removeView(recycleView);
+        }
+
+        final int adapterCount = Math.min(adapter.getCount(), NUM_RECENT_ACCOUNTS + 1);
+        for (int accountIndex = 1; accountIndex < adapterCount; accountIndex++) {
+            final View recycleView = recycleViews.poll();
+            final View accountView = adapter.getView(accountIndex, recycleView, this);
+            addView(accountView);
         }
 
         View child;
-
-        // TODO: figure out the N most recent accounts, don't just take the first few
-        final int removePos = indexOfChild(mSpacer) + 1;
-        if (getChildCount() > removePos) {
-            removeViews(removePos, getChildCount() - removePos);
-        }
-        final Account[] accounts = mController.getAllAccounts();
-        int count = 0;
-        for (Account a : accounts) {
-            if (count >= NUM_RECENT_ACCOUNTS) {
-                break;
-            }
-            if (currentAccount.uri.equals(a.uri)) {
-                continue;
-            }
-            final ImageView iv = (ImageView) mInflater.inflate(
-                    R.layout.mini_drawer_recent_account_item, this, false /* attachToRoot */);
-            final AccountItem item = new AccountItem(iv);
-            item.setupDrawable();
-            item.setAccount(a);
-            iv.setTag(item);
-            addView(iv);
-            count++;
-        }
-
         // reset the inbox views for this account
-        while ((child=getChildAt(1)) != mDotdotdot) {
+        while ((child=getChildAt(1)) != mSpacer) {
             removeView(child);
         }
+
         final ObjectCursor<Folder> folderCursor = mController.getFoldersCursor();
         if (folderCursor != null && !folderCursor.isClosed()) {
             int pos = -1;
@@ -140,10 +142,13 @@
             while (folderCursor.moveToPosition(++pos)) {
                 final Folder f = folderCursor.getModel();
                 if (f.isInbox()) {
-                    final ImageView iv = (ImageView) mInflater.inflate(
+                    final View view = mInflater.inflate(
                             R.layout.mini_drawer_folder_item, this, false /* attachToRoot */);
+                    final ImageView iv = (ImageView) view.findViewById(R.id.image_view);
                     iv.setTag(new FolderItem(f, iv));
-                    addView(iv, 1 + numInboxes);
+                    iv.setContentDescription(f.name);
+                    view.setActivated(mController.isSelectedFolder(f));
+                    addView(view, 1 + numInboxes);
                     numInboxes++;
                 }
             }
@@ -167,36 +172,84 @@
         }
     }
 
-    private class AccountItem implements View.OnClickListener {
-        private Account mAccount;
-        // FIXME: this codepath doesn't use GMS Core, resulting in inconsistent avatars
-        // vs. ownerslib. switch to a generic photo getter+listener interface on FLF
-        // so these drawables are obtainable regardless of how they are loaded.
-        private AccountAvatarDrawable mDrawable;
-        public final ImageView view;
-
-        public AccountItem(ImageView iv) {
-            view = iv;
-            view.setOnClickListener(this);
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        // We want to make sure that all children get measured. These will be re-hidden in onLayout
+        // according to space constraints.
+        // This means we can't set views to Gone elsewhere, which is kind of unfortunate.
+        final int childCount = getChildCount();
+        for (int i = 0; i < childCount; i++) {
+            final View child = getChildAt(i);
+            child.setVisibility(View.VISIBLE);
         }
-
-        public void setupDrawable() {
-            mDrawable = new AccountAvatarDrawable(getResources(),
-                    mController.getBitmapCache(), mController.getContactResolver());
-            mDrawable.setDecodeDimensions(mAvatarDecodeSize, mAvatarDecodeSize);
-            view.setImageDrawable(mDrawable);
-        }
-
-        public void setAccount(Account acct) {
-            mAccount = acct;
-            mDrawable.bind(mAccount.getSenderName(), mAccount.getEmailAddress());
-        }
-
-        @Override
-        public void onClick(View v) {
-            mController.onAccountSelected(mAccount);
-        }
-
+        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
     }
 
+    @Override
+    protected void onLayout(boolean changed, int l, int t, int r, int b) {
+        if (getChildCount() == 0) {
+            return;
+        }
+        final int availableHeight = getMeasuredHeight() - getPaddingBottom() - getPaddingTop();
+
+        int childHeight = 0;
+        final int childCount = getChildCount();
+        for (int i = 0; i < childCount; i++) {
+            final View child = getChildAt(i);
+            if (child.equals(mSpacer) || child.getVisibility() == View.GONE) {
+                continue;
+            }
+            final LayoutParams params = (LayoutParams) child.getLayoutParams();
+            childHeight += params.topMargin + params.bottomMargin + child.getMeasuredHeight();
+        }
+
+        if (childHeight <= availableHeight) {
+            // Nothing to do here
+            super.onLayout(changed, l, t, r, b);
+            return;
+        }
+
+        // Check again
+        if (childHeight <= availableHeight) {
+            // Fit the spacer to the remaining height
+            measureSpacer(availableHeight - childHeight);
+            super.onLayout(changed, l, t, r, b);
+            return;
+        }
+
+        // Sanity check
+        if (getChildAt(getChildCount() - 1).equals(mSpacer)) {
+            LogUtils.v(LogUtils.TAG, "The ellipsis was the last item in the minidrawer and " +
+                    "hiding it didn't help fit all the views");
+            return;
+        }
+
+        final View childToHide = getChildAt(indexOfChild(mSpacer) + 1);
+        childToHide.setVisibility(View.GONE);
+
+        final LayoutParams childToHideParams = (LayoutParams) childToHide.getLayoutParams();
+        childHeight -= childToHideParams.topMargin + childToHideParams.bottomMargin +
+                childToHide.getMeasuredHeight();
+
+        // Check again
+        if (childHeight <= availableHeight) {
+            // Fit the spacer to the remaining height
+            measureSpacer(availableHeight - childHeight);
+            super.onLayout(changed, l, t, r, b);
+            return;
+        }
+
+        LogUtils.v(LogUtils.TAG, "Hid two children in the minidrawer and still couldn't fit " +
+                "all the views");
+    }
+
+    private void measureSpacer(int height) {
+        final LayoutParams spacerParams = (LayoutParams) mSpacer.getLayoutParams();
+        final int spacerHeight = height -
+                spacerParams.bottomMargin - spacerParams.topMargin;
+        final int spacerWidth = getMeasuredWidth() - getPaddingLeft() - getPaddingRight();
+        mSpacer.measure(MeasureSpec.makeMeasureSpec(spacerWidth, MeasureSpec.AT_MOST),
+                MeasureSpec.makeMeasureSpec(spacerHeight, MeasureSpec.EXACTLY));
+
+    }
 }
diff --git a/src/com/android/mail/ui/MultiFoldersSelectionDialog.java b/src/com/android/mail/ui/MultiFoldersSelectionDialog.java
index e708756..0a29de8 100644
--- a/src/com/android/mail/ui/MultiFoldersSelectionDialog.java
+++ b/src/com/android/mail/ui/MultiFoldersSelectionDialog.java
@@ -104,6 +104,7 @@
                         // The number of view types changes here, so we have to reset the listview's
                         // adapter.
                         dialog.getListView().setAdapter(null);
+                        dialog.getListView().setDivider(null);
 
                         final HashSet<String> checked = new HashSet<String>();
                         for (final Conversation conversation : mTarget) {
diff --git a/src/com/android/mail/ui/NestedFolderTeaserView.java b/src/com/android/mail/ui/NestedFolderTeaserView.java
index e221f17..f3fe63e 100644
--- a/src/com/android/mail/ui/NestedFolderTeaserView.java
+++ b/src/com/android/mail/ui/NestedFolderTeaserView.java
@@ -21,7 +21,6 @@
 import android.content.Context;
 import android.content.Loader;
 import android.content.res.Resources;
-import android.graphics.Color;
 import android.net.Uri;
 import android.os.Bundle;
 import android.support.v4.text.BidiFormatter;
@@ -77,14 +76,15 @@
 
     private final SparseArrayCompat<FolderHolder> mFolderHolders =
             new SparseArrayCompat<FolderHolder>();
+    private ImmutableSortedSet<FolderHolder> mSortedFolderHolders;
 
     private final int mFolderItemUpdateDelayMs;
 
-    private int mAnimatedHeight = -1;
-
+    private final LayoutInflater mInflater;
     private ViewGroup mNestedFolderContainer;
 
     private View mShowMoreFoldersRow;
+    private ImageView mShowMoreFoldersIcon;
     private TextView mShowMoreFoldersTextView;
     private TextView mShowMoreFoldersCountTextView;
 
@@ -94,12 +94,6 @@
      */
     private boolean mCollapsed = true;
 
-    private View mTeaserRightEdge;
-    /** Whether we are on a tablet device or not */
-    private final boolean mTabletDevice;
-    /** When in conversation mode, true if the list is hidden */
-    private final boolean mListCollapsible;
-
     /** If <code>true</code>, the list of folders has updated since the view was last shown. */
     private boolean mListUpdated;
 
@@ -121,14 +115,16 @@
         private final View mItemView;
         private final TextView mSendersTextView;
         private final TextView mCountTextView;
+        private final ImageView mFolderIconImageView;
         private Folder mFolder;
         private List<String> mUnreadSenders = ImmutableList.of();
 
         public FolderHolder(final View itemView, final TextView sendersTextView,
-                final TextView countTextView) {
+                final TextView countTextView, final ImageView folderIconImageView) {
             mItemView = itemView;
             mSendersTextView = sendersTextView;
             mCountTextView = countTextView;
+            mFolderIconImageView = folderIconImageView;
         }
 
         public void setFolder(final Folder folder) {
@@ -147,6 +143,8 @@
             return mCountTextView;
         }
 
+        public ImageView getFolderIconImageView() { return mFolderIconImageView; }
+
         public Folder getFolder() {
             return mFolder;
         }
@@ -190,24 +188,23 @@
                     resources.getInteger(R.integer.nested_folders_collapse_threshold);
         }
 
-        mFolderItemUpdateDelayMs =
-                resources.getInteger(R.integer.folder_item_refresh_delay_ms);
-
-        mTabletDevice = com.android.mail.utils.Utils.useTabletUI(resources);
-        mListCollapsible = resources.getBoolean(R.bool.list_collapsible);
+        mFolderItemUpdateDelayMs = resources.getInteger(R.integer.folder_item_refresh_delay_ms);
+        mInflater = LayoutInflater.from(context);
     }
 
     @Override
     protected void onFinishInflate() {
         mNestedFolderContainer = (ViewGroup) findViewById(R.id.nested_folder_container);
-        mTeaserRightEdge = findViewById(R.id.teaser_right_edge);
 
         mShowMoreFoldersRow = findViewById(R.id.show_more_folders_row);
         mShowMoreFoldersRow.setOnClickListener(mShowMoreOnClickListener);
 
-        mShowMoreFoldersTextView = (TextView) findViewById(R.id.show_more_folders_textView);
+        mShowMoreFoldersIcon =
+                (ImageView) mShowMoreFoldersRow.findViewById(R.id.show_more_folders_icon);
+        mShowMoreFoldersTextView =
+                (TextView) mShowMoreFoldersRow.findViewById(R.id.show_more_folders_textView);
         mShowMoreFoldersCountTextView =
-                (TextView) findViewById(R.id.show_more_folders_count_textView);
+                (TextView) mShowMoreFoldersRow.findViewById(R.id.show_more_folders_count_textView);
     }
 
     public void bind(final Account account, final FolderSelector listener) {
@@ -219,19 +216,17 @@
      * Creates a {@link FolderHolder}.
      */
     private FolderHolder createFolderHolder(final CharSequence folderName) {
-        final View itemView =
-                LayoutInflater.from(getContext()).inflate(R.layout.folder_teaser_item, null);
-
-        final ImageView imageView = (ImageView) itemView.findViewById(R.id.folder_imageView);
-        imageView.setImageResource(R.drawable.ic_menu_move_to_holo_light);
-        // Remove background
-        imageView.setBackgroundColor(Color.TRANSPARENT);
+        final View itemView = mInflater.inflate(R.layout.folder_teaser_item, mNestedFolderContainer,
+                false /* attachToRoot */);
 
         ((TextView) itemView.findViewById(R.id.folder_textView)).setText(folderName);
         final TextView sendersTextView = (TextView) itemView.findViewById(R.id.senders_textView);
-        final TextView countTextView = (TextView) itemView.findViewById(R.id.count_textView);
-        final FolderHolder holder = new FolderHolder(itemView, sendersTextView, countTextView);
-
+        final TextView countTextView = (TextView) itemView.findViewById(R.id.unread_count_textView);
+        final ImageView folderIconImageView =
+                (ImageView) itemView.findViewById(R.id.nested_folder_icon);
+        final FolderHolder holder = new FolderHolder(itemView, sendersTextView, countTextView,
+                folderIconImageView);
+        countTextView.setVisibility(View.VISIBLE);
         attachOnClickListener(itemView, holder);
 
         return holder;
@@ -282,33 +277,14 @@
             // Clear out the folder views
             mNestedFolderContainer.removeAllViews();
 
-            // Sort the folders by name
-            // TODO(skennedy) recents? starred?
-            final ImmutableSortedSet.Builder<FolderHolder> folderHoldersBuilder =
-                    new ImmutableSortedSet.Builder<FolderHolder>(FolderHolder.NAME_COMPARATOR);
-
-            for (int i = 0; i < mFolderHolders.size(); i++) {
-                folderHoldersBuilder.add(mFolderHolders.valueAt(i));
-            }
-
-            final ImmutableSortedSet<FolderHolder> folderHolders = folderHoldersBuilder.build();
-
-            // Add all folder views to the teaser
-            int added = 0;
-            // If we're only over the limit by one, don't truncate the list.
-            boolean truncate = folderHolders.size() > sCollapsedFolderThreshold + 1;
-            for (final FolderHolder folderHolder : folderHolders) {
-                mNestedFolderContainer.addView(folderHolder.getItemView());
-                added++;
-
-                if (truncate && added >= sCollapsedFolderThreshold && mCollapsed) {
-                    // We will display the rest when "Show more" is clicked
-                    break;
+            // We either show all folders if it's not over the threshold, or we show none.
+            if (mSortedFolderHolders.size() <= sCollapsedFolderThreshold || !mCollapsed) {
+                for (final FolderHolder folderHolder : mSortedFolderHolders) {
+                    mNestedFolderContainer.addView(folderHolder.getItemView());
                 }
             }
 
             updateShowMoreView();
-
             mListUpdated = false;
         }
     }
@@ -325,32 +301,28 @@
     private void updateShowMoreView() {
         final int total = mFolderHolders.size();
         final int displayed = mNestedFolderContainer.getChildCount();
-        final int notShown = total - displayed;
 
-        if (notShown > 0) {
+        if (displayed == 0) {
             // We are not displaying all the folders
             mShowMoreFoldersRow.setVisibility(VISIBLE);
+            mShowMoreFoldersIcon.setImageResource(R.drawable.ic_drawer_folder_24dp);
             mShowMoreFoldersTextView.setText(String.format(
-                    getContext().getString(R.string.show_n_more_folders), notShown));
+                    getContext().getString(R.string.show_n_more_folders), total));
             mShowMoreFoldersCountTextView.setVisibility(VISIBLE);
 
             // Get a count of unread messages in other folders
             int unreadCount = 0;
             for (int i = 0; i < mFolderHolders.size(); i++) {
                 final FolderHolder holder = mFolderHolders.valueAt(i);
-
-                if (holder.getItemView().getParent() == null) {
-                    // This view is not shown, so we want to use its unread count
-                    // TODO(skennedy) We want a "nested" unread count, that includes the unread
-                    // count of nested folders
-                    unreadCount += holder.getFolder().unreadCount;
-                }
+                // TODO(skennedy) We want a "nested" unread count, that includes the unread
+                // count of nested folders
+                unreadCount += holder.getFolder().unreadCount;
             }
-
             mShowMoreFoldersCountTextView.setText(Integer.toString(unreadCount));
-        } else if (displayed > sCollapsedFolderThreshold + 1) {
+        } else if (displayed > sCollapsedFolderThreshold) {
             // We are expanded
             mShowMoreFoldersRow.setVisibility(VISIBLE);
+            mShowMoreFoldersIcon.setImageResource(R.drawable.ic_collapse_24dp);
             mShowMoreFoldersTextView.setText(R.string.hide_folders);
             mShowMoreFoldersCountTextView.setVisibility(GONE);
         } else {
@@ -362,13 +334,21 @@
     private void updateViews(final FolderHolder folderHolder) {
         final Folder folder = folderHolder.getFolder();
 
+        // Update unread count
         final String unreadText = Utils.getUnreadCountString(getContext(), folder.unreadCount);
         folderHolder.getCountTextView().setText(unreadText.isEmpty() ? "0" : unreadText);
 
+        // Update unread senders
         final String sendersText = TextUtils.join(
                 getResources().getString(R.string.enumeration_comma),
                 folderHolder.getUnreadSenders());
-        folderHolder.getSendersTextView().setText(sendersText);
+        final TextView sendersTextView = folderHolder.getSendersTextView();
+        if (!TextUtils.isEmpty(sendersText)) {
+            sendersTextView.setVisibility(VISIBLE);
+            sendersTextView.setText(sendersText);
+        } else {
+            sendersTextView.setVisibility(GONE);
+        }
     }
 
     @Override
@@ -431,22 +411,6 @@
         return false;
     }
 
-    @Override
-    protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
-        if (com.android.mail.utils.Utils.getDisplayListRightEdgeEffect(mTabletDevice,
-                mListCollapsible, mAdapter.getViewMode())) {
-            mTeaserRightEdge.setVisibility(VISIBLE);
-        } else {
-            mTeaserRightEdge.setVisibility(GONE);
-        }
-
-        if (mAnimatedHeight == -1) {
-            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-        } else {
-            setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), mAnimatedHeight);
-        }
-    }
-
     private static int getLoaderId(final int folderId) {
         return folderId + LOADER_FOLDER_LIST;
     }
@@ -475,7 +439,7 @@
                 if (data.moveToFirst()) {
                     do {
                         final Folder folder = data.getModel();
-                        final FolderHolder holder = mFolderHolders.get(folder.id);
+                        FolderHolder holder = mFolderHolders.get(folder.id);
 
                         if (holder != null) {
                             final Folder oldFolder = holder.getFolder();
@@ -491,27 +455,41 @@
                             }
                         } else {
                             // Create the holder, and init a loader
-                            final FolderHolder newHolder = createFolderHolder(folder.name);
-                            newHolder.setFolder(folder);
-                            mFolderHolders.put(folder.id, newHolder);
+                            holder = createFolderHolder(folder.name);
+                            holder.setFolder(folder);
+                            mFolderHolders.put(folder.id, holder);
 
                             // We can not support displaying sender info with nested folders
                             // because it doesn't scale. Disabling it for now, until we can
                             // optimize it.
                             // initFolderLoader(getLoaderId(folder.id));
-                            populateUnreadSenders(newHolder, folder.unreadSenders);
+                            populateUnreadSenders(holder, folder.unreadSenders);
 
-                            updateViews(newHolder);
+                            updateViews(holder);
 
                             mListUpdated = true;
                         }
 
+                        if (folder.hasChildren) {
+                            holder.getFolderIconImageView().setImageDrawable(
+                                    getResources().getDrawable(R.drawable.ic_folder_parent_24dp));
+                        }
+
                         // Note: #remove(int) removes from that POSITION
                         //       #remove(Integer) removes that OBJECT
                         oldFolderIds.remove(Integer.valueOf(folder.id));
                     } while (data.moveToNext());
                 }
 
+                // Sort the folders by name
+                // TODO(skennedy) recents? starred?
+                final ImmutableSortedSet.Builder<FolderHolder> folderHoldersBuilder =
+                        new ImmutableSortedSet.Builder<FolderHolder>(FolderHolder.NAME_COMPARATOR);
+                for (int i = 0; i < mFolderHolders.size(); i++) {
+                    folderHoldersBuilder.add(mFolderHolders.valueAt(i));
+                }
+                mSortedFolderHolders = folderHoldersBuilder.build();
+
                 for (final int folderId : oldFolderIds) {
                     // We have a folder that no longer exists
                     mFolderHolders.remove(folderId);
diff --git a/src/com/android/mail/ui/OnePaneController.java b/src/com/android/mail/ui/OnePaneController.java
index 0d0e58d..ef42ab9 100644
--- a/src/com/android/mail/ui/OnePaneController.java
+++ b/src/com/android/mail/ui/OnePaneController.java
@@ -17,13 +17,14 @@
 
 package com.android.mail.ui;
 
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
 import android.app.Activity;
 import android.app.Fragment;
 import android.app.FragmentManager;
 import android.app.FragmentTransaction;
 import android.content.Intent;
 import android.os.Bundle;
-import android.support.annotation.IdRes;
 import android.support.annotation.LayoutRes;
 import android.support.v4.widget.DrawerLayout;
 import android.view.Gravity;
@@ -62,6 +63,39 @@
     /** Whether a conversation list for this account has ever been shown.*/
     private boolean mConversationListNeverShown = true;
 
+    /**
+     * Listener for pager animation to complete and then remove the TL fragment.
+     * This is a work-around for fragment remove animation not working as intended, so we
+     * still get feedback on conversation item tap in the transition from TL to CV.
+     */
+    private final AnimatorListenerAdapter mPagerAnimationListener =
+            new AnimatorListenerAdapter() {
+                @Override
+                public void onAnimationEnd(Animator animation) {
+                    // Make sure that while we were animating, the mode did not change back
+                    // If it's still in conversation view mode, remove the TL fragment from behind
+                    if (mViewMode.isConversationMode()) {
+                        // Once the pager is done animating in, we are ready to remove the
+                        // conversation list fragment. Since we track the fragment by either what's
+                        // in content_pane or by the tag, we grab it and remove without animations
+                        // since it's already covered by the conversation view and its white bg.
+                        final FragmentManager fm = mActivity.getFragmentManager();
+                        final FragmentTransaction ft = fm.beginTransaction();
+                        final Fragment f = fm.findFragmentById(R.id.content_pane);
+                        // FragmentManager#findFragmentById can return fragments that are not
+                        // added to the activity. We want to make sure that we don't attempt to
+                        // remove fragments that are not added to the activity, as when the
+                        // transaction is popped off, the FragmentManager will attempt to read
+                        // the same fragment twice.
+                        if (f != null && f.isAdded()) {
+                            ft.remove(f);
+                            ft.commitAllowingStateLoss();
+                            fm.executePendingTransactions();
+                        }
+                    }
+                }
+            };
+
     public OnePaneController(MailActivity activity, ViewMode viewMode) {
         super(activity, viewMode);
     }
@@ -135,10 +169,11 @@
     }
 
     @Override
-    public boolean onCreate(Bundle savedInstanceState) {
+    public void onCreate(Bundle savedInstanceState) {
         mDrawerContainer = (DrawerLayout) mActivity.findViewById(R.id.drawer_container);
         mDrawerContainer.setDrawerTitle(Gravity.START,
                 mActivity.getActivityContext().getString(R.string.drawer_title));
+        mDrawerContainer.setStatusBarBackground(R.color.primary_dark_color);
         final String drawerPulloutTag = mActivity.getString(R.string.drawer_pullout_tag);
         mDrawerPullout = mDrawerContainer.findViewWithTag(drawerPulloutTag);
         mDrawerPullout.setBackgroundResource(R.color.list_background_color);
@@ -147,7 +182,7 @@
         mActivity.findViewById(R.id.conversation_pager).setVisibility(View.GONE);
 
         // The parent class sets the correct viewmode and starts the application off.
-        return super.onCreate(savedInstanceState);
+        super.onCreate(savedInstanceState);
     }
 
     @Override
@@ -174,6 +209,11 @@
         if (ViewMode.isListMode(newMode)) {
             mPagerController.hide(true /* changeVisibility */);
         }
+
+        if (ViewMode.isAdMode(newMode)) {
+            onConversationListVisibilityChanged(false);
+        }
+
         // When we step away from the conversation mode, we don't have a current conversation
         // anymore. Let's blank it out so clients calling getCurrentConversation are not misled.
         if (!ViewMode.isConversationMode(newMode)) {
@@ -182,17 +222,13 @@
     }
 
     @Override
-    public String toString() {
-        final StringBuilder sb = new StringBuilder(super.toString());
+    protected void appendToString(StringBuilder sb) {
         sb.append(" lastConvListTransId=");
         sb.append(mLastConversationListTransactionId);
-        sb.append("}");
-        return sb.toString();
     }
 
     @Override
-    public void showConversationList(ConversationListContext listContext) {
-        super.showConversationList(listContext);
+    protected void showConversationList(ConversationListContext listContext) {
         enableCabMode();
         mConversationListVisible = true;
         if (ConversationListContext.isSearchResult(listContext)) {
@@ -229,9 +265,16 @@
         mConversationListNeverShown = false;
     }
 
+    /**
+     * Override showConversation with animation parameter so that we animate in the pager when
+     * selecting in the conversation, but don't animate on opening the app from an intent.
+     * @param conversation
+     * @param shouldAnimate true if we want to animate the conversation in, false otherwise
+     */
     @Override
-    protected void showConversation(Conversation conversation) {
-        super.showConversation(conversation);
+    protected void showConversation(Conversation conversation, boolean shouldAnimate) {
+        super.showConversation(conversation, shouldAnimate);
+
         mConversationListVisible = false;
         if (conversation == null) {
             transitionBackToConversationListMode();
@@ -243,25 +286,9 @@
         } else {
             mViewMode.enterConversationMode();
         }
-        final FragmentManager fm = mActivity.getFragmentManager();
-        final FragmentTransaction ft = fm.beginTransaction();
-        // Switching to conversation view is an incongruous transition:
-        // we are not replacing a fragment with another fragment as
-        // usual. Instead, reveal the heretofore inert conversation
-        // ViewPager and just remove the previously visible fragment
-        // e.g. conversation list, or possibly label list?).
-        final Fragment f = fm.findFragmentById(R.id.content_pane);
-        // FragmentManager#findFragmentById can return fragments that are not added to the activity.
-        // We want to make sure that we don't attempt to remove fragments that are not added to the
-        // activity, as when the transaction is popped off, the FragmentManager will attempt to
-        // readd the same fragment twice
-        if (f != null && f.isAdded()) {
-            ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
-            ft.remove(f);
-            ft.commitAllowingStateLoss();
-            fm.executePendingTransactions();
-        }
-        mPagerController.show(mAccount, mFolder, conversation, true /* changeVisibility */);
+
+        mPagerController.show(mAccount, mFolder, conversation, true /* changeVisibility */,
+                shouldAnimate? mPagerAnimationListener : null);
         onConversationVisibilityChanged(true);
         onConversationListVisibilityChanged(false);
     }
@@ -272,7 +299,7 @@
     }
 
     @Override
-    public void showWaitForInitialization() {
+    protected void showWaitForInitialization() {
         super.showWaitForInitialization();
         replaceFragment(getWaitFragment(), FragmentTransaction.TRANSIT_FRAGMENT_OPEN, TAG_WAIT,
                 R.id.content_pane);
@@ -451,7 +478,8 @@
                             Utils.convertHtmlToPlainText
                                 (op.getDescription(mActivity.getActivityContext())),
                             R.string.undo,
-                            true,  /* replaceVisibleToast */
+                            true /* replaceVisibleToast */,
+                            true /* autohide */,
                             op);
                     break;
                 case ViewMode.SEARCH_RESULTS_LIST:
@@ -462,7 +490,8 @@
                                 Utils.convertHtmlToPlainText
                                     (op.getDescription(mActivity.getActivityContext())),
                                 R.string.undo,
-                                true,  /* replaceVisibleToast */
+                                true /* replaceVisibleToast */,
+                                true /* autohide */,
                                 op);
                     } else {
                         mActivity.setPendingToastOperation(op);
@@ -513,4 +542,21 @@
     public boolean isTwoPaneLandscape() {
         return false;
     }
+
+    @Override
+    public boolean shouldShowSearchBarByDefault(int viewMode) {
+        return viewMode == ViewMode.SEARCH_RESULTS_LIST;
+    }
+
+    @Override
+    public boolean shouldShowSearchMenuItem() {
+        return mViewMode.getMode() == ViewMode.CONVERSATION_LIST;
+    }
+
+    @Override
+    public void addConversationListLayoutListener(
+            TwoPaneLayout.ConversationListLayoutListener listener) {
+        // Do nothing
+    }
+
 }
diff --git a/src/com/android/mail/ui/RecentFolderList.java b/src/com/android/mail/ui/RecentFolderList.java
index b581aaf..f2de589 100644
--- a/src/com/android/mail/ui/RecentFolderList.java
+++ b/src/com/android/mail/ui/RecentFolderList.java
@@ -20,6 +20,7 @@
 import android.content.Context;
 import android.net.Uri;
 import android.os.AsyncTask;
+import android.support.annotation.NonNull;
 
 import com.android.mail.content.ObjectCursor;
 import com.android.mail.providers.Account;
@@ -189,7 +190,7 @@
      * be called with a null folder.
      * @param folder the folder we touched
      */
-    public void touchFolder(Folder folder, Account account) {
+    public void touchFolder(@NonNull Folder folder, Account account) {
         // We haven't got a valid account yet, cannot proceed.
         if (mAccount == null || !mAccount.equals(account)) {
             if (account != null) {
@@ -199,7 +200,6 @@
                 return;
             }
         }
-        assert (folder != null);
 
         if (folder.isProviderFolder() || folder.isType(FolderType.SEARCH)) {
             LogUtils.d(TAG, "Not touching recent folder because it's provider or search folder");
diff --git a/src/com/android/mail/ui/SearchActionBarController.java b/src/com/android/mail/ui/SearchActionBarController.java
deleted file mode 100644
index 97f1fbe..0000000
--- a/src/com/android/mail/ui/SearchActionBarController.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc.
- * Licensed to 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.mail.ui;
-
-import android.content.Context;
-import android.support.v4.view.MenuItemCompat;
-import android.support.v7.widget.SearchView;
-import android.text.TextUtils;
-import android.view.Menu;
-import android.view.MenuItem;
-
-import com.android.mail.ConversationListContext;
-import com.android.mail.utils.Utils;
-
-/**
- * This class is used to control the actionbar for the search activity.
- * It shows/hides various menu items based on the viewmode.
- */
-public class SearchActionBarController extends ActionBarController {
-
-    public SearchActionBarController(Context context) {
-        super(context);
-    }
-
-    @Override
-    public boolean onPrepareOptionsMenu(Menu menu) {
-        super.onPrepareOptionsMenu(menu);
-        switch (getMode()) {
-            case ViewMode.SEARCH_RESULTS_LIST:
-                setSearchQueryTerm();
-                mActionBar.setDisplayHomeAsUpEnabled(true);
-                // And immediately give up focus to avoid keyboard popping and suggestions.
-                clearSearchFocus();
-                break;
-            case ViewMode.SEARCH_RESULTS_CONVERSATION:
-                if (mIsOnTablet) {
-                    setSearchQueryTerm();
-                }
-                mActionBar.setDisplayHomeAsUpEnabled(true);
-                // And immediately give up focus to avoid keyboard popping and suggestions.
-                clearSearchFocus();
-                break;
-        }
-        return false;
-    }
-
-    @Override
-    public void onViewModeChanged(int newMode) {
-        super.onViewModeChanged(newMode);
-        switch (getMode()) {
-            case ViewMode.SEARCH_RESULTS_LIST:
-                setEmptyMode();
-                break;
-        }
-    }
-
-    /**
-     * Remove focus from the search field to avoid
-     * 1. The keyboard popping in and out.
-     * 2. The search suggestions shown up.
-     */
-    private void clearSearchFocus() {
-        // Remove focus from the search action menu in search results mode so
-        // the IME and the suggestions don't get in the way.
-        final MenuItem search = getSearch();
-        if (search != null) {
-            final SearchView searchWidget = (SearchView) MenuItemCompat.getActionView(search);
-            searchWidget.clearFocus();
-        }
-    }
-
-    /**
-     * Sets the query term in the text field, so the user can see what was searched for.
-     */
-    private void setSearchQueryTerm() {
-        final MenuItem search = getSearch();
-        if (search != null) {
-            MenuItemCompat.expandActionView(search);
-            final String query = mActivity.getIntent().getStringExtra(
-                    ConversationListContext.EXTRA_SEARCH_QUERY);
-            final SearchView searchWidget = (SearchView) MenuItemCompat.getActionView(search);
-            if (!TextUtils.isEmpty(query)) {
-                searchWidget.setQuery(query, false);
-            }
-        }
-    }
-
-    @Override
-    public boolean onMenuItemActionCollapse(MenuItem item) {
-        // When we are in the search activity, back closes the search action mode. At that point
-        // we want to quit the activity entirely.
-        final int mode = getMode();
-        if (mode == ViewMode.SEARCH_RESULTS_LIST
-                || (Utils.showTwoPaneSearchResults(getContext())
-                        && mode == ViewMode.SEARCH_RESULTS_CONVERSATION)) {
-
-            // When the action menu is collapsed, the search activity has finished.  We should exit
-            // search at this point
-            mController.exitSearchMode();
-        }
-        // The return value here is whether we want to collapse the action mode. Since we want to
-        // collapse the action mode, we should return true.
-        return true;
-    }
-}
diff --git a/src/com/android/mail/ui/SecureConversationViewFragment.java b/src/com/android/mail/ui/SecureConversationViewFragment.java
index 7c4a9d9..7c80380 100644
--- a/src/com/android/mail/ui/SecureConversationViewFragment.java
+++ b/src/com/android/mail/ui/SecureConversationViewFragment.java
@@ -33,6 +33,7 @@
 import com.android.mail.browse.ConversationViewHeader;
 import com.android.mail.browse.MessageCursor;
 import com.android.mail.browse.MessageHeaderView;
+import com.android.mail.compose.ComposeActivity;
 import com.android.mail.content.ObjectCursor;
 import com.android.mail.providers.Account;
 import com.android.mail.providers.Conversation;
@@ -290,4 +291,20 @@
     protected void printConversation() {
         mViewController.printMessage();
     }
+
+    @Override
+    protected void handleReply() {
+        final ConversationMessage msg = mViewController.getMessage();
+        if (msg != null) {
+            ComposeActivity.reply(getActivity(), mAccount, msg);
+        }
+    }
+
+    @Override
+    protected void handleReplyAll() {
+        final ConversationMessage msg = mViewController.getMessage();
+        if (msg != null) {
+            ComposeActivity.replyAll(getActivity(), mAccount, msg);
+        }
+    }
 }
diff --git a/src/com/android/mail/ui/SeparatedFolderListAdapter.java b/src/com/android/mail/ui/SeparatedFolderListAdapter.java
index b79dd5c..0df74de 100644
--- a/src/com/android/mail/ui/SeparatedFolderListAdapter.java
+++ b/src/com/android/mail/ui/SeparatedFolderListAdapter.java
@@ -44,7 +44,7 @@
             int size = adapter.getCount();
 
             // check if position inside this section
-            if (position == 0 || position < size)
+            if (position < size)
                 return adapter.getItem(position);
 
             // otherwise jump into next section
@@ -78,7 +78,7 @@
         for (FolderSelectorAdapter adapter : mSections) {
             int size = adapter.getCount();
             // check if position inside this section
-            if (position == 0 || position < size) {
+            if (position < size) {
                 return type + adapter.getItemViewType(position);
             }
 
@@ -94,7 +94,7 @@
     public View getView(int position, View convertView, ViewGroup parent) {
         for (FolderSelectorAdapter adapter : mSections) {
             int size = adapter.getCount();
-            if (position == 0 || position < size) {
+            if (position < size) {
                 return adapter.getView(position, convertView, parent);
             }
             // otherwise jump into next section
diff --git a/src/com/android/mail/ui/SingleFolderSelectionDialog.java b/src/com/android/mail/ui/SingleFolderSelectionDialog.java
index a61ded0..9220cc1 100644
--- a/src/com/android/mail/ui/SingleFolderSelectionDialog.java
+++ b/src/com/android/mail/ui/SingleFolderSelectionDialog.java
@@ -80,6 +80,7 @@
                         // The number of view types changes here, so we have to reset the ListView's
                         // adapter.
                         dialog.getListView().setAdapter(null);
+                        dialog.getListView().setDivider(null);
 
                         mAdapter.clearSections();
 
diff --git a/src/com/android/mail/ui/SwipeHelper.java b/src/com/android/mail/ui/SwipeHelper.java
index 18cfb41..3bf393b 100644
--- a/src/com/android/mail/ui/SwipeHelper.java
+++ b/src/com/android/mail/ui/SwipeHelper.java
@@ -455,7 +455,7 @@
 
         void onDragCancelled(SwipeableItemView v);
 
-        ConversationSelectionSet getSelectionSet();
+        ConversationCheckedSet getCheckedSet();
 
         LeaveBehindItem getLastSwipedItem();
     }
diff --git a/src/com/android/mail/ui/SwipeableListView.java b/src/com/android/mail/ui/SwipeableListView.java
index 13a8085..39429d0 100644
--- a/src/com/android/mail/ui/SwipeableListView.java
+++ b/src/com/android/mail/ui/SwipeableListView.java
@@ -28,7 +28,6 @@
 import android.view.ViewConfiguration;
 import android.widget.AbsListView;
 import android.widget.AbsListView.OnScrollListener;
-import android.widget.HeaderViewListAdapter;
 import android.widget.ListView;
 
 import com.android.mail.R;
@@ -50,12 +49,23 @@
 import java.util.HashMap;
 
 public class SwipeableListView extends ListView implements Callback, OnScrollListener {
+    private static final long INVALID_CONVERSATION_ID = -1;
+
     private final SwipeHelper mSwipeHelper;
+    /**
+     * Are swipes enabled on all items? (Each individual item can still prevent swiping.)<br>
+     * When swiping is disabled, the UI still reacts to the gesture to acknowledge it.
+     */
     private boolean mEnableSwipe = false;
+    /**
+     * When set, we prevent the SwipeHelper from kicking in at all. This
+     * short-circuits {@link #mEnableSwipe}.
+     */
+    private boolean mPreventSwipesEntirely = false;
 
     public static final String LOG_TAG = LogTag.getLogTag();
 
-    private ConversationSelectionSet mConvSelectionSet;
+    private ConversationCheckedSet mConvCheckedSet;
     private int mSwipeAction;
     private Account mAccount;
     private Folder mFolder;
@@ -64,6 +74,8 @@
 
     private SwipeListener mSwipeListener;
 
+    private long mSelectedConversationId = INVALID_CONVERSATION_ID;
+
     // Instantiated through view inflation
     @SuppressWarnings("unused")
     public SwipeableListView(Context context) {
@@ -76,11 +88,11 @@
 
     public SwipeableListView(Context context, AttributeSet attrs, int defStyle) {
         super(context, attrs, defStyle);
-        setOnScrollListener(this);
         float densityScale = getResources().getDisplayMetrics().density;
         float pagingTouchSlop = ViewConfiguration.get(context).getScaledPagingTouchSlop();
         mSwipeHelper = new SwipeHelper(context, SwipeHelper.X, this, densityScale,
                 pagingTouchSlop);
+        mScrolling = false;
     }
 
     @Override
@@ -110,6 +122,20 @@
         mEnableSwipe = enable;
     }
 
+    /**
+     * Completely ignore any horizontal swiping gestures.
+     */
+    public void preventSwipesEntirely() {
+        mPreventSwipesEntirely = true;
+    }
+
+    /**
+     * Reverses a prior call to {@link #preventSwipesEntirely()}.
+     */
+    public void stopPreventingSwipes() {
+        mPreventSwipesEntirely = false;
+    }
+
     public void setSwipeAction(int action) {
         mSwipeAction = action;
     }
@@ -122,8 +148,8 @@
         return mSwipeAction;
     }
 
-    public void setSelectionSet(ConversationSelectionSet set) {
-        mConvSelectionSet = set;
+    public void setCheckedSet(ConversationCheckedSet set) {
+        mConvCheckedSet = set;
     }
 
     public void setCurrentAccount(Account account) {
@@ -135,8 +161,8 @@
     }
 
     @Override
-    public ConversationSelectionSet getSelectionSet() {
-        return mConvSelectionSet;
+    public ConversationCheckedSet getCheckedSet() {
+        return mConvCheckedSet;
     }
 
     @Override
@@ -144,13 +170,14 @@
         if (mScrolling) {
             return super.onInterceptTouchEvent(ev);
         } else {
-            return mSwipeHelper.onInterceptTouchEvent(ev) || super.onInterceptTouchEvent(ev);
+            return (!mPreventSwipesEntirely && mSwipeHelper.onInterceptTouchEvent(ev))
+                    || super.onInterceptTouchEvent(ev);
         }
     }
 
     @Override
     public boolean onTouchEvent(MotionEvent ev) {
-        return mSwipeHelper.onTouchEvent(ev) || super.onTouchEvent(ev);
+        return (!mPreventSwipesEntirely && mSwipeHelper.onTouchEvent(ev)) || super.onTouchEvent(ev);
     }
 
     @Override
@@ -246,12 +273,12 @@
             mSwipedListener.onListItemSwiped(convList);
         }
         adapter.notifyDataSetChanged();
-        if (mConvSelectionSet != null && !mConvSelectionSet.isEmpty()
-                && mConvSelectionSet.contains(conv)) {
-            mConvSelectionSet.toggle(conv);
+        if (mConvCheckedSet != null && !mConvCheckedSet.isEmpty()
+                && mConvCheckedSet.contains(conv)) {
+            mConvCheckedSet.toggle(conv);
             // Don't commit destructive actions if the item we just removed from
             // the selection set is the item we just destroyed!
-            if (!conv.isMostlyDead() && mConvSelectionSet.isEmpty()) {
+            if (!conv.isMostlyDead() && mConvCheckedSet.isEmpty()) {
                 commitDestructiveActions(true);
             }
         }
@@ -337,17 +364,9 @@
 
     @Override
     public boolean performItemClick(View view, int pos, long id) {
-        final int previousPosition = getCheckedItemPosition();
-        final boolean selectionSetEmpty = mConvSelectionSet.isEmpty();
-
         // Superclass method modifies the selection set
         final boolean handled = super.performItemClick(view, pos, id);
 
-        // If we are in CAB mode then a click shouldn't
-        // activate the new item, it should only add it to the selection set
-        if (!selectionSetEmpty && previousPosition != -1) {
-            setItemChecked(previousPosition, true);
-        }
         // Commit any existing destructive actions when the user selects a
         // conversation to view.
         commitDestructiveActions(true);
@@ -391,6 +410,59 @@
         return mScrolling;
     }
 
+    /**
+     * Set the currently selected (focused by the list view) position.
+     */
+    public void setSelectedConversation(Conversation conv) {
+        if (conv == null) {
+            return;
+        }
+
+        mSelectedConversationId = conv.id;
+    }
+
+    public boolean isConversationSelected(Conversation conv) {
+        return mSelectedConversationId != INVALID_CONVERSATION_ID && conv != null
+                && mSelectedConversationId == conv.id;
+    }
+
+    /**
+     * This is only used for debugging/logging purposes. DO NOT call this function to try to get
+     * the currently selected position. Use {@link #mSelectedConversationId} instead.
+     */
+    public int getSelectedConversationPosDebug() {
+        for (int i = getFirstVisiblePosition(); i < getLastVisiblePosition(); i++) {
+            final Object item = getItemAtPosition(i);
+            if (item instanceof ConversationCursor) {
+                final Conversation c = ((ConversationCursor) item).getConversation();
+                if (c.id == mSelectedConversationId) {
+                    return i;
+                }
+            }
+        }
+        return ListView.INVALID_POSITION;
+    }
+
+    @Override
+    public void onTouchModeChanged(boolean isInTouchMode) {
+        super.onTouchModeChanged(isInTouchMode);
+        if (!isInTouchMode) {
+            // We need to invalidate going from touch mode -> keyboard mode because the currently
+            // selected item might have changed in touch mode. However, since from the framework's
+            // perspective the selected position doesn't matter in touch mode, when we enter
+            // keyboard mode via up/down arrow, the list view will ONLY invalidate the newly
+            // selected item and not the currently selected item. As a result, we might get an
+            // inconsistent UI where it looks like both the old and new selected items are focused.
+            final int index = getSelectedItemPosition();
+            if (index != ListView.INVALID_POSITION) {
+                final View child = getChildAt(index - getFirstVisiblePosition());
+                if (child != null) {
+                    child.invalidate();
+                }
+            }
+        }
+    }
+
     @Override
     public void cancelDismissCounter() {
         AnimatedAdapter adapter = getAnimatedAdapter();
diff --git a/src/com/android/mail/ui/ThumbnailLoadTask.java b/src/com/android/mail/ui/ThumbnailLoadTask.java
index 71e2cc2..3709eee 100644
--- a/src/com/android/mail/ui/ThumbnailLoadTask.java
+++ b/src/com/android/mail/ui/ThumbnailLoadTask.java
@@ -48,8 +48,17 @@
     private final int mWidth;
     private final int mHeight;
 
-    public static void setupThumbnailPreview(final AttachmentBitmapHolder holder,
-            final Attachment attachment, final Attachment prevAttachment) {
+    public static void setupThumbnailPreview(AttachmentTile.AttachmentPreviewCache cache,
+            AttachmentBitmapHolder holder, Attachment attachment, Attachment prevAttachment) {
+        // Check cache first
+        if (cache != null) {
+            final Bitmap cached = cache.get(attachment);
+            if (cached != null) {
+                holder.setThumbnail(cached);
+                return;
+            }
+        }
+
         final int width = holder.getThumbnailWidth();
         final int height = holder.getThumbnailHeight();
         if (attachment == null || width == 0 || height == 0
@@ -60,7 +69,7 @@
 
         final Uri thumbnailUri = attachment.thumbnailUri;
         final Uri contentUri = attachment.contentUri;
-        final Uri uri = (prevAttachment == null) ? null : prevAttachment.getIdentifierUri();
+        final Uri uri = attachment.getIdentifierUri();
         final Uri prevUri = (prevAttachment == null) ? null : prevAttachment.getIdentifierUri();
         // begin loading a thumbnail if this is an image and either the thumbnail or the original
         // content is ready (and different from any existing image)
diff --git a/src/com/android/mail/ui/TwoPaneController.java b/src/com/android/mail/ui/TwoPaneController.java
index 3be51ff..44600d3 100644
--- a/src/com/android/mail/ui/TwoPaneController.java
+++ b/src/com/android/mail/ui/TwoPaneController.java
@@ -21,14 +21,15 @@
 import android.app.Fragment;
 import android.app.FragmentManager;
 import android.app.FragmentTransaction;
-import android.app.ListFragment;
 import android.content.Intent;
 import android.os.Bundle;
 import android.support.annotation.IdRes;
 import android.support.annotation.LayoutRes;
 import android.support.v7.app.ActionBar;
 import android.view.KeyEvent;
+import android.view.Menu;
 import android.view.View;
+import android.widget.ImageView;
 import android.widget.ListView;
 
 import com.android.mail.ConversationListContext;
@@ -36,9 +37,16 @@
 import com.android.mail.providers.Account;
 import com.android.mail.providers.Conversation;
 import com.android.mail.providers.Folder;
+import com.android.mail.providers.UIProvider.AutoAdvance;
 import com.android.mail.providers.UIProvider.ConversationListIcon;
+import com.android.mail.utils.EmptyStateUtils;
 import com.android.mail.utils.LogUtils;
 import com.android.mail.utils.Utils;
+import com.google.common.base.Objects;
+import com.google.common.collect.Lists;
+
+import java.util.Collection;
+import java.util.List;
 
 /**
  * Controller for two-pane Mail activity. Two Pane is used for tablets, where screen real estate
@@ -50,10 +58,13 @@
     private static final String SAVED_MISCELLANEOUS_VIEW = "saved-miscellaneous-view";
     private static final String SAVED_MISCELLANEOUS_VIEW_TRANSACTION_ID =
             "saved-miscellaneous-view-transaction-id";
+    private static final String SAVED_PEEK_MODE = "saved-peeking";
+    private static final String SAVED_PEEKING_CONVERSATION = "saved-peeking-conv";
 
     private TwoPaneLayout mLayout;
-    @Deprecated
-    private Conversation mConversationToShow;
+    private ImageView mEmptyCvView;
+    private List<TwoPaneLayout.ConversationListLayoutListener> mConversationListLayoutListeners =
+            Lists.newArrayList();
 
     /**
      * 2-pane, in wider configurations, allows peeking at a conversation view without having the
@@ -64,10 +75,37 @@
      * conversation, peeking is implied (in certain view configurations) and this value is
      * meaningless.
      */
-    // TODO: save in instance state
     private boolean mCurrentConversationJustPeeking;
 
     /**
+     * When rotating from land->port->back to land while peeking at a conversation, typically we
+     * would lose the pointer to the conversation being seen in portrait (because in port, we're in
+     * TL mode so conv=null). This is bad if we ever want to go back to landscape, since the user
+     * expectation is that the original peek conversation should appear.
+     * <br>
+     * <p>So save the previous peeking conversation (if any) when restoring in portrait so that a
+     * future landscape restore can load it up.
+     */
+    private Conversation mSavedPeekingConversation;
+
+    /**
+     * The conversation to show (and any extra information about its presentation, like how it was
+     * triggered). Kept here during a transition animation to take effect afterwards.
+     */
+    private ToShow mToShow;
+
+    // For keyboard-focused conversations, we'll put it in a separate runnable.
+    private static final int FOCUSED_CONVERSATION_DELAY_MS = 500;
+    private final Runnable mFocusedConversationRunnable = new Runnable() {
+        @Override
+        public void run() {
+            if (!mActivity.isFinishing()) {
+                showCurrentConversationInPager();
+            }
+        }
+    };
+
+    /**
      * Used to determine whether onViewModeChanged should skip a potential
      * fragment transaction that would remove a miscellaneous view.
      */
@@ -79,13 +117,30 @@
         super(activity, viewMode);
     }
 
+    @Override
+    protected void appendToString(StringBuilder sb) {
+        sb.append(" mPeeking=");
+        sb.append(mCurrentConversationJustPeeking);
+        sb.append(" mSavedPeekConv=");
+        sb.append(mSavedPeekingConversation);
+        if (mToShow != null) {
+            sb.append(" mToShow.conv=");
+            sb.append(mToShow.conversation);
+            sb.append(" mToShow.dueToKeyboard=");
+            sb.append(mToShow.dueToKeyboard);
+        }
+        sb.append(" mLayout=");
+        sb.append(mLayout);
+    }
+
+    @Override
     public boolean isCurrentConversationJustPeeking() {
         return mCurrentConversationJustPeeking;
     }
 
-    private boolean isConversationOnlyMode() {
-        return getCurrentConversation() != null && !isCurrentConversationJustPeeking()
-                && !mLayout.shouldShowPreviewPanel();
+    private boolean isHidingConversationList() {
+        return (mViewMode.isConversationMode() || mViewMode.isAdMode()) &&
+                !mLayout.shouldShowPreviewPanel();
     }
 
     /**
@@ -114,12 +169,12 @@
         fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
         final ConversationListFragment conversationListFragment =
                 ConversationListFragment.newInstance(mConvListContext);
-        fragmentTransaction.replace(R.id.conversation_list_pane, conversationListFragment,
+        fragmentTransaction.replace(R.id.conversation_list_place_holder, conversationListFragment,
                 TAG_CONVERSATION_LIST);
         fragmentTransaction.commitAllowingStateLoss();
         // Set default navigation here once the ConversationListFragment is created.
-        conversationListFragment.setNextFocusLeftId(
-                getClfNextFocusLeftId(getFolderListFragment().isMinimized()));
+        conversationListFragment.setNextFocusStartId(
+                getClfNextFocusStartId());
     }
 
     @Override
@@ -140,8 +195,7 @@
     }
 
     @Override
-    public void showConversationList(ConversationListContext listContext) {
-        super.showConversationList(listContext);
+    protected void showConversationList(ConversationListContext listContext) {
         initializeConversationListFragment();
     }
 
@@ -151,16 +205,17 @@
     }
 
     @Override
-    public boolean onCreate(Bundle savedState) {
+    public void onCreate(Bundle savedState) {
         mLayout = (TwoPaneLayout) mActivity.findViewById(R.id.two_pane_activity);
-            if (mLayout == null) {
+        mEmptyCvView = (ImageView) mActivity.findViewById(R.id.conversation_pane_no_message_view);
+        if (mLayout == null) {
             // We need the layout for everything. Crash/Return early if it is null.
             LogUtils.wtf(LOG_TAG, "mLayout is null!");
-            return false;
+            return;
         }
-        mLayout.setController(this, Intent.ACTION_SEARCH.equals(mActivity.getIntent().getAction()));
+        mLayout.setController(this);
         mActivity.getWindow().setBackgroundDrawable(null);
-        mIsTabletLandscape = !mActivity.getResources().getBoolean(R.bool.list_collapsible);
+        mIsTabletLandscape = mActivity.getResources().getBoolean(R.bool.is_tablet_landscape);
 
         final FolderListFragment flf = getFolderListFragment();
         flf.setMiniDrawerEnabled(true);
@@ -176,7 +231,22 @@
         // notifications upon animation completion:
         // (onConversationVisibilityChanged, onConversationListVisibilityChanged)
         mViewMode.addListener(mLayout);
-        return super.onCreate(savedState);
+
+        super.onCreate(savedState);
+
+        // Restore peek-related state *after* the super-implementation naively restores view mode.
+        if (savedState != null) {
+            mCurrentConversationJustPeeking = savedState.getBoolean(SAVED_PEEK_MODE,
+                    false /* defaultValue */);
+            mSavedPeekingConversation = savedState.getParcelable(SAVED_PEEKING_CONVERSATION);
+            // do the remaining restore work in restoreConversation()
+        }
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        mHandler.removeCallbacks(mFocusedConversationRunnable);
     }
 
     @Override
@@ -185,6 +255,8 @@
 
         outState.putBoolean(SAVED_MISCELLANEOUS_VIEW, mMiscellaneousViewTransactionId >= 0);
         outState.putInt(SAVED_MISCELLANEOUS_VIEW_TRANSACTION_ID, mMiscellaneousViewTransactionId);
+        outState.putBoolean(SAVED_PEEK_MODE, mCurrentConversationJustPeeking);
+        outState.putParcelable(SAVED_PEEKING_CONVERSATION, mSavedPeekingConversation);
     }
 
     @Override
@@ -196,6 +268,42 @@
     }
 
     @Override
+    protected void restoreConversation(Conversation conversation) {
+        // When handling restoration as part of rotation, if the destination orientation doesn't
+        // support peek (i.e. portrait), remap the view mode to list-mode if previously peeking.
+        // We still want to keep the peek state around in case the user rotates back to
+        // landscape, in which case the app should remember that peek mode was on and which
+        // conversation to peek at.
+        if (mCurrentConversationJustPeeking && !mIsTabletLandscape
+                && mViewMode.isConversationMode()) {
+            LogUtils.i(LOG_TAG, "restoring peek to port orientation");
+
+            // Restore the pager saved state, extract the Fragments out of it, kill each one
+            // manually, and finally tear down the pager and go back to the list.
+            //
+            // Need to tear down the restored CV fragments or else they will leak since the
+            // fragment manager will have a reference to them but nobody else does.
+            // normally, CPC.show() connects the new pager to the restored fragments, so a future
+            // CPC.hide() correctly clears them.
+
+            mPagerController.show(mAccount, mFolder, conversation, false /* changeVisibility */,
+                    null /* pagerAnimationListener */);
+            mPagerController.killRestoredFragments();
+            mPagerController.hide(false /* changeVisibility */);
+
+            // but first, save off the conversation in a separate slot for later restoration if
+            // we then end up back in peek mode
+            mSavedPeekingConversation = conversation;
+
+            mViewMode.enterConversationListMode();
+        } else if (mCurrentConversationJustPeeking && mIsTabletLandscape) {
+            showConversationWithPeek(conversation, true /* peek */);
+        } else {
+            super.restoreConversation(conversation);
+        }
+    }
+
+    @Override
     public void switchToDefaultInboxOrChangeAccount(Account account) {
         if (mViewMode.isSearchMode()) {
             // We are in an activity on top of the main navigation activity.
@@ -245,13 +353,80 @@
             LogUtils.w(LOG_TAG, "no drawer to toggle open/closed");
             return;
         }
-        flf.setMinimized(!flf.isMinimized());
-        mLayout.requestLayout();
+
+        setDrawerState(!flf.isMinimized());
+    }
+
+    protected void setDrawerState(boolean minimized) {
+        final FolderListFragment flf = getFolderListFragment();
+        if (flf == null) {
+            LogUtils.w(LOG_TAG, "no drawer to toggle open/closed");
+            return;
+        }
+
+        flf.animateMinimized(minimized);
+        mLayout.animateDrawer(minimized);
         resetActionBarIcon();
 
         final ConversationListFragment clf = getConversationListFragment();
         if (clf != null) {
-            clf.setNextFocusLeftId(getClfNextFocusLeftId(flf.isMinimized()));
+            clf.setNextFocusStartId(getClfNextFocusStartId());
+
+            final SwipeableListView list = clf.getListView();
+            if (list != null) {
+                if (minimized) {
+                    list.stopPreventingSwipes();
+                } else {
+                    list.preventSwipesEntirely();
+                }
+            }
+        }
+    }
+
+    /** START TPL DRAWER DRAG CALLBACKS **/
+    protected void onDrawerDragStarted() {
+        final FolderListFragment flf = getFolderListFragment();
+        if (flf == null) {
+            LogUtils.w(LOG_TAG, "no drawer to toggle open/closed");
+            return;
+        }
+
+        flf.onDrawerDragStarted();
+    }
+
+    protected void onDrawerDrag(float percent) {
+        final FolderListFragment flf = getFolderListFragment();
+        if (flf == null) {
+            LogUtils.w(LOG_TAG, "no drawer to toggle open/closed");
+            return;
+        }
+
+        flf.onDrawerDrag(percent);
+    }
+
+    protected void onDrawerDragEnded(boolean minimized) {
+        // On drag completion animate the drawer to the final state.
+        setDrawerState(minimized);
+    }
+    /** END TPL DRAWER DRAG CALLBACKS **/
+
+    @Override
+    public boolean shouldPreventListSwipesEntirely() {
+        return isDrawerOpen();
+    }
+
+    @Override
+    public void onPrepareOptionsMenu(Menu menu) {
+        super.onPrepareOptionsMenu(menu);
+        if (mCurrentConversation != null) {
+            if (mCurrentConversationJustPeeking) {
+                Utils.setMenuItemPresent(menu, R.id.read, !mCurrentConversation.read);
+                Utils.setMenuItemPresent(menu, R.id.inside_conversation_unread,
+                        mCurrentConversation.read);
+            } else {
+                // in normal conv mode, always hide the extra 'mark-read' item
+                Utils.setMenuItemPresent(menu, R.id.read, false);
+            }
         }
     }
 
@@ -266,9 +441,6 @@
         mSavedMiscellaneousView = false;
 
         super.onViewModeChanged(newMode);
-        if (!isConversationOnlyMode()) {
-            mFloatingComposeButton.setVisibility(View.VISIBLE);
-        }
         if (newMode != ViewMode.WAITING_FOR_ACCOUNT_INITIALIZATION) {
             // Clear the wait fragment
             hideWaitForInitialization();
@@ -284,8 +456,8 @@
         }
     }
 
-    private @IdRes int getClfNextFocusLeftId(boolean drawerMinimized) {
-        return (drawerMinimized) ? R.id.current_account_avatar : android.R.id.list;
+    private @IdRes int getClfNextFocusStartId() {
+        return (isDrawerOpen()) ? android.R.id.list : R.id.mini_drawer;
     }
 
     @Override
@@ -293,10 +465,26 @@
         super.onConversationVisibilityChanged(visible);
         if (!visible) {
             mPagerController.hide(false /* changeVisibility */);
-        } else if (mConversationToShow != null) {
-            mPagerController.show(mAccount, mFolder, mConversationToShow,
-                    false /* changeVisibility */);
-            mConversationToShow = null;
+        } else if (mToShow != null) {
+            if (mToShow.dueToKeyboard) {
+                mHandler.removeCallbacks(mFocusedConversationRunnable);
+                mHandler.postDelayed(mFocusedConversationRunnable, FOCUSED_CONVERSATION_DELAY_MS);
+            } else {
+                showCurrentConversationInPager();
+            }
+        }
+
+        // Change visibility of the empty view
+        if (mIsTabletLandscape) {
+            mEmptyCvView.setVisibility(visible ? View.GONE : View.VISIBLE);
+        }
+    }
+
+    private void showCurrentConversationInPager() {
+        if (mToShow != null) {
+            mPagerController.show(mAccount, mFolder, mToShow.conversation,
+                    false /* changeVisibility */, null /* pagerAnimationListener */);
+            mToShow = null;
         }
     }
 
@@ -310,11 +498,11 @@
     public void resetActionBarIcon() {
         final ActionBar ab = mActivity.getSupportActionBar();
         final boolean isChildFolder = getFolder() != null && !Utils.isEmpty(getFolder().parent);
-        if (isConversationOnlyMode() || isChildFolder) {
-            ab.setHomeAsUpIndicator(R.drawable.ic_arrow_back_wht_24dp);
+        if (isHidingConversationList() || isChildFolder) {
+            ab.setHomeAsUpIndicator(R.drawable.ic_arrow_back_wht_24dp_with_rtl);
             ab.setHomeActionContentDescription(0 /* system default */);
         } else {
-            ab.setHomeAsUpIndicator(R.drawable.ic_drawer);
+            ab.setHomeAsUpIndicator(R.drawable.ic_menu_wht_24dp);
             ab.setHomeActionContentDescription(
                     isDrawerOpen() ? R.string.drawer_close : R.string.drawer_open);
         }
@@ -332,7 +520,7 @@
     }
 
     @Override
-    public void onSetPopulated(ConversationSelectionSet set) {
+    public void onSetPopulated(ConversationCheckedSet set) {
         super.onSetPopulated(set);
 
         boolean showSenderImage =
@@ -354,8 +542,29 @@
     }
 
     @Override
-    protected void showConversation(Conversation conversation, boolean markAsRead) {
-        super.showConversation(conversation, markAsRead);
+    protected void showConversationWithPeek(Conversation conversation, boolean peek) {
+        showConversation(conversation, peek, false /* fromKeyboard */);
+    }
+
+    private boolean isCurrentlyPeeking() {
+        return mViewMode.isConversationMode() && mCurrentConversationJustPeeking
+                && mCurrentConversation != null;
+    }
+
+    private void showConversation(Conversation conversation, boolean peek, boolean fromKeyboard) {
+        // transition from peek mode to normal mode if we're already peeking at this convo
+        // and this was a request to switch to normal mode
+        if (!peek && conversation != null && conversation.equals(mCurrentConversation)
+                && transitionFromPeekToNormalMode()) {
+            LogUtils.i(LOG_TAG, "peek->normal: marking current CV seen. conv=%s",
+                    mCurrentConversation);
+            return;
+        }
+
+        // Make sure that we set the peeking flag before calling super (since some functionality
+        // in super depends on the flag.
+        mCurrentConversationJustPeeking = peek;
+        super.showConversationWithPeek(conversation, peek);
 
         // 2-pane can ignore inLoaderCallbacks because it doesn't use
         // FragmentManager.popBackStack().
@@ -364,7 +573,7 @@
             return;
         }
         if (conversation == null) {
-            handleBackPress();
+            handleBackPress(true /* preventClose */);
             return;
         }
         // If conversation list is not visible, then the user cannot see the CAB mode, so exit it.
@@ -373,18 +582,12 @@
         // ViewMode.CONVERSATION and yet the conversation list goes in and out of visibility.
         enableOrDisableCab();
 
-        // close the drawer, if open
-        if (isDrawerOpen()) {
-            toggleDrawerState();
-        }
-
         // When a mode change is required, wait for onConversationVisibilityChanged(), the signal
         // that the mode change animation has finished, before rendering the conversation.
-        mConversationToShow = conversation;
-        mCurrentConversationJustPeeking = !markAsRead;
+        mToShow = new ToShow(conversation, fromKeyboard);
 
         final int mode = mViewMode.getMode();
-        LogUtils.i(LOG_TAG, "IN TPC.showConv, oldMode=%s conv=%s", mode, mConversationToShow);
+        LogUtils.i(LOG_TAG, "IN TPC.showConv, oldMode=%s conv=%s", mViewMode, mToShow.conversation);
         if (mode == ViewMode.SEARCH_RESULTS_LIST || mode == ViewMode.SEARCH_RESULTS_CONVERSATION) {
             mViewMode.enterSearchResultsConversationMode();
         } else {
@@ -398,17 +601,35 @@
         }
     }
 
+    /**
+     * @return success=true, else false if we aren't peeking
+     */
+    private boolean transitionFromPeekToNormalMode() {
+        final boolean shouldTransition = isCurrentlyPeeking();
+        if (shouldTransition) {
+            mCurrentConversationJustPeeking = false;
+            markConversationSeen(mCurrentConversation);
+        }
+        return shouldTransition;
+    }
+
     @Override
-    public final void onConversationSelected(Conversation conversation, boolean inLoaderCallbacks) {
+    public void onConversationSelected(Conversation conversation, boolean inLoaderCallbacks) {
+        // close the drawer when the user opens CV from the list
+        if (isDrawerOpen()) {
+            toggleDrawerState();
+        }
         super.onConversationSelected(conversation, inLoaderCallbacks);
-        // Shift the focus to the conversation in landscape mode
-        mPagerController.focusPager();
+        if (!mCurrentConversationJustPeeking) {
+            // Shift the focus to the conversation in landscape mode.
+            mPagerController.focusPager();
+        }
     }
 
     @Override
     public void onConversationFocused(Conversation conversation) {
         if (mIsTabletLandscape) {
-            showConversation(conversation, false /* markAsRead */);
+            showConversation(conversation, true /* peek */, true /* fromKeyboard */);
         }
     }
 
@@ -420,22 +641,64 @@
         final long newId = conversation != null ? conversation.id : -1;
         final boolean different = oldId != newId;
 
+        if (different) {
+            LogUtils.i(LOG_TAG, "TPC.setCurrentConv w/ new conv. new=%s old=%s newPeek=%s",
+                    conversation, mCurrentConversation, mCurrentConversationJustPeeking);
+        }
+
         // This call might change mCurrentConversation.
         super.setCurrentConversation(conversation);
 
         final ConversationListFragment convList = getConversationListFragment();
-        if (convList != null && conversation != null) {
-            convList.setSelected(conversation.position, different);
+        if (different && convList != null && conversation != null) {
+            if (mCurrentConversationJustPeeking) {
+                convList.clearChoicesAndActivated();
+                convList.setSelected(conversation);
+            } else {
+                convList.setActivated(conversation, different);
+            }
         }
     }
 
     @Override
-    public void showWaitForInitialization() {
+    public void onConversationViewSwitched(Conversation conversation) {
+        // swiping on CV to flip through CV pages should reset the peeking flag; the next
+        // conversation should be marked read when visible
+        //
+        // it's also possible to get here when the dataset changes and the current CV is
+        // repositioned in the dataset, so make sure the current conv is actually being switched
+        // before clearing the peek state
+        if (!Objects.equal(conversation, mCurrentConversation)) {
+            LogUtils.i(LOG_TAG, "CPA reported a page change. resetting peek to false. new conv=%s",
+                    conversation);
+            mCurrentConversationJustPeeking = false;
+        }
+        super.onConversationViewSwitched(conversation);
+    }
+
+    @Override
+    protected void doShowNextConversation(Collection<Conversation> target, int autoAdvance) {
+        // in portrait, and in landscape when auto-advance is set, do the regular thing
+        if (!isTwoPaneLandscape() || autoAdvance != AutoAdvance.LIST) {
+            super.doShowNextConversation(target, autoAdvance);
+            return;
+        }
+
+        // special case for two-pane landscape with LIST auto-advance: prefer to peek at the
+        // next-oldest conversation instead. showConversation() will resort to an empty CV pane when
+        // destroying the very last conversation.
+        final Conversation next = mTracker.getNextConversation(AutoAdvance.OLDER, target);
+        LogUtils.i(LOG_TAG, "showNextConversation(2P-land): showing %s next.", next);
+        showConversationWithPeek(next, true /* peek */);
+    }
+
+    @Override
+    protected void showWaitForInitialization() {
         super.showWaitForInitialization();
 
         FragmentTransaction fragmentTransaction = mActivity.getFragmentManager().beginTransaction();
         fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
-        fragmentTransaction.replace(R.id.conversation_list_pane, getWaitFragment(), TAG_WAIT);
+        fragmentTransaction.replace(R.id.conversation_list_place_holder, getWaitFragment(), TAG_WAIT);
         fragmentTransaction.commitAllowingStateLoss();
     }
 
@@ -470,10 +733,17 @@
      */
     @Override
     public boolean handleUpPress() {
-        if (isConversationOnlyMode()) {
+        if (isHidingConversationList()) {
             handleBackPress();
         } else {
-            toggleDrawerState();
+            final boolean isTopLevel = Folder.isRoot(mFolder);
+
+            if (isTopLevel) {
+                // Show the drawer.
+                toggleDrawerState();
+            } else {
+                navigateUpFolderHierarchy();
+            }
         }
 
         return true;
@@ -481,12 +751,16 @@
 
     @Override
     public boolean handleBackPress() {
+        return handleBackPress(false /* preventClose */);
+    }
+
+    private boolean handleBackPress(boolean preventClose) {
         // Clear any visible undo bars.
         mToastBar.hide(false, false /* actionClicked */);
         if (isDrawerOpen()) {
             toggleDrawerState();
         } else {
-            popView(false);
+            popView(preventClose);
         }
         return true;
     }
@@ -503,11 +777,15 @@
         int mode = mViewMode.getMode();
         if (mode == ViewMode.SEARCH_RESULTS_LIST) {
             mActivity.finish();
-        } else if (mode == ViewMode.CONVERSATION || mViewMode.isAdMode()) {
-            // Go to conversation list.
-            mViewMode.enterConversationListMode();
-        } else if (mode == ViewMode.SEARCH_RESULTS_CONVERSATION) {
-            mViewMode.enterSearchResultsListMode();
+        } else if (ViewMode.isConversationMode(mode) || mViewMode.isAdMode()) {
+            // die if in two-pane landscape and the back button was pressed
+            if (isTwoPaneLandscape() && !preventClose) {
+                mActivity.finish();
+            } else if (mode == ViewMode.SEARCH_RESULTS_CONVERSATION) {
+                mViewMode.enterSearchResultsListMode();
+            } else {
+                mViewMode.enterConversationListMode();
+            }
         } else {
             // The Folder List fragment can be null for monkeys where we get a back before the
             // folder list has had a chance to initialize.
@@ -530,19 +808,43 @@
     }
 
     @Override
-    public void exitSearchMode() {
-        final int mode = mViewMode.getMode();
-        if (mode == ViewMode.SEARCH_RESULTS_LIST
-                || (mode == ViewMode.SEARCH_RESULTS_CONVERSATION
-                        && Utils.showTwoPaneSearchResults(mActivity.getApplicationContext()))) {
-            mActivity.finish();
+    protected void onPreMarkUnread() {
+        // stay in CV when marking unread in two-pane mode
+        if (isTwoPaneLandscape()) {
+            // TODO: need to update the list item state to switch from activated to peeking
+            mCurrentConversationJustPeeking = true;
+            mActivity.supportInvalidateOptionsMenu();
+        } else {
+            super.onPreMarkUnread();
+        }
+    }
+
+    @Override
+    protected void perhapsShowFirstConversation() {
+        super.perhapsShowFirstConversation();
+        if (!mViewMode.isAdMode() && mCurrentConversation == null && isTwoPaneLandscape()
+                && mConversationListCursor.getCount() > 0) {
+            final Conversation conv;
+
+            // restore the saved peeking conversation if present from the previous rotation
+            if (mCurrentConversationJustPeeking && mSavedPeekingConversation != null) {
+                conv = mSavedPeekingConversation;
+                mSavedPeekingConversation = null;
+                LogUtils.i(LOG_TAG, "peeking at saved conv=%s", conv);
+            } else {
+                mConversationListCursor.moveToPosition(0);
+                conv = mConversationListCursor.getConversation();
+                conv.position = 0;
+                LogUtils.i(LOG_TAG, "peeking at default/zeroth conv=%s", conv);
+            }
+
+            showConversationWithPeek(conv, true /* peek */);
         }
     }
 
     @Override
     public boolean shouldShowFirstConversation() {
-        return Intent.ACTION_SEARCH.equals(mActivity.getIntent().getAction())
-                && shouldEnterSearchConvMode();
+        return mLayout.shouldShowPreviewPanel();
     }
 
     @Override
@@ -560,7 +862,8 @@
                             Utils.convertHtmlToPlainText
                                 (op.getDescription(mActivity.getActivityContext())),
                             R.string.undo,
-                            true,  /* replaceVisibleToast */
+                            true /* replaceVisibleToast */,
+                            true /* autohide */,
                             op);
                 }
         }
@@ -599,18 +902,30 @@
         }
 
         if (selectPosition >= 0) {
-            getConversationListFragment().setRawSelected(selectPosition, true);
+            getConversationListFragment().setRawActivated(selectPosition, true);
         }
     }
 
     @Override
-    public boolean onInterceptCVDownEvent() {
-        // handle a down event on CV by closing the drawer if open
+    public boolean shouldBlockTouchEvents() {
+        return isDrawerOpen();
+    }
+
+    @Override
+    public void onConversationViewFrameTapped() {
+        // handle a tap on CV by closing the drawer if open
         if (isDrawerOpen()) {
             toggleDrawerState();
-            return true;
         }
-        return false;
+    }
+
+    @Override
+    public void onConversationViewTouchDown() {
+        final boolean handled = transitionFromPeekToNormalMode();
+        if (handled) {
+            LogUtils.i(LOG_TAG, "TPC: tap on CV triggered peek->normal, marking seen. conv=%s",
+                    mCurrentConversation);
+        }
     }
 
     @Override
@@ -632,4 +947,56 @@
     public boolean isTwoPaneLandscape() {
         return mIsTabletLandscape;
     }
+
+    @Override
+    public boolean shouldShowSearchBarByDefault(int viewMode) {
+        return viewMode == ViewMode.SEARCH_RESULTS_LIST ||
+                (mIsTabletLandscape && viewMode == ViewMode.SEARCH_RESULTS_CONVERSATION);
+    }
+
+    @Override
+    public boolean shouldShowSearchMenuItem() {
+        final int mode = mViewMode.getMode();
+        return mode == ViewMode.CONVERSATION_LIST ||
+                (mIsTabletLandscape && mode == ViewMode.CONVERSATION);
+    }
+
+    @Override
+    public void addConversationListLayoutListener(
+            TwoPaneLayout.ConversationListLayoutListener listener) {
+        mConversationListLayoutListeners.add(listener);
+    }
+
+    public List<TwoPaneLayout.ConversationListLayoutListener> getConversationListLayoutListeners() {
+        return mConversationListLayoutListeners;
+    }
+
+    @Override
+    public boolean setupEmptyIconView(Folder folder, boolean isEmpty) {
+        if (mIsTabletLandscape) {
+            if (!isEmpty) {
+                mEmptyCvView.setImageResource(R.drawable.ic_empty_default);
+            } else {
+                EmptyStateUtils.bindEmptyFolderIcon(mEmptyCvView, folder);
+            }
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * The conversation to show (and other associated bits) when performing a TL->CV transition.
+     *
+     */
+    private static class ToShow {
+        public final Conversation conversation;
+        public final boolean dueToKeyboard;
+
+        public ToShow(Conversation c, boolean fromKeyboard) {
+            conversation = c;
+            dueToKeyboard = fromKeyboard;
+        }
+
+    }
+
 }
diff --git a/src/com/android/mail/ui/TwoPaneLayout.java b/src/com/android/mail/ui/TwoPaneLayout.java
index 6dfa711..498dfc2 100644
--- a/src/com/android/mail/ui/TwoPaneLayout.java
+++ b/src/com/android/mail/ui/TwoPaneLayout.java
@@ -17,15 +17,23 @@
 
 package com.android.mail.ui;
 
+import java.util.List;
+
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
 import android.animation.TimeInterpolator;
+import android.animation.ValueAnimator;
 import android.app.Activity;
 import android.content.Context;
 import android.content.res.Resources;
+import android.graphics.Canvas;
+import android.graphics.drawable.Drawable;
+import android.support.annotation.NonNull;
 import android.util.AttributeSet;
+import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.ViewPropertyAnimator;
 import android.view.animation.AnimationUtils;
 import android.widget.FrameLayout;
 
@@ -35,6 +43,7 @@
 import com.android.mail.utils.Utils;
 import com.android.mail.utils.ViewUtils;
 import com.google.common.annotations.VisibleForTesting;
+import com.google.common.collect.Lists;
 
 /**
  * This is a custom layout that manages the possible views of Gmail's large screen (read: tablet)
@@ -57,24 +66,27 @@
  *
  * In the Gmail source code, this was called TriStateSplitLayout
  */
-final class TwoPaneLayout extends FrameLayout implements ModeChangeListener {
+final class TwoPaneLayout extends FrameLayout implements ModeChangeListener,
+        GmailDragHelper.GmailDragHelperCallback {
+    public static final int MISCELLANEOUS_VIEW_ID = R.id.miscellaneous_pane;
+    public static final long SLIDE_DURATION_MS = 300;
 
     private static final String LOG_TAG = "TwoPaneLayout";
-    private static final long SLIDE_DURATION_MS = 300;
 
     private final int mDrawerWidthMini;
     private final int mDrawerWidthOpen;
+    private final int mDrawerWidthDelta;
     private final double mConversationListWeight;
     private final TimeInterpolator mSlideInterpolator;
     /**
-     * If true, this layout group will treat the thread list and conversation view as full-width
-     * panes to switch between.<br>
-     * <br>
-     * If false, always show a conversation view right next to the conversation list. This view will
+     * If true, always show a conversation view right next to the conversation list. This view will
      * also be populated (preview / "peek" mode) with a default conversation if none is selected by
-     * the user.
+     * the user.<br>
+     * <br>
+     * If false, this layout group will treat the thread list and conversation view as full-width
+     * panes to switch between.
      */
-    private final boolean mListCollapsible;
+    private final boolean mShouldShowPreviewPanel;
 
     /**
      * The current mode that the tablet layout is in. This is a constant integer that holds values
@@ -82,28 +94,78 @@
      */
     private int mCurrentMode = ViewMode.UNKNOWN;
     /**
-     * This mode represents the current positions of the three panes. This is split out from the
-     * current mode to give context to state transitions.
+     * This is a copy of {@link #mCurrentMode} that layout/positioning/animating code uses to
+     * compare to the 'new' current mode, to avoid unnecessarily calculation.
      */
-    private int mPositionedMode = ViewMode.UNKNOWN;
+    private int mTranslatedMode = ViewMode.UNKNOWN;
 
     private TwoPaneController mController;
     private LayoutListener mListener;
-    private boolean mIsSearchResult;
+    // Drag helper for capturing drag over the list pane
+    private final GmailDragHelper mDragHelper;
+    private int mCurrentDragMode;
+    // mXThreshold is only used for dragging the mini-drawer out. This optional parameter allows for
+    // the drag to only initiate once it hits the edge of the mini-drawer so that the edge follows
+    // the drag.
+    private Float mXThreshold;
 
-    private View mMiscellaneousView;
-    private View mConversationView;
     private View mFoldersView;
     private View mListView;
+    // content view encompasses both conversation and ad view.
+    private View mConversationFrame;
 
-    public static final int MISCELLANEOUS_VIEW_ID = R.id.miscellaneous_pane;
+    // These two views get switched in/out depending on the view mode.
+    private View mConversationView;
+    private View mMiscellaneousView;
 
-    private final Runnable mTransitionCompleteRunnable = new Runnable() {
-        @Override
-        public void run() {
-            onTransitionComplete();
-        }
-    };
+    private boolean mIsRtl;
+
+    // These are computed when the base layout changes.
+    private int mFoldersLeft;
+    private int mFoldersRight;
+    private int mListLeft;
+    private int mListRight;
+    private int mConvLeft;
+    private int mConvRight;
+
+    private final Drawable mShadowDrawable;
+    private final int mShadowMinWidth;
+
+    private final List<Runnable> mTransitionCompleteJobs = Lists.newArrayList();
+    private final PaneAnimationListener mPaneAnimationListener = new PaneAnimationListener();
+
+    // Keep track if we are tracking the current touch events
+    private boolean mShouldInterceptCurrentTouch;
+
+    public interface ConversationListLayoutListener {
+        /**
+         * Used for two-pane landscape layout positioning when other views need to align themselves
+         * to the list view. Should be called only in tablet landscape mode!
+         * @param xEnd the ending x coordinate of the list view
+         * @param drawerOpen
+         */
+        void onConversationListLayout(int xEnd, boolean drawerOpen);
+    }
+
+    // Responsible for invalidating the shadow region only to minimize drawing overhead (and jank)
+    // Coordinated with ListView animation to ensure shadow and list slide together.
+    private final ValueAnimator.AnimatorUpdateListener mListViewAnimationListener =
+            new ValueAnimator.AnimatorUpdateListener() {
+                @Override
+                public void onAnimationUpdate(ValueAnimator valueAnimator) {
+                    if (mIsRtl) {
+                        // Get the right edge of list and use as left edge coord for shadow
+                        final int leftEdgeCoord = (int) mListView.getX() + mListView.getWidth();
+                        invalidate(leftEdgeCoord, 0, leftEdgeCoord + mShadowMinWidth,
+                                getBottom());
+                    } else {
+                        // Get the left edge of list and use as right edge coord for shadow
+                        final int rightEdgeCoord = (int) mListView.getX();
+                        invalidate(rightEdgeCoord - mShadowMinWidth, 0, rightEdgeCoord,
+                                getBottom());
+                    }
+                }
+            };
 
     public TwoPaneLayout(Context context) {
         this(context, null);
@@ -117,10 +179,11 @@
         // The conversation list might be visible now, depending on the layout: in portrait we
         // don't show the conversation list, but in landscape we do.  This information is stored
         // in the constants
-        mListCollapsible = res.getBoolean(R.bool.list_collapsible);
+        mShouldShowPreviewPanel = res.getBoolean(R.bool.is_tablet_landscape);
 
         mDrawerWidthMini = res.getDimensionPixelSize(R.dimen.two_pane_drawer_width_mini);
         mDrawerWidthOpen = res.getDimensionPixelSize(R.dimen.two_pane_drawer_width_open);
+        mDrawerWidthDelta = mDrawerWidthOpen - mDrawerWidthMini;
 
         mSlideInterpolator = AnimationUtils.loadInterpolator(context,
                 android.R.interpolator.decelerate_cubic);
@@ -129,6 +192,46 @@
         final int convViewWeight = res.getInteger(R.integer.conversation_view_weight);
         mConversationListWeight = (double) convListWeight
                 / (convListWeight + convViewWeight);
+
+        mShadowDrawable = getResources().getDrawable(R.drawable.ic_vertical_shadow_start_4dp);
+        mShadowMinWidth = mShadowDrawable.getMinimumWidth();
+
+        mDragHelper = new GmailDragHelper(context, this);
+    }
+
+    @Override
+    public String toString() {
+        final StringBuilder sb = new StringBuilder(super.toString());
+        sb.append("{mTranslatedMode=");
+        sb.append(mTranslatedMode);
+        sb.append(" mCurrDragMode=");
+        sb.append(mCurrentDragMode);
+        sb.append(" mShouldInterceptCurrentTouch=");
+        sb.append(mShouldInterceptCurrentTouch);
+        sb.append(" mTransitionCompleteJobs=");
+        sb.append(mTransitionCompleteJobs);
+        sb.append("}");
+        return sb.toString();
+    }
+
+    @Override
+    protected void dispatchDraw(@NonNull Canvas canvas) {
+        // Draw children/update the canvas first.
+        super.dispatchDraw(canvas);
+
+        if (ViewUtils.isViewRtl(this)) {
+            // Get the right edge of list and use as left edge coord for shadow
+            final int leftEdgeCoord = (int) mListView.getX() + mListView.getWidth();
+            mShadowDrawable.setBounds(leftEdgeCoord, 0, leftEdgeCoord + mShadowMinWidth,
+                    mListView.getBottom());
+        } else {
+            // Get the left edge of list and use as right edge coord for shadow
+            final int rightEdgeCoord = (int) mListView.getX();
+            mShadowDrawable.setBounds(rightEdgeCoord - mShadowMinWidth, 0, rightEdgeCoord,
+                    mListView.getBottom());
+        }
+
+        mShadowDrawable.draw(canvas);
     }
 
     @Override
@@ -137,8 +240,10 @@
 
         mFoldersView = findViewById(R.id.drawer);
         mListView = findViewById(R.id.conversation_list_pane);
-        mConversationView = findViewById(R.id.conversation_pane);
-        mMiscellaneousView = findViewById(MISCELLANEOUS_VIEW_ID);
+        mConversationFrame = findViewById(R.id.conversation_frame);
+
+        mConversationView = mConversationFrame.findViewById(R.id.conversation_pane);
+        mMiscellaneousView = mConversationFrame.findViewById(MISCELLANEOUS_VIEW_ID);
 
         // all panes start GONE in initial UNKNOWN mode to avoid drawing misplaced panes
         mCurrentMode = ViewMode.UNKNOWN;
@@ -149,12 +254,11 @@
     }
 
     @VisibleForTesting
-    public void setController(TwoPaneController controller, boolean isSearchResult) {
+    public void setController(TwoPaneController controller) {
         mController = controller;
         mListener = controller;
-        mIsSearchResult = isSearchResult;
 
-        ((ConversationViewFrame) mConversationView).setDownEventListener(mController);
+        ((ConversationViewFrame) mConversationFrame).setDownEventListener(mController);
     }
 
     @Override
@@ -167,8 +271,33 @@
     @Override
     protected void onLayout(boolean changed, int l, int t, int r, int b) {
         LogUtils.d(Utils.VIEW_DEBUGGING_TAG, "TPL(%s).onLayout()", this);
-        positionPanes(getMeasuredWidth());
         super.onLayout(changed, l, t, r, b);
+        mIsRtl = ViewUtils.isViewRtl(this);
+
+        // Layout only positions the children views at their default locations, and any pane
+        // movement is done via translation rather than layout.
+        // Thus, we should only re-compute the overall layout on changed.
+        if (changed) {
+            final int width = getMeasuredWidth();
+            computePanePositions(width);
+
+            // If the view mode is different from positions and we are computing pane position, then
+            // set the default translation for portrait mode.
+            // This is necessary because on rotation we get onViewModeChanged() call before
+            // onMeasure actually happens, so we often do not know the width to translate to. This
+            // call ensures that the default translation values always correspond to the view mode.
+            if (mTranslatedMode != mCurrentMode && !mShouldShowPreviewPanel) {
+                translateDueToViewMode(width, false /* animate */);
+            } else {
+                onTransitionComplete();
+            }
+        }
+
+        // Layout the children views
+        final int bottom = getMeasuredHeight();
+        mFoldersView.layout(mFoldersLeft, 0, mFoldersRight, bottom);
+        mListView.layout(mListLeft, 0, mListRight, bottom);
+        mConversationFrame.layout(mConvLeft, 0, mConvRight, bottom);
     }
 
     /**
@@ -181,116 +310,85 @@
         // only adjust the pane widths when my width changes
         if (parentWidth != getMeasuredWidth()) {
             final int convWidth = computeConversationWidth(parentWidth);
-            setPaneWidth(mMiscellaneousView, convWidth);
-            setPaneWidth(mConversationView, convWidth);
+            setPaneWidth(mConversationFrame, convWidth);
             setPaneWidth(mListView, computeConversationListWidth(parentWidth));
         }
     }
 
     /**
-     * Positions the three sliding panes at the correct X offset (using {@link View#setX(float)}).
-     * When switching from list->conversation mode or vice versa, animate the change in X.
-     *
-     * @param width
+     * Compute the default base location of each pane and save it in their corresponding
+     * instance variables. onLayout will then layout each child accordingly.
+     * @param width the available width to layout the children panes
      */
-    private void positionPanes(int width) {
-        final int convX, listX, foldersX;
-        final boolean isRtl = ViewUtils.isViewRtl(this);
-
-        final int foldersW = isDrawerOpen() ? mDrawerWidthOpen : mDrawerWidthMini;
+    private void computePanePositions(int width) {
+        // Always compute the base value as closed drawer
+        final int foldersW = mDrawerWidthMini;
         final int listW = getPaneWidth(mListView);
+        final int convW = getPaneWidth(mConversationFrame);
 
-        boolean cvOnScreen = true;
-        if (!mListCollapsible) {
-            if (isRtl) {
-                foldersX = width - mDrawerWidthOpen;
-                listX = width - foldersW - listW;
-                convX = listX - getPaneWidth(mConversationView);
-            } else {
-                foldersX = 0;
-                listX = foldersW;
-                convX = listX + listW;
-            }
+        // Compute default pane positions
+        if (mIsRtl) {
+            mFoldersLeft = width - mDrawerWidthOpen;
+            mListLeft = width - foldersW- listW;
+            mConvLeft = mListLeft - convW;
         } else {
-            if (mController.getCurrentConversation() != null
-                    && !mController.isCurrentConversationJustPeeking()) {
-                // CV mode
-                if (isRtl) {
-                    convX = 0;
-                    listX = getPaneWidth(mConversationView);
-                    foldersX = listX + width - mDrawerWidthOpen;
-                } else {
-                    convX = 0;
-                    listX = -listW;
-                    foldersX = listX - foldersW;
-                }
-            } else {
-                // TL mode
-                cvOnScreen = false;
-                if (isRtl) {
-                    foldersX = width - mDrawerWidthOpen;
-                    listX = width - foldersW - listW;
-                    convX = listX - getPaneWidth(mConversationView);
-                } else {
-                    foldersX = 0;
-                    listX = foldersW;
-                    convX = listX + listW;
-                }
-            }
+            mFoldersLeft = 0;
+            mListLeft = foldersW;
+            mConvLeft = mListLeft + listW;
         }
-
-        animatePanes(foldersX, listX, convX);
-
-        // For views that are not on the screen, let's set their visibility for accessibility.
-        mFoldersView.setVisibility(foldersX >= 0 ? VISIBLE : INVISIBLE);
-        mListView.setVisibility(listX >= 0 ? VISIBLE : INVISIBLE);
-        mConversationView.setVisibility(cvOnScreen ? VISIBLE : INVISIBLE);
-        mMiscellaneousView.setVisibility(cvOnScreen ? VISIBLE : INVISIBLE);
-
-        mPositionedMode = mCurrentMode;
+        mFoldersRight = mFoldersLeft + mDrawerWidthOpen;
+        mListRight = mListLeft + listW;
+        mConvRight = mConvLeft + convW;
     }
 
-    private final AnimatorListenerAdapter mPaneAnimationListener = new AnimatorListenerAdapter() {
-        @Override
-        public void onAnimationEnd(Animator animation) {
-            useHardwareLayer(false);
-            onTransitionComplete();
-        }
-        @Override
-        public void onAnimationCancel(Animator animation) {
-            useHardwareLayer(false);
-        }
-    };
+    /**
+     * Animate the drawer to the provided state.
+     */
+    public void animateDrawer(boolean minimized) {
+        // In rtl the drawer opens in the negative direction.
+        final int openDrawerDelta = mIsRtl ? -mDrawerWidthDelta : mDrawerWidthDelta;
+        translatePanes(minimized ? 0 : openDrawerDelta, 0 /* drawerDeltaX */, true /* animate */);
+    }
 
-    private void animatePanes(int foldersX, int listX, int convX) {
-        // If positioning has not yet happened, we don't need to animate panes into place.
-        // This happens on first layout, rotate, and when jumping straight to a conversation from
-        // a view intent.
-        if (mPositionedMode == ViewMode.UNKNOWN) {
-            mConversationView.setX(convX);
-            mMiscellaneousView.setX(convX);
-            mListView.setX(listX);
-            mFoldersView.setX(foldersX);
-
-            // listeners need to know that the "transition" is complete, even if one is not run.
-            // defer notifying listeners because we're in a layout pass, and they might do layout.
-            post(mTransitionCompleteRunnable);
-            return;
-        }
-
-        useHardwareLayer(true);
-
-        if (ViewMode.isAdMode(mCurrentMode)) {
-            mMiscellaneousView.animate().x(convX);
+    /**
+     * Translate the panes to their ending positions, can choose to either animate the translation
+     * or let it be instantaneous.
+     * @param deltaX The ending translationX to translate all of the panes except for drawer.
+     * @param drawerDeltaX the ending translationX to translate the drawer. This is necessary
+     *   because in landscape mode the drawer doesn't actually move and rest of the panes simply
+     *   move to cover/uncover the drawer. The drawer only moves in portrait from TL -> CV.
+     * @param animate whether to animate the translation or not.
+     */
+    private void translatePanes(float deltaX, float drawerDeltaX, boolean animate) {
+        if (animate) {
+            animatePanes(deltaX, drawerDeltaX);
         } else {
-            mConversationView.animate().x(convX);
+            mFoldersView.setTranslationX(drawerDeltaX);
+            mListView.setTranslationX(deltaX);
+            mConversationFrame.setTranslationX(deltaX);
+        }
+    }
+
+    /**
+     * Animate the panes' translationX to their corresponding deltas. Refer to
+     * {@link TwoPaneLayout#translatePanes(float, float, boolean)} for explanation on deltas.
+     */
+    private void animatePanes(float deltaX, float drawerDeltaX) {
+        mConversationFrame.animate().translationX(deltaX);
+
+        final ViewPropertyAnimator listAnimation =  mListView.animate()
+                .translationX(deltaX)
+                .setListener(mPaneAnimationListener);
+
+        mFoldersView.animate().translationX(drawerDeltaX);
+
+        // If we're running K+, we can use the update listener to transition the list's left shadow
+        // and set different update listeners based on rtl to avoid doing a check on every frame
+        if (Utils.isRunningKitkatOrLater()) {
+            listAnimation.setUpdateListener(mListViewAnimationListener);
         }
 
-        mFoldersView.animate().x(foldersX);
-        mListView.animate()
-            .x(listX)
-            .setListener(mPaneAnimationListener);
-        configureAnimations(mConversationView, mFoldersView, mListView, mMiscellaneousView);
+        configureAnimations(mFoldersView, mListView, mConversationFrame);
     }
 
     private void configureAnimations(View... views) {
@@ -301,19 +399,37 @@
         }
     }
 
-    private void useHardwareLayer(boolean useHardware) {
-        final int layerType = useHardware ? LAYER_TYPE_HARDWARE : LAYER_TYPE_NONE;
-        mFoldersView.setLayerType(layerType, null);
-        mListView.setLayerType(layerType, null);
-        mConversationView.setLayerType(layerType, null);
-        mMiscellaneousView.setLayerType(layerType, null);
-        if (useHardware) {
-            // these buildLayer calls are safe because layout is the only way we get here
-            // (i.e. these views must already be attached)
-            mFoldersView.buildLayer();
-            mListView.buildLayer();
-            mConversationView.buildLayer();
-            mMiscellaneousView.buildLayer();
+    /**
+     * Adjusts the visibility of each pane before and after a transition. After the transition,
+     * any invisible panes should be marked invisible. But visible panes should not wait for the
+     * transition to finish-- they should be marked visible immediately.
+     */
+    private void adjustPaneVisibility(final boolean folderVisible, final boolean listVisible,
+            final boolean cvVisible) {
+        applyPaneVisibility(VISIBLE, folderVisible, listVisible, cvVisible);
+        mTransitionCompleteJobs.add(new Runnable() {
+            @Override
+            public void run() {
+                applyPaneVisibility(INVISIBLE, !folderVisible, !listVisible, !cvVisible);
+            }
+        });
+    }
+
+    private void applyPaneVisibility(int visibility, boolean applyToFolders, boolean applyToList,
+            boolean applyToCV) {
+        if (applyToFolders) {
+            mFoldersView.setVisibility(visibility);
+        }
+        if (applyToList) {
+            mListView.setVisibility(visibility);
+        }
+        if (applyToCV) {
+            if (mConversationView.getVisibility() != GONE) {
+                mConversationView.setVisibility(visibility);
+            }
+            if (mMiscellaneousView.getVisibility() != GONE) {
+                mMiscellaneousView.setVisibility(visibility);
+            }
         }
     }
 
@@ -324,6 +440,28 @@
             return;
         }
 
+        for (Runnable job : mTransitionCompleteJobs) {
+            job.run();
+        }
+        mTransitionCompleteJobs.clear();
+
+        // We finished transitioning into the new mode.
+        mTranslatedMode = mCurrentMode;
+
+        // Notify conversation list layout listeners of position change.
+        final int xEnd = mIsRtl ? mListLeft : mListRight;
+        if (mShouldShowPreviewPanel && xEnd != 0) {
+            final List<ConversationListLayoutListener> layoutListeners =
+                    mController.getConversationListLayoutListeners();
+            for (ConversationListLayoutListener listener : layoutListeners) {
+                listener.onConversationListLayout(xEnd, isDrawerOpen());
+            }
+        }
+
+        dispatchVisibilityChanged();
+    }
+
+    private void dispatchVisibilityChanged() {
         switch (mCurrentMode) {
             case ViewMode.CONVERSATION:
             case ViewMode.SEARCH_RESULTS_CONVERSATION:
@@ -333,6 +471,7 @@
                 break;
             case ViewMode.CONVERSATION_LIST:
             case ViewMode.SEARCH_RESULTS_LIST:
+            case ViewMode.WAITING_FOR_ACCOUNT_INITIALIZATION:
                 dispatchConversationVisibilityChanged(false);
                 dispatchConversationListVisibilityChange(true);
 
@@ -347,6 +486,135 @@
         }
     }
 
+    @Override
+    public void onDragStarted() {
+        mController.onDrawerDragStarted();
+    }
+
+    @Override
+    public void onDrag(float deltaX) {
+        // We use percentDragged here because deltaX is relative to the current drag and not
+        // relative to the start/end positions of the drawer.
+        final float percentDragged = computeDragPercentage(deltaX);
+        // Again, in RTL the drawer opens in the negative direction, so need to inverse the delta.
+        final float translationX = percentDragged *
+                (mIsRtl ? -mDrawerWidthDelta : mDrawerWidthDelta);
+        translatePanes(translationX, 0 /* drawerDeltaX */, false /* animate */);
+        mController.onDrawerDrag(percentDragged);
+        // Invalidate the entire drawers region to ensure that we don't get the "ghosts" of the
+        // fake shadow for pre-L.
+        if (mIsRtl) {
+            invalidate((int) mListView.getX() + mListView.getWidth(), 0,
+                    (int) mFoldersView.getX() + mFoldersView.getWidth(), getBottom());
+        } else {
+            invalidate((int) mFoldersView.getX(), 0, (int) mListView.getX(), getBottom());
+        }
+    }
+
+    @Override
+    public void onDragEnded(float deltaX, float velocityX, boolean isFling) {
+        if (isFling) {
+            // Drawer is minimized if velocity is toward the left or it's rtl.
+            if (mIsRtl) {
+                mController.onDrawerDragEnded(velocityX >= 0);
+            } else {
+                mController.onDrawerDragEnded(velocityX < 0);
+            }
+        } else {
+            // If we got past the half-way mark, animate it rest of the way.
+            mController.onDrawerDragEnded(computeDragPercentage(deltaX) < 0.5f);
+        }
+    }
+
+    /**
+     * Given the delta that user moved, return a percentage that signifies the drag progress.
+     * @param deltaX the distance dragged.
+     * @return percent dragged (values range from 0 to 1).
+     *   0 means a fully closed drawer, and 1 means a fully open drawer.
+     */
+    private float computeDragPercentage(float deltaX) {
+        final float percent;
+        if (mIsRtl) {
+            if (mCurrentDragMode == GmailDragHelper.CAPTURE_LEFT_TO_RIGHT) {
+                percent = (mDrawerWidthDelta - deltaX) / mDrawerWidthDelta;
+            } else {
+                percent = -deltaX / mDrawerWidthDelta;
+            }
+        } else {
+            if (mCurrentDragMode == GmailDragHelper.CAPTURE_LEFT_TO_RIGHT) {
+                percent = deltaX / mDrawerWidthDelta;
+            } else {
+                percent = (mDrawerWidthDelta + deltaX) / mDrawerWidthDelta;
+            }
+        }
+
+        return percent < 0 ? 0 : percent > 1 ? 1 : percent;
+    }
+
+    @Override
+    public boolean onInterceptTouchEvent(MotionEvent ev) {
+        if (isModeChangePending()) {
+            return false;
+        }
+
+        switch (ev.getAction()) {
+            case MotionEvent.ACTION_DOWN:
+                final float x = ev.getX();
+                final boolean drawerOpen = isDrawerOpen();
+                if (drawerOpen) {
+                    // Only start intercepting if the down event is inside the list pane or in
+                    // landscape conv pane
+                    final float left;
+                    final float right;
+                    if (mShouldShowPreviewPanel) {
+                        final boolean isAdMode = ViewMode.isAdMode(mCurrentMode);
+                        left = mIsRtl ? mConversationFrame.getX() : mListView.getX();
+                        right = mIsRtl ? mListView.getX() + mListView.getWidth() :
+                                mConversationFrame.getX() + mConversationFrame.getWidth();
+                    } else {
+                        left = mListView.getX();
+                        right = left + mListView.getWidth();
+                    }
+
+                    // Set the potential start drag states
+                    mShouldInterceptCurrentTouch = x >= left && x <= right;
+                    mXThreshold = null;
+                    if (mIsRtl) {
+                        mCurrentDragMode = GmailDragHelper.CAPTURE_LEFT_TO_RIGHT;
+                    } else {
+                        mCurrentDragMode = GmailDragHelper.CAPTURE_RIGHT_TO_LEFT;
+                    }
+                } else {
+                    // Only capture within the mini drawer
+                    final float foldersX1 = mIsRtl ? mFoldersView.getX() + mDrawerWidthDelta :
+                            mFoldersView.getX();
+                    final float foldersX2 = foldersX1 + mDrawerWidthMini;
+
+                    // Set the potential start drag states
+                    mShouldInterceptCurrentTouch = x >= foldersX1 && x <= foldersX2;
+                    if (mIsRtl) {
+                        mCurrentDragMode = GmailDragHelper.CAPTURE_RIGHT_TO_LEFT;
+                        mXThreshold = (float) mFoldersLeft + mDrawerWidthDelta;
+                    } else {
+                        mCurrentDragMode = GmailDragHelper.CAPTURE_LEFT_TO_RIGHT;
+                        mXThreshold = (float) mFoldersLeft + mDrawerWidthMini;
+                    }
+                }
+                break;
+        }
+        return mShouldInterceptCurrentTouch &&
+                mDragHelper.processTouchEvent(ev, mCurrentDragMode, mXThreshold);
+    }
+
+    @Override
+    public boolean onTouchEvent(@NonNull MotionEvent ev) {
+        if (mShouldInterceptCurrentTouch) {
+            mDragHelper.processTouchEvent(ev, mCurrentDragMode, mXThreshold);
+            return true;
+        }
+        return super.onTouchEvent(ev);
+    }
+
     /**
      * Computes the width of the conversation list in stable state of the current mode.
      */
@@ -359,7 +627,7 @@
      */
     private int computeConversationListWidth(int parentWidth) {
         final int availWidth = parentWidth - mDrawerWidthMini;
-        return mListCollapsible ? availWidth : (int) (availWidth * mConversationListWeight);
+        return mShouldShowPreviewPanel ? (int) (availWidth * mConversationListWeight) : availWidth;
     }
 
     public int computeConversationWidth() {
@@ -371,8 +639,8 @@
      * current mode.
      */
     private int computeConversationWidth(int parentWidth) {
-        return mListCollapsible ? parentWidth :
-                parentWidth - computeConversationListWidth(parentWidth) - mDrawerWidthMini;
+        return mShouldShowPreviewPanel ? parentWidth - computeConversationListWidth(parentWidth)
+                - mDrawerWidthMini : parentWidth;
     }
 
     private void dispatchConversationListVisibilityChange(boolean visible) {
@@ -401,7 +669,7 @@
      */
     @Deprecated
     public boolean isConversationListCollapsed() {
-        return !ViewMode.isListMode(mCurrentMode) && mListCollapsible;
+        return !ViewMode.isListMode(mCurrentMode) && !mShouldShowPreviewPanel;
     }
 
     @Override
@@ -425,16 +693,54 @@
             mController.disablePagerUpdates();
         }
 
+        // notify of list visibility change up-front when going to list mode
+        // (so the transition runs with the full TL in view)
+        if (newMode == ViewMode.CONVERSATION_LIST) {
+            dispatchConversationListVisibilityChange(true);
+        }
+
         mCurrentMode = newMode;
         LogUtils.i(LOG_TAG, "onViewModeChanged(%d)", newMode);
 
-        // do all the real work in onMeasure/onLayout, when panes are sized and positioned for the
-        // current width/height anyway
-        requestLayout();
+        // If this is the first view mode change, we can't perform any translations yet because
+        // the view doesn't have any measurements.
+        final int width = getMeasuredWidth();
+        if (width != 0) {
+            // On view mode changes, ensure that we animate the panes & notify visibility changes.
+            if (mShouldShowPreviewPanel) {
+                onTransitionComplete();
+            } else {
+                translateDueToViewMode(width, true /* animate */);
+            }
+        }
+    }
+
+    /**
+     * This is only called in portrait mode since only view mode changes in portrait mode affect
+     * the pane positioning. This should be called after every view mode change to ensure that
+     * each pane are in their corresponding locations based on the view mode.
+     * @param width the available width to position the panes.
+     * @param animate whether to animate the translation or not.
+     */
+    private void translateDueToViewMode(int width, boolean animate) {
+        // Need to translate for CV mode
+        if (ViewMode.isConversationMode(mCurrentMode) || ViewMode.isAdMode(mCurrentMode)) {
+            final int translateWidth = mIsRtl ? width : -width;
+            translatePanes(translateWidth, translateWidth, animate);
+            adjustPaneVisibility(false /* folder */, false /* list */, true /* cv */);
+        } else {
+            translatePanes(0, 0, animate);
+            adjustPaneVisibility(true /* folder */, true /* list */, false /* cv */);
+        }
+        // adjustPaneVisibility assumes onTransitionComplete will be called to finish setting the
+        // visibility of disappearing panes.
+        if (!animate) {
+            onTransitionComplete();
+        }
     }
 
     public boolean isModeChangePending() {
-        return mPositionedMode != mCurrentMode;
+        return mTranslatedMode != mCurrentMode;
     }
 
     private void setPaneWidth(View pane, int w) {
@@ -454,6 +760,8 @@
                 s = "conv-view";
             } else if (pane == mMiscellaneousView) {
                 s = "misc-view";
+            } else if (pane == mConversationFrame) {
+                s = "conv-misc-wrapper";
             } else {
                 s = "???:" + pane;
             }
@@ -462,6 +770,34 @@
     }
 
     public boolean shouldShowPreviewPanel() {
-        return !mListCollapsible;
+        return mShouldShowPreviewPanel;
     }
+
+    private class PaneAnimationListener extends AnimatorListenerAdapter implements Runnable {
+
+        @Override
+        public void run() {
+            onTransitionComplete();
+        }
+
+        @Override
+        public void onAnimationStart(Animator animation) {
+            // If we're running pre-K, we don't have ViewPropertyAnimator's setUpdateListener.
+            // This is a hack to get around it and uses a dummy ValueAnimator to allow us
+            // to create an animation for the shadow along with the list view.
+            if (!Utils.isRunningKitkatOrLater()) {
+                final ValueAnimator shadowAnimator = ValueAnimator.ofFloat(0, 1);
+                shadowAnimator.setDuration(SLIDE_DURATION_MS)
+                        .addUpdateListener(mListViewAnimationListener);
+                shadowAnimator.start();
+            }
+        }
+
+        @Override
+        public void onAnimationEnd(Animator animation) {
+            onTransitionComplete();
+        }
+
+    }
+
 }
diff --git a/src/com/android/mail/ui/settings/GeneralPrefsFragment.java b/src/com/android/mail/ui/settings/GeneralPrefsFragment.java
index d3b19c3..a5e41c9 100644
--- a/src/com/android/mail/ui/settings/GeneralPrefsFragment.java
+++ b/src/com/android/mail/ui/settings/GeneralPrefsFragment.java
@@ -27,7 +27,6 @@
 import android.preference.ListPreference;
 import android.preference.Preference;
 import android.preference.Preference.OnPreferenceChangeListener;
-import android.provider.SearchRecentSuggestions;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
@@ -122,7 +121,6 @@
         if (PreferenceKeys.REMOVAL_ACTION.equals(key)) {
             final String removalAction = newValue.toString();
             mMailPrefs.setRemovalAction(removalAction);
-            updateListSwipeTitle(removalAction);
         } else if (AUTO_ADVANCE_WIDGET.equals(key)) {
             final int prefsAutoAdvanceMode =
                     AUTO_ADVANCE_VALUES[mAutoAdvance.findIndexOfValue((String) newValue)];
@@ -168,12 +166,10 @@
                 new AsyncTask<Void, Void, Void>() {
                     @Override
                     protected Void doInBackground(Void... params) {
-                        final String authority = context.getString(
-                                com.android.mail.R.string.suggestions_authority);
-                        final SearchRecentSuggestions suggestions =
-                                new SearchRecentSuggestions(context, authority,
-                                        SuggestionsProvider.MODE);
+                        final SuggestionsProvider suggestions =
+                                new SuggestionsProvider(context);
                         suggestions.clearHistory();
+                        suggestions.cleanup();
                         return null;
                     }
                 }.execute();
@@ -204,9 +200,6 @@
                 mMailPrefs.getAutoAdvanceMode(), AutoAdvance.DEFAULT);
         mAutoAdvance.setValueIndex(autoAdvanceModeIndex);
 
-        final String removalAction = mMailPrefs.getRemovalAction(supportsArchive());
-        updateListSwipeTitle(removalAction);
-
         listenForPreferenceChange(
                 PreferenceKeys.REMOVAL_ACTION,
                 PreferenceKeys.CONVERSATION_LIST_SWIPE,
@@ -258,11 +251,4 @@
             }
         }
     }
-
-    private void updateListSwipeTitle(final String removalAction) {
-        final CheckBoxPreference listSwipePreference = (CheckBoxPreference)
-                findPreference(MailPrefs.PreferenceKeys.CONVERSATION_LIST_SWIPE);
-        listSwipePreference.setTitle(MailPrefs.RemovalActions.DELETE.equals(removalAction) ?
-                R.string.preference_swipe_title_delete : R.string.preference_swipe_title_archive);
-    }
 }
diff --git a/src/com/android/mail/ui/settings/MailPreferenceActivity.java b/src/com/android/mail/ui/settings/MailPreferenceActivity.java
index 4af3300..57bb755 100644
--- a/src/com/android/mail/ui/settings/MailPreferenceActivity.java
+++ b/src/com/android/mail/ui/settings/MailPreferenceActivity.java
@@ -17,6 +17,7 @@
 
 package com.android.mail.ui.settings;
 
+import android.app.ActionBar;
 import android.app.Fragment;
 import android.app.LoaderManager.LoaderCallbacks;
 import android.content.CursorLoader;
@@ -50,6 +51,13 @@
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
+        final ActionBar actionBar = getActionBar();
+        if (actionBar != null) {
+            // Hide the app icon.
+            actionBar.setIcon(android.R.color.transparent);
+            actionBar.setDisplayUseLogoEnabled(false);
+        }
+
         getLoaderManager().initLoader(ACCOUNT_LOADER_ID, null, new AccountLoaderCallbacks());
     }
 
diff --git a/src/com/android/mail/utils/AttachmentUtils.java b/src/com/android/mail/utils/AttachmentUtils.java
index 85f5206..4837f7a 100644
--- a/src/com/android/mail/utils/AttachmentUtils.java
+++ b/src/com/android/mail/utils/AttachmentUtils.java
@@ -231,7 +231,7 @@
             }
 
             return cachedFileUri;
-        } catch (IOException e) {
+        } catch (IOException | SecurityException e) {
             // Catch any exception here to allow for unexpected failures during caching se we don't
             // leave app in inconsistent state as we call this method outside of a transaction for
             // performance reasons.
diff --git a/src/com/android/mail/utils/BitmapUtil.java b/src/com/android/mail/utils/BitmapUtil.java
index 6f61f56..7cde938 100644
--- a/src/com/android/mail/utils/BitmapUtil.java
+++ b/src/com/android/mail/utils/BitmapUtil.java
@@ -17,7 +17,12 @@
 package com.android.mail.utils;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.Color;
 import android.graphics.Matrix;
+import android.graphics.Paint;
+import android.graphics.PorterDuff;
+import android.graphics.PorterDuffXfermode;
 
 /**
  * Provides static functions to decode bitmaps at the optimal size
@@ -172,4 +177,43 @@
         return cropped;
     }
 
+    /**
+     * Frames the input bitmap in a circle.
+     */
+    public static Bitmap frameBitmapInCircle(Bitmap input) {
+        if (input == null) {
+            return null;
+        }
+
+        // Crop the image if not squared.
+        int inputWidth = input.getWidth();
+        int inputHeight = input.getHeight();
+        int targetX, targetY, targetSize;
+        if (inputWidth >= inputHeight) {
+            targetX = inputWidth / 2 - inputHeight / 2;
+            targetY = 0;
+            targetSize = inputHeight;
+        } else {
+            targetX = 0;
+            targetY = inputHeight / 2 - inputWidth / 2;
+            targetSize = inputWidth;
+        }
+
+        // Create an output bitmap and a canvas to draw on it.
+        Bitmap output = Bitmap.createBitmap(targetSize, targetSize, Bitmap.Config.ARGB_8888);
+        Canvas canvas = new Canvas(output);
+
+        // Create a black paint to draw the mask.
+        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
+        paint.setColor(Color.BLACK);
+
+        // Draw a circle.
+        canvas.drawCircle(targetSize / 2, targetSize / 2, targetSize / 2, paint);
+
+        // Replace the black parts of the mask with the input image.
+        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
+        canvas.drawBitmap(input, targetX /* left */, targetY /* top */, paint);
+
+        return output;
+    }
 }
diff --git a/src/com/android/mail/utils/EmptyStateUtils.java b/src/com/android/mail/utils/EmptyStateUtils.java
new file mode 100644
index 0000000..93435a2
--- /dev/null
+++ b/src/com/android/mail/utils/EmptyStateUtils.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2014 Google Inc.
+ * Licensed to 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.mail.utils;
+
+import android.content.res.Resources;
+import android.support.v4.text.BidiFormatter;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.android.mail.R;
+import com.android.mail.providers.Folder;
+
+/**
+ * Utility class for handling logic related to empty states throughout the app.
+ */
+public class EmptyStateUtils {
+
+    /**
+     * Given an empty folder, set the corresponding empty state icon for that folder.
+     */
+    public static void bindEmptyFolderIcon(ImageView view, Folder folder) {
+        if (folder == null) {
+            view.setImageResource(R.drawable.ic_empty_default);
+        } else if (folder.isInbox()) {
+            view.setImageResource(R.drawable.ic_empty_inbox);
+        } else if (folder.isSearch()) {
+            view.setImageResource(R.drawable.ic_empty_search);
+        } else if (folder.isSpam()) {
+            view.setImageResource(R.drawable.ic_empty_spam);
+        } else if (folder.isTrash()) {
+            view.setImageResource(R.drawable.ic_empty_trash);
+        } else {
+            view.setImageResource(R.drawable.ic_empty_default);
+        }
+    }
+
+    /**
+     * Given an empty folder, set the corresponding text for indicating the empty state.
+     */
+    public static void bindEmptyFolderText(TextView view, Folder folder, Resources res,
+            String searchQuery, BidiFormatter bidiFormatter) {
+        if (folder == null) {
+            view.setText(R.string.empty_folder);
+        } else if (folder.isInbox()) {
+            view.setText(R.string.empty_inbox);
+        } else if (folder.isSearch()) {
+            final String text = res.getString(R.string.empty_search,
+                    bidiFormatter.unicodeWrap(searchQuery));
+            view.setText(text);
+        } else if (folder.isSpam()) {
+            view.setText(R.string.empty_spam_folder);
+        } else if (folder.isTrash()) {
+            view.setText(R.string.empty_trash_folder);
+        } else {
+            view.setText(R.string.empty_folder);
+        }
+    }
+}
diff --git a/src/com/android/mail/utils/FragmentStatePagerAdapter2.java b/src/com/android/mail/utils/FragmentStatePagerAdapter2.java
index a8cba20..752e127 100644
--- a/src/com/android/mail/utils/FragmentStatePagerAdapter2.java
+++ b/src/com/android/mail/utils/FragmentStatePagerAdapter2.java
@@ -43,7 +43,7 @@
  * </ul>
  */
 public abstract class FragmentStatePagerAdapter2 extends PagerAdapter {
-    private static final String TAG = "FragmentStatePagerAdapter";
+    private static final String TAG = "FSPA"; // the support lib's tag is too long and crashes :)
     private static final boolean DEBUG = false;
 
     private final FragmentManager mFragmentManager;
diff --git a/src/com/android/mail/utils/HtmlSanitizer.java b/src/com/android/mail/utils/HtmlSanitizer.java
index 501e4db..ca831df 100644
--- a/src/com/android/mail/utils/HtmlSanitizer.java
+++ b/src/com/android/mail/utils/HtmlSanitizer.java
@@ -44,6 +44,17 @@
  * or comparable.
  */
 public final class HtmlSanitizer {
+
+    /**
+     * This version number should be bumped each time a meaningful change is made to this sanitizer
+     * configuration which influences its output. It is compared against a minimum target version
+     * number. If it meets or exceeds the minimum target version, the result of the sanitizer is
+     * free to be shown in a standard webview. If it does not meet the minimum target version then
+     * the sanitized output is deemed untrustworthy and is shown in a sandboxed webview with
+     * javascript execution disabled.
+     */
+    public static final int VERSION = 1;
+
     private static final String LOG_TAG = LogTag.getLogTag();
 
     /**
@@ -90,7 +101,7 @@
                 final String value = attrs.remove(idIndex + 1);
                 attrs.remove(idIndex);
 
-                // AOL uses a specifc id value to indicate quoted text
+                // AOL uses a specific id value to indicate quoted text
                 showHideQuotedText = value.startsWith("AOLMsgPart");
             }
 
@@ -105,10 +116,22 @@
     };
 
     /**
-     * Disallow the "mailto:" url on images so that "Show pictures" can't be used to start composing
-     * a bajillion emails.
+     * Disallow "cid:" and "mailto:" urls on all tags not &lt;a&gt; or &lt;img&gt;.
      */
-    private static final AttributePolicy NO_MAILTO_URL =
+    private static final AttributePolicy URL_PROTOCOLS =
+            new FilterUrlByProtocolAttributePolicy(ImmutableList.of("http", "https"));
+
+    /**
+     * Disallow the "cid:" url on links. Do allow "mailto:" urls to support sending mail.
+     */
+    private static final AttributePolicy A_HREF_PROTOCOLS =
+            new FilterUrlByProtocolAttributePolicy(ImmutableList.of("mailto", "http", "https"));
+
+    /**
+     * Disallow the "mailto:" url on images so that "Show pictures" can't be used to start composing
+     * a bajillion emails. Do allow "cid:" urls to support inline image attachments.
+     */
+    private static final AttributePolicy IMG_SRC_PROTOCOLS =
             new FilterUrlByProtocolAttributePolicy(ImmutableList.of("cid", "http", "https"));
 
     /**
@@ -169,17 +192,20 @@
             .allowUrlProtocols("cid", "http", "https", "mailto")
             .allowStyling(CssSchema.union(CssSchema.DEFAULT, ADDITIONAL_CSS))
             .disallowTextIn("applet", "frameset", "object", "script", "style", "title")
-            .allowElements("a").allowAttributes("coords", "href", "name", "shape").onElements("a")
+            .allowElements("a")
+                .allowAttributes("coords", "name", "shape").onElements("a")
+                .allowAttributes("href").matching(A_HREF_PROTOCOLS).onElements("a")
             .allowElements("abbr").allowAttributes("title").onElements("abbr")
             .allowElements("acronym").allowAttributes("title").onElements("acronym")
             .allowElements("address")
             .allowElements("area")
-                .allowAttributes("alt", "coords", "href", "nohref", "name", "shape")
-            .onElements("area")
+                .allowAttributes("alt", "coords", "nohref", "name", "shape").onElements("area")
+                .allowAttributes("href").matching(URL_PROTOCOLS).onElements("area")
             .allowElements("article")
             .allowElements("aside")
             .allowElements("b")
-            .allowElements("base").allowAttributes("href").onElements("base")
+            .allowElements("base")
+                .allowAttributes("href").matching(URL_PROTOCOLS).onElements("base")
             .allowElements("bdi").allowAttributes("dir").onElements("bdi")
             .allowElements("bdo").allowAttributes("dir").onElements("bdo")
             .allowElements("big")
@@ -196,7 +222,7 @@
             .allowElements("cite")
             .allowElements("code")
             .allowElements("col")
-            .   allowAttributes("align", "bgcolor", "char", "charoff", "span", "valign", "width")
+                .allowAttributes("align", "bgcolor", "char", "charoff", "span", "valign", "width")
             .onElements("col")
             .allowElements("colgroup")
                 .allowAttributes("align", "char", "charoff", "span", "valign", "width")
@@ -236,18 +262,23 @@
             .onElements("hr")
             .allowElements("i")
             .allowElements("img")
+                .allowAttributes("src").matching(IMG_SRC_PROTOCOLS).onElements("img")
+                .allowAttributes("longdesc").matching(URL_PROTOCOLS).onElements("img")
                 .allowAttributes("align", "alt", "border", "crossorigin", "height", "hspace",
-                        "ismap", "longdesc", "usemap", "vspace", "width")
+                        "ismap", "usemap", "vspace", "width")
             .onElements("img")
-            .allowAttributes("src").matching(NO_MAILTO_URL).onElements("img")
             .allowElements("input")
+                .allowAttributes("src").matching(URL_PROTOCOLS).onElements("input")
+                .allowAttributes("formaction").matching(URL_PROTOCOLS).onElements("input")
                 .allowAttributes("accept", "align", "alt", "autocomplete", "autofocus", "checked",
-                        "disabled", "form", "formaction", "formenctype", "formmethod",
-                        "formnovalidate", "formtarget", "height", "list", "max", "maxlength", "min",
-                        "multiple", "name", "pattern", "placeholder", "readonly", "required",
-                        "size", "src", "step", "type", "value", "width")
+                        "disabled", "form", "formenctype", "formmethod", "formnovalidate",
+                        "formtarget", "height", "list", "max", "maxlength", "min", "multiple",
+                        "name", "pattern", "placeholder", "readonly", "required", "size", "step",
+                        "type", "value", "width")
             .onElements("input")
-            .allowElements("ins").allowAttributes("cite", "datetime").onElements("ins")
+            .allowElements("ins")
+                .allowAttributes("cite").matching(URL_PROTOCOLS).onElements("ins")
+                .allowAttributes("datetime").onElements("ins")
             .allowElements("kbd")
             .allowElements("keygen")
                 .allowAttributes("autofocus", "challenge", "disabled", "form", "keytype", "name")
@@ -260,9 +291,9 @@
             .allowElements("mark")
             .allowElements("menu").allowAttributes("label", "type").onElements("menu")
             .allowElements("menuitem")
-                .allowAttributes("checked", "command", "default", "disabled", "icon", "label",
-                        "type", "radiogroup")
-            .onElements("menuitem")
+                .allowAttributes("icon").matching(URL_PROTOCOLS).onElements("menuitem")
+                .allowAttributes("checked", "command", "default", "disabled", "label", "type",
+                        "radiogroup").onElements("menuitem")
             .allowElements("meter")
                 .allowAttributes("form", "high", "low", "max", "min", "optimum", "value")
             .onElements("meter")
@@ -278,7 +309,7 @@
             .allowElements("p").allowAttributes("align").onElements("p")
             .allowElements("pre").allowAttributes("width").onElements("pre")
             .allowElements("progress").allowAttributes("max", "value").onElements("progress")
-            .allowElements("q").allowAttributes("cite").onElements("q")
+            .allowElements("q").allowAttributes("cite").matching(URL_PROTOCOLS).onElements("q")
             .allowElements("rp")
             .allowElements("rt")
             .allowElements("ruby")
@@ -290,7 +321,6 @@
                         "size")
             .onElements("select")
             .allowElements("small")
-            .allowElements("source").allowAttributes("media", "src", "type").onElements("source")
             .allowElements("span")
             .allowElements("strike")
             .allowElements("strong")
@@ -322,8 +352,6 @@
             .allowElements("time").allowAttributes("datetime").onElements("time")
             .allowElements("tr")
                 .allowAttributes("align", "bgcolor", "char", "charoff", "valign").onElements("tr")
-            .allowElements("track")
-                .allowAttributes("default", "kind", "label", "src", "srclang").onElements("track")
             .allowElements("tt")
             .allowElements("u")
             .allowElements("ul").allowAttributes("compact", "type").onElements("ul")
diff --git a/src/com/android/mail/utils/HtmlUtils.java b/src/com/android/mail/utils/HtmlUtils.java
index 216cf40..6e35da1 100644
--- a/src/com/android/mail/utils/HtmlUtils.java
+++ b/src/com/android/mail/utils/HtmlUtils.java
@@ -55,7 +55,7 @@
         final Spanned spanned = htmlTree.getSpanned();
         AnalyticsTimer.getInstance().logDuration(AnalyticsTimer.COMPOSE_HTML_TO_SPAN, true,
                 "compose", "html_to_span", null);
-        LogUtils.v(LOG_TAG, "htmlToSpan completed, input: %d, result: %d", html.length(),
+        LogUtils.i(LOG_TAG, "htmlToSpan completed, input: %d, result: %d", html.length(),
                 spanned.length());
         return spanned;
     }
diff --git a/src/com/android/mail/utils/KeyboardUtils.java b/src/com/android/mail/utils/KeyboardUtils.java
new file mode 100644
index 0000000..7bfd61c
--- /dev/null
+++ b/src/com/android/mail/utils/KeyboardUtils.java
@@ -0,0 +1,42 @@
+/**
+ * Copyright (c) 2014, Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.mail.utils;
+
+import android.view.KeyEvent;
+
+/**
+ * Utility class for keyboard navigation.
+ */
+public class KeyboardUtils {
+    /**
+     * Determine if the provided keycode is toward the start direction of the normal layout.
+     * This is used for keyboard navigation since the layouts are flipped for RTL.
+     */
+    public static boolean isKeycodeDirectionStart(int keyCode, boolean isRtl) {
+        return (!isRtl && keyCode == KeyEvent.KEYCODE_DPAD_LEFT) ||
+                (isRtl && keyCode == KeyEvent.KEYCODE_DPAD_RIGHT);
+    }
+
+    /**
+     * Determine if the provided keycode is toward the end direction of the normal layout.
+     * This is used for keyboard navigation since the layouts are flipped for RTL.
+     */
+    public static boolean isKeycodeDirectionEnd(int keyCode, boolean isRtl) {
+        return (isRtl && keyCode == KeyEvent.KEYCODE_DPAD_LEFT) ||
+                (!isRtl && keyCode == KeyEvent.KEYCODE_DPAD_RIGHT);
+    }
+}
diff --git a/src/com/android/mail/utils/LogUtils.java b/src/com/android/mail/utils/LogUtils.java
index b2cfc5b..5d4f434 100644
--- a/src/com/android/mail/utils/LogUtils.java
+++ b/src/com/android/mail/utils/LogUtils.java
@@ -64,8 +64,7 @@
      * production releases.  This should be set to DEBUG for production releases, and VERBOSE for
      * internal builds.
      */
-    // STOPSHIP: ship with DEBUG set
-    private static final int MAX_ENABLED_LOG_LEVEL = VERBOSE;
+    private static final int MAX_ENABLED_LOG_LEVEL = DEBUG;
 
     private static Boolean sDebugLoggingEnabledForTests = null;
 
diff --git a/src/com/android/mail/utils/MimeType.java b/src/com/android/mail/utils/MimeType.java
index db5ffd1..a5ec2f3 100644
--- a/src/com/android/mail/utils/MimeType.java
+++ b/src/com/android/mail/utils/MimeType.java
@@ -74,7 +74,9 @@
         if (contentUri != null) {
             Utils.setIntentDataAndTypeAndNormalize(mimetypeIntent, contentUri, contentType);
         } else {
-            Utils.setIntentTypeAndNormalize(mimetypeIntent, contentType);
+            // Fake a reasonable looking URI so that intent filters that specify a scheme will match
+            final Uri dummyUri = Uri.parse("content://" + context.getPackageName());
+            Utils.setIntentDataAndTypeAndNormalize(mimetypeIntent, dummyUri, contentType);
         }
 
         PackageManager manager;
diff --git a/src/com/android/mail/utils/NotificationActionUtils.java b/src/com/android/mail/utils/NotificationActionUtils.java
index 7430c42..72401c0 100644
--- a/src/com/android/mail/utils/NotificationActionUtils.java
+++ b/src/com/android/mail/utils/NotificationActionUtils.java
@@ -635,6 +635,7 @@
 
         builder.setSmallIcon(R.drawable.ic_notification_mail_24dp);
         builder.setWhen(notificationAction.getWhen());
+        builder.setCategory(NotificationCompat.CATEGORY_EMAIL);
 
         final RemoteViews undoView =
                 new RemoteViews(context.getPackageName(), R.layout.undo_notification);
@@ -865,13 +866,17 @@
     public static void resendNotifications(final Context context, final Account account,
             final Folder folder) {
         LogUtils.i(LOG_TAG, "resendNotifications account: %s, folder: %s",
-                LogUtils.sanitizeName(LOG_TAG, account.getEmailAddress()),
-                LogUtils.sanitizeName(LOG_TAG, folder.name));
+                account == null ? null : LogUtils.sanitizeName(LOG_TAG, account.getEmailAddress()),
+                folder == null ? null : LogUtils.sanitizeName(LOG_TAG, folder.name));
 
         final Intent intent = new Intent(MailIntentService.ACTION_RESEND_NOTIFICATIONS);
-        intent.setPackage(context.getPackageName()); // Make sure we only deliver this to ourself
-        intent.putExtra(Utils.EXTRA_ACCOUNT_URI, account.uri);
-        intent.putExtra(Utils.EXTRA_FOLDER_URI, folder.folderUri.fullUri);
+        intent.setPackage(context.getPackageName()); // Make sure we only deliver this to ourselves
+        if (account != null) {
+            intent.putExtra(Utils.EXTRA_ACCOUNT_URI, account.uri);
+        }
+        if (folder != null) {
+            intent.putExtra(Utils.EXTRA_FOLDER_URI, folder.folderUri.fullUri);
+        }
         context.startService(intent);
     }
 
diff --git a/src/com/android/mail/utils/NotificationUtils.java b/src/com/android/mail/utils/NotificationUtils.java
index 7a7e3f8..456d47a 100644
--- a/src/com/android/mail/utils/NotificationUtils.java
+++ b/src/com/android/mail/utils/NotificationUtils.java
@@ -26,14 +26,7 @@
 import android.database.Cursor;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
-import android.graphics.BitmapShader;
-import android.graphics.Canvas;
-import android.graphics.Paint;
-import android.graphics.PorterDuff;
-import android.graphics.PorterDuffXfermode;
-import android.graphics.RectF;
-import android.graphics.Rect;
-import android.graphics.Shader;
+import android.net.MailTo;
 import android.net.Uri;
 import android.os.Looper;
 import android.provider.ContactsContract;
@@ -58,7 +51,7 @@
 import com.android.mail.browse.ConversationItemView;
 import com.android.mail.browse.MessageCursor;
 import com.android.mail.browse.SendersView;
-import com.android.mail.photo.ContactPhotoFetcher;
+import com.android.mail.photo.ContactFetcher;
 import com.android.mail.photomanager.LetterTileProvider;
 import com.android.mail.preferences.AccountPreferences;
 import com.android.mail.preferences.FolderPreferences;
@@ -347,10 +340,10 @@
      * This happens when locale changes.
      **/
     public static void cancelAndResendNotificationsOnLocaleChange(
-            Context context, final ContactPhotoFetcher photoFetcher) {
+            Context context, final ContactFetcher contactFetcher) {
         LogUtils.d(LOG_TAG, "cancelAndResendNotificationsOnLocaleChange");
         sBidiFormatter = BidiFormatter.getInstance();
-        resendNotifications(context, true, null, null, photoFetcher);
+        resendNotifications(context, true, null, null, contactFetcher);
     }
 
     /**
@@ -364,14 +357,17 @@
      * @param cancelExisting True, if all notifications should be canceled before resending.
      *                       False, otherwise.
      * @param accountUri The {@link Uri} of the {@link Account} of the notification
-     *                   upon which an action occurred.
+     *                   upon which an action occurred, or {@code null}.
      * @param folderUri The {@link Uri} of the {@link Folder} of the notification
-     *                  upon which an action occurred.
+     *                  upon which an action occurred, or {@code null}.
      */
     public static void resendNotifications(Context context, final boolean cancelExisting,
             final Uri accountUri, final FolderUri folderUri,
-            final ContactPhotoFetcher photoFetcher) {
-        LogUtils.d(LOG_TAG, "resendNotifications ");
+            final ContactFetcher contactFetcher) {
+        LogUtils.i(LOG_TAG, "resendNotifications cancelExisting: %b, account: %s, folder: %s",
+                cancelExisting,
+                accountUri == null ? null : LogUtils.sanitizeName(LOG_TAG, accountUri.toString()),
+                folderUri == null ? null : LogUtils.sanitizeName(LOG_TAG, folderUri.toString()));
 
         if (cancelExisting) {
             LogUtils.d(LOG_TAG, "resendNotifications - cancelling all");
@@ -403,7 +399,7 @@
                     NotificationActionUtils.sUndoNotifications.get(notificationId);
             if (undoableAction == null) {
                 validateNotifications(context, folder, notification.account, true,
-                        false, notification, photoFetcher);
+                        false, notification, contactFetcher);
             } else {
                 // Create an undo notification
                 NotificationActionUtils.createUndoNotification(context, undoableAction);
@@ -497,7 +493,7 @@
      */
     public static void setNewEmailIndicator(Context context, final int unreadCount,
             final int unseenCount, final Account account, final Folder folder,
-            final boolean getAttention, final ContactPhotoFetcher photoFetcher) {
+            final boolean getAttention, final ContactFetcher contactFetcher) {
         LogUtils.d(LOG_TAG, "setNewEmailIndicator unreadCount = %d, unseenCount = %d, account = %s,"
                 + " folder = %s, getAttention = %b", unreadCount, unseenCount,
                 account.getEmailAddress(), folder.folderUri, getAttention);
@@ -540,7 +536,7 @@
 
         if (NotificationActionUtils.sUndoNotifications.get(notificationId) == null) {
             validateNotifications(context, folder, account, getAttention, ignoreUnobtrusiveSetting,
-                    key, photoFetcher);
+                    key, contactFetcher);
         }
     }
 
@@ -549,7 +545,7 @@
      */
     private static void validateNotifications(Context context, final Folder folder,
             final Account account, boolean getAttention, boolean ignoreUnobtrusiveSetting,
-            NotificationKey key, final ContactPhotoFetcher photoFetcher) {
+            NotificationKey key, final ContactFetcher contactFetcher) {
 
         NotificationManagerCompat nm = NotificationManagerCompat.from(context);
 
@@ -633,13 +629,17 @@
 
             if (com.android.mail.utils.Utils.isRunningLOrLater()) {
                 notification.setColor(
-                        context.getResources().getColor(R.color.notification_icon_gmail_red));
+                        context.getResources().getColor(R.color.notification_icon_color));
             }
-            // TODO(shahrk) - fix for multiple mail
-            // if(folder.notificationIconResId != 0 || unseenCount <=  2)
-            notification.setSmallIcon(R.drawable.ic_notification_mail_24dp);
+
+            if(unseenCount > 1) {
+                notification.setSmallIcon(R.drawable.ic_notification_multiple_mail_24dp);
+            } else {
+                notification.setSmallIcon(R.drawable.ic_notification_mail_24dp);
+            }
             notification.setTicker(account.getDisplayName());
             notification.setVisibility(NotificationCompat.VISIBILITY_PRIVATE);
+            notification.setCategory(NotificationCompat.CATEGORY_EMAIL);
 
             final long when;
 
@@ -720,7 +720,7 @@
                     configureLatestEventInfoFromConversation(context, account, folderPreferences,
                             notification, wearableExtender, msgNotifications, notificationId,
                             cursor, clickIntent, notificationIntent, unreadCount, unseenCount,
-                            folder, when, photoFetcher);
+                            folder, when, contactFetcher);
                     eventInfoConfigured = true;
                 }
             }
@@ -852,19 +852,18 @@
     private static Notification createPublicNotification(Context context, Account account,
             Folder folder, long when, int unseenCount, int unreadCount, PendingIntent clickIntent) {
         final boolean multipleUnseen = unseenCount > 1;
-        final Bitmap largeIcon = getDefaultNotificationIcon(context, folder, multipleUnseen);
 
         final NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
                 .setContentTitle(createTitle(context, unseenCount))
                 .setContentText(account.getDisplayName())
                 .setContentIntent(clickIntent)
-                .setLargeIcon(largeIcon)
                 .setNumber(unreadCount)
                 .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
+                .setCategory(NotificationCompat.CATEGORY_EMAIL)
                 .setWhen(when);
 
         if (com.android.mail.utils.Utils.isRunningLOrLater()) {
-            builder.setColor(context.getResources().getColor(R.color.notification_icon_gmail_red));
+            builder.setColor(context.getResources().getColor(R.color.notification_icon_color));
         }
 
         // if this public notification summarizes multiple single notifications, mark it as the
@@ -872,14 +871,11 @@
         if (multipleUnseen) {
             builder.setGroup(createGroupKey(account, folder));
             builder.setGroupSummary(true);
+            builder.setSmallIcon(R.drawable.ic_notification_multiple_mail_24dp);
+        } else {
+            builder.setSmallIcon(R.drawable.ic_notification_mail_24dp);
         }
 
-        // TODO(shahrk) - fix for multiple mail
-        // If the folder is a special label or only has 1 unseen, tack on the badge
-        // if (folder.notificationIconResId != 0 || !multipleUnseen) {
-        builder.setSmallIcon(R.drawable.ic_notification_mail_24dp);
-
-
         return builder.build();
     }
 
@@ -945,26 +941,6 @@
         return intent;
     }
 
-    private static Bitmap getDefaultNotificationIcon(
-            final Context context, final Folder folder, final boolean multipleNew) {
-        final int resId;
-        if (folder.notificationIconResId != 0) {
-            resId = folder.notificationIconResId;
-        } else if (multipleNew) {
-            resId = R.drawable.ic_notification_multiple_mail_24dp;
-        } else {
-            resId = R.drawable.ic_notification_anonymous_avatar_32dp;
-        }
-
-        final Bitmap icon = getIcon(context, resId);
-
-        if (icon == null) {
-            LogUtils.e(LOG_TAG, "Couldn't decode notif icon res id %d", resId);
-        }
-
-        return icon;
-    }
-
     private static Bitmap getIcon(final Context context, final int resId) {
         final Bitmap cachedIcon = sNotificationIcons.get(resId);
         if (cachedIcon != null) {
@@ -981,23 +957,21 @@
         Bitmap bg = sDefaultWearableBg.get();
         if (bg == null) {
             bg = BitmapFactory.decodeResource(context.getResources(), R.drawable.bg_email);
-            sDefaultWearableBg = new WeakReference<Bitmap>(bg);
+            sDefaultWearableBg = new WeakReference<>(bg);
         }
         return bg;
     }
 
     private static void configureLatestEventInfoFromConversation(final Context context,
             final Account account, final FolderPreferences folderPreferences,
-            final NotificationCompat.Builder notification,
+            final NotificationCompat.Builder notificationBuilder,
             final NotificationCompat.WearableExtender wearableExtender,
             final Map<Integer, NotificationBuilders> msgNotifications,
             final int summaryNotificationId, final Cursor conversationCursor,
             final PendingIntent clickIntent, final Intent notificationIntent,
             final int unreadCount, final int unseenCount,
-            final Folder folder, final long when, final ContactPhotoFetcher photoFetcher) {
+            final Folder folder, final long when, final ContactFetcher contactFetcher) {
         final Resources res = context.getResources();
-        final String notificationAccountDisplayName = account.getDisplayName();
-        final String notificationAccountEmail = account.getEmailAddress();
         final boolean multipleUnseen = unseenCount > 1;
 
         LogUtils.i(LOG_TAG, "Showing notification with unreadCount of %d and unseenCount of %d",
@@ -1015,15 +989,11 @@
             // Build the string that describes the number of new messages
             final String newMessagesString = createTitle(context, unseenCount);
 
-            // Use the default notification icon
-            notification.setLargeIcon(
-                    getDefaultNotificationIcon(context, folder, true /* multiple new messages */));
-
             // The ticker initially start as the new messages string.
             notificationTicker = newMessagesString;
 
             // The title of the notification is the new messages string
-            notification.setContentTitle(newMessagesString);
+            notificationBuilder.setContentTitle(newMessagesString);
 
             // TODO(skennedy) Can we remove this check?
             if (com.android.mail.utils.Utils.isRunningJellybeanOrLater()) {
@@ -1032,15 +1002,17 @@
                         R.integer.max_num_notification_digest_items);
 
                 // The body of the notification is the account name, or the label name.
-                notification.setSubText(
-                        isInbox ? notificationAccountDisplayName : notificationLabelName);
+                notificationBuilder.setSubText(
+                        isInbox ? account.getDisplayName() : notificationLabelName);
 
                 final NotificationCompat.InboxStyle digest =
-                        new NotificationCompat.InboxStyle(notification);
+                        new NotificationCompat.InboxStyle(notificationBuilder);
 
                 // Group by account and folder
                 final String notificationGroupKey = createGroupKey(account, folder);
-                notification.setGroup(notificationGroupKey).setGroupSummary(true);
+                // Track all senders to later tag them along with the digest notification
+                final HashSet<String> senderAddressesSet = new HashSet<String>();
+                notificationBuilder.setGroup(notificationGroupKey).setGroupSummary(true);
 
                 ConfigResult firstResult = null;
                 int numDigestItems = 0;
@@ -1070,13 +1042,14 @@
                                     fromAddress = "";
                                 }
                                 from = getDisplayableSender(fromAddress);
+                                addEmailAddressToSet(fromAddress, senderAddressesSet);
                             }
                             while (messageCursor.moveToPosition(messageCursor.getPosition() - 1)) {
                                 final Message message = messageCursor.getMessage();
                                 if (!message.read &&
                                         !fromAddress.contentEquals(message.getFrom())) {
                                     multipleUnreadThread = true;
-                                    break;
+                                    addEmailAddressToSet(message.getFrom(), senderAddressesSet);
                                 }
                             }
                             final SpannableStringBuilder sendersBuilder;
@@ -1085,7 +1058,7 @@
                                         res.getInteger(R.integer.swipe_senders_length);
 
                                 sendersBuilder = getStyledSenders(context, conversationCursor,
-                                        sendersLength, notificationAccountEmail);
+                                        sendersLength, account);
                             } else {
                                 sendersBuilder =
                                         new SpannableStringBuilder(getWrappedFromString(from));
@@ -1100,18 +1073,15 @@
                             // Adding conversation notification for Wear.
                             NotificationCompat.Builder conversationNotif =
                                     new NotificationCompat.Builder(context);
+                            conversationNotif.setCategory(NotificationCompat.CATEGORY_EMAIL);
 
-                            // TODO(shahrk) - fix for multiple mail
-                            // Check that the group's folder is assigned an icon res (one of the
-                            // 4 sections). If it is, we can add the gmail badge. If not, it is
-                            // accompanied by the multiple_mail_24dp icon and we don't want a badge
-                            // if (folder.notificationIconResId != 0) {
-                            conversationNotif.setSmallIcon(R.drawable.ic_notification_mail_24dp);
+                            conversationNotif.setSmallIcon(
+                                    R.drawable.ic_notification_multiple_mail_24dp);
 
                             if (com.android.mail.utils.Utils.isRunningLOrLater()) {
                                 conversationNotif.setColor(
                                         context.getResources()
-                                                .getColor(R.color.notification_icon_gmail_red));
+                                                .getColor(R.color.notification_icon_color));
                             }
                             conversationNotif.setContentText(digestLine);
                             Intent conversationNotificationIntent = createViewConversationIntent(
@@ -1128,6 +1098,7 @@
                                     (Long.MAX_VALUE - conversation.orderKey));
                             conversationNotif.setGroup(notificationGroupKey);
                             conversationNotif.setSortKey(groupSortKey);
+                            conversationNotif.setWhen(conversation.dateMs);
 
                             int conversationNotificationId = getNotificationId(
                                     summaryNotificationId, conversation.hashCode());
@@ -1138,9 +1109,8 @@
                                     configureNotifForOneConversation(context, account,
                                     folderPreferences, conversationNotif, conversationWearExtender,
                                     conversationCursor, notificationIntent, folder, when, res,
-                                    notificationAccountDisplayName, notificationAccountEmail,
                                     isInbox, notificationLabelName, conversationNotificationId,
-                                    photoFetcher);
+                                    contactFetcher);
                             msgNotifications.put(conversationNotificationId,
                                     NotificationBuilders.of(conversationNotif,
                                             conversationWearExtender));
@@ -1159,6 +1129,9 @@
                     }
                 } while (numDigestItems <= maxNumDigestItems && conversationCursor.moveToNext());
 
+                // Tag main digest notification with the senders
+                tagNotificationsWithPeople(notificationBuilder, senderAddressesSet);
+
                 if (firstResult != null && firstResult.contactIconInfo != null) {
                     wearableExtender.setBackground(firstResult.contactIconInfo.wearableBg);
                 } else {
@@ -1167,8 +1140,8 @@
                 }
             } else {
                 // The body of the notification is the account name, or the label name.
-                notification.setContentText(
-                        isInbox ? notificationAccountDisplayName : notificationLabelName);
+                notificationBuilder.setContentText(
+                        isInbox ? account.getDisplayName() : notificationLabelName);
             }
         } else {
             // For notifications for a single new conversation, we want to get the information
@@ -1178,10 +1151,9 @@
             seekToLatestUnreadConversation(conversationCursor);
 
             final ConfigResult result = configureNotifForOneConversation(context, account,
-                    folderPreferences, notification, wearableExtender, conversationCursor,
-                    notificationIntent, folder, when, res, notificationAccountDisplayName,
-                    notificationAccountEmail, isInbox, notificationLabelName,
-                    summaryNotificationId, photoFetcher);
+                    folderPreferences, notificationBuilder, wearableExtender, conversationCursor,
+                    notificationIntent, folder, when, res, isInbox, notificationLabelName,
+                    summaryNotificationId, contactFetcher);
             notificationTicker = result.notificationTicker;
 
             if (result.contactIconInfo != null) {
@@ -1200,15 +1172,15 @@
 
         if (notificationTicker != null) {
             // If we didn't generate a notification ticker, it will default to account name
-            notification.setTicker(notificationTicker);
+            notificationBuilder.setTicker(notificationTicker);
         }
 
         // Set the number in the notification
         if (unreadCount > 1) {
-            notification.setNumber(unreadCount);
+            notificationBuilder.setNumber(unreadCount);
         }
 
-        notification.setContentIntent(clickIntent);
+        notificationBuilder.setContentIntent(clickIntent);
     }
 
     /**
@@ -1217,17 +1189,18 @@
      */
     private static ConfigResult configureNotifForOneConversation(Context context,
             Account account, FolderPreferences folderPreferences,
-            NotificationCompat.Builder notification,
+            NotificationCompat.Builder notificationBuilder,
             NotificationCompat.WearableExtender wearExtender, Cursor conversationCursor,
             Intent notificationIntent, Folder folder, long when, Resources res,
-            String notificationAccountDisplayName, String notificationAccountEmail,
             boolean isInbox, String notificationLabelName, int notificationId,
-            final ContactPhotoFetcher photoFetcher) {
+            final ContactFetcher contactFetcher) {
 
         final ConfigResult result = new ConfigResult();
 
         final Conversation conversation = new Conversation(conversationCursor);
 
+        // Set of all unique senders for unseen messages
+        final HashSet<String> senderAddressesSet = new HashSet<String>();
         Cursor cursor = null;
         MessageCursor messageCursor = null;
         boolean multipleUnseenThread = false;
@@ -1253,8 +1226,9 @@
                 from = getDisplayableSender(fromAddress);
                 result.contactIconInfo = getContactIcon(
                         context, account.getAccountManagerAccount().name, from,
-                        getSenderAddress(fromAddress), folder, photoFetcher);
-                notification.setLargeIcon(result.contactIconInfo.icon);
+                        getSenderAddress(fromAddress), folder, contactFetcher);
+                addEmailAddressToSet(fromAddress, senderAddressesSet);
+                notificationBuilder.setLargeIcon(result.contactIconInfo.icon);
             }
 
             // Assume that the last message in this conversation is unread
@@ -1264,6 +1238,7 @@
                 final boolean unseen = !message.seen;
                 if (unseen) {
                     firstUnseenMessagePos = messageCursor.getPosition();
+                    addEmailAddressToSet(message.getFrom(), senderAddressesSet);
                     if (!multipleUnseenThread
                             && !fromAddress.contentEquals(message.getFrom())) {
                         multipleUnseenThread = true;
@@ -1282,35 +1257,30 @@
                     int sendersLength = res.getInteger(R.integer.swipe_senders_length);
 
                     final SpannableStringBuilder sendersBuilder = getStyledSenders(
-                            context, conversationCursor, sendersLength,
-                            notificationAccountEmail);
+                            context, conversationCursor, sendersLength, account);
 
-                    notification.setContentTitle(sendersBuilder);
+                    notificationBuilder.setContentTitle(sendersBuilder);
                     // For a single new conversation, the ticker is based on the sender's name.
                     result.notificationTicker = sendersBuilder.toString();
                 } else {
                     from = getWrappedFromString(from);
                     // The title of a single message the sender.
-                    notification.setContentTitle(from);
+                    notificationBuilder.setContentTitle(from);
                     // For a single new conversation, the ticker is based on the sender's name.
                     result.notificationTicker = from;
                 }
 
                 // The notification content will be the subject of the conversation.
-                notification.setContentText(getSingleMessageLittleText(context, subject));
+                notificationBuilder.setContentText(getSingleMessageLittleText(context, subject));
 
                 // The notification subtext will be the subject of the conversation for inbox
                 // notifications, or will based on the the label name for user label
                 // notifications.
-                notification.setSubText(isInbox ?
-                        notificationAccountDisplayName : notificationLabelName);
+                notificationBuilder.setSubText(isInbox ?
+                        account.getDisplayName() : notificationLabelName);
 
-                if (multipleUnseenThread) {
-                    notification.setLargeIcon(
-                            getDefaultNotificationIcon(context, folder, true));
-                }
                 final NotificationCompat.BigTextStyle bigText =
-                        new NotificationCompat.BigTextStyle(notification);
+                        new NotificationCompat.BigTextStyle(notificationBuilder);
 
                 // Seek the message cursor to the first unread message
                 final Message message;
@@ -1327,7 +1297,7 @@
                             folderPreferences.getNotificationActions(account);
 
                     NotificationActionUtils.addNotificationActions(context, notificationIntent,
-                            notification, wearExtender, account, conversation, message,
+                            notificationBuilder, wearExtender, account, conversation, message,
                             folder, notificationId, when, notificationActions);
                 }
             } else {
@@ -1335,18 +1305,20 @@
 
                 // The title of a single conversation notification is built from both the sender
                 // and subject of the new message.
-                notification.setContentTitle(
+                notificationBuilder.setContentTitle(
                         getSingleMessageNotificationTitle(context, from, subject));
 
                 // The notification content will be the subject of the conversation for inbox
                 // notifications, or will based on the the label name for user label
                 // notifications.
-                notification.setContentText(
-                        isInbox ? notificationAccountDisplayName : notificationLabelName);
+                notificationBuilder.setContentText(
+                        isInbox ? account.getDisplayName() : notificationLabelName);
 
                 // For a single new conversation, the ticker is based on the sender's name.
                 result.notificationTicker = from;
             }
+
+            tagNotificationsWithPeople(notificationBuilder, senderAddressesSet);
         } finally {
             if (messageCursor != null) {
                 messageCursor.close();
@@ -1358,6 +1330,23 @@
         return result;
     }
 
+    /**
+     * Iterates through all senders and adds their respective Uris to the notifications. Each Uri
+     * string consists of the prefix "mailto:" followed by the sender address.
+     * @param notificationBuilder
+     * @param senderAddressesSet List of unique senders to be tagged with the conversation
+     */
+    private static void tagNotificationsWithPeople(NotificationCompat.Builder notificationBuilder,
+            HashSet<String> senderAddressesSet) {
+        for (final String sender : senderAddressesSet) {
+            if (TextUtils.isEmpty(sender)) {
+                continue;
+            }
+            // Tag a notification with a person using "mailto:<sender address>"
+            notificationBuilder.addPerson(MailTo.MAILTO_SCHEME.concat(sender));
+        }
+    }
+
     private static String getWrappedFromString(String from) {
         if (from == null) {
             LogUtils.e(LOG_TAG, "null from string in getWrappedFromString");
@@ -1368,11 +1357,11 @@
     }
 
     private static SpannableStringBuilder getStyledSenders(final Context context,
-            final Cursor conversationCursor, final int maxLength, final String account) {
+            final Cursor conversationCursor, final int maxLength, final Account account) {
         final Conversation conversation = new Conversation(conversationCursor);
         final com.android.mail.providers.ConversationInfo conversationInfo =
                 conversation.conversationInfo;
-        final ArrayList<SpannableString> senders = new ArrayList<SpannableString>();
+        final ArrayList<SpannableString> senders = new ArrayList<>();
         if (sNotificationUnreadStyleSpan == null) {
             sNotificationUnreadStyleSpan = new TextAppearanceSpan(
                     context, R.style.NotificationSendersUnreadTextAppearance);
@@ -1690,14 +1679,14 @@
 
     private static ContactIconInfo getContactIcon(final Context context, String accountName,
             final String displayName, final String senderAddress, final Folder folder,
-            final ContactPhotoFetcher photoFetcher) {
+            final ContactFetcher contactFetcher) {
         if (Looper.myLooper() == Looper.getMainLooper()) {
             throw new IllegalStateException(
                     "getContactIcon should not be called on the main thread.");
         }
 
         final ContactIconInfo contactIconInfo;
-        if (senderAddress == null) {
+        if (TextUtils.isEmpty(senderAddress)) {
             contactIconInfo = new ContactIconInfo();
         } else {
             // Get the ideal size for this icon.
@@ -1711,8 +1700,8 @@
             final int idealWearableBgHeight =
                     res.getDimensionPixelSize(R.dimen.wearable_background_height);
 
-            if (photoFetcher != null) {
-                contactIconInfo = photoFetcher.getContactPhoto(context, accountName,
+            if (contactFetcher != null) {
+                contactIconInfo = contactFetcher.getContactPhoto(context, accountName,
                         senderAddress, idealIconWidth, idealIconHeight, idealWearableBgWidth,
                         idealWearableBgHeight);
             } else {
@@ -1725,16 +1714,20 @@
                 final Dimensions dimensions = new Dimensions(idealIconWidth, idealIconHeight,
                         Dimensions.SCALE_ONE);
 
-                contactIconInfo.icon = new LetterTileProvider(context).getLetterTile(dimensions,
-                        displayName, senderAddress);
+                contactIconInfo.icon = new LetterTileProvider(context.getResources())
+                        .getLetterTile(dimensions, displayName, senderAddress);
             }
-            contactIconInfo.icon = cropSquareIconToCircle(contactIconInfo.icon);
+
+            // Only turn the square photo/letter tile into a circle for L and later
+            if (Utils.isRunningLOrLater()) {
+                contactIconInfo.icon = BitmapUtil.frameBitmapInCircle(contactIconInfo.icon);
+            }
         }
 
         if (contactIconInfo.icon == null) {
-            // Icon should be the default mail icon.
-            contactIconInfo.icon = getDefaultNotificationIcon(context, folder,
-                    false /* single new message */);
+            // Use anonymous icon due to lack of sender
+            contactIconInfo.icon = getIcon(context,
+                    R.drawable.ic_notification_anonymous_avatar_32dp);
         }
 
         if (contactIconInfo.wearableBg == null) {
@@ -1815,28 +1808,6 @@
         return contactIconInfo;
     }
 
-    /**
-     * Crop a square bitmap into a circular one. Used for both contact photos and letter tiles.
-     * @param icon Square bitmap to crop
-     * @return Circular bitmap
-     */
-    private static Bitmap cropSquareIconToCircle(Bitmap icon) {
-        final int iconWidth = icon.getWidth();
-        final Bitmap newIcon = Bitmap.createBitmap(iconWidth, iconWidth, Bitmap.Config.ARGB_8888);
-        final Canvas canvas = new Canvas(newIcon);
-        final Paint paint = new Paint();
-        final Rect rect = new Rect(0, 0, icon.getWidth(),
-                icon.getHeight());
-
-        paint.setAntiAlias(true);
-        canvas.drawARGB(0, 0, 0, 0);
-        canvas.drawCircle(iconWidth/2, iconWidth/2, iconWidth/2, paint);
-        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
-        canvas.drawBitmap(icon, rect, rect, paint);
-
-        return newIcon;
-    }
-
     private static String getMessageBodyWithoutElidedText(final Message message) {
         return getMessageBodyWithoutElidedText(message.getBodyAsHtml());
     }
@@ -1902,6 +1873,28 @@
         return tokenizedAddress;
     }
 
+    /**
+     * Given a sender, retrieve the email address. If an email address is extracted, add it to the
+     * input set, otherwise ignore it.
+     * @param sender
+     * @param senderAddressesSet
+     */
+    private static void addEmailAddressToSet(String sender, HashSet<String> senderAddressesSet) {
+        // Only continue if we have a non-empty, non-null sender
+        if (!TextUtils.isEmpty(sender)) {
+            final EmailAddress address = EmailAddress.getEmailAddress(sender);
+            final String senderEmailAddress = address.getAddress();
+
+            // Add to set only if we have a non-empty email address
+            if (!TextUtils.isEmpty(senderEmailAddress)) {
+                senderAddressesSet.add(senderEmailAddress);
+            } else {
+                LogUtils.i(LOG_TAG, "Unable to grab email from \"%s\" for notification tagging",
+                        LogUtils.sanitizeName(LOG_TAG, sender));
+            }
+        }
+    }
+
     public static int getNotificationId(final android.accounts.Account account,
             final Folder folder) {
         return 1 ^ account.hashCode() ^ folder.hashCode();
diff --git a/src/com/android/mail/utils/RankedComparator.java b/src/com/android/mail/utils/RankedComparator.java
new file mode 100644
index 0000000..2fc1558
--- /dev/null
+++ b/src/com/android/mail/utils/RankedComparator.java
@@ -0,0 +1,75 @@
+/**
+ * Copyright (C) 2014 Google Inc.
+ * Licensed to 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.mail.utils;
+
+import com.google.android.mail.common.base.Function;
+import com.google.common.collect.ImmutableMap;
+
+import java.util.Comparator;
+import java.util.Map;
+
+/**
+ * Compares objects of the type {@code T} based on predefined order of the ranks of the type
+ * {@code K}. The ranks that are not in the predefined order will be considered larger than other
+ * ranks (if this comparator is used for sorting those elements will be at the end).
+ *
+ * @param <T> Type to be compared.
+ * @param <K> Type of the ranks used for comparison.
+ */
+public class RankedComparator<T, K> implements Comparator<T> {
+
+    private final Map<K, Integer> mRankOrder;
+
+    private final Function<T, K> mRankExtractorFunction;
+
+    /**
+     * Creates a comparator that compares objects of type {@code T} by extracting the ranks of the
+     * objects using {@code rankExtractorFunction} and comparing them by their position in
+     * {@code rankOrder}. Ranks not present in {@code rankOrder} are considered larger than the
+     * ranks present in the {@code rankOrder}.
+     *
+     * @param rankOrder             Order of the ranks.
+     * @param rankExtractorFunction Function that extracts rank from the object.
+     */
+    public RankedComparator(K[] rankOrder, Function<T, K> rankExtractorFunction) {
+        final ImmutableMap.Builder<K, Integer> orderBuilder = ImmutableMap.builder();
+        for (int i = 0; i < rankOrder.length; i++) {
+            orderBuilder.put(rankOrder[i], i);
+        }
+        mRankOrder = orderBuilder.build();
+
+        mRankExtractorFunction = rankExtractorFunction;
+    }
+
+    private int getOrder(T object) {
+        final K key = mRankExtractorFunction.apply(object);
+
+        if (mRankOrder.containsKey(key)) {
+            return mRankOrder.get(key);
+        }
+        return Integer.MAX_VALUE;
+    }
+
+    @Override
+    public int compare(T lhs, T rhs) {
+        final int orderLhs = getOrder(lhs);
+        final int orderRhs = getOrder(rhs);
+        // Order can be Integer.MAX_VALUE so subtraction should not be used.
+        return orderLhs < orderRhs ? -1 : (orderLhs == orderRhs ? 0 : 1);
+    }
+}
diff --git a/src/com/android/mail/utils/StyleUtils.java b/src/com/android/mail/utils/StyleUtils.java
index 622f19e..f8a0566 100644
--- a/src/com/android/mail/utils/StyleUtils.java
+++ b/src/com/android/mail/utils/StyleUtils.java
@@ -34,15 +34,24 @@
      * non-underline version {@link LinkStyleSpan} which calls the supplied listener when clicked.
      */
     public static void stripUnderlinesAndLinkUrls(TextView textView,
-                                                  View.OnClickListener onClickListener) {
+            View.OnClickListener onClickListener) {
         final Spannable spannable = (Spannable) textView.getText();
-        final URLSpan[] urls = textView.getUrls();
+        stripUnderlinesAndLinkUrls(spannable, onClickListener);
+    }
+
+    /**
+     * Removes any {@link android.text.style.URLSpan}s from the Spannable and replaces them with a
+     * non-underline version {@link LinkStyleSpan} which calls the supplied listener when clicked.
+     */
+    public static void stripUnderlinesAndLinkUrls(Spannable input,
+            View.OnClickListener onClickListener) {
+        final URLSpan[] urls = input.getSpans(0, input.length(), URLSpan.class);
 
         for (URLSpan span : urls) {
-            final int start = spannable.getSpanStart(span);
-            final int end = spannable.getSpanEnd(span);
-            spannable.removeSpan(span);
-            spannable.setSpan(new LinkStyleSpan(onClickListener), start, end,
+            final int start = input.getSpanStart(span);
+            final int end = input.getSpanEnd(span);
+            input.removeSpan(span);
+            input.setSpan(new LinkStyleSpan(onClickListener), start, end,
                     Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
         }
     }
diff --git a/src/com/android/mail/utils/Utils.java b/src/com/android/mail/utils/Utils.java
index 97b0c93..a9c93bf 100644
--- a/src/com/android/mail/utils/Utils.java
+++ b/src/com/android/mail/utils/Utils.java
@@ -20,14 +20,14 @@
 import android.app.Activity;
 import android.app.ActivityManager;
 import android.app.Fragment;
-import android.app.SearchManager;
+import android.content.ComponentCallbacks;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.database.Cursor;
 import android.graphics.Bitmap;
-import android.graphics.Typeface;
 import android.net.ConnectivityManager;
 import android.net.NetworkInfo;
 import android.net.Uri;
@@ -35,12 +35,10 @@
 import android.os.Build;
 import android.os.Bundle;
 import android.provider.Browser;
-import android.text.Spannable;
+import android.support.annotation.Nullable;
 import android.text.SpannableString;
 import android.text.Spanned;
 import android.text.TextUtils;
-import android.text.style.CharacterStyle;
-import android.text.style.StyleSpan;
 import android.text.style.TextAppearanceSpan;
 import android.view.Menu;
 import android.view.MenuItem;
@@ -63,7 +61,6 @@
 import com.android.mail.providers.UIProvider;
 import com.android.mail.providers.UIProvider.EditSettingsExtras;
 import com.android.mail.ui.HelpActivity;
-import com.android.mail.ui.ViewMode;
 import com.google.android.mail.common.html.parser.HtmlDocument;
 import com.google.android.mail.common.html.parser.HtmlParser;
 import com.google.android.mail.common.html.parser.HtmlTree;
@@ -100,7 +97,7 @@
     public static final String EXTRA_IGNORE_INITIAL_CONVERSATION_LIMIT =
             "ignore-initial-conversation-limit";
 
-    private static final String MAILTO_SCHEME = "mailto";
+    public static final String MAILTO_SCHEME = "mailto";
 
     /** Extra tag for debugging the blank fragment problem. */
     public static final String VIEW_DEBUGGING_TAG = "MailBlankFragment";
@@ -131,8 +128,6 @@
     public static final SimpleTimer sConvLoadTimer =
             new SimpleTimer(ENABLE_CONV_LOAD_TIMER).withSessionName("ConvLoadTimer");
 
-    private static final int[] STYLE_ATTR = new int[] {android.R.attr.background};
-
     public static boolean isRunningJellybeanOrLater() {
         return Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
     }
@@ -146,9 +141,7 @@
     }
 
     public static boolean isRunningLOrLater() {
-        //TODO: Update this to the L SDK once defined. Right now it is fine to use the watch
-        // build version number, as this app woll not be running on watch devices
-        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH;
+        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP;
     }
 
     /**
@@ -249,13 +242,87 @@
         return text.substring(0, realMax) + extension;
     }
 
+    /**
+     * This lock must be held before accessing any of the following fields
+     */
+    private static final Object sStaticResourcesLock = new Object();
+    private static ComponentCallbacksListener sComponentCallbacksListener;
     private static int sMaxUnreadCount = -1;
-    private static final CharacterStyle ACTION_BAR_UNREAD_STYLE = new StyleSpan(Typeface.BOLD);
     private static String sUnreadText;
     private static String sUnseenText;
     private static String sLargeUnseenText;
     private static int sDefaultFolderBackgroundColor = -1;
-    private static int sUseFolderListFragmentTransition = -1;
+
+    private static class ComponentCallbacksListener implements ComponentCallbacks {
+
+        @Override
+        public void onConfigurationChanged(Configuration configuration) {
+            synchronized (sStaticResourcesLock) {
+                sMaxUnreadCount = -1;
+                sUnreadText = null;
+                sUnseenText = null;
+                sLargeUnseenText = null;
+                sDefaultFolderBackgroundColor = -1;
+            }
+        }
+
+        @Override
+        public void onLowMemory() {}
+    }
+
+    public static void getStaticResources(Context context) {
+        synchronized (sStaticResourcesLock) {
+            if (sUnreadText == null) {
+                final Resources r = context.getResources();
+                sMaxUnreadCount = r.getInteger(R.integer.maxUnreadCount);
+                sUnreadText = r.getString(R.string.widget_large_unread_count);
+                sUnseenText = r.getString(R.string.unseen_count);
+                sLargeUnseenText = r.getString(R.string.large_unseen_count);
+                sDefaultFolderBackgroundColor = r.getColor(R.color.default_folder_background_color);
+
+                if (sComponentCallbacksListener == null) {
+                    sComponentCallbacksListener = new ComponentCallbacksListener();
+                    context.getApplicationContext()
+                            .registerComponentCallbacks(sComponentCallbacksListener);
+                }
+            }
+        }
+    }
+
+    private static int getMaxUnreadCount(Context context) {
+        synchronized (sStaticResourcesLock) {
+            getStaticResources(context);
+            return sMaxUnreadCount;
+        }
+    }
+
+    private static String getUnreadText(Context context) {
+        synchronized (sStaticResourcesLock) {
+            getStaticResources(context);
+            return sUnreadText;
+        }
+    }
+
+    private static String getUnseenText(Context context) {
+        synchronized (sStaticResourcesLock) {
+            getStaticResources(context);
+            return sUnseenText;
+        }
+    }
+
+    private static String getLargeUnseenText(Context context) {
+        synchronized (sStaticResourcesLock) {
+            getStaticResources(context);
+            return sLargeUnseenText;
+        }
+    }
+
+    public static int getDefaultFolderBackgroundColor(Context context) {
+        synchronized (sStaticResourcesLock) {
+            getStaticResources(context);
+            return sDefaultFolderBackgroundColor;
+        }
+    }
 
     /**
      * Returns a boolean indicating whether the table UI should be shown.
@@ -265,30 +332,6 @@
     }
 
     /**
-     * @return <code>true</code> if the right edge effect should be displayed on list items
-     */
-    @Deprecated
-    // TODO: remove this now that visual design no longer has right-edge caret (which made it so
-    // the hard right edge was drawn IN list items to ensure the caret didn't get an edge)
-    public static boolean getDisplayListRightEdgeEffect(final boolean tabletDevice,
-            final boolean listCollapsible, final int viewMode) {
-        return tabletDevice && !listCollapsible
-                && (ViewMode.isConversationMode(viewMode) || ViewMode.isAdMode(viewMode));
-    }
-
-    /**
-     * Returns a boolean indicating whether or not we should animate in the
-     * folder list fragment.
-     */
-    public static boolean useFolderListFragmentTransition(Context context) {
-        if (sUseFolderListFragmentTransition == -1) {
-            sUseFolderListFragmentTransition  = context.getResources().getInteger(
-                    R.integer.use_folder_list_fragment_transition);
-        }
-        return sUseFolderListFragmentTransition != 0;
-    }
-
-    /**
      * Returns displayable text from the provided HTML string.
      * @param htmlText HTML string
      * @return Plain text string representation of the specified Html string
@@ -372,16 +415,11 @@
      */
     public static String getUnreadCountString(Context context, int unreadCount) {
         final String unreadCountString;
-        final Resources resources = context.getResources();
-        if (sMaxUnreadCount == -1) {
-            sMaxUnreadCount = resources.getInteger(R.integer.maxUnreadCount);
-        }
-        if (unreadCount > sMaxUnreadCount) {
-            if (sUnreadText == null) {
-                sUnreadText = resources.getString(R.string.widget_large_unread_count);
-            }
+        final int maxUnreadCount = getMaxUnreadCount(context);
+        if (unreadCount > maxUnreadCount) {
+            final String unreadText = getUnreadText(context);
             // Localize "99+" according to the device language
-            unreadCountString = String.format(sUnreadText, sMaxUnreadCount);
+            unreadCountString = String.format(unreadText, maxUnreadCount);
         } else if (unreadCount <= 0) {
             unreadCountString = "";
         } else {
@@ -396,52 +434,21 @@
      */
     public static String getUnseenCountString(Context context, int unseenCount) {
         final String unseenCountString;
-        final Resources resources = context.getResources();
-        if (sMaxUnreadCount == -1) {
-            sMaxUnreadCount = resources.getInteger(R.integer.maxUnreadCount);
-        }
-        if (unseenCount > sMaxUnreadCount) {
-            if (sLargeUnseenText == null) {
-                sLargeUnseenText = resources.getString(R.string.large_unseen_count);
-            }
+        final int maxUnreadCount = getMaxUnreadCount(context);
+        if (unseenCount > maxUnreadCount) {
+            final String largeUnseenText = getLargeUnseenText(context);
             // Localize "99+" according to the device language
-            unseenCountString = String.format(sLargeUnseenText, sMaxUnreadCount);
+            unseenCountString = String.format(largeUnseenText, maxUnreadCount);
         } else if (unseenCount <= 0) {
             unseenCountString = "";
         } else {
-            if (sUnseenText == null) {
-                sUnseenText = resources.getString(R.string.unseen_count);
-            }
             // Localize unseen count according to the device language
-            unseenCountString = String.format(sUnseenText, unseenCount);
+            unseenCountString = String.format(getUnseenText(context), unseenCount);
         }
         return unseenCountString;
     }
 
     /**
-     * Get the correct display string for the unread count in the actionbar.
-     */
-    public static CharSequence getUnreadMessageString(Context context, int unreadCount) {
-        final SpannableString message;
-        final Resources resources = context.getResources();
-        if (sMaxUnreadCount == -1) {
-            sMaxUnreadCount = resources.getInteger(R.integer.maxUnreadCount);
-        }
-        if (unreadCount > sMaxUnreadCount) {
-            message = new SpannableString(
-                    resources.getString(R.string.actionbar_large_unread_count, sMaxUnreadCount));
-        } else {
-             message = new SpannableString(resources.getQuantityString(
-                     R.plurals.actionbar_unread_messages, unreadCount, unreadCount));
-        }
-
-        message.setSpan(CharacterStyle.wrap(ACTION_BAR_UNREAD_STYLE), 0,
-                message.toString().length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
-
-        return message;
-    }
-
-    /**
      * Get text matching the last sync status.
      */
     public static CharSequence getSyncStatusText(Context context, int packedStatus) {
@@ -677,15 +684,6 @@
     }
 
     /**
-     * Retrieves the mailbox search query associated with an intent (or null if not available),
-     * doing proper sanitizing (e.g. trims whitespace).
-     */
-    public static String mailSearchQueryForIntent(Intent intent) {
-        String query = intent.getStringExtra(SearchManager.QUERY);
-        return TextUtils.isEmpty(query) ? null : query.trim();
-   }
-
-    /**
      * Split out a filename's extension and return it.
      * @param filename a file name
      * @return the file extension (max of 5 chars including period, like ".docx"), or null
@@ -781,12 +779,24 @@
        return 0x00ffffff & color;
    }
 
-    public static void setMenuItemVisibility(Menu menu, int itemId, boolean shouldShow) {
-        final MenuItem item = menu.findItem(itemId);
+    /**
+     * Note that this function sets both the visibility and enabled flags for the menu item so that
+     * if shouldShow is false then the menu item is also no longer valid for keyboard shortcuts.
+     */
+    public static void setMenuItemPresent(Menu menu, int itemId, boolean shouldShow) {
+        setMenuItemPresent(menu.findItem(itemId), shouldShow);
+    }
+
+    /**
+     * Note that this function sets both the visibility and enabled flags for the menu item so that
+     * if shouldShow is false then the menu item is also no longer valid for keyboard shortcuts.
+     */
+    public static void setMenuItemPresent(MenuItem item, boolean shouldShow) {
         if (item == null) {
             return;
         }
         item.setVisible(shouldShow);
+        item.setEnabled(shouldShow);
     }
 
     /**
@@ -812,23 +822,6 @@
         return sw.toString();
     }
 
-    public static void dumpViewTree(ViewGroup root) {
-        dumpViewTree(root, "");
-    }
-
-    private static void dumpViewTree(ViewGroup g, String prefix) {
-        LogUtils.i(LOG_TAG, "%sVIEWGROUP: %s childCount=%s", prefix, g, g.getChildCount());
-        final String childPrefix = prefix + "  ";
-        for (int i = 0; i < g.getChildCount(); i++) {
-            final View child = g.getChildAt(i);
-            if (child instanceof ViewGroup) {
-                dumpViewTree((ViewGroup) child, childPrefix);
-            } else {
-                LogUtils.i(LOG_TAG, "%sCHILD #%s: %s", childPrefix, i, child);
-            }
-        }
-    }
-
     /**
      * Executes an out-of-band command on the cursor.
      * @param cursor
@@ -925,39 +918,17 @@
     }
 
     /**
-     * This utility method returns the conversation Uri at the current cursor position.
-     * @return the conversation id at the cursor.
-     */
-    public static String getConversationUri(ConversationCursor cursor) {
-        return cursor.getString(UIProvider.CONVERSATION_URI_COLUMN);
-    }
-
-    /**
-     * @return whether to show two pane or single pane search results.
-     */
-    public static boolean showTwoPaneSearchResults(Context context) {
-        return context.getResources().getBoolean(R.bool.show_two_pane_search_results);
-    }
-
-    /**
      * Sets the layer type of a view to hardware if the view is attached and hardware acceleration
      * is enabled. Does nothing otherwise.
      */
     public static void enableHardwareLayer(View v) {
-        if (v != null && v.isHardwareAccelerated()) {
+        if (v != null && v.isHardwareAccelerated() &&
+                v.getLayerType() != View.LAYER_TYPE_HARDWARE) {
             v.setLayerType(View.LAYER_TYPE_HARDWARE, null);
             v.buildLayer();
         }
     }
 
-    public static int getDefaultFolderBackgroundColor(Context context) {
-        if (sDefaultFolderBackgroundColor == -1) {
-            sDefaultFolderBackgroundColor = context.getResources().getColor(
-                    R.color.default_folder_background_color);
-        }
-        return sDefaultFolderBackgroundColor;
-    }
-
     /**
      * Returns the count that should be shown for the specified folder.  This method should be used
      * when the UI wants to display an "unread" count.  For most labels, the returned value will be
@@ -977,25 +948,6 @@
         return 0;
     }
 
-    /**
-     * @return an intent which, if launched, will reply to the conversation
-     */
-    public static Intent createReplyIntent(final Context context, final Account account,
-            final Uri messageUri, final boolean isReplyAll) {
-        final Intent intent =
-                ComposeActivity.createReplyIntent(context, account, messageUri, isReplyAll);
-        return intent;
-    }
-
-    /**
-     * @return an intent which, if launched, will forward the conversation
-     */
-    public static Intent createForwardIntent(
-            final Context context, final Account account, final Uri messageUri) {
-        final Intent intent = ComposeActivity.createForwardIntent(context, account, messageUri);
-        return intent;
-    }
-
     public static Uri appendVersionQueryParameter(final Context context, final Uri uri) {
         return uri.buildUpon().appendQueryParameter(APP_VERSION_QUERY_PARAMETER,
                 getVersionCode(context)).build();
@@ -1099,7 +1051,7 @@
         return -1;
     }
 
-    public static Address getAddress(Map<String, Address> cache, String emailStr) {
+    public static @Nullable Address getAddress(Map<String, Address> cache, String emailStr) {
         Address addr;
         synchronized (cache) {
             addr = cache.get(emailStr);
@@ -1119,14 +1071,15 @@
      */
     public static Spanned insertStringWithStyle(Context context,
             String entireString, String subString, int appearance) {
-        final Resources resources = context.getResources();
         final int index = entireString.indexOf(subString);
         final SpannableString descriptionText = new SpannableString(entireString);
-        descriptionText.setSpan(
-                new TextAppearanceSpan(context, appearance),
-                index,
-                index + subString.length(),
-                0);
+        if (index >= 0) {
+            descriptionText.setSpan(
+                    new TextAppearanceSpan(context, appearance),
+                    index,
+                    index + subString.length(),
+                    0);
+        }
         return descriptionText;
     }
 
diff --git a/src/com/android/mail/utils/ViewUtils.java b/src/com/android/mail/utils/ViewUtils.java
index ce2bc62..1e6cb37 100644
--- a/src/com/android/mail/utils/ViewUtils.java
+++ b/src/com/android/mail/utils/ViewUtils.java
@@ -17,8 +17,15 @@
 package com.android.mail.utils;
 
 import android.annotation.SuppressLint;
+import android.app.Activity;
+import android.content.Context;
+import android.support.annotation.ColorRes;
 import android.support.v4.view.ViewCompat;
 import android.view.View;
+import android.view.ViewParent;
+import android.view.Window;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityManager;
 
 /**
  * Utility class to perform some common operations on views.
@@ -59,4 +66,41 @@
             view.setTextAlignment(textAlignment);
         }
     }
+
+    /**
+     * Convenience method for sending a {@link android.view.accessibility.AccessibilityEvent#TYPE_ANNOUNCEMENT}
+     * {@link android.view.accessibility.AccessibilityEvent} to make an announcement which is related to some
+     * sort of a context change for which none of the events representing UI transitions
+     * is a good fit. For example, announcing a new page in a book. If accessibility
+     * is not enabled this method does nothing.
+     *
+     * @param view view to perform the accessibility announcement
+     * @param text The announcement text.
+     */
+    public static void announceForAccessibility(View view, CharSequence text) {
+        final AccessibilityManager accessibilityManager = (AccessibilityManager)
+                view.getContext().getSystemService(Context.ACCESSIBILITY_SERVICE);
+        final ViewParent parent = view.getParent();
+        if (accessibilityManager.isEnabled() && parent != null) {
+            AccessibilityEvent event = AccessibilityEvent.obtain(
+                    AccessibilityEvent.TYPE_ANNOUNCEMENT);
+            view.onInitializeAccessibilityEvent(event);
+            event.getText().add(text);
+            event.setContentDescription(null);
+            parent.requestSendAccessibilityEvent(view, event);
+        }
+    }
+
+    /**
+     * Sets the status bar color of the provided activity.
+     */
+    @SuppressLint("NewApi")
+    public static void setStatusBarColor(Activity activity, @ColorRes int colorId) {
+        if (Utils.isRunningLOrLater() && activity != null) {
+            final Window window = activity.getWindow();
+            if (window != null) {
+                window.setStatusBarColor(activity.getResources().getColor(colorId));
+            }
+        }
+    }
 }
diff --git a/src/com/android/mail/widget/WidgetConversationListItemViewBuilder.java b/src/com/android/mail/widget/WidgetConversationListItemViewBuilder.java
index d1d0ad0..702339c 100644
--- a/src/com/android/mail/widget/WidgetConversationListItemViewBuilder.java
+++ b/src/com/android/mail/widget/WidgetConversationListItemViewBuilder.java
@@ -92,7 +92,8 @@
                     continue;
                 }
                 remoteViews.setViewVisibility(viewId, View.VISIBLE);
-                int color[] = new int[] {folderValues.getBackgroundColor(mDefaultBgColor)};
+                int color[] = new int[]
+                        {folderValues.getBackgroundColor(mFolderDrawableResources.defaultBgColor)};
                 Bitmap bitmap = Bitmap.createBitmap(color, 1, 1, Bitmap.Config.RGB_565);
                 remoteViews.setImageViewBitmap(viewId, bitmap);
 
@@ -121,14 +122,14 @@
         DATE_TEXT_COLOR_UNREAD = res.getColor(R.color.date_text_color_unread);
 
         // Initialize Bitmap
-        ATTACHMENT = BitmapFactory.decodeResource(res, R.drawable.ic_attach_file_20dp);
+        ATTACHMENT = BitmapFactory.decodeResource(res, R.drawable.ic_attach_file_18dp);
     }
 
     /*
      * Add size, color and style to a given text
      */
-    private static CharSequence addStyle(CharSequence text, int size, int color) {
-        SpannableStringBuilder builder = new SpannableStringBuilder(text);
+    private static SpannableStringBuilder addStyle(CharSequence text, int size, int color) {
+        final SpannableStringBuilder builder = new SpannableStringBuilder(text);
         builder.setSpan(
                 new AbsoluteSizeSpan(size), 0, text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
         if (color != 0) {
@@ -154,7 +155,11 @@
 
         // Add style to date
         final int dateColor = isUnread ? DATE_TEXT_COLOR_UNREAD : DATE_TEXT_COLOR_READ;
-        final CharSequence styledDate = addStyle(date, dateFontSize, dateColor);
+        final SpannableStringBuilder dateBuilder = addStyle(date, dateFontSize, dateColor);
+        if (isUnread) {
+            dateBuilder.setSpan(new StyleSpan(Typeface.BOLD), 0, date.length(),
+                    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+        }
 
         subject = Conversation.getSubjectForDisplay(context, null /* badgeText */, subject);
         final SpannableStringBuilder subjectBuilder = new SpannableStringBuilder(subject);
@@ -162,8 +167,8 @@
             subjectBuilder.setSpan(new StyleSpan(Typeface.BOLD), 0, subject.length(),
                     Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
         }
-        final CharacterStyle subjectStyle = new ForegroundColorSpan(
-                isUnread ? SUBJECT_TEXT_COLOR_UNREAD : SUBJECT_TEXT_COLOR_READ);
+        final int subjectColor = isUnread ? SUBJECT_TEXT_COLOR_UNREAD : SUBJECT_TEXT_COLOR_READ;
+        final CharacterStyle subjectStyle = new ForegroundColorSpan(subjectColor);
         subjectBuilder.setSpan(subjectStyle, 0, subjectBuilder.length(),
                 Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
         final CharSequence styledSubject = addStyle(subjectBuilder, subjectFontSize, 0);
@@ -183,7 +188,7 @@
         final RemoteViews remoteViews = new RemoteViews(
                 context.getPackageName(), R.layout.widget_conversation_list_item);
         remoteViews.setTextViewText(R.id.widget_senders, senders);
-        remoteViews.setTextViewText(R.id.widget_date, styledDate);
+        remoteViews.setTextViewText(R.id.widget_date, dateBuilder);
         remoteViews.setTextViewText(R.id.widget_subject, styledSubject);
         remoteViews.setTextViewText(R.id.widget_snippet, styledSnippet);
         if (paperclipBitmap != null) {
diff --git a/src/com/android/mail/widget/WidgetService.java b/src/com/android/mail/widget/WidgetService.java
index 2f82e30..22c74a7 100644
--- a/src/com/android/mail/widget/WidgetService.java
+++ b/src/com/android/mail/widget/WidgetService.java
@@ -133,12 +133,14 @@
         remoteViews.setRemoteAdapter(R.id.conversation_list, intent);
         // Open mail app when click on header
         final Intent mailIntent = Utils.createViewFolderIntent(context, folderUri, account);
+        mailIntent.setPackage(context.getPackageName());
         PendingIntent clickIntent = PendingIntent.getActivity(context, 0, mailIntent,
                 PendingIntent.FLAG_UPDATE_CURRENT);
         remoteViews.setOnClickPendingIntent(R.id.widget_header, clickIntent);
 
         // On click intent for Compose
         final Intent composeIntent = new Intent();
+        composeIntent.setPackage(context.getPackageName());
         composeIntent.setAction(Intent.ACTION_SEND);
         composeIntent.putExtra(Utils.EXTRA_ACCOUNT, account.serialize());
         composeIntent.setData(account.composeIntentUri);
@@ -157,6 +159,7 @@
 
         // On click intent for Conversation
         final Intent conversationIntent = new Intent();
+        conversationIntent.setPackage(context.getPackageName());
         conversationIntent.setAction(Intent.ACTION_VIEW);
         clickIntent = PendingIntent.getActivity(context, 0, conversationIntent,
                 PendingIntent.FLAG_UPDATE_CURRENT);
@@ -409,7 +412,7 @@
 
                 ArrayList<SpannableString> senders = new ArrayList<SpannableString>();
                 SendersView.format(mContext, conversation.conversationInfo, "",
-                        MAX_SENDERS_LENGTH, senders, null, null, mAccount.getEmailAddress(),
+                        MAX_SENDERS_LENGTH, senders, null, null, mAccount,
                         Folder.shouldShowRecipients(mFolderCapabilities), true);
                 final SpannableStringBuilder senderBuilder = elideParticipants(senders);
 
diff --git a/tests/src/com/android/mail/browse/SendersFormattingTests.java b/tests/src/com/android/mail/browse/SendersFormattingTests.java
index ecec4df..14b31ec 100644
--- a/tests/src/com/android/mail/browse/SendersFormattingTests.java
+++ b/tests/src/com/android/mail/browse/SendersFormattingTests.java
@@ -21,11 +21,18 @@
 import android.test.suitebuilder.annotation.SmallTest;
 import android.text.SpannableString;
 
+import com.android.mail.providers.Account;
 import com.android.mail.providers.ConversationInfo;
 import com.android.mail.providers.ParticipantInfo;
+import com.android.mail.providers.UIProvider;
 import com.google.common.collect.Lists;
 
+import org.json.JSONException;
+import org.json.JSONObject;
+
 import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
 
 @SmallTest
 public class SendersFormattingTests extends AndroidTestCase {
@@ -40,7 +47,8 @@
         final ArrayList<SpannableString> strings = Lists.newArrayList();
         assertEquals(0, strings.size());
 
-        SendersView.format(getContext(), conv, "", 100, strings, null, null, null, false, false);
+        final Account account = createAccount();
+        SendersView.format(getContext(), conv, "", 100, strings, null, null, account, false, false);
         assertEquals(1, strings.size());
         assertEquals("me", strings.get(0).toString());
     }
@@ -51,7 +59,8 @@
         final ArrayList<SpannableString> strings = Lists.newArrayList();
         assertEquals(0, strings.size());
 
-        SendersView.format(getContext(), conv, "", 100, strings, null, null, null, false, false);
+        final Account account = createAccount();
+        SendersView.format(getContext(), conv, "", 100, strings, null, null, account, false, false);
         assertEquals(1, strings.size());
         assertEquals("me", strings.get(0).toString());
     }
@@ -63,7 +72,8 @@
         final ArrayList<SpannableString> strings = Lists.newArrayList();
         assertEquals(0, strings.size());
 
-        SendersView.format(getContext(), conv, "", 100, strings, null, null, null, false, false);
+        final Account account = createAccount();
+        SendersView.format(getContext(), conv, "", 100, strings, null, null, account, false, false);
         assertEquals(2, strings.size());
         assertNull(strings.get(0));
         assertEquals("me", strings.get(1).toString());
@@ -77,7 +87,8 @@
         final ArrayList<SpannableString> strings = Lists.newArrayList();
         assertEquals(0, strings.size());
 
-        SendersView.format(getContext(), conv, "", 100, strings, null, null, null, false, false);
+        final Account account = createAccount();
+        SendersView.format(getContext(), conv, "", 100, strings, null, null, account, false, false);
         assertEquals(2, strings.size());
         assertNull(strings.get(0));
         assertEquals("Something", strings.get(1).toString());
@@ -112,4 +123,164 @@
         assertEquals(before.firstUnreadSnippet, after.firstUnreadSnippet);
         assertEquals(before.lastSnippet, after.lastSnippet);
     }
+
+    public void testSenderAvatarIsSenderOfFirstUnreadMessage() {
+        final ConversationInfo conv = createConversationInfo();
+        conv.addParticipant(new ParticipantInfo("a", "a@a.com", 0, true));
+        conv.addParticipant(new ParticipantInfo("b", "b@b.com", 0, false));
+        conv.addParticipant(new ParticipantInfo("c", "c@c.com", 0, false));
+
+        final ArrayList<SpannableString> styledSenders = Lists.newArrayList();
+        final ArrayList<String> displayableSenderNames = Lists.newArrayList();
+        final ConversationItemViewModel.SenderAvatarModel senderAvatarModel =
+                new ConversationItemViewModel.SenderAvatarModel();
+
+        final Account account = createAccount();
+        SendersView.format(getContext(), conv, "", 100, styledSenders, displayableSenderNames,
+                senderAvatarModel, account, false, false);
+
+        // b is the first unread message with a valid email address
+        assertEquals("b@b.com", senderAvatarModel.getEmailAddress());
+        assertEquals("b", senderAvatarModel.getName());
+    }
+
+    public void testSenderAvatarDoesNotChooseEmptyEmailAddress() {
+        final ConversationInfo conv = createConversationInfo();
+        conv.addParticipant(new ParticipantInfo("a", "a@a.com", 0, true));
+        conv.addParticipant(new ParticipantInfo("b", "", 0, false));
+        conv.addParticipant(new ParticipantInfo("c", "c@c.com", 0, false));
+
+        final ArrayList<SpannableString> styledSenders = Lists.newArrayList();
+        final ArrayList<String> displayableSenderNames = Lists.newArrayList();
+        final ConversationItemViewModel.SenderAvatarModel senderAvatarModel =
+                new ConversationItemViewModel.SenderAvatarModel();
+
+        final Account account = createAccount();
+        SendersView.format(getContext(), conv, "", 100, styledSenders, displayableSenderNames,
+                senderAvatarModel, account, false, false);
+
+        // b is unread but has an invalid email address so email address is set to the name
+        assertEquals("b", senderAvatarModel.getEmailAddress());
+        assertEquals("b", senderAvatarModel.getName());
+    }
+
+    public void testSenderAvatarIsLastSenderIfAllMessagesAreRead() {
+        final ConversationInfo conv = createConversationInfo();
+        conv.addParticipant(new ParticipantInfo("a", "a@a.com", 0, true));
+        conv.addParticipant(new ParticipantInfo("b", "b@b.com", 0, true));
+        conv.addParticipant(new ParticipantInfo("c", "c@c.com", 0, true));
+
+        final ArrayList<SpannableString> styledSenders = Lists.newArrayList();
+        final ArrayList<String> displayableSenderNames = Lists.newArrayList();
+        final ConversationItemViewModel.SenderAvatarModel senderAvatarModel =
+                new ConversationItemViewModel.SenderAvatarModel();
+
+        final Account account = createAccount();
+        SendersView.format(getContext(), conv, "", 100, styledSenders, displayableSenderNames,
+                senderAvatarModel, account, false, false);
+
+        // all are read, so c is chosen because it is the last sender
+        assertEquals("c@c.com", senderAvatarModel.getEmailAddress());
+        assertEquals("c", senderAvatarModel.getName());
+    }
+
+    public void testSenderAvatarIsLastSenderWithValidEmailAddressIfAllMessagesAreRead() {
+        final ConversationInfo conv = createConversationInfo();
+        conv.addParticipant(new ParticipantInfo("a", "a@a.com", 0, true));
+        conv.addParticipant(new ParticipantInfo("b", "b@b.com", 0, true));
+        conv.addParticipant(new ParticipantInfo("c", "", 0, true));
+
+        final ArrayList<SpannableString> styledSenders = Lists.newArrayList();
+        final ArrayList<String> displayableSenderNames = Lists.newArrayList();
+        final ConversationItemViewModel.SenderAvatarModel senderAvatarModel =
+                new ConversationItemViewModel.SenderAvatarModel();
+
+        final Account account = createAccount();
+        SendersView.format(getContext(), conv, "", 100, styledSenders, displayableSenderNames,
+                senderAvatarModel, account, false, false);
+
+        // all are read, c has an invalid email address, so email address is set to the name
+        assertEquals("c", senderAvatarModel.getEmailAddress());
+        assertEquals("c", senderAvatarModel.getName());
+    }
+
+    public void testSenderAvatarIsLastSenderThatIsNotTheCurrentAccountIfAllMessagesAreRead() {
+        final ConversationInfo conv = createConversationInfo();
+        conv.addParticipant(new ParticipantInfo("a", "a@a.com", 0, true));
+        conv.addParticipant(new ParticipantInfo("b", "b@b.com", 0, true));
+        // empty name indicates it is the current account
+        conv.addParticipant(new ParticipantInfo("", "c@c.com", 0, true));
+
+        final ArrayList<SpannableString> styledSenders = Lists.newArrayList();
+        final ArrayList<String> displayableSenderNames = Lists.newArrayList();
+        final ConversationItemViewModel.SenderAvatarModel senderAvatarModel =
+                new ConversationItemViewModel.SenderAvatarModel();
+
+        final Account account = createAccount();
+        SendersView.format(getContext(), conv, "", 100, styledSenders, displayableSenderNames,
+                senderAvatarModel, account, false, false);
+
+        // c is the last sender, but it is the current account, so b is chosen instead
+        assertEquals("b@b.com", senderAvatarModel.getEmailAddress());
+        assertEquals("b", senderAvatarModel.getName());
+    }
+
+    public void testSenderAvatarIsCurrentAccountIfAllSendersAreCurrentAccount() {
+        final ConversationInfo conv = createConversationInfo();
+        // empty name indicates it is the current account
+        conv.addParticipant(new ParticipantInfo("", "a@a.com", 0, true));
+
+        final ArrayList<SpannableString> styledSenders = Lists.newArrayList();
+        final ArrayList<String> displayableSenderNames = Lists.newArrayList();
+        final ConversationItemViewModel.SenderAvatarModel senderAvatarModel =
+                new ConversationItemViewModel.SenderAvatarModel();
+
+        final Account account = createAccount();
+        SendersView.format(getContext(), conv, "", 100, styledSenders, displayableSenderNames,
+                senderAvatarModel, account, false, false);
+
+        // only one sender exists and it is the current account, so the current account is chosen
+        assertEquals("fflintstone@example.com", senderAvatarModel.getEmailAddress());
+        assertEquals("Fred Flintstone", senderAvatarModel.getName());
+    }
+
+    /**
+     * Two senders in a thread should be kept distinct if they have unique email addresses, even if
+     * they happen to share the same name.
+     */
+    public void testSenderNamesWhenNamesMatchButEmailAddressesDiffer() {
+        final ConversationInfo conv = createConversationInfo();
+        conv.addParticipant(new ParticipantInfo("Andrew", "aholmes@awesome.com", 0, true));
+        conv.addParticipant(new ParticipantInfo("Andrew", "ajohnson@wicked.com", 0, true));
+
+        final ArrayList<SpannableString> styledSenders = Lists.newArrayList();
+        final ArrayList<String> displayableSenderNames = Lists.newArrayList();
+        final ConversationItemViewModel.SenderAvatarModel senderAvatarModel =
+                new ConversationItemViewModel.SenderAvatarModel();
+
+        final Account account = createAccount();
+        SendersView.format(getContext(), conv, "", 100, styledSenders, displayableSenderNames,
+                senderAvatarModel, account, false, false);
+
+        assertEquals(2, displayableSenderNames.size());
+        assertEquals("Andrew", displayableSenderNames.get(0));
+        assertEquals("Andrew", displayableSenderNames.get(1));
+    }
+
+    private static Account createAccount() {
+        try {
+            final Map<String, Object> map = new HashMap<>(2);
+            map.put(UIProvider.AccountColumns.NAME, "Fred Flintstone");
+            map.put(UIProvider.AccountColumns.ACCOUNT_MANAGER_NAME, "fflintstone@example.com");
+            map.put(UIProvider.AccountColumns.TYPE, "IMAP");
+            map.put(UIProvider.AccountColumns.PROVIDER_VERSION, 1);
+            map.put(UIProvider.AccountColumns.CAPABILITIES, 0);
+
+            final JSONObject json = new JSONObject(map);
+
+            return Account.builder().buildFrom(json);
+        } catch (JSONException je) {
+            throw new RuntimeException(je);
+        }
+    }
 }
\ No newline at end of file
diff --git a/tests/src/com/android/mail/compose/ComposeActivityTest.java b/tests/src/com/android/mail/compose/ComposeActivityTest.java
index ee2ae25..58d90aa 100644
--- a/tests/src/com/android/mail/compose/ComposeActivityTest.java
+++ b/tests/src/com/android/mail/compose/ComposeActivityTest.java
@@ -137,21 +137,22 @@
                 + "someotheraccount2@mockuiprovider.com, someotheraccount3@mockuiprovider.com, "
                 + customFrom);
         refMessage.setReplyTo(customFrom);
-        activity.mFromSpinner = new FromAddressSpinner(activity);
+
         ReplyFromAccount a = new ReplyFromAccount(mAccount, mAccount.uri, customFrom,
                 customFrom, customFrom, true, true);
         JSONArray array = new JSONArray();
         array.put(a.serialize());
         mAccount.accountFromAddresses = array.toString();
-        ReplyFromAccount currentAccount = new ReplyFromAccount(mAccount, mAccount.uri,
+        final ReplyFromAccount currentAccount = new ReplyFromAccount(mAccount, mAccount.uri,
                 mAccount.getEmailAddress(), mAccount.getEmailAddress(), customFrom, true, false);
-        activity.mFromSpinner.setCurrentAccount(currentAccount);
-
-        activity.mFromSpinner.initialize(ComposeActivity.REPLY_ALL,
-                currentAccount.account, EMPTY_ACCOUNT_LIST, null);
         runTestOnUiThread(new Runnable() {
             @Override
             public void run() {
+                activity.mFromSpinner = new FromAddressSpinner(activity);
+                activity.mFromSpinner.setCurrentAccount(currentAccount);
+                activity.mFromSpinner.initialize(ComposeActivity.REPLY_ALL,
+                        currentAccount.account, EMPTY_ACCOUNT_LIST, null);
+
                 activity.initReplyRecipients(refMessage, ComposeActivity.REPLY_ALL);
                 String[] to = activity.getToAddresses();
                 String[] cc = activity.getCcAddresses();
@@ -176,17 +177,19 @@
         refMessage.setFrom("account3@mockuiprovider.com");
         refMessage.setTo("account3@mockuiprovider.com");
         final Account account = mAccount;
-        activity.mFromSpinner = new FromAddressSpinner(activity);
-        ReplyFromAccount currentAccount = new ReplyFromAccount(mAccount, mAccount.uri,
+
+        final ReplyFromAccount currentAccount = new ReplyFromAccount(mAccount, mAccount.uri,
                 mAccount.getEmailAddress(), mAccount.getEmailAddress(), mAccount.getEmailAddress(),
                 true, false);
-        activity.mFromSpinner.setCurrentAccount(currentAccount);
 
-        activity.mFromSpinner.initialize(ComposeActivity.REPLY_ALL,
-                currentAccount.account, EMPTY_ACCOUNT_LIST, null);
         runTestOnUiThread(new Runnable() {
             @Override
             public void run() {
+                activity.mFromSpinner = new FromAddressSpinner(activity);
+                activity.mFromSpinner.setCurrentAccount(currentAccount);
+                activity.mFromSpinner.initialize(ComposeActivity.REPLY_ALL,
+                        currentAccount.account, EMPTY_ACCOUNT_LIST, null);
+
                 activity.initReplyRecipients(refMessage, ComposeActivity.REPLY_ALL);
                 String[] to = activity.getToAddresses();
                 String[] cc = activity.getCcAddresses();
@@ -211,21 +214,23 @@
         final String customFrom = "CUSTOMaccount3@mockuiprovider.com";
         refMessage.setFrom("account3@mockuiprovider.com");
         refMessage.setTo(customFrom);
-        activity.mFromSpinner = new FromAddressSpinner(activity);
+
         ReplyFromAccount a = new ReplyFromAccount(mAccount, mAccount.uri, customFrom,
                 customFrom, customFrom, true, true);
         JSONArray array = new JSONArray();
         array.put(a.serialize());
         mAccount.accountFromAddresses = array.toString();
-        ReplyFromAccount currentAccount = new ReplyFromAccount(mAccount, mAccount.uri,
+        final ReplyFromAccount currentAccount = new ReplyFromAccount(mAccount, mAccount.uri,
                 mAccount.getEmailAddress(), mAccount.getEmailAddress(), customFrom, true, false);
-        activity.mFromSpinner.setCurrentAccount(currentAccount);
 
-        activity.mFromSpinner.initialize(ComposeActivity.REPLY_ALL,
-                currentAccount.account, EMPTY_ACCOUNT_LIST, null);
         runTestOnUiThread(new Runnable() {
             @Override
             public void run() {
+                activity.mFromSpinner = new FromAddressSpinner(activity);
+                activity.mFromSpinner.setCurrentAccount(currentAccount);
+                activity.mFromSpinner.initialize(ComposeActivity.REPLY_ALL,
+                        currentAccount.account, EMPTY_ACCOUNT_LIST, null);
+
                 activity.initReplyRecipients(refMessage, ComposeActivity.REPLY_ALL);
                 String[] to = activity.getToAddresses();
                 String[] cc = activity.getCcAddresses();
@@ -540,22 +545,24 @@
         final Message refMessage = getRefMessage(activity.getContentResolver());
         refMessage.setFrom("CUSTOMaccount1@mockuiprovider.com");
         refMessage.setTo("someotheraccount@mockuiprovider.com");
-        activity.mFromSpinner = new FromAddressSpinner(activity);
+
         ReplyFromAccount a = new ReplyFromAccount(mAccount, mAccount.uri, refMessage.getFrom(),
                 refMessage.getFrom(), refMessage.getFrom(), true, true);
         JSONArray array = new JSONArray();
         array.put(a.serialize());
         mAccount.accountFromAddresses = array.toString();
-        ReplyFromAccount currentAccount = new ReplyFromAccount(mAccount, mAccount.uri,
+        final ReplyFromAccount currentAccount = new ReplyFromAccount(mAccount, mAccount.uri,
                 mAccount.getEmailAddress(), mAccount.getEmailAddress(), mAccount.getEmailAddress(),
                 true, false);
-        activity.mFromSpinner.setCurrentAccount(currentAccount);
-        activity.mFromSpinner.initialize(ComposeActivity.REPLY, currentAccount.account,
-                EMPTY_ACCOUNT_LIST, null);
 
         runTestOnUiThread(new Runnable() {
             @Override
             public void run() {
+                activity.mFromSpinner = new FromAddressSpinner(activity);
+                activity.mFromSpinner.setCurrentAccount(currentAccount);
+                activity.mFromSpinner.initialize(ComposeActivity.REPLY, currentAccount.account,
+                        EMPTY_ACCOUNT_LIST, null);
+
                 activity.initReplyRecipients(refMessage, ComposeActivity.REPLY);
                 String[] to = activity.getToAddresses();
                 String[] cc = activity.getCcAddresses();
@@ -581,21 +588,24 @@
         refMessage.setTo("someotheraccount@mockuiprovider.com, "
                 + "someotheraccount2@mockuiprovider.com, someotheraccount4@mockuiprovider.com, "
                 + customFrom);
-        activity.mFromSpinner = new FromAddressSpinner(activity);
+
         ReplyFromAccount a = new ReplyFromAccount(mAccount, mAccount.uri, customFrom,
                 customFrom, customFrom, true, true);
         JSONArray array = new JSONArray();
         array.put(a.serialize());
         mAccount.accountFromAddresses = array.toString();
-        ReplyFromAccount currentAccount = new ReplyFromAccount(mAccount, mAccount.uri,
+        final ReplyFromAccount currentAccount = new ReplyFromAccount(mAccount, mAccount.uri,
                 mAccount.getEmailAddress(), mAccount.getEmailAddress(), mAccount.getEmailAddress(),
                 true, false);
-        activity.mFromSpinner.setCurrentAccount(currentAccount);
-        activity.mFromSpinner.initialize(ComposeActivity.REPLY_ALL,
-                currentAccount.account, EMPTY_ACCOUNT_LIST, null);
+
         runTestOnUiThread(new Runnable() {
             @Override
             public void run() {
+                activity.mFromSpinner = new FromAddressSpinner(activity);
+                activity.mFromSpinner.setCurrentAccount(currentAccount);
+                activity.mFromSpinner.initialize(ComposeActivity.REPLY_ALL,
+                        currentAccount.account, EMPTY_ACCOUNT_LIST, null);
+
                 activity.initReplyRecipients(refMessage, ComposeActivity.REPLY_ALL);
                 String[] to = activity.getToAddresses();
                 String[] cc = activity.getCcAddresses();
@@ -624,21 +634,24 @@
         refMessage.setTo("someotheraccount@mockuiprovider.com, "
                 + "someotheraccount2@mockuiprovider.com, someotheraccount4@mockuiprovider.com, "
                 + customFrom);
-        activity.mFromSpinner = new FromAddressSpinner(activity);
+
         ReplyFromAccount a = new ReplyFromAccount(mAccount, mAccount.uri, customFrom,
                 customFrom, customFrom, true, true);
         JSONArray array = new JSONArray();
         array.put(a.serialize());
         mAccount.accountFromAddresses = array.toString();
-        ReplyFromAccount currentAccount = new ReplyFromAccount(mAccount, mAccount.uri,
+        final ReplyFromAccount currentAccount = new ReplyFromAccount(mAccount, mAccount.uri,
                 mAccount.getEmailAddress(), mAccount.getEmailAddress(), mAccount.getEmailAddress(),
                 true, false);
-        activity.mFromSpinner.setCurrentAccount(currentAccount);
-        activity.mFromSpinner.initialize(ComposeActivity.REPLY_ALL,
-                currentAccount.account, EMPTY_ACCOUNT_LIST, null);
+
         runTestOnUiThread(new Runnable() {
             @Override
             public void run() {
+                activity.mFromSpinner = new FromAddressSpinner(activity);
+                activity.mFromSpinner.setCurrentAccount(currentAccount);
+                activity.mFromSpinner.initialize(ComposeActivity.REPLY_ALL,
+                        currentAccount.account, EMPTY_ACCOUNT_LIST, null);
+
                 activity.initReplyRecipients(refMessage, ComposeActivity.REPLY_ALL);
                 String[] to = activity.getToAddresses();
                 String[] cc = activity.getCcAddresses();
diff --git a/tests/src/com/android/mail/providers/UIProviderTest.java b/tests/src/com/android/mail/providers/UIProviderTest.java
new file mode 100644
index 0000000..20f3854
--- /dev/null
+++ b/tests/src/com/android/mail/providers/UIProviderTest.java
@@ -0,0 +1,43 @@
+/**
+ * Copyright (c) 2014, Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.mail.providers;
+
+import android.test.AndroidTestCase;
+
+public class UIProviderTest extends AndroidTestCase {
+
+    public void testReadAndWriteOfLastSyncResult() {
+        packAndUnpackLastSyncResult(UIProvider.SyncStatus.NO_SYNC,
+                UIProvider.LastSyncResult.STORAGE_ERROR);
+        packAndUnpackLastSyncResult(UIProvider.SyncStatus.NO_SYNC,
+                UIProvider.LastSyncResult.SECURITY_ERROR);
+        packAndUnpackLastSyncResult(UIProvider.SyncStatus.USER_REFRESH,
+                UIProvider.LastSyncResult.SUCCESS);
+        packAndUnpackLastSyncResult(UIProvider.SyncStatus.USER_REFRESH,
+                UIProvider.LastSyncResult.AUTH_ERROR);
+        packAndUnpackLastSyncResult(UIProvider.SyncStatus.BACKGROUND_SYNC,
+                UIProvider.LastSyncResult.SUCCESS);
+        packAndUnpackLastSyncResult(UIProvider.SyncStatus.BACKGROUND_SYNC,
+                UIProvider.LastSyncResult.CONNECTION_ERROR);
+    }
+
+    private void packAndUnpackLastSyncResult(int syncStatus, int lastSyncResult) {
+        final int value = UIProvider.createSyncValue(syncStatus, lastSyncResult);
+
+        assertEquals(syncStatus, UIProvider.getStatusFromLastSyncResult(value));
+        assertEquals(lastSyncResult, UIProvider.getResultFromLastSyncResult(value));
+    }
+}
diff --git a/tests/src/com/android/mail/utils/AdvancedHtmlSanitizerTest.java b/tests/src/com/android/mail/utils/AdvancedHtmlSanitizerTest.java
index 578ce4a..0e5715b 100644
--- a/tests/src/com/android/mail/utils/AdvancedHtmlSanitizerTest.java
+++ b/tests/src/com/android/mail/utils/AdvancedHtmlSanitizerTest.java
@@ -73,7 +73,9 @@
     }
 
     /**
-     * Technically, RFC 2392 doesn't limit where CID urls may appear; they are accepted everywhere.
+     * Technically, RFC 2392 doesn't limit where CID urls may appear. But, Webview is unhappy
+     * handling them within link tags, so we only allow them in img src attributes until we see a
+     * reason to expand their acceptance.
      */
     public void testCIDurls() {
         sanitize("<img src=\"http://www.here.com/awesome.png\"/>",
@@ -87,8 +89,7 @@
                 "<a href=\"http://www.here.com/awesome.png\"></a>");
         sanitize("<a href=\"https://www.here.com/awesome.png\"/>",
                 "<a href=\"https://www.here.com/awesome.png\"></a>");
-        sanitize("<a href=\"cid:ii_145bda161daf6f9c\"/>",
-                "<a href=\"cid:ii_145bda161daf6f9c\"></a>");
+        sanitize("<a href=\"cid:ii_145bda161daf6f9c\"/>", "");
     }
 
     // todo the stock CssSchema in OWASP does NOT allow the float property; I experiment with adding
diff --git a/tests/src/com/android/mail/utils/BasicHtmlSanitizerTest.java b/tests/src/com/android/mail/utils/BasicHtmlSanitizerTest.java
index d0e23ab..5916162 100644
--- a/tests/src/com/android/mail/utils/BasicHtmlSanitizerTest.java
+++ b/tests/src/com/android/mail/utils/BasicHtmlSanitizerTest.java
@@ -21,6 +21,7 @@
         // allowed attributes
         sanitize("<a coords=\"something\"></a>", "<a coords=\"something\"></a>");
         sanitize("<a href=\"http://www.here.com\"></a>", "<a href=\"http://www.here.com\"></a>");
+        sanitize("<a href=\"https://www.here.com\"></a>", "<a href=\"https://www.here.com\"></a>");
         sanitize("<a name=\"something\"></a>", "<a name=\"something\"></a>");
         sanitize("<a shape=\"something\"></a>", "<a shape=\"something\"></a>");
 
@@ -30,6 +31,7 @@
         sanitize("<a datasrc=\"something\"></a>", "");
         sanitize("<a download=\"something\"></a>", "");
         sanitize("<a href=\"javascript:badness()\"></a>", "");
+        sanitize("<a href=\"cid:ii_hyw5v8ej0\"></a>", "");
         sanitize("<a hreflang=\"something\"></a>", "");
         sanitize("<a media=\"something\"></a>", "");
         sanitize("<a methods=\"something\"></a>", "");
@@ -70,6 +72,7 @@
         sanitize("<area alt=\"something\"/>", "<area alt=\"something\" />");
         sanitize("<area coords=\"something\"/>", "<area coords=\"something\" />");
         sanitize("<area href=\"http://www.here.com\"/>", "<area href=\"http://www.here.com\" />");
+        sanitize("<area href=\"https://www.here.com\"/>", "<area href=\"https://www.here.com\" />");
         sanitize("<area name=\"something\"/>", "<area name=\"something\" />");
         sanitize("<area nohref />", "<area nohref=\"nohref\" />");
         sanitize("<area shape=\"something\"/>", "<area shape=\"something\" />");
@@ -78,6 +81,7 @@
         sanitize("<area accessKey=\"A\"/>", "<area />");
         sanitize("<area download=\"something\"/>", "<area />");
         sanitize("<area href=\"javascript:badness()\"/>", "<area />");
+        sanitize("<area href=\"cid:ii_hyw5v8ej0\"/>", "<area />");
         sanitize("<area hreflang=\"something\"/>", "<area />");
         sanitize("<area media=\"something\"/>", "<area />");
         sanitize("<area rel=\"something\"/>", "<area />");
@@ -106,10 +110,13 @@
         // allowed attributes
         sanitize("<base href=\"http://www.example.com/\">",
                 "<base href=\"http://www.example.com/\" />");
+        sanitize("<base href=\"https://www.example.com/\">",
+                "<base href=\"https://www.example.com/\" />");
 
         // disallowed attributes
         sanitize("<base target=\"_blank\">", "<base />");
         sanitize("<base href=\"javascript:badness()\">", "<base />");
+        sanitize("<base href=\"cid:ii_hyw5v8ej0\">", "<base />");
         sanitize("<base href=\"javascript:alert('XSS');//\">", "<base />");
     }
 
@@ -485,11 +492,18 @@
         sanitize("<img width=\"22\"/>", "<img width=\"22\" />");
         sanitize("<img src=\"http://www.overhere.com/\"></img>",
                 "<img src=\"http://www.overhere.com/\" />");
+        sanitize("<img src=\"https://www.overhere.com/\"></img>",
+                "<img src=\"https://www.overhere.com/\" />");
+        sanitize("<img src=\"cid:ii_hyw5v8ej0\"></img>",
+                "<img src=\"cid:ii_hyw5v8ej0\" />");
         sanitize("<img longdesc=\"http://www.overhere.com/\"></img>",
                 "<img longdesc=\"http://www.overhere.com/\" />");
+        sanitize("<img longdesc=\"https://www.overhere.com/\"></img>",
+                "<img longdesc=\"https://www.overhere.com/\" />");
 
         sanitize("<img src=\"javascript:badness()\"></img>", "");
         sanitize("<img longdesc=\"javascript:badness()\"></img>", "");
+        sanitize("<img longdesc=\"cid:ii_hyw5v8ej0\"></img>", "");
         sanitize("<img src=javascript:alert('XSS')>", "");
         sanitize("<img src=JaVaScRiPt:alert('XSS')>", "");
         sanitize("<img src=javascript:alert(\"XSS\")>", "");
@@ -555,10 +569,16 @@
         sanitize("<input width=\"50\"/>", "<input width=\"50\" />");
         sanitize("<input src=\"http://www.overhere.com/\"></input>",
                 "<input src=\"http://www.overhere.com/\" />");
+        sanitize("<input src=\"https://www.overhere.com/\"></input>",
+                "<input src=\"https://www.overhere.com/\" />");
         sanitize("<input formaction=\"http://www.overhere.com/\"></input>",
                 "<input formaction=\"http://www.overhere.com/\" />");
+        sanitize("<input formaction=\"https://www.overhere.com/\"></input>",
+                "<input formaction=\"https://www.overhere.com/\" />");
 
+        sanitize("<input src=\"cid:ii_hyw5v8ej0\"></input>", "");
         sanitize("<input src=\"javascript:badness()\"></input>", "");
+        sanitize("<input formaction=\"cid:ii_hyw5v8ej0\"></input>", "");
         sanitize("<input formaction=\"javascript:badness()\"></input>", "");
         sanitize("<input type=\"image\" src=\"javascript:alert('XSS');\">",
                 "<input type=\"image\" />");
@@ -575,8 +595,13 @@
         sanitize("<ins cite=\"javascript:badness();\">something</ins>", "<ins>something</ins>");
         sanitize("<ins cite=\"http://www.reason.com/\">something</ins>",
                 "<ins cite=\"http://www.reason.com/\">something</ins>");
+        sanitize("<ins cite=\"https://www.reason.com/\">something</ins>",
+                "<ins cite=\"https://www.reason.com/\">something</ins>");
         sanitize("<ins datetime=\"something\">something</ins>",
                 "<ins datetime=\"something\">something</ins>");
+
+        sanitize("<ins cite=\"cid:ii_hyw5v8ej0\">something</ins>",
+                "<ins>something</ins>");
     }
 
     public void testKbd() {
@@ -614,6 +639,8 @@
     public void testLink() {
         sanitize("<link charset=\"utf8\"/>", "");
         sanitize("<link href=\"http://www.reason.com/\"/>", "");
+        sanitize("<link href=\"https://www.reason.com/\"/>", "");
+        sanitize("<link href=\"cid:ii_hyw5v8ej0\"/>", "");
         sanitize("<link hreflang=\"fr_CA\"/>", "");
         sanitize("<link media=\"tv\"/>", "");
         sanitize("<link rel=\"alternate\"/>", "");
@@ -655,6 +682,8 @@
                 "<menuitem disabled=\"disabled\"></menuitem>");
         sanitize("<menuitem icon=\"http://www.reason.com/\"></menuitem>",
                 "<menuitem icon=\"http://www.reason.com/\"></menuitem>");
+        sanitize("<menuitem icon=\"https://www.reason.com/\"></menuitem>",
+                "<menuitem icon=\"https://www.reason.com/\"></menuitem>");
         sanitize("<menuitem label=\"something\"></menuitem>",
                 "<menuitem label=\"something\"></menuitem>");
         sanitize("<menuitem type=\"checkbox\"></menuitem>",
@@ -662,6 +691,7 @@
         sanitize("<menuitem radiogroup=\"something\"></menuitem>",
                 "<menuitem radiogroup=\"something\"></menuitem>");
 
+        sanitize("<menuitem icon=\"cid:ii_hyw5v8ej0\"></menuitem>", "<menuitem></menuitem>");
         sanitize("<menuitem icon=\"javascript:badness()\"></menuitem>", "<menuitem></menuitem>");
     }
 
@@ -773,6 +803,10 @@
         sanitize("<q>something</q>", "<q>something</q>");
         sanitize("<q cite=\"http://www.reason.com/\">something</q>",
                 "<q cite=\"http://www.reason.com/\">something</q>");
+        sanitize("<q cite=\"https://www.reason.com/\">something</q>",
+                "<q cite=\"https://www.reason.com/\">something</q>");
+
+        sanitize("<q cite=\"cid:ii_hyw5v8ej0\">something</q>", "<q>something</q>");
         sanitize("<q cite=\"javascript:badness()\">something</q>", "<q>something</q>");
     }
 
@@ -843,12 +877,8 @@
     }
 
     public void testSource() {
-        sanitize("<source/>", "<source />");
-        sanitize("<source media=\"something\"/>", "<source media=\"something\" />");
-        sanitize("<source type=\"mimeType\"/>", "<source type=\"mimeType\" />");
-        sanitize("<source src=\"http://www.reason.com/\"/source>",
-                "<source src=\"http://www.reason.com/\" />");
-        sanitize("<source src=\"javascript:badness()\"/source>", "<source />");
+        sanitize("<source/>", "");
+        sanitize("<source></source>", "");
     }
 
     public void testSpan() {
@@ -1012,15 +1042,8 @@
     }
 
     public void testTrack() {
-        sanitize("<track/>", "<track />");
-        sanitize("<track default=\"default\"/>", "<track default=\"default\" />");
-        sanitize("<track kind=\"captions\"/>", "<track kind=\"captions\" />");
-        sanitize("<track label=\"something\"/>", "<track label=\"something\" />");
-        sanitize("<track src=\"http://www.reason.com/\"/>",
-                "<track src=\"http://www.reason.com/\" />");
-        sanitize("<track srclang=\"fr_CA\"/>", "<track srclang=\"fr_CA\" />");
-
-        sanitize("<track src=\"javascript:badness()\"/>", "<track />");
+        sanitize("<track/>", "");
+        sanitize("<track></track>", "");
     }
 
     public void testTt() {
diff --git a/tests/src/com/android/mail/utils/RankedComparatorTest.java b/tests/src/com/android/mail/utils/RankedComparatorTest.java
new file mode 100644
index 0000000..85e5cd0
--- /dev/null
+++ b/tests/src/com/android/mail/utils/RankedComparatorTest.java
@@ -0,0 +1,100 @@
+/**
+ * Copyright (C) 2014 Google Inc.
+ * Licensed to 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.mail.utils;
+
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import com.google.android.mail.common.base.Function;
+
+@SmallTest
+public class RankedComparatorTest extends AndroidTestCase {
+
+    private static final String RANK1 = "rank1";
+    private static final String RANK2 = "rank2";
+    private static final String[] RANKS = new String[]{RANK1, RANK2};
+    private static final String UNKNOWN_RANK1 = "unknown_rank_1";
+    private static final String UNKNOWN_RANK2 = "unknown_rank_2";
+    private static final String NULL_RANK = null;
+
+    private RankedComparator<DummyObject, String> comparator;
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        comparator =
+                new RankedComparator<DummyObject, String>(RANKS, DUMMY_OBJECT_TO_RANK_FUNCTION);
+    }
+
+    public void testSimple() {
+        DummyObject rank1_1 = new DummyObject(RANK1);
+        DummyObject rank1_2 = new DummyObject(RANK1);
+        DummyObject rank2 = new DummyObject(RANK2);
+
+        assertTrue("Same object should be equal to itself.",
+                comparator.compare(rank1_1, rank1_1) == 0);
+        assertTrue("Different objects with same rank should be equal.",
+                comparator.compare(rank1_1, rank1_2) == 0);
+
+        // Testing different ranks and with different order of the parameters
+        assertTrue(comparator.compare(rank1_1, rank2) < 0);
+        assertTrue(comparator.compare(rank2, rank1_1) > 0);
+    }
+
+    public void testUnknownRank() {
+        DummyObject knownRank = new DummyObject(RANK1);
+        DummyObject unknownRank1 = new DummyObject(UNKNOWN_RANK1);
+        DummyObject unknownRank2 = new DummyObject(UNKNOWN_RANK2);
+
+        assertTrue("Known rank should be smaller than unknown rank.",
+                comparator.compare(knownRank, unknownRank1) < 0);
+        assertTrue("Unknown rank should be larger than known rank.",
+                comparator.compare(unknownRank1, knownRank) > 0);
+        assertTrue("Two different unknown ranks should be equal.",
+                comparator.compare(unknownRank1, unknownRank2) == 0);
+    }
+
+    public void testNullRank() {
+        DummyObject knownRank = new DummyObject(RANK1);
+        DummyObject unknownRank = new DummyObject(UNKNOWN_RANK1);
+        DummyObject nullRank = new DummyObject(NULL_RANK);
+
+        assertTrue("Known rank should be smaller than null rank.",
+                comparator.compare(knownRank, nullRank) < 0);
+        assertTrue("null rank should be larger than known rank.",
+                comparator.compare(nullRank, knownRank) > 0);
+        assertTrue("Unknown and null rank should be equal.",
+                comparator.compare(unknownRank, nullRank) == 0);
+    }
+
+    private static final Function<DummyObject, String> DUMMY_OBJECT_TO_RANK_FUNCTION =
+            new Function<DummyObject, String>() {
+                @Override
+                public String apply(DummyObject dummyObject) {
+                    return dummyObject.rank;
+                }
+            };
+
+    private class DummyObject {
+        private final String rank;
+
+        private DummyObject(String rank) {
+            this.rank = rank;
+        }
+    }
+}
diff --git a/tests/src/com/android/mail/utils/UtilsTest.java b/tests/src/com/android/mail/utils/UtilsTest.java
new file mode 100644
index 0000000..36fe6e5
--- /dev/null
+++ b/tests/src/com/android/mail/utils/UtilsTest.java
@@ -0,0 +1,77 @@
+/**
+ * Copyright (c) 2014, Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.mail.utils;
+
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+import android.text.SpannableString;
+import android.text.Spanned;
+import android.text.style.TextAppearanceSpan;
+
+/**
+ * Tests for {@link Utils}.
+ */
+@SmallTest
+public class UtilsTest extends AndroidTestCase {
+
+    public void testInsertStringWithStyle() {
+        final String entire = "Hello World!";
+        final String sub = "World";
+        final int appearance = android.R.style.TextAppearance_Holo_Small;
+        final Spanned actual = Utils.insertStringWithStyle(
+                getContext(), entire, sub, appearance);
+        final SpannableString expected = new SpannableString(entire);
+        expected.setSpan(new TextAppearanceSpan(getContext(), appearance), 6, 11, 0);
+
+        assertSpannedEquals(expected, actual);
+    }
+
+    public void testInsertStringWithStyle_substringNotInEntire() {
+        final String entire = "Hello World!";
+        final String sub = "foo";
+        final int appearance = android.R.style.TextAppearance_Holo_Small;
+        final Spanned actual = Utils.insertStringWithStyle(
+                getContext(), entire, sub, appearance);
+        final SpannableString expected = new SpannableString(entire);
+
+        assertSpannedEquals(expected, actual);
+    }
+
+    public static void assertSpannedEquals(Spanned expected, Spanned actual) {
+        assertEquals(expected.length(), actual.length());
+        assertEquals(expected.toString(), actual.toString());
+        if (expected.length() > 0) {
+            TextAppearanceSpan[] expectedSpans =
+                    expected.getSpans(0, expected.length(), TextAppearanceSpan.class);
+            TextAppearanceSpan[] actualSpans =
+                    actual.getSpans(0, actual.length(), TextAppearanceSpan.class);
+            assertEquals(expectedSpans.length, actualSpans.length);
+            for (int i = 0 ; i < expectedSpans.length ; i++) {
+                assertTextAppearanceSpanEquals(expectedSpans[i], actualSpans[i]);
+            }
+        }
+    }
+
+    public static void assertTextAppearanceSpanEquals(
+            TextAppearanceSpan expected, TextAppearanceSpan actual) {
+        assertEquals(expected.describeContents(), actual.describeContents());
+        assertEquals(expected.getTextStyle(), actual.getTextStyle());
+        assertEquals(expected.getTextColor(), actual.getTextColor());
+        assertEquals(expected.getLinkTextColor(), actual.getLinkTextColor());
+        assertEquals(expected.getFamily(), actual.getFamily());
+        assertEquals(expected.getTextSize(), actual.getTextSize());
+    }
+}
diff --git a/unified_src/com/android/mail/providers/UnifiedAccountCacheProvider.java b/unified_src/com/android/mail/providers/UnifiedAccountCacheProvider.java
index b1c1313..a03e3a4 100644
--- a/unified_src/com/android/mail/providers/UnifiedAccountCacheProvider.java
+++ b/unified_src/com/android/mail/providers/UnifiedAccountCacheProvider.java
@@ -24,11 +24,6 @@
     // The authority of our conversation provider (a forwarding provider)
     // This string must match the declaration in AndroidManifest.xml
     private static final String sAuthority = "com.android.mail.accountcache";
-    /**
-     * Authority for the suggestions provider. This is specified in AndroidManifest.xml and
-     * res/xml/searchable.xml.
-     */
-    private static final String sSuggestionsAuthority = "com.android.mail.suggestionsprovider";
 
     @Override
     protected String getAuthority() {
@@ -39,9 +34,4 @@
     protected Intent getNoAccountsIntent(Context context) {
         return null;
     }
-
-    @Override
-    public String getSuggestionAuthority() {
-        return sSuggestionsAuthority;
-    }
 }