diff options
Diffstat (limited to 'core/java/android/widget/MediaController.java')
-rw-r--r-- | core/java/android/widget/MediaController.java | 47 |
1 files changed, 38 insertions, 9 deletions
diff --git a/core/java/android/widget/MediaController.java b/core/java/android/widget/MediaController.java index 0c9d980..446a992 100644 --- a/core/java/android/widget/MediaController.java +++ b/core/java/android/widget/MediaController.java @@ -250,6 +250,29 @@ public class MediaController extends FrameLayout { } /** + * Disable pause or seek buttons if the stream cannot be paused or seeked. + * This requires the control interface to be a MediaPlayerControlExt + */ + private void disableUnsupportedButtons() { + try { + if (mPauseButton != null && !mPlayer.canPause()) { + mPauseButton.setEnabled(false); + } + if (mRewButton != null && !mPlayer.canSeekBackward()) { + mRewButton.setEnabled(false); + } + if (mFfwdButton != null && !mPlayer.canSeekForward()) { + mFfwdButton.setEnabled(false); + } + } catch (IncompatibleClassChangeError ex) { + // We were given an old version of the interface, that doesn't have + // the canPause/canSeekXYZ methods. This is OK, it just means we + // assume the media can be paused and seeked, and so we don't disable + // the buttons. + } + } + + /** * Show the controller on screen. It will go away * automatically after 'timeout' milliseconds of inactivity. * @param timeout The timeout in milliseconds. Use 0 to show @@ -259,6 +282,10 @@ public class MediaController extends FrameLayout { if (!mShowing && mAnchor != null) { setProgress(); + if (mPauseButton != null) { + mPauseButton.requestFocus(); + } + disableUnsupportedButtons(); int [] anchorpos = new int[2]; mAnchor.getLocationOnScreen(anchorpos); @@ -392,6 +419,9 @@ public class MediaController extends FrameLayout { keyCode == KeyEvent.KEYCODE_SPACE)) { doPauseResume(); show(sDefaultTimeout); + if (mPauseButton != null) { + mPauseButton.requestFocus(); + } return true; } else if (keyCode == KeyEvent.KEYCODE_MEDIA_STOP) { if (mPlayer.isPlaying()) { @@ -421,17 +451,13 @@ public class MediaController extends FrameLayout { }; private void updatePausePlay() { - if (mRoot == null) - return; - - ImageButton button = (ImageButton) mRoot.findViewById(com.android.internal.R.id.pause); - if (button == null) + if (mRoot == null || mPauseButton == null) return; if (mPlayer.isPlaying()) { - button.setImageResource(com.android.internal.R.drawable.ic_media_pause); + mPauseButton.setImageResource(com.android.internal.R.drawable.ic_media_pause); } else { - button.setImageResource(com.android.internal.R.drawable.ic_media_play); + mPauseButton.setImageResource(com.android.internal.R.drawable.ic_media_play); } } @@ -516,7 +542,7 @@ public class MediaController extends FrameLayout { if (mProgress != null) { mProgress.setEnabled(enabled); } - + disableUnsupportedButtons(); super.setEnabled(enabled); } @@ -579,5 +605,8 @@ public class MediaController extends FrameLayout { void seekTo(int pos); boolean isPlaying(); int getBufferPercentage(); - }; + boolean canPause(); + boolean canSeekBackward(); + boolean canSeekForward(); + } } |