Merge pull request '蔡玉祥的注释' (#12) from cyx_branch into master

pull/13/head
mbhvfy6mx 2 years ago
commit 49f90c91d5

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="CompilerConfiguration"> <component name="CompilerConfiguration">
<bytecodeTargetLevel target="17" /> <bytecodeTargetLevel target="11" />
</component> </component>
</project> </project>

@ -7,11 +7,15 @@
<deviceKey> <deviceKey>
<Key> <Key>
<type value="VIRTUAL_DEVICE_PATH" /> <type value="VIRTUAL_DEVICE_PATH" />
<value value="C:\Users\庞浩的电脑\.android\avd\Pixel_3_API_22.avd" /> <value value="C:\Users\蔡玉祥\.android\avd\Resizable_Experimental_API_UpsideDownCake.avd" />
</Key> </Key>
</deviceKey> </deviceKey>
</Target> </Target>
</targetSelectedWithDropDown> </targetSelectedWithDropDown>
<<<<<<< HEAD:.idea/deploymentTargetDropDown.xml
<timeTargetWasSelectedWithDropDown value="2023-04-07T06:44:46.634860500Z" />
=======
<timeTargetWasSelectedWithDropDown value="2023-04-07T06:36:29.852905700Z" /> <timeTargetWasSelectedWithDropDown value="2023-04-07T06:36:29.852905700Z" />
>>>>>>> master:src/.idea/deploymentTargetDropDown.xml
</component> </component>
</project> </project>

@ -7,7 +7,7 @@
<option name="testRunner" value="GRADLE" /> <option name="testRunner" value="GRADLE" />
<option name="distributionType" value="DEFAULT_WRAPPED" /> <option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" /> <option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleJvm" value="#JAVA_HOME" /> <option name="gradleJvm" value="Embedded JDK" />
<option name="modules"> <option name="modules">
<set> <set>
<option value="$PROJECT_DIR$" /> <option value="$PROJECT_DIR$" />

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_17_PREVIEW" project-jdk-name="temurin-17" project-jdk-type="JavaSDK"> <component name="ProjectRootManager" version="2" languageLevel="JDK_11" project-jdk-name="Android Studio default JDK" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" /> <output url="file://$PROJECT_DIR$/out" />
</component> </component>
</project> </project>

@ -2,11 +2,11 @@
<project version="4"> <project version="4">
<component name="ProjectModuleManager"> <component name="ProjectModuleManager">
<modules> <modules>
<module fileurl="file://$PROJECT_DIR$/minote.iml" filepath="$PROJECT_DIR$/minote.iml" /> <module fileurl="file://$PROJECT_DIR$/.idea/modules/gitProject.iml" filepath="$PROJECT_DIR$/.idea/modules/gitProject.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/modules/app/minote.app.iml" filepath="$PROJECT_DIR$/.idea/modules/app/minote.app.iml" /> <module fileurl="file://$PROJECT_DIR$/.idea/modules/app/gitProject.app.iml" filepath="$PROJECT_DIR$/.idea/modules/app/gitProject.app.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/modules/app/minote.app.androidTest.iml" filepath="$PROJECT_DIR$/.idea/modules/app/minote.app.androidTest.iml" /> <module fileurl="file://$PROJECT_DIR$/.idea/modules/app/gitProject.app.androidTest.iml" filepath="$PROJECT_DIR$/.idea/modules/app/gitProject.app.androidTest.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/modules/app/minote.app.main.iml" filepath="$PROJECT_DIR$/.idea/modules/app/minote.app.main.iml" /> <module fileurl="file://$PROJECT_DIR$/.idea/modules/app/gitProject.app.main.iml" filepath="$PROJECT_DIR$/.idea/modules/app/gitProject.app.main.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/modules/app/minote.app.unitTest.iml" filepath="$PROJECT_DIR$/.idea/modules/app/minote.app.unitTest.iml" /> <module fileurl="file://$PROJECT_DIR$/.idea/modules/app/gitProject.app.unitTest.iml" filepath="$PROJECT_DIR$/.idea/modules/app/gitProject.app.unitTest.iml" />
</modules> </modules>
</component> </component>
</project> </project>

@ -39,29 +39,60 @@ public class MetaData extends Task {
setNotes(metaInfo.toString()); setNotes(metaInfo.toString());
setName(GTaskStringUtils.META_NOTE_NAME); setName(GTaskStringUtils.META_NOTE_NAME);
} }
/*
MetaData Task
Meta Data mRelatedGid null
setMeta getRelatedGid
setMeta gid JSON metaInfo
metaInfo GTaskStringUtils.META_HEAD_GTASK_ID gid
使 setNotes metaInfo GTaskStringUtils.META_NOTE_NAME
getRelatedGid mRelatedGid
*/
public String getRelatedGid() { public String getRelatedGid() {
return mRelatedGid; return mRelatedGid;
} }
/*getRelatedGid()
MetaData mRelatedGid gid
*/
@Override @Override
public boolean isWorthSaving() { public boolean isWorthSaving() {
return getNotes() != null; return getNotes() != null;
} }
/*isWorthSaving() Task
null true
false
*/
@Override @Override
public void setContentByRemoteJSON(JSONObject js) { public void setContentByRemoteJSON(JSONObject js) {// 调用父类的方法来设置 JSON 内容
super.setContentByRemoteJSON(js); super.setContentByRemoteJSON(js);// 检查是否存在与对象相关联的注释notes
if (getNotes() != null) { if (getNotes() != null) {
try { try {
// 将注释内容解析为 JSON 对象
JSONObject metaInfo = new JSONObject(getNotes().trim()); JSONObject metaInfo = new JSONObject(getNotes().trim());
// 从 JSON 对象中提取 GTASK_ID 字段的值,并将其存储在 mRelatedGid 变量中
mRelatedGid = metaInfo.getString(GTaskStringUtils.META_HEAD_GTASK_ID); mRelatedGid = metaInfo.getString(GTaskStringUtils.META_HEAD_GTASK_ID);
} catch (JSONException e) { } catch (JSONException e) {
///如果在解析注释时出现异常,则将 mRelatedGid 变量设置为 null并记录一个警告日志
Log.w(TAG, "failed to get related gid"); Log.w(TAG, "failed to get related gid");
mRelatedGid = null; mRelatedGid = null;
} }
} }
} }
/* MetaData isWorthSaving setContentByRemoteJSON
isWorthSaving Task
null true false
setContentByRemoteJSON Task
JSONObject js Task setContentByRemoteJSON
null
null JSONObject metaInfo metaInfo GTaskStringUtils.META_HEAD_GTASK_ID
mRelatedGid metaInfo mRelatedGid null*/
@Override @Override
public void setContentByLocalJSON(JSONObject js) { public void setContentByLocalJSON(JSONObject js) {
@ -80,3 +111,12 @@ public class MetaData extends Task {
} }
} }
/*override Task MetaData 使
setContentByLocalJSON IllegalAccessError
getLocalJSONFromContent IllegalAccessError
getSyncAction IllegalAccessError
*/

