Edit Songs

This commit is contained in:
Fawkes100 2025-01-18 17:11:21 +01:00
parent cf9b66b648
commit d9b59ba07c
4 changed files with 52 additions and 4 deletions

View File

@ -10,7 +10,7 @@ import java.util.Objects;
@Entity @Entity
public class Song { public class Song {
@PrimaryKey @PrimaryKey(autoGenerate = true)
private int localID; private int localID;
private String serverID; private String serverID;

View File

@ -112,7 +112,10 @@ public class HomeFragment extends Fragment {
} }
public void onEditSong(Song song) { public void onEditSong(Song song) {
SongEditorDialog songEditorDialog = new SongEditorDialog();
songEditorDialog.setEditedSong(song);
songEditorDialog.setHomeViewModel(homeViewModel);
songEditorDialog.show(getParentFragmentManager(), "songEditorDialog");
} }
public void onDeleteSong(Song song) { public void onDeleteSong(Song song) {

View File

@ -63,4 +63,18 @@ public class HomeViewModel extends ViewModel {
allSongs.setValue(currentSongs); allSongs.setValue(currentSongs);
} }
} }
public void updateSong(Song editedSong) {
List<Song> currentSongs = allSongs.getValue();
if(currentSongs != null) {
for(int i = 0; i < currentSongs.size(); i++) {
if(currentSongs.get(i).getLocalID() == editedSong.getLocalID()) {
currentSongs.set(i, editedSong);
break;
}
}
songRepository.updateSong(editedSong);
allSongs.setValue(currentSongs);
}
}
} }

View File

@ -17,6 +17,7 @@ import android.view.ViewGroup;
import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProvider;
import com.stormtales.notevault.R; import com.stormtales.notevault.R;
import com.stormtales.notevault.data.entities.Song; import com.stormtales.notevault.data.entities.Song;
import com.stormtales.notevault.data.sync.SyncStatus;
import com.stormtales.notevault.ui.home.HomeViewModel; import com.stormtales.notevault.ui.home.HomeViewModel;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@ -27,6 +28,8 @@ public class SongEditorDialog extends DialogFragment {
private Uri[] noteSheetFiles; private Uri[] noteSheetFiles;
private HomeViewModel homeViewModel; private HomeViewModel homeViewModel;
private Song editedSong;
public SongEditorDialog() { public SongEditorDialog() {
// Required empty public constructor // Required empty public constructor
} }
@ -38,6 +41,8 @@ public class SongEditorDialog extends DialogFragment {
LayoutInflater inflater = LayoutInflater.from(getContext()); LayoutInflater inflater = LayoutInflater.from(getContext());
View dialogView = inflater.inflate(R.layout.fragment_song_editor_dialog, null); View dialogView = inflater.inflate(R.layout.fragment_song_editor_dialog, null);
dialogView.findViewById(R.id.btnCancel).setOnClickListener(v-> onCancel()); dialogView.findViewById(R.id.btnCancel).setOnClickListener(v-> onCancel());
dialogView.findViewById(R.id.btnSave).setOnClickListener(v -> onSave()); dialogView.findViewById(R.id.btnSave).setOnClickListener(v -> onSave());
@ -47,9 +52,22 @@ public class SongEditorDialog extends DialogFragment {
dialog = builder.create(); dialog = builder.create();
dialog.setCanceledOnTouchOutside(false); dialog.setCanceledOnTouchOutside(false);
return dialog; return dialog;
} }
@Override
public void onStart() {
super.onStart();
if(editedSong != null) {
((EditText) dialog.findViewById(R.id.etTitle)).setText(editedSong.getTitle());
((EditText) dialog.findViewById(R.id.etComposer)).setText(editedSong.getComposer());
((EditText) dialog.findViewById(R.id.etGenre)).setText(editedSong.getGenre());
((EditText) dialog.findViewById(R.id.etYear)).setText(String.valueOf(editedSong.getYear()));
}
}
private void onCancel() { private void onCancel() {
dialog.dismiss(); dialog.dismiss();
} }
@ -62,8 +80,17 @@ public class SongEditorDialog extends DialogFragment {
int releaseYear = year_string.isBlank()? 0 : Integer.parseInt(year_string); int releaseYear = year_string.isBlank()? 0 : Integer.parseInt(year_string);
String genre = ((EditText) dialog.findViewById(R.id.etGenre)).getText().toString(); String genre = ((EditText) dialog.findViewById(R.id.etGenre)).getText().toString();
Song song = new Song(title, composer, genre, releaseYear); if(editedSong != null) {
homeViewModel.addSong(song); editedSong.setTitle(title);
editedSong.setComposer(composer);
editedSong.setYear(releaseYear);
editedSong.setGenre(genre);
editedSong.setSyncStatus(SyncStatus.MODIFIED);
homeViewModel.updateSong(editedSong);
} else {
Song song = new Song(title, composer, genre, releaseYear);
homeViewModel.addSong(song);
}
dialog.dismiss(); dialog.dismiss();
@ -77,4 +104,8 @@ public class SongEditorDialog extends DialogFragment {
public void setHomeViewModel(HomeViewModel homeViewModel) { public void setHomeViewModel(HomeViewModel homeViewModel) {
this.homeViewModel = homeViewModel; this.homeViewModel = homeViewModel;
} }
public void setEditedSong(Song editedSong) {
this.editedSong = editedSong;
}
} }