diff --git a/.gradle/7.5/executionHistory/executionHistory.bin b/.gradle/7.5/executionHistory/executionHistory.bin
index be514e9..416f504 100644
Binary files a/.gradle/7.5/executionHistory/executionHistory.bin and b/.gradle/7.5/executionHistory/executionHistory.bin differ
diff --git a/.gradle/7.5/executionHistory/executionHistory.lock b/.gradle/7.5/executionHistory/executionHistory.lock
index 00bf098..9232910 100644
Binary files a/.gradle/7.5/executionHistory/executionHistory.lock and b/.gradle/7.5/executionHistory/executionHistory.lock differ
diff --git a/.gradle/7.5/fileHashes/fileHashes.bin b/.gradle/7.5/fileHashes/fileHashes.bin
index 4c50cb0..e76d1a4 100644
Binary files a/.gradle/7.5/fileHashes/fileHashes.bin and b/.gradle/7.5/fileHashes/fileHashes.bin differ
diff --git a/.gradle/7.5/fileHashes/fileHashes.lock b/.gradle/7.5/fileHashes/fileHashes.lock
index 66dcdbf..8f036b8 100644
Binary files a/.gradle/7.5/fileHashes/fileHashes.lock and b/.gradle/7.5/fileHashes/fileHashes.lock differ
diff --git a/.gradle/7.5/fileHashes/resourceHashesCache.bin b/.gradle/7.5/fileHashes/resourceHashesCache.bin
index e6319dd..f4a0338 100644
Binary files a/.gradle/7.5/fileHashes/resourceHashesCache.bin and b/.gradle/7.5/fileHashes/resourceHashesCache.bin differ
diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock
index 0781ce7..dde978a 100644
Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe
index c5ece43..7182a93 100644
Binary files a/.gradle/file-system.probe and b/.gradle/file-system.probe differ
diff --git a/.idea/dataSources.local.xml b/.idea/dataSources.local.xml
new file mode 100644
index 0000000..7afb2cb
--- /dev/null
+++ b/.idea/dataSources.local.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+ forget
+
+
+
+
+ forget
+
+
+
+
\ No newline at end of file
diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml
new file mode 100644
index 0000000..3322a47
--- /dev/null
+++ b/.idea/dataSources.xml
@@ -0,0 +1,20 @@
+
+
+
+
+ sqlite.xerial
+ true
+ test
+ org.sqlite.JDBC
+ jdbc:sqlite:$PROJECT_DIR$/../../../sqlite_db/note.db-journal
+ $ProjectFileDir$
+
+
+ sqlite.xerial
+ true
+ org.sqlite.JDBC
+ jdbc:sqlite:$PROJECT_DIR$/../../../sqlite_db/note.db
+ $ProjectFileDir$
+
+
+
\ No newline at end of file
diff --git a/.idea/dataSources/1e96f354-5f72-4f13-810e-22aac6aa6e27.xml b/.idea/dataSources/1e96f354-5f72-4f13-810e-22aac6aa6e27.xml
new file mode 100644
index 0000000..c1396b6
--- /dev/null
+++ b/.idea/dataSources/1e96f354-5f72-4f13-810e-22aac6aa6e27.xml
@@ -0,0 +1,1427 @@
+
+
+
+
+ 3.40.1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+ window
+
+
+ 1
+
+
+ 1
+ 1
+
+
+ window
+
+
+ 1
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+ 1
+
+
+
+ 1
+
+
+
+ 1
+ 1
+
+
+ 1
+ 1
+
+
+ 1
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ window
+
+
+ 1
+
+
+ 1
+ 1
+
+
+ 1
+
+
+ 1
+ 1
+
+
+ 1
+ 1
+
+
+ window
+
+
+ window
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ window
+
+
+ 1
+
+
+
+ 1
+
+
+ 1
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ window
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+ 1
+ window
+
+
+ window
+
+
+ 1
+
+
+ 1
+ window
+
+
+ 1
+
+
+ 1
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+ 1
+
+
+ window
+
+
+ window
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+ 1
+
+
+ 1
+ 1
+
+
+ 1
+
+
+ window
+
+
+ 1
+ 1
+
+
+ 1
+
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+ 1
+ 1
+
+
+ 1
+ 1
+
+
+ window
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ window
+
+
+ 1
+
+
+ 1
+
+
+
+
+ window
+
+
+ window
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+ 1
+
+
+ window
+
+
+ 1
+ 1
+
+
+ window
+
+
+ window
+
+
+ window
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ window
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+ 1
+
+
+ aggregate
+
+
+ aggregate
+
+
+ aggregate
+
+
+
+
+ aggregate
+
+
+
+
+
+ 1
+
+
+
+
+ aggregate
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+ aggregate
+
+
+
+
+
+
+ 1
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+
+
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ R
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ 3
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ 3
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ 3
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ R
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ 3
+
+
+ R
+
+
+ R
+
+
+ R
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ 3
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ 3
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ 3
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ 3
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+
\ No newline at end of file
diff --git a/.idea/dataSources/adb01839-3cc6-41b4-9ace-cd3210f66ab1.xml b/.idea/dataSources/adb01839-3cc6-41b4-9ace-cd3210f66ab1.xml
new file mode 100644
index 0000000..914ae76
--- /dev/null
+++ b/.idea/dataSources/adb01839-3cc6-41b4-9ace-cd3210f66ab1.xml
@@ -0,0 +1,1427 @@
+
+
+
+
+ 3.40.1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+ window
+
+
+ 1
+
+
+ 1
+ 1
+
+
+ window
+
+
+ 1
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+ 1
+
+
+
+ 1
+
+
+
+ 1
+ 1
+
+
+ 1
+ 1
+
+
+ 1
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ window
+
+
+ 1
+
+
+ 1
+ 1
+
+
+ 1
+
+
+ 1
+ 1
+
+
+ 1
+ 1
+
+
+ window
+
+
+ window
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ window
+
+
+ 1
+
+
+
+ 1
+
+
+ 1
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ window
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+ 1
+ window
+
+
+ window
+
+
+ 1
+
+
+ 1
+ window
+
+
+ 1
+
+
+ 1
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+ 1
+
+
+ window
+
+
+ window
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+ 1
+
+
+ 1
+ 1
+
+
+ 1
+
+
+ window
+
+
+ 1
+ 1
+
+
+ 1
+
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+ 1
+ 1
+
+
+ 1
+ 1
+
+
+ window
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ window
+
+
+ 1
+
+
+ 1
+
+
+
+
+ window
+
+
+ window
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+ 1
+
+
+ window
+
+
+ 1
+ 1
+
+
+ window
+
+
+ window
+
+
+ window
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ window
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+ 1
+
+
+ aggregate
+
+
+ aggregate
+
+
+ aggregate
+
+
+
+
+ aggregate
+
+
+
+
+
+ 1
+
+
+
+
+ aggregate
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+ aggregate
+
+
+
+
+
+
+ 1
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+
+
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ R
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ 3
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ 3
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ 3
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ R
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ 3
+
+
+ R
+
+
+ R
+
+
+ R
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ 3
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ 3
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ 3
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ R
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ 3
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+ 2
+
+
+ R
+
+
+ 1
+
+
+ R
+
+
+ 1
+
+
+
\ No newline at end of file
diff --git a/.idea/dataSources/adb01839-3cc6-41b4-9ace-cd3210f66ab1/storage_v2/_src_/schema/main.uQUzAA.meta b/.idea/dataSources/adb01839-3cc6-41b4-9ace-cd3210f66ab1/storage_v2/_src_/schema/main.uQUzAA.meta
new file mode 100644
index 0000000..816e515
--- /dev/null
+++ b/.idea/dataSources/adb01839-3cc6-41b4-9ace-cd3210f66ab1/storage_v2/_src_/schema/main.uQUzAA.meta
@@ -0,0 +1 @@
+#n:main
\ No newline at end of file
diff --git a/.idea/dataSources/adb01839-3cc6-41b4-9ace-cd3210f66ab1/storage_v2/_src_/schema/main.uQUzAA.zip b/.idea/dataSources/adb01839-3cc6-41b4-9ace-cd3210f66ab1/storage_v2/_src_/schema/main.uQUzAA.zip
new file mode 100644
index 0000000..84895ea
Binary files /dev/null and b/.idea/dataSources/adb01839-3cc6-41b4-9ace-cd3210f66ab1/storage_v2/_src_/schema/main.uQUzAA.zip differ
diff --git a/.idea/dbnavigator.xml b/.idea/dbnavigator.xml
new file mode 100644
index 0000000..0987745
--- /dev/null
+++ b/.idea/dbnavigator.xml
@@ -0,0 +1,429 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
index 9a1830f..84e08e8 100644
--- a/.idea/deploymentTargetDropDown.xml
+++ b/.idea/deploymentTargetDropDown.xml
@@ -1,17 +1,6 @@
-
-
-
-
-
-
-
-
-
-
-
@@ -23,6 +12,6 @@
-
+
\ No newline at end of file
diff --git a/.idea/libraries/SQLiteStudioRemote.xml b/.idea/libraries/SQLiteStudioRemote.xml
new file mode 100644
index 0000000..db78b54
--- /dev/null
+++ b/.idea/libraries/SQLiteStudioRemote.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build/intermediates/apk/debug/app-debug.apk b/app/build/intermediates/apk/debug/app-debug.apk
index c3e365c..cd7e018 100644
Binary files a/app/build/intermediates/apk/debug/app-debug.apk and b/app/build/intermediates/apk/debug/app-debug.apk differ
diff --git a/app/build/intermediates/compile_and_runtime_not_namespaced_r_class_jar/debug/R.jar b/app/build/intermediates/compile_and_runtime_not_namespaced_r_class_jar/debug/R.jar
index cabfc26..7f098e7 100644
Binary files a/app/build/intermediates/compile_and_runtime_not_namespaced_r_class_jar/debug/R.jar and b/app/build/intermediates/compile_and_runtime_not_namespaced_r_class_jar/debug/R.jar differ
diff --git a/app/build/intermediates/dex/debug/mergeDexDebug/classes.dex b/app/build/intermediates/dex/debug/mergeDexDebug/classes.dex
index bb26b77..e63cead 100644
Binary files a/app/build/intermediates/dex/debug/mergeDexDebug/classes.dex and b/app/build/intermediates/dex/debug/mergeDexDebug/classes.dex differ
diff --git a/app/build/intermediates/dex_archive_input_jar_hashes/debug/out b/app/build/intermediates/dex_archive_input_jar_hashes/debug/out
index da9bd68..4ed032f 100644
Binary files a/app/build/intermediates/dex_archive_input_jar_hashes/debug/out and b/app/build/intermediates/dex_archive_input_jar_hashes/debug/out differ
diff --git a/app/build/intermediates/incremental/debug/mergeDebugResources/compile-file-map.properties b/app/build/intermediates/incremental/debug/mergeDebugResources/compile-file-map.properties
index 109794e..5a81502 100644
--- a/app/build/intermediates/incremental/debug/mergeDebugResources/compile-file-map.properties
+++ b/app/build/intermediates/incremental/debug/mergeDebugResources/compile-file-map.properties
@@ -1,4 +1,4 @@
-#Sun May 14 15:35:59 CST 2023
+#Wed May 17 00:34:05 CST 2023
net.micode.notes.app-main-7\:/drawable-hdpi/call_record.png=E\:\\andriodProj\\my_note\\gitProject\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_call_record.png.flat
net.micode.notes.app-main-7\:/drawable-hdpi/edit_title_green.9.png=E\:\\andriodProj\\my_note\\gitProject\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_edit_title_green.9.png.flat
net.micode.notes.app-main-7\:/drawable-hdpi/edit_title_yellow.9.png=E\:\\andriodProj\\my_note\\gitProject\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_edit_title_yellow.9.png.flat
@@ -11,8 +11,8 @@ net.micode.notes.app-main-7\:/color/secondary_text_dark.xml=E\:\\andriodProj\\my
net.micode.notes.app-main-7\:/layout/widget_4x.xml=E\:\\andriodProj\\my_note\\gitProject\\app\\build\\intermediates\\merged_res\\debug\\layout_widget_4x.xml.flat
net.micode.notes.app-main-7\:/drawable-hdpi/menu_delete.png=E\:\\andriodProj\\my_note\\gitProject\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_menu_delete.png.flat
net.micode.notes.app-main-7\:/drawable-hdpi/clock.png=E\:\\andriodProj\\my_note\\gitProject\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_clock.png.flat
-net.micode.notes.app-main-7\:/drawable-hdpi/dropdown_icon.9.png=E\:\\andriodProj\\my_note\\gitProject\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_dropdown_icon.9.png.flat
net.micode.notes.app-pngs-0\:/drawable-xxhdpi/note_menu_bg.png=E\:\\andriodProj\\my_note\\gitProject\\app\\build\\intermediates\\merged_res\\debug\\drawable-xxhdpi_note_menu_bg.png.flat
+net.micode.notes.app-main-7\:/drawable-hdpi/dropdown_icon.9.png=E\:\\andriodProj\\my_note\\gitProject\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_dropdown_icon.9.png.flat
net.micode.notes.app-main-7\:/drawable-hdpi/edit_green.9.png=E\:\\andriodProj\\my_note\\gitProject\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_edit_green.9.png.flat
net.micode.notes.app-main-7\:/drawable-hdpi/list_white_single.9.png=E\:\\andriodProj\\my_note\\gitProject\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_white_single.9.png.flat
net.micode.notes.app-main-7\:/raw-zh-rCN/introduction=E\:\\andriodProj\\my_note\\gitProject\\app\\build\\intermediates\\merged_res\\debug\\raw-zh-rCN_introduction.flat
@@ -49,6 +49,7 @@ net.micode.notes.app-main-7\:/drawable-hdpi/edit_title_blue.9.png=E\:\\andriodPr
net.micode.notes.app-main-7\:/drawable-hdpi/bg_color_btn_mask.png=E\:\\andriodProj\\my_note\\gitProject\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_bg_color_btn_mask.png.flat
net.micode.notes.app-main-7\:/drawable-hdpi/edit_blue.9.png=E\:\\andriodProj\\my_note\\gitProject\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_edit_blue.9.png.flat
net.micode.notes.app-main-7\:/drawable-hdpi/bg_btn_set_color.png=E\:\\andriodProj\\my_note\\gitProject\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_bg_btn_set_color.png.flat
+net.micode.notes.app-main-7\:/layout/note_backup_item.xml=E\:\\andriodProj\\my_note\\gitProject\\app\\build\\intermediates\\merged_res\\debug\\layout_note_backup_item.xml.flat
net.micode.notes.app-main-7\:/xml/searchable.xml=E\:\\andriodProj\\my_note\\gitProject\\app\\build\\intermediates\\merged_res\\debug\\xml_searchable.xml.flat
net.micode.notes.app-main-7\:/drawable-hdpi/notification.png=E\:\\andriodProj\\my_note\\gitProject\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_notification.png.flat
net.micode.notes.app-main-7\:/drawable-hdpi/list_blue_up.9.png=E\:\\andriodProj\\my_note\\gitProject\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_blue_up.9.png.flat
@@ -76,7 +77,9 @@ net.micode.notes.app-pngs-0\:/drawable-hdpi/baseline_add_box_24.png=E\:\\andriod
net.micode.notes.app-main-7\:/drawable-hdpi/list_red_single.9.png=E\:\\andriodProj\\my_note\\gitProject\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_red_single.9.png.flat
net.micode.notes.app-main-7\:/drawable-hdpi/menu_move.png=E\:\\andriodProj\\my_note\\gitProject\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_menu_move.png.flat
net.micode.notes.app-main-7\:/drawable-hdpi/list_green_down.9.png=E\:\\andriodProj\\my_note\\gitProject\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_list_green_down.9.png.flat
+net.micode.notes.app-main-7\:/layout/note_pop_menu_main.xml=E\:\\andriodProj\\my_note\\gitProject\\app\\build\\intermediates\\merged_res\\debug\\layout_note_pop_menu_main.xml.flat
net.micode.notes.app-main-7\:/xml/network_security_config.xml=E\:\\andriodProj\\my_note\\gitProject\\app\\build\\intermediates\\merged_res\\debug\\xml_network_security_config.xml.flat
+net.micode.notes.app-main-7\:/layout/note_pop_menu_list.xml=E\:\\andriodProj\\my_note\\gitProject\\app\\build\\intermediates\\merged_res\\debug\\layout_note_pop_menu_list.xml.flat
net.micode.notes.app-main-7\:/layout/note_edit_list_item.xml=E\:\\andriodProj\\my_note\\gitProject\\app\\build\\intermediates\\merged_res\\debug\\layout_note_edit_list_item.xml.flat
net.micode.notes.app-main-7\:/drawable-hdpi/widget_2x_blue.png=E\:\\andriodProj\\my_note\\gitProject\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_widget_2x_blue.png.flat
net.micode.notes.app-main-7\:/drawable-hdpi/font_size_selector_bg.9.png=E\:\\andriodProj\\my_note\\gitProject\\app\\build\\intermediates\\merged_res\\debug\\drawable-hdpi_font_size_selector_bg.9.png.flat
diff --git a/app/build/intermediates/incremental/debug/mergeDebugResources/merger.xml b/app/build/intermediates/incremental/debug/mergeDebugResources/merger.xml
index b82bfd6..09fe803 100644
--- a/app/build/intermediates/incremental/debug/mergeDebugResources/merger.xml
+++ b/app/build/intermediates/incremental/debug/mergeDebugResources/merger.xml
@@ -1,5 +1,5 @@
-
+
- -%s
- --%s
- --%s
@@ -56,4 +56,4 @@
- 郵件
便簽便簽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/app/build/intermediates/incremental/packageDebug/tmp/debug/dex-renamer-state.txt b/app/build/intermediates/incremental/packageDebug/tmp/debug/dex-renamer-state.txt
index a1adef5..92ff4a7 100644
--- a/app/build/intermediates/incremental/packageDebug/tmp/debug/dex-renamer-state.txt
+++ b/app/build/intermediates/incremental/packageDebug/tmp/debug/dex-renamer-state.txt
@@ -1,4 +1,4 @@
-#Sun May 14 19:26:17 CST 2023
+#Wed May 17 00:34:06 CST 2023
base.0=E\:\\andriodProj\\my_note\\gitProject\\app\\build\\intermediates\\dex\\debug\\mergeDexDebug\\classes.dex
renamed.0=classes.dex
path.0=classes.dex
diff --git a/app/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/androidResources b/app/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/androidResources
index 5af8082..dbc2726 100644
Binary files a/app/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/androidResources and b/app/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/androidResources differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/data/Auth.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/data/Auth.class
new file mode 100644
index 0000000..6881758
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/micode/notes/data/Auth.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/data/Notes$CallNote.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/data/Notes$CallNote.class
index 42394b7..9f4d27e 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/data/Notes$CallNote.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/data/Notes$CallNote.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/data/Notes$TextNote.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/data/Notes$TextNote.class
index 42461a2..03f890d 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/data/Notes$TextNote.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/data/Notes$TextNote.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/data/NotesDatabaseHelper.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/data/NotesDatabaseHelper.class
index 0b075b4..d730f42 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/data/NotesDatabaseHelper.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/data/NotesDatabaseHelper.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/data/NotesProvider.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/data/NotesProvider.class
index fa83900..a253a32 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/data/NotesProvider.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/data/NotesProvider.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/model/Note$NoteData.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/model/Note$NoteData.class
index a4cd77b..3dd08f3 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/model/Note$NoteData.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/model/Note$NoteData.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/model/Note.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/model/Note.class
index aea75a9..8e9a3b0 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/model/Note.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/model/Note.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/model/WorkingNote.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/model/WorkingNote.class
index f0ca538..5efec16 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/model/WorkingNote.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/model/WorkingNote.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/service/BackupBoundService$LocalBinder.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/service/BackupBoundService$LocalBinder.class
new file mode 100644
index 0000000..31612db
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/micode/notes/service/BackupBoundService$LocalBinder.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/service/BackupBoundService.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/service/BackupBoundService.class
new file mode 100644
index 0000000..242e7cd
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/micode/notes/service/BackupBoundService.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/BackupUtils$TextExport.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/BackupUtils$TextExport.class
index d16e5d2..14a79e2 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/BackupUtils$TextExport.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/BackupUtils$TextExport.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/BackupUtils.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/BackupUtils.class
index 65b8536..07b112a 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/BackupUtils.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/BackupUtils.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/SyncNoteUtils$1.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/SyncNoteUtils$1.class
new file mode 100644
index 0000000..937860c
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/SyncNoteUtils$1.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/SyncNoteUtils$SyncNoteItemData.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/SyncNoteUtils$SyncNoteItemData.class
new file mode 100644
index 0000000..1e4d2fc
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/SyncNoteUtils$SyncNoteItemData.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/SyncNoteUtils.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/SyncNoteUtils.class
new file mode 100644
index 0000000..4ef912d
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/SyncNoteUtils.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/BackListAdapter.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/BackListAdapter.class
new file mode 100644
index 0000000..733ddcb
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/BackListAdapter.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity$1.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity$1.class
index f7afcae..06b3b77 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity$1.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity$1.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity$2.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity$2.class
index 24c7362..e5478ac 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity$2.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity$2.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity$3.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity$3.class
index 5296687..5f43a14 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity$3.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity$3.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity.class
index 1e7f3d9..cfa71dd 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteEditActivity.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteItemData.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteItemData.class
index 771aa91..fb7cec8 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteItemData.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteItemData.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteLoginActivity$1.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteLoginActivity$1.class
index e3e528c..69cd83b 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteLoginActivity$1.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteLoginActivity$1.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteLoginActivity$2$1.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteLoginActivity$2$1.class
deleted file mode 100644
index fdb0481..0000000
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteLoginActivity$2$1.class and /dev/null differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteLoginActivity$2.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteLoginActivity$2.class
index 819a802..6400c49 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteLoginActivity$2.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteLoginActivity$2.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteLoginActivity$3$1.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteLoginActivity$3$1.class
index ae6b129..889832d 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteLoginActivity$3$1.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteLoginActivity$3$1.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteLoginActivity$3.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteLoginActivity$3.class
index 7b1acab..1d5bcf9 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteLoginActivity$3.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteLoginActivity$3.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteLoginActivity$4$1.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteLoginActivity$4$1.class
new file mode 100644
index 0000000..cc46ab6
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteLoginActivity$4$1.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteLoginActivity$4.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteLoginActivity$4.class
new file mode 100644
index 0000000..3a0e299
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteLoginActivity$4.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteLoginActivity.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteLoginActivity.class
index 3544129..170c667 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteLoginActivity.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteLoginActivity.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteMenuButton$1.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteMenuButton$1.class
index 92ea632..1f3035d 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteMenuButton$1.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteMenuButton$1.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteMenuButton$2.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteMenuButton$2.class
index 0bf36ff..7a9c156 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteMenuButton$2.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteMenuButton$2.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteMenuButton$3.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteMenuButton$3.class
index 8ccc4ca..f8cc4f8 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteMenuButton$3.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteMenuButton$3.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteMenuButton$4.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteMenuButton$4.class
deleted file mode 100644
index 14e8975..0000000
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteMenuButton$4.class and /dev/null differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteMenuButton$5.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteMenuButton$5.class
deleted file mode 100644
index 18e781c..0000000
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteMenuButton$5.class and /dev/null differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteMenuButton.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteMenuButton.class
index 1aa037a..a773ab5 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteMenuButton.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteMenuButton.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteMenuListFragment.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteMenuListFragment.class
new file mode 100644
index 0000000..8227800
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteMenuListFragment.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteMenuMainFragment$NoteMenuBackUpButtonClickListener.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteMenuMainFragment$NoteMenuBackUpButtonClickListener.class
new file mode 100644
index 0000000..e6b6f7b
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteMenuMainFragment$NoteMenuBackUpButtonClickListener.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteMenuMainFragment.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteMenuMainFragment.class
new file mode 100644
index 0000000..fa0071d
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NoteMenuMainFragment.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$1.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$1.class
index e525ca0..f9c2edd 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$1.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$1.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$10.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$10.class
new file mode 100644
index 0000000..27df733
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$10.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$11.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$11.class
new file mode 100644
index 0000000..ba38bdf
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$11.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$2.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$2.class
index 21bf5ab..f6da515 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$2.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$2.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$3.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$3.class
index 39239ba..00cd049 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$3.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$3.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$4.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$4.class
index eadcf38..f7c9c40 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$4.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$4.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$5.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$5.class
index fee6eb5..aadf1b5 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$5.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$5.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$6.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$6.class
index bba0c8d..7994a98 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$6.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$6.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$7.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$7.class
index 0491cb8..06d15fa 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$7.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$7.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$8.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$8.class
index 6adae55..fcac5be 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$8.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$8.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$9.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$9.class
index 2aa1bc0..fe7bdc9 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$9.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$9.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$BackgroundQueryHandler.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$BackgroundQueryHandler.class
index 67191a0..141c321 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$BackgroundQueryHandler.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$BackgroundQueryHandler.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ListEditState.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ListEditState.class
index a40c669..2cabbee 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ListEditState.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ListEditState.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ModeCallback$1.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ModeCallback$1.class
index 6f61a98..b7b80d8 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ModeCallback$1.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ModeCallback$1.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ModeCallback$2.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ModeCallback$2.class
deleted file mode 100644
index fd9c3e5..0000000
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ModeCallback$2.class and /dev/null differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ModeCallback.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ModeCallback.class
index 4b91e3d..f28dfad 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ModeCallback.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$ModeCallback.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$NewNoteOnTouchListener.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$NewNoteOnTouchListener.class
index 7133039..b1e9bcb 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$NewNoteOnTouchListener.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$NewNoteOnTouchListener.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$OnListItemClickListener.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$OnListItemClickListener.class
index e33f911..0742a9f 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$OnListItemClickListener.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity$OnListItemClickListener.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity.class
index 41fa36e..cd0cd23 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListActivity.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListAdapter$AppWidgetAttribute.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListAdapter$AppWidgetAttribute.class
index 2bdb58b..cec626c 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListAdapter$AppWidgetAttribute.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListAdapter$AppWidgetAttribute.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListAdapter.class b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListAdapter.class
index 5e432e9..81eb8ee 100644
Binary files a/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListAdapter.class and b/app/build/intermediates/javac/debug/classes/net/micode/notes/ui/NotesListAdapter.class differ
diff --git a/app/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt b/app/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt
index 522040e..3dad464 100644
--- a/app/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt
+++ b/app/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt
@@ -58,7 +58,7 @@
35-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:28:22-64
36
37 E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:37:5-163:19
+37-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:37:5-169:19
38 android:debuggable="true"
39 android:icon="@drawable/icon_app"
39-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:38:9-42
@@ -68,7 +68,7 @@
41-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:40:9-69
42 android:testOnly="true" >
43 E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:42:9-57:20
+43-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:42:9-54:20
44 android:name="net.micode.notes.ui.NotesListActivity"
44-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:43:13-49
45 android:configChanges="keyboardHidden|orientation|screenSize"
@@ -83,207 +83,214 @@
49-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:48:13-57
50 android:windowSoftInputMode="adjustPan" >
50-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:49:13-52
-51
-51-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:53:13-56:29
-52
-52-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:54:17-69
-52-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:54:25-66
-53
-54
-54-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:55:17-77
-54-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:55:27-74
-55
-56
-57 E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:59:9-88:20
-58 android:name="net.micode.notes.ui.NoteEditActivity"
-58-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:60:13-48
-59 android:configChanges="keyboardHidden|orientation|screenSize"
-59-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:61:13-74
-60 android:launchMode="singleTop"
-60-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:62:13-43
-61 android:theme="@style/NoteTheme" >
-61-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:63:13-45
-62
-62-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:65:13-71:29
-62-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:65:28-49
-63
-63-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:67:17-69
-63-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:67:25-66
-64
-65
-65-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:68:17-76
-65-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:68:27-73
-66
-67
-67-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:69:17-78
-67-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:69:23-75
-68
-68-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:69:17-78
-68-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:69:23-75
-69
-70
-70-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:73:13-78:29
-71
-71-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:74:17-79
-71-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:74:25-76
-72
-73
-73-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:68:17-76
-73-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:68:27-73
-74
-75
-75-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:69:17-78
-75-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:69:23-75
-76
-76-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:69:17-78
-76-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:69:23-75
+51
+52 E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:56:9-85:20
+53 android:name="net.micode.notes.ui.NoteEditActivity"
+53-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:57:13-48
+54 android:configChanges="keyboardHidden|orientation|screenSize"
+54-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:58:13-74
+55 android:launchMode="singleTop"
+55-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:59:13-43
+56 android:theme="@style/NoteTheme" >
+56-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:60:13-45
+57
+57-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:62:13-68:29
+57-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:62:28-49
+58
+58-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:64:17-69
+58-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:64:25-66
+59
+60
+60-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:65:17-76
+60-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:65:27-73
+61
+62
+62-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:66:17-78
+62-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:66:23-75
+63
+63-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:66:17-78
+63-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:66:23-75
+64
+65
+65-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:70:13-75:29
+66
+66-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:71:17-79
+66-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:71:25-76
+67
+68
+68-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:65:17-76
+68-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:65:27-73
+69
+70
+70-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:66:17-78
+70-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:66:23-75
+71
+71-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:66:17-78
+71-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:66:23-75
+72
+73
+73-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:77:13-80:29
+74
+74-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:78:17-71
+74-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:78:25-68
+75
+76
+76-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:65:17-76
+76-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:65:27-73
77
-78
-78-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:80:13-83:29
-79
-79-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:81:17-71
-79-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:81:25-68
-80
-81
-81-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:68:17-76
-81-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:68:27-73
-82
-83
-84 E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:85:13-87:54
-85 android:name="android.app.searchable"
-85-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:86:17-54
-86 android:resource="@xml/searchable" />
-86-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:87:17-51
-87
-88 E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:90:9-95:20
-89 android:name="net.micode.notes.ui.AlarmAlertActivity"
-89-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:91:17-54
-90 android:label="@string/app_name"
-90-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:92:17-49
-91 android:launchMode="singleInstance"
-91-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:93:17-52
-92 android:theme="@android:style/Theme.Holo.Wallpaper.NoTitleBar" >
-92-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:94:17-79
-93
-94 E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:97:9-102:20
-95 android:name="net.micode.notes.ui.NotesPreferenceActivity"
-95-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:98:17-75
-96 android:label="@string/preferences_title"
-96-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:99:17-58
-97 android:launchMode="singleTop"
-97-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:100:17-47
-98 android:theme="@android:style/Theme.Holo.Light" >
-98-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:101:17-64
-99
-100 E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:104:9-109:20
-101 android:name="net.micode.notes.ui.NoteLoginActivity"
-101-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:104:19-55
-102 android:label="@string/login_title"
-102-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:105:13-48
-103 android:launchMode="singleTop"
-103-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:106:13-43
-104 android:theme="@style/NoteTheme" >
-104-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:107:13-45
+78
+79 E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:82:13-84:54
+80 android:name="android.app.searchable"
+80-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:83:17-54
+81 android:resource="@xml/searchable" />
+81-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:84:17-51
+82
+83 E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:87:9-92:20
+84 android:name="net.micode.notes.ui.AlarmAlertActivity"
+84-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:88:17-54
+85 android:label="@string/app_name"
+85-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:89:17-49
+86 android:launchMode="singleInstance"
+86-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:90:17-52
+87 android:theme="@android:style/Theme.Holo.Wallpaper.NoTitleBar" >
+87-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:91:17-79
+88
+89 E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:94:9-99:20
+90 android:name="net.micode.notes.ui.NotesPreferenceActivity"
+90-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:95:17-75
+91 android:label="@string/preferences_title"
+91-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:96:17-58
+92 android:launchMode="singleTop"
+92-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:97:17-47
+93 android:theme="@android:style/Theme.Holo.Light" >
+93-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:98:17-64
+94
+95 E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:101:9-110:20
+96 android:name="net.micode.notes.ui.NoteLoginActivity"
+96-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:101:19-55
+97 android:label="@string/login_title"
+97-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:102:13-48
+98 android:launchMode="singleTop"
+98-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:103:13-43
+99 android:theme="@style/NoteTheme" >
+99-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:104:13-45
+100
+100-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:106:13-109:29
+101
+101-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:107:17-69
+101-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:107:25-66
+102
+103
+103-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:108:17-77
+103-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:108:27-74
+104
105
106
107 E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:111:9-114:43
+107-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:112:9-115:43
108 android:name="net.micode.notes.data.NotesProvider"
-108-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:112:13-63
+108-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:113:13-63
109 android:authorities="micode_notes"
-109-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:113:13-47
+109-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:114:13-47
110 android:multiprocess="true" />
-110-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:114:13-40
+110-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:115:13-40
111
112 E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:116:9-128:20
+112-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:117:9-129:20
113 android:name="net.micode.notes.widget.NoteWidgetProvider_2x"
-113-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:117:13-57
+113-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:118:13-57
114 android:label="@string/app_widget2x2" >
-114-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:118:13-50
+114-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:119:13-50
115
-115-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:119:13-123:29
+115-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:120:13-124:29
116
-116-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:120:17-84
-116-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:120:25-81
+116-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:121:17-84
+116-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:121:25-81
117
-117-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:121:17-85
-117-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:121:25-82
+117-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:122:17-85
+117-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:122:25-82
118
-118-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:122:17-85
-118-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:122:25-82
+118-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:123:17-85
+118-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:123:25-82
119
120
121 E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:125:13-127:58
+121-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:126:13-128:58
122 android:name="android.appwidget.provider"
-122-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:126:17-58
+122-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:127:17-58
123 android:resource="@xml/widget_2x_info" />
-123-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:127:17-55
+123-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:128:17-55
124
125 E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:129:9-142:20
+125-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:130:9-143:20
126 android:name="net.micode.notes.widget.NoteWidgetProvider_4x"
-126-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:130:13-57
+126-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:131:13-57
127 android:label="@string/app_widget4x4" >
-127-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:131:13-50
+127-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:132:13-50
128
-128-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:119:13-123:29
+128-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:120:13-124:29
129
-129-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:120:17-84
-129-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:120:25-81
+129-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:121:17-84
+129-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:121:25-81
130
-130-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:121:17-85
-130-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:121:25-82
+130-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:122:17-85
+130-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:122:25-82
131
-131-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:122:17-85
-131-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:122:25-82
+131-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:123:17-85
+131-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:123:25-82
132
133
134 E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:125:13-127:58
+134-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:126:13-128:58
135 android:name="android.appwidget.provider"
-135-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:126:17-58
+135-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:127:17-58
136 android:resource="@xml/widget_4x_info" />
-136-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:127:17-55
+136-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:128:17-55
137
138
-138-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:144:9-148:20
-138-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:144:19-55
+138-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:145:9-149:20
+138-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:145:19-55
139
-139-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:145:13-147:29
+139-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:146:13-148:29
140
-140-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:146:17-79
-140-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:146:25-76
+140-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:147:17-79
+140-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:147:25-76
141
142
143 E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:150:9-153:20
+143-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:151:9-154:20
144 android:name="net.micode.notes.ui.AlarmReceiver"
-144-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:151:13-61
+144-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:152:13-61
145 android:process=":remote" >
-145-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:152:13-38
+145-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:153:13-38
146
147
148 E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:155:9-158:19
+148-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:156:9-159:19
149 android:name="net.micode.notes.gtask.remote.GTaskSyncService"
-149-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:156:13-74
+149-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:157:13-74
150 android:exported="false" >
-150-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:157:13-37
+150-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:158:13-37
151
-152
-153 E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:160:9-162:52
-154 android:name="android.app.default_searchable"
-154-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:161:13-58
-155 android:value=".ui.NoteEditActivity" />
-155-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:162:13-49
-156
-157
-158
+152 E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:161:9-164:19
+153 android:name="net.micode.notes.service.BackupBoundService"
+153-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:161:18-60
+154 android:exported="false" >
+154-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:162:13-37
+155
+156
+157 E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:166:9-168:52
+158 android:name="android.app.default_searchable"
+158-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:167:13-58
+159 android:value=".ui.NoteEditActivity" />
+159-->E:\andriodProj\my_note\gitProject\app\src\main\AndroidManifest.xml:168:13-49
+160
+161
+162
diff --git a/app/build/intermediates/merged_manifest/debug/AndroidManifest.xml b/app/build/intermediates/merged_manifest/debug/AndroidManifest.xml
index 2b5edce..5a0ac8b 100644
--- a/app/build/intermediates/merged_manifest/debug/AndroidManifest.xml
+++ b/app/build/intermediates/merged_manifest/debug/AndroidManifest.xml
@@ -48,11 +48,6 @@
android:theme="@style/NoteTheme"
android:uiOptions="splitActionBarWhenNarrow"
android:windowSoftInputMode="adjustPan" >
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/net/micode/notes/data/Auth.java b/app/src/main/java/net/micode/notes/data/Auth.java
new file mode 100644
index 0000000..017d7a2
--- /dev/null
+++ b/app/src/main/java/net/micode/notes/data/Auth.java
@@ -0,0 +1,70 @@
+package net.micode.notes.data;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.database.Cursor;
+import android.net.Uri;
+import android.util.Log;
+import android.webkit.HttpAuthHandler;
+import net.micode.notes.callback.NoteCallback;
+import net.micode.notes.tool.NoteHttpServer;
+import net.micode.notes.tool.NoteRemoteConfig;
+import okhttp3.Call;
+import okhttp3.Callback;
+import okhttp3.HttpUrl;
+import okhttp3.Response;
+import org.jetbrains.annotations.NotNull;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.io.IOException;
+import java.util.logging.Handler;
+
+public class Auth {
+
+
+ //tag
+ private static final String TAG = "chenqy";
+ public static final String AUTHORITY = "micode_notes";
+ public static final Uri CONTENT_NOTE_URI = Uri.parse("content://" + AUTHORITY + "/auth");
+ public static final String END_POINT = "/auth/verifyauthtoken";
+ public static final String AUTH_TOKEN_KEY = "auth_token";
+ public static final String AUTH_PHONE_KEY = "auth_phone";
+ public static final String AUTH_SHARED_NAME ="auth";
+ private static NoteHttpServer server;
+
+ public static void syncToken(Context context,String token_key,String auth_token){
+ SharedPreferences sharedPreferences = context.getSharedPreferences(AUTH_SHARED_NAME, Context.MODE_PRIVATE);
+ SharedPreferences.Editor editor = sharedPreferences.edit();
+ editor.putString(token_key, auth_token);
+ editor.apply();
+ }
+
+ public static void removeToken(Context context,String token_key){
+ SharedPreferences sp = context.getSharedPreferences(AUTH_SHARED_NAME,Context.MODE_PRIVATE);
+ SharedPreferences.Editor editor = sp.edit();
+ editor.remove(token_key);
+ }
+
+ public static String getAuthToken(Context context){
+ SharedPreferences sharedPreferences = context.getSharedPreferences(AUTH_SHARED_NAME, Context.MODE_PRIVATE);
+ return sharedPreferences.getString(AUTH_TOKEN_KEY, null);
+ }
+
+ public static void checkAuthToken(Context context, Callback callback) throws IOException, JSONException {
+ String auth_token = getAuthToken(context);
+ JSONObject jsonObject = new JSONObject();
+ jsonObject.put("token", auth_token);
+ HttpUrl url = HttpUrl.parse(NoteRemoteConfig.generateUrl(END_POINT));
+ getServerInstance().sendAsyncPostRequest(url, jsonObject.toString(), NoteHttpServer.BodyType.FORM_DATA, callback);
+ }
+
+ public static NoteHttpServer getServerInstance(){
+ if (server == null) {
+ server = new NoteHttpServer();
+ }
+ return server;
+ }
+
+}
diff --git a/app/src/main/java/net/micode/notes/data/Notes.java b/app/src/main/java/net/micode/notes/data/Notes.java
index f240604..05a9072 100644
--- a/app/src/main/java/net/micode/notes/data/Notes.java
+++ b/app/src/main/java/net/micode/notes/data/Notes.java
@@ -239,6 +239,7 @@ public class Notes {
* Type: TEXT
*/
public static final String DATA5 = "data5";
+
}
public static final class TextNote implements DataColumns {
diff --git a/app/src/main/java/net/micode/notes/data/NotesDatabaseHelper.java b/app/src/main/java/net/micode/notes/data/NotesDatabaseHelper.java
index ffe5d57..466837a 100644
--- a/app/src/main/java/net/micode/notes/data/NotesDatabaseHelper.java
+++ b/app/src/main/java/net/micode/notes/data/NotesDatabaseHelper.java
@@ -43,168 +43,176 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper {
private static NotesDatabaseHelper mInstance;
private static final String CREATE_NOTE_TABLE_SQL =
- "CREATE TABLE " + TABLE.NOTE + "(" +
- NoteColumns.ID + " INTEGER PRIMARY KEY," +
- NoteColumns.PARENT_ID + " INTEGER NOT NULL DEFAULT 0," +
- NoteColumns.ALERTED_DATE + " INTEGER NOT NULL DEFAULT 0," +
- NoteColumns.BG_COLOR_ID + " INTEGER NOT NULL DEFAULT 0," +
- NoteColumns.CREATED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," +
- NoteColumns.HAS_ATTACHMENT + " INTEGER NOT NULL DEFAULT 0," +
- NoteColumns.MODIFIED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," +
- NoteColumns.NOTES_COUNT + " INTEGER NOT NULL DEFAULT 0," +
- NoteColumns.SNIPPET + " TEXT NOT NULL DEFAULT ''," +
- NoteColumns.TYPE + " INTEGER NOT NULL DEFAULT 0," +
- NoteColumns.WIDGET_ID + " INTEGER NOT NULL DEFAULT 0," +
- NoteColumns.WIDGET_TYPE + " INTEGER NOT NULL DEFAULT -1," +
- NoteColumns.SYNC_ID + " INTEGER NOT NULL DEFAULT 0," +
- NoteColumns.LOCAL_MODIFIED + " INTEGER NOT NULL DEFAULT 0," +
- NoteColumns.ORIGIN_PARENT_ID + " INTEGER NOT NULL DEFAULT 0," +
- NoteColumns.GTASK_ID + " TEXT NOT NULL DEFAULT ''," +
- NoteColumns.VERSION + " INTEGER NOT NULL DEFAULT 0" +
- ")";
+ "CREATE TABLE " + TABLE.NOTE + "(" +
+ NoteColumns.ID + " INTEGER PRIMARY KEY," +
+ NoteColumns.PARENT_ID + " INTEGER NOT NULL DEFAULT 0," +
+ NoteColumns.ALERTED_DATE + " INTEGER NOT NULL DEFAULT 0," +
+ NoteColumns.BG_COLOR_ID + " INTEGER NOT NULL DEFAULT 0," +
+ NoteColumns.CREATED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," +
+ NoteColumns.HAS_ATTACHMENT + " INTEGER NOT NULL DEFAULT 0," +
+ NoteColumns.MODIFIED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," +
+ NoteColumns.NOTES_COUNT + " INTEGER NOT NULL DEFAULT 0," +
+ NoteColumns.SNIPPET + " TEXT NOT NULL DEFAULT ''," +
+ NoteColumns.TYPE + " INTEGER NOT NULL DEFAULT 0," +
+ NoteColumns.WIDGET_ID + " INTEGER NOT NULL DEFAULT 0," +
+ NoteColumns.WIDGET_TYPE + " INTEGER NOT NULL DEFAULT -1," +
+ NoteColumns.SYNC_ID + " INTEGER NOT NULL DEFAULT 0," +
+ NoteColumns.LOCAL_MODIFIED + " INTEGER NOT NULL DEFAULT 0," +
+ NoteColumns.ORIGIN_PARENT_ID + " INTEGER NOT NULL DEFAULT 0," +
+ NoteColumns.GTASK_ID + " TEXT NOT NULL DEFAULT ''," +
+ NoteColumns.VERSION + " INTEGER NOT NULL DEFAULT 0" +
+ ")";
+
private static final String CREATE_DATA_TABLE_SQL =
- "CREATE TABLE " + TABLE.DATA + "(" +
- DataColumns.ID + " INTEGER PRIMARY KEY," +
- DataColumns.MIME_TYPE + " TEXT NOT NULL," +
- DataColumns.NOTE_ID + " INTEGER NOT NULL DEFAULT 0," +
- NoteColumns.CREATED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," +
- NoteColumns.MODIFIED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," +
- DataColumns.CONTENT + " TEXT NOT NULL DEFAULT ''," +
- DataColumns.DATA1 + " INTEGER," +
- DataColumns.DATA2 + " INTEGER," +
- DataColumns.DATA3 + " TEXT NOT NULL DEFAULT ''," +
- DataColumns.DATA4 + " TEXT NOT NULL DEFAULT ''," +
- DataColumns.DATA5 + " TEXT NOT NULL DEFAULT ''" +
- ")";
+ "CREATE TABLE " + TABLE.DATA + "(" +
+ DataColumns.ID + " INTEGER PRIMARY KEY," +
+ DataColumns.MIME_TYPE + " TEXT NOT NULL," +
+ DataColumns.NOTE_ID + " INTEGER NOT NULL DEFAULT 0," +
+ NoteColumns.CREATED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," +
+ NoteColumns.MODIFIED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," +
+ DataColumns.CONTENT + " TEXT NOT NULL DEFAULT ''," +
+ DataColumns.DATA1 + " INTEGER," + // 此列可能包含电话号码、电子邮件地址等。
+ DataColumns.DATA2 + " INTEGER," + // 此列可能包含电话类型(家庭、工作等)、电子邮件类型等。
+ DataColumns.DATA3 + " TEXT NOT NULL DEFAULT ''," + // 通常情况下,此列的使用与 DATA2 相同。
+ DataColumns.DATA4 + " TEXT NOT NULL DEFAULT ''," + // 保留供将来使用。
+ DataColumns.DATA5 + " TEXT NOT NULL DEFAULT ''" + //保留供将来使用
+ ")";
private static final String CREATE_DATA_NOTE_ID_INDEX_SQL =
- "CREATE INDEX IF NOT EXISTS note_id_index ON " +
- TABLE.DATA + "(" + DataColumns.NOTE_ID + ");";
+ "CREATE INDEX IF NOT EXISTS note_id_index ON " +
+ TABLE.DATA + "(" + DataColumns.NOTE_ID + ");";
/**
* Increase folder's note count when move note to the folder
*/
private static final String NOTE_INCREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER =
- "CREATE TRIGGER increase_folder_count_on_update "+
- " AFTER UPDATE OF " + NoteColumns.PARENT_ID + " ON " + TABLE.NOTE +
- " BEGIN " +
- " UPDATE " + TABLE.NOTE +
- " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + " + 1" +
- " WHERE " + NoteColumns.ID + "=new." + NoteColumns.PARENT_ID + ";" +
- " END";
+ "CREATE TRIGGER increase_folder_count_on_update " +
+ " AFTER UPDATE OF " + NoteColumns.PARENT_ID + " ON " + TABLE.NOTE +
+ " BEGIN " +
+ " UPDATE " + TABLE.NOTE +
+ " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + " + 1" +
+ " WHERE " + NoteColumns.ID + "=new." + NoteColumns.PARENT_ID + ";" +
+ " END";
/**
* Decrease folder's note count when move note from folder
*/
private static final String NOTE_DECREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER =
- "CREATE TRIGGER decrease_folder_count_on_update " +
- " AFTER UPDATE OF " + NoteColumns.PARENT_ID + " ON " + TABLE.NOTE +
- " BEGIN " +
- " UPDATE " + TABLE.NOTE +
- " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + "-1" +
- " WHERE " + NoteColumns.ID + "=old." + NoteColumns.PARENT_ID +
- " AND " + NoteColumns.NOTES_COUNT + ">0" + ";" +
- " END";
+ "CREATE TRIGGER decrease_folder_count_on_update " +
+ " AFTER UPDATE OF " + NoteColumns.PARENT_ID + " ON " + TABLE.NOTE +
+ " BEGIN " +
+ " UPDATE " + TABLE.NOTE +
+ " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + "-1" +
+ " WHERE " + NoteColumns.ID + "=old." + NoteColumns.PARENT_ID +
+ " AND " + NoteColumns.NOTES_COUNT + ">0" + ";" +
+ " END";
/**
* Increase folder's note count when insert new note to the folder
*/
private static final String NOTE_INCREASE_FOLDER_COUNT_ON_INSERT_TRIGGER =
- "CREATE TRIGGER increase_folder_count_on_insert " +
- " AFTER INSERT ON " + TABLE.NOTE +
- " BEGIN " +
- " UPDATE " + TABLE.NOTE +
- " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + " + 1" +
- " WHERE " + NoteColumns.ID + "=new." + NoteColumns.PARENT_ID + ";" +
- " END";
+ "CREATE TRIGGER increase_folder_count_on_insert " +
+ " AFTER INSERT ON " + TABLE.NOTE +
+ " BEGIN " +
+ " UPDATE " + TABLE.NOTE +
+ " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + " + 1" +
+ " WHERE " + NoteColumns.ID + "=new." + NoteColumns.PARENT_ID + ";" +
+ " END";
/**
* Decrease folder's note count when delete note from the folder
+ * 减少文件夹的笔记数,当从文件夹中删除笔记
*/
private static final String NOTE_DECREASE_FOLDER_COUNT_ON_DELETE_TRIGGER =
- "CREATE TRIGGER decrease_folder_count_on_delete " +
- " AFTER DELETE ON " + TABLE.NOTE +
- " BEGIN " +
- " UPDATE " + TABLE.NOTE +
- " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + "-1" +
- " WHERE " + NoteColumns.ID + "=old." + NoteColumns.PARENT_ID +
- " AND " + NoteColumns.NOTES_COUNT + ">0;" +
- " END";
+ "CREATE TRIGGER decrease_folder_count_on_delete " +
+ " AFTER DELETE ON " + TABLE.NOTE +
+ " BEGIN " +
+ " UPDATE " + TABLE.NOTE +
+ " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + "-1" +
+ " WHERE " + NoteColumns.ID + "=old." + NoteColumns.PARENT_ID +
+ " AND " + NoteColumns.NOTES_COUNT + ">0;" +
+ " END";
/**
* Update note's content when insert data with type {@link DataConstants#NOTE}
+ * 更新笔记的内容,当插入数据类型为{@link DataConstants#NOTE}
*/
private static final String DATA_UPDATE_NOTE_CONTENT_ON_INSERT_TRIGGER =
- "CREATE TRIGGER update_note_content_on_insert " +
- " AFTER INSERT ON " + TABLE.DATA +
- " WHEN new." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" +
- " BEGIN" +
- " UPDATE " + TABLE.NOTE +
- " SET " + NoteColumns.SNIPPET + "=new." + DataColumns.CONTENT +
- " WHERE " + NoteColumns.ID + "=new." + DataColumns.NOTE_ID + ";" +
- " END";
+ "CREATE TRIGGER update_note_content_on_insert " +
+ " AFTER INSERT ON " + TABLE.DATA +
+ " WHEN new." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" +
+ " BEGIN" +
+ " UPDATE " + TABLE.NOTE +
+ " SET " + NoteColumns.SNIPPET + "=new." + DataColumns.CONTENT +
+ " WHERE " + NoteColumns.ID + "=new." + DataColumns.NOTE_ID + ";" +
+ " END";
/**
* Update note's content when data with {@link DataConstants#NOTE} type has changed
+ * 更新笔记的内容,当数据类型为{@link DataConstants#NOTE}已经改变
*/
private static final String DATA_UPDATE_NOTE_CONTENT_ON_UPDATE_TRIGGER =
- "CREATE TRIGGER update_note_content_on_update " +
- " AFTER UPDATE ON " + TABLE.DATA +
- " WHEN old." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" +
- " BEGIN" +
- " UPDATE " + TABLE.NOTE +
- " SET " + NoteColumns.SNIPPET + "=new." + DataColumns.CONTENT +
- " WHERE " + NoteColumns.ID + "=new." + DataColumns.NOTE_ID + ";" +
- " END";
+ "CREATE TRIGGER update_note_content_on_update " +
+ " AFTER UPDATE ON " + TABLE.DATA +
+ " WHEN old." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" +
+ " BEGIN" +
+ " UPDATE " + TABLE.NOTE +
+ " SET " + NoteColumns.SNIPPET + "=new." + DataColumns.CONTENT +
+ " WHERE " + NoteColumns.ID + "=new." + DataColumns.NOTE_ID + ";" +
+ " END";
/**
* Update note's content when data with {@link DataConstants#NOTE} type has deleted
+ * 更新笔记的内容,当数据类型为{@link DataConstants#NOTE}已删除
*/
private static final String DATA_UPDATE_NOTE_CONTENT_ON_DELETE_TRIGGER =
- "CREATE TRIGGER update_note_content_on_delete " +
- " AFTER delete ON " + TABLE.DATA +
- " WHEN old." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" +
- " BEGIN" +
- " UPDATE " + TABLE.NOTE +
- " SET " + NoteColumns.SNIPPET + "=''" +
- " WHERE " + NoteColumns.ID + "=old." + DataColumns.NOTE_ID + ";" +
- " END";
+ "CREATE TRIGGER update_note_content_on_delete " +
+ " AFTER delete ON " + TABLE.DATA +
+ " WHEN old." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" +
+ " BEGIN" +
+ " UPDATE " + TABLE.NOTE +
+ " SET " + NoteColumns.SNIPPET + "=''" +
+ " WHERE " + NoteColumns.ID + "=old." + DataColumns.NOTE_ID + ";" +
+ " END";
/**
* Delete datas belong to note which has been deleted
+ * 删除 data 属于笔记已被删除
*/
private static final String NOTE_DELETE_DATA_ON_DELETE_TRIGGER =
- "CREATE TRIGGER delete_data_on_delete " +
- " AFTER DELETE ON " + TABLE.NOTE +
- " BEGIN" +
- " DELETE FROM " + TABLE.DATA +
- " WHERE " + DataColumns.NOTE_ID + "=old." + NoteColumns.ID + ";" +
- " END";
+ "CREATE TRIGGER delete_data_on_delete " +
+ " AFTER DELETE ON " + TABLE.NOTE +
+ " BEGIN" +
+ " DELETE FROM " + TABLE.DATA +
+ " WHERE " + DataColumns.NOTE_ID + "=old." + NoteColumns.ID + ";" +
+ " END";
/**
* Delete notes belong to folder which has been deleted
+ * 删除 note 属于文件夹已被删除
*/
private static final String FOLDER_DELETE_NOTES_ON_DELETE_TRIGGER =
- "CREATE TRIGGER folder_delete_notes_on_delete " +
- " AFTER DELETE ON " + TABLE.NOTE +
- " BEGIN" +
- " DELETE FROM " + TABLE.NOTE +
- " WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" +
- " END";
+ "CREATE TRIGGER folder_delete_notes_on_delete " +
+ " AFTER DELETE ON " + TABLE.NOTE +
+ " BEGIN" +
+ " DELETE FROM " + TABLE.NOTE +
+ " WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" +
+ " END";
/**
* Move notes belong to folder which has been moved to trash folder
+ * 移动笔记属于文件夹已被移动到垃圾箱文件夹
*/
private static final String FOLDER_MOVE_NOTES_ON_TRASH_TRIGGER =
- "CREATE TRIGGER folder_move_notes_on_trash " +
- " AFTER UPDATE ON " + TABLE.NOTE +
- " WHEN new." + NoteColumns.PARENT_ID + "=" + Notes.ID_TRASH_FOLER +
- " BEGIN" +
- " UPDATE " + TABLE.NOTE +
- " SET " + NoteColumns.PARENT_ID + "=" + Notes.ID_TRASH_FOLER +
- " WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" +
- " END";
+ "CREATE TRIGGER folder_move_notes_on_trash " +
+ " AFTER UPDATE ON " + TABLE.NOTE +
+ " WHEN new." + NoteColumns.PARENT_ID + "=" + Notes.ID_TRASH_FOLER +
+ " BEGIN" +
+ " UPDATE " + TABLE.NOTE +
+ " SET " + NoteColumns.PARENT_ID + "=" + Notes.ID_TRASH_FOLER +
+ " WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" +
+ " END";
public NotesDatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
@@ -240,6 +248,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper {
/**
* call record foler for call notes
+ * 通话记录文件夹的通话记录
*/
values.put(NoteColumns.ID, Notes.ID_CALL_RECORD_FOLDER);
values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM);
@@ -247,6 +256,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper {
/**
* root folder which is default folder
+ * 根文件夹是默认文件夹
*/
values.clear();
values.put(NoteColumns.ID, Notes.ID_ROOT_FOLDER);
@@ -255,6 +265,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper {
/**
* temporary folder which is used for moving note
+ * 临时文件夹,用于移动笔记
*/
values.clear();
values.put(NoteColumns.ID, Notes.ID_TEMPARAY_FOLDER);
@@ -263,6 +274,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper {
/**
* create trash folder
+ * 创建垃圾箱文件夹
*/
values.clear();
values.put(NoteColumns.ID, Notes.ID_TRASH_FOLER);
@@ -271,8 +283,11 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper {
}
public void createDataTable(SQLiteDatabase db) {
+ //创建data表
db.execSQL(CREATE_DATA_TABLE_SQL);
+ //创建触发器
reCreateDataTableTriggers(db);
+ //创建索引
db.execSQL(CREATE_DATA_NOTE_ID_INDEX_SQL);
Log.d(TAG, "data table has been created");
}
diff --git a/app/src/main/java/net/micode/notes/data/NotesProvider.java b/app/src/main/java/net/micode/notes/data/NotesProvider.java
index edb0a60..ea35665 100644
--- a/app/src/main/java/net/micode/notes/data/NotesProvider.java
+++ b/app/src/main/java/net/micode/notes/data/NotesProvider.java
@@ -87,31 +87,42 @@ public class NotesProvider extends ContentProvider {
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
- String sortOrder) {
+ String sortOrder) {
+ // 初始化游标为空
Cursor c = null;
+ // 获取可读的数据库实例
SQLiteDatabase db = mHelper.getReadableDatabase();
+ // 初始化id为null
String id = null;
+ // 根据Uri进行分支处理
switch (mMatcher.match(uri)) {
case URI_NOTE:
+ // 如果Uri匹配到笔记列表,则执行笔记表的查询操作
c = db.query(TABLE.NOTE, projection, selection, selectionArgs, null, null,
sortOrder);
break;
case URI_NOTE_ITEM:
+ // 如果Uri匹配到单个笔记,则获取该笔记的ID
id = uri.getPathSegments().get(1);
+ // 执行笔记表的查询操作,并加入限制条件
c = db.query(TABLE.NOTE, projection, NoteColumns.ID + "=" + id
+ parseSelection(selection), selectionArgs, null, null, sortOrder);
break;
case URI_DATA:
+ // 如果Uri匹配到数据列表,则执行数据表的查询操作
c = db.query(TABLE.DATA, projection, selection, selectionArgs, null, null,
sortOrder);
break;
case URI_DATA_ITEM:
+ // 如果Uri匹配到单个数据,则获取该数据的ID
id = uri.getPathSegments().get(1);
+ // 执行数据表的查询操作,并加入限制条件
c = db.query(TABLE.DATA, projection, DataColumns.ID + "=" + id
+ parseSelection(selection), selectionArgs, null, null, sortOrder);
break;
case URI_SEARCH:
case URI_SEARCH_SUGGEST:
+ // 如果Uri匹配到搜索操作,则进一步判断是普通搜索还是建议搜索
if (sortOrder != null || projection != null) {
throw new IllegalArgumentException(
"do not specify sortOrder, selection, selectionArgs, or projection" + "with this query");
@@ -119,10 +130,12 @@ public class NotesProvider extends ContentProvider {
String searchString = null;
if (mMatcher.match(uri) == URI_SEARCH_SUGGEST) {
+ // 如果是建议搜索,则获取搜索关键词
if (uri.getPathSegments().size() > 1) {
searchString = uri.getPathSegments().get(1);
}
} else {
+ // 如果是普通搜索,则获取查询参数中的搜索关键词
searchString = uri.getQueryParameter("pattern");
}
@@ -131,6 +144,7 @@ public class NotesProvider extends ContentProvider {
}
try {
+ // 格式化搜索关键词,加上通配符,执行笔记表的全文搜索操作
searchString = String.format("%%%s%%", searchString);
c = db.rawQuery(NOTES_SNIPPET_SEARCH_QUERY,
new String[] { searchString });
@@ -139,14 +153,18 @@ public class NotesProvider extends ContentProvider {
}
break;
default:
+ // 如果Uri无法匹配任何情况,则抛出异常
throw new IllegalArgumentException("Unknown URI " + uri);
}
+ // 设置游标的观察者,以便在数据变化时能够及时更新UI
if (c != null) {
c.setNotificationUri(getContext().getContentResolver(), uri);
}
+ // 返回游标
return c;
}
+
@Override
public Uri insert(Uri uri, ContentValues values) {
SQLiteDatabase db = mHelper.getWritableDatabase();
@@ -163,6 +181,7 @@ public class NotesProvider extends ContentProvider {
}
insertedId = dataId = db.insert(TABLE.DATA, null, values);
break;
+
default:
throw new IllegalArgumentException("Unknown URI " + uri);
}
diff --git a/app/src/main/java/net/micode/notes/model/Note.java b/app/src/main/java/net/micode/notes/model/Note.java
index 25eba68..bf90e82 100644
--- a/app/src/main/java/net/micode/notes/model/Note.java
+++ b/app/src/main/java/net/micode/notes/model/Note.java
@@ -15,16 +15,11 @@
*/
package net.micode.notes.model;
-import android.content.ContentProviderOperation;
-import android.content.ContentProviderResult;
-import android.content.ContentUris;
-import android.content.ContentValues;
-import android.content.Context;
-import android.content.OperationApplicationException;
+
+import android.content.*;
import android.net.Uri;
import android.os.RemoteException;
import android.util.Log;
-
import net.micode.notes.data.Notes;
import net.micode.notes.data.Notes.CallNote;
import net.micode.notes.data.Notes.DataColumns;
@@ -211,6 +206,7 @@ public class Note {
return true;
}
+
// 使用ContentResolver对象将mNoteDiffValues中保存的数值更新到NoteColumns.LOCAL_MODIFIED和NoteColumns.MODIFIED_DATE字段上
if (context.getContentResolver().update(
ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), mNoteDiffValues, null,
@@ -236,15 +232,16 @@ public class Note {
private class NoteData {
- private long mTextDataId;
- private ContentValues mTextDataValues;
+ private static final String TAG = "NoteData";
+ private long mTextDataId;
private long mCallDataId;
+
+ private ContentValues mTextDataValues;
private ContentValues mCallDataValues;
- private static final String TAG = "NoteData";
/**
* 构造函数
diff --git a/app/src/main/java/net/micode/notes/model/WorkingNote.java b/app/src/main/java/net/micode/notes/model/WorkingNote.java
index 683df72..392151a 100644
--- a/app/src/main/java/net/micode/notes/model/WorkingNote.java
+++ b/app/src/main/java/net/micode/notes/model/WorkingNote.java
@@ -70,6 +70,7 @@ public class WorkingNote {
DataColumns.DATA2, // 表示数据行的附加数据
DataColumns.DATA3, // 表示数据行的附加数据
DataColumns.DATA4, // 表示数据行的附加数据
+ DataColumns.DATA5, // 表示是否为同步数据
};
public static final String[] NOTE_PROJECTION = new String[] {
NoteColumns.PARENT_ID, // 表示笔记的父笔记 ID
@@ -605,25 +606,28 @@ public class WorkingNote {
public interface NoteSettingChangedListener {
/**
- * Called when the background color of current note has just changed
+ * 当前笔记的背景颜色刚刚更改时调用
*/
void onBackgroundColorChanged();
/**
- * Called when user set clock
+ * 用户设置闹钟时调用
+ * @param date 闹钟日期时间
+ * @param set 是否开启闹钟
*/
void onClockAlertChanged(long date, boolean set);
/**
- * Call when user create note from widget
+ * 从小部件创建笔记时调用
*/
void onWidgetChanged();
/**
- * Call when switch between check list mode and normal mode
- * @param oldMode is previous mode before change
- * @param newMode is new mode
+ * 在勾选列表模式和正常模式之间切换时调用
+ * @param oldMode 切换前的模式
+ * @param newMode 新模式
*/
void onCheckListModeChanged(int oldMode, int newMode);
}
+
}
diff --git a/app/src/main/java/net/micode/notes/service/BackupBoundService.java b/app/src/main/java/net/micode/notes/service/BackupBoundService.java
new file mode 100644
index 0000000..0fb13e3
--- /dev/null
+++ b/app/src/main/java/net/micode/notes/service/BackupBoundService.java
@@ -0,0 +1,33 @@
+package net.micode.notes.service;
+
+import android.app.Service;
+import android.content.Intent;
+import android.os.Binder;
+import android.os.IBinder;
+import android.util.Log;
+
+public class BackupBoundService extends Service {
+
+ //tag
+ private static final String TAG = "chenqy";
+ public static final String SERVICE_NAME = "BackupIntentService";
+ public static final String BACKUP_NOTE_ACTION = "net.micode.notes.BACKUP_NOTE";
+
+ private final IBinder binder = new LocalBinder();
+
+ @Override
+ public IBinder onBind(Intent intent) {
+ return binder;
+ }
+
+ public void backupNotes(String noteData) {
+ Log.e(TAG, "backupNotes: " + noteData);
+ }
+
+
+ public class LocalBinder extends Binder {
+ public BackupBoundService getService() {
+ return BackupBoundService.this;
+ }
+ }
+}
diff --git a/app/src/main/java/net/micode/notes/tool/BackupUtils.java b/app/src/main/java/net/micode/notes/tool/BackupUtils.java
index 9243427..a208362 100644
--- a/app/src/main/java/net/micode/notes/tool/BackupUtils.java
+++ b/app/src/main/java/net/micode/notes/tool/BackupUtils.java
@@ -79,6 +79,9 @@ public class BackupUtils {
mTextExport = new TextExport(context); // 创建 TextExport 实例并保存到成员变量中
}
+
+
+
/**
* 检查外部存储是否可用。
* @return 如果外部存储可用,则返回 true;否则返回 false。
diff --git a/app/src/main/java/net/micode/notes/tool/SyncNoteUtils.java b/app/src/main/java/net/micode/notes/tool/SyncNoteUtils.java
new file mode 100644
index 0000000..96817d4
--- /dev/null
+++ b/app/src/main/java/net/micode/notes/tool/SyncNoteUtils.java
@@ -0,0 +1,68 @@
+package net.micode.notes.tool;
+
+import android.app.Activity;
+import android.content.Context;
+import android.nfc.Tag;
+import android.util.Log;
+import android.widget.Toast;
+import net.micode.notes.callback.NoteCallback;
+import okhttp3.Call;
+import okhttp3.Callback;
+import okhttp3.HttpUrl;
+import okhttp3.Response;
+import org.jetbrains.annotations.NotNull;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.io.IOException;
+
+public class SyncNoteUtils {
+
+ //tag
+ private static final String TAG = "chenqy";
+ private static NoteHttpServer noteHttpServer;
+ public static void SyncNote(Context context, SyncNoteItemData syncNoteItemData) throws JSONException {
+ HttpUrl url = HttpUrl.parse(NoteRemoteConfig.generateUrl("/note/sync"));
+ JSONObject body = new JSONObject();
+ body.put("note_id", syncNoteItemData.note_id);
+ body.put("version", syncNoteItemData.version);
+ body.put("content", syncNoteItemData.content);
+ body.put("note_token", syncNoteItemData.note_token);
+ getServerIns().sendAsyncPostRequest(url, body.toString(), NoteHttpServer.BodyType.JSON, new Callback() {
+ @Override
+ public void onFailure(@NotNull Call call, @NotNull IOException e) {
+ UIUtils.runInUI((Activity) context, () -> Toast.makeText(context, "同步失败", Toast.LENGTH_SHORT).show());
+ }
+
+ @Override
+ public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
+ UIUtils.runInUI((Activity) context, () -> Toast.makeText(context, "同步成功", Toast.LENGTH_SHORT).show());
+ }
+ });
+ }
+
+ private static NoteHttpServer getServerIns(){
+ if(noteHttpServer == null){
+ noteHttpServer = new NoteHttpServer();
+ }
+ return noteHttpServer;
+ }
+
+ public static class SyncNoteItemData{
+ private long note_id;
+ private long version;
+ private String content;
+ private String note_token;
+
+ //cons
+ public SyncNoteItemData(long note_id, long version, String content, String note_token) {
+ this.note_id = note_id;
+ this.version = version;
+ this.content = content;
+ this.note_token = note_token;
+ }
+
+ }
+
+
+}
diff --git a/app/src/main/java/net/micode/notes/ui/BackListAdapter.java b/app/src/main/java/net/micode/notes/ui/BackListAdapter.java
new file mode 100644
index 0000000..ca9b8cc
--- /dev/null
+++ b/app/src/main/java/net/micode/notes/ui/BackListAdapter.java
@@ -0,0 +1,31 @@
+package net.micode.notes.ui;
+
+import android.content.Context;
+import android.database.Cursor;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.CheckBox;
+import android.widget.CursorAdapter;
+import android.widget.TextView;
+import net.micode.notes.R;
+import net.micode.notes.data.Notes;
+
+public class BackListAdapter extends CursorAdapter {
+ public BackListAdapter(Context context,Cursor c) {
+ super(context, c, 0);
+ }
+
+ @Override
+ public View newView(Context context, Cursor cursor, ViewGroup parent) {
+ return LayoutInflater.from(context).inflate(R.layout.note_backup_item, parent, false);
+ }
+
+ @Override
+ public void bindView(View view, Context context, Cursor cursor) {
+ TextView tv = (TextView)view.findViewById(R.id.note_backup_item_tv);
+ tv.setText(cursor.getString(cursor.getColumnIndex(Notes.NoteColumns.SNIPPET)));
+ CheckBox cb = (CheckBox) view.findViewById(R.id.note_backup_item_cb);
+ cb.setSelected(false);
+ }
+}
diff --git a/app/src/main/java/net/micode/notes/ui/NoteEditActivity.java b/app/src/main/java/net/micode/notes/ui/NoteEditActivity.java
index 95a02ff..8c3bef3 100644
--- a/app/src/main/java/net/micode/notes/ui/NoteEditActivity.java
+++ b/app/src/main/java/net/micode/notes/ui/NoteEditActivity.java
@@ -85,6 +85,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
}
private static final Map sBgSelectorBtnsMap = new HashMap();
+
static {
sBgSelectorBtnsMap.put(R.id.iv_bg_yellow, ResourceParser.YELLOW);
sBgSelectorBtnsMap.put(R.id.iv_bg_red, ResourceParser.RED);
@@ -94,6 +95,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
}
private static final Map sBgSelectorSelectionMap = new HashMap();
+
static {
sBgSelectorSelectionMap.put(ResourceParser.YELLOW, R.id.iv_bg_yellow_select);
sBgSelectorSelectionMap.put(ResourceParser.RED, R.id.iv_bg_red_select);
@@ -103,6 +105,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
}
private static final Map sFontSizeBtnsMap = new HashMap();
+
static {
sFontSizeBtnsMap.put(R.id.ll_font_large, ResourceParser.TEXT_LARGE);
sFontSizeBtnsMap.put(R.id.ll_font_small, ResourceParser.TEXT_SMALL);
@@ -111,6 +114,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
}
private static final Map sFontSelectorSelectionMap = new HashMap();
+
static {
sFontSelectorSelectionMap.put(ResourceParser.TEXT_LARGE, R.id.iv_large_select);
sFontSelectorSelectionMap.put(ResourceParser.TEXT_SMALL, R.id.iv_small_select);
@@ -179,31 +183,30 @@ public class NoteEditActivity extends Activity implements OnClickListener,
}
}
+ // 初始化 Activity 状态
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;
+
+ // 如果用户请求查看某个笔记(ACTION_VIEW),则执行以下操作
if (TextUtils.equals(Intent.ACTION_VIEW, intent.getAction())) {
- long noteId = intent.getLongExtra(Intent.EXTRA_UID, 0);
- mUserQuery = "";
+ long noteId = intent.getLongExtra(Intent.EXTRA_UID, 0); // 获取要查看笔记的 ID
+ 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)) {
Intent jump = new Intent(this, NotesListActivity.class);
startActivity(jump);
showToast(R.string.error_note_not_exist);
finish();
return false;
- } else {
+ } else { // 否则加载该笔记
mWorkingNote = WorkingNote.load(this, noteId);
if (mWorkingNote == null) {
Log.e(TAG, "load note failed with note id" + noteId);
@@ -211,11 +214,21 @@ public class NoteEditActivity extends Activity implements OnClickListener,
return false;
}
}
+
+ /**
+ *
+ * 这段代码是用于隐藏软键盘并且调整页面布局的。在 Android 应用开发中,当软键盘弹出时,
+ * 如果不加处理,可能会遮挡住输入框或者其他重要的视图组件。因此,我们可以通过设置 getWindow()
+ * setSoftInputMode() 来控制软键盘的行为。
+ *
+ * */
getWindow().setSoftInputMode(
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
+ }
+ // 如果是新建或编辑笔记的请求(ACTION_INSERT_OR_EDIT)
+ else if (TextUtils.equals(Intent.ACTION_INSERT_OR_EDIT, intent.getAction())) {
+ // 获取额外信息
long folderId = intent.getLongExtra(Notes.INTENT_EXTRA_FOLDER_ID, 0);
int widgetId = intent.getIntExtra(Notes.INTENT_EXTRA_WIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
@@ -224,28 +237,28 @@ public class NoteEditActivity extends Activity implements OnClickListener,
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) {
- if (TextUtils.isEmpty(phoneNumber)) {
+ if (TextUtils.isEmpty(phoneNumber)) { // 如果电话号码为空则打印警告日志
Log.w(TAG, "The call record number is null");
}
long noteId = 0;
if ((noteId = DataUtils.getNoteIdByPhoneNumberAndCallDate(getContentResolver(),
- phoneNumber, callDate)) > 0) {
+ phoneNumber, callDate)) > 0) { // 如果存在该笔记,则加载该笔记
mWorkingNote = WorkingNote.load(this, noteId);
if (mWorkingNote == null) {
Log.e(TAG, "load call note failed with note id" + noteId);
finish();
return false;
}
- } else {
+ } else { // 否则创建一个新的通话记录笔记
mWorkingNote = WorkingNote.createEmptyNote(this, folderId, widgetId,
widgetType, bgResId);
mWorkingNote.convertToCallNote(phoneNumber, callDate);
}
- } else {
+ } else { // 否则创建一个普通笔记
mWorkingNote = WorkingNote.createEmptyNote(this, folderId, widgetId, widgetType,
bgResId);
}
@@ -253,15 +266,22 @@ public class NoteEditActivity extends Activity implements OnClickListener,
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE
| WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
- } else {
+ }
+ // 如果请求不属于上述两种情况,则提示错误并关闭页面
+ else {
Log.e(TAG, "Intent not specified action, should not support");
finish();
return false;
}
+
+ // 设置笔记属性变化的监听器
mWorkingNote.setOnSettingStatusChangedListener(this);
+
+ // 返回 true 表示初始化成功
return true;
}
+
@Override
protected void onResume() {
super.onResume();
@@ -309,7 +329,8 @@ public class NoteEditActivity extends Activity implements OnClickListener,
} else {
mNoteHeaderHolder.tvAlertDate.setVisibility(View.GONE);
mNoteHeaderHolder.ivAlertIcon.setVisibility(View.GONE);
- };
+ }
+ ;
}
@Override
@@ -350,7 +371,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
}
private boolean inRangeOfView(View view, MotionEvent ev) {
- int []location = new int[2];
+ int[] location = new int[2];
view.getLocationOnScreen(location);
int x = location[0];
int y = location[1];
@@ -358,8 +379,8 @@ public class NoteEditActivity extends Activity implements OnClickListener,
|| ev.getX() > (x + view.getWidth())
|| ev.getY() < y
|| ev.getY() > (y + view.getHeight())) {
- return false;
- }
+ return false;
+ }
return true;
}
@@ -383,7 +404,8 @@ public class NoteEditActivity extends Activity implements OnClickListener,
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);
/**
@@ -391,7 +413,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
* The id may larger than the length of resources, in this case,
* return the {@link ResourceParser#BG_DEFAULT_FONT_SIZE}
*/
- if(mFontSizeId >= TextAppearanceResources.getResourcesSize()) {
+ if (mFontSizeId >= TextAppearanceResources.getResourcesSize()) {
mFontSizeId = ResourceParser.BG_DEFAULT_FONT_SIZE;
}
mEditTextList = (LinearLayout) findViewById(R.id.note_edit_list);
@@ -400,7 +422,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
@Override
protected void onPause() {
super.onPause();
- if(saveNote()) {
+ if (saveNote()) {
Log.d(TAG, "Note data was saved with length:" + mWorkingNote.getContent().length());
}
clearSettingState();
@@ -417,8 +439,8 @@ public class NoteEditActivity extends Activity implements OnClickListener,
return;
}
- intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] {
- mWorkingNote.getWidgetId()
+ intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[]{
+ mWorkingNote.getWidgetId()
});
sendBroadcast(intent);
@@ -430,7 +452,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
if (id == R.id.btn_set_bg_color) {
mNoteBgColorSelector.setVisibility(View.VISIBLE);
findViewById(sBgSelectorSelectionMap.get(mWorkingNote.getBgColorId())).setVisibility(
- View.VISIBLE);
+ View.VISIBLE);
} else if (sBgSelectorBtnsMap.containsKey(id)) {
findViewById(sBgSelectorSelectionMap.get(mWorkingNote.getBgColorId())).setVisibility(
View.GONE);
@@ -454,7 +476,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
@Override
public void onBackPressed() {
- if(clearSettingState()) {
+ if (clearSettingState()) {
return;
}
@@ -557,7 +579,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
DateTimePickerDialog d = new DateTimePickerDialog(this, System.currentTimeMillis());
d.setOnDateTimeSetListener(new OnDateTimeSetListener() {
public void OnDateTimeSet(AlertDialog dialog, long date) {
- mWorkingNote.setAlertDate(date , true);
+ mWorkingNote.setAlertDate(date, true);
}
});
d.show();
@@ -626,7 +648,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
AlarmManager alarmManager = ((AlarmManager) getSystemService(ALARM_SERVICE));
showAlertHeader();
- if(!set) {
+ if (!set) {
alarmManager.cancel(pendingIntent);
} else {
alarmManager.set(AlarmManager.RTC_WAKEUP, date, pendingIntent);
@@ -659,7 +681,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
mEditTextList.removeViewAt(index);
NoteEditText edit = null;
- if(index == 0) {
+ if (index == 0) {
edit = (NoteEditText) mEditTextList.getChildAt(0).findViewById(
R.id.et_edit_text);
} else {
@@ -676,7 +698,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
/**
* Should not happen, check for debug
*/
- if(index > mEditTextList.getChildCount()) {
+ if (index > mEditTextList.getChildCount()) {
Log.e(TAG, "Index out of mEditTextList boundrary, should not happen");
}
@@ -696,7 +718,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
String[] items = text.split("\n");
int index = 0;
for (String item : items) {
- if(!TextUtils.isEmpty(item)) {
+ if (!TextUtils.isEmpty(item)) {
mEditTextList.addView(getListItem(item, index));
index++;
}
@@ -761,7 +783,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
Log.e(TAG, "Wrong index, should not happen");
return;
}
- if(hasText) {
+ 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);
diff --git a/app/src/main/java/net/micode/notes/ui/NoteItemData.java b/app/src/main/java/net/micode/notes/ui/NoteItemData.java
index 0f5a878..26d57fb 100644
--- a/app/src/main/java/net/micode/notes/ui/NoteItemData.java
+++ b/app/src/main/java/net/micode/notes/ui/NoteItemData.java
@@ -27,33 +27,33 @@ import net.micode.notes.tool.DataUtils;
public class NoteItemData {
- static final String [] PROJECTION = new String [] {
- NoteColumns.ID,
- NoteColumns.ALERTED_DATE,
- NoteColumns.BG_COLOR_ID,
- NoteColumns.CREATED_DATE,
- NoteColumns.HAS_ATTACHMENT,
- NoteColumns.MODIFIED_DATE,
- NoteColumns.NOTES_COUNT,
- NoteColumns.PARENT_ID,
- NoteColumns.SNIPPET,
- NoteColumns.TYPE,
- NoteColumns.WIDGET_ID,
- NoteColumns.WIDGET_TYPE,
+ static final String[] PROJECTION = new String[]{
+ NoteColumns.ID,
+ NoteColumns.ALERTED_DATE,
+ NoteColumns.BG_COLOR_ID,
+ NoteColumns.CREATED_DATE,
+ NoteColumns.HAS_ATTACHMENT,
+ NoteColumns.MODIFIED_DATE,
+ NoteColumns.NOTES_COUNT,
+ NoteColumns.PARENT_ID,
+ NoteColumns.SNIPPET,
+ NoteColumns.TYPE,
+ NoteColumns.WIDGET_ID,
+ NoteColumns.WIDGET_TYPE,
};
- private static final int ID_COLUMN = 0;
- private static final int ALERTED_DATE_COLUMN = 1;
- private static final int BG_COLOR_ID_COLUMN = 2;
- private static final int CREATED_DATE_COLUMN = 3;
- private static final int HAS_ATTACHMENT_COLUMN = 4;
- private static final int MODIFIED_DATE_COLUMN = 5;
- private static final int NOTES_COUNT_COLUMN = 6;
- private static final int PARENT_ID_COLUMN = 7;
- private static final int SNIPPET_COLUMN = 8;
- private static final int TYPE_COLUMN = 9;
- private static final int WIDGET_ID_COLUMN = 10;
- private static final int WIDGET_TYPE_COLUMN = 11;
+ private static final int ID_COLUMN = 0;
+ private static final int ALERTED_DATE_COLUMN = 1;
+ private static final int BG_COLOR_ID_COLUMN = 2;
+ private static final int CREATED_DATE_COLUMN = 3;
+ private static final int HAS_ATTACHMENT_COLUMN = 4;
+ private static final int MODIFIED_DATE_COLUMN = 5;
+ private static final int NOTES_COUNT_COLUMN = 6;
+ private static final int PARENT_ID_COLUMN = 7;
+ private static final int SNIPPET_COLUMN = 8;
+ private static final int TYPE_COLUMN = 9;
+ private static final int WIDGET_ID_COLUMN = 10;
+ private static final int WIDGET_TYPE_COLUMN = 11;
private long mId;
private long mAlertDate;
@@ -76,7 +76,14 @@ public class NoteItemData {
private boolean mIsOneNoteFollowingFolder;
private boolean mIsMultiNotesFollowingFolder;
+ /**
+ * 从cursor和context构造一个NoteItemData对象
+ *
+ * @param context 应用程序的上下文
+ * @param cursor 包含NoteItemData对象数据的游标
+ */
public NoteItemData(Context context, Cursor cursor) {
+ // 根据游标中的值设置实例变量
mId = cursor.getLong(ID_COLUMN);
mAlertDate = cursor.getLong(ALERTED_DATE_COLUMN);
mBgColorId = cursor.getInt(BG_COLOR_ID_COLUMN);
@@ -92,6 +99,7 @@ public class NoteItemData {
mWidgetId = cursor.getInt(WIDGET_ID_COLUMN);
mWidgetType = cursor.getInt(WIDGET_TYPE_COLUMN);
+ // 如果笔记在通话记录文件夹中,则设置电话号码和名称字段
mPhoneNumber = "";
if (mParentId == Notes.ID_CALL_RECORD_FOLDER) {
mPhoneNumber = DataUtils.getCallNumberByNoteId(context.getContentResolver(), mId);
@@ -103,9 +111,12 @@ public class NoteItemData {
}
}
+ // 如果上面没有设置名称字段,则将其设置为空字符串
if (mName == null) {
mName = "";
}
+
+ // 检查游标的位置
checkPostion(cursor);
}
@@ -190,7 +201,7 @@ public class NoteItemData {
return mNotesCount;
}
- public long getFolderId () {
+ public long getFolderId() {
return mParentId;
}
diff --git a/app/src/main/java/net/micode/notes/ui/NoteLoginActivity.java b/app/src/main/java/net/micode/notes/ui/NoteLoginActivity.java
index 9dfd33c..d7bd28f 100644
--- a/app/src/main/java/net/micode/notes/ui/NoteLoginActivity.java
+++ b/app/src/main/java/net/micode/notes/ui/NoteLoginActivity.java
@@ -2,6 +2,7 @@ package net.micode.notes.ui;
import android.animation.Animator;
import android.app.Activity;
+import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
@@ -15,6 +16,7 @@ import android.widget.RelativeLayout;
import android.widget.Toast;
import net.micode.notes.R;
import net.micode.notes.callback.NoteCallback;
+import net.micode.notes.data.Auth;
import net.micode.notes.tool.NoteHttpServer;
import net.micode.notes.tool.NoteRemoteConfig;
import net.micode.notes.tool.UIUtils;
@@ -37,15 +39,24 @@ public class NoteLoginActivity extends Activity {
private RelativeLayout rlContent;
private Handler handler;
private Animator animator;
- private long lastClickTime = 0;
+ private Context context;
+ private long mExitTime = 0;
private static final String VERIFICATION_CODE_URL = "/verify/verifycode";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+
setContentView(R.layout.note_login);
bindViews();
initResources();
+ try {
+ checkLogin();
+ } catch (JSONException e) {
+ throw new RuntimeException(e);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
}
@@ -57,11 +68,12 @@ public class NoteLoginActivity extends Activity {
rlContent.getBackground().setAlpha(0);
handler = new Handler();
-
}
private void initResources() {
+ context = this;
server = new NoteHttpServer();
+
btn_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -77,6 +89,47 @@ public class NoteLoginActivity extends Activity {
});
}
+ //checkIsLogin
+ private void checkLogin() throws JSONException, IOException {
+ //TODO 通过验证本地存储的token与服务器进行匹配判断是否登陆
+ Auth.checkAuthToken(this, new Callback() {
+ @Override
+ public void onFailure(@NotNull Call call, @NotNull IOException e) {
+ //删除本地token
+ Auth.removeToken(NoteLoginActivity.this,Auth.AUTH_TOKEN_KEY);
+ //删除本地用户信息
+ Auth.removeToken(NoteLoginActivity.this,Auth.AUTH_PHONE_KEY);
+ }
+
+ @Override
+ public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
+ String resStr = response.body().string();
+ JSONObject resJson = null;
+ try {
+ resJson = new JSONObject(resStr);
+ } catch (JSONException e) {
+ Log.e(TAG, "NoteListActivity checkLogin JSONObject转化失败");
+ return;
+ }
+ int code = 0;
+ try {
+ code = resJson.getInt("code");
+ } catch (JSONException e) {
+ Log.e(TAG, "NoteListActivity checkLogin JSONObject 提取code失败");
+ return;
+ }
+
+ if(code != 200){
+ Log.e(TAG, "NoteListActivity checkLogin JSONObject code != 200");
+ }else{
+ //登陆成功
+ goNoteList();
+ }
+ }
+ });
+ }
+
+
private void checkVerifyCode() throws IOException, JSONException {
HttpUrl url = HttpUrl.parse(NoteRemoteConfig.generateUrl(VERIFICATION_CODE_URL));
String phone_num = note_login_phone_num.getText().toString();
@@ -112,6 +165,18 @@ public class NoteLoginActivity extends Activity {
throw new RuntimeException(e);
}
if(code == NoteRemoteConfig.RESPONSE_SUCCESS){
+ String token = null;
+ try {
+ token = responseJson.getString("data");
+ } catch (JSONException e) {
+ throw new RuntimeException(e);
+ }
+
+ //保存token
+ Auth.syncToken(context,Auth.AUTH_TOKEN_KEY,token);
+ //保存验证的手机号
+ Auth.syncToken(context,Auth.AUTH_PHONE_KEY,phone_num);
+
UIUtils.runInUI(NoteLoginActivity.this, () -> {
btn_login.startAnim();
handler.postDelayed(() -> {
@@ -124,21 +189,18 @@ public class NoteLoginActivity extends Activity {
Toast.makeText(getApplicationContext(), "验证码错误", Toast.LENGTH_SHORT).show();
});
}
-
-
}
});
}
private void gotoNew() {
btn_login.gotoNew();
- int xc = (btn_login.getLeft() + btn_login.getRight()) / 2;
- int yc = (btn_login.getTop() + btn_login.getBottom()) / 2;
- float startRadius = 0;
- float endRadus = 1111;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ int xc = (btn_login.getLeft() + btn_login.getRight()) / 2;
+ int yc = (btn_login.getTop() + btn_login.getBottom()) / 2;
animator = ViewAnimationUtils.createCircularReveal(rlContent, xc, yc, 0, 1111);
}
+
animator.setDuration(300);
animator.addListener(new Animator.AnimatorListener() {
@Override
@@ -146,14 +208,14 @@ public class NoteLoginActivity extends Activity {
handler.postDelayed(new Runnable() {
@Override
public void run() {
-// startActivity(intent);
- finish();
+ goNoteList();
overridePendingTransition(R.anim.anim_in, R.anim.anim_out);
}
}, 200);
}
+
@Override
public void onAnimationEnd(Animator animation) {
@@ -173,25 +235,33 @@ public class NoteLoginActivity extends Activity {
rlContent.getBackground().setAlpha(255);
}
+ private void goNoteList(){
+ Intent it = new Intent(NoteLoginActivity.this, NotesListActivity.class);
+ it.setAction(Intent.ACTION_VIEW);
+ startActivity(it);
+ finish();
+ }
+
@Override
protected void onStop() {
super.onStop();
- animator.cancel();
+ if(animator != null)animator.cancel();
rlContent.getBackground().setAlpha(0);
btn_login.regainBackground();
}
-// @Override
-// public void onBackPressed() {
-// if(System.currentTimeMillis() - lastClickTime < 2000){
-// finish();
-// }else{
-// lastClickTime = System.currentTimeMillis();
-// Toast.makeText(this, "再按一次退出", Toast.LENGTH_SHORT).show();
-// }
-//
-// super.onBackPressed();
-// }
+ @Override
+ public void onBackPressed() {
+ if (System.currentTimeMillis() - mExitTime > 2000) {
+ Toast.makeText(this, R.string.press_again_exit, Toast.LENGTH_SHORT).show();
+ mExitTime = System.currentTimeMillis();
+ return;
+ } else {
+ super.onBackPressed();
+ }
+ }
+
+
}
diff --git a/app/src/main/java/net/micode/notes/ui/NoteMenuButton.java b/app/src/main/java/net/micode/notes/ui/NoteMenuButton.java
index c78d5b9..8ea29ac 100644
--- a/app/src/main/java/net/micode/notes/ui/NoteMenuButton.java
+++ b/app/src/main/java/net/micode/notes/ui/NoteMenuButton.java
@@ -3,6 +3,7 @@ package net.micode.notes.ui;
import android.animation.Animator;
import android.animation.ValueAnimator;
import android.app.Activity;
+import android.app.FragmentManager;
import android.content.Context;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
@@ -10,8 +11,10 @@ import android.util.Log;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
+import android.view.animation.AlphaAnimation;
import android.widget.Button;
import android.widget.PopupWindow;
+import android.widget.RelativeLayout;
import net.micode.notes.R;
public class NoteMenuButton extends Button implements View.OnClickListener {
@@ -21,9 +24,12 @@ public class NoteMenuButton extends Button implements View.OnClickListener {
private static final String TAG = "chenqy";
//TODO 定制menu
- private PopupWindow popupWindow;
private Context context;
private boolean isClickable = true;
+ private RelativeLayout note_menu;
+ private FragmentManager fm ;
+
+
public NoteMenuButton(Context context) {
super(context);
@@ -47,6 +53,8 @@ public class NoteMenuButton extends Button implements View.OnClickListener {
}
private void init(){
+ fm = ((Activity)context).getFragmentManager();
+ note_menu = ((Activity)context).findViewById(R.id.xxxxxss);
setOnClickListener(this);
}
@@ -61,48 +69,20 @@ public class NoteMenuButton extends Button implements View.OnClickListener {
public void onClick(View v) {
if (!isClickable) return;
Log.e(TAG, "onClick");
- initPopMenu(v);
+// initPopMenu(v);
+// noteMenu.show(context);
+ AlphaAnimation anim = new AlphaAnimation(0.0f, 1.0f);
+ anim.setDuration(200);
+ note_menu.startAnimation(anim);
+ note_menu.setVisibility(View.VISIBLE);
+ View container = note_menu.findViewById(R.id.ffffkkkkkk);
+ fm.beginTransaction().replace(R.id.ffffkkkkkk, new NoteMenuMainFragment()).commit();
// 添加渐变动画效果
addStartAnimation();
}
- private void initPopMenu(View v) {
- //这一步是为了获取屏幕的宽高,便于用来设置PopupWindow的大小
- DisplayMetrics dm = getResources().getDisplayMetrics();
- //新建popupwindow依靠的view
- View view = View.inflate(context, R.layout.note_pop_menu,null);
- Button btn_close = view.findViewById(R.id.btn_close);
-
- //创建pop(视图,宽,高
- popupWindow = new PopupWindow(view,dm.widthPixels/11*8,dm.heightPixels/11*8);
- popupWindow.setAnimationStyle(R.style.popwin_anim_style);
- //展示pop
- //设置关闭菜单
- popupWindow.setTouchable(true);
- popupWindow.setTouchInterceptor(new View.OnTouchListener() {
- @Override
- public boolean onTouch(View v, MotionEvent event) {
- return false;
- // 这里如果返回true的话,touch事件将被拦截
- // 拦截后 PopupWindow的onTouchEvent不被调用,这样点击外部区域无法dismiss
- }
- });
-
- btn_close.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- popupWindow.dismiss();
- addEndAnimation();
- }
- });
-
-
- popupWindow.showAtLocation(((Activity)context).getWindow().getDecorView(), Gravity.CENTER,0,0);
- isClickable = false;
- }
-
public void addStartAnimation(){
ValueAnimator valueAnimator = ValueAnimator.ofFloat(1f, 0.8f);
valueAnimator.setDuration(300);
diff --git a/app/src/main/java/net/micode/notes/ui/NoteMenuListFragment.java b/app/src/main/java/net/micode/notes/ui/NoteMenuListFragment.java
new file mode 100644
index 0000000..62f1907
--- /dev/null
+++ b/app/src/main/java/net/micode/notes/ui/NoteMenuListFragment.java
@@ -0,0 +1,93 @@
+package net.micode.notes.ui;
+
+import android.app.Activity;
+import android.app.Fragment;
+import android.app.FragmentManager;
+import android.app.FragmentTransaction;
+import android.content.Context;
+import android.content.Intent;
+import android.database.Cursor;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.animation.AlphaAnimation;
+import android.widget.Button;
+import android.widget.ListView;
+import net.micode.notes.R;
+import net.micode.notes.data.Notes;
+
+import java.util.ArrayList;
+
+public class NoteMenuListFragment extends Fragment implements View.OnClickListener {
+
+ private ListView lv_note_list;
+ private Button btn_back;
+ private Button btn_close;
+ private Button btn_backup;
+ private FragmentManager fm;
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ View view = inflater.inflate(R.layout.note_pop_menu_list, container, false);
+ bindView(view);
+ return view;
+ }
+
+ private void bindView(View container){
+ lv_note_list = container.findViewById(R.id.note_pop_menu_lv);
+ btn_back = container.findViewById(R.id.note_pop_menu_list_btn_back);
+ btn_close = container.findViewById(R.id.note_pop_menu_list_btn_close);
+ btn_backup = container.findViewById(R.id.note_pop_menu_list_btn_backup);
+ btn_back.setOnClickListener(this);
+ btn_close.setOnClickListener(this);
+ btn_backup.setOnClickListener(this);
+ fm = getActivity().getFragmentManager();
+ }
+
+ @Override
+ public void onViewCreated(View view, Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ //TODO 需要备份的note清单列表
+ lv_note_list = getActivity().findViewById(R.id.note_pop_menu_lv);
+ //Cursor cursor = getActivity().getContentResolver().query(Notes.CONTENT_NOTE_URI, null, null, null, null);
+ Cursor cursor = getActivity().getContentResolver().query(Notes.CONTENT_NOTE_URI, null, Notes.NoteColumns.ID + " > ?", new String[]{"0"}, null);
+ //遍历cursor 将id 放入list
+// ArrayList id_list = new ArrayList<>();
+
+ BackListAdapter adapter = new BackListAdapter(getActivity(),cursor);
+ lv_note_list.setAdapter(adapter);
+ }
+
+ @Override
+ public void onClick(View v) {
+ final int id = v.getId();
+ switch (id){
+ case R.id.note_pop_menu_list_btn_backup:
+ //TODO 备份笔记
+ //TODO 启动 backupService 将笔记备份到云端
+ Intent it = new Intent(NotesListActivity.BACKUP_ACTION);
+ //从lv_note_list 获得勾选的笔记的id
+
+
+
+ getActivity().sendBroadcast(it);
+ break;
+ case R.id.note_pop_menu_list_btn_back:
+ //TODO 回退到上一级
+ FragmentTransaction ft = fm.beginTransaction();
+ ft.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out, android.R.animator.fade_in, android.R.animator.fade_out);
+ ft.replace(R.id.ffffkkkkkk, new NoteMenuMainFragment()).commit();
+ break;
+ case R.id.note_pop_menu_list_btn_close:
+ //TODO 关闭当前页面
+// getActivity().findViewById(R.)
+ View note_menu = getActivity().findViewById(R.id.xxxxxss);
+ AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0);
+ alphaAnimation.setDuration(200);
+ note_menu.startAnimation(alphaAnimation);
+ note_menu.setVisibility(View.GONE);
+ break;
+ }
+ }
+}
diff --git a/app/src/main/java/net/micode/notes/ui/NoteMenuMainFragment.java b/app/src/main/java/net/micode/notes/ui/NoteMenuMainFragment.java
new file mode 100644
index 0000000..905547e
--- /dev/null
+++ b/app/src/main/java/net/micode/notes/ui/NoteMenuMainFragment.java
@@ -0,0 +1,70 @@
+package net.micode.notes.ui;
+
+import android.app.Activity;
+import android.app.Fragment;
+import android.app.FragmentManager;
+import android.app.FragmentTransaction;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.animation.AlphaAnimation;
+import android.widget.Button;
+import net.micode.notes.R;
+
+public class NoteMenuMainFragment extends Fragment {
+
+ private Button btn_note_backup;
+ private Button btn_close;
+ private Context context;
+
+
+ public NoteMenuMainFragment() {
+ }
+
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ this.context = getActivity();
+ View view = inflater.inflate(R.layout.note_pop_menu_main, container, false);
+ bindView(view);
+ return view;
+ }
+
+ private void bindView(View view) {
+ btn_note_backup = view.findViewById(R.id.btn_note_backup);
+ btn_close = view.findViewById(R.id.btn_close);
+
+ btn_close.setOnClickListener(v -> {
+ View note_menu = ((Activity) context).findViewById(R.id.xxxxxss);
+ AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0);
+ alphaAnimation.setDuration(200);
+ note_menu.startAnimation(alphaAnimation);
+ note_menu.setVisibility(View.GONE);
+ });
+ this.btn_note_backup.setOnClickListener(new NoteMenuMainFragment.NoteMenuBackUpButtonClickListener(context));
+ }
+
+ // 点击事件: 将笔记备份到云端
+ private static class NoteMenuBackUpButtonClickListener implements View.OnClickListener {
+ private final Context context;
+
+ NoteMenuBackUpButtonClickListener(Context context) {
+ this.context = context;
+ }
+
+ @Override
+ public void onClick(View v) {
+ //切换到到备份笔记列表
+ FragmentManager fm = ((Activity) context).getFragmentManager();
+ FragmentTransaction ft = fm.beginTransaction();
+ ft.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out, android.R.animator.fade_in, android.R.animator.fade_out);
+
+ ft.replace(R.id.ffffkkkkkk, new NoteMenuListFragment()).commit();
+
+ }
+ }
+
+}
diff --git a/app/src/main/java/net/micode/notes/ui/NotesListActivity.java b/app/src/main/java/net/micode/notes/ui/NotesListActivity.java
index 56022fb..2de6bec 100644
--- a/app/src/main/java/net/micode/notes/ui/NotesListActivity.java
+++ b/app/src/main/java/net/micode/notes/ui/NotesListActivity.java
@@ -16,20 +16,16 @@
package net.micode.notes.ui;
+import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.appwidget.AppWidgetManager;
-import android.content.AsyncQueryHandler;
-import android.content.ContentResolver;
-import android.content.ContentValues;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.SharedPreferences;
+import android.content.*;
import android.database.Cursor;
import android.os.AsyncTask;
import android.os.Bundle;
+import android.os.IBinder;
import android.preference.PreferenceManager;
import android.text.Editable;
import android.text.TextUtils;
@@ -48,27 +44,38 @@ import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import net.micode.notes.R;
+import net.micode.notes.data.Auth;
import net.micode.notes.data.Notes;
import net.micode.notes.data.Notes.NoteColumns;
import net.micode.notes.gtask.remote.GTaskSyncService;
import net.micode.notes.model.WorkingNote;
+import net.micode.notes.service.BackupBoundService;
import net.micode.notes.tool.BackupUtils;
import net.micode.notes.tool.DataUtils;
import net.micode.notes.tool.ResourceParser;
import net.micode.notes.ui.NotesListAdapter.AppWidgetAttribute;
import net.micode.notes.widget.NoteWidgetProvider_2x;
import net.micode.notes.widget.NoteWidgetProvider_4x;
+import okhttp3.Call;
+import okhttp3.Callback;
+import okhttp3.Response;
+import org.jetbrains.annotations.NotNull;
+import org.json.JSONException;
+import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
+import java.util.ArrayList;
import java.util.HashSet;
+import java.util.List;
+
public class NotesListActivity extends Activity implements OnClickListener, OnItemLongClickListener {
private static final int FOLDER_NOTE_LIST_QUERY_TOKEN = 0;
- private static final int FOLDER_LIST_QUERY_TOKEN = 1;
+ private static final int FOLDER_LIST_QUERY_TOKEN = 1;
private static final int MENU_FOLDER_DELETE = 0;
@@ -80,7 +87,9 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
private enum ListEditState {
NOTE_LIST, SUB_FOLDER, CALL_RECORD_FOLDER
- };
+ }
+
+ ;
private ListEditState mState;
@@ -106,7 +115,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
private ModeCallback mModeCallBack;
- private static final String TAG = "NotesListActivity";
+ private static final String TAG = "chenqy";
public static final int NOTES_LISTVIEW_SCROLL_RATE = 30;
@@ -120,13 +129,71 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
+ NoteColumns.NOTES_COUNT + ">0)";
private final static int REQUEST_CODE_OPEN_NODE = 102;
- private final static int REQUEST_CODE_NEW_NODE = 103;
+ private final static int REQUEST_CODE_NEW_NODE = 103;
//Customized by chenqy
- private boolean isLogin = false;
+
+ //弹出菜单
+ private PopupWindow mPopupWindow;
private long mExitTime = 0;
+ //注册广播
+ public static final String BACKUP_ACTION = "net.micode.notes.backup";
+ public static final String MENU_DISMISS = "shutdown_pop_menu";
+
+
+ //绑定状态
+ private boolean is_bind_backup_service = false;
+ //服务对象
+ private BackupBoundService backupBoundService;
+ //服务连接对象
+ private ServiceConnection backupServiceConn;
+
+ private void bindBackupService() {
+ //创建服务连接对象
+ backupServiceConn = new ServiceConnection() {
+ @Override
+ public void onServiceConnected(ComponentName name, IBinder service) {
+ BackupBoundService.LocalBinder backupBinder = (BackupBoundService.LocalBinder) service;
+ backupBoundService = backupBinder.getService();
+ is_bind_backup_service = true;
+ }
+
+ @Override
+ public void onServiceDisconnected(ComponentName name) {
+ is_bind_backup_service = false;
+ }
+ };
+ }
+
+
+ private BroadcastReceiver receiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ switch (action) {
+ case BACKUP_ACTION:
+ startBackup();
+ break;
+ default:
+ break;
+ }
+ }
+ };
+
+ //执行备份服务
+ public void startBackup() {
+ if (is_bind_backup_service) {
+ String noteData = getNoteData();
+ backupBoundService.backupNotes(noteData);
+ }
+ }
+
+ //TODO 获取note数据
+ private String getNoteData() {
+ return "note data";
+ }
@Override
@@ -139,20 +206,10 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
* Insert an introduction when user firstly use this application
*/
setAppInfoFromRawRes();
+// SqliteStudio
}
- //checkIsLogin
- private boolean checkLogin(){
- //TODO 通过验证本地存储的token与服务器进行匹配判断是否登陆
- //如果未登陆,删除本地token
- //如果登陆,置isLogin为true
- return isLogin;
- }
-
-
-
-
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK
@@ -163,56 +220,91 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
}
}
+
private void setAppInfoFromRawRes() {
+ // 获取默认的 SharedPreferences 对象
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
+
+ // 如果用户之前没有看过介绍信息,则添加该信息
if (!sp.getBoolean(PREFERENCE_ADD_INTRODUCTION, false)) {
StringBuilder sb = new StringBuilder();
InputStream in = null;
try {
- in = getResources().openRawResource(R.raw.introduction);
+ // 从应用程序的资源中读取 introduction 文件
+ in = getResources().openRawResource(R.raw.introduction);
if (in != null) {
InputStreamReader isr = new InputStreamReader(in);
BufferedReader br = new BufferedReader(isr);
- char [] buf = new char[1024];
+ char[] buf = new char[1024];
int len = 0;
while ((len = br.read(buf)) > 0) {
sb.append(buf, 0, len);
}
} else {
+ // 如果读取文件失败,则记录日志并退出方法
Log.e(TAG, "Read introduction file error");
return;
}
} catch (IOException e) {
+ // 如果出现异常,则记录日志并退出方法
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);
note.setWorkingText(sb.toString());
+
+ // 如果保存笔记成功,则将添加介绍信息的标志设置为 true
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();
+
+ //注册服务
+ Intent intent = new Intent(this, BackupBoundService.class);
+ bindService(intent, backupServiceConn, Context.BIND_AUTO_CREATE);
+
+ //注册广播
+ IntentFilter filter = new IntentFilter(BACKUP_ACTION);
+ registerReceiver(receiver, filter);
+
+ }
+
+ @Override
+ protected void onStop() {
+ super.onStop();
+
+ //如果已经绑定,解绑服务
+ if (is_bind_backup_service) {
+ unbindService(backupServiceConn);
+ is_bind_backup_service = false;
+ }
+
+ //注销广播接收器
+ unregisterReceiver(receiver);
}
private void initResources() {
@@ -235,20 +327,33 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
mTitleBar = (TextView) findViewById(R.id.tv_title_bar);
mState = ListEditState.NOTE_LIST;
mModeCallBack = new ModeCallback();
-
-
}
- private void initCustom(){
- if(!checkLogin()){
- //未登陆状态
- Intent it = new Intent(NotesListActivity.this, NoteLoginActivity.class);
- it.setAction(Intent.ACTION_VIEW);
- startActivity(it);
+ private void initCustom() {
+ //TODO initCustom
+ bindBackupService();
+ List id_list = new ArrayList<>();
+ List v_list = new ArrayList<>();
+ Cursor cursor_note = this.getContentResolver().query(Notes.CONTENT_NOTE_URI, new String[]{NoteColumns.ID, NoteColumns.VERSION}, null, null, null);
+ //将Id保存在note_list中
+ if (cursor_note != null) {
+ while (cursor_note.moveToNext()) {
+ long id = (long) cursor_note.getInt(cursor_note.getColumnIndex(NoteColumns.ID));
+ long version = (long) cursor_note.getInt(cursor_note.getColumnIndex(NoteColumns.VERSION));
+ if (id <= 0) continue;
+ id_list.add(id);
+ v_list.add(version);
+ }
+ }
+ cursor_note.close();
+
+ //遍历note_list
+ for (int i = 0; i < id_list.size(); i++) {
+ Log.e(TAG, "note: " + id_list.get(i) + " " + v_list.get(i));
}
- }
+ }
private class ModeCallback implements ListView.MultiChoiceModeListener, OnMenuItemClickListener {
@@ -278,7 +383,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
mDropDownMenu = new DropdownMenu(NotesListActivity.this,
(Button) customView.findViewById(R.id.selection_menu),
R.menu.note_list_dropdown);
- mDropDownMenu.setOnDropdownMenuItemClickListener(new PopupMenu.OnMenuItemClickListener(){
+ mDropDownMenu.setOnDropdownMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
mNotesListAdapter.selectAll(!mNotesListAdapter.isAllSelected());
updateMenu();
@@ -327,7 +432,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
}
public void onItemCheckedStateChanged(ActionMode mode, int position, long id,
- boolean checked) {
+ boolean checked) {
mNotesListAdapter.setCheckedItem(position, checked);
updateMenu();
}
@@ -345,14 +450,9 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
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()));
+ mNotesListAdapter.getSelectedCount()));
builder.setPositiveButton(android.R.string.ok,
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog,
- int which) {
- batchDelete();
- }
- });
+ (dialog, which) -> batchDelete());
builder.setNegativeButton(android.R.string.cancel, null);
builder.show();
break;
@@ -426,14 +526,16 @@ 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)
+ Notes.CONTENT_NOTE_URI, NoteItemData.PROJECTION, selection, new String[]{
+ String.valueOf(mCurrentFolderId)
}, NoteColumns.TYPE + " DESC," + NoteColumns.MODIFIED_DATE + " DESC");
}
@@ -489,43 +591,53 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
this.startActivityForResult(intent, REQUEST_CODE_NEW_NODE);
}
+ // 通过注解 @SuppressLint("StaticFieldLeak") 告知编译器对静态成员变量的访问,防止出现 Android Lint 的警告
+ @SuppressLint("StaticFieldLeak")
private void batchDelete() {
+ // 新建一个异步任务对象
new AsyncTask>() {
+ // 在后台进行删除操作
protected HashSet doInBackground(Void... unused) {
+ // 获取当前选中的 Note Widget
HashSet widgets = mNotesListAdapter.getSelectedWidget();
if (!isSyncMode()) {
- // if not synced, delete notes directly
- if (DataUtils.batchDeleteNotes(mContentResolver, mNotesListAdapter
- .getSelectedItemIds())) {
+ // 如果不在同步模式下,直接通过 ContentResolver 删除所有选中的 Note
+ if (DataUtils.batchDeleteNotes(mContentResolver, mNotesListAdapter.getSelectedItemIds())) {
+ // 删除成功则不做操作
} else {
+ // 删除失败则将错误信息记录到日志中
Log.e(TAG, "Delete notes error, should not happens");
}
} else {
- // in sync mode, we'll move the deleted note into the trash
- // folder
- if (!DataUtils.batchMoveToFolder(mContentResolver, mNotesListAdapter
- .getSelectedItemIds(), Notes.ID_TRASH_FOLER)) {
+ // 如果在同步模式下,则将所有选中的 Note 移动到垃圾箱文件夹中
+ if (!DataUtils.batchMoveToFolder(mContentResolver, mNotesListAdapter.getSelectedItemIds(), Notes.ID_TRASH_FOLER)) {
+ // 移动失败则将错误信息记录到日志中
Log.e(TAG, "Move notes to trash folder error, should not happens");
}
}
+ // 返回当前选中的 Note Widget
return widgets;
}
+ // 在操作执行完毕后执行的方法
@Override
protected void onPostExecute(HashSet widgets) {
if (widgets != null) {
+ // 遍历所有选中的 Note Widget
for (AppWidgetAttribute widget : widgets) {
- if (widget.widgetId != AppWidgetManager.INVALID_APPWIDGET_ID
- && widget.widgetType != Notes.TYPE_WIDGET_INVALIDE) {
+ // 如果当前的 Note Widget 是有效的,则更新该 Widget
+ if (widget.widgetId != AppWidgetManager.INVALID_APPWIDGET_ID && widget.widgetType != Notes.TYPE_WIDGET_INVALIDE) {
updateWidget(widget.widgetId, widget.widgetType);
}
}
}
+ // 结束 ActionMode 操作
mModeCallBack.finishActionMode();
}
- }.execute();
+ }.execute(); // 执行异步任务
}
+
private void deleteFolder(long folderId) {
if (folderId == Notes.ID_ROOT_FOLDER) {
Log.e(TAG, "Wrong folder id, should not happen " + folderId);
@@ -625,7 +737,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
});
final Dialog dialog = builder.setView(view).show();
- final Button positive = (Button)dialog.findViewById(android.R.id.button1);
+ final Button positive = (Button) dialog.findViewById(android.R.id.button1);
positive.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
hideSoftInput(etName);
@@ -643,8 +755,8 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
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())
+ + "=?", new String[]{
+ String.valueOf(mFocusNoteDataItem.getId())
});
}
} else if (!TextUtils.isEmpty(name)) {
@@ -701,11 +813,11 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
startAsyncNotesListQuery();
break;
case NOTE_LIST:
- if(System.currentTimeMillis() - mExitTime > 2000){
+ if (System.currentTimeMillis() - mExitTime > 2000) {
Toast.makeText(this, R.string.press_again_exit, Toast.LENGTH_SHORT).show();
mExitTime = System.currentTimeMillis();
return;
- }else{
+ } else {
super.onBackPressed();
}
break;
@@ -725,8 +837,8 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
return;
}
- intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] {
- appWidgetId
+ intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[]{
+ appWidgetId
});
sendBroadcast(intent);
@@ -945,15 +1057,15 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
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 + ")";
+ 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[] {
+ new String[]{
String.valueOf(Notes.TYPE_FOLDER),
String.valueOf(Notes.ID_TRASH_FOLER),
String.valueOf(mCurrentFolderId)
diff --git a/app/src/main/java/net/micode/notes/ui/NotesListAdapter.java b/app/src/main/java/net/micode/notes/ui/NotesListAdapter.java
index 51c9cb9..fe3dbca 100644
--- a/app/src/main/java/net/micode/notes/ui/NotesListAdapter.java
+++ b/app/src/main/java/net/micode/notes/ui/NotesListAdapter.java
@@ -38,6 +38,11 @@ public class NotesListAdapter extends CursorAdapter {
private int mNotesCount;
private boolean mChoiceMode;
+ public NotesListAdapter(Context context, Cursor c) {
+ super(context, c);
+ this.mContext = mContext;
+ }
+
public static class AppWidgetAttribute {
public int widgetId;
public int widgetType;
@@ -50,47 +55,122 @@ public class NotesListAdapter extends CursorAdapter {
mNotesCount = 0;
}
+ /**
+ * 在列表视图中创建新项目的方法。
+ *
+ * @param context 上下文对象,表示当前应用程序的状态信息。
+ * @param cursor 数据库游标对象,用于访问查询结果集中的行。
+ * @param parent 列表视图的父级布局对象,用于在其中显示新项目。
+ *
+ * @return 返回一个 NotesListItem 对象,该对象表示列表视图中的新项目。
+ */
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return new NotesListItem(context);
}
+
+ /**
+ * 将数据绑定到列表视图中的每个项目的方法。
+ *
+ * @param view 表示当前项目的视图对象。对应 newView中返回的 NotesListItem 对象。
+ * @param context 上下文对象,表示当前应用程序的状态信息。
+ * @param cursor 数据库游标对象,用于访问查询结果集中的行。
+ */
@Override
public void bindView(View view, Context context, Cursor cursor) {
if (view instanceof NotesListItem) {
+ // 使用 NoteItemData 类来获取要填充到视图中的数据
NoteItemData itemData = new NoteItemData(context, cursor);
+ // 将数据填充到 List Item View 中
((NotesListItem) view).bind(context, itemData, mChoiceMode,
isSelectedItem(cursor.getPosition()));
}
}
+
+ /**
+ * 当内容发生变化时被调用的方法。
+ */
+ @Override
+ protected void onContentChanged() {
+ super.onContentChanged();
+ calcNotesCount();
+ }
+
+ /**
+ * 在更改 Cursor 对象时被调用的方法。
+ *
+ * @param cursor 表示新数据集的游标对象。
+ */
+ @Override
+ public void changeCursor(Cursor cursor) {
+ super.changeCursor(cursor);
+ calcNotesCount();
+ }
+
+
+ /**
+ * 将指定位置的列表项标记为已选或未选状态。
+ *
+ * @param position 列表项的位置。
+ * @param checked 是否选中该列表项。
+ */
public void setCheckedItem(final int position, final boolean checked) {
+ // 将指定位置的列表项的选中状态更新到 mSelectedIndex 中
mSelectedIndex.put(position, checked);
+ // 通知适配器数据集发生了变化
notifyDataSetChanged();
}
+
+ /**
+ * 检查当前是否处于选择模式。
+ *
+ * @return 如果当前处于选择模式,则返回 true,否则返回 false。
+ */
public boolean isInChoiceMode() {
return mChoiceMode;
}
+ /**
+ * 设置选择模式。
+ *
+ * @param mode 要设置的选择模式。如果为 true,则表示启用选择模式;否则停用选择模式。
+ */
public void setChoiceMode(boolean mode) {
+ // 清空已选项目列表
mSelectedIndex.clear();
+ // 更新选择模式
mChoiceMode = mode;
}
+ /**
+ * 选择或取消选择所有可编辑项目。
+ *
+ * @param checked 是否选择所有项目。
+ */
public void selectAll(boolean checked) {
Cursor cursor = getCursor();
for (int i = 0; i < getCount(); i++) {
if (cursor.moveToPosition(i)) {
+ // 检查当前项目是否可以编辑(即是否为笔记类型)
if (NoteItemData.getNoteType(cursor) == Notes.TYPE_NOTE) {
+ // 将当前项目标记为选中或未选中状态
setCheckedItem(i, checked);
}
}
}
}
+ /**
+ * 获取当前已选项目的 ID 集合。
+ *
+ * @return 返回一个包含已选项目 ID 的 HashSet。
+ */
public HashSet getSelectedItemIds() {
HashSet itemSet = new HashSet();
+ // 遍历已选项目列表,并将所有已选项目的 ID 添加到 HashSet 中
for (Integer position : mSelectedIndex.keySet()) {
if (mSelectedIndex.get(position) == true) {
Long id = getItemId(position);
@@ -105,8 +185,14 @@ public class NotesListAdapter extends CursorAdapter {
return itemSet;
}
+ /**
+ * 获取当前已选项目的小部件信息集合。
+ *
+ * @return 返回一个包含已选项目小部件信息的 HashSet。
+ */
public HashSet getSelectedWidget() {
HashSet itemSet = new HashSet();
+ // 遍历已选项目列表,并将所有已选项目的小部件信息添加到 HashSet 中
for (Integer position : mSelectedIndex.keySet()) {
if (mSelectedIndex.get(position) == true) {
Cursor c = (Cursor) getItem(position);
@@ -116,9 +202,6 @@ public class NotesListAdapter extends CursorAdapter {
widget.widgetId = item.getWidgetId();
widget.widgetType = item.getWidgetType();
itemSet.add(widget);
- /**
- * Don't close cursor here, only the adapter could close it
- */
} else {
Log.e(TAG, "Invalid cursor");
return null;
@@ -128,6 +211,12 @@ public class NotesListAdapter extends CursorAdapter {
return itemSet;
}
+
+ /**
+ * 获取已选项目的数量。
+ *
+ * @return 返回已选项目的数量。
+ */
public int getSelectedCount() {
Collection values = mSelectedIndex.values();
if (null == values) {
@@ -143,11 +232,22 @@ public class NotesListAdapter extends CursorAdapter {
return count;
}
+ /**
+ * 检查是否已经选择了所有项目。
+ *
+ * @return 如果所有项目都已经被选中,则返回 true,否则返回 false。
+ */
public boolean isAllSelected() {
int checkedCount = getSelectedCount();
return (checkedCount != 0 && checkedCount == mNotesCount);
}
+ /**
+ * 检查指定位置的项目是否已被选中。
+ *
+ * @param position 要检查其选中状态的项目位置。
+ * @return 如果该项目已被选中,则返回 true,否则返回 false。
+ */
public boolean isSelectedItem(final int position) {
if (null == mSelectedIndex.get(position)) {
return false;
@@ -155,24 +255,19 @@ public class NotesListAdapter extends CursorAdapter {
return mSelectedIndex.get(position);
}
- @Override
- protected void onContentChanged() {
- super.onContentChanged();
- calcNotesCount();
- }
- @Override
- public void changeCursor(Cursor cursor) {
- super.changeCursor(cursor);
- calcNotesCount();
- }
+ /**
+ * 计算列表视图中笔记项目的数量。
+ */
private void calcNotesCount() {
mNotesCount = 0;
- for (int i = 0; i < getCount(); i++) {
+ int totalCount = getCount();
+ for (int i = 0; i < totalCount; i++) {
Cursor c = (Cursor) getItem(i);
if (c != null) {
- if (NoteItemData.getNoteType(c) == Notes.TYPE_NOTE) {
+ int noteType = NoteItemData.getNoteType(c);
+ if (noteType == Notes.TYPE_NOTE) {
mNotesCount++;
}
} else {
@@ -181,4 +276,5 @@ public class NotesListAdapter extends CursorAdapter {
}
}
}
+
}
diff --git a/app/src/main/res/layout/note_backup_item.xml b/app/src/main/res/layout/note_backup_item.xml
new file mode 100644
index 0000000..9178980
--- /dev/null
+++ b/app/src/main/res/layout/note_backup_item.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/note_list.xml b/app/src/main/res/layout/note_list.xml
index 8f9a39d..7ff81b9 100644
--- a/app/src/main/res/layout/note_list.xml
+++ b/app/src/main/res/layout/note_list.xml
@@ -55,37 +55,23 @@
android:layout_height="wrap_content"
android:focusable="false"
android:layout_gravity="bottom"
- android:visibility="gone"
+ android:visibility="visible"
/>
-
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
diff --git a/app/src/main/res/layout/note_pop_menu_list.xml b/app/src/main/res/layout/note_pop_menu_list.xml
new file mode 100644
index 0000000..701fd5d
--- /dev/null
+++ b/app/src/main/res/layout/note_pop_menu_list.xml
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/note_pop_menu_main.xml b/app/src/main/res/layout/note_pop_menu_main.xml
new file mode 100644
index 0000000..6a59828
--- /dev/null
+++ b/app/src/main/res/layout/note_pop_menu_main.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+