| 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
|
| deleted file mode 100644
|
| index 1e6b23139e29aac2479bc255e5422593c3e3dd3e..0000000000000000000000000000000000000000
|
| --- a/third_party/android_media/java/src/org/chromium/third_party/android/media/MediaController.java
|
| +++ /dev/null
|
| @@ -1,386 +0,0 @@
|
| -/*
|
| - * Copyright (C) 2013 The Android Open Source Project
|
| - *
|
| - * Licensed under the Apache License, Version 2.0 (the "License");
|
| - * you may not use this file except in compliance with the License.
|
| - * You may obtain a copy of the License at
|
| - *
|
| - * http://www.apache.org/licenses/LICENSE-2.0
|
| - *
|
| - * Unless required by applicable law or agreed to in writing, software
|
| - * distributed under the License is distributed on an "AS IS" BASIS,
|
| - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| - * See the License for the specific language governing permissions and
|
| - * limitations under the License.
|
| - */
|
| -
|
| -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.util.AttributeSet;
|
| -import android.view.LayoutInflater;
|
| -import android.view.View;
|
| -import android.view.ViewGroup;
|
| -import android.view.accessibility.AccessibilityEvent;
|
| -import android.view.accessibility.AccessibilityNodeInfo;
|
| -import android.widget.FrameLayout;
|
| -import android.widget.ImageButton;
|
| -import android.widget.SeekBar;
|
| -import android.widget.TextView;
|
| -
|
| -import org.chromium.third_party.android.media.R;
|
| -
|
| -import java.util.Formatter;
|
| -import java.util.Locale;
|
| -
|
| -/**
|
| - * Helper for implementing media controls in an application.
|
| - * We use this custom version instead of {@link android.widget.MediaController} so that we can
|
| - * customize the look as we want. This file is taken directly from the public Android sample for
|
| - * supportv4, with tiny bug fixes.
|
| - */
|
| -public class MediaController extends FrameLayout {
|
| -
|
| - private TransportController mController;
|
| - private Context mContext;
|
| - private ViewGroup mProgressGroup;
|
| - private SeekBar mProgressBar;
|
| - private TextView mEndTime, mCurrentTime;
|
| - private boolean mDragging;
|
| - private boolean mUseFastForward;
|
| - private boolean mListenersSet;
|
| - private boolean mShowNext, mShowPrev;
|
| - private View.OnClickListener mNextListener, mPrevListener;
|
| - private StringBuilder mFormatBuilder;
|
| - private Formatter mFormatter;
|
| - private ImageButton mPauseButton;
|
| - private ImageButton mFfwdButton;
|
| - private ImageButton mRewButton;
|
| - 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;
|
| - mUseFastForward = true;
|
| - LayoutInflater inflate = (LayoutInflater)
|
| - mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
| - inflate.inflate(R.layout.media_controller, this, true);
|
| - initControllerView();
|
| - }
|
| -
|
| - public MediaController(Context context, boolean useFastForward) {
|
| - super(context);
|
| - mContext = context;
|
| - mUseFastForward = useFastForward;
|
| - }
|
| -
|
| - public MediaController(Context context) {
|
| - 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;
|
| - 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) {
|
| - mPauseButton.requestFocus();
|
| - mPauseButton.setOnClickListener(mPauseListener);
|
| - }
|
| -
|
| - mFfwdButton = (ImageButton) findViewById(R.id.ffwd);
|
| - if (mFfwdButton != null) {
|
| - mFfwdButton.setOnClickListener(mFfwdListener);
|
| - mFfwdButton.setVisibility(mUseFastForward ? View.VISIBLE : View.GONE);
|
| - }
|
| -
|
| - mRewButton = (ImageButton) findViewById(R.id.rew);
|
| - if (mRewButton != null) {
|
| - mRewButton.setOnClickListener(mRewListener);
|
| - mRewButton.setVisibility(mUseFastForward ? View.VISIBLE : View.GONE);
|
| - }
|
| -
|
| - // By default these are hidden. They will be enabled when setPrevNextListeners() is called
|
| - mNextButton = (ImageButton) findViewById(R.id.next);
|
| - if (mNextButton != null && !mListenersSet) {
|
| - mNextButton.setVisibility(View.GONE);
|
| - }
|
| - mPrevButton = (ImageButton) findViewById(R.id.prev);
|
| - if (mPrevButton != null && !mListenersSet) {
|
| - mPrevButton.setVisibility(View.GONE);
|
| - }
|
| -
|
| - mProgressGroup = (ViewGroup) findViewById(R.id.mediacontroller_progress_container);
|
| -
|
| - if (mProgressGroup != null) {
|
| - mProgressBar = (SeekBar) mProgressGroup.findViewById(R.id.mediacontroller_progress_bar);
|
| - if (mProgressBar != null) {
|
| - mProgressBar.setOnSeekBarChangeListener(mSeekListener);
|
| - mProgressBar.setMax(1000);
|
| - }
|
| - }
|
| -
|
| - mEndTime = (TextView) findViewById(R.id.time);
|
| - mCurrentTime = (TextView) findViewById(R.id.time_current);
|
| - mFormatBuilder = new StringBuilder();
|
| - mFormatter = new Formatter(mFormatBuilder, Locale.getDefault());
|
| -
|
| - installPrevNextListeners();
|
| - }
|
| -
|
| - /**
|
| - * Disable pause or seek buttons if the stream cannot be paused or seeked.
|
| - * This requires the control interface to be a MediaPlayerControlExt
|
| - */
|
| - void updateButtons() {
|
| - int flags = mController.getTransportControlFlags();
|
| - boolean enabled = isEnabled();
|
| - if (mPauseButton != null) {
|
| - boolean needPlayPauseButton = (flags & TransportMediator.FLAG_KEY_MEDIA_PAUSE) != 0 ||
|
| - (flags & TransportMediator.FLAG_KEY_MEDIA_PLAY) != 0;
|
| - mPauseButton.setEnabled(enabled && needPlayPauseButton);
|
| - }
|
| - if (mRewButton != null) {
|
| - mRewButton.setEnabled(enabled &&
|
| - (flags & TransportMediator.FLAG_KEY_MEDIA_REWIND) != 0);
|
| - }
|
| - if (mFfwdButton != null) {
|
| - mFfwdButton.setEnabled(enabled &&
|
| - (flags & TransportMediator.FLAG_KEY_MEDIA_FAST_FORWARD) != 0);
|
| - }
|
| - if (mPrevButton != null) {
|
| - mShowPrev = (flags & TransportMediator.FLAG_KEY_MEDIA_PREVIOUS) != 0
|
| - || mPrevListener != null;
|
| - mPrevButton.setEnabled(enabled && mShowPrev);
|
| - }
|
| - if (mNextButton != null) {
|
| - mShowNext = (flags & TransportMediator.FLAG_KEY_MEDIA_NEXT) != 0
|
| - || mNextListener != null;
|
| - mNextButton.setEnabled(enabled && mShowNext);
|
| - }
|
| - }
|
| -
|
| - public void refresh() {
|
| - updateProgress();
|
| - updateButtons();
|
| - updatePausePlay();
|
| - }
|
| -
|
| - private String stringForTime(int timeMs) {
|
| - int totalSeconds = timeMs / 1000;
|
| -
|
| - int seconds = totalSeconds % 60;
|
| - int minutes = (totalSeconds / 60) % 60;
|
| - int hours = totalSeconds / 3600;
|
| -
|
| - mFormatBuilder.setLength(0);
|
| - if (hours > 0) {
|
| - return mFormatter.format("%d:%02d:%02d", hours, minutes, seconds).toString();
|
| - } else {
|
| - return mFormatter.format("%02d:%02d", minutes, seconds).toString();
|
| - }
|
| - }
|
| -
|
| - public long updateProgress() {
|
| - if (mController == null || mDragging) {
|
| - return 0;
|
| - }
|
| - long position = mController.getCurrentPosition();
|
| - long duration = mController.getDuration();
|
| - if (duration <= 0) {
|
| - // If there is no valid duration, hide the progress bar and time indicators.
|
| - if (mProgressGroup != null) mProgressGroup.setVisibility(View.INVISIBLE);
|
| - } else if (mProgressBar != null) {
|
| - if (mProgressGroup != null) mProgressGroup.setVisibility(View.VISIBLE);
|
| - // use long to avoid overflow
|
| - long pos = 1000L * position / duration;
|
| - mProgressBar.setProgress( (int) pos);
|
| -
|
| - int percent = mController.getBufferPercentage();
|
| - mProgressBar.setSecondaryProgress(percent * 10);
|
| - }
|
| -
|
| - if (mEndTime != null)
|
| - mEndTime.setText(stringForTime((int)duration));
|
| - if (mCurrentTime != null)
|
| - mCurrentTime.setText(stringForTime((int)position));
|
| -
|
| - return position;
|
| - }
|
| -
|
| - private View.OnClickListener mPauseListener = new View.OnClickListener() {
|
| - @Override
|
| - public void onClick(View v) {
|
| - doPauseResume();
|
| - }
|
| - };
|
| -
|
| - private void updatePausePlay() {
|
| - if (mPauseButton == null)
|
| - return;
|
| -
|
| - if (mController.isPlaying()) {
|
| - mPauseButton.setImageResource(android.R.drawable.ic_media_pause);
|
| - } else {
|
| - mPauseButton.setImageResource(android.R.drawable.ic_media_play);
|
| - }
|
| - }
|
| -
|
| - private void doPauseResume() {
|
| - if (mController.isPlaying()) {
|
| - mController.pausePlaying();
|
| - } else {
|
| - mController.startPlaying();
|
| - }
|
| - updatePausePlay();
|
| - }
|
| -
|
| - // There are two scenarios that can trigger the seekbar listener to trigger:
|
| - //
|
| - // The first is the user using the touchpad to adjust the posititon of the
|
| - // seekbar's thumb. In this case onStartTrackingTouch is called followed by
|
| - // a number of onProgressChanged notifications, concluded by onStopTrackingTouch.
|
| - // We're setting the field "mDragging" to true for the duration of the dragging
|
| - // session to avoid jumps in the position in case of ongoing playback.
|
| - //
|
| - // The second scenario involves the user operating the scroll ball, in this
|
| - // case there WON'T BE onStartTrackingTouch/onStopTrackingTouch notifications,
|
| - // we will simply apply the updated position without suspending regular updates.
|
| - private SeekBar.OnSeekBarChangeListener mSeekListener = new SeekBar.OnSeekBarChangeListener() {
|
| - @Override
|
| - public void onStartTrackingTouch(SeekBar bar) {
|
| - mDragging = true;
|
| - }
|
| -
|
| - @Override
|
| - public void onProgressChanged(SeekBar bar, int progress, boolean fromuser) {
|
| - if (!fromuser) {
|
| - // We're not interested in programmatically generated changes to
|
| - // the progress bar's position.
|
| - return;
|
| - }
|
| -
|
| - long duration = mController.getDuration();
|
| - long newposition = (duration * progress) / 1000L;
|
| - mController.seekTo((int) newposition);
|
| - if (mCurrentTime != null)
|
| - mCurrentTime.setText(stringForTime( (int) newposition));
|
| - }
|
| -
|
| - @Override
|
| - public void onStopTrackingTouch(SeekBar bar) {
|
| - mDragging = false;
|
| - updateProgress();
|
| - updatePausePlay();
|
| - }
|
| - };
|
| -
|
| - @Override
|
| - public void setEnabled(boolean enabled) {
|
| - super.setEnabled(enabled);
|
| - updateButtons();
|
| - }
|
| -
|
| - @Override
|
| - public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
|
| - super.onInitializeAccessibilityEvent(event);
|
| - event.setClassName(MediaController.class.getName());
|
| - }
|
| -
|
| - @Override
|
| - public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
|
| - super.onInitializeAccessibilityNodeInfo(info);
|
| - info.setClassName(MediaController.class.getName());
|
| - }
|
| -
|
| - private View.OnClickListener mRewListener = new View.OnClickListener() {
|
| - @Override
|
| - public void onClick(View v) {
|
| - long pos = mController.getCurrentPosition();
|
| - pos -= 5000; // milliseconds
|
| - mController.seekTo(pos);
|
| - updateProgress();
|
| - }
|
| - };
|
| -
|
| - private View.OnClickListener mFfwdListener = new View.OnClickListener() {
|
| - @Override
|
| - public void onClick(View v) {
|
| - long pos = mController.getCurrentPosition();
|
| - pos += 15000; // milliseconds
|
| - mController.seekTo(pos);
|
| - updateProgress();
|
| - }
|
| - };
|
| -
|
| - private void installPrevNextListeners() {
|
| - if (mNextButton != null) {
|
| - mNextButton.setOnClickListener(mNextListener);
|
| - mNextButton.setEnabled(mShowNext);
|
| - }
|
| -
|
| - if (mPrevButton != null) {
|
| - mPrevButton.setOnClickListener(mPrevListener);
|
| - mPrevButton.setEnabled(mShowPrev);
|
| - }
|
| - }
|
| -
|
| - public void setPrevNextListeners(View.OnClickListener next, View.OnClickListener prev) {
|
| - mNextListener = next;
|
| - mPrevListener = prev;
|
| - mListenersSet = true;
|
| -
|
| - installPrevNextListeners();
|
| -
|
| - if (mNextButton != null) {
|
| - mNextButton.setVisibility(View.VISIBLE);
|
| - mShowNext = true;
|
| - }
|
| - if (mPrevButton != null) {
|
| - mPrevButton.setVisibility(View.VISIBLE);
|
| - mShowPrev = true;
|
| - }
|
| - }
|
| -}
|
| -
|
|
|