diff --git a/.idea/sonarlint/issuestore/3/2/32360bf24febc78f20db52498c7576b3d8650d56 b/.idea/sonarlint/issuestore/3/2/32360bf24febc78f20db52498c7576b3d8650d56
index 5879af3..ac3ea31 100644
--- a/.idea/sonarlint/issuestore/3/2/32360bf24febc78f20db52498c7576b3d8650d56
+++ b/.idea/sonarlint/issuestore/3/2/32360bf24febc78f20db52498c7576b3d8650d56
@@ -18,9 +18,9 @@ java:S1319S"`The type of "ids" should be an interface such as "Set" rather than
 ‰
 java:S1319È"mThe return type of this method should be an interface such as "Set" rather than the implementation "HashSet".(ÛëÈðýÿÿÿÿ
 S
-java:S2589>"8Remove this expression which always evaluates to "false"(ÎŽŽéûÿÿÿÿ
-S
 java:S2589e"8Remove this expression which always evaluates to "false"(ÎŽŽéûÿÿÿÿ
+S
+java:S2589>"8Remove this expression which always evaluates to "false"(ÎŽŽéûÿÿÿÿ
 U
 java:S1118&":Add a private constructor to hide the implicit public one.(³¡¸�ÿÿÿÿÿ
 T
diff --git a/.idea/sonarlint/issuestore/6/c/6cbf8bd9aa98eff862b1dc067330ba66ba4493aa b/.idea/sonarlint/issuestore/6/c/6cbf8bd9aa98eff862b1dc067330ba66ba4493aa
index bdfcc68..fb3fece 100644
--- a/.idea/sonarlint/issuestore/6/c/6cbf8bd9aa98eff862b1dc067330ba66ba4493aa
+++ b/.idea/sonarlint/issuestore/6/c/6cbf8bd9aa98eff862b1dc067330ba66ba4493aa
@@ -6,6 +6,4 @@ java:S1604L"(Make this anonymous inner class a lambda(Ò´Ñ�
 C
 java:S1604v"(Make this anonymous inner class a lambda(×ÉÑ‘úÿÿÿÿ
 ?
-java:S1604“"(Make this anonymous inner class a lambda(À¸èž
-V
-java:S3398ß"?Move this method into the anonymous class declared at line 118.( šåš
\ No newline at end of file
+java:S1604“"(Make this anonymous inner class a lambda(À¸èž
\ No newline at end of file
diff --git a/.idea/sonarlint/issuestore/8/7/876016634c6642b35109680ccac740dc8271b236 b/.idea/sonarlint/issuestore/8/7/876016634c6642b35109680ccac740dc8271b236
index cc88819..cee8356 100644
--- a/.idea/sonarlint/issuestore/8/7/876016634c6642b35109680ccac740dc8271b236
+++ b/.idea/sonarlint/issuestore/8/7/876016634c6642b35109680ccac740dc8271b236
@@ -1,11 +1,11 @@
 
 F
-java:S1066Á"/Merge this if statement with the enclosing one.(â�®¾
+java:S1066Ä"/Merge this if statement with the enclosing one.(â�®¾
 3
 java:S2386A"Make this member "protected".(”µåÓ
 8
 java:S2386K"Make this member "protected".(Ñã³Žýÿÿÿÿ
 X
-java:S1126Ü"AReplace this if-then-else statement by a single return statement.(¶ø ˜
+java:S1126ß"AReplace this if-then-else statement by a single return statement.(¶ø ˜
 ?
-java:S1125ª"(Remove the unnecessary boolean literals.(ÍÛì•
\ No newline at end of file
+java:S1125­"(Remove the unnecessary boolean literals.(ÍÛì•
\ No newline at end of file
diff --git a/.idea/sonarlint/issuestore/a/4/a446c87b1013132f8adaf83656b582028e8809af b/.idea/sonarlint/issuestore/a/4/a446c87b1013132f8adaf83656b582028e8809af
index 9975d96..5dcc2d5 100644
--- a/.idea/sonarlint/issuestore/a/4/a446c87b1013132f8adaf83656b582028e8809af
+++ b/.idea/sonarlint/issuestore/a/4/a446c87b1013132f8adaf83656b582028e8809af
@@ -7,9 +7,5 @@ java:S3776
 \
 java:S2147°"ECombine this catch with the one at line 301, which has the same body.(ß�È´
 \
-java:S2147Ð"ECombine this catch with the one at line 334, which has the same body.(ï­£Ä
-]	java:S899Ë"BDo something with the "boolean" value returned by "createNewFile".(Ð�’Íùÿÿÿÿ
-?
-java:S3398»"#Move this method into "TextExport".(¨ä¿ÿýÿÿÿÿ
-9
-java:S3398H"#Move this method into "TextExport".(…´‹�
\ No newline at end of file
+java:S2147Ñ"ECombine this catch with the one at line 335, which has the same body.(ï­£Ä
+]	java:S899Ì"BDo something with the "boolean" value returned by "createNewFile".(Ð�’Íùÿÿÿÿ
\ No newline at end of file
diff --git a/.idea/sonarlint/issuestore/a/b/ab153b0256bc5f6c194e188cec0b8e327e347a90 b/.idea/sonarlint/issuestore/a/b/ab153b0256bc5f6c194e188cec0b8e327e347a90
index d470860..5b20ba7 100644
--- a/.idea/sonarlint/issuestore/a/b/ab153b0256bc5f6c194e188cec0b8e327e347a90
+++ b/.idea/sonarlint/issuestore/a/b/ab153b0256bc5f6c194e188cec0b8e327e347a90
@@ -12,11 +12,11 @@ java:S2293b"YReplace the type specification in this constructor call with the d
 t
 java:S2293c"YReplace the type specification in this constructor call with the diamond operator ("<>").(ž’»Ðýÿÿÿÿ
 ]
-java:S1192©"FDefine a constant instead of duplicating this literal " DESC" 3 times.(©ÍÔ±
+java:S1192­"FDefine a constant instead of duplicating this literal " DESC" 3 times.(©ÍÔ±
 K
 java:S1066ˆ"/Merge this if statement with the enclosing one.(¾¶†–þÿÿÿÿ
 K
-java:S1066Õ"/Merge this if statement with the enclosing one.(Ë¼Ö“ùÿÿÿÿ
+java:S1066Ù"/Merge this if statement with the enclosing one.(Ë¼Ö“ùÿÿÿÿ
 i
 java:S3776«"RRefactor this method to reduce its Cognitive Complexity from 29 to the 15 allowed.(«Ã¾á
 I
@@ -24,20 +24,20 @@ java:S1905
 C
 java:S1905ç"-Remove this unnecessary cast to "JSONObject".(Ø›¶
 i
-java:S3776ú"RRefactor this method to reduce its Cognitive Complexity from 28 to the 15 allowed.(ðúæŠ
+java:S3776þ"RRefactor this method to reduce its Cognitive Complexity from 28 to the 15 allowed.(ðúæŠ
 n
-java:S3776â"RRefactor this method to reduce its Cognitive Complexity from 41 to the 15 allowed.(…Ë°±ýÿÿÿÿ
+java:S3776æ"RRefactor this method to reduce its Cognitive Complexity from 41 to the 15 allowed.(…Ë°±ýÿÿÿÿ
 n
-java:S3776�"RRefactor this method to reduce its Cognitive Complexity from 34 to the 15 allowed.(ÿ»É¸ûÿÿÿÿ
+java:S3776‘"RRefactor this method to reduce its Cognitive Complexity from 34 to the 15 allowed.(ÿ»É¸ûÿÿÿÿ
 5
-java:S2129â"Remove this "Long" constructor(Ï­¨Ã
+java:S2129æ"Remove this "Long" constructor(Ï­¨Ã
 C
-java:S1874â",Remove this use of "Long"; it is deprecated.(Ï­¨Ã
+java:S1874æ",Remove this use of "Long"; it is deprecated.(Ï­¨Ã
 n
-java:S3776î"RRefactor this method to reduce its Cognitive Complexity from 20 to the 15 allowed.(Æ¶Ø üÿÿÿÿ
+java:S3776ò"RRefactor this method to reduce its Cognitive Complexity from 20 to the 15 allowed.(Æ¶Ø üÿÿÿÿ
 G
-java:S1172î"+Remove this unused method parameter "node".(Æ¶Ø üÿÿÿÿ
+java:S1172ò"+Remove this unused method parameter "node".(Æ¶Ø üÿÿÿÿ
 C
-java:S1905ƒ"'Remove this unnecessary cast to "Node".(±¼ÇÒûÿÿÿÿ
+java:S1905‡"'Remove this unnecessary cast to "Node".(±¼ÇÒûÿÿÿÿ
 >
-java:S1905©"'Remove this unnecessary cast to "Node".(íé¥Ç
\ No newline at end of file
+java:S1905­"'Remove this unnecessary cast to "Node".(íé¥Ç
\ No newline at end of file
diff --git a/.idea/sonarlint/issuestore/a/d/ad72331a1bed265bb9c0fe838faa74dbf69fce32 b/.idea/sonarlint/issuestore/a/d/ad72331a1bed265bb9c0fe838faa74dbf69fce32
index 708e66b..cb9f12a 100644
--- a/.idea/sonarlint/issuestore/a/d/ad72331a1bed265bb9c0fe838faa74dbf69fce32
+++ b/.idea/sonarlint/issuestore/a/d/ad72331a1bed265bb9c0fe838faa74dbf69fce32
@@ -1,107 +1,95 @@
 
