From 8e9cd76d4ae47d96eaacd454e7f5d649468e53f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=91=9E?= <2406600767.@qq.com> Date: Mon, 2 Dec 2024 17:57:29 +0800 Subject: [PATCH 01/12] 123 --- text1.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 text1.txt diff --git a/text1.txt b/text1.txt new file mode 100644 index 0000000..ab7ef0a --- /dev/null +++ b/text1.txt @@ -0,0 +1 @@ +小米 \ No newline at end of file -- 2.34.1 From f9c268920309a75ad57af0c5520479844fec6631 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=91=9E?= <2406600767.@qq.com> Date: Tue, 3 Dec 2024 23:39:34 +0800 Subject: [PATCH 02/12] 111 --- gtask.txt | 649 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ text1.txt | 1 - 2 files changed, 649 insertions(+), 1 deletion(-) create mode 100644 gtask.txt delete mode 100644 text1.txt diff --git a/gtask.txt b/gtask.txt new file mode 100644 index 0000000..038560d --- /dev/null +++ b/gtask.txt @@ -0,0 +1,649 @@ +//gtask-data +1、MetaData.java +package net.micode.notes.gtask.data; + +public class MetaData extends Task { + /* + * 功能描述:得到类的简写名称存入字符串TAG中 + * 实现过程:调用getSimpleName ()函数 + */ + private final static String TAG = MetaData.class.getSimpleName(); + private String mRelatedGid = null; + /* + * 功能描述:设置数据,即生成元数据库 + * 实现过程:调用JSONObject库函数put (),Task类中的setNotes ()和setName ()函数 + * 参数注解: + */ + public void setMeta(String gid, JSONObject metaInfo) + { + //对函数块进行注释 + try { + metaInfo.put(GTaskStringUtils.META_HEAD_GTASK_ID, gid); + /* + * 将这对键值放入metaInfo这个jsonobject对象中 + */ + } catch (JSONException e) { + Log.e(TAG, "failed to put related gid"); + /* + * 输出错误信息 + */ + } + setNotes(metaInfo.toString()); + setName(GTaskStringUtils.META_NOTE_NAME); + } + /* + * 功能描述:获取相关联的Gid + */ + public String getRelatedGid() { + return mRelatedGid; + } + /* + * 功能描述:判断当前数据是否为空,若为空则返回真即值得保存 + * Made By CuiCan + */ + @Override + public boolean isWorthSaving() { + return getNotes() != null; + } + /* + * 功能描述:使用远程json数据对象设置元数据内容 + * 实现过程:调用父类Task中的setContentByRemoteJSON ()函数,并 + * 参数注解: + */ + @Override + public void setContentByRemoteJSON(JSONObject js) { + 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; + } + } + } + /* + * 功能描述:使用本地json数据对象设置元数据内容,一般不会用到,若用到,则抛出异常 + * Made By CuiCan + */ + @Override + public void setContentByLocalJSON(JSONObject js) { + // this function should not be called + throw new IllegalAccessError("MetaData:setContentByLocalJSON should not be called"); + /* + * 传递非法参数异常 + */ + } + /* + * 功能描述:从元数据内容中获取本地json对象,一般不会用到,若用到,则抛出异常 + * Made By CuiCan + */ + @Override + public JSONObject getLocalJSONFromContent() { + throw new IllegalAccessError("MetaData:getLocalJSONFromContent should not be called"); + /* + * 传递非法参数异常 + * Made By Cui Can + */ + } + /* + * 功能描述:获取同步动作状态,一般不会用到,若用到,则抛出异常 + * Made By CuiCan + */ + @Override + public int getSyncAction(Cursor c) { + throw new IllegalAccessError("MetaData:getSyncAction should not be called"); + /* + * 传递非法参数异常 + * Made By Cui Can + */ + } + +} +1、Node.java +package net.micode.notes.gtask.data; + +import android.database.Cursor; + +import org.json.JSONObject; + +/** + * 应该是同步操作的基础数据类型,定义了相关指示同步操作的常量 + * 关键字:abstract + */ +public abstract class Node { + //定义了各种用于表征同步状态的常量 + public static final int SYNC_ACTION_NONE = 0;// 本地和云端都无可更新内容(即本地和云端内容一致) + + public static final int SYNC_ACTION_ADD_REMOTE = 1;// 需要在远程云端增加内容 + + 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_LOCAL = 4;// 需要在本地删除内容 + + 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_CONFLICT = 7;// 同步出现冲突 + + public static final int SYNC_ACTION_ERROR = 8;// 同步出现错误 + + private String mGid; + + private String mName; + + private long mLastModified;//记录最后一次修改时间 + + private boolean mDeleted;//表征是否被删除 + + public Node() { + mGid = null; + mName = ""; + mLastModified = 0; + mDeleted = false; + } + + public abstract JSONObject getCreateAction(int actionId); + + public abstract JSONObject getUpdateAction(int actionId); + + public abstract void setContentByRemoteJSON(JSONObject js); + + public abstract void setContentByLocalJSON(JSONObject js); + + public abstract JSONObject getLocalJSONFromContent(); + + public abstract int getSyncAction(Cursor c); + + public void setGid(String gid) { + this.mGid = gid; + } + + public void setName(String name) { + this.mName = name; + } + + public void setLastModified(long lastModified) { + this.mLastModified = lastModified; + } + + public void setDeleted(boolean deleted) { + this.mDeleted = deleted; + } + + public String getGid() { + return this.mGid; + } + + public String getName() { + return this.mName; + } + + public long getLastModified() { + return this.mLastModified; + } + + public boolean getDeleted() { + return this.mDeleted; + } + +} +2、SqlData.java +/* + * Description:用于支持小米便签最底层的数据库相关操作,和sqlnote的关系上是子集关系,即data是note的子集(节点)。 + * SqlData其实就是也就是所谓数据中的数据 + */ + +package net.micode.notes.gtask.data; +/* + * 功能描述: + * 实现过程: + * 参数注解: + * Made By CuiCan + */ + +public class SqlData { + /* + * 功能描述:得到类的简写名称存入字符串TAG中 + * 实现过程:调用getSimpleName ()函数 + * Made By CuiCan + */ + private static final String TAG = SqlData.class.getSimpleName(); + +private static final int INVALID_ID = -99999; +=为mDataId置初始值-99999 + + + /** + * 来自Notes类中定义的DataColumn中的一些常量 + */ + + // 集合了interface DataColumns中所有SF常量 + public static final String[] PROJECTION_DATA = new String[] { + DataColumns.ID, DataColumns.MIME_TYPE, DataColumns.CONTENT, DataColumns.DATA1, + DataColumns.DATA3 + }; + + /** + * 以下五个变量作为sql表中5列的编号 + */ + public static final int DATA_ID_COLUMN = 0; + + public static final int DATA_MIME_TYPE_COLUMN = 1; + + 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_3_COLUMN = 4; + + private ContentResolver mContentResolver; + //判断是否直接用Content生成,是为true,否则为false + private boolean mIsCreate; + + private long mDataId; + + private String mDataMimeType; + + private String mDataContent; + + private long mDataContentData1; + + private String mDataContentData3; + + private ContentValues mDiffDataValues; + + /* + * 功能描述:构造函数,用于初始化数据 + * 参数注解:mContentResolver用于获取ContentProvider提供的数据 + * 参数注解: mIsCreate表征当前数据是用哪种方式创建(两种构造函数的参数不同) + * 参数注解: + * Made By CuiCan + */ + public SqlData(Context context) { + mContentResolver = context.getContentResolver(); + mIsCreate = true; + mDataId = INVALID_ID;//mDataId置初始值-99999 + mDataMimeType = DataConstants.NOTE; + mDataContent = ""; + mDataContentData1 = 0; + mDataContentData3 = ""; + mDiffDataValues = new ContentValues(); + } + + + /* + * 功能描述:构造函数,初始化数据 + * 参数注解:mContentResolver用于获取ContentProvider提供的数据 + * 参数注解: mIsCreate表征当前数据是用哪种方式创建(两种构造函数的参数不同) + * 参数注解: + * Made By CuiCan + */ + public SqlData(Context context, Cursor c) { + mContentResolver = context.getContentResolver(); + mIsCreate = false; + loadFromCursor(c); + mDiffDataValues = new ContentValues(); + } + + /* + * 功能描述:从光标处加载数据 + * 从当前的光标处将五列的数据加载到该类的对象 + * Made By CuiCan + */ + private void loadFromCursor(Cursor c) { + mDataId = c.getLong(DATA_ID_COLUMN); + mDataMimeType = c.getString(DATA_MIME_TYPE_COLUMN); + mDataContent = c.getString(DATA_CONTENT_COLUMN); + mDataContentData1 = c.getLong(DATA_CONTENT_DATA_1_COLUMN); + mDataContentData3 = c.getString(DATA_CONTENT_DATA_3_COLUMN); + } + + + /* + * 功能描述:设置用于共享的数据,并提供异常抛出与处理机制 + * 参数注解: + * Made By CuiCan + */ + public void setContent(JSONObject js) throws JSONException { + //如果传入的JSONObject对象中有DataColumns.ID这一项,则设置,否则设为INVALID_ID + long dataId = js.has(DataColumns.ID) ? js.getLong(DataColumns.ID) : INVALID_ID; + if (mIsCreate || mDataId != dataId) { + mDiffDataValues.put(DataColumns.ID, dataId); + } + mDataId = dataId; + + String dataMimeType = js.has(DataColumns.MIME_TYPE) ? js.getString(DataColumns.MIME_TYPE) + : DataConstants.NOTE; + if (mIsCreate || !mDataMimeType.equals(dataMimeType)) { + mDiffDataValues.put(DataColumns.MIME_TYPE, dataMimeType); + } + mDataMimeType = dataMimeType; + + String dataContent = js.has(DataColumns.CONTENT) ? js.getString(DataColumns.CONTENT) : ""; + if (mIsCreate || !mDataContent.equals(dataContent)) { + mDiffDataValues.put(DataColumns.CONTENT, dataContent); + } + mDataContent = dataContent; + + long dataContentData1 = js.has(DataColumns.DATA1) ? js.getLong(DataColumns.DATA1) : 0; + if (mIsCreate || mDataContentData1 != dataContentData1) { + mDiffDataValues.put(DataColumns.DATA1, dataContentData1); + } + mDataContentData1 = dataContentData1; + + String dataContentData3 = js.has(DataColumns.DATA3) ? js.getString(DataColumns.DATA3) : ""; + if (mIsCreate || !mDataContentData3.equals(dataContentData3)) { + mDiffDataValues.put(DataColumns.DATA3, dataContentData3); + } + mDataContentData3 = dataContentData3; + } + + + /* + * 功能描述:获取共享的数据内容,并提供异常抛出与处理机制 + * 参数注解: + * Made By CuiCan + */ + public JSONObject getContent() throws JSONException { + if (mIsCreate) { + Log.e(TAG, "it seems that we haven't created this in database yet"); + return null; + } + //创建JSONObject对象。并将相关数据放入其中,并返回。 + JSONObject js = new JSONObject(); + js.put(DataColumns.ID, mDataId); + js.put(DataColumns.MIME_TYPE, mDataMimeType); + js.put(DataColumns.CONTENT, mDataContent); + js.put(DataColumns.DATA1, mDataContentData1); + js.put(DataColumns.DATA3, mDataContentData3); + return js; + } + + /* + * 功能描述:commit函数用于把当前造作所做的修改保存到数据库 + * 参数注解: + * Made By CuiCan + */ + public void commit(long noteId, boolean validateVersion, long version) { + + if (mIsCreate) { + if (mDataId == INVALID_ID && mDiffDataValues.containsKey(DataColumns.ID)) { + mDiffDataValues.remove(DataColumns.ID); + } + + mDiffDataValues.put(DataColumns.NOTE_ID, noteId); + Uri uri = mContentResolver.insert(Notes.CONTENT_DATA_URI, mDiffDataValues); + try { + mDataId = Long.valueOf(uri.getPathSegments().get(1)); + } catch (NumberFormatException e) { + Log.e(TAG, "Get note id error :" + e.toString()); + throw new ActionFailureException("create note failed"); + } + } else { + if (mDiffDataValues.size() > 0) { + int result = 0; + if (!validateVersion) { + result = mContentResolver.update(ContentUris.withAppendedId( + Notes.CONTENT_DATA_URI, mDataId), mDiffDataValues, null, null); + } else { + result = mContentResolver.update(ContentUris.withAppendedId( + Notes.CONTENT_DATA_URI, mDataId), mDiffDataValues, + " ? in (SELECT " + NoteColumns.ID + " FROM " + TABLE.NOTE + + " WHERE " + NoteColumns.VERSION + "=?)", new String[] { + String.valueOf(noteId), String.valueOf(version) + }); + } + if (result == 0) { + Log.w(TAG, "there is no update. maybe user updates note when syncing"); + } + } + } + + mDiffDataValues.clear(); + mIsCreate = false; + } + + /* + * 功能描述:获取当前id + * 实现过程: + * 参数注解: + * Made By CuiCan + */ + public long getId() { + return mDataId; + } +} +3、SqlNote.java +/* + * Description:用于支持小米便签最底层的数据库相关操作,和sqlnote的关系上是子集关系,即data是note的子集(节点)。 + * SqlData其实就是也就是所谓数据中的数据 + */ + +package net.micode.notes.gtask.data; +/* + * 功能描述: + * 实现过程: + * 参数注解: + * Made By CuiCan + */ + +public class SqlData { + /* + * 功能描述:得到类的简写名称存入字符串TAG中 + * 实现过程:调用getSimpleName ()函数 + * Made By CuiCan + */ + private static final String TAG = SqlData.class.getSimpleName(); + + private static final int INVALID_ID = -99999;//为mDataId置初始值-99999 + + + /** + * 来自Notes类中定义的DataColumn中的一些常量 + */ + + // 集合了interface DataColumns中所有SF常量 + public static final String[] PROJECTION_DATA = new String[] { + DataColumns.ID, DataColumns.MIME_TYPE, DataColumns.CONTENT, DataColumns.DATA1, + DataColumns.DATA3 + }; + + /** + * 以下五个变量作为sql表中5列的编号 + */ + public static final int DATA_ID_COLUMN = 0; + + public static final int DATA_MIME_TYPE_COLUMN = 1; + + 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_3_COLUMN = 4; + + private ContentResolver mContentResolver; + //判断是否直接用Content生成,是为true,否则为false + private boolean mIsCreate; + + private long mDataId; + + private String mDataMimeType; + + private String mDataContent; + + private long mDataContentData1; + + private String mDataContentData3; + + private ContentValues mDiffDataValues; + + /* + * 功能描述:构造函数,用于初始化数据 + * 参数注解:mContentResolver用于获取ContentProvider提供的数据 + * 参数注解: mIsCreate表征当前数据是用哪种方式创建(两种构造函数的参数不同) + * 参数注解: + * Made By CuiCan + */ + public SqlData(Context context) { + mContentResolver = context.getContentResolver(); + mIsCreate = true; + mDataId = INVALID_ID;//mDataId置初始值-99999 + mDataMimeType = DataConstants.NOTE; + mDataContent = ""; + mDataContentData1 = 0; + mDataContentData3 = ""; + mDiffDataValues = new ContentValues(); + } + + + /* + * 功能描述:构造函数,初始化数据 + * 参数注解:mContentResolver用于获取ContentProvider提供的数据 + * 参数注解: mIsCreate表征当前数据是用哪种方式创建(两种构造函数的参数不同) + * 参数注解: + * Made By CuiCan + */ + public SqlData(Context context, Cursor c) { + mContentResolver = context.getContentResolver(); + mIsCreate = false; + loadFromCursor(c); + mDiffDataValues = new ContentValues(); + } + + /* + * 功能描述:从光标处加载数据 + * 从当前的光标处将五列的数据加载到该类的对象 + * Made By CuiCan + */ + private void loadFromCursor(Cursor c) { + mDataId = c.getLong(DATA_ID_COLUMN); + mDataMimeType = c.getString(DATA_MIME_TYPE_COLUMN); + mDataContent = c.getString(DATA_CONTENT_COLUMN); + mDataContentData1 = c.getLong(DATA_CONTENT_DATA_1_COLUMN); + mDataContentData3 = c.getString(DATA_CONTENT_DATA_3_COLUMN); + } + + + /* + * 功能描述:设置用于共享的数据,并提供异常抛出与处理机制 + * 参数注解: + * Made By CuiCan + */ + public void setContent(JSONObject js) throws JSONException { + //如果传入的JSONObject对象中有DataColumns.ID这一项,则设置,否则设为INVALID_ID + long dataId = js.has(DataColumns.ID) ? js.getLong(DataColumns.ID) : INVALID_ID; + if (mIsCreate || mDataId != dataId) { + mDiffDataValues.put(DataColumns.ID, dataId); + } + mDataId = dataId; + + String dataMimeType = js.has(DataColumns.MIME_TYPE) ? js.getString(DataColumns.MIME_TYPE) + : DataConstants.NOTE; + if (mIsCreate || !mDataMimeType.equals(dataMimeType)) { + mDiffDataValues.put(DataColumns.MIME_TYPE, dataMimeType); + } + mDataMimeType = dataMimeType; + + String dataContent = js.has(DataColumns.CONTENT) ? js.getString(DataColumns.CONTENT) : ""; + if (mIsCreate || !mDataContent.equals(dataContent)) { + mDiffDataValues.put(DataColumns.CONTENT, dataContent); + } + mDataContent = dataContent; + + long dataContentData1 = js.has(DataColumns.DATA1) ? js.getLong(DataColumns.DATA1) : 0; + if (mIsCreate || mDataContentData1 != dataContentData1) { + mDiffDataValues.put(DataColumns.DATA1, dataContentData1); + } + mDataContentData1 = dataContentData1; + + String dataContentData3 = js.has(DataColumns.DATA3) ? js.getString(DataColumns.DATA3) : ""; + if (mIsCreate || !mDataContentData3.equals(dataContentData3)) { + mDiffDataValues.put(DataColumns.DATA3, dataContentData3); + } + mDataContentData3 = dataContentData3; + } + + + /* + * 功能描述:获取共享的数据内容,并提供异常抛出与处理机制 + * 参数注解: + * Made By CuiCan + */ + public JSONObject getContent() throws JSONException { + if (mIsCreate) { + Log.e(TAG, "it seems that we haven't created this in database yet"); + return null; + } + //创建JSONObject对象。并将相关数据放入其中,并返回。 + JSONObject js = new JSONObject(); + js.put(DataColumns.ID, mDataId); + js.put(DataColumns.MIME_TYPE, mDataMimeType); + js.put(DataColumns.CONTENT, mDataContent); + js.put(DataColumns.DATA1, mDataContentData1); + js.put(DataColumns.DATA3, mDataContentData3); + return js; + } + + /* + * 功能描述:commit函数用于把当前造作所做的修改保存到数据库 + * 参数注解: + * Made By CuiCan + */ + public void commit(long noteId, boolean validateVersion, long version) { + + if (mIsCreate) { + if (mDataId == INVALID_ID && mDiffDataValues.containsKey(DataColumns.ID)) { + mDiffDataValues.remove(DataColumns.ID); + } + + mDiffDataValues.put(DataColumns.NOTE_ID, noteId); + Uri uri = mContentResolver.insert(Notes.CONTENT_DATA_URI, mDiffDataValues); + try { + mDataId = Long.valueOf(uri.getPathSegments().get(1)); + } catch (NumberFormatException e) { + Log.e(TAG, "Get note id error :" + e.toString()); + throw new ActionFailureException("create note failed"); + } + } else { + if (mDiffDataValues.size() > 0) { + int result = 0; + if (!validateVersion) { + result = mContentResolver.update(ContentUris.withAppendedId( + Notes.CONTENT_DATA_URI, mDataId), mDiffDataValues, null, null); + } else { + result = mContentResolver.update(ContentUris.withAppendedId( + Notes.CONTENT_DATA_URI, mDataId), mDiffDataValues, + " ? in (SELECT " + NoteColumns.ID + " FROM " + TABLE.NOTE + + " WHERE " + NoteColumns.VERSION + "=?)", new String[] { + String.valueOf(noteId), String.valueOf(version) + }); + } + if (result == 0) { + Log.w(TAG, "there is no update. maybe user updates note when syncing"); + } + } + } + + mDiffDataValues.clear(); + mIsCreate = false; + } + + /* + * 功能描述:获取当前id + * 实现过程: + * 参数注解: + * Made By CuiCan + */ + public long getId() { + return mDataId; + + } +} \ No newline at end of file diff --git a/text1.txt b/text1.txt deleted file mode 100644 index ab7ef0a..0000000 --- a/text1.txt +++ /dev/null @@ -1 +0,0 @@ -小米 \ No newline at end of file -- 2.34.1 From 328080e2f743f53e8b0ff6fb9ac58caa9edbb4db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=91=9E?= <2406600767.@qq.com> Date: Tue, 3 Dec 2024 23:45:15 +0800 Subject: [PATCH 03/12] 111 --- gtask.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gtask.txt b/gtask.txt index 038560d..3544323 100644 --- a/gtask.txt +++ b/gtask.txt @@ -1,4 +1,4 @@ -//gtask-data +/*gtask-data*/ 1、MetaData.java package net.micode.notes.gtask.data; -- 2.34.1 From 4e5db5c6d2b8ccfc433a236ce8a27db145d9c184 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=91=9E?= <2406600767.@qq.com> Date: Thu, 26 Dec 2024 22:07:52 +0800 Subject: [PATCH 04/12] 11 --- src/gtask/gtask-data.txt | 1562 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 1562 insertions(+) create mode 100644 src/gtask/gtask-data.txt diff --git a/src/gtask/gtask-data.txt b/src/gtask/gtask-data.txt new file mode 100644 index 0000000..033d5f6 --- /dev/null +++ b/src/gtask/gtask-data.txt @@ -0,0 +1,1562 @@ +1、MetData.java +package net.micode.notes.gtask.data; + +import android.database.Cursor; +import android.util.Log; + +import net.micode.notes.tool.GTaskStringUtils; + +import org.json.JSONException; +import org.json.JSONObject; + +// MetaData类继承自Task类,用于处理与任务相关的元数据 +public class MetaData extends Task { + // 用于日志输出的标签,方便调试时定位问题,值为MetaData类的简单名称 + private final static String TAG = MetaData.class.getSimpleName(); + + // 存储相关的GID(Google Task ID 推测),初始值为null + private String mRelatedGid = null; + + // 设置元数据的方法,接收一个GID和包含元数据信息的JSONObject + public void setMeta(String gid, JSONObject metaInfo) { + try { + // 将传入的GID放入metaInfo这个JSONObject中,对应的键是GTaskStringUtils.META_HEAD_GTASK_ID + metaInfo.put(GTaskStringUtils.META_HEAD_GTASK_ID, gid); + } catch (JSONException e) { + // 如果在放入GID时出现JSON异常,记录错误日志 + Log.e(TAG, "failed to put related gid"); + } + // 将更新后的metaInfo转换为字符串,设置为笔记内容 + setNotes(metaInfo.toString()); + // 设置名称为GTaskStringUtils.META_NOTE_NAME + setName(GTaskStringUtils.META_NOTE_NAME); + } + + // 获取相关GID的方法 + public String getRelatedGid() { + return mRelatedGid; + } + + // 判断该元数据是否值得保存,当笔记内容不为空时返回true + @Override + public boolean isWorthSaving() { + return getNotes()!= null; + } + + // 根据远程JSON数据设置内容,同时提取并设置相关的GID + @Override + public void setContentByRemoteJSON(JSONObject js) { + super.setContentByRemoteJSON(js); + if (getNotes()!= null) { + try { + // 将笔记内容转换为JSONObject,从中获取相关的GID + JSONObject metaInfo = new JSONObject(getNotes().trim()); + mRelatedGid = metaInfo.getString(GTaskStringUtils.META_HEAD_GTASK_ID); + } catch (JSONException e) { + // 如果获取GID时出现JSON异常,记录警告日志,并将mRelatedGid设为null + Log.w(TAG, "failed to get related gid"); + mRelatedGid = null; + } + } + } + + // 这个方法不应被调用,若调用则抛出非法访问错误 + @Override + public void setContentByLocalJSON(JSONObject js) { + throw new IllegalAccessError("MetaData:setContentByLocalJSON should not be called"); + } + + // 这个方法不应被调用,若调用则抛出非法访问错误 + @Override + 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"); + } +} + + +2、Node.java +package net.micode.notes.gtask.data; + +import android.database.Cursor; +import org.json.JSONObject; + +// 定义抽象类Node,作为数据节点的基类,用于构建任务相关的数据结构, +// 它定义了一系列同步操作的常量以及一些通用的数据访问方法和抽象方法 +public abstract class Node { + // 同步操作常量,表示无需同步操作 + public static final int SYNC_ACTION_NONE = 0; + // 同步操作常量,表示添加远程数据 + public static final int SYNC_ACTION_ADD_REMOTE = 1; + // 同步操作常量,表示添加本地数据 + 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_LOCAL = 4; + // 同步操作常量,表示更新远程数据 + 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_CONFLICT = 7; + // 同步操作常量,表示同步过程出现错误 + public static final int SYNC_ACTION_ERROR = 8; + + // 用于存储节点的唯一标识符,可能是Google Task的ID,初始化为null + private String mGid; + // 存储节点的名称,初始化为空字符串 + private String mName; + // 记录节点最后一次被修改的时间戳,初始值为0 + private long mLastModified; + // 标记节点是否已被删除,初始值为false + private boolean mDeleted; + + // 无参构造函数,用于初始化成员变量 + public Node() { + mGid = null; + mName = ""; + mLastModified = 0; + mDeleted = false; + } + + // 抽象方法,用于获取创建操作对应的JSON对象,不同的子类有不同的创建逻辑,actionId可能用于区分不同的创建场景 + public abstract JSONObject getCreateAction(int actionId); + // 抽象方法,用于获取更新操作对应的JSON对象,不同的子类有不同的更新逻辑,actionId用于区分不同的更新场景 + public abstract JSONObject getUpdateAction(int actionId); + // 抽象方法,根据远程JSON数据设置节点内容,具体实现依赖子类 + public abstract void setContentByRemoteJSON(JSONObject js); + // 抽象方法,根据本地JSON数据设置节点内容,具体实现依赖子类 + public abstract void setContentByLocalJSON(JSONObject js); + // 抽象方法,从节点内容生成对应的本地JSON对象,具体实现依赖子类 + public abstract JSONObject getLocalJSONFromContent(); + // 抽象方法,根据数据库游标获取同步操作类型,子类需按自身逻辑实现 + public abstract int getSyncAction(Cursor c); + + // 设置节点的唯一标识符 + public void setGid(String gid) { + this.mGid = gid; + } + // 设置节点的名称 + public void setName(String name) { + this.mName = name; + } + // 设置节点最后一次修改的时间戳 + public void setLastModified(long lastModified) { + this.mLastModified = lastModified; + } + // 设置节点的删除状态 + public void setDeleted(boolean deleted) { + this.mDeleted = deleted; + } + // 获取节点的唯一标识符 + public String getGid() { + return this.mGid; + } + // 获取节点的名称 + public String getName() { + return this.mName; + } + // 获取节点最后一次修改的时间戳 + public long getLastModified() { + return this.mLastModified; + } + // 获取节点的删除状态 + public boolean getDeleted() { + return this.mDeleted; + } +} + + +3、SqlData.java +package net.micode.notes.gtask.data; + +import android.content.ContentResolver; +import android.content.ContentUris; +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.net.Uri; +import android.util.Log; + +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.DataColumns; +import net.micode.notes.data.Notes.DataConstants; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.data.NotesDatabaseHelper.TABLE; +import net.micode.notes.gtask.exception.ActionFailureException; + +import org.json.JSONException; +import org.json.JSONObject; + +// SqlData类用于处理与SQL数据库交互相关的操作,管理笔记数据的本地存储逻辑 +public class SqlData { + // 用于日志记录的标签,方便调试时快速定位问题,值为类名 + private static final String TAG = SqlData.class.getSimpleName(); + // 定义一个表示无效ID的常量 + private static final int INVALID_ID = -99999; + + // 定义查询数据库时要获取的列名数组,用于获取笔记相关的数据 + public static final String[] PROJECTION_DATA = new String[] { + DataColumns.ID, DataColumns.MIME_TYPE, DataColumns.CONTENT, DataColumns.DATA1, + DataColumns.DATA3 + }; + + // 定义上述列名数组中各列对应的索引,方便从游标中取值 + public static final int DATA_ID_COLUMN = 0; + public static final int DATA_MIME_TYPE_COLUMN = 1; + 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_3_COLUMN = 4; + + // 用于与Android系统的内容提供器交互,执行数据的增删改查操作 + private ContentResolver mContentResolver; + // 标记当前操作是否为创建新数据 + private boolean mIsCreate; + // 存储数据的ID + private long mDataId; + // 存储数据的MIME类型 + private String mDataMimeType; + // 存储数据的具体内容 + private String mDataContent; + // 存储与数据相关的额外数据,类型为long + private long mDataContentData1; + // 存储与数据相关的额外数据,类型为String + private String mDataContentData3; + // 用于暂存数据变更,在提交时统一应用这些变更 + private ContentValues mDiffDataValues; + + // 构造函数,用于初始化一个新的SqlData实例,通常用于创建新数据场景 + public SqlData(Context context) { + // 获取上下文的内容解析器 + mContentResolver = context.getContentResolver(); + // 标记当前操作为创建操作 + mIsCreate = true; + // 初始化数据ID为无效值 + mDataId = INVALID_ID; + // 初始化MIME类型为默认的笔记类型 + mDataMimeType = DataConstants.NOTE; + // 初始化数据内容为空字符串 + mDataContent = ""; + // 初始化额外数据1为0 + mDataContentData1 = 0; + // 初始化额外数据3为空字符串 + mDataContentData3 = ""; + // 初始化变更数据的ContentValues + mDiffDataValues = new ContentValues(); + } + + // 构造函数,从数据库游标中加载已有数据,初始化SqlData实例 + public SqlData(Context context, Cursor c) { + mContentResolver = context.getContentResolver(); + mIsCreate = false; + // 调用方法从游标加载数据到成员变量 + loadFromCursor(c); + mDiffDataValues = new ContentValues(); + } + + // 从数据库游标中读取数据,填充到类的各个成员变量中 + private void loadFromCursor(Cursor c) { + mDataId = c.getLong(DATA_ID_COLUMN); + mDataMimeType = c.getString(DATA_MIME_TYPE_COLUMN); + mDataContent = c.getString(DATA_CONTENT_COLUMN); + mDataContentData1 = c.getLong(DATA_CONTENT_DATA_1_COLUMN); + mDataContentData3 = c.getString(DATA_CONTENT_DATA_3_COLUMN); + } + + // 根据传入的JSON对象设置数据内容,并记录数据变更 + public void setContent(JSONObject js) throws JSONException { + // 尝试从JSON对象获取数据ID,若不存在则设为无效ID + long dataId = js.has(DataColumns.ID)? js.getLong(DataColumns.ID) : INVALID_ID; + // 如果是创建操作 或者 数据ID有变化,更新变更数据值中的ID + if (mIsCreate || mDataId!= dataId) { + mDiffDataValues.put(DataColumns.ID, dataId); + } + mDataId = dataId; + + // 尝试从JSON对象获取MIME类型,若不存在则设为默认类型 + String dataMimeType = js.has(DataColumns.MIME_TYPE)? js.getString(DataColumns.MIME_TYPE) + : DataConstants.NOTE; + // 如果是创建操作 或者 MIME类型有变化,更新变更数据值中的MIME类型 + if (mIsCreate ||!mDataMimeType.equals(dataMimeType)) { + mDiffDataValues.put(DataColumns.MIME_TYPE, dataMimeType); + } + mDataMimeType = dataMimeType; + + // 尝试从JSON对象获取数据内容,若不存在则设为空字符串 + String dataContent = js.has(DataColumns.CONTENT)? js.getString(DataColumns.CONTENT) : ""; + // 如果是创建操作 或者 数据内容有变化,更新变更数据值中的数据内容 + if (mIsCreate ||!mDataContent.equals(dataContent)) { + mDiffDataValues.put(DataColumns.CONTENT, dataContent); + } + mDataContent = dataContent; + + // 尝试从JSON对象获取额外数据1,若不存在则设为0 + long dataContentData1 = js.has(DataColumns.DATA1)? js.getLong(DataColumns.DATA1) : 0; + // 如果是创建操作 或者 额外数据1有变化,更新变更数据值中的额外数据1 + if (mIsCreate || mDataContentData1!= dataContentData1) { + mDiffDataValues.put(DataColumns.DATA1, dataContentData1); + } + mDataContentData1 = dataContentData1; + + // 尝试从JSON对象获取额外数据3,若不存在则设为空字符串 + String dataContentData3 = js.has(DataColumns.DATA3)? js.getString(DataColumns.DATA3) : ""; + // 如果是创建操作 或者 额外数据3有变化,更新变更数据值中的额外数据3 + if (mIsCreate ||!mDataContentData3.equals(dataContentData3)) { + mDiffDataValues.put(DataColumns.DATA3, dataContentData3); + } + mDataContentData3 = dataContentData3; + } + + // 获取当前数据内容,封装成JSON对象返回。若数据还未创建则记录错误日志并返回null + public JSONObject getContent() throws JSONException { + if (mIsCreate) { + Log.e(TAG, "it seems that we haven't created this in database yet"); + return null; + } + JSONObject js = new JSONObject(); + js.put(DataColumns.ID, mDataId); + js.put(DataColumns.MIME_TYPE, mDataMimeType); + js.put(DataColumns.CONTENT, mDataContent); + js.put(DataColumns.DATA1, mDataContentData1); + js.put(DataColumns.DATA3, mDataContentData3); + return js; + } + + // 将变更数据提交到数据库 + public void commit(long noteId, boolean validateVersion, long version) { + if (mIsCreate) { + // 如果是创建操作且数据ID是无效的,同时变更数据值中包含ID字段,移除它 + if (mDataId == INVALID_ID && mDiffDataValues.containsKey(DataColumns.ID)) { + mDiffDataValues.remove(DataColumns.ID); + } + // 添加noteId到变更数据值中 + mDiffDataValues.put(DataColumns.NOTE_ID, noteId); + // 插入数据到指定的内容URI,获取插入后的URI + Uri uri = mContentResolver.insert(Notes.CONTENT_DATA_URI, mDiffDataValues); + try { + // 从URI路径段中解析出插入数据的ID + mDataId = Long.valueOf(uri.getPathSegments().get(1)); + } catch (NumberFormatException e) { + Log.e(TAG, "Get note id error :" + e.toString()); + throw new ActionFailureException("create note failed"); + } + } else { + if (mDiffDataValues.size() > 0) { + int result = 0; + if (!validateVersion) { + // 不验证版本,直接更新指定ID的数据 + result = mContentResolver.update(ContentUris.withAppendedId( + Notes.CONTENT_DATA_URI, mDataId), mDiffDataValues, null, null); + } else { + // 验证版本,根据指定条件更新数据 + result = mContentResolver.update(ContentUris.withAppendedId( + Notes.CONTENT_DATA_URI, mDataId), mDiffDataValues, + "? in (SELECT " + NoteColumns.ID + " FROM " + TABLE.NOTE + + " WHERE " + NoteColumns.VERSION + "=?)", new String[] { + String.valueOf(noteId), String.valueOf(version) + }); + } + if (result == 0) { + Log.w(TAG, "there is no update. maybe user updates note when syncing"); + } + } + } + // 清空变更数据值 + mDiffDataValues.clear(); + // 标记不再是创建操作 + mIsCreate = false; + } + + // 获取当前数据的ID + public long getId() { + return mDataId; + } +} + + + +4.SqlNote.java +package net.micode.notes.gtask.data; + +import android.appwidget.AppWidgetManager; +import android.content.ContentResolver; +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.net.Uri; +import android.util.Log; + +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.DataColumns; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.gtask.exception.ActionFailureException; +import net.micode.notes.tool.GTaskStringUtils; +import net.micode.notes.tool.ResourceParser; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; + +// SqlNote类负责处理笔记数据与SQL数据库之间的交互,包括创建、读取和更新笔记相关信息 +public class SqlNote { + // 用于日志记录的标签,方便调试时定位问题,取类的简单名称 + private static final String TAG = SqlNote.class.getSimpleName(); + // 定义一个表示无效ID的常量,用于初始化或判断ID的合法性 + private static final int INVALID_ID = -99999; + + // 定义查询笔记表时所需的列名数组,从数据库获取笔记各类属性 + public static final String[] PROJECTION_NOTE = new String[] { + NoteColumns.ID, NoteColumns.ALERTED_DATE, NoteColumns.BG_COLOR_ID, + NoteColumns.CREATED_DATE, NoteColumns.HAS_ATTACHMENT, NoteColumns.MODIFIED_DATE, + NoteColumns.NOTES_COUNT, NoteColumns.PARENT_ID, NoteColumns.SNIPPET, NoteColumns.TYPE, + NoteColumns.WIDGET_ID, NoteColumns.WIDGET_TYPE, NoteColumns.SYNC_ID, + NoteColumns.LOCAL_MODIFIED, NoteColumns.ORIGIN_PARENT_ID, NoteColumns.GTASK_ID, + NoteColumns.VERSION + }; + + // 上述列名数组各列对应的索引,方便从游标获取对应数据 + public static final int ID_COLUMN = 0; + public static final int ALERTED_DATE_COLUMN = 1; + public static final int BG_COLOR_ID_COLUMN = 2; + public static final int CREATED_DATE_COLUMN = 3; + public static final int HAS_ATTACHMENT_COLUMN = 4; + public static final int MODIFIED_DATE_COLUMN = 5; + public static final int NOTES_COUNT_COLUMN = 6; + public static final int PARENT_ID_COLUMN = 7; + public static final int SNIPPET_COLUMN = 8; + public static final int TYPE_COLUMN = 9; + public static final int WIDGET_ID_COLUMN = 10; + public static final int WIDGET_TYPE_COLUMN = 11; + public static final int SYNC_ID_COLUMN = 12; + public static final int LOCAL_MODIFIED_COLUMN = 13; + public static final int ORIGIN_PARENT_ID_COLUMN = 14; + public static final int GTASK_ID_COLUMN = 15; + public static final int VERSION_COLUMN = 16; + + // 上下文对象,用于获取如内容解析器这类系统服务 + private Context mContext; + // 用于与Android系统内容提供器交互,执行数据库增删改查 + private ContentResolver mContentResolver; + // 标记当前操作是创建新笔记(true)还是更新已有笔记(false) + private boolean mIsCreate; + // 存储笔记的ID + private long mId; + // 存储笔记的提醒时间 + private long mAlertDate; + // 存储笔记的背景颜色ID + private int mBgColorId; + // 存储笔记的创建时间 + private long mCreatedDate; + // 标记笔记是否有附件,0为无,1为有 + private int mHasAttachment; + // 存储笔记的最后修改时间 + private long mModifiedDate; + // 存储笔记的父级ID + private long mParentId; + // 存储笔记的片段文本 + private String mSnippet; + // 存储笔记类型 + private int mType; + // 存储与笔记关联的小部件ID + private int mWidgetId; + // 存储小部件类型 + private int mWidgetType; + // 存储笔记的原始父级ID + private long mOriginParent; + // 存储笔记版本号 + private long mVersion; + // 暂存笔记数据变更,提交时应用到数据库 + private ContentValues mDiffNoteValues; + // 存储与该笔记相关的数据项列表,由SqlData类管理 + private ArrayList mDataList; + + // 构造函数,用于初始化一个新的笔记实例,通常用于创建新笔记场景 + public SqlNote(Context context) { + mContext = context; + mContentResolver = context.getContentResolver(); + mIsCreate = true; + mId = INVALID_ID; + mAlertDate = 0; + // 获取默认的背景颜色ID + mBgColorId = ResourceParser.getDefaultBgId(context); + mCreatedDate = System.currentTimeMillis(); + mHasAttachment = 0; + mModifiedDate = System.currentTimeMillis(); + mParentId = 0; + mSnippet = ""; + mType = Notes.TYPE_NOTE; + mWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; + mWidgetType = Notes.TYPE_WIDGET_INVALIDE; + mOriginParent = 0; + mVersion = 0; + mDiffNoteValues = new ContentValues(); + mDataList = new ArrayList(); + } + + // 构造函数,从数据库游标加载已有笔记数据,初始化实例 + public SqlNote(Context context, Cursor c) { + mContext = context; + mContentResolver = context.getContentResolver(); + mIsCreate = false; + loadFromCursor(c); + mDataList = new ArrayList(); + // 如果是普通笔记类型,加载相关数据内容 + if (mType == Notes.TYPE_NOTE) + loadDataContent(); + mDiffNoteValues = new ContentValues(); + } + + // 构造函数,根据指定ID从数据库加载笔记数据,初始化实例 + public SqlNote(Context context, long id) { + mContext = context; + mContentResolver = context.getContentResolver(); + mIsCreate = false; + loadFromCursor(id); + mDataList = new ArrayList(); + if (mType == Notes.TYPE_NOTE) + loadDataContent(); + mDiffNoteValues = new ContentValues(); + } + + // 根据指定ID查询数据库,获取游标并调用loadFromCursor(Cursor c)加载数据 + private void loadFromCursor(long id) { + Cursor c = null; + try { + // 从指定的笔记内容URI查询数据,条件是ID匹配 + c = mContentResolver.query(Notes.CONTENT_NOTE_URI, PROJECTION_NOTE, "(_id=?)", + new String[] { String.valueOf(id) }, null); + if (c!= null) { + c.moveToNext(); + loadFromCursor(c); + } else { + Log.w(TAG, "loadFromCursor: cursor = null"); + } + } finally { + if (c!= null) + c.close(); + } + } + + // 从数据库游标读取数据,填充到类的各成员变量 + private void loadFromCursor(Cursor c) { + mId = c.getLong(ID_COLUMN); + mAlertDate = c.getLong(ALERTED_DATE_COLUMN); + mBgColorId = c.getInt(BG_COLOR_ID_COLUMN); + mCreatedDate = c.getLong(CREATED_DATE_COLUMN); + mHasAttachment = c.getInt(HAS_ATTACHMENT_COLUMN); + mModifiedDate = c.getLong(MODIFIED_DATE_COLUMN); + mParentId = c.getLong(PARENT_ID_COLUMN); + mSnippet = c.getString(SNIPPET_COLUMN); + mType = c.getInt(TYPE_COLUMN); + mWidgetId = c.getInt(WIDGET_ID_COLUMN); + mWidgetType = c.getInt(WIDGET_TYPE_COLUMN); + mVersion = c.getLong(VERSION_COLUMN); + } +// 从数据库加载与当前笔记相关的数据内容,填充到mDataList中 +private void loadDataContent() { + // 用于数据库查询的游标 + Cursor c = null; + // 清空数据项列表,防止重复数据 + mDataList.clear(); + try { + // 通过内容解析器查询与当前笔记ID关联的数据表,获取对应的数据行 + c = mContentResolver.query(Notes.CONTENT_DATA_URI, SqlData.PROJECTION_DATA, + "(note_id=?)", new String[] { String.valueOf(mId) }, null); + if (c!= null) { + // 如果没有查询到任何数据行,记录警告日志并返回 + if (c.getCount() == 0) { + Log.w(TAG, "it seems that the note has not data"); + return; + } + // 遍历查询结果,将每行数据封装成SqlData对象并添加到列表 + while (c.moveToNext()) { + SqlData data = new SqlData(mContext, c); + mDataList.add(data); + } + } else { + // 如果游标为空,记录警告日志 + Log.w(TAG, "loadDataContent: cursor = null"); + } + } finally { + // 确保游标被关闭,释放资源 + if (c!= null) + c.close(); + } +} + +// 根据传入的JSONObject设置笔记内容,并记录数据变更 +public boolean setContent(JSONObject js) { + try { + // 从JSON对象中获取笔记头部信息 + 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) { + // 获取片段信息,若不存在则为空字符串 + String snippet = note.has(NoteColumns.SNIPPET)? note.getString(NoteColumns.SNIPPET) : ""; + // 如果是创建操作或者当前片段与传入的不同,更新变更值 + if (mIsCreate ||!mSnippet.equals(snippet)) { + mDiffNoteValues.put(NoteColumns.SNIPPET, snippet); + } + mSnippet = snippet; + + // 获取类型信息,若不存在则为默认笔记类型 + int type = note.has(NoteColumns.TYPE)? note.getInt(NoteColumns.TYPE) : Notes.TYPE_NOTE; + // 如果是创建操作或者当前类型与传入的不同,更新变更值 + if (mIsCreate || mType!= type) { + mDiffNoteValues.put(NoteColumns.TYPE, type); + } + mType = type; + // 如果是普通笔记类型,更新众多笔记属性及相关数据项 + } else if (note.getInt(NoteColumns.TYPE) == Notes.TYPE_NOTE) { + // 获取数据数组 + JSONArray dataArray = js.getJSONArray(GTaskStringUtils.META_HEAD_DATA); + // 获取ID,若不存在则为无效ID + long id = note.has(NoteColumns.ID)? note.getLong(NoteColumns.ID) : INVALID_ID; + // 如果是创建操作或者当前ID与传入的不同,更新变更值 + if (mIsCreate || mId!= id) { + mDiffNoteValues.put(NoteColumns.ID, id); + } + mId = id; + + // 获取提醒日期,若不存在则为0 + long alertDate = note.has(NoteColumns.ALERTED_DATE)? note.getLong(NoteColumns.ALERTED_DATE) : 0; + // 如果是创建操作或者当前提醒日期与传入的不同,更新变更值 + if (mIsCreate || mAlertDate!= alertDate) { + mDiffNoteValues.put(NoteColumns.ALERTED_DATE, alertDate); + } + mAlertDate = alertDate; + + // 获取背景颜色ID,若不存在则为默认背景色ID + int bgColorId = note.has(NoteColumns.BG_COLOR_ID)? note.getInt(NoteColumns.BG_COLOR_ID) : ResourceParser.getDefaultBgId(mContext); + // 如果是创建操作或者当前背景颜色ID与传入的不同,更新变更值 + if (mIsCreate || mBgColorId!= bgColorId) { + mDiffNoteValues.put(NoteColumns.BG_COLOR_ID, bgColorId); + } + mBgColorId = bgColorId; + + // 获取创建日期,若不存在则为当前时间 + long createDate = note.has(NoteColumns.CREATED_DATE)? note.getLong(NoteColumns.CREATED_DATE) : System.currentTimeMillis(); + // 如果是创建操作或者当前创建日期与传入的不同,更新变更值 + if (mIsCreate || mCreatedDate!= createDate) { + mDiffNoteValues.put(NoteColumns.CREATED_DATE, createDate); + } + mCreatedDate = createDate; + + // 获取是否有附件标记,若不存在则为0 + int hasAttachment = note.has(NoteColumns.HAS_ATTACHMENT)? note.getInt(NoteColumns.HAS_ATTACHMENT) : 0; + // 如果是创建操作或者当前附件标记与传入的不同,更新变更值 + if (mIsCreate || mHasAttachment!= hasAttachment) { + mDiffNoteValues.put(NoteColumns.HAS_ATTACHMENT, hasAttachment); + } + mHasAttachment = hasAttachment; + + // 获取修改日期,若不存在则为当前时间 + long modifiedDate = note.has(NoteColumns.MODIFIED_DATE)? note.getLong(NoteColumns.MODIFIED_DATE) : System.currentTimeMillis(); + // 如果是创建操作或者当前修改日期与传入的不同,更新变更值 + if (mIsCreate || mModifiedDate!= modifiedDate) { + mDiffNoteValues.put(NoteColumns.MODIFIED_DATE, modifiedDate); + } + mModifiedDate = modifiedDate; + + // 获取父级ID,若不存在则为0 + long parentId = note.has(NoteColumns.PARENT_ID)? note.getLong(NoteColumns.PARENT_ID) : 0; + // 如果是创建操作或者当前父级ID与传入的不同,更新变更值 + if (mIsCreate || mParentId!= parentId) { + mDiffNoteValues.put(NoteColumns.PARENT_ID, parentId); + } + mParentId = parentId; + + // 获取片段信息,若不存在则为空字符串 + String snippet = note.has(NoteColumns.SNIPPET)? note.getString(NoteColumns.SNIPPET) : ""; + // 如果是创建操作或者当前片段与传入的不同,更新变更值 + if (mIsCreate ||!mSnippet.equals(snippet)) { + mDiffNoteValues.put(NoteColumns.SNIPPET, snippet); + } + mSnippet = snippet; + + // 获取类型信息,若不存在则为默认笔记类型 + int type = note.has(NoteColumns.TYPE)? note.getInt(NoteColumns.TYPE) : Notes.TYPE_NOTE; + // 如果是创建操作或者当前类型与传入的不同,更新变更值 + if (mIsCreate || mType!= type) { + mDiffNoteValues.put(NoteColumns.TYPE, type); + } + mType = type; + + // 获取小部件ID,若不存在则为无效小部件ID + int widgetId = note.has(NoteColumns.WIDGET_ID)? note.getInt(NoteColumns.WIDGET_ID) : AppWidgetManager.INVALID_APPWIDGET_ID; + // 如果是创建操作或者当前小部件ID与传入的不同,更新变更值 + if (mIsCreate || mWidgetId!= widgetId) { + mDiffNoteValues.put(NoteColumns.WIDGET_ID, widgetId); + } + mWidgetId = widgetId; + + // 获取小部件类型,若不存在则为无效小部件类型 + int widgetType = note.has(NoteColumns.WIDGET_TYPE)? note.getInt(NoteColumns.WIDGET_TYPE) : Notes.TYPE_WIDGET_INVALIDE; + // 如果是创建操作或者当前小部件类型与传入的不同,更新变更值 + if (mIsCreate || mWidgetType!= widgetType) { + mDiffNoteValues.put(NoteColumns.WIDGET_TYPE, widgetType); + } + mWidgetType = widgetType; + + // 获取原始父级ID,若不存在则为0 + long originParent = note.has(NoteColumns.ORIGIN_PARENT_ID)? note.getLong(NoteColumns.ORIGIN_PARENT_ID) : 0; + // 如果是创建操作或者当前原始父级ID与传入的不同,更新变更值 + if (mIsCreate || mOriginParent!= originParent) { + mDiffNoteValues.put(NoteColumns.ORIGIN_PARENT_ID, originParent); + } + mOriginParent = originParent; + + // 遍历数据数组,更新或新增相关数据项 + for (int i = 0; i < dataArray.length(); i++) { + JSONObject data = dataArray.getJSONObject(i); + SqlData sqlData = null; + if (data.has(DataColumns.ID)) { + long dataId = data.getLong(DataColumns.ID); + for (SqlData temp : mDataList) { + if (dataId == temp.getId()) { + sqlData = temp; + } + } + } + + if (sqlData == null) { + sqlData = new SqlData(mContext); + mDataList.add(sqlData); + } + + sqlData.setContent(data); + } + } + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + return false; + } + return true; +} + +// 获取当前笔记内容,封装成JSONObject返回。若笔记还未创建则记录错误日志并返回null +public JSONObject getContent() { + try { + JSONObject js = new JSONObject(); + + if (mIsCreate) { + Log.e(TAG, "it seems that we haven't created this in database yet"); + return null; + } + + JSONObject note = new JSONObject(); + if (mType == Notes.TYPE_NOTE) { + note.put(NoteColumns.ID, mId); + note.put(NoteColumns.ALERTED_DATE, mAlertDate); + note.put(NoteColumns.BG_COLOR_ID, mBgColorId); + note.put(NoteColumns.CREATED_DATE, mCreatedDate); + note.put(NoteColumns.HAS_ATTACHMENT, mHasAttachment); + note.put(NoteColumns.MODIFIED_DATE, mModifiedDate); + note.put(NoteColumns.PARENT_ID, mParentId); + note.put(NoteColumns.SNIPPET, mSnippet); + note.put(NoteColumns.TYPE, mType); + note.put(NoteColumns.WIDGET_ID, mWidgetId); + note.put(NoteColumns.WIDGET_TYPE, mWidgetType); + note.put(NoteColumns.ORIGIN_PARENT_ID, mOriginParent); + js.put(GTaskStringUtils.META_HEAD_NOTE, note); + + JSONArray dataArray = new JSONArray(); + for (SqlData sqlData : mDataList) { + JSONObject data = sqlData.getContent(); + if (data!= null) { + dataArray.put(data); + } + } + js.put(GTaskStringUtils.META_HEAD_DATA, dataArray); + } else if (mType == Notes.TYPE_FOLDER || mType == Notes.TYPE_SYSTEM) { + note.put(NoteColumns.ID, mId); + note.put(NoteColumns.TYPE, mType); + note.put(NoteColumns.SNIPPET, mSnippet); + js.put(GTaskStringUtils.META_HEAD_NOTE, note); + } + + return js; + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + } + return null; +} + +// 设置笔记的父级ID,并更新变更数据值 +public void setParentId(long id) { + mParentId = id; + mDiffNoteValues.put(NoteColumns.PARENT_ID, id); +} + +// 设置笔记的Gtask ID,并更新变更数据值 +public void setGtaskId(String gid) { + mDiffNoteValues.put(NoteColumns.GTASK_ID, gid); +} + +// 设置笔记的同步ID,并更新变更数据值 +public void setSyncId(long syncId) { + mDiffNoteValues.put(NoteColumns.SYNC_ID, syncId); +} + +// 重置本地修改标记,将其值设为0 +public void resetLocalModified() { + mDiffNoteValues.put(NoteColumns.LOCAL_MODIFIED, 0); +} + +// 获取笔记的ID +public long getId() { + return mId; +} + +// 获取笔记的父级ID +public long getParentId() { + return mParentId; +} + +// 获取笔记的片段内容 +public String getSnippet() { + return mSnippet; +} + +// 判断笔记是否为普通笔记类型 +public boolean isNoteType() { + return mType == Notes.TYPE_NOTE; +} + +// 将笔记的变更提交到数据库 +public void commit(boolean validateVersion) { + if (mIsCreate) { + // 如果是创建操作,且ID为无效ID,同时变更数据值中包含ID字段,移除它 + if (mId == INVALID_ID && mDiffNoteValues.containsKey(NoteColumns.ID)) { + mDiffNoteValues.remove(NoteColumns.ID); + } + + // 向笔记内容URI插入新数据,获取插入后的URI + Uri uri = mContentResolver.insert(Notes.CONTENT_NOTE_URI, mDiffNoteValues); + try { + // 从URI路径段中解析出插入数据的ID + mId = Long.valueOf(uri.getPathSegments().get(1)); + } catch (NumberFormatException e) { + Log.e(TAG, "Get note id error :" + e.toString()); + throw new ActionFailureException("create note failed"); + } + if (mId == 0) { + throw new IllegalStateException("Create thread id failed"); + } + + if (mType == Notes.TYPE_NOTE) { + // 如果是普通笔记类型,提交相关数据项的变更 + for (SqlData sqlData : mDataList) { + sqlData.commit(mId, false, -1); + } + } + } else { + // 如果不是创建操作,检查ID合法性 + if (mId <= 0 && mId!= Notes.ID_ROOT_FOLDER && mId!= Notes.ID_CALL_RECORD_FOLDER) { + Log.e(TAG, "No such note"); + throw new IllegalStateException("Try to update note with invalid id"); + } + if (mDiffNoteValues.size() > 0) { + mVersion++; + int result = 0; + if (!validateVersion) { + // 不验证版本,直接更新指定ID的数据 + result = mContentResolver.update(Notes.CONTENT_NOTE_URI, mDiffNoteValues, "(" + + NoteColumns.ID + "=?)", new String[] { String.valueOf(mId) }); + } else { + // 验证版本,根据指定条件更新数据 + result = mContentResolver.update(Notes.CONTENT_NOTE_URI, mDiffNoteValues, "(" + + NoteColumns.ID + "=?) AND (" + NoteColumns.VERSION + "<=?)", + new String[] { String.valueOf(mId), String.valueOf(mVersion) }); + } + if (result == 0) { + Log.w(TAG, "there is no update. maybe user updates note when syncing"); + } + } + + if (mType == Notes.TYPE_NOTE) { + // 如果是普通笔记类型,提交相关数据项的变更 + for (SqlData sqlData : mDataList) { + sqlData.commit(mId, validateVersion, mVersion); + } + } + } + + // 刷新本地信息,重新从数据库加载数据 + loadFromCursor(mId); + if (mType == Notes.TYPE_NOTE) + loadDataContent(); + + // 清空变更数据值 + mDiffNoteValues.clear(); + mIsCreate = false; +} + + +5.Task.java +package net.micode.notes.gtask.data; + +import android.database.Cursor; +import android.text.TextUtils; +import android.util.Log; + +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.DataColumns; +import net.micode.notes.data.Notes.DataConstants; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.gtask.exception.ActionFailureException; +import net.micode.notes.tool.GTaskStringUtils; + +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(); + // 标记任务是否已完成 + private boolean mCompleted; + // 存储任务的备注信息 + private String mNotes; + // 存储任务的元数据信息,以JSONObject形式存在 + private JSONObject mMetaInfo; + // 指向当前任务的前一个兄弟任务 + private Task mPriorSibling; + // 指向当前任务的父任务列表 + private TaskList mParent; + + // 无参构造函数,用于初始化任务对象的默认状态 + public Task() { + super(); + mCompleted = false; + mNotes = null; + mPriorSibling = null; + mParent = null; + mMetaInfo = null; + } + + // 生成用于创建任务的JSON对象,包含任务相关的各类属性,用于与服务器交互发起创建任务的请求 + public JSONObject getCreateAction(int actionId) { + JSONObject js = new JSONObject(); + try { + // 设置动作类型为创建任务 + js.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE, + GTaskStringUtils.GTASK_JSON_ACTION_TYPE_CREATE); + // 设置动作ID + js.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, actionId); + // 设置任务在父任务列表中的索引 + js.put(GTaskStringUtils.GTASK_JSON_INDEX, mParent.getChildTaskIndex(this)); + // 设置任务实体相关信息,包括名称、创建者ID、实体类型等 + 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); + if (getNotes()!= null) { + entity.put(GTaskStringUtils.GTASK_JSON_NOTES, getNotes()); + } + js.put(GTaskStringUtils.GTASK_JSON_ENTITY_DELTA, entity); + // 设置父任务ID + js.put(GTaskStringUtils.GTASK_JSON_PARENT_ID, mParent.getGid()); + // 设置目标父类型为组 + js.put(GTaskStringUtils.GTASK_JSON_DEST_PARENT_TYPE, + GTaskStringUtils.GTASK_JSON_TYPE_GROUP); + // 设置列表ID,与父任务ID相同 + js.put(GTaskStringUtils.GTASK_JSON_LIST_ID, mParent.getGid()); + // 如果存在前一个兄弟任务,设置其ID + if (mPriorSibling!= null) { + js.put(GTaskStringUtils.GTASK_JSON_PRIOR_SIBLING_ID, mPriorSibling.getGid()); + } + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("fail to generate task-create jsonobject"); + } + return js; + } + + // 生成用于更新任务的JSON对象,包含任务的关键更新信息,用于向服务器发送更新任务的请求 + public JSONObject getUpdateAction(int actionId) { + JSONObject js = new JSONObject(); + try { + // 设置动作类型为更新任务 + js.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE, + GTaskStringUtils.GTASK_JSON_ACTION_TYPE_UPDATE); + // 设置动作ID + js.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, actionId); + // 设置任务ID + js.put(GTaskStringUtils.GTASK_JSON_ID, getGid()); + // 设置任务实体的更新信息,包括名称、备注、是否删除等 + JSONObject entity = new JSONObject(); + entity.put(GTaskStringUtils.GTASK_JSON_NAME, getName()); + if (getNotes()!= null) { + entity.put(GTaskStringUtils.GTASK_JSON_NOTES, getNotes()); + } + entity.put(GTaskStringUtils.GTASK_JSON_DELETED, getDeleted()); + js.put(GTaskStringUtils.GTASK_JSON_ENTITY_DELTA, entity); + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("fail to generate task-update jsonobject"); + } + return js; + } + + // 根据远程传来的JSON对象设置任务内容,更新任务的各项属性 + public void setContentByRemoteJSON(JSONObject js) { + if (js!= null) { + try { + // 如果JSON中有任务ID,设置任务的ID + if (js.has(GTaskStringUtils.GTASK_JSON_ID)) { + setGid(js.getString(GTaskStringUtils.GTASK_JSON_ID)); + } + // 如果有最后修改时间,设置任务的最后修改时间 + if (js.has(GTaskStringUtils.GTASK_JSON_LAST_MODIFIED)) { + setLastModified(js.getLong(GTaskStringUtils.GTASK_JSON_LAST_MODIFIED)); + } + // 如果有任务名称,设置任务名称 + if (js.has(GTaskStringUtils.GTASK_JSON_NAME)) { + setName(js.getString(GTaskStringUtils.GTASK_JSON_NAME)); + } + // 如果有备注信息,设置备注 + if (js.has(GTaskStringUtils.GTASK_JSON_NOTES)) { + setNotes(js.getString(GTaskStringUtils.GTASK_JSON_NOTES)); + } + // 如果有删除标记,设置删除标记 + if (js.has(GTaskStringUtils.GTASK_JSON_DELETED)) { + setDeleted(js.getBoolean(GTaskStringUtils.GTASK_JSON_DELETED)); + } + // 如果有完成标记,设置完成标记 + if (js.has(GTaskStringUtils.GTASK_JSON_COMPLETED)) { + setCompleted(js.getBoolean(GTaskStringUtils.GTASK_JSON_COMPLETED)); + } + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("fail to get task content from jsonobject"); + } + } + } + + // 根据本地的JSON对象设置任务内容,主要从本地存储的JSON数据中提取任务名称 + public void setContentByLocalJSON(JSONObject js) { + if (js == null ||!js.has(GTaskStringUtils.META_HEAD_NOTE) + ||!js.has(GTaskStringUtils.META_HEAD_DATA)) { + Log.w(TAG, "setContentByLocalJSON: nothing is avaiable"); + } + try { + JSONObject note = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE); + JSONArray dataArray = js.getJSONArray(GTaskStringUtils.META_HEAD_DATA); + // 确保是普通笔记类型,才进行后续处理 + if (note.getInt(NoteColumns.TYPE)!= Notes.TYPE_NOTE) { + Log.e(TAG, "invalid type"); + return; + } + for (int i = 0; i < dataArray.length(); i++) { + JSONObject data = dataArray.getJSONObject(i); + // 找到匹配的MIME_TYPE为NOTE的数据项,设置任务名称 + if (TextUtils.equals(data.getString(DataColumns.MIME_TYPE), DataConstants.NOTE)) { + setName(data.getString(DataColumns.CONTENT)); + break; + } + } + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + } + } + + // 根据任务当前内容生成本地JSON对象,用于本地存储或与本地数据库交互 + public JSONObject getLocalJSONFromContent() { + String name = getName(); + try { + if (mMetaInfo == null) { + // 如果是新从网页创建的任务,组装JSON对象 + if (name == null) { + Log.w(TAG, "the note seems to be an empty one"); + return null; + } + JSONObject js = new JSONObject(); + JSONObject note = new JSONObject(); + JSONArray dataArray = new JSONArray(); + JSONObject data = new JSONObject(); + data.put(DataColumns.CONTENT, name); + dataArray.put(data); + js.put(GTaskStringUtils.META_HEAD_DATA, dataArray); + note.put(NoteColumns.TYPE, Notes.TYPE_NOTE); + js.put(GTaskStringUtils.META_HEAD_NOTE, note); + return js; + } else { + // 如果是已经同步过的任务,更新已有JSON对象中的任务名称 + JSONObject note = mMetaInfo.getJSONObject(GTaskStringUtils.META_HEAD_NOTE); + JSONArray dataArray = mMetaInfo.getJSONArray(GTaskStringUtils.META_HEAD_DATA); + for (int i = 0; i < dataArray.length(); i++) { + JSONObject data = dataArray.getJSONObject(i); + if (TextUtils.equals(data.getString(DataColumns.MIME_TYPE), DataConstants.NOTE)) { + data.put(DataColumns.CONTENT, getName()); + break; + } + } + note.put(NoteColumns.TYPE, Notes.TYPE_NOTE); + return mMetaInfo; + } + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + return null; + } + } + + // 设置任务的元数据信息,从MetaData对象中提取并解析 + public void setMetaInfo(MetaData metaData) { + if (metaData!= null && metaData.getNotes()!= null) { + try { + mMetaInfo = new JSONObject(metaData.getNotes()); + } catch (JSONException e) { + Log.w(TAG, e.toString()); + mMetaInfo = null; + } + } + } + + // 根据数据库游标信息和任务当前元数据,确定同步动作类型 + public int getSyncAction(Cursor c) { + try { + JSONObject noteInfo = null; + if (mMetaInfo!= null && mMetaInfo.has(GTaskStringUtils.META_HEAD_NOTE)) { + noteInfo = mMetaInfo.getJSONObject(GTaskStringUtils.META_HEAD_NOTE); + } + // 如果元数据中的笔记信息为空,提示并返回更新远程动作 + if (noteInfo == null) { + Log.w(TAG, "it seems that note meta has been deleted"); + return SYNC_ACTION_UPDATE_REMOTE; + } + // 如果笔记ID不存在,提示并返回更新本地动作 + if (!noteInfo.has(NoteColumns.ID)) { + Log.w(TAG, "remote note id seems to be deleted"); + return SYNC_ACTION_UPDATE_LOCAL; + } + // 验证笔记ID是否匹配 + if (c.getLong(SqlNote.ID_COLUMN)!= noteInfo.getLong(NoteColumns.ID)) { + Log.w(TAG, "note id doesn't match"); + return SYNC_ACTION_UPDATE_LOCAL; + } + // 如果本地没有修改 + if (c.getInt(SqlNote.LOCAL_MODIFIED_COLUMN) == 0) { + // 如果两边同步ID相同,无更新动作 + if (c.getLong(SqlNote.SYNC_ID_COLUMN) == getLastModified()) { + return SYNC_ACTION_NONE; + } else { + // 应用远程更新到本地 + return SYNC_ACTION_UPDATE_LOCAL; + } + } else { + // 验证gtask ID是否匹配 + if (!c.getString(SqlNote.GTASK_ID_COLUMN).equals(getGid())) { + Log.e(TAG, "gtask id doesn't match"); + return SYNC_ACTION_ERROR; + } + // 如果两边同步ID相同,只更新远程 + if (c.getLong(SqlNote.SYNC_ID_COLUMN) == getLastModified()) { + return SYNC_ACTION_UPDATE_REMOTE; + } else { + return SYNC_ACTION_UPDATE_CONFLICT; + } + } + } catch (Exception e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + } + return SYNC_ACTION_ERROR; + } + + // 判断任务是否值得保存,依据是元数据、任务名称或备注是否存在且有内容 + public boolean isWorthSaving() { + return mMetaInfo!= null || (getName()!= null && getName().trim().length() > 0) + || (getNotes()!= null && getNotes().trim().length() > 0); + } + + // 设置任务完成状态 + public void setCompleted(boolean completed) { + this.mCompleted = completed; + } + + // 设置任务备注信息 + public void setNotes(String notes) { + this.mNotes = notes; + } + + // 设置前一个兄弟任务 + public void setPriorSibling(Task priorSibling) { + this.mPriorSibling = priorSibling; + } + + // 设置父任务列表 + public void setParent(TaskList parent) { + this.mParent = parent; + } + + // 获取任务完成状态 + public boolean getCompleted() { + return this.mCompleted; + } + + // 获取任务备注信息 + public String getNotes() { + return this.mNotes; + } + + // 获取前一个兄弟任务 + public Task getPriorSibling() { + return this.mPriorSibling; + } + + // 获取父任务列表 + public TaskList getParent() { + return this.mParent; + } +} + + + +6.TaskList.java +package net.micode.notes.gtask.data; + +import android.database.Cursor; +import android.util.Log; + +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.gtask.exception.ActionFailureException; +import net.micode.notes.tool.GTaskStringUtils; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; + +// TaskList类继承自Node类,用于表示任务列表相关的数据与操作,是任务管理体系中的容器类 +public class TaskList extends Node { + // 用于日志记录的标签,方便调试时定位问题,值为类的简单名称 + private static final String TAG = TaskList.class.getSimpleName(); + // 存储任务列表的索引 + private int mIndex; + // 存储该任务列表包含的所有任务,以ArrayList形式保存 + private ArrayList mChildren; + + // 无参构造函数,用于初始化任务列表对象,创建一个空的任务列表并设置初始索引 + public TaskList() { + super(); + mChildren = new ArrayList(); + mIndex = 1; + } + + // 生成用于创建任务列表的JSON对象,包含任务列表相关的关键信息,用于与服务器交互发起创建请求 + public JSONObject getCreateAction(int actionId) { + JSONObject js = new JSONObject(); + try { + // 设置动作类型为创建任务列表 + js.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE, + GTaskStringUtils.GTASK_JSON_ACTION_TYPE_CREATE); + // 设置动作ID + js.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, actionId); + // 设置任务列表的索引 + js.put(GTaskStringUtils.GTASK_JSON_INDEX, mIndex); + // 设置任务列表实体相关信息,包括名称、创建者ID、实体类型 + 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_GROUP); + js.put(GTaskStringUtils.GTASK_JSON_ENTITY_DELTA, entity); + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("fail to generate tasklist-create jsonobject"); + } + return js; + } + + // 生成用于更新任务列表的JSON对象,包含任务列表的更新信息,用于向服务器发送更新请求 + public JSONObject getUpdateAction(int actionId) { + JSONObject js = new JSONObject(); + try { + // 设置动作类型为更新任务列表 + js.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE, + GTASKStringUtils.GTASK_JSON_ACTION_TYPE_UPDATE); + // 设置动作ID + js.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, actionId); + // 设置任务列表ID + js.put(GTaskStringUtils.GTASK_JSON_ID, getGid()); + // 设置任务列表实体的更新信息,包括名称、是否删除 + JSONObject entity = new JSONObject(); + entity.put(GTaskStringUtils.GTASK_JSON_NAME, getName()); + entity.put(GTaskStringUtils.GTASK_JSON_DELETED, getDeleted()); + js.put(GTaskStringUtils.GTASK_JSON_ENTITY_DELTA, entity); + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("fail to generate tasklist-update jsonobject"); + } + return js; + } + + // 根据远程传来的JSON对象设置任务列表内容,更新任务列表的关键属性 + public void setContentByRemoteJSON(JSONObject js) { + if (js!= null) { + try { + // 如果JSON中有任务列表ID,设置任务列表的ID + if (js.has(GTaskStringUtils.GTASK_JSON_ID)) { + setGid(js.getString(GTaskStringUtils.GTASK_JSON_ID)); + } + // 如果有最后修改时间,设置任务列表的最后修改时间 + if (js.has(GTaskStringUtils.GTASK_JSON_LAST_MODIFIED)) { + setLastModified(js.getLong(GTaskStringUtils.GTASK_JSON_LAST_MODIFIED)); + } + // 如果有任务列表名称,设置任务列表名称 + if (js.has(GTaskStringUtils.GTASK_JSON_NAME)) { + setName(js.getString(GTaskStringUtils.GTASK_JSON_NAME)); + } + } catch (JSONException e) { + Log.e(TAG, e.toString(); + e.printStackTrace(); + throw new ActionFailureException("fail to get tasklist content from jsonobject"); + } + } + } + + // 根据本地的JSON对象设置任务列表内容,主要处理文件夹相关的本地JSON数据 + public void setContentByLocalJSON(JSONObject js) { + if (js == null ||!js.has(GTaskStringUtils.META_HEAD_NOTE)) { + Log.w(TAG, "setContentByLocalJSON: nothing is avaiable"); + } + try { + JSONObject folder = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE); + // 如果是文件夹类型,提取片段信息设置名称 + if (folder.getInt(NoteColumns.TYPE) == Notes.TYPE_FOLDER) { + String name = folder.getString(NoteColumns.SNIPPET); + setName(GTaskStringUtils.MIUI_FOLDER_PREFFIX + name); + // 如果是系统文件夹类型,根据不同的ID设置对应的名称 + } else if (folder.getInt(NoteColumns.TYPE) == Notes.TYPE_SYSTEM) { + if (folder.getLong(NoteColumns.ID) == Notes.ID_ROOT_FOLDER) + setName(GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_DEFAULT); + else if (folder.getLong(NoteColumns.ID) == Notes.ID_CALL_RECORD_FOLDER) + setName(GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_CALL_NOTE); + else + Log.e(TAG, "invalid system folder"); + } else { + Log.e(TAG, "error type"); + } + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + } + } + + // 根据任务列表当前内容生成本地JSON对象,用于本地存储或与本地数据库交互 + public JSONObject getLocalJSONFromContent() { + try { + JSONObject js = new JSONObject(); + JSONObject folder = new JSONObject(); + String folderName = getName(); + // 去除名称前缀 + if (getName().startsWith(GTaskStringUtils.MIUI_FOLDER_PREFFIX)) + folderName = folderName.substring(GTaskStringUtils.MIUI_FOLDER_PREFFIX.length(), + folderName.length()); + folder.put(NoteColumns.SNIPPET, folderName); + // 根据名称判断类型,设置对应的文件夹类型 + if (folderName.equals(GTaskStringUtils.FOLDER_DEFAULT) + || folderName.equals(GTaskStringUtils.FOLDER_CALL_NOTE)) + folder.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); + else + folder.put(NoteColumns.TYPE, Notes.TYPE_FOLDER); + js.put(GTaskStringUtils.META_HEAD_NOTE, folder); + return js; + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + return null; + } + } + + // 根据数据库游标信息和任务列表当前状态,确定同步动作类型 + public int getSyncAction(Cursor c) { + try { + // 如果本地没有更新 + if (c.getInt(SqlNote.LOCAL_MODIFIED_COLUMN) == 0) { + // 如果两边同步ID相同,无更新动作 + if (c.getLong(SqlNote.SYNC_ID_COLUMN) == getLastModified()) { + return SYNC_ACTION_NONE; + } else { + // 应用远程更新到本地 + return SYNC_ACTION_UPDATE_LOCAL; + } + } else { + // 验证gtask ID是否匹配 + if (!c.getString(SqlNote.GTASK_ID_COLOND).equals(getGid())) { + Log.e(TAG, "gtask id doesn't match"); + return SYNC_ACTION_ERROR; + } + // 如果两边同步ID相同,只更新远程 + if (c.getLong(SqlNote.SYNC_ID_COLUMN) == getLastModified()) { + return SYNC_ACTION_UPDATE_REMOTE; + } else { + // 对于文件夹冲突,直接应用本地修改 + return SYNC_ACTION_UPDATE_REMOTE; + } + } + } catch (Exception e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + } + return SYNC_ACTION_ERROR; + } + + // 获取任务列表中包含的任务数量 + public int getChildTaskCount() { + return mChildren.size(); + } + + // 向任务列表添加一个任务,同时设置任务的前一个兄弟任务和父任务 + public boolean addChildTask(Task task) { + boolean ret = false; + if (task!= null &&!mChildren.contains(task)) { + ret = mChildren.add(task); + if (ret) { + // 设置前一个兄弟任务和父任务 + task.setPriorSibling(mChildren.isEmpty()? null : mChildren.get(mChildren.size() - 1)); + task.setParent(this); + } + } + return ret; + } + + // 在指定索引位置向任务列表添加一个任务,并更新任务之间的前后关系 + public boolean addChildTask(Task task, int index) { + if (index < 0 || index > mChildren.size()) { + Log.e(TAG, "add child task: invalid index"); + return false; + } + + int pos = mChildren.indexOf(task); + if (task!= null && pos == -1) { + mChildren.add(index, task); + + // 更新任务列表中的前后任务关系 + Task preTask = null; + Task afterTask = null; + if (index!= 0) + preTask = mChildren.get(index - 1); + if (index!= mChildren.size() - 1) + afterTask = mChildren.get(index + 1); + + task.setPriorSibling(preTask); + if (afterTask!= null) + afterTask.setPriorSibling(task); + } + + return true; + } + + // 从任务列表中移除一个任务,并重置任务的前一个兄弟任务和父任务关系 + public boolean removeChildTask(Task task) { + boolean ret = false; + int index = mChildren.indexOf(task); + if (index!= -1) { + ret = mChildren.remove(task); + if (ret) { + // 重置前一个兄弟任务和父任务 + task.setPriorSibling(null); + task.setParent(null); + + // 更新任务列表 + if (index!= mChildren.size()) { + mChildren.get(index).setPriorSibling( + index == 0? null : mChildren.get(index - 1)); + } + } + } + return ret; + } + + // 将任务移动到指定索引位置,先移除再添加 + public boolean moveChildTask(Task task, int index) { + if (index < 0 || index >= mChildren.size()) { + Log.e(TAG, "move child task: invalid index"); + return false; + } + + int pos = mChildren.indexOf(task); + if (pos == -1) { + Log.e(TAG, "move child task: the task should in the list"); + return false; + } + + if (pos == index) + return true; + return (removeChildTask(task) && addChildTask(task, index)); + } + + // 根据任务的全局唯一ID查找对应的任务 + public Task findChildTaskByGid(String gid) { + for (int i = 0; i < mChildren.size(); i++) { + Task t = mChildren.get(i); + if (t.getGid().equals(gid)) { + return t; + } + } + return null; + } + + // 获取任务在任务列表中的索引位置 + public int getChildTaskIndex(Task task) { + return mChildren.indexOf(task); + } + + // 根据索引获取任务列表中的任务 + public Task getChildTaskByIndex(int index) { + if (index < 0 || index >= mChildren.size()) { + Log.e(TAG, "getTaskByIndex: invalid index"); + return null; + } + return mChildren.get(index); + } + + // 根据全局唯一ID获取任务列表中的任务 + public Task getChilTaskByGid(String gid) { + for (Task task : mChildren) { + if (task.getGid().equals(gid)) + return task; + } + return null; + } + + // 获取整个任务列表的子任务列表 + public ArrayList getChildTaskList() { + return this.mChildren; + } + + // 设置任务列表的索引 + public void setIndex(int index) { + this.mIndex = index; + } + + // 获取任务列表的索引 + public int getIndex() { + return this.mIndex; + } +} \ No newline at end of file -- 2.34.1 From 3273f17efe513ad81a8f592c1fdfef92e5ea00f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=91=9E?= <2406600767.@qq.com> Date: Thu, 26 Dec 2024 22:22:29 +0800 Subject: [PATCH 05/12] 12 --- src/gtask/gtask-exception.txt | 86 +++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 src/gtask/gtask-exception.txt diff --git a/src/gtask/gtask-exception.txt b/src/gtask/gtask-exception.txt new file mode 100644 index 0000000..e53af74 --- /dev/null +++ b/src/gtask/gtask-exception.txt @@ -0,0 +1,86 @@ +1.ActionFailureException.java + +package net.micode.notes.gtask.exception; + +// ActionFailureException类继承自RuntimeException,是一个自定义异常类 +// 用于表示在执行某些操作时发生了失败情况,通常与业务逻辑相关的操作失败有关 +public class ActionFailureException extends RuntimeException { + // serialVersionUID用于在序列化和反序列化对象时,确保版本兼容性 + // 这里给定了一个固定的长整型数值,作为该异常类的序列化版本ID + private static final long serialVersionUID = 4425249765923293627L; + + // 无参构造函数,调用父类(RuntimeException)的无参构造函数 + // 当抛出此异常时,不携带任何详细信息,仅表示操作失败 + public ActionFailureException() { + super(); + } + + // 带有一个字符串参数的构造函数,该字符串参数通常用于传递更详细的错误信息 + // 调用父类的对应构造函数,将错误信息传递上去,方便在捕获异常时获取错误详情 + public ActionFailureException(String paramString) { + super(paramString); + } + + // 带有字符串参数和Throwable参数的构造函数 + // 字符串参数用于提供错误描述信息,Throwable参数用于关联引发此异常的底层异常 + // 可以让调用者更全面地了解异常产生的根源 + public ActionFailureException(String paramString, Throwable paramThrowable) { + super(paramString, paramThrowable); + } +} + + + + +2.NetworkFailureException + +/* + * Copyright (c) 2010 - 2011, The MiCode Open Source Community (www.micode.net) + * 这段版权声明指出代码的版权归属,该代码来自MiCode开源社区,版权时间范围是2010年至2011年 + * 并遵循Apache License 2.0开源协议。 + */ + +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * 以上注释说明代码遵循Apache License 2.0版本,若要使用此代码,必须遵守该许可协议, + * 可以通过指定的网址获取许可证副本。 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.gtask.exception; + +// NetworkFailureException类继承自Exception,属于自定义异常类, +// 用于表示在网络相关操作中出现了故障的情况。 +public class NetworkFailureException extends Exception { + // serialVersionUID用于在序列化和反序列化异常对象时,确保版本兼容性, + // 这里给定了一个固定的长整型值,作为该异常类的序列化版本ID。 + private static final long serialVersionUID = 2107610287180234136L; + + // 无参构造函数,调用父类(Exception)的无参构造函数, + // 当抛出此异常时,不携带任何详细错误信息,仅表明网络操作失败。 + public NetworkFailureException() { + super(); + } + + // 带有一个字符串参数的构造函数,该字符串参数通常用于传递具体的错误描述信息, + // 调用父类的对应构造函数,使得捕获异常时能够获取详细错误内容。 + public NetworkFailureException(String paramString) { + super(paramString); + } + + // 带有字符串参数和Throwable参数的构造函数, + // 其中,字符串参数用于提供错误描述,Throwable参数用于关联引发此异常的底层异常, + // 方便调用者追踪异常产生的根源,获取更完整的异常信息。 + public NetworkFailureException(String paramString, Throwable paramThrowable) { + super(paramString, paramThrowable); + } +} \ No newline at end of file -- 2.34.1 From 7052fbf1abdfc7c556c849469d0799837914bf64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=91=9E?= <2406600767.@qq.com> Date: Fri, 27 Dec 2024 15:29:12 +0800 Subject: [PATCH 06/12] 13 --- src/gtask/gtask-remote.txt | 1754 ++++++++++++++++++++++++++++++++++++ 1 file changed, 1754 insertions(+) create mode 100644 src/gtask/gtask-remote.txt diff --git a/src/gtask/gtask-remote.txt b/src/gtask/gtask-remote.txt new file mode 100644 index 0000000..b603b68 --- /dev/null +++ b/src/gtask/gtask-remote.txt @@ -0,0 +1,1754 @@ +1、GTaskASyncTask +package net.micode.notes.gtask.remote; + +import android.app.Notification; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.os.AsyncTask; + +import net.micode.notes.R; +import net.micode.notes.ui.NotesListActivity; +import net.micode.notes.ui.NotesPreferenceActivity; + +// GTaskASyncTask类继承自AsyncTask,用于在后台线程执行与GTask相关的同步任务, +// 并在任务执行过程中更新UI,比如显示通知。 +public class GTaskASyncTask extends AsyncTask { + + // 定义一个静态的通知ID,用于唯一标识GTask同步相关的通知 + private static int GTASK_SYNC_NOTIFICATION_ID = 5234235; + + // 定义一个接口,用于在任务完成时回调通知调用者 + public interface OnCompleteListener { + void onComplete(); + } + + // 保存上下文对象,用于获取系统服务、资源等 + private Context mContext; + // 用于管理通知的显示和取消 + private NotificationManager mNotifiManager; + // 管理GTask相关操作的管理器 + private GTaskManager mTaskManager; + // 任务完成时的监听器 + private OnCompleteListener mOnCompleteListener; + + // 构造函数,初始化必要的成员变量 + public GTaskASyncTask(Context context, OnCompleteListener listener) { + mContext = context; + mOnCompleteListener = listener; + // 获取系统的通知服务 + mNotifiManager = (NotificationManager) mContext + .getSystemService(Context.NOTIFICATION_SERVICE); + // 获取GTaskManager的单例实例 + mTaskManager = GTaskManager.getInstance(); + } + + // 用于取消正在进行的同步任务 + public void cancelSync() { + mTaskManager.cancelSync(); + } + + // 发布任务进度信息,实际上是调用AsyncTask的publishProgress方法 + public void publishProgess(String message) { + publishProgress(new String[] { message }); + } + + // 显示通知的私有方法 + private void showNotification(int tickerId, String content) { + // 创建一个新的通知对象,设置小图标、提示文本和时间戳 + Notification notification = new Notification(R.drawable.notification, mContext + .getString(tickerId), System.currentTimeMillis()); + // 设置通知的默认灯光效果 + notification.defaults = Notification.DEFAULT_LIGHTS; + // 设置通知点击后自动取消 + notification.flags = Notification.FLAG_AUTO_CANCEL; + PendingIntent pendingIntent; + // 根据不同的提示ID,设置点击通知后的跳转意图 + if (tickerId!= R.string.ticker_success) { + pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext, + NotesPreferenceActivity.class), 0); + } else { + pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext, + NotesListActivity.class), 0); + } + // 设置通知的详细信息,包括标题、内容和点击意图 + notification.setLatestEventInfo(mContext, mContext.getString(R.string.app_name), content, + pendingIntent); + // 显示通知 + mNotifiManager.notify(GTASK_SYNC_NOTIFICATION_ID, notification); + } + + // 在后台线程执行的任务,主要调用GTaskManager的sync方法进行同步 + @Override + protected Integer doInBackground(Void... unused) { + // 发布登录进度信息 + publishProgess(mContext.getString(R.string.sync_progress_login, NotesPreferenceActivity + .getSyncAccountName(mContext))); + return mTaskManager.sync(mContext, this); + } + + // 在主线程更新任务进度,显示同步通知 + @Override + protected void onProgressUpdate(String... progress) { + showNotification(R.string.ticker_syncing, progress[0]); + if (mContext instanceof GTaskSyncService) { + ((GTaskSyncService) mContext).sendBroadcast(progress[0]); + } + } + + // 任务执行完成后的回调方法 + @Override + protected void onPostExecute(Integer result) { + // 根据不同的同步结果状态,显示对应的通知 + if (result == GTaskManager.STATE_SUCCESS) { + showNotification(R.string.ticker_success, mContext.getString( + R.string.success_sync_account, mTaskManager.getSyncAccount())); + NotesPreferenceActivity.setLastSyncTime(mContext, System.currentTimeMillis()); + } else if (result == GTaskManager.STATE_NETWORK_ERROR) { + showNotification(R.string.ticker_fail, mContext.getString(R.string.error_sync_network)); + } else if (result == GTaskManager.STATE_INTERNAL_ERROR) { + showNotification(R.string.ticker_fail, mContext.getString(R.string.error_sync_internal)); + } else if (result == GTaskManager.STATE_SYNC_CANCELLED) { + showNotification(R.string.ticker_cancel, mContext + .getString(R.string.error_sync_cancelled)); + } + // 如果设置了任务完成监听器,就在新线程中触发回调 + if (mOnCompleteListener!= null) { + new Thread(new Runnable() { + public void run() { + mOnCompleteListener.onComplete(); + } + }).start(); + } + } +} + + + +2、GTaskClient +package net.micode.notes.gtask.remote; + +import android.accounts.Account; +import android.accounts.AccountManager; +import android.accounts.AccountManagerFuture; +import android.app.Activity; +import android.os.Bundle; +import android.text.TextUtils; +import android.util.Log; + +import net.micode.notes.gtask.data.Node; +import net.micode.notes.gtask.data.Task; +import net.micode.notes.gtask.data.TaskList; +import net.micode.notes.gtask.exception.ActionFailureException; +import net.micode.notes.gtask.exception.NetworkFailureException; +import net.micode.notes.tool.GTaskStringUtils; +import net.micode.notes.ui.NotesPreferenceActivity; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.client.ClientProtocolException; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.cookie.Cookie; +import org.apache.http.impl.client.BasicCookieStore; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.params.BasicHttpParams; +import org.apache.http.params.HttpConnectionParams; +import org.apache.http.params.HttpParams; +import org.apache.http.params.HttpProtocolParams; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.LinkedList; +import java.util.List; +import java.util.zip.GZIPInputStream; +import java.util.zip.Inflater; +import java.util.zip.InflaterInputStream; + +// GTaskClient类用于与Google Tasks服务进行交互,处理登录、请求构建等相关操作 +public class GTaskClient { + // 用于日志记录的标签,方便调试时定位问题,取类的简单名称 + private static final String TAG = GTaskClient.class.getSimpleName(); + // Google Tasks的基础URL + private static final String GTASK_URL = "https://mail.google.com/tasks/"; + // 用于获取数据的Google Tasks URL + private static final String GTASK_GET_URL = "https://mail.google.com/tasks/ig"; + // 用于发送数据的Google Tasks URL + private static final String GTASK_POST_URL = "https://mail.google.com/tasks/r/ig"; + // 单例模式,保存GTaskClient的唯一实例 + private static GTaskClient mInstance = null; + // 用于发送HTTP请求的HttpClient对象 + private DefaultHttpClient mHttpClient; + // 当前使用的GET请求URL + private String mGetUrl; + // 当前使用的POST请求URL + private String mPostUrl; + // 客户端版本号 + private long mClientVersion; + // 标记用户是否已登录 + private boolean mLoggedin; + // 记录上次登录时间 + private long mLastLoginTime; + // 用于标识操作的ID,每次操作后自增 + private int mActionId; + // 当前登录的Google账户 + private Account mAccount; + // 用于存储更新数据的JSON数组 + private JSONArray mUpdateArray; + + // 私有构造函数,初始化成员变量 + private GTaskClient() { + mHttpClient = null; + mGetUrl = GTASK_GET_URL; + mPostUrl = GTASK_POST_URL; + mClientVersion = -1; + mLoggedin = false; + mLastLoginTime = 0; + mActionId = 1; + mAccount = null; + mUpdateArray = null; + } + + // 获取GTaskClient单例实例的静态方法 + public static synchronized GTaskClient getInstance() { + if (mInstance == null) { + mInstance = new GTaskClient(); + } + return mInstance; + } + + // 用户登录方法,处理登录逻辑,包括检查登录状态、获取授权令牌、尝试不同登录方式等 + public boolean login(Activity activity) { + // 假设Cookie在5分钟后过期,需要重新登录 + final long interval = 1000 * 60 * 5; + if (mLastLoginTime + interval < System.currentTimeMillis()) { + mLoggedin = false; + } + + // 切换账户后也需要重新登录 + if (mLoggedin + &&!TextUtils.equals(getSyncAccount().name, NotesPreferenceActivity + .getSyncAccountName(activity))) { + mLoggedin = false; + } + + if (mLoggedin) { + Log.d(TAG, "already logged in"); + return true; + } + + mLastLoginTime = System.currentTimeMillis(); + // 登录Google账户获取授权令牌 + String authToken = loginGoogleAccount(activity, false); + if (authToken == null) { + Log.e(TAG, "login google account failed"); + return false; + } + + // 如果账户不是gmail.com或googlemail.com结尾,使用自定义域名登录 + if (!(mAccount.name.toLowerCase().endsWith("gmail.com") || mAccount.name.toLowerCase() + .endsWith("googlemail.com"))) { + StringBuilder url = new StringBuilder(GTASK_URL).append("a/"); + int index = mAccount.name.indexOf('@') + 1; + String suffix = mAccount.name.substring(index); + url.append(suffix + "/"); + mGetUrl = url.toString() + "ig"; + mPostUrl = url.toString() + "r/ig"; + + if (tryToLoginGtask(activity, authToken)) { + mLoggedin = true; + } + } + + // 尝试使用Google官方URL登录 + if (!mLoggedin) { + mGetUrl = GTASK_GET_URL; + mPostUrl = GTASK_POST_URL; + if (!tryToLoginGtask(activity, authToken)) { + return false; + } + } + + mLoggedin = true; + return true; + } + + // 登录Google账户的私有方法,获取指定账户的授权令牌 + private String loginGoogleAccount(Activity activity, boolean invalidateToken) { + String authToken; + AccountManager accountManager = AccountManager.get(activity); + // 获取所有Google类型的账户 + Account[] accounts = accountManager.getAccountsByType("com.google"); + + if (accounts.length == 0) { + Log.e(TAG, "there is no available google account"); + return null; + } + + String accountName = NotesPreferenceActivity.getSyncAccountName(activity); + Account account = null; + for (Account a : accounts) { + if (a.name.equals(accountName)) { + account = a; + break; + } + } + if (account!= null) { + mAccount = account; + } else { + Log.e(TAG, "unable to get an account with the same name in the settings"); + return null; + } + + // 获取授权令牌 + AccountManagerFuture accountManagerFuture = accountManager.getAuthToken(account, + "goanna_mobile", null, activity, null, null); + try { + Bundle authTokenBundle = accountManagerFuture.getResult(); + authToken = authTokenBundle.getString(AccountManager.KEY_AUTHTOKEN); + if (invalidateToken) { + accountManager.invalidateAuthToken("com.google", authToken); + loginGoogleAccount(activity, false); + } + } catch (Exception e) { + Log.e(TAG, "get auth token failed"); + authToken = null; + } + + return authToken; + } + + // 尝试登录Google Tasks的私有方法,处理可能的令牌过期情况 + private boolean tryToLoginGtask(Activity activity, String authToken) { + if (!loginGtask(authToken)) { + // 若登录失败,可能是授权令牌过期,重新获取并尝试登录 + authToken = loginGoogleAccount(activity, true); + if (authToken == null) { + Log.e(TAG, "login google account failed"); + return false; + } + + if (!loginGtask(authToken)) { + Log.e(TAG, "login gtask failed"); + return false; + } + } + return true; + } + + // 实际登录Google Tasks的私有方法,获取客户端版本号等信息 + private boolean loginGtask(String authToken) { + int timeoutConnection = 10000; + int timeoutSocket = 15000; + HttpParams httpParameters = new BasicHttpParams(); + // 设置连接超时和读取超时时间 + HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection); + HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket); + mHttpClient = new DefaultHttpClient(httpParameters); + BasicCookieStore localBasicCookieStore = new BasicCookieStore(); + mHttpClient.setCookieStore(localBasicCookieStore); + HttpProtocolParams.setUseExpectContinue(mHttpClient.getParams(), false); + + // 登录Google Tasks + try { + String loginUrl = mGetUrl + "?auth=" + authToken; + HttpGet httpGet = new HttpGet(loginUrl); + HttpResponse response = null; + response = mHttpClient.execute(httpGet); + + // 获取登录后的Cookie + List cookies = mHttpClient.getCookieStore().getCookies(); + boolean hasAuthCookie = false; + for (Cookie cookie : cookies) { + if (cookie.getName().contains("GTL")) { + hasAuthCookie = true; + } + } + if (!hasAuthCookie) { + Log.w(TAG, "it seems that there is no auth cookie"); + } + + // 获取客户端版本号 + String resString = getResponseContent(response.getEntity()); + String jsBegin = "_setup("; + String jsEnd = ")}"; + int begin = resString.indexOf(jsBegin); + int end = resString.lastIndexOf(jsEnd); + String jsString = null; + if (begin!= -1 && end!= -1 && begin < end) { + jsString = resString.substring(begin + jsBegin.length(), end); + } + JSONObject js = new JSONObject(jsString); + mClientVersion = js.getLong("v"); + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + return false; + } catch (Exception e) { + // 捕获所有异常 + Log.e(TAG, "httpget gtask_url failed"); + return false; + } + + return true; + } + + // 获取当前操作ID,每次调用自增1 + private int getActionId() { + return mActionId++; + } + + // 创建一个用于POST请求的HttpPost对象,并设置相关请求头 + private HttpPost createHttpPost() { + HttpPost httpPost = new HttpPost(mPostUrl); + httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8"); + httpPost.setHeader("AT", "1"); + return httpPost; + } + + // 从HttpEntity中获取响应内容的私有方法,后续还会处理编码相关逻辑 + private String getResponseContent(HttpEntity entity) throws IOException { + String contentEncoding = null; + if (entity.getContentEncoding()!= null) { + contentEncoding = entity.getContentEncoding().getValue(); + Log.d(TAG, "encoding: " + contentEncoding); + } +// 从HTTP实体中获取内容输入流,并根据内容编码处理解压 +InputStream input = entity.getContent(); +if (contentEncoding!= null && contentEncoding.equalsIgnoreCase("gzip")) { + // 如果是gzip编码,使用GZIPInputStream进行解压 + input = new GZIPInputStream(entity.getContent()); +} else if (contentEncoding!= null && contentEncoding.equalsIgnoreCase("deflate")) { + Inflater inflater = new Inflater(true); + // 如果是deflate编码,使用InflaterInputStream解压 + input = new InflaterInputStream(entity.getContent(), inflater); +} + +try { + InputStreamReader isr = new InputStreamReader(input); + BufferedReader br = new BufferedReader(isr); + StringBuilder sb = new StringBuilder(); + + // 逐行读取输入流内容,拼接到StringBuilder中 + while (true) { + String buff = br.readLine(); + if (buff == null) { + return sb.toString(); + } + sb = sb.append(buff); + } +} finally { + // 最终关闭输入流 + input.close(); +} +} +// 发送POST请求的方法,接收一个JSONObject参数 +private JSONObject postRequest(JSONObject js) throws NetworkFailureException { + // 如果未登录,抛出异常提示先登录 + if (!mLoggedin) { + Log.e(TAG, "please login first"); + throw new ActionFailureException("not logged in"); + } + + HttpPost httpPost = createHttpPost(); + try { + LinkedList list = new LinkedList(); + list.add(new BasicNameValuePair("r", js.toString())); + UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list, "UTF-8"); + httpPost.setEntity(entity); + + // 执行POST请求 + HttpResponse response = mHttpClient.execute(httpPost); + // 获取响应内容并转换为字符串 + String jsString = getResponseContent(response.getEntity()); + // 将字符串转换为JSONObject并返回 + return new JSONObject(jsString); + + } catch (ClientProtocolException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new NetworkFailureException("postRequest failed"); + } catch (IOException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new NetworkFailureException("postRequest failed"); + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("unable to convert response content to jsonobject"); + } catch (Exception e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("error occurs when posting request"); + } +} +// 创建任务的方法,接收一个Task对象参数 +public void createTask(Task task) throws NetworkFailureException { + // 先提交之前积累的更新 + commitUpdate(); + try { + JSONObject jsPost = new JSONObject(); + JSONArray actionList = new JSONArray(); + + // 将任务的创建动作添加到action_list数组 + actionList.put(task.getCreateAction(getActionId())); + jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, actionList); + + // 设置客户端版本号 + jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion); + + // 发送POST请求 + JSONObject jsResponse = postRequest(jsPost); + JSONObject jsResult = (JSONObject) jsResponse.getJSONArray( + GTaskStringUtils.GTASK_JSON_RESULTS).get(0); + // 从响应中获取新任务的ID并设置到任务对象 + task.setGid(jsResult.getString(GTaskStringUtils.GTASK_JSON_NEW_ID)); + + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("create task: handing jsonobject failed"); + } +} +// 创建任务列表的方法,接收一个TaskList对象参数 +public void createTaskList(TaskList tasklist) throws NetworkFailureException { + // 提交之前积累的更新 + commitUpdate(); + try { + JSONObject jsPost = new JSONObject(); + JSONArray actionList = new JSONArray(); + + // 将任务列表的创建动作添加到action_list数组 + actionList.put(tasklist.getCreateAction(getActionId())); + jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, actionList); + + // 设置客户端版本号 + jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion); + + // 发送POST请求 + JSONObject jsResponse = postRequest(jsPost); + JSONObject jsResult = (JSONObject) jsResponse.getJSONArray( + GTaskStringUtils.GTASK_JSON_RESULTS).get(0); + // 从响应中获取新任务列表的ID并设置到任务列表对象 + tasklist.setGid(jsResult.getString(GTaskStringUtils.GTASK_JSON_NEW_ID)); + + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("create tasklist: handing jsonobject failed"); + } +} +// 提交更新的方法 +public void commitUpdate() throws NetworkFailureException { + // 如果有积累的更新数组 + if (mUpdateArray!= null) { + try { + JSONObject jsPost = new JSONObject(); + + // 将更新数组添加到请求的action_list中 + jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, mUpdateArray); + + // 设置客户端版本号 + jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion); + + postRequest(jsPost); + // 清空更新数组 + mUpdateArray = null; + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("commit update: handing jsonobject failed"); + } + } +} +// 添加更新节点的方法,接收一个Node对象参数 +public void addUpdateNode(Node node) throws NetworkFailureException { + if (node!= null) { + // 过多的更新项可能导致错误,限制最多10项 + if (mUpdateArray!= null && mUpdateArray.length() > 10) { + commitUpdate(); + } + + if (mUpdateArray == null) + mUpdateArray = new JSONArray(); + // 将节点的更新动作添加到更新数组 + mUpdateArray.put(node.getUpdateAction(getActionId())); + } +} +// 移动任务的方法,接收任务、原父任务列表、目标父任务列表对象 +public void moveTask(Task task, TaskList preParent, TaskList curParent) + throws NetworkFailureException { + // 先提交之前积累的更新 + commitUpdate(); + try { + JSONObject jsPost = new JSONObject(); + JSONArray actionList = new JSONArray(); + JSONObject action = new JSONObject(); + + // 设置动作类型为移动 + action.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE, + GTaskStringUtils.GTASK_JSON_ACTION_TYPE_MOVE); + action.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, getActionId()); + action.put(GTaskStringUtils.GTASK_JSON_ID, task.getGid()); + if (preParent == curParent && task.getPriorSibling()!= null) { + // 如果在同一任务列表内移动且不是第一个任务,设置前置兄弟任务ID + action.put(GTaskStringUtils.GTASK_JSON_PRIOR_SIBLING_ID, task.getPriorSibling()); + } + action.put(GTaskStringUtils.GTASK_JSON_SOURCE_LIST, preParent.getGid()); + action.put(GTaskStringUtils.GTASK_JSON_DEST_PARENT, curParent.getGid()); + if (preParent!= curParent) { + // 如果在不同任务列表间移动,设置目标任务列表ID + action.put(GTaskStringUtils.GTASK_JSON_DEST_LIST, curParent.getGid()); + } + actionList.put(action); + jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, actionList); + + // 设置客户端版本号 + jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion); + + postRequest(jsPost); + + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("move task: handing jsonobject failed"); + } +} +// 删除节点的方法,接收一个Node对象参数 +public void deleteNode(Node node) throws NetworkFailureException { + // 先提交之前积累的更新 + commitUpdate(); + try { + JSONObject jsPost = new JSONObject(); + JSONArray actionList = new JSONArray(); + + // 设置节点为已删除状态 + node.setDeleted(true); + // 将节点的更新动作添加到action_list + actionList.put(node.getUpdateAction(getActionId())); + jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, actionList); + + // 设置客户端版本号 + jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion); + + postRequest(jsPost); + // 清空更新数组 + mUpdateArray = null; + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("delete node: handing jsonobject failed"); + } +} +// 获取所有任务列表的方法 +public JSONArray getTaskLists() throws NetworkFailureException { + // 如果未登录,抛出异常提示先登录 + if (!mLoggedin) { + Log.e(TAG, "please login first"); + throw new ActionFailureException("not logged in"); + } + + try { + HttpGet httpGet = new HttpGet(mGetUrl); + HttpResponse response = null; + response = mHttpClient.execute(httpGet); + + // 获取响应内容 + String resString = getResponseContent(response.getEntity()); + String jsBegin = "_setup("; + String jsEnd = ")}"; + int begin = resString.indexOf(jsBegin); + int end = resString.lastIndexOf(jsEnd); + String jsString = null; + if (begin!= -1 && end!= -1 && begin < end) { + jsString = resString.substring(begin + jsBegin.length(), end); + } + JSONObject js = new JSONObject(jsString); + // 从响应JSON中提取任务列表数组并返回 + return js.getJSONObject("t").getJSONArray(GTaskStringUtils.GTASK_JSON_LISTS); + } catch (ClientProtocolException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new NetworkFailureException("gettasklists: httpget failed"); + } catch (IOException e) { + Log.e(TAG, e.toString(); + e.printStackTrace(); + throw new NetworkFailureException("gettasklists: httpget failed"); + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("get task lists: handing jasonobject failed"); + } +} +// 获取指定任务列表的方法,接收任务列表ID参数 +public JSONArray getTaskList(String listGid) throws NetworkFailureException { + // 提交之前积累的更新 + commitUpdate(); + try { + JSONObject jsPost = new JSONObject(); + JSONArray actionList = new JSONArray(); + JSONObject action = new JSONObject(); + + // 设置动作类型为获取全部 + action.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE, + GTaskStringUtils.GTASK_JSON_ACTION_TYPE_GETALL); + action.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, getActionId()); + action.put(GTaskStringUtils.GTASK_JSON_LIST_ID, listGid); + action.put(GTaskStringUtils.GTASK_JSON_GET_DELETED, false); + actionList.put(action); + jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, actionList); + + // 设置客户端版本号 + jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion); + + JSONObject jsResponse = postRequest(jsPost); + // 返回任务列表对应的任务数组 + return jsResponse.getJSONArray(GTaskStringUtils.GTASK_JSON_TASKS); + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("get task list: handing jsonobject failed"); + } +} +// 获取同步账户的方法 +public Account getSyncAccount() { + return mAccount; +} +// 重置更新数组的方法 +public void resetUpdateArray() { + mUpdateArray = null; +} + + + + +3、GTaskManager.java + +4、GTaskManager.java +package net.micode.notes.gtask.remote; + +public class GTaskManager { + private static final String TAG = GTaskManager.class.getSimpleName(); + public static final int STATE_SUCCESS = 0; + public static final int STATE_NETWORK_ERROR = 1; + public static final int STATE_INTERNAL_ERROR = 2; + public static final int STATE_SYNC_IN_PROGRESS = 3; + public static final int STATE_SYNC_CANCELLED = 4; + private static GTaskManager mInstance = null; + + private Activity mActivity; + private Context mContext; + private ContentResolver mContentResolver; + private boolean mSyncing; + private boolean mCancelled; + private HashMap mGTaskListHashMap; + private HashMap mGTaskHashMap; + private HashMap mMetaHashMap; + private TaskList mMetaList; + private HashSet mLocalDeleteIdMap; + private HashMap mGidToNid; + private HashMap mNidToGid; + +private GTaskManager() { + //对象初始化函数 + mSyncing = false; + //正在同步,flase代表未执行 + mCancelled = false; + //全局标识,flase代表可以执行 + mGTaskListHashMap = new HashMap(); + //<>代表Java的泛型,就是创建一个用类型作为参数的类。 + mGTaskHashMap = new HashMap(); + mMetaHashMap = new HashMap(); + mMetaList = null; + mLocalDeleteIdMap = new HashSet(); + mGidToNid = new HashMap(); //GoogleID to NodeID?? + mNidToGid = new HashMap(); //NodeID to GoogleID???通过hashmap散列表建立映射 + } + + /** + * 包含关键字synchronized,语言级同步,指明该函数可能运行在多线程的环境下。 + * 功能:类初始化函数 + * @author TTS + * @return GtaskManger + */ +public static synchronized GTaskManager getInstance() { + //可能运行在多线程环境下,使用语言级同步--synchronized + if (mInstance == null) { + mInstance = new GTaskManager(); + } + return mInstance; + } + + /** + * 包含关键字synchronized,语言级同步,指明该函数可能运行在多线程的环境下。 + * @author TTS + * @param activity + */ + public synchronized void setActivityContext(Activity activity) { + // used for getting auth token + mActivity = activity; + } + + /** + * 核心函数 + * 功能:实现了本地同步操作和远端同步操作 + * @author TTS + * @param context-----获取上下文 + * @param asyncTask-------用于同步的异步操作类 + * @return int + */ +public int sync(Context context, GTaskASyncTask asyncTask) { + //核心函数 + if (mSyncing) { + Log.d(TAG, "Sync is in progress"); + //创建日志文件(调试信息),debug + return STATE_SYNC_IN_PROGRESS; + } + mContext = context; + mContentResolver = mContext.getContentResolver(); + mSyncing = true; + mCancelled = false; + mGTaskListHashMap.clear(); + mGTaskHashMap.clear(); + mMetaHashMap.clear(); + mLocalDeleteIdMap.clear(); + mGidToNid.clear(); + mNidToGid.clear(); + + try { + GTaskClient client = GTaskClient.getInstance(); //getInstance即为创建一个实例,client--客户机 + client.resetUpdateArray(); +//JSONArray类型,reset即置为NULL + + // login google task + if (!mCancelled) { + if (!client.login(mActivity)) { + throw new NetworkFailureException("login google task failed"); + } + } + + // get the task list from google + asyncTask.publishProgess(mContext.getString(R.string.sync_progress_init_list)); + initGTaskList(); + //获取Google上的JSONtasklist转为本地TaskList + + // do content sync work + asyncTask.publishProgess(mContext.getString(R.string.sync_progress_syncing)); + syncContent(); + } catch (NetworkFailureException e) { + //分为两种异常,此类异常为网络异常 + Log.e(TAG, e.toString()); + //创建日志文件(调试信息),error + return STATE_NETWORK_ERROR; + } catch (ActionFailureException e) { + //此类异常为操作异常 + Log.e(TAG, e.toString()); + return STATE_INTERNAL_ERROR; + } catch (Exception e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + return STATE_INTERNAL_ERROR; + } finally { + mGTaskListHashMap.clear(); + mGTaskHashMap.clear(); + mMetaHashMap.clear(); + mLocalDeleteIdMap.clear(); + mGidToNid.clear(); + mNidToGid.clear(); + mSyncing = false; + } + + return mCancelled ? STATE_SYNC_CANCELLED : STATE_SUCCESS; + } + + /** + *功能:初始化GtaskList,获取Google上的JSONtasklist转为本地TaskList。 + *获得的数据存储在mMetaList,mGTaskListHashMap,mGTaskHashMap + *@author TTS + *@exception NetworkFailureException + *@return void + */ + private void initGTaskList() throws NetworkFailureException { + if (mCancelled) + return; + GTaskClient client = GTaskClient.getInstance(); +//getInstance即为创建一个实例,client应指远端客户机 + try { + //Json对象是Name Value对(即子元素)的无序集合,相当于一个Map对象。JsonObject类是bantouyan-json库对Json对象的抽象,提供操纵Json对象的各种方法。 + //其格式为{"key1":value1,"key2",value2....};key 必须是字符串。 + //因为ajax请求不刷新页面,但配合js可以实现局部刷新,因此json常常被用来作为异步请求的返回对象使用。 + JSONArray jsTaskLists = client.getTaskLists(); //原注释为get task list------lists + + // init meta list first + mMetaList = null; //TaskList类型 + for (int i = 0; i < jsTaskLists.length(); i++) { + JSONObject object = jsTaskLists.getJSONObject(i); //JSONObject与JSONArray一个为对象,一个为数组。此处取出单个JASONObject + +String gid = object.getString(GTaskStringUtils.GTASK_JSON_ID); + +String name = object.getString(GTaskStringUtils.GTASK_JSON_NAME); + + if (name.equals(GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_META)) +{ + mMetaList = new TaskList(); //MetaList意为元表,Tasklist类型,此处为初始化 + mMetaList.setContentByRemoteJSON(object); + //将JSON中部分数据复制到自己定义的对象中相对应的数据:name->mname... + + // load meta data + JSONArray jsMetas = client.getTaskList(gid); + //原注释为get action_list------list + for (int j = 0; j < jsMetas.length(); j++) { + object = (JSONObject) jsMetas.getJSONObject(j); + MetaData metaData = new MetaData(); //继承自Node + metaData.setContentByRemoteJSON(object); + if (metaData.isWorthSaving()) { + //if not worth to save,metadata将不加入mMetaList + mMetaList.addChildTask(metaData); + if (metaData.getGid() != null) { + mMetaHashMap.put(metaData.getRelatedGid(), metaData); + } + } + } + } + } + + // create meta list if not existed + if (mMetaList == null) { + mMetaList = new TaskList(); + mMetaList.setName(GTaskStringUtils.MIUI_FOLDER_PREFFIX + + GTaskStringUtils.FOLDER_META); + GTaskClient.getInstance().createTaskList(mMetaList); + } + + // init task list + for (int i = 0; i < jsTaskLists.length(); i++) { + JSONObject object = jsTaskLists.getJSONObject(i); + String gid = object.getString(GTaskStringUtils.GTASK_JSON_ID); +//通过getString函数传入本地某个标志数据的名称,获取其在远端的名称。 + String name = object.getString(GTaskStringUtils.GTASK_JSON_NAME); + + if (name.startsWith(GTaskStringUtils.MIUI_FOLDER_PREFFIX) + && !name.equals(GTaskStringUtils.MIUI_FOLDER_PREFFIX + + GTaskStringUtils.FOLDER_META)) { + TaskList tasklist = new TaskList(); //继承自Node + tasklist.setContentByRemoteJSON(object); + mGTaskListHashMap.put(gid, tasklist); + mGTaskHashMap.put(gid, tasklist); + //加两遍 + + // load tasks + JSONArray jsTasks = client.getTaskList(gid); + for (int j = 0; j < jsTasks.length(); j++) { + object = (JSONObject) jsTasks.getJSONObject(j); + gid = object.getString(GTaskStringUtils.GTASK_JSON_ID); + Task task = new Task(); + task.setContentByRemoteJSON(object); + if (task.isWorthSaving()) { + task.setMetaInfo(mMetaHashMap.get(gid)); + tasklist.addChildTask(task); + mGTaskHashMap.put(gid, task); + } + } + } + } + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("initGTaskList: handing JSONObject failed"); + } + } + + /** + * 功能:本地内容同步操作 + * @throws NetworkFailureException + * @return 无返回值 + */ +private void syncContent() throws NetworkFailureException { + //本地内容同步操作 + int syncType; + Cursor c = null; + //数据库指针 + String gid; //GoogleID + Node node; //Node包含Sync_Action的不同类型 + + mLocalDeleteIdMap.clear(); //HashSet类型 + + if (mCancelled) { + return; + } + + // for local deleted note + try { + c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE, + "(type<>? AND parent_id=?)", new String[] { + String.valueOf(Notes.TYPE_SYSTEM), String.valueOf(Notes.ID_TRASH_FOLER) + }, null); + if (c != null) { + while (c.moveToNext()) { + gid = c.getString(SqlNote.GTASK_ID_COLUMN); + node = mGTaskHashMap.get(gid); + if (node != null) { + mGTaskHashMap.remove(gid); + doContentSync(Node.SYNC_ACTION_DEL_REMOTE, node, c); + } + + mLocalDeleteIdMap.add(c.getLong(SqlNote.ID_COLUMN)); + } + } else { + Log.w(TAG, "failed to query trash folder"); + } + } finally { + if (c != null) { + c.close(); + c = null; + } + } + + // sync folder first + syncFolder(); + + // for note existing in database + try { + c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE, + "(type=? AND parent_id<>?)", new String[] { + String.valueOf(Notes.TYPE_NOTE), String.valueOf(Notes.ID_TRASH_FOLER) + }, NoteColumns.TYPE + " DESC"); + if (c != null) { + while (c.moveToNext()) { + gid = c.getString(SqlNote.GTASK_ID_COLUMN); + node = mGTaskHashMap.get(gid); + if (node != null) { + mGTaskHashMap.remove(gid); + mGidToNid.put(gid, c.getLong(SqlNote.ID_COLUMN)); //通过hashmap建立联系 + mNidToGid.put(c.getLong(SqlNote.ID_COLUMN), gid); //通过hashmap建立联系 + syncType = node.getSyncAction(c); + } else { + if (c.getString(SqlNote.GTASK_ID_COLUMN).trim().length() == 0) { + // local add + syncType = Node.SYNC_ACTION_ADD_REMOTE; + } else { + // remote delete + syncType = Node.SYNC_ACTION_DEL_LOCAL; + } + } + doContentSync(syncType, node, c); + } + } else { + Log.w(TAG, "failed to query existing note in database"); + } + + } finally { + if (c != null) { + c.close(); + c = null; + } + } + + // go through remaining items + Iterator> iter = mGTaskHashMap.entrySet().iterator(); //Iterator迭代器 + while (iter.hasNext()) { + Map.Entry entry = iter.next(); + node = entry.getValue(); + doContentSync(Node.SYNC_ACTION_ADD_LOCAL, node, null); + } + + // mCancelled can be set by another thread, so we neet to check one by //thread----线程 + // one + // clear local delete table + if (!mCancelled) { + if (!DataUtils.batchDeleteNotes(mContentResolver, mLocalDeleteIdMap)) { + throw new ActionFailureException("failed to batch-delete local deleted notes"); + } + } + + // refresh local sync id + if (!mCancelled) { + GTaskClient.getInstance().commitUpdate(); + refreshLocalSyncId(); + } + + } + + /** + * 功能: + * @author TTS + * @throws NetworkFailureException + */ + private void syncFolder() throws NetworkFailureException { + Cursor c = null; + String gid; + Node node; + int syncType; + + if (mCancelled) { + return; + } + + // for root folder + try { + c = mContentResolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, + Notes.ID_ROOT_FOLDER), SqlNote.PROJECTION_NOTE, null, null, null); + if (c != null) { + c.moveToNext(); + gid = c.getString(SqlNote.GTASK_ID_COLUMN); + node = mGTaskHashMap.get(gid); + if (node != null) { + mGTaskHashMap.remove(gid); + mGidToNid.put(gid, (long) Notes.ID_ROOT_FOLDER); + mNidToGid.put((long) Notes.ID_ROOT_FOLDER, gid); + // for system folder, only update remote name if necessary + if (!node.getName().equals( + GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_DEFAULT)) + doContentSync(Node.SYNC_ACTION_UPDATE_REMOTE, node, c); + } else { + doContentSync(Node.SYNC_ACTION_ADD_REMOTE, node, c); + } + } else { + Log.w(TAG, "failed to query root folder"); + } + } finally { + if (c != null) { + c.close(); + c = null; + } + } + + // for call-note folder + try { + c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE, "(_id=?)", + new String[] { + String.valueOf(Notes.ID_CALL_RECORD_FOLDER) + }, null); + if (c != null) { + if (c.moveToNext()) { + gid = c.getString(SqlNote.GTASK_ID_COLUMN); + node = mGTaskHashMap.get(gid); + if (node != null) { + mGTaskHashMap.remove(gid); + mGidToNid.put(gid, (long) Notes.ID_CALL_RECORD_FOLDER); + mNidToGid.put((long) Notes.ID_CALL_RECORD_FOLDER, gid); + // for system folder, only update remote name if + // necessary + if (!node.getName().equals( + GTaskStringUtils.MIUI_FOLDER_PREFFIX + + GTaskStringUtils.FOLDER_CALL_NOTE)) + doContentSync(Node.SYNC_ACTION_UPDATE_REMOTE, node, c); + } else { + doContentSync(Node.SYNC_ACTION_ADD_REMOTE, node, c); + } + } + } else { + Log.w(TAG, "failed to query call note folder"); + } + } finally { + if (c != null) { + c.close(); + c = null; + } + } + + // for local existing folders + try { + c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE, + "(type=? AND parent_id<>?)", new String[] { + String.valueOf(Notes.TYPE_FOLDER), String.valueOf(Notes.ID_TRASH_FOLER) + }, NoteColumns.TYPE + " DESC"); + if (c != null) { + while (c.moveToNext()) { + gid = c.getString(SqlNote.GTASK_ID_COLUMN); + node = mGTaskHashMap.get(gid); + if (node != null) { + mGTaskHashMap.remove(gid); + mGidToNid.put(gid, c.getLong(SqlNote.ID_COLUMN)); + mNidToGid.put(c.getLong(SqlNote.ID_COLUMN), gid); + syncType = node.getSyncAction(c); + } else { + if (c.getString(SqlNote.GTASK_ID_COLUMN).trim().length() == 0) { + // local add + syncType = Node.SYNC_ACTION_ADD_REMOTE; + } else { + // remote delete + syncType = Node.SYNC_ACTION_DEL_LOCAL; + } + } + doContentSync(syncType, node, c); + } + } else { + Log.w(TAG, "failed to query existing folder"); + } + } finally { + if (c != null) { + c.close(); + c = null; + } + } + + // for remote add folders + Iterator> iter = mGTaskListHashMap.entrySet().iterator(); + while (iter.hasNext()) { + Map.Entry entry = iter.next(); + gid = entry.getKey(); + node = entry.getValue(); + if (mGTaskHashMap.containsKey(gid)) { + mGTaskHashMap.remove(gid); + doContentSync(Node.SYNC_ACTION_ADD_LOCAL, node, null); + } + } + + if (!mCancelled) + GTaskClient.getInstance().commitUpdate(); + } + + /** + * 功能:syncType分类,addLocalNode,addRemoteNode,deleteNode,updateLocalNode,updateRemoteNode + * @author TTS + * @param syncType + * @param node + * @param c + * @throws NetworkFailureException + */ + private void doContentSync(int syncType, Node node, Cursor c) throws NetworkFailureException { + if (mCancelled) { + return; + } + + MetaData meta; + switch (syncType) { + case Node.SYNC_ACTION_ADD_LOCAL: + addLocalNode(node); + break; + case Node.SYNC_ACTION_ADD_REMOTE: + addRemoteNode(node, c); + break; + case Node.SYNC_ACTION_DEL_LOCAL: + meta = mMetaHashMap.get(c.getString(SqlNote.GTASK_ID_COLUMN)); + if (meta != null) { + GTaskClient.getInstance().deleteNode(meta); + } + mLocalDeleteIdMap.add(c.getLong(SqlNote.ID_COLUMN)); + break; + case Node.SYNC_ACTION_DEL_REMOTE: + meta = mMetaHashMap.get(node.getGid()); + if (meta != null) { + GTaskClient.getInstance().deleteNode(meta); + } + GTaskClient.getInstance().deleteNode(node); + break; + case Node.SYNC_ACTION_UPDATE_LOCAL: + updateLocalNode(node, c); + break; + case Node.SYNC_ACTION_UPDATE_REMOTE: + updateRemoteNode(node, c); + break; + case Node.SYNC_ACTION_UPDATE_CONFLICT: + // merging both modifications maybe a good idea + // right now just use local update simply + updateRemoteNode(node, c); + break; + case Node.SYNC_ACTION_NONE: + break; + case Node.SYNC_ACTION_ERROR: + default: + throw new ActionFailureException("unkown sync action type"); + } + } + + /** + * 功能:本地增加Node + * @author TTS + * @param node + * @throws NetworkFailureException + */ + private void addLocalNode(Node node) throws NetworkFailureException { + if (mCancelled) { + return; + } + + SqlNote sqlNote; + if (node instanceof TaskList) { + if (node.getName().equals( + GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_DEFAULT)) { + sqlNote = new SqlNote(mContext, Notes.ID_ROOT_FOLDER); + } else if (node.getName().equals( + GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_CALL_NOTE)) { + sqlNote = new SqlNote(mContext, Notes.ID_CALL_RECORD_FOLDER); + } else { + sqlNote = new SqlNote(mContext); + sqlNote.setContent(node.getLocalJSONFromContent()); + sqlNote.setParentId(Notes.ID_ROOT_FOLDER); + } + } else { + sqlNote = new SqlNote(mContext); + JSONObject js = node.getLocalJSONFromContent(); + try { + if (js.has(GTaskStringUtils.META_HEAD_NOTE)) { + JSONObject note = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE); + if (note.has(NoteColumns.ID)) { + long id = note.getLong(NoteColumns.ID); + if (DataUtils.existInNoteDatabase(mContentResolver, id)) { + // the id is not available, have to create a new one + note.remove(NoteColumns.ID); + } + } + } + + if (js.has(GTaskStringUtils.META_HEAD_DATA)) { + JSONArray dataArray = js.getJSONArray(GTaskStringUtils.META_HEAD_DATA); + for (int i = 0; i < dataArray.length(); i++) { + JSONObject data = dataArray.getJSONObject(i); + if (data.has(DataColumns.ID)) { + long dataId = data.getLong(DataColumns.ID); + if (DataUtils.existInDataDatabase(mContentResolver, dataId)) { + // the data id is not available, have to create + // a new one + data.remove(DataColumns.ID); + } + } + } + + } + } catch (JSONException e) { + Log.w(TAG, e.toString()); + e.printStackTrace(); + } + sqlNote.setContent(js); + + Long parentId = mGidToNid.get(((Task) node).getParent().getGid()); + if (parentId == null) { + Log.e(TAG, "cannot find task's parent id locally"); + throw new ActionFailureException("cannot add local node"); + } + sqlNote.setParentId(parentId.longValue()); + } + + // create the local node + sqlNote.setGtaskId(node.getGid()); + sqlNote.commit(false); + + // update gid-nid mapping + mGidToNid.put(node.getGid(), sqlNote.getId()); + mNidToGid.put(sqlNote.getId(), node.getGid()); + + // update meta + updateRemoteMeta(node.getGid(), sqlNote); + } + + /** + * 功能:update本地node + * @author TTS + * @param node + * ----同步操作的基础数据类型 + * @param c + * ----Cursor + * @throws NetworkFailureException + */ + private void updateLocalNode(Node node, Cursor c) throws NetworkFailureException { + if (mCancelled) { + return; + } + + SqlNote sqlNote; + // update the note locally + sqlNote = new SqlNote(mContext, c); + sqlNote.setContent(node.getLocalJSONFromContent()); + + Long parentId = (node instanceof Task) ? mGidToNid.get(((Task) node).getParent().getGid()) + : new Long(Notes.ID_ROOT_FOLDER); + if (parentId == null) { + Log.e(TAG, "cannot find task's parent id locally"); + throw new ActionFailureException("cannot update local node"); + } + sqlNote.setParentId(parentId.longValue()); + sqlNote.commit(true); + + // update meta info + updateRemoteMeta(node.getGid(), sqlNote); + } + + /** + * 功能:远程增加Node + * 需要updateRemoteMeta + * @author TTS + * @param node + * ----同步操作的基础数据类型 + * @param c + * --Cursor + * @throws NetworkFailureException + */ + private void addRemoteNode(Node node, Cursor c) throws NetworkFailureException { + if (mCancelled) { + return; + } + + SqlNote sqlNote = new SqlNote(mContext, c); //从本地mContext中获取内容 + Node n; + + // update remotely + if (sqlNote.isNoteType()) { + Task task = new Task(); + task.setContentByLocalJSON(sqlNote.getContent()); + + String parentGid = mNidToGid.get(sqlNote.getParentId()); + if (parentGid == null) { + Log.e(TAG, "cannot find task's parent tasklist"); //调试信息 + throw new ActionFailureException("cannot add remote task"); + } + mGTaskListHashMap.get(parentGid).addChildTask(task); //在本地生成的GTaskList中增加子结点 + + //登录远程服务器,创建Task + GTaskClient.getInstance().createTask(task); + n = (Node) task; + + // add meta + updateRemoteMeta(task.getGid(), sqlNote); + } else { + TaskList tasklist = null; + + // we need to skip folder if it has already existed + String folderName = GTaskStringUtils.MIUI_FOLDER_PREFFIX; + if (sqlNote.getId() == Notes.ID_ROOT_FOLDER) + folderName += GTaskStringUtils.FOLDER_DEFAULT; + else if (sqlNote.getId() == Notes.ID_CALL_RECORD_FOLDER) + folderName += GTaskStringUtils.FOLDER_CALL_NOTE; + else + folderName += sqlNote.getSnippet(); + + //iterator迭代器,通过统一的接口迭代所有的map元素 + Iterator> iter = mGTaskListHashMap.entrySet().iterator(); + while (iter.hasNext()) { + Map.Entry entry = iter.next(); + String gid = entry.getKey(); + TaskList list = entry.getValue(); + + if (list.getName().equals(folderName)) { + tasklist = list; + if (mGTaskHashMap.containsKey(gid)) { + mGTaskHashMap.remove(gid); + } + break; + } + } + + // no match we can add now + if (tasklist == null) { + tasklist = new TaskList(); + tasklist.setContentByLocalJSON(sqlNote.getContent()); + GTaskClient.getInstance().createTaskList(tasklist); + mGTaskListHashMap.put(tasklist.getGid(), tasklist); + } + n = (Node) tasklist; + } + + // update local note + sqlNote.setGtaskId(n.getGid()); + sqlNote.commit(false); + sqlNote.resetLocalModified(); + sqlNote.commit(true); + + // gid-id mapping //创建id间的映射 + mGidToNid.put(n.getGid(), sqlNote.getId()); + mNidToGid.put(sqlNote.getId(), n.getGid()); + } + + /** + * 功能:更新远端的Node,包含meta更新(updateRemoteMeta) + * @author TTS + * @param node + * ----同步操作的基础数据类型 + * @param c + * --Cursor + * @throws NetworkFailureException + */ + private void updateRemoteNode(Node node, Cursor c) throws NetworkFailureException { + if (mCancelled) { + return; + } + + SqlNote sqlNote = new SqlNote(mContext, c); + + // update remotely + node.setContentByLocalJSON(sqlNote.getContent()); + GTaskClient.getInstance().addUpdateNode(node); //GTaskClient用途为从本地登陆远端服务器 + + // update meta + updateRemoteMeta(node.getGid(), sqlNote); + + // move task if necessary + if (sqlNote.isNoteType()) { + Task task = (Task) node; + TaskList preParentList = task.getParent(); + //preParentList为通过node获取的父节点列表 + + String curParentGid = mNidToGid.get(sqlNote.getParentId()); + //curParentGid为通过光标在数据库中找到sqlNote的mParentId,再通过mNidToGid由long类型转为String类型的Gid + + if (curParentGid == null) { + Log.e(TAG, "cannot find task's parent tasklist"); + throw new ActionFailureException("cannot update remote task"); + } + TaskList curParentList = mGTaskListHashMap.get(curParentGid); + //通过HashMap找到对应Gid的TaskList + + if (preParentList != curParentList) +{ + preParentList.removeChildTask(task); + curParentList.addChildTask(task); + GTaskClient.getInstance().moveTask(task, preParentList, curParentList); + } + } + + // clear local modified flag + sqlNote.resetLocalModified(); + //commit到本地数据库 + sqlNote.commit(true); + } + + /** + * 功能:升级远程meta。 meta---元数据----计算机文件系统管理数据---管理数据的数据。 + * @author TTS + * @param gid + * ---GoogleID为String类型 + * @param sqlNote + * ---同步前的数据库操作,故使用类SqlNote + * @throws NetworkFailureException + */ + private void updateRemoteMeta(String gid, SqlNote sqlNote) throws NetworkFailureException { + if (sqlNote != null && sqlNote.isNoteType()) { + MetaData metaData = mMetaHashMap.get(gid); + if (metaData != null) { + metaData.setMeta(gid, sqlNote.getContent()); + GTaskClient.getInstance().addUpdateNode(metaData); + } else { + metaData = new MetaData(); + metaData.setMeta(gid, sqlNote.getContent()); + mMetaList.addChildTask(metaData); + mMetaHashMap.put(gid, metaData); + GTaskClient.getInstance().createTask(metaData); + } + } + } + + /** + * 功能:刷新本地,给sync的ID对应上最后更改过的对象 + * @author TTS + * @return void + * @throws NetworkFailureException + */ + private void refreshLocalSyncId() throws NetworkFailureException { + if (mCancelled) { + return; + } + + // get the latest gtask list //获取最近的(最晚的) +gtask list + mGTaskHashMap.clear(); + mGTaskListHashMap.clear(); + mMetaHashMap.clear(); + initGTaskList(); + + Cursor c = null; + try { + c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE, + "(type<>? AND parent_id<>?)", new String[] { + String.valueOf(Notes.TYPE_SYSTEM), String.valueOf(Notes.ID_TRASH_FOLER) + }, NoteColumns.TYPE + " DESC"); //query语句:五个参数,NoteColumns.TYPE + " DESC"-----为按类型递减顺序返回查询结果。new String[] {String.valueOf(Notes.TYPE_SYSTEM), String.valueOf(Notes.ID_TRASH_FOLER)}------为选择参数。"(type<>? AND parent_id<>?)"-------指明返回行过滤器。SqlNote.PROJECTION_NOTE--------应返回的数据列的名字。Notes.CONTENT_NOTE_URI--------contentProvider包含所有数据集所对应的uri + if (c != null) { + while (c.moveToNext()) { + String gid = c.getString(SqlNote.GTASK_ID_COLUMN); + Node node = mGTaskHashMap.get(gid); + if (node != null) { + mGTaskHashMap.remove(gid); + ContentValues values = new ContentValues(); //在ContentValues中创建键值对。准备通过contentResolver写入数据 + values.put(NoteColumns.SYNC_ID, node.getLastModified()); + mContentResolver.update(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, //进行批量更改,选择参数为NULL,应该可以用insert替换,参数分别为表名和需要更新的value对象。 + c.getLong(SqlNote.ID_COLUMN)), values, null, null); + } else { + Log.e(TAG, "something is missed"); + throw new ActionFailureException( + "some local items don't have gid after sync"); + } + } + } else { + Log.w(TAG, "failed to query local note to refresh sync id"); + } + } finally { + if (c != null) { + c.close(); + c = null; + } + } + } + + /** + * 功能:获取同步账号,mAccount.name + * @author TTS + * @return String + */ + public String getSyncAccount() { + return GTaskClient.getInstance().getSyncAccount().name; + } + + /** + * 功能:取消同步,置mCancelled为true + * @author TTS + */ + public void cancelSync() { + mCancelled = true; + } +} + + + +4、GTaskSyncService.java +package net.micode.notes.gtask.remote; + +import android.app.Activity; +import android.app.Service; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.os.IBinder; + +// GTaskSyncService是一个Android服务类,用于处理与Google Tasks同步相关的操作,例如开始同步、取消同步 +public class GTaskSyncService extends Service { + // 用于在Intent中传递同步操作类型的字符串常量 + public final static String ACTION_STRING_NAME = "sync_action_type"; + // 表示开始同步的操作码 + public final static int ACTION_START_SYNC = 0; + // 表示取消同步的操作码 + public final static int ACTION_CANCEL_SYNC = 1; + // 表示无效操作的操作码 + public final static int ACTION_INVALID = 2; + + // 用于广播同步服务状态的Intent的action字符串 + public final static String GTASK_SERVICE_BROADCAST_NAME = "net.micode.notes.gtask.remote.gtask_sync_service"; + // 用于在广播中传递是否正在同步的状态的键 + public final static String GTASK_SERVICE_BROADCAST_IS_SYNCING = "isSyncing"; + // 用于在广播中传递同步进度消息的键 + public final static String GTASK_SERVICE_BROADCAST_PROGRESS_MSG = "progressMsg"; + + // 用于实际执行同步任务的异步任务对象,静态成员以便全局访问和控制 + private static GTaskASyncTask mSyncTask = null; + // 用于保存同步进度消息的字符串 + private static String mSyncProgress = ""; + + // 启动同步任务的私有方法 + private void startSync() { + // 如果当前没有正在执行的同步任务 + if (mSyncTask == null) { + // 创建一个新的GTaskASyncTask实例,传入当前服务实例和完成监听器 + mSyncTask = new GTaskASyncTask(this, new GTaskASyncTask.OnCompleteListener() { + public void onComplete() { + // 同步任务完成后,将同步任务对象置空 + mSyncTask = null; + // 发送一个空消息的广播 + sendBroadcast(""); + // 停止服务自身 + stopSelf(); + } + }); + // 发送一个空消息的广播,告知同步开始 + sendBroadcast(""); + // 执行异步任务 + mSyncTask.execute(); + } + } + + // 取消同步任务的私有方法 + private void cancelSync() { + // 如果存在正在执行的同步任务 + if (mSyncTask!= null) { + // 调用同步任务的取消同步方法 + mSyncTask.cancelSync(); + } + } + + // 服务创建时调用的方法 + @Override + public void onCreate() { + // 初始化同步任务对象为null + mSyncTask = null; + } + + // 服务接收到startService()调用时执行的方法 + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + // 获取Intent携带的额外数据 + Bundle bundle = intent.getExtras(); + // 如果有额外数据且包含同步操作类型 + if (bundle!= null && bundle.containsKey(ACTION_STRING_NAME)) { + switch (bundle.getInt(ACTION_STRING_NAME, ACTION_INVALID)) { + case ACTION_START_SYNC: + // 执行开始同步操作 + startSync(); + break; + case ACTION_CANCEL_SYNC: + // 执行取消同步操作 + cancelSync(); + break; + default: + break; + } + // 返回START_STICKY,表示服务被异常终止后应尝试重启 + return START_STICKY; + } + // 如果不满足上述条件,调用父类的onStartCommand方法 + return super.onStartCommand(intent, flags, startId); + } + + // 系统内存不足时调用的方法 + @Override + public void onLowMemory() { + // 如果有正在执行的同步任务,取消它 + if (mSyncTask!= null) { + mSyncTask.cancelSync(); + } + } + + // 用于绑定服务的方法,这里返回null表示不支持绑定 + public IBinder onBind(Intent intent) { + return null; + } + + // 发送广播的方法,用于告知同步状态和进度 + public void sendBroadcast(String msg) { + mSyncProgress = msg; + Intent intent = new Intent(GTASK_SERVICE_BROADCAST_NAME); + intent.putExtra(GTASK_SERVICE_BROADCAST_IS_SYNCING, mSyncTask!= null); + intent.putExtra(GTASK_SERVICE_BROADCAST_PROGRESS_MSG, msg); + sendBroadcast(intent); + } + + // 静态方法,用于从Activity启动同步服务 + public static void startSync(Activity activity) { + GTaskManager.getInstance().setActivityContext(activity); + Intent intent = new Intent(activity, GTaskSyncService.class); + intent.putExtra(GTaskSyncService.ACTION_STRING_NAME, GTaskSyncService.ACTION_START_SYNC); + activity.startService(intent); + } + + // 静态方法,用于从Context取消同步服务 + public static void cancelSync(Context context) { + Intent intent = new Intent(context, GTaskSyncService.class); + intent.putExtra(GTaskSyncService.ACTION_STRING_NAME, GTaskSyncService.ACTION_CANCEL_SYNC); + context.startService(intent); + } + + // 静态方法,用于判断当前是否正在同步 + public static boolean isSyncing() { + return mSyncTask!= null; + } + + // 静态方法,用于获取同步进度字符串 + public static String getProgressString() { + return mSyncProgress; + } +} \ No newline at end of file -- 2.34.1 From e945fcbc9776ed0379fc37fa356861de039f714b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=91=9E?= <2406600767.@qq.com> Date: Fri, 27 Dec 2024 15:49:11 +0800 Subject: [PATCH 07/12] 21 --- src/data/Contact.txt | 86 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 src/data/Contact.txt diff --git a/src/data/Contact.txt b/src/data/Contact.txt new file mode 100644 index 0000000..76bc4dd --- /dev/null +++ b/src/data/Contact.txt @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2010 - 2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.data; + +import android.content.Context; +import android.database.Cursor; +import android.provider.ContactsContract.CommonDataKinds.Phone; +import android.provider.ContactsContract.Data; +import android.telephony.PhoneNumberUtils; +import android.util.Log; + +import java.util.HashMap; + +// Contact类用于根据电话号码查询对应的联系人姓名 +public class Contact { + // 用于缓存电话号码和对应联系人姓名的哈希表 + private static HashMap sContactCache; + private static final String TAG = "Contact"; + + // 用于查询联系人的SQL选择语句模板,用于匹配电话号码对应的联系人 + private static final String CALLER_ID_SELECTION = "PHONE_NUMBERS_EQUAL(" + Phone.NUMBER + + ",?) AND " + Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "'" + + " AND " + Data.RAW_CONTACT_ID + " IN " + + "(SELECT raw_contact_id " + + " FROM phone_lookup" + + " WHERE min_match = '+')"; + + // 根据电话号码获取联系人姓名的静态方法 + public static String getContact(Context context, String phoneNumber) { + // 如果缓存为空,初始化缓存哈希表 + if (sContactCache == null) { + sContactCache = new HashMap(); + } + + // 如果缓存中已经存在该电话号码对应的联系人姓名,直接返回 + if (sContactCache.containsKey(phoneNumber)) { + return sContactCache.get(phoneNumber); + } + + // 替换SQL选择语句中的占位符,生成实际用于查询的语句 + String selection = CALLER_ID_SELECTION.replace("+", + PhoneNumberUtils.toCallerIDMinMatch(phoneNumber)); + // 通过内容解析器执行查询操作 + Cursor cursor = context.getContentResolver().query( + Data.CONTENT_URI, + new String[]{Phone.DISPLAY_NAME}, + selection, + new String[]{phoneNumber}, + null); + + if (cursor!= null && cursor.moveToFirst()) { + try { + // 从查询结果中获取联系人姓名 + String name = cursor.getString(0); + // 将联系人姓名存入缓存 + sContactCache.put(phoneNumber, name); + return name; + } catch (IndexOutOfBoundsException e) { + // 捕获索引越界异常,打印错误日志 + Log.e(TAG, " Cursor get string error " + e.toString()); + return null; + } finally { + // 关闭游标,释放资源 + cursor.close(); + } + } else { + // 如果没有匹配的联系人,打印调试日志 + Log.d(TAG, "No contact matched with number:" + phoneNumber); + return null; + } + } +} \ No newline at end of file -- 2.34.1 From 0a7e1c20620dc2c8d1ab76c72d7e6303d9b41be2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=91=9E?= <2406600767.@qq.com> Date: Fri, 27 Dec 2024 15:49:39 +0800 Subject: [PATCH 08/12] 22 --- src/data/Notes.txt | 259 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 259 insertions(+) create mode 100644 src/data/Notes.txt diff --git a/src/data/Notes.txt b/src/data/Notes.txt new file mode 100644 index 0000000..909d689 --- /dev/null +++ b/src/data/Notes.txt @@ -0,0 +1,259 @@ +/* + * Copyright (c) 2010 - 2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this文件 except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.data; + +import android.net.Uri; + +// Notes类定义了一系列与笔记应用相关的常量和接口,用于管理笔记、文件夹以及相关的数据结构 +public class Notes { + // 内容提供器的授权,用于标识该应用的数据来源 + public static final String AUTHORITY = "micode_notes"; + // 日志标签,方便调试输出 + public static final String TAG = "Notes"; + // 定义笔记类型:普通笔记 + public static final int TYPE_NOTE = 0; + // 定义笔记类型:文件夹 + public static final int TYPE_FOLDER = 1; + // 定义笔记类型:系统相关 + public static final int TYPE_SYSTEM = 2; + + /** + * 以下ID是系统文件夹的标识符 + * {@link Notes#ID_ROOT_FOLDER } 是默认文件夹 + * {@link Notes#ID_TEMPARAY_FOLDER } 用于存放无所属文件夹的笔记 + * {@link Notes#ID_CALL_RECORD_FOLDER} 用于存储通话记录 + */ + public static final int ID_ROOT_FOLDER = 0; + public static final int ID_TEMPARAY_FOLDER = -1; + public static final int ID_CALL_RECORD_FOLDER = -2; + public static final int ID_TRASH_FOLER = -3; + + // 用于在Intent中传递提醒日期的额外数据键 + public static final String INTENT_EXTRA_ALERT_DATE = "net.micode.notes.alert_date"; + // 用于在Intent中传递背景颜色ID的额外数据键 + public static final String INTENT_EXTRA_BACKGROUND_ID = "net.micode.notes.background_color_id"; + // 用于在Intent中传递小部件ID的额外数据键 + public static final String INTENT_EXTRA_WIDGET_ID = "net.micode.notes.widget_id"; + // 用于在Intent中传递小部件类型的额外数据键 + public static final String INTENT_EXTRA_WIDGET_TYPE = "net.micode.notes.widget_type"; + // 用于在Intent中传递文件夹ID的额外数据键 + public static final String INTENT_EXTRA_FOLDER_ID = "net.micode.notes.folder_id"; + // 用于在Intent中传递通话日期的额外数据键 + public static final String INTENT_EXTRA_CALL_DATE = "net.micode.notes.call_date"; + + // 定义无效的小部件类型 + public static final int TYPE_WIDGET_INVALIDE = -1; + // 定义一种小部件类型,可能对应2x尺寸 + public static final int TYPE_WIDGET_2X = 0; + // 定义一种小部件类型,可能对应4x尺寸 + public static final int TYPE_WIDGET_4X = 1; + + // DataConstants内部类,用于定义数据相关的常量 + public static class DataConstants { + // 文本笔记的内容项类型 + public static final String NOTE = TextNote.CONTENT_ITEM_TYPE; + // 通话笔记的内容项类型 + public static final String CALL_NOTE = CallNote.CONTENT_ITEM_TYPE; + } + + /** + * 用于查询所有笔记和文件夹的Uri + */ + public static final Uri CONTENT_NOTE_URI = Uri.parse("content://" + AUTHORITY + "/note"); + /** + * 用于查询数据的Uri + */ + public static final Uri CONTENT_DATA_URI = Uri.parse("content://" + AUTHORITY + "/data"); + + // NoteColumns接口定义了笔记表中的列名及其对应的数据类型 + public interface NoteColumns { + /** + * 行的唯一ID + *

