Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 58b388c6 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "VV2 & MCV2: Move handling MediaControlView2 visibility logic to VV2"

parents 479f0113 2d9c2163
Loading
Loading
Loading
Loading
+0 −53
Original line number Diff line number Diff line
@@ -29,7 +29,6 @@ import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.accessibility.AccessibilityManager;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.MediaControlView2;
@@ -64,8 +63,6 @@ public class MediaControlView2Impl extends BaseLayout implements MediaControlVie
    private static final int REWIND_TIME_MS = 10000;
    private static final int FORWARD_TIME_MS = 30000;

    private AccessibilityManager mAccessibilityManager;

    private MediaController mController;
    private MediaController.TransportControls mControls;
    private PlaybackState mPlaybackState;
@@ -76,7 +73,6 @@ public class MediaControlView2Impl extends BaseLayout implements MediaControlVie
    private int mDuration;
    private int mPrevState;
    private int mCurrentVisibility;
    private long mTimeout;
    private long mPlaybackActions;
    private boolean mShowing;
    private boolean mDragging;
@@ -122,14 +118,9 @@ public class MediaControlView2Impl extends BaseLayout implements MediaControlVie

    @Override
    public void initialize(@Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        mAccessibilityManager = AccessibilityManager.getInstance(mInstance.getContext());

        // Inflate MediaControlView2 from XML
        View root = makeControllerView();
        mInstance.addView(root);

        // Set default timeout
        mTimeout = 2000;
    }

    @Override
@@ -222,16 +213,6 @@ public class MediaControlView2Impl extends BaseLayout implements MediaControlVie
        }
    }

    @Override
    public void setTimeout_impl(long timeout) {
        mTimeout = timeout;
    }

    @Override
    public long getTimeout_impl() {
        return mTimeout;
    }

    @Override
    public CharSequence getAccessibilityClassName_impl() {
        return MediaControlView2.class.getName();
@@ -245,7 +226,6 @@ public class MediaControlView2Impl extends BaseLayout implements MediaControlVie
    // TODO: Should this function be removed?
    @Override
    public boolean onTrackballEvent_impl(MotionEvent ev) {
        resetFadeOutRunnable();
        return false;
    }

@@ -290,11 +270,8 @@ public class MediaControlView2Impl extends BaseLayout implements MediaControlVie
                // was already true.  This happens, for example, if we're
                // paused with the progress bar showing the user hits play.
                mInstance.post(mShowProgress);
                resetFadeOutRunnable();
            } else if (visibility == View.GONE) {
                mInstance.removeCallbacks(mShowProgress);
                // Remove existing call to mFadeOut to avoid from being called later.
                mInstance.removeCallbacks(mFadeOut);
            }
        }
    }
@@ -488,15 +465,6 @@ public class MediaControlView2Impl extends BaseLayout implements MediaControlVie
        }
    }

    private final Runnable mFadeOut = new Runnable() {
        @Override
        public void run() {
            if (isPlaying()) {
                mInstance.setVisibility(View.GONE);
            }
        }
    };

    private final Runnable mShowProgress = new Runnable() {
        @Override
        public void run() {
@@ -508,13 +476,6 @@ public class MediaControlView2Impl extends BaseLayout implements MediaControlVie
        }
    };

    private void resetFadeOutRunnable() {
        if (mTimeout != 0 && !mAccessibilityManager.isTouchExplorationEnabled()) {
            mInstance.removeCallbacks(mFadeOut);
            mInstance.postDelayed(mFadeOut, mTimeout);
        }
    }

    private String stringForTime(int timeMs) {
        int totalSeconds = timeMs / 1000;

@@ -590,7 +551,6 @@ public class MediaControlView2Impl extends BaseLayout implements MediaControlVie
            }

            mDragging = true;
            mInstance.removeCallbacks(mFadeOut);

            // By removing these pending progress messages we make sure
            // that a) we won't update the progress while the user adjusts
