OSDN Git Service

Fix 5661035: Accepts bluetooth keys while playing a video from gallery.
authorChih-Chung Chang <chihchung@google.com>
Tue, 29 Nov 2011 06:21:11 +0000 (14:21 +0800)
committerChih-Chung Chang <chihchung@google.com>
Tue, 29 Nov 2011 07:12:14 +0000 (15:12 +0800)
Change-Id: I8174b1a97baad563d8bbd685b9aab3a8ca428ead

src/com/android/gallery3d/app/MovieActivity.java
src/com/android/gallery3d/app/MoviePlayer.java

index 95e0c74..099e9f5 100644 (file)
@@ -26,6 +26,7 @@ import android.net.Uri;
 import android.os.Bundle;
 import android.provider.MediaStore;
 import android.provider.MediaStore.Video.VideoColumns;
+import android.view.KeyEvent;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
@@ -170,4 +171,16 @@ public class MovieActivity extends Activity {
         mPlayer.onDestroy();
         super.onDestroy();
     }
+
+    @Override
+    public boolean onKeyDown(int keyCode, KeyEvent event) {
+        return mPlayer.onKeyDown(keyCode, event)
+                || super.onKeyDown(keyCode, event);
+    }
+
+    @Override
+    public boolean onKeyUp(int keyCode, KeyEvent event) {
+        return mPlayer.onKeyUp(keyCode, event)
+                || super.onKeyUp(keyCode, event);
+    }
 }
index 9c81c79..3de534b 100644 (file)
@@ -30,6 +30,7 @@ import android.media.MediaPlayer;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
+import android.view.KeyEvent;
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewGroup;
@@ -333,6 +334,55 @@ public class MoviePlayer implements
         startVideo();
     }
 
+    // Below are key events passed from MovieActivity.
+    public boolean onKeyDown(int keyCode, KeyEvent event) {
+
+        // Some headsets will fire off 7-10 events on a single click
+        if (event.getRepeatCount() > 0) {
+            return isMediaKey(keyCode);
+        }
+
+        switch (keyCode) {
+            case KeyEvent.KEYCODE_HEADSETHOOK:
+            case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
+                if (mVideoView.isPlaying()) {
+                    pauseVideo();
+                } else {
+                    playVideo();
+                }
+                return true;
+            case KeyEvent.KEYCODE_MEDIA_PAUSE:
+                if (mVideoView.isPlaying()) {
+                    pauseVideo();
+                }
+                return true;
+            case KeyEvent.KEYCODE_MEDIA_PLAY:
+                if (!mVideoView.isPlaying()) {
+                    playVideo();
+                }
+                return true;
+            case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
+            case KeyEvent.KEYCODE_MEDIA_NEXT:
+                // TODO: Handle next / previous accordingly, for now we're
+                // just consuming the events.
+                return true;
+        }
+        return false;
+    }
+
+    public boolean onKeyUp(int keyCode, KeyEvent event) {
+        return isMediaKey(keyCode);
+    }
+
+    private static boolean isMediaKey(int keyCode) {
+        return keyCode == KeyEvent.KEYCODE_HEADSETHOOK
+                || keyCode == KeyEvent.KEYCODE_MEDIA_PREVIOUS
+                || keyCode == KeyEvent.KEYCODE_MEDIA_NEXT
+                || keyCode == KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE
+                || keyCode == KeyEvent.KEYCODE_MEDIA_PLAY
+                || keyCode == KeyEvent.KEYCODE_MEDIA_PAUSE;
+    }
+
     // We want to pause when the headset is unplugged.
     private class AudioBecomingNoisyReceiver extends BroadcastReceiver {