From 20c7adb309b47f5e4dab113a2a3dbc86dd0819b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=B2=9A=E9=A6=A8?= <13450313+xiaolanxiner@user.noreply.giitee.com> Date: Mon, 25 Sep 2023 21:49:43 +0800 Subject: [PATCH 1/4] try9.25 --- .../0443b0f98e2a8a605b866a1b1bef7e47c8c8ea8e | 29 +++++++ .../08962fe591286696ecd017e3adc4630c1217309b | 11 +++ .../19661b4b3ff75e064358871f8409e1a1eef63bf6 | 9 +++ .../1a4e3da7b86cbac8cbaa0189939fbddcc15fe216 | 16 ++++ .../32e993b9c4de8af917eefa04505aeda3d70c1aff | 39 +++++++++ .../41b8b7f348f46f3b57551e41c1bbe95463dbc90e | 13 +++ .../9b151666a10c2718f853e6607b8d80e85becee16 | 74 ++++++++--------- .../d63b8495246ee14beb91a1f887d1ff4a009634d3 | 11 +++ .../.idea/sonarlint/issuestore/index.pb | 16 +++- .../0443b0f98e2a8a605b866a1b1bef7e47c8c8ea8e | 0 .../08962fe591286696ecd017e3adc4630c1217309b | 0 .../19661b4b3ff75e064358871f8409e1a1eef63bf6 | 0 .../1a4e3da7b86cbac8cbaa0189939fbddcc15fe216 | 0 .../32e993b9c4de8af917eefa04505aeda3d70c1aff | 0 .../41b8b7f348f46f3b57551e41c1bbe95463dbc90e | 0 .../d63b8495246ee14beb91a1f887d1ff4a009634d3 | 0 .../sonarlint/securityhotspotstore/index.pb | 16 +++- .../src/net/micode/notes/ui/NoteItemData.java | 5 ++ .../micode/notes/ui/NotesListActivity.java | 79 ++++++++++++------- .../net/micode/notes/ui/NotesListAdapter.java | 27 +++++-- 20 files changed, 273 insertions(+), 72 deletions(-) create mode 100644 src/xiaomi/.idea/sonarlint/issuestore/0/4/0443b0f98e2a8a605b866a1b1bef7e47c8c8ea8e create mode 100644 src/xiaomi/.idea/sonarlint/issuestore/0/8/08962fe591286696ecd017e3adc4630c1217309b create mode 100644 src/xiaomi/.idea/sonarlint/issuestore/1/9/19661b4b3ff75e064358871f8409e1a1eef63bf6 create mode 100644 src/xiaomi/.idea/sonarlint/issuestore/1/a/1a4e3da7b86cbac8cbaa0189939fbddcc15fe216 create mode 100644 src/xiaomi/.idea/sonarlint/issuestore/3/2/32e993b9c4de8af917eefa04505aeda3d70c1aff create mode 100644 src/xiaomi/.idea/sonarlint/issuestore/4/1/41b8b7f348f46f3b57551e41c1bbe95463dbc90e create mode 100644 src/xiaomi/.idea/sonarlint/issuestore/d/6/d63b8495246ee14beb91a1f887d1ff4a009634d3 create mode 100644 src/xiaomi/.idea/sonarlint/securityhotspotstore/0/4/0443b0f98e2a8a605b866a1b1bef7e47c8c8ea8e create mode 100644 src/xiaomi/.idea/sonarlint/securityhotspotstore/0/8/08962fe591286696ecd017e3adc4630c1217309b create mode 100644 src/xiaomi/.idea/sonarlint/securityhotspotstore/1/9/19661b4b3ff75e064358871f8409e1a1eef63bf6 create mode 100644 src/xiaomi/.idea/sonarlint/securityhotspotstore/1/a/1a4e3da7b86cbac8cbaa0189939fbddcc15fe216 create mode 100644 src/xiaomi/.idea/sonarlint/securityhotspotstore/3/2/32e993b9c4de8af917eefa04505aeda3d70c1aff create mode 100644 src/xiaomi/.idea/sonarlint/securityhotspotstore/4/1/41b8b7f348f46f3b57551e41c1bbe95463dbc90e create mode 100644 src/xiaomi/.idea/sonarlint/securityhotspotstore/d/6/d63b8495246ee14beb91a1f887d1ff4a009634d3 diff --git a/src/xiaomi/.idea/sonarlint/issuestore/0/4/0443b0f98e2a8a605b866a1b1bef7e47c8c8ea8e b/src/xiaomi/.idea/sonarlint/issuestore/0/4/0443b0f98e2a8a605b866a1b1bef7e47c8c8ea8e new file mode 100644 index 0000000..ead3490 --- /dev/null +++ b/src/xiaomi/.idea/sonarlint/issuestore/0/4/0443b0f98e2a8a605b866a1b1bef7e47c8c8ea8e @@ -0,0 +1,29 @@ + +g +java:S1301"KReplace this "switch" statement by "if" statements to increase readability.(۫ +X +java:S18749"=Remove this use of "FLAG_SHOW_WHEN_LOCKED"; it is deprecated.( +Q +java:S1874=";Remove this use of "FLAG_TURN_SCREEN_ON"; it is deprecated.( +Z +java:S1874?"?Remove this use of "FLAG_LAYOUT_INSET_DECOR"; it is deprecated.( +H +java:S1874["2Remove this use of "isScreenOn"; it is deprecated.( +O +java:S1874e":Remove this use of "setAudioStreamType"; it is deprecated.(0 +U +java:S1874g":Remove this use of "setAudioStreamType"; it is deprecated.(Ũ +` +java:S2147q"ECombine this catch with the one at line 110, which has the same body.( +[ +java:S2147t"ECombine this catch with the one at line 113, which has the same body.( +[ +java:S2147w"ECombine this catch with the one at line 116, which has the same body.(ﭣ +M +java:S1135o"2Complete the task associated to this TODO comment.(̐ +M +java:S1135r"2Complete the task associated to this TODO comment.(̐ +M +java:S1135u"2Complete the task associated to this TODO comment.(̐ +M +java:S1135x"2Complete the task associated to this TODO comment.(̐ \ No newline at end of file diff --git a/src/xiaomi/.idea/sonarlint/issuestore/0/8/08962fe591286696ecd017e3adc4630c1217309b b/src/xiaomi/.idea/sonarlint/issuestore/0/8/08962fe591286696ecd017e3adc4630c1217309b new file mode 100644 index 0000000..280a82e --- /dev/null +++ b/src/xiaomi/.idea/sonarlint/issuestore/0/8/08962fe591286696ecd017e3adc4630c1217309b @@ -0,0 +1,11 @@ + +t +java:S2293)"YReplace the type specification in this constructor call with the diamond operator ("<>").( +P +java:S1118":Add a private constructor to hide the implicit public one.( +q +java:S3252!"VUse static access with "android.provider.ContactsContract$DataColumns" for "MIMETYPE".( +r +java:S3252""\Use static access with "android.provider.ContactsContract$DataColumns" for "RAW_CONTACT_ID".( +t +java:S32524"^Use static access with "android.provider.ContactsContract$ContactsColumns" for "DISPLAY_NAME".( \ No newline at end of file diff --git a/src/xiaomi/.idea/sonarlint/issuestore/1/9/19661b4b3ff75e064358871f8409e1a1eef63bf6 b/src/xiaomi/.idea/sonarlint/issuestore/1/9/19661b4b3ff75e064358871f8409e1a1eef63bf6 new file mode 100644 index 0000000..2b0284e --- /dev/null +++ b/src/xiaomi/.idea/sonarlint/issuestore/1/9/19661b4b3ff75e064358871f8409e1a1eef63bf6 @@ -0,0 +1,9 @@ + +m +java:S37764"RRefactor this method to reduce its Cognitive Complexity from 16 to the 15 allowed.( +O +java:S1874@"9Remove this use of "setTextAppearance"; it is deprecated.( +O +java:S1874G"9Remove this use of "setTextAppearance"; it is deprecated.( +O +java:S1874Q"9Remove this use of "setTextAppearance"; it is deprecated.( \ No newline at end of file diff --git a/src/xiaomi/.idea/sonarlint/issuestore/1/a/1a4e3da7b86cbac8cbaa0189939fbddcc15fe216 b/src/xiaomi/.idea/sonarlint/issuestore/1/a/1a4e3da7b86cbac8cbaa0189939fbddcc15fe216 new file mode 100644 index 0000000..1adb464 --- /dev/null +++ b/src/xiaomi/.idea/sonarlint/issuestore/1/a/1a4e3da7b86cbac8cbaa0189939fbddcc15fe216 @@ -0,0 +1,16 @@ + +V java:S125"").(ə +o +java:S2293d"YReplace the type specification in this constructor call with the diamond operator ("<>").( +o +java:S2293t"YReplace the type specification in this constructor call with the diamond operator ("<>").(Ȫ +J +java:S1066\"/Merge this if statement with the enclosing one.(ڧ + +java:S1319c"mThe return type of this method should be an interface such as "Set" rather than the implementation "HashSet".( + +java:S1319s"mThe return type of this method should be an interface such as "Set" rather than the implementation "HashSet".( +j +java:S1104*"TMake widgetId a static final constant or non-public and provide accessors if needed.(ǎ +q +java:S1104+"VMake widgetType a static final constant or non-public and provide accessors if needed.(漬 +C +java:S5411f"(Use a primitive boolean expression here.(ɯ +C +java:S5411v"(Use a primitive boolean expression here.(ɯ +D +java:S5411"(Use a primitive boolean expression here.( +7 +java:S1116,"Remove this empty statement.( +D +java:S1874/".Remove this use of ""; it is deprecated.( +J +java:S2864e"4Iterate over the "entrySet" instead of the "keySet".(਷ +B +java:S1125f"'Remove the unnecessary boolean literal.(ɯ +J +java:S2864u"4Iterate over the "entrySet" instead of the "keySet".(਷ +B +java:S1125v"'Remove the unnecessary boolean literal.(ɯ +B +java:S1168"+Return an empty collection instead of null.( +C +java:S1125"'Remove the unnecessary boolean literal.( \ No newline at end of file diff --git a/src/xiaomi/.idea/sonarlint/issuestore/4/1/41b8b7f348f46f3b57551e41c1bbe95463dbc90e b/src/xiaomi/.idea/sonarlint/issuestore/4/1/41b8b7f348f46f3b57551e41c1bbe95463dbc90e new file mode 100644 index 0000000..7181765 --- /dev/null +++ b/src/xiaomi/.idea/sonarlint/issuestore/4/1/41b8b7f348f46f3b57551e41c1bbe95463dbc90e @@ -0,0 +1,13 @@ + +f +java:S11929"KDefine a constant instead of duplicating this literal "content://" 4 times.( +U +java:S11181":Add a private constructor to hide the implicit public one.(͓ +^ +java:S1214@"CMove constants defined in this interfaces to another class or enum.(⸫ +Z +java:S1214"CMove constants defined in this interfaces to another class or enum.( +V +java:S1118":Add a private constructor to hide the implicit public one.( +Q +java:S1118":Add a private constructor to hide the implicit public one.(߀ \ No newline at end of file diff --git a/src/xiaomi/.idea/sonarlint/issuestore/9/b/9b151666a10c2718f853e6607b8d80e85becee16 b/src/xiaomi/.idea/sonarlint/issuestore/9/b/9b151666a10c2718f853e6607b8d80e85becee16 index 72d562c..940b772 100644 --- a/src/xiaomi/.idea/sonarlint/issuestore/9/b/9b151666a10c2718f853e6607b8d80e85becee16 +++ b/src/xiaomi/.idea/sonarlint/issuestore/9/b/9b151666a10c2718f853e6607b8d80e85becee16 @@ -1,72 +1,74 @@ w -java:S2293"YReplace the type specification in this constructor call with the diamond operator ("<>").(艥8۪1 +java:S2293"YReplace the type specification in this constructor call with the diamond operator ("<>").(艥81 n -java:S1301"KReplace this "switch" statement by "if" statements to increase readability.(ד8۪1 +java:S1301"KReplace this "switch" statement by "if" statements to increase readability.(ד81 > -java:S1116e"Remove this empty statement.(8Ū۪1 +java:S1116e"Remove this empty statement.(81 h -java:S1124"EReorder the modifiers to comply with the Java Language Specification.(8Ǫ۪1 +java:S1124"EReorder the modifiers to comply with the Java Language Specification.(81 b -java:S1124"EReorder the modifiers to comply with the Java Language Specification.(Ѿk8Ǫ۪1 +java:S1124"EReorder the modifiers to comply with the Java Language Specification.(Ѿk81 u -java:S3776"RRefactor this method to reduce its Cognitive Complexity from 17 to the 15 allowed.(8Ѫ۪1 +java:S3776"RRefactor this method to reduce its Cognitive Complexity from 17 to the 15 allowed.(81 9 -java:S3626"Remove this redundant jump.(݅8Ѫ۪1 +java:S3626"Remove this redundant jump.(݅81 9 -java:S3626"Remove this redundant jump.(݅8Ѫ۪1 +java:S3626"Remove this redundant jump.(݅81 9 -java:S3626"Remove this redundant jump.(݅8Ҫ۪1 +java:S3626"Remove this redundant jump.(݅81 W -java:S1874"9Remove this use of "PreferenceManager"; it is deprecated.(­8ժ۪1 +java:S1874"9Remove this use of "PreferenceManager"; it is deprecated.(­81 a -java:S1874"CRemove this use of "getDefaultSharedPreferences"; it is deprecated.(­8֪۪1 +java:S1874"CRemove this use of "getDefaultSharedPreferences"; it is deprecated.(­81 U -java:S1135"2Complete the task associated to this TODO comment.(̐8ު۪1 +java:S1135"2Complete the task associated to this TODO comment.(̐81 M -java:S2093"*Change this "try" to a try-with-resources.(8ު۪1 +java:S2093"*Change this "try" to a try-with-resources.(81 v -java:S1450"XRemove the "mMoveMenu" field and declare it as a local variable in the relevant methods.(8۪1 +java:S1450"XRemove the "mMoveMenu" field and declare it as a local variable in the relevant methods.(81 u -java:S3252"RUse static access with "android.widget.AbsListView" for "MultiChoiceModeListener".(8۪1 +java:S3252"RUse static access with "android.widget.AbsListView" for "MultiChoiceModeListener".(81 U -java:S1135"2Complete the task associated to this TODO comment.(8۪1 +java:S1135"2Complete the task associated to this TODO comment.(81 U -java:S1135"2Complete the task associated to this TODO comment.(8۪1 +java:S1135"2Complete the task associated to this TODO comment.(81 \ -java:S1874"9Remove this use of "getDefaultDisplay"; it is deprecated.(ĸ8۪1 +java:S1874"9Remove this use of "getDefaultDisplay"; it is deprecated.(ĸ81 T -java:S1874"1Remove this use of "getHeight"; it is deprecated.(8۪1 +java:S1874"1Remove this use of "getHeight"; it is deprecated.(81 ? -java:S1116"Remove this empty statement.(8۪1 +java:S1116"Remove this empty statement.(81 p -java:S3776"RRefactor this method to reduce its Cognitive Complexity from 20 to the 15 allowed.(8۪1 +java:S3776"RRefactor this method to reduce its Cognitive Complexity from 20 to the 15 allowed.(81 J -java:S1874".Remove this use of ""; it is deprecated.(?8۪1 -F java:S108")Either remove or fill this block of code.(ʥ8۪1 +java:S1874".Remove this use of ""; it is deprecated.(?81 +F java:S108")Either remove or fill this block of code.(ʥ81 +h +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 +java:S1874"/Remove this use of "execute"; it is deprecated.(嫏81 o -java:S3776"RRefactor this method to reduce its Cognitive Complexity from 17 to the 15 allowed.(#8۪1 +java:S3776"RRefactor this method to reduce its Cognitive Complexity from 17 to the 15 allowed.(#81 U -java:S1135"2Complete the task associated to this TODO comment.(8۪ͫ1 +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 +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 +java:S1135"2Complete the task associated to this TODO comment.(8ǵ1 Q -java:S1874".Remove this use of ""; it is deprecated.(Ч8۪1 +java:S1874".Remove this use of ""; it is deprecated.(Ч8ֵ1 m -java:S1874"JDon't override a deprecated method or explicitly mark it as "@Deprecated".(ች8۪1 +java:S1874"JDon't override a deprecated method or explicitly mark it as "@Deprecated".(ች81 R -java:S1874"/Remove this use of "execute"; it is deprecated.(嫏8۪1 +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 +java:S3776"RRefactor this method to reduce its Cognitive Complexity from 18 to the 15 allowed.(b8۵1 C -java:S3398"%Move this method into "ModeCallback".(8۪1 +java:S3398"%Move this method into "ModeCallback".(8ൔ1 H -java:S3398"%Move this method into "ModeCallback".(8۪1 +java:S3398"%Move this method into "ModeCallback".(8ൔ1 R -java:S3398"/Move this method into "BackgroundQueryHandler".(8۪1 +java:S3398"/Move this method into "BackgroundQueryHandler".(8ൔ1 N -java:S3398"0Move this method into "OnListItemClickListener".(8۪1 \ No newline at end of file +java:S3398"0Move this method into "OnListItemClickListener".(8ൔ1 \ No newline at end of file diff --git a/src/xiaomi/.idea/sonarlint/issuestore/d/6/d63b8495246ee14beb91a1f887d1ff4a009634d3 b/src/xiaomi/.idea/sonarlint/issuestore/d/6/d63b8495246ee14beb91a1f887d1ff4a009634d3 new file mode 100644 index 0000000..c100822 --- /dev/null +++ b/src/xiaomi/.idea/sonarlint/issuestore/d/6/d63b8495246ee14beb91a1f887d1ff4a009634d3 @@ -0,0 +1,11 @@ + +s +java:S4144"\Update this method so that its implementation is not identical to "getParentId" on line 185.( +> +java:S1125T"(Remove the unnecessary boolean literals.( +m +java:S3776p"RRefactor this method to reduce its Cognitive Complexity from 18 to the 15 allowed.( +C +java:S1125q"(Remove the unnecessary boolean literals.( +> +java:S1125r"(Remove the unnecessary boolean literals.( \ No newline at end of file diff --git a/src/xiaomi/.idea/sonarlint/issuestore/index.pb b/src/xiaomi/.idea/sonarlint/issuestore/index.pb index 104075c..d1e682a 100644 --- a/src/xiaomi/.idea/sonarlint/issuestore/index.pb +++ b/src/xiaomi/.idea/sonarlint/issuestore/index.pb @@ -6,4 +6,18 @@ Tapp/src/main/java/com/example/notes_master/src/net/micode/notes/ui/DropdownMenu < build.gradle,f\0\f07866736216be0ee2aba49e392191aeae700a35 @ -local.properties,0\7\0712df971a99ac4d2fccb8e0fb19f377f3374cca \ No newline at end of file +local.properties,0\7\0712df971a99ac4d2fccb8e0fb19f377f3374cca + +Qapp/src/main/java/com/example/notes_master/src/net/micode/notes/data/Contact.java,0\8\08962fe591286696ecd017e3adc4630c1217309b + +`app/src/main/java/com/example/notes_master/src/net/micode/notes/gtask/remote/GTaskASyncTask.java,1\a\1a4e3da7b86cbac8cbaa0189939fbddcc15fe216 + +Zapp/src/main/java/com/example/notes_master/src/net/micode/notes/ui/AlarmAlertActivity.java,0\4\0443b0f98e2a8a605b866a1b1bef7e47c8c8ea8e + +Tapp/src/main/java/com/example/notes_master/src/net/micode/notes/ui/NoteItemData.java,d\6\d63b8495246ee14beb91a1f887d1ff4a009634d3 + +Xapp/src/main/java/com/example/notes_master/src/net/micode/notes/ui/NotesListAdapter.java,3\2\32e993b9c4de8af917eefa04505aeda3d70c1aff + +Oapp/src/main/java/com/example/notes_master/src/net/micode/notes/data/Notes.java,4\1\41b8b7f348f46f3b57551e41c1bbe95463dbc90e + +Uapp/src/main/java/com/example/notes_master/src/net/micode/notes/ui/NotesListItem.java,1\9\19661b4b3ff75e064358871f8409e1a1eef63bf6 \ No newline at end of file diff --git a/src/xiaomi/.idea/sonarlint/securityhotspotstore/0/4/0443b0f98e2a8a605b866a1b1bef7e47c8c8ea8e b/src/xiaomi/.idea/sonarlint/securityhotspotstore/0/4/0443b0f98e2a8a605b866a1b1bef7e47c8c8ea8e new file mode 100644 index 0000000..e69de29 diff --git a/src/xiaomi/.idea/sonarlint/securityhotspotstore/0/8/08962fe591286696ecd017e3adc4630c1217309b b/src/xiaomi/.idea/sonarlint/securityhotspotstore/0/8/08962fe591286696ecd017e3adc4630c1217309b new file mode 100644 index 0000000..e69de29 diff --git a/src/xiaomi/.idea/sonarlint/securityhotspotstore/1/9/19661b4b3ff75e064358871f8409e1a1eef63bf6 b/src/xiaomi/.idea/sonarlint/securityhotspotstore/1/9/19661b4b3ff75e064358871f8409e1a1eef63bf6 new file mode 100644 index 0000000..e69de29 diff --git a/src/xiaomi/.idea/sonarlint/securityhotspotstore/1/a/1a4e3da7b86cbac8cbaa0189939fbddcc15fe216 b/src/xiaomi/.idea/sonarlint/securityhotspotstore/1/a/1a4e3da7b86cbac8cbaa0189939fbddcc15fe216 new file mode 100644 index 0000000..e69de29 diff --git a/src/xiaomi/.idea/sonarlint/securityhotspotstore/3/2/32e993b9c4de8af917eefa04505aeda3d70c1aff b/src/xiaomi/.idea/sonarlint/securityhotspotstore/3/2/32e993b9c4de8af917eefa04505aeda3d70c1aff new file mode 100644 index 0000000..e69de29 diff --git a/src/xiaomi/.idea/sonarlint/securityhotspotstore/4/1/41b8b7f348f46f3b57551e41c1bbe95463dbc90e b/src/xiaomi/.idea/sonarlint/securityhotspotstore/4/1/41b8b7f348f46f3b57551e41c1bbe95463dbc90e new file mode 100644 index 0000000..e69de29 diff --git a/src/xiaomi/.idea/sonarlint/securityhotspotstore/d/6/d63b8495246ee14beb91a1f887d1ff4a009634d3 b/src/xiaomi/.idea/sonarlint/securityhotspotstore/d/6/d63b8495246ee14beb91a1f887d1ff4a009634d3 new file mode 100644 index 0000000..e69de29 diff --git a/src/xiaomi/.idea/sonarlint/securityhotspotstore/index.pb b/src/xiaomi/.idea/sonarlint/securityhotspotstore/index.pb index 104075c..d675dbb 100644 --- a/src/xiaomi/.idea/sonarlint/securityhotspotstore/index.pb +++ b/src/xiaomi/.idea/sonarlint/securityhotspotstore/index.pb @@ -6,4 +6,18 @@ Tapp/src/main/java/com/example/notes_master/src/net/micode/notes/ui/DropdownMenu < build.gradle,f\0\f07866736216be0ee2aba49e392191aeae700a35 @ -local.properties,0\7\0712df971a99ac4d2fccb8e0fb19f377f3374cca \ No newline at end of file +local.properties,0\7\0712df971a99ac4d2fccb8e0fb19f377f3374cca + +Qapp/src/main/java/com/example/notes_master/src/net/micode/notes/data/Contact.java,0\8\08962fe591286696ecd017e3adc4630c1217309b + +`app/src/main/java/com/example/notes_master/src/net/micode/notes/gtask/remote/GTaskASyncTask.java,1\a\1a4e3da7b86cbac8cbaa0189939fbddcc15fe216 + +Zapp/src/main/java/com/example/notes_master/src/net/micode/notes/ui/AlarmAlertActivity.java,0\4\0443b0f98e2a8a605b866a1b1bef7e47c8c8ea8e + +Tapp/src/main/java/com/example/notes_master/src/net/micode/notes/ui/NoteItemData.java,d\6\d63b8495246ee14beb91a1f887d1ff4a009634d3 + +Oapp/src/main/java/com/example/notes_master/src/net/micode/notes/data/Notes.java,4\1\41b8b7f348f46f3b57551e41c1bbe95463dbc90e + +Xapp/src/main/java/com/example/notes_master/src/net/micode/notes/ui/NotesListAdapter.java,3\2\32e993b9c4de8af917eefa04505aeda3d70c1aff + +Uapp/src/main/java/com/example/notes_master/src/net/micode/notes/ui/NotesListItem.java,1\9\19661b4b3ff75e064358871f8409e1a1eef63bf6 \ No newline at end of file diff --git a/src/xiaomi/app/src/main/java/com/example/notes_master/src/net/micode/notes/ui/NoteItemData.java b/src/xiaomi/app/src/main/java/com/example/notes_master/src/net/micode/notes/ui/NoteItemData.java index c76ac25..fccb419 100644 --- a/src/xiaomi/app/src/main/java/com/example/notes_master/src/net/micode/notes/ui/NoteItemData.java +++ b/src/xiaomi/app/src/main/java/com/example/notes_master/src/net/micode/notes/ui/NoteItemData.java @@ -218,6 +218,11 @@ public class NoteItemData { return (mParentId == Notes.ID_CALL_RECORD_FOLDER && !TextUtils.isEmpty(mPhoneNumber)); } + /** + * 从游标对象中获取便签类型 + * @param cursor + * @return + */ public static int getNoteType(Cursor cursor) { return cursor.getInt(TYPE_COLUMN); } diff --git a/src/xiaomi/app/src/main/java/com/example/notes_master/src/net/micode/notes/ui/NotesListActivity.java b/src/xiaomi/app/src/main/java/com/example/notes_master/src/net/micode/notes/ui/NotesListActivity.java index 8ed8a56..1417f9f 100644 --- a/src/xiaomi/app/src/main/java/com/example/notes_master/src/net/micode/notes/ui/NotesListActivity.java +++ b/src/xiaomi/app/src/main/java/com/example/notes_master/src/net/micode/notes/ui/NotesListActivity.java @@ -84,9 +84,9 @@ import java.util.HashSet; public class NotesListActivity extends AppCompatActivity implements OnClickListener, OnItemLongClickListener { - private static final int FOLDER_NOTE_LIST_QUERY_TOKEN = 0; + 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; @@ -217,17 +217,17 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe private void initResources() { mContentResolver = this.getContentResolver(); mBackgroundQueryHandler = new BackgroundQueryHandler(this.getContentResolver()); - mCurrentFolderId = Notes.ID_ROOT_FOLDER; + mCurrentFolderId = Notes.ID_ROOT_FOLDER;//0 mNotesListView = (ListView) findViewById(R.id.notes_list); mNotesListView.addFooterView(LayoutInflater.from(this).inflate(R.layout.note_list_footer, null), null, false); - mNotesListView.setOnItemClickListener(new OnListItemClickListener()); - mNotesListView.setOnItemLongClickListener(this); + mNotesListView.setOnItemClickListener(new OnListItemClickListener());//单击监听器 + mNotesListView.setOnItemLongClickListener(this);//长按监听器 mNotesListAdapter = new NotesListAdapter(this); mNotesListView.setAdapter(mNotesListAdapter); mAddNewNote = (Button) findViewById(R.id.btn_new_note); - mAddNewNote.setOnClickListener(this); - mAddNewNote.setOnTouchListener(new NewNoteOnTouchListener()); + mAddNewNote.setOnClickListener(this);//“添加便签”按钮的监听器 + mAddNewNote.setOnTouchListener(new NewNoteOnTouchListener());//给按钮绑定自定义的触摸监听器 mDispatch = false; mDispatchY = 0; mOriginY = 0; @@ -235,14 +235,15 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe mState = ListEditState.NOTE_LIST; mModeCallBack = new ModeCallback(); } - + //内部类 private class ModeCallback implements ListView.MultiChoiceModeListener, OnMenuItemClickListener { private DropdownMenu mDropDownMenu; private ActionMode mActionMode; private MenuItem mMoveMenu; public boolean onCreateActionMode(ActionMode mode, Menu menu) { - getMenuInflater().inflate(R.menu.note_list_options, menu); + getMenuInflater().inflate(R.menu.note_list_options, menu);//通过调用 getMenuInflater().inflate() 方法加载菜单布局文件 R.menu.note_list_options, + // 并将菜单项添加到 menu 中。 menu.findItem(R.id.delete).setOnMenuItemClickListener(this); mMoveMenu = menu.findItem(R.id.move); if (mFocusNoteDataItem.getParentId() == Notes.ID_CALL_RECORD_FOLDER @@ -253,8 +254,8 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe mMoveMenu.setOnMenuItemClickListener(this); } mActionMode = mode; - mNotesListAdapter.setChoiceMode(true); - mNotesListView.setLongClickable(false); + mNotesListAdapter.setChoiceMode(true);//设置列表适配器的选择模式为 true,以启用多选模式。 + mNotesListView.setLongClickable(false);//将列表视图的长按点击功能禁用。 mAddNewNote.setVisibility(View.GONE); View customView = LayoutInflater.from(NotesListActivity.this).inflate( @@ -274,10 +275,13 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe return true; } + /** + * 用于更新菜单项和下拉菜单。 + */ private void updateMenu() { - int selectedCount = mNotesListAdapter.getSelectedCount(); + int selectedCount = mNotesListAdapter.getSelectedCount();//多选时选的项数 // Update dropdown menu - String format = getResources().getString(R.string.menu_select_title, selectedCount); + String format = getResources().getString(R.string.menu_select_title, selectedCount);//第二个参数是换第一个参数的占位符的 mDropDownMenu.setTitle(format); MenuItem item = mDropDownMenu.findItem(R.id.action_select_all); if (item != null) { @@ -286,7 +290,7 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe item.setTitle(R.string.menu_deselect_all); } else { item.setChecked(false); - item.setTitle(R.string.menu_select_all); + item.setTitle(R.string.menu_select_all);//全选 } } } @@ -311,6 +315,14 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe mActionMode.finish(); } + /** + * 被勾选了,或取消勾选了,就改变hashmap里的该项的value的boolean值 + * @param mode The {@link ActionMode} providing the selection mode + * @param position Adapter position of the item that was checked or unchecked + * @param id Adapter ID of the item that was checked or unchecked + * @param checked true if the item is now checked, false + * if the item is now unchecked. + */ public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) { mNotesListAdapter.setCheckedItem(position, checked); @@ -320,11 +332,11 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe public boolean onMenuItemClick(MenuItem item) { if (mNotesListAdapter.getSelectedCount() == 0) { Toast.makeText(NotesListActivity.this, getString(R.string.menu_select_none), - Toast.LENGTH_SHORT).show(); + Toast.LENGTH_SHORT).show();//没有选中项,操作无效 return true; } - switch (item.getItemId()) { + switch (item.getItemId()) {//选中的下拉菜单中的菜单项 case R.id.delete: AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); builder.setTitle(getString(R.string.alert_title_delete)); @@ -422,19 +434,32 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe }, NoteColumns.TYPE + " DESC," + NoteColumns.MODIFIED_DATE + " DESC"); } + /* + 自定义异步处理查询类,用于在后台执行查询操作并处理查询结果 + 这个类是为了避免在主线程中执行耗时的数据库查询或与内容提供者交互的操作,以确保应用程序的界面响应性能。 + */ private final class BackgroundQueryHandler extends AsyncQueryHandler { public BackgroundQueryHandler(ContentResolver contentResolver) { super(contentResolver); } + /** + * token 参数表示查询操作的标识符,用于区分不同的查询操作。 + * cookie 参数是一个可选的对象,用于在发起查询时传递额外的数据,在查询完成后原样返回,可以用于标识查询操作的上下文或其他需要的信息。 + * cursor 参数是查询返回的结果集,它是一个游标对象(Cursor),用于遍历查询结果的数据。 + * @param token the token to identify the query, passed in from + * {@link #startQuery}. + * @param cookie the cookie object passed in from {@link #startQuery}. + * @param cursor The cursor holding the results from the query. + */ @Override protected void onQueryComplete(int token, Object cookie, Cursor cursor) { switch (token) { - case FOLDER_NOTE_LIST_QUERY_TOKEN: + case FOLDER_NOTE_LIST_QUERY_TOKEN://0 对文件夹内的笔记列表进行查询操作 mNotesListAdapter.changeCursor(cursor); break; - case FOLDER_LIST_QUERY_TOKEN: - if (cursor != null && cursor.getCount() > 0) { + case FOLDER_LIST_QUERY_TOKEN://1 对文件夹列表进行查询操作 + if (cursor != null && cursor.getCount() > 0) {//有文件夹 showFolderListMenu(cursor); } else { Log.e(TAG, "Query folder failed"); @@ -448,7 +473,7 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe private void showFolderListMenu(Cursor cursor) { AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); - builder.setTitle(R.string.menu_title_select_folder); + builder.setTitle(R.string.menu_title_select_folder);//选择文件夹 final FoldersListAdapter adapter = new FoldersListAdapter(this, cursor); builder.setAdapter(adapter, new DialogInterface.OnClickListener() { @@ -458,9 +483,9 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe Toast.makeText( NotesListActivity.this, getString(R.string.format_move_notes_to_folder, - mNotesListAdapter.getSelectedCount(), + mNotesListAdapter.getSelectedCount(),//选中的要移到的便签数量 adapter.getFolderName(NotesListActivity.this, which)), - Toast.LENGTH_SHORT).show(); + Toast.LENGTH_SHORT).show();//当把文件夹中的便签移到文件夹外时,显示Toast消息“”已将所选+n+条便签移到上一级文件夹 mModeCallBack.finishActionMode(); } }); @@ -886,21 +911,21 @@ public class NotesListActivity extends AppCompatActivity implements OnClickListe public void onItemClick(AdapterView parent, View view, int position, long id) { if (view instanceof NotesListItem) { NoteItemData item = ((NotesListItem) view).getItemData(); - if (mNotesListAdapter.isInChoiceMode()) { - if (item.getType() == Notes.TYPE_NOTE) { + if (mNotesListAdapter.isInChoiceMode()) {//处于选择状态 + if (item.getType() == Notes.TYPE_NOTE) {//是便签被选中,则修改它的被选择的状态 position = position - mNotesListView.getHeaderViewsCount(); mModeCallBack.onItemCheckedStateChanged(null, position, id, !mNotesListAdapter.isSelectedItem(position)); } return; } - + //以下是不处于选择模式 switch (mState) { case NOTE_LIST: - if (item.getType() == Notes.TYPE_FOLDER + if (item.getType() == Notes.TYPE_FOLDER//是文件夹被选中,则打开文件夹 || item.getType() == Notes.TYPE_SYSTEM) { openFolder(item); - } else if (item.getType() == Notes.TYPE_NOTE) { + } else if (item.getType() == Notes.TYPE_NOTE) {//是便签被选中,则打开该便签 openNode(item); } else { Log.e(TAG, "Wrong note type in NOTE_LIST"); diff --git a/src/xiaomi/app/src/main/java/com/example/notes_master/src/net/micode/notes/ui/NotesListAdapter.java b/src/xiaomi/app/src/main/java/com/example/notes_master/src/net/micode/notes/ui/NotesListAdapter.java index 44bd3c8..e145bb1 100644 --- a/src/xiaomi/app/src/main/java/com/example/notes_master/src/net/micode/notes/ui/NotesListAdapter.java +++ b/src/xiaomi/app/src/main/java/com/example/notes_master/src/net/micode/notes/ui/NotesListAdapter.java @@ -35,7 +35,7 @@ public class NotesListAdapter extends CursorAdapter { private static final String TAG = "NotesListAdapter"; private Context mContext; private HashMap mSelectedIndex; - private int mNotesCount; + private int mNotesCount;//文件夹外的便签数量 private boolean mChoiceMode; public static class AppWidgetAttribute { @@ -55,6 +55,13 @@ public class NotesListAdapter extends CursorAdapter { return new NotesListItem(context); } + /** + * 在 bindView() 方法中,您可以获取 Cursor 中的数据,并将其设置到相应的界面元素上,例如 TextView、ImageView 等。 + * @param view Existing view, returned earlier by newView + * @param context Interface to application's global information + * @param cursor The cursor from which to get the data. The cursor is already + * moved to the correct position. + */ @Override public void bindView(View view, Context context, Cursor cursor) { if (view instanceof NotesListItem) { @@ -128,12 +135,18 @@ public class NotesListAdapter extends CursorAdapter { return itemSet; } + /** + *返回选中的便签个数(mSelectedIndex的value为true的元素个数) + * @return + */ public int getSelectedCount() { - Collection values = mSelectedIndex.values(); + Collection values = mSelectedIndex.values();//在 HashMap 中,每个键都关联一个值。 + // values 方法返回的是所有键值对中的值组成的集合,而不包括键。 + // 该集合是一个 Collection 类型,可以遍历、迭代或进行其他操作。 if (null == values) { return 0; } - Iterator iter = values.iterator(); + Iterator iter = values.iterator();//返回一个迭代器对象(Iterator类型)用于遍历集合中的元素 int count = 0; while (iter.hasNext()) { if (true == iter.next()) { @@ -164,15 +177,15 @@ public class NotesListAdapter extends CursorAdapter { @Override public void changeCursor(Cursor cursor) { super.changeCursor(cursor); - calcNotesCount(); + calcNotesCount();//为了给mNotesCount赋值,也就是计算出便签数量 } private void calcNotesCount() { - mNotesCount = 0; - for (int i = 0; i < getCount(); i++) { + mNotesCount = 0;//便签数量先赋为0 + for (int i = 0; i < getCount(); i++) {//getCount()方法是CursorAdapter中的方法,用于返回游标集中元素个数 Cursor c = (Cursor) getItem(i); if (c != null) { - if (NoteItemData.getNoteType(c) == Notes.TYPE_NOTE) { + if (NoteItemData.getNoteType(c) == Notes.TYPE_NOTE) {//0。是单纯的便签就便签数量++ mNotesCount++; } } else { From 4e51ac6b5b0e0ac64823f435bc8c113587b09b61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=B2=9A=E9=A6=A8?= <13450313+xiaolanxiner@user.noreply.giitee.com> Date: Fri, 6 Oct 2023 11:33:24 +0800 Subject: [PATCH 2/4] the second homework --- doc/修改文件夹名称用例文档.docx | Bin 0 -> 12539 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/修改文件夹名称用例文档.docx diff --git a/doc/修改文件夹名称用例文档.docx b/doc/修改文件夹名称用例文档.docx new file mode 100644 index 0000000000000000000000000000000000000000..351075ce4c975880557c60109674ca9730bb130a GIT binary patch literal 12539 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