@@ -639,8 +599,6 @@ public class MediaControlView2Impl extends BaseLayout implements MediaControlVie

            setProgress();

            resetFadeOutRunnable();

            // Ensure that progress is properly updated in the future,
            // the call to show() does not guarantee this because it is a
            // no-op if we are already showing.
@@ -652,7 +610,6 @@ public class MediaControlView2Impl extends BaseLayout implements MediaControlVie
        @Override
        public void onClick(View v) {
            togglePausePlayState();
            resetFadeOutRunnable();
        }
    };

@@ -662,8 +619,6 @@ public class MediaControlView2Impl extends BaseLayout implements MediaControlVie
            int pos = getCurrentPosition() - REWIND_TIME_MS;
            mControls.seekTo(pos);
            setProgress();

            resetFadeOutRunnable();
        }
    };

@@ -673,8 +628,6 @@ public class MediaControlView2Impl extends BaseLayout implements MediaControlVie
            int pos = getCurrentPosition() + FORWARD_TIME_MS;
            mControls.seekTo(pos);
            setProgress();

            resetFadeOutRunnable();
        }
    };

@@ -682,7 +635,6 @@ public class MediaControlView2Impl extends BaseLayout implements MediaControlVie
        @Override
        public void onClick(View v) {
            mControls.skipToNext();
            resetFadeOutRunnable();
        }
    };

@@ -690,7 +642,6 @@ public class MediaControlView2Impl extends BaseLayout implements MediaControlVie
        @Override
        public void onClick(View v) {
            mControls.skipToPrevious();
            resetFadeOutRunnable();
        }
    };

@@ -710,7 +661,6 @@ public class MediaControlView2Impl extends BaseLayout implements MediaControlVie
                mController.sendCommand(MediaControlView2.COMMAND_HIDE_SUBTITLE, null, null);
                mSubtitleIsEnabled = false;
            }
            resetFadeOutRunnable();
        }
    };

@@ -732,7 +682,6 @@ public class MediaControlView2Impl extends BaseLayout implements MediaControlVie
            mController.sendCommand(MediaControlView2.COMMAND_SET_FULLSCREEN, args, null);

            mIsFullScreen = isEnteringFullScreen;
            resetFadeOutRunnable();
        }
    };

@@ -741,7 +690,6 @@ public class MediaControlView2Impl extends BaseLayout implements MediaControlVie
        public void onClick(View v) {
            mBasicControls.setVisibility(View.GONE);
            mExtraControls.setVisibility(View.VISIBLE);
            resetFadeOutRunnable();
        }
    };

@@ -750,7 +698,6 @@ public class MediaControlView2Impl extends BaseLayout implements MediaControlVie
        public void onClick(View v) {
            mBasicControls.setVisibility(View.VISIBLE);
            mExtraControls.setVisibility(View.GONE);
            resetFadeOutRunnable();
        }
    };

+54 −26
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.view.accessibility.AccessibilityManager;
import android.widget.MediaControlView2;
import android.widget.VideoView2;

