Display Concert Songs
This commit is contained in:
		
							parent
							
								
									706cff79bf
								
							
						
					
					
						commit
						eac3919710
					
				@ -1,21 +1,43 @@
 | 
			
		||||
package core.notevault.ui.gallery.detail;
 | 
			
		||||
 | 
			
		||||
import android.os.AsyncTask;
 | 
			
		||||
import android.os.Bundle;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
import android.view.LayoutInflater;
 | 
			
		||||
import android.view.View;
 | 
			
		||||
import android.view.ViewGroup;
 | 
			
		||||
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 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.ui.home.NoteSongAdapter;
 | 
			
		||||
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
public class ConcertDetailFragment extends Fragment {
 | 
			
		||||
 | 
			
		||||
    public interface OnConcertSongsLoadedListener {
 | 
			
		||||
        void onSongsLoaded(List<MusicNote> songs);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private FragmentConcertDetailBinding binding;
 | 
			
		||||
    private Concert concert;
 | 
			
		||||
    private ConcertDetailViewModel concertDetailViewModel;
 | 
			
		||||
    private NoteSongAdapter noteSongAdapter;
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
 | 
			
		||||
        concertDetailViewModel = new ViewModelProvider(this).get(ConcertDetailViewModel.class);
 | 
			
		||||
 | 
			
		||||
        binding = FragmentConcertDetailBinding.inflate(inflater, container, false);
 | 
			
		||||
        int concertId = getArguments().getInt("concertID");
 | 
			
		||||
        String concertTitle = getArguments().getString("concertTitle");
 | 
			
		||||
@ -25,6 +47,14 @@ public class ConcertDetailFragment extends Fragment {
 | 
			
		||||
        binding.textConcertDetailsTitle.setText(concertTitle);
 | 
			
		||||
        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;
 | 
			
		||||
        fab.setOnClickListener(view -> {
 | 
			
		||||
            ConcertSongSelector concertSongSelector = new ConcertSongSelector();
 | 
			
		||||
@ -39,8 +69,40 @@ public class ConcertDetailFragment extends Fragment {
 | 
			
		||||
            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();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    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>
 | 
			
		||||
 | 
			
		||||
        <!-- 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>
 | 
			
		||||
 | 
			
		||||
    <com.google.android.material.floatingactionbutton.FloatingActionButton
 | 
			
		||||
            android:src="@drawable/add_24dp_e8eaed_fill0_wght400_grad0_opsz24"
 | 
			
		||||
            android:layout_width="wrap_content"
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user