From 5ac24f20526a5661a23fabda89bb10f0883db74f Mon Sep 17 00:00:00 2001 From: djq <1953187027@qq.com> Date: Sun, 24 Dec 2023 23:18:08 +0800 Subject: [PATCH] =?UTF-8?q?data=E5=8C=85=E5=92=8Cgtask=E5=8C=85=E4=B8=ADda?= =?UTF-8?q?ta=E5=AD=90=E5=8C=85=E7=9A=84=E6=A0=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../net/micode/notes/gtask/data/SqlNote.java | 105 +++++++++++++++- .../src/net/micode/notes/gtask/data/Task.java | 117 ++++++++++++++++-- .../net/micode/notes/gtask/data/TaskList.java | 109 +++++++++++++++- 3 files changed, 312 insertions(+), 19 deletions(-) diff --git a/src/xiaomi/Notes-master/src/net/micode/notes/gtask/data/SqlNote.java b/src/xiaomi/Notes-master/src/net/micode/notes/gtask/data/SqlNote.java index 79a4095..d2ebbd3 100644 --- a/src/xiaomi/Notes-master/src/net/micode/notes/gtask/data/SqlNote.java +++ b/src/xiaomi/Notes-master/src/net/micode/notes/gtask/data/SqlNote.java @@ -37,7 +37,14 @@ import org.json.JSONObject; import java.util.ArrayList; - +/** + * @Package: net.micode.notes.gtask.data + * @ClassName: SqlNote + * @Description: + * SqlNote类包含用于处理小米便签的数据库操作,是一个用于管理便签数据的工具类 + * @Author: Dong Jiaqi + * @CreateDate: 12/24/2023 17:18 PM + */ public class SqlNote { private static final String TAG = SqlNote.class.getSimpleName(); @@ -52,9 +59,9 @@ public class SqlNote { NoteColumns.VERSION }; - public static final int ID_COLUMN = 0; + public static final int ID_COLUMN = 0;//便签的ID列的索引为0 - public static final int ALERTED_DATE_COLUMN = 1; + public static final int ALERTED_DATE_COLUMN = 1;//提醒日期列的索引为1 public static final int BG_COLOR_ID_COLUMN = 2; @@ -120,8 +127,12 @@ public class SqlNote { private ContentValues mDiffNoteValues; - private ArrayList mDataList; + private ArrayList mDataList;//用Java中的ArrayList类定义了一个SqlData对象 mDataList,用于存储从数据库查询中返回的便签数据 + /** + * 构造方法,用来创建一个新的SqlNote对象,初始化新的 SqlNote 对象,并将其成员变量设置为默认值。 + * @param context 要使用到的上下文对象 + */ public SqlNote(Context context) { mContext = context; mContentResolver = context.getContentResolver(); @@ -143,6 +154,11 @@ public class SqlNote { mDataList = new ArrayList(); } + /** + * 另外一个构造方法,用于创建一个新的 SqlNote 对象,并从给定的 Cursor 中加载数据。 + * @param context 要使用的上下文对象 + * @param c 要加载数据的游标对象 + */ public SqlNote(Context context, Cursor c) { mContext = context; mContentResolver = context.getContentResolver(); @@ -154,6 +170,11 @@ public class SqlNote { mDiffNoteValues = new ContentValues(); } + /** + * 另一个构造方法,用于创建一个新的 SqlNote 对象,并从给定的 ID 加载数据。 + * @param context 要使用的上下文对象 + * @param id 要加载数据的便签的ID + */ public SqlNote(Context context, long id) { mContext = context; mContentResolver = context.getContentResolver(); @@ -166,8 +187,17 @@ public class SqlNote { } + /** + * 通过笔记 ID 从数据库中加载便签数据,并将其存储在 SqlNote 对象的成员变量中 + * @param id 要加载数据的便签 ID + */ private void loadFromCursor(long id) { Cursor c = null; + /** + * try-finally语句块 用于在加载笔记数据后正确地关闭游标,以确保资源的释放。 + * 这么写是为了避免在发生异常或错误时,游标未被关闭而导致资源泄漏。 + * 通过在 finally 块中关闭游标,可以确保无论查询是否成功,都会正确地释放资源。 + */ try { c = mContentResolver.query(Notes.CONTENT_NOTE_URI, PROJECTION_NOTE, "(_id=?)", new String[] { @@ -185,6 +215,10 @@ public class SqlNote { } } + /** + * 从游标中加载便签数据,并将其存储在 SqlNote 对象的成员变量中。 + * @param c 要从中加载数据的游标 + */ private void loadFromCursor(Cursor c) { mId = c.getLong(ID_COLUMN); mAlertDate = c.getLong(ALERTED_DATE_COLUMN); @@ -200,9 +234,17 @@ public class SqlNote { mVersion = c.getLong(VERSION_COLUMN); } + /** + * 根据特定笔记 ID 加载与之关联的数据内容,并将其存储在数据列表中供进一步操作和展示。 + * 通过查询数据库,遍历游标并创建相应的数据对象,可以方便地加载数据内容并进行后续处理。 + */ private void loadDataContent() { Cursor c = null; mDataList.clear(); + /** + * 从数据库中查询与指定笔记 ID 相关联的数据内容,并将查询结果存储在 mDataList 列表中。 + * 这种写法可以保证在出现异常时,也能正确地关闭游标,避免资源泄露和其他问题。 + */ try { c = mContentResolver.query(Notes.CONTENT_DATA_URI, SqlData.PROJECTION_DATA, "(note_id=?)", new String[] { @@ -226,7 +268,19 @@ public class SqlNote { } } + + /** + * 根据传入的JSONObject对象设置内容。 + * 根据JSONObject中的不同字段值更新类中的属性,并将差异值存储在mDiffNoteValues中。 + * @param js 包含要设置的内容的JSONObject对象。 + * @return 如果成功设置内容,则返回true;否则返回false + */ public boolean setContent(JSONObject js) { + /** + * try块中的代码用于解析JSON对象并获取其中的数据。如果解析过程中发生了JSONException异常,那么程序会跳转到catch块中,并执行其中的代码。 + * catch块中的代码主要用于打印异常信息并返回一个布尔值false,以表示解析失败。 + * 这样能够通过捕获异常并进行适当的处理,可以避免程序崩溃或产生不可预料的结果。 + */ try { JSONObject note = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE); if (note.getInt(NoteColumns.TYPE) == Notes.TYPE_SYSTEM) { @@ -237,14 +291,14 @@ public class SqlNote { .getString(NoteColumns.SNIPPET) : ""; if (mIsCreate || !mSnippet.equals(snippet)) { mDiffNoteValues.put(NoteColumns.SNIPPET, snippet); - } + }//判断是否需要更新笔记的摘要(snippet)。它通过比较当前对象的mSnippet属性和传入的参数snippet,如果两者不相等,则将新的摘要值存储在mDiffNoteValues中。 mSnippet = snippet; int type = note.has(NoteColumns.TYPE) ? note.getInt(NoteColumns.TYPE) : Notes.TYPE_NOTE; if (mIsCreate || mType != type) { mDiffNoteValues.put(NoteColumns.TYPE, type); - } + }//检查是否正在创建新的笔记(mIsCreate为true),或者当前笔记的类型与传入的类型值不相等(mType != type)。如果满足其中一个条件,就会将新的类型值存储在mDiffNoteValues中。 mType = type; } else if (note.getInt(NoteColumns.TYPE) == Notes.TYPE_NOTE) { JSONArray dataArray = js.getJSONArray(GTaskStringUtils.META_HEAD_DATA); @@ -359,6 +413,10 @@ public class SqlNote { return true; } + /** + * 将当前对象的属性值转换为一个JSON对象并返回。 + * @return 返回转换后的JSONObject对象作为结果 + */ public JSONObject getContent() { try { JSONObject js = new JSONObject(); @@ -407,39 +465,74 @@ public class SqlNote { return null; } + /** + * 设置当前对象的父级ID属性,并将该属性的值存储到mDiffNoteValues中。 + * @param id long类型,表示要设置的父级ID + */ public void setParentId(long id) { mParentId = id; mDiffNoteValues.put(NoteColumns.PARENT_ID, id); } + /** + * 将指定的Google Tasks任务的ID(gid)放入mDiffNoteValues中,以便后续判断属性变化时进行处理。 + * @param gid 字符串类型,表示要设置的Google Tasks任务的ID + */ public void setGtaskId(String gid) { mDiffNoteValues.put(NoteColumns.GTASK_ID, gid); } + /** + * 将指定的同步ID(syncId)放入mDiffNoteValues中,以便后续判断属性变化时进行处理。 + * @param syncId long类型,表示要设置的同步ID + */ public void setSyncId(long syncId) { mDiffNoteValues.put(NoteColumns.SYNC_ID, syncId); } + /** + * 将当前对象的本地修改状态重置为未修改。 + */ public void resetLocalModified() { mDiffNoteValues.put(NoteColumns.LOCAL_MODIFIED, 0); } + /** + * 获取当前对象ID属性值,将其作为结果返回 + * @return 当前对象的ID属性值 + */ public long getId() { return mId; } + /** + * 获取当前对象的父级ID属性值,并返回该值。 + * @return 当前对象的父级ID属性值 + */ public long getParentId() { return mParentId; } + /** + * 获取当前对象的摘要属性值,并返回该值。 + * @return 当前对象的摘要属性值 + */ public String getSnippet() { return mSnippet; } + /** + * 判断当前对象是否为“便签”类型。 + * @return 布尔类型的数据,表示当前对象是否为“便签”类型。如果是便签类型,则返回true;否则返回false。 + */ public boolean isNoteType() { return mType == Notes.TYPE_NOTE; } + /** + * 将当前对象所代表的笔记或文件夹信息提交到数据库中进行保存,并更新当前对象的属性值。 + * @param validateVersion 布尔类型的数据,表示是否需要验证版本信息。如果为true,则在更新时需要比较版本号;否则不需要比较版本号。 + */ public void commit(boolean validateVersion) { if (mIsCreate) { if (mId == INVALID_ID && mDiffNoteValues.containsKey(NoteColumns.ID)) { diff --git a/src/xiaomi/Notes-master/src/net/micode/notes/gtask/data/Task.java b/src/xiaomi/Notes-master/src/net/micode/notes/gtask/data/Task.java index 6a19454..4fd9506 100644 --- a/src/xiaomi/Notes-master/src/net/micode/notes/gtask/data/Task.java +++ b/src/xiaomi/Notes-master/src/net/micode/notes/gtask/data/Task.java @@ -31,7 +31,16 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; - +/** + * @Package: net.micode.notes.gtask.data + * @ClassName: Task + * @Description: + * Task类继承自Node类。该类用于表示一个任务,在Google任务管理系统中使用。 + * 它包含了一些任务的属性和方法,例如任务是否已完成、笔记内容、元数据等。 + * 另外,该类还提供了一些用于生成和解析JSON格式数据的方法,以便与Google任务管理系统进行交互。 + * @Author: Dong Jiaqi + * @CreateDate: 12/24/2023 19:48 PM + */ public class Task extends Node { private static final String TAG = Task.class.getSimpleName(); @@ -45,17 +54,27 @@ public class Task extends Node { private TaskList mParent; + /** + * 构造方法在对象创建时被调用,用于初始化对象的属性。 + * 所有属性都被初始化为初始值或者null。 + */ public Task() { - super(); - mCompleted = false; - mNotes = null; - mPriorSibling = null; - mParent = null; - mMetaInfo = null; + super();//调用父类Node的构造方法确保父类的属性得到正确初始化 + mCompleted = false;//任务完成状态设置为未完成 + mNotes = null;//暂时没有便签笔记 + mPriorSibling = null;//当前任务没有前节点 + mParent = null;//当前任务没有父节点 + mMetaInfo = null;//当前任务没有元数据信息 } + /** + * 用于生成一个表示创建任务操作的JSON对象。 + * 如果在生成JSON对象的过程中发生异常,将会抛出一个ActionFailureException异常,并打印错误信息。 + * @param actionId 表示操作的唯一标识符。 + * @return 生成的JSONObject对象,包含了表示创建任务操作的各个字段和对应的值。 + */ public JSONObject getCreateAction(int actionId) { - JSONObject js = new JSONObject(); + JSONObject js = new JSONObject();//创建一个空的JSONObject对象。 try { // action_type @@ -97,12 +116,17 @@ public class Task extends Node { } catch (JSONException e) { Log.e(TAG, e.toString()); e.printStackTrace(); - throw new ActionFailureException("fail to generate task-create jsonobject"); + throw new ActionFailureException("fail to generate task-create jsonobject");//抛出异常 } return js; } + /** + * 用于生成一个表示更新任务操作的JSON对象。 + * @param actionId 表示操作的唯一标识符。 + * @return 生成的JSONObject对象,包含了表示更新任务操作的各个字段和对应的值。 + */ public JSONObject getUpdateAction(int actionId) { JSONObject js = new JSONObject(); @@ -135,6 +159,11 @@ public class Task extends Node { return js; } + /** + * 用于根据传入的JSONObject对象设置任务的各个字段值。 + * 保持任务对象的状态与传入的JSON数据一致。 + * @param js 表示一个JSONObject对象,包含了任务的各个字段和对应的值。 + */ public void setContentByRemoteJSON(JSONObject js) { if (js != null) { try { @@ -175,17 +204,25 @@ public class Task extends Node { } } + /** + * 用于根据传入的本地JSONObject对象设置任务的名称,从而与本地数据保持一致。 + * @param js 包含了本地数据的各个字段和对应的值。 + */ 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"); } + /** + * 根据传入的JSONObject对象解析任务的名称字段,并将其设置为任务对象的名称。 + * 同时,还会检查便签的类型,只有当类型为普通便签时才会继续设置任务名称。 + */ 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) { + if (note.getInt(NoteColumns.TYPE) != Notes.TYPE_NOTE) {//检查便签类型是不是普通便签 Log.e(TAG, "invalid type"); return; } @@ -204,6 +241,11 @@ public class Task extends Node { } } + /** + * 根据任务对象的内容生成一个本地的JSONObject对象。 + * @return 对于新创建的任务:返回构造好的JSONObject对象js。 + * 对于已同步的任务:返回mMetaInfo对象本身。 + */ public JSONObject getLocalJSONFromContent() { String name = getName(); try { @@ -247,6 +289,10 @@ public class Task extends Node { } } + /** + * 设置任务的元数据。 + * @param metaData MetaData对象,表示任务的元数据。 + */ public void setMetaInfo(MetaData metaData) { if (metaData != null && metaData.getNotes() != null) { try { @@ -258,6 +304,16 @@ public class Task extends Node { } } + /** + * 根据传入的Cursor对象和任务的元数据判断同步操作的类型。 + * @param c Cursor对象c,用于查询本地数据库中的任务数据。 + * @return 整数,表示同步操作的类型 + * SYNC_ACTION_NONE:无需同步 + * SYNC_ACTION_UPDATE_LOCAL:需要更新本地任务 + * SYNC_ACTION_UPDATE_REMOTE:需要更新远程任务 + * SYNC_ACTION_UPDATE_CONFLICT:存在冲突,需要解决 + * SYNC_ACTION_ERROR:同步出错 + */ public int getSyncAction(Cursor c) { try { JSONObject noteInfo = null; @@ -311,39 +367,80 @@ public class Task extends Node { return SYNC_ACTION_ERROR; } + /** + * 判断当前任务是否值得保存。 + * @return 类型为boolean,true表示任务值得保存,false表示任务不值得保存。 + */ public boolean isWorthSaving() { return mMetaInfo != null || (getName() != null && getName().trim().length() > 0) || (getNotes() != null && getNotes().trim().length() > 0); } + /** + * 设置当前任务的完成状态。 + * 调用这个方法,可以更新当前任务的完成状态,以便在应用程序中进行相应的展示或处理。 + * @param completed boolean类型的参数,用来表示当前任务的完成状态。 + */ public void setCompleted(boolean completed) { this.mCompleted = completed; } + /** + * 设置当前任务的备注信息。 + * 调用这个方法,可以更新当前任务的备注信息,以便在应用程序中进行相应的展示或处理。 + * @param notes String类型的参数,用来表示当前任务的备注信息。 + */ public void setNotes(String notes) { this.mNotes = notes; } + /** + * 设置当前任务的前一个兄弟任务。 + * 调用这个方法,可以建立任务之间的关联关系,例如设置任务的顺序、父子关系等。 + * @param priorSibling Task类型的参数,表示当前任务的前一个兄弟任务。 + */ public void setPriorSibling(Task priorSibling) { this.mPriorSibling = priorSibling; } + /** + * 设置当前任务的父任务列表。 + * 调用这个方法,可以建立任务之间的关联关系,例如设置任务的层级结构、父子关系等。 + * @param parent TaskList类型的参数,表示当前任务所属的父任务列表。 + */ public void setParent(TaskList parent) { this.mParent = parent; } + /** + * 获取当前任务的完成状态。 + * 调用这个方法,可以获取当前任务是否已经完成,以便在应用程序中进行相应的展示或处理。 + * @return 类型为boolean,true表示任务已完成,false表示任务未完成。 + */ public boolean getCompleted() { return this.mCompleted; } + /** + * 获取当前任务的备注信息。 + * @return 类型为String,表示当前任务的备注信息。如果任务没有备注信息,则返回一个空字符串。 + */ public String getNotes() { return this.mNotes; } + /** + * 获取当前任务的前一个兄弟任务。 + * @return 类型为Task,表示当前任务的前一个兄弟任务。如果当前任务没有前一个兄弟任务,则返回null。 + */ public Task getPriorSibling() { return this.mPriorSibling; } + /** + * 获取当前任务所属的父任务列表。 + * @return 类型为TaskList,表示当前任务所属的父任务列表。如果当前任务没有父任务列表,则返回null。 + */ public TaskList getParent() { return this.mParent; } diff --git a/src/xiaomi/Notes-master/src/net/micode/notes/gtask/data/TaskList.java b/src/xiaomi/Notes-master/src/net/micode/notes/gtask/data/TaskList.java index 4ea21c5..b3d810b 100644 --- a/src/xiaomi/Notes-master/src/net/micode/notes/gtask/data/TaskList.java +++ b/src/xiaomi/Notes-master/src/net/micode/notes/gtask/data/TaskList.java @@ -30,19 +30,36 @@ import org.json.JSONObject; import java.util.ArrayList; +/** + * @Package: net.micode.notes.gtask.data + * @ClassName: TaskList + * @Description: + * TaskList继承自Node类。该类表示一个任务列表,具有管理任务列表及其子任务的功能。 + * 提供了创建、更新、删除任务列表以及管理子任务的方法,可以通过JSON对象进行远程和本地数据的转换,并提供了一系列对子任务进行操作的方法。 + * @Author: Dong Jiaqi + * @CreateDate: 12/24/2023 20:48 PM + */ public class TaskList extends Node { - private static final String TAG = TaskList.class.getSimpleName(); + private static final String TAG = TaskList.class.getSimpleName();//私有静态常量,用于在日志和调试中标识类名。 - private int mIndex; + private int mIndex;//私有整型变量,表示任务列表的索引。 - private ArrayList mChildren; + private ArrayList mChildren;//私有ArrayList,存储Task对象,表示该任务列表下的子任务列表。 + /** + * 构造方法,初始化一个空的任务列表,初始化mChildren为一个空的Task列表,将mIndex设置为1。 + */ public TaskList() { super(); mChildren = new ArrayList(); mIndex = 1; } + /** + * 根据给定的actionId创建一个用于创建任务列表的JSONObject对象。 + * @param actionId 整型参数,表示操作的ID。 + * @return 表示创建操作的JSONObject对象。 + */ public JSONObject getCreateAction(int actionId) { JSONObject js = new JSONObject(); @@ -74,6 +91,11 @@ public class TaskList extends Node { return js; } + /** + * 根据给定的actionId创建一个用于更新任务列表的JSONObject对象。 + * @param actionId 整型参数,表示操作的ID。 + * @return 表示更新操作的JSONObject对象。 + */ public JSONObject getUpdateAction(int actionId) { JSONObject js = new JSONObject(); @@ -103,6 +125,10 @@ public class TaskList extends Node { return js; } + /** + * 根据远程传入的JSON对象设置任务列表的内容。 + * @param js 表示从远程服务器返回的JSONObject对象,包含了任务列表的属性。 + */ public void setContentByRemoteJSON(JSONObject js) { if (js != null) { try { @@ -129,6 +155,10 @@ public class TaskList extends Node { } } + /** + * 根据本地JSON对象设置任务列表的内容。 + * @param js 表示从远程服务器返回的JSONObject对象,包含了任务列表的属性。 + */ public void setContentByLocalJSON(JSONObject js) { if (js == null || !js.has(GTaskStringUtils.META_HEAD_NOTE)) { Log.w(TAG, "setContentByLocalJSON: nothing is avaiable"); @@ -157,6 +187,10 @@ public class TaskList extends Node { } } + /** + * 根据任务列表的内容生成本地JSON对象。 + * @return 表示本地的JSONObject对象,包含了任务列表的属性信息。 + */ public JSONObject getLocalJSONFromContent() { try { JSONObject js = new JSONObject(); @@ -183,6 +217,17 @@ public class TaskList extends Node { } } + /** + * 根据数据库游标中的信息确定同步操作的类型。 + * @param c 表示一个Cursor对象,包含了当前任务列表的属性信息。 + * @return 表示同步操作的代码 + * SYNC_ACTION_NONE(不执行任何操作) + * SYNC_ACTION_UPDATE_LOCAL(更新本地) + * SYNC_ACTION_ERROR(同步操作出错) + * SYNC_ACTION_UPDATE_REMOTE(当前任务列表的同步ID是否与最后修改时间相同,更新远程) + * SYNC_ACTION_UPDATE_REMOTE(当前任务列表的同步ID是否与最后修改时间不相同,更新远程) + * SYNC_ACTION_ERROR(同步操作出错) + */ public int getSyncAction(Cursor c) { try { if (c.getInt(SqlNote.LOCAL_MODIFIED_COLUMN) == 0) { @@ -216,10 +261,19 @@ public class TaskList extends Node { return SYNC_ACTION_ERROR; } + /** + * 获取子任务的数量。 + * @return 子任务的数量 + */ public int getChildTaskCount() { return mChildren.size(); } + /** + * 向任务列表中添加一个子任务。 + * @param task 表示要添加的子任务 + * @return boolean:表示是否成功将子任务添加到当前任务中,如果添加成功则返回true,否则返回false + */ public boolean addChildTask(Task task) { boolean ret = false; if (task != null && !mChildren.contains(task)) { @@ -234,6 +288,12 @@ public class TaskList extends Node { return ret; } + /** + * 在指定位置添加一个子任务。 + * @param task 表示要插入的子任务。 + * @param index 表示要插入的位置索引,从0开始计数。 + * @return boolean:表示是否成功将子任务插入到当前任务中的指定位置,如果插入成功则返回true,否则返回false。 + */ public boolean addChildTask(Task task, int index) { if (index < 0 || index > mChildren.size()) { Log.e(TAG, "add child task: invalid index"); @@ -260,6 +320,11 @@ public class TaskList extends Node { return true; } + /** + * 从任务列表中移除一个子任务。 + * @param task 表示要移除的子任务 + * @return boolean:表示是否成功从当前任务中移除了指定的子任务,如果移除成功则返回true,否则返回false。 + */ public boolean removeChildTask(Task task) { boolean ret = false; int index = mChildren.indexOf(task); @@ -281,6 +346,12 @@ public class TaskList extends Node { return ret; } + /** + * 移动指定子任务到新的位置。 + * @param task 表示要移动的子任务 + * @param index 表示要移动到的位置索引,从0开始计数。 + * @return boolean:表示是否成功将子任务移动到指定位置,如果移动成功则返回true,否则返回false + */ public boolean moveChildTask(Task task, int index) { if (index < 0 || index >= mChildren.size()) { @@ -299,6 +370,11 @@ public class TaskList extends Node { return (removeChildTask(task) && addChildTask(task, index)); } + /** + * 根据全局唯一标识符查找子任务。 + * @param gid 表示要查找的子任务的gid(全局唯一标识符) + * @return Task:如果找到具有匹配gid的子任务,则返回该子任务对象;如果未找到匹配的子任务,则返回null + */ public Task findChildTaskByGid(String gid) { for (int i = 0; i < mChildren.size(); i++) { Task t = mChildren.get(i); @@ -309,10 +385,20 @@ public class TaskList extends Node { return null; } + /** + * 获取指定子任务在任务列表中的索引。 + * @param task 表示要获取索引位置的子任务对象。 + * @return int:表示指定子任务在当前任务的子任务列表中的索引位置,如果子任务存在于列表中则返回其索引位置(从0开始计数),如果子任务不存在于列表中则返回-1。 + */ public int getChildTaskIndex(Task task) { return mChildren.indexOf(task); } + /** + * 根据索引获取子任务。 + * @param index 表示要获取子任务的索引位置,从0开始计数。 + * @return Task:表示位于指定索引位置的子任务对象,如果索引位置有效则返回该子任务对象,否则返回null。 + */ public Task getChildTaskByIndex(int index) { if (index < 0 || index >= mChildren.size()) { Log.e(TAG, "getTaskByIndex: invalid index"); @@ -321,6 +407,11 @@ public class TaskList extends Node { return mChildren.get(index); } + /** + * 根据全局唯一标识符获取子任务。 + * @param gid 表示要查找的子任务的gid + * @return Task:如果找到具有匹配gid的子任务,则返回匹配的子任务对象;如果未找到匹配的子任务,则返回null + */ public Task getChilTaskByGid(String gid) { for (Task task : mChildren) { if (task.getGid().equals(gid)) @@ -329,14 +420,26 @@ public class TaskList extends Node { return null; } + /** + * 获取任务列表的子任务列表。 + * @return ArrayList:表示当前任务的子任务列表,即包含所有子任务的ArrayList对象。 + */ public ArrayList getChildTaskList() { return this.mChildren; } + /** + * 设置任务列表的索引。 + * @param index 表示要设置的索引值 + */ public void setIndex(int index) { this.mIndex = index; } + /** + * 获取任务列表的索引。 + * @return 表示当前对象的索引值 + */ public int getIndex() { return this.mIndex; }