修改部分注释

pull/6/head
AetherPendragon 3 weeks ago
parent 06711ccca6
commit bc5ca6f0a0

@ -26,13 +26,14 @@ import android.util.Log;
import java.util.HashMap;
/**
*
* <p></p>
* <p>使</p>
*
* 便
*
*/
public class Contact {
/** 联系人缓存用于提高查询效率key 为原始电话号码字符串value 为联系人姓名 */
// 功能:缓存查询结果,,暂时存储电话号码与联系人的映射关系,避免重复查询,节省开销
private static HashMap<String, String> sContactCache;
// 日志标签
private static final String TAG = "Contact";
/**
@ -45,6 +46,20 @@ public class Contact {
+ "(SELECT raw_contact_id "
+ " FROM phone_lookup"
+ " WHERE min_match = '+')";
/**
* SQL
* AND
* PHONE_NUMBERS_EQUAL(Phone.NUMBER,?)
* PHONE_NUMBERS_EQUAL AndroidPhone.NUMBER
* Data.MIMETYPE = 'Phone.CONTENT_ITEM_TYPE'
*
* Data.RAW_CONTACT_ID IN A
* IDA
* A(SELECT raw_contact_id FROM phone_lookup WHERE min_match = '+')
* phone_lookupAndroid
* min_match
*
*/
/**
*
@ -54,41 +69,50 @@ public class Contact {
* @return null
*/
public static String getContact(Context context, String phoneNumber) {
// 初始化缓存:首次调用时创建,后续复用
// 初始化查询缓存
if(sContactCache == null) {
sContactCache = new HashMap<String, String>();
}
// 先从缓存中查找,命中则直接返回,避免再次访问数据库
// 检查缓存中是否已存在该电话号码的查询结果
if(sContactCache.containsKey(phoneNumber)) {
return sContactCache.get(phoneNumber);
}
// 构建查询条件:将占位符中的“+”替换为待查询号码的最小匹配值
// PhoneNumberUtils.toCallerIDMinMatch(phoneNumber)用于计算电话号码的最小匹配位数
// 将占位符"+"替换为最小匹配数,以构建完整的查询语句
String selection = CALLER_ID_SELECTION.replace("+",
PhoneNumberUtils.toCallerIDMinMatch(phoneNumber));
// 查询联系人数据库,仅投影联系人显示名
/**
*
* context.getContentResolver().query
*/
Cursor cursor = context.getContentResolver().query(
Data.CONTENT_URI,
new String [] { Phone.DISPLAY_NAME },
selection,
new String[] { phoneNumber },
null);
Data.CONTENT_URI, // 查询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中
Log.e(TAG, " Cursor get string error " + e.toString());
return null;
} finally {
// 关闭Cursor防止内存泄露
cursor.close();
}
} else {
// 没有找到匹配的联系人,将信息写入日志中
Log.d(TAG, "No contact matched with number:" + phoneNumber);
return null;
}

