nextNoteVault #23
@ -45,4 +45,5 @@ dependencies {
 | 
			
		||||
    androidTestImplementation(libs.ext.junit)
 | 
			
		||||
    androidTestImplementation(libs.espresso.core)
 | 
			
		||||
    annotationProcessor(libs.room.compiler)
 | 
			
		||||
    implementation("com.github.chrisbanes:PhotoView:2.3.0")
 | 
			
		||||
}
 | 
			
		||||
@ -23,6 +23,11 @@
 | 
			
		||||
                <category android:name="android.intent.category.LAUNCHER"/>
 | 
			
		||||
            </intent-filter>
 | 
			
		||||
        </activity>
 | 
			
		||||
 | 
			
		||||
        <activity android:name=".ui.sheetdisplay.NoteSheetDisplayActivity"
 | 
			
		||||
                  android:theme="@style/Theme.AppCompat.NoActionBar">
 | 
			
		||||
            <!-- Intent Filter hinzufügen, wenn Activity vom Launcher oder externen Apps aufgerufen werden soll -->
 | 
			
		||||
        </activity>
 | 
			
		||||
    </application>
 | 
			
		||||
 | 
			
		||||
</manifest>
 | 
			
		||||
@ -26,4 +26,7 @@ public interface SongDao {
 | 
			
		||||
 | 
			
		||||
    @Query("SELECT * FROM NoteSheet WHERE songID = :songID")
 | 
			
		||||
    List<NoteSheet> getNoteSheetsBySong(int songID);
 | 
			
		||||
 | 
			
		||||
    @Query("SELECT localFileName FROM NoteSheet WHERE songID = :songID")
 | 
			
		||||
    List<String> getNoteSheetFilesBySongID(int songID);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -76,4 +76,11 @@ public class SongRepository {
 | 
			
		||||
            songDao.deleteNoteSheets(noteSheets);
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void getNoteSheetFilesBySongID(int songID, Callback<List<String>> callback) {
 | 
			
		||||
        Executors.newSingleThreadExecutor().execute(()-> {
 | 
			
		||||
            List<String> noteSheetFiles = songDao.getNoteSheetFilesBySongID(songID);
 | 
			
		||||
            callback.onResult(noteSheetFiles);
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -24,6 +24,7 @@ import com.stormtales.notevault.R;
 | 
			
		||||
import com.stormtales.notevault.data.entities.Song;
 | 
			
		||||
import com.stormtales.notevault.data.repositories.SongRepository;
 | 
			
		||||
import com.stormtales.notevault.databinding.FragmentHomeBinding;
 | 
			
		||||
import com.stormtales.notevault.ui.sheetdisplay.NoteSheetDisplayActivity;
 | 
			
		||||
import com.stormtales.notevault.ui.songeditor.SongEditorDialog;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
@ -84,7 +85,7 @@ public class HomeFragment extends Fragment {
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        // RecyclerView einrichten
 | 
			
		||||
        songAdapter = new SongAdapter(new ArrayList<>(), this::onEditSong, this::onDeleteSong);
 | 
			
		||||
        songAdapter = new SongAdapter(new ArrayList<>(), this::onEditSong, this::onDeleteSong, this::onOpenSong);
 | 
			
		||||
        recyclerView.setAdapter(songAdapter);
 | 
			
		||||
        recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
 | 
			
		||||
        DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(recyclerView.getContext(), LinearLayoutManager.VERTICAL);
 | 
			
		||||
@ -121,4 +122,17 @@ public class HomeFragment extends Fragment {
 | 
			
		||||
    public void onDeleteSong(Song song) {
 | 
			
		||||
        this.homeViewModel.deleteSong(song);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void onOpenSong(Song song) {
 | 
			
		||||
        homeViewModel.getSongRepository().getNoteSheetFilesBySongID(song.getLocalID(), result -> {
 | 
			
		||||
            String[] noteSheetFiles = new String[result.size()];
 | 
			
		||||
            for(int i = 0; i < result.size(); i++) {
 | 
			
		||||
                noteSheetFiles[i] = result.get(i);
 | 
			
		||||
            }
 | 
			
		||||
            Intent intent = new Intent(getContext(), NoteSheetDisplayActivity.class);
 | 
			
		||||
            intent.putExtra("imageUris", noteSheetFiles);
 | 
			
		||||
            getContext().startActivity(intent);
 | 
			
		||||
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -81,4 +81,8 @@ public class HomeViewModel extends ViewModel {
 | 
			
		||||
            allSongs.setValue(currentSongs);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public SongRepository getSongRepository() {
 | 
			
		||||
        return songRepository;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -20,11 +20,13 @@ public class SongAdapter extends RecyclerView.Adapter<SongAdapter.SongViewHolder
 | 
			
		||||
    private List<Song> songList;
 | 
			
		||||
    private OnEditSongListener onEditSongListener;
 | 
			
		||||
    private OnDeleteSongListener onDeleteSongListener;
 | 
			
		||||
    private OnOpenSongListener onOpenSongListener;
 | 
			
		||||
 | 
			
		||||
    public SongAdapter(List<Song> songList, OnEditSongListener onEditSongListener, OnDeleteSongListener onDeleteSongListener) {
 | 
			
		||||
    public SongAdapter(List<Song> songList, OnEditSongListener onEditSongListener, OnDeleteSongListener onDeleteSongListener, OnOpenSongListener onOpenSongListener) {
 | 
			
		||||
        this.songList = songList;
 | 
			
		||||
        this.onEditSongListener = onEditSongListener;
 | 
			
		||||
        this.onDeleteSongListener = onDeleteSongListener;
 | 
			
		||||
        this.onOpenSongListener = onOpenSongListener;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void updateData(List<Song> songs) {
 | 
			
		||||
@ -37,7 +39,7 @@ public class SongAdapter extends RecyclerView.Adapter<SongAdapter.SongViewHolder
 | 
			
		||||
        Log.d("SongAdapter", "Data updated: " + this.songList.size());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static class SongViewHolder extends RecyclerView.ViewHolder {
 | 
			
		||||
    public class SongViewHolder extends RecyclerView.ViewHolder {
 | 
			
		||||
        TextView textYear, textComposition, textTitle;
 | 
			
		||||
        ImageButton editButton, deleteButton;
 | 
			
		||||
 | 
			
		||||
@ -48,6 +50,14 @@ public class SongAdapter extends RecyclerView.Adapter<SongAdapter.SongViewHolder
 | 
			
		||||
            textTitle = itemView.findViewById(R.id.text_title);
 | 
			
		||||
            editButton = itemView.findViewById(R.id.edit_song_button);
 | 
			
		||||
            deleteButton = itemView.findViewById(R.id.delete_song_button);
 | 
			
		||||
 | 
			
		||||
            textTitle.setOnClickListener(v -> {
 | 
			
		||||
                int position = getAdapterPosition();
 | 
			
		||||
                if (position != RecyclerView.NO_POSITION) {
 | 
			
		||||
                    Song song = songList.get(position);
 | 
			
		||||
                    onOpenSongListener.onOpenSong(song);
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -82,4 +92,8 @@ public class SongAdapter extends RecyclerView.Adapter<SongAdapter.SongViewHolder
 | 
			
		||||
    public interface OnDeleteSongListener {
 | 
			
		||||
        void onDeleteSong(Song song);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public interface OnOpenSongListener {
 | 
			
		||||
        void onOpenSong(Song song);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,51 @@
 | 
			
		||||
package com.stormtales.notevault.ui.sheetdisplay;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
import android.view.LayoutInflater;
 | 
			
		||||
import android.view.View;
 | 
			
		||||
import android.view.ViewGroup;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.recyclerview.widget.RecyclerView;
 | 
			
		||||
import com.github.chrisbanes.photoview.PhotoView;
 | 
			
		||||
import com.stormtales.notevault.R;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
public class ImagePagerAdapter extends RecyclerView.Adapter<ImagePagerAdapter.ImageViewHolder> {
 | 
			
		||||
    private final List<String> imageUris;
 | 
			
		||||
    private final Context context;
 | 
			
		||||
 | 
			
		||||
    public ImagePagerAdapter(Context context, List<String> imageUris) {
 | 
			
		||||
        this.context = context;
 | 
			
		||||
        this.imageUris = imageUris;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @NonNull
 | 
			
		||||
    @Override
 | 
			
		||||
    public ImageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
 | 
			
		||||
        View view = LayoutInflater.from(context).inflate(R.layout.item_image, parent, false);
 | 
			
		||||
        return new ImageViewHolder(view);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onBindViewHolder(@NonNull ImageViewHolder holder, int position) {
 | 
			
		||||
        Uri uri = Uri.parse(imageUris.get(position));
 | 
			
		||||
        holder.photoView.setImageURI(uri);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public int getItemCount() {
 | 
			
		||||
        return imageUris.size();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static class ImageViewHolder extends RecyclerView.ViewHolder {
 | 
			
		||||
        PhotoView photoView;
 | 
			
		||||
 | 
			
		||||
        ImageViewHolder(View itemView) {
 | 
			
		||||
            super(itemView);
 | 
			
		||||
            photoView = itemView.findViewById(R.id.photoView);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,31 @@
 | 
			
		||||
package com.stormtales.notevault.ui.sheetdisplay;
 | 
			
		||||
 | 
			
		||||
import android.content.Intent;
 | 
			
		||||
import android.os.Bundle;
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
import androidx.viewpager2.widget.ViewPager2;
 | 
			
		||||
import com.stormtales.notevault.R;
 | 
			
		||||
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
public class NoteSheetDisplayActivity extends AppCompatActivity {
 | 
			
		||||
    @Override
 | 
			
		||||
    protected void onCreate(Bundle savedInstanceState) {
 | 
			
		||||
        super.onCreate(savedInstanceState);
 | 
			
		||||
        setContentView(R.layout.activity_note_sheet_viewer); // Erstelle eine Layout-Datei
 | 
			
		||||
 | 
			
		||||
        ViewPager2 imageView = findViewById(R.id.viewPager); // Angenommen, du hast ein ImageView
 | 
			
		||||
 | 
			
		||||
        // Die URI aus dem Intent erhalten
 | 
			
		||||
        Intent intent = getIntent();
 | 
			
		||||
        String[] imageUris = intent.getStringArrayExtra("imageUris");
 | 
			
		||||
        if (imageUris != null) {
 | 
			
		||||
            List<String> uriList = Arrays.asList(imageUris);
 | 
			
		||||
            ImagePagerAdapter adapter = new ImagePagerAdapter(this, uriList);
 | 
			
		||||
            imageView.setAdapter(adapter); // Setze die URI in das ImageView
 | 
			
		||||
        } else {
 | 
			
		||||
            throw new NullPointerException();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										11
									
								
								app/src/main/res/layout/activity_note_sheet_viewer.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								app/src/main/res/layout/activity_note_sheet_viewer.xml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,11 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 | 
			
		||||
                android:layout_width="match_parent"
 | 
			
		||||
                android:layout_height="match_parent">
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    <androidx.viewpager2.widget.ViewPager2
 | 
			
		||||
            android:id="@+id/viewPager"
 | 
			
		||||
            android:layout_width="match_parent"
 | 
			
		||||
            android:layout_height="match_parent" />
 | 
			
		||||
</RelativeLayout>
 | 
			
		||||
							
								
								
									
										11
									
								
								app/src/main/res/layout/item_image.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								app/src/main/res/layout/item_image.xml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,11 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 | 
			
		||||
             android:layout_width="match_parent"
 | 
			
		||||
             android:layout_height="match_parent">
 | 
			
		||||
 | 
			
		||||
    <com.github.chrisbanes.photoview.PhotoView
 | 
			
		||||
            android:id="@+id/photoView"
 | 
			
		||||
            android:layout_width="match_parent"
 | 
			
		||||
            android:layout_height="match_parent"
 | 
			
		||||
            android:scaleType="fitCenter" />
 | 
			
		||||
</FrameLayout>
 | 
			
		||||
@ -16,6 +16,7 @@ dependencyResolutionManagement {
 | 
			
		||||
    repositories {
 | 
			
		||||
        google()
 | 
			
		||||
        mavenCentral()
 | 
			
		||||
        maven { url = uri("https://www.jitpack.io") }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user