mirror of
https://github.com/antebudimir/tempus.git
synced 2025-12-31 17:43:32 +00:00
Nullify nested binding in onDestroyView
This commit is contained in:
parent
1740f4e258
commit
5eb61ecde6
1 changed files with 44 additions and 34 deletions
|
|
@ -23,6 +23,8 @@ import com.cappielloantonio.play.R;
|
||||||
import com.cappielloantonio.play.adapter.PlayerNowPlayingSongAdapter;
|
import com.cappielloantonio.play.adapter.PlayerNowPlayingSongAdapter;
|
||||||
import com.cappielloantonio.play.adapter.PlayerSongQueueAdapter;
|
import com.cappielloantonio.play.adapter.PlayerSongQueueAdapter;
|
||||||
import com.cappielloantonio.play.databinding.FragmentPlayerBottomSheetBinding;
|
import com.cappielloantonio.play.databinding.FragmentPlayerBottomSheetBinding;
|
||||||
|
import com.cappielloantonio.play.databinding.PlayerBodyBottomSheetBinding;
|
||||||
|
import com.cappielloantonio.play.databinding.PlayerHeaderBottomSheetBinding;
|
||||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||||
import com.cappielloantonio.play.helper.MusicProgressViewUpdateHelper;
|
import com.cappielloantonio.play.helper.MusicProgressViewUpdateHelper;
|
||||||
import com.cappielloantonio.play.interfaces.MusicServiceEventListener;
|
import com.cappielloantonio.play.interfaces.MusicServiceEventListener;
|
||||||
|
|
@ -41,6 +43,8 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE
|
||||||
private static final String TAG = "PlayerBottomSheetFragment";
|
private static final String TAG = "PlayerBottomSheetFragment";
|
||||||
|
|
||||||
private FragmentPlayerBottomSheetBinding bind;
|
private FragmentPlayerBottomSheetBinding bind;
|
||||||
|
private PlayerHeaderBottomSheetBinding headerBind;
|
||||||
|
private PlayerBodyBottomSheetBinding bodyBind;
|
||||||
private MainActivity activity;
|
private MainActivity activity;
|
||||||
private PlayerBottomSheetViewModel playerBottomSheetViewModel;
|
private PlayerBottomSheetViewModel playerBottomSheetViewModel;
|
||||||
|
|
||||||
|
|
@ -63,6 +67,10 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE
|
||||||
|
|
||||||
bind = FragmentPlayerBottomSheetBinding.inflate(inflater, container, false);
|
bind = FragmentPlayerBottomSheetBinding.inflate(inflater, container, false);
|
||||||
View view = bind.getRoot();
|
View view = bind.getRoot();
|
||||||
|
|
||||||
|
headerBind = bind.playerHeaderLayout;
|
||||||
|
bodyBind = bind.playerBodyLayout;
|
||||||
|
|
||||||
playerBottomSheetViewModel = new ViewModelProvider(requireActivity()).get(PlayerBottomSheetViewModel.class);
|
playerBottomSheetViewModel = new ViewModelProvider(requireActivity()).get(PlayerBottomSheetViewModel.class);
|
||||||
|
|
||||||
initQueueSlideView();
|
initQueueSlideView();
|
||||||
|
|
@ -105,18 +113,20 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE
|
||||||
@Override
|
@Override
|
||||||
public void onDestroyView() {
|
public void onDestroyView() {
|
||||||
super.onDestroyView();
|
super.onDestroyView();
|
||||||
|
headerBind = null;
|
||||||
|
bodyBind = null;
|
||||||
bind = null;
|
bind = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initQueueSlideView() {
|
private void initQueueSlideView() {
|
||||||
bind.playerBodyLayout.playerSongCoverViewPager.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL);
|
bodyBind.playerSongCoverViewPager.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL);
|
||||||
|
|
||||||
playerNowPlayingSongAdapter = new PlayerNowPlayingSongAdapter(requireContext());
|
playerNowPlayingSongAdapter = new PlayerNowPlayingSongAdapter(requireContext());
|
||||||
bind.playerBodyLayout.playerSongCoverViewPager.setAdapter(playerNowPlayingSongAdapter);
|
bodyBind.playerSongCoverViewPager.setAdapter(playerNowPlayingSongAdapter);
|
||||||
playerBottomSheetViewModel.getQueueSong().observe(requireActivity(), queue -> playerNowPlayingSongAdapter.setItems(MappingUtil.mapQueue(queue)));
|
playerBottomSheetViewModel.getQueueSong().observe(requireActivity(), queue -> playerNowPlayingSongAdapter.setItems(MappingUtil.mapQueue(queue)));
|
||||||
|
|
||||||
bind.playerBodyLayout.playerSongCoverViewPager.setOffscreenPageLimit(3);
|
bodyBind.playerSongCoverViewPager.setOffscreenPageLimit(3);
|
||||||
bind.playerBodyLayout.playerSongCoverViewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
|
bodyBind.playerSongCoverViewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
|
||||||
// 0 = IDLE
|
// 0 = IDLE
|
||||||
// 1 = DRAGGING
|
// 1 = DRAGGING
|
||||||
// 2 = SETTLING
|
// 2 = SETTLING
|
||||||
|
|
@ -144,11 +154,11 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initQueueRecyclerView() {
|
private void initQueueRecyclerView() {
|
||||||
bind.playerBodyLayout.playerQueueRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
|
bodyBind.playerQueueRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
|
||||||
bind.playerBodyLayout.playerQueueRecyclerView.setHasFixedSize(true);
|
bodyBind.playerQueueRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
playerSongQueueAdapter = new PlayerSongQueueAdapter(requireContext(), this);
|
playerSongQueueAdapter = new PlayerSongQueueAdapter(requireContext(), this);
|
||||||
bind.playerBodyLayout.playerQueueRecyclerView.setAdapter(playerSongQueueAdapter);
|
bodyBind.playerQueueRecyclerView.setAdapter(playerSongQueueAdapter);
|
||||||
playerBottomSheetViewModel.getQueueSong().observe(requireActivity(), queue -> playerSongQueueAdapter.setItems(MappingUtil.mapQueue(queue)));
|
playerBottomSheetViewModel.getQueueSong().observe(requireActivity(), queue -> playerSongQueueAdapter.setItems(MappingUtil.mapQueue(queue)));
|
||||||
|
|
||||||
new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP | ItemTouchHelper.DOWN, ItemTouchHelper.LEFT) {
|
new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP | ItemTouchHelper.DOWN, ItemTouchHelper.LEFT) {
|
||||||
|
|
@ -191,7 +201,7 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE
|
||||||
*/
|
*/
|
||||||
playerBottomSheetViewModel.orderSongAfterSwap(playerSongQueueAdapter.getItems());
|
playerBottomSheetViewModel.orderSongAfterSwap(playerSongQueueAdapter.getItems());
|
||||||
MusicPlayerRemote.moveSong(originalPosition, toPosition);
|
MusicPlayerRemote.moveSong(originalPosition, toPosition);
|
||||||
bind.playerBodyLayout.playerSongCoverViewPager.setCurrentItem(MusicPlayerRemote.getPosition(), false);
|
bodyBind.playerSongCoverViewPager.setCurrentItem(MusicPlayerRemote.getPosition(), false);
|
||||||
|
|
||||||
originalPosition = -1;
|
originalPosition = -1;
|
||||||
fromPosition = -1;
|
fromPosition = -1;
|
||||||
|
|
@ -203,19 +213,19 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE
|
||||||
if (!(viewHolder.getBindingAdapterPosition() == MusicPlayerRemote.getPosition()) && !(MusicPlayerRemote.getPlayingQueue().size() <= 1)) {
|
if (!(viewHolder.getBindingAdapterPosition() == MusicPlayerRemote.getPosition()) && !(MusicPlayerRemote.getPlayingQueue().size() <= 1)) {
|
||||||
MusicPlayerRemote.removeFromQueue(viewHolder.getBindingAdapterPosition());
|
MusicPlayerRemote.removeFromQueue(viewHolder.getBindingAdapterPosition());
|
||||||
playerBottomSheetViewModel.removeSong(viewHolder.getBindingAdapterPosition());
|
playerBottomSheetViewModel.removeSong(viewHolder.getBindingAdapterPosition());
|
||||||
bind.playerBodyLayout.playerQueueRecyclerView.getAdapter().notifyItemRemoved(viewHolder.getBindingAdapterPosition());
|
bodyBind.playerQueueRecyclerView.getAdapter().notifyItemRemoved(viewHolder.getBindingAdapterPosition());
|
||||||
bind.playerBodyLayout.playerSongCoverViewPager.setCurrentItem(MusicPlayerRemote.getPosition(), false);
|
bodyBind.playerSongCoverViewPager.setCurrentItem(MusicPlayerRemote.getPosition(), false);
|
||||||
} else {
|
} else {
|
||||||
bind.playerBodyLayout.playerQueueRecyclerView.getAdapter().notifyDataSetChanged();
|
bodyBind.playerQueueRecyclerView.getAdapter().notifyDataSetChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
).attachToRecyclerView(bind.playerBodyLayout.playerQueueRecyclerView);
|
).attachToRecyclerView(bodyBind.playerQueueRecyclerView);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initFavoriteButtonClick() {
|
private void initFavoriteButtonClick() {
|
||||||
bind.playerBodyLayout.buttonFavorite.setOnClickListener(v -> playerBottomSheetViewModel.setFavorite());
|
bodyBind.buttonFavorite.setOnClickListener(v -> playerBottomSheetViewModel.setFavorite());
|
||||||
bind.playerBodyLayout.buttonFavorite.setOnLongClickListener(v -> {
|
bodyBind.buttonFavorite.setOnLongClickListener(v -> {
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
bundle.putParcelable("song_object", playerBottomSheetViewModel.getCurrentSong());
|
bundle.putParcelable("song_object", playerBottomSheetViewModel.getCurrentSong());
|
||||||
|
|
||||||
|
|
@ -228,7 +238,7 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initMusicCommandButton() {
|
private void initMusicCommandButton() {
|
||||||
bind.playerHeaderLayout.playerHeaderButton.setOnClickListener(v -> {
|
headerBind.playerHeaderButton.setOnClickListener(v -> {
|
||||||
if (MusicPlayerRemote.isPlaying()) {
|
if (MusicPlayerRemote.isPlaying()) {
|
||||||
MusicPlayerRemote.pauseSong();
|
MusicPlayerRemote.pauseSong();
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -236,11 +246,11 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
bind.playerHeaderLayout.playerHeaderNextSongButton.setOnClickListener(v -> MusicPlayerRemote.playNextSong());
|
headerBind.playerHeaderNextSongButton.setOnClickListener(v -> MusicPlayerRemote.playNextSong());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initSeekBar() {
|
private void initSeekBar() {
|
||||||
bind.playerBodyLayout.playerBigSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
|
bodyBind.playerBigSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
|
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
|
||||||
if (fromUser) {
|
if (fromUser) {
|
||||||
|
|
@ -262,36 +272,36 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setViewPageDelayed(int position) {
|
private void setViewPageDelayed(int position) {
|
||||||
/*bind.playerBodyLayout.playerSongCoverViewPager.post(() -> {
|
/*bodyBind.playerSongCoverViewPager.post(() -> {
|
||||||
int restoredPosition = PreferenceManager.getDefaultSharedPreferences(requireContext()).getInt(PreferenceUtil.POSITION, -1);
|
int restoredPosition = PreferenceManager.getDefaultSharedPreferences(requireContext()).getInt(PreferenceUtil.POSITION, -1);
|
||||||
bind.playerBodyLayout.playerSongCoverViewPager.setCurrentItem(restoredPosition, true);
|
bodyBind.playerSongCoverViewPager.setCurrentItem(restoredPosition, true);
|
||||||
});*/
|
});*/
|
||||||
|
|
||||||
final Handler handler = new Handler();
|
final Handler handler = new Handler();
|
||||||
final Runnable r = () -> {
|
final Runnable r = () -> {
|
||||||
bind.playerBodyLayout.playerSongCoverViewPager.setCurrentItem(position, false);
|
bodyBind.playerSongCoverViewPager.setCurrentItem(position, false);
|
||||||
};
|
};
|
||||||
handler.postDelayed(r, 100);
|
handler.postDelayed(r, 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setSongInfo(Song song) {
|
private void setSongInfo(Song song) {
|
||||||
bind.playerBodyLayout.playerSongTitleLabel.setText(MusicUtil.getReadableString(song.getTitle()));
|
bodyBind.playerSongTitleLabel.setText(MusicUtil.getReadableString(song.getTitle()));
|
||||||
bind.playerBodyLayout.playerArtistNameLabel.setText(MusicUtil.getReadableString(song.getArtistName()));
|
bodyBind.playerArtistNameLabel.setText(MusicUtil.getReadableString(song.getArtistName()));
|
||||||
|
|
||||||
bind.playerHeaderLayout.playerHeaderSongTitleLabel.setText(MusicUtil.getReadableString(song.getTitle()));
|
headerBind.playerHeaderSongTitleLabel.setText(MusicUtil.getReadableString(song.getTitle()));
|
||||||
bind.playerHeaderLayout.playerHeaderSongArtistLabel.setText(MusicUtil.getReadableString(song.getArtistName()));
|
headerBind.playerHeaderSongArtistLabel.setText(MusicUtil.getReadableString(song.getArtistName()));
|
||||||
|
|
||||||
CustomGlideRequest.Builder
|
CustomGlideRequest.Builder
|
||||||
.from(requireContext(), song.getPrimary(), CustomGlideRequest.SONG_PIC, null)
|
.from(requireContext(), song.getPrimary(), CustomGlideRequest.SONG_PIC, null)
|
||||||
.build()
|
.build()
|
||||||
.transform(new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
.transform(new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
||||||
.into(bind.playerHeaderLayout.playerHeaderSongCoverImage);
|
.into(headerBind.playerHeaderSongCoverImage);
|
||||||
|
|
||||||
bind.playerBodyLayout.buttonFavorite.setChecked(song.isFavorite());
|
bodyBind.buttonFavorite.setChecked(song.isFavorite());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void updatePlayPauseState() {
|
protected void updatePlayPauseState() {
|
||||||
bind.playerHeaderLayout.playerHeaderButton.setChecked(!MusicPlayerRemote.isPlaying());
|
headerBind.playerHeaderButton.setChecked(!MusicPlayerRemote.isPlaying());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setUpMusicControllers() {
|
private void setUpMusicControllers() {
|
||||||
|
|
@ -307,7 +317,7 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE
|
||||||
}
|
}
|
||||||
|
|
||||||
public void scrollPager(Song song, int page, boolean smoothScroll) {
|
public void scrollPager(Song song, int page, boolean smoothScroll) {
|
||||||
bind.playerBodyLayout.playerSongCoverViewPager.setCurrentItem(page, smoothScroll);
|
bodyBind.playerSongCoverViewPager.setCurrentItem(page, smoothScroll);
|
||||||
setSongInfo(song);
|
setSongInfo(song);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -345,13 +355,13 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onUpdateProgressViews(int progress, int total) {
|
public void onUpdateProgressViews(int progress, int total) {
|
||||||
bind.playerHeaderLayout.playerHeaderSeekBar.setMax(total);
|
headerBind.playerHeaderSeekBar.setMax(total);
|
||||||
bind.playerHeaderLayout.playerHeaderSeekBar.setProgress(progress);
|
headerBind.playerHeaderSeekBar.setProgress(progress);
|
||||||
|
|
||||||
bind.playerBodyLayout.playerBigSeekBar.setMax(total);
|
bodyBind.playerBigSeekBar.setMax(total);
|
||||||
bind.playerBodyLayout.playerBigSeekBar.setProgress(progress);
|
bodyBind.playerBigSeekBar.setProgress(progress);
|
||||||
|
|
||||||
bind.playerBodyLayout.playerBigSongTimeIn.setText(MusicUtil.getReadableDurationString(progress, true));
|
bodyBind.playerBigSongTimeIn.setText(MusicUtil.getReadableDurationString(progress, true));
|
||||||
bind.playerBodyLayout.playerBigSongDuration.setText(MusicUtil.getReadableDurationString(total, true));
|
bodyBind.playerBigSongDuration.setText(MusicUtil.getReadableDurationString(total, true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue