summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJin Cao <jinyan@google.com>2014-08-14 13:11:25 -0700
committerJin Cao <jinyan@google.com>2014-08-14 13:11:25 -0700
commit7ee90b37599cb6717782d40a6d085849918c29df (patch)
treed0ac3ea05e17ec7f681c64aff44a07467051f237 /src
parent174892d90a5fd1f21f8ee18eebcb1fed6392cf3c (diff)
downloadandroid_packages_apps_UnifiedEmail-7ee90b37599cb6717782d40a6d085849918c29df.tar.gz
android_packages_apps_UnifiedEmail-7ee90b37599cb6717782d40a6d085849918c29df.tar.bz2
android_packages_apps_UnifiedEmail-7ee90b37599cb6717782d40a6d085849918c29df.zip
Keyboard polish
Some polish for our custom conversation view navigation, e.g. pressing up when you are on the first header item will auto focus the overlay, same thing for down and last item. Disable focus for conversation header since there isn't much actionable items there (MAYBE star, can discuss later). b/3304236 Change-Id: I06796adac09716bccdae2636c7a9da245896eb34
Diffstat (limited to 'src')
-rw-r--r--src/com/android/mail/browse/ConversationContainer.java4
-rw-r--r--src/com/android/mail/browse/ConversationViewAdapter.java4
-rw-r--r--src/com/android/mail/ui/ConversationListFragment.java12
-rw-r--r--src/com/android/mail/ui/ConversationViewFragment.java20
4 files changed, 31 insertions, 9 deletions
diff --git a/src/com/android/mail/browse/ConversationContainer.java b/src/com/android/mail/browse/ConversationContainer.java
index 05faad17b..94958dc93 100644
--- a/src/com/android/mail/browse/ConversationContainer.java
+++ b/src/com/android/mail/browse/ConversationContainer.java
@@ -999,6 +999,10 @@ public class ConversationContainer extends ViewGroup implements ScrollListener {
mOverlayAdapter.focusFirstMessageHeader();
}
+ public int getOverlayCount() {
+ return mOverlayAdapter.getCount();
+ }
+
public int getViewPosition(View v) {
return mOverlayAdapter.getViewPosition(v);
}
diff --git a/src/com/android/mail/browse/ConversationViewAdapter.java b/src/com/android/mail/browse/ConversationViewAdapter.java
index 14da20367..57a356c4f 100644
--- a/src/com/android/mail/browse/ConversationViewAdapter.java
+++ b/src/com/android/mail/browse/ConversationViewAdapter.java
@@ -789,6 +789,10 @@ public class ConversationViewAdapter extends BaseAdapter {
}
}
}
+ // Special case two end points
+ if ((position == 0 && !isDown) || (position == mItems.size() - 1 && isDown)) {
+
+ }
return null;
}
diff --git a/src/com/android/mail/ui/ConversationListFragment.java b/src/com/android/mail/ui/ConversationListFragment.java
index 177d38eb0..77e286861 100644
--- a/src/com/android/mail/ui/ConversationListFragment.java
+++ b/src/com/android/mail/ui/ConversationListFragment.java
@@ -641,16 +641,10 @@ public final class ConversationListFragment extends Fragment implements
} else if (keyEvent.getAction() == KeyEvent.ACTION_UP) {
if (keyCode == KeyEvent.KEYCODE_DPAD_UP || keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
final int position = list.getSelectedItemPosition();
- final ConversationCursor cursor =
- (ConversationCursor) getAnimatedAdapter().getItem(position);
-
- if (cursor != null) {
- final Conversation conv = cursor.getConversation();
+ final Object item = getAnimatedAdapter().getItem(position);
+ if (item != null && item instanceof ConversationCursor) {
+ final Conversation conv = ((ConversationCursor) item).getConversation();
mCallbacks.onConversationFocused(conv);
- } else {
- LogUtils.e(LOG_TAG,
- "unable to find conv at cursor pos=%s cursor=%s getPositionOffset=%s",
- position, cursor, getAnimatedAdapter().getPositionOffset(position));
}
}
}
diff --git a/src/com/android/mail/ui/ConversationViewFragment.java b/src/com/android/mail/ui/ConversationViewFragment.java
index a24b4d404..b058a0261 100644
--- a/src/com/android/mail/ui/ConversationViewFragment.java
+++ b/src/com/android/mail/ui/ConversationViewFragment.java
@@ -1063,6 +1063,7 @@ public class ConversationViewFragment extends AbstractConversationViewFragment i
mTempBodiesHtml = renderCollapsedHeaders(cursor, item);
mWebView.loadUrl("javascript:replaceSuperCollapsedBlock(" + item.getStart() + ")");
+ mConversationContainer.focusFirstMessageHeader();
}
private void showNewMessageNotification(NewMessagesInfo info) {
@@ -1169,6 +1170,11 @@ public class ConversationViewFragment extends AbstractConversationViewFragment i
id, isLeft, isRight, isTwoPaneLand)) {
return true;
} else if (isUp || isDown) {
+ // We don't do anything on up/down for overlay
+ if (id == R.id.conversation_topmost_overlay) {
+ return true;
+ }
+
// 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);
@@ -1188,6 +1194,19 @@ public class ConversationViewFragment extends AbstractConversationViewFragment i
}
}
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;
+ }
}
}
@@ -1201,6 +1220,7 @@ public class ConversationViewFragment extends AbstractConversationViewFragment i
id == R.id.conversation_topmost_overlay) {
if (isActionUp) {
mConversationContainer.focusFirstMessageHeader();
+ mWebView.scrollTo(0, 0);
}
return true;
}