[Android] DVD navigation with remote

Geoffrey Métais git at videolan.org
Wed Nov 5 10:40:54 CET 2014


vlc-ports/android | branch: tv | Geoffrey Métais <geoffrey.metais at gmail.com> | Fri Oct 31 16:18:24 2014 +0100| [2bc03e9f34766691dfad78ad8de9af9c19ec8403] | committer: Geoffrey Métais

DVD navigation with remote

> http://git.videolan.org/gitweb.cgi/vlc-ports/android.git/?a=commit;h=2bc03e9f34766691dfad78ad8de9af9c19ec8403
---

 vlc-android/jni/libvlcjni.c                        |    9 ++++++
 vlc-android/src/org/videolan/libvlc/LibVLC.java    |    7 +++++
 .../vlc/gui/video/VideoPlayerActivity.java         |   33 ++++++++++++++++++++
 3 files changed, 49 insertions(+)

diff --git a/vlc-android/jni/libvlcjni.c b/vlc-android/jni/libvlcjni.c
index 0813d7c..1ab151c 100644
--- a/vlc-android/jni/libvlcjni.c
+++ b/vlc-android/jni/libvlcjni.c
@@ -621,3 +621,12 @@ jint Java_org_videolan_libvlc_LibVLC_getTitleCount(JNIEnv *env, jobject thiz)
         return libvlc_media_player_get_title_count(mp);
     return -1;
 }
+
+void Java_org_videolan_libvlc_LibVLC_playerNavigate(JNIEnv *env, jobject thiz, jint navigate)
+{
+    unsigned nav = navigate;
+    libvlc_media_player_t *mp = getMediaPlayer(env, thiz);
+    if (mp)
+        libvlc_media_player_navigate(mp, (unsigned) nav);
+}
+
diff --git a/vlc-android/src/org/videolan/libvlc/LibVLC.java b/vlc-android/src/org/videolan/libvlc/LibVLC.java
index 23bd241..ace87df 100644
--- a/vlc-android/src/org/videolan/libvlc/LibVLC.java
+++ b/vlc-android/src/org/videolan/libvlc/LibVLC.java
@@ -49,6 +49,12 @@ public class LibVLC {
     public static final int DEV_HW_DECODER_MEDIACODEC = 2;
     public static final int DEV_HW_DECODER_MEDIACODEC_DR = 3;
 
+    public static final int INPUT_NAV_ACTIVATE = 0;
+    public static final int INPUT_NAV_UP = 1;
+    public static final int INPUT_NAV_DOWN = 2;
+    public static final int INPUT_NAV_LEFT = 3;
+    public static final int INPUT_NAV_RIGHT = 4;
+
     private static final String DEFAULT_CODEC_LIST = "mediacodec,iomx,all";
 
     private static LibVLC sInstance;
@@ -846,5 +852,6 @@ public class LibVLC {
     public native void setTitle(int title);
     public native int getChapterCountForTitle(int title);
     public native int getTitleCount();
+    public native void playerNavigate(int navigate);
 
 }
diff --git a/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java b/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java
index 66217e5..686f6d8 100644
--- a/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java
+++ b/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java
@@ -787,11 +787,44 @@ public class VideoPlayerActivity extends Activity implements IVideoPlayer {
         case KeyEvent.KEYCODE_MEDIA_STOP:
             finish();
             return true;
+        case KeyEvent.KEYCODE_DPAD_UP:
+        case KeyEvent.KEYCODE_DPAD_DOWN:
+        case KeyEvent.KEYCODE_DPAD_LEFT:
+        case KeyEvent.KEYCODE_DPAD_RIGHT:
+        case KeyEvent.KEYCODE_DPAD_CENTER:
+        case KeyEvent.KEYCODE_ENTER:
+            if (mIsNavMenu)
+                return navigateDvdMenu(keyCode);
+            else
+                return super.onKeyDown(keyCode, event);
         default:
             return super.onKeyDown(keyCode, event);
         }
     }
 
+    private boolean navigateDvdMenu(int keyCode) {
+        switch (keyCode) {
+            case KeyEvent.KEYCODE_DPAD_UP:
+                mLibVLC.playerNavigate(LibVLC.INPUT_NAV_UP);
+                return true;
+            case KeyEvent.KEYCODE_DPAD_DOWN:
+                mLibVLC.playerNavigate(LibVLC.INPUT_NAV_DOWN);
+                return true;
+            case KeyEvent.KEYCODE_DPAD_LEFT:
+                mLibVLC.playerNavigate(LibVLC.INPUT_NAV_LEFT);
+                return true;
+            case KeyEvent.KEYCODE_DPAD_RIGHT:
+                mLibVLC.playerNavigate(LibVLC.INPUT_NAV_RIGHT);
+                return true;
+            case KeyEvent.KEYCODE_DPAD_CENTER:
+            case KeyEvent.KEYCODE_ENTER:
+                mLibVLC.playerNavigate(LibVLC.INPUT_NAV_ACTIVATE);
+                return true;
+            default:
+                return false;
+        }
+    }
+
     @Override
     public void onConfigurationChanged(Configuration newConfig) {
         setSurfaceSize(mVideoWidth, mVideoHeight, mVideoVisibleWidth, mVideoVisibleHeight, mSarNum, mSarDen);



More information about the Android mailing list