Changes for review
This commit is contained in:
parent
398cbe9284
commit
a7fbe05a73
22 changed files with 182 additions and 350 deletions
|
|
@ -337,7 +337,7 @@ public final class BackgroundPlayer extends Service {
|
|||
@Override
|
||||
public void onPrepared(boolean playWhenReady) {
|
||||
super.onPrepared(playWhenReady);
|
||||
simpleExoPlayer.setVolume(1f);
|
||||
simpleExoPlayer.setVolume(1.0f);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -158,7 +158,7 @@ public abstract class BasePlayer implements
|
|||
// Playback
|
||||
//////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
protected static final float[] PLAYBACK_SPEEDS = {0.5f, 0.75f, 1f, 1.25f, 1.5f, 1.75f, 2f};
|
||||
protected static final float[] PLAYBACK_SPEEDS = {0.5f, 0.75f, 1.0f, 1.25f, 1.5f, 1.75f, 2.0f};
|
||||
|
||||
protected PlayQueue playQueue;
|
||||
protected PlayQueueAdapter playQueueAdapter;
|
||||
|
|
@ -227,7 +227,7 @@ public abstract class BasePlayer implements
|
|||
|
||||
public void setup() {
|
||||
if (simpleExoPlayer == null) {
|
||||
initPlayer(/*playOnInit=*/true);
|
||||
initPlayer(true);
|
||||
}
|
||||
initListeners();
|
||||
}
|
||||
|
|
@ -274,7 +274,7 @@ public abstract class BasePlayer implements
|
|||
return;
|
||||
}
|
||||
|
||||
boolean same = playQueue != null && playQueue.equals(queue);
|
||||
boolean samePlayQueue = playQueue != null && playQueue.equals(queue);
|
||||
|
||||
final int repeatMode = intent.getIntExtra(REPEAT_MODE, getRepeatMode());
|
||||
final float playbackSpeed = intent.getFloatExtra(PLAYBACK_SPEED, getPlaybackSpeed());
|
||||
|
|
@ -282,6 +282,14 @@ public abstract class BasePlayer implements
|
|||
final boolean playbackSkipSilence = intent.getBooleanExtra(PLAYBACK_SKIP_SILENCE,
|
||||
getPlaybackSkipSilence());
|
||||
|
||||
/*
|
||||
* There are 3 situations when playback shouldn't be started from scratch (zero timestamp):
|
||||
* 1. User pressed on a timestamp link and the same video should be rewound to that timestamp
|
||||
* 2. User changed a player from, for example. main to popup, or from audio to main, etc
|
||||
* 3. User chose to resume a video based on a saved timestamp from history of played videos
|
||||
* In those cases time will be saved because re-init of the play queue is a not an instant task
|
||||
* and requires network calls
|
||||
* */
|
||||
// seek to timestamp if stream is already playing
|
||||
if (simpleExoPlayer != null
|
||||
&& queue.size() == 1
|
||||
|
|
@ -289,21 +297,20 @@ public abstract class BasePlayer implements
|
|||
&& playQueue.size() == 1
|
||||
&& playQueue.getItem() != null
|
||||
&& queue.getItem().getUrl().equals(playQueue.getItem().getUrl())
|
||||
&& queue.getItem().getRecoveryPosition() != PlayQueueItem.RECOVERY_UNSET
|
||||
&& simpleExoPlayer.getPlaybackState() != Player.STATE_IDLE) {
|
||||
&& queue.getItem().getRecoveryPosition() != PlayQueueItem.RECOVERY_UNSET) {
|
||||
// Player can have state = IDLE when playback is stopped or failed and we should retry() in this case
|
||||
if (simpleExoPlayer.getPlaybackState() == Player.STATE_IDLE) simpleExoPlayer.retry();
|
||||
simpleExoPlayer.seekTo(playQueue.getIndex(), queue.getItem().getRecoveryPosition());
|
||||
return;
|
||||
|
||||
} else if (same && !playQueue.isDisposed() && simpleExoPlayer != null) {
|
||||
} else if (samePlayQueue && !playQueue.isDisposed() && simpleExoPlayer != null) {
|
||||
// Do not re-init the same PlayQueue. Save time
|
||||
// Player can have state = IDLE when playback is stopped or failed and we should retry() in this case
|
||||
if (simpleExoPlayer.getPlaybackState() == Player.STATE_IDLE) simpleExoPlayer.retry();
|
||||
return;
|
||||
} else if (intent.getBooleanExtra(RESUME_PLAYBACK, false)
|
||||
&& isPlaybackResumeEnabled()
|
||||
&& !same) {
|
||||
&& !samePlayQueue) {
|
||||
final PlayQueueItem item = queue.getItem();
|
||||
if (item != null && item.getRecoveryPosition() == PlayQueueItem.RECOVERY_UNSET) {
|
||||
stateLoader = recordManager.loadStreamState(item)
|
||||
|
|
@ -313,19 +320,16 @@ public abstract class BasePlayer implements
|
|||
.subscribe(
|
||||
state -> {
|
||||
queue.setRecovery(queue.getIndex(), state.getProgressTime());
|
||||
initPlayback(queue, repeatMode, playbackSpeed, playbackPitch, playbackSkipSilence,
|
||||
/*playOnInit=*/true);
|
||||
initPlayback(queue, repeatMode, playbackSpeed, playbackPitch, playbackSkipSilence, true);
|
||||
},
|
||||
error -> {
|
||||
if (DEBUG) error.printStackTrace();
|
||||
// In case any error we can start playback without history
|
||||
initPlayback(queue, repeatMode, playbackSpeed, playbackPitch, playbackSkipSilence,
|
||||
/*playOnInit=*/true);
|
||||
initPlayback(queue, repeatMode, playbackSpeed, playbackPitch, playbackSkipSilence, true);
|
||||
},
|
||||
() -> {
|
||||
// Completed but not found in history
|
||||
initPlayback(queue, repeatMode, playbackSpeed, playbackPitch, playbackSkipSilence,
|
||||
/*playOnInit=*/true);
|
||||
initPlayback(queue, repeatMode, playbackSpeed, playbackPitch, playbackSkipSilence, true);
|
||||
}
|
||||
);
|
||||
databaseUpdateReactor.add(stateLoader);
|
||||
|
|
@ -334,8 +338,7 @@ public abstract class BasePlayer implements
|
|||
}
|
||||
// Good to go...
|
||||
// In a case of equal PlayQueues we can re-init old one but only when it is disposed
|
||||
initPlayback(same ? playQueue : queue, repeatMode, playbackSpeed, playbackPitch, playbackSkipSilence,
|
||||
/*playOnInit=*/true);
|
||||
initPlayback(samePlayQueue ? playQueue : queue, repeatMode, playbackSpeed, playbackPitch, playbackSkipSilence, true);
|
||||
}
|
||||
|
||||
protected void initPlayback(@NonNull final PlayQueue queue,
|
||||
|
|
|
|||
|
|
@ -184,8 +184,6 @@ public final class MainPlayer extends Service {
|
|||
playerImpl.destroy();
|
||||
}
|
||||
if (notificationManager != null) notificationManager.cancel(NOTIFICATION_ID);
|
||||
playerImpl = null;
|
||||
lockManager = null;
|
||||
|
||||
stopForeground(true);
|
||||
stopSelf();
|
||||
|
|
@ -197,7 +195,7 @@ public final class MainPlayer extends Service {
|
|||
|
||||
boolean isLandscape() {
|
||||
// DisplayMetrics from activity context knows about MultiWindow feature while DisplayMetrics from app context doesn't
|
||||
final DisplayMetrics metrics = playerImpl != null && playerImpl.getParentActivity() != null ?
|
||||
final DisplayMetrics metrics = (playerImpl != null && playerImpl.getParentActivity() != null) ?
|
||||
playerImpl.getParentActivity().getResources().getDisplayMetrics()
|
||||
: getResources().getDisplayMetrics();
|
||||
return metrics.heightPixels < metrics.widthPixels;
|
||||
|
|
|
|||
|
|
@ -797,9 +797,9 @@ public abstract class VideoPlayer extends BasePlayer
|
|||
if (drawableId == -1) {
|
||||
if (controlAnimationView.getVisibility() == View.VISIBLE) {
|
||||
controlViewAnimator = ObjectAnimator.ofPropertyValuesHolder(controlAnimationView,
|
||||
PropertyValuesHolder.ofFloat(View.ALPHA, 1f, 0f),
|
||||
PropertyValuesHolder.ofFloat(View.SCALE_X, 1.4f, 1f),
|
||||
PropertyValuesHolder.ofFloat(View.SCALE_Y, 1.4f, 1f)
|
||||
PropertyValuesHolder.ofFloat(View.ALPHA, 1.0f, 0.0f),
|
||||
PropertyValuesHolder.ofFloat(View.SCALE_X, 1.4f, 1.0f),
|
||||
PropertyValuesHolder.ofFloat(View.SCALE_Y, 1.4f, 1.0f)
|
||||
).setDuration(DEFAULT_CONTROLS_DURATION);
|
||||
controlViewAnimator.addListener(new AnimatorListenerAdapter() {
|
||||
@Override
|
||||
|
|
@ -812,8 +812,8 @@ public abstract class VideoPlayer extends BasePlayer
|
|||
return;
|
||||
}
|
||||
|
||||
float scaleFrom = goneOnEnd ? 1f : 1f, scaleTo = goneOnEnd ? 1.8f : 1.4f;
|
||||
float alphaFrom = goneOnEnd ? 1f : 0f, alphaTo = goneOnEnd ? 0f : 1f;
|
||||
float scaleFrom = goneOnEnd ? 1.0f : 1.0f, scaleTo = goneOnEnd ? 1.8f : 1.4f;
|
||||
float alphaFrom = goneOnEnd ? 1.0f : 0.0f, alphaTo = goneOnEnd ? 0.0f : 1.0f;
|
||||
|
||||
|
||||
controlViewAnimator = ObjectAnimator.ofPropertyValuesHolder(controlAnimationView,
|
||||
|
|
|
|||
|
|
@ -270,14 +270,14 @@ public class VideoPlayerImpl extends VideoPlayer
|
|||
final float captionScale,
|
||||
@NonNull final CaptionStyleCompat captionStyle) {
|
||||
if (popupPlayerSelected()) {
|
||||
float captionRatio = (captionScale - 1f) / 5f + 1f;
|
||||
float captionRatio = (captionScale - 1.0f) / 5.0f + 1.0f;
|
||||
view.setFractionalTextSize(SubtitleView.DEFAULT_TEXT_SIZE_FRACTION * captionRatio);
|
||||
view.setApplyEmbeddedStyles(captionStyle.equals(CaptionStyleCompat.DEFAULT));
|
||||
view.setStyle(captionStyle);
|
||||
} else {
|
||||
final DisplayMetrics metrics = context.getResources().getDisplayMetrics();
|
||||
final int minimumLength = Math.min(metrics.heightPixels, metrics.widthPixels);
|
||||
final float captionRatioInverse = 20f + 4f * (1f - captionScale);
|
||||
final float captionRatioInverse = 20f + 4f * (1.0f - captionScale);
|
||||
view.setFixedTextSize(TypedValue.COMPLEX_UNIT_PX,
|
||||
(float) minimumLength / captionRatioInverse);
|
||||
view.setApplyEmbeddedStyles(captionStyle.equals(CaptionStyleCompat.DEFAULT));
|
||||
|
|
@ -300,7 +300,7 @@ public class VideoPlayerImpl extends VideoPlayer
|
|||
moreOptionsButton.setVisibility(View.GONE);
|
||||
getTopControlsRoot().setOrientation(LinearLayout.HORIZONTAL);
|
||||
primaryControls.getLayoutParams().width = LinearLayout.LayoutParams.WRAP_CONTENT;
|
||||
secondaryControls.setAlpha(1f);
|
||||
secondaryControls.setAlpha(1.0f);
|
||||
secondaryControls.setVisibility(View.VISIBLE);
|
||||
secondaryControls.setTranslationY(0);
|
||||
shareButton.setVisibility(View.GONE);
|
||||
|
|
@ -333,7 +333,7 @@ public class VideoPlayerImpl extends VideoPlayer
|
|||
getTopControlsRoot().setClickable(true);
|
||||
getTopControlsRoot().setFocusable(true);
|
||||
}
|
||||
if (!isInFullscreen()) {
|
||||
if (!isFullscreen()) {
|
||||
titleTextView.setVisibility(View.GONE);
|
||||
channelTextView.setVisibility(View.GONE);
|
||||
} else {
|
||||
|
|
@ -602,10 +602,10 @@ public class VideoPlayerImpl extends VideoPlayer
|
|||
|
||||
isFullscreen = !isFullscreen;
|
||||
setControlsSize();
|
||||
fragmentListener.onFullscreenStateChanged(isInFullscreen());
|
||||
fragmentListener.onFullscreenStateChanged(isFullscreen());
|
||||
}
|
||||
|
||||
if (!isInFullscreen()) {
|
||||
if (!isFullscreen()) {
|
||||
titleTextView.setVisibility(View.GONE);
|
||||
channelTextView.setVisibility(View.GONE);
|
||||
playerCloseButton.setVisibility(videoPlayerSelected() ? View.VISIBLE : View.GONE);
|
||||
|
|
@ -674,7 +674,7 @@ public class VideoPlayerImpl extends VideoPlayer
|
|||
|
||||
@Override
|
||||
public boolean onLongClick(View v) {
|
||||
if (v.getId() == moreOptionsButton.getId() && isInFullscreen()) {
|
||||
if (v.getId() == moreOptionsButton.getId() && isFullscreen()) {
|
||||
fragmentListener.onMoreOptionsLongClicked();
|
||||
hideControls(0, 0);
|
||||
hideSystemUIIfNeeded();
|
||||
|
|
@ -690,7 +690,7 @@ public class VideoPlayerImpl extends VideoPlayer
|
|||
updatePlaybackButtons();
|
||||
|
||||
getControlsRoot().setVisibility(View.INVISIBLE);
|
||||
animateView(queueLayout, SLIDE_AND_ALPHA, /*visible=*/true,
|
||||
animateView(queueLayout, SLIDE_AND_ALPHA,true,
|
||||
DEFAULT_CONTROLS_DURATION);
|
||||
|
||||
itemsList.scrollToPosition(playQueue.getIndex());
|
||||
|
|
@ -699,7 +699,7 @@ public class VideoPlayerImpl extends VideoPlayer
|
|||
public void onQueueClosed() {
|
||||
if (!queueVisible) return;
|
||||
|
||||
animateView(queueLayout, SLIDE_AND_ALPHA, /*visible=*/false,
|
||||
animateView(queueLayout, SLIDE_AND_ALPHA,false,
|
||||
DEFAULT_CONTROLS_DURATION, 0, () -> {
|
||||
// Even when queueLayout is GONE it receives touch events and ruins normal behavior of the app. This line fixes it
|
||||
queueLayout.setTranslationY(-queueLayout.getHeight() * 5);
|
||||
|
|
@ -765,12 +765,12 @@ public class VideoPlayerImpl extends VideoPlayer
|
|||
boolean showButton = videoPlayerSelected() && (orientationLocked || isVerticalVideo || tabletInLandscape);
|
||||
screenRotationButton.setVisibility(showButton ? View.VISIBLE : View.GONE);
|
||||
screenRotationButton.setImageDrawable(service.getResources().getDrawable(
|
||||
isInFullscreen() ? R.drawable.ic_fullscreen_exit_white : R.drawable.ic_fullscreen_white));
|
||||
isFullscreen() ? R.drawable.ic_fullscreen_exit_white : R.drawable.ic_fullscreen_white));
|
||||
}
|
||||
|
||||
private void prepareOrientation() {
|
||||
boolean orientationLocked = PlayerHelper.globalScreenOrientationLocked(service);
|
||||
if (orientationLocked && isInFullscreen() && service.isLandscape() == isVerticalVideo && fragmentListener != null)
|
||||
if (orientationLocked && isFullscreen() && service.isLandscape() == isVerticalVideo && fragmentListener != null)
|
||||
fragmentListener.onScreenRotationButtonClicked();
|
||||
}
|
||||
|
||||
|
|
@ -893,7 +893,7 @@ public class VideoPlayerImpl extends VideoPlayer
|
|||
@Override
|
||||
public void onBlocked() {
|
||||
super.onBlocked();
|
||||
playPauseButton.setImageResource(R.drawable.ic_pause_white);
|
||||
playPauseButton.setImageResource(R.drawable.ic_play_arrow_white);
|
||||
animatePlayButtons(false, 100);
|
||||
getRootView().setKeepScreenOn(false);
|
||||
|
||||
|
|
@ -1185,7 +1185,7 @@ public class VideoPlayerImpl extends VideoPlayer
|
|||
return distanceFromCloseButton(popupMotionEvent) <= getClosingRadius();
|
||||
}
|
||||
|
||||
public boolean isInFullscreen() {
|
||||
public boolean isFullscreen() {
|
||||
return isFullscreen;
|
||||
}
|
||||
|
||||
|
|
@ -1216,8 +1216,7 @@ public class VideoPlayerImpl extends VideoPlayer
|
|||
getControlsVisibilityHandler().removeCallbacksAndMessages(null);
|
||||
getControlsVisibilityHandler().postDelayed(() ->
|
||||
animateView(getControlsRoot(), false, duration, 0,
|
||||
this::hideSystemUIIfNeeded),
|
||||
/*delayMillis=*/delay
|
||||
this::hideSystemUIIfNeeded), delay
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -1225,24 +1224,13 @@ public class VideoPlayerImpl extends VideoPlayer
|
|||
if (playQueue == null)
|
||||
return;
|
||||
|
||||
if (playQueue.getIndex() == 0)
|
||||
playPreviousButton.setVisibility(View.INVISIBLE);
|
||||
else
|
||||
playPreviousButton.setVisibility(View.VISIBLE);
|
||||
|
||||
if (playQueue.getIndex() + 1 == playQueue.getStreams().size())
|
||||
playNextButton.setVisibility(View.INVISIBLE);
|
||||
else
|
||||
playNextButton.setVisibility(View.VISIBLE);
|
||||
|
||||
if (playQueue.getStreams().size() <= 1 || popupPlayerSelected())
|
||||
queueButton.setVisibility(View.GONE);
|
||||
else
|
||||
queueButton.setVisibility(View.VISIBLE);
|
||||
playPreviousButton.setVisibility(playQueue.getIndex() == 0 ? View.INVISIBLE : View.VISIBLE);
|
||||
playNextButton.setVisibility(playQueue.getIndex() + 1 == playQueue.getStreams().size() ? View.INVISIBLE : View.VISIBLE);
|
||||
queueButton.setVisibility(playQueue.getStreams().size() <= 1 || popupPlayerSelected() ? View.GONE : View.VISIBLE);
|
||||
}
|
||||
|
||||
private void showSystemUIPartially() {
|
||||
if (isInFullscreen() && getParentActivity() != null) {
|
||||
if (isFullscreen() && getParentActivity() != null) {
|
||||
int visibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
|
||||
getParentActivity().getWindow().getDecorView().setSystemUiVisibility(visibility);
|
||||
}
|
||||
|
|
@ -1330,7 +1318,7 @@ public class VideoPlayerImpl extends VideoPlayer
|
|||
|
||||
public void checkLandscape() {
|
||||
AppCompatActivity parent = getParentActivity();
|
||||
boolean videoInLandscapeButNotInFullscreen = service.isLandscape() && !isInFullscreen() && videoPlayerSelected() && !audioOnly;
|
||||
boolean videoInLandscapeButNotInFullscreen = service.isLandscape() && !isFullscreen() && videoPlayerSelected() && !audioOnly;
|
||||
boolean playingState = getCurrentState() != STATE_COMPLETED && getCurrentState() != STATE_PAUSED;
|
||||
if (parent != null && videoInLandscapeButNotInFullscreen && playingState && !PlayerHelper.isTablet(service))
|
||||
toggleFullscreen();
|
||||
|
|
@ -1421,7 +1409,7 @@ public class VideoPlayerImpl extends VideoPlayer
|
|||
if (DEBUG) Log.d(TAG, "initPopup() called");
|
||||
|
||||
// Popup is already added to windowManager
|
||||
if (isPopupHasParent()) return;
|
||||
if (popupHasParent()) return;
|
||||
|
||||
updateScreenSize();
|
||||
|
||||
|
|
@ -1430,13 +1418,10 @@ public class VideoPlayerImpl extends VideoPlayer
|
|||
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(service);
|
||||
popupWidth = popupRememberSizeAndPos ? sharedPreferences.getFloat(POPUP_SAVED_WIDTH, defaultSize) : defaultSize;
|
||||
popupHeight = getMinimumVideoHeight(popupWidth);
|
||||
final int layoutParamType = Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.O ?
|
||||
WindowManager.LayoutParams.TYPE_PHONE :
|
||||
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
|
||||
|
||||
popupLayoutParams = new WindowManager.LayoutParams(
|
||||
(int) popupWidth, (int) popupHeight,
|
||||
layoutParamType,
|
||||
popupLayoutParamType(),
|
||||
IDLE_WINDOW_FLAGS,
|
||||
PixelFormat.TRANSLUCENT);
|
||||
popupLayoutParams.gravity = Gravity.LEFT | Gravity.TOP;
|
||||
|
|
@ -1470,15 +1455,12 @@ public class VideoPlayerImpl extends VideoPlayer
|
|||
closeOverlayView = View.inflate(service, R.layout.player_popup_close_overlay, null);
|
||||
closeOverlayButton = closeOverlayView.findViewById(R.id.closeButton);
|
||||
|
||||
final int layoutParamType = Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.O ?
|
||||
WindowManager.LayoutParams.TYPE_PHONE :
|
||||
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
|
||||
final int flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
|
||||
| WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
|
||||
|
||||
WindowManager.LayoutParams closeOverlayLayoutParams = new WindowManager.LayoutParams(
|
||||
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT,
|
||||
layoutParamType,
|
||||
popupLayoutParamType(),
|
||||
flags,
|
||||
PixelFormat.TRANSLUCENT);
|
||||
closeOverlayLayoutParams.gravity = Gravity.LEFT | Gravity.TOP;
|
||||
|
|
@ -1600,6 +1582,12 @@ public class VideoPlayerImpl extends VideoPlayer
|
|||
windowManager.updateViewLayout(getRootView(), popupLayoutParams);
|
||||
}
|
||||
|
||||
private int popupLayoutParamType() {
|
||||
return Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.O ?
|
||||
WindowManager.LayoutParams.TYPE_PHONE :
|
||||
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
|
||||
}
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
// Misc
|
||||
//////////////////////////////////////////////////////////////////////////*/
|
||||
|
|
@ -1617,7 +1605,7 @@ public class VideoPlayerImpl extends VideoPlayer
|
|||
|
||||
public void removePopupFromView() {
|
||||
boolean isCloseOverlayHasParent = closeOverlayView != null && closeOverlayView.getParent() != null;
|
||||
if (isPopupHasParent())
|
||||
if (popupHasParent())
|
||||
windowManager.removeView(getRootView());
|
||||
if (isCloseOverlayHasParent)
|
||||
windowManager.removeView(closeOverlayView);
|
||||
|
|
@ -1651,7 +1639,7 @@ public class VideoPlayerImpl extends VideoPlayer
|
|||
}).start();
|
||||
}
|
||||
|
||||
private boolean isPopupHasParent() {
|
||||
private boolean popupHasParent() {
|
||||
View root = getRootView();
|
||||
return root != null && root.getLayoutParams() instanceof WindowManager.LayoutParams && root.getParent() != null;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -160,10 +160,7 @@ public class PlayerGestureListener extends GestureDetector.SimpleOnGestureListen
|
|||
|
||||
isMovingInMain = true;
|
||||
|
||||
boolean acceptVolumeArea = initialEvent.getX() > playerImpl.getRootView().getWidth() / 2.0;
|
||||
boolean acceptBrightnessArea = initialEvent.getX() <= playerImpl.getRootView().getWidth() / 2.0;
|
||||
|
||||
if (isVolumeGestureEnabled && acceptVolumeArea) {
|
||||
if (isVolumeGestureEnabled && initialEvent.getX() > playerImpl.getRootView().getWidth() / 2.0) {
|
||||
playerImpl.getVolumeProgressBar().incrementProgressBy((int) distanceY);
|
||||
float currentProgressPercent =
|
||||
(float) playerImpl.getVolumeProgressBar().getProgress() / playerImpl.getMaxGestureLength();
|
||||
|
|
@ -172,14 +169,11 @@ public class PlayerGestureListener extends GestureDetector.SimpleOnGestureListen
|
|||
|
||||
if (DEBUG) Log.d(TAG, "onScroll().volumeControl, currentVolume = " + currentVolume);
|
||||
|
||||
final int resId =
|
||||
currentProgressPercent <= 0 ? R.drawable.ic_volume_off_white_72dp
|
||||
playerImpl.getVolumeImageView().setImageDrawable(
|
||||
AppCompatResources.getDrawable(service, currentProgressPercent <= 0 ? R.drawable.ic_volume_off_white_72dp
|
||||
: currentProgressPercent < 0.25 ? R.drawable.ic_volume_mute_white_72dp
|
||||
: currentProgressPercent < 0.75 ? R.drawable.ic_volume_down_white_72dp
|
||||
: R.drawable.ic_volume_up_white_72dp;
|
||||
|
||||
playerImpl.getVolumeImageView().setImageDrawable(
|
||||
AppCompatResources.getDrawable(service, resId)
|
||||
: R.drawable.ic_volume_up_white_72dp)
|
||||
);
|
||||
|
||||
if (playerImpl.getVolumeRelativeLayout().getVisibility() != View.VISIBLE) {
|
||||
|
|
@ -188,7 +182,7 @@ public class PlayerGestureListener extends GestureDetector.SimpleOnGestureListen
|
|||
if (playerImpl.getBrightnessRelativeLayout().getVisibility() == View.VISIBLE) {
|
||||
playerImpl.getBrightnessRelativeLayout().setVisibility(View.GONE);
|
||||
}
|
||||
} else if (isBrightnessGestureEnabled && acceptBrightnessArea) {
|
||||
} else if (isBrightnessGestureEnabled && initialEvent.getX() <= playerImpl.getRootView().getWidth() / 2.0) {
|
||||
Activity parent = playerImpl.getParentActivity();
|
||||
if (parent == null) return true;
|
||||
|
||||
|
|
@ -203,13 +197,11 @@ public class PlayerGestureListener extends GestureDetector.SimpleOnGestureListen
|
|||
|
||||
if (DEBUG) Log.d(TAG, "onScroll().brightnessControl, currentBrightness = " + currentProgressPercent);
|
||||
|
||||
final int resId =
|
||||
currentProgressPercent < 0.25 ? R.drawable.ic_brightness_low_white_72dp
|
||||
: currentProgressPercent < 0.75 ? R.drawable.ic_brightness_medium_white_72dp
|
||||
: R.drawable.ic_brightness_high_white_72dp;
|
||||
|
||||
playerImpl.getBrightnessImageView().setImageDrawable(
|
||||
AppCompatResources.getDrawable(service, resId)
|
||||
AppCompatResources.getDrawable(service,
|
||||
currentProgressPercent < 0.25 ? R.drawable.ic_brightness_low_white_72dp
|
||||
: currentProgressPercent < 0.75 ? R.drawable.ic_brightness_medium_white_72dp
|
||||
: R.drawable.ic_brightness_high_white_72dp)
|
||||
);
|
||||
|
||||
if (playerImpl.getBrightnessRelativeLayout().getVisibility() != View.VISIBLE) {
|
||||
|
|
@ -247,7 +239,7 @@ public class PlayerGestureListener extends GestureDetector.SimpleOnGestureListen
|
|||
switch (event.getAction()) {
|
||||
case MotionEvent.ACTION_DOWN:
|
||||
case MotionEvent.ACTION_MOVE:
|
||||
v.getParent().requestDisallowInterceptTouchEvent(playerImpl.isInFullscreen());
|
||||
v.getParent().requestDisallowInterceptTouchEvent(playerImpl.isFullscreen());
|
||||
return true;
|
||||
case MotionEvent.ACTION_UP:
|
||||
v.getParent().requestDisallowInterceptTouchEvent(false);
|
||||
|
|
|
|||
|
|
@ -114,7 +114,7 @@ public class AudioReactor implements AudioManager.OnAudioFocusChangeListener,
|
|||
private void onAudioFocusGain() {
|
||||
Log.d(TAG, "onAudioFocusGain() called");
|
||||
player.setVolume(DUCK_AUDIO_TO);
|
||||
animateAudio(DUCK_AUDIO_TO, 1f);
|
||||
animateAudio(DUCK_AUDIO_TO, 1.0f);
|
||||
|
||||
if (PlayerHelper.isResumeAfterAudioFocusGain(context)) {
|
||||
player.setPlayWhenReady(true);
|
||||
|
|
|
|||
|
|
@ -222,14 +222,10 @@ public class PlayerHelper {
|
|||
|
||||
@AutoplayType
|
||||
public static int getAutoplayType(@NonNull final Context context) {
|
||||
final String defaultType = context.getString(R.string.autoplay_wifi_key);
|
||||
final String always = context.getString(R.string.autoplay_always_key);
|
||||
final String never = context.getString(R.string.autoplay_never_key);
|
||||
|
||||
final String type = getAutoplayType(context, defaultType);
|
||||
if (type.equals(always)) {
|
||||
final String type = getAutoplayType(context, context.getString(R.string.autoplay_wifi_key));
|
||||
if (type.equals(context.getString(R.string.autoplay_always_key))) {
|
||||
return AUTOPLAY_TYPE_ALWAYS;
|
||||
} else if (type.equals(never)) {
|
||||
} else if (type.equals(context.getString(R.string.autoplay_never_key))) {
|
||||
return AUTOPLAY_TYPE_NEVER;
|
||||
} else {
|
||||
return AUTOPLAY_TYPE_WIFI;
|
||||
|
|
@ -307,12 +303,12 @@ public class PlayerHelper {
|
|||
* Very small - 0.25f, Small - 0.5f, Normal - 1.0f, Large - 1.5f, Very Large - 2.0f
|
||||
* */
|
||||
public static float getCaptionScale(@NonNull final Context context) {
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) return 1f;
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) return 1.0f;
|
||||
|
||||
final CaptioningManager captioningManager = (CaptioningManager)
|
||||
context.getSystemService(Context.CAPTIONING_SERVICE);
|
||||
if (captioningManager == null || !captioningManager.isEnabled()) {
|
||||
return 1f;
|
||||
return 1.0f;
|
||||
}
|
||||
|
||||
return captioningManager.getFontScale();
|
||||
|
|
@ -330,8 +326,8 @@ public class PlayerHelper {
|
|||
public static boolean globalScreenOrientationLocked(Context context) {
|
||||
// 1: Screen orientation changes using accelerometer
|
||||
// 0: Screen orientation is locked
|
||||
return !(android.provider.Settings.System.getInt(
|
||||
context.getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, 0) == 1);
|
||||
return android.provider.Settings.System.getInt(
|
||||
context.getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, 0) == 0;
|
||||
}
|
||||
|
||||
public static boolean isTablet(@NonNull final Context context) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue