From cc6b9696606780c545414c75fb0b50e517a51fc2 Mon Sep 17 00:00:00 2001 From: rio <2286366371@qq.com> Date: Thu, 14 Dec 2023 08:38:18 +0800 Subject: [PATCH] 1 --- .gradle/8.0/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../java/net/micode/notes/data/草稿.java | 0 .../net/micode/notes/gtask/data/MetaData.java | 24 +- app/src/main/java/草稿.java | 546 ++++++++++++++++++ app/src/main/res/raw-zh-rCN/introduction | 4 +- 5 files changed, 565 insertions(+), 9 deletions(-) delete mode 100644 app/src/main/java/net/micode/notes/data/草稿.java create mode 100644 app/src/main/java/草稿.java diff --git a/.gradle/8.0/fileHashes/fileHashes.lock b/.gradle/8.0/fileHashes/fileHashes.lock index 43781ec5f9292585313b5d78e9fa8f562995144d..e91322d3a21bd317e1442ca2cb44b12e8eb23106 100644 GIT binary patch literal 17 VcmZR+`g6Z=isy$~1~3rV1OPvt1)u-` literal 17 VcmZR+`g6Z=isy$~1~3p<1pq&m1(*N; diff --git a/app/src/main/java/net/micode/notes/data/草稿.java b/app/src/main/java/net/micode/notes/data/草稿.java deleted file mode 100644 index e69de29..0000000 diff --git a/app/src/main/java/net/micode/notes/gtask/data/MetaData.java b/app/src/main/java/net/micode/notes/gtask/data/MetaData.java index 3a2050b..60303d7 100644 --- a/app/src/main/java/net/micode/notes/gtask/data/MetaData.java +++ b/app/src/main/java/net/micode/notes/gtask/data/MetaData.java @@ -16,19 +16,21 @@ package net.micode.notes.gtask.data; -import android.database.Cursor; -import android.util.Log; +import android.database.Cursor;//操作SQLite数据库的对象 +import android.util.Log;//Log是Android中用于记录日志的工具类。 -import net.micode.notes.tool.GTaskStringUtils; - -import org.json.JSONException; -import org.json.JSONObject; +import net.micode.notes.tool.GTaskStringUtils;//GTasks中用于处理GoogleTask字符串的工具类。 +import org.json.JSONException;//用于处理JSON解析异常的异常类。 +import org.json.JSONObject;//org.json包中用于处理JSON对象的类。 +//处理与任务相关的元数据 public class MetaData extends Task { private final static String TAG = MetaData.class.getSimpleName(); private String mRelatedGid = null; + //用于设置元数据信息。它接收一个gid和一个包含元数据信息的JSONObject作为参数, + // 并将gid添加到元数据信息中。然后将元数据信息转换为字符串,并将其设置为任务的备注信息。最后将任务名称设置为"Meta Note Name"。 public void setMeta(String gid, JSONObject metaInfo) { try { @@ -39,16 +41,19 @@ public class MetaData extends Task { setNotes(metaInfo.toString()); setName(GTaskStringUtils.META_NOTE_NAME); } - + //用于获取相关的gid。 public String getRelatedGid() { return mRelatedGid; } + //用于判断是否值得保存。如果备注信息不为null,则返回true,否则返回false。 @Override public boolean isWorthSaving() { return getNotes() != null; } + //从远程的JSON对象中设置任务的内容。它首先调用父类的方法设置任务的内容, + // 然后从备注信息中提取相关的gid,并将其赋值给mRelatedGid。 @Override public void setContentByRemoteJSON(JSONObject js) { super.setContentByRemoteJSON(js); @@ -63,20 +68,25 @@ public class MetaData extends Task { } } + //被标记为不应该被调用,因此抛出了IllegalAccessError异常。 @Override public void setContentByLocalJSON(JSONObject js) { // this function should not be called throw new IllegalAccessError("MetaData:setContentByLocalJSON should not be called"); } + //被标记为不应该被调用,因此抛出了IllegalAccessError异常。 @Override public JSONObject getLocalJSONFromContent() { throw new IllegalAccessError("MetaData:getLocalJSONFromContent should not be called"); } + //被标记为不应该被调用,因此抛出了IllegalAccessError异常。 @Override public int getSyncAction(Cursor c) { throw new IllegalAccessError("MetaData:getSyncAction should not be called"); } } +//用于处理与任务相关的元数据,例如与Google任务相关的gid值。 +//封装了操作元数据的方法,并提供了一些辅助方法来获取和设置相关的gid值。 diff --git a/app/src/main/java/草稿.java b/app/src/main/java/草稿.java new file mode 100644 index 0000000..6b02beb --- /dev/null +++ b/app/src/main/java/草稿.java @@ -0,0 +1,546 @@ + +这段代码是一个名为Node的抽象类。下面是对代码进行详细注释: + + 1. 定义了一个名为Node的抽象类。 + + 2. Node类包含了一些常量,用于表示同步操作的不同状态。 + + 3. Node类定义了一些成员变量,包括mGid(节点的全局唯一标识符)、mName(节点的名称)、mLastModified(节点的最后修改时间)和mDeleted(节点是否被删除)。 + + 4. Node类的构造函数初始化了成员变量的默认值。 + + 5. Node类定义了一些抽象方法,包括getCreateAction、getUpdateAction、setContentByRemoteJSON、setContentByLocalJSON、getLocalJSONFromContent和getSyncAction。这些方法需要在子类中进行实现,以处理特定类型的节点。 + + 6. setGid、setName、setLastModified和setDeleted方法用于设置节点的属性值。 + + 7. getGid、getName、getLastModified和getDeleted方法用于获取节点的属性值。 + + 总而言之,Node类是一个抽象基类,用于表示各种类型的节点。它定义了一些抽象方法和成员变量,以及节点属性的访问方法。具体的节点类型需要通过继承Node类并实现相关方法来完成具体的操作。 + 这段代码中调用了以下几个类和方法: + + 1. android.database.Cursor:Cursor是Android中用于操作数据库查询结果集的类。 + 2. android.util.Log:Log是Android中的日志记录工具类,用于输出日志信息。 + 3. net.micode.notes.tool.GTaskStringUtils:GTaskStringUtils是一个字符串处理工具类,用于处理GTasks中的字符串操作。 + 4. org.json.JSONException:JSONException是JSON解析过程中可能抛出的异常类。 + 5. org.json.JSONObject:JSONObject是一个用于表示JSON对象的类,用于处理JSON数据。 + +这段代码是一个名为SqlData的类。下面是对代码进行详细注释: + + 1. 定义了一个名为SqlData的类。 + + 2. SqlData类包含了一些常量和成员变量,用于表示数据库中的数据。 + + 3. SqlData类包含了一些方法,用于操作数据。 + + 4. setContent方法用于设置数据的内容。它接收一个JSONObject作为参数,并从中获取数据的各个属性值,并将其设置到相应的成员变量中。 + + 5. getContent方法用于获取数据的内容。它将数据的各个属性值封装到一个JSONObject对象中,并返回该对象。 + + 6. commit方法用于提交数据的更改。它根据数据的状态(是否已创建)和更改的属性值,执行插入或更新操作。 + + 7. getId方法用于获取数据的ID。 + + 总而言之,SqlData类用于操作和管理数据库中的数据。它通过设置和获取数据的属性值,并根据数据的状态执行相应的数据库操作。在提交更改之前,可以使用getContent方法获取数据的内容,并使用setId方法设置数据的ID。在调用commit方法后,数据的更改将被保存到数据库中。 + 好的,我会用中文添加注释来解释代码,并在之后提供一个总结。 +SQLNOTE +// 导入必要的Android和其他库 +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; + +// SqlNote类的定义,它在与GTask服务同步时代表一个便笺对象。 +public class SqlNote { + // 定义静态常量和字段 + // ... + + // 上下文对象,用于访问App的资源和数据库 + private Context mContext; + + // 用于与内容提供者通信的内容解析器 + private ContentResolver mContentResolver; + + // 用于标记便笺是否新创建的标志 + private boolean mIsCreate; + + // 便笺的各种属性(ID、日期、背景颜色等) + // ... + + // 存放从便笺中不同数据内容的列表 + private ArrayList mDataList; + + // 构造函数,用于初始化上下文和内容解析器,设置默认值 + // ... + + // 另一个构造函数,通过游标初始化便笺对象 + // ... + + // 第三个构造函数,通过便笺ID加载便笺 + // ... + + // loadFromCursor方法,通过游标加载便笺的信息 + // ... + + // loadDataContent方法,加载便笺的数据内容 + // ... + + // setContent方法,根据JSON对象设置便笺内容 + // ... + + // getContent方法,获取转换为JSON格式的便笺内容 + // ... + + // setParentId方法,设置便笺的父ID + // ... + + // setGtaskId方法,设置同步时便笺关联的GTask ID + // ... + + // setSyncId方法,设置同步ID + // ... + + // resetLocalModified方法,重置本地修改标志 + // ... + + // Getter方法集,用于获取便笺的各种属性 + // ... + + // commit方法,将修改提交到数据库,并处理版本验证 + // ... +} +``` + + ### 总结 + + 这段Java代码是一个Android应用的一部分,它定义了`SqlNote`类。`SqlNote`代表了一个与谷歌任务(GTask)服务进行数据同步的便笺对象。代码展示了几个用于不同目的的构造函数,例如基于上下文、游标或便笺ID来初始化。它还包括一些用于加载和更新便笺数据的私有方法,如`loadFromCursor`和`loadDataContent`。 + + 公开方法`setContent`和`getContent`分别用于根据JSON数据设置对象状态和获取对象的JSON表示(如便笺和相关数据)。此外,类中还有一些方法来设置特定属性,例如父ID和同步相关的标识符。`commit`方法用于将便笺的改动提交到数据库,同时处理版本控制,确保数据的正确同步。 + + 整体来看,此类作为数据模型的一部分,是实现应用数据持久化和同步的关键组成部分。 + 这段Java代码定义了一个名为 `Task` 的类,它扩展了 `Node` 类,并用于处理与 Google Tasks 服务(GTask)同步任务数据。以下是具体的代码解释以及其功能的简述: + + TASK +// 导入必要的包和类 + 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; + + // 包含任务元信息的 JSON 对象 + 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) { + // ... + } + + // 更新任务时生成的 JSON 对象 + public JSONObject getUpdateAction(int actionId) { + // ... + } + + // 通过从远程服务器获取的 JSON 设置任务内容 + public void setContentByRemoteJSON(JSONObject js) { + // ... + } + + // 通过本地 JSON 设置任务内容 + public void setContentByLocalJSON(JSONObject js) { + // ... + } + + // 从任务内容中获取本地 JSON 对象 + public JSONObject getLocalJSONFromContent() { + // ... + } + + // 设置任务的元信息 + public void setMetaInfo(MetaData metaData) { + // ... + } + + // 获取和同步相关的动作 + public int getSyncAction(Cursor c) { + // ... + } + + // 判断任务是否值得保存 + public boolean isWorthSaving() { + // ... + } + + // 设置完成状态 + 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; + } +} +``` + + ### 总结 + Task 类主要用于表示一个任务项,它在与 Google Tasks API 同步时, + 可以生成创建和更新任务的 JSON 对象,还可以通过 JSON 对象解析和设置任务的具体内容。 + Task 中包含了用于与远程同步协议配合的方法,处理任务的创建、更新、删除等操作,并生成相应的 + JSON 指令。此外,Task 类还提供了一系列的 setter 和 getter 方法,用于访问和修改任务的 + 状态和内容。 + + 这段Java代码定义了一个名为 `TaskList` 的类,它继承自 `Node` 类,并用于处理与 Google Tasks 服务(GTask)同步任务列表数据。以下是具体的代码解释以及其功能的简述: + + +TASKLIST +// 导入必要的包和类 + import android.database.Cursor; + import android.util.Log; + + import net.micode.notes.data.Notes; + import net.micode.notes.data.Notes.NoteColumns; +// ... + + import java.util.ArrayList; + +// TaskList类继承自Node类,表示一个任务列表 +public class TaskList extends Node { + // 日志标签 + private static final String TAG = TaskList.class.getSimpleName(); + + // 用于GTask中的排序索引 + private int mIndex; + + // 任务列表中的子任务列表 + private ArrayList mChildren; + + // 构造函数,初始化子任务列表和索引 + public TaskList() { + super(); + mChildren = new ArrayList(); + mIndex = 1; + } + + // 生成任务列表创建时的JSON操作对象 + public JSONObject getCreateAction(int actionId) { + // ... + } + + // 生成任务列表更新时的JSON操作对象 + public JSONObject getUpdateAction(int actionId) { + // ... + } + + // 通过远程JSON对象设置任务列表内容 + public void setContentByRemoteJSON(JSONObject js) { + // ... + } + + // 通过本地JSON设置任务列表内容 + public void setContentByLocalJSON(JSONObject js) { + // ... + } + + // 从任务列表内容中获取本地JSON对象 + public JSONObject getLocalJSONFromContent() { + // ... + } + + // 获取和同步相关的动作 + public int getSyncAction(Cursor c) { + // ... + } + + // 获取子任务数量 + public int getChildTaskCount() { + return mChildren.size(); + } + + // 添加子任务 + public boolean addChildTask(Task task) { + // ... + } + + // 在指定位置添加子任务 + public boolean addChildTask(Task task, int index) { + // ... + } + + // 移除子任务 + public boolean removeChildTask(Task task) { + // ... + } + + // 移动子任务到指定位置 + public boolean moveChildTask(Task task, int index) { + // ... + } + + // 通过GID查找子任务 + public Task findChildTaskByGid(String gid) { + // ... + } + + // 获取子任务在列表中的位置索引 + public int getChildTaskIndex(Task task) { + // ... + } + + // 通过位置索引获取子任务 + public Task getChildTaskByIndex(int index) { + // ... + } + + // 获取子任务列表 + public ArrayList getChildTaskList() { + return this.mChildren; + } + + // 设置索引 + public void setIndex(int index) { + this.mIndex = index; + } + + // 获取索引 + public int getIndex() { + return this.mIndex; + } +} +``` + + ### 总结 + `TaskList` 类主要用于表示一个任务列表。它提供了与 Google Tasks API 同步任务列表的多个方法,处理创建、更新、删除任务列表的同步操作,并生成相应的 JSON 指令。 + + 类中包含了管理任务列表中的任务的方法。可以添加、移除、移动任务,并能够通过一个全局ID(Gid)来查找特定的任务。提供了一系列的 setter 和 getter 方法用于访问和修改任务列表和其中任务的属性,如顺序索引(mIndex)。 + + 此外,TaskList 类中还包含了两个方法 `setContentByRemoteJSON` 和 `setContentByLocalJSON`,分别用来解析从服务器获得的 JSON 数据和本地生成的 JSON 数据,以及 `getLocalJSONFromContent` 和 `getSyncAction` 方法,用于实现任务的本地存储和同步逻辑。 + + 类中所有的异常均被抛出为 `ActionFailureException`,地址可能的同步和操作失败。 + + 这段Java代码定义了一个名为 `ActionFailureException` 的自定义异常类,它继承自 `RuntimeException`。该类用于表示执行某些操作时发生的异常。以下是代码的注释解释及其功能简述: + + + ACTFE +// 定义包名称 + package net.micode.notes.gtask.exception; + +// 自定义异常类的声明,用于处理操作失败的情况 +public class ActionFailureException extends RuntimeException { + // serialVersionUID用于异常类的版本控制 + private static final long serialVersionUID = 4425249765923293627L; + + // 无参构造函数 + public ActionFailureException() { + super(); + } + + // 带有详细信息的构造函数 + public ActionFailureException(String paramString) { + super(paramString); + } + + // 带有详细信息和原因的构造函数,paramThrowable为原始异常 + public ActionFailureException(String paramString, Throwable paramThrowable) { + super(paramString, paramThrowable); + } +} +``` + + ### 总结 + `ActionFailureException` 类提供了一种表示异常情况发生的机制,特别是在执行与 Google + Tasks API 相关的操作时。自定义异常可以让异常处理逻辑更加明确,当相关的操作失败时, + 可以抛出这个异常,从而允许调用者对这些特定的错误情况进行捕捉和处理。这有助于调试和维护代码。 + 例如,如果任务同步过程中出现了一个违反预期的情况,该异常可以被抛出,并且提供了相关的错误信息 + 和原因,这使得开发者可以快速定位问题所在。 + +NETFE + 这段Java代码定义了一个名为 `NetworkFailureException` 的自定义异常类,它继承自 `Exception`。该类用于表示执行网络操作时发生的异常。以下是代码的注释解释及其功能简述: + + ```java +// 定义包名称 + package net.micode.notes.gtask.exception; + +// 自定义异常类的声明,用于处理网络失败的情况 +public class NetworkFailureException extends Exception { + // serialVersionUID用于异常类的版本控制 + private static final long serialVersionUID = 2107610287180234136L; + + // 无参构造函数 + public NetworkFailureException() { + super(); + } + + // 带有详细信息的构造函数 + public NetworkFailureException(String paramString) { + super(paramString); + } + + // 带有详细信息和原因的构造函数,paramThrowable为原始异常 + public NetworkFailureException(String paramString, Throwable paramThrowable) { + super(paramString, paramThrowable); + } +} +``` + + ### 总结 + `NetworkFailureException` 类提供了用于指示网络操作失败的异常机制。当应用程序在进行网络请求 + 、同步或其他网络相关操作时发生异常,比如网络连接失败、服务器不响应或数据传输错误等情况,就可以抛出这个异常。 + + 自定义网络异常类有助于异常处理逻辑的明确定制。它使得开发者可以专门针对网络问题进行错误捕捉和处理 + ,而不是使用更通用的异常类型。这对于调试网络操作以及向用户报告具体错误原因是非常有用的。例如, + 在尝试同步便笺数据到云端而网络不可用时,可以抛出这个异常,并提供适当的错误消息以便进一步的错误 + 处理。 + +GAT + 这段Java代码定义了一个名为 `GTaskASyncTask` 的类,它继承自 `AsyncTask`。此类用于执行与 Google Tasks API 同步的异步任务。以下是代码的注释解释及其功能简述: + + ```java +// 包名 + package net.micode.notes.gtask.remote; + +// 导入 Android 和应用内部所需的类 + import android.app.Notification; + import android.app.NotificationManager; +// ... + +// 定义 GTaskASyncTask 类,该类继承了 AsyncTask +public class GTaskASyncTask extends AsyncTask { + + // 同步通知ID + private static int GTASK_SYNC_NOTIFICATION_ID = 5234235; + + // 定义一个内部接口,当同步完成时回调 + public interface OnCompleteListener { + void onComplete(); + } + + private Context mContext; + private NotificationManager mNotifiManager; + private GTaskManager mTaskManager; + private OnCompleteListener mOnCompleteListener; + + // 构造方法,初始化上下文、完成监听器、通知管理器和任务管理器 + public GTaskASyncTask(Context context, OnCompleteListener listener) { + // ... + } + + // 取消同步操作方法 + public void cancelSync() { + // ... + } + + // 发布进展的方法,用于显示同步进度信息 + public void publishProgess(String message) { + // ... + } + + // 显示通知的方法 + private void showNotification(int tickerId, String content) { + // ... + } + + // 后台执行同步任务的方法 + @Override + protected Integer doInBackground(Void... unused) { + // ... + } + + // 当同步进度更新时调用的方法 + @Override + protected void onProgressUpdate(String... progress) { + // ... + } + + // 当同步任务完成后执行的方法 + @Override + protected void onPostExecute(Integer result) { + // ... + } +} +``` + + ### 总结 + `GTaskASyncTask` 类是设计用来在后台线程中执行 Google Tasks 同步操作的。 + 同步操作的过程中,它通过发布进度信息来更新前端界面,并显示相关通知。`doInBackground` + 方法包含执行同步的主要逻辑,而 `onProgressUpdate` 和 `onPostExecute` + 方法则负责更新 UI 并在同步完成后进行清理动作。 + + 此类通过提供 `OnCompleteListener` 接口,允许调用者定义同步完成后的回调动作。此外, + 类包含方法来展示同步结果的通知,包括成功、失败、网络错误、内部错误和同步取消的情况。 + 这样的异步任务类可用来改善用户体验,避免在 UI 线程上执行耗时的网络操作, + 确保应用程序的响应性。 + + diff --git a/app/src/main/res/raw-zh-rCN/introduction b/app/src/main/res/raw-zh-rCN/introduction index 7188359..58daf99 100644 --- a/app/src/main/res/raw-zh-rCN/introduction +++ b/app/src/main/res/raw-zh-rCN/introduction @@ -1,5 +1,5 @@ -欢迎使用MIUI便签! - +MIUI便签启动! + 很好的介绍,来自福元路1号 无论从软件中直接添加,还是从桌面拖出widget,MIUI便签能让你快速建立和保存便签; 除了调整文字大小、便签背景、文件夹等基础功能外,你会发现MIUI便签也提供了清单模式、便签提醒、软件加密、导出到SD卡、同步google task的高级功能,让你的生活记录更加美好和安全;