diff --git a/doc/小米便签维护验收PPT.pptx b/doc/小米便签维护验收PPT.pptx
new file mode 100644
index 0000000..9d83991
Binary files /dev/null and b/doc/小米便签维护验收PPT.pptx differ
diff --git a/src/Notes-master/.idea/caches/build_file_checksums.ser b/src/Notes-master/.idea/caches/build_file_checksums.ser
deleted file mode 100644
index db95d16..0000000
Binary files a/src/Notes-master/.idea/caches/build_file_checksums.ser and /dev/null differ
diff --git a/src/Notes-master/.idea/markdown-navigator-enh.xml b/src/Notes-master/.idea/markdown-navigator-enh.xml
new file mode 100644
index 0000000..a8fcc84
--- /dev/null
+++ b/src/Notes-master/.idea/markdown-navigator-enh.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Notes-master/.idea/markdown-navigator.xml b/src/Notes-master/.idea/markdown-navigator.xml
new file mode 100644
index 0000000..57b84e5
--- /dev/null
+++ b/src/Notes-master/.idea/markdown-navigator.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Notes-master/.idea/modules/Notes-master.iml b/src/Notes-master/.idea/modules/Notes-master.iml
index 21ca423..7ec378f 100644
--- a/src/Notes-master/.idea/modules/Notes-master.iml
+++ b/src/Notes-master/.idea/modules/Notes-master.iml
@@ -17,4 +17,8 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/Notes-master/.idea/modules/app/Notes-master.app.iml b/src/Notes-master/.idea/modules/app/Notes-master.app.iml
index e9f35bf..87830b7 100644
--- a/src/Notes-master/.idea/modules/app/Notes-master.app.iml
+++ b/src/Notes-master/.idea/modules/app/Notes-master.app.iml
@@ -50,4 +50,8 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/Notes-master/.idea/sonarIssues.xml b/src/Notes-master/.idea/sonarIssues.xml
new file mode 100644
index 0000000..465ef5e
--- /dev/null
+++ b/src/Notes-master/.idea/sonarIssues.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Notes-master/.idea/sonarlint/issuestore/3/a/3aac5305cb73bfbdeb8078cd264d04323fa80e92 b/src/Notes-master/.idea/sonarlint/issuestore/3/a/3aac5305cb73bfbdeb8078cd264d04323fa80e92
new file mode 100644
index 0000000..e69de29
diff --git a/src/Notes-master/.idea/sonarlint/issuestore/9/3/934a4e2abf19d28a53f6aeb1dcd99248c44b6892 b/src/Notes-master/.idea/sonarlint/issuestore/9/3/934a4e2abf19d28a53f6aeb1dcd99248c44b6892
new file mode 100644
index 0000000..a0df7ff
--- /dev/null
+++ b/src/Notes-master/.idea/sonarlint/issuestore/9/3/934a4e2abf19d28a53f6aeb1dcd99248c44b6892
@@ -0,0 +1,5 @@
+
+2
+java:S2386,"Make this member "protected".(X
+n
+java:S3776"RRefactor this method to reduce its Cognitive Complexity from 16 to the 15 allowed.(
\ No newline at end of file
diff --git a/src/Notes-master/.idea/sonarlint/issuestore/c/1/c182d0c9c237ea8a46a92ccaae9bb5c751923a88 b/src/Notes-master/.idea/sonarlint/issuestore/c/1/c182d0c9c237ea8a46a92ccaae9bb5c751923a88
new file mode 100644
index 0000000..fd4c7f2
--- /dev/null
+++ b/src/Notes-master/.idea/sonarlint/issuestore/c/1/c182d0c9c237ea8a46a92ccaae9bb5c751923a88
@@ -0,0 +1,3 @@
+
+[
+java:S1124"EReorder the modifiers to comply with the Java Language Specification.(
\ No newline at end of file
diff --git a/src/Notes-master/.idea/sonarlint/issuestore/d/1/d187f1271655c3d91661a39fe6de395b6a9f290a b/src/Notes-master/.idea/sonarlint/issuestore/d/1/d187f1271655c3d91661a39fe6de395b6a9f290a
new file mode 100644
index 0000000..f59a333
--- /dev/null
+++ b/src/Notes-master/.idea/sonarlint/issuestore/d/1/d187f1271655c3d91661a39fe6de395b6a9f290a
@@ -0,0 +1,3 @@
+
+i
+java:S3776"RRefactor this method to reduce its Cognitive Complexity from 16 to the 15 allowed.(ǎ
\ No newline at end of file
diff --git a/src/Notes-master/.idea/sonarlint/issuestore/e/0/e094aec5c3e1b6f44539adff3114f5a1ad603ddc b/src/Notes-master/.idea/sonarlint/issuestore/e/0/e094aec5c3e1b6f44539adff3114f5a1ad603ddc
new file mode 100644
index 0000000..75d7970
--- /dev/null
+++ b/src/Notes-master/.idea/sonarlint/issuestore/e/0/e094aec5c3e1b6f44539adff3114f5a1ad603ddc
@@ -0,0 +1,8 @@
+
+r
+java:S3923"[Remove this conditional structure or edit its code blocks so that they're not all the same.(ԡ
+
+java:S1319"pThe return type of this method should be an interface such as "List" rather than the implementation "ArrayList".(ﷺ
+t
+java:S2293*"YReplace the type specification in this constructor call with the diamond operator ("<>").(ʩ
+Y java:S125"").(
+u
+java:S2293"YReplace the type specification in this constructor call with the diamond operator ("<>").(
+n
+java:S3776"RRefactor this method to reduce its Cognitive Complexity from 91 to the 15 allowed.(
+2
+java:S2386."Make this member "protected".(u
+u
+java:S2293"YReplace the type specification in this constructor call with the diamond operator ("<>").(
\ No newline at end of file
diff --git a/src/Notes-master/.idea/sonarlint/issuestore/f/4/f4a01d6a4fcb971362ec00a83903fd3902f52164 b/src/Notes-master/.idea/sonarlint/issuestore/f/4/f4a01d6a4fcb971362ec00a83903fd3902f52164
new file mode 100644
index 0000000..e69de29
diff --git a/src/Notes-master/.idea/sonarlint/issuestore/index.pb b/src/Notes-master/.idea/sonarlint/issuestore/index.pb
new file mode 100644
index 0000000..b513b71
--- /dev/null
+++ b/src/Notes-master/.idea/sonarlint/issuestore/index.pb
@@ -0,0 +1,15 @@
+
+@
+app/build.gradle,f\4\f4a01d6a4fcb971362ec00a83903fd3902f52164
+k
+;app/src/main/java/net/micode/notes/gtask/data/MetaData.java,c\1\c182d0c9c237ea8a46a92ccaae9bb5c751923a88
+g
+7app/src/main/java/net/micode/notes/gtask/data/Node.java,3\a\3aac5305cb73bfbdeb8078cd264d04323fa80e92
+j
+:app/src/main/java/net/micode/notes/gtask/data/SqlData.java,9\3\934a4e2abf19d28a53f6aeb1dcd99248c44b6892
+j
+:app/src/main/java/net/micode/notes/gtask/data/SqlNote.java,f\1\f1226eeacd46c914d51f3d1a6d6f27377490d2a4
+g
+7app/src/main/java/net/micode/notes/gtask/data/Task.java,d\1\d187f1271655c3d91661a39fe6de395b6a9f290a
+k
+;app/src/main/java/net/micode/notes/gtask/data/TaskList.java,e\0\e094aec5c3e1b6f44539adff3114f5a1ad603ddc
\ No newline at end of file
diff --git a/src/Notes-master/app/src/main/java/net/micode/notes/gtask/data/MetaData.java b/src/Notes-master/app/src/main/java/net/micode/notes/gtask/data/MetaData.java
index 3a2050b..9250255 100644
--- a/src/Notes-master/app/src/main/java/net/micode/notes/gtask/data/MetaData.java
+++ b/src/Notes-master/app/src/main/java/net/micode/notes/gtask/data/MetaData.java
@@ -24,39 +24,51 @@ import net.micode.notes.tool.GTaskStringUtils;
import org.json.JSONException;
import org.json.JSONObject;
-
+// 功能描述:主要是描述数据属性(property)的信息,用来支持例如指示存储位置、历史数据、资源查找、文件记录等功能。
+//实现:继承task类,用于记录数据的变化
public class MetaData extends Task {
+ // 调用getSimpleName ()函数得到类的简写名称存入字符串TAG中
private final static String TAG = MetaData.class.getSimpleName();
-
+ // 相关GID文件 (GID文件用来保存帮助文件的信息)
private String mRelatedGid = null;
-
+ // 调用JSONObject库函数put (),Task类中的setNotes ()和setName ()函数,实现设置数据,即生成元数据库
public void setMeta(String gid, JSONObject metaInfo) {
try {
+ // 将这对键值放入metaInfo这个jsonobject对象中
metaInfo.put(GTaskStringUtils.META_HEAD_GTASK_ID, gid);
+ // 捕捉异常放入TAG
} catch (JSONException e) {
Log.e(TAG, "failed to put related gid");
}
+ // 设置便签,将json类的metainfo转换为String
setNotes(metaInfo.toString());
+ // 设置gtask名字
setName(GTaskStringUtils.META_NOTE_NAME);
}
-
+ // 获取相关联的Gid
public String getRelatedGid() {
return mRelatedGid;
}
@Override
+ //判断是否值得存放,即当前数据是否有效,若数据非空则返回真值
public boolean isWorthSaving() {
return getNotes() != null;
}
@Override
+ //功能:使用远程json数据对象设置元数据内容
+ //实现:调用父类Task中的setContentByRemoteJSON ()函数,如果获取的notes非空,则去掉获取notes的空格后存入metaInfo中,并从metaInfo获取键值来获取相关gid;如果为空,则抛出异常
+ //参数:js属于JSONObject类,属于远程的数据
public void setContentByRemoteJSON(JSONObject js) {
+ //普通的直接引用。与this类似,super相当于是指向当前对象的父类,这样就可以用super.xxx来引用父类的成员。
super.setContentByRemoteJSON(js);
if (getNotes() != null) {
try {
JSONObject metaInfo = new JSONObject(getNotes().trim());
mRelatedGid = metaInfo.getString(GTaskStringUtils.META_HEAD_GTASK_ID);
} catch (JSONException e) {
+ // 输出异常
Log.w(TAG, "failed to get related gid");
mRelatedGid = null;
}
@@ -64,17 +76,20 @@ public class MetaData extends Task {
}
@Override
+ //功能:使用本地json数据对象设置元数据内容,一般不会用到,若用到,则抛出异常
public void setContentByLocalJSON(JSONObject js) {
// this function should not be called
throw new IllegalAccessError("MetaData:setContentByLocalJSON should not be called");
}
@Override
+ // 功能:从元数据内容中获取本地json对象,一般不会用到,若用到,则抛出异常
public JSONObject getLocalJSONFromContent() {
throw new IllegalAccessError("MetaData:getLocalJSONFromContent should not be called");
}
@Override
+ // 功能:获取同步动作状态,一般不会用到,若用到,则抛出异常
public int getSyncAction(Cursor c) {
throw new IllegalAccessError("MetaData:getSyncAction should not be called");
}
diff --git a/src/Notes-master/app/src/main/java/net/micode/notes/gtask/data/Node.java b/src/Notes-master/app/src/main/java/net/micode/notes/gtask/data/Node.java
index 63950e0..88eaa20 100644
--- a/src/Notes-master/app/src/main/java/net/micode/notes/gtask/data/Node.java
+++ b/src/Notes-master/app/src/main/java/net/micode/notes/gtask/data/Node.java
@@ -20,6 +20,7 @@ import android.database.Cursor;
import org.json.JSONObject;
+// 建立node类来提供模板,设置各种参数及定义各种函数,会在别的地方用到,定义了各种同步活动的标识码
public abstract class Node {
public static final int SYNC_ACTION_NONE = 0;
@@ -46,14 +47,14 @@ public abstract class Node {
private long mLastModified;
private boolean mDeleted;
-
+ //实现:设置mgid为空,名字为空,最后一次修改时间为0(没有修改),mDeleted为false表示未删除。
public Node() {
mGid = null;
mName = "";
mLastModified = 0;
mDeleted = false;
}
-
+ // 创建JSONObject对象,创建操作和更新操作,参数为int actionid
public abstract JSONObject getCreateAction(int actionId);
public abstract JSONObject getUpdateAction(int actionId);
diff --git a/src/Notes-master/app/src/main/java/net/micode/notes/gtask/data/SqlData.java b/src/Notes-master/app/src/main/java/net/micode/notes/gtask/data/SqlData.java
index d3ec3be..5c4f186 100644
--- a/src/Notes-master/app/src/main/java/net/micode/notes/gtask/data/SqlData.java
+++ b/src/Notes-master/app/src/main/java/net/micode/notes/gtask/data/SqlData.java
@@ -36,6 +36,7 @@ import org.json.JSONObject;
public class SqlData {
+ //调用getSimpleName ()函数将类的简写名称存入string类型变量TAG中
private static final String TAG = SqlData.class.getSimpleName();
private static final int INVALID_ID = -99999;
@@ -70,7 +71,8 @@ public class SqlData {
private String mDataContentData3;
private ContentValues mDiffDataValues;
-
+ //功能:第一种构造函数,初始化
+ //参数:类型为context,从上下文获取,初始化其中变量
public SqlData(Context context) {
mContentResolver = context.getContentResolver();
mIsCreate = true;
@@ -81,14 +83,17 @@ public class SqlData {
mDataContentData3 = "";
mDiffDataValues = new ContentValues();
}
-
+ //功能:第二中构造函数,初始化
+ //实现:通过游标cursor c来获取数据,进行替换
+ //参数:游标c是将传进来的参数替换掉初始的数值
public SqlData(Context context, Cursor c) {
mContentResolver = context.getContentResolver();
mIsCreate = false;
loadFromCursor(c);
mDiffDataValues = new ContentValues();
}
-
+ //功能:从光标处加载数据,DATA_ID_COLUMN等参数为0,1,2,3,4,应为获取五列参数
+ //实现:用各种get函数获取相关值
private void loadFromCursor(Cursor c) {
mDataId = c.getLong(DATA_ID_COLUMN);
mDataMimeType = c.getString(DATA_MIME_TYPE_COLUMN);
@@ -96,16 +101,23 @@ public class SqlData {
mDataContentData1 = c.getLong(DATA_CONTENT_DATA_1_COLUMN);
mDataContentData3 = c.getString(DATA_CONTENT_DATA_3_COLUMN);
}
-
+ //功能:设置共享数据并提供异常抛出与处理机制
+ //实现:首先js判断是否有DataColumns.ID,然后判断是否为第一种构造方式,将DataColumns.ID列和对应dataId列值加入到SQLData中,
+ //然后更新mDataId,最后判断并设置mDataMimeType、mDataContent等需共享的数据
public void setContent(JSONObject js) throws JSONException {
+ // 如果传入JSONObject有DataColumns.ID,则dataID = DataColumns.ID,否则设置为INVALID_ID=-99999
long dataId = js.has(DataColumns.ID) ? js.getLong(DataColumns.ID) : INVALID_ID;
+ //如果mIsCreate为True(根据第一种构造方式)或者mDataId(当前数据的ID)与dataId(元数据的ID)不符。
+ //第一种构造方式只是简单的初始化,没具体内容
if (mIsCreate || mDataId != dataId) {
+ // 将DataColumns.ID列和对应dataId列值加入到SQLData中
mDiffDataValues.put(DataColumns.ID, dataId);
}
mDataId = dataId;
-
+ // 判断并更新
String dataMimeType = js.has(DataColumns.MIME_TYPE) ? js.getString(DataColumns.MIME_TYPE)
: DataConstants.NOTE;
+ // 这个对象的MimeType不和(dataMimeType)共享数据一样,则将共享数据.MIME_TYPE加入数据库中
if (mIsCreate || !mDataMimeType.equals(dataMimeType)) {
mDiffDataValues.put(DataColumns.MIME_TYPE, dataMimeType);
}
@@ -129,7 +141,8 @@ public class SqlData {
}
mDataContentData3 = dataContentData3;
}
-
+ //功能:获取共享的数据内容,并提供异常抛出与处理机制
+ //实现:根据mIsCreate判断初始化类型,如果为第一种无内容的初始化,则返回null,否则,将要共享的内容存入JSONObject类的js中
public JSONObject getContent() throws JSONException {
if (mIsCreate) {
Log.e(TAG, "it seems that we haven't created this in database yet");
@@ -143,7 +156,9 @@ public class SqlData {
js.put(DataColumns.DATA3, mDataContentData3);
return js;
}
-
+ //功能:commit 函数用于把当前所做的修改保存到数据库
+ //实现:首先判断构造方式,如果为第一种构造方式,判断是否为有效然后更新共享数据;如果为第二种构造方式,首先判断要共享的数据mDiffDataValues是否存在,然后确认版本,如果版本还没有确认,则记录id和data,如果已经确认,则更新对应版本ID,最后将要共享的数据清空,回到初始化,表示已经共享
+ //参数:long类型的noteId,boolean类型的validateVersion用于版本确认,long类型的version为版本号
public void commit(long noteId, boolean validateVersion, long version) {
if (mIsCreate) {
@@ -182,7 +197,7 @@ public class SqlData {
mDiffDataValues.clear();
mIsCreate = false;
}
-
+ // 获取当前ID
public long getId() {
return mDataId;
}
diff --git a/src/Notes-master/app/src/main/java/net/micode/notes/gtask/data/SqlNote.java b/src/Notes-master/app/src/main/java/net/micode/notes/gtask/data/SqlNote.java
index f4d0011..5050a1d 100644
--- a/src/Notes-master/app/src/main/java/net/micode/notes/gtask/data/SqlNote.java
+++ b/src/Notes-master/app/src/main/java/net/micode/notes/gtask/data/SqlNote.java
@@ -77,13 +77,13 @@ public class SqlNote {
public static final int WIDGET_TYPE_COLUMN = 11;
public static final int SYNC_ID_COLUMN = 12;
-
+ // 本地修改的符号
public static final int LOCAL_MODIFIED_COLUMN = 13;
-
+ // 在进入临时文件夹之前,原始的父id(未使用)
public static final int ORIGIN_PARENT_ID_COLUMN = 14;
-
+ // 用户id
public static final int GTASK_ID_COLUMN = 15;
-
+ //版本
public static final int VERSION_COLUMN = 16;
private Context mContext;
@@ -121,7 +121,8 @@ public class SqlNote {
private ContentValues mDiffNoteValues;
private ArrayList mDataList;
-
+ //第一种构造函数
+ //构造函数,参数只有context,初始化新建的对象中的所有变量
public SqlNote(Context context) {
mContext = context;
mContentResolver = context.getContentResolver();
@@ -142,7 +143,8 @@ public class SqlNote {
mDiffNoteValues = new ContentValues();
mDataList = new ArrayList();
}
-
+ //第二种构造函数
+ //参数有context和cursor,对cursor指向的对象进行初始化
public SqlNote(Context context, Cursor c) {
mContext = context;
mContentResolver = context.getContentResolver();
@@ -154,7 +156,8 @@ public class SqlNote {
mDiffNoteValues = new ContentValues();
}
-
+ //第三种构造方式
+ //构造函数,参数有 context 和 id,对 id 指向的对象进行初始化
public SqlNote(Context context, long id) {
mContext = context;
mContentResolver = context.getContentResolver();
@@ -165,9 +168,11 @@ public class SqlNote {
loadDataContent();
mDiffNoteValues = new ContentValues();
}
-
+ //功能:通过id从光标处加载数据
+ //实现:通过id获取ContentResolver中的相应内容,并赋给cursor,如果有内容就将移入文档,并再次等待光标的内容;否则日志显示警告,最后关闭光标,方法完毕
private void loadFromCursor(long id) {
Cursor c = null;
+ //避免异常
try {
c = mContentResolver.query(Notes.CONTENT_NOTE_URI, PROJECTION_NOTE, "(_id=?)",
new String[] {
@@ -184,7 +189,8 @@ public class SqlNote {
c.close();
}
}
-
+ //功能:通过cursor从光标加载数据
+ //实现:各种get类型的函数,通过光标c获取参数
private void loadFromCursor(Cursor c) {
mId = c.getLong(ID_COLUMN);
mAlertDate = c.getLong(ALERTED_DATE_COLUMN);
@@ -199,7 +205,10 @@ public class SqlNote {
mWidgetType = c.getInt(WIDGET_TYPE_COLUMN);
mVersion = c.getLong(VERSION_COLUMN);
}
-
+ //功能:通过content机制获取共享数据并加载到数据库当前光标处
+ //实现:获取ID对应content内容,如果查询到该note的id确实有对应项,即cursor有对应,获取ID对应content内容
+ //如果光标处有内容,提示note无数据warning,当记录数量不为0,则循环直到记录不存在,不断地取出记录放到DataList中
+ //如果cursor为空,警告,最终判断光标为空,则关闭
private void loadDataContent() {
Cursor c = null;
mDataList.clear();
@@ -225,16 +234,23 @@ public class SqlNote {
c.close();
}
}
-
+ //功能:设置通过content机制用于共享的数据信息
+ //实现:先判断是不是系统文件夹,再判断是否为文件夹类型,如果共享数据存在摘要,则将其赋给声明的 snippet变量,否则变量为空
+ //如果SQLNote采用的是第一种构造方式,或者snippet为空,则将snippet这一项键值存入contentvalue中,尽管是“”
+ //如果是note,获取提示日期,设置用于共享数据的信息,最后遍历 dataArray,查找 id 为 dataId 的数据,更新sqlData
public boolean setContent(JSONObject js) {
try {
JSONObject note = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE);
+ // 判断是不是系统文件夹
if (note.getInt(NoteColumns.TYPE) == Notes.TYPE_SYSTEM) {
Log.w(TAG, "cannot set system folder");
+ // 判断是否为文件夹类型
} else if (note.getInt(NoteColumns.TYPE) == Notes.TYPE_FOLDER) {
+ // snnipet——片段、片断
// for folder we can only update the snnipet and type
String snippet = note.has(NoteColumns.SNIPPET) ? note
.getString(NoteColumns.SNIPPET) : "";
+ // 如果SQLNote采用的是第一种构造方式,或者snippet为空,则将snippet这一项键值存入contentvalue中,尽管是“”
if (mIsCreate || !mSnippet.equals(snippet)) {
mDiffNoteValues.put(NoteColumns.SNIPPET, snippet);
}
@@ -246,7 +262,9 @@ public class SqlNote {
mDiffNoteValues.put(NoteColumns.TYPE, type);
}
mType = type;
+ //如果是NOTE
} else if (note.getInt(NoteColumns.TYPE) == Notes.TYPE_NOTE) {
+ // 获取提示日期
JSONArray dataArray = js.getJSONArray(GTaskStringUtils.META_HEAD_DATA);
long id = note.has(NoteColumns.ID) ? note.getLong(NoteColumns.ID) : INVALID_ID;
if (mIsCreate || mId != id) {
@@ -358,7 +376,10 @@ public class SqlNote {
}
return true;
}
-
+ //功能:获取content机制提供的数据并加载到note中
+ //实现:判断采用的是第一种构造方式,自然实施初始化而已,显示错误:没创建数据库
+ //再判断如果对象的类型是note类型,这个对象的13项按键值对方式(ID, mId)、(ALERTED_DATE, mAlertDate)···加入note中
+ //类型为系统文件或目录文件时,将id,类型,以及摘要,存入jsonobject,然后对应META_HEAD_NOTE键,存入共享
public JSONObject getContent() {
try {
JSONObject js = new JSONObject();
@@ -392,7 +413,9 @@ public class SqlNote {
}
}
js.put(GTaskStringUtils.META_HEAD_DATA, dataArray);
+ // 类型为系统文件或目录文件时
} else if (mType == Notes.TYPE_FOLDER || mType == Notes.TYPE_SYSTEM) {
+ // 将id,类型,以及摘要,存入jsonobject,然后对应META_HEAD_NOTE键,存入共享
note.put(NoteColumns.ID, mId);
note.put(NoteColumns.TYPE, mType);
note.put(NoteColumns.SNIPPET, mSnippet);
@@ -406,7 +429,7 @@ public class SqlNote {
}
return null;
}
-
+ // 设置当前 id 的父 id
public void setParentId(long id) {
mParentId = id;
mDiffNoteValues.put(NoteColumns.PARENT_ID, id);
diff --git a/src/Notes-master/app/src/main/java/net/micode/notes/gtask/data/Task.java b/src/Notes-master/app/src/main/java/net/micode/notes/gtask/data/Task.java
index 1c42e99..97d24c9 100644
--- a/src/Notes-master/app/src/main/java/net/micode/notes/gtask/data/Task.java
+++ b/src/Notes-master/app/src/main/java/net/micode/notes/gtask/data/Task.java
@@ -31,7 +31,7 @@ import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
-
+// 创建Task类,继承自父类Node
public class Task extends Node {
private static final String TAG = Task.class.getSimpleName();
@@ -44,7 +44,8 @@ public class Task extends Node {
private Task mPriorSibling;
private TaskList mParent;
-
+ //功能:Task类的构造函数,对对象进行初始化
+ //实现:调用父类构造方法,对变量初始化
public Task() {
super();
mCompleted = false;
@@ -53,12 +54,16 @@ public class Task extends Node {
mParent = null;
mMetaInfo = null;
}
-
+ //功能:获取创建的action。获取当前创建的action的属性值,比如说它的id号、类型、index值。
+ //实现:首先新建一个 JSONObject 的对象js用来存放同步过程中所用到的 task 信息,然后在共享数据js里存入action_type、action_id、index
+ //再新建一个 JSONObject 对象entity打包存放 name,creator id,type task,判断是否有notes,有则将其也放入entity中
+ //最后将entity、parent_id、dest_parent_type、list_id存入js中,判断如果存在优先兄弟 task,则将其 id 放入 js 中
public JSONObject getCreateAction(int actionId) {
JSONObject js = new JSONObject();
try {
// action_type
+ // 共享数据存入动作类型action_ type
js.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE,
GTaskStringUtils.GTASK_JSON_ACTION_TYPE_CREATE);
@@ -69,11 +74,13 @@ public class Task extends Node {
js.put(GTaskStringUtils.GTASK_JSON_INDEX, mParent.getChildTaskIndex(this));
// entity_delta
+ // 新建一个 JSONObject 对象打包存放 name,creator id,type task
JSONObject entity = new JSONObject();
entity.put(GTaskStringUtils.GTASK_JSON_NAME, getName());
entity.put(GTaskStringUtils.GTASK_JSON_CREATOR_ID, "null");
entity.put(GTaskStringUtils.GTASK_JSON_ENTITY_TYPE,
GTaskStringUtils.GTASK_JSON_TYPE_TASK);
+ // 如果存在 notes ,则将其也放入 entity 中
if (getNotes() != null) {
entity.put(GTaskStringUtils.GTASK_JSON_NOTES, getNotes());
}
@@ -102,7 +109,8 @@ public class Task extends Node {
return js;
}
-
+ //功能:获取更新的action
+ //实现:和上面getCreateAction差不多
public JSONObject getUpdateAction(int actionId) {
JSONObject js = new JSONObject();
@@ -134,7 +142,8 @@ public class Task extends Node {
return js;
}
-
+ //功能:通过远端的jsonobject获取任务内容
+ //实现:首先判断js是否非空,接着判断如果有id这个变量,就进行gid的设置,同样方法设置last_modified、name等变量
public void setContentByRemoteJSON(JSONObject js) {
if (js != null) {
try {
@@ -174,7 +183,10 @@ public class Task extends Node {
}
}
}
-
+ //功能:通过本地的jsonobject获取内容
+ //实现:首先判断js是否为空或者没有META_HEAD_NOTE,为空则显示日志,创建JSONObject类note存入js的META_HEAD_NOTE
+ //创建JSONArray类dataArray存入META_HEAD_DATA,判断note的TYPE不能匹配Notes的TYPE则无效
+ //最后遍历 dataArray 查找与数据库中DataConstants.NOTE 记录信息一致的 data
public void setContentByLocalJSON(JSONObject js) {
if (js == null || !js.has(GTaskStringUtils.META_HEAD_NOTE)
|| !js.has(GTaskStringUtils.META_HEAD_DATA)) {
@@ -203,7 +215,8 @@ public class Task extends Node {
}
}
}
-
+ //功能:通过Content机制获取本地JSON数据。
+ //实现:通过判断元数据是否存在,如果不存在,则创建一个新的对象,并将信息完善。最后返回js对象。
public JSONObject getLocalJSONFromContent() {
String name = getName();
try {
@@ -246,7 +259,8 @@ public class Task extends Node {
return null;
}
}
-
+ //功能:设置元数据信息
+ //参数:MetaData类 metaData,元数据
public void setMetaInfo(MetaData metaData) {
if (metaData != null && metaData.getNotes() != null) {
try {
@@ -257,7 +271,8 @@ public class Task extends Node {
}
}
}
-
+ //功能:获取同步操作
+ //实现:判断mMetaInfo是否被删除或者远程数据被删除,然后判断光标传入的note ID是否匹配并判断本地的便签数据是否已更新
public int getSyncAction(Cursor c) {
try {
JSONObject noteInfo = null;
@@ -310,16 +325,17 @@ public class Task extends Node {
return SYNC_ACTION_ERROR;
}
-
+ //功能:判断是否值得存放,即当前数据是否有效,若数据非空 或 名字合法存在且去除空格后的名字长度大于零则返回真值。
+ // 其它:trim() 的作用是去除字符串前后的空格:public String trim()返回字符串的副本,忽略前导空白和尾部空白
public boolean isWorthSaving() {
return mMetaInfo != null || (getName() != null && getName().trim().length() > 0)
|| (getNotes() != null && getNotes().trim().length() > 0);
}
-
+ // 将task设置为修改完毕
public void setCompleted(boolean completed) {
this.mCompleted = completed;
}
-
+ // 设定mNotes
public void setNotes(String notes) {
this.mNotes = notes;
}
diff --git a/src/Notes-master/app/src/main/java/net/micode/notes/gtask/data/TaskList.java b/src/Notes-master/app/src/main/java/net/micode/notes/gtask/data/TaskList.java
index 6444a4e..d1a70c9 100644
--- a/src/Notes-master/app/src/main/java/net/micode/notes/gtask/data/TaskList.java
+++ b/src/Notes-master/app/src/main/java/net/micode/notes/gtask/data/TaskList.java
@@ -42,7 +42,8 @@ public class TaskList extends Node {
mChildren = new ArrayList();
mIndex = 1;
}
-
+ //功能:获取生成动作
+ //实现:创建JSONObject js存入action_type、action_id、index、entity_delta,生成并返回一个包含了一定数据的JSONObject实体
public JSONObject getCreateAction(int actionId) {
JSONObject js = new JSONObject();
@@ -73,7 +74,8 @@ public class TaskList extends Node {
return js;
}
-
+ //功能:接受更新action,返回jsonobject
+ //实现:同上面getCreateAction类似
public JSONObject getUpdateAction(int actionId) {
JSONObject js = new JSONObject();
@@ -102,7 +104,8 @@ public class TaskList extends Node {
return js;
}
-
+ //功能:通过云端 JSON 数据设置实例化对象 js 的内容
+ //实现:通过传入的js判断非空,然后设置id、last_modified、name
public void setContentByRemoteJSON(JSONObject js) {
if (js != null) {
try {
@@ -128,7 +131,8 @@ public class TaskList extends Node {
}
}
}
-
+ //功能:通过本地 JSON 数据设置对象 js 内容
+ //实现:实现方法也与上面setContentByRemoteJSON类似,不过设置的是根据本地js传入
public void setContentByLocalJSON(JSONObject js) {
if (js == null || !js.has(GTaskStringUtils.META_HEAD_NOTE)) {
Log.w(TAG, "setContentByLocalJSON: nothing is avaiable");
@@ -159,7 +163,8 @@ public class TaskList extends Node {
e.printStackTrace();
}
}
-
+ //功能:从content获取本地json
+ //实现:getname()函数获取文件夹名称
public JSONObject getLocalJSONFromContent() {
try {
JSONObject js = new JSONObject();
@@ -185,7 +190,12 @@ public class TaskList extends Node {
return null;
}
}
-
+ //功能:通过 cursor 获取同步信息
+ //实现:首先判断本地记录是否被修改,如果没有修改,再判断光标处的ID与最后一次修改是否相等
+ //如果相等则返回“不同步”,如果不等则返回“同步”
+ //如果本地记录已经修改,则判断获取的ID是否匹配,若不匹配则返回同步动作失败
+ //其它:“同步”是指将remote端更新至local端。另外为什么 if (c.getLong(SqlNote.SYNC_ID_COLUMN) == getLastModified())
+ //为什么这个判断最后 if else返回的都是SYNC_ACTION_UPDATE_REMOTE?
public int getSyncAction(Cursor c) {
try {
if (c.getInt(SqlNote.LOCAL_MODIFIED_COLUMN) == 0) {
@@ -222,7 +232,10 @@ public class TaskList extends Node {
public int getChildTaskCount() {
return mChildren.size();
}
-
+ //功能:在当前任务表中添加新的子任务
+ //实现:如果传入的子任务不是空并且当前的子任务序列中不含有该任务,就将这个任务加入子任务中
+ //然后设置兄弟任务优先级,若子任务为空,返回 NULL,否则返回子任务数量-1,最后设置该任务的父任务
+ //返回值为是否成功添加任务
public boolean addChildTask(Task task) {
boolean ret = false;
if (task != null && !mChildren.contains(task)) {
@@ -236,7 +249,9 @@ public class TaskList extends Node {
}
return ret;
}
-
+ //功能:在当前任务表的指定位置添加新的任务。
+ //实现:先获取要添加的任务在任务表中的位置,在索引位置添加任务,update the task list
+ //然后让插入的任务与前后连在一块,将下一个任务设置兄弟任务优先级
public boolean addChildTask(Task task, int index) {
if (index < 0 || index > mChildren.size()) {
Log.e(TAG, "add child task: invalid index");
@@ -262,7 +277,8 @@ public class TaskList extends Node {
return true;
}
-
+ //功能:删除TaskList中的一个Task
+ //实现:方法同addChildTask()类似
public boolean removeChildTask(Task task) {
boolean ret = false;
int index = mChildren.indexOf(task);
@@ -283,7 +299,7 @@ public class TaskList extends Node {
}
return ret;
}
-
+ // 功能:将当前TaskList中含有的某个Task移到index位置
public boolean moveChildTask(Task task, int index) {
if (index < 0 || index >= mChildren.size()) {
@@ -301,7 +317,8 @@ public class TaskList extends Node {
return true;
return (removeChildTask(task) && addChildTask(task, index));
}
-
+ //功能:通过Gid寻找子任务(未使用)
+ //实现:从头至尾遍历整个任务列表判断任务的gid与传入的gid是否相等
public Task findChildTaskByGid(String gid) {
for (int i = 0; i < mChildren.size(); i++) {
Task t = mChildren.get(i);
@@ -311,11 +328,11 @@ public class TaskList extends Node {
}
return null;
}
-
+ // 获取子任务索引列表
public int getChildTaskIndex(Task task) {
return mChildren.indexOf(task);
}
-
+ // 返回指定index的Task
public Task getChildTaskByIndex(int index) {
if (index < 0 || index >= mChildren.size()) {
Log.e(TAG, "getTaskByIndex: invalid index");
@@ -323,7 +340,7 @@ public class TaskList extends Node {
}
return mChildren.get(index);
}
-
+ // 返回指定gid的Task
public Task getChilTaskByGid(String gid) {
for (Task task : mChildren) {
if (task.getGid().equals(gid))
@@ -331,7 +348,7 @@ public class TaskList extends Node {
}
return null;
}
-
+ //获取子任务列表
public ArrayList getChildTaskList() {
return this.mChildren;
}
diff --git a/src/Notes-master/local.properties b/src/Notes-master/local.properties
index 11be78c..fd1d5d6 100644
--- a/src/Notes-master/local.properties
+++ b/src/Notes-master/local.properties
@@ -4,5 +4,5 @@
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
-#Sat Nov 21 11:26:00 CST 2020
-sdk.dir=D\:\\Sdk
+#Wed Dec 02 20:10:32 CST 2020
+sdk.dir=C\:\\Users\\95459\\AppData\\Local\\Android\\Sdk