From fcc509a830b27d3c9c87ef82d99ccb471c48b2b5 Mon Sep 17 00:00:00 2001 From: zcx <1078327420@qq.com> Date: Thu, 21 Dec 2023 10:01:45 +0800 Subject: [PATCH] 1 --- .../notes/data/.vs/ProjectSettings.json | 3 + .../notes/data/.vs/VSWorkspaceState.json | 7 + ...2d19b95f-094e-4a2b-940f-5f7bb747bcd9.vsidx | Bin 0 -> 36931 bytes .../data/.vs/data/FileContentIndex/read.lock | 0 .../net/micode/notes/data/.vs/data/v17/.wsuo | Bin 0 -> 15872 bytes .../src/net/micode/notes/data/.vs/slnx.sqlite | Bin 0 -> 90112 bytes .../src/net/micode/notes/data/Contact.java | 74 ++--- .../src/net/micode/notes/data/Notes.java | 286 +++++++++--------- .../notes/data/NotesDatabaseHelper.java | 100 +++--- .../net/micode/notes/data/NotesProvider.java | 86 +++--- .../net/micode/notes/tool/BackupUtils.java | 82 ++--- .../src/net/micode/notes/tool/DataUtils.java | 66 ++-- .../micode/notes/tool/GTaskStringUtils.java | 100 +++--- .../net/micode/notes/tool/ResourceParser.java | 56 ++-- .../micode/notes/ui/AlarmAlertActivity.java | 100 +++--- .../micode/notes/ui/AlarmInitReceiver.java | 16 +- 16 files changed, 493 insertions(+), 483 deletions(-) create mode 100644 src/Notes-master/src/net/micode/notes/data/.vs/ProjectSettings.json create mode 100644 src/Notes-master/src/net/micode/notes/data/.vs/VSWorkspaceState.json create mode 100644 src/Notes-master/src/net/micode/notes/data/.vs/data/FileContentIndex/2d19b95f-094e-4a2b-940f-5f7bb747bcd9.vsidx create mode 100644 src/Notes-master/src/net/micode/notes/data/.vs/data/FileContentIndex/read.lock create mode 100644 src/Notes-master/src/net/micode/notes/data/.vs/data/v17/.wsuo create mode 100644 src/Notes-master/src/net/micode/notes/data/.vs/slnx.sqlite diff --git a/src/Notes-master/src/net/micode/notes/data/.vs/ProjectSettings.json b/src/Notes-master/src/net/micode/notes/data/.vs/ProjectSettings.json new file mode 100644 index 0000000..f8b4888 --- /dev/null +++ b/src/Notes-master/src/net/micode/notes/data/.vs/ProjectSettings.json @@ -0,0 +1,3 @@ +{ + "CurrentProjectSetting": null +} \ No newline at end of file diff --git a/src/Notes-master/src/net/micode/notes/data/.vs/VSWorkspaceState.json b/src/Notes-master/src/net/micode/notes/data/.vs/VSWorkspaceState.json new file mode 100644 index 0000000..8276fa2 --- /dev/null +++ b/src/Notes-master/src/net/micode/notes/data/.vs/VSWorkspaceState.json @@ -0,0 +1,7 @@ +{ + "ExpandedNodes": [ + "" + ], + "SelectedNode": "\\Contact.java", + "PreviewInSolutionExplorer": false +} \ No newline at end of file diff --git a/src/Notes-master/src/net/micode/notes/data/.vs/data/FileContentIndex/2d19b95f-094e-4a2b-940f-5f7bb747bcd9.vsidx b/src/Notes-master/src/net/micode/notes/data/.vs/data/FileContentIndex/2d19b95f-094e-4a2b-940f-5f7bb747bcd9.vsidx new file mode 100644 index 0000000000000000000000000000000000000000..5cb0a3371d7ce37ed44384949d30f342f8a54580 GIT binary patch literal 36931 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 GoBspMAa7y- literal 0 HcmV?d00001 diff --git a/src/Notes-master/src/net/micode/notes/data/.vs/slnx.sqlite b/src/Notes-master/src/net/micode/notes/data/.vs/slnx.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..faa5343f996192865e2528fe369e18186518546f GIT binary patch literal 90112 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 literal 0 HcmV?d00001 diff --git a/src/Notes-master/src/net/micode/notes/data/Contact.java b/src/Notes-master/src/net/micode/notes/data/Contact.java index 1bf33e4..a71e6db 100644 --- a/src/Notes-master/src/net/micode/notes/data/Contact.java +++ b/src/Notes-master/src/net/micode/notes/data/Contact.java @@ -14,79 +14,79 @@ * limitations under the License. */ -package net.micode.notes.data;//指明包的位置 - -import android.content.Context;//引用android.content.Context - -import android.database.Cursor;//引用android.database.Cursor +package net.micode.notes.data;//鎸囨槑鍖呯殑浣嶇疆 + +import android.content.Context;//寮曠敤android.content.Context + +import android.database.Cursor;//寮曠敤android.database.Cursor import android.provider.ContactsContract.CommonDataKinds.Phone; -//引用CommonDataKinds.Phone +//寮曠敤CommonDataKinds.Phone import android.provider.ContactsContract.Data; -//引用android.provider.ContactsContract.Data +//寮曠敤android.provider.ContactsContract.Data import android.telephony.PhoneNumberUtils; -//引用android.telephony.PhoneNumberUtils -import android.util.Log;//引用android.util.Log - -import java.util.HashMap;//引用java.util.HashMap +//寮曠敤android.telephony.PhoneNumberUtils +import android.util.Log;//寮曠敤android.util.Log + +import java.util.HashMap;//寮曠敤java.util.HashMap -//联系人 -public class Contact { +//鑱旂郴浜 +public class Contact { private static HashMap sContactCache; private static final String TAG = "Contact"; - - // 定义字符串CALLER_ID_SELECTION - 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 " + + // 瀹氫箟瀛楃涓睠ALLER_ID_SELECTION + 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(); } - - // 查找HashMap中是否已有phoneNumber信息 + + // 鏌ユ壘HashMap涓槸鍚﹀凡鏈塸honeNumber淇℃伅 if(sContactCache.containsKey(phoneNumber)) { return sContactCache.get(phoneNumber); - //返回phoneNumber信息 + //杩斿洖phoneNumber淇℃伅 } - + String selection = CALLER_ID_SELECTION.replace("+", PhoneNumberUtils.toCallerIDMinMatch(phoneNumber)); - // 查找数据库中phoneNumber的信息 + // 鏌ユ壘鏁版嵁搴撲腑phoneNumber鐨勪俊鎭 Cursor cursor = context.getContentResolver().query( Data.CONTENT_URI, new String [] { Phone.DISPLAY_NAME }, selection, new String[] { phoneNumber }, null); - - // 判定查询结果 - // moveToFirst()返回第一条 + + // 鍒ゅ畾鏌ヨ缁撴灉 + // moveToFirst()杩斿洖绗竴鏉 if (cursor != null && cursor.moveToFirst()) { - // 找到相关信息 - try { + // 鎵惧埌鐩稿叧淇℃伅 + try { String name = cursor.getString(0); sContactCache.put(phoneNumber, name); return name; - // 异常处理 + // 寮傚父澶勭悊 } catch (IndexOutOfBoundsException e) { Log.e(TAG, " Cursor get string error " + e.toString()); - //输出相关string error错误信息 + //杈撳嚭鐩稿叧string error閿欒淇℃伅 return null; } finally { cursor.close(); } - // 未找到相关信息处理 + // 鏈壘鍒扮浉鍏充俊鎭鐞 } else { Log.d(TAG, "No contact matched with number:" + phoneNumber); - //输出No contact matched错误信息 + //杈撳嚭No contact matched閿欒淇℃伅 return null; } } -} \ No newline at end of file +} diff --git a/src/Notes-master/src/net/micode/notes/data/Notes.java b/src/Notes-master/src/net/micode/notes/data/Notes.java index ba7b39f..f33623a 100644 --- a/src/Notes-master/src/net/micode/notes/data/Notes.java +++ b/src/Notes-master/src/net/micode/notes/data/Notes.java @@ -14,301 +14,301 @@ * limitations under the License. */ -package net.micode.notes.data;//此类在文件中的位置 - -import android.content.ContentUris;//引用android.content.ContentUris -import android.net.Uri;//引用android.net.Uri -// Notes 类中定义了很多常量,这些常量大多是int型和string型 +package net.micode.notes.data;//姝ょ被鍦ㄦ枃浠朵腑鐨勪綅缃 + +import android.content.ContentUris;//寮曠敤android.content.ContentUris +import android.net.Uri;//寮曠敤android.net.Uri +// Notes 绫讳腑瀹氫箟浜嗗緢澶氬父閲忥紝杩欎簺甯搁噺澶у鏄痠nt鍨嬪拰string鍨 public class Notes { - //定义两个常量 + //瀹氫箟涓や釜甯搁噺 public static final String AUTHORITY = "micode_notes"; public static final String TAG = "Notes"; - - //以下三个常量对NoteColumns.TYPE的值进行设置时会用到 + + //浠ヤ笅涓変釜甯搁噺瀵筃oteColumns.TYPE鐨勫艰繘琛岃缃椂浼氱敤鍒 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 }是不属于文件夹的notes - * {@link Notes#ID_CALL_RECORD_FOLDER}是用于存储通话记录 + * 浠ヤ笅 ID 鏄郴缁熸枃浠跺す鐨勬爣璇嗙 + * {@link Notes#ID_ROOT_FOLDER }鏄粯璁ゆ枃浠跺す + * {@link Notes#ID_TEMPARAY_FOLDER }鏄笉灞炰簬鏂囦欢澶圭殑notes + * {@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; - - public static final String INTENT_EXTRA_ALERT_DATE = - //定义net.micode.notes.alert_date的常量 -"net.micode.notes.alert_date"; - public static final String INTENT_EXTRA_BACKGROUND_ID = - //定义net.micode.notes.background_color_id的常量 -"net.micode.notes.background_color_id"; - public static final String INTENT_EXTRA_WIDGET_ID = - //定义net.micode.notes.widget_id的常量 -"net.micode.notes.widget_id"; - public static final String INTENT_EXTRA_WIDGET_TYPE = - //定义net.micode.notes.widget_type的常量 -"net.micode.notes.widget_type"; - public static final String INTENT_EXTRA_FOLDER_ID = - //定义net.micode.notes.folder_id的常量 -"net.micode.notes.folder_id"; - public static final String INTENT_EXTRA_CALL_DATE = - //定义net.micode.notes.call_date的常量 -"net.micode.notes.call_date"; - -//定义使用widget挂件的常量 + + public static final String INTENT_EXTRA_ALERT_DATE = + //瀹氫箟net.micode.notes.alert_date鐨勫父閲 + "net.micode.notes.alert_date"; + public static final String INTENT_EXTRA_BACKGROUND_ID = + //瀹氫箟net.micode.notes.background_color_id鐨勫父閲 + "net.micode.notes.background_color_id"; + public static final String INTENT_EXTRA_WIDGET_ID = + //瀹氫箟net.micode.notes.widget_id鐨勫父閲 + "net.micode.notes.widget_id"; + public static final String INTENT_EXTRA_WIDGET_TYPE = + //瀹氫箟net.micode.notes.widget_type鐨勫父閲 + "net.micode.notes.widget_type"; + public static final String INTENT_EXTRA_FOLDER_ID = + //瀹氫箟net.micode.notes.folder_id鐨勫父閲 + "net.micode.notes.folder_id"; + public static final String INTENT_EXTRA_CALL_DATE = + //瀹氫箟net.micode.notes.call_date鐨勫父閲 + "net.micode.notes.call_date"; + + //瀹氫箟浣跨敤widget鎸備欢鐨勫父閲 public static final int TYPE_WIDGET_INVALIDE = -1; public static final int TYPE_WIDGET_2X = 0; public static final int TYPE_WIDGET_4X = 1; - + public static class DataConstants { public static final String NOTE = TextNote.CONTENT_ITEM_TYPE; public static final String CALL_NOTE = CallNote.CONTENT_ITEM_TYPE; } - + /** - * 用于查询所有便笺和文件夹的 URI + * 鐢ㄤ簬鏌ヨ鎵鏈変究绗哄拰鏂囦欢澶圭殑 URI */ - public static final Uri CONTENT_NOTE_URI = Uri.parse("content://" + - -AUTHORITY + "/note");//定义查询便签和文件夹的指针。 - public static final Uri my_URI = ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI , 10); - + public static final Uri CONTENT_NOTE_URI = Uri.parse("content://" + + + AUTHORITY + "/note");//瀹氫箟鏌ヨ渚跨鍜屾枃浠跺す鐨勬寚閽堛 + public static final Uri my_URI = ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI , 10); + /** - * 用于查询数据的 URI + * 鐢ㄤ簬鏌ヨ鏁版嵁鐨 URI */ - public static final Uri CONTENT_DATA_URI = Uri.parse("content://" + - -AUTHORITY + "/data");//定义查找数据的指针。 - - // 定义NoteColumns的常量,用于后面创建数据库的表头 + public static final Uri CONTENT_DATA_URI = Uri.parse("content://" + + + AUTHORITY + "/data");//瀹氫箟鏌ユ壘鏁版嵁鐨勬寚閽堛 + + // 瀹氫箟NoteColumns鐨勫父閲,鐢ㄤ簬鍚庨潰鍒涘缓鏁版嵁搴撶殑琛ㄥご public interface NoteColumns { /** - * 行的唯一 ID + * 琛岀殑鍞竴 ID *