类型: INTEGER (long)

+ */ + public static final String ID = "_id"; + /** + * 笔记或文件夹的父ID + *

类型: INTEGER (long)

+ */ + public static final String PARENT_ID = "parent_id"; + /** + * 笔记或文件夹的创建日期 + *

类型: INTEGER (long)

+ */ + public static final String CREATED_DATE = "created_date"; + /** + * 最近修改日期 + *

类型: INTEGER (long)

+ */ + public static final String MODIFIED_DATE = "modified_date"; + /** + * 提醒日期 + *

类型: INTEGER (long)

+ */ + public static final String ALERTED_DATE = "alert_date"; + /** + * 文件夹名称或笔记的文本内容 + *

类型: TEXT

+ */ + public static final String SNIPPET = "snippet"; + /** + * 笔记的小部件ID + *

类型: INTEGER (long)

+ */ + public static final String WIDGET_ID = "widget_id"; + /** + * 笔记的小部件类型 + *

类型: INTEGER (long)

+ */ + public static final String WIDGET_TYPE = "widget_type"; + /** + * 笔记的背景颜色ID + *

类型: INTEGER (long)

+ */ + public static final String BG_COLOR_ID = "bg_color_id"; + /** + * 对于文本笔记,无附件;对于多媒体笔记,至少有一个附件 + *

类型: INTEGER

+ */ + public static final String HAS_ATTACHMENT = "has_attachment"; + /** + * 文件夹中的笔记数量 + *

类型: INTEGER (long)

+ */ + public static final String NOTES_COUNT = "notes_count"; + /** + * 文件类型:文件夹或笔记 + *

类型: INTEGER

+ */ + public static final String TYPE = "type"; + /** + * 最后同步ID + *

类型: INTEGER (long)

+ */ + public static final String SYNC_ID = "sync_id"; + /** + * 标记是否本地修改 + *

类型: INTEGER

+ */ + public static final String LOCAL_MODIFIED = "local_modified"; + /** + * 移动到临时文件夹之前的原始父ID + *

类型 : INTEGER

+ */ + public static final String ORIGIN_PARENT_ID = "origin_parent_id"; + /** + * Google任务的ID + *

类型 : TEXT

+ */ + public static final String GTASK_ID = "gtask_id"; + /** + * 版本代码 + *

类型 : INTEGER (long)

+ */ + public static final String VERSION = "version"; + } + + // DataColumns接口定义了数据表中的列名及其对应的数据类型 + public interface DataColumns { + /** + * 行的唯一ID + *

