First implementation of the progress bar activated via runnable

This commit is contained in:
antonio 2022-03-23 17:48:32 +01:00
parent 2dab1f7a79
commit 0be7f07b83
3 changed files with 31 additions and 3 deletions

1
.idea/misc.xml generated
View file

@ -3,6 +3,7 @@
<component name="DesignSurface"> <component name="DesignSurface">
<option name="filePathToZoomLevelMap"> <option name="filePathToZoomLevelMap">
<map> <map>
<entry key="../../../../layout/custom_preview.xml" value="0.4861111111111111" />
<entry key="../../.gradle/caches/transforms-3/20796fa5f04d2ad22571c8f80fdd27bd/transformed/jetified-exoplayer-ui-2.12.2/res/drawable-anydpi-v21/exo_ic_skip_previous.xml" value="0.5484375" /> <entry key="../../.gradle/caches/transforms-3/20796fa5f04d2ad22571c8f80fdd27bd/transformed/jetified-exoplayer-ui-2.12.2/res/drawable-anydpi-v21/exo_ic_skip_previous.xml" value="0.5484375" />
<entry key="../../.gradle/caches/transforms-3/cfd4e4d299e24db95f3608b5f72af22b/transformed/jetified-exoplayer-ui-2.12.2/res/drawable-anydpi-v21/exo_ic_play_circle_filled.xml" value="0.28055555555555556" /> <entry key="../../.gradle/caches/transforms-3/cfd4e4d299e24db95f3608b5f72af22b/transformed/jetified-exoplayer-ui-2.12.2/res/drawable-anydpi-v21/exo_ic_play_circle_filled.xml" value="0.28055555555555556" />
<entry key="app/src/main/res/drawable-anydpi/ic_api_notification.xml" value="0.44351851851851853" /> <entry key="app/src/main/res/drawable-anydpi/ic_api_notification.xml" value="0.44351851851851853" />

View file

@ -3,6 +3,7 @@ package com.cappielloantonio.play.ui.fragment;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.content.ComponentName; import android.content.ComponentName;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler;
import android.util.Log; import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@ -14,7 +15,6 @@ import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProvider;
import androidx.media3.common.MediaMetadata; import androidx.media3.common.MediaMetadata;
import androidx.media3.common.Player; import androidx.media3.common.Player;
import androidx.media3.common.util.RepeatModeUtil;
import androidx.media3.session.MediaBrowser; import androidx.media3.session.MediaBrowser;
import androidx.media3.session.MediaController; import androidx.media3.session.MediaController;
import androidx.media3.session.SessionToken; import androidx.media3.session.SessionToken;
@ -41,7 +41,8 @@ public class PlayerBottomSheetFragment extends Fragment {
private PlayerBottomSheetViewModel playerBottomSheetViewModel; private PlayerBottomSheetViewModel playerBottomSheetViewModel;
private ListenableFuture<MediaBrowser> mediaBrowserListenableFuture; private ListenableFuture<MediaBrowser> mediaBrowserListenableFuture;
// TODO: Collegare la seekbar all'exo_progress private Handler progressBarHandler;
private Runnable progressBarRunnable;
@Nullable @Nullable
@Override @Override
@ -110,6 +111,7 @@ public class PlayerBottomSheetFragment extends Fragment {
@SuppressLint("UnsafeOptInUsageError") @SuppressLint("UnsafeOptInUsageError")
private void setMediaControllerListener(MediaBrowser mediaBrowser) { private void setMediaControllerListener(MediaBrowser mediaBrowser) {
defineProgressBarHandler(mediaBrowser);
setMediaControllerUI(mediaBrowser); setMediaControllerUI(mediaBrowser);
setMetadata(mediaBrowser.getMediaMetadata()); setMetadata(mediaBrowser.getMediaMetadata());
setContentDuration(mediaBrowser.getContentDuration()); setContentDuration(mediaBrowser.getContentDuration());
@ -130,6 +132,11 @@ public class PlayerBottomSheetFragment extends Fragment {
setPlayingState(isPlaying); setPlayingState(isPlaying);
} }
@Override
public void onSkipSilenceEnabledChanged(boolean skipSilenceEnabled) {
Player.Listener.super.onSkipSilenceEnabledChanged(skipSilenceEnabled);
}
@Override @Override
public void onEvents(Player player, Player.Events events) { public void onEvents(Player player, Player.Events events) {
setHeaderNextButtonState(mediaBrowser.hasNextMediaItem()); setHeaderNextButtonState(mediaBrowser.hasNextMediaItem());
@ -177,8 +184,13 @@ public class PlayerBottomSheetFragment extends Fragment {
bind.playerHeaderLayout.playerHeaderSeekBar.setMax((int) (duration / 1000)); bind.playerHeaderLayout.playerHeaderSeekBar.setMax((int) (duration / 1000));
} }
private void setProgress(MediaBrowser mediaBrowser) {
if (bind != null) bind.playerHeaderLayout.playerHeaderSeekBar.setProgress((int) (mediaBrowser.getCurrentPosition() / 1000), true);
}
private void setPlayingState(boolean isPlaying) { private void setPlayingState(boolean isPlaying) {
bind.playerHeaderLayout.playerHeaderButton.setChecked(isPlaying); bind.playerHeaderLayout.playerHeaderButton.setChecked(isPlaying);
runProgressBarHandler(isPlaying);
} }
@SuppressLint("UnsafeOptInUsageError") @SuppressLint("UnsafeOptInUsageError")
@ -222,4 +234,20 @@ public class PlayerBottomSheetFragment extends Fragment {
} }
} }
} }
private void defineProgressBarHandler(MediaBrowser mediaBrowser) {
progressBarHandler = new Handler();
progressBarRunnable = () -> {
setProgress(mediaBrowser);
progressBarHandler.postDelayed(progressBarRunnable, 1000);
};
}
private void runProgressBarHandler(boolean isPlaying) {
if (isPlaying) {
progressBarHandler.postDelayed(progressBarRunnable, 1000);
} else {
progressBarHandler.removeCallbacks(progressBarRunnable);
}
}
} }

View file

@ -90,7 +90,6 @@ public class PlayerControllerFragment extends Fragment {
bind = null; bind = null;
} }
@SuppressLint("UnsafeOptInUsageError") @SuppressLint("UnsafeOptInUsageError")
private void init() { private void init() {
playerMoveDownBottomSheet = bind.getRoot().findViewById(R.id.player_move_down_bottom_sheet); playerMoveDownBottomSheet = bind.getRoot().findViewById(R.id.player_move_down_bottom_sheet);