@@ -70,6 +71,7 @@ public class VideoView2Impl extends BaseLayout
        implements VideoView2Provider, VideoViewInterface.SurfaceListener {
    private static final String TAG = "VideoView2";
    private static final boolean DEBUG = true; // STOPSHIP: Log.isLoggable(TAG, Log.DEBUG);
    private static final long DEFAULT_SHOW_CONTROLLER_INTERVAL_MS = 2000;

    private final VideoView2 mInstance;

@@ -83,6 +85,7 @@ public class VideoView2Impl extends BaseLayout

    private static final int INVALID_TRACK_INDEX = -1;

    private AccessibilityManager mAccessibilityManager;
    private AudioManager mAudioManager;
    private AudioAttributes mAudioAttributes;
    private int mAudioFocusType = AudioManager.AUDIOFOCUS_GAIN; // legacy focus gain
@@ -119,15 +122,17 @@ public class VideoView2Impl extends BaseLayout
    private int mVideoWidth;
    private int mVideoHeight;

    private SubtitleView mSubtitleView;
    private boolean mSubtitleEnabled;
    private int mSelectedTrackIndex;
    private int mSelectedTrackIndex;  // selected subtitle track index as MediaPlayer2 returns

    private SubtitleView mSubtitleView;
    private float mSpeed;
    // TODO: Remove mFallbackSpeed when integration with MediaPlayer2's new setPlaybackParams().
    // Refer: https://docs.google.com/document/d/1nzAfns6i2hJ3RkaUre3QMT6wsDedJ5ONLiA_OOBFFX8/edit
    private float mFallbackSpeed;  // keep the original speed before 'pause' is called.

    private long mShowControllerIntervalMs;

    public VideoView2Impl(VideoView2 instance,
            ViewGroupProvider superProvider, ViewGroupProvider privateProvider) {
        super(instance, superProvider, privateProvider);
@@ -141,6 +146,10 @@ public class VideoView2Impl extends BaseLayout
        mSpeed = 1.0f;
        mFallbackSpeed = mSpeed;
        mSelectedTrackIndex = INVALID_TRACK_INDEX;
        // TODO: add attributes to get this value.
        mShowControllerIntervalMs = DEFAULT_SHOW_CONTROLLER_INTERVAL_MS;

        mAccessibilityManager = AccessibilityManager.getInstance(mInstance.getContext());

        mAudioManager = (AudioManager) mInstance.getContext()
                .getSystemService(Context.AUDIO_SERVICE);
@@ -203,8 +212,9 @@ public class VideoView2Impl extends BaseLayout
    }

    @Override
    public void setMediaControlView2_impl(MediaControlView2 mediaControlView) {
    public void setMediaControlView2_impl(MediaControlView2 mediaControlView, long intervalMs) {
        mMediaControlView = mediaControlView;
        mShowControllerIntervalMs = intervalMs;
        if (mRouteSelector != null) {
            ((MediaControlView2Impl) mMediaControlView.getProvider())
                    .setRouteSelector(mRouteSelector);
@@ -439,8 +449,7 @@ public class VideoView2Impl extends BaseLayout
            Log.d(TAG, "onTouchEvent(). mCurrentState=" + mCurrentState
                    + ", mTargetState=" + mTargetState);
        }
        if (ev.getAction() == MotionEvent.ACTION_UP
                && isInPlaybackState() && mMediaControlView != null) {
        if (ev.getAction() == MotionEvent.ACTION_UP && mMediaControlView != null) {
            toggleMediaControlViewVisibility();
        }

@@ -449,14 +458,19 @@ public class VideoView2Impl extends BaseLayout

    @Override
    public boolean onTrackballEvent_impl(MotionEvent ev) {
        if (ev.getAction() == MotionEvent.ACTION_UP
                && isInPlaybackState() && mMediaControlView != null) {
        if (ev.getAction() == MotionEvent.ACTION_UP && mMediaControlView != null) {
            toggleMediaControlViewVisibility();
        }

        return super.onTrackballEvent_impl(ev);
    }

    @Override
    public boolean dispatchTouchEvent_impl(MotionEvent ev) {
        // TODO: Test touch event handling logic thoroughly and simplify the logic.
        return super.dispatchTouchEvent_impl(ev);
    }

    ///////////////////////////////////////////////////
    // Implements VideoViewInterface.SurfaceListener
    ///////////////////////////////////////////////////
@@ -479,9 +493,6 @@ public class VideoView2Impl extends BaseLayout
            Log.d(TAG, "onSurfaceDestroyed(). mCurrentState=" + mCurrentState
                    + ", mTargetState=" + mTargetState + ", " + view.toString());
        }
        if (mMediaControlView != null) {
            mMediaControlView.setVisibility(View.GONE);
        }
    }

    @Override
@@ -704,11 +715,34 @@ public class VideoView2Impl extends BaseLayout
        }
    }

    private final Runnable mFadeOut = new Runnable() {
        @Override
        public void run() {
            if (mCurrentState == STATE_PLAYING) {
                mMediaControlView.setVisibility(View.GONE);
            }
        }
    };

    private void showController() {
        // TODO: Decide what to show when the state is not in playback state
        if (mMediaControlView == null || !isInPlaybackState()) {
            return;
        }
        mMediaControlView.removeCallbacks(mFadeOut);
        mMediaControlView.setVisibility(View.VISIBLE);
        if (mShowControllerIntervalMs != 0
            && !mAccessibilityManager.isTouchExplorationEnabled()) {
            mMediaControlView.postDelayed(mFadeOut, mShowControllerIntervalMs);
        }
    }

    private void toggleMediaControlViewVisibility() {
        if (mMediaControlView.getVisibility() == View.VISIBLE) {
            mMediaControlView.removeCallbacks(mFadeOut);
            mMediaControlView.setVisibility(View.GONE);
        } else {
            mMediaControlView.setVisibility(View.VISIBLE);
            showController();
        }
    }

@@ -769,6 +803,9 @@ public class VideoView2Impl extends BaseLayout
                        + ", mTargetState=" + mTargetState);
            }
            mCurrentState = STATE_PREPARED;
            // Create and set playback state for MediaControlView2
            updatePlaybackState();

            if (mOnPreparedListener != null) {
                mOnPreparedListener.onPrepared(mInstance);
            }
