From 65f0d22355604059897b272f06553b8a60233902 Mon Sep 17 00:00:00 2001 From: Jesse Vincent Date: Mon, 30 Aug 2010 02:16:20 +0000 Subject: [PATCH] Add Volume button navigation in MessageView, MessageList and all K9ListActivity subclasses. The MessageView code is a patch from paulkilroy@gmail.com. Fixes Issue 2112 --- src/com/fsck/k9/activity/K9ListActivity.java | 50 ++++++++++++++++++++ src/com/fsck/k9/activity/MessageList.java | 40 ++++++++++++++++ src/com/fsck/k9/activity/MessageView.java | 30 ++++++++++++ 3 files changed, 120 insertions(+) diff --git a/src/com/fsck/k9/activity/K9ListActivity.java b/src/com/fsck/k9/activity/K9ListActivity.java index 6ea29a588..c3be5686a 100644 --- a/src/com/fsck/k9/activity/K9ListActivity.java +++ b/src/com/fsck/k9/activity/K9ListActivity.java @@ -1,6 +1,9 @@ package com.fsck.k9.activity; import android.app.ListActivity; +import android.util.Log; +import android.view.KeyEvent; +import android.widget.ListView; import android.os.Bundle; import com.fsck.k9.K9; @@ -41,4 +44,51 @@ public class K9ListActivity extends ListActivity { return mDateFormat; } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) + { + // Shortcuts that work no matter what is selected + switch (keyCode) + { + case KeyEvent.KEYCODE_VOLUME_UP: + { + ListView listView = getListView(); + if(K9.useVolumeKeysForNavigationEnabled()) + { + + if (listView.getSelectedItemPosition() > 0) { + listView.setSelection(listView.getSelectedItemPosition()-1); + } + return true; + } + } + case KeyEvent.KEYCODE_VOLUME_DOWN: + { + ListView listView = getListView(); + if(K9.useVolumeKeysForNavigationEnabled()) + { + if (listView.getSelectedItemPosition() < listView.getCount()) { + listView.setSelection(listView.getSelectedItemPosition()+1); + } + return true; + } + } + } + return super.onKeyDown(keyCode, event); + } + + @Override + public boolean onKeyUp(int keyCode, KeyEvent event) + { + // Swallow these events too to avoid the audible notification of a volume change + if(K9.useVolumeKeysForNavigationEnabled()) { + if((keyCode == KeyEvent.KEYCODE_VOLUME_UP) || (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)) { + if (K9.DEBUG) + Log.v(K9.LOG_TAG, "Swallowed key up."); + return true; + } + } + return super.onKeyUp(keyCode,event); + } } diff --git a/src/com/fsck/k9/activity/MessageList.java b/src/com/fsck/k9/activity/MessageList.java index 2422e8d6d..5bc9ef267 100644 --- a/src/com/fsck/k9/activity/MessageList.java +++ b/src/com/fsck/k9/activity/MessageList.java @@ -675,6 +675,31 @@ public class MessageList // Shortcuts that work no matter what is selected switch (keyCode) { + + // messagelist is actually a K9Activity, not a K9ListActivity + // This saddens me greatly, but to support volume key navigation + // in MessageView, we implement this bit of wrapper code + case KeyEvent.KEYCODE_VOLUME_UP: + { + if(K9.useVolumeKeysForNavigationEnabled()) + { + + if (mListView.getSelectedItemPosition() > 0) { + mListView.setSelection(mListView.getSelectedItemPosition()-1); + } + return true; + } + } + case KeyEvent.KEYCODE_VOLUME_DOWN: + { + if(K9.useVolumeKeysForNavigationEnabled()) + { + if (mListView.getSelectedItemPosition() < mListView.getCount()) { + mListView.setSelection(mListView.getSelectedItemPosition()+1); + } + return true; + } + } case KeyEvent.KEYCODE_DPAD_LEFT: { if (mBatchButtonArea.hasFocus()) @@ -804,6 +829,21 @@ public class MessageList return result; } + @Override + public boolean onKeyUp(int keyCode, KeyEvent event) + { + // Swallow these events too to avoid the audible notification of a volume change + if(K9.useVolumeKeysForNavigationEnabled()) { + if((keyCode == KeyEvent.KEYCODE_VOLUME_UP) || (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)) { + if (K9.DEBUG) + Log.v(K9.LOG_TAG, "Swallowed key up."); + return true; + } + } + return super.onKeyUp(keyCode,event); + } + + private void onOpenMessage(MessageInfoHolder message) { if (message.folder.name.equals(message.message.getFolder().getAccount().getDraftsFolderName())) diff --git a/src/com/fsck/k9/activity/MessageView.java b/src/com/fsck/k9/activity/MessageView.java index 3fdf99462..6cc8d0b48 100644 --- a/src/com/fsck/k9/activity/MessageView.java +++ b/src/com/fsck/k9/activity/MessageView.java @@ -215,6 +215,22 @@ public class MessageView extends K9Activity implements OnClickListener { switch (keyCode) { + case KeyEvent.KEYCODE_VOLUME_UP: + { + if(K9.useVolumeKeysForNavigationEnabled()) + { + onPrevious(true); + return true; + } + } + case KeyEvent.KEYCODE_VOLUME_DOWN: + { + if(K9.useVolumeKeysForNavigationEnabled()) + { + onNext(true); + return true; + } + } case KeyEvent.KEYCODE_SHIFT_LEFT: case KeyEvent.KEYCODE_SHIFT_RIGHT: { @@ -336,6 +352,20 @@ public class MessageView extends K9Activity implements OnClickListener return super.onKeyDown(keyCode, event); } + @Override + public boolean onKeyUp(int keyCode, KeyEvent event) + { + // Swallow these events too to avoid the audible notification of a volume change + if(K9.useVolumeKeysForNavigationEnabled()) { + if((keyCode == KeyEvent.KEYCODE_VOLUME_UP) || (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)) { + if (K9.DEBUG) + Log.v(K9.LOG_TAG, "Swallowed key up."); + return true; + } + } + return super.onKeyUp(keyCode,event); + } + class MessageViewHandler extends Handler { public void progress(final boolean progress)