From 4c3e4cae68916852ade088f99bd0303204f2d43f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8C=85=E5=B0=94=E4=BF=8A?= Date: Wed, 28 Jan 2026 10:38:04 +0800 Subject: [PATCH] merge --- src/Notesmaster/app/build.gradle.kts | 10 +++++- .../micode/notes/data/NotesRepository.java | 35 +++++++++++++++++++ .../micode/notes/ui/AlarmAlertActivity.java | 4 +-- .../micode/notes/ui/AlarmInitReceiver.java | 2 +- .../net/micode/notes/ui/NoteEditActivity.java | 2 +- .../micode/notes/ui/NotesListActivity.java | 13 +++++-- .../notes/viewmodel/NotesListViewModel.java | 26 ++++++++++++++ .../app/src/main/res/anim/slide_in_right.xml | 7 ++++ .../app/src/main/res/anim/slide_out_left.xml | 7 ++++ .../src/main/res/drawable/ic_menu_tasks.xml | 11 ++++++ .../src/main/res/layout/sidebar_layout.xml | 2 +- .../app/src/main/res/menu/note_list.xml | 2 +- .../app/src/main/res/values/strings.xml | 4 +-- 13 files changed, 114 insertions(+), 11 deletions(-) create mode 100644 src/Notesmaster/app/src/main/res/anim/slide_in_right.xml create mode 100644 src/Notesmaster/app/src/main/res/anim/slide_out_left.xml create mode 100644 src/Notesmaster/app/src/main/res/drawable/ic_menu_tasks.xml diff --git a/src/Notesmaster/app/build.gradle.kts b/src/Notesmaster/app/build.gradle.kts index f0dba31..295d7d2 100644 --- a/src/Notesmaster/app/build.gradle.kts +++ b/src/Notesmaster/app/build.gradle.kts @@ -15,7 +15,7 @@ android { defaultConfig { applicationId = "net.micode.notes" minSdk = 24 - targetSdk = 31 + targetSdk = 33 versionCode = 1 versionName = "1.0" @@ -53,7 +53,15 @@ dependencies { // RecyclerView依赖 implementation("androidx.recyclerview:recyclerview:1.3.2") implementation("androidx.cursoradapter:cursoradapter:1.0.0") + + // Preference依赖 + implementation("androidx.preference:preference:1.2.1") + + // Palette依赖 + implementation("androidx.palette:palette:1.0.0") + testImplementation(libs.junit) + testImplementation("org.mockito:mockito-core:5.7.0") androidTestImplementation(libs.ext.junit) androidTestImplementation(libs.espresso.core) } diff --git a/src/Notesmaster/app/src/main/java/net/micode/notes/data/NotesRepository.java b/src/Notesmaster/app/src/main/java/net/micode/notes/data/NotesRepository.java index 0472e32..272ca2b 100644 --- a/src/Notesmaster/app/src/main/java/net/micode/notes/data/NotesRepository.java +++ b/src/Notesmaster/app/src/main/java/net/micode/notes/data/NotesRepository.java @@ -1356,4 +1356,39 @@ public class NotesRepository { } return title; } + + /** + * 获取待办任务列表 + * + * @param callback 回调接口,返回任务列表 + */ + public void getTasks(Callback> callback) { + executor.execute(() -> { + try { + List tasks = new ArrayList<>(); + Cursor cursor = contentResolver.query( + Notes.CONTENT_NOTE_URI, + null, + NoteColumns.TYPE + " = ? AND " + NoteColumns.PARENT_ID + " != ?", + new String[]{String.valueOf(Notes.TYPE_TASK), String.valueOf(Notes.ID_TRASH_FOLER)}, + NoteColumns.MODIFIED_DATE + " DESC" + ); + + if (cursor != null) { + try { + while (cursor.moveToNext()) { + tasks.add(noteFromCursor(cursor)); + } + } finally { + cursor.close(); + } + } + callback.onSuccess(tasks); + Log.d(TAG, "getTasks: loaded " + tasks.size() + " tasks"); + } catch (Exception e) { + Log.e(TAG, "Failed to load tasks", e); + callback.onError(e); + } + }); + } } diff --git a/src/Notesmaster/app/src/main/java/net/micode/notes/ui/AlarmAlertActivity.java b/src/Notesmaster/app/src/main/java/net/micode/notes/ui/AlarmAlertActivity.java index 0ae8cab..9aec4ef 100644 --- a/src/Notesmaster/app/src/main/java/net/micode/notes/ui/AlarmAlertActivity.java +++ b/src/Notesmaster/app/src/main/java/net/micode/notes/ui/AlarmAlertActivity.java @@ -218,8 +218,8 @@ public class AlarmAlertActivity extends Activity implements OnClickListener, OnD case DialogInterface.BUTTON_NEGATIVE: Intent intent; if (mNoteType == Notes.TYPE_TASK) { - // 如果是待办任务,跳转到任务编辑活动 - intent = new Intent(this, TaskEditActivity.class); + // 如果是待办任务,跳转到笔记编辑活动(任务功能已合并) + intent = new Intent(this, NoteEditActivity.class); intent.putExtra(Intent.EXTRA_UID, mNoteId); } else { // 创建跳转到笔记编辑活动的Intent diff --git a/src/Notesmaster/app/src/main/java/net/micode/notes/ui/AlarmInitReceiver.java b/src/Notesmaster/app/src/main/java/net/micode/notes/ui/AlarmInitReceiver.java index c00b5c6..0693066 100644 --- a/src/Notesmaster/app/src/main/java/net/micode/notes/ui/AlarmInitReceiver.java +++ b/src/Notesmaster/app/src/main/java/net/micode/notes/ui/AlarmInitReceiver.java @@ -88,7 +88,7 @@ public class AlarmInitReceiver extends BroadcastReceiver { sender.setData(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, c.getLong(COLUMN_ID))); // 创建PendingIntent,它封装了上述Intent,可以在指定时间触发 - PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, sender, 0); + PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, sender, PendingIntent.FLAG_IMMUTABLE); // 获取系统闹钟服务 AlarmManager alermManager = (AlarmManager) context diff --git a/src/Notesmaster/app/src/main/java/net/micode/notes/ui/NoteEditActivity.java b/src/Notesmaster/app/src/main/java/net/micode/notes/ui/NoteEditActivity.java index 221c485..3e8a941 100644 --- a/src/Notesmaster/app/src/main/java/net/micode/notes/ui/NoteEditActivity.java +++ b/src/Notesmaster/app/src/main/java/net/micode/notes/ui/NoteEditActivity.java @@ -1156,7 +1156,7 @@ public class NoteEditActivity extends AppCompatActivity implements OnClickListen if (mWorkingNote.getNoteId() > 0) { Intent intent = new Intent(this, AlarmReceiver.class); intent.setData(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, mWorkingNote.getNoteId())); - PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0); + PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_IMMUTABLE); AlarmManager alarmManager = ((AlarmManager) getSystemService(ALARM_SERVICE)); showAlertHeader(); if(!set) { 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 f89a549..89915cd 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 @@ -802,8 +802,8 @@ public class NotesListActivity extends AppCompatActivity switch (itemId) { case R.id.menu_tasks: - startActivity(new Intent(this, TaskListActivity.class)); - overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left); + // 显示待办任务列表 + loadTasks(); return true; case R.id.menu_search: Intent searchIntent = new Intent(this, NoteSearchActivity.class); @@ -1229,6 +1229,15 @@ public class NotesListActivity extends AppCompatActivity } } + /** + * 加载待办任务列表 + */ + private void loadTasks() { + // 加载TYPE_TASK类型的笔记作为待办任务 + viewModel.loadTasks(); + Toast.makeText(this, "显示待办任务", Toast.LENGTH_SHORT).show(); + } + @Override protected void onDestroy() { super.onDestroy(); diff --git a/src/Notesmaster/app/src/main/java/net/micode/notes/viewmodel/NotesListViewModel.java b/src/Notesmaster/app/src/main/java/net/micode/notes/viewmodel/NotesListViewModel.java index ef1e243..e6f83ae 100644 --- a/src/Notesmaster/app/src/main/java/net/micode/notes/viewmodel/NotesListViewModel.java +++ b/src/Notesmaster/app/src/main/java/net/micode/notes/viewmodel/NotesListViewModel.java @@ -731,6 +731,9 @@ public class NotesListViewModel extends ViewModel { // 这里假设是从模板列表点击进入,则应用到根目录(或默认目录) // 更好的逻辑是:applyTemplate(templateId, Notes.ID_ROOT_FOLDER) repository.applyTemplate(templateId, Notes.ID_ROOT_FOLDER, callback); + } + + /** * 重命名文件夹 *

* 重命名指定文件夹,并刷新侧栏 @@ -845,6 +848,29 @@ public class NotesListViewModel extends ViewModel { } } + public void loadTasks() { + isLoading.postValue(true); + errorMessage.postValue(null); + currentFolderId = -5; + + repository.getTasks(new NotesRepository.Callback>() { + @Override + public void onSuccess(List tasks) { + isLoading.postValue(false); + notesLiveData.postValue(tasks); + Log.d(TAG, "Loaded " + tasks.size() + " tasks"); + } + + @Override + public void onError(Exception error) { + isLoading.postValue(false); + String message = "加载待办任务失败: " + error.getMessage(); + errorMessage.postValue(message); + Log.e(TAG, message, error); + } + }); + } + /** * ViewModel销毁时的清理 *

diff --git a/src/Notesmaster/app/src/main/res/anim/slide_in_right.xml b/src/Notesmaster/app/src/main/res/anim/slide_in_right.xml new file mode 100644 index 0000000..4433578 --- /dev/null +++ b/src/Notesmaster/app/src/main/res/anim/slide_in_right.xml @@ -0,0 +1,7 @@ + + + + diff --git a/src/Notesmaster/app/src/main/res/anim/slide_out_left.xml b/src/Notesmaster/app/src/main/res/anim/slide_out_left.xml new file mode 100644 index 0000000..5e53253 --- /dev/null +++ b/src/Notesmaster/app/src/main/res/anim/slide_out_left.xml @@ -0,0 +1,7 @@ + + + + diff --git a/src/Notesmaster/app/src/main/res/drawable/ic_menu_tasks.xml b/src/Notesmaster/app/src/main/res/drawable/ic_menu_tasks.xml new file mode 100644 index 0000000..9193873 --- /dev/null +++ b/src/Notesmaster/app/src/main/res/drawable/ic_menu_tasks.xml @@ -0,0 +1,11 @@ + + + + diff --git a/src/Notesmaster/app/src/main/res/layout/sidebar_layout.xml b/src/Notesmaster/app/src/main/res/layout/sidebar_layout.xml index 79d28b6..d79b9bd 100644 --- a/src/Notesmaster/app/src/main/res/layout/sidebar_layout.xml +++ b/src/Notesmaster/app/src/main/res/layout/sidebar_layout.xml @@ -143,7 +143,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="16dp" - android:drawableStart="@drawable/ic_menu_notes" + android:drawableStart="@android:drawable/ic_menu_edit" android:drawablePadding="12dp" android:text="@string/menu_templates" android:textSize="16sp" diff --git a/src/Notesmaster/app/src/main/res/menu/note_list.xml b/src/Notesmaster/app/src/main/res/menu/note_list.xml index 95135a1..8ab5a78 100644 --- a/src/Notesmaster/app/src/main/res/menu/note_list.xml +++ b/src/Notesmaster/app/src/main/res/menu/note_list.xml @@ -20,7 +20,7 @@ diff --git a/src/Notesmaster/app/src/main/res/values/strings.xml b/src/Notesmaster/app/src/main/res/values/strings.xml index 3fcb520..a054c8b 100644 --- a/src/Notesmaster/app/src/main/res/values/strings.xml +++ b/src/Notesmaster/app/src/main/res/values/strings.xml @@ -64,6 +64,7 @@ Delete folder Change folder name The folder %1$s exist, please rename + Tasks Rename folder @@ -187,7 +188,6 @@ Save as template Picture Rich Text - Restore Delete Forever - +