@ -46,14 +46,50 @@ public abstract class Node {
private long mLastModified; private long mLastModified;
private boolean mDeleted; private boolean mDeleted;
/* Node
mGid gid gid
mName
mLastModified
mDeletedtrue false
SYNC_ACTION_*使
SYNC_ACTION_NONE
SYNC_ACTION_ADD_REMOTE
SYNC_ACTION_ADD_LOCAL
SYNC_ACTION_DEL_REMOTE
SYNC_ACTION_DEL_LOCAL
SYNC_ACTION_UPDATE_REMOTE
SYNC_ACTION_UPDATE_LOCAL
SYNC_ACTION_UPDATE_CONFLICT
SYNC_ACTION_ERROR
Node Node Node */
public Node() { public Node() {
mGid = null; mGid = null;
mName = ""; mName = "";
mLastModified = 0; mLastModified = 0;
mDeleted = false; mDeleted = false;
} }
/* Node mGidmNamemLastModified mDeleted
mGid null
mName
mLastModified 0 0
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);
@ -65,23 +101,52 @@ public abstract class Node {
public abstract JSONObject getLocalJSONFromContent(); public abstract JSONObject getLocalJSONFromContent();
public abstract int getSyncAction(Cursor c); public abstract int getSyncAction(Cursor c);
/* Node
getCreateAction(int actionId) JSON actionId JSON
getUpdateAction(int actionId) JSON getCreateAction actionId
setContentByRemoteJSON(JSONObject js) JSON
setContentByLocalJSON(JSONObject js) JSON
getLocalJSONFromContent() JSON
getSyncAction(Cursor c)
使 Node */
public void setGid(String gid) { public void setGid(String gid) {
this.mGid = gid; this.mGid = gid;
} }
/* Node setGid gid
String gid
gid mGid 便使
gid
*/
public void setName(String name) { public void setName(String name) {
this.mName = name; this.mName = name;
} }
/* Node mName
name mName
this
*/
public void setLastModified(long lastModified) { public void setLastModified(long lastModified) {
this.mLastModified = lastModified; this.mLastModified = lastModified;
} }
/*setLastModifiedlonglastModified
this
lastModifiedmLastModified便getter
*/
public void setDeleted(boolean deleted) { public void setDeleted(boolean deleted) {
this.mDeleted = deleted; this.mDeleted = deleted;
} }
/*JavasetDeletedbooleandeleted
this
deletedmDeleted便getter
deletedtruedeletedfalse
*/
public String getGid() { public String getGid() {
return this.mGid; return this.mGid;
} }
@ -89,13 +154,30 @@ public abstract class Node {
public String getName() { public String getName() {
return this.mName; return this.mName;
} }
/*JavagetGidgetNamemGidmNameID
this
getGidID便使ID
getName
*/
public long getLastModified() { public long getLastModified() {
return this.mLastModified; return this.mLastModified;
} }
/*JavagetLastModifiedmLastModified
this
便使
getLastModified便使
*/
public boolean getDeleted() { public boolean getDeleted() {
return this.mDeleted; return this.mDeleted;
} }
/*JavagetDeletedmDeleted
this
便使
getDeletedboolean
truefalse
*/
} }