@ -20,38 +20,40 @@ import android.net.Uri;
/**
*
* <p> ContentProvider URI ID</p>
* <p>ProviderDatabaseHelperUI</p>
* ContentProvider URI ID
* ProviderDatabaseHelperUIGTASK
*/
public class Notes {
/** ContentProvider的授权标识 */
// ContentProvider的授权标识
public static final String AUTHORITY = "micode_notes";
// 日志标签
public static final String TAG = "Notes";
/** 笔记类型:普通笔记 */
// 0类型普通笔记
public static final int TYPE_NOTE = 0;
/** 笔记类型:文件夹 */
// 1类型文件夹
public static final int TYPE_FOLDER = 1;
/** 笔记类型:系统文件夹 */
// 2类型系统文件夹
public static final int TYPE_SYSTEM = 2;
/**
* ID
* <ul>
* <li>{@link #ID_ROOT_FOLDER} </li>
* <li>{@link #ID_TEMPARAY_FOLDER} </li>
* <li>{@link #ID_CALL_RECORD_FOLDER} </li>
* <li>{@link #ID_TRASH_FOLER} </li>
* </ul>
*/
/** 根文件夹ID */
// 系统文件夹的 ID 定义。
// #ID_ROOT_FOLDER 默认根文件夹
// #ID_TEMPARAY_FOLDER 临时文件夹,移动笔记时的中转
// #ID_CALL_RECORD_FOLDER 通话记录专用文件夹
// #ID_TRASH_FOLER 回收站
public static final int ID_ROOT_FOLDER = 0;
/** 临时文件夹ID用于存放不属于任何文件夹的笔记 */
public static final int ID_TEMPARAY_FOLDER = -1;
/** 通话记录文件夹ID */
public static final int ID_CALL_RECORD_FOLDER = -2;
/** 回收站文件夹ID */
public static final int ID_TRASH_FOLER = -3;
/**
* Intent Extra Android Intent
* 1.
* 2. ID
* 3. ID
* 4.
* 5. ID
* 6.
*/
public static final String INTENT_EXTRA_ALERT_DATE = "net.micode.notes.alert_date";
public static final String INTENT_EXTRA_BACKGROUND_ID = "net.micode.notes.background_color_id";
public static final String INTENT_EXTRA_WIDGET_ID = "net.micode.notes.widget_id";
@ -59,220 +61,171 @@ public class Notes {
public static final String INTENT_EXTRA_FOLDER_ID = "net.micode.notes.folder_id";
public static final String INTENT_EXTRA_CALL_DATE = "net.micode.notes.call_date";
/** 无效的小部件类型 */
// 无效的小部件类型 -1
public static final int TYPE_WIDGET_INVALIDE = -1;
/** 2x2小部件类型 */
// 2x2小部件类型 0
public static final int TYPE_WIDGET_2X = 0;
/** 4x4小部件类型 */
// 4x4小部件类型 1
public static final int TYPE_WIDGET_4X = 1;
/** 数据类型常量,指明不同数据行的 MIME 类型 */
// 数据类型常量,指明不同数据行的 MIME(Multipurpose Internet Mail Extensions,用于标识 ContentProvider 返回的数据类型。)
public static class DataConstants {
/** 普通笔记的MIME类型 */
// 普通笔记的MIME类型
public static final String NOTE = TextNote.CONTENT_ITEM_TYPE;
/** 通话记录笔记的MIME类型 */
// 通话记录笔记的MIME类型
public static final String CALL_NOTE = CallNote.CONTENT_ITEM_TYPE;
}
/** 查询所有笔记和文件夹的URI */
// URI 是 ContentProvider 的标准访问入口,用于统一访问应用的数据。
// 查询所有笔记和文件夹的URI
public static final Uri CONTENT_NOTE_URI = Uri.parse("content://" + AUTHORITY + "/note");
/** 查询数据表的URI */
// 查询数据表的URI
public static final Uri CONTENT_DATA_URI = Uri.parse("content://" + AUTHORITY + "/data");
/** 笔记表的列名接口,声明 note 表包含的所有字段 */
/**
* NoteColumns - 便(notes)
* 便
*/
public interface NoteColumns {
/**
* ID: INTEGER (long)
*/
// 行的唯一ID
public static final String ID = "_id";
/**
* ID: INTEGER (long)
*/
// 笔记或文件夹的父ID
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)
*/
// 笔记的小部件ID
public static final String WIDGET_ID = "widget_id";
/**
* : INTEGER (long)
*/
// 笔记的小部件类型
public static final String WIDGET_TYPE = "widget_type";
/**
* ID: INTEGER (long)
*/
// 笔记的背景颜色ID
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)
*/
// 最后一次同步的ID
public static final String SYNC_ID = "sync_id";
/**
* : INTEGER
*/
// 标记是否在本地被修改
public static final String LOCAL_MODIFIED = "local_modified";
/**
* ID: INTEGER
*/
// 移动到临时文件夹之前的原始父ID
public static final String ORIGIN_PARENT_ID = "origin_parent_id";
/**
* Google TaskID: TEXT
*/
// Google Task的ID
public static final String GTASK_ID = "gtask_id";
/**
* : INTEGER (long)
*/
// 版本号
public static final String VERSION = "version";
}
/**
*
/**
* DataColumns - 便(data)
* 便
* 使MIME_TYPE便便
*/
public interface DataColumns {
/**
* ID: INTEGER (long)
*/
// 行的唯一ID
public static final String ID = "_id";
/**
* MIME: TEXT
*/
// 该行数据项的MIME类型
public static final String MIME_TYPE = "mime_type";
/**
* ID: INTEGER (long)
*/
// 该数据所属笔记的引用ID
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";
/**
* 1{@link #MIME_TYPE}: INTEGER
*/
// 通用数据列1
public static final String DATA1 = "data1";
/**
* 2{@link #MIME_TYPE}: INTEGER
*/
// 通用数据列2
public static final String DATA2 = "data2";
/**
* 3{@link #MIME_TYPE}TEXT: TEXT
*/
// 通用数据列3
public static final String DATA3 = "data3";
/**
* 4{@link #MIME_TYPE}TEXT: TEXT
*/
// 通用数据列4
public static final String DATA4 = "data4";
/**
* 5{@link #MIME_TYPE}TEXT: TEXT
*/
// 通用数据列5
public static final String DATA5 = "data5";
}
/**
*
* TextNote - 便
* 便URI
*/
public static final class TextNote implements DataColumns {
/**
* : Integer1 0
*/
// 模式标识:文本是否为清单模式
public static final String MODE = DATA1;
/** 清单模式常量 */
// 清单模式常量
public static final int MODE_CHECK_LIST = 1;
// 普通模式常量
public static final int MODE_NORMAL = 0;
/** 文本笔记的目录MIME类型 */
// 文本笔记的目录MIME类型
public static final String CONTENT_TYPE = "vnd.android.cursor.dir/text_note";
/** 文本笔记的单项MIME类型 */
// 文本笔记的单项MIME类型
public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/text_note";
/** 文本笔记的URI */
// 文本笔记的URI
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/text_note");
}
/**
*
* CallNote - 便
* 便URI
*/
public static final class CallNote implements DataColumns {
/**
* : INTEGER (long)
*/
// 通话日期
public static final String CALL_DATE = DATA1;
/**
* : TEXT
*/
// 电话号码
public static final String PHONE_NUMBER = DATA3;
/** 通话记录笔记的目录MIME类型 */
// 联系人姓名
public static final String CONTACT_NAME = DATA4;
// 通话记录笔记的目录MIME类型
public static final String CONTENT_TYPE = "vnd.android.cursor.dir/call_note";
/** 通话记录笔记的单项MIME类型 */
// 通话记录笔记的单项MIME类型
public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/call_note";
/** 通话记录笔记的URI */
// 通话记录笔记的URI
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/call_note");
}
}