类型: INTEGER (long)

+ */ + public static final String ID = "_id"; + /** + * 此行所代表项目的MIME类型 + *

类型: Text

+ */ + public static final String MIME_TYPE = "mime_type"; + /** + * 此数据所属笔记的引用ID + *

类型: INTEGER (long)

+ */ + public static final String NOTE_ID = "note_id"; + /** + * 笔记或文件夹的创建日期 + *

类型: INTEGER (long)

+ */ + public static final String CREATED_DATE = "created_date"; + /** + * 最近修改日期 + *

类型: INTEGER (long)

+ */ + public static final String MODIFIED_DATE = "modified_date"; + /** + * 数据的内容 + *

类型: TEXT

+ */ + public static final String CONTENT = "content"; + /** + * 通用数据列,含义根据{@link #MIMETYPE}而定,用于整数数据类型 + *

类型: INTEGER

+ */ + public static final String DATA1 = "data1"; + /** + * 通用数据列,含义根据{@link #MIMETYPE}而定,用于整数数据类型 + *

类型: INTEGER

+ */ + public static final String DATA2 = "data2"; + /** + * 通用数据列,含义根据{@link #MIMETYPE}而定,用于文本数据类型 + *

类型: TEXT

+ */ + public static final String DATA3 = "data3"; + /** + * 通用数据列,含义根据{@link #MIMETYPE}而定,用于文本数据类型 + *

类型: TEXT

+ */ + public static final String DATA4 = "data4"; + /** + * 通用数据列,含义根据{@link #MIMETYPE}而定,用于文本数据类型 + *

类型: TEXT

+ */ + public static final String DATA5 = "data5"; + } + + // TextNote类,继承DataColumns接口,可能用于文本笔记相关的数据操作 + public static final class TextNote implements DataColumns { + /** + * 模式,用于指示文本是否处于清单模式 + *

