Display Concert Songs
This commit is contained in:
parent
706cff79bf
commit
eac3919710
@ -1,21 +1,43 @@
|
|||||||
package core.notevault.ui.gallery.detail;
|
package core.notevault.ui.gallery.detail;
|
||||||
|
|
||||||
|
import android.os.AsyncTask;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.util.Log;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
|
import androidx.lifecycle.ViewModelProvider;
|
||||||
|
import androidx.recyclerview.widget.DividerItemDecoration;
|
||||||
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
import androidx.room.util.ViewInfo;
|
||||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||||
import core.notevault.data.Concert;
|
import core.notevault.data.Concert;
|
||||||
|
import core.notevault.data.MusicDatabase;
|
||||||
|
import core.notevault.data.MusicNote;
|
||||||
|
import core.notevault.data.MusicNoteDAO;
|
||||||
import core.notevault.databinding.FragmentConcertDetailBinding;
|
import core.notevault.databinding.FragmentConcertDetailBinding;
|
||||||
|
import core.notevault.ui.home.NoteSongAdapter;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class ConcertDetailFragment extends Fragment {
|
public class ConcertDetailFragment extends Fragment {
|
||||||
|
|
||||||
|
public interface OnConcertSongsLoadedListener {
|
||||||
|
void onSongsLoaded(List<MusicNote> songs);
|
||||||
|
}
|
||||||
|
|
||||||
private FragmentConcertDetailBinding binding;
|
private FragmentConcertDetailBinding binding;
|
||||||
private Concert concert;
|
private Concert concert;
|
||||||
|
private ConcertDetailViewModel concertDetailViewModel;
|
||||||
|
private NoteSongAdapter noteSongAdapter;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
|
concertDetailViewModel = new ViewModelProvider(this).get(ConcertDetailViewModel.class);
|
||||||
|
|
||||||
binding = FragmentConcertDetailBinding.inflate(inflater, container, false);
|
binding = FragmentConcertDetailBinding.inflate(inflater, container, false);
|
||||||
int concertId = getArguments().getInt("concertID");
|
int concertId = getArguments().getInt("concertID");
|
||||||
String concertTitle = getArguments().getString("concertTitle");
|
String concertTitle = getArguments().getString("concertTitle");
|
||||||
@ -25,6 +47,14 @@ public class ConcertDetailFragment extends Fragment {
|
|||||||
binding.textConcertDetailsTitle.setText(concertTitle);
|
binding.textConcertDetailsTitle.setText(concertTitle);
|
||||||
binding.textConcertDetailsDate.setText(concertDate);
|
binding.textConcertDetailsDate.setText(concertDate);
|
||||||
|
|
||||||
|
RecyclerView recyclerView = binding.noteRecyclerView;
|
||||||
|
noteSongAdapter = new NoteSongAdapter(this::deleteSongFromConcert);
|
||||||
|
recyclerView.setAdapter(noteSongAdapter);
|
||||||
|
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
|
||||||
|
|
||||||
|
DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(recyclerView.getContext(), LinearLayoutManager.VERTICAL);
|
||||||
|
recyclerView.addItemDecoration(dividerItemDecoration);
|
||||||
|
|
||||||
FloatingActionButton fab = binding.addSongConcert;
|
FloatingActionButton fab = binding.addSongConcert;
|
||||||
fab.setOnClickListener(view -> {
|
fab.setOnClickListener(view -> {
|
||||||
ConcertSongSelector concertSongSelector = new ConcertSongSelector();
|
ConcertSongSelector concertSongSelector = new ConcertSongSelector();
|
||||||
@ -39,8 +69,40 @@ public class ConcertDetailFragment extends Fragment {
|
|||||||
concertSongSelector.show(getParentFragmentManager(), ConcertSongSelector.TAG);
|
concertSongSelector.show(getParentFragmentManager(), ConcertSongSelector.TAG);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
concertDetailViewModel.getConcertSongs().observe(getViewLifecycleOwner(), songs -> {
|
||||||
|
noteSongAdapter.updateSongTitles(songs);
|
||||||
|
});
|
||||||
|
|
||||||
|
new LoadConcertSongsTask(concertId, songs -> {
|
||||||
|
this.concertDetailViewModel.setConcertSongs(songs);
|
||||||
|
}).execute();
|
||||||
|
|
||||||
return binding.getRoot();
|
return binding.getRoot();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void deleteSongFromConcert(MusicNote musicNote) {
|
||||||
|
this.concertDetailViewModel.deleteConcertSong(musicNote);
|
||||||
|
}
|
||||||
|
|
||||||
|
private class LoadConcertSongsTask extends AsyncTask<Void, Void, List<MusicNote>> {
|
||||||
|
private final int concertID;
|
||||||
|
private final OnConcertSongsLoadedListener listener;
|
||||||
|
|
||||||
|
public LoadConcertSongsTask(int concertID, OnConcertSongsLoadedListener listener) {
|
||||||
|
this.concertID = concertID;
|
||||||
|
this.listener = listener;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected List<MusicNote> doInBackground(Void... voids) {
|
||||||
|
MusicDatabase db = MusicDatabase.getDatabase(getContext());
|
||||||
|
return db.musicNoteDao().getAllMusicNotesOfConcert(concertID);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostExecute(List<MusicNote> songs) {
|
||||||
|
Log.d("ConcertDetailFragment", "Loaded Concertsongs: " + songs.size());
|
||||||
|
listener.onSongsLoaded(songs);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,41 @@
|
|||||||
|
package core.notevault.ui.gallery.detail;
|
||||||
|
|
||||||
|
import androidx.lifecycle.LiveData;
|
||||||
|
import androidx.lifecycle.MutableLiveData;
|
||||||
|
import androidx.lifecycle.ViewModel;
|
||||||
|
import core.notevault.data.MusicNote;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class ConcertDetailViewModel extends ViewModel {
|
||||||
|
private final MutableLiveData<List<MusicNote>> concertSongs;
|
||||||
|
|
||||||
|
public ConcertDetailViewModel() {
|
||||||
|
this.concertSongs = new MutableLiveData<>(new ArrayList<>());
|
||||||
|
}
|
||||||
|
|
||||||
|
public LiveData<List<MusicNote>> getConcertSongs() {
|
||||||
|
return concertSongs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setConcertSongs(List<MusicNote> concertSongs) {
|
||||||
|
this.concertSongs.setValue(concertSongs);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteConcertSong(MusicNote note) {
|
||||||
|
List<MusicNote> currentConcertSongs = concertSongs.getValue();
|
||||||
|
if(currentConcertSongs != null) {
|
||||||
|
currentConcertSongs.remove(note);
|
||||||
|
this.concertSongs.setValue(currentConcertSongs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addConcertSongs(List<MusicNote> concertSongs) {
|
||||||
|
List<MusicNote> currentConcertSongs = this.concertSongs.getValue();
|
||||||
|
if(currentConcertSongs != null) {
|
||||||
|
currentConcertSongs.addAll(concertSongs);
|
||||||
|
this.concertSongs.setValue(currentConcertSongs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -44,8 +44,13 @@
|
|||||||
</androidx.cardview.widget.CardView>
|
</androidx.cardview.widget.CardView>
|
||||||
|
|
||||||
<!-- Hier können weitere Details hinzugefügt werden -->
|
<!-- Hier können weitere Details hinzugefügt werden -->
|
||||||
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
|
android:id="@+id/note_recycler_view"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_above="@+id/add_song_concert"/>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||||
android:src="@drawable/add_24dp_e8eaed_fill0_wght400_grad0_opsz24"
|
android:src="@drawable/add_24dp_e8eaed_fill0_wght400_grad0_opsz24"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
|
Loading…
Reference in New Issue
Block a user