@@ -802,19 +839,6 @@ public class VideoView2Impl extends BaseLayout

                if (needToStart()) {
                    mMediaController.getTransportControls().play();
                    if (mMediaControlView != null) {
                        mMediaControlView.setVisibility(View.VISIBLE);
                    }
                } else if (!(isInPlaybackState() && mMediaPlayer.isPlaying())
                        && (seekToPosition != 0 || mMediaPlayer.getCurrentPosition() > 0)) {
                    if (mMediaControlView != null) {
                        // Show the media controls when we're paused into a video and
                        // make them stick.
                        long currTimeout = mMediaControlView.getTimeout();
                        mMediaControlView.setTimeout(0L);
                        mMediaControlView.setVisibility(View.VISIBLE);
                        mMediaControlView.setTimeout(currTimeout);
                    }
                }
            } else {
                // We don't know the video size yet, but should start anyway.
@@ -823,8 +847,6 @@ public class VideoView2Impl extends BaseLayout
                    mMediaController.getTransportControls().play();
                }
            }
            // Create and set playback state for MediaControlView2
            updatePlaybackState();

            // Get and set duration and title values as MediaMetadata for MediaControlView2
            MediaMetadata.Builder builder = new MediaMetadata.Builder();
@@ -954,11 +976,13 @@ public class VideoView2Impl extends BaseLayout
                        break;
                }
            }
            showController();
        }

        @Override
        public void onCustomAction(String action, Bundle extras) {
            mOnCustomActionListener.onCustomAction(action, extras);
            showController();
        }

        @Override
@@ -978,6 +1002,7 @@ public class VideoView2Impl extends BaseLayout
                            + ", mTargetState=" + mTargetState);
                }
            }
            showController();
        }

        @Override
@@ -998,6 +1023,7 @@ public class VideoView2Impl extends BaseLayout
                            + ", mTargetState=" + mTargetState);
                }
            }
            showController();
        }

        @Override
@@ -1013,6 +1039,7 @@ public class VideoView2Impl extends BaseLayout
                    mSeekWhenPrepared = pos;
                }
            }
            showController();
        }

        @Override
@@ -1022,6 +1049,7 @@ public class VideoView2Impl extends BaseLayout
            } else {
                resetPlayer();
            }
            showController();
        }
    }

+5 −0
Original line number Diff line number Diff line
@@ -95,6 +95,11 @@ public abstract class ViewGroupImpl implements ViewGroupProvider {
        mSuperProvider.setMeasuredDimension_impl(measuredWidth, measuredHeight);
    }

    @Override
    public boolean dispatchTouchEvent_impl(MotionEvent ev) {
        return mSuperProvider.dispatchTouchEvent_impl(ev);
    }

    @Override
    public boolean checkLayoutParams_impl(ViewGroup.LayoutParams p) {
        return mSuperProvider.checkLayoutParams_impl(p);