@ -44,7 +44,15 @@ public class SqlData {
DataColumns.ID, DataColumns.MIME_TYPE, DataColumns.CONTENT, DataColumns.DATA1, DataColumns.ID, DataColumns.MIME_TYPE, DataColumns.CONTENT, DataColumns.DATA1,
DataColumns.DATA3 DataColumns.DATA3
}; };
/*JavaSqlData
TAGSqlData
INVALID_IDID-99999
PROJECTION_DATADataColumnsIDMIME_TYPECONTENTDATA1DATA3
访使*/
public static final int DATA_ID_COLUMN = 0; public static final int DATA_ID_COLUMN = 0;
public static final int DATA_MIME_TYPE_COLUMN = 1; public static final int DATA_MIME_TYPE_COLUMN = 1;
@ -70,66 +78,96 @@ public class SqlData {
private String mDataContentData3; private String mDataContentData3;
private ContentValues mDiffDataValues; private ContentValues mDiffDataValues;
/*JavaSqlData
DATA_ID_COLUMNID
DATA_MIME_TYPE_COLUMNMIME
DATA_CONTENT_COLUMN
DATA_CONTENT_DATA_1_COLUMNDATA1
DATA_CONTENT_DATA_3_COLUMNDATA3
ContentResolvermContentResolverbooleanmIsCreatelongmDataIdStringmDataMimeTypeStringmDataContentlongmDataContentData1StringmDataContentData3ContentValuesmDiffDataValues
ContentValuesAndroidmDiffDataValues*/
// 构造函数用于初始化一个SqlData对象的实例
public SqlData(Context context) { public SqlData(Context context) {
mContentResolver = context.getContentResolver(); mContentResolver = context.getContentResolver();// 获取ContentResolver对象用于访问ContentProvider中的数据
mIsCreate = true; mIsCreate = true;// 初始化数据的创建状态
mDataId = INVALID_ID; mDataId = INVALID_ID; // 初始化数据的ID值
mDataMimeType = DataConstants.NOTE; mDataMimeType = DataConstants.NOTE;// 初始化数据的MIME类型为NOTE
mDataContent = ""; mDataContent = ""; // 初始化数据的内容为空字符串
mDataContentData1 = 0; mDataContentData1 = 0; // 初始化数据的数据内容Data1为0
mDataContentData3 = ""; mDataContentData3 = "";// 初始化数据的数据内容Data3为空字符串
mDiffDataValues = new ContentValues(); mDiffDataValues = new ContentValues();// 初始化差异数据的ContentValues对象用于保存数据的不同之处
} }
// 定义SqlData类该类用于处理数据库中的数据
public SqlData(Context context, Cursor c) { public SqlData(Context context, Cursor c) {
// 获取ContentResolver对象
mContentResolver = context.getContentResolver(); mContentResolver = context.getContentResolver();
// 设置初始状态为非创建状态
mIsCreate = false; mIsCreate = false;
// 从Cursor对象中读取数据并将数据加载到
loadFromCursor(c); loadFromCursor(c);
// 创建一个新的ContentValues对象用于存储数据的差异
mDiffDataValues = new ContentValues(); mDiffDataValues = new ContentValues();
} }
/*该构造函数主要是用于初始化SqlData对象并且在初始化过程中从Cursor对象中读取数据同时创建一个新的ContentValues对象以备后续存储数据的差异。*/
/*定义了一个私有方法loadFromCursor该方法接收一个Cursor对象作为参数并且在该方法中从Cursor对象中读取数据将这些数据加载到SqlData对象中。*/
// 从Cursor对象中读取数据并将数据加载到SqlData对象中
private void loadFromCursor(Cursor c) { private void loadFromCursor(Cursor c) {
// 从Cursor对象中读取数据id
mDataId = c.getLong(DATA_ID_COLUMN); mDataId = c.getLong(DATA_ID_COLUMN);
// 从Cursor对象中读取数据类型
mDataMimeType = c.getString(DATA_MIME_TYPE_COLUMN); mDataMimeType = c.getString(DATA_MIME_TYPE_COLUMN);
// 从Cursor对象中读取数据内容
mDataContent = c.getString(DATA_CONTENT_COLUMN); mDataContent = c.getString(DATA_CONTENT_COLUMN);
// 从Cursor对象中读取数据内容的第一个数据项
mDataContentData1 = c.getLong(DATA_CONTENT_DATA_1_COLUMN); mDataContentData1 = c.getLong(DATA_CONTENT_DATA_1_COLUMN);
// 从Cursor对象中读取数据内容的第三个数据项
mDataContentData3 = c.getString(DATA_CONTENT_DATA_3_COLUMN); mDataContentData3 = c.getString(DATA_CONTENT_DATA_3_COLUMN);
} }
/*该方法主要是用于从Cursor对象中读取数据并将这些数据加载到SqlData对象的相关成员变量中。其中数据的读取顺序和类型需要与Cursor对象中的列名一一对应。*/
public void setContent(JSONObject js) throws JSONException { public void setContent(JSONObject js) throws JSONException {// 设置SqlData对象的内容
long dataId = js.has(DataColumns.ID) ? js.getLong(DataColumns.ID) : INVALID_ID; long dataId = js.has(DataColumns.ID) ? js.getLong(DataColumns.ID) : INVALID_ID;// 从JSONObject对象中获取数据id
if (mIsCreate || mDataId != dataId) { if (mIsCreate || mDataId != dataId) {
mDiffDataValues.put(DataColumns.ID, dataId); mDiffDataValues.put(DataColumns.ID, dataId);
} }
mDataId = dataId; mDataId = dataId; // 如果当前SqlData对象是创建状态或者数据id与当前对象的数据id不同将数据id加入到差异数据值对象中
//setContent方法的主要部分用于设置SqlData对象的各个成员变量值并且在设置过程中检查差异数据。
String dataMimeType = js.has(DataColumns.MIME_TYPE) ? js.getString(DataColumns.MIME_TYPE) String dataMimeType = js.has(DataColumns.MIME_TYPE) ? js.getString(DataColumns.MIME_TYPE)
: DataConstants.NOTE; : DataConstants.NOTE;
if (mIsCreate || !mDataMimeType.equals(dataMimeType)) { if (mIsCreate || !mDataMimeType.equals(dataMimeType)) {
mDiffDataValues.put(DataColumns.MIME_TYPE, dataMimeType); mDiffDataValues.put(DataColumns.MIME_TYPE, dataMimeType);
} }
mDataMimeType = dataMimeType; mDataMimeType = dataMimeType;
// 从JSONObject对象中获取数据类型并将其设置为SqlData对象的数据类型
String dataContent = js.has(DataColumns.CONTENT) ? js.getString(DataColumns.CONTENT) : ""; String dataContent = js.has(DataColumns.CONTENT) ? js.getString(DataColumns.CONTENT) : "";
if (mIsCreate || !mDataContent.equals(dataContent)) { if (mIsCreate || !mDataContent.equals(dataContent)) {
mDiffDataValues.put(DataColumns.CONTENT, dataContent); mDiffDataValues.put(DataColumns.CONTENT, dataContent);
} }
mDataContent = dataContent; mDataContent = dataContent;
// 从JSONObject对象中获取数据内容的第一个数据项并将其设置为SqlData对象的数据内容的第一个数据项
long dataContentData1 = js.has(DataColumns.DATA1) ? js.getLong(DataColumns.DATA1) : 0; long dataContentData1 = js.has(DataColumns.DATA1) ? js.getLong(DataColumns.DATA1) : 0;
if (mIsCreate || mDataContentData1 != dataContentData1) { if (mIsCreate || mDataContentData1 != dataContentData1) {
mDiffDataValues.put(DataColumns.DATA1, dataContentData1); mDiffDataValues.put(DataColumns.DATA1, dataContentData1);
} }
mDataContentData1 = dataContentData1; mDataContentData1 = dataContentData1;
// 从JSONObject对象中获取数据内容的第三个数据项并将其设置为SqlData对象的数据内容的第三个数据项
String dataContentData3 = js.has(DataColumns.DATA3) ? js.getString(DataColumns.DATA3) : ""; String dataContentData3 = js.has(DataColumns.DATA3) ? js.getString(DataColumns.DATA3) : "";
if (mIsCreate || !mDataContentData3.equals(dataContentData3)) { if (mIsCreate || !mDataContentData3.equals(dataContentData3)) {
mDiffDataValues.put(DataColumns.DATA3, dataContentData3); mDiffDataValues.put(DataColumns.DATA3, dataContentData3);
} }
mDataContentData3 = dataContentData3; mDataContentData3 = dataContentData3;
} }
/*JSONObjectSqlData
SqlDataJSONObject
*/
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");
@ -143,6 +181,11 @@ public class SqlData {
js.put(DataColumns.DATA3, mDataContentData3); js.put(DataColumns.DATA3, mDataContentData3);
return js; return js;
} }
/*getContent()JSONObject
JSONException
mIsCreate boolean true nullJSONObjectmDataIdmDataMimeTypemDataContentmDataContentData1mDataContentData3
JSONObject*/
public void commit(long noteId, boolean validateVersion, long version) { public void commit(long noteId, boolean validateVersion, long version) {
@ -182,8 +225,21 @@ public class SqlData {
mDiffDataValues.clear(); mDiffDataValues.clear();
mIsCreate = false; mIsCreate = false;
} }
/*commit()
noteId long ID;
validateVersion boolean ;
version long
mIsCreatebooleantrue
mDiffDataValues DataColumns.ID
DataColumns.NOTE_ID noteIdmDiffDataValuesNotes.CONTENT_DATA_URIUriUri ID mDataId
ID ActionFailureException
mIsCreate false
mDiffDataValuesmContentResolver.update()
validateVersion falseNoteColumns.VERSIONversionNoteColumns.IDnoteId
mDiffDataValuesmIsCreate false*/
public long getId() { public long getId() {
return mDataId; return mDataId;
} }//定义了一个名为getId()的方法返回一个long类型的值表示当前笔记的ID。
//直接返回成员变量mDataId因此不会引发任何异常。
} }
6

@ -2,6 +2,7 @@
# as it contains information specific to your local configuration. # as it contains information specific to your local configuration.
# #
# Location of the SDK. This is only used by Gradle. # Location of the SDK. This is only used by Gradle.
# # For customization when using a Version Control System, please read the
#Fri Apr 07 12:55:13 CST 2023 # header note.
sdk.dir=D\:\\Androidsdk #Fri Apr 07 14:41:10 CST 2023
sdk.dir=D\:\\SDK

Loading…
Cancel
Save