| Index: chrome/android/java/src/org/chromium/chrome/browser/media/remote/LockScreenTransportControlV16.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/remote/LockScreenTransportControlV16.java b/chrome/android/java/src/org/chromium/chrome/browser/media/remote/LockScreenTransportControlV16.java
|
| deleted file mode 100644
|
| index ecbbb23832320f18fc2a511ee9f4c38c7fcd43d0..0000000000000000000000000000000000000000
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/media/remote/LockScreenTransportControlV16.java
|
| +++ /dev/null
|
| @@ -1,236 +0,0 @@
|
| -// Copyright 2014 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -package org.chromium.chrome.browser.media.remote;
|
| -
|
| -import android.annotation.TargetApi;
|
| -import android.app.PendingIntent;
|
| -import android.content.ComponentName;
|
| -import android.content.Context;
|
| -import android.content.Intent;
|
| -import android.graphics.Bitmap;
|
| -import android.media.AudioManager;
|
| -import android.media.AudioManager.OnAudioFocusChangeListener;
|
| -import android.media.MediaMetadataRetriever;
|
| -import android.os.Build;
|
| -import android.support.v7.media.MediaRouter;
|
| -import android.util.Log;
|
| -
|
| -import org.chromium.base.CommandLine;
|
| -import org.chromium.chrome.browser.ChromeSwitches;
|
| -import org.chromium.chrome.browser.media.remote.RemoteVideoInfo.PlayerState;
|
| -
|
| -/**
|
| - * An implementation of {@link LockScreenTransportControl} targeting platforms with an API greater
|
| - * than 15 (Jelly Bean, the minimum API version supported by Chrome).
|
| - */
|
| -@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
|
| -//TODO(aberent) This whole class is based upon RemoteControlClient, which is deprecated in
|
| -//the Android L SDK. It, however, still seems to be the only way of controlling the
|
| -//lock screen wallpaper. We need to investigate whether there is an alternative. See
|
| -//LockScreenTransportControl.java.
|
| -@SuppressWarnings("deprecation")
|
| -class LockScreenTransportControlV16 extends LockScreenTransportControl {
|
| -
|
| - private final MediaRouter mMediaRouter;
|
| - private final AudioManager mAudioManager;
|
| - private final PendingIntent mMediaPendingIntent;
|
| - private final ComponentName mMediaEventReceiver;
|
| - private final AudioFocusListener mAudioFocusListener;
|
| - private android.media.RemoteControlClient mRemoteControlClient;
|
| - private boolean mIsPlaying;
|
| -
|
| - private boolean mDebug;
|
| - private static final String TAG = "LockScreenTransportControlV14";
|
| -
|
| - static class AudioFocusListener implements OnAudioFocusChangeListener {
|
| - @Override
|
| - public void onAudioFocusChange(int focusChange) {
|
| - // Do nothing, the listener is only used to later abandon audio focus.
|
| - }
|
| - }
|
| -
|
| - LockScreenTransportControlV16(Context context) {
|
| - mDebug = CommandLine.getInstance().hasSwitch(ChromeSwitches.ENABLE_CAST_DEBUG_LOGS);
|
| -
|
| - mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
|
| - mMediaEventReceiver = new ComponentName(context.getPackageName(),
|
| - MediaButtonIntentReceiver.class.getName());
|
| - Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
|
| - mediaButtonIntent.setComponent(mMediaEventReceiver);
|
| - mMediaPendingIntent = PendingIntent.getBroadcast(context.getApplicationContext(), 0,
|
| - mediaButtonIntent, 0);
|
| - mAudioFocusListener = new AudioFocusListener();
|
| - mMediaRouter = MediaRouter.getInstance(context);
|
| - }
|
| -
|
| - @Override
|
| - public void onErrorChanged() {
|
| - if (hasError()) updatePlaybackState(android.media.RemoteControlClient.PLAYSTATE_ERROR);
|
| - }
|
| -
|
| - @Override
|
| - public void onLockScreenPlaybackStateChanged(PlayerState oldState, PlayerState newState) {
|
| - if (mDebug) Log.d(TAG, "onLockScreenPlaybackStateChanged - new state: " + newState);
|
| - int playbackState = android.media.RemoteControlClient.PLAYSTATE_STOPPED;
|
| - boolean shouldBeRegistered = false;
|
| - if (newState != null) {
|
| - mIsPlaying = false;
|
| - shouldBeRegistered = true;
|
| - switch (newState) {
|
| - case PAUSED:
|
| - playbackState = android.media.RemoteControlClient.PLAYSTATE_PAUSED;
|
| - break;
|
| - case ERROR:
|
| - playbackState = android.media.RemoteControlClient.PLAYSTATE_ERROR;
|
| - break;
|
| - case PLAYING:
|
| - playbackState = android.media.RemoteControlClient.PLAYSTATE_PLAYING;
|
| - mIsPlaying = true;
|
| - break;
|
| - case LOADING:
|
| - playbackState = android.media.RemoteControlClient.PLAYSTATE_BUFFERING;
|
| - break;
|
| - default:
|
| - shouldBeRegistered = false;
|
| - break;
|
| - }
|
| - }
|
| -
|
| - boolean registered = (mRemoteControlClient != null);
|
| - if (registered != shouldBeRegistered) {
|
| - if (shouldBeRegistered) {
|
| - register();
|
| - onVideoInfoChanged();
|
| - onPosterBitmapChanged();
|
| - } else {
|
| - unregister();
|
| - }
|
| - }
|
| -
|
| - updatePlaybackState(playbackState);
|
| - }
|
| -
|
| - @Override
|
| - public void onVideoInfoChanged() {
|
| - if (mRemoteControlClient == null) return;
|
| -
|
| - RemoteVideoInfo videoInfo = getVideoInfo();
|
| -
|
| - String title = null;
|
| - long duration = 0;
|
| - if (videoInfo != null) {
|
| - title = videoInfo.title;
|
| - duration = videoInfo.durationMillis;
|
| - }
|
| -
|
| - android.media.RemoteControlClient.MetadataEditor editor = mRemoteControlClient.editMetadata(
|
| - true);
|
| - editor.putString(MediaMetadataRetriever.METADATA_KEY_TITLE, title);
|
| - editor.putLong(MediaMetadataRetriever.METADATA_KEY_DURATION, duration);
|
| - updateBitmap(editor);
|
| - editor.apply();
|
| - }
|
| -
|
| - @Override
|
| - public void onPosterBitmapChanged() {
|
| - if (mRemoteControlClient == null) return;
|
| -
|
| - android.media.RemoteControlClient.MetadataEditor editor = mRemoteControlClient.editMetadata(
|
| - false);
|
| - updateBitmap(editor);
|
| - editor.apply();
|
| - }
|
| -
|
| - private void updateBitmap(android.media.RemoteControlClient.MetadataEditor editor) {
|
| - // RemoteControlClient likes to recycle bitmaps that have been passed to it through
|
| - // BITMAP_KEY_ARTWORK. We can't go recycling bitmaps like this since they are also used by
|
| - // {@link ExpandedControllerActivity} and their life cycle is controller by
|
| - // {@link RemoteMediaPlayerController}. See crbug.com/356612
|
| - Bitmap src = getPosterBitmap();
|
| - Bitmap copy = src != null ? src.copy(src.getConfig(), true) : null;
|
| - editor.putBitmap(android.media.RemoteControlClient.MetadataEditor.BITMAP_KEY_ARTWORK, copy);
|
| - }
|
| -
|
| - protected final android.media.RemoteControlClient getRemoteControlClient() {
|
| - return mRemoteControlClient;
|
| - }
|
| -
|
| - protected void register() {
|
| - if (mDebug) Log.d(TAG, "register called");
|
| - mRemoteControlClient = new android.media.RemoteControlClient(mMediaPendingIntent);
|
| - mAudioManager.requestAudioFocus(mAudioFocusListener, AudioManager.USE_DEFAULT_STREAM_TYPE,
|
| - AudioManager.AUDIOFOCUS_GAIN);
|
| - mAudioManager.registerMediaButtonEventReceiver(mMediaEventReceiver);
|
| - mAudioManager.registerRemoteControlClient(mRemoteControlClient);
|
| - mRemoteControlClient.setTransportControlFlags(getTransportControlFlags());
|
| - mMediaRouter.addRemoteControlClient(getRemoteControlClient());
|
| - }
|
| -
|
| - protected void unregister() {
|
| - if (mDebug) Log.d(TAG, "unregister called");
|
| - mMediaRouter.removeRemoteControlClient(getRemoteControlClient());
|
| - mRemoteControlClient.editMetadata(true).apply();
|
| - mRemoteControlClient.setTransportControlFlags(0);
|
| - mAudioManager.abandonAudioFocus(mAudioFocusListener);
|
| - mAudioManager.unregisterMediaButtonEventReceiver(mMediaEventReceiver);
|
| - mAudioManager.unregisterRemoteControlClient(mRemoteControlClient);
|
| - mRemoteControlClient = null;
|
| - }
|
| -
|
| - protected void updatePlaybackState(int state) {
|
| - if (mRemoteControlClient != null) mRemoteControlClient.setPlaybackState(state);
|
| - }
|
| -
|
| - protected int getTransportControlFlags() {
|
| - return android.media.RemoteControlClient.FLAG_KEY_MEDIA_PLAY_PAUSE
|
| - | android.media.RemoteControlClient.FLAG_KEY_MEDIA_STOP;
|
| - }
|
| -
|
| - @Override
|
| - public void onRouteSelected(String name, MediaRouteController mediaRouteController) {
|
| - setScreenName(name);
|
| - }
|
| -
|
| - @Override
|
| - public void onRouteUnselected(MediaRouteController mediaRouteController) {
|
| - hide();
|
| - }
|
| -
|
| - @Override
|
| - public void onPrepared(MediaRouteController mediaRouteController) {
|
| - }
|
| -
|
| - @Override
|
| - public void onError(int error, String errorMessage) {
|
| - // Stop the session for all errors
|
| - hide();
|
| - }
|
| -
|
| - @Override
|
| - public void onDurationUpdated(long durationMillis) {
|
| - RemoteVideoInfo videoInfo = new RemoteVideoInfo(getVideoInfo());
|
| - videoInfo.durationMillis = durationMillis;
|
| - setVideoInfo(videoInfo);
|
| - }
|
| -
|
| - @Override
|
| - public void onPositionChanged(long positionMillis) {
|
| - RemoteVideoInfo videoInfo = new RemoteVideoInfo(getVideoInfo());
|
| - videoInfo.currentTimeMillis = positionMillis;
|
| - setVideoInfo(videoInfo);
|
| - }
|
| -
|
| - @Override
|
| - public void onTitleChanged(String title) {
|
| - RemoteVideoInfo videoInfo = new RemoteVideoInfo(getVideoInfo());
|
| - videoInfo.title = title;
|
| - setVideoInfo(videoInfo);
|
| - }
|
| -
|
| - @Override
|
| - protected boolean isPlaying() {
|
| - return mIsPlaying;
|
| - }
|
| -}
|
|
|