From d2ea83f3f42aa3bf02a7e7afa11ce1556bde47e2 Mon Sep 17 00:00:00 2001 From: zpz1349878361 <1349878361@qq.com> Date: Wed, 8 Jan 2025 21:15:24 +0800 Subject: [PATCH] xin --- ...签开源代码全文泛读报告 .docx | Bin 560203 -> 560279 bytes src/BackupUtils.java | 279 ------------ src/DataUtils.java | 406 ------------------ src/GTaskStringUtils.java | 64 --- src/ResourceParser.java | 212 --------- 5 files changed, 961 deletions(-) delete mode 100644 src/BackupUtils.java delete mode 100644 src/DataUtils.java delete mode 100644 src/GTaskStringUtils.java delete mode 100644 src/ResourceParser.java diff --git a/doc/小米便签开源代码全文泛读报告 .docx b/doc/小米便签开源代码全文泛读报告 .docx index 9de2d35ac1cc27a27d7ebf1454688b4464058488..6370842d49f4556fc379d6c260e32b056e290451 100644 GIT binary patch delta 52516 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 delta 52329 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 U%~%fUc11{u1&Tb2RKS_~2T@l&(EtDd diff --git a/src/BackupUtils.java b/src/BackupUtils.java deleted file mode 100644 index 821cbd6..0000000 --- a/src/BackupUtils.java +++ /dev/null @@ -1,279 +0,0 @@ - -/* - * BackupUtils 工具类 - * 提供了笔记备份到文本文件的功能。 - */ - -package net.micode.notes.tool; - -// 引入需要用到的 Android 和 Java 标准库类 -import android.content.Context; -import android.database.Cursor; -import android.os.Environment; -import android.text.TextUtils; -import android.text.format.DateFormat; -import android.util.Log; - -import net.micode.notes.R; -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 java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.PrintStream; - -/** - * BackupUtils 是一个工具类,用于实现笔记的备份功能。 - */ -public class BackupUtils { - - // 日志标志,用于记录类中的日志 - private static final String TAG = "BackupUtils"; - - // 单例模式:存储唯一实例 - private static BackupUtils sInstance; - - /** - * 获取 BackupUtils 类的单例实例。 - * - * @param context 上下文对象,用于初始化内部组件。 - * @return 返回 BackupUtils 实例。 - */ - public static synchronized BackupUtils getInstance(Context context) { - if (sInstance == null) { // 如果实例不存在,则创建新实例 - sInstance = new BackupUtils(context); - } - return sInstance; // 返回单例实例 - } - - /** - * 定义备份操作的状态常量 - */ - public static final int STATE_SD_CARD_UNMOUONTED = 0; // SD卡未挂载 - public static final int STATE_BACKUP_FILE_NOT_EXIST = 1; // 备份文件不存在 - public static final int STATE_DATA_DESTROIED = 2; // 数据已损坏 - public static final int STATE_SYSTEM_ERROR = 3; // 系统错误 - public static final int STATE_SUCCESS = 4; // 备份成功 - - // 用于文本导出的工具类 - private TextExport mTextExport; - - /** - * 私有化构造函数,防止直接实例化。 - * - * @param context 上下文对象,用于初始化导出工具类。 - */ - private BackupUtils(Context context) { - mTextExport = new TextExport(context); // 初始化文本导出工具 - } - - /** - * 检查 SD 卡是否可用。 - * - * @return 如果 SD 卡已挂载,则返回 true,否则返回 false。 - */ - private static boolean externalStorageAvailable() { - return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()); - } - - /** - * 导出笔记到文本文件。 - * - * @return 返回导出操作的状态码。 - */ - public int exportToText() { - return mTextExport.exportToText(); // 调用 TextExport 类中的导出方法 - } - - /** - * 获取导出文本的文件名。 - * - * @return 返回文件名字符串。 - */ - public String getExportedTextFileName() { - return mTextExport.mFileName; // 返回文件名 - } - - /** - * 获取导出文件的目录。 - * - * @return 返回目录路径字符串。 - */ - public String getExportedTextFileDir() { - return mTextExport.mFileDirectory; // 返回文件目录路径 - } - - /** - * 内部类,用于执行文本导出功能。 - */ - private static class TextExport { - - // 定义查询笔记的列名 - private static final String[] NOTE_PROJECTION = { - NoteColumns.ID, // 笔记 ID - NoteColumns.MODIFIED_DATE, // 修改时间 - NoteColumns.SNIPPET, // 摘要 - NoteColumns.TYPE // 类型 - }; - - // 定义笔记列的索引 - private static final int NOTE_COLUMN_ID = 0; // ID 列索引 - private static final int NOTE_COLUMN_MODIFIED_DATE = 1; // 修改时间列索引 - private static final int NOTE_COLUMN_SNIPPET = 2; // 摘要列索引 - - // 定义查询数据表的列 - private static final String[] DATA_PROJECTION = { - DataColumns.CONTENT, // 内容 - DataColumns.MIME_TYPE, // MIME 类型 - DataColumns.DATA1, // 数据 1 - DataColumns.DATA2, // 数据 2 - DataColumns.DATA3, // 数据 3 - DataColumns.DATA4, // 数据 4 - }; - - // 定义数据列的索引 - private static final int DATA_COLUMN_CONTENT = 0; // 内容列索引 - private static final int DATA_COLUMN_MIME_TYPE = 1; // MIME 类型列索引 - - // 上下文对象,用于访问系统资源 - private Context mContext; - private String mFileName; // 文件名 - private String mFileDirectory; // 文件目录 - - // 初始化文本导出格式 - private final String[] TEXT_FORMAT; - - public TextExport(Context context) { - TEXT_FORMAT = context.getResources().getStringArray(R.array.format_for_exported_note); // 导出格式 - mContext = context; - mFileName = ""; - mFileDirectory = ""; - } - - /** - * 根据文件夹 ID 将笔记导出为文本。 - * - * @param folderId 文件夹 ID。 - * @param ps 打印流,用于写入文本内容。 - */ - private void exportFolderToText(String folderId, PrintStream ps) { - Cursor notesCursor = mContext.getContentResolver().query(Notes.CONTENT_NOTE_URI, NOTE_PROJECTION, - NoteColumns.PARENT_ID + "=?", new String[]{folderId}, null); - - if (notesCursor != null) { - if (notesCursor.moveToFirst()) { - do { - // 输出笔记的修改时间 - ps.println(String.format(getFormat(FORMAT_NOTE_DATE), DateFormat.format( - mContext.getString(R.string.format_datetime_mdhm), - notesCursor.getLong(NOTE_COLUMN_MODIFIED_DATE)))); - // 导出笔记内容 - String noteId = notesCursor.getString(NOTE_COLUMN_ID); - exportNoteToText(noteId, ps); - } while (notesCursor.moveToNext()); - } - notesCursor.close(); - } - } - - /** - * 导出指定笔记 ID 的内容到文本。 - * - * @param noteId 笔记 ID。 - * @param ps 打印流。 - */ - private void exportNoteToText(String noteId, PrintStream ps) { - Cursor dataCursor = mContext.getContentResolver().query(Notes.CONTENT_DATA_URI, DATA_PROJECTION, - DataColumns.NOTE_ID + "=?", new String[]{noteId}, null); - - if (dataCursor != null) { - if (dataCursor.moveToFirst()) { - do { - String mimeType = dataCursor.getString(DATA_COLUMN_MIME_TYPE); - if (DataConstants.CALL_NOTE.equals(mimeType)) { - // 导出通话笔记 - } else if (DataConstants.NOTE.equals(mimeType)) { - // 导出普通笔记 - } - } while (dataCursor.moveToNext()); - } - dataCursor.close(); - } - } - - /** - * 获取指向文件的打印流,用于导出笔记内容。 - * - * @return 返回指向生成的文本文件的打印流对象,如果失败则返回 null。 - */ - private PrintStream getExportToTextPrintStream() { - // 调用辅助方法,生成导出文件 - File file = generateFileMountedOnSDcard(mContext, R.string.file_path, R.string.file_name_txt_format); - if (file == null) { // 如果文件生成失败 - Log.e(TAG, "create file to exported failed"); // 输出错误日志 - return null; // 返回 null,表示打印流创建失败 - } - // 更新文件名和目录信息 - mFileName = file.getName(); // 设置文件名 - mFileDirectory = mContext.getString(R.string.file_path); // 设置文件目录 - - PrintStream ps = null; // 初始化打印流为 null - try { - // 创建文件输出流并包装为打印流 - FileOutputStream fos = new FileOutputStream(file); - ps = new PrintStream(fos); - } catch (FileNotFoundException e) { // 捕获文件未找到异常 - e.printStackTrace(); - return null; // 返回 null,表示打印流创建失败 - } catch (NullPointerException e) { // 捕获空指针异常 - e.printStackTrace(); - return null; // 返回 null - } - return ps; // 返回成功创建的打印流对象 - } - - /** - * 在 SD 卡上生成用于存储导出数据的文件。 - * - * @param context 上下文对象,用于访问应用资源。 - * @param filePathResId 文件路径的资源 ID。 - * @param fileNameFormatResId 文件名格式的资源 ID,用于生成包含日期的文件名。 - * @return 返回生成的文件对象,如果失败则返回 null。 - */ - private static File generateFileMountedOnSDcard(Context context, int filePathResId, int fileNameFormatResId) { - StringBuilder sb = new StringBuilder(); // 使用 StringBuilder 拼接路径和文件名 - - // 获取 SD 卡的根目录并拼接路径 - sb.append(Environment.getExternalStorageDirectory()); - sb.append(context.getString(filePathResId)); // 从资源中获取路径字符串 - - // 创建文件目录对象 - File filedir = new File(sb.toString()); - // 生成文件名并拼接到路径中,文件名包含日期信息 - sb.append(context.getString(fileNameFormatResId, - DateFormat.format(context.getString(R.string.format_date_ymd), System.currentTimeMillis()))); - File file = new File(sb.toString()); // 创建文件对象 - - try { - if (!filedir.exists()) { // 如果目录不存在 - filedir.mkdir(); // 创建目录 - } - if (!file.exists()) { // 如果文件不存在 - file.createNewFile(); // 创建文件 - } - return file; // 返回成功生成的文件对象 - } catch (SecurityException e) { // 捕获安全异常 - e.printStackTrace(); - } catch (IOException e) { // 捕获 I/O 异常 - e.printStackTrace(); - } - return null; // 如果发生异常,返回 null - } - } -} - - diff --git a/src/DataUtils.java b/src/DataUtils.java deleted file mode 100644 index 977ad28..0000000 --- a/src/DataUtils.java +++ /dev/null @@ -1,406 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * Licensed under the Apache License, Version 2.0 - * 该文件定义了用于管理和操作笔记数据的实用工具类 DataUtils。 - */ - -package net.micode.notes.tool; // 声明该类所属的包路径 - -// 导入需要的类,用于操作内容提供器、数据库、日志和其他功能 -import android.content.ContentProviderOperation; -import android.content.ContentProviderResult; -import android.content.ContentResolver; -import android.content.ContentUris; -import android.content.ContentValues; -import android.content.OperationApplicationException; -import android.database.Cursor; -import android.os.RemoteException; -import android.util.Log; - -import net.micode.notes.data.Notes; // 导入笔记数据定义 -import net.micode.notes.data.Notes.CallNote; // 导入与通话笔记相关的定义 -import net.micode.notes.data.Notes.NoteColumns; // 导入与笔记列相关的定义 -import net.micode.notes.ui.NotesListAdapter.AppWidgetAttribute; // 导入笔记小部件属性定义 - -import java.util.ArrayList; // 用于创建动态数组 -import java.util.HashSet; // 用于存储无重复的集合 - -// 定义 DataUtils 工具类 -public class DataUtils { - public static final String TAG = "DataUtils"; // 定义日志标记常量 - - /** - * 批量删除笔记 - * - * @param resolver 内容解析器 - * @param ids 要删除的笔记ID集合 - * @return 如果删除成功或集合为空或为null,则返回true,否则返回false - */ - public static boolean batchDeleteNotes(ContentResolver resolver, HashSet ids) { - if (ids == null) { // 如果传入的ID集合为null - Log.d(TAG, "the ids is null"); // 输出调试日志 - return true; // 返回true,表示没有需要删除的内容 - } - if (ids.size() == 0) { // 如果ID集合为空 - Log.d(TAG, "no id is in the hashset"); // 输出调试日志 - return true; // 返回true - } - - // 创建一个操作列表,用于批量删除操作 - ArrayList operationList = new ArrayList(); - for (long id : ids) { // 遍历需要删除的ID集合 - if (id == Notes.ID_ROOT_FOLDER) { // 如果ID是系统根文件夹 - Log.e(TAG, "Don't delete system folder root"); // 输出错误日志 - continue; // 跳过此ID - } - // 创建删除操作 - ContentProviderOperation.Builder builder = ContentProviderOperation - .newDelete(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id)); - operationList.add(builder.build()); // 将删除操作添加到列表 - } - try { - // 批量执行删除操作 - ContentProviderResult[] results = resolver.applyBatch(Notes.AUTHORITY, operationList); - if (results == null || results.length == 0 || results[0] == null) { // 检查删除结果 - Log.d(TAG, "delete notes failed, ids:" + ids.toString()); // 输出调试日志 - return false; // 删除失败,返回false - } - return true; // 删除成功,返回true - } catch (RemoteException e) { // 捕获远程异常 - Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); // 输出错误日志 - } catch (OperationApplicationException e) { // 捕获操作应用异常 - Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); // 输出错误日志 - } - return false; // 出现异常时,返回false - } - - /** - * 将笔记移动到指定文件夹 - * - * @param resolver 内容解析器 - * @param id 笔记ID - * @param srcFolderId 原始文件夹ID - * @param desFolderId 目标文件夹ID - */ - public static void moveNoteToFoler(ContentResolver resolver, long id, long srcFolderId, long desFolderId) { - ContentValues values = new ContentValues(); // 创建一个ContentValues对象 - values.put(NoteColumns.PARENT_ID, desFolderId); // 设置目标文件夹ID - values.put(NoteColumns.ORIGIN_PARENT_ID, srcFolderId); // 设置原始文件夹ID - values.put(NoteColumns.LOCAL_MODIFIED, 1); // 标记为本地已修改 - // 更新指定笔记的文件夹信息 - resolver.update(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id), values, null, null); - } - - /** - * 批量将笔记移动到指定文件夹 - * - * @param resolver 内容解析器 - * @param ids 要移动的笔记ID集合 - * @param folderId 目标文件夹ID - * @return 如果移动成功或集合为空或为null,则返回true,否则返回false - */ - public static boolean batchMoveToFolder(ContentResolver resolver, HashSet ids, long folderId) { - if (ids == null) { // 如果ID集合为null - Log.d(TAG, "the ids is null"); // 输出调试日志 - return true; // 返回true - } - - // 构建更新操作的列表 - ArrayList operationList = new ArrayList(); - for (long id : ids) { // 遍历ID集合 - // 创建更新操作 - ContentProviderOperation.Builder builder = ContentProviderOperation - .newUpdate(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id)); - builder.withValue(NoteColumns.PARENT_ID, folderId); // 设置目标文件夹ID - builder.withValue(NoteColumns.LOCAL_MODIFIED, 1); // 标记为本地已修改 - operationList.add(builder.build()); // 将操作添加到列表 - } - - try { - // 批量执行更新操作 - ContentProviderResult[] results = resolver.applyBatch(Notes.AUTHORITY, operationList); - if (results == null || results.length == 0 || results[0] == null) { // 检查操作结果 - Log.d(TAG, "move notes failed, ids:" + ids.toString()); // 输出调试日志 - return false; // 操作失败 - } - return true; // 操作成功 - } catch (RemoteException e) { // 捕获远程异常 - Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); // 输出错误日志 - } catch (OperationApplicationException e) { // 捕获操作应用异常 - Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); // 输出错误日志 - } - return false; // 出现异常时,返回false - } - - /** - * 获取除系统文件夹外的所有用户文件夹数量 - * - * @param resolver 内容解析器 - * @return 用户文件夹数量 - */ - public static int getUserFolderCount(ContentResolver resolver) { - // 查询数据库获取用户文件夹数量,排除系统垃圾箱文件夹 - Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI, - new String[]{"COUNT(*)"}, // 查询列:计数 - NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>?", // 条件:文件夹类型且不是垃圾箱 - new String[]{String.valueOf(Notes.TYPE_FOLDER), String.valueOf(Notes.ID_TRASH_FOLER)}, // 条件值 - null); // 排序:无 - - int count = 0; // 初始化文件夹计数 - if (cursor != null) { // 如果查询结果不为空 - if (cursor.moveToFirst()) { // 移动到第一条记录 - try { - count = cursor.getInt(0); // 获取计数值 - } catch (IndexOutOfBoundsException e) { // 捕获索引越界异常 - Log.e(TAG, "get folder count failed:" + e.toString()); // 输出错误日志 - } finally { - cursor.close(); // 关闭游标 - } - } - } - return count; // 返回文件夹数量 - } -} - /** - * 检查指定类型的笔记在数据库中是否可见 - * - * @param resolver 内容解析器 - * @param noteId 笔记ID - * @param type 笔记类型 - * @return 如果可见,则返回true,否则返回false - */ - public static boolean visibleInNoteDatabase(ContentResolver resolver, long noteId, int type) { - // 查询数据库,检查指定类型的笔记是否存在且不在垃圾箱中 - Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), // 查询的URI - null, // 查询的列,null表示查询所有列 - NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER, // 条件 - new String[]{String.valueOf(type)}, // 条件值 - null); // 排序:无 - - boolean exist = false; // 初始化结果为false - if (cursor != null) { // 如果查询结果不为空 - if (cursor.getCount() > 0) { // 如果查询结果有记录 - exist = true; // 设置结果为true - } - cursor.close(); // 关闭游标 - } - return exist; // 返回结果 - } - - /** - * 检查指定的笔记ID在数据库中是否存在 - * - * @param resolver 内容解析器 - * @param noteId 笔记ID - * @return 如果存在,则返回true,否则返回false - */ - public static boolean existInNoteDatabase(ContentResolver resolver, long noteId) { - // 查询数据库,检查笔记是否存在 - Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), // 查询的URI - null, // 查询所有列 - null, // 无条件 - null, // 无条件值 - null); // 无排序 - - boolean exist = false; // 初始化结果为false - if (cursor != null) { // 如果查询结果不为空 - if (cursor.getCount() > 0) { // 如果查询结果有记录 - exist = true; // 设置结果为true - } - cursor.close(); // 关闭游标 - } - return exist; // 返回结果 - } - - /** - * 检查指定的数据ID在数据库中是否存在 - * - * @param resolver 内容解析器 - * @param dataId 数据ID - * @return 如果存在,则返回true,否则返回false - */ - public static boolean existInDataDatabase(ContentResolver resolver, long dataId) { - // 查询数据库,检查数据是否存在 - Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_DATA_URI, dataId), // 查询的URI - null, // 查询所有列 - null, // 无条件 - null, // 无条件值 - null); // 无排序 - - boolean exist = false; // 初始化结果为false - if (cursor != null) { // 如果查询结果不为空 - if (cursor.getCount() > 0) { // 如果查询结果有记录 - exist = true; // 设置结果为true - } - cursor.close(); // 关闭游标 - } - return exist; // 返回结果 - } - - /** - * 检查文件夹名称是否在数据库中已存在(不包括系统文件夹) - * - * @param resolver 内容解析器 - * @param name 文件夹名称 - * @return 如果已存在,则返回true,否则返回false - */ - public static boolean checkVisibleFolderName(ContentResolver resolver, String name) { - // 查询数据库,检查文件夹名称是否存在且不在垃圾箱中 - Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI, // 查询的URI - null, // 查询所有列 - NoteColumns.TYPE + "=" + Notes.TYPE_FOLDER + // 条件:类型为文件夹 - " AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER + // 且不在垃圾箱 - " AND " + NoteColumns.SNIPPET + "=?", // 且名称匹配 - new String[]{name}, // 条件值 - null); // 无排序 - - boolean exist = false; // 初始化结果为false - if (cursor != null) { // 如果查询结果不为空 - if (cursor.getCount() > 0) { // 如果查询结果有记录 - exist = true; // 设置结果为true - } - cursor.close(); // 关闭游标 - } - return exist; // 返回结果 - } - - /** - * 获取指定文件夹中的笔记小部件信息集合 - * - * @param resolver 内容解析器 - * @param folderId 文件夹ID - * @return 笔记小部件信息集合 - */ - public static HashSet getFolderNoteWidget(ContentResolver resolver, long folderId) { - // 查询数据库,获取文件夹中的小部件信息 - Cursor c = resolver.query(Notes.CONTENT_NOTE_URI, // 查询的URI - new String[]{NoteColumns.WIDGET_ID, NoteColumns.WIDGET_TYPE}, // 查询的列 - NoteColumns.PARENT_ID + "=?", // 条件:父ID为指定文件夹 - new String[]{String.valueOf(folderId)}, // 条件值 - null); // 无排序 - - HashSet set = null; // 初始化小部件集合为null - if (c != null) { // 如果查询结果不为空 - if (c.moveToFirst()) { // 移动到第一条记录 - set = new HashSet(); // 初始化小部件集合 - do { // 遍历查询结果 - try { - AppWidgetAttribute widget = new AppWidgetAttribute(); // 创建小部件属性对象 - widget.widgetId = c.getInt(0); // 获取小部件ID - widget.widgetType = c.getInt(1); // 获取小部件类型 - set.add(widget); // 将小部件添加到集合 - } catch (IndexOutOfBoundsException e) { // 捕获索引越界异常 - Log.e(TAG, e.toString()); // 输出错误日志 - } - } while (c.moveToNext()); // 移动到下一条记录 - } - c.close(); // 关闭游标 - } - return set; // 返回小部件集合 - } - - - /** - * 通过笔记ID获取关联的通话号码 - * - * @param resolver 内容解析器 - * @param noteId 笔记ID - * @return 通话号码,如果未找到则返回空字符串 - */ - public static String getCallNumberByNoteId(ContentResolver resolver, long noteId) { - // 查询数据库,获取与笔记ID关联的通话号码 - Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI, // 查询的URI - new String[]{CallNote.PHONE_NUMBER}, // 查询的列:电话号码 - CallNote.NOTE_ID + "=? AND " + CallNote.MIME_TYPE + "=?", // 条件:匹配笔记ID和MIME类型 - new String[]{String.valueOf(noteId), CallNote.CONTENT_ITEM_TYPE}, // 条件值 - null); // 无排序 - - if (cursor != null && cursor.moveToFirst()) { // 如果查询结果不为空且有记录 - try { - return cursor.getString(0); // 返回查询结果中的电话号码 - } catch (IndexOutOfBoundsException e) { // 捕获索引越界异常 - Log.e(TAG, "Get call number fails " + e.toString()); // 输出错误日志 - } finally { - cursor.close(); // 关闭游标 - } - } - return ""; // 未找到记录时返回空字符串 - } - - /** - * 根据电话号码和通话日期获取对应的笔记ID - * - * @param resolver 内容解析器 - * @param phoneNumber 电话号码 - * @param callDate 通话日期 - * @return 笔记ID,未找到则返回0 - */ - public static long getNoteIdByPhoneNumberAndCallDate(ContentResolver resolver, String phoneNumber, long callDate) { - // 查询数据库,根据电话号码和通话日期获取笔记ID - Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI, // 查询的URI - new String[]{CallNote.NOTE_ID}, // 查询的列:笔记ID - CallNote.CALL_DATE + "=? AND " + CallNote.MIME_TYPE + "=? AND PHONE_NUMBERS_EQUAL(" - + CallNote.PHONE_NUMBER + ",?)", // 条件:匹配通话日期、MIME类型和电话号码 - new String[]{String.valueOf(callDate), CallNote.CONTENT_ITEM_TYPE, phoneNumber}, // 条件值 - null); // 无排序 - - if (cursor != null) { // 如果查询结果不为空 - if (cursor.moveToFirst()) { // 如果有记录 - try { - return cursor.getLong(0); // 返回笔记ID - } catch (IndexOutOfBoundsException e) { // 捕获索引越界异常 - Log.e(TAG, "Get call note id fails " + e.toString()); // 输出错误日志 - } - } - cursor.close(); // 关闭游标 - } - return 0; // 未找到记录时返回0 - } - - /** - * 根据笔记ID从数据库中获取笔记的摘要 - * - * @param resolver 内容解析器 - * @param noteId 笔记的ID - * @return 笔记的摘要字符串。如果找不到对应的笔记,将抛出IllegalArgumentException。 - */ - public static String getSnippetById(ContentResolver resolver, long noteId) { - // 查询数据库,获取指定ID笔记的摘要 - Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI, // 查询的URI - new String[]{NoteColumns.SNIPPET}, // 查询的列:摘要 - NoteColumns.ID + "=?", // 条件:匹配笔记ID - new String[]{String.valueOf(noteId)}, // 条件值 - null); // 无排序 - - if (cursor != null) { // 如果查询结果不为空 - String snippet = ""; // 初始化摘要为空字符串 - if (cursor.moveToFirst()) { // 如果有记录 - snippet = cursor.getString(0); // 获取摘要字符串 - } - cursor.close(); // 关闭游标 - return snippet; // 返回摘要 - } - // 如果未找到记录,抛出异常 - throw new IllegalArgumentException("Note is not found with id: " + noteId); - } - - /** - * 格式化摘要字符串 - * 主要用于去除字符串两端的空白字符,以及截取至第一个换行符之前的内容。 - * - * @param snippet 需要格式化的摘要字符串 - * @return 格式化后的摘要字符串 - */ - public static String getFormattedSnippet(String snippet) { - // 如果摘要字符串不为空,进行格式化处理 - if (snippet != null) { - snippet = snippet.trim(); // 去除两端的空白字符 - int index = snippet.indexOf('\n'); // 查找第一个换行符的位置 - if (index != -1) { // 如果存在换行符 - snippet = snippet.substring(0, index); // 截取至第一个换行符之前的内容 - } - } - return snippet; // 返回格式化后的摘要字符串 - } -} - diff --git a/src/GTaskStringUtils.java b/src/GTaskStringUtils.java deleted file mode 100644 index aeaa30d..0000000 --- a/src/GTaskStringUtils.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * GTaskStringUtils 类定义 - * 该类提供了一系列与 GTask 相关的字符串常量,用于在操作 GTask 数据时标识各种 JSON 属性。 - */ -package net.micode.notes.tool; // 定义该类所在的包路径 - - -// 定义 GTaskStringUtils 类 -public class GTaskStringUtils { - - // GTask JSON 对象中各种属性的键名 - public final static String GTASK_JSON_ACTION_ID = "action_id"; // 动作 ID - public final static String GTASK_JSON_ACTION_LIST = "action_list"; // 动作列表 - public final static String GTASK_JSON_ACTION_TYPE = "action_type"; // 动作类型 - public final static String GTASK_JSON_ACTION_TYPE_CREATE = "create"; // 创建动作类型 - public final static String GTASK_JSON_ACTION_TYPE_GETALL = "get_all"; // 获取所有动作类型 - public final static String GTASK_JSON_ACTION_TYPE_MOVE = "move"; // 移动动作类型 - public final static String GTASK_JSON_ACTION_TYPE_UPDATE = "update"; // 更新动作类型 - public final static String GTASK_JSON_CREATOR_ID = "creator_id"; // 创建者 ID - public final static String GTASK_JSON_CHILD_ENTITY = "child_entity"; // 子实体 - public final static String GTASK_JSON_CLIENT_VERSION = "client_version"; // 客户端版本 - public final static String GTASK_JSON_COMPLETED = "completed"; // 完成状态 - public final static String GTASK_JSON_CURRENT_LIST_ID = "current_list_id"; // 当前列表 ID - public final static String GTASK_JSON_DEFAULT_LIST_ID = "default_list_id"; // 默认列表 ID - public final static String GTASK_JSON_DELETED = "deleted"; // 删除状态 - public final static String GTASK_JSON_DEST_LIST = "dest_list"; // 目标列表 - public final static String GTASK_JSON_DEST_PARENT = "dest_parent"; // 目标父实体 - public final static String GTASK_JSON_DEST_PARENT_TYPE = "dest_parent_type"; // 目标父实体类型 - public final static String GTASK_JSON_ENTITY_DELTA = "entity_delta"; // 实体增量 - public final static String GTASK_JSON_ENTITY_TYPE = "entity_type"; // 实体类型 - public final static String GTASK_JSON_GET_DELETED = "get_deleted"; // 获取已删除项 - public final static String GTASK_JSON_ID = "id"; // ID - public final static String GTASK_JSON_INDEX = "index"; // 索引 - public final static String GTASK_JSON_LAST_MODIFIED = "last_modified"; // 最后修改时间 - public final static String GTASK_JSON_LATEST_SYNC_POINT = "latest_sync_point"; // 最新同步点 - public final static String GTASK_JSON_LIST_ID = "list_id"; // 列表 ID - public final static String GTASK_JSON_LISTS = "lists"; // 列表集合 - public final static String GTASK_JSON_NAME = "name"; // 名称 - public final static String GTASK_JSON_NEW_ID = "new_id"; // 新 ID - public final static String GTASK_JSON_NOTES = "notes"; // 备注 - public final static String GTASK_JSON_PARENT_ID = "parent_id"; // 父 ID - public final static String GTASK_JSON_PRIOR_SIBLING_ID = "prior_sibling_id"; // 前一个兄弟 ID - public final static String GTASK_JSON_RESULTS = "results"; // 结果 - public final static String GTASK_JSON_SOURCE_LIST = "source_list"; // 源列表 - public final static String GTASK_JSON_TASKS = "tasks"; // 任务集合 - public final static String GTASK_JSON_TYPE = "type"; // 类型 - public final static String GTASK_JSON_TYPE_GROUP = "GROUP"; // 类型:组 - public final static String GTASK_JSON_TYPE_TASK = "TASK"; // 类型:任务 - public final static String GTASK_JSON_USER = "user"; // 用户 - - // MIUI 笔记相关的文件夹前缀和元数据键名 - public final static String MIUI_FOLDER_PREFFIX = "[MIUI_Notes]"; // MIUI 笔记文件夹前缀 - public final static String FOLDER_DEFAULT = "Default"; // 默认文件夹名 - public final static String FOLDER_CALL_NOTE = "Call_Note"; // 通话笔记文件夹名 - public final static String FOLDER_META = "METADATA"; // 元数据文件夹名 - - // 元数据头部键名 - public final static String META_HEAD_GTASK_ID = "meta_gid"; // 元数据头部:GTask ID - public final static String META_HEAD_NOTE = "meta_note"; // 元数据头部:笔记内容 - public final static String META_HEAD_DATA = "meta_data"; // 元数据头部:元数据 - - // 元数据笔记名称,不可更新和删除 - public final static String META_NOTE_NAME = "[META INFO] DON'T UPDATE AND DELETE"; // 不可更新和删除的元数据名称 -} diff --git a/src/ResourceParser.java b/src/ResourceParser.java deleted file mode 100644 index 8a4f353..0000000 --- a/src/ResourceParser.java +++ /dev/null @@ -1,212 +0,0 @@ -/* - * ResourceParser 类用于管理与应用资源相关的各种静态方法和常量。 - */ -package net.micode.notes.tool; - -// 导入 Android 的 Context 和 PreferenceManager 类,用于访问应用的上下文和首选项 -import android.content.Context; -import android.preference.PreferenceManager; - -// 导入应用资源和偏好设置相关的类 -import net.micode.notes.R; -import net.micode.notes.ui.NotesPreferenceActivity; - -// 定义 ResourceParser 类 -public class ResourceParser { - - // 定义笔记背景颜色的常量 - public static final int YELLOW = 0; // 黄色背景 - public static final int BLUE = 1; // 蓝色背景 - public static final int WHITE = 2; // 白色背景 - public static final int GREEN = 3; // 绿色背景 - public static final int RED = 4; // 红色背景 - - // 默认背景颜色 - public static final int BG_DEFAULT_COLOR = YELLOW; - - // 定义文本大小的常量 - public static final int TEXT_SMALL = 0; // 小号字体 - public static final int TEXT_MEDIUM = 1; // 中号字体 - public static final int TEXT_LARGE = 2; // 大号字体 - public static final int TEXT_SUPER = 3; // 特大号字体 - - // 默认字体大小 - public static final int BG_DEFAULT_FONT_SIZE = TEXT_MEDIUM; - - /** - * 笔记背景资源类,提供获取不同背景资源的方法。 - */ - public static class NoteBgResources { - // 编辑状态下的背景资源数组 - private final static int[] BG_EDIT_RESOURCES = new int[]{ - R.drawable.edit_yellow, // 黄色背景资源 - R.drawable.edit_blue, // 蓝色背景资源 - R.drawable.edit_white, // 白色背景资源 - R.drawable.edit_green, // 绿色背景资源 - R.drawable.edit_red // 红色背景资源 - }; - - // 编辑状态下的标题背景资源数组 - private final static int[] BG_EDIT_TITLE_RESOURCES = new int[]{ - R.drawable.edit_title_yellow, // 黄色标题背景资源 - R.drawable.edit_title_blue, // 蓝色标题背景资源 - R.drawable.edit_title_white, // 白色标题背景资源 - R.drawable.edit_title_green, // 绿色标题背景资源 - R.drawable.edit_title_red // 红色标题背景资源 - }; - - // 根据id获取编辑状态下的背景资源 - public static int getNoteBgResource(int id) { - return BG_EDIT_RESOURCES[id]; - } - - // 根据id获取编辑状态下的标题背景资源 - public static int getNoteTitleBgResource(int id) { - return BG_EDIT_TITLE_RESOURCES[id]; - } - } - - /** - * 获取默认笔记背景id。 - * - * @param context 上下文对象,用于访问SharedPreferences。 - * @return 如果用户设置了背景颜色,则返回一个随机背景颜色id;否则返回默认背景颜色id。 - */ - public static int getDefaultBgId(Context context) { - // 检查用户是否在设置中启用了背景颜色选项 - if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean( - NotesPreferenceActivity.PREFERENCE_SET_BG_COLOR_KEY, false)) { - // 返回一个随机背景颜色id - return (int) (Math.random() * NoteBgResources.BG_EDIT_RESOURCES.length); - } else { - // 返回默认背景颜色id - return BG_DEFAULT_COLOR; - } - } - - /** - * 笔记列表项背景资源类,提供获取不同背景资源的方法。 - */ - public static class NoteItemBgResources { - // 第一个列表项的背景资源数组 - private final static int[] BG_FIRST_RESOURCES = new int[]{ - R.drawable.list_yellow_up, // 黄色第一个项背景 - R.drawable.list_blue_up, // 蓝色第一个项背景 - R.drawable.list_white_up, // 白色第一个项背景 - R.drawable.list_green_up, // 绿色第一个项背景 - R.drawable.list_red_up // 红色第一个项背景 - }; - - // 普通列表项的背景资源数组 - private final static int[] BG_NORMAL_RESOURCES = new int[]{ - R.drawable.list_yellow_middle, // 黄色普通项背景 - R.drawable.list_blue_middle, // 蓝色普通项背景 - R.drawable.list_white_middle, // 白色普通项背景 - R.drawable.list_green_middle, // 绿色普通项背景 - R.drawable.list_red_middle // 红色普通项背景 - }; - - // 最后一个列表项的背景资源数组 - private final static int[] BG_LAST_RESOURCES = new int[]{ - R.drawable.list_yellow_down, // 黄色最后项背景 - R.drawable.list_blue_down, // 蓝色最后项背景 - R.drawable.list_white_down, // 白色最后项背景 - R.drawable.list_green_down, // 绿色最后项背景 - R.drawable.list_red_down // 红色最后项背景 - }; - - // 单个列表项的背景资源数组 - private final static int[] BG_SINGLE_RESOURCES = new int[]{ - R.drawable.list_yellow_single, // 黄色单项背景 - R.drawable.list_blue_single, // 蓝色单项背景 - R.drawable.list_white_single, // 白色单项背景 - R.drawable.list_green_single, // 绿色单项背景 - R.drawable.list_red_single // 红色单项背景 - }; - - // 获取第一个列表项的背景资源 - public static int getNoteBgFirstRes(int id) { - return BG_FIRST_RESOURCES[id]; - } - - // 获取最后一个列表项的背景资源 - public static int getNoteBgLastRes(int id) { - return BG_LAST_RESOURCES[id]; - } - - // 获取单个列表项的背景资源 - public static int getNoteBgSingleRes(int id) { - return BG_SINGLE_RESOURCES[id]; - } - - // 获取普通列表项的背景资源 - public static int getNoteBgNormalRes(int id) { - return BG_NORMAL_RESOURCES[id]; - } - - // 获取文件夹背景资源 - public static int getFolderBgRes() { - return R.drawable.list_folder; - } - } - - /** - * 小部件背景资源类,提供获取小部件背景资源的方法。 - */ - public static class WidgetBgResources { - // 2x 小部件背景资源数组 - private final static int[] BG_2X_RESOURCES = new int[]{ - R.drawable.widget_2x_yellow, // 黄色2x小部件背景 - R.drawable.widget_2x_blue, // 蓝色2x小部件背景 - R.drawable.widget_2x_white, // 白色2x小部件背景 - R.drawable.widget_2x_green, // 绿色2x小部件背景 - R.drawable.widget_2x_red // 红色2x小部件背景 - }; - - // 根据id获取2x小部件的背景资源 - public static int getWidget2xBgResource(int id) { - return BG_2X_RESOURCES[id]; - } - - // 4x 小部件背景资源数组 - private final static int[] BG_4X_RESOURCES = new int[]{ - R.drawable.widget_4x_yellow, // 黄色4x小部件背景 - R.drawable.widget_4x_blue, // 蓝色4x小部件背景 - R.drawable.widget_4x_white, // 白色4x小部件背景 - R.drawable.widget_4x_green, // 绿色4x小部件背景 - R.drawable.widget_4x_red // 红色4x小部件背景 - }; - - // 根据id获取4x小部件的背景资源 - public static int getWidget4xBgResource(int id) { - return BG_4X_RESOURCES[id]; - } - } - - /** - * 文本外观资源类,提供获取不同文本外观资源的方法。 - */ - public static class TextAppearanceResources { - // 文本外观资源数组 - private final static int[] TEXTAPPEARANCE_RESOURCES = new int[]{ - R.style.TextAppearanceNormal, // 正常文本样式 - R.style.TextAppearanceMedium, // 中等文本样式 - R.style.TextAppearanceLarge, // 大号文本样式 - R.style.TextAppearanceSuper // 特大号文本样式 - }; - - // 根据id获取文本外观资源 - public static int getTexAppearanceResource(int id) { - // 如果id超出资源数组范围,返回默认字体大小 - if (id >= TEXTAPPEARANCE_RESOURCES.length) { - return BG_DEFAULT_FONT_SIZE; - } - return TEXTAPPEARANCE_RESOURCES[id]; - } - - // 获取文本外观资源的数量 - public static int getResourcesSize() { - return TEXTAPPEARANCE_RESOURCES.length; - } - } -}