newest
This commit is contained in:
parent
63744eba7c
commit
5f45fb0b02
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,14 +1,14 @@
|
||||||
|
|
||||||
|
?squid:S1148Q"#Use a logger to log this exception.(€ÉÔ…ýÿÿÿÿ
|
||||||
|
@squid:S1148€"#Use a logger to log this exception.(€ÉÔ…ýÿÿÿÿ
|
||||||
?squid:S1148w"#Use a logger to log this exception.(€ÉÔ…ýÿÿÿÿ
|
?squid:S1148w"#Use a logger to log this exception.(€ÉÔ…ýÿÿÿÿ
|
||||||
asquid:S2147x"ECombine this catch with the one at line 117, which has the same body.(ÿëÛßúÿÿÿÿ
|
asquid:S2147x"ECombine this catch with the one at line 117, which has the same body.(ÿëÛßúÿÿÿÿ
|
||||||
?squid:S1148}"#Use a logger to log this exception.(€ÉÔ…ýÿÿÿÿ
|
|
||||||
?squid:S1148z"#Use a logger to log this exception.(€ÉÔ…ýÿÿÿÿ
|
?squid:S1148z"#Use a logger to log this exception.(€ÉÔ…ýÿÿÿÿ
|
||||||
hsquid:S1301<18>"KReplace this "switch" statement by "if" statements to increase readability.(öÛ«°þÿÿÿÿ
|
|
||||||
\squid:S2147{"ECombine this catch with the one at line 117, which has the same body.(‚ùïÄ
|
|
||||||
Nsquid:S1135"2Complete the task associated to this TODO comment.(ÕÌ<C395>®þÿÿÿÿ
|
|
||||||
Nsquid:S1135v"2Complete the task associated to this TODO comment.(ÕÌ<C395>®þÿÿÿÿ
|
|
||||||
?squid:S1148Q"#Use a logger to log this exception.(€ÉÔ…ýÿÿÿÿ
|
|
||||||
Nsquid:S1135|"2Complete the task associated to this TODO comment.(ÕÌ<C395>®þÿÿÿÿ
|
|
||||||
Nsquid:S1135y"2Complete the task associated to this TODO comment.(ÕÌ<C395>®þÿÿÿÿ
|
|
||||||
@squid:S1148€"#Use a logger to log this exception.(€ÉÔ…ýÿÿÿÿ
|
|
||||||
\squid:S2147~"ECombine this catch with the one at line 117, which has the same body.(ï£Ä
|
\squid:S2147~"ECombine this catch with the one at line 117, which has the same body.(ï£Ä
|
||||||
|
Nsquid:S1135|"2Complete the task associated to this TODO comment.(ÕÌ<C395>®þÿÿÿÿ
|
||||||
|
Nsquid:S1135v"2Complete the task associated to this TODO comment.(ÕÌ<C395>®þÿÿÿÿ
|
||||||
|
Nsquid:S1135"2Complete the task associated to this TODO comment.(ÕÌ<C395>®þÿÿÿÿ
|
||||||
|
?squid:S1148}"#Use a logger to log this exception.(€ÉÔ…ýÿÿÿÿ
|
||||||
|
\squid:S2147{"ECombine this catch with the one at line 117, which has the same body.(‚ùïÄ
|
||||||
|
Nsquid:S1135y"2Complete the task associated to this TODO comment.(ÕÌ<C395>®þÿÿÿÿ
|
||||||
|
hsquid:S1301<18>"KReplace this "switch" statement by "if" statements to increase readability.(öÛ«°þÿÿÿÿ
|
|
@ -1,17 +1,17 @@
|
||||||
|
|
||||||
‹"squid:ClassVariableVisibilityCheckW"XMake ibSetBgColor a static final constant or non-public and provide accessors if needed.(ýãä¬üÿÿÿÿ
|
usquid:S2293["YReplace the type specification in this constructor call with the diamond operator ("<>").(ÑÓ<C391>¥üÿÿÿÿ
|
||||||
Š"squid:ClassVariableVisibilityCheckS"WMake ivAlertIcon a static final constant or non-public and provide accessors if needed.(ªà¶±ûÿÿÿÿ
|
usquid:S2293d"YReplace the type specification in this constructor call with the diamond operator ("<>").(®ú÷õþÿÿÿÿ
|
||||||
Osquid:S1135¯"2Complete the task associated to this TODO comment.(Ùü§“ýÿÿÿÿ
|
Ysquid:S1126ð"AReplace this if-then-else statement by a single return statement.(®ÎÚÉ
|
||||||
|
qsquid:S2293Ù"YReplace the type specification in this constructor call with the diamond operator ("<>").(艥ð
|
||||||
Lsquid:EmptyStatementUsageCheck<18>"Remove this empty statement.(ôŸŽìúÿÿÿÿ
|
Lsquid:EmptyStatementUsageCheck<18>"Remove this empty statement.(ôŸŽìúÿÿÿÿ
|
||||||
osquid:S3776¾"RRefactor this method to reduce its Cognitive Complexity from 26 to the 15 allowed.(ݨÁ±øÿÿÿÿ
|
osquid:S3776¾"RRefactor this method to reduce its Cognitive Complexity from 26 to the 15 allowed.(ݨÁ±øÿÿÿÿ
|
||||||
|
‹"squid:ClassVariableVisibilityCheckW"XMake ibSetBgColor a static final constant or non-public and provide accessors if needed.(ýãä¬üÿÿÿÿ
|
||||||
|
Š"squid:ClassVariableVisibilityCheckU"WMake tvAlertDate a static final constant or non-public and provide accessors if needed.(“²<E2809C>Öúÿÿÿÿ
|
||||||
|
Š"squid:ClassVariableVisibilityCheckS"WMake ivAlertIcon a static final constant or non-public and provide accessors if needed.(ªà¶±ûÿÿÿÿ
|
||||||
|
Osquid:S1135¯"2Complete the task associated to this TODO comment.(Ùü§“ýÿÿÿÿ
|
||||||
‰"squid:ClassVariableVisibilityCheckQ"VMake tvModified a static final constant or non-public and provide accessors if needed.(ƒëÔ£ÿÿÿÿÿ
|
‰"squid:ClassVariableVisibilityCheckQ"VMake tvModified a static final constant or non-public and provide accessors if needed.(ƒëÔ£ÿÿÿÿÿ
|
||||||
Ysquid:S1126ð"AReplace this if-then-else statement by a single return statement.(®ÎÚÉ
|
|
||||||
osquid:S1450œ"WRemove the "mPattern" field and declare it as a local variable in the relevant methods.(©´ÖÛ
|
osquid:S1450œ"WRemove the "mPattern" field and declare it as a local variable in the relevant methods.(©´ÖÛ
|
||||||
usquid:S2293["YReplace the type specification in this constructor call with the diamond operator ("<>").(ÑÓ<C391>¥üÿÿÿÿ
|
|
||||||
usquid:S2293m"YReplace the type specification in this constructor call with the diamond operator ("<>").(êÝýÂþÿÿÿÿ
|
usquid:S2293m"YReplace the type specification in this constructor call with the diamond operator ("<>").(êÝýÂþÿÿÿÿ
|
||||||
psquid:S2293u"YReplace the type specification in this constructor call with the diamond operator ("<>").(À—’¢
|
psquid:S2293u"YReplace the type specification in this constructor call with the diamond operator ("<>").(À—’¢
|
||||||
Lsquid:S2864£"4Iterate over the "entrySet" instead of the "keySet".(Ô‡ï
|
Lsquid:S2864£"4Iterate over the "entrySet" instead of the "keySet".(Ô‡ï
|
||||||
Š"squid:ClassVariableVisibilityCheckU"WMake tvAlertDate a static final constant or non-public and provide accessors if needed.(“²<E2809C>Öúÿÿÿÿ
|
|
||||||
qsquid:S2293Ù"YReplace the type specification in this constructor call with the diamond operator ("<>").(艥ð
|
|
||||||
usquid:S2293d"YReplace the type specification in this constructor call with the diamond operator ("<>").(®ú÷õþÿÿÿÿ
|
|
||||||
Lsquid:EmptyStatementUsageCheckÃ"Remove this empty statement.(ôŸŽìúÿÿÿÿ
|
Lsquid:EmptyStatementUsageCheckÃ"Remove this empty statement.(ôŸŽìúÿÿÿÿ
|
|
@ -1,36 +1,36 @@
|
||||||
|
|
||||||
Ssquid:EmptyStatementUsageCheckÈ"Remove this empty statement.(ôŸŽìúÿÿÿÿ8†œ›£Ù-
|
Qsquid:S1199¶"-Extract this nested code block into a method.(Á¬å¯ûÿÿÿÿ8¢Ù®¨Û-
|
||||||
qsquid:S3776›"RRefactor this method to reduce its Cognitive Complexity from 20 to the 15 allowed.(ãìîí8ÙÑ£ Û-
|
Qsquid:S1199´"-Extract this nested code block into a method.(ê¶ôÐùÿÿÿÿ8†œ›£Ù-
|
||||||
|
Gsquid:S1148Í"#Use a logger to log this exception.(€ÉÔ…ýÿÿÿÿ8†œ›£Ù-
|
||||||
|
:squid:S3626Ê"Remove this redundant jump.(ûÁÝ…8†œ›£Ù-
|
||||||
|
Vsquid:S1135û"2Complete the task associated to this TODO comment.(» æžÿÿÿÿÿ8<>Ä„¨Û-
|
||||||
|
Osquid:S3398à"0Move this method into "OnListItemClickListener".(‘ðð¡8ÙÑ£ Û-
|
||||||
|
qsquid:ModifiersOrderCheck˜"EReorder the modifiers to comply with the Java Language Specification.(ìѾk8†œ›£Ù-
|
||||||
Lsquid:S1199–"-Extract this nested code block into a method.(ŒãÈ“8<>Ä„¨Û-
|
Lsquid:S1199–"-Extract this nested code block into a method.(ŒãÈ“8<>Ä„¨Û-
|
||||||
fsquid:S1126ñ"BReplace this if-then-else statement by a single method invocation.(玒¦ýÿÿÿÿ8<>Ä„¨Û-
|
:squid:S3626å"Remove this redundant jump.(ûÁÝ…8†œ›£Ù-
|
||||||
|
Qsquid:S1199<18>"-Extract this nested code block into a method.(µ˜ÇÃøÿÿÿÿ8†œ›£Ù-
|
||||||
|
:squid:S3626Î"Remove this redundant jump.(ûÁÝ…8†œ›£Ù-
|
||||||
|
wsquid:S1450<18>"XRemove the "mMoveMenu" field and declare it as a local variable in the relevant methods.(ž¢—ò8†œ›£Ù-
|
||||||
|
xsquid:S2293Ë"YReplace the type specification in this constructor call with the diamond operator ("<>").(艥ð8ÙÑ£ Û-
|
||||||
|
Gsquid:S1148Õ"#Use a logger to log this exception.(€ÉÔ…ýÿÿÿÿ8†œ›£Ù-
|
||||||
|
Ksquid:EmptyStatementUsageCheckg"Remove this empty statement.(ôŸŽìúÿÿÿÿ
|
||||||
|
Ssquid:EmptyStatementUsageCheckÈ"Remove this empty statement.(ôŸŽìúÿÿÿÿ8†œ›£Ù-
|
||||||
|
Vsquid:S1135Ô"2Complete the task associated to this TODO comment.(ÕÌ<C395>®þÿÿÿÿ8†œ›£Ù-
|
||||||
|
qsquid:S3776›"RRefactor this method to reduce its Cognitive Complexity from 20 to the 15 allowed.(ãìîí8ÙÑ£ Û-
|
||||||
|
psquid:S3776¡"RRefactor this method to reduce its Cognitive Complexity from 17 to the 15 allowed.(ÅôÉ#8<>Ä„¨Û-
|
||||||
|
Lsquid:S1199²"-Extract this nested code block into a method.(Žÿõó8¢Ù®¨Û-
|
||||||
|
Vsquid:S1135Æ"2Complete the task associated to this TODO comment.(» æžÿÿÿÿÿ8†œ›£Ù-
|
||||||
psquid:S3776<18>"RRefactor this method to reduce its Cognitive Complexity from 18 to the 15 allowed.(ôŒùb8¢Ù®¨Û-
|
psquid:S3776<18>"RRefactor this method to reduce its Cognitive Complexity from 18 to the 15 allowed.(ôŒùb8¢Ù®¨Û-
|
||||||
Vsquid:S1135ë"2Complete the task associated to this TODO comment.(» æžÿÿÿÿÿ8<>Ä„¨Û-
|
Vsquid:S1135ë"2Complete the task associated to this TODO comment.(» æžÿÿÿÿÿ8<>Ä„¨Û-
|
||||||
Lsquid:S1199²"-Extract this nested code block into a method.(Žÿõó8¢Ù®¨Û-
|
|
||||||
:squid:S3626Î"Remove this redundant jump.(ûÁÝ…8†œ›£Ù-
|
|
||||||
Qsquid:S1199¼"-Extract this nested code block into a method.(ΗŠþÿÿÿÿ8†œ›£Ù-
|
|
||||||
Nsquid:S2093¼"*Change this "try" to a try-with-resources.(¡»¢üùÿÿÿÿ8†œ›£Ù-
|
|
||||||
wsquid:S1450<18>"XRemove the "mMoveMenu" field and declare it as a local variable in the relevant methods.(ž¢—ò8†œ›£Ù-
|
|
||||||
Isquid:S3398±"%Move this method into "ModeCallback".(“ðÉçýÿÿÿÿ8¢Ù®¨Û-
|
|
||||||
:squid:S3626Ê"Remove this redundant jump.(ûÁÝ…8†œ›£Ù-
|
|
||||||
Isquid:S00108¢")Either remove or fill this block of code.(žûÊ¥8ÙÑ£ Û-
|
Isquid:S00108¢")Either remove or fill this block of code.(žûÊ¥8ÙÑ£ Û-
|
||||||
psquid:S3776¡"RRefactor this method to reduce its Cognitive Complexity from 17 to the 15 allowed.(ÅôÉ#8<>Ä„¨Û-
|
|
||||||
Gsquid:S1148Õ"#Use a logger to log this exception.(€ÉÔ…ýÿÿÿÿ8†œ›£Ù-
|
|
||||||
wsquid:ModifiersOrderCheck—"EReorder the modifiers to comply with the Java Language Specification.(¹úæµûÿÿÿÿ8†œ›£Ù-
|
|
||||||
qsquid:ModifiersOrderCheck˜"EReorder the modifiers to comply with the Java Language Specification.(ìѾk8†œ›£Ù-
|
|
||||||
Qsquid:S1199¢"-Extract this nested code block into a method.(ãÍ€ôÿÿÿÿÿ8¢Ù®¨Û-
|
|
||||||
Qsquid:S1199´"-Extract this nested code block into a method.(ê¶ôÐùÿÿÿÿ8†œ›£Ù-
|
|
||||||
osquid:S1301‚"KReplace this "switch" statement by "if" statements to increase readability.(ד¾ñùÿÿÿÿ8ÙÑ£ Û-
|
|
||||||
Qsquid:S1199œ"-Extract this nested code block into a method.(Ú¿–€úÿÿÿÿ8<>Ä„¨Û-
|
|
||||||
Vsquid:S1135Æ"2Complete the task associated to this TODO comment.(» æžÿÿÿÿÿ8†œ›£Ù-
|
|
||||||
Vsquid:S1135Ô"2Complete the task associated to this TODO comment.(ÕÌ<C395>®þÿÿÿÿ8†œ›£Ù-
|
|
||||||
Vsquid:S1135û"2Complete the task associated to this TODO comment.(» æžÿÿÿÿÿ8<>Ä„¨Û-
|
|
||||||
xsquid:S2293Ë"YReplace the type specification in this constructor call with the diamond operator ("<>").(艥ð8ÙÑ£ Û-
|
|
||||||
Ksquid:EmptyStatementUsageCheckg"Remove this empty statement.(ôŸŽìúÿÿÿÿ
|
|
||||||
:squid:S3626å"Remove this redundant jump.(ûÁÝ…8†œ›£Ù-
|
|
||||||
Vsquid:S1135Ë"2Complete the task associated to this TODO comment.(» æžÿÿÿÿÿ8†œ›£Ù-
|
Vsquid:S1135Ë"2Complete the task associated to this TODO comment.(» æžÿÿÿÿÿ8†œ›£Ù-
|
||||||
Osquid:S3398à"0Move this method into "OnListItemClickListener".(‘ðð¡8ÙÑ£ Û-
|
fsquid:S1126ñ"BReplace this if-then-else statement by a single method invocation.(玒¦ýÿÿÿÿ8<>Ä„¨Û-
|
||||||
|
wsquid:ModifiersOrderCheck—"EReorder the modifiers to comply with the Java Language Specification.(¹úæµûÿÿÿÿ8†œ›£Ù-
|
||||||
vsquid:S3776·"RRefactor this method to reduce its Cognitive Complexity from 17 to the 15 allowed.(áé–Þÿÿÿÿÿ8†œ›£Ù-
|
vsquid:S3776·"RRefactor this method to reduce its Cognitive Complexity from 17 to the 15 allowed.(áé–Þÿÿÿÿÿ8†œ›£Ù-
|
||||||
|
Qsquid:S1199œ"-Extract this nested code block into a method.(Ú¿–€úÿÿÿÿ8<>Ä„¨Û-
|
||||||
|
osquid:S1301‚"KReplace this "switch" statement by "if" statements to increase readability.(ד¾ñùÿÿÿÿ8ÙÑ£ Û-
|
||||||
|
Qsquid:S1199¢"-Extract this nested code block into a method.(ãÍ€ôÿÿÿÿÿ8¢Ù®¨Û-
|
||||||
|
Isquid:S3398±"%Move this method into "ModeCallback".(“ðÉçýÿÿÿÿ8¢Ù®¨Û-
|
||||||
Dsquid:S3398›"%Move this method into "ModeCallback".(ãìîí8ÙÑ£ Û-
|
Dsquid:S3398›"%Move this method into "ModeCallback".(ãìîí8ÙÑ£ Û-
|
||||||
Qsquid:S1199<18>"-Extract this nested code block into a method.(µ˜ÇÃøÿÿÿÿ8†œ›£Ù-
|
Nsquid:S2093¼"*Change this "try" to a try-with-resources.(¡»¢üùÿÿÿÿ8†œ›£Ù-
|
||||||
Gsquid:S1148Í"#Use a logger to log this exception.(€ÉÔ…ýÿÿÿÿ8†œ›£Ù-
|
Qsquid:S1199¼"-Extract this nested code block into a method.(ΗŠþÿÿÿÿ8†œ›£Ù-
|
||||||
Qsquid:S1199¶"-Extract this nested code block into a method.(Á¬å¯ûÿÿÿÿ8¢Ù®¨Û-
|
|
|
@ -1,3 +1,3 @@
|
||||||
|
|
||||||
|
esquid:S1126—"AReplace this if-then-else statement by a single return statement.(‚èåÎüÿÿÿÿ8¥ÞëÂÛ-
|
||||||
qsquid:S3776Ø"RRefactor this method to reduce its Cognitive Complexity from 21 to the 15 allowed.(<28>¤§²8 ŠÔÑ-
|
qsquid:S3776Ø"RRefactor this method to reduce its Cognitive Complexity from 21 to the 15 allowed.(<28>¤§²8 ŠÔÑ-
|
||||||
esquid:S1126—"AReplace this if-then-else statement by a single return statement.(‚èåÎüÿÿÿÿ8 ŠÔÑ-
|
|
|
@ -8,10 +8,7 @@
|
||||||
</shared>
|
</shared>
|
||||||
</component>
|
</component>
|
||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="c8515555-ebbc-49d5-889b-0c59bd6c3b6d" name="默认更改列表" comment="">
|
<list default="true" id="c8515555-ebbc-49d5-889b-0c59bd6c3b6d" name="默认更改列表" comment="" />
|
||||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/app/src/main/java/net/micode/notes/ui/AlarmAlertActivity.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/net/micode/notes/ui/AlarmAlertActivity.java" afterDir="false" />
|
|
||||||
</list>
|
|
||||||
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
|
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
|
@ -43,35 +40,7 @@
|
||||||
<favorites_list name="src" />
|
<favorites_list name="src" />
|
||||||
</component>
|
</component>
|
||||||
<component name="FileEditorManager">
|
<component name="FileEditorManager">
|
||||||
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
|
<leaf />
|
||||||
<file pinned="false" current-in-tab="false">
|
|
||||||
<entry file="file://$PROJECT_DIR$/app/src/main/java/net/micode/notes/ui/NoteEditActivity.java">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="-3111">
|
|
||||||
<caret line="226" column="41" lean-forward="true" selection-start-line="226" selection-start-column="41" selection-end-line="226" selection-end-column="41" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
</file>
|
|
||||||
<file pinned="false" current-in-tab="true">
|
|
||||||
<entry file="file://$PROJECT_DIR$/app/src/main/java/net/micode/notes/ui/AlarmAlertActivity.java">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="2740">
|
|
||||||
<caret line="172" column="12" selection-start-line="172" selection-start-column="12" selection-end-line="172" selection-end-column="12" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
</file>
|
|
||||||
<file pinned="false" current-in-tab="false">
|
|
||||||
<entry file="file://$PROJECT_DIR$/app/src/main/java/net/micode/notes/widget/NoteWidgetProvider_4x.java">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="140">
|
|
||||||
<caret line="26" column="13" selection-start-line="26" selection-start-column="13" selection-end-line="26" selection-end-column="13" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
</file>
|
|
||||||
</leaf>
|
|
||||||
</component>
|
</component>
|
||||||
<component name="FindInProjectRecents">
|
<component name="FindInProjectRecents">
|
||||||
<findStrings>
|
<findStrings>
|
||||||
|
@ -136,7 +105,7 @@
|
||||||
</list>
|
</list>
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectFrameBounds" extendedState="7">
|
<component name="ProjectFrameBounds" extendedState="6">
|
||||||
<option name="x" value="85" />
|
<option name="x" value="85" />
|
||||||
<option name="y" value="25" />
|
<option name="y" value="25" />
|
||||||
<option name="width" value="1750" />
|
<option name="width" value="1750" />
|
||||||
|
@ -148,6 +117,102 @@
|
||||||
<foldersAlwaysOnTop value="true" />
|
<foldersAlwaysOnTop value="true" />
|
||||||
</navigator>
|
</navigator>
|
||||||
<panes>
|
<panes>
|
||||||
|
<pane id="ProjectPane">
|
||||||
|
<subPane>
|
||||||
|
<expand>
|
||||||
|
<path>
|
||||||
|
<item name="src" type="b2602c69:ProjectViewProjectNode" />
|
||||||
|
<item name="src" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
||||||
|
</path>
|
||||||
|
<path>
|
||||||
|
<item name="src" type="b2602c69:ProjectViewProjectNode" />
|
||||||
|
<item name="src" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
||||||
|
<item name="app" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
||||||
|
</path>
|
||||||
|
<path>
|
||||||
|
<item name="src" type="b2602c69:ProjectViewProjectNode" />
|
||||||
|
<item name="src" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
||||||
|
<item name="app" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
||||||
|
<item name="src" type="462c0819:PsiDirectoryNode" />
|
||||||
|
</path>
|
||||||
|
<path>
|
||||||
|
<item name="src" type="b2602c69:ProjectViewProjectNode" />
|
||||||
|
<item name="src" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
||||||
|
<item name="app" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
||||||
|
<item name="src" type="462c0819:PsiDirectoryNode" />
|
||||||
|
<item name="main" type="462c0819:PsiDirectoryNode" />
|
||||||
|
</path>
|
||||||
|
<path>
|
||||||
|
<item name="src" type="b2602c69:ProjectViewProjectNode" />
|
||||||
|
<item name="src" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
||||||
|
<item name="app" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
||||||
|
<item name="src" type="462c0819:PsiDirectoryNode" />
|
||||||
|
<item name="main" type="462c0819:PsiDirectoryNode" />
|
||||||
|
<item name="java" type="462c0819:PsiDirectoryNode" />
|
||||||
|
</path>
|
||||||
|
<path>
|
||||||
|
<item name="src" type="b2602c69:ProjectViewProjectNode" />
|
||||||
|
<item name="src" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
||||||
|
<item name="app" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
||||||
|
<item name="src" type="462c0819:PsiDirectoryNode" />
|
||||||
|
<item name="main" type="462c0819:PsiDirectoryNode" />
|
||||||
|
<item name="java" type="462c0819:PsiDirectoryNode" />
|
||||||
|
<item name="notes" type="462c0819:PsiDirectoryNode" />
|
||||||
|
</path>
|
||||||
|
<path>
|
||||||
|
<item name="src" type="b2602c69:ProjectViewProjectNode" />
|
||||||
|
<item name="src" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
||||||
|
<item name="app" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
||||||
|
<item name="src" type="462c0819:PsiDirectoryNode" />
|
||||||
|
<item name="main" type="462c0819:PsiDirectoryNode" />
|
||||||
|
<item name="java" type="462c0819:PsiDirectoryNode" />
|
||||||
|
<item name="notes" type="462c0819:PsiDirectoryNode" />
|
||||||
|
<item name="data" type="462c0819:PsiDirectoryNode" />
|
||||||
|
</path>
|
||||||
|
<path>
|
||||||
|
<item name="src" type="b2602c69:ProjectViewProjectNode" />
|
||||||
|
<item name="src" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
||||||
|
<item name="res" type="462c0819:PsiDirectoryNode" />
|
||||||
|
</path>
|
||||||
|
<path>
|
||||||
|
<item name="src" type="b2602c69:ProjectViewProjectNode" />
|
||||||
|
<item name="src" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
||||||
|
<item name="src" type="462c0819:PsiDirectoryNode" />
|
||||||
|
</path>
|
||||||
|
<path>
|
||||||
|
<item name="src" type="b2602c69:ProjectViewProjectNode" />
|
||||||
|
<item name="src" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
||||||
|
<item name="src" type="462c0819:PsiDirectoryNode" />
|
||||||
|
<item name="net" type="462c0819:PsiDirectoryNode" />
|
||||||
|
</path>
|
||||||
|
<path>
|
||||||
|
<item name="src" type="b2602c69:ProjectViewProjectNode" />
|
||||||
|
<item name="src" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
||||||
|
<item name="src" type="462c0819:PsiDirectoryNode" />
|
||||||
|
<item name="net" type="462c0819:PsiDirectoryNode" />
|
||||||
|
<item name="micode" type="462c0819:PsiDirectoryNode" />
|
||||||
|
</path>
|
||||||
|
<path>
|
||||||
|
<item name="src" type="b2602c69:ProjectViewProjectNode" />
|
||||||
|
<item name="src" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
||||||
|
<item name="src" type="462c0819:PsiDirectoryNode" />
|
||||||
|
<item name="net" type="462c0819:PsiDirectoryNode" />
|
||||||
|
<item name="micode" type="462c0819:PsiDirectoryNode" />
|
||||||
|
<item name="notes" type="462c0819:PsiDirectoryNode" />
|
||||||
|
</path>
|
||||||
|
<path>
|
||||||
|
<item name="src" type="b2602c69:ProjectViewProjectNode" />
|
||||||
|
<item name="src" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
||||||
|
<item name="src" type="462c0819:PsiDirectoryNode" />
|
||||||
|
<item name="net" type="462c0819:PsiDirectoryNode" />
|
||||||
|
<item name="micode" type="462c0819:PsiDirectoryNode" />
|
||||||
|
<item name="notes" type="462c0819:PsiDirectoryNode" />
|
||||||
|
<item name="data" type="462c0819:PsiDirectoryNode" />
|
||||||
|
</path>
|
||||||
|
</expand>
|
||||||
|
<select />
|
||||||
|
</subPane>
|
||||||
|
</pane>
|
||||||
<pane id="AndroidView">
|
<pane id="AndroidView">
|
||||||
<subPane>
|
<subPane>
|
||||||
<expand>
|
<expand>
|
||||||
|
@ -312,176 +377,6 @@
|
||||||
<select />
|
<select />
|
||||||
</subPane>
|
</subPane>
|
||||||
</pane>
|
</pane>
|
||||||
<pane id="ProjectPane">
|
|
||||||
<subPane>
|
|
||||||
<expand>
|
|
||||||
<path>
|
|
||||||
<item name="src" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="src" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="src" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="src" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
<item name="app" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="src" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="src" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
<item name="app" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="src" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="src" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
<item name="app" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="main" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="src" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="src" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
<item name="app" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="main" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="java" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="src" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="src" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
<item name="app" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="main" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="java" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="notes" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="src" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="src" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
<item name="app" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="main" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="java" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="notes" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="data" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="src" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="src" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
<item name="app" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="main" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="java" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="notes" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="gtask" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="src" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="src" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
<item name="app" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="main" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="java" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="notes" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="gtask" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="exception" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="src" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="src" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
<item name="app" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="main" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="java" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="notes" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="model" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="src" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="src" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
<item name="app" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="main" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="java" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="notes" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="tool" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="src" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="src" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
<item name="app" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="main" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="java" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="notes" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="ui" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="src" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="src" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
<item name="app" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="main" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="java" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="notes" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="widget" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="src" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="src" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
<item name="app" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="main" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="res" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="src" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="src" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
<item name="app" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="main" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="res" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="menu" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="src" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="src" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
<item name="app" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="main" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="res" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="raw" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="src" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="src" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
<item name="app" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="main" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="res" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="raw-zh-rCN" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="src" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="src" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
<item name="app" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="main" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="res" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="values" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="src" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="src" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
<item name="app" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
|
|
||||||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="main" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="res" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="values-zh-rCN" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
</expand>
|
|
||||||
<select />
|
|
||||||
</subPane>
|
|
||||||
</pane>
|
|
||||||
</panes>
|
</panes>
|
||||||
</component>
|
</component>
|
||||||
<component name="PropertiesComponent">
|
<component name="PropertiesComponent">
|
||||||
|
@ -807,7 +702,49 @@
|
||||||
<option name="project" value="LOCAL" />
|
<option name="project" value="LOCAL" />
|
||||||
<updated>1570807703651</updated>
|
<updated>1570807703651</updated>
|
||||||
</task>
|
</task>
|
||||||
<option name="localTasksCounter" value="32" />
|
<task id="LOCAL-00032" summary="Merge remote-tracking branch 'origin/ziji_wu' into develop # Conflicts: #	src/.gradle/5.4.1/executionHistory/executionHistory.bin #	src/.gradle/5.4.1/executionHistory/executionHistory.lock #	src/.gradle/5.4.1/fileHashes/fileHashes.bin #	src/.gradle/5.4.1/fileHashes/fileHashes.lock #	src/.gradle/5.4.1/fileHashes/resourceHashesCache.bin #	src/.gradle/5.4.1/javaCompile/javaCompile.lock #	src/.gradle/buildOutputCleanup/buildOutputCleanup.lock #	src/.gradle/buildOutputCleanup/outputFiles.bin #	src/.idea/caches/build_file_checksums.ser #	src/.idea/caches/gradle_models.ser #	src/.idea/sonarlint/issuestore/1/e/1eb2363b523dbcae43d3c6e4790c64436af61b13 #	src/.idea/sonarlint/issuestore/3/e/3e688be40dc69cfd1062f41d0fc27fe261a26710 #	src/.idea/sonarlint/issuestore/5/7/577f30d26378ec8a2bd2e4a43f3c79b3f04c402c #	src/.idea/sonarlint/issuestore/6/a/6a65e747031f27aef20597b4181148a9fbf963d5 #	src/.idea/sonarlint/issuestore/a/7/a7641cfac724321d508c2a284223a711011a93f5 #	src/.idea/sonarlint/issuestore/a/d/ad72331a1bed265bb9c0fe838faa74dbf69fce32 #	src/.idea/sonarlint/issuestore/d/d/dd970bd8ce083850fca1d4d159647ccd110e57cb #	src/.idea/workspace.xml #	src/app/app.iml #	src/app/build.gradle #	src/app/build/intermediates/dex/debug/mergeDexDebug/out/classes.dex #	src/app/build/intermediates/incremental/packageDebug/tmp/debug/dex-renamer-state.txt #	src/app/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/dPcwR9oS2EmiImbvDZ1Qg_iwk3M= #	src/app/build/intermediates/javac/debug/classes/net/micode/notes/data/NotesDatabaseHelper.class #	src/app/build/intermediates/javac/debug/classes/net/micode/notes/data/NotesProvider.class #	src/app/build/intermediates/processed_res/debug/processDebugResources/out/resources-debug.ap_ #	src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/NotesDatabaseHelper.dex #	src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/NotesProvider.dex #	src/app/build/outputs/apk/debug/app-debug.apk #	src/app/src/main/java/net/micode/notes/data/NotesProvider.java">
|
||||||
|
<created>1570809551671</created>
|
||||||
|
<option name="number" value="00032" />
|
||||||
|
<option name="presentableId" value="LOCAL-00032" />
|
||||||
|
<option name="project" value="LOCAL" />
|
||||||
|
<updated>1570809551671</updated>
|
||||||
|
</task>
|
||||||
|
<task id="LOCAL-00033" summary="Merge remote-tracking branch 'origin/ziji_wu' into develop # Conflicts: #	src/.gradle/5.4.1/executionHistory/executionHistory.bin #	src/.gradle/5.4.1/executionHistory/executionHistory.lock #	src/.gradle/5.4.1/fileHashes/fileHashes.bin #	src/.gradle/5.4.1/fileHashes/fileHashes.lock #	src/.gradle/5.4.1/fileHashes/resourceHashesCache.bin #	src/.gradle/5.4.1/javaCompile/javaCompile.lock #	src/.gradle/buildOutputCleanup/buildOutputCleanup.lock #	src/.gradle/buildOutputCleanup/outputFiles.bin #	src/.idea/caches/build_file_checksums.ser #	src/.idea/caches/gradle_models.ser #	src/.idea/sonarlint/issuestore/1/e/1eb2363b523dbcae43d3c6e4790c64436af61b13 #	src/.idea/sonarlint/issuestore/3/e/3e688be40dc69cfd1062f41d0fc27fe261a26710 #	src/.idea/sonarlint/issuestore/5/7/577f30d26378ec8a2bd2e4a43f3c79b3f04c402c #	src/.idea/sonarlint/issuestore/6/a/6a65e747031f27aef20597b4181148a9fbf963d5 #	src/.idea/sonarlint/issuestore/a/7/a7641cfac724321d508c2a284223a711011a93f5 #	src/.idea/sonarlint/issuestore/a/d/ad72331a1bed265bb9c0fe838faa74dbf69fce32 #	src/.idea/sonarlint/issuestore/d/d/dd970bd8ce083850fca1d4d159647ccd110e57cb #	src/.idea/workspace.xml #	src/app/app.iml #	src/app/build.gradle #	src/app/build/intermediates/dex/debug/mergeDexDebug/out/classes.dex #	src/app/build/intermediates/incremental/packageDebug/tmp/debug/dex-renamer-state.txt #	src/app/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/dPcwR9oS2EmiImbvDZ1Qg_iwk3M= #	src/app/build/intermediates/javac/debug/classes/net/micode/notes/data/NotesDatabaseHelper.class #	src/app/build/intermediates/javac/debug/classes/net/micode/notes/data/NotesProvider.class #	src/app/build/intermediates/processed_res/debug/processDebugResources/out/resources-debug.ap_ #	src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/NotesDatabaseHelper.dex #	src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/NotesProvider.dex #	src/app/build/outputs/apk/debug/app-debug.apk #	src/app/src/main/java/net/micode/notes/data/NotesProvider.java">
|
||||||
|
<created>1570810800862</created>
|
||||||
|
<option name="number" value="00033" />
|
||||||
|
<option name="presentableId" value="LOCAL-00033" />
|
||||||
|
<option name="project" value="LOCAL" />
|
||||||
|
<updated>1570810800862</updated>
|
||||||
|
</task>
|
||||||
|
<task id="LOCAL-00034" summary="Merge remote-tracking branch 'origin/ziji_wu' into develop # Conflicts: #	src/.gradle/5.4.1/executionHistory/executionHistory.bin #	src/.gradle/5.4.1/executionHistory/executionHistory.lock #	src/.gradle/5.4.1/fileHashes/fileHashes.bin #	src/.gradle/5.4.1/fileHashes/fileHashes.lock #	src/.gradle/5.4.1/fileHashes/resourceHashesCache.bin #	src/.gradle/5.4.1/javaCompile/javaCompile.lock #	src/.gradle/buildOutputCleanup/buildOutputCleanup.lock #	src/.gradle/buildOutputCleanup/outputFiles.bin #	src/.idea/caches/build_file_checksums.ser #	src/.idea/caches/gradle_models.ser #	src/.idea/sonarlint/issuestore/1/e/1eb2363b523dbcae43d3c6e4790c64436af61b13 #	src/.idea/sonarlint/issuestore/3/e/3e688be40dc69cfd1062f41d0fc27fe261a26710 #	src/.idea/sonarlint/issuestore/5/7/577f30d26378ec8a2bd2e4a43f3c79b3f04c402c #	src/.idea/sonarlint/issuestore/6/a/6a65e747031f27aef20597b4181148a9fbf963d5 #	src/.idea/sonarlint/issuestore/a/7/a7641cfac724321d508c2a284223a711011a93f5 #	src/.idea/sonarlint/issuestore/a/d/ad72331a1bed265bb9c0fe838faa74dbf69fce32 #	src/.idea/sonarlint/issuestore/d/d/dd970bd8ce083850fca1d4d159647ccd110e57cb #	src/.idea/workspace.xml #	src/app/app.iml #	src/app/build.gradle #	src/app/build/intermediates/dex/debug/mergeDexDebug/out/classes.dex #	src/app/build/intermediates/incremental/packageDebug/tmp/debug/dex-renamer-state.txt #	src/app/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/dPcwR9oS2EmiImbvDZ1Qg_iwk3M= #	src/app/build/intermediates/javac/debug/classes/net/micode/notes/data/NotesDatabaseHelper.class #	src/app/build/intermediates/javac/debug/classes/net/micode/notes/data/NotesProvider.class #	src/app/build/intermediates/processed_res/debug/processDebugResources/out/resources-debug.ap_ #	src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/NotesDatabaseHelper.dex #	src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/NotesProvider.dex #	src/app/build/outputs/apk/debug/app-debug.apk #	src/app/src/main/java/net/micode/notes/data/NotesProvider.java">
|
||||||
|
<created>1570811222925</created>
|
||||||
|
<option name="number" value="00034" />
|
||||||
|
<option name="presentableId" value="LOCAL-00034" />
|
||||||
|
<option name="project" value="LOCAL" />
|
||||||
|
<updated>1570811222925</updated>
|
||||||
|
</task>
|
||||||
|
<task id="LOCAL-00035" summary="Merge remote-tracking branch 'origin/ziji_wu' into develop # Conflicts: #	src/.gradle/5.4.1/executionHistory/executionHistory.bin #	src/.gradle/5.4.1/executionHistory/executionHistory.lock #	src/.gradle/5.4.1/fileHashes/fileHashes.bin #	src/.gradle/5.4.1/fileHashes/fileHashes.lock #	src/.gradle/5.4.1/fileHashes/resourceHashesCache.bin #	src/.gradle/5.4.1/javaCompile/javaCompile.lock #	src/.gradle/buildOutputCleanup/buildOutputCleanup.lock #	src/.gradle/buildOutputCleanup/outputFiles.bin #	src/.idea/caches/build_file_checksums.ser #	src/.idea/caches/gradle_models.ser #	src/.idea/sonarlint/issuestore/1/e/1eb2363b523dbcae43d3c6e4790c64436af61b13 #	src/.idea/sonarlint/issuestore/3/e/3e688be40dc69cfd1062f41d0fc27fe261a26710 #	src/.idea/sonarlint/issuestore/5/7/577f30d26378ec8a2bd2e4a43f3c79b3f04c402c #	src/.idea/sonarlint/issuestore/6/a/6a65e747031f27aef20597b4181148a9fbf963d5 #	src/.idea/sonarlint/issuestore/a/7/a7641cfac724321d508c2a284223a711011a93f5 #	src/.idea/sonarlint/issuestore/a/d/ad72331a1bed265bb9c0fe838faa74dbf69fce32 #	src/.idea/sonarlint/issuestore/d/d/dd970bd8ce083850fca1d4d159647ccd110e57cb #	src/.idea/workspace.xml #	src/app/app.iml #	src/app/build.gradle #	src/app/build/intermediates/dex/debug/mergeDexDebug/out/classes.dex #	src/app/build/intermediates/incremental/packageDebug/tmp/debug/dex-renamer-state.txt #	src/app/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/dPcwR9oS2EmiImbvDZ1Qg_iwk3M= #	src/app/build/intermediates/javac/debug/classes/net/micode/notes/data/NotesDatabaseHelper.class #	src/app/build/intermediates/javac/debug/classes/net/micode/notes/data/NotesProvider.class #	src/app/build/intermediates/processed_res/debug/processDebugResources/out/resources-debug.ap_ #	src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/NotesDatabaseHelper.dex #	src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/NotesProvider.dex #	src/app/build/outputs/apk/debug/app-debug.apk #	src/app/src/main/java/net/micode/notes/data/NotesProvider.java">
|
||||||
|
<created>1570811358152</created>
|
||||||
|
<option name="number" value="00035" />
|
||||||
|
<option name="presentableId" value="LOCAL-00035" />
|
||||||
|
<option name="project" value="LOCAL" />
|
||||||
|
<updated>1570811358152</updated>
|
||||||
|
</task>
|
||||||
|
<task id="LOCAL-00036" summary="merge">
|
||||||
|
<created>1570838709377</created>
|
||||||
|
<option name="number" value="00036" />
|
||||||
|
<option name="presentableId" value="LOCAL-00036" />
|
||||||
|
<option name="project" value="LOCAL" />
|
||||||
|
<updated>1570838709377</updated>
|
||||||
|
</task>
|
||||||
|
<task id="LOCAL-00037" summary="merge">
|
||||||
|
<created>1570838781879</created>
|
||||||
|
<option name="number" value="00037" />
|
||||||
|
<option name="presentableId" value="LOCAL-00037" />
|
||||||
|
<option name="project" value="LOCAL" />
|
||||||
|
<updated>1570838781879</updated>
|
||||||
|
</task>
|
||||||
|
<option name="localTasksCounter" value="38" />
|
||||||
<servers />
|
<servers />
|
||||||
</component>
|
</component>
|
||||||
<component name="TodoView">
|
<component name="TodoView">
|
||||||
|
@ -821,7 +758,6 @@
|
||||||
</component>
|
</component>
|
||||||
<component name="ToolWindowManager">
|
<component name="ToolWindowManager">
|
||||||
<frame x="-7" y="-7" width="1550" height="878" extended-state="6" />
|
<frame x="-7" y="-7" width="1550" height="878" extended-state="6" />
|
||||||
<editor active="true" />
|
|
||||||
<layout>
|
<layout>
|
||||||
<window_info id="Captures" order="0" sideWeight="0.5019305" side_tool="true" weight="0.16957104" />
|
<window_info id="Captures" order="0" sideWeight="0.5019305" side_tool="true" weight="0.16957104" />
|
||||||
<window_info active="true" content_ui="combo" id="Project" order="1" sideWeight="0.48771265" visible="true" weight="0.15281501" />
|
<window_info active="true" content_ui="combo" id="Project" order="1" sideWeight="0.48771265" visible="true" weight="0.15281501" />
|
||||||
|
@ -893,47 +829,10 @@
|
||||||
<MESSAGE value="sdk 23 comment more" />
|
<MESSAGE value="sdk 23 comment more" />
|
||||||
<MESSAGE value="comment more" />
|
<MESSAGE value="comment more" />
|
||||||
<MESSAGE value="Merge remote-tracking branch 'origin/ziji_wu' into develop # Conflicts: #	src/.gradle/5.4.1/executionHistory/executionHistory.bin #	src/.gradle/5.4.1/executionHistory/executionHistory.lock #	src/.gradle/5.4.1/fileHashes/fileHashes.bin #	src/.gradle/5.4.1/fileHashes/fileHashes.lock #	src/.gradle/5.4.1/fileHashes/resourceHashesCache.bin #	src/.gradle/5.4.1/javaCompile/javaCompile.lock #	src/.gradle/buildOutputCleanup/buildOutputCleanup.lock #	src/.gradle/buildOutputCleanup/outputFiles.bin #	src/.idea/caches/build_file_checksums.ser #	src/.idea/caches/gradle_models.ser #	src/.idea/sonarlint/issuestore/1/e/1eb2363b523dbcae43d3c6e4790c64436af61b13 #	src/.idea/sonarlint/issuestore/3/e/3e688be40dc69cfd1062f41d0fc27fe261a26710 #	src/.idea/sonarlint/issuestore/5/7/577f30d26378ec8a2bd2e4a43f3c79b3f04c402c #	src/.idea/sonarlint/issuestore/6/a/6a65e747031f27aef20597b4181148a9fbf963d5 #	src/.idea/sonarlint/issuestore/a/7/a7641cfac724321d508c2a284223a711011a93f5 #	src/.idea/sonarlint/issuestore/a/d/ad72331a1bed265bb9c0fe838faa74dbf69fce32 #	src/.idea/sonarlint/issuestore/d/d/dd970bd8ce083850fca1d4d159647ccd110e57cb #	src/.idea/workspace.xml #	src/app/app.iml #	src/app/build.gradle #	src/app/build/intermediates/dex/debug/mergeDexDebug/out/classes.dex #	src/app/build/intermediates/incremental/packageDebug/tmp/debug/dex-renamer-state.txt #	src/app/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/dPcwR9oS2EmiImbvDZ1Qg_iwk3M= #	src/app/build/intermediates/javac/debug/classes/net/micode/notes/data/NotesDatabaseHelper.class #	src/app/build/intermediates/javac/debug/classes/net/micode/notes/data/NotesProvider.class #	src/app/build/intermediates/processed_res/debug/processDebugResources/out/resources-debug.ap_ #	src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/NotesDatabaseHelper.dex #	src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/NotesProvider.dex #	src/app/build/outputs/apk/debug/app-debug.apk #	src/app/src/main/java/net/micode/notes/data/NotesProvider.java" />
|
<MESSAGE value="Merge remote-tracking branch 'origin/ziji_wu' into develop # Conflicts: #	src/.gradle/5.4.1/executionHistory/executionHistory.bin #	src/.gradle/5.4.1/executionHistory/executionHistory.lock #	src/.gradle/5.4.1/fileHashes/fileHashes.bin #	src/.gradle/5.4.1/fileHashes/fileHashes.lock #	src/.gradle/5.4.1/fileHashes/resourceHashesCache.bin #	src/.gradle/5.4.1/javaCompile/javaCompile.lock #	src/.gradle/buildOutputCleanup/buildOutputCleanup.lock #	src/.gradle/buildOutputCleanup/outputFiles.bin #	src/.idea/caches/build_file_checksums.ser #	src/.idea/caches/gradle_models.ser #	src/.idea/sonarlint/issuestore/1/e/1eb2363b523dbcae43d3c6e4790c64436af61b13 #	src/.idea/sonarlint/issuestore/3/e/3e688be40dc69cfd1062f41d0fc27fe261a26710 #	src/.idea/sonarlint/issuestore/5/7/577f30d26378ec8a2bd2e4a43f3c79b3f04c402c #	src/.idea/sonarlint/issuestore/6/a/6a65e747031f27aef20597b4181148a9fbf963d5 #	src/.idea/sonarlint/issuestore/a/7/a7641cfac724321d508c2a284223a711011a93f5 #	src/.idea/sonarlint/issuestore/a/d/ad72331a1bed265bb9c0fe838faa74dbf69fce32 #	src/.idea/sonarlint/issuestore/d/d/dd970bd8ce083850fca1d4d159647ccd110e57cb #	src/.idea/workspace.xml #	src/app/app.iml #	src/app/build.gradle #	src/app/build/intermediates/dex/debug/mergeDexDebug/out/classes.dex #	src/app/build/intermediates/incremental/packageDebug/tmp/debug/dex-renamer-state.txt #	src/app/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/dPcwR9oS2EmiImbvDZ1Qg_iwk3M= #	src/app/build/intermediates/javac/debug/classes/net/micode/notes/data/NotesDatabaseHelper.class #	src/app/build/intermediates/javac/debug/classes/net/micode/notes/data/NotesProvider.class #	src/app/build/intermediates/processed_res/debug/processDebugResources/out/resources-debug.ap_ #	src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/NotesDatabaseHelper.dex #	src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/NotesProvider.dex #	src/app/build/outputs/apk/debug/app-debug.apk #	src/app/src/main/java/net/micode/notes/data/NotesProvider.java" />
|
||||||
<option name="LAST_COMMIT_MESSAGE" value="Merge remote-tracking branch 'origin/ziji_wu' into develop # Conflicts: #	src/.gradle/5.4.1/executionHistory/executionHistory.bin #	src/.gradle/5.4.1/executionHistory/executionHistory.lock #	src/.gradle/5.4.1/fileHashes/fileHashes.bin #	src/.gradle/5.4.1/fileHashes/fileHashes.lock #	src/.gradle/5.4.1/fileHashes/resourceHashesCache.bin #	src/.gradle/5.4.1/javaCompile/javaCompile.lock #	src/.gradle/buildOutputCleanup/buildOutputCleanup.lock #	src/.gradle/buildOutputCleanup/outputFiles.bin #	src/.idea/caches/build_file_checksums.ser #	src/.idea/caches/gradle_models.ser #	src/.idea/sonarlint/issuestore/1/e/1eb2363b523dbcae43d3c6e4790c64436af61b13 #	src/.idea/sonarlint/issuestore/3/e/3e688be40dc69cfd1062f41d0fc27fe261a26710 #	src/.idea/sonarlint/issuestore/5/7/577f30d26378ec8a2bd2e4a43f3c79b3f04c402c #	src/.idea/sonarlint/issuestore/6/a/6a65e747031f27aef20597b4181148a9fbf963d5 #	src/.idea/sonarlint/issuestore/a/7/a7641cfac724321d508c2a284223a711011a93f5 #	src/.idea/sonarlint/issuestore/a/d/ad72331a1bed265bb9c0fe838faa74dbf69fce32 #	src/.idea/sonarlint/issuestore/d/d/dd970bd8ce083850fca1d4d159647ccd110e57cb #	src/.idea/workspace.xml #	src/app/app.iml #	src/app/build.gradle #	src/app/build/intermediates/dex/debug/mergeDexDebug/out/classes.dex #	src/app/build/intermediates/incremental/packageDebug/tmp/debug/dex-renamer-state.txt #	src/app/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/dPcwR9oS2EmiImbvDZ1Qg_iwk3M= #	src/app/build/intermediates/javac/debug/classes/net/micode/notes/data/NotesDatabaseHelper.class #	src/app/build/intermediates/javac/debug/classes/net/micode/notes/data/NotesProvider.class #	src/app/build/intermediates/processed_res/debug/processDebugResources/out/resources-debug.ap_ #	src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/NotesDatabaseHelper.dex #	src/app/build/intermediates/transforms/dexBuilder/debug/0/net/micode/notes/data/NotesProvider.dex #	src/app/build/outputs/apk/debug/app-debug.apk #	src/app/src/main/java/net/micode/notes/data/NotesProvider.java" />
|
<MESSAGE value="merge" />
|
||||||
|
<option name="LAST_COMMIT_MESSAGE" value="merge" />
|
||||||
</component>
|
</component>
|
||||||
<component name="editorHistoryManager">
|
<component name="editorHistoryManager">
|
||||||
<entry file="file://D:/Android_SDK/SDK/sources/android-28/android/content/Intent.java">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="239">
|
|
||||||
<caret line="628" column="13" selection-start-line="628" selection-start-column="13" selection-end-line="628" selection-end-column="13" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/AndroidManifest.xml">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="449">
|
|
||||||
<caret line="40" column="27" selection-start-line="40" selection-start-column="27" selection-end-line="40" selection-end-column="27" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/build.gradle">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="220">
|
|
||||||
<caret line="11" column="13" selection-start-line="11" selection-start-column="13" selection-end-line="11" selection-end-column="13" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/settings.gradle">
|
|
||||||
<provider selected="true" editor-type-id="text-editor" />
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/app/src/main/res/raw-zh-rCN/introduction">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="140">
|
|
||||||
<caret line="7" column="38" selection-start-line="7" selection-start-column="38" selection-end-line="7" selection-end-column="38" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/app/src/main/res/raw/introduction">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="20">
|
|
||||||
<caret line="1" column="47" selection-start-line="1" selection-start-column="47" selection-end-line="1" selection-end-column="47" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://D:/Android_SDK/SDK/sources/android-28/android/widget/Button.java">
|
<entry file="file://D:/Android_SDK/SDK/sources/android-28/android/widget/Button.java">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="631">
|
<state relative-caret-position="631">
|
||||||
|
@ -952,8 +851,8 @@
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/app/src/main/res/menu/call_note_edit.xml">
|
<entry file="file://$PROJECT_DIR$/app/src/main/res/menu/call_note_edit.xml">
|
||||||
<provider editor-type-id="text-editor" />
|
|
||||||
<provider selected="true" editor-type-id="android-designer2" />
|
<provider selected="true" editor-type-id="android-designer2" />
|
||||||
|
<provider editor-type-id="text-editor" />
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/app/src/main/res/drawable-hdpi/icon_app.png">
|
<entry file="file://$PROJECT_DIR$/app/src/main/res/drawable-hdpi/icon_app.png">
|
||||||
<provider selected="true" editor-type-id="images" />
|
<provider selected="true" editor-type-id="images" />
|
||||||
|
@ -975,13 +874,6 @@
|
||||||
</provider>
|
</provider>
|
||||||
<provider editor-type-id="android-manifest" />
|
<provider editor-type-id="android-manifest" />
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/app/src/main/java/net/micode/notes/gtask/data/MetaData.java">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="140">
|
|
||||||
<caret line="27" column="13" selection-start-line="27" selection-start-column="13" selection-end-line="27" selection-end-column="13" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/app/src/main/res/values/styles.xml">
|
<entry file="file://$PROJECT_DIR$/app/src/main/res/values/styles.xml">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="1200">
|
<state relative-caret-position="1200">
|
||||||
|
@ -1086,15 +978,15 @@
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/app/src/main/res/layout/dialog_edit_text.xml">
|
<entry file="file://$PROJECT_DIR$/app/src/main/res/layout/dialog_edit_text.xml">
|
||||||
<provider editor-type-id="text-editor" />
|
|
||||||
<provider selected="true" editor-type-id="android-designer2" />
|
<provider selected="true" editor-type-id="android-designer2" />
|
||||||
|
<provider editor-type-id="text-editor" />
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://D:/Android_SDK/SDK/platforms/android-28/data/res/drawable-hdpi/ic_dialog_alert.png">
|
<entry file="file://D:/Android_SDK/SDK/platforms/android-28/data/res/drawable-hdpi/ic_dialog_alert.png">
|
||||||
<provider selected="true" editor-type-id="images" />
|
<provider selected="true" editor-type-id="images" />
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/app/src/main/res/menu/sub_folder.xml">
|
<entry file="file://$PROJECT_DIR$/app/src/main/res/menu/sub_folder.xml">
|
||||||
<provider editor-type-id="text-editor" />
|
|
||||||
<provider selected="true" editor-type-id="android-designer2" />
|
<provider selected="true" editor-type-id="android-designer2" />
|
||||||
|
<provider editor-type-id="text-editor" />
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/app/build.gradle">
|
<entry file="file://$PROJECT_DIR$/app/build.gradle">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
@ -1111,20 +1003,20 @@
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/app/src/main/res/menu/call_record_folder.xml">
|
<entry file="file://$PROJECT_DIR$/app/src/main/res/menu/call_record_folder.xml">
|
||||||
<provider editor-type-id="text-editor" />
|
|
||||||
<provider selected="true" editor-type-id="android-designer2" />
|
<provider selected="true" editor-type-id="android-designer2" />
|
||||||
|
<provider editor-type-id="text-editor" />
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/app/src/main/res/menu/note_edit.xml">
|
<entry file="file://$PROJECT_DIR$/app/src/main/res/menu/note_edit.xml">
|
||||||
<provider selected="true" editor-type-id="text-editor" />
|
|
||||||
<provider editor-type-id="android-designer2" />
|
<provider editor-type-id="android-designer2" />
|
||||||
|
<provider selected="true" editor-type-id="text-editor" />
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/app/src/main/res/menu/note_list.xml">
|
<entry file="file://$PROJECT_DIR$/app/src/main/res/menu/note_list.xml">
|
||||||
|
<provider editor-type-id="android-designer2" />
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="96">
|
<state relative-caret-position="96">
|
||||||
<caret line="28" column="20" selection-start-line="28" selection-start-column="20" selection-end-line="28" selection-end-column="20" />
|
<caret line="28" column="20" selection-start-line="28" selection-start-column="20" selection-end-line="28" selection-end-column="20" />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
<provider editor-type-id="android-designer2" />
|
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/app/src/main/java/net/micode/notes/data/Contact.java">
|
<entry file="file://$PROJECT_DIR$/app/src/main/java/net/micode/notes/data/Contact.java">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
@ -1198,13 +1090,6 @@
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/app/src/main/java/net/micode/notes/model/Note.java">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="457">
|
|
||||||
<caret line="218" column="15" lean-forward="true" selection-start-line="218" selection-start-column="15" selection-end-line="218" selection-end-column="15" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/app/src/main/java/net/micode/notes/tool/ResourceParser.java">
|
<entry file="file://$PROJECT_DIR$/app/src/main/java/net/micode/notes/tool/ResourceParser.java">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="166">
|
<state relative-caret-position="166">
|
||||||
|
@ -1213,12 +1098,12 @@
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/app/src/main/res/layout/note_edit.xml">
|
<entry file="file://$PROJECT_DIR$/app/src/main/res/layout/note_edit.xml">
|
||||||
|
<provider editor-type-id="android-designer2" />
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="434">
|
<state relative-caret-position="434">
|
||||||
<caret line="274" column="28" selection-start-line="274" selection-start-column="28" selection-end-line="274" selection-end-column="28" />
|
<caret line="274" column="28" selection-start-line="274" selection-start-column="28" selection-end-line="274" selection-end-column="28" />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
<provider editor-type-id="android-designer2" />
|
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/app/src/main/java/net/micode/notes/model/WorkingNote.java">
|
<entry file="file://$PROJECT_DIR$/app/src/main/java/net/micode/notes/model/WorkingNote.java">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
@ -1241,14 +1126,88 @@
|
||||||
<entry file="file://$PROJECT_DIR$/app/src/main/java/net/micode/notes/ui/NoteEditActivity.java">
|
<entry file="file://$PROJECT_DIR$/app/src/main/java/net/micode/notes/ui/NoteEditActivity.java">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="-3111">
|
<state relative-caret-position="-3111">
|
||||||
<caret line="226" column="41" lean-forward="true" selection-start-line="226" selection-start-column="41" selection-end-line="226" selection-end-column="41" />
|
<caret line="226" column="41" selection-start-line="226" selection-start-column="41" selection-end-line="226" selection-end-column="41" />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/app/src/main/java/net/micode/notes/ui/AlarmAlertActivity.java">
|
<entry file="file://$PROJECT_DIR$/app/src/main/java/net/micode/notes/ui/AlarmAlertActivity.java">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="2740">
|
<state relative-caret-position="340">
|
||||||
<caret line="172" column="12" selection-start-line="172" selection-start-column="12" selection-end-line="172" selection-end-column="12" />
|
<caret line="52" column="52" selection-start-line="52" selection-start-column="52" selection-end-line="52" selection-end-column="52" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#2839#2894#0" expanded="true" />
|
||||||
|
<element signature="e#4900#4917#0" expanded="true" />
|
||||||
|
<element signature="e#4990#5011#0" expanded="true" />
|
||||||
|
<element signature="e#5085#5109#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/app/src/main/java/net/micode/notes/tool/BackupUtils.java">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="-3507">
|
||||||
|
<caret line="38" column="13" selection-start-line="38" selection-start-column="13" selection-end-line="38" selection-end-column="13" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/app/src/main/java/net/micode/notes/gtask/data/MetaData.java">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="-664">
|
||||||
|
<caret line="27" column="13" selection-start-line="27" selection-start-column="13" selection-end-line="27" selection-end-column="13" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/app/src/main/java/net/micode/notes/gtask/data/Node.java">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="-944">
|
||||||
|
<caret line="22" column="22" selection-start-line="22" selection-start-column="22" selection-end-line="22" selection-end-column="22" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#1923#1924#0" expanded="true" />
|
||||||
|
<element signature="e#1954#1955#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/app/src/main/java/net/micode/notes/gtask/data/SqlData.java">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="-500">
|
||||||
|
<caret line="37" column="13" selection-start-line="37" selection-start-column="13" selection-end-line="37" selection-end-column="13" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/app/src/main/java/net/micode/notes/gtask/data/SqlNote.java">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="574">
|
||||||
|
<caret line="172" column="34" lean-forward="true" selection-start-line="172" selection-start-column="34" selection-end-line="172" selection-end-column="34" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/app/src/main/java/net/micode/notes/tool/DataUtils.java">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="140">
|
||||||
|
<caret line="37" column="13" selection-start-line="37" selection-start-column="13" selection-end-line="37" selection-end-column="13" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/../app/src/main/java/net/micode/notes/tool/BackupUtils.java">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="-3286">
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#14478#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/app/src/main/java/net/micode/notes/model/Note.java">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="320">
|
||||||
|
<caret line="287" column="30" lean-forward="true" selection-start-line="287" selection-start-column="30" selection-end-line="287" selection-end-column="30" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#3356#3357#0" expanded="true" />
|
||||||
|
<element signature="e#3399#3400#0" expanded="true" />
|
||||||
|
<element signature="e#3434#3435#0" expanded="true" />
|
||||||
|
<element signature="e#3478#3479#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
|
|
|
@ -24,7 +24,9 @@ import net.micode.notes.tool.GTaskStringUtils;
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
/*
|
||||||
|
关于同步任务的元数据
|
||||||
|
*/
|
||||||
public class MetaData extends Task {
|
public class MetaData extends Task {
|
||||||
private final static String TAG = MetaData.class.getSimpleName();
|
private final static String TAG = MetaData.class.getSimpleName();
|
||||||
|
|
||||||
|
@ -32,11 +34,15 @@ public class MetaData extends Task {
|
||||||
|
|
||||||
public void setMeta(String gid, JSONObject metaInfo) {
|
public void setMeta(String gid, JSONObject metaInfo) {
|
||||||
try {
|
try {
|
||||||
|
//put中第一个元素在tool包中
|
||||||
metaInfo.put(GTaskStringUtils.META_HEAD_GTASK_ID, gid);
|
metaInfo.put(GTaskStringUtils.META_HEAD_GTASK_ID, gid);
|
||||||
|
//捕获json异常
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
Log.e(TAG, "failed to put related gid");
|
Log.e(TAG, "failed to put related gid");
|
||||||
}
|
}
|
||||||
|
//建立便签
|
||||||
setNotes(metaInfo.toString());
|
setNotes(metaInfo.toString());
|
||||||
|
//函数中的元素依然在tool包中,设置便签名
|
||||||
setName(GTaskStringUtils.META_NOTE_NAME);
|
setName(GTaskStringUtils.META_NOTE_NAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,10 +56,13 @@ public class MetaData extends Task {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
||||||
public void setContentByRemoteJSON(JSONObject js) {
|
public void setContentByRemoteJSON(JSONObject js) {
|
||||||
|
//super调用父类
|
||||||
super.setContentByRemoteJSON(js);
|
super.setContentByRemoteJSON(js);
|
||||||
if (getNotes() != null) {
|
if (getNotes() != null) {
|
||||||
try {
|
try {
|
||||||
|
//将trim()去掉两端无意义字符后的字符串转化为JSON格式
|
||||||
JSONObject metaInfo = new JSONObject(getNotes().trim());
|
JSONObject metaInfo = new JSONObject(getNotes().trim());
|
||||||
mRelatedGid = metaInfo.getString(GTaskStringUtils.META_HEAD_GTASK_ID);
|
mRelatedGid = metaInfo.getString(GTaskStringUtils.META_HEAD_GTASK_ID);
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
|
@ -62,7 +71,12 @@ public class MetaData extends Task {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/*override
|
||||||
|
重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。
|
||||||
|
即外壳不变,核心重写!
|
||||||
|
重写的好处在于子类可以根据需要,定义特定于自己的行为。
|
||||||
|
也就是说子类能够根据需要实现父类的方法。
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void setContentByLocalJSON(JSONObject js) {
|
public void setContentByLocalJSON(JSONObject js) {
|
||||||
// this function should not be called
|
// this function should not be called
|
||||||
|
|
|
@ -21,51 +21,53 @@ import android.database.Cursor;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
public abstract class Node {
|
public abstract class Node {
|
||||||
|
//定义结点的属性变量
|
||||||
public static final int SYNC_ACTION_NONE = 0;
|
public static final int SYNC_ACTION_NONE = 0;
|
||||||
|
//添加远程同步动作
|
||||||
public static final int SYNC_ACTION_ADD_REMOTE = 1;
|
public static final int SYNC_ACTION_ADD_REMOTE = 1;
|
||||||
|
//添加当地同步动作
|
||||||
public static final int SYNC_ACTION_ADD_LOCAL = 2;
|
public static final int SYNC_ACTION_ADD_LOCAL = 2;
|
||||||
|
//删除远程同步动作
|
||||||
public static final int SYNC_ACTION_DEL_REMOTE = 3;
|
public static final int SYNC_ACTION_DEL_REMOTE = 3;
|
||||||
|
//删除当地同步动作
|
||||||
public static final int SYNC_ACTION_DEL_LOCAL = 4;
|
public static final int SYNC_ACTION_DEL_LOCAL = 4;
|
||||||
|
//更新远程同步动作
|
||||||
public static final int SYNC_ACTION_UPDATE_REMOTE = 5;
|
public static final int SYNC_ACTION_UPDATE_REMOTE = 5;
|
||||||
|
//更新当地同步动作
|
||||||
public static final int SYNC_ACTION_UPDATE_LOCAL = 6;
|
public static final int SYNC_ACTION_UPDATE_LOCAL = 6;
|
||||||
|
//远程同步动作冲突
|
||||||
public static final int SYNC_ACTION_UPDATE_CONFLICT = 7;
|
public static final int SYNC_ACTION_UPDATE_CONFLICT = 7;
|
||||||
|
//当地远程同步冲突
|
||||||
public static final int SYNC_ACTION_ERROR = 8;
|
public static final int SYNC_ACTION_ERROR = 8;
|
||||||
|
|
||||||
private String mGid;
|
private String mGid;
|
||||||
|
|
||||||
private String mName;
|
private String mName;
|
||||||
|
//记录最后一次修改
|
||||||
private long mLastModified;
|
private long mLastModified;
|
||||||
|
|
||||||
private boolean mDeleted;
|
private boolean mDeleted;
|
||||||
|
|
||||||
|
//构造Node
|
||||||
public Node() {
|
public Node() {
|
||||||
mGid = null;
|
mGid = null;
|
||||||
mName = "";
|
mName = "";
|
||||||
mLastModified = 0;
|
mLastModified = 0;
|
||||||
mDeleted = false;
|
mDeleted = false;
|
||||||
}
|
}
|
||||||
|
//创建
|
||||||
public abstract JSONObject getCreateAction(int actionId);
|
public abstract JSONObject getCreateAction(int actionId);
|
||||||
|
//更新
|
||||||
public abstract JSONObject getUpdateAction(int actionId);
|
public abstract JSONObject getUpdateAction(int actionId);
|
||||||
|
//通过远程JSON设置内容
|
||||||
public abstract void setContentByRemoteJSON(JSONObject js);
|
public abstract void setContentByRemoteJSON(JSONObject js);
|
||||||
|
//通过本地JSON设置内容
|
||||||
public abstract void setContentByLocalJSON(JSONObject js);
|
public abstract void setContentByLocalJSON(JSONObject js);
|
||||||
|
//从内容获得本地JSON
|
||||||
public abstract JSONObject getLocalJSONFromContent();
|
public abstract JSONObject getLocalJSONFromContent();
|
||||||
|
//获得同步动作
|
||||||
public abstract int getSyncAction(Cursor c);
|
public abstract int getSyncAction(Cursor c);
|
||||||
|
//下面是一系列构造初始化
|
||||||
public void setGid(String gid) {
|
public void setGid(String gid) {
|
||||||
this.mGid = gid;
|
this.mGid = gid;
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,10 +34,12 @@ import net.micode.notes.gtask.exception.ActionFailureException;
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
/*
|
||||||
|
同步任务基本数据
|
||||||
|
*/
|
||||||
public class SqlData {
|
public class SqlData {
|
||||||
private static final String TAG = SqlData.class.getSimpleName();
|
private static final String TAG = SqlData.class.getSimpleName();
|
||||||
|
//设置初始ID
|
||||||
private static final int INVALID_ID = -99999;
|
private static final int INVALID_ID = -99999;
|
||||||
|
|
||||||
public static final String[] PROJECTION_DATA = new String[] {
|
public static final String[] PROJECTION_DATA = new String[] {
|
||||||
|
@ -45,10 +47,11 @@ public class SqlData {
|
||||||
DataColumns.DATA3
|
DataColumns.DATA3
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//数据列ID
|
||||||
public static final int DATA_ID_COLUMN = 0;
|
public static final int DATA_ID_COLUMN = 0;
|
||||||
|
//数据列的mime_type
|
||||||
public static final int DATA_MIME_TYPE_COLUMN = 1;
|
public static final int DATA_MIME_TYPE_COLUMN = 1;
|
||||||
|
//数据列内容
|
||||||
public static final int DATA_CONTENT_COLUMN = 2;
|
public static final int DATA_CONTENT_COLUMN = 2;
|
||||||
|
|
||||||
public static final int DATA_CONTENT_DATA_1_COLUMN = 3;
|
public static final int DATA_CONTENT_DATA_1_COLUMN = 3;
|
||||||
|
@ -68,9 +71,15 @@ public class SqlData {
|
||||||
private long mDataContentData1;
|
private long mDataContentData1;
|
||||||
|
|
||||||
private String mDataContentData3;
|
private String mDataContentData3;
|
||||||
|
/*ContentValues
|
||||||
|
就是用于保存一些数据(string/boolean/byte/double/float/int/long/short …)信息,
|
||||||
|
这些信息可以被数据库操作时方便地使用。
|
||||||
|
ContentValues 和 HashTable 类似,都是一种存储的机制,
|
||||||
|
但是两者最大的区别就在于:ContentValues 只能存储基本类型的数据,
|
||||||
|
像string、int之类的,不能存储对象这种东西,而HashTable却可以存储对象。
|
||||||
|
*/
|
||||||
private ContentValues mDiffDataValues;
|
private ContentValues mDiffDataValues;
|
||||||
|
//构造函数两种
|
||||||
public SqlData(Context context) {
|
public SqlData(Context context) {
|
||||||
mContentResolver = context.getContentResolver();
|
mContentResolver = context.getContentResolver();
|
||||||
mIsCreate = true;
|
mIsCreate = true;
|
||||||
|
@ -88,7 +97,7 @@ public class SqlData {
|
||||||
loadFromCursor(c);
|
loadFromCursor(c);
|
||||||
mDiffDataValues = new ContentValues();
|
mDiffDataValues = new ContentValues();
|
||||||
}
|
}
|
||||||
|
//根据cursor确定属性参数
|
||||||
private void loadFromCursor(Cursor c) {
|
private void loadFromCursor(Cursor c) {
|
||||||
mDataId = c.getLong(DATA_ID_COLUMN);
|
mDataId = c.getLong(DATA_ID_COLUMN);
|
||||||
mDataMimeType = c.getString(DATA_MIME_TYPE_COLUMN);
|
mDataMimeType = c.getString(DATA_MIME_TYPE_COLUMN);
|
||||||
|
@ -96,7 +105,7 @@ public class SqlData {
|
||||||
mDataContentData1 = c.getLong(DATA_CONTENT_DATA_1_COLUMN);
|
mDataContentData1 = c.getLong(DATA_CONTENT_DATA_1_COLUMN);
|
||||||
mDataContentData3 = c.getString(DATA_CONTENT_DATA_3_COLUMN);
|
mDataContentData3 = c.getString(DATA_CONTENT_DATA_3_COLUMN);
|
||||||
}
|
}
|
||||||
|
//根据JSON的内容设置属性
|
||||||
public void setContent(JSONObject js) throws JSONException {
|
public void setContent(JSONObject js) throws JSONException {
|
||||||
long dataId = js.has(DataColumns.ID) ? js.getLong(DataColumns.ID) : INVALID_ID;
|
long dataId = js.has(DataColumns.ID) ? js.getLong(DataColumns.ID) : INVALID_ID;
|
||||||
if (mIsCreate || mDataId != dataId) {
|
if (mIsCreate || mDataId != dataId) {
|
||||||
|
@ -129,13 +138,15 @@ public class SqlData {
|
||||||
}
|
}
|
||||||
mDataContentData3 = dataContentData3;
|
mDataContentData3 = dataContentData3;
|
||||||
}
|
}
|
||||||
|
//利用JSON获取内容属性
|
||||||
public JSONObject getContent() throws JSONException {
|
public JSONObject getContent() throws JSONException {
|
||||||
|
//记录未在数据库建立
|
||||||
if (mIsCreate) {
|
if (mIsCreate) {
|
||||||
Log.e(TAG, "it seems that we haven't created this in database yet");
|
Log.e(TAG, "it seems that we haven't created this in database yet");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
JSONObject js = new JSONObject();
|
JSONObject js = new JSONObject();
|
||||||
|
//利用JSON将一系列参数添加进来
|
||||||
js.put(DataColumns.ID, mDataId);
|
js.put(DataColumns.ID, mDataId);
|
||||||
js.put(DataColumns.MIME_TYPE, mDataMimeType);
|
js.put(DataColumns.MIME_TYPE, mDataMimeType);
|
||||||
js.put(DataColumns.CONTENT, mDataContent);
|
js.put(DataColumns.CONTENT, mDataContent);
|
||||||
|
@ -143,18 +154,23 @@ public class SqlData {
|
||||||
js.put(DataColumns.DATA3, mDataContentData3);
|
js.put(DataColumns.DATA3, mDataContentData3);
|
||||||
return js;
|
return js;
|
||||||
}
|
}
|
||||||
|
//传入noteid为建立便签准备
|
||||||
public void commit(long noteId, boolean validateVersion, long version) {
|
public void commit(long noteId, boolean validateVersion, long version) {
|
||||||
|
|
||||||
if (mIsCreate) {
|
if (mIsCreate) {
|
||||||
if (mDataId == INVALID_ID && mDiffDataValues.containsKey(DataColumns.ID)) {
|
if (mDataId == INVALID_ID && mDiffDataValues.containsKey(DataColumns.ID)) {
|
||||||
mDiffDataValues.remove(DataColumns.ID);
|
mDiffDataValues.remove(DataColumns.ID);
|
||||||
}
|
}
|
||||||
|
//保存信息
|
||||||
mDiffDataValues.put(DataColumns.NOTE_ID, noteId);
|
mDiffDataValues.put(DataColumns.NOTE_ID, noteId);
|
||||||
Uri uri = mContentResolver.insert(Notes.CONTENT_DATA_URI, mDiffDataValues);
|
Uri uri = mContentResolver.insert(Notes.CONTENT_DATA_URI, mDiffDataValues);
|
||||||
try {
|
try {
|
||||||
|
/*
|
||||||
|
Uri的getPathSegments()方法返回的是一个元素为String的List,
|
||||||
|
每个元素都是从Uri截取出来的一部分。
|
||||||
|
*/
|
||||||
mDataId = Long.valueOf(uri.getPathSegments().get(1));
|
mDataId = Long.valueOf(uri.getPathSegments().get(1));
|
||||||
|
//捕获数字格式异常
|
||||||
} catch (NumberFormatException e) {
|
} catch (NumberFormatException e) {
|
||||||
Log.e(TAG, "Get note id error :" + e.toString());
|
Log.e(TAG, "Get note id error :" + e.toString());
|
||||||
throw new ActionFailureException("create note failed");
|
throw new ActionFailureException("create note failed");
|
||||||
|
@ -163,6 +179,10 @@ public class SqlData {
|
||||||
if (mDiffDataValues.size() > 0) {
|
if (mDiffDataValues.size() > 0) {
|
||||||
int result = 0;
|
int result = 0;
|
||||||
if (!validateVersion) {
|
if (!validateVersion) {
|
||||||
|
/*
|
||||||
|
ContentResolver.update方法ContentValue只更新指定的字段
|
||||||
|
.update(Uri arg0,ContentValues arg1,String arg2,String[] arg3)
|
||||||
|
*/
|
||||||
result = mContentResolver.update(ContentUris.withAppendedId(
|
result = mContentResolver.update(ContentUris.withAppendedId(
|
||||||
Notes.CONTENT_DATA_URI, mDataId), mDiffDataValues, null, null);
|
Notes.CONTENT_DATA_URI, mDataId), mDiffDataValues, null, null);
|
||||||
} else {
|
} else {
|
||||||
|
@ -173,12 +193,13 @@ public class SqlData {
|
||||||
String.valueOf(noteId), String.valueOf(version)
|
String.valueOf(noteId), String.valueOf(version)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
//未更新
|
||||||
if (result == 0) {
|
if (result == 0) {
|
||||||
Log.w(TAG, "there is no update. maybe user updates note when syncing");
|
Log.w(TAG, "there is no update. maybe user updates note when syncing");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//清空记录,建立失败
|
||||||
mDiffDataValues.clear();
|
mDiffDataValues.clear();
|
||||||
mIsCreate = false;
|
mIsCreate = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,19 +51,19 @@ public class SqlNote {
|
||||||
NoteColumns.LOCAL_MODIFIED, NoteColumns.ORIGIN_PARENT_ID, NoteColumns.GTASK_ID,
|
NoteColumns.LOCAL_MODIFIED, NoteColumns.ORIGIN_PARENT_ID, NoteColumns.GTASK_ID,
|
||||||
NoteColumns.VERSION
|
NoteColumns.VERSION
|
||||||
};
|
};
|
||||||
|
//ID列
|
||||||
public static final int ID_COLUMN = 0;
|
public static final int ID_COLUMN = 0;
|
||||||
|
//警示日期列
|
||||||
public static final int ALERTED_DATE_COLUMN = 1;
|
public static final int ALERTED_DATE_COLUMN = 1;
|
||||||
|
//背景颜色id列
|
||||||
public static final int BG_COLOR_ID_COLUMN = 2;
|
public static final int BG_COLOR_ID_COLUMN = 2;
|
||||||
|
//建立的日期列
|
||||||
public static final int CREATED_DATE_COLUMN = 3;
|
public static final int CREATED_DATE_COLUMN = 3;
|
||||||
|
//有连接列
|
||||||
public static final int HAS_ATTACHMENT_COLUMN = 4;
|
public static final int HAS_ATTACHMENT_COLUMN = 4;
|
||||||
|
//修改日期列
|
||||||
public static final int MODIFIED_DATE_COLUMN = 5;
|
public static final int MODIFIED_DATE_COLUMN = 5;
|
||||||
|
//便签数目列
|
||||||
public static final int NOTES_COUNT_COLUMN = 6;
|
public static final int NOTES_COUNT_COLUMN = 6;
|
||||||
|
|
||||||
public static final int PARENT_ID_COLUMN = 7;
|
public static final int PARENT_ID_COLUMN = 7;
|
||||||
|
@ -121,7 +121,7 @@ public class SqlNote {
|
||||||
private ContentValues mDiffNoteValues;
|
private ContentValues mDiffNoteValues;
|
||||||
|
|
||||||
private ArrayList<SqlData> mDataList;
|
private ArrayList<SqlData> mDataList;
|
||||||
|
//三类构造函数
|
||||||
public SqlNote(Context context) {
|
public SqlNote(Context context) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mContentResolver = context.getContentResolver();
|
mContentResolver = context.getContentResolver();
|
||||||
|
@ -165,7 +165,7 @@ public class SqlNote {
|
||||||
mDiffNoteValues = new ContentValues();
|
mDiffNoteValues = new ContentValues();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
//递归查询符合的id
|
||||||
private void loadFromCursor(long id) {
|
private void loadFromCursor(long id) {
|
||||||
Cursor c = null;
|
Cursor c = null;
|
||||||
try {
|
try {
|
||||||
|
@ -184,7 +184,7 @@ public class SqlNote {
|
||||||
c.close();
|
c.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//利用cursor设置属性参数
|
||||||
private void loadFromCursor(Cursor c) {
|
private void loadFromCursor(Cursor c) {
|
||||||
mId = c.getLong(ID_COLUMN);
|
mId = c.getLong(ID_COLUMN);
|
||||||
mAlertDate = c.getLong(ALERTED_DATE_COLUMN);
|
mAlertDate = c.getLong(ALERTED_DATE_COLUMN);
|
||||||
|
@ -199,7 +199,7 @@ public class SqlNote {
|
||||||
mWidgetType = c.getInt(WIDGET_TYPE_COLUMN);
|
mWidgetType = c.getInt(WIDGET_TYPE_COLUMN);
|
||||||
mVersion = c.getLong(VERSION_COLUMN);
|
mVersion = c.getLong(VERSION_COLUMN);
|
||||||
}
|
}
|
||||||
|
//根据数据库查询id
|
||||||
private void loadDataContent() {
|
private void loadDataContent() {
|
||||||
Cursor c = null;
|
Cursor c = null;
|
||||||
mDataList.clear();
|
mDataList.clear();
|
||||||
|
@ -225,7 +225,7 @@ public class SqlNote {
|
||||||
c.close();
|
c.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//根据JSON的内容设置属性参数
|
||||||
public boolean setContent(JSONObject js) {
|
public boolean setContent(JSONObject js) {
|
||||||
try {
|
try {
|
||||||
JSONObject note = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE);
|
JSONObject note = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE);
|
||||||
|
@ -358,17 +358,18 @@ public class SqlNote {
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
//小米便签获取内容
|
||||||
public JSONObject getContent() {
|
public JSONObject getContent() {
|
||||||
try {
|
try {
|
||||||
JSONObject js = new JSONObject();
|
JSONObject js = new JSONObject();
|
||||||
|
//未创建内容加入数据库中
|
||||||
if (mIsCreate) {
|
if (mIsCreate) {
|
||||||
Log.e(TAG, "it seems that we haven't created this in database yet");
|
Log.e(TAG, "it seems that we haven't created this in database yet");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
JSONObject note = new JSONObject();
|
JSONObject note = new JSONObject();
|
||||||
|
//如果便签类型匹配
|
||||||
if (mType == Notes.TYPE_NOTE) {
|
if (mType == Notes.TYPE_NOTE) {
|
||||||
note.put(NoteColumns.ID, mId);
|
note.put(NoteColumns.ID, mId);
|
||||||
note.put(NoteColumns.ALERTED_DATE, mAlertDate);
|
note.put(NoteColumns.ALERTED_DATE, mAlertDate);
|
||||||
|
@ -406,36 +407,36 @@ public class SqlNote {
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
//设置父ID
|
||||||
public void setParentId(long id) {
|
public void setParentId(long id) {
|
||||||
mParentId = id;
|
mParentId = id;
|
||||||
mDiffNoteValues.put(NoteColumns.PARENT_ID, id);
|
mDiffNoteValues.put(NoteColumns.PARENT_ID, id);
|
||||||
}
|
}
|
||||||
|
//设置日程同步ID
|
||||||
public void setGtaskId(String gid) {
|
public void setGtaskId(String gid) {
|
||||||
mDiffNoteValues.put(NoteColumns.GTASK_ID, gid);
|
mDiffNoteValues.put(NoteColumns.GTASK_ID, gid);
|
||||||
}
|
}
|
||||||
|
//设置同步ID
|
||||||
public void setSyncId(long syncId) {
|
public void setSyncId(long syncId) {
|
||||||
mDiffNoteValues.put(NoteColumns.SYNC_ID, syncId);
|
mDiffNoteValues.put(NoteColumns.SYNC_ID, syncId);
|
||||||
}
|
}
|
||||||
|
//重新设定本地修改
|
||||||
public void resetLocalModified() {
|
public void resetLocalModified() {
|
||||||
mDiffNoteValues.put(NoteColumns.LOCAL_MODIFIED, 0);
|
mDiffNoteValues.put(NoteColumns.LOCAL_MODIFIED, 0);
|
||||||
}
|
}
|
||||||
|
//获取对象ID
|
||||||
public long getId() {
|
public long getId() {
|
||||||
return mId;
|
return mId;
|
||||||
}
|
}
|
||||||
|
//获取父ID
|
||||||
public long getParentId() {
|
public long getParentId() {
|
||||||
return mParentId;
|
return mParentId;
|
||||||
}
|
}
|
||||||
|
//获取对象片段
|
||||||
public String getSnippet() {
|
public String getSnippet() {
|
||||||
return mSnippet;
|
return mSnippet;
|
||||||
}
|
}
|
||||||
|
//判断是否为便签ID
|
||||||
public boolean isNoteType() {
|
public boolean isNoteType() {
|
||||||
return mType == Notes.TYPE_NOTE;
|
return mType == Notes.TYPE_NOTE;
|
||||||
}
|
}
|
||||||
|
@ -453,6 +454,7 @@ public class SqlNote {
|
||||||
Log.e(TAG, "Get note id error :" + e.toString());
|
Log.e(TAG, "Get note id error :" + e.toString());
|
||||||
throw new ActionFailureException("create note failed");
|
throw new ActionFailureException("create note failed");
|
||||||
}
|
}
|
||||||
|
//建立线程ID失败
|
||||||
if (mId == 0) {
|
if (mId == 0) {
|
||||||
throw new IllegalStateException("Create thread id failed");
|
throw new IllegalStateException("Create thread id failed");
|
||||||
}
|
}
|
||||||
|
@ -470,6 +472,7 @@ public class SqlNote {
|
||||||
if (mDiffNoteValues.size() > 0) {
|
if (mDiffNoteValues.size() > 0) {
|
||||||
mVersion ++;
|
mVersion ++;
|
||||||
int result = 0;
|
int result = 0;
|
||||||
|
//若有效
|
||||||
if (!validateVersion) {
|
if (!validateVersion) {
|
||||||
result = mContentResolver.update(Notes.CONTENT_NOTE_URI, mDiffNoteValues, "("
|
result = mContentResolver.update(Notes.CONTENT_NOTE_URI, mDiffNoteValues, "("
|
||||||
+ NoteColumns.ID + "=?)", new String[] {
|
+ NoteColumns.ID + "=?)", new String[] {
|
||||||
|
@ -482,6 +485,7 @@ public class SqlNote {
|
||||||
String.valueOf(mId), String.valueOf(mVersion)
|
String.valueOf(mId), String.valueOf(mVersion)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
//未更新,可能在同步时更新了
|
||||||
if (result == 0) {
|
if (result == 0) {
|
||||||
Log.w(TAG, "there is no update. maybe user updates note when syncing");
|
Log.w(TAG, "there is no update. maybe user updates note when syncing");
|
||||||
}
|
}
|
||||||
|
@ -494,7 +498,7 @@ public class SqlNote {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// refresh local info
|
// 刷新本地infof
|
||||||
loadFromCursor(mId);
|
loadFromCursor(mId);
|
||||||
if (mType == Notes.TYPE_NOTE)
|
if (mType == Notes.TYPE_NOTE)
|
||||||
loadDataContent();
|
loadDataContent();
|
||||||
|
|
|
@ -44,7 +44,7 @@ public class Task extends Node {
|
||||||
private Task mPriorSibling;
|
private Task mPriorSibling;
|
||||||
|
|
||||||
private TaskList mParent;
|
private TaskList mParent;
|
||||||
|
//构造函数
|
||||||
public Task() {
|
public Task() {
|
||||||
super();
|
super();
|
||||||
mCompleted = false;
|
mCompleted = false;
|
||||||
|
@ -53,22 +53,22 @@ public class Task extends Node {
|
||||||
mParent = null;
|
mParent = null;
|
||||||
mMetaInfo = null;
|
mMetaInfo = null;
|
||||||
}
|
}
|
||||||
|
//获得创造的动作
|
||||||
public JSONObject getCreateAction(int actionId) {
|
public JSONObject getCreateAction(int actionId) {
|
||||||
JSONObject js = new JSONObject();
|
JSONObject js = new JSONObject();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// action_type
|
// 动作类型
|
||||||
js.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE,
|
js.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE,
|
||||||
GTaskStringUtils.GTASK_JSON_ACTION_TYPE_CREATE);
|
GTaskStringUtils.GTASK_JSON_ACTION_TYPE_CREATE);
|
||||||
|
|
||||||
// action_id
|
// 动作ID
|
||||||
js.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, actionId);
|
js.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, actionId);
|
||||||
|
|
||||||
// index
|
// 索引
|
||||||
js.put(GTaskStringUtils.GTASK_JSON_INDEX, mParent.getChildTaskIndex(this));
|
js.put(GTaskStringUtils.GTASK_JSON_INDEX, mParent.getChildTaskIndex(this));
|
||||||
|
|
||||||
// entity_delta
|
// JSON创建内容
|
||||||
JSONObject entity = new JSONObject();
|
JSONObject entity = new JSONObject();
|
||||||
entity.put(GTaskStringUtils.GTASK_JSON_NAME, getName());
|
entity.put(GTaskStringUtils.GTASK_JSON_NAME, getName());
|
||||||
entity.put(GTaskStringUtils.GTASK_JSON_CREATOR_ID, "null");
|
entity.put(GTaskStringUtils.GTASK_JSON_CREATOR_ID, "null");
|
||||||
|
@ -79,17 +79,17 @@ public class Task extends Node {
|
||||||
}
|
}
|
||||||
js.put(GTaskStringUtils.GTASK_JSON_ENTITY_DELTA, entity);
|
js.put(GTaskStringUtils.GTASK_JSON_ENTITY_DELTA, entity);
|
||||||
|
|
||||||
// parent_id
|
// 父ID
|
||||||
js.put(GTaskStringUtils.GTASK_JSON_PARENT_ID, mParent.getGid());
|
js.put(GTaskStringUtils.GTASK_JSON_PARENT_ID, mParent.getGid());
|
||||||
|
|
||||||
// dest_parent_type
|
// 目的父类型
|
||||||
js.put(GTaskStringUtils.GTASK_JSON_DEST_PARENT_TYPE,
|
js.put(GTaskStringUtils.GTASK_JSON_DEST_PARENT_TYPE,
|
||||||
GTaskStringUtils.GTASK_JSON_TYPE_GROUP);
|
GTaskStringUtils.GTASK_JSON_TYPE_GROUP);
|
||||||
|
|
||||||
// list_id
|
// 列表ID
|
||||||
js.put(GTaskStringUtils.GTASK_JSON_LIST_ID, mParent.getGid());
|
js.put(GTaskStringUtils.GTASK_JSON_LIST_ID, mParent.getGid());
|
||||||
|
|
||||||
// prior_sibling_id
|
// 优先同级ID
|
||||||
if (mPriorSibling != null) {
|
if (mPriorSibling != null) {
|
||||||
js.put(GTaskStringUtils.GTASK_JSON_PRIOR_SIBLING_ID, mPriorSibling.getGid());
|
js.put(GTaskStringUtils.GTASK_JSON_PRIOR_SIBLING_ID, mPriorSibling.getGid());
|
||||||
}
|
}
|
||||||
|
@ -102,22 +102,22 @@ public class Task extends Node {
|
||||||
|
|
||||||
return js;
|
return js;
|
||||||
}
|
}
|
||||||
|
//获得更新的动作
|
||||||
public JSONObject getUpdateAction(int actionId) {
|
public JSONObject getUpdateAction(int actionId) {
|
||||||
JSONObject js = new JSONObject();
|
JSONObject js = new JSONObject();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// action_type
|
|
||||||
js.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE,
|
js.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE,
|
||||||
GTaskStringUtils.GTASK_JSON_ACTION_TYPE_UPDATE);
|
GTaskStringUtils.GTASK_JSON_ACTION_TYPE_UPDATE);
|
||||||
|
|
||||||
// action_id
|
|
||||||
js.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, actionId);
|
js.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, actionId);
|
||||||
|
|
||||||
// id
|
// id
|
||||||
js.put(GTaskStringUtils.GTASK_JSON_ID, getGid());
|
js.put(GTaskStringUtils.GTASK_JSON_ID, getGid());
|
||||||
|
|
||||||
// entity_delta
|
|
||||||
JSONObject entity = new JSONObject();
|
JSONObject entity = new JSONObject();
|
||||||
entity.put(GTaskStringUtils.GTASK_JSON_NAME, getName());
|
entity.put(GTaskStringUtils.GTASK_JSON_NAME, getName());
|
||||||
if (getNotes() != null) {
|
if (getNotes() != null) {
|
||||||
|
@ -134,7 +134,7 @@ public class Task extends Node {
|
||||||
|
|
||||||
return js;
|
return js;
|
||||||
}
|
}
|
||||||
|
//通过远程JSON设置内容
|
||||||
public void setContentByRemoteJSON(JSONObject js) {
|
public void setContentByRemoteJSON(JSONObject js) {
|
||||||
if (js != null) {
|
if (js != null) {
|
||||||
try {
|
try {
|
||||||
|
@ -143,27 +143,27 @@ public class Task extends Node {
|
||||||
setGid(js.getString(GTaskStringUtils.GTASK_JSON_ID));
|
setGid(js.getString(GTaskStringUtils.GTASK_JSON_ID));
|
||||||
}
|
}
|
||||||
|
|
||||||
// last_modified
|
// 最后一次修改
|
||||||
if (js.has(GTaskStringUtils.GTASK_JSON_LAST_MODIFIED)) {
|
if (js.has(GTaskStringUtils.GTASK_JSON_LAST_MODIFIED)) {
|
||||||
setLastModified(js.getLong(GTaskStringUtils.GTASK_JSON_LAST_MODIFIED));
|
setLastModified(js.getLong(GTaskStringUtils.GTASK_JSON_LAST_MODIFIED));
|
||||||
}
|
}
|
||||||
|
|
||||||
// name
|
// 姓名
|
||||||
if (js.has(GTaskStringUtils.GTASK_JSON_NAME)) {
|
if (js.has(GTaskStringUtils.GTASK_JSON_NAME)) {
|
||||||
setName(js.getString(GTaskStringUtils.GTASK_JSON_NAME));
|
setName(js.getString(GTaskStringUtils.GTASK_JSON_NAME));
|
||||||
}
|
}
|
||||||
|
|
||||||
// notes
|
// 有便签
|
||||||
if (js.has(GTaskStringUtils.GTASK_JSON_NOTES)) {
|
if (js.has(GTaskStringUtils.GTASK_JSON_NOTES)) {
|
||||||
setNotes(js.getString(GTaskStringUtils.GTASK_JSON_NOTES));
|
setNotes(js.getString(GTaskStringUtils.GTASK_JSON_NOTES));
|
||||||
}
|
}
|
||||||
|
|
||||||
// deleted
|
// 删除
|
||||||
if (js.has(GTaskStringUtils.GTASK_JSON_DELETED)) {
|
if (js.has(GTaskStringUtils.GTASK_JSON_DELETED)) {
|
||||||
setDeleted(js.getBoolean(GTaskStringUtils.GTASK_JSON_DELETED));
|
setDeleted(js.getBoolean(GTaskStringUtils.GTASK_JSON_DELETED));
|
||||||
}
|
}
|
||||||
|
|
||||||
// completed
|
// 完成
|
||||||
if (js.has(GTaskStringUtils.GTASK_JSON_COMPLETED)) {
|
if (js.has(GTaskStringUtils.GTASK_JSON_COMPLETED)) {
|
||||||
setCompleted(js.getBoolean(GTaskStringUtils.GTASK_JSON_COMPLETED));
|
setCompleted(js.getBoolean(GTaskStringUtils.GTASK_JSON_COMPLETED));
|
||||||
}
|
}
|
||||||
|
@ -174,8 +174,9 @@ public class Task extends Node {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//通过本地JSON设置内容
|
||||||
public void setContentByLocalJSON(JSONObject js) {
|
public void setContentByLocalJSON(JSONObject js) {
|
||||||
|
//JSON空消息设置内容失败
|
||||||
if (js == null || !js.has(GTaskStringUtils.META_HEAD_NOTE)
|
if (js == null || !js.has(GTaskStringUtils.META_HEAD_NOTE)
|
||||||
|| !js.has(GTaskStringUtils.META_HEAD_DATA)) {
|
|| !js.has(GTaskStringUtils.META_HEAD_DATA)) {
|
||||||
Log.w(TAG, "setContentByLocalJSON: nothing is avaiable");
|
Log.w(TAG, "setContentByLocalJSON: nothing is avaiable");
|
||||||
|
@ -184,12 +185,12 @@ public class Task extends Node {
|
||||||
try {
|
try {
|
||||||
JSONObject note = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE);
|
JSONObject note = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE);
|
||||||
JSONArray dataArray = js.getJSONArray(GTaskStringUtils.META_HEAD_DATA);
|
JSONArray dataArray = js.getJSONArray(GTaskStringUtils.META_HEAD_DATA);
|
||||||
|
//无效类型
|
||||||
if (note.getInt(NoteColumns.TYPE) != Notes.TYPE_NOTE) {
|
if (note.getInt(NoteColumns.TYPE) != Notes.TYPE_NOTE) {
|
||||||
Log.e(TAG, "invalid type");
|
Log.e(TAG, "invalid type");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
//如果文本备份找到一致就跳出
|
||||||
for (int i = 0; i < dataArray.length(); i++) {
|
for (int i = 0; i < dataArray.length(); i++) {
|
||||||
JSONObject data = dataArray.getJSONObject(i);
|
JSONObject data = dataArray.getJSONObject(i);
|
||||||
if (TextUtils.equals(data.getString(DataColumns.MIME_TYPE), DataConstants.NOTE)) {
|
if (TextUtils.equals(data.getString(DataColumns.MIME_TYPE), DataConstants.NOTE)) {
|
||||||
|
@ -208,7 +209,7 @@ public class Task extends Node {
|
||||||
String name = getName();
|
String name = getName();
|
||||||
try {
|
try {
|
||||||
if (mMetaInfo == null) {
|
if (mMetaInfo == null) {
|
||||||
// new task created from web
|
// 初始为空,从网页创建的新任务
|
||||||
if (name == null) {
|
if (name == null) {
|
||||||
Log.w(TAG, "the note seems to be an empty one");
|
Log.w(TAG, "the note seems to be an empty one");
|
||||||
return null;
|
return null;
|
||||||
|
@ -225,7 +226,7 @@ public class Task extends Node {
|
||||||
js.put(GTaskStringUtils.META_HEAD_NOTE, note);
|
js.put(GTaskStringUtils.META_HEAD_NOTE, note);
|
||||||
return js;
|
return js;
|
||||||
} else {
|
} else {
|
||||||
// synced task
|
// 同步任务
|
||||||
JSONObject note = mMetaInfo.getJSONObject(GTaskStringUtils.META_HEAD_NOTE);
|
JSONObject note = mMetaInfo.getJSONObject(GTaskStringUtils.META_HEAD_NOTE);
|
||||||
JSONArray dataArray = mMetaInfo.getJSONArray(GTaskStringUtils.META_HEAD_DATA);
|
JSONArray dataArray = mMetaInfo.getJSONArray(GTaskStringUtils.META_HEAD_DATA);
|
||||||
|
|
||||||
|
@ -246,7 +247,7 @@ public class Task extends Node {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//设置元信息
|
||||||
public void setMetaInfo(MetaData metaData) {
|
public void setMetaInfo(MetaData metaData) {
|
||||||
if (metaData != null && metaData.getNotes() != null) {
|
if (metaData != null && metaData.getNotes() != null) {
|
||||||
try {
|
try {
|
||||||
|
@ -275,29 +276,29 @@ public class Task extends Node {
|
||||||
return SYNC_ACTION_UPDATE_LOCAL;
|
return SYNC_ACTION_UPDATE_LOCAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// validate the note id now
|
// 现在验证便签 id
|
||||||
if (c.getLong(SqlNote.ID_COLUMN) != noteInfo.getLong(NoteColumns.ID)) {
|
if (c.getLong(SqlNote.ID_COLUMN) != noteInfo.getLong(NoteColumns.ID)) {
|
||||||
Log.w(TAG, "note id doesn't match");
|
Log.w(TAG, "note id doesn't match");
|
||||||
return SYNC_ACTION_UPDATE_LOCAL;
|
return SYNC_ACTION_UPDATE_LOCAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (c.getInt(SqlNote.LOCAL_MODIFIED_COLUMN) == 0) {
|
if (c.getInt(SqlNote.LOCAL_MODIFIED_COLUMN) == 0) {
|
||||||
// there is no local update
|
// 没有本地更新
|
||||||
if (c.getLong(SqlNote.SYNC_ID_COLUMN) == getLastModified()) {
|
if (c.getLong(SqlNote.SYNC_ID_COLUMN) == getLastModified()) {
|
||||||
// no update both side
|
// no update both side
|
||||||
return SYNC_ACTION_NONE;
|
return SYNC_ACTION_NONE;
|
||||||
} else {
|
} else {
|
||||||
// apply remote to local
|
// 将远程应用到本地
|
||||||
return SYNC_ACTION_UPDATE_LOCAL;
|
return SYNC_ACTION_UPDATE_LOCAL;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// validate gtask id
|
// 验证日程同步 id
|
||||||
if (!c.getString(SqlNote.GTASK_ID_COLUMN).equals(getGid())) {
|
if (!c.getString(SqlNote.GTASK_ID_COLUMN).equals(getGid())) {
|
||||||
Log.e(TAG, "gtask id doesn't match");
|
Log.e(TAG, "gtask id doesn't match");
|
||||||
return SYNC_ACTION_ERROR;
|
return SYNC_ACTION_ERROR;
|
||||||
}
|
}
|
||||||
if (c.getLong(SqlNote.SYNC_ID_COLUMN) == getLastModified()) {
|
if (c.getLong(SqlNote.SYNC_ID_COLUMN) == getLastModified()) {
|
||||||
// local modification only
|
// 只有本地修改
|
||||||
return SYNC_ACTION_UPDATE_REMOTE;
|
return SYNC_ACTION_UPDATE_REMOTE;
|
||||||
} else {
|
} else {
|
||||||
return SYNC_ACTION_UPDATE_CONFLICT;
|
return SYNC_ACTION_UPDATE_CONFLICT;
|
||||||
|
@ -310,36 +311,36 @@ public class Task extends Node {
|
||||||
|
|
||||||
return SYNC_ACTION_ERROR;
|
return SYNC_ACTION_ERROR;
|
||||||
}
|
}
|
||||||
|
//值得保留
|
||||||
public boolean isWorthSaving() {
|
public boolean isWorthSaving() {
|
||||||
return mMetaInfo != null || (getName() != null && getName().trim().length() > 0)
|
return mMetaInfo != null || (getName() != null && getName().trim().length() > 0)
|
||||||
|| (getNotes() != null && getNotes().trim().length() > 0);
|
|| (getNotes() != null && getNotes().trim().length() > 0);
|
||||||
}
|
}
|
||||||
|
//设置完成
|
||||||
public void setCompleted(boolean completed) {
|
public void setCompleted(boolean completed) {
|
||||||
this.mCompleted = completed;
|
this.mCompleted = completed;
|
||||||
}
|
}
|
||||||
|
//设置便签
|
||||||
public void setNotes(String notes) {
|
public void setNotes(String notes) {
|
||||||
this.mNotes = notes;
|
this.mNotes = notes;
|
||||||
}
|
}
|
||||||
|
//设置优先级
|
||||||
public void setPriorSibling(Task priorSibling) {
|
public void setPriorSibling(Task priorSibling) {
|
||||||
this.mPriorSibling = priorSibling;
|
this.mPriorSibling = priorSibling;
|
||||||
}
|
}
|
||||||
|
//设置父列表
|
||||||
public void setParent(TaskList parent) {
|
public void setParent(TaskList parent) {
|
||||||
this.mParent = parent;
|
this.mParent = parent;
|
||||||
}
|
}
|
||||||
|
//获得完成项
|
||||||
public boolean getCompleted() {
|
public boolean getCompleted() {
|
||||||
return this.mCompleted;
|
return this.mCompleted;
|
||||||
}
|
}
|
||||||
|
//获得便签
|
||||||
public String getNotes() {
|
public String getNotes() {
|
||||||
return this.mNotes;
|
return this.mNotes;
|
||||||
}
|
}
|
||||||
|
//获得优先级
|
||||||
public Task getPriorSibling() {
|
public Task getPriorSibling() {
|
||||||
return this.mPriorSibling;
|
return this.mPriorSibling;
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,17 +47,17 @@ public class TaskList extends Node {
|
||||||
JSONObject js = new JSONObject();
|
JSONObject js = new JSONObject();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// action_type
|
// 动作类型
|
||||||
js.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE,
|
js.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE,
|
||||||
GTaskStringUtils.GTASK_JSON_ACTION_TYPE_CREATE);
|
GTaskStringUtils.GTASK_JSON_ACTION_TYPE_CREATE);
|
||||||
|
|
||||||
// action_id
|
// 动作ID
|
||||||
js.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, actionId);
|
js.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, actionId);
|
||||||
|
|
||||||
// index
|
// 索引
|
||||||
js.put(GTaskStringUtils.GTASK_JSON_INDEX, mIndex);
|
js.put(GTaskStringUtils.GTASK_JSON_INDEX, mIndex);
|
||||||
|
|
||||||
// entity_delta
|
// JSON设置内容
|
||||||
JSONObject entity = new JSONObject();
|
JSONObject entity = new JSONObject();
|
||||||
entity.put(GTaskStringUtils.GTASK_JSON_NAME, getName());
|
entity.put(GTaskStringUtils.GTASK_JSON_NAME, getName());
|
||||||
entity.put(GTaskStringUtils.GTASK_JSON_CREATOR_ID, "null");
|
entity.put(GTaskStringUtils.GTASK_JSON_CREATOR_ID, "null");
|
||||||
|
@ -78,17 +78,17 @@ public class TaskList extends Node {
|
||||||
JSONObject js = new JSONObject();
|
JSONObject js = new JSONObject();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// action_type
|
|
||||||
js.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE,
|
js.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE,
|
||||||
GTaskStringUtils.GTASK_JSON_ACTION_TYPE_UPDATE);
|
GTaskStringUtils.GTASK_JSON_ACTION_TYPE_UPDATE);
|
||||||
|
|
||||||
// action_id
|
|
||||||
js.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, actionId);
|
js.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, actionId);
|
||||||
|
|
||||||
// id
|
|
||||||
js.put(GTaskStringUtils.GTASK_JSON_ID, getGid());
|
js.put(GTaskStringUtils.GTASK_JSON_ID, getGid());
|
||||||
|
|
||||||
// entity_delta
|
|
||||||
JSONObject entity = new JSONObject();
|
JSONObject entity = new JSONObject();
|
||||||
entity.put(GTaskStringUtils.GTASK_JSON_NAME, getName());
|
entity.put(GTaskStringUtils.GTASK_JSON_NAME, getName());
|
||||||
entity.put(GTaskStringUtils.GTASK_JSON_DELETED, getDeleted());
|
entity.put(GTaskStringUtils.GTASK_JSON_DELETED, getDeleted());
|
||||||
|
@ -102,21 +102,21 @@ public class TaskList extends Node {
|
||||||
|
|
||||||
return js;
|
return js;
|
||||||
}
|
}
|
||||||
|
//通过远程JSON设置内容
|
||||||
public void setContentByRemoteJSON(JSONObject js) {
|
public void setContentByRemoteJSON(JSONObject js) {
|
||||||
if (js != null) {
|
if (js != null) {
|
||||||
try {
|
try {
|
||||||
// id
|
|
||||||
if (js.has(GTaskStringUtils.GTASK_JSON_ID)) {
|
if (js.has(GTaskStringUtils.GTASK_JSON_ID)) {
|
||||||
setGid(js.getString(GTaskStringUtils.GTASK_JSON_ID));
|
setGid(js.getString(GTaskStringUtils.GTASK_JSON_ID));
|
||||||
}
|
}
|
||||||
|
|
||||||
// last_modified
|
// 最后一次修改
|
||||||
if (js.has(GTaskStringUtils.GTASK_JSON_LAST_MODIFIED)) {
|
if (js.has(GTaskStringUtils.GTASK_JSON_LAST_MODIFIED)) {
|
||||||
setLastModified(js.getLong(GTaskStringUtils.GTASK_JSON_LAST_MODIFIED));
|
setLastModified(js.getLong(GTaskStringUtils.GTASK_JSON_LAST_MODIFIED));
|
||||||
}
|
}
|
||||||
|
|
||||||
// name
|
// 姓名
|
||||||
if (js.has(GTaskStringUtils.GTASK_JSON_NAME)) {
|
if (js.has(GTaskStringUtils.GTASK_JSON_NAME)) {
|
||||||
setName(js.getString(GTaskStringUtils.GTASK_JSON_NAME));
|
setName(js.getString(GTaskStringUtils.GTASK_JSON_NAME));
|
||||||
}
|
}
|
||||||
|
@ -128,24 +128,27 @@ public class TaskList extends Node {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//通过本地JSON设置内容(在Node中有涉及)
|
||||||
public void setContentByLocalJSON(JSONObject js) {
|
public void setContentByLocalJSON(JSONObject js) {
|
||||||
if (js == null || !js.has(GTaskStringUtils.META_HEAD_NOTE)) {
|
if (js == null || !js.has(GTaskStringUtils.META_HEAD_NOTE)) {
|
||||||
Log.w(TAG, "setContentByLocalJSON: nothing is avaiable");
|
Log.w(TAG, "setContentByLocalJSON: nothing is avaiable");
|
||||||
}
|
}
|
||||||
|
//建立JSON文件夹加入元头便签
|
||||||
try {
|
try {
|
||||||
JSONObject folder = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE);
|
JSONObject folder = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE);
|
||||||
|
|
||||||
if (folder.getInt(NoteColumns.TYPE) == Notes.TYPE_FOLDER) {
|
if (folder.getInt(NoteColumns.TYPE) == Notes.TYPE_FOLDER) {
|
||||||
String name = folder.getString(NoteColumns.SNIPPET);
|
String name = folder.getString(NoteColumns.SNIPPET);
|
||||||
|
//设置姓名
|
||||||
setName(GTaskStringUtils.MIUI_FOLDER_PREFFIX + name);
|
setName(GTaskStringUtils.MIUI_FOLDER_PREFFIX + name);
|
||||||
|
//获得类型与便签系统类型一样时
|
||||||
} else if (folder.getInt(NoteColumns.TYPE) == Notes.TYPE_SYSTEM) {
|
} else if (folder.getInt(NoteColumns.TYPE) == Notes.TYPE_SYSTEM) {
|
||||||
if (folder.getLong(NoteColumns.ID) == Notes.ID_ROOT_FOLDER)
|
if (folder.getLong(NoteColumns.ID) == Notes.ID_ROOT_FOLDER)
|
||||||
setName(GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_DEFAULT);
|
setName(GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_DEFAULT);
|
||||||
else if (folder.getLong(NoteColumns.ID) == Notes.ID_CALL_RECORD_FOLDER)
|
else if (folder.getLong(NoteColumns.ID) == Notes.ID_CALL_RECORD_FOLDER)
|
||||||
setName(GTaskStringUtils.MIUI_FOLDER_PREFFIX
|
setName(GTaskStringUtils.MIUI_FOLDER_PREFFIX
|
||||||
+ GTaskStringUtils.FOLDER_CALL_NOTE);
|
+ GTaskStringUtils.FOLDER_CALL_NOTE);
|
||||||
|
//无效系统文件夹
|
||||||
else
|
else
|
||||||
Log.e(TAG, "invalid system folder");
|
Log.e(TAG, "invalid system folder");
|
||||||
} else {
|
} else {
|
||||||
|
@ -156,7 +159,7 @@ public class TaskList extends Node {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//通过内容获得本地JSON
|
||||||
public JSONObject getLocalJSONFromContent() {
|
public JSONObject getLocalJSONFromContent() {
|
||||||
try {
|
try {
|
||||||
JSONObject js = new JSONObject();
|
JSONObject js = new JSONObject();
|
||||||
|
@ -167,6 +170,7 @@ public class TaskList extends Node {
|
||||||
folderName = folderName.substring(GTaskStringUtils.MIUI_FOLDER_PREFFIX.length(),
|
folderName = folderName.substring(GTaskStringUtils.MIUI_FOLDER_PREFFIX.length(),
|
||||||
folderName.length());
|
folderName.length());
|
||||||
folder.put(NoteColumns.SNIPPET, folderName);
|
folder.put(NoteColumns.SNIPPET, folderName);
|
||||||
|
//文件夹名和默认文件夹名一致时
|
||||||
if (folderName.equals(GTaskStringUtils.FOLDER_DEFAULT)
|
if (folderName.equals(GTaskStringUtils.FOLDER_DEFAULT)
|
||||||
|| folderName.equals(GTaskStringUtils.FOLDER_CALL_NOTE))
|
|| folderName.equals(GTaskStringUtils.FOLDER_CALL_NOTE))
|
||||||
folder.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM);
|
folder.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM);
|
||||||
|
@ -186,25 +190,25 @@ public class TaskList extends Node {
|
||||||
public int getSyncAction(Cursor c) {
|
public int getSyncAction(Cursor c) {
|
||||||
try {
|
try {
|
||||||
if (c.getInt(SqlNote.LOCAL_MODIFIED_COLUMN) == 0) {
|
if (c.getInt(SqlNote.LOCAL_MODIFIED_COLUMN) == 0) {
|
||||||
// there is no local update
|
// t没有本地更新
|
||||||
if (c.getLong(SqlNote.SYNC_ID_COLUMN) == getLastModified()) {
|
if (c.getLong(SqlNote.SYNC_ID_COLUMN) == getLastModified()) {
|
||||||
// no update both side
|
// 双方无更新
|
||||||
return SYNC_ACTION_NONE;
|
return SYNC_ACTION_NONE;
|
||||||
} else {
|
} else {
|
||||||
// apply remote to local
|
// 将远程应用到本地
|
||||||
return SYNC_ACTION_UPDATE_LOCAL;
|
return SYNC_ACTION_UPDATE_LOCAL;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// validate gtask id
|
// 验证日程同步 id
|
||||||
if (!c.getString(SqlNote.GTASK_ID_COLUMN).equals(getGid())) {
|
if (!c.getString(SqlNote.GTASK_ID_COLUMN).equals(getGid())) {
|
||||||
Log.e(TAG, "gtask id doesn't match");
|
Log.e(TAG, "gtask id doesn't match");
|
||||||
return SYNC_ACTION_ERROR;
|
return SYNC_ACTION_ERROR;
|
||||||
}
|
}
|
||||||
if (c.getLong(SqlNote.SYNC_ID_COLUMN) == getLastModified()) {
|
if (c.getLong(SqlNote.SYNC_ID_COLUMN) == getLastModified()) {
|
||||||
// local modification only
|
// 只有本地修改
|
||||||
return SYNC_ACTION_UPDATE_REMOTE;
|
return SYNC_ACTION_UPDATE_REMOTE;
|
||||||
} else {
|
} else {
|
||||||
// for folder conflicts, just apply local modification
|
// 对于文件夹冲突,只需应用本地修改
|
||||||
return SYNC_ACTION_UPDATE_REMOTE;
|
return SYNC_ACTION_UPDATE_REMOTE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -215,17 +219,17 @@ public class TaskList extends Node {
|
||||||
|
|
||||||
return SYNC_ACTION_ERROR;
|
return SYNC_ACTION_ERROR;
|
||||||
}
|
}
|
||||||
|
//获得子任务数量
|
||||||
public int getChildTaskCount() {
|
public int getChildTaskCount() {
|
||||||
return mChildren.size();
|
return mChildren.size();
|
||||||
}
|
}
|
||||||
|
//添加子任务
|
||||||
public boolean addChildTask(Task task) {
|
public boolean addChildTask(Task task) {
|
||||||
boolean ret = false;
|
boolean ret = false;
|
||||||
if (task != null && !mChildren.contains(task)) {
|
if (task != null && !mChildren.contains(task)) {
|
||||||
ret = mChildren.add(task);
|
ret = mChildren.add(task);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
// need to set prior sibling and parent
|
// 需要设置之前的父结点和兄节点
|
||||||
task.setPriorSibling(mChildren.isEmpty() ? null : mChildren
|
task.setPriorSibling(mChildren.isEmpty() ? null : mChildren
|
||||||
.get(mChildren.size() - 1));
|
.get(mChildren.size() - 1));
|
||||||
task.setParent(this);
|
task.setParent(this);
|
||||||
|
@ -233,7 +237,7 @@ public class TaskList extends Node {
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
//通过索引添加子任务
|
||||||
public boolean addChildTask(Task task, int index) {
|
public boolean addChildTask(Task task, int index) {
|
||||||
if (index < 0 || index > mChildren.size()) {
|
if (index < 0 || index > mChildren.size()) {
|
||||||
Log.e(TAG, "add child task: invalid index");
|
Log.e(TAG, "add child task: invalid index");
|
||||||
|
@ -244,14 +248,14 @@ public class TaskList extends Node {
|
||||||
if (task != null && pos == -1) {
|
if (task != null && pos == -1) {
|
||||||
mChildren.add(index, task);
|
mChildren.add(index, task);
|
||||||
|
|
||||||
// update the task list
|
// 更新任务列表
|
||||||
Task preTask = null;
|
Task preTask = null;
|
||||||
Task afterTask = null;
|
Task afterTask = null;
|
||||||
if (index != 0)
|
if (index != 0)
|
||||||
preTask = mChildren.get(index - 1);
|
preTask = mChildren.get(index - 1);
|
||||||
if (index != mChildren.size() - 1)
|
if (index != mChildren.size() - 1)
|
||||||
afterTask = mChildren.get(index + 1);
|
afterTask = mChildren.get(index + 1);
|
||||||
|
//设置同级
|
||||||
task.setPriorSibling(preTask);
|
task.setPriorSibling(preTask);
|
||||||
if (afterTask != null)
|
if (afterTask != null)
|
||||||
afterTask.setPriorSibling(task);
|
afterTask.setPriorSibling(task);
|
||||||
|
@ -259,7 +263,7 @@ public class TaskList extends Node {
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
//移除子任务
|
||||||
public boolean removeChildTask(Task task) {
|
public boolean removeChildTask(Task task) {
|
||||||
boolean ret = false;
|
boolean ret = false;
|
||||||
int index = mChildren.indexOf(task);
|
int index = mChildren.indexOf(task);
|
||||||
|
@ -267,11 +271,11 @@ public class TaskList extends Node {
|
||||||
ret = mChildren.remove(task);
|
ret = mChildren.remove(task);
|
||||||
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
// reset prior sibling and parent
|
|
||||||
task.setPriorSibling(null);
|
task.setPriorSibling(null);
|
||||||
task.setParent(null);
|
task.setParent(null);
|
||||||
|
|
||||||
// update the task list
|
// 更新任务列表
|
||||||
if (index != mChildren.size()) {
|
if (index != mChildren.size()) {
|
||||||
mChildren.get(index).setPriorSibling(
|
mChildren.get(index).setPriorSibling(
|
||||||
index == 0 ? null : mChildren.get(index - 1));
|
index == 0 ? null : mChildren.get(index - 1));
|
||||||
|
@ -280,14 +284,14 @@ public class TaskList extends Node {
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
//移动子任务
|
||||||
public boolean moveChildTask(Task task, int index) {
|
public boolean moveChildTask(Task task, int index) {
|
||||||
|
|
||||||
if (index < 0 || index >= mChildren.size()) {
|
if (index < 0 || index >= mChildren.size()) {
|
||||||
Log.e(TAG, "move child task: invalid index");
|
Log.e(TAG, "move child task: invalid index");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
//子任务索引位置
|
||||||
int pos = mChildren.indexOf(task);
|
int pos = mChildren.indexOf(task);
|
||||||
if (pos == -1) {
|
if (pos == -1) {
|
||||||
Log.e(TAG, "move child task: the task should in the list");
|
Log.e(TAG, "move child task: the task should in the list");
|
||||||
|
@ -298,7 +302,7 @@ public class TaskList extends Node {
|
||||||
return true;
|
return true;
|
||||||
return (removeChildTask(task) && addChildTask(task, index));
|
return (removeChildTask(task) && addChildTask(task, index));
|
||||||
}
|
}
|
||||||
|
//通过Gid找到子任务
|
||||||
public Task findChildTaskByGid(String gid) {
|
public Task findChildTaskByGid(String gid) {
|
||||||
for (int i = 0; i < mChildren.size(); i++) {
|
for (int i = 0; i < mChildren.size(); i++) {
|
||||||
Task t = mChildren.get(i);
|
Task t = mChildren.get(i);
|
||||||
|
@ -308,7 +312,7 @@ public class TaskList extends Node {
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
//获得子任务的索引
|
||||||
public int getChildTaskIndex(Task task) {
|
public int getChildTaskIndex(Task task) {
|
||||||
return mChildren.indexOf(task);
|
return mChildren.indexOf(task);
|
||||||
}
|
}
|
||||||
|
@ -320,7 +324,7 @@ public class TaskList extends Node {
|
||||||
}
|
}
|
||||||
return mChildren.get(index);
|
return mChildren.get(index);
|
||||||
}
|
}
|
||||||
|
//通过Gid获取子任务
|
||||||
public Task getChilTaskByGid(String gid) {
|
public Task getChilTaskByGid(String gid) {
|
||||||
for (Task task : mChildren) {
|
for (Task task : mChildren) {
|
||||||
if (task.getGid().equals(gid))
|
if (task.getGid().equals(gid))
|
||||||
|
@ -332,7 +336,7 @@ public class TaskList extends Node {
|
||||||
public ArrayList<Task> getChildTaskList() {
|
public ArrayList<Task> getChildTaskList() {
|
||||||
return this.mChildren;
|
return this.mChildren;
|
||||||
}
|
}
|
||||||
|
//设置索引
|
||||||
public void setIndex(int index) {
|
public void setIndex(int index) {
|
||||||
this.mIndex = index;
|
this.mIndex = index;
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,9 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package net.micode.notes.gtask.exception;
|
package net.micode.notes.gtask.exception;
|
||||||
|
/*
|
||||||
|
动作失败异常
|
||||||
|
*/
|
||||||
public class ActionFailureException extends RuntimeException {
|
public class ActionFailureException extends RuntimeException {
|
||||||
private static final long serialVersionUID = 4425249765923293627L;
|
private static final long serialVersionUID = 4425249765923293627L;
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,9 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package net.micode.notes.gtask.exception;
|
package net.micode.notes.gtask.exception;
|
||||||
|
/*
|
||||||
|
网络失败异常
|
||||||
|
*/
|
||||||
public class NetworkFailureException extends Exception {
|
public class NetworkFailureException extends Exception {
|
||||||
private static final long serialVersionUID = 2107610287180234136L;
|
private static final long serialVersionUID = 2107610287180234136L;
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,9 @@ import net.micode.notes.R;
|
||||||
import net.micode.notes.ui.NotesListActivity;
|
import net.micode.notes.ui.NotesListActivity;
|
||||||
import net.micode.notes.ui.NotesPreferenceActivity;
|
import net.micode.notes.ui.NotesPreferenceActivity;
|
||||||
|
|
||||||
|
/*
|
||||||
|
Gtask异步任务
|
||||||
|
*/
|
||||||
public class GTaskASyncTask extends AsyncTask<Void, String, Integer> {
|
public class GTaskASyncTask extends AsyncTask<Void, String, Integer> {
|
||||||
|
|
||||||
private static int GTASK_SYNC_NOTIFICATION_ID = 5234235;
|
private static int GTASK_SYNC_NOTIFICATION_ID = 5234235;
|
||||||
|
@ -52,7 +54,7 @@ public class GTaskASyncTask extends AsyncTask<Void, String, Integer> {
|
||||||
.getSystemService(Context.NOTIFICATION_SERVICE);
|
.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||||
mTaskManager = GTaskManager.getInstance();
|
mTaskManager = GTaskManager.getInstance();
|
||||||
}
|
}
|
||||||
|
//取消同步
|
||||||
public void cancelSync() {
|
public void cancelSync() {
|
||||||
mTaskManager.cancelSync();
|
mTaskManager.cancelSync();
|
||||||
}
|
}
|
||||||
|
@ -62,7 +64,7 @@ public class GTaskASyncTask extends AsyncTask<Void, String, Integer> {
|
||||||
message
|
message
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
//展示提示
|
||||||
private void showNotification(int tickerId, String content) {
|
private void showNotification(int tickerId, String content) {
|
||||||
Notification notification = new Notification(R.drawable.notification, mContext
|
Notification notification = new Notification(R.drawable.notification, mContext
|
||||||
.getString(tickerId), System.currentTimeMillis());
|
.getString(tickerId), System.currentTimeMillis());
|
||||||
|
@ -77,8 +79,8 @@ public class GTaskASyncTask extends AsyncTask<Void, String, Integer> {
|
||||||
pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext,
|
pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext,
|
||||||
NotesListActivity.class), 0);
|
NotesListActivity.class), 0);
|
||||||
}
|
}
|
||||||
//notification.setLatestEventInfo(mContext, mContext.getString(R.string.app_name), content,
|
/* notification.setLatestEventInfo(mContext, mContext.getString(R.string.app_name), content,
|
||||||
// pendingIntent);
|
pendingIntent);*/
|
||||||
mNotifiManager.notify(GTASK_SYNC_NOTIFICATION_ID, notification);
|
mNotifiManager.notify(GTASK_SYNC_NOTIFICATION_ID, notification);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -60,7 +60,10 @@ import java.util.zip.GZIPInputStream;
|
||||||
import java.util.zip.Inflater;
|
import java.util.zip.Inflater;
|
||||||
import java.util.zip.InflaterInputStream;
|
import java.util.zip.InflaterInputStream;
|
||||||
|
|
||||||
|
/*
|
||||||
|
Gtask客户端类,提供登录Google账户,创建任务和任务列表
|
||||||
|
添加和删除节点,提交、重置更新,获取任务列表等功能
|
||||||
|
*/
|
||||||
public class GTaskClient {
|
public class GTaskClient {
|
||||||
private static final String TAG = GTaskClient.class.getSimpleName();
|
private static final String TAG = GTaskClient.class.getSimpleName();
|
||||||
|
|
||||||
|
@ -108,7 +111,7 @@ public class GTaskClient {
|
||||||
}
|
}
|
||||||
return mInstance;
|
return mInstance;
|
||||||
}
|
}
|
||||||
|
//登录;注册
|
||||||
public boolean login(Activity activity) {
|
public boolean login(Activity activity) {
|
||||||
// we suppose that the cookie would expire after 5 minutes
|
// we suppose that the cookie would expire after 5 minutes
|
||||||
// then we need to re-login
|
// then we need to re-login
|
||||||
|
@ -163,7 +166,7 @@ public class GTaskClient {
|
||||||
mLoggedin = true;
|
mLoggedin = true;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
//登录Google账户
|
||||||
private String loginGoogleAccount(Activity activity, boolean invalidateToken) {
|
private String loginGoogleAccount(Activity activity, boolean invalidateToken) {
|
||||||
String authToken;
|
String authToken;
|
||||||
AccountManager accountManager = AccountManager.get(activity);
|
AccountManager accountManager = AccountManager.get(activity);
|
||||||
|
@ -206,7 +209,7 @@ public class GTaskClient {
|
||||||
|
|
||||||
return authToken;
|
return authToken;
|
||||||
}
|
}
|
||||||
|
//尝试登录日程同步
|
||||||
private boolean tryToLoginGtask(Activity activity, String authToken) {
|
private boolean tryToLoginGtask(Activity activity, String authToken) {
|
||||||
if (!loginGtask(authToken)) {
|
if (!loginGtask(authToken)) {
|
||||||
// maybe the auth token is out of date, now let's invalidate the
|
// maybe the auth token is out of date, now let's invalidate the
|
||||||
|
@ -279,18 +282,18 @@ public class GTaskClient {
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
//获得动作
|
||||||
private int getActionId() {
|
private int getActionId() {
|
||||||
return mActionId++;
|
return mActionId++;
|
||||||
}
|
}
|
||||||
|
//建立互联网请求
|
||||||
private HttpPost createHttpPost() {
|
private HttpPost createHttpPost() {
|
||||||
HttpPost httpPost = new HttpPost(mPostUrl);
|
HttpPost httpPost = new HttpPost(mPostUrl);
|
||||||
httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
|
httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
|
||||||
httpPost.setHeader("AT", "1");
|
httpPost.setHeader("AT", "1");
|
||||||
return httpPost;
|
return httpPost;
|
||||||
}
|
}
|
||||||
|
//获得回复消息
|
||||||
private String getResponseContent(HttpEntity entity) throws IOException {
|
private String getResponseContent(HttpEntity entity) throws IOException {
|
||||||
String contentEncoding = null;
|
String contentEncoding = null;
|
||||||
if (entity.getContentEncoding() != null) {
|
if (entity.getContentEncoding() != null) {
|
||||||
|
@ -432,7 +435,7 @@ public class GTaskClient {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//添加更新节点
|
||||||
public void addUpdateNode(Node node) throws NetworkFailureException {
|
public void addUpdateNode(Node node) throws NetworkFailureException {
|
||||||
if (node != null) {
|
if (node != null) {
|
||||||
// too many update items may result in an error
|
// too many update items may result in an error
|
||||||
|
@ -446,7 +449,7 @@ public class GTaskClient {
|
||||||
mUpdateArray.put(node.getUpdateAction(getActionId()));
|
mUpdateArray.put(node.getUpdateAction(getActionId()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//移动任务
|
||||||
public void moveTask(Task task, TaskList preParent, TaskList curParent)
|
public void moveTask(Task task, TaskList preParent, TaskList curParent)
|
||||||
throws NetworkFailureException {
|
throws NetworkFailureException {
|
||||||
commitUpdate();
|
commitUpdate();
|
||||||
|
@ -485,7 +488,7 @@ public class GTaskClient {
|
||||||
throw new ActionFailureException("move task: handing jsonobject failed");
|
throw new ActionFailureException("move task: handing jsonobject failed");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//删除结点
|
||||||
public void deleteNode(Node node) throws NetworkFailureException {
|
public void deleteNode(Node node) throws NetworkFailureException {
|
||||||
commitUpdate();
|
commitUpdate();
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -47,7 +47,10 @@ import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
/*
|
||||||
|
Gtask管理者类,提供初始化任务列表,同步便签内容和文件夹
|
||||||
|
添加、更新本地和远端节点,更新本地同步任务ID等功能
|
||||||
|
*/
|
||||||
public class GTaskManager {
|
public class GTaskManager {
|
||||||
private static final String TAG = GTaskManager.class.getSimpleName();
|
private static final String TAG = GTaskManager.class.getSimpleName();
|
||||||
|
|
||||||
|
@ -98,7 +101,7 @@ public class GTaskManager {
|
||||||
mGidToNid = new HashMap<String, Long>();
|
mGidToNid = new HashMap<String, Long>();
|
||||||
mNidToGid = new HashMap<Long, String>();
|
mNidToGid = new HashMap<Long, String>();
|
||||||
}
|
}
|
||||||
|
//获得实例
|
||||||
public static synchronized GTaskManager getInstance() {
|
public static synchronized GTaskManager getInstance() {
|
||||||
if (mInstance == null) {
|
if (mInstance == null) {
|
||||||
mInstance = new GTaskManager();
|
mInstance = new GTaskManager();
|
||||||
|
|
|
@ -22,7 +22,9 @@ import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
|
/*
|
||||||
|
Gtask同步服务
|
||||||
|
*/
|
||||||
public class GTaskSyncService extends Service {
|
public class GTaskSyncService extends Service {
|
||||||
public final static String ACTION_STRING_NAME = "sync_action_type";
|
public final static String ACTION_STRING_NAME = "sync_action_type";
|
||||||
|
|
||||||
|
@ -96,7 +98,7 @@ public class GTaskSyncService extends Service {
|
||||||
public IBinder onBind(Intent intent) {
|
public IBinder onBind(Intent intent) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
//发送广播
|
||||||
public void sendBroadcast(String msg) {
|
public void sendBroadcast(String msg) {
|
||||||
mSyncProgress = msg;
|
mSyncProgress = msg;
|
||||||
Intent intent = new Intent(GTASK_SERVICE_BROADCAST_NAME);
|
Intent intent = new Intent(GTASK_SERVICE_BROADCAST_NAME);
|
||||||
|
@ -104,24 +106,24 @@ public class GTaskSyncService extends Service {
|
||||||
intent.putExtra(GTASK_SERVICE_BROADCAST_PROGRESS_MSG, msg);
|
intent.putExtra(GTASK_SERVICE_BROADCAST_PROGRESS_MSG, msg);
|
||||||
sendBroadcast(intent);
|
sendBroadcast(intent);
|
||||||
}
|
}
|
||||||
|
//开始同步
|
||||||
public static void startSync(Activity activity) {
|
public static void startSync(Activity activity) {
|
||||||
GTaskManager.getInstance().setActivityContext(activity);
|
GTaskManager.getInstance().setActivityContext(activity);
|
||||||
Intent intent = new Intent(activity, GTaskSyncService.class);
|
Intent intent = new Intent(activity, GTaskSyncService.class);
|
||||||
intent.putExtra(GTaskSyncService.ACTION_STRING_NAME, GTaskSyncService.ACTION_START_SYNC);
|
intent.putExtra(GTaskSyncService.ACTION_STRING_NAME, GTaskSyncService.ACTION_START_SYNC);
|
||||||
activity.startService(intent);
|
activity.startService(intent);
|
||||||
}
|
}
|
||||||
|
//取消同步
|
||||||
public static void cancelSync(Context context) {
|
public static void cancelSync(Context context) {
|
||||||
Intent intent = new Intent(context, GTaskSyncService.class);
|
Intent intent = new Intent(context, GTaskSyncService.class);
|
||||||
intent.putExtra(GTaskSyncService.ACTION_STRING_NAME, GTaskSyncService.ACTION_CANCEL_SYNC);
|
intent.putExtra(GTaskSyncService.ACTION_STRING_NAME, GTaskSyncService.ACTION_CANCEL_SYNC);
|
||||||
context.startService(intent);
|
context.startService(intent);
|
||||||
}
|
}
|
||||||
|
//判断同步
|
||||||
public static boolean isSyncing() {
|
public static boolean isSyncing() {
|
||||||
return mSyncTask != null;
|
return mSyncTask != null;
|
||||||
}
|
}
|
||||||
|
//获取进程字符串
|
||||||
public static String getProgressString() {
|
public static String getProgressString() {
|
||||||
return mSyncProgress;
|
return mSyncProgress;
|
||||||
}
|
}
|
||||||
|
|
|
@ -200,13 +200,14 @@ public class Note {
|
||||||
mCallDataId = id;
|
mCallDataId = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//插入通话记录数据
|
||||||
void setCallData(String key, String value) {
|
void setCallData(String key, String value) {
|
||||||
mCallDataValues.put(key, value);
|
mCallDataValues.put(key, value);
|
||||||
mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1);
|
mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1);
|
||||||
mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis());
|
mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//插入文本数据
|
||||||
void setTextData(String key, String value) {
|
void setTextData(String key, String value) {
|
||||||
mTextDataValues.put(key, value);
|
mTextDataValues.put(key, value);
|
||||||
mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1);
|
mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1);
|
||||||
|
@ -215,7 +216,7 @@ public class Note {
|
||||||
|
|
||||||
Uri pushIntoContentResolver(Context context, long noteId) {
|
Uri pushIntoContentResolver(Context context, long noteId) {
|
||||||
/**
|
/**
|
||||||
* Check for safety
|
* 防止无效的id
|
||||||
*/
|
*/
|
||||||
if (noteId <= 0) {
|
if (noteId <= 0) {
|
||||||
throw new IllegalArgumentException(WRONGNOTEID + noteId);
|
throw new IllegalArgumentException(WRONGNOTEID + noteId);
|
||||||
|
@ -224,42 +225,57 @@ public class Note {
|
||||||
ArrayList<ContentProviderOperation> operationList = new ArrayList<>();
|
ArrayList<ContentProviderOperation> operationList = new ArrayList<>();
|
||||||
ContentProviderOperation.Builder builder = null;
|
ContentProviderOperation.Builder builder = null;
|
||||||
|
|
||||||
|
//文本内容发生改变
|
||||||
if(mTextDataValues.size() > 0) {
|
if(mTextDataValues.size() > 0) {
|
||||||
mTextDataValues.put(DataColumns.NOTE_ID, noteId);
|
mTextDataValues.put(DataColumns.NOTE_ID, noteId);
|
||||||
|
//如果没有分配id号
|
||||||
if (mTextDataId == 0) {
|
if (mTextDataId == 0) {
|
||||||
mTextDataValues.put(DataColumns.MIME_TYPE, TextNote.CONTENT_ITEM_TYPE);
|
mTextDataValues.put(DataColumns.MIME_TYPE, TextNote.CONTENT_ITEM_TYPE);
|
||||||
Uri uri = context.getContentResolver().insert(Notes.CONTENT_DATA_URI,
|
Uri uri = context.getContentResolver().insert(Notes.CONTENT_DATA_URI,
|
||||||
mTextDataValues);
|
mTextDataValues);
|
||||||
try {
|
try {
|
||||||
|
//尝试分配id
|
||||||
setTextDataId(Long.valueOf(uri.getPathSegments().get(1)));
|
setTextDataId(Long.valueOf(uri.getPathSegments().get(1)));
|
||||||
} catch (NumberFormatException e) {
|
} catch (NumberFormatException e) {
|
||||||
|
//分配失败
|
||||||
Log.e(TAG, "Insert new text data fail with noteId" + noteId);
|
Log.e(TAG, "Insert new text data fail with noteId" + noteId);
|
||||||
|
//清除内容
|
||||||
mTextDataValues.clear();
|
mTextDataValues.clear();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
//已经有id号,执行下列操作
|
||||||
builder = ContentProviderOperation.newUpdate(ContentUris.withAppendedId(
|
builder = ContentProviderOperation.newUpdate(ContentUris.withAppendedId(
|
||||||
Notes.CONTENT_DATA_URI, mTextDataId));
|
Notes.CONTENT_DATA_URI, mTextDataId));
|
||||||
builder.withValues(mTextDataValues);
|
builder.withValues(mTextDataValues);
|
||||||
|
//加入修改内容
|
||||||
operationList.add(builder.build());
|
operationList.add(builder.build());
|
||||||
}
|
}
|
||||||
|
//清除已修改
|
||||||
mTextDataValues.clear();
|
mTextDataValues.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//如果数据内容发生改变
|
||||||
if(mCallDataValues.size() > 0) {
|
if(mCallDataValues.size() > 0) {
|
||||||
mCallDataValues.put(DataColumns.NOTE_ID, noteId);
|
mCallDataValues.put(DataColumns.NOTE_ID, noteId);
|
||||||
|
|
||||||
if (mCallDataId == 0) {
|
if (mCallDataId == 0) {
|
||||||
|
//如果没有id号,执行下列操作
|
||||||
mCallDataValues.put(DataColumns.MIME_TYPE, CallNote.CONTENT_ITEM_TYPE);
|
mCallDataValues.put(DataColumns.MIME_TYPE, CallNote.CONTENT_ITEM_TYPE);
|
||||||
Uri uri = context.getContentResolver().insert(Notes.CONTENT_DATA_URI,
|
Uri uri = context.getContentResolver().insert(Notes.CONTENT_DATA_URI,
|
||||||
mCallDataValues);
|
mCallDataValues);
|
||||||
|
//尝试分配id
|
||||||
try {
|
try {
|
||||||
setCallDataId(Long.valueOf(uri.getPathSegments().get(1)));
|
setCallDataId(Long.valueOf(uri.getPathSegments().get(1)));
|
||||||
} catch (NumberFormatException e) {
|
} catch (NumberFormatException e) {
|
||||||
|
//失败,错误信息加入日志
|
||||||
Log.e(TAG, "Insert new call data fail with noteId" + noteId);
|
Log.e(TAG, "Insert new call data fail with noteId" + noteId);
|
||||||
|
//清除已修改内容
|
||||||
mCallDataValues.clear();
|
mCallDataValues.clear();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
//有id号,执行下列操作
|
||||||
builder = ContentProviderOperation.newUpdate(ContentUris.withAppendedId(
|
builder = ContentProviderOperation.newUpdate(ContentUris.withAppendedId(
|
||||||
Notes.CONTENT_DATA_URI, mCallDataId));
|
Notes.CONTENT_DATA_URI, mCallDataId));
|
||||||
builder.withValues(mCallDataValues);
|
builder.withValues(mCallDataValues);
|
||||||
|
@ -269,9 +285,12 @@ public class Note {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!operationList.isEmpty()) {
|
if (!operationList.isEmpty()) {
|
||||||
|
//当前操作的便签不空,执行
|
||||||
try {
|
try {
|
||||||
ContentProviderResult[] results = context.getContentResolver().applyBatch(
|
ContentProviderResult[] results = context.getContentResolver().applyBatch(
|
||||||
Notes.AUTHORITY, operationList);
|
Notes.AUTHORITY, operationList);
|
||||||
|
//如果res无效,插入失败,返回null值
|
||||||
|
//否则返回uri
|
||||||
return (results == null || results.length == 0 || results[0] == null) ? null
|
return (results == null || results.length == 0 || results[0] == null) ? null
|
||||||
: ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId);
|
: ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId);
|
||||||
} catch (RemoteException|OperationApplicationException e) {
|
} catch (RemoteException|OperationApplicationException e) {
|
||||||
|
|
|
@ -35,12 +35,14 @@ import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.PrintStream;
|
import java.io.PrintStream;
|
||||||
|
|
||||||
|
/*
|
||||||
|
备份工具类
|
||||||
|
*/
|
||||||
public class BackupUtils {
|
public class BackupUtils {
|
||||||
private static final String TAG = "BackupUtils";
|
private static final String TAG = "BackupUtils";
|
||||||
// Singleton stuff
|
// Singleton stuff
|
||||||
private static BackupUtils sInstance;
|
private static BackupUtils sInstance;
|
||||||
|
//获得实例
|
||||||
public static synchronized BackupUtils getInstance(Context context) {
|
public static synchronized BackupUtils getInstance(Context context) {
|
||||||
if (sInstance == null) {
|
if (sInstance == null) {
|
||||||
sInstance = new BackupUtils(context);
|
sInstance = new BackupUtils(context);
|
||||||
|
@ -64,27 +66,32 @@ public class BackupUtils {
|
||||||
public static final int STATE_SUCCESS = 4;
|
public static final int STATE_SUCCESS = 4;
|
||||||
|
|
||||||
private TextExport mTextExport;
|
private TextExport mTextExport;
|
||||||
|
//构造函数
|
||||||
private BackupUtils(Context context) {
|
private BackupUtils(Context context) {
|
||||||
mTextExport = new TextExport(context);
|
mTextExport = new TextExport(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean externalStorageAvailable() {
|
private static boolean externalStorageAvailable() {
|
||||||
|
/*Environment类中提供了几个静态常量用于标识外部存储的状态
|
||||||
|
MEDIA_MOUNTED存储媒体已经挂载
|
||||||
|
并且挂载点可读/写
|
||||||
|
可以通过静态方法getExternalStorageState()来获取外部存储的状态
|
||||||
|
其中.equals表示的是二者的内容是否相等*/
|
||||||
return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState());
|
return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState());
|
||||||
}
|
}
|
||||||
|
//导出文本
|
||||||
public int exportToText() {
|
public int exportToText() {
|
||||||
return mTextExport.exportToText();
|
return mTextExport.exportToText();
|
||||||
}
|
}
|
||||||
|
//获取导出文本名字
|
||||||
public String getExportedTextFileName() {
|
public String getExportedTextFileName() {
|
||||||
return mTextExport.mFileName;
|
return mTextExport.mFileName;
|
||||||
}
|
}
|
||||||
|
//获取导出文本目录
|
||||||
public String getExportedTextFileDir() {
|
public String getExportedTextFileDir() {
|
||||||
return mTextExport.mFileDirectory;
|
return mTextExport.mFileDirectory;
|
||||||
}
|
}
|
||||||
|
//引用内部类包含了之前data.Notes中的NoteColumns和DataColumns
|
||||||
private static class TextExport {
|
private static class TextExport {
|
||||||
private static final String[] NOTE_PROJECTION = {
|
private static final String[] NOTE_PROJECTION = {
|
||||||
NoteColumns.ID,
|
NoteColumns.ID,
|
||||||
|
@ -92,13 +99,13 @@ public class BackupUtils {
|
||||||
NoteColumns.SNIPPET,
|
NoteColumns.SNIPPET,
|
||||||
NoteColumns.TYPE
|
NoteColumns.TYPE
|
||||||
};
|
};
|
||||||
|
//便签列id
|
||||||
private static final int NOTE_COLUMN_ID = 0;
|
private static final int NOTE_COLUMN_ID = 0;
|
||||||
|
//便签修改的日期
|
||||||
private static final int NOTE_COLUMN_MODIFIED_DATE = 1;
|
private static final int NOTE_COLUMN_MODIFIED_DATE = 1;
|
||||||
|
//便签列片段
|
||||||
private static final int NOTE_COLUMN_SNIPPET = 2;
|
private static final int NOTE_COLUMN_SNIPPET = 2;
|
||||||
|
//数据项
|
||||||
private static final String[] DATA_PROJECTION = {
|
private static final String[] DATA_PROJECTION = {
|
||||||
DataColumns.CONTENT,
|
DataColumns.CONTENT,
|
||||||
DataColumns.MIME_TYPE,
|
DataColumns.MIME_TYPE,
|
||||||
|
@ -107,15 +114,15 @@ public class BackupUtils {
|
||||||
DataColumns.DATA3,
|
DataColumns.DATA3,
|
||||||
DataColumns.DATA4,
|
DataColumns.DATA4,
|
||||||
};
|
};
|
||||||
|
//数据列中内容
|
||||||
private static final int DATA_COLUMN_CONTENT = 0;
|
private static final int DATA_COLUMN_CONTENT = 0;
|
||||||
|
//数据列中mime类型
|
||||||
private static final int DATA_COLUMN_MIME_TYPE = 1;
|
private static final int DATA_COLUMN_MIME_TYPE = 1;
|
||||||
|
//数据中拨打日期
|
||||||
private static final int DATA_COLUMN_CALL_DATE = 2;
|
private static final int DATA_COLUMN_CALL_DATE = 2;
|
||||||
|
//数据列中的电话号码
|
||||||
private static final int DATA_COLUMN_PHONE_NUMBER = 4;
|
private static final int DATA_COLUMN_PHONE_NUMBER = 4;
|
||||||
|
//文本格式
|
||||||
private final String [] TEXT_FORMAT;
|
private final String [] TEXT_FORMAT;
|
||||||
private static final int FORMAT_FOLDER_NAME = 0;
|
private static final int FORMAT_FOLDER_NAME = 0;
|
||||||
private static final int FORMAT_NOTE_DATE = 1;
|
private static final int FORMAT_NOTE_DATE = 1;
|
||||||
|
@ -124,14 +131,14 @@ public class BackupUtils {
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private String mFileName;
|
private String mFileName;
|
||||||
private String mFileDirectory;
|
private String mFileDirectory;
|
||||||
|
//文本导出初始化
|
||||||
public TextExport(Context context) {
|
public TextExport(Context context) {
|
||||||
TEXT_FORMAT = context.getResources().getStringArray(R.array.format_for_exported_note);
|
TEXT_FORMAT = context.getResources().getStringArray(R.array.format_for_exported_note);
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mFileName = "";
|
mFileName = "";
|
||||||
mFileDirectory = "";
|
mFileDirectory = "";
|
||||||
}
|
}
|
||||||
|
//获取文本格式类型
|
||||||
private String getFormat(int id) {
|
private String getFormat(int id) {
|
||||||
return TEXT_FORMAT[id];
|
return TEXT_FORMAT[id];
|
||||||
}
|
}
|
||||||
|
@ -140,13 +147,18 @@ public class BackupUtils {
|
||||||
* Export the folder identified by folder id to text
|
* Export the folder identified by folder id to text
|
||||||
*/
|
*/
|
||||||
private void exportFolderToText(String folderId, PrintStream ps) {
|
private void exportFolderToText(String folderId, PrintStream ps) {
|
||||||
// Query notes belong to this folder
|
// 查询属于此文件夹的Notes
|
||||||
Cursor notesCursor = mContext.getContentResolver().query(Notes.CONTENT_NOTE_URI,
|
Cursor notesCursor = mContext.getContentResolver().query(Notes.CONTENT_NOTE_URI,
|
||||||
NOTE_PROJECTION, NoteColumns.PARENT_ID + "=?", new String[] {
|
NOTE_PROJECTION, NoteColumns.PARENT_ID + "=?", new String[] {
|
||||||
folderId
|
folderId
|
||||||
}, null);
|
}, null);
|
||||||
|
//下面有很多地方调用了android.database.Cursor类有一些固定用法
|
||||||
if (notesCursor != null) {
|
if (notesCursor != null) {
|
||||||
|
/*
|
||||||
|
查询出来的cursor的初始位置是指向第一条记录的前一个位置的
|
||||||
|
cursor.moveToFirst()指向查询结果的第一个位置。
|
||||||
|
一般通过判断cursor.moveToFirst()的值为true或false来确定查询结果是否为空。
|
||||||
|
*/
|
||||||
if (notesCursor.moveToFirst()) {
|
if (notesCursor.moveToFirst()) {
|
||||||
do {
|
do {
|
||||||
// Print note's last modified date
|
// Print note's last modified date
|
||||||
|
@ -174,6 +186,7 @@ public class BackupUtils {
|
||||||
if (dataCursor != null) {
|
if (dataCursor != null) {
|
||||||
if (dataCursor.moveToFirst()) {
|
if (dataCursor.moveToFirst()) {
|
||||||
do {
|
do {
|
||||||
|
//获取mimeType
|
||||||
String mimeType = dataCursor.getString(DATA_COLUMN_MIME_TYPE);
|
String mimeType = dataCursor.getString(DATA_COLUMN_MIME_TYPE);
|
||||||
if (DataConstants.CALL_NOTE.equals(mimeType)) {
|
if (DataConstants.CALL_NOTE.equals(mimeType)) {
|
||||||
// Print phone number
|
// Print phone number
|
||||||
|
@ -185,11 +198,11 @@ public class BackupUtils {
|
||||||
ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT),
|
ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT),
|
||||||
phoneNumber));
|
phoneNumber));
|
||||||
}
|
}
|
||||||
// Print call date
|
// 打印调用日期
|
||||||
ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), DateFormat
|
ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), DateFormat
|
||||||
.format(mContext.getString(R.string.format_datetime_mdhm),
|
.format(mContext.getString(R.string.format_datetime_mdhm),
|
||||||
callDate)));
|
callDate)));
|
||||||
// Print call attachment location
|
// 打印调用位置
|
||||||
if (!TextUtils.isEmpty(location)) {
|
if (!TextUtils.isEmpty(location)) {
|
||||||
ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT),
|
ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT),
|
||||||
location));
|
location));
|
||||||
|
@ -203,9 +216,10 @@ public class BackupUtils {
|
||||||
}
|
}
|
||||||
} while (dataCursor.moveToNext());
|
} while (dataCursor.moveToNext());
|
||||||
}
|
}
|
||||||
|
//及时关闭cursor
|
||||||
dataCursor.close();
|
dataCursor.close();
|
||||||
}
|
}
|
||||||
// print a line separator between note
|
// 在便签之间打印一个行分隔符
|
||||||
try {
|
try {
|
||||||
ps.write(new byte[] {
|
ps.write(new byte[] {
|
||||||
Character.LINE_SEPARATOR, Character.LETTER_NUMBER
|
Character.LINE_SEPARATOR, Character.LETTER_NUMBER
|
||||||
|
@ -215,21 +229,23 @@ public class BackupUtils {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* Note will be exported as text which is user readable
|
便签将被导出为用户可读的文本
|
||||||
*/
|
*/
|
||||||
public int exportToText() {
|
public int exportToText() {
|
||||||
|
//判断是否有外部存储空间
|
||||||
if (!externalStorageAvailable()) {
|
if (!externalStorageAvailable()) {
|
||||||
Log.d(TAG, "Media was not mounted");
|
Log.d(TAG, "Media was not mounted");
|
||||||
return STATE_SD_CARD_UNMOUONTED;
|
return STATE_SD_CARD_UNMOUONTED;
|
||||||
}
|
}
|
||||||
|
//定义输出流ps
|
||||||
PrintStream ps = getExportToTextPrintStream();
|
PrintStream ps = getExportToTextPrintStream();
|
||||||
|
//检查null
|
||||||
if (ps == null) {
|
if (ps == null) {
|
||||||
Log.e(TAG, "get print stream error");
|
Log.e(TAG, "get print stream error");
|
||||||
return STATE_SYSTEM_ERROR;
|
return STATE_SYSTEM_ERROR;
|
||||||
}
|
}
|
||||||
// First export folder and its notes
|
// 第一个导出文件夹及其注释
|
||||||
Cursor folderCursor = mContext.getContentResolver().query(
|
Cursor folderCursor = mContext.getContentResolver().query(
|
||||||
Notes.CONTENT_NOTE_URI,
|
Notes.CONTENT_NOTE_URI,
|
||||||
NOTE_PROJECTION,
|
NOTE_PROJECTION,
|
||||||
|
@ -240,24 +256,28 @@ public class BackupUtils {
|
||||||
if (folderCursor != null) {
|
if (folderCursor != null) {
|
||||||
if (folderCursor.moveToFirst()) {
|
if (folderCursor.moveToFirst()) {
|
||||||
do {
|
do {
|
||||||
// Print folder's name
|
// 打印文件夹的名字
|
||||||
String folderName = "";
|
String folderName = "";
|
||||||
|
//若id为最近记录里调用的文件中
|
||||||
if(folderCursor.getLong(NOTE_COLUMN_ID) == Notes.ID_CALL_RECORD_FOLDER) {
|
if(folderCursor.getLong(NOTE_COLUMN_ID) == Notes.ID_CALL_RECORD_FOLDER) {
|
||||||
folderName = mContext.getString(R.string.call_record_folder_name);
|
folderName = mContext.getString(R.string.call_record_folder_name);
|
||||||
} else {
|
} else {
|
||||||
folderName = folderCursor.getString(NOTE_COLUMN_SNIPPET);
|
folderName = folderCursor.getString(NOTE_COLUMN_SNIPPET);
|
||||||
}
|
}
|
||||||
|
//若文本工具为空
|
||||||
if (!TextUtils.isEmpty(folderName)) {
|
if (!TextUtils.isEmpty(folderName)) {
|
||||||
ps.println(String.format(getFormat(FORMAT_FOLDER_NAME), folderName));
|
ps.println(String.format(getFormat(FORMAT_FOLDER_NAME), folderName));
|
||||||
}
|
}
|
||||||
|
//获得文件id
|
||||||
String folderId = folderCursor.getString(NOTE_COLUMN_ID);
|
String folderId = folderCursor.getString(NOTE_COLUMN_ID);
|
||||||
exportFolderToText(folderId, ps);
|
exportFolderToText(folderId, ps);
|
||||||
} while (folderCursor.moveToNext());
|
} while (folderCursor.moveToNext());
|
||||||
}
|
}
|
||||||
|
//及时关闭folderCursor
|
||||||
folderCursor.close();
|
folderCursor.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Export notes in root's folder
|
// 在根目录下导出注释
|
||||||
Cursor noteCursor = mContext.getContentResolver().query(
|
Cursor noteCursor = mContext.getContentResolver().query(
|
||||||
Notes.CONTENT_NOTE_URI,
|
Notes.CONTENT_NOTE_URI,
|
||||||
NOTE_PROJECTION,
|
NOTE_PROJECTION,
|
||||||
|
@ -265,13 +285,15 @@ public class BackupUtils {
|
||||||
+ "=0", null, null);
|
+ "=0", null, null);
|
||||||
|
|
||||||
if (noteCursor != null) {
|
if (noteCursor != null) {
|
||||||
|
//如果不为空
|
||||||
if (noteCursor.moveToFirst()) {
|
if (noteCursor.moveToFirst()) {
|
||||||
do {
|
do {
|
||||||
ps.println(String.format(getFormat(FORMAT_NOTE_DATE), DateFormat.format(
|
ps.println(String.format(getFormat(FORMAT_NOTE_DATE), DateFormat.format(
|
||||||
mContext.getString(R.string.format_datetime_mdhm),
|
mContext.getString(R.string.format_datetime_mdhm),
|
||||||
noteCursor.getLong(NOTE_COLUMN_MODIFIED_DATE))));
|
noteCursor.getLong(NOTE_COLUMN_MODIFIED_DATE))));
|
||||||
// Query data belong to this note
|
// 查询数据属于该便签
|
||||||
String noteId = noteCursor.getString(NOTE_COLUMN_ID);
|
String noteId = noteCursor.getString(NOTE_COLUMN_ID);
|
||||||
|
//通过id导出文本
|
||||||
exportNoteToText(noteId, ps);
|
exportNoteToText(noteId, ps);
|
||||||
} while (noteCursor.moveToNext());
|
} while (noteCursor.moveToNext());
|
||||||
}
|
}
|
||||||
|
@ -282,8 +304,8 @@ public class BackupUtils {
|
||||||
return STATE_SUCCESS;
|
return STATE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* Get a print stream pointed to the file {@generateExportedTextFile}
|
获取指向该文件的打印流 {@generateExportedTextFile}
|
||||||
*/
|
*/
|
||||||
private PrintStream getExportToTextPrintStream() {
|
private PrintStream getExportToTextPrintStream() {
|
||||||
File file = generateFileMountedOnSDcard(mContext, R.string.file_path,
|
File file = generateFileMountedOnSDcard(mContext, R.string.file_path,
|
||||||
|
@ -309,8 +331,8 @@ public class BackupUtils {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* Generate the text file to store imported data
|
生成文本文件来存储导入的数据
|
||||||
*/
|
*/
|
||||||
private static File generateFileMountedOnSDcard(Context context, int filePathResId, int fileNameFormatResId) {
|
private static File generateFileMountedOnSDcard(Context context, int filePathResId, int fileNameFormatResId) {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
|
@ -324,15 +346,19 @@ public class BackupUtils {
|
||||||
File file = new File(sb.toString());
|
File file = new File(sb.toString());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
//目录不存在就创建
|
||||||
if (!filedir.exists()) {
|
if (!filedir.exists()) {
|
||||||
filedir.mkdir();
|
filedir.mkdir();
|
||||||
}
|
}
|
||||||
|
//文件不存在也创建
|
||||||
if (!file.exists()) {
|
if (!file.exists()) {
|
||||||
file.createNewFile();
|
file.createNewFile();
|
||||||
}
|
}
|
||||||
return file;
|
return file;
|
||||||
|
//安全性异常
|
||||||
} catch (SecurityException e) {
|
} catch (SecurityException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
//IO异常
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,14 +34,19 @@ import net.micode.notes.ui.NotesListAdapter.AppWidgetAttribute;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
|
||||||
|
/*
|
||||||
|
便签数据处理工具类
|
||||||
|
*/
|
||||||
public class DataUtils {
|
public class DataUtils {
|
||||||
public static final String TAG = "DataUtils";
|
public static final String TAG = "DataUtils";
|
||||||
|
//批处理删除便签
|
||||||
public static boolean batchDeleteNotes(ContentResolver resolver, HashSet<Long> ids) {
|
public static boolean batchDeleteNotes(ContentResolver resolver, HashSet<Long> ids) {
|
||||||
|
//id不存在
|
||||||
if (ids == null) {
|
if (ids == null) {
|
||||||
Log.d(TAG, "the ids is null");
|
Log.d(TAG, "the ids is null");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
//id在哈希表里
|
||||||
if (ids.size() == 0) {
|
if (ids.size() == 0) {
|
||||||
Log.d(TAG, "no id is in the hashset");
|
Log.d(TAG, "no id is in the hashset");
|
||||||
return true;
|
return true;
|
||||||
|
@ -49,21 +54,25 @@ public class DataUtils {
|
||||||
|
|
||||||
ArrayList<ContentProviderOperation> operationList = new ArrayList<ContentProviderOperation>();
|
ArrayList<ContentProviderOperation> operationList = new ArrayList<ContentProviderOperation>();
|
||||||
for (long id : ids) {
|
for (long id : ids) {
|
||||||
|
//id是便签根文件夹id
|
||||||
if(id == Notes.ID_ROOT_FOLDER) {
|
if(id == Notes.ID_ROOT_FOLDER) {
|
||||||
Log.e(TAG, "Don't delete system folder root");
|
Log.e(TAG, "Don't delete system folder root");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
//使用ArrayList来保存 ContentProviderOperation操作
|
||||||
ContentProviderOperation.Builder builder = ContentProviderOperation
|
ContentProviderOperation.Builder builder = ContentProviderOperation
|
||||||
.newDelete(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id));
|
.newDelete(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id));
|
||||||
operationList.add(builder.build());
|
operationList.add(builder.build());
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
|
//通过ContentResolver 的applyBatch()函数来应用批量操作:
|
||||||
ContentProviderResult[] results = resolver.applyBatch(Notes.AUTHORITY, operationList);
|
ContentProviderResult[] results = resolver.applyBatch(Notes.AUTHORITY, operationList);
|
||||||
if (results == null || results.length == 0 || results[0] == null) {
|
if (results == null || results.length == 0 || results[0] == null) {
|
||||||
Log.d(TAG, "delete notes failed, ids:" + ids.toString());
|
Log.d(TAG, "delete notes failed, ids:" + ids.toString());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
//捕捉远程异常
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage()));
|
Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage()));
|
||||||
} catch (OperationApplicationException e) {
|
} catch (OperationApplicationException e) {
|
||||||
|
@ -79,7 +88,7 @@ public class DataUtils {
|
||||||
values.put(NoteColumns.LOCAL_MODIFIED, 1);
|
values.put(NoteColumns.LOCAL_MODIFIED, 1);
|
||||||
resolver.update(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id), values, null, null);
|
resolver.update(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id), values, null, null);
|
||||||
}
|
}
|
||||||
|
//批量移动至文件夹
|
||||||
public static boolean batchMoveToFolder(ContentResolver resolver, HashSet<Long> ids,
|
public static boolean batchMoveToFolder(ContentResolver resolver, HashSet<Long> ids,
|
||||||
long folderId) {
|
long folderId) {
|
||||||
if (ids == null) {
|
if (ids == null) {
|
||||||
|
@ -111,10 +120,16 @@ public class DataUtils {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* Get the all folder count except system folders {@link Notes#TYPE_SYSTEM}}
|
获取除系统文件夹外的所有文件夹计数 {@link Notes#TYPE_SYSTEM}}
|
||||||
*/
|
*/
|
||||||
public static int getUserFolderCount(ContentResolver resolver) {
|
public static int getUserFolderCount(ContentResolver resolver) {
|
||||||
|
/*
|
||||||
|
ContentResolver直译为内容解析器,
|
||||||
|
Android中程序间数据的共享是通过Provider/Resolver进行的。
|
||||||
|
提供数据(内容)的就叫Provider,Resovler提供接口对这个内容进行解读。
|
||||||
|
在这里,系统提供了联系人的Provider,那么我们就需要构建一个Resolver来读取联系人的内容。
|
||||||
|
*/
|
||||||
Cursor cursor =resolver.query(Notes.CONTENT_NOTE_URI,
|
Cursor cursor =resolver.query(Notes.CONTENT_NOTE_URI,
|
||||||
new String[] { "COUNT(*)" },
|
new String[] { "COUNT(*)" },
|
||||||
NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>?",
|
NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>?",
|
||||||
|
@ -152,13 +167,14 @@ public class DataUtils {
|
||||||
}
|
}
|
||||||
return exist;
|
return exist;
|
||||||
}
|
}
|
||||||
|
//查询该ID在数据库中是否存在
|
||||||
public static boolean existInNoteDatabase(ContentResolver resolver, long noteId) {
|
public static boolean existInNoteDatabase(ContentResolver resolver, long noteId) {
|
||||||
Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId),
|
Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId),
|
||||||
null, null, null, null);
|
null, null, null, null);
|
||||||
|
|
||||||
boolean exist = false;
|
boolean exist = false;
|
||||||
if (cursor != null) {
|
if (cursor != null) {
|
||||||
|
//行数大于0
|
||||||
if (cursor.getCount() > 0) {
|
if (cursor.getCount() > 0) {
|
||||||
exist = true;
|
exist = true;
|
||||||
}
|
}
|
||||||
|
@ -166,7 +182,7 @@ public class DataUtils {
|
||||||
}
|
}
|
||||||
return exist;
|
return exist;
|
||||||
}
|
}
|
||||||
|
//查询dataID在数据库中是否存在
|
||||||
public static boolean existInDataDatabase(ContentResolver resolver, long dataId) {
|
public static boolean existInDataDatabase(ContentResolver resolver, long dataId) {
|
||||||
Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_DATA_URI, dataId),
|
Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_DATA_URI, dataId),
|
||||||
null, null, null, null);
|
null, null, null, null);
|
||||||
|
@ -180,7 +196,7 @@ public class DataUtils {
|
||||||
}
|
}
|
||||||
return exist;
|
return exist;
|
||||||
}
|
}
|
||||||
|
//检查可见文件名是否存在
|
||||||
public static boolean checkVisibleFolderName(ContentResolver resolver, String name) {
|
public static boolean checkVisibleFolderName(ContentResolver resolver, String name) {
|
||||||
Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI, null,
|
Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI, null,
|
||||||
NoteColumns.TYPE + "=" + Notes.TYPE_FOLDER +
|
NoteColumns.TYPE + "=" + Notes.TYPE_FOLDER +
|
||||||
|
@ -196,7 +212,7 @@ public class DataUtils {
|
||||||
}
|
}
|
||||||
return exist;
|
return exist;
|
||||||
}
|
}
|
||||||
|
//获取文件夹便签的widget返回的是哈希表
|
||||||
public static HashSet<AppWidgetAttribute> getFolderNoteWidget(ContentResolver resolver, long folderId) {
|
public static HashSet<AppWidgetAttribute> getFolderNoteWidget(ContentResolver resolver, long folderId) {
|
||||||
Cursor c = resolver.query(Notes.CONTENT_NOTE_URI,
|
Cursor c = resolver.query(Notes.CONTENT_NOTE_URI,
|
||||||
new String[] { NoteColumns.WIDGET_ID, NoteColumns.WIDGET_TYPE },
|
new String[] { NoteColumns.WIDGET_ID, NoteColumns.WIDGET_TYPE },
|
||||||
|
@ -207,6 +223,7 @@ public class DataUtils {
|
||||||
HashSet<AppWidgetAttribute> set = null;
|
HashSet<AppWidgetAttribute> set = null;
|
||||||
if (c != null) {
|
if (c != null) {
|
||||||
if (c.moveToFirst()) {
|
if (c.moveToFirst()) {
|
||||||
|
//定义AppWidgetAttribute类型的哈希表
|
||||||
set = new HashSet<AppWidgetAttribute>();
|
set = new HashSet<AppWidgetAttribute>();
|
||||||
do {
|
do {
|
||||||
try {
|
try {
|
||||||
|
@ -217,13 +234,14 @@ public class DataUtils {
|
||||||
} catch (IndexOutOfBoundsException e) {
|
} catch (IndexOutOfBoundsException e) {
|
||||||
Log.e(TAG, e.toString());
|
Log.e(TAG, e.toString());
|
||||||
}
|
}
|
||||||
|
//这里循环是找到cursor不为空的时候
|
||||||
} while (c.moveToNext());
|
} while (c.moveToNext());
|
||||||
}
|
}
|
||||||
c.close();
|
c.close();
|
||||||
}
|
}
|
||||||
return set;
|
return set;
|
||||||
}
|
}
|
||||||
|
//通过便签ID获得电话号码
|
||||||
public static String getCallNumberByNoteId(ContentResolver resolver, long noteId) {
|
public static String getCallNumberByNoteId(ContentResolver resolver, long noteId) {
|
||||||
Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI,
|
Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI,
|
||||||
new String [] { CallNote.PHONE_NUMBER },
|
new String [] { CallNote.PHONE_NUMBER },
|
||||||
|
@ -232,8 +250,10 @@ public class DataUtils {
|
||||||
null);
|
null);
|
||||||
|
|
||||||
if (cursor != null && cursor.moveToFirst()) {
|
if (cursor != null && cursor.moveToFirst()) {
|
||||||
|
//获得第一行数据
|
||||||
try {
|
try {
|
||||||
return cursor.getString(0);
|
return cursor.getString(0);
|
||||||
|
//捕捉超界异常
|
||||||
} catch (IndexOutOfBoundsException e) {
|
} catch (IndexOutOfBoundsException e) {
|
||||||
Log.e(TAG, "Get call number fails " + e.toString());
|
Log.e(TAG, "Get call number fails " + e.toString());
|
||||||
} finally {
|
} finally {
|
||||||
|
@ -242,7 +262,7 @@ public class DataUtils {
|
||||||
}
|
}
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
//通过电话号码和拨打日期获得便签ID
|
||||||
public static long getNoteIdByPhoneNumberAndCallDate(ContentResolver resolver, String phoneNumber, long callDate) {
|
public static long getNoteIdByPhoneNumberAndCallDate(ContentResolver resolver, String phoneNumber, long callDate) {
|
||||||
Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI,
|
Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI,
|
||||||
new String [] { CallNote.NOTE_ID },
|
new String [] { CallNote.NOTE_ID },
|
||||||
|
@ -255,6 +275,7 @@ public class DataUtils {
|
||||||
if (cursor.moveToFirst()) {
|
if (cursor.moveToFirst()) {
|
||||||
try {
|
try {
|
||||||
return cursor.getLong(0);
|
return cursor.getLong(0);
|
||||||
|
//记录获取失败
|
||||||
} catch (IndexOutOfBoundsException e) {
|
} catch (IndexOutOfBoundsException e) {
|
||||||
Log.e(TAG, "Get call note id fails " + e.toString());
|
Log.e(TAG, "Get call note id fails " + e.toString());
|
||||||
}
|
}
|
||||||
|
@ -263,7 +284,7 @@ public class DataUtils {
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
//通过ID获取NoteColumns.SNIPPET
|
||||||
public static String getSnippetById(ContentResolver resolver, long noteId) {
|
public static String getSnippetById(ContentResolver resolver, long noteId) {
|
||||||
Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI,
|
Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI,
|
||||||
new String [] { NoteColumns.SNIPPET },
|
new String [] { NoteColumns.SNIPPET },
|
||||||
|
@ -274,14 +295,16 @@ public class DataUtils {
|
||||||
if (cursor != null) {
|
if (cursor != null) {
|
||||||
String snippet = "";
|
String snippet = "";
|
||||||
if (cursor.moveToFirst()) {
|
if (cursor.moveToFirst()) {
|
||||||
|
//获取第一列字符串
|
||||||
snippet = cursor.getString(0);
|
snippet = cursor.getString(0);
|
||||||
}
|
}
|
||||||
cursor.close();
|
cursor.close();
|
||||||
return snippet;
|
return snippet;
|
||||||
}
|
}
|
||||||
|
//抛出无法利用id找到便签的异常
|
||||||
throw new IllegalArgumentException("Note is not found with id: " + noteId);
|
throw new IllegalArgumentException("Note is not found with id: " + noteId);
|
||||||
}
|
}
|
||||||
|
//获得格式化的snippet(主要是去除无用字符)
|
||||||
public static String getFormattedSnippet(String snippet) {
|
public static String getFormattedSnippet(String snippet) {
|
||||||
if (snippet != null) {
|
if (snippet != null) {
|
||||||
snippet = snippet.trim();
|
snippet = snippet.trim();
|
||||||
|
|
|
@ -15,35 +15,37 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package net.micode.notes.tool;
|
package net.micode.notes.tool;
|
||||||
|
/*
|
||||||
|
字符工具类
|
||||||
|
*/
|
||||||
public class GTaskStringUtils {
|
public class GTaskStringUtils {
|
||||||
|
//日程同步动作ID
|
||||||
public final static String GTASK_JSON_ACTION_ID = "action_id";
|
public final static String GTASK_JSON_ACTION_ID = "action_id";
|
||||||
|
//日程同步动作列表
|
||||||
public final static String GTASK_JSON_ACTION_LIST = "action_list";
|
public final static String GTASK_JSON_ACTION_LIST = "action_list";
|
||||||
|
//日程同步动作类型
|
||||||
public final static String GTASK_JSON_ACTION_TYPE = "action_type";
|
public final static String GTASK_JSON_ACTION_TYPE = "action_type";
|
||||||
|
//日程同步动作类型构造
|
||||||
public final static String GTASK_JSON_ACTION_TYPE_CREATE = "create";
|
public final static String GTASK_JSON_ACTION_TYPE_CREATE = "create";
|
||||||
|
//返回日程同步动作类型
|
||||||
public final static String GTASK_JSON_ACTION_TYPE_GETALL = "get_all";
|
public final static String GTASK_JSON_ACTION_TYPE_GETALL = "get_all";
|
||||||
|
//日程同步动作类型移动
|
||||||
public final static String GTASK_JSON_ACTION_TYPE_MOVE = "move";
|
public final static String GTASK_JSON_ACTION_TYPE_MOVE = "move";
|
||||||
|
//日程同步动作类型更新
|
||||||
public final static String GTASK_JSON_ACTION_TYPE_UPDATE = "update";
|
public final static String GTASK_JSON_ACTION_TYPE_UPDATE = "update";
|
||||||
|
//日程同步创建id
|
||||||
public final static String GTASK_JSON_CREATOR_ID = "creator_id";
|
public final static String GTASK_JSON_CREATOR_ID = "creator_id";
|
||||||
|
//日程同步子体
|
||||||
public final static String GTASK_JSON_CHILD_ENTITY = "child_entity";
|
public final static String GTASK_JSON_CHILD_ENTITY = "child_entity";
|
||||||
|
//日程同步用户版本
|
||||||
public final static String GTASK_JSON_CLIENT_VERSION = "client_version";
|
public final static String GTASK_JSON_CLIENT_VERSION = "client_version";
|
||||||
|
//日程同步已完成
|
||||||
public final static String GTASK_JSON_COMPLETED = "completed";
|
public final static String GTASK_JSON_COMPLETED = "completed";
|
||||||
|
//日程同步当前列表ID
|
||||||
public final static String GTASK_JSON_CURRENT_LIST_ID = "current_list_id";
|
public final static String GTASK_JSON_CURRENT_LIST_ID = "current_list_id";
|
||||||
|
//日程同步默认列表id
|
||||||
public final static String GTASK_JSON_DEFAULT_LIST_ID = "default_list_id";
|
public final static String GTASK_JSON_DEFAULT_LIST_ID = "default_list_id";
|
||||||
|
//日程同步删除
|
||||||
public final static String GTASK_JSON_DELETED = "deleted";
|
public final static String GTASK_JSON_DELETED = "deleted";
|
||||||
|
|
||||||
public final static String GTASK_JSON_DEST_LIST = "dest_list";
|
public final static String GTASK_JSON_DEST_LIST = "dest_list";
|
||||||
|
|
|
@ -21,25 +21,28 @@ import android.preference.PreferenceManager;
|
||||||
|
|
||||||
import net.micode.notes.R;
|
import net.micode.notes.R;
|
||||||
import net.micode.notes.ui.NotesPreferenceActivity;
|
import net.micode.notes.ui.NotesPreferenceActivity;
|
||||||
|
/*
|
||||||
|
界面元素解析工具类
|
||||||
|
*/
|
||||||
public class ResourceParser {
|
public class ResourceParser {
|
||||||
|
//定义各种颜色
|
||||||
public static final int YELLOW = 0;
|
public static final int YELLOW = 0;
|
||||||
public static final int BLUE = 1;
|
public static final int BLUE = 1;
|
||||||
public static final int WHITE = 2;
|
public static final int WHITE = 2;
|
||||||
public static final int GREEN = 3;
|
public static final int GREEN = 3;
|
||||||
public static final int RED = 4;
|
public static final int RED = 4;
|
||||||
|
//背景默认色
|
||||||
public static final int BG_DEFAULT_COLOR = YELLOW;
|
public static final int BG_DEFAULT_COLOR = YELLOW;
|
||||||
|
|
||||||
public static final int TEXT_SMALL = 0;
|
public static final int TEXT_SMALL = 0;
|
||||||
public static final int TEXT_MEDIUM = 1;
|
public static final int TEXT_MEDIUM = 1;
|
||||||
public static final int TEXT_LARGE = 2;
|
public static final int TEXT_LARGE = 2;
|
||||||
public static final int TEXT_SUPER = 3;
|
public static final int TEXT_SUPER = 3;
|
||||||
|
//背景默认字体大小
|
||||||
public static final int BG_DEFAULT_FONT_SIZE = TEXT_MEDIUM;
|
public static final int BG_DEFAULT_FONT_SIZE = TEXT_MEDIUM;
|
||||||
|
//便签背景源
|
||||||
public static class NoteBgResources {
|
public static class NoteBgResources {
|
||||||
|
//颜色
|
||||||
private final static int [] BG_EDIT_RESOURCES = new int [] {
|
private final static int [] BG_EDIT_RESOURCES = new int [] {
|
||||||
R.drawable.edit_yellow,
|
R.drawable.edit_yellow,
|
||||||
R.drawable.edit_blue,
|
R.drawable.edit_blue,
|
||||||
|
@ -47,7 +50,7 @@ public class ResourceParser {
|
||||||
R.drawable.edit_green,
|
R.drawable.edit_green,
|
||||||
R.drawable.edit_red
|
R.drawable.edit_red
|
||||||
};
|
};
|
||||||
|
//标题色
|
||||||
private final static int [] BG_EDIT_TITLE_RESOURCES = new int [] {
|
private final static int [] BG_EDIT_TITLE_RESOURCES = new int [] {
|
||||||
R.drawable.edit_title_yellow,
|
R.drawable.edit_title_yellow,
|
||||||
R.drawable.edit_title_blue,
|
R.drawable.edit_title_blue,
|
||||||
|
@ -55,16 +58,16 @@ public class ResourceParser {
|
||||||
R.drawable.edit_title_green,
|
R.drawable.edit_title_green,
|
||||||
R.drawable.edit_title_red
|
R.drawable.edit_title_red
|
||||||
};
|
};
|
||||||
|
//获取便签背景源第ID项内容
|
||||||
public static int getNoteBgResource(int id) {
|
public static int getNoteBgResource(int id) {
|
||||||
return BG_EDIT_RESOURCES[id];
|
return BG_EDIT_RESOURCES[id];
|
||||||
}
|
}
|
||||||
|
//获取便签标题背景源第ID项内容
|
||||||
public static int getNoteTitleBgResource(int id) {
|
public static int getNoteTitleBgResource(int id) {
|
||||||
return BG_EDIT_TITLE_RESOURCES[id];
|
return BG_EDIT_TITLE_RESOURCES[id];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//获得默认背景颜色ID
|
||||||
public static int getDefaultBgId(Context context) {
|
public static int getDefaultBgId(Context context) {
|
||||||
if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean(
|
if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean(
|
||||||
NotesPreferenceActivity.PREFERENCE_SET_BG_COLOR_KEY, false)) {
|
NotesPreferenceActivity.PREFERENCE_SET_BG_COLOR_KEY, false)) {
|
||||||
|
@ -73,7 +76,7 @@ public class ResourceParser {
|
||||||
return BG_DEFAULT_COLOR;
|
return BG_DEFAULT_COLOR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//便签不同区域的定色
|
||||||
public static class NoteItemBgResources {
|
public static class NoteItemBgResources {
|
||||||
private final static int [] BG_FIRST_RESOURCES = new int [] {
|
private final static int [] BG_FIRST_RESOURCES = new int [] {
|
||||||
R.drawable.list_yellow_up,
|
R.drawable.list_yellow_up,
|
||||||
|
@ -106,29 +109,30 @@ public class ResourceParser {
|
||||||
R.drawable.list_green_single,
|
R.drawable.list_green_single,
|
||||||
R.drawable.list_red_single
|
R.drawable.list_red_single
|
||||||
};
|
};
|
||||||
|
//获得便签背景首源
|
||||||
public static int getNoteBgFirstRes(int id) {
|
public static int getNoteBgFirstRes(int id) {
|
||||||
return BG_FIRST_RESOURCES[id];
|
return BG_FIRST_RESOURCES[id];
|
||||||
}
|
}
|
||||||
|
//获得便签背景尾源
|
||||||
public static int getNoteBgLastRes(int id) {
|
public static int getNoteBgLastRes(int id) {
|
||||||
return BG_LAST_RESOURCES[id];
|
return BG_LAST_RESOURCES[id];
|
||||||
}
|
}
|
||||||
|
//获得单个便签源
|
||||||
public static int getNoteBgSingleRes(int id) {
|
public static int getNoteBgSingleRes(int id) {
|
||||||
return BG_SINGLE_RESOURCES[id];
|
return BG_SINGLE_RESOURCES[id];
|
||||||
}
|
}
|
||||||
|
//获得便签正常源
|
||||||
public static int getNoteBgNormalRes(int id) {
|
public static int getNoteBgNormalRes(int id) {
|
||||||
return BG_NORMAL_RESOURCES[id];
|
return BG_NORMAL_RESOURCES[id];
|
||||||
}
|
}
|
||||||
|
//获得文件背景源
|
||||||
public static int getFolderBgRes() {
|
public static int getFolderBgRes() {
|
||||||
return R.drawable.list_folder;
|
return R.drawable.list_folder;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class WidgetBgResources {
|
public static class WidgetBgResources {
|
||||||
|
//2x大小背景
|
||||||
private final static int [] BG_2X_RESOURCES = new int [] {
|
private final static int [] BG_2X_RESOURCES = new int [] {
|
||||||
R.drawable.widget_2x_yellow,
|
R.drawable.widget_2x_yellow,
|
||||||
R.drawable.widget_2x_blue,
|
R.drawable.widget_2x_blue,
|
||||||
|
@ -140,7 +144,7 @@ public class ResourceParser {
|
||||||
public static int getWidget2xBgResource(int id) {
|
public static int getWidget2xBgResource(int id) {
|
||||||
return BG_2X_RESOURCES[id];
|
return BG_2X_RESOURCES[id];
|
||||||
}
|
}
|
||||||
|
//4X大小背景
|
||||||
private final static int [] BG_4X_RESOURCES = new int [] {
|
private final static int [] BG_4X_RESOURCES = new int [] {
|
||||||
R.drawable.widget_4x_yellow,
|
R.drawable.widget_4x_yellow,
|
||||||
R.drawable.widget_4x_blue,
|
R.drawable.widget_4x_blue,
|
||||||
|
@ -153,7 +157,7 @@ public class ResourceParser {
|
||||||
return BG_4X_RESOURCES[id];
|
return BG_4X_RESOURCES[id];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//文本显示大小
|
||||||
public static class TextAppearanceResources {
|
public static class TextAppearanceResources {
|
||||||
private final static int [] TEXTAPPEARANCE_RESOURCES = new int [] {
|
private final static int [] TEXTAPPEARANCE_RESOURCES = new int [] {
|
||||||
R.style.TextAppearanceNormal,
|
R.style.TextAppearanceNormal,
|
||||||
|
@ -168,6 +172,7 @@ public class ResourceParser {
|
||||||
* The id may larger than the length of resources, in this case,
|
* The id may larger than the length of resources, in this case,
|
||||||
* return the {@link ResourceParser#BG_DEFAULT_FONT_SIZE}
|
* return the {@link ResourceParser#BG_DEFAULT_FONT_SIZE}
|
||||||
*/
|
*/
|
||||||
|
//如果索引超界
|
||||||
if (id >= TEXTAPPEARANCE_RESOURCES.length) {
|
if (id >= TEXTAPPEARANCE_RESOURCES.length) {
|
||||||
return BG_DEFAULT_FONT_SIZE;
|
return BG_DEFAULT_FONT_SIZE;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue