Merge "Search accessibility and keyboard nav" into ub-gmail-ur14-dev
diff --git a/assets/script.js b/assets/script.js
index 3834a77..c629654 100644
--- a/assets/script.js
+++ b/assets/script.js
@@ -784,7 +784,7 @@
alert(MSG_FORMS_ARE_DISABLED);
return false;
}
- elements = form[i].elements;
+ elements = forms[i].elements;
for (j = 0; j < elements.length; ++j) {
elements[j].readOnly = true;
}
diff --git a/res/layout/folder_list_header.xml b/res/layout/folder_list_header.xml
index 407ad9e..7a73569 100644
--- a/res/layout/folder_list_header.xml
+++ b/res/layout/folder_list_header.xml
@@ -37,7 +37,6 @@
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"
diff --git a/res/values-v21/styles.xml b/res/values-v21/styles.xml
index 012a0c7..323c23d 100644
--- a/res/values-v21/styles.xml
+++ b/res/values-v21/styles.xml
@@ -42,4 +42,12 @@
<style name="BorderlessBackground">
<item name="android:background">?android:attr/selectableItemBackgroundBorderless</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>
</resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index e8a8faf..9579236 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -16,6 +16,7 @@
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">#4285f4</color>
@@ -23,7 +24,6 @@
<color name="text_color_draft_red">#da4336</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>
<!-- if you want to make something blue, please try to use THIS blue -->
<color name="mail_app_blue">@android:color/holo_blue_light</color>
@@ -50,7 +50,7 @@
<!-- 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>
<!-- overridden in sw600dp -->
<color name="folder_list_divider_color">@color/divider_color</color>
@@ -58,7 +58,7 @@
<!-- 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_label_hint">#999999</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>
diff --git a/src/com/android/mail/compose/ComposeActivity.java b/src/com/android/mail/compose/ComposeActivity.java
index e4ef81f..c062d72 100644
--- a/src/com/android/mail/compose/ComposeActivity.java
+++ b/src/com/android/mail/compose/ComposeActivity.java
@@ -51,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;
@@ -69,6 +70,7 @@
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
+import android.view.Window;
import android.view.inputmethod.BaseInputConnection;
import android.view.inputmethod.EditorInfo;
import android.widget.ArrayAdapter;
@@ -2339,7 +2341,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);
@@ -2810,14 +2812,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
@@ -3661,9 +3663,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.
*
@@ -3705,7 +3713,7 @@
return;
}
- if (shouldSave()) {
+ if (isDraftDirty()) {
doSave(!mAddingAttachment /* show toast */);
}
}
@@ -3961,4 +3969,30 @@
mBodyView.addTextChangedListener(ComposeActivity.this);
}
}
+
+ @SuppressLint("NewApi")
+ @Override
+ public void onSupportActionModeStarted(ActionMode mode) {
+ super.onSupportActionModeStarted(mode);
+ if (Utils.isRunningLOrLater()) {
+ final Window window = getWindow();
+ if (window != null) {
+ window.setStatusBarColor(
+ getResources().getColor(R.color.action_mode_statusbar_color));
+ }
+ }
+ }
+
+ @SuppressLint("NewApi")
+ @Override
+ public void onSupportActionModeFinished(ActionMode mode) {
+ super.onSupportActionModeFinished(mode);
+ if (Utils.isRunningLOrLater()) {
+ final Window window = getWindow();
+ if (window != null) {
+ window.setStatusBarColor(
+ getResources().getColor(R.color.statusbar_color));
+ }
+ }
+ }
}
diff --git a/src/com/android/mail/ui/AbstractConversationViewFragment.java b/src/com/android/mail/ui/AbstractConversationViewFragment.java
index f2122f1..bf2e998 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;
@@ -278,7 +279,7 @@
}
@Override
- public MessageCursor getMessageCursor() {
+ public @Nullable MessageCursor getMessageCursor() {
return mCursor;
}
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/ConversationViewFragment.java b/src/com/android/mail/ui/ConversationViewFragment.java
index fec9952..3e68841 100644
--- a/src/com/android/mail/ui/ConversationViewFragment.java
+++ b/src/com/android/mail/ui/ConversationViewFragment.java
@@ -1148,8 +1148,12 @@
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));
}
/**
diff --git a/src/com/android/mail/ui/MailActivity.java b/src/com/android/mail/ui/MailActivity.java
index 8aa8fbc..bcba078 100644
--- a/src/com/android/mail/ui/MailActivity.java
+++ b/src/com/android/mail/ui/MailActivity.java
@@ -17,8 +17,8 @@
package com.android.mail.ui;
+import android.annotation.SuppressLint;
import android.app.Dialog;
-import android.app.LoaderManager;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
@@ -29,11 +29,13 @@
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.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
+import android.view.Window;
import android.view.accessibility.AccessibilityManager;
import com.android.bitmap.BitmapCache;
@@ -489,4 +491,30 @@
public SearchRecentSuggestionsProvider getSuggestionsProvider() {
return new SuggestionsProvider(this);
}
+
+ @SuppressLint("NewApi")
+ @Override
+ public void onSupportActionModeStarted(ActionMode mode) {
+ super.onSupportActionModeStarted(mode);
+ if (Utils.isRunningLOrLater()) {
+ final Window window = getWindow();
+ if (window != null) {
+ window.setStatusBarColor(
+ getResources().getColor(R.color.action_mode_statusbar_color));
+ }
+ }
+ }
+
+ @SuppressLint("NewApi")
+ @Override
+ public void onSupportActionModeFinished(ActionMode mode) {
+ super.onSupportActionModeFinished(mode);
+ if (Utils.isRunningLOrLater()) {
+ final Window window = getWindow();
+ if (window != null) {
+ window.setStatusBarColor(
+ getResources().getColor(R.color.statusbar_color));
+ }
+ }
+ }
}
diff --git a/src/com/android/mail/ui/ThumbnailLoadTask.java b/src/com/android/mail/ui/ThumbnailLoadTask.java
index bfe6ae9..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