Type: INTEGER (long)

*/ public static final String ID = "_id"; - + /** - * 便笺或文件夹的父ID + * 渚跨鎴栨枃浠跺す鐨勭埗ID *

Type: INTEGER (long)

*/ - public static final String PARENT_ID = "parent_id";//为什么会有parent_id - + public static final String PARENT_ID = "parent_id";//涓轰粈涔堜細鏈塸arent_id + /** - * 为笔记或文件夹创建的数据 + * 涓虹瑪璁版垨鏂囦欢澶瑰垱寤虹殑鏁版嵁 *

Type: INTEGER (long)

*/ public static final String CREATED_DATE = "created_date"; - + /** - * 最新修改日期 + * 鏈鏂颁慨鏀规棩鏈 *

Type: INTEGER (long)

*/ public static final String MODIFIED_DATE = "modified_date"; - - + + /** - * 警报日期 + * 璀︽姤鏃ユ湡 *

Type: INTEGER (long)

*/ public static final String ALERTED_DATE = "alert_date"; - + /** - * 文件夹名称或注释的文本内容 + * 鏂囦欢澶瑰悕绉版垨娉ㄩ噴鐨勬枃鏈唴瀹 *

Type: TEXT

*/ public static final String SNIPPET = "snippet"; - + /** - * notes的widget ID + * notes鐨剋idget ID *

Type: INTEGER (long)

*/ public static final String WIDGET_ID = "widget_id"; - + /** - * notes的widget 类型 + * notes鐨剋idget 绫诲瀷 *

Type: INTEGER (long)

*/ public static final String WIDGET_TYPE = "widget_type"; - + /** - * 笔记的背景颜色的 ID + * 绗旇鐨勮儗鏅鑹茬殑 ID *

Type: INTEGER (long)

*/ public static final String BG_COLOR_ID = "bg_color_id"; - + /** - * 对于文本笔记,它没有附件,对于多媒体笔记,它至少有一个附件 + * 瀵逛簬鏂囨湰绗旇锛屽畠娌℃湁闄勪欢锛屽浜庡濯掍綋绗旇锛屽畠鑷冲皯鏈変竴涓檮浠 *

Type: INTEGER

*/ public static final String HAS_ATTACHMENT = "has_attachment"; - + /** - * 文件夹的笔记计数 + * 鏂囦欢澶圭殑绗旇璁℃暟 *

Type: INTEGER (long)

*/ public static final String NOTES_COUNT = "notes_count"; - + /** - * 文件类型:文件夹或便笺 + * 鏂囦欢绫诲瀷锛氭枃浠跺す鎴栦究绗 *

Type: INTEGER

*/ public static final String TYPE = "type"; - + /** - * 最后一个同步 ID + * 鏈鍚庝竴涓悓姝 ID *

Type: INTEGER (long)

*/ - public static final String SYNC_ID = "sync_id";//同步 - + public static final String SYNC_ID = "sync_id";//鍚屾 + /** - * 指示本地修改与否的标志 + * 鎸囩ず鏈湴淇敼涓庡惁鐨勬爣蹇 *

Type: INTEGER

*/ public static final String LOCAL_MODIFIED = "local_modified"; - + /** - * 移动到临时文件夹之前的原始父 ID + * 绉诲姩鍒颁复鏃舵枃浠跺す涔嬪墠鐨勫師濮嬬埗 ID *

Type : INTEGER

*/ public static final String ORIGIN_PARENT_ID = "origin_parent_id"; - + /** * The gtask id *

Type : TEXT

*/ public static final String GTASK_ID = "gtask_id"; - + /** * The version code *

Type : INTEGER (long)

*/ public static final String VERSION = "version"; - }//这些常量主要是定义便签的属性的。 - - // 定义DataColumns的常量,用于后面创建数据库的表头 + }//杩欎簺甯搁噺涓昏鏄畾涔変究绛剧殑灞炴х殑銆 + + // 瀹氫箟DataColumns鐨勫父閲,鐢ㄤ簬鍚庨潰鍒涘缓鏁版嵁搴撶殑琛ㄥご public interface DataColumns { /** - * 行的唯一 ID + * 琛岀殑鍞竴 ID *

Type: INTEGER (long)

*/ public static final String ID = "_id"; - + /** - * 此行表示的项的 MIME 类型。 + * 姝よ琛ㄧず鐨勯」鐨 MIME 绫诲瀷銆 *

Type: Text

*/ public static final String MIME_TYPE = "mime_type"; - + /** - * 此数据所属的引用 ID + * 姝ゆ暟鎹墍灞炵殑寮曠敤 ID *

Type: INTEGER (long)

*/ public static final String NOTE_ID = "note_id"; - + /** - * 为笔记或文件夹创建的数据 + * 涓虹瑪璁版垨鏂囦欢澶瑰垱寤虹殑鏁版嵁 *

Type: INTEGER (long)

*/ public static final String CREATED_DATE = "created_date"; - + /** - * 最新修改日期 + * 鏈鏂颁慨鏀规棩鏈 *

Type: INTEGER (long)

*/ public static final String MODIFIED_DATE = "modified_date"; - + /** - * 数据内容 + * 鏁版嵁鍐呭 *

Type: TEXT

*/ public static final String CONTENT = "content"; - - + + /** - * 通用数据列,含义是 {@link #MIMETYPE} 特定的,用于 - * Integer 数据类型 + * 閫氱敤鏁版嵁鍒楋紝鍚箟鏄 {@link #MIMETYPE} 鐗瑰畾鐨勶紝鐢ㄤ簬 + * Integer 鏁版嵁绫诲瀷 *

Type: INTEGER

*/ public static final String DATA1 = "data1"; - + /** - * 通用数据列,含义是 {@link #MIMETYPE} 特定的,用于 - * Integer 数据类型 + * 閫氱敤鏁版嵁鍒楋紝鍚箟鏄 {@link #MIMETYPE} 鐗瑰畾鐨勶紝鐢ㄤ簬 + * Integer 鏁版嵁绫诲瀷 *

Type: INTEGER

*/ public static final String DATA2 = "data2"; - + /** - * 通用数据列,含义是 {@link #MIMETYPE} 特定的,用于 + * 閫氱敤鏁版嵁鍒楋紝鍚箟鏄 {@link #MIMETYPE} 鐗瑰畾鐨勶紝鐢ㄤ簬 * TEXT data type *

Type: TEXT

*/ public static final String DATA3 = "data3"; - + /** - * 通用数据列,含义是 {@link #MIMETYPE} 特定的,用于 + * 閫氱敤鏁版嵁鍒楋紝鍚箟鏄 {@link #MIMETYPE} 鐗瑰畾鐨勶紝鐢ㄤ簬 * TEXT data type *

Type: TEXT

*/ public static final String DATA4 = "data4"; - + /** - * 通用数据列,含义是 {@link #MIMETYPE} 特定的,用于 + * 閫氱敤鏁版嵁鍒楋紝鍚箟鏄 {@link #MIMETYPE} 鐗瑰畾鐨勶紝鐢ㄤ簬 * TEXT data type *

Type: TEXT

*/ public static final String DATA5 = "data5"; - }//主要是定义存储便签内容数据的 + }//涓昏鏄畾涔夊瓨鍌ㄤ究绛惧唴瀹规暟鎹殑 public static final class TextNote implements DataColumns { /** - * 指示文本是否处于核对列表模式的模式 + * 鎸囩ず鏂囨湰鏄惁澶勪簬鏍稿鍒楄〃妯″紡鐨勬ā寮 *

Type: Integer 1:check list mode 0: normal mode

*/ 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"); - }//文本内容的数据结构 - + + 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"); + }//鏂囨湰鍐呭鐨勬暟鎹粨鏋 + public static final class CallNote implements DataColumns { /** - * 此记录的调用日期 + * 姝よ褰曠殑璋冪敤鏃ユ湡 *

Type: INTEGER (long)

