Merge "Fix keyboard RTL navigation" into ub-gmail-ur14-dev
diff --git a/res/drawable-hdpi/ic_drawer_raw.png b/res/drawable-hdpi/ic_drawer.png
similarity index 100%
rename from res/drawable-hdpi/ic_drawer_raw.png
rename to res/drawable-hdpi/ic_drawer.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_drawer_raw.png b/res/drawable-mdpi/ic_drawer.png
similarity index 100%
rename from res/drawable-mdpi/ic_drawer_raw.png
rename to res/drawable-mdpi/ic_drawer.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_drawer_raw.png b/res/drawable-xhdpi/ic_drawer.png
similarity index 100%
rename from res/drawable-xhdpi/ic_drawer_raw.png
rename to res/drawable-xhdpi/ic_drawer.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_drawer_raw.png b/res/drawable-xxhdpi/ic_drawer.png
similarity index 100%
rename from res/drawable-xxhdpi/ic_drawer_raw.png
rename to res/drawable-xxhdpi/ic_drawer.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_drawer_raw.png b/res/drawable-xxxhdpi/ic_drawer.png
similarity index 100%
rename from res/drawable-xxxhdpi/ic_drawer_raw.png
rename to res/drawable-xxxhdpi/ic_drawer.png
Binary files differ
diff --git a/res/drawable/ic_drawer.xml b/res/drawable/ic_drawer.xml
deleted file mode 100644
index d78f5f4..0000000
--- a/res/drawable/ic_drawer.xml
+++ /dev/null
@@ -1,21 +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.
--->
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_drawer_raw"
- android:autoMirrored="true">
-</bitmap>
diff --git a/res/values/constants.xml b/res/values/constants.xml
index 6ca1297..5acb506 100644
--- a/res/values/constants.xml
+++ b/res/values/constants.xml
@@ -49,7 +49,7 @@
<!-- 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">5000</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>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index d9986e5..25e4923 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -91,10 +91,6 @@
<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>
@@ -225,12 +221,6 @@
<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] -->
@@ -281,10 +271,6 @@
<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 -->
<!-- Formatting string for the content description field of a conversation list item when device is in accessibility mode. [CHAR LIMIT=250] -->
@@ -469,12 +455,6 @@
<plurals name="show_messages_read">
<item quantity="other"><xliff:g id="count" example="4">%1$d</xliff:g> older messages</item>
</plurals>
- <!-- This string is used for accessibility purposes only. It is used when the user
- taps on the collapsed block in collapsed mode when a conversation
- has more than one read message. [CHAR LIMIT=UNLIMITED] -->
- <plurals name="super_collapsed_loading_content_description">
- <item quantity="other">Loading <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>
<!-- Shown to display the reply to address of the message [CHAR LIMIT=20] -->
diff --git a/src/com/android/mail/providers/UIProvider.java b/src/com/android/mail/providers/UIProvider.java
index a280c55..b618804 100644
--- a/src/com/android/mail/providers/UIProvider.java
+++ b/src/com/android/mail/providers/UIProvider.java
@@ -104,6 +104,19 @@
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);
+ }
+ }
}
// The actual content provider should define its own authority
diff --git a/src/com/android/mail/ui/AbstractActivityController.java b/src/com/android/mail/ui/AbstractActivityController.java
index b149898..dce5949 100644
--- a/src/com/android/mail/ui/AbstractActivityController.java
+++ b/src/com/android/mail/ui/AbstractActivityController.java
@@ -47,9 +47,9 @@
import android.os.Parcelable;
import android.os.SystemClock;
import android.speech.RecognizerIntent;
-import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
+import android.support.v7.app.ActionBarDrawerToggle;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.Menu;
@@ -1288,8 +1288,8 @@
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);
diff --git a/src/com/android/mail/ui/ConversationListFragment.java b/src/com/android/mail/ui/ConversationListFragment.java
index 6bc48a3..bf6895c 100644
--- a/src/com/android/mail/ui/ConversationListFragment.java
+++ b/src/com/android/mail/ui/ConversationListFragment.java
@@ -1126,7 +1126,8 @@
};
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;
}
diff --git a/src/com/android/mail/ui/FolderListFragment.java b/src/com/android/mail/ui/FolderListFragment.java
index 6f80819..af6d5de 100644
--- a/src/com/android/mail/ui/FolderListFragment.java
+++ b/src/com/android/mail/ui/FolderListFragment.java
@@ -208,7 +208,7 @@
private boolean mMiniDrawerEnabled;
private boolean mIsMinimized;
protected MiniDrawerView mMiniDrawerView;
- protected MiniDrawerAccountsAdapter mMiniDrawerAccountsAdapter;
+ private MiniDrawerAccountsAdapter mMiniDrawerAccountsAdapter;
// use the same dimen as AccountItemView to participate in recycling
// TODO: but Material account switcher doesn't recycle...
private int mMiniDrawerAvatarDecodeSize;
@@ -313,9 +313,9 @@
mContactResolver = new ContactResolver(getActivity().getContentResolver(),
mImagesCache);
- setupMiniDrawerAccountsAdapter();
- mMiniDrawerView.setController(this);
if (mMiniDrawerEnabled) {
+ setupMiniDrawerAccountsAdapter();
+ mMiniDrawerView.setController(this);
// set up initial state
setMinimized(isMinimized());
} else {
@@ -1690,56 +1690,49 @@
final ImageView iv = convertView != null ? (ImageView) convertView :
(ImageView) LayoutInflater.from(getActivity()).inflate(
R.layout.mini_drawer_recent_account_item, parent, false /* attachToRoot */);
- final FolderListFragment.MiniDrawerAccountItem
- item = createMiniDrawerAccountItem(iv);
+ 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());
+ }
+
+ @Override
+ public void onClick(View v) {
+ onAccountSelected(mAccount);
+ }
+ }
}
protected void setupMiniDrawerAccountsAdapter() {
mMiniDrawerAccountsAdapter = new MiniDrawerAccountsAdapter();
}
- MiniDrawerAccountsAdapter getMiniDrawerAccountsAdapter() {
+ protected ListAdapter getMiniDrawerAccountsAdapter() {
return mMiniDrawerAccountsAdapter;
}
- private MiniDrawerAccountItem createMiniDrawerAccountItem(ImageView iv) {
- return new MiniDrawerAccountItem(iv);
- }
-
- private class MiniDrawerAccountItem 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 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());
- }
-
- @Override
- public void onClick(View v) {
- onAccountSelected(mAccount);
- }
- }
-
}
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());
}