diff options
3 files changed, 121 insertions, 201 deletions
diff --git a/app/src/androidTest/java/de/test/antennapod/ui/VideoplayerActivityTest.java b/app/src/androidTest/java/de/test/antennapod/ui/VideoplayerActivityTest.java index ab16d7603..0dae22db1 100644 --- a/app/src/androidTest/java/de/test/antennapod/ui/VideoplayerActivityTest.java +++ b/app/src/androidTest/java/de/test/antennapod/ui/VideoplayerActivityTest.java @@ -31,6 +31,6 @@ public class VideoplayerActivityTest { @Test public void testStartActivity() throws Exception { activityTestRule.launchActivity(new Intent()); - onView(withId(R.id.videoframe)).check(matches(isDisplayed())); + onView(withId(R.id.videoPlayerContainer)).check(matches(isDisplayed())); } } diff --git a/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java index 4572cf1c4..1cdf45982 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java @@ -9,42 +9,31 @@ import android.media.AudioManager; import android.os.Build; import android.os.Bundle; import android.os.Handler; -import android.view.Gravity; -import android.view.KeyEvent; -import android.view.MenuInflater; -import android.view.animation.AlphaAnimation; -import android.view.animation.AnimationSet; -import android.view.animation.ScaleAnimation; -import android.widget.EditText; -import android.widget.ImageButton; -import android.widget.ImageView; - -import android.widget.TextView; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AlertDialog; -import androidx.cardview.widget.CardView; -import androidx.core.app.ActivityOptionsCompat; -import androidx.core.view.WindowCompat; -import androidx.appcompat.app.ActionBar; import android.util.Log; import android.util.Pair; +import android.view.Gravity; +import android.view.KeyEvent; +import android.view.LayoutInflater; import android.view.Menu; +import android.view.MenuInflater; import android.view.MenuItem; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.View; import android.view.WindowManager; +import android.view.animation.AlphaAnimation; import android.view.animation.Animation; +import android.view.animation.AnimationSet; import android.view.animation.AnimationUtils; +import android.view.animation.ScaleAnimation; +import android.widget.EditText; import android.widget.FrameLayout; -import android.widget.LinearLayout; -import android.widget.ProgressBar; import android.widget.SeekBar; - -import java.lang.ref.WeakReference; -import java.text.NumberFormat; -import java.util.concurrent.atomic.AtomicBoolean; - +import androidx.annotation.Nullable; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AlertDialog; +import androidx.core.app.ActivityOptionsCompat; +import androidx.core.view.WindowCompat; import androidx.interpolator.view.animation.FastOutSlowInInterpolator; import com.bumptech.glide.Glide; import de.danoeh.antennapod.R; @@ -64,6 +53,7 @@ import de.danoeh.antennapod.core.util.TimeSpeedConverter; import de.danoeh.antennapod.core.util.gui.PictureInPictureUtil; import de.danoeh.antennapod.core.util.playback.MediaPlayerError; import de.danoeh.antennapod.core.util.playback.PlaybackController; +import de.danoeh.antennapod.databinding.VideoplayerActivityBinding; import de.danoeh.antennapod.dialog.PlaybackControlsDialog; import de.danoeh.antennapod.dialog.ShareDialog; import de.danoeh.antennapod.dialog.SkipPreferenceDialog; @@ -72,8 +62,6 @@ import de.danoeh.antennapod.model.feed.FeedItem; import de.danoeh.antennapod.model.feed.FeedMedia; import de.danoeh.antennapod.model.playback.Playable; import de.danoeh.antennapod.ui.appstartintent.MainActivityStarter; -import de.danoeh.antennapod.view.AspectRatioVideoView; -import de.danoeh.antennapod.view.PlayButton; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; @@ -83,6 +71,8 @@ import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; +import java.lang.ref.WeakReference; + /** * Activity for playing video files. */ @@ -96,29 +86,8 @@ public class VideoplayerActivity extends CastEnabledActivity implements SeekBar. private boolean videoSurfaceCreated = false; private boolean destroyingDueToReload = false; private long lastScreenTap = 0; - private VideoControlsHider videoControlsHider = new VideoControlsHider(this); - - private final AtomicBoolean isSetup = new AtomicBoolean(false); - - private LinearLayout controls; - private LinearLayout videoOverlay; - private AspectRatioVideoView videoview; - private ProgressBar progressIndicator; - private FrameLayout videoframe; - private ImageView skipAnimationView; - private TextView txtvPosition; - private TextView txtvLength; - private SeekBar sbPosition; - private ImageButton butRev; - private TextView txtvRev; - private PlayButton butPlay; - private ImageButton butFF; - private TextView txtvFF; - private ImageButton butSkip; - private CardView cardViewSeek; - private TextView txtvSeek; - + private VideoplayerActivityBinding viewBinding; private PlaybackController controller; private boolean showTimeLeft = false; private boolean isFavorite = false; @@ -138,8 +107,11 @@ public class VideoplayerActivity extends CastEnabledActivity implements SeekBar. StorageUtils.checkStorageAvailability(this); getWindow().setFormat(PixelFormat.TRANSPARENT); + viewBinding = VideoplayerActivityBinding.inflate(LayoutInflater.from(this)); + setContentView(viewBinding.getRoot()); setupGUI(); getSupportActionBar().setBackgroundDrawable(new ColorDrawable(0x80000000)); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); } @Override @@ -170,7 +142,8 @@ public class VideoplayerActivity extends CastEnabledActivity implements SeekBar. if (!PictureInPictureUtil.isInPictureInPictureMode(this)) { videoControlsHider.stop(); } - progressIndicator.setVisibility(View.GONE); // Controller released; we will not receive buffering updates + // Controller released; we will not receive buffering updates + viewBinding.progressBar.setVisibility(View.GONE); } @Override @@ -230,19 +203,17 @@ public class VideoplayerActivity extends CastEnabledActivity implements SeekBar. @Override public void onBufferStart() { - progressIndicator.setVisibility(View.VISIBLE); + viewBinding.progressBar.setVisibility(View.VISIBLE); } @Override public void onBufferEnd() { - progressIndicator.setVisibility(View.INVISIBLE); + viewBinding.progressBar.setVisibility(View.INVISIBLE); } @Override public void onBufferUpdate(float progress) { - if (sbPosition != null) { - sbPosition.setSecondaryProgress((int) (progress * sbPosition.getMax())); - } + viewBinding.sbPosition.setSecondaryProgress((int) (progress * viewBinding.sbPosition.getMax())); } @Override @@ -266,7 +237,7 @@ public class VideoplayerActivity extends CastEnabledActivity implements SeekBar. @Override protected void updatePlayButtonShowsPlay(boolean showPlay) { - butPlay.setIsShowPlay(showPlay); + viewBinding.playButton.setIsShowPlay(showPlay); } @Override @@ -279,7 +250,7 @@ public class VideoplayerActivity extends CastEnabledActivity implements SeekBar. setupVideoAspectRatio(); if (videoSurfaceCreated && controller != null) { Log.d(TAG, "Videosurface already created, setting videosurface now"); - controller.setVideoSurface(videoview.getHolder()); + controller.setVideoSurface(viewBinding.videoView.getHolder()); } } @@ -315,108 +286,61 @@ public class VideoplayerActivity extends CastEnabledActivity implements SeekBar. } protected void setupGUI() { - if (isSetup.getAndSet(true)) { - return; - } - setContentView(R.layout.videoplayer_activity); - sbPosition = findViewById(R.id.sbPosition); - txtvPosition = findViewById(R.id.txtvPosition); - cardViewSeek = findViewById(R.id.cardViewSeek); - txtvSeek = findViewById(R.id.txtvSeek); - showTimeLeft = UserPreferences.shouldShowRemainingTime(); Log.d("timeleft", showTimeLeft ? "true" : "false"); - txtvLength = findViewById(R.id.txtvLength); - if (txtvLength != null) { - txtvLength.setOnClickListener(v -> { - showTimeLeft = !showTimeLeft; - Playable media = controller.getMedia(); - if (media == null) { - return; - } - - TimeSpeedConverter converter = new TimeSpeedConverter(controller.getCurrentPlaybackSpeedMultiplier()); - String length; - if (showTimeLeft) { - int remainingTime = converter.convert( - media.getDuration() - media.getPosition()); - - length = "-" + Converter.getDurationStringLong(remainingTime); - } else { - int duration = converter.convert(media.getDuration()); - length = Converter.getDurationStringLong(duration); - } - txtvLength.setText(length); - - UserPreferences.setShowRemainTimeSetting(showTimeLeft); - Log.d("timeleft on click", showTimeLeft ? "true" : "false"); - }); - } - - butRev = findViewById(R.id.butRev); - txtvRev = findViewById(R.id.txtvRev); - if (txtvRev != null) { - txtvRev.setText(NumberFormat.getInstance().format(UserPreferences.getRewindSecs())); - } - butPlay = findViewById(R.id.butPlay); - butPlay.setIsVideoScreen(true); - butFF = findViewById(R.id.butFF); - txtvFF = findViewById(R.id.txtvFF); - if (txtvFF != null) { - txtvFF.setText(NumberFormat.getInstance().format(UserPreferences.getFastForwardSecs())); - } - butSkip = findViewById(R.id.butSkip); - - // SEEKBAR SETUP - - sbPosition.setOnSeekBarChangeListener(this); - - // BUTTON SETUP - - if (butRev != null) { - butRev.setOnClickListener(v -> onRewind()); - butRev.setOnLongClickListener(v -> { - SkipPreferenceDialog.showSkipPreference(VideoplayerActivity.this, - SkipPreferenceDialog.SkipDirection.SKIP_REWIND, txtvRev); - return true; - }); - } + viewBinding.durationLabel.setOnClickListener(v -> { + showTimeLeft = !showTimeLeft; + Playable media = controller.getMedia(); + if (media == null) { + return; + } - butPlay.setOnClickListener(v -> onPlayPause()); + TimeSpeedConverter converter = new TimeSpeedConverter(controller.getCurrentPlaybackSpeedMultiplier()); + String length; + if (showTimeLeft) { + int remainingTime = converter.convert( + media.getDuration() - media.getPosition()); - if (butFF != null) { - butFF.setOnClickListener(v -> onFastForward()); - butFF.setOnLongClickListener(v -> { - SkipPreferenceDialog.showSkipPreference(VideoplayerActivity.this, - SkipPreferenceDialog.SkipDirection.SKIP_FORWARD, txtvFF); - return false; - }); - } + length = "-" + Converter.getDurationStringLong(remainingTime); + } else { + int duration = converter.convert(media.getDuration()); + length = Converter.getDurationStringLong(duration); + } + viewBinding.durationLabel.setText(length); - if (butSkip != null) { - butSkip.setOnClickListener(v -> - IntentUtils.sendLocalBroadcast(VideoplayerActivity.this, PlaybackService.ACTION_SKIP_CURRENT_EPISODE)); - } + UserPreferences.setShowRemainTimeSetting(showTimeLeft); + Log.d("timeleft on click", showTimeLeft ? "true" : "false"); + }); - getSupportActionBar().setDisplayHomeAsUpEnabled(true); - controls = findViewById(R.id.controls); - videoOverlay = findViewById(R.id.overlay); - videoview = findViewById(R.id.videoview); - videoframe = findViewById(R.id.videoframe); - progressIndicator = findViewById(R.id.progressIndicator); - skipAnimationView = findViewById(R.id.skip_animation); - videoview.getHolder().addCallback(surfaceHolderCallback); - videoframe.setOnTouchListener(onVideoviewTouched); - videoOverlay.setOnTouchListener((view, motionEvent) -> true); // To suppress touches directly below the slider - videoview.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); - videoOverlay.setFitsSystemWindows(true); + viewBinding.sbPosition.setOnSeekBarChangeListener(this); + viewBinding.rewindButton.setOnClickListener(v -> onRewind()); + viewBinding.rewindButton.setOnLongClickListener(v -> { + SkipPreferenceDialog.showSkipPreference(VideoplayerActivity.this, + SkipPreferenceDialog.SkipDirection.SKIP_REWIND, null); + return true; + }); + viewBinding.playButton.setIsVideoScreen(true); + viewBinding.playButton.setOnClickListener(v -> onPlayPause()); + viewBinding.fastForwardButton.setOnClickListener(v -> onFastForward()); + viewBinding.fastForwardButton.setOnLongClickListener(v -> { + SkipPreferenceDialog.showSkipPreference(VideoplayerActivity.this, + SkipPreferenceDialog.SkipDirection.SKIP_FORWARD, null); + return false; + }); + // To suppress touches directly below the slider + viewBinding.bottomControlsContainer.setOnTouchListener((view, motionEvent) -> true); + viewBinding.bottomControlsContainer.setFitsSystemWindows(true); + viewBinding.videoView.getHolder().addCallback(surfaceHolderCallback); + viewBinding.videoView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); setupVideoControlsToggler(); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); - videoframe.getViewTreeObserver().addOnGlobalLayoutListener(() -> - videoview.setAvailableSize(videoframe.getWidth(), videoframe.getHeight())); + viewBinding.videoPlayerContainer.setOnTouchListener(onVideoviewTouched); + viewBinding.videoPlayerContainer.getViewTreeObserver().addOnGlobalLayoutListener(() -> + viewBinding.videoView.setAvailableSize( + viewBinding.videoPlayerContainer.getWidth(), viewBinding.videoPlayerContainer.getHeight())); } private final View.OnTouchListener onVideoviewTouched = (v, event) -> { @@ -462,18 +386,18 @@ public class VideoplayerActivity extends CastEnabledActivity implements SeekBar. skipAnimation.setFillAfter(false); skipAnimation.setDuration(800); - FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) skipAnimationView.getLayoutParams(); + FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) viewBinding.skipAnimationImage.getLayoutParams(); if (isForward) { - skipAnimationView.setImageResource(R.drawable.ic_fast_forward_video_white); + viewBinding.skipAnimationImage.setImageResource(R.drawable.ic_fast_forward_video_white); params.gravity = Gravity.RIGHT | Gravity.CENTER_VERTICAL; } else { - skipAnimationView.setImageResource(R.drawable.ic_fast_rewind_video_white); + viewBinding.skipAnimationImage.setImageResource(R.drawable.ic_fast_rewind_video_white); params.gravity = Gravity.LEFT | Gravity.CENTER_VERTICAL; } - skipAnimationView.setVisibility(View.VISIBLE); - skipAnimationView.setLayoutParams(params); - skipAnimationView.startAnimation(skipAnimation); + viewBinding.skipAnimationImage.setVisibility(View.VISIBLE); + viewBinding.skipAnimationImage.setLayoutParams(params); + viewBinding.skipAnimationImage.startAnimation(skipAnimation); skipAnimation.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { @@ -481,7 +405,7 @@ public class VideoplayerActivity extends CastEnabledActivity implements SeekBar. @Override public void onAnimationEnd(Animation animation) { - skipAnimationView.setVisibility(View.GONE); + viewBinding.skipAnimationImage.setVisibility(View.GONE); } @Override @@ -502,7 +426,7 @@ public class VideoplayerActivity extends CastEnabledActivity implements SeekBar. Pair<Integer, Integer> videoSize = controller.getVideoSize(); if (videoSize != null && videoSize.first > 0 && videoSize.second > 0) { Log.d(TAG, "Width,height of video: " + videoSize.first + ", " + videoSize.second); - videoview.setVideoSize(videoSize.first, videoSize.second); + viewBinding.videoView.setVideoSize(videoSize.first, videoSize.second); } else { Log.e(TAG, "Could not determine video size"); } @@ -530,7 +454,7 @@ public class VideoplayerActivity extends CastEnabledActivity implements SeekBar. } void onPlayPause() { - if(controller == null) { + if (controller == null) { return; } controller.init(); @@ -594,14 +518,14 @@ public class VideoplayerActivity extends CastEnabledActivity implements SeekBar. @SuppressLint("NewApi") private void showVideoControls() { - videoOverlay.setVisibility(View.VISIBLE); - controls.setVisibility(View.VISIBLE); + viewBinding.bottomControlsContainer.setVisibility(View.VISIBLE); + viewBinding.controlsContainer.setVisibility(View.VISIBLE); final Animation animation = AnimationUtils.loadAnimation(this, R.anim.fade_in); if (animation != null) { - videoOverlay.startAnimation(animation); - controls.startAnimation(animation); + viewBinding.bottomControlsContainer.startAnimation(animation); + viewBinding.controlsContainer.startAnimation(animation); } - videoview.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE); + viewBinding.videoView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE); } @SuppressLint("NewApi") @@ -609,17 +533,17 @@ public class VideoplayerActivity extends CastEnabledActivity implements SeekBar. if (showAnimation) { final Animation animation = AnimationUtils.loadAnimation(this, R.anim.fade_out); if (animation != null) { - videoOverlay.startAnimation(animation); - controls.startAnimation(animation); + viewBinding.bottomControlsContainer.startAnimation(animation); + viewBinding.controlsContainer.startAnimation(animation); } } getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); - videoOverlay.setFitsSystemWindows(true); + viewBinding.bottomControlsContainer.setFitsSystemWindows(true); - videoOverlay.setVisibility(View.GONE); - controls.setVisibility(View.GONE); + viewBinding.bottomControlsContainer.setVisibility(View.GONE); + viewBinding.controlsContainer.setVisibility(View.GONE); } private void hideVideoControls() { @@ -774,7 +698,7 @@ public class VideoplayerActivity extends CastEnabledActivity implements SeekBar. } void onPositionObserverUpdate() { - if (controller == null || txtvPosition == null || txtvLength == null) { + if (controller == null) { return; } @@ -789,42 +713,39 @@ public class VideoplayerActivity extends CastEnabledActivity implements SeekBar. Log.w(TAG, "Could not react to position observer update because of invalid time"); return; } - txtvPosition.setText(Converter.getDurationStringLong(currentPosition)); + viewBinding.positionLabel.setText(Converter.getDurationStringLong(currentPosition)); if (showTimeLeft) { - txtvLength.setText("-" + Converter.getDurationStringLong(remainingTime)); + viewBinding.durationLabel.setText("-" + Converter.getDurationStringLong(remainingTime)); } else { - txtvLength.setText(Converter.getDurationStringLong(duration)); + viewBinding.durationLabel.setText(Converter.getDurationStringLong(duration)); } updateProgressbarPosition(currentPosition, duration); } private void updateProgressbarPosition(int position, int duration) { Log.d(TAG, "updateProgressbarPosition(" + position + ", " + duration + ")"); - if(sbPosition == null) { - return; - } float progress = ((float) position) / duration; - sbPosition.setProgress((int) (progress * sbPosition.getMax())); + viewBinding.sbPosition.setProgress((int) (progress * viewBinding.sbPosition.getMax())); } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { - if (controller == null || txtvLength == null) { + if (controller == null) { return; } if (fromUser) { prog = progress / ((float) seekBar.getMax()); TimeSpeedConverter converter = new TimeSpeedConverter(controller.getCurrentPlaybackSpeedMultiplier()); int position = converter.convert((int) (prog * controller.getDuration())); - txtvSeek.setText(Converter.getDurationStringLong(position)); + viewBinding.seekPositionLabel.setText(Converter.getDurationStringLong(position)); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { - cardViewSeek.setScaleX(.8f); - cardViewSeek.setScaleY(.8f); - cardViewSeek.animate() + viewBinding.seekCardView.setScaleX(.8f); + viewBinding.seekCardView.setScaleY(.8f); + viewBinding.seekCardView.animate() .setInterpolator(new FastOutSlowInInterpolator()) .alpha(1f).scaleX(1f).scaleY(1f) .setDuration(200) @@ -837,9 +758,9 @@ public class VideoplayerActivity extends CastEnabledActivity implements SeekBar. if (controller != null) { controller.seekTo((int) (prog * controller.getDuration())); } - cardViewSeek.setScaleX(1f); - cardViewSeek.setScaleY(1f); - cardViewSeek.animate() + viewBinding.seekCardView.setScaleX(1f); + viewBinding.seekCardView.setScaleY(1f); + viewBinding.seekCardView.animate() .setInterpolator(new FastOutSlowInInterpolator()) .alpha(0f).scaleX(.8f).scaleY(.8f) .setDuration(200) diff --git a/app/src/main/res/layout/videoplayer_activity.xml b/app/src/main/res/layout/videoplayer_activity.xml index f5a163849..fcc1c5f15 100644 --- a/app/src/main/res/layout/videoplayer_activity.xml +++ b/app/src/main/res/layout/videoplayer_activity.xml @@ -6,16 +6,16 @@ xmlns:tools="http://schemas.android.com/tools" android:background="@color/black" android:orientation="vertical" - android:id="@+id/videoframe"> + android:id="@+id/videoPlayerContainer"> <de.danoeh.antennapod.view.AspectRatioVideoView - android:id="@+id/videoview" + android:id="@+id/videoView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" /> <ProgressBar - android:id="@+id/progressIndicator" + android:id="@+id/progressBar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" @@ -23,7 +23,7 @@ android:visibility="invisible" /> <LinearLayout - android:id="@+id/controls" + android:id="@+id/controlsContainer" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" @@ -33,7 +33,7 @@ android:orientation="horizontal"> <ImageButton - android:id="@+id/butRev" + android:id="@+id/rewindButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="8dp" @@ -42,7 +42,7 @@ app:srcCompat="@drawable/ic_fast_rewind_video_white" /> <de.danoeh.antennapod.view.PlayButton - android:id="@+id/butPlay" + android:id="@+id/playButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="8dp" @@ -51,7 +51,7 @@ app:srcCompat="@drawable/ic_pause_video_white" /> <ImageButton - android:id="@+id/butFF" + android:id="@+id/fastForwardButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="8dp" @@ -62,7 +62,7 @@ </LinearLayout> <ImageView - android:id="@+id/skip_animation" + android:id="@+id/skipAnimationImage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="gone" @@ -70,14 +70,14 @@ android:layout_gravity="center"/> <LinearLayout - android:id="@+id/overlay" + android:id="@+id/bottomControlsContainer" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom|center" android:orientation="vertical"> <androidx.cardview.widget.CardView - android:id="@+id/cardViewSeek" + android:id="@+id/seekCardView" android:alpha="0" android:layout_width="wrap_content" android:layout_height="wrap_content" @@ -89,7 +89,7 @@ tools:alpha="1"> <TextView - android:id="@+id/txtvSeek" + android:id="@+id/seekPositionLabel" android:gravity="center" android:layout_width="wrap_content" android:layout_height="wrap_content" @@ -104,7 +104,6 @@ </androidx.cardview.widget.CardView> <RelativeLayout - android:id="@+id/timecontrol" android:layout_width="match_parent" android:layout_height="50dp" android:background="#80000000" @@ -112,7 +111,7 @@ android:paddingTop="8dp"> <TextView - android:id="@+id/txtvPosition" + android:id="@+id/positionLabel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" @@ -129,7 +128,7 @@ android:textStyle="bold" /> <TextView - android:id="@+id/txtvLength" + android:id="@+id/durationLabel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" @@ -149,10 +148,10 @@ android:id="@+id/sbPosition" android:layout_width="0px" android:layout_height="wrap_content" - android:layout_toLeftOf="@+id/txtvLength" - android:layout_toStartOf="@+id/txtvLength" - android:layout_toRightOf="@+id/txtvPosition" - android:layout_toEndOf="@+id/txtvPosition" + android:layout_toLeftOf="@+id/durationLabel" + android:layout_toStartOf="@+id/durationLabel" + android:layout_toRightOf="@+id/positionLabel" + android:layout_toEndOf="@+id/positionLabel" android:layout_centerInParent="true" android:max="500" /> |