-p
-java:S2293 "YReplace the type specification in this constructor call with the diamond operator ("<>").(è‰¥ð
->
-java:S1604Š"(Make this anonymous inner class a lambda(—ÌºV
-?
-java:S1604æ"(Make this anonymous inner class a lambda(Î¬¯”
-?
-java:S1604Ý"(Make this anonymous inner class a lambda(¿Ü´ã
-D
-java:S1604÷"(Make this anonymous inner class a lambda(ˆÐï�øÿÿÿÿ
-?
-java:S1604ÿ"(Make this anonymous inner class a lambda(øÄì‡
-?
-java:S1604è"(Make this anonymous inner class a lambda(Û±¼ 
-?
-java:S1604‹"(Make this anonymous inner class a lambda(Î¬¯”
-g
-java:S1301Ï"KReplace this "switch" statement by "if" statements to increase readability.(×“¾ñùÿÿÿÿ
-7
-java:S1116`"Remove this empty statement.(ôŸŽìúÿÿÿÿ
-a
-java:S1124ˆ"EReorder the modifiers to comply with the Java Language Specification.(¹úæµûÿÿÿÿ
-[
-java:S1124‰"EReorder the modifiers to comply with the Java Language Specification.(ìÑ¾k
-n
-java:S3776¡"RRefactor this method to reduce its Cognitive Complexity from 17 to the 15 allowed.(áé–Þÿÿÿÿÿ
-2
-java:S3626²"Remove this redundant jump.(ûÁÝ…
-2
-java:S3626¶"Remove this redundant jump.(ûÁÝ…
-2
-java:S3626Ê"Remove this redundant jump.(ûÁÝ…
-P
-java:S1874¢"9Remove this use of "PreferenceManager"; it is deprecated.(Â­©Ð
-Z
-java:S1874¢"CRemove this use of "getDefaultSharedPreferences"; it is deprecated.(Â­©Ð
-N
-java:S1135¼"2Complete the task associated to this TODO comment.(ÕÌ�®þÿÿÿÿ
+w
+java:S2293Ð"YReplace the type specification in this constructor call with the diamond operator ("<>").(è‰¥ð8êÿŒ†¬1
+E
+java:S1604•"(Make this anonymous inner class a lambda(—ÌºV8þµó€¬1
 F
-java:S2093¦"*Change this "try" to a try-with-resources.(¡»¢üùÿÿÿÿ
-o
-java:S1450ð"XRemove the "mMoveMenu" field and declare it as a local variable in the relevant methods.(ž¢—ò
-j
-java:S1450ï"SRemove the "menu" field and declare it as a local variable in the relevant methods.(î·öÁ
+java:S1604ø"(Make this anonymous inner class a lambda(Î¬¯”8¶—†�¬1
+F
+java:S1604‰"(Make this anonymous inner class a lambda(¿Ü´ã8ìÿŒ†¬1
+K
+java:S1604¯"(Make this anonymous inner class a lambda(ˆÐï�øÿÿÿÿ8íÿŒ†¬1
+F
+java:S1604·"(Make this anonymous inner class a lambda(øÄì‡8íÿŒ†¬1
+F
+java:S1604¦"(Make this anonymous inner class a lambda(Û±¼ 8íÿŒ†¬1
+F
+java:S1604É"(Make this anonymous inner class a lambda(Î¬¯”8íÿŒ†¬1
 n
-java:S3252ì"RUse static access with "android.widget.AbsListView" for "MultiChoiceModeListener".(¦Ûî„úÿÿÿÿ
-N
-java:S1135§"2Complete the task associated to this TODO comment.(» æžÿÿÿÿÿ
-N
-java:S1135¬"2Complete the task associated to this TODO comment.(» æžÿÿÿÿÿ
-F	java:S106·"+Replace this use of System.out by a logger.(×â…Ðþÿÿÿÿ
-R	java:S125¹"<This block of commented-out lines of code should be removed.(ÕÍ‰ß
-Q	java:S125À"<This block of commented-out lines of code should be removed.(÷Í®
-W	java:S125Â"<This block of commented-out lines of code should be removed.(Ðï‰³ýÿÿÿÿ
+java:S1301ÿ"KReplace this "switch" statement by "if" statements to increase readability.(×“¾ñùÿÿÿÿ8íÿŒ†¬1
+h
+java:S1124‰"EReorder the modifiers to comply with the Java Language Specification.(¹úæµûÿÿÿÿ8²·ó€¬1
+b
+java:S1124Š"EReorder the modifiers to comply with the Java Language Specification.(ìÑ¾k8²·ó€¬1
+u
+java:S3776¦"RRefactor this method to reduce its Cognitive Complexity from 17 to the 15 allowed.(áé–Þÿÿÿÿÿ8´·ó€¬1
+9
+java:S3626·"Remove this redundant jump.(ûÁÝ…8´·ó€¬1
+9
+java:S3626»"Remove this redundant jump.(ûÁÝ…8´·ó€¬1
+9
+java:S3626Ï"Remove this redundant jump.(ûÁÝ…8´·ó€¬1
+W
+java:S1874§"9Remove this use of "PreferenceManager"; it is deprecated.(Â­©Ð8µ·ó€¬1
+a
+java:S1874§"CRemove this use of "getDefaultSharedPreferences"; it is deprecated.(Â­©Ð8µ·ó€¬1
 U
-java:S1874ÿ"9Remove this use of "getDefaultDisplay"; it is deprecated.(Ä¸¬Ìýÿÿÿÿ
+java:S1135Á"2Complete the task associated to this TODO comment.(ÕÌ�®þÿÿÿÿ8··ó€¬1
 M
-java:S1874€"1Remove this use of "getHeight"; it is deprecated.(·¡ªÃýÿÿÿÿ
-8
-java:S1116¶"Remove this empty statement.(ôŸŽìúÿÿÿÿ
-i
-java:S3776õ"RRefactor this method to reduce its Cognitive Complexity from 20 to the 15 allowed.(ãìîí
-C
-java:S1874ö".Remove this use of "<init>"; it is deprecated.(ýî?
-?	java:S108ü")Either remove or fill this block of code.(žûÊ¥
-a
-java:S1874Œ"JDon't override a deprecated method or explicitly mark it as "@Deprecated".(§Í¿Â
-K
-java:S1874—"/Remove this use of "execute"; it is deprecated.( å«�ûÿÿÿÿ
-S
-java:S1874Û"7Remove this use of "toggleSoftInput"; it is deprecated.(© …áúÿÿÿÿ
-O
-java:S1874Û"3Remove this use of "SHOW_FORCED"; it is deprecated.(© …áúÿÿÿÿ
-h
-java:S3776ä"RRefactor this method to reduce its Cognitive Complexity from 17 to the 15 allowed.(ÅôÉ#
-N
-java:S1135¦"2Complete the task associated to this TODO comment.(» æžÿÿÿÿÿ
-^
-java:S1126«"BReplace this if-then-else statement by a single method invocation.(çŽ’¦ýÿÿÿÿ
-N
-java:S1135³"2Complete the task associated to this TODO comment.(» æžÿÿÿÿÿ
-f
-java:S1874º"JDon't override a deprecated method or explicitly mark it as "@Deprecated".(œƒƒ©ùÿÿÿÿ
-A	java:S106¼"+Replace this use of System.out by a logger.(›ÚÎŠ
-F	java:S106Í"+Replace this use of System.out by a logger.(™‘‹£þÿÿÿÿ
-Q
-java:S1874Î"5Remove this use of "onBackPressed"; it is deprecated.(�‘Ñàÿÿÿÿÿ
+java:S2093«"*Change this "try" to a try-with-resources.(¡»¢üùÿÿÿÿ8··ó€¬1
+v
+java:S1450ø"XRemove the "mMoveMenu" field and declare it as a local variable in the relevant methods.(ž¢—ò8¼·ó€¬1
+q
+java:S1450÷"SRemove the "menu" field and declare it as a local variable in the relevant methods.(î·öÁ8¼·ó€¬1
+u
+java:S3252ô"RUse static access with "android.widget.AbsListView" for "MultiChoiceModeListener".(¦Ûî„úÿÿÿÿ8¼·ó€¬1
+U
+java:S1135µ"2Complete the task associated to this TODO comment.(» æžÿÿÿÿÿ8À·ó€¬1
+U
+java:S1135º"2Complete the task associated to this TODO comment.(» æžÿÿÿÿÿ8À·ó€¬1
+M	java:S106Æ"+Replace this use of System.out by a logger.(×â…Ðþÿÿÿÿ8Á·ó€¬1
+Y	java:S125È"<This block of commented-out lines of code should be removed.(ÕÍ‰ß8Á·ó€¬1
+X	java:S125Ï"<This block of commented-out lines of code should be removed.(÷Í®8Á·ó€¬1
+^	java:S125Ñ"<This block of commented-out lines of code should be removed.(Ðï‰³ýÿÿÿÿ8Á·ó€¬1
+\
+java:S1874œ"9Remove this use of "getDefaultDisplay"; it is deprecated.(Ä¸¬Ìýÿÿÿÿ8Å·ó€¬1
+T
+java:S1874�"1Remove this use of "getHeight"; it is deprecated.(·¡ªÃýÿÿÿÿ8ß¨”�¬1
+p
+java:S3776¥"RRefactor this method to reduce its Cognitive Complexity from 20 to the 15 allowed.(ãìîí8®„Øž®1
 J
-java:S1874ß".Remove this use of "<init>"; it is deprecated.(Ð§ðÛýÿÿÿÿ
-f
-java:S1874ç"JDon't override a deprecated method or explicitly mark it as "@Deprecated".(÷á‰½ûÿÿÿÿ
-K
-java:S1874„"/Remove this use of "execute"; it is deprecated.( å«�ûÿÿÿÿ
+java:S1874¦".Remove this use of "<init>"; it is deprecated.(ýî?8¯„Øž®1
+F	java:S108¬")Either remove or fill this block of code.(žûÊ¥8°„Øž®1
 h
-java:S3776“"RRefactor this method to reduce its Cognitive Complexity from 18 to the 15 allowed.(ôŒùb
-d	java:S100Ý"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.( •ÒŽ
-B
-java:S1172Ý"+Remove this unused method parameter "view".( •ÒŽ
-K
-java:S3398Ù"/Move this method into "BackgroundQueryHandler".(—÷õŽüÿÿÿÿ
-G
-java:S3398µ"0Move this method into "OnListItemClickListener".(‘ðð¡
-<
-java:S3398õ"%Move this method into "ModeCallback".(ãìîí
-A
-java:S3398º"%Move this method into "ModeCallback".(“ðÉçýÿÿÿÿ
\ No newline at end of file
+java:S1874¼"JDon't override a deprecated method or explicitly mark it as "@Deprecated".(§Í¿Â8±„Øž®1
+R
+java:S1874Ç"/Remove this use of "execute"; it is deprecated.( å«�ûÿÿÿÿ8²„Øž®1
+Z
+java:S1874Ž"7Remove this use of "toggleSoftInput"; it is deprecated.(© …áúÿÿÿÿ8¸„Øž®1
+V
+java:S1874Ž"3Remove this use of "SHOW_FORCED"; it is deprecated.(© …áúÿÿÿÿ8¸„Øž®1
+o
+java:S3776œ"RRefactor this method to reduce its Cognitive Complexity from 17 to the 15 allowed.(ÅôÉ#8º„Øž®1
+U
+java:S1135Þ"2Complete the task associated to this TODO comment.(» æžÿÿÿÿÿ8Â„Øž®1
+e
+java:S1126ã"BReplace this if-then-else statement by a single method invocation.(çŽ’¦ýÿÿÿÿ8Ã„Øž®1
+U
+java:S1135ë"2Complete the task associated to this TODO comment.(» æžÿÿÿÿÿ8Ã„Øž®1
+m
+java:S1874ò"JDon't override a deprecated method or explicitly mark it as "@Deprecated".(œƒƒ©ùÿÿÿÿ8Ä„Øž®1
+H	java:S106ô"+Replace this use of System.out by a logger.(›ÚÎŠ8Ä„Øž®1
+M	java:S106…"+Replace this use of System.out by a logger.(™‘‹£þÿÿÿÿ8Å„Øž®1
+X
+java:S1874†"5Remove this use of "onBackPressed"; it is deprecated.(�‘Ñàÿÿÿÿÿ8Æ„Øž®1
+Q
+java:S1874¦".Remove this use of "<init>"; it is deprecated.(Ð§ðÛýÿÿÿÿ8Ñ„Øž®1
+m
+java:S1874®"JDon't override a deprecated method or explicitly mark it as "@Deprecated".(÷á‰½ûÿÿÿÿ8Ò„Øž®1
+R
+java:S1874Ë"/Remove this use of "execute"; it is deprecated.( å«�ûÿÿÿÿ8Ô„Øž®1
+o
+java:S3776Ú"RRefactor this method to reduce its Cognitive Complexity from 18 to the 15 allowed.(ôŒùb8Ö„Øž®1
+k	java:S100§"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.( •ÒŽ8Ú„Øž®1
+I
+java:S1172§"+Remove this unused method parameter "view".( •ÒŽ8Ú„Øž®1
\ No newline at end of file
diff --git a/.idea/sonarlint/issuestore/index.pb b/.idea/sonarlint/issuestore/index.pb
index 5177437..06f3fbd 100644
--- a/.idea/sonarlint/issuestore/index.pb
+++ b/.idea/sonarlint/issuestore/index.pb
@@ -168,4 +168,50 @@ Capp/src/main/java/net/micode/notes/gtask/remote/GTaskASyncTask.java,0\2\023468
 p
 @app/src/main/java/net/micode/notes/gtask/remote/GTaskClient.java,4\5\4529b3a97b0f3b19b895aa06f23bed63ff38a312
 q
-Aapp/src/main/java/net/micode/notes/gtask/remote/GTaskManager.java,a\b\ab153b0256bc5f6c194e188cec0b8e327e347a90
\ No newline at end of file
+Aapp/src/main/java/net/micode/notes/gtask/remote/GTaskManager.java,a\b\ab153b0256bc5f6c194e188cec0b8e327e347a90
+u
+Eapp/src/main/java/net/micode/notes/gtask/remote/GTaskSyncService.java,f\0\f087b1ba1b9c91b7293fea0fb071eaed62a42137
+b
+2app/src/main/java/net/micode/notes/model/Note.java,d\d\dd970bd8ce083850fca1d4d159647ccd110e57cb
+f
+6app/src/main/java/net/micode/notes/tool/DataUtils.java,3\2\32360bf24febc78f20db52498c7576b3d8650d56
+m
+=app/src/main/java/net/micode/notes/tool/GTaskStringUtils.java,c\4\c42ad3cd6e664963fa1849c760a57d417d500ee7
+k
+;app/src/main/java/net/micode/notes/tool/ResourceParser.java,c\6\c65f5dc8218ef1da6f6bfb5d1b14aea855a54d7f
+P
+ app/src/main/AndroidManifest.xml,8\c\8c55c3ccc257e5907959013f99656e4c8ec3903e
+h
+8app/src/main/java/net/micode/notes/tool/BackupUtils.java,a\4\a446c87b1013132f8adaf83656b582028e8809af
+i
+9app/src/main/java/net/micode/notes/model/WorkingNote.java,8\7\876016634c6642b35109680ccac740dc8271b236
+l
+<app/src/main/java/net/micode/notes/ui/NotesListActivity.java,a\d\ad72331a1bed265bb9c0fe838faa74dbf69fce32
+g
+7app/src/main/java/net/micode/notes/ui/NoteItemData.java,0\8\08c35f02f11c35ae9ebf8db0a482054dfa1cf493
+g
+7app/src/main/java/net/micode/notes/ui/NoteEditText.java,5\0\503adcf2a0be1ecdb94a15efba4433b6589877b9
+k
+;app/src/main/java/net/micode/notes/ui/NoteEditActivity.java,5\7\577f30d26378ec8a2bd2e4a43f3c79b3f04c402c
+m
+=app/src/main/java/net/micode/notes/ui/FoldersListAdapter.java,f\9\f9f49497f95afd327db7a7a512612aa1089003d4
+g
+7app/src/main/java/net/micode/notes/ui/DropdownMenu.java,d\1\d1cc822fa9d783a8d4563bf6e139b7ae10de2fb1
+o
+?app/src/main/java/net/micode/notes/ui/DateTimePickerDialog.java,2\b\2bfc771e07e87c37d3a76a2c815bc8fb30649798
+i
+9app/src/main/java/net/micode/notes/ui/DateTimePicker.java,6\c\6cbf8bd9aa98eff862b1dc067330ba66ba4493aa
+h
+8app/src/main/java/net/micode/notes/ui/AlarmReceiver.java,5\8\5836a695995df8fadacfa6409fe8d21d88946842
+l
+<app/src/main/java/net/micode/notes/ui/AlarmInitReceiver.java,0\2\0268ec648e2fc0139b30ed13396174b7392c1ae2
+k
+;app/src/main/java/net/micode/notes/ui/NotesListAdapter.java,2\8\283f16cc23da56ca65616082bc810304d3511d0a
+h
+8app/src/main/java/net/micode/notes/ui/NotesListItem.java,5\d\5dfe6902d8ec740690f88d644e74362c3be08fad
+r
+Bapp/src/main/java/net/micode/notes/ui/NotesPreferenceActivity.java,d\a\da57ce446af85bbd9aefee65e969869f0cff78b0
+t
+Dapp/src/main/java/net/micode/notes/widget/NoteWidgetProvider_2x.java,1\7\175d8fa829f0a7ced6aa11970f112de6ad144628
+q
+Aapp/src/main/java/net/micode/notes/widget/NoteWidgetProvider.java,5\8\58052a8597c5f01595e1c849728bcae66c27a1a6
\ No newline at end of file
diff --git a/.idea/sonarlint/securityhotspotstore/index.pb b/.idea/sonarlint/securityhotspotstore/index.pb
index 84ad721..0d733f5 100644
--- a/.idea/sonarlint/securityhotspotstore/index.pb
+++ b/.idea/sonarlint/securityhotspotstore/index.pb
@@ -168,4 +168,50 @@ p
 s
 Capp/src/main/java/net/micode/notes/gtask/remote/GTaskASyncTask.java,0\2\023468cfdd0b71d4098903b9070e364658e2fbcf
 q
-Aapp/src/main/java/net/micode/notes/gtask/remote/GTaskManager.java,a\b\ab153b0256bc5f6c194e188cec0b8e327e347a90
\ No newline at end of file
+Aapp/src/main/java/net/micode/notes/gtask/remote/GTaskManager.java,a\b\ab153b0256bc5f6c194e188cec0b8e327e347a90
+u
+Eapp/src/main/java/net/micode/notes/gtask/remote/GTaskSyncService.java,f\0\f087b1ba1b9c91b7293fea0fb071eaed62a42137
+b
+2app/src/main/java/net/micode/notes/model/Note.java,d\d\dd970bd8ce083850fca1d4d159647ccd110e57cb
+f
+6app/src/main/java/net/micode/notes/tool/DataUtils.java,3\2\32360bf24febc78f20db52498c7576b3d8650d56
+m
+=app/src/main/java/net/micode/notes/tool/GTaskStringUtils.java,c\4\c42ad3cd6e664963fa1849c760a57d417d500ee7
+k
+;app/src/main/java/net/micode/notes/tool/ResourceParser.java,c\6\c65f5dc8218ef1da6f6bfb5d1b14aea855a54d7f
+P
+ app/src/main/AndroidManifest.xml,8\c\8c55c3ccc257e5907959013f99656e4c8ec3903e
+i
+9app/src/main/java/net/micode/notes/model/WorkingNote.java,8\7\876016634c6642b35109680ccac740dc8271b236
+h
+8app/src/main/java/net/micode/notes/tool/BackupUtils.java,a\4\a446c87b1013132f8adaf83656b582028e8809af
+l
+<app/src/main/java/net/micode/notes/ui/NotesListActivity.java,a\d\ad72331a1bed265bb9c0fe838faa74dbf69fce32
+g
+7app/src/main/java/net/micode/notes/ui/NoteItemData.java,0\8\08c35f02f11c35ae9ebf8db0a482054dfa1cf493
+g
+7app/src/main/java/net/micode/notes/ui/NoteEditText.java,5\0\503adcf2a0be1ecdb94a15efba4433b6589877b9
+k
+;app/src/main/java/net/micode/notes/ui/NoteEditActivity.java,5\7\577f30d26378ec8a2bd2e4a43f3c79b3f04c402c
+m
+=app/src/main/java/net/micode/notes/ui/FoldersListAdapter.java,f\9\f9f49497f95afd327db7a7a512612aa1089003d4
+g
+7app/src/main/java/net/micode/notes/ui/DropdownMenu.java,d\1\d1cc822fa9d783a8d4563bf6e139b7ae10de2fb1
+o
+?app/src/main/java/net/micode/notes/ui/DateTimePickerDialog.java,2\b\2bfc771e07e87c37d3a76a2c815bc8fb30649798
+i
+9app/src/main/java/net/micode/notes/ui/DateTimePicker.java,6\c\6cbf8bd9aa98eff862b1dc067330ba66ba4493aa
+h
+8app/src/main/java/net/micode/notes/ui/AlarmReceiver.java,5\8\5836a695995df8fadacfa6409fe8d21d88946842
+l
+<app/src/main/java/net/micode/notes/ui/AlarmInitReceiver.java,0\2\0268ec648e2fc0139b30ed13396174b7392c1ae2
+k
+;app/src/main/java/net/micode/notes/ui/NotesListAdapter.java,2\8\283f16cc23da56ca65616082bc810304d3511d0a
+h
+8app/src/main/java/net/micode/notes/ui/NotesListItem.java,5\d\5dfe6902d8ec740690f88d644e74362c3be08fad
+r
+Bapp/src/main/java/net/micode/notes/ui/NotesPreferenceActivity.java,d\a\da57ce446af85bbd9aefee65e969869f0cff78b0
+t
+Dapp/src/main/java/net/micode/notes/widget/NoteWidgetProvider_2x.java,1\7\175d8fa829f0a7ced6aa11970f112de6ad144628
+q
+Aapp/src/main/java/net/micode/notes/widget/NoteWidgetProvider.java,5\8\58052a8597c5f01595e1c849728bcae66c27a1a6
\ No newline at end of file
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 752abcf..fe507c9 100644
--- a/app/src/main/java/net/micode/notes/ui/NotesListActivity.java
+++ b/app/src/main/java/net/micode/notes/ui/NotesListActivity.java
@@ -94,7 +94,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
 
     private enum ListEditState {
         NOTE_LIST, SUB_FOLDER, CALL_RECORD_FOLDER
-    };
+    }
 
     private ListEditState mState;
 
@@ -247,6 +247,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
         private Menu menu;
         private MenuItem mMoveMenu;
 
+
         public boolean onCreateActionMode(ActionMode mode, Menu menu) {
             getMenuInflater().inflate(R.menu.note_list_options, menu);
             this.menu = menu;
@@ -265,6 +266,8 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
             mAddNewNote.setVisibility(View.GONE);
             mMenuSet.setVisibility(View.GONE);
 
+            //å�–ä¸€ä¸ªè‡ªå®šä¹‰çš„è§†å›¾ï¼Œè®¾ç½®ç»™ActionModeï¼Œ
+            // å¹¶åˆ›å»ºä¸€ä¸ªDropdownMenuï¼ˆè‡ªå®šä¹‰çš„ä¸‹æ‹‰è�œå�•ï¼‰å¯¹è±¡ï¼Œå¹¶è®¾ç½®ä¸‹æ‹‰è�œå�•é¡¹çš„ç‚¹å‡»ç›‘å�¬å™¨ã€‚
             View customView = LayoutInflater.from(NotesListActivity.this).inflate(
                     R.layout.note_list_dropdown_menu, null);
             mode.setCustomView(customView);
@@ -282,6 +285,9 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
             return true;
         }
 
+        /**
+         *æ›´æ–°ä¸‹æ‹‰è�œå�•çš„æ ‡é¢˜å’Œé€‰æ‹©é¡¹çŠ¶æ€�
+         */
         private void updateMenu() {
             int selectedCount = mNotesListAdapter.getSelectedCount();
             // Update dropdown menu
@@ -309,6 +315,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
             return false;
         }
 
+        //å�–æ¶ˆé€‰æ‹©æ¨¡å¼�ï¼Œæ¸…é™¤é€‰æ‹©é¡¹ï¼Œæ�¢å¤�ä¸€äº›è§†å›¾çš„å�¯è§�æ€§ï¼Œå¹¶é€šçŸ¥é€‚é…�å™¨æ•°æ�®é›†å�˜åŒ–
         public void onDestroyActionMode(ActionMode mode) {
             mNotesListAdapter.setChoiceMode(false);
             mNotesListView.clearChoices();
@@ -349,6 +356,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
         }
 
         public boolean onMenuItemClick(MenuItem item) {
+            //åˆ¤æ–­æ˜¯å�¦æœ‰é€‰ä¸­çš„é¡¹ï¼Œå¦‚æžœæ²¡æœ‰åˆ™å¼¹å‡ºä¸€ä¸ªToastæ��ç¤ºç”¨æˆ·é€‰æ‹©é¡¹ä¸ºç©º
             if (mNotesListAdapter.getSelectedCount() == 0) {
                 Toast.makeText(NotesListActivity.this, getString(R.string.menu_select_none),
                         Toast.LENGTH_SHORT).show();
@@ -357,11 +365,13 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
 
             switch (item.getItemId()) {
                 case R.id.delete:
+                    //åˆ›å»ºä¸€ä¸ªå¯¹è¯�æ¡†ï¼Œå¹¶è®¾ç½®æ ‡é¢˜ã€�å›¾æ ‡å’Œæ­£æ–‡ä¿¡æ�¯
                     AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this);
                     builder.setTitle(getString(R.string.alert_title_delete));
                     builder.setIcon(android.R.drawable.ic_dialog_alert);
                     builder.setMessage(getString(R.string.alert_message_delete_notes,
                                              mNotesListAdapter.getSelectedCount()));
+                    //ç¡®è®¤æŒ‰é’®è¢«ç‚¹å‡»æ—¶ï¼Œè°ƒç”¨batchDelete()æ–¹æ³•æ‰¹é‡�åˆ é™¤é€‰ä¸­çš„é¡¹ï¼›å�–æ¶ˆæŒ‰é’®åˆ™å…³é—­å¯¹è¯�æ¡†ã€‚
                     builder.setPositiveButton(android.R.string.ok,
                                              new DialogInterface.OnClickListener() {
                                                  public void onClick(DialogInterface dialog,
@@ -372,6 +382,9 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
                     builder.setNegativeButton(android.R.string.cancel, null);
                     builder.show();
                     break;
+                //å¦‚æžœæ˜¯ç§»åŠ¨è�œå�•é¡¹ï¼Œåˆ™è°ƒç”¨startQueryDestinationFolders()æ–¹æ³•ï¼Œ
+                // è¯¥æ–¹æ³•ä¼šå¼€å�¯å¼‚æ­¥çº¿ç¨‹ï¼Œå¹¶æŸ¥è¯¢æ‰€æœ‰çš„ç›®æ ‡æ–‡ä»¶å¤¹ï¼Œ
+                // æŸ¥è¯¢ç»“æžœä¼šåœ¨å›žè°ƒå‡½æ•°onQueryComplete()ä¸­å¾—åˆ°å¤„ç�†å’Œå±•ç¤º
                 case R.id.move:
                     startQueryDestinationFolders();
                     break;
@@ -381,12 +394,20 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
             return true;
         }
     }
-    
 
+
+    /**
+     *å†™ä¾¿ç­¾çš„ç›‘å�¬
+     */
     private class NewNoteOnTouchListener implements OnTouchListener {
 
         public boolean onTouch(View v, MotionEvent event) {
             switch (event.getAction()) {
+                //å½“ç”¨æˆ·æŒ‰ä¸‹æ‰‹æŒ‡æ—¶è§¦å�‘ã€‚
+                // æ ¹æ�®å±�å¹•å’Œ"New Note"è§†å›¾çš„é«˜åº¦è®¡ç®—å‡ºå¼€å§‹ä½�ç½®å’Œäº‹ä»¶Yå��æ ‡ã€‚
+                // å¦‚æžœå½“å‰�çŠ¶æ€�æ˜¯ListEditState.SUB_FOLDERï¼ˆåˆ—è¡¨ç¼–è¾‘çŠ¶æ€�ä¸ºå­�æ–‡ä»¶å¤¹ï¼‰ï¼Œ
+                // åˆ™å‡�åŽ»æ ‡é¢˜æ �çš„é«˜åº¦ã€‚ç„¶å�Žæ£€æŸ¥æ˜¯å�¦ç‚¹å‡»äº†"New Note"æŒ‰é’®çš„é€�æ˜Žéƒ¨åˆ†ï¼Œ
+                // å¦‚æžœæ˜¯ï¼Œåˆ™å°†äº‹ä»¶åˆ†æ´¾ç»™æŒ‰é’®å�Žé�¢çš„åˆ—è¡¨è§†å›¾ã€‚
                 case MotionEvent.ACTION_DOWN: {
                     Display display = getWindowManager().getDefaultDisplay();
                     int screenHeight = display.getHeight();
@@ -423,6 +444,8 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
                     }
                     break;
                 }
+                //å½“ç”¨æˆ·æ»‘åŠ¨æ‰‹æŒ‡æ—¶è§¦å�‘ã€‚å¦‚æžœä¹‹å‰�å·²ç»�åˆ†æ´¾äº†äº‹ä»¶ï¼ˆå�³mDispatchä¸ºtrueï¼‰ï¼Œ
+                // åˆ™æ›´æ–°åˆ†æ´¾Yå��æ ‡å¹¶å°†äº‹ä»¶é‡�æ–°å®šä½�ï¼Œç„¶å�Žå°†å…¶åˆ†æ´¾ç»™åˆ—è¡¨è§†å›¾ã€‚
                 case MotionEvent.ACTION_MOVE: {
                     if (mDispatch) {
                         mDispatchY += (int) event.getY() - mOriginY;
@@ -431,6 +454,8 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
                     }
                     break;
                 }
+                //å½“ç”¨æˆ·é‡Šæ”¾æ‰‹æŒ‡æ—¶è§¦å�‘ã€‚
+                // å¦‚æžœä¹‹å‰�å·²ç»�åˆ†æ´¾äº†äº‹ä»¶ï¼ˆå�³mDispatchä¸ºtrueï¼‰ï¼Œåˆ™å°†äº‹ä»¶é‡�æ–°å®šä½�å¹¶å�–æ¶ˆåˆ†æ´¾ã€‚
                 default: {
                     if (mDispatch) {
                         event.setLocation(event.getX(), mDispatchY);
@@ -443,8 +468,11 @@ 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;
@@ -454,6 +482,10 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
                 }, NoteColumns.TYPE + " DESC," + NoteColumns.MODIFIED_DATE + " DESC");
     }
 
+    /**
+     * æ‰§è¡Œå�Žå�°æŸ¥è¯¢æ“�ä½œ
+     */
+    @SuppressLint("HandlerLeak")
     private final class BackgroundQueryHandler extends AsyncQueryHandler {
         public BackgroundQueryHandler(ContentResolver contentResolver) {
             super(contentResolver);
@@ -478,6 +510,10 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
         }
     }
 
+    /**
+     * æ˜¾ç¤ºæ–‡ä»¶å¤¹åˆ—è¡¨çš„è�œå�•ï¼Œä¾›ç”¨æˆ·é€‰æ‹©å°†ä¾¿ç­¾ç§»åŠ¨åˆ°å“ªä¸ªæ–‡ä»¶å¤¹ä¸­ã€‚
+     * @param cursor
+     */
     private void showFolderListMenu(Cursor cursor) {
         AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this);
         builder.setTitle(R.string.menu_title_select_folder);
@@ -506,6 +542,9 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
         this.startActivityForResult(intent, REQUEST_CODE_NEW_NODE);
     }
 
+    /**
+     * æ‰¹é‡�åˆ é™¤ä¾¿ç­¾
+     */
     @SuppressLint("StaticFieldLeak")
     private void batchDelete() {
         new AsyncTask<Void, Void, HashSet<AppWidgetAttribute>>() {
@@ -606,6 +645,9 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
         }
     }
 
+    /**
+     * æ˜¾ç¤ºè½¯é”®ç›˜
+     */
     private void showSoftInput() {
         InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
         if (inputMethodManager != null) {
@@ -618,6 +660,11 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
         inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
     }
 
+
+    /**
+     * æ˜¾ç¤ºåˆ›å»ºæˆ–ç¼–è¾‘æ–‡ä»¶å¤¹å¯¹è¯�æ¡†
+     * @param create
+     */
     private void showCreateOrModifyFolderDialog(final boolean create) {
         final AlertDialog.Builder builder = new AlertDialog.Builder(this);
         View view = LayoutInflater.from(this).inflate(R.layout.dialog_edit_text, null);
@@ -731,6 +778,11 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
         }
     }
 
+    /**
+     * æ›´æ–°æŒ‡å®šæ ‡è¯†çš„å°�éƒ¨ä»¶
+     * @param appWidgetId
+     * @param appWidgetType
+     */
     private void updateWidget(int appWidgetId, int appWidgetType) {
         Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
         if (appWidgetType == Notes.TYPE_WIDGET_2X) {
@@ -750,6 +802,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
         setResult(RESULT_OK, intent);
     }
 
+
     private final OnCreateContextMenuListener mFolderOnCreateContextMenuListener = new OnCreateContextMenuListener() {
         public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
             if (mFocusNoteDataItem != null) {
@@ -803,6 +856,11 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
         return true;
     }
 
+    /**
+     * æ ¹æ�®å½“å‰�çŠ¶æ€� mState çš„ä¸�å�Œï¼Œåœ¨è�œå�•å‡†å¤‡æ˜¾ç¤ºæ—¶æ ¹æ�®çŠ¶æ€�å¡«å……ä¸�å�Œçš„è�œå�•é¡¹ï¼Œå¹¶æ ¹æ�®æ�¡ä»¶è®¾ç½®æŒ‡å®šè�œå�•é¡¹çš„æ ‡é¢˜ã€‚
+     * @param menu
+     * @return
+     */
     @Override
     public boolean onPrepareOptionsMenu(Menu menu) {
         menu.clear();
@@ -867,6 +925,10 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
         return true;
     }
 
+    /**
+     * å¯¼å‡ºç¬”è®°åˆ°æ–‡æœ¬æ–‡ä»¶
+     */
+    @SuppressLint("StaticFieldLeak")
     private void exportNoteToText() {
         final BackupUtils backup = BackupUtils.getInstance(NotesListActivity.this);
         new AsyncTask<Void, Void, Integer>() {
@@ -960,6 +1022,9 @@ 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:
