Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1064)

Unified Diff: third_party/android_media/java/src/org/chromium/third_party/android/media/MediaController.java

Issue 2895263005: [Cast,Android] Remove TransportXX dependency from ExpandedControllerActivity (Closed)
Patch Set: Updated README.chromium Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/android_media/README.chromium ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/android_media/java/src/org/chromium/third_party/android/media/MediaController.java
diff --git a/third_party/android_media/java/src/org/chromium/third_party/android/media/MediaController.java b/third_party/android_media/java/src/org/chromium/third_party/android/media/MediaController.java
index 1e6b23139e29aac2479bc255e5422593c3e3dd3e..3e76e0d810fa51d6445b9bcbfffdfeec646c1d5e 100644
--- a/third_party/android_media/java/src/org/chromium/third_party/android/media/MediaController.java
+++ b/third_party/android_media/java/src/org/chromium/third_party/android/media/MediaController.java
@@ -17,9 +17,7 @@
package org.chromium.third_party.android.media;
import android.content.Context;
-import android.support.v4.media.TransportController;
-import android.support.v4.media.TransportMediator;
-import android.support.v4.media.TransportStateListener;
+import android.support.v4.media.session.PlaybackStateCompat;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
@@ -43,8 +41,49 @@ import java.util.Locale;
* supportv4, with tiny bug fixes.
*/
public class MediaController extends FrameLayout {
+ /**
+ * The interface that allows media controller to actually control media and provides some
+ * essential metadata for the UI like the current position, duration, etc.
+ */
+ public interface Delegate {
+ /**
+ * Called when the user wants to resume or start.
+ */
+ void play();
+
+ /**
+ * Called when the user wants to pause.
+ */
+ void pause();
+
+ /**
+ * Called when the user wants to seek.
+ */
+ void seekTo(long pos);
+
+ /**
+ * @return the current media duration, in milliseconds.
+ */
+ long getDuration();
+
+ /**
+ * @return the current playback position, in milliseconds.
+ */
+ long getPosition();
+
+ /**
+ * @return if the media is currently playing.
+ */
+ boolean isPlaying();
+
+ /**
+ * @return a combination of {@link PlaybackStateCompat} flags defining what UI elements will
+ * be available to the user.
+ */
+ long getActionFlags();
+ }
- private TransportController mController;
+ private Delegate mDelegate;
private Context mContext;
private ViewGroup mProgressGroup;
private SeekBar mProgressBar;
@@ -62,17 +101,6 @@ public class MediaController extends FrameLayout {
private ImageButton mNextButton;
private ImageButton mPrevButton;
- private TransportStateListener mStateListener = new TransportStateListener() {
- @Override
- public void onPlayingChanged(TransportController controller) {
- updatePausePlay();
- }
- @Override
- public void onTransportControlsChanged(TransportController controller) {
- updateButtons();
- }
- };
-
public MediaController(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
@@ -93,35 +121,11 @@ public class MediaController extends FrameLayout {
this(context, true);
}
- public void setMediaPlayer(TransportController controller) {
- if (getWindowToken() != null) {
- if (mController != null) {
- mController.unregisterStateListener(mStateListener);
- }
- if (controller != null) {
- controller.registerStateListener(mStateListener);
- }
- }
- mController = controller;
+ public void setDelegate(Delegate delegate) {
+ mDelegate = delegate;
updatePausePlay();
}
- @Override
- protected void onAttachedToWindow() {
- super.onAttachedToWindow();
- if (mController != null) {
- mController.registerStateListener(mStateListener);
- }
- }
-
- @Override
- protected void onDetachedFromWindow() {
- super.onDetachedFromWindow();
- if (mController != null) {
- mController.unregisterStateListener(mStateListener);
- }
- }
-
private void initControllerView() {
mPauseButton = (ImageButton) findViewById(R.id.pause);
if (mPauseButton != null) {
@@ -174,28 +178,29 @@ public class MediaController extends FrameLayout {
* This requires the control interface to be a MediaPlayerControlExt
*/
void updateButtons() {
- int flags = mController.getTransportControlFlags();
+ if (mDelegate == null) return;
+
+ long flags = mDelegate.getActionFlags();
boolean enabled = isEnabled();
if (mPauseButton != null) {
- boolean needPlayPauseButton = (flags & TransportMediator.FLAG_KEY_MEDIA_PAUSE) != 0 ||
- (flags & TransportMediator.FLAG_KEY_MEDIA_PLAY) != 0;
+ boolean needPlayPauseButton = (flags & PlaybackStateCompat.ACTION_PLAY) != 0
+ || (flags & PlaybackStateCompat.ACTION_PAUSE) != 0;
mPauseButton.setEnabled(enabled && needPlayPauseButton);
}
if (mRewButton != null) {
- mRewButton.setEnabled(enabled &&
- (flags & TransportMediator.FLAG_KEY_MEDIA_REWIND) != 0);
+ mRewButton.setEnabled(enabled && (flags & PlaybackStateCompat.ACTION_REWIND) != 0);
}
if (mFfwdButton != null) {
- mFfwdButton.setEnabled(enabled &&
- (flags & TransportMediator.FLAG_KEY_MEDIA_FAST_FORWARD) != 0);
+ mFfwdButton.setEnabled(
+ enabled && (flags & PlaybackStateCompat.ACTION_FAST_FORWARD) != 0);
}
if (mPrevButton != null) {
- mShowPrev = (flags & TransportMediator.FLAG_KEY_MEDIA_PREVIOUS) != 0
- || mPrevListener != null;
+ mShowPrev =
+ (flags & PlaybackStateCompat.ACTION_SKIP_TO_NEXT) != 0 || mPrevListener != null;
mPrevButton.setEnabled(enabled && mShowPrev);
}
if (mNextButton != null) {
- mShowNext = (flags & TransportMediator.FLAG_KEY_MEDIA_NEXT) != 0
+ mShowNext = (flags & PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS) != 0
|| mNextListener != null;
mNextButton.setEnabled(enabled && mShowNext);
}
@@ -223,11 +228,10 @@ public class MediaController extends FrameLayout {
}
public long updateProgress() {
- if (mController == null || mDragging) {
- return 0;
- }
- long position = mController.getCurrentPosition();
- long duration = mController.getDuration();
+ if (mDelegate == null || mDragging) return 0;
+
+ long position = mDelegate.getPosition();
+ long duration = mDelegate.getDuration();
if (duration <= 0) {
// If there is no valid duration, hide the progress bar and time indicators.
if (mProgressGroup != null) mProgressGroup.setVisibility(View.INVISIBLE);
@@ -236,9 +240,7 @@ public class MediaController extends FrameLayout {
// use long to avoid overflow
long pos = 1000L * position / duration;
mProgressBar.setProgress( (int) pos);
-
- int percent = mController.getBufferPercentage();
- mProgressBar.setSecondaryProgress(percent * 10);
+ mProgressBar.setSecondaryProgress((int) pos);
}
if (mEndTime != null)
@@ -257,10 +259,9 @@ public class MediaController extends FrameLayout {
};
private void updatePausePlay() {
- if (mPauseButton == null)
- return;
+ if (mDelegate == null || mPauseButton == null) return;
- if (mController.isPlaying()) {
+ if (mDelegate.isPlaying()) {
mPauseButton.setImageResource(android.R.drawable.ic_media_pause);
} else {
mPauseButton.setImageResource(android.R.drawable.ic_media_play);
@@ -268,10 +269,12 @@ public class MediaController extends FrameLayout {
}
private void doPauseResume() {
- if (mController.isPlaying()) {
- mController.pausePlaying();
+ if (mDelegate == null) return;
+
+ if (mDelegate.isPlaying()) {
+ mDelegate.pause();
} else {
- mController.startPlaying();
+ mDelegate.play();
}
updatePausePlay();
}
@@ -295,15 +298,17 @@ public class MediaController extends FrameLayout {
@Override
public void onProgressChanged(SeekBar bar, int progress, boolean fromuser) {
+ if (mDelegate == null) return;
+
if (!fromuser) {
// We're not interested in programmatically generated changes to
// the progress bar's position.
return;
}
- long duration = mController.getDuration();
+ long duration = mDelegate.getDuration();
long newposition = (duration * progress) / 1000L;
- mController.seekTo((int) newposition);
+ mDelegate.seekTo(newposition);
if (mCurrentTime != null)
mCurrentTime.setText(stringForTime( (int) newposition));
}
@@ -337,9 +342,11 @@ public class MediaController extends FrameLayout {
private View.OnClickListener mRewListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
- long pos = mController.getCurrentPosition();
+ if (mDelegate == null) return;
+
+ long pos = mDelegate.getPosition();
pos -= 5000; // milliseconds
- mController.seekTo(pos);
+ mDelegate.seekTo(pos);
updateProgress();
}
};
@@ -347,9 +354,11 @@ public class MediaController extends FrameLayout {
private View.OnClickListener mFfwdListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
- long pos = mController.getCurrentPosition();
+ if (mDelegate == null) return;
+
+ long pos = mDelegate.getPosition();
pos += 15000; // milliseconds
- mController.seekTo(pos);
+ mDelegate.seekTo(pos);
updateProgress();
}
};
« no previous file with comments | « third_party/android_media/README.chromium ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698