diff --git a/doc/ui包解析.docx b/doc/ui包解析.docx
new file mode 100644
index 00000000..4342c584
Binary files /dev/null and b/doc/ui包解析.docx differ
diff --git a/src/.gradle/8.0/executionHistory/executionHistory.bin b/src/.gradle/8.0/executionHistory/executionHistory.bin
index f7e5d141..0c54a2dc 100644
Binary files a/src/.gradle/8.0/executionHistory/executionHistory.bin and b/src/.gradle/8.0/executionHistory/executionHistory.bin differ
diff --git a/src/.gradle/8.0/executionHistory/executionHistory.lock b/src/.gradle/8.0/executionHistory/executionHistory.lock
index 27e4bcfe..b8aadfe9 100644
Binary files a/src/.gradle/8.0/executionHistory/executionHistory.lock and b/src/.gradle/8.0/executionHistory/executionHistory.lock differ
diff --git a/src/.gradle/8.0/fileHashes/fileHashes.bin b/src/.gradle/8.0/fileHashes/fileHashes.bin
index a5c1a8e7..32e73d15 100644
Binary files a/src/.gradle/8.0/fileHashes/fileHashes.bin and b/src/.gradle/8.0/fileHashes/fileHashes.bin differ
diff --git a/src/.gradle/8.0/fileHashes/fileHashes.lock b/src/.gradle/8.0/fileHashes/fileHashes.lock
index fc2f3ee9..d2f884a7 100644
Binary files a/src/.gradle/8.0/fileHashes/fileHashes.lock and b/src/.gradle/8.0/fileHashes/fileHashes.lock differ
diff --git a/src/.gradle/8.0/fileHashes/resourceHashesCache.bin b/src/.gradle/8.0/fileHashes/resourceHashesCache.bin
index 50576676..aa84132a 100644
Binary files a/src/.gradle/8.0/fileHashes/resourceHashesCache.bin and b/src/.gradle/8.0/fileHashes/resourceHashesCache.bin differ
diff --git a/src/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/src/.gradle/buildOutputCleanup/buildOutputCleanup.lock
index 8cacd7a9..89fb25b7 100644
Binary files a/src/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/src/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/src/.gradle/buildOutputCleanup/outputFiles.bin b/src/.gradle/buildOutputCleanup/outputFiles.bin
index de7ccaa0..0e153733 100644
Binary files a/src/.gradle/buildOutputCleanup/outputFiles.bin and b/src/.gradle/buildOutputCleanup/outputFiles.bin differ
diff --git a/src/.gradle/file-system.probe b/src/.gradle/file-system.probe
index 6c9ecda3..7128678b 100644
Binary files a/src/.gradle/file-system.probe and b/src/.gradle/file-system.probe differ
diff --git a/src/.idea/vcs.xml b/src/.idea/vcs.xml
new file mode 100644
index 00000000..6c0b8635
--- /dev/null
+++ b/src/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/build/intermediates/apk/debug/app-debug.apk b/src/app/build/intermediates/apk/debug/app-debug.apk
index 1f614d97..86b6ae3d 100644
Binary files a/src/app/build/intermediates/apk/debug/app-debug.apk and b/src/app/build/intermediates/apk/debug/app-debug.apk differ
diff --git a/src/app/build/intermediates/apk_ide_redirect_file/debug/redirect.txt b/src/app/build/intermediates/apk_ide_redirect_file/debug/redirect.txt
index 46dacc65..66652a54 100644
--- a/src/app/build/intermediates/apk_ide_redirect_file/debug/redirect.txt
+++ b/src/app/build/intermediates/apk_ide_redirect_file/debug/redirect.txt
@@ -1,2 +1,2 @@
#- File Locator -
-listingFile=../../apk/debug/output-metadata.json
+listingFile=../../../outputs/apk/debug/output-metadata.json
diff --git a/src/app/build/intermediates/compile_app_classes_jar/debug/classes.jar b/src/app/build/intermediates/compile_app_classes_jar/debug/classes.jar
index 2455c6bd..f047be3e 100644
Binary files a/src/app/build/intermediates/compile_app_classes_jar/debug/classes.jar and b/src/app/build/intermediates/compile_app_classes_jar/debug/classes.jar differ
diff --git a/src/app/build/intermediates/desugar_graph/debug/out/currentProject/dirs_bucket_0/graph.bin b/src/app/build/intermediates/desugar_graph/debug/out/currentProject/dirs_bucket_0/graph.bin
index 601f245f..9bb41ec2 100644
Binary files a/src/app/build/intermediates/desugar_graph/debug/out/currentProject/dirs_bucket_0/graph.bin and b/src/app/build/intermediates/desugar_graph/debug/out/currentProject/dirs_bucket_0/graph.bin differ
diff --git a/src/app/build/intermediates/desugar_graph/debug/out/currentProject/dirs_bucket_1/graph.bin b/src/app/build/intermediates/desugar_graph/debug/out/currentProject/dirs_bucket_1/graph.bin
index 601f245f..4d9e3b63 100644
Binary files a/src/app/build/intermediates/desugar_graph/debug/out/currentProject/dirs_bucket_1/graph.bin and b/src/app/build/intermediates/desugar_graph/debug/out/currentProject/dirs_bucket_1/graph.bin differ
diff --git a/src/app/build/intermediates/desugar_graph/debug/out/currentProject/dirs_bucket_4/graph.bin b/src/app/build/intermediates/desugar_graph/debug/out/currentProject/dirs_bucket_4/graph.bin
index 601f245f..d2ee095e 100644
Binary files a/src/app/build/intermediates/desugar_graph/debug/out/currentProject/dirs_bucket_4/graph.bin and b/src/app/build/intermediates/desugar_graph/debug/out/currentProject/dirs_bucket_4/graph.bin differ
diff --git a/src/app/build/intermediates/desugar_graph/debug/out/currentProject/dirs_bucket_5/graph.bin b/src/app/build/intermediates/desugar_graph/debug/out/currentProject/dirs_bucket_5/graph.bin
index 601f245f..e6cc2368 100644
Binary files a/src/app/build/intermediates/desugar_graph/debug/out/currentProject/dirs_bucket_5/graph.bin and b/src/app/build/intermediates/desugar_graph/debug/out/currentProject/dirs_bucket_5/graph.bin differ
diff --git a/src/app/build/intermediates/desugar_graph/debug/out/currentProject/dirs_bucket_6/graph.bin b/src/app/build/intermediates/desugar_graph/debug/out/currentProject/dirs_bucket_6/graph.bin
index 601f245f..212ce34d 100644
Binary files a/src/app/build/intermediates/desugar_graph/debug/out/currentProject/dirs_bucket_6/graph.bin and b/src/app/build/intermediates/desugar_graph/debug/out/currentProject/dirs_bucket_6/graph.bin differ
diff --git a/src/app/build/intermediates/desugar_graph/debug/out/currentProject/dirs_bucket_7/graph.bin b/src/app/build/intermediates/desugar_graph/debug/out/currentProject/dirs_bucket_7/graph.bin
index 601f245f..9e070038 100644
Binary files a/src/app/build/intermediates/desugar_graph/debug/out/currentProject/dirs_bucket_7/graph.bin and b/src/app/build/intermediates/desugar_graph/debug/out/currentProject/dirs_bucket_7/graph.bin differ
diff --git a/src/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_b16db364d1a26ed4b60d0403bbc4d120b02b7bcd6879643e8bdf2d4a9e6b4a21_bucket_0/graph.bin b/src/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_2778199c0c78a45ff0a364763681ed924c78b409deceb1a49b4e16b734e23fad_bucket_0/graph.bin
similarity index 100%
rename from src/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_b16db364d1a26ed4b60d0403bbc4d120b02b7bcd6879643e8bdf2d4a9e6b4a21_bucket_0/graph.bin
rename to src/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_2778199c0c78a45ff0a364763681ed924c78b409deceb1a49b4e16b734e23fad_bucket_0/graph.bin
diff --git a/src/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_b16db364d1a26ed4b60d0403bbc4d120b02b7bcd6879643e8bdf2d4a9e6b4a21_bucket_1/graph.bin b/src/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_2778199c0c78a45ff0a364763681ed924c78b409deceb1a49b4e16b734e23fad_bucket_1/graph.bin
similarity index 100%
rename from src/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_b16db364d1a26ed4b60d0403bbc4d120b02b7bcd6879643e8bdf2d4a9e6b4a21_bucket_1/graph.bin
rename to src/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_2778199c0c78a45ff0a364763681ed924c78b409deceb1a49b4e16b734e23fad_bucket_1/graph.bin
diff --git a/src/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_b16db364d1a26ed4b60d0403bbc4d120b02b7bcd6879643e8bdf2d4a9e6b4a21_bucket_2/graph.bin b/src/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_2778199c0c78a45ff0a364763681ed924c78b409deceb1a49b4e16b734e23fad_bucket_2/graph.bin
similarity index 100%
rename from src/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_b16db364d1a26ed4b60d0403bbc4d120b02b7bcd6879643e8bdf2d4a9e6b4a21_bucket_2/graph.bin
rename to src/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_2778199c0c78a45ff0a364763681ed924c78b409deceb1a49b4e16b734e23fad_bucket_2/graph.bin
diff --git a/src/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_b16db364d1a26ed4b60d0403bbc4d120b02b7bcd6879643e8bdf2d4a9e6b4a21_bucket_3/graph.bin b/src/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_2778199c0c78a45ff0a364763681ed924c78b409deceb1a49b4e16b734e23fad_bucket_3/graph.bin
similarity index 100%
rename from src/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_b16db364d1a26ed4b60d0403bbc4d120b02b7bcd6879643e8bdf2d4a9e6b4a21_bucket_3/graph.bin
rename to src/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_2778199c0c78a45ff0a364763681ed924c78b409deceb1a49b4e16b734e23fad_bucket_3/graph.bin
diff --git a/src/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_b16db364d1a26ed4b60d0403bbc4d120b02b7bcd6879643e8bdf2d4a9e6b4a21_bucket_4/graph.bin b/src/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_2778199c0c78a45ff0a364763681ed924c78b409deceb1a49b4e16b734e23fad_bucket_4/graph.bin
similarity index 100%
rename from src/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_b16db364d1a26ed4b60d0403bbc4d120b02b7bcd6879643e8bdf2d4a9e6b4a21_bucket_4/graph.bin
rename to src/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_2778199c0c78a45ff0a364763681ed924c78b409deceb1a49b4e16b734e23fad_bucket_4/graph.bin
diff --git a/src/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_b16db364d1a26ed4b60d0403bbc4d120b02b7bcd6879643e8bdf2d4a9e6b4a21_bucket_5/graph.bin b/src/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_2778199c0c78a45ff0a364763681ed924c78b409deceb1a49b4e16b734e23fad_bucket_5/graph.bin
similarity index 100%
rename from src/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_b16db364d1a26ed4b60d0403bbc4d120b02b7bcd6879643e8bdf2d4a9e6b4a21_bucket_5/graph.bin
rename to src/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_2778199c0c78a45ff0a364763681ed924c78b409deceb1a49b4e16b734e23fad_bucket_5/graph.bin
diff --git a/src/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_b16db364d1a26ed4b60d0403bbc4d120b02b7bcd6879643e8bdf2d4a9e6b4a21_bucket_6/graph.bin b/src/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_2778199c0c78a45ff0a364763681ed924c78b409deceb1a49b4e16b734e23fad_bucket_6/graph.bin
similarity index 100%
rename from src/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_b16db364d1a26ed4b60d0403bbc4d120b02b7bcd6879643e8bdf2d4a9e6b4a21_bucket_6/graph.bin
rename to src/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_2778199c0c78a45ff0a364763681ed924c78b409deceb1a49b4e16b734e23fad_bucket_6/graph.bin
diff --git a/src/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_b16db364d1a26ed4b60d0403bbc4d120b02b7bcd6879643e8bdf2d4a9e6b4a21_bucket_7/graph.bin b/src/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_2778199c0c78a45ff0a364763681ed924c78b409deceb1a49b4e16b734e23fad_bucket_7/graph.bin
similarity index 100%
rename from src/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_b16db364d1a26ed4b60d0403bbc4d120b02b7bcd6879643e8bdf2d4a9e6b4a21_bucket_7/graph.bin
rename to src/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_2778199c0c78a45ff0a364763681ed924c78b409deceb1a49b4e16b734e23fad_bucket_7/graph.bin
diff --git a/src/app/build/intermediates/desugar_graph/debugAndroidTest/out/currentProject/jar_0ea32af53159dfaf655bd3c4c546210ca958736690d3a485d0045f055459f52a_bucket_0/graph.bin b/src/app/build/intermediates/desugar_graph/debugAndroidTest/out/currentProject/jar_dc600c242537ef504be38778123e7bf5e82c56e075b125aa5b4ca74d0cbe0320_bucket_0/graph.bin
similarity index 100%
rename from src/app/build/intermediates/desugar_graph/debugAndroidTest/out/currentProject/jar_0ea32af53159dfaf655bd3c4c546210ca958736690d3a485d0045f055459f52a_bucket_0/graph.bin
rename to src/app/build/intermediates/desugar_graph/debugAndroidTest/out/currentProject/jar_dc600c242537ef504be38778123e7bf5e82c56e075b125aa5b4ca74d0cbe0320_bucket_0/graph.bin
diff --git a/src/app/build/intermediates/desugar_graph/debugAndroidTest/out/currentProject/jar_0ea32af53159dfaf655bd3c4c546210ca958736690d3a485d0045f055459f52a_bucket_1/graph.bin b/src/app/build/intermediates/desugar_graph/debugAndroidTest/out/currentProject/jar_dc600c242537ef504be38778123e7bf5e82c56e075b125aa5b4ca74d0cbe0320_bucket_1/graph.bin
similarity index 100%
rename from src/app/build/intermediates/desugar_graph/debugAndroidTest/out/currentProject/jar_0ea32af53159dfaf655bd3c4c546210ca958736690d3a485d0045f055459f52a_bucket_1/graph.bin
rename to src/app/build/intermediates/desugar_graph/debugAndroidTest/out/currentProject/jar_dc600c242537ef504be38778123e7bf5e82c56e075b125aa5b4ca74d0cbe0320_bucket_1/graph.bin
diff --git a/src/app/build/intermediates/desugar_graph/debugAndroidTest/out/currentProject/jar_0ea32af53159dfaf655bd3c4c546210ca958736690d3a485d0045f055459f52a_bucket_2/graph.bin b/src/app/build/intermediates/desugar_graph/debugAndroidTest/out/currentProject/jar_dc600c242537ef504be38778123e7bf5e82c56e075b125aa5b4ca74d0cbe0320_bucket_2/graph.bin
similarity index 100%
rename from src/app/build/intermediates/desugar_graph/debugAndroidTest/out/currentProject/jar_0ea32af53159dfaf655bd3c4c546210ca958736690d3a485d0045f055459f52a_bucket_2/graph.bin
rename to src/app/build/intermediates/desugar_graph/debugAndroidTest/out/currentProject/jar_dc600c242537ef504be38778123e7bf5e82c56e075b125aa5b4ca74d0cbe0320_bucket_2/graph.bin
diff --git a/src/app/build/intermediates/desugar_graph/debugAndroidTest/out/currentProject/jar_0ea32af53159dfaf655bd3c4c546210ca958736690d3a485d0045f055459f52a_bucket_3/graph.bin b/src/app/build/intermediates/desugar_graph/debugAndroidTest/out/currentProject/jar_dc600c242537ef504be38778123e7bf5e82c56e075b125aa5b4ca74d0cbe0320_bucket_3/graph.bin
similarity index 100%
rename from src/app/build/intermediates/desugar_graph/debugAndroidTest/out/currentProject/jar_0ea32af53159dfaf655bd3c4c546210ca958736690d3a485d0045f055459f52a_bucket_3/graph.bin
rename to src/app/build/intermediates/desugar_graph/debugAndroidTest/out/currentProject/jar_dc600c242537ef504be38778123e7bf5e82c56e075b125aa5b4ca74d0cbe0320_bucket_3/graph.bin
diff --git a/src/app/build/intermediates/desugar_graph/debugAndroidTest/out/currentProject/jar_0ea32af53159dfaf655bd3c4c546210ca958736690d3a485d0045f055459f52a_bucket_4/graph.bin b/src/app/build/intermediates/desugar_graph/debugAndroidTest/out/currentProject/jar_dc600c242537ef504be38778123e7bf5e82c56e075b125aa5b4ca74d0cbe0320_bucket_4/graph.bin
similarity index 100%
rename from src/app/build/intermediates/desugar_graph/debugAndroidTest/out/currentProject/jar_0ea32af53159dfaf655bd3c4c546210ca958736690d3a485d0045f055459f52a_bucket_4/graph.bin
rename to src/app/build/intermediates/desugar_graph/debugAndroidTest/out/currentProject/jar_dc600c242537ef504be38778123e7bf5e82c56e075b125aa5b4ca74d0cbe0320_bucket_4/graph.bin
diff --git a/src/app/build/intermediates/desugar_graph/debugAndroidTest/out/currentProject/jar_0ea32af53159dfaf655bd3c4c546210ca958736690d3a485d0045f055459f52a_bucket_5/graph.bin b/src/app/build/intermediates/desugar_graph/debugAndroidTest/out/currentProject/jar_dc600c242537ef504be38778123e7bf5e82c56e075b125aa5b4ca74d0cbe0320_bucket_5/graph.bin
similarity index 100%
rename from src/app/build/intermediates/desugar_graph/debugAndroidTest/out/currentProject/jar_0ea32af53159dfaf655bd3c4c546210ca958736690d3a485d0045f055459f52a_bucket_5/graph.bin
rename to src/app/build/intermediates/desugar_graph/debugAndroidTest/out/currentProject/jar_dc600c242537ef504be38778123e7bf5e82c56e075b125aa5b4ca74d0cbe0320_bucket_5/graph.bin
diff --git a/src/app/build/intermediates/desugar_graph/debugAndroidTest/out/currentProject/jar_0ea32af53159dfaf655bd3c4c546210ca958736690d3a485d0045f055459f52a_bucket_6/graph.bin b/src/app/build/intermediates/desugar_graph/debugAndroidTest/out/currentProject/jar_dc600c242537ef504be38778123e7bf5e82c56e075b125aa5b4ca74d0cbe0320_bucket_6/graph.bin
similarity index 100%
rename from src/app/build/intermediates/desugar_graph/debugAndroidTest/out/currentProject/jar_0ea32af53159dfaf655bd3c4c546210ca958736690d3a485d0045f055459f52a_bucket_6/graph.bin
rename to src/app/build/intermediates/desugar_graph/debugAndroidTest/out/currentProject/jar_dc600c242537ef504be38778123e7bf5e82c56e075b125aa5b4ca74d0cbe0320_bucket_6/graph.bin
diff --git a/src/app/build/intermediates/desugar_graph/debugAndroidTest/out/currentProject/jar_0ea32af53159dfaf655bd3c4c546210ca958736690d3a485d0045f055459f52a_bucket_7/graph.bin b/src/app/build/intermediates/desugar_graph/debugAndroidTest/out/currentProject/jar_dc600c242537ef504be38778123e7bf5e82c56e075b125aa5b4ca74d0cbe0320_bucket_7/graph.bin
similarity index 100%
rename from src/app/build/intermediates/desugar_graph/debugAndroidTest/out/currentProject/jar_0ea32af53159dfaf655bd3c4c546210ca958736690d3a485d0045f055459f52a_bucket_7/graph.bin
rename to src/app/build/intermediates/desugar_graph/debugAndroidTest/out/currentProject/jar_dc600c242537ef504be38778123e7bf5e82c56e075b125aa5b4ca74d0cbe0320_bucket_7/graph.bin
diff --git a/src/app/build/intermediates/dex/debug/mergeDexDebug/classes.dex b/src/app/build/intermediates/dex/debug/mergeDexDebug/classes.dex
index e127ff43..6c219444 100644
Binary files a/src/app/build/intermediates/dex/debug/mergeDexDebug/classes.dex and b/src/app/build/intermediates/dex/debug/mergeDexDebug/classes.dex differ
diff --git a/src/app/build/intermediates/dex_archive_input_jar_hashes/debug/out b/src/app/build/intermediates/dex_archive_input_jar_hashes/debug/out
index 2c3e11f2..336c3738 100644
Binary files a/src/app/build/intermediates/dex_archive_input_jar_hashes/debug/out and b/src/app/build/intermediates/dex_archive_input_jar_hashes/debug/out differ
diff --git a/src/app/build/intermediates/dex_archive_input_jar_hashes/debugAndroidTest/out b/src/app/build/intermediates/dex_archive_input_jar_hashes/debugAndroidTest/out
index 0bded20d..6582b191 100644
Binary files a/src/app/build/intermediates/dex_archive_input_jar_hashes/debugAndroidTest/out and b/src/app/build/intermediates/dex_archive_input_jar_hashes/debugAndroidTest/out differ
diff --git a/src/app/build/intermediates/incremental/debug/mergeDebugResources/compile-file-map.properties b/src/app/build/intermediates/incremental/debug/mergeDebugResources/compile-file-map.properties
index 1d013836..90000797 100644
--- a/src/app/build/intermediates/incremental/debug/mergeDebugResources/compile-file-map.properties
+++ b/src/app/build/intermediates/incremental/debug/mergeDebugResources/compile-file-map.properties
@@ -1,96 +1,96 @@
-#Sat Dec 09 00:14:06 CST 2023
-net.micode.notes.app-main-6\:/color/primary_text_dark.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\color_primary_text_dark.xml.flat
-net.micode.notes.app-main-6\:/color/secondary_text_dark.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\color_secondary_text_dark.xml.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/bg_btn_set_color.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_bg_btn_set_color.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/bg_color_btn_mask.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_bg_color_btn_mask.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/call_record.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_call_record.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/clock.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_clock.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/delete.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_delete.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/dropdown_icon.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_dropdown_icon.9.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/edit_blue.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_edit_blue.9.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/edit_green.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_edit_green.9.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/edit_red.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_edit_red.9.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/edit_title_blue.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_edit_title_blue.9.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/edit_title_green.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_edit_title_green.9.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/edit_title_red.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_edit_title_red.9.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/edit_title_white.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_edit_title_white.9.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/edit_title_yellow.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_edit_title_yellow.9.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/edit_white.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_edit_white.9.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/edit_yellow.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_edit_yellow.9.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/font_large.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_font_large.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/font_normal.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_font_normal.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/font_size_selector_bg.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_font_size_selector_bg.9.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/font_small.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_font_small.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/font_super.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_font_super.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/icon_app.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_icon_app.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/list_background.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_background.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/list_blue_down.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_blue_down.9.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/list_blue_middle.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_blue_middle.9.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/list_blue_single.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_blue_single.9.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/list_blue_up.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_blue_up.9.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/list_folder.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_folder.9.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/list_footer_bg.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_footer_bg.9.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/list_green_down.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_green_down.9.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/list_green_middle.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_green_middle.9.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/list_green_single.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_green_single.9.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/list_green_up.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_green_up.9.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/list_red_down.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_red_down.9.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/list_red_middle.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_red_middle.9.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/list_red_single.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_red_single.9.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/list_red_up.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_red_up.9.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/list_white_down.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_white_down.9.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/list_white_middle.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_white_middle.9.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/list_white_single.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_white_single.9.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/list_white_up.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_white_up.9.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/list_yellow_down.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_yellow_down.9.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/list_yellow_middle.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_yellow_middle.9.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/list_yellow_single.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_yellow_single.9.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/list_yellow_up.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_yellow_up.9.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/menu_delete.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_menu_delete.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/menu_move.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_menu_move.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/new_note_normal.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_new_note_normal.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/new_note_pressed.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_new_note_pressed.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/note_edit_color_selector_panel.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_note_edit_color_selector_panel.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/notification.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_notification.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/search_result.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_search_result.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/selected.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_selected.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/title_alert.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_title_alert.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/title_bar_bg.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_title_bar_bg.9.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/widget_2x_blue.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_widget_2x_blue.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/widget_2x_green.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_widget_2x_green.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/widget_2x_red.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_widget_2x_red.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/widget_2x_white.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_widget_2x_white.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/widget_2x_yellow.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_widget_2x_yellow.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/widget_4x_blue.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_widget_4x_blue.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/widget_4x_green.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_widget_4x_green.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/widget_4x_red.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_widget_4x_red.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/widget_4x_white.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_widget_4x_white.png.flat
-net.micode.notes.app-main-6\:/drawable-hdpi/widget_4x_yellow.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_widget_4x_yellow.png.flat
-net.micode.notes.app-main-6\:/drawable/new_note.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\drawable_new_note.xml.flat
-net.micode.notes.app-main-6\:/layout/account_dialog_title.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\layout_account_dialog_title.xml.flat
-net.micode.notes.app-main-6\:/layout/add_account_text.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\layout_add_account_text.xml.flat
-net.micode.notes.app-main-6\:/layout/datetime_picker.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\layout_datetime_picker.xml.flat
-net.micode.notes.app-main-6\:/layout/dialog_edit_text.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\layout_dialog_edit_text.xml.flat
-net.micode.notes.app-main-6\:/layout/folder_list_item.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\layout_folder_list_item.xml.flat
-net.micode.notes.app-main-6\:/layout/note_edit.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\layout_note_edit.xml.flat
-net.micode.notes.app-main-6\:/layout/note_edit_list_item.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\layout_note_edit_list_item.xml.flat
-net.micode.notes.app-main-6\:/layout/note_item.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\layout_note_item.xml.flat
-net.micode.notes.app-main-6\:/layout/note_list.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\layout_note_list.xml.flat
-net.micode.notes.app-main-6\:/layout/note_list_dropdown_menu.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\layout_note_list_dropdown_menu.xml.flat
-net.micode.notes.app-main-6\:/layout/note_list_footer.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\layout_note_list_footer.xml.flat
-net.micode.notes.app-main-6\:/layout/settings_header.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\layout_settings_header.xml.flat
-net.micode.notes.app-main-6\:/layout/widget_2x.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\layout_widget_2x.xml.flat
-net.micode.notes.app-main-6\:/layout/widget_4x.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\layout_widget_4x.xml.flat
-net.micode.notes.app-main-6\:/menu/call_note_edit.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\menu_call_note_edit.xml.flat
-net.micode.notes.app-main-6\:/menu/call_record_folder.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\menu_call_record_folder.xml.flat
-net.micode.notes.app-main-6\:/menu/note_edit.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\menu_note_edit.xml.flat
-net.micode.notes.app-main-6\:/menu/note_list.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\menu_note_list.xml.flat
-net.micode.notes.app-main-6\:/menu/note_list_dropdown.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\menu_note_list_dropdown.xml.flat
-net.micode.notes.app-main-6\:/menu/note_list_options.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\menu_note_list_options.xml.flat
-net.micode.notes.app-main-6\:/menu/sub_folder.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\menu_sub_folder.xml.flat
-net.micode.notes.app-main-6\:/raw-zh-rCN/introduction=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\raw-zh-rCN_introduction.flat
-net.micode.notes.app-main-6\:/raw/introduction=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\raw_introduction.flat
-net.micode.notes.app-main-6\:/xml/preferences.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\xml_preferences.xml.flat
-net.micode.notes.app-main-6\:/xml/searchable.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\xml_searchable.xml.flat
-net.micode.notes.app-main-6\:/xml/widget_2x_info.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\xml_widget_2x_info.xml.flat
-net.micode.notes.app-main-6\:/xml/widget_4x_info.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\merged_res\\debug\\xml_widget_4x_info.xml.flat
+#Fri Jan 05 11:10:27 CST 2024
+net.micode.notes.app-main-6\:/color/primary_text_dark.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\color_primary_text_dark.xml.flat
+net.micode.notes.app-main-6\:/color/secondary_text_dark.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\color_secondary_text_dark.xml.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/bg_btn_set_color.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_bg_btn_set_color.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/bg_color_btn_mask.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_bg_color_btn_mask.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/call_record.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_call_record.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/clock.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_clock.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/delete.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_delete.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/dropdown_icon.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_dropdown_icon.9.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/edit_blue.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_edit_blue.9.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/edit_green.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_edit_green.9.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/edit_red.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_edit_red.9.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/edit_title_blue.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_edit_title_blue.9.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/edit_title_green.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_edit_title_green.9.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/edit_title_red.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_edit_title_red.9.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/edit_title_white.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_edit_title_white.9.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/edit_title_yellow.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_edit_title_yellow.9.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/edit_white.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_edit_white.9.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/edit_yellow.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_edit_yellow.9.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/font_large.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_font_large.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/font_normal.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_font_normal.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/font_size_selector_bg.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_font_size_selector_bg.9.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/font_small.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_font_small.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/font_super.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_font_super.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/icon_app.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_icon_app.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/list_background.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_background.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/list_blue_down.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_blue_down.9.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/list_blue_middle.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_blue_middle.9.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/list_blue_single.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_blue_single.9.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/list_blue_up.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_blue_up.9.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/list_folder.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_folder.9.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/list_footer_bg.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_footer_bg.9.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/list_green_down.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_green_down.9.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/list_green_middle.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_green_middle.9.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/list_green_single.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_green_single.9.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/list_green_up.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_green_up.9.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/list_red_down.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_red_down.9.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/list_red_middle.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_red_middle.9.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/list_red_single.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_red_single.9.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/list_red_up.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_red_up.9.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/list_white_down.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_white_down.9.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/list_white_middle.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_white_middle.9.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/list_white_single.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_white_single.9.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/list_white_up.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_white_up.9.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/list_yellow_down.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_yellow_down.9.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/list_yellow_middle.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_yellow_middle.9.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/list_yellow_single.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_yellow_single.9.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/list_yellow_up.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_yellow_up.9.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/menu_delete.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_menu_delete.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/menu_move.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_menu_move.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/new_note_normal.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_new_note_normal.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/new_note_pressed.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_new_note_pressed.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/note_edit_color_selector_panel.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_note_edit_color_selector_panel.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/notification.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_notification.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/search_result.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_search_result.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/selected.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_selected.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/title_alert.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_title_alert.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/title_bar_bg.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_title_bar_bg.9.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/widget_2x_blue.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_widget_2x_blue.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/widget_2x_green.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_widget_2x_green.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/widget_2x_red.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_widget_2x_red.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/widget_2x_white.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_widget_2x_white.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/widget_2x_yellow.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_widget_2x_yellow.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/widget_4x_blue.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_widget_4x_blue.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/widget_4x_green.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_widget_4x_green.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/widget_4x_red.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_widget_4x_red.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/widget_4x_white.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_widget_4x_white.png.flat
+net.micode.notes.app-main-6\:/drawable-hdpi/widget_4x_yellow.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_widget_4x_yellow.png.flat
+net.micode.notes.app-main-6\:/drawable/new_note.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\drawable_new_note.xml.flat
+net.micode.notes.app-main-6\:/layout/account_dialog_title.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\layout_account_dialog_title.xml.flat
+net.micode.notes.app-main-6\:/layout/add_account_text.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\layout_add_account_text.xml.flat
+net.micode.notes.app-main-6\:/layout/datetime_picker.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\layout_datetime_picker.xml.flat
+net.micode.notes.app-main-6\:/layout/dialog_edit_text.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\layout_dialog_edit_text.xml.flat
+net.micode.notes.app-main-6\:/layout/folder_list_item.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\layout_folder_list_item.xml.flat
+net.micode.notes.app-main-6\:/layout/note_edit.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\layout_note_edit.xml.flat
+net.micode.notes.app-main-6\:/layout/note_edit_list_item.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\layout_note_edit_list_item.xml.flat
+net.micode.notes.app-main-6\:/layout/note_item.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\layout_note_item.xml.flat
+net.micode.notes.app-main-6\:/layout/note_list.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\layout_note_list.xml.flat
+net.micode.notes.app-main-6\:/layout/note_list_dropdown_menu.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\layout_note_list_dropdown_menu.xml.flat
+net.micode.notes.app-main-6\:/layout/note_list_footer.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\layout_note_list_footer.xml.flat
+net.micode.notes.app-main-6\:/layout/settings_header.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\layout_settings_header.xml.flat
+net.micode.notes.app-main-6\:/layout/widget_2x.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\layout_widget_2x.xml.flat
+net.micode.notes.app-main-6\:/layout/widget_4x.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\layout_widget_4x.xml.flat
+net.micode.notes.app-main-6\:/menu/call_note_edit.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\menu_call_note_edit.xml.flat
+net.micode.notes.app-main-6\:/menu/call_record_folder.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\menu_call_record_folder.xml.flat
+net.micode.notes.app-main-6\:/menu/note_edit.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\menu_note_edit.xml.flat
+net.micode.notes.app-main-6\:/menu/note_list.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\menu_note_list.xml.flat
+net.micode.notes.app-main-6\:/menu/note_list_dropdown.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\menu_note_list_dropdown.xml.flat
+net.micode.notes.app-main-6\:/menu/note_list_options.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\menu_note_list_options.xml.flat
+net.micode.notes.app-main-6\:/menu/sub_folder.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\menu_sub_folder.xml.flat
+net.micode.notes.app-main-6\:/raw-zh-rCN/introduction=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\raw-zh-rCN_introduction.flat
+net.micode.notes.app-main-6\:/raw/introduction=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\raw_introduction.flat
+net.micode.notes.app-main-6\:/xml/preferences.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\xml_preferences.xml.flat
+net.micode.notes.app-main-6\:/xml/searchable.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\xml_searchable.xml.flat
+net.micode.notes.app-main-6\:/xml/widget_2x_info.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\xml_widget_2x_info.xml.flat
+net.micode.notes.app-main-6\:/xml/widget_4x_info.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\merged_res\\debug\\xml_widget_4x_info.xml.flat
diff --git a/src/app/build/intermediates/incremental/debug/mergeDebugResources/merged.dir/values-zh-rCN/values-zh-rCN.xml b/src/app/build/intermediates/incremental/debug/mergeDebugResources/merged.dir/values-zh-rCN/values-zh-rCN.xml
new file mode 100644
index 00000000..d65e0cce
--- /dev/null
+++ b/src/app/build/intermediates/incremental/debug/mergeDebugResources/merged.dir/values-zh-rCN/values-zh-rCN.xml
@@ -0,0 +1,108 @@
+
+
+
+ - 短信
+ - 邮件
+
+
+ - %1$s 条符合“%2$s”的搜索结果
+
+ 确认删除文件夹及所包含的便签吗?
+ 确认要删除该条便签吗?
+ 确认要删除所选的 %d 条便签吗?
+ 删除
+ 便签
+ 便签2x2
+ 便签4x4
+ 删除
+ 通话便签
+ 取消
+ 设置
+ 成功删除提醒
+ 不能为空便签设置闹钟提醒
+ 不能将空便签发送到桌面
+ 要查看的便签不存在
+ 导出文本时发生错误,请检查SD卡
+ SD卡被占用,不能操作
+ 同步已取消
+ 同步失败,发生内部错误
+ 同步失败,请检查网络和帐号设置
+ 导出失败
+ 文件夹 %1$s 已存在,请重新命名
+ yyyyMMdd
+ MM月dd日 kk:mm
+ 已将文本文件(%1$s)输出至SD卡(%2$s)目录
+ 已将所选 %1$d 条便签移到 %2$s 文件夹
+ 请输入名称
+ 已添加到桌面
+ 提醒我
+ 新建文件夹
+ 删除
+ 取消全选
+ 导出文本
+ 修改文件夹名称
+ 刪除文件夹
+ 查看文件夹
+ 大
+ 正常
+ 文字大小
+ 小
+ 超大
+ 进入清单模式
+ 移动到文件夹
+ 上一级文件夹
+ 退出清单模式
+ 删除提醒
+ 搜索
+ 全选
+ 没有选中项,操作无效
+ 选中了 %d 项
+ 发送到桌面
+ 设置
+ 分享
+ 同步
+ 取消同步
+ 选择文件夹
+ 已过期
+ 发送邮件
+ 打开地图
+ 呼叫电话
+ 浏览网页
+ 查看
+ 知道了
+ 新建便签
+ ...
+ 与google task同步便签记录
+ 同步账号
+ 添加账号
+ 新建便签背景颜色随机
+ 取消同步
+ 立即同步
+ 当前帐号 %1$s
+ 如更换同步帐号,过去的帐号同步信息将被清空,再次切换的同时可能会造成数据重复
+ 请选择google帐号,便签将与该帐号的google task内容同步。
+ 同步便签
+ 上次同步于 %1$s
+ 取消
+ 更换账号
+ 删除账号
+ 设置
+ 正在同步中,不能修改同步帐号
+ 同步帐号已设置为%1$s
+ 便签
+ 搜索便签
+ 正在搜索便签
+ 便签中的文字
+ 创建提醒
+ 导出成功
+ 与%1$s同步成功
+ 正在获取服务器便签列表...
+ 登录%1$s...
+ 正在同步本地便签...
+ 同步已取消
+ 同步失败
+ 同步成功
+ 同步便签...
+ 没有关联内容,点击新建便签。
+ 访客模式下,便签内容不可见
+
\ No newline at end of file
diff --git a/src/app/build/intermediates/incremental/debug/mergeDebugResources/merged.dir/values-zh-rTW/values-zh-rTW.xml b/src/app/build/intermediates/incremental/debug/mergeDebugResources/merged.dir/values-zh-rTW/values-zh-rTW.xml
new file mode 100644
index 00000000..226b5bc5
--- /dev/null
+++ b/src/app/build/intermediates/incremental/debug/mergeDebugResources/merged.dir/values-zh-rTW/values-zh-rTW.xml
@@ -0,0 +1,108 @@
+
+
+
+ - 短信
+ - 郵件
+
+
+ - %1$s 條符合”%2$s“的搜尋結果
+
+ 確認刪除檔夾及所包含的便簽嗎?
+ 确认要删除該條便籤嗎?
+ 确认要刪除所選的 %d 條便籤嗎?
+ 刪除
+ 便簽
+ 便簽2x2
+ 便簽4x4
+ 刪除
+ 通話便籤
+ 取消
+ 設置
+ 成功刪除提醒
+ 不能爲空便籤設置鬧鐘提醒
+ 不能將空便籤發送到桌面
+ 要查看的便籤不存在
+ 導出TXT時發生錯誤,請檢查SD卡
+ SD卡被佔用,不能操作
+ 同步已取消
+ 同步失敗,發生內部錯誤
+ 同步失敗,請檢查網絡和帳號設置
+ 導出失敗
+ 文件夾 %1$s 已存在,請重新命名
+ yyyyMMdd
+ MM月dd日 kk:mm
+ 已將文本文件(%1$s)導出至SD(%2$s)目錄
+ 已將所選 %1$d 便籤移到 %2$s 文件夾
+ 請輸入名稱
+ 已添加到桌面
+ 提醒我
+ 新建文件夾
+ 刪除
+ 取消全選
+ 導出文本
+ 修改文件夾名稱
+ 刪除文件夾
+ 查看文件夾
+ 大
+ 正常
+ 文字大小
+ 小
+ 超大
+ 進入清單模式
+ 移動到文件夾
+ 上一級文件夾
+ 退出清單模式
+ 刪除提醒
+ 搜尋
+ 全選
+ 沒有選中項,操作無效
+ 選中了 %d 項
+ 發送到桌面
+ 設置
+ 分享
+ 同步
+ 取消同步
+ 選擇文件夾
+ 已過期
+ 發送郵件
+ 打開地圖
+ 呼叫電話
+ 浏覽網頁
+ 查看
+ 知道了
+ 新建便簽
+ ...
+ 与google task同步便簽記錄
+ 同步賬號
+ 添加賬號
+ 新建便籤背景顏色隨機
+ 取消同步
+ 立即同步
+ 當前帳號 %1$s
+ 如更換同步帳號,過去的帳號同步信息將被清空,再次切換的同時可能會造成數據重復
+ 請選擇google帳號,便簽將與該帳號的google task內容同步。
+ 同步便簽
+ 上次同步于 %1$s
+ 取消
+ 更換賬號
+ 刪除賬號
+ 設置
+ 正在同步中,不能修改同步帳號
+ 同步帳號已設置為%1$s
+ 便籤
+ 搜索便籤
+ 正在搜索便籤
+ 便籤中的文字
+ 創建提醒
+ 導出成功
+ 與%1$s同步成功
+ 正在獲取服務器便籤列表...
+ 登陸%1$s...
+ 正在同步本地便籤...
+ 同步已取消
+ 同步失敗
+ 同步成功
+ 同步便簽...
+ 沒有關聯內容,點擊新建便簽。
+ 訪客模式下,便籤內容不可見
+
\ No newline at end of file
diff --git a/src/app/build/intermediates/incremental/debug/mergeDebugResources/merger.xml b/src/app/build/intermediates/incremental/debug/mergeDebugResources/merger.xml
index 6445f66e..1c443359 100644
--- a/src/app/build/intermediates/incremental/debug/mergeDebugResources/merger.xml
+++ b/src/app/build/intermediates/incremental/debug/mergeDebugResources/merger.xml
@@ -1,5 +1,5 @@
-
+
- -%s
- --%s
- --%s
@@ -7,11 +7,11 @@
- Messaging
- Email
- #335b5b5b33sp26sp20sp17sp14spNotesNotes 2x2Notes 4x4No associated note found, click to create associated note.Privacy mode,can not see note content...Add noteDelete reminder successfullySet reminderExpiredyyyyMMddMMMd kk:mmGot itTake a lookCallSend emailBrowse webOpen map/MIUI/notes/notes_%s.txt(%d)New FolderExport textSyncCancel syncingSettingsSearchDeleteMove to folder%d selectedNothing selected, the operation is invalidSelect allDeselect allFont sizeSmallMediumLargeSuperEnter check listLeave check listView folderDelete folderChange folder nameThe folder %1$s exist, please renameShareSend to homeRemind meDelete reminderSelect folderParent folderNote added to homeConfirm to delete folder and its notes?Delete selected notesConfirm to delete the selected %d notes?Confirm to delete this note?Have moved selected %1$d notes to %2$s folderSD card busy, not available nowExport failed, please check SD cardThe note is not existSorry, can not set clock on empty noteSorry, can not send and empty note to homeExport successfulExport failExport text file (%1$s) to SD (%2$s) directorySyncing notes...Sync is successfulSync is failedSync is canceledSync is successful with account %1$sSync failed, please check network and account settingsSync failed, internal error occursSync is canceledLogging into %1$s...Getting remote note list...Synchronize local notes with Google Task...SettingsSync accountSync notes with google taskLast sync time %1$syyyy-MM-dd hh:mm:ssAdd accountChange sync accountRemove sync accountCancelSync immediatelyCancel syncingCurrent account %1$sAll sync related information will be deleted, which may result in duplicated items sometimeSync notesPlease select a google account. Local notes will be synced with google task.Cannot change the account because sync is in progress%1$s has been set as the sync accountNew note background color randomDeleteCall notesInput nameSearching NotesSearch notesText in your notesNotessetcancel
+ #335b5b5b33sp26sp20sp17sp14spNotesNotes 2x2Notes 4x4No associated note found, click to create associated note.Privacy mode,can not see note content...Add noteDelete reminder successfullySet reminderExpiredyyyyMMddMMMd kk:mmGot itTake a lookCallSend emailBrowse webOpen map/MIUI/notes/notes_%s.txt(%d)New FolderExport textSyncCancel syncingSettingsSearchDeleteMove to folder%d selectedNothing selected, the operation is invalidSelect allDeselect allFont sizeSmallMediumLargeSuperEnter check listLeave check listView folderDelete folderChange folder nameThe folder %1$s exist, please renameShareSend to homeRemind meDelete reminderSelect folderParent folderNote added to homeConfirm to delete folder and its notes?Delete selected notesConfirm to delete the selected %d notes?Confirm to delete this note?Have moved selected %1$d notes to %2$s folderSD card busy, not available nowExport failed, please check SD cardThe note is not existSorry, can not set clock on empty noteSorry, can not send and empty note to homeExport successfulExport failExport text file (%1$s) to SD (%2$s) directorySyncing notes...Sync is successfulSync is failedSync is canceledSync is successful with account %1$sSync failed, please check network and account settingsSync failed, internal error occursSync is canceledLogging into %1$s...Getting remote note list...Synchronize local notes with Google Task...SettingsSync accountSync notes with google taskLast sync time %1$syyyy-MM-dd hh:mm:ssAdd accountChange sync accountRemove sync accountCancelSync immediatelyCancel syncingCurrent account %1$sAll sync related information will be deleted, which may result in duplicated items sometimeSync notesPlease select a google account. Local notes will be synced with google task.Cannot change the account because sync is in progress%1$s has been set as the sync accountNew note background color randomDeleteCall notesInput nameSearching NotesSearch notesText in your notesNotessetcancel
- %1$s result for \"%2$s\"
- %1$s results for \"%2$s\"
-
+
- 短信
- 邮件
- 便签便签2x2便签4x4没有关联内容,点击新建便签。访客模式下,便签内容不可见...新建便签成功删除提醒创建提醒已过期yyyyMMddMM月dd日 kk:mm知道了查看呼叫电话发送邮件浏览网页打开地图新建文件夹导出文本同步取消同步设置搜索删除移动到文件夹选中了 %d 项没有选中项,操作无效全选取消全选文字大小小正常大超大进入清单模式退出清单模式查看文件夹刪除文件夹修改文件夹名称文件夹 %1$s 已存在,请重新命名分享发送到桌面提醒我删除提醒选择文件夹上一级文件夹已添加到桌面删除确认要删除所选的 %d 条便签吗?确认要删除该条便签吗?确认删除文件夹及所包含的便签吗?已将所选 %1$d 条便签移到 %2$s 文件夹SD卡被占用,不能操作导出文本时发生错误,请检查SD卡要查看的便签不存在不能为空便签设置闹钟提醒不能将空便签发送到桌面导出成功导出失败已将文本文件(%1$s)输出至SD卡(%2$s)目录同步便签...同步成功同步失败同步已取消与%1$s同步成功同步失败,请检查网络和帐号设置同步失败,发生内部错误同步已取消登录%1$s...正在获取服务器便签列表...正在同步本地便签...设置同步账号与google task同步便签记录上次同步于 %1$s添加账号更换账号删除账号取消立即同步取消同步当前帐号 %1$s如更换同步帐号,过去的帐号同步信息将被清空,再次切换的同时可能会造成数据重复同步便签请选择google帐号,便签将与该帐号的google task内容同步。正在同步中,不能修改同步帐号同步帐号已设置为%1$s新建便签背景颜色随机删除通话便签请输入名称正在搜索便签搜索便签便签中的文字便签设置取消
+ 便签便签2x2便签4x4没有关联内容,点击新建便签。访客模式下,便签内容不可见...新建便签成功删除提醒创建提醒已过期yyyyMMddMM月dd日 kk:mm知道了查看呼叫电话发送邮件浏览网页打开地图新建文件夹导出文本同步取消同步设置搜索删除移动到文件夹选中了 %d 项没有选中项,操作无效全选取消全选文字大小小正常大超大进入清单模式退出清单模式查看文件夹刪除文件夹修改文件夹名称文件夹 %1$s 已存在,请重新命名分享发送到桌面提醒我删除提醒选择文件夹上一级文件夹已添加到桌面删除确认要删除所选的 %d 条便签吗?确认要删除该条便签吗?确认删除文件夹及所包含的便签吗?已将所选 %1$d 条便签移到 %2$s 文件夹SD卡被占用,不能操作导出文本时发生错误,请检查SD卡要查看的便签不存在不能为空便签设置闹钟提醒不能将空便签发送到桌面导出成功导出失败已将文本文件(%1$s)输出至SD卡(%2$s)目录同步便签...同步成功同步失败同步已取消与%1$s同步成功同步失败,请检查网络和帐号设置同步失败,发生内部错误同步已取消登录%1$s...正在获取服务器便签列表...正在同步本地便签...设置同步账号与google task同步便签记录上次同步于 %1$s添加账号更换账号删除账号取消立即同步取消同步当前帐号 %1$s如更换同步帐号,过去的帐号同步信息将被清空,再次切换的同时可能会造成数据重复同步便签请选择google帐号,便签将与该帐号的google task内容同步。正在同步中,不能修改同步帐号同步帐号已设置为%1$s新建便签背景颜色随机删除通话便签请输入名称正在搜索便签搜索便签便签中的文字便签设置取消
- %1$s 条符合“%2$s”的搜索结果
-
+
- 短信
- 郵件
- 便簽便簽2x2便簽4x4沒有關聯內容,點擊新建便簽。訪客模式下,便籤內容不可見...新建便簽成功刪除提醒創建提醒已過期yyyyMMddMM月dd日 kk:mm知道了查看呼叫電話發送郵件浏覽網頁打開地圖已將所選 %1$d 便籤移到 %2$s 文件夾新建文件夾導出文本同步取消同步設置搜尋刪除移動到文件夾選中了 %d 項沒有選中項,操作無效全選取消全選文字大小小正常大超大進入清單模式退出清單模式查看文件夾刪除文件夾修改文件夾名稱文件夾 %1$s 已存在,請重新命名分享發送到桌面提醒我刪除提醒選擇文件夾上一級文件夾已添加到桌面刪除确认要刪除所選的 %d 條便籤嗎?确认要删除該條便籤嗎?確認刪除檔夾及所包含的便簽嗎?SD卡被佔用,不能操作導出TXT時發生錯誤,請檢查SD卡要查看的便籤不存在不能爲空便籤設置鬧鐘提醒不能將空便籤發送到桌面導出成功導出失敗已將文本文件(%1$s)導出至SD(%2$s)目錄同步便簽...同步成功同步失敗同步已取消與%1$s同步成功同步失敗,請檢查網絡和帳號設置同步失敗,發生內部錯誤同步已取消登陸%1$s...正在獲取服務器便籤列表...正在同步本地便籤...設置同步賬號与google task同步便簽記錄上次同步于 %1$s添加賬號更換賬號刪除賬號取消立即同步取消同步當前帳號 %1$s如更換同步帳號,過去的帳號同步信息將被清空,再次切換的同時可能會造成數據重復同步便簽請選擇google帳號,便簽將與該帳號的google task內容同步。正在同步中,不能修改同步帳號同步帳號已設置為%1$s新建便籤背景顏色隨機刪除通話便籤請輸入名稱正在搜索便籤搜索便籤便籤中的文字便籤設置取消
+ 便簽便簽2x2便簽4x4沒有關聯內容,點擊新建便簽。訪客模式下,便籤內容不可見...新建便簽成功刪除提醒創建提醒已過期yyyyMMddMM月dd日 kk:mm知道了查看呼叫電話發送郵件浏覽網頁打開地圖已將所選 %1$d 便籤移到 %2$s 文件夾新建文件夾導出文本同步取消同步設置搜尋刪除移動到文件夾選中了 %d 項沒有選中項,操作無效全選取消全選文字大小小正常大超大進入清單模式退出清單模式查看文件夾刪除文件夾修改文件夾名稱文件夾 %1$s 已存在,請重新命名分享發送到桌面提醒我刪除提醒選擇文件夾上一級文件夾已添加到桌面刪除确认要刪除所選的 %d 條便籤嗎?确认要删除該條便籤嗎?確認刪除檔夾及所包含的便簽嗎?SD卡被佔用,不能操作導出TXT時發生錯誤,請檢查SD卡要查看的便籤不存在不能爲空便籤設置鬧鐘提醒不能將空便籤發送到桌面導出成功導出失敗已將文本文件(%1$s)導出至SD(%2$s)目錄同步便簽...同步成功同步失敗同步已取消與%1$s同步成功同步失敗,請檢查網絡和帳號設置同步失敗,發生內部錯誤同步已取消登陸%1$s...正在獲取服務器便籤列表...正在同步本地便籤...設置同步賬號与google task同步便簽記錄上次同步于 %1$s添加賬號更換賬號刪除賬號取消立即同步取消同步當前帳號 %1$s如更換同步帳號,過去的帳號同步信息將被清空,再次切換的同時可能會造成數據重復同步便簽請選擇google帳號,便簽將與該帳號的google task內容同步。正在同步中,不能修改同步帳號同步帳號已設置為%1$s新建便籤背景顏色隨機刪除通話便籤請輸入名稱正在搜索便籤搜索便籤便籤中的文字便籤設置取消
- %1$s 條符合”%2$s“的搜尋結果
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/src/app/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties b/src/app/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties
index fddad53e..a923cd70 100644
--- a/src/app/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties
+++ b/src/app/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties
@@ -1,96 +1,96 @@
-#Sat Dec 09 00:14:06 CST 2023
-net.micode.notes.app-main-5\:/color/primary_text_dark.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\color\\primary_text_dark.xml
-net.micode.notes.app-main-5\:/color/secondary_text_dark.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\color\\secondary_text_dark.xml
-net.micode.notes.app-main-5\:/drawable-hdpi/bg_btn_set_color.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\bg_btn_set_color.png
-net.micode.notes.app-main-5\:/drawable-hdpi/bg_color_btn_mask.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\bg_color_btn_mask.png
-net.micode.notes.app-main-5\:/drawable-hdpi/call_record.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\call_record.png
-net.micode.notes.app-main-5\:/drawable-hdpi/clock.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\clock.png
-net.micode.notes.app-main-5\:/drawable-hdpi/delete.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\delete.png
-net.micode.notes.app-main-5\:/drawable-hdpi/dropdown_icon.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\dropdown_icon.9.png
-net.micode.notes.app-main-5\:/drawable-hdpi/edit_blue.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\edit_blue.9.png
-net.micode.notes.app-main-5\:/drawable-hdpi/edit_green.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\edit_green.9.png
-net.micode.notes.app-main-5\:/drawable-hdpi/edit_red.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\edit_red.9.png
-net.micode.notes.app-main-5\:/drawable-hdpi/edit_title_blue.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\edit_title_blue.9.png
-net.micode.notes.app-main-5\:/drawable-hdpi/edit_title_green.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\edit_title_green.9.png
-net.micode.notes.app-main-5\:/drawable-hdpi/edit_title_red.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\edit_title_red.9.png
-net.micode.notes.app-main-5\:/drawable-hdpi/edit_title_white.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\edit_title_white.9.png
-net.micode.notes.app-main-5\:/drawable-hdpi/edit_title_yellow.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\edit_title_yellow.9.png
-net.micode.notes.app-main-5\:/drawable-hdpi/edit_white.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\edit_white.9.png
-net.micode.notes.app-main-5\:/drawable-hdpi/edit_yellow.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\edit_yellow.9.png
-net.micode.notes.app-main-5\:/drawable-hdpi/font_large.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\font_large.png
-net.micode.notes.app-main-5\:/drawable-hdpi/font_normal.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\font_normal.png
-net.micode.notes.app-main-5\:/drawable-hdpi/font_size_selector_bg.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\font_size_selector_bg.9.png
-net.micode.notes.app-main-5\:/drawable-hdpi/font_small.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\font_small.png
-net.micode.notes.app-main-5\:/drawable-hdpi/font_super.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\font_super.png
-net.micode.notes.app-main-5\:/drawable-hdpi/icon_app.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\icon_app.png
-net.micode.notes.app-main-5\:/drawable-hdpi/list_background.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_background.png
-net.micode.notes.app-main-5\:/drawable-hdpi/list_blue_down.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_blue_down.9.png
-net.micode.notes.app-main-5\:/drawable-hdpi/list_blue_middle.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_blue_middle.9.png
-net.micode.notes.app-main-5\:/drawable-hdpi/list_blue_single.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_blue_single.9.png
-net.micode.notes.app-main-5\:/drawable-hdpi/list_blue_up.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_blue_up.9.png
-net.micode.notes.app-main-5\:/drawable-hdpi/list_folder.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_folder.9.png
-net.micode.notes.app-main-5\:/drawable-hdpi/list_footer_bg.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_footer_bg.9.png
-net.micode.notes.app-main-5\:/drawable-hdpi/list_green_down.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_green_down.9.png
-net.micode.notes.app-main-5\:/drawable-hdpi/list_green_middle.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_green_middle.9.png
-net.micode.notes.app-main-5\:/drawable-hdpi/list_green_single.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_green_single.9.png
-net.micode.notes.app-main-5\:/drawable-hdpi/list_green_up.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_green_up.9.png
-net.micode.notes.app-main-5\:/drawable-hdpi/list_red_down.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_red_down.9.png
-net.micode.notes.app-main-5\:/drawable-hdpi/list_red_middle.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_red_middle.9.png
-net.micode.notes.app-main-5\:/drawable-hdpi/list_red_single.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_red_single.9.png
-net.micode.notes.app-main-5\:/drawable-hdpi/list_red_up.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_red_up.9.png
-net.micode.notes.app-main-5\:/drawable-hdpi/list_white_down.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_white_down.9.png
-net.micode.notes.app-main-5\:/drawable-hdpi/list_white_middle.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_white_middle.9.png
-net.micode.notes.app-main-5\:/drawable-hdpi/list_white_single.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_white_single.9.png
-net.micode.notes.app-main-5\:/drawable-hdpi/list_white_up.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_white_up.9.png
-net.micode.notes.app-main-5\:/drawable-hdpi/list_yellow_down.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_yellow_down.9.png
-net.micode.notes.app-main-5\:/drawable-hdpi/list_yellow_middle.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_yellow_middle.9.png
-net.micode.notes.app-main-5\:/drawable-hdpi/list_yellow_single.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_yellow_single.9.png
-net.micode.notes.app-main-5\:/drawable-hdpi/list_yellow_up.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_yellow_up.9.png
-net.micode.notes.app-main-5\:/drawable-hdpi/menu_delete.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\menu_delete.png
-net.micode.notes.app-main-5\:/drawable-hdpi/menu_move.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\menu_move.png
-net.micode.notes.app-main-5\:/drawable-hdpi/new_note_normal.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\new_note_normal.png
-net.micode.notes.app-main-5\:/drawable-hdpi/new_note_pressed.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\new_note_pressed.png
-net.micode.notes.app-main-5\:/drawable-hdpi/note_edit_color_selector_panel.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\note_edit_color_selector_panel.png
-net.micode.notes.app-main-5\:/drawable-hdpi/notification.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\notification.png
-net.micode.notes.app-main-5\:/drawable-hdpi/search_result.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\search_result.png
-net.micode.notes.app-main-5\:/drawable-hdpi/selected.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\selected.png
-net.micode.notes.app-main-5\:/drawable-hdpi/title_alert.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\title_alert.png
-net.micode.notes.app-main-5\:/drawable-hdpi/title_bar_bg.9.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\title_bar_bg.9.png
-net.micode.notes.app-main-5\:/drawable-hdpi/widget_2x_blue.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\widget_2x_blue.png
-net.micode.notes.app-main-5\:/drawable-hdpi/widget_2x_green.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\widget_2x_green.png
-net.micode.notes.app-main-5\:/drawable-hdpi/widget_2x_red.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\widget_2x_red.png
-net.micode.notes.app-main-5\:/drawable-hdpi/widget_2x_white.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\widget_2x_white.png
-net.micode.notes.app-main-5\:/drawable-hdpi/widget_2x_yellow.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\widget_2x_yellow.png
-net.micode.notes.app-main-5\:/drawable-hdpi/widget_4x_blue.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\widget_4x_blue.png
-net.micode.notes.app-main-5\:/drawable-hdpi/widget_4x_green.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\widget_4x_green.png
-net.micode.notes.app-main-5\:/drawable-hdpi/widget_4x_red.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\widget_4x_red.png
-net.micode.notes.app-main-5\:/drawable-hdpi/widget_4x_white.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\widget_4x_white.png
-net.micode.notes.app-main-5\:/drawable-hdpi/widget_4x_yellow.png=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\widget_4x_yellow.png
-net.micode.notes.app-main-5\:/drawable/new_note.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\drawable\\new_note.xml
-net.micode.notes.app-main-5\:/layout/account_dialog_title.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\layout\\account_dialog_title.xml
-net.micode.notes.app-main-5\:/layout/add_account_text.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\layout\\add_account_text.xml
-net.micode.notes.app-main-5\:/layout/datetime_picker.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\layout\\datetime_picker.xml
-net.micode.notes.app-main-5\:/layout/dialog_edit_text.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\layout\\dialog_edit_text.xml
-net.micode.notes.app-main-5\:/layout/folder_list_item.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\layout\\folder_list_item.xml
-net.micode.notes.app-main-5\:/layout/note_edit.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\layout\\note_edit.xml
-net.micode.notes.app-main-5\:/layout/note_edit_list_item.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\layout\\note_edit_list_item.xml
-net.micode.notes.app-main-5\:/layout/note_item.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\layout\\note_item.xml
-net.micode.notes.app-main-5\:/layout/note_list.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\layout\\note_list.xml
-net.micode.notes.app-main-5\:/layout/note_list_dropdown_menu.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\layout\\note_list_dropdown_menu.xml
-net.micode.notes.app-main-5\:/layout/note_list_footer.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\layout\\note_list_footer.xml
-net.micode.notes.app-main-5\:/layout/settings_header.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\layout\\settings_header.xml
-net.micode.notes.app-main-5\:/layout/widget_2x.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\layout\\widget_2x.xml
-net.micode.notes.app-main-5\:/layout/widget_4x.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\layout\\widget_4x.xml
-net.micode.notes.app-main-5\:/menu/call_note_edit.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\menu\\call_note_edit.xml
-net.micode.notes.app-main-5\:/menu/call_record_folder.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\menu\\call_record_folder.xml
-net.micode.notes.app-main-5\:/menu/note_edit.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\menu\\note_edit.xml
-net.micode.notes.app-main-5\:/menu/note_list.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\menu\\note_list.xml
-net.micode.notes.app-main-5\:/menu/note_list_dropdown.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\menu\\note_list_dropdown.xml
-net.micode.notes.app-main-5\:/menu/note_list_options.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\menu\\note_list_options.xml
-net.micode.notes.app-main-5\:/menu/sub_folder.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\menu\\sub_folder.xml
-net.micode.notes.app-main-5\:/raw-zh-rCN/introduction=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\raw-zh-rCN\\introduction
-net.micode.notes.app-main-5\:/raw/introduction=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\raw\\introduction
-net.micode.notes.app-main-5\:/xml/preferences.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\xml\\preferences.xml
-net.micode.notes.app-main-5\:/xml/searchable.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\xml\\searchable.xml
-net.micode.notes.app-main-5\:/xml/widget_2x_info.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\xml\\widget_2x_info.xml
-net.micode.notes.app-main-5\:/xml/widget_4x_info.xml=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\packaged_res\\debug\\xml\\widget_4x_info.xml
+#Fri Jan 05 11:10:28 CST 2024
+net.micode.notes.app-main-5\:/color/primary_text_dark.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\color\\primary_text_dark.xml
+net.micode.notes.app-main-5\:/color/secondary_text_dark.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\color\\secondary_text_dark.xml
+net.micode.notes.app-main-5\:/drawable-hdpi/bg_btn_set_color.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\bg_btn_set_color.png
+net.micode.notes.app-main-5\:/drawable-hdpi/bg_color_btn_mask.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\bg_color_btn_mask.png
+net.micode.notes.app-main-5\:/drawable-hdpi/call_record.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\call_record.png
+net.micode.notes.app-main-5\:/drawable-hdpi/clock.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\clock.png
+net.micode.notes.app-main-5\:/drawable-hdpi/delete.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\delete.png
+net.micode.notes.app-main-5\:/drawable-hdpi/dropdown_icon.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\dropdown_icon.9.png
+net.micode.notes.app-main-5\:/drawable-hdpi/edit_blue.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\edit_blue.9.png
+net.micode.notes.app-main-5\:/drawable-hdpi/edit_green.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\edit_green.9.png
+net.micode.notes.app-main-5\:/drawable-hdpi/edit_red.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\edit_red.9.png
+net.micode.notes.app-main-5\:/drawable-hdpi/edit_title_blue.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\edit_title_blue.9.png
+net.micode.notes.app-main-5\:/drawable-hdpi/edit_title_green.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\edit_title_green.9.png
+net.micode.notes.app-main-5\:/drawable-hdpi/edit_title_red.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\edit_title_red.9.png
+net.micode.notes.app-main-5\:/drawable-hdpi/edit_title_white.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\edit_title_white.9.png
+net.micode.notes.app-main-5\:/drawable-hdpi/edit_title_yellow.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\edit_title_yellow.9.png
+net.micode.notes.app-main-5\:/drawable-hdpi/edit_white.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\edit_white.9.png
+net.micode.notes.app-main-5\:/drawable-hdpi/edit_yellow.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\edit_yellow.9.png
+net.micode.notes.app-main-5\:/drawable-hdpi/font_large.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\font_large.png
+net.micode.notes.app-main-5\:/drawable-hdpi/font_normal.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\font_normal.png
+net.micode.notes.app-main-5\:/drawable-hdpi/font_size_selector_bg.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\font_size_selector_bg.9.png
+net.micode.notes.app-main-5\:/drawable-hdpi/font_small.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\font_small.png
+net.micode.notes.app-main-5\:/drawable-hdpi/font_super.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\font_super.png
+net.micode.notes.app-main-5\:/drawable-hdpi/icon_app.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\icon_app.png
+net.micode.notes.app-main-5\:/drawable-hdpi/list_background.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_background.png
+net.micode.notes.app-main-5\:/drawable-hdpi/list_blue_down.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_blue_down.9.png
+net.micode.notes.app-main-5\:/drawable-hdpi/list_blue_middle.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_blue_middle.9.png
+net.micode.notes.app-main-5\:/drawable-hdpi/list_blue_single.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_blue_single.9.png
+net.micode.notes.app-main-5\:/drawable-hdpi/list_blue_up.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_blue_up.9.png
+net.micode.notes.app-main-5\:/drawable-hdpi/list_folder.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_folder.9.png
+net.micode.notes.app-main-5\:/drawable-hdpi/list_footer_bg.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_footer_bg.9.png
+net.micode.notes.app-main-5\:/drawable-hdpi/list_green_down.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_green_down.9.png
+net.micode.notes.app-main-5\:/drawable-hdpi/list_green_middle.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_green_middle.9.png
+net.micode.notes.app-main-5\:/drawable-hdpi/list_green_single.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_green_single.9.png
+net.micode.notes.app-main-5\:/drawable-hdpi/list_green_up.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_green_up.9.png
+net.micode.notes.app-main-5\:/drawable-hdpi/list_red_down.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_red_down.9.png
+net.micode.notes.app-main-5\:/drawable-hdpi/list_red_middle.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_red_middle.9.png
+net.micode.notes.app-main-5\:/drawable-hdpi/list_red_single.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_red_single.9.png
+net.micode.notes.app-main-5\:/drawable-hdpi/list_red_up.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_red_up.9.png
+net.micode.notes.app-main-5\:/drawable-hdpi/list_white_down.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_white_down.9.png
+net.micode.notes.app-main-5\:/drawable-hdpi/list_white_middle.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_white_middle.9.png
+net.micode.notes.app-main-5\:/drawable-hdpi/list_white_single.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_white_single.9.png
+net.micode.notes.app-main-5\:/drawable-hdpi/list_white_up.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_white_up.9.png
+net.micode.notes.app-main-5\:/drawable-hdpi/list_yellow_down.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_yellow_down.9.png
+net.micode.notes.app-main-5\:/drawable-hdpi/list_yellow_middle.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_yellow_middle.9.png
+net.micode.notes.app-main-5\:/drawable-hdpi/list_yellow_single.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_yellow_single.9.png
+net.micode.notes.app-main-5\:/drawable-hdpi/list_yellow_up.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\list_yellow_up.9.png
+net.micode.notes.app-main-5\:/drawable-hdpi/menu_delete.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\menu_delete.png
+net.micode.notes.app-main-5\:/drawable-hdpi/menu_move.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\menu_move.png
+net.micode.notes.app-main-5\:/drawable-hdpi/new_note_normal.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\new_note_normal.png
+net.micode.notes.app-main-5\:/drawable-hdpi/new_note_pressed.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\new_note_pressed.png
+net.micode.notes.app-main-5\:/drawable-hdpi/note_edit_color_selector_panel.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\note_edit_color_selector_panel.png
+net.micode.notes.app-main-5\:/drawable-hdpi/notification.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\notification.png
+net.micode.notes.app-main-5\:/drawable-hdpi/search_result.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\search_result.png
+net.micode.notes.app-main-5\:/drawable-hdpi/selected.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\selected.png
+net.micode.notes.app-main-5\:/drawable-hdpi/title_alert.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\title_alert.png
+net.micode.notes.app-main-5\:/drawable-hdpi/title_bar_bg.9.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\title_bar_bg.9.png
+net.micode.notes.app-main-5\:/drawable-hdpi/widget_2x_blue.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\widget_2x_blue.png
+net.micode.notes.app-main-5\:/drawable-hdpi/widget_2x_green.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\widget_2x_green.png
+net.micode.notes.app-main-5\:/drawable-hdpi/widget_2x_red.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\widget_2x_red.png
+net.micode.notes.app-main-5\:/drawable-hdpi/widget_2x_white.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\widget_2x_white.png
+net.micode.notes.app-main-5\:/drawable-hdpi/widget_2x_yellow.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\widget_2x_yellow.png
+net.micode.notes.app-main-5\:/drawable-hdpi/widget_4x_blue.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\widget_4x_blue.png
+net.micode.notes.app-main-5\:/drawable-hdpi/widget_4x_green.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\widget_4x_green.png
+net.micode.notes.app-main-5\:/drawable-hdpi/widget_4x_red.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\widget_4x_red.png
+net.micode.notes.app-main-5\:/drawable-hdpi/widget_4x_white.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\widget_4x_white.png
+net.micode.notes.app-main-5\:/drawable-hdpi/widget_4x_yellow.png=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\widget_4x_yellow.png
+net.micode.notes.app-main-5\:/drawable/new_note.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\drawable\\new_note.xml
+net.micode.notes.app-main-5\:/layout/account_dialog_title.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\layout\\account_dialog_title.xml
+net.micode.notes.app-main-5\:/layout/add_account_text.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\layout\\add_account_text.xml
+net.micode.notes.app-main-5\:/layout/datetime_picker.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\layout\\datetime_picker.xml
+net.micode.notes.app-main-5\:/layout/dialog_edit_text.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\layout\\dialog_edit_text.xml
+net.micode.notes.app-main-5\:/layout/folder_list_item.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\layout\\folder_list_item.xml
+net.micode.notes.app-main-5\:/layout/note_edit.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\layout\\note_edit.xml
+net.micode.notes.app-main-5\:/layout/note_edit_list_item.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\layout\\note_edit_list_item.xml
+net.micode.notes.app-main-5\:/layout/note_item.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\layout\\note_item.xml
+net.micode.notes.app-main-5\:/layout/note_list.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\layout\\note_list.xml
+net.micode.notes.app-main-5\:/layout/note_list_dropdown_menu.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\layout\\note_list_dropdown_menu.xml
+net.micode.notes.app-main-5\:/layout/note_list_footer.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\layout\\note_list_footer.xml
+net.micode.notes.app-main-5\:/layout/settings_header.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\layout\\settings_header.xml
+net.micode.notes.app-main-5\:/layout/widget_2x.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\layout\\widget_2x.xml
+net.micode.notes.app-main-5\:/layout/widget_4x.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\layout\\widget_4x.xml
+net.micode.notes.app-main-5\:/menu/call_note_edit.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\menu\\call_note_edit.xml
+net.micode.notes.app-main-5\:/menu/call_record_folder.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\menu\\call_record_folder.xml
+net.micode.notes.app-main-5\:/menu/note_edit.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\menu\\note_edit.xml
+net.micode.notes.app-main-5\:/menu/note_list.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\menu\\note_list.xml
+net.micode.notes.app-main-5\:/menu/note_list_dropdown.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\menu\\note_list_dropdown.xml
+net.micode.notes.app-main-5\:/menu/note_list_options.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\menu\\note_list_options.xml
+net.micode.notes.app-main-5\:/menu/sub_folder.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\menu\\sub_folder.xml
+net.micode.notes.app-main-5\:/raw-zh-rCN/introduction=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\raw-zh-rCN\\introduction
+net.micode.notes.app-main-5\:/raw/introduction=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\raw\\introduction
+net.micode.notes.app-main-5\:/xml/preferences.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\xml\\preferences.xml
+net.micode.notes.app-main-5\:/xml/searchable.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\xml\\searchable.xml
+net.micode.notes.app-main-5\:/xml/widget_2x_info.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\xml\\widget_2x_info.xml
+net.micode.notes.app-main-5\:/xml/widget_4x_info.xml=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\packaged_res\\debug\\xml\\widget_4x_info.xml
diff --git a/src/app/build/intermediates/incremental/debug/packageDebugResources/merged.dir/values-zh-rCN/values-zh-rCN.xml b/src/app/build/intermediates/incremental/debug/packageDebugResources/merged.dir/values-zh-rCN/values-zh-rCN.xml
new file mode 100644
index 00000000..d65e0cce
--- /dev/null
+++ b/src/app/build/intermediates/incremental/debug/packageDebugResources/merged.dir/values-zh-rCN/values-zh-rCN.xml
@@ -0,0 +1,108 @@
+
+
+
+ - 短信
+ - 邮件
+
+
+ - %1$s 条符合“%2$s”的搜索结果
+
+ 确认删除文件夹及所包含的便签吗?
+ 确认要删除该条便签吗?
+ 确认要删除所选的 %d 条便签吗?
+ 删除
+ 便签
+ 便签2x2
+ 便签4x4
+ 删除
+ 通话便签
+ 取消
+ 设置
+ 成功删除提醒
+ 不能为空便签设置闹钟提醒
+ 不能将空便签发送到桌面
+ 要查看的便签不存在
+ 导出文本时发生错误,请检查SD卡
+ SD卡被占用,不能操作
+ 同步已取消
+ 同步失败,发生内部错误
+ 同步失败,请检查网络和帐号设置
+ 导出失败
+ 文件夹 %1$s 已存在,请重新命名
+ yyyyMMdd
+ MM月dd日 kk:mm
+ 已将文本文件(%1$s)输出至SD卡(%2$s)目录
+ 已将所选 %1$d 条便签移到 %2$s 文件夹
+ 请输入名称
+ 已添加到桌面
+ 提醒我
+ 新建文件夹
+ 删除
+ 取消全选
+ 导出文本
+ 修改文件夹名称
+ 刪除文件夹
+ 查看文件夹
+ 大
+ 正常
+ 文字大小
+ 小
+ 超大
+ 进入清单模式
+ 移动到文件夹
+ 上一级文件夹
+ 退出清单模式
+ 删除提醒
+ 搜索
+ 全选
+ 没有选中项,操作无效
+ 选中了 %d 项
+ 发送到桌面
+ 设置
+ 分享
+ 同步
+ 取消同步
+ 选择文件夹
+ 已过期
+ 发送邮件
+ 打开地图
+ 呼叫电话
+ 浏览网页
+ 查看
+ 知道了
+ 新建便签
+ ...
+ 与google task同步便签记录
+ 同步账号
+ 添加账号
+ 新建便签背景颜色随机
+ 取消同步
+ 立即同步
+ 当前帐号 %1$s
+ 如更换同步帐号,过去的帐号同步信息将被清空,再次切换的同时可能会造成数据重复
+ 请选择google帐号,便签将与该帐号的google task内容同步。
+ 同步便签
+ 上次同步于 %1$s
+ 取消
+ 更换账号
+ 删除账号
+ 设置
+ 正在同步中,不能修改同步帐号
+ 同步帐号已设置为%1$s
+ 便签
+ 搜索便签
+ 正在搜索便签
+ 便签中的文字
+ 创建提醒
+ 导出成功
+ 与%1$s同步成功
+ 正在获取服务器便签列表...
+ 登录%1$s...
+ 正在同步本地便签...
+ 同步已取消
+ 同步失败
+ 同步成功
+ 同步便签...
+ 没有关联内容,点击新建便签。
+ 访客模式下,便签内容不可见
+
\ No newline at end of file
diff --git a/src/app/build/intermediates/incremental/debug/packageDebugResources/merged.dir/values-zh-rTW/values-zh-rTW.xml b/src/app/build/intermediates/incremental/debug/packageDebugResources/merged.dir/values-zh-rTW/values-zh-rTW.xml
new file mode 100644
index 00000000..226b5bc5
--- /dev/null
+++ b/src/app/build/intermediates/incremental/debug/packageDebugResources/merged.dir/values-zh-rTW/values-zh-rTW.xml
@@ -0,0 +1,108 @@
+
+
+
+ - 短信
+ - 郵件
+
+
+ - %1$s 條符合”%2$s“的搜尋結果
+
+ 確認刪除檔夾及所包含的便簽嗎?
+ 确认要删除該條便籤嗎?
+ 确认要刪除所選的 %d 條便籤嗎?
+ 刪除
+ 便簽
+ 便簽2x2
+ 便簽4x4
+ 刪除
+ 通話便籤
+ 取消
+ 設置
+ 成功刪除提醒
+ 不能爲空便籤設置鬧鐘提醒
+ 不能將空便籤發送到桌面
+ 要查看的便籤不存在
+ 導出TXT時發生錯誤,請檢查SD卡
+ SD卡被佔用,不能操作
+ 同步已取消
+ 同步失敗,發生內部錯誤
+ 同步失敗,請檢查網絡和帳號設置
+ 導出失敗
+ 文件夾 %1$s 已存在,請重新命名
+ yyyyMMdd
+ MM月dd日 kk:mm
+ 已將文本文件(%1$s)導出至SD(%2$s)目錄
+ 已將所選 %1$d 便籤移到 %2$s 文件夾
+ 請輸入名稱
+ 已添加到桌面
+ 提醒我
+ 新建文件夾
+ 刪除
+ 取消全選
+ 導出文本
+ 修改文件夾名稱
+ 刪除文件夾
+ 查看文件夾
+ 大
+ 正常
+ 文字大小
+ 小
+ 超大
+ 進入清單模式
+ 移動到文件夾
+ 上一級文件夾
+ 退出清單模式
+ 刪除提醒
+ 搜尋
+ 全選
+ 沒有選中項,操作無效
+ 選中了 %d 項
+ 發送到桌面
+ 設置
+ 分享
+ 同步
+ 取消同步
+ 選擇文件夾
+ 已過期
+ 發送郵件
+ 打開地圖
+ 呼叫電話
+ 浏覽網頁
+ 查看
+ 知道了
+ 新建便簽
+ ...
+ 与google task同步便簽記錄
+ 同步賬號
+ 添加賬號
+ 新建便籤背景顏色隨機
+ 取消同步
+ 立即同步
+ 當前帳號 %1$s
+ 如更換同步帳號,過去的帳號同步信息將被清空,再次切換的同時可能會造成數據重復
+ 請選擇google帳號,便簽將與該帳號的google task內容同步。
+ 同步便簽
+ 上次同步于 %1$s
+ 取消
+ 更換賬號
+ 刪除賬號
+ 設置
+ 正在同步中,不能修改同步帳號
+ 同步帳號已設置為%1$s
+ 便籤
+ 搜索便籤
+ 正在搜索便籤
+ 便籤中的文字
+ 創建提醒
+ 導出成功
+ 與%1$s同步成功
+ 正在獲取服務器便籤列表...
+ 登陸%1$s...
+ 正在同步本地便籤...
+ 同步已取消
+ 同步失敗
+ 同步成功
+ 同步便簽...
+ 沒有關聯內容,點擊新建便簽。
+ 訪客模式下,便籤內容不可見
+
\ No newline at end of file
diff --git a/src/app/build/intermediates/incremental/debug/packageDebugResources/merger.xml b/src/app/build/intermediates/incremental/debug/packageDebugResources/merger.xml
index 6445f66e..1c443359 100644
--- a/src/app/build/intermediates/incremental/debug/packageDebugResources/merger.xml
+++ b/src/app/build/intermediates/incremental/debug/packageDebugResources/merger.xml
@@ -1,5 +1,5 @@
-
+
- -%s
- --%s
- --%s
@@ -7,11 +7,11 @@
- Messaging
- Email
- #335b5b5b33sp26sp20sp17sp14spNotesNotes 2x2Notes 4x4No associated note found, click to create associated note.Privacy mode,can not see note content...Add noteDelete reminder successfullySet reminderExpiredyyyyMMddMMMd kk:mmGot itTake a lookCallSend emailBrowse webOpen map/MIUI/notes/notes_%s.txt(%d)New FolderExport textSyncCancel syncingSettingsSearchDeleteMove to folder%d selectedNothing selected, the operation is invalidSelect allDeselect allFont sizeSmallMediumLargeSuperEnter check listLeave check listView folderDelete folderChange folder nameThe folder %1$s exist, please renameShareSend to homeRemind meDelete reminderSelect folderParent folderNote added to homeConfirm to delete folder and its notes?Delete selected notesConfirm to delete the selected %d notes?Confirm to delete this note?Have moved selected %1$d notes to %2$s folderSD card busy, not available nowExport failed, please check SD cardThe note is not existSorry, can not set clock on empty noteSorry, can not send and empty note to homeExport successfulExport failExport text file (%1$s) to SD (%2$s) directorySyncing notes...Sync is successfulSync is failedSync is canceledSync is successful with account %1$sSync failed, please check network and account settingsSync failed, internal error occursSync is canceledLogging into %1$s...Getting remote note list...Synchronize local notes with Google Task...SettingsSync accountSync notes with google taskLast sync time %1$syyyy-MM-dd hh:mm:ssAdd accountChange sync accountRemove sync accountCancelSync immediatelyCancel syncingCurrent account %1$sAll sync related information will be deleted, which may result in duplicated items sometimeSync notesPlease select a google account. Local notes will be synced with google task.Cannot change the account because sync is in progress%1$s has been set as the sync accountNew note background color randomDeleteCall notesInput nameSearching NotesSearch notesText in your notesNotessetcancel
+ #335b5b5b33sp26sp20sp17sp14spNotesNotes 2x2Notes 4x4No associated note found, click to create associated note.Privacy mode,can not see note content...Add noteDelete reminder successfullySet reminderExpiredyyyyMMddMMMd kk:mmGot itTake a lookCallSend emailBrowse webOpen map/MIUI/notes/notes_%s.txt(%d)New FolderExport textSyncCancel syncingSettingsSearchDeleteMove to folder%d selectedNothing selected, the operation is invalidSelect allDeselect allFont sizeSmallMediumLargeSuperEnter check listLeave check listView folderDelete folderChange folder nameThe folder %1$s exist, please renameShareSend to homeRemind meDelete reminderSelect folderParent folderNote added to homeConfirm to delete folder and its notes?Delete selected notesConfirm to delete the selected %d notes?Confirm to delete this note?Have moved selected %1$d notes to %2$s folderSD card busy, not available nowExport failed, please check SD cardThe note is not existSorry, can not set clock on empty noteSorry, can not send and empty note to homeExport successfulExport failExport text file (%1$s) to SD (%2$s) directorySyncing notes...Sync is successfulSync is failedSync is canceledSync is successful with account %1$sSync failed, please check network and account settingsSync failed, internal error occursSync is canceledLogging into %1$s...Getting remote note list...Synchronize local notes with Google Task...SettingsSync accountSync notes with google taskLast sync time %1$syyyy-MM-dd hh:mm:ssAdd accountChange sync accountRemove sync accountCancelSync immediatelyCancel syncingCurrent account %1$sAll sync related information will be deleted, which may result in duplicated items sometimeSync notesPlease select a google account. Local notes will be synced with google task.Cannot change the account because sync is in progress%1$s has been set as the sync accountNew note background color randomDeleteCall notesInput nameSearching NotesSearch notesText in your notesNotessetcancel
- %1$s result for \"%2$s\"
- %1$s results for \"%2$s\"
-
+
- 短信
- 邮件
- 便签便签2x2便签4x4没有关联内容,点击新建便签。访客模式下,便签内容不可见...新建便签成功删除提醒创建提醒已过期yyyyMMddMM月dd日 kk:mm知道了查看呼叫电话发送邮件浏览网页打开地图新建文件夹导出文本同步取消同步设置搜索删除移动到文件夹选中了 %d 项没有选中项,操作无效全选取消全选文字大小小正常大超大进入清单模式退出清单模式查看文件夹刪除文件夹修改文件夹名称文件夹 %1$s 已存在,请重新命名分享发送到桌面提醒我删除提醒选择文件夹上一级文件夹已添加到桌面删除确认要删除所选的 %d 条便签吗?确认要删除该条便签吗?确认删除文件夹及所包含的便签吗?已将所选 %1$d 条便签移到 %2$s 文件夹SD卡被占用,不能操作导出文本时发生错误,请检查SD卡要查看的便签不存在不能为空便签设置闹钟提醒不能将空便签发送到桌面导出成功导出失败已将文本文件(%1$s)输出至SD卡(%2$s)目录同步便签...同步成功同步失败同步已取消与%1$s同步成功同步失败,请检查网络和帐号设置同步失败,发生内部错误同步已取消登录%1$s...正在获取服务器便签列表...正在同步本地便签...设置同步账号与google task同步便签记录上次同步于 %1$s添加账号更换账号删除账号取消立即同步取消同步当前帐号 %1$s如更换同步帐号,过去的帐号同步信息将被清空,再次切换的同时可能会造成数据重复同步便签请选择google帐号,便签将与该帐号的google task内容同步。正在同步中,不能修改同步帐号同步帐号已设置为%1$s新建便签背景颜色随机删除通话便签请输入名称正在搜索便签搜索便签便签中的文字便签设置取消
+ 便签便签2x2便签4x4没有关联内容,点击新建便签。访客模式下,便签内容不可见...新建便签成功删除提醒创建提醒已过期yyyyMMddMM月dd日 kk:mm知道了查看呼叫电话发送邮件浏览网页打开地图新建文件夹导出文本同步取消同步设置搜索删除移动到文件夹选中了 %d 项没有选中项,操作无效全选取消全选文字大小小正常大超大进入清单模式退出清单模式查看文件夹刪除文件夹修改文件夹名称文件夹 %1$s 已存在,请重新命名分享发送到桌面提醒我删除提醒选择文件夹上一级文件夹已添加到桌面删除确认要删除所选的 %d 条便签吗?确认要删除该条便签吗?确认删除文件夹及所包含的便签吗?已将所选 %1$d 条便签移到 %2$s 文件夹SD卡被占用,不能操作导出文本时发生错误,请检查SD卡要查看的便签不存在不能为空便签设置闹钟提醒不能将空便签发送到桌面导出成功导出失败已将文本文件(%1$s)输出至SD卡(%2$s)目录同步便签...同步成功同步失败同步已取消与%1$s同步成功同步失败,请检查网络和帐号设置同步失败,发生内部错误同步已取消登录%1$s...正在获取服务器便签列表...正在同步本地便签...设置同步账号与google task同步便签记录上次同步于 %1$s添加账号更换账号删除账号取消立即同步取消同步当前帐号 %1$s如更换同步帐号,过去的帐号同步信息将被清空,再次切换的同时可能会造成数据重复同步便签请选择google帐号,便签将与该帐号的google task内容同步。正在同步中,不能修改同步帐号同步帐号已设置为%1$s新建便签背景颜色随机删除通话便签请输入名称正在搜索便签搜索便签便签中的文字便签设置取消
- %1$s 条符合“%2$s”的搜索结果
-
+
- 短信
- 郵件
- 便簽便簽2x2便簽4x4沒有關聯內容,點擊新建便簽。訪客模式下,便籤內容不可見...新建便簽成功刪除提醒創建提醒已過期yyyyMMddMM月dd日 kk:mm知道了查看呼叫電話發送郵件浏覽網頁打開地圖已將所選 %1$d 便籤移到 %2$s 文件夾新建文件夾導出文本同步取消同步設置搜尋刪除移動到文件夾選中了 %d 項沒有選中項,操作無效全選取消全選文字大小小正常大超大進入清單模式退出清單模式查看文件夾刪除文件夾修改文件夾名稱文件夾 %1$s 已存在,請重新命名分享發送到桌面提醒我刪除提醒選擇文件夾上一級文件夾已添加到桌面刪除确认要刪除所選的 %d 條便籤嗎?确认要删除該條便籤嗎?確認刪除檔夾及所包含的便簽嗎?SD卡被佔用,不能操作導出TXT時發生錯誤,請檢查SD卡要查看的便籤不存在不能爲空便籤設置鬧鐘提醒不能將空便籤發送到桌面導出成功導出失敗已將文本文件(%1$s)導出至SD(%2$s)目錄同步便簽...同步成功同步失敗同步已取消與%1$s同步成功同步失敗,請檢查網絡和帳號設置同步失敗,發生內部錯誤同步已取消登陸%1$s...正在獲取服務器便籤列表...正在同步本地便籤...設置同步賬號与google task同步便簽記錄上次同步于 %1$s添加賬號更換賬號刪除賬號取消立即同步取消同步當前帳號 %1$s如更換同步帳號,過去的帳號同步信息將被清空,再次切換的同時可能會造成數據重復同步便簽請選擇google帳號,便簽將與該帳號的google task內容同步。正在同步中,不能修改同步帳號同步帳號已設置為%1$s新建便籤背景顏色隨機刪除通話便籤請輸入名稱正在搜索便籤搜索便籤便籤中的文字便籤設置取消
+ 便簽便簽2x2便簽4x4沒有關聯內容,點擊新建便簽。訪客模式下,便籤內容不可見...新建便簽成功刪除提醒創建提醒已過期yyyyMMddMM月dd日 kk:mm知道了查看呼叫電話發送郵件浏覽網頁打開地圖已將所選 %1$d 便籤移到 %2$s 文件夾新建文件夾導出文本同步取消同步設置搜尋刪除移動到文件夾選中了 %d 項沒有選中項,操作無效全選取消全選文字大小小正常大超大進入清單模式退出清單模式查看文件夾刪除文件夾修改文件夾名稱文件夾 %1$s 已存在,請重新命名分享發送到桌面提醒我刪除提醒選擇文件夾上一級文件夾已添加到桌面刪除确认要刪除所選的 %d 條便籤嗎?确认要删除該條便籤嗎?確認刪除檔夾及所包含的便簽嗎?SD卡被佔用,不能操作導出TXT時發生錯誤,請檢查SD卡要查看的便籤不存在不能爲空便籤設置鬧鐘提醒不能將空便籤發送到桌面導出成功導出失敗已將文本文件(%1$s)導出至SD(%2$s)目錄同步便簽...同步成功同步失敗同步已取消與%1$s同步成功同步失敗,請檢查網絡和帳號設置同步失敗,發生內部錯誤同步已取消登陸%1$s...正在獲取服務器便籤列表...正在同步本地便籤...設置同步賬號与google task同步便簽記錄上次同步于 %1$s添加賬號更換賬號刪除賬號取消立即同步取消同步當前帳號 %1$s如更換同步帳號,過去的帳號同步信息將被清空,再次切換的同時可能會造成數據重復同步便簽請選擇google帳號,便簽將與該帳號的google task內容同步。正在同步中,不能修改同步帳號同步帳號已設置為%1$s新建便籤背景顏色隨機刪除通話便籤請輸入名稱正在搜索便籤搜索便籤便籤中的文字便籤設置取消
- %1$s 條符合”%2$s“的搜尋結果
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/src/app/build/intermediates/incremental/debugAndroidTest/mergeDebugAndroidTestResources/compile-file-map.properties b/src/app/build/intermediates/incremental/debugAndroidTest/mergeDebugAndroidTestResources/compile-file-map.properties
index 7191bab4..c0a12631 100644
--- a/src/app/build/intermediates/incremental/debugAndroidTest/mergeDebugAndroidTestResources/compile-file-map.properties
+++ b/src/app/build/intermediates/incremental/debugAndroidTest/mergeDebugAndroidTestResources/compile-file-map.properties
@@ -1 +1 @@
-#Sat Dec 09 00:14:07 CST 2023
+#Fri Jan 05 11:10:29 CST 2024
diff --git a/src/app/build/intermediates/incremental/debugAndroidTest/mergeDebugAndroidTestResources/merger.xml b/src/app/build/intermediates/incremental/debugAndroidTest/mergeDebugAndroidTestResources/merger.xml
index 8e6b1e6d..6d04fb91 100644
--- a/src/app/build/intermediates/incremental/debugAndroidTest/mergeDebugAndroidTestResources/merger.xml
+++ b/src/app/build/intermediates/incremental/debugAndroidTest/mergeDebugAndroidTestResources/merger.xml
@@ -1,2 +1,2 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/src/app/build/intermediates/incremental/mergeDebugAndroidTestAssets/merger.xml b/src/app/build/intermediates/incremental/mergeDebugAndroidTestAssets/merger.xml
index 6179fb2c..717a254b 100644
--- a/src/app/build/intermediates/incremental/mergeDebugAndroidTestAssets/merger.xml
+++ b/src/app/build/intermediates/incremental/mergeDebugAndroidTestAssets/merger.xml
@@ -1,2 +1,2 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/src/app/build/intermediates/incremental/mergeDebugAndroidTestJniLibFolders/merger.xml b/src/app/build/intermediates/incremental/mergeDebugAndroidTestJniLibFolders/merger.xml
index f6931f87..d6ac9c36 100644
--- a/src/app/build/intermediates/incremental/mergeDebugAndroidTestJniLibFolders/merger.xml
+++ b/src/app/build/intermediates/incremental/mergeDebugAndroidTestJniLibFolders/merger.xml
@@ -1,2 +1,2 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/src/app/build/intermediates/incremental/mergeDebugAndroidTestShaders/merger.xml b/src/app/build/intermediates/incremental/mergeDebugAndroidTestShaders/merger.xml
index defcd324..bc14468f 100644
--- a/src/app/build/intermediates/incremental/mergeDebugAndroidTestShaders/merger.xml
+++ b/src/app/build/intermediates/incremental/mergeDebugAndroidTestShaders/merger.xml
@@ -1,2 +1,2 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/src/app/build/intermediates/incremental/mergeDebugAssets/merger.xml b/src/app/build/intermediates/incremental/mergeDebugAssets/merger.xml
index 1c454e33..f50e368c 100644
--- a/src/app/build/intermediates/incremental/mergeDebugAssets/merger.xml
+++ b/src/app/build/intermediates/incremental/mergeDebugAssets/merger.xml
@@ -1,2 +1,2 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/src/app/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml b/src/app/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml
index 0fcbe8e9..9be538b2 100644
--- a/src/app/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml
+++ b/src/app/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml
@@ -1,2 +1,2 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/src/app/build/intermediates/incremental/mergeDebugShaders/merger.xml b/src/app/build/intermediates/incremental/mergeDebugShaders/merger.xml
index 2c78f8c9..df282a03 100644
--- a/src/app/build/intermediates/incremental/mergeDebugShaders/merger.xml
+++ b/src/app/build/intermediates/incremental/mergeDebugShaders/merger.xml
@@ -1,2 +1,2 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/src/app/build/intermediates/incremental/packageDebug/tmp/debug/dex-renamer-state.txt b/src/app/build/intermediates/incremental/packageDebug/tmp/debug/dex-renamer-state.txt
index 5a5e78df..2e3cde42 100644
--- a/src/app/build/intermediates/incremental/packageDebug/tmp/debug/dex-renamer-state.txt
+++ b/src/app/build/intermediates/incremental/packageDebug/tmp/debug/dex-renamer-state.txt
@@ -1,4 +1,4 @@
-#Sat Dec 09 23:27:08 CST 2023
-base.0=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\dex\\debug\\mergeDexDebug\\classes.dex
+#Fri Jan 05 11:10:38 CST 2024
+base.0=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\dex\\debug\\mergeDexDebug\\classes.dex
path.0=classes.dex
renamed.0=classes.dex
diff --git a/src/app/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/androidResources b/src/app/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/androidResources
index 57db451c..d9955ddd 100644
Binary files a/src/app/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/androidResources and b/src/app/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/androidResources differ
diff --git a/src/app/build/intermediates/incremental/packageDebugAndroidTest/tmp/debugAndroidTest/dex-renamer-state.txt b/src/app/build/intermediates/incremental/packageDebugAndroidTest/tmp/debugAndroidTest/dex-renamer-state.txt
index 41788ea5..20cf095f 100644
--- a/src/app/build/intermediates/incremental/packageDebugAndroidTest/tmp/debugAndroidTest/dex-renamer-state.txt
+++ b/src/app/build/intermediates/incremental/packageDebugAndroidTest/tmp/debugAndroidTest/dex-renamer-state.txt
@@ -1,4 +1,4 @@
-#Sat Dec 09 00:54:38 CST 2023
-base.0=C\:\\Users\\huigenb\\Desktop\\All tasks\\software\\Notes-master\\app\\build\\intermediates\\dex\\debugAndroidTest\\mergeDexDebugAndroidTest\\classes.dex
+#Fri Jan 05 11:10:38 CST 2024
+base.0=C\:\\Users\\huigenb\\Desktop\\src\\app\\build\\intermediates\\dex\\debugAndroidTest\\mergeDexDebugAndroidTest\\classes.dex
path.0=classes.dex
renamed.0=classes.dex
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/remote/GTaskSyncService$1.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/remote/GTaskSyncService$1.class
index f246eb87..e3981f2a 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/remote/GTaskSyncService$1.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/remote/GTaskSyncService$1.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/remote/GTaskSyncService.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/remote/GTaskSyncService.class
index 18da491b..046324a7 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/remote/GTaskSyncService.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/gtask/remote/GTaskSyncService.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/model/Note$NoteData.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/model/Note$NoteData.class
index c40e9450..05202b9d 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/model/Note$NoteData.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/model/Note$NoteData.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/model/Note.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/model/Note.class
index d2041ccf..3a687440 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/model/Note.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/model/Note.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/model/WorkingNote.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/model/WorkingNote.class
index df71afc5..a23580d2 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/model/WorkingNote.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/model/WorkingNote.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/BackupUtils$TextExport.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/BackupUtils$TextExport.class
index 63e7f9cb..bb993409 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/BackupUtils$TextExport.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/BackupUtils$TextExport.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/BackupUtils.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/BackupUtils.class
index 6a867376..7b6cdd4f 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/BackupUtils.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/BackupUtils.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/DataUtils.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/DataUtils.class
index 6af32006..5a5386f1 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/DataUtils.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/DataUtils.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/AlarmAlertActivity.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/AlarmAlertActivity.class
index 98353eb0..efad661a 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/AlarmAlertActivity.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/AlarmAlertActivity.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/AlarmInitReceiver.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/AlarmInitReceiver.class
index a1d202d1..a33f8d86 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/AlarmInitReceiver.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/AlarmInitReceiver.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DateTimePicker$1.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DateTimePicker$1.class
index 029286f0..4a67c153 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DateTimePicker$1.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DateTimePicker$1.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DateTimePicker$2.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DateTimePicker$2.class
index e65c35c2..4c2abf29 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DateTimePicker$2.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DateTimePicker$2.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DateTimePicker$3.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DateTimePicker$3.class
index de51badc..7dc20f6e 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DateTimePicker$3.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DateTimePicker$3.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DateTimePicker$4.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DateTimePicker$4.class
index d04cbe7d..816e05c7 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DateTimePicker$4.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DateTimePicker$4.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DateTimePicker.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DateTimePicker.class
index 400d2897..cfc7a651 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DateTimePicker.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DateTimePicker.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DateTimePickerDialog$1.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DateTimePickerDialog$1.class
index 415e755c..50823ebe 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DateTimePickerDialog$1.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DateTimePickerDialog$1.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DateTimePickerDialog.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DateTimePickerDialog.class
index 71e52153..d35b4fe6 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DateTimePickerDialog.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DateTimePickerDialog.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DropdownMenu$1.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DropdownMenu$1.class
index ddd74fd6..7c0d343e 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DropdownMenu$1.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DropdownMenu$1.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DropdownMenu.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DropdownMenu.class
index 54e7df6c..c7e37cda 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DropdownMenu.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/DropdownMenu.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity$1.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity$1.class
index 5416cd38..c76c6241 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity$1.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity$1.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity$2.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity$2.class
index bb9f7862..7c29c31a 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity$2.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity$2.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity$3.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity$3.class
index 961f2f41..709c34a1 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity$3.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity$3.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity.class
index 7d0a456f..b19ce9cb 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditText$1.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditText$1.class
index 2040186e..15c7a9c0 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditText$1.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditText$1.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditText.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditText.class
index 3a19d3b0..ee9a86c1 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditText.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditText.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$1.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$1.class
index f1ba2200..00800378 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$1.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$1.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$2.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$2.class
index 76c0c9de..b0069b0c 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$2.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$2.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$3.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$3.class
index 0fd69770..4902bcb9 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$3.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$3.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$4.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$4.class
index 04686521..a588f420 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$4.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$4.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$5.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$5.class
index 54fa5723..e5ccbce8 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$5.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$5.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$6.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$6.class
index 062ecb51..e86fb561 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$6.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$6.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$7.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$7.class
index c2178731..b8b128bd 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$7.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$7.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$8.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$8.class
index d3dbb603..422f8e22 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$8.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$8.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$9.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$9.class
index 8f0a21b4..f3f92f74 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$9.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$9.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$BackgroundQueryHandler.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$BackgroundQueryHandler.class
index 127437ff..e8d00387 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$BackgroundQueryHandler.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$BackgroundQueryHandler.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ModeCallback$1.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ModeCallback$1.class
index 3981f169..7978c300 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ModeCallback$1.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ModeCallback$1.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ModeCallback$2.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ModeCallback$2.class
index 99e161f8..a0469f27 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ModeCallback$2.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ModeCallback$2.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ModeCallback.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ModeCallback.class
index f249e333..720b2852 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ModeCallback.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ModeCallback.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$NewNoteOnTouchListener.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$NewNoteOnTouchListener.class
index 81f06d33..57091a78 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$NewNoteOnTouchListener.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$NewNoteOnTouchListener.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$OnListItemClickListener.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$OnListItemClickListener.class
index 3d4e8b10..54153aa3 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$OnListItemClickListener.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$OnListItemClickListener.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity.class
index 83dc6c88..bc253a69 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListAdapter.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListAdapter.class
index 5e432e90..a6d885ca 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListAdapter.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListAdapter.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListItem.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListItem.class
index 45968346..8777b108 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListItem.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListItem.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$1.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$1.class
index 362fa059..046edf1b 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$1.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$1.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$2.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$2.class
index 85232285..d0e88bba 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$2.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$2.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$3.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$3.class
index d91bc851..15153eb8 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$3.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$3.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$4.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$4.class
index 99c7a64f..3439eb90 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$4.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$4.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$5.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$5.class
index 17e4d3bb..de07b650 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$5.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$5.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$6.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$6.class
index 7b800360..55f86ace 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$6.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$6.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$7.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$7.class
index d9abeb93..959e2f99 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$7.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$7.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$8.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$8.class
index 39e534ac..9809acc5 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$8.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$8.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$GTaskReceiver.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$GTaskReceiver.class
index eb938cfd..ce7d2739 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$GTaskReceiver.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity$GTaskReceiver.class differ
diff --git a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity.class b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity.class
index 0937be27..a31b31cb 100644
Binary files a/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity.class and b/src/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesPreferenceActivity.class differ
diff --git a/src/app/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt b/src/app/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt
index b0efa0ef..fc7a7d6b 100644
--- a/src/app/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt
+++ b/src/app/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt
@@ -20,252 +20,251 @@
20 android:versionName="0.1" >
21
22 C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:23:5-44
+22-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:23:5-44
23 android:minSdkVersion="1"
-23-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:23:15-41
+23-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:23:15-41
24 android:targetSdkVersion="14" />
-24-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:23:5-44
+24-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:23:5-44
25
26
-26-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:25:5-81
-26-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:25:22-78
+26-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:25:5-81
+26-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:25:22-78
27
-27-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:26:5-88
-27-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:26:22-85
+27-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:26:5-88
+27-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:26:22-85
28
-28-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:27:5-67
-28-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:27:22-64
+28-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:27:5-67
+28-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:27:22-64
29
-29-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:28:5-72
-29-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:28:22-69
+29-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:28:5-72
+29-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:28:22-69
30
-30-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:29:5-74
-30-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:29:22-71
+30-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:29:5-74
+30-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:29:22-71
31
-31-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:30:5-80
-31-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:30:22-77
+31-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:30:5-80
+31-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:30:22-77
32
-32-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:31:5-71
-32-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:31:22-68
+32-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:31:5-71
+32-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:31:22-68
33
-33-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:32:5-74
-33-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:32:22-71
+33-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:32:5-74
+33-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:32:22-71
34
-34-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:33:5-81
-34-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:33:22-78
+34-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:33:5-81
+34-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:33:22-78
35
36 C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:35:5-148:19
+36-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:35:5-148:19
37 android:debuggable="true"
38 android:icon="@drawable/icon_app"
-38-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:36:9-42
-39 android:label="@string/app_name"
-39-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:37:9-41
-40 android:testOnly="true" >
-41 C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:38:9-50:20
-42 android:name="net.micode.notes.ui.NotesListActivity"
-42-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:39:13-49
-43 android:configChanges="keyboardHidden|orientation|screenSize"
-43-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:40:13-74
-44 android:label="@string/app_name"
-44-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:41:13-45
-45 android:launchMode="singleTop"
-45-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:42:13-43
-46 android:theme="@style/NoteTheme"
-46-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:43:13-45
-47 android:windowSoftInputMode="adjustPan" >
-47-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:44:13-52
-48
-48-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:46:13-49:29
-49
-49-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:47:17-69
-49-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:47:25-66
-50
-51
-51-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:48:17-77
-51-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:48:27-74
-52
-53
-54 C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:52:9-80:20
-55 android:name="net.micode.notes.ui.NoteEditActivity"
-55-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:53:13-48
-56 android:configChanges="keyboardHidden|orientation|screenSize"
-56-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:54:13-74
-57 android:launchMode="singleTop"
-57-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:55:13-43
-58 android:theme="@style/NoteTheme" >
-58-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:56:13-45
-59
-59-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:58:13-63:29
-60
-60-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:59:17-69
-60-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:59:25-66
-61
-62
-62-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:60:17-76
-62-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:60:27-73
-63
-64
-64-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:61:17-78
-64-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:61:23-75
-65
-65-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:61:17-78
-65-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:61:23-75
-66
-67
-67-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:65:13-70:29
-68
-68-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:66:17-79
-68-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:66:25-76
-69
-70
-70-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:60:17-76
-70-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:60:27-73
-71
-72
-72-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:61:17-78
-72-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:61:23-75
-73
-73-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:61:17-78
-73-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:61:23-75
-74
-75
-75-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:72:13-75:29
-76
-76-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:73:17-71
-76-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:73:25-68
-77
-78
-78-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:60:17-76
-78-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:60:27-73
-79
-80
-81 C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:77:13-79:54
-82 android:name="android.app.searchable"
-82-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:78:17-54
-83 android:resource="@xml/searchable" />
-83-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:79:17-51
-84
-85
-86 C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:82:9-85:43
-87 android:name="net.micode.notes.data.NotesProvider"
-87-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:83:13-63
-88 android:authorities="micode_notes"
-88-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:84:13-47
-89 android:multiprocess="true" />
-89-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:85:13-40
-90
-91 C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:87:9-99:20
-92 android:name="net.micode.notes.widget.NoteWidgetProvider_2x"
-92-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:88:13-57
-93 android:label="@string/app_widget2x2" >
-93-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:89:13-50
-94
-94-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:90:13-94:29
-95
-95-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:91:17-84
-95-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:91:25-81
-96
-96-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:92:17-85
-96-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:92:25-82
-97
-97-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:93:17-85
-97-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:93:25-82
-98
-99
-100 C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:96:13-98:58
-101 android:name="android.appwidget.provider"
-101-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:97:17-58
-102 android:resource="@xml/widget_2x_info" />
-102-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:98:17-55
-103
-104 C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:100:9-113:20
-105 android:name="net.micode.notes.widget.NoteWidgetProvider_4x"
-105-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:101:13-57
-106 android:label="@string/app_widget4x4" >
-106-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:102:13-50
-107
-107-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:90:13-94:29
-108
-108-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:91:17-84
-108-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:91:25-81
-109
-109-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:92:17-85
-109-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:92:25-82
-110
-110-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:93:17-85
-110-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:93:25-82
-111
-112
-113 C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:96:13-98:58
-114 android:name="android.appwidget.provider"
-114-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:97:17-58
-115 android:resource="@xml/widget_4x_info" />
-115-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:98:17-55
-116
-117
-117-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:115:9-119:20
-117-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:115:19-55
-118
-118-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:116:13-118:29
-119
-119-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:117:17-79
-119-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:117:25-76
-120
-121
-122 C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:121:9-124:20
-123 android:name="net.micode.notes.ui.AlarmReceiver"
-123-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:122:13-61
-124 android:process=":remote" >
-124-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:123:13-38
-125
-126
-127 C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:126:9-131:20
-128 android:name="net.micode.notes.ui.AlarmAlertActivity"
-128-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:127:13-50
-129 android:label="@string/app_name"
-129-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:128:13-45
-130 android:launchMode="singleInstance"
-130-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:129:13-48
-131 android:theme="@android:style/Theme.Holo.Wallpaper.NoTitleBar" >
-131-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:130:13-75
-132
-133 C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:133:9-138:20
-134 android:name="net.micode.notes.ui.NotesPreferenceActivity"
-134-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:134:13-71
-135 android:label="@string/preferences_title"
-135-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:135:13-54
-136 android:launchMode="singleTop"
-136-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:136:13-43
-137 android:theme="@android:style/Theme.Holo.Light" >
-137-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:137:13-60
-138
-139
-140 C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:140:9-143:19
-141 android:name="net.micode.notes.gtask.remote.GTaskSyncService"
-141-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:141:13-74
-142 android:exported="false" >
-142-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:142:13-37
-143
-144
-145 C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:145:9-147:52
-146 android:name="android.app.default_searchable"
-146-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:146:13-58
-147 android:value=".ui.NoteEditActivity" />
-147-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\src\main\AndroidManifest.xml:147:13-49
-148
-149
-150
+38-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:36:9-42
+39 android:label="@string/app_name" >
+39-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:37:9-41
+40 C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:38:9-50:20
+41 android:name="net.micode.notes.ui.NotesListActivity"
+41-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:39:13-49
+42 android:configChanges="keyboardHidden|orientation|screenSize"
+42-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:40:13-74
+43 android:label="@string/app_name"
+43-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:41:13-45
+44 android:launchMode="singleTop"
+44-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:42:13-43
+45 android:theme="@style/NoteTheme"
+45-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:43:13-45
+46 android:windowSoftInputMode="adjustPan" >
+46-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:44:13-52
+47
+47-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:46:13-49:29
+48
+48-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:47:17-69
+48-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:47:25-66
+49
+50
+50-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:48:17-77
+50-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:48:27-74
+51
+52
+53 C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:52:9-80:20
+54 android:name="net.micode.notes.ui.NoteEditActivity"
+54-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:53:13-48
+55 android:configChanges="keyboardHidden|orientation|screenSize"
+55-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:54:13-74
+56 android:launchMode="singleTop"
+56-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:55:13-43
+57 android:theme="@style/NoteTheme" >
+57-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:56:13-45
+58
+58-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:58:13-63:29
+59
+59-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:59:17-69
+59-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:59:25-66
+60
+61
+61-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:60:17-76
+61-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:60:27-73
+62
+63
+63-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:61:17-78
+63-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:61:23-75
+64
+64-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:61:17-78
+64-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:61:23-75
+65
+66
+66-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:65:13-70:29
+67
+67-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:66:17-79
+67-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:66:25-76
+68
+69
+69-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:60:17-76
+69-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:60:27-73
+70
+71
+71-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:61:17-78
+71-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:61:23-75
+72
+72-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:61:17-78
+72-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:61:23-75
+73
+74
+74-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:72:13-75:29
+75
+75-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:73:17-71
+75-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:73:25-68
+76
+77
+77-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:60:17-76
+77-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:60:27-73
+78
+79
+80 C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:77:13-79:54
+81 android:name="android.app.searchable"
+81-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:78:17-54
+82 android:resource="@xml/searchable" />
+82-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:79:17-51
+83
+84
+85 C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:82:9-85:43
+86 android:name="net.micode.notes.data.NotesProvider"
+86-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:83:13-63
+87 android:authorities="micode_notes"
+87-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:84:13-47
+88 android:multiprocess="true" />
+88-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:85:13-40
+89
+90 C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:87:9-99:20
+91 android:name="net.micode.notes.widget.NoteWidgetProvider_2x"
+91-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:88:13-57
+92 android:label="@string/app_widget2x2" >
+92-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:89:13-50
+93
+93-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:90:13-94:29
+94
+94-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:91:17-84
+94-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:91:25-81
+95
+95-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:92:17-85
+95-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:92:25-82
+96
+96-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:93:17-85
+96-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:93:25-82
+97
+98
+99 C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:96:13-98:58
+100 android:name="android.appwidget.provider"
+100-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:97:17-58
+101 android:resource="@xml/widget_2x_info" />
+101-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:98:17-55
+102
+103 C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:100:9-113:20
+104 android:name="net.micode.notes.widget.NoteWidgetProvider_4x"
+104-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:101:13-57
+105 android:label="@string/app_widget4x4" >
+105-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:102:13-50
+106
+106-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:90:13-94:29
+107
+107-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:91:17-84
+107-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:91:25-81
+108
+108-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:92:17-85
+108-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:92:25-82
+109
+109-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:93:17-85
+109-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:93:25-82
+110
+111
+112 C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:96:13-98:58
+113 android:name="android.appwidget.provider"
+113-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:97:17-58
+114 android:resource="@xml/widget_4x_info" />
+114-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:98:17-55
+115
+116
+116-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:115:9-119:20
+116-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:115:19-55
+117
+117-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:116:13-118:29
+118
+118-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:117:17-79
+118-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:117:25-76
+119
+120
+121 C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:121:9-124:20
+122 android:name="net.micode.notes.ui.AlarmReceiver"
+122-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:122:13-61
+123 android:process=":remote" >
+123-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:123:13-38
+124
+125
+126 C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:126:9-131:20
+127 android:name="net.micode.notes.ui.AlarmAlertActivity"
+127-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:127:13-50
+128 android:label="@string/app_name"
+128-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:128:13-45
+129 android:launchMode="singleInstance"
+129-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:129:13-48
+130 android:theme="@android:style/Theme.Holo.Wallpaper.NoTitleBar" >
+130-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:130:13-75
+131
+132 C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:133:9-138:20
+133 android:name="net.micode.notes.ui.NotesPreferenceActivity"
+133-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:134:13-71
+134 android:label="@string/preferences_title"
+134-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:135:13-54
+135 android:launchMode="singleTop"
+135-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:136:13-43
+136 android:theme="@android:style/Theme.Holo.Light" >
+136-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:137:13-60
+137
+138
+139 C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:140:9-143:19
+140 android:name="net.micode.notes.gtask.remote.GTaskSyncService"
+140-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:141:13-74
+141 android:exported="false" >
+141-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:142:13-37
+142
+143
+144 C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:145:9-147:52
+145 android:name="android.app.default_searchable"
+145-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:146:13-58
+146 android:value=".ui.NoteEditActivity" />
+146-->C:\Users\huigenb\Desktop\src\app\src\main\AndroidManifest.xml:147:13-49
+147
+148
+149
diff --git a/src/app/build/intermediates/manifest_merge_blame_file/debugAndroidTest/manifest-merger-blame-debug-androidTest-report.txt b/src/app/build/intermediates/manifest_merge_blame_file/debugAndroidTest/manifest-merger-blame-debug-androidTest-report.txt
index b91c5480..003ad279 100644
--- a/src/app/build/intermediates/manifest_merge_blame_file/debugAndroidTest/manifest-merger-blame-debug-androidTest-report.txt
+++ b/src/app/build/intermediates/manifest_merge_blame_file/debugAndroidTest/manifest-merger-blame-debug-androidTest-report.txt
@@ -3,30 +3,30 @@
3 package="net.micode.notes.test" >
4
5 C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest502989645291940736.xml:5:5-73
+5-->C:\Users\huigenb\Desktop\src\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest17858049422116284728.xml:5:5-73
6 android:minSdkVersion="1"
-6-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest502989645291940736.xml:5:15-40
+6-->C:\Users\huigenb\Desktop\src\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest17858049422116284728.xml:5:15-40
7 android:targetSdkVersion="14" />
-7-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest502989645291940736.xml:5:41-70
+7-->C:\Users\huigenb\Desktop\src\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest17858049422116284728.xml:5:41-70
8
9 C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest502989645291940736.xml:11:5-15:66
+9-->C:\Users\huigenb\Desktop\src\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest17858049422116284728.xml:11:5-15:66
10 android:name="android.test.InstrumentationTestRunner"
-10-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest502989645291940736.xml:11:22-75
+10-->C:\Users\huigenb\Desktop\src\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest17858049422116284728.xml:11:22-75
11 android:functionalTest="false"
-11-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest502989645291940736.xml:14:22-52
+11-->C:\Users\huigenb\Desktop\src\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest17858049422116284728.xml:14:22-52
12 android:handleProfiling="false"
-12-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest502989645291940736.xml:13:22-53
+12-->C:\Users\huigenb\Desktop\src\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest17858049422116284728.xml:13:22-53
13 android:label="Tests for net.micode.notes"
-13-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest502989645291940736.xml:15:22-64
+13-->C:\Users\huigenb\Desktop\src\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest17858049422116284728.xml:15:22-64
14 android:targetPackage="net.micode.notes" />
-14-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest502989645291940736.xml:12:22-62
+14-->C:\Users\huigenb\Desktop\src\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest17858049422116284728.xml:12:22-62
15
16
-16-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest502989645291940736.xml:7:5-9:19
+16-->C:\Users\huigenb\Desktop\src\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest17858049422116284728.xml:7:5-9:19
17
-17-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest502989645291940736.xml:8:9-60
-17-->C:\Users\huigenb\Desktop\All tasks\software\Notes-master\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest502989645291940736.xml:8:23-57
+17-->C:\Users\huigenb\Desktop\src\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest17858049422116284728.xml:8:9-60
+17-->C:\Users\huigenb\Desktop\src\app\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest17858049422116284728.xml:8:23-57
18
19
20
diff --git a/src/app/build/intermediates/merged_manifest/debug/AndroidManifest.xml b/src/app/build/intermediates/merged_manifest/debug/AndroidManifest.xml
index 9680ab07..93713396 100644
--- a/src/app/build/intermediates/merged_manifest/debug/AndroidManifest.xml
+++ b/src/app/build/intermediates/merged_manifest/debug/AndroidManifest.xml
@@ -36,8 +36,7 @@
+ android:label="@string/app_name" >
+ android:label="@string/app_name" >
+ android:label="@string/app_name" >
0 || mNoteData.isLocalModified();
}
+
+
+
public boolean syncNote(Context context, long noteId) {
+ // 检查传入的noteId是否合法,如果不合法则抛出异常
if (noteId <= 0) {
throw new IllegalArgumentException("Wrong note id:" + noteId);
}
-
+
+ // 检查当前笔记是否有本地修改的内容,如果没有则直接返回true
if (!isLocalModified()) {
return true;
}
-
- /**
- * In theory, once data changed, the note should be updated on {@link NoteColumns#LOCAL_MODIFIED} and
- * {@link NoteColumns#MODIFIED_DATE}. For data safety, though update note fails, we also update the
- * note data info
- */
+
+ // 使用ContentResolver的update方法更新指定noteId的笔记数据,如果返回值为0,则表示更新失败
if (context.getContentResolver().update(
ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), mNoteDiffValues, null,
null) == 0) {
Log.e(TAG, "Update note error, should not happen");
- // Do not return, fall through
+ // 如果更新笔记失败,记录错误日志,但不立即返回,而是继续执行后面的逻辑
}
+
+ // 清空mNoteDiffValues,表示已经将本地修改的内容同步到了设备数据库
mNoteDiffValues.clear();
-
+
+ // 检查NoteData对象是否有本地修改的内容,如果有则将修改的内容推送到设备数据库中,如果返回值为null表示推送失败,则返回false
if (mNoteData.isLocalModified()
&& (mNoteData.pushIntoContentResolver(context, noteId) == null)) {
return false;
}
-
+
+ // 如果同步操作成功,则返回true
return true;
}
+
+
+
private class NoteData {
private long mTextDataId;
@@ -179,22 +212,29 @@ public class Note {
}
Uri pushIntoContentResolver(Context context, long noteId) {
- /**
- * Check for safety
- */
+ // 检查传入的noteId是否合法,如果不合法则抛出异常
if (noteId <= 0) {
throw new IllegalArgumentException("Wrong note id:" + noteId);
}
-
+
+ // 创建一个操作列表,用于存储要执行的ContentProvider操作
ArrayList operationList = new ArrayList();
ContentProviderOperation.Builder builder = null;
-
+
+ // 如果mTextDataValues中有内容,则进行处理
if(mTextDataValues.size() > 0) {
+ // 设置mTextDataValues中的NOTE_ID字段为传入的noteId
mTextDataValues.put(DataColumns.NOTE_ID, noteId);
+
+ // 判断mTextDataId是否为0,如果为0说明是新创建的文本数据,需要执行插入操作
if (mTextDataId == 0) {
+ // 设置mTextDataValues中的MIME_TYPE字段为TextNote的内容类型
mTextDataValues.put(DataColumns.MIME_TYPE, TextNote.CONTENT_ITEM_TYPE);
- Uri uri = context.getContentResolver().insert(Notes.CONTENT_DATA_URI,
- mTextDataValues);
+
+ // 使用ContentResolver的insert方法将mTextDataValues插入到设备数据库中,并获取插入的记录的Uri
+ Uri uri = context.getContentResolver().insert(Notes.CONTENT_DATA_URI, mTextDataValues);
+
+ // 解析uri中的pathSegments获取插入的记录的ID,并将其设置为mTextDataId
try {
setTextDataId(Long.valueOf(uri.getPathSegments().get(1)));
} catch (NumberFormatException e) {
@@ -203,14 +243,18 @@ public class Note {
return null;
}
} else {
+ // 如果mTextDataId不为0,说明是已存在的文本数据,需要执行更新操作
builder = ContentProviderOperation.newUpdate(ContentUris.withAppendedId(
Notes.CONTENT_DATA_URI, mTextDataId));
builder.withValues(mTextDataValues);
operationList.add(builder.build());
}
+
+ // 清空mTextDataValues,表示mTextDataValues的内容已经处理完成
mTextDataValues.clear();
}
-
+
+ // 如果mCallDataValues中有内容,则进行处理(处理逻辑与上述的文本数据类似)
if(mCallDataValues.size() > 0) {
mCallDataValues.put(DataColumns.NOTE_ID, noteId);
if (mCallDataId == 0) {
@@ -232,11 +276,17 @@ public class Note {
}
mCallDataValues.clear();
}
-
+
+ // 如果操作列表中有操作,则执行applyBatch方法将操作应用到设备数据库中
if (operationList.size() > 0) {
try {
+ // 使用ContentResolver的applyBatch方法将操作应用到设备数据库中,并获取操作结果
ContentProviderResult[] results = context.getContentResolver().applyBatch(
Notes.AUTHORITY, operationList);
+
+ // 根据操作结果确定返回值
+ // 如果结果为null、长度为0或第一个结果为null,则返回null
+ // 否则返回指定noteId的笔记的Uri
return (results == null || results.length == 0 || results[0] == null) ? null
: ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId);
} catch (RemoteException e) {
@@ -247,6 +297,8 @@ public class Note {
return null;
}
}
+
+ // 如果操作列表为空,则直接返回null
return null;
}
}
diff --git a/src/app/src/main/java/net/micode/notes/model/WorkingNote.java b/src/app/src/main/java/net/micode/notes/model/WorkingNote.java
index 76d2c129..06119892 100644
--- a/src/app/src/main/java/net/micode/notes/model/WorkingNote.java
+++ b/src/app/src/main/java/net/micode/notes/model/WorkingNote.java
@@ -124,46 +124,52 @@ public class WorkingNote {
loadNote();
}
+ /**
+ * 加载笔记数据
+ */
private void loadNote() {
Cursor cursor = mContext.getContentResolver().query(
ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, mNoteId), NOTE_PROJECTION, null,
null, null);
-
+
if (cursor != null) {
if (cursor.moveToFirst()) {
- mFolderId = cursor.getLong(NOTE_PARENT_ID_COLUMN);
- mBgColorId = cursor.getInt(NOTE_BG_COLOR_ID_COLUMN);
- mWidgetId = cursor.getInt(NOTE_WIDGET_ID_COLUMN);
- mWidgetType = cursor.getInt(NOTE_WIDGET_TYPE_COLUMN);
- mAlertDate = cursor.getLong(NOTE_ALERTED_DATE_COLUMN);
- mModifiedDate = cursor.getLong(NOTE_MODIFIED_DATE_COLUMN);
+ mFolderId = cursor.getLong(NOTE_PARENT_ID_COLUMN); // 获取笔记所属文件夹 ID
+ mBgColorId = cursor.getInt(NOTE_BG_COLOR_ID_COLUMN); // 获取笔记背景颜色 ID
+ mWidgetId = cursor.getInt(NOTE_WIDGET_ID_COLUMN); // 获取笔记小部件 ID
+ mWidgetType = cursor.getInt(NOTE_WIDGET_TYPE_COLUMN); // 获取笔记小部件类型
+ mAlertDate = cursor.getLong(NOTE_ALERTED_DATE_COLUMN); // 获取笔记提醒日期
+ mModifiedDate = cursor.getLong(NOTE_MODIFIED_DATE_COLUMN); // 获取笔记修改日期
}
cursor.close();
} else {
Log.e(TAG, "No note with id:" + mNoteId);
throw new IllegalArgumentException("Unable to find note with id " + mNoteId);
}
- loadNoteData();
+ loadNoteData(); // 加载笔记数据
}
-
+
+ /**
+ * 加载笔记的具体数据
+ */
private void loadNoteData() {
Cursor cursor = mContext.getContentResolver().query(Notes.CONTENT_DATA_URI, DATA_PROJECTION,
DataColumns.NOTE_ID + "=?", new String[] {
String.valueOf(mNoteId)
}, null);
-
+
if (cursor != null) {
if (cursor.moveToFirst()) {
do {
- String type = cursor.getString(DATA_MIME_TYPE_COLUMN);
+ String type = cursor.getString(DATA_MIME_TYPE_COLUMN); // 获取数据类型
if (DataConstants.NOTE.equals(type)) {
- mContent = cursor.getString(DATA_CONTENT_COLUMN);
- mMode = cursor.getInt(DATA_MODE_COLUMN);
- mNote.setTextDataId(cursor.getLong(DATA_ID_COLUMN));
+ mContent = cursor.getString(DATA_CONTENT_COLUMN); // 获取笔记文本内容
+ mMode = cursor.getInt(DATA_MODE_COLUMN); // 获取笔记模式
+ mNote.setTextDataId(cursor.getLong(DATA_ID_COLUMN)); // 设置笔记文本数据 ID
} else if (DataConstants.CALL_NOTE.equals(type)) {
- mNote.setCallDataId(cursor.getLong(DATA_ID_COLUMN));
+ mNote.setCallDataId(cursor.getLong(DATA_ID_COLUMN)); // 设置通话数据 ID
} else {
- Log.d(TAG, "Wrong note type with type:" + type);
+ Log.d(TAG, "Wrong note type with type:" + type); // 记录错误的数据类型
}
} while (cursor.moveToNext());
}
@@ -174,59 +180,90 @@ public class WorkingNote {
}
}
+ /**
+ * 创建一个空的笔记对象
+ *
+ * @param context 上下文对象
+ * @param folderId 笔记所属文件夹 ID
+ * @param widgetId 笔记小部件 ID
+ * @param widgetType 笔记小部件类型
+ * @param defaultBgColorId 默认背景颜色 ID
+ * @return 创建的空白笔记对象
+ */
public static WorkingNote createEmptyNote(Context context, long folderId, int widgetId,
int widgetType, int defaultBgColorId) {
- WorkingNote note = new WorkingNote(context, folderId);
- note.setBgColorId(defaultBgColorId);
- note.setWidgetId(widgetId);
- note.setWidgetType(widgetType);
+ WorkingNote note = new WorkingNote(context, folderId); // 创建一个工作笔记对象
+ note.setBgColorId(defaultBgColorId); // 设置默认背景颜色 ID
+ note.setWidgetId(widgetId); // 设置小部件 ID
+ note.setWidgetType(widgetType); // 设置小部件类型
return note;
}
-
+
+ /**
+ * 根据 ID 从数据库加载笔记对象
+ *
+ * @param context 上下文对象
+ * @param id 笔记 ID
+ * @return 加载的笔记对象
+ */
public static WorkingNote load(Context context, long id) {
- return new WorkingNote(context, id, 0);
+ return new WorkingNote(context, id, 0); // 根据 ID 创建工作笔记对象
}
-
+
+ /**
+ * 保存笔记对象到数据库
+ *
+ * @return 保存是否成功
+ */
public synchronized boolean saveNote() {
if (isWorthSaving()) {
- if (!existInDatabase()) {
+ if (!existInDatabase()) { // 如果笔记不存在于数据库中
if ((mNoteId = Note.getNewNoteId(mContext, mFolderId)) == 0) {
Log.e(TAG, "Create new note fail with id:" + mNoteId);
- return false;
+ return false; // 创建新笔记失败
}
}
-
- mNote.syncNote(mContext, mNoteId);
-
- /**
- * Update widget content if there exist any widget of this note
- */
+ mNote.syncNote(mContext, mNoteId); // 同步笔记到数据库
if (mWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID
&& mWidgetType != Notes.TYPE_WIDGET_INVALIDE
&& mNoteSettingStatusListener != null) {
- mNoteSettingStatusListener.onWidgetChanged();
+ mNoteSettingStatusListener.onWidgetChanged(); // 更新小部件状态
}
- return true;
+ return true; // 保存成功
} else {
- return false;
+ return false; // 未值得保存,保存失败
}
}
+ /**
+ * 检查笔记是否存在于数据库中
+ * @return 笔记是否存在于数据库中
+ */
public boolean existInDatabase() {
return mNoteId > 0;
}
-
+
+ /**
+ * 检查笔记是否值得保存
+ * 笔记不值得保存的情况包括:已被标记删除、(不存在于数据库且内容为空)、(存在于数据库且没有本地修改)
+ * @return 笔记是否值得保存
+ */
private boolean isWorthSaving() {
if (mIsDeleted || (!existInDatabase() && TextUtils.isEmpty(mContent))
|| (existInDatabase() && !mNote.isLocalModified())) {
- return false;
+ return false; // 不值得保存
} else {
- return true;
+ return true; // 值得保存
}
}
-
+
+ /**
+ * 设置笔记设置状态改变监听器
+ *
+ * @param l 笔记设置状态改变监听器
+ */
public void setOnSettingStatusChangedListener(NoteSettingChangedListener l) {
- mNoteSettingStatusListener = l;
+ mNoteSettingStatusListener = l; // 设置笔记设置状态改变监听器
}
public void setAlertDate(long date, boolean set) {
@@ -316,31 +353,45 @@ public class WorkingNote {
}
}
+ /**
+ * 设置小部件类型
+ * @param type 小部件类型
+ */
public void setWidgetType(int type) {
if (type != mWidgetType) {
mWidgetType = type;
- mNote.setNoteValue(NoteColumns.WIDGET_TYPE, String.valueOf(mWidgetType));
+ mNote.setNoteValue(NoteColumns.WIDGET_TYPE, String.valueOf(mWidgetType)); // 设置笔记值中的小部件类型
}
}
-
+ /**
+ * 设置小部件 ID
+ * @param id 小部件 ID
+ */
public void setWidgetId(int id) {
if (id != mWidgetId) {
mWidgetId = id;
- mNote.setNoteValue(NoteColumns.WIDGET_ID, String.valueOf(mWidgetId));
+ mNote.setNoteValue(NoteColumns.WIDGET_ID, String.valueOf(mWidgetId)); // 设置笔记值中的小部件 ID
}
}
-
+ /**
+ * 设置工作文本
+ * @param text 文本内容
+ */
public void setWorkingText(String text) {
if (!TextUtils.equals(mContent, text)) {
mContent = text;
- mNote.setTextData(DataColumns.CONTENT, mContent);
+ mNote.setTextData(DataColumns.CONTENT, mContent); // 设置笔记的文本数据
}
}
-
+ /**
+ * 转换为通话记录类型的笔记
+ * @param phoneNumber 电话号码
+ * @param callDate 通话日期
+ */
public void convertToCallNote(String phoneNumber, long callDate) {
- mNote.setCallData(CallNote.CALL_DATE, String.valueOf(callDate));
- mNote.setCallData(CallNote.PHONE_NUMBER, phoneNumber);
- mNote.setNoteValue(NoteColumns.PARENT_ID, String.valueOf(Notes.ID_CALL_RECORD_FOLDER));
+ mNote.setCallData(CallNote.CALL_DATE, String.valueOf(callDate)); // 设置通话数据中的通话日期
+ mNote.setCallData(CallNote.PHONE_NUMBER, phoneNumber); // 设置通话数据中的电话号码
+ mNote.setNoteValue(NoteColumns.PARENT_ID, String.valueOf(Notes.ID_CALL_RECORD_FOLDER)); // 设置笔记值中的父文件夹 ID
}
public boolean hasClockAlert() {
diff --git a/src/app/src/main/java/net/micode/notes/tool/BackupUtils.java b/src/app/src/main/java/net/micode/notes/tool/BackupUtils.java
index 39f6ec47..0267be12 100644
--- a/src/app/src/main/java/net/micode/notes/tool/BackupUtils.java
+++ b/src/app/src/main/java/net/micode/notes/tool/BackupUtils.java
@@ -140,24 +140,28 @@ public class BackupUtils {
* Export the folder identified by folder id to text
*/
private void exportFolderToText(String folderId, PrintStream ps) {
- // Query notes belong to this folder
+ // 查询属于该文件夹的笔记
Cursor notesCursor = mContext.getContentResolver().query(Notes.CONTENT_NOTE_URI,
NOTE_PROJECTION, NoteColumns.PARENT_ID + "=?", new String[] {
- folderId
+ folderId
}, null);
-
+
+ // 如果notesCursor不为null,则进行处理
if (notesCursor != null) {
+ // 如果notesCursor中有数据,则继续循环处理每个笔记
if (notesCursor.moveToFirst()) {
do {
- // Print note's last modified date
+ // 打印笔记的最后修改日期
ps.println(String.format(getFormat(FORMAT_NOTE_DATE), DateFormat.format(
mContext.getString(R.string.format_datetime_mdhm),
notesCursor.getLong(NOTE_COLUMN_MODIFIED_DATE))));
- // Query data belong to this note
+ // 查询属于该笔记的数据
String noteId = notesCursor.getString(NOTE_COLUMN_ID);
exportNoteToText(noteId, ps);
} while (notesCursor.moveToNext());
}
+
+ // 关闭notesCursor
notesCursor.close();
}
}
@@ -166,46 +170,55 @@ public class BackupUtils {
* Export note identified by id to a print stream
*/
private void exportNoteToText(String noteId, PrintStream ps) {
+ // 查询属于该笔记的数据
Cursor dataCursor = mContext.getContentResolver().query(Notes.CONTENT_DATA_URI,
DATA_PROJECTION, DataColumns.NOTE_ID + "=?", new String[] {
- noteId
+ noteId
}, null);
-
+
+ // 如果dataCursor不为null,则进行处理
if (dataCursor != null) {
+ // 如果dataCursor中有数据,则继续循环处理每个数据项
if (dataCursor.moveToFirst()) {
do {
+ // 获取数据的mimeType
String mimeType = dataCursor.getString(DATA_COLUMN_MIME_TYPE);
if (DataConstants.CALL_NOTE.equals(mimeType)) {
- // Print phone number
+ // 如果是电话笔记,则打印电话号码、通话日期和通话位置
String phoneNumber = dataCursor.getString(DATA_COLUMN_PHONE_NUMBER);
long callDate = dataCursor.getLong(DATA_COLUMN_CALL_DATE);
String location = dataCursor.getString(DATA_COLUMN_CONTENT);
-
+
+ // 如果电话号码不为空,则打印电话号码
if (!TextUtils.isEmpty(phoneNumber)) {
ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT),
phoneNumber));
}
- // Print call date
+ // 打印通话日期
ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), DateFormat
.format(mContext.getString(R.string.format_datetime_mdhm),
callDate)));
- // Print call attachment location
+ // 如果通话位置不为空,则打印通话位置
if (!TextUtils.isEmpty(location)) {
ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT),
location));
}
} else if (DataConstants.NOTE.equals(mimeType)) {
+ // 如果是普通笔记,则打印内容
String content = dataCursor.getString(DATA_COLUMN_CONTENT);
if (!TextUtils.isEmpty(content)) {
ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT),
content));
}
}
- } while (dataCursor.moveToNext());
+ } while (dataCursor.moveToNext()); // 移动到下一行继续处理
}
+
+ // 关闭dataCursor
dataCursor.close();
}
- // print a line separator between note
+
+ // 打印一个行分隔符来分割每个笔记的内容
try {
ps.write(new byte[] {
Character.LINE_SEPARATOR, Character.LETTER_NUMBER
@@ -219,126 +232,175 @@ public class BackupUtils {
* Note will be exported as text which is user readable
*/
public int exportToText() {
+ // 检查外部存储是否可用
if (!externalStorageAvailable()) {
Log.d(TAG, "Media was not mounted");
return STATE_SD_CARD_UNMOUONTED;
}
-
+
+ // 获取导出到文本的PrintStream对象
PrintStream ps = getExportToTextPrintStream();
if (ps == null) {
Log.e(TAG, "get print stream error");
return STATE_SYSTEM_ERROR;
}
- // First export folder and its notes
+
+ // 首先导出文件夹及其内部的笔记
Cursor folderCursor = mContext.getContentResolver().query(
Notes.CONTENT_NOTE_URI,
NOTE_PROJECTION,
"(" + NoteColumns.TYPE + "=" + Notes.TYPE_FOLDER + " AND "
+ NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER + ") OR "
+ NoteColumns.ID + "=" + Notes.ID_CALL_RECORD_FOLDER, null, null);
-
+
+ // 如果folderCursor不为null,则进行处理
if (folderCursor != null) {
+ // 如果folderCursor中有数据,则继续循环处理每个文件夹
if (folderCursor.moveToFirst()) {
do {
- // Print folder's name
+ // 打印文件夹的名称
String folderName = "";
if(folderCursor.getLong(NOTE_COLUMN_ID) == Notes.ID_CALL_RECORD_FOLDER) {
folderName = mContext.getString(R.string.call_record_folder_name);
} else {
folderName = folderCursor.getString(NOTE_COLUMN_SNIPPET);
}
+ // 如果文件夹名称不为空,则打印文件夹名称
if (!TextUtils.isEmpty(folderName)) {
ps.println(String.format(getFormat(FORMAT_FOLDER_NAME), folderName));
}
String folderId = folderCursor.getString(NOTE_COLUMN_ID);
+ // 导出文件夹及其内部的笔记
exportFolderToText(folderId, ps);
- } while (folderCursor.moveToNext());
+ } while (folderCursor.moveToNext()); // 移动到下一行继续处理
}
+ // 关闭folderCursor
folderCursor.close();
}
-
- // Export notes in root's folder
+
+ // 导出根文件夹下的笔记
Cursor noteCursor = mContext.getContentResolver().query(
Notes.CONTENT_NOTE_URI,
NOTE_PROJECTION,
NoteColumns.TYPE + "=" + +Notes.TYPE_NOTE + " AND " + NoteColumns.PARENT_ID
+ "=0", null, null);
-
+
+ // 如果noteCursor不为null,则进行处理
if (noteCursor != null) {
+ // 如果noteCursor中有数据,则继续循环处理每个笔记
if (noteCursor.moveToFirst()) {
do {
+ // 打印笔记的修改日期
ps.println(String.format(getFormat(FORMAT_NOTE_DATE), DateFormat.format(
mContext.getString(R.string.format_datetime_mdhm),
noteCursor.getLong(NOTE_COLUMN_MODIFIED_DATE))));
- // Query data belong to this note
+ // 查询属于该笔记的数据,并导出为文本
String noteId = noteCursor.getString(NOTE_COLUMN_ID);
exportNoteToText(noteId, ps);
- } while (noteCursor.moveToNext());
+ } while (noteCursor.moveToNext()); // 移动到下一行继续处理
}
+ // 关闭noteCursor
noteCursor.close();
}
+ // 关闭PrintStream
ps.close();
-
+
return STATE_SUCCESS;
- }
+ }
/**
* Get a print stream pointed to the file {@generateExportedTextFile}
*/
- private PrintStream getExportToTextPrintStream() {
- File file = generateFileMountedOnSDcard(mContext, R.string.file_path,
- R.string.file_name_txt_format);
- if (file == null) {
- Log.e(TAG, "create file to exported failed");
- return null;
- }
- mFileName = file.getName();
- mFileDirectory = mContext.getString(R.string.file_path);
- PrintStream ps = null;
- try {
- FileOutputStream fos = new FileOutputStream(file);
- ps = new PrintStream(fos);
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- return null;
- } catch (NullPointerException e) {
- e.printStackTrace();
- return null;
- }
- return ps;
- }
+/**
+ * 获取用于导出文本的PrintStream对象
+ * @return 如果成功获取PrintStream对象,则返回该对象;如果获取过程中出现错误,则返回null
+ */
+private PrintStream getExportToTextPrintStream() {
+ // 调用generateFileMountedOnSDcard方法生成一个文件对象
+ File file = generateFileMountedOnSDcard(mContext, R.string.file_path, R.string.file_name_txt_format);
+ // 如果生成的文件对象为空,记录错误并返回null
+ if (file == null) {
+ Log.e(TAG, "create file to exported failed");
+ return null;
+ }
+
+ // 保存生成的文件名和文件路径到成员变量
+ mFileName = file.getName();
+ mFileDirectory = mContext.getString(R.string.file_path);
+
+ PrintStream ps = null;
+ try {
+ // 创建文件输出流,并将其封装为PrintStream对象
+ FileOutputStream fos = new FileOutputStream(file);
+ ps = new PrintStream(fos);
+ } catch (FileNotFoundException e) {
+ // 捕获FileNotFoundException,记录错误并返回null
+ e.printStackTrace();
+ return null;
+ } catch (NullPointerException e) {
+ // 捕获NullPointerException,记录错误并返回null
+ e.printStackTrace();
+ return null;
+ }
+ // 返回创建的PrintStream对象,如果在过程中出现其他问题则返回null
+ return ps;
+}
}
/**
* Generate the text file to store imported data
*/
- private static File generateFileMountedOnSDcard(Context context, int filePathResId, int fileNameFormatResId) {
- StringBuilder sb = new StringBuilder();
- sb.append(Environment.getExternalStorageDirectory());
- sb.append(context.getString(filePathResId));
- File filedir = new File(sb.toString());
- sb.append(context.getString(
- fileNameFormatResId,
- DateFormat.format(context.getString(R.string.format_date_ymd),
- System.currentTimeMillis())));
- File file = new File(sb.toString());
-
- try {
- if (!filedir.exists()) {
- filedir.mkdir();
- }
- if (!file.exists()) {
- file.createNewFile();
- }
- return file;
- } catch (SecurityException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
+/**
+ * 在SD卡上生成一个文件对象
+ * @param context 上下文对象
+ * @param filePathResId 文件路径的资源ID
+ * @param fileNameFormatResId 文件名格式的资源ID
+ * @return 如果成功生成文件对象,则返回该对象;如果生成过程中出现错误,则返回null
+ */
+private static File generateFileMountedOnSDcard(Context context, int filePathResId, int fileNameFormatResId) {
+ // 创建一个StringBuilder对象,用于拼接文件路径和文件名
+ StringBuilder sb = new StringBuilder();
+
+ // 获取SD卡的根目录,并将其添加到StringBuilder中
+ sb.append(Environment.getExternalStorageDirectory());
+
+ // 从资源中获取文件路径,并将其添加到StringBuilder中
+ sb.append(context.getString(filePathResId));
+
+ // 根据文件名格式资源ID和当前时间生成文件名,并将其添加到StringBuilder中
+ sb.append(context.getString(fileNameFormatResId, DateFormat.format(context.getString(R.string.format_date_ymd),
+ System.currentTimeMillis())));
+
+ // 根据StringBuilder中的路径创建一个文件夹对象
+ File filedir = new File(sb.toString());
+
+ // 根据StringBuilder中的完整路径创建一个文件对象
+ File file = new File(sb.toString());
+
+ try {
+ // 如果文件夹不存在,则创建文件夹
+ if (!filedir.exists()) {
+ filedir.mkdir();
}
-
- return null;
+
+ // 如果文件不存在,则创建文件
+ if (!file.exists()) {
+ file.createNewFile();
+ }
+
+ // 返回生成的文件对象
+ return file;
+ } catch (SecurityException e) {
+ // 捕获SecurityException异常,打印异常信息
+ e.printStackTrace();
+ } catch (IOException e) {
+ // 捕获IOException异常,打印异常信息
+ e.printStackTrace();
}
+
+ // 返回null表示生成文件过程中出现了错误
+ return null;
+}
}
diff --git a/src/app/src/main/java/net/micode/notes/tool/DataUtils.java b/src/app/src/main/java/net/micode/notes/tool/DataUtils.java
index 2a14982e..86d6c254 100644
--- a/src/app/src/main/java/net/micode/notes/tool/DataUtils.java
+++ b/src/app/src/main/java/net/micode/notes/tool/DataUtils.java
@@ -37,259 +37,382 @@ import java.util.HashSet;
public class DataUtils {
public static final String TAG = "DataUtils";
- public static boolean batchDeleteNotes(ContentResolver resolver, HashSet ids) {
- if (ids == null) {
- Log.d(TAG, "the ids is null");
- return true;
- }
- if (ids.size() == 0) {
- Log.d(TAG, "no id is in the hashset");
- return true;
- }
-
- ArrayList operationList = new ArrayList();
- for (long id : ids) {
- if(id == Notes.ID_ROOT_FOLDER) {
- Log.e(TAG, "Don't delete system folder root");
- continue;
- }
- ContentProviderOperation.Builder builder = ContentProviderOperation
- .newDelete(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id));
- operationList.add(builder.build());
- }
- try {
- ContentProviderResult[] results = resolver.applyBatch(Notes.AUTHORITY, operationList);
- if (results == null || results.length == 0 || results[0] == null) {
- Log.d(TAG, "delete notes failed, ids:" + ids.toString());
- return false;
- }
- return true;
- } catch (RemoteException e) {
- Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage()));
- } catch (OperationApplicationException e) {
- Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage()));
- }
- return false;
+/**
+ * 批量删除便签
+ * @param resolver 内容解析器
+ * @param ids 待删除便签的ID集合
+ * @return 如果删除成功删除所有指定的便签,则返回true;否则返回false
+ */
+public static boolean batchDeleteNotes(ContentResolver resolver, HashSet ids) {
+ if (ids == null) {
+ // 如果ids为null,记录调试信息并返回true
+ Log.d(TAG, "the ids is null");
+ return true;
}
-
- public static void moveNoteToFoler(ContentResolver resolver, long id, long srcFolderId, long desFolderId) {
- ContentValues values = new ContentValues();
- values.put(NoteColumns.PARENT_ID, desFolderId);
- values.put(NoteColumns.ORIGIN_PARENT_ID, srcFolderId);
- values.put(NoteColumns.LOCAL_MODIFIED, 1);
- resolver.update(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id), values, null, null);
+ if (ids.size() == 0) {
+ // 如果ids集合为空,记录调试信息并返回true
+ Log.d(TAG, "no id is in the hashset");
+ return true;
}
- public static boolean batchMoveToFolder(ContentResolver resolver, HashSet ids,
- long folderId) {
- if (ids == null) {
- Log.d(TAG, "the ids is null");
- return true;
- }
+ ArrayList operationList = new ArrayList();
- ArrayList operationList = new ArrayList();
- for (long id : ids) {
- ContentProviderOperation.Builder builder = ContentProviderOperation
- .newUpdate(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id));
- builder.withValue(NoteColumns.PARENT_ID, folderId);
- builder.withValue(NoteColumns.LOCAL_MODIFIED, 1);
- operationList.add(builder.build());
+ // 遍历待删除的便签ID集合
+ for (long id : ids) {
+ if(id == Notes.ID_ROOT_FOLDER) {
+ // 如果当前ID为系统文件夹根目录的ID,记录错误信息并跳过
+ Log.e(TAG, "Don't delete system folder root");
+ continue;
}
-
- try {
- ContentProviderResult[] results = resolver.applyBatch(Notes.AUTHORITY, operationList);
- if (results == null || results.length == 0 || results[0] == null) {
- Log.d(TAG, "delete notes failed, ids:" + ids.toString());
- return false;
- }
- return true;
- } catch (RemoteException e) {
- Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage()));
- } catch (OperationApplicationException e) {
- Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage()));
+ // 创建一个ContentProviderOperation.Builder用于构建删除指定ID的操作
+ ContentProviderOperation.Builder builder = ContentProviderOperation.newDelete(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id));
+ // 将操作添加到操作列表中
+ operationList.add(builder.build());
+ }
+ try {
+ // 应用操作列表中的所有操作来批量删除便签
+ ContentProviderResult[] results = resolver.applyBatch(Notes.AUTHORITY, operationList);
+ if (results == null || results.length == 0 || results[0] == null) {
+ // 如果删除操作失败,记录错误信息并返回false
+ Log.d(TAG, "delete notes failed, ids:" + ids.toString());
+ return false;
}
- return false;
+ // 删除操作成功完成,返回true
+ return true;
+ } catch (RemoteException e) {
+ // 捕获RemoteException异常,记录错误信息
+ Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage()));
+ } catch (OperationApplicationException e) {
+ // 捕获OperationApplicationException异常,记录错误信息
+ Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage()));
}
+ // 出现异常情况,返回false
+ return false;
+}
- /**
- * Get the all folder count except system folders {@link Notes#TYPE_SYSTEM}}
- */
- public static int getUserFolderCount(ContentResolver resolver) {
- Cursor cursor =resolver.query(Notes.CONTENT_NOTE_URI,
- new String[] { "COUNT(*)" },
- NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>?",
- new String[] { String.valueOf(Notes.TYPE_FOLDER), String.valueOf(Notes.ID_TRASH_FOLER)},
- null);
+/**
+ * 将指定 id 的笔记移动到指定文件夹中
+ *
+ * @param resolver ContentResolver 对象,用于访问应用程序数据
+ * @param id 要移动的笔记的 ID
+ * @param srcFolderId 源文件夹的 ID
+ * @param desFolderId 目标文件夹的 ID
+ */
+public static void moveNoteToFoler(ContentResolver resolver, long id, long srcFolderId, long desFolderId) {
+ // 创建包含要更新的内容的 ContentValues 对象
+ ContentValues values = new ContentValues();
+ values.put(NoteColumns.PARENT_ID, desFolderId); // 将笔记的父文件夹 ID 设置为目标文件夹的 ID
+ values.put(NoteColumns.ORIGIN_PARENT_ID, srcFolderId); // 设置笔记的原始父文件夹 ID 为源文件夹的 ID
+ values.put(NoteColumns.LOCAL_MODIFIED, 1); // 标记笔记已在本地修改
+ // 使用 ContentResolver 执行更新操作
+ resolver.update(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id), values, null, null);
+}
- int count = 0;
- if(cursor != null) {
- if(cursor.moveToFirst()) {
- try {
- count = cursor.getInt(0);
- } catch (IndexOutOfBoundsException e) {
- Log.e(TAG, "get folder count failed:" + e.toString());
- } finally {
- cursor.close();
- }
- }
- }
- return count;
+/**
+ * 批量将笔记移动到指定文件夹
+ *
+ * @param resolver ContentResolver 对象,用于访问应用程序数据
+ * @param ids 要移动的笔记的 ID 集合
+ * @param folderId 目标文件夹的 ID
+ * @return 操作是否成功的布尔值,true 表示成功,false 表示失败
+ */
+public static boolean batchMoveToFolder(ContentResolver resolver, HashSet ids, long folderId) {
+ if (ids == null) {
+ Log.d(TAG, "the ids is null");
+ return true;
}
- public static boolean visibleInNoteDatabase(ContentResolver resolver, long noteId, int type) {
- Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId),
- null,
- NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER,
- new String [] {String.valueOf(type)},
- null);
+ // 创建存储 ContentProviderOperation 的列表
+ ArrayList operationList = new ArrayList();
+ for (long id : ids) {
+ // 创建一个更新操作的 Builder
+ ContentProviderOperation.Builder builder = ContentProviderOperation.newUpdate(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id));
+ builder.withValue(NoteColumns.PARENT_ID, folderId); // 设置笔记的父文件夹 ID 为目标文件夹的 ID
+ builder.withValue(NoteColumns.LOCAL_MODIFIED, 1); // 标记笔记已在本地修改
+ operationList.add(builder.build()); // 将操作加入列表
+ }
- boolean exist = false;
- if (cursor != null) {
- if (cursor.getCount() > 0) {
- exist = true;
- }
- cursor.close();
+ try {
+ // 应用批量操作并获取结果
+ ContentProviderResult[] results = resolver.applyBatch(Notes.AUTHORITY, operationList);
+ if (results == null || results.length == 0 || results[0] == null) {
+ Log.d(TAG, "delete notes failed, ids:" + ids.toString());
+ return false;
}
- return exist;
+ return true;
+ } catch (RemoteException e) {
+ Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage()));
+ } catch (OperationApplicationException e) {
+ Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage()));
}
+ return false;
+}
+/**
+ * 获取所有用户文件夹的数量,不包括系统文件夹 {@link Notes#TYPE_SYSTEM}
+ *
+ * @param resolver ContentResolver 对象,用于访问应用程序数据
+ * @return 用户文件夹的数量
+ */
+public static int getUserFolderCount(ContentResolver resolver) {
+ // 查询数据库获取用户文件夹的数量
+ Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI,
+ new String[] { "COUNT(*)" },
+ NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>?",
+ new String[] { String.valueOf(Notes.TYPE_FOLDER), String.valueOf(Notes.ID_TRASH_FOLER)},
+ null);
- public static boolean existInNoteDatabase(ContentResolver resolver, long noteId) {
- Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId),
- null, null, null, null);
-
- boolean exist = false;
- if (cursor != null) {
- if (cursor.getCount() > 0) {
- exist = true;
+ int count = 0;
+ if (cursor != null) {
+ if (cursor.moveToFirst()) {
+ try {
+ count = cursor.getInt(0);
+ } catch (IndexOutOfBoundsException e) {
+ Log.e(TAG, "get folder count failed:" + e.toString());
+ } finally {
+ cursor.close();
}
- cursor.close();
}
- return exist;
}
+ return count;
+}
- public static boolean existInDataDatabase(ContentResolver resolver, long dataId) {
- Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_DATA_URI, dataId),
- null, null, null, null);
+/**
+ * 判断笔记是否在笔记数据库中可见
+ *
+ * @param resolver ContentResolver 对象,用于访问应用程序数据
+ * @param noteId 笔记的 ID
+ * @param type 笔记的类型
+ * @return 笔记是否可见的布尔值,true 表示可见,false 表示不可见
+ */
+public static boolean visibleInNoteDatabase(ContentResolver resolver, long noteId, int type) {
+ // 查询数据库判断笔记是否可见
+ Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId),
+ null,
+ NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER,
+ new String[] { String.valueOf(type) },
+ null);
- boolean exist = false;
- if (cursor != null) {
- if (cursor.getCount() > 0) {
- exist = true;
- }
- cursor.close();
+ boolean exist = false;
+ if (cursor != null) {
+ if (cursor.getCount() > 0) {
+ exist = true;
}
- return exist;
+ cursor.close();
}
+ return exist;
+}
- public static boolean checkVisibleFolderName(ContentResolver resolver, String name) {
- Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI, null,
- NoteColumns.TYPE + "=" + Notes.TYPE_FOLDER +
- " AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER +
- " AND " + NoteColumns.SNIPPET + "=?",
- new String[] { name }, null);
- boolean exist = false;
- if(cursor != null) {
- if(cursor.getCount() > 0) {
- exist = true;
- }
- cursor.close();
+/**
+ * 检查给定笔记 ID 对应的笔记是否存在于笔记数据库中
+ *
+ * @param resolver ContentResolver 对象,用于访问应用程序数据
+ * @param noteId 待查询的笔记 ID
+ * @return 笔记是否存在于数据库中的布尔值,true 表示存在,false 表示不存在
+ */
+public static boolean existInNoteDatabase(ContentResolver resolver, long noteId) {
+ // 使用ContentResolver对象进行查询
+ Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId),
+ null, null, null, null);
+
+ boolean exist = false;
+ // 检查结果集是否为空
+ if (cursor != null) {
+ if (cursor.getCount() > 0) {
+ exist = true;
}
- return exist;
+ // 关闭数据库查询结果游标
+ cursor.close();
}
+ return exist;
+}
- public static HashSet getFolderNoteWidget(ContentResolver resolver, long folderId) {
- Cursor c = resolver.query(Notes.CONTENT_NOTE_URI,
- new String[] { NoteColumns.WIDGET_ID, NoteColumns.WIDGET_TYPE },
- NoteColumns.PARENT_ID + "=?",
- new String[] { String.valueOf(folderId) },
- null);
+/**
+ * 检查给定数据 ID 对应的数据是否存在于数据数据库中
+ *
+ * @param resolver ContentResolver 对象,用于访问应用程序数据
+ * @param dataId 待查询的数据 ID
+ * @return 数据是否存在于数据库中的布尔值,true 表示存在,false 表示不存在
+ */
+public static boolean existInDataDatabase(ContentResolver resolver, long dataId) {
+ // 使用ContentResolver对象进行查询
+ Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_DATA_URI, dataId),
+ null, null, null, null);
- HashSet set = null;
- if (c != null) {
- if (c.moveToFirst()) {
- set = new HashSet();
- do {
- try {
- AppWidgetAttribute widget = new AppWidgetAttribute();
- widget.widgetId = c.getInt(0);
- widget.widgetType = c.getInt(1);
- set.add(widget);
- } catch (IndexOutOfBoundsException e) {
- Log.e(TAG, e.toString());
- }
- } while (c.moveToNext());
- }
- c.close();
+ boolean exist = false;
+ // 检查结果集是否为空
+ if (cursor != null) {
+ if (cursor.getCount() > 0) {
+ exist = true;
}
- return set;
+ // 关闭数据库查询结果游标
+ cursor.close();
}
+ return exist;
+}
- public static String getCallNumberByNoteId(ContentResolver resolver, long noteId) {
- Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI,
- new String [] { CallNote.PHONE_NUMBER },
- CallNote.NOTE_ID + "=? AND " + CallNote.MIME_TYPE + "=?",
- new String [] { String.valueOf(noteId), CallNote.CONTENT_ITEM_TYPE },
- null);
-
- if (cursor != null && cursor.moveToFirst()) {
- try {
- return cursor.getString(0);
- } catch (IndexOutOfBoundsException e) {
- Log.e(TAG, "Get call number fails " + e.toString());
- } finally {
- cursor.close();
- }
+/**
+ * 检查给定文件夹名称是否存在于笔记数据库中
+ *
+ * @param resolver ContentResolver 对象,用于访问应用程序数据
+ * @param name 待查询的文件夹名称
+ * @return 文件夹名称是否存在于数据库中的布尔值,true 表示存在,false 表示不存在
+ */
+public static boolean checkVisibleFolderName(ContentResolver resolver, String name) {
+ // 使用ContentResolver对象进行查询
+ Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI, null,
+ NoteColumns.TYPE + "=" + Notes.TYPE_FOLDER +
+ " AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER +
+ " AND " + NoteColumns.SNIPPET + "=?",
+ new String[] { name }, null);
+ boolean exist = false;
+ // 检查结果集是否为空
+ if(cursor != null) {
+ if(cursor.getCount() > 0) {
+ exist = true;
}
- return "";
+ // 关闭数据库查询结果游标
+ cursor.close();
}
+ return exist;
+}
- public static long getNoteIdByPhoneNumberAndCallDate(ContentResolver resolver, String phoneNumber, long callDate) {
- Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI,
- new String [] { CallNote.NOTE_ID },
- CallNote.CALL_DATE + "=? AND " + CallNote.MIME_TYPE + "=? AND PHONE_NUMBERS_EQUAL("
- + CallNote.PHONE_NUMBER + ",?)",
- new String [] { String.valueOf(callDate), CallNote.CONTENT_ITEM_TYPE, phoneNumber },
- null);
+/**
+ * 获取指定文件夹下的小部件属性集合
+ *
+ * @param resolver ContentResolver 对象,用于访问应用程序数据
+ * @param folderId 待查询的文件夹 ID
+ * @return 包含小部件属性的 HashSet,如果查询结果为空则返回 null
+ */
+public static HashSet getFolderNoteWidget(ContentResolver resolver, long folderId) {
+ // 使用ContentResolver对象进行查询
+ Cursor c = resolver.query(Notes.CONTENT_NOTE_URI,
+ new String[] {NoteColumns.WIDGET_ID, NoteColumns.WIDGET_TYPE},
+ NoteColumns.PARENT_ID + "=?",
+ new String[] {String.valueOf(folderId)},
+ null);
- if (cursor != null) {
- if (cursor.moveToFirst()) {
+ HashSet set = null;
+ if (c != null) {
+ if (c.moveToFirst()) {
+ set = new HashSet<>();
+ do {
try {
- return cursor.getLong(0);
+ AppWidgetAttribute widget = new AppWidgetAttribute();
+ widget.widgetId = c.getInt(0);
+ widget.widgetType = c.getInt(1);
+ set.add(widget);
} catch (IndexOutOfBoundsException e) {
- Log.e(TAG, "Get call note id fails " + e.toString());
+ Log.e(TAG, e.toString());
}
- }
- cursor.close();
+ } while (c.moveToNext());
}
- return 0;
+ c.close();
}
+ return set;
+}
- public static String getSnippetById(ContentResolver resolver, long noteId) {
- Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI,
- new String [] { NoteColumns.SNIPPET },
- NoteColumns.ID + "=?",
- new String [] { String.valueOf(noteId)},
- null);
+/**
+ * 根据笔记 ID 获取对应的通话号码
+ *
+ * @param resolver ContentResolver 对象,用于访问应用程序数据
+ * @param noteId 待查询的笔记 ID
+ * @return 笔记对应的通话号码,如果查询失败则返回空字符串
+ */
+public static String getCallNumberByNoteId(ContentResolver resolver, long noteId) {
+ Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI,
+ new String[] {CallNote.PHONE_NUMBER},
+ CallNote.NOTE_ID + "=? AND " + CallNote.MIME_TYPE + "=?",
+ new String[] {String.valueOf(noteId), CallNote.CONTENT_ITEM_TYPE},
+ null);
- if (cursor != null) {
- String snippet = "";
- if (cursor.moveToFirst()) {
- snippet = cursor.getString(0);
- }
+ if (cursor != null && cursor.moveToFirst()) {
+ try {
+ return cursor.getString(0);
+ } catch (IndexOutOfBoundsException e) {
+ Log.e(TAG, "Get call number fails " + e.toString());
+ } finally {
cursor.close();
- return snippet;
}
- throw new IllegalArgumentException("Note is not found with id: " + noteId);
}
+ return "";
+}
+
+/**
+ * 根据通话号码和通话日期获取对应的笔记 ID
+ *
+ * @param resolver ContentResolver 对象,用于访问应用程序数据
+ * @param phoneNumber 待查询的通话号码
+ * @param callDate 通话日期
+ * @return 笔记 ID,如果查询失败则返回 0
+ */
+/**
+ * 根据通话号码和通话日期获取对应的笔记 ID
+ *
+ * @param resolver ContentResolver 对象,用于访问应用程序数据
+ * @param phoneNumber 待查询的通话号码
+ * @param callDate 通话日期
+ * @return 笔记 ID,如果查询失败则返回 0
+ */
+public static long getNoteIdByPhoneNumberAndCallDate(ContentResolver resolver, String phoneNumber, long callDate) {
+ Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI,
+ new String[] {CallNote.NOTE_ID},
+ CallNote.CALL_DATE + "=? AND " + CallNote.MIME_TYPE + "=? AND PHONE_NUMBERS_EQUAL(" +
+ CallNote.PHONE_NUMBER + ",?)",
+ new String[] {String.valueOf(callDate), CallNote.CONTENT_ITEM_TYPE, phoneNumber},
+ null);
- public static String getFormattedSnippet(String snippet) {
- if (snippet != null) {
- snippet = snippet.trim();
- int index = snippet.indexOf('\n');
- if (index != -1) {
- snippet = snippet.substring(0, index);
+ if (cursor != null) {
+ if (cursor.moveToFirst()) {
+ try {
+ return cursor.getLong(0);
+ } catch (IndexOutOfBoundsException e) {
+ Log.e(TAG, "Get call note id fails " + e.toString());
}
}
+ cursor.close();
+ }
+ return 0;
+}
+
+/**
+ * 根据笔记 ID获取对应的摘要信息
+ *
+ * @param resolver ContentResolver 对象,用于访问应用程序数据
+ * @param noteId 待查询的笔记 ID
+ * @return 笔记对应的摘要信息,如果查询失败则抛出 IllegalArgumentException
+ */
+public static String getSnippetById(ContentResolver resolver, long noteId) {
+ Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI,
+ new String [] { NoteColumns.SNIPPET },
+ NoteColumns.ID + "=?",
+ new String [] { String.valueOf(noteId)},
+ null);
+
+ if (cursor != null) {
+ String snippet = "";
+ if (cursor.moveToFirst()) {
+ snippet = cursor.getString(0);
+ }
+ cursor.close();
return snippet;
}
+ throw new IllegalArgumentException("Note is not found with id: " + noteId);
+}
+
+/**
+ * 格式化摘要信息,只保留第一行内容并去除前后空格
+ *
+ * @param snippet 待格式化的摘要信息
+ * @return 格式化后的摘要信息
+ */
+public static String getFormattedSnippet(String snippet) {
+ if (snippet != null) {
+ snippet = snippet.trim();
+ int index = snippet.indexOf('\n');
+ if (index != -1) {
+ snippet = snippet.substring(0, index);
+ }
+ }
+ return snippet;
+}
}
diff --git a/src/app/src/main/java/net/micode/notes/ui/AlarmAlertActivity.java b/src/app/src/main/java/net/micode/notes/ui/AlarmAlertActivity.java
index 85723be0..87ad1695 100644
--- a/src/app/src/main/java/net/micode/notes/ui/AlarmAlertActivity.java
+++ b/src/app/src/main/java/net/micode/notes/ui/AlarmAlertActivity.java
@@ -39,22 +39,29 @@ import net.micode.notes.tool.DataUtils;
import java.io.IOException;
-
+/*
+AlarmAlertActivity:
+继承Activity,实现OnClickListener,OnDismissListener接口
+核心函数:OnCreate()回调函数自动执行
+核心方法:(在OnCreate中调用)
+PlayAlarmSound() 闹钟响铃
+showActionDialog()弹出提示消息 */
+//闹钟提醒界面
public class AlarmAlertActivity extends Activity implements OnClickListener, OnDismissListener {
- private long mNoteId;
- private String mSnippet;
+ private long mNoteId; //文本id
+ private String mSnippet; //闹钟响起时的提示文字
private static final int SNIPPET_PREW_MAX_LEN = 60;
- MediaPlayer mPlayer;
+ MediaPlayer mPlayer; //媒体播放器
@Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- requestWindowFeature(Window.FEATURE_NO_TITLE);
+ protected void onCreate(Bundle savedInstanceState) { //创建时自动执行
+ super.onCreate(savedInstanceState); //依据保存的Activity的状态
+ requestWindowFeature(Window.FEATURE_NO_TITLE);//界面显示(无标题)
final Window win = getWindow();
win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
- if (!isScreenOn()) {
+ if (!isScreenOn()) { //若锁屏则点亮屏幕
win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
| WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON
@@ -65,7 +72,7 @@ public class AlarmAlertActivity extends Activity implements OnClickListener, OnD
try {
mNoteId = Long.valueOf(intent.getData().getPathSegments().get(1));
- mSnippet = DataUtils.getSnippetById(this.getContentResolver(), mNoteId);
+ mSnippet = DataUtils.getSnippetById(this.getContentResolver(), mNoteId); //根据id获取内容
mSnippet = mSnippet.length() > SNIPPET_PREW_MAX_LEN ? mSnippet.substring(0,
SNIPPET_PREW_MAX_LEN) + getResources().getString(R.string.notelist_string_info)
: mSnippet;
@@ -76,8 +83,8 @@ public class AlarmAlertActivity extends Activity implements OnClickListener, OnD
mPlayer = new MediaPlayer();
if (DataUtils.visibleInNoteDatabase(getContentResolver(), mNoteId, Notes.TYPE_NOTE)) {
- showActionDialog();
- playAlarmSound();
+ showActionDialog(); //弹出对话框
+ playAlarmSound(); //发出闹钟声音
} else {
finish();
}
@@ -122,7 +129,7 @@ public class AlarmAlertActivity extends Activity implements OnClickListener, OnD
private void showActionDialog() {
AlertDialog.Builder dialog = new AlertDialog.Builder(this);
dialog.setTitle(R.string.app_name);
- dialog.setMessage(mSnippet);
+ dialog.setMessage(mSnippet); //显示提示
dialog.setPositiveButton(R.string.notealert_ok, this);
if (isScreenOn()) {
dialog.setNegativeButton(R.string.notealert_enter, this);
@@ -130,7 +137,7 @@ public class AlarmAlertActivity extends Activity implements OnClickListener, OnD
dialog.show().setOnDismissListener(this);
}
- public void onClick(DialogInterface dialog, int which) {
+ public void onClick(DialogInterface dialog, int which) { //实现点击接口
switch (which) {
case DialogInterface.BUTTON_NEGATIVE:
Intent intent = new Intent(this, NoteEditActivity.class);
@@ -143,8 +150,8 @@ public class AlarmAlertActivity extends Activity implements OnClickListener, OnD
}
}
- public void onDismiss(DialogInterface dialog) {
- stopAlarmSound();
+ public void onDismiss(DialogInterface dialog) { //实现错失接口
+ stopAlarmSound(); //停止闹钟铃声
finish();
}
diff --git a/src/app/src/main/java/net/micode/notes/ui/AlarmInitReceiver.java b/src/app/src/main/java/net/micode/notes/ui/AlarmInitReceiver.java
index f2212025..6f85aaf5 100644
--- a/src/app/src/main/java/net/micode/notes/ui/AlarmInitReceiver.java
+++ b/src/app/src/main/java/net/micode/notes/ui/AlarmInitReceiver.java
@@ -27,7 +27,12 @@ import android.database.Cursor;
import net.micode.notes.data.Notes;
import net.micode.notes.data.Notes.NoteColumns;
-
+/*
+AlarmInitReceiver:
+继承BroadcastReceiver,
+核心函数:OnReceive()自动执行,找到与当前时间相同的便签,发送消息启动AlarmRceceiver
+ */
+//闹钟提醒启动消息接收器
public class AlarmInitReceiver extends BroadcastReceiver {
private static final String [] PROJECTION = new String [] {
@@ -40,8 +45,8 @@ public class AlarmInitReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
- long currentDate = System.currentTimeMillis();
- Cursor c = context.getContentResolver().query(Notes.CONTENT_NOTE_URI,
+ long currentDate = System.currentTimeMillis(); //当前时间
+ Cursor c = context.getContentResolver().query(Notes.CONTENT_NOTE_URI, //找到与当前时间相同的便签
PROJECTION,
NoteColumns.ALERTED_DATE + ">? AND " + NoteColumns.TYPE + "=" + Notes.TYPE_NOTE,
new String[] { String.valueOf(currentDate) },
@@ -51,7 +56,7 @@ public class AlarmInitReceiver extends BroadcastReceiver {
if (c.moveToFirst()) {
do {
long alertDate = c.getLong(COLUMN_ALERTED_DATE);
- Intent sender = new Intent(context, AlarmReceiver.class);
+ Intent sender = new Intent(context, AlarmReceiver.class); //发送消息启动AlarmReceiver
sender.setData(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, c.getLong(COLUMN_ID)));
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, sender, 0);
AlarmManager alermManager = (AlarmManager) context
diff --git a/src/app/src/main/java/net/micode/notes/ui/DateTimePicker.java b/src/app/src/main/java/net/micode/notes/ui/DateTimePicker.java
index 496b0cda..40289558 100644
--- a/src/app/src/main/java/net/micode/notes/ui/DateTimePicker.java
+++ b/src/app/src/main/java/net/micode/notes/ui/DateTimePicker.java
@@ -28,6 +28,14 @@ import android.view.View;
import android.widget.FrameLayout;
import android.widget.NumberPicker;
+/*
+DateTimePicker:
+继承FrameLayout(布局模板)
+核心函数:
+日、时、分、秒的监听函数:几个OnValueChanged()的覆写;
+在构造函数里调用这几个监听函数,并作为DateTimePickerDialog的一个属性对象
+ */
+//设置提醒时间的部件
public class DateTimePicker extends FrameLayout {
private static final boolean DEFAULT_ENABLE_STATE = true;
@@ -46,6 +54,7 @@ public class DateTimePicker extends FrameLayout {
private static final int AMPM_SPINNER_MIN_VAL = 0;
private static final int AMPM_SPINNER_MAX_VAL = 1;
+ //数字选择器:日、时、分、秒
private final NumberPicker mDateSpinner;
private final NumberPicker mHourSpinner;
private final NumberPicker mMinuteSpinner;
@@ -64,6 +73,7 @@ public class DateTimePicker extends FrameLayout {
private OnDateTimeChangedListener mOnDateTimeChangedListener;
+ //下面四个监听日、时、分、秒改变的函数
private NumberPicker.OnValueChangeListener mOnDateChangedListener = new NumberPicker.OnValueChangeListener() {
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
@@ -73,7 +83,7 @@ public class DateTimePicker extends FrameLayout {
}
};
- private NumberPicker.OnValueChangeListener mOnHourChangedListener = new NumberPicker.OnValueChangeListener() {
+ private NumberPicker.OnValueChangeListener mOnHourChangedListener = new NumberPicker.OnValueChangeListener() { //时的改变
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
boolean isDateChanged = false;
@@ -163,6 +173,7 @@ public class DateTimePicker extends FrameLayout {
int dayOfMonth, int hourOfDay, int minute);
}
+ //构造函数三连
public DateTimePicker(Context context) {
this(context, System.currentTimeMillis());
}
diff --git a/src/app/src/main/java/net/micode/notes/ui/DateTimePickerDialog.java b/src/app/src/main/java/net/micode/notes/ui/DateTimePickerDialog.java
index 2c47ba41..c4b49c36 100644
--- a/src/app/src/main/java/net/micode/notes/ui/DateTimePickerDialog.java
+++ b/src/app/src/main/java/net/micode/notes/ui/DateTimePickerDialog.java
@@ -29,23 +29,24 @@ import android.content.DialogInterface.OnClickListener;
import android.text.format.DateFormat;
import android.text.format.DateUtils;
+//设置提醒时间的对话框界面
public class DateTimePickerDialog extends AlertDialog implements OnClickListener {
private Calendar mDate = Calendar.getInstance();
private boolean mIs24HourView;
private OnDateTimeSetListener mOnDateTimeSetListener;
- private DateTimePicker mDateTimePicker;
+ private DateTimePicker mDateTimePicker; //时间提醒部件
- public interface OnDateTimeSetListener {
+ public interface OnDateTimeSetListener { //定义接口,在NoteEditActivity中被使用
void OnDateTimeSet(AlertDialog dialog, long date);
}
- public DateTimePickerDialog(Context context, long date) {
+ public DateTimePickerDialog(Context context, long date) { //构造函数,设置对话框界面
super(context);
mDateTimePicker = new DateTimePicker(context);
setView(mDateTimePicker);
mDateTimePicker.setOnDateTimeChangedListener(new OnDateTimeChangedListener() {
- public void onDateTimeChanged(DateTimePicker view, int year, int month,
+ public void onDateTimeChanged(DateTimePicker view, int year, int month, //设置date
int dayOfMonth, int hourOfDay, int minute) {
mDate.set(Calendar.YEAR, year);
mDate.set(Calendar.MONTH, month);
@@ -55,10 +56,10 @@ public class DateTimePickerDialog extends AlertDialog implements OnClickListener
updateTitle(mDate.getTimeInMillis());
}
});
- mDate.setTimeInMillis(date);
+ mDate.setTimeInMillis(date); //获取时间
mDate.set(Calendar.SECOND, 0);
mDateTimePicker.setCurrentDate(mDate.getTimeInMillis());
- setButton(context.getString(R.string.datetime_dialog_ok), this);
+ setButton(context.getString(R.string.datetime_dialog_ok), this); //两个按键
setButton2(context.getString(R.string.datetime_dialog_cancel), (OnClickListener)null);
set24HourView(DateFormat.is24HourFormat(this.getContext()));
updateTitle(mDate.getTimeInMillis());
@@ -72,7 +73,7 @@ public class DateTimePickerDialog extends AlertDialog implements OnClickListener
mOnDateTimeSetListener = callBack;
}
- private void updateTitle(long date) {
+ private void updateTitle(long date) { //android开发中常见日期管理工具类(API)——DateUtils:按照上下午显示时间
int flag =
DateUtils.FORMAT_SHOW_YEAR |
DateUtils.FORMAT_SHOW_DATE |
@@ -81,7 +82,7 @@ public class DateTimePickerDialog extends AlertDialog implements OnClickListener
setTitle(DateUtils.formatDateTime(this.getContext(), date, flag));
}
- public void onClick(DialogInterface arg0, int arg1) {
+ public void onClick(DialogInterface arg0, int arg1) { //实现点击监听,arg1是对话框上的按钮
if (mOnDateTimeSetListener != null) {
mOnDateTimeSetListener.OnDateTimeSet(this, mDate.getTimeInMillis());
}
diff --git a/src/app/src/main/java/net/micode/notes/ui/DropdownMenu.java b/src/app/src/main/java/net/micode/notes/ui/DropdownMenu.java
index 613dc74a..5978c447 100644
--- a/src/app/src/main/java/net/micode/notes/ui/DropdownMenu.java
+++ b/src/app/src/main/java/net/micode/notes/ui/DropdownMenu.java
@@ -27,21 +27,22 @@ import android.widget.PopupMenu.OnMenuItemClickListener;
import net.micode.notes.R;
+//下拉菜单页面
public class DropdownMenu {
private Button mButton;
- private PopupMenu mPopupMenu;
+ private PopupMenu mPopupMenu; //声明一个弹出式菜单
private Menu mMenu;
public DropdownMenu(Context context, Button button, int menuId) {
mButton = button;
- mButton.setBackgroundResource(R.drawable.dropdown_icon);
+ mButton.setBackgroundResource(R.drawable.dropdown_icon); //设置背景
mPopupMenu = new PopupMenu(context, mButton);
mMenu = mPopupMenu.getMenu();
mPopupMenu.getMenuInflater().inflate(menuId, mMenu);
mButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mPopupMenu.show();
- }
+ } //实现点击弹出菜单
});
}
diff --git a/src/app/src/main/java/net/micode/notes/ui/FoldersListAdapter.java b/src/app/src/main/java/net/micode/notes/ui/FoldersListAdapter.java
index 96b77da2..6f47a6c8 100644
--- a/src/app/src/main/java/net/micode/notes/ui/FoldersListAdapter.java
+++ b/src/app/src/main/java/net/micode/notes/ui/FoldersListAdapter.java
@@ -28,18 +28,18 @@ import net.micode.notes.R;
import net.micode.notes.data.Notes;
import net.micode.notes.data.Notes.NoteColumns;
-
-public class FoldersListAdapter extends CursorAdapter {
+//文件夹列表连接数据库
+public class FoldersListAdapter extends CursorAdapter { //用文件夹的形式展示给用户
public static final String [] PROJECTION = {
NoteColumns.ID,
NoteColumns.SNIPPET
};
public static final int ID_COLUMN = 0;
- public static final int NAME_COLUMN = 1;
+ public static final int NAME_COLUMN = 1;//
public FoldersListAdapter(Context context, Cursor c) {
- super(context, c);
+ super(context, c); //父类构造函数
// TODO Auto-generated constructor stub
}
@@ -68,8 +68,8 @@ public class FoldersListAdapter extends CursorAdapter {
public FolderListItem(Context context) {
super(context);
- inflate(context, R.layout.folder_list_item, this);
- mName = (TextView) findViewById(R.id.tv_folder_name);
+ inflate(context, R.layout.folder_list_item, this); //操作数据库
+ mName = (TextView) findViewById(R.id.tv_folder_name); //找出对应的内容
}
public void bind(String name) {
diff --git a/src/app/src/main/java/net/micode/notes/ui/NoteEditActivity.java b/src/app/src/main/java/net/micode/notes/ui/NoteEditActivity.java
index 556b2f75..3220822a 100644
--- a/src/app/src/main/java/net/micode/notes/ui/NoteEditActivity.java
+++ b/src/app/src/main/java/net/micode/notes/ui/NoteEditActivity.java
@@ -71,7 +71,7 @@ import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-
+//便签编辑类,实现便签编辑有关的活动,实现点击监听、便签设置更改监听、文字更改监听接口
public class NoteEditActivity extends Activity implements OnClickListener,
NoteSettingChangedListener, OnTextViewChangeListener {
private class HeadViewHolder {
@@ -84,6 +84,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
public ImageView ibSetBgColor;
}
+ //使用map进行数据存储,put将键和值相连
private static final Map sBgSelectorBtnsMap = new HashMap();
static {
sBgSelectorBtnsMap.put(R.id.iv_bg_yellow, ResourceParser.YELLOW);
@@ -122,17 +123,17 @@ public class NoteEditActivity extends Activity implements OnClickListener,
private HeadViewHolder mNoteHeaderHolder;
- private View mHeadViewPanel;
+ private View mHeadViewPanel; //表头操作
- private View mNoteBgColorSelector;
+ private View mNoteBgColorSelector; //颜色操作
- private View mFontSizeSelector;
+ private View mFontSizeSelector; //字体操作
- private EditText mNoteEditor;
+ private EditText mNoteEditor; //文本操作
private View mNoteEditorPanel;
- private WorkingNote mWorkingNote;
+ private WorkingNote mWorkingNote; //初始化正在工作便签
private SharedPreferences mSharedPrefs;
private int mFontSizeId;
@@ -152,26 +153,31 @@ public class NoteEditActivity extends Activity implements OnClickListener,
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- this.setContentView(R.layout.note_edit);
+ this.setContentView(R.layout.note_edit); //设置背景
- if (savedInstanceState == null && !initActivityState(getIntent())) {
+ if (savedInstanceState == null && !initActivityState(getIntent())) { //初始化活动状态
finish();
return;
}
- initResources();
+ initResources(); //初始化资源
}
/**
* Current activity may be killed when the memory is low. Once it is killed, for another time
* user load this activity, we should restore the former state
*/
+
@Override
- protected void onRestoreInstanceState(Bundle savedInstanceState) {
+ protected void onRestoreInstanceState(Bundle savedInstanceState) { //Activity暂停状态到恢复式被调用
super.onRestoreInstanceState(savedInstanceState);
+ // 恢复之前保存的状态
if (savedInstanceState != null && savedInstanceState.containsKey(Intent.EXTRA_UID)) {
+ // 构建一个带有 ACTION_VIEW 的 Intent,并传递之前保存的笔记id
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.putExtra(Intent.EXTRA_UID, savedInstanceState.getLong(Intent.EXTRA_UID));
+ // 初始化Activity的工作状态
if (!initActivityState(intent)) {
+ // 如果初始化失败,则结束当前Activity
finish();
return;
}
@@ -180,30 +186,28 @@ public class NoteEditActivity extends Activity implements OnClickListener,
}
private boolean initActivityState(Intent intent) {
- /**
- * If the user specified the {@link Intent#ACTION_VIEW} but not provided with id,
- * then jump to the NotesListActivity
- */
+ // 初始化工作状态
mWorkingNote = null;
if (TextUtils.equals(Intent.ACTION_VIEW, intent.getAction())) {
+ // 如果用户指定了ACTION_VIEW但没有提供id,则跳转到NotesListActivity
long noteId = intent.getLongExtra(Intent.EXTRA_UID, 0);
mUserQuery = "";
-
- /**
- * Starting from the searched result
- */
+
+ // 从搜索结果开始
if (intent.hasExtra(SearchManager.EXTRA_DATA_KEY)) {
noteId = Long.parseLong(intent.getStringExtra(SearchManager.EXTRA_DATA_KEY));
mUserQuery = intent.getStringExtra(SearchManager.USER_QUERY);
}
-
+
if (!DataUtils.visibleInNoteDatabase(getContentResolver(), noteId, Notes.TYPE_NOTE)) {
+ // 如果数据库中不存在指定的笔记,则跳转到NotesListActivity并显示错误信息
Intent jump = new Intent(this, NotesListActivity.class);
startActivity(jump);
showToast(R.string.error_note_not_exist);
finish();
return false;
} else {
+ // 加载指定id的笔记
mWorkingNote = WorkingNote.load(this, noteId);
if (mWorkingNote == null) {
Log.e(TAG, "load note failed with note id" + noteId);
@@ -215,7 +219,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN
| WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
} else if(TextUtils.equals(Intent.ACTION_INSERT_OR_EDIT, intent.getAction())) {
- // New note
+ // 新建笔记
long folderId = intent.getLongExtra(Notes.INTENT_EXTRA_FOLDER_ID, 0);
int widgetId = intent.getIntExtra(Notes.INTENT_EXTRA_WIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
@@ -223,8 +227,8 @@ public class NoteEditActivity extends Activity implements OnClickListener,
Notes.TYPE_WIDGET_INVALIDE);
int bgResId = intent.getIntExtra(Notes.INTENT_EXTRA_BACKGROUND_ID,
ResourceParser.getDefaultBgId(this));
-
- // Parse call-record note
+
+ // 解析来电记录笔记
String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
long callDate = intent.getLongExtra(Notes.INTENT_EXTRA_CALL_DATE, 0);
if (callDate != 0 && phoneNumber != null) {
@@ -234,6 +238,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
long noteId = 0;
if ((noteId = DataUtils.getNoteIdByPhoneNumberAndCallDate(getContentResolver(),
phoneNumber, callDate)) > 0) {
+ // 加载指定id的来电记录笔记
mWorkingNote = WorkingNote.load(this, noteId);
if (mWorkingNote == null) {
Log.e(TAG, "load call note failed with note id" + noteId);
@@ -241,307 +246,430 @@ public class NoteEditActivity extends Activity implements OnClickListener,
return false;
}
} else {
+ // 创建空的来电记录笔记并转换为来电记录
mWorkingNote = WorkingNote.createEmptyNote(this, folderId, widgetId,
widgetType, bgResId);
mWorkingNote.convertToCallNote(phoneNumber, callDate);
}
} else {
+ // 创建空的笔记
mWorkingNote = WorkingNote.createEmptyNote(this, folderId, widgetId, widgetType,
bgResId);
}
-
+
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE
| WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
} else {
+ // 如果Intent没有指定操作,则不应该支持该Intent,记录错误并关闭当前Activity
Log.e(TAG, "Intent not specified action, should not support");
finish();
return false;
}
+ // 设置工作状态改变监听器并返回true表示初始化成功
mWorkingNote.setOnSettingStatusChangedListener(this);
return true;
}
- @Override
- protected void onResume() {
- super.onResume();
- initNoteScreen();
+@Override
+protected void onResume() { //进入交互状态时被调用
+ super.onResume();
+ initNoteScreen(); // 初始化笔记界面
+}
+
+private void initNoteScreen() {
+ // 设置笔记编辑器的文本外观
+ mNoteEditor.setTextAppearance(this, TextAppearanceResources.getTexAppearanceResource(mFontSizeId));
+
+ // 根据工作笔记的模式进行不同的处理
+ if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) {
+ // 如果是清单模式,将编辑器切换到清单模式
+ switchToListMode(mWorkingNote.getContent());
+ } else {
+ // 如果不是清单模式,将编辑器的文本设置为工作笔记的内容
+ mNoteEditor.setText(getHighlightQueryResult(mWorkingNote.getContent(), mUserQuery));
+ // 将光标设置在文本末尾
+ mNoteEditor.setSelection(mNoteEditor.getText().length());
}
- private void initNoteScreen() {
- mNoteEditor.setTextAppearance(this, TextAppearanceResources
- .getTexAppearanceResource(mFontSizeId));
- if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) {
- switchToListMode(mWorkingNote.getContent());
+ // 隐藏背景选择器中当前选中的项
+ for (Integer id : sBgSelectorSelectionMap.keySet()) {
+ findViewById(sBgSelectorSelectionMap.get(id)).setVisibility(View.GONE);
+ }
+
+ // 设置标题栏的背景资源
+ mHeadViewPanel.setBackgroundResource(mWorkingNote.getTitleBgResId());
+ // 设置笔记编辑区域的背景颜色
+ mNoteEditorPanel.setBackgroundResource(mWorkingNote.getBgColorResId());
+
+ // 设置笔记的修改日期
+ mNoteHeaderHolder.tvModified.setText(DateUtils.formatDateTime(this,
+ mWorkingNote.getModifiedDate(), DateUtils.FORMAT_SHOW_DATE
+ | DateUtils.FORMAT_NUMERIC_DATE | DateUtils.FORMAT_SHOW_TIME
+ | DateUtils.FORMAT_SHOW_YEAR));
+
+ /**
+ * TODO: Add the menu for setting alert. Currently disable it because the DateTimePicker
+ * is not ready
+ */
+ showAlertHeader(); // 显示提醒信息(如果有)
+}
+
+private void showAlertHeader() {
+ // 如果工作笔记设置了提醒
+ if (mWorkingNote.hasClockAlert()) {
+ long time = System.currentTimeMillis();
+ if (time > mWorkingNote.getAlertDate()) {
+ // 如果提醒时间已过期,显示"提醒已过期"
+ mNoteHeaderHolder.tvAlertDate.setText(R.string.note_alert_expired);
} else {
- mNoteEditor.setText(getHighlightQueryResult(mWorkingNote.getContent(), mUserQuery));
- mNoteEditor.setSelection(mNoteEditor.getText().length());
+ // 否则,显示距提醒时间的相对时间
+ mNoteHeaderHolder.tvAlertDate.setText(DateUtils.getRelativeTimeSpanString(
+ mWorkingNote.getAlertDate(), time, DateUtils.MINUTE_IN_MILLIS));
}
- for (Integer id : sBgSelectorSelectionMap.keySet()) {
- findViewById(sBgSelectorSelectionMap.get(id)).setVisibility(View.GONE);
- }
- mHeadViewPanel.setBackgroundResource(mWorkingNote.getTitleBgResId());
- mNoteEditorPanel.setBackgroundResource(mWorkingNote.getBgColorResId());
+ // 显示提醒时间文本和提醒图标
+ mNoteHeaderHolder.tvAlertDate.setVisibility(View.VISIBLE);
+ mNoteHeaderHolder.ivAlertIcon.setVisibility(View.VISIBLE);
+ } else {
+ // 如果工作笔记没有设置提醒,隐藏提醒时间文本和提醒图标
+ mNoteHeaderHolder.tvAlertDate.setVisibility(View.GONE);
+ mNoteHeaderHolder.ivAlertIcon.setVisibility(View.GONE);
+ };
+}
- mNoteHeaderHolder.tvModified.setText(DateUtils.formatDateTime(this,
- mWorkingNote.getModifiedDate(), DateUtils.FORMAT_SHOW_DATE
- | DateUtils.FORMAT_NUMERIC_DATE | DateUtils.FORMAT_SHOW_TIME
- | DateUtils.FORMAT_SHOW_YEAR));
- /**
- * TODO: Add the menu for setting alert. Currently disable it because the DateTimePicker
- * is not ready
- */
- showAlertHeader();
- }
- private void showAlertHeader() {
- if (mWorkingNote.hasClockAlert()) {
- long time = System.currentTimeMillis();
- if (time > mWorkingNote.getAlertDate()) {
- mNoteHeaderHolder.tvAlertDate.setText(R.string.note_alert_expired);
- } else {
- mNoteHeaderHolder.tvAlertDate.setText(DateUtils.getRelativeTimeSpanString(
- mWorkingNote.getAlertDate(), time, DateUtils.MINUTE_IN_MILLIS));
- }
- mNoteHeaderHolder.tvAlertDate.setVisibility(View.VISIBLE);
- mNoteHeaderHolder.ivAlertIcon.setVisibility(View.VISIBLE);
- } else {
- mNoteHeaderHolder.tvAlertDate.setVisibility(View.GONE);
- mNoteHeaderHolder.ivAlertIcon.setVisibility(View.GONE);
- };
- }
+@Override
+protected void onNewIntent(Intent intent) { //接收新消息时
+ super.onNewIntent(intent);
+ initActivityState(intent); //更新状态
+}
- @Override
- protected void onNewIntent(Intent intent) {
- super.onNewIntent(intent);
- initActivityState(intent);
+@Override
+protected void onSaveInstanceState(Bundle outState) { //在即将被暂停或销毁时调用
+ super.onSaveInstanceState(outState);
+
+ /**
+ * 如果编辑的笔记尚未在数据库中存在(没有ID),我们先保存它以生成一个ID。
+ * 如果正在编辑的笔记不值得保存,则没有ID等同于创建新的笔记。
+ */
+ if (!mWorkingNote.existInDatabase()) {
+ saveNote();
}
+
+ outState.putLong(Intent.EXTRA_UID, mWorkingNote.getNoteId());
+ Log.d(TAG, "保存正在编辑的笔记ID:" + mWorkingNote.getNoteId() + ",onSaveInstanceState");
+}
- @Override
- protected void onSaveInstanceState(Bundle outState) {
- super.onSaveInstanceState(outState);
- /**
- * For new note without note id, we should firstly save it to
- * generate a id. If the editing note is not worth saving, there
- * is no id which is equivalent to create new note
- */
- if (!mWorkingNote.existInDatabase()) {
- saveNote();
- }
- outState.putLong(Intent.EXTRA_UID, mWorkingNote.getNoteId());
- Log.d(TAG, "Save working note id: " + mWorkingNote.getNoteId() + " onSaveInstanceState");
+@Override
+public boolean dispatchTouchEvent(MotionEvent ev) { //分发触摸事件,传递给View
+ // 如果笔记背景颜色选择器可见,并且触摸事件的位置不在选择器内,隐藏选择器并返回true
+ if (mNoteBgColorSelector.getVisibility() == View.VISIBLE
+ && !inRangeOfView(mNoteBgColorSelector, ev)) {
+ mNoteBgColorSelector.setVisibility(View.GONE);
+ return true;
}
- @Override
- public boolean dispatchTouchEvent(MotionEvent ev) {
- if (mNoteBgColorSelector.getVisibility() == View.VISIBLE
- && !inRangeOfView(mNoteBgColorSelector, ev)) {
- mNoteBgColorSelector.setVisibility(View.GONE);
- return true;
- }
-
- if (mFontSizeSelector.getVisibility() == View.VISIBLE
- && !inRangeOfView(mFontSizeSelector, ev)) {
- mFontSizeSelector.setVisibility(View.GONE);
- return true;
- }
- return super.dispatchTouchEvent(ev);
- }
-
- private boolean inRangeOfView(View view, MotionEvent ev) {
- int []location = new int[2];
- view.getLocationOnScreen(location);
- int x = location[0];
- int y = location[1];
- if (ev.getX() < x
- || ev.getX() > (x + view.getWidth())
- || ev.getY() < y
- || ev.getY() > (y + view.getHeight())) {
- return false;
- }
+ // 如果字体大小选择器可见,并且触摸事件的位置不在选择器内,隐藏选择器并返回true
+ if (mFontSizeSelector.getVisibility() == View.VISIBLE
+ && !inRangeOfView(mFontSizeSelector, ev)) {
+ mFontSizeSelector.setVisibility(View.GONE);
return true;
}
+
+ // 如果触摸事件位置没有被处理,则调用父类的dispatchTouchEvent方法处理事件
+ return super.dispatchTouchEvent(ev);
+}
- private void initResources() {
- mHeadViewPanel = findViewById(R.id.note_title);
- mNoteHeaderHolder = new HeadViewHolder();
- mNoteHeaderHolder.tvModified = (TextView) findViewById(R.id.tv_modified_date);
- mNoteHeaderHolder.ivAlertIcon = (ImageView) findViewById(R.id.iv_alert_icon);
- mNoteHeaderHolder.tvAlertDate = (TextView) findViewById(R.id.tv_alert_date);
- mNoteHeaderHolder.ibSetBgColor = (ImageView) findViewById(R.id.btn_set_bg_color);
- mNoteHeaderHolder.ibSetBgColor.setOnClickListener(this);
- mNoteEditor = (EditText) findViewById(R.id.note_edit_view);
- mNoteEditorPanel = findViewById(R.id.sv_note_edit);
- mNoteBgColorSelector = findViewById(R.id.note_bg_color_selector);
- for (int id : sBgSelectorBtnsMap.keySet()) {
- ImageView iv = (ImageView) findViewById(id);
- iv.setOnClickListener(this);
- }
+/**
+ * 检查触摸事件的位置是否在给定View内部
+ *
+ * @param view 要检查的View
+ * @param ev 触摸事件
+ * @return 触摸事件位置是否在View内部
+ */
+private boolean inRangeOfView(View view, MotionEvent ev) { //检查边界
+ int[] location = new int[2];
+ view.getLocationOnScreen(location);
+ int x = location[0];
+ int y = location[1];
+
+ // 如果触摸事件的位置超出了View的边界,则返回false
+ if (ev.getX() < x
+ || ev.getX() > (x + view.getWidth())
+ || ev.getY() < y
+ || ev.getY() > (y + view.getHeight())) {
+ return false;
+ }
+
+ return true;
+}
- mFontSizeSelector = findViewById(R.id.font_size_selector);
- for (int id : sFontSizeBtnsMap.keySet()) {
- View view = findViewById(id);
- view.setOnClickListener(this);
- };
- mSharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
- mFontSizeId = mSharedPrefs.getInt(PREFERENCE_FONT_SIZE, ResourceParser.BG_DEFAULT_FONT_SIZE);
- /**
- * HACKME: Fix bug of store the resource id in shared preference.
- * The id may larger than the length of resources, in this case,
- * return the {@link ResourceParser#BG_DEFAULT_FONT_SIZE}
- */
- if(mFontSizeId >= TextAppearanceResources.getResourcesSize()) {
- mFontSizeId = ResourceParser.BG_DEFAULT_FONT_SIZE;
- }
- mEditTextList = (LinearLayout) findViewById(R.id.note_edit_list);
+private void initResources() {
+ // 初始化控件和资源
+
+ // 获取布局中的note_title并赋值给mHeadViewPanel
+ mHeadViewPanel = findViewById(R.id.note_title);
+
+ // 创建HeadViewHolder实例
+ mNoteHeaderHolder = new HeadViewHolder();
+ // 获取布局中的tv_modified_date并赋值给mNoteHeaderHolder中的tvModified
+ mNoteHeaderHolder.tvModified = (TextView) findViewById(R.id.tv_modified_date);
+ // 获取布局中的iv_alert_icon并赋值给mNoteHeaderHolder中的ivAlertIcon
+ mNoteHeaderHolder.ivAlertIcon = (ImageView) findViewById(R.id.iv_alert_icon);
+ // 获取布局中的tv_alert_date并赋值给mNoteHeaderHolder中的tvAlertDate
+ mNoteHeaderHolder.tvAlertDate = (TextView) findViewById(R.id.tv_alert_date);
+ // 获取布局中的btn_set_bg_color并赋值给mNoteHeaderHolder中的ibSetBgColor
+ mNoteHeaderHolder.ibSetBgColor = (ImageView) findViewById(R.id.btn_set_bg_color);
+ // 设置ibSetBgColor的点击事件监听器为当前Activity(this)
+ mNoteHeaderHolder.ibSetBgColor.setOnClickListener(this);
+
+ // 获取布局中的note_edit_view并赋值给mNoteEditor
+ mNoteEditor = (EditText) findViewById(R.id.note_edit_view);
+ // 获取布局中的sv_note_edit并赋值给mNoteEditorPanel
+ mNoteEditorPanel = findViewById(R.id.sv_note_edit);
+
+ // 获取布局中的note_bg_color_selector并赋值给mNoteBgColorSelector
+ mNoteBgColorSelector = findViewById(R.id.note_bg_color_selector);
+ // 遍历sBgSelectorBtnsMap中的按钮ID,并为每个按钮设置点击事件监听器为当前Activity(this)
+ for (int id : sBgSelectorBtnsMap.keySet()) {
+ ImageView iv = (ImageView) findViewById(id);
+ iv.setOnClickListener(this);
}
- @Override
- protected void onPause() {
- super.onPause();
- if(saveNote()) {
- Log.d(TAG, "Note data was saved with length:" + mWorkingNote.getContent().length());
- }
- clearSettingState();
+ // 获取布局中的font_size_selector并赋值给mFontSizeSelector
+ mFontSizeSelector = findViewById(R.id.font_size_selector);
+ // 遍历sFontSizeBtnsMap中的按钮ID,并为每个按钮设置点击事件监听器为当前Activity(this)
+ for (int id : sFontSizeBtnsMap.keySet()) {
+ View view = findViewById(id);
+ view.setOnClickListener(this);
+ };
+
+ // 获取默认的SharedPreferences实例
+ mSharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
+ // 从SharedPreferences中获取设置的字体大小ID,默认值为ResourceParser.BG_DEFAULT_FONT_SIZE
+ mFontSizeId = mSharedPrefs.getInt(PREFERENCE_FONT_SIZE, ResourceParser.BG_DEFAULT_FONT_SIZE);
+ /**
+ * HACKME: 修复存储资源ID的共享偏好的bug。
+ * ID可能大于资源的长度,在这种情况下,
+ * 将其设置为ResourceParser.BG_DEFAULT_FONT_SIZE。
+ */
+ if(mFontSizeId >= TextAppearanceResources.getResourcesSize()) {
+ mFontSizeId = ResourceParser.BG_DEFAULT_FONT_SIZE;
}
- private void updateWidget() {
- Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
- if (mWorkingNote.getWidgetType() == Notes.TYPE_WIDGET_2X) {
- intent.setClass(this, NoteWidgetProvider_2x.class);
- } else if (mWorkingNote.getWidgetType() == Notes.TYPE_WIDGET_4X) {
- intent.setClass(this, NoteWidgetProvider_4x.class);
- } else {
- Log.e(TAG, "Unspported widget type");
- return;
- }
+ // 获取布局中的note_edit_list并赋值给mEditTextList
+ mEditTextList = (LinearLayout) findViewById(R.id.note_edit_list);
+}
- intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] {
- mWorkingNote.getWidgetId()
- });
+@Override
+protected void onPause() {
+ super.onPause();
+ // 当Activity暂停时,保存笔记数据并输出日志
+ if(saveNote()) {
+ Log.d(TAG, "Note data was saved with length:" + mWorkingNote.getContent().length());
+ }
+ // 清除设置状态
+ clearSettingState();
+}
- sendBroadcast(intent);
- setResult(RESULT_OK, intent);
- }
-
- public void onClick(View v) {
- int id = v.getId();
- if (id == R.id.btn_set_bg_color) {
- mNoteBgColorSelector.setVisibility(View.VISIBLE);
- findViewById(sBgSelectorSelectionMap.get(mWorkingNote.getBgColorId())).setVisibility(
- View.VISIBLE);
- } else if (sBgSelectorBtnsMap.containsKey(id)) {
- findViewById(sBgSelectorSelectionMap.get(mWorkingNote.getBgColorId())).setVisibility(
- View.GONE);
- mWorkingNote.setBgColorId(sBgSelectorBtnsMap.get(id));
- mNoteBgColorSelector.setVisibility(View.GONE);
- } else if (sFontSizeBtnsMap.containsKey(id)) {
- findViewById(sFontSelectorSelectionMap.get(mFontSizeId)).setVisibility(View.GONE);
- mFontSizeId = sFontSizeBtnsMap.get(id);
- mSharedPrefs.edit().putInt(PREFERENCE_FONT_SIZE, mFontSizeId).commit();
- findViewById(sFontSelectorSelectionMap.get(mFontSizeId)).setVisibility(View.VISIBLE);
- if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) {
- getWorkingText();
- switchToListMode(mWorkingNote.getContent());
- } else {
- mNoteEditor.setTextAppearance(this,
- TextAppearanceResources.getTexAppearanceResource(mFontSizeId));
- }
- mFontSizeSelector.setVisibility(View.GONE);
- }
+private void updateWidget() {
+ // 更新小部件
+
+ // 创建一个更新小部件的意图
+ Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
+
+ // 根据工作笔记的小部件类型设置相应的小部件提供者类
+ if (mWorkingNote.getWidgetType() == Notes.TYPE_WIDGET_2X) {
+ intent.setClass(this, NoteWidgetProvider_2x.class);
+ } else if (mWorkingNote.getWidgetType() == Notes.TYPE_WIDGET_4X) {
+ intent.setClass(this, NoteWidgetProvider_4x.class);
+ } else {
+ // 不支持的小部件类型,输出错误日志并返回
+ Log.e(TAG, "Unspported widget type");
+ return;
}
- @Override
- public void onBackPressed() {
- if(clearSettingState()) {
- return;
- }
+ // 将工作笔记的小部件ID作为额外数据放入意图中
+ intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] {
+ mWorkingNote.getWidgetId()
+ });
- saveNote();
- super.onBackPressed();
- }
+ // 发送广播来更新小部件
+ sendBroadcast(intent);
+ setResult(RESULT_OK, intent);
+}
- private boolean clearSettingState() {
- if (mNoteBgColorSelector.getVisibility() == View.VISIBLE) {
- mNoteBgColorSelector.setVisibility(View.GONE);
- return true;
- } else if (mFontSizeSelector.getVisibility() == View.VISIBLE) {
- mFontSizeSelector.setVisibility(View.GONE);
- return true;
+public void onClick(View v) {
+ // 获取当前点击的控件的ID
+ int id = v.getId();
+ if (id == R.id.btn_set_bg_color) {
+ // 如果点击的是设置背景颜色的按钮
+ // 显示背景颜色选择器
+ mNoteBgColorSelector.setVisibility(View.VISIBLE);
+ // 显示当前工作笔记背景颜色的选择项
+ findViewById(sBgSelectorSelectionMap.get(mWorkingNote.getBgColorId())).setVisibility(View.VISIBLE);
+ } else if (sBgSelectorBtnsMap.containsKey(id)) {
+ // 如果点击的是背景颜色选择器中的一个按钮
+ // 隐藏当前工作笔记背景颜色的选择项
+ findViewById(sBgSelectorSelectionMap.get(mWorkingNote.getBgColorId())).setVisibility(View.GONE);
+ // 设置新的背景颜色ID给工作笔记
+ mWorkingNote.setBgColorId(sBgSelectorBtnsMap.get(id));
+ // 隐藏背景颜色选择器
+ mNoteBgColorSelector.setVisibility(View.GONE);
+ } else if (sFontSizeBtnsMap.containsKey(id)) {
+ // 如果点击的是字体大小选择器中的一个按钮
+ // 隐藏当前字体大小的选择项
+ findViewById(sFontSelectorSelectionMap.get(mFontSizeId)).setVisibility(View.GONE);
+ // 设置新的字体大小ID
+ mFontSizeId = sFontSizeBtnsMap.get(id);
+ // 将新的字体大小ID保存到SharedPreferences中
+ mSharedPrefs.edit().putInt(PREFERENCE_FONT_SIZE, mFontSizeId).commit();
+ // 显示新的字体大小的选择项
+ findViewById(sFontSelectorSelectionMap.get(mFontSizeId)).setVisibility(View.VISIBLE);
+ if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) {
+ // 如果工作笔记是待办事项模式
+ // 获取当前工作文本
+ getWorkingText();
+ // 切换到待办事项模式
+ switchToListMode(mWorkingNote.getContent());
+ } else {
+ // 如果工作笔记不是待办事项模式
+ // 设置文本编辑框的文本样式为选择的字体大小
+ mNoteEditor.setTextAppearance(this, TextAppearanceResources.getTexAppearanceResource(mFontSizeId));
}
- return false;
+ // 隐藏字体大小选择器
+ mFontSizeSelector.setVisibility(View.GONE);
}
+}
- public void onBackgroundColorChanged() {
- findViewById(sBgSelectorSelectionMap.get(mWorkingNote.getBgColorId())).setVisibility(
- View.VISIBLE);
- mNoteEditorPanel.setBackgroundResource(mWorkingNote.getBgColorResId());
- mHeadViewPanel.setBackgroundResource(mWorkingNote.getTitleBgResId());
+@Override
+public void onBackPressed() {
+ // 当返回按钮按下时
+ if (clearSettingState()) {
+ // 如果当前状态是设置状态,清除设置状态并返回
+ return;
}
- @Override
- public boolean onPrepareOptionsMenu(Menu menu) {
- if (isFinishing()) {
- return true;
- }
- clearSettingState();
- menu.clear();
- if (mWorkingNote.getFolderId() == Notes.ID_CALL_RECORD_FOLDER) {
- getMenuInflater().inflate(R.menu.call_note_edit, menu);
- } else {
- getMenuInflater().inflate(R.menu.note_edit, menu);
- }
- if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) {
- menu.findItem(R.id.menu_list_mode).setTitle(R.string.menu_normal_mode);
- } else {
- menu.findItem(R.id.menu_list_mode).setTitle(R.string.menu_list_mode);
- }
- if (mWorkingNote.hasClockAlert()) {
- menu.findItem(R.id.menu_alert).setVisible(false);
- } else {
- menu.findItem(R.id.menu_delete_remind).setVisible(false);
- }
+ // 保存工作笔记
+ saveNote();
+ super.onBackPressed();
+}
+
+private boolean clearSettingState() {
+ // 清除设置状态方法
+ if (mNoteBgColorSelector.getVisibility() == View.VISIBLE) {
+ // 如果背景颜色选择器可见
+ // 隐藏背景颜色选择器
+ mNoteBgColorSelector.setVisibility(View.GONE);
+ return true;
+ } else if (mFontSizeSelector.getVisibility() == View.VISIBLE) {
+ // 如果字体大小选择器可见
+ // 隐藏字体大小选择器
+ mFontSizeSelector.setVisibility(View.GONE);
return true;
}
+ return false;
+}
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- int itemId = item.getItemId();
- if (itemId == R.id.menu_new_note) {
- createNewNote();
- } else if (itemId == R.id.menu_delete) {
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
- builder.setTitle(getString(R.string.alert_title_delete));
- builder.setIcon(android.R.drawable.ic_dialog_alert);
- builder.setMessage(getString(R.string.alert_message_delete_note));
- builder.setPositiveButton(android.R.string.ok,
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- deleteCurrentNote();
- finish();
- }
- });
- builder.setNegativeButton(android.R.string.cancel, null);
- builder.show();
- } else if (itemId == R.id.menu_font_size) {
- mFontSizeSelector.setVisibility(View.VISIBLE);
- findViewById(sFontSelectorSelectionMap.get(mFontSizeId)).setVisibility(View.VISIBLE);
- } else if (itemId == R.id.menu_list_mode) {
- mWorkingNote.setCheckListMode(mWorkingNote.getCheckListMode() == 0 ?
- TextNote.MODE_CHECK_LIST : 0);
- } else if (itemId == R.id.menu_share) {
- getWorkingText();
- sendTo(this, mWorkingNote.getContent());
- } else if (itemId == R.id.menu_send_to_desktop) {
- sendToDesktop();
- } else if (itemId == R.id.menu_alert) {
- setReminder();
- } else if (itemId == R.id.menu_delete_remind) {
- mWorkingNote.setAlertDate(0, false);
- }
+public void onBackgroundColorChanged() {
+ // 根据当前工作笔记的背景颜色ID显示相应的选择项
+ findViewById(sBgSelectorSelectionMap.get(mWorkingNote.getBgColorId())).setVisibility(View.VISIBLE);
+ // 设置工作笔记编辑面板的背景颜色为当前工作笔记的背景颜色资源ID
+ mNoteEditorPanel.setBackgroundResource(mWorkingNote.getBgColorResId());
+ // 设置工作笔记标题栏的背景颜色为当前工作笔记的标题背景资源ID
+ mHeadViewPanel.setBackgroundResource(mWorkingNote.getTitleBgResId());
+}
+
+@Override
+public boolean onPrepareOptionsMenu(Menu menu) {
+ // 菜单准备方法,动态显示菜单项
+ if (isFinishing()) {
return true;
}
+ // 清除设置状态
+ clearSettingState();
+ // 清空菜单项
+ menu.clear();
+ if (mWorkingNote.getFolderId() == Notes.ID_CALL_RECORD_FOLDER) {
+ // 如果工作笔记所在文件夹是通话记录文件夹
+ // 加载通话记录编辑菜单
+ getMenuInflater().inflate(R.menu.call_note_edit, menu);
+ } else {
+ // 加载普通笔记编辑菜单
+ getMenuInflater().inflate(R.menu.note_edit, menu);
+ }
+ if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) {
+ // 如果工作笔记是待办事项模式
+ // 动态设置菜单项的标题为“普通模式”
+ menu.findItem(R.id.menu_list_mode).setTitle(R.string.menu_normal_mode);
+ } else {
+ // 动态设置菜单项的标题为“待办事项模式”
+ menu.findItem(R.id.menu_list_mode).setTitle(R.string.menu_list_mode);
+ }
+ if (mWorkingNote.hasClockAlert()) {
+ // 如果工作笔记有闹钟提醒
+ // 隐藏菜单项“提醒”
+ menu.findItem(R.id.menu_alert).setVisible(false);
+ } else {
+ // 隐藏菜单项“删除提醒”
+ menu.findItem(R.id.menu_delete_remind).setVisible(false);
+ }
+ return true;
+}
+
+@Override
+public boolean onOptionsItemSelected(MenuItem item) { //响应用户在菜单中选择菜单项的操作
+ int itemId = item.getItemId();
+ if (itemId == R.id.menu_new_note) {
+ // 当点击菜单项“新建笔记”时
+ createNewNote();
+ } else if (itemId == R.id.menu_delete) {
+ // 当点击菜单项“删除笔记”时
+ // 弹出确认对话框
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setTitle(getString(R.string.alert_title_delete));
+ builder.setIcon(android.R.drawable.ic_dialog_alert);
+ builder.setMessage(getString(R.string.alert_message_delete_note));
+ builder.setPositiveButton(android.R.string.ok,
+ new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ // 确认删除工作笔记,删除并结束当前活动
+ deleteCurrentNote();
+ finish();
+ }
+ });
+ builder.setNegativeButton(android.R.string.cancel, null);
+ builder.show();
+ } else if (itemId == R.id.menu_font_size) {
+ // 当点击菜单项“字体大小”时
+ // 显示字体大小选择器,并根据当前字体大小ID显示相应的选择项
+ mFontSizeSelector.setVisibility(View.VISIBLE);
+ findViewById(sFontSelectorSelectionMap.get(mFontSizeId)).setVisibility(View.VISIBLE);
+ } else if (itemId == R.id.menu_list_mode) {
+ // 当点击菜单项“模式切换”时
+ // 切换工作笔记的待办事项模式
+ mWorkingNote.setCheckListMode(mWorkingNote.getCheckListMode() == 0 ?
+ TextNote.MODE_CHECK_LIST : 0);
+ } else if (itemId == R.id.menu_share) {
+ // 当点击菜单项“分享”时
+ // 获取当前工作文本并进行分享
+ getWorkingText();
+ sendTo(this, mWorkingNote.getContent());
+ } else if (itemId == R.id.menu_send_to_desktop) {
+ // 当点击菜单项“发送到桌面”时
+ sendToDesktop();
+ } else if (itemId == R.id.menu_alert) {
+ // 当点击菜单项“提醒”时
+ // 设置闹钟提醒
+ setReminder();
+ } else if (itemId == R.id.menu_delete_remind) {
+ // 当点击菜单项“删除提醒”时
+ // 清除工作笔记的提醒日期和提醒标志
+ mWorkingNote.setAlertDate(0, false);
+ }
+ return true;
+}
private void setReminder() {
/*
@@ -643,179 +771,222 @@ public class NoteEditActivity extends Activity implements OnClickListener,
*/
}
- private boolean isSyncMode() {
- return NotesPreferenceActivity.getSyncAccountName(this).trim().length() > 0;
- }
+// 判断是否为同步模式
+private boolean isSyncMode() {
+ return NotesPreferenceActivity.getSyncAccountName(this).trim().length() > 0;
+}
- public void onClockAlertChanged(long date, boolean set) {
- /**
- * User could set clock to an unsaved note, so before setting the
- * alert clock, we should save the note first
- */
- if (!mWorkingNote.existInDatabase()) {
- saveNote();
- }
- 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);
- AlarmManager alarmManager = ((AlarmManager) getSystemService(ALARM_SERVICE));
- showAlertHeader();
- if(!set) {
- alarmManager.cancel(pendingIntent);
- } else {
- alarmManager.set(AlarmManager.RTC_WAKEUP, date, pendingIntent);
- }
+// 当闹钟提醒设置改变时的处理
+public void onClockAlertChanged(long date, boolean set) {
+ // 如果当前工作笔记不存在于数据库中,则保存笔记
+ if (!mWorkingNote.existInDatabase()) {
+ saveNote();
+ }
+ // 如果工作笔记的ID大于0,则继续处理
+ if (mWorkingNote.getNoteId() > 0) {
+ // 创建AlarmReceiver的Intent
+ Intent intent = new Intent(this, AlarmReceiver.class);
+ intent.setData(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, mWorkingNote.getNoteId()));
+ // 创建用于广播的PendingIntent
+ PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
+ // 获取AlarmManager实例
+ AlarmManager alarmManager = ((AlarmManager) getSystemService(ALARM_SERVICE));
+ // 显示提醒标题
+ showAlertHeader();
+ // 根据set参数判断是否设置或取消闹钟提醒
+ if(!set) {
+ alarmManager.cancel(pendingIntent); // 取消闹钟提醒
} else {
- /**
- * There is the condition that user has input nothing (the note is
- * not worthy saving), we have no note id, remind the user that he
- * should input something
- */
- Log.e(TAG, "Clock alert setting error");
- showToast(R.string.error_note_empty_for_clock);
+ alarmManager.set(AlarmManager.RTC_WAKEUP, date, pendingIntent); // 设置闹钟提醒
}
+ } else {
+ // 如果工作笔记ID小于等于0,记录错误并显示提示
+ Log.e(TAG, "Clock alert setting error");
+ showToast(R.string.error_note_empty_for_clock);
}
+}
+
+// 当小部件改变时的处理
+public void onWidgetChanged() {
+ updateWidget(); // 更新小部件
+}
- public void onWidgetChanged() {
- updateWidget();
+// 当文本编辑框内容删除时的处理
+public void onEditTextDelete(int index, String text) {
+ int childCount = mEditTextList.getChildCount();
+ // 如果子View数量为1,则直接返回
+ if (childCount == 1) {
+ return;
}
- public void onEditTextDelete(int index, String text) {
- int childCount = mEditTextList.getChildCount();
- if (childCount == 1) {
- return;
- }
+ // 重新设置剩余编辑框的索引
+ for (int i = index + 1; i < childCount; i++) {
+ ((NoteEditText) mEditTextList.getChildAt(i).findViewById(R.id.et_edit_text)).setIndex(i - 1);
+ }
- for (int i = index + 1; i < childCount; i++) {
- ((NoteEditText) mEditTextList.getChildAt(i).findViewById(R.id.et_edit_text))
- .setIndex(i - 1);
- }
+ // 移除指定位置的编辑框
+ mEditTextList.removeViewAt(index);
+ NoteEditText edit = null;
+ // 获取上一个编辑框,如果是第一个则获取第一个编辑框
+ if(index == 0) {
+ edit = (NoteEditText) mEditTextList.getChildAt(0).findViewById(R.id.et_edit_text);
+ } else {
+ edit = (NoteEditText) mEditTextList.getChildAt(index - 1).findViewById(R.id.et_edit_text);
+ }
+ int length = edit.length();
+ // 在编辑框末尾添加指定文本
+ edit.append(text);
+ edit.requestFocus();
+ edit.setSelection(length); // 设置光标位置
+}
- mEditTextList.removeViewAt(index);
- NoteEditText edit = null;
- if(index == 0) {
- edit = (NoteEditText) mEditTextList.getChildAt(0).findViewById(
- R.id.et_edit_text);
- } else {
- edit = (NoteEditText) mEditTextList.getChildAt(index - 1).findViewById(
- R.id.et_edit_text);
- }
- int length = edit.length();
- edit.append(text);
- edit.requestFocus();
- edit.setSelection(length);
+public void onEditTextEnter(int index, String text) {
+ /**
+ * 如果索引超出 mEditTextList 的范围,应该不会发生,进行调试检查
+ */
+ if(index > mEditTextList.getChildCount()) {
+ Log.e(TAG, "Index out of mEditTextList boundrary, should not happen");
}
- public void onEditTextEnter(int index, String text) {
- /**
- * Should not happen, check for debug
- */
- if(index > mEditTextList.getChildCount()) {
- Log.e(TAG, "Index out of mEditTextList boundrary, should not happen");
- }
+ // 创建新的编辑框视图并添加到 mEditTextList 中指定的位置
+ View view = getListItem(text, index);
+ mEditTextList.addView(view, index);
+ NoteEditText edit = (NoteEditText) view.findViewById(R.id.et_edit_text);
+ edit.requestFocus();
+ edit.setSelection(0);
+ for (int i = index + 1; i < mEditTextList.getChildCount(); i++) {
+ ((NoteEditText) mEditTextList.getChildAt(i).findViewById(R.id.et_edit_text))
+ .setIndex(i);
+ }
+}
- View view = getListItem(text, index);
- mEditTextList.addView(view, index);
- NoteEditText edit = (NoteEditText) view.findViewById(R.id.et_edit_text);
- edit.requestFocus();
- edit.setSelection(0);
- for (int i = index + 1; i < mEditTextList.getChildCount(); i++) {
- ((NoteEditText) mEditTextList.getChildAt(i).findViewById(R.id.et_edit_text))
- .setIndex(i);
+// 切换到列表模式的处理方法
+private void switchToListMode(String text) {
+ // 移除所有的编辑框视图
+ mEditTextList.removeAllViews();
+ // 将文本按换行符分割成字符串数组
+ String[] items = text.split("\n");
+ int index = 0;
+ for (String item : items) {
+ // 如果项不为空,则创建对应的编辑框视图并添加到 mEditTextList 中
+ if(!TextUtils.isEmpty(item)) {
+ mEditTextList.addView(getListItem(item, index));
+ index++;
}
}
+ // 添加一个空的编辑框以便用户继续添加新项
+ mEditTextList.addView(getListItem("", index));
+ mEditTextList.getChildAt(index).findViewById(R.id.et_edit_text).requestFocus();
- private void switchToListMode(String text) {
- mEditTextList.removeAllViews();
- String[] items = text.split("\n");
- int index = 0;
- for (String item : items) {
- if(!TextUtils.isEmpty(item)) {
- mEditTextList.addView(getListItem(item, index));
- index++;
- }
+ // 隐藏笔记编辑视图,显示编辑框列表视图
+ mNoteEditor.setVisibility(View.GONE);
+ mEditTextList.setVisibility(View.VISIBLE);
+}
+
+// 获取包含用户查询结果高亮的 Spannable 对象
+private Spannable getHighlightQueryResult(String fullText, String userQuery) {
+ SpannableString spannable = new SpannableString(fullText == null ? "" : fullText);
+ if (!TextUtils.isEmpty(userQuery)) {
+ mPattern = Pattern.compile(userQuery);
+ Matcher m = mPattern.matcher(fullText);
+ int start = 0;
+ while (m.find(start)) {
+ // 对匹配到的文本进行高亮处理
+ spannable.setSpan(
+ new BackgroundColorSpan(this.getResources().getColor(
+ R.color.user_query_highlight)), m.start(), m.end(),
+ Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
+ start = m.end();
}
- mEditTextList.addView(getListItem("", index));
- mEditTextList.getChildAt(index).findViewById(R.id.et_edit_text).requestFocus();
-
- mNoteEditor.setVisibility(View.GONE);
- mEditTextList.setVisibility(View.VISIBLE);
- }
-
- private Spannable getHighlightQueryResult(String fullText, String userQuery) {
- SpannableString spannable = new SpannableString(fullText == null ? "" : fullText);
- if (!TextUtils.isEmpty(userQuery)) {
- mPattern = Pattern.compile(userQuery);
- Matcher m = mPattern.matcher(fullText);
- int start = 0;
- while (m.find(start)) {
- spannable.setSpan(
- new BackgroundColorSpan(this.getResources().getColor(
- R.color.user_query_highlight)), m.start(), m.end(),
- Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
- start = m.end();
+ }
+ return spannable;
+}
+
+/**
+ * 通过传入的内容和索引,获取包含编辑框和复选框的列表项视图
+ * @param item 列表项内容
+ * @param index 列表项索引
+ * @return 列表项视图
+ */
+private View getListItem(String item, int index) {
+ // 加载列表项布局
+ View view = LayoutInflater.from(this).inflate(R.layout.note_edit_list_item, null);
+ final NoteEditText edit = (NoteEditText) view.findViewById(R.id.et_edit_text);
+ // 设置文本外观
+ edit.setTextAppearance(this, TextAppearanceResources.getTexAppearanceResource(mFontSizeId));
+ CheckBox cb = ((CheckBox) view.findViewById(R.id.cb_edit_item));
+ // 设置复选框选中状态变化时的监听器
+ cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+ if (isChecked) {
+ // 文本加上删除线
+ edit.setPaintFlags(edit.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
+ } else {
+ // 取消文本删除线
+ edit.setPaintFlags(Paint.ANTI_ALIAS_FLAG | Paint.DEV_KERN_TEXT_FLAG);
}
}
- return spannable;
- }
-
- private View getListItem(String item, int index) {
- View view = LayoutInflater.from(this).inflate(R.layout.note_edit_list_item, null);
- final NoteEditText edit = (NoteEditText) view.findViewById(R.id.et_edit_text);
- edit.setTextAppearance(this, TextAppearanceResources.getTexAppearanceResource(mFontSizeId));
- CheckBox cb = ((CheckBox) view.findViewById(R.id.cb_edit_item));
- cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {
- public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
- if (isChecked) {
- edit.setPaintFlags(edit.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
- } else {
- edit.setPaintFlags(Paint.ANTI_ALIAS_FLAG | Paint.DEV_KERN_TEXT_FLAG);
- }
- }
- });
+ });
+
+ if (item.startsWith(TAG_CHECKED)) {
+ // 如果列表项以 "checked" 标识开头,则设置复选框选中状态,设置文本删除线,并去掉标识字符串
+ cb.setChecked(true);
+ edit.setPaintFlags(edit.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
+ item = item.substring(TAG_CHECKED.length(), item.length()).trim();
+ } else if (item.startsWith(TAG_UNCHECKED)) {
+ // 如果列表项以 "unchecked" 标识开头,则设置复选框未选中状态,取消文本删除线,并去掉标识字符串
+ cb.setChecked(false);
+ edit.setPaintFlags(Paint.ANTI_ALIAS_FLAG | Paint.DEV_KERN_TEXT_FLAG);
+ item = item.substring(TAG_UNCHECKED.length(), item.length()).trim();
+ }
- if (item.startsWith(TAG_CHECKED)) {
- cb.setChecked(true);
- edit.setPaintFlags(edit.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
- item = item.substring(TAG_CHECKED.length(), item.length()).trim();
- } else if (item.startsWith(TAG_UNCHECKED)) {
- cb.setChecked(false);
- edit.setPaintFlags(Paint.ANTI_ALIAS_FLAG | Paint.DEV_KERN_TEXT_FLAG);
- item = item.substring(TAG_UNCHECKED.length(), item.length()).trim();
- }
+ edit.setOnTextViewChangeListener(this);
+ edit.setIndex(index);
+ // 设置文本,并将用户查询结果高亮显示
+ edit.setText(getHighlightQueryResult(item, mUserQuery));
+ return view;
+}
- edit.setOnTextViewChangeListener(this);
- edit.setIndex(index);
- edit.setText(getHighlightQueryResult(item, mUserQuery));
- return view;
+/**
+ * 当文本内容改变时的回调方法
+ * @param index 列表项索引
+ * @param hasText 是否有文本内容
+ */
+public void onTextChange(int index, boolean hasText) {
+ if (index >= mEditTextList.getChildCount()) {
+ Log.e(TAG, "Wrong index, should not happen");
+ return;
}
-
- public void onTextChange(int index, boolean hasText) {
- if (index >= mEditTextList.getChildCount()) {
- Log.e(TAG, "Wrong index, should not happen");
- return;
- }
- if(hasText) {
- mEditTextList.getChildAt(index).findViewById(R.id.cb_edit_item).setVisibility(View.VISIBLE);
- } else {
- mEditTextList.getChildAt(index).findViewById(R.id.cb_edit_item).setVisibility(View.GONE);
- }
+ if(hasText) {
+ // 如果有文本内容,则显示复选框
+ mEditTextList.getChildAt(index).findViewById(R.id.cb_edit_item).setVisibility(View.VISIBLE);
+ } else {
+ // 如果没有文本内容,则隐藏复选框
+ mEditTextList.getChildAt(index).findViewById(R.id.cb_edit_item).setVisibility(View.GONE);
}
+}
- public void onCheckListModeChanged(int oldMode, int newMode) {
- if (newMode == TextNote.MODE_CHECK_LIST) {
- switchToListMode(mNoteEditor.getText().toString());
- } else {
- if (!getWorkingText()) {
- mWorkingNote.setWorkingText(mWorkingNote.getContent().replace(TAG_UNCHECKED + " ",
- ""));
- }
- mNoteEditor.setText(getHighlightQueryResult(mWorkingNote.getContent(), mUserQuery));
- mEditTextList.setVisibility(View.GONE);
- mNoteEditor.setVisibility(View.VISIBLE);
+/**
+ * 当待办事项模式变化时的回调方法
+ * @param oldMode 旧的待办事项模式
+ * @param newMode 新的待办事项模式
+ */
+public void onCheckListModeChanged(int oldMode, int newMode) {
+ if (newMode == TextNote.MODE_CHECK_LIST) {
+ // 如果新的模式是待办事项列表模式,则切换到列表模式
+ switchToListMode(mNoteEditor.getText().toString());
+ } else {
+ if (!getWorkingText()) {
+ // 如果工作文本为空,并且未保存的文本中包含 "unchecked" 标识,则将其移除
+ mWorkingNote.setWorkingText(mWorkingNote.getContent().replace(TAG_UNCHECKED + " ", ""));
}
+ // 设置编辑框内容,并将用户查询结果高亮显示
+ mNoteEditor.setText(getHighlightQueryResult(mWorkingNote.getContent(), mUserQuery));
+ // 隐藏编辑框列表视图,显示笔记编辑视图
+ mEditTextList.setVisibility(View.GONE);
+ mNoteEditor.setVisibility(View.VISIBLE);
}
+}
private boolean getWorkingText() {
/*
@@ -875,7 +1046,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
}
private void sendToDesktop() {
- /**
+ /**
这段代码实现了一个名为 `sendToDesktop()` 的方法,用于将当前编辑的笔记发送到桌面上。
以下是对该方法的解释:
1. 首先,检查当前编辑的笔记 `mWorkingNote` 是否存在于数据库中。
@@ -925,17 +1096,21 @@ public class NoteEditActivity extends Activity implements OnClickListener,
}
private String makeShortcutIconTitle(String content) {
+ // 将原始内容中的特定字符串替换为空字符串,以删除特定标记
content = content.replace(TAG_CHECKED, "");
content = content.replace(TAG_UNCHECKED, "");
- return content.length() > SHORTCUT_ICON_TITLE_MAX_LEN ? content.substring(0,
- SHORTCUT_ICON_TITLE_MAX_LEN) : content;
+ // 如果内容的长度超过了指定的最大长度,则返回内容的子字符串,否则返回原始内容
+ return content.length() > SHORTCUT_ICON_TITLE_MAX_LEN ? content.substring(0, SHORTCUT_ICON_TITLE_MAX_LEN) : content;
}
-
+
private void showToast(int resId) {
+ // 显示一个短持续时间的Toast消息,消息内容为给定的资源ID的字符串
showToast(resId, Toast.LENGTH_SHORT);
}
-
+
private void showToast(int resId, int duration) {
+ // 显示一个具有自定义持续时间的Toast消息,消息内容为给定的资源ID的字符串
+ // Toast消息在当前的上下文中显示
Toast.makeText(this, resId, duration).show();
}
}
diff --git a/src/app/src/main/java/net/micode/notes/ui/NoteEditText.java b/src/app/src/main/java/net/micode/notes/ui/NoteEditText.java
index 2afe2a89..54244dcb 100644
--- a/src/app/src/main/java/net/micode/notes/ui/NoteEditText.java
+++ b/src/app/src/main/java/net/micode/notes/ui/NoteEditText.java
@@ -101,117 +101,143 @@ public class NoteEditText extends EditText {
@Override
public boolean onTouchEvent(MotionEvent event) {
+ // 当用户触摸屏幕时执行以下操作
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
-
+ // 获取触摸点的坐标
int x = (int) event.getX();
int y = (int) event.getY();
+ // 调整坐标,考虑到文本框的内边距和滚动偏移
x -= getTotalPaddingLeft();
y -= getTotalPaddingTop();
x += getScrollX();
y += getScrollY();
-
+ // 获取布局信息,并确定触摸点所在的行和水平偏移位置
Layout layout = getLayout();
int line = layout.getLineForVertical(y);
int off = layout.getOffsetForHorizontal(line, x);
+ // 选中文本中特定偏移位置的字符
Selection.setSelection(getText(), off);
break;
}
-
+ // 继续处理触摸事件
return super.onTouchEvent(event);
}
-
+
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
+ // 按键按下时执行以下操作
switch (keyCode) {
case KeyEvent.KEYCODE_ENTER:
+ // 如果存在文本变化监听器,则返回false,否则执行默认操作
if (mOnTextViewChangeListener != null) {
return false;
}
break;
case KeyEvent.KEYCODE_DEL:
+ // 记录删除操作前的光标位置
mSelectionStartBeforeDelete = getSelectionStart();
break;
default:
break;
}
+ // 继续处理按键事件
return super.onKeyDown(keyCode, event);
}
-
+
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
+ // 按键释放时执行以下操作
switch(keyCode) {
case KeyEvent.KEYCODE_DEL:
if (mOnTextViewChangeListener != null) {
+ // 如果存在文本变化监听器,并且删除操作前光标位置为0,则调用相应的方法,并返回true
if (0 == mSelectionStartBeforeDelete && mIndex != 0) {
mOnTextViewChangeListener.onEditTextDelete(mIndex, getText().toString());
return true;
}
} else {
- Log.d(TAG, "OnTextViewChangeListener was not seted");
+ // 如果不存在文本变化监听器,则记录日志
+ Log.d(TAG, "OnTextViewChangeListener was not set");
}
break;
case KeyEvent.KEYCODE_ENTER:
if (mOnTextViewChangeListener != null) {
+ // 如果存在文本变化监听器,则获取光标位置和文本内容,并调用相应的方法
int selectionStart = getSelectionStart();
String text = getText().subSequence(selectionStart, length()).toString();
setText(getText().subSequence(0, selectionStart));
mOnTextViewChangeListener.onEditTextEnter(mIndex + 1, text);
} else {
- Log.d(TAG, "OnTextViewChangeListener was not seted");
+ // 如果不存在文本变化监听器,则记录日志
+ Log.d(TAG, "OnTextViewChangeListener was not set");
}
break;
default:
break;
}
+ // 继续处理按键事件
return super.onKeyUp(keyCode, event);
}
- @Override
- protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
- if (mOnTextViewChangeListener != null) {
- if (!focused && TextUtils.isEmpty(getText())) {
- mOnTextViewChangeListener.onTextChange(mIndex, false);
- } else {
- mOnTextViewChangeListener.onTextChange(mIndex, true);
- }
+
+
+
+
+
+@Override
+protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
+ if (mOnTextViewChangeListener != null) {
+ // 检查文本内容是否为空
+ if (!focused && TextUtils.isEmpty(getText())) {
+ // 当焦点失去且文本为空时,调用回调函数通知文本发生变化
+ mOnTextViewChangeListener.onTextChange(mIndex, false);
+ } else {
+ // 当焦点改变或文本不为空时,调用回调函数通知文本发生变化
+ mOnTextViewChangeListener.onTextChange(mIndex, true);
}
- super.onFocusChanged(focused, direction, previouslyFocusedRect);
}
+ // 调用父类的方法,处理焦点改变事件
+ super.onFocusChanged(focused, direction, previouslyFocusedRect);
+}
- @Override
- protected void onCreateContextMenu(ContextMenu menu) {
- if (getText() instanceof Spanned) {
- int selStart = getSelectionStart();
- int selEnd = getSelectionEnd();
-
- int min = Math.min(selStart, selEnd);
- int max = Math.max(selStart, selEnd);
-
- final URLSpan[] urls = ((Spanned) getText()).getSpans(min, max, URLSpan.class);
- if (urls.length == 1) {
- int defaultResId = 0;
- for(String schema: sSchemaActionResMap.keySet()) {
- if(urls[0].getURL().indexOf(schema) >= 0) {
- defaultResId = sSchemaActionResMap.get(schema);
- break;
- }
- }
-
- if (defaultResId == 0) {
- defaultResId = R.string.note_link_other;
+@Override
+protected void onCreateContextMenu(ContextMenu menu) {
+ if (getText() instanceof Spanned) {
+ int selStart = getSelectionStart();
+ int selEnd = getSelectionEnd();
+
+ int min = Math.min(selStart, selEnd);
+ int max = Math.max(selStart, selEnd);
+
+ // 获取选中文本中的 URLSpan 对象
+ final URLSpan[] urls = ((Spanned) getText()).getSpans(min, max, URLSpan.class);
+ if (urls.length == 1) {
+ int defaultResId = 0;
+ // 根据 URL 的 schema 查找对应的默认资源 ID
+ for(String schema: sSchemaActionResMap.keySet()) {
+ if(urls[0].getURL().indexOf(schema) >= 0) {
+ defaultResId = sSchemaActionResMap.get(schema);
+ break;
}
+ }
- menu.add(0, 0, 0, defaultResId).setOnMenuItemClickListener(
- new OnMenuItemClickListener() {
- public boolean onMenuItemClick(MenuItem item) {
- // goto a new intent
- urls[0].onClick(NoteEditText.this);
- return true;
- }
- });
+ if (defaultResId == 0) {
+ defaultResId = R.string.note_link_other;
}
+
+ // 向上下文菜单添加选项,并设置点击监听器
+ menu.add(0, 0, 0, defaultResId).setOnMenuItemClickListener(
+ new OnMenuItemClickListener() {
+ public boolean onMenuItemClick(MenuItem item) {
+ // 执行跳转到新 Intent 的操作
+ urls[0].onClick(NoteEditText.this);
+ return true;
+ }
+ });
}
- super.onCreateContextMenu(menu);
}
+ // 调用父类的方法,创建右键菜单
+ super.onCreateContextMenu(menu);
+}
}
diff --git a/src/app/src/main/java/net/micode/notes/ui/NotesListActivity.java b/src/app/src/main/java/net/micode/notes/ui/NotesListActivity.java
index 58bf94d1..6c00ca8e 100644
--- a/src/app/src/main/java/net/micode/notes/ui/NotesListActivity.java
+++ b/src/app/src/main/java/net/micode/notes/ui/NotesListActivity.java
@@ -149,30 +149,41 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ // 检查返回结果是否为成功,并且请求码是打开或新建节点的请求码
if (resultCode == RESULT_OK
&& (requestCode == REQUEST_CODE_OPEN_NODE || requestCode == REQUEST_CODE_NEW_NODE)) {
+ // 清空列表适配器的游标
mNotesListAdapter.changeCursor(null);
} else {
+ // 调用父类的方法,处理返回结果
super.onActivityResult(requestCode, resultCode, data);
}
}
-
+
private void setAppInfoFromRawRes() {
+ // 获取默认的 SharedPreference 对象
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
if (!sp.getBoolean(PREFERENCE_ADD_INTRODUCTION, false)) {
+ // 创建一个 StringBuilder 对象来存储从文件中读取的内容
StringBuilder sb = new StringBuilder();
InputStream in = null;
try {
- in = getResources().openRawResource(R.raw.introduction);
+ // 打开 raw 文件夹下的 introduction 资源文件
+ in = getResources().openRawResource(R.raw.introduction);
if (in != null) {
+ // 创建 InputStreamReader 对象读取输入流
InputStreamReader isr = new InputStreamReader(in);
+ // 创建 BufferedReader 对象读取字符流
BufferedReader br = new BufferedReader(isr);
- char [] buf = new char[1024];
+ // 创建字符数组缓冲区
+ char[] buf = new char[1024];
int len = 0;
+ // 读取字符流内容并追加到 StringBuilder 中
while ((len = br.read(buf)) > 0) {
sb.append(buf, 0, len);
}
} else {
+ // 发生错误时打印错误信息
Log.e(TAG, "Read introduction file error");
return;
}
@@ -180,111 +191,127 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
e.printStackTrace();
return;
} finally {
- if(in != null) {
+ if (in != null) {
try {
in.close();
} catch (IOException e) {
- // TODO Auto-generated catch block
e.printStackTrace();
}
}
}
-
+
+ // 创建一个空的 WorkingNote 对象
WorkingNote note = WorkingNote.createEmptyNote(this, Notes.ID_ROOT_FOLDER,
AppWidgetManager.INVALID_APPWIDGET_ID, Notes.TYPE_WIDGET_INVALIDE,
ResourceParser.RED);
+ // 设置 WorkingNote 对象的文本内容为从文件中读取的内容
note.setWorkingText(sb.toString());
+ // 保存 WorkingNote,并将其设置为已加入介绍的标志位
if (note.saveNote()) {
sp.edit().putBoolean(PREFERENCE_ADD_INTRODUCTION, true).commit();
} else {
+ // 发生错误时打印错误信息
Log.e(TAG, "Save introduction note error");
return;
}
}
}
- @Override
- protected void onStart() {
- super.onStart();
- startAsyncNotesListQuery();
- }
- private void initResources() {
- mContentResolver = this.getContentResolver();
- mBackgroundQueryHandler = new BackgroundQueryHandler(this.getContentResolver());
- mCurrentFolderId = Notes.ID_ROOT_FOLDER;
- mNotesListView = (ListView) findViewById(R.id.notes_list);
- mNotesListView.addFooterView(LayoutInflater.from(this).inflate(R.layout.note_list_footer, null),
- null, false);
- mNotesListView.setOnItemClickListener(new OnListItemClickListener());
- mNotesListView.setOnItemLongClickListener(this);
- mNotesListAdapter = new NotesListAdapter(this);
- mNotesListView.setAdapter(mNotesListAdapter);
- mAddNewNote = (Button) findViewById(R.id.btn_new_note);
- mAddNewNote.setOnClickListener(this);
- mAddNewNote.setOnTouchListener(new NewNoteOnTouchListener());
- mDispatch = false;
- mDispatchY = 0;
- mOriginY = 0;
- mTitleBar = (TextView) findViewById(R.id.tv_title_bar);
- mState = ListEditState.NOTE_LIST;
- mModeCallBack = new ModeCallback();
- }
- private class ModeCallback implements ListView.MultiChoiceModeListener, OnMenuItemClickListener {
- private DropdownMenu mDropDownMenu;
- private ActionMode mActionMode;
- private MenuItem mMoveMenu;
-
- public boolean onCreateActionMode(ActionMode mode, Menu menu) {
- getMenuInflater().inflate(R.menu.note_list_options, menu);
- menu.findItem(R.id.delete).setOnMenuItemClickListener(this);
- mMoveMenu = menu.findItem(R.id.move);
- if (mFocusNoteDataItem.getParentId() == Notes.ID_CALL_RECORD_FOLDER
- || DataUtils.getUserFolderCount(mContentResolver) == 0) {
- mMoveMenu.setVisible(false);
- } else {
- mMoveMenu.setVisible(true);
- mMoveMenu.setOnMenuItemClickListener(this);
- }
- mActionMode = mode;
- mNotesListAdapter.setChoiceMode(true);
- mNotesListView.setLongClickable(false);
- mAddNewNote.setVisibility(View.GONE);
+@Override
+protected void onStart() {
+ super.onStart();
+ startAsyncNotesListQuery(); // 在活动启动时开始异步笔记列表查询
+}
- View customView = LayoutInflater.from(NotesListActivity.this).inflate(
- R.layout.note_list_dropdown_menu, null);
- mode.setCustomView(customView);
- mDropDownMenu = new DropdownMenu(NotesListActivity.this,
- (Button) customView.findViewById(R.id.selection_menu),
- R.menu.note_list_dropdown);
- mDropDownMenu.setOnDropdownMenuItemClickListener(new PopupMenu.OnMenuItemClickListener(){
- public boolean onMenuItemClick(MenuItem item) {
- mNotesListAdapter.selectAll(!mNotesListAdapter.isAllSelected());
- updateMenu();
- return true;
- }
+/**
+ * 初始化资源
+ */
+private void initResources() {
+ mContentResolver = this.getContentResolver(); // 获取内容解析器
+ mBackgroundQueryHandler = new BackgroundQueryHandler(this.getContentResolver()); // 初始化后台查询处理器
+ mCurrentFolderId = Notes.ID_ROOT_FOLDER; // 设置当前文件夹 ID 为根文件夹 ID
+ mNotesListView = (ListView) findViewById(R.id.notes_list); // 获取笔记列表视图
+ mNotesListView.addFooterView(LayoutInflater.from(this).inflate(R.layout.note_list_footer, null), null, false); // 为笔记列表添加底部视图
+ mNotesListView.setOnItemClickListener(new OnListItemClickListener()); // 设置笔记列表项点击监听器
+ mNotesListView.setOnItemLongClickListener(this); // 设置笔记列表项长按监听器
+ mNotesListAdapter = new NotesListAdapter(this); // 初始化笔记列表适配器
+ mNotesListView.setAdapter(mNotesListAdapter); // 设置笔记列表适配器
+ mAddNewNote = (Button) findViewById(R.id.btn_new_note); // 获取新建笔记按钮
+ mAddNewNote.setOnClickListener(this); // 设置新建笔记按钮点击监听器
+ mAddNewNote.setOnTouchListener(new NewNoteOnTouchListener()); // 设置新建笔记按钮触摸监听器
+ mDispatch = false;
+ mDispatchY = 0;
+ mOriginY = 0;
+ mTitleBar = (TextView) findViewById(R.id.tv_title_bar); // 获取标题栏文本视图
+ mState = ListEditState.NOTE_LIST; // 设置列表编辑状态为笔记列表状态
+ mModeCallBack = new ModeCallback(); // 初始化模式回调
+}
- });
- return true;
+/**
+ * 模式回调类,实现列表多选模式监听器和菜单项点击监听器
+ */
+private class ModeCallback implements ListView.MultiChoiceModeListener, OnMenuItemClickListener {
+ private DropdownMenu mDropDownMenu; // 下拉菜单
+ private ActionMode mActionMode; // 操作模式
+ private MenuItem mMoveMenu; // 移动菜单项
+
+ public boolean onCreateActionMode(ActionMode mode, Menu menu) {
+ getMenuInflater().inflate(R.menu.note_list_options, menu); // 填充菜单项
+ menu.findItem(R.id.delete).setOnMenuItemClickListener(this); // 设置删除菜单项点击监听器
+ mMoveMenu = menu.findItem(R.id.move); // 查找移动菜单项
+ if (mFocusNoteDataItem.getParentId() == Notes.ID_CALL_RECORD_FOLDER
+ || DataUtils.getUserFolderCount(mContentResolver) == 0) {
+ mMoveMenu.setVisible(false); // 如果当前笔记所属文件夹为通话记录文件夹或用户文件夹数量为 0,则隐藏移动菜单项
+ } else {
+ mMoveMenu.setVisible(true); // 否则显示移动菜单项,并设置点击监听器
+ mMoveMenu.setOnMenuItemClickListener(this);
}
+ mActionMode = mode; // 保存操作模式对象
+ mNotesListAdapter.setChoiceMode(true); // 设置笔记列表适配器选择模式为多选
+ mNotesListView.setLongClickable(false); // 设置笔记列表不可长按
+ mAddNewNote.setVisibility(View.GONE); // 隐藏新建笔记按钮
+
+ View customView = LayoutInflater.from(NotesListActivity.this).inflate(
+ R.layout.note_list_dropdown_menu, null); // 创建自定义视图
+ mode.setCustomView(customView); // 设置操作模式的自定义视图
+ mDropDownMenu = new DropdownMenu(NotesListActivity.this,
+ (Button) customView.findViewById(R.id.selection_menu),
+ R.menu.note_list_dropdown); // 初始化下拉菜单
+ mDropDownMenu.setOnDropdownMenuItemClickListener(new PopupMenu.OnMenuItemClickListener(){
+ public boolean onMenuItemClick(MenuItem item) {
+ mNotesListAdapter.selectAll(!mNotesListAdapter.isAllSelected()); // 选择或取消选择所有笔记并更新菜单
+ updateMenu(); // 更新菜单
+ return true;
+ }
+ });
+ return true;
+ }
- private void updateMenu() {
- int selectedCount = mNotesListAdapter.getSelectedCount();
- // Update dropdown menu
- String format = getResources().getString(R.string.menu_select_title, selectedCount);
- mDropDownMenu.setTitle(format);
- MenuItem item = mDropDownMenu.findItem(R.id.action_select_all);
- if (item != null) {
- if (mNotesListAdapter.isAllSelected()) {
- item.setChecked(true);
- item.setTitle(R.string.menu_deselect_all);
- } else {
- item.setChecked(false);
- item.setTitle(R.string.menu_select_all);
- }
+ private void updateMenu() {
+ int selectedCount = mNotesListAdapter.getSelectedCount();
+ // 获取选择的数量
+
+ // 更新下拉菜单的标题
+ String format = getResources().getString(R.string.menu_select_title, selectedCount);
+ mDropDownMenu.setTitle(format);
+
+ // 找到菜单项 action_select_all
+ MenuItem item = mDropDownMenu.findItem(R.id.action_select_all);
+ if (item != null) {
+ // 如果所有的项目都被选择
+ if (mNotesListAdapter.isAllSelected()) {
+ // 设置菜单项为选中状态,并更新标题为 "取消全选"
+ item.setChecked(true);
+ item.setTitle(R.string.menu_deselect_all);
+ } else {
+ // 设置菜单项为非选中状态,并更新标题为 "全选"
+ item.setChecked(false);
+ item.setTitle(R.string.menu_select_all);
}
}
+ }
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
// TODO Auto-generated method stub
@@ -313,33 +340,40 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
}
public boolean onMenuItemClick(MenuItem item) {
+ // 如果没有选择任何项,则显示一个提示消息,并返回true表示处理了菜单项的点击事件
if (mNotesListAdapter.getSelectedCount() == 0) {
Toast.makeText(NotesListActivity.this, getString(R.string.menu_select_none),
Toast.LENGTH_SHORT).show();
return true;
}
-
+
int itemId = item.getItemId();
if (itemId == R.id.delete) {
+ // 创建一个警告对话框以确认删除操作
AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this);
builder.setTitle(getString(R.string.alert_title_delete));
builder.setIcon(android.R.drawable.ic_dialog_alert);
builder.setMessage(getString(R.string.alert_message_delete_notes,
mNotesListAdapter.getSelectedCount()));
+ // 设置对话框的“确定”按钮点击事件
builder.setPositiveButton(android.R.string.ok,
new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog,
- int which) {
+ public void onClick(DialogInterface dialog, int which) {
+ // 执行批量删除操作
batchDelete();
}
});
+ // 设置对话框的“取消”按钮点击事件
builder.setNegativeButton(android.R.string.cancel, null);
builder.show();
} else if (itemId == R.id.move) {
+ // 启动查询目标文件夹的操作
startQueryDestinationFolders();
} else {
+ // 对于其他菜单项的点击事件,直接返回false表示未处理
return false;
}
+ // 返回true表示已处理菜单项的点击事件
return true;
}
}
@@ -356,20 +390,13 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
int eventY = start + (int) event.getY();
/**
* Minus TitleBar's height
+ * 减去标题栏的高度,适应子文件夹状态
*/
if (mState == ListEditState.SUB_FOLDER) {
eventY -= mTitleBar.getHeight();
start -= mTitleBar.getHeight();
}
- /**
- * HACKME:When click the transparent part of "New Note" button, dispatch
- * the event to the list view behind this button. The transparent part of
- * "New Note" button could be expressed by formula y=-0.12x+94(Unit:pixel)
- * and the line top of the button. The coordinate based on left of the "New
- * Note" button. The 94 represents maximum height of the transparent part.
- * Notice that, if the background of the button changes, the formula should
- * also change. This is very bad, just for the UI designer's strong requirement.
- */
+ // 计算是否在可触摸区域内
if (event.getY() < (event.getX() * (-0.12) + 94)) {
View view = mNotesListView.getChildAt(mNotesListView.getChildCount() - 1
- mNotesListView.getFooterViewsCount());
@@ -403,31 +430,35 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
}
return false;
}
-
};
private void startAsyncNotesListQuery() {
String selection = (mCurrentFolderId == Notes.ID_ROOT_FOLDER) ? ROOT_FOLDER_SELECTION
: NORMAL_SELECTION;
+
+ // 开始异步查询数据库
mBackgroundQueryHandler.startQuery(FOLDER_NOTE_LIST_QUERY_TOKEN, null,
Notes.CONTENT_NOTE_URI, NoteItemData.PROJECTION, selection, new String[] {
String.valueOf(mCurrentFolderId)
}, NoteColumns.TYPE + " DESC," + NoteColumns.MODIFIED_DATE + " DESC");
}
-
+
+ // 后台异步查询处理器
private final class BackgroundQueryHandler extends AsyncQueryHandler {
public BackgroundQueryHandler(ContentResolver contentResolver) {
super(contentResolver);
}
-
+
@Override
protected void onQueryComplete(int token, Object cookie, Cursor cursor) {
switch (token) {
case FOLDER_NOTE_LIST_QUERY_TOKEN:
+ // 查询完成后更新数据适配器
mNotesListAdapter.changeCursor(cursor);
break;
case FOLDER_LIST_QUERY_TOKEN:
if (cursor != null && cursor.getCount() > 0) {
+ // 查询到文件夹数据后显示文件夹列表菜单
showFolderListMenu(cursor);
} else {
Log.e(TAG, "Query folder failed");
@@ -438,14 +469,17 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
}
}
}
-
+
+ // 显示文件夹列表菜单
private void showFolderListMenu(Cursor cursor) {
AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this);
builder.setTitle(R.string.menu_title_select_folder);
+
final FoldersListAdapter adapter = new FoldersListAdapter(this, cursor);
builder.setAdapter(adapter, new DialogInterface.OnClickListener() {
-
+
public void onClick(DialogInterface dialog, int which) {
+ // 将选中的笔记移动到所选的文件夹
DataUtils.batchMoveToFolder(mContentResolver,
mNotesListAdapter.getSelectedItemIds(), adapter.getItemId(which));
Toast.makeText(
@@ -457,52 +491,67 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
mModeCallBack.finishActionMode();
}
});
+
builder.show();
}
-
+
+ // 创建新的笔记
private void createNewNote() {
Intent intent = new Intent(this, NoteEditActivity.class);
intent.setAction(Intent.ACTION_INSERT_OR_EDIT);
intent.putExtra(Notes.INTENT_EXTRA_FOLDER_ID, mCurrentFolderId);
+
+ // 启动NoteEditActivity以创建新的笔记
this.startActivityForResult(intent, REQUEST_CODE_NEW_NODE);
}
- private void batchDelete() {
- new AsyncTask>() {
- protected HashSet doInBackground(Void... unused) {
- HashSet widgets = mNotesListAdapter.getSelectedWidget();
- if (!isSyncMode()) {
- // if not synced, delete notes directly
- if (DataUtils.batchDeleteNotes(mContentResolver, mNotesListAdapter
- .getSelectedItemIds())) {
- } else {
- Log.e(TAG, "Delete notes error, should not happens");
- }
+/**
+ * 批量删除笔记操作
+ */
+private void batchDelete() {
+ new AsyncTask>() {
+ /**
+ * 在后台执行操作
+ */
+ protected HashSet doInBackground(Void... unused) {
+ // 获取选中的小部件
+ HashSet widgets = mNotesListAdapter.getSelectedWidget();
+ if (!isSyncMode()) {
+ // 如果未同步,则直接删除笔记
+ if (DataUtils.batchDeleteNotes(mContentResolver, mNotesListAdapter.getSelectedItemIds())) {
+ // 删除成功
} else {
- // in sync mode, we'll move the deleted note into the trash
- // folder
- if (!DataUtils.batchMoveToFolder(mContentResolver, mNotesListAdapter
- .getSelectedItemIds(), Notes.ID_TRASH_FOLER)) {
- Log.e(TAG, "Move notes to trash folder error, should not happens");
- }
+ Log.e(TAG, "Delete notes error, should not happens");
+ }
+ } else {
+ // 在同步模式下,将已删除的笔记移动到回收站文件夹
+ if (!DataUtils.batchMoveToFolder(mContentResolver, mNotesListAdapter.getSelectedItemIds(),
+ Notes.ID_TRASH_FOLER)) {
+ Log.e(TAG, "Move notes to trash folder error, should not happens");
}
- return widgets;
}
+ return widgets;
+ }
- @Override
- protected void onPostExecute(HashSet widgets) {
- if (widgets != null) {
- for (AppWidgetAttribute widget : widgets) {
- if (widget.widgetId != AppWidgetManager.INVALID_APPWIDGET_ID
- && widget.widgetType != Notes.TYPE_WIDGET_INVALIDE) {
- updateWidget(widget.widgetId, widget.widgetType);
- }
+ /**
+ * 在操作完成后更新小部件
+ */
+ @Override
+ protected void onPostExecute(HashSet widgets) {
+ if (widgets != null) {
+ // 更新与这些小部件相关联的小部件
+ for (AppWidgetAttribute widget : widgets) {
+ if (widget.widgetId != AppWidgetManager.INVALID_APPWIDGET_ID
+ && widget.widgetType != Notes.TYPE_WIDGET_INVALIDE) {
+ updateWidget(widget.widgetId, widget.widgetType);
}
}
- mModeCallBack.finishActionMode();
}
- }.execute();
- }
+ // 完成操作模式
+ mModeCallBack.finishActionMode();
+ }
+ }.execute();
+}
private void deleteFolder(long folderId) {
/*
@@ -609,145 +658,151 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
- private void showCreateOrModifyFolderDialog(final boolean create) {
- //好长啊太长了这个方法
- final AlertDialog.Builder builder = new AlertDialog.Builder(this);
- View view = LayoutInflater.from(this).inflate(R.layout.dialog_edit_text, null);
- final EditText etName = (EditText) view.findViewById(R.id.et_foler_name);
- showSoftInput();
- if (!create) {
- if (mFocusNoteDataItem != null) {
- etName.setText(mFocusNoteDataItem.getSnippet());
- builder.setTitle(getString(R.string.menu_folder_change_name));
- } else {
- Log.e(TAG, "The long click data item is null");
- return;
- }
+ /**
+ * 显示创建或修改文件夹对话框
+ * @param create true表示创建文件夹,false表示修改文件夹
+ */
+private void showCreateOrModifyFolderDialog(final boolean create) {
+ final AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ View view = LayoutInflater.from(this).inflate(R.layout.dialog_edit_text, null);
+ final EditText etName = (EditText) view.findViewById(R.id.et_foler_name);
+ showSoftInput(); // 显示软键盘
+ if (!create) {
+ if (mFocusNoteDataItem != null) {
+ etName.setText(mFocusNoteDataItem.getSnippet()); // 设置文件夹名
+ builder.setTitle(getString(R.string.menu_folder_change_name)); // 设置对话框标题为修改文件夹名
} else {
- etName.setText("");
- builder.setTitle(this.getString(R.string.menu_create_folder));
+ Log.e(TAG, "The long click data item is null"); // 如果长按的数据项为空,则记录错误日志并返回
+ return;
}
+ } else {
+ etName.setText(""); // 清空文件夹名
+ builder.setTitle(this.getString(R.string.menu_create_folder)); // 设置对话框标题为创建文件夹
+ }
- builder.setPositiveButton(android.R.string.ok, null);
- builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- hideSoftInput(etName);
+ builder.setPositiveButton(android.R.string.ok, null); // 设置确认按钮
+ builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ hideSoftInput(etName); // 隐藏软键盘
+ }
+ });
+
+ final Dialog dialog = builder.setView(view).show(); // 显示对话框
+ final Button positive = (Button)dialog.findViewById(android.R.id.button1); // 获取确认按钮
+ positive.setOnClickListener(new OnClickListener() {
+ public void onClick(View v) {
+ hideSoftInput(etName); // 隐藏软键盘
+ String name = etName.getText().toString(); // 获取输入的文件夹名
+ if (DataUtils.checkVisibleFolderName(mContentResolver, name)) {
+ Toast.makeText(NotesListActivity.this, getString(R.string.folder_exist, name),
+ Toast.LENGTH_LONG).show(); // 如果文件夹名已存在,显示提示信息
+ etName.setSelection(0, etName.length()); // 选择输入的文件夹名
+ return; // 结束操作
}
- });
-
- final Dialog dialog = builder.setView(view).show();
- final Button positive = (Button)dialog.findViewById(android.R.id.button1);
- positive.setOnClickListener(new OnClickListener() {
- public void onClick(View v) {
- hideSoftInput(etName);
- String name = etName.getText().toString();
- if (DataUtils.checkVisibleFolderName(mContentResolver, name)) {
- Toast.makeText(NotesListActivity.this, getString(R.string.folder_exist, name),
- Toast.LENGTH_LONG).show();
- etName.setSelection(0, etName.length());
- return;
- }
- if (!create) {
- if (!TextUtils.isEmpty(name)) {
- ContentValues values = new ContentValues();
- values.put(NoteColumns.SNIPPET, name);
- values.put(NoteColumns.TYPE, Notes.TYPE_FOLDER);
- values.put(NoteColumns.LOCAL_MODIFIED, 1);
- mContentResolver.update(Notes.CONTENT_NOTE_URI, values, NoteColumns.ID
- + "=?", new String[] {
- String.valueOf(mFocusNoteDataItem.getId())
- });
- }
- } else if (!TextUtils.isEmpty(name)) {
+ if (!create) {
+ if (!TextUtils.isEmpty(name)) { // 如果文件夹名不为空
ContentValues values = new ContentValues();
- values.put(NoteColumns.SNIPPET, name);
- values.put(NoteColumns.TYPE, Notes.TYPE_FOLDER);
- mContentResolver.insert(Notes.CONTENT_NOTE_URI, values);
+ values.put(NoteColumns.SNIPPET, name); // 设置文件夹名
+ values.put(NoteColumns.TYPE, Notes.TYPE_FOLDER); // 设置类型为文件夹
+ values.put(NoteColumns.LOCAL_MODIFIED, 1); // 设置本地修改标志为1
+ mContentResolver.update(Notes.CONTENT_NOTE_URI, values, NoteColumns.ID
+ + "=?", new String[] {
+ String.valueOf(mFocusNoteDataItem.getId()) // 根据文件夹id更新数据库中的文件夹名
+ });
}
- dialog.dismiss();
+ } else if (!TextUtils.isEmpty(name)) { // 如果文件夹名不为空
+ ContentValues values = new ContentValues();
+ values.put(NoteColumns.SNIPPET, name); // 设置文件夹名
+ values.put(NoteColumns.TYPE, Notes.TYPE_FOLDER); // 设置类型为文件夹
+ mContentResolver.insert(Notes.CONTENT_NOTE_URI, values); // 插入数据库创建新的文件夹
}
- });
-
- if (TextUtils.isEmpty(etName.getText())) {
- positive.setEnabled(false);
+ dialog.dismiss(); // 关闭对话框
}
- /**
- * When the name edit text is null, disable the positive button
- */
- etName.addTextChangedListener(new TextWatcher() {
- public void beforeTextChanged(CharSequence s, int start, int count, int after) {
- // TODO Auto-generated method stub
+ });
- }
+ if (TextUtils.isEmpty(etName.getText())) {
+ positive.setEnabled(false); // 如果文件夹名为空,禁用确认按钮
+ }
+ etName.addTextChangedListener(new TextWatcher() {
+ public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+ }
- public void onTextChanged(CharSequence s, int start, int before, int count) {
- if (TextUtils.isEmpty(etName.getText())) {
- positive.setEnabled(false);
- } else {
- positive.setEnabled(true);
- }
+ public void onTextChanged(CharSequence s, int start, int before, int count) {
+ if (TextUtils.isEmpty(etName.getText())) {
+ positive.setEnabled(false); // 如果文件夹名为空,禁用确认按钮
+ } else {
+ positive.setEnabled(true); // 如果文件夹名不为空,启用确认按钮
}
+ }
- public void afterTextChanged(Editable s) {
- // TODO Auto-generated method stub
+ public void afterTextChanged(Editable s) {
+ }
+ });
+}
- }
- });
+@Override
+public void onBackPressed() {
+ // 处理返回键事件
+ switch (mState) {
+ case SUB_FOLDER:
+ // 如果当前状态为子文件夹列表状态
+ mCurrentFolderId = Notes.ID_ROOT_FOLDER;
+ mState = ListEditState.NOTE_LIST;
+ startAsyncNotesListQuery();
+ mTitleBar.setVisibility(View.GONE);
+ break;
+ case CALL_RECORD_FOLDER:
+ // 如果当前状态为通话记录文件夹状态
+ mCurrentFolderId = Notes.ID_ROOT_FOLDER;
+ mState = ListEditState.NOTE_LIST;
+ mAddNewNote.setVisibility(View.VISIBLE);
+ mTitleBar.setVisibility(View.GONE);
+ startAsyncNotesListQuery();
+ break;
+ case NOTE_LIST:
+ // 如果当前状态为笔记列表状态,则调用父类的返回键处理方法
+ super.onBackPressed();
+ break;
+ default:
+ break;
}
+}
- @Override
- public void onBackPressed() {
- switch (mState) {
- case SUB_FOLDER:
- mCurrentFolderId = Notes.ID_ROOT_FOLDER;
- mState = ListEditState.NOTE_LIST;
- startAsyncNotesListQuery();
- mTitleBar.setVisibility(View.GONE);
- break;
- case CALL_RECORD_FOLDER:
- mCurrentFolderId = Notes.ID_ROOT_FOLDER;
- mState = ListEditState.NOTE_LIST;
- mAddNewNote.setVisibility(View.VISIBLE);
- mTitleBar.setVisibility(View.GONE);
- startAsyncNotesListQuery();
- break;
- case NOTE_LIST:
- super.onBackPressed();
- break;
- default:
- break;
- }
+/**
+ * 更新小部件
+ * @param appWidgetId 小部件id
+ * @param appWidgetType 小部件类型
+ */
+private void updateWidget(int appWidgetId, int appWidgetType) {
+ Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
+ if (appWidgetType == Notes.TYPE_WIDGET_2X) {
+ intent.setClass(this, NoteWidgetProvider_2x.class); // 设置小部件Provider为2x类型
+ } else if (appWidgetType == Notes.TYPE_WIDGET_4X) {
+ intent.setClass(this, NoteWidgetProvider_4x.class); // 设置小部件Provider为4x类型
+ } else {
+ Log.e(TAG, "Unspported widget type"); // 记录错误日志并返回
+ return;
}
- private void updateWidget(int appWidgetId, int appWidgetType) {
- Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
- if (appWidgetType == Notes.TYPE_WIDGET_2X) {
- intent.setClass(this, NoteWidgetProvider_2x.class);
- } else if (appWidgetType == Notes.TYPE_WIDGET_4X) {
- intent.setClass(this, NoteWidgetProvider_4x.class);
- } else {
- Log.e(TAG, "Unspported widget type");
- return;
- }
-
- intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] {
- appWidgetId
- });
+ intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] {appWidgetId}); // 设置小部件id
- sendBroadcast(intent);
- setResult(RESULT_OK, intent);
- }
+ sendBroadcast(intent); // 发送广播通知小部件更新
+ setResult(RESULT_OK, intent);
+}
- private final OnCreateContextMenuListener mFolderOnCreateContextMenuListener = new OnCreateContextMenuListener() {
- public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
- if (mFocusNoteDataItem != null) {
- menu.setHeaderTitle(mFocusNoteDataItem.getSnippet());
- menu.add(0, MENU_FOLDER_VIEW, 0, R.string.menu_folder_view);
- menu.add(0, MENU_FOLDER_DELETE, 0, R.string.menu_folder_delete);
- menu.add(0, MENU_FOLDER_CHANGE_NAME, 0, R.string.menu_folder_change_name);
- }
+/**
+ * 文件夹长按菜单创建监听器
+ */
+private final OnCreateContextMenuListener mFolderOnCreateContextMenuListener = new OnCreateContextMenuListener() {
+ public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
+ if (mFocusNoteDataItem != null) {
+ menu.setHeaderTitle(mFocusNoteDataItem.getSnippet()); // 设置菜单标题为文件夹名
+ menu.add(0, MENU_FOLDER_VIEW, 0, R.string.menu_folder_view); // 添加查看文件夹菜单项
+ menu.add(0, MENU_FOLDER_DELETE, 0, R.string.menu_folder_delete); // 添加删除文件夹菜单项
+ menu.add(0, MENU_FOLDER_CHANGE_NAME, 0, R.string.menu_folder_change_name); // 添加修改文件夹名菜单项
}
- };
+ }
+};
@Override
public void onContextMenuClosed(Menu menu) {
@@ -768,6 +823,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
openFolder(mFocusNoteDataItem);
break;
case MENU_FOLDER_DELETE:
+ // 创建对话框确认删除文件夹
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(getString(R.string.alert_title_delete));
builder.setIcon(android.R.drawable.ic_dialog_alert);
@@ -782,21 +838,22 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
builder.show();
break;
case MENU_FOLDER_CHANGE_NAME:
+ // 显示创建或修改文件夹的对话框
showCreateOrModifyFolderDialog(false);
break;
default:
break;
}
-
+
return true;
}
-
+
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.clear();
if (mState == ListEditState.NOTE_LIST) {
getMenuInflater().inflate(R.menu.note_list, menu);
- // set sync or sync_cancel
+ // 设置同步或取消同步菜单项的标题
menu.findItem(R.id.menu_sync).setTitle(
GTaskSyncService.isSyncing() ? R.string.menu_sync_cancel : R.string.menu_sync);
} else if (mState == ListEditState.SUB_FOLDER) {
@@ -955,79 +1012,91 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
from.startActivityIfNeeded(intent, -1);
}
- private class OnListItemClickListener implements OnItemClickListener {
+// 创建一个内部类 OnListItemClickListener,实现了 OnItemClickListener 接口,用于处理列表项的单击事件
+private class OnListItemClickListener implements OnItemClickListener {
- public void onItemClick(AdapterView> parent, View view, int position, long id) {
- if (view instanceof NotesListItem) {
- NoteItemData item = ((NotesListItem) view).getItemData();
- if (mNotesListAdapter.isInChoiceMode()) {
- if (item.getType() == Notes.TYPE_NOTE) {
- position = position - mNotesListView.getHeaderViewsCount();
- mModeCallBack.onItemCheckedStateChanged(null, position, id,
- !mNotesListAdapter.isSelectedItem(position));
- }
- return;
+ public void onItemClick(AdapterView> parent, View view, int position, long id) {
+ if (view instanceof NotesListItem) {
+ // 获取被点击的列表项的数据
+ NoteItemData item = ((NotesListItem) view).getItemData();
+ if (mNotesListAdapter.isInChoiceMode()) {
+ // 如果列表处于多选模式,则改变选中状态
+ if (item.getType() == Notes.TYPE_NOTE) {
+ position = position - mNotesListView.getHeaderViewsCount();
+ mModeCallBack.onItemCheckedStateChanged(null, position, id,
+ !mNotesListAdapter.isSelectedItem(position));
}
+ return;
+ }
- switch (mState) {
- case NOTE_LIST:
- if (item.getType() == Notes.TYPE_FOLDER
- || item.getType() == Notes.TYPE_SYSTEM) {
- openFolder(item);
- } else if (item.getType() == Notes.TYPE_NOTE) {
- openNode(item);
- } else {
- Log.e(TAG, "Wrong note type in NOTE_LIST");
- }
- break;
- case SUB_FOLDER:
- case CALL_RECORD_FOLDER:
- if (item.getType() == Notes.TYPE_NOTE) {
- openNode(item);
- } else {
- Log.e(TAG, "Wrong note type in SUB_FOLDER");
- }
- break;
- default:
- break;
- }
+ // 根据当前的状态和被点击的列表项的类型执行相应的操作
+ switch (mState) {
+ case NOTE_LIST:
+ // 在笔记列表状态下,如果被点击的列表项是文件夹或系统项,则打开文件夹;如果是笔记项,则打开笔记
+ if (item.getType() == Notes.TYPE_FOLDER
+ || item.getType() == Notes.TYPE_SYSTEM) {
+ openFolder(item);
+ } else if (item.getType() == Notes.TYPE_NOTE) {
+ openNode(item);
+ } else {
+ Log.e(TAG, "Wrong note type in NOTE_LIST");
+ }
+ break;
+ case SUB_FOLDER:
+ case CALL_RECORD_FOLDER:
+ // 在子文件夹列表状态或通话记录文件夹状态下,如果被点击的列表项是笔记项,则打开笔记
+ if (item.getType() == Notes.TYPE_NOTE) {
+ openNode(item);
+ } else {
+ Log.e(TAG, "Wrong note type in SUB_FOLDER");
+ }
+ break;
+ default:
+ break;
}
}
-
}
- private void startQueryDestinationFolders() {
- String selection = NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>? AND " + NoteColumns.ID + "<>?";
- selection = (mState == ListEditState.NOTE_LIST) ? selection:
- "(" + selection + ") OR (" + NoteColumns.ID + "=" + Notes.ID_ROOT_FOLDER + ")";
-
- mBackgroundQueryHandler.startQuery(FOLDER_LIST_QUERY_TOKEN,
- null,
- Notes.CONTENT_NOTE_URI,
- FoldersListAdapter.PROJECTION,
- selection,
- new String[] {
- String.valueOf(Notes.TYPE_FOLDER),
- String.valueOf(Notes.ID_TRASH_FOLER),
- String.valueOf(mCurrentFolderId)
- },
- NoteColumns.MODIFIED_DATE + " DESC");
- }
+}
- public boolean onItemLongClick(AdapterView> parent, View view, int position, long id) {
- if (view instanceof NotesListItem) {
- mFocusNoteDataItem = ((NotesListItem) view).getItemData();
- if (mFocusNoteDataItem.getType() == Notes.TYPE_NOTE && !mNotesListAdapter.isInChoiceMode()) {
- if (mNotesListView.startActionMode(mModeCallBack) != null) {
- mModeCallBack.onItemCheckedStateChanged(null, position, id, true);
- mNotesListView.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
- } else {
- Log.e(TAG, "startActionMode fails");
- }
- } else if (mFocusNoteDataItem.getType() == Notes.TYPE_FOLDER) {
- mNotesListView.setOnCreateContextMenuListener(mFolderOnCreateContextMenuListener);
+// 开始查询目标文件夹
+private void startQueryDestinationFolders() {
+ String selection = NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>? AND " + NoteColumns.ID + "<>?";
+ selection = (mState == ListEditState.NOTE_LIST) ? selection:
+ "(" + selection + ") OR (" + NoteColumns.ID + "=" + Notes.ID_ROOT_FOLDER + ")";
+
+ // 使用 BackgroundQueryHandler 发起查询
+ mBackgroundQueryHandler.startQuery(FOLDER_LIST_QUERY_TOKEN,
+ null,
+ Notes.CONTENT_NOTE_URI,
+ FoldersListAdapter.PROJECTION,
+ selection,
+ new String[] {
+ String.valueOf(Notes.TYPE_FOLDER),
+ String.valueOf(Notes.ID_TRASH_FOLER),
+ String.valueOf(mCurrentFolderId)
+ },
+ NoteColumns.MODIFIED_DATE + " DESC");
+}
+
+public boolean onItemLongClick(AdapterView> parent, View view, int position, long id) {
+ if (view instanceof NotesListItem) {
+ // 获取长按的列表项的数据
+ mFocusNoteDataItem = ((NotesListItem) view).getItemData();
+ if (mFocusNoteDataItem.getType() == Notes.TYPE_NOTE && !mNotesListAdapter.isInChoiceMode()) {
+ // 如果长按的列表项是笔记项,并且当前不是多选模式,则启动 ActionMode 多选模式
+ if (mNotesListView.startActionMode(mModeCallBack) != null) {
+ // 改变选中状态,并触发长按振动反馈
+ mModeCallBack.onItemCheckedStateChanged(null, position, id, true);
+ mNotesListView.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
+ } else {
+ Log.e(TAG, "startActionMode fails");
}
+ } else if (mFocusNoteDataItem.getType() == Notes.TYPE_FOLDER) {
+ // 如果长按的列表项是文件夹,则设置菜单创建监听器为文件夹菜单监听器
+ mNotesListView.setOnCreateContextMenuListener(mFolderOnCreateContextMenuListener);
}
- return false;
}
+ return false;
+}
}
diff --git a/src/app/src/main/java/net/micode/notes/ui/NotesListAdapter.java b/src/app/src/main/java/net/micode/notes/ui/NotesListAdapter.java
index 51c9cb98..72a73d9a 100644
--- a/src/app/src/main/java/net/micode/notes/ui/NotesListAdapter.java
+++ b/src/app/src/main/java/net/micode/notes/ui/NotesListAdapter.java
@@ -91,33 +91,44 @@ public class NotesListAdapter extends CursorAdapter {
public HashSet getSelectedItemIds() {
HashSet itemSet = new HashSet();
+ // 遍历选中项的位置集合
for (Integer position : mSelectedIndex.keySet()) {
+ // 如果选中状态为 true
if (mSelectedIndex.get(position) == true) {
+ // 获取该位置对应的项的 ID
Long id = getItemId(position);
+ // 如果 ID 为根文件夹的 ID,则输出错误日志
if (id == Notes.ID_ROOT_FOLDER) {
Log.d(TAG, "Wrong item id, should not happen");
} else {
+ // 将 ID 添加到集合中
itemSet.add(id);
}
}
}
-
+
return itemSet;
}
-
+
public HashSet getSelectedWidget() {
HashSet itemSet = new HashSet();
+ // 遍历选中项的位置集合
for (Integer position : mSelectedIndex.keySet()) {
+ // 如果选中状态为 true
if (mSelectedIndex.get(position) == true) {
+ // 获取该位置对应的项的 Cursor
Cursor c = (Cursor) getItem(position);
+ // 如果 Cursor 不为空
if (c != null) {
AppWidgetAttribute widget = new AppWidgetAttribute();
NoteItemData item = new NoteItemData(mContext, c);
+ // 从项的数据中获取 Widget 的 ID 和类型
widget.widgetId = item.getWidgetId();
widget.widgetType = item.getWidgetType();
+ // 将 Widget 添加到集合中
itemSet.add(widget);
/**
- * Don't close cursor here, only the adapter could close it
+ * 不要在这里关闭 Cursor,只有适配器可以关闭它
*/
} else {
Log.e(TAG, "Invalid cursor");
@@ -127,14 +138,16 @@ public class NotesListAdapter extends CursorAdapter {
}
return itemSet;
}
-
+
public int getSelectedCount() {
Collection values = mSelectedIndex.values();
+ // 如果选中项集合为 null,则返回 0
if (null == values) {
return 0;
}
Iterator iter = values.iterator();
int count = 0;
+ // 遍历选中项的值集合,统计选中项的数量并返回
while (iter.hasNext()) {
if (true == iter.next()) {
count++;
@@ -169,13 +182,21 @@ public class NotesListAdapter extends CursorAdapter {
private void calcNotesCount() {
mNotesCount = 0;
+
+ // 循环遍历每一个项目
for (int i = 0; i < getCount(); i++) {
+ // 获取当前项对应的Cursor对象
Cursor c = (Cursor) getItem(i);
+
+ // 检查当前Cursor对象是否有效
if (c != null) {
+ // 检查当前笔记的类型是否为普通笔记
if (NoteItemData.getNoteType(c) == Notes.TYPE_NOTE) {
+ // 增加笔记计数
mNotesCount++;
}
} else {
+ // 打印错误日志并返回
Log.e(TAG, "Invalid cursor");
return;
}
diff --git a/src/app/src/main/java/net/micode/notes/ui/NotesListItem.java b/src/app/src/main/java/net/micode/notes/ui/NotesListItem.java
index 1221e808..369c9880 100644
--- a/src/app/src/main/java/net/micode/notes/ui/NotesListItem.java
+++ b/src/app/src/main/java/net/micode/notes/ui/NotesListItem.java
@@ -47,27 +47,31 @@ public class NotesListItem extends LinearLayout {
mCallName = (TextView) findViewById(R.id.tv_name);
mCheckBox = (CheckBox) findViewById(android.R.id.checkbox);
}
-
+
+ // 绑定数据到列表项
public void bind(Context context, NoteItemData data, boolean choiceMode, boolean checked) {
+ // 根据选择模式和数据类型设定复选框的可见性和选中状态
if (choiceMode && data.getType() == Notes.TYPE_NOTE) {
mCheckBox.setVisibility(View.VISIBLE);
mCheckBox.setChecked(checked);
} else {
mCheckBox.setVisibility(View.GONE);
}
-
- mItemData = data;
+
+ mItemData = data; // 将数据保存在类成员变量中
+
+ // 根据不同的数据类型和属性设置视图的可见性,文本内容和图像资源
if (data.getId() == Notes.ID_CALL_RECORD_FOLDER) {
mCallName.setVisibility(View.GONE);
mAlert.setVisibility(View.VISIBLE);
mTitle.setTextAppearance(context, R.style.TextAppearancePrimaryItem);
mTitle.setText(context.getString(R.string.call_record_folder_name)
- + context.getString(R.string.format_folder_files_count, data.getNotesCount()));
+ + context.getString(R.string.format_folder_files_count, data.getNotesCount()));
mAlert.setImageResource(R.drawable.call_record);
} else if (data.getParentId() == Notes.ID_CALL_RECORD_FOLDER) {
mCallName.setVisibility(View.VISIBLE);
mCallName.setText(data.getCallName());
- mTitle.setTextAppearance(context,R.style.TextAppearanceSecondaryItem);
+ mTitle.setTextAppearance(context, R.style.TextAppearanceSecondaryItem);
mTitle.setText(DataUtils.getFormattedSnippet(data.getSnippet()));
if (data.hasAlert()) {
mAlert.setImageResource(R.drawable.clock);
@@ -78,11 +82,10 @@ public class NotesListItem extends LinearLayout {
} else {
mCallName.setVisibility(View.GONE);
mTitle.setTextAppearance(context, R.style.TextAppearancePrimaryItem);
-
+
if (data.getType() == Notes.TYPE_FOLDER) {
mTitle.setText(data.getSnippet()
- + context.getString(R.string.format_folder_files_count,
- data.getNotesCount()));
+ + context.getString(R.string.format_folder_files_count, data.getNotesCount()));
mAlert.setVisibility(View.GONE);
} else {
mTitle.setText(DataUtils.getFormattedSnippet(data.getSnippet()));
@@ -94,11 +97,14 @@ public class NotesListItem extends LinearLayout {
}
}
}
+
+ // 设置时间文本为相对时间格式
mTime.setText(DateUtils.getRelativeTimeSpanString(data.getModifiedDate()));
-
- setBackground(data);
+
+ setBackground(data); // 设置背景
}
-
+
+ // 根据数据类型和属性设置背景
private void setBackground(NoteItemData data) {
int id = data.getBgColorId();
if (data.getType() == Notes.TYPE_NOTE) {
diff --git a/src/app/src/main/java/net/micode/notes/ui/NotesPreferenceActivity.java b/src/app/src/main/java/net/micode/notes/ui/NotesPreferenceActivity.java
index 07c5f7ec..ef66eadc 100644
--- a/src/app/src/main/java/net/micode/notes/ui/NotesPreferenceActivity.java
+++ b/src/app/src/main/java/net/micode/notes/ui/NotesPreferenceActivity.java
@@ -72,28 +72,28 @@ public class NotesPreferenceActivity extends PreferenceActivity {
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
-
- /* using the app icon for navigation */
+
+ /* 设置显示返回箭头 */
getActionBar().setDisplayHomeAsUpEnabled(true);
-
+
+ /* 从 XML 文件加载偏好设置 */
addPreferencesFromResource(R.xml.preferences);
mAccountCategory = (PreferenceCategory) findPreference(PREFERENCE_SYNC_ACCOUNT_KEY);
mReceiver = new GTaskReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(GTaskSyncService.GTASK_SERVICE_BROADCAST_NAME);
registerReceiver(mReceiver, filter);
-
+
mOriAccounts = null;
View header = LayoutInflater.from(this).inflate(R.layout.settings_header, null);
getListView().addHeaderView(header, null, true);
}
-
+
@Override
protected void onResume() {
super.onResume();
-
- // need to set sync account automatically if user has added a new
- // account
+
+ // 需要在用户添加新帐户后自动设置同步帐户
if (mHasAddedAccount) {
Account[] accounts = getGoogleAccounts();
if (mOriAccounts != null && accounts.length > mOriAccounts.length) {
@@ -112,10 +112,10 @@ public class NotesPreferenceActivity extends PreferenceActivity {
}
}
}
-
+
refreshUI();
}
-
+
@Override
protected void onDestroy() {
if (mReceiver != null) {
@@ -123,10 +123,11 @@ public class NotesPreferenceActivity extends PreferenceActivity {
}
super.onDestroy();
}
-
+
+ /* 加载帐户偏好设置 */
private void loadAccountPreference() {
mAccountCategory.removeAll();
-
+
Preference accountPref = new Preference(this);
final String defaultAccount = getSyncAccountName(this);
accountPref.setTitle(getString(R.string.preferences_account_title));
@@ -135,11 +136,10 @@ public class NotesPreferenceActivity extends PreferenceActivity {
public boolean onPreferenceClick(Preference preference) {
if (!GTaskSyncService.isSyncing()) {
if (TextUtils.isEmpty(defaultAccount)) {
- // the first time to set account
+ // 第一次设置帐户
showSelectAccountAlertDialog();
} else {
- // if the account has already been set, we need to promp
- // user about the risk
+ // 如果帐户已经设置,需要提示用户风险
showChangeAccountConfirmAlertDialog();
}
} else {
@@ -150,186 +150,194 @@ public class NotesPreferenceActivity extends PreferenceActivity {
return true;
}
});
-
+
mAccountCategory.addPreference(accountPref);
}
- private void loadSyncButton() {
- Button syncButton = (Button) findViewById(R.id.preference_sync_button);
- TextView lastSyncTimeView = (TextView) findViewById(R.id.prefenerece_sync_status_textview);
-
- // set button state
- if (GTaskSyncService.isSyncing()) {
- syncButton.setText(getString(R.string.preferences_button_sync_cancel));
- syncButton.setOnClickListener(new View.OnClickListener() {
- public void onClick(View v) {
- GTaskSyncService.cancelSync(NotesPreferenceActivity.this);
- }
- });
- } else {
- syncButton.setText(getString(R.string.preferences_button_sync_immediately));
- syncButton.setOnClickListener(new View.OnClickListener() {
- public void onClick(View v) {
- GTaskSyncService.startSync(NotesPreferenceActivity.this);
- }
- });
- }
- syncButton.setEnabled(!TextUtils.isEmpty(getSyncAccountName(this)));
-
- // set last sync time
- if (GTaskSyncService.isSyncing()) {
- lastSyncTimeView.setText(GTaskSyncService.getProgressString());
+// 加载同步按钮
+private void loadSyncButton() {
+ // 获取同步按钮和上次同步时间视图
+ Button syncButton = (Button) findViewById(R.id.preference_sync_button);
+ TextView lastSyncTimeView = (TextView) findViewById(R.id.prefenerece_sync_status_textview);
+
+ // 设置按钮状态
+ if (GTaskSyncService.isSyncing()) {
+ // 如果正在同步,则显示取消同步按钮,并设置点击监听器取消同步
+ syncButton.setText(getString(R.string.preferences_button_sync_cancel));
+ syncButton.setOnClickListener(new View.OnClickListener() {
+ public void onClick(View v) {
+ GTaskSyncService.cancelSync(NotesPreferenceActivity.this);
+ }
+ });
+ } else {
+ // 如果未在同步,则显示立即同步按钮,并设置点击监听器开始同步
+ syncButton.setText(getString(R.string.preferences_button_sync_immediately));
+ syncButton.setOnClickListener(new View.OnClickListener() {
+ public void onClick(View v) {
+ GTaskSyncService.startSync(NotesPreferenceActivity.this);
+ }
+ });
+ }
+ // 根据是否存在同步帐户来设置按钮是否可用
+ syncButton.setEnabled(!TextUtils.isEmpty(getSyncAccountName(this)));
+
+ // 设置上次同步时间
+ if (GTaskSyncService.isSyncing()) {
+ // 如果正在同步,则显示同步进度,并设置视图可见
+ lastSyncTimeView.setText(GTaskSyncService.getProgressString());
+ lastSyncTimeView.setVisibility(View.VISIBLE);
+ } else {
+ // 如果未在同步,则获取上次同步时间并显示在视图中
+ long lastSyncTime = getLastSyncTime(this);
+ if (lastSyncTime != 0) {
+ lastSyncTimeView.setText(getString(R.string.preferences_last_sync_time,
+ DateFormat.format(getString(R.string.preferences_last_sync_time_format),
+ lastSyncTime)));
lastSyncTimeView.setVisibility(View.VISIBLE);
} else {
- long lastSyncTime = getLastSyncTime(this);
- if (lastSyncTime != 0) {
- lastSyncTimeView.setText(getString(R.string.preferences_last_sync_time,
- DateFormat.format(getString(R.string.preferences_last_sync_time_format),
- lastSyncTime)));
- lastSyncTimeView.setVisibility(View.VISIBLE);
- } else {
- lastSyncTimeView.setVisibility(View.GONE);
- }
+ // 如果没有上次同步时间,则隐藏视图
+ lastSyncTimeView.setVisibility(View.GONE);
}
}
+}
- private void refreshUI() {
- loadAccountPreference();
- loadSyncButton();
- }
-
- private void showSelectAccountAlertDialog() {
- AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
-
- View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null);
- TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title);
- titleTextView.setText(getString(R.string.preferences_dialog_select_account_title));
- TextView subtitleTextView = (TextView) titleView.findViewById(R.id.account_dialog_subtitle);
- subtitleTextView.setText(getString(R.string.preferences_dialog_select_account_tips));
-
- dialogBuilder.setCustomTitle(titleView);
- dialogBuilder.setPositiveButton(null, null);
-
- Account[] accounts = getGoogleAccounts();
- String defAccount = getSyncAccountName(this);
-
- mOriAccounts = accounts;
- mHasAddedAccount = false;
+// 刷新用户界面
+private void refreshUI() {
+ // 加载帐户偏好设置
+ loadAccountPreference();
+ // 加载同步按钮
+ loadSyncButton();
+}
- if (accounts.length > 0) {
- CharSequence[] items = new CharSequence[accounts.length];
- final CharSequence[] itemMapping = items;
- int checkedItem = -1;
- int index = 0;
- for (Account account : accounts) {
- if (TextUtils.equals(account.name, defAccount)) {
- checkedItem = index;
- }
- items[index++] = account.name;
+private void showSelectAccountAlertDialog() {
+ // 创建一个AlertDialog.Builder对象
+ AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
+
+ // 填充自定义布局,用作对话框标题
+ View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null);
+
+ // 设置对话框标题和副标题文本
+ TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title);
+ titleTextView.setText(getString(R.string.preferences_dialog_select_account_title));
+ TextView subtitleTextView = (TextView) titleView.findViewById(R.id.account_dialog_subtitle);
+ subtitleTextView.setText(getString(R.string.preferences_dialog_select_account_tips));
+
+ // 设置自定义标题视图
+ dialogBuilder.setCustomTitle(titleView);
+
+ // 禁用对话框的确认按钮
+ dialogBuilder.setPositiveButton(null, null);
+
+ // 获取Google帐户数组和默认帐户
+ Account[] accounts = getGoogleAccounts();
+ String defAccount = getSyncAccountName(this);
+
+ // 保存原始帐户数组并设置添加账户的标志
+ mOriAccounts = accounts;
+ mHasAddedAccount = false;
+
+ if (accounts.length > 0) {
+ // 创建一个字符序列数组来存储帐户名,并找到选中项的索引
+ CharSequence[] items = new CharSequence[accounts.length];
+ final CharSequence[] itemMapping = items;
+ int checkedItem = -1;
+ int index = 0;
+ for (Account account : accounts) {
+ if (TextUtils.equals(account.name, defAccount)) {
+ checkedItem = index;
}
- dialogBuilder.setSingleChoiceItems(items, checkedItem,
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- setSyncAccount(itemMapping[which].toString());
- dialog.dismiss();
- refreshUI();
- }
- });
+ items[index++] = account.name;
}
-
- View addAccountView = LayoutInflater.from(this).inflate(R.layout.add_account_text, null);
- dialogBuilder.setView(addAccountView);
-
- final AlertDialog dialog = dialogBuilder.show();
- addAccountView.setOnClickListener(new View.OnClickListener() {
- public void onClick(View v) {
- mHasAddedAccount = true;
- Intent intent = new Intent("android.settings.ADD_ACCOUNT_SETTINGS");
- intent.putExtra(AUTHORITIES_FILTER_KEY, new String[] {
- "gmail-ls"
+ // 设置单选项列表,其中帐户名为选项文本,checkedItem为默认选中项
+ dialogBuilder.setSingleChoiceItems(items, checkedItem,
+ new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ setSyncAccount(itemMapping[which].toString());
+ dialog.dismiss();
+ refreshUI();
+ }
});
- startActivityForResult(intent, -1);
- dialog.dismiss();
- }
- });
- }
-
- private void showChangeAccountConfirmAlertDialog() {
- AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
-
- View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null);
- TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title);
- titleTextView.setText(getString(R.string.preferences_dialog_change_account_title,
- getSyncAccountName(this)));
- TextView subtitleTextView = (TextView) titleView.findViewById(R.id.account_dialog_subtitle);
- subtitleTextView.setText(getString(R.string.preferences_dialog_change_account_warn_msg));
- dialogBuilder.setCustomTitle(titleView);
-
- CharSequence[] menuItemArray = new CharSequence[] {
- getString(R.string.preferences_menu_change_account),
- getString(R.string.preferences_menu_remove_account),
- getString(R.string.preferences_menu_cancel)
- };
- dialogBuilder.setItems(menuItemArray, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- if (which == 0) {
- showSelectAccountAlertDialog();
- } else if (which == 1) {
- removeSyncAccount();
- refreshUI();
- }
- }
- });
- dialogBuilder.show();
}
- private Account[] getGoogleAccounts() {
- AccountManager accountManager = AccountManager.get(this);
- return accountManager.getAccountsByType("com.google");
- }
+ // 填充自定义布局,用作添加账户的视图
+ View addAccountView = LayoutInflater.from(this).inflate(R.layout.add_account_text, null);
+ dialogBuilder.setView(addAccountView);
+
+ // 显示对话框
+ final AlertDialog dialog = dialogBuilder.show();
+ // 单击添加账户视图时触发
+ addAccountView.setOnClickListener(new View.OnClickListener() {
+ public void onClick(View v) {
+ mHasAddedAccount = true;
+ // 打开系统添加账户设置界面
+ Intent intent = new Intent("android.settings.ADD_ACCOUNT_SETTINGS");
+ intent.putExtra(AUTHORITIES_FILTER_KEY, new String[] {
+ "gmail-ls"
+ });
+ startActivityForResult(intent, -1);
+ dialog.dismiss();
+ }
+ });
+}
- private void setSyncAccount(String account) {
- if (!getSyncAccountName(this).equals(account)) {
- SharedPreferences settings = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
- SharedPreferences.Editor editor = settings.edit();
- if (account != null) {
- editor.putString(PREFERENCE_SYNC_ACCOUNT_NAME, account);
- } else {
- editor.putString(PREFERENCE_SYNC_ACCOUNT_NAME, "");
+private void showChangeAccountConfirmAlertDialog() {
+ // 创建一个AlertDialog.Builder对象
+ AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
+
+ // 填充自定义布局,用作对话框标题
+ View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null);
+ TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title);
+ titleTextView.setText(getString(R.string.preferences_dialog_change_account_title, getSyncAccountName(this)));
+ TextView subtitleTextView = (TextView) titleView.findViewById(R.id.account_dialog_subtitle);
+ subtitleTextView.setText(getString(R.string.preferences_dialog_change_account_warn_msg));
+ dialogBuilder.setCustomTitle(titleView);
+
+ // 设置对话框的选项菜单
+ CharSequence[] menuItemArray = new CharSequence[] {
+ getString(R.string.preferences_menu_change_account),
+ getString(R.string.preferences_menu_remove_account),
+ getString(R.string.preferences_menu_cancel)
+ };
+ dialogBuilder.setItems(menuItemArray, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ if (which == 0) {
+ showSelectAccountAlertDialog();
+ } else if (which == 1) {
+ removeSyncAccount();
+ refreshUI();
}
- editor.commit();
-
- // clean up last sync time
- setLastSyncTime(this, 0);
-
- // clean up local gtask related info
- new Thread(new Runnable() {
- public void run() {
- ContentValues values = new ContentValues();
- values.put(NoteColumns.GTASK_ID, "");
- values.put(NoteColumns.SYNC_ID, 0);
- getContentResolver().update(Notes.CONTENT_NOTE_URI, values, null, null);
- }
- }).start();
-
- Toast.makeText(NotesPreferenceActivity.this,
- getString(R.string.preferences_toast_success_set_accout, account),
- Toast.LENGTH_SHORT).show();
}
- }
+ });
+ dialogBuilder.show();
+}
- private void removeSyncAccount() {
+private Account[] getGoogleAccounts() {
+ // 获取账户管理器实例
+ AccountManager accountManager = AccountManager.get(this);
+ // 返回所有com.google类型的账户
+ return accountManager.getAccountsByType("com.google");
+}
+
+private void setSyncAccount(String account) {
+ // 如果当前同步账户与设置的账户不同
+ if (!getSyncAccountName(this).equals(account)) {
+ // 获取SharedPreferences实例
SharedPreferences settings = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
+ // 获取SharedPreferences编辑器
SharedPreferences.Editor editor = settings.edit();
- if (settings.contains(PREFERENCE_SYNC_ACCOUNT_NAME)) {
- editor.remove(PREFERENCE_SYNC_ACCOUNT_NAME);
- }
- if (settings.contains(PREFERENCE_LAST_SYNC_TIME)) {
- editor.remove(PREFERENCE_LAST_SYNC_TIME);
+ // 如果账户不为null,设置同步账户名称
+ if (account != null) {
+ editor.putString(PREFERENCE_SYNC_ACCOUNT_NAME, account);
+ } else {
+ // 否则清空同步账户名称
+ editor.putString(PREFERENCE_SYNC_ACCOUNT_NAME, "");
}
editor.commit();
- // clean up local gtask related info
+ // 清空上次同步时间
+ setLastSyncTime(this, 0);
+
+ // 清空本地gtask相关信息
new Thread(new Runnable() {
public void run() {
ContentValues values = new ContentValues();
@@ -338,51 +346,92 @@ public class NotesPreferenceActivity extends PreferenceActivity {
getContentResolver().update(Notes.CONTENT_NOTE_URI, values, null, null);
}
}).start();
- }
- public static String getSyncAccountName(Context context) {
- SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME,
- Context.MODE_PRIVATE);
- return settings.getString(PREFERENCE_SYNC_ACCOUNT_NAME, "");
+ // 显示Toast提示设置成功
+ Toast.makeText(NotesPreferenceActivity.this,
+ getString(R.string.preferences_toast_success_set_accout, account),
+ Toast.LENGTH_SHORT).show();
}
+}
- public static void setLastSyncTime(Context context, long time) {
- SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME,
- Context.MODE_PRIVATE);
- SharedPreferences.Editor editor = settings.edit();
- editor.putLong(PREFERENCE_LAST_SYNC_TIME, time);
- editor.commit();
+private void removeSyncAccount() {
+ // 获取SharedPreferences实例
+ SharedPreferences settings = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
+ // 获取SharedPreferences编辑器
+ SharedPreferences.Editor editor = settings.edit();
+ // 如果包含同步账户名称信息,移除
+ if (settings.contains(PREFERENCE_SYNC_ACCOUNT_NAME)) {
+ editor.remove(PREFERENCE_SYNC_ACCOUNT_NAME);
}
-
- public static long getLastSyncTime(Context context) {
- SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME,
- Context.MODE_PRIVATE);
- return settings.getLong(PREFERENCE_LAST_SYNC_TIME, 0);
+ // 如果包含上次同步时间信息,移除
+ if (settings.contains(PREFERENCE_LAST_SYNC_TIME)) {
+ editor.remove(PREFERENCE_LAST_SYNC_TIME);
}
+ editor.commit();
+
+ // 清空本地gtask相关信息
+ new Thread(new Runnable() {
+ public void run() {
+ ContentValues values = new ContentValues();
+ values.put(NoteColumns.GTASK_ID, "");
+ values.put(NoteColumns.SYNC_ID, 0);
+ getContentResolver().update(Notes.CONTENT_NOTE_URI, values, null, null);
+ }
+ }).start();
+}
- private class GTaskReceiver extends BroadcastReceiver {
+public static String getSyncAccountName(Context context) {
+ // 获取SharedPreferences实例
+ SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME,
+ Context.MODE_PRIVATE);
+ // 返回同步账户名称
+ return settings.getString(PREFERENCE_SYNC_ACCOUNT_NAME, "");
+}
- @Override
- public void onReceive(Context context, Intent intent) {
- refreshUI();
- if (intent.getBooleanExtra(GTaskSyncService.GTASK_SERVICE_BROADCAST_IS_SYNCING, false)) {
- TextView syncStatus = (TextView) findViewById(R.id.prefenerece_sync_status_textview);
- syncStatus.setText(intent
- .getStringExtra(GTaskSyncService.GTASK_SERVICE_BROADCAST_PROGRESS_MSG));
- }
+public static void setLastSyncTime(Context context, long time) {
+ // 获取SharedPreferences实例
+ SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME,
+ Context.MODE_PRIVATE);
+ // 获取SharedPreferences编辑器
+ SharedPreferences.Editor editor = settings.edit();
+ // 设置上次同步时间
+ editor.putLong(PREFERENCE_LAST_SYNC_TIME, time);
+ editor.commit();
+}
+public static long getLastSyncTime(Context context) {
+ // 获取SharedPreferences实例
+ SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME,
+ Context.MODE_PRIVATE);
+ // 返回上次同步时间
+ return settings.getLong(PREFERENCE_LAST_SYNC_TIME, 0);
+}
+
+private class GTaskReceiver extends BroadcastReceiver {
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ // 刷新UI界面
+ refreshUI();
+ // 如果正在同步任务
+ if (intent.getBooleanExtra(GTaskSyncService.GTASK_SERVICE_BROADCAST_IS_SYNCING, false)) {
+ TextView syncStatus = (TextView) findViewById(R.id.prefenerece_sync_status_textview);
+ // 设置同步状态文本信息
+ syncStatus.setText(intent.getStringExtra(GTaskSyncService.GTASK_SERVICE_BROADCAST_PROGRESS_MSG));
}
}
+}
- public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case android.R.id.home:
- Intent intent = new Intent(this, NotesListActivity.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- startActivity(intent);
- return true;
- default:
- return false;
- }
+public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case android.R.id.home:
+ Intent intent = new Intent(this, NotesListActivity.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ // 返回到主页面
+ startActivity(intent);
+ return true;
+ default:
+ return false;
}
}
+}