@ -35,30 +35,32 @@ import net.micode.notes.data.Notes.NoteColumns;
import net.micode.notes.data.NotesDatabaseHelper.TABLE;
/**
*
* <p> CRUD URI </p>
* <p>使UI ContentResolver 访 Provider</p>
* ContentProvider
* 访URI访
* 使UI ContentResolver 访 Provider
* ContentResolver访 ContentProvider
* ContentProvider
*/
public class NotesProvider extends ContentProvider {
private static final UriMatcher mMatcher;
/** 数据库帮助类实例,负责获取读写数据库 */
// 数据库帮助类实例,负责获取读写数据库
private NotesDatabaseHelper mHelper;
private static final String TAG = "NotesProvider";
/** URI匹配码笔记列表 */
// URI匹配码笔记列表
private static final int URI_NOTE = 1;
/** URI匹配码单个笔记 */
// URI匹配码单个笔记
private static final int URI_NOTE_ITEM = 2;
/** URI匹配码数据列表 */
// URI匹配码数据列表
private static final int URI_DATA = 3;
/** URI匹配码单个数据项 */
// URI匹配码单个数据项
private static final int URI_DATA_ITEM = 4;
/** URI匹配码搜索 */
// URI匹配码搜索
private static final int URI_SEARCH = 5;
/** URI匹配码搜索建议 */
// URI匹配码搜索建议
private static final int URI_SEARCH_SUGGEST = 6;
static {
@ -74,7 +76,7 @@ public class NotesProvider extends ContentProvider {
/**
*
* <p>x'0A' SQLite 便</p>
* x'0A' SQLite 便
*/
private static final String NOTES_SEARCH_PROJECTION = NoteColumns.ID + ","
+ NoteColumns.ID + " AS " + SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA + ","
@ -101,7 +103,7 @@ public class NotesProvider extends ContentProvider {
/**
*
* <p> note/data </p>
* note/data
*/
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
@ -255,7 +257,7 @@ public class NotesProvider extends ContentProvider {
/**
*
* <p> note version 便data note </p>
* note version 便data note
*/
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {

Loading…
Cancel
Save