*/ public static final String CALL_DATE = DATA1; - + /** - * 此记录的电话号码 + * 姝よ褰曠殑鐢佃瘽鍙风爜 *

Type: 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 + + 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"); + }//鐢佃瘽鍐呭鐨勬暟鎹粨鏋 +} diff --git a/src/Notes-master/src/net/micode/notes/data/NotesDatabaseHelper.java b/src/Notes-master/src/net/micode/notes/data/NotesDatabaseHelper.java index 978e900..9a5a863 100644 --- a/src/Notes-master/src/net/micode/notes/data/NotesDatabaseHelper.java +++ b/src/Notes-master/src/net/micode/notes/data/NotesDatabaseHelper.java @@ -16,29 +16,29 @@ package net.micode.notes.data; -import android.content.ContentValues;//就是用于保存一些数据(string boolean byte double float int long short ...)信息,这些信息可以被数据库操作时使用。 -import android.content.Context;//加载和访问资源。(android中主要是这两个功能,但是这里具体不清楚) -import android.database.sqlite.SQLiteDatabase;//主要提供了对应于添加、删除、更新、查询的操作方法: insert()、delete()、update()和query()。配合content.values -import android.database.sqlite.SQLiteOpenHelper;//用来管理数据的创建和版本更新 +import android.content.ContentValues;//灏辨槸鐢ㄤ簬淇濆瓨涓浜涙暟鎹紙string boolean byte double float int long short ...锛変俊鎭紝杩欎簺淇℃伅鍙互琚暟鎹簱鎿嶄綔鏃朵娇鐢ㄣ +import android.content.Context;//鍔犺浇鍜岃闂祫婧愩傦紙android涓富瑕佹槸杩欎袱涓姛鑳斤紝浣嗘槸杩欓噷鍏蜂綋涓嶆竻妤氾級 +import android.database.sqlite.SQLiteDatabase;//涓昏鎻愪緵浜嗗搴斾簬娣诲姞銆佸垹闄ゃ佹洿鏂般佹煡璇㈢殑鎿嶄綔鏂规硶锛 insert()銆乨elete()銆乽pdate()鍜宷uery()銆傞厤鍚坈ontent.values +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; -//数据库操作,用SQLOpenhelper,对一些note和文件进行数据库的操作,比如删除文件后,将文件里的note也相应删除 +//鏁版嵁搴撴搷浣滐紝鐢⊿QLOpenhelper,瀵逛竴浜沶ote鍜屾枃浠惰繘琛屾暟鎹簱鐨勬搷浣滐紝姣斿鍒犻櫎鏂囦欢鍚庯紝灏嗘枃浠堕噷鐨刵ote涔熺浉搴斿垹闄 public class NotesDatabaseHelper extends SQLiteOpenHelper { private static final String DB_NAME = "note.db"; private static final int DB_VERSION = 4; - public interface TABLE { //接口,分成note和data,在后面的程序里分别使用过 + public interface TABLE { //鎺ュ彛锛屽垎鎴恘ote鍜宒ata锛屽湪鍚庨潰鐨勭▼搴忛噷鍒嗗埆浣跨敤杩 public static final String NOTE = "note"; public static final String DATA = "data"; } -//定义数据库中需要的常量 +//瀹氫箟鏁版嵁搴撲腑闇瑕佺殑甯搁噺 private static final String TAG = "NotesDatabaseHelper"; private static NotesDatabaseHelper mInstance; @@ -62,7 +62,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { NoteColumns.ORIGIN_PARENT_ID + " INTEGER NOT NULL DEFAULT 0," + NoteColumns.GTASK_ID + " TEXT NOT NULL DEFAULT ''," + NoteColumns.VERSION + " INTEGER NOT NULL DEFAULT 0" + - ")";//数据库中需要存储的项目的名称,就相当于创建一个表格的表头的内容。 + ")";//鏁版嵁搴撲腑闇瑕佸瓨鍌ㄧ殑椤圭洰鐨勫悕绉帮紝灏辩浉褰撲簬鍒涘缓涓涓〃鏍肩殑琛ㄥご鐨勫唴瀹广 private static final String CREATE_DATA_TABLE_SQL = "CREATE TABLE " + TABLE.DATA + "(" + @@ -77,14 +77,14 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { DataColumns.DATA3 + " TEXT NOT NULL DEFAULT ''," + DataColumns.DATA4 + " TEXT NOT NULL DEFAULT ''," + DataColumns.DATA5 + " TEXT NOT NULL DEFAULT ''" + - ")";//和上面的功能一样,主要是存储的项目不同 + ")";//鍜屼笂闈㈢殑鍔熻兘涓鏍凤紝涓昏鏄瓨鍌ㄧ殑椤圭洰涓嶅悓 private static final String CREATE_DATA_NOTE_ID_INDEX_SQL = "CREATE INDEX IF NOT EXISTS note_id_index ON " + - TABLE.DATA + "(" + DataColumns.NOTE_ID + ");";//存储便签编号的一个数据表格 + TABLE.DATA + "(" + DataColumns.NOTE_ID + ");";//瀛樺偍渚跨缂栧彿鐨勪竴涓暟鎹〃鏍 /** - * 将笔记移动到文件夹时增加文件夹的笔记计数 + * 灏嗙瑪璁扮Щ鍔ㄥ埌鏂囦欢澶规椂澧炲姞鏂囦欢澶圭殑绗旇璁℃暟 */ private static final String NOTE_INCREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER = "CREATE TRIGGER increase_folder_count_on_update "+ @@ -93,10 +93,10 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { " UPDATE " + TABLE.NOTE + " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + " + 1" + " WHERE " + NoteColumns.ID + "=new." + NoteColumns.PARENT_ID + ";" + - " END";//在文件夹中移入一个Note之后需要更改的数据的表格。 + " END";//鍦ㄦ枃浠跺す涓Щ鍏ヤ竴涓狽ote涔嬪悗闇瑕佹洿鏀圭殑鏁版嵁鐨勮〃鏍笺 /** - * 从文件夹移动笔记时减少文件夹的笔记计数 + * 浠庢枃浠跺す绉诲姩绗旇鏃跺噺灏戞枃浠跺す鐨勭瑪璁拌鏁 */ private static final String NOTE_DECREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER = "CREATE TRIGGER decrease_folder_count_on_update " + @@ -106,10 +106,10 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + "-1" + " WHERE " + NoteColumns.ID + "=old." + NoteColumns.PARENT_ID + " AND " + NoteColumns.NOTES_COUNT + ">0" + ";" + - " END";//在文件夹中移出一个Note之后需要更改的数据的表格。 + " END";//鍦ㄦ枃浠跺す涓Щ鍑轰竴涓狽ote涔嬪悗闇瑕佹洿鏀圭殑鏁版嵁鐨勮〃鏍笺 /** - * 在文件夹插入新笔记时增加文件夹的笔记计数 + * 鍦ㄦ枃浠跺す鎻掑叆鏂扮瑪璁版椂澧炲姞鏂囦欢澶圭殑绗旇璁℃暟 */ private static final String NOTE_INCREASE_FOLDER_COUNT_ON_INSERT_TRIGGER = "CREATE TRIGGER increase_folder_count_on_insert " + @@ -118,10 +118,10 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { " UPDATE " + TABLE.NOTE + " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + " + 1" + " WHERE " + NoteColumns.ID + "=new." + NoteColumns.PARENT_ID + ";" + - " END";//在文件夹中插入一个Note之后需要更改的数据的表格。 + " END";//鍦ㄦ枃浠跺す涓彃鍏ヤ竴涓狽ote涔嬪悗闇瑕佹洿鏀圭殑鏁版嵁鐨勮〃鏍笺 /** - * 从文件夹中删除笔记时减少文件夹的笔记计数 + * 浠庢枃浠跺す涓垹闄ょ瑪璁版椂鍑忓皯鏂囦欢澶圭殑绗旇璁℃暟 */ private static final String NOTE_DECREASE_FOLDER_COUNT_ON_DELETE_TRIGGER = "CREATE TRIGGER decrease_folder_count_on_delete " + @@ -131,10 +131,10 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + "-1" + " WHERE " + NoteColumns.ID + "=old." + NoteColumns.PARENT_ID + " AND " + NoteColumns.NOTES_COUNT + ">0;" + - " END";//在文件夹中删除一个Note之后需要更改的数据的表格。 + " END";//鍦ㄦ枃浠跺す涓垹闄や竴涓狽ote涔嬪悗闇瑕佹洿鏀圭殑鏁版嵁鐨勮〃鏍笺 /** - * 插入类型为 {@link DataConstants#NOTE} 的数据时更新注释的内容 + * 鎻掑叆绫诲瀷涓 {@link DataConstants#NOTE} 鐨勬暟鎹椂鏇存柊娉ㄩ噴鐨勫唴瀹 */ private static final String DATA_UPDATE_NOTE_CONTENT_ON_INSERT_TRIGGER = "CREATE TRIGGER update_note_content_on_insert " + @@ -144,10 +144,10 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { " UPDATE " + TABLE.NOTE + " SET " + NoteColumns.SNIPPET + "=new." + DataColumns.CONTENT + " WHERE " + NoteColumns.ID + "=new." + DataColumns.NOTE_ID + ";" + - " END";//在文件夹中对一个Note导入新的数据之后需要更改的数据的表格。 + " END";//鍦ㄦ枃浠跺す涓涓涓狽ote瀵煎叆鏂扮殑鏁版嵁涔嬪悗闇瑕佹洿鏀圭殑鏁版嵁鐨勮〃鏍笺 /** - * 当 {@link DataConstants#NOTE} 类型的数据发生更改时更新注释的内容 + * 褰 {@link DataConstants#NOTE} 绫诲瀷鐨勬暟鎹彂鐢熸洿鏀规椂鏇存柊娉ㄩ噴鐨勫唴瀹 */ private static final String DATA_UPDATE_NOTE_CONTENT_ON_UPDATE_TRIGGER = "CREATE TRIGGER update_note_content_on_update " + @@ -157,10 +157,10 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { " UPDATE " + TABLE.NOTE + " SET " + NoteColumns.SNIPPET + "=new." + DataColumns.CONTENT + " WHERE " + NoteColumns.ID + "=new." + DataColumns.NOTE_ID + ";" + - " END";//Note数据被修改后需要更改的数据的表格。 + " END";//Note鏁版嵁琚慨鏀瑰悗闇瑕佹洿鏀圭殑鏁版嵁鐨勮〃鏍笺 /** - * 删除 {@link DataConstants#NOTE} 类型的数据时更新注释内容 + * 鍒犻櫎 {@link DataConstants#NOTE} 绫诲瀷鐨勬暟鎹椂鏇存柊娉ㄩ噴鍐呭 */ private static final String DATA_UPDATE_NOTE_CONTENT_ON_DELETE_TRIGGER = "CREATE TRIGGER update_note_content_on_delete " + @@ -170,10 +170,10 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { " UPDATE " + TABLE.NOTE + " SET " + NoteColumns.SNIPPET + "=''" + " WHERE " + NoteColumns.ID + "=old." + DataColumns.NOTE_ID + ";" + - " END";//Note数据被删除后需要更改的数据的表格。 + " END";//Note鏁版嵁琚垹闄ゅ悗闇瑕佹洿鏀圭殑鏁版嵁鐨勮〃鏍笺 /** - * 删除属于已删除的注意事项的数据 + * 鍒犻櫎灞炰簬宸插垹闄ょ殑娉ㄦ剰浜嬮」鐨勬暟鎹 */ private static final String NOTE_DELETE_DATA_ON_DELETE_TRIGGER = "CREATE TRIGGER delete_data_on_delete " + @@ -181,10 +181,10 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { " BEGIN" + " DELETE FROM " + TABLE.DATA + " WHERE " + DataColumns.NOTE_ID + "=old." + NoteColumns.ID + ";" + - " END";//删除已删除的便签的数据后需要更改的数据的表格。 + " END";//鍒犻櫎宸插垹闄ょ殑渚跨鐨勬暟鎹悗闇瑕佹洿鏀圭殑鏁版嵁鐨勮〃鏍笺 /** - * 删除已删除的文件夹的便签后需要更改的数据的表格 + * 鍒犻櫎宸插垹闄ょ殑鏂囦欢澶圭殑渚跨鍚庨渶瑕佹洿鏀圭殑鏁版嵁鐨勮〃鏍 */ private static final String FOLDER_DELETE_NOTES_ON_DELETE_TRIGGER = "CREATE TRIGGER folder_delete_notes_on_delete " + @@ -192,10 +192,10 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { " BEGIN" + " DELETE FROM " + TABLE.NOTE + " WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" + - " END";//删除已删除的文件夹的便签后需要更改的数据的表格。 + " END";//鍒犻櫎宸插垹闄ょ殑鏂囦欢澶圭殑渚跨鍚庨渶瑕佹洿鏀圭殑鏁版嵁鐨勮〃鏍笺 /** - * 还原垃圾桶中便签后需要更改的数据的表格 + * 杩樺師鍨冨溇妗朵腑渚跨鍚庨渶瑕佹洿鏀圭殑鏁版嵁鐨勮〃鏍 */ private static final String FOLDER_MOVE_NOTES_ON_TRASH_TRIGGER = "CREATE TRIGGER folder_move_notes_on_trash " + @@ -205,18 +205,18 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { " UPDATE " + TABLE.NOTE + " SET " + NoteColumns.PARENT_ID + "=" + Notes.ID_TRASH_FOLER + " WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" + - " END";。 + " END";銆 public NotesDatabaseHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); - }//构造函数,传入数据库的名称和版本 + }//鏋勯犲嚱鏁帮紝浼犲叆鏁版嵁搴撶殑鍚嶇О鍜岀増鏈 public void createNoteTable(SQLiteDatabase db) { 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"); @@ -234,21 +234,21 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { 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); - }//execSQL是数据库操作的API,主要是更改行为的SQL语句。 - //在这里主要是用来重新创建上述定义的表格用的,先删除原来有的数据库的触发器再重新创建新的数据库 + }//execSQL鏄暟鎹簱鎿嶄綔鐨凙PI锛屼富瑕佹槸鏇存敼琛屼负鐨凷QL璇彞銆 + //鍦ㄨ繖閲屼富瑕佹槸鐢ㄦ潵閲嶆柊鍒涘缓涓婅堪瀹氫箟鐨勮〃鏍肩敤鐨勶紝鍏堝垹闄ゅ師鏉ユ湁鐨勬暟鎹簱鐨勮Е鍙戝櫒鍐嶉噸鏂板垱寤烘柊鐨勬暟鎹簱 private void createSystemFolder(SQLiteDatabase db) { ContentValues values = new ContentValues(); /** - * 通话记录 Foler,用于通话记录 + * 閫氳瘽璁板綍 Foler锛岀敤浜庨氳瘽璁板綍 */ 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); @@ -256,7 +256,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { db.insert(TABLE.NOTE, null, values); /** - * 用于移动笔记的临时文件夹 + * 鐢ㄤ簬绉诲姩绗旇鐨勪复鏃舵枃浠跺す */ values.clear(); values.put(NoteColumns.ID, Notes.ID_TEMPARAY_FOLDER); @@ -264,20 +264,20 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { 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) { db.execSQL(CREATE_DATA_TABLE_SQL); reCreateDataTableTriggers(db); 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"); @@ -287,22 +287,22 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { 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); - }//同上面的execSQL + }//鍚屼笂闈㈢殑execSQL 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) { @@ -311,7 +311,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { if (oldVersion == 1) { upgradeToV2(db); - skipV2 = true; // 此升级包括从 v2 到 v3 的升级 + skipV2 = true; // 姝ゅ崌绾у寘鎷粠 v2 鍒 v3 鐨勫崌绾 oldVersion++; } @@ -335,14 +335,14 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { throw new IllegalStateException("Upgrade notes database to version " + newVersion + "fails"); } - }//数据库版本的更新(数据库内容的更改) + }//鏁版嵁搴撶増鏈殑鏇存柊锛堟暟鎹簱鍐呭鐨勬洿鏀癸級 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); - }//更新到V2版本 + }//鏇存柊鍒癡2鐗堟湰 private void upgradeToV3(SQLiteDatabase db) { // drop unused triggers @@ -357,10 +357,10 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { values.put(NoteColumns.ID, Notes.ID_TRASH_FOLER); values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); db.insert(TABLE.NOTE, null, values); - }//更新到V3版本 + }//鏇存柊鍒癡3鐗堟湰 private void upgradeToV4(SQLiteDatabase db) { db.execSQL("ALTER TABLE " + TABLE.NOTE + " ADD COLUMN " + NoteColumns.VERSION + " INTEGER NOT NULL DEFAULT 0"); - }//更新到V4版本 + }//鏇存柊鍒癡4鐗堟湰 } \ No newline at end of file diff --git a/src/Notes-master/src/net/micode/notes/data/NotesProvider.java b/src/Notes-master/src/net/micode/notes/data/NotesProvider.java index b5a1d08..5db709a 100644 --- a/src/Notes-master/src/net/micode/notes/data/NotesProvider.java +++ b/src/Notes-master/src/net/micode/notes/data/NotesProvider.java @@ -14,9 +14,9 @@ * limitations under the License. */ -package net.micode.notes.data;//此类所在位置 +package net.micode.notes.data;//姝ょ被鎵鍦ㄤ綅缃 -//以下为引用的各种工具 +//浠ヤ笅涓哄紩鐢ㄧ殑鍚勭宸ュ叿 import android.app.SearchManager; import android.content.ContentProvider; import android.content.ContentUris; @@ -33,15 +33,15 @@ 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; -//为存储和获取数据提供接口。可以在不同的应用程序之间共享数据 -//ContentProvider提供的方法 -//query:查询 -//insert:插入 -//update:更新 -//delete:删除 -//getType:得到数据类型 +//涓哄瓨鍌ㄥ拰鑾峰彇鏁版嵁鎻愪緵鎺ュ彛銆傚彲浠ュ湪涓嶅悓鐨勫簲鐢ㄧ▼搴忎箣闂村叡浜暟鎹 +//ContentProvider鎻愪緵鐨勬柟娉 +//query锛氭煡璇 +//insert锛氭彃鍏 +//update锛氭洿鏂 +//delete锛氬垹闄 +//getType锛氬緱鍒版暟鎹被鍨 public class NotesProvider extends ContentProvider { - // UriMatcher用于匹配Uri + // UriMatcher鐢ㄤ簬鍖归厤Uri private static final UriMatcher mMatcher; private NotesDatabaseHelper mHelper; @@ -57,9 +57,9 @@ public class NotesProvider extends ContentProvider { private static final int URI_SEARCH_SUGGEST = 6; static { - // 创建UriMatcher时,调用UriMatcher(UriMatcher.NO_MATCH)表示不匹配任何路径的返回码 + // 鍒涘缓UriMatcher鏃讹紝璋冪敤UriMatcher(UriMatcher.NO_MATCH)琛ㄧず涓嶅尮閰嶄换浣曡矾寰勭殑杩斿洖鐮 mMatcher = new UriMatcher(UriMatcher.NO_MATCH); - // 把需要匹配Uri路径全部给注册上 + // 鎶婇渶瑕佸尮閰峌ri璺緞鍏ㄩ儴缁欐敞鍐屼笂 mMatcher.addURI(Notes.AUTHORITY, "note", URI_NOTE); mMatcher.addURI(Notes.AUTHORITY, "note/#", URI_NOTE_ITEM); mMatcher.addURI(Notes.AUTHORITY, "data", URI_DATA); @@ -70,10 +70,10 @@ public class NotesProvider extends ContentProvider { } /** - * x'0A' 表示 sqlite 中的 'n' 字符。对于搜索结果中的标题和内容, - * 去掉“n”和空白以显示更多信息. + * x'0A' 琛ㄧず sqlite 涓殑 'n' 瀛楃銆傚浜庢悳绱㈢粨鏋滀腑鐨勬爣棰樺拰鍐呭锛 + * 鍘绘帀鈥渘鈥濆拰绌虹櫧浠ユ樉绀烘洿澶氫俊鎭. */ - // 声明 NOTES_SEARCH_PROJECTION + // 澹版槑 NOTES_SEARCH_PROJECTION 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 + "," @@ -81,7 +81,7 @@ public class NotesProvider extends ContentProvider { + 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; - // 声明NOTES_SNIPPET_SEARCH_QUERY + // 澹版槑NOTES_SNIPPET_SEARCH_QUERY private static String NOTES_SNIPPET_SEARCH_QUERY = "SELECT " + NOTES_SEARCH_PROJECTION + " FROM " + TABLE.NOTE + " WHERE " + NoteColumns.SNIPPET + " LIKE ?" @@ -89,24 +89,24 @@ public class NotesProvider extends ContentProvider { + " AND " + NoteColumns.TYPE + "=" + Notes.TYPE_NOTE; @Override - // Context只有在onCreate()中才被初始化 - // 对mHelper进行实例化 + // Context鍙湁鍦╫nCreate()涓墠琚垵濮嬪寲 + // 瀵筸Helper杩涜瀹炰緥鍖 public boolean onCreate() { mHelper = NotesDatabaseHelper.getInstance(getContext()); return true; } @Override - // 查询uri在数据库中对应的位置 + // 鏌ヨuri鍦ㄦ暟鎹簱涓搴旂殑浣嶇疆 public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { Cursor c = null; - // 获取可读数据库 + // 鑾峰彇鍙鏁版嵁搴 SQLiteDatabase db = mHelper.getReadableDatabase(); String id = null; - // 匹配查找uri + // 鍖归厤鏌ユ壘uri switch (mMatcher.match(uri)) { - // 对于不同的匹配值,在数据库中查找相应的条目 + // 瀵逛簬涓嶅悓鐨勫尮閰嶅硷紝鍦ㄦ暟鎹簱涓煡鎵剧浉搴旂殑鏉$洰 case URI_NOTE: c = db.query(TABLE.NOTE, projection, selection, selectionArgs, null, null, sortOrder); @@ -128,7 +128,7 @@ public class NotesProvider extends ContentProvider { 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"); } @@ -136,8 +136,8 @@ public class NotesProvider extends ContentProvider { String searchString = null; if (mMatcher.match(uri) == URI_SEARCH_SUGGEST) { if (uri.getPathSegments().size() > 1) { - // getPathSegments()方法得到一个String的List, - // 在uri.getPathSegments().get(1)为第2个元素 + // getPathSegments()鏂规硶寰楀埌涓涓猄tring鐨凩ist锛 + // 鍦╱ri.getPathSegments().get(1)涓虹2涓厓绱 searchString = uri.getPathSegments().get(1); } } else { @@ -157,7 +157,7 @@ public class NotesProvider extends ContentProvider { } break; default: - // 抛出异常 + // 鎶涘嚭寮傚父 throw new IllegalArgumentException("Unknown URI " + uri); } if (c != null) { @@ -167,17 +167,17 @@ public class NotesProvider extends ContentProvider { } @Override - // 插入一个uri + // 鎻掑叆涓涓猽ri 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; - // 如果存在,查找NOTE_ID + // 濡傛灉瀛樺湪锛屾煡鎵綨OTE_ID case URI_DATA: if (values.containsKey(DataColumns.NOTE_ID)) { noteId = values.getAsLong(DataColumns.NOTE_ID); @@ -189,30 +189,30 @@ public class NotesProvider extends ContentProvider { default: throw new IllegalArgumentException("Unknown URI " + uri); } - // 通知注释 uri - // notifyChange获得一个ContextResolver对象并且更新里面的内容 + // 閫氱煡娉ㄩ噴 uri + // notifyChange鑾峰緱涓涓狢ontextResolver瀵硅薄骞朵笖鏇存柊閲岄潰鐨勫唴瀹 if (noteId > 0) { getContext().getContentResolver().notifyChange( ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), null); } - // 通知数据 URI + // 閫氱煡鏁版嵁 URI if (dataId > 0) { getContext().getContentResolver().notifyChange( ContentUris.withAppendedId(Notes.CONTENT_DATA_URI, dataId), null); } - // 返回插入的uri的路径 + // 杩斿洖鎻掑叆鐨剈ri鐨勮矾寰 return ContentUris.withAppendedId(uri, insertedId); } @Override - // 删除一个uri + // 鍒犻櫎涓涓猽ri public int delete(Uri uri, String selection, String[] selectionArgs) { - //Uri代表要操作的数据,Android上可用的每种资源 -包括 图像、视频片段、音频资源等都可以用Uri来表示。 + //Uri浠h〃瑕佹搷浣滅殑鏁版嵁锛孉ndroid涓婂彲鐢ㄧ殑姣忕璧勬簮 -鍖呮嫭 鍥惧儚銆佽棰戠墖娈点侀煶棰戣祫婧愮瓑閮藉彲浠ョ敤Uri鏉ヨ〃绀恒 int count = 0; String id = null; - // 获得可写的数据库 + // 鑾峰緱鍙啓鐨勬暟鎹簱 SQLiteDatabase db = mHelper.getWritableDatabase(); boolean deleteData = false; switch (mMatcher.match(uri)) { @@ -223,7 +223,7 @@ public class NotesProvider extends ContentProvider { case URI_NOTE_ITEM: id = uri.getPathSegments().get(1); /** - * 小于 0 的 ID 是不允许回收的系统文件夹 + * 灏忎簬 0 鐨 ID 鏄笉鍏佽鍥炴敹鐨勭郴缁熸枃浠跺す */ long noteId = Long.valueOf(id); if (noteId <= 0) { @@ -255,7 +255,7 @@ public class NotesProvider extends ContentProvider { } @Override - // 更新一个uri + // 鏇存柊涓涓猽ri public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { int count = 0; String id = null; @@ -295,12 +295,12 @@ public class NotesProvider extends ContentProvider { return count; } - // 将字符串解析成规定格式 + // 灏嗗瓧绗︿覆瑙f瀽鎴愯瀹氭牸寮 private String parseSelection(String selection) { return (!TextUtils.isEmpty(selection) ? " AND (" + selection + ')' : ""); } - //增加一个noteVersion + //澧炲姞涓涓猲oteVersion private void increaseNoteVersion(long id, String selection, String[] selectionArgs) { StringBuilder sql = new StringBuilder(120); sql.append("UPDATE "); @@ -323,13 +323,13 @@ public class NotesProvider extends ContentProvider { sql.append(selectString); } - // execSQL()方法可以执行insert、delete、update和CREATE TABLE之类有更改行为的SQL语句 + // execSQL()鏂规硶鍙互鎵цinsert銆乨elete銆乽pdate鍜孋REATE TABLE涔嬬被鏈夋洿鏀硅涓虹殑SQL璇彞 mHelper.getWritableDatabase().execSQL(sql.toString()); } @Override public String getType(Uri uri) { - // TODO 自动生成的方法存根 + // TODO 鑷姩鐢熸垚鐨勬柟娉曞瓨鏍 return null; } diff --git a/src/Notes-master/src/net/micode/notes/tool/BackupUtils.java b/src/Notes-master/src/net/micode/notes/tool/BackupUtils.java index 444d9dc..0763217 100644 --- a/src/Notes-master/src/net/micode/notes/tool/BackupUtils.java +++ b/src/Notes-master/src/net/micode/notes/tool/BackupUtils.java @@ -19,41 +19,41 @@ package net.micode.notes.tool; public class BackupUtils { private static final String TAG = "BackupUtils"; // Singleton stuff - private static BackupUtils sInstance; //类里面为什么可以定义自身类的对象 + private static BackupUtils sInstance; //绫婚噷闈负浠涔堝彲浠ュ畾涔夎嚜韬被鐨勫璞 public static synchronized BackupUtils getInstance(Context context) { - //ynchronized 关键字,代表这个方法加锁,相当于不管哪一个线程(例如线程A) - //运行到这个方法时,都要检查有没有其它线程B(或者C、 D等)正在用这个方法(或者该类的其他同步方法),有的话要等正在使用synchronized方法的线程B(或者C 、D)运行完这个方法后再运行此线程A,没有的话,锁定调用者,然后直接运行。 - //它包括两种用法:synchronized 方法和 synchronized 块。 + //ynchronized 鍏抽敭瀛楋紝浠h〃杩欎釜鏂规硶鍔犻攣,鐩稿綋浜庝笉绠″摢涓涓嚎绋嬶紙渚嬪绾跨▼A锛 + //杩愯鍒拌繖涓柟娉曟椂,閮借妫鏌ユ湁娌℃湁鍏跺畠绾跨▼B锛堟垨鑰匔銆 D绛夛級姝e湪鐢ㄨ繖涓柟娉(鎴栬呰绫荤殑鍏朵粬鍚屾鏂规硶)锛屾湁鐨勮瘽瑕佺瓑姝e湪浣跨敤synchronized鏂规硶鐨勭嚎绋婤锛堟垨鑰匔 銆丏锛夎繍琛屽畬杩欎釜鏂规硶鍚庡啀杩愯姝ょ嚎绋婣,娌℃湁鐨勮瘽,閿佸畾璋冪敤鑰,鐒跺悗鐩存帴杩愯銆 + //瀹冨寘鎷袱绉嶇敤娉曪細synchronized 鏂规硶鍜 synchronized 鍧椼 if (sInstance == null) { - //如果当前备份不存在,则新声明一个 + //濡傛灉褰撳墠澶囦唤涓嶅瓨鍦紝鍒欐柊澹版槑涓涓 sInstance = new BackupUtils(context); } return sInstance; } /** - * 以下状态是表示备份或还原状态的标志 + * 浠ヤ笅鐘舵佹槸琛ㄧず澶囦唤鎴栬繕鍘熺姸鎬佺殑鏍囧織 */ - // Currently, the sdcard is not mounted SD卡没有被装入手机 + // Currently, the sdcard is not mounted SD鍗℃病鏈夎瑁呭叆鎵嬫満 public static final int STATE_SD_CARD_UNMOUONTED = 0; - // The backup file not exist 备份文件夹不存在 + // The backup file not exist 澶囦唤鏂囦欢澶逛笉瀛樺湪 public static final int STATE_BACKUP_FILE_NOT_EXIST = 1; - // The data is not well formated, may be changed by other programs 数据已被破坏,可能被修改 + // The data is not well formated, may be changed by other programs 鏁版嵁宸茶鐮村潖锛屽彲鑳借淇敼 public static final int STATE_DATA_DESTROIED = 2; - // Some run-time exception which causes restore or backup fails 超时异常 + // Some run-time exception which causes restore or backup fails 瓒呮椂寮傚父 public static final int STATE_SYSTEM_ERROR = 3; - // Backup or restore success 成功存储 + // Backup or restore success 鎴愬姛瀛樺偍 public static final int STATE_SUCCESS = 4; private TextExport mTextExport; -//初始化函数 +//鍒濆鍖栧嚱鏁 private BackupUtils(Context context) { mTextExport = new TextExport(context); } -//外部存储功能是否可用 +//澶栭儴瀛樺偍鍔熻兘鏄惁鍙敤 private static boolean externalStorageAvailable() { return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()); } @@ -70,7 +70,7 @@ public class BackupUtils { return mTextExport.mFileDirectory; } -//TextExport方法 +//TextExport鏂规硶 private static class TextExport { private static final String[] NOTE_PROJECTION = { NoteColumns.ID, @@ -94,7 +94,7 @@ public class BackupUtils { DataColumns.DATA4, }; -//定义数据类型的常量 +//瀹氫箟鏁版嵁绫诲瀷鐨勫父閲 private static final int DATA_COLUMN_CONTENT = 0; private static final int DATA_COLUMN_MIME_TYPE = 1; @@ -115,20 +115,20 @@ public class BackupUtils { public TextExport(Context context) { TEXT_FORMAT = context.getResources().getStringArray(R.array.format_for_exported_note); mContext = context; - mFileName = ""; //为什么为空? + mFileName = ""; //涓轰粈涔堜负绌? mFileDirectory = ""; } -//获取文本的组成部分 +//鑾峰彇鏂囨湰鐨勭粍鎴愰儴鍒 private String getFormat(int id) { return TEXT_FORMAT[id]; } /** - * 将文件夹 ID 标识的文件夹导出为文本 + * 灏嗘枃浠跺す ID 鏍囪瘑鐨勬枃浠跺す瀵煎嚭涓烘枃鏈 */ private void exportFolderToText(String folderId, PrintStream ps) { - // Query notes belong to this folder 通过查询parent id是文件夹id的note来选出制定ID文件夹下的Note + // Query notes belong to this folder 閫氳繃鏌ヨparent id鏄枃浠跺すid鐨刵ote鏉ラ夊嚭鍒跺畾ID鏂囦欢澶逛笅鐨凬ote Cursor notesCursor = mContext.getContentResolver().query(Notes.CONTENT_NOTE_URI, NOTE_PROJECTION, NoteColumns.PARENT_ID + "=?", new String[] { folderId @@ -137,13 +137,13 @@ public class BackupUtils { if (notesCursor != null) { if (notesCursor.moveToFirst()) { do { - // Print note's last modified date ps里面保存有这份note的日期 + // Print note's last modified date ps閲岄潰淇濆瓨鏈夎繖浠絥ote鐨勬棩鏈 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); //将文件导出到text + exportNoteToText(noteId, ps); //灏嗘枃浠跺鍑哄埌text } while (notesCursor.moveToNext()); } notesCursor.close(); @@ -151,7 +151,7 @@ public class BackupUtils { } /** - * 将由 id 标识的注释导出到打印流 + * 灏嗙敱 id 鏍囪瘑鐨勬敞閲婂鍑哄埌鎵撳嵃娴 */ private void exportNoteToText(String noteId, PrintStream ps) { Cursor dataCursor = mContext.getContentResolver().query(Notes.CONTENT_DATA_URI, @@ -159,7 +159,7 @@ public class BackupUtils { noteId }, null); - if (dataCursor != null) { //利用光标来扫描内容,区别为callnote和note两种,靠ps.printline输出 + if (dataCursor != null) { //鍒╃敤鍏夋爣鏉ユ壂鎻忓唴瀹癸紝鍖哄埆涓篶allnote鍜宯ote涓ょ锛岄潬ps.printline杈撳嚭 if (dataCursor.moveToFirst()) { do { String mimeType = dataCursor.getString(DATA_COLUMN_MIME_TYPE); @@ -169,15 +169,15 @@ public class BackupUtils { long callDate = dataCursor.getLong(DATA_COLUMN_CALL_DATE); String location = dataCursor.getString(DATA_COLUMN_CONTENT); - if (!TextUtils.isEmpty(phoneNumber)) { //判断是否为空字符 + if (!TextUtils.isEmpty(phoneNumber)) { //鍒ゆ柇鏄惁涓虹┖瀛楃 ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), phoneNumber)); } - // 打印通话日期 + // 鎵撳嵃閫氳瘽鏃ユ湡 ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), DateFormat .format(mContext.getString(R.string.format_datetime_mdhm), callDate))); - // 打印使用附件位置 + // 鎵撳嵃浣跨敤闄勪欢浣嶇疆 if (!TextUtils.isEmpty(location)) { ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), location)); @@ -193,7 +193,7 @@ public class BackupUtils { } dataCursor.close(); } - // 在注释之间打印行分隔符 + // 鍦ㄦ敞閲婁箣闂存墦鍗拌鍒嗛殧绗 try { ps.write(new byte[] { Character.LINE_SEPARATOR, Character.LETTER_NUMBER @@ -204,9 +204,9 @@ public class BackupUtils { } /** - * 注释将导出为用户可读的文本 + * 娉ㄩ噴灏嗗鍑轰负鐢ㄦ埛鍙鐨勬枃鏈 */ - public int exportToText() { //总函数,调用上面的exportFolder和exportNote + public int exportToText() { //鎬诲嚱鏁帮紝璋冪敤涓婇潰鐨別xportFolder鍜宔xportNote if (!externalStorageAvailable()) { Log.d(TAG, "Media was not mounted"); return STATE_SD_CARD_UNMOUONTED; @@ -217,7 +217,7 @@ public class BackupUtils { Log.e(TAG, "get print stream error"); return STATE_SYSTEM_ERROR; } - //导出文件夹,就是导出里面包含的便签 + //瀵煎嚭鏂囦欢澶癸紝灏辨槸瀵煎嚭閲岄潰鍖呭惈鐨勪究绛 Cursor folderCursor = mContext.getContentResolver().query( Notes.CONTENT_NOTE_URI, NOTE_PROJECTION, @@ -245,7 +245,7 @@ public class BackupUtils { folderCursor.close(); } - // 将根目录里的便签导出(由于不属于任何文件夹,因此无法通过文件夹导出来实现这一部分便签的导出) + // 灏嗘牴鐩綍閲岀殑渚跨瀵煎嚭锛堢敱浜庝笉灞炰簬浠讳綍鏂囦欢澶癸紝鍥犳鏃犳硶閫氳繃鏂囦欢澶瑰鍑烘潵瀹炵幇杩欎竴閮ㄥ垎渚跨鐨勫鍑猴級 Cursor noteCursor = mContext.getContentResolver().query( Notes.CONTENT_NOTE_URI, NOTE_PROJECTION, @@ -258,7 +258,7 @@ public class BackupUtils { ps.println(String.format(getFormat(FORMAT_NOTE_DATE), DateFormat.format( mContext.getString(R.string.format_datetime_mdhm), noteCursor.getLong(NOTE_COLUMN_MODIFIED_DATE)))); - // 查询数据属于此说明 + // 鏌ヨ鏁版嵁灞炰簬姝よ鏄 String noteId = noteCursor.getString(NOTE_COLUMN_ID); exportNoteToText(noteId, ps); } while (noteCursor.moveToNext()); @@ -271,7 +271,7 @@ public class BackupUtils { } /** - * 获取指向文件 {@generateExportedTextFile} 的打印流 + * 鑾峰彇鎸囧悜鏂囦欢 {@generateExportedTextFile} 鐨勬墦鍗版祦 */ private PrintStream getExportToTextPrintStream() { File file = generateFileMountedOnSDcard(mContext, R.string.file_path, @@ -286,7 +286,7 @@ public class BackupUtils { try { FileOutputStream fos = new FileOutputStream(file); ps = new PrintStream(fos); - //将ps输出流输出到特定的文件,目的就是导出到文件,而不是直接输出 + //灏唒s杈撳嚭娴佽緭鍑哄埌鐗瑰畾鐨勬枃浠讹紝鐩殑灏辨槸瀵煎嚭鍒版枃浠讹紝鑰屼笉鏄洿鎺ヨ緭鍑 } catch (FileNotFoundException e) { e.printStackTrace(); return null; @@ -299,20 +299,20 @@ public class BackupUtils { } /** - * 生成文本文件以存储导入的数据 + * 鐢熸垚鏂囨湰鏂囦欢浠ュ瓨鍌ㄥ鍏ョ殑鏁版嵁 */ private static File generateFileMountedOnSDcard(Context context, int filePathResId, int fileNameFormatResId) { StringBuilder sb = new StringBuilder(); - sb.append(Environment.getExternalStorageDirectory()); //外部(SD卡)的存储路径 - sb.append(context.getString(filePathResId)); //文件的存储路径 - File filedir = new File(sb.toString()); //filedir应该就是用来存储路径信息 + sb.append(Environment.getExternalStorageDirectory()); //澶栭儴锛圫D鍗★級鐨勫瓨鍌ㄨ矾寰 + sb.append(context.getString(filePathResId)); //鏂囦欢鐨勫瓨鍌ㄨ矾寰 + File filedir = new File(sb.toString()); //filedir搴旇灏辨槸鐢ㄦ潵瀛樺偍璺緞淇℃伅 sb.append(context.getString( fileNameFormatResId, DateFormat.format(context.getString(R.string.format_date_ymd), System.currentTimeMillis()))); File file = new File(sb.toString()); - try { //如果这些文件不存在,则新建 + try { //濡傛灉杩欎簺鏂囦欢涓嶅瓨鍦紝鍒欐柊寤 if (!filedir.exists()) { filedir.mkdir(); } @@ -325,7 +325,7 @@ public class BackupUtils { } catch (IOException e) { e.printStackTrace(); } -// try catch 异常处理 +// try catch 寮傚父澶勭悊 return null; } } diff --git a/src/Notes-master/src/net/micode/notes/tool/DataUtils.java b/src/Notes-master/src/net/micode/notes/tool/DataUtils.java index 2886c5f..c2058b1 100644 --- a/src/Notes-master/src/net/micode/notes/tool/DataUtils.java +++ b/src/Notes-master/src/net/micode/notes/tool/DataUtils.java @@ -1,8 +1,8 @@ -package net.micode.notes.tool;//此类所在位置 +package net.micode.notes.tool;//姝ょ被鎵鍦ㄤ綅缃 public class DataUtils { public static final String TAG = "DataUtils"; - public static boolean batchDeleteNotes(ContentResolver resolver, HashSet ids) { //直接删除多个笔记 + public static boolean batchDeleteNotes(ContentResolver resolver, HashSet ids) { //鐩存帴鍒犻櫎澶氫釜绗旇 if (ids == null) { Log.d(TAG, "the ids is null"); return true; @@ -12,19 +12,19 @@ public class DataUtils { return true; } - ArrayList operationList = new ArrayList(); //提供一个任务列表 + ArrayList operationList = new ArrayList(); //鎻愪緵涓涓换鍔″垪琛 for (long id : ids) { if(id == Notes.ID_ROOT_FOLDER) { Log.e(TAG, "Don't delete system folder root"); continue; - } //如果发现是根文件夹,则不删除 + } //濡傛灉鍙戠幇鏄牴鏂囦欢澶癸紝鍒欎笉鍒犻櫎 ContentProviderOperation.Builder builder = ContentProviderOperation - .newDelete(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id)); //用newDelete实现删除功能 + .newDelete(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id)); //鐢╪ewDelete瀹炵幇鍒犻櫎鍔熻兘 operationList.add(builder.build()); // } try { - ContentProviderResult[] results = resolver.applyBatch(Notes.AUTHORITY, operationList);//主机名(或叫Authority)用于唯一标识这个ContentProvider,外部调用者可以根据这个标识来找到它。 - //数据库事务,数据库事务是由一组数据库操作序列组成,事务作为一个整体被执行 + ContentProviderResult[] results = resolver.applyBatch(Notes.AUTHORITY, operationList);//涓绘満鍚嶏紙鎴栧彨Authority锛夌敤浜庡敮涓鏍囪瘑杩欎釜ContentProvider锛屽閮ㄨ皟鐢ㄨ呭彲浠ユ牴鎹繖涓爣璇嗘潵鎵惧埌瀹冦 + //鏁版嵁搴撲簨鍔★紝鏁版嵁搴撲簨鍔℃槸鐢变竴缁勬暟鎹簱鎿嶄綔搴忓垪缁勬垚锛屼簨鍔′綔涓轰竴涓暣浣撹鎵ц if (results == null || results.length == 0 || results[0] == null) { Log.d(TAG, "delete notes failed, ids:" + ids.toString()); return false; @@ -43,7 +43,7 @@ public class DataUtils { values.put(NoteColumns.PARENT_ID, desFolderId); values.put(NoteColumns.ORIGIN_PARENT_ID, srcFolderId); values.put(NoteColumns.LOCAL_MODIFIED, 1); - resolver.update(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id), values, null, null); //对需要移动的便签进行数据更新,然后用update实现 + resolver.update(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id), values, null, null); //瀵归渶瑕佺Щ鍔ㄧ殑渚跨杩涜鏁版嵁鏇存柊锛岀劧鍚庣敤update瀹炵幇 } public static boolean batchMoveToFolder(ContentResolver resolver, HashSet ids, @@ -56,14 +56,14 @@ public class DataUtils { ArrayList operationList = new ArrayList(); for (long id : ids) { ContentProviderOperation.Builder builder = ContentProviderOperation - .newUpdate(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id)); //通过withAppendedId方法,为该Uri加上ID + .newUpdate(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id)); //閫氳繃withAppendedId鏂规硶锛屼负璇ri鍔犱笂ID builder.withValue(NoteColumns.PARENT_ID, folderId); builder.withValue(NoteColumns.LOCAL_MODIFIED, 1); operationList.add(builder.build()); - }//将ids里包含的每一列的数据逐次加入到operationList中,等待最后的批量处理 + }//灏唅ds閲屽寘鍚殑姣忎竴鍒楃殑鏁版嵁閫愭鍔犲叆鍒皁perationList涓紝绛夊緟鏈鍚庣殑鎵归噺澶勭悊 try { - ContentProviderResult[] results = resolver.applyBatch(Notes.AUTHORITY, operationList); //applyBatch一次性处理一个操作列表 + ContentProviderResult[] results = resolver.applyBatch(Notes.AUTHORITY, operationList); //applyBatch涓娆℃у鐞嗕竴涓搷浣滃垪琛 if (results == null || results.length == 0 || results[0] == null) { Log.d(TAG, "delete notes failed, ids:" + ids.toString()); return false; @@ -78,14 +78,14 @@ public class DataUtils { } /** - * 获取除系统文件夹 {@link Notes#TYPE_SYSTEM}} 之外的所有文件夹计数 + * 鑾峰彇闄ょ郴缁熸枃浠跺す {@link Notes#TYPE_SYSTEM}} 涔嬪鐨勬墍鏈夋枃浠跺す璁℃暟 */ 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); //筛选条件:源文件不为trash folder + null); //绛涢夋潯浠讹細婧愭枃浠朵笉涓簍rash folder int count = 0; if(cursor != null) { @@ -94,7 +94,7 @@ public class DataUtils { count = cursor.getInt(0); } catch (IndexOutOfBoundsException e) { Log.e(TAG, "get folder count failed:" + e.toString()); -//get folder count failed报错 +//get folder count failed鎶ラ敊 } finally { cursor.close(); } @@ -104,15 +104,15 @@ public class DataUtils { } public static boolean visibleInNoteDatabase(ContentResolver resolver, long noteId, int type) { - Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), //通过withAppendedId方法,为该Uri加上ID + Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), //閫氳繃withAppendedId鏂规硶锛屼负璇ri鍔犱笂ID null, NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER, new String [] {String.valueOf(type)}, - null); //查询条件:type符合,且不属于垃圾文件夹 + null); //鏌ヨ鏉′欢锛歵ype绗﹀悎锛屼笖涓嶅睘浜庡瀮鍦炬枃浠跺す boolean exist = false; if (cursor != null) { - if (cursor.getCount() > 0) {//用getcount函数判断cursor是否为空 + if (cursor.getCount() > 0) {//鐢╣etcount鍑芥暟鍒ゆ柇cursor鏄惁涓虹┖ exist = true; } cursor.close(); @@ -120,8 +120,8 @@ public class DataUtils { return exist; } -// 检查给定的noteId是否存在于笔记数据库中 - public static boolean existInNoteDatabase(ContentResolver resolver, long noteId) {// 构建查询笔记数据的Uri,使用ContentUris.withAppendedId()方法将noteId添加到笔记Uri中 +// 妫鏌ョ粰瀹氱殑noteId鏄惁瀛樺湪浜庣瑪璁版暟鎹簱涓 + public static boolean existInNoteDatabase(ContentResolver resolver, long noteId) {// 鏋勫缓鏌ヨ绗旇鏁版嵁鐨刄ri锛屼娇鐢–ontentUris.withAppendedId()鏂规硶灏唍oteId娣诲姞鍒扮瑪璁癠ri涓 Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), null, null, null, null); @@ -141,10 +141,10 @@ public class DataUtils { boolean exist = false; if (cursor != null) { - if (cursor.getCount() > 0) {// 如果count中有数据,则说明noteId存在于笔记数据库中 + if (cursor.getCount() > 0) {// 濡傛灉count涓湁鏁版嵁锛屽垯璇存槑noteId瀛樺湪浜庣瑪璁版暟鎹簱涓 exist = true; } - cursor.close();//释放资源 + cursor.close();//閲婃斁璧勬簮 } return exist; } @@ -155,7 +155,7 @@ public class DataUtils { " AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER + " AND " + NoteColumns.SNIPPET + "=?", new String[] { name }, null); - //通过名字查询文件是否存在 + //閫氳繃鍚嶅瓧鏌ヨ鏂囦欢鏄惁瀛樺湪 boolean exist = false; if(cursor != null) { if(cursor.getCount() > 0) { @@ -171,7 +171,7 @@ public class DataUtils { new String[] { NoteColumns.WIDGET_ID, NoteColumns.WIDGET_TYPE }, NoteColumns.PARENT_ID + "=?", new String[] { String.valueOf(folderId) }, - null); //查询条件:父ID是传入的folderId; + null); //鏌ヨ鏉′欢锛氱埗ID鏄紶鍏ョ殑folderId; HashSet set = null; if (c != null) { @@ -180,21 +180,21 @@ public class DataUtils { do { try { AppWidgetAttribute widget = new AppWidgetAttribute(); - widget.widgetId = c.getInt(0); //0对应的NoteColumns.WIDGET_ID - widget.widgetType = c.getInt(1); //1对应的NoteColumns.WIDGET_TYPE + widget.widgetId = c.getInt(0); //0瀵瑰簲鐨凬oteColumns.WIDGET_ID + widget.widgetType = c.getInt(1); //1瀵瑰簲鐨凬oteColumns.WIDGET_TYPE set.add(widget); } catch (IndexOutOfBoundsException e) { Log.e(TAG, e.toString()); } - } while (c.moveToNext()); //查询下一条 + } while (c.moveToNext()); //鏌ヨ涓嬩竴鏉 } c.close(); } return set; } -//根据给定的noteId从笔记数据库中获取电话号码 - public static String getCallNumberByNoteId(ContentResolver resolver, long noteId) {// 构建查询条件,返回值为String类型,表示根据noteId获取到的电话号码,如果获取失败则返回空字符串 +//鏍规嵁缁欏畾鐨刵oteId浠庣瑪璁版暟鎹簱涓幏鍙栫數璇濆彿鐮 + public static String getCallNumberByNoteId(ContentResolver resolver, long noteId) {// 鏋勫缓鏌ヨ鏉′欢锛岃繑鍥炲间负String绫诲瀷锛岃〃绀烘牴鎹畁oteId鑾峰彇鍒扮殑鐢佃瘽鍙风爜锛屽鏋滆幏鍙栧け璐ュ垯杩斿洖绌哄瓧绗︿覆 Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI, new String [] { CallNote.PHONE_NUMBER }, CallNote.NOTE_ID + "=? AND " + CallNote.MIME_TYPE + "=?", @@ -203,7 +203,7 @@ public class DataUtils { if (cursor != null && cursor.moveToFirst()) { try { - return cursor.getString(0);// 获取第一列的电话号码数据 + return cursor.getString(0);// 鑾峰彇绗竴鍒楃殑鐢佃瘽鍙风爜鏁版嵁 } catch (IndexOutOfBoundsException e) { Log.e(TAG, "Get call number fails " + e.toString()); } finally { @@ -220,12 +220,12 @@ public class DataUtils { + CallNote.PHONE_NUMBER + ",?)", new String [] { String.valueOf(callDate), CallNote.CONTENT_ITEM_TYPE, phoneNumber }, null); - //通过数据库操作,查询条件是(callDate和phoneNumber匹配传入参数的值) + //閫氳繃鏁版嵁搴撴搷浣滐紝鏌ヨ鏉′欢鏄紙callDate鍜宲honeNumber鍖归厤浼犲叆鍙傛暟鐨勫硷級 if (cursor != null) { if (cursor.moveToFirst()) { try { - return cursor.getLong(0); //0对应的CallNote.NOTE_ID + return cursor.getLong(0); //0瀵瑰簲鐨凜allNote.NOTE_ID } catch (IndexOutOfBoundsException e) { Log.e(TAG, "Get call note id fails " + e.toString()); } @@ -240,7 +240,7 @@ public class DataUtils { new String [] { NoteColumns.SNIPPET }, NoteColumns.ID + "=?", new String [] { String.valueOf(noteId)}, - null);//查询条件:noteId + null);//鏌ヨ鏉′欢锛歯oteId if (cursor != null) { String snippet = ""; @@ -252,7 +252,7 @@ public class DataUtils { } throw new IllegalArgumentException("Note is not found with id: " + noteId); } - public static String getFormattedSnippet(String snippet) { //对字符串进行格式处理,将字符串两头的空格去掉,同时将换行符去掉 + public static String getFormattedSnippet(String snippet) { //瀵瑰瓧绗︿覆杩涜鏍煎紡澶勭悊锛屽皢瀛楃涓蹭袱澶寸殑绌烘牸鍘绘帀锛屽悓鏃跺皢鎹㈣绗﹀幓鎺 if (snippet != null) { snippet = snippet.trim(); int index = snippet.indexOf('\n'); diff --git a/src/Notes-master/src/net/micode/notes/tool/GTaskStringUtils.java b/src/Notes-master/src/net/micode/notes/tool/GTaskStringUtils.java index 5825486..5e3e4dc 100644 --- a/src/Notes-master/src/net/micode/notes/tool/GTaskStringUtils.java +++ b/src/Notes-master/src/net/micode/notes/tool/GTaskStringUtils.java @@ -14,96 +14,96 @@ * limitations under the License. */ -//定义了很多的静态字符串,目的就是为了提供jsonObject中相应字符串的"key"。把这些静态的定义单独写到了一个类里面 -package net.micode.notes.tool;//定位此类 +//瀹氫箟浜嗗緢澶氱殑闈欐佸瓧绗︿覆锛岀洰鐨勫氨鏄负浜嗘彁渚沯sonObject涓浉搴斿瓧绗︿覆鐨"key"銆傛妸杩欎簺闈欐佺殑瀹氫箟鍗曠嫭鍐欏埌浜嗕竴涓被閲岄潰 +package net.micode.notes.tool;//瀹氫綅姝ょ被 -//这个类定义了一些static string,实际就是为jsonObject提供Key,把这些定义全部写到一个类里,方便查看管理 +//杩欎釜绫诲畾涔変簡涓浜泂tatic string锛屽疄闄呭氨鏄负jsonObject鎻愪緵Key锛屾妸杩欎簺瀹氫箟鍏ㄩ儴鍐欏埌涓涓被閲岋紝鏂逛究鏌ョ湅绠$悊 public class GTaskStringUtils { -// 动作相关常量 -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_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_CREATOR_ID = "creator_id"; // 鍒涘缓鑰匢D -public final static String GTASK_JSON_CHILD_ENTITY = "child_entity"; // 子实体 +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_CLIENT_VERSION = "client_version"; // 瀹㈡埛绔増鏈 -public final static String GTASK_JSON_COMPLETED = "completed"; // 完成状态 +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_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_DEFAULT_LIST_ID = "default_list_id"; // 榛樿鍒楄〃ID -public final static String GTASK_JSON_DELETED = "deleted"; // 删除状态 +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_LIST = "dest_list"; // 鐩爣鍒楄〃 -public final static String GTASK_JSON_DEST_PARENT = "dest_parent"; // 目标父级 +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_DEST_PARENT_TYPE = "dest_parent_type"; // 鐩爣鐖剁骇绫诲瀷 -public final static String GTASK_JSON_ENTITY_DELTA = "entity_delta"; // 实体增量 +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_ENTITY_TYPE = "entity_type"; // 瀹炰綋绫诲瀷 -public final static String GTASK_JSON_GET_DELETED = "get_deleted"; // 获取已删除项 +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_INDEX = "index"; // 绱㈠紩 -public final static String GTASK_JSON_LAST_MODIFIED = "last_modified"; // 最后修改时间 +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_LATEST_SYNC_POINT = "latest_sync_point"; // 鏈鏂板悓姝ョ偣 -public final static String GTASK_JSON_LIST_ID = "list_id"; // 列表ID +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_LISTS = "lists"; // 鍒楄〃 -public final static String GTASK_JSON_NAME = "name"; // 名称 +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_NEW_ID = "new_id"; // 鏂癐D -public final static String GTASK_JSON_NOTES = "notes"; // 备注 +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_PARENT_ID = "parent_id"; // 鐖剁骇ID -public final static String GTASK_JSON_PRIOR_SIBLING_ID = "prior_sibling_id"; // 上一个兄弟节点ID +public final static String GTASK_JSON_PRIOR_SIBLING_ID = "prior_sibling_id"; // 涓婁竴涓厔寮熻妭鐐笽D -public final static String GTASK_JSON_RESULTS = "results"; // 结果 +public final static String GTASK_JSON_RESULTS = "results"; // 缁撴灉 -public final static String GTASK_JSON_SOURCE_LIST = "source_list"; // 源列表 +public final static String GTASK_JSON_SOURCE_LIST = "source_list"; // 婧愬垪琛 -public final static String GTASK_JSON_TASKS = "tasks"; // 任务 +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_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"; // 用户 +public final static String GTASK_JSON_USER = "user"; // 鐢ㄦ埛 -public final static String MIUI_FOLDER_PREFFIX = "[MIUI_Notes]"; // MIUI文件夹前缀 +public final static String MIUI_FOLDER_PREFFIX = "[MIUI_Notes]"; // MIUI鏂囦欢澶瑰墠缂 -public final static String FOLDER_DEFAULT = "Default"; // 默认文件夹 +public final static String FOLDER_DEFAULT = "Default"; // 榛樿鏂囦欢澶 -public final static String FOLDER_CALL_NOTE = "Call_Note"; // 电话备注文件夹 +public final static String FOLDER_CALL_NOTE = "Call_Note"; // 鐢佃瘽澶囨敞鏂囦欢澶 -public final static String FOLDER_META = "METADATA"; // 元数据文件夹 +public final static String FOLDER_META = "METADATA"; // 鍏冩暟鎹枃浠跺す -public final static String META_HEAD_GTASK_ID = "meta_gid"; // 元信息任务ID +public final static String META_HEAD_GTASK_ID = "meta_gid"; // 鍏冧俊鎭换鍔D -public final static String META_HEAD_NOTE = "meta_note"; // 元信息备注 +public final static String META_HEAD_NOTE = "meta_note"; // 鍏冧俊鎭娉 -public final static String META_HEAD_DATA = "meta_data"; // 元信息数据 +public final static String META_HEAD_DATA = "meta_data"; // 鍏冧俊鎭暟鎹 -public final static String META_NOTE_NAME = "[META INFO] DON'T UPDATE AND DELETE"; // 元信息备注名称 +public final static String META_NOTE_NAME = "[META INFO] DON'T UPDATE AND DELETE"; // 鍏冧俊鎭娉ㄥ悕绉 } \ No newline at end of file diff --git a/src/Notes-master/src/net/micode/notes/tool/ResourceParser.java b/src/Notes-master/src/net/micode/notes/tool/ResourceParser.java index f0e8b41..6d1fd13 100644 --- a/src/Notes-master/src/net/micode/notes/tool/ResourceParser.java +++ b/src/Notes-master/src/net/micode/notes/tool/ResourceParser.java @@ -14,24 +14,24 @@ * limitations under the License. */ -package net.micode.notes.tool;//此类位置 - -/*资源分析器,实际上就是获取资源并且在程序中使用,比如颜色图片等 - * 实现方法:主要利用R.java这个类,其中包括 - * R.id 组件资源引用 - * R.drawable 图片资源 (被使用) - * R.layout 布局资源 - * R.menu 菜单资源 - * R.String 文字资源 - * R.style 主题资源 (被使用) - * 在按顺序设置好相应的id后,就可以编写简单的getXXX函数获取需要的资源 +package net.micode.notes.tool;//姝ょ被浣嶇疆 + +/*璧勬簮鍒嗘瀽鍣紝瀹為檯涓婂氨鏄幏鍙栬祫婧愬苟涓斿湪绋嬪簭涓娇鐢紝姣斿棰滆壊鍥剧墖绛 + * 瀹炵幇鏂规硶锛氫富瑕佸埄鐢≧.java杩欎釜绫伙紝鍏朵腑鍖呮嫭 + * R.id 缁勪欢璧勬簮寮曠敤 + * R.drawable 鍥剧墖璧勬簮 锛堣浣跨敤锛 + * R.layout 甯冨眬璧勬簮 + * R.menu 鑿滃崟璧勬簮 + * R.String 鏂囧瓧璧勬簮 + * R.style 涓婚璧勬簮 锛堣浣跨敤锛 + * 鍦ㄦ寜椤哄簭璁剧疆濂界浉搴旂殑id鍚庯紝灏卞彲浠ョ紪鍐欑畝鍗曠殑getXXX鍑芥暟鑾峰彇闇瑕佺殑璧勬簮 * - * 特殊的变量 : - * @BG_DEFAULT_COLOR 默认背景颜色(黄) - * BG_DEFAULT_FONT_SIZE 默认文本大小(中) + * 鐗规畩鐨勫彉閲 锛 + * @BG_DEFAULT_COLOR 榛樿鑳屾櫙棰滆壊锛堥粍锛 + * BG_DEFAULT_FONT_SIZE 榛樿鏂囨湰澶у皬锛堜腑锛 */ -//字体大小和颜色 +//瀛椾綋澶у皬鍜岄鑹 public class ResourceParser { public static final int YELLOW = 0; @@ -49,7 +49,7 @@ public class ResourceParser { 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, @@ -59,7 +59,7 @@ public class ResourceParser { R.drawable.edit_red }; -//标题颜色 +//鏍囬棰滆壊 private final static int [] BG_EDIT_TITLE_RESOURCES = new int [] { R.drawable.edit_title_yellow, R.drawable.edit_title_blue, @@ -77,7 +77,7 @@ public class ResourceParser { } } - //直接获取默认的背景颜色。 + //鐩存帴鑾峰彇榛樿鐨勮儗鏅鑹层 public static int getDefaultBgId(Context context) { if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean( NotesPreferenceActivity.PREFERENCE_SET_BG_COLOR_KEY, false)) { @@ -87,7 +87,7 @@ public class ResourceParser { } } - //用于存储不同类型笔记的第一个笔记的背景资源ID + //鐢ㄤ簬瀛樺偍涓嶅悓绫诲瀷绗旇鐨勭涓涓瑪璁扮殑鑳屾櫙璧勬簮ID public static class NoteItemBgResources { private final static int [] BG_FIRST_RESOURCES = new int [] { R.drawable.list_yellow_up, @@ -97,7 +97,7 @@ public class ResourceParser { R.drawable.list_red_up }; -//用于存储不同类型笔记的中间笔记的背景资源ID +//鐢ㄤ簬瀛樺偍涓嶅悓绫诲瀷绗旇鐨勪腑闂寸瑪璁扮殑鑳屾櫙璧勬簮ID private final static int [] BG_NORMAL_RESOURCES = new int [] { R.drawable.list_yellow_middle, R.drawable.list_blue_middle, @@ -106,7 +106,7 @@ public class ResourceParser { R.drawable.list_red_middle }; -//用于存储不同类型笔记的最后笔记的背景资源ID +//鐢ㄤ簬瀛樺偍涓嶅悓绫诲瀷绗旇鐨勬渶鍚庣瑪璁扮殑鑳屾櫙璧勬簮ID private final static int [] BG_LAST_RESOURCES = new int [] { R.drawable.list_yellow_down, R.drawable.list_blue_down, @@ -115,7 +115,7 @@ public class ResourceParser { R.drawable.list_red_down, }; -//定义了NoteItemBgResources内部类中的一个静态数组BG_SINGLE_RESOURCES,用于存储不同类型笔记只有一个笔记时的背景资源ID。 +//瀹氫箟浜哊oteItemBgResources鍐呴儴绫讳腑鐨勪竴涓潤鎬佹暟缁凚G_SINGLE_RESOURCES锛岀敤浜庡瓨鍌ㄤ笉鍚岀被鍨嬬瑪璁板彧鏈変竴涓瑪璁版椂鐨勮儗鏅祫婧怚D銆 private final static int [] BG_SINGLE_RESOURCES = new int [] { R.drawable.list_yellow_single, R.drawable.list_blue_single, @@ -124,22 +124,22 @@ public class ResourceParser { R.drawable.list_red_single }; - //用于获取特定id对应的第一个笔记的背景资源ID。 + //鐢ㄤ簬鑾峰彇鐗瑰畾id瀵瑰簲鐨勭涓涓瑪璁扮殑鑳屾櫙璧勬簮ID銆 public static int getNoteBgFirstRes(int id) { return BG_FIRST_RESOURCES[id]; } -//用于获取特定id对应的最后一个笔记的背景资源ID +//鐢ㄤ簬鑾峰彇鐗瑰畾id瀵瑰簲鐨勬渶鍚庝竴涓瑪璁扮殑鑳屾櫙璧勬簮ID public static int getNoteBgLastRes(int id) { return BG_LAST_RESOURCES[id]; } -//用于获取特定id对应的只有一个笔记时的背景资源ID +//鐢ㄤ簬鑾峰彇鐗瑰畾id瀵瑰簲鐨勫彧鏈変竴涓瑪璁版椂鐨勮儗鏅祫婧怚D public static int getNoteBgSingleRes(int id) { return BG_SINGLE_RESOURCES[id]; } -//用于获取特定id对应的中间笔记的背景资源ID +//鐢ㄤ簬鑾峰彇鐗瑰畾id瀵瑰簲鐨勪腑闂寸瑪璁扮殑鑳屾櫙璧勬簮ID public static int getNoteBgNormalRes(int id) { return BG_NORMAL_RESOURCES[id]; } @@ -183,10 +183,10 @@ public class ResourceParser { R.style.TextAppearanceSuper }; - //这里有一个容错的函数,防止输入的id大于资源总量,若如此,则自动返回默认的设置结果 + //杩欓噷鏈変竴涓閿欑殑鍑芥暟锛岄槻姝㈣緭鍏ョ殑id澶т簬璧勬簮鎬婚噺锛岃嫢濡傛锛屽垯鑷姩杩斿洖榛樿鐨勮缃粨鏋 public static int getTexAppearanceResource(int id) { /** - * HACKME:修复将资源 ID 存储在共享首选项中的错误。id 可能大于资源的 长度,在本例中,返回 {@link ResourceParser#BG_DEFAULT_FONT_SIZE} + * HACKME锛氫慨澶嶅皢璧勬簮 ID 瀛樺偍鍦ㄥ叡浜閫夐」涓殑閿欒銆俰d 鍙兘澶т簬璧勬簮鐨 闀垮害锛屽湪鏈緥涓紝杩斿洖 {@link ResourceParser#BG_DEFAULT_FONT_SIZE} */ if (id >= TEXTAPPEARANCE_RESOURCES.length) { return BG_DEFAULT_FONT_SIZE; diff --git a/src/Notes-master/src/net/micode/notes/ui/AlarmAlertActivity.java b/src/Notes-master/src/net/micode/notes/ui/AlarmAlertActivity.java index 7fc5aec..af5df76 100644 --- a/src/Notes-master/src/net/micode/notes/ui/AlarmAlertActivity.java +++ b/src/Notes-master/src/net/micode/notes/ui/AlarmAlertActivity.java @@ -40,44 +40,44 @@ import net.micode.notes.tool.DataUtils; import java.io.IOException; public class AlarmAlertActivity extends Activity implements OnClickListener, OnDismissListener { - private long mNoteId; //文本在数据库存储中的ID号 - private String mSnippet; //闹钟提示时出现的文本片段 + private long mNoteId; //鏂囨湰鍦ㄦ暟鎹簱瀛樺偍涓殑ID鍙 + private String mSnippet; //闂归挓鎻愮ず鏃跺嚭鐜扮殑鏂囨湰鐗囨 private static final int SNIPPET_PREW_MAX_LEN = 60; MediaPlayer mPlayer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - //Bundle类型的数据与Map类型的数据相似,都是以key-value的形式存储数据的 - //onsaveInstanceState方法是用来保存Activity的状态的 - //能从onCreate的参数savedInsanceState中获得状态数据 + //Bundle绫诲瀷鐨勬暟鎹笌Map绫诲瀷鐨勬暟鎹浉浼硷紝閮芥槸浠ey-value鐨勫舰寮忓瓨鍌ㄦ暟鎹殑 + //onsaveInstanceState鏂规硶鏄敤鏉ヤ繚瀛楢ctivity鐨勭姸鎬佺殑 + //鑳戒粠onCreate鐨勫弬鏁皊avedInsanceState涓幏寰楃姸鎬佹暟鎹 requestWindowFeature(Window.FEATURE_NO_TITLE); - //界面显示——无标题 + //鐣岄潰鏄剧ず鈥斺旀棤鏍囬 final Window win = getWindow(); win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); if (!isScreenOn()) { win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON - //保持窗体点亮 + //淇濇寔绐椾綋鐐逛寒 | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON - //将窗体点亮 + //灏嗙獥浣撶偣浜 | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON - //允许窗体点亮时锁屏 + //鍏佽绐椾綋鐐逛寒鏃堕攣灞 | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR); - }//在手机锁屏后如果到了闹钟提示时间,点亮屏幕 + }//鍦ㄦ墜鏈洪攣灞忓悗濡傛灉鍒颁簡闂归挓鎻愮ず鏃堕棿锛岀偣浜睆骞 Intent intent = getIntent(); try { mNoteId = Long.valueOf(intent.getData().getPathSegments().get(1)); mSnippet = DataUtils.getSnippetById(this.getContentResolver(), mNoteId); - //根据ID从数据库中获取标签的内容; - //getContentResolver()是实现数据共享,实例存储。 + //鏍规嵁ID浠庢暟鎹簱涓幏鍙栨爣绛剧殑鍐呭锛 + //getContentResolver锛堬級鏄疄鐜版暟鎹叡浜紝瀹炰緥瀛樺偍銆 mSnippet = mSnippet.length() > SNIPPET_PREW_MAX_LEN ? mSnippet.substring(0, SNIPPET_PREW_MAX_LEN) + getResources().getString(R.string.notelist_string_info) : mSnippet; - //判断标签片段是否达到符合长度 + //鍒ゆ柇鏍囩鐗囨鏄惁杈惧埌绗﹀悎闀垮害 } catch (IllegalArgumentException e) { e.printStackTrace(); return; @@ -85,35 +85,35 @@ public class AlarmAlertActivity extends Activity implements OnClickListener, OnD /* try { - // 代码区 + // 浠g爜鍖 } catch(Exception e) { - // 异常处理 + // 寮傚父澶勭悊 } - 代码区如果有错误,就会返回所写异常的处理。*/ + 浠g爜鍖哄鏋滄湁閿欒锛屽氨浼氳繑鍥炴墍鍐欏紓甯哥殑澶勭悊銆*/ mPlayer = new MediaPlayer(); if (DataUtils.visibleInNoteDatabase(getContentResolver(), mNoteId, Notes.TYPE_NOTE)) { showActionDialog(); - //弹出对话框 + //寮瑰嚭瀵硅瘽妗 playAlarmSound(); - //闹钟提示音激发 + //闂归挓鎻愮ず闊虫縺鍙 } else { finish(); - //完成闹钟动作 + //瀹屾垚闂归挓鍔ㄤ綔 } } private boolean isScreenOn() { - //判断屏幕是否锁屏,调用系统函数判断,最后返回值是布尔类型 + //鍒ゆ柇灞忓箷鏄惁閿佸睆锛岃皟鐢ㄧ郴缁熷嚱鏁板垽鏂紝鏈鍚庤繑鍥炲兼槸甯冨皵绫诲瀷 PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); return pm.isScreenOn(); } private void playAlarmSound() { - //闹钟提示音激发 + //闂归挓鎻愮ず闊虫縺鍙 Uri url = RingtoneManager.getActualDefaultRingtoneUri(this, RingtoneManager.TYPE_ALARM); - //调用系统的铃声管理URI,得到闹钟提示音 + //璋冪敤绯荤粺鐨勯搩澹扮鐞哢RI锛屽緱鍒伴椆閽熸彁绀洪煶 int silentModeStreams = Settings.System.getInt(getContentResolver(), Settings.System.MODE_RINGER_STREAMS_AFFECTED, 0); @@ -124,19 +124,19 @@ public class AlarmAlertActivity extends Activity implements OnClickListener, OnD } try { mPlayer.setDataSource(this, url); - //方法:setDataSource(Context context, Uri uri) - //解释:无返回值,设置多媒体数据来源【根据 Uri】 + //鏂规硶锛歴etDataSource(Context context, Uri uri) + //瑙i噴锛氭棤杩斿洖鍊硷紝璁剧疆澶氬獟浣撴暟鎹潵婧愩愭牴鎹 Uri銆 mPlayer.prepare(); - //准备同步 + //鍑嗗鍚屾 mPlayer.setLooping(true); - //设置是否循环播放 + //璁剧疆鏄惁寰幆鎾斁 mPlayer.start(); - //开始播放 + //寮濮嬫挱鏀 } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); - //e.printStackTrace()函数功能是抛出异常, 还将显示出更深的调用信息 - //System.out.println(e),这个方法打印出异常,并且输出在哪里出现的异常 + //e.printStackTrace()鍑芥暟鍔熻兘鏄姏鍑哄紓甯革紝 杩樺皢鏄剧ず鍑烘洿娣辩殑璋冪敤淇℃伅 + //System.out.println(e)锛岃繖涓柟娉曟墦鍗板嚭寮傚父锛屽苟涓旇緭鍑哄湪鍝噷鍑虹幇鐨勫紓甯 } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -151,57 +151,57 @@ public class AlarmAlertActivity extends Activity implements OnClickListener, OnD private void showActionDialog() { AlertDialog.Builder dialog = new AlertDialog.Builder(this); - //AlertDialog的构造方法全部是Protected的 - //所以不能直接通过new一个AlertDialog来创建出一个AlertDialog。 - //要创建一个AlertDialog,就要用到AlertDialog.Builder中的create()方法 - //如这里的dialog就是新建了一个AlertDialog + //AlertDialog鐨勬瀯閫犳柟娉曞叏閮ㄦ槸Protected鐨 + //鎵浠ヤ笉鑳界洿鎺ラ氳繃new涓涓狝lertDialog鏉ュ垱寤哄嚭涓涓狝lertDialog銆 + //瑕佸垱寤轰竴涓狝lertDialog锛屽氨瑕佺敤鍒癆lertDialog.Builder涓殑create()鏂规硶 + //濡傝繖閲岀殑dialog灏辨槸鏂板缓浜嗕竴涓狝lertDialog dialog.setTitle(R.string.app_name); - //为对话框设置标题 + //涓哄璇濇璁剧疆鏍囬 dialog.setMessage(mSnippet); - //为对话框设置内容 + //涓哄璇濇璁剧疆鍐呭 dialog.setPositiveButton(R.string.notealert_ok, this); - //给对话框添加"Yes"按钮 + //缁欏璇濇娣诲姞"Yes"鎸夐挳 if (isScreenOn()) { dialog.setNegativeButton(R.string.notealert_enter, this); - }//对话框添加"No"按钮 + }//瀵硅瘽妗嗘坊鍔"No"鎸夐挳 dialog.show().setOnDismissListener(this); } public void onClick(DialogInterface dialog, int which) { switch (which) { - //用which来选择click后下一步的操作 + //鐢╳hich鏉ラ夋嫨click鍚庝笅涓姝ョ殑鎿嶄綔 case DialogInterface.BUTTON_NEGATIVE: - //这是取消操作 + //杩欐槸鍙栨秷鎿嶄綔 Intent intent = new Intent(this, NoteEditActivity.class); - //实现两个类间的数据传输 + //瀹炵幇涓や釜绫婚棿鐨勬暟鎹紶杈 intent.setAction(Intent.ACTION_VIEW); - //设置动作属性 + //璁剧疆鍔ㄤ綔灞炴 intent.putExtra(Intent.EXTRA_UID, mNoteId); - //实现key-value对 - //EXTRA_UID为key;mNoteId为键 + //瀹炵幇key-value瀵 + //EXTRA_UID涓簁ey锛沵NoteId涓洪敭 startActivity(intent); - //开始动作 + //寮濮嬪姩浣 break; default: - //这是确定操作 + //杩欐槸纭畾鎿嶄綔 break; } } public void onDismiss(DialogInterface dialog) { - //忽略 + //蹇界暐 stopAlarmSound(); - //停止闹钟声音 + //鍋滄闂归挓澹伴煶 finish(); - //完成该动作 + //瀹屾垚璇ュ姩浣 } private void stopAlarmSound() { if (mPlayer != null) { mPlayer.stop(); - //停止播放 + //鍋滄鎾斁 mPlayer.release(); - //释放MediaPlayer对象 + //閲婃斁MediaPlayer瀵硅薄 mPlayer = null; } } diff --git a/src/Notes-master/src/net/micode/notes/ui/AlarmInitReceiver.java b/src/Notes-master/src/net/micode/notes/ui/AlarmInitReceiver.java index 16951b9..fa75f11 100644 --- a/src/Notes-master/src/net/micode/notes/ui/AlarmInitReceiver.java +++ b/src/Notes-master/src/net/micode/notes/ui/AlarmInitReceiver.java @@ -34,22 +34,22 @@ public class AlarmInitReceiver extends BroadcastReceiver { NoteColumns.ID, NoteColumns.ALERTED_DATE }; - //对数据库的操作,调用标签ID和闹钟时间 + //瀵规暟鎹簱鐨勬搷浣滐紝璋冪敤鏍囩ID鍜岄椆閽熸椂闂 private static final int COLUMN_ID = 0; private static final int COLUMN_ALERTED_DATE = 1; @Override public void onReceive(Context context, Intent intent) { long currentDate = System.currentTimeMillis(); - //System.currentTimeMillis()产生一个当前的毫秒 - //这个毫秒其实就是自1970年1月1日0时起的毫秒数 + //System.currentTimeMillis()浜х敓涓涓綋鍓嶇殑姣 + //杩欎釜姣鍏跺疄灏辨槸鑷1970骞1鏈1鏃0鏃惰捣鐨勬绉掓暟 Cursor c = context.getContentResolver().query(Notes.CONTENT_NOTE_URI, PROJECTION, NoteColumns.ALERTED_DATE + ">? AND " + NoteColumns.TYPE + "=" + Notes.TYPE_NOTE, new String[] { String.valueOf(currentDate) }, - //将long变量currentDate转化为字符串 + //灏唋ong鍙橀噺currentDate杞寲涓哄瓧绗︿覆 null); - //Cursor在这里的作用是通过查找数据库中的标签内容,找到和当前系统时间相等的标签 + //Cursor鍦ㄨ繖閲岀殑浣滅敤鏄氳繃鏌ユ壘鏁版嵁搴撲腑鐨勬爣绛惧唴瀹癸紝鎵惧埌鍜屽綋鍓嶇郴缁熸椂闂寸浉绛夌殑鏍囩 if (c != null) { if (c.moveToFirst()) { @@ -65,8 +65,8 @@ public class AlarmInitReceiver extends BroadcastReceiver { } c.close(); } - //然而通过网上查找资料发现,对于闹钟机制的启动,通常需要上面的几个步骤 - //如新建Intent、PendingIntent以及AlarmManager等 - //这里就是根据数据库里的闹钟时间创建一个闹钟机制 + //鐒惰岄氳繃缃戜笂鏌ユ壘璧勬枡鍙戠幇锛屽浜庨椆閽熸満鍒剁殑鍚姩锛岄氬父闇瑕佷笂闈㈢殑鍑犱釜姝ラ + //濡傛柊寤篒ntent銆丳endingIntent浠ュ強AlarmManager绛 + //杩欓噷灏辨槸鏍规嵁鏁版嵁搴撻噷鐨勯椆閽熸椂闂村垱寤轰竴涓椆閽熸満鍒 } } \ No newline at end of file