am 085639c9: am a3c7d237: am 3c0baabd: am fc0bbdca: Merge "More keyboard polish" into ub-gmail-ur14-dev

* commit '085639c902bc0d6f6929980656ad70debdaab18a':
  More keyboard polish
diff --git a/src/com/android/mail/browse/ConversationContainer.java b/src/com/android/mail/browse/ConversationContainer.java
index 091de9c..e2db625 100644
--- a/src/com/android/mail/browse/ConversationContainer.java
+++ b/src/com/android/mail/browse/ConversationContainer.java
@@ -1013,8 +1013,7 @@
     @Override
     protected boolean onRequestFocusInDescendants(int direction, Rect previouslyFocusedRect) {
         if (mOverlayAdapter != null) {
-            mOverlayAdapter.focusFirstMessageHeader();
-            return true;
+            return mOverlayAdapter.focusFirstMessageHeader();
         }
         return false;
     }
diff --git a/src/com/android/mail/browse/ConversationViewAdapter.java b/src/com/android/mail/browse/ConversationViewAdapter.java
index 60abb7c..afa3dbc 100644
--- a/src/com/android/mail/browse/ConversationViewAdapter.java
+++ b/src/com/android/mail/browse/ConversationViewAdapter.java
@@ -737,14 +737,15 @@
 
     // 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;
             }
         }
+        return false;
     }
 
     /**
diff --git a/src/com/android/mail/ui/AbstractActivityController.java b/src/com/android/mail/ui/AbstractActivityController.java
index a087369..05cd435 100644
--- a/src/com/android/mail/ui/AbstractActivityController.java
+++ b/src/com/android/mail/ui/AbstractActivityController.java
@@ -2951,7 +2951,7 @@
                 mConversationListCursor.moveFailedIntoDrafts(mTarget);
                 undoEnabled = false;
             }
-            if (undoEnabled) {
+            if (undoEnabled && mTarget.size() > 0) {
                 mHandler.postDelayed(new Runnable() {
                     @Override
                     public void run() {
@@ -3750,7 +3750,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);
diff --git a/src/com/android/mail/ui/ConversationListFragment.java b/src/com/android/mail/ui/ConversationListFragment.java
index ddeb3a5..f2bb863 100644
--- a/src/com/android/mail/ui/ConversationListFragment.java
+++ b/src/com/android/mail/ui/ConversationListFragment.java
@@ -679,7 +679,19 @@
             if (KeyboardUtils.isKeycodeDirectionEnd(keyCode, ViewUtils.isViewRtl(list))) {
                 if (keyEvent.getAction() == KeyEvent.ACTION_UP) {
                     if (mKeyInitiatedFromList) {
-                        onListItemSelected(list.getSelectedView(), list.getSelectedItemPosition());
+                        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) {
diff --git a/src/com/android/mail/ui/TwoPaneController.java b/src/com/android/mail/ui/TwoPaneController.java
index 5cd8629..9c3ded7 100644
--- a/src/com/android/mail/ui/TwoPaneController.java
+++ b/src/com/android/mail/ui/TwoPaneController.java
@@ -335,9 +335,11 @@
     }
 
     private void showCurrentConversationInPager() {
-        mPagerController.show(mAccount, mFolder, mConversationToShow,
-                false /* changeVisibility */);
-        mConversationToShow = null;
+        if (mConversationToShow != null) {
+            mPagerController.show(mAccount, mFolder, mConversationToShow,
+                    false /* changeVisibility */);
+            mConversationToShow = null;
+        }
     }
 
     @Override