diff --git a/src/Notesmaster/app/src/main/AndroidManifest.xml b/src/Notesmaster/app/src/main/AndroidManifest.xml index b4152a3..ff73964 100644 --- a/src/Notesmaster/app/src/main/AndroidManifest.xml +++ b/src/Notesmaster/app/src/main/AndroidManifest.xml @@ -110,6 +110,12 @@ android:exported="false" /> + + { if (getContext() == null) return; - // Query notes in CAPSULE folder - String selection = Notes.NoteColumns.PARENT_ID + "=?"; - String[] selectionArgs = new String[]{String.valueOf(Notes.ID_CAPSULE_FOLDER)}; - + // Query notes in CAPSULE folder. + // Join with Data table to get DATA3 (source package) Cursor cursor = getContext().getContentResolver().query( Notes.CONTENT_NOTE_URI, null, - selection, - selectionArgs, + Notes.NoteColumns.PARENT_ID + "=?", + new String[]{String.valueOf(Notes.ID_CAPSULE_FOLDER)}, Notes.NoteColumns.MODIFIED_DATE + " DESC" ); @@ -73,14 +90,18 @@ public class CapsuleListFragment extends Fragment { String snippet = cursor.getString(cursor.getColumnIndexOrThrow(Notes.NoteColumns.SNIPPET)); long modifiedDate = cursor.getLong(cursor.getColumnIndexOrThrow(Notes.NoteColumns.MODIFIED_DATE)); - // We need to fetch DATA3 (source) which is in DATA table. - // For performance, we might do a join or lazy load. - // For now, let's just use snippet and date. - // To get Source, we really should query DATA table or use a projection if CONTENT_NOTE_URI supports joining. - // NotesProvider usually joins. Let's check NoteColumns. - // Notes.DataColumns.DATA3 is NOT in NoteColumns. + // Try to get source from projection (if joined) or query separately + String source = ""; + try { + int sourceIdx = cursor.getColumnIndex(Notes.DataColumns.DATA3); + if (sourceIdx != -1) { + source = cursor.getString(sourceIdx); + } + } catch (Exception e) { + // Not joined, ignore for now or lazy load + } - items.add(new CapsuleItem(id, snippet, modifiedDate, "Loading source...")); + items.add(new CapsuleItem(id, snippet, modifiedDate, source)); } cursor.close(); } @@ -95,6 +116,13 @@ public class CapsuleListFragment extends Fragment { }).start(); } + private void openNoteEditor(long noteId) { + Intent intent = new Intent(getActivity(), NoteEditActivity.class); + intent.setAction(Intent.ACTION_VIEW); + intent.putExtra(Intent.EXTRA_UID, noteId); + startActivity(intent); + } + private static class CapsuleItem { long id; String summary; @@ -133,15 +161,14 @@ public class CapsuleListFragment extends Fragment { holder.tvTime.setText(sdf.format(new Date(item.time))); if (item.source != null && !item.source.isEmpty()) { - holder.tvSource.setText("Source: " + item.source); + holder.tvSource.setText(item.source); holder.tvSource.setVisibility(View.VISIBLE); } else { holder.tvSource.setVisibility(View.GONE); } holder.itemView.setOnClickListener(v -> { - // Open Note Edit - // We need to implement this + openNoteEditor(item.id); }); } diff --git a/src/Notesmaster/app/src/main/java/net/micode/notes/ui/NotesListActivity.java b/src/Notesmaster/app/src/main/java/net/micode/notes/ui/NotesListActivity.java index a58beb3..fa8b2de 100644 --- a/src/Notesmaster/app/src/main/java/net/micode/notes/ui/NotesListActivity.java +++ b/src/Notesmaster/app/src/main/java/net/micode/notes/ui/NotesListActivity.java @@ -368,6 +368,10 @@ public class NotesListActivity extends AppCompatActivity implements SidebarFragm @Override public void onExportSelected() { binding.drawerLayout.closeDrawer(GravityCompat.START); Toast.makeText(this, "导出功能待实现", Toast.LENGTH_SHORT).show(); } @Override public void onTemplateSelected() { binding.drawerLayout.closeDrawer(GravityCompat.START); viewModel.enterFolder(Notes.ID_TEMPLATE_FOLDER); } @Override public void onSettingsSelected() { binding.drawerLayout.closeDrawer(GravityCompat.START); startActivity(new Intent(this, SettingsActivity.class)); } + @Override public void onCapsuleSelected() { + binding.drawerLayout.closeDrawer(GravityCompat.START); + startActivity(new Intent(this, CapsuleListActivity.class)); + } @Override public void onCreateFolder() { binding.drawerLayout.closeDrawer(GravityCompat.START); /* Show dialog */ } @Override public void onCloseSidebar() { binding.drawerLayout.closeDrawer(GravityCompat.START); } @Override public void onRenameFolder(long folderId) { /* Handle rename */ } diff --git a/src/Notesmaster/app/src/main/java/net/micode/notes/ui/SidebarFragment.java b/src/Notesmaster/app/src/main/java/net/micode/notes/ui/SidebarFragment.java index f589a92..f61cd7d 100644 --- a/src/Notesmaster/app/src/main/java/net/micode/notes/ui/SidebarFragment.java +++ b/src/Notesmaster/app/src/main/java/net/micode/notes/ui/SidebarFragment.java @@ -71,6 +71,7 @@ public class SidebarFragment extends Fragment { private LinearLayout menuTemplates; private LinearLayout menuExport; private LinearLayout menuSettings; + private LinearLayout menuCapsule; private LinearLayout menuLogin; private LinearLayout menuLogout; @@ -106,6 +107,7 @@ public class SidebarFragment extends Fragment { void onExportSelected(); void onTemplateSelected(); void onSettingsSelected(); + void onCapsuleSelected(); void onCreateFolder(); void onCloseSidebar(); void onRenameFolder(long folderId); @@ -170,6 +172,7 @@ public class SidebarFragment extends Fragment { menuTemplates = view.findViewById(R.id.menu_templates); menuExport = view.findViewById(R.id.menu_export); menuSettings = view.findViewById(R.id.menu_settings); + menuCapsule = view.findViewById(R.id.menu_capsule); menuLogin = view.findViewById(R.id.menu_login); menuLogout = view.findViewById(R.id.menu_logout); @@ -237,6 +240,15 @@ public class SidebarFragment extends Fragment { } }); + if (menuCapsule != null) { + menuCapsule.setOnClickListener(v -> { + if (listener != null) { + listener.onCapsuleSelected(); + listener.onCloseSidebar(); + } + }); + } + menuLogin.setOnClickListener(v -> { if (listener != null) { listener.onLoginSelected(); diff --git a/src/Notesmaster/app/src/main/res/layout/activity_capsule_list.xml b/src/Notesmaster/app/src/main/res/layout/activity_capsule_list.xml new file mode 100644 index 0000000..244af55 --- /dev/null +++ b/src/Notesmaster/app/src/main/res/layout/activity_capsule_list.xml @@ -0,0 +1,5 @@ + + diff --git a/src/Notesmaster/app/src/main/res/layout/fragment_sidebar.xml b/src/Notesmaster/app/src/main/res/layout/fragment_sidebar.xml index 5d4d1b4..34683d4 100644 --- a/src/Notesmaster/app/src/main/res/layout/fragment_sidebar.xml +++ b/src/Notesmaster/app/src/main/res/layout/fragment_sidebar.xml @@ -163,6 +163,34 @@ + + + + + + + + + - + android:layout_marginHorizontal="12dp" + android:layout_marginVertical="6dp" + app:cardCornerRadius="16dp" + app:cardElevation="2dp" + app:cardBackgroundColor="@android:color/white"> - - - + android:orientation="vertical" + android:padding="16dp" + android:background="?android:attr/selectableItemBackground"> - + + + + + + + + + + + - +