From 9c5190d76ad55f72ad59a0c9f2f69a51acc4eb62 Mon Sep 17 00:00:00 2001 From: xuningshuo <2105361900@qq.com> Date: Tue, 27 Jan 2026 01:13:54 +0800 Subject: [PATCH 1/9] =?UTF-8?q?=E4=BF=AE=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AndroidManifest.xml | 132 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 AndroidManifest.xml diff --git a/AndroidManifest.xml b/AndroidManifest.xml new file mode 100644 index 0000000..46c99d9 --- /dev/null +++ b/AndroidManifest.xml @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + > + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file -- 2.34.1 From 911d904eaa0ba094d972ee225e05ff5c4e40fd45 Mon Sep 17 00:00:00 2001 From: xuningshuo <2105361900@qq.com> Date: Tue, 27 Jan 2026 01:14:58 +0800 Subject: [PATCH 2/9] =?UTF-8?q?=E4=BF=AE=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- java/net/micode/notes/MainActivity.java | 24 + java/net/micode/notes/data/Contact.java | 93 ++ java/net/micode/notes/data/Notes.java | 295 +++++ .../notes/data/NotesDatabaseHelper.java | 424 +++++++ java/net/micode/notes/data/NotesProvider.java | 384 ++++++ .../net/micode/notes/gtask/data/MetaData.java | 82 ++ java/net/micode/notes/gtask/data/Node.java | 101 ++ java/net/micode/notes/gtask/data/SqlData.java | 189 +++ java/net/micode/notes/gtask/data/SqlNote.java | 505 ++++++++ java/net/micode/notes/gtask/data/Task.java | 351 ++++++ .../net/micode/notes/gtask/data/TaskList.java | 343 ++++++ .../exception/ActionFailureException.java | 33 + .../exception/NetworkFailureException.java | 33 + .../notes/gtask/remote/GTaskASyncTask.java | 143 +++ .../notes/gtask/remote/GTaskClient.java | 585 +++++++++ .../notes/gtask/remote/GTaskManager.java | 800 ++++++++++++ .../notes/gtask/remote/GTaskSyncService.java | 128 ++ java/net/micode/notes/model/Note.java | 253 ++++ java/net/micode/notes/model/WorkingNote.java | 368 ++++++ java/net/micode/notes/tool/BackupUtils.java | 346 ++++++ java/net/micode/notes/tool/DataUtils.java | 295 +++++ .../micode/notes/tool/GTaskStringUtils.java | 113 ++ .../net/micode/notes/tool/ResourceParser.java | 261 ++++ .../micode/notes/ui/AlarmAlertActivity.java | 208 ++++ .../micode/notes/ui/AlarmInitReceiver.java | 72 ++ java/net/micode/notes/ui/AlarmReceiver.java | 35 + java/net/micode/notes/ui/DateTimePicker.java | 508 ++++++++ .../micode/notes/ui/DateTimePickerDialog.java | 103 ++ java/net/micode/notes/ui/DropdownMenu.java | 65 + .../micode/notes/ui/FoldersListAdapter.java | 86 ++ .../net/micode/notes/ui/NoteEditActivity.java | 1068 +++++++++++++++++ java/net/micode/notes/ui/NoteEditText.java | 278 +++++ java/net/micode/notes/ui/NoteItemData.java | 214 ++++ .../micode/notes/ui/NotesListActivity.java | 1002 ++++++++++++++++ .../net/micode/notes/ui/NotesListAdapter.java | 257 ++++ java/net/micode/notes/ui/NotesListItem.java | 116 ++ .../notes/ui/NotesPreferenceActivity.java | 516 ++++++++ .../notes/widget/NoteWidgetProvider.java | 132 ++ .../notes/widget/NoteWidgetProvider_2x.java | 47 + .../notes/widget/NoteWidgetProvider_4x.java | 46 + 40 files changed, 10902 insertions(+) create mode 100644 java/net/micode/notes/MainActivity.java create mode 100644 java/net/micode/notes/data/Contact.java create mode 100644 java/net/micode/notes/data/Notes.java create mode 100644 java/net/micode/notes/data/NotesDatabaseHelper.java create mode 100644 java/net/micode/notes/data/NotesProvider.java create mode 100644 java/net/micode/notes/gtask/data/MetaData.java create mode 100644 java/net/micode/notes/gtask/data/Node.java create mode 100644 java/net/micode/notes/gtask/data/SqlData.java create mode 100644 java/net/micode/notes/gtask/data/SqlNote.java create mode 100644 java/net/micode/notes/gtask/data/Task.java create mode 100644 java/net/micode/notes/gtask/data/TaskList.java create mode 100644 java/net/micode/notes/gtask/exception/ActionFailureException.java create mode 100644 java/net/micode/notes/gtask/exception/NetworkFailureException.java create mode 100644 java/net/micode/notes/gtask/remote/GTaskASyncTask.java create mode 100644 java/net/micode/notes/gtask/remote/GTaskClient.java create mode 100644 java/net/micode/notes/gtask/remote/GTaskManager.java create mode 100644 java/net/micode/notes/gtask/remote/GTaskSyncService.java create mode 100644 java/net/micode/notes/model/Note.java create mode 100644 java/net/micode/notes/model/WorkingNote.java create mode 100644 java/net/micode/notes/tool/BackupUtils.java create mode 100644 java/net/micode/notes/tool/DataUtils.java create mode 100644 java/net/micode/notes/tool/GTaskStringUtils.java create mode 100644 java/net/micode/notes/tool/ResourceParser.java create mode 100644 java/net/micode/notes/ui/AlarmAlertActivity.java create mode 100644 java/net/micode/notes/ui/AlarmInitReceiver.java create mode 100644 java/net/micode/notes/ui/AlarmReceiver.java create mode 100644 java/net/micode/notes/ui/DateTimePicker.java create mode 100644 java/net/micode/notes/ui/DateTimePickerDialog.java create mode 100644 java/net/micode/notes/ui/DropdownMenu.java create mode 100644 java/net/micode/notes/ui/FoldersListAdapter.java create mode 100644 java/net/micode/notes/ui/NoteEditActivity.java create mode 100644 java/net/micode/notes/ui/NoteEditText.java create mode 100644 java/net/micode/notes/ui/NoteItemData.java create mode 100644 java/net/micode/notes/ui/NotesListActivity.java create mode 100644 java/net/micode/notes/ui/NotesListAdapter.java create mode 100644 java/net/micode/notes/ui/NotesListItem.java create mode 100644 java/net/micode/notes/ui/NotesPreferenceActivity.java create mode 100644 java/net/micode/notes/widget/NoteWidgetProvider.java create mode 100644 java/net/micode/notes/widget/NoteWidgetProvider_2x.java create mode 100644 java/net/micode/notes/widget/NoteWidgetProvider_4x.java diff --git a/java/net/micode/notes/MainActivity.java b/java/net/micode/notes/MainActivity.java new file mode 100644 index 0000000..8091753 --- /dev/null +++ b/java/net/micode/notes/MainActivity.java @@ -0,0 +1,24 @@ +package net.micode.notes; + +import android.os.Bundle; + +import androidx.activity.EdgeToEdge; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; + +public class MainActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + EdgeToEdge.enable(this); + setContentView(R.layout.activity_main); + ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> { + Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); + return insets; + }); + } +} \ No newline at end of file diff --git a/java/net/micode/notes/data/Contact.java b/java/net/micode/notes/data/Contact.java new file mode 100644 index 0000000..f78cf70 --- /dev/null +++ b/java/net/micode/notes/data/Contact.java @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.data; + +import android.content.Context; +import android.database.Cursor; +import android.provider.ContactsContract.CommonDataKinds.Phone; +import android.provider.ContactsContract.Data; +import android.telephony.PhoneNumberUtils; +import android.util.Log; + +import java.util.HashMap; + +/** + * 联系人工具类 + * 用于根据电话号码获取联系人姓名,并提供缓存功能提高查询效率 + */ +public class Contact { + // 联系人缓存,存储电话号码与联系人姓名的映射关系 + private static HashMap sContactCache; + // 日志标签 + private static final String TAG = "Contact"; + + // 来电者ID查询条件 + 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 = '+')"; + + /** + * 根据电话号码获取联系人姓名 + * @param context 上下文对象 + * @param phoneNumber 电话号码 + * @return 联系人姓名,若未找到则返回null + */ + public static String getContact(Context context, String phoneNumber) { + // 初始化缓存 + if(sContactCache == null) { + sContactCache = new HashMap(); + } + + // 先从缓存中查找,若存在则直接返回 + if(sContactCache.containsKey(phoneNumber)) { + return sContactCache.get(phoneNumber); + } + + // 构建查询条件,替换min_match的值 + String selection = CALLER_ID_SELECTION.replace("+", + PhoneNumberUtils.toCallerIDMinMatch(phoneNumber)); + // 查询联系人数据 + Cursor cursor = context.getContentResolver().query( + Data.CONTENT_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.e(TAG, " Cursor get string error " + e.toString()); + return null; + } finally { + // 关闭游标 + cursor.close(); + } + } else { + Log.d(TAG, "No contact matched with number:" + phoneNumber); + return null; + } + } +} \ No newline at end of file diff --git a/java/net/micode/notes/data/Notes.java b/java/net/micode/notes/data/Notes.java new file mode 100644 index 0000000..1471ca3 --- /dev/null +++ b/java/net/micode/notes/data/Notes.java @@ -0,0 +1,295 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.data; + +import android.net.Uri; + +/** + * 笔记相关常量和数据结构定义类 + * 包含笔记的类型、系统文件夹ID、Uri等常量定义,以及笔记和数据的列定义 + */ +public class Notes { + // 内容提供者的授权者 + public static final String AUTHORITY = "micode_notes"; + // 日志标签 + public static final String TAG = "Notes"; + // 笔记类型常量 + public static final int TYPE_NOTE = 0; // 普通笔记类型 + public static final int TYPE_FOLDER = 1; // 文件夹类型 + public static final int TYPE_SYSTEM = 2; // 系统类型 + + /** + * 以下是系统文件夹的标识符 + * {@link Notes#ID_ROOT_FOLDER } 是默认文件夹 + * {@link Notes#ID_TEMPARAY_FOLDER } 是用于存放不属于任何文件夹的笔记 + * {@link Notes#ID_CALL_RECORD_FOLDER} 是用于存储通话记录 + */ + // 系统文件夹ID常量 + 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; // 回收站文件夹 + + // Intent额外数据常量 + 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"; // 背景颜色ID + public static final String INTENT_EXTRA_WIDGET_ID = "net.micode.notes.widget_id"; // 小组件ID + public static final String INTENT_EXTRA_WIDGET_TYPE = "net.micode.notes.widget_type"; // 小组件类型 + public static final String INTENT_EXTRA_FOLDER_ID = "net.micode.notes.folder_id"; // 文件夹ID + public static final String INTENT_EXTRA_CALL_DATE = "net.micode.notes.call_date"; // 通话日期 + + // 小组件类型常量 + public static final int TYPE_WIDGET_INVALIDE = -1; // 无效小组件 + public static final int TYPE_WIDGET_2X = 0; // 2X大小的小组件 + public static final int TYPE_WIDGET_4X = 1; // 4X大小的小组件 + + /** + * 数据类型常量类 + */ + public static class DataConstants { + public static final String NOTE = TextNote.CONTENT_ITEM_TYPE; // 文本笔记类型 + public static final String CALL_NOTE = CallNote.CONTENT_ITEM_TYPE; // 通话笔记类型 + } + + /** + * 查询所有笔记和文件夹的Uri + */ + public static final Uri CONTENT_NOTE_URI = Uri.parse("content://" + AUTHORITY + "/note"); + + /** + * 查询数据的Uri + */ + public static final Uri CONTENT_DATA_URI = Uri.parse("content://" + AUTHORITY + "/data"); + + /** + * 笔记表的列定义接口 + */ + public interface NoteColumns { + /** + * 行的唯一ID + *

类型: INTEGER (long)

+ */ + public static final String ID = "_id"; + + /** + * 笔记或文件夹的父级ID + *

类型: INTEGER (long)

+ */ + 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)

+ */ + public static final String WIDGET_ID = "widget_id"; + + /** + * 笔记的小组件类型 + *

类型: INTEGER (long)

+ */ + public static final String WIDGET_TYPE = "widget_type"; + + /** + * 笔记的背景颜色ID + *

类型: INTEGER (long)

+ */ + 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)

+ */ + public static final String SYNC_ID = "sync_id"; + + /** + * 本地是否修改的标志 + *

类型: INTEGER

+ */ + public static final String LOCAL_MODIFIED = "local_modified"; + + /** + * 移动到临时文件夹之前的原始父级ID + *

类型 : INTEGER

+ */ + public static final String ORIGIN_PARENT_ID = "origin_parent_id"; + + /** + * gtask ID + *

类型 : TEXT

+ */ + public static final String GTASK_ID = "gtask_id"; + + /** + * 版本号 + *

类型 : INTEGER (long)

+ */ + public static final String VERSION = "version"; + } + + /** + * 数据表的列定义接口 + */ + public interface DataColumns { + /** + * 行的唯一ID + *

类型: INTEGER (long)

+ */ + public static final String ID = "_id"; + + /** + * 此行所代表项目的MIME类型 + *

类型: Text

+ */ + public static final String MIME_TYPE = "mime_type"; + + /** + * 此数据所属笔记的引用ID + *

类型: INTEGER (long)

+ */ + 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"; + + + /** + * 通用数据列,用于整数数据类型 + *

类型: INTEGER

+ */ + public static final String DATA1 = "data1"; + + /** + * 通用数据列,用于整数数据类型 + *

类型: INTEGER

+ */ + public static final String DATA2 = "data2"; + + /** + * 通用数据列,用于文本数据类型 + *

类型: TEXT

+ */ + public static final String DATA3 = "data3"; + + /** + * 通用数据列,用于文本数据类型 + *

类型: TEXT

+ */ + public static final String DATA4 = "data4"; + + /** + * 通用数据列,用于文本数据类型 + *

类型: TEXT

+ */ + public static final String DATA5 = "data5"; + } + + /** + * 文本笔记类,实现DataColumns接口 + */ + public static final class TextNote implements DataColumns { + /** + * 指示文本是否为 checklist 模式的标志 + *

类型: Integer 1:check list模式 0:普通模式

+ */ + public static final String MODE = DATA1; + + public static final int MODE_CHECK_LIST = 1; // checklist模式 + + public static final String CONTENT_TYPE = "vnd.android.cursor.dir/text_note"; // 文本笔记集合的MIME类型 + public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/text_note"; // 单个文本笔记的MIME类型 + public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/text_note"); // 文本笔记的Uri + } + + /** + * 通话笔记类,实现DataColumns接口 + */ + public static final class CallNote implements DataColumns { + /** + * 此记录的通话日期 + *

类型: INTEGER (long)

+ */ + public static final String CALL_DATE = DATA1; + + /** + * 此记录的电话号码 + *

类型: TEXT

+ */ + public static final String PHONE_NUMBER = DATA3; + + public static final String CONTENT_TYPE = "vnd.android.cursor.dir/call_note"; // 通话笔记集合的MIME类型 + public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/call_note"; // 单个通话笔记的MIME类型 + public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/call_note"); // 通话笔记的Uri + } +} \ No newline at end of file diff --git a/java/net/micode/notes/data/NotesDatabaseHelper.java b/java/net/micode/notes/data/NotesDatabaseHelper.java new file mode 100644 index 0000000..b1a3f93 --- /dev/null +++ b/java/net/micode/notes/data/NotesDatabaseHelper.java @@ -0,0 +1,424 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.data; + +import android.content.ContentValues; +import android.content.Context; +import android.database.sqlite.SQLiteDatabase; +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; + +/** + * 笔记数据库帮助类,继承自SQLiteOpenHelper + * 负责数据库的创建、升级以及表和触发器的管理 + */ +public class NotesDatabaseHelper extends SQLiteOpenHelper { + // 数据库名称 + private static final String DB_NAME = "note.db"; + // 数据库版本 + private static final int DB_VERSION = 4; + + /** + * 表名常量接口 + */ + public interface TABLE { + public static final String NOTE = "note"; // 笔记表 + public static final String DATA = "data"; // 数据表 + } + + // 日志标签 + private static final String TAG = "NotesDatabaseHelper"; + + // 单例实例 + private static NotesDatabaseHelper mInstance; + + // 创建笔记表的SQL语句 + private static final String CREATE_NOTE_TABLE_SQL = + "CREATE TABLE " + TABLE.NOTE + "(" + + NoteColumns.ID + " INTEGER PRIMARY KEY," + + NoteColumns.PARENT_ID + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.ALERTED_DATE + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.BG_COLOR_ID + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.CREATED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + + NoteColumns.HAS_ATTACHMENT + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.MODIFIED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + + NoteColumns.NOTES_COUNT + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.SNIPPET + " TEXT NOT NULL DEFAULT ''," + + NoteColumns.TYPE + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.WIDGET_ID + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.WIDGET_TYPE + " INTEGER NOT NULL DEFAULT -1," + + NoteColumns.SYNC_ID + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.LOCAL_MODIFIED + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.ORIGIN_PARENT_ID + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.GTASK_ID + " TEXT NOT NULL DEFAULT ''," + + NoteColumns.VERSION + " INTEGER NOT NULL DEFAULT 0" + + ")"; + + // 创建数据表的SQL语句 + private static final String CREATE_DATA_TABLE_SQL = + "CREATE TABLE " + TABLE.DATA + "(" + + DataColumns.ID + " INTEGER PRIMARY KEY," + + DataColumns.MIME_TYPE + " TEXT NOT NULL," + + DataColumns.NOTE_ID + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.CREATED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + + NoteColumns.MODIFIED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + + DataColumns.CONTENT + " TEXT NOT NULL DEFAULT ''," + + DataColumns.DATA1 + " INTEGER," + + DataColumns.DATA2 + " INTEGER," + + DataColumns.DATA3 + " TEXT NOT NULL DEFAULT ''," + + DataColumns.DATA4 + " TEXT NOT NULL DEFAULT ''," + + DataColumns.DATA5 + " TEXT NOT NULL DEFAULT ''" + + ")"; + + // 为data表的note_id列创建索引的SQL语句 + private static final String CREATE_DATA_NOTE_ID_INDEX_SQL = + "CREATE INDEX IF NOT EXISTS note_id_index ON " + + TABLE.DATA + "(" + DataColumns.NOTE_ID + ");"; + + /** + * 当将笔记移动到文件夹时,增加文件夹的笔记计数 + */ + private static final String NOTE_INCREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER = + "CREATE TRIGGER increase_folder_count_on_update "+ + " AFTER UPDATE OF " + NoteColumns.PARENT_ID + " ON " + TABLE.NOTE + + " BEGIN " + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + " + 1" + + " WHERE " + NoteColumns.ID + "=new." + NoteColumns.PARENT_ID + ";" + + " END"; + + /** + * 当将笔记从文件夹中移出时,减少文件夹的笔记计数 + */ + private static final String NOTE_DECREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER = + "CREATE TRIGGER decrease_folder_count_on_update " + + " AFTER UPDATE OF " + NoteColumns.PARENT_ID + " ON " + TABLE.NOTE + + " BEGIN " + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + "-1" + + " WHERE " + NoteColumns.ID + "=old." + NoteColumns.PARENT_ID + + " AND " + NoteColumns.NOTES_COUNT + ">0" + ";" + + " END"; + + /** + * 当向文件夹中插入新笔记时,增加文件夹的笔记计数 + */ + private static final String NOTE_INCREASE_FOLDER_COUNT_ON_INSERT_TRIGGER = + "CREATE TRIGGER increase_folder_count_on_insert " + + " AFTER INSERT ON " + TABLE.NOTE + + " BEGIN " + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + " + 1" + + " WHERE " + NoteColumns.ID + "=new." + NoteColumns.PARENT_ID + ";" + + " END"; + + /** + * 当从文件夹中删除笔记时,减少文件夹的笔记计数 + */ + private static final String NOTE_DECREASE_FOLDER_COUNT_ON_DELETE_TRIGGER = + "CREATE TRIGGER decrease_folder_count_on_delete " + + " AFTER DELETE ON " + TABLE.NOTE + + " BEGIN " + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + "-1" + + " WHERE " + NoteColumns.ID + "=old." + NoteColumns.PARENT_ID + + " AND " + NoteColumns.NOTES_COUNT + ">0;" + + " END"; + + /** + * 当插入类型为{@link DataConstants#NOTE}的数据时,更新笔记内容 + */ + private static final String DATA_UPDATE_NOTE_CONTENT_ON_INSERT_TRIGGER = + "CREATE TRIGGER update_note_content_on_insert " + + " AFTER INSERT ON " + TABLE.DATA + + " WHEN new." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" + + " BEGIN" + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.SNIPPET + "=new." + DataColumns.CONTENT + + " WHERE " + NoteColumns.ID + "=new." + DataColumns.NOTE_ID + ";" + + " END"; + + /** + * 当类型为{@link DataConstants#NOTE}的数据发生变化时,更新笔记内容 + */ + private static final String DATA_UPDATE_NOTE_CONTENT_ON_UPDATE_TRIGGER = + "CREATE TRIGGER update_note_content_on_update " + + " AFTER UPDATE ON " + TABLE.DATA + + " WHEN old." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" + + " BEGIN" + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.SNIPPET + "=new." + DataColumns.CONTENT + + " WHERE " + NoteColumns.ID + "=new." + DataColumns.NOTE_ID + ";" + + " END"; + + /** + * 当类型为{@link DataConstants#NOTE}的数据被删除时,更新笔记内容 + */ + private static final String DATA_UPDATE_NOTE_CONTENT_ON_DELETE_TRIGGER = + "CREATE TRIGGER update_note_content_on_delete " + + " AFTER delete ON " + TABLE.DATA + + " WHEN old." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" + + " BEGIN" + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.SNIPPET + "=''" + + " WHERE " + NoteColumns.ID + "=old." + DataColumns.NOTE_ID + ";" + + " END"; + + /** + * 当笔记被删除时,删除其所属的数据 + */ + private static final String NOTE_DELETE_DATA_ON_DELETE_TRIGGER = + "CREATE TRIGGER delete_data_on_delete " + + " AFTER DELETE ON " + TABLE.NOTE + + " BEGIN" + + " DELETE FROM " + TABLE.DATA + + " WHERE " + DataColumns.NOTE_ID + "=old." + NoteColumns.ID + ";" + + " END"; + + /** + * 当文件夹被删除时,删除其包含的笔记 + */ + private static final String FOLDER_DELETE_NOTES_ON_DELETE_TRIGGER = + "CREATE TRIGGER folder_delete_notes_on_delete " + + " AFTER DELETE ON " + TABLE.NOTE + + " BEGIN" + + " DELETE FROM " + TABLE.NOTE + + " WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" + + " END"; + + /** + * 当文件夹被移到回收站时,移动其包含的笔记到回收站 + */ + private static final String FOLDER_MOVE_NOTES_ON_TRASH_TRIGGER = + "CREATE TRIGGER folder_move_notes_on_trash " + + " AFTER UPDATE ON " + TABLE.NOTE + + " WHEN new." + NoteColumns.PARENT_ID + "=" + Notes.ID_TRASH_FOLER + + " BEGIN" + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.PARENT_ID + "=" + Notes.ID_TRASH_FOLER + + " WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" + + " END"; + + /** + * 构造方法 + * @param context 上下文对象 + */ + public NotesDatabaseHelper(Context context) { + super(context, DB_NAME, null, DB_VERSION); + } + + /** + * 创建笔记表 + * @param db 数据库实例 + */ + public void createNoteTable(SQLiteDatabase db) { + db.execSQL(CREATE_NOTE_TABLE_SQL); + reCreateNoteTableTriggers(db); + createSystemFolder(db); + Log.d(TAG, "note table has been created"); + } + + /** + * 重新创建笔记表的触发器 + * @param db 数据库实例 + */ + private void reCreateNoteTableTriggers(SQLiteDatabase db) { + db.execSQL("DROP TRIGGER IF EXISTS increase_folder_count_on_update"); + db.execSQL("DROP TRIGGER IF EXISTS decrease_folder_count_on_update"); + db.execSQL("DROP TRIGGER IF EXISTS decrease_folder_count_on_delete"); + db.execSQL("DROP TRIGGER IF EXISTS delete_data_on_delete"); + db.execSQL("DROP TRIGGER IF EXISTS increase_folder_count_on_insert"); + db.execSQL("DROP TRIGGER IF EXISTS folder_delete_notes_on_delete"); + db.execSQL("DROP TRIGGER IF EXISTS folder_move_notes_on_trash"); + + db.execSQL(NOTE_INCREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER); + db.execSQL(NOTE_DECREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER); + db.execSQL(NOTE_DECREASE_FOLDER_COUNT_ON_DELETE_TRIGGER); + db.execSQL(NOTE_DELETE_DATA_ON_DELETE_TRIGGER); + 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); + } + + /** + * 创建系统文件夹 + * @param db 数据库实例 + */ + private void createSystemFolder(SQLiteDatabase db) { + ContentValues values = new ContentValues(); + + /** + * 用于存储通话笔记的通话记录文件夹 + */ + 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); + values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); + db.insert(TABLE.NOTE, null, values); + + /** + * 用于移动笔记的临时文件夹 + */ + values.clear(); + values.put(NoteColumns.ID, Notes.ID_TEMPARAY_FOLDER); + values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); + 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); + } + + /** + * 创建数据表 + * @param db 数据库实例 + */ + 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"); + } + + /** + * 重新创建数据表的触发器 + * @param db 数据库实例 + */ + private void reCreateDataTableTriggers(SQLiteDatabase db) { + db.execSQL("DROP TRIGGER IF EXISTS update_note_content_on_insert"); + db.execSQL("DROP TRIGGER IF EXISTS update_note_content_on_update"); + db.execSQL("DROP TRIGGER IF EXISTS update_note_content_on_delete"); + + 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); + } + + /** + * 获取单例实例 + * @param context 上下文对象 + * @return NotesDatabaseHelper实例 + */ + static synchronized NotesDatabaseHelper getInstance(Context context) { + if (mInstance == null) { + mInstance = new NotesDatabaseHelper(context); + } + return mInstance; + } + + /** + * 数据库创建时调用,创建表和初始数据 + * @param db 数据库实例 + */ + @Override + public void onCreate(SQLiteDatabase db) { + createNoteTable(db); + createDataTable(db); + } + + /** + * 数据库升级时调用 + * @param db 数据库实例 + * @param oldVersion 旧版本号 + * @param newVersion 新版本号 + */ + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + boolean reCreateTriggers = false; + boolean skipV2 = false; + + if (oldVersion == 1) { + upgradeToV2(db); + skipV2 = true; // 此升级包含从v2到v3的升级 + oldVersion++; + } + + if (oldVersion == 2 && !skipV2) { + upgradeToV3(db); + reCreateTriggers = true; + oldVersion++; + } + + if (oldVersion == 3) { + upgradeToV4(db); + oldVersion++; + } + + if (reCreateTriggers) { + reCreateNoteTableTriggers(db); + reCreateDataTableTriggers(db); + } + + if (oldVersion != newVersion) { + throw new IllegalStateException("Upgrade notes database to version " + newVersion + + "fails"); + } + } + + /** + * 升级数据库到版本2 + * @param db 数据库实例 + */ + 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); + } + + /** + * 升级数据库到版本3 + * @param db 数据库实例 + */ + private void upgradeToV3(SQLiteDatabase db) { + // 删除未使用的触发器 + db.execSQL("DROP TRIGGER IF EXISTS update_note_modified_date_on_insert"); + db.execSQL("DROP TRIGGER IF EXISTS update_note_modified_date_on_delete"); + db.execSQL("DROP TRIGGER IF EXISTS update_note_modified_date_on_update"); + // 添加gtask id列 + db.execSQL("ALTER TABLE " + TABLE.NOTE + " ADD COLUMN " + NoteColumns.GTASK_ID + + " TEXT NOT NULL DEFAULT ''"); + // 添加回收站系统文件夹 + ContentValues values = new ContentValues(); + values.put(NoteColumns.ID, Notes.ID_TRASH_FOLER); + values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); + db.insert(TABLE.NOTE, null, values); + } + + /** + * 升级数据库到版本4 + * @param db 数据库实例 + */ + private void upgradeToV4(SQLiteDatabase db) { + db.execSQL("ALTER TABLE " + TABLE.NOTE + " ADD COLUMN " + NoteColumns.VERSION + + " INTEGER NOT NULL DEFAULT 0"); + } +} \ No newline at end of file diff --git a/java/net/micode/notes/data/NotesProvider.java b/java/net/micode/notes/data/NotesProvider.java new file mode 100644 index 0000000..84cbffd --- /dev/null +++ b/java/net/micode/notes/data/NotesProvider.java @@ -0,0 +1,384 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.data; + +import android.app.SearchManager; +import android.content.ContentProvider; +import android.content.ContentUris; +import android.content.ContentValues; +import android.content.Intent; +import android.content.UriMatcher; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.net.Uri; +import android.text.TextUtils; +import android.util.Log; + +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 + * 负责处理笔记数据的CRUD操作,通过ContentProvider对外提供数据访问接口 + */ +public class NotesProvider extends ContentProvider { + // Uri匹配器,用于匹配不同的Uri请求 + private static final UriMatcher mMatcher; + + // 数据库帮助类实例 + private NotesDatabaseHelper mHelper; + + // 日志标签 + private static final String TAG = "NotesProvider"; + + // Uri匹配器对应的匹配码 + private static final int URI_NOTE = 1; // 匹配note集合的Uri + private static final int URI_NOTE_ITEM = 2; // 匹配单个note的Uri + private static final int URI_DATA = 3; // 匹配data集合的Uri + private static final int URI_DATA_ITEM = 4; // 匹配单个data的Uri + private static final int URI_SEARCH = 5; // 匹配搜索的Uri + private static final int URI_SEARCH_SUGGEST = 6; // 匹配搜索建议的Uri + + // 静态代码块,初始化UriMatcher并添加Uri匹配规则 + static { + mMatcher = new UriMatcher(UriMatcher.NO_MATCH); + mMatcher.addURI(Notes.AUTHORITY, "note", URI_NOTE); + mMatcher.addURI(Notes.AUTHORITY, "note/#", URI_NOTE_ITEM); + mMatcher.addURI(Notes.AUTHORITY, "data", URI_DATA); + mMatcher.addURI(Notes.AUTHORITY, "data/#", URI_DATA_ITEM); + mMatcher.addURI(Notes.AUTHORITY, "search", URI_SEARCH); + mMatcher.addURI(Notes.AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY, URI_SEARCH_SUGGEST); + mMatcher.addURI(Notes.AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY + "/*", URI_SEARCH_SUGGEST); + } + + /** + * x'0A'代表sqlite中的'\n'字符。对于搜索结果中的标题和内容, + * 我们将去除'\n'和空白字符以显示更多信息。 + */ + // 笔记搜索的投影列,定义了搜索结果需要返回的列 + 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 + "," + + "TRIM(REPLACE(" + NoteColumns.SNIPPET + ", x'0A','')) AS " + SearchManager.SUGGEST_COLUMN_TEXT_2 + "," + + 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; + + // 笔记片段搜索查询语句 + private static String NOTES_SNIPPET_SEARCH_QUERY = "SELECT " + NOTES_SEARCH_PROJECTION + + " FROM " + TABLE.NOTE + + " WHERE " + NoteColumns.SNIPPET + " LIKE ?" + + " AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER + + " AND " + NoteColumns.TYPE + "=" + Notes.TYPE_NOTE; + + /** + * 初始化ContentProvider,获取数据库帮助类实例 + * @return 初始化成功返回true + */ + @Override + public boolean onCreate() { + mHelper = NotesDatabaseHelper.getInstance(getContext()); + return true; + } + + /** + * 处理查询请求 + * @param uri 查询的Uri + * @param projection 需要返回的列 + * @param selection 查询条件 + * @param selectionArgs 查询条件参数 + * @param sortOrder 排序方式 + * @return 查询结果的Cursor + */ + @Override + public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, + String sortOrder) { + Cursor c = null; + SQLiteDatabase db = mHelper.getReadableDatabase(); + String id = null; + // 根据Uri匹配结果执行不同的查询操作 + switch (mMatcher.match(uri)) { + case URI_NOTE: + // 查询note表的所有数据 + c = db.query(TABLE.NOTE, projection, selection, selectionArgs, null, null, + sortOrder); + break; + case URI_NOTE_ITEM: + // 查询note表中指定id的数据 + id = uri.getPathSegments().get(1); + c = db.query(TABLE.NOTE, projection, NoteColumns.ID + "=" + id + + parseSelection(selection), selectionArgs, null, null, sortOrder); + break; + case URI_DATA: + // 查询data表的所有数据 + c = db.query(TABLE.DATA, projection, selection, selectionArgs, null, null, + sortOrder); + break; + case URI_DATA_ITEM: + // 查询data表中指定id的数据 + id = uri.getPathSegments().get(1); + c = db.query(TABLE.DATA, projection, DataColumns.ID + "=" + id + + parseSelection(selection), selectionArgs, null, null, sortOrder); + break; + 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"); + } + + String searchString = null; + if (mMatcher.match(uri) == URI_SEARCH_SUGGEST) { + if (uri.getPathSegments().size() > 1) { + searchString = uri.getPathSegments().get(1); + } + } else { + searchString = uri.getQueryParameter("pattern"); + } + + if (TextUtils.isEmpty(searchString)) { + return null; + } + + try { + // 构建模糊查询字符串 + searchString = String.format("%%%s%%", searchString); + c = db.rawQuery(NOTES_SNIPPET_SEARCH_QUERY, + new String[] { searchString }); + } catch (IllegalStateException ex) { + Log.e(TAG, "got exception: " + ex.toString()); + } + break; + default: + throw new IllegalArgumentException("Unknown URI " + uri); + } + // 设置通知Uri,当数据变化时通知观察者 + if (c != null) { + c.setNotificationUri(getContext().getContentResolver(), uri); + } + return c; + } + + /** + * 处理插入请求 + * @param uri 插入的Uri + * @param values 要插入的数据 + * @return 插入数据的Uri + */ + @Override + public Uri insert(Uri uri, ContentValues values) { + SQLiteDatabase db = mHelper.getWritableDatabase(); + long dataId = 0, noteId = 0, insertedId = 0; + // 根据Uri匹配结果执行不同的插入操作 + switch (mMatcher.match(uri)) { + case URI_NOTE: + // 插入数据到note表 + insertedId = noteId = db.insert(TABLE.NOTE, null, values); + break; + case URI_DATA: + // 插入数据到data表 + if (values.containsKey(DataColumns.NOTE_ID)) { + noteId = values.getAsLong(DataColumns.NOTE_ID); + } else { + Log.d(TAG, "Wrong data format without note id:" + values.toString()); + } + insertedId = dataId = db.insert(TABLE.DATA, null, values); + break; + default: + throw new IllegalArgumentException("Unknown URI " + uri); + } + // 通知数据变化 + if (noteId > 0) { + getContext().getContentResolver().notifyChange( + ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), null); + } + + if (dataId > 0) { + getContext().getContentResolver().notifyChange( + ContentUris.withAppendedId(Notes.CONTENT_DATA_URI, dataId), null); + } + + return ContentUris.withAppendedId(uri, insertedId); + } + + /** + * 处理删除请求 + * @param uri 删除的Uri + * @param selection 删除条件 + * @param selectionArgs 删除条件参数 + * @return 被删除的行数 + */ + @Override + public int delete(Uri uri, String selection, String[] selectionArgs) { + int count = 0; + String id = null; + SQLiteDatabase db = mHelper.getWritableDatabase(); + boolean deleteData = false; + // 根据Uri匹配结果执行不同的删除操作 + switch (mMatcher.match(uri)) { + case URI_NOTE: + // 删除note表中的数据 + selection = "(" + selection + ") AND " + NoteColumns.ID + ">0 "; + count = db.delete(TABLE.NOTE, selection, selectionArgs); + break; + case URI_NOTE_ITEM: + // 删除note表中指定id的数据 + id = uri.getPathSegments().get(1); + /** + * 小于0的ID是系统文件夹,不允许删除 + */ + long noteId = Long.valueOf(id); + if (noteId <= 0) { + break; + } + count = db.delete(TABLE.NOTE, + NoteColumns.ID + "=" + id + parseSelection(selection), selectionArgs); + break; + case URI_DATA: + // 删除data表中的数据 + count = db.delete(TABLE.DATA, selection, selectionArgs); + deleteData = true; + break; + case URI_DATA_ITEM: + // 删除data表中指定id的数据 + id = uri.getPathSegments().get(1); + count = db.delete(TABLE.DATA, + DataColumns.ID + "=" + id + parseSelection(selection), selectionArgs); + deleteData = true; + break; + default: + throw new IllegalArgumentException("Unknown URI " + uri); + } + // 通知数据变化 + if (count > 0) { + if (deleteData) { + getContext().getContentResolver().notifyChange(Notes.CONTENT_NOTE_URI, null); + } + getContext().getContentResolver().notifyChange(uri, null); + } + return count; + } + + /** + * 处理更新请求 + * @param uri 更新的Uri + * @param values 要更新的数据 + * @param selection 更新条件 + * @param selectionArgs 更新条件参数 + * @return 被更新的行数 + */ + @Override + public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { + int count = 0; + String id = null; + SQLiteDatabase db = mHelper.getWritableDatabase(); + boolean updateData = false; + // 根据Uri匹配结果执行不同的更新操作 + switch (mMatcher.match(uri)) { + case URI_NOTE: + // 更新note表中的数据,先增加笔记版本号 + increaseNoteVersion(-1, selection, selectionArgs); + count = db.update(TABLE.NOTE, values, selection, selectionArgs); + break; + case URI_NOTE_ITEM: + // 更新note表中指定id的数据,先增加笔记版本号 + id = uri.getPathSegments().get(1); + increaseNoteVersion(Long.valueOf(id), selection, selectionArgs); + count = db.update(TABLE.NOTE, values, NoteColumns.ID + "=" + id + + parseSelection(selection), selectionArgs); + break; + case URI_DATA: + // 更新data表中的数据 + count = db.update(TABLE.DATA, values, selection, selectionArgs); + updateData = true; + break; + case URI_DATA_ITEM: + // 更新data表中指定id的数据 + id = uri.getPathSegments().get(1); + count = db.update(TABLE.DATA, values, DataColumns.ID + "=" + id + + parseSelection(selection), selectionArgs); + updateData = true; + break; + default: + throw new IllegalArgumentException("Unknown URI " + uri); + } + + // 通知数据变化 + if (count > 0) { + if (updateData) { + getContext().getContentResolver().notifyChange(Notes.CONTENT_NOTE_URI, null); + } + getContext().getContentResolver().notifyChange(uri, null); + } + return count; + } + + /** + * 解析查询条件,将额外的查询条件添加到已有条件中 + * @param selection 原查询条件 + * @return 解析后的查询条件 + */ + private String parseSelection(String selection) { + return (!TextUtils.isEmpty(selection) ? " AND (" + selection + ')' : ""); + } + + /** + * 增加笔记的版本号 + * @param id 笔记id,-1表示更新符合条件的所有笔记 + * @param selection 更新条件 + * @param selectionArgs 更新条件参数 + */ + private void increaseNoteVersion(long id, String selection, String[] selectionArgs) { + StringBuilder sql = new StringBuilder(120); + sql.append("UPDATE "); + sql.append(TABLE.NOTE); + sql.append(" SET "); + sql.append(NoteColumns.VERSION); + sql.append("=" + NoteColumns.VERSION + "+1 "); + + if (id > 0 || !TextUtils.isEmpty(selection)) { + sql.append(" WHERE "); + } + if (id > 0) { + sql.append(NoteColumns.ID + "=" + String.valueOf(id)); + } + if (!TextUtils.isEmpty(selection)) { + String selectString = id > 0 ? parseSelection(selection) : selection; + for (String args : selectionArgs) { + selectString = selectString.replaceFirst("\\?", args); + } + sql.append(selectString); + } + + mHelper.getWritableDatabase().execSQL(sql.toString()); + } + + /** + * 获取Uri对应的MIME类型 + * @param uri 要获取MIME类型的Uri + * @return MIME类型,此处未实现 + */ + @Override + public String getType(Uri uri) { + // TODO Auto-generated method stub + return null; + } + +} \ No newline at end of file diff --git a/java/net/micode/notes/gtask/data/MetaData.java b/java/net/micode/notes/gtask/data/MetaData.java new file mode 100644 index 0000000..3a2050b --- /dev/null +++ b/java/net/micode/notes/gtask/data/MetaData.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.gtask.data; + +import android.database.Cursor; +import android.util.Log; + +import net.micode.notes.tool.GTaskStringUtils; + +import org.json.JSONException; +import org.json.JSONObject; + + +public class MetaData extends Task { + private final static String TAG = MetaData.class.getSimpleName(); + + private String mRelatedGid = null; + + public void setMeta(String gid, JSONObject metaInfo) { + try { + metaInfo.put(GTaskStringUtils.META_HEAD_GTASK_ID, gid); + } catch (JSONException e) { + Log.e(TAG, "failed to put related gid"); + } + setNotes(metaInfo.toString()); + setName(GTaskStringUtils.META_NOTE_NAME); + } + + public String getRelatedGid() { + return mRelatedGid; + } + + @Override + public boolean isWorthSaving() { + return getNotes() != null; + } + + @Override + public void setContentByRemoteJSON(JSONObject js) { + super.setContentByRemoteJSON(js); + if (getNotes() != null) { + try { + JSONObject metaInfo = new JSONObject(getNotes().trim()); + mRelatedGid = metaInfo.getString(GTaskStringUtils.META_HEAD_GTASK_ID); + } catch (JSONException e) { + Log.w(TAG, "failed to get related gid"); + mRelatedGid = null; + } + } + } + + @Override + public void setContentByLocalJSON(JSONObject js) { + // this function should not be called + throw new IllegalAccessError("MetaData:setContentByLocalJSON should not be called"); + } + + @Override + public JSONObject getLocalJSONFromContent() { + throw new IllegalAccessError("MetaData:getLocalJSONFromContent should not be called"); + } + + @Override + public int getSyncAction(Cursor c) { + throw new IllegalAccessError("MetaData:getSyncAction should not be called"); + } + +} diff --git a/java/net/micode/notes/gtask/data/Node.java b/java/net/micode/notes/gtask/data/Node.java new file mode 100644 index 0000000..63950e0 --- /dev/null +++ b/java/net/micode/notes/gtask/data/Node.java @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.gtask.data; + +import android.database.Cursor; + +import org.json.JSONObject; + +public abstract class Node { + public static final int SYNC_ACTION_NONE = 0; + + public static final int SYNC_ACTION_ADD_REMOTE = 1; + + public static final int SYNC_ACTION_ADD_LOCAL = 2; + + public static final int SYNC_ACTION_DEL_REMOTE = 3; + + public static final int SYNC_ACTION_DEL_LOCAL = 4; + + public static final int SYNC_ACTION_UPDATE_REMOTE = 5; + + public static final int SYNC_ACTION_UPDATE_LOCAL = 6; + + public static final int SYNC_ACTION_UPDATE_CONFLICT = 7; + + public static final int SYNC_ACTION_ERROR = 8; + + private String mGid; + + private String mName; + + private long mLastModified; + + private boolean mDeleted; + + public Node() { + mGid = null; + mName = ""; + mLastModified = 0; + mDeleted = false; + } + + public abstract JSONObject getCreateAction(int actionId); + + public abstract JSONObject getUpdateAction(int actionId); + + public abstract void setContentByRemoteJSON(JSONObject js); + + public abstract void setContentByLocalJSON(JSONObject js); + + public abstract JSONObject getLocalJSONFromContent(); + + public abstract int getSyncAction(Cursor c); + + public void setGid(String gid) { + this.mGid = gid; + } + + public void setName(String name) { + this.mName = name; + } + + public void setLastModified(long lastModified) { + this.mLastModified = lastModified; + } + + public void setDeleted(boolean deleted) { + this.mDeleted = deleted; + } + + public String getGid() { + return this.mGid; + } + + public String getName() { + return this.mName; + } + + public long getLastModified() { + return this.mLastModified; + } + + public boolean getDeleted() { + return this.mDeleted; + } + +} diff --git a/java/net/micode/notes/gtask/data/SqlData.java b/java/net/micode/notes/gtask/data/SqlData.java new file mode 100644 index 0000000..d3ec3be --- /dev/null +++ b/java/net/micode/notes/gtask/data/SqlData.java @@ -0,0 +1,189 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.gtask.data; + +import android.content.ContentResolver; +import android.content.ContentUris; +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.net.Uri; +import android.util.Log; + +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.DataColumns; +import net.micode.notes.data.Notes.DataConstants; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.data.NotesDatabaseHelper.TABLE; +import net.micode.notes.gtask.exception.ActionFailureException; + +import org.json.JSONException; +import org.json.JSONObject; + + +public class SqlData { + private static final String TAG = SqlData.class.getSimpleName(); + + private static final int INVALID_ID = -99999; + + public static final String[] PROJECTION_DATA = new String[] { + DataColumns.ID, DataColumns.MIME_TYPE, DataColumns.CONTENT, DataColumns.DATA1, + DataColumns.DATA3 + }; + + public static final int DATA_ID_COLUMN = 0; + + public static final int DATA_MIME_TYPE_COLUMN = 1; + + public static final int DATA_CONTENT_COLUMN = 2; + + public static final int DATA_CONTENT_DATA_1_COLUMN = 3; + + public static final int DATA_CONTENT_DATA_3_COLUMN = 4; + + private ContentResolver mContentResolver; + + private boolean mIsCreate; + + private long mDataId; + + private String mDataMimeType; + + private String mDataContent; + + private long mDataContentData1; + + private String mDataContentData3; + + private ContentValues mDiffDataValues; + + public SqlData(Context context) { + mContentResolver = context.getContentResolver(); + mIsCreate = true; + mDataId = INVALID_ID; + mDataMimeType = DataConstants.NOTE; + mDataContent = ""; + mDataContentData1 = 0; + mDataContentData3 = ""; + mDiffDataValues = new ContentValues(); + } + + public SqlData(Context context, Cursor c) { + mContentResolver = context.getContentResolver(); + mIsCreate = false; + loadFromCursor(c); + mDiffDataValues = new ContentValues(); + } + + private void loadFromCursor(Cursor c) { + mDataId = c.getLong(DATA_ID_COLUMN); + mDataMimeType = c.getString(DATA_MIME_TYPE_COLUMN); + mDataContent = c.getString(DATA_CONTENT_COLUMN); + mDataContentData1 = c.getLong(DATA_CONTENT_DATA_1_COLUMN); + mDataContentData3 = c.getString(DATA_CONTENT_DATA_3_COLUMN); + } + + public void setContent(JSONObject js) throws JSONException { + long dataId = js.has(DataColumns.ID) ? js.getLong(DataColumns.ID) : INVALID_ID; + if (mIsCreate || mDataId != dataId) { + mDiffDataValues.put(DataColumns.ID, dataId); + } + mDataId = dataId; + + String dataMimeType = js.has(DataColumns.MIME_TYPE) ? js.getString(DataColumns.MIME_TYPE) + : DataConstants.NOTE; + if (mIsCreate || !mDataMimeType.equals(dataMimeType)) { + mDiffDataValues.put(DataColumns.MIME_TYPE, dataMimeType); + } + mDataMimeType = dataMimeType; + + String dataContent = js.has(DataColumns.CONTENT) ? js.getString(DataColumns.CONTENT) : ""; + if (mIsCreate || !mDataContent.equals(dataContent)) { + mDiffDataValues.put(DataColumns.CONTENT, dataContent); + } + mDataContent = dataContent; + + long dataContentData1 = js.has(DataColumns.DATA1) ? js.getLong(DataColumns.DATA1) : 0; + if (mIsCreate || mDataContentData1 != dataContentData1) { + mDiffDataValues.put(DataColumns.DATA1, dataContentData1); + } + mDataContentData1 = dataContentData1; + + String dataContentData3 = js.has(DataColumns.DATA3) ? js.getString(DataColumns.DATA3) : ""; + if (mIsCreate || !mDataContentData3.equals(dataContentData3)) { + mDiffDataValues.put(DataColumns.DATA3, dataContentData3); + } + mDataContentData3 = dataContentData3; + } + + public JSONObject getContent() throws JSONException { + if (mIsCreate) { + Log.e(TAG, "it seems that we haven't created this in database yet"); + return null; + } + JSONObject js = new JSONObject(); + js.put(DataColumns.ID, mDataId); + js.put(DataColumns.MIME_TYPE, mDataMimeType); + js.put(DataColumns.CONTENT, mDataContent); + js.put(DataColumns.DATA1, mDataContentData1); + js.put(DataColumns.DATA3, mDataContentData3); + return js; + } + + public void commit(long noteId, boolean validateVersion, long version) { + + if (mIsCreate) { + if (mDataId == INVALID_ID && mDiffDataValues.containsKey(DataColumns.ID)) { + mDiffDataValues.remove(DataColumns.ID); + } + + mDiffDataValues.put(DataColumns.NOTE_ID, noteId); + Uri uri = mContentResolver.insert(Notes.CONTENT_DATA_URI, mDiffDataValues); + try { + mDataId = Long.valueOf(uri.getPathSegments().get(1)); + } catch (NumberFormatException e) { + Log.e(TAG, "Get note id error :" + e.toString()); + throw new ActionFailureException("create note failed"); + } + } else { + if (mDiffDataValues.size() > 0) { + int result = 0; + if (!validateVersion) { + result = mContentResolver.update(ContentUris.withAppendedId( + Notes.CONTENT_DATA_URI, mDataId), mDiffDataValues, null, null); + } else { + result = mContentResolver.update(ContentUris.withAppendedId( + Notes.CONTENT_DATA_URI, mDataId), mDiffDataValues, + " ? in (SELECT " + NoteColumns.ID + " FROM " + TABLE.NOTE + + " WHERE " + NoteColumns.VERSION + "=?)", new String[] { + String.valueOf(noteId), String.valueOf(version) + }); + } + if (result == 0) { + Log.w(TAG, "there is no update. maybe user updates note when syncing"); + } + } + } + + mDiffDataValues.clear(); + mIsCreate = false; + } + + public long getId() { + return mDataId; + } +} diff --git a/java/net/micode/notes/gtask/data/SqlNote.java b/java/net/micode/notes/gtask/data/SqlNote.java new file mode 100644 index 0000000..79a4095 --- /dev/null +++ b/java/net/micode/notes/gtask/data/SqlNote.java @@ -0,0 +1,505 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.gtask.data; + +import android.appwidget.AppWidgetManager; +import android.content.ContentResolver; +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.net.Uri; +import android.util.Log; + +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.DataColumns; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.gtask.exception.ActionFailureException; +import net.micode.notes.tool.GTaskStringUtils; +import net.micode.notes.tool.ResourceParser; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; + + +public class SqlNote { + private static final String TAG = SqlNote.class.getSimpleName(); + + private static final int INVALID_ID = -99999; + + public static final String[] PROJECTION_NOTE = new String[] { + NoteColumns.ID, NoteColumns.ALERTED_DATE, NoteColumns.BG_COLOR_ID, + NoteColumns.CREATED_DATE, NoteColumns.HAS_ATTACHMENT, NoteColumns.MODIFIED_DATE, + NoteColumns.NOTES_COUNT, NoteColumns.PARENT_ID, NoteColumns.SNIPPET, NoteColumns.TYPE, + NoteColumns.WIDGET_ID, NoteColumns.WIDGET_TYPE, NoteColumns.SYNC_ID, + NoteColumns.LOCAL_MODIFIED, NoteColumns.ORIGIN_PARENT_ID, NoteColumns.GTASK_ID, + NoteColumns.VERSION + }; + + public static final int ID_COLUMN = 0; + + public static final int ALERTED_DATE_COLUMN = 1; + + public static final int BG_COLOR_ID_COLUMN = 2; + + public static final int CREATED_DATE_COLUMN = 3; + + public static final int HAS_ATTACHMENT_COLUMN = 4; + + public static final int MODIFIED_DATE_COLUMN = 5; + + public static final int NOTES_COUNT_COLUMN = 6; + + public static final int PARENT_ID_COLUMN = 7; + + public static final int SNIPPET_COLUMN = 8; + + public static final int TYPE_COLUMN = 9; + + public static final int WIDGET_ID_COLUMN = 10; + + public static final int WIDGET_TYPE_COLUMN = 11; + + public static final int SYNC_ID_COLUMN = 12; + + public static final int LOCAL_MODIFIED_COLUMN = 13; + + public static final int ORIGIN_PARENT_ID_COLUMN = 14; + + public static final int GTASK_ID_COLUMN = 15; + + public static final int VERSION_COLUMN = 16; + + private Context mContext; + + private ContentResolver mContentResolver; + + private boolean mIsCreate; + + private long mId; + + private long mAlertDate; + + private int mBgColorId; + + private long mCreatedDate; + + private int mHasAttachment; + + private long mModifiedDate; + + private long mParentId; + + private String mSnippet; + + private int mType; + + private int mWidgetId; + + private int mWidgetType; + + private long mOriginParent; + + private long mVersion; + + private ContentValues mDiffNoteValues; + + private ArrayList mDataList; + + public SqlNote(Context context) { + mContext = context; + mContentResolver = context.getContentResolver(); + mIsCreate = true; + mId = INVALID_ID; + mAlertDate = 0; + mBgColorId = ResourceParser.getDefaultBgId(context); + mCreatedDate = System.currentTimeMillis(); + mHasAttachment = 0; + mModifiedDate = System.currentTimeMillis(); + mParentId = 0; + mSnippet = ""; + mType = Notes.TYPE_NOTE; + mWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; + mWidgetType = Notes.TYPE_WIDGET_INVALIDE; + mOriginParent = 0; + mVersion = 0; + mDiffNoteValues = new ContentValues(); + mDataList = new ArrayList(); + } + + public SqlNote(Context context, Cursor c) { + mContext = context; + mContentResolver = context.getContentResolver(); + mIsCreate = false; + loadFromCursor(c); + mDataList = new ArrayList(); + if (mType == Notes.TYPE_NOTE) + loadDataContent(); + mDiffNoteValues = new ContentValues(); + } + + public SqlNote(Context context, long id) { + mContext = context; + mContentResolver = context.getContentResolver(); + mIsCreate = false; + loadFromCursor(id); + mDataList = new ArrayList(); + if (mType == Notes.TYPE_NOTE) + loadDataContent(); + mDiffNoteValues = new ContentValues(); + + } + + private void loadFromCursor(long id) { + Cursor c = null; + try { + c = mContentResolver.query(Notes.CONTENT_NOTE_URI, PROJECTION_NOTE, "(_id=?)", + new String[] { + String.valueOf(id) + }, null); + if (c != null) { + c.moveToNext(); + loadFromCursor(c); + } else { + Log.w(TAG, "loadFromCursor: cursor = null"); + } + } finally { + if (c != null) + c.close(); + } + } + + private void loadFromCursor(Cursor c) { + mId = c.getLong(ID_COLUMN); + mAlertDate = c.getLong(ALERTED_DATE_COLUMN); + mBgColorId = c.getInt(BG_COLOR_ID_COLUMN); + mCreatedDate = c.getLong(CREATED_DATE_COLUMN); + mHasAttachment = c.getInt(HAS_ATTACHMENT_COLUMN); + mModifiedDate = c.getLong(MODIFIED_DATE_COLUMN); + mParentId = c.getLong(PARENT_ID_COLUMN); + mSnippet = c.getString(SNIPPET_COLUMN); + mType = c.getInt(TYPE_COLUMN); + mWidgetId = c.getInt(WIDGET_ID_COLUMN); + mWidgetType = c.getInt(WIDGET_TYPE_COLUMN); + mVersion = c.getLong(VERSION_COLUMN); + } + + private void loadDataContent() { + Cursor c = null; + mDataList.clear(); + try { + c = mContentResolver.query(Notes.CONTENT_DATA_URI, SqlData.PROJECTION_DATA, + "(note_id=?)", new String[] { + String.valueOf(mId) + }, null); + if (c != null) { + if (c.getCount() == 0) { + Log.w(TAG, "it seems that the note has not data"); + return; + } + while (c.moveToNext()) { + SqlData data = new SqlData(mContext, c); + mDataList.add(data); + } + } else { + Log.w(TAG, "loadDataContent: cursor = null"); + } + } finally { + if (c != null) + c.close(); + } + } + + public boolean setContent(JSONObject js) { + try { + JSONObject note = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE); + if (note.getInt(NoteColumns.TYPE) == Notes.TYPE_SYSTEM) { + Log.w(TAG, "cannot set system folder"); + } else if (note.getInt(NoteColumns.TYPE) == Notes.TYPE_FOLDER) { + // for folder we can only update the snnipet and type + String snippet = note.has(NoteColumns.SNIPPET) ? note + .getString(NoteColumns.SNIPPET) : ""; + if (mIsCreate || !mSnippet.equals(snippet)) { + mDiffNoteValues.put(NoteColumns.SNIPPET, snippet); + } + mSnippet = snippet; + + int type = note.has(NoteColumns.TYPE) ? note.getInt(NoteColumns.TYPE) + : Notes.TYPE_NOTE; + if (mIsCreate || mType != type) { + mDiffNoteValues.put(NoteColumns.TYPE, type); + } + mType = type; + } else if (note.getInt(NoteColumns.TYPE) == Notes.TYPE_NOTE) { + JSONArray dataArray = js.getJSONArray(GTaskStringUtils.META_HEAD_DATA); + long id = note.has(NoteColumns.ID) ? note.getLong(NoteColumns.ID) : INVALID_ID; + if (mIsCreate || mId != id) { + mDiffNoteValues.put(NoteColumns.ID, id); + } + mId = id; + + long alertDate = note.has(NoteColumns.ALERTED_DATE) ? note + .getLong(NoteColumns.ALERTED_DATE) : 0; + if (mIsCreate || mAlertDate != alertDate) { + mDiffNoteValues.put(NoteColumns.ALERTED_DATE, alertDate); + } + mAlertDate = alertDate; + + int bgColorId = note.has(NoteColumns.BG_COLOR_ID) ? note + .getInt(NoteColumns.BG_COLOR_ID) : ResourceParser.getDefaultBgId(mContext); + if (mIsCreate || mBgColorId != bgColorId) { + mDiffNoteValues.put(NoteColumns.BG_COLOR_ID, bgColorId); + } + mBgColorId = bgColorId; + + long createDate = note.has(NoteColumns.CREATED_DATE) ? note + .getLong(NoteColumns.CREATED_DATE) : System.currentTimeMillis(); + if (mIsCreate || mCreatedDate != createDate) { + mDiffNoteValues.put(NoteColumns.CREATED_DATE, createDate); + } + mCreatedDate = createDate; + + int hasAttachment = note.has(NoteColumns.HAS_ATTACHMENT) ? note + .getInt(NoteColumns.HAS_ATTACHMENT) : 0; + if (mIsCreate || mHasAttachment != hasAttachment) { + mDiffNoteValues.put(NoteColumns.HAS_ATTACHMENT, hasAttachment); + } + mHasAttachment = hasAttachment; + + long modifiedDate = note.has(NoteColumns.MODIFIED_DATE) ? note + .getLong(NoteColumns.MODIFIED_DATE) : System.currentTimeMillis(); + if (mIsCreate || mModifiedDate != modifiedDate) { + mDiffNoteValues.put(NoteColumns.MODIFIED_DATE, modifiedDate); + } + mModifiedDate = modifiedDate; + + long parentId = note.has(NoteColumns.PARENT_ID) ? note + .getLong(NoteColumns.PARENT_ID) : 0; + if (mIsCreate || mParentId != parentId) { + mDiffNoteValues.put(NoteColumns.PARENT_ID, parentId); + } + mParentId = parentId; + + String snippet = note.has(NoteColumns.SNIPPET) ? note + .getString(NoteColumns.SNIPPET) : ""; + if (mIsCreate || !mSnippet.equals(snippet)) { + mDiffNoteValues.put(NoteColumns.SNIPPET, snippet); + } + mSnippet = snippet; + + int type = note.has(NoteColumns.TYPE) ? note.getInt(NoteColumns.TYPE) + : Notes.TYPE_NOTE; + if (mIsCreate || mType != type) { + mDiffNoteValues.put(NoteColumns.TYPE, type); + } + mType = type; + + int widgetId = note.has(NoteColumns.WIDGET_ID) ? note.getInt(NoteColumns.WIDGET_ID) + : AppWidgetManager.INVALID_APPWIDGET_ID; + if (mIsCreate || mWidgetId != widgetId) { + mDiffNoteValues.put(NoteColumns.WIDGET_ID, widgetId); + } + mWidgetId = widgetId; + + int widgetType = note.has(NoteColumns.WIDGET_TYPE) ? note + .getInt(NoteColumns.WIDGET_TYPE) : Notes.TYPE_WIDGET_INVALIDE; + if (mIsCreate || mWidgetType != widgetType) { + mDiffNoteValues.put(NoteColumns.WIDGET_TYPE, widgetType); + } + mWidgetType = widgetType; + + long originParent = note.has(NoteColumns.ORIGIN_PARENT_ID) ? note + .getLong(NoteColumns.ORIGIN_PARENT_ID) : 0; + if (mIsCreate || mOriginParent != originParent) { + mDiffNoteValues.put(NoteColumns.ORIGIN_PARENT_ID, originParent); + } + mOriginParent = originParent; + + for (int i = 0; i < dataArray.length(); i++) { + JSONObject data = dataArray.getJSONObject(i); + SqlData sqlData = null; + if (data.has(DataColumns.ID)) { + long dataId = data.getLong(DataColumns.ID); + for (SqlData temp : mDataList) { + if (dataId == temp.getId()) { + sqlData = temp; + } + } + } + + if (sqlData == null) { + sqlData = new SqlData(mContext); + mDataList.add(sqlData); + } + + sqlData.setContent(data); + } + } + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + return false; + } + return true; + } + + public JSONObject getContent() { + try { + JSONObject js = new JSONObject(); + + if (mIsCreate) { + Log.e(TAG, "it seems that we haven't created this in database yet"); + return null; + } + + JSONObject note = new JSONObject(); + if (mType == Notes.TYPE_NOTE) { + note.put(NoteColumns.ID, mId); + note.put(NoteColumns.ALERTED_DATE, mAlertDate); + note.put(NoteColumns.BG_COLOR_ID, mBgColorId); + note.put(NoteColumns.CREATED_DATE, mCreatedDate); + note.put(NoteColumns.HAS_ATTACHMENT, mHasAttachment); + note.put(NoteColumns.MODIFIED_DATE, mModifiedDate); + note.put(NoteColumns.PARENT_ID, mParentId); + note.put(NoteColumns.SNIPPET, mSnippet); + note.put(NoteColumns.TYPE, mType); + note.put(NoteColumns.WIDGET_ID, mWidgetId); + note.put(NoteColumns.WIDGET_TYPE, mWidgetType); + note.put(NoteColumns.ORIGIN_PARENT_ID, mOriginParent); + js.put(GTaskStringUtils.META_HEAD_NOTE, note); + + JSONArray dataArray = new JSONArray(); + for (SqlData sqlData : mDataList) { + JSONObject data = sqlData.getContent(); + if (data != null) { + dataArray.put(data); + } + } + js.put(GTaskStringUtils.META_HEAD_DATA, dataArray); + } else if (mType == Notes.TYPE_FOLDER || mType == Notes.TYPE_SYSTEM) { + note.put(NoteColumns.ID, mId); + note.put(NoteColumns.TYPE, mType); + note.put(NoteColumns.SNIPPET, mSnippet); + js.put(GTaskStringUtils.META_HEAD_NOTE, note); + } + + return js; + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + } + return null; + } + + public void setParentId(long id) { + mParentId = id; + mDiffNoteValues.put(NoteColumns.PARENT_ID, id); + } + + public void setGtaskId(String gid) { + mDiffNoteValues.put(NoteColumns.GTASK_ID, gid); + } + + public void setSyncId(long syncId) { + mDiffNoteValues.put(NoteColumns.SYNC_ID, syncId); + } + + public void resetLocalModified() { + mDiffNoteValues.put(NoteColumns.LOCAL_MODIFIED, 0); + } + + public long getId() { + return mId; + } + + public long getParentId() { + return mParentId; + } + + public String getSnippet() { + return mSnippet; + } + + public boolean isNoteType() { + return mType == Notes.TYPE_NOTE; + } + + public void commit(boolean validateVersion) { + if (mIsCreate) { + if (mId == INVALID_ID && mDiffNoteValues.containsKey(NoteColumns.ID)) { + mDiffNoteValues.remove(NoteColumns.ID); + } + + Uri uri = mContentResolver.insert(Notes.CONTENT_NOTE_URI, mDiffNoteValues); + try { + mId = Long.valueOf(uri.getPathSegments().get(1)); + } catch (NumberFormatException e) { + Log.e(TAG, "Get note id error :" + e.toString()); + throw new ActionFailureException("create note failed"); + } + if (mId == 0) { + throw new IllegalStateException("Create thread id failed"); + } + + if (mType == Notes.TYPE_NOTE) { + for (SqlData sqlData : mDataList) { + sqlData.commit(mId, false, -1); + } + } + } else { + if (mId <= 0 && mId != Notes.ID_ROOT_FOLDER && mId != Notes.ID_CALL_RECORD_FOLDER) { + Log.e(TAG, "No such note"); + throw new IllegalStateException("Try to update note with invalid id"); + } + if (mDiffNoteValues.size() > 0) { + mVersion ++; + int result = 0; + if (!validateVersion) { + result = mContentResolver.update(Notes.CONTENT_NOTE_URI, mDiffNoteValues, "(" + + NoteColumns.ID + "=?)", new String[] { + String.valueOf(mId) + }); + } else { + result = mContentResolver.update(Notes.CONTENT_NOTE_URI, mDiffNoteValues, "(" + + NoteColumns.ID + "=?) AND (" + NoteColumns.VERSION + "<=?)", + new String[] { + String.valueOf(mId), String.valueOf(mVersion) + }); + } + if (result == 0) { + Log.w(TAG, "there is no update. maybe user updates note when syncing"); + } + } + + if (mType == Notes.TYPE_NOTE) { + for (SqlData sqlData : mDataList) { + sqlData.commit(mId, validateVersion, mVersion); + } + } + } + + // refresh local info + loadFromCursor(mId); + if (mType == Notes.TYPE_NOTE) + loadDataContent(); + + mDiffNoteValues.clear(); + mIsCreate = false; + } +} diff --git a/java/net/micode/notes/gtask/data/Task.java b/java/net/micode/notes/gtask/data/Task.java new file mode 100644 index 0000000..6a19454 --- /dev/null +++ b/java/net/micode/notes/gtask/data/Task.java @@ -0,0 +1,351 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.gtask.data; + +import android.database.Cursor; +import android.text.TextUtils; +import android.util.Log; + +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.DataColumns; +import net.micode.notes.data.Notes.DataConstants; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.gtask.exception.ActionFailureException; +import net.micode.notes.tool.GTaskStringUtils; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + + +public class Task extends Node { + private static final String TAG = Task.class.getSimpleName(); + + private boolean mCompleted; + + private String mNotes; + + private JSONObject mMetaInfo; + + private Task mPriorSibling; + + private TaskList mParent; + + public Task() { + super(); + mCompleted = false; + mNotes = null; + mPriorSibling = null; + mParent = null; + mMetaInfo = null; + } + + public JSONObject getCreateAction(int actionId) { + JSONObject js = new JSONObject(); + + try { + // action_type + js.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE, + GTaskStringUtils.GTASK_JSON_ACTION_TYPE_CREATE); + + // action_id + js.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, actionId); + + // index + js.put(GTaskStringUtils.GTASK_JSON_INDEX, mParent.getChildTaskIndex(this)); + + // entity_delta + JSONObject entity = new JSONObject(); + entity.put(GTaskStringUtils.GTASK_JSON_NAME, getName()); + entity.put(GTaskStringUtils.GTASK_JSON_CREATOR_ID, "null"); + entity.put(GTaskStringUtils.GTASK_JSON_ENTITY_TYPE, + GTaskStringUtils.GTASK_JSON_TYPE_TASK); + if (getNotes() != null) { + entity.put(GTaskStringUtils.GTASK_JSON_NOTES, getNotes()); + } + js.put(GTaskStringUtils.GTASK_JSON_ENTITY_DELTA, entity); + + // parent_id + js.put(GTaskStringUtils.GTASK_JSON_PARENT_ID, mParent.getGid()); + + // dest_parent_type + js.put(GTaskStringUtils.GTASK_JSON_DEST_PARENT_TYPE, + GTaskStringUtils.GTASK_JSON_TYPE_GROUP); + + // list_id + js.put(GTaskStringUtils.GTASK_JSON_LIST_ID, mParent.getGid()); + + // prior_sibling_id + if (mPriorSibling != null) { + js.put(GTaskStringUtils.GTASK_JSON_PRIOR_SIBLING_ID, mPriorSibling.getGid()); + } + + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("fail to generate task-create jsonobject"); + } + + return js; + } + + public JSONObject getUpdateAction(int actionId) { + JSONObject js = new JSONObject(); + + try { + // action_type + js.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE, + GTaskStringUtils.GTASK_JSON_ACTION_TYPE_UPDATE); + + // action_id + js.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, actionId); + + // id + js.put(GTaskStringUtils.GTASK_JSON_ID, getGid()); + + // entity_delta + JSONObject entity = new JSONObject(); + entity.put(GTaskStringUtils.GTASK_JSON_NAME, getName()); + if (getNotes() != null) { + entity.put(GTaskStringUtils.GTASK_JSON_NOTES, getNotes()); + } + entity.put(GTaskStringUtils.GTASK_JSON_DELETED, getDeleted()); + js.put(GTaskStringUtils.GTASK_JSON_ENTITY_DELTA, entity); + + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("fail to generate task-update jsonobject"); + } + + return js; + } + + public void setContentByRemoteJSON(JSONObject js) { + if (js != null) { + try { + // id + if (js.has(GTaskStringUtils.GTASK_JSON_ID)) { + setGid(js.getString(GTaskStringUtils.GTASK_JSON_ID)); + } + + // last_modified + if (js.has(GTaskStringUtils.GTASK_JSON_LAST_MODIFIED)) { + setLastModified(js.getLong(GTaskStringUtils.GTASK_JSON_LAST_MODIFIED)); + } + + // name + if (js.has(GTaskStringUtils.GTASK_JSON_NAME)) { + setName(js.getString(GTaskStringUtils.GTASK_JSON_NAME)); + } + + // notes + if (js.has(GTaskStringUtils.GTASK_JSON_NOTES)) { + setNotes(js.getString(GTaskStringUtils.GTASK_JSON_NOTES)); + } + + // deleted + if (js.has(GTaskStringUtils.GTASK_JSON_DELETED)) { + setDeleted(js.getBoolean(GTaskStringUtils.GTASK_JSON_DELETED)); + } + + // completed + if (js.has(GTaskStringUtils.GTASK_JSON_COMPLETED)) { + setCompleted(js.getBoolean(GTaskStringUtils.GTASK_JSON_COMPLETED)); + } + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("fail to get task content from jsonobject"); + } + } + } + + public void setContentByLocalJSON(JSONObject js) { + if (js == null || !js.has(GTaskStringUtils.META_HEAD_NOTE) + || !js.has(GTaskStringUtils.META_HEAD_DATA)) { + Log.w(TAG, "setContentByLocalJSON: nothing is avaiable"); + } + + try { + JSONObject note = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE); + JSONArray dataArray = js.getJSONArray(GTaskStringUtils.META_HEAD_DATA); + + if (note.getInt(NoteColumns.TYPE) != Notes.TYPE_NOTE) { + Log.e(TAG, "invalid type"); + return; + } + + for (int i = 0; i < dataArray.length(); i++) { + JSONObject data = dataArray.getJSONObject(i); + if (TextUtils.equals(data.getString(DataColumns.MIME_TYPE), DataConstants.NOTE)) { + setName(data.getString(DataColumns.CONTENT)); + break; + } + } + + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + } + } + + public JSONObject getLocalJSONFromContent() { + String name = getName(); + try { + if (mMetaInfo == null) { + // new task created from web + if (name == null) { + Log.w(TAG, "the note seems to be an empty one"); + return null; + } + + JSONObject js = new JSONObject(); + JSONObject note = new JSONObject(); + JSONArray dataArray = new JSONArray(); + JSONObject data = new JSONObject(); + data.put(DataColumns.CONTENT, name); + dataArray.put(data); + js.put(GTaskStringUtils.META_HEAD_DATA, dataArray); + note.put(NoteColumns.TYPE, Notes.TYPE_NOTE); + js.put(GTaskStringUtils.META_HEAD_NOTE, note); + return js; + } else { + // synced task + JSONObject note = mMetaInfo.getJSONObject(GTaskStringUtils.META_HEAD_NOTE); + JSONArray dataArray = mMetaInfo.getJSONArray(GTaskStringUtils.META_HEAD_DATA); + + for (int i = 0; i < dataArray.length(); i++) { + JSONObject data = dataArray.getJSONObject(i); + if (TextUtils.equals(data.getString(DataColumns.MIME_TYPE), DataConstants.NOTE)) { + data.put(DataColumns.CONTENT, getName()); + break; + } + } + + note.put(NoteColumns.TYPE, Notes.TYPE_NOTE); + return mMetaInfo; + } + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + return null; + } + } + + public void setMetaInfo(MetaData metaData) { + if (metaData != null && metaData.getNotes() != null) { + try { + mMetaInfo = new JSONObject(metaData.getNotes()); + } catch (JSONException e) { + Log.w(TAG, e.toString()); + mMetaInfo = null; + } + } + } + + public int getSyncAction(Cursor c) { + try { + JSONObject noteInfo = null; + if (mMetaInfo != null && mMetaInfo.has(GTaskStringUtils.META_HEAD_NOTE)) { + noteInfo = mMetaInfo.getJSONObject(GTaskStringUtils.META_HEAD_NOTE); + } + + if (noteInfo == null) { + Log.w(TAG, "it seems that note meta has been deleted"); + return SYNC_ACTION_UPDATE_REMOTE; + } + + if (!noteInfo.has(NoteColumns.ID)) { + Log.w(TAG, "remote note id seems to be deleted"); + return SYNC_ACTION_UPDATE_LOCAL; + } + + // validate the note id now + if (c.getLong(SqlNote.ID_COLUMN) != noteInfo.getLong(NoteColumns.ID)) { + Log.w(TAG, "note id doesn't match"); + return SYNC_ACTION_UPDATE_LOCAL; + } + + if (c.getInt(SqlNote.LOCAL_MODIFIED_COLUMN) == 0) { + // there is no local update + if (c.getLong(SqlNote.SYNC_ID_COLUMN) == getLastModified()) { + // no update both side + return SYNC_ACTION_NONE; + } else { + // apply remote to local + return SYNC_ACTION_UPDATE_LOCAL; + } + } else { + // validate gtask id + if (!c.getString(SqlNote.GTASK_ID_COLUMN).equals(getGid())) { + Log.e(TAG, "gtask id doesn't match"); + return SYNC_ACTION_ERROR; + } + if (c.getLong(SqlNote.SYNC_ID_COLUMN) == getLastModified()) { + // local modification only + return SYNC_ACTION_UPDATE_REMOTE; + } else { + return SYNC_ACTION_UPDATE_CONFLICT; + } + } + } catch (Exception e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + } + + return SYNC_ACTION_ERROR; + } + + public boolean isWorthSaving() { + return mMetaInfo != null || (getName() != null && getName().trim().length() > 0) + || (getNotes() != null && getNotes().trim().length() > 0); + } + + public void setCompleted(boolean completed) { + this.mCompleted = completed; + } + + public void setNotes(String notes) { + this.mNotes = notes; + } + + public void setPriorSibling(Task priorSibling) { + this.mPriorSibling = priorSibling; + } + + public void setParent(TaskList parent) { + this.mParent = parent; + } + + public boolean getCompleted() { + return this.mCompleted; + } + + public String getNotes() { + return this.mNotes; + } + + public Task getPriorSibling() { + return this.mPriorSibling; + } + + public TaskList getParent() { + return this.mParent; + } + +} diff --git a/java/net/micode/notes/gtask/data/TaskList.java b/java/net/micode/notes/gtask/data/TaskList.java new file mode 100644 index 0000000..4ea21c5 --- /dev/null +++ b/java/net/micode/notes/gtask/data/TaskList.java @@ -0,0 +1,343 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.gtask.data; + +import android.database.Cursor; +import android.util.Log; + +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.gtask.exception.ActionFailureException; +import net.micode.notes.tool.GTaskStringUtils; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; + + +public class TaskList extends Node { + private static final String TAG = TaskList.class.getSimpleName(); + + private int mIndex; + + private ArrayList mChildren; + + public TaskList() { + super(); + mChildren = new ArrayList(); + mIndex = 1; + } + + public JSONObject getCreateAction(int actionId) { + JSONObject js = new JSONObject(); + + try { + // action_type + js.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE, + GTaskStringUtils.GTASK_JSON_ACTION_TYPE_CREATE); + + // action_id + js.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, actionId); + + // index + js.put(GTaskStringUtils.GTASK_JSON_INDEX, mIndex); + + // entity_delta + JSONObject entity = new JSONObject(); + entity.put(GTaskStringUtils.GTASK_JSON_NAME, getName()); + entity.put(GTaskStringUtils.GTASK_JSON_CREATOR_ID, "null"); + entity.put(GTaskStringUtils.GTASK_JSON_ENTITY_TYPE, + GTaskStringUtils.GTASK_JSON_TYPE_GROUP); + js.put(GTaskStringUtils.GTASK_JSON_ENTITY_DELTA, entity); + + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("fail to generate tasklist-create jsonobject"); + } + + return js; + } + + public JSONObject getUpdateAction(int actionId) { + JSONObject js = new JSONObject(); + + try { + // action_type + js.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE, + GTaskStringUtils.GTASK_JSON_ACTION_TYPE_UPDATE); + + // action_id + js.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, actionId); + + // id + js.put(GTaskStringUtils.GTASK_JSON_ID, getGid()); + + // entity_delta + JSONObject entity = new JSONObject(); + entity.put(GTaskStringUtils.GTASK_JSON_NAME, getName()); + entity.put(GTaskStringUtils.GTASK_JSON_DELETED, getDeleted()); + js.put(GTaskStringUtils.GTASK_JSON_ENTITY_DELTA, entity); + + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("fail to generate tasklist-update jsonobject"); + } + + return js; + } + + public void setContentByRemoteJSON(JSONObject js) { + if (js != null) { + try { + // id + if (js.has(GTaskStringUtils.GTASK_JSON_ID)) { + setGid(js.getString(GTaskStringUtils.GTASK_JSON_ID)); + } + + // last_modified + if (js.has(GTaskStringUtils.GTASK_JSON_LAST_MODIFIED)) { + setLastModified(js.getLong(GTaskStringUtils.GTASK_JSON_LAST_MODIFIED)); + } + + // name + if (js.has(GTaskStringUtils.GTASK_JSON_NAME)) { + setName(js.getString(GTaskStringUtils.GTASK_JSON_NAME)); + } + + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("fail to get tasklist content from jsonobject"); + } + } + } + + public void setContentByLocalJSON(JSONObject js) { + if (js == null || !js.has(GTaskStringUtils.META_HEAD_NOTE)) { + Log.w(TAG, "setContentByLocalJSON: nothing is avaiable"); + } + + try { + JSONObject folder = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE); + + if (folder.getInt(NoteColumns.TYPE) == Notes.TYPE_FOLDER) { + String name = folder.getString(NoteColumns.SNIPPET); + setName(GTaskStringUtils.MIUI_FOLDER_PREFFIX + name); + } else if (folder.getInt(NoteColumns.TYPE) == Notes.TYPE_SYSTEM) { + if (folder.getLong(NoteColumns.ID) == Notes.ID_ROOT_FOLDER) + setName(GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_DEFAULT); + else if (folder.getLong(NoteColumns.ID) == Notes.ID_CALL_RECORD_FOLDER) + setName(GTaskStringUtils.MIUI_FOLDER_PREFFIX + + GTaskStringUtils.FOLDER_CALL_NOTE); + else + Log.e(TAG, "invalid system folder"); + } else { + Log.e(TAG, "error type"); + } + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + } + } + + public JSONObject getLocalJSONFromContent() { + try { + JSONObject js = new JSONObject(); + JSONObject folder = new JSONObject(); + + String folderName = getName(); + if (getName().startsWith(GTaskStringUtils.MIUI_FOLDER_PREFFIX)) + folderName = folderName.substring(GTaskStringUtils.MIUI_FOLDER_PREFFIX.length(), + folderName.length()); + folder.put(NoteColumns.SNIPPET, folderName); + if (folderName.equals(GTaskStringUtils.FOLDER_DEFAULT) + || folderName.equals(GTaskStringUtils.FOLDER_CALL_NOTE)) + folder.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); + else + folder.put(NoteColumns.TYPE, Notes.TYPE_FOLDER); + + js.put(GTaskStringUtils.META_HEAD_NOTE, folder); + + return js; + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + return null; + } + } + + public int getSyncAction(Cursor c) { + try { + if (c.getInt(SqlNote.LOCAL_MODIFIED_COLUMN) == 0) { + // there is no local update + if (c.getLong(SqlNote.SYNC_ID_COLUMN) == getLastModified()) { + // no update both side + return SYNC_ACTION_NONE; + } else { + // apply remote to local + return SYNC_ACTION_UPDATE_LOCAL; + } + } else { + // validate gtask id + if (!c.getString(SqlNote.GTASK_ID_COLUMN).equals(getGid())) { + Log.e(TAG, "gtask id doesn't match"); + return SYNC_ACTION_ERROR; + } + if (c.getLong(SqlNote.SYNC_ID_COLUMN) == getLastModified()) { + // local modification only + return SYNC_ACTION_UPDATE_REMOTE; + } else { + // for folder conflicts, just apply local modification + return SYNC_ACTION_UPDATE_REMOTE; + } + } + } catch (Exception e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + } + + return SYNC_ACTION_ERROR; + } + + public int getChildTaskCount() { + return mChildren.size(); + } + + public boolean addChildTask(Task task) { + boolean ret = false; + if (task != null && !mChildren.contains(task)) { + ret = mChildren.add(task); + if (ret) { + // need to set prior sibling and parent + task.setPriorSibling(mChildren.isEmpty() ? null : mChildren + .get(mChildren.size() - 1)); + task.setParent(this); + } + } + return ret; + } + + public boolean addChildTask(Task task, int index) { + if (index < 0 || index > mChildren.size()) { + Log.e(TAG, "add child task: invalid index"); + return false; + } + + int pos = mChildren.indexOf(task); + if (task != null && pos == -1) { + mChildren.add(index, task); + + // update the task list + Task preTask = null; + Task afterTask = null; + if (index != 0) + preTask = mChildren.get(index - 1); + if (index != mChildren.size() - 1) + afterTask = mChildren.get(index + 1); + + task.setPriorSibling(preTask); + if (afterTask != null) + afterTask.setPriorSibling(task); + } + + return true; + } + + public boolean removeChildTask(Task task) { + boolean ret = false; + int index = mChildren.indexOf(task); + if (index != -1) { + ret = mChildren.remove(task); + + if (ret) { + // reset prior sibling and parent + task.setPriorSibling(null); + task.setParent(null); + + // update the task list + if (index != mChildren.size()) { + mChildren.get(index).setPriorSibling( + index == 0 ? null : mChildren.get(index - 1)); + } + } + } + return ret; + } + + public boolean moveChildTask(Task task, int index) { + + if (index < 0 || index >= mChildren.size()) { + Log.e(TAG, "move child task: invalid index"); + return false; + } + + int pos = mChildren.indexOf(task); + if (pos == -1) { + Log.e(TAG, "move child task: the task should in the list"); + return false; + } + + if (pos == index) + return true; + return (removeChildTask(task) && addChildTask(task, index)); + } + + public Task findChildTaskByGid(String gid) { + for (int i = 0; i < mChildren.size(); i++) { + Task t = mChildren.get(i); + if (t.getGid().equals(gid)) { + return t; + } + } + return null; + } + + public int getChildTaskIndex(Task task) { + return mChildren.indexOf(task); + } + + public Task getChildTaskByIndex(int index) { + if (index < 0 || index >= mChildren.size()) { + Log.e(TAG, "getTaskByIndex: invalid index"); + return null; + } + return mChildren.get(index); + } + + public Task getChilTaskByGid(String gid) { + for (Task task : mChildren) { + if (task.getGid().equals(gid)) + return task; + } + return null; + } + + public ArrayList getChildTaskList() { + return this.mChildren; + } + + public void setIndex(int index) { + this.mIndex = index; + } + + public int getIndex() { + return this.mIndex; + } +} diff --git a/java/net/micode/notes/gtask/exception/ActionFailureException.java b/java/net/micode/notes/gtask/exception/ActionFailureException.java new file mode 100644 index 0000000..15504be --- /dev/null +++ b/java/net/micode/notes/gtask/exception/ActionFailureException.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.gtask.exception; + +public class ActionFailureException extends RuntimeException { + private static final long serialVersionUID = 4425249765923293627L; + + public ActionFailureException() { + super(); + } + + public ActionFailureException(String paramString) { + super(paramString); + } + + public ActionFailureException(String paramString, Throwable paramThrowable) { + super(paramString, paramThrowable); + } +} diff --git a/java/net/micode/notes/gtask/exception/NetworkFailureException.java b/java/net/micode/notes/gtask/exception/NetworkFailureException.java new file mode 100644 index 0000000..b08cfb1 --- /dev/null +++ b/java/net/micode/notes/gtask/exception/NetworkFailureException.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.gtask.exception; + +public class NetworkFailureException extends Exception { + private static final long serialVersionUID = 2107610287180234136L; + + public NetworkFailureException() { + super(); + } + + public NetworkFailureException(String paramString) { + super(paramString); + } + + public NetworkFailureException(String paramString, Throwable paramThrowable) { + super(paramString, paramThrowable); + } +} diff --git a/java/net/micode/notes/gtask/remote/GTaskASyncTask.java b/java/net/micode/notes/gtask/remote/GTaskASyncTask.java new file mode 100644 index 0000000..3679b5d --- /dev/null +++ b/java/net/micode/notes/gtask/remote/GTaskASyncTask.java @@ -0,0 +1,143 @@ + +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.gtask.remote; + +import android.app.Notification; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.os.AsyncTask; + +import net.micode.notes.R; +import net.micode.notes.ui.NotesListActivity; +import net.micode.notes.ui.NotesPreferenceActivity; + + +public class GTaskASyncTask extends AsyncTask { + + private static int GTASK_SYNC_NOTIFICATION_ID = 5234235; + + public interface OnCompleteListener { + void onComplete(); + } + + private Context mContext; + + private NotificationManager mNotifiManager; + + private GTaskManager mTaskManager; + + private OnCompleteListener mOnCompleteListener; + + public GTaskASyncTask(Context context, OnCompleteListener listener) { + mContext = context; + mOnCompleteListener = listener; + mNotifiManager = (NotificationManager) mContext + .getSystemService(Context.NOTIFICATION_SERVICE); + mTaskManager = GTaskManager.getInstance(); + } + + public void cancelSync() { + mTaskManager.cancelSync(); + } + + public void publishProgess(String message) { + publishProgress(new String[] { + message + }); + } + +// private void showNotification(int tickerId, String content) { +// Notification notification = new Notification(R.drawable.notification, mContext +// .getString(tickerId), System.currentTimeMillis()); +// notification.defaults = Notification.DEFAULT_LIGHTS; +// notification.flags = Notification.FLAG_AUTO_CANCEL; +// PendingIntent pendingIntent; +// if (tickerId != R.string.ticker_success) { +// pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext, +// NotesPreferenceActivity.class), 0); +// +// } else { +// pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext, +// NotesListActivity.class), 0); +// } +// notification.setLatestEventInfo(mContext, mContext.getString(R.string.app_name), content, +// pendingIntent); +// mNotifiManager.notify(GTASK_SYNC_NOTIFICATION_ID, notification); +// } +private void showNotification(int tickerId, String content) { + PendingIntent pendingIntent; + if (tickerId != R.string.ticker_success) { + pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext, + NotesPreferenceActivity.class), PendingIntent.FLAG_IMMUTABLE); + } else { + pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext, + NotesListActivity.class), PendingIntent.FLAG_IMMUTABLE); + } + Notification.Builder builder = new Notification.Builder(mContext) + .setAutoCancel(true) + .setContentTitle(mContext.getString(R.string.app_name)) + .setContentText(content) + .setContentIntent(pendingIntent) + .setWhen(System.currentTimeMillis()) + .setOngoing(true); + Notification notification=builder.getNotification(); + mNotifiManager.notify(GTASK_SYNC_NOTIFICATION_ID, notification); +} + + + @Override + protected Integer doInBackground(Void... unused) { + publishProgess(mContext.getString(R.string.sync_progress_login, NotesPreferenceActivity + .getSyncAccountName(mContext))); + return mTaskManager.sync(mContext, this); + } + + @Override + protected void onProgressUpdate(String... progress) { + showNotification(R.string.ticker_syncing, progress[0]); + if (mContext instanceof GTaskSyncService) { + ((GTaskSyncService) mContext).sendBroadcast(progress[0]); + } + } + + @Override + protected void onPostExecute(Integer result) { + if (result == GTaskManager.STATE_SUCCESS) { + showNotification(R.string.ticker_success, mContext.getString( + R.string.success_sync_account, mTaskManager.getSyncAccount())); + NotesPreferenceActivity.setLastSyncTime(mContext, System.currentTimeMillis()); + } else if (result == GTaskManager.STATE_NETWORK_ERROR) { + showNotification(R.string.ticker_fail, mContext.getString(R.string.error_sync_network)); + } else if (result == GTaskManager.STATE_INTERNAL_ERROR) { + showNotification(R.string.ticker_fail, mContext.getString(R.string.error_sync_internal)); + } else if (result == GTaskManager.STATE_SYNC_CANCELLED) { + showNotification(R.string.ticker_cancel, mContext + .getString(R.string.error_sync_cancelled)); + } + if (mOnCompleteListener != null) { + new Thread(new Runnable() { + + public void run() { + mOnCompleteListener.onComplete(); + } + }).start(); + } + } +} diff --git a/java/net/micode/notes/gtask/remote/GTaskClient.java b/java/net/micode/notes/gtask/remote/GTaskClient.java new file mode 100644 index 0000000..c67dfdf --- /dev/null +++ b/java/net/micode/notes/gtask/remote/GTaskClient.java @@ -0,0 +1,585 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.gtask.remote; + +import android.accounts.Account; +import android.accounts.AccountManager; +import android.accounts.AccountManagerFuture; +import android.app.Activity; +import android.os.Bundle; +import android.text.TextUtils; +import android.util.Log; + +import net.micode.notes.gtask.data.Node; +import net.micode.notes.gtask.data.Task; +import net.micode.notes.gtask.data.TaskList; +import net.micode.notes.gtask.exception.ActionFailureException; +import net.micode.notes.gtask.exception.NetworkFailureException; +import net.micode.notes.tool.GTaskStringUtils; +import net.micode.notes.ui.NotesPreferenceActivity; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.client.ClientProtocolException; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.cookie.Cookie; +import org.apache.http.impl.client.BasicCookieStore; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.params.BasicHttpParams; +import org.apache.http.params.HttpConnectionParams; +import org.apache.http.params.HttpParams; +import org.apache.http.params.HttpProtocolParams; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.LinkedList; +import java.util.List; +import java.util.zip.GZIPInputStream; +import java.util.zip.Inflater; +import java.util.zip.InflaterInputStream; + + +public class GTaskClient { + private static final String TAG = GTaskClient.class.getSimpleName(); + + private static final String GTASK_URL = "https://mail.google.com/tasks/"; + + private static final String GTASK_GET_URL = "https://mail.google.com/tasks/ig"; + + private static final String GTASK_POST_URL = "https://mail.google.com/tasks/r/ig"; + + private static GTaskClient mInstance = null; + + private DefaultHttpClient mHttpClient; + + private String mGetUrl; + + private String mPostUrl; + + private long mClientVersion; + + private boolean mLoggedin; + + private long mLastLoginTime; + + private int mActionId; + + private Account mAccount; + + private JSONArray mUpdateArray; + + private GTaskClient() { + mHttpClient = null; + mGetUrl = GTASK_GET_URL; + mPostUrl = GTASK_POST_URL; + mClientVersion = -1; + mLoggedin = false; + mLastLoginTime = 0; + mActionId = 1; + mAccount = null; + mUpdateArray = null; + } + + public static synchronized GTaskClient getInstance() { + if (mInstance == null) { + mInstance = new GTaskClient(); + } + return mInstance; + } + + public boolean login(Activity activity) { + // we suppose that the cookie would expire after 5 minutes + // then we need to re-login + final long interval = 1000 * 60 * 5; + if (mLastLoginTime + interval < System.currentTimeMillis()) { + mLoggedin = false; + } + + // need to re-login after account switch + if (mLoggedin + && !TextUtils.equals(getSyncAccount().name, NotesPreferenceActivity + .getSyncAccountName(activity))) { + mLoggedin = false; + } + + if (mLoggedin) { + Log.d(TAG, "already logged in"); + return true; + } + + mLastLoginTime = System.currentTimeMillis(); + String authToken = loginGoogleAccount(activity, false); + if (authToken == null) { + Log.e(TAG, "login google account failed"); + return false; + } + + // login with custom domain if necessary + if (!(mAccount.name.toLowerCase().endsWith("gmail.com") || mAccount.name.toLowerCase() + .endsWith("googlemail.com"))) { + StringBuilder url = new StringBuilder(GTASK_URL).append("a/"); + int index = mAccount.name.indexOf('@') + 1; + String suffix = mAccount.name.substring(index); + url.append(suffix + "/"); + mGetUrl = url.toString() + "ig"; + mPostUrl = url.toString() + "r/ig"; + + if (tryToLoginGtask(activity, authToken)) { + mLoggedin = true; + } + } + + // try to login with google official url + if (!mLoggedin) { + mGetUrl = GTASK_GET_URL; + mPostUrl = GTASK_POST_URL; + if (!tryToLoginGtask(activity, authToken)) { + return false; + } + } + + mLoggedin = true; + return true; + } + + private String loginGoogleAccount(Activity activity, boolean invalidateToken) { + String authToken; + AccountManager accountManager = AccountManager.get(activity); + Account[] accounts = accountManager.getAccountsByType("com.google"); + + if (accounts.length == 0) { + Log.e(TAG, "there is no available google account"); + return null; + } + + String accountName = NotesPreferenceActivity.getSyncAccountName(activity); + Account account = null; + for (Account a : accounts) { + if (a.name.equals(accountName)) { + account = a; + break; + } + } + if (account != null) { + mAccount = account; + } else { + Log.e(TAG, "unable to get an account with the same name in the settings"); + return null; + } + + // get the token now + AccountManagerFuture accountManagerFuture = accountManager.getAuthToken(account, + "goanna_mobile", null, activity, null, null); + try { + Bundle authTokenBundle = accountManagerFuture.getResult(); + authToken = authTokenBundle.getString(AccountManager.KEY_AUTHTOKEN); + if (invalidateToken) { + accountManager.invalidateAuthToken("com.google", authToken); + loginGoogleAccount(activity, false); + } + } catch (Exception e) { + Log.e(TAG, "get auth token failed"); + authToken = null; + } + + return authToken; + } + + private boolean tryToLoginGtask(Activity activity, String authToken) { + if (!loginGtask(authToken)) { + // maybe the auth token is out of date, now let's invalidate the + // token and try again + authToken = loginGoogleAccount(activity, true); + if (authToken == null) { + Log.e(TAG, "login google account failed"); + return false; + } + + if (!loginGtask(authToken)) { + Log.e(TAG, "login gtask failed"); + return false; + } + } + return true; + } + + private boolean loginGtask(String authToken) { + int timeoutConnection = 10000; + int timeoutSocket = 15000; + HttpParams httpParameters = new BasicHttpParams(); + HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection); + HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket); + mHttpClient = new DefaultHttpClient(httpParameters); + BasicCookieStore localBasicCookieStore = new BasicCookieStore(); + mHttpClient.setCookieStore(localBasicCookieStore); + HttpProtocolParams.setUseExpectContinue(mHttpClient.getParams(), false); + + // login gtask + try { + String loginUrl = mGetUrl + "?auth=" + authToken; + HttpGet httpGet = new HttpGet(loginUrl); + HttpResponse response = null; + response = mHttpClient.execute(httpGet); + + // get the cookie now + List cookies = mHttpClient.getCookieStore().getCookies(); + boolean hasAuthCookie = false; + for (Cookie cookie : cookies) { + if (cookie.getName().contains("GTL")) { + hasAuthCookie = true; + } + } + if (!hasAuthCookie) { + Log.w(TAG, "it seems that there is no auth cookie"); + } + + // get the client version + String resString = getResponseContent(response.getEntity()); + String jsBegin = "_setup("; + String jsEnd = ")}"; + int begin = resString.indexOf(jsBegin); + int end = resString.lastIndexOf(jsEnd); + String jsString = null; + if (begin != -1 && end != -1 && begin < end) { + jsString = resString.substring(begin + jsBegin.length(), end); + } + JSONObject js = new JSONObject(jsString); + mClientVersion = js.getLong("v"); + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + return false; + } catch (Exception e) { + // simply catch all exceptions + Log.e(TAG, "httpget gtask_url failed"); + return false; + } + + return true; + } + + private int getActionId() { + return mActionId++; + } + + private HttpPost createHttpPost() { + HttpPost httpPost = new HttpPost(mPostUrl); + httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8"); + httpPost.setHeader("AT", "1"); + return httpPost; + } + + private String getResponseContent(HttpEntity entity) throws IOException { + String contentEncoding = null; + if (entity.getContentEncoding() != null) { + contentEncoding = entity.getContentEncoding().getValue(); + Log.d(TAG, "encoding: " + contentEncoding); + } + + InputStream input = entity.getContent(); + if (contentEncoding != null && contentEncoding.equalsIgnoreCase("gzip")) { + input = new GZIPInputStream(entity.getContent()); + } else if (contentEncoding != null && contentEncoding.equalsIgnoreCase("deflate")) { + Inflater inflater = new Inflater(true); + input = new InflaterInputStream(entity.getContent(), inflater); + } + + try { + InputStreamReader isr = new InputStreamReader(input); + BufferedReader br = new BufferedReader(isr); + StringBuilder sb = new StringBuilder(); + + while (true) { + String buff = br.readLine(); + if (buff == null) { + return sb.toString(); + } + sb = sb.append(buff); + } + } finally { + input.close(); + } + } + + private JSONObject postRequest(JSONObject js) throws NetworkFailureException { + if (!mLoggedin) { + Log.e(TAG, "please login first"); + throw new ActionFailureException("not logged in"); + } + + HttpPost httpPost = createHttpPost(); + try { + LinkedList list = new LinkedList(); + list.add(new BasicNameValuePair("r", js.toString())); + UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list, "UTF-8"); + httpPost.setEntity(entity); + + // execute the post + HttpResponse response = mHttpClient.execute(httpPost); + String jsString = getResponseContent(response.getEntity()); + return new JSONObject(jsString); + + } catch (ClientProtocolException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new NetworkFailureException("postRequest failed"); + } catch (IOException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new NetworkFailureException("postRequest failed"); + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("unable to convert response content to jsonobject"); + } catch (Exception e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("error occurs when posting request"); + } + } + + public void createTask(Task task) throws NetworkFailureException { + commitUpdate(); + try { + JSONObject jsPost = new JSONObject(); + JSONArray actionList = new JSONArray(); + + // action_list + actionList.put(task.getCreateAction(getActionId())); + jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, actionList); + + // client_version + jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion); + + // post + JSONObject jsResponse = postRequest(jsPost); + JSONObject jsResult = (JSONObject) jsResponse.getJSONArray( + GTaskStringUtils.GTASK_JSON_RESULTS).get(0); + task.setGid(jsResult.getString(GTaskStringUtils.GTASK_JSON_NEW_ID)); + + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("create task: handing jsonobject failed"); + } + } + + public void createTaskList(TaskList tasklist) throws NetworkFailureException { + commitUpdate(); + try { + JSONObject jsPost = new JSONObject(); + JSONArray actionList = new JSONArray(); + + // action_list + actionList.put(tasklist.getCreateAction(getActionId())); + jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, actionList); + + // client version + jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion); + + // post + JSONObject jsResponse = postRequest(jsPost); + JSONObject jsResult = (JSONObject) jsResponse.getJSONArray( + GTaskStringUtils.GTASK_JSON_RESULTS).get(0); + tasklist.setGid(jsResult.getString(GTaskStringUtils.GTASK_JSON_NEW_ID)); + + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("create tasklist: handing jsonobject failed"); + } + } + + public void commitUpdate() throws NetworkFailureException { + if (mUpdateArray != null) { + try { + JSONObject jsPost = new JSONObject(); + + // action_list + jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, mUpdateArray); + + // client_version + jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion); + + postRequest(jsPost); + mUpdateArray = null; + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("commit update: handing jsonobject failed"); + } + } + } + + public void addUpdateNode(Node node) throws NetworkFailureException { + if (node != null) { + // too many update items may result in an error + // set max to 10 items + if (mUpdateArray != null && mUpdateArray.length() > 10) { + commitUpdate(); + } + + if (mUpdateArray == null) + mUpdateArray = new JSONArray(); + mUpdateArray.put(node.getUpdateAction(getActionId())); + } + } + + public void moveTask(Task task, TaskList preParent, TaskList curParent) + throws NetworkFailureException { + commitUpdate(); + try { + JSONObject jsPost = new JSONObject(); + JSONArray actionList = new JSONArray(); + JSONObject action = new JSONObject(); + + // action_list + action.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE, + GTaskStringUtils.GTASK_JSON_ACTION_TYPE_MOVE); + action.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, getActionId()); + action.put(GTaskStringUtils.GTASK_JSON_ID, task.getGid()); + if (preParent == curParent && task.getPriorSibling() != null) { + // put prioring_sibing_id only if moving within the tasklist and + // it is not the first one + action.put(GTaskStringUtils.GTASK_JSON_PRIOR_SIBLING_ID, task.getPriorSibling()); + } + action.put(GTaskStringUtils.GTASK_JSON_SOURCE_LIST, preParent.getGid()); + action.put(GTaskStringUtils.GTASK_JSON_DEST_PARENT, curParent.getGid()); + if (preParent != curParent) { + // put the dest_list only if moving between tasklists + action.put(GTaskStringUtils.GTASK_JSON_DEST_LIST, curParent.getGid()); + } + actionList.put(action); + jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, actionList); + + // client_version + jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion); + + postRequest(jsPost); + + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("move task: handing jsonobject failed"); + } + } + + public void deleteNode(Node node) throws NetworkFailureException { + commitUpdate(); + try { + JSONObject jsPost = new JSONObject(); + JSONArray actionList = new JSONArray(); + + // action_list + node.setDeleted(true); + actionList.put(node.getUpdateAction(getActionId())); + jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, actionList); + + // client_version + jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion); + + postRequest(jsPost); + mUpdateArray = null; + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("delete node: handing jsonobject failed"); + } + } + + public JSONArray getTaskLists() throws NetworkFailureException { + if (!mLoggedin) { + Log.e(TAG, "please login first"); + throw new ActionFailureException("not logged in"); + } + + try { + HttpGet httpGet = new HttpGet(mGetUrl); + HttpResponse response = null; + response = mHttpClient.execute(httpGet); + + // get the task list + String resString = getResponseContent(response.getEntity()); + String jsBegin = "_setup("; + String jsEnd = ")}"; + int begin = resString.indexOf(jsBegin); + int end = resString.lastIndexOf(jsEnd); + String jsString = null; + if (begin != -1 && end != -1 && begin < end) { + jsString = resString.substring(begin + jsBegin.length(), end); + } + JSONObject js = new JSONObject(jsString); + return js.getJSONObject("t").getJSONArray(GTaskStringUtils.GTASK_JSON_LISTS); + } catch (ClientProtocolException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new NetworkFailureException("gettasklists: httpget failed"); + } catch (IOException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new NetworkFailureException("gettasklists: httpget failed"); + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("get task lists: handing jasonobject failed"); + } + } + + public JSONArray getTaskList(String listGid) throws NetworkFailureException { + commitUpdate(); + try { + JSONObject jsPost = new JSONObject(); + JSONArray actionList = new JSONArray(); + JSONObject action = new JSONObject(); + + // action_list + action.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE, + GTaskStringUtils.GTASK_JSON_ACTION_TYPE_GETALL); + action.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, getActionId()); + action.put(GTaskStringUtils.GTASK_JSON_LIST_ID, listGid); + action.put(GTaskStringUtils.GTASK_JSON_GET_DELETED, false); + actionList.put(action); + jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, actionList); + + // client_version + jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion); + + JSONObject jsResponse = postRequest(jsPost); + return jsResponse.getJSONArray(GTaskStringUtils.GTASK_JSON_TASKS); + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("get task list: handing jsonobject failed"); + } + } + + public Account getSyncAccount() { + return mAccount; + } + + public void resetUpdateArray() { + mUpdateArray = null; + } +} diff --git a/java/net/micode/notes/gtask/remote/GTaskManager.java b/java/net/micode/notes/gtask/remote/GTaskManager.java new file mode 100644 index 0000000..d2b4082 --- /dev/null +++ b/java/net/micode/notes/gtask/remote/GTaskManager.java @@ -0,0 +1,800 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.gtask.remote; + +import android.app.Activity; +import android.content.ContentResolver; +import android.content.ContentUris; +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +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.NoteColumns; +import net.micode.notes.gtask.data.MetaData; +import net.micode.notes.gtask.data.Node; +import net.micode.notes.gtask.data.SqlNote; +import net.micode.notes.gtask.data.Task; +import net.micode.notes.gtask.data.TaskList; +import net.micode.notes.gtask.exception.ActionFailureException; +import net.micode.notes.gtask.exception.NetworkFailureException; +import net.micode.notes.tool.DataUtils; +import net.micode.notes.tool.GTaskStringUtils; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Map; + + +public class GTaskManager { + private static final String TAG = GTaskManager.class.getSimpleName(); + + public static final int STATE_SUCCESS = 0; + + public static final int STATE_NETWORK_ERROR = 1; + + public static final int STATE_INTERNAL_ERROR = 2; + + public static final int STATE_SYNC_IN_PROGRESS = 3; + + public static final int STATE_SYNC_CANCELLED = 4; + + private static GTaskManager mInstance = null; + + private Activity mActivity; + + private Context mContext; + + private ContentResolver mContentResolver; + + private boolean mSyncing; + + private boolean mCancelled; + + private HashMap mGTaskListHashMap; + + private HashMap mGTaskHashMap; + + private HashMap mMetaHashMap; + + private TaskList mMetaList; + + private HashSet mLocalDeleteIdMap; + + private HashMap mGidToNid; + + private HashMap mNidToGid; + + private GTaskManager() { + mSyncing = false; + mCancelled = false; + mGTaskListHashMap = new HashMap(); + mGTaskHashMap = new HashMap(); + mMetaHashMap = new HashMap(); + mMetaList = null; + mLocalDeleteIdMap = new HashSet(); + mGidToNid = new HashMap(); + mNidToGid = new HashMap(); + } + + public static synchronized GTaskManager getInstance() { + if (mInstance == null) { + mInstance = new GTaskManager(); + } + return mInstance; + } + + public synchronized void setActivityContext(Activity activity) { + // used for getting authtoken + mActivity = activity; + } + + public int sync(Context context, GTaskASyncTask asyncTask) { + if (mSyncing) { + Log.d(TAG, "Sync is in progress"); + return STATE_SYNC_IN_PROGRESS; + } + mContext = context; + mContentResolver = mContext.getContentResolver(); + mSyncing = true; + mCancelled = false; + mGTaskListHashMap.clear(); + mGTaskHashMap.clear(); + mMetaHashMap.clear(); + mLocalDeleteIdMap.clear(); + mGidToNid.clear(); + mNidToGid.clear(); + + try { + GTaskClient client = GTaskClient.getInstance(); + client.resetUpdateArray(); + + // login google task + if (!mCancelled) { + if (!client.login(mActivity)) { + throw new NetworkFailureException("login google task failed"); + } + } + + // get the task list from google + asyncTask.publishProgess(mContext.getString(R.string.sync_progress_init_list)); + initGTaskList(); + + // do content sync work + asyncTask.publishProgess(mContext.getString(R.string.sync_progress_syncing)); + syncContent(); + } catch (NetworkFailureException e) { + Log.e(TAG, e.toString()); + return STATE_NETWORK_ERROR; + } catch (ActionFailureException e) { + Log.e(TAG, e.toString()); + return STATE_INTERNAL_ERROR; + } catch (Exception e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + return STATE_INTERNAL_ERROR; + } finally { + mGTaskListHashMap.clear(); + mGTaskHashMap.clear(); + mMetaHashMap.clear(); + mLocalDeleteIdMap.clear(); + mGidToNid.clear(); + mNidToGid.clear(); + mSyncing = false; + } + + return mCancelled ? STATE_SYNC_CANCELLED : STATE_SUCCESS; + } + + private void initGTaskList() throws NetworkFailureException { + if (mCancelled) + return; + GTaskClient client = GTaskClient.getInstance(); + try { + JSONArray jsTaskLists = client.getTaskLists(); + + // init meta list first + mMetaList = null; + for (int i = 0; i < jsTaskLists.length(); i++) { + JSONObject object = jsTaskLists.getJSONObject(i); + String gid = object.getString(GTaskStringUtils.GTASK_JSON_ID); + String name = object.getString(GTaskStringUtils.GTASK_JSON_NAME); + + if (name + .equals(GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_META)) { + mMetaList = new TaskList(); + mMetaList.setContentByRemoteJSON(object); + + // load meta data + JSONArray jsMetas = client.getTaskList(gid); + for (int j = 0; j < jsMetas.length(); j++) { + object = (JSONObject) jsMetas.getJSONObject(j); + MetaData metaData = new MetaData(); + metaData.setContentByRemoteJSON(object); + if (metaData.isWorthSaving()) { + mMetaList.addChildTask(metaData); + if (metaData.getGid() != null) { + mMetaHashMap.put(metaData.getRelatedGid(), metaData); + } + } + } + } + } + + // create meta list if not existed + if (mMetaList == null) { + mMetaList = new TaskList(); + mMetaList.setName(GTaskStringUtils.MIUI_FOLDER_PREFFIX + + GTaskStringUtils.FOLDER_META); + GTaskClient.getInstance().createTaskList(mMetaList); + } + + // init task list + for (int i = 0; i < jsTaskLists.length(); i++) { + JSONObject object = jsTaskLists.getJSONObject(i); + String gid = object.getString(GTaskStringUtils.GTASK_JSON_ID); + String name = object.getString(GTaskStringUtils.GTASK_JSON_NAME); + + if (name.startsWith(GTaskStringUtils.MIUI_FOLDER_PREFFIX) + && !name.equals(GTaskStringUtils.MIUI_FOLDER_PREFFIX + + GTaskStringUtils.FOLDER_META)) { + TaskList tasklist = new TaskList(); + tasklist.setContentByRemoteJSON(object); + mGTaskListHashMap.put(gid, tasklist); + mGTaskHashMap.put(gid, tasklist); + + // load tasks + JSONArray jsTasks = client.getTaskList(gid); + for (int j = 0; j < jsTasks.length(); j++) { + object = (JSONObject) jsTasks.getJSONObject(j); + gid = object.getString(GTaskStringUtils.GTASK_JSON_ID); + Task task = new Task(); + task.setContentByRemoteJSON(object); + if (task.isWorthSaving()) { + task.setMetaInfo(mMetaHashMap.get(gid)); + tasklist.addChildTask(task); + mGTaskHashMap.put(gid, task); + } + } + } + } + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("initGTaskList: handing JSONObject failed"); + } + } + + private void syncContent() throws NetworkFailureException { + int syncType; + Cursor c = null; + String gid; + Node node; + + mLocalDeleteIdMap.clear(); + + if (mCancelled) { + return; + } + + // for local deleted note + try { + c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE, + "(type<>? AND parent_id=?)", new String[] { + String.valueOf(Notes.TYPE_SYSTEM), String.valueOf(Notes.ID_TRASH_FOLER) + }, null); + if (c != null) { + while (c.moveToNext()) { + gid = c.getString(SqlNote.GTASK_ID_COLUMN); + node = mGTaskHashMap.get(gid); + if (node != null) { + mGTaskHashMap.remove(gid); + doContentSync(Node.SYNC_ACTION_DEL_REMOTE, node, c); + } + + mLocalDeleteIdMap.add(c.getLong(SqlNote.ID_COLUMN)); + } + } else { + Log.w(TAG, "failed to query trash folder"); + } + } finally { + if (c != null) { + c.close(); + c = null; + } + } + + // sync folder first + syncFolder(); + + // for note existing in database + try { + c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE, + "(type=? AND parent_id<>?)", new String[] { + String.valueOf(Notes.TYPE_NOTE), String.valueOf(Notes.ID_TRASH_FOLER) + }, NoteColumns.TYPE + " DESC"); + if (c != null) { + while (c.moveToNext()) { + gid = c.getString(SqlNote.GTASK_ID_COLUMN); + node = mGTaskHashMap.get(gid); + if (node != null) { + mGTaskHashMap.remove(gid); + mGidToNid.put(gid, c.getLong(SqlNote.ID_COLUMN)); + mNidToGid.put(c.getLong(SqlNote.ID_COLUMN), gid); + syncType = node.getSyncAction(c); + } else { + if (c.getString(SqlNote.GTASK_ID_COLUMN).trim().length() == 0) { + // local add + syncType = Node.SYNC_ACTION_ADD_REMOTE; + } else { + // remote delete + syncType = Node.SYNC_ACTION_DEL_LOCAL; + } + } + doContentSync(syncType, node, c); + } + } else { + Log.w(TAG, "failed to query existing note in database"); + } + + } finally { + if (c != null) { + c.close(); + c = null; + } + } + + // go through remaining items + Iterator> iter = mGTaskHashMap.entrySet().iterator(); + while (iter.hasNext()) { + Map.Entry entry = iter.next(); + node = entry.getValue(); + doContentSync(Node.SYNC_ACTION_ADD_LOCAL, node, null); + } + + // mCancelled can be set by another thread, so we neet to check one by + // one + // clear local delete table + if (!mCancelled) { + if (!DataUtils.batchDeleteNotes(mContentResolver, mLocalDeleteIdMap)) { + throw new ActionFailureException("failed to batch-delete local deleted notes"); + } + } + + // refresh local sync id + if (!mCancelled) { + GTaskClient.getInstance().commitUpdate(); + refreshLocalSyncId(); + } + + } + + private void syncFolder() throws NetworkFailureException { + Cursor c = null; + String gid; + Node node; + int syncType; + + if (mCancelled) { + return; + } + + // for root folder + try { + c = mContentResolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, + Notes.ID_ROOT_FOLDER), SqlNote.PROJECTION_NOTE, null, null, null); + if (c != null) { + c.moveToNext(); + gid = c.getString(SqlNote.GTASK_ID_COLUMN); + node = mGTaskHashMap.get(gid); + if (node != null) { + mGTaskHashMap.remove(gid); + mGidToNid.put(gid, (long) Notes.ID_ROOT_FOLDER); + mNidToGid.put((long) Notes.ID_ROOT_FOLDER, gid); + // for system folder, only update remote name if necessary + if (!node.getName().equals( + GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_DEFAULT)) + doContentSync(Node.SYNC_ACTION_UPDATE_REMOTE, node, c); + } else { + doContentSync(Node.SYNC_ACTION_ADD_REMOTE, node, c); + } + } else { + Log.w(TAG, "failed to query root folder"); + } + } finally { + if (c != null) { + c.close(); + c = null; + } + } + + // for call-note folder + try { + c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE, "(_id=?)", + new String[] { + String.valueOf(Notes.ID_CALL_RECORD_FOLDER) + }, null); + if (c != null) { + if (c.moveToNext()) { + gid = c.getString(SqlNote.GTASK_ID_COLUMN); + node = mGTaskHashMap.get(gid); + if (node != null) { + mGTaskHashMap.remove(gid); + mGidToNid.put(gid, (long) Notes.ID_CALL_RECORD_FOLDER); + mNidToGid.put((long) Notes.ID_CALL_RECORD_FOLDER, gid); + // for system folder, only update remote name if + // necessary + if (!node.getName().equals( + GTaskStringUtils.MIUI_FOLDER_PREFFIX + + GTaskStringUtils.FOLDER_CALL_NOTE)) + doContentSync(Node.SYNC_ACTION_UPDATE_REMOTE, node, c); + } else { + doContentSync(Node.SYNC_ACTION_ADD_REMOTE, node, c); + } + } + } else { + Log.w(TAG, "failed to query call note folder"); + } + } finally { + if (c != null) { + c.close(); + c = null; + } + } + + // for local existing folders + try { + c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE, + "(type=? AND parent_id<>?)", new String[] { + String.valueOf(Notes.TYPE_FOLDER), String.valueOf(Notes.ID_TRASH_FOLER) + }, NoteColumns.TYPE + " DESC"); + if (c != null) { + while (c.moveToNext()) { + gid = c.getString(SqlNote.GTASK_ID_COLUMN); + node = mGTaskHashMap.get(gid); + if (node != null) { + mGTaskHashMap.remove(gid); + mGidToNid.put(gid, c.getLong(SqlNote.ID_COLUMN)); + mNidToGid.put(c.getLong(SqlNote.ID_COLUMN), gid); + syncType = node.getSyncAction(c); + } else { + if (c.getString(SqlNote.GTASK_ID_COLUMN).trim().length() == 0) { + // local add + syncType = Node.SYNC_ACTION_ADD_REMOTE; + } else { + // remote delete + syncType = Node.SYNC_ACTION_DEL_LOCAL; + } + } + doContentSync(syncType, node, c); + } + } else { + Log.w(TAG, "failed to query existing folder"); + } + } finally { + if (c != null) { + c.close(); + c = null; + } + } + + // for remote add folders + Iterator> iter = mGTaskListHashMap.entrySet().iterator(); + while (iter.hasNext()) { + Map.Entry entry = iter.next(); + gid = entry.getKey(); + node = entry.getValue(); + if (mGTaskHashMap.containsKey(gid)) { + mGTaskHashMap.remove(gid); + doContentSync(Node.SYNC_ACTION_ADD_LOCAL, node, null); + } + } + + if (!mCancelled) + GTaskClient.getInstance().commitUpdate(); + } + + private void doContentSync(int syncType, Node node, Cursor c) throws NetworkFailureException { + if (mCancelled) { + return; + } + + MetaData meta; + switch (syncType) { + case Node.SYNC_ACTION_ADD_LOCAL: + addLocalNode(node); + break; + case Node.SYNC_ACTION_ADD_REMOTE: + addRemoteNode(node, c); + break; + case Node.SYNC_ACTION_DEL_LOCAL: + meta = mMetaHashMap.get(c.getString(SqlNote.GTASK_ID_COLUMN)); + if (meta != null) { + GTaskClient.getInstance().deleteNode(meta); + } + mLocalDeleteIdMap.add(c.getLong(SqlNote.ID_COLUMN)); + break; + case Node.SYNC_ACTION_DEL_REMOTE: + meta = mMetaHashMap.get(node.getGid()); + if (meta != null) { + GTaskClient.getInstance().deleteNode(meta); + } + GTaskClient.getInstance().deleteNode(node); + break; + case Node.SYNC_ACTION_UPDATE_LOCAL: + updateLocalNode(node, c); + break; + case Node.SYNC_ACTION_UPDATE_REMOTE: + updateRemoteNode(node, c); + break; + case Node.SYNC_ACTION_UPDATE_CONFLICT: + // merging both modifications maybe a good idea + // right now just use local update simply + updateRemoteNode(node, c); + break; + case Node.SYNC_ACTION_NONE: + break; + case Node.SYNC_ACTION_ERROR: + default: + throw new ActionFailureException("unkown sync action type"); + } + } + + private void addLocalNode(Node node) throws NetworkFailureException { + if (mCancelled) { + return; + } + + SqlNote sqlNote; + if (node instanceof TaskList) { + if (node.getName().equals( + GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_DEFAULT)) { + sqlNote = new SqlNote(mContext, Notes.ID_ROOT_FOLDER); + } else if (node.getName().equals( + GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_CALL_NOTE)) { + sqlNote = new SqlNote(mContext, Notes.ID_CALL_RECORD_FOLDER); + } else { + sqlNote = new SqlNote(mContext); + sqlNote.setContent(node.getLocalJSONFromContent()); + sqlNote.setParentId(Notes.ID_ROOT_FOLDER); + } + } else { + sqlNote = new SqlNote(mContext); + JSONObject js = node.getLocalJSONFromContent(); + try { + if (js.has(GTaskStringUtils.META_HEAD_NOTE)) { + JSONObject note = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE); + if (note.has(NoteColumns.ID)) { + long id = note.getLong(NoteColumns.ID); + if (DataUtils.existInNoteDatabase(mContentResolver, id)) { + // the id is not available, have to create a new one + note.remove(NoteColumns.ID); + } + } + } + + if (js.has(GTaskStringUtils.META_HEAD_DATA)) { + JSONArray dataArray = js.getJSONArray(GTaskStringUtils.META_HEAD_DATA); + for (int i = 0; i < dataArray.length(); i++) { + JSONObject data = dataArray.getJSONObject(i); + if (data.has(DataColumns.ID)) { + long dataId = data.getLong(DataColumns.ID); + if (DataUtils.existInDataDatabase(mContentResolver, dataId)) { + // the data id is not available, have to create + // a new one + data.remove(DataColumns.ID); + } + } + } + + } + } catch (JSONException e) { + Log.w(TAG, e.toString()); + e.printStackTrace(); + } + sqlNote.setContent(js); + + Long parentId = mGidToNid.get(((Task) node).getParent().getGid()); + if (parentId == null) { + Log.e(TAG, "cannot find task's parent id locally"); + throw new ActionFailureException("cannot add local node"); + } + sqlNote.setParentId(parentId.longValue()); + } + + // create the local node + sqlNote.setGtaskId(node.getGid()); + sqlNote.commit(false); + + // update gid-nid mapping + mGidToNid.put(node.getGid(), sqlNote.getId()); + mNidToGid.put(sqlNote.getId(), node.getGid()); + + // update meta + updateRemoteMeta(node.getGid(), sqlNote); + } + + private void updateLocalNode(Node node, Cursor c) throws NetworkFailureException { + if (mCancelled) { + return; + } + + SqlNote sqlNote; + // update the note locally + sqlNote = new SqlNote(mContext, c); + sqlNote.setContent(node.getLocalJSONFromContent()); + + Long parentId = (node instanceof Task) ? mGidToNid.get(((Task) node).getParent().getGid()) + : new Long(Notes.ID_ROOT_FOLDER); + if (parentId == null) { + Log.e(TAG, "cannot find task's parent id locally"); + throw new ActionFailureException("cannot update local node"); + } + sqlNote.setParentId(parentId.longValue()); + sqlNote.commit(true); + + // update meta info + updateRemoteMeta(node.getGid(), sqlNote); + } + + private void addRemoteNode(Node node, Cursor c) throws NetworkFailureException { + if (mCancelled) { + return; + } + + SqlNote sqlNote = new SqlNote(mContext, c); + Node n; + + // update remotely + if (sqlNote.isNoteType()) { + Task task = new Task(); + task.setContentByLocalJSON(sqlNote.getContent()); + + String parentGid = mNidToGid.get(sqlNote.getParentId()); + if (parentGid == null) { + Log.e(TAG, "cannot find task's parent tasklist"); + throw new ActionFailureException("cannot add remote task"); + } + mGTaskListHashMap.get(parentGid).addChildTask(task); + + GTaskClient.getInstance().createTask(task); + n = (Node) task; + + // add meta + updateRemoteMeta(task.getGid(), sqlNote); + } else { + TaskList tasklist = null; + + // we need to skip folder if it has already existed + String folderName = GTaskStringUtils.MIUI_FOLDER_PREFFIX; + if (sqlNote.getId() == Notes.ID_ROOT_FOLDER) + folderName += GTaskStringUtils.FOLDER_DEFAULT; + else if (sqlNote.getId() == Notes.ID_CALL_RECORD_FOLDER) + folderName += GTaskStringUtils.FOLDER_CALL_NOTE; + else + folderName += sqlNote.getSnippet(); + + Iterator> iter = mGTaskListHashMap.entrySet().iterator(); + while (iter.hasNext()) { + Map.Entry entry = iter.next(); + String gid = entry.getKey(); + TaskList list = entry.getValue(); + + if (list.getName().equals(folderName)) { + tasklist = list; + if (mGTaskHashMap.containsKey(gid)) { + mGTaskHashMap.remove(gid); + } + break; + } + } + + // no match we can add now + if (tasklist == null) { + tasklist = new TaskList(); + tasklist.setContentByLocalJSON(sqlNote.getContent()); + GTaskClient.getInstance().createTaskList(tasklist); + mGTaskListHashMap.put(tasklist.getGid(), tasklist); + } + n = (Node) tasklist; + } + + // update local note + sqlNote.setGtaskId(n.getGid()); + sqlNote.commit(false); + sqlNote.resetLocalModified(); + sqlNote.commit(true); + + // gid-id mapping + mGidToNid.put(n.getGid(), sqlNote.getId()); + mNidToGid.put(sqlNote.getId(), n.getGid()); + } + + private void updateRemoteNode(Node node, Cursor c) throws NetworkFailureException { + if (mCancelled) { + return; + } + + SqlNote sqlNote = new SqlNote(mContext, c); + + // update remotely + node.setContentByLocalJSON(sqlNote.getContent()); + GTaskClient.getInstance().addUpdateNode(node); + + // update meta + updateRemoteMeta(node.getGid(), sqlNote); + + // move task if necessary + if (sqlNote.isNoteType()) { + Task task = (Task) node; + TaskList preParentList = task.getParent(); + + String curParentGid = mNidToGid.get(sqlNote.getParentId()); + if (curParentGid == null) { + Log.e(TAG, "cannot find task's parent tasklist"); + throw new ActionFailureException("cannot update remote task"); + } + TaskList curParentList = mGTaskListHashMap.get(curParentGid); + + if (preParentList != curParentList) { + preParentList.removeChildTask(task); + curParentList.addChildTask(task); + GTaskClient.getInstance().moveTask(task, preParentList, curParentList); + } + } + + // clear local modified flag + sqlNote.resetLocalModified(); + sqlNote.commit(true); + } + + private void updateRemoteMeta(String gid, SqlNote sqlNote) throws NetworkFailureException { + if (sqlNote != null && sqlNote.isNoteType()) { + MetaData metaData = mMetaHashMap.get(gid); + if (metaData != null) { + metaData.setMeta(gid, sqlNote.getContent()); + GTaskClient.getInstance().addUpdateNode(metaData); + } else { + metaData = new MetaData(); + metaData.setMeta(gid, sqlNote.getContent()); + mMetaList.addChildTask(metaData); + mMetaHashMap.put(gid, metaData); + GTaskClient.getInstance().createTask(metaData); + } + } + } + + private void refreshLocalSyncId() throws NetworkFailureException { + if (mCancelled) { + return; + } + + // get the latest gtask list + mGTaskHashMap.clear(); + mGTaskListHashMap.clear(); + mMetaHashMap.clear(); + initGTaskList(); + + Cursor c = null; + try { + c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE, + "(type<>? AND parent_id<>?)", new String[] { + String.valueOf(Notes.TYPE_SYSTEM), String.valueOf(Notes.ID_TRASH_FOLER) + }, NoteColumns.TYPE + " DESC"); + if (c != null) { + while (c.moveToNext()) { + String gid = c.getString(SqlNote.GTASK_ID_COLUMN); + Node node = mGTaskHashMap.get(gid); + if (node != null) { + mGTaskHashMap.remove(gid); + ContentValues values = new ContentValues(); + values.put(NoteColumns.SYNC_ID, node.getLastModified()); + mContentResolver.update(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, + c.getLong(SqlNote.ID_COLUMN)), values, null, null); + } else { + Log.e(TAG, "something is missed"); + throw new ActionFailureException( + "some local items don't have gid after sync"); + } + } + } else { + Log.w(TAG, "failed to query local note to refresh sync id"); + } + } finally { + if (c != null) { + c.close(); + c = null; + } + } + } + + public String getSyncAccount() { + return GTaskClient.getInstance().getSyncAccount().name; + } + + public void cancelSync() { + mCancelled = true; + } +} diff --git a/java/net/micode/notes/gtask/remote/GTaskSyncService.java b/java/net/micode/notes/gtask/remote/GTaskSyncService.java new file mode 100644 index 0000000..cca36f7 --- /dev/null +++ b/java/net/micode/notes/gtask/remote/GTaskSyncService.java @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.gtask.remote; + +import android.app.Activity; +import android.app.Service; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.os.IBinder; + +public class GTaskSyncService extends Service { + public final static String ACTION_STRING_NAME = "sync_action_type"; + + public final static int ACTION_START_SYNC = 0; + + public final static int ACTION_CANCEL_SYNC = 1; + + public final static int ACTION_INVALID = 2; + + public final static String GTASK_SERVICE_BROADCAST_NAME = "net.micode.notes.gtask.remote.gtask_sync_service"; + + public final static String GTASK_SERVICE_BROADCAST_IS_SYNCING = "isSyncing"; + + public final static String GTASK_SERVICE_BROADCAST_PROGRESS_MSG = "progressMsg"; + + private static GTaskASyncTask mSyncTask = null; + + private static String mSyncProgress = ""; + + private void startSync() { + if (mSyncTask == null) { + mSyncTask = new GTaskASyncTask(this, new GTaskASyncTask.OnCompleteListener() { + public void onComplete() { + mSyncTask = null; + sendBroadcast(""); + stopSelf(); + } + }); + sendBroadcast(""); + mSyncTask.execute(); + } + } + + private void cancelSync() { + if (mSyncTask != null) { + mSyncTask.cancelSync(); + } + } + + @Override + public void onCreate() { + mSyncTask = null; + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + Bundle bundle = intent.getExtras(); + if (bundle != null && bundle.containsKey(ACTION_STRING_NAME)) { + switch (bundle.getInt(ACTION_STRING_NAME, ACTION_INVALID)) { + case ACTION_START_SYNC: + startSync(); + break; + case ACTION_CANCEL_SYNC: + cancelSync(); + break; + default: + break; + } + return START_STICKY; + } + return super.onStartCommand(intent, flags, startId); + } + + @Override + public void onLowMemory() { + if (mSyncTask != null) { + mSyncTask.cancelSync(); + } + } + + public IBinder onBind(Intent intent) { + return null; + } + + public void sendBroadcast(String msg) { + mSyncProgress = msg; + Intent intent = new Intent(GTASK_SERVICE_BROADCAST_NAME); + intent.putExtra(GTASK_SERVICE_BROADCAST_IS_SYNCING, mSyncTask != null); + intent.putExtra(GTASK_SERVICE_BROADCAST_PROGRESS_MSG, msg); + sendBroadcast(intent); + } + + public static void startSync(Activity activity) { + GTaskManager.getInstance().setActivityContext(activity); + Intent intent = new Intent(activity, GTaskSyncService.class); + intent.putExtra(GTaskSyncService.ACTION_STRING_NAME, GTaskSyncService.ACTION_START_SYNC); + activity.startService(intent); + } + + public static void cancelSync(Context context) { + Intent intent = new Intent(context, GTaskSyncService.class); + intent.putExtra(GTaskSyncService.ACTION_STRING_NAME, GTaskSyncService.ACTION_CANCEL_SYNC); + context.startService(intent); + } + + public static boolean isSyncing() { + return mSyncTask != null; + } + + public static String getProgressString() { + return mSyncProgress; + } +} diff --git a/java/net/micode/notes/model/Note.java b/java/net/micode/notes/model/Note.java new file mode 100644 index 0000000..6706cf6 --- /dev/null +++ b/java/net/micode/notes/model/Note.java @@ -0,0 +1,253 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.model; +import android.content.ContentProviderOperation; +import android.content.ContentProviderResult; +import android.content.ContentUris; +import android.content.ContentValues; +import android.content.Context; +import android.content.OperationApplicationException; +import android.net.Uri; +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.DataColumns; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.data.Notes.TextNote; + +import java.util.ArrayList; + + +public class Note { + private ContentValues mNoteDiffValues; + private NoteData mNoteData; + private static final String TAG = "Note"; + /** + * Create a new note id for adding a new note to databases + */ + public static synchronized long getNewNoteId(Context context, long folderId) { + // Create a new note in the database + ContentValues values = new ContentValues(); + long createdTime = System.currentTimeMillis(); + values.put(NoteColumns.CREATED_DATE, createdTime); + values.put(NoteColumns.MODIFIED_DATE, createdTime); + values.put(NoteColumns.TYPE, Notes.TYPE_NOTE); + values.put(NoteColumns.LOCAL_MODIFIED, 1); + values.put(NoteColumns.PARENT_ID, folderId); + Uri uri = context.getContentResolver().insert(Notes.CONTENT_NOTE_URI, values); + + long noteId = 0; + try { + noteId = Long.valueOf(uri.getPathSegments().get(1)); + } catch (NumberFormatException e) { + Log.e(TAG, "Get note id error :" + e.toString()); + noteId = 0; + } + if (noteId == -1) { + throw new IllegalStateException("Wrong note id:" + noteId); + } + return noteId; + } + + public Note() { + mNoteDiffValues = new ContentValues(); + mNoteData = new NoteData(); + } + + public void setNoteValue(String key, String value) { + mNoteDiffValues.put(key, value); + mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1); + mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis()); + } + + public void setTextData(String key, String value) { + mNoteData.setTextData(key, value); + } + + public void setTextDataId(long id) { + mNoteData.setTextDataId(id); + } + + public long getTextDataId() { + return mNoteData.mTextDataId; + } + + public void setCallDataId(long id) { + mNoteData.setCallDataId(id); + } + + public void setCallData(String key, String value) { + mNoteData.setCallData(key, value); + } + + public boolean isLocalModified() { + return mNoteDiffValues.size() > 0 || mNoteData.isLocalModified(); + } + + public boolean syncNote(Context context, long noteId) { + if (noteId <= 0) { + throw new IllegalArgumentException("Wrong note id:" + noteId); + } + + if (!isLocalModified()) { + return true; + } + + /** + * In theory, once data changed, the note should be updated on {@link NoteColumns#LOCAL_MODIFIED} and + * {@link NoteColumns#MODIFIED_DATE}. For data safety, though update note fails, we also update the + * note data info + */ + if (context.getContentResolver().update( + ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), mNoteDiffValues, null, + null) == 0) { + Log.e(TAG, "Update note error, should not happen"); + // Do not return, fall through + } + mNoteDiffValues.clear(); + + if (mNoteData.isLocalModified() + && (mNoteData.pushIntoContentResolver(context, noteId) == null)) { + return false; + } + + return true; + } + + private class NoteData { + private long mTextDataId; + + private ContentValues mTextDataValues; + + private long mCallDataId; + + private ContentValues mCallDataValues; + + private static final String TAG = "NoteData"; + + public NoteData() { + mTextDataValues = new ContentValues(); + mCallDataValues = new ContentValues(); + mTextDataId = 0; + mCallDataId = 0; + } + + boolean isLocalModified() { + return mTextDataValues.size() > 0 || mCallDataValues.size() > 0; + } + + void setTextDataId(long id) { + if(id <= 0) { + throw new IllegalArgumentException("Text data id should larger than 0"); + } + mTextDataId = id; + } + + void setCallDataId(long id) { + if (id <= 0) { + throw new IllegalArgumentException("Call data id should larger than 0"); + } + mCallDataId = id; + } + + void setCallData(String key, String value) { + mCallDataValues.put(key, value); + mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1); + mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis()); + } + + void setTextData(String key, String value) { + mTextDataValues.put(key, value); + mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1); + mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis()); + } + + Uri pushIntoContentResolver(Context context, long noteId) { + /** + * Check for safety + */ + if (noteId <= 0) { + throw new IllegalArgumentException("Wrong note id:" + noteId); + } + + ArrayList operationList = new ArrayList(); + ContentProviderOperation.Builder builder = null; + + if(mTextDataValues.size() > 0) { + mTextDataValues.put(DataColumns.NOTE_ID, noteId); + if (mTextDataId == 0) { + mTextDataValues.put(DataColumns.MIME_TYPE, TextNote.CONTENT_ITEM_TYPE); + Uri uri = context.getContentResolver().insert(Notes.CONTENT_DATA_URI, + mTextDataValues); + try { + setTextDataId(Long.valueOf(uri.getPathSegments().get(1))); + } catch (NumberFormatException e) { + Log.e(TAG, "Insert new text data fail with noteId" + noteId); + mTextDataValues.clear(); + return null; + } + } else { + builder = ContentProviderOperation.newUpdate(ContentUris.withAppendedId( + Notes.CONTENT_DATA_URI, mTextDataId)); + builder.withValues(mTextDataValues); + operationList.add(builder.build()); + } + mTextDataValues.clear(); + } + + if(mCallDataValues.size() > 0) { + mCallDataValues.put(DataColumns.NOTE_ID, noteId); + if (mCallDataId == 0) { + mCallDataValues.put(DataColumns.MIME_TYPE, CallNote.CONTENT_ITEM_TYPE); + Uri uri = context.getContentResolver().insert(Notes.CONTENT_DATA_URI, + mCallDataValues); + try { + setCallDataId(Long.valueOf(uri.getPathSegments().get(1))); + } catch (NumberFormatException e) { + Log.e(TAG, "Insert new call data fail with noteId" + noteId); + mCallDataValues.clear(); + return null; + } + } else { + builder = ContentProviderOperation.newUpdate(ContentUris.withAppendedId( + Notes.CONTENT_DATA_URI, mCallDataId)); + builder.withValues(mCallDataValues); + operationList.add(builder.build()); + } + mCallDataValues.clear(); + } + + if (operationList.size() > 0) { + try { + ContentProviderResult[] results = context.getContentResolver().applyBatch( + Notes.AUTHORITY, operationList); + return (results == null || results.length == 0 || results[0] == null) ? null + : ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId); + } catch (RemoteException e) { + Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); + return null; + } catch (OperationApplicationException e) { + Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); + return null; + } + } + return null; + } + } +} diff --git a/java/net/micode/notes/model/WorkingNote.java b/java/net/micode/notes/model/WorkingNote.java new file mode 100644 index 0000000..be081e4 --- /dev/null +++ b/java/net/micode/notes/model/WorkingNote.java @@ -0,0 +1,368 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.model; + +import android.appwidget.AppWidgetManager; +import android.content.ContentUris; +import android.content.Context; +import android.database.Cursor; +import android.text.TextUtils; +import android.util.Log; + +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.CallNote; +import net.micode.notes.data.Notes.DataColumns; +import net.micode.notes.data.Notes.DataConstants; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.data.Notes.TextNote; +import net.micode.notes.tool.ResourceParser.NoteBgResources; + + +public class WorkingNote { + // Note for the working note + private Note mNote; + // Note Id + private long mNoteId; + // Note content + private String mContent; + // Note mode + private int mMode; + + private long mAlertDate; + + private long mModifiedDate; + + private int mBgColorId; + + private int mWidgetId; + + private int mWidgetType; + + private long mFolderId; + + private Context mContext; + + private static final String TAG = "WorkingNote"; + + private boolean mIsDeleted; + + private NoteSettingChangedListener mNoteSettingStatusListener; + + public static final String[] DATA_PROJECTION = new String[] { + DataColumns.ID, + DataColumns.CONTENT, + DataColumns.MIME_TYPE, + DataColumns.DATA1, + DataColumns.DATA2, + DataColumns.DATA3, + DataColumns.DATA4, + }; + + public static final String[] NOTE_PROJECTION = new String[] { + NoteColumns.PARENT_ID, + NoteColumns.ALERTED_DATE, + NoteColumns.BG_COLOR_ID, + NoteColumns.WIDGET_ID, + NoteColumns.WIDGET_TYPE, + NoteColumns.MODIFIED_DATE + }; + + private static final int DATA_ID_COLUMN = 0; + + private static final int DATA_CONTENT_COLUMN = 1; + + private static final int DATA_MIME_TYPE_COLUMN = 2; + + private static final int DATA_MODE_COLUMN = 3; + + private static final int NOTE_PARENT_ID_COLUMN = 0; + + private static final int NOTE_ALERTED_DATE_COLUMN = 1; + + private static final int NOTE_BG_COLOR_ID_COLUMN = 2; + + private static final int NOTE_WIDGET_ID_COLUMN = 3; + + private static final int NOTE_WIDGET_TYPE_COLUMN = 4; + + private static final int NOTE_MODIFIED_DATE_COLUMN = 5; + + // New note construct + private WorkingNote(Context context, long folderId) { + mContext = context; + mAlertDate = 0; + mModifiedDate = System.currentTimeMillis(); + mFolderId = folderId; + mNote = new Note(); + mNoteId = 0; + mIsDeleted = false; + mMode = 0; + mWidgetType = Notes.TYPE_WIDGET_INVALIDE; + } + + // Existing note construct + private WorkingNote(Context context, long noteId, long folderId) { + mContext = context; + mNoteId = noteId; + mFolderId = folderId; + mIsDeleted = false; + mNote = new Note(); + loadNote(); + } + + private void loadNote() { + Cursor cursor = mContext.getContentResolver().query( + ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, mNoteId), NOTE_PROJECTION, null, + null, null); + + if (cursor != null) { + if (cursor.moveToFirst()) { + mFolderId = cursor.getLong(NOTE_PARENT_ID_COLUMN); + mBgColorId = cursor.getInt(NOTE_BG_COLOR_ID_COLUMN); + mWidgetId = cursor.getInt(NOTE_WIDGET_ID_COLUMN); + mWidgetType = cursor.getInt(NOTE_WIDGET_TYPE_COLUMN); + mAlertDate = cursor.getLong(NOTE_ALERTED_DATE_COLUMN); + mModifiedDate = cursor.getLong(NOTE_MODIFIED_DATE_COLUMN); + } + cursor.close(); + } else { + Log.e(TAG, "No note with id:" + mNoteId); + throw new IllegalArgumentException("Unable to find note with id " + mNoteId); + } + loadNoteData(); + } + + private void loadNoteData() { + Cursor cursor = mContext.getContentResolver().query(Notes.CONTENT_DATA_URI, DATA_PROJECTION, + DataColumns.NOTE_ID + "=?", new String[] { + String.valueOf(mNoteId) + }, null); + + if (cursor != null) { + if (cursor.moveToFirst()) { + do { + String type = cursor.getString(DATA_MIME_TYPE_COLUMN); + if (DataConstants.NOTE.equals(type)) { + mContent = cursor.getString(DATA_CONTENT_COLUMN); + mMode = cursor.getInt(DATA_MODE_COLUMN); + mNote.setTextDataId(cursor.getLong(DATA_ID_COLUMN)); + } else if (DataConstants.CALL_NOTE.equals(type)) { + mNote.setCallDataId(cursor.getLong(DATA_ID_COLUMN)); + } else { + Log.d(TAG, "Wrong note type with type:" + type); + } + } while (cursor.moveToNext()); + } + cursor.close(); + } else { + Log.e(TAG, "No data with id:" + mNoteId); + throw new IllegalArgumentException("Unable to find note's data with id " + mNoteId); + } + } + + public static WorkingNote createEmptyNote(Context context, long folderId, int widgetId, + int widgetType, int defaultBgColorId) { + WorkingNote note = new WorkingNote(context, folderId); + note.setBgColorId(defaultBgColorId); + note.setWidgetId(widgetId); + note.setWidgetType(widgetType); + return note; + } + + public static WorkingNote load(Context context, long id) { + return new WorkingNote(context, id, 0); + } + + public synchronized boolean saveNote() { + if (isWorthSaving()) { + if (!existInDatabase()) { + if ((mNoteId = Note.getNewNoteId(mContext, mFolderId)) == 0) { + Log.e(TAG, "Create new note fail with id:" + mNoteId); + return false; + } + } + + mNote.syncNote(mContext, mNoteId); + + /** + * Update widget content if there exist any widget of this note + */ + if (mWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID + && mWidgetType != Notes.TYPE_WIDGET_INVALIDE + && mNoteSettingStatusListener != null) { + mNoteSettingStatusListener.onWidgetChanged(); + } + return true; + } else { + return false; + } + } + + public boolean existInDatabase() { + return mNoteId > 0; + } + + private boolean isWorthSaving() { + if (mIsDeleted || (!existInDatabase() && TextUtils.isEmpty(mContent)) + || (existInDatabase() && !mNote.isLocalModified())) { + return false; + } else { + return true; + } + } + + public void setOnSettingStatusChangedListener(NoteSettingChangedListener l) { + mNoteSettingStatusListener = l; + } + + public void setAlertDate(long date, boolean set) { + if (date != mAlertDate) { + mAlertDate = date; + mNote.setNoteValue(NoteColumns.ALERTED_DATE, String.valueOf(mAlertDate)); + } + if (mNoteSettingStatusListener != null) { + mNoteSettingStatusListener.onClockAlertChanged(date, set); + } + } + + public void markDeleted(boolean mark) { + mIsDeleted = mark; + if (mWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID + && mWidgetType != Notes.TYPE_WIDGET_INVALIDE && mNoteSettingStatusListener != null) { + mNoteSettingStatusListener.onWidgetChanged(); + } + } + + public void setBgColorId(int id) { + if (id != mBgColorId) { + mBgColorId = id; + if (mNoteSettingStatusListener != null) { + mNoteSettingStatusListener.onBackgroundColorChanged(); + } + mNote.setNoteValue(NoteColumns.BG_COLOR_ID, String.valueOf(id)); + } + } + + public void setCheckListMode(int mode) { + if (mMode != mode) { + if (mNoteSettingStatusListener != null) { + mNoteSettingStatusListener.onCheckListModeChanged(mMode, mode); + } + mMode = mode; + mNote.setTextData(TextNote.MODE, String.valueOf(mMode)); + } + } + + public void setWidgetType(int type) { + if (type != mWidgetType) { + mWidgetType = type; + mNote.setNoteValue(NoteColumns.WIDGET_TYPE, String.valueOf(mWidgetType)); + } + } + + public void setWidgetId(int id) { + if (id != mWidgetId) { + mWidgetId = id; + mNote.setNoteValue(NoteColumns.WIDGET_ID, String.valueOf(mWidgetId)); + } + } + + public void setWorkingText(String text) { + if (!TextUtils.equals(mContent, text)) { + mContent = text; + mNote.setTextData(DataColumns.CONTENT, mContent); + } + } + + public void convertToCallNote(String phoneNumber, long callDate) { + mNote.setCallData(CallNote.CALL_DATE, String.valueOf(callDate)); + mNote.setCallData(CallNote.PHONE_NUMBER, phoneNumber); + mNote.setNoteValue(NoteColumns.PARENT_ID, String.valueOf(Notes.ID_CALL_RECORD_FOLDER)); + } + + public boolean hasClockAlert() { + return (mAlertDate > 0 ? true : false); + } + + public String getContent() { + return mContent; + } + + public long getAlertDate() { + return mAlertDate; + } + + public long getModifiedDate() { + return mModifiedDate; + } + + public int getBgColorResId() { + return NoteBgResources.getNoteBgResource(mBgColorId); + } + + public int getBgColorId() { + return mBgColorId; + } + + public int getTitleBgResId() { + return NoteBgResources.getNoteTitleBgResource(mBgColorId); + } + + public int getCheckListMode() { + return mMode; + } + + public long getNoteId() { + return mNoteId; + } + + public long getFolderId() { + return mFolderId; + } + + public int getWidgetId() { + return mWidgetId; + } + + public int getWidgetType() { + return mWidgetType; + } + + public interface NoteSettingChangedListener { + /** + * Called when the background color of current note has just changed + */ + void onBackgroundColorChanged(); + + /** + * Called when user set clock + */ + void onClockAlertChanged(long date, boolean set); + + /** + * Call when user create note from widget + */ + void onWidgetChanged(); + + /** + * Call when switch between check list mode and normal mode + * @param oldMode is previous mode before change + * @param newMode is new mode + */ + void onCheckListModeChanged(int oldMode, int newMode); + } +} diff --git a/java/net/micode/notes/tool/BackupUtils.java b/java/net/micode/notes/tool/BackupUtils.java new file mode 100644 index 0000000..e87f7c7 --- /dev/null +++ b/java/net/micode/notes/tool/BackupUtils.java @@ -0,0 +1,346 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.tool; + +import android.content.Context;//Android提供的一个上下文对象,可以用于访问应用程序的资源和执行一些操作。 +import android.database.Cursor;//一个用于查询数据库结果集的接口,可以用于获取查询结果中的各个数据项。 +import android.os.Environment;//提供了访问系统环境的方法,例如获取外部存储路径。 +import android.text.TextUtils;//个包含各种字符串处理方法的工具类,例如判断字符串是否为空。 +import android.text.format.DateFormat;//提供了各种日期和时间格式化的方法。 +import android.util.Log;//Android提供的日志工具类,用于打印调试信息。 + +import net.micode.notes.R;//应用程序的资源类,用于引用应用程序中的各种资源,如布局文件、图标、字符串等。 +import net.micode.notes.data.Notes;//一个自定义的Notes数据类,用于访问和操作备忘录的数据。 +import net.micode.notes.data.Notes.DataColumns;//Notes数据类中定义的备忘录数据列常量。 +import net.micode.notes.data.Notes.DataConstants;//Notes数据类中定义的备忘录数据常量。 +import net.micode.notes.data.Notes.NoteColumns;//Notes数据类中定义的备忘录笔记列常量。 + +//用于文件操作,如创建文件、写入内容等。 +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.PrintStream; + + +public class BackupUtils { + private static final String TAG = "BackupUtils"; + // Singleton stuff + private static BackupUtils sInstance; + + public static synchronized BackupUtils getInstance(Context context) { + if (sInstance == null) { + //如果当前的备份不存在,则重新声明一个 + sInstance = new BackupUtils(context); + } + return sInstance; + } + + /** + * Following states are signs to represents backup or restore + * status + *///以下状态是表示备份或恢复状态的标志。 + // Currently, the sdcard is not mounted SD卡没有被装到手机里 + public static final int STATE_SD_CARD_UNMOUONTED = 0; + // 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 数据已被破坏,可能被修改 + public static final int STATE_DATA_DESTROIED = 2; + // Some run-time exception which causes restore or backup fails 超时异常 + public static final int STATE_SYSTEM_ERROR = 3; + // 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()); + } + + public int exportToText() { + return mTextExport.exportToText(); + } + + public String getExportedTextFileName() { + return mTextExport.mFileName; + } + + public String getExportedTextFileDir() { + return mTextExport.mFileDirectory; + } + + private static class TextExport { + private static final String[] NOTE_PROJECTION = { + NoteColumns.ID, + NoteColumns.MODIFIED_DATE, + NoteColumns.SNIPPET, + NoteColumns.TYPE + }; + + private static final int NOTE_COLUMN_ID = 0; + + 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, + DataColumns.DATA1, + DataColumns.DATA2, + DataColumns.DATA3, + DataColumns.DATA4, + }; + + private static final int DATA_COLUMN_CONTENT = 0; + + private static final int DATA_COLUMN_MIME_TYPE = 1; + + private static final int DATA_COLUMN_CALL_DATE = 2; + + private static final int DATA_COLUMN_PHONE_NUMBER = 4; + + private final String [] TEXT_FORMAT; + private static final int FORMAT_FOLDER_NAME = 0; + private static final int FORMAT_NOTE_DATE = 1; + private static final int FORMAT_NOTE_CONTENT = 2; + + private Context mContext; + private String mFileName; + private String mFileDirectory; + + public TextExport(Context context) { + TEXT_FORMAT = context.getResources().getStringArray(R.array.format_for_exported_note); + mContext = context; + mFileName = ""; + mFileDirectory = ""; + } + + private String getFormat(int id) {//获取文本的组成部分 + return TEXT_FORMAT[id]; + } + + /** + * Export the folder identified by folder id to text + */ + private void exportFolderToText(String folderId, PrintStream ps) { + // Query notes belong to this folder 通过查询parent,id是文件夹id的note来选出制定ID文件夹下的Note + 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 { + // Print note's last modified date ps里面保存有这份note的日期 + ps.println(String.format(getFormat(FORMAT_NOTE_DATE), DateFormat.format( + mContext.getString(R.string.format_datetime_mdhm), + notesCursor.getLong(NOTE_COLUMN_MODIFIED_DATE)))); + // Query data belong to this note 将文件导出到text + String noteId = notesCursor.getString(NOTE_COLUMN_ID); + exportNoteToText(noteId, ps); + } while (notesCursor.moveToNext()); + } + notesCursor.close(); + } + } + + /** + * Export note identified by id to a print stream + */ + 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) {//利用光标来扫面内容,区别为callnote和note两种,靠ps.printline输出 + if (dataCursor.moveToFirst()) { + do { + String mimeType = dataCursor.getString(DATA_COLUMN_MIME_TYPE); + if (DataConstants.CALL_NOTE.equals(mimeType)) { + // Print phone number 判断是否为空字符 + String phoneNumber = dataCursor.getString(DATA_COLUMN_PHONE_NUMBER); + long callDate = dataCursor.getLong(DATA_COLUMN_CALL_DATE); + String location = dataCursor.getString(DATA_COLUMN_CONTENT); + + if (!TextUtils.isEmpty(phoneNumber)) { + ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), + phoneNumber)); + } + // Print call date + ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), DateFormat + .format(mContext.getString(R.string.format_datetime_mdhm), + callDate))); + // Print call attachment location + if (!TextUtils.isEmpty(location)) { + ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), + location)); + } + } else if (DataConstants.NOTE.equals(mimeType)) { + String content = dataCursor.getString(DATA_COLUMN_CONTENT); + if (!TextUtils.isEmpty(content)) { + ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), + content)); + } + } + } while (dataCursor.moveToNext()); + } + dataCursor.close(); + } + // print a line separator between note + try { + ps.write(new byte[] { + Character.LINE_SEPARATOR, Character.LETTER_NUMBER + }); + } catch (IOException e) { + Log.e(TAG, e.toString()); + } + } + + /** + * Note will be exported as text which is user readable + */ + public int exportToText() {//总函数,调用上面的exportFolder和exportNote + if (!externalStorageAvailable()) { + Log.d(TAG, "Media was not mounted"); + return STATE_SD_CARD_UNMOUONTED; + } + + PrintStream ps = getExportToTextPrintStream(); + if (ps == null) { + Log.e(TAG, "get print stream error"); + return STATE_SYSTEM_ERROR; + } + // First export folder and its notes 导出文件夹,就是导出里面包含的便签 + Cursor folderCursor = mContext.getContentResolver().query( + Notes.CONTENT_NOTE_URI, + NOTE_PROJECTION, + "(" + NoteColumns.TYPE + "=" + Notes.TYPE_FOLDER + " AND " + + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER + ") OR " + + NoteColumns.ID + "=" + Notes.ID_CALL_RECORD_FOLDER, null, null); + + if (folderCursor != null) { + if (folderCursor.moveToFirst()) { + do { + // Print folder's name + String folderName = ""; + if(folderCursor.getLong(NOTE_COLUMN_ID) == Notes.ID_CALL_RECORD_FOLDER) { + folderName = mContext.getString(R.string.call_record_folder_name); + } else { + folderName = folderCursor.getString(NOTE_COLUMN_SNIPPET); + } + if (!TextUtils.isEmpty(folderName)) { + ps.println(String.format(getFormat(FORMAT_FOLDER_NAME), folderName)); + } + String folderId = folderCursor.getString(NOTE_COLUMN_ID); + exportFolderToText(folderId, ps); + } while (folderCursor.moveToNext()); + } + folderCursor.close(); + } + + // Export notes in root's folder 将根目录里的便签导出 + Cursor noteCursor = mContext.getContentResolver().query( + Notes.CONTENT_NOTE_URI, + NOTE_PROJECTION, + NoteColumns.TYPE + "=" + +Notes.TYPE_NOTE + " AND " + NoteColumns.PARENT_ID + + "=0", null, null); + + if (noteCursor != null) { + if (noteCursor.moveToFirst()) { + do { + ps.println(String.format(getFormat(FORMAT_NOTE_DATE), DateFormat.format( + mContext.getString(R.string.format_datetime_mdhm), + noteCursor.getLong(NOTE_COLUMN_MODIFIED_DATE)))); + // Query data belong to this note + String noteId = noteCursor.getString(NOTE_COLUMN_ID); + exportNoteToText(noteId, ps); + } while (noteCursor.moveToNext()); + } + noteCursor.close(); + } + ps.close(); + + return STATE_SUCCESS; + } + + /** + * Get a print stream pointed to the file {@generateExportedTextFile} + */ + 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; + } + mFileName = file.getName(); + mFileDirectory = mContext.getString(R.string.file_path); + PrintStream ps = null; + try { + FileOutputStream fos = new FileOutputStream(file); + ps = new PrintStream(fos);//将ps输出流输出到特定文件,目的是导出到文件,而不是直接输出 + } catch (FileNotFoundException e) { + e.printStackTrace(); + return null; + } catch (NullPointerException e) { + e.printStackTrace(); + return null; + } + return ps; + } + } + + /** + * Generate the text file to store imported data + */ + private static File generateFileMountedOnSDcard(Context context, int filePathResId, int fileNameFormatResId) { + StringBuilder sb = new StringBuilder(); + sb.append(Environment.getExternalStorageDirectory());//外部的储存路径 + 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 { + if (!filedir.exists()) { + filedir.mkdir();//如果文件不存在就新建文件 + } + if (!file.exists()) { + file.createNewFile(); + } + return file; + } catch (SecurityException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + //try catch 异常处理 + return null; + } +} + + diff --git a/java/net/micode/notes/tool/DataUtils.java b/java/net/micode/notes/tool/DataUtils.java new file mode 100644 index 0000000..1a2266e --- /dev/null +++ b/java/net/micode/notes/tool/DataUtils.java @@ -0,0 +1,295 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +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; + +//处理数据的转换和格式化 +public class DataUtils { + public static final String TAG = "DataUtils"; + public static boolean batchDeleteNotes(ContentResolver resolver, HashSet ids) { //批量删除笔记 + if (ids == null) { //为空返回处理处理完成 + Log.d(TAG, "the ids is null"); + return true; + } + if (ids.size() == 0) { //大小为零返回处理完成 + Log.d(TAG, "no id is in the hashset"); + return true; + } + + 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)); + 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; + } + 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; + } + //将笔记放入文件夹中 + public static void moveNoteToFoler(ContentResolver resolver, long id, long srcFolderId, long desFolderId) { + ContentValues values = new ContentValues(); + 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); + } + //批量移动文件到文件夹中 + public static boolean batchMoveToFolder(ContentResolver resolver, HashSet ids, + long folderId) { + if (ids == null) { + Log.d(TAG, "the ids is null"); + return true; + } + + ArrayList operationList = new ArrayList(); + for (long id : ids) { + ContentProviderOperation.Builder builder = ContentProviderOperation + .newUpdate(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id)); //欲更新的操作者 + builder.withValue(NoteColumns.PARENT_ID, folderId); + 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, "delete 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; + } + + /** + * Get the all folder count except system folders {@link Notes#TYPE_SYSTEM}} + */ //计数用户除开系统文件之外的其余文件。 + public static int getUserFolderCount(ContentResolver resolver) { + Cursor cursor =resolver.query(Notes.CONTENT_NOTE_URI, //光标指向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(); //最终关闭,可能存在问题,cursor可能无法正常释放,从而导致程序崩溃 + } + } + } + return count; + } + //可视化操作数据库,搭建ui界面方便用户操作本地数据库 + public static boolean visibleInNoteDatabase(ContentResolver resolver, long noteId, int type) { + Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), + null, + NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER, + new String [] {String.valueOf(type)}, + null); + + boolean exist = false; + if (cursor != null) { + if (cursor.getCount() > 0) { + exist = true; + } + cursor.close(); + } + return exist; + } + //判断是否存在笔记数据库 + public static boolean existInNoteDatabase(ContentResolver resolver, long noteId) { + Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), + null, null, null, null); + + boolean exist = false; + if (cursor != null) { + if (cursor.getCount() > 0) { //计数如果大于零,就说明存在 + exist = true; + } + cursor.close(); + } + return exist; + } + //判断是否存在数据库 + public static boolean existInDataDatabase(ContentResolver resolver, long dataId) { + Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_DATA_URI, dataId), + null, null, null, null); + + boolean exist = false; + if (cursor != null) { + if (cursor.getCount() > 0) { + exist = true; + } + cursor.close(); + } + return exist; + } + //判断可视化文件夹名称是否合法 + public static boolean checkVisibleFolderName(ContentResolver resolver, String name) { + Cursor cursor = resolver.query(Notes.CONTENT_NOTE_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; + if(cursor != null) { + if(cursor.getCount() > 0) { //判断是否存在 + exist = true; + } + cursor.close(); + } + return exist; + } + //哈希设置获取文件夹部件 + public static HashSet getFolderNoteWidget(ContentResolver resolver, long folderId) { + Cursor c = resolver.query(Notes.CONTENT_NOTE_URI, //设置光标 + new String[] { NoteColumns.WIDGET_ID, NoteColumns.WIDGET_TYPE }, + NoteColumns.PARENT_ID + "=?", + new String[] { String.valueOf(folderId) }, + null); + + HashSet set = null; + if (c != null) { //光标不指向空,意味着存在 + if (c.moveToFirst()) { //移动到第一位 + set = new HashSet(); + do { + try { + AppWidgetAttribute widget = new AppWidgetAttribute(); + widget.widgetId = c.getInt(0); //得到部件id,0是请求代码 + widget.widgetType = c.getInt(1); //得到部件种类,1是请求代码 + set.add(widget); //将部件加入到哈希设置中 + } catch (IndexOutOfBoundsException e) { + Log.e(TAG, e.toString()); //检测异常,加入到错误日志文件中去 + } + } while (c.moveToNext()); + } + c.close(); + } + return set; + } + //得到电话号码笔记id + public static String getCallNumberByNoteId(ContentResolver resolver, long noteId) { + Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI, //设置光标 + new String [] { CallNote.PHONE_NUMBER }, + CallNote.NOTE_ID + "=? AND " + CallNote.MIME_TYPE + "=?", + 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 ""; + } + //得到电话号码和电话日期 + public static long getNoteIdByPhoneNumberAndCallDate(ContentResolver resolver, String phoneNumber, long callDate) { + Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI, + new String [] { CallNote.NOTE_ID },//设置光标 + CallNote.CALL_DATE + "=? AND " + CallNote.MIME_TYPE + "=? AND PHONE_NUMBERS_EQUAL(" + + CallNote.PHONE_NUMBER + ",?)", + new String [] { String.valueOf(callDate), CallNote.CONTENT_ITEM_TYPE, phoneNumber }, + null); + + if (cursor != null) { //光标不为空 + if (cursor.moveToFirst()) { + try { + return cursor.getLong(0); + } catch (IndexOutOfBoundsException e) { //检测异常,加入到错误日志文件中去 + Log.e(TAG, "Get call note id fails " + e.toString()); + } + } + cursor.close(); + } + return 0; + } + //得到片段id + public static String getSnippetById(ContentResolver resolver, long noteId) { + Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI, //设置光标 + new String [] { NoteColumns.SNIPPET }, + NoteColumns.ID + "=?", + new String [] { String.valueOf(noteId)}, + null); + + if (cursor != null) { //光标不为空 + String snippet = ""; + if (cursor.moveToFirst()) { //移动到开始 + snippet = cursor.getString(0); //通过请求代码0,请求获取字符串,并传递给snippet + } + cursor.close(); //关闭光标 + return snippet; + } //抛出不合法提示 + throw new IllegalArgumentException("Note is not found with id: " + noteId); + } + //得到规范的片段 + 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/java/net/micode/notes/tool/GTaskStringUtils.java b/java/net/micode/notes/tool/GTaskStringUtils.java new file mode 100644 index 0000000..666b729 --- /dev/null +++ b/java/net/micode/notes/tool/GTaskStringUtils.java @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.tool; + +public class GTaskStringUtils { + + public final static String GTASK_JSON_ACTION_ID = "action_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"; + + 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"; + + public final static String GTASK_JSON_DEFAULT_LIST_ID = "default_list_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"; + + 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"; + + 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"; + + public final static String GTASK_JSON_NOTES = "notes"; + + public final static String GTASK_JSON_PARENT_ID = "parent_id"; + + public final static String GTASK_JSON_PRIOR_SIBLING_ID = "prior_sibling_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"; + + public final static String MIUI_FOLDER_PREFFIX = "[MIUI_Notes]"; + + 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"; + + 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/java/net/micode/notes/tool/ResourceParser.java b/java/net/micode/notes/tool/ResourceParser.java new file mode 100644 index 0000000..874faf5 --- /dev/null +++ b/java/net/micode/notes/tool/ResourceParser.java @@ -0,0 +1,261 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.tool; + +import android.content.Context; +import android.preference.PreferenceManager; + +import net.micode.notes.R; +import net.micode.notes.ui.NotesPreferenceActivity; + +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获取笔记背景资源 + * @param id 颜色id + * @return 背景资源id + */ + public static int getNoteBgResource(int id) { + return BG_EDIT_RESOURCES[id]; + } + + /** + * 根据id获取笔记标题背景资源 + * @param id 颜色id + * @return 标题背景资源id + */ + public static int getNoteTitleBgResource(int id) { + return BG_EDIT_TITLE_RESOURCES[id]; + } + } + + /** + * 获取默认笔记背景id + * @param context 上下文对象,用于访问SharedPreferences + * @return 笔记背景资源id + */ + public static int getDefaultBgId(Context context) { + // 如果用户设置了背景颜色,则随机选择一个背景,否则使用默认背景 + if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean( + NotesPreferenceActivity.PREFERENCE_SET_BG_COLOR_KEY, false)) { + return (int) (Math.random() * NoteBgResources.BG_EDIT_RESOURCES.length); + } else { + 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 + }; + + /** + * 获取第一个笔记项的背景资源 + * @param id 颜色id + * @return 背景资源id + */ + public static int getNoteBgFirstRes(int id) { + return BG_FIRST_RESOURCES[id]; + } + + /** + * 获取最后一个笔记项的背景资源 + * @param id 颜色id + * @return 背景资源id + */ + public static int getNoteBgLastRes(int id) { + return BG_LAST_RESOURCES[id]; + } + + /** + * 获取单个笔记项的背景资源 + * @param id 颜色id + * @return 背景资源id + */ + public static int getNoteBgSingleRes(int id) { + return BG_SINGLE_RESOURCES[id]; + } + + /** + * 获取普通笔记项的背景资源 + * @param id 颜色id + * @return 背景资源id + */ + public static int getNoteBgNormalRes(int id) { + return BG_NORMAL_RESOURCES[id]; + } + + /** + * 获取文件夹背景资源 + * @return 文件夹背景资源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, + R.drawable.widget_2x_blue, + R.drawable.widget_2x_white, + R.drawable.widget_2x_green, + R.drawable.widget_2x_red, + }; + + /** + * 根据id获取2x小部件背景资源 + * @param id 颜色id + * @return 背景资源id + */ + 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, + R.drawable.widget_4x_blue, + R.drawable.widget_4x_white, + R.drawable.widget_4x_green, + R.drawable.widget_4x_red + }; + + /** + * 根据id获取4x小部件背景资源 + * @param id 颜色id + * @return 背景资源id + */ + 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获取文本外观资源 + * @param id 外观id + * @return 文本外观资源id + */ + public static int getTexAppearanceResource(int id) { + // 若id超出资源数组范围,则返回默认字体大小 + if (id >= TEXTAPPEARANCE_RESOURCES.length) { + return BG_DEFAULT_FONT_SIZE; + } + return TEXTAPPEARANCE_RESOURCES[id]; + } + + /** + * 获取文本外观资源的数量 + * @return 资源数量 + */ + public static int getResourcesSize() { + return TEXTAPPEARANCE_RESOURCES.length; + } + } +} diff --git a/java/net/micode/notes/ui/AlarmAlertActivity.java b/java/net/micode/notes/ui/AlarmAlertActivity.java new file mode 100644 index 0000000..49f58a8 --- /dev/null +++ b/java/net/micode/notes/ui/AlarmAlertActivity.java @@ -0,0 +1,208 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.ui; + +import android.app.Activity; //表示引入 Android 应用程序中的 Activity 类,用于创建用户界面 +import android.app.AlertDialog; //表示引入 Android 应用程序中的 AlertDialog 类,用于创建对话框。 +import android.content.Context; //表示引入 Android 应用程序中的 Context 类,用于访问应用程序的资源和执行操作。 +import android.content.DialogInterface; //表示引入 Android 应用程序中的 DialogInterface 类,用于处理对话框事件 +import android.content.DialogInterface.OnClickListener; //表示引入 Android 应用程序中的 OnClickListener 接口,用于处理对话框按钮点击事件。 +import android.content.DialogInterface.OnDismissListener; //表示引入 Android 应用程序中的 OnDismissListener 接口,用于处理对话框消失事件 +import android.content.Intent; //表示引入 Android 应用程序中的 Intent 类,用于在应用程序组件之间进行通信。 +import android.media.AudioManager; //表示引入 Android 应用程序中的 AudioManager 类,用于控制音频管理器。 +import android.media.MediaPlayer; //表示引入 Android 应用程序中的 MediaPlayer 类,用于实现音频播放功能。 +import android.media.RingtoneManager; //表示引入 Android 应用程序中的 RingtoneManager 类,用于管理铃声。 +import android.net.Uri; //表示引入 Android 应用程序中的 Uri 类,用于表示统一资源标识符。 +import android.os.Bundle; //表示引入 Android 应用程序中的 Bundle 类,用于传递数据。 +import android.os.PowerManager; //表示引入 Android 应用程序中的 PowerManager 类,用于管理设备电源。 +import android.provider.Settings; //表示引入 Android 应用程序中的 Settings 类,用于访问设备设置。 +import android.view.Window; //表示引入 Android 应用程序中的 Window 类,用于管理窗口。 +import android.view.WindowManager; //表示引入 Android 应用程序中的 WindowManager 类,用于管理窗口布局和显示。 + +import net.micode.notes.R; +import net.micode.notes.data.Notes; +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 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中获得状态数据 + 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()是实现数据共享,实例存储。 + 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; + } + /* + try + { + // 代码区 + } + catch(Exception e) + { + // 异常处理 + } + 代码区如果有错误,就会返回所写异常的处理。*/ + 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,得到闹钟提示音 + int silentModeStreams = Settings.System.getInt(getContentResolver(), + Settings.System.MODE_RINGER_STREAMS_AFFECTED, 0); + + if ((silentModeStreams & (1 << AudioManager.STREAM_ALARM)) != 0) { + mPlayer.setAudioStreamType(silentModeStreams); + } else { + mPlayer.setAudioStreamType(AudioManager.STREAM_ALARM); + } + try { + mPlayer.setDataSource(this, url); + //方法:setDataSource(Context context, Uri uri) + //解释:无返回值,设置多媒体数据来源【根据 Uri】 + mPlayer.prepare(); + //准备同步 + mPlayer.setLooping(true); + //设置是否循环播放 + mPlayer.start(); + //开始播放 + } catch (IllegalArgumentException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + //e.printStackTrace()函数功能是抛出异常, 还将显示出更深的调用信息 + //System.out.println(e),这个方法打印出异常,并且输出在哪里出现的异常 + } catch (SecurityException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IllegalStateException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + private void showActionDialog() { + AlertDialog.Builder dialog = new AlertDialog.Builder(this); + //AlertDialog的构造方法全部是Protected的 + //所以不能直接通过new一个AlertDialog来创建出一个AlertDialog。 + //要创建一个AlertDialog,就要用到AlertDialog.Builder中的create()方法 + //如这里的dialog就是新建了一个AlertDialog + dialog.setTitle(R.string.app_name); + //为对话框设置标题 + dialog.setMessage(mSnippet); + //为对话框设置内容 + dialog.setPositiveButton(R.string.notealert_ok, this); + //给对话框添加"Yes"按钮 + if (isScreenOn()) { + dialog.setNegativeButton(R.string.notealert_enter, this); + }//对话框添加"No"按钮 + dialog.show().setOnDismissListener(this); + } + + public void onClick(DialogInterface dialog, int which) { + switch (which) { + //用which来选择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为键 + startActivity(intent); + //开始动作 + break; + default: + //这是确定操作 + break; + } + } + + public void onDismiss(DialogInterface dialog) { + //忽略 + stopAlarmSound(); + //停止闹钟声音 + finish(); + //完成该动作 + } + + private void stopAlarmSound() { + if (mPlayer != null) { + mPlayer.stop(); + //停止播放 + mPlayer.release(); + //释放MediaPlayer对象 + mPlayer = null; + } + } +} diff --git a/java/net/micode/notes/ui/AlarmInitReceiver.java b/java/net/micode/notes/ui/AlarmInitReceiver.java new file mode 100644 index 0000000..bbeae00 --- /dev/null +++ b/java/net/micode/notes/ui/AlarmInitReceiver.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.ui; + +import android.app.AlarmManager; +import android.app.PendingIntent; +import android.content.BroadcastReceiver; +import android.content.ContentUris; +import android.content.Context; +import android.content.Intent; +import android.database.Cursor; + +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.NoteColumns; + + +public class AlarmInitReceiver extends BroadcastReceiver { + + private static final String [] PROJECTION = new String [] { + NoteColumns.ID, + NoteColumns.ALERTED_DATE + }; + //对数据库的操作,调用标签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时起的毫秒数 + 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转化为字符串 + null); + //Cursor在这里的作用是通过查找数据库中的标签内容,找到和当前系统时间相等的标签 + + if (c != null) { + if (c.moveToFirst()) { + do { + long alertDate = c.getLong(COLUMN_ALERTED_DATE); + Intent sender = new Intent(context, AlarmReceiver.class); + sender.setData(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, c.getLong(COLUMN_ID))); + PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, sender, 0); + AlarmManager alermManager = (AlarmManager) context + .getSystemService(Context.ALARM_SERVICE); + alermManager.set(AlarmManager.RTC_WAKEUP, alertDate, pendingIntent); + } while (c.moveToNext()); + } + c.close(); + } + //然而通过网上查找资料发现,对于闹钟机制的启动,通常需要上面的几个步骤 + //如新建Intent、PendingIntent以及AlarmManager等 + //这里就是根据数据库里的闹钟时间创建一个闹钟机制 + } +} diff --git a/java/net/micode/notes/ui/AlarmReceiver.java b/java/net/micode/notes/ui/AlarmReceiver.java new file mode 100644 index 0000000..814fec2 --- /dev/null +++ b/java/net/micode/notes/ui/AlarmReceiver.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.ui; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +public class AlarmReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + intent.setClass(context, AlarmAlertActivity.class); + //启动AlarmAlertActivity + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + //activity要存在于activity的栈中,而非activity的途径启动activity时必然不存在一个activity的栈 + //所以要新起一个栈装入启动的activity + context.startActivity(intent); + } +} +//这是实现alarm这个功能最接近用户层的包,基于上面的两个包, +//作用还需要深究但是对于setClass和addFlags的 diff --git a/java/net/micode/notes/ui/DateTimePicker.java b/java/net/micode/notes/ui/DateTimePicker.java new file mode 100644 index 0000000..f917268 --- /dev/null +++ b/java/net/micode/notes/ui/DateTimePicker.java @@ -0,0 +1,508 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.ui;//将当前的 Java 文件放置在 net.micode.notes.ui 这个包中。 + + +import java.text.DateFormatSymbols; +import java.util.Calendar; + +import net.micode.notes.R; + + +import android.content.Context; +import android.text.format.DateFormat; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.NumberPicker; + +public class DateTimePicker extends FrameLayout { + //FrameLayout是布局模板之一 + //所有的子元素全部在屏幕的右上方 + private static final boolean DEFAULT_ENABLE_STATE = true; + + private static final int HOURS_IN_HALF_DAY = 12; + private static final int HOURS_IN_ALL_DAY = 24; + private static final int DAYS_IN_ALL_WEEK = 7; + private static final int DATE_SPINNER_MIN_VAL = 0; + private static final int DATE_SPINNER_MAX_VAL = DAYS_IN_ALL_WEEK - 1; + private static final int HOUR_SPINNER_MIN_VAL_24_HOUR_VIEW = 0; + private static final int HOUR_SPINNER_MAX_VAL_24_HOUR_VIEW = 23; + private static final int HOUR_SPINNER_MIN_VAL_12_HOUR_VIEW = 1; + private static final int HOUR_SPINNER_MAX_VAL_12_HOUR_VIEW = 12; + private static final int MINUT_SPINNER_MIN_VAL = 0; + private static final int MINUT_SPINNER_MAX_VAL = 59; + private static final int AMPM_SPINNER_MIN_VAL = 0; + private static final int AMPM_SPINNER_MAX_VAL = 1; + //初始化控件 + private final NumberPicker mDateSpinner; + private final NumberPicker mHourSpinner; + private final NumberPicker mMinuteSpinner; + private final NumberPicker mAmPmSpinner; + //NumberPicker是数字选择器 + //这里定义的四个变量全部是在设置闹钟时需要选择的变量(如日期、时、分、上午或者下午) + private Calendar mDate; + //定义了Calendar类型的变量mDate,用于操作时间 + private String[] mDateDisplayValues = new String[DAYS_IN_ALL_WEEK]; + + private boolean mIsAm; + + private boolean mIs24HourView; + + private boolean mIsEnabled = DEFAULT_ENABLE_STATE; + + private boolean mInitialising; + + private OnDateTimeChangedListener mOnDateTimeChangedListener; + + private NumberPicker.OnValueChangeListener mOnDateChangedListener = new NumberPicker.OnValueChangeListener() { + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + mDate.add(Calendar.DAY_OF_YEAR, newVal - oldVal); + updateDateControl(); + onDateTimeChanged(); + } + };//OnValueChangeListener,这是时间改变监听器,这里主要是对日期的监听 + //将现在日期的值传递给mDate;updateDateControl是同步操作 + + private NumberPicker.OnValueChangeListener mOnHourChangedListener = new NumberPicker.OnValueChangeListener() { + //这里是对 小时(Hour) 的监听 + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + boolean isDateChanged = false; + Calendar cal = Calendar.getInstance(); + //声明一个Calendar的变量cal,便于后续的操作 + if (!mIs24HourView) { + if (!mIsAm && oldVal == HOURS_IN_HALF_DAY - 1 && newVal == HOURS_IN_HALF_DAY) { + cal.setTimeInMillis(mDate.getTimeInMillis()); + cal.add(Calendar.DAY_OF_YEAR, 1); + isDateChanged = true; + //这里是对于12小时制时,晚上11点和12点交替时对日期的更改 + } else if (mIsAm && oldVal == HOURS_IN_HALF_DAY && newVal == HOURS_IN_HALF_DAY - 1) { + cal.setTimeInMillis(mDate.getTimeInMillis()); + cal.add(Calendar.DAY_OF_YEAR, -1); + isDateChanged = true; + } + //这里是对于12小时制时,凌晨11点和12点交替时对日期的更改 + if (oldVal == HOURS_IN_HALF_DAY - 1 && newVal == HOURS_IN_HALF_DAY || + oldVal == HOURS_IN_HALF_DAY && newVal == HOURS_IN_HALF_DAY - 1) { + mIsAm = !mIsAm; + updateAmPmControl(); + }//这里是对于12小时制时,中午11点和12点交替时对AM和PM的更改 + } else { + if (oldVal == HOURS_IN_ALL_DAY - 1 && newVal == 0) { + cal.setTimeInMillis(mDate.getTimeInMillis()); + cal.add(Calendar.DAY_OF_YEAR, 1); + isDateChanged = true; + //这里是对于24小时制时,晚上11点和12点交替时对日期的更改 + } else if (oldVal == 0 && newVal == HOURS_IN_ALL_DAY - 1) { + cal.setTimeInMillis(mDate.getTimeInMillis()); + cal.add(Calendar.DAY_OF_YEAR, -1); + isDateChanged = true; + } + } //这里是对于12小时制时,凌晨11点和12点交替时对日期的更改 + int newHour = mHourSpinner.getValue() % HOURS_IN_HALF_DAY + (mIsAm ? 0 : HOURS_IN_HALF_DAY); + //通过数字选择器对newHour的赋值 + mDate.set(Calendar.HOUR_OF_DAY, newHour); + //通过set函数将新的Hour值传给mDate + onDateTimeChanged(); + if (isDateChanged) { + setCurrentYear(cal.get(Calendar.YEAR)); + setCurrentMonth(cal.get(Calendar.MONTH)); + setCurrentDay(cal.get(Calendar.DAY_OF_MONTH)); + } + } + }; + + private NumberPicker.OnValueChangeListener mOnMinuteChangedListener = new NumberPicker.OnValueChangeListener() { + @Override + //这里是对 分钟(Minute)改变的监听 + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + int minValue = mMinuteSpinner.getMinValue(); + int maxValue = mMinuteSpinner.getMaxValue(); + int offset = 0; + //设置offset,作为小时改变的一个记录数据 + if (oldVal == maxValue && newVal == minValue) { + offset += 1; + } else if (oldVal == minValue && newVal == maxValue) { + offset -= 1; + } + //如果原值为59,新值为0,则offset加1 + //如果原值为0,新值为59,则offset减1 + if (offset != 0) { + mDate.add(Calendar.HOUR_OF_DAY, offset); + mHourSpinner.setValue(getCurrentHour()); + updateDateControl(); + int newHour = getCurrentHourOfDay(); + if (newHour >= HOURS_IN_HALF_DAY) { + mIsAm = false; + updateAmPmControl(); + } else { + mIsAm = true; + updateAmPmControl(); + } + } + mDate.set(Calendar.MINUTE, newVal); + onDateTimeChanged(); + } + }; + + private NumberPicker.OnValueChangeListener mOnAmPmChangedListener = new NumberPicker.OnValueChangeListener() { + //对AM和PM的监听 + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + mIsAm = !mIsAm; + if (mIsAm) { + mDate.add(Calendar.HOUR_OF_DAY, -HOURS_IN_HALF_DAY); + } else { + mDate.add(Calendar.HOUR_OF_DAY, HOURS_IN_HALF_DAY); + } + updateAmPmControl(); + onDateTimeChanged(); + } + }; + + public interface OnDateTimeChangedListener { + void onDateTimeChanged(DateTimePicker view, int year, int month, + int dayOfMonth, int hourOfDay, int minute); + } + + public DateTimePicker(Context context) { + this(context, System.currentTimeMillis()); + }//通过对数据库的访问,获取当前的系统时间 + + public DateTimePicker(Context context, long date) { + this(context, date, DateFormat.is24HourFormat(context)); + }//上面函数的得到的是一个天文数字(1970至今的秒数),需要DateFormat将其变得有意义 + + public DateTimePicker(Context context, long date, boolean is24HourView) { + super(context); + //获取系统时间 + mDate = Calendar.getInstance(); + mInitialising = true; + mIsAm = getCurrentHourOfDay() >= HOURS_IN_HALF_DAY; + inflate(context, R.layout.datetime_picker, this); + //如果当前Activity里用到别的layout,比如对话框layout + //还要设置这个layout上的其他组件的内容,就必须用inflate()方法先将对话框的layout找出来 + //然后再用findViewById()找到它上面的其它组件 + mDateSpinner = (NumberPicker) findViewById(R.id.date); + mDateSpinner.setMinValue(DATE_SPINNER_MIN_VAL); + mDateSpinner.setMaxValue(DATE_SPINNER_MAX_VAL); + mDateSpinner.setOnValueChangedListener(mOnDateChangedListener); + + mHourSpinner = (NumberPicker) findViewById(R.id.hour); + mHourSpinner.setOnValueChangedListener(mOnHourChangedListener); + mMinuteSpinner = (NumberPicker) findViewById(R.id.minute); + mMinuteSpinner.setMinValue(MINUT_SPINNER_MIN_VAL); + mMinuteSpinner.setMaxValue(MINUT_SPINNER_MAX_VAL); + mMinuteSpinner.setOnLongPressUpdateInterval(100); + mMinuteSpinner.setOnValueChangedListener(mOnMinuteChangedListener); + + String[] stringsForAmPm = new DateFormatSymbols().getAmPmStrings(); + mAmPmSpinner = (NumberPicker) findViewById(R.id.amPm); + mAmPmSpinner.setMinValue(AMPM_SPINNER_MIN_VAL); + mAmPmSpinner.setMaxValue(AMPM_SPINNER_MAX_VAL); + mAmPmSpinner.setDisplayedValues(stringsForAmPm); + mAmPmSpinner.setOnValueChangedListener(mOnAmPmChangedListener); + + // update controls to initial state + updateDateControl(); + updateHourControl(); + updateAmPmControl(); + + set24HourView(is24HourView); + + // set to current time + setCurrentDate(date); + + setEnabled(isEnabled()); + + // set the content descriptions + mInitialising = false; + } + + @Override + public void setEnabled(boolean enabled) { + if (mIsEnabled == enabled) { + return; + } + super.setEnabled(enabled); + mDateSpinner.setEnabled(enabled); + mMinuteSpinner.setEnabled(enabled); + mHourSpinner.setEnabled(enabled); + mAmPmSpinner.setEnabled(enabled); + mIsEnabled = enabled; + } + //存在疑问!!!!!!!!!!!!!setEnabled的作用 + //下面的代码通过原程序的注释已经比较清晰,另外可以通过函数名来判断 + //下面的各函数主要是对上面代码引用到的各函数功能的实现 + @Override + public boolean isEnabled() { + return mIsEnabled; + } + + /** + * Get the current date in millis + * + * @return the current date in millis + */ + public long getCurrentDateInTimeMillis() { + return mDate.getTimeInMillis(); + }//实现函数——得到当前的秒数 + + /** + * Set the current date + * + * @param date The current date in millis + */ + public void setCurrentDate(long date) { + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(date); + setCurrentDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), + cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE)); + }//实现函数功能——设置当前的时间,参数是date + + /** + * Set the current date + * + * @param year The current year + * @param month The current month + * @param dayOfMonth The current dayOfMonth + * @param hourOfDay The current hourOfDay + * @param minute The current minute + */ + public void setCurrentDate(int year, int month, + int dayOfMonth, int hourOfDay, int minute) { + setCurrentYear(year); + setCurrentMonth(month); + setCurrentDay(dayOfMonth); + setCurrentHour(hourOfDay); + setCurrentMinute(minute); + }//实现函数功能——设置当前的时间,参数是各详细的变量 + + /** + * Get current year + * + * @return The current year + */ + //下面是得到year、month、day等值 + public int getCurrentYear() { + return mDate.get(Calendar.YEAR); + } + + /** + * Set current year + * + * @param year The current year + */ + public void setCurrentYear(int year) { + if (!mInitialising && year == getCurrentYear()) { + return; + } + mDate.set(Calendar.YEAR, year); + updateDateControl(); + onDateTimeChanged(); + } + + /** + * Get current month in the year + * + * @return The current month in the year + */ + public int getCurrentMonth() { + return mDate.get(Calendar.MONTH); + } + + /** + * Set current month in the year + * + * @param month The month in the year + */ + public void setCurrentMonth(int month) { + if (!mInitialising && month == getCurrentMonth()) { + return; + } + mDate.set(Calendar.MONTH, month); + updateDateControl(); + onDateTimeChanged(); + } + + /** + * Get current day of the month + * + * @return The day of the month + */ + public int getCurrentDay() { + return mDate.get(Calendar.DAY_OF_MONTH); + } + + /** + * Set current day of the month + * + * @param dayOfMonth The day of the month + */ + public void setCurrentDay(int dayOfMonth) { + if (!mInitialising && dayOfMonth == getCurrentDay()) { + return; + } + mDate.set(Calendar.DAY_OF_MONTH, dayOfMonth); + updateDateControl(); + onDateTimeChanged(); + } + + /** + * Get current hour in 24 hour mode, in the range (0~23) + * @return The current hour in 24 hour mode + */ + public int getCurrentHourOfDay() { + return mDate.get(Calendar.HOUR_OF_DAY); + } + + private int getCurrentHour() { + if (mIs24HourView){ + return getCurrentHourOfDay(); + } else { + int hour = getCurrentHourOfDay(); + if (hour > HOURS_IN_HALF_DAY) { + return hour - HOURS_IN_HALF_DAY; + } else { + return hour == 0 ? HOURS_IN_HALF_DAY : hour; + } + } + } + + /** + * Set current hour in 24 hour mode, in the range (0~23) + * + * @param hourOfDay + */ + public void setCurrentHour(int hourOfDay) { + if (!mInitialising && hourOfDay == getCurrentHourOfDay()) { + return; + } + mDate.set(Calendar.HOUR_OF_DAY, hourOfDay); + if (!mIs24HourView) { + if (hourOfDay >= HOURS_IN_HALF_DAY) { + mIsAm = false; + if (hourOfDay > HOURS_IN_HALF_DAY) { + hourOfDay -= HOURS_IN_HALF_DAY; + } + } else { + mIsAm = true; + if (hourOfDay == 0) { + hourOfDay = HOURS_IN_HALF_DAY; + } + } + updateAmPmControl(); + } + mHourSpinner.setValue(hourOfDay); + onDateTimeChanged(); + } + + /** + * Get currentMinute + * + * @return The Current Minute + */ + public int getCurrentMinute() { + return mDate.get(Calendar.MINUTE); + } + + /** + * Set current minute + */ + public void setCurrentMinute(int minute) { + if (!mInitialising && minute == getCurrentMinute()) { + return; + } + mMinuteSpinner.setValue(minute); + mDate.set(Calendar.MINUTE, minute); + onDateTimeChanged(); + } + + /** + * @return true if this is in 24 hour view else false. + */ + public boolean is24HourView () { + return mIs24HourView; + } + + /** + * Set whether in 24 hour or AM/PM mode. + * + * @param is24HourView True for 24 hour mode. False for AM/PM mode. + */ + public void set24HourView(boolean is24HourView) { + if (mIs24HourView == is24HourView) { + return; + } + mIs24HourView = is24HourView; + mAmPmSpinner.setVisibility(is24HourView ? View.GONE : View.VISIBLE); + int hour = getCurrentHourOfDay(); + updateHourControl(); + setCurrentHour(hour); + updateAmPmControl(); + } + + private void updateDateControl() { + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(mDate.getTimeInMillis()); + cal.add(Calendar.DAY_OF_YEAR, -DAYS_IN_ALL_WEEK / 2 - 1); + mDateSpinner.setDisplayedValues(null); + for (int i = 0; i < DAYS_IN_ALL_WEEK; ++i) { + cal.add(Calendar.DAY_OF_YEAR, 1); + mDateDisplayValues[i] = (String) DateFormat.format("MM.dd EEEE", cal); + } + mDateSpinner.setDisplayedValues(mDateDisplayValues); + mDateSpinner.setValue(DAYS_IN_ALL_WEEK / 2); + mDateSpinner.invalidate(); + }// 对于星期几的算法 + + private void updateAmPmControl() { + if (mIs24HourView) { + mAmPmSpinner.setVisibility(View.GONE); + } else { + int index = mIsAm ? Calendar.AM : Calendar.PM; + mAmPmSpinner.setValue(index); + mAmPmSpinner.setVisibility(View.VISIBLE); + }// 对于上下午操作的算法 + } + + private void updateHourControl() { + if (mIs24HourView) { + mHourSpinner.setMinValue(HOUR_SPINNER_MIN_VAL_24_HOUR_VIEW); + mHourSpinner.setMaxValue(HOUR_SPINNER_MAX_VAL_24_HOUR_VIEW); + } else { + mHourSpinner.setMinValue(HOUR_SPINNER_MIN_VAL_12_HOUR_VIEW); + mHourSpinner.setMaxValue(HOUR_SPINNER_MAX_VAL_12_HOUR_VIEW); + }// 对与小时的算法 + } + + /** + * Set the callback that indicates the 'Set' button has been pressed. + * @param callback the callback, if null will do nothing + */ + public void setOnDateTimeChangedListener(OnDateTimeChangedListener callback) { + mOnDateTimeChangedListener = callback; + } + + private void onDateTimeChanged() { + if (mOnDateTimeChangedListener != null) { + mOnDateTimeChangedListener.onDateTimeChanged(this, getCurrentYear(), + getCurrentMonth(), getCurrentDay(), getCurrentHourOfDay(), getCurrentMinute()); + } + } +} diff --git a/java/net/micode/notes/ui/DateTimePickerDialog.java b/java/net/micode/notes/ui/DateTimePickerDialog.java new file mode 100644 index 0000000..0bf2f00 --- /dev/null +++ b/java/net/micode/notes/ui/DateTimePickerDialog.java @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.ui; + +import java.util.Calendar; + +import net.micode.notes.R; +import net.micode.notes.ui.DateTimePicker; +import net.micode.notes.ui.DateTimePicker.OnDateTimeChangedListener; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.DialogInterface.OnClickListener; +import android.text.format.DateFormat; +import android.text.format.DateUtils; + +public class DateTimePickerDialog extends AlertDialog implements OnClickListener { + + private Calendar mDate = Calendar.getInstance(); + //创建一个Calendar类型的变量 mDate,方便时间的操作 + private boolean mIs24HourView; + private OnDateTimeSetListener mOnDateTimeSetListener; + //声明一个时间日期滚动选择控件 mOnDateTimeSetListener + private DateTimePicker mDateTimePicker; + //DateTimePicker控件,控件一般用于让用户可以从日期列表中选择单个值。 + //运行时,单击控件边上的下拉箭头,会显示为两个部分:一个下拉列表,一个用于选择日期的 + + public interface OnDateTimeSetListener { + void OnDateTimeSet(AlertDialog dialog, long date); + } + + public DateTimePickerDialog(Context context, long date) { + //对该界面对话框的实例化 + super(context); + //对数据库的操作 + mDateTimePicker = new DateTimePicker(context); + setView(mDateTimePicker); + //添加一个子视图 + mDateTimePicker.setOnDateTimeChangedListener(new OnDateTimeChangedListener() { + public void onDateTimeChanged(DateTimePicker view, int year, int month, + int dayOfMonth, int hourOfDay, int minute) { + mDate.set(Calendar.YEAR, year); + mDate.set(Calendar.MONTH, month); + mDate.set(Calendar.DAY_OF_MONTH, dayOfMonth); + mDate.set(Calendar.HOUR_OF_DAY, hourOfDay); + mDate.set(Calendar.MINUTE, minute); + //将视图中的各选项设置为系统当前时间 + updateTitle(mDate.getTimeInMillis()); + } + }); + mDate.setTimeInMillis(date); + //得到系统时间 + mDate.set(Calendar.SECOND, 0); + //将秒数设置为0 + mDateTimePicker.setCurrentDate(mDate.getTimeInMillis()); + setButton(context.getString(R.string.datetime_dialog_ok), this); + setButton2(context.getString(R.string.datetime_dialog_cancel), (OnClickListener)null); + //设置按钮 + set24HourView(DateFormat.is24HourFormat(this.getContext())); + //时间标准化打印 + updateTitle(mDate.getTimeInMillis()); + } + + public void set24HourView(boolean is24HourView) { + mIs24HourView = is24HourView; + } + + public void setOnDateTimeSetListener(OnDateTimeSetListener callBack) { + mOnDateTimeSetListener = callBack; + }//将时间日期滚动选择控件实例化 + + private void updateTitle(long date) { + int flag = + DateUtils.FORMAT_SHOW_YEAR | + DateUtils.FORMAT_SHOW_DATE | + DateUtils.FORMAT_SHOW_TIME; + flag |= mIs24HourView ? DateUtils.FORMAT_24HOUR : DateUtils.FORMAT_24HOUR; + setTitle(DateUtils.formatDateTime(this.getContext(), date, flag)); + }//android开发中常见日期管理工具类(API)——DateUtils:按照上下午显示时间 + + public void onClick(DialogInterface arg0, int arg1) { + if (mOnDateTimeSetListener != null) { + mOnDateTimeSetListener.OnDateTimeSet(this, mDate.getTimeInMillis()); + } + }//第一个参数arg0是接收到点击事件的对话框 + //第二个参数arg1是该对话框上的按钮 + +} \ No newline at end of file diff --git a/java/net/micode/notes/ui/DropdownMenu.java b/java/net/micode/notes/ui/DropdownMenu.java new file mode 100644 index 0000000..3e7386c --- /dev/null +++ b/java/net/micode/notes/ui/DropdownMenu.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.ui; + +import android.content.Context; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.Button; +import android.widget.PopupMenu; +import android.widget.PopupMenu.OnMenuItemClickListener; + +import net.micode.notes.R; + +public class DropdownMenu { + private Button mButton; + private PopupMenu mPopupMenu; + //声明一个下拉菜单 + private Menu mMenu; + + public DropdownMenu(Context context, Button button, int menuId) { + mButton = button; + mButton.setBackgroundResource(R.drawable.dropdown_icon); + //设置这个view的背景 + mPopupMenu = new PopupMenu(context, mButton); + mMenu = mPopupMenu.getMenu(); + mPopupMenu.getMenuInflater().inflate(menuId, mMenu); + //MenuInflater是用来实例化Menu目录下的Menu布局文件 + //根据ID来确认menu的内容选项 + mButton.setOnClickListener(new OnClickListener() { + public void onClick(View v) { + mPopupMenu.show(); + } + }); + } + + public void setOnDropdownMenuItemClickListener(OnMenuItemClickListener listener) { + if (mPopupMenu != null) { + mPopupMenu.setOnMenuItemClickListener(listener); + }//设置菜单的监听 + } + + public MenuItem findItem(int id) { + return mMenu.findItem(id); + }//对于菜单选项的初始化,根据索引搜索菜单需要的选项 + + public void setTitle(CharSequence title) { + mButton.setText(title); + }//布局文件,设置标题 +} diff --git a/java/net/micode/notes/ui/FoldersListAdapter.java b/java/net/micode/notes/ui/FoldersListAdapter.java new file mode 100644 index 0000000..fa714df --- /dev/null +++ b/java/net/micode/notes/ui/FoldersListAdapter.java @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.ui; + +import android.content.Context; +import android.database.Cursor; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CursorAdapter; +import android.widget.LinearLayout; +import android.widget.TextView; + +import net.micode.notes.R; +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.NoteColumns; + + +public class FoldersListAdapter extends CursorAdapter { + //CursorAdapter是Cursor和ListView的接口 + //FoldersListAdapter继承了CursorAdapter的类 + //主要作用是便签数据库和用户的交互 + //这里就是用folder(文件夹)的形式展现给用户 + public static final String [] PROJECTION = { + NoteColumns.ID, + NoteColumns.SNIPPET + };//调用数据库中便签的ID和片段 + + public static final int ID_COLUMN = 0; + public static final int NAME_COLUMN = 1; + + public FoldersListAdapter(Context context, Cursor c) { + super(context, c); + // TODO Auto-generated constructor stub + }//数据库操作 + + @Override + public View newView(Context context, Cursor cursor, ViewGroup parent) { + //ViewGroup是容器 + return new FolderListItem(context); + }//创建一个文件夹,对于各文件夹中子标签的初始化 + + @Override + public void bindView(View view, Context context, Cursor cursor) { + if (view instanceof FolderListItem) { + String folderName = (cursor.getLong(ID_COLUMN) == Notes.ID_ROOT_FOLDER) ? context + .getString(R.string.menu_move_parent_folder) : cursor.getString(NAME_COLUMN); + ((FolderListItem) view).bind(folderName); + } + }//将各个布局文件绑定起来 + + public String getFolderName(Context context, int position) { + Cursor cursor = (Cursor) getItem(position); + return (cursor.getLong(ID_COLUMN) == Notes.ID_ROOT_FOLDER) ? context + .getString(R.string.menu_move_parent_folder) : cursor.getString(NAME_COLUMN); + }//根据数据库中标签的ID得到标签的各项内容 + + private class FolderListItem extends LinearLayout { + private TextView mName; + + public FolderListItem(Context context) { + super(context); + //操作数据库 + inflate(context, R.layout.folder_list_item, this); + //根据布局文件的名字等信息将其找出来 + mName = (TextView) findViewById(R.id.tv_folder_name); + } + + public void bind(String name) { + mName.setText(name); + } + } +} diff --git a/java/net/micode/notes/ui/NoteEditActivity.java b/java/net/micode/notes/ui/NoteEditActivity.java new file mode 100644 index 0000000..6dc52b0 --- /dev/null +++ b/java/net/micode/notes/ui/NoteEditActivity.java @@ -0,0 +1,1068 @@ +package net.micode.notes.ui; + +import android.app.Activity; +import android.app.AlarmManager; +import android.app.AlertDialog; +import android.app.PendingIntent; +import android.app.SearchManager; +import android.appwidget.AppWidgetManager; +import android.content.ContentUris; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.SharedPreferences; +import android.graphics.Paint; +import android.os.Bundle; +import android.preference.PreferenceManager; +import android.text.Spannable; +import android.text.SpannableString; +import android.text.TextUtils; +import android.text.format.DateUtils; +import android.text.style.BackgroundColorSpan; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; +import android.view.MotionEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.WindowManager; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.CompoundButton.OnCheckedChangeListener; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; +import android.widget.Toast; + +import net.micode.notes.R; +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.TextNote; +import net.micode.notes.model.WorkingNote; +import net.micode.notes.model.WorkingNote.NoteSettingChangedListener; +import net.micode.notes.tool.DataUtils; +import net.micode.notes.tool.ResourceParser; +import net.micode.notes.tool.ResourceParser.TextAppearanceResources; +import net.micode.notes.ui.DateTimePickerDialog.OnDateTimeSetListener; +import net.micode.notes.ui.NoteEditText; +import net.micode.notes.ui.NoteEditText.OnTextViewChangeListener; +import net.micode.notes.widget.NoteWidgetProvider_2x; +import net.micode.notes.widget.NoteWidgetProvider_4x; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + + +public class NoteEditActivity extends Activity implements OnClickListener, + NoteSettingChangedListener, OnTextViewChangeListener { + //该类主要是针对标签的编辑 + //继承了系统内部许多和监听有关的类 + private class HeadViewHolder { + public TextView tvModified; + + public ImageView ivAlertIcon; + + public TextView tvAlertDate; + + public ImageView ibSetBgColor; + } + //使用Map实现数据存储 + private static final Map sBgSelectorBtnsMap = new HashMap(); + static { + sBgSelectorBtnsMap.put(R.id.iv_bg_yellow, ResourceParser.YELLOW); + sBgSelectorBtnsMap.put(R.id.iv_bg_red, ResourceParser.RED); + sBgSelectorBtnsMap.put(R.id.iv_bg_blue, ResourceParser.BLUE); + sBgSelectorBtnsMap.put(R.id.iv_bg_green, ResourceParser.GREEN); + sBgSelectorBtnsMap.put(R.id.iv_bg_white, ResourceParser.WHITE); + //put函数是将指定值和指定键相连 + } + + private static final Map sBgSelectorSelectionMap = new HashMap(); + static { + sBgSelectorSelectionMap.put(ResourceParser.YELLOW, R.id.iv_bg_yellow_select); + sBgSelectorSelectionMap.put(ResourceParser.RED, R.id.iv_bg_red_select); + sBgSelectorSelectionMap.put(ResourceParser.BLUE, R.id.iv_bg_blue_select); + sBgSelectorSelectionMap.put(ResourceParser.GREEN, R.id.iv_bg_green_select); + sBgSelectorSelectionMap.put(ResourceParser.WHITE, R.id.iv_bg_white_select); + //put函数是将指定值和指定键相连 + } + + private static final Map sFontSizeBtnsMap = new HashMap(); + static { + sFontSizeBtnsMap.put(R.id.ll_font_large, ResourceParser.TEXT_LARGE); + sFontSizeBtnsMap.put(R.id.ll_font_small, ResourceParser.TEXT_SMALL); + sFontSizeBtnsMap.put(R.id.ll_font_normal, ResourceParser.TEXT_MEDIUM); + sFontSizeBtnsMap.put(R.id.ll_font_super, ResourceParser.TEXT_SUPER); + //put函数是将指定值和指定键相连 + } + + private static final Map sFontSelectorSelectionMap = new HashMap(); + static { + sFontSelectorSelectionMap.put(ResourceParser.TEXT_LARGE, R.id.iv_large_select); + sFontSelectorSelectionMap.put(ResourceParser.TEXT_SMALL, R.id.iv_small_select); + sFontSelectorSelectionMap.put(ResourceParser.TEXT_MEDIUM, R.id.iv_medium_select); + sFontSelectorSelectionMap.put(ResourceParser.TEXT_SUPER, R.id.iv_super_select); + //put函数是将指定值和指定键相连 + } + + private static final String TAG = "NoteEditActivity"; + + private HeadViewHolder mNoteHeaderHolder; + + private View mHeadViewPanel; + //私有化一个界面操作mHeadViewPanel,对表头的操作 + private View mNoteBgColorSelector; + //私有化一个界面操作mNoteBgColorSelector,对背景颜色的操作 + private View mFontSizeSelector; + //私有化一个界面操作mFontSizeSelector,对标签字体的操作 + private NoteEditText mNoteEditor; + //声明编辑控件,对文本操作 + private View mNoteEditorPanel; + //私有化一个界面操作mNoteEditorPanel,文本编辑的控制板 + //private WorkingNote mWorkingNote; + public WorkingNote mWorkingNote; + //对模板WorkingNote的初始化 + private SharedPreferences mSharedPrefs; + //私有化SharedPreferences的数据存储方式 + //它的本质是基于XML文件存储key-value键值对数据 + private int mFontSizeId; + //用于操作字体的大小 + private static final String PREFERENCE_FONT_SIZE = "pref_font_size"; + + private static final int SHORTCUT_ICON_TITLE_MAX_LEN = 10; + + public static final String TAG_CHECKED = String.valueOf('\u221A'); + public static final String TAG_UNCHECKED = String.valueOf('\u25A1'); + + private LinearLayout mEditTextList; + //线性布局 + private String mUserQuery; + private Pattern mPattern; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + this.setContentView(R.layout.note_edit); + //对数据库的访问操作 + if (savedInstanceState == null && !initActivityState(getIntent())) { + finish(); + return; + } + initResources(); + } + + /** + * Current activity may be killed when the memory is low. Once it is killed, for another time + * user load this activity, we should restore the former state + */ + @Override + protected void onRestoreInstanceState(Bundle savedInstanceState) { + super.onRestoreInstanceState(savedInstanceState); + if (savedInstanceState != null && savedInstanceState.containsKey(Intent.EXTRA_UID)) { + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.putExtra(Intent.EXTRA_UID, savedInstanceState.getLong(Intent.EXTRA_UID)); + if (!initActivityState(intent)) { + finish(); + return; + } + Log.d(TAG, "Restoring from killed activity"); + }//为防止内存不足时程序的终止,在这里有一个保存现场的函数 + } + + private boolean initActivityState(Intent intent) { + /** + * If the user specified the {@link Intent#ACTION_VIEW} but not provided with id, + * then jump to the NotesListActivity + */ + mWorkingNote = null; + if (TextUtils.equals(Intent.ACTION_VIEW, intent.getAction())) { + long noteId = intent.getLongExtra(Intent.EXTRA_UID, 0); + mUserQuery = ""; + //如果用户实例化标签时,系统并未给出标签ID + /** + * Starting from the searched result + */ + //根据键值查找ID + if (intent.hasExtra(SearchManager.EXTRA_DATA_KEY)) { + noteId = Long.parseLong(intent.getStringExtra(SearchManager.EXTRA_DATA_KEY)); + mUserQuery = intent.getStringExtra(SearchManager.USER_QUERY); + } + //如果ID在数据库中未找到 + if (!DataUtils.visibleInNoteDatabase(getContentResolver(), noteId, Notes.TYPE_NOTE)) { + Intent jump = new Intent(this, NotesListActivity.class); + startActivity(jump); + //程序将跳转到上面声明的intent——jump + showToast(R.string.error_note_not_exist); + finish(); + return false; + } + //ID在数据库中找到 + else { + mWorkingNote = WorkingNote.load(this, noteId); + if (mWorkingNote == null) { + Log.e(TAG, "load note failed with note id" + noteId); + //打印出红色的错误信息 + finish(); + return false; + } + } + //setSoftInputMode——软键盘输入模式 + getWindow().setSoftInputMode( + WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN + | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); + } else if(TextUtils.equals(Intent.ACTION_INSERT_OR_EDIT, intent.getAction())) { + // intent.getAction() + // 大多用于broadcast发送广播时给机制(intent)设置一个action,就是一个字符串 + // 用户可以通过receive(接受)intent,通过 getAction得到的字符串,来决定做什么 + long folderId = intent.getLongExtra(Notes.INTENT_EXTRA_FOLDER_ID, 0); + int widgetId = intent.getIntExtra(Notes.INTENT_EXTRA_WIDGET_ID, + AppWidgetManager.INVALID_APPWIDGET_ID); + int widgetType = intent.getIntExtra(Notes.INTENT_EXTRA_WIDGET_TYPE, + Notes.TYPE_WIDGET_INVALIDE); + int bgResId = intent.getIntExtra(Notes.INTENT_EXTRA_BACKGROUND_ID, + ResourceParser.getDefaultBgId(this)); + // intent.getInt(Long、String)Extra是对各变量的语法分析 + // Parse call-record note + String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); + long callDate = intent.getLongExtra(Notes.INTENT_EXTRA_CALL_DATE, 0); + if (callDate != 0 && phoneNumber != null) { + if (TextUtils.isEmpty(phoneNumber)) { + Log.w(TAG, "The call record number is null"); + } + long noteId = 0; + if ((noteId = DataUtils.getNoteIdByPhoneNumberAndCallDate(getContentResolver(), + phoneNumber, callDate)) > 0) { + mWorkingNote = WorkingNote.load(this, noteId); + if (mWorkingNote == null) { + Log.e(TAG, "load call note failed with note id" + noteId); + finish(); + return false; + } + //将电话号码与手机的号码簿相关 + } else { + mWorkingNote = WorkingNote.createEmptyNote(this, folderId, widgetId, + widgetType, bgResId); + mWorkingNote.convertToCallNote(phoneNumber, callDate); + // + } + } else { + mWorkingNote = WorkingNote.createEmptyNote(this, folderId, widgetId, widgetType, + bgResId); + }//创建一个新的WorkingNote + + getWindow().setSoftInputMode( + WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN + | WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); + } else { + Log.e(TAG, "Intent not specified action, should not support"); + finish(); + return false; + } + mWorkingNote.setOnSettingStatusChangedListener(this); + return true; + } + + @Override + protected void onResume() { + super.onResume(); + initNoteScreen(); + } + + private void initNoteScreen() { + //对界面的初始化操作 + mNoteEditor.setTextAppearance(this, TextAppearanceResources + .getTexAppearanceResource(mFontSizeId)); + //设置外观 + if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) { + switchToListMode(mWorkingNote.getContent()); + } else { + mNoteEditor.setText(getHighlightQueryResult(mWorkingNote.getContent(), mUserQuery)); + mNoteEditor.setSelection(mNoteEditor.getText().length()); + } + for (Integer id : sBgSelectorSelectionMap.keySet()) { + findViewById(sBgSelectorSelectionMap.get(id)).setVisibility(View.GONE); + } + mHeadViewPanel.setBackgroundResource(mWorkingNote.getTitleBgResId()); + mNoteEditorPanel.setBackgroundResource(mWorkingNote.getBgColorResId()); + + mNoteHeaderHolder.tvModified.setText(DateUtils.formatDateTime(this, + mWorkingNote.getModifiedDate(), DateUtils.FORMAT_SHOW_DATE + | DateUtils.FORMAT_NUMERIC_DATE | DateUtils.FORMAT_SHOW_TIME + | DateUtils.FORMAT_SHOW_YEAR)); + + /** + * TODO: Add the menu for setting alert. Currently disable it because the DateTimePicker + * is not ready + */ + showAlertHeader(); + } + //设置闹钟的显示 + private void showAlertHeader() { + if (mWorkingNote.hasClockAlert()) { + long time = System.currentTimeMillis(); + if (time > mWorkingNote.getAlertDate()) { + mNoteHeaderHolder.tvAlertDate.setText(R.string.note_alert_expired); + } + //如果系统时间大于了闹钟设置的时间,那么闹钟失效 + else { + mNoteHeaderHolder.tvAlertDate.setText(DateUtils.getRelativeTimeSpanString( + mWorkingNote.getAlertDate(), time, DateUtils.MINUTE_IN_MILLIS)); + } + mNoteHeaderHolder.tvAlertDate.setVisibility(View.VISIBLE); + mNoteHeaderHolder.ivAlertIcon.setVisibility(View.VISIBLE); + //显示闹钟开启的图标 + } else { + mNoteHeaderHolder.tvAlertDate.setVisibility(View.GONE); + mNoteHeaderHolder.ivAlertIcon.setVisibility(View.GONE); + }; + } + + @Override + protected void onNewIntent(Intent intent) { + super.onNewIntent(intent); + initActivityState(intent); + } + + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + /** + * For new note without note id, we should firstly save it to + * generate a id. If the editing note is not worth saving, there + * is no id which is equivalent to create new note + */ + if (!mWorkingNote.existInDatabase()) { + saveNote(); + } + //在创建一个新的标签时,先在数据库中匹配 + //如果不存在,那么先在数据库中存储 + outState.putLong(Intent.EXTRA_UID, mWorkingNote.getNoteId()); + Log.d(TAG, "Save working note id: " + mWorkingNote.getNoteId() + " onSaveInstanceState"); + } + + @Override + //MotionEvent是对屏幕触控的传递机制 + public boolean dispatchTouchEvent(MotionEvent ev) { + if (mNoteBgColorSelector.getVisibility() == View.VISIBLE + && !inRangeOfView(mNoteBgColorSelector, ev)) { + mNoteBgColorSelector.setVisibility(View.GONE); + return true; + }//颜色选择器在屏幕上可见 + + if (mFontSizeSelector.getVisibility() == View.VISIBLE + && !inRangeOfView(mFontSizeSelector, ev)) { + mFontSizeSelector.setVisibility(View.GONE); + return true; + }//字体大小选择器在屏幕上可见 + return super.dispatchTouchEvent(ev); + } + //对屏幕触控的坐标进行操作 + private boolean inRangeOfView(View view, MotionEvent ev) { + int []location = new int[2]; + view.getLocationOnScreen(location); + int x = location[0]; + int y = location[1]; + if (ev.getX() < x + || ev.getX() > (x + view.getWidth()) + || ev.getY() < y + || ev.getY() > (y + view.getHeight())) + //如果触控的位置超出了给定的范围,返回false + { + return false; + } + return true; + } + + private void initResources() { + mHeadViewPanel = findViewById(R.id.note_title); + mNoteHeaderHolder = new HeadViewHolder(); + mNoteHeaderHolder.tvModified = (TextView) findViewById(R.id.tv_modified_date); + mNoteHeaderHolder.ivAlertIcon = (ImageView) findViewById(R.id.iv_alert_icon); + mNoteHeaderHolder.tvAlertDate = (TextView) findViewById(R.id.tv_alert_date); + mNoteHeaderHolder.ibSetBgColor = (ImageView) findViewById(R.id.btn_set_bg_color); + mNoteHeaderHolder.ibSetBgColor.setOnClickListener(this); + mNoteEditor = (NoteEditText) findViewById(R.id.note_edit_view); + mNoteEditorPanel = findViewById(R.id.sv_note_edit); + mNoteBgColorSelector = findViewById(R.id.note_bg_color_selector); + for (int id : sBgSelectorBtnsMap.keySet()) { + ImageView iv = (ImageView) findViewById(id); + iv.setOnClickListener(this); + }//对标签各项属性内容的初始化 + + mFontSizeSelector = findViewById(R.id.font_size_selector); + for (int id : sFontSizeBtnsMap.keySet()) { + View view = findViewById(id); + view.setOnClickListener(this); + };//对字体大小的选择 + mSharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); + mFontSizeId = mSharedPrefs.getInt(PREFERENCE_FONT_SIZE, ResourceParser.BG_DEFAULT_FONT_SIZE); + /** + * HACKME: Fix bug of store the resource id in shared preference. + * The id may larger than the length of resources, in this case, + * return the {@link ResourceParser#BG_DEFAULT_FONT_SIZE} + */ + if(mFontSizeId >= TextAppearanceResources.getResourcesSize()) { + mFontSizeId = ResourceParser.BG_DEFAULT_FONT_SIZE; + } + mEditTextList = (LinearLayout) findViewById(R.id.note_edit_list); + mNoteEditor.setOnTextViewChangeListener(this); + } + + @Override + protected void onPause() { + super.onPause(); + if(saveNote()) { + Log.d(TAG, "Note data was saved with length:" + mWorkingNote.getContent().length()); + } + clearSettingState(); + } + //和桌面小工具的同步 + private void updateWidget() { + Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE); + if (mWorkingNote.getWidgetType() == Notes.TYPE_WIDGET_2X) { + intent.setClass(this, NoteWidgetProvider_2x.class); + } else if (mWorkingNote.getWidgetType() == Notes.TYPE_WIDGET_4X) { + intent.setClass(this, NoteWidgetProvider_4x.class); + } else { + Log.e(TAG, "Unspported widget type"); + return; + } + + intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] { + mWorkingNote.getWidgetId() + }); + + sendBroadcast(intent); + setResult(RESULT_OK, intent); + } + + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.btn_set_bg_color) { + mNoteBgColorSelector.setVisibility(View.VISIBLE); + findViewById(sBgSelectorSelectionMap.get(mWorkingNote.getBgColorId())).setVisibility( + - View.VISIBLE); + } else if (sBgSelectorBtnsMap.containsKey(id)) { + findViewById(sBgSelectorSelectionMap.get(mWorkingNote.getBgColorId())).setVisibility( + View.GONE); + mWorkingNote.setBgColorId(sBgSelectorBtnsMap.get(id)); + mNoteBgColorSelector.setVisibility(View.GONE); + } else if (sFontSizeBtnsMap.containsKey(id)) { + findViewById(sFontSelectorSelectionMap.get(mFontSizeId)).setVisibility(View.GONE); + mFontSizeId = sFontSizeBtnsMap.get(id); + mSharedPrefs.edit().putInt(PREFERENCE_FONT_SIZE, mFontSizeId).commit(); + findViewById(sFontSelectorSelectionMap.get(mFontSizeId)).setVisibility(View.VISIBLE); + if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) { + getWorkingText(); + switchToListMode(mWorkingNote.getContent()); + } else { + mNoteEditor.setTextAppearance(this, + TextAppearanceResources.getTexAppearanceResource(mFontSizeId)); + } + mFontSizeSelector.setVisibility(View.GONE); + } + }//************************存在问题 + + @Override + public void onBackPressed() { + if(clearSettingState()) { + return; + } + + saveNote(); + super.onBackPressed(); + } + + private boolean clearSettingState() { + if (mNoteBgColorSelector.getVisibility() == View.VISIBLE) { + mNoteBgColorSelector.setVisibility(View.GONE); + return true; + } else if (mFontSizeSelector.getVisibility() == View.VISIBLE) { + mFontSizeSelector.setVisibility(View.GONE); + return true; + } + return false; + } + + public void onBackgroundColorChanged() { + findViewById(sBgSelectorSelectionMap.get(mWorkingNote.getBgColorId())).setVisibility( + View.VISIBLE); + mNoteEditorPanel.setBackgroundResource(mWorkingNote.getBgColorResId()); + mHeadViewPanel.setBackgroundResource(mWorkingNote.getTitleBgResId()); + } + + @Override + //对选择菜单的准备 + public boolean onPrepareOptionsMenu(Menu menu) { + if (isFinishing()) { + return true; + } + clearSettingState(); + menu.clear(); + if (mWorkingNote.getFolderId() == Notes.ID_CALL_RECORD_FOLDER) { + getMenuInflater().inflate(R.menu.call_note_edit, menu); + // MenuInflater是用来实例化Menu目录下的Menu布局文件的 + } else { + getMenuInflater().inflate(R.menu.note_edit, menu); + } + if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) { + menu.findItem(R.id.menu_list_mode).setTitle(R.string.menu_normal_mode); + } else { + menu.findItem(R.id.menu_list_mode).setTitle(R.string.menu_list_mode); + } + if (mWorkingNote.hasClockAlert()) { + menu.findItem(R.id.menu_alert).setVisible(false); + } else { + menu.findItem(R.id.menu_delete_remind).setVisible(false); + } + return true; + } + + @Override + /* + * 函数功能:动态改变菜单选项内容 + * 函数实现:如下注释 + */ + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + //根据菜单的id来编剧相关项目 + case R.id.menu_new_note: + //创建一个新的便签 + createNewNote(); + break; + case R.id.menu_delete: + //删除便签 + AlertDialog.Builder builder = new AlertDialog.Builder(this); + //创建关于删除操作的对话框 + builder.setTitle(getString(R.string.alert_title_delete)); + // 设置标签的标题为alert_title_delete + builder.setIcon(android.R.drawable.ic_dialog_alert); + //设置对话框图标 + builder.setMessage(getString(R.string.alert_message_delete_note)); + //设置对话框内容 + builder.setPositiveButton(android.R.string.ok, + new DialogInterface.OnClickListener() { + //建立按键监听器 + public void onClick(DialogInterface dialog, int which) { + //点击所触发事件 + deleteCurrentNote(); + // 删除单签便签 + finish(); + } + }); + //添加“YES”按钮 + builder.setNegativeButton(android.R.string.cancel, null); + //添加“NO”的按钮 + builder.show(); + //显示对话框 + break; + case R.id.menu_font_size: + //字体大小的编辑 + mFontSizeSelector.setVisibility(View.VISIBLE); + // 将字体选择器置为可见 + findViewById(sFontSelectorSelectionMap.get(mFontSizeId)).setVisibility(View.VISIBLE); + // 通过id找到相应的大小 + break; + case R.id.menu_list_mode: + //选择列表模式 + mWorkingNote.setCheckListMode(mWorkingNote.getCheckListMode() == 0 ? + TextNote.MODE_CHECK_LIST : 0); + break; + case R.id.menu_share: + //菜单共享 + getWorkingText(); + sendTo(this, mWorkingNote.getContent()); + // 用sendto函数将运行文本发送到遍历的本文内 + break; + case R.id.menu_send_to_desktop: + //发送到桌面 + sendToDesktop(); + break; + case R.id.menu_alert: + //创建提醒器 + setReminder(); + break; + case R.id.menu_delete_remind: + //删除日期提醒 + mWorkingNote.setAlertDate(0, false); + break; + default: + break; + } + return true; + } + + /* + * 函数功能:建立事件提醒器 + * 函数实现:如下注释 + */ + private void setReminder() { + DateTimePickerDialog d = new DateTimePickerDialog(this, System.currentTimeMillis()); + // 建立修改时间日期的对话框 + d.setOnDateTimeSetListener(new OnDateTimeSetListener() { + public void OnDateTimeSet(AlertDialog dialog, long date) { + mWorkingNote.setAlertDate(date , true); + //选择提醒的日期 + } + }); + //建立时间日期的监听器 + d.show(); + //显示对话框 + } + + /** + * Share note to apps that support {@link Intent#ACTION_SEND} action + * and {@text/plain} type + */ + /* + * 函数功能:共享便签 + * 函数实现:如下注释 + */ + private void sendTo(Context context, String info) { + Intent intent = new Intent(Intent.ACTION_SEND); + //建立intent链接选项 + intent.putExtra(Intent.EXTRA_TEXT, info); + //将需要传递的便签信息放入text文件中 + intent.setType("text/plain"); + //编辑连接器的类型 + context.startActivity(intent); + //在acti中进行链接 + } + + /* + * 函数功能:创建一个新的便签 + * 函数实现:如下注释 + */ + private void createNewNote() { + // Firstly, save current editing notes + //保存当前便签 + saveNote(); + + // For safety, start a new NoteEditActivity + finish(); + Intent intent = new Intent(this, NoteEditActivity.class); + //设置链接器 + intent.setAction(Intent.ACTION_INSERT_OR_EDIT); + //该活动定义为创建或编辑 + intent.putExtra(Notes.INTENT_EXTRA_FOLDER_ID, mWorkingNote.getFolderId()); + //将运行便签的id添加到INTENT_EXTRA_FOLDER_ID标记中 + startActivity(intent); + //开始activity并链接 + } + + /* + * 函数功能:删除当前便签 + * 函数实现:如下注释 + */ + private void deleteCurrentNote() { + if (mWorkingNote.existInDatabase()) { + //假如当前运行的便签内存有数据 + HashSet ids = new HashSet(); + long id = mWorkingNote.getNoteId(); + if (id != Notes.ID_ROOT_FOLDER) { + ids.add(id); + //如果不是头文件夹建立一个hash表把便签id存起来 + } else { + Log.d(TAG, "Wrong note id, should not happen"); + //否则报错 + } + if (!isSyncMode()) { + //在非同步模式情况下 + //删除操作 + if (!DataUtils.batchDeleteNotes(getContentResolver(), ids)) { + Log.e(TAG, "Delete Note error"); + } + } else { + //同步模式 + //移动至垃圾文件夹的操作 + if (!DataUtils.batchMoveToFolder(getContentResolver(), ids, Notes.ID_TRASH_FOLER)) { + Log.e(TAG, "Move notes to trash folder error, should not happens"); + } + } + } + mWorkingNote.markDeleted(true); + //将这些标签的删除标记置为true + } + + /* + * 函数功能:判断是否为同步模式 + * 函数实现:直接看NotesPreferenceActivity中同步名称是否为空 + */ + private boolean isSyncMode() { + return NotesPreferenceActivity.getSyncAccountName(this).trim().length() > 0; + } + + /* + * 函数功能:设置提醒时间 + * 函数实现:如下注释 + */ + public void onClockAlertChanged(long date, boolean set) { + /** + * User could set clock to an unsaved note, so before setting the + * alert clock, we should save the note first + */ + if (!mWorkingNote.existInDatabase()) { + //首先保存已有的便签 + saveNote(); + } + if (mWorkingNote.getNoteId() > 0) { + Intent intent = new Intent(this, AlarmReceiver.class); + intent.setData(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, mWorkingNote.getNoteId())); + //若有有运行的便签就是建立一个链接器将标签id都存在uri中 + PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0); + AlarmManager alarmManager = ((AlarmManager) getSystemService(ALARM_SERVICE)); + //设置提醒管理器 + showAlertHeader(); + if(!set) { + alarmManager.cancel(pendingIntent); + } else { + alarmManager.set(AlarmManager.RTC_WAKEUP, date, pendingIntent); + } + //如果用户设置了时间,就通过提醒管理器设置一个监听事项 + } else { + /** + * There is the condition that user has input nothing (the note is + * not worthy saving), we have no note id, remind the user that he + * should input something + */ + //没有运行的便签就报错 + Log.e(TAG, "Clock alert setting error"); + showToast(R.string.error_note_empty_for_clock); + } + } + + /* + * 函数功能:Widget发生改变的所触发的事件 + */ + public void onWidgetChanged() { + updateWidget();//更新Widget + } + + /* + * 函数功能: 删除编辑文本框所触发的事件 + * 函数实现:如下注释 + */ + public void onEditTextDelete(int index, String text) { + int childCount = mEditTextList.getChildCount(); + if (childCount == 1) { + return; + } + //没有编辑框的话直接返回 + for (int i = index + 1; i < childCount; i++) { + ((NoteEditText) mEditTextList.getChildAt(i).findViewById(R.id.et_edit_text)) + .setIndex(i - 1); + //通过id把编辑框存在便签编辑框中 + } + + mEditTextList.removeViewAt(index); + //删除特定位置的视图 + NoteEditText edit = null; + if(index == 0) { + edit = (NoteEditText) mEditTextList.getChildAt(0).findViewById( + R.id.et_edit_text); + } else { + edit = (NoteEditText) mEditTextList.getChildAt(index - 1).findViewById( + R.id.et_edit_text); + } + //通过id把编辑框存在空的NoteEditText中 + int length = edit.length(); + edit.append(text); + edit.requestFocus();//请求优先完成该此 编辑 + edit.setSelection(length);//定位到length位置处的条目 + } + + /* + * 函数功能:进入编辑文本框所触发的事件 + * 函数实现:如下注释 + */ + public void onEditTextEnter(int index, String text) { + /** + * Should not happen, check for debug + */ + if(index > mEditTextList.getChildCount()) { + Log.e(TAG, "Index out of mEditTextList boundrary, should not happen"); + //越界把偶偶 + } + + View view = getListItem(text, index); + mEditTextList.addView(view, index); + //建立一个新的视图并添加到编辑文本框内 + NoteEditText edit = (NoteEditText) view.findViewById(R.id.et_edit_text); + edit.requestFocus();//请求优先操作 + edit.setSelection(0);//定位到起始位置 + for (int i = index + 1; i < mEditTextList.getChildCount(); i++) { + ((NoteEditText) mEditTextList.getChildAt(i).findViewById(R.id.et_edit_text)) + .setIndex(i); + //遍历子文本框并设置对应对下标 + } + } + + /* + * 函数功能:切换至列表模式 + * 函数实现:如下注释 + */ + private void switchToListMode(String text) { + mEditTextList.removeAllViews(); + String[] items = text.split("\n"); + int index = 0; + //清空所有视图,初始化下标 + for (String item : items) { + if(!TextUtils.isEmpty(item)) { + mEditTextList.addView(getListItem(item, index)); + index++; + //遍历所有文本单元并添加到文本框中 + } + } + mEditTextList.addView(getListItem("", index)); + mEditTextList.getChildAt(index).findViewById(R.id.et_edit_text).requestFocus(); + //优先请求此操作 + + mNoteEditor.setVisibility(View.GONE); + //便签编辑器不可见 + mEditTextList.setVisibility(View.VISIBLE); + //将文本编辑框置为可见 + } + + /* + * 函数功能:获取高亮效果的反馈情况 + * 函数实现:如下注释 + */ + private Spannable getHighlightQueryResult(String fullText, String userQuery) { + SpannableString spannable = new SpannableString(fullText == null ? "" : fullText); + //新建一个效果选项 + if (!TextUtils.isEmpty(userQuery)) { + mPattern = Pattern.compile(userQuery); + //将用户的询问进行解析 + Matcher m = mPattern.matcher(fullText); + //建立一个状态机检查Pattern并进行匹配 + int start = 0; + while (m.find(start)) { + spannable.setSpan( + new BackgroundColorSpan(this.getResources().getColor( + R.color.user_query_highlight)), m.start(), m.end(), + Spannable.SPAN_INCLUSIVE_EXCLUSIVE); + //设置背景颜色 + start = m.end(); + //跟新起始位置 + } + } + return spannable; + } + + /* + * 函数功能:获取列表项 + * 函数实现:如下注释 + */ + private View getListItem(String item, int index) { + View view = LayoutInflater.from(this).inflate(R.layout.note_edit_list_item, null); + //创建一个视图 + final NoteEditText edit = (NoteEditText) view.findViewById(R.id.et_edit_text); + edit.setTextAppearance(this, TextAppearanceResources.getTexAppearanceResource(mFontSizeId)); + //创建一个文本编辑框并设置可见性 + CheckBox cb = ((CheckBox) view.findViewById(R.id.cb_edit_item)); + cb.setOnCheckedChangeListener(new OnCheckedChangeListener() { + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + if (isChecked) { + edit.setPaintFlags(edit.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); + } else { + edit.setPaintFlags(Paint.ANTI_ALIAS_FLAG | Paint.DEV_KERN_TEXT_FLAG); + } + } + }); + //建立一个打钩框并设置监听器 + + if (item.startsWith(TAG_CHECKED)) { + //选择勾选 + cb.setChecked(true); + edit.setPaintFlags(edit.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); + item = item.substring(TAG_CHECKED.length(), item.length()).trim(); + } else if (item.startsWith(TAG_UNCHECKED)) { + //选择不勾选 + cb.setChecked(false); + edit.setPaintFlags(Paint.ANTI_ALIAS_FLAG | Paint.DEV_KERN_TEXT_FLAG); + item = item.substring(TAG_UNCHECKED.length(), item.length()).trim(); + } + + edit.setOnTextViewChangeListener(this); + edit.setIndex(index); + edit.setText(getHighlightQueryResult(item, mUserQuery)); + //运行编辑框的监听器对该行为作出反应,并设置下标及文本内容 + return view; + } + + /* + * 函数功能:便签内容发生改变所 触发的事件 + * 函数实现:如下注释 + */ + public void onTextChange(int index, boolean hasText) { + if (index >= mEditTextList.getChildCount()) { + Log.e(TAG, "Wrong index, should not happen"); + return; + //越界报错 + } + if(hasText) { + mEditTextList.getChildAt(index).findViewById(R.id.cb_edit_item).setVisibility(View.VISIBLE); + } else { + mEditTextList.getChildAt(index).findViewById(R.id.cb_edit_item).setVisibility(View.GONE); + } + //如果内容不为空则将其子编辑框可见性置为可见,否则不可见 + } + + /* + * 函数功能:检查模式和列表模式的切换 + * 函数实现:如下注释 + */ + public void onCheckListModeChanged(int oldMode, int newMode) { + if (newMode == TextNote.MODE_CHECK_LIST) { + switchToListMode(mNoteEditor.getText().toString()); + //检查模式切换到列表模式 + } else { + if (!getWorkingText()) { + mWorkingNote.setWorkingText(mWorkingNote.getContent().replace(TAG_UNCHECKED + " ", + "")); + } + //若是获取到文本就改变其检查标记 + mNoteEditor.setText(getHighlightQueryResult(mWorkingNote.getContent(), mUserQuery)); + mEditTextList.setVisibility(View.GONE); + mNoteEditor.setVisibility(View.VISIBLE); + //修改文本编辑器的内容和可见性 + } + } + + /* + * 函数功能:设置勾选选项表并返回是否勾选的标记 + * 函数实现:如下注释 + */ + private boolean getWorkingText() { + boolean hasChecked = false; + //初始化check标记 + if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) { + // 若模式为CHECK_LIST + StringBuilder sb = new StringBuilder(); + //创建可变字符串 + for (int i = 0; i < mEditTextList.getChildCount(); i++) { + View view = mEditTextList.getChildAt(i); + //遍历所有子编辑框的视图 + NoteEditText edit = (NoteEditText) view.findViewById(R.id.et_edit_text); + if (!TextUtils.isEmpty(edit.getText())) { + //若文本不为空 + if (((CheckBox) view.findViewById(R.id.cb_edit_item)).isChecked()) { + //该选项框已打钩 + sb.append(TAG_CHECKED).append(" ").append(edit.getText()).append("\n"); + hasChecked = true; + //扩展字符串为已打钩并把标记置true + } else { + sb.append(TAG_UNCHECKED).append(" ").append(edit.getText()).append("\n"); + //扩展字符串添加未打钩 + } + } + } + mWorkingNote.setWorkingText(sb.toString()); + //利用编辑好的字符串设置运行便签的内容 + } else { + mWorkingNote.setWorkingText(mNoteEditor.getText().toString()); + // 若不是该模式直接用编辑器中的内容设置运行中标签的内容 + } + return hasChecked; + } + + /* + * 函数功能:保存便签 + * 函数实现:如下注释 + */ + private boolean saveNote() { + getWorkingText(); + boolean saved = mWorkingNote.saveNote(); + //运行 getWorkingText()之后保存 + if (saved) { + /** + * There are two modes from List view to edit view, open one note, + * create/edit a node. Opening node requires to the original + * position in the list when back from edit view, while creating a + * new node requires to the top of the list. This code + * {@link #RESULT_OK} is used to identify the create/edit state + */ + //如英文注释所说链接RESULT_OK是为了识别保存的2种情况,一是创建后保存,二是修改后保存 + setResult(RESULT_OK); + } + return saved; + } + + /* + * 函数功能:将便签发送至桌面 + * 函数实现:如下注释 + */ + private void sendToDesktop() { + /** + * Before send message to home, we should make sure that current + * editing note is exists in databases. So, for new note, firstly + * save it + */ + if (!mWorkingNote.existInDatabase()) { + saveNote(); + //若不存在数据也就是新的标签就保存起来先 + } + + if (mWorkingNote.getNoteId() > 0) { + //若是有内容 + Intent sender = new Intent(); + Intent shortcutIntent = new Intent(this, NoteEditActivity.class); + //建立发送到桌面的连接器 + shortcutIntent.setAction(Intent.ACTION_VIEW); + //链接为一个视图 + shortcutIntent.putExtra(Intent.EXTRA_UID, mWorkingNote.getNoteId()); + sender.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); + sender.putExtra(Intent.EXTRA_SHORTCUT_NAME, + makeShortcutIconTitle(mWorkingNote.getContent())); + sender.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, + Intent.ShortcutIconResource.fromContext(this, R.drawable.icon_app)); + sender.putExtra("duplicate", true); + //将便签的相关信息都添加到要发送的文件里 + sender.setAction("com.android.launcher.action.INSTALL_SHORTCUT"); + //设置sneder的行为是发送 + showToast(R.string.info_note_enter_desktop); + sendBroadcast(sender); + //显示到桌面 + } else { + /** + * There is the condition that user has input nothing (the note is + * not worthy saving), we have no note id, remind the user that he + * should input something + */ + Log.e(TAG, "Send to desktop error"); + showToast(R.string.error_note_empty_for_send_to_desktop); + //空便签直接报错 + } + } + + /* + * 函数功能:编辑小图标的标题 + * 函数实现:如下注释 + */ + private String makeShortcutIconTitle(String content) { + content = content.replace(TAG_CHECKED, ""); + content = content.replace(TAG_UNCHECKED, ""); + return content.length() > SHORTCUT_ICON_TITLE_MAX_LEN ? content.substring(0, + SHORTCUT_ICON_TITLE_MAX_LEN) : content; + //直接设置为content中的内容并返回,有勾选和未勾选2种 + } + + /* + * 函数功能:显示提示的视图 + * 函数实现:根据下标显示对应的提示 + */ + private void showToast(int resId) { + showToast(resId, Toast.LENGTH_SHORT); + } + + /* + * 函数功能:持续显示提示的视图 + * 函数实现:根据下标和持续的时间(duration)编辑提示视图并显示 + */ + private void showToast(int resId, int duration) { + Toast.makeText(this, resId, duration).show(); + } +} \ No newline at end of file diff --git a/java/net/micode/notes/ui/NoteEditText.java b/java/net/micode/notes/ui/NoteEditText.java new file mode 100644 index 0000000..890ebec --- /dev/null +++ b/java/net/micode/notes/ui/NoteEditText.java @@ -0,0 +1,278 @@ +package net.micode.notes.ui; + +import android.content.Context; +import android.graphics.Rect; +import android.text.Layout; +import android.text.Selection; +import android.text.Spanned; +import android.text.TextUtils; +import android.text.style.URLSpan; +import android.util.AttributeSet; +import android.util.Log; +import android.view.ContextMenu; +import android.view.KeyEvent; +import android.view.MenuItem; +import android.view.MenuItem.OnMenuItemClickListener; +import android.view.MotionEvent; +import android.widget.EditText; + +import net.micode.notes.R; + +import java.util.HashMap; +import java.util.Map; + +//继承edittext,设置便签设置文本框 +public class NoteEditText extends androidx.appcompat.widget.AppCompatEditText { + private static final String TAG = "NoteEditText"; + private int mIndex; + private int mSelectionStartBeforeDelete; + + private static final String SCHEME_TEL = "tel:" ; + private static final String SCHEME_HTTP = "http:" ; + private static final String SCHEME_EMAIL = "mailto:" ; + + ///建立一个字符和整数的hash表,用于链接电话,网站,还有邮箱 + private static final Map sSchemaActionResMap = new HashMap(); + static { + sSchemaActionResMap.put(SCHEME_TEL, R.string.note_link_tel); + sSchemaActionResMap.put(SCHEME_HTTP, R.string.note_link_web); + sSchemaActionResMap.put(SCHEME_EMAIL, R.string.note_link_email); + } + + /** + * Call by the {@link NoteEditActivity} to delete or add edit text + */ + //在NoteEditActivity中删除或添加文本的操作,可以看做是一个文本是否被变的标记,英文注释已说明的很清楚 + public interface OnTextViewChangeListener { + /** + * Delete current edit text when {@link KeyEvent#KEYCODE_DEL} happens + * and the text is null + */ + //处理删除按键时的操作 + void onEditTextDelete(int index, String text); + + /** + * Add edit text after current edit text when {@link KeyEvent#KEYCODE_ENTER} + * happen + */ + //处理进入按键时的操作 + void onEditTextEnter(int index, String text); + + /** + * Hide or show item option when text change + */ + void onTextChange(int index, boolean hasText); + } + + private OnTextViewChangeListener mOnTextViewChangeListener; + + //根据context设置文本 + public NoteEditText(Context context) { + super(context, null);//用super引用父类变量 + mIndex = 0; + } + + //设置当前光标 + public void setIndex(int index) { + mIndex = index; + } + + //初始化文本修改标记 + public void setOnTextViewChangeListener(OnTextViewChangeListener listener) { + mOnTextViewChangeListener = listener; + } + + //AttributeSet 百度了一下是自定义空控件属性,用于维护便签动态变化的属性 + //初始化便签 + public NoteEditText(Context context, AttributeSet attrs) { + super(context, attrs, android.R.attr.editTextStyle); + } + + // 根据defstyle自动初始化 + public NoteEditText(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + // TODO Auto-generated construct or stub + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + if (isInEditMode()) { + break; + } + int x = (int) event.getX(); + int y = (int) event.getY(); + x -= getTotalPaddingLeft(); + y -= getTotalPaddingTop(); + x += getScrollX(); + y += getScrollY(); + + Layout layout = getLayout(); + if (layout != null) { + int line = layout.getLineForVertical(y); + int off = layout.getOffsetForHorizontal(line, x); + Selection.setSelection(getText(), off); + } + break; + } + return super.onTouchEvent(event); + } + + @Override + /* + * 函数功能:处理用户按下一个键盘按键时会触发 的事件 + * 实现过程:如下注释 + */ + public boolean onKeyDown(int keyCode, KeyEvent event) { + switch (keyCode) { + //根据按键的 Unicode 编码值来处理 + case KeyEvent.KEYCODE_ENTER: + //“进入”按键 + // 检查是否是输入法的确认操作,如果是则不拦截 + if (mOnTextViewChangeListener != null) { + if ((event.getFlags() & KeyEvent.FLAG_EDITOR_ACTION) == 0 && !isInEditMode()) { + // 允许事件正常传递给父类 + return super.onKeyDown(keyCode, event); + } + } + break; + case KeyEvent.KEYCODE_DEL: + //“删除”按键 + mSelectionStartBeforeDelete = getSelectionStart(); + break; + default: + break; + } + //继续执行父类的其他点击事件 + return super.onKeyDown(keyCode, event); + } + + @Override + /* + * 函数功能:处理用户松开一个键盘按键时会触发 的事件 + * 实现方式:如下注释 + */ + public boolean onKeyUp(int keyCode, KeyEvent event) { + switch(keyCode) { + //根据按键的 Unicode 编码值来处理,有删除和进入2种操作 + case KeyEvent.KEYCODE_DEL: + if (mOnTextViewChangeListener != null) { + //若是被修改过 + if (0 == mSelectionStartBeforeDelete && mIndex != 0) { + //若之前有被修改并且文档不为空 + mOnTextViewChangeListener.onEditTextDelete(mIndex, getText().toString()); + //利用上文OnTextViewChangeListener对KEYCODE_DEL按键情况的删除函数进行删除 + return true; + } + } else { + Log.d(TAG, "OnTextViewChangeListener was not seted"); + //其他情况报错,文档的改动监听器并没有建立 + } + break; + case KeyEvent.KEYCODE_ENTER: + //同上也是分为监听器是否建立2种情况 + if (mOnTextViewChangeListener != null) { + // 检查是否是输入法的确认操作,如果是则不拦截 + // 同时检查是否有文本输入,避免拦截中文输入法选择候选词的操作 + if ((event.getFlags() & KeyEvent.FLAG_EDITOR_ACTION) == 0 && !isInEditMode() && event.getAction() == KeyEvent.ACTION_UP) { + // 只有当没有输入文本时才执行换行操作 + if (TextUtils.isEmpty(getText())) { + int selectionStart = getSelectionStart(); + //获取当前位置 + String text = getText().subSequence(selectionStart, length()).toString(); + //获取当前文本 + setText(getText().subSequence(0, selectionStart)); + //根据获取的文本设置当前文本 + mOnTextViewChangeListener.onEditTextEnter(mIndex + 1, text); + //当{@link KeyEvent#KEYCODE_ENTER}添加新文本 + return true; + } + } + } else { + Log.d(TAG, "OnTextViewChangeListener was not seted"); + //其他情况报错,文档的改动监听器并没有建立 + } + break; + default: + break; + } + //继续执行父类的其他按键弹起的事件 + return super.onKeyUp(keyCode, event); + } + + @Override + /* + * 函数功能:当焦点发生变化时,会自动调用该方法来处理焦点改变的事件 + * 实现方式:如下注释 + * 参数:focused表示触发该事件的View是否获得了焦点,当该控件获得焦点时,Focused等于true,否则等于false。 + direction表示焦点移动的方向,用数值表示 + Rect:表示在触发事件的View的坐标系中,前一个获得焦点的矩形区域,即表示焦点是从哪里来的。如果不可用则为null + */ + protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { + if (mOnTextViewChangeListener != null) { + //若监听器已经建立 + if (!focused && TextUtils.isEmpty(getText())) { + //获取到焦点并且文本不为空 + mOnTextViewChangeListener.onTextChange(mIndex, false); + //mOnTextViewChangeListener子函数,置false隐藏事件选项 + } else { + mOnTextViewChangeListener.onTextChange(mIndex, true); + //mOnTextViewChangeListener子函数,置true显示事件选项 + } + } + //继续执行父类的其他焦点变化的事件 + super.onFocusChanged(focused, direction, previouslyFocusedRect); + } + + @Override + /* + * 函数功能:生成上下文菜单 + * 函数实现:如下注释 + */ + protected void onCreateContextMenu(ContextMenu menu) { + if (getText() instanceof Spanned) { + //有文本存在 + int selStart = getSelectionStart(); + int selEnd = getSelectionEnd(); + //获取文本开始和结尾位置 + + int min = Math.min(selStart, selEnd); + int max = Math.max(selStart, selEnd); + //获取开始到结尾的最大值和最小值 + + final URLSpan[] urls = ((Spanned) getText()).getSpans(min, max, URLSpan.class); + //设置url的信息的范围值 + if (urls.length == 1) { + int defaultResId = 0; + for(String schema: sSchemaActionResMap.keySet()) { + //获取计划表中所有的key值 + if(urls[0].getURL().indexOf(schema) >= 0) { + //若url可以添加则在添加后将defaultResId置为key所映射的值 + defaultResId = sSchemaActionResMap.get(schema); + break; + } + } + + if (defaultResId == 0) { + //defaultResId == 0则说明url并没有添加任何东西,所以置为连接其他SchemaActionResMap的值 + defaultResId = R.string.note_link_other; + } + + //建立菜单 + menu.add(0, 0, 0, defaultResId).setOnMenuItemClickListener( + new OnMenuItemClickListener() { + //新建按键监听器 + public boolean onMenuItemClick(MenuItem item) { + // goto a new intent + urls[0].onClick(NoteEditText.this); + //根据相应的文本设置菜单的按键 + return true; + } + }); + } + } + //继续执行父类的其他菜单创建的事件 + super.onCreateContextMenu(menu); + } +} \ No newline at end of file diff --git a/java/net/micode/notes/ui/NoteItemData.java b/java/net/micode/notes/ui/NoteItemData.java new file mode 100644 index 0000000..9dde13c --- /dev/null +++ b/java/net/micode/notes/ui/NoteItemData.java @@ -0,0 +1,214 @@ +package net.micode.notes.ui; + +import android.content.Context; +import android.database.Cursor; +import android.text.TextUtils; + +import net.micode.notes.data.Contact; +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.tool.DataUtils; + + +public class NoteItemData { + static final String [] PROJECTION = new String [] { + NoteColumns.ID, + NoteColumns.ALERTED_DATE, + NoteColumns.BG_COLOR_ID, + NoteColumns.CREATED_DATE, + NoteColumns.HAS_ATTACHMENT, + NoteColumns.MODIFIED_DATE, + NoteColumns.NOTES_COUNT, + NoteColumns.PARENT_ID, + NoteColumns.SNIPPET, + NoteColumns.TYPE, + NoteColumns.WIDGET_ID, + NoteColumns.WIDGET_TYPE, + }; + //常量标记和数据就不一一标记了,意义翻译基本就知道 + private static final int ID_COLUMN = 0; + private static final int ALERTED_DATE_COLUMN = 1; + private static final int BG_COLOR_ID_COLUMN = 2; + private static final int CREATED_DATE_COLUMN = 3; + private static final int HAS_ATTACHMENT_COLUMN = 4; + private static final int MODIFIED_DATE_COLUMN = 5; + private static final int NOTES_COUNT_COLUMN = 6; + private static final int PARENT_ID_COLUMN = 7; + private static final int SNIPPET_COLUMN = 8; + private static final int TYPE_COLUMN = 9; + private static final int WIDGET_ID_COLUMN = 10; + private static final int WIDGET_TYPE_COLUMN = 11; + + private long mId; + private long mAlertDate; + private int mBgColorId; + private long mCreatedDate; + private boolean mHasAttachment; + private long mModifiedDate; + private int mNotesCount; + private long mParentId; + private String mSnippet; + private int mType; + private int mWidgetId; + private int mWidgetType; + private String mName; + private String mPhoneNumber; + + private boolean mIsLastItem; + private boolean mIsFirstItem; + private boolean mIsOnlyOneItem; + private boolean mIsOneNoteFollowingFolder; + private boolean mIsMultiNotesFollowingFolder; + //初始化NoteItemData,主要利用光标cursor获取的东西 + public NoteItemData(Context context, Cursor cursor) { + //getxxx为转换格式 + mId = cursor.getLong(ID_COLUMN); + mAlertDate = cursor.getLong(ALERTED_DATE_COLUMN); + mBgColorId = cursor.getInt(BG_COLOR_ID_COLUMN); + mCreatedDate = cursor.getLong(CREATED_DATE_COLUMN); + mHasAttachment = (cursor.getInt(HAS_ATTACHMENT_COLUMN) > 0) ? true : false; + mModifiedDate = cursor.getLong(MODIFIED_DATE_COLUMN); + mNotesCount = cursor.getInt(NOTES_COUNT_COLUMN); + mParentId = cursor.getLong(PARENT_ID_COLUMN); + mSnippet = cursor.getString(SNIPPET_COLUMN); + mSnippet = mSnippet.replace(NoteEditActivity.TAG_CHECKED, "").replace( + NoteEditActivity.TAG_UNCHECKED, ""); + mType = cursor.getInt(TYPE_COLUMN); + mWidgetId = cursor.getInt(WIDGET_ID_COLUMN); + mWidgetType = cursor.getInt(WIDGET_TYPE_COLUMN); + + //初始化电话号码的信息 + mPhoneNumber = ""; + if (mParentId == Notes.ID_CALL_RECORD_FOLDER) { + mPhoneNumber = DataUtils.getCallNumberByNoteId(context.getContentResolver(), mId); + if (!TextUtils.isEmpty(mPhoneNumber)) {//mphonenumber里有符合字符串,则用contart功能连接 + mName = Contact.getContact(context, mPhoneNumber); + if (mName == null) { + mName = mPhoneNumber; + } + } + } + + if (mName == null) { + mName = ""; + } + checkPostion(cursor); + } + ///根据鼠标的位置设置标记,和位置 + private void checkPostion(Cursor cursor) { + //初始化几个标记,cursor具体功能笔记中已提到,不一一叙述 + mIsLastItem = cursor.isLast() ? true : false; + mIsFirstItem = cursor.isFirst() ? true : false; + mIsOnlyOneItem = (cursor.getCount() == 1); + //初始化“多重子文件”“单一子文件”2个标记 + mIsMultiNotesFollowingFolder = false; + mIsOneNoteFollowingFolder = false; + + //主要是设置上诉2标记 + if (mType == Notes.TYPE_NOTE && !mIsFirstItem) {//若是note格式并且不是第一个元素 + int position = cursor.getPosition(); + if (cursor.moveToPrevious()) {//获取光标位置后看上一行 + if (cursor.getInt(TYPE_COLUMN) == Notes.TYPE_FOLDER + || cursor.getInt(TYPE_COLUMN) == Notes.TYPE_SYSTEM) {//若光标满足系统或note格式 + if (cursor.getCount() > (position + 1)) { + mIsMultiNotesFollowingFolder = true;//若是数据行数大于但前位置+1则设置成正确 + } else { + mIsOneNoteFollowingFolder = true;//否则单一文件夹标记为true + } + } + if (!cursor.moveToNext()) {//若不能再往下走则报错 + throw new IllegalStateException("cursor move to previous but can't move back"); + } + } + } + } + ///以下都是获取标记没什么好说的,不过倒数第二个需要说明下,很具体看下面 + public boolean isOneFollowingFolder() { + return mIsOneNoteFollowingFolder; + } + + public boolean isMultiFollowingFolder() { + return mIsMultiNotesFollowingFolder; + } + + public boolean isLast() { + return mIsLastItem; + } + + public String getCallName() { + return mName; + } + + public boolean isFirst() { + return mIsFirstItem; + } + + public boolean isSingle() { + return mIsOnlyOneItem; + } + + public long getId() { + return mId; + } + + public long getAlertDate() { + return mAlertDate; + } + + public long getCreatedDate() { + return mCreatedDate; + } + + public boolean hasAttachment() { + return mHasAttachment; + } + + public long getModifiedDate() { + return mModifiedDate; + } + + public int getBgColorId() { + return mBgColorId; + } + + public long getParentId() { + return mParentId; + } + + public int getNotesCount() { + return mNotesCount; + } + + public long getFolderId () { + return mParentId; + } + + public int getType() { + return mType; + } + + public int getWidgetType() { + return mWidgetType; + } + + public int getWidgetId() { + return mWidgetId; + } + + public String getSnippet() { + return mSnippet; + } + + public boolean hasAlert() { + return (mAlertDate > 0); + } + + //若数据父id为保存至文件夹模式的id且满足电话号码单元不为空,则isCallRecord为true + public boolean isCallRecord() { + return (mParentId == Notes.ID_CALL_RECORD_FOLDER && !TextUtils.isEmpty(mPhoneNumber)); + } + + public static int getNoteType(Cursor cursor) { + return cursor.getInt(TYPE_COLUMN); + } +} \ No newline at end of file diff --git a/java/net/micode/notes/ui/NotesListActivity.java b/java/net/micode/notes/ui/NotesListActivity.java new file mode 100644 index 0000000..0813597 --- /dev/null +++ b/java/net/micode/notes/ui/NotesListActivity.java @@ -0,0 +1,1002 @@ +package net.micode.notes.ui; + +import android.app.Activity; +import android.app.AlertDialog; +import android.app.Dialog; +import android.appwidget.AppWidgetManager; +import android.content.AsyncQueryHandler; +import android.content.ContentResolver; +import android.content.ContentValues; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.SharedPreferences; +import android.database.Cursor; +import android.os.AsyncTask; +import android.os.Bundle; +import android.preference.PreferenceManager; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.util.Log; +import android.view.ActionMode; +import android.view.ContextMenu; +import android.view.ContextMenu.ContextMenuInfo; +import android.view.Display; +import android.view.HapticFeedbackConstants; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; +import android.view.MenuItem.OnMenuItemClickListener; +import android.view.MotionEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.View.OnCreateContextMenuListener; +import android.view.View.OnTouchListener; +import android.view.inputmethod.InputMethodManager; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.AdapterView.OnItemLongClickListener; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ListView; +import android.widget.PopupMenu; +import android.widget.TextView; +import android.widget.Toast; + +import net.micode.notes.R; +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.gtask.remote.GTaskSyncService; +import net.micode.notes.model.WorkingNote; +import net.micode.notes.tool.BackupUtils; +import net.micode.notes.tool.DataUtils; +import net.micode.notes.tool.ResourceParser; +import net.micode.notes.ui.NotesListAdapter.AppWidgetAttribute; +import net.micode.notes.widget.NoteWidgetProvider_2x; +import net.micode.notes.widget.NoteWidgetProvider_4x; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.HashSet; +//主界面,一进入就是这个界面 +/** + * @author k + * + */ +public class NotesListActivity extends Activity implements OnClickListener, OnItemLongClickListener { //没有用特定的标签加注释。。。感觉没有什么用 + private static final int FOLDER_NOTE_LIST_QUERY_TOKEN = 0; + + private static final int FOLDER_LIST_QUERY_TOKEN = 1; + + private static final int MENU_FOLDER_DELETE = 0; + + private static final int MENU_FOLDER_VIEW = 1; + + private static final int MENU_FOLDER_CHANGE_NAME = 2; + + private static final String PREFERENCE_ADD_INTRODUCTION = "net.micode.notes.introduction"; //单行超过80个字符 + + private enum ListEditState { + NOTE_LIST, SUB_FOLDER, CALL_RECORD_FOLDER + }; + + private ListEditState mState; + + private BackgroundQueryHandler mBackgroundQueryHandler; + + private NotesListAdapter mNotesListAdapter; + + private ListView mNotesListView; + + private Button mAddNewNote; + + private boolean mDispatch; + + private int mOriginY; + + private int mDispatchY; + + private TextView mTitleBar; + + private long mCurrentFolderId; + + private ContentResolver mContentResolver; + + private ModeCallback mModeCallBack; + + private static final String TAG = "NotesListActivity"; + + public static final int NOTES_LISTVIEW_SCROLL_RATE = 30; + + private NoteItemData mFocusNoteDataItem; + + private static final String NORMAL_SELECTION = NoteColumns.PARENT_ID + "=?"; + + private static final String ROOT_FOLDER_SELECTION = "(" + NoteColumns.TYPE + "<>" + + Notes.TYPE_SYSTEM + " AND " + NoteColumns.PARENT_ID + "=?)" + " OR (" + + NoteColumns.ID + "=" + Notes.ID_CALL_RECORD_FOLDER + " AND " + + NoteColumns.NOTES_COUNT + ">0)"; + + private final static int REQUEST_CODE_OPEN_NODE = 102; + private final static int REQUEST_CODE_NEW_NODE = 103; + + @Override + // 创建类 + protected void onCreate(final Bundle savedInstanceState) { //需要是final类型 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。 + // final类不能被继承,没有子类,final类中的方法默认是final的。 + //final方法不能被子类的方法覆盖,但可以被继承。 + //final成员变量表示常量,只能被赋值一次,赋值后值不再改变。 + //final不能用于修饰构造方法。 + super.onCreate(savedInstanceState); // 调用父类的onCreate函数 + setContentView(R.layout.note_list); + initResources(); + + /** + * Insert an introduction when user firstly use this application + */ + setAppInfoFromRawRes(); + } + + @Override + // 返回一些子模块完成的数据交给主Activity处理 + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // 结果值 和 要求值 符合要求 + if (resultCode == RESULT_OK + && (requestCode == REQUEST_CODE_OPEN_NODE || requestCode == REQUEST_CODE_NEW_NODE)) { + mNotesListAdapter.changeCursor(null); + } else { + super.onActivityResult(requestCode, resultCode, data); + // 调用 Activity 的onActivityResult() + } + } + + private void setAppInfoFromRawRes() { + // Android平台给我们提供了一个SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数。 + SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); + if (!sp.getBoolean(PREFERENCE_ADD_INTRODUCTION, false)) { + StringBuilder sb = new StringBuilder(); + InputStream in = null; + try { + // 把资源文件放到应用程序的/raw/raw下,那么就可以在应用中使用getResources获取资源后, + // 以openRawResource方法(不带后缀的资源文件名)打开这个文件。 + in = getResources().openRawResource(R.raw.introduction); + if (in != null) { + InputStreamReader isr = new InputStreamReader(in); + BufferedReader br = new BufferedReader(isr); + char [] buf = new char[1024]; // 自行定义的数值,使用者不知道有什么意义 + int len = 0; + while ((len = br.read(buf)) > 0) { + sb.append(buf, 0, len); + } + } else { + Log.e(TAG, "Read introduction file error"); + return; + } + } catch (IOException e) { + e.printStackTrace(); + return; + } finally { + if (in != null) { + try { + in.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + + // 创建空的WorkingNote + WorkingNote note = WorkingNote.createEmptyNote(this, Notes.ID_ROOT_FOLDER, + AppWidgetManager.INVALID_APPWIDGET_ID, Notes.TYPE_WIDGET_INVALIDE, + ResourceParser.RED); + note.setWorkingText(sb.toString()); + if (note.saveNote()) { + // 更新保存note的信息 + sp.edit().putBoolean(PREFERENCE_ADD_INTRODUCTION, true).commit(); + } else { + Log.e(TAG, "Save introduction note error"); + return; + } + } + } + + @Override + protected void onStart() { + super.onStart(); + startAsyncNotesListQuery(); + } + + // 初始化资源 + private void initResources() { + mContentResolver = this.getContentResolver(); // 获取应用程序的数据,得到类似数据表的东西 + mBackgroundQueryHandler = new BackgroundQueryHandler(this.getContentResolver()); + mCurrentFolderId = Notes.ID_ROOT_FOLDER; + + // findViewById 是安卓编程的定位函数,主要是引用.R文件里的引用名 + mNotesListView = (ListView) findViewById(R.id.notes_list); // 绑定XML中的ListView,作为Item的容器 + mNotesListView.addFooterView(LayoutInflater.from(this).inflate(R.layout.note_list_footer, null), + null, false); + mNotesListView.setOnItemClickListener(new OnListItemClickListener()); + mNotesListView.setOnItemLongClickListener(this); + mNotesListAdapter = new NotesListAdapter(this); + mNotesListView.setAdapter(mNotesListAdapter); + mAddNewNote = (Button) findViewById(R.id.btn_new_note);// 在activity中要获取该按钮 + mAddNewNote.setOnClickListener(this); + mAddNewNote.setOnTouchListener(new NewNoteOnTouchListener()); + mDispatch = false; + mDispatchY = 0; + mOriginY = 0; + mTitleBar = (TextView) findViewById(R.id.tv_title_bar); + mState = ListEditState.NOTE_LIST; + mModeCallBack = new ModeCallback(); + } + + // 继承自ListView.MultiChoiceModeListener 和 OnMenuItemClickListener + private class ModeCallback implements ListView.MultiChoiceModeListener, OnMenuItemClickListener { + private DropdownMenu mDropDownMenu; + private ActionMode mActionMode; + private MenuItem mMoveMenu; + + public boolean onCreateActionMode(ActionMode mode, Menu menu) { + getMenuInflater().inflate(R.menu.note_list_options, menu); + menu.findItem(R.id.delete).setOnMenuItemClickListener(this); + mMoveMenu = menu.findItem(R.id.move); + if (mFocusNoteDataItem.getParentId() == Notes.ID_CALL_RECORD_FOLDER + || DataUtils.getUserFolderCount(mContentResolver) == 0) { + mMoveMenu.setVisible(false); + } else { + mMoveMenu.setVisible(true); + mMoveMenu.setOnMenuItemClickListener(this); + } + mActionMode = mode; + mNotesListAdapter.setChoiceMode(true); + mNotesListView.setLongClickable(false); + mAddNewNote.setVisibility(View.GONE); + + View customView = LayoutInflater.from(NotesListActivity.this).inflate( + R.layout.note_list_dropdown_menu, null); + mode.setCustomView(customView); + mDropDownMenu = new DropdownMenu(NotesListActivity.this, + (Button) customView.findViewById(R.id.selection_menu), + R.menu.note_list_dropdown); + mDropDownMenu.setOnDropdownMenuItemClickListener(new PopupMenu.OnMenuItemClickListener(){ + public boolean onMenuItemClick(final MenuItem item) { + mNotesListAdapter.selectAll(!mNotesListAdapter.isAllSelected()); + updateMenu(); + return true; + } + + }); + return true; + } + + // 更新菜单 + private void updateMenu() { + int selectedCount = mNotesListAdapter.getSelectedCount(); + // Update dropdown menu + String format = getResources().getString(R.string.menu_select_title, selectedCount); + mDropDownMenu.setTitle(format); // 更改标题 + MenuItem item = mDropDownMenu.findItem(R.id.action_select_all); + if (item != null) { + if (mNotesListAdapter.isAllSelected()) { + item.setChecked(true); + item.setTitle(R.string.menu_deselect_all); + } else { + item.setChecked(false); + item.setTitle(R.string.menu_select_all); + } + } + } + + public boolean onPrepareActionMode(ActionMode mode, Menu menu) { + // TODO Auto-generated method stub + return false; + } + + public boolean onActionItemClicked(ActionMode mode, MenuItem item) { + // TODO Auto-generated method stub + return false; + } + + public void onDestroyActionMode(ActionMode mode) { + mNotesListAdapter.setChoiceMode(false); + mNotesListView.setLongClickable(true); + mAddNewNote.setVisibility(View.VISIBLE); + } + + public void finishActionMode() { + mActionMode.finish(); + } + + public void onItemCheckedStateChanged(ActionMode mode, int position, long id, + boolean checked) { + mNotesListAdapter.setCheckedItem(position, checked); + updateMenu(); + } + + public boolean onMenuItemClick(MenuItem item) { + if (mNotesListAdapter.getSelectedCount() == 0) { + Toast.makeText(NotesListActivity.this, getString(R.string.menu_select_none), + Toast.LENGTH_SHORT).show(); + return true; + } + + switch (item.getItemId()) { + case R.id.delete: + AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); + builder.setTitle(getString(R.string.alert_title_delete)); + builder.setIcon(android.R.drawable.ic_dialog_alert); + builder.setMessage(getString(R.string.alert_message_delete_notes, + mNotesListAdapter.getSelectedCount())); + builder.setPositiveButton(android.R.string.ok, + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, + int which) { + batchDelete(); + } + }); + builder.setNegativeButton(android.R.string.cancel, null); + builder.show(); + break; + case R.id.move: + startQueryDestinationFolders(); + break; + default: + return false; + } + return true; + } + } + + private class NewNoteOnTouchListener implements OnTouchListener { + + public boolean onTouch(View v, MotionEvent event) { + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: { + Display display = getWindowManager().getDefaultDisplay(); + int screenHeight = display.getHeight(); + int newNoteViewHeight = mAddNewNote.getHeight(); + int start = screenHeight - newNoteViewHeight; + int eventY = start + (int) event.getY(); + /** + * Minus TitleBar's height + */ + if (mState == ListEditState.SUB_FOLDER) { + eventY -= mTitleBar.getHeight(); + start -= mTitleBar.getHeight(); + } + /** + * HACKME:When click the transparent part of "New Note" button, dispatch + * the event to the list view behind this button. The transparent part of + * "New Note" button could be expressed by formula y=-0.12x+94锛圲nit:pixel锛� + * and the line top of the button. The coordinate based on left of the "New + * Note" button. The 94 represents maximum height of the transparent part. + * Notice that, if the background of the button changes, the formula should + * also change. This is very bad, just for the UI designer's strong requirement. + */ + if (event.getY() < (event.getX() * (-0.12) + 94)) { + View view = mNotesListView.getChildAt(mNotesListView.getChildCount() - 1 + - mNotesListView.getFooterViewsCount()); + if (view != null && view.getBottom() > start + && (view.getTop() < (start + 94))) { + mOriginY = (int) event.getY(); + mDispatchY = eventY; + event.setLocation(event.getX(), mDispatchY); + mDispatch = true; + return mNotesListView.dispatchTouchEvent(event); + } + } + break; + } + case MotionEvent.ACTION_MOVE: { + if (mDispatch) { + mDispatchY += (int) event.getY() - mOriginY; + event.setLocation(event.getX(), mDispatchY); + return mNotesListView.dispatchTouchEvent(event); + } + break; + } + default: { + if (mDispatch) { + event.setLocation(event.getX(), mDispatchY); + mDispatch = false; + return mNotesListView.dispatchTouchEvent(event); + } + break; + } + } + return false; + } + + }; + + private void startAsyncNotesListQuery() { + String selection = (mCurrentFolderId == Notes.ID_ROOT_FOLDER) ? ROOT_FOLDER_SELECTION + : NORMAL_SELECTION; + mBackgroundQueryHandler.startQuery(FOLDER_NOTE_LIST_QUERY_TOKEN, null, + Notes.CONTENT_NOTE_URI, NoteItemData.PROJECTION, selection, new String[] { + String.valueOf(mCurrentFolderId) + }, NoteColumns.TYPE + " DESC," + NoteColumns.MODIFIED_DATE + " DESC"); + } + + private final class BackgroundQueryHandler extends AsyncQueryHandler { + public BackgroundQueryHandler(ContentResolver contentResolver) { + super(contentResolver); + } + + @Override + protected void onQueryComplete(int token, Object cookie, Cursor cursor) { + switch (token) { + case FOLDER_NOTE_LIST_QUERY_TOKEN: + mNotesListAdapter.changeCursor(cursor); + break; + case FOLDER_LIST_QUERY_TOKEN: + if (cursor != null && cursor.getCount() > 0) { + showFolderListMenu(cursor); + } else { + Log.e(TAG, "Query folder failed"); + } + break; + default: + return; + } + } + } + + private void showFolderListMenu(Cursor cursor) { + AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); + builder.setTitle(R.string.menu_title_select_folder); + final FoldersListAdapter adapter = new FoldersListAdapter(this, cursor); + builder.setAdapter(adapter, new DialogInterface.OnClickListener() { + + public void onClick(DialogInterface dialog, int which) { + DataUtils.batchMoveToFolder(mContentResolver, + mNotesListAdapter.getSelectedItemIds(), adapter.getItemId(which)); + Toast.makeText( + NotesListActivity.this, + getString(R.string.format_move_notes_to_folder, + mNotesListAdapter.getSelectedCount(), + adapter.getFolderName(NotesListActivity.this, which)), + Toast.LENGTH_SHORT).show(); + mModeCallBack.finishActionMode(); + } + }); + builder.show(); + } + + private void createNewNote() { + Intent intent = new Intent(this, NoteEditActivity.class); + intent.setAction(Intent.ACTION_INSERT_OR_EDIT); + intent.putExtra(Notes.INTENT_EXTRA_FOLDER_ID, mCurrentFolderId); + this.startActivityForResult(intent, REQUEST_CODE_NEW_NODE); + } + + private void batchDelete() { + new AsyncTask>() { + protected HashSet doInBackground(Void... unused) { + HashSet widgets = mNotesListAdapter.getSelectedWidget(); + if (!isSyncMode()) { + // if not synced, delete notes directly + if (DataUtils.batchDeleteNotes(mContentResolver, mNotesListAdapter + .getSelectedItemIds())) { + } else { + Log.e(TAG, "Delete notes error, should not happens"); + } + } else { + // in sync mode, we'll move the deleted note into the trash + // folder + if (!DataUtils.batchMoveToFolder(mContentResolver, mNotesListAdapter + .getSelectedItemIds(), Notes.ID_TRASH_FOLER)) { + Log.e(TAG, "Move notes to trash folder error, should not happens"); + } + } + return widgets; + } + + @Override + protected void onPostExecute(HashSet widgets) { + if (widgets != null) { + for (AppWidgetAttribute widget : widgets) { + if (widget.widgetId != AppWidgetManager.INVALID_APPWIDGET_ID + && widget.widgetType != Notes.TYPE_WIDGET_INVALIDE) { + updateWidget(widget.widgetId, widget.widgetType); + } + } + } + mModeCallBack.finishActionMode(); + } + }.execute(); + } + + private void deleteFolder(long folderId) { + if (folderId == Notes.ID_ROOT_FOLDER) { + Log.e(TAG, "Wrong folder id, should not happen " + folderId); + return; + } + + HashSet ids = new HashSet(); + ids.add(folderId); + HashSet widgets = DataUtils.getFolderNoteWidget(mContentResolver, + folderId); + if (!isSyncMode()) { + // if not synced, delete folder directly + DataUtils.batchDeleteNotes(mContentResolver, ids); + } else { + // in sync mode, we'll move the deleted folder into the trash folder + DataUtils.batchMoveToFolder(mContentResolver, ids, Notes.ID_TRASH_FOLER); + } + if (widgets != null) { + for (AppWidgetAttribute widget : widgets) { + if (widget.widgetId != AppWidgetManager.INVALID_APPWIDGET_ID + && widget.widgetType != Notes.TYPE_WIDGET_INVALIDE) { + updateWidget(widget.widgetId, widget.widgetType); + } + } + } + } + + private void openNode(NoteItemData data) { + Intent intent = new Intent(this, NoteEditActivity.class); + intent.setAction(Intent.ACTION_VIEW); + intent.putExtra(Intent.EXTRA_UID, data.getId()); + this.startActivityForResult(intent, REQUEST_CODE_OPEN_NODE); + } + + private void openFolder(NoteItemData data) { + mCurrentFolderId = data.getId(); + startAsyncNotesListQuery(); + if (data.getId() == Notes.ID_CALL_RECORD_FOLDER) { + mState = ListEditState.CALL_RECORD_FOLDER; + mAddNewNote.setVisibility(View.GONE); + } else { + mState = ListEditState.SUB_FOLDER; + } + if (data.getId() == Notes.ID_CALL_RECORD_FOLDER) { + mTitleBar.setText(R.string.call_record_folder_name); + } else { + mTitleBar.setText(data.getSnippet()); + } + mTitleBar.setVisibility(View.VISIBLE); + } + + public void onClick(View v) { + switch (v.getId()) { + case R.id.btn_new_note: + createNewNote(); + break; + default: + break; + } + } + + private void showSoftInput() { + InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + if (inputMethodManager != null) { + inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); + } + } + + private void hideSoftInput(View view) { + InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + + private void showCreateOrModifyFolderDialog(final boolean create) { + final AlertDialog.Builder builder = new AlertDialog.Builder(this); + View view = LayoutInflater.from(this).inflate(R.layout.dialog_edit_text, null); + final EditText etName = (EditText) view.findViewById(R.id.et_foler_name); + showSoftInput(); + if (!create) { + if (mFocusNoteDataItem != null) { + etName.setText(mFocusNoteDataItem.getSnippet()); + builder.setTitle(getString(R.string.menu_folder_change_name)); + } else { + Log.e(TAG, "The long click data item is null"); + return; + } + } else { + etName.setText(""); + builder.setTitle(this.getString(R.string.menu_create_folder)); + } + + builder.setPositiveButton(android.R.string.ok, null); + builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + hideSoftInput(etName); + } + }); + + final Dialog dialog = builder.setView(view).show(); + final Button positive = (Button)dialog.findViewById(android.R.id.button1); + positive.setOnClickListener(new OnClickListener() { + public void onClick(View v) { + hideSoftInput(etName); + String name = etName.getText().toString(); + if (DataUtils.checkVisibleFolderName(mContentResolver, name)) { + Toast.makeText(NotesListActivity.this, getString(R.string.folder_exist, name), + Toast.LENGTH_LONG).show(); + etName.setSelection(0, etName.length()); + return; + } + if (!create) { + if (!TextUtils.isEmpty(name)) { + ContentValues values = new ContentValues(); + values.put(NoteColumns.SNIPPET, name); + values.put(NoteColumns.TYPE, Notes.TYPE_FOLDER); + values.put(NoteColumns.LOCAL_MODIFIED, 1); + mContentResolver.update(Notes.CONTENT_NOTE_URI, values, NoteColumns.ID + + "=?", new String[] { + String.valueOf(mFocusNoteDataItem.getId()) + }); + } + } else if (!TextUtils.isEmpty(name)) { + ContentValues values = new ContentValues(); + values.put(NoteColumns.SNIPPET, name); + values.put(NoteColumns.TYPE, Notes.TYPE_FOLDER); + mContentResolver.insert(Notes.CONTENT_NOTE_URI, values); + } + dialog.dismiss(); + } + }); + + if (TextUtils.isEmpty(etName.getText())) { + positive.setEnabled(false); + } + /** + * When the name edit text is null, disable the positive button + */ + etName.addTextChangedListener(new TextWatcher() { + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + // TODO Auto-generated method stub + + } + + public void onTextChanged(CharSequence s, int start, int before, int count) { + if (TextUtils.isEmpty(etName.getText())) { + positive.setEnabled(false); + } else { + positive.setEnabled(true); + } + } + + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + + } + }); + } + + /* (non-Javadoc) + * @see android.app.Activity#onBackPressed() + * 按返回键时根据情况更改类中的数据 + */ + @Override + public void onBackPressed() { switch (mState) { + case SUB_FOLDER: + mCurrentFolderId = Notes.ID_ROOT_FOLDER; + mState = ListEditState.NOTE_LIST; + startAsyncNotesListQuery(); + mTitleBar.setVisibility(View.GONE); + break; + case CALL_RECORD_FOLDER: + mCurrentFolderId = Notes.ID_ROOT_FOLDER; + mState = ListEditState.NOTE_LIST; + mAddNewNote.setVisibility(View.VISIBLE); + mTitleBar.setVisibility(View.GONE); + startAsyncNotesListQuery(); + break; + case NOTE_LIST: + super.onBackPressed(); + break; + default: + break; + } + } + + /** + * @param appWidgetId + * @param appWidgetType + * 根据不同类型的widget更新插件,通过intent传送数据 + */ + private void updateWidget(int appWidgetId, int appWidgetType) { + Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE); + if (appWidgetType == Notes.TYPE_WIDGET_2X) { + intent.setClass(this, NoteWidgetProvider_2x.class); + } else if (appWidgetType == Notes.TYPE_WIDGET_4X) { + intent.setClass(this, NoteWidgetProvider_4x.class); + } else { + Log.e(TAG, "Unspported widget type"); + return; + } + + intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] { + appWidgetId + }); + + sendBroadcast(intent); + setResult(RESULT_OK, intent); + } + + /** + * 声明监听器,建立菜单,包括名称,视图,删除操作,更改名称操作; + */ + private final OnCreateContextMenuListener mFolderOnCreateContextMenuListener = new OnCreateContextMenuListener() { + public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { + if (mFocusNoteDataItem != null) { + menu.setHeaderTitle(mFocusNoteDataItem.getSnippet()); + menu.add(0, MENU_FOLDER_VIEW, 0, R.string.menu_folder_view); + menu.add(0, MENU_FOLDER_DELETE, 0, R.string.menu_folder_delete); + menu.add(0, MENU_FOLDER_CHANGE_NAME, 0, R.string.menu_folder_change_name); + } + } + }; + + @Override + public void onContextMenuClosed(Menu menu) { + if (mNotesListView != null) { + mNotesListView.setOnCreateContextMenuListener(null); + } + super.onContextMenuClosed(menu); + } + + /* (non-Javadoc) + * @see android.app.Activity#onContextItemSelected(android.view.MenuItem) + * 针对menu中不同的选择进行不同的处理,里面详细注释 + */ + @Override + public boolean onContextItemSelected(MenuItem item) { + if (mFocusNoteDataItem == null) { + Log.e(TAG, "The long click data item is null"); + return false; + } + switch (item.getItemId()) { + case MENU_FOLDER_VIEW: + openFolder(mFocusNoteDataItem);//打开对应文件 + break; + case MENU_FOLDER_DELETE: + AlertDialog.Builder builder = new AlertDialog.Builder(this);//设置确认是否删除的对话框 + builder.setTitle(getString(R.string.alert_title_delete)); + builder.setIcon(android.R.drawable.ic_dialog_alert); + builder.setMessage(getString(R.string.alert_message_delete_folder)); + builder.setPositiveButton(android.R.string.ok, + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + deleteFolder(mFocusNoteDataItem.getId()); + } + }); + builder.setNegativeButton(android.R.string.cancel, null); + builder.show();//显示对话框 + break; + case MENU_FOLDER_CHANGE_NAME: + showCreateOrModifyFolderDialog(false); + break; + default: + break; + } + + return true; + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + menu.clear(); + if (mState == ListEditState.NOTE_LIST) { + getMenuInflater().inflate(R.menu.note_list, menu); + // set sync or sync_cancel + menu.findItem(R.id.menu_sync).setTitle( + GTaskSyncService.isSyncing() ? R.string.menu_sync_cancel : R.string.menu_sync); + } else if (mState == ListEditState.SUB_FOLDER) { + getMenuInflater().inflate(R.menu.sub_folder, menu); + } else if (mState == ListEditState.CALL_RECORD_FOLDER) { + getMenuInflater().inflate(R.menu.call_record_folder, menu); + } else { + Log.e(TAG, "Wrong state:" + mState); + } + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.menu_new_folder: { + showCreateOrModifyFolderDialog(true); + break; + } + case R.id.menu_export_text: { + exportNoteToText(); + break; + } + case R.id.menu_sync: { + if (isSyncMode()) { + if (TextUtils.equals(item.getTitle(), getString(R.string.menu_sync))) { + GTaskSyncService.startSync(this); + } else { + GTaskSyncService.cancelSync(this); + } + } else { + startPreferenceActivity(); + } + break; + } + case R.id.menu_setting: { + startPreferenceActivity(); + break; + } + case R.id.menu_new_note: { + createNewNote(); + break; + } + case R.id.menu_search: + onSearchRequested(); + break; + default: + break; + } + return true; + } + + /* (non-Javadoc) + * @see android.app.Activity#onSearchRequested() + * 直接调用startSearch函数 + */ + @Override + public boolean onSearchRequested() { + startSearch(null, false, null /* appData */, false); + return true; + } + + /** + * 函数功能:实现将便签导出到文本功能 + */ + private void exportNoteToText() { + final BackupUtils backup = BackupUtils.getInstance(NotesListActivity.this); + new AsyncTask() { + + @Override + protected Integer doInBackground(Void... unused) { + return backup.exportToText(); + } + + @Override + protected void onPostExecute(Integer result) { + if (result == BackupUtils.STATE_SD_CARD_UNMOUONTED) { + AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); + builder.setTitle(NotesListActivity.this + .getString(R.string.failed_sdcard_export)); + builder.setMessage(NotesListActivity.this + .getString(R.string.error_sdcard_unmounted)); + builder.setPositiveButton(android.R.string.ok, null); + builder.show(); + } else if (result == BackupUtils.STATE_SUCCESS) { + AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); + builder.setTitle(NotesListActivity.this + .getString(R.string.success_sdcard_export)); + builder.setMessage(NotesListActivity.this.getString( + R.string.format_exported_file_location, backup + .getExportedTextFileName(), backup.getExportedTextFileDir())); + builder.setPositiveButton(android.R.string.ok, null); + builder.show(); + } else if (result == BackupUtils.STATE_SYSTEM_ERROR) { + AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); + builder.setTitle(NotesListActivity.this + .getString(R.string.failed_sdcard_export)); + builder.setMessage(NotesListActivity.this + .getString(R.string.error_sdcard_export)); + builder.setPositiveButton(android.R.string.ok, null); + builder.show(); + } + } + + }.execute(); + } + + /** + * @return + * 功能:判断是否正在同步 + */ + private boolean isSyncMode() { + return NotesPreferenceActivity.getSyncAccountName(this).trim().length() > 0; + } + + /** + * 功能:跳转到PreferenceActivity界面 + */ + private void startPreferenceActivity() { + Activity from = getParent() != null ? getParent() : this; + Intent intent = new Intent(from, NotesPreferenceActivity.class); + from.startActivityIfNeeded(intent, -1); + } + + /** + * @author k + * 函数功能:实现对便签列表项的点击事件(短按) + */ + private class OnListItemClickListener implements OnItemClickListener { + + public void onItemClick(AdapterView parent, View view, int position, long id) { + if (view instanceof NotesListItem) { + NoteItemData item = ((NotesListItem) view).getItemData(); + if (mNotesListAdapter.isInChoiceMode()) { + if (item.getType() == Notes.TYPE_NOTE) { + position = position - mNotesListView.getHeaderViewsCount(); + mModeCallBack.onItemCheckedStateChanged(null, position, id, + !mNotesListAdapter.isSelectedItem(position)); + } + return; + } + + switch (mState) { + case NOTE_LIST: + if (item.getType() == Notes.TYPE_FOLDER + || item.getType() == Notes.TYPE_SYSTEM) { + openFolder(item); + } else if (item.getType() == Notes.TYPE_NOTE) { + openNode(item); + } else { + Log.e(TAG, "Wrong note type in NOTE_LIST"); + } + break; + case SUB_FOLDER: + case CALL_RECORD_FOLDER: + if (item.getType() == Notes.TYPE_NOTE) { + openNode(item); + } else { + Log.e(TAG, "Wrong note type in SUB_FOLDER"); + } + break; + default: + break; + } + } + } + + } + + /** + * 查询目标文件 + */ + private void startQueryDestinationFolders() { + String selection = NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>? AND " + NoteColumns.ID + "<>?"; + selection = (mState == ListEditState.NOTE_LIST) ? selection: + "(" + selection + ") OR (" + NoteColumns.ID + "=" + Notes.ID_ROOT_FOLDER + ")"; + + mBackgroundQueryHandler.startQuery(FOLDER_LIST_QUERY_TOKEN, + null, + Notes.CONTENT_NOTE_URI, + FoldersListAdapter.PROJECTION, + selection, + new String[] { + String.valueOf(Notes.TYPE_FOLDER), + String.valueOf(Notes.ID_TRASH_FOLER), + String.valueOf(mCurrentFolderId) + }, + NoteColumns.MODIFIED_DATE + " DESC"); + } + + /* (non-Javadoc) + * @see android.widget.AdapterView.OnItemLongClickListener#onItemLongClick(android.widget.AdapterView, android.view.View, int, long) + * 长按某一项时进行的操作 + * 如果长按的是便签,则通过ActionMode菜单实现;如果长按的是文件夹,则通过ContextMenu菜单实现; + * 具体ActionMOde菜单和ContextMenu菜单的详细见精度笔记 + */ + public boolean onItemLongClick(AdapterView parent, View view, int position, long id) { + if (view instanceof NotesListItem) { + mFocusNoteDataItem = ((NotesListItem) view).getItemData(); + if (mFocusNoteDataItem.getType() == Notes.TYPE_NOTE && !mNotesListAdapter.isInChoiceMode()) { + if (mNotesListView.startActionMode(mModeCallBack) != null) { + mModeCallBack.onItemCheckedStateChanged(null, position, id, true); + mNotesListView.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); + } else { + Log.e(TAG, "startActionMode fails"); + } + } else if (mFocusNoteDataItem.getType() == Notes.TYPE_FOLDER) { + mNotesListView.setOnCreateContextMenuListener(mFolderOnCreateContextMenuListener); + } + } + return false; + } +} \ No newline at end of file diff --git a/java/net/micode/notes/ui/NotesListAdapter.java b/java/net/micode/notes/ui/NotesListAdapter.java new file mode 100644 index 0000000..b165769 --- /dev/null +++ b/java/net/micode/notes/ui/NotesListAdapter.java @@ -0,0 +1,257 @@ +package net.micode.notes.ui; + +import android.content.Context; +import android.database.Cursor; +import android.util.Log; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CursorAdapter; + + +import net.micode.notes.data.Notes; + +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; + + +/* + * 功能:直译为便签表连接器,继承了CursorAdapter,它为cursor和ListView提供了连接的桥梁。 + * 所以NotesListAdapter实现的是鼠标和编辑便签链接的桥梁 + */ +public class NotesListAdapter extends CursorAdapter { + private static final String TAG = "NotesListAdapter"; + private Context mContext; + private HashMap mSelectedIndex; + private int mNotesCount; //便签数 + private boolean mChoiceMode; //选择模式标记 + + /* + * 桌面widget的属性,包括编号和类型 + */ + public static class AppWidgetAttribute { + public int widgetId; + public int widgetType; + }; + + /* + * 函数功能:初始化便签链接器 + * 函数实现:根据传进来的内容设置相关变量 + */ + public NotesListAdapter(Context context) { + super(context, null); //父类对象置空 + mSelectedIndex = new HashMap(); //新建选项下标的hash表 + mContext = context; + mNotesCount = 0; + } + + @Override + /* + * 函数功能:新建一个视图来存储光标所指向的数据 + * 函数实现:使用兄弟类NotesListItem新建一个项目选项 + */ + public View newView(Context context, Cursor cursor, ViewGroup parent) { + return new NotesListItem(context); + } + + /* + * 函数功能:将已经存在的视图和鼠标指向的数据进行捆绑 + * 函数实现:如下注释 + */ + @Override + public void bindView(View view, Context context, Cursor cursor) { + if (view instanceof NotesListItem) { + //若view是NotesListItem的一个实例 + NoteItemData itemData = new NoteItemData(context, cursor); + ((NotesListItem) view).bind(context, itemData, mChoiceMode, + isSelectedItem(cursor.getPosition())); + //则新建一个项目选项并且用bind跟将view和鼠标,内容,便签数据捆绑在一起 + } + } + + /* + * 函数功能:设置勾选框 + * 函数实现:如下注释 + */ + public void setCheckedItem(final int position, final boolean checked) { + mSelectedIndex.put(position, checked); + //根据定位和是否勾选设置下标 + notifyDataSetChanged(); + //在修改后刷新activity + } + + /* + * 函数功能:判断单选按钮是否勾选 + */ + public boolean isInChoiceMode() { + return mChoiceMode; + } + + /* + * 函数功能:设置单项选项框 + * 函数实现:重置下标并且根据参数mode设置选项 + */ + public void setChoiceMode(boolean mode) { + mSelectedIndex.clear(); + mChoiceMode = mode; + } + + /* + * 函数功能:选择全部选项 + * 函数实现:如下注释 + */ + public void selectAll(boolean checked) { + Cursor cursor = getCursor(); + //获取光标位置 + for (int i = 0; i < getCount(); i++) { + if (cursor.moveToPosition(i)) { + if (NoteItemData.getNoteType(cursor) == Notes.TYPE_NOTE) { + setCheckedItem(i, checked); + } + } + } + //遍历所有光标可用的位置在判断为便签类型之后勾选单项框 + } + + /* + * 函数功能:建立选择项的下标列表 + * 函数实现:如下注释 + */ + public HashSet getSelectedItemIds() { + HashSet itemSet = new HashSet(); + //建立hash表 + for (Integer position : mSelectedIndex.keySet()) { + //遍历所有的关键 + if (mSelectedIndex.get(position) == true) { + //若光标位置可用 + Long id = getItemId(position); + if (id == Notes.ID_ROOT_FOLDER) { + //原文件不需要添加 + Log.d(TAG, "Wrong item id, should not happen"); + } else { + itemSet.add(id); + } + //则将id该下标假如选项集合中 + + } + } + + return itemSet; + } + + /* + * 函数功能:建立桌面Widget的选项表 + * 函数实现:如下注释 + */ + public HashSet getSelectedWidget() { + HashSet itemSet = new HashSet(); + for (Integer position : mSelectedIndex.keySet()) { + if (mSelectedIndex.get(position) == true) { + Cursor c = (Cursor) getItem(position); + //以上4句和getSelectedItemIds一样,不再重复 + if (c != null) { + //光标位置可用的话就建立新的Widget属性并编辑下标和类型,最后添加到选项集中 + AppWidgetAttribute widget = new AppWidgetAttribute(); + NoteItemData item = new NoteItemData(mContext, c); + widget.widgetId = item.getWidgetId(); + widget.widgetType = item.getWidgetType(); + itemSet.add(widget); + /** + * Don't close cursor here, only the adapter could close it + */ + } else { + Log.e(TAG, "Invalid cursor"); + return null; + } + } + } + return itemSet; + } + + /* + * 函数功能:获取选项个数 + * 函数实现:如下注释 + */ + public int getSelectedCount() { + Collection values = mSelectedIndex.values(); + //首先获取选项下标的值 + if (null == values) { + return 0; + } + Iterator iter = values.iterator(); + //初始化叠加器 + int count = 0; + while (iter.hasNext()) { + if (true == iter.next()) { + //若value值为真计数+1 + count++; + } + } + return count; + } + + /* + * 函数功能:判断是否全部选中 + * 函数实现:如下注释 + */ + public boolean isAllSelected() { + int checkedCount = getSelectedCount(); + return (checkedCount != 0 && checkedCount == mNotesCount); + //获取选项数看是否等于便签的个数 + } + + /* + * 函数功能:判断是否为选项表 + * 函数实现:通过传递的下标来确定 + */ + public boolean isSelectedItem(final int position) { + if (null == mSelectedIndex.get(position)) { + return false; + } + return mSelectedIndex.get(position); + } + + @Override + /* + * 函数功能:在activity内容发生局部变动的时候回调该函数计算便签的数量 + * 函数实现:如下注释 + */ + protected void onContentChanged() { + super.onContentChanged(); + //执行基类函数 + calcNotesCount(); + } + + @Override + /* + * 函数功能:在activity光标发生局部变动的时候回调该函数计算便签的数量 + */ + public void changeCursor(Cursor cursor) { + super.changeCursor(cursor); + //执行基类函数 + calcNotesCount(); + } + + /* + * 函数功能:计算便签数量 + * + */ + private void calcNotesCount() { + mNotesCount = 0; + for (int i = 0; i < getCount(); i++) { + //获取总数同时遍历 + Cursor c = (Cursor) getItem(i); + if (c != null) { + if (NoteItemData.getNoteType(c) == Notes.TYPE_NOTE) { + mNotesCount++; + //若该位置不为空并且文本类型为便签就+1 + } + } else { + Log.e(TAG, "Invalid cursor"); + return; + } + //否则报错 + } + } +} \ No newline at end of file diff --git a/java/net/micode/notes/ui/NotesListItem.java b/java/net/micode/notes/ui/NotesListItem.java new file mode 100644 index 0000000..fa8b3d2 --- /dev/null +++ b/java/net/micode/notes/ui/NotesListItem.java @@ -0,0 +1,116 @@ +package net.micode.notes.ui; + +import android.content.Context; +import android.text.format.DateUtils; +import android.view.View; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import net.micode.notes.R; +import net.micode.notes.data.Notes; +import net.micode.notes.tool.DataUtils; +import net.micode.notes.tool.ResourceParser.NoteItemBgResources; + + +//创建便签列表项目选项 +public class NotesListItem extends LinearLayout { + private ImageView mAlert;//闹钟图片 + private TextView mTitle; //标题 + private TextView mTime; //时间 + private TextView mCallName; // + private NoteItemData mItemData; //标签数据 + private CheckBox mCheckBox; //打钩框 + + /*初始化基本信息*/ + public NotesListItem(Context context) { + super(context); //super()它的主要作用是调整调用父类构造函数的顺序 + inflate(context, R.layout.note_item, this);//Inflate可用于将一个xml中定义的布局控件找出来,这里的xml是r。layout + //findViewById用于从contentView中查找指定ID的View,转换出来的形式根据需要而定; + mAlert = (ImageView) findViewById(R.id.iv_alert_icon); + mTitle = (TextView) findViewById(R.id.tv_title); + mTime = (TextView) findViewById(R.id.tv_time); + mCallName = (TextView) findViewById(R.id.tv_name); + mCheckBox = (CheckBox) findViewById(android.R.id.checkbox); + } + ///根据data的属性对各个控件的属性的控制,主要是可见性Visibility,内容setText,格式setTextAppearance + public void bind(Context context, NoteItemData data, boolean choiceMode, boolean checked) { + if (choiceMode && data.getType() == Notes.TYPE_NOTE) { + mCheckBox.setVisibility(View.VISIBLE); ///设置可见行为可见 + mCheckBox.setChecked(checked); ///格子打钩 + } else { + mCheckBox.setVisibility(View.GONE); + } + + mItemData = data; + ///设置控件属性,一共三种情况,由data的id和父id是否与保存到文件夹的id一致来决定 + if (data.getId() == Notes.ID_CALL_RECORD_FOLDER) { + mCallName.setVisibility(View.GONE); + mAlert.setVisibility(View.VISIBLE); + //设置该textview的style + mTitle.setTextAppearance(context, R.style.TextAppearancePrimaryItem); + //settext为设置内容 + mTitle.setText(context.getString(R.string.call_record_folder_name) + + context.getString(R.string.format_folder_files_count, data.getNotesCount())); + mAlert.setImageResource(R.drawable.call_record); + } else if (data.getParentId() == Notes.ID_CALL_RECORD_FOLDER) { + mCallName.setVisibility(View.VISIBLE); + mCallName.setText(data.getCallName()); + mTitle.setTextAppearance(context,R.style.TextAppearanceSecondaryItem); + mTitle.setText(DataUtils.getFormattedSnippet(data.getSnippet())); + ///关于闹钟的设置 + if (data.hasAlert()) { + mAlert.setImageResource(R.drawable.clock);//图片来源的设置 + mAlert.setVisibility(View.VISIBLE); + } else { + mAlert.setVisibility(View.GONE); + } + } else { + mCallName.setVisibility(View.GONE); + mTitle.setTextAppearance(context, R.style.TextAppearancePrimaryItem); + ///设置title格式 + if (data.getType() == Notes.TYPE_FOLDER) { + mTitle.setText(data.getSnippet() + + context.getString(R.string.format_folder_files_count, + data.getNotesCount())); + mAlert.setVisibility(View.GONE); + } else { + mTitle.setText(DataUtils.getFormattedSnippet(data.getSnippet())); + if (data.hasAlert()) { + mAlert.setImageResource(R.drawable.clock);///设置图片来源 + mAlert.setVisibility(View.VISIBLE); + } else { + mAlert.setVisibility(View.GONE); + } + } + } + ///设置内容,获取相关时间,从data里编辑的日期中获取 + mTime. setText(DateUtils.getRelativeTimeSpanString(data.getModifiedDate())); + + setBackground(data); + } + //根据data的文件属性来设置背景 + private void setBackground(NoteItemData data) { + int id = data.getBgColorId(); + //,若是note型文件,则4种情况,对于4种不同情况的背景来源 + if (data.getType() == Notes.TYPE_NOTE) { + //单个数据并且只有一个子文件夹 + if (data.isSingle() || data.isOneFollowingFolder()) { + setBackgroundResource(NoteItemBgResources.getNoteBgSingleRes(id)); + } else if (data.isLast()) {//是最后一个数据 + setBackgroundResource(NoteItemBgResources.getNoteBgLastRes(id)); + } else if (data.isFirst() || data.isMultiFollowingFolder()) {//是一个数据并有多个子文件夹 + setBackgroundResource(NoteItemBgResources.getNoteBgFirstRes(id)); + } else { + setBackgroundResource(NoteItemBgResources.getNoteBgNormalRes(id)); + } + } else { + //若不是note直接调用文件夹的背景来源 + setBackgroundResource(NoteItemBgResources.getFolderBgRes()); + } + } + public NoteItemData getItemData() { + return mItemData; + } +} \ No newline at end of file diff --git a/java/net/micode/notes/ui/NotesPreferenceActivity.java b/java/net/micode/notes/ui/NotesPreferenceActivity.java new file mode 100644 index 0000000..3a1a3de --- /dev/null +++ b/java/net/micode/notes/ui/NotesPreferenceActivity.java @@ -0,0 +1,516 @@ +package net.micode.notes.ui; + +import android.accounts.Account; +import android.accounts.AccountManager; +import android.annotation.SuppressLint; +import android.app.ActionBar; +import android.app.AlertDialog; +import android.content.BroadcastReceiver; +import android.content.ContentValues; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.preference.Preference; +import android.preference.Preference.OnPreferenceClickListener; +import android.preference.PreferenceActivity; +import android.preference.PreferenceCategory; +import android.text.TextUtils; +import android.text.format.DateFormat; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; +import android.widget.Toast; + +import net.micode.notes.R; +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.gtask.remote.GTaskSyncService; + +/* + *该类功能:NotesPreferenceActivity,在小米便签中主要实现的是对背景颜色和字体大小的数据储存。 + * 继承了PreferenceActivity主要功能为对系统信息和配置进行自动保存的Activity + */ +public class NotesPreferenceActivity extends PreferenceActivity { + public static final String PREFERENCE_NAME = "notes_preferences"; + //优先名 + public static final String PREFERENCE_SYNC_ACCOUNT_NAME = "pref_key_account_name"; + //同步账号 + public static final String PREFERENCE_LAST_SYNC_TIME = "pref_last_sync_time"; + //同步时间 + public static final String PREFERENCE_SET_BG_COLOR_KEY = "pref_key_bg_random_appear"; + + private static final String PREFERENCE_SYNC_ACCOUNT_KEY = "pref_sync_account_key"; + //同步密码 + private static final String AUTHORITIES_FILTER_KEY = "authorities"; + //本地密码 + private PreferenceCategory mAccountCategory; + //账户分组 + private GTaskReceiver mReceiver; + //同步任务接收器 + private Account[] mOriAccounts; + //账户 + private boolean mHasAddedAccount; + //账户的hash标记 + + @SuppressLint("UnspecifiedRegisterReceiverFlag") + @Override + /* + *函数功能:创建一个activity,在函数里要完成所有的正常静态设置 + *参数:Bundle icicle:存放了 activity 当前的状态 + *函数实现:如下注释 + */ + protected void onCreate(Bundle icicle) { + //先执行父类的创建函数 + super.onCreate(icicle); + + /* using the app icon for navigation */ + getActionBar().setDisplayHomeAsUpEnabled(true); + //给左上角图标的左边加上一个返回的图标 + + addPreferencesFromResource(R.xml.preferences); + //添加xml来源并显示 xml + mAccountCategory = (PreferenceCategory) findPreference(PREFERENCE_SYNC_ACCOUNT_KEY); + //根据同步账户关键码来初始化分组 + mReceiver = new GTaskReceiver(); + IntentFilter filter = new IntentFilter(); + filter.addAction(GTaskSyncService.GTASK_SERVICE_BROADCAST_NAME); + registerReceiver(mReceiver, filter); + //初始化同步组件 + + mOriAccounts = null; + View header = LayoutInflater.from(this).inflate(R.layout.settings_header, null); + //获取listvivew,ListView的作用:用于列出所有选择 + getListView().addHeaderView(header, null, true); + //在listview组件上方添加其他组件 + } + + @Override + /* + * 函数功能:activity交互功能的实现,用于接受用户的输入 + * 函数实现:如下注释 + */ + protected void onResume() { + //先执行父类 的交互实现 + super.onResume(); + + // need to set sync account automatically if user has added a new + // account + if (mHasAddedAccount) { + //若用户新加了账户则自动设置同步账户 + Account[] accounts = getGoogleAccounts(); + //获取google同步账户 + if (mOriAccounts != null && accounts.length > mOriAccounts.length) { + //若原账户不为空且当前账户有增加 + for (Account accountNew : accounts) { + boolean found = false; + for (Account accountOld : mOriAccounts) { + if (TextUtils.equals(accountOld.name, accountNew.name)) { + //更新账户 + found = true; + break; + } + } + if (!found) { + setSyncAccount(accountNew.name); + //若是没有找到旧的账户,那么同步账号中就只添加新账户 + break; + } + } + } + } + + refreshUI(); + //刷新标签界面 + } + + @Override + /* + * 函数功能:销毁一个activity + * 函数实现:如下注释 + */ + protected void onDestroy() { + if (mReceiver != null) { + unregisterReceiver(mReceiver); + //注销接收器 + } + super.onDestroy(); + //执行父类的销毁动作 + } + + /* + * 函数功能:重新设置账户信息 + * 函数实现:如下注释 + */ + private void loadAccountPreference() { + mAccountCategory.removeAll(); + //销毁所有的分组 + Preference accountPref = new Preference(this); + //建立首选项 + final String defaultAccount = getSyncAccountName(this); + accountPref.setTitle(getString(R.string.preferences_account_title)); + accountPref.setSummary(getString(R.string.preferences_account_summary)); + //设置首选项的大标题和小标题 + accountPref.setOnPreferenceClickListener(new OnPreferenceClickListener() { + public boolean onPreferenceClick(Preference preference) { + //建立监听器 + if (!GTaskSyncService.isSyncing()) { + if (TextUtils.isEmpty(defaultAccount)) { + // the first time to set account + //若是第一次建立账户显示选择账户提示对话框 + showSelectAccountAlertDialog(); + } else { + // if the account has already been set, we need to promp + // user about the risk + //若是已经建立则显示修改对话框并进行修改操作 + showChangeAccountConfirmAlertDialog(); + } + } else { + //若在没有同步的情况下,则在toast中显示不能修改 + Toast.makeText(NotesPreferenceActivity.this, + R.string.preferences_toast_cannot_change_account, Toast.LENGTH_SHORT) + .show(); + } + return true; + } + }); + + //根据新建首选项编辑新的账户分组 + mAccountCategory.addPreference(accountPref); + } + + /* + *函数功能:设置按键的状态和最后同步的时间 + *函数实现:如下注释 + */ + private void loadSyncButton() { + Button syncButton = (Button) findViewById(R.id.preference_sync_button); + TextView lastSyncTimeView = (TextView) findViewById(R.id.prefenerece_sync_status_textview); + //获取同步按钮控件和最终同步时间的的窗口 + // set button state + //设置按钮的状态 + if (GTaskSyncService.isSyncing()) { + //若是在同步状态下 + syncButton.setText(getString(R.string.preferences_button_sync_cancel)); + syncButton.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + GTaskSyncService.cancelSync(NotesPreferenceActivity.this); + } + }); + //设置按钮显示的文本为“取消同步”以及监听器 + } else { + syncButton.setText(getString(R.string.preferences_button_sync_immediately)); + syncButton.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + GTaskSyncService.startSync(NotesPreferenceActivity.this); + } + }); + //若是不同步则设置按钮显示的文本为“立即同步”以及对应监听器 + } + syncButton.setEnabled(!TextUtils.isEmpty(getSyncAccountName(this))); + //设置按键可用还是不可用 + + // set last sync time + // 设置最终同步时间 + if (GTaskSyncService.isSyncing()) { + //若是在同步的情况下 + lastSyncTimeView.setText(GTaskSyncService.getProgressString()); + lastSyncTimeView.setVisibility(View.VISIBLE); + // 根据当前同步服务器设置时间显示框的文本以及可见性 + } else { + //若是非同步情况 + long lastSyncTime = getLastSyncTime(this); + if (lastSyncTime != 0) { + lastSyncTimeView.setText(getString(R.string.preferences_last_sync_time, + DateFormat.format(getString(R.string.preferences_last_sync_time_format), + lastSyncTime))); + lastSyncTimeView.setVisibility(View.VISIBLE); + //则根据最后同步时间的信息来编辑时间显示框的文本内容和可见性 + } else { + //若时间为空直接设置为不可见状态 + lastSyncTimeView.setVisibility(View.GONE); + } + } + } + /* + *函数功能:刷新标签界面 + *函数实现:调用上文设置账号和设置按键两个函数来实现 + */ + private void refreshUI() { + loadAccountPreference(); + loadSyncButton(); + } + + /* + * 函数功能:显示账户选择的对话框并进行账户的设置 + * 函数实现:如下注释 + */ + private void showSelectAccountAlertDialog() { + AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this); + //创建一个新的对话框 + + View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null); + TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title); + titleTextView.setText(getString(R.string.preferences_dialog_select_account_title)); + TextView subtitleTextView = (TextView) titleView.findViewById(R.id.account_dialog_subtitle); + subtitleTextView.setText(getString(R.string.preferences_dialog_select_account_tips)); + //设置标题以及子标题的内容 + dialogBuilder.setCustomTitle(titleView); + dialogBuilder.setPositiveButton(null, null); + //设置对话框的自定义标题,建立一个YES的按钮 + Account[] accounts = getGoogleAccounts(); + String defAccount = getSyncAccountName(this); + //获取同步账户信息 + mOriAccounts = accounts; + mHasAddedAccount = false; + + if (accounts.length > 0) { + //若账户不为空 + CharSequence[] items = new CharSequence[accounts.length]; + final CharSequence[] itemMapping = items; + int checkedItem = -1; + int index = 0; + for (Account account : accounts) { + if (TextUtils.equals(account.name, defAccount)) { + checkedItem = index; + //在账户列表中查询到所需账户 + } + items[index++] = account.name; + } + dialogBuilder.setSingleChoiceItems(items, checkedItem, + //在对话框建立一个单选的复选框 + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + setSyncAccount(itemMapping[which].toString()); + dialog.dismiss(); + //取消对话框 + refreshUI(); + } + //设置点击后执行的事件,包括检录新同步账户和刷新标签界面 + }); + //建立对话框网络版的监听器 + } + + View addAccountView = LayoutInflater.from(this).inflate(R.layout.add_account_text, null); + dialogBuilder.setView(addAccountView); + //给新加账户对话框设置自定义样式 + + final AlertDialog dialog = dialogBuilder.show(); + //显示对话框 + addAccountView.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + mHasAddedAccount = true; + //将新加账户的hash置true + Intent intent = new Intent("android.settings.ADD_ACCOUNT_SETTINGS"); + //建立网络建立组件 + intent.putExtra(AUTHORITIES_FILTER_KEY, new String[] { + "gmail-ls" + }); + startActivityForResult(intent, -1); + //跳回上一个选项 + dialog.dismiss(); + } + }); + //建立新加账户对话框的监听器 + } + + /* + * 函数功能:显示账户选择对话框和相关账户操作 + * 函数实现:如下注释 + */ + private void showChangeAccountConfirmAlertDialog() { + AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this); + //创建一个新的对话框 + View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null); + TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title); + titleTextView.setText(getString(R.string.preferences_dialog_change_account_title, + getSyncAccountName(this))); + TextView subtitleTextView = (TextView) titleView.findViewById(R.id.account_dialog_subtitle); + subtitleTextView.setText(getString(R.string.preferences_dialog_change_account_warn_msg)); + //根据同步修改的账户信息设置标题以及子标题的内容 + dialogBuilder.setCustomTitle(titleView); + //设置对话框的自定义标题 + CharSequence[] menuItemArray = new CharSequence[] { + getString(R.string.preferences_menu_change_account), + getString(R.string.preferences_menu_remove_account), + getString(R.string.preferences_menu_cancel) + }; + //定义一些标记字符串 + dialogBuilder.setItems(menuItemArray, new DialogInterface.OnClickListener() { + //设置对话框要显示的一个list,用于显示几个命令时,即change,remove,cancel + public void onClick(DialogInterface dialog, int which) { + //按键功能,由which来决定 + if (which == 0) { + //进入账户选择对话框 + showSelectAccountAlertDialog(); + } else if (which == 1) { + //删除账户并且跟新便签界面 + removeSyncAccount(); + refreshUI(); + } + } + }); + dialogBuilder.show(); + //显示对话框 + } + + /* + *函数功能:获取谷歌账户 + *函数实现:通过账户管理器直接获取 + */ + private Account[] getGoogleAccounts() { + AccountManager accountManager = AccountManager.get(this); + return accountManager.getAccountsByType("com.google"); + } + + /* + * 函数功能:设置同步账户 + * 函数实现:如下注释: + */ + private void setSyncAccount(String account) { + if (!getSyncAccountName(this).equals(account)) { + //假如该账号不在同步账号列表中 + SharedPreferences settings = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE); + SharedPreferences.Editor editor = settings.edit(); + //编辑共享的首选项 + if (account != null) { + editor.putString(PREFERENCE_SYNC_ACCOUNT_NAME, account); + } else { + editor.putString(PREFERENCE_SYNC_ACCOUNT_NAME, ""); + } + //将该账号加入到首选项中 + + editor.commit(); + //提交修改的数据 + + + setLastSyncTime(this, 0); + //将最后同步时间清零 + + // clean up local gtask related info + new Thread(new Runnable() { + public void run() { + ContentValues values = new ContentValues(); + values.put(NoteColumns.GTASK_ID, ""); + values.put(NoteColumns.SYNC_ID, 0); + getContentResolver().update(Notes.CONTENT_NOTE_URI, values, null, null); + } + }).start(); + //重置当地同步任务的信息 + + Toast.makeText(NotesPreferenceActivity.this, + getString(R.string.preferences_toast_success_set_accout, account), + Toast.LENGTH_SHORT).show(); + //将toast的文本信息置为“设置账户成功”并显示出来 + } + } + /* + * 函数功能:删除同步账户 + * 函数实现:如下注释: + */ + private void removeSyncAccount() { + SharedPreferences settings = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE); + SharedPreferences.Editor editor = settings.edit(); + //设置共享首选项 + + if (settings.contains(PREFERENCE_SYNC_ACCOUNT_NAME)) { + editor.remove(PREFERENCE_SYNC_ACCOUNT_NAME); + //假如当前首选项中有账户就删除 + } + if (settings.contains(PREFERENCE_LAST_SYNC_TIME)) { + editor.remove(PREFERENCE_LAST_SYNC_TIME); + //删除当前首选项中有账户时间 + } + editor.commit(); + //提交更新后的数据 + + // clean up local gtask related info + new Thread(new Runnable() { + public void run() { + ContentValues values = new ContentValues(); + values.put(NoteColumns.GTASK_ID, ""); + values.put(NoteColumns.SYNC_ID, 0); + getContentResolver().update(Notes.CONTENT_NOTE_URI, values, null, null); + } + }).start(); + //重置当地同步任务的信息 + } + + /* + * 函数功能:获取同步账户名称 + * 函数实现:通过共享的首选项里的信息直接获取 + */ + public static String getSyncAccountName(Context context) { + SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, + Context.MODE_PRIVATE); + return settings.getString(PREFERENCE_SYNC_ACCOUNT_NAME, ""); + } + + /* + * 函数功能:设置最终同步的时间 + * 函数实现:如下注释 + */ + public static void setLastSyncTime(Context context, long time) { + SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, + Context.MODE_PRIVATE); + SharedPreferences.Editor editor = settings.edit(); + // 从共享首选项中找到相关账户并获取其编辑器 + editor.putLong(PREFERENCE_LAST_SYNC_TIME, time); + editor.commit(); + //编辑最终同步时间并提交更新 + } + /* + * 函数功能:获取最终同步时间 + * 函数实现:通过共享的首选项里的信息直接获取 + */ + public static long getLastSyncTime(Context context) { + SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, + Context.MODE_PRIVATE); + return settings.getLong(PREFERENCE_LAST_SYNC_TIME, 0); + } + + /* + * 函数功能:接受同步信息 + * 函数实现:继承BroadcastReceiver + */ + private class GTaskReceiver extends BroadcastReceiver { + + @Override + public void onReceive(Context context, Intent intent) { + refreshUI(); + if (intent.getBooleanExtra(GTaskSyncService.GTASK_SERVICE_BROADCAST_IS_SYNCING, false)) { + //获取随广播而来的Intent中的同步服务的数据 + TextView syncStatus = (TextView) findViewById(R.id.prefenerece_sync_status_textview); + syncStatus.setText(intent + .getStringExtra(GTaskSyncService.GTASK_SERVICE_BROADCAST_PROGRESS_MSG)); + //通过获取的数据在设置系统的状态 + } + + } + } + + /* + * 函数功能:处理菜单的选项 + * 函数实现:如下注释 + * 参数:MenuItem菜单选项 + */ + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + //根据选项的id选择,这里只有一个主页 + case android.R.id.home: + Intent intent = new Intent(this, NotesListActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + return true; + //在主页情况下在创建连接组件intent,发出清空的信号并开始一个相应的activity + default: + return false; + } + } +} + \ No newline at end of file diff --git a/java/net/micode/notes/widget/NoteWidgetProvider.java b/java/net/micode/notes/widget/NoteWidgetProvider.java new file mode 100644 index 0000000..4bae085 --- /dev/null +++ b/java/net/micode/notes/widget/NoteWidgetProvider.java @@ -0,0 +1,132 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.widget; //隶属于widget这个包中 +import android.app.PendingIntent; //在Android.app包中的,用于提供暂缓的服务,当某种条件达到时,就可以执行某些活动 +import android.appwidget.AppWidgetManager; //继承object类,更新appwidget状态,和获取安装appwidget提供信息,以及其它相关状态信息。 +import android.appwidget.AppWidgetProvider; //本质是广播作用,用来对widget进行更新 +import android.content.ContentValues; //此类用于存储ContentResolver 可以处理的一组值,是一些基本类型的值 +import android.content.Context; //可以理解为一个接口(抽象类),它提供了有关应用程序的全局信息。从它继承或者从它的直接或间接子类继承,那么继承的子类就可以拿到应用程序的全局信息。 +import android.content.Intent; //联系各个Activity的关键对象。告诉android该做什么 +import android.database.Cursor; //是数据库指针,用于查询并操作数据 +import android.util.Log; //更新删改等的日志文件 +import android.widget.RemoteViews; //它表示的是一个View结构,可以在其他进程中显示,小部件的旋转效果则是通过不断地更新RemoteViews来实现的 + +import net.micode.notes.R; +import net.micode.notes.data.Notes; //引入其他包中类 +import net.micode.notes.data.Notes.NoteColumns; //引入笔记换列的类 +import net.micode.notes.tool.ResourceParser; //引入工具类 +import net.micode.notes.ui.NoteEditActivity; //引入ui包中的编辑笔记类 +import net.micode.notes.ui.NotesListActivity; //引入ui包中的列表活动类 + +public abstract class NoteWidgetProvider extends AppWidgetProvider { //继承AppWidgetProvider的抽象类NoteWidgetProvider,可以给子类提供接口 + public static final String [] PROJECTION = new String [] { //最终静态字符串数组 + NoteColumns.ID, //笔记框ID号 + NoteColumns.BG_COLOR_ID, //笔记框颜色ID + NoteColumns.SNIPPET //一小段笔记框 + }; + + public static final int COLUMN_ID = 0; //最终静态笔记框ID号 + public static final int COLUMN_BG_COLOR_ID = 1; //最终静态笔记框颜色ID + public static final int COLUMN_SNIPPET = 2; //最终静态一小段笔记框 + + private static final String TAG = "NoteWidgetProvider"; //最终静态 TAG + + @Override //重写 + public void onDeleted(Context context, int[] appWidgetIds) { //方法,删除部件 + ContentValues values = new ContentValues(); //和Bundle类一样,键值对 + values.put(NoteColumns.WIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); //通过put来存放数据。大多是基础数据类型 + for (int i = 0; i < appWidgetIds.length; i++) { + context.getContentResolver().update(Notes.CONTENT_NOTE_URI, //根据长度批量修改数据,uri表名, 属性键值对,修改对象,修改内容 + values, + NoteColumns.WIDGET_ID + "=?", + new String[] { String.valueOf(appWidgetIds[i])}); + } + } + //操作数据库,查询操作 + private Cursor getNoteWidgetInfo(Context context, int widgetId) { //得到一些部件的信息和全局消息,返回类型为游标 + return context.getContentResolver().query(Notes.CONTENT_NOTE_URI, //查找数据,并返回含有数据信息的cursor对象。 + PROJECTION, //参数为 uri 查询表名,查询列名,属性,属性域值,排序 + NoteColumns.WIDGET_ID + "=? AND " + NoteColumns.PARENT_ID + "<>?", + new String[] { String.valueOf(widgetId), String.valueOf(Notes.ID_TRASH_FOLER) }, + null); + } + + protected void update(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { //更新部件 + update(context, appWidgetManager, appWidgetIds, false); + } + + private void update(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds, //隐私模式下更新相关部件 + boolean privacyMode) { + for (int i = 0; i < appWidgetIds.length; i++) { + if (appWidgetIds[i] != AppWidgetManager.INVALID_APPWIDGET_ID) { + int bgId = ResourceParser.getDefaultBgId(context); + String snippet = ""; + Intent intent = new Intent(context, NoteEditActivity.class); //意图,从context到NoteEditActivity类的意图 + intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); //设置标志,当栈顶为活动实例时,重用该实例,不用新建 + intent.putExtra(Notes.INTENT_EXTRA_WIDGET_ID, appWidgetIds[i]); //传递参数 + intent.putExtra(Notes.INTENT_EXTRA_WIDGET_TYPE, getWidgetType()); + + Cursor c = getNoteWidgetInfo(context, appWidgetIds[i]); //数据库光标,用于读取数据库 + if (c != null && c.moveToFirst()) { + if (c.getCount() > 1) { + Log.e(TAG, "Multiple message with same widget id:" + appWidgetIds[i]); //日志信息,打印错误 + c.close(); + return; + } + snippet = c.getString(COLUMN_SNIPPET); + bgId = c.getInt(COLUMN_BG_COLOR_ID); + intent.putExtra(Intent.EXTRA_UID, c.getLong(COLUMN_ID)); //传递参数 + intent.setAction(Intent.ACTION_VIEW); //隐式intent,设置意图,参数为向用户展示意图。 + } else { + snippet = context.getResources().getString(R.string.widget_havenot_content); + intent.setAction(Intent.ACTION_INSERT_OR_EDIT); //隐式intent,设置联系人 + } + + if (c != null) { //关闭 + c.close(); + } + + RemoteViews rv = new RemoteViews(context.getPackageName(), getLayoutId()); //布局文件layout的远程视图 + rv.setImageViewResource(R.id.widget_bg_image, getBgResourceId(bgId)); //设置图像资源,从布局文件layout中找到ID + intent.putExtra(Notes.INTENT_EXTRA_BACKGROUND_ID, bgId); //产生待定意图 + /** + * Generate the pending intent to start host for the widget + */ + PendingIntent pendingIntent = null; //待定意图,等待触发时机 + if (privacyMode) { //隐私模式 + rv.setTextViewText(R.id.widget_text, //设置视图文本 + context.getString(R.string.widget_under_visit_mode)); + pendingIntent = PendingIntent.getActivity(context, appWidgetIds[i], new Intent( //开始意图启动Activity + context, NotesListActivity.class), PendingIntent.FLAG_UPDATE_CURRENT); //上下文,请求码,跳转对象, + } else { //FLAG_UPDATE_CURRENT当前描述的PendingIntent如果已经存在,那么它们都会被更新,即它们的Intent中的Extras会被替换成最新的 + rv.setTextViewText(R.id.widget_text, snippet); + pendingIntent = PendingIntent.getActivity(context, appWidgetIds[i], intent, //先前的意图 + PendingIntent.FLAG_UPDATE_CURRENT); + } //FLAG_UPDATE_CURRENT当前描述的PendingIntent如果已经存在,那么它们都会被更新,即它们的Intent中的Extras会被替换成最新的 + + rv.setOnClickPendingIntent(R.id.widget_text, pendingIntent); //启动点击待定意图 + appWidgetManager.updateAppWidget(appWidgetIds[i], rv); //更新部件 + } + } + } + + protected abstract int getBgResourceId(int bgId); //抽象类获取Bg资源ID + + protected abstract int getLayoutId(); //抽象方法获取布局ID + + protected abstract int getWidgetType(); //获取部件的种类 +} diff --git a/java/net/micode/notes/widget/NoteWidgetProvider_2x.java b/java/net/micode/notes/widget/NoteWidgetProvider_2x.java new file mode 100644 index 0000000..2ddd97f --- /dev/null +++ b/java/net/micode/notes/widget/NoteWidgetProvider_2x.java @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.widget; + +import android.appwidget.AppWidgetManager; +import android.content.Context; + +import net.micode.notes.R; +import net.micode.notes.data.Notes; +import net.micode.notes.tool.ResourceParser; + +//二倍部件 +public class NoteWidgetProvider_2x extends NoteWidgetProvider { + @Override //更新 + public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { + super.update(context, appWidgetManager, appWidgetIds); + } + + @Override //获取xml中的二倍部件id + protected int getLayoutId() { + return R.layout.widget_2x; + } + + @Override //获取资源id + protected int getBgResourceId(int bgId) { + return ResourceParser.WidgetBgResources.getWidget2xBgResource(bgId); + } + + @Override //获取二倍部件种类 + protected int getWidgetType() { + return Notes.TYPE_WIDGET_2X; + } +} diff --git a/java/net/micode/notes/widget/NoteWidgetProvider_4x.java b/java/net/micode/notes/widget/NoteWidgetProvider_4x.java new file mode 100644 index 0000000..8156006 --- /dev/null +++ b/java/net/micode/notes/widget/NoteWidgetProvider_4x.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.widget; + +import android.appwidget.AppWidgetManager; +import android.content.Context; + +import net.micode.notes.R; +import net.micode.notes.data.Notes; +import net.micode.notes.tool.ResourceParser; + +//四倍部件 +public class NoteWidgetProvider_4x extends NoteWidgetProvider { + @Override //更新部件 + public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { + super.update(context, appWidgetManager, appWidgetIds); + } + //获取四倍部件id + protected int getLayoutId() { + return R.layout.widget_4x; + } + + @Override //获取xml资源id + protected int getBgResourceId(int bgId) { + return ResourceParser.WidgetBgResources.getWidget4xBgResource(bgId); + } + + @Override //获取四倍部件种类 + protected int getWidgetType() { + return Notes.TYPE_WIDGET_4X; + } +} -- 2.34.1 From 37aee3a2828bb8bc152548adceee6772a159a87e Mon Sep 17 00:00:00 2001 From: xuningshuo <2105361900@qq.com> Date: Tue, 27 Jan 2026 01:17:07 +0800 Subject: [PATCH 3/9] =?UTF-8?q?=E4=BF=AE=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/.vs/ProjectSettings.json | 3 - src/.vs/VSWorkspaceState.json | 7 - src/.vs/slnx.sqlite | Bin 90112 -> 0 bytes ...9182b2f8-8181-4fb6-b243-d6cc690c6e79.vsidx | Bin 176920 -> 0 bytes src/.vs/src/v17/.wsuo | Bin 20992 -> 0 bytes src/.vs/src/v17/DocumentLayout.backup.json | 37 - src/.vs/src/v17/DocumentLayout.json | 23 - src/data/Contact.java | 83 -- src/data/Notes.java | 317 ----- src/data/NotesDatabaseHelper.java | 396 ------ src/data/NotesProvider.java | 364 ------ src/gtask/data/MetaData.java | 83 -- src/gtask/data/Node.java | 102 -- src/gtask/data/SqlData.java | 205 ---- src/gtask/data/SqlNote.java | 540 --------- src/gtask/data/Task.java | 378 ------ src/gtask/data/TaskList.java | 384 ------ .../exception/ActionFailureException.java | 33 - .../exception/NetworkFailureException.java | 33 - src/gtask/remote/GTaskASyncTask.java | 146 --- src/gtask/remote/GTaskClient.java | 688 ----------- src/gtask/remote/GTaskManager.java | 948 --------------- src/gtask/remote/GTaskSyncService.java | 158 --- src/model/Note.java | 261 ---- src/model/WorkingNote.java | 406 ------- src/tool/BackupUtils.java | 346 ------ src/tool/DataUtils.java | 295 ----- src/tool/GTaskStringUtils.java | 113 -- src/tool/ResourceParser.java | 261 ---- src/ui/AlarmAlertActivity.java | 208 ---- src/ui/AlarmInitReceiver.java | 72 -- src/ui/AlarmReceiver.java | 35 - src/ui/DateTimePicker.java | 508 -------- src/ui/DateTimePickerDialog.java | 103 -- src/ui/DropdownMenu.java | 65 - src/ui/FoldersListAdapter.java | 86 -- src/ui/NoteEditActivity.java | 1068 ----------------- src/ui/NoteEditText.java | 278 ----- src/ui/NoteItemData.java | 214 ---- src/ui/NotesListActivity.java | 1002 ---------------- src/ui/NotesListAdapter.java | 257 ---- src/ui/NotesListItem.java | 116 -- src/ui/NotesPreferenceActivity.java | 516 -------- src/widget/NoteWidgetProvider.java | 132 -- src/widget/NoteWidgetProvider_2x.java | 47 - src/widget/NoteWidgetProvider_4x.java | 46 - 46 files changed, 11363 deletions(-) delete mode 100644 src/.vs/ProjectSettings.json delete mode 100644 src/.vs/VSWorkspaceState.json delete mode 100644 src/.vs/slnx.sqlite delete mode 100644 src/.vs/src/FileContentIndex/9182b2f8-8181-4fb6-b243-d6cc690c6e79.vsidx delete mode 100644 src/.vs/src/v17/.wsuo delete mode 100644 src/.vs/src/v17/DocumentLayout.backup.json delete mode 100644 src/.vs/src/v17/DocumentLayout.json delete mode 100644 src/data/Contact.java delete mode 100644 src/data/Notes.java delete mode 100644 src/data/NotesDatabaseHelper.java delete mode 100644 src/data/NotesProvider.java delete mode 100644 src/gtask/data/MetaData.java delete mode 100644 src/gtask/data/Node.java delete mode 100644 src/gtask/data/SqlData.java delete mode 100644 src/gtask/data/SqlNote.java delete mode 100644 src/gtask/data/Task.java delete mode 100644 src/gtask/data/TaskList.java delete mode 100644 src/gtask/exception/ActionFailureException.java delete mode 100644 src/gtask/exception/NetworkFailureException.java delete mode 100644 src/gtask/remote/GTaskASyncTask.java delete mode 100644 src/gtask/remote/GTaskClient.java delete mode 100644 src/gtask/remote/GTaskManager.java delete mode 100644 src/gtask/remote/GTaskSyncService.java delete mode 100644 src/model/Note.java delete mode 100644 src/model/WorkingNote.java delete mode 100644 src/tool/BackupUtils.java delete mode 100644 src/tool/DataUtils.java delete mode 100644 src/tool/GTaskStringUtils.java delete mode 100644 src/tool/ResourceParser.java delete mode 100644 src/ui/AlarmAlertActivity.java delete mode 100644 src/ui/AlarmInitReceiver.java delete mode 100644 src/ui/AlarmReceiver.java delete mode 100644 src/ui/DateTimePicker.java delete mode 100644 src/ui/DateTimePickerDialog.java delete mode 100644 src/ui/DropdownMenu.java delete mode 100644 src/ui/FoldersListAdapter.java delete mode 100644 src/ui/NoteEditActivity.java delete mode 100644 src/ui/NoteEditText.java delete mode 100644 src/ui/NoteItemData.java delete mode 100644 src/ui/NotesListActivity.java delete mode 100644 src/ui/NotesListAdapter.java delete mode 100644 src/ui/NotesListItem.java delete mode 100644 src/ui/NotesPreferenceActivity.java delete mode 100644 src/widget/NoteWidgetProvider.java delete mode 100644 src/widget/NoteWidgetProvider_2x.java delete mode 100644 src/widget/NoteWidgetProvider_4x.java diff --git a/src/.vs/ProjectSettings.json b/src/.vs/ProjectSettings.json deleted file mode 100644 index f8b4888..0000000 --- a/src/.vs/ProjectSettings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "CurrentProjectSetting": null -} \ No newline at end of file diff --git a/src/.vs/VSWorkspaceState.json b/src/.vs/VSWorkspaceState.json deleted file mode 100644 index e4b2f07..0000000 --- a/src/.vs/VSWorkspaceState.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "ExpandedNodes": [ - "", - "\\data" - ], - "PreviewInSolutionExplorer": false -} \ No newline at end of file diff --git a/src/.vs/slnx.sqlite b/src/.vs/slnx.sqlite deleted file mode 100644 index f51b2c755807d9acb9d03ce66bd0bca8a6604d62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90112 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 diff --git a/src/.vs/src/FileContentIndex/9182b2f8-8181-4fb6-b243-d6cc690c6e79.vsidx b/src/.vs/src/FileContentIndex/9182b2f8-8181-4fb6-b243-d6cc690c6e79.vsidx deleted file mode 100644 index 7302d8c2680af91edc182b64d7704d4890a64941..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 176920 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 Nu78L7xBtlB{|mwQ=N|w7 diff --git a/src/.vs/src/v17/.wsuo b/src/.vs/src/v17/.wsuo deleted file mode 100644 index 1daee3a3baa912160af69746f92644f384b68d27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20992 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 sContactCache;//存储联系人信息。电话——姓名 - private static final String TAG = "Contact"; - //这个常量通常用于在日志输出或调试信息中标识所属类别或模块,帮助开发人员在查看日志时快速定位到相关信息的来源。 - - - //这段代码的作用是构建一个复杂的查询条件,用于在查询联系人信息时精确匹配电话号码,并确保所查询到的数据符合特定条件。 - //CALLER_ID_SELECTION 的含义是:选择电话号码字段为特定号码,MIME 类型为电话号码类型,且原始联系人 ID 符合特定条件(通过子查询获取)的联系人数据。 - 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(); - } - //查询联系人的号码,如果已有联系人信息,则直接返回 - if(sContactCache.containsKey(phoneNumber)) { - return sContactCache.get(phoneNumber); - } - - //使用 CALLER_ID_SELECTION 中定义的查询条件,并将其中的 + 替换为经过处理后的最小匹配号码 - String selection = CALLER_ID_SELECTION.replace("+", - PhoneNumberUtils.toCallerIDMinMatch(phoneNumber)); - //PhoneNumberUtils.toCallerIDMinMatch(phoneNumber) 是一个 Android 平台提供的用于处理电话号码的工具方法之一。 - // 它通常用于将输入的电话号码转换为适合作为 CALLER_ID_SELECTION 筛选条件中的最小匹配号码。 - - //这段代码使用 Android 的内容解析器(Content Resolver)来执行查询操作,并返回一个 Cursor 对象,用于获取符合查询条件的联系人信息。 - Cursor cursor = context.getContentResolver().query( - Data.CONTENT_URI, - new String [] { Phone.DISPLAY_NAME }, - selection, - new String[] { phoneNumber }, - null); - - if (cursor != null && cursor.moveToFirst()) { //如果查询返回的 cursor 不为空且能够移动到第一个结果位置(即有匹配的联系人信息) - try { - String name = cursor.getString(0);//获取第一个字段的值,即联系人的显示名称 - sContactCache.put(phoneNumber, name);//将该信息存储在 sContactCache 中,以电话号码作为键,联系人名称作为值。 - return name; - } catch (IndexOutOfBoundsException e) { - Log.e(TAG, " Cursor get string error " + e.toString()); //记录错误日志 - return null; - } finally { //无论是否发生异常,都会在最终执行块中关闭查询结果的 cursor - cursor.close(); - } - } else { //如果查询结果为空或未找到匹配的联系人信息,则记录调试日志表示未找到匹配的联系人信息,并返回 null。 - Log.d(TAG, "No contact matched with number:" + phoneNumber); - return null; - } - } -} diff --git a/src/data/Notes.java b/src/data/Notes.java deleted file mode 100644 index 5d6225d..0000000 --- a/src/data/Notes.java +++ /dev/null @@ -1,317 +0,0 @@ - -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.data; - -import android.net.Uri; -public class Notes { - public static final String AUTHORITY = "micode_notes"; - public static final String TAG = "Notes";//日志信息 - public static final int TYPE_NOTE = 0;//笔记类型 - public static final int TYPE_FOLDER = 1;//文件夹类型 - public static final int TYPE_SYSTEM = 2;//系统类型 - - //这段注释解释了一些系统文件夹的标识符,以及它们对应的含义 - // Notes#ID_ROOT_FOLDER: 默认文件夹的标识符。 - // Notes#ID_TEMPARAY_FOLDER: 用于存储不属于任何文件夹的临时笔记的标识符。 - //Notes#ID_CALL_RECORD_FOLDER: 用于存储通话记录的文件夹的标识符。 - /** - * Following IDs are system folders' identifiers - * {@link Notes#ID_ROOT_FOLDER } is default folder - * {@link Notes#ID_TEMPARAY_FOLDER } is for notes belonging no folder - * {@link Notes#ID_CALL_RECORD_FOLDER} is to store call records - */ - - //这些标识符被赋予了特定的整数数值,用于在代码中唯一地标识不同的系统文件夹。 - // 通过使用这些常量,可以方便地在代码中引用这些特殊文件夹的标识符,而无需硬编码数值。 - 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;//用于存储回收站文件夹的标识符 - -// Intent是Android应用程序组件之间进行通信的一种重要方式 -// 这段代码定义了一些静态常量,用于表示在 Intent 中传递时所需的额外参数的键值对。这些静态常量的含义如下: -// INTENT_EXTRA_ALERT_DATE: 表示提醒日期的额外参数键值,在 Intent 中使用时对应的键名为 "net.micode.notes.alert_date"。 -// INTENT_EXTRA_BACKGROUND_ID: 表示背景颜色 ID 的额外参数键值,在 Intent 中使用时对应的键名为 "net.micode.notes.background_color_id"。 -// INTENT_EXTRA_WIDGET_ID: 表示小部件 ID 的额外参数键值,在 Intent 中使用时对应的键名为 "net.micode.notes.widget_id"。 -// INTENT_EXTRA_WIDGET_TYPE: 表示小部件类型的额外参数键值,在 Intent 中使用时对应的键名为 "net.micode.notes.widget_type"。 -// INTENT_EXTRA_FOLDER_ID: 表示文件夹 ID 的额外参数键值,在 Intent 中使用时对应的键名为 "net.micode.notes.folder_id"。 -// INTENT_EXTRA_CALL_DATE: 表示通话日期的额外参数键值,在 Intent 中使用时对应的键名为 "net.micode.notes.call_date"。 -// 通过定义这些静态常量,可以避免在代码中硬编码这些字符串,提高了代码的可读性和可维护性。 -// 这些常量的命名也很清晰地表达了它们所代表的含义,让开发人员能够准确地理解它们在 Intent 中所承载的数据。 - - 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"; - public static final String INTENT_EXTRA_WIDGET_TYPE = "net.micode.notes.widget_type"; - 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"; - - //这段代码定义了一些静态常量,用于表示小部件的类型 - public static final int TYPE_WIDGET_INVALIDE = -1; //无效的小部件类型 - public static final int TYPE_WIDGET_2X = 0; //2x2小部件 - public static final int TYPE_WIDGET_4X = 1; //4x4小部件 - - - //MIME(Multipurpose Internet Mail Extensions)类型是一种标准化的方法,用于表示各种数据的类型和格式 - //在 Android 开发中,MIME 类型也经常用于指示 Intent 的数据类型,以便系统能够选择合适的应用程序来处理特定类型的数据。 - //定义了一个静态内部类 DataConstants,将数据类型的常量集中定义在一个内部类中,有助于组织和管理相关的常量,并使得代码结构更清晰。 - public static class DataConstants { - public static final String NOTE = TextNote.CONTENT_ITEM_TYPE;//表示笔记的 MIME 类型 - public static final String CALL_NOTE = CallNote.CONTENT_ITEM_TYPE;//表示通话记录的 MIME 类型 - } - - //URI(统一资源标识符)是用于标识互联网上资源的字符串文本,它提供了一种统一的方式来定位资源。 - /** - * Uri to query all notes and folders - */ - //表示用于查询所有笔记和文件夹的 URI - public static final Uri CONTENT_NOTE_URI = Uri.parse("content://" + AUTHORITY + "/note"); - - /** - * Uri to query data - */ - //表示用于查询数据的 URI - public static final Uri CONTENT_DATA_URI = Uri.parse("content://" + AUTHORITY + "/data"); - - - //定义了一个接口 NoteColumns,其中包含了一系列常量,用于表示笔记或文件夹的各种属性和信息。 - // 这些常量提供了对笔记或文件夹数据结构中不同字段的访问,使得代码可以更清晰地操作和管理这些数据。 - public interface NoteColumns { - /** - * The unique ID for a row - *

Type: INTEGER (long)

- */ - public static final String ID = "_id"; - - /** - * The parent's id for note or folder - *

Type: INTEGER (long)

- */ - public static final String PARENT_ID = "parent_id"; - - /** - * Created data for note or folder - *

Type: INTEGER (long)

- */ - public static final String CREATED_DATE = "created_date"; - - /** - * Latest modified date - *

Type: INTEGER (long)

- */ - public static final String MODIFIED_DATE = "modified_date"; - - - /** - * Alert date - *

Type: INTEGER (long)

- */ - public static final String ALERTED_DATE = "alert_date"; - - /** - * Folder's name or text content of note - *

Type: TEXT

- */ - public static final String SNIPPET = "snippet"; - - /** - * Note's widget id - *

Type: INTEGER (long)

- */ - public static final String WIDGET_ID = "widget_id"; - - /** - * Note's widget type - *

Type: INTEGER (long)

- */ - public static final String WIDGET_TYPE = "widget_type"; - - /** - * Note's background color's id - *

Type: INTEGER (long)

- */ - public static final String BG_COLOR_ID = "bg_color_id"; - - /** - * For text note, it doesn't has attachment, for multi-media - * note, it has at least one attachment - *

Type: INTEGER

- */ - public static final String HAS_ATTACHMENT = "has_attachment"; - - /** - * Folder's count of notes - *

Type: INTEGER (long)

- */ - public static final String NOTES_COUNT = "notes_count"; - - /** - * The file type: folder or note - *

Type: INTEGER

- */ - public static final String TYPE = "type"; - - /** - * The last sync id - *

Type: INTEGER (long)

- */ - public static final String SYNC_ID = "sync_id"; - - /** - * Sign to indicate local modified or not - *

Type: INTEGER

- */ - public static final String LOCAL_MODIFIED = "local_modified"; - - /** - * Original parent id before moving into temporary folder - *

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,其中包含了一系列常量,用于表示数据的各种属性和信息。 - // 这些常量提供了对数据结构中不同字段的访问,使得代码可以更清晰地操作和管理这些数据。 - public interface DataColumns { - /** - * The unique ID for a row - *

Type: INTEGER (long)

- */ - public static final String ID = "_id"; - - /** - * The MIME type of the item represented by this row. - *

Type: Text

- */ - public static final String MIME_TYPE = "mime_type"; - - /** - * The reference id to note that this data belongs to - *

Type: INTEGER (long)

- */ - public static final String NOTE_ID = "note_id"; - - /** - * Created data for note or folder - *

Type: INTEGER (long)

- */ - public static final String CREATED_DATE = "created_date"; - - /** - * Latest modified date - *

Type: INTEGER (long)

- */ - public static final String MODIFIED_DATE = "modified_date"; - - /** - * Data's content - *

Type: TEXT

- */ - public static final String CONTENT = "content"; - - - /** - * Generic data column, the meaning is {@link #MIMETYPE} specific, used for - * integer data type - *

Type: INTEGER

- */ - public static final String DATA1 = "data1"; - - /** - * Generic data column, the meaning is {@link #MIMETYPE} specific, used for - * integer data type - *

Type: INTEGER

- */ - public static final String DATA2 = "data2"; - - /** - * Generic data column, the meaning is {@link #MIMETYPE} specific, used for - * TEXT data type - *

Type: TEXT

- */ - public static final String DATA3 = "data3"; - - /** - * Generic data column, the meaning is {@link #MIMETYPE} specific, used for - * TEXT data type - *

Type: TEXT

- */ - public static final String DATA4 = "data4"; - - /** - * Generic data column, the meaning is {@link #MIMETYPE} specific, used for - * TEXT data type - *

Type: TEXT

- */ - public static final String DATA5 = "data5"; - } - - - //定义了一个静态内部类 TextNote,它实现了接口 DataColumns。 - // 这个内部类包含了一些常量和字段,用于表示文本笔记的相关信息。 - public static final class TextNote implements DataColumns { - /** - * Mode to indicate the text in check list mode or not - *

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

- */ - public static final String MODE = DATA1; - //用于指示文本笔记是否处于待办事项列表模式的模式。值为 1 表示待办事项列表模式,值为 0 表示普通模式 - - 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");//用于表示文本笔记的内容 URI - } - - //静态内部类 CallNote,它也实现了接口 DataColumns。这个内部类包含了一些常量和字段,用于表示通话记录的相关信息。 - public static final class CallNote implements DataColumns { - /** - * Call date for this record - *

Type: INTEGER (long)

- */ - public static final String CALL_DATE = DATA1;//通话日期 - - /** - * Phone number for this record - *

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");//用于表示通话记录的内容 URI - } -} diff --git a/src/data/NotesDatabaseHelper.java b/src/data/NotesDatabaseHelper.java deleted file mode 100644 index 313baf4..0000000 --- a/src/data/NotesDatabaseHelper.java +++ /dev/null @@ -1,396 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.data; - -import android.content.ContentValues; -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -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; - - -public class NotesDatabaseHelper extends SQLiteOpenHelper { - private static final String DB_NAME = "note.db"; - //表示数据库的名称为 "note.db"。这个常量用于指定应用程序中使用的数据库的名称。 - - private static final int DB_VERSION = 4; - //表示数据库的版本号为 4。 - - public interface TABLE { //接口 - public static final String NOTE = "note"; - //表示数据库中的一个表名为 "note"。这个常量用于指定应用程序中使用的表名。 - - public static final String DATA = "data"; - //表示数据库中的一个表名为 "data"。这个常量也用于指定应用程序中使用的表名。 - } - - private static final String TAG = "NotesDatabaseHelper"; //日志标签 - - private static NotesDatabaseHelper mInstance;//类静态变量 - - //创建一个名为"NOTE"的数据库表的SQL语句 - private static final String CREATE_NOTE_TABLE_SQL = - "CREATE TABLE " + TABLE.NOTE + "(" + - NoteColumns.ID + " INTEGER PRIMARY KEY," + //ID,主键 - NoteColumns.PARENT_ID + " INTEGER NOT NULL DEFAULT 0," + //父ID - NoteColumns.ALERTED_DATE + " INTEGER NOT NULL DEFAULT 0," + //提醒日期 - NoteColumns.BG_COLOR_ID + " INTEGER NOT NULL DEFAULT 0," + //背景颜色ID - NoteColumns.CREATED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + //创建日期 - NoteColumns.HAS_ATTACHMENT + " INTEGER NOT NULL DEFAULT 0," +//是否有附件 - NoteColumns.MODIFIED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," +//修改日期 - NoteColumns.NOTES_COUNT + " INTEGER NOT NULL DEFAULT 0," +//笔记数量 - NoteColumns.SNIPPET + " TEXT NOT NULL DEFAULT ''," +//摘要 - NoteColumns.TYPE + " INTEGER NOT NULL DEFAULT 0," +//类型 - NoteColumns.WIDGET_ID + " INTEGER NOT NULL DEFAULT 0," +//小部件ID - NoteColumns.WIDGET_TYPE + " INTEGER NOT NULL DEFAULT -1," +//小部件类型 - NoteColumns.SYNC_ID + " INTEGER NOT NULL DEFAULT 0," +//同步ID - NoteColumns.LOCAL_MODIFIED + " INTEGER NOT NULL DEFAULT 0," +//本地修改 - NoteColumns.ORIGIN_PARENT_ID + " INTEGER NOT NULL DEFAULT 0," +//原始父ID - NoteColumns.GTASK_ID + " TEXT NOT NULL DEFAULT ''," +//文本类型 - NoteColumns.VERSION + " INTEGER NOT NULL DEFAULT 0" +//版本 - ")"; - - //创建一个名为"DATA"的数据库表的SQL语句 - private static final String CREATE_DATA_TABLE_SQL = - "CREATE TABLE " + TABLE.DATA + "(" + - DataColumns.ID + " INTEGER PRIMARY KEY," +//ID,主键 - DataColumns.MIME_TYPE + " TEXT NOT NULL," +//MIME类型 - DataColumns.NOTE_ID + " INTEGER NOT NULL DEFAULT 0," +//笔记ID - NoteColumns.CREATED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," +//创建日期 - NoteColumns.MODIFIED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," +//修改日期 - DataColumns.CONTENT + " TEXT NOT NULL DEFAULT ''," +//内容 - DataColumns.DATA1 + " INTEGER," + - DataColumns.DATA2 + " INTEGER," + - DataColumns.DATA3 + " TEXT NOT NULL DEFAULT ''," + - DataColumns.DATA4 + " TEXT NOT NULL DEFAULT ''," + - DataColumns.DATA5 + " TEXT NOT NULL DEFAULT ''" + - ")"; - - //在"DATA"的数据库表上创建一个名为"note_id_index"的索引的SQL语句。 - // 该索引是基于"NOTE_ID"字段的,旨在提高根据笔记ID进行查询时的检索效率。 - private static final String CREATE_DATA_NOTE_ID_INDEX_SQL = - "CREATE INDEX IF NOT EXISTS note_id_index ON " + - TABLE.DATA + "(" + DataColumns.NOTE_ID + ");"; - - /** - * Increase folder's note count when move note to the folder - */ - //创建一个触发器,在"NOTE"表中的"parent_id"字段更新之后执行,目的是在更新父文件夹ID后自动增加相应文件夹的笔记计数(notes_count)。 - private static final String NOTE_INCREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER = - "CREATE TRIGGER increase_folder_count_on_update "+ - " AFTER UPDATE OF " + NoteColumns.PARENT_ID + " ON " + TABLE.NOTE + - " BEGIN " + - " UPDATE " + TABLE.NOTE + - " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + " + 1" + - " WHERE " + NoteColumns.ID + "=new." + NoteColumns.PARENT_ID + ";" + - " END"; - - /** - * Decrease folder's note count when move note from folder - */ - //创建一个触发器,在"NOTE"表中的"parent_id"字段更新之后执行,目的是在更新父文件夹ID后自动减少相应文件夹的笔记计数(notes_count)。 - private static final String NOTE_DECREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER = - "CREATE TRIGGER decrease_folder_count_on_update " + - " AFTER UPDATE OF " + NoteColumns.PARENT_ID + " ON " + TABLE.NOTE + - " BEGIN " + - " UPDATE " + TABLE.NOTE + - " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + "-1" + - " WHERE " + NoteColumns.ID + "=old." + NoteColumns.PARENT_ID + - " AND " + NoteColumns.NOTES_COUNT + ">0" + ";" + - " END"; - - /** - * Increase folder's note count when insert new note to the folder - */ - //在"NOTE"表中插入新记录之后执行,目的是在新笔记被添加到特定文件夹时自动增加该文件夹的笔记计数(notes_count)。 - private static final String NOTE_INCREASE_FOLDER_COUNT_ON_INSERT_TRIGGER = - "CREATE TRIGGER increase_folder_count_on_insert " + - " AFTER INSERT ON " + TABLE.NOTE + - " BEGIN " + - " UPDATE " + TABLE.NOTE + - " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + " + 1" + - " WHERE " + NoteColumns.ID + "=new." + NoteColumns.PARENT_ID + ";" + - " END"; - - /** - * Decrease folder's note count when delete note from the folder - */ - //在删除笔记时自动减少相应父文件夹的笔记计数(notes_count)。 - private static final String NOTE_DECREASE_FOLDER_COUNT_ON_DELETE_TRIGGER = - "CREATE TRIGGER decrease_folder_count_on_delete " + - " AFTER DELETE ON " + TABLE.NOTE + - " BEGIN " + - " UPDATE " + TABLE.NOTE + - " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + "-1" + - " WHERE " + NoteColumns.ID + "=old." + NoteColumns.PARENT_ID + - " AND " + NoteColumns.NOTES_COUNT + ">0;" + - " END"; - - /** - * Update note's content when insert data with type {@link DataConstants#NOTE} - */ - //向"DATA"表中插入记录之后执行,当插入数据的MIME类型为"NOTE"时会更新"NOTE"表中相应笔记的摘要(snippet)字段。 - private static final String DATA_UPDATE_NOTE_CONTENT_ON_INSERT_TRIGGER = - "CREATE TRIGGER update_note_content_on_insert " + - " AFTER INSERT ON " + TABLE.DATA + - " WHEN new." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" + - " BEGIN" + - " UPDATE " + TABLE.NOTE + - " SET " + NoteColumns.SNIPPET + "=new." + DataColumns.CONTENT + - " WHERE " + NoteColumns.ID + "=new." + DataColumns.NOTE_ID + ";" + - " END"; - - /** - * Update note's content when data with {@link DataConstants#NOTE} type has changed - */ - //在更新"DATA"表中的记录之后执行,当更新数据的MIME类型为"NOTE"时,会更新"NOTE"表中相应笔记的摘要(snippet)字段。 - private static final String DATA_UPDATE_NOTE_CONTENT_ON_UPDATE_TRIGGER = - "CREATE TRIGGER update_note_content_on_update " + - " AFTER UPDATE ON " + TABLE.DATA + - " WHEN old." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" + - " BEGIN" + - " UPDATE " + TABLE.NOTE + - " SET " + NoteColumns.SNIPPET + "=new." + DataColumns.CONTENT + - " WHERE " + NoteColumns.ID + "=new." + DataColumns.NOTE_ID + ";" + - " END"; - - /** - * Update note's content when data with {@link DataConstants#NOTE} type has deleted - */ - //在删除"DATA"表中的记录之后执行,当被删除数据的MIME类型为"NOTE"时,会将对应笔记的摘要(snippet)字段置空。 - private static final String DATA_UPDATE_NOTE_CONTENT_ON_DELETE_TRIGGER = - "CREATE TRIGGER update_note_content_on_delete " + - " AFTER delete ON " + TABLE.DATA + - " WHEN old." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" + - " BEGIN" + - " UPDATE " + TABLE.NOTE + - " SET " + NoteColumns.SNIPPET + "=''" + - " WHERE " + NoteColumns.ID + "=old." + DataColumns.NOTE_ID + ";" + - " END"; - - /** - * Delete datas belong to note which has been deleted - */ - //在删除"NOTE"表中的记录之后执行,会同时删除"DATA"表中与被删除笔记相关联的记录。 - private static final String NOTE_DELETE_DATA_ON_DELETE_TRIGGER = - "CREATE TRIGGER delete_data_on_delete " + - " AFTER DELETE ON " + TABLE.NOTE + - " BEGIN" + - " DELETE FROM " + TABLE.DATA + - " WHERE " + DataColumns.NOTE_ID + "=old." + NoteColumns.ID + ";" + - " END"; - - /** - * Delete notes belong to folder which has been deleted - */ - //触发器在删除"NOTE"表中的记录之后执行,会同时删除"NOTE"表中与被删除文件夹相关联的所有笔记记录。 - private static final String FOLDER_DELETE_NOTES_ON_DELETE_TRIGGER = - "CREATE TRIGGER folder_delete_notes_on_delete " + - " AFTER DELETE ON " + TABLE.NOTE + - " BEGIN" + - " DELETE FROM " + TABLE.NOTE + - " WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" + - " END"; - - /** - * Move notes belong to folder which has been moved to trash folder - */ - //更新"NOTE"表中的记录之后执行,当将笔记移动到垃圾箱(Trash Folder)时,会将相关笔记的父级ID(Parent ID)更新为垃圾箱的ID。 - private static final String FOLDER_MOVE_NOTES_ON_TRASH_TRIGGER = - "CREATE TRIGGER folder_move_notes_on_trash " + - " AFTER UPDATE ON " + TABLE.NOTE + - " WHEN new." + NoteColumns.PARENT_ID + "=" + Notes.ID_TRASH_FOLER + - " BEGIN" + - " UPDATE " + TABLE.NOTE + - " SET " + NoteColumns.PARENT_ID + "=" + Notes.ID_TRASH_FOLER + - " WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" + - " END"; - - public NotesDatabaseHelper(Context context) { - super(context, DB_NAME, null, DB_VERSION); - }//调用了父类 SQLiteOpenHelper 的构造函数 - - //数据库中创建笔记表 - 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"); - db.execSQL("DROP TRIGGER IF EXISTS decrease_folder_count_on_update"); - db.execSQL("DROP TRIGGER IF EXISTS decrease_folder_count_on_delete"); - db.execSQL("DROP TRIGGER IF EXISTS delete_data_on_delete"); - db.execSQL("DROP TRIGGER IF EXISTS increase_folder_count_on_insert"); - db.execSQL("DROP TRIGGER IF EXISTS folder_delete_notes_on_delete"); - db.execSQL("DROP TRIGGER IF EXISTS folder_move_notes_on_trash"); - //重新创建与笔记表相关的触发器 - db.execSQL(NOTE_INCREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER); - db.execSQL(NOTE_DECREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER); - db.execSQL(NOTE_DECREASE_FOLDER_COUNT_ON_DELETE_TRIGGER); - db.execSQL(NOTE_DELETE_DATA_ON_DELETE_TRIGGER); - 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); - } - - //在数据库中创建系统文件夹 - private void createSystemFolder(SQLiteDatabase db) { - ContentValues values = new ContentValues(); -// 创建通话记录文件夹:向 Note 表插入一条记录,指定 ID 为 Notes.ID_CALL_RECORD_FOLDER,类型为系统类型。 -// 创建根文件夹:向 Note 表插入一条记录,指定 ID 为 Notes.ID_ROOT_FOLDER,类型为系统类型。 -// 创建临时文件夹:向 Note 表插入一条记录,指定 ID 为 Notes.ID_TEMPARAY_FOLDER,类型为系统类型。 -// 创建垃圾箱文件夹:向 Note 表插入一条记录,指定 ID 为 Notes.ID_TRASH_FOLER,类型为系统类型。 - - /** - * call record foler for call notes - */ - values.put(NoteColumns.ID, Notes.ID_CALL_RECORD_FOLDER); - values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); - db.insert(TABLE.NOTE, null, values); - - /** - * root folder which is default folder - */ - values.clear(); - values.put(NoteColumns.ID, Notes.ID_ROOT_FOLDER); - values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); - db.insert(TABLE.NOTE, null, values); - - /** - * temporary folder which is used for moving note - */ - values.clear(); - values.put(NoteColumns.ID, Notes.ID_TEMPARAY_FOLDER); - values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); - db.insert(TABLE.NOTE, null, values); - - /** - * create trash folder - */ - values.clear(); - values.put(NoteColumns.ID, Notes.ID_TRASH_FOLER); - values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); - db.insert(TABLE.NOTE, null, values); - } - - //在数据库中创建DATA表 - public void createDataTable(SQLiteDatabase db) { - db.execSQL(CREATE_DATA_TABLE_SQL);//创建数据表 - reCreateDataTableTriggers(db);//重新创建与DATA表相关的触发器 - db.execSQL(CREATE_DATA_NOTE_ID_INDEX_SQL);//索引 - Log.d(TAG, "data table has been created");//日志 - } - - //重新创建与DATA表相关的触发器 - private void reCreateDataTableTriggers(SQLiteDatabase db) { - db.execSQL("DROP TRIGGER IF EXISTS update_note_content_on_insert"); - db.execSQL("DROP TRIGGER IF EXISTS update_note_content_on_update"); - db.execSQL("DROP TRIGGER IF EXISTS update_note_content_on_delete"); - - 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); - } - - //用于获取 NotesDatabaseHelper 的单例实例 - 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) { - boolean reCreateTriggers = false; - boolean skipV2 = false; - - if (oldVersion == 1) { - upgradeToV2(db); - skipV2 = true; // this upgrade including the upgrade from v2 to v3 - oldVersion++; - } - - if (oldVersion == 2 && !skipV2) { - upgradeToV3(db); - reCreateTriggers = true; - oldVersion++; - } - - if (oldVersion == 3) { - upgradeToV4(db); - oldVersion++; - } - - if (reCreateTriggers) { //如果需要重新创建触发器 - reCreateNoteTableTriggers(db); - reCreateDataTableTriggers(db); - } - - if (oldVersion != newVersion) { //如果数据库升级失败 - throw new IllegalStateException("Upgrade notes database to version " + newVersion - + "fails"); - } - } - - //将数据库升级到版本 2 - 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); - } - - //将数据库升级到版本 3 - private void upgradeToV3(SQLiteDatabase db) { - // drop unused triggers - db.execSQL("DROP TRIGGER IF EXISTS update_note_modified_date_on_insert"); - db.execSQL("DROP TRIGGER IF EXISTS update_note_modified_date_on_delete"); - db.execSQL("DROP TRIGGER IF EXISTS update_note_modified_date_on_update"); - // add a column for gtask id - db.execSQL("ALTER TABLE " + TABLE.NOTE + " ADD COLUMN " + NoteColumns.GTASK_ID - + " TEXT NOT NULL DEFAULT ''"); - // add a trash system folder - ContentValues values = new ContentValues(); - values.put(NoteColumns.ID, Notes.ID_TRASH_FOLER); - values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); - db.insert(TABLE.NOTE, null, values); - } - - //将数据库升级到版本 4 - private void upgradeToV4(SQLiteDatabase db) { - db.execSQL("ALTER TABLE " + TABLE.NOTE + " ADD COLUMN " + NoteColumns.VERSION - + " INTEGER NOT NULL DEFAULT 0"); - } -} diff --git a/src/data/NotesProvider.java b/src/data/NotesProvider.java deleted file mode 100644 index 54b757d..0000000 --- a/src/data/NotesProvider.java +++ /dev/null @@ -1,364 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.data; - - -import android.app.SearchManager; -import android.content.ContentProvider; -import android.content.ContentUris; -import android.content.ContentValues; -import android.content.Intent; -import android.content.UriMatcher; -import android.database.Cursor; -import android.database.sqlite.SQLiteDatabase; -import android.net.Uri; -import android.text.TextUtils; -import android.util.Log; - -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:得到数据类型 -public class NotesProvider extends ContentProvider { - // 用于将URI与相应代码匹配的UriMatcher - private static final UriMatcher mMatcher; - // 数据库助手,用于管理数据库操作 - private NotesDatabaseHelper mHelper; - - // 用于记录日志的标签 - private static final String TAG = "NotesProvider"; - - // 用于定义不同URI模式的常量 - private static final int URI_NOTE = 1; - private static final int URI_NOTE_ITEM = 2; - private static final int URI_DATA = 3; - private static final int URI_DATA_ITEM = 4; - - private static final int URI_SEARCH = 5; - private static final int URI_SEARCH_SUGGEST = 6; - - // 静态初始化器用于填充UriMatcher - static { - // 创建UriMatcher时,调用UriMatcher(UriMatcher.NO_MATCH)表示不匹配任何路径的返回码 - mMatcher = new UriMatcher(UriMatcher.NO_MATCH); - // 把需要匹配Uri路径全部给注册上 - mMatcher.addURI(Notes.AUTHORITY, "note", URI_NOTE); - mMatcher.addURI(Notes.AUTHORITY, "note/#", URI_NOTE_ITEM); - mMatcher.addURI(Notes.AUTHORITY, "data", URI_DATA); - mMatcher.addURI(Notes.AUTHORITY, "data/#", URI_DATA_ITEM); - mMatcher.addURI(Notes.AUTHORITY, "search", URI_SEARCH); - mMatcher.addURI(Notes.AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY, URI_SEARCH_SUGGEST); - mMatcher.addURI(Notes.AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY + "/*", URI_SEARCH_SUGGEST); - } - - /** - * x'0A' represents the '\n' character in sqlite. For title and content in the search result, - * we will trim '\n' and white space in order to show more information. - */ - // 声明 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 + "," - + "TRIM(REPLACE(" + NoteColumns.SNIPPET + ", x'0A','')) AS " + SearchManager.SUGGEST_COLUMN_TEXT_2 + "," - + 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 - private static String NOTES_SNIPPET_SEARCH_QUERY = "SELECT " + NOTES_SEARCH_PROJECTION - + " FROM " + TABLE.NOTE - + " WHERE " + NoteColumns.SNIPPET + " LIKE ?" - + " AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER - + " AND " + NoteColumns.TYPE + "=" + Notes.TYPE_NOTE; - - @Override - // Context只有在onCreate()中才被初始化 - // 对mHelper进行实例化 - public boolean onCreate() { - mHelper = NotesDatabaseHelper.getInstance(getContext()); - return true; - } - - @Override - // 查询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 - switch (mMatcher.match(uri)) { - // 对于不同的匹配值,在数据库中查找相应的条目 - case URI_NOTE: - c = db.query(TABLE.NOTE, projection, selection, selectionArgs, null, null, - sortOrder); - break; - case URI_NOTE_ITEM: - id = uri.getPathSegments().get(1); - // 根据提供的ID查询特定的笔记项 - c = db.query(TABLE.NOTE, projection, NoteColumns.ID + "=" + id - + parseSelection(selection), selectionArgs, null, null, sortOrder); - break; - case URI_DATA: - // 在数据库中查询 "data" 表 - c = db.query(TABLE.DATA, projection, selection, selectionArgs, null, null, - sortOrder); - break; - case URI_DATA_ITEM: - id = uri.getPathSegments().get(1); - // 根据提供的ID查询特定的数据项 - c = db.query(TABLE.DATA, projection, DataColumns.ID + "=" + id - + parseSelection(selection), selectionArgs, null, null, sortOrder); - break; - 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"); - } - - String searchString = null; - if (mMatcher.match(uri) == URI_SEARCH_SUGGEST) { - if (uri.getPathSegments().size() > 1) { - // getPathSegments()方法得到一个String的List, - // 在uri.getPathSegments().get(1)为第2个元素 - searchString = uri.getPathSegments().get(1); - } - } else { - searchString = uri.getQueryParameter("pattern"); - } - - if (TextUtils.isEmpty(searchString)) { - return null; - } - - try { - searchString = String.format("%%%s%%", searchString); - c = db.rawQuery(NOTES_SNIPPET_SEARCH_QUERY, - new String[] { searchString }); - } catch (IllegalStateException ex) { - Log.e(TAG, "got exception: " + ex.toString()); - } - break; - default: - // 抛出异常 - throw new IllegalArgumentException("Unknown URI " + uri); - } - if (c != null) { - c.setNotificationUri(getContext().getContentResolver(), uri); - } - return c; - } - - @Override - // 插入一个uri - 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: - // 如果 URI 匹配通用的 note URI, - // 修改选择条件以确保仅删除 ID 大于 0 的笔记 - insertedId = noteId = db.insert(TABLE.NOTE, null, values); - break; - // 如果存在,查找NOTE_ID - case URI_DATA: - - if (values.containsKey(DataColumns.NOTE_ID)) { - noteId = values.getAsLong(DataColumns.NOTE_ID); - } else { - Log.d(TAG, "Wrong data format without note id:" + values.toString()); - } - insertedId = dataId = db.insert(TABLE.DATA, null, values); - break; - default: - throw new IllegalArgumentException("Unknown URI " + uri); - } - // Notify the note uri - // notifyChange获得一个ContextResolver对象并且更新里面的内容 - if (noteId > 0) { - getContext().getContentResolver().notifyChange( - ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), null); - } - - // Notify the data uri - if (dataId > 0) { - getContext().getContentResolver().notifyChange( - ContentUris.withAppendedId(Notes.CONTENT_DATA_URI, dataId), null); - } - - // 返回插入的uri的路径 - return ContentUris.withAppendedId(uri, insertedId); - } - - @Override - // 删除一个uri - public int delete(Uri uri, String selection, String[] selectionArgs) { - //Uri代表要操作的数据,Android上可用的每种资源 -包括 图像、视频片段、音频资源等都可以用Uri来表示。 - int count = 0; - String id = null; - // 获得可写的数据库 - SQLiteDatabase db = mHelper.getWritableDatabase(); - boolean deleteData = false; - switch (mMatcher.match(uri)) { - case URI_NOTE: - selection = "(" + selection + ") AND " + NoteColumns.ID + ">0 "; - count = db.delete(TABLE.NOTE, selection, selectionArgs); - break; - case URI_NOTE_ITEM: - // 如果 URI 匹配特定的 note 项, - // 从 URI 路径段中提取 ID - id = uri.getPathSegments().get(1); - /** - * ID that smaller than 0 is system folder which is not allowed to - * trash - */ - long noteId = Long.valueOf(id); - // 如果笔记 ID 小于或等于 0(系统文件夹),则退出 switch 语句 - if (noteId <= 0) { - break; - } - // 否则,删除指定 ID 的笔记并应用选择条件 - count = db.delete(TABLE.NOTE, - NoteColumns.ID + "=" + id + parseSelection(selection), selectionArgs); - break; - case URI_DATA: - - count = db.delete(TABLE.DATA, selection, selectionArgs); - deleteData = true; - break; - case URI_DATA_ITEM: - // 如果 URI 匹配特定的 data 项,从 URI 路径段中提取 ID - id = uri.getPathSegments().get(1); - // 删除指定 ID 的数据并应用选择条件 - count = db.delete(TABLE.DATA, - DataColumns.ID + "=" + id + parseSelection(selection), selectionArgs); - deleteData = true; - break; - default: - // 如果 URI 不匹配任何已知模式,则抛出 IllegalArgumentException - throw new IllegalArgumentException("Unknown URI " + uri); - } - // 如果删除了任何行,则通知已注册的 ContentObservers - if (count > 0) { - if (deleteData) { - getContext().getContentResolver().notifyChange(Notes.CONTENT_NOTE_URI, null); - } - getContext().getContentResolver().notifyChange(uri, null); - } - // 返回删除的行数 - return count; - } - - @Override - // 更新一个uri - public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { - int count = 0; - String id = null; - SQLiteDatabase db = mHelper.getWritableDatabase(); - boolean updateData = false; - switch (mMatcher.match(uri)) { - case URI_NOTE: - // 减少笔记版本号 - increaseNoteVersion(-1, selection, selectionArgs); - // 更新 "note" 表中的数据 - count = db.update(TABLE.NOTE, values, selection, selectionArgs); - break; - case URI_NOTE_ITEM: - id = uri.getPathSegments().get(1); - // 减少特定笔记项的版本号 - increaseNoteVersion(Long.valueOf(id), selection, selectionArgs); - // 更新 "note" 表中特定ID的数据 - count = db.update(TABLE.NOTE, values, NoteColumns.ID + "=" + id - + parseSelection(selection), selectionArgs); - break; - case URI_DATA: - // 更新 "data" 表中的数据 - count = db.update(TABLE.DATA, values, selection, selectionArgs); - updateData = true; - break; - case URI_DATA_ITEM: - id = uri.getPathSegments().get(1); - // 更新 "data" 表中特定ID的数据 - count = db.update(TABLE.DATA, values, DataColumns.ID + "=" + id - + parseSelection(selection), selectionArgs); - updateData = true; - break; - default: - throw new IllegalArgumentException("Unknown URI " + uri); - } - - if (count > 0) { - if (updateData) { - // 通知数据内容观察者数据发生变化 - getContext().getContentResolver().notifyChange(Notes.CONTENT_NOTE_URI, null); - } - // 通知URI的观察者数据发生变化 - getContext().getContentResolver().notifyChange(uri, null); - } - return count; - } - - // 将字符串解析成规定格式 - private String parseSelection(String selection) { - return (!TextUtils.isEmpty(selection) ? " AND (" + selection + ')' : ""); - } - - //增加一个noteVersion - private void increaseNoteVersion(long id, String selection, String[] selectionArgs) { - StringBuilder sql = new StringBuilder(120); - sql.append("UPDATE "); - sql.append(TABLE.NOTE); - sql.append(" SET "); - sql.append(NoteColumns.VERSION); - sql.append("=" + NoteColumns.VERSION + "+1 "); - - if (id > 0 || !TextUtils.isEmpty(selection)) { - sql.append(" WHERE "); - } - if (id > 0) { - sql.append(NoteColumns.ID + "=" + String.valueOf(id)); - } - if (!TextUtils.isEmpty(selection)) { - String selectString = id > 0 ? parseSelection(selection) : selection; - for (String args : selectionArgs) { - selectString = selectString.replaceFirst("\\?", args); - } - sql.append(selectString); - } - - // execSQL()方法可以执行insert、delete、update和CREATE TABLE之类有更改行为的SQL语句 - mHelper.getWritableDatabase().execSQL(sql.toString()); - } - - @Override - public String getType(Uri uri) { - // TODO Auto-generated method stub - return null; - } - -} diff --git a/src/gtask/data/MetaData.java b/src/gtask/data/MetaData.java deleted file mode 100644 index 80ea1ec..0000000 --- a/src/gtask/data/MetaData.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.gtask.data; - -import android.database.Cursor; -import android.util.Log; - -import net.micode.notes.tool.GTaskStringUtils; - -import org.json.JSONException; -import org.json.JSONObject; - -//MetaData类继承自Task类,专门用于处理Google任务相关的元数据 -public class MetaData extends Task { - private final static String TAG = MetaData.class.getSimpleName();// 日志输出时使用的TAG标识 - - private String mRelatedGid = null;// 存储与本元数据相关的GTask全局ID - // 设置元数据方法,将gid添加到metaInfo中,并将整个metaInfo以字符串形式保存到notes,同时设置名称 - - public void setMeta(String gid, JSONObject metaInfo) { - try { - metaInfo.put(GTaskStringUtils.META_HEAD_GTASK_ID, gid); - } catch (JSONException e) { - Log.e(TAG, "failed to put related gid");// 添加gid失败时的日志输出 - } - setNotes(metaInfo.toString()); - setName(GTaskStringUtils.META_NOTE_NAME); - } - // 获取与本元数据相关的GTask全局ID - public String getRelatedGid() { - return mRelatedGid; - } - // 重写父类方法,判断当前元数据是否值得保存(根据notes是否为空) - @Override - public boolean isWorthSaving() { - return getNotes() != null; - } - // 从远程JSON数据设置内容并提取gid信息 - @Override - public void setContentByRemoteJSON(JSONObject js) { - super.setContentByRemoteJSON(js);// 调用父类的setContentByRemoteJSON方法 - if (getNotes() != null) { // 检查notes字段是否为空 - try { - JSONObject metaInfo = new JSONObject(getNotes().trim());// 将notes字段转换为JSONObject对象 - mRelatedGid = metaInfo.getString(GTaskStringUtils.META_HEAD_GTASK_ID);// 从JSONObject中获取特定字段并赋值给mRelatedGid - } catch (JSONException e) { - Log.w(TAG, "failed to get related gid");// 记录日志,提示无法获取相关的gid - mRelatedGid = null; - } - } - } - - @Override - public void setContentByLocalJSON(JSONObject js) { - // this function should not be called - throw new IllegalAccessError("MetaData:setContentByLocalJSON should not be called");// 抛出异常,指示不应调用此函数 - } - - @Override - public JSONObject getLocalJSONFromContent() { - throw new IllegalAccessError("MetaData:getLocalJSONFromContent should not be called");// 抛出异常,指示不应调用此函数 - } - - @Override - public int getSyncAction(Cursor c) { - throw new IllegalAccessError("MetaData:getSyncAction should not be called");// 抛出异常,指示不应调用此函数 - } - -} diff --git a/src/gtask/data/Node.java b/src/gtask/data/Node.java deleted file mode 100644 index 10b9fba..0000000 --- a/src/gtask/data/Node.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.gtask.data; - -import android.database.Cursor; - -import org.json.JSONObject; - -public abstract class Node { - // 定义同步操作类型常量 - public static final int SYNC_ACTION_NONE = 0; - - public static final int SYNC_ACTION_ADD_REMOTE = 1; - - public static final int SYNC_ACTION_ADD_LOCAL = 2; - - public static final int SYNC_ACTION_DEL_REMOTE = 3; - - public static final int SYNC_ACTION_DEL_LOCAL = 4; - - public static final int SYNC_ACTION_UPDATE_REMOTE = 5; - - public static final int SYNC_ACTION_UPDATE_LOCAL = 6; - - public static final int SYNC_ACTION_UPDATE_CONFLICT = 7; - - public static final int SYNC_ACTION_ERROR = 8; - - // 定义节点属性 - private String mGid; // 节点ID - - private String mName;// 节点名称 - - private long mLastModified; // 最后修改时间 - - private boolean mDeleted;// 是否已删除 - - public Node() { - mGid = null; - mName = ""; - mLastModified = 0; - mDeleted = false; - }// 构造函数初始化节点属性 - - public abstract JSONObject getCreateAction(int actionId);// 抽象方法,用于创建特定类型的同步操作 - - public abstract JSONObject getUpdateAction(int actionId); // 抽象方法,用于更新特定类型的同步操作 - - public abstract void setContentByRemoteJSON(JSONObject js); // 抽象方法,根据远程JSON数据设置节点内容 - - public abstract void setContentByLocalJSON(JSONObject js); // 抽象方法,根据本地JSON数据设置节点内容 - - public abstract JSONObject getLocalJSONFromContent();// 抽象方法,从节点内容获取本地JSON数据 - - public abstract int getSyncAction(Cursor c); // 抽象方法,根据游标获取同步操作类型 - - public void setGid(String gid) { - this.mGid = gid; - }// 设置节点ID - - public void setName(String name) { - this.mName = name; - }// 设置节点名称 - - public void setLastModified(long lastModified) { - this.mLastModified = lastModified; - }// 设置最后修改时间 - - public void setDeleted(boolean deleted) { - this.mDeleted = deleted; - }// 设置是否已删除 - - public String getGid() { - return this.mGid; - }// 获取节点ID - - public String getName() { - return this.mName; - }// 获取节点名称 - - public long getLastModified() { - return this.mLastModified; - }// 获取最后修改时间 - - public boolean getDeleted() { - return this.mDeleted; - } // 获取是否已删除 -} diff --git a/src/gtask/data/SqlData.java b/src/gtask/data/SqlData.java deleted file mode 100644 index f6fde3b..0000000 --- a/src/gtask/data/SqlData.java +++ /dev/null @@ -1,205 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.gtask.data; - -import android.content.ContentResolver; -import android.content.ContentUris; -import android.content.ContentValues; -import android.content.Context; -import android.database.Cursor; -import android.net.Uri; -import android.util.Log; - -import net.micode.notes.data.Notes; -import net.micode.notes.data.Notes.DataColumns; -import net.micode.notes.data.Notes.DataConstants; -import net.micode.notes.data.Notes.NoteColumns; -import net.micode.notes.data.NotesDatabaseHelper.TABLE; -import net.micode.notes.gtask.exception.ActionFailureException; - -import org.json.JSONException; -import org.json.JSONObject; - -//SqlData 类是一个数据对象,用于封装数据表中的一行数据。SqlData 类提供了一些方法,用于从 Cursor 对象中加载数据、从 JSONObject 对象中加载数据、将数据提交到数据库等操作。 -public class SqlData { - private static final String TAG = SqlData.class.getSimpleName(); - - private static final int INVALID_ID = -99999; - //通常情况下,将一个特殊数值(比如负数)作为无效 ID 的标识,这样在程序中可以通过判断是否等于 INVALID_ID 来表示某个 ID 是否有效。 - - //定义了一个名为 PROJECTION_DATA 的公共静态常量数组 - public static final String[] PROJECTION_DATA = new String[] { - DataColumns.ID, DataColumns.MIME_TYPE, DataColumns.CONTENT, DataColumns.DATA1, - DataColumns.DATA3 - }; - - public static final int DATA_ID_COLUMN = 0;//数据表ID列索引 - - public static final int DATA_MIME_TYPE_COLUMN = 1;//数据表MIME_TYPE列索引 - - public static final int DATA_CONTENT_COLUMN = 2;//数据表CONTENT列索引 - - public static final int DATA_CONTENT_DATA_1_COLUMN = 3;//数据表DATA1列索引 - - public static final int DATA_CONTENT_DATA_3_COLUMN = 4;//数据表DATA3列索引 - - private ContentResolver mContentResolver;//访问内容提供者的接口,可以进行数据库操作 - - private boolean mIsCreate;//标识当前数据是否创建 - - private long mDataId;//数据ID - - private String mDataMimeType;//数据MIME类型 - - private String mDataContent;//数据内容 - - private long mDataContentData1;//数据DATA1 - - private String mDataContentData3;//数据DATA3 - - private ContentValues mDiffDataValues; - //ContentValues 是一个键值对存储容器,通常用于封装一组待插入或更新到数据库的数据。 - //mDiffDataValues 主要用来存储数据对象与数据库中实际数据的差异。通过比较 mDiffDataValues 中的数据与数据库中对应的数据, - // 可以确定数据对象是否需要进行更新操作,并且可以方便地获取到数据的变化部分。 - public SqlData(Context context) {//构造函数 - mContentResolver = context.getContentResolver(); - mIsCreate = true;//新创建的数据 - mDataId = INVALID_ID;//数据ID,初始值为无效ID - mDataMimeType = DataConstants.NOTE;//数据MIME类型 - mDataContent = ""; - mDataContentData1 = 0; - mDataContentData3 = ""; - mDiffDataValues = new ContentValues(); - } - - public SqlData(Context context, Cursor c) {//构造函数2 - mContentResolver = context.getContentResolver(); - mIsCreate = false;//不是新创建的数据 - loadFromCursor(c); - mDiffDataValues = new ContentValues(); - } - //用于从传入的 Cursor 对象中加载数据到当前 SqlData 对象中 - private void loadFromCursor(Cursor c) { - mDataId = c.getLong(DATA_ID_COLUMN); - mDataMimeType = c.getString(DATA_MIME_TYPE_COLUMN); - mDataContent = c.getString(DATA_CONTENT_COLUMN); - mDataContentData1 = c.getLong(DATA_CONTENT_DATA_1_COLUMN); - mDataContentData3 = c.getString(DATA_CONTENT_DATA_3_COLUMN); - } - //用于将传入的 JSONObject 对象中的数据加载到当前 SqlData 对象中 - public void setContent(JSONObject js) throws JSONException { - long dataId = js.has(DataColumns.ID) ? js.getLong(DataColumns.ID) : INVALID_ID;//如果JSONObject对象中包含ID,则获取ID,否则ID为无效ID - if (mIsCreate || mDataId != dataId) {//如果是新创建的数据或者数据ID不等于传入的数据ID - mDiffDataValues.put(DataColumns.ID, dataId);//将数据ID放入mDiffDataValues中 - } - mDataId = dataId;//更新数据ID - - String dataMimeType = js.has(DataColumns.MIME_TYPE) ? js.getString(DataColumns.MIME_TYPE) - : DataConstants.NOTE; - if (mIsCreate || !mDataMimeType.equals(dataMimeType)) { - mDiffDataValues.put(DataColumns.MIME_TYPE, dataMimeType); - } - mDataMimeType = dataMimeType; - - String dataContent = js.has(DataColumns.CONTENT) ? js.getString(DataColumns.CONTENT) : ""; - if (mIsCreate || !mDataContent.equals(dataContent)) { - mDiffDataValues.put(DataColumns.CONTENT, dataContent); - } - mDataContent = dataContent; - - long dataContentData1 = js.has(DataColumns.DATA1) ? js.getLong(DataColumns.DATA1) : 0; - if (mIsCreate || mDataContentData1 != dataContentData1) { - mDiffDataValues.put(DataColumns.DATA1, dataContentData1); - } - mDataContentData1 = dataContentData1; - - String dataContentData3 = js.has(DataColumns.DATA3) ? js.getString(DataColumns.DATA3) : ""; - if (mIsCreate || !mDataContentData3.equals(dataContentData3)) { - mDiffDataValues.put(DataColumns.DATA3, dataContentData3); - } - mDataContentData3 = dataContentData3; - } - //用于获取对象的内容并返回一个 JSON 对象 - public JSONObject getContent() throws JSONException { - if (mIsCreate) {//若数据未创建 - Log.e(TAG, "it seems that we haven't created this in database yet"); - return null; - } - JSONObject js = new JSONObject(); - js.put(DataColumns.ID, mDataId); - js.put(DataColumns.MIME_TYPE, mDataMimeType); - js.put(DataColumns.CONTENT, mDataContent); - js.put(DataColumns.DATA1, mDataContentData1); - js.put(DataColumns.DATA3, mDataContentData3); - return js; - } - //用于提交数据更改到数据库 - public void commit(long noteId, boolean validateVersion, long version) { -// 在 if (mIsCreate) 分支中: -// -// 首先检查条件,如果数据ID无效且包含ID字段,则将ID字段从差异数据值中移除。 -// 将指定的笔记ID(noteId)放入差异数据值中。 -// 调用内容解析器(ContentResolver)的insert()方法向数据库中插入数据,并获取返回的URI。 -// 解析URI以获取新插入数据的ID,并将其赋值给 mDataId 变量。 -// 如果出现异常(NumberFormatException),则记录错误日志并抛出 ActionFailureException 异常。 - -// 在 else 分支中: -// -// 如果差异数据值的大小大于0,则继续执行更新操作。 -// 根据是否需要验证版本,调用内容解析器的update()方法更新数据库中的数据。 -// 如果更新结果为0,则记录警告日志,表示可能在同步期间用户更新了笔记。 - if (mIsCreate) { - if (mDataId == INVALID_ID && mDiffDataValues.containsKey(DataColumns.ID)) { - mDiffDataValues.remove(DataColumns.ID); - } - - mDiffDataValues.put(DataColumns.NOTE_ID, noteId); - Uri uri = mContentResolver.insert(Notes.CONTENT_DATA_URI, mDiffDataValues); - try { - mDataId = Long.valueOf(uri.getPathSegments().get(1)); - } catch (NumberFormatException e) { - Log.e(TAG, "Get note id error :" + e.toString()); - throw new ActionFailureException("create note failed"); - } - } else { - if (mDiffDataValues.size() > 0) { - int result = 0; - if (!validateVersion) { - result = mContentResolver.update(ContentUris.withAppendedId( - Notes.CONTENT_DATA_URI, mDataId), mDiffDataValues, null, null); - } else { - result = mContentResolver.update(ContentUris.withAppendedId( - Notes.CONTENT_DATA_URI, mDataId), mDiffDataValues, - " ? in (SELECT " + NoteColumns.ID + " FROM " + TABLE.NOTE - + " WHERE " + NoteColumns.VERSION + "=?)", new String[] { - String.valueOf(noteId), String.valueOf(version) - }); - } - if (result == 0) { - Log.w(TAG, "there is no update. maybe user updates note when syncing"); - } - } - } - - mDiffDataValues.clear();//清空mDiffDataValues - mIsCreate = false;//数据已经创建 - } - //返回数据ID - public long getId() { - return mDataId; - } -} diff --git a/src/gtask/data/SqlNote.java b/src/gtask/data/SqlNote.java deleted file mode 100644 index e3f613f..0000000 --- a/src/gtask/data/SqlNote.java +++ /dev/null @@ -1,540 +0,0 @@ - -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.gtask.data; - -import android.appwidget.AppWidgetManager; -import android.content.ContentResolver; -import android.content.ContentValues; -import android.content.Context; -import android.database.Cursor; -import android.net.Uri; -import android.util.Log; - -import net.micode.notes.data.Notes; -import net.micode.notes.data.Notes.DataColumns; -import net.micode.notes.data.Notes.NoteColumns; -import net.micode.notes.gtask.exception.ActionFailureException; -import net.micode.notes.tool.GTaskStringUtils; -import net.micode.notes.tool.ResourceParser; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - -import java.util.ArrayList; - -//Sql类的作用是用于处理笔记相关的数据库操作,其中包含了对笔记的增删改查以及与笔记相关的数据操作。 -//具体来说,这个类实现了以下功能: -// -// 提供了构造函数,可以根据上下文对象初始化一个 SqlNote 对象,并设置默认的属性。 -// 可以根据传入的 Cursor 对象或笔记 ID 加载数据到当前 SqlNote 对象中。 -// 可以根据传入的 JSON 对象设置笔记对象的内容。 -// 可以获取当前对象的内容并返回一个 JSON 对象。 -// 提供了设置父ID、Google任务ID、同步ID等属性的方法。 -// 包含了提交笔记对象更改的方法,可以将笔记对象的数据插入到数据库中或更新数据库中已有的笔记数据。 -// 提供了获取数据ID、父ID、摘要等属性的方法。 -// 包含了加载数据内容、设置内容、提交更改等私有方法,用于具体的数据处理和操作。 -public class SqlNote { - private static final String TAG = SqlNote.class.getSimpleName();//日志 - - private static final int INVALID_ID = -99999;//无效ID标识 - - //包含了一组用于查询的字段名称,可以用于在数据库查询中指定需要返回的列 - public static final String[] PROJECTION_NOTE = new String[] { - NoteColumns.ID, NoteColumns.ALERTED_DATE, NoteColumns.BG_COLOR_ID, - NoteColumns.CREATED_DATE, NoteColumns.HAS_ATTACHMENT, NoteColumns.MODIFIED_DATE, - NoteColumns.NOTES_COUNT, NoteColumns.PARENT_ID, NoteColumns.SNIPPET, NoteColumns.TYPE, - NoteColumns.WIDGET_ID, NoteColumns.WIDGET_TYPE, NoteColumns.SYNC_ID, - NoteColumns.LOCAL_MODIFIED, NoteColumns.ORIGIN_PARENT_ID, NoteColumns.GTASK_ID, - NoteColumns.VERSION - }; - - //定义了一组列索引 - public static final int ID_COLUMN = 0; - - public static final int ALERTED_DATE_COLUMN = 1; - - public static final int BG_COLOR_ID_COLUMN = 2; - - public static final int CREATED_DATE_COLUMN = 3; - - public static final int HAS_ATTACHMENT_COLUMN = 4; - - public static final int MODIFIED_DATE_COLUMN = 5; - - public static final int NOTES_COUNT_COLUMN = 6; - - public static final int PARENT_ID_COLUMN = 7; - - public static final int SNIPPET_COLUMN = 8; - - public static final int TYPE_COLUMN = 9; - - public static final int WIDGET_ID_COLUMN = 10; - - public static final int WIDGET_TYPE_COLUMN = 11; - - public static final int SYNC_ID_COLUMN = 12; - - public static final int LOCAL_MODIFIED_COLUMN = 13; - - public static final int ORIGIN_PARENT_ID_COLUMN = 14; - - public static final int GTASK_ID_COLUMN = 15; - - public static final int VERSION_COLUMN = 16; - - private Context mContext;//上下文对象,获取应用程序上下文信息 - - private ContentResolver mContentResolver;// 访问内容提供者的接口,可以进行数据库操作 - - private boolean mIsCreate;//标识当前数据是否创建 - - private long mId;//数据ID - - private long mAlertDate;//提醒日期 - - private int mBgColorId;//背景颜色ID - - private long mCreatedDate;//创建日期 - - private int mHasAttachment;//是否有附件 - - private long mModifiedDate;//修改日期 - - private long mParentId;//父ID - - private String mSnippet;//摘要 - - private int mType;//类型 - - private int mWidgetId;//小部件ID - - private int mWidgetType;//小部件类型 - - private long mOriginParent;//原始父ID - - private long mVersion;//版本 - - private ContentValues mDiffNoteValues;//ContentValues 是一个键值对存储容器,通常用于封装一组待插入或更新到数据库的数据 - - private ArrayList mDataList;//数据列表 - - //构造函数 - public SqlNote(Context context) { - mContext = context; - mContentResolver = context.getContentResolver(); - mIsCreate = true; - mId = INVALID_ID; - mAlertDate = 0; - mBgColorId = ResourceParser.getDefaultBgId(context); - mCreatedDate = System.currentTimeMillis(); - mHasAttachment = 0; - mModifiedDate = System.currentTimeMillis(); - mParentId = 0; - mSnippet = ""; - mType = Notes.TYPE_NOTE; - mWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; - mWidgetType = Notes.TYPE_WIDGET_INVALIDE; - mOriginParent = 0; - mVersion = 0; - mDiffNoteValues = new ContentValues(); - mDataList = new ArrayList(); - } - - //构造函数2,根据Cursor对象初始化数据 - public SqlNote(Context context, Cursor c) { - mContext = context; - mContentResolver = context.getContentResolver(); - mIsCreate = false; - loadFromCursor(c); - mDataList = new ArrayList(); - if (mType == Notes.TYPE_NOTE) - loadDataContent(); - mDiffNoteValues = new ContentValues(); - } - - //构造函数3,根据ID初始化数据 - public SqlNote(Context context, long id) { - mContext = context; - mContentResolver = context.getContentResolver(); - mIsCreate = false; - loadFromCursor(id); - mDataList = new ArrayList(); - if (mType == Notes.TYPE_NOTE) - loadDataContent(); - mDiffNoteValues = new ContentValues(); - - } - - //根据ID加载数据,利用loadFromCursor(Cursor c)方法加载到当前 SqlNote 对象中 - private void loadFromCursor(long id) { - Cursor c = null; - try { //通过mContentResolver查询获取Cursor对象 - c = mContentResolver.query(Notes.CONTENT_NOTE_URI, PROJECTION_NOTE, "(_id=?)", - new String[] { - String.valueOf(id) - }, null); - if (c != null) { - c.moveToNext();//将光标移动到第一条记录 - loadFromCursor(c); - } else { - Log.w(TAG, "loadFromCursor: cursor = null"); - } - } finally { //无论是否发生异常,都会执行finally块中的代码 - if (c != null) - c.close(); - } - } - - //从传入的 Cursor 对象中加载数据到当前 SqlNote 对象中 - private void loadFromCursor(Cursor c) { - mId = c.getLong(ID_COLUMN); - mAlertDate = c.getLong(ALERTED_DATE_COLUMN); - mBgColorId = c.getInt(BG_COLOR_ID_COLUMN); - mCreatedDate = c.getLong(CREATED_DATE_COLUMN); - mHasAttachment = c.getInt(HAS_ATTACHMENT_COLUMN); - mModifiedDate = c.getLong(MODIFIED_DATE_COLUMN); - mParentId = c.getLong(PARENT_ID_COLUMN); - mSnippet = c.getString(SNIPPET_COLUMN); - mType = c.getInt(TYPE_COLUMN); - mWidgetId = c.getInt(WIDGET_ID_COLUMN); - mWidgetType = c.getInt(WIDGET_TYPE_COLUMN); - mVersion = c.getLong(VERSION_COLUMN); - } - - //从数据库中加载指定笔记ID相关的数据,并将这些数据转化为SqlData对象并存储在mDataList中供后续使用 - private void loadDataContent() { - Cursor c = null; - mDataList.clear(); - try { - //通过内容解析器(ContentResolver)执行查询操作,从笔记内容的URI(Notes.CONTENT_DATA_URI)中获取与当前笔记ID(mId)相关联的数据 - c = mContentResolver.query(Notes.CONTENT_DATA_URI, SqlData.PROJECTION_DATA, - "(note_id=?)", new String[] { - String.valueOf(mId) - }, null); - if (c != null) { - if (c.getCount() == 0) { //如果Cursor对象中没有数据 - Log.w(TAG, "it seems that the note has not data"); - return; - } - while (c.moveToNext()) { //遍历Cursor对象 - SqlData data = new SqlData(mContext, c); //对于每一行数据,创建一个SqlData对象 - mDataList.add(data); - } - } else { - Log.w(TAG, "loadDataContent: cursor = null"); - } - } finally { - if (c != null) - c.close(); - } - } - - //将传入的 JSONObject 对象中的数据加载到当前 SqlNote 对象中 - public boolean setContent(JSONObject js) { - try { - JSONObject note = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE); - if (note.getInt(NoteColumns.TYPE) == Notes.TYPE_SYSTEM) { //系统文件夹不可操作 - Log.w(TAG, "cannot set system folder"); - } else if (note.getInt(NoteColumns.TYPE) == Notes.TYPE_FOLDER) { - // for folder we can only update the snnipet and type - String snippet = note.has(NoteColumns.SNIPPET) ? note //如果JSONObject对象中包含摘要,则获取摘要,否则摘要为空字符串 - .getString(NoteColumns.SNIPPET) : ""; - if (mIsCreate || !mSnippet.equals(snippet)) { //如果是新创建的数据或者摘要不等于传入的摘要 - mDiffNoteValues.put(NoteColumns.SNIPPET, snippet); //将摘要放入mDiffNoteValues中 - } - mSnippet = snippet; - //以下代码与上面的代码类似 - int type = note.has(NoteColumns.TYPE) ? note.getInt(NoteColumns.TYPE) - : Notes.TYPE_NOTE; - if (mIsCreate || mType != type) { - mDiffNoteValues.put(NoteColumns.TYPE, type); - } - mType = type; - } else if (note.getInt(NoteColumns.TYPE) == Notes.TYPE_NOTE) { - JSONArray dataArray = js.getJSONArray(GTaskStringUtils.META_HEAD_DATA); - long id = note.has(NoteColumns.ID) ? note.getLong(NoteColumns.ID) : INVALID_ID; - if (mIsCreate || mId != id) { - mDiffNoteValues.put(NoteColumns.ID, id); - } - mId = id; - - long alertDate = note.has(NoteColumns.ALERTED_DATE) ? note - .getLong(NoteColumns.ALERTED_DATE) : 0; - if (mIsCreate || mAlertDate != alertDate) { - mDiffNoteValues.put(NoteColumns.ALERTED_DATE, alertDate); - } - mAlertDate = alertDate; - - int bgColorId = note.has(NoteColumns.BG_COLOR_ID) ? note - .getInt(NoteColumns.BG_COLOR_ID) : ResourceParser.getDefaultBgId(mContext); - if (mIsCreate || mBgColorId != bgColorId) { - mDiffNoteValues.put(NoteColumns.BG_COLOR_ID, bgColorId); - } - mBgColorId = bgColorId; - - long createDate = note.has(NoteColumns.CREATED_DATE) ? note - .getLong(NoteColumns.CREATED_DATE) : System.currentTimeMillis(); - if (mIsCreate || mCreatedDate != createDate) { - mDiffNoteValues.put(NoteColumns.CREATED_DATE, createDate); - } - mCreatedDate = createDate; - - int hasAttachment = note.has(NoteColumns.HAS_ATTACHMENT) ? note - .getInt(NoteColumns.HAS_ATTACHMENT) : 0; - if (mIsCreate || mHasAttachment != hasAttachment) { - mDiffNoteValues.put(NoteColumns.HAS_ATTACHMENT, hasAttachment); - } - mHasAttachment = hasAttachment; - - long modifiedDate = note.has(NoteColumns.MODIFIED_DATE) ? note - .getLong(NoteColumns.MODIFIED_DATE) : System.currentTimeMillis(); - if (mIsCreate || mModifiedDate != modifiedDate) { - mDiffNoteValues.put(NoteColumns.MODIFIED_DATE, modifiedDate); - } - mModifiedDate = modifiedDate; - - long parentId = note.has(NoteColumns.PARENT_ID) ? note - .getLong(NoteColumns.PARENT_ID) : 0; - if (mIsCreate || mParentId != parentId) { - mDiffNoteValues.put(NoteColumns.PARENT_ID, parentId); - } - mParentId = parentId; - - String snippet = note.has(NoteColumns.SNIPPET) ? note - .getString(NoteColumns.SNIPPET) : ""; - if (mIsCreate || !mSnippet.equals(snippet)) { - mDiffNoteValues.put(NoteColumns.SNIPPET, snippet); - } - mSnippet = snippet; - - int type = note.has(NoteColumns.TYPE) ? note.getInt(NoteColumns.TYPE) - : Notes.TYPE_NOTE; - if (mIsCreate || mType != type) { - mDiffNoteValues.put(NoteColumns.TYPE, type); - } - mType = type; - - int widgetId = note.has(NoteColumns.WIDGET_ID) ? note.getInt(NoteColumns.WIDGET_ID) - : AppWidgetManager.INVALID_APPWIDGET_ID; - if (mIsCreate || mWidgetId != widgetId) { - mDiffNoteValues.put(NoteColumns.WIDGET_ID, widgetId); - } - mWidgetId = widgetId; - - int widgetType = note.has(NoteColumns.WIDGET_TYPE) ? note - .getInt(NoteColumns.WIDGET_TYPE) : Notes.TYPE_WIDGET_INVALIDE; - if (mIsCreate || mWidgetType != widgetType) { - mDiffNoteValues.put(NoteColumns.WIDGET_TYPE, widgetType); - } - mWidgetType = widgetType; - - long originParent = note.has(NoteColumns.ORIGIN_PARENT_ID) ? note - .getLong(NoteColumns.ORIGIN_PARENT_ID) : 0; - if (mIsCreate || mOriginParent != originParent) { - mDiffNoteValues.put(NoteColumns.ORIGIN_PARENT_ID, originParent); - } - mOriginParent = originParent; - - for (int i = 0; i < dataArray.length(); i++) { - JSONObject data = dataArray.getJSONObject(i); - SqlData sqlData = null; - if (data.has(DataColumns.ID)) { - long dataId = data.getLong(DataColumns.ID); - for (SqlData temp : mDataList) { - if (dataId == temp.getId()) { - sqlData = temp; - } - } - } - - if (sqlData == null) { - sqlData = new SqlData(mContext); - mDataList.add(sqlData); - } - - sqlData.setContent(data); - } - } - } catch (JSONException e) { - Log.e(TAG, e.toString()); - e.printStackTrace(); - return false; - } - return true; - } - - //获取对象的内容并返回一个 JSON 对象 - public JSONObject getContent() { - try { - JSONObject js = new JSONObject(); - - if (mIsCreate) { - Log.e(TAG, "it seems that we haven't created this in database yet"); - return null; - } - - JSONObject note = new JSONObject(); - if (mType == Notes.TYPE_NOTE) { - note.put(NoteColumns.ID, mId); - note.put(NoteColumns.ALERTED_DATE, mAlertDate); - note.put(NoteColumns.BG_COLOR_ID, mBgColorId); - note.put(NoteColumns.CREATED_DATE, mCreatedDate); - note.put(NoteColumns.HAS_ATTACHMENT, mHasAttachment); - note.put(NoteColumns.MODIFIED_DATE, mModifiedDate); - note.put(NoteColumns.PARENT_ID, mParentId); - note.put(NoteColumns.SNIPPET, mSnippet); - note.put(NoteColumns.TYPE, mType); - note.put(NoteColumns.WIDGET_ID, mWidgetId); - note.put(NoteColumns.WIDGET_TYPE, mWidgetType); - note.put(NoteColumns.ORIGIN_PARENT_ID, mOriginParent); - js.put(GTaskStringUtils.META_HEAD_NOTE, note); - - JSONArray dataArray = new JSONArray(); - //将数据列表中的数据加载到JSONArray对象中 - for (SqlData sqlData : mDataList) { - JSONObject data = sqlData.getContent(); - if (data != null) { - dataArray.put(data); - } - } - js.put(GTaskStringUtils.META_HEAD_DATA, dataArray); - } else if (mType == Notes.TYPE_FOLDER || mType == Notes.TYPE_SYSTEM) { - note.put(NoteColumns.ID, mId); - note.put(NoteColumns.TYPE, mType); - note.put(NoteColumns.SNIPPET, mSnippet); - js.put(GTaskStringUtils.META_HEAD_NOTE, note); - } - - return js; - } catch (JSONException e) { - Log.e(TAG, e.toString()); - e.printStackTrace(); - } - return null; - } - - //设置父ID - public void setParentId(long id) { - mParentId = id; - mDiffNoteValues.put(NoteColumns.PARENT_ID, id); - } - //设置Google任务ID - public void setGtaskId(String gid) { - mDiffNoteValues.put(NoteColumns.GTASK_ID, gid); - } - //设置同步ID - public void setSyncId(long syncId) { - mDiffNoteValues.put(NoteColumns.SYNC_ID, syncId); - } - //设置本地修改标识 - public void resetLocalModified() { - mDiffNoteValues.put(NoteColumns.LOCAL_MODIFIED, 0); - } - //返回数据ID - public long getId() { - return mId; - } - //返回父ID - public long getParentId() { - return mParentId; - } - //摘要 - public String getSnippet() { - return mSnippet; - } - //返回类型 - public boolean isNoteType() { - return mType == Notes.TYPE_NOTE; - } - - //提交笔记对象的更改 - public void commit(boolean validateVersion) { - if (mIsCreate) { - //如果数据未创建,下面创建新笔记 - //首先检查条件,如果数据ID无效且mDiffNoteValues中包含ID字段,则将ID字段从差异数据值中移除。 - if (mId == INVALID_ID && mDiffNoteValues.containsKey(NoteColumns.ID)) { - mDiffNoteValues.remove(NoteColumns.ID); - } - //通过内容解析器(ContentResolver)的insert方法将mDiffNoteValues中的数据插入到Notes.CONTENT_NOTE_URI所代表的位置,并获取返回的URI。 - Uri uri = mContentResolver.insert(Notes.CONTENT_NOTE_URI, mDiffNoteValues); - try { - //解析URI以获取新创建数据的ID,并将其赋值给 mId 变量。 - mId = Long.valueOf(uri.getPathSegments().get(1)); - } catch (NumberFormatException e) { - Log.e(TAG, "Get note id error :" + e.toString()); - throw new ActionFailureException("create note failed"); - } - if (mId == 0) { - throw new IllegalStateException("Create thread id failed"); - } - - if (mType == Notes.TYPE_NOTE) { //如果是笔记类型 - for (SqlData sqlData : mDataList) { - sqlData.commit(mId, false, -1);//提交数据更改到数据库 - } - } - } else { - if (mId <= 0 && mId != Notes.ID_ROOT_FOLDER && mId != Notes.ID_CALL_RECORD_FOLDER) { //检查ID是否有效 - Log.e(TAG, "No such note"); - throw new IllegalStateException("Try to update note with invalid id"); - } - if (mDiffNoteValues.size() > 0) { //如果差异数据值的大小大于0,表示有数据需要更新 - mVersion ++; - int result = 0; - if (!validateVersion) { - result = mContentResolver.update(Notes.CONTENT_NOTE_URI, mDiffNoteValues, "(" - + NoteColumns.ID + "=?)", new String[] { - String.valueOf(mId) - }); - } else { - //根据笔记的ID(mId)将mDiffNoteValues中的数据更新到指定的Notes.CONTENT_NOTE_URI所代表的位置, - result = mContentResolver.update(Notes.CONTENT_NOTE_URI, mDiffNoteValues, "(" - + NoteColumns.ID + "=?) AND (" + NoteColumns.VERSION + "<=?)", - new String[] { - String.valueOf(mId), String.valueOf(mVersion) - }); -// Notes.CONTENT_NOTE_URI:表示要操作的数据的URI,可能是笔记数据的地址。 -// mDiffNoteValues:包含了需要更新的字段和对应数值的键值对。 -// ("(" + NoteColumns.ID + "=?)"):这是用于指定更新条件的部分,其中NoteColumns.ID是笔记的ID字段,"=?"表示该位置需要传入一个值。 -// new String[] {String.valueOf(mId)}:这是要替换"=?"的具体数值,即要更新的笔记的ID。 - - - } - if (result == 0) { - Log.w(TAG, "there is no update. maybe user updates note when syncing"); - } - } - - if (mType == Notes.TYPE_NOTE) { //如果是笔记类型 - for (SqlData sqlData : mDataList) { - sqlData.commit(mId, validateVersion, mVersion); //提交数据更改到数据库 - } - } - } - - // refresh local info - loadFromCursor(mId); //根据ID加载数据,将数据加载到当前 SqlNote 对象中 - if (mType == Notes.TYPE_NOTE) - loadDataContent(); //从数据库中加载指定笔记ID相关的数据,并将这些数据转化为SqlData对象并存储在mDataList中供后续使用 - - mDiffNoteValues.clear();//清空待提交的数据 - mIsCreate = false; - } -} diff --git a/src/gtask/data/Task.java b/src/gtask/data/Task.java deleted file mode 100644 index 747263e..0000000 --- a/src/gtask/data/Task.java +++ /dev/null @@ -1,378 +0,0 @@ - -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.gtask.data; - -import android.database.Cursor; -import android.text.TextUtils; -import android.util.Log; - -import net.micode.notes.data.Notes; -import net.micode.notes.data.Notes.DataColumns; -import net.micode.notes.data.Notes.DataConstants; -import net.micode.notes.data.Notes.NoteColumns; -import net.micode.notes.gtask.exception.ActionFailureException; -import net.micode.notes.tool.GTaskStringUtils; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - - -public class Task extends Node { - private static final String TAG = Task.class.getSimpleName();//日志 - - private boolean mCompleted; //标识任务是否完成 - - private String mNotes;//任务的备注 - - private JSONObject mMetaInfo;//任务的元数据 - - private Task mPriorSibling;//任务列表的前一个任务 - - private TaskList mParent;//任务的父任务列表 - - public Task() {//构造方法 - super();//调用父类Node的构造方法 - mCompleted = false; - mNotes = null; - mPriorSibling = null; - mParent = null; - mMetaInfo = null; - } - - //获取创建任务的json对象 - public JSONObject getCreateAction(int actionId) { - JSONObject js = new JSONObject();//创建json对象 - try { - //设置各种属性 - // action_type - //将键值对放入json对象中 - js.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE, - GTaskStringUtils.GTASK_JSON_ACTION_TYPE_CREATE); - // action_id - js.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, actionId); - - // index - js.put(GTaskStringUtils.GTASK_JSON_INDEX, mParent.getChildTaskIndex(this)); - - // entity_delta - JSONObject entity = new JSONObject(); - entity.put(GTaskStringUtils.GTASK_JSON_NAME, getName()); - entity.put(GTaskStringUtils.GTASK_JSON_CREATOR_ID, "null"); - entity.put(GTaskStringUtils.GTASK_JSON_ENTITY_TYPE, - GTaskStringUtils.GTASK_JSON_TYPE_TASK); - if (getNotes() != null) { //如果任务的备注不为空 - //将备注信息放入json对象中 - entity.put(GTaskStringUtils.GTASK_JSON_NOTES, getNotes()); - } - js.put(GTaskStringUtils.GTASK_JSON_ENTITY_DELTA, entity); - - // parent_id - js.put(GTaskStringUtils.GTASK_JSON_PARENT_ID, mParent.getGid()); - - // dest_parent_type - js.put(GTaskStringUtils.GTASK_JSON_DEST_PARENT_TYPE, - GTaskStringUtils.GTASK_JSON_TYPE_GROUP); - - // list_id - js.put(GTaskStringUtils.GTASK_JSON_LIST_ID, mParent.getGid()); - - // prior_sibling_id - if (mPriorSibling != null) { - js.put(GTaskStringUtils.GTASK_JSON_PRIOR_SIBLING_ID, mPriorSibling.getGid()); - } - - } catch (JSONException e) { - Log.e(TAG, e.toString());//打印日志 - e.printStackTrace();//打印异常堆栈跟踪信息,将异常信息输出到标准错误流 - throw new ActionFailureException("fail to generate task-create jsonobject"); - } - - return js; - } - - //生成更新任务的json对象 - public JSONObject getUpdateAction(int actionId) { - JSONObject js = new JSONObject(); - - try { - // action_type - js.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE, - GTaskStringUtils.GTASK_JSON_ACTION_TYPE_UPDATE); - - // action_id - js.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, actionId); - - // id - js.put(GTaskStringUtils.GTASK_JSON_ID, getGid()); - - // entity_delta - JSONObject entity = new JSONObject(); - entity.put(GTaskStringUtils.GTASK_JSON_NAME, getName()); - if (getNotes() != null) { - entity.put(GTaskStringUtils.GTASK_JSON_NOTES, getNotes()); - } - entity.put(GTaskStringUtils.GTASK_JSON_DELETED, getDeleted()); - js.put(GTaskStringUtils.GTASK_JSON_ENTITY_DELTA, entity); - - } catch (JSONException e) { - Log.e(TAG, e.toString()); - e.printStackTrace(); - throw new ActionFailureException("fail to generate task-update jsonobject"); - } - - return js; - } - - //根据远程传入的json对象设置任务的内容 - public void setContentByRemoteJSON(JSONObject js) { - if (js != null) { - try { - // id - if (js.has(GTaskStringUtils.GTASK_JSON_ID)) { - setGid(js.getString(GTaskStringUtils.GTASK_JSON_ID)); - } - - // last_modified - if (js.has(GTaskStringUtils.GTASK_JSON_LAST_MODIFIED)) { - setLastModified(js.getLong(GTaskStringUtils.GTASK_JSON_LAST_MODIFIED)); - } - - // name - if (js.has(GTaskStringUtils.GTASK_JSON_NAME)) { - setName(js.getString(GTaskStringUtils.GTASK_JSON_NAME)); - } - - // notes - if (js.has(GTaskStringUtils.GTASK_JSON_NOTES)) { - setNotes(js.getString(GTaskStringUtils.GTASK_JSON_NOTES)); - } - - // deleted - if (js.has(GTaskStringUtils.GTASK_JSON_DELETED)) { - setDeleted(js.getBoolean(GTaskStringUtils.GTASK_JSON_DELETED)); - } - - // completed - if (js.has(GTaskStringUtils.GTASK_JSON_COMPLETED)) { - setCompleted(js.getBoolean(GTaskStringUtils.GTASK_JSON_COMPLETED)); - } - } catch (JSONException e) { - Log.e(TAG, e.toString()); - e.printStackTrace(); - throw new ActionFailureException("fail to get task content from jsonobject"); - } - } - } - - //根据本地的json对象设置任务的内容 - public void setContentByLocalJSON(JSONObject js) { - //若传入的json对象为空或者没包含特定键 - if (js == null || !js.has(GTaskStringUtils.META_HEAD_NOTE) - || !js.has(GTaskStringUtils.META_HEAD_DATA)) { - Log.w(TAG, "setContentByLocalJSON: nothing is avaiable"); - } - - try { - JSONObject note = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE); - JSONArray dataArray = js.getJSONArray(GTaskStringUtils.META_HEAD_DATA); - - if (note.getInt(NoteColumns.TYPE) != Notes.TYPE_NOTE) { - Log.e(TAG, "invalid type"); - return; - } - - for (int i = 0; i < dataArray.length(); i++) { -// 获取数组中索引为 i 的元素,该元素是一个 JSON 对象。 -// 检查该对象中的 MIME_TYPE 字段是否等于 DataConstants.NOTE。 -// 如果上述条件成立,则将该对象中的 CONTENT 字段的值设置为本地对象的 name 属性。 - JSONObject data = dataArray.getJSONObject(i); - if (TextUtils.equals(data.getString(DataColumns.MIME_TYPE), DataConstants.NOTE)) { - setName(data.getString(DataColumns.CONTENT)); - break; - } - } - - } catch (JSONException e) { - Log.e(TAG, e.toString()); - e.printStackTrace(); - } - } - - //根据当前对象的状态生成本地的json对象 - public JSONObject getLocalJSONFromContent() { - String name = getName(); - try { - if (mMetaInfo == null) { //如果元数据为空,表示是一个新创建的任务 - // new task created from web - if (name == null) { - Log.w(TAG, "the note seems to be an empty one"); - return null; - } - - JSONObject js = new JSONObject(); - JSONObject note = new JSONObject(); - JSONArray dataArray = new JSONArray(); - JSONObject data = new JSONObject(); - data.put(DataColumns.CONTENT, name); - dataArray.put(data); - js.put(GTaskStringUtils.META_HEAD_DATA, dataArray); - note.put(NoteColumns.TYPE, Notes.TYPE_NOTE); - js.put(GTaskStringUtils.META_HEAD_NOTE, note); - return js; - } else { //如果元数据不为空,表示是一个同步的任务 - // synced task - JSONObject note = mMetaInfo.getJSONObject(GTaskStringUtils.META_HEAD_NOTE); - JSONArray dataArray = mMetaInfo.getJSONArray(GTaskStringUtils.META_HEAD_DATA); - - for (int i = 0; i < dataArray.length(); i++) { - JSONObject data = dataArray.getJSONObject(i); - if (TextUtils.equals(data.getString(DataColumns.MIME_TYPE), DataConstants.NOTE)) { - data.put(DataColumns.CONTENT, getName()); - break; - } - } - - note.put(NoteColumns.TYPE, Notes.TYPE_NOTE); - return mMetaInfo; - } - } catch (JSONException e) { - Log.e(TAG, e.toString()); - e.printStackTrace(); - return null; - } - } - - //设置任务的元数据 - public void setMetaInfo(MetaData metaData) { - if (metaData != null && metaData.getNotes() != null) { - try { - //将notes字符串的值转换为json对象 - mMetaInfo = new JSONObject(metaData.getNotes()); - } catch (JSONException e) { - Log.w(TAG, e.toString()); - mMetaInfo = null; - } - } - } - - //根据传入Cursor对象和当前对象的mMetainfo属性判断当前对象的同步状态 - public int getSyncAction(Cursor c) { -// 首先尝试获取当前对象的mMetaInfo中的note信息,并进行一些基本的验证。 -// 如果note信息为空,则输出警告日志并返回SYNC_ACTION_UPDATE_REMOTE,表示需要更新远程数据。 -// 如果note信息中没有ID字段,则输出警告日志并返回SYNC_ACTION_UPDATE_LOCAL,表示需要更新本地数据。 -// 验证note的ID与传入Cursor的ID是否匹配,如果不匹配则返回SYNC_ACTION_UPDATE_LOCAL。 -// 检查本地是否有更新,如果没有则比较最后修改时间,如果远程数据有更新则返回SYNC_ACTION_UPDATE_LOCAL,否则返回SYNC_ACTION_NONE。 -// 如果本地有更新,则验证gtask id,如果不匹配则返回SYNC_ACTION_ERROR。 -// 最后根据本地修改时间和最后同步时间的比较,确定具体的同步操作类型,返回相应的同步操作常量。 -// 在处理过程中,如果出现异常则会捕获该异常并打印错误日志,最终返回SYNC_ACTION_ERROR。 - try { - JSONObject noteInfo = null; - if (mMetaInfo != null && mMetaInfo.has(GTaskStringUtils.META_HEAD_NOTE)) { - noteInfo = mMetaInfo.getJSONObject(GTaskStringUtils.META_HEAD_NOTE); - } - - if (noteInfo == null) { - Log.w(TAG, "it seems that note meta has been deleted"); - return SYNC_ACTION_UPDATE_REMOTE; - } - - if (!noteInfo.has(NoteColumns.ID)) { - Log.w(TAG, "remote note id seems to be deleted"); - return SYNC_ACTION_UPDATE_LOCAL; - } - - // validate the note id now - if (c.getLong(SqlNote.ID_COLUMN) != noteInfo.getLong(NoteColumns.ID)) { - Log.w(TAG, "note id doesn't match"); - return SYNC_ACTION_UPDATE_LOCAL; - } - - if (c.getInt(SqlNote.LOCAL_MODIFIED_COLUMN) == 0) { - // there is no local update - if (c.getLong(SqlNote.SYNC_ID_COLUMN) == getLastModified()) { - // no update both side - return SYNC_ACTION_NONE; - } else { - // apply remote to local - return SYNC_ACTION_UPDATE_LOCAL; - } - } else { - // validate gtask id - if (!c.getString(SqlNote.GTASK_ID_COLUMN).equals(getGid())) { - Log.e(TAG, "gtask id doesn't match"); - return SYNC_ACTION_ERROR; - } - if (c.getLong(SqlNote.SYNC_ID_COLUMN) == getLastModified()) { - // local modification only - return SYNC_ACTION_UPDATE_REMOTE; - } else { - return SYNC_ACTION_UPDATE_CONFLICT; - } - } - } catch (Exception e) { - Log.e(TAG, e.toString()); - e.printStackTrace(); - } - - return SYNC_ACTION_ERROR; - } - - //判断任务是否值得保存 - public boolean isWorthSaving() { -// 首先检查当前对象的mMetaInfo属性是否不为null。 -// 如果mMetaInfo属性为null,则继续检查当前对象的name属性是否不为null且去除首尾空格后长度大于0。 -// 接着检查当前对象的notes属性是否不为null且去除首尾空格后长度大于0。 -// 如果上述条件有一个成立,则返回true,否则返回false。 - return mMetaInfo != null || (getName() != null && getName().trim().length() > 0) - || (getNotes() != null && getNotes().trim().length() > 0); - } - - public void setCompleted(boolean completed) { - this.mCompleted = completed; - }//设置任务是否完成 - - public void setNotes(String notes) { - this.mNotes = notes; - }//设置任务的备注 - - public void setPriorSibling(Task priorSibling) { - this.mPriorSibling = priorSibling; - }//设置任务列表的前一个任务 - - public void setParent(TaskList parent) { - this.mParent = parent; - }//设置任务的父任务列表 - - public boolean getCompleted() { - return this.mCompleted; - }//获取任务是否完成 - - public String getNotes() { //获取任务的备注 - return this.mNotes; - } - - public Task getPriorSibling() { - return this.mPriorSibling; - }//获取任务列表的前一个任务 - - public TaskList getParent() { - return this.mParent; - }//获取任务的父任务列表 - -} diff --git a/src/gtask/data/TaskList.java b/src/gtask/data/TaskList.java deleted file mode 100644 index f42d389..0000000 --- a/src/gtask/data/TaskList.java +++ /dev/null @@ -1,384 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.gtask.data; - -import android.database.Cursor; -import android.util.Log; - -import net.micode.notes.data.Notes; -import net.micode.notes.data.Notes.NoteColumns; -import net.micode.notes.gtask.exception.ActionFailureException; -import net.micode.notes.tool.GTaskStringUtils; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.util.ArrayList; - - -public class TaskList extends Node { - private static final String TAG = TaskList.class.getSimpleName();//日志 - - private int mIndex;//可能代表列表中的索引或者用于排序的新任务添加顺序。 - - private ArrayList mChildren; - //ArrayList 类型的数据成员,用来存储属于该任务列表的所有子任务实例。 - - - //构造函数 - public TaskList() { - super(); - mChildren = new ArrayList(); - mIndex = 1; - } - - //生成一个表示创建任务列表操作的JSON对象,以便在网络传输或者持久化存储中使用。 - public JSONObject getCreateAction(int actionId) { - JSONObject js = new JSONObject(); - - try { - // action_type - js.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE, - GTaskStringUtils.GTASK_JSON_ACTION_TYPE_CREATE); - - // action_id - js.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, actionId); - - // index - js.put(GTaskStringUtils.GTASK_JSON_INDEX, mIndex); - - // entity_delta - JSONObject entity = new JSONObject(); - entity.put(GTaskStringUtils.GTASK_JSON_NAME, getName()); - entity.put(GTaskStringUtils.GTASK_JSON_CREATOR_ID, "null"); - entity.put(GTaskStringUtils.GTASK_JSON_ENTITY_TYPE, - GTaskStringUtils.GTASK_JSON_TYPE_GROUP); - js.put(GTaskStringUtils.GTASK_JSON_ENTITY_DELTA, entity); - - } catch (JSONException e) { - Log.e(TAG, e.toString()); - e.printStackTrace(); - throw new ActionFailureException("fail to generate tasklist-create jsonobject"); - } - - return js; - } - - //该Java方法用于构建并返回一个表示更新动作的JSONObject对象,该动作与给定的actionId相关联。 - // 这个JSON对象遵循预定义的结构,其中键值由GTaskStringUtils类提供。 - public JSONObject getUpdateAction(int actionId) { - JSONObject js = new JSONObject(); - - try { - // action_type - js.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE, - GTaskStringUtils.GTASK_JSON_ACTION_TYPE_UPDATE); - - // action_id - js.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, actionId); - - // id - js.put(GTaskStringUtils.GTASK_JSON_ID, getGid()); - - // entity_delta - JSONObject entity = new JSONObject(); - entity.put(GTaskStringUtils.GTASK_JSON_NAME, getName()); - entity.put(GTaskStringUtils.GTASK_JSON_DELETED, getDeleted()); - js.put(GTaskStringUtils.GTASK_JSON_ENTITY_DELTA, entity); - - } catch (JSONException e) { - Log.e(TAG, e.toString()); - e.printStackTrace(); - throw new ActionFailureException("fail to generate tasklist-update jsonobject"); - } - - return js; - } - - //setContentByRemoteJSON的作用是从传入的远程JSON对象JSONObject中提取并设置相关的属性值。 - public void setContentByRemoteJSON(JSONObject js) { - if (js != null) { - try { - // id - if (js.has(GTaskStringUtils.GTASK_JSON_ID)) { - setGid(js.getString(GTaskStringUtils.GTASK_JSON_ID)); - } - - // last_modified - if (js.has(GTaskStringUtils.GTASK_JSON_LAST_MODIFIED)) { - setLastModified(js.getLong(GTaskStringUtils.GTASK_JSON_LAST_MODIFIED)); - } - - // name - if (js.has(GTaskStringUtils.GTASK_JSON_NAME)) { - setName(js.getString(GTaskStringUtils.GTASK_JSON_NAME)); - } - - } catch (JSONException e) { - Log.e(TAG, e.toString()); - e.printStackTrace(); - throw new ActionFailureException("fail to get tasklist content from jsonobject"); - } - } - } - - //接受一个 JSONObject 参数 js,该方法用于从给定的 JSON 对象中解析并设置本地内容 - public void setContentByLocalJSON(JSONObject js) { - if (js == null || !js.has(GTaskStringUtils.META_HEAD_NOTE)) { //如果传入的JSON对象为空或者不包含指定的键值对 - Log.w(TAG, "setContentByLocalJSON: nothing is avaiable"); - } - - try { - //获取名为 META_HEAD_NOTE 的键所对应的 JSON 对象,并将其赋值给 folder 变量。 - JSONObject folder = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE); - //检查 folder 对象中键为 NoteColumns.TYPE 所对应的值是否等于 Notes.TYPE_FOLDER,即判断是否为文件夹类型的笔记。 - //如果是文件夹类型的笔记,则获取文件夹的名称,并设置为当前任务列表的名称。 - if (folder.getInt(NoteColumns.TYPE) == Notes.TYPE_FOLDER) { - String name = folder.getString(NoteColumns.SNIPPET); - setName(GTaskStringUtils.MIUI_FOLDER_PREFFIX + name); - } - //如果不是文件夹类型的笔记,则检查是否为系统类型的笔记。 - //如果是系统类型的笔记,则根据笔记的ID来设置当前任务列表的名称。 - else if (folder.getInt(NoteColumns.TYPE) == Notes.TYPE_SYSTEM) { - if (folder.getLong(NoteColumns.ID) == Notes.ID_ROOT_FOLDER) - setName(GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_DEFAULT); - else if (folder.getLong(NoteColumns.ID) == Notes.ID_CALL_RECORD_FOLDER) - setName(GTaskStringUtils.MIUI_FOLDER_PREFFIX - + GTaskStringUtils.FOLDER_CALL_NOTE); - else - Log.e(TAG, "invalid system folder"); - } else { - Log.e(TAG, "error type"); - } - } catch (JSONException e) { - Log.e(TAG, e.toString()); - e.printStackTrace(); - } - } - //用于将当前任务列表的内容转换为本地的 JSON 对象。 - public JSONObject getLocalJSONFromContent() { - try { - JSONObject js = new JSONObject(); - JSONObject folder = new JSONObject(); - - String folderName = getName();//获取当前任务列表的名称,并将其赋值给 folderName 变量。 - //检查任务列表的名称是否以 GTaskStringUtils.MIUI_FOLDER_PREFFIX 开头。 - //如果是,则截取名称中 GTaskStringUtils.MIUI_FOLDER_PREFFIX 后面的部分作为文件夹名称。 - if (getName().startsWith(GTaskStringUtils.MIUI_FOLDER_PREFFIX)) - folderName = folderName.substring(GTaskStringUtils.MIUI_FOLDER_PREFFIX.length(), - folderName.length()); - folder.put(NoteColumns.SNIPPET, folderName);//将文件夹名称放入 folder 对象中的 NoteColumns.SNIPPET 键下。 - //检查文件夹名称是否等于默认文件夹名称或通话笔记文件夹名称。 - //如果是,则将文件夹类型设置为系统类型 (Notes.TYPE_SYSTEM)。 - if (folderName.equals(GTaskStringUtils.FOLDER_DEFAULT) - || folderName.equals(GTaskStringUtils.FOLDER_CALL_NOTE)) - folder.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); - //如果文件夹名称不是默认文件夹名称或通话笔记文件夹名称,则将文件夹类型设置为普通文件夹类型 (Notes.TYPE_FOLDER)。 - else - folder.put(NoteColumns.TYPE, Notes.TYPE_FOLDER); - //将存储了文件夹信息的 folder 对象放入主 JSON 对象 js 中的 GTaskStringUtils.META_HEAD_NOTE 键下。 - js.put(GTaskStringUtils.META_HEAD_NOTE, folder); - - return js; - } catch (JSONException e) { - Log.e(TAG, e.toString()); - e.printStackTrace(); - return null; - } - } - //用于确定与同步相关的操作。它接收一个 Cursor 对象作为参数,该 Cursor 对象包含了任务列表的数据。 - public int getSyncAction(Cursor c) { - try { - //检查是否存在本地修改。 - //如果没有本地修改: - //如果任务的最后修改时间与本地最后修改时间相同,则表示没有任何更新,返回 SYNC_ACTION_NONE。 - //如果任务的最后修改时间与本地最后修改时间不同,则表示需要将远程更新应用到本地,返回 SYNC_ACTION_UPDATE_LOCAL。 - if (c.getInt(SqlNote.LOCAL_MODIFIED_COLUMN) == 0) { - // there is no local update - if (c.getLong(SqlNote.SYNC_ID_COLUMN) == getLastModified()) { - // no update both side - return SYNC_ACTION_NONE; - } else { - // apply remote to local - return SYNC_ACTION_UPDATE_LOCAL; - } - } - //else { ... } - //如果存在本地修改: - //验证任务的 GTasks ID 是否与当前任务的 GTasks ID 匹配,如果不匹配则记录错误并返回 SYNC_ACTION_ERROR。 - //如果任务的最后修改时间与本地最后修改时间相同,则表示只有本地修改,需要将本地修改应用到远程,返回 SYNC_ACTION_UPDATE_REMOTE。 - //如果任务的最后修改时间与本地最后修改时间不同,目前代码中注释为针对文件夹冲突的情况,仍然将本地修改应用到远程,返回 SYNC_ACTION_UPDATE_REMOTE。 - else { - // validate gtask id - if (!c.getString(SqlNote.GTASK_ID_COLUMN).equals(getGid())) { - Log.e(TAG, "gtask id doesn't match"); - return SYNC_ACTION_ERROR; - } - if (c.getLong(SqlNote.SYNC_ID_COLUMN) == getLastModified()) { - // local modification only - return SYNC_ACTION_UPDATE_REMOTE; - } else { - // for folder conflicts, just apply local modification - return SYNC_ACTION_UPDATE_REMOTE; - } - } - } catch (Exception e) { - Log.e(TAG, e.toString()); - e.printStackTrace(); - } - - return SYNC_ACTION_ERROR; - } - //返回当前任务的子任务数量 - public int getChildTaskCount() { - return mChildren.size(); - } - //添加一个子任务 - public boolean addChildTask(Task task) { - boolean ret = false;//用于标记是否添加成功 - //检查传入的子任务对象 task 不为空,并且当前任务的子任务列表 mChildren 中不包含该子任务。 - if (task != null && !mChildren.contains(task)) { - //如果满足上述条件,将子任务 task 添加到当前任务的子任务列表 mChildren 中,并将返回值赋给 ret,表示添加操作是否成功。 - ret = mChildren.add(task); - if (ret) { - //如果添加操作成功: - //设置子任务的前一个兄弟任务(prior sibling),如果当前任务的子任务列表为空,则前一个兄弟任务为 null,否则为列表中最后一个子任务。 - //设置子任务的父任务为当前任务。 - // need to set prior sibling and parent - task.setPriorSibling(mChildren.isEmpty() ? null : mChildren - .get(mChildren.size() - 1)); - task.setParent(this); - } - } - return ret; - } - //另一个版本的添加子任务方法,与之前的版本相比,这个方法允许在指定索引处添加子任务 - public boolean addChildTask(Task task, int index) { - //首先检查传入的索引 index 是否有效,即确保它在合理的范围内。如果索引小于 0 或大于子任务列表的大小 - if (index < 0 || index > mChildren.size()) { - Log.e(TAG, "add child task: invalid index"); - return false; - } - //使用 indexOf() 方法检查子任务列表中是否已经存在传入的子任务 task,并将其索引存储在变量 pos 中。 - int pos = mChildren.indexOf(task); - if (task != null && pos == -1) { - //将传入的子任务 task 添加到子任务列表 mChildren 的指定索引 index 处。 - mChildren.add(index, task); - - // update the task list - //初始化变量 preTask 和 afterTask,用于存储新添加的子任务的前一个兄弟任务和后一个兄弟任务。 - Task preTask = null; - Task afterTask = null; - if (index != 0) - //如果新添加的子任务不是列表中的第一个任务,则将其前一个兄弟任务设置为索引为 index - 1 的任务。 - preTask = mChildren.get(index - 1); - if (index != mChildren.size() - 1) - //如果新添加的子任务不是列表中的最后一个任务,则将其后一个兄弟任务设置为索引为 index + 1 的任务。 - afterTask = mChildren.get(index + 1); - //将新添加的子任务的前一个兄弟任务设置为 preTask。 - task.setPriorSibling(preTask); - if (afterTask != null) - //如果存在后一个兄弟任务,则将其前一个兄弟任务设置为新添加的子任务 task。 - afterTask.setPriorSibling(task); - } - - return true; - } - //移除子任务 - public boolean removeChildTask(Task task) { - boolean ret = false; - int index = mChildren.indexOf(task); - if (index != -1) { - ret = mChildren.remove(task); - - if (ret) { - // reset prior sibling and parent - task.setPriorSibling(null);//将移除的子任务的前一个兄弟任务设置为 null。 - task.setParent(null);//将移除的子任务的父任务设置为 null。 - - // update the task list - if (index != mChildren.size()) { //如果移除的子任务不是列表中的最后一个任务,则执行以下操作: - //将下一个任务的前一个兄弟任务设置为移除任务的前一个兄弟任务,即更新列表中移除任务后的任务的前一个兄弟关系。 - mChildren.get(index).setPriorSibling( - index == 0 ? null : mChildren.get(index - 1)); - } - } - } - return ret; - } - //移动子任务到指定索引位置的方法 - public boolean moveChildTask(Task task, int index) { - - if (index < 0 || index >= mChildren.size()) { - Log.e(TAG, "move child task: invalid index"); - return false; - } - - int pos = mChildren.indexOf(task); - if (pos == -1) { - Log.e(TAG, "move child task: the task should in the list"); - return false; - } - - if (pos == index) - return true; - return (removeChildTask(task) && addChildTask(task, index)); - } - - //根据子任务的 gid在子任务列表中查找特定子任务的方法 - public Task findChildTaskByGid(String gid) { - for (int i = 0; i < mChildren.size(); i++) { - Task t = mChildren.get(i); - if (t.getGid().equals(gid)) { - return t; - } - } - return null; - } - //获取特定子任务在子任务列表中的索引位置 - public int getChildTaskIndex(Task task) { - return mChildren.indexOf(task); - } - //通过索引位置获取子任务 - public Task getChildTaskByIndex(int index) { - if (index < 0 || index >= mChildren.size()) { - Log.e(TAG, "getTaskByIndex: invalid index"); - return null; - } - return mChildren.get(index); - } - //根据子任务的 gid 查找特定子任务 - public Task getChilTaskByGid(String gid) { - for (Task task : mChildren) { - if (task.getGid().equals(gid)) - return task; - } - return null; - } - //获取子任务列表 - public ArrayList getChildTaskList() { - return this.mChildren; - } - //设置索引 - public void setIndex(int index) { - this.mIndex = index; - } - //获取索引 - public int getIndex() { - return this.mIndex; - } -} diff --git a/src/gtask/exception/ActionFailureException.java b/src/gtask/exception/ActionFailureException.java deleted file mode 100644 index 84d5d87..0000000 --- a/src/gtask/exception/ActionFailureException.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.gtask.exception;// 导入包声明,这个类属于小米便签应用中的异常处理模块 - -public class ActionFailureException extends RuntimeException {//ActionFailureException 类是小米便签应用中定义的一个运行时异常类, - private static final long serialVersionUID = 4425249765923293627L;//这是一个固定的序列化版本号,用于确保在序列化和反序列化过程中,类的兼容性和一致性。 - - public ActionFailureException() { - super(); - } - - public ActionFailureException(String paramString) {//创建一个携带失败原因信息的 ActionFailureException 异常实例。 - super(paramString); - } - - public ActionFailureException(String paramString, Throwable paramThrowable) {//同时还接收一个 Throwable 对象(paramThrowable),该对象通常是指引发当前异常的实际底层异常。 - super(paramString, paramThrowable); - } -} diff --git a/src/gtask/exception/NetworkFailureException.java b/src/gtask/exception/NetworkFailureException.java deleted file mode 100644 index ccf242d..0000000 --- a/src/gtask/exception/NetworkFailureException.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.gtask.exception; -//网络异常检测检测和处理 -public class NetworkFailureException extends Exception { - private static final long serialVersionUID = 2107610287180234136L; //异常版本ID - - public NetworkFailureException() { //重写并调用超类方法, - super(); //当网络操作失败且没有特定的错误信息需要传达时,可以使用这个构造函数抛出异常。 - } - - public NetworkFailureException(String paramString) { - super(paramString); //网络发生异常,需要传递相关排除异常的详细信息,有助于了解和解决异常 - } - - public NetworkFailureException(String paramString, Throwable paramThrowable) { - super(paramString, paramThrowable); //获得易于理解的错误描述,还能跟踪到原始的异常堆栈信息,有利于问题排查 - } -} diff --git a/src/gtask/remote/GTaskASyncTask.java b/src/gtask/remote/GTaskASyncTask.java deleted file mode 100644 index 782eebb..0000000 --- a/src/gtask/remote/GTaskASyncTask.java +++ /dev/null @@ -1,146 +0,0 @@ - -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.gtask.remote; - -import android.app.Notification; -import android.app.NotificationManager; -import android.app.PendingIntent; -import android.content.Context; -import android.content.Intent; -import android.os.AsyncTask; - -import net.micode.notes.R; -import net.micode.notes.ui.NotesListActivity; -import net.micode.notes.ui.NotesPreferenceActivity; - -//定义一个异步任务类GTaskASyncTask,用于在后台线程执行Google Tasks同步操作 -public class GTaskASyncTask extends AsyncTask { - - private static int GTASK_SYNC_NOTIFICATION_ID = 5234235;// 定义一个静态常量,用于通知的唯一ID - // 定义一个接口,用于在同步完成时回调 - public interface OnCompleteListener { - void onComplete(); - } - - private Context mContext;// 定义成员变量,存储上下文环境 - - private NotificationManager mNotifiManager;// 定义NotificationManager实例,用于管理通知 - - private GTaskManager mTaskManager; // 定义GTaskManager实例,负责与Google Tasks服务交互 - - private OnCompleteListener mOnCompleteListener;// 定义监听器,当同步完成时触发onComplete方法 - - // 构造函数,初始化相关组件和变量 - public GTaskASyncTask(Context context, OnCompleteListener listener) { - mContext = context;// 设置应用程序上下文 - mOnCompleteListener = listener;// 设置完成监听器 - mNotifiManager = (NotificationManager)mContext - .getSystemService(Context.NOTIFICATION_SERVICE);// 获取系统通知管理器 - mTaskManager = GTaskManager.getInstance();// 获取GTaskManager单例 - } - // 取消正在进行的同步任务 - public void cancelSync() { - mTaskManager.cancelSync(); - } - // 发布进度更新消息 - public void publishProgess(String message) { - publishProgress(new String[]{ - message - });// 调用父类方法发布进度更新 - } - - // private void showNotification(int tickerId, String content) { - // Notification notification = new Notification(R.drawable.notification, mContext - // .getString(tickerId), System.currentTimeMillis()); - // notification.defaults = Notification.DEFAULT_LIGHTS;// notification.flags = Notification.FLAG_AUTO_CANCEL; - // PendingIntent pendingIntent; - // pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext, - // NotesPreferenceActivity.class), 0); - // } else { - // pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext, - // NotesListActivity.class), 0); - // } - // notification.setLatestEventInfo(mContext, mContext.getString(R.string.app_name), content, - // pendingIntent); - // mNotifiManager.notify(GTASK_SYNC_NOTIFICATION_ID, notification); - // } - - // 创建并显示通知的方法 - private void showNotification(int tickerId, String content) { - PendingIntent pendingIntent;// 根据不同状态创建不同的PendingIntent - if (tickerId != R.string.ticker_success) { - pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext, - NotesPreferenceActivity.class), PendingIntent.FLAG_IMMUTABLE);// 同步过程中的通知跳转至偏好设置界面 - } - else { - pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext, - NotesListActivity.class), PendingIntent.FLAG_IMMUTABLE);// 同步成功后的通知跳转至笔记列表界面 - } - Notification.Builder builder = new Notification.Builder(mContext) - .setAutoCancel(true) - .setContentTitle(mContext.getString(R.string.app_name)) - .setContentText(content) - .setContentIntent(pendingIntent) - .setWhen(System.currentTimeMillis()) - .setOngoing(true); - Notification notification = builder.getNotification(); - mNotifiManager.notify(GTASK_SYNC_NOTIFICATION_ID, notification);// 显示通知 - } - @Override// 在后台线程执行同步逻辑 - protected Integer doInBackground(Void... unused) { - publishProgess(mContext.getString(R.string.sync_progress_login, NotesPreferenceActivity - .getSyncAccountName(mContext)));// 发布登录账号的同步进度 - - return mTaskManager.sync(mContext, this);// 执行实际的同步操作,并返回同步结果状态码 - } - - @Override// 当后台线程发布进度更新时,在主线程中处理更新 - protected void onProgressUpdate(String... progress) { - showNotification(R.string.ticker_syncing, progress[0]);// 显示同步进度通知 - if (mContext instanceof GTaskSyncService) { - ((GTaskSyncService)mContext).sendBroadcast(progress[0]);// 如果当前上下文是GTaskSyncService,则发送广播更新 - } - } - - @Override // 当后台同步操作完成后,在主线程中处理结果 - protected void onPostExecute(Integer result) { - if (result == GTaskManager.STATE_SUCCESS) { - showNotification(R.string.ticker_success, mContext.getString( - R.string.success_sync_account, mTaskManager.getSyncAccount())); - NotesPreferenceActivity.setLastSyncTime(mContext, System.currentTimeMillis());// 记录最后同步时间 - } - else if (result == GTaskManager.STATE_NETWORK_ERROR) { - showNotification(R.string.ticker_fail, mContext.getString(R.string.error_sync_network)); - } - else if (result == GTaskManager.STATE_INTERNAL_ERROR) { - showNotification(R.string.ticker_fail, mContext.getString(R.string.error_sync_internal)); - } - else if (result == GTaskManager.STATE_SYNC_CANCELLED) { - showNotification(R.string.ticker_cancel, mContext - .getString(R.string.error_sync_cancelled)); - } - if (mOnCompleteListener != null) { // 若存在监听器,则在新线程中触发onComplete方法 - new Thread(new Runnable(){ - - public void run() { - mOnCompleteListener.onComplete(); - } - }).start(); - } - } -} diff --git a/src/gtask/remote/GTaskClient.java b/src/gtask/remote/GTaskClient.java deleted file mode 100644 index 152fe8d..0000000 --- a/src/gtask/remote/GTaskClient.java +++ /dev/null @@ -1,688 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.gtask.remote; - -import android.accounts.Account; -import android.accounts.AccountManager; -import android.accounts.AccountManagerFuture; -import android.app.Activity; -import android.os.Bundle; -import android.text.TextUtils; -import android.util.Log; - -import net.micode.notes.gtask.data.Node; -import net.micode.notes.gtask.data.Task; -import net.micode.notes.gtask.data.TaskList; -import net.micode.notes.gtask.exception.ActionFailureException; -import net.micode.notes.gtask.exception.NetworkFailureException; -import net.micode.notes.tool.GTaskStringUtils; -import net.micode.notes.ui.NotesPreferenceActivity; - -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.client.ClientProtocolException; -import org.apache.http.client.entity.UrlEncodedFormEntity; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.cookie.Cookie; -import org.apache.http.impl.client.BasicCookieStore; -import org.apache.http.impl.client.DefaultHttpClient; -import org.apache.http.message.BasicNameValuePair; -import org.apache.http.params.BasicHttpParams; -import org.apache.http.params.HttpConnectionParams; -import org.apache.http.params.HttpParams; -import org.apache.http.params.HttpProtocolParams; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.util.LinkedList; -import java.util.List; -import java.util.zip.GZIPInputStream; -import java.util.zip.Inflater; -import java.util.zip.InflaterInputStream; - - -public class GTaskClient { - - // 定义日志TAG,方便调试输出 - private static final String TAG = GTaskClient.class.getSimpleName(); - // 定义Google Tasks服务的基本URL - private static final String GTASK_URL = "https://mail.google.com/tasks/"; - // 定义获取任务信息的GET请求URL - private static final String GTASK_GET_URL = "https://mail.google.com/tasks/ig"; - // 定义提交任务更新等POST请求URL - private static final String GTASK_POST_URL = "https://mail.google.com/tasks/r/ig"; - // 单例模式,确保全局只有一个GTaskClient实例 - private static GTaskClient mInstance = null; - // HTTP客户端实例,用于发起网络请求 - private DefaultHttpClient mHttpClient; - // 存储GET请求的实际URL - private String mGetUrl; - // 存储POST请求的实际URL - private String mPostUrl; - // 客户端版本号 - private long mClientVersion; - // 登录状态标志位,标识是否已登录 - private boolean mLoggedin; - // 最后登录时间戳 - private long mLastLoginTime; - // 行动(操作)ID,用于跟踪每个请求的唯一性 - private int mActionId; - // Google账户对象,当前正在使用的同步账户 - private Account mAccount; - // 用于缓存待更新的任务数据的JSONArray - private JSONArray mUpdateArray; - - // 私有构造函数,防止外部直接实例化 - private GTaskClient() { - // 初始化各个成员变量 - mHttpClient = null; - mGetUrl = GTASK_GET_URL; - mPostUrl = GTASK_POST_URL; - mClientVersion = -1; - mLoggedin = false; - mLastLoginTime = 0; - mActionId = 1; - mAccount = null; - mUpdateArray = null; - } - - // 静态工厂方法,获取GTaskClient的单例 - public static synchronized GTaskClient getInstance() { - // 如果实例尚未创建,则创建并返回一个新的GTaskClient实例 - if (mInstance == null) { - mInstance = new GTaskClient(); - } - return mInstance; - } - // 登录方法,尝试登录Google账户并验证GTask服务访问权限 - public boolean login(Activity activity) { - // we suppose that the cookie would expire after 5 minutes - // then we need to re-login - // 判断上次登录时间是否超过5分钟,若超过则需要重新登录 - final long interval = 1000 * 60 * 5; - if (mLastLoginTime + interval < System.currentTimeMillis()) { - mLoggedin = false; - } - // 判断是否切换了同步账户,如果切换则需重新登录 - // need to re-login after account switch - if (mLoggedin - && !TextUtils.equals(getSyncAccount().name, NotesPreferenceActivity - .getSyncAccountName(activity))) { - mLoggedin = false; - } - // 如果已登录则直接返回true - if (mLoggedin) { - Log.d(TAG, "already logged in"); - return true; - } - // 更新最后登录时间 - mLastLoginTime = System.currentTimeMillis(); - // 获取Google账户授权令牌 - String authToken = loginGoogleAccount(activity, false); - if (authToken == null) { - Log.e(TAG, "login google account failed"); - return false; - } - - // 对于非Gmail或Googlemail域的账户,尝试使用自定义域名登录GTask服务 - // login with custom domain if necessary - if (!(mAccount.name.toLowerCase().endsWith("gmail.com") || mAccount.name.toLowerCase() - .endsWith("googlemail.com"))) { - StringBuilder url = new StringBuilder(GTASK_URL).append("a/"); - int index = mAccount.name.indexOf('@') + 1; - String suffix = mAccount.name.substring(index); - url.append(suffix + "/"); - mGetUrl = url.toString() + "ig"; - mPostUrl = url.toString() + "r/ig"; - - if (tryToLoginGtask(activity, authToken)) { - mLoggedin = true; - } - } - - // 若未登录成功,则尝试使用官方URL登录GTask服务 - // try to login with google official url - if (!mLoggedin) { - mGetUrl = GTASK_GET_URL; - mPostUrl = GTASK_POST_URL; - if (!tryToLoginGtask(activity, authToken)) { - return false; - } - } - // 登录成功,设置登录状态为已登录 - mLoggedin = true; - return true; - } - - // 辅助方法:从Google账户获取授权令牌 - private String loginGoogleAccount(Activity activity, boolean invalidateToken) { - String authToken; - // 获取AccountManager实例,用于管理账户认证 - AccountManager accountManager = AccountManager.get(activity); - // 获取所有类型为"com.google"的账户 - Account[] accounts = accountManager.getAccountsByType("com.google"); - // 检查是否存在可用的Google账户 - if (accounts.length == 0) { - Log.e(TAG, "there is no available google account"); - return null; - } - // 获取用户在设置中选择的同步账户名 - String accountName = NotesPreferenceActivity.getSyncAccountName(activity); - Account account = null; - // 查找与设置中所选账户名相匹配的账户 - for (Account a : accounts) { - if (a.name.equals(accountName)) { - account = a; - break; - } - } - // 如果找到匹配的账户,则设置当前账户为找到的账户 - if (account != null) { - mAccount = account; - } - else { - Log.e(TAG, "unable to get an account with the same name in the settings"); - return null; - } - - // 从账户管理器中获取授权令牌 - // get the token now - AccountManagerFuture accountManagerFuture = accountManager.getAuthToken(account, - "goanna_mobile", null, activity, null, null); - try { - Bundle authTokenBundle = accountManagerFuture.getResult(); - authToken = authTokenBundle.getString(AccountManager.KEY_AUTHTOKEN); - // 如果需要刷新令牌,则先使当前令牌失效,然后重新获取 - if (invalidateToken) { - accountManager.invalidateAuthToken("com.google", authToken); - loginGoogleAccount(activity, false); - } - } - catch (Exception e) { - Log.e(TAG, "get auth token failed"); - authToken = null; - } - - return authToken; - } - - // 这个方法尝试登录GTask服务。首先使用提供的authToken进行登录,如果失败,则尝试刷新并重新登录。 - // 登录成功后返回true,否则返回false。 - private boolean tryToLoginGtask(Activity activity, String authToken) { - // 使用给定的authToken尝试登录GTask - if (!loginGtask(authToken)) { - // 如果登录失败(可能是authToken过期),则尝试通过Google账号刷新并获取新的authToken - // maybe the auth token is out of date, now let's invalidate the - // token and try again - authToken = loginGoogleAccount(activity, true); - // 如果刷新并获取新的authToken失败 - if (authToken == null) { - Log.e(TAG, "login google account failed"); - return false;// 返回登录失败 - } - - // 使用新的authToken再次尝试登录GTask - if (!loginGtask(authToken)) { - Log.e(TAG, "login gtask failed");// 记录错误日志 - return false;// 返回登录失败 - } - } - // 登录成功 - return true; - } - - // 这个私有方法用于执行实际的GTask登录过程,根据提供的authToken发送HTTP请求,并检查响应中的认证Cookie是否存在。 - private boolean loginGtask(String authToken) { - // 设置HTTP连接和读取超时时间 - int timeoutConnection = 10000; - int timeoutSocket = 15000; - HttpParams httpParameters = new BasicHttpParams(); - HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection); - HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket); - mHttpClient = new DefaultHttpClient(httpParameters); // 创建一个HTTP客户端实例 - // 创建并设置Cookie存储对象 - BasicCookieStore localBasicCookieStore = new BasicCookieStore(); - mHttpClient.setCookieStore(localBasicCookieStore); - // 设置HTTP协议参数 - HttpProtocolParams.setUseExpectContinue(mHttpClient.getParams(), false); - - // login gtask - try { - // 构建登录URL并发起GET请求 - String loginUrl = mGetUrl + "?auth=" + authToken; - HttpGet httpGet = new HttpGet(loginUrl); - // 执行HTTP请求并获取响应 - HttpResponse response = null; - response = mHttpClient.execute(httpGet); - - // 检查响应中是否包含认证Cookie - // get the cookie now - List cookies = mHttpClient.getCookieStore().getCookies(); - boolean hasAuthCookie = false; - for (Cookie cookie : cookies) { - if (cookie.getName().contains("GTL")) { - hasAuthCookie = true;// 如果找到名为"GTL"的Cookie,则表示存在认证Cookie - } - } - if (!hasAuthCookie) { - Log.w(TAG, "it seems that there is no auth cookie");// 若未发现认证Cookie则记录警告日志 - } - - // 从响应内容中解析客户端版本信息 - // get the client version - String resString = getResponseContent(response.getEntity()); - String jsBegin = "_setup("; - String jsEnd = ")}"; - int begin = resString.indexOf(jsBegin); - int end = resString.lastIndexOf(jsEnd); - String jsString = null; - if (begin != -1 && end != -1 && begin < end) { - jsString = resString.substring(begin + jsBegin.length(), end); - } - JSONObject js = new JSONObject(jsString); - mClientVersion = js.getLong("v");// 获取并保存客户端版本号 - } - catch (JSONException e) { - Log.e(TAG, e.toString());// 记录JSON解析异常的日志 - e.printStackTrace(); - return false;// JSON解析出错,返回登录失败 - } - catch (Exception e) {// 捕获所有其他可能的异常 - // simply catch all exceptions - Log.e(TAG, "httpget gtask_url failed");// 记录HTTP GET请求失败的日志 - return false;// HTTP请求出错,返回登录失败 - } - // 如果执行到此处,说明登录过程顺利完成 - return true; - } - // 这是一个辅助方法,用于生成并返回唯一的动作ID。 - private int getActionId() { - return mActionId++;// 自增并返回mActionId的当前值 - } - - // 这个私有方法用于创建并配置一个HttpPost对象,指定目标URL和相关HTTP头部信息。 - private HttpPost createHttpPost() { - // 创建一个新的HttpPost对象指向预定义的POST请求URL - HttpPost httpPost = new HttpPost(mPostUrl); - // 设置HTTP头部Content-Type字段,表明发送的数据格式为application/x-www-form-urlencoded,并采用UTF-8编码 - httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8"); - // 添加自定义HTTP头部信息,这里设定了一个名为"AT"的字段,其值为"1" - httpPost.setHeader("AT", "1"); - // 返回已配置好的HttpPost对象 - return httpPost; - } - // 这个私有方法用于从HttpEntity中获取并解析响应内容,支持gzip和deflate压缩格式。 - private String getResponseContent(HttpEntity entity) throws IOException { - // 获取实体的Content-Encoding属性,即数据的压缩编码方式 - String contentEncoding = null; - if (entity.getContentEncoding() != null) { - contentEncoding = entity.getContentEncoding().getValue(); - Log.d(TAG, "encoding: " + contentEncoding);// 输出编码方式至日志 - } - // 获取实体内容的输入流 - InputStream input = entity.getContent(); - // 根据Content-Encoding选择合适的解压方式 - if (contentEncoding != null && contentEncoding.equalsIgnoreCase("gzip")) { - // 如果数据被gzip压缩,使用GZIPInputStream解压 - input = new GZIPInputStream(entity.getContent()); - } - else if (contentEncoding != null && contentEncoding.equalsIgnoreCase("deflate")) { - // 如果数据被deflate压缩,使用InflaterInputStream解压,注意这里的Inflater构造函数传入true启用ZLIB RFC1950格式 - Inflater inflater = new Inflater(true); - input = new InflaterInputStream(entity.getContent(), inflater); - } - // 使用Reader和BufferedReader逐行读取并拼接响应内容 - try { - InputStreamReader isr = new InputStreamReader(input);// 使用UTF-8编码创建StreamReader - BufferedReader br = new BufferedReader(isr); - StringBuilder sb = new StringBuilder(); - - // 循环读取每一行内容直到结束 - while (true) { - String buff = br.readLine(); - if (buff == null) { - // 当读取到最后一行(null)时,返回累积的字符串内容 - return sb.toString(); - } - sb = sb.append(buff);// 将读取到的一行追加到StringBuilder中 - } - } - finally { - // 在所有操作结束后确保关闭输入流 - input.close(); - } - } - // 这个私有方法用于执行一个POST请求并将JSON对象作为请求体发送。若发生网络错误或无法将响应转换为JSON对象,将抛出异常 - private JSONObject postRequest(JSONObject js) throws NetworkFailureException { - // 验证用户是否已登录,未登录则抛出自定义异常 - if (!mLoggedin) { - Log.e(TAG, "please login first"); - throw new ActionFailureException("not logged in"); - } - // 创建并初始化HttpPost对象 - HttpPost httpPost = createHttpPost(); - try { - // 创建一个包含请求参数的链表,参数名为'r',值为传入的JSON对象的字符串形式 - LinkedList list = new LinkedList(); - list.add(new BasicNameValuePair("r", js.toString())); - // 创建一个UrlEncodedFormEntity对象,编码格式为UTF-8,用于封装请求参数 - UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list, "UTF-8"); - httpPost.setEntity(entity); - - // execute the post - // 执行POST请求 - HttpResponse response = mHttpClient.execute(httpPost); - // 从响应中获取内容并转换为JSON对象 - String jsString = getResponseContent(response.getEntity()); - return new JSONObject(jsString); - - } - catch (ClientProtocolException e) { - // 记录并抛出网络协议错误异常 - Log.e(TAG, e.toString()); - e.printStackTrace(); - throw new NetworkFailureException("postRequest failed"); - } - catch (IOException e) { - // 记录并抛出JSON解析错误异常 - Log.e(TAG, e.toString()); - e.printStackTrace(); - throw new NetworkFailureException("postRequest failed"); - } - catch (JSONException e) { - // 记录并抛出任何未知错误异常 - Log.e(TAG, e.toString()); - e.printStackTrace(); - throw new ActionFailureException("unable to convert response content to jsonobject"); - } - catch (Exception e) { - Log.e(TAG, e.toString()); - e.printStackTrace(); - throw new ActionFailureException("error occurs when posting request"); - } - } - // 公共方法,用于创建一个新的任务 - public void createTask(Task task) throws NetworkFailureException { - // 提交更新前的操作 - commitUpdate(); - try { - // 创建一个用于发送的JSON对象 - JSONObject jsPost = new JSONObject(); - JSONArray actionList = new JSONArray();// 创建一个JSONArray存放动作列表 - - // action_list - // 将新任务的动作信息添加到action_list中 - actionList.put(task.getCreateAction(getActionId())); - jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, actionList); - - // 添加客户端版本信息到JSON对象 - // client_version - jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion); - - // 调用postRequest方法执行POST请求 - // post - JSONObject jsResponse = postRequest(jsPost); - // 从响应的JSON对象中提取结果数组的第一个元素 - JSONObject jsResult = (JSONObject)jsResponse.getJSONArray( - GTaskStringUtils.GTASK_JSON_RESULTS).get(0); - // 从响应结果中获取新创建的任务ID,并将其设置到task对象中 - task.setGid(jsResult.getString(GTaskStringUtils.GTASK_JSON_NEW_ID)); - - } - catch (JSONException e) { - // 记录并抛出JSON处理异常 - Log.e(TAG, e.toString()); - e.printStackTrace(); - throw new ActionFailureException("create task: handing jsonobject failed"); - } - } - - // 此公共方法用于创建一个新的任务列表,将任务列表的创建动作添加到请求体中并提交至服务器 - public void createTaskList(TaskList tasklist) throws NetworkFailureException { - // 在更新数据库前进行必要的提交操作 - commitUpdate(); - try { - // 创建用于发送请求的JSON对象 - JSONObject jsPost = new JSONObject(); - JSONArray actionList = new JSONArray();// 创建一个JSONArray来存储动作列表 - - - // 将新建任务列表的动作信息加入到动作列表中 - // action_list - actionList.put(tasklist.getCreateAction(getActionId())); - jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, actionList);// 将动作列表放入JSON对象 - // 添加客户端版本信息到JSON对象 - // client version - jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion); - - // 发送POST请求 - // post - JSONObject jsResponse = postRequest(jsPost); - // 从响应的JSON对象中获取结果数组的第一个元素 - JSONObject jsResult = (JSONObject)jsResponse.getJSONArray( - GTaskStringUtils.GTASK_JSON_RESULTS).get(0); - // 从响应结果中取出新创建的任务列表ID,并设置到tasklist对象中 - tasklist.setGid(jsResult.getString(GTaskStringUtils.GTASK_JSON_NEW_ID)); - - } - catch (JSONException e) { - // 处理JSON异常并抛出操作失败异常 - Log.e(TAG, e.toString()); - e.printStackTrace(); - throw new ActionFailureException("create tasklist: handing jsonobject failed"); - } - } - - // 此公共方法用于提交当前待更新的动作列表至服务器 - public void commitUpdate() throws NetworkFailureException { - // 如果有待提交的更新数组(动作列表) - if (mUpdateArray != null) { - try { - JSONObject jsPost = new JSONObject();// 创建用于发送请求的JSON对象 - - // action_list - jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, mUpdateArray);// 将待提交的动作列表放入JSON对象 - - // client_version - jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion); // 添加客户端版本信息到JSON对象 - - postRequest(jsPost);// 发送POST请求 - mUpdateArray = null; // 清空已提交的更新数组 - } - catch (JSONException e) {// 处理JSON异常并抛出操作失败异常 - Log.e(TAG, e.toString()); - e.printStackTrace(); - throw new ActionFailureException("commit update: handing jsonobject failed"); - } - } - } - - public void addUpdateNode(Node node) throws NetworkFailureException {// 此公共方法用于向待更新的动作列表中添加一个节点的更新动作 - if (node != null) {// 如果节点非空 - // 避免一次性更新过多导致错误,限制最多允许10个更新项 - // too many update items may result in an error - // set max to 10 items - if (mUpdateArray != null && mUpdateArray.length() > 10) { - commitUpdate();// 超过10个则先提交现有的更新 - } - - if (mUpdateArray == null) - mUpdateArray = new JSONArray(); // 如果待更新数组为空,则创建一个新的JSONArray - mUpdateArray.put(node.getUpdateAction(getActionId()));// 将节点的更新动作添加到待更新数组中 - } - } - - public void moveTask(Task task, TaskList preParent, TaskList curParent)// 此方法用于移动一个任务到另一个任务列表中,包括在同一任务列表内调整位置和跨任务列表移动 - throws NetworkFailureException{ - commitUpdate();// 在移动任务之前先提交任何待更新的操作 - try {// 创建用于发送请求的JSON对象 - JSONObject jsPost = new JSONObject(); - JSONArray actionList = new JSONArray(); - JSONObject action = new JSONObject(); - - // action_list - // 构建动作列表 - action.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE, - GTaskStringUtils.GTASK_JSON_ACTION_TYPE_MOVE);// 动作类型:移动 - action.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, getActionId());// 动作ID - action.put(GTaskStringUtils.GTASK_JSON_ID, task.getGid());// 目标任务ID - if (preParent == curParent && task.getPriorSibling() != null) {// 如果当前任务列表与原父任务列表相同,并且该任务不是第一个子任务,则添加前置兄弟任务ID - // put prioring_sibing_id only if moving within the tasklist and - // it is not the first one - action.put(GTaskStringUtils.GTASK_JSON_PRIOR_SIBLING_ID, task.getPriorSibling()); - } - action.put(GTaskStringUtils.GTASK_JSON_SOURCE_LIST, preParent.getGid());// 添加原父任务列表ID - action.put(GTaskStringUtils.GTASK_JSON_DEST_PARENT, curParent.getGid());// 添加目标父任务列表ID - - if (preParent != curParent) {// 如果任务要从一个任务列表移动到另一个任务列表,则添加目标任务列表ID - // put the dest_list only if moving between tasklists - action.put(GTaskStringUtils.GTASK_JSON_DEST_LIST, curParent.getGid()); - } - actionList.put(action);// 将移动动作添加到动作列表中 - jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, actionList); - - // client_version - // 添加客户端版本信息 - jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion); - // 发送POST请求 - postRequest(jsPost); - - } - catch (JSONException e) { - Log.e(TAG, e.toString()); - e.printStackTrace(); - throw new ActionFailureException("move task: handing jsonobject failed"); - } - } - - // 此方法用于删除指定的节点(任务或任务列表) - public void deleteNode(Node node) throws NetworkFailureException { - commitUpdate();// 提交任何待更新的操作 - try {// 创建用于发送请求的JSON对象 - JSONObject jsPost = new JSONObject(); - JSONArray actionList = new JSONArray(); - - // action_list - node.setDeleted(true);// 将节点标记为已删除,并将其更新动作添加到动作列表中 - actionList.put(node.getUpdateAction(getActionId())); - jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, actionList); - - // client_version - jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion);// 添加客户端版本信息 - - postRequest(jsPost);// 发送POST请求 - mUpdateArray = null;// 清空已提交的更新数组 - } - catch (JSONException e) { - Log.e(TAG, e.toString()); - e.printStackTrace(); - throw new ActionFailureException("delete node: handing jsonobject failed"); - } - } - - public JSONArray getTaskLists() throws NetworkFailureException {// 此方法用于获取所有的任务列表 - if (!mLoggedin) {// 检查用户是否已登录,未登录则抛出异常 - Log.e(TAG, "please login first"); - throw new ActionFailureException("not logged in"); - } - - try {// 创建并执行HttpGet请求 - HttpGet httpGet = new HttpGet(mGetUrl); - HttpResponse response = null; - response = mHttpClient.execute(httpGet); - - // get the task list - // 从响应内容中解析出任务列表数据 - String resString = getResponseContent(response.getEntity()); - String jsBegin = "_setup("; - String jsEnd = ")}"; - int begin = resString.indexOf(jsBegin); - int end = resString.lastIndexOf(jsEnd); - String jsString = null; - if (begin != -1 && end != -1 && begin < end) { - jsString = resString.substring(begin + jsBegin.length(), end); - } - // 将解析出的JSON字符串转换为JSONObject,并从中提取任务列表数据 - JSONObject js = new JSONObject(jsString); - return js.getJSONObject("t").getJSONArray(GTaskStringUtils.GTASK_JSON_LISTS); - } - catch (ClientProtocolException e) { - Log.e(TAG, e.toString()); - e.printStackTrace(); - throw new NetworkFailureException("gettasklists: httpget failed"); - } - catch (IOException e) { - Log.e(TAG, e.toString()); - e.printStackTrace(); - throw new NetworkFailureException("gettasklists: httpget failed"); - } - catch (JSONException e) { - Log.e(TAG, e.toString()); - e.printStackTrace(); - throw new ActionFailureException("get task lists: handing jasonobject failed"); - } - } - - // 此方法用于获取指定任务列表ID下的所有任务 - public JSONArray getTaskList(String listGid) throws NetworkFailureException { - // 在获取任务列表前先提交任何待更新的操作 - commitUpdate(); - try {// 创建用于发送请求的JSON对象及动作列表 - JSONObject jsPost = new JSONObject(); - JSONArray actionList = new JSONArray(); - JSONObject action = new JSONObject(); - - // action_list - // 构建动作详情,动作类型为获取全部任务 - action.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE, - GTaskStringUtils.GTASK_JSON_ACTION_TYPE_GETALL); - action.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, getActionId());// 设置动作ID - action.put(GTaskStringUtils.GTASK_JSON_LIST_ID, listGid);// 设置要获取的任务列表ID - action.put(GTaskStringUtils.GTASK_JSON_GET_DELETED, false);// 不获取已删除的任务 - actionList.put(action); - jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, actionList); // 将动作列表放入JSON请求体 - - // client_version - // 添加客户端版本信息到JSON请求体 - jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion); - - // 发送POST请求并获取响应 - JSONObject jsResponse = postRequest(jsPost); - // 从响应的JSON对象中提取任务列表(tasks)并返回 - return jsResponse.getJSONArray(GTaskStringUtils.GTASK_JSON_TASKS); - } - catch (JSONException e) { - Log.e(TAG, e.toString());// 记录并打印异常信息 - e.printStackTrace(); - throw new ActionFailureException("get task list: handing jsonobject failed");// 抛出操作失败异常 - } - } - - public Account getSyncAccount() {// 此方法用于获取同步账户对象 - return mAccount;// 直接返回当前持有的同步账户对象 - } - - public void resetUpdateArray() {// 此方法用于重置待更新动作数组 - mUpdateArray = null;// 将待更新动作数组设为null,表示清空所有待更新项 - } -} diff --git a/src/gtask/remote/GTaskManager.java b/src/gtask/remote/GTaskManager.java deleted file mode 100644 index 07196fd..0000000 --- a/src/gtask/remote/GTaskManager.java +++ /dev/null @@ -1,948 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.gtask.remote; - -import android.app.Activity; -import android.content.ContentResolver; -import android.content.ContentUris; -import android.content.ContentValues; -import android.content.Context; -import android.database.Cursor; -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.NoteColumns; -import net.micode.notes.gtask.data.MetaData; -import net.micode.notes.gtask.data.Node; -import net.micode.notes.gtask.data.SqlNote; -import net.micode.notes.gtask.data.Task; -import net.micode.notes.gtask.data.TaskList; -import net.micode.notes.gtask.exception.ActionFailureException; -import net.micode.notes.gtask.exception.NetworkFailureException; -import net.micode.notes.tool.DataUtils; -import net.micode.notes.tool.GTaskStringUtils; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Map; - - -//GTaskManager类,用于管理小米便签与Google Tasks之间的同步逻辑 -public class GTaskManager { - - // 类日志标签 - private static final String TAG = GTaskManager.class.getSimpleName(); - - // 定义同步状态常量 - public static final int STATE_SUCCESS = 0; // 成功 - public static final int STATE_NETWORK_ERROR = 1; // 网络错误 - public static final int STATE_INTERNAL_ERROR = 2; // 内部错误 - public static final int STATE_SYNC_IN_PROGRESS = 3; // 同步进行中 - public static final int STATE_SYNC_CANCELLED = 4; // 同步已取消 - - // 单例模式实现 - private static GTaskManager mInstance = null; - - private Activity mActivity; // 活动对象 - - private Context mContext; // 上下文对象 - - private ContentResolver mContentResolver; // 内容解析器 - - private boolean mSyncing; // 是否正在进行同步 - - private boolean mCancelled; // 同步是否被取消 - - private HashMap mGTaskListHashMap; // Google任务列表哈希映射 - - private HashMap mGTaskHashMap; // Google任务哈希映射 - - private HashMap mMetaHashMap; // 元数据哈希映射 - - private TaskList mMetaList; // 元数据列表 - - private HashSet mLocalDeleteIdMap; // 本地删除ID集合 - - private HashMap mGidToNid; // Google ID到本地ID的映射 - - private HashMap mNidToGid; // 本地ID到Google ID的映射 - - // 私有构造函数,初始化各变量 - private GTaskManager() { - mSyncing = false; - mCancelled = false; - mGTaskListHashMap = new HashMap(); - mGTaskHashMap = new HashMap(); - mMetaHashMap = new HashMap(); - mMetaList = null; - mLocalDeleteIdMap = new HashSet(); - mGidToNid = new HashMap(); - mNidToGid = new HashMap(); - } // 初始化各个哈希表和集合 - - // 获取唯一实例 - public static synchronized GTaskManager getInstance() { - if (mInstance == null) { - mInstance = new GTaskManager(); - } - return mInstance; - } - - // 设置活动上下文 - public synchronized void setActivityContext(Activity activity) { - // 用于获取授权令牌 - mActivity = activity; - } - - // 同步方法 - public int sync(Context context, GTaskASyncTask asyncTask) { - if (mSyncing) { - Log.d(TAG, "Sync is in progress"); - return STATE_SYNC_IN_PROGRESS; - } - mContext = context; - mContentResolver = mContext.getContentResolver(); - mSyncing = true; - mCancelled = false; - mGTaskListHashMap.clear(); - mGTaskHashMap.clear(); - mMetaHashMap.clear(); - mLocalDeleteIdMap.clear(); - mGidToNid.clear(); - mNidToGid.clear();// 清除所有临时存储的数据结构 - - try { - GTaskClient client = GTaskClient.getInstance(); - client.resetUpdateArray(); - - // 登录Google任务 - if (!mCancelled) { - if (!client.login(mActivity)) { - throw new NetworkFailureException("login google task failed"); - } - } - - // 从Google获取任务列表 - asyncTask.publishProgess(mContext.getString(R.string.sync_progress_init_list)); - initGTaskList(); - - // 执行内容同步工作 - asyncTask.publishProgess(mContext.getString(R.string.sync_progress_syncing)); - syncContent(); - } catch (NetworkFailureException e) { - Log.e(TAG, e.toString()); - return STATE_NETWORK_ERROR; - } catch (ActionFailureException e) { - Log.e(TAG, e.toString()); - return STATE_INTERNAL_ERROR; - } catch (Exception e) { - Log.e(TAG, e.toString()); - e.printStackTrace(); - return STATE_INTERNAL_ERROR; - } finally { - mGTaskListHashMap.clear(); - mGTaskHashMap.clear(); - mMetaHashMap.clear(); - mLocalDeleteIdMap.clear(); - mGidToNid.clear(); - mNidToGid.clear(); - mSyncing = false; - }// 清除所有临时存储的数据结构 - - return mCancelled ? STATE_SYNC_CANCELLED : STATE_SUCCESS; // 返回最终同步状态 - } - - - private void initGTaskList() throws NetworkFailureException { - // 如果同步已取消则直接返回 - if (mCancelled) - return; - - // 获取 GTaskClient 实例 - GTaskClient client = GTaskClient.getInstance(); - try { - // 获取任务列表的 JSON 数组 - JSONArray jsTaskLists = client.getTaskLists(); - - // 初始化元数据列表 - mMetaList = null; - for (int i = 0; i < jsTaskLists.length(); i++) { - // 遍历任务列表数组中的每一个元素 - JSONObject object = jsTaskLists.getJSONObject(i); - String gid = object.getString(GTaskStringUtils.GTASK_JSON_ID); - String name = object.getString(GTaskStringUtils.GTASK_JSON_NAME); - - // 如果当前任务列表是元数据文件夹 - if (name.equals(GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_META)) { - // 创建新的元数据列表 - mMetaList = new TaskList(); - mMetaList.setContentByRemoteJSON(object); - - // 加载元数据 - JSONArray jsMetas = client.getTaskList(gid); - for (int j = 0; j < jsMetas.length(); j++) { - // 遍历元数据列表数组中的每一个元素 - object = (JSONObject) jsMetas.getJSONObject(j); - MetaData metaData = new MetaData(); - metaData.setContentByRemoteJSON(object); - - // 如果元数据值得保存 - if (metaData.isWorthSaving()) { - // 添加元数据到元数据列表 - mMetaList.addChildTask(metaData); - if (metaData.getGid() != null) { - // 将元数据与相关的元数据 ID 映射存储 - mMetaHashMap.put(metaData.getRelatedGid(), metaData); - } - } - } - } - } - - // 如果元数据列表为空,则创建一个新的元数据列表 - if (mMetaList == null) { - mMetaList = new TaskList(); - mMetaList.setName(GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_META); - GTaskClient.getInstance().createTaskList(mMetaList); - } - - // 初始化任务列表 - for (int i = 0; i < jsTaskLists.length(); i++) { - // 遍历任务列表数组中的每一个元素 - JSONObject object = jsTaskLists.getJSONObject(i); - String gid = object.getString(GTaskStringUtils.GTASK_JSON_ID); - String name = object.getString(GTaskStringUtils.GTASK_JSON_NAME); - - // 如果任务列表以 MIUI_FOLDER_PREFIX 开头且不是元数据文件夹 - if (name.startsWith(GTaskStringUtils.MIUI_FOLDER_PREFFIX) - && !name.equals(GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_META)) { - // 创建新的任务列表对象 - TaskList tasklist = new TaskList(); - tasklist.setContentByRemoteJSON(object); - mGTaskListHashMap.put(gid, tasklist); - mGTaskHashMap.put(gid, tasklist); - - // 加载任务 - JSONArray jsTasks = client.getTaskList(gid); - for (int j = 0; j < jsTasks.length(); j++) { - // 遍历任务数组中的每一个元素 - object = (JSONObject) jsTasks.getJSONObject(j); - gid = object.getString(GTaskStringUtils.GTASK_JSON_ID); - Task task = new Task(); - task.setContentByRemoteJSON(object); - - // 如果任务值得保存 - if (task.isWorthSaving()) { - // 设置任务的元数据信息 - task.setMetaInfo(mMetaHashMap.get(gid)); - // 添加任务到任务列表 - tasklist.addChildTask(task); - mGTaskHashMap.put(gid, task); - } - } - } - } - } catch (JSONException e) { - Log.e(TAG, e.toString()); - e.printStackTrace(); - throw new ActionFailureException("initGTaskList: handing JSONObject failed"); - } - } - - private void syncContent() throws NetworkFailureException { - int syncType; // 同步类型 - Cursor c = null; // 游标对象初始化为null - String gid; // Google Task ID - Node node; // 节点对象 - - mLocalDeleteIdMap.clear(); // 清空本地删除 ID 映射表 - - if (mCancelled) { // 如果同步已取消,则直接返回 - return; - } - - // 处理本地已删除的便签 - try { - c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE, - "(type<>? AND parent_id=?)", new String[] { - String.valueOf(Notes.TYPE_SYSTEM), String.valueOf(Notes.ID_TRASH_FOLER) - }, null); - if (c != null) { - while (c.moveToNext()) { - gid = c.getString(SqlNote.GTASK_ID_COLUMN); - node = mGTaskHashMap.get(gid); - if (node != null) { - mGTaskHashMap.remove(gid); - doContentSync(Node.SYNC_ACTION_DEL_REMOTE, node, c); // 执行内容同步操作:删除远程节点 - } - - mLocalDeleteIdMap.add(c.getLong(SqlNote.ID_COLUMN)); // 将本地删除 ID 添加到映射表中 - } - } else { - Log.w(TAG, "failed to query trash folder"); - } - } finally { - if (c != null) { - c.close(); // 关闭游标 - c = null; - } - } - - // 先同步文件夹 - syncFolder(); - - // 处理数据库中存在的便签 - try { - c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE, - "(type=? AND parent_id<>?)", new String[] { - String.valueOf(Notes.TYPE_NOTE), String.valueOf(Notes.ID_TRASH_FOLER) - }, NoteColumns.TYPE + " DESC"); - if (c != null) { - while (c.moveToNext()) { - gid = c.getString(SqlNote.GTASK_ID_COLUMN); - node = mGTaskHashMap.get(gid); - if (node != null) { - mGTaskHashMap.remove(gid); - mGidToNid.put(gid, c.getLong(SqlNote.ID_COLUMN)); - mNidToGid.put(c.getLong(SqlNote.ID_COLUMN), gid); - syncType = node.getSyncAction(c); // 获取同步操作类型 - } else { - if (c.getString(SqlNote.GTASK_ID_COLUMN).trim().length() == 0) { - // 本地添加 - syncType = Node.SYNC_ACTION_ADD_REMOTE; - } else { - // 远程删除 - syncType = Node.SYNC_ACTION_DEL_LOCAL; - } - } - doContentSync(syncType, node, c); // 执行内容同步操作 - } - } else { - Log.w(TAG, "failed to query existing note in database"); - } - - } finally { - if (c != null) { - c.close(); // 关闭游标 - c = null; - } - } - - // 处理剩余的项 - Iterator> iter = mGTaskHashMap.entrySet().iterator(); - while (iter.hasNext()) { - Map.Entry entry = iter.next(); - node = entry.getValue(); - doContentSync(Node.SYNC_ACTION_ADD_LOCAL, node, null); // 执行内容同步操作:添加本地节点 - } - - // 可能会被另一个线程设置mCancelled,所以我们需要逐个检查 - // 清除本地删除表 - if (!mCancelled) { - if (!DataUtils.batchDeleteNotes(mContentResolver, mLocalDeleteIdMap)) { - throw new ActionFailureException("failed to batch-delete local deleted notes"); - } - } - - // 刷新本地同步 ID - if (!mCancelled) { - GTaskClient.getInstance().commitUpdate(); - refreshLocalSyncId(); - } - } - - - private void syncFolder() throws NetworkFailureException { - Cursor c = null; // 定义游标对象 - String gid; // Google 任务 ID - Node node; // 节点对象 - int syncType; // 同步类型 - - if (mCancelled) { // 如果已取消同步,则直接返回 - return; - } - - // 对根文件夹进行处理 - try { - c = mContentResolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, - Notes.ID_ROOT_FOLDER), SqlNote.PROJECTION_NOTE, null, null, null); - if (c != null) { - c.moveToNext(); - gid = c.getString(SqlNote.GTASK_ID_COLUMN); - node = mGTaskHashMap.get(gid); - if (node != null) { - mGTaskHashMap.remove(gid); - mGidToNid.put(gid, (long) Notes.ID_ROOT_FOLDER); - mNidToGid.put((long) Notes.ID_ROOT_FOLDER, gid); - // 对系统文件夹,仅在必要时更新远程名称 - if (!node.getName().equals( - GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_DEFAULT)) - doContentSync(Node.SYNC_ACTION_UPDATE_REMOTE, node, c);// 执行内容同步操作:更新远程节点 - } else { - doContentSync(Node.SYNC_ACTION_ADD_REMOTE, node, c);// 执行内容同步操作:添加远程节点 - } - } else { - Log.w(TAG, "failed to query root folder"); - } - } finally { - if (c != null) { - c.close();// 关闭游标 - c = null; - } - } - - // 对通话便签文件夹进行处理 - try { - c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE, "(_id=?)", - new String[] { - String.valueOf(Notes.ID_CALL_RECORD_FOLDER) - }, null); - if (c != null) { - if (c.moveToNext()) { - gid = c.getString(SqlNote.GTASK_ID_COLUMN); - node = mGTaskHashMap.get(gid); - if (node != null) { - mGTaskHashMap.remove(gid); - mGidToNid.put(gid, (long) Notes.ID_CALL_RECORD_FOLDER); - mNidToGid.put((long) Notes.ID_CALL_RECORD_FOLDER, gid); - // for system folder, only update remote name if - // 对系统文件夹,仅在必要时更新远程名称 - if (!node.getName().equals( - GTaskStringUtils.MIUI_FOLDER_PREFFIX - + GTaskStringUtils.FOLDER_CALL_NOTE)) - doContentSync(Node.SYNC_ACTION_UPDATE_REMOTE, node, c);// 执行内容同步操作:更新远程节点 - } else { - doContentSync(Node.SYNC_ACTION_ADD_REMOTE, node, c);// 执行内容同步操作:添加远程节点 - } - } - } else { - Log.w(TAG, "failed to query call note folder"); - } - } finally { - if (c != null) { - c.close(); - c = null; - } - } - - // 对本地存在的文件夹进行处理 - try { - c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE, - "(type=? AND parent_id<>?)", new String[] { - String.valueOf(Notes.TYPE_FOLDER), String.valueOf(Notes.ID_TRASH_FOLER) - }, NoteColumns.TYPE + " DESC"); - if (c != null) { - while (c.moveToNext()) { - gid = c.getString(SqlNote.GTASK_ID_COLUMN); - node = mGTaskHashMap.get(gid); - if (node != null) { - mGTaskHashMap.remove(gid); - mGidToNid.put(gid, c.getLong(SqlNote.ID_COLUMN)); - mNidToGid.put(c.getLong(SqlNote.ID_COLUMN), gid); - syncType = node.getSyncAction(c);// 获取同步操作类型 - } else { - if (c.getString(SqlNote.GTASK_ID_COLUMN).trim().length() == 0) { - // local add - syncType = Node.SYNC_ACTION_ADD_REMOTE; // 本地添加 - } else { - // remote delete - syncType = Node.SYNC_ACTION_DEL_LOCAL;// 远程删除 - } - } - doContentSync(syncType, node, c);// 执行内容同步操作 - } - } else { - Log.w(TAG, "failed to query existing folder"); - } - } finally { - if (c != null) { - c.close(); - c = null; - } - } - - // 遍历远程任务列表映射(mGTaskListHashMap),处理每个映射项 - Iterator> iter = mGTaskListHashMap.entrySet().iterator(); - while (iter.hasNext()) { - // 获取当前映射项 - Map.Entry entry = iter.next(); - // 提取映射项的键(Google 任务 ID)与值(TaskList 对象) - gid = entry.getKey(); - node = entry.getValue(); - // 检查本地任务哈希表(mGTaskHashMap)中是否存在该 Google 任务 ID - if (mGTaskHashMap.containsKey(gid)) { - // 若存在,从本地任务哈希表中移除该 ID 对应的任务 - mGTaskHashMap.remove(gid); - // 执行内容同步操作,将远程任务添加到本地 - doContentSync(Node.SYNC_ACTION_ADD_LOCAL, node, null); - } - } - // 如果同步过程未被取消 - if (!mCancelled) { - // 提交更新至 Google 任务服务端 - GTaskClient.getInstance().commitUpdate(); - } - } - private void doContentSync(int syncType, Node node, Cursor c) throws NetworkFailureException { - if (mCancelled) { - // 如果同步过程已取消,直接返回 - return; - } - - MetaData meta; - - // 根据同步类型执行相应操作 - switch (syncType) { - case Node.SYNC_ACTION_ADD_LOCAL: - // 将远程任务添加到本地 - addLocalNode(node); - break; - case Node.SYNC_ACTION_ADD_REMOTE: - // 将本地任务添加到远程 - addRemoteNode(node, c); - break; - case Node.SYNC_ACTION_DEL_LOCAL: - // 获取待删除任务的元数据(MetaData) - meta = mMetaHashMap.get(c.getString(SqlNote.GTASK_ID_COLUMN)); - - // 如果元数据存在,调用 Google 任务客户端删除该任务 - if (meta != null) { - GTaskClient.getInstance().deleteNode(meta); - } - - // 将待删除的本地任务 ID 添加到本地删除 ID 集合 - mLocalDeleteIdMap.add(c.getLong(SqlNote.ID_COLUMN)); - break; - case Node.SYNC_ACTION_DEL_REMOTE: - // 获取待删除任务的元数据(MetaData) - meta = mMetaHashMap.get(node.getGid()); - - // 如果元数据存在,调用 Google 任务客户端删除该任务 - if (meta != null) { - GTaskClient.getInstance().deleteNode(meta); - } - - // 调用 Google 任务客户端删除指定任务 - GTaskClient.getInstance().deleteNode(node); - break; - case Node.SYNC_ACTION_UPDATE_LOCAL: - // 更新本地任务 - updateLocalNode(node, c); - break; - case Node.SYNC_ACTION_UPDATE_REMOTE: - // 更新远程任务 - updateRemoteNode(node, c); - break; - case Node.SYNC_ACTION_UPDATE_CONFLICT: - // 处理冲突:目前仅使用本地更新简单处理 - updateRemoteNode(node, c); - break; - case Node.SYNC_ACTION_NONE: - // 无需执行任何操作 - break; - case Node.SYNC_ACTION_ERROR: - default: - // 抛出异常,表示未知的同步操作类型 - throw new ActionFailureException("unkown sync action type"); - } - } - - private void addLocalNode(Node node) throws NetworkFailureException { - if (mCancelled) { - // 如果同步过程已取消,直接返回 - return; - } - - SqlNote sqlNote; - - // 处理不同类型的节点(TaskList 或 Task) - if (node instanceof TaskList) { - // 节点为 TaskList 类型 - if (node.getName().equals(GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_DEFAULT)) { - // 根文件夹 - sqlNote = new SqlNote(mContext, Notes.ID_ROOT_FOLDER); - } else if (node.getName().equals(GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_CALL_NOTE)) { - // 通话便签文件夹 - sqlNote = new SqlNote(mContext, Notes.ID_CALL_RECORD_FOLDER); - } else { - // 其他自定义文件夹 - sqlNote = new SqlNote(mContext); - sqlNote.setContent(node.getLocalJSONFromContent()); - sqlNote.setParentId(Notes.ID_ROOT_FOLDER); - } - } else { - // 节点为 Task 类型 - sqlNote = new SqlNote(mContext); - - // 获取节点的本地 JSON 表示,并处理 ID 冲突 - JSONObject js = node.getLocalJSONFromContent(); - try { - if (js.has(GTaskStringUtils.META_HEAD_NOTE)) { - JSONObject note = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE); - if (note.has(NoteColumns.ID)) { - long id = note.getLong(NoteColumns.ID); - if (DataUtils.existInNoteDatabase(mContentResolver, id)) { - // 当前 ID 已存在,需创建新 ID - note.remove(NoteColumns.ID); - } - } - } - - if (js.has(GTaskStringUtils.META_HEAD_DATA)) { - JSONArray dataArray = js.getJSONArray(GTaskStringUtils.META_HEAD_DATA); - for (int i = 0; i < dataArray.length(); i++) { - JSONObject data = dataArray.getJSONObject(i); - if (data.has(DataColumns.ID)) { - long dataId = data.getLong(DataColumns.ID); - if (DataUtils.existInDataDatabase(mContentResolver, dataId)) { - // 数据 ID 已存在,需创建新 ID - data.remove(DataColumns.ID); - } - } - } - } - } catch (JSONException e) { - Log.w(TAG, e.toString()); - e.printStackTrace(); - } - sqlNote.setContent(js); - - // 设置父任务 ID - Long parentId = mGidToNid.get(((Task) node).getParent().getGid()); - if (parentId == null) { - Log.e(TAG, "cannot find task's parent id locally"); - throw new ActionFailureException("cannot add local node"); - } - sqlNote.setParentId(parentId.longValue()); - } - - // 创建本地节点 - sqlNote.setGtaskId(node.getGid()); - sqlNote.commit(false); - - // 更新 GID-NID 映射 - mGidToNid.put(node.getGid(), sqlNote.getId()); - mNidToGid.put(sqlNote.getId(), node.getGid()); - - // 更新远程元数据 - updateRemoteMeta(node.getGid(), sqlNote); - } - - private void updateLocalNode(Node node, Cursor c) throws NetworkFailureException { - if (mCancelled) { - // 如果同步过程已被取消,直接返回,不再执行后续操作 - return; - } - - SqlNote sqlNote; - - // 1. 创建并初始化 SqlNote 对象,用于更新本地节点 - // 使用传入的上下文 mContext 和游标 c 初始化 SqlNote 实例 - sqlNote = new SqlNote(mContext, c); - - // 2. 设置 SqlNote 的内容为当前节点的本地 JSON 表示 - // 调用 Node 对象的 getLocalJSONFromContent() 方法获取其本地 JSON 表示,并设置到 SqlNote 对象中 - sqlNote.setContent(node.getLocalJSONFromContent()); - - // 3. 获取待更新节点的父任务 ID - // 根据节点类型(Task 或其他类型)区分处理: - // - 如果节点是 Task 类型,通过 mGidToNid 映射表获取其父任务的 Google ID,再转换为本地 ID - // - 否则,将其父任务 ID 默认设置为根文件夹 ID(Notes.ID_ROOT_FOLDER) - Long parentId; - if (node instanceof Task) { - parentId = mGidToNid.get(((Task) node).getParent().getGid()); - } else { - parentId = new Long(Notes.ID_ROOT_FOLDER); - } - - // 4. 检查父任务 ID 是否有效 - // 如果父任务 ID 为 null,说明无法找到对应的本地父任务,记录错误信息并抛出异常 - if (parentId == null) { - Log.e(TAG, "cannot find task's parent id locally"); - throw new ActionFailureException("cannot update local node"); - } - - // 5. 设置 SqlNote 的父任务 ID,并提交更新 - // 将计算得到的父任务 ID 设置到 SqlNote 对象中,然后调用 commit(true) 方法提交更新至本地数据库 - sqlNote.setParentId(parentId.longValue()); - sqlNote.commit(true); - - // 6. 更新远程元数据 - // 调用 updateRemoteMeta() 方法,同步更新远程元数据以保持与本地数据一致 - updateRemoteMeta(node.getGid(), sqlNote); - } - - private void addRemoteNode(Node node, Cursor c) throws NetworkFailureException { - if (mCancelled) { - // 如果同步过程已被取消,直接返回,不再执行后续操作 - return; - } - - SqlNote sqlNote = new SqlNote(mContext, c); - Node n; - - // 1. 根据 SqlNote 类型(任务或文件夹),执行相应的远程添加操作 - - // 如果 SqlNote 是任务类型 - if (sqlNote.isNoteType()) { - // 创建 Task 对象并设置内容 - Task task = new Task(); - task.setContentByLocalJSON(sqlNote.getContent()); - - // 获取父任务列表的 Google ID - String parentGid = mNidToGid.get(sqlNote.getParentId()); - - // 检查父任务列表 ID 是否有效 - if (parentGid == null) { - Log.e(TAG, "cannot find task's parent tasklist"); - throw new ActionFailureException("cannot add remote task"); - } - - // 在对应的父任务列表中添加子任务 - mGTaskListHashMap.get(parentGid).addChildTask(task); - - // 调用 Google 任务客户端创建远程任务 - GTaskClient.getInstance().createTask(task); - - // 将 Task 对象赋值给 Node 变量 n - n = (Node) task; - - // 更新远程元数据 - updateRemoteMeta(task.getGid(), sqlNote); - } else { - // 如果 SqlNote 是文件夹类型 - - // 初始化 TaskList 变量 tasklist,用于存储已匹配或新建的远程文件夹 - TaskList tasklist = null; - - // 构建文件夹名称 - String folderName = GTaskStringUtils.MIUI_FOLDER_PREFFIX; - if (sqlNote.getId() == Notes.ID_ROOT_FOLDER) - folderName += GTaskStringUtils.FOLDER_DEFAULT; - else if (sqlNote.getId() == Notes.ID_CALL_RECORD_FOLDER) - folderName += GTaskStringUtils.FOLDER_CALL_NOTE; - else - folderName += sqlNote.getSnippet(); - - // 遍历已缓存的远程文件夹,查找匹配的文件夹 - Iterator> iter = mGTaskListHashMap.entrySet().iterator(); - while (iter.hasNext()) { - Map.Entry entry = iter.next(); - String gid = entry.getKey(); - TaskList list = entry.getValue(); - - if (list.getName().equals(folderName)) { - tasklist = list; - // 如果找到匹配的文件夹且其已存在于本地删除队列,从队列中移除 - if (mGTaskHashMap.containsKey(gid)) { - mGTaskHashMap.remove(gid); - } - break; - } - } - - // 如果未找到匹配的文件夹,创建新的 TaskList 对象并添加到远程 - if (tasklist == null) { - tasklist = new TaskList(); - tasklist.setContentByLocalJSON(sqlNote.getContent()); - GTaskClient.getInstance().createTaskList(tasklist); - mGTaskListHashMap.put(tasklist.getGid(), tasklist); - } - - // 将 TaskList 对象赋值给 Node 变量 n - n = (Node) tasklist; - } - - // 2. 更新本地 SqlNote 记录 - - // 设置 SqlNote 的 Google ID - sqlNote.setGtaskId(n.getGid()); - - // 提交更新(false:不触发本地更新) - sqlNote.commit(false); - - // 清除本地修改标志 - sqlNote.resetLocalModified(); - - // 提交更新(true:触发本地更新) - sqlNote.commit(true); - - // 3. 更新 GID-NID 映射表 - - // 将新添加的远程节点的 Google ID 和本地 ID 添加到映射表 - mGidToNid.put(n.getGid(), sqlNote.getId()); - mNidToGid.put(sqlNote.getId(), n.getGid()); - } - - private void updateRemoteNode(Node node, Cursor c) throws NetworkFailureException { - if (mCancelled) { - // 如果同步过程已被取消,直接返回,不再执行后续操作 - return; - } - - SqlNote sqlNote = new SqlNote(mContext, c); - - // 1. 更新远程节点 - - // 根据 SqlNote 设置 Node 对象的内容 - node.setContentByLocalJSON(sqlNote.getContent()); - - // 调用 Google 任务客户端更新远程节点 - GTaskClient.getInstance().addUpdateNode(node); - - // 更新远程元数据 - updateRemoteMeta(node.getGid(), sqlNote); - - // 2. 若为任务类型,检查是否需要移动任务 - - if (sqlNote.isNoteType()) { - Task task = (Task) node; - TaskList preParentList = task.getParent(); - - // 获取当前父任务列表的 Google ID - String curParentGid = mNidToGid.get(sqlNote.getParentId()); - - // 检查当前父任务列表 ID 是否有效 - if (curParentGid == null) { - Log.e(TAG, "cannot find task's parent tasklist"); - throw new ActionFailureException("cannot update remote task"); - } - - // 获取当前父任务列表对象 - TaskList curParentList = mGTaskListHashMap.get(curParentGid); - - // 如果任务的原父任务列表与当前父任务列表不同,移动任务 - if (preParentList != curParentList) { - preParentList.removeChildTask(task); - curParentList.addChildTask(task); - GTaskClient.getInstance().moveTask(task, preParentList, curParentList); - } - } - - // 3. 清除本地修改标志并提交更新 - - // 清除 SqlNote 的本地修改标志 - sqlNote.resetLocalModified(); - - // 提交更新(true:触发本地更新) - sqlNote.commit(true); - } - - private void updateRemoteMeta(String gid, SqlNote sqlNote) throws NetworkFailureException { - if (sqlNote != null && sqlNote.isNoteType()) { - // 1. 获取或创建 MetaData 对象 - - MetaData metaData = mMetaHashMap.get(gid); - - if (metaData != null) { - // 若已存在 MetaData,更新其内容并添加到更新队列 - metaData.setMeta(gid, sqlNote.getContent()); - GTaskClient.getInstance().addUpdateNode(metaData); - } else { - // 若不存在 MetaData,创建新的 MetaData 对象,设置内容,添加到元数据列表、映射表和更新队列 - metaData = new MetaData(); - metaData.setMeta(gid, sqlNote.getContent()); - mMetaList.addChildTask(metaData); - mMetaHashMap.put(gid, metaData); - GTaskClient.getInstance().createTask(metaData); - } - } - } - - private void refreshLocalSyncId() throws NetworkFailureException { - if (mCancelled) { - // 如果同步过程已被取消,直接返回,不再执行后续操作 - return; - } - - // 1. 获取最新的 Google 任务列表 - - // 清空本地缓存的 Google 任务哈希表、Google 任务列表哈希表和元数据哈希表 - mGTaskHashMap.clear(); - mGTaskListHashMap.clear(); - mMetaHashMap.clear(); - - // 初始化 Google 任务列表 - initGTaskList(); - - // 2. 查询本地便签数据,更新同步 ID - - Cursor c = null; - try { - // 构建查询条件,排除系统类型和垃圾箱中的便签 - c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE, - "(type<>? AND parent_id<>?)", new String[] { - String.valueOf(Notes.TYPE_SYSTEM), String.valueOf(Notes.ID_TRASH_FOLER) - }, NoteColumns.TYPE + " DESC"); - - if (c != null) { - // 遍历查询结果,更新每个便签的同步 ID - while (c.moveToNext()) { - // 获取便签的 Google ID - String gid = c.getString(SqlNote.GTASK_ID_COLUMN); - - // 查找对应的 Google 任务 - Node node = mGTaskHashMap.get(gid); - - if (node != null) { - // 移除已处理的 Google 任务 - mGTaskHashMap.remove(gid); - - // 构建用于更新同步 ID 的 ContentValues - ContentValues values = new ContentValues(); - values.put(NoteColumns.SYNC_ID, node.getLastModified()); - - // 更新便签的同步 ID - mContentResolver.update(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, - c.getLong(SqlNote.ID_COLUMN)), values, null, null); - } else { - // 记录错误信息并抛出异常,表示本地便签缺少 Google ID - Log.e(TAG, "something is missed"); - throw new ActionFailureException( - "some local items don't have gid after sync"); - } - } - } else { - // 记录警告信息,表示未能成功查询本地便签 - Log.w(TAG, "failed to query local note to refresh sync id"); - } - } finally { - // 关闭游标 - if (c != null) { - c.close(); - c = null; - } - } - } - - public String getSyncAccount() { - // 返回 Google 任务客户端使用的同步账户名 - return GTaskClient.getInstance().getSyncAccount().name; - } - - public void cancelSync() { - // 标记同步过程已取消 - mCancelled = true; - } -} \ No newline at end of file diff --git a/src/gtask/remote/GTaskSyncService.java b/src/gtask/remote/GTaskSyncService.java deleted file mode 100644 index 4f89a49..0000000 --- a/src/gtask/remote/GTaskSyncService.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.gtask.remote; - -import android.app.Activity; -import android.app.Service; -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.os.IBinder; - -//定义一个服务类GTaskSyncService,用于实现Google Tasks的同步服务 -public class GTaskSyncService extends Service { - - // 定义常量,用于标识不同的同步动作类型 - public final static String ACTION_STRING_NAME = "sync_action_type"; - public final static int ACTION_START_SYNC = 0; // 开始同步动作 - public final static int ACTION_CANCEL_SYNC = 1; // 取消同步动作 - public final static int ACTION_INVALID = 2; // 无效动作标识符 - - // 定义广播相关的常量 - public final static String GTASK_SERVICE_BROADCAST_NAME = "net.micode.notes.gtask.remote.gtask_sync_service"; - public final static String GTASK_SERVICE_BROADCAST_IS_SYNCING = "isSyncing"; // 标识是否正在进行同步 - public final static String GTASK_SERVICE_BROADCAST_PROGRESS_MSG = "progressMsg"; // 同步进度消息 - - // 定义静态成员变量,用于保存异步同步任务实例 - private static GTaskASyncTask mSyncTask = null; - - // 定义同步进度信息 - private static String mSyncProgress = ""; - - // 开始同步任务的方法 - private void startSync() { - // 如果当前没有同步任务正在进行 - if (mSyncTask == null) { - // 创建新的GTaskASyncTask实例 - mSyncTask = new GTaskASyncTask(this, new GTaskASyncTask.OnCompleteListener() { - @Override - public void onComplete() { - // 当同步完成时,取消引用并停止服务 - mSyncTask = null; - sendBroadcast(""); // 发送广播通知同步已完成 - stopSelf(); // 停止当前服务 - } - }); - - // 发送初始广播通知开始同步 - sendBroadcast(""); - - // 执行异步同步任务 - mSyncTask.execute(); - } - } - - // 取消同步任务的方法 - private void cancelSync() { - // 如果当前有同步任务正在进行 - if (mSyncTask != null) { - // 取消同步任务 - mSyncTask.cancelSync(); - } - } - - // 服务创建时重置同步任务 - @Override - public void onCreate() { - mSyncTask = null; - } - - // 服务启动时接收并处理Intent - @Override - public int onStartCommand(Intent intent, int flags, int startId) { - Bundle bundle = intent.getExtras(); - - // 如果Intent携带了ACTION_STRING_NAME键的数据 - if (bundle != null && bundle.containsKey(ACTION_STRING_NAME)) { - // 获取并判断动作类型 - switch (bundle.getInt(ACTION_STRING_NAME, ACTION_INVALID)) { - case ACTION_START_SYNC: - startSync(); // 开始同步 - break; - case ACTION_CANCEL_SYNC: - cancelSync(); // 取消同步 - break; - default: - break; - } - - // 返回START_STICKY使得服务在被系统杀死后自动重启 - return START_STICKY; - } - - // 若Intent不满足条件,调用父类方法 - return super.onStartCommand(intent, flags, startId); - } - - // 当系统内存不足时,尝试取消同步任务 - @Override - public void onLowMemory() { - if (mSyncTask != null) { - mSyncTask.cancelSync(); - } - } - - // 绑定服务时返回null,表明此服务不支持绑定 - @Override - public IBinder onBind(Intent intent) { - return null; - } - - // 发送广播的方法,用于传递同步状态和进度信息 - public void sendBroadcast(String msg) { - mSyncProgress = msg; // 更新同步进度信息 - Intent intent = new Intent(GTASK_SERVICE_BROADCAST_NAME); - intent.putExtra(GTASK_SERVICE_BROADCAST_IS_SYNCING, mSyncTask != null); // 是否正在进行同步 - intent.putExtra(GTASK_SERVICE_BROADCAST_PROGRESS_MSG, msg); // 同步进度消息 - sendBroadcast(intent); // 发送广播 - } - - // 静态方法,启动同步服务 - public static void startSync(Activity activity) { - GTaskManager.getInstance().setActivityContext(activity); - Intent intent = new Intent(activity, GTaskSyncService.class); - intent.putExtra(ACTION_STRING_NAME, ACTION_START_SYNC); - activity.startService(intent); // 由Activity启动服务并开始同步 - } - - // 静态方法,取消同步服务 - public static void cancelSync(Context context) { - Intent intent = new Intent(context, GTaskSyncService.class); - intent.putExtra(ACTION_STRING_NAME, ACTION_CANCEL_SYNC); - context.startService(intent); // 由Context启动服务并取消同步 - } - - // 静态方法,检查是否正在进行同步 - public static boolean isSyncing() { - return mSyncTask != null; - } - - // 静态方法,获取当前同步进度的字符串描述 - public static String getProgressString() { - return mSyncProgress; - } -} diff --git a/src/model/Note.java b/src/model/Note.java deleted file mode 100644 index 2ae2969..0000000 --- a/src/model/Note.java +++ /dev/null @@ -1,261 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.model; -import android.content.ContentProviderOperation;//批量的更新、插入、删除数据。 -import android.content.ContentProviderResult;//操作的结果 -import android.content.ContentUris;//用于添加和获取Uri后面的ID -import android.content.ContentValues;//一种用来存储基本数据类型数据的存储机制 -import android.content.Context;//需要用该类来弄清楚调用者的实例 -import android.content.OperationApplicationException;//操作应用程序容错 -import android.net.Uri;//表示待操作的数据 -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.DataColumns; -import net.micode.notes.data.Notes.NoteColumns; -import net.micode.notes.data.Notes.TextNote; - -import java.util.ArrayList; - - -public class Note { - private ContentValues mNoteDiffValues; - private NoteData mNoteData; - private static final String TAG = "Note"; - /** - * Create a new note id for adding a new note to databases - */ - public static synchronized long getNewNoteId(Context context, long folderId) { - // Create a new note in the database - ContentValues values = new ContentValues(); - long createdTime = System.currentTimeMillis(); - values.put(NoteColumns.CREATED_DATE, createdTime); - values.put(NoteColumns.MODIFIED_DATE, createdTime); - values.put(NoteColumns.TYPE, Notes.TYPE_NOTE); - values.put(NoteColumns.LOCAL_MODIFIED, 1); - values.put(NoteColumns.PARENT_ID, folderId);//将数据写入数据库表格 - Uri uri = context.getContentResolver().insert(Notes.CONTENT_NOTE_URI, values); - //ContentResolver()主要是实现外部应用对ContentProvider中的数据 - //进行添加、删除、修改和查询操作 - long noteId = 0; - try { - noteId = Long.valueOf(uri.getPathSegments().get(1)); - } - catch (NumberFormatException e) { - Log.e(TAG, "Get note id error :" + e.toString()); - noteId = 0; - }//try-catch异常处理 - if (noteId == -1) { - throw new IllegalStateException("Wrong note id:" + noteId); - } - return noteId; - } - - public Note() { - mNoteDiffValues = new ContentValues(); - mNoteData = new NoteData(); - }//定义两个变量用来存储便签的数据,一个是存储便签属性、一个是存储便签内容 - - public void setNoteValue(String key, String value) { - mNoteDiffValues.put(key, value); - mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1); - mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis()); - }//设置数据库表格的标签属性数据 - - public void setTextData(String key, String value) { - mNoteData.setTextData(key, value); - }//设置数据库表格的标签文本内容的数据 - - public void setTextDataId(long id) { - mNoteData.setTextDataId(id); - }//设置文本数据的ID - - public long getTextDataId() { - return mNoteData.mTextDataId; - }//得到文本数据的ID - - public void setCallDataId(long id) { - mNoteData.setCallDataId(id); - }//设置电话号码数据的ID - - public void setCallData(String key, String value) { - mNoteData.setCallData(key, value); - }//得到电话号码数据的ID - - public boolean isLocalModified() { - return mNoteDiffValues.size() > 0 || mNoteData.isLocalModified(); - }//判断是否是本地修改 - - public boolean syncNote(Context context, long noteId) { - if (noteId <= 0) { - throw new IllegalArgumentException("Wrong note id:" + noteId); - } - - if (!isLocalModified()) { - return true; - } - - /** - * In theory, once data changed, the note should be updated on {@link NoteColumns#LOCAL_MODIFIED} and - * {@link NoteColumns#MODIFIED_DATE}. For data safety, though update note fails, we also update the - * note data info - */ - if (context.getContentResolver().update( - ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), mNoteDiffValues, null, - null) == 0) { - Log.e(TAG, "Update note error, should not happen"); - // Do not return, fall through - } - mNoteDiffValues.clear(); - - if (mNoteData.isLocalModified() - && (mNoteData.pushIntoContentResolver(context, noteId) == null)) { - return false; - } - - return true; - }//判断数据是否同步 - - private class NoteData {//定义一个基本的便签内容的数据类,主要包含文本数据和电话号码数据 - private long mTextDataId; - - private ContentValues mTextDataValues;//文本数据 - - private long mCallDataId; - - private ContentValues mCallDataValues;//电话号码数据 - - private static final String TAG = "NoteData"; - - public NoteData() { - mTextDataValues = new ContentValues(); - mCallDataValues = new ContentValues(); - mTextDataId = 0; - mCallDataId = 0; - } - //下面是上述几个函数的具体实现 - boolean isLocalModified() { - return mTextDataValues.size() > 0 || mCallDataValues.size() > 0; - } - - void setTextDataId(long id) { - if (id <= 0) { - throw new IllegalArgumentException("Text data id should larger than 0"); - } - mTextDataId = id; - } - - void setCallDataId(long id) { - if (id <= 0) { - throw new IllegalArgumentException("Call data id should larger than 0"); - } - mCallDataId = id; - } - - void setCallData(String key, String value) { - mCallDataValues.put(key, value); - mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1); - mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis()); - } - - void setTextData(String key, String value) { - mTextDataValues.put(key, value); - mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1); - mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis()); - } - //下面函数的作用是将新的数据通过Uri的操作存储到数据库 - Uri pushIntoContentResolver(Context context, long noteId) { - /** - * Check for safety - */ - if (noteId <= 0) { - throw new IllegalArgumentException("Wrong note id:" + noteId); - }//判断数据是否合法 - - ArrayList operationList = new ArrayList(); - ContentProviderOperation.Builder builder = null;//数据库的操作列表 - - if (mTextDataValues.size() > 0) { - mTextDataValues.put(DataColumns.NOTE_ID, noteId); - if (mTextDataId == 0) { - mTextDataValues.put(DataColumns.MIME_TYPE, TextNote.CONTENT_ITEM_TYPE); - Uri uri = context.getContentResolver().insert(Notes.CONTENT_DATA_URI, - mTextDataValues); - try { - setTextDataId(Long.valueOf(uri.getPathSegments().get(1))); - } - catch (NumberFormatException e) { - Log.e(TAG, "Insert new text data fail with noteId" + noteId); - mTextDataValues.clear(); - return null; - } - } - else { - builder = ContentProviderOperation.newUpdate(ContentUris.withAppendedId( - Notes.CONTENT_DATA_URI, mTextDataId)); - builder.withValues(mTextDataValues); - operationList.add(builder.build()); - } - mTextDataValues.clear(); - }//把文本数据存入DataColumns - - if (mCallDataValues.size() > 0) { - mCallDataValues.put(DataColumns.NOTE_ID, noteId); - if (mCallDataId == 0) { - mCallDataValues.put(DataColumns.MIME_TYPE, CallNote.CONTENT_ITEM_TYPE); - Uri uri = context.getContentResolver().insert(Notes.CONTENT_DATA_URI, - mCallDataValues); - try { - setCallDataId(Long.valueOf(uri.getPathSegments().get(1))); - } - catch (NumberFormatException e) { - Log.e(TAG, "Insert new call data fail with noteId" + noteId); - mCallDataValues.clear(); - return null; - } - } - else { - builder = ContentProviderOperation.newUpdate(ContentUris.withAppendedId( - Notes.CONTENT_DATA_URI, mCallDataId)); - builder.withValues(mCallDataValues); - operationList.add(builder.build()); - } - mCallDataValues.clear(); - }//把电话号码数据存入DataColumns - - if (operationList.size() > 0) { - try { - ContentProviderResult[] results = context.getContentResolver().applyBatch( - Notes.AUTHORITY, operationList); - return (results == null || results.length == 0 || results[0] == null) ? null - : ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId); - } - catch (RemoteException e) { - Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); - return null; - } - catch (OperationApplicationException e) { - Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); - return null; - } - }//存储过程中的异常处理 - return null; - } - } -} diff --git a/src/model/WorkingNote.java b/src/model/WorkingNote.java deleted file mode 100644 index 3d1b1f8..0000000 --- a/src/model/WorkingNote.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 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.model; - -import android.appwidget.AppWidgetManager; -import android.content.ContentUris; -import android.content.Context; -import android.database.Cursor; -import android.text.TextUtils; -import android.util.Log; - -import net.micode.notes.data.Notes; -import net.micode.notes.data.Notes.CallNote; -import net.micode.notes.data.Notes.DataColumns; -import net.micode.notes.data.Notes.DataConstants; -import net.micode.notes.data.Notes.NoteColumns; -import net.micode.notes.data.Notes.TextNote; -import net.micode.notes.tool.ResourceParser.NoteBgResources; - -public class WorkingNote { - // Note for the working note - private Note mNote; - // Note Id - private long mNoteId; - // Note content - private String mContent; - // Note mode - private int mMode; - - private long mAlertDate; - private long mModifiedDate; - private int mBgColorId; - private int mWidgetId; - private int mWidgetType; - private long mFolderId; - private Context mContext; - - private static final String TAG = "WorkingNote"; - - private boolean mIsDeleted; - - private NoteSettingChangedListener mNoteSettingStatusListener; - - // 声明 DATA_PROJECTION字符串数组 - public static final String[] DATA_PROJECTION = new String[] { - DataColumns.ID, - DataColumns.CONTENT, - DataColumns.MIME_TYPE, - DataColumns.DATA1, - DataColumns.DATA2, - DataColumns.DATA3, - DataColumns.DATA4, - }; - - // 声明 NOTE_PROJECTION字符串数组 - public static final String[] NOTE_PROJECTION = new String[] { - NoteColumns.PARENT_ID, - NoteColumns.ALERTED_DATE, - NoteColumns.BG_COLOR_ID, - NoteColumns.WIDGET_ID, - NoteColumns.WIDGET_TYPE, - NoteColumns.MODIFIED_DATE - }; - - private static final int DATA_ID_COLUMN = 0; - private static final int DATA_CONTENT_COLUMN = 1; - private static final int DATA_MIME_TYPE_COLUMN = 2; - private static final int DATA_MODE_COLUMN = 3; - private static final int NOTE_PARENT_ID_COLUMN = 0; - private static final int NOTE_ALERTED_DATE_COLUMN = 1; - private static final int NOTE_BG_COLOR_ID_COLUMN = 2; - private static final int NOTE_WIDGET_ID_COLUMN = 3; - private static final int NOTE_WIDGET_TYPE_COLUMN = 4; - private static final int NOTE_MODIFIED_DATE_COLUMN = 5; - - // New note construct - public WorkingNote(Context context, long folderId) { - mContext = context; - mAlertDate = 0; - mModifiedDate = System.currentTimeMillis(); - mFolderId = folderId; - mNote = new Note(); - mNoteId = 0; - mIsDeleted = false; - mMode = 0; - mWidgetType = Notes.TYPE_WIDGET_INVALIDE; - } - - // WorkingNote的构造函数 - // Existing note construct - private WorkingNote(Context context, long noteId, long folderId) { - mContext = context; - mNoteId = noteId; - mFolderId = folderId; - mIsDeleted = false; - mNote = new Note(); - loadNote(); - } - - // 加载Note - // 通过数据库调用query函数找到第一个条目 - private void loadNote() { - Cursor cursor = mContext.getContentResolver().query( - ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, mNoteId), NOTE_PROJECTION, null, - null, null); - - // 若存在,储存相应信息 - if (cursor != null) { - if (cursor.moveToFirst()) { - mFolderId = cursor.getLong(NOTE_PARENT_ID_COLUMN); - mBgColorId = cursor.getInt(NOTE_BG_COLOR_ID_COLUMN); - mWidgetId = cursor.getInt(NOTE_WIDGET_ID_COLUMN); - mWidgetType = cursor.getInt(NOTE_WIDGET_TYPE_COLUMN); - mAlertDate = cursor.getLong(NOTE_ALERTED_DATE_COLUMN); - mModifiedDate = cursor.getLong(NOTE_MODIFIED_DATE_COLUMN); - } - cursor.close(); - // 若不存在,报错 - } else { - Log.e(TAG, "No note with id:" + mNoteId); - throw new IllegalArgumentException("Unable to find note with id " + mNoteId); - } - loadNoteData(); - } - - // 加载NoteData - private void loadNoteData() { - Cursor cursor = mContext.getContentResolver().query(Notes.CONTENT_DATA_URI, DATA_PROJECTION, - DataColumns.NOTE_ID + "=?", new String[] { - String.valueOf(mNoteId) - }, null); - - if (cursor != null) { - // 查到信息不为空 - if (cursor.moveToFirst()) { // 查看第一项是否存在 - do { - String type = cursor.getString(DATA_MIME_TYPE_COLUMN); - if (DataConstants.NOTE.equals(type)) { - mContent = cursor.getString(DATA_CONTENT_COLUMN); - mMode = cursor.getInt(DATA_MODE_COLUMN); - mNote.setTextDataId(cursor.getLong(DATA_ID_COLUMN)); - } else if (DataConstants.CALL_NOTE.equals(type)) { - mNote.setCallDataId(cursor.getLong(DATA_ID_COLUMN)); - } else { - Log.d(TAG, "Wrong note type with type:" + type); - } - } while (cursor.moveToNext());//查阅所有项,直到为空 - } - cursor.close(); - } else { - Log.e(TAG, "No data with id:" + mNoteId); - throw new IllegalArgumentException("Unable to find note's data with id " + mNoteId); - } - } - - // 创建空的Note - // 传参:context,文件夹id,widget,背景颜色 - public static WorkingNote createEmptyNote(Context context, long folderId, int widgetId, - int widgetType, int defaultBgColorId) { - WorkingNote note = new WorkingNote(context, folderId); - // 设定相关属性 - note.setBgColorId(defaultBgColorId); - note.setWidgetId(widgetId); - note.setWidgetType(widgetType); - return note; - } - - public static WorkingNote load(Context context, long id) { - return new WorkingNote(context, id, 0); - } - - // 保存Note - public synchronized boolean saveNote() { - if (isWorthSaving()) { //是否值得保存 - if (!existInDatabase()) { // 是否存在数据库中 - if ((mNoteId = Note.getNewNoteId(mContext, mFolderId)) == 0) { - Log.e(TAG, "Create new note fail with id:" + mNoteId); - return false; - } - } - - mNote.syncNote(mContext, mNoteId); - - /** - * Update widget content if there exist any widget of this note - */ - if (mWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID - && mWidgetType != Notes.TYPE_WIDGET_INVALIDE - && mNoteSettingStatusListener != null) { - mNoteSettingStatusListener.onWidgetChanged(); - } - return true; - } else { - return false; - } - } - - // 是否在数据库中存在 - public boolean existInDatabase() { - return mNoteId > 0; - } - - // 是否值得保存 - private boolean isWorthSaving() { - // 被删除,或(不在数据库中 内容为空),或 本地已保存过 - if (mIsDeleted || (!existInDatabase() && TextUtils.isEmpty(mContent)) - || (existInDatabase() && !mNote.isLocalModified())) { - return false; - } else { - return true; - } - } - - - // 设置mNoteSettingStatusListener - public void setOnSettingStatusChangedListener(NoteSettingChangedListener l) { - mNoteSettingStatusListener = l; - } - - // 设置AlertDate - // 若 mAlertDate与data不同,则更改mAlertDate并设定NoteValue - public void setAlertDate(long date, boolean set) { - if (date != mAlertDate) { - mAlertDate = date; - mNote.setNoteValue(NoteColumns.ALERTED_DATE, String.valueOf(mAlertDate)); - } - if (mNoteSettingStatusListener != null) { - mNoteSettingStatusListener.onClockAlertChanged(date, set); - } - } - - // 设定删除标记 - public void markDeleted(boolean mark) { - // 设定标记 - mIsDeleted = mark; - if (mWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID - && mWidgetType != Notes.TYPE_WIDGET_INVALIDE && mNoteSettingStatusListener != null) { - mNoteSettingStatusListener.onWidgetChanged(); - // 调用mNoteSettingStatusListener的 onWidgetChanged方法 - } - } - - // 设定背景颜色 - public void setBgColorId(int id) { - if (id != mBgColorId) { //设定条件 id != mBgColorId - mBgColorId = id; - if (mNoteSettingStatusListener != null) { - mNoteSettingStatusListener.onBackgroundColorChanged(); - } - mNote.setNoteValue(NoteColumns.BG_COLOR_ID, String.valueOf(id)); - } - } - - // 设定检查列表模式 - // 参数:mode - public void setCheckListMode(int mode) { - if (mMode != mode) { //设定条件 mMode != mode - if (mNoteSettingStatusListener != null) { - mNoteSettingStatusListener.onCheckListModeChanged(mMode, mode); - } - mMode = mode; - mNote.setTextData(TextNote.MODE, String.valueOf(mMode)); - } - } - - - // 设定WidgetType - // 参数:type - public void setWidgetType(int type) { - if (type != mWidgetType) {//设定条件 type != mWidgetType - mWidgetType = type; - mNote.setNoteValue(NoteColumns.WIDGET_TYPE, String.valueOf(mWidgetType)); - // 调用Note的setNoteValue方法更改WidgetType - } - } - - // 设定WidgetId - // 参数:id - public void setWidgetId(int id) { - if (id != mWidgetId) {//设定条件 id != mWidgetId - mWidgetId = id; - mNote.setNoteValue(NoteColumns.WIDGET_ID, String.valueOf(mWidgetId)); - // 调用Note的setNoteValue方法更改WidgetId - } - } - - // 设定WorkingTex - // 参数:更改的text - public void setWorkingText(String text) { - if (!TextUtils.equals(mContent, text)) {//设定条件 mContent, text内容不同 - mContent = text; - mNote.setTextData(DataColumns.CONTENT, mContent); - // 调用Note的setTextData方法更改WorkingText - } - } - - // 转变mNote的CallData及CallNote信息 - // 参数:String phoneNumber, long callDate - public void convertToCallNote(String phoneNumber, long callDate) { - mNote.setCallData(CallNote.CALL_DATE, String.valueOf(callDate)); - mNote.setCallData(CallNote.PHONE_NUMBER, phoneNumber); - mNote.setNoteValue(NoteColumns.PARENT_ID, String.valueOf(Notes.ID_CALL_RECORD_FOLDER)); - } - - // 判断是否有时钟题型 - public boolean hasClockAlert() { - return (mAlertDate > 0 ? true : false); - } - - // 获取Content - public String getContent() { - return mContent; - } - - // 获取AlertDate - public long getAlertDate() { - return mAlertDate; - } - - // 获取ModifiedDate - public long getModifiedDate() { - return mModifiedDate; - } - - // 获取背景颜色来源id - public int getBgColorResId() { - return NoteBgResources.getNoteBgResource(mBgColorId); - } - - // 获取背景颜色id - public int getBgColorId() { - return mBgColorId; - } - - // 获取标题背景颜色id - public int getTitleBgResId() { - return NoteBgResources.getNoteTitleBgResource(mBgColorId); - } - - // 获取CheckListMode - public int getCheckListMode() { - return mMode; - } - - // 获取便签id - public long getNoteId() { - return mNoteId; - } - - // 获取文件夹id - public long getFolderId() { - return mFolderId; - } - - // 获取WidgetId - public int getWidgetId() { - return mWidgetId; - } - - // 获取WidgetType - public int getWidgetType() { - return mWidgetType; - } - - // 创建接口 NoteSettingChangedListener,便签更新监视 - // 为NoteEditActivity提供接口 - // 提供函数有 - public interface NoteSettingChangedListener { - /** - * Called when the background color of current note has just changed - */ - void onBackgroundColorChanged(); - - /** - * Called when user set clock - */ - void onClockAlertChanged(long date, boolean set); - - /** - * Call when user create note from widget - */ - void onWidgetChanged(); - - /** - * Call when switch between check list mode and normal mode - * @param oldMode is previous mode before change - * @param newMode is new mode - */ - void onCheckListModeChanged(int oldMode, int newMode); - } -} - diff --git a/src/tool/BackupUtils.java b/src/tool/BackupUtils.java deleted file mode 100644 index e87f7c7..0000000 --- a/src/tool/BackupUtils.java +++ /dev/null @@ -1,346 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.tool; - -import android.content.Context;//Android提供的一个上下文对象,可以用于访问应用程序的资源和执行一些操作。 -import android.database.Cursor;//一个用于查询数据库结果集的接口,可以用于获取查询结果中的各个数据项。 -import android.os.Environment;//提供了访问系统环境的方法,例如获取外部存储路径。 -import android.text.TextUtils;//个包含各种字符串处理方法的工具类,例如判断字符串是否为空。 -import android.text.format.DateFormat;//提供了各种日期和时间格式化的方法。 -import android.util.Log;//Android提供的日志工具类,用于打印调试信息。 - -import net.micode.notes.R;//应用程序的资源类,用于引用应用程序中的各种资源,如布局文件、图标、字符串等。 -import net.micode.notes.data.Notes;//一个自定义的Notes数据类,用于访问和操作备忘录的数据。 -import net.micode.notes.data.Notes.DataColumns;//Notes数据类中定义的备忘录数据列常量。 -import net.micode.notes.data.Notes.DataConstants;//Notes数据类中定义的备忘录数据常量。 -import net.micode.notes.data.Notes.NoteColumns;//Notes数据类中定义的备忘录笔记列常量。 - -//用于文件操作,如创建文件、写入内容等。 -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.PrintStream; - - -public class BackupUtils { - private static final String TAG = "BackupUtils"; - // Singleton stuff - private static BackupUtils sInstance; - - public static synchronized BackupUtils getInstance(Context context) { - if (sInstance == null) { - //如果当前的备份不存在,则重新声明一个 - sInstance = new BackupUtils(context); - } - return sInstance; - } - - /** - * Following states are signs to represents backup or restore - * status - *///以下状态是表示备份或恢复状态的标志。 - // Currently, the sdcard is not mounted SD卡没有被装到手机里 - public static final int STATE_SD_CARD_UNMOUONTED = 0; - // 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 数据已被破坏,可能被修改 - public static final int STATE_DATA_DESTROIED = 2; - // Some run-time exception which causes restore or backup fails 超时异常 - public static final int STATE_SYSTEM_ERROR = 3; - // 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()); - } - - public int exportToText() { - return mTextExport.exportToText(); - } - - public String getExportedTextFileName() { - return mTextExport.mFileName; - } - - public String getExportedTextFileDir() { - return mTextExport.mFileDirectory; - } - - private static class TextExport { - private static final String[] NOTE_PROJECTION = { - NoteColumns.ID, - NoteColumns.MODIFIED_DATE, - NoteColumns.SNIPPET, - NoteColumns.TYPE - }; - - private static final int NOTE_COLUMN_ID = 0; - - 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, - DataColumns.DATA1, - DataColumns.DATA2, - DataColumns.DATA3, - DataColumns.DATA4, - }; - - private static final int DATA_COLUMN_CONTENT = 0; - - private static final int DATA_COLUMN_MIME_TYPE = 1; - - private static final int DATA_COLUMN_CALL_DATE = 2; - - private static final int DATA_COLUMN_PHONE_NUMBER = 4; - - private final String [] TEXT_FORMAT; - private static final int FORMAT_FOLDER_NAME = 0; - private static final int FORMAT_NOTE_DATE = 1; - private static final int FORMAT_NOTE_CONTENT = 2; - - private Context mContext; - private String mFileName; - private String mFileDirectory; - - public TextExport(Context context) { - TEXT_FORMAT = context.getResources().getStringArray(R.array.format_for_exported_note); - mContext = context; - mFileName = ""; - mFileDirectory = ""; - } - - private String getFormat(int id) {//获取文本的组成部分 - return TEXT_FORMAT[id]; - } - - /** - * Export the folder identified by folder id to text - */ - private void exportFolderToText(String folderId, PrintStream ps) { - // Query notes belong to this folder 通过查询parent,id是文件夹id的note来选出制定ID文件夹下的Note - 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 { - // Print note's last modified date ps里面保存有这份note的日期 - ps.println(String.format(getFormat(FORMAT_NOTE_DATE), DateFormat.format( - mContext.getString(R.string.format_datetime_mdhm), - notesCursor.getLong(NOTE_COLUMN_MODIFIED_DATE)))); - // Query data belong to this note 将文件导出到text - String noteId = notesCursor.getString(NOTE_COLUMN_ID); - exportNoteToText(noteId, ps); - } while (notesCursor.moveToNext()); - } - notesCursor.close(); - } - } - - /** - * Export note identified by id to a print stream - */ - 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) {//利用光标来扫面内容,区别为callnote和note两种,靠ps.printline输出 - if (dataCursor.moveToFirst()) { - do { - String mimeType = dataCursor.getString(DATA_COLUMN_MIME_TYPE); - if (DataConstants.CALL_NOTE.equals(mimeType)) { - // Print phone number 判断是否为空字符 - String phoneNumber = dataCursor.getString(DATA_COLUMN_PHONE_NUMBER); - long callDate = dataCursor.getLong(DATA_COLUMN_CALL_DATE); - String location = dataCursor.getString(DATA_COLUMN_CONTENT); - - if (!TextUtils.isEmpty(phoneNumber)) { - ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), - phoneNumber)); - } - // Print call date - ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), DateFormat - .format(mContext.getString(R.string.format_datetime_mdhm), - callDate))); - // Print call attachment location - if (!TextUtils.isEmpty(location)) { - ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), - location)); - } - } else if (DataConstants.NOTE.equals(mimeType)) { - String content = dataCursor.getString(DATA_COLUMN_CONTENT); - if (!TextUtils.isEmpty(content)) { - ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), - content)); - } - } - } while (dataCursor.moveToNext()); - } - dataCursor.close(); - } - // print a line separator between note - try { - ps.write(new byte[] { - Character.LINE_SEPARATOR, Character.LETTER_NUMBER - }); - } catch (IOException e) { - Log.e(TAG, e.toString()); - } - } - - /** - * Note will be exported as text which is user readable - */ - public int exportToText() {//总函数,调用上面的exportFolder和exportNote - if (!externalStorageAvailable()) { - Log.d(TAG, "Media was not mounted"); - return STATE_SD_CARD_UNMOUONTED; - } - - PrintStream ps = getExportToTextPrintStream(); - if (ps == null) { - Log.e(TAG, "get print stream error"); - return STATE_SYSTEM_ERROR; - } - // First export folder and its notes 导出文件夹,就是导出里面包含的便签 - Cursor folderCursor = mContext.getContentResolver().query( - Notes.CONTENT_NOTE_URI, - NOTE_PROJECTION, - "(" + NoteColumns.TYPE + "=" + Notes.TYPE_FOLDER + " AND " - + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER + ") OR " - + NoteColumns.ID + "=" + Notes.ID_CALL_RECORD_FOLDER, null, null); - - if (folderCursor != null) { - if (folderCursor.moveToFirst()) { - do { - // Print folder's name - String folderName = ""; - if(folderCursor.getLong(NOTE_COLUMN_ID) == Notes.ID_CALL_RECORD_FOLDER) { - folderName = mContext.getString(R.string.call_record_folder_name); - } else { - folderName = folderCursor.getString(NOTE_COLUMN_SNIPPET); - } - if (!TextUtils.isEmpty(folderName)) { - ps.println(String.format(getFormat(FORMAT_FOLDER_NAME), folderName)); - } - String folderId = folderCursor.getString(NOTE_COLUMN_ID); - exportFolderToText(folderId, ps); - } while (folderCursor.moveToNext()); - } - folderCursor.close(); - } - - // Export notes in root's folder 将根目录里的便签导出 - Cursor noteCursor = mContext.getContentResolver().query( - Notes.CONTENT_NOTE_URI, - NOTE_PROJECTION, - NoteColumns.TYPE + "=" + +Notes.TYPE_NOTE + " AND " + NoteColumns.PARENT_ID - + "=0", null, null); - - if (noteCursor != null) { - if (noteCursor.moveToFirst()) { - do { - ps.println(String.format(getFormat(FORMAT_NOTE_DATE), DateFormat.format( - mContext.getString(R.string.format_datetime_mdhm), - noteCursor.getLong(NOTE_COLUMN_MODIFIED_DATE)))); - // Query data belong to this note - String noteId = noteCursor.getString(NOTE_COLUMN_ID); - exportNoteToText(noteId, ps); - } while (noteCursor.moveToNext()); - } - noteCursor.close(); - } - ps.close(); - - return STATE_SUCCESS; - } - - /** - * Get a print stream pointed to the file {@generateExportedTextFile} - */ - 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; - } - mFileName = file.getName(); - mFileDirectory = mContext.getString(R.string.file_path); - PrintStream ps = null; - try { - FileOutputStream fos = new FileOutputStream(file); - ps = new PrintStream(fos);//将ps输出流输出到特定文件,目的是导出到文件,而不是直接输出 - } catch (FileNotFoundException e) { - e.printStackTrace(); - return null; - } catch (NullPointerException e) { - e.printStackTrace(); - return null; - } - return ps; - } - } - - /** - * Generate the text file to store imported data - */ - private static File generateFileMountedOnSDcard(Context context, int filePathResId, int fileNameFormatResId) { - StringBuilder sb = new StringBuilder(); - sb.append(Environment.getExternalStorageDirectory());//外部的储存路径 - 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 { - if (!filedir.exists()) { - filedir.mkdir();//如果文件不存在就新建文件 - } - if (!file.exists()) { - file.createNewFile(); - } - return file; - } catch (SecurityException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - //try catch 异常处理 - return null; - } -} - - diff --git a/src/tool/DataUtils.java b/src/tool/DataUtils.java deleted file mode 100644 index 1a2266e..0000000 --- a/src/tool/DataUtils.java +++ /dev/null @@ -1,295 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -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; - -//处理数据的转换和格式化 -public class DataUtils { - public static final String TAG = "DataUtils"; - public static boolean batchDeleteNotes(ContentResolver resolver, HashSet ids) { //批量删除笔记 - if (ids == null) { //为空返回处理处理完成 - Log.d(TAG, "the ids is null"); - return true; - } - if (ids.size() == 0) { //大小为零返回处理完成 - Log.d(TAG, "no id is in the hashset"); - return true; - } - - 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)); - 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; - } - 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; - } - //将笔记放入文件夹中 - public static void moveNoteToFoler(ContentResolver resolver, long id, long srcFolderId, long desFolderId) { - ContentValues values = new ContentValues(); - 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); - } - //批量移动文件到文件夹中 - public static boolean batchMoveToFolder(ContentResolver resolver, HashSet ids, - long folderId) { - if (ids == null) { - Log.d(TAG, "the ids is null"); - return true; - } - - ArrayList operationList = new ArrayList(); - for (long id : ids) { - ContentProviderOperation.Builder builder = ContentProviderOperation - .newUpdate(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id)); //欲更新的操作者 - builder.withValue(NoteColumns.PARENT_ID, folderId); - 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, "delete 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; - } - - /** - * Get the all folder count except system folders {@link Notes#TYPE_SYSTEM}} - */ //计数用户除开系统文件之外的其余文件。 - public static int getUserFolderCount(ContentResolver resolver) { - Cursor cursor =resolver.query(Notes.CONTENT_NOTE_URI, //光标指向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(); //最终关闭,可能存在问题,cursor可能无法正常释放,从而导致程序崩溃 - } - } - } - return count; - } - //可视化操作数据库,搭建ui界面方便用户操作本地数据库 - public static boolean visibleInNoteDatabase(ContentResolver resolver, long noteId, int type) { - Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), - null, - NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER, - new String [] {String.valueOf(type)}, - null); - - boolean exist = false; - if (cursor != null) { - if (cursor.getCount() > 0) { - exist = true; - } - cursor.close(); - } - return exist; - } - //判断是否存在笔记数据库 - public static boolean existInNoteDatabase(ContentResolver resolver, long noteId) { - Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), - null, null, null, null); - - boolean exist = false; - if (cursor != null) { - if (cursor.getCount() > 0) { //计数如果大于零,就说明存在 - exist = true; - } - cursor.close(); - } - return exist; - } - //判断是否存在数据库 - public static boolean existInDataDatabase(ContentResolver resolver, long dataId) { - Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_DATA_URI, dataId), - null, null, null, null); - - boolean exist = false; - if (cursor != null) { - if (cursor.getCount() > 0) { - exist = true; - } - cursor.close(); - } - return exist; - } - //判断可视化文件夹名称是否合法 - public static boolean checkVisibleFolderName(ContentResolver resolver, String name) { - Cursor cursor = resolver.query(Notes.CONTENT_NOTE_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; - if(cursor != null) { - if(cursor.getCount() > 0) { //判断是否存在 - exist = true; - } - cursor.close(); - } - return exist; - } - //哈希设置获取文件夹部件 - public static HashSet getFolderNoteWidget(ContentResolver resolver, long folderId) { - Cursor c = resolver.query(Notes.CONTENT_NOTE_URI, //设置光标 - new String[] { NoteColumns.WIDGET_ID, NoteColumns.WIDGET_TYPE }, - NoteColumns.PARENT_ID + "=?", - new String[] { String.valueOf(folderId) }, - null); - - HashSet set = null; - if (c != null) { //光标不指向空,意味着存在 - if (c.moveToFirst()) { //移动到第一位 - set = new HashSet(); - do { - try { - AppWidgetAttribute widget = new AppWidgetAttribute(); - widget.widgetId = c.getInt(0); //得到部件id,0是请求代码 - widget.widgetType = c.getInt(1); //得到部件种类,1是请求代码 - set.add(widget); //将部件加入到哈希设置中 - } catch (IndexOutOfBoundsException e) { - Log.e(TAG, e.toString()); //检测异常,加入到错误日志文件中去 - } - } while (c.moveToNext()); - } - c.close(); - } - return set; - } - //得到电话号码笔记id - public static String getCallNumberByNoteId(ContentResolver resolver, long noteId) { - Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI, //设置光标 - new String [] { CallNote.PHONE_NUMBER }, - CallNote.NOTE_ID + "=? AND " + CallNote.MIME_TYPE + "=?", - 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 ""; - } - //得到电话号码和电话日期 - public static long getNoteIdByPhoneNumberAndCallDate(ContentResolver resolver, String phoneNumber, long callDate) { - Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI, - new String [] { CallNote.NOTE_ID },//设置光标 - CallNote.CALL_DATE + "=? AND " + CallNote.MIME_TYPE + "=? AND PHONE_NUMBERS_EQUAL(" - + CallNote.PHONE_NUMBER + ",?)", - new String [] { String.valueOf(callDate), CallNote.CONTENT_ITEM_TYPE, phoneNumber }, - null); - - if (cursor != null) { //光标不为空 - if (cursor.moveToFirst()) { - try { - return cursor.getLong(0); - } catch (IndexOutOfBoundsException e) { //检测异常,加入到错误日志文件中去 - Log.e(TAG, "Get call note id fails " + e.toString()); - } - } - cursor.close(); - } - return 0; - } - //得到片段id - public static String getSnippetById(ContentResolver resolver, long noteId) { - Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI, //设置光标 - new String [] { NoteColumns.SNIPPET }, - NoteColumns.ID + "=?", - new String [] { String.valueOf(noteId)}, - null); - - if (cursor != null) { //光标不为空 - String snippet = ""; - if (cursor.moveToFirst()) { //移动到开始 - snippet = cursor.getString(0); //通过请求代码0,请求获取字符串,并传递给snippet - } - cursor.close(); //关闭光标 - return snippet; - } //抛出不合法提示 - throw new IllegalArgumentException("Note is not found with id: " + noteId); - } - //得到规范的片段 - 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/tool/GTaskStringUtils.java b/src/tool/GTaskStringUtils.java deleted file mode 100644 index 666b729..0000000 --- a/src/tool/GTaskStringUtils.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.tool; - -public class GTaskStringUtils { - - public final static String GTASK_JSON_ACTION_ID = "action_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"; - - 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"; - - public final static String GTASK_JSON_DEFAULT_LIST_ID = "default_list_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"; - - 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"; - - 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"; - - public final static String GTASK_JSON_NOTES = "notes"; - - public final static String GTASK_JSON_PARENT_ID = "parent_id"; - - public final static String GTASK_JSON_PRIOR_SIBLING_ID = "prior_sibling_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"; - - public final static String MIUI_FOLDER_PREFFIX = "[MIUI_Notes]"; - - 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"; - - 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/tool/ResourceParser.java b/src/tool/ResourceParser.java deleted file mode 100644 index 874faf5..0000000 --- a/src/tool/ResourceParser.java +++ /dev/null @@ -1,261 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.tool; - -import android.content.Context; -import android.preference.PreferenceManager; - -import net.micode.notes.R; -import net.micode.notes.ui.NotesPreferenceActivity; - -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获取笔记背景资源 - * @param id 颜色id - * @return 背景资源id - */ - public static int getNoteBgResource(int id) { - return BG_EDIT_RESOURCES[id]; - } - - /** - * 根据id获取笔记标题背景资源 - * @param id 颜色id - * @return 标题背景资源id - */ - public static int getNoteTitleBgResource(int id) { - return BG_EDIT_TITLE_RESOURCES[id]; - } - } - - /** - * 获取默认笔记背景id - * @param context 上下文对象,用于访问SharedPreferences - * @return 笔记背景资源id - */ - public static int getDefaultBgId(Context context) { - // 如果用户设置了背景颜色,则随机选择一个背景,否则使用默认背景 - if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean( - NotesPreferenceActivity.PREFERENCE_SET_BG_COLOR_KEY, false)) { - return (int) (Math.random() * NoteBgResources.BG_EDIT_RESOURCES.length); - } else { - 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 - }; - - /** - * 获取第一个笔记项的背景资源 - * @param id 颜色id - * @return 背景资源id - */ - public static int getNoteBgFirstRes(int id) { - return BG_FIRST_RESOURCES[id]; - } - - /** - * 获取最后一个笔记项的背景资源 - * @param id 颜色id - * @return 背景资源id - */ - public static int getNoteBgLastRes(int id) { - return BG_LAST_RESOURCES[id]; - } - - /** - * 获取单个笔记项的背景资源 - * @param id 颜色id - * @return 背景资源id - */ - public static int getNoteBgSingleRes(int id) { - return BG_SINGLE_RESOURCES[id]; - } - - /** - * 获取普通笔记项的背景资源 - * @param id 颜色id - * @return 背景资源id - */ - public static int getNoteBgNormalRes(int id) { - return BG_NORMAL_RESOURCES[id]; - } - - /** - * 获取文件夹背景资源 - * @return 文件夹背景资源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, - R.drawable.widget_2x_blue, - R.drawable.widget_2x_white, - R.drawable.widget_2x_green, - R.drawable.widget_2x_red, - }; - - /** - * 根据id获取2x小部件背景资源 - * @param id 颜色id - * @return 背景资源id - */ - 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, - R.drawable.widget_4x_blue, - R.drawable.widget_4x_white, - R.drawable.widget_4x_green, - R.drawable.widget_4x_red - }; - - /** - * 根据id获取4x小部件背景资源 - * @param id 颜色id - * @return 背景资源id - */ - 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获取文本外观资源 - * @param id 外观id - * @return 文本外观资源id - */ - public static int getTexAppearanceResource(int id) { - // 若id超出资源数组范围,则返回默认字体大小 - if (id >= TEXTAPPEARANCE_RESOURCES.length) { - return BG_DEFAULT_FONT_SIZE; - } - return TEXTAPPEARANCE_RESOURCES[id]; - } - - /** - * 获取文本外观资源的数量 - * @return 资源数量 - */ - public static int getResourcesSize() { - return TEXTAPPEARANCE_RESOURCES.length; - } - } -} diff --git a/src/ui/AlarmAlertActivity.java b/src/ui/AlarmAlertActivity.java deleted file mode 100644 index 49f58a8..0000000 --- a/src/ui/AlarmAlertActivity.java +++ /dev/null @@ -1,208 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.ui; - -import android.app.Activity; //表示引入 Android 应用程序中的 Activity 类,用于创建用户界面 -import android.app.AlertDialog; //表示引入 Android 应用程序中的 AlertDialog 类,用于创建对话框。 -import android.content.Context; //表示引入 Android 应用程序中的 Context 类,用于访问应用程序的资源和执行操作。 -import android.content.DialogInterface; //表示引入 Android 应用程序中的 DialogInterface 类,用于处理对话框事件 -import android.content.DialogInterface.OnClickListener; //表示引入 Android 应用程序中的 OnClickListener 接口,用于处理对话框按钮点击事件。 -import android.content.DialogInterface.OnDismissListener; //表示引入 Android 应用程序中的 OnDismissListener 接口,用于处理对话框消失事件 -import android.content.Intent; //表示引入 Android 应用程序中的 Intent 类,用于在应用程序组件之间进行通信。 -import android.media.AudioManager; //表示引入 Android 应用程序中的 AudioManager 类,用于控制音频管理器。 -import android.media.MediaPlayer; //表示引入 Android 应用程序中的 MediaPlayer 类,用于实现音频播放功能。 -import android.media.RingtoneManager; //表示引入 Android 应用程序中的 RingtoneManager 类,用于管理铃声。 -import android.net.Uri; //表示引入 Android 应用程序中的 Uri 类,用于表示统一资源标识符。 -import android.os.Bundle; //表示引入 Android 应用程序中的 Bundle 类,用于传递数据。 -import android.os.PowerManager; //表示引入 Android 应用程序中的 PowerManager 类,用于管理设备电源。 -import android.provider.Settings; //表示引入 Android 应用程序中的 Settings 类,用于访问设备设置。 -import android.view.Window; //表示引入 Android 应用程序中的 Window 类,用于管理窗口。 -import android.view.WindowManager; //表示引入 Android 应用程序中的 WindowManager 类,用于管理窗口布局和显示。 - -import net.micode.notes.R; -import net.micode.notes.data.Notes; -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 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中获得状态数据 - 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()是实现数据共享,实例存储。 - 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; - } - /* - try - { - // 代码区 - } - catch(Exception e) - { - // 异常处理 - } - 代码区如果有错误,就会返回所写异常的处理。*/ - 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,得到闹钟提示音 - int silentModeStreams = Settings.System.getInt(getContentResolver(), - Settings.System.MODE_RINGER_STREAMS_AFFECTED, 0); - - if ((silentModeStreams & (1 << AudioManager.STREAM_ALARM)) != 0) { - mPlayer.setAudioStreamType(silentModeStreams); - } else { - mPlayer.setAudioStreamType(AudioManager.STREAM_ALARM); - } - try { - mPlayer.setDataSource(this, url); - //方法:setDataSource(Context context, Uri uri) - //解释:无返回值,设置多媒体数据来源【根据 Uri】 - mPlayer.prepare(); - //准备同步 - mPlayer.setLooping(true); - //设置是否循环播放 - mPlayer.start(); - //开始播放 - } catch (IllegalArgumentException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - //e.printStackTrace()函数功能是抛出异常, 还将显示出更深的调用信息 - //System.out.println(e),这个方法打印出异常,并且输出在哪里出现的异常 - } catch (SecurityException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (IllegalStateException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - private void showActionDialog() { - AlertDialog.Builder dialog = new AlertDialog.Builder(this); - //AlertDialog的构造方法全部是Protected的 - //所以不能直接通过new一个AlertDialog来创建出一个AlertDialog。 - //要创建一个AlertDialog,就要用到AlertDialog.Builder中的create()方法 - //如这里的dialog就是新建了一个AlertDialog - dialog.setTitle(R.string.app_name); - //为对话框设置标题 - dialog.setMessage(mSnippet); - //为对话框设置内容 - dialog.setPositiveButton(R.string.notealert_ok, this); - //给对话框添加"Yes"按钮 - if (isScreenOn()) { - dialog.setNegativeButton(R.string.notealert_enter, this); - }//对话框添加"No"按钮 - dialog.show().setOnDismissListener(this); - } - - public void onClick(DialogInterface dialog, int which) { - switch (which) { - //用which来选择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为键 - startActivity(intent); - //开始动作 - break; - default: - //这是确定操作 - break; - } - } - - public void onDismiss(DialogInterface dialog) { - //忽略 - stopAlarmSound(); - //停止闹钟声音 - finish(); - //完成该动作 - } - - private void stopAlarmSound() { - if (mPlayer != null) { - mPlayer.stop(); - //停止播放 - mPlayer.release(); - //释放MediaPlayer对象 - mPlayer = null; - } - } -} diff --git a/src/ui/AlarmInitReceiver.java b/src/ui/AlarmInitReceiver.java deleted file mode 100644 index bbeae00..0000000 --- a/src/ui/AlarmInitReceiver.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.ui; - -import android.app.AlarmManager; -import android.app.PendingIntent; -import android.content.BroadcastReceiver; -import android.content.ContentUris; -import android.content.Context; -import android.content.Intent; -import android.database.Cursor; - -import net.micode.notes.data.Notes; -import net.micode.notes.data.Notes.NoteColumns; - - -public class AlarmInitReceiver extends BroadcastReceiver { - - private static final String [] PROJECTION = new String [] { - NoteColumns.ID, - NoteColumns.ALERTED_DATE - }; - //对数据库的操作,调用标签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时起的毫秒数 - 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转化为字符串 - null); - //Cursor在这里的作用是通过查找数据库中的标签内容,找到和当前系统时间相等的标签 - - if (c != null) { - if (c.moveToFirst()) { - do { - long alertDate = c.getLong(COLUMN_ALERTED_DATE); - Intent sender = new Intent(context, AlarmReceiver.class); - sender.setData(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, c.getLong(COLUMN_ID))); - PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, sender, 0); - AlarmManager alermManager = (AlarmManager) context - .getSystemService(Context.ALARM_SERVICE); - alermManager.set(AlarmManager.RTC_WAKEUP, alertDate, pendingIntent); - } while (c.moveToNext()); - } - c.close(); - } - //然而通过网上查找资料发现,对于闹钟机制的启动,通常需要上面的几个步骤 - //如新建Intent、PendingIntent以及AlarmManager等 - //这里就是根据数据库里的闹钟时间创建一个闹钟机制 - } -} diff --git a/src/ui/AlarmReceiver.java b/src/ui/AlarmReceiver.java deleted file mode 100644 index 814fec2..0000000 --- a/src/ui/AlarmReceiver.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.ui; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; - -public class AlarmReceiver extends BroadcastReceiver { - @Override - public void onReceive(Context context, Intent intent) { - intent.setClass(context, AlarmAlertActivity.class); - //启动AlarmAlertActivity - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - //activity要存在于activity的栈中,而非activity的途径启动activity时必然不存在一个activity的栈 - //所以要新起一个栈装入启动的activity - context.startActivity(intent); - } -} -//这是实现alarm这个功能最接近用户层的包,基于上面的两个包, -//作用还需要深究但是对于setClass和addFlags的 diff --git a/src/ui/DateTimePicker.java b/src/ui/DateTimePicker.java deleted file mode 100644 index f917268..0000000 --- a/src/ui/DateTimePicker.java +++ /dev/null @@ -1,508 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.ui;//将当前的 Java 文件放置在 net.micode.notes.ui 这个包中。 - - -import java.text.DateFormatSymbols; -import java.util.Calendar; - -import net.micode.notes.R; - - -import android.content.Context; -import android.text.format.DateFormat; -import android.view.View; -import android.widget.FrameLayout; -import android.widget.NumberPicker; - -public class DateTimePicker extends FrameLayout { - //FrameLayout是布局模板之一 - //所有的子元素全部在屏幕的右上方 - private static final boolean DEFAULT_ENABLE_STATE = true; - - private static final int HOURS_IN_HALF_DAY = 12; - private static final int HOURS_IN_ALL_DAY = 24; - private static final int DAYS_IN_ALL_WEEK = 7; - private static final int DATE_SPINNER_MIN_VAL = 0; - private static final int DATE_SPINNER_MAX_VAL = DAYS_IN_ALL_WEEK - 1; - private static final int HOUR_SPINNER_MIN_VAL_24_HOUR_VIEW = 0; - private static final int HOUR_SPINNER_MAX_VAL_24_HOUR_VIEW = 23; - private static final int HOUR_SPINNER_MIN_VAL_12_HOUR_VIEW = 1; - private static final int HOUR_SPINNER_MAX_VAL_12_HOUR_VIEW = 12; - private static final int MINUT_SPINNER_MIN_VAL = 0; - private static final int MINUT_SPINNER_MAX_VAL = 59; - private static final int AMPM_SPINNER_MIN_VAL = 0; - private static final int AMPM_SPINNER_MAX_VAL = 1; - //初始化控件 - private final NumberPicker mDateSpinner; - private final NumberPicker mHourSpinner; - private final NumberPicker mMinuteSpinner; - private final NumberPicker mAmPmSpinner; - //NumberPicker是数字选择器 - //这里定义的四个变量全部是在设置闹钟时需要选择的变量(如日期、时、分、上午或者下午) - private Calendar mDate; - //定义了Calendar类型的变量mDate,用于操作时间 - private String[] mDateDisplayValues = new String[DAYS_IN_ALL_WEEK]; - - private boolean mIsAm; - - private boolean mIs24HourView; - - private boolean mIsEnabled = DEFAULT_ENABLE_STATE; - - private boolean mInitialising; - - private OnDateTimeChangedListener mOnDateTimeChangedListener; - - private NumberPicker.OnValueChangeListener mOnDateChangedListener = new NumberPicker.OnValueChangeListener() { - @Override - public void onValueChange(NumberPicker picker, int oldVal, int newVal) { - mDate.add(Calendar.DAY_OF_YEAR, newVal - oldVal); - updateDateControl(); - onDateTimeChanged(); - } - };//OnValueChangeListener,这是时间改变监听器,这里主要是对日期的监听 - //将现在日期的值传递给mDate;updateDateControl是同步操作 - - private NumberPicker.OnValueChangeListener mOnHourChangedListener = new NumberPicker.OnValueChangeListener() { - //这里是对 小时(Hour) 的监听 - @Override - public void onValueChange(NumberPicker picker, int oldVal, int newVal) { - boolean isDateChanged = false; - Calendar cal = Calendar.getInstance(); - //声明一个Calendar的变量cal,便于后续的操作 - if (!mIs24HourView) { - if (!mIsAm && oldVal == HOURS_IN_HALF_DAY - 1 && newVal == HOURS_IN_HALF_DAY) { - cal.setTimeInMillis(mDate.getTimeInMillis()); - cal.add(Calendar.DAY_OF_YEAR, 1); - isDateChanged = true; - //这里是对于12小时制时,晚上11点和12点交替时对日期的更改 - } else if (mIsAm && oldVal == HOURS_IN_HALF_DAY && newVal == HOURS_IN_HALF_DAY - 1) { - cal.setTimeInMillis(mDate.getTimeInMillis()); - cal.add(Calendar.DAY_OF_YEAR, -1); - isDateChanged = true; - } - //这里是对于12小时制时,凌晨11点和12点交替时对日期的更改 - if (oldVal == HOURS_IN_HALF_DAY - 1 && newVal == HOURS_IN_HALF_DAY || - oldVal == HOURS_IN_HALF_DAY && newVal == HOURS_IN_HALF_DAY - 1) { - mIsAm = !mIsAm; - updateAmPmControl(); - }//这里是对于12小时制时,中午11点和12点交替时对AM和PM的更改 - } else { - if (oldVal == HOURS_IN_ALL_DAY - 1 && newVal == 0) { - cal.setTimeInMillis(mDate.getTimeInMillis()); - cal.add(Calendar.DAY_OF_YEAR, 1); - isDateChanged = true; - //这里是对于24小时制时,晚上11点和12点交替时对日期的更改 - } else if (oldVal == 0 && newVal == HOURS_IN_ALL_DAY - 1) { - cal.setTimeInMillis(mDate.getTimeInMillis()); - cal.add(Calendar.DAY_OF_YEAR, -1); - isDateChanged = true; - } - } //这里是对于12小时制时,凌晨11点和12点交替时对日期的更改 - int newHour = mHourSpinner.getValue() % HOURS_IN_HALF_DAY + (mIsAm ? 0 : HOURS_IN_HALF_DAY); - //通过数字选择器对newHour的赋值 - mDate.set(Calendar.HOUR_OF_DAY, newHour); - //通过set函数将新的Hour值传给mDate - onDateTimeChanged(); - if (isDateChanged) { - setCurrentYear(cal.get(Calendar.YEAR)); - setCurrentMonth(cal.get(Calendar.MONTH)); - setCurrentDay(cal.get(Calendar.DAY_OF_MONTH)); - } - } - }; - - private NumberPicker.OnValueChangeListener mOnMinuteChangedListener = new NumberPicker.OnValueChangeListener() { - @Override - //这里是对 分钟(Minute)改变的监听 - public void onValueChange(NumberPicker picker, int oldVal, int newVal) { - int minValue = mMinuteSpinner.getMinValue(); - int maxValue = mMinuteSpinner.getMaxValue(); - int offset = 0; - //设置offset,作为小时改变的一个记录数据 - if (oldVal == maxValue && newVal == minValue) { - offset += 1; - } else if (oldVal == minValue && newVal == maxValue) { - offset -= 1; - } - //如果原值为59,新值为0,则offset加1 - //如果原值为0,新值为59,则offset减1 - if (offset != 0) { - mDate.add(Calendar.HOUR_OF_DAY, offset); - mHourSpinner.setValue(getCurrentHour()); - updateDateControl(); - int newHour = getCurrentHourOfDay(); - if (newHour >= HOURS_IN_HALF_DAY) { - mIsAm = false; - updateAmPmControl(); - } else { - mIsAm = true; - updateAmPmControl(); - } - } - mDate.set(Calendar.MINUTE, newVal); - onDateTimeChanged(); - } - }; - - private NumberPicker.OnValueChangeListener mOnAmPmChangedListener = new NumberPicker.OnValueChangeListener() { - //对AM和PM的监听 - @Override - public void onValueChange(NumberPicker picker, int oldVal, int newVal) { - mIsAm = !mIsAm; - if (mIsAm) { - mDate.add(Calendar.HOUR_OF_DAY, -HOURS_IN_HALF_DAY); - } else { - mDate.add(Calendar.HOUR_OF_DAY, HOURS_IN_HALF_DAY); - } - updateAmPmControl(); - onDateTimeChanged(); - } - }; - - public interface OnDateTimeChangedListener { - void onDateTimeChanged(DateTimePicker view, int year, int month, - int dayOfMonth, int hourOfDay, int minute); - } - - public DateTimePicker(Context context) { - this(context, System.currentTimeMillis()); - }//通过对数据库的访问,获取当前的系统时间 - - public DateTimePicker(Context context, long date) { - this(context, date, DateFormat.is24HourFormat(context)); - }//上面函数的得到的是一个天文数字(1970至今的秒数),需要DateFormat将其变得有意义 - - public DateTimePicker(Context context, long date, boolean is24HourView) { - super(context); - //获取系统时间 - mDate = Calendar.getInstance(); - mInitialising = true; - mIsAm = getCurrentHourOfDay() >= HOURS_IN_HALF_DAY; - inflate(context, R.layout.datetime_picker, this); - //如果当前Activity里用到别的layout,比如对话框layout - //还要设置这个layout上的其他组件的内容,就必须用inflate()方法先将对话框的layout找出来 - //然后再用findViewById()找到它上面的其它组件 - mDateSpinner = (NumberPicker) findViewById(R.id.date); - mDateSpinner.setMinValue(DATE_SPINNER_MIN_VAL); - mDateSpinner.setMaxValue(DATE_SPINNER_MAX_VAL); - mDateSpinner.setOnValueChangedListener(mOnDateChangedListener); - - mHourSpinner = (NumberPicker) findViewById(R.id.hour); - mHourSpinner.setOnValueChangedListener(mOnHourChangedListener); - mMinuteSpinner = (NumberPicker) findViewById(R.id.minute); - mMinuteSpinner.setMinValue(MINUT_SPINNER_MIN_VAL); - mMinuteSpinner.setMaxValue(MINUT_SPINNER_MAX_VAL); - mMinuteSpinner.setOnLongPressUpdateInterval(100); - mMinuteSpinner.setOnValueChangedListener(mOnMinuteChangedListener); - - String[] stringsForAmPm = new DateFormatSymbols().getAmPmStrings(); - mAmPmSpinner = (NumberPicker) findViewById(R.id.amPm); - mAmPmSpinner.setMinValue(AMPM_SPINNER_MIN_VAL); - mAmPmSpinner.setMaxValue(AMPM_SPINNER_MAX_VAL); - mAmPmSpinner.setDisplayedValues(stringsForAmPm); - mAmPmSpinner.setOnValueChangedListener(mOnAmPmChangedListener); - - // update controls to initial state - updateDateControl(); - updateHourControl(); - updateAmPmControl(); - - set24HourView(is24HourView); - - // set to current time - setCurrentDate(date); - - setEnabled(isEnabled()); - - // set the content descriptions - mInitialising = false; - } - - @Override - public void setEnabled(boolean enabled) { - if (mIsEnabled == enabled) { - return; - } - super.setEnabled(enabled); - mDateSpinner.setEnabled(enabled); - mMinuteSpinner.setEnabled(enabled); - mHourSpinner.setEnabled(enabled); - mAmPmSpinner.setEnabled(enabled); - mIsEnabled = enabled; - } - //存在疑问!!!!!!!!!!!!!setEnabled的作用 - //下面的代码通过原程序的注释已经比较清晰,另外可以通过函数名来判断 - //下面的各函数主要是对上面代码引用到的各函数功能的实现 - @Override - public boolean isEnabled() { - return mIsEnabled; - } - - /** - * Get the current date in millis - * - * @return the current date in millis - */ - public long getCurrentDateInTimeMillis() { - return mDate.getTimeInMillis(); - }//实现函数——得到当前的秒数 - - /** - * Set the current date - * - * @param date The current date in millis - */ - public void setCurrentDate(long date) { - Calendar cal = Calendar.getInstance(); - cal.setTimeInMillis(date); - setCurrentDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), - cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE)); - }//实现函数功能——设置当前的时间,参数是date - - /** - * Set the current date - * - * @param year The current year - * @param month The current month - * @param dayOfMonth The current dayOfMonth - * @param hourOfDay The current hourOfDay - * @param minute The current minute - */ - public void setCurrentDate(int year, int month, - int dayOfMonth, int hourOfDay, int minute) { - setCurrentYear(year); - setCurrentMonth(month); - setCurrentDay(dayOfMonth); - setCurrentHour(hourOfDay); - setCurrentMinute(minute); - }//实现函数功能——设置当前的时间,参数是各详细的变量 - - /** - * Get current year - * - * @return The current year - */ - //下面是得到year、month、day等值 - public int getCurrentYear() { - return mDate.get(Calendar.YEAR); - } - - /** - * Set current year - * - * @param year The current year - */ - public void setCurrentYear(int year) { - if (!mInitialising && year == getCurrentYear()) { - return; - } - mDate.set(Calendar.YEAR, year); - updateDateControl(); - onDateTimeChanged(); - } - - /** - * Get current month in the year - * - * @return The current month in the year - */ - public int getCurrentMonth() { - return mDate.get(Calendar.MONTH); - } - - /** - * Set current month in the year - * - * @param month The month in the year - */ - public void setCurrentMonth(int month) { - if (!mInitialising && month == getCurrentMonth()) { - return; - } - mDate.set(Calendar.MONTH, month); - updateDateControl(); - onDateTimeChanged(); - } - - /** - * Get current day of the month - * - * @return The day of the month - */ - public int getCurrentDay() { - return mDate.get(Calendar.DAY_OF_MONTH); - } - - /** - * Set current day of the month - * - * @param dayOfMonth The day of the month - */ - public void setCurrentDay(int dayOfMonth) { - if (!mInitialising && dayOfMonth == getCurrentDay()) { - return; - } - mDate.set(Calendar.DAY_OF_MONTH, dayOfMonth); - updateDateControl(); - onDateTimeChanged(); - } - - /** - * Get current hour in 24 hour mode, in the range (0~23) - * @return The current hour in 24 hour mode - */ - public int getCurrentHourOfDay() { - return mDate.get(Calendar.HOUR_OF_DAY); - } - - private int getCurrentHour() { - if (mIs24HourView){ - return getCurrentHourOfDay(); - } else { - int hour = getCurrentHourOfDay(); - if (hour > HOURS_IN_HALF_DAY) { - return hour - HOURS_IN_HALF_DAY; - } else { - return hour == 0 ? HOURS_IN_HALF_DAY : hour; - } - } - } - - /** - * Set current hour in 24 hour mode, in the range (0~23) - * - * @param hourOfDay - */ - public void setCurrentHour(int hourOfDay) { - if (!mInitialising && hourOfDay == getCurrentHourOfDay()) { - return; - } - mDate.set(Calendar.HOUR_OF_DAY, hourOfDay); - if (!mIs24HourView) { - if (hourOfDay >= HOURS_IN_HALF_DAY) { - mIsAm = false; - if (hourOfDay > HOURS_IN_HALF_DAY) { - hourOfDay -= HOURS_IN_HALF_DAY; - } - } else { - mIsAm = true; - if (hourOfDay == 0) { - hourOfDay = HOURS_IN_HALF_DAY; - } - } - updateAmPmControl(); - } - mHourSpinner.setValue(hourOfDay); - onDateTimeChanged(); - } - - /** - * Get currentMinute - * - * @return The Current Minute - */ - public int getCurrentMinute() { - return mDate.get(Calendar.MINUTE); - } - - /** - * Set current minute - */ - public void setCurrentMinute(int minute) { - if (!mInitialising && minute == getCurrentMinute()) { - return; - } - mMinuteSpinner.setValue(minute); - mDate.set(Calendar.MINUTE, minute); - onDateTimeChanged(); - } - - /** - * @return true if this is in 24 hour view else false. - */ - public boolean is24HourView () { - return mIs24HourView; - } - - /** - * Set whether in 24 hour or AM/PM mode. - * - * @param is24HourView True for 24 hour mode. False for AM/PM mode. - */ - public void set24HourView(boolean is24HourView) { - if (mIs24HourView == is24HourView) { - return; - } - mIs24HourView = is24HourView; - mAmPmSpinner.setVisibility(is24HourView ? View.GONE : View.VISIBLE); - int hour = getCurrentHourOfDay(); - updateHourControl(); - setCurrentHour(hour); - updateAmPmControl(); - } - - private void updateDateControl() { - Calendar cal = Calendar.getInstance(); - cal.setTimeInMillis(mDate.getTimeInMillis()); - cal.add(Calendar.DAY_OF_YEAR, -DAYS_IN_ALL_WEEK / 2 - 1); - mDateSpinner.setDisplayedValues(null); - for (int i = 0; i < DAYS_IN_ALL_WEEK; ++i) { - cal.add(Calendar.DAY_OF_YEAR, 1); - mDateDisplayValues[i] = (String) DateFormat.format("MM.dd EEEE", cal); - } - mDateSpinner.setDisplayedValues(mDateDisplayValues); - mDateSpinner.setValue(DAYS_IN_ALL_WEEK / 2); - mDateSpinner.invalidate(); - }// 对于星期几的算法 - - private void updateAmPmControl() { - if (mIs24HourView) { - mAmPmSpinner.setVisibility(View.GONE); - } else { - int index = mIsAm ? Calendar.AM : Calendar.PM; - mAmPmSpinner.setValue(index); - mAmPmSpinner.setVisibility(View.VISIBLE); - }// 对于上下午操作的算法 - } - - private void updateHourControl() { - if (mIs24HourView) { - mHourSpinner.setMinValue(HOUR_SPINNER_MIN_VAL_24_HOUR_VIEW); - mHourSpinner.setMaxValue(HOUR_SPINNER_MAX_VAL_24_HOUR_VIEW); - } else { - mHourSpinner.setMinValue(HOUR_SPINNER_MIN_VAL_12_HOUR_VIEW); - mHourSpinner.setMaxValue(HOUR_SPINNER_MAX_VAL_12_HOUR_VIEW); - }// 对与小时的算法 - } - - /** - * Set the callback that indicates the 'Set' button has been pressed. - * @param callback the callback, if null will do nothing - */ - public void setOnDateTimeChangedListener(OnDateTimeChangedListener callback) { - mOnDateTimeChangedListener = callback; - } - - private void onDateTimeChanged() { - if (mOnDateTimeChangedListener != null) { - mOnDateTimeChangedListener.onDateTimeChanged(this, getCurrentYear(), - getCurrentMonth(), getCurrentDay(), getCurrentHourOfDay(), getCurrentMinute()); - } - } -} diff --git a/src/ui/DateTimePickerDialog.java b/src/ui/DateTimePickerDialog.java deleted file mode 100644 index 0bf2f00..0000000 --- a/src/ui/DateTimePickerDialog.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.ui; - -import java.util.Calendar; - -import net.micode.notes.R; -import net.micode.notes.ui.DateTimePicker; -import net.micode.notes.ui.DateTimePicker.OnDateTimeChangedListener; - -import android.app.AlertDialog; -import android.content.Context; -import android.content.DialogInterface; -import android.content.DialogInterface.OnClickListener; -import android.text.format.DateFormat; -import android.text.format.DateUtils; - -public class DateTimePickerDialog extends AlertDialog implements OnClickListener { - - private Calendar mDate = Calendar.getInstance(); - //创建一个Calendar类型的变量 mDate,方便时间的操作 - private boolean mIs24HourView; - private OnDateTimeSetListener mOnDateTimeSetListener; - //声明一个时间日期滚动选择控件 mOnDateTimeSetListener - private DateTimePicker mDateTimePicker; - //DateTimePicker控件,控件一般用于让用户可以从日期列表中选择单个值。 - //运行时,单击控件边上的下拉箭头,会显示为两个部分:一个下拉列表,一个用于选择日期的 - - public interface OnDateTimeSetListener { - void OnDateTimeSet(AlertDialog dialog, long date); - } - - public DateTimePickerDialog(Context context, long date) { - //对该界面对话框的实例化 - super(context); - //对数据库的操作 - mDateTimePicker = new DateTimePicker(context); - setView(mDateTimePicker); - //添加一个子视图 - mDateTimePicker.setOnDateTimeChangedListener(new OnDateTimeChangedListener() { - public void onDateTimeChanged(DateTimePicker view, int year, int month, - int dayOfMonth, int hourOfDay, int minute) { - mDate.set(Calendar.YEAR, year); - mDate.set(Calendar.MONTH, month); - mDate.set(Calendar.DAY_OF_MONTH, dayOfMonth); - mDate.set(Calendar.HOUR_OF_DAY, hourOfDay); - mDate.set(Calendar.MINUTE, minute); - //将视图中的各选项设置为系统当前时间 - updateTitle(mDate.getTimeInMillis()); - } - }); - mDate.setTimeInMillis(date); - //得到系统时间 - mDate.set(Calendar.SECOND, 0); - //将秒数设置为0 - mDateTimePicker.setCurrentDate(mDate.getTimeInMillis()); - setButton(context.getString(R.string.datetime_dialog_ok), this); - setButton2(context.getString(R.string.datetime_dialog_cancel), (OnClickListener)null); - //设置按钮 - set24HourView(DateFormat.is24HourFormat(this.getContext())); - //时间标准化打印 - updateTitle(mDate.getTimeInMillis()); - } - - public void set24HourView(boolean is24HourView) { - mIs24HourView = is24HourView; - } - - public void setOnDateTimeSetListener(OnDateTimeSetListener callBack) { - mOnDateTimeSetListener = callBack; - }//将时间日期滚动选择控件实例化 - - private void updateTitle(long date) { - int flag = - DateUtils.FORMAT_SHOW_YEAR | - DateUtils.FORMAT_SHOW_DATE | - DateUtils.FORMAT_SHOW_TIME; - flag |= mIs24HourView ? DateUtils.FORMAT_24HOUR : DateUtils.FORMAT_24HOUR; - setTitle(DateUtils.formatDateTime(this.getContext(), date, flag)); - }//android开发中常见日期管理工具类(API)——DateUtils:按照上下午显示时间 - - public void onClick(DialogInterface arg0, int arg1) { - if (mOnDateTimeSetListener != null) { - mOnDateTimeSetListener.OnDateTimeSet(this, mDate.getTimeInMillis()); - } - }//第一个参数arg0是接收到点击事件的对话框 - //第二个参数arg1是该对话框上的按钮 - -} \ No newline at end of file diff --git a/src/ui/DropdownMenu.java b/src/ui/DropdownMenu.java deleted file mode 100644 index 3e7386c..0000000 --- a/src/ui/DropdownMenu.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.ui; - -import android.content.Context; -import android.view.Menu; -import android.view.MenuItem; -import android.view.View; -import android.view.View.OnClickListener; -import android.widget.Button; -import android.widget.PopupMenu; -import android.widget.PopupMenu.OnMenuItemClickListener; - -import net.micode.notes.R; - -public class DropdownMenu { - private Button mButton; - private PopupMenu mPopupMenu; - //声明一个下拉菜单 - private Menu mMenu; - - public DropdownMenu(Context context, Button button, int menuId) { - mButton = button; - mButton.setBackgroundResource(R.drawable.dropdown_icon); - //设置这个view的背景 - mPopupMenu = new PopupMenu(context, mButton); - mMenu = mPopupMenu.getMenu(); - mPopupMenu.getMenuInflater().inflate(menuId, mMenu); - //MenuInflater是用来实例化Menu目录下的Menu布局文件 - //根据ID来确认menu的内容选项 - mButton.setOnClickListener(new OnClickListener() { - public void onClick(View v) { - mPopupMenu.show(); - } - }); - } - - public void setOnDropdownMenuItemClickListener(OnMenuItemClickListener listener) { - if (mPopupMenu != null) { - mPopupMenu.setOnMenuItemClickListener(listener); - }//设置菜单的监听 - } - - public MenuItem findItem(int id) { - return mMenu.findItem(id); - }//对于菜单选项的初始化,根据索引搜索菜单需要的选项 - - public void setTitle(CharSequence title) { - mButton.setText(title); - }//布局文件,设置标题 -} diff --git a/src/ui/FoldersListAdapter.java b/src/ui/FoldersListAdapter.java deleted file mode 100644 index fa714df..0000000 --- a/src/ui/FoldersListAdapter.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.ui; - -import android.content.Context; -import android.database.Cursor; -import android.view.View; -import android.view.ViewGroup; -import android.widget.CursorAdapter; -import android.widget.LinearLayout; -import android.widget.TextView; - -import net.micode.notes.R; -import net.micode.notes.data.Notes; -import net.micode.notes.data.Notes.NoteColumns; - - -public class FoldersListAdapter extends CursorAdapter { - //CursorAdapter是Cursor和ListView的接口 - //FoldersListAdapter继承了CursorAdapter的类 - //主要作用是便签数据库和用户的交互 - //这里就是用folder(文件夹)的形式展现给用户 - public static final String [] PROJECTION = { - NoteColumns.ID, - NoteColumns.SNIPPET - };//调用数据库中便签的ID和片段 - - public static final int ID_COLUMN = 0; - public static final int NAME_COLUMN = 1; - - public FoldersListAdapter(Context context, Cursor c) { - super(context, c); - // TODO Auto-generated constructor stub - }//数据库操作 - - @Override - public View newView(Context context, Cursor cursor, ViewGroup parent) { - //ViewGroup是容器 - return new FolderListItem(context); - }//创建一个文件夹,对于各文件夹中子标签的初始化 - - @Override - public void bindView(View view, Context context, Cursor cursor) { - if (view instanceof FolderListItem) { - String folderName = (cursor.getLong(ID_COLUMN) == Notes.ID_ROOT_FOLDER) ? context - .getString(R.string.menu_move_parent_folder) : cursor.getString(NAME_COLUMN); - ((FolderListItem) view).bind(folderName); - } - }//将各个布局文件绑定起来 - - public String getFolderName(Context context, int position) { - Cursor cursor = (Cursor) getItem(position); - return (cursor.getLong(ID_COLUMN) == Notes.ID_ROOT_FOLDER) ? context - .getString(R.string.menu_move_parent_folder) : cursor.getString(NAME_COLUMN); - }//根据数据库中标签的ID得到标签的各项内容 - - private class FolderListItem extends LinearLayout { - private TextView mName; - - public FolderListItem(Context context) { - super(context); - //操作数据库 - inflate(context, R.layout.folder_list_item, this); - //根据布局文件的名字等信息将其找出来 - mName = (TextView) findViewById(R.id.tv_folder_name); - } - - public void bind(String name) { - mName.setText(name); - } - } -} diff --git a/src/ui/NoteEditActivity.java b/src/ui/NoteEditActivity.java deleted file mode 100644 index 6dc52b0..0000000 --- a/src/ui/NoteEditActivity.java +++ /dev/null @@ -1,1068 +0,0 @@ -package net.micode.notes.ui; - -import android.app.Activity; -import android.app.AlarmManager; -import android.app.AlertDialog; -import android.app.PendingIntent; -import android.app.SearchManager; -import android.appwidget.AppWidgetManager; -import android.content.ContentUris; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.SharedPreferences; -import android.graphics.Paint; -import android.os.Bundle; -import android.preference.PreferenceManager; -import android.text.Spannable; -import android.text.SpannableString; -import android.text.TextUtils; -import android.text.format.DateUtils; -import android.text.style.BackgroundColorSpan; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuItem; -import android.view.MotionEvent; -import android.view.View; -import android.view.View.OnClickListener; -import android.view.WindowManager; -import android.widget.CheckBox; -import android.widget.CompoundButton; -import android.widget.CompoundButton.OnCheckedChangeListener; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; -import android.widget.Toast; - -import net.micode.notes.R; -import net.micode.notes.data.Notes; -import net.micode.notes.data.Notes.TextNote; -import net.micode.notes.model.WorkingNote; -import net.micode.notes.model.WorkingNote.NoteSettingChangedListener; -import net.micode.notes.tool.DataUtils; -import net.micode.notes.tool.ResourceParser; -import net.micode.notes.tool.ResourceParser.TextAppearanceResources; -import net.micode.notes.ui.DateTimePickerDialog.OnDateTimeSetListener; -import net.micode.notes.ui.NoteEditText; -import net.micode.notes.ui.NoteEditText.OnTextViewChangeListener; -import net.micode.notes.widget.NoteWidgetProvider_2x; -import net.micode.notes.widget.NoteWidgetProvider_4x; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - - -public class NoteEditActivity extends Activity implements OnClickListener, - NoteSettingChangedListener, OnTextViewChangeListener { - //该类主要是针对标签的编辑 - //继承了系统内部许多和监听有关的类 - private class HeadViewHolder { - public TextView tvModified; - - public ImageView ivAlertIcon; - - public TextView tvAlertDate; - - public ImageView ibSetBgColor; - } - //使用Map实现数据存储 - private static final Map sBgSelectorBtnsMap = new HashMap(); - static { - sBgSelectorBtnsMap.put(R.id.iv_bg_yellow, ResourceParser.YELLOW); - sBgSelectorBtnsMap.put(R.id.iv_bg_red, ResourceParser.RED); - sBgSelectorBtnsMap.put(R.id.iv_bg_blue, ResourceParser.BLUE); - sBgSelectorBtnsMap.put(R.id.iv_bg_green, ResourceParser.GREEN); - sBgSelectorBtnsMap.put(R.id.iv_bg_white, ResourceParser.WHITE); - //put函数是将指定值和指定键相连 - } - - private static final Map sBgSelectorSelectionMap = new HashMap(); - static { - sBgSelectorSelectionMap.put(ResourceParser.YELLOW, R.id.iv_bg_yellow_select); - sBgSelectorSelectionMap.put(ResourceParser.RED, R.id.iv_bg_red_select); - sBgSelectorSelectionMap.put(ResourceParser.BLUE, R.id.iv_bg_blue_select); - sBgSelectorSelectionMap.put(ResourceParser.GREEN, R.id.iv_bg_green_select); - sBgSelectorSelectionMap.put(ResourceParser.WHITE, R.id.iv_bg_white_select); - //put函数是将指定值和指定键相连 - } - - private static final Map sFontSizeBtnsMap = new HashMap(); - static { - sFontSizeBtnsMap.put(R.id.ll_font_large, ResourceParser.TEXT_LARGE); - sFontSizeBtnsMap.put(R.id.ll_font_small, ResourceParser.TEXT_SMALL); - sFontSizeBtnsMap.put(R.id.ll_font_normal, ResourceParser.TEXT_MEDIUM); - sFontSizeBtnsMap.put(R.id.ll_font_super, ResourceParser.TEXT_SUPER); - //put函数是将指定值和指定键相连 - } - - private static final Map sFontSelectorSelectionMap = new HashMap(); - static { - sFontSelectorSelectionMap.put(ResourceParser.TEXT_LARGE, R.id.iv_large_select); - sFontSelectorSelectionMap.put(ResourceParser.TEXT_SMALL, R.id.iv_small_select); - sFontSelectorSelectionMap.put(ResourceParser.TEXT_MEDIUM, R.id.iv_medium_select); - sFontSelectorSelectionMap.put(ResourceParser.TEXT_SUPER, R.id.iv_super_select); - //put函数是将指定值和指定键相连 - } - - private static final String TAG = "NoteEditActivity"; - - private HeadViewHolder mNoteHeaderHolder; - - private View mHeadViewPanel; - //私有化一个界面操作mHeadViewPanel,对表头的操作 - private View mNoteBgColorSelector; - //私有化一个界面操作mNoteBgColorSelector,对背景颜色的操作 - private View mFontSizeSelector; - //私有化一个界面操作mFontSizeSelector,对标签字体的操作 - private NoteEditText mNoteEditor; - //声明编辑控件,对文本操作 - private View mNoteEditorPanel; - //私有化一个界面操作mNoteEditorPanel,文本编辑的控制板 - //private WorkingNote mWorkingNote; - public WorkingNote mWorkingNote; - //对模板WorkingNote的初始化 - private SharedPreferences mSharedPrefs; - //私有化SharedPreferences的数据存储方式 - //它的本质是基于XML文件存储key-value键值对数据 - private int mFontSizeId; - //用于操作字体的大小 - private static final String PREFERENCE_FONT_SIZE = "pref_font_size"; - - private static final int SHORTCUT_ICON_TITLE_MAX_LEN = 10; - - public static final String TAG_CHECKED = String.valueOf('\u221A'); - public static final String TAG_UNCHECKED = String.valueOf('\u25A1'); - - private LinearLayout mEditTextList; - //线性布局 - private String mUserQuery; - private Pattern mPattern; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - this.setContentView(R.layout.note_edit); - //对数据库的访问操作 - if (savedInstanceState == null && !initActivityState(getIntent())) { - finish(); - return; - } - initResources(); - } - - /** - * Current activity may be killed when the memory is low. Once it is killed, for another time - * user load this activity, we should restore the former state - */ - @Override - protected void onRestoreInstanceState(Bundle savedInstanceState) { - super.onRestoreInstanceState(savedInstanceState); - if (savedInstanceState != null && savedInstanceState.containsKey(Intent.EXTRA_UID)) { - Intent intent = new Intent(Intent.ACTION_VIEW); - intent.putExtra(Intent.EXTRA_UID, savedInstanceState.getLong(Intent.EXTRA_UID)); - if (!initActivityState(intent)) { - finish(); - return; - } - Log.d(TAG, "Restoring from killed activity"); - }//为防止内存不足时程序的终止,在这里有一个保存现场的函数 - } - - private boolean initActivityState(Intent intent) { - /** - * If the user specified the {@link Intent#ACTION_VIEW} but not provided with id, - * then jump to the NotesListActivity - */ - mWorkingNote = null; - if (TextUtils.equals(Intent.ACTION_VIEW, intent.getAction())) { - long noteId = intent.getLongExtra(Intent.EXTRA_UID, 0); - mUserQuery = ""; - //如果用户实例化标签时,系统并未给出标签ID - /** - * Starting from the searched result - */ - //根据键值查找ID - if (intent.hasExtra(SearchManager.EXTRA_DATA_KEY)) { - noteId = Long.parseLong(intent.getStringExtra(SearchManager.EXTRA_DATA_KEY)); - mUserQuery = intent.getStringExtra(SearchManager.USER_QUERY); - } - //如果ID在数据库中未找到 - if (!DataUtils.visibleInNoteDatabase(getContentResolver(), noteId, Notes.TYPE_NOTE)) { - Intent jump = new Intent(this, NotesListActivity.class); - startActivity(jump); - //程序将跳转到上面声明的intent——jump - showToast(R.string.error_note_not_exist); - finish(); - return false; - } - //ID在数据库中找到 - else { - mWorkingNote = WorkingNote.load(this, noteId); - if (mWorkingNote == null) { - Log.e(TAG, "load note failed with note id" + noteId); - //打印出红色的错误信息 - finish(); - return false; - } - } - //setSoftInputMode——软键盘输入模式 - getWindow().setSoftInputMode( - WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN - | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); - } else if(TextUtils.equals(Intent.ACTION_INSERT_OR_EDIT, intent.getAction())) { - // intent.getAction() - // 大多用于broadcast发送广播时给机制(intent)设置一个action,就是一个字符串 - // 用户可以通过receive(接受)intent,通过 getAction得到的字符串,来决定做什么 - long folderId = intent.getLongExtra(Notes.INTENT_EXTRA_FOLDER_ID, 0); - int widgetId = intent.getIntExtra(Notes.INTENT_EXTRA_WIDGET_ID, - AppWidgetManager.INVALID_APPWIDGET_ID); - int widgetType = intent.getIntExtra(Notes.INTENT_EXTRA_WIDGET_TYPE, - Notes.TYPE_WIDGET_INVALIDE); - int bgResId = intent.getIntExtra(Notes.INTENT_EXTRA_BACKGROUND_ID, - ResourceParser.getDefaultBgId(this)); - // intent.getInt(Long、String)Extra是对各变量的语法分析 - // Parse call-record note - String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); - long callDate = intent.getLongExtra(Notes.INTENT_EXTRA_CALL_DATE, 0); - if (callDate != 0 && phoneNumber != null) { - if (TextUtils.isEmpty(phoneNumber)) { - Log.w(TAG, "The call record number is null"); - } - long noteId = 0; - if ((noteId = DataUtils.getNoteIdByPhoneNumberAndCallDate(getContentResolver(), - phoneNumber, callDate)) > 0) { - mWorkingNote = WorkingNote.load(this, noteId); - if (mWorkingNote == null) { - Log.e(TAG, "load call note failed with note id" + noteId); - finish(); - return false; - } - //将电话号码与手机的号码簿相关 - } else { - mWorkingNote = WorkingNote.createEmptyNote(this, folderId, widgetId, - widgetType, bgResId); - mWorkingNote.convertToCallNote(phoneNumber, callDate); - // - } - } else { - mWorkingNote = WorkingNote.createEmptyNote(this, folderId, widgetId, widgetType, - bgResId); - }//创建一个新的WorkingNote - - getWindow().setSoftInputMode( - WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN - | WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); - } else { - Log.e(TAG, "Intent not specified action, should not support"); - finish(); - return false; - } - mWorkingNote.setOnSettingStatusChangedListener(this); - return true; - } - - @Override - protected void onResume() { - super.onResume(); - initNoteScreen(); - } - - private void initNoteScreen() { - //对界面的初始化操作 - mNoteEditor.setTextAppearance(this, TextAppearanceResources - .getTexAppearanceResource(mFontSizeId)); - //设置外观 - if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) { - switchToListMode(mWorkingNote.getContent()); - } else { - mNoteEditor.setText(getHighlightQueryResult(mWorkingNote.getContent(), mUserQuery)); - mNoteEditor.setSelection(mNoteEditor.getText().length()); - } - for (Integer id : sBgSelectorSelectionMap.keySet()) { - findViewById(sBgSelectorSelectionMap.get(id)).setVisibility(View.GONE); - } - mHeadViewPanel.setBackgroundResource(mWorkingNote.getTitleBgResId()); - mNoteEditorPanel.setBackgroundResource(mWorkingNote.getBgColorResId()); - - mNoteHeaderHolder.tvModified.setText(DateUtils.formatDateTime(this, - mWorkingNote.getModifiedDate(), DateUtils.FORMAT_SHOW_DATE - | DateUtils.FORMAT_NUMERIC_DATE | DateUtils.FORMAT_SHOW_TIME - | DateUtils.FORMAT_SHOW_YEAR)); - - /** - * TODO: Add the menu for setting alert. Currently disable it because the DateTimePicker - * is not ready - */ - showAlertHeader(); - } - //设置闹钟的显示 - private void showAlertHeader() { - if (mWorkingNote.hasClockAlert()) { - long time = System.currentTimeMillis(); - if (time > mWorkingNote.getAlertDate()) { - mNoteHeaderHolder.tvAlertDate.setText(R.string.note_alert_expired); - } - //如果系统时间大于了闹钟设置的时间,那么闹钟失效 - else { - mNoteHeaderHolder.tvAlertDate.setText(DateUtils.getRelativeTimeSpanString( - mWorkingNote.getAlertDate(), time, DateUtils.MINUTE_IN_MILLIS)); - } - mNoteHeaderHolder.tvAlertDate.setVisibility(View.VISIBLE); - mNoteHeaderHolder.ivAlertIcon.setVisibility(View.VISIBLE); - //显示闹钟开启的图标 - } else { - mNoteHeaderHolder.tvAlertDate.setVisibility(View.GONE); - mNoteHeaderHolder.ivAlertIcon.setVisibility(View.GONE); - }; - } - - @Override - protected void onNewIntent(Intent intent) { - super.onNewIntent(intent); - initActivityState(intent); - } - - @Override - protected void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - /** - * For new note without note id, we should firstly save it to - * generate a id. If the editing note is not worth saving, there - * is no id which is equivalent to create new note - */ - if (!mWorkingNote.existInDatabase()) { - saveNote(); - } - //在创建一个新的标签时,先在数据库中匹配 - //如果不存在,那么先在数据库中存储 - outState.putLong(Intent.EXTRA_UID, mWorkingNote.getNoteId()); - Log.d(TAG, "Save working note id: " + mWorkingNote.getNoteId() + " onSaveInstanceState"); - } - - @Override - //MotionEvent是对屏幕触控的传递机制 - public boolean dispatchTouchEvent(MotionEvent ev) { - if (mNoteBgColorSelector.getVisibility() == View.VISIBLE - && !inRangeOfView(mNoteBgColorSelector, ev)) { - mNoteBgColorSelector.setVisibility(View.GONE); - return true; - }//颜色选择器在屏幕上可见 - - if (mFontSizeSelector.getVisibility() == View.VISIBLE - && !inRangeOfView(mFontSizeSelector, ev)) { - mFontSizeSelector.setVisibility(View.GONE); - return true; - }//字体大小选择器在屏幕上可见 - return super.dispatchTouchEvent(ev); - } - //对屏幕触控的坐标进行操作 - private boolean inRangeOfView(View view, MotionEvent ev) { - int []location = new int[2]; - view.getLocationOnScreen(location); - int x = location[0]; - int y = location[1]; - if (ev.getX() < x - || ev.getX() > (x + view.getWidth()) - || ev.getY() < y - || ev.getY() > (y + view.getHeight())) - //如果触控的位置超出了给定的范围,返回false - { - return false; - } - return true; - } - - private void initResources() { - mHeadViewPanel = findViewById(R.id.note_title); - mNoteHeaderHolder = new HeadViewHolder(); - mNoteHeaderHolder.tvModified = (TextView) findViewById(R.id.tv_modified_date); - mNoteHeaderHolder.ivAlertIcon = (ImageView) findViewById(R.id.iv_alert_icon); - mNoteHeaderHolder.tvAlertDate = (TextView) findViewById(R.id.tv_alert_date); - mNoteHeaderHolder.ibSetBgColor = (ImageView) findViewById(R.id.btn_set_bg_color); - mNoteHeaderHolder.ibSetBgColor.setOnClickListener(this); - mNoteEditor = (NoteEditText) findViewById(R.id.note_edit_view); - mNoteEditorPanel = findViewById(R.id.sv_note_edit); - mNoteBgColorSelector = findViewById(R.id.note_bg_color_selector); - for (int id : sBgSelectorBtnsMap.keySet()) { - ImageView iv = (ImageView) findViewById(id); - iv.setOnClickListener(this); - }//对标签各项属性内容的初始化 - - mFontSizeSelector = findViewById(R.id.font_size_selector); - for (int id : sFontSizeBtnsMap.keySet()) { - View view = findViewById(id); - view.setOnClickListener(this); - };//对字体大小的选择 - mSharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); - mFontSizeId = mSharedPrefs.getInt(PREFERENCE_FONT_SIZE, ResourceParser.BG_DEFAULT_FONT_SIZE); - /** - * HACKME: Fix bug of store the resource id in shared preference. - * The id may larger than the length of resources, in this case, - * return the {@link ResourceParser#BG_DEFAULT_FONT_SIZE} - */ - if(mFontSizeId >= TextAppearanceResources.getResourcesSize()) { - mFontSizeId = ResourceParser.BG_DEFAULT_FONT_SIZE; - } - mEditTextList = (LinearLayout) findViewById(R.id.note_edit_list); - mNoteEditor.setOnTextViewChangeListener(this); - } - - @Override - protected void onPause() { - super.onPause(); - if(saveNote()) { - Log.d(TAG, "Note data was saved with length:" + mWorkingNote.getContent().length()); - } - clearSettingState(); - } - //和桌面小工具的同步 - private void updateWidget() { - Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE); - if (mWorkingNote.getWidgetType() == Notes.TYPE_WIDGET_2X) { - intent.setClass(this, NoteWidgetProvider_2x.class); - } else if (mWorkingNote.getWidgetType() == Notes.TYPE_WIDGET_4X) { - intent.setClass(this, NoteWidgetProvider_4x.class); - } else { - Log.e(TAG, "Unspported widget type"); - return; - } - - intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] { - mWorkingNote.getWidgetId() - }); - - sendBroadcast(intent); - setResult(RESULT_OK, intent); - } - - public void onClick(View v) { - int id = v.getId(); - if (id == R.id.btn_set_bg_color) { - mNoteBgColorSelector.setVisibility(View.VISIBLE); - findViewById(sBgSelectorSelectionMap.get(mWorkingNote.getBgColorId())).setVisibility( - - View.VISIBLE); - } else if (sBgSelectorBtnsMap.containsKey(id)) { - findViewById(sBgSelectorSelectionMap.get(mWorkingNote.getBgColorId())).setVisibility( - View.GONE); - mWorkingNote.setBgColorId(sBgSelectorBtnsMap.get(id)); - mNoteBgColorSelector.setVisibility(View.GONE); - } else if (sFontSizeBtnsMap.containsKey(id)) { - findViewById(sFontSelectorSelectionMap.get(mFontSizeId)).setVisibility(View.GONE); - mFontSizeId = sFontSizeBtnsMap.get(id); - mSharedPrefs.edit().putInt(PREFERENCE_FONT_SIZE, mFontSizeId).commit(); - findViewById(sFontSelectorSelectionMap.get(mFontSizeId)).setVisibility(View.VISIBLE); - if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) { - getWorkingText(); - switchToListMode(mWorkingNote.getContent()); - } else { - mNoteEditor.setTextAppearance(this, - TextAppearanceResources.getTexAppearanceResource(mFontSizeId)); - } - mFontSizeSelector.setVisibility(View.GONE); - } - }//************************存在问题 - - @Override - public void onBackPressed() { - if(clearSettingState()) { - return; - } - - saveNote(); - super.onBackPressed(); - } - - private boolean clearSettingState() { - if (mNoteBgColorSelector.getVisibility() == View.VISIBLE) { - mNoteBgColorSelector.setVisibility(View.GONE); - return true; - } else if (mFontSizeSelector.getVisibility() == View.VISIBLE) { - mFontSizeSelector.setVisibility(View.GONE); - return true; - } - return false; - } - - public void onBackgroundColorChanged() { - findViewById(sBgSelectorSelectionMap.get(mWorkingNote.getBgColorId())).setVisibility( - View.VISIBLE); - mNoteEditorPanel.setBackgroundResource(mWorkingNote.getBgColorResId()); - mHeadViewPanel.setBackgroundResource(mWorkingNote.getTitleBgResId()); - } - - @Override - //对选择菜单的准备 - public boolean onPrepareOptionsMenu(Menu menu) { - if (isFinishing()) { - return true; - } - clearSettingState(); - menu.clear(); - if (mWorkingNote.getFolderId() == Notes.ID_CALL_RECORD_FOLDER) { - getMenuInflater().inflate(R.menu.call_note_edit, menu); - // MenuInflater是用来实例化Menu目录下的Menu布局文件的 - } else { - getMenuInflater().inflate(R.menu.note_edit, menu); - } - if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) { - menu.findItem(R.id.menu_list_mode).setTitle(R.string.menu_normal_mode); - } else { - menu.findItem(R.id.menu_list_mode).setTitle(R.string.menu_list_mode); - } - if (mWorkingNote.hasClockAlert()) { - menu.findItem(R.id.menu_alert).setVisible(false); - } else { - menu.findItem(R.id.menu_delete_remind).setVisible(false); - } - return true; - } - - @Override - /* - * 函数功能:动态改变菜单选项内容 - * 函数实现:如下注释 - */ - public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - //根据菜单的id来编剧相关项目 - case R.id.menu_new_note: - //创建一个新的便签 - createNewNote(); - break; - case R.id.menu_delete: - //删除便签 - AlertDialog.Builder builder = new AlertDialog.Builder(this); - //创建关于删除操作的对话框 - builder.setTitle(getString(R.string.alert_title_delete)); - // 设置标签的标题为alert_title_delete - builder.setIcon(android.R.drawable.ic_dialog_alert); - //设置对话框图标 - builder.setMessage(getString(R.string.alert_message_delete_note)); - //设置对话框内容 - builder.setPositiveButton(android.R.string.ok, - new DialogInterface.OnClickListener() { - //建立按键监听器 - public void onClick(DialogInterface dialog, int which) { - //点击所触发事件 - deleteCurrentNote(); - // 删除单签便签 - finish(); - } - }); - //添加“YES”按钮 - builder.setNegativeButton(android.R.string.cancel, null); - //添加“NO”的按钮 - builder.show(); - //显示对话框 - break; - case R.id.menu_font_size: - //字体大小的编辑 - mFontSizeSelector.setVisibility(View.VISIBLE); - // 将字体选择器置为可见 - findViewById(sFontSelectorSelectionMap.get(mFontSizeId)).setVisibility(View.VISIBLE); - // 通过id找到相应的大小 - break; - case R.id.menu_list_mode: - //选择列表模式 - mWorkingNote.setCheckListMode(mWorkingNote.getCheckListMode() == 0 ? - TextNote.MODE_CHECK_LIST : 0); - break; - case R.id.menu_share: - //菜单共享 - getWorkingText(); - sendTo(this, mWorkingNote.getContent()); - // 用sendto函数将运行文本发送到遍历的本文内 - break; - case R.id.menu_send_to_desktop: - //发送到桌面 - sendToDesktop(); - break; - case R.id.menu_alert: - //创建提醒器 - setReminder(); - break; - case R.id.menu_delete_remind: - //删除日期提醒 - mWorkingNote.setAlertDate(0, false); - break; - default: - break; - } - return true; - } - - /* - * 函数功能:建立事件提醒器 - * 函数实现:如下注释 - */ - private void setReminder() { - DateTimePickerDialog d = new DateTimePickerDialog(this, System.currentTimeMillis()); - // 建立修改时间日期的对话框 - d.setOnDateTimeSetListener(new OnDateTimeSetListener() { - public void OnDateTimeSet(AlertDialog dialog, long date) { - mWorkingNote.setAlertDate(date , true); - //选择提醒的日期 - } - }); - //建立时间日期的监听器 - d.show(); - //显示对话框 - } - - /** - * Share note to apps that support {@link Intent#ACTION_SEND} action - * and {@text/plain} type - */ - /* - * 函数功能:共享便签 - * 函数实现:如下注释 - */ - private void sendTo(Context context, String info) { - Intent intent = new Intent(Intent.ACTION_SEND); - //建立intent链接选项 - intent.putExtra(Intent.EXTRA_TEXT, info); - //将需要传递的便签信息放入text文件中 - intent.setType("text/plain"); - //编辑连接器的类型 - context.startActivity(intent); - //在acti中进行链接 - } - - /* - * 函数功能:创建一个新的便签 - * 函数实现:如下注释 - */ - private void createNewNote() { - // Firstly, save current editing notes - //保存当前便签 - saveNote(); - - // For safety, start a new NoteEditActivity - finish(); - Intent intent = new Intent(this, NoteEditActivity.class); - //设置链接器 - intent.setAction(Intent.ACTION_INSERT_OR_EDIT); - //该活动定义为创建或编辑 - intent.putExtra(Notes.INTENT_EXTRA_FOLDER_ID, mWorkingNote.getFolderId()); - //将运行便签的id添加到INTENT_EXTRA_FOLDER_ID标记中 - startActivity(intent); - //开始activity并链接 - } - - /* - * 函数功能:删除当前便签 - * 函数实现:如下注释 - */ - private void deleteCurrentNote() { - if (mWorkingNote.existInDatabase()) { - //假如当前运行的便签内存有数据 - HashSet ids = new HashSet(); - long id = mWorkingNote.getNoteId(); - if (id != Notes.ID_ROOT_FOLDER) { - ids.add(id); - //如果不是头文件夹建立一个hash表把便签id存起来 - } else { - Log.d(TAG, "Wrong note id, should not happen"); - //否则报错 - } - if (!isSyncMode()) { - //在非同步模式情况下 - //删除操作 - if (!DataUtils.batchDeleteNotes(getContentResolver(), ids)) { - Log.e(TAG, "Delete Note error"); - } - } else { - //同步模式 - //移动至垃圾文件夹的操作 - if (!DataUtils.batchMoveToFolder(getContentResolver(), ids, Notes.ID_TRASH_FOLER)) { - Log.e(TAG, "Move notes to trash folder error, should not happens"); - } - } - } - mWorkingNote.markDeleted(true); - //将这些标签的删除标记置为true - } - - /* - * 函数功能:判断是否为同步模式 - * 函数实现:直接看NotesPreferenceActivity中同步名称是否为空 - */ - private boolean isSyncMode() { - return NotesPreferenceActivity.getSyncAccountName(this).trim().length() > 0; - } - - /* - * 函数功能:设置提醒时间 - * 函数实现:如下注释 - */ - public void onClockAlertChanged(long date, boolean set) { - /** - * User could set clock to an unsaved note, so before setting the - * alert clock, we should save the note first - */ - if (!mWorkingNote.existInDatabase()) { - //首先保存已有的便签 - saveNote(); - } - if (mWorkingNote.getNoteId() > 0) { - Intent intent = new Intent(this, AlarmReceiver.class); - intent.setData(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, mWorkingNote.getNoteId())); - //若有有运行的便签就是建立一个链接器将标签id都存在uri中 - PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0); - AlarmManager alarmManager = ((AlarmManager) getSystemService(ALARM_SERVICE)); - //设置提醒管理器 - showAlertHeader(); - if(!set) { - alarmManager.cancel(pendingIntent); - } else { - alarmManager.set(AlarmManager.RTC_WAKEUP, date, pendingIntent); - } - //如果用户设置了时间,就通过提醒管理器设置一个监听事项 - } else { - /** - * There is the condition that user has input nothing (the note is - * not worthy saving), we have no note id, remind the user that he - * should input something - */ - //没有运行的便签就报错 - Log.e(TAG, "Clock alert setting error"); - showToast(R.string.error_note_empty_for_clock); - } - } - - /* - * 函数功能:Widget发生改变的所触发的事件 - */ - public void onWidgetChanged() { - updateWidget();//更新Widget - } - - /* - * 函数功能: 删除编辑文本框所触发的事件 - * 函数实现:如下注释 - */ - public void onEditTextDelete(int index, String text) { - int childCount = mEditTextList.getChildCount(); - if (childCount == 1) { - return; - } - //没有编辑框的话直接返回 - for (int i = index + 1; i < childCount; i++) { - ((NoteEditText) mEditTextList.getChildAt(i).findViewById(R.id.et_edit_text)) - .setIndex(i - 1); - //通过id把编辑框存在便签编辑框中 - } - - mEditTextList.removeViewAt(index); - //删除特定位置的视图 - NoteEditText edit = null; - if(index == 0) { - edit = (NoteEditText) mEditTextList.getChildAt(0).findViewById( - R.id.et_edit_text); - } else { - edit = (NoteEditText) mEditTextList.getChildAt(index - 1).findViewById( - R.id.et_edit_text); - } - //通过id把编辑框存在空的NoteEditText中 - int length = edit.length(); - edit.append(text); - edit.requestFocus();//请求优先完成该此 编辑 - edit.setSelection(length);//定位到length位置处的条目 - } - - /* - * 函数功能:进入编辑文本框所触发的事件 - * 函数实现:如下注释 - */ - public void onEditTextEnter(int index, String text) { - /** - * Should not happen, check for debug - */ - if(index > mEditTextList.getChildCount()) { - Log.e(TAG, "Index out of mEditTextList boundrary, should not happen"); - //越界把偶偶 - } - - View view = getListItem(text, index); - mEditTextList.addView(view, index); - //建立一个新的视图并添加到编辑文本框内 - NoteEditText edit = (NoteEditText) view.findViewById(R.id.et_edit_text); - edit.requestFocus();//请求优先操作 - edit.setSelection(0);//定位到起始位置 - for (int i = index + 1; i < mEditTextList.getChildCount(); i++) { - ((NoteEditText) mEditTextList.getChildAt(i).findViewById(R.id.et_edit_text)) - .setIndex(i); - //遍历子文本框并设置对应对下标 - } - } - - /* - * 函数功能:切换至列表模式 - * 函数实现:如下注释 - */ - private void switchToListMode(String text) { - mEditTextList.removeAllViews(); - String[] items = text.split("\n"); - int index = 0; - //清空所有视图,初始化下标 - for (String item : items) { - if(!TextUtils.isEmpty(item)) { - mEditTextList.addView(getListItem(item, index)); - index++; - //遍历所有文本单元并添加到文本框中 - } - } - mEditTextList.addView(getListItem("", index)); - mEditTextList.getChildAt(index).findViewById(R.id.et_edit_text).requestFocus(); - //优先请求此操作 - - mNoteEditor.setVisibility(View.GONE); - //便签编辑器不可见 - mEditTextList.setVisibility(View.VISIBLE); - //将文本编辑框置为可见 - } - - /* - * 函数功能:获取高亮效果的反馈情况 - * 函数实现:如下注释 - */ - private Spannable getHighlightQueryResult(String fullText, String userQuery) { - SpannableString spannable = new SpannableString(fullText == null ? "" : fullText); - //新建一个效果选项 - if (!TextUtils.isEmpty(userQuery)) { - mPattern = Pattern.compile(userQuery); - //将用户的询问进行解析 - Matcher m = mPattern.matcher(fullText); - //建立一个状态机检查Pattern并进行匹配 - int start = 0; - while (m.find(start)) { - spannable.setSpan( - new BackgroundColorSpan(this.getResources().getColor( - R.color.user_query_highlight)), m.start(), m.end(), - Spannable.SPAN_INCLUSIVE_EXCLUSIVE); - //设置背景颜色 - start = m.end(); - //跟新起始位置 - } - } - return spannable; - } - - /* - * 函数功能:获取列表项 - * 函数实现:如下注释 - */ - private View getListItem(String item, int index) { - View view = LayoutInflater.from(this).inflate(R.layout.note_edit_list_item, null); - //创建一个视图 - final NoteEditText edit = (NoteEditText) view.findViewById(R.id.et_edit_text); - edit.setTextAppearance(this, TextAppearanceResources.getTexAppearanceResource(mFontSizeId)); - //创建一个文本编辑框并设置可见性 - CheckBox cb = ((CheckBox) view.findViewById(R.id.cb_edit_item)); - cb.setOnCheckedChangeListener(new OnCheckedChangeListener() { - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - if (isChecked) { - edit.setPaintFlags(edit.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); - } else { - edit.setPaintFlags(Paint.ANTI_ALIAS_FLAG | Paint.DEV_KERN_TEXT_FLAG); - } - } - }); - //建立一个打钩框并设置监听器 - - if (item.startsWith(TAG_CHECKED)) { - //选择勾选 - cb.setChecked(true); - edit.setPaintFlags(edit.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); - item = item.substring(TAG_CHECKED.length(), item.length()).trim(); - } else if (item.startsWith(TAG_UNCHECKED)) { - //选择不勾选 - cb.setChecked(false); - edit.setPaintFlags(Paint.ANTI_ALIAS_FLAG | Paint.DEV_KERN_TEXT_FLAG); - item = item.substring(TAG_UNCHECKED.length(), item.length()).trim(); - } - - edit.setOnTextViewChangeListener(this); - edit.setIndex(index); - edit.setText(getHighlightQueryResult(item, mUserQuery)); - //运行编辑框的监听器对该行为作出反应,并设置下标及文本内容 - return view; - } - - /* - * 函数功能:便签内容发生改变所 触发的事件 - * 函数实现:如下注释 - */ - public void onTextChange(int index, boolean hasText) { - if (index >= mEditTextList.getChildCount()) { - Log.e(TAG, "Wrong index, should not happen"); - return; - //越界报错 - } - if(hasText) { - mEditTextList.getChildAt(index).findViewById(R.id.cb_edit_item).setVisibility(View.VISIBLE); - } else { - mEditTextList.getChildAt(index).findViewById(R.id.cb_edit_item).setVisibility(View.GONE); - } - //如果内容不为空则将其子编辑框可见性置为可见,否则不可见 - } - - /* - * 函数功能:检查模式和列表模式的切换 - * 函数实现:如下注释 - */ - public void onCheckListModeChanged(int oldMode, int newMode) { - if (newMode == TextNote.MODE_CHECK_LIST) { - switchToListMode(mNoteEditor.getText().toString()); - //检查模式切换到列表模式 - } else { - if (!getWorkingText()) { - mWorkingNote.setWorkingText(mWorkingNote.getContent().replace(TAG_UNCHECKED + " ", - "")); - } - //若是获取到文本就改变其检查标记 - mNoteEditor.setText(getHighlightQueryResult(mWorkingNote.getContent(), mUserQuery)); - mEditTextList.setVisibility(View.GONE); - mNoteEditor.setVisibility(View.VISIBLE); - //修改文本编辑器的内容和可见性 - } - } - - /* - * 函数功能:设置勾选选项表并返回是否勾选的标记 - * 函数实现:如下注释 - */ - private boolean getWorkingText() { - boolean hasChecked = false; - //初始化check标记 - if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) { - // 若模式为CHECK_LIST - StringBuilder sb = new StringBuilder(); - //创建可变字符串 - for (int i = 0; i < mEditTextList.getChildCount(); i++) { - View view = mEditTextList.getChildAt(i); - //遍历所有子编辑框的视图 - NoteEditText edit = (NoteEditText) view.findViewById(R.id.et_edit_text); - if (!TextUtils.isEmpty(edit.getText())) { - //若文本不为空 - if (((CheckBox) view.findViewById(R.id.cb_edit_item)).isChecked()) { - //该选项框已打钩 - sb.append(TAG_CHECKED).append(" ").append(edit.getText()).append("\n"); - hasChecked = true; - //扩展字符串为已打钩并把标记置true - } else { - sb.append(TAG_UNCHECKED).append(" ").append(edit.getText()).append("\n"); - //扩展字符串添加未打钩 - } - } - } - mWorkingNote.setWorkingText(sb.toString()); - //利用编辑好的字符串设置运行便签的内容 - } else { - mWorkingNote.setWorkingText(mNoteEditor.getText().toString()); - // 若不是该模式直接用编辑器中的内容设置运行中标签的内容 - } - return hasChecked; - } - - /* - * 函数功能:保存便签 - * 函数实现:如下注释 - */ - private boolean saveNote() { - getWorkingText(); - boolean saved = mWorkingNote.saveNote(); - //运行 getWorkingText()之后保存 - if (saved) { - /** - * There are two modes from List view to edit view, open one note, - * create/edit a node. Opening node requires to the original - * position in the list when back from edit view, while creating a - * new node requires to the top of the list. This code - * {@link #RESULT_OK} is used to identify the create/edit state - */ - //如英文注释所说链接RESULT_OK是为了识别保存的2种情况,一是创建后保存,二是修改后保存 - setResult(RESULT_OK); - } - return saved; - } - - /* - * 函数功能:将便签发送至桌面 - * 函数实现:如下注释 - */ - private void sendToDesktop() { - /** - * Before send message to home, we should make sure that current - * editing note is exists in databases. So, for new note, firstly - * save it - */ - if (!mWorkingNote.existInDatabase()) { - saveNote(); - //若不存在数据也就是新的标签就保存起来先 - } - - if (mWorkingNote.getNoteId() > 0) { - //若是有内容 - Intent sender = new Intent(); - Intent shortcutIntent = new Intent(this, NoteEditActivity.class); - //建立发送到桌面的连接器 - shortcutIntent.setAction(Intent.ACTION_VIEW); - //链接为一个视图 - shortcutIntent.putExtra(Intent.EXTRA_UID, mWorkingNote.getNoteId()); - sender.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); - sender.putExtra(Intent.EXTRA_SHORTCUT_NAME, - makeShortcutIconTitle(mWorkingNote.getContent())); - sender.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, - Intent.ShortcutIconResource.fromContext(this, R.drawable.icon_app)); - sender.putExtra("duplicate", true); - //将便签的相关信息都添加到要发送的文件里 - sender.setAction("com.android.launcher.action.INSTALL_SHORTCUT"); - //设置sneder的行为是发送 - showToast(R.string.info_note_enter_desktop); - sendBroadcast(sender); - //显示到桌面 - } else { - /** - * There is the condition that user has input nothing (the note is - * not worthy saving), we have no note id, remind the user that he - * should input something - */ - Log.e(TAG, "Send to desktop error"); - showToast(R.string.error_note_empty_for_send_to_desktop); - //空便签直接报错 - } - } - - /* - * 函数功能:编辑小图标的标题 - * 函数实现:如下注释 - */ - private String makeShortcutIconTitle(String content) { - content = content.replace(TAG_CHECKED, ""); - content = content.replace(TAG_UNCHECKED, ""); - return content.length() > SHORTCUT_ICON_TITLE_MAX_LEN ? content.substring(0, - SHORTCUT_ICON_TITLE_MAX_LEN) : content; - //直接设置为content中的内容并返回,有勾选和未勾选2种 - } - - /* - * 函数功能:显示提示的视图 - * 函数实现:根据下标显示对应的提示 - */ - private void showToast(int resId) { - showToast(resId, Toast.LENGTH_SHORT); - } - - /* - * 函数功能:持续显示提示的视图 - * 函数实现:根据下标和持续的时间(duration)编辑提示视图并显示 - */ - private void showToast(int resId, int duration) { - Toast.makeText(this, resId, duration).show(); - } -} \ No newline at end of file diff --git a/src/ui/NoteEditText.java b/src/ui/NoteEditText.java deleted file mode 100644 index 890ebec..0000000 --- a/src/ui/NoteEditText.java +++ /dev/null @@ -1,278 +0,0 @@ -package net.micode.notes.ui; - -import android.content.Context; -import android.graphics.Rect; -import android.text.Layout; -import android.text.Selection; -import android.text.Spanned; -import android.text.TextUtils; -import android.text.style.URLSpan; -import android.util.AttributeSet; -import android.util.Log; -import android.view.ContextMenu; -import android.view.KeyEvent; -import android.view.MenuItem; -import android.view.MenuItem.OnMenuItemClickListener; -import android.view.MotionEvent; -import android.widget.EditText; - -import net.micode.notes.R; - -import java.util.HashMap; -import java.util.Map; - -//继承edittext,设置便签设置文本框 -public class NoteEditText extends androidx.appcompat.widget.AppCompatEditText { - private static final String TAG = "NoteEditText"; - private int mIndex; - private int mSelectionStartBeforeDelete; - - private static final String SCHEME_TEL = "tel:" ; - private static final String SCHEME_HTTP = "http:" ; - private static final String SCHEME_EMAIL = "mailto:" ; - - ///建立一个字符和整数的hash表,用于链接电话,网站,还有邮箱 - private static final Map sSchemaActionResMap = new HashMap(); - static { - sSchemaActionResMap.put(SCHEME_TEL, R.string.note_link_tel); - sSchemaActionResMap.put(SCHEME_HTTP, R.string.note_link_web); - sSchemaActionResMap.put(SCHEME_EMAIL, R.string.note_link_email); - } - - /** - * Call by the {@link NoteEditActivity} to delete or add edit text - */ - //在NoteEditActivity中删除或添加文本的操作,可以看做是一个文本是否被变的标记,英文注释已说明的很清楚 - public interface OnTextViewChangeListener { - /** - * Delete current edit text when {@link KeyEvent#KEYCODE_DEL} happens - * and the text is null - */ - //处理删除按键时的操作 - void onEditTextDelete(int index, String text); - - /** - * Add edit text after current edit text when {@link KeyEvent#KEYCODE_ENTER} - * happen - */ - //处理进入按键时的操作 - void onEditTextEnter(int index, String text); - - /** - * Hide or show item option when text change - */ - void onTextChange(int index, boolean hasText); - } - - private OnTextViewChangeListener mOnTextViewChangeListener; - - //根据context设置文本 - public NoteEditText(Context context) { - super(context, null);//用super引用父类变量 - mIndex = 0; - } - - //设置当前光标 - public void setIndex(int index) { - mIndex = index; - } - - //初始化文本修改标记 - public void setOnTextViewChangeListener(OnTextViewChangeListener listener) { - mOnTextViewChangeListener = listener; - } - - //AttributeSet 百度了一下是自定义空控件属性,用于维护便签动态变化的属性 - //初始化便签 - public NoteEditText(Context context, AttributeSet attrs) { - super(context, attrs, android.R.attr.editTextStyle); - } - - // 根据defstyle自动初始化 - public NoteEditText(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - // TODO Auto-generated construct or stub - } - - @Override - public boolean onTouchEvent(MotionEvent event) { - switch (event.getAction()) { - case MotionEvent.ACTION_DOWN: - if (isInEditMode()) { - break; - } - int x = (int) event.getX(); - int y = (int) event.getY(); - x -= getTotalPaddingLeft(); - y -= getTotalPaddingTop(); - x += getScrollX(); - y += getScrollY(); - - Layout layout = getLayout(); - if (layout != null) { - int line = layout.getLineForVertical(y); - int off = layout.getOffsetForHorizontal(line, x); - Selection.setSelection(getText(), off); - } - break; - } - return super.onTouchEvent(event); - } - - @Override - /* - * 函数功能:处理用户按下一个键盘按键时会触发 的事件 - * 实现过程:如下注释 - */ - public boolean onKeyDown(int keyCode, KeyEvent event) { - switch (keyCode) { - //根据按键的 Unicode 编码值来处理 - case KeyEvent.KEYCODE_ENTER: - //“进入”按键 - // 检查是否是输入法的确认操作,如果是则不拦截 - if (mOnTextViewChangeListener != null) { - if ((event.getFlags() & KeyEvent.FLAG_EDITOR_ACTION) == 0 && !isInEditMode()) { - // 允许事件正常传递给父类 - return super.onKeyDown(keyCode, event); - } - } - break; - case KeyEvent.KEYCODE_DEL: - //“删除”按键 - mSelectionStartBeforeDelete = getSelectionStart(); - break; - default: - break; - } - //继续执行父类的其他点击事件 - return super.onKeyDown(keyCode, event); - } - - @Override - /* - * 函数功能:处理用户松开一个键盘按键时会触发 的事件 - * 实现方式:如下注释 - */ - public boolean onKeyUp(int keyCode, KeyEvent event) { - switch(keyCode) { - //根据按键的 Unicode 编码值来处理,有删除和进入2种操作 - case KeyEvent.KEYCODE_DEL: - if (mOnTextViewChangeListener != null) { - //若是被修改过 - if (0 == mSelectionStartBeforeDelete && mIndex != 0) { - //若之前有被修改并且文档不为空 - mOnTextViewChangeListener.onEditTextDelete(mIndex, getText().toString()); - //利用上文OnTextViewChangeListener对KEYCODE_DEL按键情况的删除函数进行删除 - return true; - } - } else { - Log.d(TAG, "OnTextViewChangeListener was not seted"); - //其他情况报错,文档的改动监听器并没有建立 - } - break; - case KeyEvent.KEYCODE_ENTER: - //同上也是分为监听器是否建立2种情况 - if (mOnTextViewChangeListener != null) { - // 检查是否是输入法的确认操作,如果是则不拦截 - // 同时检查是否有文本输入,避免拦截中文输入法选择候选词的操作 - if ((event.getFlags() & KeyEvent.FLAG_EDITOR_ACTION) == 0 && !isInEditMode() && event.getAction() == KeyEvent.ACTION_UP) { - // 只有当没有输入文本时才执行换行操作 - if (TextUtils.isEmpty(getText())) { - int selectionStart = getSelectionStart(); - //获取当前位置 - String text = getText().subSequence(selectionStart, length()).toString(); - //获取当前文本 - setText(getText().subSequence(0, selectionStart)); - //根据获取的文本设置当前文本 - mOnTextViewChangeListener.onEditTextEnter(mIndex + 1, text); - //当{@link KeyEvent#KEYCODE_ENTER}添加新文本 - return true; - } - } - } else { - Log.d(TAG, "OnTextViewChangeListener was not seted"); - //其他情况报错,文档的改动监听器并没有建立 - } - break; - default: - break; - } - //继续执行父类的其他按键弹起的事件 - return super.onKeyUp(keyCode, event); - } - - @Override - /* - * 函数功能:当焦点发生变化时,会自动调用该方法来处理焦点改变的事件 - * 实现方式:如下注释 - * 参数:focused表示触发该事件的View是否获得了焦点,当该控件获得焦点时,Focused等于true,否则等于false。 - direction表示焦点移动的方向,用数值表示 - Rect:表示在触发事件的View的坐标系中,前一个获得焦点的矩形区域,即表示焦点是从哪里来的。如果不可用则为null - */ - protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { - if (mOnTextViewChangeListener != null) { - //若监听器已经建立 - if (!focused && TextUtils.isEmpty(getText())) { - //获取到焦点并且文本不为空 - mOnTextViewChangeListener.onTextChange(mIndex, false); - //mOnTextViewChangeListener子函数,置false隐藏事件选项 - } else { - mOnTextViewChangeListener.onTextChange(mIndex, true); - //mOnTextViewChangeListener子函数,置true显示事件选项 - } - } - //继续执行父类的其他焦点变化的事件 - super.onFocusChanged(focused, direction, previouslyFocusedRect); - } - - @Override - /* - * 函数功能:生成上下文菜单 - * 函数实现:如下注释 - */ - protected void onCreateContextMenu(ContextMenu menu) { - if (getText() instanceof Spanned) { - //有文本存在 - int selStart = getSelectionStart(); - int selEnd = getSelectionEnd(); - //获取文本开始和结尾位置 - - int min = Math.min(selStart, selEnd); - int max = Math.max(selStart, selEnd); - //获取开始到结尾的最大值和最小值 - - final URLSpan[] urls = ((Spanned) getText()).getSpans(min, max, URLSpan.class); - //设置url的信息的范围值 - if (urls.length == 1) { - int defaultResId = 0; - for(String schema: sSchemaActionResMap.keySet()) { - //获取计划表中所有的key值 - if(urls[0].getURL().indexOf(schema) >= 0) { - //若url可以添加则在添加后将defaultResId置为key所映射的值 - defaultResId = sSchemaActionResMap.get(schema); - break; - } - } - - if (defaultResId == 0) { - //defaultResId == 0则说明url并没有添加任何东西,所以置为连接其他SchemaActionResMap的值 - defaultResId = R.string.note_link_other; - } - - //建立菜单 - menu.add(0, 0, 0, defaultResId).setOnMenuItemClickListener( - new OnMenuItemClickListener() { - //新建按键监听器 - public boolean onMenuItemClick(MenuItem item) { - // goto a new intent - urls[0].onClick(NoteEditText.this); - //根据相应的文本设置菜单的按键 - return true; - } - }); - } - } - //继续执行父类的其他菜单创建的事件 - super.onCreateContextMenu(menu); - } -} \ No newline at end of file diff --git a/src/ui/NoteItemData.java b/src/ui/NoteItemData.java deleted file mode 100644 index 9dde13c..0000000 --- a/src/ui/NoteItemData.java +++ /dev/null @@ -1,214 +0,0 @@ -package net.micode.notes.ui; - -import android.content.Context; -import android.database.Cursor; -import android.text.TextUtils; - -import net.micode.notes.data.Contact; -import net.micode.notes.data.Notes; -import net.micode.notes.data.Notes.NoteColumns; -import net.micode.notes.tool.DataUtils; - - -public class NoteItemData { - static final String [] PROJECTION = new String [] { - NoteColumns.ID, - NoteColumns.ALERTED_DATE, - NoteColumns.BG_COLOR_ID, - NoteColumns.CREATED_DATE, - NoteColumns.HAS_ATTACHMENT, - NoteColumns.MODIFIED_DATE, - NoteColumns.NOTES_COUNT, - NoteColumns.PARENT_ID, - NoteColumns.SNIPPET, - NoteColumns.TYPE, - NoteColumns.WIDGET_ID, - NoteColumns.WIDGET_TYPE, - }; - //常量标记和数据就不一一标记了,意义翻译基本就知道 - private static final int ID_COLUMN = 0; - private static final int ALERTED_DATE_COLUMN = 1; - private static final int BG_COLOR_ID_COLUMN = 2; - private static final int CREATED_DATE_COLUMN = 3; - private static final int HAS_ATTACHMENT_COLUMN = 4; - private static final int MODIFIED_DATE_COLUMN = 5; - private static final int NOTES_COUNT_COLUMN = 6; - private static final int PARENT_ID_COLUMN = 7; - private static final int SNIPPET_COLUMN = 8; - private static final int TYPE_COLUMN = 9; - private static final int WIDGET_ID_COLUMN = 10; - private static final int WIDGET_TYPE_COLUMN = 11; - - private long mId; - private long mAlertDate; - private int mBgColorId; - private long mCreatedDate; - private boolean mHasAttachment; - private long mModifiedDate; - private int mNotesCount; - private long mParentId; - private String mSnippet; - private int mType; - private int mWidgetId; - private int mWidgetType; - private String mName; - private String mPhoneNumber; - - private boolean mIsLastItem; - private boolean mIsFirstItem; - private boolean mIsOnlyOneItem; - private boolean mIsOneNoteFollowingFolder; - private boolean mIsMultiNotesFollowingFolder; - //初始化NoteItemData,主要利用光标cursor获取的东西 - public NoteItemData(Context context, Cursor cursor) { - //getxxx为转换格式 - mId = cursor.getLong(ID_COLUMN); - mAlertDate = cursor.getLong(ALERTED_DATE_COLUMN); - mBgColorId = cursor.getInt(BG_COLOR_ID_COLUMN); - mCreatedDate = cursor.getLong(CREATED_DATE_COLUMN); - mHasAttachment = (cursor.getInt(HAS_ATTACHMENT_COLUMN) > 0) ? true : false; - mModifiedDate = cursor.getLong(MODIFIED_DATE_COLUMN); - mNotesCount = cursor.getInt(NOTES_COUNT_COLUMN); - mParentId = cursor.getLong(PARENT_ID_COLUMN); - mSnippet = cursor.getString(SNIPPET_COLUMN); - mSnippet = mSnippet.replace(NoteEditActivity.TAG_CHECKED, "").replace( - NoteEditActivity.TAG_UNCHECKED, ""); - mType = cursor.getInt(TYPE_COLUMN); - mWidgetId = cursor.getInt(WIDGET_ID_COLUMN); - mWidgetType = cursor.getInt(WIDGET_TYPE_COLUMN); - - //初始化电话号码的信息 - mPhoneNumber = ""; - if (mParentId == Notes.ID_CALL_RECORD_FOLDER) { - mPhoneNumber = DataUtils.getCallNumberByNoteId(context.getContentResolver(), mId); - if (!TextUtils.isEmpty(mPhoneNumber)) {//mphonenumber里有符合字符串,则用contart功能连接 - mName = Contact.getContact(context, mPhoneNumber); - if (mName == null) { - mName = mPhoneNumber; - } - } - } - - if (mName == null) { - mName = ""; - } - checkPostion(cursor); - } - ///根据鼠标的位置设置标记,和位置 - private void checkPostion(Cursor cursor) { - //初始化几个标记,cursor具体功能笔记中已提到,不一一叙述 - mIsLastItem = cursor.isLast() ? true : false; - mIsFirstItem = cursor.isFirst() ? true : false; - mIsOnlyOneItem = (cursor.getCount() == 1); - //初始化“多重子文件”“单一子文件”2个标记 - mIsMultiNotesFollowingFolder = false; - mIsOneNoteFollowingFolder = false; - - //主要是设置上诉2标记 - if (mType == Notes.TYPE_NOTE && !mIsFirstItem) {//若是note格式并且不是第一个元素 - int position = cursor.getPosition(); - if (cursor.moveToPrevious()) {//获取光标位置后看上一行 - if (cursor.getInt(TYPE_COLUMN) == Notes.TYPE_FOLDER - || cursor.getInt(TYPE_COLUMN) == Notes.TYPE_SYSTEM) {//若光标满足系统或note格式 - if (cursor.getCount() > (position + 1)) { - mIsMultiNotesFollowingFolder = true;//若是数据行数大于但前位置+1则设置成正确 - } else { - mIsOneNoteFollowingFolder = true;//否则单一文件夹标记为true - } - } - if (!cursor.moveToNext()) {//若不能再往下走则报错 - throw new IllegalStateException("cursor move to previous but can't move back"); - } - } - } - } - ///以下都是获取标记没什么好说的,不过倒数第二个需要说明下,很具体看下面 - public boolean isOneFollowingFolder() { - return mIsOneNoteFollowingFolder; - } - - public boolean isMultiFollowingFolder() { - return mIsMultiNotesFollowingFolder; - } - - public boolean isLast() { - return mIsLastItem; - } - - public String getCallName() { - return mName; - } - - public boolean isFirst() { - return mIsFirstItem; - } - - public boolean isSingle() { - return mIsOnlyOneItem; - } - - public long getId() { - return mId; - } - - public long getAlertDate() { - return mAlertDate; - } - - public long getCreatedDate() { - return mCreatedDate; - } - - public boolean hasAttachment() { - return mHasAttachment; - } - - public long getModifiedDate() { - return mModifiedDate; - } - - public int getBgColorId() { - return mBgColorId; - } - - public long getParentId() { - return mParentId; - } - - public int getNotesCount() { - return mNotesCount; - } - - public long getFolderId () { - return mParentId; - } - - public int getType() { - return mType; - } - - public int getWidgetType() { - return mWidgetType; - } - - public int getWidgetId() { - return mWidgetId; - } - - public String getSnippet() { - return mSnippet; - } - - public boolean hasAlert() { - return (mAlertDate > 0); - } - - //若数据父id为保存至文件夹模式的id且满足电话号码单元不为空,则isCallRecord为true - public boolean isCallRecord() { - return (mParentId == Notes.ID_CALL_RECORD_FOLDER && !TextUtils.isEmpty(mPhoneNumber)); - } - - public static int getNoteType(Cursor cursor) { - return cursor.getInt(TYPE_COLUMN); - } -} \ No newline at end of file diff --git a/src/ui/NotesListActivity.java b/src/ui/NotesListActivity.java deleted file mode 100644 index 0813597..0000000 --- a/src/ui/NotesListActivity.java +++ /dev/null @@ -1,1002 +0,0 @@ -package net.micode.notes.ui; - -import android.app.Activity; -import android.app.AlertDialog; -import android.app.Dialog; -import android.appwidget.AppWidgetManager; -import android.content.AsyncQueryHandler; -import android.content.ContentResolver; -import android.content.ContentValues; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.SharedPreferences; -import android.database.Cursor; -import android.os.AsyncTask; -import android.os.Bundle; -import android.preference.PreferenceManager; -import android.text.Editable; -import android.text.TextUtils; -import android.text.TextWatcher; -import android.util.Log; -import android.view.ActionMode; -import android.view.ContextMenu; -import android.view.ContextMenu.ContextMenuInfo; -import android.view.Display; -import android.view.HapticFeedbackConstants; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuItem; -import android.view.MenuItem.OnMenuItemClickListener; -import android.view.MotionEvent; -import android.view.View; -import android.view.View.OnClickListener; -import android.view.View.OnCreateContextMenuListener; -import android.view.View.OnTouchListener; -import android.view.inputmethod.InputMethodManager; -import android.widget.AdapterView; -import android.widget.AdapterView.OnItemClickListener; -import android.widget.AdapterView.OnItemLongClickListener; -import android.widget.Button; -import android.widget.EditText; -import android.widget.ListView; -import android.widget.PopupMenu; -import android.widget.TextView; -import android.widget.Toast; - -import net.micode.notes.R; -import net.micode.notes.data.Notes; -import net.micode.notes.data.Notes.NoteColumns; -import net.micode.notes.gtask.remote.GTaskSyncService; -import net.micode.notes.model.WorkingNote; -import net.micode.notes.tool.BackupUtils; -import net.micode.notes.tool.DataUtils; -import net.micode.notes.tool.ResourceParser; -import net.micode.notes.ui.NotesListAdapter.AppWidgetAttribute; -import net.micode.notes.widget.NoteWidgetProvider_2x; -import net.micode.notes.widget.NoteWidgetProvider_4x; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.util.HashSet; -//主界面,一进入就是这个界面 -/** - * @author k - * - */ -public class NotesListActivity extends Activity implements OnClickListener, OnItemLongClickListener { //没有用特定的标签加注释。。。感觉没有什么用 - private static final int FOLDER_NOTE_LIST_QUERY_TOKEN = 0; - - private static final int FOLDER_LIST_QUERY_TOKEN = 1; - - private static final int MENU_FOLDER_DELETE = 0; - - private static final int MENU_FOLDER_VIEW = 1; - - private static final int MENU_FOLDER_CHANGE_NAME = 2; - - private static final String PREFERENCE_ADD_INTRODUCTION = "net.micode.notes.introduction"; //单行超过80个字符 - - private enum ListEditState { - NOTE_LIST, SUB_FOLDER, CALL_RECORD_FOLDER - }; - - private ListEditState mState; - - private BackgroundQueryHandler mBackgroundQueryHandler; - - private NotesListAdapter mNotesListAdapter; - - private ListView mNotesListView; - - private Button mAddNewNote; - - private boolean mDispatch; - - private int mOriginY; - - private int mDispatchY; - - private TextView mTitleBar; - - private long mCurrentFolderId; - - private ContentResolver mContentResolver; - - private ModeCallback mModeCallBack; - - private static final String TAG = "NotesListActivity"; - - public static final int NOTES_LISTVIEW_SCROLL_RATE = 30; - - private NoteItemData mFocusNoteDataItem; - - private static final String NORMAL_SELECTION = NoteColumns.PARENT_ID + "=?"; - - private static final String ROOT_FOLDER_SELECTION = "(" + NoteColumns.TYPE + "<>" - + Notes.TYPE_SYSTEM + " AND " + NoteColumns.PARENT_ID + "=?)" + " OR (" - + NoteColumns.ID + "=" + Notes.ID_CALL_RECORD_FOLDER + " AND " - + NoteColumns.NOTES_COUNT + ">0)"; - - private final static int REQUEST_CODE_OPEN_NODE = 102; - private final static int REQUEST_CODE_NEW_NODE = 103; - - @Override - // 创建类 - protected void onCreate(final Bundle savedInstanceState) { //需要是final类型 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。 - // final类不能被继承,没有子类,final类中的方法默认是final的。 - //final方法不能被子类的方法覆盖,但可以被继承。 - //final成员变量表示常量,只能被赋值一次,赋值后值不再改变。 - //final不能用于修饰构造方法。 - super.onCreate(savedInstanceState); // 调用父类的onCreate函数 - setContentView(R.layout.note_list); - initResources(); - - /** - * Insert an introduction when user firstly use this application - */ - setAppInfoFromRawRes(); - } - - @Override - // 返回一些子模块完成的数据交给主Activity处理 - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - // 结果值 和 要求值 符合要求 - if (resultCode == RESULT_OK - && (requestCode == REQUEST_CODE_OPEN_NODE || requestCode == REQUEST_CODE_NEW_NODE)) { - mNotesListAdapter.changeCursor(null); - } else { - super.onActivityResult(requestCode, resultCode, data); - // 调用 Activity 的onActivityResult() - } - } - - private void setAppInfoFromRawRes() { - // Android平台给我们提供了一个SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数。 - SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); - if (!sp.getBoolean(PREFERENCE_ADD_INTRODUCTION, false)) { - StringBuilder sb = new StringBuilder(); - InputStream in = null; - try { - // 把资源文件放到应用程序的/raw/raw下,那么就可以在应用中使用getResources获取资源后, - // 以openRawResource方法(不带后缀的资源文件名)打开这个文件。 - in = getResources().openRawResource(R.raw.introduction); - if (in != null) { - InputStreamReader isr = new InputStreamReader(in); - BufferedReader br = new BufferedReader(isr); - char [] buf = new char[1024]; // 自行定义的数值,使用者不知道有什么意义 - int len = 0; - while ((len = br.read(buf)) > 0) { - sb.append(buf, 0, len); - } - } else { - Log.e(TAG, "Read introduction file error"); - return; - } - } catch (IOException e) { - e.printStackTrace(); - return; - } finally { - if (in != null) { - try { - in.close(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - } - - // 创建空的WorkingNote - WorkingNote note = WorkingNote.createEmptyNote(this, Notes.ID_ROOT_FOLDER, - AppWidgetManager.INVALID_APPWIDGET_ID, Notes.TYPE_WIDGET_INVALIDE, - ResourceParser.RED); - note.setWorkingText(sb.toString()); - if (note.saveNote()) { - // 更新保存note的信息 - sp.edit().putBoolean(PREFERENCE_ADD_INTRODUCTION, true).commit(); - } else { - Log.e(TAG, "Save introduction note error"); - return; - } - } - } - - @Override - protected void onStart() { - super.onStart(); - startAsyncNotesListQuery(); - } - - // 初始化资源 - private void initResources() { - mContentResolver = this.getContentResolver(); // 获取应用程序的数据,得到类似数据表的东西 - mBackgroundQueryHandler = new BackgroundQueryHandler(this.getContentResolver()); - mCurrentFolderId = Notes.ID_ROOT_FOLDER; - - // findViewById 是安卓编程的定位函数,主要是引用.R文件里的引用名 - mNotesListView = (ListView) findViewById(R.id.notes_list); // 绑定XML中的ListView,作为Item的容器 - mNotesListView.addFooterView(LayoutInflater.from(this).inflate(R.layout.note_list_footer, null), - null, false); - mNotesListView.setOnItemClickListener(new OnListItemClickListener()); - mNotesListView.setOnItemLongClickListener(this); - mNotesListAdapter = new NotesListAdapter(this); - mNotesListView.setAdapter(mNotesListAdapter); - mAddNewNote = (Button) findViewById(R.id.btn_new_note);// 在activity中要获取该按钮 - mAddNewNote.setOnClickListener(this); - mAddNewNote.setOnTouchListener(new NewNoteOnTouchListener()); - mDispatch = false; - mDispatchY = 0; - mOriginY = 0; - mTitleBar = (TextView) findViewById(R.id.tv_title_bar); - mState = ListEditState.NOTE_LIST; - mModeCallBack = new ModeCallback(); - } - - // 继承自ListView.MultiChoiceModeListener 和 OnMenuItemClickListener - private class ModeCallback implements ListView.MultiChoiceModeListener, OnMenuItemClickListener { - private DropdownMenu mDropDownMenu; - private ActionMode mActionMode; - private MenuItem mMoveMenu; - - public boolean onCreateActionMode(ActionMode mode, Menu menu) { - getMenuInflater().inflate(R.menu.note_list_options, menu); - menu.findItem(R.id.delete).setOnMenuItemClickListener(this); - mMoveMenu = menu.findItem(R.id.move); - if (mFocusNoteDataItem.getParentId() == Notes.ID_CALL_RECORD_FOLDER - || DataUtils.getUserFolderCount(mContentResolver) == 0) { - mMoveMenu.setVisible(false); - } else { - mMoveMenu.setVisible(true); - mMoveMenu.setOnMenuItemClickListener(this); - } - mActionMode = mode; - mNotesListAdapter.setChoiceMode(true); - mNotesListView.setLongClickable(false); - mAddNewNote.setVisibility(View.GONE); - - View customView = LayoutInflater.from(NotesListActivity.this).inflate( - R.layout.note_list_dropdown_menu, null); - mode.setCustomView(customView); - mDropDownMenu = new DropdownMenu(NotesListActivity.this, - (Button) customView.findViewById(R.id.selection_menu), - R.menu.note_list_dropdown); - mDropDownMenu.setOnDropdownMenuItemClickListener(new PopupMenu.OnMenuItemClickListener(){ - public boolean onMenuItemClick(final MenuItem item) { - mNotesListAdapter.selectAll(!mNotesListAdapter.isAllSelected()); - updateMenu(); - return true; - } - - }); - return true; - } - - // 更新菜单 - private void updateMenu() { - int selectedCount = mNotesListAdapter.getSelectedCount(); - // Update dropdown menu - String format = getResources().getString(R.string.menu_select_title, selectedCount); - mDropDownMenu.setTitle(format); // 更改标题 - MenuItem item = mDropDownMenu.findItem(R.id.action_select_all); - if (item != null) { - if (mNotesListAdapter.isAllSelected()) { - item.setChecked(true); - item.setTitle(R.string.menu_deselect_all); - } else { - item.setChecked(false); - item.setTitle(R.string.menu_select_all); - } - } - } - - public boolean onPrepareActionMode(ActionMode mode, Menu menu) { - // TODO Auto-generated method stub - return false; - } - - public boolean onActionItemClicked(ActionMode mode, MenuItem item) { - // TODO Auto-generated method stub - return false; - } - - public void onDestroyActionMode(ActionMode mode) { - mNotesListAdapter.setChoiceMode(false); - mNotesListView.setLongClickable(true); - mAddNewNote.setVisibility(View.VISIBLE); - } - - public void finishActionMode() { - mActionMode.finish(); - } - - public void onItemCheckedStateChanged(ActionMode mode, int position, long id, - boolean checked) { - mNotesListAdapter.setCheckedItem(position, checked); - updateMenu(); - } - - public boolean onMenuItemClick(MenuItem item) { - if (mNotesListAdapter.getSelectedCount() == 0) { - Toast.makeText(NotesListActivity.this, getString(R.string.menu_select_none), - Toast.LENGTH_SHORT).show(); - return true; - } - - switch (item.getItemId()) { - case R.id.delete: - AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); - builder.setTitle(getString(R.string.alert_title_delete)); - builder.setIcon(android.R.drawable.ic_dialog_alert); - builder.setMessage(getString(R.string.alert_message_delete_notes, - mNotesListAdapter.getSelectedCount())); - builder.setPositiveButton(android.R.string.ok, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, - int which) { - batchDelete(); - } - }); - builder.setNegativeButton(android.R.string.cancel, null); - builder.show(); - break; - case R.id.move: - startQueryDestinationFolders(); - break; - default: - return false; - } - return true; - } - } - - private class NewNoteOnTouchListener implements OnTouchListener { - - public boolean onTouch(View v, MotionEvent event) { - switch (event.getAction()) { - case MotionEvent.ACTION_DOWN: { - Display display = getWindowManager().getDefaultDisplay(); - int screenHeight = display.getHeight(); - int newNoteViewHeight = mAddNewNote.getHeight(); - int start = screenHeight - newNoteViewHeight; - int eventY = start + (int) event.getY(); - /** - * Minus TitleBar's height - */ - if (mState == ListEditState.SUB_FOLDER) { - eventY -= mTitleBar.getHeight(); - start -= mTitleBar.getHeight(); - } - /** - * HACKME:When click the transparent part of "New Note" button, dispatch - * the event to the list view behind this button. The transparent part of - * "New Note" button could be expressed by formula y=-0.12x+94锛圲nit:pixel锛� - * and the line top of the button. The coordinate based on left of the "New - * Note" button. The 94 represents maximum height of the transparent part. - * Notice that, if the background of the button changes, the formula should - * also change. This is very bad, just for the UI designer's strong requirement. - */ - if (event.getY() < (event.getX() * (-0.12) + 94)) { - View view = mNotesListView.getChildAt(mNotesListView.getChildCount() - 1 - - mNotesListView.getFooterViewsCount()); - if (view != null && view.getBottom() > start - && (view.getTop() < (start + 94))) { - mOriginY = (int) event.getY(); - mDispatchY = eventY; - event.setLocation(event.getX(), mDispatchY); - mDispatch = true; - return mNotesListView.dispatchTouchEvent(event); - } - } - break; - } - case MotionEvent.ACTION_MOVE: { - if (mDispatch) { - mDispatchY += (int) event.getY() - mOriginY; - event.setLocation(event.getX(), mDispatchY); - return mNotesListView.dispatchTouchEvent(event); - } - break; - } - default: { - if (mDispatch) { - event.setLocation(event.getX(), mDispatchY); - mDispatch = false; - return mNotesListView.dispatchTouchEvent(event); - } - break; - } - } - return false; - } - - }; - - private void startAsyncNotesListQuery() { - String selection = (mCurrentFolderId == Notes.ID_ROOT_FOLDER) ? ROOT_FOLDER_SELECTION - : NORMAL_SELECTION; - mBackgroundQueryHandler.startQuery(FOLDER_NOTE_LIST_QUERY_TOKEN, null, - Notes.CONTENT_NOTE_URI, NoteItemData.PROJECTION, selection, new String[] { - String.valueOf(mCurrentFolderId) - }, NoteColumns.TYPE + " DESC," + NoteColumns.MODIFIED_DATE + " DESC"); - } - - private final class BackgroundQueryHandler extends AsyncQueryHandler { - public BackgroundQueryHandler(ContentResolver contentResolver) { - super(contentResolver); - } - - @Override - protected void onQueryComplete(int token, Object cookie, Cursor cursor) { - switch (token) { - case FOLDER_NOTE_LIST_QUERY_TOKEN: - mNotesListAdapter.changeCursor(cursor); - break; - case FOLDER_LIST_QUERY_TOKEN: - if (cursor != null && cursor.getCount() > 0) { - showFolderListMenu(cursor); - } else { - Log.e(TAG, "Query folder failed"); - } - break; - default: - return; - } - } - } - - private void showFolderListMenu(Cursor cursor) { - AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); - builder.setTitle(R.string.menu_title_select_folder); - final FoldersListAdapter adapter = new FoldersListAdapter(this, cursor); - builder.setAdapter(adapter, new DialogInterface.OnClickListener() { - - public void onClick(DialogInterface dialog, int which) { - DataUtils.batchMoveToFolder(mContentResolver, - mNotesListAdapter.getSelectedItemIds(), adapter.getItemId(which)); - Toast.makeText( - NotesListActivity.this, - getString(R.string.format_move_notes_to_folder, - mNotesListAdapter.getSelectedCount(), - adapter.getFolderName(NotesListActivity.this, which)), - Toast.LENGTH_SHORT).show(); - mModeCallBack.finishActionMode(); - } - }); - builder.show(); - } - - private void createNewNote() { - Intent intent = new Intent(this, NoteEditActivity.class); - intent.setAction(Intent.ACTION_INSERT_OR_EDIT); - intent.putExtra(Notes.INTENT_EXTRA_FOLDER_ID, mCurrentFolderId); - this.startActivityForResult(intent, REQUEST_CODE_NEW_NODE); - } - - private void batchDelete() { - new AsyncTask>() { - protected HashSet doInBackground(Void... unused) { - HashSet widgets = mNotesListAdapter.getSelectedWidget(); - if (!isSyncMode()) { - // if not synced, delete notes directly - if (DataUtils.batchDeleteNotes(mContentResolver, mNotesListAdapter - .getSelectedItemIds())) { - } else { - Log.e(TAG, "Delete notes error, should not happens"); - } - } else { - // in sync mode, we'll move the deleted note into the trash - // folder - if (!DataUtils.batchMoveToFolder(mContentResolver, mNotesListAdapter - .getSelectedItemIds(), Notes.ID_TRASH_FOLER)) { - Log.e(TAG, "Move notes to trash folder error, should not happens"); - } - } - return widgets; - } - - @Override - protected void onPostExecute(HashSet widgets) { - if (widgets != null) { - for (AppWidgetAttribute widget : widgets) { - if (widget.widgetId != AppWidgetManager.INVALID_APPWIDGET_ID - && widget.widgetType != Notes.TYPE_WIDGET_INVALIDE) { - updateWidget(widget.widgetId, widget.widgetType); - } - } - } - mModeCallBack.finishActionMode(); - } - }.execute(); - } - - private void deleteFolder(long folderId) { - if (folderId == Notes.ID_ROOT_FOLDER) { - Log.e(TAG, "Wrong folder id, should not happen " + folderId); - return; - } - - HashSet ids = new HashSet(); - ids.add(folderId); - HashSet widgets = DataUtils.getFolderNoteWidget(mContentResolver, - folderId); - if (!isSyncMode()) { - // if not synced, delete folder directly - DataUtils.batchDeleteNotes(mContentResolver, ids); - } else { - // in sync mode, we'll move the deleted folder into the trash folder - DataUtils.batchMoveToFolder(mContentResolver, ids, Notes.ID_TRASH_FOLER); - } - if (widgets != null) { - for (AppWidgetAttribute widget : widgets) { - if (widget.widgetId != AppWidgetManager.INVALID_APPWIDGET_ID - && widget.widgetType != Notes.TYPE_WIDGET_INVALIDE) { - updateWidget(widget.widgetId, widget.widgetType); - } - } - } - } - - private void openNode(NoteItemData data) { - Intent intent = new Intent(this, NoteEditActivity.class); - intent.setAction(Intent.ACTION_VIEW); - intent.putExtra(Intent.EXTRA_UID, data.getId()); - this.startActivityForResult(intent, REQUEST_CODE_OPEN_NODE); - } - - private void openFolder(NoteItemData data) { - mCurrentFolderId = data.getId(); - startAsyncNotesListQuery(); - if (data.getId() == Notes.ID_CALL_RECORD_FOLDER) { - mState = ListEditState.CALL_RECORD_FOLDER; - mAddNewNote.setVisibility(View.GONE); - } else { - mState = ListEditState.SUB_FOLDER; - } - if (data.getId() == Notes.ID_CALL_RECORD_FOLDER) { - mTitleBar.setText(R.string.call_record_folder_name); - } else { - mTitleBar.setText(data.getSnippet()); - } - mTitleBar.setVisibility(View.VISIBLE); - } - - public void onClick(View v) { - switch (v.getId()) { - case R.id.btn_new_note: - createNewNote(); - break; - default: - break; - } - } - - private void showSoftInput() { - InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - if (inputMethodManager != null) { - inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); - } - } - - private void hideSoftInput(View view) { - InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0); - } - - private void showCreateOrModifyFolderDialog(final boolean create) { - final AlertDialog.Builder builder = new AlertDialog.Builder(this); - View view = LayoutInflater.from(this).inflate(R.layout.dialog_edit_text, null); - final EditText etName = (EditText) view.findViewById(R.id.et_foler_name); - showSoftInput(); - if (!create) { - if (mFocusNoteDataItem != null) { - etName.setText(mFocusNoteDataItem.getSnippet()); - builder.setTitle(getString(R.string.menu_folder_change_name)); - } else { - Log.e(TAG, "The long click data item is null"); - return; - } - } else { - etName.setText(""); - builder.setTitle(this.getString(R.string.menu_create_folder)); - } - - builder.setPositiveButton(android.R.string.ok, null); - builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - hideSoftInput(etName); - } - }); - - final Dialog dialog = builder.setView(view).show(); - final Button positive = (Button)dialog.findViewById(android.R.id.button1); - positive.setOnClickListener(new OnClickListener() { - public void onClick(View v) { - hideSoftInput(etName); - String name = etName.getText().toString(); - if (DataUtils.checkVisibleFolderName(mContentResolver, name)) { - Toast.makeText(NotesListActivity.this, getString(R.string.folder_exist, name), - Toast.LENGTH_LONG).show(); - etName.setSelection(0, etName.length()); - return; - } - if (!create) { - if (!TextUtils.isEmpty(name)) { - ContentValues values = new ContentValues(); - values.put(NoteColumns.SNIPPET, name); - values.put(NoteColumns.TYPE, Notes.TYPE_FOLDER); - values.put(NoteColumns.LOCAL_MODIFIED, 1); - mContentResolver.update(Notes.CONTENT_NOTE_URI, values, NoteColumns.ID - + "=?", new String[] { - String.valueOf(mFocusNoteDataItem.getId()) - }); - } - } else if (!TextUtils.isEmpty(name)) { - ContentValues values = new ContentValues(); - values.put(NoteColumns.SNIPPET, name); - values.put(NoteColumns.TYPE, Notes.TYPE_FOLDER); - mContentResolver.insert(Notes.CONTENT_NOTE_URI, values); - } - dialog.dismiss(); - } - }); - - if (TextUtils.isEmpty(etName.getText())) { - positive.setEnabled(false); - } - /** - * When the name edit text is null, disable the positive button - */ - etName.addTextChangedListener(new TextWatcher() { - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - // TODO Auto-generated method stub - - } - - public void onTextChanged(CharSequence s, int start, int before, int count) { - if (TextUtils.isEmpty(etName.getText())) { - positive.setEnabled(false); - } else { - positive.setEnabled(true); - } - } - - public void afterTextChanged(Editable s) { - // TODO Auto-generated method stub - - } - }); - } - - /* (non-Javadoc) - * @see android.app.Activity#onBackPressed() - * 按返回键时根据情况更改类中的数据 - */ - @Override - public void onBackPressed() { switch (mState) { - case SUB_FOLDER: - mCurrentFolderId = Notes.ID_ROOT_FOLDER; - mState = ListEditState.NOTE_LIST; - startAsyncNotesListQuery(); - mTitleBar.setVisibility(View.GONE); - break; - case CALL_RECORD_FOLDER: - mCurrentFolderId = Notes.ID_ROOT_FOLDER; - mState = ListEditState.NOTE_LIST; - mAddNewNote.setVisibility(View.VISIBLE); - mTitleBar.setVisibility(View.GONE); - startAsyncNotesListQuery(); - break; - case NOTE_LIST: - super.onBackPressed(); - break; - default: - break; - } - } - - /** - * @param appWidgetId - * @param appWidgetType - * 根据不同类型的widget更新插件,通过intent传送数据 - */ - private void updateWidget(int appWidgetId, int appWidgetType) { - Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE); - if (appWidgetType == Notes.TYPE_WIDGET_2X) { - intent.setClass(this, NoteWidgetProvider_2x.class); - } else if (appWidgetType == Notes.TYPE_WIDGET_4X) { - intent.setClass(this, NoteWidgetProvider_4x.class); - } else { - Log.e(TAG, "Unspported widget type"); - return; - } - - intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] { - appWidgetId - }); - - sendBroadcast(intent); - setResult(RESULT_OK, intent); - } - - /** - * 声明监听器,建立菜单,包括名称,视图,删除操作,更改名称操作; - */ - private final OnCreateContextMenuListener mFolderOnCreateContextMenuListener = new OnCreateContextMenuListener() { - public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { - if (mFocusNoteDataItem != null) { - menu.setHeaderTitle(mFocusNoteDataItem.getSnippet()); - menu.add(0, MENU_FOLDER_VIEW, 0, R.string.menu_folder_view); - menu.add(0, MENU_FOLDER_DELETE, 0, R.string.menu_folder_delete); - menu.add(0, MENU_FOLDER_CHANGE_NAME, 0, R.string.menu_folder_change_name); - } - } - }; - - @Override - public void onContextMenuClosed(Menu menu) { - if (mNotesListView != null) { - mNotesListView.setOnCreateContextMenuListener(null); - } - super.onContextMenuClosed(menu); - } - - /* (non-Javadoc) - * @see android.app.Activity#onContextItemSelected(android.view.MenuItem) - * 针对menu中不同的选择进行不同的处理,里面详细注释 - */ - @Override - public boolean onContextItemSelected(MenuItem item) { - if (mFocusNoteDataItem == null) { - Log.e(TAG, "The long click data item is null"); - return false; - } - switch (item.getItemId()) { - case MENU_FOLDER_VIEW: - openFolder(mFocusNoteDataItem);//打开对应文件 - break; - case MENU_FOLDER_DELETE: - AlertDialog.Builder builder = new AlertDialog.Builder(this);//设置确认是否删除的对话框 - builder.setTitle(getString(R.string.alert_title_delete)); - builder.setIcon(android.R.drawable.ic_dialog_alert); - builder.setMessage(getString(R.string.alert_message_delete_folder)); - builder.setPositiveButton(android.R.string.ok, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - deleteFolder(mFocusNoteDataItem.getId()); - } - }); - builder.setNegativeButton(android.R.string.cancel, null); - builder.show();//显示对话框 - break; - case MENU_FOLDER_CHANGE_NAME: - showCreateOrModifyFolderDialog(false); - break; - default: - break; - } - - return true; - } - - @Override - public boolean onPrepareOptionsMenu(Menu menu) { - menu.clear(); - if (mState == ListEditState.NOTE_LIST) { - getMenuInflater().inflate(R.menu.note_list, menu); - // set sync or sync_cancel - menu.findItem(R.id.menu_sync).setTitle( - GTaskSyncService.isSyncing() ? R.string.menu_sync_cancel : R.string.menu_sync); - } else if (mState == ListEditState.SUB_FOLDER) { - getMenuInflater().inflate(R.menu.sub_folder, menu); - } else if (mState == ListEditState.CALL_RECORD_FOLDER) { - getMenuInflater().inflate(R.menu.call_record_folder, menu); - } else { - Log.e(TAG, "Wrong state:" + mState); - } - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - case R.id.menu_new_folder: { - showCreateOrModifyFolderDialog(true); - break; - } - case R.id.menu_export_text: { - exportNoteToText(); - break; - } - case R.id.menu_sync: { - if (isSyncMode()) { - if (TextUtils.equals(item.getTitle(), getString(R.string.menu_sync))) { - GTaskSyncService.startSync(this); - } else { - GTaskSyncService.cancelSync(this); - } - } else { - startPreferenceActivity(); - } - break; - } - case R.id.menu_setting: { - startPreferenceActivity(); - break; - } - case R.id.menu_new_note: { - createNewNote(); - break; - } - case R.id.menu_search: - onSearchRequested(); - break; - default: - break; - } - return true; - } - - /* (non-Javadoc) - * @see android.app.Activity#onSearchRequested() - * 直接调用startSearch函数 - */ - @Override - public boolean onSearchRequested() { - startSearch(null, false, null /* appData */, false); - return true; - } - - /** - * 函数功能:实现将便签导出到文本功能 - */ - private void exportNoteToText() { - final BackupUtils backup = BackupUtils.getInstance(NotesListActivity.this); - new AsyncTask() { - - @Override - protected Integer doInBackground(Void... unused) { - return backup.exportToText(); - } - - @Override - protected void onPostExecute(Integer result) { - if (result == BackupUtils.STATE_SD_CARD_UNMOUONTED) { - AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); - builder.setTitle(NotesListActivity.this - .getString(R.string.failed_sdcard_export)); - builder.setMessage(NotesListActivity.this - .getString(R.string.error_sdcard_unmounted)); - builder.setPositiveButton(android.R.string.ok, null); - builder.show(); - } else if (result == BackupUtils.STATE_SUCCESS) { - AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); - builder.setTitle(NotesListActivity.this - .getString(R.string.success_sdcard_export)); - builder.setMessage(NotesListActivity.this.getString( - R.string.format_exported_file_location, backup - .getExportedTextFileName(), backup.getExportedTextFileDir())); - builder.setPositiveButton(android.R.string.ok, null); - builder.show(); - } else if (result == BackupUtils.STATE_SYSTEM_ERROR) { - AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); - builder.setTitle(NotesListActivity.this - .getString(R.string.failed_sdcard_export)); - builder.setMessage(NotesListActivity.this - .getString(R.string.error_sdcard_export)); - builder.setPositiveButton(android.R.string.ok, null); - builder.show(); - } - } - - }.execute(); - } - - /** - * @return - * 功能:判断是否正在同步 - */ - private boolean isSyncMode() { - return NotesPreferenceActivity.getSyncAccountName(this).trim().length() > 0; - } - - /** - * 功能:跳转到PreferenceActivity界面 - */ - private void startPreferenceActivity() { - Activity from = getParent() != null ? getParent() : this; - Intent intent = new Intent(from, NotesPreferenceActivity.class); - from.startActivityIfNeeded(intent, -1); - } - - /** - * @author k - * 函数功能:实现对便签列表项的点击事件(短按) - */ - private class OnListItemClickListener implements OnItemClickListener { - - public void onItemClick(AdapterView parent, View view, int position, long id) { - if (view instanceof NotesListItem) { - NoteItemData item = ((NotesListItem) view).getItemData(); - if (mNotesListAdapter.isInChoiceMode()) { - if (item.getType() == Notes.TYPE_NOTE) { - position = position - mNotesListView.getHeaderViewsCount(); - mModeCallBack.onItemCheckedStateChanged(null, position, id, - !mNotesListAdapter.isSelectedItem(position)); - } - return; - } - - switch (mState) { - case NOTE_LIST: - if (item.getType() == Notes.TYPE_FOLDER - || item.getType() == Notes.TYPE_SYSTEM) { - openFolder(item); - } else if (item.getType() == Notes.TYPE_NOTE) { - openNode(item); - } else { - Log.e(TAG, "Wrong note type in NOTE_LIST"); - } - break; - case SUB_FOLDER: - case CALL_RECORD_FOLDER: - if (item.getType() == Notes.TYPE_NOTE) { - openNode(item); - } else { - Log.e(TAG, "Wrong note type in SUB_FOLDER"); - } - break; - default: - break; - } - } - } - - } - - /** - * 查询目标文件 - */ - private void startQueryDestinationFolders() { - String selection = NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>? AND " + NoteColumns.ID + "<>?"; - selection = (mState == ListEditState.NOTE_LIST) ? selection: - "(" + selection + ") OR (" + NoteColumns.ID + "=" + Notes.ID_ROOT_FOLDER + ")"; - - mBackgroundQueryHandler.startQuery(FOLDER_LIST_QUERY_TOKEN, - null, - Notes.CONTENT_NOTE_URI, - FoldersListAdapter.PROJECTION, - selection, - new String[] { - String.valueOf(Notes.TYPE_FOLDER), - String.valueOf(Notes.ID_TRASH_FOLER), - String.valueOf(mCurrentFolderId) - }, - NoteColumns.MODIFIED_DATE + " DESC"); - } - - /* (non-Javadoc) - * @see android.widget.AdapterView.OnItemLongClickListener#onItemLongClick(android.widget.AdapterView, android.view.View, int, long) - * 长按某一项时进行的操作 - * 如果长按的是便签,则通过ActionMode菜单实现;如果长按的是文件夹,则通过ContextMenu菜单实现; - * 具体ActionMOde菜单和ContextMenu菜单的详细见精度笔记 - */ - public boolean onItemLongClick(AdapterView parent, View view, int position, long id) { - if (view instanceof NotesListItem) { - mFocusNoteDataItem = ((NotesListItem) view).getItemData(); - if (mFocusNoteDataItem.getType() == Notes.TYPE_NOTE && !mNotesListAdapter.isInChoiceMode()) { - if (mNotesListView.startActionMode(mModeCallBack) != null) { - mModeCallBack.onItemCheckedStateChanged(null, position, id, true); - mNotesListView.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); - } else { - Log.e(TAG, "startActionMode fails"); - } - } else if (mFocusNoteDataItem.getType() == Notes.TYPE_FOLDER) { - mNotesListView.setOnCreateContextMenuListener(mFolderOnCreateContextMenuListener); - } - } - return false; - } -} \ No newline at end of file diff --git a/src/ui/NotesListAdapter.java b/src/ui/NotesListAdapter.java deleted file mode 100644 index b165769..0000000 --- a/src/ui/NotesListAdapter.java +++ /dev/null @@ -1,257 +0,0 @@ -package net.micode.notes.ui; - -import android.content.Context; -import android.database.Cursor; -import android.util.Log; -import android.view.View; -import android.view.ViewGroup; -import android.widget.CursorAdapter; - - -import net.micode.notes.data.Notes; - -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; - - -/* - * 功能:直译为便签表连接器,继承了CursorAdapter,它为cursor和ListView提供了连接的桥梁。 - * 所以NotesListAdapter实现的是鼠标和编辑便签链接的桥梁 - */ -public class NotesListAdapter extends CursorAdapter { - private static final String TAG = "NotesListAdapter"; - private Context mContext; - private HashMap mSelectedIndex; - private int mNotesCount; //便签数 - private boolean mChoiceMode; //选择模式标记 - - /* - * 桌面widget的属性,包括编号和类型 - */ - public static class AppWidgetAttribute { - public int widgetId; - public int widgetType; - }; - - /* - * 函数功能:初始化便签链接器 - * 函数实现:根据传进来的内容设置相关变量 - */ - public NotesListAdapter(Context context) { - super(context, null); //父类对象置空 - mSelectedIndex = new HashMap(); //新建选项下标的hash表 - mContext = context; - mNotesCount = 0; - } - - @Override - /* - * 函数功能:新建一个视图来存储光标所指向的数据 - * 函数实现:使用兄弟类NotesListItem新建一个项目选项 - */ - public View newView(Context context, Cursor cursor, ViewGroup parent) { - return new NotesListItem(context); - } - - /* - * 函数功能:将已经存在的视图和鼠标指向的数据进行捆绑 - * 函数实现:如下注释 - */ - @Override - public void bindView(View view, Context context, Cursor cursor) { - if (view instanceof NotesListItem) { - //若view是NotesListItem的一个实例 - NoteItemData itemData = new NoteItemData(context, cursor); - ((NotesListItem) view).bind(context, itemData, mChoiceMode, - isSelectedItem(cursor.getPosition())); - //则新建一个项目选项并且用bind跟将view和鼠标,内容,便签数据捆绑在一起 - } - } - - /* - * 函数功能:设置勾选框 - * 函数实现:如下注释 - */ - public void setCheckedItem(final int position, final boolean checked) { - mSelectedIndex.put(position, checked); - //根据定位和是否勾选设置下标 - notifyDataSetChanged(); - //在修改后刷新activity - } - - /* - * 函数功能:判断单选按钮是否勾选 - */ - public boolean isInChoiceMode() { - return mChoiceMode; - } - - /* - * 函数功能:设置单项选项框 - * 函数实现:重置下标并且根据参数mode设置选项 - */ - public void setChoiceMode(boolean mode) { - mSelectedIndex.clear(); - mChoiceMode = mode; - } - - /* - * 函数功能:选择全部选项 - * 函数实现:如下注释 - */ - public void selectAll(boolean checked) { - Cursor cursor = getCursor(); - //获取光标位置 - for (int i = 0; i < getCount(); i++) { - if (cursor.moveToPosition(i)) { - if (NoteItemData.getNoteType(cursor) == Notes.TYPE_NOTE) { - setCheckedItem(i, checked); - } - } - } - //遍历所有光标可用的位置在判断为便签类型之后勾选单项框 - } - - /* - * 函数功能:建立选择项的下标列表 - * 函数实现:如下注释 - */ - public HashSet getSelectedItemIds() { - HashSet itemSet = new HashSet(); - //建立hash表 - for (Integer position : mSelectedIndex.keySet()) { - //遍历所有的关键 - if (mSelectedIndex.get(position) == true) { - //若光标位置可用 - Long id = getItemId(position); - if (id == Notes.ID_ROOT_FOLDER) { - //原文件不需要添加 - Log.d(TAG, "Wrong item id, should not happen"); - } else { - itemSet.add(id); - } - //则将id该下标假如选项集合中 - - } - } - - return itemSet; - } - - /* - * 函数功能:建立桌面Widget的选项表 - * 函数实现:如下注释 - */ - public HashSet getSelectedWidget() { - HashSet itemSet = new HashSet(); - for (Integer position : mSelectedIndex.keySet()) { - if (mSelectedIndex.get(position) == true) { - Cursor c = (Cursor) getItem(position); - //以上4句和getSelectedItemIds一样,不再重复 - if (c != null) { - //光标位置可用的话就建立新的Widget属性并编辑下标和类型,最后添加到选项集中 - AppWidgetAttribute widget = new AppWidgetAttribute(); - NoteItemData item = new NoteItemData(mContext, c); - widget.widgetId = item.getWidgetId(); - widget.widgetType = item.getWidgetType(); - itemSet.add(widget); - /** - * Don't close cursor here, only the adapter could close it - */ - } else { - Log.e(TAG, "Invalid cursor"); - return null; - } - } - } - return itemSet; - } - - /* - * 函数功能:获取选项个数 - * 函数实现:如下注释 - */ - public int getSelectedCount() { - Collection values = mSelectedIndex.values(); - //首先获取选项下标的值 - if (null == values) { - return 0; - } - Iterator iter = values.iterator(); - //初始化叠加器 - int count = 0; - while (iter.hasNext()) { - if (true == iter.next()) { - //若value值为真计数+1 - count++; - } - } - return count; - } - - /* - * 函数功能:判断是否全部选中 - * 函数实现:如下注释 - */ - public boolean isAllSelected() { - int checkedCount = getSelectedCount(); - return (checkedCount != 0 && checkedCount == mNotesCount); - //获取选项数看是否等于便签的个数 - } - - /* - * 函数功能:判断是否为选项表 - * 函数实现:通过传递的下标来确定 - */ - public boolean isSelectedItem(final int position) { - if (null == mSelectedIndex.get(position)) { - return false; - } - return mSelectedIndex.get(position); - } - - @Override - /* - * 函数功能:在activity内容发生局部变动的时候回调该函数计算便签的数量 - * 函数实现:如下注释 - */ - protected void onContentChanged() { - super.onContentChanged(); - //执行基类函数 - calcNotesCount(); - } - - @Override - /* - * 函数功能:在activity光标发生局部变动的时候回调该函数计算便签的数量 - */ - public void changeCursor(Cursor cursor) { - super.changeCursor(cursor); - //执行基类函数 - calcNotesCount(); - } - - /* - * 函数功能:计算便签数量 - * - */ - private void calcNotesCount() { - mNotesCount = 0; - for (int i = 0; i < getCount(); i++) { - //获取总数同时遍历 - Cursor c = (Cursor) getItem(i); - if (c != null) { - if (NoteItemData.getNoteType(c) == Notes.TYPE_NOTE) { - mNotesCount++; - //若该位置不为空并且文本类型为便签就+1 - } - } else { - Log.e(TAG, "Invalid cursor"); - return; - } - //否则报错 - } - } -} \ No newline at end of file diff --git a/src/ui/NotesListItem.java b/src/ui/NotesListItem.java deleted file mode 100644 index fa8b3d2..0000000 --- a/src/ui/NotesListItem.java +++ /dev/null @@ -1,116 +0,0 @@ -package net.micode.notes.ui; - -import android.content.Context; -import android.text.format.DateUtils; -import android.view.View; -import android.widget.CheckBox; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; - -import net.micode.notes.R; -import net.micode.notes.data.Notes; -import net.micode.notes.tool.DataUtils; -import net.micode.notes.tool.ResourceParser.NoteItemBgResources; - - -//创建便签列表项目选项 -public class NotesListItem extends LinearLayout { - private ImageView mAlert;//闹钟图片 - private TextView mTitle; //标题 - private TextView mTime; //时间 - private TextView mCallName; // - private NoteItemData mItemData; //标签数据 - private CheckBox mCheckBox; //打钩框 - - /*初始化基本信息*/ - public NotesListItem(Context context) { - super(context); //super()它的主要作用是调整调用父类构造函数的顺序 - inflate(context, R.layout.note_item, this);//Inflate可用于将一个xml中定义的布局控件找出来,这里的xml是r。layout - //findViewById用于从contentView中查找指定ID的View,转换出来的形式根据需要而定; - mAlert = (ImageView) findViewById(R.id.iv_alert_icon); - mTitle = (TextView) findViewById(R.id.tv_title); - mTime = (TextView) findViewById(R.id.tv_time); - mCallName = (TextView) findViewById(R.id.tv_name); - mCheckBox = (CheckBox) findViewById(android.R.id.checkbox); - } - ///根据data的属性对各个控件的属性的控制,主要是可见性Visibility,内容setText,格式setTextAppearance - public void bind(Context context, NoteItemData data, boolean choiceMode, boolean checked) { - if (choiceMode && data.getType() == Notes.TYPE_NOTE) { - mCheckBox.setVisibility(View.VISIBLE); ///设置可见行为可见 - mCheckBox.setChecked(checked); ///格子打钩 - } else { - mCheckBox.setVisibility(View.GONE); - } - - mItemData = data; - ///设置控件属性,一共三种情况,由data的id和父id是否与保存到文件夹的id一致来决定 - if (data.getId() == Notes.ID_CALL_RECORD_FOLDER) { - mCallName.setVisibility(View.GONE); - mAlert.setVisibility(View.VISIBLE); - //设置该textview的style - mTitle.setTextAppearance(context, R.style.TextAppearancePrimaryItem); - //settext为设置内容 - mTitle.setText(context.getString(R.string.call_record_folder_name) - + context.getString(R.string.format_folder_files_count, data.getNotesCount())); - mAlert.setImageResource(R.drawable.call_record); - } else if (data.getParentId() == Notes.ID_CALL_RECORD_FOLDER) { - mCallName.setVisibility(View.VISIBLE); - mCallName.setText(data.getCallName()); - mTitle.setTextAppearance(context,R.style.TextAppearanceSecondaryItem); - mTitle.setText(DataUtils.getFormattedSnippet(data.getSnippet())); - ///关于闹钟的设置 - if (data.hasAlert()) { - mAlert.setImageResource(R.drawable.clock);//图片来源的设置 - mAlert.setVisibility(View.VISIBLE); - } else { - mAlert.setVisibility(View.GONE); - } - } else { - mCallName.setVisibility(View.GONE); - mTitle.setTextAppearance(context, R.style.TextAppearancePrimaryItem); - ///设置title格式 - if (data.getType() == Notes.TYPE_FOLDER) { - mTitle.setText(data.getSnippet() - + context.getString(R.string.format_folder_files_count, - data.getNotesCount())); - mAlert.setVisibility(View.GONE); - } else { - mTitle.setText(DataUtils.getFormattedSnippet(data.getSnippet())); - if (data.hasAlert()) { - mAlert.setImageResource(R.drawable.clock);///设置图片来源 - mAlert.setVisibility(View.VISIBLE); - } else { - mAlert.setVisibility(View.GONE); - } - } - } - ///设置内容,获取相关时间,从data里编辑的日期中获取 - mTime. setText(DateUtils.getRelativeTimeSpanString(data.getModifiedDate())); - - setBackground(data); - } - //根据data的文件属性来设置背景 - private void setBackground(NoteItemData data) { - int id = data.getBgColorId(); - //,若是note型文件,则4种情况,对于4种不同情况的背景来源 - if (data.getType() == Notes.TYPE_NOTE) { - //单个数据并且只有一个子文件夹 - if (data.isSingle() || data.isOneFollowingFolder()) { - setBackgroundResource(NoteItemBgResources.getNoteBgSingleRes(id)); - } else if (data.isLast()) {//是最后一个数据 - setBackgroundResource(NoteItemBgResources.getNoteBgLastRes(id)); - } else if (data.isFirst() || data.isMultiFollowingFolder()) {//是一个数据并有多个子文件夹 - setBackgroundResource(NoteItemBgResources.getNoteBgFirstRes(id)); - } else { - setBackgroundResource(NoteItemBgResources.getNoteBgNormalRes(id)); - } - } else { - //若不是note直接调用文件夹的背景来源 - setBackgroundResource(NoteItemBgResources.getFolderBgRes()); - } - } - public NoteItemData getItemData() { - return mItemData; - } -} \ No newline at end of file diff --git a/src/ui/NotesPreferenceActivity.java b/src/ui/NotesPreferenceActivity.java deleted file mode 100644 index 3a1a3de..0000000 --- a/src/ui/NotesPreferenceActivity.java +++ /dev/null @@ -1,516 +0,0 @@ -package net.micode.notes.ui; - -import android.accounts.Account; -import android.accounts.AccountManager; -import android.annotation.SuppressLint; -import android.app.ActionBar; -import android.app.AlertDialog; -import android.content.BroadcastReceiver; -import android.content.ContentValues; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.IntentFilter; -import android.content.SharedPreferences; -import android.os.Bundle; -import android.preference.Preference; -import android.preference.Preference.OnPreferenceClickListener; -import android.preference.PreferenceActivity; -import android.preference.PreferenceCategory; -import android.text.TextUtils; -import android.text.format.DateFormat; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuItem; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; -import android.widget.Toast; - -import net.micode.notes.R; -import net.micode.notes.data.Notes; -import net.micode.notes.data.Notes.NoteColumns; -import net.micode.notes.gtask.remote.GTaskSyncService; - -/* - *该类功能:NotesPreferenceActivity,在小米便签中主要实现的是对背景颜色和字体大小的数据储存。 - * 继承了PreferenceActivity主要功能为对系统信息和配置进行自动保存的Activity - */ -public class NotesPreferenceActivity extends PreferenceActivity { - public static final String PREFERENCE_NAME = "notes_preferences"; - //优先名 - public static final String PREFERENCE_SYNC_ACCOUNT_NAME = "pref_key_account_name"; - //同步账号 - public static final String PREFERENCE_LAST_SYNC_TIME = "pref_last_sync_time"; - //同步时间 - public static final String PREFERENCE_SET_BG_COLOR_KEY = "pref_key_bg_random_appear"; - - private static final String PREFERENCE_SYNC_ACCOUNT_KEY = "pref_sync_account_key"; - //同步密码 - private static final String AUTHORITIES_FILTER_KEY = "authorities"; - //本地密码 - private PreferenceCategory mAccountCategory; - //账户分组 - private GTaskReceiver mReceiver; - //同步任务接收器 - private Account[] mOriAccounts; - //账户 - private boolean mHasAddedAccount; - //账户的hash标记 - - @SuppressLint("UnspecifiedRegisterReceiverFlag") - @Override - /* - *函数功能:创建一个activity,在函数里要完成所有的正常静态设置 - *参数:Bundle icicle:存放了 activity 当前的状态 - *函数实现:如下注释 - */ - protected void onCreate(Bundle icicle) { - //先执行父类的创建函数 - super.onCreate(icicle); - - /* using the app icon for navigation */ - getActionBar().setDisplayHomeAsUpEnabled(true); - //给左上角图标的左边加上一个返回的图标 - - addPreferencesFromResource(R.xml.preferences); - //添加xml来源并显示 xml - mAccountCategory = (PreferenceCategory) findPreference(PREFERENCE_SYNC_ACCOUNT_KEY); - //根据同步账户关键码来初始化分组 - mReceiver = new GTaskReceiver(); - IntentFilter filter = new IntentFilter(); - filter.addAction(GTaskSyncService.GTASK_SERVICE_BROADCAST_NAME); - registerReceiver(mReceiver, filter); - //初始化同步组件 - - mOriAccounts = null; - View header = LayoutInflater.from(this).inflate(R.layout.settings_header, null); - //获取listvivew,ListView的作用:用于列出所有选择 - getListView().addHeaderView(header, null, true); - //在listview组件上方添加其他组件 - } - - @Override - /* - * 函数功能:activity交互功能的实现,用于接受用户的输入 - * 函数实现:如下注释 - */ - protected void onResume() { - //先执行父类 的交互实现 - super.onResume(); - - // need to set sync account automatically if user has added a new - // account - if (mHasAddedAccount) { - //若用户新加了账户则自动设置同步账户 - Account[] accounts = getGoogleAccounts(); - //获取google同步账户 - if (mOriAccounts != null && accounts.length > mOriAccounts.length) { - //若原账户不为空且当前账户有增加 - for (Account accountNew : accounts) { - boolean found = false; - for (Account accountOld : mOriAccounts) { - if (TextUtils.equals(accountOld.name, accountNew.name)) { - //更新账户 - found = true; - break; - } - } - if (!found) { - setSyncAccount(accountNew.name); - //若是没有找到旧的账户,那么同步账号中就只添加新账户 - break; - } - } - } - } - - refreshUI(); - //刷新标签界面 - } - - @Override - /* - * 函数功能:销毁一个activity - * 函数实现:如下注释 - */ - protected void onDestroy() { - if (mReceiver != null) { - unregisterReceiver(mReceiver); - //注销接收器 - } - super.onDestroy(); - //执行父类的销毁动作 - } - - /* - * 函数功能:重新设置账户信息 - * 函数实现:如下注释 - */ - private void loadAccountPreference() { - mAccountCategory.removeAll(); - //销毁所有的分组 - Preference accountPref = new Preference(this); - //建立首选项 - final String defaultAccount = getSyncAccountName(this); - accountPref.setTitle(getString(R.string.preferences_account_title)); - accountPref.setSummary(getString(R.string.preferences_account_summary)); - //设置首选项的大标题和小标题 - accountPref.setOnPreferenceClickListener(new OnPreferenceClickListener() { - public boolean onPreferenceClick(Preference preference) { - //建立监听器 - if (!GTaskSyncService.isSyncing()) { - if (TextUtils.isEmpty(defaultAccount)) { - // the first time to set account - //若是第一次建立账户显示选择账户提示对话框 - showSelectAccountAlertDialog(); - } else { - // if the account has already been set, we need to promp - // user about the risk - //若是已经建立则显示修改对话框并进行修改操作 - showChangeAccountConfirmAlertDialog(); - } - } else { - //若在没有同步的情况下,则在toast中显示不能修改 - Toast.makeText(NotesPreferenceActivity.this, - R.string.preferences_toast_cannot_change_account, Toast.LENGTH_SHORT) - .show(); - } - return true; - } - }); - - //根据新建首选项编辑新的账户分组 - mAccountCategory.addPreference(accountPref); - } - - /* - *函数功能:设置按键的状态和最后同步的时间 - *函数实现:如下注释 - */ - private void loadSyncButton() { - Button syncButton = (Button) findViewById(R.id.preference_sync_button); - TextView lastSyncTimeView = (TextView) findViewById(R.id.prefenerece_sync_status_textview); - //获取同步按钮控件和最终同步时间的的窗口 - // set button state - //设置按钮的状态 - if (GTaskSyncService.isSyncing()) { - //若是在同步状态下 - syncButton.setText(getString(R.string.preferences_button_sync_cancel)); - syncButton.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - GTaskSyncService.cancelSync(NotesPreferenceActivity.this); - } - }); - //设置按钮显示的文本为“取消同步”以及监听器 - } else { - syncButton.setText(getString(R.string.preferences_button_sync_immediately)); - syncButton.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - GTaskSyncService.startSync(NotesPreferenceActivity.this); - } - }); - //若是不同步则设置按钮显示的文本为“立即同步”以及对应监听器 - } - syncButton.setEnabled(!TextUtils.isEmpty(getSyncAccountName(this))); - //设置按键可用还是不可用 - - // set last sync time - // 设置最终同步时间 - if (GTaskSyncService.isSyncing()) { - //若是在同步的情况下 - lastSyncTimeView.setText(GTaskSyncService.getProgressString()); - lastSyncTimeView.setVisibility(View.VISIBLE); - // 根据当前同步服务器设置时间显示框的文本以及可见性 - } else { - //若是非同步情况 - long lastSyncTime = getLastSyncTime(this); - if (lastSyncTime != 0) { - lastSyncTimeView.setText(getString(R.string.preferences_last_sync_time, - DateFormat.format(getString(R.string.preferences_last_sync_time_format), - lastSyncTime))); - lastSyncTimeView.setVisibility(View.VISIBLE); - //则根据最后同步时间的信息来编辑时间显示框的文本内容和可见性 - } else { - //若时间为空直接设置为不可见状态 - lastSyncTimeView.setVisibility(View.GONE); - } - } - } - /* - *函数功能:刷新标签界面 - *函数实现:调用上文设置账号和设置按键两个函数来实现 - */ - private void refreshUI() { - loadAccountPreference(); - loadSyncButton(); - } - - /* - * 函数功能:显示账户选择的对话框并进行账户的设置 - * 函数实现:如下注释 - */ - private void showSelectAccountAlertDialog() { - AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this); - //创建一个新的对话框 - - View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null); - TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title); - titleTextView.setText(getString(R.string.preferences_dialog_select_account_title)); - TextView subtitleTextView = (TextView) titleView.findViewById(R.id.account_dialog_subtitle); - subtitleTextView.setText(getString(R.string.preferences_dialog_select_account_tips)); - //设置标题以及子标题的内容 - dialogBuilder.setCustomTitle(titleView); - dialogBuilder.setPositiveButton(null, null); - //设置对话框的自定义标题,建立一个YES的按钮 - Account[] accounts = getGoogleAccounts(); - String defAccount = getSyncAccountName(this); - //获取同步账户信息 - mOriAccounts = accounts; - mHasAddedAccount = false; - - if (accounts.length > 0) { - //若账户不为空 - CharSequence[] items = new CharSequence[accounts.length]; - final CharSequence[] itemMapping = items; - int checkedItem = -1; - int index = 0; - for (Account account : accounts) { - if (TextUtils.equals(account.name, defAccount)) { - checkedItem = index; - //在账户列表中查询到所需账户 - } - items[index++] = account.name; - } - dialogBuilder.setSingleChoiceItems(items, checkedItem, - //在对话框建立一个单选的复选框 - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - setSyncAccount(itemMapping[which].toString()); - dialog.dismiss(); - //取消对话框 - refreshUI(); - } - //设置点击后执行的事件,包括检录新同步账户和刷新标签界面 - }); - //建立对话框网络版的监听器 - } - - View addAccountView = LayoutInflater.from(this).inflate(R.layout.add_account_text, null); - dialogBuilder.setView(addAccountView); - //给新加账户对话框设置自定义样式 - - final AlertDialog dialog = dialogBuilder.show(); - //显示对话框 - addAccountView.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - mHasAddedAccount = true; - //将新加账户的hash置true - Intent intent = new Intent("android.settings.ADD_ACCOUNT_SETTINGS"); - //建立网络建立组件 - intent.putExtra(AUTHORITIES_FILTER_KEY, new String[] { - "gmail-ls" - }); - startActivityForResult(intent, -1); - //跳回上一个选项 - dialog.dismiss(); - } - }); - //建立新加账户对话框的监听器 - } - - /* - * 函数功能:显示账户选择对话框和相关账户操作 - * 函数实现:如下注释 - */ - private void showChangeAccountConfirmAlertDialog() { - AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this); - //创建一个新的对话框 - View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null); - TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title); - titleTextView.setText(getString(R.string.preferences_dialog_change_account_title, - getSyncAccountName(this))); - TextView subtitleTextView = (TextView) titleView.findViewById(R.id.account_dialog_subtitle); - subtitleTextView.setText(getString(R.string.preferences_dialog_change_account_warn_msg)); - //根据同步修改的账户信息设置标题以及子标题的内容 - dialogBuilder.setCustomTitle(titleView); - //设置对话框的自定义标题 - CharSequence[] menuItemArray = new CharSequence[] { - getString(R.string.preferences_menu_change_account), - getString(R.string.preferences_menu_remove_account), - getString(R.string.preferences_menu_cancel) - }; - //定义一些标记字符串 - dialogBuilder.setItems(menuItemArray, new DialogInterface.OnClickListener() { - //设置对话框要显示的一个list,用于显示几个命令时,即change,remove,cancel - public void onClick(DialogInterface dialog, int which) { - //按键功能,由which来决定 - if (which == 0) { - //进入账户选择对话框 - showSelectAccountAlertDialog(); - } else if (which == 1) { - //删除账户并且跟新便签界面 - removeSyncAccount(); - refreshUI(); - } - } - }); - dialogBuilder.show(); - //显示对话框 - } - - /* - *函数功能:获取谷歌账户 - *函数实现:通过账户管理器直接获取 - */ - private Account[] getGoogleAccounts() { - AccountManager accountManager = AccountManager.get(this); - return accountManager.getAccountsByType("com.google"); - } - - /* - * 函数功能:设置同步账户 - * 函数实现:如下注释: - */ - private void setSyncAccount(String account) { - if (!getSyncAccountName(this).equals(account)) { - //假如该账号不在同步账号列表中 - SharedPreferences settings = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE); - SharedPreferences.Editor editor = settings.edit(); - //编辑共享的首选项 - if (account != null) { - editor.putString(PREFERENCE_SYNC_ACCOUNT_NAME, account); - } else { - editor.putString(PREFERENCE_SYNC_ACCOUNT_NAME, ""); - } - //将该账号加入到首选项中 - - editor.commit(); - //提交修改的数据 - - - setLastSyncTime(this, 0); - //将最后同步时间清零 - - // clean up local gtask related info - new Thread(new Runnable() { - public void run() { - ContentValues values = new ContentValues(); - values.put(NoteColumns.GTASK_ID, ""); - values.put(NoteColumns.SYNC_ID, 0); - getContentResolver().update(Notes.CONTENT_NOTE_URI, values, null, null); - } - }).start(); - //重置当地同步任务的信息 - - Toast.makeText(NotesPreferenceActivity.this, - getString(R.string.preferences_toast_success_set_accout, account), - Toast.LENGTH_SHORT).show(); - //将toast的文本信息置为“设置账户成功”并显示出来 - } - } - /* - * 函数功能:删除同步账户 - * 函数实现:如下注释: - */ - private void removeSyncAccount() { - SharedPreferences settings = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE); - SharedPreferences.Editor editor = settings.edit(); - //设置共享首选项 - - if (settings.contains(PREFERENCE_SYNC_ACCOUNT_NAME)) { - editor.remove(PREFERENCE_SYNC_ACCOUNT_NAME); - //假如当前首选项中有账户就删除 - } - if (settings.contains(PREFERENCE_LAST_SYNC_TIME)) { - editor.remove(PREFERENCE_LAST_SYNC_TIME); - //删除当前首选项中有账户时间 - } - editor.commit(); - //提交更新后的数据 - - // clean up local gtask related info - new Thread(new Runnable() { - public void run() { - ContentValues values = new ContentValues(); - values.put(NoteColumns.GTASK_ID, ""); - values.put(NoteColumns.SYNC_ID, 0); - getContentResolver().update(Notes.CONTENT_NOTE_URI, values, null, null); - } - }).start(); - //重置当地同步任务的信息 - } - - /* - * 函数功能:获取同步账户名称 - * 函数实现:通过共享的首选项里的信息直接获取 - */ - public static String getSyncAccountName(Context context) { - SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, - Context.MODE_PRIVATE); - return settings.getString(PREFERENCE_SYNC_ACCOUNT_NAME, ""); - } - - /* - * 函数功能:设置最终同步的时间 - * 函数实现:如下注释 - */ - public static void setLastSyncTime(Context context, long time) { - SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, - Context.MODE_PRIVATE); - SharedPreferences.Editor editor = settings.edit(); - // 从共享首选项中找到相关账户并获取其编辑器 - editor.putLong(PREFERENCE_LAST_SYNC_TIME, time); - editor.commit(); - //编辑最终同步时间并提交更新 - } - /* - * 函数功能:获取最终同步时间 - * 函数实现:通过共享的首选项里的信息直接获取 - */ - public static long getLastSyncTime(Context context) { - SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, - Context.MODE_PRIVATE); - return settings.getLong(PREFERENCE_LAST_SYNC_TIME, 0); - } - - /* - * 函数功能:接受同步信息 - * 函数实现:继承BroadcastReceiver - */ - private class GTaskReceiver extends BroadcastReceiver { - - @Override - public void onReceive(Context context, Intent intent) { - refreshUI(); - if (intent.getBooleanExtra(GTaskSyncService.GTASK_SERVICE_BROADCAST_IS_SYNCING, false)) { - //获取随广播而来的Intent中的同步服务的数据 - TextView syncStatus = (TextView) findViewById(R.id.prefenerece_sync_status_textview); - syncStatus.setText(intent - .getStringExtra(GTaskSyncService.GTASK_SERVICE_BROADCAST_PROGRESS_MSG)); - //通过获取的数据在设置系统的状态 - } - - } - } - - /* - * 函数功能:处理菜单的选项 - * 函数实现:如下注释 - * 参数:MenuItem菜单选项 - */ - public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - //根据选项的id选择,这里只有一个主页 - case android.R.id.home: - Intent intent = new Intent(this, NotesListActivity.class); - intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); - startActivity(intent); - return true; - //在主页情况下在创建连接组件intent,发出清空的信号并开始一个相应的activity - default: - return false; - } - } -} - \ No newline at end of file diff --git a/src/widget/NoteWidgetProvider.java b/src/widget/NoteWidgetProvider.java deleted file mode 100644 index 4bae085..0000000 --- a/src/widget/NoteWidgetProvider.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.widget; //隶属于widget这个包中 -import android.app.PendingIntent; //在Android.app包中的,用于提供暂缓的服务,当某种条件达到时,就可以执行某些活动 -import android.appwidget.AppWidgetManager; //继承object类,更新appwidget状态,和获取安装appwidget提供信息,以及其它相关状态信息。 -import android.appwidget.AppWidgetProvider; //本质是广播作用,用来对widget进行更新 -import android.content.ContentValues; //此类用于存储ContentResolver 可以处理的一组值,是一些基本类型的值 -import android.content.Context; //可以理解为一个接口(抽象类),它提供了有关应用程序的全局信息。从它继承或者从它的直接或间接子类继承,那么继承的子类就可以拿到应用程序的全局信息。 -import android.content.Intent; //联系各个Activity的关键对象。告诉android该做什么 -import android.database.Cursor; //是数据库指针,用于查询并操作数据 -import android.util.Log; //更新删改等的日志文件 -import android.widget.RemoteViews; //它表示的是一个View结构,可以在其他进程中显示,小部件的旋转效果则是通过不断地更新RemoteViews来实现的 - -import net.micode.notes.R; -import net.micode.notes.data.Notes; //引入其他包中类 -import net.micode.notes.data.Notes.NoteColumns; //引入笔记换列的类 -import net.micode.notes.tool.ResourceParser; //引入工具类 -import net.micode.notes.ui.NoteEditActivity; //引入ui包中的编辑笔记类 -import net.micode.notes.ui.NotesListActivity; //引入ui包中的列表活动类 - -public abstract class NoteWidgetProvider extends AppWidgetProvider { //继承AppWidgetProvider的抽象类NoteWidgetProvider,可以给子类提供接口 - public static final String [] PROJECTION = new String [] { //最终静态字符串数组 - NoteColumns.ID, //笔记框ID号 - NoteColumns.BG_COLOR_ID, //笔记框颜色ID - NoteColumns.SNIPPET //一小段笔记框 - }; - - public static final int COLUMN_ID = 0; //最终静态笔记框ID号 - public static final int COLUMN_BG_COLOR_ID = 1; //最终静态笔记框颜色ID - public static final int COLUMN_SNIPPET = 2; //最终静态一小段笔记框 - - private static final String TAG = "NoteWidgetProvider"; //最终静态 TAG - - @Override //重写 - public void onDeleted(Context context, int[] appWidgetIds) { //方法,删除部件 - ContentValues values = new ContentValues(); //和Bundle类一样,键值对 - values.put(NoteColumns.WIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); //通过put来存放数据。大多是基础数据类型 - for (int i = 0; i < appWidgetIds.length; i++) { - context.getContentResolver().update(Notes.CONTENT_NOTE_URI, //根据长度批量修改数据,uri表名, 属性键值对,修改对象,修改内容 - values, - NoteColumns.WIDGET_ID + "=?", - new String[] { String.valueOf(appWidgetIds[i])}); - } - } - //操作数据库,查询操作 - private Cursor getNoteWidgetInfo(Context context, int widgetId) { //得到一些部件的信息和全局消息,返回类型为游标 - return context.getContentResolver().query(Notes.CONTENT_NOTE_URI, //查找数据,并返回含有数据信息的cursor对象。 - PROJECTION, //参数为 uri 查询表名,查询列名,属性,属性域值,排序 - NoteColumns.WIDGET_ID + "=? AND " + NoteColumns.PARENT_ID + "<>?", - new String[] { String.valueOf(widgetId), String.valueOf(Notes.ID_TRASH_FOLER) }, - null); - } - - protected void update(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { //更新部件 - update(context, appWidgetManager, appWidgetIds, false); - } - - private void update(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds, //隐私模式下更新相关部件 - boolean privacyMode) { - for (int i = 0; i < appWidgetIds.length; i++) { - if (appWidgetIds[i] != AppWidgetManager.INVALID_APPWIDGET_ID) { - int bgId = ResourceParser.getDefaultBgId(context); - String snippet = ""; - Intent intent = new Intent(context, NoteEditActivity.class); //意图,从context到NoteEditActivity类的意图 - intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); //设置标志,当栈顶为活动实例时,重用该实例,不用新建 - intent.putExtra(Notes.INTENT_EXTRA_WIDGET_ID, appWidgetIds[i]); //传递参数 - intent.putExtra(Notes.INTENT_EXTRA_WIDGET_TYPE, getWidgetType()); - - Cursor c = getNoteWidgetInfo(context, appWidgetIds[i]); //数据库光标,用于读取数据库 - if (c != null && c.moveToFirst()) { - if (c.getCount() > 1) { - Log.e(TAG, "Multiple message with same widget id:" + appWidgetIds[i]); //日志信息,打印错误 - c.close(); - return; - } - snippet = c.getString(COLUMN_SNIPPET); - bgId = c.getInt(COLUMN_BG_COLOR_ID); - intent.putExtra(Intent.EXTRA_UID, c.getLong(COLUMN_ID)); //传递参数 - intent.setAction(Intent.ACTION_VIEW); //隐式intent,设置意图,参数为向用户展示意图。 - } else { - snippet = context.getResources().getString(R.string.widget_havenot_content); - intent.setAction(Intent.ACTION_INSERT_OR_EDIT); //隐式intent,设置联系人 - } - - if (c != null) { //关闭 - c.close(); - } - - RemoteViews rv = new RemoteViews(context.getPackageName(), getLayoutId()); //布局文件layout的远程视图 - rv.setImageViewResource(R.id.widget_bg_image, getBgResourceId(bgId)); //设置图像资源,从布局文件layout中找到ID - intent.putExtra(Notes.INTENT_EXTRA_BACKGROUND_ID, bgId); //产生待定意图 - /** - * Generate the pending intent to start host for the widget - */ - PendingIntent pendingIntent = null; //待定意图,等待触发时机 - if (privacyMode) { //隐私模式 - rv.setTextViewText(R.id.widget_text, //设置视图文本 - context.getString(R.string.widget_under_visit_mode)); - pendingIntent = PendingIntent.getActivity(context, appWidgetIds[i], new Intent( //开始意图启动Activity - context, NotesListActivity.class), PendingIntent.FLAG_UPDATE_CURRENT); //上下文,请求码,跳转对象, - } else { //FLAG_UPDATE_CURRENT当前描述的PendingIntent如果已经存在,那么它们都会被更新,即它们的Intent中的Extras会被替换成最新的 - rv.setTextViewText(R.id.widget_text, snippet); - pendingIntent = PendingIntent.getActivity(context, appWidgetIds[i], intent, //先前的意图 - PendingIntent.FLAG_UPDATE_CURRENT); - } //FLAG_UPDATE_CURRENT当前描述的PendingIntent如果已经存在,那么它们都会被更新,即它们的Intent中的Extras会被替换成最新的 - - rv.setOnClickPendingIntent(R.id.widget_text, pendingIntent); //启动点击待定意图 - appWidgetManager.updateAppWidget(appWidgetIds[i], rv); //更新部件 - } - } - } - - protected abstract int getBgResourceId(int bgId); //抽象类获取Bg资源ID - - protected abstract int getLayoutId(); //抽象方法获取布局ID - - protected abstract int getWidgetType(); //获取部件的种类 -} diff --git a/src/widget/NoteWidgetProvider_2x.java b/src/widget/NoteWidgetProvider_2x.java deleted file mode 100644 index 2ddd97f..0000000 --- a/src/widget/NoteWidgetProvider_2x.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.widget; - -import android.appwidget.AppWidgetManager; -import android.content.Context; - -import net.micode.notes.R; -import net.micode.notes.data.Notes; -import net.micode.notes.tool.ResourceParser; - -//二倍部件 -public class NoteWidgetProvider_2x extends NoteWidgetProvider { - @Override //更新 - public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { - super.update(context, appWidgetManager, appWidgetIds); - } - - @Override //获取xml中的二倍部件id - protected int getLayoutId() { - return R.layout.widget_2x; - } - - @Override //获取资源id - protected int getBgResourceId(int bgId) { - return ResourceParser.WidgetBgResources.getWidget2xBgResource(bgId); - } - - @Override //获取二倍部件种类 - protected int getWidgetType() { - return Notes.TYPE_WIDGET_2X; - } -} diff --git a/src/widget/NoteWidgetProvider_4x.java b/src/widget/NoteWidgetProvider_4x.java deleted file mode 100644 index 8156006..0000000 --- a/src/widget/NoteWidgetProvider_4x.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.widget; - -import android.appwidget.AppWidgetManager; -import android.content.Context; - -import net.micode.notes.R; -import net.micode.notes.data.Notes; -import net.micode.notes.tool.ResourceParser; - -//四倍部件 -public class NoteWidgetProvider_4x extends NoteWidgetProvider { - @Override //更新部件 - public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { - super.update(context, appWidgetManager, appWidgetIds); - } - //获取四倍部件id - protected int getLayoutId() { - return R.layout.widget_4x; - } - - @Override //获取xml资源id - protected int getBgResourceId(int bgId) { - return ResourceParser.WidgetBgResources.getWidget4xBgResource(bgId); - } - - @Override //获取四倍部件种类 - protected int getWidgetType() { - return Notes.TYPE_WIDGET_4X; - } -} -- 2.34.1 From f3aff56a2ed131f9353c1cfa336b27ec019e9e69 Mon Sep 17 00:00:00 2001 From: xuningshuo <2105361900@qq.com> Date: Tue, 27 Jan 2026 16:40:04 +0800 Subject: [PATCH 4/9] =?UTF-8?q?bug=E4=BA=86=EF=BC=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tsrxns/AndroidManifest.xml | 132 ++ tsrxns/README.md | 2 + ...开源代码的泛读报告 - 副本.docx | Bin 0 -> 1106551 bytes ...源软件的质量分析报告文档.docx | Bin 0 -> 355298 bytes .../java/net/micode/notes/MainActivity.java | 24 + .../java/net/micode/notes/data/Contact.java | 93 ++ tsrxns/java/net/micode/notes/data/Notes.java | 295 +++++ .../notes/data/NotesDatabaseHelper.java | 424 +++++++ .../net/micode/notes/data/NotesProvider.java | 384 ++++++ .../net/micode/notes/gtask/data/MetaData.java | 82 ++ .../net/micode/notes/gtask/data/Node.java | 101 ++ .../net/micode/notes/gtask/data/SqlData.java | 189 +++ .../net/micode/notes/gtask/data/SqlNote.java | 505 ++++++++ .../net/micode/notes/gtask/data/Task.java | 351 ++++++ .../net/micode/notes/gtask/data/TaskList.java | 343 ++++++ .../exception/ActionFailureException.java | 33 + .../exception/NetworkFailureException.java | 33 + .../notes/gtask/remote/GTaskASyncTask.java | 143 +++ .../notes/gtask/remote/GTaskClient.java | 585 +++++++++ .../notes/gtask/remote/GTaskManager.java | 800 ++++++++++++ .../notes/gtask/remote/GTaskSyncService.java | 128 ++ tsrxns/java/net/micode/notes/model/Note.java | 253 ++++ .../net/micode/notes/model/WorkingNote.java | 368 ++++++ .../net/micode/notes/tool/BackupUtils.java | 346 ++++++ .../java/net/micode/notes/tool/DataUtils.java | 295 +++++ .../micode/notes/tool/GTaskStringUtils.java | 113 ++ .../net/micode/notes/tool/ResourceParser.java | 261 ++++ .../micode/notes/ui/AlarmAlertActivity.java | 208 ++++ .../micode/notes/ui/AlarmInitReceiver.java | 72 ++ .../net/micode/notes/ui/AlarmReceiver.java | 35 + .../net/micode/notes/ui/DateTimePicker.java | 508 ++++++++ .../micode/notes/ui/DateTimePickerDialog.java | 103 ++ .../net/micode/notes/ui/DropdownMenu.java | 65 + .../micode/notes/ui/FoldersListAdapter.java | 86 ++ .../net/micode/notes/ui/NoteEditActivity.java | 1068 +++++++++++++++++ .../net/micode/notes/ui/NoteEditText.java | 278 +++++ .../net/micode/notes/ui/NoteItemData.java | 214 ++++ .../micode/notes/ui/NotesListActivity.java | 1002 ++++++++++++++++ .../net/micode/notes/ui/NotesListAdapter.java | 257 ++++ .../net/micode/notes/ui/NotesListItem.java | 116 ++ .../notes/ui/NotesPreferenceActivity.java | 516 ++++++++ .../notes/widget/NoteWidgetProvider.java | 132 ++ .../notes/widget/NoteWidgetProvider_2x.java | 47 + .../notes/widget/NoteWidgetProvider_4x.java | 46 + tsrxns/res/color/primary_text_dark.xml | 22 + tsrxns/res/color/secondary_text_dark.xml | 20 + tsrxns/res/drawable-hdpi/bg_btn_set_color.png | Bin 0 -> 3588 bytes .../res/drawable-hdpi/bg_color_btn_mask.png | Bin 0 -> 245 bytes tsrxns/res/drawable-hdpi/call_record.png | Bin 0 -> 3533 bytes tsrxns/res/drawable-hdpi/clock.png | Bin 0 -> 3958 bytes tsrxns/res/drawable-hdpi/delete.png | Bin 0 -> 3490 bytes tsrxns/res/drawable-hdpi/dropdown_icon.9.png | Bin 0 -> 443 bytes tsrxns/res/drawable-hdpi/edit_blue.9.png | Bin 0 -> 3524 bytes tsrxns/res/drawable-hdpi/edit_green.9.png | Bin 0 -> 3565 bytes tsrxns/res/drawable-hdpi/edit_red.9.png | Bin 0 -> 3458 bytes .../res/drawable-hdpi/edit_title_blue.9.png | Bin 0 -> 5100 bytes .../res/drawable-hdpi/edit_title_green.9.png | Bin 0 -> 5627 bytes tsrxns/res/drawable-hdpi/edit_title_red.9.png | Bin 0 -> 5061 bytes .../res/drawable-hdpi/edit_title_white.9.png | Bin 0 -> 3866 bytes .../res/drawable-hdpi/edit_title_yellow.9.png | Bin 0 -> 6000 bytes tsrxns/res/drawable-hdpi/edit_white.9.png | Bin 0 -> 3441 bytes tsrxns/res/drawable-hdpi/edit_yellow.9.png | Bin 0 -> 3634 bytes tsrxns/res/drawable-hdpi/font_large.png | Bin 0 -> 3161 bytes tsrxns/res/drawable-hdpi/font_normal.png | Bin 0 -> 3097 bytes .../drawable-hdpi/font_size_selector_bg.9.png | Bin 0 -> 4101 bytes tsrxns/res/drawable-hdpi/font_small.png | Bin 0 -> 3099 bytes tsrxns/res/drawable-hdpi/font_super.png | Bin 0 -> 3188 bytes tsrxns/res/drawable-hdpi/icon_app.png | Bin 0 -> 6887 bytes tsrxns/res/drawable-hdpi/list_background.png | Bin 0 -> 567323 bytes tsrxns/res/drawable-hdpi/list_blue_down.9.png | Bin 0 -> 4361 bytes .../res/drawable-hdpi/list_blue_middle.9.png | Bin 0 -> 3099 bytes .../res/drawable-hdpi/list_blue_single.9.png | Bin 0 -> 4618 bytes tsrxns/res/drawable-hdpi/list_blue_up.9.png | Bin 0 -> 3301 bytes tsrxns/res/drawable-hdpi/list_folder.9.png | Bin 0 -> 5608 bytes tsrxns/res/drawable-hdpi/list_footer_bg.9.png | Bin 0 -> 2837 bytes .../res/drawable-hdpi/list_green_down.9.png | Bin 0 -> 4488 bytes .../res/drawable-hdpi/list_green_middle.9.png | Bin 0 -> 3179 bytes .../res/drawable-hdpi/list_green_single.9.png | Bin 0 -> 4728 bytes tsrxns/res/drawable-hdpi/list_green_up.9.png | Bin 0 -> 3351 bytes tsrxns/res/drawable-hdpi/list_red_down.9.png | Bin 0 -> 4307 bytes .../res/drawable-hdpi/list_red_middle.9.png | Bin 0 -> 3075 bytes .../res/drawable-hdpi/list_red_single.9.png | Bin 0 -> 4565 bytes tsrxns/res/drawable-hdpi/list_red_up.9.png | Bin 0 -> 3277 bytes .../res/drawable-hdpi/list_white_down.9.png | Bin 0 -> 4305 bytes .../res/drawable-hdpi/list_white_middle.9.png | Bin 0 -> 3042 bytes .../res/drawable-hdpi/list_white_single.9.png | Bin 0 -> 4546 bytes tsrxns/res/drawable-hdpi/list_white_up.9.png | Bin 0 -> 3220 bytes .../res/drawable-hdpi/list_yellow_down.9.png | Bin 0 -> 4420 bytes .../drawable-hdpi/list_yellow_middle.9.png | Bin 0 -> 3150 bytes .../drawable-hdpi/list_yellow_single.9.png | Bin 0 -> 4670 bytes tsrxns/res/drawable-hdpi/list_yellow_up.9.png | Bin 0 -> 3335 bytes tsrxns/res/drawable-hdpi/menu_delete.png | Bin 0 -> 3426 bytes tsrxns/res/drawable-hdpi/menu_move.png | Bin 0 -> 3294 bytes tsrxns/res/drawable-hdpi/new_note_normal.png | Bin 0 -> 89221 bytes tsrxns/res/drawable-hdpi/new_note_pressed.png | Bin 0 -> 90126 bytes .../note_edit_color_selector_panel.png | Bin 0 -> 7030 bytes tsrxns/res/drawable-hdpi/notification.png | Bin 0 -> 3107 bytes tsrxns/res/drawable-hdpi/search_result.png | Bin 0 -> 3030 bytes tsrxns/res/drawable-hdpi/selected.png | Bin 0 -> 4959 bytes tsrxns/res/drawable-hdpi/title_alert.png | Bin 0 -> 3696 bytes tsrxns/res/drawable-hdpi/title_bar_bg.9.png | Bin 0 -> 5970 bytes tsrxns/res/drawable-hdpi/widget_2x_blue.png | Bin 0 -> 1946 bytes tsrxns/res/drawable-hdpi/widget_2x_green.png | Bin 0 -> 1954 bytes tsrxns/res/drawable-hdpi/widget_2x_red.png | Bin 0 -> 1892 bytes tsrxns/res/drawable-hdpi/widget_2x_white.png | Bin 0 -> 1901 bytes tsrxns/res/drawable-hdpi/widget_2x_yellow.png | Bin 0 -> 1978 bytes tsrxns/res/drawable-hdpi/widget_4x_blue.png | Bin 0 -> 4165 bytes tsrxns/res/drawable-hdpi/widget_4x_green.png | Bin 0 -> 4192 bytes tsrxns/res/drawable-hdpi/widget_4x_red.png | Bin 0 -> 4223 bytes tsrxns/res/drawable-hdpi/widget_4x_white.png | Bin 0 -> 4106 bytes tsrxns/res/drawable-hdpi/widget_4x_yellow.png | Bin 0 -> 4199 bytes .../res/drawable/ic_launcher_background.xml | 170 +++ .../res/drawable/ic_launcher_foreground.xml | 30 + tsrxns/res/drawable/new_note.xml | 23 + tsrxns/res/layout/account_dialog_title.xml | 43 + tsrxns/res/layout/activity_main.xml | 19 + tsrxns/res/layout/add_account_text.xml | 32 + tsrxns/res/layout/datetime_picker.xml | 56 + tsrxns/res/layout/dialog_edit_text.xml | 23 + tsrxns/res/layout/folder_list_item.xml | 29 + tsrxns/res/layout/note_edit.xml | 404 +++++++ tsrxns/res/layout/note_edit_list_item.xml | 40 + tsrxns/res/layout/note_item.xml | 78 ++ tsrxns/res/layout/note_list.xml | 59 + tsrxns/res/layout/note_list_dropdown_menu.xml | 32 + tsrxns/res/layout/note_list_footer.xml | 24 + tsrxns/res/layout/settings_header.xml | 41 + tsrxns/res/layout/widget_2x.xml | 37 + tsrxns/res/layout/widget_4x.xml | 39 + tsrxns/res/menu/call_note_edit.xml | 48 + tsrxns/res/menu/call_record_folder.xml | 23 + tsrxns/res/menu/note_edit.xml | 52 + tsrxns/res/menu/note_list.xml | 39 + tsrxns/res/menu/note_list_dropdown.xml | 20 + tsrxns/res/menu/note_list_options.xml | 31 + tsrxns/res/menu/sub_folder.xml | 24 + tsrxns/res/mipmap-anydpi/ic_launcher.xml | 6 + .../res/mipmap-anydpi/ic_launcher_round.xml | 6 + tsrxns/res/mipmap-hdpi/ic_launcher.webp | Bin 0 -> 1404 bytes tsrxns/res/mipmap-hdpi/ic_launcher_round.webp | Bin 0 -> 2898 bytes tsrxns/res/mipmap-mdpi/ic_launcher.webp | Bin 0 -> 982 bytes tsrxns/res/mipmap-mdpi/ic_launcher_round.webp | Bin 0 -> 1772 bytes tsrxns/res/mipmap-xhdpi/ic_launcher.webp | Bin 0 -> 1900 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 0 -> 3918 bytes tsrxns/res/mipmap-xxhdpi/ic_launcher.webp | Bin 0 -> 2884 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 0 -> 5914 bytes tsrxns/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 0 -> 3844 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 0 -> 7778 bytes tsrxns/res/raw-zh-rCN/introduction | 7 + tsrxns/res/raw/introduction | 1 + tsrxns/res/values-night/themes.xml | 7 + tsrxns/res/values-zh-rCN/arrays.xml | 23 + tsrxns/res/values-zh-rCN/strings.xml | 126 ++ tsrxns/res/values-zh-rTW/arrays.xml | 23 + tsrxns/res/values-zh-rTW/strings.xml | 127 ++ tsrxns/res/values/arrays.xml | 31 + tsrxns/res/values/colors.xml | 20 + tsrxns/res/values/dimens.xml | 25 + tsrxns/res/values/strings.xml | 133 ++ tsrxns/res/values/styles.xml | 68 ++ tsrxns/res/values/themes.xml | 9 + tsrxns/res/xml/backup_rules.xml | 13 + tsrxns/res/xml/data_extraction_rules.xml | 19 + tsrxns/res/xml/preferences.xml | 30 + tsrxns/res/xml/searchable.xml | 27 + tsrxns/res/xml/widget_2x_info.xml | 23 + tsrxns/res/xml/widget_4x_info.xml | 23 + 167 files changed, 13241 insertions(+) create mode 100644 tsrxns/AndroidManifest.xml create mode 100644 tsrxns/README.md create mode 100644 tsrxns/doc/实践资源-小米便签开源代码的泛读报告 - 副本.docx create mode 100644 tsrxns/doc/陶斯儒许宁硕-小米便签开源软件的质量分析报告文档.docx create mode 100644 tsrxns/java/net/micode/notes/MainActivity.java create mode 100644 tsrxns/java/net/micode/notes/data/Contact.java create mode 100644 tsrxns/java/net/micode/notes/data/Notes.java create mode 100644 tsrxns/java/net/micode/notes/data/NotesDatabaseHelper.java create mode 100644 tsrxns/java/net/micode/notes/data/NotesProvider.java create mode 100644 tsrxns/java/net/micode/notes/gtask/data/MetaData.java create mode 100644 tsrxns/java/net/micode/notes/gtask/data/Node.java create mode 100644 tsrxns/java/net/micode/notes/gtask/data/SqlData.java create mode 100644 tsrxns/java/net/micode/notes/gtask/data/SqlNote.java create mode 100644 tsrxns/java/net/micode/notes/gtask/data/Task.java create mode 100644 tsrxns/java/net/micode/notes/gtask/data/TaskList.java create mode 100644 tsrxns/java/net/micode/notes/gtask/exception/ActionFailureException.java create mode 100644 tsrxns/java/net/micode/notes/gtask/exception/NetworkFailureException.java create mode 100644 tsrxns/java/net/micode/notes/gtask/remote/GTaskASyncTask.java create mode 100644 tsrxns/java/net/micode/notes/gtask/remote/GTaskClient.java create mode 100644 tsrxns/java/net/micode/notes/gtask/remote/GTaskManager.java create mode 100644 tsrxns/java/net/micode/notes/gtask/remote/GTaskSyncService.java create mode 100644 tsrxns/java/net/micode/notes/model/Note.java create mode 100644 tsrxns/java/net/micode/notes/model/WorkingNote.java create mode 100644 tsrxns/java/net/micode/notes/tool/BackupUtils.java create mode 100644 tsrxns/java/net/micode/notes/tool/DataUtils.java create mode 100644 tsrxns/java/net/micode/notes/tool/GTaskStringUtils.java create mode 100644 tsrxns/java/net/micode/notes/tool/ResourceParser.java create mode 100644 tsrxns/java/net/micode/notes/ui/AlarmAlertActivity.java create mode 100644 tsrxns/java/net/micode/notes/ui/AlarmInitReceiver.java create mode 100644 tsrxns/java/net/micode/notes/ui/AlarmReceiver.java create mode 100644 tsrxns/java/net/micode/notes/ui/DateTimePicker.java create mode 100644 tsrxns/java/net/micode/notes/ui/DateTimePickerDialog.java create mode 100644 tsrxns/java/net/micode/notes/ui/DropdownMenu.java create mode 100644 tsrxns/java/net/micode/notes/ui/FoldersListAdapter.java create mode 100644 tsrxns/java/net/micode/notes/ui/NoteEditActivity.java create mode 100644 tsrxns/java/net/micode/notes/ui/NoteEditText.java create mode 100644 tsrxns/java/net/micode/notes/ui/NoteItemData.java create mode 100644 tsrxns/java/net/micode/notes/ui/NotesListActivity.java create mode 100644 tsrxns/java/net/micode/notes/ui/NotesListAdapter.java create mode 100644 tsrxns/java/net/micode/notes/ui/NotesListItem.java create mode 100644 tsrxns/java/net/micode/notes/ui/NotesPreferenceActivity.java create mode 100644 tsrxns/java/net/micode/notes/widget/NoteWidgetProvider.java create mode 100644 tsrxns/java/net/micode/notes/widget/NoteWidgetProvider_2x.java create mode 100644 tsrxns/java/net/micode/notes/widget/NoteWidgetProvider_4x.java create mode 100644 tsrxns/res/color/primary_text_dark.xml create mode 100644 tsrxns/res/color/secondary_text_dark.xml create mode 100644 tsrxns/res/drawable-hdpi/bg_btn_set_color.png create mode 100644 tsrxns/res/drawable-hdpi/bg_color_btn_mask.png create mode 100644 tsrxns/res/drawable-hdpi/call_record.png create mode 100644 tsrxns/res/drawable-hdpi/clock.png create mode 100644 tsrxns/res/drawable-hdpi/delete.png create mode 100644 tsrxns/res/drawable-hdpi/dropdown_icon.9.png create mode 100644 tsrxns/res/drawable-hdpi/edit_blue.9.png create mode 100644 tsrxns/res/drawable-hdpi/edit_green.9.png create mode 100644 tsrxns/res/drawable-hdpi/edit_red.9.png create mode 100644 tsrxns/res/drawable-hdpi/edit_title_blue.9.png create mode 100644 tsrxns/res/drawable-hdpi/edit_title_green.9.png create mode 100644 tsrxns/res/drawable-hdpi/edit_title_red.9.png create mode 100644 tsrxns/res/drawable-hdpi/edit_title_white.9.png create mode 100644 tsrxns/res/drawable-hdpi/edit_title_yellow.9.png create mode 100644 tsrxns/res/drawable-hdpi/edit_white.9.png create mode 100644 tsrxns/res/drawable-hdpi/edit_yellow.9.png create mode 100644 tsrxns/res/drawable-hdpi/font_large.png create mode 100644 tsrxns/res/drawable-hdpi/font_normal.png create mode 100644 tsrxns/res/drawable-hdpi/font_size_selector_bg.9.png create mode 100644 tsrxns/res/drawable-hdpi/font_small.png create mode 100644 tsrxns/res/drawable-hdpi/font_super.png create mode 100644 tsrxns/res/drawable-hdpi/icon_app.png create mode 100644 tsrxns/res/drawable-hdpi/list_background.png create mode 100644 tsrxns/res/drawable-hdpi/list_blue_down.9.png create mode 100644 tsrxns/res/drawable-hdpi/list_blue_middle.9.png create mode 100644 tsrxns/res/drawable-hdpi/list_blue_single.9.png create mode 100644 tsrxns/res/drawable-hdpi/list_blue_up.9.png create mode 100644 tsrxns/res/drawable-hdpi/list_folder.9.png create mode 100644 tsrxns/res/drawable-hdpi/list_footer_bg.9.png create mode 100644 tsrxns/res/drawable-hdpi/list_green_down.9.png create mode 100644 tsrxns/res/drawable-hdpi/list_green_middle.9.png create mode 100644 tsrxns/res/drawable-hdpi/list_green_single.9.png create mode 100644 tsrxns/res/drawable-hdpi/list_green_up.9.png create mode 100644 tsrxns/res/drawable-hdpi/list_red_down.9.png create mode 100644 tsrxns/res/drawable-hdpi/list_red_middle.9.png create mode 100644 tsrxns/res/drawable-hdpi/list_red_single.9.png create mode 100644 tsrxns/res/drawable-hdpi/list_red_up.9.png create mode 100644 tsrxns/res/drawable-hdpi/list_white_down.9.png create mode 100644 tsrxns/res/drawable-hdpi/list_white_middle.9.png create mode 100644 tsrxns/res/drawable-hdpi/list_white_single.9.png create mode 100644 tsrxns/res/drawable-hdpi/list_white_up.9.png create mode 100644 tsrxns/res/drawable-hdpi/list_yellow_down.9.png create mode 100644 tsrxns/res/drawable-hdpi/list_yellow_middle.9.png create mode 100644 tsrxns/res/drawable-hdpi/list_yellow_single.9.png create mode 100644 tsrxns/res/drawable-hdpi/list_yellow_up.9.png create mode 100644 tsrxns/res/drawable-hdpi/menu_delete.png create mode 100644 tsrxns/res/drawable-hdpi/menu_move.png create mode 100644 tsrxns/res/drawable-hdpi/new_note_normal.png create mode 100644 tsrxns/res/drawable-hdpi/new_note_pressed.png create mode 100644 tsrxns/res/drawable-hdpi/note_edit_color_selector_panel.png create mode 100644 tsrxns/res/drawable-hdpi/notification.png create mode 100644 tsrxns/res/drawable-hdpi/search_result.png create mode 100644 tsrxns/res/drawable-hdpi/selected.png create mode 100644 tsrxns/res/drawable-hdpi/title_alert.png create mode 100644 tsrxns/res/drawable-hdpi/title_bar_bg.9.png create mode 100644 tsrxns/res/drawable-hdpi/widget_2x_blue.png create mode 100644 tsrxns/res/drawable-hdpi/widget_2x_green.png create mode 100644 tsrxns/res/drawable-hdpi/widget_2x_red.png create mode 100644 tsrxns/res/drawable-hdpi/widget_2x_white.png create mode 100644 tsrxns/res/drawable-hdpi/widget_2x_yellow.png create mode 100644 tsrxns/res/drawable-hdpi/widget_4x_blue.png create mode 100644 tsrxns/res/drawable-hdpi/widget_4x_green.png create mode 100644 tsrxns/res/drawable-hdpi/widget_4x_red.png create mode 100644 tsrxns/res/drawable-hdpi/widget_4x_white.png create mode 100644 tsrxns/res/drawable-hdpi/widget_4x_yellow.png create mode 100644 tsrxns/res/drawable/ic_launcher_background.xml create mode 100644 tsrxns/res/drawable/ic_launcher_foreground.xml create mode 100644 tsrxns/res/drawable/new_note.xml create mode 100644 tsrxns/res/layout/account_dialog_title.xml create mode 100644 tsrxns/res/layout/activity_main.xml create mode 100644 tsrxns/res/layout/add_account_text.xml create mode 100644 tsrxns/res/layout/datetime_picker.xml create mode 100644 tsrxns/res/layout/dialog_edit_text.xml create mode 100644 tsrxns/res/layout/folder_list_item.xml create mode 100644 tsrxns/res/layout/note_edit.xml create mode 100644 tsrxns/res/layout/note_edit_list_item.xml create mode 100644 tsrxns/res/layout/note_item.xml create mode 100644 tsrxns/res/layout/note_list.xml create mode 100644 tsrxns/res/layout/note_list_dropdown_menu.xml create mode 100644 tsrxns/res/layout/note_list_footer.xml create mode 100644 tsrxns/res/layout/settings_header.xml create mode 100644 tsrxns/res/layout/widget_2x.xml create mode 100644 tsrxns/res/layout/widget_4x.xml create mode 100644 tsrxns/res/menu/call_note_edit.xml create mode 100644 tsrxns/res/menu/call_record_folder.xml create mode 100644 tsrxns/res/menu/note_edit.xml create mode 100644 tsrxns/res/menu/note_list.xml create mode 100644 tsrxns/res/menu/note_list_dropdown.xml create mode 100644 tsrxns/res/menu/note_list_options.xml create mode 100644 tsrxns/res/menu/sub_folder.xml create mode 100644 tsrxns/res/mipmap-anydpi/ic_launcher.xml create mode 100644 tsrxns/res/mipmap-anydpi/ic_launcher_round.xml create mode 100644 tsrxns/res/mipmap-hdpi/ic_launcher.webp create mode 100644 tsrxns/res/mipmap-hdpi/ic_launcher_round.webp create mode 100644 tsrxns/res/mipmap-mdpi/ic_launcher.webp create mode 100644 tsrxns/res/mipmap-mdpi/ic_launcher_round.webp create mode 100644 tsrxns/res/mipmap-xhdpi/ic_launcher.webp create mode 100644 tsrxns/res/mipmap-xhdpi/ic_launcher_round.webp create mode 100644 tsrxns/res/mipmap-xxhdpi/ic_launcher.webp create mode 100644 tsrxns/res/mipmap-xxhdpi/ic_launcher_round.webp create mode 100644 tsrxns/res/mipmap-xxxhdpi/ic_launcher.webp create mode 100644 tsrxns/res/mipmap-xxxhdpi/ic_launcher_round.webp create mode 100644 tsrxns/res/raw-zh-rCN/introduction create mode 100644 tsrxns/res/raw/introduction create mode 100644 tsrxns/res/values-night/themes.xml create mode 100644 tsrxns/res/values-zh-rCN/arrays.xml create mode 100644 tsrxns/res/values-zh-rCN/strings.xml create mode 100644 tsrxns/res/values-zh-rTW/arrays.xml create mode 100644 tsrxns/res/values-zh-rTW/strings.xml create mode 100644 tsrxns/res/values/arrays.xml create mode 100644 tsrxns/res/values/colors.xml create mode 100644 tsrxns/res/values/dimens.xml create mode 100644 tsrxns/res/values/strings.xml create mode 100644 tsrxns/res/values/styles.xml create mode 100644 tsrxns/res/values/themes.xml create mode 100644 tsrxns/res/xml/backup_rules.xml create mode 100644 tsrxns/res/xml/data_extraction_rules.xml create mode 100644 tsrxns/res/xml/preferences.xml create mode 100644 tsrxns/res/xml/searchable.xml create mode 100644 tsrxns/res/xml/widget_2x_info.xml create mode 100644 tsrxns/res/xml/widget_4x_info.xml diff --git a/tsrxns/AndroidManifest.xml b/tsrxns/AndroidManifest.xml new file mode 100644 index 0000000..46c99d9 --- /dev/null +++ b/tsrxns/AndroidManifest.xml @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + > + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tsrxns/README.md b/tsrxns/README.md new file mode 100644 index 0000000..4776418 --- /dev/null +++ b/tsrxns/README.md @@ -0,0 +1,2 @@ +# tsrxns + diff --git a/tsrxns/doc/实践资源-小米便签开源代码的泛读报告 - 副本.docx b/tsrxns/doc/实践资源-小米便签开源代码的泛读报告 - 副本.docx new file mode 100644 index 0000000000000000000000000000000000000000..316f80a9f768519cd9d3e8137d9c821e11569aa3 GIT binary patch literal 1106551 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%0D|<%%BJsi}N%yJ=q((s9@6E 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

kfO_~gqTs92ho>zn|Z18>MZsr%}YVWVN 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 ^tU*#+HmSGE#>=f&k<0 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

?!W{qnVtC8*u(R=`J3~^KU{{%x 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 yoXR67)CFaU)2B^$fhE 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

#xlR^ro#0Wnn z^IH@7&sppn$&UPfZe!ND(r) zA*^@u*A}6$Ut{-0SS+Nie|v;TC%RFWZQp@_@tFyLbnWoh z6L|x`6h2Zq-QTseJK-uNLoJ)p0nHz17oTF%fI3p8KuZB4PJxIzfjtDCu$z$eG3K7U zf0K*iQeST$S@_iml8kzbdnURZW$|K{Gbw3;l&m<5%jn5GBqFo2PHZ`RXI79V-Xrl@ z+vnppaK!t~rk+3hem_d22!dgSsIQU4`-gi1*rS?mRNu^%JuL-!*n^~=+oOlo4{34- zk$8BN>-Xz8c~i*fm5JC5)YzXqc4~t@yjiczy?#C`{BW^4*Rz{86~4>!ao^u3wWfFK zXG;{GPT<=4?oWRGjg#UOr{PbBkImXT%iFVluz)&jv^u*H|FWx=>CtwB>Xq9M%t*R# zZ)dxuBxTSeS-|?FinO2U*vi6+V7#&;UTu{csb=nI?3+Fbwk?6CmpXjkT3gf)|cv^%edH(qZISN z{i5!UW$c3o%6O*1oujcfF-dE;n1ayF;c45Lo2yF#1rI4vMw$+4+MYdofZ0?4HqE>e z3)x>|I0LjcMhD24n{b)|k3lQu0tg;1PY{18JWs0=z>Y-3$m;ISVy9Jda`J}TkZ9!C z*jS5c@zP{BTs~6!5!u&kWW;;!+yX3b(a?c?!}yI=rCUY1sGXeF;+Q9Xx__B|`uq3q zedK>Ma~sOD1y4Velfepc;*%$6>Grdxf~!NVQy1dq<`xoiwmBkwiP#cowgBB+vuSQg zP3B!0>Fup&yQ!Exu#Lh(ng6M+NE*<#eru!g2*1DxHRiv{L1>h>8Ywevz2Db?=-l@{%p~6 zJ}7+ddV89p*x~G!!0y(0quQMoTRu0U<2Hmku@_0tDWlu$BDlz6mNOrFozY8sgVt$ zqwB4EWJ}Jz6W(5%(mQt&ewl<*%U=6XU**dBmD?waZ+p%lTVXZWE$7T)p~ug0v(u5% z4&+WgTMrm=?ukb(cJ63W6Sudg@nM(r`E%Zrr(iK=VPkd2)_SsY!bX-O?Z2PX6Ra#p zz#W$}Q${t7>gpjSoiV`VUc}$Y4QVCMcONCrQ#7bioG>~X5e!{Cyk~69bL2C2(MwC~ zQ+#~*C%8Zk|GL3J?Z52mA8(UYd{*Z_y0)>V3JE}18db?Pw#`EUbq-2@f9eaac1v-J7TdCJ8l(MuU8siQi>ifwf@Ab__@ijDi z$HaIg%>Fo2iFB(!P6#~z`}oY3*-j~qch`{7R-N2Q9o>OjgNed%wamRP%b$cFbd%3k zFTGUa9}{GiIP%x3*5Q1Lpwm_*`GvaV4mLlp^&k5fbV9D*k+rT59oXqfmDS%~&N+78 znP8#%$?GW>Q(v3!%Ah|{%MZRC%13kU%f;uoDMenp4lErMHuqiL8fH?TVi>AuC;S)d zWz!eAB|+ZQc~*tu3IFobV)@etcurkd9`)lltYWNiTy)F*AE_t~$V)1^Xt0gEeq^lG;GV-M4@+H-j{?p*K}LX&?}7J^ zUA@lB>$fZ|ujF)qW@o0Q?eHVJBbb12ZFo*@-{%5^9p3`kAgbkSz5Mui1P)JP+c;){ zO~5m7Ps6|L>q`d;EC!^kc8*eC9(I z>FJu}*s+Njv27aa5Br&v6+Gp$wK$fSokJ8Fn242PJyi7z7Ofg}sjeK{%O|VS5r4Tl z(5sxZ$M|Z&wKKI%QiWqB4G@?Rp7R!%m(~1jvaDGDrVw(#VQQ1qjsCDBSqj7aWQeq% zcimc(PL)UckrMOwLz^?>HG5M!PH$$rd%gTomE1V6&|E)&k%UemsAh3A-4}A@Nc1le(?djLqv~e=sAYn!#V${sxLJ9nzTW(dp@iG9?Tg+QH5@-} zUMS&w$9;8b8Ye$ak)^fvNboSCf^THx=H~Z#{j}F!=A%yc07HKV5XY z%6rNyLWP0}pIq{p70QQirx)8KS>D)Jb4|>BGfrsOWhms;jq+cneNCWz@Y^E?ncP7slGQ< z!NXWJh@mxN42E7uh8jmkdTX&m(xU{^rn57AeWcRQ!pMn}Jj67)lqW8-Iyq5QYV9|Kzu5X=5%zhsjZfxhn&m=cjJy)yY)({P`x~3-f;aH$SfO|`sZ$HHO;FA*nGrH7BT2|gLP9plNBkv;w|_xb-k z&biNh>gs`@KHb^}gQk*X#L8WFWCPXt!;2@rWDz+oiIWHJqjZW0HKseV;W7DxQwZN)GUdj6aKp@jU?nO1 zH!Iq7aSC(aOUqB|D}|6; zjf`@a#A$GWOwQqJzrVn#|AlVt*vvDlW4<&B-Ys(FYNrN z(6-@K81oqY@7bc!)4L^B%0p-PI zP)bS)zkqzI)6&1#n(Kz!vns0&MLKrqMoCJ3{`&(N2PY^g1ukBM_|4UJDhPe~-$PYZ z`T0(@kB(!<2(RRnx>~(iS`db~s0jBPEY4H~wMXhWueWeoa_hl-H5_@ay}sC=?t#&R z*3B&vlG7pEx>tg)rruZ=HX=!D-^h6;I!S_F3(4%tsnZX-hx$oBQ3@~mTohDH4IM3u zrxdlfvTAOube{E)?rwqaKCx{ArPl*x@`Fn&V@^VMh3#VOWGM)Dl^35Sm|UI&V@PGj zLlyTTE+;kBu2xY z7T(4Y?N<3GNG+sgqym-a7w(Q~>x60gI=uBigPEqH@@|AKiTc<$tFQ(^~&lx_ShdcJ-xu3*VlW-simSchWLQ`mn#F zLbq@8moKd6&u8LZKRXLx12BclSc6JrenOq$5gd(Q^2zQxZecPvn6Xq~_fpGD#XE4OUN$%s+ zPRo#SCp~@oY0Sx5-~}8GfPKo(!8LFP*aw)D~U1gHF1ZR?o+4&)6s*VafvOBIfsSvH3JKD1Ss#1J^0Y zBsoqTZgUod7Ke=uOBv?-l()A&rl1#!+7R5Gj*dIu3$1-tub~`2Yx^y=Nz41v9eXv| zC!U4Yb|M3?>+nx-b$52RJdRC$(j@)i(yDOW52?8ZiA@oe&Nk zH}|*C!cyuTiE4Nr*WOkCVy+ex+pa2=YHr=b@3b(d_rde*e9y1kCokUwXYBE=^rUxv zCg8?O#lJhU1C{8FI$Ck;N0gIJsOo4&M8rl#xGy&5u(4(Iq>>*^P5C4@HaR`Qap%eH zOSIoYXumOp>z!dFf&Ll&r~HLRz{9>RJlfp+)LrZXaQE0SJ+E_qS?1%4ifp1d(dmgS zb*ZoMMfS-B^871a#VZ5Xd;HVH3cO8O8T>ZhG3o!RG%GTdyxW{`XJ@;u-lyV@`?rD_ z!F4&RulIBKNhEB~OEgW5Y&No-!`Q=*;EE9yEVS_56MT;o=J6xGPvC1!x~M?%kseJK z&fK|KjyG@K@xRqjCm|#$FI^9-Oy7spv(|Bb?M|hyY$m?qhXb$td`BQeQcc08AATWi zXLWcmGgSW>b(?+C@t3*7x=YGrr*G5Fu=j2ahCM!;O}^*xcEQ;n*Eu|&aBs9-wfKmh zCiq*!w}Fs|YXOJvOLKD}b{j`W4D5C(a(OXLV`7TBaU3cUk&(b3umlC1)w|v`b%^y5 zxrYt$Uh2FXy1HeUYa+>wJ+Vkj@+1PL;r}Fayixbt3 zS?O9b60Ej@x=az+ti5sF-|bt&rtIuYr@ZfQM!G&kfcpBdxLo*qV-Z?zEbnXA{Gm6^ zbqG=yzXX23r%$hPJbRv8rI5r35b6>|#Sl0M&zA^GP++0sTtN#Sn=N0gEu(0R&KMQt zPan3^^P8znrxJah3lD#yqx&gjpsnY@b~-}BQc^}Lx9``4XD0yHV)jJIYMYH^&Om_ zqP{t2&t=n-wJ^URNkK&wt`Si8)Jx&&_!ueCUN{zMCxwV3c_2(V*+CaLCGB6Q)l4t?@+7twgvqvD-bPwx-U8JEG( zthg?SK7evCRybI!mf^PDr%~;@M^Nxp-ii6W-+DFGl45rphMEIIDt5sA5l^{gpns{# z$BQxeQ|^iLOc&?K4AfkHWv+;M?(|gieTQ7%?lYsxmCs9e8$(PztyM9dCFT(!dw$lvv$^|H}U+pcN{rxRQUZ&rG`Loqq(eK6KfR+FG|f;0aa;zb}Jz>M0fAHF#F zt#mNe^O=C1Y^5SBG&DiXYyI!#h-TK^Nnd)0n+QC3crtJd3<3HF=gTfhcb+npOyX+@ zH9uss&!eKo;MBUEOa}u*p0*xzlzn}d@?*cHJUG2D^x{7z0ax^85s5<<1#5`dnIqdu)I-ZD&F zGr#O|UDdIn@|p}EUqSY2xmYcKK>=j`X+ab?@hnjb$7IzQU4heEGA|2s6~ zy~8X)z+{7LfZXE`vj{!krJmh&*1oqrC>VA1bnW}oRDq{4NhAq0dXvO{(R;=4XvN^m z+28n@{ylxmp{KC8sHC{)LQ$cW0G;g#1=d{Bzl#yUv&Wq>zNsdw3G)RqdfUe29n@L$ z@96wSzFB!Uq>N{+v1n(Liz7YJW?uW;!Fjs!XtAA>9zT=~ZM_;o_7E_VZa0;!{Qm4p z7RN8TlQOVjcztMJaJ;2R70Z4v@!c!S%dd3NRRtNtnf}B(i*;NC#rZ2C4?{Ah%j0f0 zsY_LUs2twdk}0lo!sZ{-_*XmEy&xEk2LjdEO_Ocv@QQsUYmo4$6M_uF`!m4ZAV)-%1pG8P{|? zEVNupzUT77jpei;t7T^ioJ5MRo zD?o%9Aq$*2gy;^Yi!zODRR|lyYli3+T`7DjfrSAnNy&>t@P;lgEwM()FXyWN1dfn{ zgM$(yq_8kk^G|jHG$@M}7Z$Ewy9TiI{%r{$WA*huXya~1!6nd%%Y%0)*)3o?Gi zKv4GjmyOobr(WfvC%I!T7yl|_2)>%^HeY)ZKM>kA*haosOAnRdSH;UjWsW5cYSz`p zd-o{_BO>EmM>_iqBf%&?T6TNxm)z+=dis>Cxdv0v9qyXFFG-itT+aUdIx{+F^F@UF z9i3mDQ3|GKO*SIz2aNc}8LW?z_(^tOjVR&~`dF1&R#s3@rk?^T$Xgq$ER={D*<~)G z6<}&f8wrQD8hwRp5MU==4Qh}Uq`$B?Q7BRnJlfLKqLykeGf!8EY=C(w6kEHIB*o{! z!Bz>|KXcd&P!6ee+W~HCMQBnrK)~fBPeMle&9`_dUC*0+X#%9XGqN zhSbxixXXuYRW`?018#o$GM2N(JEllTV03UIWAUtf(EV3}l*9!0|Ikd5-lx1d8Q&u| z=}ei6e~#nzLCuQKcV1Xr<-Pxh;^*{Nu2dpES|W9V`xF^}%1Z`SPimFK5cI0Cy52Dh z+JC+7_m`l^aoVjPx=!IS(@H4ENUsl5GfmvUw=xR+v3B_Rj~GGv!F>t$#P{Qd1>jnh z$G^AIDW^$3)z*$7y-Opr3!lYa-=7c1G~jnOF*U_}0M2#78YOviw3+Pe5*k%`-_J4# z!$7FWQs#3H#I>zc5)^v*W)A}bYWGP6;yR_F(WUa5h5Sehnw8hDhdIUiOJa&e;%6rD z6LkvUJdbNfkdNWWe;7XukOs&XVRxW;?}ftwtxb>%)ipFyH8bm5y4?5z-)%$Ef({2& z;=`OiTPS+rm&H)8q@du``6_EEsoI9fa{*U}@#N5#)TgPjVJ9m~^d4OgZB{s-^}L>o z_7TbAf&EI?OgjesgV-pik>n-GG!tRp`jeoB2Z$=CQaoKA6_phg3DrhV9Ob}*13Lj4 zazvkGYi{6cbrnwJ@2fBJ$+;?o^}qiM$=TlU^12q8Q!-JIspa;*OeeR`RF?av??)b6 z=KMrzy5m15BAlLBuIRX z*@=$a)IERPNhUz=bo9g7Szw?7{8ZS~ANVb0JPD0*^!W0!&tr9)g(#fl*|zc4gC~sa z3d8edM(WQilt2H`di?%q`q%AhN862zt>vHlAME_$jIkg6Wj?x8b!gA&okeXw3JxdI zkhzt)zgL8JaQBC*6S_=Q)re}N;E)h-3c=_5^a<%xT-v#e|2gh3aUqo0HnR_bD#F&5 zgDrvB@8x&7hEb=2dX72DbWr@#;X%IykhAIl+4dj79zW z=MiPU(f56}EH>tcMvQsMGT*%uL`>@Pat%)@P@7m}`w1ACm`oI#Q!xy_b!(R&3!v{? zjZ6_y(WH-OD75FbahGMu+hT$Y`>Q@2ph%M`?8B9UKoJBqB3e zd)`iPi2=@id`!LM^u-|P41 zjDzzBCocoz9TQ={;RX$qr)Q=3;y+fapb$RBos3eFj1oRB!$tH1j~1B z-9;vSa-J|{FIf#b`;eM9HZ}qS%#OhyJ3HC_Yv7_m!=2OytPlz@493T5p1qKVbuDvDoj=`#$n;f>KX!FHiyg z{xvG6^a&-NJ%0{HSAA0xW(sz)RW>Ss0zxziKMaJ3yW~wi^Tx=o)jbklhuS7eyUte) z{aZX|=!vK!kso@*6-CE3PwNj15RaluAh?kp(Wu+89* zguMpN1<2%KpARtZZErt9K!C2DuI?pT^4PSE&Q>>7GKI~5(<_&K-etXAUS4v8X@dK3 z$-GV<@-2$w*S=@Q>BlE5(+e#OgqQL0IaDq;T4TYnyXt@UkLe8@T}1-`o@!GQll60Fb#Bg^ z^92>oTzvaBvrFl%46U)>5jY(y%Jb!oYF%%?*UEzfmJ|A>{QL!c1}H{$xs1d&4p9)o z`3N~5azAr&fB~WZnJz>dmYr<}L+|zLEj82U#LoiBN-0GwDgUF zcyjWMIy?S^Iy)VMLS}e?fx~+j(XGXtD#WrWoM<&HHj7X@%`hc>=#l^pr$skeUWM0> z`N)TI4Gdn}U3JcFM5}8d4_99V@$Q$7KEOg{7o&({h9z5bW^(e2N#1Q*ZgzIO5zm^& zaP7rggp=#cQODA28oGd^?!rPZUFxf?O|9BJe$2_Ao|kLL=;5b5zQD`t& zEC20xxv4LnD*6Z}&qtN^{}Jr!nO%n!Rq5}bdAYi_W^QJNu!=)pD~Sm1$3NLapkiRK z{j9$Pv@5B0;z1r|vj2tyW^WCWx(6sEcy7}=sD}l2tTk9=h zN!Z7qM+*ih$9_H~qd`W0h)BY-T;%txZSAs)_*VI!4(_Ufg>Q8Ykyq>9opd!>zg$h| zb7dzB!ppRf5D*CLakV22_yo@4hxhNlS{0)G#idjD1vZ}+i^I;t=43S(E5ag-LSinK zS&i*kLvl4XxKbBUW_FXe{*s%|$P`S&5(fuudOGfTc%(3;iKy7Xj1LbT{z2ene#6^? zIyPKG(BpQg1|k}05!Ok>F7k$w4UvpdA;LuJM|&9 zc?X9cD}h@@9&e<=N&McsFIt$Ij)H8wmLkUWtZ)iiuZCCM@f3JH*NHWKnx}l_XM~UKj!}Qv&Pm#z;?j`=EWi5?u&nNr zN8d(40i#{KKcu9ji2uOFqiGB)`&aLkG!pXL`P&mXi>axp>FDUdmcg}eYiO^8N~)U2 z`_l12HdYSyypobrmW|Y-foW;ao3nJ6my5l{1`pFpG-&4o9)tbYpuz)O2rfM#dI2qW zk;I@N8K8zB-A0@I%H}yn5*Vk*gD?)j;kzi%UxN3W^>;ti1VGFrCpJ@u)`5Eist}S! z)_r9B7~$K+A4VVQRZ0r6LdQWu39;~%Rz#82FRx&H;?MYZy~xJ4?(u^^ldrYX%U(QP zpAAcDW?39R)TVqWPQajpEeWW5V=6=sV!yevDQgYId(T@>_ulLqJ zt$?c%-PAPKx=86mm2$-0e)Z0I5o?4!YT?d0Nc#7lu-C@xw@oiJ&aZlIv92_Fvn?gx#;h~|&9}{0XA1IWBE=IqkrM48|;t~w_aK5x3!x?EK@S?}Si_M~YiFZ1jMhWDmvfWBKPJ$&KZ`jMYPi5{Y(A0twV1z%}htopenxp!*x zfMDDOZi^GqO?}Hr;mdR)BaBDNgu^RFJkb$g9tgw^E%!y{J_iTJJU8|A6P`cU)X?}> zQneMTu8X!O#;$P!)=w2#n4_Kq3GZD)46zG*uaK%B5v$QGpSZXhgSHkawBVfEH!q<@ zVfs#sW(6JYW9elODHtU;^KR;V-*H)V!-%3cVIvDT@pW8IXPaMP!yiPItr{P z5K3T3^rx>N{oOlz>`h*KMf^$p7!4BX|CFz-_Y7^_UjI?+5;~q5I-{RZUv4q=#xI0t z$Y*u3RdfUJ{ZqO-`9^cU9Y>vL_Zv~MoXuD-eqUC`ty`Q`Son<0vdnG%l?v;bL;9eo zK9uAew>LuGkV2EoY+v|`b}d1>zw-<66kL#gHke5UD7RY)i)~H!!&6X!;zKOyqF=)D zvEH{NH#xSwdC0D*q8`M!m*rU4sLu!YV~RW;)T5R2=YG0dboL*Lt3qI9&T!?^x`xZ=yioN6jZe z5s#wo;jwcVRx>d(Cw;GV2H93Hj#$g^E$E^U$^(R1p$?+)h zx$pPbPPfZVy|>=_&SspPBF^qDu+Q%$G~IAMv|DxFD#FV{Yr?E@4o4eUIg(6>t;_7f z7@b$uGMF*A@$C!cs?B93iQ!W@b`Qyt_`Y${NP#aCuxN7Y)(m+aohk24U4!pmOb(5I z<-bBgaE14`aq)D`6;(=r-42T}N&FNFGo~USfbhL0_kj2x!chV>jz@PtjtC{j#JGVW z6Br1+GnOZ&l`yT|xpO143*^z)r|xk}r_3YV3wvQtPY+5p;~E_N=+m*Mj@C9E;N?&8 z_utF%KtTF{P*}86lQ5=CLkd2`SWLO z-SA~SSkHf;NeNw0wqB{zn-*_;PS;O$lLq*01%-QWu4&;L>6pF$qO;n`H9|&;-A7t; zdACbxZ??APR`J0-CB3XaW=>EBVKMMxU;=jPR9tW{Y>DeQN&Ksk^r2-Ao;Fk2k`y#-^636E#%Ca6a^YaT%*^8cj5y=Sn#FJE7dI_nO-@nuNG4izua&W-k zk5mivNGM38XIW)6DUh8I48y}K}j~5OGKVzzC{|2Ks&%(k;ORsVr>+k2Cyi4eNgz&U0)AgYP z``l>3;c}lqlnBlpENuu678aa9XZ&xrR$RPa;x^FVh;BG>;snwJt|o^pBqhqHD#h|) z61&(Q<-D7RLv?Vx?nh&TLPetEvgc-_d7k>Tm3WyW1Veo#h@Px4s-39%yGg?p#Q)cj zkg)pW$BzIg(h1%ExjH|(%VY25JW1&H5=DGc(hz!FxDG=tM7+TEpIq-*bhMU+1_lz_ zcUv_ZR)0w>4LxN$jL{q`?bV>u5){~3aaqQwI59=LETCB%oIFF2q5X&sqLUJ6nSG2< z0%^wX1(w2>FKrjzGgMnB`W^pcq9;p7$cNltiGeLUh?iJ`0$mGjz0I1|BnLC|gG7Ek zJL~eFpYe!=U%cf|I=^SC{j4GXf3pZc9%e8zK?#EkH4b**#KfI`q2=3K?p^@C0*Rm3 zTDZTP!!bftJ-tl;#_$M7=(nV3J!!F69DYB#zrq-YIalkk^Nff0OFa4c@?%VFyJNjF z)?6)D{KZXrMnYc(R}B>NOoz)#ye+2=-5Yu|{2uP1>FMsfR=PSmGc+{Vci}n6#DAQk zxkB-({moq(c-NUohyua&qM%Asd*f68PtJY+TSdK`peT{^Pe zitw}wQ?culUB!BAXLW10^cl*(@WOH&@aJErBO#QCX|W*jL#=;>^vLdAuGYuBBM`=dntG)->W`j$ysw(L zC^%peEIn+|{Eb^i;rEr&VL8>S^t>b{ zHV6tk2Gx{{sPmHx&HyI@uz*`whQm{=PEAee z4=271Jbj8e#R{n~=ULfU6*f+T*}xiM@|1wep2|=Z6ouJ(_?v+5qHDF-c6$97cTt%sPXN>BmArJ z#rF?@eRmgwiVLRh0iwOGTG7E7#^8iE4gZBGGU!^0>aaIsRRzJEycrs*##jJU)q*RwzJ9ZN}(O|RnfqN0zj-I^@UPR|WB{P+>+dH9 zNWI-$h$;|$9Sq!2J|V?7G_>W47_KA`HG)uMkmDmf+b@yh(~l8QdpmO4{!Ko4A}*(_ ztSl{!7cmC?f8gZ#ZIS;vY(Q8UQx#ixu%N_bYWb-E={ zQj6nXUXvfY@t622#e?Dk{<9ahdVW2#v7RD7I{#`SakuJGRdX}L`GE%=PknDM+8`KO z;o&|&xR-*^Sy&&y^38 z)@WvU+;i6Qz7A?{Sd4I=<{6I>2T%Fi&zi3K?~8nwW;R%U_DFyD!=itx#zP~7$vrbR zGt)V#20Itd7A5CpWM;-O-e!qpi@ zmBOq#zR%s2)cbm=g@a|mSn74tS6VbaK!C)*a9R4yhRY$Svk$WZlwBD77$?WaPaHe8 z2tg>!ikZg--H_)4|s1rsEUgl5;($_9-ZQiIqL;LVh#^bpOh92|fK1)~d zNxlC8m9D~yl7fSa3s*pfbRDwY{0=v8?)e)mj1u<~J^zf%1j^<6IO;*Q#IVnjFI|Ltx^VFsv@qwo2 zTrmu-qp{R+L}7lf-bkmgWxf%1T>o9M5kQkI$S1N?bp4dA?PuvOf*SaMcG;p4(tkAF zM7#lG#LXCkBj70DCquv*4mn&(@uc8~A9FDTn|92}&}YlJRL}e0v_`T@OiawGl{dws zS9WUF#;UwQH3mZB@v`xC-TS!roAI#;3bS9n_@}jE;~;a*gk<(YR$qy>-LJ2IZ|mNx z-|{1NUHGHb(}@vb^8G(ka~9lr&Q5oq^nQnWi7A37;5wuspGR+h3@_oLiE1Q*bXDlG zFlafqioOq4Zol}jK8=3|)_wo5-d444F(mN;s(CZFH|b?@vaByVtnUa|EPT5EY7$^e z*kS*tt;Ame-zV_{+^)SnqQUGHE2-a0xNs5@1|F-HKLa8Fxb>JAtL^wO>Aa}1%LvnK zQx+F@Ss(){qtKo+R?%Zm<&)CA-8uNR27RhF_XiFeR+cb-Y_t5NYe_*UcSg6|AHO?QXDIwlTme{jG`Up*~(B;`t ziCxvo%F^-)O0njOJ0+9G4fpk0&3Hrx^so8tyXwEUlvePe0aOaj9(x# zb(#H+Z12Br|4)<6n zNc2mcY8xAGAt&e#FUMg&Blu3xv&0Ps43fHIec&)1efSHeF2EwtF6ZZw^WPh2Ywz+1RY(Uo>|ddOm1v zY06n#h$yj2Z{{rv>F#$9E9nEx+IhB9BI1U7hTDQ@1cRy-(O53JTjcFZiZ9*aRMmTjQFU; z1`T>T_~o0<>&2&6)z-cP}@x!0eOgryC~ z0=~c+eSE+I*^fArxuP+j2)53Okma_}MqEs4dU{V+7m73E;mHZQJ>m6;x~SS3KjpLC zUv-%NQmb*^iRQx>pF6dXeIxHXS+-nQSX_~R+TGfAN&SE~0)s$_odtLeVQ*jo*4CQK z2PPP!Z&6a>3TOPaYc+1abpeh%@wima9t12h#kQ~ajos8cjo$9JwX?$#>`3p&Y04nx z`M=R6{!wGDcD~r(7`q{43tB&5AOZ#DK*M3oE6C3!Ie4J)OQT#{^O{Ky{bk*muP+H0 z9Jn85hdylRES%uIeOFjt!RFpgDJcn@4yop#_ty9G^N9#>oQbg%Bz`3)od{2^g@pyK z&)SxZyQpLoSF+gr6ck2p3&D#FRv6x~j*eq9A2*lwWT@Zr^z`)c*+HwW3gi>J{^HPV zKWf@%LuH0W+<6x!M9Xy3kC4%lTiS36jym1w_}24IK7MveB#t`YA@7D}W>;$J(1+V= zw=|rA@(T?Od!$cmZf-75Nk2@|g1=s>5Z%V3tzL+1Aq0w3Qix9{Hd1cV<_OwDl7 z{u_y0DwGgDH8(Usc^P>m6ILPBh(&-5s(Sy;rYHH-TI7|Bh+0T3&5WUp>MmaP@%~Uy zSngz}_G$X_@f*E_#}9hrXiL0wXB^e?ZmQbEqy_~YT>{vT+mz=2jRKk;JtD0zaL5(z z>iBH6>GJlsE}UmjwWX@1w^gE1f@U6Q%#4g52|A=zb`#ssmk0fEX=TMQ*QlDZTTq!( zTlF25xbd&ee%HA)gQ~UJ?HXG0ehHHjtKrSs$FHPKOSzjh%{n{VXNK47>N0!2EzFI( zei248$;3q5dz09LNamm#!MB7}vLT5uUA!}_5(9Vx!6xU<5#R9#p~{E{_fDwjEKE%J zJOT;AFVDg)hPwfnd$<_r>*;A`Y4ftr5A=5G-O#FHu|69r9rx?O%*+fp)A+dmglE&u zOilHb-mwHJM_s+s?759CKN-PC{*D4@rKzZTalgeF4ilKkNL-mwO=3EQ-!N&jk?|-g z2d8B1S#xwp#`h0Z*|BsJQ3c-f*l0YTxm%HNSKV(KBV66E(=PkoQ-9~(?*>K^ldn@` z!UJ_WwDdIb5m69GM?sbB>a$iB5HWmU-tirml5}WM!+rg_-ji6R9>_jITcf&K0=Eg1 zyxh(oC{7+q`f;AnF7xY4{8tE&G+4*FH*c1L!FKLkdIN{@nWMapwR}_(AcQUVhl{yS zv|N0}G|^$Tzhu;t_vk7UIZI0fuvD2f9JQIT%p}k4vwbLu2^o4I$SM%!j})Nb*>E8pEdc`*M#SAIv86kj z?orR430=B$yt>TD#AfV% z)iXXjwDgCdaa}LiR#9$H8T&>3SD8OU}9oIa-L~8bk3+9&G;^XOAc^uPfrQpfg6#f zrS8(w(m?jE;~emQeA_Qi|J2W&+!kz!m~twS36 zf&Ls>sI-DX(NptV3oV2GJ6j8Jm6h9LP0w@dvjxq};xXneTxxb$o`V-cSzdd)y3FBv zr03b_rt9+ZXpjgyPd@{65!TK4gVrYN6p#c!z^&ZQPK){u%8LU*>Rk}T2wKWa;zV>#0 z?fk(tYm}#WQigMB5hwiu#Q~zo61k9OBp#347TR@s^&>L4nkR(%fm7)wdS&Q}fq#tl z7)nFjdog)dO2-P~7@ry+FE*|Tbf{b#$03G~8gn2%fO8e72e1)cfF18NDo74$DL?;FLJAkYc5G?)s2W0u` z>gunF35as{65MB$McXw(7ND2<5O+Z64v?Vtg7|OM%O?m3EG;LnPYcHBtElj-n;{YC z!K^M{?3tf&qmHX#UI7_Fu@Gkt2Xx19HOA_MSy9ZB{ds&ym*h(&`16H;(tag?Ho z2`oB(4GO}uM;jQn{}Lmz42em)6D`YGmc+>S8*@S?5%Lb6k;$?|j+&Sv`M#%YW%iPr zB>Rl#ohA#emDEU`Sg~KEwPTq*D|8|tB6sIp|6VBO{vt#dT5$>_Y|F{Yt}b;b<4SL2 zZjNu4HdT>!0LA3U$kT`jRUI89Q2JSZpMYpyM+eamC^-SzX|RlLIi0)SpONnX2#>wJ zCVNyz=R+E)cJzoKFB41p1I;y^1FzgO`7z{eK*EGw54*-h{0_k3TtO`svFjf9Bsqgw zIdjV6e5&5R&dPd)Mm;}Qy@AQ8pMNH1Mr$YL->5g9iIPe`kmdebI)z#_13Ukpv6JfR z8YM*vL4kot|0#+Zt8=zNkHPMEe+Egc<*%k!i4xCi2H20b$c35pqkZ-_Oznv9z{wCuJU9{c@$ z2Z#}*h&MP&{?NgLr|dk^yKdnyS4{8F%GSBiZS96UU;=`tk&&n|kYb;At}Xr&zF`62 z-FWf%Wt9f|18RmR1!xF;Noy(m822Y$xUV3!quRAK7(A6QC z_`&&0&Peo4^ZWSK_h;wq-$kpvODuC6%h_4Cof?tK)MU}tc@)Cr9BvNK8}3+;!Qoz( zkzs9SMi^9s${a`G;lqa&dxGRs*H>4YmlY4~MYtoP`$+uKZZn|AaI*REL~dW%GOf_P zZ8Zmnq00_-MaB67_H--Zw7vv-g9;t6hxmg#>U zp}WZqou_AP?Q9&Z?Hp{P!B;^C=@sj(x-qO@%)l-Q%c4pl+wU*wS^8b_6g5)YIYHNB zVX<&?dyf(cZ!LPdc%)ywf|jngzyH`nNkWO+LO%dS1I-(I-zC~sh#8TL@K7-=BxSTF zl0X7Tf$gFm10+{N(DkFxIx-*t3{Awe0Sirj@F4a8?22gGC;4n&LVzSWIj)^(Et;OP zIzsXQ*$cR)@beesG2>@ZO36q|BZx&*L`0jT`&^PIq`IM^L;d{+CB8!QbAKA;^V>1_qBs`?qiTUK=jW%zrU_s{GfjYdU0QlJr6;eR$q&>`Smx z`nd=);Ybr56t9|b-sf#rw*Beo__R(=xDNi99vhZsq%bTeA|;gAyT^e$@7_xGEd884 zaX9V9c4uGN8d23|ZU45|;2qUM(_7Vh$2?SikCJ$c88B?kMQ@OMxh`s2DA@F`7s(wlPPWhsn?Dx=#0|TQ z^rJ@#ysb!nk0!+_h^-k$#C$%{chf*DD4Q0|qM zrlzIgc?g@Zod8!O0;Bdf6%}+%t1-UrG<$Dk9v0x?`P$dl@E?`$m&`rND0vMPmHR}> zWV4#VjI!qDV}RzJCh-7-cDKyCCml(2=Y6=#ft%%4$xf189UYObkX=;QbT2P=7RJ3j za-2Mfnc}alVAEi0YlFmy5w~%{O?0EBQ(<*vihuxveBJkeLcOUp$NmsTgfFG4g=4;Y zJ_`54Z{#F{-{7Da4-Z6P zx%XD)+Wn6Zq5}`Z#7($xcJ*Pvj{NTRtr-So5EXJXr|$lmzgC+kB%b&aAO26PRAARH zh;K(gfFnLSBEs>{AYxjNP*c0Zv56+Gq?8m`m9dI~?ienSWfN8fdoaWS|2bP$SS}Dv9t3R0=fZ>Cm=uwnW7>YGMk<3;pBMiWv@tuZY8QNyhK3Z z=u&MMNxp0AR+X5R$+DKmKV4tbDr0#5%ucVQuFvtqqj>`(VY39B{oJW~kxgUs3Z}$#+<2bB7Stkm z0pc6z!>n(ad@}oraS45Rjf4;h@$hXS5%S%?(k>r<;BMptle_3L1RIi>UF;ybf6WEn zQJr=F*dvIfswLbV41Ej@tDGbo%y?Rw-xmv-RF;;iFyXDuch3BSt#~iN zOSq9SV^2}2(8+Fv098Jf_0jWZ&yWX$J|(3TN>A`Lq0-DVrwugDP=9oxK)clGY`|5- z&5C&}SwTOJ>+CZ-ymxe(c(q@h_Kk8@D!(7i&z`ZLa9@O^7d%NQ&T89fey0)iDE zjPPBWYYK*QK^YIyYA+}KH{-mIbW9eYVP)}~Igz>7=hJn-;8lv}E|jT=>7 z-*5aq_?Sl@V!J4G{WFMLNU{nB8c>w_$pw`!G@g$sUxU>92qAWox4;8g$+#l#iIOyL zX&j#~X#n54+g&~k3uMCSTbi15i*9w{Pv`YW%gAJQO>9_b*No0CIYEFG>kEQAI65f_h;U zeTC78two3y0tMeI6bDwXCSN)8Q#V-h>ggo;dMXT6N#DI~4<7WQn`g&aGDCA!I1s%T?>hbi*7wq$>-Da<5$7yIOE^xLW^6EcEk)>YakH^uCJ*-q6z(5VQcS^>gOd@&z=j{NeOTCcY~ssHup-W)WbHvq=U-8_~>P2eYD zIyr1SmKT|h{+lv~?~ZvFj;-AH3R;Q6DO7xBcuMy zh(l~W`Us(d&pn5$M@nKic^i@uD+&Up#8()k8>>VqrBK|wR-3~1iE1|8$t>}X9QfzG}D3_FLfGM?D8 zak}ww{jj5W-M!Fkfske)9x`kT$OXf(2E!jRrSMUXIpMnk?gBX(j4<6KSCXml(XmJA zY^A8T5nfR(%*c?-)-)|z%>Zpa%6;sOaF3~`n0nLU#uik ztKK-}US{Qd4Tgi`G9PE|emJ+~E+7mN*O4Xb{qL00n;I*;Hh)p`^S6fC>H6)R7@p@Y z(m({>$n(!C8PD3pcBaezDBsl4CR}Y3UGvQg5u8WHa28rbDCR-nv$aKqy?gaRAm)V& zAT{MwEYqNVRAG%-?X_+5P~rpJaAi)vNQVx|O|jMMc1#iA8aP;=Zf>sh8r2+MNpBq= zA4p)JKU!dwoL$uW(vPQrh^!{R^U)0-zROq4+gAYN}GIfX^N)DdD7!k@TZ))D*4KB?4rq6 zghAkQME3@b3zQ0&gMgici2}@CSVup9{^h^E=Rb>0U{KVpqWvAeV?M?qs8F4qlY^tq zKJ+&nzl2v^T}wcmekgg%!2v(X*~y7U{}yt?kx~e}Y#f(>%eU&EwMQCL$&xqLXB$4~}t$bz|Ad$GQ%BOxq&kcp^ zUSB9d(Gf?N9{nSkA=j?A8oI@{v0t<{nQ^y6=gdGR`H7{i`IS8c(m&7jy;a^TL9rQG zoUPq^;{3mA+B#)nA{EMP8!Hi)kwQJLofhIh`-xWD%zD2YApl-A;s~l!!<~Oq_$VJ` za|G<&rX2`MW@V3Vau}+_a09VSJ$-#BbP-X6vJYBw%!-~fOPo1sn0Pm5Dg{pqB580J zM|cOn=cg+aX4b}eEY{}QvbX0FE~mE|h}>S)*0diSkvgdLnR9r%SKmD>vF@0uzlKVSiT0m-cSW42WYGx06k38>wF7AG8u>3Q49;*lp;}*LQ=FahePsm(yuLnN zTniEmFUAwFJ$i-v4f00*hg#rP)+sx}%#EZq=o5z^{X?^YJql`7+(rht+WAXo86Q(a6eE8!k#pO28jNPlQe_4t6{$pYqQ@ zO($LT2-7s|ba-MG*E}I{7#+Q#r&o^A316%ysA+@}(i=Y&sUVSRJVGTsDe%47`70qo z7RgAdL2AcTqScUz9BYi%3C_eZglxnqFyX*a{;XZt?KZ8&OpPIP~+Uk&{!tHb>&x z0rUx3B5mzHqkuP8IAJJP;XN-uU9v&0uT)xWHvj7D%PYxG+RS(ip00|JVT-Ow&>t9! z(umG6IM12Mb8&(*^k(5$7gR{6KR7{{Qv3%sSB#ztAS=lk1tKSC$xog-br16$sO(|D zwzS~7U8;w=6i)@-k1E^c*>-Xlb7@lko8}&}vdF z6`Vsu5HY2XUb%^EuT<@LDJg~NWY@hCi?Ij5f6H~qD~M6{>Qz7Z@^Cq}cs%vQ2gm?y z2B;h0QRN{Er;C+N!L=bYBm`>er?n=cL|$D!(+f@Uv^EcZx9<13i6M({yO@||K$Yc!*|mg#wW0`bxd%dh<;Wp&8-K8 z!Wo%+^B+g&G45;Ow6iYZ)62Do zZnn&IZj3=}eJiSS#-5AIfZl#_)5|Wq_Kxt__7t@30|PhI)n54QNZd3x2f8OUz-siv zh2+z|?^=}#W$bMO_ocBSSXc$axu;J}kYzkMDRj+uvd9*{3) zd|8u|0hXPW37aaA-D;OTV5?#PMG65q=viY>t~~oCQX)e=QN$fLeJ@<`@K_Xx(lJYi zDDKfFSln6}I!Qu^iQi_J(nYNa==$tt)e;QEHJnMYLExwT7yX1D4)`ddZhr}aY5?|* zkWN9XG#y4qGBQ-2W`KBO2LRa(9mdbEWRMWX%j*b^1wd7Z^TXrnP(EMRTa6(L02HuS z0IQ@d05S!Yf=DfD%A|7klF`{}O~FgoFqb z72`;^l&NnB7aUMrcD1vKPJ8|TX!;IttoQeSl@mn>AqkaGW_Ae)Nt8rJ_EtzX8BfUw zAtYoKMRs;}k|ZlhX7QNBH~~aqZluBDG&N9w1^Uc9DDFs=GyV#8G||bR%Pp zG0tF*qgYPy+rC5vE;}Z3kji&;wJ>GUGh`g!Pei0jUCDFi49W=raAyM&@o@kLM<_GR zK_6A|Rqv{GT~l*&MYb@QIk%24o*$S#XY}Qp;DB8*6UCTo!JW;ra!y)1U706$-o>Yl zX5$eznuYMt=;oRnSblVs?dSL+Qi%aNN+wWN^9Nlq&g(?ZJ2zd({pF{!Mwc&NzI5pl zfdFk3XcPa#xlnKBfk=WP8IcJXa)7#2Q}dtnbJUB`N*K)=Fl@tG9V5^e*RZO)Ygq^v zOB7va`=xPw$K8m$_D=I*J8EL~GBE&UqDA>Q?3^{m{0XXpHE*Z15xO)mf4ksL-2aFK zRd+ugBNbz6s;}lT?ELBBS5b=lE#gp}vNQb~P9#b$*Ks5OQ$qqb)Fzz<6`E=(>cJL7 zXP?}N`u6OmW;(OVIH}NuqdR5Uer+<>c&@!YSI1}dh3fxdRBPRR+r9^=nwA|riHM~S z`dIN4=H}){jm>Cl^gWpIG@Onrl@E^l_#$lLFY6o(?i`(R^KwMa8QxH^?I(XyAgdny z3Fku>LGFqVi6qV@VRT^xq0OogDZE^W!2`uN6jk>OR4YERLBqI zXolNuL-gy8;WQHkiRuZ)X2l0$u_!;_q@P59Ae4>TkdE*1rH&FuE{HkLVuQrj7zLI4 z%TQrZiLV1hL|&}8WREM8u*0y)EU$K>)AQi}c$98#@(qdK33>!4(&huJ5~gy0#(a@ z;Tv9WXn)>{pq~&_m%cDPnqqFM(f(_s4->=Z(MM}*TLmw2cigcuZ4ykn#Tg}Sag}41 z(x7p`km2_P(xW}B;Sp#$a^7_X2Az%>9f8?XXr>>Y0 zv4rcqwmR!4=gz>TlH3jgyj+ zH_DT}4|ElA22dQLOfer_q$I!Zv2}#k+-v($BuPc_n%C1=FwVzD{}dDyCg1!P(rW?U z3?t)iC?MozSFc_*GD;kOyP@)i6XjaURd!;&dA+iDV$FtFv&Q8**RUB7w3M<>4!ca;@IEU8#S)_dGiEic}SF{ZP#evVO1yo4Jp zt?R~6scl;+PuzXPY5~TWrDZpAj8#;s#ugHo@8Lw$;ng@BK|xMlHoMI8GT~X`-(fB@ zsQ3;O16oq$V)0>xdei^%nBD9egW6}q~nde=sQ-XLGpR}pKp06gX!R0H%MBEgVYu0`MB9uO}`zAVI$t_ zS+)7$#jiBfQ6ZpBI;w=a)qO+QT^^zPA^T>w6kbzCt{}-U_{9qpRly z@HIHx|G}y48a)SxqT=C@dQ<+t;UOVMDZpnD5h;B0=7g~DZC0u>Okr?T6ml#Hp}t8^ zx5U^Qtv6Kkt>Legl$3xDV5p6u2(Zp)*X;_U!d4OKgh>Nuz(HcK)B+5f9i^rBL|j{1 zTB@NPGK&Kaj-h3AOiZ>`-l)&YBZhNECb4+YJcV}oMa_KfH??$!hDOd|K(?=^R9~~N zBVWMtXpC?uaZ|Lpm(v;YYFLOh^6t8R^g%Z=0X)A`un88tAppyP-Dr z0BOeU#X{P*FQTvbt!cm7LzMV(W%qB7Sj zA05w_c)9$3cYenh(`>rQMw_H@XnC>z3=>%^3)j8dPvSfnFGe=9(}1H$m6@ATq@O86 z#MI)QDMwiMU+N0oj@OG|Cc4BFVSWEftr6q;OShtFg{64O$Au!XwPO*>w>QNz*?%=w z*Yx_zoqPKCWI!UGB>YCu{30;i=UkTAehiy$SsDP0Q%?tx>6%0$VDlu6LQ% z);v7ce=G<`$Wd^kIakpNma*3+f(e+ zusx`>XgMi!e}F>z=A}zSfi-7=hchs^lz0SI5A5B$7l0HRcnEFvKlDwjB+If~O;v*t z6Z9+@%5`duhqS+-L%^|x2wb!BuSeum@U%k+o2c-uyYlOh2je3pvAbt(U}_MvaPrh; zvcP~Q{SqT{OKT(AFP>*5%00&TbPe+~4-cFWDv|!kmrzIi4+xru%I%=Nmp+vhAGQ=A zMtojTWNoqHnbW364Bu24R|?b00gA%>C-Ww!$o(D$Iy#ZSC zz92eK)I%_=^sXL2Ei)u*d7Ed2dHBd%z3Y~aefe?E2n~Gi|E1ojZ)(0O-lBYCRgT;2 z?7iROvymODzy?qeYtB&91lo?`C}KmM0V*r{%tK1stw^mpW+k2CMg=A^SD zBka_e>){PO6qPfy5)r#TJL9%bs;Ogo=LykJHBIG?oBt|i<8hUz6-0Yf?TmLSSM)8X zZtW#+@hY$_GZdaR{ve(GqW7ZhX2*DIn+MUQ#M09qvwn`D)RHuNFP)7^yDC1voMkyl zD7qIPm=f+Y-drhvvUShh^P7>n`9DN88lCN(ZH=0oJl??rxv>$mqXVR*_=LWaO%#8O zhzNi6GD{`>2*z|W)iTx9cEy)7Tb@6a-T$P?02%BhL10>a{`~#tWneck3$mB@gjYo^ z@vJ^OL3>ctx@!?Bp9vQnzoUS{z`M|VQK+G@@rjogc!hxfw;Ol|(U2psvZBJ%#bq^G z?wUPg#!q6o76qsHW6aEmi2-#EeZ#>>#!U5?@NkgEL17_(llS8C8!^JRJ5bF3fma`- zk6hb5AAX;pB3-DK$<`@XpMCv4x$u5`!i-h(x7T%ioH%~;a>cr;+f1|mnkxOMz}u|j zbLqF>JAAZgXlTC|>oLomcUPmL4;V;XEMQCLnH#~c^sw48aQfhDG+x<1G614 z**iKo!|QOu0cu0rfRU-Zj}QO3hI4$EhkphfJ7aF6(_qZqHQ&Xex3uEC>N=&~7H&Uz zXF2nj>%qE`+m)2dF&qPuo|TEmm_IuHvwLkk`+J3Mscl53?7_Td+VIfz!%AV+qGUuXnYH-p-NhtqR5> zqU817hio>)F6h*M@7#$b+nX(yUYI#2lF%47hyh@1ER&V?j#6jym~4cbyG`j`O{IKF zx0BN1*F8qZ7ugp+I=0X?7n`<`3n#mWH$8poPfDw7c~`MCKWSF_Ftc*MohHod;;KjI z8pN!CXtjFRVR(2>*bvqEL3reB^WE6EwMY6UY6E-w1&kRhK*ZfGyT5!f*}YHbcy-{B zT!XU&#FP|1U-(IJ)2+q0Ui<%C0L6DdVeCn-ciLipPMcN^oEtP1;PrNSvfWBu1cLED zGN0Q)zc|<+?wUS*w3Xqc&BDD>sWh=ZZYNH^2f&YX~16Kl;RD3*g;Lv~1YQFp4LK)~U4+NWu z0+ZtV;GfP7BK-`F2^jY9`@qEsmk@A2@;Sj)``J3Pv!F!7x#%$xvNN~jB${+tO5Et9 z@IoJpr}mE;&9Z+5e3w1gKFbd#82?Bj4z`{x2_jpgjlDI&e{y5h{d(&McFp$Nubh@j z9DCd<|CIgoy-rMY>3ADl0Ug}?!t}Z$BOm@}r&nmbA!2jlzsm(Jd%~K#rP4o*a&mRp z7ylXyBK&*m_=bi^R-E%^!4!Au^ex#}E$?w zq5LLQU#7InGuXB!j*oqMJ634pnAX&tqUt)@TLtAgZ-_QEBkff-YW(eg6%#x*0e>M9 z(}3h7j6rnAj%g#A0I{a%5Wjqpg^=V!as?jxJ2*?<-PKH9WmAsk*u}6NxS=4iuy|l= z>zYGw$k=uYTejBMPq_SMc6K)EGiSP9cJ}-C7I*I+ICLm(NkD^E?ieFuFtbFOdOC`A z55;-~VR>Qn!-1d+y{UT4+Y}6m-ydBaI(a^!W$N{#oB?TS6M-68lALG#^%*CpNAG>; z_LYzBw~2lkFP+rF^zYx*@cM|$RB!SA!E`nMI>9N%bOTJ>s3?QJR2^Ox1_rG7Pfee} z0uVHBLc(iRT^*VwC_QhT3A*C8NEevM>2vum3RTRj6ObBgp6p_{@d#U%{ zmt7B~KatE$pFD`zfvYB+;-&mYBQC%hdpY+Q&n>NOef{%0?dP&{^nPXE+VhF>4KtOu z((3PuK)tOmZDZfub}C#3A61jgT-bWc#?02zArfymxot5Sn!C_8(*IuKIKdP&(%{hPvTTHI&$sk&c5T~cXP}mK4Bw%&`Ldn0w6M7Y}&=-eT5Dj4b5)#rZmPF_EyhzG-uJ7Hb`*IOepKFy0 z*YA>7TZ_c6ORd)GXOx!Xir3rvm{&LaY|KnNAZmw9{`J#}%;B#-*kNt=PQGNjf8D)td~B=t$D6E@ zO~tVlT^=DvvW}edPIXocMTksB4mj+-N4`f4U8jH1PJhN*@};su*RMia;avCF(W^zo zy7CG~x##lVO1PdrnxQ;tQX_V>JK+ZMKqG^WiB5MFkcE@w=I0A3>2rhr>F8Jv5E3v3 z$egVn6X537nE(btKXf+YUQ~j`wNEd%>KL9sEU!pUR|HN3+TNeCM}Qt+@BlOfEbTK) zPJ3Y|gz^{50+wV~5E|iF?1#==kCT=3VC)#cUfbr!)w{|&V~C9yof&tMir+2$^>1Yp zxLaGuLzkFx=I1e1n$DjXe2Z~%Q2VPEL_ZA)(f{~hAgP&>oZNlmUl9!qtsoaMyLT^5 z?W~}H05FN3KY!pGk)zq+q5I}$tc05g*avNG5tmq@V}UMbR0XpOY~-fc^H2n3wT^pVeuGH{0CId` z_LOXVz^i{@o!;tm(biYcX&-J(wAb#;eL!Q+ZfN?nlY!=C!$QxhW%r|r`S}b%{mnjo z8+mVzEX|_^OBWBUu*$xTzPTarJ*MQ;@dkh8xc*1(#6%xxS3*a9)rqL~5fT0DO#VJl z5j<@ew?L^?u$6l&=%5b{JPUG3*|!Ji@2}q;rb%=vf2Yq>rm3zjZL7DqoK4R?|ABpg zV78O4$U7zZV%gxPCEdn%60*e2471eQ7oct)Jqm)}P=MRt;Tln1{c>9x|E=2aDQ#De zuXTa#>1oF$J3=~(PK~?mbTTdnd<-RGJY(2W(m-8cSX@`kEXjKTe=r^nn zFkTr5{+S=1van9{NLEz0aHPH0OzLQv@J3+x$l}PPp0f$2!+-bR$Ik>1ai}2k z-aSOmBXu_`!~erO`TVF+kzl4j`D#Y*qDP)))*hlz^ZD;$qLRyp9fFE$gPE@%IB+NQ z`QN$Kg^VJTu}b@ZeNSFy>x`R-bpQD@DgbsAJ9}~&Bw!L-pc-QzpYv9~6tee!ieHev zva-Gg$R*gprxq@ZyAfUt3{iW6HahnP_F*Jg*HHv)1QR74-jy7R!2>|Dda(UjSejp1 z|9OfQ4(4Ss(b3kppgw;d{Ljg0x2U@Iy2XMkvQ|Od1O&p$jqTy(c72b>3yS%A*$W$MiTb)}8!o?4lFnqy^kUf0Pr3~_G6;-PA<~pE_9}FHt-AY7sC-ZktkGoJu zV4{Vq>lzLKlKuNZ6586_{MyUT;YyZr>x}G4TN4x6b3zUvXkshM1=8Vu7++e49T_$& zSW*;z`{0X}h$je|G+4AfJ+U=LV6+XIkda9rtpCh+vaarQ?)HF>uJ}%N;>r@GzSd{+ zXLAlzM=6-4sY&Q(-cKm{Nv_rMz3SVss&&_%{@Az2W`Lo8GVbBHRHac4MV3SI9-<#k zf`K{r#ygV4Uh*b$Z~xo!o4!y!qD0cwy0iUf-+xVT41ILTIi5bThhW7Q(yU2uqVq7%2A}M<$wg?+P??p7t>2KSPg#4^4DcM{!BJ=zE?y(is zbVhMZ+mEWL#`-X?6=N-zrL0-OL3j9u)+Q>sK!HrJuS-{N*vLtm@F_m&$0- z9D659LM*iAK`KI=^P8u%i2@+nQq5&VL5^0&Z&}$<*&Yni)>gX}v9U~vFKFx+d+s(|PhhIByJ%nEXXFZJ(#p+2fo7?JM(gfTt+1t2r>u{R z3`s8Bl=E25dU8hMS4}D9&ew=NMAgD>JF6kaM302?|5=tTY`xQ7j*(m!IMLw!cE;tw z02+^pddom38wV1ir$(R2G?)AW4+9pB6PxurBvT>oS=!Lu+w|LeGl|9TQqjuOO^a;( zx$)K%RVlZBtc052Lj!u$WPs z8Uo*E7eLbTRA37O2+@|V0S-)Zp{|$o<6SEaus*`ibz=+yT?p7`$!XW<}SYx(7As4ecD%z{;Cma-!I_GuJ2Gn12jxvr<23$;fY z>2`Z`4foQSn-IqPgdWz`cQbXWJV;AqAhF4&y_5s)9P2llnLWm$2mdOc`grQpSwu;{ zdCoDD;RD1p3AQlR{G0Dj$U~@8Pb)3>Yx?FoElWlGFK_$By>RVum*dYnd=xL0j^xx?^ivyuwZFp<7{hN z>^#HlR~>yeXpevof)C#Q48}G`)kQ_>4af}U&k%t_~FEs@|! z+#=GmQ(Nou#<}6bNee7c>gU;_k<7QJ)+#IhRTYhp*6MvusB})7zV&eHi;t>9|)_G|}YUosV z2AL@7R`ckn8E+({H3<%=|Bu`i-?2~o@#}>9q+g8DAC~YCi4OObPn8wC(lxf}ecFiA z6I3OOTCTFG_4}b9M%2Hbn^dIIGbL4@f++uIEXkeZu~L?@u|@#SpHx#twik#lov#Q< zL>T)7<7noN%M-3;vXKQ#Ug51SYpFU$^9gT=}`+Ae$2`{KmlRkH(IStQ3rH zV1xet2Lck|-v*WA+}vDU$EAC$*ou@Y}Gm6+s$BA)?v`l>wU>dCWifbYkr?i z<(6Z%(A^lJLkCQV_IxIFGkzA7bFSA-*;P9}cXWK(lb|zLV(?_;(Ta?Wsbvq>slGq< zGYgWG!9%d7>FXnaLPzayazE=S3@*I>=6)LK-dDNdl}g%OATcH7{IlcxbK;R%ziyX* zog4ZiSFB!CO}?nEZ#_W&&(*W#hlZ1axNmuErsWs*cEicoaFIik_x(wSJr(#it}g~P zRDend4?M(z(d)anR8<+~`yH6lwLa?1IC+*)c>OTTr+n)39c0t=BDY@@1&>V7=^OC$ ze@N{U@(udpQGVZJ{xIrZ20V`vGjaB?)4DCsGRQ%f^CLwtEP9XHOFI}? zJ$zUKDuj{IN&D$GIp{^8K|tpYmh>)C{*Ordv>>czK!20^vrrWN%qG>&7uY$nO|ISO zx*BE$$KI?gWPC2o%|+L6kpW*$@LW%=G3rEEVM@vv`k;M8pO|2inErijNkh-uV0E!` zVc)*4xNZ?ww}%(S>sYTOo#V*v&ugZPe0e)Vt9a9A%-P?%woJgb>l2mt&#yU`B8)_0 zT3UkbiKRbPA1V#3HfyyIN~(jID#tk((t&l3Q(qDZ#q!OH*hvfw=m#Lcsxdkjt;AG& zz>Dl&8utDuh82gtfeC1-6KGu89Jwc2G}5tvX(}Pr@7?R#iiT zg94k@p=_z`lduAcii}(V6Wsmp-VayVkT`GwMC(heQDLVgP{x{wh>MABPMOuX)L7ECS|M&v}>G_!TzHgl1C+GTH zxY_G`cfe;~g8R19XnQVC_Kww?(yN~gDasWKGusPy);3DMmd+t>xaHx67A?Fp<8!dS2GyCAr@nqeL0{lM!HE3wyArdsYOpLJe^L1Hrz!<{uA z_J*%-92^*fPEZD})pbi9da*f1&TvIbMzB39D; zv(d!Avaen%uphwb>9hx{+B6r}di=q@%PK;+O&I zVFr&uMeWzG6g>Q{FVGDlPXk0R1h2u_Sc$^!D;4p%x=oY3P90U%>ahg?y)V8L!5j9) z3!IL~ans|CRNnrNBN>B(Fa9+6KoF7O9~>ONv>(~44XUU*8gDO6?s%+(5Z3zFGl#tr z2P2myitO(0jcN2O;jla4^>^xL?0M&b;pn^zaRVdt%Tqmt(Kf;wbSJ9$g|ZT)j;P!i zzFIf%Vcg-D0sku{nh=`Jg07*pY8#GbtUwc~yH@u#jkoK%`xbC6CP zmt!fG6vR(lpYAQU%+Un!xw?AIgWoIn0mxgvZ>im)(K&r_l!;9P^^}RD5>#-5I%p$LV|5xM{tfHM%Z64-7m);>D_HZn|7xug_A?zsjeuKDnd) zF4y&~P=4X~&$e{YW_^Cey&{|Q2{D&Vj0xtSEDRVx(r_Q}p_klV9a2V0G8mv+N!Hco zaB{?{NbUa?k3BWDuD#tkU*CjQ4#eF~D<{~LwKDdFvH2Tzn2g$B9*5Si<3KdCc9 zKw?tMs(S@;MlrF4A6H;N0EW8wQcjTcSerM6^?<&V}kalKeYh22zpAUVf9Ac@=%$FsHNHx8q0bNW{gtxO$niqWp$j z02trDKMkz)PfyR+Rqp+@uC+FVybqkBJH2hkMz(hRZ7NBUly)Mrx7j(*p5ow`>Dqc^ zTT}Er!schm$DU_oEITFT{J$TQ4VXP`Ug@1r`Zz!t=6m|WJx|wxA8tIwO;$ZW+cnJ( z-&DQl;Cgd4@zbPy#b#+v>CNw6uOF{-9r-77J3j7ndv8#Z7dcnCDktmWJ@hRy_(HB!v*5q(4XHN+1Gl#G!p;coV<7*UC>Mx( z3IMn#xS8O*N}36;X1u1>N6QQsBIsA-V_qd?U7latL??y+-&CbDS(h}Sh^hL4S_mqx zq_;_WHtu}eq=3di!HS4DO&5r5 z4CDjxLL%)qF3AfyoQ93IqrKt{PiZ}Am=}3CD=QN!e;WwRX0B$P9sBW|mEQc_lk(${ z^&_@o>h8>bjma%HiFYl04H%N|dr0k3d`_(J9LMZ1;r^?}j@LI*j{Q0`;kf0oZ({W2 zm4cG2H|MfnKWDqj>vxJ8noxy{J!%k*fncKEw?kw;Y4lhHWI$=dvW@_OlU$67UrRGZatwY4pR+e?? z1a~bWmAv6Ti5K@P`!k)3w*M*1^R`{=?`GTXn^}GkT%k`UgJcd_J#EkRV;9z2DVquV zq@TBj(Qo%@*Eem>mL}_4g?4A{Y#f=%X7O|!ct(es)wOlIJt;QTxr)4_tWTLU$LyKp z&Z&@%?ry7ye`S@g#7IC|UYcx26eN5P8!_`i6JURqj7+Wt#TWteB;bU*ErY*J>V;t- zhj{YJrm=$g+fGL9<5$C=E&Va>fZI*=mM4lS82R)W@XN}}H~(H2LT(RyOF-`8(JpML zB6cGp8pV>$bSaYyJq)J>C#SH$$n33w?3pn-+Uc&s&N>z8%^mo?V0dF3AC3#xGF8|laIf0nQLx&Cl;M$$|0SAVq8f+)vZ;_UkwvGA# z`_u!pTGTn{rK+okoGUkuFJ)A2{j-6;4EIYENx$3L$`_i%tNA)MNB9WQ4bLAi&5ZvO zj%fs*eaf4W|5+kuLNlm^z!UMz@U(y{K*$0sB+xnGjbG*UU-;2a4oP8u*Vjq9y1Esw z)niX0)0pBE#_{1#t^fSd@hC4(q`UIatwee9%wdJFuBxifiD3;HQ()|YB^dTIx4O0h za`qN7`Y*h}cJ{Z=cXX?8)tTFI$c34J7mQaAX$B%aW%ayFhi1KrU0)Sc-&7!)Y^QkV zPKYU=YOJpJmHP30rt#F6Z~W<-E;b&M;h8pD?Ur(tbGH|d_5Ha*rT2G~g{5zE=#AUZ zNu$b2|2y>;69_Yd3)S(*VoJ9+%zyeUZ@cX*clL%}u{2%r4rr&Uzp}K*Czk+9DHa@hICOG2>Q9FLg&4aa zFE43(#DHOWc6N1Af9D~TB>?F#n1GlIrD^KKgAErma$L2)jx9dku26R8_hQAmLE*Ny!A@Z3O(#YT#SPu|D<>#fLh zRUC2MS)gi*__)Ywgft6|6i{beBpO|eYv z?`YXD6S$M-7}r9u7kpg&N|_!xK2=vGc6&qFj|m~p*Y2&unCkxNzPfMj&#CD1%xVN8 zzDL)NG=&z}grL%@@uIXS0RI}!MD<*pUu-WvZ27#TVCl7Y^J8_Gc>*KNGn-SNFGH^E zcs*0kCMrzUnpQ3~P32*EeC?1*L^L#P3{+J7i!EUHVgdr`;n9aLFR{+f%^lso@awxK zgYS8!V1x}IN9IaH4e0hLDj_fhivp}xL3LYXA7z&m23HSw`w&a4wE%^M2@)(b(V~B$ ztFqst5OyUg=l$EM?*%byK60>v6nZh5Y}Z+G*JD?puG2K|LB-+MwLh%~rKye~0GGKr$R|*@sF20tl7S(-R8@HI|XwH-)bv&V<04 z)Pf8}gh9Muvx#XO1=>O3N5jCdx_Z#H^)Xu=7*{kLHx`$d?{^nsT+A}1xQ8f8Qi$=o zfpy%+hd!0r&JVwC4U6CHi@3yY0rdpW(%@=Vo zeWE{DjxxWbqNgc%@L1MrV^OZ~#euIyMmd~poUh+zB$lSgvqrr#dPa*^aQN`KL0y~( z`K7)H1wls+d5PNw$7zYnR6$pe1eBSUWgnP$PGDv8~|w(`^R)7tWf*h_dknJbPe&yOY$%{;eS;d9_-zVd|6eC*?4p z_%V8D(r$q)H`kslFhFW+Gkvn?K3`CX?n|n%;r9%8A|#H(SgX%-!cy|c*1q^khmrMyV@1PuTCx^@=TF<-&*H@+ds~<$7<8}PpT_(CO^sXXp8w3|pTw5M z_v(4EmPtr>!pC>pQ&QyeKz{smQwg3wlZczNi^W$dDPEpzwc=;51Vt7=OY;sqMoCgV z`+|0Wfufolc9#<6<%)wwV;k}Ttcc~ic}LxKbknDFMIeY>^-=ar@*zv?GUDIA?Te3# zkXM6>r#1fG;T9%J8Kp%lQ)`NmSvot53)uj@K03CpznjaUSYB2d&0jQu3m*_S?@@cx zz5U}dx z<>F68nd-k*T@FOj2rcf zEYF={2mdG4+}vMY@iX|M8fmB+h@g)TA*WQlalQVV`|R9f8Ru5P!6BnTI{EWwuSkS5 z^QDO>f#G(O)BVE1?0w2Cv~tK=uK)i1e$Pi+xSPSlSgSE;c^aQmeSKh~89f~xuWrfW zIkI+oo;!u?M#ljKI~e(INNA1CH;c zUQ^vga3F3*h7(%z@>^6)h`)$O$QZ6iF6Y3d)-5jzf_&ox@( zX?9Mw>Ni$g8q6{v`$*2JC@idy&IDK3dgkwsdnAAUsCA3j%q}k?(7doH{Nkxl9#gM5 z9r_!%OiyukXAbr-jXA4_?HLaePVxz2Dkb8#b(qcZLxeKkK__+2jQ zGjU8P9go;WCtbeJQD_QnHC8@AfyKESiAZz*%HQy8H$|uS$M2Rm_wNJUIK#`eD+C>% zuHmMm3p^8fE%IxvuPkI>V`SGvfJWW*DH2x~TW%Dzat>{Hz0Sa=ILRWqN|t z$h2l*WogdAS^Fi`%GyA-;I!20oHC)pe5~+D{mYJS1$M3TpA7hQ%3OBGW@pbH%%Iyh zD&XwA!m{;Op0G8kFSR)t z5fk+vC8_3*3%&zO4|gtS(e^KGT#f9ix*o>59x~P*GLF{PcU|S~dp@r58WIame7_r4 z-+2|{YLUw#fpRIWl_5^!&t|rND1-?aBTfq=J6}9`Jbr{jj4y$-_i8#GfA#iyQlC^| z4DwC9Y-y=MPv8Eo>3-H((TKn}StWD+zjbV4cYZE`8cY2kmripDG_CyW#6t$Ux-(or{~E+AMt+|&JKfo{^mJaCHwPCbb?Y zS+F0m=LZo-hXBUu zReHv;K1CV>zU>SP50MfNZ)B<6$ag5c7Z)7}gdJ@41|LPFjb46t3)U?-bl_Nap ztg>sC*A7=)u^)u^5SFWb##tbb*_(JjG0A@or6I=3HhpihgX1r_L1na5e7xI; zo{!PSKFO8D_XIri=%~5FuSxv*Qz_=YSWO_@6Jl)7(mU6C(LIa}#8W6--`=|W-~m4; z?|%&*yZJ`}rAT=9`snhLA|Fd<<4Cg`4l7{H{g!i+lw_kK$SU?I{xNqnDq z)r5=MwWKt(?-Z#Qo5FXsXwu{qnt(L_e-g`6Bd$;!!)$~7qlukFokDarGzBmJ-M>+pFQYQpyw zs`(rvA0%OQoZGVi?(TCr0WrNhch;K; z+pwJ~+nldg)*s^l9p}1Q|25r@$R*=u4{tQHJZh}2eDX1TF%-x^c< zdv$`{tm2cZk2?|c<>ePg+vW4pN|yCWD3X)=0{!(ChqkiMU-+I-(8qgESnk*7Z$-T> zy6lc(cAGKA9Lmlsi@|f_Yznx9K~9Bi1Z?Q*xmS-6HLx-G0ujd-`~#4l{nW4{BSbz` z?fb|)42yz;L*bu^dl_8#p8)y({E^swMlws`wHvZesxa0B*vQ_Q{@X&Rx5A?vW;Hn7 zzTR^NNC_+O;}^ijg44|mgwDx)SVZxs`LD^y2i}$ksh(<`(?W>R(JmyBGa!*vVB&;N z{XmAIPJz$~NxsV2z-oQG;-#sb)b@8ROk%61h)aTd@SsuR*k{JV981fY)&3+x%G+c< z{}2!R9ZP|6)!P}SI)5F6B-z(Fq#pi}8+Z6yf2uFOl>hz4eY$p|9EPAP_Xc*7AfbW4 zRbIXpoCV-? zl)3gibczZJbzIqHcEjHeht~-W=0z!)!ORn@b^%tmN16GFl$gC(0j|UPL!N3F2HpUP z^Gc1)b2P!Azx;+@P|!X<6!T0#AasGZ_4FjGt7Ft@vJ!gQ+hG*~E;R>D-=LTtekPv7 z%uKf0S#z`fM{4J=S&&p2STi^l??xd+434JD{_9qiQo@dmRK$?{@ANtM!Q5tJ{@Wa- z)LMpOQgoO`d`g<-gy+s!W!(C*&V!r%%Do*k@1Hj(?aOPiD8p?en$rBx?P1y6dipgE z`J2rkrqasEJlRKB4i|N}u*E@AnUR(%NA(utC)m4N2nDaw0)(Usq@kw%^y-{J{ACrP zvuE#NaD?#_2w!a$LU{~>pLav0;Bp!l5g~jhK!6zUS{gP+`T4)BM4E?ZliT|HL4T!r zY6D~_N@~ z+-8fD|I*>!;S|`z;`JS2P}Don+_@kbY~bbHqFi^H+wIHW06DjU_uAb z4?KQYyizkTh}E6EZ7eD#w)(HA4{c>lZ7nFnUX~enOP@NfkDS{lO~t1i!m`yLG5g_% z;27`rLSKTq+HEvnXL`Ocfh^!t^Nz5!;kP1?M<>tYKD4BvdwYRf5^hu*ql++??UfKO z^6@2ZTz)XhBobI)))s(X@aRgOz_dA6#P`EP+Dx@DZ*y4u+kzWh>nI12(uo|+&A~uE zJF(d8iuJUTl81EiaE41s;Rva%Z)jl33=j}*>;@R3t}cR=DXF&8J=fIts&N#a8E_qm zZtC78a&V+nR!WJ8IDMrKg`yjNq9a2?dC)Ha(F>t|z597-iPp5ssxUTow+=H_@MtLsY66ik1orebT3m!QpeaDY1$=7gsx_W2sZ`3-T^Dk|r? zx*o6j;Chn!;W7pRdBKeo7+4QoPrU1j(J9J-VY_00n%?>*&)%y)2SEddHNLEWVN?wh z3WIrg{?O}lOB5X?(wAK>(Hfr4n zJEXpEB9|psMk)2}KNQ6{%a2r4Y=@^be}DV4z*3#m=XF%=H{?j$s!w;6DE#TsxusWU zz|Wj!Vk{7i$Bq^bv=b}^bIVvFejf(%D-gy*Gozx?0^Wf+*L`opj;~+8_VvN}J0&sE z=u7oM@@kxQFhs;#UrBvG7Bcj)(<=F_Oz@;XPAM=ZnwswK4YEJOra(tado$vlnVHS+ zmKIyo;aENBU))?>A6HZ1ee&zI9(km2d`iE!XbhW;fsuB0$zPSQTE7vQrPqFsB;~Gs zo)23cri-m(yqnX?GrHxrTn`7loC)(oKoIXNtmR4M+oBjOnt2;>TTRZ}=VNh66Bcnv z$6q-oY6WdS-$(tpDhHe$9UL%1VI>WF{``|sj+v!5-YK%@uCn1%h2pLZVT15WHnTjz z3x-dbOAa)4X=#j1OlwgmLm|<(#x5->Elu$1Ig!_?L`58TgGJ*5&|et51SE$0+wjoU zh5*F(9Gjz*yGs@=q zST+}&37*+$C0|VhB>v-IVpBkn%ICo_{jKGYoz->@$EBd=ncg`mDK|HjU0eBh=g3$E z5WRo0^(i130b{NVm!3}M79Der!x&_oi*C43o?233_Wsu)X(~*9L9)X=2LVv82Q^Xu zIUQYH*a*IByBESNaYsW#RNKuCC^{P0iHUoSoIdMFvP3KdmNN=33)A>ldTp{l_OI)d#>6Lx=qWVSo`rn9iS!xQ2l`#Y11HUx;V~gZ#J{ ze4$i(@??w8b2(gUYg(gf&-R(raW}p7s-3NAW#<{w z5Co^UPl9W1Wn&|i=_m5PEKjjWnV9}2IEfA| z7L(PTNj(~^bs*=QWqZa0)zl6vI*eU5&Ye&Q6APYPTt|SK&5gLm?{zi&+&}tkTG!vs zexS0HOt=zLOJYo3eQ$CCtQie%?azjJ=5AsOMC8>sf`g^^Y~OAZHfunug-=2utl`@? zpdGt0amdg6@dTZIG%T2|1Cv7Ohpuh!W7dlonPNZfS)f4kUTkNIX9r0ZjwkpPnQi0G z`2Y&OCie|RMeP!YGdrP6to-C4_`!h)0o?$e2Bvz>f3^|{XH!UNt=&#ySFkfMK#X`y z^B83xeUKt*Irx*;7}-Ld?!b}+(s8z4`JG$0a>3<9GQ#s{%rS|SI>?V-Mtn`?)ff3r z1qs>B_==y&(r+sQpcb<1eXV`yf zXZ2&$`){N^IwC7i7C3(1D=;02I2jrg5?N~%V%pn3|4~ve-iof<;_G|KOZZUXu>g;D zG4P7(1-^OK98Kaa32B<`_DdG;WH8F#5(ev(ZCw0m}y0VrF(W9L>8v+8P@fB`UES=V;>6 zib}x;h@@sL8w%!&E+`am{3(m=b22hu7+qKcQh*KxyAY*D$bDTlYF9Tm7Kw-Xm6iIO zv`rlyP^wz6ks6h))d7jV5XTFb=Dpf%3b)eR;EV?B=RYz!CGN}28-++N0#=LkZuoH+ z7wbrRbfbbLivLeAZZB~)e_)N;H&eT4hmoJ&BVN%s1k?>^7>e;j{D&(U){kGS9Wecjjf zdY!LxylH>>#(GlgN?P6z!BcEJx9rs~-Tsx&G-b}D5Dsn>zR$;Z=kpeWS!`Hfg?{^X z^?{6FP6CHQI9{E9HZ2k~HORjtWR+1 z;~a?obsmJF{`~yF!YXiX6q{jbT&L+N=;-Ju1D-}krlIh+x!K~a<8>};^#(Ue8)xD0mDxOOjDT)7hWwIfOy4h(U%b#-E{tNiWj-!`>vEGl{`diF%b)zA~>sc#gAUq4n_wqnfde0%FwdRFF} zH+HYz*x9Iw6y0^Ev?6_WHK=j29U$@Qy6fdsN*mfq?&t435Y3={_MXv=Ck-FHg$wVH z`+j_k4!fg6ROg8RFesOKqv)y9p=oSuc!3~>gNz}Z0|Np+-S=}7Z?e@!<6O%nFnfpm zx2_Ij`Xz|!IG>I;x9b+&I{K{bG8MslOheuV7tBWyREfXfw86V;km-&$Zg&-#&+|~D8Uczs#f*0R`|sXu$EeD7dRi{kbal5}>hPhvGksOJ z`r$=W$oAx`97Y&V>P;Y_?&}NvnCP`_?mqbhbtc&-lYhkGXeG`&);HWPTfZquO-;_d zn0X7=FBq+Kg#_|hK0a5~OScoF0!n4sMjS*JlF8aWKjvud>iUxRdk-h_`w>FR&1qbD> zq{|GVp$VXvVQk&hG&^7QR52ApimJ-0!Ff?eygdtZ53&*GfUr%BUNDv4U+!~><4Ap& z&sF*9V+W4NSlg&EpLO666N{-CjDwC?MC5vQJ4gXpdZlg9&UbYkxzfE;nK@Oh7~6iB z*&%bs!#&5J!!?x@8r}tX?FVHnAe+TiiBrSy4>a`(Xht zBjJymn}W~FW-7mndB5j%Bd!WIllQ9gf#l|VKrps3UTQ;}S^IYVhx?j5g{FBmQ7@)& z6Q-s%#+J_U@3!E*q5j-3zombaapz*2&<((5;GkXl)FJOpIu*;$+v ztx^BXGm%lSZy$xfp>QlO6&V%rp1pgIxUwmPqa=lN;y?bPz-!Q*HaJm-9wDf-V63RsvVa>yRp=Z`0+njjZGW>I%p-RT&CiYIIw8O?o*;-7tF zi-isCWfS9rW3xbKC`bnHYj$__WoZ_@j=gatwiR>e&COjQN)tOWBR}jR^EX^6txQZ} zppuornL)MMyD!|2CH!Txg*uC^-SPRwc?SoaVQO%7b9z_w+g|(aYV%tQD}dV+MTmbJ z5xss6uLd8O+Rd{JAs0g~UZ6sF%L8zhkcR&L%YPjmVo!GN+LeB=0NxV7M5*tzhFlzc zmEai@74-`F>}N4ghB_KwuSvmy2S%NM1UR&2P&?oWyOslaI-vx2iAs!E%F5hVtl_tT zEiC6Rjkn=*P#(u$t1AB%^&WhWoO>f9BNvzVDqO@*c;_5_4YgqS){hX;@=eUJ(Q!Z} z^LE^zN>Y~d>FUagx~3*xtBbO-;`!^p9f~o7A(n;?Pxj))Z~c*{2OE{Y2wch3Y{5kA z=O!3QB6fX4w?(nmkTJY5c(g_nl?4?eW0_I)UJ_qHB?iLLPvGfwGJbQR>-r@c8cO>f zbC}?2nWHMIG;&lXBgPVh_5*8ibRl!-l%>lh0flf{##wyL%uM6maC3!YtG^*O)GD6m zyHP;kZ&AGSL6|8hB9%c*aq~ekS8z2A;jARQcGeQiCL!=fX&K-1;@3Ov!SbMapdg`I zFRs06!LkNJ@j?J4uR(=7WC_MzN{lsd28Qnr!REp$!x`z_zz^PoqlMv#MH8q5zP{KJl;009T=x<%O^TU+G?b{vYZg-(kLB2K2i;=bWX!`oNqbtsLG^sf9Q35mX z%~YjvvbRSpE7Cq*wP0A>)bKj3hxm6lEX_}zeDknT2X+}yNg&z&o{P(semQTHuPv{X zQ4mj~rssUMiJtcUJzqa6dZz0xGT|Jdg9}rx!q4h#P9EqCl0~TW&@%Kk3V%u~$^MiM zSrK0ZfpsJ?y|PlId)D~YVSqP2H}lRqu4zf`ry!~7>O#1M^XHYw`eFYE56&Piti64I z=G}7C>ekuiP!T8)Vr)=kqkU1QP-qmk=_@>0Fn|F68M!v_bcYP#+?Rx1 z#L|qE0d+S^N{XlZDnQ9F0*Q_-&%i;N%H!M$H6b7bBH`{-aVGM0f!L;nQJDNrz5 z@{a&+Re26c6D`;UKwT4fD{#pxyfR?b~ndwwg1m-r*vH6?gmG_|=JYMvw+^ z!yxbDeWqyOxjKCKG6@W1P?SM9gR>wER%A~f;}Kz}y)fJ}N|#}Mv|!8m(O|oU5Rd{a z+=FD}PGWklu3|ySH~?bPUKnO-uH(Rj0Tw~GP#1oT<@8~~hu2v+SFt;dIILcdN-JCB z=5y0W%HD<@F!KlBBdia-4;Hc<+Y_V%e)|G70@^n=Hn!Kqu2y;?#L{FwDj#2AN5m$C zrNK)}9+ccF5^|AUBf<%mPGHsGb}+|ViZg}|;;|7+f42}~tbw|~o^d}JS>nu5i2!j% zX)3^5ID-&}{;I_Z+VuHyN!e_X=Yo%_F>*NF_2w|q2n`?-w1+UR0Xyde7Z(ncapUPI&1fdhZOFJfAWDbDs{wikY8-bN?D|eRsa}m+!VF#)sN_GN|QWb?m2T@R# zI!(42Gr<=W7I#nvtI+HtBb)p4hmf_1>_}tUz|rC1Lv(cOtE-q!Cy3v}F7Y^skblH1 z?gG|hSPetW4yMqLH#s;tZ*{!$*0C@@6^%{~x;a9G+{6w5A$a-V*_d=3j0MQ1p-g=8 zRe5VHB`kiWPyS{5q#%WH&hwkJJ6*mMzkknh?3l;OK!AKGBakQiJ9lEe%dXMLp_YCi zV|exIH!xC|8{5hD?JLmY!B0jO7N@m=(xKn$ZDhv%RY=i;YXI`4<(J*UP}jf+0A&bD z`d2BhacBZ#1hJEi%m|cJSm%5dA%JT{EET(1C<89MYX0lG>)Gz*73(GBsIRXBxRdD@ zQSh|T{AeM>bk4bj)3{`L^m zvuKDAI=ObB#y+nTDk|l06Em}s3)4cVQ$g?usQ4@}1$7E~TWn_Zc;VCcg^**X5<72} z^G=(GGtkc4oFOO~UVV7mQ8B&0w~&T>O^4!^xK^U7cZ#Wd_wFrmTh4-8LOyA>3YR(; z4Zaa?N=y5+*%}qGA)0G?CgbXJ|8S-Ex><+-Yo`%Y2uGWYZV$U3h&>07&JNOtd?Ap& z+uI40AE?X4g#W*rBBogMdjTSyzMJm9ebYl(c6t-}BogAG|Ng~h2uM09coUy7qkDX4 zNVYLm+^lyBLbOPkB=|{L5F!yeySfk&F_DGPF%<0B@f`gpAi@3hVF#HH;1dfAoL1;n zCdS7<+V`Mvt08=uuY{MO{NFCK7V|(6@bpFHF*2DqKf{UZNDJP3n=?^V@z72_pwma` zSbBTF2Y!XvT59N@DUl=)Jc6z$D_6R&{y{Iq6eDCNK#v9h=mREsRoS;2>D1lHL(I1d zOG>)Xf2XU5o_u~>Ar}e|ByO{^4m8&jKMf#^oxj2w03e01U7xr|TmaU{eRD=G9Wp5a ziaN$AL<+YyjCLf9p(hy`afZ(dh#g6Gs2@`1>+Jt@9H#IGVvGY5@B>g9e?LD8NiQr{ z)U?<;(R==$ci}Ia^O0qvekcnjZneGmv17w1OtCz#iN+5IH2i4pgh_Z@oJkBG#zL?Z zOGlo0mXFuH@_JSD6OOf1uFja`4UBDIn`9PhlW}p-n?J3yYqPtr^dZ96o!yn zKQt-(C|`I@cxOH^M)O7@&=T2U=5%|MleC5cOUiRnffG>GrQPK8%m=~iCQ(ITp z#K3@bFQNCJ5L zynp@hmztU)m{JJ|nV6Wk|817X8=#m93H#E1ua#ZF)d)TjITG^Uu)sn{7~dx>tY6_? zoSm)AcG&uzmC#{;Fc8fBO^9@qAbNfmH1x$q__x=AX$eo{bQP{I-O(O9Z$uz3F*FqT zHjW>lEmgCr%@%6u5jBHgr~DF?nAK@knY626>W3QQFa-$?{$Yoj0@jpf7laKWz!pU< z_ck{wD=3<>Qd5URMEd3y7Gk^T2)*|G0V#KKtd)QO67sjJAVXVU&mNlpGM_G`3gXK% ztF()gqu_{i17}Pd&C)M_ct$kiG@yc+fau)QK7cWMphz%NX_|R0W0jZBZ~) zYUTkK#EaVFmH6XQHk#nohfa`-E3naQf1~gRfrinAbO#;+e`Ig5E)#sJ%^Hu;2LA;6 zj-LL#)z1^ywx|Q7O~(*T7%JHLJ}D_ZE32=%v#!3%qe1dCkxR@+0hBfnD5KT%Twk(< zSr{S6;BI7YNQlzSn>T?j!2tzsZ*v7}U~ib5N>b6fb`3nk*9C_bYE?Y{&<7g>-h_0v zZ^#5e!+Isy;BkVza(|YqpIwO&9WW6TmPlVUV=;wQERjp3_X_QOa4DZ&+PS&u@MrHD zDTzzjyx!s~eOS^pi=F>&k$+s+y8}T}PR2mRP_rDKc1k9Y8&U$i7Lx8rkoY3lbS40f zta<4VjWCV?w!S{kj&==S_cn~VAokL{UgYFh7W1Btr(*Yg$eDv>lh3;?L2jOK-c6J9 zDWn(8FT)ZHY8~>4|eCYD;H|N_S67E@Ar(V2h=UWgCrM;4q0wlujW@O0(egRSZg_gQIdz=x&GUzg z4$1-2aas9qeJ-XvAR%pB(jvO~?Ma;pI#dAd@Gk-U+fsfOuA9&~8W?O_ytx64I9sN$KhFBkzlOrfUK~=ccofp7S2SW#T`OpsnWk@hiGV;cS z5D9n?7A9QJ#vPvp=Y8l}>uNNqiqH&j)p^3v+4}Mu{|RT+6VuZ6+(a(K&u%|Ko(A0X zmZmz#DR~U(k$E;THin@<+5y)9f#@p;a0Y+i+O^ZngEug-)cSn`N5xMo)NcSLJ4C=s z!Vz_a^BOF(Tfb#vfQytNn3U9f{>%gO1>H>o|A^?O(f_W9>T`d4O?x-WisO}un9BYe zO6B|#vFo?AwN(z(vpE-^et^iu8Sn@kDNc%sL2cNAB;({iHm|}G5)yoUt8g4+GYRlw z_8+)^p9n=ja`I}?9R@cqmJDxO5YW+D9*pv%@X`bXYG{}QcS!V7>c@^hB}il;4?~3v zBw^zdIe$k-M?>jI6|V1tJ18MUJ{327PF@YXVIy?duCL;>=N>PDxdadDtQa}E7? zK>jJZA!jL-_`W#?oH$xhpF*tUsRN(>)1kmx7 z9Z`#+#pd+E`crV(Z*E4wCr%UpBjJ+Np@Z0)(3D^i8;1oY1pec}p^pONm3iYAY1R5; z0@Cmyf9E{!+)*02gGO}V&zhT#YPPrjn`GwyeY6xB>eoRpa-HsW9|=(kS~f6q3DYVx zj6fSNrbJiR=5*S?O@`h-;Oz(enL|p)@TOeuhOlT+X%3p1N4j{9>5Fne{2Z=B{6KDPwkyJaqeo4)<|#6v70+V zn2p>w+1kj95$){cEa~^JIar+^DV-zw6PONG zju7JAyHR5iE)!%-)Eb~?%F2EQ*!b}(6s1JZ>8+l8d;gf@Va%1ZnliRS1J4CdU!`Jc zyEpMsfU%gxX29ni_>kN~x$u$jz4%~1t3qyh%0k`+gTnm6a?n=zz71NR+C$XD36D%9 zd4L!VbV-pf3U!R~y@N*xwH4-U0Pj9S0L_*Xg`atGMM8s#KoU3tSKe6X1-Jst40P9CI zl#Yf*+%XE(HyXT)DF`roAz#O>F7{K)M>*~)^18++C(lJH)<>YZLliw|irA95xo=$w zH$l?_XaT1_hKS0k!OB~vgucX_ibC2k;@gq^oKGJnbNPhgw4?X8?B5me+MGD(2OImR zgzlV13n9zgA>w7 zHwtO#{sTb$fv$kai#t1Tciu%D>=8gi=%y`s@0=-kEhhtKnECze3c0{7UcIUT+3gX5 z*!y3bja9ezfsx{p8Hq0|vQt481W3lmcWdg2FxC%|_+IH>1b9|e`s8c=-Qpl(9?R0t zvGh;_$08uXz3t_#c=k{x_#KA>E8R&Z%cthHzk0JHI1SjImg2C z3q2=xv{OeyT5{}Exo7}~V*>!qqso9;nhLsgP}5plg~B3#K?)SP3T6#zNz~gg)-|3H z@i#;~ijD9&2?a%8krQgHqEAY9_KP5kr4=5IAmzPcG%VE#KmNdJlS6 zz#Zd(c8ER0y9CA(YF(z7W6=A-*bSuI7_+cfyEJ$QA1=Ty1Kpzn#{rmU34Z$=2}Z%_ zsGEz6pTGZA&p(kI3I#fwh&4YI-2kOVXLq;nUjm8crsn+>TKZ_PY+@zdZSDUiGt_Z! zuZ%ryE4YjfNj@p4012j~N2eCFs>g&Ox zK$C+J2Dsnc>Fl6S;)kKZgIUX`swzvNt|5biguBT}^ttH6Yw`0vNI5og9P){1E#2N| z-%(Hk>#k0w)+<%^;_RmLoW_t|*4 z$b9y)y-qEx{Bfjo!l`|>J=;q!yL7F5!c!wV1DkdlA8&y=qf|ta6xCs3YLmTtuHA3A zBQw%7er0_#r*Zto6>?yR)BAucJe4Yk3^;Ity@d3 z<*38?qO3n#t0}@W4U|w6V0K>z@?+8fb9v$De9Eb$lV=vPXkH8Kj?AIu;~MSZ1FAH4 za&xzqNc-K4rc+8Kw}wc)w)eX&P0v=|iFbQ+ph_Sn=7zr8LR{r0^Y%-tF0b_&5reh* z(YZQapGWAl!=FCIN$@x}wiLwH6!|c#80R}09n(t~>Y~%ve}9|xy{EHS+_khT%}$$` z>WEw)?D+VN^vHa=4IXCiEoB9T9ONozO^!AtWM^f8GwzITlk0{B{TJME1Gj&w=IdUI z*TI(4>S4o$7g4>ndon;p%qqb*lS&t_muDrXq%>W*k>KUF*;vF78{?$MT;q0CRgp&S ztkcL;)Ar`|N{`h;ch!fA4A#8b#Q)ru{ah=r!bWzA&4=a6a{)uZawSGpI|su#7{K&B+IG>=hHH`pi}-!JS( zZvfx+%@NPQlVmbzhRg0PKyHcO>$}a3v`B7lLa3_o{P?Wahi{cfD=HRO-BG516@f}c zQ^MUe)=nv2yf`uO=HKBl^x+cgQ+c3S2QYimOP0z(H+t)=RzET{$Yf;PHzuCdd;P7d zEZ^>Xuukc|R>i!za5B5Rv-4->q*&_TtM?9^qG;GFr@^oLc4ahSYf^c8F$#5;*XmTu z_NHBh!701YmU{=645XLXYU!WE#H_Vm zQ!ehE5$Si&L;5$TzBZK~P(5r%<>I%OjQ@`d;I@p(bF3FL&_b9+)H?udIhte0)NNq3 zvS5k#9u|fGFmT&1mfb|N3g<%vgaY`Kzw_;IDujeH5dOosL|J_Pb8GrF-uTjBSnseH z?~NaL_~EhX>in5EX;;2UIn{~JcY07$WS{hxv&mdnAz*?7DIv>l64A&oAdr-h*he4}pV&{Hqi_$(sxZ)|(uOEF$ zfybhUtEc=%P0R|Zm$-Ntz#rI@31{1Jr-B~nFSwB|i2^DnEoV6=pfa&$@a(-m9IPg2 zYEp9a+83cjp6bY9=jEL)#+F~&+Y=>&5A`^<{-{a-OA%`_*F{;s{xf$q2U_cfNBL*^ z*5|i;1M0WN-JLbR^mOKpL^agMK0bJKI+A1D`ON|DRBx%oO`V$Y)8=6b;u@}nWvQ9G z=g%x!D@zvt-Ksw5kZYn{(cATiWiS>LazIv*QBii?g}h*jgXk_Y%mi^)>>2Aw+ylpP zHFNV!jBUXOvkiXz4Ygw0oR{B)D}Q|QyqErT{k_D5sadkz97 zw)^_*j)Mavxk!*ho6vCTO5`x!9;{8wgriTJ_kBz06QF?c#cfglx&(lzczPJ#1Ea1o z2vKt#|B;H7EYEcB^Vh5D7r>|ibf~MLQ2=H#eoA-oE^0i!Y?dD?=lXLiMYi2)?81T{ z9rj`IE7rZ+7^kPMrJ}9jF>z%)I&YYcUt?nKx)Y+Mrx>*-BW$(4_Dc0)R{G}YLSSKxP!A;z7N2Ej_|^2w}H&((SZ0AA@C6SsRR zN>e6Fn8=8yoYw^`^RRpoH}T`80()8;$|9`K4x2(!X7|VE_MZ&O#Z(8jRE|Ij_DgQu zHZkGocOq<(CbDBvXRH>NBM!*ClwuKRm1OWw%E(Bw%t)p$@jk|P3NiP70Rc)UUx-;6 z_4!`jPEIc_-q?769mnI{pt5i??cu{uBA!1Ef1xYj^k<`VL@7Q(GOd41O>uqg{P5^E z=I!4@)j{>Vwzfx)#%)5BGah4b>Mjz;SML>DrgIM%f<3U0S%Rf@TFS&^h+ruNuY8oM z*e$jz)@Mq&Z$v4_iJif52DlC2#6C~Cvq&Grb4*ELKXb4wAgASkMVl7GAuknWR zfgwG+c;&I}#W~t~9M#0qw?!Eh9`3=Pmf*DW^D8M%i;KsVqvE-F-(+OL5AM@wjq=9Y z-E3L;(gn^TNE5Ese!Hr0m4bYKFd2DRAjRFYdf|)0|>rf`UnK42V7*G};hzcslfetSSp} zy$*44Cib;+=iD~e7U5Z>jHR-;vf^@*fivV1O8ggR@1XF|R8=*sNaj&c12Tpgjw*E5 z;o%P5X1ny-%k^gkx_ehQx7OBN6$melf02yFPu%MRG9yh1cBZkz3`r57(^Nvw2AlwI z-&DS3%bXMoVU=7-qS-hin5uqc;;4X93yqv%QOHrsfJU=YrBSb;C12h=+^~-6)#76O z2|J&gn_7^WUYweglU|Zm2q`t%;JlQY!s(vjXujkDYSGIX1`d4F%yexuCC}#*CDn<(0%vOLktHGGSIEl1? zfs9Jn1Rw%$)wbJ`P~fddvB*XSywxCmFwGvkaPYuh6YX!8lrJk^jyq#ql5s+!67>3_ zH>IU1d2h-$b&%&{eC?W(ZST)F&oa_>SBg<>Y!=N8Uu);DH)o^re*8}0x~rAW#|Un` zBIB0aIT#~1&%kRQKSOA*U5S1`QwNP z$C;kutSmlF(!D;9BO~#e-UCb{r+TYftx@37K)*8D1r&skjkCuy=wh{Wbi6mI3kRwn z8eu_y(b97K+-w;bhJ~1g!B~0h5Mi_65b8;LDt3ww8)djnIFt^$xU{nz!R1a=DiQZ3 ze=V%<^1h#u5tQt?>J^hg+~KRE0mq`kdgnU6?&(~f?#d0xfZiEL1kMCh4ZIs9sU>q5 zg}Fu!&`*3})Y=$#t_bNjLW4R~exQ!v*`e;ne?by@-kW2`j{}$l%fwYYKGx~?j8cGy z*Ex`hF=PeE0f(ci*##5&FXjmzpp|N>seQ^}r%BBR@DDa=iXlDXg}>F;S6v|#Q9Xq> zJ%W1_JE}CITE-p3QXZ~rijYb_z7fV11da^QxAke*QNA(QoCuKIVC`p@e>yfchIWJ* zl_!=D2p^n&WIj{?-k&_N$N7ugYifg;a*cPhcE-lW0j{24lypI|2gcJtf&&O6t5`8; zfwa*M{Y}wUOs^SS{pGt~@$zL%X!=N*T<*^<=-~zv@7Z^MEmE!PXK!yutGII}p-iHZ zsU70JHd}1|u`g`7VyVkI?0kiD#OU{zX{pCKIDw%g=Vp8z-plT{vbn`oge=d|PY;6U z_dFCy|0xnZGC~_xGw3W|R9LXS;cLTkuORow=)!{s^172_`A*9euGC5`&NDroEiI>= ztfb}5>GJo*q#c!Xwn4q5P*-=7Nx!qDyS=5Gw2*Lh(mXBAo#`1zirx#f#;eIR>^W1pKE+3{8tNDvwRFaDDjbA9bT6*;it_?fZj%%O&_Kr+ug?ZqJzy7s*$9^pg zU43D6*PmL3D|MPzi8o{sO!;{Q?v&z{4(hq}41NPg{|B$kl^=7geqqiRZYwAhN;Mz- z@}+vesZUn=zBA9jKhnPUG&%W0cHLM^SC@)g=Ae#^k(KL3&JGg7RqjZ(?E3ljM6A+U z)Aq`0MBUT3BM# zJNIr46BU_2mQQ_;Pls`k)Y<1hrjp@Kity37v`3KQ0?W<-JwLUvJ?CCHKj<;|p5p7W zDaZYwVD7S)ckiK+Co)=$2i{da*L#seeV~*=agSRZQ*!P1eX4#Ld-a+Q_I+kh^pd++ z@CO0iTD1)jJuY(Nnz?aY6y?tzTOBJ5kHQjhUDHJ{8EAGE)Kg87B+uPn^yx4p) z?{d47^4$Qb#Y=a2jv0A)_#P@1{X!=?|AT5hSgj(RF(#2q@HMMXi}+oV6^Dh3V-(~^ zwQ}?o_61c@_>H9>(XIuQRy($ec@UHj@Gj z$1*Y$!zuDFw>T+92J}ccQpvT>xt1rhyw~MZVN{cOCMA{M$)S)t!>`wVNW;Ekx{W=E zDmf!4i-GdhE}A*;<#InSDUk9KrzaE3Hgnedif=5^vojc^hIcn1?)Ny?+j7zK{Y)54MRg^TiQ*&*K_)-~4+6SMQp5t<@^D-r>GuyRN zKfCPlr>Au-vkn+~z)bPj^eakns3&aIziKhmeldpbQmXpHoDvpJ$glZFr=$_faUdLsHs1 z!^L2-LyAn0f;|x>Y-!`#k^3r2KPjqEdbJ%=wc^S+v6qcwUQJG8muF?mIPoG0t9py0 zUc0GwVSFb^ngiQ~Nc{+v%Kj$Gxm_!lueq(S^{Cz&>r^kvdXr%kU}B^AIwQkRt@P+G ze%~V#Q3r#51}6KR*nx+^cb)$Be&-CUBaT@wBTfXd1^OI4z`!G2m&+r4AUm13Oy5pj zoyNlO0$H<=Qp=grqq(%l)HP@d1717H`5Qt(TpzwjA+=}U%4SA}e?Wlm)G7A8Lf4NN z@TuA)o|O}E)KE3Kxd&&Vx*Tpb@gZ(M6%Bl-cilUjb42qyKT8{MAK9zvUgv!Hu?zR& zsz>v!yBA%LycW4Rx(lz*p0l0o`Z-Wev%J-wdFcpEGNV;g|EzgE&!qipOC1)f+hTEv19W7>j(T^Ci4MhO zO=7RjNFn@7 zmw{(xg4%?mnDo}f%#3rf?)UP0olgXEd2Te>M5rmXsB7#tB|1G%d1s>`#3H7xzu&H? zTe|sjM;wcs_u6IEh&h4lH3ilLE~P{9@0=Q@yxig^O``{i2TJzH)qMpIOVs{1@y`O> zDjw=XO0mx4zvZ%Dd3~GGMkRoPCh>?rl@UF5k6orVEe7mMNogeN8cKm-O-->_)Q9Bu zTrET6f11Mh$LEJFd($X~KY|zRzgB|j!#Z7mRCu^i`Gbs%cnOcS+5u(o0pnp}j_xva z>()9m*80}+cKR5S|SygA9qNs>>*vgQS*6W*(|y`d90AWxv;Za zo|9?d(shZPeJzsKMpQ7)cn$$Y?@ z;eUeTTl{(JqV8*IYW~_JAQpmn25)pwUTI&hVRVNfxsA2;jT|F6Lqk?3GB6Q+dbm+^ z5&o_SOcpi%@@Uq5^c<>dFgzjNcxFiN9u;%;jv0o37?LPAMcvqkl)X(FP27}XPlqBs>9!IcYbKIj37ZqwdUH@CMo2|XUrK_;&a`^P+l z9;`>_UBy3G)0$XX3sGed<)9%1001q0U2y7`c{1Z3CRMI4RFbHbRuI_8j9ms6&N@yAU&)y`U)BFZPbQ{cK%vdcW)%xTq=7Q zZXGPOyrh#iP?rojqd9>ix9jiE4`C-pAiJ#afhP^X&s1CD_AjFKSU{f*4Glm$A-|iM zb^k(%&26Ha;ba3O= z=Tt+Q_ZPvvCvzwTh6_#}q+2hpjv|YlFy5c9e#=4zM@W1zd;F#D)>96D2{#-mmha!c z-}H=dTNh|uxS@!QN2ni_;Nl6UvU(vPJ!E;EI+gqSb?xs+CY$YN80H(4x!5Cr?QXw^ zNJaD`!i~27-$UMUDLnt?M;{uyY{dv%6g@pcC5?E9;0bk&UR2-fvy}!~S}U1$ z9$*=`=9AzTvs|iu;_u2{FF@g(Mn2|XQ~bds$!F@)f$yA)ZyzK^eQltX>AvVP?Xx$x zFsG0Hnp^{)G*zN=^A4$Ai;Fa^d=hd=`N2f&LAR@uEGYx{LgSfJ^%C!!OO6EIGi$e< z;UBw^ZN?btM8YENLAFR&Gxg!POPro?tZj3$oH=fQ=f(;!PJ&za*!*QPlK1lo0G&NO zD_X|IohDj+c9SE=9Xf2Rs%zH{x+T{S@VCi~t>peVB$1#@BNyBF<#$i(@G{(RyEQZ* zux3(+KzA0soui&Xfz_c{jZDXNIAp*$(JHSKt9t(Vb9$u~iYlUb#eJb%r-H?2^ z0=MG(Q^^rlF))=9oiYmEMagZ^)Z)F%Oxk(8giql>f}Y>wBp-8nZl#vQ3rD*ct_1Vc zyF1&zJVfawD93p8(*546K2tjvNe&LY3r4kd;?n2VLp!|$oml6hv|aA31XI3HB(-II zJ-R2V(ot`8Y~KMPHPNZP-)tZSBB*&#X%yP^OCVAOsmu&|XWc(wcqu0HEzy$$VioRd0<`s&v_~p@Gax@Baj(g+V#4R2&26?0?I`d;*ad zqFl1NQp~?RnGr<&J6R!Zt?zsH{oEh;>$a zdBI#IB}`%h6=UGePB~JhybEt?k_r*c7bGzxJ5PB7gEOOZ zPGGocXGx%Ty!~fZA?frC*I1xxTe+P!QdMIdf+C#pal}Tlr+j zCigwA?3f6u;>#P&tVv316RC@8uOT?{ADYF9VY;JYGH*c`1F~uJ1YtHYvJR z12YmLr$81ml~S_n8a5SwNEKB~64f58)$1Bzc zml1uy_aV?C2*)-K+^)@S;N&;EjsgWZ-KPiS)6VN56=1@hyEAgd%Id_q zCFjqjekECO_OAHzmB6NE5VpZdck}QEUD^u^;`v=7*S!-1jh3|&2kYN5B}MNmDH+yE zejfHRv0R$8@2a1f&C(Qk#${ES3R;Jr>YLW8ul0EHP-|Yj$Ks_BP8_FSm%#5TZ7rNe zUZO61kj7$*%}?sM;%UmH)6@*l+_!cf(_f$!CzMA&%H+s$Pm2D^T*nU!jd@C0MoU=` z%sz5QuPj)7S6AtSId0ITBaZAgWXM{tSUQjuQw# z=|LIDqrid&@%z`p>X)>-7tf0h_-u!(xq|%$03Il(G@TUYz#uflgOiW2hrknDsX*Nz zg}`(|uh@Y=BDK@`{~y=^tU*RNu-hw^&M1Tn+jco3oBR9nS?5v@AbR*|6)yA1hV%eW zK|7R4$WBW$Ylvy^y(gh^`{)}kMO0E%1D6yO4y#WrG)We9Pvg})JTaDdQ(fb{`^p?j zhZ*4Nml;nNSbS}zxP9d3|_V}Hh2h1%fkX^KHO z9D#E+fiX^pb>H` z$@lNCgjL=2LeQzy*4gF$mFR0QtivXa@*HH3?1Rlhw%{@AXWzvRajVEp_7Lu}UBzk| zhXUcy2*xqPD>HAK^P!G z#RcmpK2A=vM{hwQm3~a+`(GJI%3l8mi~wfWu_Q16%P?Aj4ngy!tm=z1a5MMZ!nW4j z(gN)Qtffbm*I`AUSSlDsJ;LqrasBvYiN3bBWl=ZsBC@;5zYfkLz!!}2yU=5TQBb8D zt>%iUDDZ%X$txQRO~*MnewqKf(eHQs_lUo7;sZjPLtw@ISNaMm<*@;&7qacj$Nj~u zib@8Bu!aVz%yOlP8_u+APEB?m5(eOb!haMRX{T;^$aDzHEHxEUm;GL*2~9=lR}hzn zb%00UbVVnOPzM%~{qI&YNK?Un+Q4=Em@173-Xq}OC)H50eR*_PICdIBBMhv;Wrg<( zUeGshtlu)&>|R*4z3nkM?*cXPh;u1?YJHhYj`-VSON2K+SZkEqxq{uk6A+F-CkuUP zan%6*1qQ-$<{0{~@O?y@rkt=<%N`~q{FNww^Z&R2!WCOmH^K`d4l8&ZQv{Q z4k$jL39xn8o3*-WJGWkk$AY~9gDh}RK1wdFZ(_4R4UWguCU8#fu)iwo?+_S{=^^}c z1<#&6+<)aFe*c%l;A`O14|;=QL9l6#JGTt>EqwT{)0oOW0Y?f;11Vm5?{7=De8|IxG8MJrMBuJUWP1qAlAXAv(I)w4U}P^KZp)AspCJEVpsv5i0Nm zVGB%HN8^jG7g~N9s%U7mz`&mNpCh$q_)GjqV!E85WOvZ)DFckZMsTCzyP)@da?x{R zz6LdR@odF9lglsf$--CvUa9#V|Gmtj(lpihJRk?dNxWivYaIeLcBZA%*sAdg6S_wy zCkX#BLV#v?5pi{CAFC24*PQzM)f77iqzFyzmMMfXfcJsjjM=5!JES3UA_bj*3%`bJBC?EmP%I zC$Hs`;J@JeIJ;YcjD12ZgmG?P-S^KVdu$p14DX}Vb7xcG{&Z-;cVhRZ!&^7sxsebC zQ+Z5$VP49sU$%n9Nf->k&K`_fiH2FQQNcPa!TrbN(`}~sID#^9(&Ce%@ulr{?q$9e zsXn(_G-ZxW8(SaLG+03&eK5HK1wy;bW&WkY(_3Yn>j{gCi(V^L%qH6CkY9mra?!^2 zT~v+h){)`2q=#7N&Jf+r7>NHvW@qQupsgY;K|OOuiY(2cLhw`O%*CJI4IG|-8RZY1 zKSuURD~x|_RIA-7?&9}ZX|^7pq*kYtDXo*gTaIDGD81b&K%t?rhc$8bj*!wpVrdPH z*E?d;>|NwEG*Eo5seBcnNUJZ=i%?q%rw`D3yI=a1(%ho>x>_*R&MqFm^H8|$J|fo8 z%)*^F%FEPiSonCgo$%dy?Q*JqU2|E;L z{fUd#{H2rs!qmrwX2U(h@*B8Iy%(`zOf&{i)Zlz+icRr zLXYiD(2Gfvo;Es6G{GMlSaL0hUzO&9io2kkdvz2I8L@u}-;Iw{^@d+t>vJ1uJ;R8pQz7G=4xwEoICoKy4_qv z(VmA|bmJJ=&Qj)&1Nm+g1HUL=>G<@cDbYJnAf$!~vzLeGmM-6vaZuxU8+!ly`_keeXmzCLhmEUf%*O z$_-Avuz3RV;vcPvw-&Sz2#3b!UDU2!+gJ4-S(8np4ECHOOLPYr`wY-yw+N}yoKYet z-sx`$n0x8(Uu+HUl<#z={+Bz2eGg^Ltry>;lXsC)x?{tEPy;-PcOVv6^;PCPNsJ|T zrL@I5k4Id!#bLMD8|4L|AB^(;;m9-d?24yZDuzsR*& zeLm@a%yETq?Web2555aF{%Ty5pSXoGlO`a=;Ou=zdoDIVRL^%49&FNC(Yf^)={-4H zK{mwXZAgyA0FQ)5s`0NP{`rI$RTOVD0JiQJ*W}BteGdZ-G~z;A*2BeJU04As8O>^Ye3a6OvRSO@q$~?3>_M49v3BPslDU zebqm>XFqvxsB=K^Cyu%=@#>Gp_=U62F=Eh8rX2}@6PzWkAQT9wD5gX_E4MdR7ckZ( z%6!)Ph|8X{XE}f0clVHf5tu1p6*3zS8H(lazXS zGPP_$b}V^nEw_sH-x2Leyxo21>+j3q9F(OmlfF5(3n{76L_T`kUkc@QyHMk_^M&Il zmNH^{Z;|#AS|OD@%u$?<3R&!{QlXJ+$*--w^q6lUErqAP?VN18Q)RzbZ+tZSr+5!< znjDeD=Xxq$f~9ZQgG01vRnfRx?`e;FEGW(+Kv6}ue}6z%wX1%l>7;!vQ|5i0OJsY9 zca~)N?$mF0TH*k;{e^KdI?%SF%cht2%Bf1RKcFll-M!Bxp-G+_<1$}9V(kYk3O}^g zgUe5nEnbJJhAYU7+lac5%EaD6)lcoK{`;MaWzjCuYEydJnnf3m-=qy-@v=7&mO;?$ zL1I=QYP}^+1XRmm=o0!LLa*&8Myka5v%3vIw85v>?`ky(cyp?a8 zwFqSvWNzBrTMgB7%`>+i7zCG8Hv7qZ|fp5*3YSAvBZs;+qWgv#-<0 zeP2=2D1fK;xFcnO|KYt${*>}&xcx7K8)d(Le!~^iG-|B&UF3SF7D;Dye431tpqDqN zqMRyd23QJxo}f(OP_S`is^26282ZoxQ#bF5=!&9|mqqO&dk;v!ZiU zPLmf*cl!w+PuYi@3D&sBP^ zq%bp!ZAAA=ehQA6I;2wC%NN9!+B!H7!%HwUVJ8|}S?s>*fNBBn7MScI*Htu}@B$xK zjwdt%uo&=v)k`QI4R+t$KlTqjreqTlxeH}4!1+G_jn7#Az=ru!+A9)}Kth7o*!Lt9 zR_H(c9z5`vucm|lkBSrNe&*Fqe$U>vKF|J7Zf)la#aLNc*~A<8>N7Hy+{&lhvuyiw z-1yutjE*2< zgJp4NO7U1__Sc;Cv zv9uSB1143P`l@DQC7uI6h7-2e?Hu*iy(+hRNoOkg#k!7`k?v0wlDzvVKmFR}k;c^~ z$+E3C{pI48M*6CTA65AEbDNHJET=~NKxYOe^qzy9&+V)bX~QVy_!>-Vv_S3WV^bs0 znN?sU5tGKNooli(T|np#OvJqp!gz)3)Ge@0A^(6ME>0NOQ?8@9@b98_1Z@u;0kp1D zf|lrgo!|{5_e|sG_QunM^|A`P@|9098Ygk&Wp$VP*wzj>%V)Y+jNh$TbwW6J3iI}m zQT1>VUu{L7Nt4~aDho@?dDn7mkyGo(ss!LJFtNOj+X=r9$KEI%rZ98FksZJKLaPw` zsAHFWx4mR2%I~h$w*6sU>Adg z8$G8b6S)E;*EfC-*YDq`{*C)+x8kZ6IqXK)U{LTo>FY$-Ch7ilf6?)X>0`!iMG)hn zs)vo)l!6VwBFq4O4-TTF%61b*KMe0TSk*}4ft?3|3kZkim47|#|5f@c=4jnO0?bTL zC!mSS%1w!t(PB;+^}{8%2LQ$-r&*%B-C_-DLRjRKm`C9wm0XLhUd^j-?Zx8AXStu) z6#mHl1CqbANQKet@w_$7_C=^9P{ko7UMA3x9yPX=rDYxVpKsqPW(I7HjR*0fa;L(W zZGYb*gd!13SM2>?o9BfQ48%Zm5K7`O1a+O#Ro@-TQeYe)FU~rb?v}Q&uo#=1%yXcy zR8}Uim1W#@4F_mW28cnHDq!m1pk{R0`iA-S_Qc9PTU)|ZWWcb^OigoalfjquC|LW%}9eQIRnd?>183a419{9`~%Q>>oTlzdDWP(MeBP zNy&6O5B(}eKCtlZE4%mckPQpf3RWxZ42v+>sbO-X_^@cHkSxNFolHUiWFc^X47 zD;O_ky#v<^M)*#mj9|-gL6K!=2YGP}_~MFEsx-&=gfHH=xyH!M{OW|_2WEP8xw+*c zg6@Kx{PLwsxY_NC1U;&zCZ9n?&$M%FWxEqn%52biqq#w0fOV7u6%`)KVUhp41Wd3m zNAeV7TWfl8mSD`2-OiwUW3P_@+ChxC@V~&d*75FL^oly2MvCF4+Tm+!>#qeJ1Z{qF zcUwON4RQY(ZB8=R)M}<7J>Ey4*KaEpUBrP~D1f4>cenSD`-%$sMc`C$6xGbs(a_a> zWXDMu^%*Grw<%S~06CiVn015T2Cz0b5%o2|5F=^M^TcJM<416bTt(wqOQ&CwCQ8pk|On~1In5-yvwRLr0 z#K+&-(o&6p+?r9`%=kWv^@ORnct3a3m(Ct2?{8`im@SxiRCTdt0`bF9$b` zBIO`BFz~z3G`tXmV>5vdoH`YL=!?H0EM5qNU2HngE6AFdysQ=`pfR;8|3mps%7bKx zu`8mpAe(>7<+b$v3_CkJ1XL+0@HNAhinEzIo0g8@ns}zv&-^9{Nr|y<4ed#mU86M> zbGtVl?7kL$;2^1oXMIH_78JT%&q_(0FqlY!NQ?S`l{G0b@q_!N?$*}7-_Ff~{0v3X z@X*k&*gC?6TtECDE|iTlN<5zb$J%?xQ~Ce@0~dcD8D@Aq^2{PF$Vem}QcInFuPb*^(=*Yo*&jQils z@Uemr2T%t4fW#Bl63UzgN*4_+t$+P^LxW81n7N6`jcFRaTkp^rwd)#M>f_}*O>bII zJsyEv6dL)(%kOR_H|%uHe;yk0ryak*#3Z`dJ%lz*>l_#zEiAZiYnwObEbF~?7nU4L z%PB~|apkiBY*G$YP8gk18;v+*GW%IjKC)T(bDl0e74BdR7z-{^lFB0C=+wshU5 zNE1)&SvMcH;L{SZn-rwn@A(>r1V-?GHNSgYbgV!gB^LcGzt#S&!bOIvqGFx65^^p= zV@5Ylt~K9K#W7EfY+`;WmF;y1bqkA#K&6cvRvwVTxCw;@Xzw3`AjJ03iB~NQ^1C`O zvK#DeuHwq4mR;Ou%GrZERlSkw4~aC$a&9rRu>*67U_NJ_w?- z6Fwp`!DBuVWi;o@a>#F*Yby_)$h>f5h>w;(>tH243?y))np%>(fw)6^XY6S~HfmOg z8|=-&vhHTvkFVPn&Jr`g-L-@W>a5D zM{TG)$m=?pYQ_&of&)&rL#k&jS8h#lh2F)iJmX;>w2J2oU2P)ucrzBj_B_rZSoMNl z45op}<%wy}0X^XK`=yGQ5oAC+#d|ih!BeiPSKla_U4;LJPOv%SRH`QqRJ zEd$%UCQD|Yo`Qj2VopGu>6z-jQClM_QwBqQjrpn+O!9dSumHe42s;a70j~Ak8jpV< zv$}BQCMbT~3j^bku}=@uSO@^~3gi0o=6zm!)fxUc5kwT9*7PQcFx>HK)Ge;j z)9Lo108NcWB?r;iCQJ`z#dk3=QF3#O8p&9J)6yH$RBRFaFqX=JORI1UDn$L%ybbbN zf-dhvbWI_334Nv;PC!F2IyLliGR=Lq+ct)H6Up23imjus+E1i)aMP z3n7H(@QK2{(+WkAj_y1vcofGUCob%d<0mA&Pp0k32o1~}xpUXuogbgz{Za_=dUavh zKEqn>ggQ)_|001&L$egmJ@I+|_iWf7+qbEr%tkM=2%k=Win&aBemybK^&qBpKQZ#q zAZqO9OPg0(yEJKEougaJiC4M3x+&S!xNTZ+G!m`NXrs*L(H!s1!pW6&V1;2n|8dlA z{p%C9$z^-3z9FmD8mdd5?e0~P1szUrgfV*M7hF|O+{xe!FHMsM=vP&HM-f~jS)WIT zMEwd1j|&Q5g!qluDRxZp$0d9{ZnjLeq+{V0Wyh1B{6sX%Z$K@#s!J82OL#xKczNaS z#l^jNs1{mXwSOy6D|c;HvyS(d>wbF&0?6q7@~VWa?BoPS-3Ta}L&x|oL^;sfhrklZ zLqVdtYY@kRLdxMuP-gdFPmciPw(`OQbDLWY^N99Hv7Rqn&+T>(nx z1qA@8`3Z!|H87(F>3v#NTcLGsXwh?U(a;U#D(P68&zHt@BX73V5NK*=JxMI8 zrdAFmz3}zr@aJT6TO#>4iRz&>uQzO+KHb4@#&1bX{N*+;3|DQc&54mh`E&FOi~NTM z0c8v5fabyYgfCl#AX(QylZ|s54M?+yINuMHCWfU)b6G3`tL1!9#q+O)0egjr+FB#~ z%Y(!A9D-%JuXFsL8Y?kP>nHU6$oVGscvOnS=qYwHs}N+pA8{_Ov}kkB+iNSm64R6S zDic)T#%pH1SW2{1GD(c6$0OaLMRup@4k#0ppoUgWwV6|&&|Ym8yh+Cx#&~U3`$a-R z8AwV(g&PV?JV11T9zYliNS4u1Q(uyBQ|kK&681DhkCxbiWptfHO{e;~pKqZ>3;pXV zJ~(zaoL~kb=b&`Mbaw8;GQk82igI4Z)VzWvfj*vEym?n~pj-O;`$K{MK15RY@7s2z zzk2ynnLq-X6mYT9l9G0zYs1dTN#=P89VF2rAjrwzLmzUlc$R=T&XSVY+qRIPP$Bvj2HQ3&2rKOvfuzeO!2Sfod@bHs|3SzEBr|s5bw@2atvKx3lA9WruzmoF1njD4nb>FF!ID5*59|@2#L~m1BS5 z!t~6Q`MK}S-%SGYW}&!Iv<%H1keEnM4>;U*KusWZb*DXUKyTF>kpI2CTM*PkP%P&n z{3j3*$N$^2`vCX(K1cvTTMlFzA;DRbW3i|jL8H+?TD3NIc5uiqDvAig7N$1}{NP{$ zS(}?15O^S#32*@e- zfSd(1%`g_|eL`=GJ`$jI<~lkQZHEI3=rZpVXw>QH>B&M~2$?sOAp!f`EqiwS%Mke* z(4d3B_5szpcoAUxLT!NHZx~LlKmhF#)9>ET;MJ0zfDry1IntAlc9UhK$@uz+E~m0UWCRhM2^B*aJzzN56Li3+n-z{ zhYR2bM<=Hjg>2ISSOBFQNV3LCEgy}neviU5UJ2YT|2@vuWP&gO%dg>f8NMnyFCcRp z?C&3idP)x0-weLu@(qO$sFm#$b=o>Uc<>ZhPg+`I4S}_tw*KIy2@PMxK4MIURXx*q z2(p&A@~0r62SW$23vHm)05zI-xw!znJP2s`{oBMV){ekpV!}@f(ynFn0r1LD!Dpwy zj)5};?O~G4KLq|(ZMCWztUrh8Z&@`0Uvv{1-5`Mhf+~RKg0dcjL5C-&JpnsyySE`< z5+c6L$9GHr7pSjxf)p^+rF>Yx*q9)U7)J($fpx~qLJ9!|Dj;{VU%U1I${T-prvP-> zgNC16ttDNkT!?PLa!sdgOkA7{)HR_D2GV}O;aBWI{P}+FAclbXe#L;&grKw8aRel|mJh5B%f# zyaMB23}2P0#gz{!nCZiNdA&BZn~$tXwq57VMK(s?wk{l7=GpNAw5Opf z2BcIl82=L1R28qQ!IeGR9V8IId>`i9t4Hoo-~siK!_rf${Q{2Ms>a#wO@0o!1;yZ)~B68f$F{aPx1I)q;D#erjR*vs?nZTmtnNA zo!OvOYf~b`#csMgm~M3q(1@%``uf_%RJfs+Y6R}wi@cw0Ntc=zO6p{x8=Yfx7X1Ws zskx%zsTw14+|`7Bz`1G%AL!2F{B%b%e2wK82`c-87Wy|Ov?&@ zwvA>>`|AuX`&Mj<>YYHv1U@~qtDS+>|K(8>8`~TFdRuul1me;abtU;bkr9pfd0JF> z4>uBe2PbZy-|?vfb}5bug$7AeR-!e-owsnqy?d9eyX02AhB`Zi9^!IM@$wB-#&QS9 zMBr;3H`h=s@r%aGpKt4M$eMrUEiHbXK{$tiwZjGiaC&Qo*ierM-U^E1Z|y-4Uk#vH zQ!G2@L*ZH^JJ7bIYLSPN@5faC2#EQ{HlLI1a)t0qVj^B*@p2Y4-DoR#a5);eV)*0D z3KtGE80_S1`01IA%2A#XAL(=0yG zVB%h76-(Op5!M!4Ay=)giXYo}T~@nPg_66*_|)v?{X$c#<}Ro?n!&N_ zGQ_P^$?B)e^EDfj2I$Xv0}kiy*Met>V+dvq4gFsL>7V{bXjCWRgF%s7?HK#}1&B#V z7ut2g2ivu|Ki!X-SKN*2iRBmalV>Yr&N{7GBcrigc6r~wx?ZAV%Mee{k1TAGuswIZ z)Pz)C=@lQo`or680mD~>H8lpN7(dwHs}e~Z+eGTw)97Fu{_;|#LiTDO>6eaxP0X;< zqX`QpDgbS2J%7vEJ};k*Lsn~JjBgBNZO}MnZ{%*MDdvgBE{_@05F~!o#5d0bTN{6JrmcNWxaxJ?Rj|D$*=Vz+UoIc$~x4(Vo3c+scPYJgo%DF0}@nT3wE4&W3KW z?uwTrS48+E%|z7f*wcqTOi$^t*xIHSLg2Jt{+47 z_Q8hi#eQ;7rPh3$Q;?chRapt4c1o~1cW!vJLc9+42fxlU2mj67(?sB zHDY$#kGXs=O>++J@N1$~5izbXNlt7)dtEuei$d*kCo-~w&)IAMuT%0dV@;Osm)GQB;KK3SIN z)c<~u91F`xRGqu`_7E-V;DlLJrh2VGd5^f2Tx-xn%Uk>s@;+xcdFZKesAl=~UH}>d zb5HMVab0e!vEVXoeaB@K&0itU@I9Mr8#1_yX{PMoYWB-7?7fv5Feg2oGvYKC3aK_! zVr1*lk)RJwi02hmNFsa09PjqclItC7Tye5{<-YkHQwftM$)A_dKB^W@_UE}n0|?j(7E7{!7rj5*#-95(VEeP-cbtD?tUnw64?d3NVx-`r zEM25Lw+OK!Ij%k6jMlAs9r5EejLlT z=f=+UHEkek?3T({R1fzvmz?lj{HdjYHJ0#C@%#~#fp4u#>Iz2alM?KpW#dt|PbrS=$u{<@_q3Vf!?~sbAD!I+tD5$ZJBh&?F zM6@1hgsxmCR>UA5vb_>Q_XnUkO(JKihJPqPP7p%nka`6J-v~Gj!%sK%HA%K&W2sF+ z?XOrhQxe^ar^-Yf2g$ZV4d}dUN=nVmhs(Nv`v<&uIIhR;FHbW--@v;SYypLw_rg=z zx)E?UVb{~3-c@5nB(DnvHkpN80L091&^o^LzJ0l=& zgtZuQQA!jW8MLZO386m-tO4U)2;8eMsxlP?A<-5iTO8v-PwgP2sE#e9#9Op`y)ke0txgFaZZ?-~LpjfTlLLl<{Mpl7R^y}xqG>yM_NjTx zHN5RT6zy)A(B!|SdPn~yX6|0DF`~yFwo!SvtUi3mc3a6xacAJFcvVeH&%k(5 zu1{Ddxa@J*Vf#%Hmf*5q)ct&!-JAs2{Ya-SrmHyHJ9~p-qIfUl0u|rLlDn!ZC$I#| zdp_KUcxPa>2PzrmPy!fsqQUE&lMxm@4nlR>&Je_=t(C|NCUdcv@yeeMgM_b0?AiHp z50Wifp11Pu97v_ICA=kmdGeIxqT7n$-dCNZBlMF@92<%#evl=7 z`*Tv8EqXt?gf)t$mdL(hSV`xjOjQ{Yd}{9lSbxP9(fT@!rL;w+N8lHrXhz{NjoYHt zZERyP6IyFU?6)z}`3PHl3-&v=&3}Kcqv_2$yQ8tVn0t>U*m-B6Y=#+{q zht3WJOYLIgvI}Dw)&o{Y>L?UJz!gGsU6VoOFzj(ZG*Aip+u7}laj%UUE6J-yOVq={ zH^Qg=okscRUCg@(LJbP$r{hapEp!3h!8?CIlT)a#ZRYg0loV^Y8H#QZBuCQi(TvTs zYy5bKniPiQ6n#NARe`nFcp@93>+vIXzB3GQUCdXQbrnc29ju6*9YhZ<8<+bewlLBx98vx zd$_ueT>WR&Y;PzPb#``on9n(QaC{0{XceF;V>%}MXL0EMcX1FS(QpV-R7T%thn^%lHTD;7|R8UlM_R9qcE>ta?%9w@Zy2^hxJg4DsR2ero5peWeF|+HH z$c*D{7qwd&7?3xg^UQO{b?#T*E8p@b&ZeG$M3T`Y2K~@#^zV8#%6NDrz3wzzGuO1b z`S9V{$+?N{&L5(v{kFE&{bkgl*DbI4xH0DXgSGj!wG7iSqdx~7^`Fni((2p2B)&hM zL^eHRbvExm(bfK%ye=O=vJ%6_!6$|jx3q4JH@NSq`tLc!qcN&O0_$@P;fk}brBL8dBmNsfK>H4Yj&svT!U=rGQw?3psj%fW!Jv*`g)Ov6) zQiIn|N!{-Emu>KFzQDsDo|cxy*>Oh~aKHTHAyu<9^@}GNYT2i!WF>&2z4wR5$s$Jd zHxdZX1mU!i^@ia6#j<~t`!a&(^Pww7p`7z(jA5|kwV3}rE$1!NLDzg&@f!KZ3z)d! zKW%gtDQ%6wptB^hDwhKbe=pm4Z`6Sm2xMvBc76m%32wnD|A~X|Z=d)wuMO=Srlr-% zFv~Rm$$x+T1-6H6fb@tNbKvpsG#5^eD*?;7w6;{YFDN$_-tgRdyB;vJ{OY2Ei<95_ zqX&{Fr;S4*)PFvn?ca-qp+!90+RpQ?B2e;K`r+x_oyMb1xk#A9)s-r7;>a+ls-oiL z=iUDEUdx$_za6cW;mf(r%I?AXs$zqeHU*cZQ|&M3sw-t5=THa=J^7?oO7he)*5Yl{ zmmqt4+|4glQuG0>ihYWHHxg*lC^#-()f0(}W-%F(5jN;Cc%;_D9-s1)T|eKwdvN@u z^l+_VOr6@U=(^a;<+D91wW8ntMQ6W3qq@7gYD-G?b_K>Zq=9oXfCzrKx^@K~FWe5U zuv@2%B9;EQY9~A9HqoQ4x#@4xIUguny)Y5nFthRV4eDUEK{n8*(d6iLH%7Q~|CHSG z#%uReRegOMW6FfZ2LSbt6;#$ylU4n8rK|cz=3T3FcV!(TM|fT~zVZ_nVdDN=I#2s` z0_=RGl;XYE%1;f*f#2o4PX!szQeW6O6m^#0q-rcE$l*$q5!?uRlJh0#p}?{!0CMzS zy5A}Qtk#WsAEkVA-;6=AZ0E1uH!dZZkM7&PTH#PxxSO$HNf&)+8;5hA2eH6Pp?)$w z`C+HPC3hg^v67#$qXbpVuc2m(dLQ3`s%i1ZR}r2kl+@ z3;NZ+e1*fcp_D;BuDnR&Jle6}td zRO|9M%K`fai+_s#TX8zIw~qT8;xwb63v zOwDO;IGayI-|^@0eRjbD7X2EV=VH$ou!69gTwON z8`hneT5X3&SDVY0WLXE~8khcFg8dipkWK%;p%VOZ9$`_#(W8=5utN9yFbt6u(=mh#}zCvHgxBrK_J z&ou8~ZFUv9$mF|jKL9*p=%n(`@^M}6-v0Gf3NNWrL?Q>1s~NzMo#tK ze>@D_#s=N5h6f505Gr((ujK9uf;Sx-;^T84$$T5X^PTPl!nq(b!{i*%b zc@Pv2o0DkXANuV~BR3=_cx)v6IMmsS7^3SF@9;$2@q_WQP_0nXpf74RHP?b%$}_An zyn0<@)zCO8z=Jk>-12CKRu;9IW`4Z(E@#JNDrkq3>;!E(HpOG&bmH!Y9yjQFu=^@G zT#fGRN(R@rQ)zRZ^XQ;ow2>};g_YnXwv-&)QrnO%d!Uvk)b;Za$JmjUhUPJsI^}ER z&d#)$u=o}m%IBxXjz-@LmoK?N2M=n4n6_drM0c8-=zW%*q`dN5f+}GlP2wL7%a^(J zLHhcI_xe^8^Z9{;1IhLM%|jp~1|1k#+)T~Oi5~l4xK1oqSbO>edEy30oAiKywzSc>edeM$;Y6Y0x0a;G6%D#N9)W?OvM;5%RKZf zICB_W>Of`e=~I9b#O8~uLwCpf{fgdy*{l$yi?QQ^fP}aeKU%#h-ujPQL%LCxD z!B^v%4ftS+j1I*wXDWETv>)(Me zG7)WOUo;myxYustSadB~LD)cF--&}Tt5TEz`?dM^lpL-l(}UKdl>X2Y-9_ri?63S8 zY47{_RQYwjqUDs>2_<*-D~GI*PU6J~Hk9~$j+8Y@Tnq-ENqxYq^2^S1+QM)P>I~&C zCySN1 zrFl;Ho~LR5icak!+S|96XwNDA)Qvu#UQ8I}j|=!{^lbVPc|^+c>-R#- zmu^{pWqoe)(k5U0+|^@BRhnDUEgkpTyinkmX;M3v z)7%u)<={R_m9S^ftIj9-oa1I4l1=d*aZIj}P4wjR0e+p#CG=e?-+QrE>WOXq6BgXt zx`k9r5}c23zV(mJ)YqyX3Pcqe@sk3H0BX>Ohsz}(sagrV>p@`P7fkd&!hLl_ZgWcHEE4 z40$U^6`~5e+yPCUGS6nMg=9FVQ-+1+(PIG;em}2gu>NXkxl2W|o@^i4-mf{ETEd`< zI<^5b!KG`rrwnCxmJ~II{nd09sWaFXDeig5$YT)Q&(BxKR`0_SVO~Sn=pWr*!rLAz z$W{+pUw!>_dU_=)Zy=*$Y*9~qVRJE(l|M=4ji8K718`$$&3!C^BrG=O(FY_~z=W7P zu0o^)XlvQy4aGA}&~lPsm=OnsmK~d9vrpd^i~ZaAuGSrga1mfTydL}~x0QW zsw??sXeOV}-_^*-78dhh&`7dbN#!c$^=1` z-(wo*w)knwEKkb(P6{#^f>;uegfCCdF(ti8w$Fbq@aDb$*;V>h)Lr)S9A{$Xi*x)t z%0c-&A$(+k&VN=v7?ueO%t^b_H|qDj^r(Dao7dQUPHcZfoj^OQW?~Xc~;@_`6 zN>54g0kRb6cmun&WPPl5kWL6FskmP-AYtdRHZq5H&@vkV`eOY7>f54>;GwqIXY55k zM6-GRM*BLlcV|vW!({laa?`>idlu3#Hh*gW+~S?3vCdo~V|vAATI3J=MXZwQGsXXNbnV!bveM0xlnNG*86T%vUNDvGdP$sma3HIirg zDEH42N6?^i3b;e?vwF@Bq?T5oXbZ^7-d1u*&2zXRB^9t*IS3?VFg#3-BE3`tBD=*k zO9h~edSd|;U7DU%#4*ceus_)@lEN&vyjXvh-H=!SA!GEi!QQX~9ROH~G?xYm&m}4p znJ)}%LuBB~$J64cfFU3QW7FlLs<_zL(ZIbi=;CezyV$wm02=P8dEhqYKmCLgTmmC@ z@nP?DjDI5nYbBj+=yowl`+0z#k$R%k?$ABMyAPY8cdx1h>mNL`H|h=uCqOg+QEdan z!BlJ?&v{|SN)0P*<2{H4BU9CPT8aQ+@T@x2aUzXPh{wT*F-4O|_0 za;fbe#Z|8nIy7KloJKx9m0kOFzjEJS96W&@RE=RIS57yID!l>%(q&6(-4|}@9epUm z?6MU1Z!}{S#$pe(LIWP?HO0MIbP0Zz_0v8bUF-E!FxlLX`%D`DjPu-6!Bwx?5lyngYoFDM-IRWN_ zacT#U@aw#*nz1_qLHZ5z59=ilDZ_s#+dk`lXY z23RWJR|am-IOmEL<;vC-eGR;7@d2yIggKifJgn#w;gfNLjh{omM`Wth(m+I;%HhEW zAI;}i>6}imbO^$ctZ5sL6}3X>4p9DEJi)cv( z?7OO~KbcssqCpjg+6&*XZjDzc3^n2f4(d+}0XhO)UaDj;z2>E1xNiNpa=IKJD!+rv ze|CY3jpf*UDIe?NqfSwaYJ96QBX-KN(QsicNq|fU(0v>wN-w~YtZ%&aa2Q`Dju9~E zPT8Ls&&}3O8juV*;gAkA_GBv-6@3|_|BDd6tP%^tS$HMUbcF{aBcPv;uNTKyYD6;{Y=t@H^!Q2Xid&NLm~;=qMj{;cK{q z`er3)eC-7E_KKGk9@`7wUwxdjTw_UBW^}WdvjuL)=OnFP8#K%DJYY7)=pnHIl z6W$~FgO7la17?CLsH54~;UkfuZSKMV) zVI&&yJkc|eNw4sDiw~!1mNNX#DyciO^V zC|+l}$hqlTze0@3yrNBGXR*So!kaIf%*k83{WF!2yiKN(J%V)x|ag} zj7fSsH^(D)1x8w8{7kG7`Ob%0+5CJTo8157ly-?lnDGVK!5Knox> zwc{Poi2|K5BK4r>*MvRq`w%u|Img&q1hv-Li_;*<0dLcJqw+%vgC8~r*#Z=y1W-T|?FU!rf*T|sx8Ns@{X4&4F7{Qw<0-d|E#sZWrwCPoi@ywQc*9k4ax zR#}>9n%KuAz2YN%(X^x6EfaKb%EkZ|2c)mI`FEDq7GMIpW>`Z8Z#J?Ot0Kk42F~oQ zy$Rxru1TmRN>n6B%B)j=dhO`N+^17_wIXifOluGw>Tg^rA8C z=R_Sbb7}=qP4S2W&X&9|eWmv3-6xiGe7o4H_Zw{)N|87}?fZZ8wTfE2`y60VO`8S_ zGh=BTQCw_zl7Hxl=wvJ3XCoY2L$?q3*7-)fSG>Rd9x!7*Z-anE-nggP+@j(lY*Gy~ z&cL+cy)vT!&2pM=aTt)^m2|r@W1M+$h){#Wc@_tJqu8#x9bHKuUzi~{|;#$zJ^}QCuOqfSYlR}krUgYGk zVb-i51+Yvi-{rnW6Vq%ZhzT0ZAS!`V3$2SvH^*l9dQE)r4(-uGtZMu!I6r?Dsd9*m zQebYWCP{hpI7Wn}d$@K8zr%denPkZK!h<-RtS2NQQ>-sy*9Xa)?LVj$!48>+Byo zHw~w86u(1H1TMI(kXIRPipb=ExB$X0lsAK{1-o6uBJR7_{l8;Sp{putNxF20rme7P|**zJbyxo{$+jmzdm}8oSwI+hI?tR;sI=SW? zL?Ll8jllGZEVI=GHQZ|5z05Bi=(i2`hcjIlFhC3$fZKrmM|y zc6mxca>>ZB)r~6GlXmUINbY*b<(o_m?2N-z5;oUL6VH z5y^5eVW-?Y2uQM1`aBNjwQF=0Z&y{}sMf+xS4&hxV1CpcQnGg24~V*-YYaj4e-3rfko9)D#UJFOZ0mP8xJ`4^(z!s26SfH?i{Laek}7UmwJ zE^~(c$%qR~{uGO) z!d+`}p*#UGY^1 zTHOYp@5N6V%%#vzV{dSa-vO0m6#(t zNO!=xO^joVkMjY~>iAB5k;K_`!?(#PrtKAbHa7Q)({}QSo8fFB*wv)TA|*F5(|>t#?_=r9p3V=(-64@f$R&NgjVV4)63>TY-v8eR-I4z*VoV>{ENF|3%5w=tQ(yNX7CFs(y3c)TQ=P zgd=Du7atC(LIgJwiYQ%sS~Y&UJTdMnNhqdO<1?*%L1xm6O705m$RflST~vkIe;F+8 zdH8W8^s_@}n+@{x>yEQ3R%1@p-p7;nx&t#a)+(Hbdd&w5C$mplzCSB+l_Y1mra!o| zug+xVQp7lAW7BEVkqn|P08{(O*%|#PKO?&PN zQmX9p=b=?sw^fin1pEdd-o{|D$e`dL4r)FPk27uBCA0BtPYgz z3hJCy2^rP0*dDa`$G(wvUD)BabEm*Vm_4?Osr@}*qB zHliYonD2UxQDATtU%|{6Ed2lGj@o0S2(CL{EHh5yVnbwP+nq5sFmUBeAM`tSydi4c%$=RQ za@I_KZkyI!0SZ#B^z`(Yc(J#aEi}B|e5fgD(2n&`p5O}!xW-b8iMMMEv4}N>Sce8SGfWk9A&X);oh+s3S1Iq0`gr@(DnE3gI1CQr^sv@&$1lTU}BX`5K|0 z_t_~a6c%gvGSeVRYYY)~8JCi%y#c~}zqaPufh7jt2T~gONRqdh8*07tyr7d}{q@$nF!a36ia_!143K^g8cIuYE6K=AK1uzHFWa0p}hNuF8XDh*o4 zLKg`xf)WBS*8A$bWEe?7)p90~=_!JxyE8-DlmJdCq3?$v-#7IbY3z*jAgC#J_*=C9 z7=~Im$X+?C5YKYlrXQW4S963b1zxasOD#eJObiWagSn*B$vvu|q+9vBbRoHyC&Eln67Q zgN%EG5D}jV9M-v$f(z_q&R0}K8}s`2s^*yj;C`12-mLvUsv#R`3-EM^5a#}uD?T~s z4h{l2^U*l$5HySdgxswNg>2|8ZG9SX9x1oc6sGr-WJKIzgW?IxJJ3P6NE#)1;|A1e zE5Jnv2tw7DC=e}}Q4+7WkQsdXENJ@;(4@ec5nL26fNo~c(Q4HgDdFFmN^2#Ew1WN4 zB(TpQ+wq4o?OGkW3nVm)!DM*#Gh#>?sxu*y#gJZL1Op%^0QL*?a==El6FlTcVMo{U zgVBt1@n5ILQS}D~3uX75&m}sl#xYSVFiN;>SDKaVRhM=zd|;IATHjk>7q-v_u^>>t zKlnlxv;oD|fS(W-+KAleG zCLi4$dc%cGJNku(OiO;=gLurU7&!{(A@g{a6C(%;zP@8nnFgiUS1=sET1iW{RHk?> zZX|H*6>a&|@!>7gYsKs^%Cd&PH$!JFEnoK63BP_4-99Me6I`5wGoD=Ixiun4XJP$F zl=w1zjNc3SWK&oa*@A!euqqxN-+j2%pWjui-OeNFMoo`keTPIssU1_ahOcc74Ke1E zMO91!2U;{L&zLUl0p@_Q#p-9u+RrhPA?l_`(w&2TIhObXL-CxSi`h-8K}Scj^8&(? zfv|!FN#f&lv{E!lGvzwnJdpP0V=^;Y@)GCMmdc>G9O-}5RwO2SHo{!!|AGSHstgXC z;B-(9I*M>Lr@DSuE$KSrw!C>t~s}c$nX|ymhK8M~kp3Wx8L)O6LH@7ER<~ zFKF~9@tGZdXK=xg?!ZpU5L|ANckZyal*zFO%rRdvG#40ORYNBilYM`F*vg!t#!mS} zsbeA{M;RM2$@Z+p9mJKOVbF*1|08~rooxx;c92$jN%A4=9>2~0ZYB6iw_RcYf)Br@ zcQBy~@d|+6JV+oRWrBe5c)DAK$~Em>-wWP;!wjmB3Ad4;4&x1K{bOHY@rdRrj<4bZ z-vZF^mH|)Inuu<2{c7h&-36hD<9#TATuuO@HVAI%>mM{OpnV~t7zFuA7$0lZZc_jp z02Np;A_fylTp0J_RD?FCopn&30`Z5o7S%XLiKJ6L;erB#J9kpVEF@ef8$md+@7i7X z(a~XDXj!fSGG`FzCV3D&qZ7;l848&-AeXtgB;)vNyis{dFYWg+AON~4zzu|t0d77N z!`oV5>crHeYdENt^WVRxgDQ4_A1G3RYE+tw(y?St!TlOZ3zl&xMMJ)h(cg#FU;<7B z=w0u=D@j}R(ngFYJHOS3(s?+h(8-^MKXr`?!7l!@PtVje%`y~bgvO2{3^Nr}Mclo@(9fPDZW ztXkEEme|-wpG~WSeQ4>{gR`Dcy6XNwRl`m$f1tVyX553v>zIcoAuFg``S1KPY;QR` zT|YaWVLlTdON40xIKQIb~Of}P}xDWM;r^59ZEM{}^>9ej!g*_xM@>q-1bb2GDR%(75JA(P(LuHgWM zU0Az7qGq;_`E0*M_Uxd$@0t`S%T_uL#xb9b7e>MjfsUXxhp$3yc()8>XkNuJOSoA> zX$16@ZEGTAkA}PXV5yK92W{!qs)>xLL8FGvr!E1jj>zZFpz;L+Ak|r&^;?1d2N|#} zY;VCpOJEcxI{$#%1n695e*ffd{R1wIn7)+<5$3c5(+IwM!ntWouN+jexRXcWu74J^ z@51Dw6Ul-#oA@Ud_xt|B@s%k=>=puOVAH@C5aPAS*r!s6WtNp``U>C=2AP1*2iuCw zhuV>M?M6R8oY$V)^vS#V$|{5MmMBR7qc`JO75PBq41DIGk_}EsW`kYUSN67EY=C~f z(ConcD-%{obelS<1US$)i^y}Jt+=Hh{e9`5dF zZ~{Gs5@-e-5kPy6Mi*pSr13+(DqvRQBM-BZ4<9h}WQ^)FD1q{sd|bp~-bXwU(RRhO zSX`eMFT?F(UT*yZOgW%i=JI(e5+v=vPgtCj!(xTVp-~I9-^>rOAt|#=z!yB)QLm8) z(6RNb@%P7S4c<0KAVz=w`c(-WXJ}rk5AFa=0NA`^5VUm$khvgypZaKgS)T?da0tGOLr(8Ei5p(9?Lt7 z`QFeF$bDk;(K$4e(qU$GR>f@;{By$kbCb;voB4wtw#Kt&f;O6_hQ=uAxsd07_Rg)Z z539+#7Zsw5&{+dhX8bQ{2k|cfVoW#;{VDYtDib*63Itkxv+ibt?hJJBthR+U;p>|( zjYalzd~ap>)sOElFp&wBLJkyilTz3I`PE=+eI2TU^gsQn)|-(0w7&h5*ZzNP zWBuPGyMMCk5TQFw0^#IaF2|S@3c;P*{^}Q`iQzpMNzMb7g)+?HL?~g>GBh)+*XAY3 ze-D=Tf%EF#(VW8rFnCkODB?ZCq*z?+kfi7RZ>iniFY@XK)s0t6n?B*>HN~oLbbOa? z{J%TqHt+UjhfNzB-_~40#7jbiB<3!q*i3ZoM zMI8tOQKU>aR=f!4`dfHlz@BsF2ek09c_V=ji)Q+?)Hb4d*g6dQL7Z&zQ!3sIVBd0Ov0@Q##m#Z@vM zdveD|*6-j>)tg2ZW#^~zmUkTf!ErRGxupDMGS!v^;}aiX*Q{IhhKnxto-0wc2tLtw zV?;#UL*mw8%+US+u`p3!NvA+?KnuH+%k1UozAsEqtze&eC3CqZW26zD4Z+4FQBM|% zBtkKl!8&QTt`Y=C6?~-DwdzEf;VFcgI_4t2x|yaYPo@0hfdxDTxrVn)YDGUh{I7k` z|G^FPKkvNWZ^Na>fy9~xfuU?0PWXDSlZi>aLSv381UpZKje<2i&tc2=Aqz|Rem7E< zGw39JLj30&DWe>CkRaZmRpO_gO**# z0@|1>jT}crAjEOSJrrvFr!0q79~7($3I?oT zz>uC}diGL%HZ>0;rk|8laDU17dLYmQ*A!UDp@{~i&iitrczpjV(wTq34mG3pPKV%%?W*LrfB@p^sZx8PfMsa zm$2100&mC0uBn^5*pe+_u-~bssF8!mbIwqa#VIE-D#j9-V!6**(GRi=o+X2h2YO+D zisvT8<)5M5XaLp~7eBq;?=&l|gYT8(C`Vvfjo*Pp5K>4u3Z=boU7l;0dZ3P|H}eipO3978O1+ z+t}^37D;aPw4cXGiRwvGnr9~ZoDA$MNZ3nSivAzg-UA-XzyBLPZH1zRNTfk#b_l8P zOQ9)SWmNV~W=4yQBFSu#%1GI}l08Zpnb~D!JI&{P=yzSuef?k8|N7te^W0vqUUHtt zd7Q`i9^dg^AIa=*q1%4aXiOizc0F(N!}S)RLb^`dHATJgmwbVCOOKc~cdm6eTRU85 z9c3)fPd-ZcnL9d377W`AuqNg5qo$$htFNPvN0fr7*;J}K9vh3ro=UW~p(g|!La$3+ ze>x{8&Bv^ zx>lRl#KGmSN+_7yc)18vmT;ptdG~ig!)(c}@~BHiw1P!669zyN!40?yre#jcU#4>I zIJ{6$TypVx-|K4JVo>hgXmOIAisVH_ul6ae_NV(e4!pEwzwwywXsPQ!^1||?^nDiv zH%UkN2;^j>45dppkEu6y2iGNA&FpGY-I#TS+e=Ixq*nKyV+(Pq!&wv+W+EY8HPS~4 z@737tczo4s|2JCBBnk%8nk<5&a6io@%KJEGtL-z^W^gRW%fWbir3h($_g)IEw^uQl zJT4)=!@_cg5~6}niZ<=j^Px{;cvTp;?{m-Yd${(r;1;>>EiHv!E1zpG4$Q6?YWKHx zOVv4DmkW;tv_KUaixa(1pcpb|g(Rhu z*7B205$*7>PffR&Wt5dt=AkM{?#{z4w7o%mckV4|RM-`3Y$Tq#ohZ64RYn2sYLU5H zO(aeKEZ4)4cN9^+IW^}GV*_+`W=zeBTbh%US{Q~uiU^b>OK~s66DPDNCgg0g(@~l? z{j7fYDVgd65hL02xnA?Xn2g?SJkImIsnAPjz6P6BZblhDs}cb&)<9b@ovrkU$UMHQuO4sea`yucsaP&MuwBB`ntOI zpZzxq9zIns&lMcAQ3%}xTd&$K3T`jhy#s`E`L^E0)CG7sY3eR!ITPBhu4JS%F@9iE zm`k}%;jMfak0}|;5nA7ae;)l#Q(~BpE^)OWl^fkSe;9L{oZK3{mlPy>Z(jm}>U{f%YyOXX3@){u_akOthY~loX=Zq&Kat zP`Aa>PZt&FbJWz;t1uFvD0cK+;#kV}MU0_Fx<3MhuogRMXc%i6iopo@tVzyqC=&ro zTT&CWjY(Ban=HUiM06tP3O~rO=8uTP${S9F4W1LyeF1BfAJ+rKiCM>v?bWdTH7xtY zp2tet7-Hl1UI0Y^woc%%-6Os7V@A zH=mm_J2UfrzxmG#OmprEa#qFi$1mj2_CB;mx1hisxvCln*BZ1ct_`kUAGj6E-FG#1 z#kH3#SI!w1v0_dmPK$wPqKs+*JToo2eeEksLVNd$`To8tzoqtpfqlg;_yU>>++1#u zIS|7Xg?0{QoAM`pWDV8Vb0_L&y?ghN0Wn`FV%nVZSrsB6NP-17ZBoYZ;4bg#RI@PW ztm)+@41V{fJ&;h zxcJ3&A8V>0MqXd{oq|(##Ys}e;%^0~q#%6&8{hk;_^7qeeS_l-i1(+w?(MJ3Cn6Fj zW?GqP)hf2L1W*H~x%RrPg0dG9BX4(4$ljZiXw|GwAn9LlY|PqKD>bMZ#; zNy8m2dvwCtYab=@D(>Qg3Q!_uN2d_Qu z@>#^AI_X4KNYGa$!7YSd%%((;6|vEId9Bzus1rk@)1@K|k;SpGTo$}a?u_d)p)I&J z_xn80$NdA*_m5|qLsF4SG1+R1Swa!RjN3tEe4=T(G7(Y)5gE_Ls|TCB1xKf^o%vSD z#L;b0tZbK5A52pgygkc7Vmq4^a8jLD6lctMCh|BeB4WXi0B*KwPCJj%Wc;l3H$Svy z*~Ed=iY`S#=d++r@SM(>qUI!*=iCqcnv3M(uRD;15VX^$@nOe}>ce0Rw%ijZuc@fL zZLZTc;dnl()X5-N<>>>F1N$nrrk!;rLGfu-tjiD>x6_Q`2+ee!sw)JX?UJMDbk+B3e6_GvyD2enFuH+iz#IlU`nV%OrD>s$bi- zv5`A5s%oj?`0$w3p?KgW71)=8sKd0$l0Hg!D4NC&P z7^skXS2ZPT2r1lqfgiR+wI;A^uToN^wDpXPL;{dr2ci@%s&TltGqR*fwvBh$_I1N$ zwlrk4l8dg`#&a?XX8dgb@HU6K0|YLO$AVy7Ooe}x&LIxt=u9Ilr=_oZsSD4 zC!8+-i*&Eo;GOu&6DCrxFT|MGXNO(cHe~(1M2!j<!4Mm-0uIu>$Qnw|&eQbd-BIFW}Gg#Gp+<{0|Ybz@cT>nMS z6=}fb48qym+WRO;^Jmon#xWYBJrPe1W+G^txi+1JjsY1N8Ob_tcXO`u`gJNUxBHHO zJqIr-emxMf5LN))nI;wY2l46SB_56y$LaYPTqcc=TGyVPvQ z7Xu>BaCb*PDWsoWKXMC`%Vlc=peDZ1MGW{>_E-G@~SeDuit%B zq=~~eSzKDTRg-0pA18oA%$6&8ofmw6wO-V13idZ^(}T#jnr|qQlVNI8 zP>^@IYVwCI)OgvKyKgF}S&wY`AnG}7RJ0s7Qe#a=DG<9j-Y`_SVvzNeEzs~9S+h|?s0o`U@tjIt=8dv1H?2@io!k?}#oU;%G^1w-Mi^>wc*Sv#4qDc0k zCMTYcdlWpsF&WL}x4y~VN&fnrW%ddAoPye1#N0wacXjE>O3w`Tv*C-K)u#8gFWgGe z8ho6q%5;(0bRRiNPn|Vz`)u&a&_-+3AL&n3^=KOf=rs zBu2R;NiSl}QN3y3pvqr=KPUfWC8`#3!6rp-^R)^h(eD1E_GBZ7uyQ7`p@XKRqIRO0 zzx>6nSTi_&HCvXBl>YJ38WKBG^9eB?f6o=CxH?v^{Xx~qImBBfm)1U`U6l19K{lwf^=TTWJg7`ar;IQ&UskHhRvG ztf!`NPdU3DxG#@9q>xw0libZl<)Wb`3#m(CpFD?2p#rztu+q0LU&Iiu4PQqV)xl+Z z=XWMy@tq}07f%Sz#qS!W;shp-m0n z!6IK8$7qv^rSkCVJ#|G1GU~LKfgc5R=_$k)Wk0afV)wIg$!*ImRxsJA8FJL~h^Ib^ z&>Y)8q~`gQkjbApBZ=dH*>tDPk(7h5T#Q0{Vv{1;E@q#bsZWLzNLE%BJZtxg|KiTh zGKlbCv_4jIls}vxd0B|M+W?!c|Ye*RFWIn*O~J# zT(y_nLGuAs_`p~|z=73T)s?2x8u^YRyozFN&MULqQ=+f_T6U+sgAtM#pUFu4=;P{^rZF0f67{<##PoH;nlXRzT>1uN7?8cwh3 zHu~$FmAx7+Vh-eA0L13?Hm@wNNS)QlpEByN8M8q_mgR<-^+vK*XQ!i==w#DHPFkWM+nr;D&h;81 z2h4bnol{B?U;bI=IU`P%@szn2uuG!xw1OjkBvJee$F*U)m!%kJzP4nEM1r+EiIi`z5R<*fgjVZsYkt@VIkxxR~d2X zFy`Ai3_91WnuZz_JV(kD_D!aGxrr~FbWO4EevU6WKHEtlwg*KXjzvi&1MI@?J?q;r zQ$;>Hl%DW1TNMIo2m@T#+fA%^@S^tXbHIW6z7x~Riu-$_7~W-M5DRfQydYPY2nW=M zVpnCUhlSrly174+pP9bReX<5sCy5=@deU&K0%}RSShntMQaL+OcM5hW-^J{|fx}Yi zaAVPI2rqRh=Q+(!BA*&70UN?&sH>xcHeQXp?`k$WTeRW-1btFbb85GtDiHd5O4Lpa5r!5q8k__3JzPzN6x5t`}q$Xl)*Z zJ6*7ruDUZaX}dc-BBD%H45zkD4$50clbrC9%ig_>%C|7K9HxH*U%0E_Wg8n*j{X7Z zTd$)hxe^OXlc*rpwf>KyqBed(4FRnaC(bLhL$ibobyw2;ZdNQ8k>UcmS1wjO)!GoR zL;2JH+Y zT3}au&m$i*cbfN)gA0LPd)Jt~6qCYZ zOHsCHz&SbX3Z@P+_cuIXm$uf2_YvJ~dP`+|_R;>;{4!lje`8{LmNO@7L6$ z`Kl8|6i|@};<36v%W{6BFlnjC{SIamo-LPuPkcBuv1ZPsg|pUJ=U1DojTaLS75Q;; zPR@SLbvCV;$pDA&_yQup<2bZh|0Y;5%KpLMlI#`<&=WW0U3dG5uAhV_7Y81)lKlF$ zJ}M2MfJ84vA#(9~J`lM6p+g@4DZXyM`l_yNhxx>w4V(O`x2bA8K}8)KE2~wWAo+NC znt9EmZ_tPrX;io$(;RhN(;GRAG6SBan!X~JsD5Q#M4k2y;Et)ZAq|SXYwjsRoCatv zcqLcduriWkLjE23U7g6m-lPb>u_$@NaHI$P(E^ATKa1)mY=%KW>&P@mDid}@-CxX) zn0yh+Dp+D~Cp76rZ) zPQEQILo$D~{3u}gO1?~APme<}D(CgVB76Z2qa3?bPg45=&XhH+o(>qBfmXfaTmfA>p}!@W}Ww&Kl)^}*?FM;CuE zK45y$rt3MG4*mttQRSLL6U#g}Z}iOUX6jW8EY%E_haT61_Uh({&gbM=-fQ4Wwp~2h zyLo&(&I6AN(yD9>Z3I5__+(O^1b+M5^)EvzF0U(EII&Ok{WR@nT)a^Y=%T74o!O#^ z-aBZ+#E^_@9L41O!wzIr?U|!UEGRh8$LffFIO6Fk_qWlollF6rRC!~Rgv){W2J)ia zg96^1&i!0#)|O+sfkzLu@BGM)z+m_{9(6sG28TJwql)CJR)eV7>rxKBejIPA3?W%3 zihH=;_wCiYS@HBQoY|sBl4*(MR`An?yuuO*(}h_rD% zBjC(1HPo1*OPuTz@oI^_Vd|U=Y5ecjeKe1OSYcE|f6-qs+xJ%x5fk`u-=V@PIOEYI zEf!50F*Sifz#15;uqePFB%gQ!9+kmp2$BeS9X;MN`cNGJBRhug-#K?~|@c>^fe3b2lJI*J|w%H$A- z#9jdmWF5Iq0)Q3;F&hNq^Rdpf`nO&sX{YSEi3fx>7B$ZmR+-4url{89wKwul+u?R$ ztr@RX;dUZ#8;zFnpv-u$F}+fVyI5_a=Jnm-hB;^wg^|5$|e39*EMH6VIF^ zwuUFBIB*e`IxRK4+&vwwN|=}!k72F#-zu{nC%8*)_aw`6u4CYV3o{}&SJ}F(JNy9th(>ZL=eGKi=@|VV${s$v9ZLV3yobrz6=-<3`YC6!VaUlBp z2~K+VACuqi@AhmSmt4;V!xsJL_I8K5ENujL*zehLH+Jv<`8Tg3V-RO#l#u5{k9N)c z*T6PQ0b&H(KKjw6tN0+#M-H39rB6|?)~OrHxc3fv$xps=Tv;ln=~0~gsgrZ}MF?sD z6C_jOKvUh)r;&5|lh~SY+pKK| zg+N*=a`ANuO0lXe5;Z{ z_yys~d$Vch5f-x#>a#MZ?0A3x`mi_d4xHUmRam|dd}?!!@nZAmrz+EKH-%ig9y^r< z$CcM)o~-QL&!Z5x*Y6=YSbVuICJR@5dF{;)Uan39qX(=2;*8}R1~YdrPF5D>T`6_# zGlkW#$aB2v(@IBvDf4JBiRR#m!_&iF^NZ$+J{2F!?94<_0tr|L2J^e=8{;|3lT7lQLv|lejj$l7IVPtCN{N{Ml-LCsdqQ(0x`XZ$>Kt{ESOe`%m%dw=-U z%CE^H`|FG=mHkr(`%48^q!0Cu`=*3WiPXAm3R|p6F4GQ#CrsA8xBdq&ApovDVE(R^ zr#GXkJie(1{#(aY5bOb^mZ8)qv{`g7pOy`8X*&-ii>NpB_V(ovVr%@4XTH$6ytFVg z<^nOk2~60Ic0(_tPZ-w3p2$~ekkz!9s_Bj#DfEmJ{+(lS6YKA{2kl5b{%Gz; z^2*XH^xE0m=xMY6V%4lJIs4^!<(a3SFS#F$QOubR>F$1&VD!Uz6B~Cvm*(c}id`?D zE!6kuD}#-XPc)o0FqP;LPLS690g2DJvVdt(rVqX;cN0yA6j{DWwsZ(XmS+)vsv%+R zLwmZ9_9S*0|NEyyc6C(xZ!F*c2k}Y&Q8o<8JdfWZk?9n#`SYH+Br$Y38X((~9&3CU|@+-r`nnlx%qfg6%beaQEE%!WR2LqAi-FKd# z@gKE2-hgw>=pNsvMd*~Z>Lt6tOqGpYWn#{u#Ob^3ODMbV|d z)?@?a&SyuIFI&uixZ+#?NH8US=Is-oEgV_tc~07_3Rc&DNgZ)f^e}$jmzaI!+tI|7 zEtmYQ+LtZ~Sci?!wS8I2*3;r|FqoqrdK#W!w3S1be$5Znn~@7W3uTY98X}K*Mmv

y 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

cXka=BwtE67jBy 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%0Ac3S!6%-2UkMR3V0AWR^+ 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 h}^zQf*)G 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 z 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
0JCZU7&pn8w>c* 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
e6V5FRup@?R_P~$5#0ato4?dx|UT+YZe!uO{R^{ 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
ccgGPtth9g(3C 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%0DofVu@{9+M?15 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 literal 0 HcmV?d00001 diff --git a/tsrxns/res/drawable-hdpi/list_blue_down.9.png b/tsrxns/res/drawable-hdpi/list_blue_down.9.png new file mode 100644 index 0000000000000000000000000000000000000000..b88eebf67ab0a5e65237187408873878ef7130cb GIT binary patch literal 4361 zcmY*bWmptU*B&~Q?uJEpq(wkNVhITW2}xl|1!<(0as^Qo>F(|n5SEpa5D=t0q*;(y z8tE6G_r1RB`hLuuGc)JD=RPw(&iSDIM1_Qykr)6#qNb{(3jh}C#y26vznSrpptLuJ z$W_(Y9e`U@e+L#wNuvjVSkq2XQCs_^i-(K*OBYvmHAO{sS2q_MJI5CQ_)Moi^)`w< zp_QFKc|m5NFuD6V(eVv{aF!8vlN;xd#{kQ>Yg zG$F8QR2OjB$=7<@Z1Fk)*u{bS1bS4-U0_wZ0BqnoCU}RkYw-50VO10>rhP=4@?%v&eDO&9Ohy|5RL_s@2cFv zhJFPW`fqgkv0K|fRv8o`h}&9$g)pwWuY!$e!UJ9rMp0x?3xG&g;O_(M64*eImFg!B zy9Q3yz2TOHVsqCJq$(C@?T!DLs6H%0jf@{;^xofHSmIb}bNsAeNykHOL$m@(OHAdY zQbprv^xp=6@pS0hm4sXrdTnKK%?9m=Iqb~2a@ci&$a3t>Up0Qh#s%b01~Aj+tE=NU zu3cDFo-Gc=CSckCyqrIUiOdjXJtH3UJq?3PTtHbfvbDRVS(u4$-P-1|%5J*19431$ zvgoo97I=JfdNt#_3tpu_lgnFkgD+oMI(t>OP(Cd1Gcj)&fW~!t)1o*!jqij2C}q9jt&%6W{f)Y; zl{D=eOJge?wk5t2^!A-rX>tYp6$CSJHhqFTgI=rDB<`0g9L6k)ltuE|Z^9BJ=mkpC zH=C|>_!jgTZS;-rh;Ze*38^eOq(UjIA|@gIgmlRfxDZQK(HKM?`$j0W4y3c&Ef2d` z!9E(M%DFG#MlBg`3O$RO>1MzG@#15nig4VUY8{+WY)@!I5gX&j?^*6c9-?G0L_&_k z5MwQ?45BWla7caK(*p#2jIc%w36t72O~!AE?VnVBQb+WF>4khaW5LC z)(lGw;T`NS1l1Oy*<129$DpVv6(bEJ#UidP&RR+op&?Q5Tj92UAhAVSwOqcGryV|4 zQlF!Yl*_nxI9NF{xXk_`r819Iy+hg)v+{(PgDdL3+ATE))frWRyr+4x!{l~p8r+*v zPCdU?2&)lg?1|C!QDjkCG3Pz)EA`Y;ouNw_L^*eK^WrEUi@lIr#m&#WuaKNoqVuyj zW0bHYR4VhCnp2jSw$Rh}#Z;o6DO^8OX%&0(1aij)Q|xT*PF@Oac%X>pf>|FW4kive ztP^aYH-ZnnZf8Q?hLmS(1ys5$`dt zKTY%x%6O@GgZRLBbcvq6yT05QyyTW%sXke$nL$8-vVM*Baxu{;ZRuDsi~iT*2NnIg z-nx<613Kop&E}UuXVxUu??RNb-l^v5S=WDO2ve*eXuk;1r}0nR4BLz1SIN%iTL zh8NyBlb4X6##2T25}PucXq)u4S3j{xzkgoXm7Gd@+|SWZ((fmLBOoX6dECC-raZ7* zeA;)qdD?2*ZJTy`a~k96nhs6pPd}1!k~;AuLOnp~ph8eHo&&#SN31vD8$?Gxjz~A= zhE$H64s(y_eq+WlLu}&rLq?kT@bAS-&`dZfOEQo(fEyecOq8jOn{M)N zI*l7TYBL$8-cFTD?X4>+Pc858N_Cp2UZRfV8Rj{9>O3vHb+JXfm9mAuEqQEt%ysN^ zJiyY&Ovy6-(Bq-Mn}=tgm!oUrX5OM`dvQl``-Y({lWn$p`hgf-fqGOgWujLi-BYK+ zkA=>ezP<6Qj60~|FC#~}sb5oP%cq=1=lWzi14_>|1yh-NVC^y(`NQ24qor4U%jt!w zg>45>XdyE%Gh?&!CRVMQH13S?drsXm9VQD+y?z!_vNA8u`ZsW7zsq80`ewdwE@+0# z%QSNajt3?O5?o}QKRoNbjQrEG2;ZmOdxB?y^$lwktLY8nn;IMk95&o!+J2u)eMI>z{MK8g_x?*)U zr-5#5qrW%9TiRI6ILcolB#APyT5dI%T|rxjUTd|`S(Alo|7~iB)}!W}@Eo1b^~lH4 zF>C1t@y8N#4+9j>UcS>(_WUkFq@~LTk7kHz;5^VYP#XVLHZb*SN&Ad(LvJ>N$%EwLi@?(SVc1g;a_QF@0 z%$*+p^2qkJKZ^KS`}4<795G9=ZIiybvYGwt2f4?->91kE2AAcf_03b<)8j33-hKz9 z!7MZne_`Ub8o%)Q7&pKI0{AlVAPz&wPQu-?H|4c7OY9`_K90*Y!t) zo2qcWVW}3+GJ#yDESc;k%=)L?bQUufmFD{EK#cIRwP%-Dq+v!@`dyj5)0Lpu<-+HM z8R<{tWJZ%`;U^jw$qq0bSd*>dK!zNh$Bst5`AN^gFLWeqx6$cn3dyW~&g*y7< zb-YdIO}wKq3-gWisk~^OzWhyaM)v!4?bYWOtxgMnELtrF+KtIDq(tvCuHvpo-Y*WT z^r?(-DszTMrn9jzkuWyxKktuSEUYf18u$@ta1GydFGbH^E}g3n7+p;6-Z~8%XsLh~ zAGl#kiz}tNIJ?*y`{6Qs1sCQ0GXWSR1~uQ+#Fl*b0(zx=Fmz_!RXC`1B8&FFx)3^f zdvMM*oGEhCZL(Xd>S_Yu%LM=;7=Y938@mC3=RE*^TL2)H1OS~&jCrRr0Qe8ol;rh% zrnlz4Mlk8q6YOGq#3?B0C@8Tgvll7Ig`kRRYKmIw-%OzLYGF!bERl%25MJUEZEgxa zH|tnUFPZmNT_0B`GektX94Zga)e;&-GQzr!PY1l$s(H}Nt(}i~R@2<8xfZYkT@-@_ z^F0J0vc8AX^VJMklX3MG1zM0Lum01ksPrH0jC_0R4P@8|&9}3E;2Ms~;5a!82Rev_ z$ihLeh@L%7pxjYh{40&be+F>-+(N%8Z4Lr&A;z4DeoyLH0Vv#ia#2f$SXhbhaXI$ZyGHL z@FgEcgz84a5`#z)F#Ziv6~Sgn$#i8Zf}8bknz^10(WMK*sf8p4Dvyy+iKYPb;!ya> zuZCA^P?j5R4aimV`R-jv#+T%p_$hYrR`9ka*{!{H1E&4NSqP(Kh=Bij{9yQb_OIS z$KHZQPt1hpO_3~ak=v;%juSDf-kJ~3%locv3}nntM@$dSMujs+_oi!YQuL}m=~W4q z7O3O3qv~{c{V@Uc4%E#A2K5{@%Pu2z2;Xu186BnB521b(d+d;m)ii>TxxtUl$KNz( z;-w-&-)~nL4|1{XW+_+K?g~ z@A$;MRW}Tt7k`OLfJsT0`~0GLXWdnPt8HEQGK%HXu#=33%BsFSovo!fn@1$)(tId# zeyw*ZDTKwqXlm-Cj1yWMMu_rI6A#?pWt{0w(31#jPYr_pzKxn9C?n4+!Nnl+Xy8%9~Hh+WHPr0(r&r8JW&SS64#5N$k|UiWBZBqWN- z(>z9AKGD6OC*L^pw_0lB$xOU2BZcAe1-;qF9cvsqV>ro1#&7$#=X&azDp3M{w~2B) zg>)v)DmRZEi0c&R1;=EwM^AhV!*_e)*W8EfcZ>?&R0(eXUfVqILgLGY|!xy z#6V4slMa2H%8~_%6>9TJkv5N#c`qvV6~u17qw5yU+;~N9n9r+EJFm_!B+O(PUQqcF zHlV92z9UzRo@Tm+MUeAuRBtkxQQ|k`mM}cq9wiJmJ@xc#u{d>`FOhb_Jj>J+iwR&{ z&h8pRp;*)-wvRTH!^PsQ)F!r3ybaGy?dms^cE;9UCfY`Bm`<$PHA*l)_!=k}d8%0; z+=7l9&by4_c0$7J_!@$V{Sx!LzMZ8tP1Kiu*2)(?ENjW$l&MPz$PWe_X2l$p6vT?y zMFYu20RuVPHO>Lv&&ShE?#+itKIDH89%|$07yG@=(A^w0#YG^7(zG}95^EESOftwq zkpD7>PvaHzi*-6*vW!V{uW%bE*Q;TfQ}+JA4v?er&3kpyP9pzIQ#}Kd?vm(o*xIh# eO?kP##sO)+D+Wcjpf^KLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C z0Z2(iK~#9!?3_VL#6S>5f5imRg+aW5SMj1=L@y$E0}(;ojOM$^V%C$UtDAlW*-rJF z`c?GAxBYp^Z_FhQ@_mxF ziUOKKx{l+jn>26$KWZHAd7nMCqEtR)4?OU|0}niVzQIM`41AKwLH57{4?OU|^FB}I zfd?LV;CZn@_P_%VJkuU;kL-a5o`Khhzm=o{7ue3QIR$KGOZk$ng7 z%bfH7mB?G-q=`D1|p0|4YEdj)nOCt?5q002ovPDHLkV1ke=@nQe~ literal 0 HcmV?d00001 diff --git a/tsrxns/res/drawable-hdpi/list_blue_single.9.png b/tsrxns/res/drawable-hdpi/list_blue_single.9.png new file mode 100644 index 0000000000000000000000000000000000000000..d7e7206fc2e942f9cdb0645af8855bb2bbd24206 GIT binary patch literal 4618 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 B+)@Al literal 0 HcmV?d00001 diff --git a/tsrxns/res/drawable-hdpi/list_blue_up.9.png b/tsrxns/res/drawable-hdpi/list_blue_up.9.png new file mode 100644 index 0000000000000000000000000000000000000000..632e88c844ee1d377841adb49c0a80ffe3957a2d GIT binary patch literal 3301 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 literal 0 HcmV?d00001 diff --git a/tsrxns/res/drawable-hdpi/list_green_down.9.png b/tsrxns/res/drawable-hdpi/list_green_down.9.png new file mode 100644 index 0000000000000000000000000000000000000000..64a39d9516f8c9df1034a1830235a64db4c663ea GIT binary patch literal 4488 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 Ee?o7YP5=M^ literal 0 HcmV?d00001 diff --git a/tsrxns/res/drawable-hdpi/list_green_middle.9.png b/tsrxns/res/drawable-hdpi/list_green_middle.9.png new file mode 100644 index 0000000000000000000000000000000000000000..897325a4f62defad10d745c527cf39b6acf2c833 GIT binary patch literal 3179 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 Ofr_H$lTvxh*Z%`qbR0MU literal 0 HcmV?d00001 diff --git a/tsrxns/res/drawable-hdpi/list_green_up.9.png b/tsrxns/res/drawable-hdpi/list_green_up.9.png new file mode 100644 index 0000000000000000000000000000000000000000..141f9e1678a0b34a5343614e38d3fda52ed47cfb GIT binary patch literal 3351 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 literal 0 HcmV?d00001 diff --git a/tsrxns/res/drawable-hdpi/list_red_down.9.png b/tsrxns/res/drawable-hdpi/list_red_down.9.png new file mode 100644 index 0000000000000000000000000000000000000000..42243095f3c249d529d55523ff1aba2823ff61f9 GIT binary patch literal 4307 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 literal 0 HcmV?d00001 diff --git a/tsrxns/res/drawable-hdpi/list_red_up.9.png b/tsrxns/res/drawable-hdpi/list_red_up.9.png new file mode 100644 index 0000000000000000000000000000000000000000..46b475797d7636ee9ac20ffdab422853612ea876 GIT binary patch literal 3277 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 UYW(2rmj(cxy9Rfv)$POo2Q$;Ge*gdg literal 0 HcmV?d00001 diff --git a/tsrxns/res/drawable-hdpi/list_white_up.9.png b/tsrxns/res/drawable-hdpi/list_white_up.9.png new file mode 100644 index 0000000000000000000000000000000000000000..e23cd5cb09c271ccd56716f3d61d11892f70151a GIT binary patch literal 3220 zcmV;F3~Td=P)KLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C z0l`T`K~#9!?A^gi&MRvu@95pZCL->vZKF`8DNsyep>9Qbdmj@%vNtR?Z z?f4fA%xUO+RCQN142jI7mWYVV%%Gx(nt*DIBMAf&NFad(5=bC{41oj^=*y#-IeiDP z8h@u9zb`$FC-4G10nflo&X~xXnK&(Q3Y-DIfa40XvH*|3U*I127ZFdBkur1AXT&}4 zy6$QihD|AD$V#G=G7Q78>ALO;I0u@E&zN(7PJqk4?{Biw===T#xCBn70!_X!i-_OA zMP~j1)|KwDcM)+7+-By(glEh-`^9S9bJi6fLhEsjt0j*4_$F<_(VUajK1iSi8^zsL zp~iS?)yyDEOdx>-5=bCJAc1P^q<8L4%pgn55J(__1QO^+^+E5wP>tb@q9rDfKmrNm zF+cl=ul1PU$GXfQfdmprAc36b%^*w65J(__99A7xEir)vG6ZrKGlK*YNFaec#hk^= zAb|uDNFZl1GsqGX$Ph>%XEA3nOYHlV*goE6ambBgvk#n7%E9hIZqm+TW>Ebl<{tDx zv~9bWKhJ(jc{I)PK-=y1VE3QQj749c6%qNr3teiBuLA%?r+T!i`wZ*=00001K(g1yOz=CEZ9!El3H=N~x59z=Cw= zio_DaN_z3$`+a|$Gv|5coq6Ax^T*78y4q?qlpK@*02&Q-WjFv3%;npR{L1A`njz16 zX(&9^O??2MV)}O=AS>r80F+uzN=mxAjvfdPA4d;QUJWHBUQcfidnecD00d0u>ie4{ z6If*z2+!$^6eo9U(_LQxC_jq4m)^9H{w=V1NzW+X6%|cs#LU8wqi)z4F-EDL8@*g` z6YZc76a6&S&|GSVXSVcXNFaWD`*h;81($<68$=G#g)=Y;Cao7bgNN{_N3cnr1ReFx zZ>`}(Eb5CSy!7k+UmQrg0N5o)281GNT)achgqXa1cxFUlUp`d~WZ2i`dB?Xh^$+K)=vhZ3tIf#RR%$sW0 ziR3>4Yr_}tJ478{Kmke~Dnimx4GA}G6jLJ#ZzTnO@g|9M^41_cQ}NCK;FTf*O59A} ziFq}N3+|1yFP2+*MxoUqprb$ad-{_Rab|StFo*yC?&31v@)y@yMH{wT^!601(46#a zekOGsvF0E(0365I&lgg1iMaLErFDCpEB<#^;f2et2UM1CZ{ecl4G{^T*B-)8Tdl2) z6MObRYJA&W%FV#E5pY~Mwh*78D0oUa9C#dylsc2=&U>fZ`-tlrB^A}SfbF~1dn>WB zf5n$P7Gpz?F1;5sfxEyfOFpxzqbTy+%f{WW8Xk}9Cs7o2C*b%mdZNP4<8NV?C2Gy@ zu*B?{{D;XlB1b|cxxe%FrB9SBh@t;vWV zkPkf&e#1eP1n3li^^=D>O z2W`%0u9glqBAYA9^3>Nm9?>gaSq;BN`R;0(0=q#6Y?9<-4KYUnL)H>~!)H+`8r&kI z`HM|Ywky_G^S)edc|}2@&`Zu_!v~9Iu#KOD4wAEF#*;v8)Fs}A7xQjJGwVUSdcBK@ z$`zfHEY$h;g}s>{#+l2XB+m5mip8A8w5W-uyr|P7{z2p`-(1GS5z}4ZgGETtS%jw* zx?njPxMji{3rn$2e)=LnNKCw4I98O_{>_w)`J2}&*8iDs2==hrt(iy~B}m$FnLO}g z;q1t>!INJniVbJlBDZ`=|HU;TF;UG#(?qFEV2i(j5kqcF5&2T|%MEC9nNEX1Amedo zfGw;x(L@y`xWmWImnUF(gOlzak-Vj5H$F6uMt!o~Wum`c1UTtE(o2mJpbTmD)*WliS7-yzK23>}Sp^4Cu zP%ukUA7d&k)hIPI6<1+k=wm21hOD46s5GRjv@{BNuWDGYyHZZ^gSB$3oXhZ2`Tgoa zxIa8WcSz5wsLkp;;>3=o?p2g(!7KG51G}bf_BcM)Zn5WkCW_uL`Yt zFdaDEHf_7@z0JD4IgR)A%$3i*lY0nrgAsfwF!wQfm?+GQ@6a#VQM*m#2E}3DA??N- zR_)O3chMo+FZ?(j%k$u#1o{0$c2`j;yWN3AyPqx@PH61z%cU}gen(7Fr(+RTqv!@& zaObtdievzrtUb!(nk`CV{`suSBO6;Mv6&wBUvM)(V@`o#J z)IC42KXr{`2Q%_<^sp%VQ}%4tl-rNF0hz9l%2O?oY|d{MUuEzLzjp~H%U%O3xuw~q zUk(y+cP;%aO)XDbxpnGu1oOu4x%JL;nk}~W2U){pWuBi5ZV=0M%M#@W=D%)x-v(Wf zY2yza56uiEJIgzjKIuPC_|v|G+-Kd>CbfoqhO9waUvRvrCw3v`A;}~uA(JGHBmH#c zF10L+A~gk#DUWxuM+e(J=dqpmtizowEK47GF3VHSlY0Y#n%v_I@vnx+7wAJh-XCjj z3^bBQFRHmlqj{XzGue(qm~RP*Rfzo3YtTn{AqaQIQLCn>4z2Nf3FU8^rDvQQz5N_e z&aQA*yRB?=IJyG;BH;BOmA!OE1k-hj?f+IgCp%^STk#>nxn_yytY#UcA?&KxW(%9y z);9+G^ZXx~N}47HOGRZcrq{`>Me-`@-o2``R_dDb@ColLWeTzBi^On%)*Smi(VIhbK_jnc#xHNdNNX<0Szmfa38yJ{AIR&P~* z`a^ud{^Hj$KUD;4aBE_XF1n_E5*=W=w+L-l`NYZ}tIy^yB5DE0JPUBz9SP}o?5|5Z z*IhP&8}2(JXZPdbks~D~O1C47B~r^%zV*9T|9;wR$6}NE%n&4A0pkRr{^Cx^=)seZx(O5qX?$$A0D?lD~t`l+NG)D+>2Y|v~qhq zk9Zg8d>H?|;d|eAVo4jxZL@(!)Xe_7`$b2AxnUOlM(0(PO>I+x)8p-P{y_({kz6d& z^Z1mlmXEgsj9pq)LJr+Wb|U5yIBYpF?dzd)Xf=PGuDpbxk|44p75t_%!ozj;LwkE2 zg&X{S9Je~mb1ggEV>){~%m1V2Qz6e6ELt6uhVtat5IdSpR)lW{^SA_y-4@T^P=f7@K+}^dnQ9reP|x!v z^$%tqo6iaT+s2Qo5x=!IrLp+YuoLHwF`tP)6CxJ*$X0y!7H5;Y;M_H|0Os(I-_bUk zKjn_*tVLi#z=yN8>GNM?Cv?BU8ZK&|cepM7vF@-Q`f5str=@tEcaidU^!3t++JM>^ zzbb!RLM{&vCk;pI{apGw@q`SR(LA(OMoU8>{Qq4sKI`GGgS zvit+AhrfrXWe_Q|_x`MEa3%zg#$y(GT6r>Wp2=V69$-)GdP;|N2(q}~i?h3gmj|Z; zBl+T&+a|A_I$R5YKmh>4BLO)6ducZS@Vy7XFKYl`833?(ytV351>lO8hO&Y|!1UH! ze+<9jRkB@t=MfQ1DiRujVK=9W2=Z@>pn6a}i`f+phBPe`OHq9;(J4UdDbRbBMnZ$%^^DKC8WtoUPTG=N8PoFGUf`459%V^H){);+1h89%2s-$CA#mImz z7IH~-iRduIE~5IW9W01yICp$0{(o3HJQ80-_0-+L@&B|0 zH=ifW2* z6uo=yd3EYBZXgLB|&Yi>*&m7NWDhqHRS8 z);3YQpW!gt;M?xd73lrdyWU%FHT*oA>B!~#$?3X9uu+UGXTjfE*T3HA*w=`6$oEM=$U%E7-?V zeyU}eTaJ_7zW+-KdhzqUa71-Lq?+X0k8xpICaWFReKFl(qhdZ^&!*~yC1(;@hN?t9 z2?ls~v{lj!*OGBdE{#kq($QqK`A%rx<>V$rE&aeXlG;#bgbhGcx7)ab3cORNyHqBH z$>yvW_RN%LxA)hc_4UPbxNg~gz1T?e$1oz+o2h(6@Az>r9F%WsWlmcPpN|TQ zJaojmjbQ3r7^)xISiT@q46rivc0%u1G;UXZy`GtQAShk)TpE+G!>9l}hZWim8e6u+ sZ^Q(>f|yfeHaGQOyC4PN?_Xk&EipX%fPshoa!>&c6>a5eMeB(F0}OFzB>(^b literal 0 HcmV?d00001 diff --git a/tsrxns/res/drawable-hdpi/list_yellow_middle.9.png b/tsrxns/res/drawable-hdpi/list_yellow_middle.9.png new file mode 100644 index 0000000000000000000000000000000000000000..b6549b2945d0d92247366118297633d69031cbe9 GIT binary patch literal 3150 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 XsAQrV2j1U2(LhB}^J$5^Meu(B#^L)R literal 0 HcmV?d00001 diff --git a/tsrxns/res/drawable-hdpi/list_yellow_up.9.png b/tsrxns/res/drawable-hdpi/list_yellow_up.9.png new file mode 100644 index 0000000000000000000000000000000000000000..4ae791cecb795142f46ceb5fb2352ac0af82ee2a GIT binary patch literal 3335 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 literal 0 HcmV?d00001 diff --git a/tsrxns/res/drawable-hdpi/menu_delete.png b/tsrxns/res/drawable-hdpi/menu_delete.png new file mode 100644 index 0000000000000000000000000000000000000000..ccdfc4ba5468ad2a5c865f2e2c9bd1f210c69b67 GIT binary patch literal 3426 zcmV-o4W06dP)KLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C z0*^^VK~#9!?3urB(@+q{KdlZ~VfO?04D^7VVNSCqy+~8!1*<5E8%2?sJ2Q&% zC5obZqk=6$gSq1X1&Hm>o;YWhmzU3tGHz*UX>Qb*Sv0T!2dGbA9{GSLrF@qwvxZ^Z znGjHbdK^C=4W_53jY*cMtoW&5UDx$BO`8Z%P1A5)*U!ya;1XbG)!{Kq1Uv%Xlv-!U zC0TVgPv-6d3-SF6;K3pNRbVxylm|RZ=&r@Oec)j{KFjw@;C|6MyO7BEl@yMx0tTR| zs(LHob4pd!+kgfbvE5O=+odiFQp*4MF>~&fG8zRns(Q08G=I3ByoLv&-vy>|NL5 z;-Z$kR{d-RwgOv$t-uzOTCMiabEDCa$!nI~M8LM&?ZLslWm#dj+uZ@^cDp;4Wrb;W zrEbNKBmI8=eXrMR?(Oa2IL=ogL=dm_f$#etJ-ys$2*$p3&~;q~L2$FsiA=NE3{Rql=7}>D?8e5%x03*yC(cl?wry{&udnZp6X@F7 z+OBQen}zGF5MoAO4H$2ZXwzjqu-}ehICiQxKe|~;GavbN^%F4=9A;fkWb@rfU zUIg0wIR!jZLPCE6-+@;`h!1(T;-dPurUF}m9iRLj06^H+*y@smApigX07*qoM6N<$ EfKLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C z0t-n*K~#9!?3ll+(@+%0KgZZm~eM9QN{6O-5kb082d3FmX~J?DGRJ)*Uy zEOvHiO0`<;yYKrC zlfWhkgUmnyeBZy8SIlM#nrY0&1=U)g$93eoZf!6a+{hC)az#aCKdvLK^)28iFX_s3 z>qX>!UOHQd7>xy6M9@&!IH0{=&nu!Dgk}BdhLdhPut~DMDr73y{{dD+I%Qhfp@`fm z6s*?zeD%3d-#!+Ro2jKM!|mRWsBf>->-7T>In-JQ+kzbeornqid0#9RmSGt8fj8R< zgHDoj&#hMLWnqrnFq_ZkUu@fc4*W=5$TS*_AaB4` zAGU2D0UP@YYhfM7Ia5mI2CS3{9LG6Z8Tu3}{zF=hyTAkBdQQCGfL9`tzCT-CYbw|Z cHXHjj0P+&M$XZrPga7~l07*qoM6N<$f^1nvIRF3v literal 0 HcmV?d00001 diff --git a/tsrxns/res/drawable-hdpi/new_note_normal.png b/tsrxns/res/drawable-hdpi/new_note_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..e24e0d142cb9685ba598a2f838c6697d8a1f12b5 GIT binary patch literal 89221 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
>ZVDwitaE zJC$Xng5Ft^A}Zz6qC8T!UPJ}9a{TQDeYx{6>k}~ovC!;Tk{WhK? z_!d0!pf)4y*?oNiQO)bw?K$|uB*(b~6{1S&GIBON8~g3@?MRll#N^pK^bW-XJPi*F zLDJpE-RaZ8S32Agg<~Fp8=m=BRiNiCDEGnw^19D@wq!!p3brad*LR3&b56IyT9609KnFA@cW%{bN|L8lg2!Hba^A>gP2#F#<{ZytwyHa;1;qv!TkcaBs(vC}6 zX`CbpmH$Y@MgJh)GvDD{GP2$`-{4#__i4$=3J_sk&ErChvq0+t`7)p9_x1panC!02 zc_~ys)2mrxuUUG6XctJT{|D;aIQsx6gGoXiSFP?n>Xg6tk$F#QhzZJP17o{iA-(zd z_LL|VRr<#6A6##rG`|WwY#5r;mPDzL>y@-CY^Tu_$99Un;FKgUh>u>0I_ZSKnRR(l zBx4aM@irjP?~D~{HhD!_q$De!T~03JSy|^T%low{pUKrMebTN1srR#&EO}`&*(b68Jsp|J`F%oqCZOQDE*WyMBjQ;|_8sG! z`&7a%TWn;7z^$h56q}4-ftSEeB~e3S3@`VKA_CXx?K^fJc>qVp7?948d~BkPWpj3U z=Eq9Ps{qtP=Ysnt?E?-BUyyPh4CV)mIQ%1i@TM*+0Ti|N2Yf6>})B;1l@tk}Us~|33M)vQNn2I_X$B z&bjXNcSA7!RQiFdrF#h3SNU^n8K16FVJ$ z65UyVyDIm+6#maAonCdWCzTbKPnIRQmV4l3ODhi=!3zMBKtE$>hW8qt{cElFD-pG= zeN*6RVSq%K{*{&f$%@OIsiwkutL+^f5P;~ruz$r#{McKdw|13}wq8=tW?v-Poy}L7 z-1DbfsK&zW6-odpZT6VWO41RPi{HL%-mROa9oPM5_a7+>mL|Fe+dr{XsgAbcFm}z? zH9N&}UVZldcyAvLda1^v_EkV2Tz<~DEGzS{c;tgKbkK&f^LCpTz0+w&2U>9^V*(1a?%2G4vK4gZzI zXV+MZkK*Ws9)Lg&J#~j{Ec-(6uf1QhPrQrwO_*86%6&7zs~YAgv@p?c*;GNpCUL36 zCuZIvoRfOppG{Ea<@qfCgnfT6b@O*=t3h6<{mBmbYDOu=#%_Thq{a|(>*gP3xEB_A zz&~WVQwbioiq2FiagHYpCIu5%}ziLbP}E z2+JU-=?(C}f%r=;>A5%%TsASOYOqf{LR)ZmyoS^NRh&o{W!G9HI?-6ZN_uHOE;}v_ zLzs}ysqL-?k7ry^RBym@9(nx$Cj&nzRHlo zoor1HP;)=${_as}S`S`~5a`#VeUXP?{)!aRwCGc();|s_{$7KvX$#7(YW{m=!CuDP z_3F92WZyR9J#XP-8vPom{z@Ff!%a{qIvUQpFCQyCZ1ZO*A!kde=mF8rT-L`>X|{tX{CfsHOAzS&CGtf*SwKF3FPU4y>j7SCy_ z?%I}D#77fW`sy8HEi)ko+8Rek#|U&N@ITLP(X7*G@9Z3%{rf&^+@igIdy9Fw zP@ff*vT}obG#s6>d4*MiQo?{pl6KDSi+fx|t*s4L8tV#$dtTVhT{l_I5ZHZgvkdr9 z|6@}}!9*8z5rO(xobi`3{)E#0iX#V3diz_ys;)`iwN~z0seomuH~Qco&ChZ<4U=VkOh?a7rar(y45;xPajtJySDVHP=rg$K0ZteMy%^pUq7s=^hK~pb-|Z@(_>1Hd?Vm6GhWl z4yO}gfU-sw{soW#DSbszmbvDme4K0Zntq-?C4M;PmmyX`E~)rL$K~CzO%A_pWnx~XO%dT8-LhNpWuv{Je}7KL zLFUWlWH6yoYdt|`GB?7CFX65HZ3B@>y=cBYyQFq#=GUWzX$e5KGO{Mi1!By&rg z*-jRlxGeg;!(V2>Vlo<@jF~!8WM}0LDrgR6Z>A;)g^=6M*KtW7MVLG&SXccbHdrsJ z=&Vl|Qm{)ttBpCZ#zsYJ3)Z^24l{W#IJqFUFDb9D`apCpW>Y@h!>dVgwY;NjBDZEV z7eBNq-n=hJy|Zik`FBTg1td{z40|_WGjI;+@pt%5FLXI)#(j0y4ieR#(DJ>Yr$s|U ze*ch!sRFTICqN!P1>`7F3l9eC^Hr{CxRxe+?HYZj74Njb&XxWyi9>b(Z@ditL2fmm z**2)M^7_3f4nS*RthkCgs)-M7IBVNERxngOlVGCX zvuD(X3@q zVjFd7mj-Ot+ca#^HtgEQ)RLjYH~vCoS1pbR(OGHG4*!PlkKiyffY19NAST?EkQk;6 zizoyiKqX5zpdE(J2RR!FR@b^FeJX;W&+|sUGQCJoIO}|*-sRWc#ELh6TJ8-)RN}DL z$DBL3dB2|SzcidYIi%Gvf?mbUJ?(G!*sSHyoMX>^>(cN|@BJ;fQsY(E-oLAfaw1b~hXoY1c-}R>v8Lt zVfyi7I&0Zx*+(t?IdNsE+aq};teKiues`kI=JF4Xm<0hz1;_Xl6lK_*`HXYTgVF0Z zZP{i?`qS&WCK7O4e{z<31aiS{#ETotB$$;0y7j~7R5gaBbuDB>=7q02^?R3`g z8{Fdz@xNes^k^R*PfvR5X{f<~__Lkh$;nEBFYTggizvLEoS;Db-A_^oisHH=*GrDp zwqVORxRO|<23LcV>M?5f^;#maH^dY{C~|J}3$GAJhwc`R2X7A?GRZU6pPjq+ekMHM zgwn_z3jEnPPQw?Vrt@1!0e8bV5r@USV{V-9B0{;q3+aMCE1)p{n4r27$X+SAHvQzX zU)K4 z+6Ko+{lY8l>KTzzO#`05uG*os{s(=hT?jhG$vS08aP4_KfWrmKm@%0vJRL(cSOr&x zZt4#DkO-3^)k7j0BBcsl^NP~plFzHXQUpGsz!v2iwtrY^zbf;~zu$;E?O-%`WDntu;cI`i55fAk zTGvmJki!OMrHqaoQ@?J<@^@e=M=OR-efwvhTlD1!99E4hT}5en@lrn3M(0aKNXKO= zk5lOWrXx*hCUQ${WVNnYbQBh#Z&uhA;uAMZiotK`?F*+KoFZlKkTTupV-uZLtER1X zL;gS`KMk^t;9aO9!MnW&FuvngMEI=|<$U$*F}ZR+=_c<&%1gt{S8>e->Du=mMEk01 z-PNj{-D&U3Sl_|aEM>`*SU1S1$_x;SI;nvgwr%HIQEFLO8W@qHTdoI;d$f&PC|+hH z!ARpnR#)Y###j(Ygw3fg$k zX|@d$pM@VNswD*Ub1*sJ*fMvjAzk=;7;w*dE=(yET|V{>|^jcb9o96rteMumUmur{*XprlczT0J4*l1 zyK=Tc`w*ah=2CK<$t*`o!RD4zV3esWHsU+HqU|gf)@eD{!u02A_I-ORVZ}Da6d{~# z|Kt%j>PaXvUE-%5VQ7MR9_;3(UTf3X?iOLAM!yAXHQ4sj>0OB@r~LOx&n20S5US1IyH61yV)lM zlQ)I9LV$jp5UnX7?%QrSmIS5@ar$kV;51M&3D2u8$jBzH3+U{2hY89f zFZ)`zLb@cOuQB60qb#=FqI5Q?U12V>k782B1~U}WTEV~}7n81;Qjr5iq_D%ub4xgt6NdN_?U5vH zQ;b0ArD+HuWQ@&AaIA$y?>u9q#aC)6wpnA4BYK^iU7;LEDtYyT*dKLsQwJJHdI#$l zb)~Hiha8eI@~ff0d<2yU8^wq_yaFAJHPeaZX!UP?JzZS`EnE&cQQQQX0rMi{v&b+* zp~coEYPi-YDgvCOChuO&oR<2Pf)k+A4Ee~%3`>dFjP^OoYk{O7^3o+cgBQLehb>eM z2l&Efg1&Qfv3TzCa8@Wg!uhw3xk~$iRlhS`jTBZkmi#A|hB8KE(sNbE!glY(7?DC) zcDMA?{H!fBuZODKE-%EIli0`J7=KTpM(4cgLIH?L0o+XAJiUV=HkT)SH6oYSliZiu z!a^pe)#RlDEyn-~BI&LLs3ZE4WX}(yhmMKz^U|OC^)fxvFpmt{`^t0=t=!xr?&+=u zH6bVKdziF?wbqscc3HS}{9Y(>Zx|;Yqm7JfDE#W%geg_=nAZm{NQ`%oOhyj3rqCP) zcu*Q@Qj6i}6oLAC*`m<__`h~U$qk7-14V0&i}Tf*F!jY zzZY*y)->$bwy)Q0kUPdda2a=o)KOP>+dD_c#kH(sEHmr3b`A~>AZOGpAY>PVHHChK zK6J8`Or?hYxJ|o0IQ~vsQqKlkWf$W6I{_E1M2)%pu3M-ABgLt_lJHRM`sei*AZPsy z#Yk{3s9_zyS=S$q`HYR4`@DWQ9G`NdH3SXfa1J<=?p?$=-IX)MD(C)ZeylzvL>*Dd zL@I%c8VLD*sbjI+cKzm=GFDzh;iX9xOGK8dXhM2MmUm$8eZYUFnl3^#%Q$K9qCwvr zXEH?Z6PF5v7JZ2&c?!k`w#T1KB326oE`+3q?vjwMK@wG+0j-aHkShaIOrl)8fo&x%8BYHkQkB+w4b_i8= ztLFtqZt>vtmXJ++YBJgoKVEr|16dO{&M~{(>m2Ulm1KaWd=r+%?nk~QVQN1uK&dFAK;PL;79gBcunQF|njFc1&x+i}sIJ4t=}>fYq( zD!??=x0I$;+sj^?6i+#ZhtTCSB$ASn16x z9!h20+H%UoF!<-RNw`9S_xA$c{-%eK6Kd%v8Rg65^+e+UI`ZOSSyLg$_ID1satNw( zvf?^)O4Y4dudh{{ZrPFBb-J!Gkp2^wdc`(|-Vgu*cTG{J)sU86iSw!6T4t90t({k< z(C`VZIU?y|3C_|8%~h(8^|X$O<@XQn=e;|AOk*)wvBBG@FfX@`vyNP!TH$wqHU?7chhN4&oeq`vQla8)3>`Z$+{ zCrd5;k}B^xi-O;@3cU0s&W+`Q9CdP^BZYaDE*w>VE4faEEEjd-`5bg`Ud?2Ya>S#b z4+Nt9yneKJt^5S0dj<-0@OPp`=J$VV%L) z;<>L+4Hutm%(o)EXca3x+dvh7WklkUmAgYGg=CyGOkT*4GRc{Q@yRe3qFZu7S;9#j z0rKep>5=nmx3#h&#P98yKf_CZ{w4>G%V~^blO4RAM4R@L^HT!#aW#$CLKDq;Vns0r zxdDJtLm{=*mn&&H!`!DkOPKynL^VCb-(F|=qEuRQ*@|j7e)h13tVTEAL%V7kJeuN_ zMU)W*+*3KHEiyBsIgbuB5W6;YIP|`Ic4--AnlHuf?# z=;QgODOF$AW1s5Y)-O;JrKUiei)PxfqhXRavBz(^7cY;kA5-RmURL+V(50|y=4Zai<9HX(DQk*Dp>@wJ?5%3KKV*Jw=W9&q z&pIWzs=8=(5Ppq7QA+0mVx9_Lkhp9Hr*%uHS)h{&XNS(_gHHG3>nGKF+fu z$S<}rOEQ22GxKj?`nzOG2e?-)zQ|!RJI1F%Q zH-7>Fs4N|A)O+rLS5BSjvDAjzvX@MT>CQV-zAD`$WIV~MloWnlDxEyqY=b}lg9?jtg={a5eY*eU$m?1NYm;)77y#~esG z@U?gC5-D0)npk)wB=w1{W2y({N%g7XxgV+kfTY`Coy-^U#H zcx-pu?%LAaWx3a$ljXRnds zk7{2b6;3?|#28UWd3o^@JRwrx!K?9jWI#=KU~zuGd_lVYb+ zsw7tQ6B>g_ugp@zQkyAu-ZKZ3m2=KeLo(VWtECjtNQ^^ngY42R2xWXggPQ%1?%)>K zna*tCZ}J6uvF>UCtFYVdL;J((X}?PMT5Brv8>Hkt2lG}++)!xt#+tXQ$!aP z=M$y}8>bx9V9c3Zx>t;HOS8$Anr&NMq5WHJ=bySA2_&7Xa4^}!%Pb|-I*?f;R~AOF zG1B0TnerqJ2p^G;lPMCF(@$V(A)Cv<85#WYq&Nr!gwRX!94GLYeT?f5mBH6JRkyNV zhuc@*Z*BD8t?4+upy`!XNxH+HlA}#f43J|Get$Cv!jND|wfxm-V@!vm#Sr3)-|(Z( zprfi4DDuX1v%d88@u`;$<`JR(Mx}G4%g-$RIiZ~A0kHW*hroWCJHwh1T(IC&@!JY! zPEL|gjrot#&Bk?da<-SW{8#|=o00Vu!^9VBCdBHAox!)I?03_1FD}NX>F8qyHp#R| zZO-N6&WasNhBtz$dv@z3VDpN-6@9(FdbiL>`ZyhY#5h+(cZ4YNx&fFBEnS!F*W>RR zwQ3n$?R{07x=S<$op=m%PvM6N%*wxQqt;R^L>t~JUr%XsaZO5zAYUg*PUgg-Ema89 z6{jn@_?2>W7*o~KTqZS>vgYQ*8Oq2|-DMff$|7xrMpYRp zjI(Hp4Gk-p&Qs{sCp@L-$<*nx4}^wtXoZ-`+~) zwDFM4&loPD_f>Ib9v0f!j(E1vl!VB5m?**@4xJEFc{mC);p^C+G7hSRmN2yS6m6VlSWaL){ zXlv2YYkqi(X##z!siQ9vnA7enEy#6*t4dLJ=yvzIIyvhU(fJCdRmM8%yA0usk-6}) zE||8S__JHU#)tgxwnw18ne1J(W9FO-Q>mlaE?PKSey#OdB?W$RPiTq=Geves@-MYJ zkw!u)gIpT_jE1gD-1BMJI}YG5u{Gmp!Udw9+A*q3zW$lF-qqY&0q|W@p_uuQ^^HLL z6RkM!lBw|3D`S(ln@^m%#%efS!Ff6D6raM6cad$5-8Ek=gN`igEZpzc;G`TK^a>$J zjw(MsLUxGtD4FckE<|jZLyj3+24i5H6^ol@p|Mm9!~2eJfG4ozYZel+Ph3b1eiCFg z`*oCg1+J}THYffVgsnIYkpQDb7Ow58QQM~JnkL0Nu3(W8CpayXSqh8IDrY=%!Z}LT zp!;hIbwypu(rlYm^w~E+`G^LuJM1eGcVj}aTmo@VDS@1xd1$kZ^Y842;R!E`6mUb3wY;7*;PD0U~9XGISg(OQb7lo^>s9E@;u`H;hjx; z4TgCnmwKctuJZb3aH<%GSfeacasYg-7v*D=k*o*tvoC(D^Evp)qBK(7&>@ACQR4WX zNV14MtJ3M_=vX2WE&1*8kojY&Ls`yrbF%hD_wwRfD&j?2v+`{7Lfxkr7C^mrLR3;a z6G6?sPk*DV819)izNmV{cis9ac5V5B1dpl)Tw-{{kLMw@4Cf}w=T&W0ml%A=Qw^LB zK?1q@nugTQ<2~t6OsvXM2}sshN+TJIPmd3B7^7B8wopxqqt!%FPYx>(nfc;Hzvc$v z6g*YtPWD~BqFOKaE_Nd8L0+M(KC!zhk&(E+tT3I8%d@b0tcvBkU2t&cB#Ob*2)cul zS5RfGl9RhX8j0<);f(;E7l8Gm?4lYbJ1{`_U|ND1z56Aj457ACaoNQ+7BYUC3*b6! zbg*XT6yWh=4vk+#7XD7`PJ5n{oxu~|^GlP|k)8NTB6eXt>$$ddPK16$*DyAgfrScJ zC5FrP(X=oDN)0EDqfx#Nhf54N)u({;Px3Apov*U8bXAweOeJZzNttj_b^xInYR0$*uS8=NDo+%TWE}x+v)s^O7|c#mfb=#8{@5uN z&Yu0Tow^TFcdDmM0l%gL2s3+0bVRLk;)CX`Eb3-)*H3=XqnUL_#URg!<%NE|`V^W< zj)@Az7<4WlXN&p}VdS#aLNe(a8OQ()bXHJC`{jFN2-}HVviR9-sjxy0T$2$uGs|Fo zcJA^PvXRjiy`s_bZ*tF~WcLeUo|;h2QtpLOOQ=&QH3>Gvsx!kQgv@S8p@mGJ3JXdYDSKbfuj+_wI-fk2cQb9dWh9vYf;hHq&wAkpvvmu zHV0~RRJU4aFl=>q4`6zSB3l*-%~?X3P@p_2!ZCi6;IR&99b&y_9i=E47ly`i$=3DX ztR0y{^Ki^9jliFV8RU?sGzz!q!o?}Ce-jEBQNwZ5rpjQ`HYN&x==xFT=;alaU_Kuy z3XF^DpPFlNLB$WPZmRLX?PNsC#~yn2T343ASmXd|(Pij7Psv=l(-TgA_RTP~4XgBA3m45nI{W(mK!OON=*GLgD0?v0 z?JF2l=y|W}hIr8vf6EU7suvU8L@MW@*M1Gi07m#Np0$haWXaOP z6c@IW1XtqaQHxHN70a21Uf%4IE({M6T;|$#vaGCh8-j^=f)7&^7t3Z(9qWhQKr7BB zses_p+Jb`mXKG+wD{+Hain^wo^@Pv^QZ=V$DM5sv;IRMZHdAGZ2;h1-@2vxQaw1w8 zwS$dDI8-b>0HH>DY{|3UYIT`l{Q%4)0OgcM5}4ZMcv7gd&L9YE@QMR6HHX6vk^fNfUxFk_1MkY$_Ig&9m1{45G2 zBg?P&q-hLx$ZvL~!4FM-;YvGay`MmJif$PrE30=A;81>TO z-m9bdj5|&kKUfvmC25&6a+qw6zg&u4upURAy%ARz&BIQ&Nn4d9i`*k6lfMQX7GB}S zO`kw^T{2Ct#*~WDD`b&*b?5seg|NPhn2na|w?lfBt&vQx%b$!?N|LQBfcS4=%1HyJ z1p{<}Y9wVO&+nDArIilS8t&X=ADWOwAiCDqE1P8tveQM@TIGmKsw4AzycA#ynmw*6 zugo)D!Lf5-g*UL%b!e!@KpkB^<3o(d6?Nk4lxZmm@L?+C~m_)sq#{Bgj-6i*4D>t zPHD#2)RT4?vq=mQA}!&#?of_8736U1wj&Ww;RTx{0cPanUsE!I45TU6J?G!lVF5DbOhRZ z3m0oVlDh<8id}3ht0)7(bbv*(JESR9YX?b$tU@&!LHp9Wgp1~mAev1|V9+Jovp9l7 zg55K*ftPLu6X;Bw_5M;^kAR^l!6S#V`%s5;^ycLK2qpSEhBohVT|0p4^Qw|f-fAlT`Re$6udV*nMQD+o33eEBfk4|Es$UP ziCYrlVMoP{cFG~sk1M!^$_T{l8}N`it3RYIa|z>hIah!L7*_n?Sf#=#j#_V289nx}~%unpX3Es1q0ps+#A z`qjTrAQJrDNbE~=c}Blkbcql5&@7VMVqoo>y+OeDKB1AvPxCFliBGj8wC(Hh2PF4T z;KJ&U5Qn;e9`l{oe7ewA-q}mh?JG8q3KI>fuJYSyHC(knPQ13yevH%eVZ^mOIM70~ zWre)-wF^DCaT;d<>$g2Qm)k-Cd~O0OH!>F_J8RAQt}D7~qrI2azWSp2+C^Y$%Ttt2 zSDR}`VXK3_)FK3Z?x#}D5V9bP#RjUjb@$EdCrx|TC660E8zRYW?>}sv)3BuAxOm$& z%7dsW8Cr(?)!&z>J$&_g!&o~NnH}x0AH#vEnW9n6qynA#s=lwbsH5;W4L+CL zV+MJ3vczf&cHxXkD!76qr^SMcCqgnH{}4TW5-gqGPxhw9XhFQ6QBV#7Mxi zefNppE?ak35SXf3jvN>ALBqk>Q|2l~ud&)}mi>89n~IbsO$VH&G5ZbMng#9lXQwGO znV?~bsRB9bMA4HJzf-kO$7zAyzkQ+MtgpkucZd;kS{4ZCW5jpGs42w zl=&sR!U?3Vms^Fj#rV3Vm~I1qA6HluLpJ~yhko&+iIIwt^rxh3&ewr6?eq7){fxK2 zp|tcS(nF*jj0H{p+6c}D1Fj!^G`Ud!!uo`9@+aq~x7{EV*iF=zgrTWkd z$nt7w{3WCv^R9c6?@;yDd3+1%xAfarVGDk8?uAb8>$U7tR0{A})&8gr=xmnoi)A;g z9^o^QeC5}0Lo^@-bl#8m`aiEUd)FQ=wi z(iUdX!b!dYTV61=mOxO3i@nR`$cu(ih>T&BPR$^eiw=pakh5Xd)V8l8W4PP`=BE-d zT9`73rtUSh;-xmfD;mg}gz9%78k{sq{lM1K%NZzfmU-^-k!&NTvW{!94#$q?O$E_!9fcFhe46QR@O9IdmjI zRk1pRMl{wC-ylYKu~`b;wPEm!SNh6z^}2x;=B&#vPi3>4+)G-fBD58Zg+2O(Lr;0P zpED3Btg%q*rt-s9E7=|AL@@&6s>QQ5N1c^xsF)o{Ei*=Ro!&RexUh{+UdD;|l;pHf z)RKC7KL&3~7uWd_*;&}DP5n;y*kZo~t!(i$1xP{~Y5sIBYK8SJEk8M^UN>Pu*!)F0Lcz^Y zs|IcF0B*r$Y2HlOkMMINmGl;S6ysOuvwPztk%{<6AK63WSrZh^5vSEJ0bv<^GEFLr z!W!0*Mp4e5Ctj5df`OF^I4f^la4-CQt#*R?T29N{Z@FwI#6?Rb>}Pi}rwldMnd)Z- z6gC`8sKrCs>+_NYIxXc@uq-!_a+`&R{Xa8AQ9oj-zHKerw&}>|&BI3NKd#rzkh@d7 zAREWwt6ilI=Zvq@o7Yf4Uu8Ro-VH|=)Mg?NOa!K}E9V4pqK?XHb&|vW-C3+|{)wYr zg=1%DkDei{+vF@EKh7af@GU7y(?rmA6YPi@{!TC|%-&2!hoAyEHf9Ch?} zTDrM#{UFgc#R}`B@QD8%a7>7Y5ZislH|tRTQy5LkAz!PmioTl58o7&PbRl|EETnuq zDcuIeTJzk=Usz2|i>8H=X$CBZpQLwuT;+e2T(z;zMyRy-h_|BQW<^3uJ4E+v`Yj~DS$c3>M!TV3G0RKY3&*~fSJFoEXCpz48Zv@_x*vNPO z{m7@d=xCps=<{Hwd&Ho9`i6r#5v5NM^cY%~4Z%sD-vUnNpILR6>{J##W%Bdd!`Z6c zlbh6?S@7NY?r|7`KH5Y)RA}!&&Ck~DXKQON8)rXfw0YBLTsWgYP)c8Dg*S{=ND;7B z6NDNQQerr>qb|_%B3o4z3|k$({`wo(Znu~hDyG(04C8>{J$Ab-8AIqBc)wt?+CV#p z?ad8LAg3dRz4605O^6|2nP;fVAt=oS-VsokEn+I9A19!L=7ZVAmHu;yLm^ha=A))J9-o&_U8X-k>7=~=_AVo$xIcteLAw;=h-sNP^;XbQdAykWm6&~A|auwNg9M)1pVGan`h=y3}xObCuihzqL>oP zvJ$&|5h9V8P3~NUWtp*Bbv*0cf7WuI>%HF-)r!I@_sWZxFR7_q=6!xKJ8@~PDP<|_ zQ83X^@}NE3j-|;WcxyJ=BmsGCO^s%RNCj(up%% z4+?I2n6&c{8}^fQ*(l=ePC=<<0WCKI2c6@g5rw_CyS!V7lMyq2DSk|6IHkLl3-HwJ z_gL%tXw=@RBKvIByziX7?413g(fW0x)wN|dv8E7qXeh))<^tB399vg03)is!aMLzu z*&}!wC&WZaINRH8)(NJ022zik+goTwWTC2RkN`|<9HAoMV?>yx6Ch&+NQ-gj+kb8 zuA7^eSg%$HG1Bas2~M}Sw>j8A3as3lVr__GBQwpM{sWbZlFTBzs>U?W7>1GDs}dD? zK_7gf0~TUZ;sPkE7s;h4QgL8Jf{G|fk!qfU4#UTpoF|O;#V?r!zbrGl)hZi~P~j#> zyc|CS&-RbO%YG~u#=OGjxiD#@^Yi(AM(;3=2!W82i_HeZIFfva3qSd}65=2TPF>gJ zEH*DRySB(1p51Os#witD$CR~6T`&|8%M1r4*oL~%&Fh)=BTRoV}oU$F^nUog&3mqJVPrDrB!y#Ng&CFUNq}uX}2!W z*;KeR?RGmnQ`;-h9G9PZj=QoC7Lm>R%`VAj=D3R zaT|Wzyi9BtNdCx18{BShdEq9gouKs^AqI@ohn5%S!PVrh!}~K)wWIEfXGHlidNgUsB6}l^0;8%0j>D` zyWAx&KJcv79u#DOiHBk0gdImvX)*H*!Na;b7xrnIbBDLv?XX&{;0KDtlk-*8Rd$!M z9Iy~|%!xni^@iblf_GzxP>vv0?-wG|SqrTV+P1+k9Hs@y1_QtzN_IArocdjVK%|o5 zD;uhX5rCQ?$3yS}=q#NF=l3EJ7??(*~pR2)ykg9dfNd_f9nI?aeK z9_w(rxRu)0MB(Y>?>VTF;AHdTiek7AQO^ZB-F=Vxp3YT2*0q-Ze$_Q^N$9$Px-=SZ zS*<^-mAcegy{Eb8X~nKbmcnYq;i+bLR?GyfHF);yb)LuVptZtkwZYZZ75>go|1`0L zV<6kWBfnVsT6ks@11gqm1VyvQnk6n;W=L#KuM{P!O!J&|sj+gjNW_@QOwKuy<1ibu z?|VdE=)CvTC2Lw3_onqk1gh&Qzu$SLqFA{q>oJFM%mr8q%Ho$CjxHMqYYdblrmc^G z=A5p|MMSi+k`6@Vn}s(w7G1Z(Znw)4AYt%2XEWhQyo+OqY%I|r#E?CcCFAyXwaMhwNfO>Vwhc0j7TqGl?kk2R5**NBx7#6xfM7Jw(Jf-!@n*c`MV9$IP$gTv*8C_H-Wvjr))Dx#XRm`GepeO9)_3am-CW8r}t>u z7Av+d;%k zwqcDsjTY=N-1v*YGX5km^8?Ux4yIN1)w{>zj$S{Z+f+v#=N*sZM~oEiE6{fyt8|{i zN)nGgDzfTy7wgh#^g{kU?IY*_4VQmc1AxulXJ-EzUIUKdU>sXD-ZOK36?i!R{jzP} zY%23w*Hj;vgez;*J4WlzD5WlqR-e(DZn}NdCo^=Ci&W6cz!;6TZSnE*=Xs&8T#atE zf@A5zJkRL+Ev99`$1gs{I1uzzRW-KT9-H+FZPQ`5yTv$BfuIPoInQ{J66R^7*f{pC zHO8W$tHU<3exokSYvZhFu`OZkE<#QAV1tRl0JAE zp%l3+)pd~N*rjU!7|$>+ zAwMB+d?Q230>R6MR?feeVsss$3ESIkcEX|!sR2@gvkvaUVaG(QnK=kmRl&1ai=;}4 zK3z7JAq4b&kE(J-64i{lUc>OLUC@@MX>$A{ZI}|TKYagWVP#@8C-FM4z)uT|b@z6_ zkIjKUjl%lWCu9_1*Y}yBOU25e?*~fcVH?4D z8ad@>1tfw&g$1pQhEW#AI?M~Ph^--~tmxyu3ycZLkkLQEo^_V)7)x2L#2TJ6RBDaE z%+`$^yGo7Ylwo9nE6Jg2$uWSmackJ5pNi7LL@yzO`4Bn!&vW+ef(3wI=G+a7tfp<7 zY-EvA!WhTg*+%XWLWRdZo-IfAiUt@4IsSv;+o{O7i9Ffggg zdrzB)j#7#GU0*Co`e5cM5+d1D2nQghl>M{Culja-i;K+#xnj)(>o3ck;cHzHd_44? z-OXYi?GPhS*4pz5xaJDVB{27Rf&Fd#@IX z{^WV8h(-XN)I9+M`Y9dkiP>vDpG9|jCu21wTNJu<%9B`Sl{eL6ZBx>WQfnX`8hu3h zKzF;$3=`j-3qMq3^*uzhgWsXhb@x_V*)JHSubjqbjn?ldr7nzCA82uw;4VxlpsC4_ z-muN`G))Ms&6CA)v$@QRrqa*J%5b8aWEe-pn6T@6I9p-6+hVicpswn?GjCc;=`Ma@ zOG2A9p0aBV!RJV~d75BbLj@s4th;r-@#cw=f2jM^S>m&>Rpa74St~m7!ln6`&N2-l zXVi6rz&4Enhvhjl_6*p>F=*0F$ST#gZI*nb6m#f2&G!NoDE_(D8cw3eq$U&BTWtSio=~r)ml}C7IbaO@o`8TMlYx=-iPk z$!Ho0BmkP7n~c_&=Y=EwkQ1P`Tk5JD&o&Kb3@_eey;^7TRNwcAksP1Ub^G}u>!X7Y z&_)wU4RbCea{j$v*a0dYbc{>#IiP?mIy;Ol2aZxQs|7>%GMf!PWMdF1sO1K6KbNM* z$u*F;NDmBsi;POTRxwi<`kq29+AfD#xXNWcE&vP+eV23HuItbbLx~V#;J@e1K#Y0* zF7Ln0G?x2YQj>&LEhvYiMG?|q@&+gr2uW2{{C&rXM-hHgtDv5h5EF;w`vY#J~98{We`BHM4 zMml$jpJH3#ec^RVyFE+9Bg zupw6}g~-LtIfs6?Be>5P%nN19dhcNaIRMpFjm_qQHL;1i*&4f{CmB%J<;Ab6Dw4~{ zNbkyy zRgRg_yS^tfSyhqeZ&eWqjfqE+?jv(|no6Xs#TJ`F35Fnf5EYg6dX1)O2uZPq=cFE8 z*P&`EtX2fu%H|JBk?e@)m^A;S#a5t8%OMUjbDUT%BSn9jChp374w46lDGfu9rlA7X zxfO11Ugl1;XGsJv@A9TzFrVAazufoc!+)hCNZxUZLQsClH=eS!kslJSeD7i1<5E z$nM#YRO$qS7)VN3zZqI~E*%k(lIB^o5!kpew9wQcr~78E4;n`loohOP)$hE2x~f;T zU9a2fvyHRw8m+G?jW24g-_S~38?8Q2Wbg}XI9oH)e9R~SoDsUYxWLVe8$?7@U5mD+ zi@a`|yeqHk7B6pJVhI6DzePV1bF*tYZ2K*pI-lTEfHibuHFeAG)e3&;$)KL2>a4X{ z8!Nf9OZ-!W&p*x^ zi_Y0gBF?%-zM6UfBoPdc@>r8u>r@6nGvx~9wb z1DR3OczN?OC-gX7VHzibaCx_038QynO)w|v#F#LRLza9*UWm2PFpFn~x8a1DfZ&Og zW2`~t2!0#J9u?0ymt|&ydW%lA@XJCAC(Dt^CFxJOeE< z(jk(h5@vSJVHiiWoL=QB$6nhkfs65A#xDg@nEpAuUh;+u{jd~6l8H6ByCwIjm=m++ zo123LwH$}YfAe!OgIb7FF-GPW47r%fhD6}#rfD$@eG%)Zv;VVFq|>JP?tX0$#H5t( z3BgP(D&=u)Lp+C%e*Wj_TJ{rAq@+eA&`UV|&Exz2D5@>*#Rr z(KVYg#9TdT4*Phw%jd2#hXpwCyjGb54oVH>4np12DHo_Ct3`VAF-CKb*7Z)5-UHC_ zi2}P1qHikGU3T?nYiHlF3fGm4I@E*|z7*|2@4I*axV$2|rl-x*i1BVcBad8333>Lkkb95TFyB(#l02vbNcRf-E z)ULv_t7}Zl%n}Zt7a=K)43@L^$?vBi45#`g9WK6p4qd9X4kuj{%9UI;)U zJ+t9r(G@0klaF>6on@X`xQ+hfR_fzuoSkWWMGsY#wdMj9B$LTTSj= zzEsYx6>H3y1L#RYwxC;ed4xd4(C1=EB&_;iQTM^4Y1%9oBa}=rfy%Q1386>JGG~&W z$j!=Gt>=R7?UD&|G6Pjd&SO%z`(eN|&v1MWrNgcG+9ooQ<{~>Cz~8{W8#G2^p7suU zIUR}T*ue)Psr3Vq>rzhzozIn^FScN!kK>r{&&VSIDah;fni%3m@he9+q=_eQX-Pt& zP1$h3c9y~|NR|}$VHk5_mtsQ>z8Mg?3nv7l!}fNYpUWCD0-+HQAR<)qx*o_2`w8>C z;{qJ-(f=mE$qX{NqB!h#EcdgRKSfA+|K5yY7u#2|hCBhuS7m{g!le($NHqtW9}ttM zz;bk+N-?Qa6kG0UiN$@1fKUX>XrZxJi*6Pbz zt1GSb8%C?oDuvo`f}U2yA|~%%@+NMYntW)N8S~6eHMK+6(5x-RgmE58BBC|MX+{hQ z+ufFZg)Krz7^aarsj!zyc<$;dR}=KekQhlVsFQA+7S31-bq^7So_E#;}^LWG32qiolCrot|}e7W40Wr5{Qg0+EOi{fg%Ld7}oa8-q>Qg|`H%o_{O@)XK-CCD`d(r53bBL;xySuS}X z#{y2Rco9|8#8N3Lsy^;#q0=1p zEPIJg2((#AJoXR>o5)idUAMxrEV-zP)QNIQsM~Z*fNI(%!`Wp=II}L;FP@PK+RzDM zspJ#vXP`_(<8z#$R$2JD>lMP0K*z2Ucy~rhL{9VzLGY!?i>$k{c_9;$y@5+P){tT+ zjB2_!`b>-}y`ZJzZrc_&?0YWPO4+RnL%d;Twpf&w#wdaY#7OLHk(5#KS7@6STh^ot zszvslwBeMWxyoUj$mpbL>O9tP&Sp2Qd7hsPL6<)>x!Ah0zdcNXc_eK|JyLMhJw-a* ztA(W%^jHFv?jcAW9hJJ<)hc~JT&k5yDXDrtUps_~sk<@hs7R)iG|ys1)})01l}g{@ zyNqRh0z%f*!AkKzBuZJM-D~US182<})|l(ss1LMKm&T~KwASxwpw&dMrkmF96G$pY zsU#Y-D8&?z5fPsL%!3eJ(Tlp~q&m$<~0By-F8* zZK)V2<1n!?02I(MnaSA-{j}wUmWz6Xh+qZour+|l zux`lgV=|<0P>LA3RaL(~B^p`lGSoMX6RLuY6WQ3m zs%zGBlD3r~yO4FkQe+qJ^Tt3-5Cr+y-|A|w5fwPtIrRMwP1CT%Br;h`=g(NxB-imi zASGe|i<6a{F9~yBJO#IJHXBaYne*2ZLV&4i)J;v-7SCL>dru~Y#Y~2CJnJ5Y9@g0m z;YvusJX0ExK;`7FHD=;Zwr5n*oeeA*^Z6Pqz1zouy2hqyvMfppjF>@0Tf`W# zUav{ZEqsGQdwhF)i>9HC$a=lTcDp?|4`tyeiBZLcn7Vb*N0*P6-|@T#0mzWNXyeO{ zlKcfUmU$+Ul~`Ubo_wdZMnue-Vu^sXc+|ANVi_qF19yUi^#pD0QwdP%AtIPkcg={E zF{hlK_%&TRP2@UZYJAwiBBglf8_b&abOaH{7!R1hydMx`K_9V-HST259?xgZiM(1K z7%OGoxM;u2S@X35XE${J#0`en)NVWkxk&sK~v2r=aavaTKa ze#FJaCL8nDHJR1l+}>cE26#`ttIjxVhb?Yy9oDNg+PZ~bJa$8$4Hyz@-jw2w2MShO z?8YsOwb=Gsthx?HTbj=@gsP3fZntG(OP@&}iXp>!o_GgqbL^P4dxT#MC6H+Mzgn%( zcp~piGtFp~===tPzKqs+o=7udl2FuDg?XCLwJn^rxM2d1bSgGRD5%`|$n3VVdrjiJ z%xLNsS{pon@%#=sijs*8#p8i&_XJ+nO6AzUd0Eh{R%p8pJ-b&`j&AOz?Q*tlDzGJ5 zFh#pbI#6OVr|jKKh&UBtZ3y9r(ZiSq)|rA2>2fEuaLSI>I5rFxZSvNT|HPwuy~30ARb@!SRNOkQ$$L%>t`SfsK)1 zet93+upi{PEP(}!Uog!R>ZZox2|Wlgz`~;6?a;IhHk%E$+bx;*dyma}!&+B{mOWWb z=B(Vs=AvBAQA3C@hM@30qaCo$!a9qQyQs+Tn~X8~d~O7Kc7=(>yihnt+qSUFf@#_p z8=njIK2nehs?VF2GWcE`vI2yGGvpdJbdIxeF8t6&D_NLiT$n%k_|alpc}eJSabU zG7N1Dfa<`{R!;9px2pa3rd*7wc$;N`Rh+JJz%VXIPB_xS>cW)bLCCoLH>He9>5gq; zhKk?1Y`@~HxpGFo<+T2sG3v@{^`2JxEhubUQD7;)P9uhZs-oSTR%8>m_`tI%gUx!) z#^^ThH0RmlA@AkjeJ1uy43)~IB#VbQ z-w2GI2`D~f(|58{B-S($#3YuIWDGudI70#U(==hVUZbjOJpcIP{chS?Onnb)cqbiG z_GX@@8L2?b+O9=a?K^dHc?tj`j|v3hn{zRvpE)+X032xHO*|Kq&)5$mF4)kaY02xD zK9?cl3^P%|b8W}YR1)j96bpG^2rq$P@lqlsorWx=d%Y@==!9V8IfcfDz?}ra<&|?> zG$T7D?c?l}Qds7h(|-&n-IzVR8WU_~i;c;i^(tCTnN2r!gFg2BUI}6hY*E=XEk+Cn zQmlEJ2~}a8D6xNQG))VorwoD0c#cLLKCe!m&(S>5cS!dIUAq(C2TEXcK1ULKA>ArL z_6w?5bAjEXELBxw9EY4TC6Xh#=j7bcXNXyo3#GD5Npoam;GhC2crr^B8IQohay?41 z5)vAvC#}gQbh|z9Sr+1yY;Kpr*{Uq80;li0_>hZo$?6uCbJwjfjziuUNnI$-ZOY&6 zx)!@#e<1%#F=Fx_+R)6`GD;@b+2TE~*ZUd1QVNPUAeLDraGYp!+R>OO(eF5;KWntQGFpAcDD?)Ey0pAtAp{1SNgC7EHTq$Ij=;0a3yyZ%q91y= zuEXW!hB_mj^-R-@7ca-0N|R+QEL2y#5DwEo`K&T;F$PQYnEZ^|)jad`d43W?ga*xe zr-c^3i;E5Ve!$T0pjj)bYXjpPlUqF6mW=G9_n5{JfuECZycM?F9kkI{bt}GcVutiY zf4W+&X?{A-n5Ky%_{f}L*Y|jKeT@_&s=6k+61+#n_=yw~AxVW0 z(GNYDdUPFbZ*OzgAUoxY&4wA3Gg4x6c8o|�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%0A_#trX&}SgOfFQUml39{ezh%g|F$RNFw0xo} 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 literal 0 HcmV?d00001 diff --git a/tsrxns/res/drawable-hdpi/new_note_pressed.png b/tsrxns/res/drawable-hdpi/new_note_pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..c7489362c9809fff748149c72fd927b27c9871d3 GIT binary patch literal 90126 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 BQtE)ii5P5i05$W&ov$xCC9R2x(7B)oHDR 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 QxT6g~Q&mr;TFLJHe@{=aV*mgE literal 0 HcmV?d00001 diff --git a/tsrxns/res/drawable-hdpi/notification.png b/tsrxns/res/drawable-hdpi/notification.png new file mode 100644 index 0000000000000000000000000000000000000000..b13ab4a9232b11f23a3eda4c4c80e543e6802c7d GIT binary patch literal 3107 zcmV+;4BYdHP)KLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C z0Z>UqK~#9!?3cYt13?hSf6){o#B_Op)DlT)3X>w0jflO^kS=)!-@(R0D}^+6fuJBZ z7K(+fZCWAd<-(~#kZpCJ< zMb|Zzi2_*irxlA}uJ^H2TGNO_Y-J4>#Rf%F>?t?Gv`C7b8S#bq2Jqqm)v&oKLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C z0Ru@yK~#9!?3ghM!Y~wuzlwr`vx827;^^Xagl;YlE*`)GxVpF%Jb{;Rau8RcyMq@f zQkN(ltflE|d0_tKHPAF)-k&tD4YDjlqdF*+2lHSaOq;r8H!POxd@}+}%`p=o2H5Ym zVi_|6$uJ@rD^P4_UKJ=3v$DXx$iccqdhwe!tgB;X)mfX0nRN!sLk)l#Ft*pDlD?ZS z?a%I%TKs)r1@xM<*ad8Ap`O46I0JVem9*FeY+~aTI6A&y8#$7OHlDPdl>-|e+Q8m@ zQf*+q9`j&-2NtR-t#g`d%h*lj#|UsJC}BcJ=uq0qR;_i}l~UIJd`{s1k9jZ;rcAE^ Y0NbM{;)bwtBLDyZ07*qoM6N<$f~1kZuK)l5 literal 0 HcmV?d00001 diff --git a/tsrxns/res/drawable-hdpi/selected.png b/tsrxns/res/drawable-hdpi/selected.png new file mode 100644 index 0000000000000000000000000000000000000000..b889bef091f6f8bb3630195a02f908db4b0b17de GIT binary patch literal 4959 zcmV-l6QJygP)I00009a7bBm000XU z000XU0RWnu7ytkYO=&|zP*7-ZbZ>KLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C z2#iTYK~#9!?3in89Mu)afA`***@xG!*xAIf;{?JhB`F|6rKV5`5+0)J0~I7tTD27r zQK6!KpjAPw)DNgs^g~fa(-w-tQ=-sRR7#;xD5T+4wNQ}|Ok&4Q>^OdVz3K*MT{>^VS1a&-(KDOZ&srZ)TI9obf zJBd3nn&M5hrx`=Ol&9bp+5XhVX|2tl-F)!Nr|#_gC<1m$DDg4(1R%CObisyXo4s>Y zXV)b?ojtTSw^H)w2y_KED1@CAaVv!_6DSgl&5Y4E+!yG;JUsYL_D6r;F;WEdsgx2Q z1ERkD`wMS$67tdYz3UV0Z3(iKai&Wnm{UwLu99>lSJUdO;>g$tLt{h#&W=}adiDp0 zj)g!Asw5Txk%0WpqZe-PS=sf_%8un!#3a+DtYtvgvGcIm6-6!xJ;Z?iIW4 z?H^hUNG+zwH-5c-Ydoc%IJ>)7X8a?}mM781U<{{izV^wwGo+F+TH@)HD+^aywtRZ@ zK*3uGUM&Q&<*wD~^t!|=XLt7|3wo5So52{fB+JhUh6gPA_dA%_9Ifrp>~yAME4`lo zJU_L2p_L{VaF5lqF?G+Xj;{8KnIcol5CmpPHZv(X_!xZ*B0ZM>93(#F>=0K>BbJpJwt zTGJkWplMDeReNvsdSC|-)YXZ)Nu`$CaUsklQb5iv;CnDPZP6*$^YzQW$trUI&-hc+NBHicpYp*kX} zjJoJ+%g&KX+S+J*Kj8S0B%6D$Ewv z+c@XEbx13~(`5igrjPRTT|dEYnIYL65Cl;1sz_mDFl#~>uO7r!Bxa{_yKOmQHy2Y|IrmvFFf3*%HqVdi7TbA19oKnDiU1hE-*y}y$?yYEKH8h7)uIM;9bD*3l( zX^FRU^~NvLy*iCgWj++gGow7X`+i7daN;LG00LnM(D;6!>mt+{>SPw+q|#QhV_odF zWXhpbEu*Y}+2R!AnQ=Dseim(fwDC!%99AXQaDMmstmtmX;LqP1nHgfoUmqZ_=5S&G zm|8{Gy0+qMX`ur_ey(!3|JD3+p_>9g%V^>`_;P;2t#~Eh*9fD~+F-|gJ{WzA-S0k& zr`>s5vAT`+6-_7oc6g$X-@W_`v^9tA1Q-L_7__dH2dxcCIJmBlTlD%HYolyjqHfmT zTP##b*a@_*4PZF|Z}z{)zXtc>8+Sn)oa|%g>%T%@tF+p0= z!q)-$e7Q34YT@<9sx2eM$^d%swest^tef+yK1nB8n;9U4K`4)1?>x?Uc7(uG2~3rP zWBb_k&SNOs!?HwVOD5)>U~0*mgp(kbD^tq&FU<6N_3W#oKD+A3$XS$3`>-l{ey zlQF8=tBorJLV_Wn@7O+k?QvvkfLA}*jpcxn0wFl5_89;pFhJajgBDDTW!*zBlRROc*vqdKQOOFn`=)MwyR3fX%sK%-dsGx%IEBak0?O&HnIq{}M5?}jBDdtUC z5@kuG6gAa^K!i|&6E3o(Mcj^)%@i3O$o}KK-HBMcE&DL@sD>!OUCem`Eh zGMTdNR5DSE8v#NJqzJ*n&v_tf@gjhj9mA3~vr`2|`ZMnzc&hS4-z6V`sfIA75$2>5 z0U+lF^<=fE-wvAG&&Lv~xuqq6V_P-1NHedJ5E3bCaV3SoQ8u<^<5vU5Mzb9KaPFlK zpY-mn=1evOsl#}Ys*PG?V?Ga595=b_kp7#WD7R*Eg>x;-67jfAJZ58C3R@{GOJPZc zr4&*~iUpsEu{;BPQ<>xY$`2lV#(zY66oFD`m1yABVH%IA^&obD1dt3Z0mRzZi#5wH z5?_k7i!U~}IX&^DO{yhct2w@*P;kj-%D$U3@0F*_8>4&lOVu3tP=!*&>Z zbj?zZxARLqRH?3(ioisbsn6DrSQJ8^>LtKw9sC<}P{c*DVT?LZ&|vyhXYA8~SqMrr zK*$B$Y#JV}Pxn2ISi<>CG{7}pvw#bh^s-3s$=hQ8HJ^AuV+@~`CixV#Gcadh&cK|3 d`G2?n4gk{6qGtTx4?F+>002ovPDHLkV1l;rn*9I( literal 0 HcmV?d00001 diff --git a/tsrxns/res/drawable-hdpi/title_alert.png b/tsrxns/res/drawable-hdpi/title_alert.png new file mode 100644 index 0000000000000000000000000000000000000000..544ee9ca6c956b580dce42e5bc1bf3192b64face GIT binary patch literal 3696 zcmV-$4v+DPP)KLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C z1D#1kK~#9!j8xG}TXz)xe)oEl-Mg6N+8YI9R*6xpbF`wwGN{QC-3SVW3`>U$AEZgB zD6I@ObYtMdWCX>?L_vnW6&COxP*@rI63iHwFk;v+Le&h}+Rf0I)|@@`D%W7B2M*ld zIp6)xx#ynW2V8Cf02|(JHUI(F1bo1)!>U(~_zY4%@#+ak0r)Mq_iM;Und=k&| zF2h=0yB9WLPqVu^) zlGH0nQs3E`h~7`7Qr{U2hM+9VeMDrQo}Qj)XlMum;6OxNHk}n31>J6UNE;)f>+|#T-v9^zP?E`He>R()B%+ElfSHICr_*@{KwxKQ=hM>N z@_M}wya*Ew zaesfG0NhYr0f3sCn)SA}Hl0qVvjX@Fz;gf>F9;Ed7K?>3#{Rx=V{En$5{X1nJ>CHT zS(g6;@B~24Xf#r>SiG>37l`ZX>V&nmwL<9__V)J7p-?D>LZNB^uvjcdXZcJf z^V;cja%G7-Iywp~D=Qp;DgftQGsf15$g1L>sNo|uR|%jvG&DqI6(yNWdL>B;+3oh; zD+myX2#TWg34##Z-rnxhicl%g91e#k)b(*(fx8(%U~+PDoQRaN!~k$|a? z4h{|)Baw*CWHN;Tyeg+|T5>&r2OAq3b#rrb2hnKsr8eK+-!Bdi57)X}u4e##REy)S z#F_$a09*iW?C$Qq1c3VbdJ(|y0Db}RYq@tBu4wAIfid<>yA|c^{{aBUy@kkS1kJRmEF2>@>CyjE4!*LQUFa`kj{b>n!ds>BE7>tTT&b3zq`GCF?rFlp0j>A~pZUxXiiS;asC)&3K>Mo)pWK zlb+2@r@2m`Jwy%w%x5FtucRL%*4MC0Yxe8TyGLDxSI|9IE=A7$g{zi0d_sU)cX)Tk za&>irz^wJyi;QfW*XBd( zgOymt>xWCOi?P8cH?LP1|2@DxODVGoRTTc$-P#3?G)P!S6RL>0oUU_U^}G%Fn{a<* z`B4o-i2mI^IHp0LOQ*-L(I82UvoCd-b|XZ5pFQm_X|fLmP#LL*(yb$@MLVN{cku9I zDZ!&~Kq>f8IF6Yt37~d(B<^<#0LkrViAsWaz+n2v6#!`Y%>*e;Vbtyh0f1UTm_W5M z3HkTil_<)b?`$n7Mto~xH6?N$lsvTxF*cO-)(56EY69j0nye-2Z{NkF zDb^QhAz?T-Mq(?bybh+8NK!)OUJ#u%r))HhO~Mq{5Qs4|fso5u^U?dzj~pA(x1V!$ z^?H27FH>&k?Uj zR2HFWh0qb^Z+8_!>k3Oop8fXr0)pNp*oKaXQQF5%TSMZa)U9H`%zQlzwyR(XlSBzy zHn0?&o&}X>y$j;Oj}4{U0=$~R1>2q{L%2E;wbg& z9Bn=v0@gQ=1$_yv*Yqqp2m;I{mRLVDvYTrUYZ1bdSd)lf2EA{7emE(8Jlr) znIv+^z{em_fB3m&QJdx8H|Mq#Un1W=DTvf8GP14jz7x;M&@KLIAFMLrVM2ftf@bL0 zn14Cj(uNaVu)swFv<+1~%k3-elk9WX+z0U}yK5HrWTtbphB${Ph602MgdYpnOgL59 zR|Qu|&G^r>&Dd;vY%^@*W_G>Za+Pw0a*t(UvZvmpO_EK|o8C5IyoWax$82$a8>Gkm z$CMj$BO1rBqoQNR&E1LJ5q7Buk3f=$JI-R#wtE8z+uzWP*9{|k5lf{sXve0cPRF8= zr$zS~_;#WkRwR5G740isS#2sG&A*z3%3IsK7RP+-{MdzUyFZu$&9ZMA`8MV?FwiSB zTRBzPx0N6>o&(LZZkukwT*kjGR?q3uij|D*Nt;OvL=&ayq@7k~m?)a~nH-x;Rz978 z;Dm6n2~%f%7Sn9_d z!b;wixa9kzQ&*XHnnr8Kj*GIJvuCTOVZY`E6uN>cE_6h)S^6w~DC{a9?VW;`-3L~3 zOR`Hk4iW33FX1m=yu4_=tM@gBFK^-jtQXU1zSxQmu##0&cy&IsL7>>Jh@bDDAJz7$ zjcY-njXQWEI5U{!GVem}9Q`-(Py3SJ0mHs7krm!|yj8r`Fy^qY1W*EY!c4+q5(%Ps zqGn=Iaz%O-a#D&H>>kOkD8>VpGuwx=4nkQY^!=b*dNY>u2LpWCcPD5PB8Nc>)WNQw z&a^iM>Oj$p8qU!T?62=+GM)w9zAqqNF0%Rjo1vGx*QwA%CHBRILu()zLEP-$3$&nzH)fleOg#1B_}1P$bjN? z+Bd<;2lf2*diH{X$rM<>HCR7Oa#a5*mix@}5JT_$R(quAn*mavl0jRvRM6L)$=tU= zvsKgV*TV(-tIacRvNsHYt%z#Mw&0j1QdrW)Bh!!bgjXRR!OeK1wZ1=|j69kIWiv>8(@kjCY;V$IVSb1Q=5- zE8Qwfk$ROHm9{a&&X6Ci(`?qnLxQ{rO%F`F^pS4<@l*fNY?om{+?8mRN zSi-dCy*~Im9VZNa8|)t>kg%56HXo>~#2kE(EIRSe4Y5F*{H>~}Z=2?unP{K$2{@z- zXQP*!-%Z(SsTK4!g|?~(9lMO~yqQa6wqa>%UkjdV(D2dg%1aC=4j?&E-^Dq3xjN5& zZg2lW3Nw(5zpE+hwwfL4I+MMft-W6N1_3n{KG|el>qrMDH?lhxa_)p0_niDQDPocD*Sg!i#ZvFWH^CtbE?gdZ&x+1P_V^6Rw%3CA1|nODM_R9u2QbYqLxNA z1~kUGpK!+~=CZT1P%yV1*bOBwm3%3o8}1J_x%R_(R;(}lUA}lW48EM&BRh*7Zb$l+ z9eV6mlzo=%;qGB?8S+!u|8!Y3gbCVh*lk+qX=Tskzf`)?KO8x??J4=GcdED^cy%dy z8gY2RJDUISX4>Si)ilrn0DoQp2n`2-v+Ena0RY|)0ASM!0Aw=&fYJ56W!Dn`AP;$} zrflRpvz4n8$7)*J6S6*EzTuMCvmy;w)UK}PQhJ9_s#Xr%T3}|NqGneS0?TtMModvh zCd$tpx*k#2I{Hp zWZ>ba$U(2<0N9oJVZeYlZ2f#k0Wb*84>d)Jwq=ewgth~wp*SUiMJoQu?IQqr-m=sj zsVY)0Tm||-P$-ng{E@QS2?-T1xSvl&Ja08rTb@I+B(j+OH8b%euFmu`2UQpu=TAFu zGY1`h)n>npShZR7woHXbe5v?58dkgX3QL5PEl=rar1LZ58cL)YSPuEwyLOC*Bi6lL zf>$^C=R|E{0eW1jcjYXn;=b6!v|6&7_@oW+woPC2POVp%=_}RLF&K{fx5qKXfxiWv zQKrMxZ>0*hQ(x;0Dq&9yo`s=`N&}vqPRs|8!Q_rvGbAWno|*jTrw>EPW)ro#4A?-3 zn&$l~@K$%rJ=IyFOlqb`)VGE`k@WD{e3iILf_MQ~q%plAE#U~)* zds3Hf#%oZh;u{gu1rEKFlZG@~yFn$hXO&!<@a9;uIp))*jfP3}{pj79+hH5OG=8pb zvS9sT@jAw9_k}I6uf9YH*rA;qK1&qSmnPRtsZR(nVjv}I%;fS<;Ef3ccCVRLK%L8q z4p4Ix1(#s8B-gWwmYiu3F)#P&ue|jfRJL|{^4T|^vSG{1qdA4FBu%_Y%LFo{8;N*$ zZLZ|*q+jyKI@eUGMYknvc^p$69Otr88f9X6`6aAGR_2}6lLg{qVr%K7#$uAgW76rF z-aR;AnqHM9p7ejjRV)0Vv$y+8+MjgFS@^PGCe)ST9%F%q5*@cTpW-_alE%sA82ug) zm*9R)IhWVOd$h)ZjKnkDnjF2?#nl~rQI1*>vrNeKMidXp@kPrvf6h9WUA}bnIC5I41LW z`W@0Hjv`tUFXNRVsGFT z(`%P$Et5Z&9XMn`z$0)QJ3L9X1}Q?f3=3qQXO(J!N%1z1D;Q*$kcyV|gb8^x@?n>w zX;r0iF97lb?;90&`;gR{ux9N&1S<|7eU450fu%A(wyTdOT}!nhZO$5Yk?jjuS^ll+O}t2DXi}%5?yTXZgy;f{0+a{Wb)%`{?S#)ppW)2 znqD9!xW`rjQG{mGc?H-maCW?AfBer{7AuR0valMQ2xjiKaE>Ig2)s@bVT(+4-qveY zhc}*+oTY%8EBW9lmz(cvirElk8SpBwY$)bQV7!2G1V!K%^r|caf*s0S=LunnmxBq5 zS0e9Y1o#Ieh&Fe2bcr@OV=0m>L`;V{@)@l8J6b|98|uP*E-tceD8EkhwZcp^0624 zzhMVWpYgji*3|eE6=+QxrG!c(uaEMMi28JtO6H|gSTd?Y?O$s-CqA=_`__0= zEu@g@kL6e4zffA0W}>|C`R+ubBgP<;^{0u*jAkON|G)HYqsC7kurrNGQjZY0uFCzx z^pMm3H1G?quXseMm(Hf&CK3|JHodyZj=jzrbTrPanTaxsd%M###^i?9jbjQ$C&o>` z7ya61In<)Az5bAn>YmKtDQey!XY~mCg-Guv_&4QcRgxKMCIOhpHTi^ zPUJDg2uZp_<8cs{)9E*?U>)X~E;^?AW&t@9EQt!?6EX2psHMjLyr*s9*$Ok=jD|fi zWyCTwy{eESvM=V2u31bP7d9rFV&QynxO(rOrQB{Bpn(Rl8dce^lQhzF+z)-1>tPom zuE_HGonkMKoKX+U)i1%$b4QMR!=sLblgKmvCRVJXD;y@dvY(R1`z~huE@Tx=j0)nC z=RN4XC>e_?c@Sa`9}J1*rSHCVXvDYL8Yjx9IM znlVvwOkyEgdFRl+h-q5CxbJMN4ySQ@$q3{e>2_>Bwvpa0mMKpRA?lu{`&@4@^S6F( zZdlQ4^H;!Ku=&Ml1&oFHQ1w|m4#C2-MM?Z0I#S`Xj_ZnrZ&qulS&R@|H*SAa18H$F zD(dj{8R{YGZtT;Y(Kdf_?SFeXKy8(|IA+6z+ zau*kuI`qv@cZylz4olTPXBVHwK3fZpR;Lar}RW7E0w52@2hcSc~!ZE>X;TIPRM0MatZL`*5-z5eoOnr8nUHuXRFa3$HKBr?&4$P4+|NdI> z{u_Q+M3e13_{3N&I%&z#s4h}VF-4@lx1Q3SKzkBrHfd1!F3Hc>;wsT0@2rEHgd_y0 z`zqKvY%@8|;MjAz(Ejb?%Ej&^UC1Rj>rO*f+}phN?TwQ5t257aksvG2L)*bXMZ{Uo z+;^+_n$4S`CXkF{I5dbY(XhB*QvTp1JpA*OOmT^)d<)u!tD+ONalSD&InH8FJRQ>*I5M9Seo#lii<_%h7e1R?lxXhRgKU6MH0AZ5@AQVL4nV3tp`< zH>Yx7^t&$g_4Qcl7@6>N=$W6K(7#>aK&4j_a9wde#J=D?xvob}{16U5nG6YMU`G#Sk+I<;Dk`TGw?ZPhUQkNETnLX{i-gYlPa5z!qWng?vJ)7Mm zOt7X|R(_XCG|S#Nmr=4#80qf64P~_S`pT0)4N6piV<)T4G;6i@#P|LDgst0BL(nx35_xF+lMa*l%Sn0@wodj2t{X5F)`e&5=AezA1U zGofjx>rzK_LZNouw*EXwqjmT0SawdxglD<`@!QbZC@95G#q-}q0jrB=hwJIrrLl~n zo1PI$S0npXRl=m4Ak@jp$-$rLuMT+9K07&zRKKz6#KXrO*VnQ;!!3wmg-Mc#HWW1P zg6cWFJL9ia{|)p-UlWA#28KKk7B>Og@@TvnlhHSA>i=EJ^ope8@+s|T_E~k(al9hK vweZF(A}@?YB%G@Ac$nX~wb-e#oeF^L&Kc?=^EGbP7T~G6t{PIs>dpTFR1u?j literal 0 HcmV?d00001 diff --git a/tsrxns/res/drawable-hdpi/widget_2x_blue.png b/tsrxns/res/drawable-hdpi/widget_2x_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..a1707f4232b0715116a668fe3792d376ba2a1fe6 GIT binary patch literal 1946 zcmeIz>pv5U9|!QsWz}&fx8=B;D23Issr@9fxsIb!b3Z0claX8&5+i0|tmWj|Tu!Fk zj%$7{A(wG7j>}9$Ih;)<_v_|z>g7E7{SUtf@9+2Z`aJkN_&)iP9UZKsj;b96002@p z)`)B0_V{;)CBDs>xEV750En?cm^(f2oF8xVQ@E-aGZoCRId@82S-WAr=%z*+V?)(_ z8{jIGG;Hw4(JoGA)+CsJoKUsfGQA-7RNr=r*Q*ZE*=T^5EZ6GfRaC2czQ5%Kp7S>Z z8yec_F$Nsbwq%H<`(K*V+nIY&R`2$sT%zcW51wUiqB$J2T#y?tV7-0-76{YmfBR6l z2h9>OZ4rj-@i(lT#u;|Z^^)~*TJfVvglH>?BWHnz)~)~Pq8zCMaTQ&;hxj7BSj&>i z2xGItVd9XzCkE%U4i$NXRvykvLf!;9<0l@TglX@#ccNudV@X!$xuOpE68Oo` zk@2Sg7*K;ADM+8F}D|7l#y2JW7eR z_d)V?9&ZI2Z}d40)Q&e#WZ9NfDjgyF+tK+Y6@FOPOS|~gWTjl~nU{Y9f<0s6r|~sn z-YHrzkP8aD6~s&L%O;ra%*L?@i*KuMC``EpehRmUfah+oJXk$;2G4g| z_;zt;Z6~jM?i^sLb0~?){MkW6TYGUgBswtSV)M>I_9BTMz0uh%c+&Zck{IM<5?@;V zERtAcpjLpwZcYG6wfwu_j5|&~sJW$5vQ$t(m+JIu8eFETz8DR1 zfnmt#+2<+ruk>tDtzDE85-*uLL>p?+o$mRfFVeok>$ggk2A8R}a*% zkM^dX?=C;sQLM~s)`;GnE&;dvNF>puZm?E8EMOzOY!qXAA8pJ4NDsll*^a2K$%#$j zE^9A~)s}fI-YsK-LuhQ?OBhZLO1Q231{jyUp}3%5)1floG;-#BnB4>E+aL7mJSXQe zc@I&#wD*NmOEdHh`f)mnl3?WvXzhO;85Lp#2c=l@ey!qMN{}J>wrCvBadx-{G`kNS z+sE&3O}^QD;oPj0s5k0(`(ik&x29p`zZK__B%U_Hf2bIBtp2pxiPQPWm$R1ra-BTs zuafV$gk5PKi;uaHf1`%W0bB2rVs7UM-7$uuguE%mHjAZMe@;p>&Jq1&Sv1#wz zj6qSPT{+M~K}}bRr^9Zd&j`YdOt?Z}ICh%2^jkgAK2yFa$=|m$Gj0*?X(7-tY$cSlwg|qrc zG;-Fy;!|i@!So-=bFDp>E~nmHk%&;RSi5&;_-f{>MC(td!o*&=gBxHJQeQ1~ zC62X!xAjys|_Tsfj?a+wunHJX->@AX)Zq(^~WV+x+(-?!; zw@zp@)q-%c#CSTrZQSkSO~2W!hUQvWil+0`u;o6}@rwNi#(0y5 literal 0 HcmV?d00001 diff --git a/tsrxns/res/drawable-hdpi/widget_2x_green.png b/tsrxns/res/drawable-hdpi/widget_2x_green.png new file mode 100644 index 0000000000000000000000000000000000000000..f86886c142f3650dbd9b06818fd3dd1b9c0696d5 GIT binary patch literal 1954 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 literal 0 HcmV?d00001 diff --git a/tsrxns/res/drawable-hdpi/widget_2x_white.png b/tsrxns/res/drawable-hdpi/widget_2x_white.png new file mode 100644 index 0000000000000000000000000000000000000000..5f0619a37a8e5ea3ddfaa84b3ef0f925e54ac887 GIT binary patch literal 1901 zcmeIz|34Fm9|!Qwv_uZO(>~eCmvZtw-woB$Y~*VZB}SVlM!sJ85*uRe40o;%GOmwG zWxj+@TRTLyw!W}cL(W>v*9y~UMvUvu{d9lB{qTIfACLDB?;l>jysrlMVKmkC)Bym1 zrk5w`_}3}=lN$JIPUKA>0f4RcUZ}%Cm$0*<$Mr(wcSMO@iV$~L>X&aN&i_rOd~=Xw zgk9J!75&KAWuid0swG6}QL^;mD&g091eK=oln|Dm(*Y5%DUCmF=S%9m*XH_JX?Xkp z)Pm%rrmwv@rqRYyfwHSBXCfs+AP=>&F}=N(rB`r=>^zVzt)ntBnXAjoa#6Y9)%N>2 zYo8^&51B#JhcLW8QQvCe-GVdPNYG2g<)ZL`AxC@+0(*PkE4_fJo5?j1apkc4vt}a; z3F^O`v>`>-6`8*b@zdS;Lap~Lr(UQ0C~-O#;} zZKS@zR>w%`$8{&z!#1Fl@YiPjO=x#39Zsk1d5o}auF+dwd~X>CVltZeN2>c+ZWl^; z_*q3J&>n#IFJFk8ojIG_pt9VB2epuf0DnUgh(ntU9Fc@g+AsshO=L}N*d`8`thosX z;(#}`0CAwd{Cn;n-M#b`9G|}E8r%lM=;XI&E@80vm^lZus^r%^9mEaKw?+$qFoaBv zR(eT4!42R(#yNuI7^>z%e8@e~-@13i%@4QRg$FhM_V(tAeXJ-GNntkl%TJt8q|)yk zRGjm@BeX%;7gi{+G|qDeYs6j47EV=>#S5YaErlCO52JAmF$@bwK}Gc|`qB@pOO1kq z8>usVamj@pj}rC8kL3R=I{%<*rm9oAii+wq5zRHtFXH0ag9L|mI-M>$Ygm6Taez`A zKymjlv~J-T1?cpvqdg4A`+q4{z1ivFir9VV_3$}ox8B99-ZU52>PIda2Qs)RADCN9 zcJu32KEEqbtd3+U=ZI+@wblj9S}5A&Mtr&}-`<$_f)N$7)4K9h6+*%-ZL2d(#}wS+ zCibxWsMcLy#)ux*uAWpVE;1P->6wA3>kh3`@80o?6Q2wZpN9Xg^#RKFsd^KKzzUIG)(&J%DDv>Kd0tefM$i`s9n88o%H7MoU&cq&g~R zo(WBQj1{Bn>_gmf*}as?4SD%UMAn8_3xs_zs@vgYCwOaTVw-MQZDNFr(4JiEaEf^i zxBc&bjBFoQ*tGbxCbA!JwnpV9H$2LXzBk2j6;`B-U3W;ZLhoYd>dvbg`Pelhz~`}C z*CPx!{^ewaUo&&yv}7nl$M`4V%*tq9UP3dI1=#{qN~QcSR4H{Sy@|WDbkQlaF&Jb{ z{()XC&YBl%ru4*bnH2c_>?DKN;#Wyh9%*b81@N(;nw@W4mmUOo5J>F6U2P9N&^i*;)CX2i-FN3$i`A;$P z(|B)Icca#b*|gC%9;8F?EZ`I>ok&3~+FdOT0S{&I50>RFAp$t|0E-p@}Pm{sEA_VKHS86 zc|$yMBEg;z{=OnPM~iwtRh3OsYPJlQ56@0>&SKg? z->}_gHK?U{A>CkqF&07Av7+^VId31UPxK{t|0p^tCRIFFIqIZ7&}?3idsi2_+eIBi zvQamUk9ud(R{m7v(occRG!TJ!UEanfk~yT8ngz*KAbo7eew=m1B(NK+wvDqTEqKquS=N z(~;R%jn`v-!qc#YKOZ!#pQPUBK%h{XuY4niHdo?ZR(po<^^F3&Jp52i?vc5F00d`# ATL1t6 literal 0 HcmV?d00001 diff --git a/tsrxns/res/drawable-hdpi/widget_2x_yellow.png b/tsrxns/res/drawable-hdpi/widget_2x_yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..12d1c2ba7b40158b5115b7bbc6ce8b6d07b67893 GIT binary patch literal 1978 zcmeIz**n{b8VB%SL{e*IP+QU^s+^X=DNT!7Y71JiCAAePN+%)cRJ6n#%R$uEmX<-w zFmq6nP@+|Wl%j}GQd?swrNmOT6(@2!<2g6yZ#Wm9_kEu4#rNX9c~hM+Xjv&WDF6Uu z?d_~xzwhxsNkG5P*~D2305}wHZ+!`S$9HM`?_q-$Dsj`RbbI6x{Ui5PJfA%u^y}<0 z53sr-gB8kFBl90>n)Ovw9#)bzE+~&aws8Alt@Q)nSTk)*gw`-qWs4j~r-!zbA*;(G zX?@(jJ~xNX0cXrN94+0mC{*?$@m~j#AMw+ZF@djZ_E}Gp_>h>Or z2~B&Ix#≥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 Sc&UT$0l?JA(y;10D(YW+)3Aa7 literal 0 HcmV?d00001 diff --git a/tsrxns/res/drawable-hdpi/widget_4x_green.png b/tsrxns/res/drawable-hdpi/widget_4x_green.png new file mode 100644 index 0000000000000000000000000000000000000000..fa8b4526faa77582794ac18bca85e8b5d7ebf512 GIT binary patch literal 4192 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 literal 0 HcmV?d00001 diff --git a/tsrxns/res/drawable-hdpi/widget_4x_yellow.png b/tsrxns/res/drawable-hdpi/widget_4x_yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..d7c5fa48dfa1fa767ce494df9555e59565b251f9 GIT binary patch literal 4199 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 sIa#C5eWch*7HE)@p6Z1vu~7Db^~Amb#kVB + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tsrxns/res/drawable/ic_launcher_foreground.xml b/tsrxns/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/tsrxns/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/tsrxns/res/drawable/new_note.xml b/tsrxns/res/drawable/new_note.xml new file mode 100644 index 0000000..2154ebc --- /dev/null +++ b/tsrxns/res/drawable/new_note.xml @@ -0,0 +1,23 @@ + + + + + + + + diff --git a/tsrxns/res/layout/account_dialog_title.xml b/tsrxns/res/layout/account_dialog_title.xml new file mode 100644 index 0000000..7717112 --- /dev/null +++ b/tsrxns/res/layout/account_dialog_title.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/tsrxns/res/layout/activity_main.xml b/tsrxns/res/layout/activity_main.xml new file mode 100644 index 0000000..86a5d97 --- /dev/null +++ b/tsrxns/res/layout/activity_main.xml @@ -0,0 +1,19 @@ + + + + + + \ No newline at end of file diff --git a/tsrxns/res/layout/add_account_text.xml b/tsrxns/res/layout/add_account_text.xml new file mode 100644 index 0000000..c799178 --- /dev/null +++ b/tsrxns/res/layout/add_account_text.xml @@ -0,0 +1,32 @@ + + + + + + + + \ No newline at end of file diff --git a/tsrxns/res/layout/datetime_picker.xml b/tsrxns/res/layout/datetime_picker.xml new file mode 100644 index 0000000..f10d592 --- /dev/null +++ b/tsrxns/res/layout/datetime_picker.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/tsrxns/res/layout/dialog_edit_text.xml b/tsrxns/res/layout/dialog_edit_text.xml new file mode 100644 index 0000000..361b39a --- /dev/null +++ b/tsrxns/res/layout/dialog_edit_text.xml @@ -0,0 +1,23 @@ + + + + + \ No newline at end of file diff --git a/tsrxns/res/layout/folder_list_item.xml b/tsrxns/res/layout/folder_list_item.xml new file mode 100644 index 0000000..77e8148 --- /dev/null +++ b/tsrxns/res/layout/folder_list_item.xml @@ -0,0 +1,29 @@ + + + + + + + + \ No newline at end of file diff --git a/tsrxns/res/layout/note_edit.xml b/tsrxns/res/layout/note_edit.xml new file mode 100644 index 0000000..a8b58b6 --- /dev/null +++ b/tsrxns/res/layout/note_edit.xml @@ -0,0 +1,404 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tsrxns/res/layout/note_edit_list_item.xml b/tsrxns/res/layout/note_edit_list_item.xml new file mode 100644 index 0000000..9166282 --- /dev/null +++ b/tsrxns/res/layout/note_edit_list_item.xml @@ -0,0 +1,40 @@ + + + + + + + + + + diff --git a/tsrxns/res/layout/note_item.xml b/tsrxns/res/layout/note_item.xml new file mode 100644 index 0000000..d541f6a --- /dev/null +++ b/tsrxns/res/layout/note_item.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tsrxns/res/layout/note_list.xml b/tsrxns/res/layout/note_list.xml new file mode 100644 index 0000000..501a431 --- /dev/null +++ b/tsrxns/res/layout/note_list.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + +

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 oA}~htujc(49C=#4_iKhT#Z!yQ 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∾_( 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

yzvi?HTpcolNT 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 { + Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); + return insets; + }); + } +} \ No newline at end of file diff --git a/tsrxns/java/net/micode/notes/data/Contact.java b/tsrxns/java/net/micode/notes/data/Contact.java new file mode 100644 index 0000000..f78cf70 --- /dev/null +++ b/tsrxns/java/net/micode/notes/data/Contact.java @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.data; + +import android.content.Context; +import android.database.Cursor; +import android.provider.ContactsContract.CommonDataKinds.Phone; +import android.provider.ContactsContract.Data; +import android.telephony.PhoneNumberUtils; +import android.util.Log; + +import java.util.HashMap; + +/** + * 联系人工具类 + * 用于根据电话号码获取联系人姓名,并提供缓存功能提高查询效率 + */ +public class Contact { + // 联系人缓存,存储电话号码与联系人姓名的映射关系 + private static HashMap sContactCache; + // 日志标签 + private static final String TAG = "Contact"; + + // 来电者ID查询条件 + 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 = '+')"; + + /** + * 根据电话号码获取联系人姓名 + * @param context 上下文对象 + * @param phoneNumber 电话号码 + * @return 联系人姓名,若未找到则返回null + */ + public static String getContact(Context context, String phoneNumber) { + // 初始化缓存 + if(sContactCache == null) { + sContactCache = new HashMap(); + } + + // 先从缓存中查找,若存在则直接返回 + if(sContactCache.containsKey(phoneNumber)) { + return sContactCache.get(phoneNumber); + } + + // 构建查询条件,替换min_match的值 + String selection = CALLER_ID_SELECTION.replace("+", + PhoneNumberUtils.toCallerIDMinMatch(phoneNumber)); + // 查询联系人数据 + Cursor cursor = context.getContentResolver().query( + Data.CONTENT_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.e(TAG, " Cursor get string error " + e.toString()); + return null; + } finally { + // 关闭游标 + cursor.close(); + } + } else { + Log.d(TAG, "No contact matched with number:" + phoneNumber); + return null; + } + } +} \ No newline at end of file diff --git a/tsrxns/java/net/micode/notes/data/Notes.java b/tsrxns/java/net/micode/notes/data/Notes.java new file mode 100644 index 0000000..1471ca3 --- /dev/null +++ b/tsrxns/java/net/micode/notes/data/Notes.java @@ -0,0 +1,295 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.data; + +import android.net.Uri; + +/** + * 笔记相关常量和数据结构定义类 + * 包含笔记的类型、系统文件夹ID、Uri等常量定义,以及笔记和数据的列定义 + */ +public class Notes { + // 内容提供者的授权者 + public static final String AUTHORITY = "micode_notes"; + // 日志标签 + public static final String TAG = "Notes"; + // 笔记类型常量 + public static final int TYPE_NOTE = 0; // 普通笔记类型 + public static final int TYPE_FOLDER = 1; // 文件夹类型 + public static final int TYPE_SYSTEM = 2; // 系统类型 + + /** + * 以下是系统文件夹的标识符 + * {@link Notes#ID_ROOT_FOLDER } 是默认文件夹 + * {@link Notes#ID_TEMPARAY_FOLDER } 是用于存放不属于任何文件夹的笔记 + * {@link Notes#ID_CALL_RECORD_FOLDER} 是用于存储通话记录 + */ + // 系统文件夹ID常量 + 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; // 回收站文件夹 + + // Intent额外数据常量 + 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"; // 背景颜色ID + public static final String INTENT_EXTRA_WIDGET_ID = "net.micode.notes.widget_id"; // 小组件ID + public static final String INTENT_EXTRA_WIDGET_TYPE = "net.micode.notes.widget_type"; // 小组件类型 + public static final String INTENT_EXTRA_FOLDER_ID = "net.micode.notes.folder_id"; // 文件夹ID + public static final String INTENT_EXTRA_CALL_DATE = "net.micode.notes.call_date"; // 通话日期 + + // 小组件类型常量 + public static final int TYPE_WIDGET_INVALIDE = -1; // 无效小组件 + public static final int TYPE_WIDGET_2X = 0; // 2X大小的小组件 + public static final int TYPE_WIDGET_4X = 1; // 4X大小的小组件 + + /** + * 数据类型常量类 + */ + public static class DataConstants { + public static final String NOTE = TextNote.CONTENT_ITEM_TYPE; // 文本笔记类型 + public static final String CALL_NOTE = CallNote.CONTENT_ITEM_TYPE; // 通话笔记类型 + } + + /** + * 查询所有笔记和文件夹的Uri + */ + public static final Uri CONTENT_NOTE_URI = Uri.parse("content://" + AUTHORITY + "/note"); + + /** + * 查询数据的Uri + */ + public static final Uri CONTENT_DATA_URI = Uri.parse("content://" + AUTHORITY + "/data"); + + /** + * 笔记表的列定义接口 + */ + public interface NoteColumns { + /** + * 行的唯一ID + *

类型: INTEGER (long)

+ */ + public static final String ID = "_id"; + + /** + * 笔记或文件夹的父级ID + *

类型: INTEGER (long)

+ */ + 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)

+ */ + public static final String WIDGET_ID = "widget_id"; + + /** + * 笔记的小组件类型 + *

类型: INTEGER (long)

+ */ + public static final String WIDGET_TYPE = "widget_type"; + + /** + * 笔记的背景颜色ID + *

类型: INTEGER (long)

+ */ + 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)

+ */ + public static final String SYNC_ID = "sync_id"; + + /** + * 本地是否修改的标志 + *

类型: INTEGER

+ */ + public static final String LOCAL_MODIFIED = "local_modified"; + + /** + * 移动到临时文件夹之前的原始父级ID + *

类型 : INTEGER

+ */ + public static final String ORIGIN_PARENT_ID = "origin_parent_id"; + + /** + * gtask ID + *

类型 : TEXT

+ */ + public static final String GTASK_ID = "gtask_id"; + + /** + * 版本号 + *

类型 : INTEGER (long)

+ */ + public static final String VERSION = "version"; + } + + /** + * 数据表的列定义接口 + */ + public interface DataColumns { + /** + * 行的唯一ID + *

类型: INTEGER (long)

+ */ + public static final String ID = "_id"; + + /** + * 此行所代表项目的MIME类型 + *

类型: Text

+ */ + public static final String MIME_TYPE = "mime_type"; + + /** + * 此数据所属笔记的引用ID + *

类型: INTEGER (long)

+ */ + 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"; + + + /** + * 通用数据列,用于整数数据类型 + *

类型: INTEGER

+ */ + public static final String DATA1 = "data1"; + + /** + * 通用数据列,用于整数数据类型 + *

类型: INTEGER

+ */ + public static final String DATA2 = "data2"; + + /** + * 通用数据列,用于文本数据类型 + *

类型: TEXT

+ */ + public static final String DATA3 = "data3"; + + /** + * 通用数据列,用于文本数据类型 + *

类型: TEXT

+ */ + public static final String DATA4 = "data4"; + + /** + * 通用数据列,用于文本数据类型 + *

类型: TEXT

+ */ + public static final String DATA5 = "data5"; + } + + /** + * 文本笔记类,实现DataColumns接口 + */ + public static final class TextNote implements DataColumns { + /** + * 指示文本是否为 checklist 模式的标志 + *

类型: Integer 1:check list模式 0:普通模式

+ */ + public static final String MODE = DATA1; + + public static final int MODE_CHECK_LIST = 1; // checklist模式 + + public static final String CONTENT_TYPE = "vnd.android.cursor.dir/text_note"; // 文本笔记集合的MIME类型 + public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/text_note"; // 单个文本笔记的MIME类型 + public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/text_note"); // 文本笔记的Uri + } + + /** + * 通话笔记类,实现DataColumns接口 + */ + public static final class CallNote implements DataColumns { + /** + * 此记录的通话日期 + *

类型: INTEGER (long)

+ */ + public static final String CALL_DATE = DATA1; + + /** + * 此记录的电话号码 + *

类型: TEXT

+ */ + public static final String PHONE_NUMBER = DATA3; + + public static final String CONTENT_TYPE = "vnd.android.cursor.dir/call_note"; // 通话笔记集合的MIME类型 + public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/call_note"; // 单个通话笔记的MIME类型 + public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/call_note"); // 通话笔记的Uri + } +} \ No newline at end of file diff --git a/tsrxns/java/net/micode/notes/data/NotesDatabaseHelper.java b/tsrxns/java/net/micode/notes/data/NotesDatabaseHelper.java new file mode 100644 index 0000000..b1a3f93 --- /dev/null +++ b/tsrxns/java/net/micode/notes/data/NotesDatabaseHelper.java @@ -0,0 +1,424 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.data; + +import android.content.ContentValues; +import android.content.Context; +import android.database.sqlite.SQLiteDatabase; +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; + +/** + * 笔记数据库帮助类,继承自SQLiteOpenHelper + * 负责数据库的创建、升级以及表和触发器的管理 + */ +public class NotesDatabaseHelper extends SQLiteOpenHelper { + // 数据库名称 + private static final String DB_NAME = "note.db"; + // 数据库版本 + private static final int DB_VERSION = 4; + + /** + * 表名常量接口 + */ + public interface TABLE { + public static final String NOTE = "note"; // 笔记表 + public static final String DATA = "data"; // 数据表 + } + + // 日志标签 + private static final String TAG = "NotesDatabaseHelper"; + + // 单例实例 + private static NotesDatabaseHelper mInstance; + + // 创建笔记表的SQL语句 + private static final String CREATE_NOTE_TABLE_SQL = + "CREATE TABLE " + TABLE.NOTE + "(" + + NoteColumns.ID + " INTEGER PRIMARY KEY," + + NoteColumns.PARENT_ID + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.ALERTED_DATE + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.BG_COLOR_ID + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.CREATED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + + NoteColumns.HAS_ATTACHMENT + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.MODIFIED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + + NoteColumns.NOTES_COUNT + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.SNIPPET + " TEXT NOT NULL DEFAULT ''," + + NoteColumns.TYPE + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.WIDGET_ID + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.WIDGET_TYPE + " INTEGER NOT NULL DEFAULT -1," + + NoteColumns.SYNC_ID + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.LOCAL_MODIFIED + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.ORIGIN_PARENT_ID + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.GTASK_ID + " TEXT NOT NULL DEFAULT ''," + + NoteColumns.VERSION + " INTEGER NOT NULL DEFAULT 0" + + ")"; + + // 创建数据表的SQL语句 + private static final String CREATE_DATA_TABLE_SQL = + "CREATE TABLE " + TABLE.DATA + "(" + + DataColumns.ID + " INTEGER PRIMARY KEY," + + DataColumns.MIME_TYPE + " TEXT NOT NULL," + + DataColumns.NOTE_ID + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.CREATED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + + NoteColumns.MODIFIED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + + DataColumns.CONTENT + " TEXT NOT NULL DEFAULT ''," + + DataColumns.DATA1 + " INTEGER," + + DataColumns.DATA2 + " INTEGER," + + DataColumns.DATA3 + " TEXT NOT NULL DEFAULT ''," + + DataColumns.DATA4 + " TEXT NOT NULL DEFAULT ''," + + DataColumns.DATA5 + " TEXT NOT NULL DEFAULT ''" + + ")"; + + // 为data表的note_id列创建索引的SQL语句 + private static final String CREATE_DATA_NOTE_ID_INDEX_SQL = + "CREATE INDEX IF NOT EXISTS note_id_index ON " + + TABLE.DATA + "(" + DataColumns.NOTE_ID + ");"; + + /** + * 当将笔记移动到文件夹时,增加文件夹的笔记计数 + */ + private static final String NOTE_INCREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER = + "CREATE TRIGGER increase_folder_count_on_update "+ + " AFTER UPDATE OF " + NoteColumns.PARENT_ID + " ON " + TABLE.NOTE + + " BEGIN " + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + " + 1" + + " WHERE " + NoteColumns.ID + "=new." + NoteColumns.PARENT_ID + ";" + + " END"; + + /** + * 当将笔记从文件夹中移出时,减少文件夹的笔记计数 + */ + private static final String NOTE_DECREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER = + "CREATE TRIGGER decrease_folder_count_on_update " + + " AFTER UPDATE OF " + NoteColumns.PARENT_ID + " ON " + TABLE.NOTE + + " BEGIN " + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + "-1" + + " WHERE " + NoteColumns.ID + "=old." + NoteColumns.PARENT_ID + + " AND " + NoteColumns.NOTES_COUNT + ">0" + ";" + + " END"; + + /** + * 当向文件夹中插入新笔记时,增加文件夹的笔记计数 + */ + private static final String NOTE_INCREASE_FOLDER_COUNT_ON_INSERT_TRIGGER = + "CREATE TRIGGER increase_folder_count_on_insert " + + " AFTER INSERT ON " + TABLE.NOTE + + " BEGIN " + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + " + 1" + + " WHERE " + NoteColumns.ID + "=new." + NoteColumns.PARENT_ID + ";" + + " END"; + + /** + * 当从文件夹中删除笔记时,减少文件夹的笔记计数 + */ + private static final String NOTE_DECREASE_FOLDER_COUNT_ON_DELETE_TRIGGER = + "CREATE TRIGGER decrease_folder_count_on_delete " + + " AFTER DELETE ON " + TABLE.NOTE + + " BEGIN " + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + "-1" + + " WHERE " + NoteColumns.ID + "=old." + NoteColumns.PARENT_ID + + " AND " + NoteColumns.NOTES_COUNT + ">0;" + + " END"; + + /** + * 当插入类型为{@link DataConstants#NOTE}的数据时,更新笔记内容 + */ + private static final String DATA_UPDATE_NOTE_CONTENT_ON_INSERT_TRIGGER = + "CREATE TRIGGER update_note_content_on_insert " + + " AFTER INSERT ON " + TABLE.DATA + + " WHEN new." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" + + " BEGIN" + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.SNIPPET + "=new." + DataColumns.CONTENT + + " WHERE " + NoteColumns.ID + "=new." + DataColumns.NOTE_ID + ";" + + " END"; + + /** + * 当类型为{@link DataConstants#NOTE}的数据发生变化时,更新笔记内容 + */ + private static final String DATA_UPDATE_NOTE_CONTENT_ON_UPDATE_TRIGGER = + "CREATE TRIGGER update_note_content_on_update " + + " AFTER UPDATE ON " + TABLE.DATA + + " WHEN old." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" + + " BEGIN" + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.SNIPPET + "=new." + DataColumns.CONTENT + + " WHERE " + NoteColumns.ID + "=new." + DataColumns.NOTE_ID + ";" + + " END"; + + /** + * 当类型为{@link DataConstants#NOTE}的数据被删除时,更新笔记内容 + */ + private static final String DATA_UPDATE_NOTE_CONTENT_ON_DELETE_TRIGGER = + "CREATE TRIGGER update_note_content_on_delete " + + " AFTER delete ON " + TABLE.DATA + + " WHEN old." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" + + " BEGIN" + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.SNIPPET + "=''" + + " WHERE " + NoteColumns.ID + "=old." + DataColumns.NOTE_ID + ";" + + " END"; + + /** + * 当笔记被删除时,删除其所属的数据 + */ + private static final String NOTE_DELETE_DATA_ON_DELETE_TRIGGER = + "CREATE TRIGGER delete_data_on_delete " + + " AFTER DELETE ON " + TABLE.NOTE + + " BEGIN" + + " DELETE FROM " + TABLE.DATA + + " WHERE " + DataColumns.NOTE_ID + "=old." + NoteColumns.ID + ";" + + " END"; + + /** + * 当文件夹被删除时,删除其包含的笔记 + */ + private static final String FOLDER_DELETE_NOTES_ON_DELETE_TRIGGER = + "CREATE TRIGGER folder_delete_notes_on_delete " + + " AFTER DELETE ON " + TABLE.NOTE + + " BEGIN" + + " DELETE FROM " + TABLE.NOTE + + " WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" + + " END"; + + /** + * 当文件夹被移到回收站时,移动其包含的笔记到回收站 + */ + private static final String FOLDER_MOVE_NOTES_ON_TRASH_TRIGGER = + "CREATE TRIGGER folder_move_notes_on_trash " + + " AFTER UPDATE ON " + TABLE.NOTE + + " WHEN new." + NoteColumns.PARENT_ID + "=" + Notes.ID_TRASH_FOLER + + " BEGIN" + + " UPDATE " + TABLE.NOTE + + " SET " + NoteColumns.PARENT_ID + "=" + Notes.ID_TRASH_FOLER + + " WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" + + " END"; + + /** + * 构造方法 + * @param context 上下文对象 + */ + public NotesDatabaseHelper(Context context) { + super(context, DB_NAME, null, DB_VERSION); + } + + /** + * 创建笔记表 + * @param db 数据库实例 + */ + public void createNoteTable(SQLiteDatabase db) { + db.execSQL(CREATE_NOTE_TABLE_SQL); + reCreateNoteTableTriggers(db); + createSystemFolder(db); + Log.d(TAG, "note table has been created"); + } + + /** + * 重新创建笔记表的触发器 + * @param db 数据库实例 + */ + private void reCreateNoteTableTriggers(SQLiteDatabase db) { + db.execSQL("DROP TRIGGER IF EXISTS increase_folder_count_on_update"); + db.execSQL("DROP TRIGGER IF EXISTS decrease_folder_count_on_update"); + db.execSQL("DROP TRIGGER IF EXISTS decrease_folder_count_on_delete"); + db.execSQL("DROP TRIGGER IF EXISTS delete_data_on_delete"); + db.execSQL("DROP TRIGGER IF EXISTS increase_folder_count_on_insert"); + db.execSQL("DROP TRIGGER IF EXISTS folder_delete_notes_on_delete"); + db.execSQL("DROP TRIGGER IF EXISTS folder_move_notes_on_trash"); + + db.execSQL(NOTE_INCREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER); + db.execSQL(NOTE_DECREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER); + db.execSQL(NOTE_DECREASE_FOLDER_COUNT_ON_DELETE_TRIGGER); + db.execSQL(NOTE_DELETE_DATA_ON_DELETE_TRIGGER); + 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); + } + + /** + * 创建系统文件夹 + * @param db 数据库实例 + */ + private void createSystemFolder(SQLiteDatabase db) { + ContentValues values = new ContentValues(); + + /** + * 用于存储通话笔记的通话记录文件夹 + */ + 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); + values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); + db.insert(TABLE.NOTE, null, values); + + /** + * 用于移动笔记的临时文件夹 + */ + values.clear(); + values.put(NoteColumns.ID, Notes.ID_TEMPARAY_FOLDER); + values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); + 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); + } + + /** + * 创建数据表 + * @param db 数据库实例 + */ + 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"); + } + + /** + * 重新创建数据表的触发器 + * @param db 数据库实例 + */ + private void reCreateDataTableTriggers(SQLiteDatabase db) { + db.execSQL("DROP TRIGGER IF EXISTS update_note_content_on_insert"); + db.execSQL("DROP TRIGGER IF EXISTS update_note_content_on_update"); + db.execSQL("DROP TRIGGER IF EXISTS update_note_content_on_delete"); + + 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); + } + + /** + * 获取单例实例 + * @param context 上下文对象 + * @return NotesDatabaseHelper实例 + */ + static synchronized NotesDatabaseHelper getInstance(Context context) { + if (mInstance == null) { + mInstance = new NotesDatabaseHelper(context); + } + return mInstance; + } + + /** + * 数据库创建时调用,创建表和初始数据 + * @param db 数据库实例 + */ + @Override + public void onCreate(SQLiteDatabase db) { + createNoteTable(db); + createDataTable(db); + } + + /** + * 数据库升级时调用 + * @param db 数据库实例 + * @param oldVersion 旧版本号 + * @param newVersion 新版本号 + */ + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + boolean reCreateTriggers = false; + boolean skipV2 = false; + + if (oldVersion == 1) { + upgradeToV2(db); + skipV2 = true; // 此升级包含从v2到v3的升级 + oldVersion++; + } + + if (oldVersion == 2 && !skipV2) { + upgradeToV3(db); + reCreateTriggers = true; + oldVersion++; + } + + if (oldVersion == 3) { + upgradeToV4(db); + oldVersion++; + } + + if (reCreateTriggers) { + reCreateNoteTableTriggers(db); + reCreateDataTableTriggers(db); + } + + if (oldVersion != newVersion) { + throw new IllegalStateException("Upgrade notes database to version " + newVersion + + "fails"); + } + } + + /** + * 升级数据库到版本2 + * @param db 数据库实例 + */ + 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); + } + + /** + * 升级数据库到版本3 + * @param db 数据库实例 + */ + private void upgradeToV3(SQLiteDatabase db) { + // 删除未使用的触发器 + db.execSQL("DROP TRIGGER IF EXISTS update_note_modified_date_on_insert"); + db.execSQL("DROP TRIGGER IF EXISTS update_note_modified_date_on_delete"); + db.execSQL("DROP TRIGGER IF EXISTS update_note_modified_date_on_update"); + // 添加gtask id列 + db.execSQL("ALTER TABLE " + TABLE.NOTE + " ADD COLUMN " + NoteColumns.GTASK_ID + + " TEXT NOT NULL DEFAULT ''"); + // 添加回收站系统文件夹 + ContentValues values = new ContentValues(); + values.put(NoteColumns.ID, Notes.ID_TRASH_FOLER); + values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); + db.insert(TABLE.NOTE, null, values); + } + + /** + * 升级数据库到版本4 + * @param db 数据库实例 + */ + private void upgradeToV4(SQLiteDatabase db) { + db.execSQL("ALTER TABLE " + TABLE.NOTE + " ADD COLUMN " + NoteColumns.VERSION + + " INTEGER NOT NULL DEFAULT 0"); + } +} \ No newline at end of file diff --git a/tsrxns/java/net/micode/notes/data/NotesProvider.java b/tsrxns/java/net/micode/notes/data/NotesProvider.java new file mode 100644 index 0000000..84cbffd --- /dev/null +++ b/tsrxns/java/net/micode/notes/data/NotesProvider.java @@ -0,0 +1,384 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.data; + +import android.app.SearchManager; +import android.content.ContentProvider; +import android.content.ContentUris; +import android.content.ContentValues; +import android.content.Intent; +import android.content.UriMatcher; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.net.Uri; +import android.text.TextUtils; +import android.util.Log; + +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 + * 负责处理笔记数据的CRUD操作,通过ContentProvider对外提供数据访问接口 + */ +public class NotesProvider extends ContentProvider { + // Uri匹配器,用于匹配不同的Uri请求 + private static final UriMatcher mMatcher; + + // 数据库帮助类实例 + private NotesDatabaseHelper mHelper; + + // 日志标签 + private static final String TAG = "NotesProvider"; + + // Uri匹配器对应的匹配码 + private static final int URI_NOTE = 1; // 匹配note集合的Uri + private static final int URI_NOTE_ITEM = 2; // 匹配单个note的Uri + private static final int URI_DATA = 3; // 匹配data集合的Uri + private static final int URI_DATA_ITEM = 4; // 匹配单个data的Uri + private static final int URI_SEARCH = 5; // 匹配搜索的Uri + private static final int URI_SEARCH_SUGGEST = 6; // 匹配搜索建议的Uri + + // 静态代码块,初始化UriMatcher并添加Uri匹配规则 + static { + mMatcher = new UriMatcher(UriMatcher.NO_MATCH); + mMatcher.addURI(Notes.AUTHORITY, "note", URI_NOTE); + mMatcher.addURI(Notes.AUTHORITY, "note/#", URI_NOTE_ITEM); + mMatcher.addURI(Notes.AUTHORITY, "data", URI_DATA); + mMatcher.addURI(Notes.AUTHORITY, "data/#", URI_DATA_ITEM); + mMatcher.addURI(Notes.AUTHORITY, "search", URI_SEARCH); + mMatcher.addURI(Notes.AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY, URI_SEARCH_SUGGEST); + mMatcher.addURI(Notes.AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY + "/*", URI_SEARCH_SUGGEST); + } + + /** + * x'0A'代表sqlite中的'\n'字符。对于搜索结果中的标题和内容, + * 我们将去除'\n'和空白字符以显示更多信息。 + */ + // 笔记搜索的投影列,定义了搜索结果需要返回的列 + 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 + "," + + "TRIM(REPLACE(" + NoteColumns.SNIPPET + ", x'0A','')) AS " + SearchManager.SUGGEST_COLUMN_TEXT_2 + "," + + 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; + + // 笔记片段搜索查询语句 + private static String NOTES_SNIPPET_SEARCH_QUERY = "SELECT " + NOTES_SEARCH_PROJECTION + + " FROM " + TABLE.NOTE + + " WHERE " + NoteColumns.SNIPPET + " LIKE ?" + + " AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER + + " AND " + NoteColumns.TYPE + "=" + Notes.TYPE_NOTE; + + /** + * 初始化ContentProvider,获取数据库帮助类实例 + * @return 初始化成功返回true + */ + @Override + public boolean onCreate() { + mHelper = NotesDatabaseHelper.getInstance(getContext()); + return true; + } + + /** + * 处理查询请求 + * @param uri 查询的Uri + * @param projection 需要返回的列 + * @param selection 查询条件 + * @param selectionArgs 查询条件参数 + * @param sortOrder 排序方式 + * @return 查询结果的Cursor + */ + @Override + public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, + String sortOrder) { + Cursor c = null; + SQLiteDatabase db = mHelper.getReadableDatabase(); + String id = null; + // 根据Uri匹配结果执行不同的查询操作 + switch (mMatcher.match(uri)) { + case URI_NOTE: + // 查询note表的所有数据 + c = db.query(TABLE.NOTE, projection, selection, selectionArgs, null, null, + sortOrder); + break; + case URI_NOTE_ITEM: + // 查询note表中指定id的数据 + id = uri.getPathSegments().get(1); + c = db.query(TABLE.NOTE, projection, NoteColumns.ID + "=" + id + + parseSelection(selection), selectionArgs, null, null, sortOrder); + break; + case URI_DATA: + // 查询data表的所有数据 + c = db.query(TABLE.DATA, projection, selection, selectionArgs, null, null, + sortOrder); + break; + case URI_DATA_ITEM: + // 查询data表中指定id的数据 + id = uri.getPathSegments().get(1); + c = db.query(TABLE.DATA, projection, DataColumns.ID + "=" + id + + parseSelection(selection), selectionArgs, null, null, sortOrder); + break; + 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"); + } + + String searchString = null; + if (mMatcher.match(uri) == URI_SEARCH_SUGGEST) { + if (uri.getPathSegments().size() > 1) { + searchString = uri.getPathSegments().get(1); + } + } else { + searchString = uri.getQueryParameter("pattern"); + } + + if (TextUtils.isEmpty(searchString)) { + return null; + } + + try { + // 构建模糊查询字符串 + searchString = String.format("%%%s%%", searchString); + c = db.rawQuery(NOTES_SNIPPET_SEARCH_QUERY, + new String[] { searchString }); + } catch (IllegalStateException ex) { + Log.e(TAG, "got exception: " + ex.toString()); + } + break; + default: + throw new IllegalArgumentException("Unknown URI " + uri); + } + // 设置通知Uri,当数据变化时通知观察者 + if (c != null) { + c.setNotificationUri(getContext().getContentResolver(), uri); + } + return c; + } + + /** + * 处理插入请求 + * @param uri 插入的Uri + * @param values 要插入的数据 + * @return 插入数据的Uri + */ + @Override + public Uri insert(Uri uri, ContentValues values) { + SQLiteDatabase db = mHelper.getWritableDatabase(); + long dataId = 0, noteId = 0, insertedId = 0; + // 根据Uri匹配结果执行不同的插入操作 + switch (mMatcher.match(uri)) { + case URI_NOTE: + // 插入数据到note表 + insertedId = noteId = db.insert(TABLE.NOTE, null, values); + break; + case URI_DATA: + // 插入数据到data表 + if (values.containsKey(DataColumns.NOTE_ID)) { + noteId = values.getAsLong(DataColumns.NOTE_ID); + } else { + Log.d(TAG, "Wrong data format without note id:" + values.toString()); + } + insertedId = dataId = db.insert(TABLE.DATA, null, values); + break; + default: + throw new IllegalArgumentException("Unknown URI " + uri); + } + // 通知数据变化 + if (noteId > 0) { + getContext().getContentResolver().notifyChange( + ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), null); + } + + if (dataId > 0) { + getContext().getContentResolver().notifyChange( + ContentUris.withAppendedId(Notes.CONTENT_DATA_URI, dataId), null); + } + + return ContentUris.withAppendedId(uri, insertedId); + } + + /** + * 处理删除请求 + * @param uri 删除的Uri + * @param selection 删除条件 + * @param selectionArgs 删除条件参数 + * @return 被删除的行数 + */ + @Override + public int delete(Uri uri, String selection, String[] selectionArgs) { + int count = 0; + String id = null; + SQLiteDatabase db = mHelper.getWritableDatabase(); + boolean deleteData = false; + // 根据Uri匹配结果执行不同的删除操作 + switch (mMatcher.match(uri)) { + case URI_NOTE: + // 删除note表中的数据 + selection = "(" + selection + ") AND " + NoteColumns.ID + ">0 "; + count = db.delete(TABLE.NOTE, selection, selectionArgs); + break; + case URI_NOTE_ITEM: + // 删除note表中指定id的数据 + id = uri.getPathSegments().get(1); + /** + * 小于0的ID是系统文件夹,不允许删除 + */ + long noteId = Long.valueOf(id); + if (noteId <= 0) { + break; + } + count = db.delete(TABLE.NOTE, + NoteColumns.ID + "=" + id + parseSelection(selection), selectionArgs); + break; + case URI_DATA: + // 删除data表中的数据 + count = db.delete(TABLE.DATA, selection, selectionArgs); + deleteData = true; + break; + case URI_DATA_ITEM: + // 删除data表中指定id的数据 + id = uri.getPathSegments().get(1); + count = db.delete(TABLE.DATA, + DataColumns.ID + "=" + id + parseSelection(selection), selectionArgs); + deleteData = true; + break; + default: + throw new IllegalArgumentException("Unknown URI " + uri); + } + // 通知数据变化 + if (count > 0) { + if (deleteData) { + getContext().getContentResolver().notifyChange(Notes.CONTENT_NOTE_URI, null); + } + getContext().getContentResolver().notifyChange(uri, null); + } + return count; + } + + /** + * 处理更新请求 + * @param uri 更新的Uri + * @param values 要更新的数据 + * @param selection 更新条件 + * @param selectionArgs 更新条件参数 + * @return 被更新的行数 + */ + @Override + public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { + int count = 0; + String id = null; + SQLiteDatabase db = mHelper.getWritableDatabase(); + boolean updateData = false; + // 根据Uri匹配结果执行不同的更新操作 + switch (mMatcher.match(uri)) { + case URI_NOTE: + // 更新note表中的数据,先增加笔记版本号 + increaseNoteVersion(-1, selection, selectionArgs); + count = db.update(TABLE.NOTE, values, selection, selectionArgs); + break; + case URI_NOTE_ITEM: + // 更新note表中指定id的数据,先增加笔记版本号 + id = uri.getPathSegments().get(1); + increaseNoteVersion(Long.valueOf(id), selection, selectionArgs); + count = db.update(TABLE.NOTE, values, NoteColumns.ID + "=" + id + + parseSelection(selection), selectionArgs); + break; + case URI_DATA: + // 更新data表中的数据 + count = db.update(TABLE.DATA, values, selection, selectionArgs); + updateData = true; + break; + case URI_DATA_ITEM: + // 更新data表中指定id的数据 + id = uri.getPathSegments().get(1); + count = db.update(TABLE.DATA, values, DataColumns.ID + "=" + id + + parseSelection(selection), selectionArgs); + updateData = true; + break; + default: + throw new IllegalArgumentException("Unknown URI " + uri); + } + + // 通知数据变化 + if (count > 0) { + if (updateData) { + getContext().getContentResolver().notifyChange(Notes.CONTENT_NOTE_URI, null); + } + getContext().getContentResolver().notifyChange(uri, null); + } + return count; + } + + /** + * 解析查询条件,将额外的查询条件添加到已有条件中 + * @param selection 原查询条件 + * @return 解析后的查询条件 + */ + private String parseSelection(String selection) { + return (!TextUtils.isEmpty(selection) ? " AND (" + selection + ')' : ""); + } + + /** + * 增加笔记的版本号 + * @param id 笔记id,-1表示更新符合条件的所有笔记 + * @param selection 更新条件 + * @param selectionArgs 更新条件参数 + */ + private void increaseNoteVersion(long id, String selection, String[] selectionArgs) { + StringBuilder sql = new StringBuilder(120); + sql.append("UPDATE "); + sql.append(TABLE.NOTE); + sql.append(" SET "); + sql.append(NoteColumns.VERSION); + sql.append("=" + NoteColumns.VERSION + "+1 "); + + if (id > 0 || !TextUtils.isEmpty(selection)) { + sql.append(" WHERE "); + } + if (id > 0) { + sql.append(NoteColumns.ID + "=" + String.valueOf(id)); + } + if (!TextUtils.isEmpty(selection)) { + String selectString = id > 0 ? parseSelection(selection) : selection; + for (String args : selectionArgs) { + selectString = selectString.replaceFirst("\\?", args); + } + sql.append(selectString); + } + + mHelper.getWritableDatabase().execSQL(sql.toString()); + } + + /** + * 获取Uri对应的MIME类型 + * @param uri 要获取MIME类型的Uri + * @return MIME类型,此处未实现 + */ + @Override + public String getType(Uri uri) { + // TODO Auto-generated method stub + return null; + } + +} \ No newline at end of file diff --git a/tsrxns/java/net/micode/notes/gtask/data/MetaData.java b/tsrxns/java/net/micode/notes/gtask/data/MetaData.java new file mode 100644 index 0000000..3a2050b --- /dev/null +++ b/tsrxns/java/net/micode/notes/gtask/data/MetaData.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.gtask.data; + +import android.database.Cursor; +import android.util.Log; + +import net.micode.notes.tool.GTaskStringUtils; + +import org.json.JSONException; +import org.json.JSONObject; + + +public class MetaData extends Task { + private final static String TAG = MetaData.class.getSimpleName(); + + private String mRelatedGid = null; + + public void setMeta(String gid, JSONObject metaInfo) { + try { + metaInfo.put(GTaskStringUtils.META_HEAD_GTASK_ID, gid); + } catch (JSONException e) { + Log.e(TAG, "failed to put related gid"); + } + setNotes(metaInfo.toString()); + setName(GTaskStringUtils.META_NOTE_NAME); + } + + public String getRelatedGid() { + return mRelatedGid; + } + + @Override + public boolean isWorthSaving() { + return getNotes() != null; + } + + @Override + public void setContentByRemoteJSON(JSONObject js) { + super.setContentByRemoteJSON(js); + if (getNotes() != null) { + try { + JSONObject metaInfo = new JSONObject(getNotes().trim()); + mRelatedGid = metaInfo.getString(GTaskStringUtils.META_HEAD_GTASK_ID); + } catch (JSONException e) { + Log.w(TAG, "failed to get related gid"); + mRelatedGid = null; + } + } + } + + @Override + public void setContentByLocalJSON(JSONObject js) { + // this function should not be called + throw new IllegalAccessError("MetaData:setContentByLocalJSON should not be called"); + } + + @Override + public JSONObject getLocalJSONFromContent() { + throw new IllegalAccessError("MetaData:getLocalJSONFromContent should not be called"); + } + + @Override + public int getSyncAction(Cursor c) { + throw new IllegalAccessError("MetaData:getSyncAction should not be called"); + } + +} diff --git a/tsrxns/java/net/micode/notes/gtask/data/Node.java b/tsrxns/java/net/micode/notes/gtask/data/Node.java new file mode 100644 index 0000000..63950e0 --- /dev/null +++ b/tsrxns/java/net/micode/notes/gtask/data/Node.java @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.gtask.data; + +import android.database.Cursor; + +import org.json.JSONObject; + +public abstract class Node { + public static final int SYNC_ACTION_NONE = 0; + + public static final int SYNC_ACTION_ADD_REMOTE = 1; + + public static final int SYNC_ACTION_ADD_LOCAL = 2; + + public static final int SYNC_ACTION_DEL_REMOTE = 3; + + public static final int SYNC_ACTION_DEL_LOCAL = 4; + + public static final int SYNC_ACTION_UPDATE_REMOTE = 5; + + public static final int SYNC_ACTION_UPDATE_LOCAL = 6; + + public static final int SYNC_ACTION_UPDATE_CONFLICT = 7; + + public static final int SYNC_ACTION_ERROR = 8; + + private String mGid; + + private String mName; + + private long mLastModified; + + private boolean mDeleted; + + public Node() { + mGid = null; + mName = ""; + mLastModified = 0; + mDeleted = false; + } + + public abstract JSONObject getCreateAction(int actionId); + + public abstract JSONObject getUpdateAction(int actionId); + + public abstract void setContentByRemoteJSON(JSONObject js); + + public abstract void setContentByLocalJSON(JSONObject js); + + public abstract JSONObject getLocalJSONFromContent(); + + public abstract int getSyncAction(Cursor c); + + public void setGid(String gid) { + this.mGid = gid; + } + + public void setName(String name) { + this.mName = name; + } + + public void setLastModified(long lastModified) { + this.mLastModified = lastModified; + } + + public void setDeleted(boolean deleted) { + this.mDeleted = deleted; + } + + public String getGid() { + return this.mGid; + } + + public String getName() { + return this.mName; + } + + public long getLastModified() { + return this.mLastModified; + } + + public boolean getDeleted() { + return this.mDeleted; + } + +} diff --git a/tsrxns/java/net/micode/notes/gtask/data/SqlData.java b/tsrxns/java/net/micode/notes/gtask/data/SqlData.java new file mode 100644 index 0000000..d3ec3be --- /dev/null +++ b/tsrxns/java/net/micode/notes/gtask/data/SqlData.java @@ -0,0 +1,189 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.gtask.data; + +import android.content.ContentResolver; +import android.content.ContentUris; +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.net.Uri; +import android.util.Log; + +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.DataColumns; +import net.micode.notes.data.Notes.DataConstants; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.data.NotesDatabaseHelper.TABLE; +import net.micode.notes.gtask.exception.ActionFailureException; + +import org.json.JSONException; +import org.json.JSONObject; + + +public class SqlData { + private static final String TAG = SqlData.class.getSimpleName(); + + private static final int INVALID_ID = -99999; + + public static final String[] PROJECTION_DATA = new String[] { + DataColumns.ID, DataColumns.MIME_TYPE, DataColumns.CONTENT, DataColumns.DATA1, + DataColumns.DATA3 + }; + + public static final int DATA_ID_COLUMN = 0; + + public static final int DATA_MIME_TYPE_COLUMN = 1; + + public static final int DATA_CONTENT_COLUMN = 2; + + public static final int DATA_CONTENT_DATA_1_COLUMN = 3; + + public static final int DATA_CONTENT_DATA_3_COLUMN = 4; + + private ContentResolver mContentResolver; + + private boolean mIsCreate; + + private long mDataId; + + private String mDataMimeType; + + private String mDataContent; + + private long mDataContentData1; + + private String mDataContentData3; + + private ContentValues mDiffDataValues; + + public SqlData(Context context) { + mContentResolver = context.getContentResolver(); + mIsCreate = true; + mDataId = INVALID_ID; + mDataMimeType = DataConstants.NOTE; + mDataContent = ""; + mDataContentData1 = 0; + mDataContentData3 = ""; + mDiffDataValues = new ContentValues(); + } + + public SqlData(Context context, Cursor c) { + mContentResolver = context.getContentResolver(); + mIsCreate = false; + loadFromCursor(c); + mDiffDataValues = new ContentValues(); + } + + private void loadFromCursor(Cursor c) { + mDataId = c.getLong(DATA_ID_COLUMN); + mDataMimeType = c.getString(DATA_MIME_TYPE_COLUMN); + mDataContent = c.getString(DATA_CONTENT_COLUMN); + mDataContentData1 = c.getLong(DATA_CONTENT_DATA_1_COLUMN); + mDataContentData3 = c.getString(DATA_CONTENT_DATA_3_COLUMN); + } + + public void setContent(JSONObject js) throws JSONException { + long dataId = js.has(DataColumns.ID) ? js.getLong(DataColumns.ID) : INVALID_ID; + if (mIsCreate || mDataId != dataId) { + mDiffDataValues.put(DataColumns.ID, dataId); + } + mDataId = dataId; + + String dataMimeType = js.has(DataColumns.MIME_TYPE) ? js.getString(DataColumns.MIME_TYPE) + : DataConstants.NOTE; + if (mIsCreate || !mDataMimeType.equals(dataMimeType)) { + mDiffDataValues.put(DataColumns.MIME_TYPE, dataMimeType); + } + mDataMimeType = dataMimeType; + + String dataContent = js.has(DataColumns.CONTENT) ? js.getString(DataColumns.CONTENT) : ""; + if (mIsCreate || !mDataContent.equals(dataContent)) { + mDiffDataValues.put(DataColumns.CONTENT, dataContent); + } + mDataContent = dataContent; + + long dataContentData1 = js.has(DataColumns.DATA1) ? js.getLong(DataColumns.DATA1) : 0; + if (mIsCreate || mDataContentData1 != dataContentData1) { + mDiffDataValues.put(DataColumns.DATA1, dataContentData1); + } + mDataContentData1 = dataContentData1; + + String dataContentData3 = js.has(DataColumns.DATA3) ? js.getString(DataColumns.DATA3) : ""; + if (mIsCreate || !mDataContentData3.equals(dataContentData3)) { + mDiffDataValues.put(DataColumns.DATA3, dataContentData3); + } + mDataContentData3 = dataContentData3; + } + + public JSONObject getContent() throws JSONException { + if (mIsCreate) { + Log.e(TAG, "it seems that we haven't created this in database yet"); + return null; + } + JSONObject js = new JSONObject(); + js.put(DataColumns.ID, mDataId); + js.put(DataColumns.MIME_TYPE, mDataMimeType); + js.put(DataColumns.CONTENT, mDataContent); + js.put(DataColumns.DATA1, mDataContentData1); + js.put(DataColumns.DATA3, mDataContentData3); + return js; + } + + public void commit(long noteId, boolean validateVersion, long version) { + + if (mIsCreate) { + if (mDataId == INVALID_ID && mDiffDataValues.containsKey(DataColumns.ID)) { + mDiffDataValues.remove(DataColumns.ID); + } + + mDiffDataValues.put(DataColumns.NOTE_ID, noteId); + Uri uri = mContentResolver.insert(Notes.CONTENT_DATA_URI, mDiffDataValues); + try { + mDataId = Long.valueOf(uri.getPathSegments().get(1)); + } catch (NumberFormatException e) { + Log.e(TAG, "Get note id error :" + e.toString()); + throw new ActionFailureException("create note failed"); + } + } else { + if (mDiffDataValues.size() > 0) { + int result = 0; + if (!validateVersion) { + result = mContentResolver.update(ContentUris.withAppendedId( + Notes.CONTENT_DATA_URI, mDataId), mDiffDataValues, null, null); + } else { + result = mContentResolver.update(ContentUris.withAppendedId( + Notes.CONTENT_DATA_URI, mDataId), mDiffDataValues, + " ? in (SELECT " + NoteColumns.ID + " FROM " + TABLE.NOTE + + " WHERE " + NoteColumns.VERSION + "=?)", new String[] { + String.valueOf(noteId), String.valueOf(version) + }); + } + if (result == 0) { + Log.w(TAG, "there is no update. maybe user updates note when syncing"); + } + } + } + + mDiffDataValues.clear(); + mIsCreate = false; + } + + public long getId() { + return mDataId; + } +} diff --git a/tsrxns/java/net/micode/notes/gtask/data/SqlNote.java b/tsrxns/java/net/micode/notes/gtask/data/SqlNote.java new file mode 100644 index 0000000..79a4095 --- /dev/null +++ b/tsrxns/java/net/micode/notes/gtask/data/SqlNote.java @@ -0,0 +1,505 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.gtask.data; + +import android.appwidget.AppWidgetManager; +import android.content.ContentResolver; +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.net.Uri; +import android.util.Log; + +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.DataColumns; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.gtask.exception.ActionFailureException; +import net.micode.notes.tool.GTaskStringUtils; +import net.micode.notes.tool.ResourceParser; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; + + +public class SqlNote { + private static final String TAG = SqlNote.class.getSimpleName(); + + private static final int INVALID_ID = -99999; + + public static final String[] PROJECTION_NOTE = new String[] { + NoteColumns.ID, NoteColumns.ALERTED_DATE, NoteColumns.BG_COLOR_ID, + NoteColumns.CREATED_DATE, NoteColumns.HAS_ATTACHMENT, NoteColumns.MODIFIED_DATE, + NoteColumns.NOTES_COUNT, NoteColumns.PARENT_ID, NoteColumns.SNIPPET, NoteColumns.TYPE, + NoteColumns.WIDGET_ID, NoteColumns.WIDGET_TYPE, NoteColumns.SYNC_ID, + NoteColumns.LOCAL_MODIFIED, NoteColumns.ORIGIN_PARENT_ID, NoteColumns.GTASK_ID, + NoteColumns.VERSION + }; + + public static final int ID_COLUMN = 0; + + public static final int ALERTED_DATE_COLUMN = 1; + + public static final int BG_COLOR_ID_COLUMN = 2; + + public static final int CREATED_DATE_COLUMN = 3; + + public static final int HAS_ATTACHMENT_COLUMN = 4; + + public static final int MODIFIED_DATE_COLUMN = 5; + + public static final int NOTES_COUNT_COLUMN = 6; + + public static final int PARENT_ID_COLUMN = 7; + + public static final int SNIPPET_COLUMN = 8; + + public static final int TYPE_COLUMN = 9; + + public static final int WIDGET_ID_COLUMN = 10; + + public static final int WIDGET_TYPE_COLUMN = 11; + + public static final int SYNC_ID_COLUMN = 12; + + public static final int LOCAL_MODIFIED_COLUMN = 13; + + public static final int ORIGIN_PARENT_ID_COLUMN = 14; + + public static final int GTASK_ID_COLUMN = 15; + + public static final int VERSION_COLUMN = 16; + + private Context mContext; + + private ContentResolver mContentResolver; + + private boolean mIsCreate; + + private long mId; + + private long mAlertDate; + + private int mBgColorId; + + private long mCreatedDate; + + private int mHasAttachment; + + private long mModifiedDate; + + private long mParentId; + + private String mSnippet; + + private int mType; + + private int mWidgetId; + + private int mWidgetType; + + private long mOriginParent; + + private long mVersion; + + private ContentValues mDiffNoteValues; + + private ArrayList mDataList; + + public SqlNote(Context context) { + mContext = context; + mContentResolver = context.getContentResolver(); + mIsCreate = true; + mId = INVALID_ID; + mAlertDate = 0; + mBgColorId = ResourceParser.getDefaultBgId(context); + mCreatedDate = System.currentTimeMillis(); + mHasAttachment = 0; + mModifiedDate = System.currentTimeMillis(); + mParentId = 0; + mSnippet = ""; + mType = Notes.TYPE_NOTE; + mWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; + mWidgetType = Notes.TYPE_WIDGET_INVALIDE; + mOriginParent = 0; + mVersion = 0; + mDiffNoteValues = new ContentValues(); + mDataList = new ArrayList(); + } + + public SqlNote(Context context, Cursor c) { + mContext = context; + mContentResolver = context.getContentResolver(); + mIsCreate = false; + loadFromCursor(c); + mDataList = new ArrayList(); + if (mType == Notes.TYPE_NOTE) + loadDataContent(); + mDiffNoteValues = new ContentValues(); + } + + public SqlNote(Context context, long id) { + mContext = context; + mContentResolver = context.getContentResolver(); + mIsCreate = false; + loadFromCursor(id); + mDataList = new ArrayList(); + if (mType == Notes.TYPE_NOTE) + loadDataContent(); + mDiffNoteValues = new ContentValues(); + + } + + private void loadFromCursor(long id) { + Cursor c = null; + try { + c = mContentResolver.query(Notes.CONTENT_NOTE_URI, PROJECTION_NOTE, "(_id=?)", + new String[] { + String.valueOf(id) + }, null); + if (c != null) { + c.moveToNext(); + loadFromCursor(c); + } else { + Log.w(TAG, "loadFromCursor: cursor = null"); + } + } finally { + if (c != null) + c.close(); + } + } + + private void loadFromCursor(Cursor c) { + mId = c.getLong(ID_COLUMN); + mAlertDate = c.getLong(ALERTED_DATE_COLUMN); + mBgColorId = c.getInt(BG_COLOR_ID_COLUMN); + mCreatedDate = c.getLong(CREATED_DATE_COLUMN); + mHasAttachment = c.getInt(HAS_ATTACHMENT_COLUMN); + mModifiedDate = c.getLong(MODIFIED_DATE_COLUMN); + mParentId = c.getLong(PARENT_ID_COLUMN); + mSnippet = c.getString(SNIPPET_COLUMN); + mType = c.getInt(TYPE_COLUMN); + mWidgetId = c.getInt(WIDGET_ID_COLUMN); + mWidgetType = c.getInt(WIDGET_TYPE_COLUMN); + mVersion = c.getLong(VERSION_COLUMN); + } + + private void loadDataContent() { + Cursor c = null; + mDataList.clear(); + try { + c = mContentResolver.query(Notes.CONTENT_DATA_URI, SqlData.PROJECTION_DATA, + "(note_id=?)", new String[] { + String.valueOf(mId) + }, null); + if (c != null) { + if (c.getCount() == 0) { + Log.w(TAG, "it seems that the note has not data"); + return; + } + while (c.moveToNext()) { + SqlData data = new SqlData(mContext, c); + mDataList.add(data); + } + } else { + Log.w(TAG, "loadDataContent: cursor = null"); + } + } finally { + if (c != null) + c.close(); + } + } + + public boolean setContent(JSONObject js) { + try { + JSONObject note = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE); + if (note.getInt(NoteColumns.TYPE) == Notes.TYPE_SYSTEM) { + Log.w(TAG, "cannot set system folder"); + } else if (note.getInt(NoteColumns.TYPE) == Notes.TYPE_FOLDER) { + // for folder we can only update the snnipet and type + String snippet = note.has(NoteColumns.SNIPPET) ? note + .getString(NoteColumns.SNIPPET) : ""; + if (mIsCreate || !mSnippet.equals(snippet)) { + mDiffNoteValues.put(NoteColumns.SNIPPET, snippet); + } + mSnippet = snippet; + + int type = note.has(NoteColumns.TYPE) ? note.getInt(NoteColumns.TYPE) + : Notes.TYPE_NOTE; + if (mIsCreate || mType != type) { + mDiffNoteValues.put(NoteColumns.TYPE, type); + } + mType = type; + } else if (note.getInt(NoteColumns.TYPE) == Notes.TYPE_NOTE) { + JSONArray dataArray = js.getJSONArray(GTaskStringUtils.META_HEAD_DATA); + long id = note.has(NoteColumns.ID) ? note.getLong(NoteColumns.ID) : INVALID_ID; + if (mIsCreate || mId != id) { + mDiffNoteValues.put(NoteColumns.ID, id); + } + mId = id; + + long alertDate = note.has(NoteColumns.ALERTED_DATE) ? note + .getLong(NoteColumns.ALERTED_DATE) : 0; + if (mIsCreate || mAlertDate != alertDate) { + mDiffNoteValues.put(NoteColumns.ALERTED_DATE, alertDate); + } + mAlertDate = alertDate; + + int bgColorId = note.has(NoteColumns.BG_COLOR_ID) ? note + .getInt(NoteColumns.BG_COLOR_ID) : ResourceParser.getDefaultBgId(mContext); + if (mIsCreate || mBgColorId != bgColorId) { + mDiffNoteValues.put(NoteColumns.BG_COLOR_ID, bgColorId); + } + mBgColorId = bgColorId; + + long createDate = note.has(NoteColumns.CREATED_DATE) ? note + .getLong(NoteColumns.CREATED_DATE) : System.currentTimeMillis(); + if (mIsCreate || mCreatedDate != createDate) { + mDiffNoteValues.put(NoteColumns.CREATED_DATE, createDate); + } + mCreatedDate = createDate; + + int hasAttachment = note.has(NoteColumns.HAS_ATTACHMENT) ? note + .getInt(NoteColumns.HAS_ATTACHMENT) : 0; + if (mIsCreate || mHasAttachment != hasAttachment) { + mDiffNoteValues.put(NoteColumns.HAS_ATTACHMENT, hasAttachment); + } + mHasAttachment = hasAttachment; + + long modifiedDate = note.has(NoteColumns.MODIFIED_DATE) ? note + .getLong(NoteColumns.MODIFIED_DATE) : System.currentTimeMillis(); + if (mIsCreate || mModifiedDate != modifiedDate) { + mDiffNoteValues.put(NoteColumns.MODIFIED_DATE, modifiedDate); + } + mModifiedDate = modifiedDate; + + long parentId = note.has(NoteColumns.PARENT_ID) ? note + .getLong(NoteColumns.PARENT_ID) : 0; + if (mIsCreate || mParentId != parentId) { + mDiffNoteValues.put(NoteColumns.PARENT_ID, parentId); + } + mParentId = parentId; + + String snippet = note.has(NoteColumns.SNIPPET) ? note + .getString(NoteColumns.SNIPPET) : ""; + if (mIsCreate || !mSnippet.equals(snippet)) { + mDiffNoteValues.put(NoteColumns.SNIPPET, snippet); + } + mSnippet = snippet; + + int type = note.has(NoteColumns.TYPE) ? note.getInt(NoteColumns.TYPE) + : Notes.TYPE_NOTE; + if (mIsCreate || mType != type) { + mDiffNoteValues.put(NoteColumns.TYPE, type); + } + mType = type; + + int widgetId = note.has(NoteColumns.WIDGET_ID) ? note.getInt(NoteColumns.WIDGET_ID) + : AppWidgetManager.INVALID_APPWIDGET_ID; + if (mIsCreate || mWidgetId != widgetId) { + mDiffNoteValues.put(NoteColumns.WIDGET_ID, widgetId); + } + mWidgetId = widgetId; + + int widgetType = note.has(NoteColumns.WIDGET_TYPE) ? note + .getInt(NoteColumns.WIDGET_TYPE) : Notes.TYPE_WIDGET_INVALIDE; + if (mIsCreate || mWidgetType != widgetType) { + mDiffNoteValues.put(NoteColumns.WIDGET_TYPE, widgetType); + } + mWidgetType = widgetType; + + long originParent = note.has(NoteColumns.ORIGIN_PARENT_ID) ? note + .getLong(NoteColumns.ORIGIN_PARENT_ID) : 0; + if (mIsCreate || mOriginParent != originParent) { + mDiffNoteValues.put(NoteColumns.ORIGIN_PARENT_ID, originParent); + } + mOriginParent = originParent; + + for (int i = 0; i < dataArray.length(); i++) { + JSONObject data = dataArray.getJSONObject(i); + SqlData sqlData = null; + if (data.has(DataColumns.ID)) { + long dataId = data.getLong(DataColumns.ID); + for (SqlData temp : mDataList) { + if (dataId == temp.getId()) { + sqlData = temp; + } + } + } + + if (sqlData == null) { + sqlData = new SqlData(mContext); + mDataList.add(sqlData); + } + + sqlData.setContent(data); + } + } + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + return false; + } + return true; + } + + public JSONObject getContent() { + try { + JSONObject js = new JSONObject(); + + if (mIsCreate) { + Log.e(TAG, "it seems that we haven't created this in database yet"); + return null; + } + + JSONObject note = new JSONObject(); + if (mType == Notes.TYPE_NOTE) { + note.put(NoteColumns.ID, mId); + note.put(NoteColumns.ALERTED_DATE, mAlertDate); + note.put(NoteColumns.BG_COLOR_ID, mBgColorId); + note.put(NoteColumns.CREATED_DATE, mCreatedDate); + note.put(NoteColumns.HAS_ATTACHMENT, mHasAttachment); + note.put(NoteColumns.MODIFIED_DATE, mModifiedDate); + note.put(NoteColumns.PARENT_ID, mParentId); + note.put(NoteColumns.SNIPPET, mSnippet); + note.put(NoteColumns.TYPE, mType); + note.put(NoteColumns.WIDGET_ID, mWidgetId); + note.put(NoteColumns.WIDGET_TYPE, mWidgetType); + note.put(NoteColumns.ORIGIN_PARENT_ID, mOriginParent); + js.put(GTaskStringUtils.META_HEAD_NOTE, note); + + JSONArray dataArray = new JSONArray(); + for (SqlData sqlData : mDataList) { + JSONObject data = sqlData.getContent(); + if (data != null) { + dataArray.put(data); + } + } + js.put(GTaskStringUtils.META_HEAD_DATA, dataArray); + } else if (mType == Notes.TYPE_FOLDER || mType == Notes.TYPE_SYSTEM) { + note.put(NoteColumns.ID, mId); + note.put(NoteColumns.TYPE, mType); + note.put(NoteColumns.SNIPPET, mSnippet); + js.put(GTaskStringUtils.META_HEAD_NOTE, note); + } + + return js; + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + } + return null; + } + + public void setParentId(long id) { + mParentId = id; + mDiffNoteValues.put(NoteColumns.PARENT_ID, id); + } + + public void setGtaskId(String gid) { + mDiffNoteValues.put(NoteColumns.GTASK_ID, gid); + } + + public void setSyncId(long syncId) { + mDiffNoteValues.put(NoteColumns.SYNC_ID, syncId); + } + + public void resetLocalModified() { + mDiffNoteValues.put(NoteColumns.LOCAL_MODIFIED, 0); + } + + public long getId() { + return mId; + } + + public long getParentId() { + return mParentId; + } + + public String getSnippet() { + return mSnippet; + } + + public boolean isNoteType() { + return mType == Notes.TYPE_NOTE; + } + + public void commit(boolean validateVersion) { + if (mIsCreate) { + if (mId == INVALID_ID && mDiffNoteValues.containsKey(NoteColumns.ID)) { + mDiffNoteValues.remove(NoteColumns.ID); + } + + Uri uri = mContentResolver.insert(Notes.CONTENT_NOTE_URI, mDiffNoteValues); + try { + mId = Long.valueOf(uri.getPathSegments().get(1)); + } catch (NumberFormatException e) { + Log.e(TAG, "Get note id error :" + e.toString()); + throw new ActionFailureException("create note failed"); + } + if (mId == 0) { + throw new IllegalStateException("Create thread id failed"); + } + + if (mType == Notes.TYPE_NOTE) { + for (SqlData sqlData : mDataList) { + sqlData.commit(mId, false, -1); + } + } + } else { + if (mId <= 0 && mId != Notes.ID_ROOT_FOLDER && mId != Notes.ID_CALL_RECORD_FOLDER) { + Log.e(TAG, "No such note"); + throw new IllegalStateException("Try to update note with invalid id"); + } + if (mDiffNoteValues.size() > 0) { + mVersion ++; + int result = 0; + if (!validateVersion) { + result = mContentResolver.update(Notes.CONTENT_NOTE_URI, mDiffNoteValues, "(" + + NoteColumns.ID + "=?)", new String[] { + String.valueOf(mId) + }); + } else { + result = mContentResolver.update(Notes.CONTENT_NOTE_URI, mDiffNoteValues, "(" + + NoteColumns.ID + "=?) AND (" + NoteColumns.VERSION + "<=?)", + new String[] { + String.valueOf(mId), String.valueOf(mVersion) + }); + } + if (result == 0) { + Log.w(TAG, "there is no update. maybe user updates note when syncing"); + } + } + + if (mType == Notes.TYPE_NOTE) { + for (SqlData sqlData : mDataList) { + sqlData.commit(mId, validateVersion, mVersion); + } + } + } + + // refresh local info + loadFromCursor(mId); + if (mType == Notes.TYPE_NOTE) + loadDataContent(); + + mDiffNoteValues.clear(); + mIsCreate = false; + } +} diff --git a/tsrxns/java/net/micode/notes/gtask/data/Task.java b/tsrxns/java/net/micode/notes/gtask/data/Task.java new file mode 100644 index 0000000..6a19454 --- /dev/null +++ b/tsrxns/java/net/micode/notes/gtask/data/Task.java @@ -0,0 +1,351 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.gtask.data; + +import android.database.Cursor; +import android.text.TextUtils; +import android.util.Log; + +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.DataColumns; +import net.micode.notes.data.Notes.DataConstants; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.gtask.exception.ActionFailureException; +import net.micode.notes.tool.GTaskStringUtils; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + + +public class Task extends Node { + private static final String TAG = Task.class.getSimpleName(); + + private boolean mCompleted; + + private String mNotes; + + private JSONObject mMetaInfo; + + private Task mPriorSibling; + + private TaskList mParent; + + public Task() { + super(); + mCompleted = false; + mNotes = null; + mPriorSibling = null; + mParent = null; + mMetaInfo = null; + } + + public JSONObject getCreateAction(int actionId) { + JSONObject js = new JSONObject(); + + try { + // action_type + js.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE, + GTaskStringUtils.GTASK_JSON_ACTION_TYPE_CREATE); + + // action_id + js.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, actionId); + + // index + js.put(GTaskStringUtils.GTASK_JSON_INDEX, mParent.getChildTaskIndex(this)); + + // entity_delta + JSONObject entity = new JSONObject(); + entity.put(GTaskStringUtils.GTASK_JSON_NAME, getName()); + entity.put(GTaskStringUtils.GTASK_JSON_CREATOR_ID, "null"); + entity.put(GTaskStringUtils.GTASK_JSON_ENTITY_TYPE, + GTaskStringUtils.GTASK_JSON_TYPE_TASK); + if (getNotes() != null) { + entity.put(GTaskStringUtils.GTASK_JSON_NOTES, getNotes()); + } + js.put(GTaskStringUtils.GTASK_JSON_ENTITY_DELTA, entity); + + // parent_id + js.put(GTaskStringUtils.GTASK_JSON_PARENT_ID, mParent.getGid()); + + // dest_parent_type + js.put(GTaskStringUtils.GTASK_JSON_DEST_PARENT_TYPE, + GTaskStringUtils.GTASK_JSON_TYPE_GROUP); + + // list_id + js.put(GTaskStringUtils.GTASK_JSON_LIST_ID, mParent.getGid()); + + // prior_sibling_id + if (mPriorSibling != null) { + js.put(GTaskStringUtils.GTASK_JSON_PRIOR_SIBLING_ID, mPriorSibling.getGid()); + } + + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("fail to generate task-create jsonobject"); + } + + return js; + } + + public JSONObject getUpdateAction(int actionId) { + JSONObject js = new JSONObject(); + + try { + // action_type + js.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE, + GTaskStringUtils.GTASK_JSON_ACTION_TYPE_UPDATE); + + // action_id + js.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, actionId); + + // id + js.put(GTaskStringUtils.GTASK_JSON_ID, getGid()); + + // entity_delta + JSONObject entity = new JSONObject(); + entity.put(GTaskStringUtils.GTASK_JSON_NAME, getName()); + if (getNotes() != null) { + entity.put(GTaskStringUtils.GTASK_JSON_NOTES, getNotes()); + } + entity.put(GTaskStringUtils.GTASK_JSON_DELETED, getDeleted()); + js.put(GTaskStringUtils.GTASK_JSON_ENTITY_DELTA, entity); + + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("fail to generate task-update jsonobject"); + } + + return js; + } + + public void setContentByRemoteJSON(JSONObject js) { + if (js != null) { + try { + // id + if (js.has(GTaskStringUtils.GTASK_JSON_ID)) { + setGid(js.getString(GTaskStringUtils.GTASK_JSON_ID)); + } + + // last_modified + if (js.has(GTaskStringUtils.GTASK_JSON_LAST_MODIFIED)) { + setLastModified(js.getLong(GTaskStringUtils.GTASK_JSON_LAST_MODIFIED)); + } + + // name + if (js.has(GTaskStringUtils.GTASK_JSON_NAME)) { + setName(js.getString(GTaskStringUtils.GTASK_JSON_NAME)); + } + + // notes + if (js.has(GTaskStringUtils.GTASK_JSON_NOTES)) { + setNotes(js.getString(GTaskStringUtils.GTASK_JSON_NOTES)); + } + + // deleted + if (js.has(GTaskStringUtils.GTASK_JSON_DELETED)) { + setDeleted(js.getBoolean(GTaskStringUtils.GTASK_JSON_DELETED)); + } + + // completed + if (js.has(GTaskStringUtils.GTASK_JSON_COMPLETED)) { + setCompleted(js.getBoolean(GTaskStringUtils.GTASK_JSON_COMPLETED)); + } + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("fail to get task content from jsonobject"); + } + } + } + + public void setContentByLocalJSON(JSONObject js) { + if (js == null || !js.has(GTaskStringUtils.META_HEAD_NOTE) + || !js.has(GTaskStringUtils.META_HEAD_DATA)) { + Log.w(TAG, "setContentByLocalJSON: nothing is avaiable"); + } + + try { + JSONObject note = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE); + JSONArray dataArray = js.getJSONArray(GTaskStringUtils.META_HEAD_DATA); + + if (note.getInt(NoteColumns.TYPE) != Notes.TYPE_NOTE) { + Log.e(TAG, "invalid type"); + return; + } + + for (int i = 0; i < dataArray.length(); i++) { + JSONObject data = dataArray.getJSONObject(i); + if (TextUtils.equals(data.getString(DataColumns.MIME_TYPE), DataConstants.NOTE)) { + setName(data.getString(DataColumns.CONTENT)); + break; + } + } + + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + } + } + + public JSONObject getLocalJSONFromContent() { + String name = getName(); + try { + if (mMetaInfo == null) { + // new task created from web + if (name == null) { + Log.w(TAG, "the note seems to be an empty one"); + return null; + } + + JSONObject js = new JSONObject(); + JSONObject note = new JSONObject(); + JSONArray dataArray = new JSONArray(); + JSONObject data = new JSONObject(); + data.put(DataColumns.CONTENT, name); + dataArray.put(data); + js.put(GTaskStringUtils.META_HEAD_DATA, dataArray); + note.put(NoteColumns.TYPE, Notes.TYPE_NOTE); + js.put(GTaskStringUtils.META_HEAD_NOTE, note); + return js; + } else { + // synced task + JSONObject note = mMetaInfo.getJSONObject(GTaskStringUtils.META_HEAD_NOTE); + JSONArray dataArray = mMetaInfo.getJSONArray(GTaskStringUtils.META_HEAD_DATA); + + for (int i = 0; i < dataArray.length(); i++) { + JSONObject data = dataArray.getJSONObject(i); + if (TextUtils.equals(data.getString(DataColumns.MIME_TYPE), DataConstants.NOTE)) { + data.put(DataColumns.CONTENT, getName()); + break; + } + } + + note.put(NoteColumns.TYPE, Notes.TYPE_NOTE); + return mMetaInfo; + } + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + return null; + } + } + + public void setMetaInfo(MetaData metaData) { + if (metaData != null && metaData.getNotes() != null) { + try { + mMetaInfo = new JSONObject(metaData.getNotes()); + } catch (JSONException e) { + Log.w(TAG, e.toString()); + mMetaInfo = null; + } + } + } + + public int getSyncAction(Cursor c) { + try { + JSONObject noteInfo = null; + if (mMetaInfo != null && mMetaInfo.has(GTaskStringUtils.META_HEAD_NOTE)) { + noteInfo = mMetaInfo.getJSONObject(GTaskStringUtils.META_HEAD_NOTE); + } + + if (noteInfo == null) { + Log.w(TAG, "it seems that note meta has been deleted"); + return SYNC_ACTION_UPDATE_REMOTE; + } + + if (!noteInfo.has(NoteColumns.ID)) { + Log.w(TAG, "remote note id seems to be deleted"); + return SYNC_ACTION_UPDATE_LOCAL; + } + + // validate the note id now + if (c.getLong(SqlNote.ID_COLUMN) != noteInfo.getLong(NoteColumns.ID)) { + Log.w(TAG, "note id doesn't match"); + return SYNC_ACTION_UPDATE_LOCAL; + } + + if (c.getInt(SqlNote.LOCAL_MODIFIED_COLUMN) == 0) { + // there is no local update + if (c.getLong(SqlNote.SYNC_ID_COLUMN) == getLastModified()) { + // no update both side + return SYNC_ACTION_NONE; + } else { + // apply remote to local + return SYNC_ACTION_UPDATE_LOCAL; + } + } else { + // validate gtask id + if (!c.getString(SqlNote.GTASK_ID_COLUMN).equals(getGid())) { + Log.e(TAG, "gtask id doesn't match"); + return SYNC_ACTION_ERROR; + } + if (c.getLong(SqlNote.SYNC_ID_COLUMN) == getLastModified()) { + // local modification only + return SYNC_ACTION_UPDATE_REMOTE; + } else { + return SYNC_ACTION_UPDATE_CONFLICT; + } + } + } catch (Exception e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + } + + return SYNC_ACTION_ERROR; + } + + public boolean isWorthSaving() { + return mMetaInfo != null || (getName() != null && getName().trim().length() > 0) + || (getNotes() != null && getNotes().trim().length() > 0); + } + + public void setCompleted(boolean completed) { + this.mCompleted = completed; + } + + public void setNotes(String notes) { + this.mNotes = notes; + } + + public void setPriorSibling(Task priorSibling) { + this.mPriorSibling = priorSibling; + } + + public void setParent(TaskList parent) { + this.mParent = parent; + } + + public boolean getCompleted() { + return this.mCompleted; + } + + public String getNotes() { + return this.mNotes; + } + + public Task getPriorSibling() { + return this.mPriorSibling; + } + + public TaskList getParent() { + return this.mParent; + } + +} diff --git a/tsrxns/java/net/micode/notes/gtask/data/TaskList.java b/tsrxns/java/net/micode/notes/gtask/data/TaskList.java new file mode 100644 index 0000000..4ea21c5 --- /dev/null +++ b/tsrxns/java/net/micode/notes/gtask/data/TaskList.java @@ -0,0 +1,343 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.gtask.data; + +import android.database.Cursor; +import android.util.Log; + +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.gtask.exception.ActionFailureException; +import net.micode.notes.tool.GTaskStringUtils; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; + + +public class TaskList extends Node { + private static final String TAG = TaskList.class.getSimpleName(); + + private int mIndex; + + private ArrayList mChildren; + + public TaskList() { + super(); + mChildren = new ArrayList(); + mIndex = 1; + } + + public JSONObject getCreateAction(int actionId) { + JSONObject js = new JSONObject(); + + try { + // action_type + js.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE, + GTaskStringUtils.GTASK_JSON_ACTION_TYPE_CREATE); + + // action_id + js.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, actionId); + + // index + js.put(GTaskStringUtils.GTASK_JSON_INDEX, mIndex); + + // entity_delta + JSONObject entity = new JSONObject(); + entity.put(GTaskStringUtils.GTASK_JSON_NAME, getName()); + entity.put(GTaskStringUtils.GTASK_JSON_CREATOR_ID, "null"); + entity.put(GTaskStringUtils.GTASK_JSON_ENTITY_TYPE, + GTaskStringUtils.GTASK_JSON_TYPE_GROUP); + js.put(GTaskStringUtils.GTASK_JSON_ENTITY_DELTA, entity); + + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("fail to generate tasklist-create jsonobject"); + } + + return js; + } + + public JSONObject getUpdateAction(int actionId) { + JSONObject js = new JSONObject(); + + try { + // action_type + js.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE, + GTaskStringUtils.GTASK_JSON_ACTION_TYPE_UPDATE); + + // action_id + js.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, actionId); + + // id + js.put(GTaskStringUtils.GTASK_JSON_ID, getGid()); + + // entity_delta + JSONObject entity = new JSONObject(); + entity.put(GTaskStringUtils.GTASK_JSON_NAME, getName()); + entity.put(GTaskStringUtils.GTASK_JSON_DELETED, getDeleted()); + js.put(GTaskStringUtils.GTASK_JSON_ENTITY_DELTA, entity); + + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("fail to generate tasklist-update jsonobject"); + } + + return js; + } + + public void setContentByRemoteJSON(JSONObject js) { + if (js != null) { + try { + // id + if (js.has(GTaskStringUtils.GTASK_JSON_ID)) { + setGid(js.getString(GTaskStringUtils.GTASK_JSON_ID)); + } + + // last_modified + if (js.has(GTaskStringUtils.GTASK_JSON_LAST_MODIFIED)) { + setLastModified(js.getLong(GTaskStringUtils.GTASK_JSON_LAST_MODIFIED)); + } + + // name + if (js.has(GTaskStringUtils.GTASK_JSON_NAME)) { + setName(js.getString(GTaskStringUtils.GTASK_JSON_NAME)); + } + + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("fail to get tasklist content from jsonobject"); + } + } + } + + public void setContentByLocalJSON(JSONObject js) { + if (js == null || !js.has(GTaskStringUtils.META_HEAD_NOTE)) { + Log.w(TAG, "setContentByLocalJSON: nothing is avaiable"); + } + + try { + JSONObject folder = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE); + + if (folder.getInt(NoteColumns.TYPE) == Notes.TYPE_FOLDER) { + String name = folder.getString(NoteColumns.SNIPPET); + setName(GTaskStringUtils.MIUI_FOLDER_PREFFIX + name); + } else if (folder.getInt(NoteColumns.TYPE) == Notes.TYPE_SYSTEM) { + if (folder.getLong(NoteColumns.ID) == Notes.ID_ROOT_FOLDER) + setName(GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_DEFAULT); + else if (folder.getLong(NoteColumns.ID) == Notes.ID_CALL_RECORD_FOLDER) + setName(GTaskStringUtils.MIUI_FOLDER_PREFFIX + + GTaskStringUtils.FOLDER_CALL_NOTE); + else + Log.e(TAG, "invalid system folder"); + } else { + Log.e(TAG, "error type"); + } + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + } + } + + public JSONObject getLocalJSONFromContent() { + try { + JSONObject js = new JSONObject(); + JSONObject folder = new JSONObject(); + + String folderName = getName(); + if (getName().startsWith(GTaskStringUtils.MIUI_FOLDER_PREFFIX)) + folderName = folderName.substring(GTaskStringUtils.MIUI_FOLDER_PREFFIX.length(), + folderName.length()); + folder.put(NoteColumns.SNIPPET, folderName); + if (folderName.equals(GTaskStringUtils.FOLDER_DEFAULT) + || folderName.equals(GTaskStringUtils.FOLDER_CALL_NOTE)) + folder.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); + else + folder.put(NoteColumns.TYPE, Notes.TYPE_FOLDER); + + js.put(GTaskStringUtils.META_HEAD_NOTE, folder); + + return js; + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + return null; + } + } + + public int getSyncAction(Cursor c) { + try { + if (c.getInt(SqlNote.LOCAL_MODIFIED_COLUMN) == 0) { + // there is no local update + if (c.getLong(SqlNote.SYNC_ID_COLUMN) == getLastModified()) { + // no update both side + return SYNC_ACTION_NONE; + } else { + // apply remote to local + return SYNC_ACTION_UPDATE_LOCAL; + } + } else { + // validate gtask id + if (!c.getString(SqlNote.GTASK_ID_COLUMN).equals(getGid())) { + Log.e(TAG, "gtask id doesn't match"); + return SYNC_ACTION_ERROR; + } + if (c.getLong(SqlNote.SYNC_ID_COLUMN) == getLastModified()) { + // local modification only + return SYNC_ACTION_UPDATE_REMOTE; + } else { + // for folder conflicts, just apply local modification + return SYNC_ACTION_UPDATE_REMOTE; + } + } + } catch (Exception e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + } + + return SYNC_ACTION_ERROR; + } + + public int getChildTaskCount() { + return mChildren.size(); + } + + public boolean addChildTask(Task task) { + boolean ret = false; + if (task != null && !mChildren.contains(task)) { + ret = mChildren.add(task); + if (ret) { + // need to set prior sibling and parent + task.setPriorSibling(mChildren.isEmpty() ? null : mChildren + .get(mChildren.size() - 1)); + task.setParent(this); + } + } + return ret; + } + + public boolean addChildTask(Task task, int index) { + if (index < 0 || index > mChildren.size()) { + Log.e(TAG, "add child task: invalid index"); + return false; + } + + int pos = mChildren.indexOf(task); + if (task != null && pos == -1) { + mChildren.add(index, task); + + // update the task list + Task preTask = null; + Task afterTask = null; + if (index != 0) + preTask = mChildren.get(index - 1); + if (index != mChildren.size() - 1) + afterTask = mChildren.get(index + 1); + + task.setPriorSibling(preTask); + if (afterTask != null) + afterTask.setPriorSibling(task); + } + + return true; + } + + public boolean removeChildTask(Task task) { + boolean ret = false; + int index = mChildren.indexOf(task); + if (index != -1) { + ret = mChildren.remove(task); + + if (ret) { + // reset prior sibling and parent + task.setPriorSibling(null); + task.setParent(null); + + // update the task list + if (index != mChildren.size()) { + mChildren.get(index).setPriorSibling( + index == 0 ? null : mChildren.get(index - 1)); + } + } + } + return ret; + } + + public boolean moveChildTask(Task task, int index) { + + if (index < 0 || index >= mChildren.size()) { + Log.e(TAG, "move child task: invalid index"); + return false; + } + + int pos = mChildren.indexOf(task); + if (pos == -1) { + Log.e(TAG, "move child task: the task should in the list"); + return false; + } + + if (pos == index) + return true; + return (removeChildTask(task) && addChildTask(task, index)); + } + + public Task findChildTaskByGid(String gid) { + for (int i = 0; i < mChildren.size(); i++) { + Task t = mChildren.get(i); + if (t.getGid().equals(gid)) { + return t; + } + } + return null; + } + + public int getChildTaskIndex(Task task) { + return mChildren.indexOf(task); + } + + public Task getChildTaskByIndex(int index) { + if (index < 0 || index >= mChildren.size()) { + Log.e(TAG, "getTaskByIndex: invalid index"); + return null; + } + return mChildren.get(index); + } + + public Task getChilTaskByGid(String gid) { + for (Task task : mChildren) { + if (task.getGid().equals(gid)) + return task; + } + return null; + } + + public ArrayList getChildTaskList() { + return this.mChildren; + } + + public void setIndex(int index) { + this.mIndex = index; + } + + public int getIndex() { + return this.mIndex; + } +} diff --git a/tsrxns/java/net/micode/notes/gtask/exception/ActionFailureException.java b/tsrxns/java/net/micode/notes/gtask/exception/ActionFailureException.java new file mode 100644 index 0000000..15504be --- /dev/null +++ b/tsrxns/java/net/micode/notes/gtask/exception/ActionFailureException.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.gtask.exception; + +public class ActionFailureException extends RuntimeException { + private static final long serialVersionUID = 4425249765923293627L; + + public ActionFailureException() { + super(); + } + + public ActionFailureException(String paramString) { + super(paramString); + } + + public ActionFailureException(String paramString, Throwable paramThrowable) { + super(paramString, paramThrowable); + } +} diff --git a/tsrxns/java/net/micode/notes/gtask/exception/NetworkFailureException.java b/tsrxns/java/net/micode/notes/gtask/exception/NetworkFailureException.java new file mode 100644 index 0000000..b08cfb1 --- /dev/null +++ b/tsrxns/java/net/micode/notes/gtask/exception/NetworkFailureException.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.gtask.exception; + +public class NetworkFailureException extends Exception { + private static final long serialVersionUID = 2107610287180234136L; + + public NetworkFailureException() { + super(); + } + + public NetworkFailureException(String paramString) { + super(paramString); + } + + public NetworkFailureException(String paramString, Throwable paramThrowable) { + super(paramString, paramThrowable); + } +} diff --git a/tsrxns/java/net/micode/notes/gtask/remote/GTaskASyncTask.java b/tsrxns/java/net/micode/notes/gtask/remote/GTaskASyncTask.java new file mode 100644 index 0000000..3679b5d --- /dev/null +++ b/tsrxns/java/net/micode/notes/gtask/remote/GTaskASyncTask.java @@ -0,0 +1,143 @@ + +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.gtask.remote; + +import android.app.Notification; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.os.AsyncTask; + +import net.micode.notes.R; +import net.micode.notes.ui.NotesListActivity; +import net.micode.notes.ui.NotesPreferenceActivity; + + +public class GTaskASyncTask extends AsyncTask { + + private static int GTASK_SYNC_NOTIFICATION_ID = 5234235; + + public interface OnCompleteListener { + void onComplete(); + } + + private Context mContext; + + private NotificationManager mNotifiManager; + + private GTaskManager mTaskManager; + + private OnCompleteListener mOnCompleteListener; + + public GTaskASyncTask(Context context, OnCompleteListener listener) { + mContext = context; + mOnCompleteListener = listener; + mNotifiManager = (NotificationManager) mContext + .getSystemService(Context.NOTIFICATION_SERVICE); + mTaskManager = GTaskManager.getInstance(); + } + + public void cancelSync() { + mTaskManager.cancelSync(); + } + + public void publishProgess(String message) { + publishProgress(new String[] { + message + }); + } + +// private void showNotification(int tickerId, String content) { +// Notification notification = new Notification(R.drawable.notification, mContext +// .getString(tickerId), System.currentTimeMillis()); +// notification.defaults = Notification.DEFAULT_LIGHTS; +// notification.flags = Notification.FLAG_AUTO_CANCEL; +// PendingIntent pendingIntent; +// if (tickerId != R.string.ticker_success) { +// pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext, +// NotesPreferenceActivity.class), 0); +// +// } else { +// pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext, +// NotesListActivity.class), 0); +// } +// notification.setLatestEventInfo(mContext, mContext.getString(R.string.app_name), content, +// pendingIntent); +// mNotifiManager.notify(GTASK_SYNC_NOTIFICATION_ID, notification); +// } +private void showNotification(int tickerId, String content) { + PendingIntent pendingIntent; + if (tickerId != R.string.ticker_success) { + pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext, + NotesPreferenceActivity.class), PendingIntent.FLAG_IMMUTABLE); + } else { + pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext, + NotesListActivity.class), PendingIntent.FLAG_IMMUTABLE); + } + Notification.Builder builder = new Notification.Builder(mContext) + .setAutoCancel(true) + .setContentTitle(mContext.getString(R.string.app_name)) + .setContentText(content) + .setContentIntent(pendingIntent) + .setWhen(System.currentTimeMillis()) + .setOngoing(true); + Notification notification=builder.getNotification(); + mNotifiManager.notify(GTASK_SYNC_NOTIFICATION_ID, notification); +} + + + @Override + protected Integer doInBackground(Void... unused) { + publishProgess(mContext.getString(R.string.sync_progress_login, NotesPreferenceActivity + .getSyncAccountName(mContext))); + return mTaskManager.sync(mContext, this); + } + + @Override + protected void onProgressUpdate(String... progress) { + showNotification(R.string.ticker_syncing, progress[0]); + if (mContext instanceof GTaskSyncService) { + ((GTaskSyncService) mContext).sendBroadcast(progress[0]); + } + } + + @Override + protected void onPostExecute(Integer result) { + if (result == GTaskManager.STATE_SUCCESS) { + showNotification(R.string.ticker_success, mContext.getString( + R.string.success_sync_account, mTaskManager.getSyncAccount())); + NotesPreferenceActivity.setLastSyncTime(mContext, System.currentTimeMillis()); + } else if (result == GTaskManager.STATE_NETWORK_ERROR) { + showNotification(R.string.ticker_fail, mContext.getString(R.string.error_sync_network)); + } else if (result == GTaskManager.STATE_INTERNAL_ERROR) { + showNotification(R.string.ticker_fail, mContext.getString(R.string.error_sync_internal)); + } else if (result == GTaskManager.STATE_SYNC_CANCELLED) { + showNotification(R.string.ticker_cancel, mContext + .getString(R.string.error_sync_cancelled)); + } + if (mOnCompleteListener != null) { + new Thread(new Runnable() { + + public void run() { + mOnCompleteListener.onComplete(); + } + }).start(); + } + } +} diff --git a/tsrxns/java/net/micode/notes/gtask/remote/GTaskClient.java b/tsrxns/java/net/micode/notes/gtask/remote/GTaskClient.java new file mode 100644 index 0000000..c67dfdf --- /dev/null +++ b/tsrxns/java/net/micode/notes/gtask/remote/GTaskClient.java @@ -0,0 +1,585 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.gtask.remote; + +import android.accounts.Account; +import android.accounts.AccountManager; +import android.accounts.AccountManagerFuture; +import android.app.Activity; +import android.os.Bundle; +import android.text.TextUtils; +import android.util.Log; + +import net.micode.notes.gtask.data.Node; +import net.micode.notes.gtask.data.Task; +import net.micode.notes.gtask.data.TaskList; +import net.micode.notes.gtask.exception.ActionFailureException; +import net.micode.notes.gtask.exception.NetworkFailureException; +import net.micode.notes.tool.GTaskStringUtils; +import net.micode.notes.ui.NotesPreferenceActivity; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.client.ClientProtocolException; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.cookie.Cookie; +import org.apache.http.impl.client.BasicCookieStore; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.params.BasicHttpParams; +import org.apache.http.params.HttpConnectionParams; +import org.apache.http.params.HttpParams; +import org.apache.http.params.HttpProtocolParams; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.LinkedList; +import java.util.List; +import java.util.zip.GZIPInputStream; +import java.util.zip.Inflater; +import java.util.zip.InflaterInputStream; + + +public class GTaskClient { + private static final String TAG = GTaskClient.class.getSimpleName(); + + private static final String GTASK_URL = "https://mail.google.com/tasks/"; + + private static final String GTASK_GET_URL = "https://mail.google.com/tasks/ig"; + + private static final String GTASK_POST_URL = "https://mail.google.com/tasks/r/ig"; + + private static GTaskClient mInstance = null; + + private DefaultHttpClient mHttpClient; + + private String mGetUrl; + + private String mPostUrl; + + private long mClientVersion; + + private boolean mLoggedin; + + private long mLastLoginTime; + + private int mActionId; + + private Account mAccount; + + private JSONArray mUpdateArray; + + private GTaskClient() { + mHttpClient = null; + mGetUrl = GTASK_GET_URL; + mPostUrl = GTASK_POST_URL; + mClientVersion = -1; + mLoggedin = false; + mLastLoginTime = 0; + mActionId = 1; + mAccount = null; + mUpdateArray = null; + } + + public static synchronized GTaskClient getInstance() { + if (mInstance == null) { + mInstance = new GTaskClient(); + } + return mInstance; + } + + public boolean login(Activity activity) { + // we suppose that the cookie would expire after 5 minutes + // then we need to re-login + final long interval = 1000 * 60 * 5; + if (mLastLoginTime + interval < System.currentTimeMillis()) { + mLoggedin = false; + } + + // need to re-login after account switch + if (mLoggedin + && !TextUtils.equals(getSyncAccount().name, NotesPreferenceActivity + .getSyncAccountName(activity))) { + mLoggedin = false; + } + + if (mLoggedin) { + Log.d(TAG, "already logged in"); + return true; + } + + mLastLoginTime = System.currentTimeMillis(); + String authToken = loginGoogleAccount(activity, false); + if (authToken == null) { + Log.e(TAG, "login google account failed"); + return false; + } + + // login with custom domain if necessary + if (!(mAccount.name.toLowerCase().endsWith("gmail.com") || mAccount.name.toLowerCase() + .endsWith("googlemail.com"))) { + StringBuilder url = new StringBuilder(GTASK_URL).append("a/"); + int index = mAccount.name.indexOf('@') + 1; + String suffix = mAccount.name.substring(index); + url.append(suffix + "/"); + mGetUrl = url.toString() + "ig"; + mPostUrl = url.toString() + "r/ig"; + + if (tryToLoginGtask(activity, authToken)) { + mLoggedin = true; + } + } + + // try to login with google official url + if (!mLoggedin) { + mGetUrl = GTASK_GET_URL; + mPostUrl = GTASK_POST_URL; + if (!tryToLoginGtask(activity, authToken)) { + return false; + } + } + + mLoggedin = true; + return true; + } + + private String loginGoogleAccount(Activity activity, boolean invalidateToken) { + String authToken; + AccountManager accountManager = AccountManager.get(activity); + Account[] accounts = accountManager.getAccountsByType("com.google"); + + if (accounts.length == 0) { + Log.e(TAG, "there is no available google account"); + return null; + } + + String accountName = NotesPreferenceActivity.getSyncAccountName(activity); + Account account = null; + for (Account a : accounts) { + if (a.name.equals(accountName)) { + account = a; + break; + } + } + if (account != null) { + mAccount = account; + } else { + Log.e(TAG, "unable to get an account with the same name in the settings"); + return null; + } + + // get the token now + AccountManagerFuture accountManagerFuture = accountManager.getAuthToken(account, + "goanna_mobile", null, activity, null, null); + try { + Bundle authTokenBundle = accountManagerFuture.getResult(); + authToken = authTokenBundle.getString(AccountManager.KEY_AUTHTOKEN); + if (invalidateToken) { + accountManager.invalidateAuthToken("com.google", authToken); + loginGoogleAccount(activity, false); + } + } catch (Exception e) { + Log.e(TAG, "get auth token failed"); + authToken = null; + } + + return authToken; + } + + private boolean tryToLoginGtask(Activity activity, String authToken) { + if (!loginGtask(authToken)) { + // maybe the auth token is out of date, now let's invalidate the + // token and try again + authToken = loginGoogleAccount(activity, true); + if (authToken == null) { + Log.e(TAG, "login google account failed"); + return false; + } + + if (!loginGtask(authToken)) { + Log.e(TAG, "login gtask failed"); + return false; + } + } + return true; + } + + private boolean loginGtask(String authToken) { + int timeoutConnection = 10000; + int timeoutSocket = 15000; + HttpParams httpParameters = new BasicHttpParams(); + HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection); + HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket); + mHttpClient = new DefaultHttpClient(httpParameters); + BasicCookieStore localBasicCookieStore = new BasicCookieStore(); + mHttpClient.setCookieStore(localBasicCookieStore); + HttpProtocolParams.setUseExpectContinue(mHttpClient.getParams(), false); + + // login gtask + try { + String loginUrl = mGetUrl + "?auth=" + authToken; + HttpGet httpGet = new HttpGet(loginUrl); + HttpResponse response = null; + response = mHttpClient.execute(httpGet); + + // get the cookie now + List cookies = mHttpClient.getCookieStore().getCookies(); + boolean hasAuthCookie = false; + for (Cookie cookie : cookies) { + if (cookie.getName().contains("GTL")) { + hasAuthCookie = true; + } + } + if (!hasAuthCookie) { + Log.w(TAG, "it seems that there is no auth cookie"); + } + + // get the client version + String resString = getResponseContent(response.getEntity()); + String jsBegin = "_setup("; + String jsEnd = ")}"; + int begin = resString.indexOf(jsBegin); + int end = resString.lastIndexOf(jsEnd); + String jsString = null; + if (begin != -1 && end != -1 && begin < end) { + jsString = resString.substring(begin + jsBegin.length(), end); + } + JSONObject js = new JSONObject(jsString); + mClientVersion = js.getLong("v"); + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + return false; + } catch (Exception e) { + // simply catch all exceptions + Log.e(TAG, "httpget gtask_url failed"); + return false; + } + + return true; + } + + private int getActionId() { + return mActionId++; + } + + private HttpPost createHttpPost() { + HttpPost httpPost = new HttpPost(mPostUrl); + httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8"); + httpPost.setHeader("AT", "1"); + return httpPost; + } + + private String getResponseContent(HttpEntity entity) throws IOException { + String contentEncoding = null; + if (entity.getContentEncoding() != null) { + contentEncoding = entity.getContentEncoding().getValue(); + Log.d(TAG, "encoding: " + contentEncoding); + } + + InputStream input = entity.getContent(); + if (contentEncoding != null && contentEncoding.equalsIgnoreCase("gzip")) { + input = new GZIPInputStream(entity.getContent()); + } else if (contentEncoding != null && contentEncoding.equalsIgnoreCase("deflate")) { + Inflater inflater = new Inflater(true); + input = new InflaterInputStream(entity.getContent(), inflater); + } + + try { + InputStreamReader isr = new InputStreamReader(input); + BufferedReader br = new BufferedReader(isr); + StringBuilder sb = new StringBuilder(); + + while (true) { + String buff = br.readLine(); + if (buff == null) { + return sb.toString(); + } + sb = sb.append(buff); + } + } finally { + input.close(); + } + } + + private JSONObject postRequest(JSONObject js) throws NetworkFailureException { + if (!mLoggedin) { + Log.e(TAG, "please login first"); + throw new ActionFailureException("not logged in"); + } + + HttpPost httpPost = createHttpPost(); + try { + LinkedList list = new LinkedList(); + list.add(new BasicNameValuePair("r", js.toString())); + UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list, "UTF-8"); + httpPost.setEntity(entity); + + // execute the post + HttpResponse response = mHttpClient.execute(httpPost); + String jsString = getResponseContent(response.getEntity()); + return new JSONObject(jsString); + + } catch (ClientProtocolException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new NetworkFailureException("postRequest failed"); + } catch (IOException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new NetworkFailureException("postRequest failed"); + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("unable to convert response content to jsonobject"); + } catch (Exception e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("error occurs when posting request"); + } + } + + public void createTask(Task task) throws NetworkFailureException { + commitUpdate(); + try { + JSONObject jsPost = new JSONObject(); + JSONArray actionList = new JSONArray(); + + // action_list + actionList.put(task.getCreateAction(getActionId())); + jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, actionList); + + // client_version + jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion); + + // post + JSONObject jsResponse = postRequest(jsPost); + JSONObject jsResult = (JSONObject) jsResponse.getJSONArray( + GTaskStringUtils.GTASK_JSON_RESULTS).get(0); + task.setGid(jsResult.getString(GTaskStringUtils.GTASK_JSON_NEW_ID)); + + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("create task: handing jsonobject failed"); + } + } + + public void createTaskList(TaskList tasklist) throws NetworkFailureException { + commitUpdate(); + try { + JSONObject jsPost = new JSONObject(); + JSONArray actionList = new JSONArray(); + + // action_list + actionList.put(tasklist.getCreateAction(getActionId())); + jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, actionList); + + // client version + jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion); + + // post + JSONObject jsResponse = postRequest(jsPost); + JSONObject jsResult = (JSONObject) jsResponse.getJSONArray( + GTaskStringUtils.GTASK_JSON_RESULTS).get(0); + tasklist.setGid(jsResult.getString(GTaskStringUtils.GTASK_JSON_NEW_ID)); + + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("create tasklist: handing jsonobject failed"); + } + } + + public void commitUpdate() throws NetworkFailureException { + if (mUpdateArray != null) { + try { + JSONObject jsPost = new JSONObject(); + + // action_list + jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, mUpdateArray); + + // client_version + jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion); + + postRequest(jsPost); + mUpdateArray = null; + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("commit update: handing jsonobject failed"); + } + } + } + + public void addUpdateNode(Node node) throws NetworkFailureException { + if (node != null) { + // too many update items may result in an error + // set max to 10 items + if (mUpdateArray != null && mUpdateArray.length() > 10) { + commitUpdate(); + } + + if (mUpdateArray == null) + mUpdateArray = new JSONArray(); + mUpdateArray.put(node.getUpdateAction(getActionId())); + } + } + + public void moveTask(Task task, TaskList preParent, TaskList curParent) + throws NetworkFailureException { + commitUpdate(); + try { + JSONObject jsPost = new JSONObject(); + JSONArray actionList = new JSONArray(); + JSONObject action = new JSONObject(); + + // action_list + action.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE, + GTaskStringUtils.GTASK_JSON_ACTION_TYPE_MOVE); + action.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, getActionId()); + action.put(GTaskStringUtils.GTASK_JSON_ID, task.getGid()); + if (preParent == curParent && task.getPriorSibling() != null) { + // put prioring_sibing_id only if moving within the tasklist and + // it is not the first one + action.put(GTaskStringUtils.GTASK_JSON_PRIOR_SIBLING_ID, task.getPriorSibling()); + } + action.put(GTaskStringUtils.GTASK_JSON_SOURCE_LIST, preParent.getGid()); + action.put(GTaskStringUtils.GTASK_JSON_DEST_PARENT, curParent.getGid()); + if (preParent != curParent) { + // put the dest_list only if moving between tasklists + action.put(GTaskStringUtils.GTASK_JSON_DEST_LIST, curParent.getGid()); + } + actionList.put(action); + jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, actionList); + + // client_version + jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion); + + postRequest(jsPost); + + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("move task: handing jsonobject failed"); + } + } + + public void deleteNode(Node node) throws NetworkFailureException { + commitUpdate(); + try { + JSONObject jsPost = new JSONObject(); + JSONArray actionList = new JSONArray(); + + // action_list + node.setDeleted(true); + actionList.put(node.getUpdateAction(getActionId())); + jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, actionList); + + // client_version + jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion); + + postRequest(jsPost); + mUpdateArray = null; + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("delete node: handing jsonobject failed"); + } + } + + public JSONArray getTaskLists() throws NetworkFailureException { + if (!mLoggedin) { + Log.e(TAG, "please login first"); + throw new ActionFailureException("not logged in"); + } + + try { + HttpGet httpGet = new HttpGet(mGetUrl); + HttpResponse response = null; + response = mHttpClient.execute(httpGet); + + // get the task list + String resString = getResponseContent(response.getEntity()); + String jsBegin = "_setup("; + String jsEnd = ")}"; + int begin = resString.indexOf(jsBegin); + int end = resString.lastIndexOf(jsEnd); + String jsString = null; + if (begin != -1 && end != -1 && begin < end) { + jsString = resString.substring(begin + jsBegin.length(), end); + } + JSONObject js = new JSONObject(jsString); + return js.getJSONObject("t").getJSONArray(GTaskStringUtils.GTASK_JSON_LISTS); + } catch (ClientProtocolException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new NetworkFailureException("gettasklists: httpget failed"); + } catch (IOException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new NetworkFailureException("gettasklists: httpget failed"); + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("get task lists: handing jasonobject failed"); + } + } + + public JSONArray getTaskList(String listGid) throws NetworkFailureException { + commitUpdate(); + try { + JSONObject jsPost = new JSONObject(); + JSONArray actionList = new JSONArray(); + JSONObject action = new JSONObject(); + + // action_list + action.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE, + GTaskStringUtils.GTASK_JSON_ACTION_TYPE_GETALL); + action.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, getActionId()); + action.put(GTaskStringUtils.GTASK_JSON_LIST_ID, listGid); + action.put(GTaskStringUtils.GTASK_JSON_GET_DELETED, false); + actionList.put(action); + jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, actionList); + + // client_version + jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion); + + JSONObject jsResponse = postRequest(jsPost); + return jsResponse.getJSONArray(GTaskStringUtils.GTASK_JSON_TASKS); + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("get task list: handing jsonobject failed"); + } + } + + public Account getSyncAccount() { + return mAccount; + } + + public void resetUpdateArray() { + mUpdateArray = null; + } +} diff --git a/tsrxns/java/net/micode/notes/gtask/remote/GTaskManager.java b/tsrxns/java/net/micode/notes/gtask/remote/GTaskManager.java new file mode 100644 index 0000000..d2b4082 --- /dev/null +++ b/tsrxns/java/net/micode/notes/gtask/remote/GTaskManager.java @@ -0,0 +1,800 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.gtask.remote; + +import android.app.Activity; +import android.content.ContentResolver; +import android.content.ContentUris; +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +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.NoteColumns; +import net.micode.notes.gtask.data.MetaData; +import net.micode.notes.gtask.data.Node; +import net.micode.notes.gtask.data.SqlNote; +import net.micode.notes.gtask.data.Task; +import net.micode.notes.gtask.data.TaskList; +import net.micode.notes.gtask.exception.ActionFailureException; +import net.micode.notes.gtask.exception.NetworkFailureException; +import net.micode.notes.tool.DataUtils; +import net.micode.notes.tool.GTaskStringUtils; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Map; + + +public class GTaskManager { + private static final String TAG = GTaskManager.class.getSimpleName(); + + public static final int STATE_SUCCESS = 0; + + public static final int STATE_NETWORK_ERROR = 1; + + public static final int STATE_INTERNAL_ERROR = 2; + + public static final int STATE_SYNC_IN_PROGRESS = 3; + + public static final int STATE_SYNC_CANCELLED = 4; + + private static GTaskManager mInstance = null; + + private Activity mActivity; + + private Context mContext; + + private ContentResolver mContentResolver; + + private boolean mSyncing; + + private boolean mCancelled; + + private HashMap mGTaskListHashMap; + + private HashMap mGTaskHashMap; + + private HashMap mMetaHashMap; + + private TaskList mMetaList; + + private HashSet mLocalDeleteIdMap; + + private HashMap mGidToNid; + + private HashMap mNidToGid; + + private GTaskManager() { + mSyncing = false; + mCancelled = false; + mGTaskListHashMap = new HashMap(); + mGTaskHashMap = new HashMap(); + mMetaHashMap = new HashMap(); + mMetaList = null; + mLocalDeleteIdMap = new HashSet(); + mGidToNid = new HashMap(); + mNidToGid = new HashMap(); + } + + public static synchronized GTaskManager getInstance() { + if (mInstance == null) { + mInstance = new GTaskManager(); + } + return mInstance; + } + + public synchronized void setActivityContext(Activity activity) { + // used for getting authtoken + mActivity = activity; + } + + public int sync(Context context, GTaskASyncTask asyncTask) { + if (mSyncing) { + Log.d(TAG, "Sync is in progress"); + return STATE_SYNC_IN_PROGRESS; + } + mContext = context; + mContentResolver = mContext.getContentResolver(); + mSyncing = true; + mCancelled = false; + mGTaskListHashMap.clear(); + mGTaskHashMap.clear(); + mMetaHashMap.clear(); + mLocalDeleteIdMap.clear(); + mGidToNid.clear(); + mNidToGid.clear(); + + try { + GTaskClient client = GTaskClient.getInstance(); + client.resetUpdateArray(); + + // login google task + if (!mCancelled) { + if (!client.login(mActivity)) { + throw new NetworkFailureException("login google task failed"); + } + } + + // get the task list from google + asyncTask.publishProgess(mContext.getString(R.string.sync_progress_init_list)); + initGTaskList(); + + // do content sync work + asyncTask.publishProgess(mContext.getString(R.string.sync_progress_syncing)); + syncContent(); + } catch (NetworkFailureException e) { + Log.e(TAG, e.toString()); + return STATE_NETWORK_ERROR; + } catch (ActionFailureException e) { + Log.e(TAG, e.toString()); + return STATE_INTERNAL_ERROR; + } catch (Exception e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + return STATE_INTERNAL_ERROR; + } finally { + mGTaskListHashMap.clear(); + mGTaskHashMap.clear(); + mMetaHashMap.clear(); + mLocalDeleteIdMap.clear(); + mGidToNid.clear(); + mNidToGid.clear(); + mSyncing = false; + } + + return mCancelled ? STATE_SYNC_CANCELLED : STATE_SUCCESS; + } + + private void initGTaskList() throws NetworkFailureException { + if (mCancelled) + return; + GTaskClient client = GTaskClient.getInstance(); + try { + JSONArray jsTaskLists = client.getTaskLists(); + + // init meta list first + mMetaList = null; + for (int i = 0; i < jsTaskLists.length(); i++) { + JSONObject object = jsTaskLists.getJSONObject(i); + String gid = object.getString(GTaskStringUtils.GTASK_JSON_ID); + String name = object.getString(GTaskStringUtils.GTASK_JSON_NAME); + + if (name + .equals(GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_META)) { + mMetaList = new TaskList(); + mMetaList.setContentByRemoteJSON(object); + + // load meta data + JSONArray jsMetas = client.getTaskList(gid); + for (int j = 0; j < jsMetas.length(); j++) { + object = (JSONObject) jsMetas.getJSONObject(j); + MetaData metaData = new MetaData(); + metaData.setContentByRemoteJSON(object); + if (metaData.isWorthSaving()) { + mMetaList.addChildTask(metaData); + if (metaData.getGid() != null) { + mMetaHashMap.put(metaData.getRelatedGid(), metaData); + } + } + } + } + } + + // create meta list if not existed + if (mMetaList == null) { + mMetaList = new TaskList(); + mMetaList.setName(GTaskStringUtils.MIUI_FOLDER_PREFFIX + + GTaskStringUtils.FOLDER_META); + GTaskClient.getInstance().createTaskList(mMetaList); + } + + // init task list + for (int i = 0; i < jsTaskLists.length(); i++) { + JSONObject object = jsTaskLists.getJSONObject(i); + String gid = object.getString(GTaskStringUtils.GTASK_JSON_ID); + String name = object.getString(GTaskStringUtils.GTASK_JSON_NAME); + + if (name.startsWith(GTaskStringUtils.MIUI_FOLDER_PREFFIX) + && !name.equals(GTaskStringUtils.MIUI_FOLDER_PREFFIX + + GTaskStringUtils.FOLDER_META)) { + TaskList tasklist = new TaskList(); + tasklist.setContentByRemoteJSON(object); + mGTaskListHashMap.put(gid, tasklist); + mGTaskHashMap.put(gid, tasklist); + + // load tasks + JSONArray jsTasks = client.getTaskList(gid); + for (int j = 0; j < jsTasks.length(); j++) { + object = (JSONObject) jsTasks.getJSONObject(j); + gid = object.getString(GTaskStringUtils.GTASK_JSON_ID); + Task task = new Task(); + task.setContentByRemoteJSON(object); + if (task.isWorthSaving()) { + task.setMetaInfo(mMetaHashMap.get(gid)); + tasklist.addChildTask(task); + mGTaskHashMap.put(gid, task); + } + } + } + } + } catch (JSONException e) { + Log.e(TAG, e.toString()); + e.printStackTrace(); + throw new ActionFailureException("initGTaskList: handing JSONObject failed"); + } + } + + private void syncContent() throws NetworkFailureException { + int syncType; + Cursor c = null; + String gid; + Node node; + + mLocalDeleteIdMap.clear(); + + if (mCancelled) { + return; + } + + // for local deleted note + try { + c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE, + "(type<>? AND parent_id=?)", new String[] { + String.valueOf(Notes.TYPE_SYSTEM), String.valueOf(Notes.ID_TRASH_FOLER) + }, null); + if (c != null) { + while (c.moveToNext()) { + gid = c.getString(SqlNote.GTASK_ID_COLUMN); + node = mGTaskHashMap.get(gid); + if (node != null) { + mGTaskHashMap.remove(gid); + doContentSync(Node.SYNC_ACTION_DEL_REMOTE, node, c); + } + + mLocalDeleteIdMap.add(c.getLong(SqlNote.ID_COLUMN)); + } + } else { + Log.w(TAG, "failed to query trash folder"); + } + } finally { + if (c != null) { + c.close(); + c = null; + } + } + + // sync folder first + syncFolder(); + + // for note existing in database + try { + c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE, + "(type=? AND parent_id<>?)", new String[] { + String.valueOf(Notes.TYPE_NOTE), String.valueOf(Notes.ID_TRASH_FOLER) + }, NoteColumns.TYPE + " DESC"); + if (c != null) { + while (c.moveToNext()) { + gid = c.getString(SqlNote.GTASK_ID_COLUMN); + node = mGTaskHashMap.get(gid); + if (node != null) { + mGTaskHashMap.remove(gid); + mGidToNid.put(gid, c.getLong(SqlNote.ID_COLUMN)); + mNidToGid.put(c.getLong(SqlNote.ID_COLUMN), gid); + syncType = node.getSyncAction(c); + } else { + if (c.getString(SqlNote.GTASK_ID_COLUMN).trim().length() == 0) { + // local add + syncType = Node.SYNC_ACTION_ADD_REMOTE; + } else { + // remote delete + syncType = Node.SYNC_ACTION_DEL_LOCAL; + } + } + doContentSync(syncType, node, c); + } + } else { + Log.w(TAG, "failed to query existing note in database"); + } + + } finally { + if (c != null) { + c.close(); + c = null; + } + } + + // go through remaining items + Iterator> iter = mGTaskHashMap.entrySet().iterator(); + while (iter.hasNext()) { + Map.Entry entry = iter.next(); + node = entry.getValue(); + doContentSync(Node.SYNC_ACTION_ADD_LOCAL, node, null); + } + + // mCancelled can be set by another thread, so we neet to check one by + // one + // clear local delete table + if (!mCancelled) { + if (!DataUtils.batchDeleteNotes(mContentResolver, mLocalDeleteIdMap)) { + throw new ActionFailureException("failed to batch-delete local deleted notes"); + } + } + + // refresh local sync id + if (!mCancelled) { + GTaskClient.getInstance().commitUpdate(); + refreshLocalSyncId(); + } + + } + + private void syncFolder() throws NetworkFailureException { + Cursor c = null; + String gid; + Node node; + int syncType; + + if (mCancelled) { + return; + } + + // for root folder + try { + c = mContentResolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, + Notes.ID_ROOT_FOLDER), SqlNote.PROJECTION_NOTE, null, null, null); + if (c != null) { + c.moveToNext(); + gid = c.getString(SqlNote.GTASK_ID_COLUMN); + node = mGTaskHashMap.get(gid); + if (node != null) { + mGTaskHashMap.remove(gid); + mGidToNid.put(gid, (long) Notes.ID_ROOT_FOLDER); + mNidToGid.put((long) Notes.ID_ROOT_FOLDER, gid); + // for system folder, only update remote name if necessary + if (!node.getName().equals( + GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_DEFAULT)) + doContentSync(Node.SYNC_ACTION_UPDATE_REMOTE, node, c); + } else { + doContentSync(Node.SYNC_ACTION_ADD_REMOTE, node, c); + } + } else { + Log.w(TAG, "failed to query root folder"); + } + } finally { + if (c != null) { + c.close(); + c = null; + } + } + + // for call-note folder + try { + c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE, "(_id=?)", + new String[] { + String.valueOf(Notes.ID_CALL_RECORD_FOLDER) + }, null); + if (c != null) { + if (c.moveToNext()) { + gid = c.getString(SqlNote.GTASK_ID_COLUMN); + node = mGTaskHashMap.get(gid); + if (node != null) { + mGTaskHashMap.remove(gid); + mGidToNid.put(gid, (long) Notes.ID_CALL_RECORD_FOLDER); + mNidToGid.put((long) Notes.ID_CALL_RECORD_FOLDER, gid); + // for system folder, only update remote name if + // necessary + if (!node.getName().equals( + GTaskStringUtils.MIUI_FOLDER_PREFFIX + + GTaskStringUtils.FOLDER_CALL_NOTE)) + doContentSync(Node.SYNC_ACTION_UPDATE_REMOTE, node, c); + } else { + doContentSync(Node.SYNC_ACTION_ADD_REMOTE, node, c); + } + } + } else { + Log.w(TAG, "failed to query call note folder"); + } + } finally { + if (c != null) { + c.close(); + c = null; + } + } + + // for local existing folders + try { + c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE, + "(type=? AND parent_id<>?)", new String[] { + String.valueOf(Notes.TYPE_FOLDER), String.valueOf(Notes.ID_TRASH_FOLER) + }, NoteColumns.TYPE + " DESC"); + if (c != null) { + while (c.moveToNext()) { + gid = c.getString(SqlNote.GTASK_ID_COLUMN); + node = mGTaskHashMap.get(gid); + if (node != null) { + mGTaskHashMap.remove(gid); + mGidToNid.put(gid, c.getLong(SqlNote.ID_COLUMN)); + mNidToGid.put(c.getLong(SqlNote.ID_COLUMN), gid); + syncType = node.getSyncAction(c); + } else { + if (c.getString(SqlNote.GTASK_ID_COLUMN).trim().length() == 0) { + // local add + syncType = Node.SYNC_ACTION_ADD_REMOTE; + } else { + // remote delete + syncType = Node.SYNC_ACTION_DEL_LOCAL; + } + } + doContentSync(syncType, node, c); + } + } else { + Log.w(TAG, "failed to query existing folder"); + } + } finally { + if (c != null) { + c.close(); + c = null; + } + } + + // for remote add folders + Iterator> iter = mGTaskListHashMap.entrySet().iterator(); + while (iter.hasNext()) { + Map.Entry entry = iter.next(); + gid = entry.getKey(); + node = entry.getValue(); + if (mGTaskHashMap.containsKey(gid)) { + mGTaskHashMap.remove(gid); + doContentSync(Node.SYNC_ACTION_ADD_LOCAL, node, null); + } + } + + if (!mCancelled) + GTaskClient.getInstance().commitUpdate(); + } + + private void doContentSync(int syncType, Node node, Cursor c) throws NetworkFailureException { + if (mCancelled) { + return; + } + + MetaData meta; + switch (syncType) { + case Node.SYNC_ACTION_ADD_LOCAL: + addLocalNode(node); + break; + case Node.SYNC_ACTION_ADD_REMOTE: + addRemoteNode(node, c); + break; + case Node.SYNC_ACTION_DEL_LOCAL: + meta = mMetaHashMap.get(c.getString(SqlNote.GTASK_ID_COLUMN)); + if (meta != null) { + GTaskClient.getInstance().deleteNode(meta); + } + mLocalDeleteIdMap.add(c.getLong(SqlNote.ID_COLUMN)); + break; + case Node.SYNC_ACTION_DEL_REMOTE: + meta = mMetaHashMap.get(node.getGid()); + if (meta != null) { + GTaskClient.getInstance().deleteNode(meta); + } + GTaskClient.getInstance().deleteNode(node); + break; + case Node.SYNC_ACTION_UPDATE_LOCAL: + updateLocalNode(node, c); + break; + case Node.SYNC_ACTION_UPDATE_REMOTE: + updateRemoteNode(node, c); + break; + case Node.SYNC_ACTION_UPDATE_CONFLICT: + // merging both modifications maybe a good idea + // right now just use local update simply + updateRemoteNode(node, c); + break; + case Node.SYNC_ACTION_NONE: + break; + case Node.SYNC_ACTION_ERROR: + default: + throw new ActionFailureException("unkown sync action type"); + } + } + + private void addLocalNode(Node node) throws NetworkFailureException { + if (mCancelled) { + return; + } + + SqlNote sqlNote; + if (node instanceof TaskList) { + if (node.getName().equals( + GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_DEFAULT)) { + sqlNote = new SqlNote(mContext, Notes.ID_ROOT_FOLDER); + } else if (node.getName().equals( + GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_CALL_NOTE)) { + sqlNote = new SqlNote(mContext, Notes.ID_CALL_RECORD_FOLDER); + } else { + sqlNote = new SqlNote(mContext); + sqlNote.setContent(node.getLocalJSONFromContent()); + sqlNote.setParentId(Notes.ID_ROOT_FOLDER); + } + } else { + sqlNote = new SqlNote(mContext); + JSONObject js = node.getLocalJSONFromContent(); + try { + if (js.has(GTaskStringUtils.META_HEAD_NOTE)) { + JSONObject note = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE); + if (note.has(NoteColumns.ID)) { + long id = note.getLong(NoteColumns.ID); + if (DataUtils.existInNoteDatabase(mContentResolver, id)) { + // the id is not available, have to create a new one + note.remove(NoteColumns.ID); + } + } + } + + if (js.has(GTaskStringUtils.META_HEAD_DATA)) { + JSONArray dataArray = js.getJSONArray(GTaskStringUtils.META_HEAD_DATA); + for (int i = 0; i < dataArray.length(); i++) { + JSONObject data = dataArray.getJSONObject(i); + if (data.has(DataColumns.ID)) { + long dataId = data.getLong(DataColumns.ID); + if (DataUtils.existInDataDatabase(mContentResolver, dataId)) { + // the data id is not available, have to create + // a new one + data.remove(DataColumns.ID); + } + } + } + + } + } catch (JSONException e) { + Log.w(TAG, e.toString()); + e.printStackTrace(); + } + sqlNote.setContent(js); + + Long parentId = mGidToNid.get(((Task) node).getParent().getGid()); + if (parentId == null) { + Log.e(TAG, "cannot find task's parent id locally"); + throw new ActionFailureException("cannot add local node"); + } + sqlNote.setParentId(parentId.longValue()); + } + + // create the local node + sqlNote.setGtaskId(node.getGid()); + sqlNote.commit(false); + + // update gid-nid mapping + mGidToNid.put(node.getGid(), sqlNote.getId()); + mNidToGid.put(sqlNote.getId(), node.getGid()); + + // update meta + updateRemoteMeta(node.getGid(), sqlNote); + } + + private void updateLocalNode(Node node, Cursor c) throws NetworkFailureException { + if (mCancelled) { + return; + } + + SqlNote sqlNote; + // update the note locally + sqlNote = new SqlNote(mContext, c); + sqlNote.setContent(node.getLocalJSONFromContent()); + + Long parentId = (node instanceof Task) ? mGidToNid.get(((Task) node).getParent().getGid()) + : new Long(Notes.ID_ROOT_FOLDER); + if (parentId == null) { + Log.e(TAG, "cannot find task's parent id locally"); + throw new ActionFailureException("cannot update local node"); + } + sqlNote.setParentId(parentId.longValue()); + sqlNote.commit(true); + + // update meta info + updateRemoteMeta(node.getGid(), sqlNote); + } + + private void addRemoteNode(Node node, Cursor c) throws NetworkFailureException { + if (mCancelled) { + return; + } + + SqlNote sqlNote = new SqlNote(mContext, c); + Node n; + + // update remotely + if (sqlNote.isNoteType()) { + Task task = new Task(); + task.setContentByLocalJSON(sqlNote.getContent()); + + String parentGid = mNidToGid.get(sqlNote.getParentId()); + if (parentGid == null) { + Log.e(TAG, "cannot find task's parent tasklist"); + throw new ActionFailureException("cannot add remote task"); + } + mGTaskListHashMap.get(parentGid).addChildTask(task); + + GTaskClient.getInstance().createTask(task); + n = (Node) task; + + // add meta + updateRemoteMeta(task.getGid(), sqlNote); + } else { + TaskList tasklist = null; + + // we need to skip folder if it has already existed + String folderName = GTaskStringUtils.MIUI_FOLDER_PREFFIX; + if (sqlNote.getId() == Notes.ID_ROOT_FOLDER) + folderName += GTaskStringUtils.FOLDER_DEFAULT; + else if (sqlNote.getId() == Notes.ID_CALL_RECORD_FOLDER) + folderName += GTaskStringUtils.FOLDER_CALL_NOTE; + else + folderName += sqlNote.getSnippet(); + + Iterator> iter = mGTaskListHashMap.entrySet().iterator(); + while (iter.hasNext()) { + Map.Entry entry = iter.next(); + String gid = entry.getKey(); + TaskList list = entry.getValue(); + + if (list.getName().equals(folderName)) { + tasklist = list; + if (mGTaskHashMap.containsKey(gid)) { + mGTaskHashMap.remove(gid); + } + break; + } + } + + // no match we can add now + if (tasklist == null) { + tasklist = new TaskList(); + tasklist.setContentByLocalJSON(sqlNote.getContent()); + GTaskClient.getInstance().createTaskList(tasklist); + mGTaskListHashMap.put(tasklist.getGid(), tasklist); + } + n = (Node) tasklist; + } + + // update local note + sqlNote.setGtaskId(n.getGid()); + sqlNote.commit(false); + sqlNote.resetLocalModified(); + sqlNote.commit(true); + + // gid-id mapping + mGidToNid.put(n.getGid(), sqlNote.getId()); + mNidToGid.put(sqlNote.getId(), n.getGid()); + } + + private void updateRemoteNode(Node node, Cursor c) throws NetworkFailureException { + if (mCancelled) { + return; + } + + SqlNote sqlNote = new SqlNote(mContext, c); + + // update remotely + node.setContentByLocalJSON(sqlNote.getContent()); + GTaskClient.getInstance().addUpdateNode(node); + + // update meta + updateRemoteMeta(node.getGid(), sqlNote); + + // move task if necessary + if (sqlNote.isNoteType()) { + Task task = (Task) node; + TaskList preParentList = task.getParent(); + + String curParentGid = mNidToGid.get(sqlNote.getParentId()); + if (curParentGid == null) { + Log.e(TAG, "cannot find task's parent tasklist"); + throw new ActionFailureException("cannot update remote task"); + } + TaskList curParentList = mGTaskListHashMap.get(curParentGid); + + if (preParentList != curParentList) { + preParentList.removeChildTask(task); + curParentList.addChildTask(task); + GTaskClient.getInstance().moveTask(task, preParentList, curParentList); + } + } + + // clear local modified flag + sqlNote.resetLocalModified(); + sqlNote.commit(true); + } + + private void updateRemoteMeta(String gid, SqlNote sqlNote) throws NetworkFailureException { + if (sqlNote != null && sqlNote.isNoteType()) { + MetaData metaData = mMetaHashMap.get(gid); + if (metaData != null) { + metaData.setMeta(gid, sqlNote.getContent()); + GTaskClient.getInstance().addUpdateNode(metaData); + } else { + metaData = new MetaData(); + metaData.setMeta(gid, sqlNote.getContent()); + mMetaList.addChildTask(metaData); + mMetaHashMap.put(gid, metaData); + GTaskClient.getInstance().createTask(metaData); + } + } + } + + private void refreshLocalSyncId() throws NetworkFailureException { + if (mCancelled) { + return; + } + + // get the latest gtask list + mGTaskHashMap.clear(); + mGTaskListHashMap.clear(); + mMetaHashMap.clear(); + initGTaskList(); + + Cursor c = null; + try { + c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE, + "(type<>? AND parent_id<>?)", new String[] { + String.valueOf(Notes.TYPE_SYSTEM), String.valueOf(Notes.ID_TRASH_FOLER) + }, NoteColumns.TYPE + " DESC"); + if (c != null) { + while (c.moveToNext()) { + String gid = c.getString(SqlNote.GTASK_ID_COLUMN); + Node node = mGTaskHashMap.get(gid); + if (node != null) { + mGTaskHashMap.remove(gid); + ContentValues values = new ContentValues(); + values.put(NoteColumns.SYNC_ID, node.getLastModified()); + mContentResolver.update(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, + c.getLong(SqlNote.ID_COLUMN)), values, null, null); + } else { + Log.e(TAG, "something is missed"); + throw new ActionFailureException( + "some local items don't have gid after sync"); + } + } + } else { + Log.w(TAG, "failed to query local note to refresh sync id"); + } + } finally { + if (c != null) { + c.close(); + c = null; + } + } + } + + public String getSyncAccount() { + return GTaskClient.getInstance().getSyncAccount().name; + } + + public void cancelSync() { + mCancelled = true; + } +} diff --git a/tsrxns/java/net/micode/notes/gtask/remote/GTaskSyncService.java b/tsrxns/java/net/micode/notes/gtask/remote/GTaskSyncService.java new file mode 100644 index 0000000..cca36f7 --- /dev/null +++ b/tsrxns/java/net/micode/notes/gtask/remote/GTaskSyncService.java @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.gtask.remote; + +import android.app.Activity; +import android.app.Service; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.os.IBinder; + +public class GTaskSyncService extends Service { + public final static String ACTION_STRING_NAME = "sync_action_type"; + + public final static int ACTION_START_SYNC = 0; + + public final static int ACTION_CANCEL_SYNC = 1; + + public final static int ACTION_INVALID = 2; + + public final static String GTASK_SERVICE_BROADCAST_NAME = "net.micode.notes.gtask.remote.gtask_sync_service"; + + public final static String GTASK_SERVICE_BROADCAST_IS_SYNCING = "isSyncing"; + + public final static String GTASK_SERVICE_BROADCAST_PROGRESS_MSG = "progressMsg"; + + private static GTaskASyncTask mSyncTask = null; + + private static String mSyncProgress = ""; + + private void startSync() { + if (mSyncTask == null) { + mSyncTask = new GTaskASyncTask(this, new GTaskASyncTask.OnCompleteListener() { + public void onComplete() { + mSyncTask = null; + sendBroadcast(""); + stopSelf(); + } + }); + sendBroadcast(""); + mSyncTask.execute(); + } + } + + private void cancelSync() { + if (mSyncTask != null) { + mSyncTask.cancelSync(); + } + } + + @Override + public void onCreate() { + mSyncTask = null; + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + Bundle bundle = intent.getExtras(); + if (bundle != null && bundle.containsKey(ACTION_STRING_NAME)) { + switch (bundle.getInt(ACTION_STRING_NAME, ACTION_INVALID)) { + case ACTION_START_SYNC: + startSync(); + break; + case ACTION_CANCEL_SYNC: + cancelSync(); + break; + default: + break; + } + return START_STICKY; + } + return super.onStartCommand(intent, flags, startId); + } + + @Override + public void onLowMemory() { + if (mSyncTask != null) { + mSyncTask.cancelSync(); + } + } + + public IBinder onBind(Intent intent) { + return null; + } + + public void sendBroadcast(String msg) { + mSyncProgress = msg; + Intent intent = new Intent(GTASK_SERVICE_BROADCAST_NAME); + intent.putExtra(GTASK_SERVICE_BROADCAST_IS_SYNCING, mSyncTask != null); + intent.putExtra(GTASK_SERVICE_BROADCAST_PROGRESS_MSG, msg); + sendBroadcast(intent); + } + + public static void startSync(Activity activity) { + GTaskManager.getInstance().setActivityContext(activity); + Intent intent = new Intent(activity, GTaskSyncService.class); + intent.putExtra(GTaskSyncService.ACTION_STRING_NAME, GTaskSyncService.ACTION_START_SYNC); + activity.startService(intent); + } + + public static void cancelSync(Context context) { + Intent intent = new Intent(context, GTaskSyncService.class); + intent.putExtra(GTaskSyncService.ACTION_STRING_NAME, GTaskSyncService.ACTION_CANCEL_SYNC); + context.startService(intent); + } + + public static boolean isSyncing() { + return mSyncTask != null; + } + + public static String getProgressString() { + return mSyncProgress; + } +} diff --git a/tsrxns/java/net/micode/notes/model/Note.java b/tsrxns/java/net/micode/notes/model/Note.java new file mode 100644 index 0000000..6706cf6 --- /dev/null +++ b/tsrxns/java/net/micode/notes/model/Note.java @@ -0,0 +1,253 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.model; +import android.content.ContentProviderOperation; +import android.content.ContentProviderResult; +import android.content.ContentUris; +import android.content.ContentValues; +import android.content.Context; +import android.content.OperationApplicationException; +import android.net.Uri; +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.DataColumns; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.data.Notes.TextNote; + +import java.util.ArrayList; + + +public class Note { + private ContentValues mNoteDiffValues; + private NoteData mNoteData; + private static final String TAG = "Note"; + /** + * Create a new note id for adding a new note to databases + */ + public static synchronized long getNewNoteId(Context context, long folderId) { + // Create a new note in the database + ContentValues values = new ContentValues(); + long createdTime = System.currentTimeMillis(); + values.put(NoteColumns.CREATED_DATE, createdTime); + values.put(NoteColumns.MODIFIED_DATE, createdTime); + values.put(NoteColumns.TYPE, Notes.TYPE_NOTE); + values.put(NoteColumns.LOCAL_MODIFIED, 1); + values.put(NoteColumns.PARENT_ID, folderId); + Uri uri = context.getContentResolver().insert(Notes.CONTENT_NOTE_URI, values); + + long noteId = 0; + try { + noteId = Long.valueOf(uri.getPathSegments().get(1)); + } catch (NumberFormatException e) { + Log.e(TAG, "Get note id error :" + e.toString()); + noteId = 0; + } + if (noteId == -1) { + throw new IllegalStateException("Wrong note id:" + noteId); + } + return noteId; + } + + public Note() { + mNoteDiffValues = new ContentValues(); + mNoteData = new NoteData(); + } + + public void setNoteValue(String key, String value) { + mNoteDiffValues.put(key, value); + mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1); + mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis()); + } + + public void setTextData(String key, String value) { + mNoteData.setTextData(key, value); + } + + public void setTextDataId(long id) { + mNoteData.setTextDataId(id); + } + + public long getTextDataId() { + return mNoteData.mTextDataId; + } + + public void setCallDataId(long id) { + mNoteData.setCallDataId(id); + } + + public void setCallData(String key, String value) { + mNoteData.setCallData(key, value); + } + + public boolean isLocalModified() { + return mNoteDiffValues.size() > 0 || mNoteData.isLocalModified(); + } + + public boolean syncNote(Context context, long noteId) { + if (noteId <= 0) { + throw new IllegalArgumentException("Wrong note id:" + noteId); + } + + if (!isLocalModified()) { + return true; + } + + /** + * In theory, once data changed, the note should be updated on {@link NoteColumns#LOCAL_MODIFIED} and + * {@link NoteColumns#MODIFIED_DATE}. For data safety, though update note fails, we also update the + * note data info + */ + if (context.getContentResolver().update( + ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), mNoteDiffValues, null, + null) == 0) { + Log.e(TAG, "Update note error, should not happen"); + // Do not return, fall through + } + mNoteDiffValues.clear(); + + if (mNoteData.isLocalModified() + && (mNoteData.pushIntoContentResolver(context, noteId) == null)) { + return false; + } + + return true; + } + + private class NoteData { + private long mTextDataId; + + private ContentValues mTextDataValues; + + private long mCallDataId; + + private ContentValues mCallDataValues; + + private static final String TAG = "NoteData"; + + public NoteData() { + mTextDataValues = new ContentValues(); + mCallDataValues = new ContentValues(); + mTextDataId = 0; + mCallDataId = 0; + } + + boolean isLocalModified() { + return mTextDataValues.size() > 0 || mCallDataValues.size() > 0; + } + + void setTextDataId(long id) { + if(id <= 0) { + throw new IllegalArgumentException("Text data id should larger than 0"); + } + mTextDataId = id; + } + + void setCallDataId(long id) { + if (id <= 0) { + throw new IllegalArgumentException("Call data id should larger than 0"); + } + mCallDataId = id; + } + + void setCallData(String key, String value) { + mCallDataValues.put(key, value); + mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1); + mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis()); + } + + void setTextData(String key, String value) { + mTextDataValues.put(key, value); + mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1); + mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis()); + } + + Uri pushIntoContentResolver(Context context, long noteId) { + /** + * Check for safety + */ + if (noteId <= 0) { + throw new IllegalArgumentException("Wrong note id:" + noteId); + } + + ArrayList operationList = new ArrayList(); + ContentProviderOperation.Builder builder = null; + + if(mTextDataValues.size() > 0) { + mTextDataValues.put(DataColumns.NOTE_ID, noteId); + if (mTextDataId == 0) { + mTextDataValues.put(DataColumns.MIME_TYPE, TextNote.CONTENT_ITEM_TYPE); + Uri uri = context.getContentResolver().insert(Notes.CONTENT_DATA_URI, + mTextDataValues); + try { + setTextDataId(Long.valueOf(uri.getPathSegments().get(1))); + } catch (NumberFormatException e) { + Log.e(TAG, "Insert new text data fail with noteId" + noteId); + mTextDataValues.clear(); + return null; + } + } else { + builder = ContentProviderOperation.newUpdate(ContentUris.withAppendedId( + Notes.CONTENT_DATA_URI, mTextDataId)); + builder.withValues(mTextDataValues); + operationList.add(builder.build()); + } + mTextDataValues.clear(); + } + + if(mCallDataValues.size() > 0) { + mCallDataValues.put(DataColumns.NOTE_ID, noteId); + if (mCallDataId == 0) { + mCallDataValues.put(DataColumns.MIME_TYPE, CallNote.CONTENT_ITEM_TYPE); + Uri uri = context.getContentResolver().insert(Notes.CONTENT_DATA_URI, + mCallDataValues); + try { + setCallDataId(Long.valueOf(uri.getPathSegments().get(1))); + } catch (NumberFormatException e) { + Log.e(TAG, "Insert new call data fail with noteId" + noteId); + mCallDataValues.clear(); + return null; + } + } else { + builder = ContentProviderOperation.newUpdate(ContentUris.withAppendedId( + Notes.CONTENT_DATA_URI, mCallDataId)); + builder.withValues(mCallDataValues); + operationList.add(builder.build()); + } + mCallDataValues.clear(); + } + + if (operationList.size() > 0) { + try { + ContentProviderResult[] results = context.getContentResolver().applyBatch( + Notes.AUTHORITY, operationList); + return (results == null || results.length == 0 || results[0] == null) ? null + : ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId); + } catch (RemoteException e) { + Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); + return null; + } catch (OperationApplicationException e) { + Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); + return null; + } + } + return null; + } + } +} diff --git a/tsrxns/java/net/micode/notes/model/WorkingNote.java b/tsrxns/java/net/micode/notes/model/WorkingNote.java new file mode 100644 index 0000000..be081e4 --- /dev/null +++ b/tsrxns/java/net/micode/notes/model/WorkingNote.java @@ -0,0 +1,368 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.model; + +import android.appwidget.AppWidgetManager; +import android.content.ContentUris; +import android.content.Context; +import android.database.Cursor; +import android.text.TextUtils; +import android.util.Log; + +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.CallNote; +import net.micode.notes.data.Notes.DataColumns; +import net.micode.notes.data.Notes.DataConstants; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.data.Notes.TextNote; +import net.micode.notes.tool.ResourceParser.NoteBgResources; + + +public class WorkingNote { + // Note for the working note + private Note mNote; + // Note Id + private long mNoteId; + // Note content + private String mContent; + // Note mode + private int mMode; + + private long mAlertDate; + + private long mModifiedDate; + + private int mBgColorId; + + private int mWidgetId; + + private int mWidgetType; + + private long mFolderId; + + private Context mContext; + + private static final String TAG = "WorkingNote"; + + private boolean mIsDeleted; + + private NoteSettingChangedListener mNoteSettingStatusListener; + + public static final String[] DATA_PROJECTION = new String[] { + DataColumns.ID, + DataColumns.CONTENT, + DataColumns.MIME_TYPE, + DataColumns.DATA1, + DataColumns.DATA2, + DataColumns.DATA3, + DataColumns.DATA4, + }; + + public static final String[] NOTE_PROJECTION = new String[] { + NoteColumns.PARENT_ID, + NoteColumns.ALERTED_DATE, + NoteColumns.BG_COLOR_ID, + NoteColumns.WIDGET_ID, + NoteColumns.WIDGET_TYPE, + NoteColumns.MODIFIED_DATE + }; + + private static final int DATA_ID_COLUMN = 0; + + private static final int DATA_CONTENT_COLUMN = 1; + + private static final int DATA_MIME_TYPE_COLUMN = 2; + + private static final int DATA_MODE_COLUMN = 3; + + private static final int NOTE_PARENT_ID_COLUMN = 0; + + private static final int NOTE_ALERTED_DATE_COLUMN = 1; + + private static final int NOTE_BG_COLOR_ID_COLUMN = 2; + + private static final int NOTE_WIDGET_ID_COLUMN = 3; + + private static final int NOTE_WIDGET_TYPE_COLUMN = 4; + + private static final int NOTE_MODIFIED_DATE_COLUMN = 5; + + // New note construct + private WorkingNote(Context context, long folderId) { + mContext = context; + mAlertDate = 0; + mModifiedDate = System.currentTimeMillis(); + mFolderId = folderId; + mNote = new Note(); + mNoteId = 0; + mIsDeleted = false; + mMode = 0; + mWidgetType = Notes.TYPE_WIDGET_INVALIDE; + } + + // Existing note construct + private WorkingNote(Context context, long noteId, long folderId) { + mContext = context; + mNoteId = noteId; + mFolderId = folderId; + mIsDeleted = false; + mNote = new Note(); + loadNote(); + } + + private void loadNote() { + Cursor cursor = mContext.getContentResolver().query( + ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, mNoteId), NOTE_PROJECTION, null, + null, null); + + if (cursor != null) { + if (cursor.moveToFirst()) { + mFolderId = cursor.getLong(NOTE_PARENT_ID_COLUMN); + mBgColorId = cursor.getInt(NOTE_BG_COLOR_ID_COLUMN); + mWidgetId = cursor.getInt(NOTE_WIDGET_ID_COLUMN); + mWidgetType = cursor.getInt(NOTE_WIDGET_TYPE_COLUMN); + mAlertDate = cursor.getLong(NOTE_ALERTED_DATE_COLUMN); + mModifiedDate = cursor.getLong(NOTE_MODIFIED_DATE_COLUMN); + } + cursor.close(); + } else { + Log.e(TAG, "No note with id:" + mNoteId); + throw new IllegalArgumentException("Unable to find note with id " + mNoteId); + } + loadNoteData(); + } + + private void loadNoteData() { + Cursor cursor = mContext.getContentResolver().query(Notes.CONTENT_DATA_URI, DATA_PROJECTION, + DataColumns.NOTE_ID + "=?", new String[] { + String.valueOf(mNoteId) + }, null); + + if (cursor != null) { + if (cursor.moveToFirst()) { + do { + String type = cursor.getString(DATA_MIME_TYPE_COLUMN); + if (DataConstants.NOTE.equals(type)) { + mContent = cursor.getString(DATA_CONTENT_COLUMN); + mMode = cursor.getInt(DATA_MODE_COLUMN); + mNote.setTextDataId(cursor.getLong(DATA_ID_COLUMN)); + } else if (DataConstants.CALL_NOTE.equals(type)) { + mNote.setCallDataId(cursor.getLong(DATA_ID_COLUMN)); + } else { + Log.d(TAG, "Wrong note type with type:" + type); + } + } while (cursor.moveToNext()); + } + cursor.close(); + } else { + Log.e(TAG, "No data with id:" + mNoteId); + throw new IllegalArgumentException("Unable to find note's data with id " + mNoteId); + } + } + + public static WorkingNote createEmptyNote(Context context, long folderId, int widgetId, + int widgetType, int defaultBgColorId) { + WorkingNote note = new WorkingNote(context, folderId); + note.setBgColorId(defaultBgColorId); + note.setWidgetId(widgetId); + note.setWidgetType(widgetType); + return note; + } + + public static WorkingNote load(Context context, long id) { + return new WorkingNote(context, id, 0); + } + + public synchronized boolean saveNote() { + if (isWorthSaving()) { + if (!existInDatabase()) { + if ((mNoteId = Note.getNewNoteId(mContext, mFolderId)) == 0) { + Log.e(TAG, "Create new note fail with id:" + mNoteId); + return false; + } + } + + mNote.syncNote(mContext, mNoteId); + + /** + * Update widget content if there exist any widget of this note + */ + if (mWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID + && mWidgetType != Notes.TYPE_WIDGET_INVALIDE + && mNoteSettingStatusListener != null) { + mNoteSettingStatusListener.onWidgetChanged(); + } + return true; + } else { + return false; + } + } + + public boolean existInDatabase() { + return mNoteId > 0; + } + + private boolean isWorthSaving() { + if (mIsDeleted || (!existInDatabase() && TextUtils.isEmpty(mContent)) + || (existInDatabase() && !mNote.isLocalModified())) { + return false; + } else { + return true; + } + } + + public void setOnSettingStatusChangedListener(NoteSettingChangedListener l) { + mNoteSettingStatusListener = l; + } + + public void setAlertDate(long date, boolean set) { + if (date != mAlertDate) { + mAlertDate = date; + mNote.setNoteValue(NoteColumns.ALERTED_DATE, String.valueOf(mAlertDate)); + } + if (mNoteSettingStatusListener != null) { + mNoteSettingStatusListener.onClockAlertChanged(date, set); + } + } + + public void markDeleted(boolean mark) { + mIsDeleted = mark; + if (mWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID + && mWidgetType != Notes.TYPE_WIDGET_INVALIDE && mNoteSettingStatusListener != null) { + mNoteSettingStatusListener.onWidgetChanged(); + } + } + + public void setBgColorId(int id) { + if (id != mBgColorId) { + mBgColorId = id; + if (mNoteSettingStatusListener != null) { + mNoteSettingStatusListener.onBackgroundColorChanged(); + } + mNote.setNoteValue(NoteColumns.BG_COLOR_ID, String.valueOf(id)); + } + } + + public void setCheckListMode(int mode) { + if (mMode != mode) { + if (mNoteSettingStatusListener != null) { + mNoteSettingStatusListener.onCheckListModeChanged(mMode, mode); + } + mMode = mode; + mNote.setTextData(TextNote.MODE, String.valueOf(mMode)); + } + } + + public void setWidgetType(int type) { + if (type != mWidgetType) { + mWidgetType = type; + mNote.setNoteValue(NoteColumns.WIDGET_TYPE, String.valueOf(mWidgetType)); + } + } + + public void setWidgetId(int id) { + if (id != mWidgetId) { + mWidgetId = id; + mNote.setNoteValue(NoteColumns.WIDGET_ID, String.valueOf(mWidgetId)); + } + } + + public void setWorkingText(String text) { + if (!TextUtils.equals(mContent, text)) { + mContent = text; + mNote.setTextData(DataColumns.CONTENT, mContent); + } + } + + public void convertToCallNote(String phoneNumber, long callDate) { + mNote.setCallData(CallNote.CALL_DATE, String.valueOf(callDate)); + mNote.setCallData(CallNote.PHONE_NUMBER, phoneNumber); + mNote.setNoteValue(NoteColumns.PARENT_ID, String.valueOf(Notes.ID_CALL_RECORD_FOLDER)); + } + + public boolean hasClockAlert() { + return (mAlertDate > 0 ? true : false); + } + + public String getContent() { + return mContent; + } + + public long getAlertDate() { + return mAlertDate; + } + + public long getModifiedDate() { + return mModifiedDate; + } + + public int getBgColorResId() { + return NoteBgResources.getNoteBgResource(mBgColorId); + } + + public int getBgColorId() { + return mBgColorId; + } + + public int getTitleBgResId() { + return NoteBgResources.getNoteTitleBgResource(mBgColorId); + } + + public int getCheckListMode() { + return mMode; + } + + public long getNoteId() { + return mNoteId; + } + + public long getFolderId() { + return mFolderId; + } + + public int getWidgetId() { + return mWidgetId; + } + + public int getWidgetType() { + return mWidgetType; + } + + public interface NoteSettingChangedListener { + /** + * Called when the background color of current note has just changed + */ + void onBackgroundColorChanged(); + + /** + * Called when user set clock + */ + void onClockAlertChanged(long date, boolean set); + + /** + * Call when user create note from widget + */ + void onWidgetChanged(); + + /** + * Call when switch between check list mode and normal mode + * @param oldMode is previous mode before change + * @param newMode is new mode + */ + void onCheckListModeChanged(int oldMode, int newMode); + } +} diff --git a/tsrxns/java/net/micode/notes/tool/BackupUtils.java b/tsrxns/java/net/micode/notes/tool/BackupUtils.java new file mode 100644 index 0000000..e87f7c7 --- /dev/null +++ b/tsrxns/java/net/micode/notes/tool/BackupUtils.java @@ -0,0 +1,346 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.tool; + +import android.content.Context;//Android提供的一个上下文对象,可以用于访问应用程序的资源和执行一些操作。 +import android.database.Cursor;//一个用于查询数据库结果集的接口,可以用于获取查询结果中的各个数据项。 +import android.os.Environment;//提供了访问系统环境的方法,例如获取外部存储路径。 +import android.text.TextUtils;//个包含各种字符串处理方法的工具类,例如判断字符串是否为空。 +import android.text.format.DateFormat;//提供了各种日期和时间格式化的方法。 +import android.util.Log;//Android提供的日志工具类,用于打印调试信息。 + +import net.micode.notes.R;//应用程序的资源类,用于引用应用程序中的各种资源,如布局文件、图标、字符串等。 +import net.micode.notes.data.Notes;//一个自定义的Notes数据类,用于访问和操作备忘录的数据。 +import net.micode.notes.data.Notes.DataColumns;//Notes数据类中定义的备忘录数据列常量。 +import net.micode.notes.data.Notes.DataConstants;//Notes数据类中定义的备忘录数据常量。 +import net.micode.notes.data.Notes.NoteColumns;//Notes数据类中定义的备忘录笔记列常量。 + +//用于文件操作,如创建文件、写入内容等。 +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.PrintStream; + + +public class BackupUtils { + private static final String TAG = "BackupUtils"; + // Singleton stuff + private static BackupUtils sInstance; + + public static synchronized BackupUtils getInstance(Context context) { + if (sInstance == null) { + //如果当前的备份不存在,则重新声明一个 + sInstance = new BackupUtils(context); + } + return sInstance; + } + + /** + * Following states are signs to represents backup or restore + * status + *///以下状态是表示备份或恢复状态的标志。 + // Currently, the sdcard is not mounted SD卡没有被装到手机里 + public static final int STATE_SD_CARD_UNMOUONTED = 0; + // 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 数据已被破坏,可能被修改 + public static final int STATE_DATA_DESTROIED = 2; + // Some run-time exception which causes restore or backup fails 超时异常 + public static final int STATE_SYSTEM_ERROR = 3; + // 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()); + } + + public int exportToText() { + return mTextExport.exportToText(); + } + + public String getExportedTextFileName() { + return mTextExport.mFileName; + } + + public String getExportedTextFileDir() { + return mTextExport.mFileDirectory; + } + + private static class TextExport { + private static final String[] NOTE_PROJECTION = { + NoteColumns.ID, + NoteColumns.MODIFIED_DATE, + NoteColumns.SNIPPET, + NoteColumns.TYPE + }; + + private static final int NOTE_COLUMN_ID = 0; + + 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, + DataColumns.DATA1, + DataColumns.DATA2, + DataColumns.DATA3, + DataColumns.DATA4, + }; + + private static final int DATA_COLUMN_CONTENT = 0; + + private static final int DATA_COLUMN_MIME_TYPE = 1; + + private static final int DATA_COLUMN_CALL_DATE = 2; + + private static final int DATA_COLUMN_PHONE_NUMBER = 4; + + private final String [] TEXT_FORMAT; + private static final int FORMAT_FOLDER_NAME = 0; + private static final int FORMAT_NOTE_DATE = 1; + private static final int FORMAT_NOTE_CONTENT = 2; + + private Context mContext; + private String mFileName; + private String mFileDirectory; + + public TextExport(Context context) { + TEXT_FORMAT = context.getResources().getStringArray(R.array.format_for_exported_note); + mContext = context; + mFileName = ""; + mFileDirectory = ""; + } + + private String getFormat(int id) {//获取文本的组成部分 + return TEXT_FORMAT[id]; + } + + /** + * Export the folder identified by folder id to text + */ + private void exportFolderToText(String folderId, PrintStream ps) { + // Query notes belong to this folder 通过查询parent,id是文件夹id的note来选出制定ID文件夹下的Note + 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 { + // Print note's last modified date ps里面保存有这份note的日期 + ps.println(String.format(getFormat(FORMAT_NOTE_DATE), DateFormat.format( + mContext.getString(R.string.format_datetime_mdhm), + notesCursor.getLong(NOTE_COLUMN_MODIFIED_DATE)))); + // Query data belong to this note 将文件导出到text + String noteId = notesCursor.getString(NOTE_COLUMN_ID); + exportNoteToText(noteId, ps); + } while (notesCursor.moveToNext()); + } + notesCursor.close(); + } + } + + /** + * Export note identified by id to a print stream + */ + 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) {//利用光标来扫面内容,区别为callnote和note两种,靠ps.printline输出 + if (dataCursor.moveToFirst()) { + do { + String mimeType = dataCursor.getString(DATA_COLUMN_MIME_TYPE); + if (DataConstants.CALL_NOTE.equals(mimeType)) { + // Print phone number 判断是否为空字符 + String phoneNumber = dataCursor.getString(DATA_COLUMN_PHONE_NUMBER); + long callDate = dataCursor.getLong(DATA_COLUMN_CALL_DATE); + String location = dataCursor.getString(DATA_COLUMN_CONTENT); + + if (!TextUtils.isEmpty(phoneNumber)) { + ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), + phoneNumber)); + } + // Print call date + ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), DateFormat + .format(mContext.getString(R.string.format_datetime_mdhm), + callDate))); + // Print call attachment location + if (!TextUtils.isEmpty(location)) { + ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), + location)); + } + } else if (DataConstants.NOTE.equals(mimeType)) { + String content = dataCursor.getString(DATA_COLUMN_CONTENT); + if (!TextUtils.isEmpty(content)) { + ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), + content)); + } + } + } while (dataCursor.moveToNext()); + } + dataCursor.close(); + } + // print a line separator between note + try { + ps.write(new byte[] { + Character.LINE_SEPARATOR, Character.LETTER_NUMBER + }); + } catch (IOException e) { + Log.e(TAG, e.toString()); + } + } + + /** + * Note will be exported as text which is user readable + */ + public int exportToText() {//总函数,调用上面的exportFolder和exportNote + if (!externalStorageAvailable()) { + Log.d(TAG, "Media was not mounted"); + return STATE_SD_CARD_UNMOUONTED; + } + + PrintStream ps = getExportToTextPrintStream(); + if (ps == null) { + Log.e(TAG, "get print stream error"); + return STATE_SYSTEM_ERROR; + } + // First export folder and its notes 导出文件夹,就是导出里面包含的便签 + Cursor folderCursor = mContext.getContentResolver().query( + Notes.CONTENT_NOTE_URI, + NOTE_PROJECTION, + "(" + NoteColumns.TYPE + "=" + Notes.TYPE_FOLDER + " AND " + + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER + ") OR " + + NoteColumns.ID + "=" + Notes.ID_CALL_RECORD_FOLDER, null, null); + + if (folderCursor != null) { + if (folderCursor.moveToFirst()) { + do { + // Print folder's name + String folderName = ""; + if(folderCursor.getLong(NOTE_COLUMN_ID) == Notes.ID_CALL_RECORD_FOLDER) { + folderName = mContext.getString(R.string.call_record_folder_name); + } else { + folderName = folderCursor.getString(NOTE_COLUMN_SNIPPET); + } + if (!TextUtils.isEmpty(folderName)) { + ps.println(String.format(getFormat(FORMAT_FOLDER_NAME), folderName)); + } + String folderId = folderCursor.getString(NOTE_COLUMN_ID); + exportFolderToText(folderId, ps); + } while (folderCursor.moveToNext()); + } + folderCursor.close(); + } + + // Export notes in root's folder 将根目录里的便签导出 + Cursor noteCursor = mContext.getContentResolver().query( + Notes.CONTENT_NOTE_URI, + NOTE_PROJECTION, + NoteColumns.TYPE + "=" + +Notes.TYPE_NOTE + " AND " + NoteColumns.PARENT_ID + + "=0", null, null); + + if (noteCursor != null) { + if (noteCursor.moveToFirst()) { + do { + ps.println(String.format(getFormat(FORMAT_NOTE_DATE), DateFormat.format( + mContext.getString(R.string.format_datetime_mdhm), + noteCursor.getLong(NOTE_COLUMN_MODIFIED_DATE)))); + // Query data belong to this note + String noteId = noteCursor.getString(NOTE_COLUMN_ID); + exportNoteToText(noteId, ps); + } while (noteCursor.moveToNext()); + } + noteCursor.close(); + } + ps.close(); + + return STATE_SUCCESS; + } + + /** + * Get a print stream pointed to the file {@generateExportedTextFile} + */ + 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; + } + mFileName = file.getName(); + mFileDirectory = mContext.getString(R.string.file_path); + PrintStream ps = null; + try { + FileOutputStream fos = new FileOutputStream(file); + ps = new PrintStream(fos);//将ps输出流输出到特定文件,目的是导出到文件,而不是直接输出 + } catch (FileNotFoundException e) { + e.printStackTrace(); + return null; + } catch (NullPointerException e) { + e.printStackTrace(); + return null; + } + return ps; + } + } + + /** + * Generate the text file to store imported data + */ + private static File generateFileMountedOnSDcard(Context context, int filePathResId, int fileNameFormatResId) { + StringBuilder sb = new StringBuilder(); + sb.append(Environment.getExternalStorageDirectory());//外部的储存路径 + 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 { + if (!filedir.exists()) { + filedir.mkdir();//如果文件不存在就新建文件 + } + if (!file.exists()) { + file.createNewFile(); + } + return file; + } catch (SecurityException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + //try catch 异常处理 + return null; + } +} + + diff --git a/tsrxns/java/net/micode/notes/tool/DataUtils.java b/tsrxns/java/net/micode/notes/tool/DataUtils.java new file mode 100644 index 0000000..1a2266e --- /dev/null +++ b/tsrxns/java/net/micode/notes/tool/DataUtils.java @@ -0,0 +1,295 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +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; + +//处理数据的转换和格式化 +public class DataUtils { + public static final String TAG = "DataUtils"; + public static boolean batchDeleteNotes(ContentResolver resolver, HashSet ids) { //批量删除笔记 + if (ids == null) { //为空返回处理处理完成 + Log.d(TAG, "the ids is null"); + return true; + } + if (ids.size() == 0) { //大小为零返回处理完成 + Log.d(TAG, "no id is in the hashset"); + return true; + } + + 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)); + 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; + } + 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; + } + //将笔记放入文件夹中 + public static void moveNoteToFoler(ContentResolver resolver, long id, long srcFolderId, long desFolderId) { + ContentValues values = new ContentValues(); + 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); + } + //批量移动文件到文件夹中 + public static boolean batchMoveToFolder(ContentResolver resolver, HashSet ids, + long folderId) { + if (ids == null) { + Log.d(TAG, "the ids is null"); + return true; + } + + ArrayList operationList = new ArrayList(); + for (long id : ids) { + ContentProviderOperation.Builder builder = ContentProviderOperation + .newUpdate(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id)); //欲更新的操作者 + builder.withValue(NoteColumns.PARENT_ID, folderId); + 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, "delete 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; + } + + /** + * Get the all folder count except system folders {@link Notes#TYPE_SYSTEM}} + */ //计数用户除开系统文件之外的其余文件。 + public static int getUserFolderCount(ContentResolver resolver) { + Cursor cursor =resolver.query(Notes.CONTENT_NOTE_URI, //光标指向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(); //最终关闭,可能存在问题,cursor可能无法正常释放,从而导致程序崩溃 + } + } + } + return count; + } + //可视化操作数据库,搭建ui界面方便用户操作本地数据库 + public static boolean visibleInNoteDatabase(ContentResolver resolver, long noteId, int type) { + Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), + null, + NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER, + new String [] {String.valueOf(type)}, + null); + + boolean exist = false; + if (cursor != null) { + if (cursor.getCount() > 0) { + exist = true; + } + cursor.close(); + } + return exist; + } + //判断是否存在笔记数据库 + public static boolean existInNoteDatabase(ContentResolver resolver, long noteId) { + Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), + null, null, null, null); + + boolean exist = false; + if (cursor != null) { + if (cursor.getCount() > 0) { //计数如果大于零,就说明存在 + exist = true; + } + cursor.close(); + } + return exist; + } + //判断是否存在数据库 + public static boolean existInDataDatabase(ContentResolver resolver, long dataId) { + Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_DATA_URI, dataId), + null, null, null, null); + + boolean exist = false; + if (cursor != null) { + if (cursor.getCount() > 0) { + exist = true; + } + cursor.close(); + } + return exist; + } + //判断可视化文件夹名称是否合法 + public static boolean checkVisibleFolderName(ContentResolver resolver, String name) { + Cursor cursor = resolver.query(Notes.CONTENT_NOTE_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; + if(cursor != null) { + if(cursor.getCount() > 0) { //判断是否存在 + exist = true; + } + cursor.close(); + } + return exist; + } + //哈希设置获取文件夹部件 + public static HashSet getFolderNoteWidget(ContentResolver resolver, long folderId) { + Cursor c = resolver.query(Notes.CONTENT_NOTE_URI, //设置光标 + new String[] { NoteColumns.WIDGET_ID, NoteColumns.WIDGET_TYPE }, + NoteColumns.PARENT_ID + "=?", + new String[] { String.valueOf(folderId) }, + null); + + HashSet set = null; + if (c != null) { //光标不指向空,意味着存在 + if (c.moveToFirst()) { //移动到第一位 + set = new HashSet(); + do { + try { + AppWidgetAttribute widget = new AppWidgetAttribute(); + widget.widgetId = c.getInt(0); //得到部件id,0是请求代码 + widget.widgetType = c.getInt(1); //得到部件种类,1是请求代码 + set.add(widget); //将部件加入到哈希设置中 + } catch (IndexOutOfBoundsException e) { + Log.e(TAG, e.toString()); //检测异常,加入到错误日志文件中去 + } + } while (c.moveToNext()); + } + c.close(); + } + return set; + } + //得到电话号码笔记id + public static String getCallNumberByNoteId(ContentResolver resolver, long noteId) { + Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI, //设置光标 + new String [] { CallNote.PHONE_NUMBER }, + CallNote.NOTE_ID + "=? AND " + CallNote.MIME_TYPE + "=?", + 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 ""; + } + //得到电话号码和电话日期 + public static long getNoteIdByPhoneNumberAndCallDate(ContentResolver resolver, String phoneNumber, long callDate) { + Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI, + new String [] { CallNote.NOTE_ID },//设置光标 + CallNote.CALL_DATE + "=? AND " + CallNote.MIME_TYPE + "=? AND PHONE_NUMBERS_EQUAL(" + + CallNote.PHONE_NUMBER + ",?)", + new String [] { String.valueOf(callDate), CallNote.CONTENT_ITEM_TYPE, phoneNumber }, + null); + + if (cursor != null) { //光标不为空 + if (cursor.moveToFirst()) { + try { + return cursor.getLong(0); + } catch (IndexOutOfBoundsException e) { //检测异常,加入到错误日志文件中去 + Log.e(TAG, "Get call note id fails " + e.toString()); + } + } + cursor.close(); + } + return 0; + } + //得到片段id + public static String getSnippetById(ContentResolver resolver, long noteId) { + Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI, //设置光标 + new String [] { NoteColumns.SNIPPET }, + NoteColumns.ID + "=?", + new String [] { String.valueOf(noteId)}, + null); + + if (cursor != null) { //光标不为空 + String snippet = ""; + if (cursor.moveToFirst()) { //移动到开始 + snippet = cursor.getString(0); //通过请求代码0,请求获取字符串,并传递给snippet + } + cursor.close(); //关闭光标 + return snippet; + } //抛出不合法提示 + throw new IllegalArgumentException("Note is not found with id: " + noteId); + } + //得到规范的片段 + 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/tsrxns/java/net/micode/notes/tool/GTaskStringUtils.java b/tsrxns/java/net/micode/notes/tool/GTaskStringUtils.java new file mode 100644 index 0000000..666b729 --- /dev/null +++ b/tsrxns/java/net/micode/notes/tool/GTaskStringUtils.java @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.tool; + +public class GTaskStringUtils { + + public final static String GTASK_JSON_ACTION_ID = "action_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"; + + 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"; + + public final static String GTASK_JSON_DEFAULT_LIST_ID = "default_list_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"; + + 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"; + + 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"; + + public final static String GTASK_JSON_NOTES = "notes"; + + public final static String GTASK_JSON_PARENT_ID = "parent_id"; + + public final static String GTASK_JSON_PRIOR_SIBLING_ID = "prior_sibling_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"; + + public final static String MIUI_FOLDER_PREFFIX = "[MIUI_Notes]"; + + 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"; + + 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/tsrxns/java/net/micode/notes/tool/ResourceParser.java b/tsrxns/java/net/micode/notes/tool/ResourceParser.java new file mode 100644 index 0000000..874faf5 --- /dev/null +++ b/tsrxns/java/net/micode/notes/tool/ResourceParser.java @@ -0,0 +1,261 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.tool; + +import android.content.Context; +import android.preference.PreferenceManager; + +import net.micode.notes.R; +import net.micode.notes.ui.NotesPreferenceActivity; + +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获取笔记背景资源 + * @param id 颜色id + * @return 背景资源id + */ + public static int getNoteBgResource(int id) { + return BG_EDIT_RESOURCES[id]; + } + + /** + * 根据id获取笔记标题背景资源 + * @param id 颜色id + * @return 标题背景资源id + */ + public static int getNoteTitleBgResource(int id) { + return BG_EDIT_TITLE_RESOURCES[id]; + } + } + + /** + * 获取默认笔记背景id + * @param context 上下文对象,用于访问SharedPreferences + * @return 笔记背景资源id + */ + public static int getDefaultBgId(Context context) { + // 如果用户设置了背景颜色,则随机选择一个背景,否则使用默认背景 + if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean( + NotesPreferenceActivity.PREFERENCE_SET_BG_COLOR_KEY, false)) { + return (int) (Math.random() * NoteBgResources.BG_EDIT_RESOURCES.length); + } else { + 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 + }; + + /** + * 获取第一个笔记项的背景资源 + * @param id 颜色id + * @return 背景资源id + */ + public static int getNoteBgFirstRes(int id) { + return BG_FIRST_RESOURCES[id]; + } + + /** + * 获取最后一个笔记项的背景资源 + * @param id 颜色id + * @return 背景资源id + */ + public static int getNoteBgLastRes(int id) { + return BG_LAST_RESOURCES[id]; + } + + /** + * 获取单个笔记项的背景资源 + * @param id 颜色id + * @return 背景资源id + */ + public static int getNoteBgSingleRes(int id) { + return BG_SINGLE_RESOURCES[id]; + } + + /** + * 获取普通笔记项的背景资源 + * @param id 颜色id + * @return 背景资源id + */ + public static int getNoteBgNormalRes(int id) { + return BG_NORMAL_RESOURCES[id]; + } + + /** + * 获取文件夹背景资源 + * @return 文件夹背景资源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, + R.drawable.widget_2x_blue, + R.drawable.widget_2x_white, + R.drawable.widget_2x_green, + R.drawable.widget_2x_red, + }; + + /** + * 根据id获取2x小部件背景资源 + * @param id 颜色id + * @return 背景资源id + */ + 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, + R.drawable.widget_4x_blue, + R.drawable.widget_4x_white, + R.drawable.widget_4x_green, + R.drawable.widget_4x_red + }; + + /** + * 根据id获取4x小部件背景资源 + * @param id 颜色id + * @return 背景资源id + */ + 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获取文本外观资源 + * @param id 外观id + * @return 文本外观资源id + */ + public static int getTexAppearanceResource(int id) { + // 若id超出资源数组范围,则返回默认字体大小 + if (id >= TEXTAPPEARANCE_RESOURCES.length) { + return BG_DEFAULT_FONT_SIZE; + } + return TEXTAPPEARANCE_RESOURCES[id]; + } + + /** + * 获取文本外观资源的数量 + * @return 资源数量 + */ + public static int getResourcesSize() { + return TEXTAPPEARANCE_RESOURCES.length; + } + } +} diff --git a/tsrxns/java/net/micode/notes/ui/AlarmAlertActivity.java b/tsrxns/java/net/micode/notes/ui/AlarmAlertActivity.java new file mode 100644 index 0000000..49f58a8 --- /dev/null +++ b/tsrxns/java/net/micode/notes/ui/AlarmAlertActivity.java @@ -0,0 +1,208 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.ui; + +import android.app.Activity; //表示引入 Android 应用程序中的 Activity 类,用于创建用户界面 +import android.app.AlertDialog; //表示引入 Android 应用程序中的 AlertDialog 类,用于创建对话框。 +import android.content.Context; //表示引入 Android 应用程序中的 Context 类,用于访问应用程序的资源和执行操作。 +import android.content.DialogInterface; //表示引入 Android 应用程序中的 DialogInterface 类,用于处理对话框事件 +import android.content.DialogInterface.OnClickListener; //表示引入 Android 应用程序中的 OnClickListener 接口,用于处理对话框按钮点击事件。 +import android.content.DialogInterface.OnDismissListener; //表示引入 Android 应用程序中的 OnDismissListener 接口,用于处理对话框消失事件 +import android.content.Intent; //表示引入 Android 应用程序中的 Intent 类,用于在应用程序组件之间进行通信。 +import android.media.AudioManager; //表示引入 Android 应用程序中的 AudioManager 类,用于控制音频管理器。 +import android.media.MediaPlayer; //表示引入 Android 应用程序中的 MediaPlayer 类,用于实现音频播放功能。 +import android.media.RingtoneManager; //表示引入 Android 应用程序中的 RingtoneManager 类,用于管理铃声。 +import android.net.Uri; //表示引入 Android 应用程序中的 Uri 类,用于表示统一资源标识符。 +import android.os.Bundle; //表示引入 Android 应用程序中的 Bundle 类,用于传递数据。 +import android.os.PowerManager; //表示引入 Android 应用程序中的 PowerManager 类,用于管理设备电源。 +import android.provider.Settings; //表示引入 Android 应用程序中的 Settings 类,用于访问设备设置。 +import android.view.Window; //表示引入 Android 应用程序中的 Window 类,用于管理窗口。 +import android.view.WindowManager; //表示引入 Android 应用程序中的 WindowManager 类,用于管理窗口布局和显示。 + +import net.micode.notes.R; +import net.micode.notes.data.Notes; +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 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中获得状态数据 + 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()是实现数据共享,实例存储。 + 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; + } + /* + try + { + // 代码区 + } + catch(Exception e) + { + // 异常处理 + } + 代码区如果有错误,就会返回所写异常的处理。*/ + 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,得到闹钟提示音 + int silentModeStreams = Settings.System.getInt(getContentResolver(), + Settings.System.MODE_RINGER_STREAMS_AFFECTED, 0); + + if ((silentModeStreams & (1 << AudioManager.STREAM_ALARM)) != 0) { + mPlayer.setAudioStreamType(silentModeStreams); + } else { + mPlayer.setAudioStreamType(AudioManager.STREAM_ALARM); + } + try { + mPlayer.setDataSource(this, url); + //方法:setDataSource(Context context, Uri uri) + //解释:无返回值,设置多媒体数据来源【根据 Uri】 + mPlayer.prepare(); + //准备同步 + mPlayer.setLooping(true); + //设置是否循环播放 + mPlayer.start(); + //开始播放 + } catch (IllegalArgumentException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + //e.printStackTrace()函数功能是抛出异常, 还将显示出更深的调用信息 + //System.out.println(e),这个方法打印出异常,并且输出在哪里出现的异常 + } catch (SecurityException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IllegalStateException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + private void showActionDialog() { + AlertDialog.Builder dialog = new AlertDialog.Builder(this); + //AlertDialog的构造方法全部是Protected的 + //所以不能直接通过new一个AlertDialog来创建出一个AlertDialog。 + //要创建一个AlertDialog,就要用到AlertDialog.Builder中的create()方法 + //如这里的dialog就是新建了一个AlertDialog + dialog.setTitle(R.string.app_name); + //为对话框设置标题 + dialog.setMessage(mSnippet); + //为对话框设置内容 + dialog.setPositiveButton(R.string.notealert_ok, this); + //给对话框添加"Yes"按钮 + if (isScreenOn()) { + dialog.setNegativeButton(R.string.notealert_enter, this); + }//对话框添加"No"按钮 + dialog.show().setOnDismissListener(this); + } + + public void onClick(DialogInterface dialog, int which) { + switch (which) { + //用which来选择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为键 + startActivity(intent); + //开始动作 + break; + default: + //这是确定操作 + break; + } + } + + public void onDismiss(DialogInterface dialog) { + //忽略 + stopAlarmSound(); + //停止闹钟声音 + finish(); + //完成该动作 + } + + private void stopAlarmSound() { + if (mPlayer != null) { + mPlayer.stop(); + //停止播放 + mPlayer.release(); + //释放MediaPlayer对象 + mPlayer = null; + } + } +} diff --git a/tsrxns/java/net/micode/notes/ui/AlarmInitReceiver.java b/tsrxns/java/net/micode/notes/ui/AlarmInitReceiver.java new file mode 100644 index 0000000..bbeae00 --- /dev/null +++ b/tsrxns/java/net/micode/notes/ui/AlarmInitReceiver.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.ui; + +import android.app.AlarmManager; +import android.app.PendingIntent; +import android.content.BroadcastReceiver; +import android.content.ContentUris; +import android.content.Context; +import android.content.Intent; +import android.database.Cursor; + +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.NoteColumns; + + +public class AlarmInitReceiver extends BroadcastReceiver { + + private static final String [] PROJECTION = new String [] { + NoteColumns.ID, + NoteColumns.ALERTED_DATE + }; + //对数据库的操作,调用标签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时起的毫秒数 + 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转化为字符串 + null); + //Cursor在这里的作用是通过查找数据库中的标签内容,找到和当前系统时间相等的标签 + + if (c != null) { + if (c.moveToFirst()) { + do { + long alertDate = c.getLong(COLUMN_ALERTED_DATE); + Intent sender = new Intent(context, AlarmReceiver.class); + sender.setData(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, c.getLong(COLUMN_ID))); + PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, sender, 0); + AlarmManager alermManager = (AlarmManager) context + .getSystemService(Context.ALARM_SERVICE); + alermManager.set(AlarmManager.RTC_WAKEUP, alertDate, pendingIntent); + } while (c.moveToNext()); + } + c.close(); + } + //然而通过网上查找资料发现,对于闹钟机制的启动,通常需要上面的几个步骤 + //如新建Intent、PendingIntent以及AlarmManager等 + //这里就是根据数据库里的闹钟时间创建一个闹钟机制 + } +} diff --git a/tsrxns/java/net/micode/notes/ui/AlarmReceiver.java b/tsrxns/java/net/micode/notes/ui/AlarmReceiver.java new file mode 100644 index 0000000..814fec2 --- /dev/null +++ b/tsrxns/java/net/micode/notes/ui/AlarmReceiver.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.ui; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +public class AlarmReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + intent.setClass(context, AlarmAlertActivity.class); + //启动AlarmAlertActivity + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + //activity要存在于activity的栈中,而非activity的途径启动activity时必然不存在一个activity的栈 + //所以要新起一个栈装入启动的activity + context.startActivity(intent); + } +} +//这是实现alarm这个功能最接近用户层的包,基于上面的两个包, +//作用还需要深究但是对于setClass和addFlags的 diff --git a/tsrxns/java/net/micode/notes/ui/DateTimePicker.java b/tsrxns/java/net/micode/notes/ui/DateTimePicker.java new file mode 100644 index 0000000..f917268 --- /dev/null +++ b/tsrxns/java/net/micode/notes/ui/DateTimePicker.java @@ -0,0 +1,508 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.ui;//将当前的 Java 文件放置在 net.micode.notes.ui 这个包中。 + + +import java.text.DateFormatSymbols; +import java.util.Calendar; + +import net.micode.notes.R; + + +import android.content.Context; +import android.text.format.DateFormat; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.NumberPicker; + +public class DateTimePicker extends FrameLayout { + //FrameLayout是布局模板之一 + //所有的子元素全部在屏幕的右上方 + private static final boolean DEFAULT_ENABLE_STATE = true; + + private static final int HOURS_IN_HALF_DAY = 12; + private static final int HOURS_IN_ALL_DAY = 24; + private static final int DAYS_IN_ALL_WEEK = 7; + private static final int DATE_SPINNER_MIN_VAL = 0; + private static final int DATE_SPINNER_MAX_VAL = DAYS_IN_ALL_WEEK - 1; + private static final int HOUR_SPINNER_MIN_VAL_24_HOUR_VIEW = 0; + private static final int HOUR_SPINNER_MAX_VAL_24_HOUR_VIEW = 23; + private static final int HOUR_SPINNER_MIN_VAL_12_HOUR_VIEW = 1; + private static final int HOUR_SPINNER_MAX_VAL_12_HOUR_VIEW = 12; + private static final int MINUT_SPINNER_MIN_VAL = 0; + private static final int MINUT_SPINNER_MAX_VAL = 59; + private static final int AMPM_SPINNER_MIN_VAL = 0; + private static final int AMPM_SPINNER_MAX_VAL = 1; + //初始化控件 + private final NumberPicker mDateSpinner; + private final NumberPicker mHourSpinner; + private final NumberPicker mMinuteSpinner; + private final NumberPicker mAmPmSpinner; + //NumberPicker是数字选择器 + //这里定义的四个变量全部是在设置闹钟时需要选择的变量(如日期、时、分、上午或者下午) + private Calendar mDate; + //定义了Calendar类型的变量mDate,用于操作时间 + private String[] mDateDisplayValues = new String[DAYS_IN_ALL_WEEK]; + + private boolean mIsAm; + + private boolean mIs24HourView; + + private boolean mIsEnabled = DEFAULT_ENABLE_STATE; + + private boolean mInitialising; + + private OnDateTimeChangedListener mOnDateTimeChangedListener; + + private NumberPicker.OnValueChangeListener mOnDateChangedListener = new NumberPicker.OnValueChangeListener() { + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + mDate.add(Calendar.DAY_OF_YEAR, newVal - oldVal); + updateDateControl(); + onDateTimeChanged(); + } + };//OnValueChangeListener,这是时间改变监听器,这里主要是对日期的监听 + //将现在日期的值传递给mDate;updateDateControl是同步操作 + + private NumberPicker.OnValueChangeListener mOnHourChangedListener = new NumberPicker.OnValueChangeListener() { + //这里是对 小时(Hour) 的监听 + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + boolean isDateChanged = false; + Calendar cal = Calendar.getInstance(); + //声明一个Calendar的变量cal,便于后续的操作 + if (!mIs24HourView) { + if (!mIsAm && oldVal == HOURS_IN_HALF_DAY - 1 && newVal == HOURS_IN_HALF_DAY) { + cal.setTimeInMillis(mDate.getTimeInMillis()); + cal.add(Calendar.DAY_OF_YEAR, 1); + isDateChanged = true; + //这里是对于12小时制时,晚上11点和12点交替时对日期的更改 + } else if (mIsAm && oldVal == HOURS_IN_HALF_DAY && newVal == HOURS_IN_HALF_DAY - 1) { + cal.setTimeInMillis(mDate.getTimeInMillis()); + cal.add(Calendar.DAY_OF_YEAR, -1); + isDateChanged = true; + } + //这里是对于12小时制时,凌晨11点和12点交替时对日期的更改 + if (oldVal == HOURS_IN_HALF_DAY - 1 && newVal == HOURS_IN_HALF_DAY || + oldVal == HOURS_IN_HALF_DAY && newVal == HOURS_IN_HALF_DAY - 1) { + mIsAm = !mIsAm; + updateAmPmControl(); + }//这里是对于12小时制时,中午11点和12点交替时对AM和PM的更改 + } else { + if (oldVal == HOURS_IN_ALL_DAY - 1 && newVal == 0) { + cal.setTimeInMillis(mDate.getTimeInMillis()); + cal.add(Calendar.DAY_OF_YEAR, 1); + isDateChanged = true; + //这里是对于24小时制时,晚上11点和12点交替时对日期的更改 + } else if (oldVal == 0 && newVal == HOURS_IN_ALL_DAY - 1) { + cal.setTimeInMillis(mDate.getTimeInMillis()); + cal.add(Calendar.DAY_OF_YEAR, -1); + isDateChanged = true; + } + } //这里是对于12小时制时,凌晨11点和12点交替时对日期的更改 + int newHour = mHourSpinner.getValue() % HOURS_IN_HALF_DAY + (mIsAm ? 0 : HOURS_IN_HALF_DAY); + //通过数字选择器对newHour的赋值 + mDate.set(Calendar.HOUR_OF_DAY, newHour); + //通过set函数将新的Hour值传给mDate + onDateTimeChanged(); + if (isDateChanged) { + setCurrentYear(cal.get(Calendar.YEAR)); + setCurrentMonth(cal.get(Calendar.MONTH)); + setCurrentDay(cal.get(Calendar.DAY_OF_MONTH)); + } + } + }; + + private NumberPicker.OnValueChangeListener mOnMinuteChangedListener = new NumberPicker.OnValueChangeListener() { + @Override + //这里是对 分钟(Minute)改变的监听 + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + int minValue = mMinuteSpinner.getMinValue(); + int maxValue = mMinuteSpinner.getMaxValue(); + int offset = 0; + //设置offset,作为小时改变的一个记录数据 + if (oldVal == maxValue && newVal == minValue) { + offset += 1; + } else if (oldVal == minValue && newVal == maxValue) { + offset -= 1; + } + //如果原值为59,新值为0,则offset加1 + //如果原值为0,新值为59,则offset减1 + if (offset != 0) { + mDate.add(Calendar.HOUR_OF_DAY, offset); + mHourSpinner.setValue(getCurrentHour()); + updateDateControl(); + int newHour = getCurrentHourOfDay(); + if (newHour >= HOURS_IN_HALF_DAY) { + mIsAm = false; + updateAmPmControl(); + } else { + mIsAm = true; + updateAmPmControl(); + } + } + mDate.set(Calendar.MINUTE, newVal); + onDateTimeChanged(); + } + }; + + private NumberPicker.OnValueChangeListener mOnAmPmChangedListener = new NumberPicker.OnValueChangeListener() { + //对AM和PM的监听 + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + mIsAm = !mIsAm; + if (mIsAm) { + mDate.add(Calendar.HOUR_OF_DAY, -HOURS_IN_HALF_DAY); + } else { + mDate.add(Calendar.HOUR_OF_DAY, HOURS_IN_HALF_DAY); + } + updateAmPmControl(); + onDateTimeChanged(); + } + }; + + public interface OnDateTimeChangedListener { + void onDateTimeChanged(DateTimePicker view, int year, int month, + int dayOfMonth, int hourOfDay, int minute); + } + + public DateTimePicker(Context context) { + this(context, System.currentTimeMillis()); + }//通过对数据库的访问,获取当前的系统时间 + + public DateTimePicker(Context context, long date) { + this(context, date, DateFormat.is24HourFormat(context)); + }//上面函数的得到的是一个天文数字(1970至今的秒数),需要DateFormat将其变得有意义 + + public DateTimePicker(Context context, long date, boolean is24HourView) { + super(context); + //获取系统时间 + mDate = Calendar.getInstance(); + mInitialising = true; + mIsAm = getCurrentHourOfDay() >= HOURS_IN_HALF_DAY; + inflate(context, R.layout.datetime_picker, this); + //如果当前Activity里用到别的layout,比如对话框layout + //还要设置这个layout上的其他组件的内容,就必须用inflate()方法先将对话框的layout找出来 + //然后再用findViewById()找到它上面的其它组件 + mDateSpinner = (NumberPicker) findViewById(R.id.date); + mDateSpinner.setMinValue(DATE_SPINNER_MIN_VAL); + mDateSpinner.setMaxValue(DATE_SPINNER_MAX_VAL); + mDateSpinner.setOnValueChangedListener(mOnDateChangedListener); + + mHourSpinner = (NumberPicker) findViewById(R.id.hour); + mHourSpinner.setOnValueChangedListener(mOnHourChangedListener); + mMinuteSpinner = (NumberPicker) findViewById(R.id.minute); + mMinuteSpinner.setMinValue(MINUT_SPINNER_MIN_VAL); + mMinuteSpinner.setMaxValue(MINUT_SPINNER_MAX_VAL); + mMinuteSpinner.setOnLongPressUpdateInterval(100); + mMinuteSpinner.setOnValueChangedListener(mOnMinuteChangedListener); + + String[] stringsForAmPm = new DateFormatSymbols().getAmPmStrings(); + mAmPmSpinner = (NumberPicker) findViewById(R.id.amPm); + mAmPmSpinner.setMinValue(AMPM_SPINNER_MIN_VAL); + mAmPmSpinner.setMaxValue(AMPM_SPINNER_MAX_VAL); + mAmPmSpinner.setDisplayedValues(stringsForAmPm); + mAmPmSpinner.setOnValueChangedListener(mOnAmPmChangedListener); + + // update controls to initial state + updateDateControl(); + updateHourControl(); + updateAmPmControl(); + + set24HourView(is24HourView); + + // set to current time + setCurrentDate(date); + + setEnabled(isEnabled()); + + // set the content descriptions + mInitialising = false; + } + + @Override + public void setEnabled(boolean enabled) { + if (mIsEnabled == enabled) { + return; + } + super.setEnabled(enabled); + mDateSpinner.setEnabled(enabled); + mMinuteSpinner.setEnabled(enabled); + mHourSpinner.setEnabled(enabled); + mAmPmSpinner.setEnabled(enabled); + mIsEnabled = enabled; + } + //存在疑问!!!!!!!!!!!!!setEnabled的作用 + //下面的代码通过原程序的注释已经比较清晰,另外可以通过函数名来判断 + //下面的各函数主要是对上面代码引用到的各函数功能的实现 + @Override + public boolean isEnabled() { + return mIsEnabled; + } + + /** + * Get the current date in millis + * + * @return the current date in millis + */ + public long getCurrentDateInTimeMillis() { + return mDate.getTimeInMillis(); + }//实现函数——得到当前的秒数 + + /** + * Set the current date + * + * @param date The current date in millis + */ + public void setCurrentDate(long date) { + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(date); + setCurrentDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), + cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE)); + }//实现函数功能——设置当前的时间,参数是date + + /** + * Set the current date + * + * @param year The current year + * @param month The current month + * @param dayOfMonth The current dayOfMonth + * @param hourOfDay The current hourOfDay + * @param minute The current minute + */ + public void setCurrentDate(int year, int month, + int dayOfMonth, int hourOfDay, int minute) { + setCurrentYear(year); + setCurrentMonth(month); + setCurrentDay(dayOfMonth); + setCurrentHour(hourOfDay); + setCurrentMinute(minute); + }//实现函数功能——设置当前的时间,参数是各详细的变量 + + /** + * Get current year + * + * @return The current year + */ + //下面是得到year、month、day等值 + public int getCurrentYear() { + return mDate.get(Calendar.YEAR); + } + + /** + * Set current year + * + * @param year The current year + */ + public void setCurrentYear(int year) { + if (!mInitialising && year == getCurrentYear()) { + return; + } + mDate.set(Calendar.YEAR, year); + updateDateControl(); + onDateTimeChanged(); + } + + /** + * Get current month in the year + * + * @return The current month in the year + */ + public int getCurrentMonth() { + return mDate.get(Calendar.MONTH); + } + + /** + * Set current month in the year + * + * @param month The month in the year + */ + public void setCurrentMonth(int month) { + if (!mInitialising && month == getCurrentMonth()) { + return; + } + mDate.set(Calendar.MONTH, month); + updateDateControl(); + onDateTimeChanged(); + } + + /** + * Get current day of the month + * + * @return The day of the month + */ + public int getCurrentDay() { + return mDate.get(Calendar.DAY_OF_MONTH); + } + + /** + * Set current day of the month + * + * @param dayOfMonth The day of the month + */ + public void setCurrentDay(int dayOfMonth) { + if (!mInitialising && dayOfMonth == getCurrentDay()) { + return; + } + mDate.set(Calendar.DAY_OF_MONTH, dayOfMonth); + updateDateControl(); + onDateTimeChanged(); + } + + /** + * Get current hour in 24 hour mode, in the range (0~23) + * @return The current hour in 24 hour mode + */ + public int getCurrentHourOfDay() { + return mDate.get(Calendar.HOUR_OF_DAY); + } + + private int getCurrentHour() { + if (mIs24HourView){ + return getCurrentHourOfDay(); + } else { + int hour = getCurrentHourOfDay(); + if (hour > HOURS_IN_HALF_DAY) { + return hour - HOURS_IN_HALF_DAY; + } else { + return hour == 0 ? HOURS_IN_HALF_DAY : hour; + } + } + } + + /** + * Set current hour in 24 hour mode, in the range (0~23) + * + * @param hourOfDay + */ + public void setCurrentHour(int hourOfDay) { + if (!mInitialising && hourOfDay == getCurrentHourOfDay()) { + return; + } + mDate.set(Calendar.HOUR_OF_DAY, hourOfDay); + if (!mIs24HourView) { + if (hourOfDay >= HOURS_IN_HALF_DAY) { + mIsAm = false; + if (hourOfDay > HOURS_IN_HALF_DAY) { + hourOfDay -= HOURS_IN_HALF_DAY; + } + } else { + mIsAm = true; + if (hourOfDay == 0) { + hourOfDay = HOURS_IN_HALF_DAY; + } + } + updateAmPmControl(); + } + mHourSpinner.setValue(hourOfDay); + onDateTimeChanged(); + } + + /** + * Get currentMinute + * + * @return The Current Minute + */ + public int getCurrentMinute() { + return mDate.get(Calendar.MINUTE); + } + + /** + * Set current minute + */ + public void setCurrentMinute(int minute) { + if (!mInitialising && minute == getCurrentMinute()) { + return; + } + mMinuteSpinner.setValue(minute); + mDate.set(Calendar.MINUTE, minute); + onDateTimeChanged(); + } + + /** + * @return true if this is in 24 hour view else false. + */ + public boolean is24HourView () { + return mIs24HourView; + } + + /** + * Set whether in 24 hour or AM/PM mode. + * + * @param is24HourView True for 24 hour mode. False for AM/PM mode. + */ + public void set24HourView(boolean is24HourView) { + if (mIs24HourView == is24HourView) { + return; + } + mIs24HourView = is24HourView; + mAmPmSpinner.setVisibility(is24HourView ? View.GONE : View.VISIBLE); + int hour = getCurrentHourOfDay(); + updateHourControl(); + setCurrentHour(hour); + updateAmPmControl(); + } + + private void updateDateControl() { + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(mDate.getTimeInMillis()); + cal.add(Calendar.DAY_OF_YEAR, -DAYS_IN_ALL_WEEK / 2 - 1); + mDateSpinner.setDisplayedValues(null); + for (int i = 0; i < DAYS_IN_ALL_WEEK; ++i) { + cal.add(Calendar.DAY_OF_YEAR, 1); + mDateDisplayValues[i] = (String) DateFormat.format("MM.dd EEEE", cal); + } + mDateSpinner.setDisplayedValues(mDateDisplayValues); + mDateSpinner.setValue(DAYS_IN_ALL_WEEK / 2); + mDateSpinner.invalidate(); + }// 对于星期几的算法 + + private void updateAmPmControl() { + if (mIs24HourView) { + mAmPmSpinner.setVisibility(View.GONE); + } else { + int index = mIsAm ? Calendar.AM : Calendar.PM; + mAmPmSpinner.setValue(index); + mAmPmSpinner.setVisibility(View.VISIBLE); + }// 对于上下午操作的算法 + } + + private void updateHourControl() { + if (mIs24HourView) { + mHourSpinner.setMinValue(HOUR_SPINNER_MIN_VAL_24_HOUR_VIEW); + mHourSpinner.setMaxValue(HOUR_SPINNER_MAX_VAL_24_HOUR_VIEW); + } else { + mHourSpinner.setMinValue(HOUR_SPINNER_MIN_VAL_12_HOUR_VIEW); + mHourSpinner.setMaxValue(HOUR_SPINNER_MAX_VAL_12_HOUR_VIEW); + }// 对与小时的算法 + } + + /** + * Set the callback that indicates the 'Set' button has been pressed. + * @param callback the callback, if null will do nothing + */ + public void setOnDateTimeChangedListener(OnDateTimeChangedListener callback) { + mOnDateTimeChangedListener = callback; + } + + private void onDateTimeChanged() { + if (mOnDateTimeChangedListener != null) { + mOnDateTimeChangedListener.onDateTimeChanged(this, getCurrentYear(), + getCurrentMonth(), getCurrentDay(), getCurrentHourOfDay(), getCurrentMinute()); + } + } +} diff --git a/tsrxns/java/net/micode/notes/ui/DateTimePickerDialog.java b/tsrxns/java/net/micode/notes/ui/DateTimePickerDialog.java new file mode 100644 index 0000000..0bf2f00 --- /dev/null +++ b/tsrxns/java/net/micode/notes/ui/DateTimePickerDialog.java @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.ui; + +import java.util.Calendar; + +import net.micode.notes.R; +import net.micode.notes.ui.DateTimePicker; +import net.micode.notes.ui.DateTimePicker.OnDateTimeChangedListener; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.DialogInterface.OnClickListener; +import android.text.format.DateFormat; +import android.text.format.DateUtils; + +public class DateTimePickerDialog extends AlertDialog implements OnClickListener { + + private Calendar mDate = Calendar.getInstance(); + //创建一个Calendar类型的变量 mDate,方便时间的操作 + private boolean mIs24HourView; + private OnDateTimeSetListener mOnDateTimeSetListener; + //声明一个时间日期滚动选择控件 mOnDateTimeSetListener + private DateTimePicker mDateTimePicker; + //DateTimePicker控件,控件一般用于让用户可以从日期列表中选择单个值。 + //运行时,单击控件边上的下拉箭头,会显示为两个部分:一个下拉列表,一个用于选择日期的 + + public interface OnDateTimeSetListener { + void OnDateTimeSet(AlertDialog dialog, long date); + } + + public DateTimePickerDialog(Context context, long date) { + //对该界面对话框的实例化 + super(context); + //对数据库的操作 + mDateTimePicker = new DateTimePicker(context); + setView(mDateTimePicker); + //添加一个子视图 + mDateTimePicker.setOnDateTimeChangedListener(new OnDateTimeChangedListener() { + public void onDateTimeChanged(DateTimePicker view, int year, int month, + int dayOfMonth, int hourOfDay, int minute) { + mDate.set(Calendar.YEAR, year); + mDate.set(Calendar.MONTH, month); + mDate.set(Calendar.DAY_OF_MONTH, dayOfMonth); + mDate.set(Calendar.HOUR_OF_DAY, hourOfDay); + mDate.set(Calendar.MINUTE, minute); + //将视图中的各选项设置为系统当前时间 + updateTitle(mDate.getTimeInMillis()); + } + }); + mDate.setTimeInMillis(date); + //得到系统时间 + mDate.set(Calendar.SECOND, 0); + //将秒数设置为0 + mDateTimePicker.setCurrentDate(mDate.getTimeInMillis()); + setButton(context.getString(R.string.datetime_dialog_ok), this); + setButton2(context.getString(R.string.datetime_dialog_cancel), (OnClickListener)null); + //设置按钮 + set24HourView(DateFormat.is24HourFormat(this.getContext())); + //时间标准化打印 + updateTitle(mDate.getTimeInMillis()); + } + + public void set24HourView(boolean is24HourView) { + mIs24HourView = is24HourView; + } + + public void setOnDateTimeSetListener(OnDateTimeSetListener callBack) { + mOnDateTimeSetListener = callBack; + }//将时间日期滚动选择控件实例化 + + private void updateTitle(long date) { + int flag = + DateUtils.FORMAT_SHOW_YEAR | + DateUtils.FORMAT_SHOW_DATE | + DateUtils.FORMAT_SHOW_TIME; + flag |= mIs24HourView ? DateUtils.FORMAT_24HOUR : DateUtils.FORMAT_24HOUR; + setTitle(DateUtils.formatDateTime(this.getContext(), date, flag)); + }//android开发中常见日期管理工具类(API)——DateUtils:按照上下午显示时间 + + public void onClick(DialogInterface arg0, int arg1) { + if (mOnDateTimeSetListener != null) { + mOnDateTimeSetListener.OnDateTimeSet(this, mDate.getTimeInMillis()); + } + }//第一个参数arg0是接收到点击事件的对话框 + //第二个参数arg1是该对话框上的按钮 + +} \ No newline at end of file diff --git a/tsrxns/java/net/micode/notes/ui/DropdownMenu.java b/tsrxns/java/net/micode/notes/ui/DropdownMenu.java new file mode 100644 index 0000000..3e7386c --- /dev/null +++ b/tsrxns/java/net/micode/notes/ui/DropdownMenu.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.ui; + +import android.content.Context; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.Button; +import android.widget.PopupMenu; +import android.widget.PopupMenu.OnMenuItemClickListener; + +import net.micode.notes.R; + +public class DropdownMenu { + private Button mButton; + private PopupMenu mPopupMenu; + //声明一个下拉菜单 + private Menu mMenu; + + public DropdownMenu(Context context, Button button, int menuId) { + mButton = button; + mButton.setBackgroundResource(R.drawable.dropdown_icon); + //设置这个view的背景 + mPopupMenu = new PopupMenu(context, mButton); + mMenu = mPopupMenu.getMenu(); + mPopupMenu.getMenuInflater().inflate(menuId, mMenu); + //MenuInflater是用来实例化Menu目录下的Menu布局文件 + //根据ID来确认menu的内容选项 + mButton.setOnClickListener(new OnClickListener() { + public void onClick(View v) { + mPopupMenu.show(); + } + }); + } + + public void setOnDropdownMenuItemClickListener(OnMenuItemClickListener listener) { + if (mPopupMenu != null) { + mPopupMenu.setOnMenuItemClickListener(listener); + }//设置菜单的监听 + } + + public MenuItem findItem(int id) { + return mMenu.findItem(id); + }//对于菜单选项的初始化,根据索引搜索菜单需要的选项 + + public void setTitle(CharSequence title) { + mButton.setText(title); + }//布局文件,设置标题 +} diff --git a/tsrxns/java/net/micode/notes/ui/FoldersListAdapter.java b/tsrxns/java/net/micode/notes/ui/FoldersListAdapter.java new file mode 100644 index 0000000..fa714df --- /dev/null +++ b/tsrxns/java/net/micode/notes/ui/FoldersListAdapter.java @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.ui; + +import android.content.Context; +import android.database.Cursor; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CursorAdapter; +import android.widget.LinearLayout; +import android.widget.TextView; + +import net.micode.notes.R; +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.NoteColumns; + + +public class FoldersListAdapter extends CursorAdapter { + //CursorAdapter是Cursor和ListView的接口 + //FoldersListAdapter继承了CursorAdapter的类 + //主要作用是便签数据库和用户的交互 + //这里就是用folder(文件夹)的形式展现给用户 + public static final String [] PROJECTION = { + NoteColumns.ID, + NoteColumns.SNIPPET + };//调用数据库中便签的ID和片段 + + public static final int ID_COLUMN = 0; + public static final int NAME_COLUMN = 1; + + public FoldersListAdapter(Context context, Cursor c) { + super(context, c); + // TODO Auto-generated constructor stub + }//数据库操作 + + @Override + public View newView(Context context, Cursor cursor, ViewGroup parent) { + //ViewGroup是容器 + return new FolderListItem(context); + }//创建一个文件夹,对于各文件夹中子标签的初始化 + + @Override + public void bindView(View view, Context context, Cursor cursor) { + if (view instanceof FolderListItem) { + String folderName = (cursor.getLong(ID_COLUMN) == Notes.ID_ROOT_FOLDER) ? context + .getString(R.string.menu_move_parent_folder) : cursor.getString(NAME_COLUMN); + ((FolderListItem) view).bind(folderName); + } + }//将各个布局文件绑定起来 + + public String getFolderName(Context context, int position) { + Cursor cursor = (Cursor) getItem(position); + return (cursor.getLong(ID_COLUMN) == Notes.ID_ROOT_FOLDER) ? context + .getString(R.string.menu_move_parent_folder) : cursor.getString(NAME_COLUMN); + }//根据数据库中标签的ID得到标签的各项内容 + + private class FolderListItem extends LinearLayout { + private TextView mName; + + public FolderListItem(Context context) { + super(context); + //操作数据库 + inflate(context, R.layout.folder_list_item, this); + //根据布局文件的名字等信息将其找出来 + mName = (TextView) findViewById(R.id.tv_folder_name); + } + + public void bind(String name) { + mName.setText(name); + } + } +} diff --git a/tsrxns/java/net/micode/notes/ui/NoteEditActivity.java b/tsrxns/java/net/micode/notes/ui/NoteEditActivity.java new file mode 100644 index 0000000..6dc52b0 --- /dev/null +++ b/tsrxns/java/net/micode/notes/ui/NoteEditActivity.java @@ -0,0 +1,1068 @@ +package net.micode.notes.ui; + +import android.app.Activity; +import android.app.AlarmManager; +import android.app.AlertDialog; +import android.app.PendingIntent; +import android.app.SearchManager; +import android.appwidget.AppWidgetManager; +import android.content.ContentUris; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.SharedPreferences; +import android.graphics.Paint; +import android.os.Bundle; +import android.preference.PreferenceManager; +import android.text.Spannable; +import android.text.SpannableString; +import android.text.TextUtils; +import android.text.format.DateUtils; +import android.text.style.BackgroundColorSpan; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; +import android.view.MotionEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.WindowManager; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.CompoundButton.OnCheckedChangeListener; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; +import android.widget.Toast; + +import net.micode.notes.R; +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.TextNote; +import net.micode.notes.model.WorkingNote; +import net.micode.notes.model.WorkingNote.NoteSettingChangedListener; +import net.micode.notes.tool.DataUtils; +import net.micode.notes.tool.ResourceParser; +import net.micode.notes.tool.ResourceParser.TextAppearanceResources; +import net.micode.notes.ui.DateTimePickerDialog.OnDateTimeSetListener; +import net.micode.notes.ui.NoteEditText; +import net.micode.notes.ui.NoteEditText.OnTextViewChangeListener; +import net.micode.notes.widget.NoteWidgetProvider_2x; +import net.micode.notes.widget.NoteWidgetProvider_4x; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + + +public class NoteEditActivity extends Activity implements OnClickListener, + NoteSettingChangedListener, OnTextViewChangeListener { + //该类主要是针对标签的编辑 + //继承了系统内部许多和监听有关的类 + private class HeadViewHolder { + public TextView tvModified; + + public ImageView ivAlertIcon; + + public TextView tvAlertDate; + + public ImageView ibSetBgColor; + } + //使用Map实现数据存储 + private static final Map sBgSelectorBtnsMap = new HashMap(); + static { + sBgSelectorBtnsMap.put(R.id.iv_bg_yellow, ResourceParser.YELLOW); + sBgSelectorBtnsMap.put(R.id.iv_bg_red, ResourceParser.RED); + sBgSelectorBtnsMap.put(R.id.iv_bg_blue, ResourceParser.BLUE); + sBgSelectorBtnsMap.put(R.id.iv_bg_green, ResourceParser.GREEN); + sBgSelectorBtnsMap.put(R.id.iv_bg_white, ResourceParser.WHITE); + //put函数是将指定值和指定键相连 + } + + private static final Map sBgSelectorSelectionMap = new HashMap(); + static { + sBgSelectorSelectionMap.put(ResourceParser.YELLOW, R.id.iv_bg_yellow_select); + sBgSelectorSelectionMap.put(ResourceParser.RED, R.id.iv_bg_red_select); + sBgSelectorSelectionMap.put(ResourceParser.BLUE, R.id.iv_bg_blue_select); + sBgSelectorSelectionMap.put(ResourceParser.GREEN, R.id.iv_bg_green_select); + sBgSelectorSelectionMap.put(ResourceParser.WHITE, R.id.iv_bg_white_select); + //put函数是将指定值和指定键相连 + } + + private static final Map sFontSizeBtnsMap = new HashMap(); + static { + sFontSizeBtnsMap.put(R.id.ll_font_large, ResourceParser.TEXT_LARGE); + sFontSizeBtnsMap.put(R.id.ll_font_small, ResourceParser.TEXT_SMALL); + sFontSizeBtnsMap.put(R.id.ll_font_normal, ResourceParser.TEXT_MEDIUM); + sFontSizeBtnsMap.put(R.id.ll_font_super, ResourceParser.TEXT_SUPER); + //put函数是将指定值和指定键相连 + } + + private static final Map sFontSelectorSelectionMap = new HashMap(); + static { + sFontSelectorSelectionMap.put(ResourceParser.TEXT_LARGE, R.id.iv_large_select); + sFontSelectorSelectionMap.put(ResourceParser.TEXT_SMALL, R.id.iv_small_select); + sFontSelectorSelectionMap.put(ResourceParser.TEXT_MEDIUM, R.id.iv_medium_select); + sFontSelectorSelectionMap.put(ResourceParser.TEXT_SUPER, R.id.iv_super_select); + //put函数是将指定值和指定键相连 + } + + private static final String TAG = "NoteEditActivity"; + + private HeadViewHolder mNoteHeaderHolder; + + private View mHeadViewPanel; + //私有化一个界面操作mHeadViewPanel,对表头的操作 + private View mNoteBgColorSelector; + //私有化一个界面操作mNoteBgColorSelector,对背景颜色的操作 + private View mFontSizeSelector; + //私有化一个界面操作mFontSizeSelector,对标签字体的操作 + private NoteEditText mNoteEditor; + //声明编辑控件,对文本操作 + private View mNoteEditorPanel; + //私有化一个界面操作mNoteEditorPanel,文本编辑的控制板 + //private WorkingNote mWorkingNote; + public WorkingNote mWorkingNote; + //对模板WorkingNote的初始化 + private SharedPreferences mSharedPrefs; + //私有化SharedPreferences的数据存储方式 + //它的本质是基于XML文件存储key-value键值对数据 + private int mFontSizeId; + //用于操作字体的大小 + private static final String PREFERENCE_FONT_SIZE = "pref_font_size"; + + private static final int SHORTCUT_ICON_TITLE_MAX_LEN = 10; + + public static final String TAG_CHECKED = String.valueOf('\u221A'); + public static final String TAG_UNCHECKED = String.valueOf('\u25A1'); + + private LinearLayout mEditTextList; + //线性布局 + private String mUserQuery; + private Pattern mPattern; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + this.setContentView(R.layout.note_edit); + //对数据库的访问操作 + if (savedInstanceState == null && !initActivityState(getIntent())) { + finish(); + return; + } + initResources(); + } + + /** + * Current activity may be killed when the memory is low. Once it is killed, for another time + * user load this activity, we should restore the former state + */ + @Override + protected void onRestoreInstanceState(Bundle savedInstanceState) { + super.onRestoreInstanceState(savedInstanceState); + if (savedInstanceState != null && savedInstanceState.containsKey(Intent.EXTRA_UID)) { + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.putExtra(Intent.EXTRA_UID, savedInstanceState.getLong(Intent.EXTRA_UID)); + if (!initActivityState(intent)) { + finish(); + return; + } + Log.d(TAG, "Restoring from killed activity"); + }//为防止内存不足时程序的终止,在这里有一个保存现场的函数 + } + + private boolean initActivityState(Intent intent) { + /** + * If the user specified the {@link Intent#ACTION_VIEW} but not provided with id, + * then jump to the NotesListActivity + */ + mWorkingNote = null; + if (TextUtils.equals(Intent.ACTION_VIEW, intent.getAction())) { + long noteId = intent.getLongExtra(Intent.EXTRA_UID, 0); + mUserQuery = ""; + //如果用户实例化标签时,系统并未给出标签ID + /** + * Starting from the searched result + */ + //根据键值查找ID + if (intent.hasExtra(SearchManager.EXTRA_DATA_KEY)) { + noteId = Long.parseLong(intent.getStringExtra(SearchManager.EXTRA_DATA_KEY)); + mUserQuery = intent.getStringExtra(SearchManager.USER_QUERY); + } + //如果ID在数据库中未找到 + if (!DataUtils.visibleInNoteDatabase(getContentResolver(), noteId, Notes.TYPE_NOTE)) { + Intent jump = new Intent(this, NotesListActivity.class); + startActivity(jump); + //程序将跳转到上面声明的intent——jump + showToast(R.string.error_note_not_exist); + finish(); + return false; + } + //ID在数据库中找到 + else { + mWorkingNote = WorkingNote.load(this, noteId); + if (mWorkingNote == null) { + Log.e(TAG, "load note failed with note id" + noteId); + //打印出红色的错误信息 + finish(); + return false; + } + } + //setSoftInputMode——软键盘输入模式 + getWindow().setSoftInputMode( + WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN + | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); + } else if(TextUtils.equals(Intent.ACTION_INSERT_OR_EDIT, intent.getAction())) { + // intent.getAction() + // 大多用于broadcast发送广播时给机制(intent)设置一个action,就是一个字符串 + // 用户可以通过receive(接受)intent,通过 getAction得到的字符串,来决定做什么 + long folderId = intent.getLongExtra(Notes.INTENT_EXTRA_FOLDER_ID, 0); + int widgetId = intent.getIntExtra(Notes.INTENT_EXTRA_WIDGET_ID, + AppWidgetManager.INVALID_APPWIDGET_ID); + int widgetType = intent.getIntExtra(Notes.INTENT_EXTRA_WIDGET_TYPE, + Notes.TYPE_WIDGET_INVALIDE); + int bgResId = intent.getIntExtra(Notes.INTENT_EXTRA_BACKGROUND_ID, + ResourceParser.getDefaultBgId(this)); + // intent.getInt(Long、String)Extra是对各变量的语法分析 + // Parse call-record note + String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); + long callDate = intent.getLongExtra(Notes.INTENT_EXTRA_CALL_DATE, 0); + if (callDate != 0 && phoneNumber != null) { + if (TextUtils.isEmpty(phoneNumber)) { + Log.w(TAG, "The call record number is null"); + } + long noteId = 0; + if ((noteId = DataUtils.getNoteIdByPhoneNumberAndCallDate(getContentResolver(), + phoneNumber, callDate)) > 0) { + mWorkingNote = WorkingNote.load(this, noteId); + if (mWorkingNote == null) { + Log.e(TAG, "load call note failed with note id" + noteId); + finish(); + return false; + } + //将电话号码与手机的号码簿相关 + } else { + mWorkingNote = WorkingNote.createEmptyNote(this, folderId, widgetId, + widgetType, bgResId); + mWorkingNote.convertToCallNote(phoneNumber, callDate); + // + } + } else { + mWorkingNote = WorkingNote.createEmptyNote(this, folderId, widgetId, widgetType, + bgResId); + }//创建一个新的WorkingNote + + getWindow().setSoftInputMode( + WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN + | WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); + } else { + Log.e(TAG, "Intent not specified action, should not support"); + finish(); + return false; + } + mWorkingNote.setOnSettingStatusChangedListener(this); + return true; + } + + @Override + protected void onResume() { + super.onResume(); + initNoteScreen(); + } + + private void initNoteScreen() { + //对界面的初始化操作 + mNoteEditor.setTextAppearance(this, TextAppearanceResources + .getTexAppearanceResource(mFontSizeId)); + //设置外观 + if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) { + switchToListMode(mWorkingNote.getContent()); + } else { + mNoteEditor.setText(getHighlightQueryResult(mWorkingNote.getContent(), mUserQuery)); + mNoteEditor.setSelection(mNoteEditor.getText().length()); + } + for (Integer id : sBgSelectorSelectionMap.keySet()) { + findViewById(sBgSelectorSelectionMap.get(id)).setVisibility(View.GONE); + } + mHeadViewPanel.setBackgroundResource(mWorkingNote.getTitleBgResId()); + mNoteEditorPanel.setBackgroundResource(mWorkingNote.getBgColorResId()); + + mNoteHeaderHolder.tvModified.setText(DateUtils.formatDateTime(this, + mWorkingNote.getModifiedDate(), DateUtils.FORMAT_SHOW_DATE + | DateUtils.FORMAT_NUMERIC_DATE | DateUtils.FORMAT_SHOW_TIME + | DateUtils.FORMAT_SHOW_YEAR)); + + /** + * TODO: Add the menu for setting alert. Currently disable it because the DateTimePicker + * is not ready + */ + showAlertHeader(); + } + //设置闹钟的显示 + private void showAlertHeader() { + if (mWorkingNote.hasClockAlert()) { + long time = System.currentTimeMillis(); + if (time > mWorkingNote.getAlertDate()) { + mNoteHeaderHolder.tvAlertDate.setText(R.string.note_alert_expired); + } + //如果系统时间大于了闹钟设置的时间,那么闹钟失效 + else { + mNoteHeaderHolder.tvAlertDate.setText(DateUtils.getRelativeTimeSpanString( + mWorkingNote.getAlertDate(), time, DateUtils.MINUTE_IN_MILLIS)); + } + mNoteHeaderHolder.tvAlertDate.setVisibility(View.VISIBLE); + mNoteHeaderHolder.ivAlertIcon.setVisibility(View.VISIBLE); + //显示闹钟开启的图标 + } else { + mNoteHeaderHolder.tvAlertDate.setVisibility(View.GONE); + mNoteHeaderHolder.ivAlertIcon.setVisibility(View.GONE); + }; + } + + @Override + protected void onNewIntent(Intent intent) { + super.onNewIntent(intent); + initActivityState(intent); + } + + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + /** + * For new note without note id, we should firstly save it to + * generate a id. If the editing note is not worth saving, there + * is no id which is equivalent to create new note + */ + if (!mWorkingNote.existInDatabase()) { + saveNote(); + } + //在创建一个新的标签时,先在数据库中匹配 + //如果不存在,那么先在数据库中存储 + outState.putLong(Intent.EXTRA_UID, mWorkingNote.getNoteId()); + Log.d(TAG, "Save working note id: " + mWorkingNote.getNoteId() + " onSaveInstanceState"); + } + + @Override + //MotionEvent是对屏幕触控的传递机制 + public boolean dispatchTouchEvent(MotionEvent ev) { + if (mNoteBgColorSelector.getVisibility() == View.VISIBLE + && !inRangeOfView(mNoteBgColorSelector, ev)) { + mNoteBgColorSelector.setVisibility(View.GONE); + return true; + }//颜色选择器在屏幕上可见 + + if (mFontSizeSelector.getVisibility() == View.VISIBLE + && !inRangeOfView(mFontSizeSelector, ev)) { + mFontSizeSelector.setVisibility(View.GONE); + return true; + }//字体大小选择器在屏幕上可见 + return super.dispatchTouchEvent(ev); + } + //对屏幕触控的坐标进行操作 + private boolean inRangeOfView(View view, MotionEvent ev) { + int []location = new int[2]; + view.getLocationOnScreen(location); + int x = location[0]; + int y = location[1]; + if (ev.getX() < x + || ev.getX() > (x + view.getWidth()) + || ev.getY() < y + || ev.getY() > (y + view.getHeight())) + //如果触控的位置超出了给定的范围,返回false + { + return false; + } + return true; + } + + private void initResources() { + mHeadViewPanel = findViewById(R.id.note_title); + mNoteHeaderHolder = new HeadViewHolder(); + mNoteHeaderHolder.tvModified = (TextView) findViewById(R.id.tv_modified_date); + mNoteHeaderHolder.ivAlertIcon = (ImageView) findViewById(R.id.iv_alert_icon); + mNoteHeaderHolder.tvAlertDate = (TextView) findViewById(R.id.tv_alert_date); + mNoteHeaderHolder.ibSetBgColor = (ImageView) findViewById(R.id.btn_set_bg_color); + mNoteHeaderHolder.ibSetBgColor.setOnClickListener(this); + mNoteEditor = (NoteEditText) findViewById(R.id.note_edit_view); + mNoteEditorPanel = findViewById(R.id.sv_note_edit); + mNoteBgColorSelector = findViewById(R.id.note_bg_color_selector); + for (int id : sBgSelectorBtnsMap.keySet()) { + ImageView iv = (ImageView) findViewById(id); + iv.setOnClickListener(this); + }//对标签各项属性内容的初始化 + + mFontSizeSelector = findViewById(R.id.font_size_selector); + for (int id : sFontSizeBtnsMap.keySet()) { + View view = findViewById(id); + view.setOnClickListener(this); + };//对字体大小的选择 + mSharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); + mFontSizeId = mSharedPrefs.getInt(PREFERENCE_FONT_SIZE, ResourceParser.BG_DEFAULT_FONT_SIZE); + /** + * HACKME: Fix bug of store the resource id in shared preference. + * The id may larger than the length of resources, in this case, + * return the {@link ResourceParser#BG_DEFAULT_FONT_SIZE} + */ + if(mFontSizeId >= TextAppearanceResources.getResourcesSize()) { + mFontSizeId = ResourceParser.BG_DEFAULT_FONT_SIZE; + } + mEditTextList = (LinearLayout) findViewById(R.id.note_edit_list); + mNoteEditor.setOnTextViewChangeListener(this); + } + + @Override + protected void onPause() { + super.onPause(); + if(saveNote()) { + Log.d(TAG, "Note data was saved with length:" + mWorkingNote.getContent().length()); + } + clearSettingState(); + } + //和桌面小工具的同步 + private void updateWidget() { + Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE); + if (mWorkingNote.getWidgetType() == Notes.TYPE_WIDGET_2X) { + intent.setClass(this, NoteWidgetProvider_2x.class); + } else if (mWorkingNote.getWidgetType() == Notes.TYPE_WIDGET_4X) { + intent.setClass(this, NoteWidgetProvider_4x.class); + } else { + Log.e(TAG, "Unspported widget type"); + return; + } + + intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] { + mWorkingNote.getWidgetId() + }); + + sendBroadcast(intent); + setResult(RESULT_OK, intent); + } + + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.btn_set_bg_color) { + mNoteBgColorSelector.setVisibility(View.VISIBLE); + findViewById(sBgSelectorSelectionMap.get(mWorkingNote.getBgColorId())).setVisibility( + - View.VISIBLE); + } else if (sBgSelectorBtnsMap.containsKey(id)) { + findViewById(sBgSelectorSelectionMap.get(mWorkingNote.getBgColorId())).setVisibility( + View.GONE); + mWorkingNote.setBgColorId(sBgSelectorBtnsMap.get(id)); + mNoteBgColorSelector.setVisibility(View.GONE); + } else if (sFontSizeBtnsMap.containsKey(id)) { + findViewById(sFontSelectorSelectionMap.get(mFontSizeId)).setVisibility(View.GONE); + mFontSizeId = sFontSizeBtnsMap.get(id); + mSharedPrefs.edit().putInt(PREFERENCE_FONT_SIZE, mFontSizeId).commit(); + findViewById(sFontSelectorSelectionMap.get(mFontSizeId)).setVisibility(View.VISIBLE); + if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) { + getWorkingText(); + switchToListMode(mWorkingNote.getContent()); + } else { + mNoteEditor.setTextAppearance(this, + TextAppearanceResources.getTexAppearanceResource(mFontSizeId)); + } + mFontSizeSelector.setVisibility(View.GONE); + } + }//************************存在问题 + + @Override + public void onBackPressed() { + if(clearSettingState()) { + return; + } + + saveNote(); + super.onBackPressed(); + } + + private boolean clearSettingState() { + if (mNoteBgColorSelector.getVisibility() == View.VISIBLE) { + mNoteBgColorSelector.setVisibility(View.GONE); + return true; + } else if (mFontSizeSelector.getVisibility() == View.VISIBLE) { + mFontSizeSelector.setVisibility(View.GONE); + return true; + } + return false; + } + + public void onBackgroundColorChanged() { + findViewById(sBgSelectorSelectionMap.get(mWorkingNote.getBgColorId())).setVisibility( + View.VISIBLE); + mNoteEditorPanel.setBackgroundResource(mWorkingNote.getBgColorResId()); + mHeadViewPanel.setBackgroundResource(mWorkingNote.getTitleBgResId()); + } + + @Override + //对选择菜单的准备 + public boolean onPrepareOptionsMenu(Menu menu) { + if (isFinishing()) { + return true; + } + clearSettingState(); + menu.clear(); + if (mWorkingNote.getFolderId() == Notes.ID_CALL_RECORD_FOLDER) { + getMenuInflater().inflate(R.menu.call_note_edit, menu); + // MenuInflater是用来实例化Menu目录下的Menu布局文件的 + } else { + getMenuInflater().inflate(R.menu.note_edit, menu); + } + if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) { + menu.findItem(R.id.menu_list_mode).setTitle(R.string.menu_normal_mode); + } else { + menu.findItem(R.id.menu_list_mode).setTitle(R.string.menu_list_mode); + } + if (mWorkingNote.hasClockAlert()) { + menu.findItem(R.id.menu_alert).setVisible(false); + } else { + menu.findItem(R.id.menu_delete_remind).setVisible(false); + } + return true; + } + + @Override + /* + * 函数功能:动态改变菜单选项内容 + * 函数实现:如下注释 + */ + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + //根据菜单的id来编剧相关项目 + case R.id.menu_new_note: + //创建一个新的便签 + createNewNote(); + break; + case R.id.menu_delete: + //删除便签 + AlertDialog.Builder builder = new AlertDialog.Builder(this); + //创建关于删除操作的对话框 + builder.setTitle(getString(R.string.alert_title_delete)); + // 设置标签的标题为alert_title_delete + builder.setIcon(android.R.drawable.ic_dialog_alert); + //设置对话框图标 + builder.setMessage(getString(R.string.alert_message_delete_note)); + //设置对话框内容 + builder.setPositiveButton(android.R.string.ok, + new DialogInterface.OnClickListener() { + //建立按键监听器 + public void onClick(DialogInterface dialog, int which) { + //点击所触发事件 + deleteCurrentNote(); + // 删除单签便签 + finish(); + } + }); + //添加“YES”按钮 + builder.setNegativeButton(android.R.string.cancel, null); + //添加“NO”的按钮 + builder.show(); + //显示对话框 + break; + case R.id.menu_font_size: + //字体大小的编辑 + mFontSizeSelector.setVisibility(View.VISIBLE); + // 将字体选择器置为可见 + findViewById(sFontSelectorSelectionMap.get(mFontSizeId)).setVisibility(View.VISIBLE); + // 通过id找到相应的大小 + break; + case R.id.menu_list_mode: + //选择列表模式 + mWorkingNote.setCheckListMode(mWorkingNote.getCheckListMode() == 0 ? + TextNote.MODE_CHECK_LIST : 0); + break; + case R.id.menu_share: + //菜单共享 + getWorkingText(); + sendTo(this, mWorkingNote.getContent()); + // 用sendto函数将运行文本发送到遍历的本文内 + break; + case R.id.menu_send_to_desktop: + //发送到桌面 + sendToDesktop(); + break; + case R.id.menu_alert: + //创建提醒器 + setReminder(); + break; + case R.id.menu_delete_remind: + //删除日期提醒 + mWorkingNote.setAlertDate(0, false); + break; + default: + break; + } + return true; + } + + /* + * 函数功能:建立事件提醒器 + * 函数实现:如下注释 + */ + private void setReminder() { + DateTimePickerDialog d = new DateTimePickerDialog(this, System.currentTimeMillis()); + // 建立修改时间日期的对话框 + d.setOnDateTimeSetListener(new OnDateTimeSetListener() { + public void OnDateTimeSet(AlertDialog dialog, long date) { + mWorkingNote.setAlertDate(date , true); + //选择提醒的日期 + } + }); + //建立时间日期的监听器 + d.show(); + //显示对话框 + } + + /** + * Share note to apps that support {@link Intent#ACTION_SEND} action + * and {@text/plain} type + */ + /* + * 函数功能:共享便签 + * 函数实现:如下注释 + */ + private void sendTo(Context context, String info) { + Intent intent = new Intent(Intent.ACTION_SEND); + //建立intent链接选项 + intent.putExtra(Intent.EXTRA_TEXT, info); + //将需要传递的便签信息放入text文件中 + intent.setType("text/plain"); + //编辑连接器的类型 + context.startActivity(intent); + //在acti中进行链接 + } + + /* + * 函数功能:创建一个新的便签 + * 函数实现:如下注释 + */ + private void createNewNote() { + // Firstly, save current editing notes + //保存当前便签 + saveNote(); + + // For safety, start a new NoteEditActivity + finish(); + Intent intent = new Intent(this, NoteEditActivity.class); + //设置链接器 + intent.setAction(Intent.ACTION_INSERT_OR_EDIT); + //该活动定义为创建或编辑 + intent.putExtra(Notes.INTENT_EXTRA_FOLDER_ID, mWorkingNote.getFolderId()); + //将运行便签的id添加到INTENT_EXTRA_FOLDER_ID标记中 + startActivity(intent); + //开始activity并链接 + } + + /* + * 函数功能:删除当前便签 + * 函数实现:如下注释 + */ + private void deleteCurrentNote() { + if (mWorkingNote.existInDatabase()) { + //假如当前运行的便签内存有数据 + HashSet ids = new HashSet(); + long id = mWorkingNote.getNoteId(); + if (id != Notes.ID_ROOT_FOLDER) { + ids.add(id); + //如果不是头文件夹建立一个hash表把便签id存起来 + } else { + Log.d(TAG, "Wrong note id, should not happen"); + //否则报错 + } + if (!isSyncMode()) { + //在非同步模式情况下 + //删除操作 + if (!DataUtils.batchDeleteNotes(getContentResolver(), ids)) { + Log.e(TAG, "Delete Note error"); + } + } else { + //同步模式 + //移动至垃圾文件夹的操作 + if (!DataUtils.batchMoveToFolder(getContentResolver(), ids, Notes.ID_TRASH_FOLER)) { + Log.e(TAG, "Move notes to trash folder error, should not happens"); + } + } + } + mWorkingNote.markDeleted(true); + //将这些标签的删除标记置为true + } + + /* + * 函数功能:判断是否为同步模式 + * 函数实现:直接看NotesPreferenceActivity中同步名称是否为空 + */ + private boolean isSyncMode() { + return NotesPreferenceActivity.getSyncAccountName(this).trim().length() > 0; + } + + /* + * 函数功能:设置提醒时间 + * 函数实现:如下注释 + */ + public void onClockAlertChanged(long date, boolean set) { + /** + * User could set clock to an unsaved note, so before setting the + * alert clock, we should save the note first + */ + if (!mWorkingNote.existInDatabase()) { + //首先保存已有的便签 + saveNote(); + } + if (mWorkingNote.getNoteId() > 0) { + Intent intent = new Intent(this, AlarmReceiver.class); + intent.setData(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, mWorkingNote.getNoteId())); + //若有有运行的便签就是建立一个链接器将标签id都存在uri中 + PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0); + AlarmManager alarmManager = ((AlarmManager) getSystemService(ALARM_SERVICE)); + //设置提醒管理器 + showAlertHeader(); + if(!set) { + alarmManager.cancel(pendingIntent); + } else { + alarmManager.set(AlarmManager.RTC_WAKEUP, date, pendingIntent); + } + //如果用户设置了时间,就通过提醒管理器设置一个监听事项 + } else { + /** + * There is the condition that user has input nothing (the note is + * not worthy saving), we have no note id, remind the user that he + * should input something + */ + //没有运行的便签就报错 + Log.e(TAG, "Clock alert setting error"); + showToast(R.string.error_note_empty_for_clock); + } + } + + /* + * 函数功能:Widget发生改变的所触发的事件 + */ + public void onWidgetChanged() { + updateWidget();//更新Widget + } + + /* + * 函数功能: 删除编辑文本框所触发的事件 + * 函数实现:如下注释 + */ + public void onEditTextDelete(int index, String text) { + int childCount = mEditTextList.getChildCount(); + if (childCount == 1) { + return; + } + //没有编辑框的话直接返回 + for (int i = index + 1; i < childCount; i++) { + ((NoteEditText) mEditTextList.getChildAt(i).findViewById(R.id.et_edit_text)) + .setIndex(i - 1); + //通过id把编辑框存在便签编辑框中 + } + + mEditTextList.removeViewAt(index); + //删除特定位置的视图 + NoteEditText edit = null; + if(index == 0) { + edit = (NoteEditText) mEditTextList.getChildAt(0).findViewById( + R.id.et_edit_text); + } else { + edit = (NoteEditText) mEditTextList.getChildAt(index - 1).findViewById( + R.id.et_edit_text); + } + //通过id把编辑框存在空的NoteEditText中 + int length = edit.length(); + edit.append(text); + edit.requestFocus();//请求优先完成该此 编辑 + edit.setSelection(length);//定位到length位置处的条目 + } + + /* + * 函数功能:进入编辑文本框所触发的事件 + * 函数实现:如下注释 + */ + public void onEditTextEnter(int index, String text) { + /** + * Should not happen, check for debug + */ + if(index > mEditTextList.getChildCount()) { + Log.e(TAG, "Index out of mEditTextList boundrary, should not happen"); + //越界把偶偶 + } + + View view = getListItem(text, index); + mEditTextList.addView(view, index); + //建立一个新的视图并添加到编辑文本框内 + NoteEditText edit = (NoteEditText) view.findViewById(R.id.et_edit_text); + edit.requestFocus();//请求优先操作 + edit.setSelection(0);//定位到起始位置 + for (int i = index + 1; i < mEditTextList.getChildCount(); i++) { + ((NoteEditText) mEditTextList.getChildAt(i).findViewById(R.id.et_edit_text)) + .setIndex(i); + //遍历子文本框并设置对应对下标 + } + } + + /* + * 函数功能:切换至列表模式 + * 函数实现:如下注释 + */ + private void switchToListMode(String text) { + mEditTextList.removeAllViews(); + String[] items = text.split("\n"); + int index = 0; + //清空所有视图,初始化下标 + for (String item : items) { + if(!TextUtils.isEmpty(item)) { + mEditTextList.addView(getListItem(item, index)); + index++; + //遍历所有文本单元并添加到文本框中 + } + } + mEditTextList.addView(getListItem("", index)); + mEditTextList.getChildAt(index).findViewById(R.id.et_edit_text).requestFocus(); + //优先请求此操作 + + mNoteEditor.setVisibility(View.GONE); + //便签编辑器不可见 + mEditTextList.setVisibility(View.VISIBLE); + //将文本编辑框置为可见 + } + + /* + * 函数功能:获取高亮效果的反馈情况 + * 函数实现:如下注释 + */ + private Spannable getHighlightQueryResult(String fullText, String userQuery) { + SpannableString spannable = new SpannableString(fullText == null ? "" : fullText); + //新建一个效果选项 + if (!TextUtils.isEmpty(userQuery)) { + mPattern = Pattern.compile(userQuery); + //将用户的询问进行解析 + Matcher m = mPattern.matcher(fullText); + //建立一个状态机检查Pattern并进行匹配 + int start = 0; + while (m.find(start)) { + spannable.setSpan( + new BackgroundColorSpan(this.getResources().getColor( + R.color.user_query_highlight)), m.start(), m.end(), + Spannable.SPAN_INCLUSIVE_EXCLUSIVE); + //设置背景颜色 + start = m.end(); + //跟新起始位置 + } + } + return spannable; + } + + /* + * 函数功能:获取列表项 + * 函数实现:如下注释 + */ + private View getListItem(String item, int index) { + View view = LayoutInflater.from(this).inflate(R.layout.note_edit_list_item, null); + //创建一个视图 + final NoteEditText edit = (NoteEditText) view.findViewById(R.id.et_edit_text); + edit.setTextAppearance(this, TextAppearanceResources.getTexAppearanceResource(mFontSizeId)); + //创建一个文本编辑框并设置可见性 + CheckBox cb = ((CheckBox) view.findViewById(R.id.cb_edit_item)); + cb.setOnCheckedChangeListener(new OnCheckedChangeListener() { + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + if (isChecked) { + edit.setPaintFlags(edit.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); + } else { + edit.setPaintFlags(Paint.ANTI_ALIAS_FLAG | Paint.DEV_KERN_TEXT_FLAG); + } + } + }); + //建立一个打钩框并设置监听器 + + if (item.startsWith(TAG_CHECKED)) { + //选择勾选 + cb.setChecked(true); + edit.setPaintFlags(edit.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); + item = item.substring(TAG_CHECKED.length(), item.length()).trim(); + } else if (item.startsWith(TAG_UNCHECKED)) { + //选择不勾选 + cb.setChecked(false); + edit.setPaintFlags(Paint.ANTI_ALIAS_FLAG | Paint.DEV_KERN_TEXT_FLAG); + item = item.substring(TAG_UNCHECKED.length(), item.length()).trim(); + } + + edit.setOnTextViewChangeListener(this); + edit.setIndex(index); + edit.setText(getHighlightQueryResult(item, mUserQuery)); + //运行编辑框的监听器对该行为作出反应,并设置下标及文本内容 + return view; + } + + /* + * 函数功能:便签内容发生改变所 触发的事件 + * 函数实现:如下注释 + */ + public void onTextChange(int index, boolean hasText) { + if (index >= mEditTextList.getChildCount()) { + Log.e(TAG, "Wrong index, should not happen"); + return; + //越界报错 + } + if(hasText) { + mEditTextList.getChildAt(index).findViewById(R.id.cb_edit_item).setVisibility(View.VISIBLE); + } else { + mEditTextList.getChildAt(index).findViewById(R.id.cb_edit_item).setVisibility(View.GONE); + } + //如果内容不为空则将其子编辑框可见性置为可见,否则不可见 + } + + /* + * 函数功能:检查模式和列表模式的切换 + * 函数实现:如下注释 + */ + public void onCheckListModeChanged(int oldMode, int newMode) { + if (newMode == TextNote.MODE_CHECK_LIST) { + switchToListMode(mNoteEditor.getText().toString()); + //检查模式切换到列表模式 + } else { + if (!getWorkingText()) { + mWorkingNote.setWorkingText(mWorkingNote.getContent().replace(TAG_UNCHECKED + " ", + "")); + } + //若是获取到文本就改变其检查标记 + mNoteEditor.setText(getHighlightQueryResult(mWorkingNote.getContent(), mUserQuery)); + mEditTextList.setVisibility(View.GONE); + mNoteEditor.setVisibility(View.VISIBLE); + //修改文本编辑器的内容和可见性 + } + } + + /* + * 函数功能:设置勾选选项表并返回是否勾选的标记 + * 函数实现:如下注释 + */ + private boolean getWorkingText() { + boolean hasChecked = false; + //初始化check标记 + if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) { + // 若模式为CHECK_LIST + StringBuilder sb = new StringBuilder(); + //创建可变字符串 + for (int i = 0; i < mEditTextList.getChildCount(); i++) { + View view = mEditTextList.getChildAt(i); + //遍历所有子编辑框的视图 + NoteEditText edit = (NoteEditText) view.findViewById(R.id.et_edit_text); + if (!TextUtils.isEmpty(edit.getText())) { + //若文本不为空 + if (((CheckBox) view.findViewById(R.id.cb_edit_item)).isChecked()) { + //该选项框已打钩 + sb.append(TAG_CHECKED).append(" ").append(edit.getText()).append("\n"); + hasChecked = true; + //扩展字符串为已打钩并把标记置true + } else { + sb.append(TAG_UNCHECKED).append(" ").append(edit.getText()).append("\n"); + //扩展字符串添加未打钩 + } + } + } + mWorkingNote.setWorkingText(sb.toString()); + //利用编辑好的字符串设置运行便签的内容 + } else { + mWorkingNote.setWorkingText(mNoteEditor.getText().toString()); + // 若不是该模式直接用编辑器中的内容设置运行中标签的内容 + } + return hasChecked; + } + + /* + * 函数功能:保存便签 + * 函数实现:如下注释 + */ + private boolean saveNote() { + getWorkingText(); + boolean saved = mWorkingNote.saveNote(); + //运行 getWorkingText()之后保存 + if (saved) { + /** + * There are two modes from List view to edit view, open one note, + * create/edit a node. Opening node requires to the original + * position in the list when back from edit view, while creating a + * new node requires to the top of the list. This code + * {@link #RESULT_OK} is used to identify the create/edit state + */ + //如英文注释所说链接RESULT_OK是为了识别保存的2种情况,一是创建后保存,二是修改后保存 + setResult(RESULT_OK); + } + return saved; + } + + /* + * 函数功能:将便签发送至桌面 + * 函数实现:如下注释 + */ + private void sendToDesktop() { + /** + * Before send message to home, we should make sure that current + * editing note is exists in databases. So, for new note, firstly + * save it + */ + if (!mWorkingNote.existInDatabase()) { + saveNote(); + //若不存在数据也就是新的标签就保存起来先 + } + + if (mWorkingNote.getNoteId() > 0) { + //若是有内容 + Intent sender = new Intent(); + Intent shortcutIntent = new Intent(this, NoteEditActivity.class); + //建立发送到桌面的连接器 + shortcutIntent.setAction(Intent.ACTION_VIEW); + //链接为一个视图 + shortcutIntent.putExtra(Intent.EXTRA_UID, mWorkingNote.getNoteId()); + sender.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); + sender.putExtra(Intent.EXTRA_SHORTCUT_NAME, + makeShortcutIconTitle(mWorkingNote.getContent())); + sender.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, + Intent.ShortcutIconResource.fromContext(this, R.drawable.icon_app)); + sender.putExtra("duplicate", true); + //将便签的相关信息都添加到要发送的文件里 + sender.setAction("com.android.launcher.action.INSTALL_SHORTCUT"); + //设置sneder的行为是发送 + showToast(R.string.info_note_enter_desktop); + sendBroadcast(sender); + //显示到桌面 + } else { + /** + * There is the condition that user has input nothing (the note is + * not worthy saving), we have no note id, remind the user that he + * should input something + */ + Log.e(TAG, "Send to desktop error"); + showToast(R.string.error_note_empty_for_send_to_desktop); + //空便签直接报错 + } + } + + /* + * 函数功能:编辑小图标的标题 + * 函数实现:如下注释 + */ + private String makeShortcutIconTitle(String content) { + content = content.replace(TAG_CHECKED, ""); + content = content.replace(TAG_UNCHECKED, ""); + return content.length() > SHORTCUT_ICON_TITLE_MAX_LEN ? content.substring(0, + SHORTCUT_ICON_TITLE_MAX_LEN) : content; + //直接设置为content中的内容并返回,有勾选和未勾选2种 + } + + /* + * 函数功能:显示提示的视图 + * 函数实现:根据下标显示对应的提示 + */ + private void showToast(int resId) { + showToast(resId, Toast.LENGTH_SHORT); + } + + /* + * 函数功能:持续显示提示的视图 + * 函数实现:根据下标和持续的时间(duration)编辑提示视图并显示 + */ + private void showToast(int resId, int duration) { + Toast.makeText(this, resId, duration).show(); + } +} \ No newline at end of file diff --git a/tsrxns/java/net/micode/notes/ui/NoteEditText.java b/tsrxns/java/net/micode/notes/ui/NoteEditText.java new file mode 100644 index 0000000..890ebec --- /dev/null +++ b/tsrxns/java/net/micode/notes/ui/NoteEditText.java @@ -0,0 +1,278 @@ +package net.micode.notes.ui; + +import android.content.Context; +import android.graphics.Rect; +import android.text.Layout; +import android.text.Selection; +import android.text.Spanned; +import android.text.TextUtils; +import android.text.style.URLSpan; +import android.util.AttributeSet; +import android.util.Log; +import android.view.ContextMenu; +import android.view.KeyEvent; +import android.view.MenuItem; +import android.view.MenuItem.OnMenuItemClickListener; +import android.view.MotionEvent; +import android.widget.EditText; + +import net.micode.notes.R; + +import java.util.HashMap; +import java.util.Map; + +//继承edittext,设置便签设置文本框 +public class NoteEditText extends androidx.appcompat.widget.AppCompatEditText { + private static final String TAG = "NoteEditText"; + private int mIndex; + private int mSelectionStartBeforeDelete; + + private static final String SCHEME_TEL = "tel:" ; + private static final String SCHEME_HTTP = "http:" ; + private static final String SCHEME_EMAIL = "mailto:" ; + + ///建立一个字符和整数的hash表,用于链接电话,网站,还有邮箱 + private static final Map sSchemaActionResMap = new HashMap(); + static { + sSchemaActionResMap.put(SCHEME_TEL, R.string.note_link_tel); + sSchemaActionResMap.put(SCHEME_HTTP, R.string.note_link_web); + sSchemaActionResMap.put(SCHEME_EMAIL, R.string.note_link_email); + } + + /** + * Call by the {@link NoteEditActivity} to delete or add edit text + */ + //在NoteEditActivity中删除或添加文本的操作,可以看做是一个文本是否被变的标记,英文注释已说明的很清楚 + public interface OnTextViewChangeListener { + /** + * Delete current edit text when {@link KeyEvent#KEYCODE_DEL} happens + * and the text is null + */ + //处理删除按键时的操作 + void onEditTextDelete(int index, String text); + + /** + * Add edit text after current edit text when {@link KeyEvent#KEYCODE_ENTER} + * happen + */ + //处理进入按键时的操作 + void onEditTextEnter(int index, String text); + + /** + * Hide or show item option when text change + */ + void onTextChange(int index, boolean hasText); + } + + private OnTextViewChangeListener mOnTextViewChangeListener; + + //根据context设置文本 + public NoteEditText(Context context) { + super(context, null);//用super引用父类变量 + mIndex = 0; + } + + //设置当前光标 + public void setIndex(int index) { + mIndex = index; + } + + //初始化文本修改标记 + public void setOnTextViewChangeListener(OnTextViewChangeListener listener) { + mOnTextViewChangeListener = listener; + } + + //AttributeSet 百度了一下是自定义空控件属性,用于维护便签动态变化的属性 + //初始化便签 + public NoteEditText(Context context, AttributeSet attrs) { + super(context, attrs, android.R.attr.editTextStyle); + } + + // 根据defstyle自动初始化 + public NoteEditText(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + // TODO Auto-generated construct or stub + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + if (isInEditMode()) { + break; + } + int x = (int) event.getX(); + int y = (int) event.getY(); + x -= getTotalPaddingLeft(); + y -= getTotalPaddingTop(); + x += getScrollX(); + y += getScrollY(); + + Layout layout = getLayout(); + if (layout != null) { + int line = layout.getLineForVertical(y); + int off = layout.getOffsetForHorizontal(line, x); + Selection.setSelection(getText(), off); + } + break; + } + return super.onTouchEvent(event); + } + + @Override + /* + * 函数功能:处理用户按下一个键盘按键时会触发 的事件 + * 实现过程:如下注释 + */ + public boolean onKeyDown(int keyCode, KeyEvent event) { + switch (keyCode) { + //根据按键的 Unicode 编码值来处理 + case KeyEvent.KEYCODE_ENTER: + //“进入”按键 + // 检查是否是输入法的确认操作,如果是则不拦截 + if (mOnTextViewChangeListener != null) { + if ((event.getFlags() & KeyEvent.FLAG_EDITOR_ACTION) == 0 && !isInEditMode()) { + // 允许事件正常传递给父类 + return super.onKeyDown(keyCode, event); + } + } + break; + case KeyEvent.KEYCODE_DEL: + //“删除”按键 + mSelectionStartBeforeDelete = getSelectionStart(); + break; + default: + break; + } + //继续执行父类的其他点击事件 + return super.onKeyDown(keyCode, event); + } + + @Override + /* + * 函数功能:处理用户松开一个键盘按键时会触发 的事件 + * 实现方式:如下注释 + */ + public boolean onKeyUp(int keyCode, KeyEvent event) { + switch(keyCode) { + //根据按键的 Unicode 编码值来处理,有删除和进入2种操作 + case KeyEvent.KEYCODE_DEL: + if (mOnTextViewChangeListener != null) { + //若是被修改过 + if (0 == mSelectionStartBeforeDelete && mIndex != 0) { + //若之前有被修改并且文档不为空 + mOnTextViewChangeListener.onEditTextDelete(mIndex, getText().toString()); + //利用上文OnTextViewChangeListener对KEYCODE_DEL按键情况的删除函数进行删除 + return true; + } + } else { + Log.d(TAG, "OnTextViewChangeListener was not seted"); + //其他情况报错,文档的改动监听器并没有建立 + } + break; + case KeyEvent.KEYCODE_ENTER: + //同上也是分为监听器是否建立2种情况 + if (mOnTextViewChangeListener != null) { + // 检查是否是输入法的确认操作,如果是则不拦截 + // 同时检查是否有文本输入,避免拦截中文输入法选择候选词的操作 + if ((event.getFlags() & KeyEvent.FLAG_EDITOR_ACTION) == 0 && !isInEditMode() && event.getAction() == KeyEvent.ACTION_UP) { + // 只有当没有输入文本时才执行换行操作 + if (TextUtils.isEmpty(getText())) { + int selectionStart = getSelectionStart(); + //获取当前位置 + String text = getText().subSequence(selectionStart, length()).toString(); + //获取当前文本 + setText(getText().subSequence(0, selectionStart)); + //根据获取的文本设置当前文本 + mOnTextViewChangeListener.onEditTextEnter(mIndex + 1, text); + //当{@link KeyEvent#KEYCODE_ENTER}添加新文本 + return true; + } + } + } else { + Log.d(TAG, "OnTextViewChangeListener was not seted"); + //其他情况报错,文档的改动监听器并没有建立 + } + break; + default: + break; + } + //继续执行父类的其他按键弹起的事件 + return super.onKeyUp(keyCode, event); + } + + @Override + /* + * 函数功能:当焦点发生变化时,会自动调用该方法来处理焦点改变的事件 + * 实现方式:如下注释 + * 参数:focused表示触发该事件的View是否获得了焦点,当该控件获得焦点时,Focused等于true,否则等于false。 + direction表示焦点移动的方向,用数值表示 + Rect:表示在触发事件的View的坐标系中,前一个获得焦点的矩形区域,即表示焦点是从哪里来的。如果不可用则为null + */ + protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { + if (mOnTextViewChangeListener != null) { + //若监听器已经建立 + if (!focused && TextUtils.isEmpty(getText())) { + //获取到焦点并且文本不为空 + mOnTextViewChangeListener.onTextChange(mIndex, false); + //mOnTextViewChangeListener子函数,置false隐藏事件选项 + } else { + mOnTextViewChangeListener.onTextChange(mIndex, true); + //mOnTextViewChangeListener子函数,置true显示事件选项 + } + } + //继续执行父类的其他焦点变化的事件 + super.onFocusChanged(focused, direction, previouslyFocusedRect); + } + + @Override + /* + * 函数功能:生成上下文菜单 + * 函数实现:如下注释 + */ + protected void onCreateContextMenu(ContextMenu menu) { + if (getText() instanceof Spanned) { + //有文本存在 + int selStart = getSelectionStart(); + int selEnd = getSelectionEnd(); + //获取文本开始和结尾位置 + + int min = Math.min(selStart, selEnd); + int max = Math.max(selStart, selEnd); + //获取开始到结尾的最大值和最小值 + + final URLSpan[] urls = ((Spanned) getText()).getSpans(min, max, URLSpan.class); + //设置url的信息的范围值 + if (urls.length == 1) { + int defaultResId = 0; + for(String schema: sSchemaActionResMap.keySet()) { + //获取计划表中所有的key值 + if(urls[0].getURL().indexOf(schema) >= 0) { + //若url可以添加则在添加后将defaultResId置为key所映射的值 + defaultResId = sSchemaActionResMap.get(schema); + break; + } + } + + if (defaultResId == 0) { + //defaultResId == 0则说明url并没有添加任何东西,所以置为连接其他SchemaActionResMap的值 + defaultResId = R.string.note_link_other; + } + + //建立菜单 + menu.add(0, 0, 0, defaultResId).setOnMenuItemClickListener( + new OnMenuItemClickListener() { + //新建按键监听器 + public boolean onMenuItemClick(MenuItem item) { + // goto a new intent + urls[0].onClick(NoteEditText.this); + //根据相应的文本设置菜单的按键 + return true; + } + }); + } + } + //继续执行父类的其他菜单创建的事件 + super.onCreateContextMenu(menu); + } +} \ No newline at end of file diff --git a/tsrxns/java/net/micode/notes/ui/NoteItemData.java b/tsrxns/java/net/micode/notes/ui/NoteItemData.java new file mode 100644 index 0000000..9dde13c --- /dev/null +++ b/tsrxns/java/net/micode/notes/ui/NoteItemData.java @@ -0,0 +1,214 @@ +package net.micode.notes.ui; + +import android.content.Context; +import android.database.Cursor; +import android.text.TextUtils; + +import net.micode.notes.data.Contact; +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.tool.DataUtils; + + +public class NoteItemData { + static final String [] PROJECTION = new String [] { + NoteColumns.ID, + NoteColumns.ALERTED_DATE, + NoteColumns.BG_COLOR_ID, + NoteColumns.CREATED_DATE, + NoteColumns.HAS_ATTACHMENT, + NoteColumns.MODIFIED_DATE, + NoteColumns.NOTES_COUNT, + NoteColumns.PARENT_ID, + NoteColumns.SNIPPET, + NoteColumns.TYPE, + NoteColumns.WIDGET_ID, + NoteColumns.WIDGET_TYPE, + }; + //常量标记和数据就不一一标记了,意义翻译基本就知道 + private static final int ID_COLUMN = 0; + private static final int ALERTED_DATE_COLUMN = 1; + private static final int BG_COLOR_ID_COLUMN = 2; + private static final int CREATED_DATE_COLUMN = 3; + private static final int HAS_ATTACHMENT_COLUMN = 4; + private static final int MODIFIED_DATE_COLUMN = 5; + private static final int NOTES_COUNT_COLUMN = 6; + private static final int PARENT_ID_COLUMN = 7; + private static final int SNIPPET_COLUMN = 8; + private static final int TYPE_COLUMN = 9; + private static final int WIDGET_ID_COLUMN = 10; + private static final int WIDGET_TYPE_COLUMN = 11; + + private long mId; + private long mAlertDate; + private int mBgColorId; + private long mCreatedDate; + private boolean mHasAttachment; + private long mModifiedDate; + private int mNotesCount; + private long mParentId; + private String mSnippet; + private int mType; + private int mWidgetId; + private int mWidgetType; + private String mName; + private String mPhoneNumber; + + private boolean mIsLastItem; + private boolean mIsFirstItem; + private boolean mIsOnlyOneItem; + private boolean mIsOneNoteFollowingFolder; + private boolean mIsMultiNotesFollowingFolder; + //初始化NoteItemData,主要利用光标cursor获取的东西 + public NoteItemData(Context context, Cursor cursor) { + //getxxx为转换格式 + mId = cursor.getLong(ID_COLUMN); + mAlertDate = cursor.getLong(ALERTED_DATE_COLUMN); + mBgColorId = cursor.getInt(BG_COLOR_ID_COLUMN); + mCreatedDate = cursor.getLong(CREATED_DATE_COLUMN); + mHasAttachment = (cursor.getInt(HAS_ATTACHMENT_COLUMN) > 0) ? true : false; + mModifiedDate = cursor.getLong(MODIFIED_DATE_COLUMN); + mNotesCount = cursor.getInt(NOTES_COUNT_COLUMN); + mParentId = cursor.getLong(PARENT_ID_COLUMN); + mSnippet = cursor.getString(SNIPPET_COLUMN); + mSnippet = mSnippet.replace(NoteEditActivity.TAG_CHECKED, "").replace( + NoteEditActivity.TAG_UNCHECKED, ""); + mType = cursor.getInt(TYPE_COLUMN); + mWidgetId = cursor.getInt(WIDGET_ID_COLUMN); + mWidgetType = cursor.getInt(WIDGET_TYPE_COLUMN); + + //初始化电话号码的信息 + mPhoneNumber = ""; + if (mParentId == Notes.ID_CALL_RECORD_FOLDER) { + mPhoneNumber = DataUtils.getCallNumberByNoteId(context.getContentResolver(), mId); + if (!TextUtils.isEmpty(mPhoneNumber)) {//mphonenumber里有符合字符串,则用contart功能连接 + mName = Contact.getContact(context, mPhoneNumber); + if (mName == null) { + mName = mPhoneNumber; + } + } + } + + if (mName == null) { + mName = ""; + } + checkPostion(cursor); + } + ///根据鼠标的位置设置标记,和位置 + private void checkPostion(Cursor cursor) { + //初始化几个标记,cursor具体功能笔记中已提到,不一一叙述 + mIsLastItem = cursor.isLast() ? true : false; + mIsFirstItem = cursor.isFirst() ? true : false; + mIsOnlyOneItem = (cursor.getCount() == 1); + //初始化“多重子文件”“单一子文件”2个标记 + mIsMultiNotesFollowingFolder = false; + mIsOneNoteFollowingFolder = false; + + //主要是设置上诉2标记 + if (mType == Notes.TYPE_NOTE && !mIsFirstItem) {//若是note格式并且不是第一个元素 + int position = cursor.getPosition(); + if (cursor.moveToPrevious()) {//获取光标位置后看上一行 + if (cursor.getInt(TYPE_COLUMN) == Notes.TYPE_FOLDER + || cursor.getInt(TYPE_COLUMN) == Notes.TYPE_SYSTEM) {//若光标满足系统或note格式 + if (cursor.getCount() > (position + 1)) { + mIsMultiNotesFollowingFolder = true;//若是数据行数大于但前位置+1则设置成正确 + } else { + mIsOneNoteFollowingFolder = true;//否则单一文件夹标记为true + } + } + if (!cursor.moveToNext()) {//若不能再往下走则报错 + throw new IllegalStateException("cursor move to previous but can't move back"); + } + } + } + } + ///以下都是获取标记没什么好说的,不过倒数第二个需要说明下,很具体看下面 + public boolean isOneFollowingFolder() { + return mIsOneNoteFollowingFolder; + } + + public boolean isMultiFollowingFolder() { + return mIsMultiNotesFollowingFolder; + } + + public boolean isLast() { + return mIsLastItem; + } + + public String getCallName() { + return mName; + } + + public boolean isFirst() { + return mIsFirstItem; + } + + public boolean isSingle() { + return mIsOnlyOneItem; + } + + public long getId() { + return mId; + } + + public long getAlertDate() { + return mAlertDate; + } + + public long getCreatedDate() { + return mCreatedDate; + } + + public boolean hasAttachment() { + return mHasAttachment; + } + + public long getModifiedDate() { + return mModifiedDate; + } + + public int getBgColorId() { + return mBgColorId; + } + + public long getParentId() { + return mParentId; + } + + public int getNotesCount() { + return mNotesCount; + } + + public long getFolderId () { + return mParentId; + } + + public int getType() { + return mType; + } + + public int getWidgetType() { + return mWidgetType; + } + + public int getWidgetId() { + return mWidgetId; + } + + public String getSnippet() { + return mSnippet; + } + + public boolean hasAlert() { + return (mAlertDate > 0); + } + + //若数据父id为保存至文件夹模式的id且满足电话号码单元不为空,则isCallRecord为true + public boolean isCallRecord() { + return (mParentId == Notes.ID_CALL_RECORD_FOLDER && !TextUtils.isEmpty(mPhoneNumber)); + } + + public static int getNoteType(Cursor cursor) { + return cursor.getInt(TYPE_COLUMN); + } +} \ No newline at end of file diff --git a/tsrxns/java/net/micode/notes/ui/NotesListActivity.java b/tsrxns/java/net/micode/notes/ui/NotesListActivity.java new file mode 100644 index 0000000..0813597 --- /dev/null +++ b/tsrxns/java/net/micode/notes/ui/NotesListActivity.java @@ -0,0 +1,1002 @@ +package net.micode.notes.ui; + +import android.app.Activity; +import android.app.AlertDialog; +import android.app.Dialog; +import android.appwidget.AppWidgetManager; +import android.content.AsyncQueryHandler; +import android.content.ContentResolver; +import android.content.ContentValues; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.SharedPreferences; +import android.database.Cursor; +import android.os.AsyncTask; +import android.os.Bundle; +import android.preference.PreferenceManager; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.util.Log; +import android.view.ActionMode; +import android.view.ContextMenu; +import android.view.ContextMenu.ContextMenuInfo; +import android.view.Display; +import android.view.HapticFeedbackConstants; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; +import android.view.MenuItem.OnMenuItemClickListener; +import android.view.MotionEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.View.OnCreateContextMenuListener; +import android.view.View.OnTouchListener; +import android.view.inputmethod.InputMethodManager; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.AdapterView.OnItemLongClickListener; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ListView; +import android.widget.PopupMenu; +import android.widget.TextView; +import android.widget.Toast; + +import net.micode.notes.R; +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.gtask.remote.GTaskSyncService; +import net.micode.notes.model.WorkingNote; +import net.micode.notes.tool.BackupUtils; +import net.micode.notes.tool.DataUtils; +import net.micode.notes.tool.ResourceParser; +import net.micode.notes.ui.NotesListAdapter.AppWidgetAttribute; +import net.micode.notes.widget.NoteWidgetProvider_2x; +import net.micode.notes.widget.NoteWidgetProvider_4x; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.HashSet; +//主界面,一进入就是这个界面 +/** + * @author k + * + */ +public class NotesListActivity extends Activity implements OnClickListener, OnItemLongClickListener { //没有用特定的标签加注释。。。感觉没有什么用 + private static final int FOLDER_NOTE_LIST_QUERY_TOKEN = 0; + + private static final int FOLDER_LIST_QUERY_TOKEN = 1; + + private static final int MENU_FOLDER_DELETE = 0; + + private static final int MENU_FOLDER_VIEW = 1; + + private static final int MENU_FOLDER_CHANGE_NAME = 2; + + private static final String PREFERENCE_ADD_INTRODUCTION = "net.micode.notes.introduction"; //单行超过80个字符 + + private enum ListEditState { + NOTE_LIST, SUB_FOLDER, CALL_RECORD_FOLDER + }; + + private ListEditState mState; + + private BackgroundQueryHandler mBackgroundQueryHandler; + + private NotesListAdapter mNotesListAdapter; + + private ListView mNotesListView; + + private Button mAddNewNote; + + private boolean mDispatch; + + private int mOriginY; + + private int mDispatchY; + + private TextView mTitleBar; + + private long mCurrentFolderId; + + private ContentResolver mContentResolver; + + private ModeCallback mModeCallBack; + + private static final String TAG = "NotesListActivity"; + + public static final int NOTES_LISTVIEW_SCROLL_RATE = 30; + + private NoteItemData mFocusNoteDataItem; + + private static final String NORMAL_SELECTION = NoteColumns.PARENT_ID + "=?"; + + private static final String ROOT_FOLDER_SELECTION = "(" + NoteColumns.TYPE + "<>" + + Notes.TYPE_SYSTEM + " AND " + NoteColumns.PARENT_ID + "=?)" + " OR (" + + NoteColumns.ID + "=" + Notes.ID_CALL_RECORD_FOLDER + " AND " + + NoteColumns.NOTES_COUNT + ">0)"; + + private final static int REQUEST_CODE_OPEN_NODE = 102; + private final static int REQUEST_CODE_NEW_NODE = 103; + + @Override + // 创建类 + protected void onCreate(final Bundle savedInstanceState) { //需要是final类型 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。 + // final类不能被继承,没有子类,final类中的方法默认是final的。 + //final方法不能被子类的方法覆盖,但可以被继承。 + //final成员变量表示常量,只能被赋值一次,赋值后值不再改变。 + //final不能用于修饰构造方法。 + super.onCreate(savedInstanceState); // 调用父类的onCreate函数 + setContentView(R.layout.note_list); + initResources(); + + /** + * Insert an introduction when user firstly use this application + */ + setAppInfoFromRawRes(); + } + + @Override + // 返回一些子模块完成的数据交给主Activity处理 + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // 结果值 和 要求值 符合要求 + if (resultCode == RESULT_OK + && (requestCode == REQUEST_CODE_OPEN_NODE || requestCode == REQUEST_CODE_NEW_NODE)) { + mNotesListAdapter.changeCursor(null); + } else { + super.onActivityResult(requestCode, resultCode, data); + // 调用 Activity 的onActivityResult() + } + } + + private void setAppInfoFromRawRes() { + // Android平台给我们提供了一个SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数。 + SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); + if (!sp.getBoolean(PREFERENCE_ADD_INTRODUCTION, false)) { + StringBuilder sb = new StringBuilder(); + InputStream in = null; + try { + // 把资源文件放到应用程序的/raw/raw下,那么就可以在应用中使用getResources获取资源后, + // 以openRawResource方法(不带后缀的资源文件名)打开这个文件。 + in = getResources().openRawResource(R.raw.introduction); + if (in != null) { + InputStreamReader isr = new InputStreamReader(in); + BufferedReader br = new BufferedReader(isr); + char [] buf = new char[1024]; // 自行定义的数值,使用者不知道有什么意义 + int len = 0; + while ((len = br.read(buf)) > 0) { + sb.append(buf, 0, len); + } + } else { + Log.e(TAG, "Read introduction file error"); + return; + } + } catch (IOException e) { + e.printStackTrace(); + return; + } finally { + if (in != null) { + try { + in.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + + // 创建空的WorkingNote + WorkingNote note = WorkingNote.createEmptyNote(this, Notes.ID_ROOT_FOLDER, + AppWidgetManager.INVALID_APPWIDGET_ID, Notes.TYPE_WIDGET_INVALIDE, + ResourceParser.RED); + note.setWorkingText(sb.toString()); + if (note.saveNote()) { + // 更新保存note的信息 + sp.edit().putBoolean(PREFERENCE_ADD_INTRODUCTION, true).commit(); + } else { + Log.e(TAG, "Save introduction note error"); + return; + } + } + } + + @Override + protected void onStart() { + super.onStart(); + startAsyncNotesListQuery(); + } + + // 初始化资源 + private void initResources() { + mContentResolver = this.getContentResolver(); // 获取应用程序的数据,得到类似数据表的东西 + mBackgroundQueryHandler = new BackgroundQueryHandler(this.getContentResolver()); + mCurrentFolderId = Notes.ID_ROOT_FOLDER; + + // findViewById 是安卓编程的定位函数,主要是引用.R文件里的引用名 + mNotesListView = (ListView) findViewById(R.id.notes_list); // 绑定XML中的ListView,作为Item的容器 + mNotesListView.addFooterView(LayoutInflater.from(this).inflate(R.layout.note_list_footer, null), + null, false); + mNotesListView.setOnItemClickListener(new OnListItemClickListener()); + mNotesListView.setOnItemLongClickListener(this); + mNotesListAdapter = new NotesListAdapter(this); + mNotesListView.setAdapter(mNotesListAdapter); + mAddNewNote = (Button) findViewById(R.id.btn_new_note);// 在activity中要获取该按钮 + mAddNewNote.setOnClickListener(this); + mAddNewNote.setOnTouchListener(new NewNoteOnTouchListener()); + mDispatch = false; + mDispatchY = 0; + mOriginY = 0; + mTitleBar = (TextView) findViewById(R.id.tv_title_bar); + mState = ListEditState.NOTE_LIST; + mModeCallBack = new ModeCallback(); + } + + // 继承自ListView.MultiChoiceModeListener 和 OnMenuItemClickListener + private class ModeCallback implements ListView.MultiChoiceModeListener, OnMenuItemClickListener { + private DropdownMenu mDropDownMenu; + private ActionMode mActionMode; + private MenuItem mMoveMenu; + + public boolean onCreateActionMode(ActionMode mode, Menu menu) { + getMenuInflater().inflate(R.menu.note_list_options, menu); + menu.findItem(R.id.delete).setOnMenuItemClickListener(this); + mMoveMenu = menu.findItem(R.id.move); + if (mFocusNoteDataItem.getParentId() == Notes.ID_CALL_RECORD_FOLDER + || DataUtils.getUserFolderCount(mContentResolver) == 0) { + mMoveMenu.setVisible(false); + } else { + mMoveMenu.setVisible(true); + mMoveMenu.setOnMenuItemClickListener(this); + } + mActionMode = mode; + mNotesListAdapter.setChoiceMode(true); + mNotesListView.setLongClickable(false); + mAddNewNote.setVisibility(View.GONE); + + View customView = LayoutInflater.from(NotesListActivity.this).inflate( + R.layout.note_list_dropdown_menu, null); + mode.setCustomView(customView); + mDropDownMenu = new DropdownMenu(NotesListActivity.this, + (Button) customView.findViewById(R.id.selection_menu), + R.menu.note_list_dropdown); + mDropDownMenu.setOnDropdownMenuItemClickListener(new PopupMenu.OnMenuItemClickListener(){ + public boolean onMenuItemClick(final MenuItem item) { + mNotesListAdapter.selectAll(!mNotesListAdapter.isAllSelected()); + updateMenu(); + return true; + } + + }); + return true; + } + + // 更新菜单 + private void updateMenu() { + int selectedCount = mNotesListAdapter.getSelectedCount(); + // Update dropdown menu + String format = getResources().getString(R.string.menu_select_title, selectedCount); + mDropDownMenu.setTitle(format); // 更改标题 + MenuItem item = mDropDownMenu.findItem(R.id.action_select_all); + if (item != null) { + if (mNotesListAdapter.isAllSelected()) { + item.setChecked(true); + item.setTitle(R.string.menu_deselect_all); + } else { + item.setChecked(false); + item.setTitle(R.string.menu_select_all); + } + } + } + + public boolean onPrepareActionMode(ActionMode mode, Menu menu) { + // TODO Auto-generated method stub + return false; + } + + public boolean onActionItemClicked(ActionMode mode, MenuItem item) { + // TODO Auto-generated method stub + return false; + } + + public void onDestroyActionMode(ActionMode mode) { + mNotesListAdapter.setChoiceMode(false); + mNotesListView.setLongClickable(true); + mAddNewNote.setVisibility(View.VISIBLE); + } + + public void finishActionMode() { + mActionMode.finish(); + } + + public void onItemCheckedStateChanged(ActionMode mode, int position, long id, + boolean checked) { + mNotesListAdapter.setCheckedItem(position, checked); + updateMenu(); + } + + public boolean onMenuItemClick(MenuItem item) { + if (mNotesListAdapter.getSelectedCount() == 0) { + Toast.makeText(NotesListActivity.this, getString(R.string.menu_select_none), + Toast.LENGTH_SHORT).show(); + return true; + } + + switch (item.getItemId()) { + case R.id.delete: + AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); + builder.setTitle(getString(R.string.alert_title_delete)); + builder.setIcon(android.R.drawable.ic_dialog_alert); + builder.setMessage(getString(R.string.alert_message_delete_notes, + mNotesListAdapter.getSelectedCount())); + builder.setPositiveButton(android.R.string.ok, + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, + int which) { + batchDelete(); + } + }); + builder.setNegativeButton(android.R.string.cancel, null); + builder.show(); + break; + case R.id.move: + startQueryDestinationFolders(); + break; + default: + return false; + } + return true; + } + } + + private class NewNoteOnTouchListener implements OnTouchListener { + + public boolean onTouch(View v, MotionEvent event) { + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: { + Display display = getWindowManager().getDefaultDisplay(); + int screenHeight = display.getHeight(); + int newNoteViewHeight = mAddNewNote.getHeight(); + int start = screenHeight - newNoteViewHeight; + int eventY = start + (int) event.getY(); + /** + * Minus TitleBar's height + */ + if (mState == ListEditState.SUB_FOLDER) { + eventY -= mTitleBar.getHeight(); + start -= mTitleBar.getHeight(); + } + /** + * HACKME:When click the transparent part of "New Note" button, dispatch + * the event to the list view behind this button. The transparent part of + * "New Note" button could be expressed by formula y=-0.12x+94锛圲nit:pixel锛� + * and the line top of the button. The coordinate based on left of the "New + * Note" button. The 94 represents maximum height of the transparent part. + * Notice that, if the background of the button changes, the formula should + * also change. This is very bad, just for the UI designer's strong requirement. + */ + if (event.getY() < (event.getX() * (-0.12) + 94)) { + View view = mNotesListView.getChildAt(mNotesListView.getChildCount() - 1 + - mNotesListView.getFooterViewsCount()); + if (view != null && view.getBottom() > start + && (view.getTop() < (start + 94))) { + mOriginY = (int) event.getY(); + mDispatchY = eventY; + event.setLocation(event.getX(), mDispatchY); + mDispatch = true; + return mNotesListView.dispatchTouchEvent(event); + } + } + break; + } + case MotionEvent.ACTION_MOVE: { + if (mDispatch) { + mDispatchY += (int) event.getY() - mOriginY; + event.setLocation(event.getX(), mDispatchY); + return mNotesListView.dispatchTouchEvent(event); + } + break; + } + default: { + if (mDispatch) { + event.setLocation(event.getX(), mDispatchY); + mDispatch = false; + return mNotesListView.dispatchTouchEvent(event); + } + break; + } + } + return false; + } + + }; + + private void startAsyncNotesListQuery() { + String selection = (mCurrentFolderId == Notes.ID_ROOT_FOLDER) ? ROOT_FOLDER_SELECTION + : NORMAL_SELECTION; + mBackgroundQueryHandler.startQuery(FOLDER_NOTE_LIST_QUERY_TOKEN, null, + Notes.CONTENT_NOTE_URI, NoteItemData.PROJECTION, selection, new String[] { + String.valueOf(mCurrentFolderId) + }, NoteColumns.TYPE + " DESC," + NoteColumns.MODIFIED_DATE + " DESC"); + } + + private final class BackgroundQueryHandler extends AsyncQueryHandler { + public BackgroundQueryHandler(ContentResolver contentResolver) { + super(contentResolver); + } + + @Override + protected void onQueryComplete(int token, Object cookie, Cursor cursor) { + switch (token) { + case FOLDER_NOTE_LIST_QUERY_TOKEN: + mNotesListAdapter.changeCursor(cursor); + break; + case FOLDER_LIST_QUERY_TOKEN: + if (cursor != null && cursor.getCount() > 0) { + showFolderListMenu(cursor); + } else { + Log.e(TAG, "Query folder failed"); + } + break; + default: + return; + } + } + } + + private void showFolderListMenu(Cursor cursor) { + AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); + builder.setTitle(R.string.menu_title_select_folder); + final FoldersListAdapter adapter = new FoldersListAdapter(this, cursor); + builder.setAdapter(adapter, new DialogInterface.OnClickListener() { + + public void onClick(DialogInterface dialog, int which) { + DataUtils.batchMoveToFolder(mContentResolver, + mNotesListAdapter.getSelectedItemIds(), adapter.getItemId(which)); + Toast.makeText( + NotesListActivity.this, + getString(R.string.format_move_notes_to_folder, + mNotesListAdapter.getSelectedCount(), + adapter.getFolderName(NotesListActivity.this, which)), + Toast.LENGTH_SHORT).show(); + mModeCallBack.finishActionMode(); + } + }); + builder.show(); + } + + private void createNewNote() { + Intent intent = new Intent(this, NoteEditActivity.class); + intent.setAction(Intent.ACTION_INSERT_OR_EDIT); + intent.putExtra(Notes.INTENT_EXTRA_FOLDER_ID, mCurrentFolderId); + this.startActivityForResult(intent, REQUEST_CODE_NEW_NODE); + } + + private void batchDelete() { + new AsyncTask>() { + protected HashSet doInBackground(Void... unused) { + HashSet widgets = mNotesListAdapter.getSelectedWidget(); + if (!isSyncMode()) { + // if not synced, delete notes directly + if (DataUtils.batchDeleteNotes(mContentResolver, mNotesListAdapter + .getSelectedItemIds())) { + } else { + Log.e(TAG, "Delete notes error, should not happens"); + } + } else { + // in sync mode, we'll move the deleted note into the trash + // folder + if (!DataUtils.batchMoveToFolder(mContentResolver, mNotesListAdapter + .getSelectedItemIds(), Notes.ID_TRASH_FOLER)) { + Log.e(TAG, "Move notes to trash folder error, should not happens"); + } + } + return widgets; + } + + @Override + protected void onPostExecute(HashSet widgets) { + if (widgets != null) { + for (AppWidgetAttribute widget : widgets) { + if (widget.widgetId != AppWidgetManager.INVALID_APPWIDGET_ID + && widget.widgetType != Notes.TYPE_WIDGET_INVALIDE) { + updateWidget(widget.widgetId, widget.widgetType); + } + } + } + mModeCallBack.finishActionMode(); + } + }.execute(); + } + + private void deleteFolder(long folderId) { + if (folderId == Notes.ID_ROOT_FOLDER) { + Log.e(TAG, "Wrong folder id, should not happen " + folderId); + return; + } + + HashSet ids = new HashSet(); + ids.add(folderId); + HashSet widgets = DataUtils.getFolderNoteWidget(mContentResolver, + folderId); + if (!isSyncMode()) { + // if not synced, delete folder directly + DataUtils.batchDeleteNotes(mContentResolver, ids); + } else { + // in sync mode, we'll move the deleted folder into the trash folder + DataUtils.batchMoveToFolder(mContentResolver, ids, Notes.ID_TRASH_FOLER); + } + if (widgets != null) { + for (AppWidgetAttribute widget : widgets) { + if (widget.widgetId != AppWidgetManager.INVALID_APPWIDGET_ID + && widget.widgetType != Notes.TYPE_WIDGET_INVALIDE) { + updateWidget(widget.widgetId, widget.widgetType); + } + } + } + } + + private void openNode(NoteItemData data) { + Intent intent = new Intent(this, NoteEditActivity.class); + intent.setAction(Intent.ACTION_VIEW); + intent.putExtra(Intent.EXTRA_UID, data.getId()); + this.startActivityForResult(intent, REQUEST_CODE_OPEN_NODE); + } + + private void openFolder(NoteItemData data) { + mCurrentFolderId = data.getId(); + startAsyncNotesListQuery(); + if (data.getId() == Notes.ID_CALL_RECORD_FOLDER) { + mState = ListEditState.CALL_RECORD_FOLDER; + mAddNewNote.setVisibility(View.GONE); + } else { + mState = ListEditState.SUB_FOLDER; + } + if (data.getId() == Notes.ID_CALL_RECORD_FOLDER) { + mTitleBar.setText(R.string.call_record_folder_name); + } else { + mTitleBar.setText(data.getSnippet()); + } + mTitleBar.setVisibility(View.VISIBLE); + } + + public void onClick(View v) { + switch (v.getId()) { + case R.id.btn_new_note: + createNewNote(); + break; + default: + break; + } + } + + private void showSoftInput() { + InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + if (inputMethodManager != null) { + inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); + } + } + + private void hideSoftInput(View view) { + InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + + private void showCreateOrModifyFolderDialog(final boolean create) { + final AlertDialog.Builder builder = new AlertDialog.Builder(this); + View view = LayoutInflater.from(this).inflate(R.layout.dialog_edit_text, null); + final EditText etName = (EditText) view.findViewById(R.id.et_foler_name); + showSoftInput(); + if (!create) { + if (mFocusNoteDataItem != null) { + etName.setText(mFocusNoteDataItem.getSnippet()); + builder.setTitle(getString(R.string.menu_folder_change_name)); + } else { + Log.e(TAG, "The long click data item is null"); + return; + } + } else { + etName.setText(""); + builder.setTitle(this.getString(R.string.menu_create_folder)); + } + + builder.setPositiveButton(android.R.string.ok, null); + builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + hideSoftInput(etName); + } + }); + + final Dialog dialog = builder.setView(view).show(); + final Button positive = (Button)dialog.findViewById(android.R.id.button1); + positive.setOnClickListener(new OnClickListener() { + public void onClick(View v) { + hideSoftInput(etName); + String name = etName.getText().toString(); + if (DataUtils.checkVisibleFolderName(mContentResolver, name)) { + Toast.makeText(NotesListActivity.this, getString(R.string.folder_exist, name), + Toast.LENGTH_LONG).show(); + etName.setSelection(0, etName.length()); + return; + } + if (!create) { + if (!TextUtils.isEmpty(name)) { + ContentValues values = new ContentValues(); + values.put(NoteColumns.SNIPPET, name); + values.put(NoteColumns.TYPE, Notes.TYPE_FOLDER); + values.put(NoteColumns.LOCAL_MODIFIED, 1); + mContentResolver.update(Notes.CONTENT_NOTE_URI, values, NoteColumns.ID + + "=?", new String[] { + String.valueOf(mFocusNoteDataItem.getId()) + }); + } + } else if (!TextUtils.isEmpty(name)) { + ContentValues values = new ContentValues(); + values.put(NoteColumns.SNIPPET, name); + values.put(NoteColumns.TYPE, Notes.TYPE_FOLDER); + mContentResolver.insert(Notes.CONTENT_NOTE_URI, values); + } + dialog.dismiss(); + } + }); + + if (TextUtils.isEmpty(etName.getText())) { + positive.setEnabled(false); + } + /** + * When the name edit text is null, disable the positive button + */ + etName.addTextChangedListener(new TextWatcher() { + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + // TODO Auto-generated method stub + + } + + public void onTextChanged(CharSequence s, int start, int before, int count) { + if (TextUtils.isEmpty(etName.getText())) { + positive.setEnabled(false); + } else { + positive.setEnabled(true); + } + } + + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + + } + }); + } + + /* (non-Javadoc) + * @see android.app.Activity#onBackPressed() + * 按返回键时根据情况更改类中的数据 + */ + @Override + public void onBackPressed() { switch (mState) { + case SUB_FOLDER: + mCurrentFolderId = Notes.ID_ROOT_FOLDER; + mState = ListEditState.NOTE_LIST; + startAsyncNotesListQuery(); + mTitleBar.setVisibility(View.GONE); + break; + case CALL_RECORD_FOLDER: + mCurrentFolderId = Notes.ID_ROOT_FOLDER; + mState = ListEditState.NOTE_LIST; + mAddNewNote.setVisibility(View.VISIBLE); + mTitleBar.setVisibility(View.GONE); + startAsyncNotesListQuery(); + break; + case NOTE_LIST: + super.onBackPressed(); + break; + default: + break; + } + } + + /** + * @param appWidgetId + * @param appWidgetType + * 根据不同类型的widget更新插件,通过intent传送数据 + */ + private void updateWidget(int appWidgetId, int appWidgetType) { + Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE); + if (appWidgetType == Notes.TYPE_WIDGET_2X) { + intent.setClass(this, NoteWidgetProvider_2x.class); + } else if (appWidgetType == Notes.TYPE_WIDGET_4X) { + intent.setClass(this, NoteWidgetProvider_4x.class); + } else { + Log.e(TAG, "Unspported widget type"); + return; + } + + intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] { + appWidgetId + }); + + sendBroadcast(intent); + setResult(RESULT_OK, intent); + } + + /** + * 声明监听器,建立菜单,包括名称,视图,删除操作,更改名称操作; + */ + private final OnCreateContextMenuListener mFolderOnCreateContextMenuListener = new OnCreateContextMenuListener() { + public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { + if (mFocusNoteDataItem != null) { + menu.setHeaderTitle(mFocusNoteDataItem.getSnippet()); + menu.add(0, MENU_FOLDER_VIEW, 0, R.string.menu_folder_view); + menu.add(0, MENU_FOLDER_DELETE, 0, R.string.menu_folder_delete); + menu.add(0, MENU_FOLDER_CHANGE_NAME, 0, R.string.menu_folder_change_name); + } + } + }; + + @Override + public void onContextMenuClosed(Menu menu) { + if (mNotesListView != null) { + mNotesListView.setOnCreateContextMenuListener(null); + } + super.onContextMenuClosed(menu); + } + + /* (non-Javadoc) + * @see android.app.Activity#onContextItemSelected(android.view.MenuItem) + * 针对menu中不同的选择进行不同的处理,里面详细注释 + */ + @Override + public boolean onContextItemSelected(MenuItem item) { + if (mFocusNoteDataItem == null) { + Log.e(TAG, "The long click data item is null"); + return false; + } + switch (item.getItemId()) { + case MENU_FOLDER_VIEW: + openFolder(mFocusNoteDataItem);//打开对应文件 + break; + case MENU_FOLDER_DELETE: + AlertDialog.Builder builder = new AlertDialog.Builder(this);//设置确认是否删除的对话框 + builder.setTitle(getString(R.string.alert_title_delete)); + builder.setIcon(android.R.drawable.ic_dialog_alert); + builder.setMessage(getString(R.string.alert_message_delete_folder)); + builder.setPositiveButton(android.R.string.ok, + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + deleteFolder(mFocusNoteDataItem.getId()); + } + }); + builder.setNegativeButton(android.R.string.cancel, null); + builder.show();//显示对话框 + break; + case MENU_FOLDER_CHANGE_NAME: + showCreateOrModifyFolderDialog(false); + break; + default: + break; + } + + return true; + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + menu.clear(); + if (mState == ListEditState.NOTE_LIST) { + getMenuInflater().inflate(R.menu.note_list, menu); + // set sync or sync_cancel + menu.findItem(R.id.menu_sync).setTitle( + GTaskSyncService.isSyncing() ? R.string.menu_sync_cancel : R.string.menu_sync); + } else if (mState == ListEditState.SUB_FOLDER) { + getMenuInflater().inflate(R.menu.sub_folder, menu); + } else if (mState == ListEditState.CALL_RECORD_FOLDER) { + getMenuInflater().inflate(R.menu.call_record_folder, menu); + } else { + Log.e(TAG, "Wrong state:" + mState); + } + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.menu_new_folder: { + showCreateOrModifyFolderDialog(true); + break; + } + case R.id.menu_export_text: { + exportNoteToText(); + break; + } + case R.id.menu_sync: { + if (isSyncMode()) { + if (TextUtils.equals(item.getTitle(), getString(R.string.menu_sync))) { + GTaskSyncService.startSync(this); + } else { + GTaskSyncService.cancelSync(this); + } + } else { + startPreferenceActivity(); + } + break; + } + case R.id.menu_setting: { + startPreferenceActivity(); + break; + } + case R.id.menu_new_note: { + createNewNote(); + break; + } + case R.id.menu_search: + onSearchRequested(); + break; + default: + break; + } + return true; + } + + /* (non-Javadoc) + * @see android.app.Activity#onSearchRequested() + * 直接调用startSearch函数 + */ + @Override + public boolean onSearchRequested() { + startSearch(null, false, null /* appData */, false); + return true; + } + + /** + * 函数功能:实现将便签导出到文本功能 + */ + private void exportNoteToText() { + final BackupUtils backup = BackupUtils.getInstance(NotesListActivity.this); + new AsyncTask() { + + @Override + protected Integer doInBackground(Void... unused) { + return backup.exportToText(); + } + + @Override + protected void onPostExecute(Integer result) { + if (result == BackupUtils.STATE_SD_CARD_UNMOUONTED) { + AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); + builder.setTitle(NotesListActivity.this + .getString(R.string.failed_sdcard_export)); + builder.setMessage(NotesListActivity.this + .getString(R.string.error_sdcard_unmounted)); + builder.setPositiveButton(android.R.string.ok, null); + builder.show(); + } else if (result == BackupUtils.STATE_SUCCESS) { + AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); + builder.setTitle(NotesListActivity.this + .getString(R.string.success_sdcard_export)); + builder.setMessage(NotesListActivity.this.getString( + R.string.format_exported_file_location, backup + .getExportedTextFileName(), backup.getExportedTextFileDir())); + builder.setPositiveButton(android.R.string.ok, null); + builder.show(); + } else if (result == BackupUtils.STATE_SYSTEM_ERROR) { + AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); + builder.setTitle(NotesListActivity.this + .getString(R.string.failed_sdcard_export)); + builder.setMessage(NotesListActivity.this + .getString(R.string.error_sdcard_export)); + builder.setPositiveButton(android.R.string.ok, null); + builder.show(); + } + } + + }.execute(); + } + + /** + * @return + * 功能:判断是否正在同步 + */ + private boolean isSyncMode() { + return NotesPreferenceActivity.getSyncAccountName(this).trim().length() > 0; + } + + /** + * 功能:跳转到PreferenceActivity界面 + */ + private void startPreferenceActivity() { + Activity from = getParent() != null ? getParent() : this; + Intent intent = new Intent(from, NotesPreferenceActivity.class); + from.startActivityIfNeeded(intent, -1); + } + + /** + * @author k + * 函数功能:实现对便签列表项的点击事件(短按) + */ + private class OnListItemClickListener implements OnItemClickListener { + + public void onItemClick(AdapterView parent, View view, int position, long id) { + if (view instanceof NotesListItem) { + NoteItemData item = ((NotesListItem) view).getItemData(); + if (mNotesListAdapter.isInChoiceMode()) { + if (item.getType() == Notes.TYPE_NOTE) { + position = position - mNotesListView.getHeaderViewsCount(); + mModeCallBack.onItemCheckedStateChanged(null, position, id, + !mNotesListAdapter.isSelectedItem(position)); + } + return; + } + + switch (mState) { + case NOTE_LIST: + if (item.getType() == Notes.TYPE_FOLDER + || item.getType() == Notes.TYPE_SYSTEM) { + openFolder(item); + } else if (item.getType() == Notes.TYPE_NOTE) { + openNode(item); + } else { + Log.e(TAG, "Wrong note type in NOTE_LIST"); + } + break; + case SUB_FOLDER: + case CALL_RECORD_FOLDER: + if (item.getType() == Notes.TYPE_NOTE) { + openNode(item); + } else { + Log.e(TAG, "Wrong note type in SUB_FOLDER"); + } + break; + default: + break; + } + } + } + + } + + /** + * 查询目标文件 + */ + private void startQueryDestinationFolders() { + String selection = NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>? AND " + NoteColumns.ID + "<>?"; + selection = (mState == ListEditState.NOTE_LIST) ? selection: + "(" + selection + ") OR (" + NoteColumns.ID + "=" + Notes.ID_ROOT_FOLDER + ")"; + + mBackgroundQueryHandler.startQuery(FOLDER_LIST_QUERY_TOKEN, + null, + Notes.CONTENT_NOTE_URI, + FoldersListAdapter.PROJECTION, + selection, + new String[] { + String.valueOf(Notes.TYPE_FOLDER), + String.valueOf(Notes.ID_TRASH_FOLER), + String.valueOf(mCurrentFolderId) + }, + NoteColumns.MODIFIED_DATE + " DESC"); + } + + /* (non-Javadoc) + * @see android.widget.AdapterView.OnItemLongClickListener#onItemLongClick(android.widget.AdapterView, android.view.View, int, long) + * 长按某一项时进行的操作 + * 如果长按的是便签,则通过ActionMode菜单实现;如果长按的是文件夹,则通过ContextMenu菜单实现; + * 具体ActionMOde菜单和ContextMenu菜单的详细见精度笔记 + */ + public boolean onItemLongClick(AdapterView parent, View view, int position, long id) { + if (view instanceof NotesListItem) { + mFocusNoteDataItem = ((NotesListItem) view).getItemData(); + if (mFocusNoteDataItem.getType() == Notes.TYPE_NOTE && !mNotesListAdapter.isInChoiceMode()) { + if (mNotesListView.startActionMode(mModeCallBack) != null) { + mModeCallBack.onItemCheckedStateChanged(null, position, id, true); + mNotesListView.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); + } else { + Log.e(TAG, "startActionMode fails"); + } + } else if (mFocusNoteDataItem.getType() == Notes.TYPE_FOLDER) { + mNotesListView.setOnCreateContextMenuListener(mFolderOnCreateContextMenuListener); + } + } + return false; + } +} \ No newline at end of file diff --git a/tsrxns/java/net/micode/notes/ui/NotesListAdapter.java b/tsrxns/java/net/micode/notes/ui/NotesListAdapter.java new file mode 100644 index 0000000..b165769 --- /dev/null +++ b/tsrxns/java/net/micode/notes/ui/NotesListAdapter.java @@ -0,0 +1,257 @@ +package net.micode.notes.ui; + +import android.content.Context; +import android.database.Cursor; +import android.util.Log; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CursorAdapter; + + +import net.micode.notes.data.Notes; + +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; + + +/* + * 功能:直译为便签表连接器,继承了CursorAdapter,它为cursor和ListView提供了连接的桥梁。 + * 所以NotesListAdapter实现的是鼠标和编辑便签链接的桥梁 + */ +public class NotesListAdapter extends CursorAdapter { + private static final String TAG = "NotesListAdapter"; + private Context mContext; + private HashMap mSelectedIndex; + private int mNotesCount; //便签数 + private boolean mChoiceMode; //选择模式标记 + + /* + * 桌面widget的属性,包括编号和类型 + */ + public static class AppWidgetAttribute { + public int widgetId; + public int widgetType; + }; + + /* + * 函数功能:初始化便签链接器 + * 函数实现:根据传进来的内容设置相关变量 + */ + public NotesListAdapter(Context context) { + super(context, null); //父类对象置空 + mSelectedIndex = new HashMap(); //新建选项下标的hash表 + mContext = context; + mNotesCount = 0; + } + + @Override + /* + * 函数功能:新建一个视图来存储光标所指向的数据 + * 函数实现:使用兄弟类NotesListItem新建一个项目选项 + */ + public View newView(Context context, Cursor cursor, ViewGroup parent) { + return new NotesListItem(context); + } + + /* + * 函数功能:将已经存在的视图和鼠标指向的数据进行捆绑 + * 函数实现:如下注释 + */ + @Override + public void bindView(View view, Context context, Cursor cursor) { + if (view instanceof NotesListItem) { + //若view是NotesListItem的一个实例 + NoteItemData itemData = new NoteItemData(context, cursor); + ((NotesListItem) view).bind(context, itemData, mChoiceMode, + isSelectedItem(cursor.getPosition())); + //则新建一个项目选项并且用bind跟将view和鼠标,内容,便签数据捆绑在一起 + } + } + + /* + * 函数功能:设置勾选框 + * 函数实现:如下注释 + */ + public void setCheckedItem(final int position, final boolean checked) { + mSelectedIndex.put(position, checked); + //根据定位和是否勾选设置下标 + notifyDataSetChanged(); + //在修改后刷新activity + } + + /* + * 函数功能:判断单选按钮是否勾选 + */ + public boolean isInChoiceMode() { + return mChoiceMode; + } + + /* + * 函数功能:设置单项选项框 + * 函数实现:重置下标并且根据参数mode设置选项 + */ + public void setChoiceMode(boolean mode) { + mSelectedIndex.clear(); + mChoiceMode = mode; + } + + /* + * 函数功能:选择全部选项 + * 函数实现:如下注释 + */ + public void selectAll(boolean checked) { + Cursor cursor = getCursor(); + //获取光标位置 + for (int i = 0; i < getCount(); i++) { + if (cursor.moveToPosition(i)) { + if (NoteItemData.getNoteType(cursor) == Notes.TYPE_NOTE) { + setCheckedItem(i, checked); + } + } + } + //遍历所有光标可用的位置在判断为便签类型之后勾选单项框 + } + + /* + * 函数功能:建立选择项的下标列表 + * 函数实现:如下注释 + */ + public HashSet getSelectedItemIds() { + HashSet itemSet = new HashSet(); + //建立hash表 + for (Integer position : mSelectedIndex.keySet()) { + //遍历所有的关键 + if (mSelectedIndex.get(position) == true) { + //若光标位置可用 + Long id = getItemId(position); + if (id == Notes.ID_ROOT_FOLDER) { + //原文件不需要添加 + Log.d(TAG, "Wrong item id, should not happen"); + } else { + itemSet.add(id); + } + //则将id该下标假如选项集合中 + + } + } + + return itemSet; + } + + /* + * 函数功能:建立桌面Widget的选项表 + * 函数实现:如下注释 + */ + public HashSet getSelectedWidget() { + HashSet itemSet = new HashSet(); + for (Integer position : mSelectedIndex.keySet()) { + if (mSelectedIndex.get(position) == true) { + Cursor c = (Cursor) getItem(position); + //以上4句和getSelectedItemIds一样,不再重复 + if (c != null) { + //光标位置可用的话就建立新的Widget属性并编辑下标和类型,最后添加到选项集中 + AppWidgetAttribute widget = new AppWidgetAttribute(); + NoteItemData item = new NoteItemData(mContext, c); + widget.widgetId = item.getWidgetId(); + widget.widgetType = item.getWidgetType(); + itemSet.add(widget); + /** + * Don't close cursor here, only the adapter could close it + */ + } else { + Log.e(TAG, "Invalid cursor"); + return null; + } + } + } + return itemSet; + } + + /* + * 函数功能:获取选项个数 + * 函数实现:如下注释 + */ + public int getSelectedCount() { + Collection values = mSelectedIndex.values(); + //首先获取选项下标的值 + if (null == values) { + return 0; + } + Iterator iter = values.iterator(); + //初始化叠加器 + int count = 0; + while (iter.hasNext()) { + if (true == iter.next()) { + //若value值为真计数+1 + count++; + } + } + return count; + } + + /* + * 函数功能:判断是否全部选中 + * 函数实现:如下注释 + */ + public boolean isAllSelected() { + int checkedCount = getSelectedCount(); + return (checkedCount != 0 && checkedCount == mNotesCount); + //获取选项数看是否等于便签的个数 + } + + /* + * 函数功能:判断是否为选项表 + * 函数实现:通过传递的下标来确定 + */ + public boolean isSelectedItem(final int position) { + if (null == mSelectedIndex.get(position)) { + return false; + } + return mSelectedIndex.get(position); + } + + @Override + /* + * 函数功能:在activity内容发生局部变动的时候回调该函数计算便签的数量 + * 函数实现:如下注释 + */ + protected void onContentChanged() { + super.onContentChanged(); + //执行基类函数 + calcNotesCount(); + } + + @Override + /* + * 函数功能:在activity光标发生局部变动的时候回调该函数计算便签的数量 + */ + public void changeCursor(Cursor cursor) { + super.changeCursor(cursor); + //执行基类函数 + calcNotesCount(); + } + + /* + * 函数功能:计算便签数量 + * + */ + private void calcNotesCount() { + mNotesCount = 0; + for (int i = 0; i < getCount(); i++) { + //获取总数同时遍历 + Cursor c = (Cursor) getItem(i); + if (c != null) { + if (NoteItemData.getNoteType(c) == Notes.TYPE_NOTE) { + mNotesCount++; + //若该位置不为空并且文本类型为便签就+1 + } + } else { + Log.e(TAG, "Invalid cursor"); + return; + } + //否则报错 + } + } +} \ No newline at end of file diff --git a/tsrxns/java/net/micode/notes/ui/NotesListItem.java b/tsrxns/java/net/micode/notes/ui/NotesListItem.java new file mode 100644 index 0000000..fa8b3d2 --- /dev/null +++ b/tsrxns/java/net/micode/notes/ui/NotesListItem.java @@ -0,0 +1,116 @@ +package net.micode.notes.ui; + +import android.content.Context; +import android.text.format.DateUtils; +import android.view.View; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import net.micode.notes.R; +import net.micode.notes.data.Notes; +import net.micode.notes.tool.DataUtils; +import net.micode.notes.tool.ResourceParser.NoteItemBgResources; + + +//创建便签列表项目选项 +public class NotesListItem extends LinearLayout { + private ImageView mAlert;//闹钟图片 + private TextView mTitle; //标题 + private TextView mTime; //时间 + private TextView mCallName; // + private NoteItemData mItemData; //标签数据 + private CheckBox mCheckBox; //打钩框 + + /*初始化基本信息*/ + public NotesListItem(Context context) { + super(context); //super()它的主要作用是调整调用父类构造函数的顺序 + inflate(context, R.layout.note_item, this);//Inflate可用于将一个xml中定义的布局控件找出来,这里的xml是r。layout + //findViewById用于从contentView中查找指定ID的View,转换出来的形式根据需要而定; + mAlert = (ImageView) findViewById(R.id.iv_alert_icon); + mTitle = (TextView) findViewById(R.id.tv_title); + mTime = (TextView) findViewById(R.id.tv_time); + mCallName = (TextView) findViewById(R.id.tv_name); + mCheckBox = (CheckBox) findViewById(android.R.id.checkbox); + } + ///根据data的属性对各个控件的属性的控制,主要是可见性Visibility,内容setText,格式setTextAppearance + public void bind(Context context, NoteItemData data, boolean choiceMode, boolean checked) { + if (choiceMode && data.getType() == Notes.TYPE_NOTE) { + mCheckBox.setVisibility(View.VISIBLE); ///设置可见行为可见 + mCheckBox.setChecked(checked); ///格子打钩 + } else { + mCheckBox.setVisibility(View.GONE); + } + + mItemData = data; + ///设置控件属性,一共三种情况,由data的id和父id是否与保存到文件夹的id一致来决定 + if (data.getId() == Notes.ID_CALL_RECORD_FOLDER) { + mCallName.setVisibility(View.GONE); + mAlert.setVisibility(View.VISIBLE); + //设置该textview的style + mTitle.setTextAppearance(context, R.style.TextAppearancePrimaryItem); + //settext为设置内容 + mTitle.setText(context.getString(R.string.call_record_folder_name) + + context.getString(R.string.format_folder_files_count, data.getNotesCount())); + mAlert.setImageResource(R.drawable.call_record); + } else if (data.getParentId() == Notes.ID_CALL_RECORD_FOLDER) { + mCallName.setVisibility(View.VISIBLE); + mCallName.setText(data.getCallName()); + mTitle.setTextAppearance(context,R.style.TextAppearanceSecondaryItem); + mTitle.setText(DataUtils.getFormattedSnippet(data.getSnippet())); + ///关于闹钟的设置 + if (data.hasAlert()) { + mAlert.setImageResource(R.drawable.clock);//图片来源的设置 + mAlert.setVisibility(View.VISIBLE); + } else { + mAlert.setVisibility(View.GONE); + } + } else { + mCallName.setVisibility(View.GONE); + mTitle.setTextAppearance(context, R.style.TextAppearancePrimaryItem); + ///设置title格式 + if (data.getType() == Notes.TYPE_FOLDER) { + mTitle.setText(data.getSnippet() + + context.getString(R.string.format_folder_files_count, + data.getNotesCount())); + mAlert.setVisibility(View.GONE); + } else { + mTitle.setText(DataUtils.getFormattedSnippet(data.getSnippet())); + if (data.hasAlert()) { + mAlert.setImageResource(R.drawable.clock);///设置图片来源 + mAlert.setVisibility(View.VISIBLE); + } else { + mAlert.setVisibility(View.GONE); + } + } + } + ///设置内容,获取相关时间,从data里编辑的日期中获取 + mTime. setText(DateUtils.getRelativeTimeSpanString(data.getModifiedDate())); + + setBackground(data); + } + //根据data的文件属性来设置背景 + private void setBackground(NoteItemData data) { + int id = data.getBgColorId(); + //,若是note型文件,则4种情况,对于4种不同情况的背景来源 + if (data.getType() == Notes.TYPE_NOTE) { + //单个数据并且只有一个子文件夹 + if (data.isSingle() || data.isOneFollowingFolder()) { + setBackgroundResource(NoteItemBgResources.getNoteBgSingleRes(id)); + } else if (data.isLast()) {//是最后一个数据 + setBackgroundResource(NoteItemBgResources.getNoteBgLastRes(id)); + } else if (data.isFirst() || data.isMultiFollowingFolder()) {//是一个数据并有多个子文件夹 + setBackgroundResource(NoteItemBgResources.getNoteBgFirstRes(id)); + } else { + setBackgroundResource(NoteItemBgResources.getNoteBgNormalRes(id)); + } + } else { + //若不是note直接调用文件夹的背景来源 + setBackgroundResource(NoteItemBgResources.getFolderBgRes()); + } + } + public NoteItemData getItemData() { + return mItemData; + } +} \ No newline at end of file diff --git a/tsrxns/java/net/micode/notes/ui/NotesPreferenceActivity.java b/tsrxns/java/net/micode/notes/ui/NotesPreferenceActivity.java new file mode 100644 index 0000000..3a1a3de --- /dev/null +++ b/tsrxns/java/net/micode/notes/ui/NotesPreferenceActivity.java @@ -0,0 +1,516 @@ +package net.micode.notes.ui; + +import android.accounts.Account; +import android.accounts.AccountManager; +import android.annotation.SuppressLint; +import android.app.ActionBar; +import android.app.AlertDialog; +import android.content.BroadcastReceiver; +import android.content.ContentValues; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.preference.Preference; +import android.preference.Preference.OnPreferenceClickListener; +import android.preference.PreferenceActivity; +import android.preference.PreferenceCategory; +import android.text.TextUtils; +import android.text.format.DateFormat; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; +import android.widget.Toast; + +import net.micode.notes.R; +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.gtask.remote.GTaskSyncService; + +/* + *该类功能:NotesPreferenceActivity,在小米便签中主要实现的是对背景颜色和字体大小的数据储存。 + * 继承了PreferenceActivity主要功能为对系统信息和配置进行自动保存的Activity + */ +public class NotesPreferenceActivity extends PreferenceActivity { + public static final String PREFERENCE_NAME = "notes_preferences"; + //优先名 + public static final String PREFERENCE_SYNC_ACCOUNT_NAME = "pref_key_account_name"; + //同步账号 + public static final String PREFERENCE_LAST_SYNC_TIME = "pref_last_sync_time"; + //同步时间 + public static final String PREFERENCE_SET_BG_COLOR_KEY = "pref_key_bg_random_appear"; + + private static final String PREFERENCE_SYNC_ACCOUNT_KEY = "pref_sync_account_key"; + //同步密码 + private static final String AUTHORITIES_FILTER_KEY = "authorities"; + //本地密码 + private PreferenceCategory mAccountCategory; + //账户分组 + private GTaskReceiver mReceiver; + //同步任务接收器 + private Account[] mOriAccounts; + //账户 + private boolean mHasAddedAccount; + //账户的hash标记 + + @SuppressLint("UnspecifiedRegisterReceiverFlag") + @Override + /* + *函数功能:创建一个activity,在函数里要完成所有的正常静态设置 + *参数:Bundle icicle:存放了 activity 当前的状态 + *函数实现:如下注释 + */ + protected void onCreate(Bundle icicle) { + //先执行父类的创建函数 + super.onCreate(icicle); + + /* using the app icon for navigation */ + getActionBar().setDisplayHomeAsUpEnabled(true); + //给左上角图标的左边加上一个返回的图标 + + addPreferencesFromResource(R.xml.preferences); + //添加xml来源并显示 xml + mAccountCategory = (PreferenceCategory) findPreference(PREFERENCE_SYNC_ACCOUNT_KEY); + //根据同步账户关键码来初始化分组 + mReceiver = new GTaskReceiver(); + IntentFilter filter = new IntentFilter(); + filter.addAction(GTaskSyncService.GTASK_SERVICE_BROADCAST_NAME); + registerReceiver(mReceiver, filter); + //初始化同步组件 + + mOriAccounts = null; + View header = LayoutInflater.from(this).inflate(R.layout.settings_header, null); + //获取listvivew,ListView的作用:用于列出所有选择 + getListView().addHeaderView(header, null, true); + //在listview组件上方添加其他组件 + } + + @Override + /* + * 函数功能:activity交互功能的实现,用于接受用户的输入 + * 函数实现:如下注释 + */ + protected void onResume() { + //先执行父类 的交互实现 + super.onResume(); + + // need to set sync account automatically if user has added a new + // account + if (mHasAddedAccount) { + //若用户新加了账户则自动设置同步账户 + Account[] accounts = getGoogleAccounts(); + //获取google同步账户 + if (mOriAccounts != null && accounts.length > mOriAccounts.length) { + //若原账户不为空且当前账户有增加 + for (Account accountNew : accounts) { + boolean found = false; + for (Account accountOld : mOriAccounts) { + if (TextUtils.equals(accountOld.name, accountNew.name)) { + //更新账户 + found = true; + break; + } + } + if (!found) { + setSyncAccount(accountNew.name); + //若是没有找到旧的账户,那么同步账号中就只添加新账户 + break; + } + } + } + } + + refreshUI(); + //刷新标签界面 + } + + @Override + /* + * 函数功能:销毁一个activity + * 函数实现:如下注释 + */ + protected void onDestroy() { + if (mReceiver != null) { + unregisterReceiver(mReceiver); + //注销接收器 + } + super.onDestroy(); + //执行父类的销毁动作 + } + + /* + * 函数功能:重新设置账户信息 + * 函数实现:如下注释 + */ + private void loadAccountPreference() { + mAccountCategory.removeAll(); + //销毁所有的分组 + Preference accountPref = new Preference(this); + //建立首选项 + final String defaultAccount = getSyncAccountName(this); + accountPref.setTitle(getString(R.string.preferences_account_title)); + accountPref.setSummary(getString(R.string.preferences_account_summary)); + //设置首选项的大标题和小标题 + accountPref.setOnPreferenceClickListener(new OnPreferenceClickListener() { + public boolean onPreferenceClick(Preference preference) { + //建立监听器 + if (!GTaskSyncService.isSyncing()) { + if (TextUtils.isEmpty(defaultAccount)) { + // the first time to set account + //若是第一次建立账户显示选择账户提示对话框 + showSelectAccountAlertDialog(); + } else { + // if the account has already been set, we need to promp + // user about the risk + //若是已经建立则显示修改对话框并进行修改操作 + showChangeAccountConfirmAlertDialog(); + } + } else { + //若在没有同步的情况下,则在toast中显示不能修改 + Toast.makeText(NotesPreferenceActivity.this, + R.string.preferences_toast_cannot_change_account, Toast.LENGTH_SHORT) + .show(); + } + return true; + } + }); + + //根据新建首选项编辑新的账户分组 + mAccountCategory.addPreference(accountPref); + } + + /* + *函数功能:设置按键的状态和最后同步的时间 + *函数实现:如下注释 + */ + private void loadSyncButton() { + Button syncButton = (Button) findViewById(R.id.preference_sync_button); + TextView lastSyncTimeView = (TextView) findViewById(R.id.prefenerece_sync_status_textview); + //获取同步按钮控件和最终同步时间的的窗口 + // set button state + //设置按钮的状态 + if (GTaskSyncService.isSyncing()) { + //若是在同步状态下 + syncButton.setText(getString(R.string.preferences_button_sync_cancel)); + syncButton.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + GTaskSyncService.cancelSync(NotesPreferenceActivity.this); + } + }); + //设置按钮显示的文本为“取消同步”以及监听器 + } else { + syncButton.setText(getString(R.string.preferences_button_sync_immediately)); + syncButton.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + GTaskSyncService.startSync(NotesPreferenceActivity.this); + } + }); + //若是不同步则设置按钮显示的文本为“立即同步”以及对应监听器 + } + syncButton.setEnabled(!TextUtils.isEmpty(getSyncAccountName(this))); + //设置按键可用还是不可用 + + // set last sync time + // 设置最终同步时间 + if (GTaskSyncService.isSyncing()) { + //若是在同步的情况下 + lastSyncTimeView.setText(GTaskSyncService.getProgressString()); + lastSyncTimeView.setVisibility(View.VISIBLE); + // 根据当前同步服务器设置时间显示框的文本以及可见性 + } else { + //若是非同步情况 + long lastSyncTime = getLastSyncTime(this); + if (lastSyncTime != 0) { + lastSyncTimeView.setText(getString(R.string.preferences_last_sync_time, + DateFormat.format(getString(R.string.preferences_last_sync_time_format), + lastSyncTime))); + lastSyncTimeView.setVisibility(View.VISIBLE); + //则根据最后同步时间的信息来编辑时间显示框的文本内容和可见性 + } else { + //若时间为空直接设置为不可见状态 + lastSyncTimeView.setVisibility(View.GONE); + } + } + } + /* + *函数功能:刷新标签界面 + *函数实现:调用上文设置账号和设置按键两个函数来实现 + */ + private void refreshUI() { + loadAccountPreference(); + loadSyncButton(); + } + + /* + * 函数功能:显示账户选择的对话框并进行账户的设置 + * 函数实现:如下注释 + */ + private void showSelectAccountAlertDialog() { + AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this); + //创建一个新的对话框 + + View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null); + TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title); + titleTextView.setText(getString(R.string.preferences_dialog_select_account_title)); + TextView subtitleTextView = (TextView) titleView.findViewById(R.id.account_dialog_subtitle); + subtitleTextView.setText(getString(R.string.preferences_dialog_select_account_tips)); + //设置标题以及子标题的内容 + dialogBuilder.setCustomTitle(titleView); + dialogBuilder.setPositiveButton(null, null); + //设置对话框的自定义标题,建立一个YES的按钮 + Account[] accounts = getGoogleAccounts(); + String defAccount = getSyncAccountName(this); + //获取同步账户信息 + mOriAccounts = accounts; + mHasAddedAccount = false; + + if (accounts.length > 0) { + //若账户不为空 + CharSequence[] items = new CharSequence[accounts.length]; + final CharSequence[] itemMapping = items; + int checkedItem = -1; + int index = 0; + for (Account account : accounts) { + if (TextUtils.equals(account.name, defAccount)) { + checkedItem = index; + //在账户列表中查询到所需账户 + } + items[index++] = account.name; + } + dialogBuilder.setSingleChoiceItems(items, checkedItem, + //在对话框建立一个单选的复选框 + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + setSyncAccount(itemMapping[which].toString()); + dialog.dismiss(); + //取消对话框 + refreshUI(); + } + //设置点击后执行的事件,包括检录新同步账户和刷新标签界面 + }); + //建立对话框网络版的监听器 + } + + View addAccountView = LayoutInflater.from(this).inflate(R.layout.add_account_text, null); + dialogBuilder.setView(addAccountView); + //给新加账户对话框设置自定义样式 + + final AlertDialog dialog = dialogBuilder.show(); + //显示对话框 + addAccountView.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + mHasAddedAccount = true; + //将新加账户的hash置true + Intent intent = new Intent("android.settings.ADD_ACCOUNT_SETTINGS"); + //建立网络建立组件 + intent.putExtra(AUTHORITIES_FILTER_KEY, new String[] { + "gmail-ls" + }); + startActivityForResult(intent, -1); + //跳回上一个选项 + dialog.dismiss(); + } + }); + //建立新加账户对话框的监听器 + } + + /* + * 函数功能:显示账户选择对话框和相关账户操作 + * 函数实现:如下注释 + */ + private void showChangeAccountConfirmAlertDialog() { + AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this); + //创建一个新的对话框 + View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null); + TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title); + titleTextView.setText(getString(R.string.preferences_dialog_change_account_title, + getSyncAccountName(this))); + TextView subtitleTextView = (TextView) titleView.findViewById(R.id.account_dialog_subtitle); + subtitleTextView.setText(getString(R.string.preferences_dialog_change_account_warn_msg)); + //根据同步修改的账户信息设置标题以及子标题的内容 + dialogBuilder.setCustomTitle(titleView); + //设置对话框的自定义标题 + CharSequence[] menuItemArray = new CharSequence[] { + getString(R.string.preferences_menu_change_account), + getString(R.string.preferences_menu_remove_account), + getString(R.string.preferences_menu_cancel) + }; + //定义一些标记字符串 + dialogBuilder.setItems(menuItemArray, new DialogInterface.OnClickListener() { + //设置对话框要显示的一个list,用于显示几个命令时,即change,remove,cancel + public void onClick(DialogInterface dialog, int which) { + //按键功能,由which来决定 + if (which == 0) { + //进入账户选择对话框 + showSelectAccountAlertDialog(); + } else if (which == 1) { + //删除账户并且跟新便签界面 + removeSyncAccount(); + refreshUI(); + } + } + }); + dialogBuilder.show(); + //显示对话框 + } + + /* + *函数功能:获取谷歌账户 + *函数实现:通过账户管理器直接获取 + */ + private Account[] getGoogleAccounts() { + AccountManager accountManager = AccountManager.get(this); + return accountManager.getAccountsByType("com.google"); + } + + /* + * 函数功能:设置同步账户 + * 函数实现:如下注释: + */ + private void setSyncAccount(String account) { + if (!getSyncAccountName(this).equals(account)) { + //假如该账号不在同步账号列表中 + SharedPreferences settings = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE); + SharedPreferences.Editor editor = settings.edit(); + //编辑共享的首选项 + if (account != null) { + editor.putString(PREFERENCE_SYNC_ACCOUNT_NAME, account); + } else { + editor.putString(PREFERENCE_SYNC_ACCOUNT_NAME, ""); + } + //将该账号加入到首选项中 + + editor.commit(); + //提交修改的数据 + + + setLastSyncTime(this, 0); + //将最后同步时间清零 + + // clean up local gtask related info + new Thread(new Runnable() { + public void run() { + ContentValues values = new ContentValues(); + values.put(NoteColumns.GTASK_ID, ""); + values.put(NoteColumns.SYNC_ID, 0); + getContentResolver().update(Notes.CONTENT_NOTE_URI, values, null, null); + } + }).start(); + //重置当地同步任务的信息 + + Toast.makeText(NotesPreferenceActivity.this, + getString(R.string.preferences_toast_success_set_accout, account), + Toast.LENGTH_SHORT).show(); + //将toast的文本信息置为“设置账户成功”并显示出来 + } + } + /* + * 函数功能:删除同步账户 + * 函数实现:如下注释: + */ + private void removeSyncAccount() { + SharedPreferences settings = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE); + SharedPreferences.Editor editor = settings.edit(); + //设置共享首选项 + + if (settings.contains(PREFERENCE_SYNC_ACCOUNT_NAME)) { + editor.remove(PREFERENCE_SYNC_ACCOUNT_NAME); + //假如当前首选项中有账户就删除 + } + if (settings.contains(PREFERENCE_LAST_SYNC_TIME)) { + editor.remove(PREFERENCE_LAST_SYNC_TIME); + //删除当前首选项中有账户时间 + } + editor.commit(); + //提交更新后的数据 + + // clean up local gtask related info + new Thread(new Runnable() { + public void run() { + ContentValues values = new ContentValues(); + values.put(NoteColumns.GTASK_ID, ""); + values.put(NoteColumns.SYNC_ID, 0); + getContentResolver().update(Notes.CONTENT_NOTE_URI, values, null, null); + } + }).start(); + //重置当地同步任务的信息 + } + + /* + * 函数功能:获取同步账户名称 + * 函数实现:通过共享的首选项里的信息直接获取 + */ + public static String getSyncAccountName(Context context) { + SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, + Context.MODE_PRIVATE); + return settings.getString(PREFERENCE_SYNC_ACCOUNT_NAME, ""); + } + + /* + * 函数功能:设置最终同步的时间 + * 函数实现:如下注释 + */ + public static void setLastSyncTime(Context context, long time) { + SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, + Context.MODE_PRIVATE); + SharedPreferences.Editor editor = settings.edit(); + // 从共享首选项中找到相关账户并获取其编辑器 + editor.putLong(PREFERENCE_LAST_SYNC_TIME, time); + editor.commit(); + //编辑最终同步时间并提交更新 + } + /* + * 函数功能:获取最终同步时间 + * 函数实现:通过共享的首选项里的信息直接获取 + */ + public static long getLastSyncTime(Context context) { + SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, + Context.MODE_PRIVATE); + return settings.getLong(PREFERENCE_LAST_SYNC_TIME, 0); + } + + /* + * 函数功能:接受同步信息 + * 函数实现:继承BroadcastReceiver + */ + private class GTaskReceiver extends BroadcastReceiver { + + @Override + public void onReceive(Context context, Intent intent) { + refreshUI(); + if (intent.getBooleanExtra(GTaskSyncService.GTASK_SERVICE_BROADCAST_IS_SYNCING, false)) { + //获取随广播而来的Intent中的同步服务的数据 + TextView syncStatus = (TextView) findViewById(R.id.prefenerece_sync_status_textview); + syncStatus.setText(intent + .getStringExtra(GTaskSyncService.GTASK_SERVICE_BROADCAST_PROGRESS_MSG)); + //通过获取的数据在设置系统的状态 + } + + } + } + + /* + * 函数功能:处理菜单的选项 + * 函数实现:如下注释 + * 参数:MenuItem菜单选项 + */ + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + //根据选项的id选择,这里只有一个主页 + case android.R.id.home: + Intent intent = new Intent(this, NotesListActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + return true; + //在主页情况下在创建连接组件intent,发出清空的信号并开始一个相应的activity + default: + return false; + } + } +} + \ No newline at end of file diff --git a/tsrxns/java/net/micode/notes/widget/NoteWidgetProvider.java b/tsrxns/java/net/micode/notes/widget/NoteWidgetProvider.java new file mode 100644 index 0000000..4bae085 --- /dev/null +++ b/tsrxns/java/net/micode/notes/widget/NoteWidgetProvider.java @@ -0,0 +1,132 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.widget; //隶属于widget这个包中 +import android.app.PendingIntent; //在Android.app包中的,用于提供暂缓的服务,当某种条件达到时,就可以执行某些活动 +import android.appwidget.AppWidgetManager; //继承object类,更新appwidget状态,和获取安装appwidget提供信息,以及其它相关状态信息。 +import android.appwidget.AppWidgetProvider; //本质是广播作用,用来对widget进行更新 +import android.content.ContentValues; //此类用于存储ContentResolver 可以处理的一组值,是一些基本类型的值 +import android.content.Context; //可以理解为一个接口(抽象类),它提供了有关应用程序的全局信息。从它继承或者从它的直接或间接子类继承,那么继承的子类就可以拿到应用程序的全局信息。 +import android.content.Intent; //联系各个Activity的关键对象。告诉android该做什么 +import android.database.Cursor; //是数据库指针,用于查询并操作数据 +import android.util.Log; //更新删改等的日志文件 +import android.widget.RemoteViews; //它表示的是一个View结构,可以在其他进程中显示,小部件的旋转效果则是通过不断地更新RemoteViews来实现的 + +import net.micode.notes.R; +import net.micode.notes.data.Notes; //引入其他包中类 +import net.micode.notes.data.Notes.NoteColumns; //引入笔记换列的类 +import net.micode.notes.tool.ResourceParser; //引入工具类 +import net.micode.notes.ui.NoteEditActivity; //引入ui包中的编辑笔记类 +import net.micode.notes.ui.NotesListActivity; //引入ui包中的列表活动类 + +public abstract class NoteWidgetProvider extends AppWidgetProvider { //继承AppWidgetProvider的抽象类NoteWidgetProvider,可以给子类提供接口 + public static final String [] PROJECTION = new String [] { //最终静态字符串数组 + NoteColumns.ID, //笔记框ID号 + NoteColumns.BG_COLOR_ID, //笔记框颜色ID + NoteColumns.SNIPPET //一小段笔记框 + }; + + public static final int COLUMN_ID = 0; //最终静态笔记框ID号 + public static final int COLUMN_BG_COLOR_ID = 1; //最终静态笔记框颜色ID + public static final int COLUMN_SNIPPET = 2; //最终静态一小段笔记框 + + private static final String TAG = "NoteWidgetProvider"; //最终静态 TAG + + @Override //重写 + public void onDeleted(Context context, int[] appWidgetIds) { //方法,删除部件 + ContentValues values = new ContentValues(); //和Bundle类一样,键值对 + values.put(NoteColumns.WIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); //通过put来存放数据。大多是基础数据类型 + for (int i = 0; i < appWidgetIds.length; i++) { + context.getContentResolver().update(Notes.CONTENT_NOTE_URI, //根据长度批量修改数据,uri表名, 属性键值对,修改对象,修改内容 + values, + NoteColumns.WIDGET_ID + "=?", + new String[] { String.valueOf(appWidgetIds[i])}); + } + } + //操作数据库,查询操作 + private Cursor getNoteWidgetInfo(Context context, int widgetId) { //得到一些部件的信息和全局消息,返回类型为游标 + return context.getContentResolver().query(Notes.CONTENT_NOTE_URI, //查找数据,并返回含有数据信息的cursor对象。 + PROJECTION, //参数为 uri 查询表名,查询列名,属性,属性域值,排序 + NoteColumns.WIDGET_ID + "=? AND " + NoteColumns.PARENT_ID + "<>?", + new String[] { String.valueOf(widgetId), String.valueOf(Notes.ID_TRASH_FOLER) }, + null); + } + + protected void update(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { //更新部件 + update(context, appWidgetManager, appWidgetIds, false); + } + + private void update(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds, //隐私模式下更新相关部件 + boolean privacyMode) { + for (int i = 0; i < appWidgetIds.length; i++) { + if (appWidgetIds[i] != AppWidgetManager.INVALID_APPWIDGET_ID) { + int bgId = ResourceParser.getDefaultBgId(context); + String snippet = ""; + Intent intent = new Intent(context, NoteEditActivity.class); //意图,从context到NoteEditActivity类的意图 + intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); //设置标志,当栈顶为活动实例时,重用该实例,不用新建 + intent.putExtra(Notes.INTENT_EXTRA_WIDGET_ID, appWidgetIds[i]); //传递参数 + intent.putExtra(Notes.INTENT_EXTRA_WIDGET_TYPE, getWidgetType()); + + Cursor c = getNoteWidgetInfo(context, appWidgetIds[i]); //数据库光标,用于读取数据库 + if (c != null && c.moveToFirst()) { + if (c.getCount() > 1) { + Log.e(TAG, "Multiple message with same widget id:" + appWidgetIds[i]); //日志信息,打印错误 + c.close(); + return; + } + snippet = c.getString(COLUMN_SNIPPET); + bgId = c.getInt(COLUMN_BG_COLOR_ID); + intent.putExtra(Intent.EXTRA_UID, c.getLong(COLUMN_ID)); //传递参数 + intent.setAction(Intent.ACTION_VIEW); //隐式intent,设置意图,参数为向用户展示意图。 + } else { + snippet = context.getResources().getString(R.string.widget_havenot_content); + intent.setAction(Intent.ACTION_INSERT_OR_EDIT); //隐式intent,设置联系人 + } + + if (c != null) { //关闭 + c.close(); + } + + RemoteViews rv = new RemoteViews(context.getPackageName(), getLayoutId()); //布局文件layout的远程视图 + rv.setImageViewResource(R.id.widget_bg_image, getBgResourceId(bgId)); //设置图像资源,从布局文件layout中找到ID + intent.putExtra(Notes.INTENT_EXTRA_BACKGROUND_ID, bgId); //产生待定意图 + /** + * Generate the pending intent to start host for the widget + */ + PendingIntent pendingIntent = null; //待定意图,等待触发时机 + if (privacyMode) { //隐私模式 + rv.setTextViewText(R.id.widget_text, //设置视图文本 + context.getString(R.string.widget_under_visit_mode)); + pendingIntent = PendingIntent.getActivity(context, appWidgetIds[i], new Intent( //开始意图启动Activity + context, NotesListActivity.class), PendingIntent.FLAG_UPDATE_CURRENT); //上下文,请求码,跳转对象, + } else { //FLAG_UPDATE_CURRENT当前描述的PendingIntent如果已经存在,那么它们都会被更新,即它们的Intent中的Extras会被替换成最新的 + rv.setTextViewText(R.id.widget_text, snippet); + pendingIntent = PendingIntent.getActivity(context, appWidgetIds[i], intent, //先前的意图 + PendingIntent.FLAG_UPDATE_CURRENT); + } //FLAG_UPDATE_CURRENT当前描述的PendingIntent如果已经存在,那么它们都会被更新,即它们的Intent中的Extras会被替换成最新的 + + rv.setOnClickPendingIntent(R.id.widget_text, pendingIntent); //启动点击待定意图 + appWidgetManager.updateAppWidget(appWidgetIds[i], rv); //更新部件 + } + } + } + + protected abstract int getBgResourceId(int bgId); //抽象类获取Bg资源ID + + protected abstract int getLayoutId(); //抽象方法获取布局ID + + protected abstract int getWidgetType(); //获取部件的种类 +} diff --git a/tsrxns/java/net/micode/notes/widget/NoteWidgetProvider_2x.java b/tsrxns/java/net/micode/notes/widget/NoteWidgetProvider_2x.java new file mode 100644 index 0000000..2ddd97f --- /dev/null +++ b/tsrxns/java/net/micode/notes/widget/NoteWidgetProvider_2x.java @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.widget; + +import android.appwidget.AppWidgetManager; +import android.content.Context; + +import net.micode.notes.R; +import net.micode.notes.data.Notes; +import net.micode.notes.tool.ResourceParser; + +//二倍部件 +public class NoteWidgetProvider_2x extends NoteWidgetProvider { + @Override //更新 + public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { + super.update(context, appWidgetManager, appWidgetIds); + } + + @Override //获取xml中的二倍部件id + protected int getLayoutId() { + return R.layout.widget_2x; + } + + @Override //获取资源id + protected int getBgResourceId(int bgId) { + return ResourceParser.WidgetBgResources.getWidget2xBgResource(bgId); + } + + @Override //获取二倍部件种类 + protected int getWidgetType() { + return Notes.TYPE_WIDGET_2X; + } +} diff --git a/tsrxns/java/net/micode/notes/widget/NoteWidgetProvider_4x.java b/tsrxns/java/net/micode/notes/widget/NoteWidgetProvider_4x.java new file mode 100644 index 0000000..8156006 --- /dev/null +++ b/tsrxns/java/net/micode/notes/widget/NoteWidgetProvider_4x.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.widget; + +import android.appwidget.AppWidgetManager; +import android.content.Context; + +import net.micode.notes.R; +import net.micode.notes.data.Notes; +import net.micode.notes.tool.ResourceParser; + +//四倍部件 +public class NoteWidgetProvider_4x extends NoteWidgetProvider { + @Override //更新部件 + public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { + super.update(context, appWidgetManager, appWidgetIds); + } + //获取四倍部件id + protected int getLayoutId() { + return R.layout.widget_4x; + } + + @Override //获取xml资源id + protected int getBgResourceId(int bgId) { + return ResourceParser.WidgetBgResources.getWidget4xBgResource(bgId); + } + + @Override //获取四倍部件种类 + protected int getWidgetType() { + return Notes.TYPE_WIDGET_4X; + } +} diff --git a/tsrxns/res/color/primary_text_dark.xml b/tsrxns/res/color/primary_text_dark.xml new file mode 100644 index 0000000..7c85459 --- /dev/null +++ b/tsrxns/res/color/primary_text_dark.xml @@ -0,0 +1,22 @@ + + + + + + + + + \ No newline at end of file diff --git a/tsrxns/res/color/secondary_text_dark.xml b/tsrxns/res/color/secondary_text_dark.xml new file mode 100644 index 0000000..c1c2384 --- /dev/null +++ b/tsrxns/res/color/secondary_text_dark.xml @@ -0,0 +1,20 @@ + + + + + + + \ No newline at end of file diff --git a/tsrxns/res/drawable-hdpi/bg_btn_set_color.png b/tsrxns/res/drawable-hdpi/bg_btn_set_color.png new file mode 100644 index 0000000000000000000000000000000000000000..5eb5d44f561b5484eb094e18159ac10e0a32b53d GIT binary patch literal 3588 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 QZ~y=R07*qoM6N<$g4u_m#{d8T literal 0 HcmV?d00001 diff --git a/tsrxns/res/drawable-hdpi/dropdown_icon.9.png b/tsrxns/res/drawable-hdpi/dropdown_icon.9.png new file mode 100644 index 0000000000000000000000000000000000000000..55250257a0cd618f2dd365cfa27a38d323c7975b GIT binary patch literal 443 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 literal 0 HcmV?d00001 diff --git a/tsrxns/res/drawable-hdpi/edit_red.9.png b/tsrxns/res/drawable-hdpi/edit_red.9.png new file mode 100644 index 0000000000000000000000000000000000000000..bae944a5f822df5d030a91466d439b5a7f7259e3 GIT binary patch literal 3458 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 Glm7#CUYk+? literal 0 HcmV?d00001 diff --git a/tsrxns/res/drawable-hdpi/edit_title_blue.9.png b/tsrxns/res/drawable-hdpi/edit_title_blue.9.png new file mode 100644 index 0000000000000000000000000000000000000000..96e60925b9ddf7115029b6c3a5eab53ab509b0d4 GIT binary patch literal 5100 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 literal 0 HcmV?d00001 diff --git a/tsrxns/res/drawable-hdpi/edit_title_yellow.9.png b/tsrxns/res/drawable-hdpi/edit_title_yellow.9.png new file mode 100644 index 0000000000000000000000000000000000000000..bf8f580aaf01a744d9e7ad6b1464883eb2ed2b60 GIT binary patch literal 6000 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 literal 0 HcmV?d00001 diff --git a/tsrxns/res/drawable-hdpi/edit_white.9.png b/tsrxns/res/drawable-hdpi/edit_white.9.png new file mode 100644 index 0000000000000000000000000000000000000000..918f7a6b19dbddf940ff3e75b9558779ef570d57 GIT binary patch literal 3441 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 literal 0 HcmV?d00001 diff --git a/tsrxns/res/drawable-hdpi/edit_yellow.9.png b/tsrxns/res/drawable-hdpi/edit_yellow.9.png new file mode 100644 index 0000000000000000000000000000000000000000..10cb64213f33586622830edd55bf8ed6349fca16 GIT binary patch literal 3634 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 literal 0 HcmV?d00001 diff --git a/tsrxns/res/drawable-hdpi/font_large.png b/tsrxns/res/drawable-hdpi/font_large.png new file mode 100644 index 0000000000000000000000000000000000000000..78cf2e6fcc38567b27f1fba2d5518eb3b71b2682 GIT binary patch literal 3161 zcmV-f45ssmP)KLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C z0ftFLK~#9!?3J-f!%!54|0Cj%F-UOERw~KfIyse)7wGEj(y4I~H;2B1-P#9;(8(%= zPNG=p>L4gMG=)N;v>?Z&kr0#grj546`@@BB&P~4j_ne#%Gh-dv!I~t&5-ho3DFM&Wx5!x#nkxUSoa+L!1U00E$K zx%}2>G&%rYi0H#l>bibD-}9~UcswPd=G+-<+g5GcHZ99KYPDJiqBSN>)27vG^@fPL zL1^&BB34jC0JpVTt*t1^XGA`_xk{zdt7)1~tJXE2&)-{?^)Bo;HjM*LX6S?1{t{zI~c8M?@z8j$_hoX1>Y{ zOhktO&Qcn>Waj=#HD=}kfa{dtL8eEYrM?CLKhmjg8Qgx+00000NkvXXu0mjfG3g3z literal 0 HcmV?d00001 diff --git a/tsrxns/res/drawable-hdpi/font_normal.png b/tsrxns/res/drawable-hdpi/font_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..9de7ced77ee2bd01542f6853b52f05e9301a81e5 GIT binary patch literal 3097 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 literal 0 HcmV?d00001 diff --git a/tsrxns/res/drawable-hdpi/font_small.png b/tsrxns/res/drawable-hdpi/font_small.png new file mode 100644 index 0000000000000000000000000000000000000000..d3ff104884a11386b10830b13b34e430e1b22a45 GIT binary patch literal 3099 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 literal 0 HcmV?d00001 diff --git a/tsrxns/res/drawable-hdpi/font_super.png b/tsrxns/res/drawable-hdpi/font_super.png new file mode 100644 index 0000000000000000000000000000000000000000..85b13a1d31218ac8e264808e743f14cdfaada1ec GIT binary patch literal 3188 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 literal 0 HcmV?d00001 diff --git a/tsrxns/res/drawable-hdpi/list_background.png b/tsrxns/res/drawable-hdpi/list_background.png new file mode 100644 index 0000000000000000000000000000000000000000..087e1f97a35a36bd5c168d62996e54573446c2d9 GIT binary patch literal 567323 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

bugsGA_N!+86-i*}5>zZ*_* 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 z

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

K~e=Xj^!m==^?uA2#d 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

plp!9Ko0*47^YF?b4}}i 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 z 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

XkNud$|rS*`LI7vgK=*tU3ARJEPi<$PE2 zkbqK2f*TXcOM%kXdH$AP?ntSC+^e3Pu)yWDMoCAFoDl#h`;4E_ySw$-TN(L#jXW2M zLJcR!$_i*{24f->L zXLmEGfxbSX%r=rss0;hd3Z+p>8pyvIw~4fe|L`{9(22j)TjGSZYlydIrA$^#-H##! zKw?=COpSJXtzuA_z7)|NcT!?v4ge@nfm^GdC?_;HWv#|k%256N8<(U@RFh;TW9h>$ z8%cFeG!#SewpB6DjCq03GnJPn;ZP31ePLY9e3*7`iqblZ6_KCtg<;hMBlp>5%>?*t zR%HXM+@wo%8y5Zaaml!k)+2^pH)G{|XPP#{B_*IhOPdVC4KQq__-{<)L>HAhFA3x~BeO7aBx%m=Ov!p__NXxq6!xg=-`35LlsPAreal8j2! z)JY`u?R*O=u0~hRq#vMeCnN$1EmlroWru%T^F`b~)!j>Lcor#;Nf7Z4_Mh#J zAiQ`t>c_)ULz=Rw_`xf^#n_MFg4ouD5%c`Q-cZGdvE!(^o^3plHVZ5y>j9o7GdngzJ7JIT3T?Oa*n%^=_i<~@wVI`;b#(=GNDZlg@jBY_em;M(O$EMVp|_(+efw%YwF(-egT9^e`(0zPk2 z)rzQEB>{u@bLF#3(5e#1iN?_O@&MDM@({0QNMy}BA9Q?X)QM~Effb(bI1mQuHM++= zpOSM8Ayy~Sviz$1es?WIw}pT5t*el>BxBlhqA{!2}=>3v0rP}Z8B7N)p-Fmp>Te1 z@=#2-sUQphs@vDm9j1vutd@Jz#e_u7V3>y&6p_8GwvjhE9_KC%WDDa|?98f}uPKku z7W_(AfmG>*RZ!@Y{-b(&{F2h|&XTd00s_x}&knYNZg!pGxGl`@p*^0xv#sy&9Q-&L z$cRq)Y-WA`RUAeMF>QT+x^EyG4%34bjqtdeSXrLP2t*=`JxsAr zI5>o@WdMWJJV6d~Ds?)-nHFj2(%p?I6e_;`{85{Vu(4T#rCq9q7AGe(^tEjEyb6|% z%HpNCkIR$S+Zg!#`lMU)G;b4gY!+_PPorYNdIYVTx=CwJJ1^x?9pDdng51JMfc#A~ ztU+y$(`ZhLPa!5vB~OXTe1OM8&q^yyvFSlk1D!9PrU!f7ZDpOss3@Ki_r2U5M_zll zW#-EPF-mq+?<9Bd%WMQO?vDJG=SGw6%pdTr;2yE`t7ry-XzBbrv4(iGZv=XlHJ6nUQZ*@2rQ>ZE9j|2fX;CfHEo znYXQvJ1ZqzS*jn*n{y znWiIF=a9pG0<)X0J%7lA6CjV3l)Z8nQ*-+l7sO=!XKvWzY`8VB3Glyd^XOw92C}XI zqhe7b7&C@o(t>+2vJz97j4$#xf1@HH?7jnU5)P}6{SO`#J+j`swAXc^Tz3ON4Q-!B zpnY#gt0^?Xv|)G8TW!t@Bb@-UH<2?3`eV+<0w*vYO8&+H^4o82oTI5=1zsgi7Lg}H za$krtLpd>|Y=;m5_pwU@2siq4nYp?!8piY8#ejxN7$1Rgt8GaYHay#$w)x!T;(zSo z%y_oCY>Dc%h-z&jvWns5?mCHGcTrL5opxrJ5R?_m^0c;V-=F6)@40z7{TK{UW@jL` zx)Tu+&R@OmjMy~2CXqZc)bTOFYyVtBwC

v16tv1~dCNXheHF>5(*JP`az`0m`!I z_=tom@xE%kP0l2etoJ*PUyJ@Nh47&N@+EtKD zN#V+_23(2ktAZ$1PY=BXc`($$;NGI#k&h}^qS|yu{p0fTalsG8neqt-nhjU}G zJ1^=){o2iNG>2mMX}1q6AsnT*q)LEw7z(I>uIY2+JD;5E0zf!sS+-np~89Q&@_e2!dhF^#$7CCplW%$EQCwuzrz+UT?aR^}mTv2vU`f z0gZae)cdEbd)OtpAFvN<-%;leB67z;0x~l7$QxYDtmjuav|#@04L^0#?|$n=^Zar_ z>fFs;U39S$es41<<7My7yLsMee?eKkI53VS5W z^aBJ-zpCbF=;Pj$MEbOI{&6}rHFUtQapLJj4?x zK`J&4lRQa{5(s7n_;caJKKePQG$hqhdH9~DuYG%A95G!&{%8k*7v6npZVKj*_k_B6 z4u_S85!f0%D<=7a48-pjSn1Ljr>PB>gtFC5PcBhEpYKRX7$B4WMn&MAdcKyV=!@EJ?tCpcTEu-RS_<#%Kj&=M8J1y5R7U8;or(fOfn zVSm10NoS=aGs|3|0}k=(S};dm1K3P2zMMI!6w<7ctYMQn^XpM=(yc4KPlP7dkn&zv z%R`;nGxt8s3JSq?A2N?d|9>G)i`!4N6Ak5*4?ycQUxD2Yvw3K}7=Td}!>HZn%&

9_A8zHEWLbtF0Xl>N9pbL&;1AH zC`XA{GRpxrwvL)1;n_!$$NjMTw;A&4I11ZKvytCj#5Z>ri9NIYN7-c$%{W;}h5zt( z*L!nk)Pd6t7?*(Jt3n4{+);S3JYHm5>AJk@2z~djFuH?C;$8FM5f*d-#Tt)vEmHXcnVVo-J*5uGxKuaMM+*;`mV*Z7Lv}JJycY9UsW5|xCo>z zoVEX!?j;l&2&D_z5;?40ldB1BSrq!CiO1s>y$eH08tqt1);OTm;fs^b38L|hPv22+ zn<3dv>}u_hRG>k2$?nZbtcgDs#P*vZ zfm_d+6DnLxQZB0-g0KXUCQ2?|>{EQ;Mkdf7GNVn1V5{n~0sqTv$yF3Pvt?M^j4_*i)`f$VK&4KSMhaZlRK;e^sgS zr%8wkGF+1EFJjjb$DFBh(W`!D;#idZWsRVD&@!(ADevf3e_@>Y?FV@Qz6 zSOND7S71ESYu{r%2qyJB{+Gr9R3+5b5*qxWRsJ0=Z=VqN+Fp>Am=|-GCm(Xw;TQ5f zLlQc*D*FSLgm_jv^gEyd%_q-UKE`XKxd~yfv(G3eaEkEoB7Xq( z6Qv6+b(3nUxqLSo5ufLakN=}*<@i^RVw@MG8*VBgm8RTA zul+70$K1J+Pku;phP`x~>*zN}Gih-h(s!Bh=l1{Y>&`n%v z+)&S7>KcISK9HMey)VwrTn=x_xoQ6$y|IHN1O@s!6Lz~>v)|z{xK&H8X9sDW@2avUuKPEl z?N_a>6XzXW>(5egt6p{TM+-16D4lPSWw9|}CY_%hZi;P8lZ?MVQ2QUQW6W_fy1INc ze0J?g+Aq`KWKD=;-IMn8`k|!{HhfQTFw2liT`JgU@V*lxtqB|+jGPiDVrIo3Y9%Jw zrw8hik0jE>skjzl=Sf4BC*0B%4V_?auqdB4B_36@>&S@E@B`iTf~6_u_w%|c^`?MN zKS3eIg3cJ5{I=)>8^!m-qn@kF+IKtMQ2|wh16+vp(IH^LNdU3jHp=D*?}HZS(?f+V zG3L-1gxeREP(@MGn|5%liJ$93;W_w6{l1ks8OfJv*5FuLy!)jS1AufM-@LWP&daAM zeygs$@=#J!QqPo&ii3)zv|!uTSJ>rf`MlNIas#qZmD~{g2bL)h5pPSXt!RK!6PZQ0 zrO*yH!)4nBoK-Td%6BUZ(^I>;3?b*rgBT~)7#PJ#c=&Be*p|ofs0rUrYz(okyIstJ6ZN;hXgVswUnP-X*9Z1THD&?;0;`aeAjnTIX z83k`gA2_r^MR}4B!vLq419G4mO2Wn2yy!KUcyo|$jz1glg=%u=QlXIm=Dv~g6Knbj zH+UvY2ECn7&erlnA~y>L(R}9FTH6fJ6`M+U==eurSDTB;`p4V;v?RzNA4T~v#@J`l z9-CR2C|%VmGm5=P+*^Rq0}Jeg1Qr)l#TE@wS{xvIH&lJ$Lef7}jik-bB{w7sTSoXb zF+uNhQ_DX1CQB?S?|el`ymZc)b6po%zd0&DwD5}2F#gCi8M-yv$HUmb9!Em){c>kxB zd@vF_>SXxSwLjw5Ax^Cyq`74tF0J?I6g)gBIqUly9ZrNDzHB-BYoT{;=z1%wd;b4& zYF6WZOB>x;N_4vW5Vjw_?xU|CS_q~D$EI1__eNr~{S2P+*rh;+?m2QXoFY0m3B# z-l#~OrG3R`iQu0ud2!_k*MsG-q>(@7!pAriqu39)u;-0f0VsioRrstrW&4)ypA3s) z)oyHVmu+7hwk73@$Q{`Wk|Xe$apP}5rvZ}Is+`XWaeU>JFOWM~Y@w2V+p!SHXj?$C zLQm7r_nPiFV^T=+xo-O(vxbA_yvf=IE?ntWKxz)$F) zkh^Z0&~;Vez&r^xAJCUix4@J|+4vzI6LX#^JZ6!mg3q1tcf8gy4zXV6uAae0o5@Nc zkTk5`L{!5FhL2BEou4w*tJec5K^v{E$?);U(Jc-}uZ|@agtks&7a*4#1v?7i1wZ?1EAB-4f3L zqjbR~m|-s{(6^k91Vsp2%Kr4RB{atGs4px06VQPeYmF$aw;-fzVBFZ*-wZVn20@#6 zmsiT{3x3@~YS5x*Jq`)W)g=~4w0p4V^;{(fL(!>8t9+W?m9A|gQy$}U@v|vuH)T9+ z`*Ip-uNVpmsm!5|f-4Lu2{;`>N-7h*9IeA`X?(%n4gZ;iQ__T~TI+69;2?4q9ltj3 z;?>Gbs++u9yRn{E@z_-bVB%A&|YINn4L1-J4n`EcDHyWq#3C{B~go>-Q^@E zcYKdEWrj}>&9r4$@Yn{Z%kO8DvqNfQb zrxJZ5v?SawjY7(#;I_T-F9jd_q}&u*IwM z@c7X>2NFL7o!dRf+$fX**+H`wu^qdoxgT${-c<#6eD(a7}$4zEi&^)*x#j#z>q{M z#6~%`rF(u@6L}>=+OxXK3>X;|g4eV8J!&lG1Mayv7VuL*eI8wa6Wi^s zbS&yZM}6IWJSRKyjJ4^-9ViT=VD~_qOvvS~C1Z9-c^9cDUf&}FG@hq# zo%Y=!g9LyJpL5$iTW-96B)i#+`Rp^jF-E>%E>sVs#+lOeo)L?~B^mm-S+Yzi`5T7i zWL3k)U&~(yz|HXhAdy%MVKJZ%fY~!_e}siiXCJG&rn);s7{1>)4xQ!Pul*f5g0Pz% zK+{8kVySVjYo3)NGWs2^g@*7ovsuR)MrWMdEgqxBV!M2Nf_!_S?{ae-!QZk@t0lg!FY={JTDS3F)6A0a%NMc4MHk|DRU)gI7N_D5 zrtzjlOr2{1X>yLS4Yg^V8yqvOwea9^JUS-~nH7u?Au6>uS5>v+B00$}$r2CdBt>3Cy@ zTNosCSP{WupcmNjWA>ZQE{EwK{pR@9MXf^JIJ!jX?iUGe{F$U*yZ&)Tga#l-#Xf4r zYVp=!?GJ(b{i4~;FVPwsKYPE?aI5+Z*gRb?xA9u0%)@;)e{j4N_sdFEc;ZefQY;U; zF|EBJ)~5e;b@RntZbf)JSQe#bHRPq8se;tpijZA*CGbGQ#DT*F@bZF)wcG)x+s|yY z@ahr0fLPBNU3Mn20$Wvc`%1FcF;}N~yKjX|yvodN&couJVg@0sg0x?r5#3yVt#U*? zX3t;S@%BtETT|+<@#O*}82qv%D*X1xnh@N#zM-xou_g3{7Q6ep!Z} z9u?$$5e>>)N;S%=`{nZ-T~1ilwInG*bBzN_zf40R4ap~b(MatBRM0rh_QHR=O$mJS zH9qVDjVPdL?kh~a2)r{_j7Pb$JTv|sb-Xb$Wqvjvk~;v`lt`*{QNf%VempfITi(Au z>JV<@YbV3B*Xyd19S`2xjEECzD-u>QVGv5r_FAMNrZ}`^*7r@FBy~La6oE~z`Z)7^ z9N^s&)#p!0k=tWQL;=e;M($jlwYz7=%^48CfzvrQIjE)pkt9K`CzP$W$R;lyEZU@| z(6r7Zn(usu0X|@hmSf}=eW+-`x{BH&kXXj0L@G*|NCqL^;1;|$G*Px?kG5^mw6@(7 z;&xIDb@ZdF(&_4W&|yZ@6qh4VNN_p{;?FO< z_kk@seZ9fng-_Clv|BMXXxA)61F!J;ly(XADdjE?wxTTvo9~%3t|E9v$MkrBtaj2J zf80=yh*ZW@T#U8&z34s_<92o$cwALA7eL4{Ll#9vWB@3d3LQzeRYmC3!z1| z!k6U=n3}9pmfyBV9MVP$K+x9x%;=7YEsox@?@&Kase9?Lcf)enlCL+P@cevH@i_-{ zMoe=GBpJ2(TD0BvHAg-^v8(VgN&ugeFW*`3*Gx7UBH!eW@^xGp=j`{l$BXoog7hhy zoBf4Ug}gWaW^>ygOtXH6cE&V#zcqMjGZJPHO+GbPvpo=r*SdF~GJ58#g)ZaS>cV?i zNl|BG4h&IB4!!1580oXw3ZyVrYL9}ZsGC!v5a+6zd=bZsUz%u zM~kdu6|tnbPsy@LOh2a5rHNa*P)Q&T0WL|rDah=0D1jA{QwK$CbWf2owFbeg;9f#g z+~H}AazDi;t%JbbB5>^GYOksHB}^w=p42dNk1feFB0n-u^R_)Kg2~5CR>>{&$!D$L zpb5HK$F4I1@svH3P#m)ADejQpVUdOzKGUO&jvq^dxN*lQ{X;g?VOxg z-DDVYXe;yl`{SefyimUAds?-z;w5G?z)mCAtyChVnaudS3F~C7(uq-I2EacoaYvff z1Dph#i2ewVuM^kyrw?p*ZNQE7D(}8&L9z;Fd3^qc?uxW&a$jIR>26^~^mc90q!$k% zVH&k-L$k{0*Do;-G~(B%54Xk6y?Z)r=x3CY!;Mgto)W~RV{r*b9{^Mk}Qd^NU$gT>Bl-Zf_kmH$C&x13;T~Y^b1}C?w zv)`hZNN=X+Vhj*hn6jTZ)#x2Zqc2ARvW?ZvYf0dy&)UlO;(~jzP~5)GK>~D$g>qxC z9|^iDo#Ob9m2L|ZI6H)W`$}sj+gtRS|!ohaN)|#xQ>a_Q>L38go zhWyAHuY#8uU)4=AG2#*gI0SQeQN!=8`}6q>*+Ro4bzh>C_xG?`;N+cKRvAg!IS1K! zX+WchlhejE_HjIdr+*ZNF37%>X*M-`Un3ju*2*M|k=3LL5zvM4Vh_P@Tlh9D zuHu8(tnM7wD~Z04j-Eo(Bd|$6!I#LBqOc=bQW(<^+g-TTLYg@k1Z~pXs9ZUzC_vMb znkS%q>X9?ZqNQ?E#jEc^qk5E;97ADdxrbkH<$L^2$b^ww1#()U@cHevXGqLgaI=YY z*pr00UX>By&ueJphBIAvR?t!}ec<_hbmF`gSZ`UOrEwyenFt0gO~2Sd z?(BZHhe~i^mY`{+8)GQje(=ttj3crt+m1aJ$M$-)`Bp~J8~tJXK80@pVIf@V_!Sej z3K!Efi>TyT?xSY9N{E|GM=jAR6Za%$?RS(POm|o-f8O)VHWEoKpL03bL*-o_2EV_F zKGnyLj`+sl4hdATPw@KS0rl2|NAryGC8G_M6<)e=7=5FHC0O0^k%+Z=P6%YBs(c&0 z)8wS!dL22VV$+6Y=;w}V-5P5~(68t%Mjc}36uY>?6rzLTh7H-q)qghMFquRf$F-YA z>;&1-*;tzLNya@%b3WM!eRSLPHyqWmU~#OvTSP$@&@N~^?xVbM{BJaM1|pLx4lF;8EYSn z34E>-t$|`mMvSYrqjmM0?5^+=Bj}Q!>>kun%D6l8HOC{_J(#{aFHNZ6bWm-73*cP0 zbH1{8cV=DoQCRLM^1Bb_x)PH{5q??!C0WI^95qJzU{KX>hC{SkZiQbXRvjfwG`ERP z4Lkl8d{rjzQM|grwNwp~&~aj}ym3h#LdXnpAOi=WhpVXm-Dw#@5tbJyMU5tzC2?`6U-Pq-X84N;>Y2XUZq#3Ht-GS3f(!!+#6%xcoV3%7k0S&G!!G zh#fB`-y*a>;KGp0<&sUayzA)Iz+2;*Y_p)8EdH^}h|aMkEmJhQ-0A~q)$L90g$)i0VM_?y2Is}7 zL>cojV;JrAjL}>S?dyTQ0!Fo>OI?^lwsjG`Z89PN-uQ1eTMT-rWO!KC?WgX#&zT1ACw`s}%YfJbm+>YPLW0^nQ|~UMQ<_r;R{_E?_L%CT zkD!W39{Tk#bw=AO@uF~gE;f&6; zqJ}jSqniYgz`gMkYyHN8E(5z~s(gVu*iB!WRdJ*3v;;$=%X0M}FgG)~?XR7llgHf> z`EaF2T&y*S?_CobHDP%M5%Tf6U*NpPp#6MXbc>I0?NiT^)JXceKI&YJMmDzfOw5KT zOA#XHz0)$|)zK0ff<5!U0YsI0=)BNFs| zd{j2B+;gs_cDw)tvPMkV8xp)oJULJ_e})WZdfIOqE4&DU_~ww(?bBPzMBOxz7x6d6 zhSU*x``0yn&4Ds=*l(s5KN>ycP95v<^E+xfp18rzUTBS(wwFWL^0&ueGIRuLx^A4i zDo1zu?Kj}AMBijH1lMIKWC~bLIrpTSbNudeVxiiP7RS$^)QC#SJaszb0-ancp193r=N!Z>fCJ_YCs(e`P*Z!89Xum4J{4MO0e%b+`k{#&8~vm) z>}K5Okl{HThvh-=+ESZ8HGVSCo}~|MH~QTx7s=;qN0p5NFURU;K;OMaAH_Xf(bz{E zek%219SWoV<6Mfn#+R#cl{iDZny;OFxm~#W;!nD?`VNXT`0R*g=Q@hn#d52!e*9r< zQGBMp$I-(B&3)DM957@8RRtOu!6m9}AkhTZ#U{&(F_PYnE3v>IPIvt@d6$ zzNhkr_5Qw+fF{Ijx5cDU`EW<+HWjI(a`hJl-%SJJe^15$ z+{H3-9$|j9$X31UFIOf|)0kydBN9qG`{?h$&~ta2gP~u##k6*$ZTs-25iq;NAyHVp zc!;|Pm}Ed8Idr&LEOXK0^SBc`aTBgH;}QZ~;ifE{U5)@)5Cb4^M%20u86RTX7q(*O zlWWwZQkEx=TLK}BRKQ73D~{J!s!S^m)b@D^*(`nIo395gil^1c4@6j7&w+1)S%9I#4Hk>;Zy=+brAzPz%-y#TN&I%pZ|h&x4clZcgji2OB##ESIx*y1mBxXMOq zg{+oRovL_8!4Plk4xBzVZ&BHnUsUOoc^2BqvnK?)%5I_%o5n+(hVjxJ5nE;B@kq}G z0XDFm7i{xxiGziFgUSZDk$a6F1)O?Hos|WHI_WA?=UUGIx^9nKjtC=ja3g^=V`MLo z71Di_B!Z(~3Di>O)Tx1Ko4c*f)k{o%VmgzN3XNi}e8H>~-SH~JqWsdNY_Jzw zp7l;nU>?(7&EELwr*2z$xw6J0bNmuY@v!lS3OPy*^&rCZ+X`iM`XV&~b{<_JAr!9|D9oc}PstMT7;kXH>)_nkFMUrEs&$HUT+>*@pWpf^4$|sam#b59) zOLYl(!YZJ6Y0!!_t>vRZuU@mQvSqL0xZ7KsG@DBNZI{EJu{>j_gt0H+`u20Fap8(t z&)nU246#0YrEH{^Zp*Jt_G48G+Cq||vkLMT;(c@smzK@~3*AyUvQ_sT8MIyyt}#dQ zeJd8RsxLU!>Td5|Pj%L74=A-bDB0hx>8K-r-Xp6|t$uY9@o(vFMO-M>+*bYd5-iwM z9EIYcfy;uTa+u~y6LLlp0D1Z8dlz9f<83$)&r8NX0C)|PRetQrmPCGL?58EOxm4tE zbAgI}TanJ4TWx2|-?hu@Q00Lyhe{+8O4vXE0I)leEkGM8*4=gp9`bw>q{vzk$4u53t?4#{ieOR=NrzJDCl@_Pt znce-atw_p#;X9nn0slw#Kar@yQ9fE08?M=k6w-s=FXg=EuR~Z2 zUyy*;DcBq7WAAI&%i%s`YVXW!RXNe0xr{82jHch zTP|KMplW?0X3Z zF-P+qo4i@-Mdtof#ja37SwiaX(34%|pfPE_Wt&IB(^<(3l_%aJFAi$l7`bdTvppR% zq>Sh5o6)UX6$gaz&4_E-Pl)-XP!uX5w54J4U3FP1pL-j0-w<5(@u)XHLM{j^Ge*Ci zb>`hd$s;lrRM?)kIi!MVGIlp@Bplv57&-RvP$iwT%55VppJTK5t7Vrho@m)lH^3+Ed zY6^`m_03jqQ~1ii1P6@3cRz=u2>eiLhpeyd){h#Es?!4z!*k_)TzD_D`7uhv8y}vIK^T5z-Nsa zDC~rhp3JL_FCGVX*o&^dfo*N6c`}bIw2Sl%3htl}jyEt~t;RC1k{Vw-425^+*cv>Z zAFzG-((qZOCc9>EAu|*#4;%Zi#oxSB8sesrwR0bO(YI(MD#&wU@Zt}3KAv|+Ze}*f z`Q~)B0@?fDNz?fTj@j82wx(#Cq5u&Mcg(5X$F}eA8-x|qhW4Trl$F&63!yU~OBDhG z11H7J5pcHQmCs6rO6QH5dXl%YF>OGj+tPY_CiY&1Y(JkzF_e;kj?(Oaip+t9-twy% zt)NKgM{*JOgC0=e>=m^Z>!^v-=4;V%|AyST>Wc&#kRsoL<;ee9Y|ZF6rws@tI}<$d;C5A7Ya35Jyb0!dqUo5< zcU$5t&k`NyBu2D+dibB`vPc$u`}#jJLN;cd*|g9j3OIg{ z22~0)V~^I8170*FrIPgTEIlDrQ9g}) zzWWz0bVmRj)u52|n0W&ntpIdJ|3zp|B{t@$`p36E*m4FHBDY?3vdK(*`TKWxs8M|} z|6l}A);Oam;6Qb}`^has5Lg}&3x=7pKuxNcT&X^Rxg7aL?q=xAbS{}E{Fy7o6tzJe z|J;1^%YQ6Y6e`U^8T4rAw-XW>dn$~Jf}!s5)I-^LyHi)p!Dopi9lX)+=v~|`nTf5@ zc_sgd0*qw+4_f}2RUU@_hEfEL{JbK=hJmU*l|>8A`4a&;IFU#9UNatOrd0FVk6q~A z40dVgValf5+u;jy{m9=aM?qWIGWM#qrBgYh=?Q3o|E$&e_J6#VU)lj5*k89}xeEu8 zwv;+kw_;6{yf2?2M}tzoI-^`Yd6wxbo#1xyB-|_yD9&hu88?+w8QQT^pTtN_srMX2hJm_so1{N#pf~TmyiRRr|=1>M|%9xrm znCerneN@1)4e&&htkFx6O6>i|6~7R-N}+aD?NxbsfdtfL{V}Lsfxk`QBu?4cg?XbO zABg2HQX8gQd8H&Ga>`6uVCpp1%1hninq3}jS$vX}Qg#P<&fPh)CXCD5~;R*y&7 z?q4HiG=Fh;R_~wi$BmJwt!%v zf8zoFADDAA1CEu|U|PG?)#-oSxp7G3YN^NPYB{`rLl2brEb{e*FI`}fGizn7^8JdY z-Ig1BV3W_EKVx8&!pvePgTw13BaW4ik5HSV)y#)j?8LwA^pNDw1Clm~w!)dP$m+wzMN7%T5R~+gRdIcHZN%&|1H62AL6aQgC{@PkixOYCA0OssH z^EZE|8^<#o%{!gjsCJhXD9uQ@1+Qj2Xy)g%m*k`SNBu?3VYzQ%XD4yXxjNc zLO!brk=rIPBi<>&elR8P?tN>n;BZiUr`ua|Xgj^FFPLHjf6&WVz{AdkihZRm`Ji>3 zoXZSzz`h|2j91bz$Z++Mrmy}&g?<3)+BUue^-H147GIY0+j3ui8`yM^>RVJ%+GmqW z^XX60@5U`eHbXkCK*C_T@!{8Gvu1zO>hV&t8Egtcl9Yw)yJy+%I(X(%KCt^TNs1 zuP{)mn8$5|Y!Al)f<619!nAka`yRN%k+3pPJRQ&Y>%wVS`wZCdocphZejSuCCMZt5qVeuGX?V@LU8HeXlZ?I{VoKewbd zihV9R8@OGkDcmg?A^r7_jPX?;Shn5uXclPAo!g3HTPSLr!y+_wiH}R^>-pSiK+|6B{JPMk{xMPzY+opK8u8;PZ8##6?$Ev6j7BSCW}#A$NLIP zkW%tRy>IhuTv9j;A;nW_62F7T`@^ zyk)6f5gaqs;xrpoD7a0tQ&%W|^42O?$Pkz@L)as|H(MOx11Fh?!GX^`yO<{}NE5jj z)=~9}(-2>Q)2Ae;K6LEqEz10<1dW(EXr?HcuW=1Hpw(p40Cx8~4V3 z(trjKcZID2jven&9oNOWp7$7DqVHRIe;A5vK4uH7azvq$p$g(jXE>bEMck;915cu; zv+$!7<3T9LlXAh@N3(pW1_l;bd+;W|A32et-Glq(hzhh|kqh*yMpsRLbyH`!!JT|q zj&JZK3Vn6jNy~V>=YI~H31{oP=-xn_#oy=Pw`2iH2dh1YV*x;&it9r zYpQtOD3xs$eX`ekgX(LlJk#)+x@dhJ8^$5z?~iDkkiZWGS5`?3uen7+X6 zZdR!8>7z8>qgJKC(-`N4@sI1^g2|I`l9#mS=7%GPMYFx)`XeXGz*pPrU0Y?>*m&uj z;lI_;^mZRd`-VVH6$prN0 z?TLa=Fgv`sDQCx9?XjjPb1zn@`ZF{gzF(Eo&ZA$)b~GU}^YESmU2X@p*A#4t&U-=r zXP5|S?bsjVkdzCIjEg)G#52oW_Me}Dru`)V zHYnP-em$4i%yYRr?Q#uHEByTJS29P8cY7<~tN|ZTU9l}mk@4NYFa{g{pPw(JQYZ}w zzBD}>EY1>mwfP3kkeY`R)bHe(YXFIxvh&$d>`W6B_c!11#}Hiy9I3Fb_ zdH?3Z_hchyXTBT9o8whnuP98IZppZL?1Oh?eH~n5v0(a!r31LoY>3zS^Yki8Ro6MF zebQLNSu(>pj%r#R045rQzZgiq1U({h(}daamGXPMd7d`BThEcU<>#PhUbA8@^xe?NL zOB3FzB)(E2ZFazf4lTCv^1>5@U4nX3BS%iJ9wV7u%T|U6(UAfd{hq=`jn5zA)ekn1 z)VYn-zHMiQXjD>C)JF(iO8x~Qn$cQIHQer@riPSfr3_-c`K&Fglqcq2kkQn;zORW zn>cwMyh^1ogKY5MGPd>_g&hWvHe2sW(|6%gA_Zf0 zYd6yNEsa+W0uIVTD(dK{F#pCXII36(NDl6IM9%wcAMjg*6bX=xhcqE|3SNjO+8G}L z$0*TY8e%sqVRSf8a~gzSoBZaPG(%18N|@nJBvtahSbjFs=5e z`@_ko;4LU+jPpU2ggSM9Q_!W5g`wGA%18m@r;2;X?rlZ5+Y`udnO7%XdTRLZU81h^ z!i>P0&aF`%A-Thfebw9zgs$1=HCNYXdGhh8l|B~>mYOp0A4@aGa>iyeT=L2jmUQCRLx;;)3 zKWxX_PIEb+FzH!>X7)B_XnrlNY_07Y$iRVx1_Z|wyai|g4 z;7M@XcMlU9&}y$z)u3Zq*|W=O|G4ceTR_&pDW~(og9OdO18ycgsRpL}uWefRf(mB( z==Q4S@RZRC#DNO6H0c{z%EL7GyHpXf=E7dzm(ZIxX$DOPf->UQC9WD0>W5*NitO%_L^`P3XD)NX4+{c9j*9K^K1TsFZ>s@@- zZb|t;Rzc3G!yWs9;yAObi?yH=Ux89>30RlI-Z9MEyRDkm;KdyGlb!fUN_(Yi#&1)o z)8$BGI`WcuJ#DXm#dr^}boAgLWO=>CK0TZo^jGs))+pWa5vd$>D8U}pphW+A3PvW< z-g};rev^17(a}I@!IFaW#wS;AUIj1jz1+8yxbp9B(FBb|xs|I1Ny)xA{kZY&RFl79 zgr5v&DRjDa_%*KDs_!T@h^s+F1xM!yWwwygYHtS-Ei3**nE| zbGVLnk*&scS#m+m@7STU6O&WV+lO_0Gq`7xD5gEQI5TEBy?mMl2Tb4l(MlUU+{TL8 zK3cpL8myIHhNRi;v?@YJGv$C<*Vy0u-|;-OGoFpRbdm~xn~E!xyV$**-mKvUKe+;} zRewOEsk>EW)e_w;+xxA$eIRVoPEDVGBwvf4Iv>ru_U(D@B>Hj_NyF$~6l21EDCN+! zoH;{sOxw)x5c-|D0ynA+UZKhxbw;`KV08O5+M!2B89_GHR?s$sTJhl@FQE@F&xAO9LxI+8>8HJpPi~IEEb1^dtNM}{0NIhQi@1=SERvwUnHX4oJn5ey- z&C)2g{I|1Kl>xhaUF!F(!1|m@6qn8Dg7FTYZcgQ zH-ugARQ<*pFr>77I(A@3$Mj!-7PG%)Mu$k=;%D@Y)i&>6zfGQA_L>)HKOBlqC1wrL za3B$G1rImI$M59M`}RL^dBeh;l(EM?hd-&R_{gaI^w?>8ENytn!&x&%6>Iuu>*9H% z?P5@ICS0O&$Pv$H7q{WPtbt>WKzl;?01$oeAZ8%77vrTpb6+llgBiY`Z=Y3rZ)dEt zJv)}DTF>E3qG{S-sq&Gg$kWD!eaPkKZ$O*I6=-=B7FrW}J;z1H^;V_#w1AkXg#N~+ zCQ&fY`){+N?yZx?b%qG(FxJ}={4A}nZY$pTBFaCDhFwPy=&ip%E- z?K=Oi@vR);IuJ5j{s|%wvFTTq!zl3Pel$ZrntK!^3Z<(cRhlLV-cxh3&RTxQcl&N_ zpO@a;4^J^IgqG3m552Qbv7snl*0bK~PTS5_3JJ)0jyffn7%U!CWFKS;{%yWp^MJj} z?|~PMF6o2aZ@bjHE#~^Gqy+Xh)}gez`wXlGA!{luu)+TI=KB>L&*W zK^*Lv6bhcyf+mGlk8%rT3Lw25E@V90a!0E7R{YJ)4lzPYiI>;gD3o7X+Sx9ozx|17khOWeSbTQq%NwkImNfpY z@Ga+T3GoT_o~J0M&yIuB7r`4;Umfq&{@g#UdZG82Bufok3z&8dlRV{T@hc{#<=eG3 zQCT8msWS8_w|dMC*&&cE;bsKDe}J6KLcdVJ&xEo0!7Kj7IH9dUR-}q*ij#=8=kG|0 zl8(we7~&S<{@%(ey>jkkj)12Ac}^&g;_9X(e&I^gYxmQ)9Zi#o&sl3UA8ceN8hYV+ zzcuV2n{_;0X zIPG|*h?f=6+wa@Q_434nln0kt z9YW2IL9#yblQ_pG)%Y~GQQDu^`3F7)q0~|iGap}c7o430n{bAp!LtQ)CheZ}2#N14 z5P_n;3dQzNfBn-mkl~Z)B>p7HUF=23Q4(aRDbCA%aq{_v!c%T>!Bp7&#ql-Bt$$>> zKlS*-Zx7ddk0;_mJhoxCtHP@i*7k~j9j-4`a%ik&TC+aAkQx$Ie#ns68+ce1mTX(B z>p{1;3GUmMBO6Z6r%XA9mLybeS6{zy9$!~y z%MV|+DeCZjL+suE`H%*>GP(Z|Q=%cg^#cIGob}xVy?6BD^;!LrHITX!5W498R11qJ zt2sdPQGwKIq-x*39&aR_BB9}8KXAgADV!T9kHWHDy!JJJN-U@zd!AcO_e>l zD!>g_?{r^*a@AiB@SEH!0Mf2gbJObdE{s89?IOip_tcldZ8kLE^V8q=j*8=H)D<83 zO_>;t*Qxe*(z(7?I}2CCq(mwynHG7%j^nlGI!B7(OWk^QQRFO6A%1p(1JmSgk9zuE z*Q|^-QtRd5EFB(Uhzm4V;?oz9cgBC;XkI;%&9w*Hw_w9`H(UI_=PMBe%X6p8z4EO0 z0miMJOLj|@w<339DVG*@Boio;E=WuZ9m|USsy-L-BXpgbzxB$DPV?(zDfnJbCevi9 zl0fiP;Y=C7@DSO?83mQP-ep<{e)^rl#hHYIsmmET>YN^z#)&XJFlp^|WDq!+t)S7v zCfz4faMb$`&qR~mlBd&EnOTuX_f(=kx(D7ML}h$JQ~gYOSs4q1>zojj(b9H{OeuDC z&Yk{wmE?Y@gVi*6sBuC3;bb41Kdw8RAhUy~5VYMA=hg)w~yH2$+e*RZgV0nzc?Y+!bEp z5)M%R^X_H~5r2c;!m@ljrsUM|5N*Uk_0^~qq}nnn@{0`bK?$%zUf}|tRoxRX_{Q~W z-Vp}LMcoNP#V}Aa>Sy;g^I%rh<1&LAu&{%OFC$!*4^GHo0XF~|+Vk+9_{uCOpVIan zPo}qw8zgNr36%IW=A}26Ai1Y)Sug1?PFm{sx+U6;n#{@=O7CG9N%fvkovWW_lw?D+1GEn5;e9co8~3MIBh%KiK#g6v9RRGV9skt(nC$nvf)G;>IFZ`5SG zx+*V|Es*9+?l-aDHOsY;6VtV)AD=U>QbyBllC(2+6vxKe9|E1ns~H$h#VbS z5ODb56GU_!(qE^CTfWX`m*6yUd*+i?+}ruA_)7$VvNyysA#?j+w-ccLI+LSw%KoN@tCl;nxsjSkxRNGoTkY1~5qc2(Yd$xn<*-w{9-*R!fY*Yz{N+!ggE& zRPwOI1UObDOR{Wi`=HzWi%N&Q;@TrkOpM9GC!s1(9B}gj0)j6SGG^7^O|UR5>09e5 z=Aw@0RS5hNU_U=>*&J-&*R>;B3)sT}%x~W|9%)&%oM|E<4K`p`58VahCbN4zqHdCm z{&eW)((Cr06(qV&b-FXwomx59sg2fW+SOWzOfv{gT^X2oehD~WOq=^Y<(6$wCrssYLQ>65$hRS7>zPKWPqT>EAc zq_*LTQ!sLXfe=X@cYMGsytI;;g0|1zA&-ctUQ+;W0I6UApFHvV3ujujxbsr90NS{G zE7|weQCfyV-7RuLm?*DzK4JVYfwI8F%g%xZ2S`MiKYf_xi3}Q#v`>h@j6qH68o+>& zRssUnxz}M)o6)FtN>EZb;*4cD6$WEG>PvjQHFj>+KeCpPLWNKpZz$QAoaG zyoUXS=u8%y&h*?&Oq!rTS!0xXqOGj59tA`_w0@N9Zv9&Rg7%De4x*!nP#A7tozq>| z@r1iZ!L;UdTGe!UcxdO8Cu&|tE3wSU zK8sLc{6d~$ylPMDVgo#Vb52*>O1S2h-kLV|f6%zsbNGEJh;9CzMmgu||KMfGig8^hA(L#N9SM%i}js#E1VZ&P2Ny{$>Wcu>U+ z)UTW*bv&+S$pm4W3?7;MYqeTf0&@4ytiY}KbB5{puw{1UFs zf*MXlp0bgfl4E+96CYExvH85dO3641Dm_evso=@7#xBJ4Ze*{os{}V$wPq>s0`$zm zG1=1` z^l~2dR^{?d_EX@5oLY?vsUk9)Jd8k}L2t&u*C91}y-`~A(F2PF&UDW1+dNjx1j#;! zaxH;YzfhtgiIdEqmcU1I_PEa8pUS0`KBudR>RME(G8FRZ%|-lK$lU|n8AN_AbYN(U z{wo}Roz&-46^_NWCdpKAT;jNzA?lke2Uv?EY+F($&b5n7GK#IyzmpFM2`>xQiFA9RL_I4adOi%e`~)u$TXD|OcuI2Yf2O(!C1 z`!aOfpv6hTrsDnSM0>kiVD>AZ(!6urJ16fwMV`g6YWDyplP~*phOC4&HZ#TdcoS^= z(OLZLOOGfZ(m&3M!T7scwog;+<-(7}Go1(97NQD?z2;MG>`Km-B_{QI-=>@yEap%| zC$B96P_JAiDmS@a_-2+k-AT+rxjbE@1%PuVnY}}l|NGO{JaW2s=S<+tUUb>j<7V-d zgbK^!0_5}AFGMH(rKU1;&b z)*?*#tDz`O!VkbAMn+E>v_GBF?w~e&OVYL__V6yf;+;y(2RSwGPdMbH#n+mD!mTCq z?|$R;k(LwXTH%3@!c^)~Uootl-n`q2c`GL)5?|4)0MTi*S0`Ye)G8-x==jRahuwev zV-L_vKQ;`Si!E+@g8HTN^q)DKko{W8P|;snov(p7b5;qz18uf!4t(>N47Er)G2oOy zx8X=!KtF%^_YZP14Wd~AJ|tA}<|uX`6nZ{*53tza!oaCwEvWD!IDUTh)Arm8mXnOH z$DJt~JD;7dmYR$f*`+#%1Gs%)4;{;bg}SV{@-c@ z6>hGm-3EEvW))Hpc8+AoZ@IJHa_Gl0U8tL^zfhC)JXv-=#I{Z6rHW6sD?ljJ!oHX) z$iLt(wk@Mb&m+;YTYtZYklV_))0O9gL51AQRd4Te1-66yI{?s3-HavcQf$NMD~qu47{EuQ~+lj7H79-aE9b(-0?;C4L0 zK4JR#qk7P7-6WF%fdY>aihHzAupoRc%nV}gHoUy(BRMIm+gP!cnx9r`=l))W2w8q~ zCO226;YV`74?ze61@peRMFCGoQA(JXN)vJo2ULa%TSvjHT5#uct$HU{?WP=w!d_pq z&W^6-mhpP5L$QjP87UvqVzDbahJyAiqK6a^BPQIW#h2IJx2a{^ZYDhKm4GnY;mp?X z9HFwqgq{IEkND&byUNotLB2gV2^K9Ez;#1QOUBw%BVdug{PVbK)KPnRtnF%Ehl$sF zCa)_A@M$$={A;-NST$clCMuGmk9@kt8rD~b2rV@i@?xjxl-l#;WbX9aH#$NU#jk?4 zH;u^m-U;BR$LF)Mw|G)FPK(@|=yy8CzsumK$WY19TarnRgBIkFQ%f7$d>a_ z2oCm)Sf6lj*f}zg*TJBtiV(3$Dlm2S`%Sja_s*=ylS(A|!|wF3O&tTjU{rH;6nLI- z8eWQTlI=SXv2iS*i?o7})f!^hBaoHF_P9!&7v&5;E$A^3YW#YIuTLn11 zw8fC`k{c#QqUF)Zrp(b^6jkwYp^L-I?kQA{cwnU^5#S&Gq75oh_0A#z9ky2wZ-k$} zlrd;+*~sxQ!r~0T-^^?Z9a!wtlyOfF%Ja*6W|lIcydl1tgM5R^|9TsCSf&)R`_p$n zq2vq*>H2*|`?HDu+q5qClk?e+h5V=Ey06>-BAp`YGkiKKLSo&L7&*BlSVyn@Y?qt! zyy#LnoCZZIe3hJ;@?Yr_qQAz0mz9f*^R5{7%AKywpQQ0~vmMc!*2 zz=GoJnT)+-bcOY&dFzNqR-q^fmyS>bk=PbcKl;>p@p#%~e|w*Sj^ZXS(Z;AZZvo=I z{s&F%n2Znd=VcsqY6zVZ1(Hdr&(cC#Zlc<6I7eNN9AY>d7Q*&F2*q^Ic z&`a1)7f7_MtTaTd8KG*Y?&(EtuCWo5i&bCgs>uO@lhq11eR0`gewKOm5z7t}cjw5i`>2gFsbQemr>Kb$skv z#EfU>SJ5sc)b{hQeNkGJVFe!bam|4L8z6P@^5mZ~9CY#5l+Dh#Bi7~!0MVNZ(*gkX z=+_N>ECeNQE217aetav>wLLsT&u_`ZgIS-d0AoGy7@YiVJA)F|jm z(S~eU7iYe?*(xFBiH)tgO7Cn?^xr$`}v5WFQh4TGE460b}lG4=9)K=!#v)qX^xQnZ9CE12W7G~oYlUcFPblJW-Wc$FSgS@ zy~x*BH*9;vd&5eGIDbM!pwe9_RpadzhEh^x6!sMgx@ZL^Pmo`WCdqRTa50bGUg?To zVE*#KPBZp8aLQ#F{M?kkhtB9qrTYaYYwRJ{j%wXftoBpnR83qvDq&N`S=zC*^x!L= zMd9DJ_-B?l#dqqv{pP<0wYBxXC96FqoX56b2{Rt7%D(n0ZFIbv3M?>gat+ya-NsD1 zP)UFPiWT8}U#>OR8yu32=ka4`d>DsU+R_nnct@qNI*0SAzO%wdt;V3M1E>_xxQJ*kZJtMUj0K7&pKelk8(mi9_YdmaF>?OG+)J+ z!Xr*bhnyCeI4l0hzbkC810KT;3#0Ni2catAX1xxh(rWQonIR@a@!twMC!GqO?>HMw z<7re!>B#1eZ}G&2zfQ5?9<%?C@2YsRJ1JQpV4_m~)jZB1J&H|NOrN0v>k!Z;Lr#Z4VCRh zxn{Gg-BRcnQ0tLzMk+_IOKuqQEJp)49aC&SFiE*utoe=#4`D7t&_I%4V=VyQU*ZR8vWn@jLUXZcu-qF>1EdfdZ5`=Z^^!t=&T>K{PZXMxiNNekID z!b|>9>}&>sjOkF}de{A%sd8Yb7~ZvlX$6Qw`oM}NTwh0=bK)eQWId}T<3%$>M)o>~ z-{lsBT5|fqDrd~0+gC$%0;9vTb5PL9_i%-w|$ zmHIoywLzzQab))<;FZyX4Ni5k2v^FIJ^Rm-?oqu1T~hwnMDp8OX$D50oUmFPW;%Ge z=U{!KgUc=6;jg;iTG&8vD@d#C6tTNiK~&HMRKYjznZ-Ti7klCQFcnu+!hFSU><5=4 zTIpZ%FnPucpT}r=7#&pOzY(iWYQom1l#~23MX12gQD|G0xwGUX*R?C_KyKd#br*BT%;j*6oI?JE3apRZcWSIYF|(IwKLXZ-eJ zS8j(A16f_hG0Z0RH|Y685bJ=CA0kv$_8uXbKfKqJKKYrk?`{09U6S2=l)u!|e#Ww+ z=&>(2sA0B}bp2%$ra!S1X^eu-Qf+$YesNx$Zl)hnEbsw|ZO;~E&?S1-8_%n%^7x>w z+`1y)CUtX_`K5E1m_dDsI3guKvu;R+;zSMEr;8Ni;`tEOoXsZeW#sE=y6acUedt7r zE3Hcg_|}L`aTFyi;6h+YOUi#RR7U<>=DIqe3^8@?_Gu9tBciH(m%M}NSG?Xea?Gqc zC5YgF*WnJHc1U-Z3({5WD!>f9@O^?J!12nXmCLlTOmPILGaW)DDHLv@4QkZbUc9O`ka8l7l?vj9McFFHIQ1@ zmhdYw|GX>4xIx5Smz58|eEWF!-fKUN`+)a$36+U{0y20O8Sez!aCM3|!qOh+r^h7ghabfqru*rFiGA1^*orNkO{vWrkN2)w3HN)f z<@*MU$HN{`w2*m4iMl#-9tz|$kl`)YNMF@lP%aWa;TuB9L9{9<3wBS}4$lER(HX&*=ETx>89i<4$7*+N4L9b=Uo*FCX{yh8A^E!Uf! z7ZA)R9=lze`kpeh;NW2jzgQ>Sr1Jm}@3eY>LPzkY!!Y-MC0~v-gNAq$Z>bw8(MB(B$dWnfSS+F+h9$Z{*n)VD>yh_7%6EK@pJkti^o)@Anwd#`8W zTBTQ@MI>B@-g9ib3W&QImOHuaFXBKYw%ZktXvkR?&QqOPlb3Hjm+0|N2}ptOxV^u_ zrW&>@C<3{?un@5U{%cIoi6zXksYa(Q+iVX{>ac9m>doe?Hn@y05F0l(pXR29;4``4 zi|hk(sYCkN{f?)g?HKG>F6cjvtaUv<&SY!%nz|p6OObwlo~*feQ?}1Uq(n9qq{*S6 zh&N3}5h@xq!_gZs3~zhr=gZ6_{G;>7Qkb7K7wteBe?P4q%}_(EkVBWOCzODT$6DP% zW{$ZhlB|T5y zp|ZIh{{C1S#5}NjoM-vUb+q#=^XTQ-CBjKaSotz636uAbS^%uZdrRcTpLpE`ZS9wt{#$%_mj-6-yGlNL(*Lv!x+fM@)ub}|aN`)~C)mhk#qrJ)0kb>G5?fuguP z5xeH!Ipux8Oay0V*5_}Ff>5H{RxZT!qymeV2q(z-7!`B1)(f%Fb^#c};?*7Jayo>k7O)Jx^E(*QdcxP|z2Bg)s8P2}#&EeM66MUe*@8ctX zy*e_e%VFKmZ1WYK=Dd~WV(NJUA1Bycg?!qckj`BfmzG2(lXfPiE2KU(0=Nl}=yAQQ zaf*KIR!OCvOJQfa3fn6xY?WvN6w!!q+NH#fvp>g{f!uA7girVpk|tU>jAMR4h~Ir4 zmRj1f1kz1^^D-WzpIk;RZQ{E1zNG~Gs5D~IY=9uMd-vny+loU@rTuxlVL!IUZSUa3 zp}beXiUisoPO1&8qaUpUm*cCDCt^>NSP%vJduN}OUxYj^w#)CsSC3`-*LAn4+P-<^ zsQ7aJU~QrP`j*EQOLMm~wtp$QGC6gyf>o*AkGH8OIA(d?;eKUf1(hPJgnK2duo z7;6pW|2;T(mE)cvjm$04QFuOHY@8U>X0oE_!Ww`(K4Q4np~XgPfcEowJy$X}BnsWm zj;1_>2xuMg&RrI%DJodq{!3DoYkHJ*+!ot9V)5-MEs;MvcUx8ZR4V#C7k7qvDe^$GlBPxZTnflMJAELRaG)o;Z~^{k8fK7bY%(qeAd)yYl$MpM73){^xc@ z%pTiWws9L;*RrNstL(0ZHDf#oQBH@-$mdZcB-6b@;3V_%qL~{UTC-QKIjN~&@g-1P zH|8ZRKbi!$TaY=go}c-(G!lWT2dD&sGq_)K1w~S#1e0HuX8gK_>m%A9(~w%CXiY~i z7LGQckH+4ZM_*Ty$D56*y3xR1Y(?1Jw>8UA7Uy^rpH5ww~@ogEsf8vxR z(Tp2DBm^O1ONd9?^P7c5lI=FhP&zK-3Y>NNb_Nmdi({Ju-S!AnZe{uelpXKepSsGj)_DN(0(^ZYIMb12~N%+Sx>n>a-L#~ z`&SDb5tS24c$w)@uHwG~_3nJdd+(I0d~*WP?T4kj%&3AS@N5~31?%n#J68H4>!){`*xCJ%3AmGyY@Tq;{;pme~C%ZYV zkw)H;a2nQP57_^4G%(*3{k>*Kh1Wy&E2M-x)@_l3uh!=s`dQjpYgGY*2P)nzr?F=A zl1-j@-}gli7q}f1DHAJ@1@Kme0>ROqqP55=M=$YeA<#EbVszEV)|O{asD;C6SbleL*<8TBA}X87^%vef@1qruljIBb z+naRqige?NFE&pn{1gjx^hTY)QKK860%A0Wp|K=X$~ko^l2pEpXnejvlGV*F*#d8x zt7d-|ulN#P6(su>H}d`%v&kTL*K#G33$2Fl)kHmERI1`Br4Ugmyucc?tx*+Zy(i`|B?0YsfbSrqQxiuKH4=!oYr>C?1eW1{ zFIl*4da~~p5L=`}b0L6R*s30PKv|PojB0ky8qYIkpDOuyq@xLO*{5Kw?7G9@14Cs3 zR4##_bs5qkta6AB%e#x4lQFOJ7G;RTER9jAjI_r*gi48#wOgLgJAVe=@xX=N{LKnq;e^op@CqA`k97pGHLOF3CKM z%?w@<6k>NRob;A`LLJX$_Fm|UE7uDc@$`8MQ5;E8=i!noi1T_nSi!zCAc86sbBr=O z{c^r4P_~hby|M<@2M%A;!3psLbioIdsn-Kg$xjlk#Kb}Y-0{_>H?T$i%!^KWI2#MW zq>^S)rB4`oolyUJWb6dkv)PN1T5IZ;?8!x~VtlGG(A==&Xp10ioM(E2LJSopDJJv&lK#eEK2 zu=4G|fBp4QY4RiZbS^37+dT9{i}`+C>ugA$>R z)+L*u-{K^7vMgLrgm>P7^_ci4g^U0@iWP=?YiQp2( zlC5J3si|s&s8RRWbAoAaOoU)3zFus&1`*4av-BRme$TsKtS*Pa!1MfMXzT30CP$Gj2^Q?wYeF)R) z!SQ;Zp}{h=#-JTGgN3G<6tL0kqqzy4GBxz`$+!$>#sh}EyY}OsT7|+ZumK{SOnk*_ zIRT{?y0V~dM-G=2k;yTXSQZJqIgqIdI2p3g-fCYvE-YTE^LZS9+Qadfe|nj7Mi-bv zth`jXY1@=da={-4gEwew@YlI|jZwgZ*KSWm`u2pddf>dN#I5opXYfwSlGs9Ezob6}>ee6(!el(``G7@uv^E8K( zxoLk&nIciMH4Lm}Ll4?wGA2)#%3ZE8V_7@wvR;2X*>eTvF_eN$*fjCW0Up;MIZ75?5XDo3X@SGDmmF^whr@OQXvH z+JsSif7W95XdBqIp7n@SyU{zYcH?qOEMsA?m3?A9zuQ2~(Zu`XcdLr` zXG3+}EBw0)C`b?E)JHNtCw0@`V#KDjo9=#KHyq~K*#2_4al_ng&WZDE;c|nJs2}|< z2Qpc5frMLBPg71;9&e-Q^_5V+B+6qX`q;81o0k-b{;%sZ%EFeEbw$#a^vl31!aL@@ z{+oAG_1k>&Xq`~VU0v|98z5^Y_IUtf3h!}%^cmhG?BkyK%8lIBlyL~=B%A?SZdSWv z_5O^rE_RKAhOb$|^^K)|cNLDiu-H25wj)NC4>yp>8v{DMs#hvk5o*uAWWAY6oSF4% z)RFJX=L>prc%SFL(VS7s18#C}bDFuR&&d98Ld9LzhcIk1(#k0o$P{^13x%W30!Sug9@Zm?4kg9(6T0aI5_O|0@aEC=>B?rTZ zXG^0ka^$Y4{1UYWG7n&uX#$~_8`bAvypALp!x!%mIM$MForcU-hw}m316OZjFPvvXUvAZH&LbgY-BYWAK9`Q5bjA>?Xr8 zancKJd-2tmGOkNZ9%hYj;!|N~)F{6Lo8_?RFQl2=wA6ZffGO?%7g>Uz(EnlD1wT0j zURpPl57nH__~id_lVJKwIX!%W^_~hj?z*ZryQJo9^WF*GyoZ8yzqz(qFLo@>NlO1j0a+HJ49WE0C)tB9JZeEEorceV_xDc zxYTt}17UnQqAH^Ga}{Otu9H4kKzeZ|DqXz-u~oq^<7V1O1Y11DhdQI}U2x?n`RXU& zo!SW}iBA5HRdbJ3)tGT()mLpV{psG+M+ehPjX_9t_~Tw8By@C0^XB#>_UX1vSvh?? z*iJdVvd|j3Gk5UM|5>?smGMTa@9c+j-hOPL%WLI$)?v3vINuqmokw2!K@AUj$FPB( znox`Vnj&6~C_d0B&~o_e*~I&yu2)CiGMWcDK{l?BD~q{I$}f$^b4sG1b`1fw*f z(z0>sWSA#4Hja64?$hj9DA0w(@)=qpu&2`DHf+Vno^USNoxq6(%?H$IqJy)7Z0aA< z&LkOq18EXMyVStU|1^{#&|@V>x6F?R%hc}&9~O&ll)J%8nE=})GWB-VDZRp_a<_fP zymk0{-k``5r?swc!Q%F|uuhufUeDhL<{)o#$r{2F7O_rELE zGK*Z0HHb^CB$g3q3`Kel`L>+NKV@(a!X9+tFxRG#dyVc&cf!As?Cq!F;bgC#r`>=! zG(ur^c(~Vp%IN_SxsP(c}OoQvra<9p0HrhK;%2 zKu4uPPqX$*!^#^dM5TLcI-%PUEpzFds_)xPU2L6kE4xVDxKK!2;fSAErjoIG0U*bk zd||eWt&0EC-`fUr43)pnfBN|}ZEw;!pA>I$My@u*3}JN>anw6g*Zp}i=8|JrIHJ-G zU0`8(X8saZ$tb`X9mEiZ_KDX$x_KL(Sn~LH;RsrzS|Kee8p8%l&{BNNKLAwC#lyvC zygbSv{jeyNm!JFe)JbS3V%o>@Tx&7{y8PP_lA<^Xr&N2dYuemu?&V9T^9+B0R`QD;7yZ%;aLD7FL4WLBJ#>NjB54JI^4UtO-{XOzk(q$X6#J4gq3HmN%L zDk!=sSY+xfn3c?kw9U6Qx5mX&+PcXv%j)WN@X21JYn#KF=k#F}L)AU)-iOb5%Z_$o z(RkIX_ij#qBhgI#inHniD)u+j!q}p+;Rh{y`Fm%#{Meff;hl4Jc#y1ilGa=ROOK@x zCA7l{rIqHk!dCUUZ}(OSI_78JGN~|Er&HpJGWL{PY)0`9*8;AbwAwzV&aB&k(@3FD zjS~_^i@stexmW*2i;7>Fb=aX*Ievs1cSe0jaAKPP(1XFZo!xKrO-b|M8xxqlldhqC ztdg82o0i96Ha6e;^?#+P=1X&JqP1ykhvUi* znx7Ul7mj&#MzHlgQGB0dJuMK82>U{67U~&(Jk{ZfVDkryXU{jP~neLKRcjFdjua0JX;f8f^}rSa`$z6G8R%$yWORAH>#RGdUm)S>Dv4%R#D zjyuCwax76Maxp|=YR9IwBDx*rtza(>rXz>`R<>Y}RTB5H%7acl5ti}&q`PNwlB$Wk z(SY{swWsX|qYTQgNsHr1s=z%Z_f<<|HQA+NGpa@BCL4te6<~WmvK|&HeQTeinYd#6 zhrXLtgwLV7PM+_d^n&7%InG^*l4jB?3{TwWZkCQ4AtjB_6N+fMQwRY;Ki_YjZjr?r z>|gwM+SPjIBi~RqO$k1peD3T}%Lbl&K3k-!aUw&%&-6AFmZ8pVrb@&Vckl z`Uuv*F;O?RG|_jfHS<)}X*pLP>on+Xf73ykR|FHQ2GyPf1;!1>m*%!SQyUiY1;jjO z+!PeWF4}d%{WucRwfiS_{gjE>4e(Xn+3XLnS_Y4-U~W7`CEQh8HSE(uKYnUODVRWw zmWbJwu2s+wATGx1xgXvILq6|G&(3Llxq#V}dU%o1kMtmV1v8uNc|)_=BOVw(J+Jw= z*O!(+Q-4Pf+l^*|>CVQS3jWGe8q}4+KQW1JvSt@YG#!~w4ZdR@?5i(gm$}kc>zK)% zNYxTGB<^Dy|G>CEn7pMwE?RRyoIXz=GMs1Mm( z+_&0Gh#Sfbs z?w;eT(PPa|;N!=+stEVj`T0DKQI;2RifXPISQPv-u$AqAxD*ARDsN?OP)AAbq1RGO z=o!?-O+sRvwm5Ta10@_j<&QdDk~n;LBG5h!K0T6Kj_P2&CfcP+J%fu+&dor-Ue>FN zR{U6CehwtsztRx4VB?yu$9*YR4Jn@cJ=oIgaG{3CB&4-)MwQ3|5FS4ghJ78*hp&e9Ga#m>IJu-FYgD<-MO6 z!A6D9*QqAw?jsxPH*)eF(V?FPg9uDvz0p3nQax&$Elm!h_@&77pB!lH4NXUYqT-*i zW<`$VX~I$jx@M@06HAsjd6*T6zJ8FW90u0@)TGi|tF4!?EdC^bk)cz+P zq4KruRHs+gVM!q|t%Py&u4muqf-v*Ep#9jPCW5J;u_vzU6keS4Krhn0zuK}!0Z#3< zyJKl2{xMO&70wHEMDud84?}74^AXR#R2rKm!EM^3j_DuAWc5MdXf}4&5A`*?#0*c@ zAM&_t4yHPcR?feeDO6fL`-Ybln3~VV1R&c~$iNL^O~qE_N(m%=^CR-izD!XfHw1`p z)MfZGfLdUKp3Ob@cgtu#QmBeWs1ls{MaS2qe|2X#-wi%(RUFFSZ%QMpNlSt@G&R`- zSbUfTOR_V)mM9%IO*Hw`N2Z!KLZ|t-9To{`q!LnY_YU4&tweK_U=* zIu@l}MtZ47B_j>G$qi1ew}cx9a@I5!lg|puG6582*xQi4?F`1AtC&^S8^LKSQKI!T ztq_unxY^?X{PJB~fO(>Y&L;3+e;W)h67!ra8QYz9Xo!WxHRFbLxL&5G!}1=04|SXXwXRs%E&$9oNi4MV2xb-y;oANEE$7I^sDz`Jb$$R%wryI0ZGjl%LYu zio9*xy4`w|wVl6EMMgg+5*;FPlj49btjJ=%rek&f1SNyw*JAOftqqn=WRG~RSsESc zPYn`YA5jeC)+!z4-Ei;=XLwXV^8f3q19A0N@ZerJzs1!)T1!$MgkMuAHlE{<{C^*h zI;hSIu7aO=Eh8;$zEmISStS#}rK$rHZM&vh*^?TU5g-w;#Ju6bY_?mU%IO7oeBT+D zH!)L{%(qoAk@Z>+j!BV8s`8F^I`E^jtcki4Vwu*h!yH=O8js`dx+8$`7pHq{z!UCu zw^-d_bbm)ZPZuQH$nt@^|52;0wJFUEdPSq*#DNK-9_HikNb+QWKfbA2qG!<&>L(%T zM`ahkOuuIny=CV`PeOWr+?YoqiF(8>fF7NFmm(6;ZuK2@q~KNgsoAN&yW<(z;2|={ zfp3N93!>$2ryh4x0l$pOU=~~V4FJuLo$&)pKPN6U<$2d7e=E)(TmkN^>7TAYjt(j!R z@1_H7#aj75XQG0VI_5_I$%#wMFHaA##L4f&aCE8%A#bdt_nGFg*<1K$aM5h& zl{ScdvrMVL#be{051U73g2PGnClp~*)$D)P*gM=0OaclaSQM7ewwIlQqug%=2;dVa zmP9rtenK<3L9R9ROXPKUt$ZD3!9OpQKUAx}dsqtD{=9WX_5{&8y*reM+hNt|!!XC@ zzN$-2WQQAM^h@AKRb948`oix4P6KF+AQ$mW<_~0Klq$`QK=h@*72d zS#2q-@FRZx@!P|OL&9Ut)9f>{7S?y)z!LPd@c=V(l29M_^skPzR!}-?NbU1!lc<|Eu4hJ@5 z3gJk^JZ&0c=$r@YrxnpwTZI!?0sL@xp-6!B@09sb&mD1jfCdJ?c84~(7mS}k{b5nH zji~QeLV>$=Kjj?2?CF)vf(cNb&*)zsFGMpc**Mmuu~`Jah(bJ{nrsQdO4+oa{Tpu{ zQKZ&;eG;+cCLFyPz0zjaJ~C5S!vJ1xR79%D0NC?vF-_(ioA9P*p!VmJSE*72zr)Ls z>b~cF_P}5DRGobH%E%vlcr6wRsm%I{>p_$ z@Cd(bUXH~05@~%D#o+D|&BEhq=Dz6-&BXPV>S$;l&A#aqv46NVto4?)jBNg!H_-C1 z|AKCEhDM&$UQE+!T^zKbNu585ne3PU+=I#~88>)D+&8hNT9MGe_=|yxZ!BAJG;pw} zs&=tG$!UmjedypRtqG~D`Ii1XEOF>Cr4E~xzdGr_+p^neYw@CkmEM*fsEeH9F~L+z zX6p)$O4Z@>3f?5sh@3;THycPXHswugJ|b0bxB3DCmJmSCg6WP>u3z`|Tng@vN0?eJ z);f>}6_O4H->7IYHlu`0^zC*|JHWni@A)~an3X8&6Bv2b7q!Qf{{+$3xOu(g+f9Y= zN4EcKU|0AqATGEPzH2zDp@b!_sJ!2MJ}8JpWD*z{GYDZ^p|``U-bX15w%t8fhV(uH} z2BoBa>1b4Lg0&=O8dj~w$$mw<=S6d-##^HmuLYi{{4s|qcV!n<#VGD3pWxZ9xCLn8 z>`QDJmOAdIWMQFS^=jCFB>rgK7pK>LR|+W2#TWYrAt5<>2F*PqFT-|>f5J+I39L@} zOhw$vVyXNl!@0|EcqLQM=PS1z9D2DwtOu*Juq+o_GV#`&p{Uy%9nU?9Kh3q?T?2_5 zIcqFGvPPOWxsDej%gr@ldzPX`bus$SM!bO(f1tuCc zr)?35J|VD&8}9yw86osE&QOyS6%~wyc-@|OwOv7X$)=hj$1{G+)R2hM_n?fw5v=!V zrvN)m<)%GYjiqe2^HC4;_t+sR^qKP)Ay6cV!AmME>$Y={hCYmfJ+LRia@twYCq6qS zMR#~b+R&9Oc#K4xXeV9)EMM&+!~NSU=$V<*V9R~l;;^VWUgoIW?-AWFQ)qCmBXRoZ z`SbpigsM+kW(}69hG!+=Bml-*<)fm?$7`KG%wDqel^B^m3DdA&l)|?LyOMgu5hK+u zp2E68Le9f_xiNUx%X|e-tJX45>&s1HS{!WTsWO+_LHo+IL&nT+uI^-zb<=xlj zfpRcok9ljsj%-s{~IDFLMd)`Y8!K{BiOe+L|| zAsO!l^i%4ngZ8|in%Is_)(?RI{5NdiN9|tRz)QA5^DT;j#v%^lhuX`G5&zvdW2LF+ zSU0_%I_Y6YLK}W44*Q`(1ldI2fz!d*smV<p>f9*tfbh{6+;2TNBWHS>*Irdqw!Qo+<@0c|#qR7|%mj2glgLJ0tP}BYP%4 z(Q8t&1|sv09hs4+ZaGu^Yl3jfG1NK8Vr`k478N&4S99}f!V>3a0T-<~(nPQ*lOf5x z6FY}q@m4fv8&=>DX2(LRO(0zZ=6<>EmX_+IqR_@9*O-|}TzZ0BSL7IqU_m}DQ|fUk zK7j?I4KAPNg7My3?v+#9zITrQajA8+f>mk#h5ps=${)xF&?8;p<@$gf8MBF_f>4f? zcKN1JGrf>MZRN}1$WNL+n<(^$%5#yqqZP~cR_Hp6>rX;V?m~U>1bQ__%?!M}wzPVl z)4n?QP^nii5HdCfx%~1l;fevb9TS_-Q{OvlkhpHnWAP{wXbkq_3!2NhI{^nO_bS@d zZ%}_-N9tJ5@iG#pA4}HT4u1}i+%Q%}vh^zr!KH-6y^$k6Mxq&KWvgNs;F)E;A@Dbk zS$WY&M0dv}dCF4$-tqP%Nkf6ed48VoRP>+R(R|2VeL(7L3!3?d=9hwtla{^FQO5v~ z6Icz9Xf!M|a-_un^@eu;~&hhThltU7zu*u(7Shmz-@P+W9Pq@6K9>NkE z+n28vWDY8<3n>YtLr5SUJ5C1u3aCn}ePC_Ae)Z=?*8OrkaAq+fPEzh{Cm|>8QC`vG zKoE#1cxuM+qwY)U9@-|FIhKjQo#5Z3Nqy?)=F%%QOQ8KmwXGhL*tYN+-<_x$Pn4I< zlH9CIYB6d*W8&(C>g&=5gHr<&p1w#EEy`&Eo;eIKW8rb>aU=|Zy~7Ut%o@l8RaFR` z!8u()I@q+17s;`NhbB^X%dC_Oy`r0*LuHnEGX6@pQI%7+G4J4<2 zM5r=DR232J>ZpyPZ%o&SVm!%O>Qv)kY#t)~c8Jk#C_ReTV#H`mUhq+sA6>?EI;`mWio#c1BSaIiZ&dl>PFqU~1Q#{ztHuXwNOHu=WN zv)6jD&(o@t;zRlU{{Jf4r|)^GdlUkECp z(oE2mvPDdC93m;eRcyLDW}C#W ziQD%5So)<-+UO-fWi9g{s-NBd)WBCf5@^iKA#uYlr{J~Ze>z3tTAn;S$AaP7u|rlJ z&8^JaaL^xm;6wrj^$6lEN~=z}5sGmebM)9wNZl~MQjinqOf;Bn3r>sTZ7MSWAJHs) zduih-Pv^QT;?1AJ-$e{_32u|wtJlXaeXsIIOm-y^gg`&2Cy|hZkkU7l$ zrThv70-r1q5AMpq!o6_*GYyDy>>bp7ou&gdro{bOT_i5|dKyT zX-(k?6quWbHhpT6ILz_W;pWIF-j;l8H!5OSLyjVUOgfydaPNG1f?%4~0EBf`z2@aw z?&PBX4OVWdWgwnN6Aq9td(d`6p1}q?*J>6G?2cPuJB^-du<|v~{VK%9a3-kiX^SMQm>=)h(v}|(3b_gX_hsOnD12AHM4)~ z@X|)UACHwun=QoAMwv~Or&{|`XTEwgU}FM*>+UFpx*p_-Pfmuq!o^6anETVKfaCo= zJh8`I?ul|Y>8{hg@FM}WVoWb!Z<%19X^!L(MN zS>?AgH1`?v*W+U*N&ztqd+f$-C&Jo}70Yc`3V%B~K&WKadjktk7$SU@ zVMKX(fj=$68Hdl_%3xt&FRjU{Iis!88sDR9VXTZyHq#LUNM$;gd%{5)8LvUpikfR; zi;szR^TJy7vwy~QTv;fLIX)&TsqRrpLU5iJhl46-y?^+ucWJKo#(r(@qe^trcgXSq zr7i8v05Te>idsi0s^EF)QRTHjes_-7+kh^(0omb)?y!+2%tHq0`{=MG zW5tLOH~^Xaw<%Z^!{4@t{z`>|x5I{A3>C{*UugIjSS?N$T|w?X&H}b>y7D`%IWzvQ zX~fItWk5%X{&TYixA7V$MM-)HtE2f_BjD>SRgTV{*Vq{5oNCDDqsnY`9?LzV6DXVl zbgA&@9!N_VuB4paq~qdS&b?cet&}=8$!)VZu^aP7N1h8!u36r64+xs-Yd)8gfrROCKYLcU`^YEqV@)|xTkeX}Z%=w6&6U+gLzU0y6>D9PBT_We)Q9M?l(5>2H73u;7YL+G*M!-&VX8#Vam)RfHG50#LRx0<78+;W85x6%^_}iFyy`6zd0}2hz*8>kGvp^K3r1sM3~=^#3*`8-ZN+q4;tS1j^Ai z>qQI#3wRqF_OIUdxGg+->GAGoNk6-Ay( zf{f6AyUdppsrbyx<+(QKEcP|xlJQ0hAe%jhA%wV5a5;eJ8(+IZc!I6cp8xpc^~ou& z6khDFVq%+33S7a3W$kNw8Y?W}Z9>J8NgBam2+-mCyl=ggx}1!EirPnK71+LcZ{U-M zRzY*VAb0KFydXz-8Bi>BU8DZvsRG&6HD*eVwnn?@-{l~Gw8_=nhi0yp{*5n2VWY+V zO#qr=R$_TPqOfLHq5$2y`p6teVZy)*V*yLvY4O0Na&SX3m{vAXYr?D^URDYwC^&Q!9N9&)~%wsU&<-K$kK0l5_>AB<+t)B_njo{F+d$5Y0( z&}7fP%*Goeu0_>7syVl2{wG=#wD4?h*GI)!1+zPvP$m>!q}rgT@a8|byuGT2@0Vlx zX=QJX2q*>xwGE;X`3Q4X7aQMlg;Trr;>liGp=9>Z69 z#N35*>|0_cz_ONMdj}$X3A@f2#F8Lnrad-0QK8{YWF0kIVv*V4PeK$CY7R#701bw-*sTOL7HMIvU#oIp;>d)LaGsNHWWHBfyrBQ#6L`z`zeF^Fl)d|{gN^U(^ps*LgrBCFj{I^Ft*Ag0k1NNV6TeU(1IFJ0v zPK0!1V(6}=(rt<_nu%%Vy12LBj#zQ#a8Hh2hZTGP+)Rx`!wmA*?%+r6Dk}@VNrNFk zWE8ylmU0L}!u}yKXVukA4GJPTpohetY{8f^n{06yFfF~g-WyXgT!WT-n+@qt=GEL6T#q`IKb3q> zq(nrycKp`dlnqsXp$;=@NpCq=oFt4OZVRZebu%~)Zc~k%%(uwS0v{impv__A5l-yR zVya<+cl{S~;3Z9*82shBEpzLCIM(=d!Hh@F#8IG>e40uEr!kyS0Ws^O=v7rN8)u0pGr00Oq^(A2B2Dd#ro9Pb5{&^a}^6$>htp2^+5#j{XqyvL?py6H@lfIlXn^ zLly|6GeYK&K*3`*Wb#_A_hbS7?%JRVVA3Xmc$MrRBBG!~7=zssDJ;dlY9QEu$HvkV zi>v=xfzScCt|$GWBJ?8b$}#TPS%w94MN9F)wKD3D#tZO_&u%qSJD`jao5RkXdBLo{ zdY1-Skn)QP)efdR+2?Mg0H&|r8IC!I(`EM>!1dfh$eEF>IwAmY$A~PEr z%tSu#g5&nW@q?L6Qj#)Kv=W+gzy}&0g*Xb(gOv*nXsMTaE>vi0qq!Fknnrs+IBh>HjV`J z{yfGt%vrns9G{bWeyb9$`JYx|lqivuyiKmoFKEz`^QW>C0MiX;CVCwYqd#&zynubT% z)_C?(Wz$INR+f0k#GtDxM}mzVEI&&KRDKXh%;UHEL|S`7BVG_tE!NNI+*L&Jsf(rEhqau%*_Ia#Jy%UH|eB2>>_c z+4!$L!Tp`kNtk7|t)*%k z6#u37O%nRZydDw?`#!d7T*K^F$e<;+PS6{c3eziMH{VC|7pc$XIwhuu!d1t*23Q%g zs}ZPf{bO$4Mis9pyMMj0fA4{6)sC7$F}6e3?(#muvkB>FVoQ^Taomm+Sq% z4BE)|&h4{uLXr-m?cl9zL-{S|g}FP=J`>O2uA@K!O{nJckZja%Y}@Z8<1+cSzBHI2 za&AAh=~2JS!i2R6`oC)D_lxA9uL*z!sR;Ryc|wj*w_|*EN%uOYW>VHrvRX?~5Tbzs z4>t^dhp&U5)pF-xLfc4k3)QHN`K%9nDx}=3Fpl%hG?P>3~aF5)*f(GNOGx0pv#O%uFK7^B$KuEGFZ^2j+*tx(8N1<$&I7K#Zv_F$o1i0u@dRjNF-g zxKV%Sz91j`_(c922uYoMun0F2lUvso&=eXq1>SuSKzPSPP5^~6Zb9S6_y5XXJD z6SrJjt55&oo)KIY_P!C3Uj1VQ#I8R|;eHy4*U7WZ!q~F|;jxszvJU-tT)A^l z0VaFvu{ty6u) z_HUT301ZERuU<@aBS+KOUQ8bogMuJT-x@5lON&*1s##vK9-_^3$lGuK*`k`>TLpGq z@}j+GQ;s3pew9Mn;%YJf@bDHjxNQ*T$8dBgxnhT^y|yHC3(P5wl3H09m34ogcr5L1 zIb>?8^5Uy=noi629zgLv;3Hlt8wro|KEh%h7Z>ky@y~a5VFG<<)qG7h$RT#n`5jKh zH-2siTzYNsE?9Wu;23^)W*SPirxP~TTz+EXvgG1};OVslBjlM5Yf&kf9``t@BcEZ9B;uapBkIzyt&0J$0->joBSh+b|3S99w z$Mv?ilgO38n0DW8Y>djc>p zRg)=s++MYe!7mn#xY8GAogo|=2(mbf}RkcJz;cq zS3{Y^Q?CjIMs<9B>|ig+i&Lcbje&~sI(2Y!!D z))y5fJMZU}S@^!7NwW(1&UMp5E$_@^SxL_-@c`hFuYW#-FSsNZCA}W2Ep!b4* zwsba)O^x@>37fx@3<=_b8D)9+%E(Wv7`h;HI~dl=qPKqnFf^xwnmlaDCUjf+6FRJ9 z(a8~Qfm`R_c@}Qk4uGS;oZo4u>vUDrwq&KYLn3aRarg+Qw%qsLDUb7wjX%+!kYBC{Z76EY+y?eIyr6SmRNxW)SU^5AiGM*k=^ zvO3m?(RwIhT2bxx@1oVpW(8*LeCI$bXflsE?Qpc3Pqq9(`{Ky9W=K))>o_-)YJL@) z<`~L97#aHm+W3PJ7!c>QYp;HpBQn(NBDYqc#b%WpK-9+u_88SMFP_!y!c$e7(Nj)a^jS^B zgp!O7n-ie$mO96*l8Z>t*XEh*7d%EGKk)~tHzTEO*#|RV?++kiHs;vOMUn^@qI2#c zukicOQnP3{UcSI%x2IKJUG3a>-dpF<<6v>h!1qT$lR8+M5U6Zk(kQ!^V}|Tz2jt@d z{w<%de@kGeaptx5K<{v0*3wp4senIpy!th|+j~`eD4bNL{IuRgf|b8n>``1!GS1NO zgwW&@wcU|{+|2fF*-}tqxW4v2fs7{cWKX2|s``P@$>|~Tia-ac`DxC<_ov;MJ*xRt z$lE1FDoo=>=h#svG+bVLb}~n%tgE+)1*axW?^*gztjP6PV+(Eey1dx6$>mJ)7(OFA zTLQ&CyZj&WzA7rNt?LpC4nab2NN_FOU4pv?5AN;`!9BsnzPtD|BsKGG4!$Q1sssI^bq>a2*u%t7uw9w-Z(t{&!MXbI z1V;7E8nRW5{Kcr5<$UJL=PO_iILc@Qj(n1M&$Vos$-N$mLGRnR%-OyT z(GpVKRoD4^bN4UFR!{j+c+U)bnnI7*K&`sswTF>o)`wy zeQoMg&CcHz6!tOI(finWGQZ`wUa}lyK;Jb#?#N^Gi=l)lW4OGh5yl zicqF^zIy%3b-ViMqpZyR-tGA8KZ&;eyW5Z%D_#OpL_~zWtNIC)D5P1c)` z1d%lPa&20ufBTT6T9e|Y6#M&B8&w_XJr9wby36_G?h2OAY0h--uYI(U%rmpBbzR;9akUEsL zj^l!>nx%?b?VP>!EM%QrDHTC9!B!&;smr4X0l^_vFX|DeQ)@7oEkI2~NR0xn2G#BXX_QrkrX^4eoy`Tlog3JKP4Sm( z(9&qPp)`H_;6&87vw`SBmIhMi7O!>$eqa3?kWX;hkS(I;Mx!_%RSq~G?-XXuP*>s8 z8-o`8_t52%YL?n8*jnkH?~aA&^jHD}DcgzYk=Ko{_fxJpf8h3C(fW!-5{_mIIQ4FC zrlr3~e`2{a^8-Y#)%X_|mGc8v@b2Ds3D(|N;bT_t_>*z_Q)ju&up~~RcW>UY{2<30 z5F%w*$HVq6k1W{VOOmKVBLBhe(AXYmJGQ(_u+Coln5ojvo$G-&Wr+e@h& z(Igu;HD&EytJ^KEa_Y>xy{xH;MK7MXWo2cI`ghI=l(?uW2n{dYz4;{TB&j$#IS-ae zYiZV77-9}VZj69)dLrpNwrnu}1D-YM4%S!CWEx(Nf#D$Qr~49)kAHT-BkhrwEmhtc zKU6GJIbP45^S0yvWkXHloL|WFGWZ6=YVl~w#Ab>Q9<1O+^l*hGvH*389qOouobSVs z{1WTZd)VZKU(6!_$l9Mq(_Y60hfz?Ljt#k9ROkW#V=QpAa}VR7v0%nyEzwz(@5=mC zklEwOI8gjD8-fMRE#QTj4l=t7CV9Y6B5Mz8j<5DVbJ<33G$4A%g(CUxt-Zt5A&{{z zVZc|LK0E_VWY&HlroVbnl{Lx~B^k^`QFtR_s_iKv)Zw=He=K^QC%X98NnF4XRt|vQ z7a724H}11{8?P7h_kHBXxZ3ECX=AyFSLufyr;aU4w1Lw~Buu#*)X;dsllDfY9%yORT^5#ifT%X(?ni?m_0O9CkQjT@k zpuFSuU8yeQK}`JlN|z{e?7RjZ_RN@QU*%LL-rJbad2a09Vm;t^o9B;AxDXK?4GQ3% zws%v5Kem-M>DOYD{bnq9{l;rB`B6V0k9sJ*^xb`VZZP;Pjsro%2})slU?s~>w;lcn zGf*#y9fcb>L5XU-+JLdl%M+@YC%y=?V3i`C;I-AgDC^rmxT(Jj#*f-MO3AAaXD>N% zM?)X+Ufx+#sP%nN_2k!Znqpg%c6u3|-r!rj8YA4bw3yr{vQuLS1A;52N!{1^60IYi z)uWJ=X1wbo+>a|+xR}BLatr?&OG9=2YW?XydoOZeao3@m<@t{?G1PN~4}+5_yH#yC zrqk>jJ}_1Dt#2}x%Pc5Q@pIHEyPW{X=k@bvJzH2OZUv47fBmVPUKdUFBAer>HHEy& z$+b=S*TzRIA)W~x*ZyDN>c1|+ z>r?puBZT>1--BoQzxE~h|NH;{?$@*#D-HH%Z0zmB!xC*e7ziM(?GMJ)p6(pdz@`x1 zn<KE%N)od0&sncN1g7S6&92*=3 zzL(jPHf>V;!mooCBHC4L-7$?e*V5Pt|J-FkX_kyIhddfMW1msHaqM;u?7Ft;&!&4Kznhb7{a&EDq8MNkq~iUq@#sLRpec+|U7}bXJr*N6zS@CEh=eXtt!Oq1>v~JmxMFG#W7+ z54kf|=s4;kYI>Al2`ZA3bXN=lYvj_Qn$l$s7*ubxs}w62jcE8&`~Ohax>e=Vp9zeQ zS#Rko)g}5=iJW-p8Am<7D5JO3fAUjiA?_{k{)C$_g4G|8ZDk1$pkHCy|1=LQ^{ZcP zFN^zk`?h?hM7iV~zHbO5An$I$A{py|lsxjbZ%P$qR+XWS&gf)7qRAl+YZl}y!Ax%6 zOgWZU-Yq&ulS=Tr2 zjKQ@in2Bm$N-oZ)l$?pUeeys&=OB+f-^Z|Y#@joz{2F!@y5|4{YI}?8)p)4E)}|*Z z+hES{`gv(#+Ag$_78MvNnR^@W-6k+lhwa=hme`Ihye}!f@i?yi#2KnH>7qXYL~GjB zVjgf&sPuUsPLT@PkTugOvahpZdM8?sz996_E+WWtQkCCbRy}eoUpN4V`mF=hH~E1J zpDQ!ow3N@l+iUcX$y&{Qy!;K#;VKu5@T|DX|o0`hoaouh|EDn3BFH#&Y70f(;c}t)~hkl`O2hKs3>A3%Nq(f zr!d&`{hstGtj;w>g-s0KNo6kf=J1AQ)|uhqRK^6j_%mO)qAhWK=!eDnhaF^Hagdf8 zuwez(Nt3W)(knILE7FjMK6MHU7I4JGVpV%wYr&Y2%?y&uJITRF7VHLW*xccn5^&^f zX9f8-8&L{HxggV>3!>v|m;n5;9!i($dLbBGCmsB}A;8yLSSbgTknSZ!&&RSRWgMKd z+h?Z9=*fp{q5;|>Hr|-g)~(JZT^SDm)Cf+x7Q82_lAf-VIyx)%rQW`}RE=f#>dg|e z3Tl1F%k>VUeMnE?r4ZBe!L2avP%J12^G$;Zm#d+=IWG%(# z^0MLt*1FMcP_LN&-tddVU?Ztl2ogGRCgpBHs{?!ZKt53Eu07Lt-4rI%KvdWZg|`Co6@P`D6gikW=>IFd5mrXS`;xxvAe7!94=$vqqd ztP0eh&b5W*x`f3%Rp2C!MwOd=8|5+IpTqL+bVtHebL4*V>=95hP%5lucZK*zra;nh z<{G$dA(%YU9-mvYad2Z{>~D)$MU{LYk!)>FQP|xQ%lm3?r)MBQ`|Y?swud2|1BM^| z274wnR_&+?4OjFi-Y_x(6< z$|G+O8sYFkF|7(4JWGMR+JMmCWl)bg%$u0Bp_hH)EHeAGp#Fis8A=Z!brtg_MbQmK zE*LmNz0B#yP57EMUg)?(F*0)FR>f(HPuJ=kh|`GXP((m#C@HUv8Vx?jL4E9uW=&8vZ)M7WYf3vljo?_u16V0Aeg@^u&sMR6-g_lXx{pg;WG#hkQ{RzViwD_YK=SQ zQ-k%pR~*pro?K&Ms(OSdIp-6zyNEblKb5JmPJ4cSj!Sy90&JmUu~dh{yA4 z>Z+exD;AEZG{@(0nj<8Xka-L-zf2&qviV)WV%Ll_?rf-Q75N1l5GzE6o$HODsSTli zzX6~9piAMPmowElKA9E+I)F%dqX0`G#0 zw=-6H{WBU+RRhvk>vOfI1UIg<$5wc7pK)^}k5^N-(0`KkzJQ7_XiDotehc>6qDhmx z-~WR!3C@b9BNGPGS5e%kG?!_8E-4{G2V-KbW`H%0&HGxPIQLBqJm1YY?SK@sRUv>FNL& z74!}n#dmzsmTia9(RtJ>vq-wzBr89c*i=_T3W5%* z?-Wmp3v(k+dDn4>j64*o<8bYDxO!Iwacc&pT&qqgMF4N2QXA#QFkfRlnSyH%&0%_LL7CyGGurLNBQ*PB$hlbunD_Z9Jfn z{HuwPxM=1aoT0_IaR0Nw_6@h9(NP)*d0s-^w)`fXi=H*13>IS^<_k`f!?p6SyBjR| zrx9(ILLWkou2;vcc?cGVB@69boNZqtU6I20s-p$P2W6C-GJ11jAXPbqCaGx8(Hjw| z%f*da2TN_I*Iyds@??*|2AsrLZ|y!AP&BiP86f{q|7dRI_*jRo0IN}nV(H<0zWSI* zAVG!adn-ds6o|IjX|}7NC7QiN5itC2YjZo)F(&(I;ypdk$MtyYpAMz3flceI_8X#6 zrZGQ$zG}rb(qpyp`U}q_0)8k9Nw>hcZ{Gc(TzmFVdQ*fttke(m5In$tAKZ0ij}74P z9&46$au4CG;F1;I`9X0;UFohOF0#`u-ov%qV=>{Ww{kz{QW+>h{278j(r4EnDNRA` zKcX z4Ivr>dBFrq%>TfV!FA2OM&XS$;Vs{Q2TEj*Kg;|WZ!QW zKI&AbOtmfn+yNnUewqBdIx&;Gl_OljsSX->ZWmR`OIh>R8P6w%%s7Jb0>&Q%;RY&d zxZkgH4;IvfDYdrvJ27MsU}sG1ZeG zxs1^jWGrKjgMZrNn|VhdC!QqPx$kw8=Sv%N)$47=z34N;SVt*vd;0;Un?5w4%snS0 z{rJV5mw((TU6(CV$dS3Y*y2a4GFE;^oTee;fcv@SbLO&~js)o~)RZgd=4pJwedk>j zy-B+HuNcR1PiC9B_C>gNP&NaP@X4PN@Wia|tbE%eh{W%%0$y)3zigK8y@`&Xc#@*e0Cu6z$oe!}%q}DEe zOZeDsL=>(-Lo3r~&t7xAvSTJoPAVH>V+acB<@K^LUcFHns!P`C9hS(MLmtIsT>Cz7 zpO3{u!Pn)(^f4h!A?YC0%LLj-MZ8qwKrCcHbKXOvnrQevRUK^**?e#sbi*Hq}|l z?)y>A061+3ru8I9xwA9eb+7=Z-tdGh!50tOyQK}N(Iq}I(pVjqXW0msiHVW@U)=-@ zKp@hXX~!7~4AbDL$0Qo=F_n`D_N2bcN!4~SAf-rht$LmrCr@8fB8@gN($_QOi(9L< zjMMWa?Pv)9cFW|D!UP6?AAo{OXp^L(XbeL4{iVwdi>)|#Z3p|BX$|k+aj3tA4+71z zWY7Ccq6`lnlijuUCdmwBE2%Zw6Cy7Q?`c^1iK&bx;^wO+cQpp1T9%d5aMW+z8wXn7 zt%?R=v7>)ore!`rb$G)@G>Kl#8qO&K30Vsy|wj|*nQG|&uR4y+mXO=H4mLz$DRz~aR z-j6sP>UNNNL(pE7$Y(YkiO7?AgepBMjI{`FU`4%d=Ba!)6eWf^EvXmfHRqosIu!03 z=sCK+?9uenDz)>rL2qUs{1Y5#s@l}VCvKH_dj+TNKKu=$ji{o6Qe=E&#uU@Sz0-Fo zI&+)De&k8JY;r$f-gF1^Tk7XUbTw~!^AZEFId#|9fqL-14-)t0)qdQhmA@k1r7>~t zluPL_Jvsg~ItXNY5C2AuJ6chxysV88EMNlCwQLKis&_x9d&aNc4!;!}Tc52sW!*^s;+2w)CRR&-vieX;5E9KgbE+p+eiPjR*ooaU18do6@86&jU|UArQ$2SRz{KPn@@{| zPCmJW9RW#>HA>CF6*W#}-Zt+9(}(?c=V|}Ji{_MPVdYZYS)SGik%2a>AF%o7r;8e+ zBaNk#vEl?FEk>?chPbbYXp`vmhimSsEY{)HiV6iqTLv;V4)d(>N0x&yI?ugbPBf%! z*;LXcYLI?>ml6&>lxrBs9z4?_Ys>KO_U5e}oZ6!!pNXV`pZXueGhU@r)MGO0KVHL+*~k(xw)_}g~LJsz$ON@>8P}bQ*S>6eXqHb zlt{lia^MENtCg2u%&hIUKMfF;eyNie1PZ%08C}IjS7z7i0rlJg+7dvj%3d6ds_G_ zJ$)ha!BqE=d-`JmC0`b?pxJjSkbv1E(Nw0UXkVQH$(`Oey+1hTH6mmtnrvBf?%-4R ztrI5M@j$C?&wKuJTh!=CN1%1J&C|~*ve9EnN+@szRN~|P#89}zW@Y{{y4%wZuY(p* zX60>@#yl@P%%_F{VFZ>kn~o;{brLS+?T}EEs$getO2l}3VE%!;2h<^w@L0S_MM!m ziSTtny>pV#8*W3zvXKatwJH3&b4r3@3O1@*O7cvWWBy}uumm;;Y^^r$gn>1{zw zxsvAF1oq1B01n0Gmd%9;pIm?f_(R3CxHx;u!aXYQ^YLj?=FQ2e@Y}SK)V&yb3vzCZ zHd{svai`2?T}Pj$$1ee(J}>=^gBxybS|YTH z1-0ekXXlZ+@w{2SE=#6IRcC04$4wljQ}3|XE$*j$NHwi0Bz0a7n9W$<(3dM@1Krio z(UVD8;A!||N-tvCJ%DxC&&9OKffO8jH^ym-!Pm}w`oe7 zsrv_LZ3w_`gEE~WK236B4@siD{ON0n1Fz3_p6Zh&Dg18oGibjpKra3Jea$wxdZx$c zI^Y{4f4O;7hreCOt6=@$Z4e^=?fQsc%Jwtbv8vR7X9xj|$q@y31$Qg9%}!hisWCp+ zkK8ZP!t~ExU=RSV2;;flLH0jHLvdCiN_ujFZ;ISgw{ZDvOIa)GmvV7w#JdcasSUNB z!0sx9wl^b&L(<$89CJWjpcSI;vcrA2Q^|FB&PA?u{BSS~%mz zVk`mDBJnY$CJ#5>voG%qAv5j4`;T1HzRs~;UI@fkqMoDi%Huj08LSx!ujp3{)I`60 z15ebkF;}Xf0ppO`X6v?ixPza!b-sV!MrpY_Q0Z|Xp^>Z>43uGI(l z??s*fP6I;M7?Z@oelndQbQEW*(#nCEk%v{WcSl6upzbAH&eH}Gnw2HZk3OHPfnZP( zD7}VQ2ijp?j!C!p4D*#%Z%hLhWIUqCg*#Qeh0cbS4gcM&G4ruBM@>X z+!q-4Kb7%{jt#MrD6xbc0=w%@_W*7&vgF<#)Q%J@a7c1QuN?k-RzjpMNyy zRL%An2c$TfKu}Y%W1bmntYhohez_)#Vrfl`c*JquQUf^ZYDA32f}0>59kJU&tSC6x ze%7)S#TuM-uYwrTL-~p95PFmaDD6WV%~t?Kk)HGf{5-xWyn0cAx6O7SJcX$!;2 zHhQKs0kWj@bXOeJS2)G5tw4Tb)pmz;h=U=G`at9WY^Lj8yV~+9mSnskKBB=-`({zD zg3enW(qHmp)GfO*&KO`YUxZz+TLcxkeV<`hpYJM-vsy8?H#Dp03N1UgVXjaXM$)Tt#OY21M4jiNI%CsgAn~%{&siz2>;=cr=@E+2 zFU!ZPCcREqM-$8jP|%{G+Ink68^Zb(S8K?QmiKwf#;X_Srbtg1EY{LnuhmACc zz(g7sWu=nGcid!izdiZ{X)7I&=-jH8a3dl6D|=tfWC<$N@V`VHyrO_CCT9uNAU821 zL=5T|vESwQ^+fa;WcT$)xF>#_X><;6=7`}d9O_hxs`}SGbV&XSLAlkW#F}^w`QYK)V!%; zmCOgK@=pO_Ckr8%%kmn~d`~bvipGDwB%M^jqAf06b;7kjHFueg2uc9LELodmQl$fP zodHg-s!|M9c_F7;6glgy!J^h^OopeXAXk($IhkitIw_U0*ZV$}hh@rTGn|Ap_qsrD zMJ=dSi)U`>YFw86GZEKD(3nqNK2QQCIj#UVzaPdRkBgxeB969PQRQ$THD-^sYj z+)Vl2VjNR>YUeL!RK@sH;n2BZSPxN%{ihTN zxt;wqxz*<8OI(4u_9;WF>R1enMo0xoRk0g87;e5^=SNHJHkivkv!QiJoJ|<~&UmLW z0E4)^Lx#>bcizkCG0VOVcsYMHnruF{iI~p?HT!Dd(BiwPZgwhi8{xn8knIP-sBX(yS zT`Rc6Yd{W+>K(as4=RsTwPoh{M9?i!d-Ig>2?CD0kNI?{EaS3k9Y~WXspDspSEpi_ z5L3=f%_SZAD4xhby@r8S-%kiBK?k<}=hDz-RocXS#)pRR>2C0{PlHB4W^tE{I%1)* zMI{4L?B6;jh&c!Kk7Q#yqvO@2@O8S4Cy02hkBju=k!ylJ(}b-1R7K2X(B}sdUX~Uz z#rOQj(?*r#Exy>=S`7nv&yJB=uAwKwE4+lasvgZai?U5?{KaQbj7T2hd(`k%$sanZ-hdcKdvzV@*?G`W0ruD zM&8zow*~Xb0c=WZ_#F>h-fNX&OV4_E*Pv^(*5cE!bH#ip*7Z=L1EC*e#w|QHOIA|v zg;o5tFZrkSZgV=kq}C#HWW{emI`>iB)a}|9NrodzZTp{lfO<0*V<`8C*dzmDb~O5N zkM%pXJnh(Ih~T)Qn+q?7Of@w&*Y5g?>tD04 zm+e{-`hX^<*NlL5rLHQz2f~7#_ulSCC16V@zjEnfavyOv)OI*zn2y{QXy@`Q6d0{NtCTeijhzSt@E!>a!X(9XKjEbQzd3 z^J6#5Pz{tOi!p&Ec^i!h&t`gw9ob&-l9B_@pCI^iCesR2(J8)J9s(b^K4&11okbjj zQ^ApfpE64915?V)l_{1(2Fw7wsn7YC*LA^toBU1uL}FV&RGYm{T~QSmvZZw*(#m5S z5?!Zw`1%fQc%8b~i@lKKZ9}QCqvaBTR^QsFT6{RplL|{7;#O;Oh027Y%x-MX*dmuGyrldpCx_UI^XIxZv;#qTRjA%!`AR}mtPD{hz?Kg$wczNZka7ce(JPhEy zx{GB0AexCIKLeNco!j>-Qc(=W9Pe)8zHc~}I%H;NwM?C=jFQo9DAwpu;^lC^;AfJO-e)XItaR_~N{n0Agu)vz#O!N)r`+zkwg@w8<}a=#5n8dlfR@nk8;Vh?KS z$%sBgQ^egVk@>T+ovr7bSDAHz0e4k3R;HvbJE&V?`=M!xuwXmyzRi0t!w2(D*ITpB z5b<^SB!LX5^J6FwZne}a^U{zdJ2SeoDqOw7pCp;@U}DgCm;93T2=Cl za%}|xD+M}%(Io~X`{kYAj-kkcY@9Y)-`*~RRRHNvUaL-eS#CIW*8uyu6XN2 zr>@&P3uE&|N8LHpkcv-ncS1~PV;4dg>?LYaTgSCrST#|#&xPoV!^7hq2}(*PHl>JO zO>Q61+iBu@&a0H0^2w_qQDcWa=}qpJzi3~6+1pkj>By7~l#QJarXpjfikkAyinC0Z z;&(OVJWYs_JLTDeG@~ViaXu5>hYWNHt_cuNhx_Tk{`>0VZVz|yBtNl^XrCJP9s%ta z`%sR`dhfv7shl{4*Ik=KXrXiq|R2MUvRn_WD}57GesP}5M#Q~;iTlM;&eKAszPjxs|NvE|^5D!Dm;1+C7^!(%AWY6}I#KQv)V|__>859>N&WRHQG`snv zHzV?KooCWrQSVfo5l|k#2A8gLeLMnvUgX#2Rg`B^w~NASaTa#2qvye|*DEoY+j&h6 zaPy??F!eP6$v^Uc$?H0^25Vdtd``K+biM9~x7tXR&c4Sk%C7h_*$(ILtL*qzcMw=n z(R9xyxv_IoLePceI4B<%P6yJejZN6AF?thoK+b+<_5V;tH)_IU`G%oZ$(@)sRj zBtr~NmuG>%+GJRql+~+oM3lY~eBGh}6W1L2B?o+t)HyU%nw@^9a$0E_qu)OX4@Iyg zeMlJ*hjc%$ZHIwJq*$EkqVQuF=KBER^R_&r{$9ed-shSv(yys>;t|!d!NeY`@G5zg zKuVX|s&bF)j6$hz3X|I08&;dyf-q$&Hr-qhK7olkUtN8IW^b4qx|S}cX~Lgcqf{5I ziKqDi_8Kvqv2(Hyl+Y9;udj>nUMFgLU;@04-fY! zWT6`4y^zlJGc)sHd0fjtHU_k5IhR}SbFrqgLkn%~$L{@m{<&P`njaW4Dm^XQL_lI3 z697z#lQBqvWAb%kKRW`cu~lqpja(Ai1Xf5Hyu@+WfOLghAXf*G9nm1F)a(HfJP zF@8Iv7dPf@UmKx*EV}9z_<*gw($o1~(H3q#%m@0jebaGcX8Uv1zYRH>?bGD*EITyUTZ&&Uele$@v0{l45$foOE(ykRPYtu_55 zU$!(c#`Y~6)$lMKbjRmA-#w=LIXs*M!-P_?9Day3VK%E!U$Fl|UE~;OcK?NnVRzk6 z_qr_WlHB7D^<6msxS6;=T9X0eT>9YnYZ7%&5iF=wtpEGU*lrUXwFsU2EuCu9cHpa3-JBQu{6Z zG8kpHyR>l|wuo5~kNs0hSyad;-nZvfc1rxU;T+2W2kkj>8qt8|@2Wg09;c`WwyFG%t+0Bt_2YM5XM&R;qIhc!U2oY6Ix_2-Pc>TZy+BJ`9+MBa zsG27AyX!nQ7cQb&;h*UXT=k9Adfk{ezPWC&9%iwBahNd#P#fwe>ClOpPs*71u$P@~s~f$b-wLa6eg;2`s6^3_FD6%cZ30U>E}s z8vv;{)Bs_vmdSWC%lE^gQIdsIFXR;rQWUvB6}iU>qidM5X+-&Zl6Voa@;WcyxELd*FTL;jOo%Q`Kg^R|Om4%9BzJSRmLi9nkbTvW~U4?&{3V zj$hnxEDJOzi*)#E|8P-yoY`>#Uv0>)v`mDk9<9H6C4vgA#5Sw+^l^6Ig$97T`}@Js z04&}t_~uCT^bK>BIh^ADe~KaHp>*N| zeuF`5d@(qHZddan3p0;!E50 z&v?MQdzL4ZEORf4 zr3Gt_xEpG#NB&T4sbu|31AOl2O6D8^9xSi6MMs1%dFd8j&U^$$nO8Y8LW!Lp4n}HT zKRuSg;y~*~v5MVXGq!whSXrGv;IYWKG}E|snHAFza1CS{Z)>v)Y8>bP=4GZ?xrS|S z^>N@%qyd+K`d(2{N+6Qaqb=2fPIckcZq3bHD{wl<&QK~S_w0(v@aOHZ(=D5r6?L(P zPV`8DHM-bG?Aa%Pyf~h#UY(w}?{!PH-9D>fc9P}1rNz2!>S+tH*rE?As%~em(x5kB zjRT1D5GXy*uJcL~6{e@ncGRh1dNNHwdJ2bw*=hghHDVgl%m=^OYfO}eVK*C{m7Or}|lpy^}BOGa2ZNjBZ5ZXe=ODZ)FA$MpGvC(b%R zfu0q6bghRsKt2$EyQWgJB9Ax8LLiecp=?)kx8x-LkXx{nYS-t#_V>v>tL zy|FgD`2vooi%wiwEd?5m≺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 z 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