类型: Integer 1:清单模式 0: 普通模式

+ */ + public static final String MODE = DATA1; + public static final int MODE_CHECK_LIST = 1; + public static final String CONTENT_TYPE = "vnd.android.cursor.dir/text_note"; + public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/text_note"; + public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/text_note"); + } + + // CallNote类,继承DataColumns接口,可能用于通话笔记相关的数据操作 + public static final class CallNote implements DataColumns { + /** + * 此次通话记录的通话日期 + *

类型: INTEGER (long)

+ */ + public static final String CALL_DATE = DATA1; + /** + * 此次通话记录的电话号码 + *

类型: TEXT

+ */ + public static final String PHONE_NUMBER = DATA3; + public static final String CONTENT_TYPE = "vnd.android.cursor.dir/call_note"; + public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/call_note"; + public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/call_note"); + } +} \ No newline at end of file -- 2.34.1 From 9962002382771fe38c8b2af7aea1b64e417bbaf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=91=9E?= <2406600767.@qq.com> Date: Fri, 27 Dec 2024 15:50:12 +0800 Subject: [PATCH 09/12] 23 --- src/data/NotesDatabaseHelper.txt | 393 +++++++++++++++++++++++++++++++ 1 file changed, 393 insertions(+) create mode 100644 src/data/NotesDatabaseHelper.txt diff --git a/src/data/NotesDatabaseHelper.txt b/src/data/NotesDatabaseHelper.txt new file mode 100644 index 0000000..2c21daf --- /dev/null +++ b/src/data/NotesDatabaseHelper.txt @@ -0,0 +1,393 @@ +/* + * Copyright (c) 2010 - 2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this文件 except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.data; + +import android.content.ContentValues; +import android.content.Context; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; +import android.util.Log; + +import net.micode.notes.data.Notes.DataColumns; +import net.micode.notes.data.Notes.DataConstants; +import net.micode.notes.data.Notes.NoteColumns; + +// NotesDatabaseHelper类用于管理笔记应用的SQLite数据库,负责数据库的创建、升级以及相关表和触发器的初始化 +public class NotesDatabaseHelper extends SQLiteOpenHelper { + // 数据库名称 + private static final String DB_NAME = "note.db"; + // 数据库版本号 + private static final int DB_VERSION = 4; + + // 内部接口,定义表名常量 + public interface TABLE { + public static final String NOTE = "note"; + public static final String DATA = "data"; + } + + private static final String TAG = "NotesDatabaseHelper"; + // 单例实例 + private static NotesDatabaseHelper mInstance; + + // 创建笔记表的SQL语句 + private static final String CREATE_NOTE_TABLE_SQL = + "CREATE TABLE " + TABLE.NOTE + "(" + + NoteColumns.ID + " INTEGER PRIMARY KEY," + + NoteColumns.PARENT_ID + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.ALERTED_DATE + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.BG_COLOR_ID + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.CREATED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + + NoteColumns.HAS_ATTACHMENT + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.MODIFIED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + + NoteColumns.NOTES_COUNT + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.SNIPPET + " TEXT NOT NULL DEFAULT ''," + + NoteColumns.TYPE + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.WIDGET_ID + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.WIDGET_TYPE + " INTEGER NOT NULL DEFAULT -1," + + NoteColumns.SYNC_ID + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.LOCAL_MODIFIED + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.ORIGIN_PARENT_ID + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.GTASK_ID + " TEXT NOT NULL DEFAULT ''," + + NoteColumns.VERSION + " INTEGER NOT NULL DEFAULT 0" + + ")"; + + // 创建数据表的SQL语句 + private static final String CREATE_DATA_TABLE_SQL = + "CREATE TABLE " + TABLE.DATA + "(" + + DataColumns.ID + " INTEGER PRIMARY KEY," + + DataColumns.MIME_TYPE + " TEXT NOT NULL," + + DataColumns.NOTE_ID + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.CREATED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + + NoteColumns.MODIFIED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + + DataColumns.CONTENT + " TEXT NOT NULL DEFAULT ''," + + DataColumns.DATA1 + " INTEGER," + + DataColumns.DATA2 + " INTEGER," + + DataColumns.DATA3 + " TEXT NOT NULL DEFAULT ''," + + DataColumns.DATA4 + " TEXT NOT NULL DEFAULT ''," + + DataColumns.DATA5 + " TEXT NOT NULL DEFAULT ''" + + ")"; + + // 创建数据表里note_id索引的SQL语句 + private static final String CREATE_DATA_NOTE_ID_INDEX_SQL = + "CREATE INDEX IF NOT EXISTS note_id_index ON " + + TABLE.DATA + "(" + DataColumns.NOTE_ID + ");"; + + /** + * 当把笔记移动到文件夹时,增加该文件夹的笔记数量的触发器SQL语句 + */ + private static final String NOTE_INCREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER = + "CREATE TRIGGER increase_folder_count_on_update "+ + " AFTER UPDATE OF " + NoteColumns.PARENT_ID + " ON " + TABLE.NOTE + + " BEGIN " + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + " + 1" + + " WHERE " + NoteColumns.ID + "=new." + NoteColumns.PARENT_ID + ";" + + " END"; + + /** + * 当把笔记从文件夹移出时,减少该文件夹的笔记数量的触发器SQL语句 + */ + private static final String NOTE_DECREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER = + "CREATE TRIGGER decrease_folder_count_on_update " + + " AFTER UPDATE OF " + NoteColumns.PARENT_ID + " ON " + TABLE.NOTE + + " BEGIN " + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + "-1" + + " WHERE " + NoteColumns.ID + "=old." + NoteColumns.PARENT_ID + + " AND " + NoteColumns.NOTES_COUNT + ">0" + ";" + + " END"; + + /** + * 当在文件夹中插入新笔记时,增加该文件夹的笔记数量的触发器SQL语句 + */ + private static final String NOTE_INCREASE_FOLDER_COUNT_ON_INSERT_TRIGGER = + "CREATE TRIGGER increase_folder_count_on_insert " + + " AFTER INSERT ON " + TABLE.NOTE + + " BEGIN " + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + " + 1" + + " WHERE " + NoteColumns.ID + "=new." + NoteColumns.PARENT_ID + ";" + + " END"; + + /** + * 当从文件夹删除笔记时,减少该文件夹的笔记数量的触发器SQL语句 + */ + private static final String NOTE_DECREASE_FOLDER_COUNT_ON_DELETE_TRIGGER = + "CREATE TRIGGER decrease_folder_count_on_delete " + + " AFTER DELETE ON " + TABLE.NOTE + + " BEGIN " + + " UPDATE " + TABLE.NOTEWITH + "=" + NoteColumns.NOTES_COUNT + "-1" + + " WHERE " + NoteColumns.ID + "=old." + NoteColumns.PARENT_ID + + " AND " + NoteColumns.NOTES_COUNT + ">0;" + + " END"; + + /** + * 当插入类型为{@link DataConstants#NOTE}的数据时,更新笔记内容的触发器SQL语句 + */ + private static final String DATA_UPDATE_NOTE_CONTENT_ON_INSERT_TRIGGER = + "CREATE TRIGGER update_note_content_on_insert " + + " AFTER INSERT ON " + TABLE.DATA + + " WHEN new." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" + + " BEGIN" + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.SNIPPET + "=new." + DataColumns.CONTENT + + " WHERE " + NoteColumns.ID + "=new." + DataColumns.NOTE_ID + ";" + + " END"; + + /** + * 当类型为{@link DataConstants#NOTE}的数据更新时,更新笔记内容的触发器SQL语句 + */ + private static final String DATA_UPDATE_NOTE_CONTENT_ON_UPDATE_TRIGGER = + "CREATE TRIGGER update_note_content_on_update " + + " AFTER UPDATE ON " + TABLE.DATA + + " WHEN old." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" + + " BEGIN" + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.SNIPPET + "=new." + DataColumns.CONTENT + + " WHERE " + NoteColumns.ID + "=new." + DataColumns.NOTE_ID + ";" + + " END"; + + /** + * 当类型为{@link DataConstants#NOTE}的数据删除时,更新笔记内容的触发器SQL语句 + */ + private static final String DATA_UPDATE_NOTE_CONTENT_ON_DELETE_TRIGGER = + "CREATE TRIGGER update_note_content_on_delete " + + " AFTER delete ON " + TABLE.DATA + + " WHEN old." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" + + " BEGIN" + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.SNIPPET + "=''" + + " WHERE " + NoteColumns.ID + "=old." + DataColumns.NOTE_ID + ";" + + " END"; + + /** + * 当笔记被删除时,删除与之关联的数据的触发器SQL语句 + */ + private static final String NOTE_DELETE_DATA_ON_DELETE_TRIGGER = + "CREATE TRIGGER delete_data_on_delete " + + " AFTER DELETE ON " + TABLE.NOTE + + " BEGIN" + + " DELETE FROM " + TABLE.DATA + + " WHERE " + DataColumns.NOTE_ID + "=old." + NoteColumns.ID + ";" + + " END"; + + /** + * 当文件夹被删除时,删除该文件夹下所有笔记的触发器SQL语句 + */ + private static final String FOLDER_DELETE_NOTES_ON_DELETE_TRIGGER = + "CREATE TRIGGER folder_delete_notes_on_delete " + + " AFTER DELETE ON " + TABLE.NOTE + + " BEGIN " + + " DELETE FROM " + TABLE.NOTE + + " WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" + + " END"; + + /** + * 当文件夹被移动到回收站文件夹时,移动该文件夹下所有笔记到回收站的触发器SQL语句 + */ + private static final String FOLDER_MOVE_NOTES_ON_TRASH_TRIGGER = + "CREATE TRIGGER folder_move_notes_on_trash " + + " AFTER UPDATE ON " + TABLE.NOTE + + " WHEN new." + NoteColumns.PARENT_ID + "=" + Notes.ID_TRASH_FOLER + + " BEGIN" + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.PARENT_ID + "=" + Notes.ID_TRASH_FOLER + + " WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" + + " END"; + + // 构造函数,初始化数据库帮助类 + public NotesDatabaseHelper(Context context) { + super(context, DB_NAME, null, DB_VERSION); + } + + // 创建笔记表的方法 + public void createNoteTable(SQLiteDatabase db) { + // 执行创建笔记表的SQL语句 + db.execSQL(CREATE_NOTE_TABLE_SQL); + // 重新创建笔记表相关的触发器 + reCreateNoteTableTriggers(db); + // 创建系统文件夹 + createSystemFolder(db); + Log.d(TAG, "note table has been created"); + } + + // 重新创建笔记表相关触发器的私有方法 + private void reCreateNoteTableTriggers(SQLiteDatabase db) { + // 删除已有的触发器(如果存在) + db.execSQL("DROP TRIGGER IF EXISTS increase_folder_count_on_update"); + db.execSQL("DROP TRIGGER IF EXISTS decrease_folder_count_on_update"); + db.execSQL("DROP TRIGGER IF EXISTS decrease_folder_count_on_delete"); + db.execSQL("DROP TRIGGER IF EXISTS delete_data_on_delete"); + db.execSQL("DROP TRIGGER IF EXISTS increase_folder_count_on_insert"); + db.execSQL("DROP TRIGGER IF EXISTS folder_delete_notes_on_delete"); + db.execSQL("DROP TRIGGER IF EXISTS folder_move_notes_on_trash"); + + // 重新创建触发器 + db.execSQL(NOTE_INCREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER); + db.execSQL(NOTE_DECREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER); + db.execSQL(NOTE_DECREASE_FOLDER_COUNT_ON_DELETE_TRIGGER); + db.execSQL(NOTE_DELETE_DATA_ON_DELETE_TRIGGER); + db.execSQL(NOTE_INCREASE_FOLDER_COUNT_ON_INSERT_TRIGGER); + db.execSQL(FOLDER_DELETE_NOTES_ON_DELETE_TRIGGER); + db.execSQL(FOLDER_MOVE_NOTES_ON_TRASH_TRIGGER); + } + + // 创建系统文件夹的私有方法 + private void createSystemFolder(SQLiteDatabase db) { + ContentValues values = new ContentValues(); + + /** + * 通话记录文件夹,用于存放通话笔记 + */ + values.put(NoteColumns.ID, Notes.ID_CALL_RECORD_FOLDER); + values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); + db.insert(TABLE.NOTE, null, values); + + /** + * 根文件夹,默认文件夹 + */ + values.clear(); + values.put(NoteColumns.ID, Notes.ID_ROOT_FOLDER); + values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); + db.insert(TABLE.NOTE, null, values); + + /** + * 临时文件夹,用于移动笔记 + */ + values.clear(); + values.put(NoteColumns.ID, Notes.ID_TEMPARAY_FOLDER); + values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); + db.insert(TABLE.NOTE, null, values); + + /** + * 创建回收站文件夹 + */ + values.clear(); + values.put(NoteColumns.ID, Notes.ID_TRASH_FOLER); + values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); + db.insert(TABLE.NOTE, null, values); + } + + // 创建数据表的方法 + public void createDataTable(SQLiteDatabase db) { + // 执行创建数据表的SQL语句 + db.execSQL(CREATE_DATA_TABLE_SQL); + // 重新创建数据表相关的触发器 + reCreateDataTableTriggers(db); + // 创建数据表里的note_id索引 + db.execSQL(CREATE_DATA_NOTE_ID_INDEX_SQL); + Log.d(TAG, "data table has been created"); + } + + // 重新创建数据表相关触发器的私有方法 + private void reCreateDataTableTriggers(SQLiteDatabase db) { + // 删除已有的触发器(如果存在) + db.execSQL("DROP TRIGGER IF EXISTS update_note_content_on_insert"); + db.execSQL("DROP TRIGGER IF EXISTS update_note_content_on_update"); + db.execSQL("DROP TRIGGER IF EXISTS update_note_content_on_delete"); + + // 重新创建触发器 + db.execSQL(DATA_UPDATE_NOTE_CONTENT_ON_INSERT_TRIGGER); + db.execSQL(DATA_UPDATE_NOTE_CONTENT_ON_UPDATE_TRIGGER); + db.execSQL(DATA_UPDATE_NOTE_CONTENT_ON_DELETE_TRIGGER); + } + + // 获取单例实例的静态同步方法 + static synchronized NotesDatabaseHelper getInstance(Context context) { + if (mInstance == null) { + mInstance = new NotesDatabaseHelper(context); + } + return mInstance; + } + + // 数据库初次创建时调用的方法 + @Override + public void onCreate(SQLiteDatabase db) { + createNoteTable(db); + createDataTable(db); + } + + // 数据库升级时调用的方法 + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + boolean reCreateTriggers = false; + boolean skipV2 = false; + + if (oldVersion == 1) { + upgradeToV2(db); + skipV2 = true; // 这次升级包含了从v2到v3的升级 + oldVersion++; + } + + if (oldVersion == 2 &&!skipV2) { + upgradeToV3(db); + reCreateTriggers = true; + oldVersion++; + } + + if (oldVersion == 3) { + upgradeToV4(db); + oldVersion++; + } + + if (reCreateTriggers) { + reCreateNoteTableTriggers(db); + reCreateDataTableTriggers(db); + } + + if (oldVersion!= newVersion) { + throw new IllegalStateException("Upgrade notes database to version " + newVersion + + "fails"); + } + } + + // 从版本1升级到版本2的私有方法 + private void upgradeToV2(SQLiteDatabase db) { + // 删除已有的笔记表和数据表(如果存在) + db.execSQL("DROP TABLE IF EXISTS " + TABLE.NOTE); + db.execSQL("DROP TABLE IF EXISTS " + TABLE.DATA); + createNoteTable(db); + createDataTable(db); + } + + // 将数据库从版本2升级到版本3的方法 +private void upgradeToV3(SQLiteDatabase db) { + // 删除不再使用的触发器,防止数据库升级过程中出现冲突或冗余操作 + db.execSQL("DROP TRIGGER IF EXISTS update_note_modified_date_on_insert"); + db.execSQL("DROP TRIGGER IF EXISTS update_note_modified_date_on_delete"); + db.execSQL("DROP TRIGGER IF EXISTS update_note_modified_date_on_update"); + + // 给笔记表(TABLE.NOTE)添加一个新列gtask_id,用于存储与Google任务相关的ID,类型为文本,默认值为空字符串 + db.execSQL("ALTER TABLE " + TABLE.NOTE + " ADD COLUMN " + NoteColumns.GTASK_ID + + " TEXT NOT NULL DEFAULT ''"); + + // 插入一个新的系统文件夹,用于存放回收站相关的内容 + ContentValues values = new ContentValues(); + // 设置文件夹ID为回收站对应的ID + values.put(NoteColumns.ID, Notes.ID_TRASH_FOLER); + // 设置文件夹类型为系统类型 + values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); + // 将新的系统文件夹插入到笔记表中 + db.insert(TABLE.NOTE, null, values); +} + +// 将数据库从版本3升级到版本4的方法 +private void upgradeToV4(SQLiteDatabase db) { + // 给笔记表(TABLE.NOTE)添加一个新列version,用于存储版本信息,类型为整数,默认值为0 + db.execSQL("ALTER TABLE " + TABLE.NOTE + " ADD COLUMN " + NoteColumns.VERSION + + " INTEGER NOT NULL DEFAULT 0"); +} \ No newline at end of file -- 2.34.1 From f03adc8545496e7e877f543240b1eb9c27a6812d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=91=9E?= <2406600767.@qq.com> Date: Fri, 27 Dec 2024 15:50:45 +0800 Subject: [PATCH 10/12] 24 --- src/data/NotesProvider.txt | 357 +++++++++++++++++++++++++++++++++++++ 1 file changed, 357 insertions(+) create mode 100644 src/data/NotesProvider.txt diff --git a/src/data/NotesProvider.txt b/src/data/NotesProvider.txt new file mode 100644 index 0000000..6c949ca --- /dev/null +++ b/src/data/NotesProvider.txt @@ -0,0 +1,357 @@ +/* + * Copyright (c) 2010 - 2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this文件 except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.data; + +import android.app.SearchManager; +import android.content.ContentProvider; +import android.content.ContentUris; +import android.content.ContentValues; +import android.content.Intent; +import android.content.UriMatcher; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.net.Uri; +import android.text.TextUtils; +import android.util.Log; + +import net.micode.notes.R; +import net.micode.notes.data.Notes.DataColumns; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.data.NotesDatabaseHelper.TABLE; + +// NotesProvider类是一个内容提供器,用于向其他组件提供笔记相关的数据访问接口 +public class NotesProvider extends ContentProvider { + // 用于匹配不同Uri的UriMatcher实例 + private static final UriMatcher mMatcher; + // 数据库帮助类实例,用于操作数据库 + private NotesDatabaseHelper mHelper; + private static final String TAG = "NotesProvider"; + + // 定义不同Uri对应的匹配码 + private static final int URI_NOTE = 1; + private static final int URI_NOTE_ITEM = 2; + private static final int URI_DATA = 3; + private static final int URI_DATA_ITEM = 4; + private static final int URI_SEARCH = 5; + private static final int URI_SEARCH_SUGGEST = 6; + + static { + // 初始化UriMatcher + mMatcher = new UriMatcher(UriMatcher.NO_MATCH); + // 添加匹配规则,"note"路径对应URI_NOTE + mMatcher.addURI(Notes.AUTHORITY, "note", URI_NOTE); + // 添加匹配规则,"note/#"路径对应URI_NOTE_ITEM,其中#表示数字 + mMatcher.addURI(Notes.AUTHORITY, "note/#", URI_NOTE_ITEM); + // 添加匹配规则,"data"路径对应URI_DATA + mMatcher.addURI(Notes.AUTHORITY, "data", URI_DATA); + // 添加匹配规则,"data/#"路径对应URI_DATA_ITEM + mMatcher.addURI(Notes.AUTHORITY, "data/#", URI_DATA_ITEM); + // 添加匹配规则,"search"路径对应URI_SEARCH + mMatcher.addURI(Notes.AUTHORITY, "search", URI_SEARCH); + // 添加匹配规则,SearchManager.SUGGEST_URI_PATH_QUERY路径对应URI_SEARCH_SUGGEST + mMatcher.addURI(Notes.AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY, URI_SEARCH_SUGGEST); + // 添加匹配规则,SearchManager.SUGGEST_URI_PATH_QUERY + "/*"路径对应URI_SEARCH_SUGGEST + mMatcher.addURI(Notes.AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY + "/*", URI_SEARCH_SUGGEST); + } + + /** + * x'0A'在SQLite中代表'\n'字符。对于搜索结果中的标题和内容, + * 我们将去除'\n'和空格,以便显示更多信息。 + */ + private static final String NOTES_SEARCH_PROJECTION = NoteColumns.ID + "," + + NoteColumns.ID + " AS " + SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA + "," + + "TRIM(REPLACE(" + NoteColumns.SNIPPET + ", x'0A','')) AS " + SearchManager.SUGGEST_COLUMN_TEXT_1 + "," + + "TRIM(REPLACE(" + NoteColumns.SNIPPET + ", x'0A','')) AS " + SearchManager.SUGGEST_COLUMN_TEXT_2 + "," + + R.drawable.search_result + " AS " + SearchManager.SUGGEST_COLUMN_ICON_1 + "," + + "'" + Intent.ACTION_VIEW + "' AS " + SearchManager.SUGGEST_COLUMN_INTENT_ACTION + "," + + "'" + Notes.TextNote.CONTENT_TYPE + "' AS " + SearchManager.SUGGEST_COLUMN_INTENT_DATA; + + // 用于搜索笔记片段的SQL查询语句 + private static String NOTES_SNIPPET_SEARCH_QUERY = "SELECT " + NOTES_SEARCH_PROJECTION + + " FROM " + TABLE.NOTE + + " WHERE " + NoteColumns.SNIPPET + " LIKE?" + + " AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER + + " AND " + NoteColumns.TYPE + "=" + Notes.TYPE_NOTE; + + @Override + public boolean onCreate() { + // 获取数据库帮助类的单例实例 + mHelper = NotesDatabaseHelper.getInstance(getContext()); + return true; + } + + @Override + public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, + String sortOrder) { + Cursor c = null; + // 获取可读数据库实例 + SQLiteDatabase db = mHelper.getReadableDatabase(); + String id = null; + switch (mMatcher.match(uri)) { + case URI_NOTE: + // 查询笔记表 + c = db.query(TABLE.NOTE, projection, selection, selectionArgs, null, null, + sortOrder); + break; + case URI_NOTE_ITEM: + // 获取路径中的ID + id = uri.getPathSegments().get(1); + // 查询指定ID的笔记 + c = db.query(TABLE.NOTE, projection, NoteColumns.ID + "=" + id + + parseSelection(selection), selectionArgs, null, null, sortOrder); + break; + case URI_DATA: + // 查询数据表 + c = db.query(TABLE.DATA, projection, selection, selectionArgs, null, null, + sortOrder); + break; + case URI_DATA_ITEM: + // 获取路径中的ID + id = uri.getPathSegments().get(1); + // 查询指定ID的数据 + c = db.query(TABLE.DATA, projection, DataColumns.ID + "=" + id + + parseSelection(selection), selectionArgs, null, null, sortOrder); + break; + case URI_SEARCH: + case URI_SEARCH_SUGGEST: + if (sortOrder!= null || projection!= null) { + // 如果指定了排序、选择条件等参数则抛出异常,因为这里不支持 + throw new IllegalArgumentException( + "do not specify sortOrder, selection, selectionArgs, or projection" + "with this query"); + } + + String searchString = null; + if (mMatcher.match(uri) == URI_SEARCH_SUGGEST) { + if (uri.getPathSegments().size() > 1) { + // 从路径中获取搜索字符串 + searchString = uri.getPathSegments().get(1); + } + } else { + // 从Uri参数中获取搜索字符串 + searchString = uri.getQueryParameter("pattern"); + } + + if (TextUtils.isEmpty(searchString)) { + return null; + } + + try { + // 格式化搜索字符串,添加通配符 + searchString = String.format("%%%s%%", searchString); + // 执行原始查询 + c = db.rawQuery(NOTES_SNIPPET_SEARCH_QUERY, + new String[]{searchString}); + } catch (IllegalStateException ex) { + Log.e(TAG, "got exception: " + ex.toString()); + } + break; + default: + // 如果Uri不匹配任何规则,抛出异常 + throw new IllegalArgumentException("Unknown URI " + uri); + } + if (c!= null) { + // 设置内容观察者的Uri,当数据变化时通知相关组件 + c.setNotificationUri(getContext().getContentResolver(), uri); + } + return c; + } + + @Override + public Uri insert(Uri uri, ContentValues values) { + // 获取可写数据库实例 + SQLiteDatabase db = mHelper.getWritableDatabase(); + long dataId = 0, noteId = 0, insertedId = 0; + switch (mMatcher.match(uri)) { + case URI_NOTE: + // 插入笔记数据 + insertedId = noteId = db.insert(TABLE.NOTE, null, values); + break; + case URI_DATA: + if (values.containsKey(DataColumns.NOTE_ID)) { + // 获取关联笔记的ID + noteId = values.getAsLong(DataColumns.NOTE_ID); + } else { + Log.d(TAG, "Wrong data format without note id:" + values.toString()); + } + // 插入数据 + insertedId = dataId = db.insert(TABLE.DATA, null, values); + break; + default: + // 如果Uri不匹配,抛出异常 + throw new IllegalArgumentException("Unknown URI " + uri); + } + // 通知笔记Uri数据已更改 + if (noteId > 0) { + getContext().getContentResolver().notifyChange( + ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), null); + } + + // 通知数据Uri数据已更改 + if (dataId > 0) { + getContext().getContentResolver().notifyChange( + ContentUris.withAppendedId(Notes.CONTENT_DATA_URI, dataId), null); + } + + return ContentUris.withAppendedId(uri, insertedId); + } + + @Override + public int delete(Uri uri, String selection, String[] selectionArgs) { + int count = 0; + String id = null; + // 获取可写数据库实例 + SQLiteDatabase db = mHelper.getWritableDatabase(); + boolean deleteData = false; + switch (mMatcher.match(uri)) { + case URI_NOTE: + // 补充删除条件,确保ID大于0 + selection = "(" + selection + ") AND " + NoteColumns.ID + ">0 "; + // 执行删除操作 + count = db.delete(TABLE.NOTE, selection, selectionArgs); + break; + case URI_NOTE_ITEM: + // 获取路径中的ID + id = uri.getPathSegments().get(1); + /** + * ID小于等于0的是系统文件夹,不允许删除 + */ + long noteId = Long.valueOf(id); + if (noteId <= 0) { + break; + } + // 执行删除指定ID笔记的操作 + count = db.delete(TABLE.NOTE, + NoteColumns.ID + "=" + id + parseSelection(selection), selectionArgs); + break; + case URI_DATA: + // 执行删除数据操作 + count = db.delete(TABLE.DATA, selection, selectionArgs); + deleteData = true; + break; + case URI_DATA_ITEM: + // 获取路径中的ID + id = uri.getPathSegments().get(1); + // 执行删除指定ID数据的操作 + count = db.delete(TABLE.DATA, + DataColumns.ID + "=" + id + parseSelection(selection), selectionArgs); + deleteData = true; + break; + default: + // 如果Uri不匹配,抛出异常 + throw new IllegalArgumentException("Unknown URI " + uri); + } + if (count > 0) { + if (deleteData) { + // 如果删除了数据,通知笔记Uri数据已更改 + getContext().getContentResolver().notifyChange(Notes.CONTENT_NOTE_URI, null); + } + // 通知当前Uri数据已更改 + getContext().getContentResolver().notifyChange(uri, null); + } + return count; + } + + @Override + public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { + int count = 0; + String id = null; + // 获取可写数据库实例 + SQLiteDatabase db = mHelper.getWritableDatabase(); + boolean updateData = false; + switch (mMatcher.match(uri)) { + case URI_NOTE: + // 更新笔记版本 + increaseNoteVersion(-1, selection, selectionArgs); + // 执行更新笔记操作 + count = db.update(TABLE.NOTE, values, selection, selectionArgs); + break; + case URI_NOTE_ITEM: + // 获取路径中的ID + id = uri.getPathSegments().get(1); + // 更新指定ID笔记的版本 + increaseNoteVersion(Long.valueOf(id), selection, selectionArgs); + // 执行更新指定ID笔记的操作 + count = db.update(TABLE.NOTE, values, NoteColumns.ID + "=" + id + + parseSelection(selection), selectionArgs); + break; + case URI_DATA: + // 执行更新数据操作 + count = db.update(TABLE.DATA, values, selection, selectionArgs); + updateData = true; + break; + case URI_DATA_ITEM: + // 获取路径中的ID + id = uri.getPathSegments().get(1); + // 执行更新指定ID数据的操作 + count = db.update(TABLE.DATA, values, DataColumns.ID + "=" + id + + parseSelection(selection), selectionArgs); + updateData = true; + break; + default: + // 如果Uri不匹配,抛出异常 + throw new IllegalArgumentException("Unknown URI " + uri); + } + + if (count > 0) { + if (updateData) { + // 如果更新了数据,通知笔记Uri数据已更改 + getContext().getContentResolver().notifyChange(Notes.CONTENT_NOTE_URI, null); + } + // 通知当前Uri数据已更改 + getContext().ContentViewResolver().notifyChange(uri, null); + } + return count; + } + + // 辅助方法,用于拼接选择条件 + private String parseSelection(String selection) { + return (!TextUtils.isEmpty(selection)? " AND (" + selection + ')' : ""); + } + + // 增加笔记版本号的私有方法 + private void increaseNoteVersion(long id, String selection, String[] selectionArgs) { + StringBuilder sql = new StringBuilder(120); + sql.append("UPDATE "); + sql.append(TABLE.NOTE); + sql.append(" SET "); + sql.append(NoteColumns.VERSION); + sql.append("=" + NoteColumns.VERSION + "+1 "); + + if (id > 0 ||!TextUtils.isEmpty(selection)) { + sql.append(" WHERE "); + } + if (id > 0) { + sql.append(NoteColumns.ID + "=" + String.valueOf(id)); + } + if (!TextUtils.isEmpty(selection)) { + String selectString = id > 0? parseSelection(selection) : selection; + for (String args : selectionArgs) { + selectString = selectString.replaceFirst("\\?", args); + } + sql.append(selectString); + } + + mHelper.getWritableDatabase().execSQL(sql.toString()); + } + + @Override + public String getType(Uri uri) { + // 此方法需返回Uri对应的MIME类型,暂未实现 + // TODO Auto-generated method stub + return null; + } +} \ No newline at end of file -- 2.34.1 From 40145be5ed7d7e383b4d6e04d28e76fb5f4f9d3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=91=9E?= <2406600767.@qq.com> Date: Sun, 29 Dec 2024 00:36:18 +0800 Subject: [PATCH 11/12] 2 --- ...便签开源代码的质量分析报告.docx | Bin 0 -> 17973 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/小米便签开源代码的质量分析报告.docx diff --git a/doc/小米便签开源代码的质量分析报告.docx b/doc/小米便签开源代码的质量分析报告.docx new file mode 100644 index 0000000000000000000000000000000000000000..4d1a920e646be730945a1ad76b6a53177601a19c GIT binary patch literal 17973 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≪r+UP8HpJNw(xHc-<&PimV$MQ2c$d zc(vkt`Bk%-&<1t(bdmg}?k$+N65s5^6}Id%8pBKTe7I-4K)8poEant_HX~=HPfny$ zs+w5+fino`IxSp51OHu$S_v?BN9Wq7wg%Td4Hkm7cbn@AW%+KW0v`QaIsQ#!Ja!vj zyQ(>P_x^D?_DCyZYWJS;b&0(6;v0%pv)LDdZcliIK7zMkpqMeuxQ&qh|PG z)QLk*wvUUD2c!oO)FsRJ(9X?es|80{DH==rIqLSy_7*;_gVn4o@6CK?*+gTdAC#PZ zLwO|0hMzuBxw$9elMT(XAsZ@52`aM|;$&uj_I6snfu%A#73`Su%qle1Tu|M(cjU{@ zI26`U1V)4{<}BVSOnb;Ey01MVN^T=z!>x|{Y0uyHfJHY_q*F4KtN&qqca2?`+wjR5QYd3j%1mP}*amCEaW`ElhCtta zPW?cI*#2T2}EmAM~OCY{f9S_cuHpIU_SX?t$uy`~+>Nl+M6F#yQDLNb*Eug5VW z+6Gbl0(y&HsG~SRK6Iw8V=Y9di6|rS+DK)o#mT$>$fG4f54B&$kY2nNnm6SavK(?7 z3Lat{R!F!G5(s^N!IFowU!?(i#rjBBZfwU{Dz__Xe|E*-|O3B zK4=J#PZy9tRhy=-MAV88QLSdn0}g_rW{if0b&q~Jc%2$!fMi_iAp~64W;vrs4B81~ zFVFY9*c>a-T$6OIXERZdV8o!lqg7|UA3XPANYWOX(6-59t*BptcO2!qS*S_9`-uZ5yyRAqrnWwP1~;epSI9J=qk2d$akvq(8>I9FD3T zRg8it7-sqlm&TG8glc{4QKBI{53-g72nYlZlu76Tz14m#8>bv&nvJcYH9x1yK7isb zgqUhcq8dT$o0Em6H;|P>i^%cA>IS*M`n@&?gc(-9drLrS&oR9Lh_R)8XnG}~b;tWr z*A`XbL6^gm4gF;&KQipXoXPwD#YGX~<4ve%XJqlGBR4P!3E}I<|F%BH%Wp%rzhvlt zOP0s2Nr5sU1)hU%5RZ9stWcB8SXhf3W=eSa5T~xeuf4>`)O))7dpA{8v|rdUn@o7v z54qVp_`BpJSYE&+slxlUAq+gpbzh$u*us*qxcLiT{MZ!1W*^_{e+q@zWlnI%t)-;r zqd837$xP6=-(^%Ij$_DVCkxgdnHvsqi^d;T)!7)jnFURYEnLI_2bfm~p2$^Oyshxm zmH%`gyy=cT2t~Imqnt?L{t8}6j1Ay}EcJu4OEY%l8$VB$5|4nu&PNEvU`otDS&2L0 zP%v<%oqW_`f~?~uH1&8<;dS_S6*R_+GQcVBaGNdi6vNfznuR!y8HeXNwh#aR!QAhE z>rQFf2dTS{ZlwE|fZ%;x|7BDCm*9WfaQwS}$IU)`3Cjq5{8-+gev+y zf%?V~LTU0kD1OT_M&Jo`w8AU`ASUg(d z&ZV<@PG8P|UeUfbPB$#-x+U%bKtVHK_drN?bc9a6lk8f+EyF4H7NK z?zRq*wy)gQp?UT4$7HRWMX12~!xuXB!$k78FSM5MhnoH{bkS3BwK1~S`8`{!PiVF3 zVMGhMm+}lAGEc&aTSzgM3uLYLwk}9mz**)>Ri(9V+%d3(~m=Ky^_pxB^=)f6gCt%F^iDBOmG0kri zWd|*$zt5|VL#53~GGnf8!>}8y4%CScch=;3F>;?K?V|GV*pQ7j&IB7_)JzuTElJyKIL+ zK^hnY4e0Mk4}UWBK@t!!5YflCwZQ+%*Iya@?~c;Hwa{PbchHEj&;QXke-`?uR{D+k ztI&)8!Tf6s{oe}v9lqkP^t-U%>A!+m{IijNhO_uB{8xDt{|)``F;yX^niqW|+b|I-@%?@|^13H;kOT|pZBU!xZJBcuot*he4(q2HkY2Y&F*a{vGU literal 0 HcmV?d00001 -- 2.34.1 From f66a565405e0f211b0c4329869060045bed75ace Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=91=9E?= <2406600767.@qq.com> Date: Mon, 30 Dec 2024 21:16:57 +0800 Subject: [PATCH 12/12] =?UTF-8?q?=E6=B3=9B=E8=AF=BB=E6=8A=A5=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...米便签开源代码的泛读报告.docx | Bin 0 -> 465503 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/小米便签开源代码的泛读报告.docx diff --git a/doc/小米便签开源代码的泛读报告.docx b/doc/小米便签开源代码的泛读报告.docx new file mode 100644 index 0000000000000000000000000000000000000000..59f17327a449024a999e693cbe6381fe71ee43eb GIT binary patch literal 465503 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

ge6JukHhR(7&Xxnxs|auBECIN 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%0D*?~USTJoHsma(80H)iZ(njb!>g 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

)pBt7Bbaib6l$re*_`4a8rvtI%9( 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