From 0cafb4deb7f0b708c27bece5998103e55b23b96b Mon Sep 17 00:00:00 2001 From: DXW <1736894304@qq.com> Date: Mon, 27 Mar 2023 19:24:37 +0800 Subject: [PATCH 01/19] 111 --- 111.TXT | 1 + 1 file changed, 1 insertion(+) create mode 100644 111.TXT diff --git a/111.TXT b/111.TXT new file mode 100644 index 0000000..c99fcfb --- /dev/null +++ b/111.TXT @@ -0,0 +1 @@ +654321 \ No newline at end of file From 517e5ba82ad2db96d99f4f3f07abf636c1266ff3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=AE=B6=E5=84=92?= <2494326140@qq.com> Date: Fri, 14 Apr 2023 15:31:27 +0800 Subject: [PATCH 02/19] CJRreading --- doc/CJR_codereading/data/Contact.java | 73 ++++ doc/CJR_codereading/data/Notes.java | 279 +++++++++++++ .../data/NotesDatabaseHelper.java | 362 +++++++++++++++++ doc/CJR_codereading/data/NotesProvider.java | 305 +++++++++++++++ doc/CJR_codereading/model/Note.java | 253 ++++++++++++ doc/CJR_codereading/model/WorkingNote.java | 368 ++++++++++++++++++ doc/CJR_codereading/tool/BackupUtils.java | 344 ++++++++++++++++ doc/CJR_codereading/tool/DataUtils.java | 295 ++++++++++++++ .../tool/GTaskStringUtils.java | 113 ++++++ doc/CJR_codereading/tool/ResourceParser.java | 181 +++++++++ .../widget/NoteWidgetProvider.java | 132 +++++++ .../widget/NoteWidgetProvider_2x.java | 47 +++ .../widget/NoteWidgetProvider_4x.java | 46 +++ 13 files changed, 2798 insertions(+) create mode 100644 doc/CJR_codereading/data/Contact.java create mode 100644 doc/CJR_codereading/data/Notes.java create mode 100644 doc/CJR_codereading/data/NotesDatabaseHelper.java create mode 100644 doc/CJR_codereading/data/NotesProvider.java create mode 100644 doc/CJR_codereading/model/Note.java create mode 100644 doc/CJR_codereading/model/WorkingNote.java create mode 100644 doc/CJR_codereading/tool/BackupUtils.java create mode 100644 doc/CJR_codereading/tool/DataUtils.java create mode 100644 doc/CJR_codereading/tool/GTaskStringUtils.java create mode 100644 doc/CJR_codereading/tool/ResourceParser.java create mode 100644 doc/CJR_codereading/widget/NoteWidgetProvider.java create mode 100644 doc/CJR_codereading/widget/NoteWidgetProvider_2x.java create mode 100644 doc/CJR_codereading/widget/NoteWidgetProvider_4x.java diff --git a/doc/CJR_codereading/data/Contact.java b/doc/CJR_codereading/data/Contact.java new file mode 100644 index 0000000..d97ac5d --- /dev/null +++ b/doc/CJR_codereading/data/Contact.java @@ -0,0 +1,73 @@ +/* + * 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"; + + 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); + } + + 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; + } + } +} diff --git a/doc/CJR_codereading/data/Notes.java b/doc/CJR_codereading/data/Notes.java new file mode 100644 index 0000000..f240604 --- /dev/null +++ b/doc/CJR_codereading/data/Notes.java @@ -0,0 +1,279 @@ +/* + * 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; + + /** + * 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; + + 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; + public static final int TYPE_WIDGET_4X = 1; + + public static class DataConstants { + public static final String NOTE = TextNote.CONTENT_ITEM_TYPE; + public static final String CALL_NOTE = CallNote.CONTENT_ITEM_TYPE; + } + + /** + * Uri to query all notes and folders + */ + public static final Uri CONTENT_NOTE_URI = Uri.parse("content://" + AUTHORITY + "/note"); + + /** + * Uri to query data + */ + public static final Uri CONTENT_DATA_URI = Uri.parse("content://" + AUTHORITY + "/data"); + + 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"; + } + + 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"; + } + + 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; + + public static final int MODE_CHECK_LIST = 1; + + public static final String CONTENT_TYPE = "vnd.android.cursor.dir/text_note"; + + public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/text_note"; + + public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/text_note"); + } + + public static final 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"); + } +} diff --git a/doc/CJR_codereading/data/NotesDatabaseHelper.java b/doc/CJR_codereading/data/NotesDatabaseHelper.java new file mode 100644 index 0000000..ffe5d57 --- /dev/null +++ b/doc/CJR_codereading/data/NotesDatabaseHelper.java @@ -0,0 +1,362 @@ +/* + * 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"; + + 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; + + 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" + + ")"; + + 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 ''" + + ")"; + + 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 + */ + 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 + */ + 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 + */ + 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 + */ + 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} + */ + 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 + */ + 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 + */ + 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 + */ + 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 + */ + 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 + */ + 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); + } + + 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(); + + /** + * 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); + } + + public void createDataTable(SQLiteDatabase db) { + db.execSQL(CREATE_DATA_TABLE_SQL); + reCreateDataTableTriggers(db); + db.execSQL(CREATE_DATA_NOTE_ID_INDEX_SQL); + Log.d(TAG, "data table has been created"); + } + + private void reCreateDataTableTriggers(SQLiteDatabase db) { + db.execSQL("DROP TRIGGER IF EXISTS update_note_content_on_insert"); + 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); + } + + 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"); + } + } + + 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); + } + + 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); + } + + private void upgradeToV4(SQLiteDatabase db) { + db.execSQL("ALTER TABLE " + TABLE.NOTE + " ADD COLUMN " + NoteColumns.VERSION + + " INTEGER NOT NULL DEFAULT 0"); + } +} diff --git a/doc/CJR_codereading/data/NotesProvider.java b/doc/CJR_codereading/data/NotesProvider.java new file mode 100644 index 0000000..edb0a60 --- /dev/null +++ b/doc/CJR_codereading/data/NotesProvider.java @@ -0,0 +1,305 @@ +/* + * 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; + + +public class NotesProvider extends ContentProvider { + private static final UriMatcher mMatcher; + + private NotesDatabaseHelper mHelper; + + private static final String TAG = "NotesProvider"; + + 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; + + 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' 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. + */ + 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; + + @Override + public boolean onCreate() { + mHelper = NotesDatabaseHelper.getInstance(getContext()); + return true; + } + + @Override + public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, + String sortOrder) { + Cursor c = null; + SQLiteDatabase db = mHelper.getReadableDatabase(); + String id = null; + 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); + c = db.query(TABLE.NOTE, projection, NoteColumns.ID + "=" + id + + parseSelection(selection), selectionArgs, null, null, sortOrder); + break; + case URI_DATA: + c = db.query(TABLE.DATA, projection, selection, selectionArgs, null, null, + sortOrder); + break; + case URI_DATA_ITEM: + 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); + } + if (c != null) { + c.setNotificationUri(getContext().getContentResolver(), uri); + } + return c; + } + + @Override + public Uri insert(Uri uri, ContentValues values) { + SQLiteDatabase db = mHelper.getWritableDatabase(); + long dataId = 0, noteId = 0, insertedId = 0; + switch (mMatcher.match(uri)) { + case URI_NOTE: + insertedId = noteId = db.insert(TABLE.NOTE, null, values); + break; + 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 + 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); + } + + return ContentUris.withAppendedId(uri, insertedId); + } + + @Override + public int delete(Uri uri, String selection, String[] selectionArgs) { + 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: + id = uri.getPathSegments().get(1); + /** + * ID that smaller than 0 is system folder which is not allowed to + * trash + */ + long noteId = Long.valueOf(id); + if (noteId <= 0) { + break; + } + 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: + 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; + } + + @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; + switch (mMatcher.match(uri)) { + case URI_NOTE: + increaseNoteVersion(-1, selection, selectionArgs); + count = db.update(TABLE.NOTE, values, selection, selectionArgs); + break; + case URI_NOTE_ITEM: + 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: + count = db.update(TABLE.DATA, values, selection, selectionArgs); + updateData = true; + break; + case URI_DATA_ITEM: + 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; + } + + private String parseSelection(String selection) { + return (!TextUtils.isEmpty(selection) ? " AND (" + selection + ')' : ""); + } + + 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()); + } + + @Override + public String getType(Uri uri) { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/doc/CJR_codereading/model/Note.java b/doc/CJR_codereading/model/Note.java new file mode 100644 index 0000000..6706cf6 --- /dev/null +++ b/doc/CJR_codereading/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/doc/CJR_codereading/model/WorkingNote.java b/doc/CJR_codereading/model/WorkingNote.java new file mode 100644 index 0000000..be081e4 --- /dev/null +++ b/doc/CJR_codereading/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/doc/CJR_codereading/tool/BackupUtils.java b/doc/CJR_codereading/tool/BackupUtils.java new file mode 100644 index 0000000..39f6ec4 --- /dev/null +++ b/doc/CJR_codereading/tool/BackupUtils.java @@ -0,0 +1,344 @@ +/* + * 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.database.Cursor; +import android.os.Environment; +import android.text.TextUtils; +import android.text.format.DateFormat; +import android.util.Log; + +import net.micode.notes.R; +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.DataColumns; +import net.micode.notes.data.Notes.DataConstants; +import net.micode.notes.data.Notes.NoteColumns; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.PrintStream; + + +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 + 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 + 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.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 + 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) { + 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() { + 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); + } 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()); + 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(); + } + + return null; + } +} + + diff --git a/doc/CJR_codereading/tool/DataUtils.java b/doc/CJR_codereading/tool/DataUtils.java new file mode 100644 index 0000000..2a14982 --- /dev/null +++ b/doc/CJR_codereading/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, + new String[] { "COUNT(*)" }, + NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>?", + new String[] { String.valueOf(Notes.TYPE_FOLDER), String.valueOf(Notes.ID_TRASH_FOLER)}, + null); + + int count = 0; + if(cursor != null) { + if(cursor.moveToFirst()) { + try { + count = cursor.getInt(0); + } catch (IndexOutOfBoundsException e) { + Log.e(TAG, "get folder count failed:" + e.toString()); + } finally { + cursor.close(); + } + } + } + return count; + } + + 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); + widget.widgetType = c.getInt(1); + set.add(widget); + } catch (IndexOutOfBoundsException e) { + Log.e(TAG, e.toString()); + } + } while (c.moveToNext()); + } + c.close(); + } + return set; + } + + 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; + } + + 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); + } + 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/doc/CJR_codereading/tool/GTaskStringUtils.java b/doc/CJR_codereading/tool/GTaskStringUtils.java new file mode 100644 index 0000000..666b729 --- /dev/null +++ b/doc/CJR_codereading/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/doc/CJR_codereading/tool/ResourceParser.java b/doc/CJR_codereading/tool/ResourceParser.java new file mode 100644 index 0000000..1ad3ad6 --- /dev/null +++ b/doc/CJR_codereading/tool/ResourceParser.java @@ -0,0 +1,181 @@ +/* + * 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 + }; + + public static int getNoteBgResource(int id) { + return BG_EDIT_RESOURCES[id]; + } + + public static int getNoteTitleBgResource(int id) { + return BG_EDIT_TITLE_RESOURCES[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 + }; + + public static int getNoteBgFirstRes(int id) { + return BG_FIRST_RESOURCES[id]; + } + + public static int getNoteBgLastRes(int id) { + return BG_LAST_RESOURCES[id]; + } + + public static int getNoteBgSingleRes(int id) { + return BG_SINGLE_RESOURCES[id]; + } + + public static int getNoteBgNormalRes(int id) { + return BG_NORMAL_RESOURCES[id]; + } + + public static int getFolderBgRes() { + return R.drawable.list_folder; + } + } + + public static class WidgetBgResources { + 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, + }; + + public static int getWidget2xBgResource(int id) { + return BG_2X_RESOURCES[id]; + } + + 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 + }; + + 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 + }; + + public static int getTexAppearanceResource(int id) { + /** + * 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 (id >= TEXTAPPEARANCE_RESOURCES.length) { + return BG_DEFAULT_FONT_SIZE; + } + return TEXTAPPEARANCE_RESOURCES[id]; + } + + public static int getResourcesSize() { + return TEXTAPPEARANCE_RESOURCES.length; + } + } +} diff --git a/doc/CJR_codereading/widget/NoteWidgetProvider.java b/doc/CJR_codereading/widget/NoteWidgetProvider.java new file mode 100644 index 0000000..ec6f819 --- /dev/null +++ b/doc/CJR_codereading/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; +import android.app.PendingIntent; +import android.appwidget.AppWidgetManager; +import android.appwidget.AppWidgetProvider; +import android.content.ContentValues; +import android.content.Context; +import android.content.Intent; +import android.database.Cursor; +import android.util.Log; +import android.widget.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; +import net.micode.notes.ui.NotesListActivity; + +public abstract class NoteWidgetProvider extends AppWidgetProvider { + public static final String [] PROJECTION = new String [] { + NoteColumns.ID, + NoteColumns.BG_COLOR_ID, + NoteColumns.SNIPPET + }; + + public static final int COLUMN_ID = 0; + public static final int COLUMN_BG_COLOR_ID = 1; + public static final int COLUMN_SNIPPET = 2; + + private static final String TAG = "NoteWidgetProvider"; + + @Override + public void onDeleted(Context context, int[] appWidgetIds) { + ContentValues values = new ContentValues(); + values.put(NoteColumns.WIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); + for (int i = 0; i < appWidgetIds.length; i++) { + context.getContentResolver().update(Notes.CONTENT_NOTE_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, + PROJECTION, + 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); + 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); + } else { + snippet = context.getResources().getString(R.string.widget_havenot_content); + intent.setAction(Intent.ACTION_INSERT_OR_EDIT); + } + + if (c != null) { + c.close(); + } + + RemoteViews rv = new RemoteViews(context.getPackageName(), getLayoutId()); + rv.setImageViewResource(R.id.widget_bg_image, getBgResourceId(bgId)); + 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( + context, NotesListActivity.class), PendingIntent.FLAG_UPDATE_CURRENT); + } else { + rv.setTextViewText(R.id.widget_text, snippet); + pendingIntent = PendingIntent.getActivity(context, appWidgetIds[i], intent, + PendingIntent.FLAG_UPDATE_CURRENT); + } + + rv.setOnClickPendingIntent(R.id.widget_text, pendingIntent); + appWidgetManager.updateAppWidget(appWidgetIds[i], rv); + } + } + } + + protected abstract int getBgResourceId(int bgId); + + protected abstract int getLayoutId(); + + protected abstract int getWidgetType(); +} diff --git a/doc/CJR_codereading/widget/NoteWidgetProvider_2x.java b/doc/CJR_codereading/widget/NoteWidgetProvider_2x.java new file mode 100644 index 0000000..adcb2f7 --- /dev/null +++ b/doc/CJR_codereading/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 + protected int getLayoutId() { + return R.layout.widget_2x; + } + + @Override + protected int getBgResourceId(int bgId) { + return ResourceParser.WidgetBgResources.getWidget2xBgResource(bgId); + } + + @Override + protected int getWidgetType() { + return Notes.TYPE_WIDGET_2X; + } +} diff --git a/doc/CJR_codereading/widget/NoteWidgetProvider_4x.java b/doc/CJR_codereading/widget/NoteWidgetProvider_4x.java new file mode 100644 index 0000000..c12a02e --- /dev/null +++ b/doc/CJR_codereading/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); + } + + protected int getLayoutId() { + return R.layout.widget_4x; + } + + @Override + protected int getBgResourceId(int bgId) { + return ResourceParser.WidgetBgResources.getWidget4xBgResource(bgId); + } + + @Override + protected int getWidgetType() { + return Notes.TYPE_WIDGET_4X; + } +} From 0cef3324dd49fd6ed715e01ca64330ea43bfe22e Mon Sep 17 00:00:00 2001 From: zheyu Date: Fri, 14 Apr 2023 15:51:23 +0800 Subject: [PATCH 03/19] coderead --- .../ui/AlarmAlertActivity.java | 207 ++++ doc/cyw.readcode.ui/ui/AlarmInitReceiver.java | 71 ++ doc/cyw.readcode.ui/ui/AlarmReceiver.java | 34 + doc/cyw.readcode.ui/ui/DateTimePicker.java | 504 ++++++++ .../ui/DateTimePickerDialog.java | 96 ++ doc/cyw.readcode.ui/ui/DropdownMenu.java | 65 + .../ui/FoldersListAdapter.java | 87 ++ doc/cyw.readcode.ui/ui/NoteEditActivity.java | 1083 +++++++++++++++++ doc/cyw.readcode.ui/ui/NoteEditText.java | 286 +++++ doc/cyw.readcode.ui/ui/NoteItemData.java | 230 ++++ doc/cyw.readcode.ui/ui/NotesListActivity.java | 1018 ++++++++++++++++ doc/cyw.readcode.ui/ui/NotesListAdapter.java | 273 +++++ doc/cyw.readcode.ui/ui/NotesListItem.java | 132 ++ .../ui/NotesPreferenceActivity.java | 530 ++++++++ .../.gradle/7.5/fileHashes/fileHashes.bin | Bin 42547 -> 42647 bytes .../.gradle/7.5/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../micode/notes/ui/AlarmAlertActivity.java | 65 +- .../micode/notes/ui/AlarmInitReceiver.java | 8 +- .../net/micode/notes/ui/AlarmReceiver.java | 6 +- .../net/micode/notes/ui/DateTimePicker.java | 71 +- .../micode/notes/ui/DateTimePickerDialog.java | 30 +- .../net/micode/notes/ui/DropdownMenu.java | 12 +- .../micode/notes/ui/FoldersListAdapter.java | 25 +- .../net/micode/notes/ui/NoteEditActivity.java | 284 ++++- .../net/micode/notes/ui/NoteEditText.java | 77 +- .../net/micode/notes/ui/NoteItemData.java | 58 +- .../micode/notes/ui/NotesListActivity.java | 168 ++- .../net/micode/notes/ui/NotesListAdapter.java | 97 +- .../net/micode/notes/ui/NotesListItem.java | 52 +- .../notes/ui/NotesPreferenceActivity.java | 186 ++- src/Notes-master1/local.properties | 7 +- 31 files changed, 5532 insertions(+), 230 deletions(-) create mode 100644 doc/cyw.readcode.ui/ui/AlarmAlertActivity.java create mode 100644 doc/cyw.readcode.ui/ui/AlarmInitReceiver.java create mode 100644 doc/cyw.readcode.ui/ui/AlarmReceiver.java create mode 100644 doc/cyw.readcode.ui/ui/DateTimePicker.java create mode 100644 doc/cyw.readcode.ui/ui/DateTimePickerDialog.java create mode 100644 doc/cyw.readcode.ui/ui/DropdownMenu.java create mode 100644 doc/cyw.readcode.ui/ui/FoldersListAdapter.java create mode 100644 doc/cyw.readcode.ui/ui/NoteEditActivity.java create mode 100644 doc/cyw.readcode.ui/ui/NoteEditText.java create mode 100644 doc/cyw.readcode.ui/ui/NoteItemData.java create mode 100644 doc/cyw.readcode.ui/ui/NotesListActivity.java create mode 100644 doc/cyw.readcode.ui/ui/NotesListAdapter.java create mode 100644 doc/cyw.readcode.ui/ui/NotesListItem.java create mode 100644 doc/cyw.readcode.ui/ui/NotesPreferenceActivity.java diff --git a/doc/cyw.readcode.ui/ui/AlarmAlertActivity.java b/doc/cyw.readcode.ui/ui/AlarmAlertActivity.java new file mode 100644 index 0000000..e9fdb28 --- /dev/null +++ b/doc/cyw.readcode.ui/ui/AlarmAlertActivity.java @@ -0,0 +1,207 @@ +/* + * 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; +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.DialogInterface.OnClickListener; +import android.content.DialogInterface.OnDismissListener; +import android.content.Intent; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.media.RingtoneManager; +import android.net.Uri; +import android.os.Bundle; +import android.os.PowerManager; +import android.provider.Settings; +import android.view.Window; +import android.view.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/doc/cyw.readcode.ui/ui/AlarmInitReceiver.java b/doc/cyw.readcode.ui/ui/AlarmInitReceiver.java new file mode 100644 index 0000000..7f03f69 --- /dev/null +++ b/doc/cyw.readcode.ui/ui/AlarmInitReceiver.java @@ -0,0 +1,71 @@ +/* + * 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); + + 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/doc/cyw.readcode.ui/ui/AlarmReceiver.java b/doc/cyw.readcode.ui/ui/AlarmReceiver.java new file mode 100644 index 0000000..8d7492d --- /dev/null +++ b/doc/cyw.readcode.ui/ui/AlarmReceiver.java @@ -0,0 +1,34 @@ +/* + * 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 {//类:闹钟消息接收器,从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这个功能最接近用户层的包,基于上面的两个包, \ No newline at end of file diff --git a/doc/cyw.readcode.ui/ui/DateTimePicker.java b/doc/cyw.readcode.ui/ui/DateTimePicker.java new file mode 100644 index 0000000..11a8469 --- /dev/null +++ b/doc/cyw.readcode.ui/ui/DateTimePicker.java @@ -0,0 +1,504 @@ +/* + * 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.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)); + }//通过对数据库的访问,获取当前的系统时间 + + 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;//修改标志变量 + } + + @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) {//函数:设置24小时下的视图 + if (mIs24HourView == is24HourView) { + return; + } + mIs24HourView = is24HourView; + mAmPmSpinner.setVisibility(is24HourView ? View.GONE : View.VISIBLE);// 语句:如果为12小时视图则显示上下午选择 + 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/doc/cyw.readcode.ui/ui/DateTimePickerDialog.java b/doc/cyw.readcode.ui/ui/DateTimePickerDialog.java new file mode 100644 index 0000000..b35a4cf --- /dev/null +++ b/doc/cyw.readcode.ui/ui/DateTimePickerDialog.java @@ -0,0 +1,96 @@ +/* + * 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/doc/cyw.readcode.ui/ui/DropdownMenu.java b/doc/cyw.readcode.ui/ui/DropdownMenu.java new file mode 100644 index 0000000..0c4b307 --- /dev/null +++ b/doc/cyw.readcode.ui/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); + }//布局文件,设置标题 +} \ No newline at end of file diff --git a/doc/cyw.readcode.ui/ui/FoldersListAdapter.java b/doc/cyw.readcode.ui/ui/FoldersListAdapter.java new file mode 100644 index 0000000..2c5853d --- /dev/null +++ b/doc/cyw.readcode.ui/ui/FoldersListAdapter.java @@ -0,0 +1,87 @@ +/* + * 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);//设置名字 + } + } + +} \ No newline at end of file diff --git a/doc/cyw.readcode.ui/ui/NoteEditActivity.java b/doc/cyw.readcode.ui/ui/NoteEditActivity.java new file mode 100644 index 0000000..9bbbb97 --- /dev/null +++ b/doc/cyw.readcode.ui/ui/NoteEditActivity.java @@ -0,0 +1,1083 @@ +/* + * 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; +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.EditText; +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.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 EditText 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_RESIZE); + } 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_RESIZE + | 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 = (EditText) 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); + } + + @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(); + } +} diff --git a/doc/cyw.readcode.ui/ui/NoteEditText.java b/doc/cyw.readcode.ui/ui/NoteEditText.java new file mode 100644 index 0000000..334ebd6 --- /dev/null +++ b/doc/cyw.readcode.ui/ui/NoteEditText.java @@ -0,0 +1,286 @@ +/* + * 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.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 EditText { + 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 + //view里的函数,处理手机屏幕的所有事件 + /*参数event为手机屏幕触摸事件封装类的对象,其中封装了该事件的所有信息, + 例如触摸的位置、触摸的类型以及触摸的时间等。该对象会在用户触摸手机屏幕时被创建。*/ + public boolean onTouchEvent(MotionEvent event) { + switch (event.getAction()) { + //重写了需要处理屏幕被按下的事件 + case MotionEvent.ACTION_DOWN: + //跟新当前坐标值 + int x = (int) event.getX(); + int y = (int) event.getY(); + x -= getTotalPaddingLeft(); + y -= getTotalPaddingTop(); + x += getScrollX(); + y += getScrollY(); + + //用布局控件layout根据x,y的新值设置新的位置 + Layout layout = getLayout(); + 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) { + return false; + } + 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) { + int selectionStart = getSelectionStart(); + //获取当前位置 + String text = getText().subSequence(selectionStart, length()).toString(); + //获取当前文本 + setText(getText().subSequence(0, selectionStart)); + //根据获取的文本设置当前文本 + mOnTextViewChangeListener.onEditTextEnter(mIndex + 1, text); + //当{@link KeyEvent#KEYCODE_ENTER}添加新文本 + } 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); + } +} diff --git a/doc/cyw.readcode.ui/ui/NoteItemData.java b/doc/cyw.readcode.ui/ui/NoteItemData.java new file mode 100644 index 0000000..ff52c1f --- /dev/null +++ b/doc/cyw.readcode.ui/ui/NoteItemData.java @@ -0,0 +1,230 @@ +/* + * 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.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/doc/cyw.readcode.ui/ui/NotesListActivity.java b/doc/cyw.readcode.ui/ui/NotesListActivity.java new file mode 100644 index 0000000..9992129 --- /dev/null +++ b/doc/cyw.readcode.ui/ui/NotesListActivity.java @@ -0,0 +1,1018 @@ +/* + * 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; +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) {// 函数:实现长按项目的点击事件。如果长按的是便签,则通过ActionMode菜单实现;如果长按的是文件夹,则通过ContextMenu菜单实现。 + 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/doc/cyw.readcode.ui/ui/NotesListAdapter.java b/doc/cyw.readcode.ui/ui/NotesListAdapter.java new file mode 100644 index 0000000..5c5d3ee --- /dev/null +++ b/doc/cyw.readcode.ui/ui/NotesListAdapter.java @@ -0,0 +1,273 @@ +/* + * 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.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; + } + //否则报错 + } + } +} diff --git a/doc/cyw.readcode.ui/ui/NotesListItem.java b/doc/cyw.readcode.ui/ui/NotesListItem.java new file mode 100644 index 0000000..b89acf7 --- /dev/null +++ b/doc/cyw.readcode.ui/ui/NotesListItem.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.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; + }//返回当前便签的数据信息 +} diff --git a/doc/cyw.readcode.ui/ui/NotesPreferenceActivity.java b/doc/cyw.readcode.ui/ui/NotesPreferenceActivity.java new file mode 100644 index 0000000..75cfd3d --- /dev/null +++ b/doc/cyw.readcode.ui/ui/NotesPreferenceActivity.java @@ -0,0 +1,530 @@ +/* + * 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.accounts.Account; +import android.accounts.AccountManager; +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标记 + + @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; + } + } +} + diff --git a/src/Notes-master1/.gradle/7.5/fileHashes/fileHashes.bin b/src/Notes-master1/.gradle/7.5/fileHashes/fileHashes.bin index 189ef4ff341ab7e8ba72bd214ea8f19913770948..29d469c015b59ea40c640db51c38dfc37fe8af75 100644 GIT binary patch delta 103 zcmdmdhH3g)rVS<%jE^^)N)#&aH)MA^`Mvzh00zs9C(pH*Az-HQO7TF*tGQ6Y)Xln< v+B}Sr8x?mjZFcnd6g&B81OMaz4`G(izQ!z*(>?SAK09x_2~o`;2Bh@>Y0M#3 delta 36 scmbP!mTB`DrVS<%j1M=PN)#$g-e=LjIn`2`hf#B*;tQtDjvk+40T2)lU;qFB diff --git a/src/Notes-master1/.gradle/7.5/fileHashes/fileHashes.lock b/src/Notes-master1/.gradle/7.5/fileHashes/fileHashes.lock index 14ec67ec871ce5f7fb018e6218b8245696b5a56d..c67971fbc12771ec1465c055cf95cdc1d4ef4bdf 100644 GIT binary patch literal 17 VcmZQB7jQf@V;lD|1~6c<001nW1Lpt$ literal 17 VcmZQB7jQf@V;lD|1~6bU0RSwT1LFVy diff --git a/src/Notes-master1/app/src/main/java/net/micode/notes/ui/AlarmAlertActivity.java b/src/Notes-master1/app/src/main/java/net/micode/notes/ui/AlarmAlertActivity.java index 85723be..e9fdb28 100644 --- a/src/Notes-master1/app/src/main/java/net/micode/notes/ui/AlarmAlertActivity.java +++ b/src/Notes-master1/app/src/main/java/net/micode/notes/ui/AlarmAlertActivity.java @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package net.micode.notes.ui; import android.app.Activity; @@ -39,58 +38,81 @@ import net.micode.notes.tool.DataUtils; import java.io.IOException; - public class AlarmAlertActivity extends Activity implements OnClickListener, OnDismissListener { - private long mNoteId; - private String mSnippet; + private long mNoteId; //文本在数据库存储中的ID号 + private String mSnippet; //闹钟提示时出现的文本片段 private static final int SNIPPET_PREW_MAX_LEN = 60; MediaPlayer mPlayer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + //Bundle类型的数据与Map类型的数据相似,都是以key-value的形式存储数据的 + //onsaveInstanceState方法是用来保存Activity的状态的 + //能从onCreate的参数savedInsanceState中获得状态数据 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); @@ -101,12 +123,19 @@ public class AlarmAlertActivity extends Activity implements OnClickListener, OnD } 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(); @@ -121,37 +150,57 @@ public class AlarmAlertActivity extends Activity implements OnClickListener, OnD private void showActionDialog() { AlertDialog.Builder dialog = new AlertDialog.Builder(this); + //AlertDialog的构造方法全部是Protected的 + //所以不能直接通过new一个AlertDialog来创建出一个AlertDialog。 + //要创建一个AlertDialog,就要用到AlertDialog.Builder中的create()方法 + //如这里的dialog就是新建了一个AlertDialog 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/Notes-master1/app/src/main/java/net/micode/notes/ui/AlarmInitReceiver.java b/src/Notes-master1/app/src/main/java/net/micode/notes/ui/AlarmInitReceiver.java index f221202..7f03f69 100644 --- a/src/Notes-master1/app/src/main/java/net/micode/notes/ui/AlarmInitReceiver.java +++ b/src/Notes-master1/app/src/main/java/net/micode/notes/ui/AlarmInitReceiver.java @@ -34,17 +34,20 @@ public class AlarmInitReceiver extends BroadcastReceiver { 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); if (c != null) { @@ -61,5 +64,8 @@ public class AlarmInitReceiver extends BroadcastReceiver { } c.close(); } + //然而通过网上查找资料发现,对于闹钟机制的启动,通常需要上面的几个步骤 + //如新建Intent、PendingIntent以及AlarmManager等 + //这里就是根据数据库里的闹钟时间创建一个闹钟机制 } } diff --git a/src/Notes-master1/app/src/main/java/net/micode/notes/ui/AlarmReceiver.java b/src/Notes-master1/app/src/main/java/net/micode/notes/ui/AlarmReceiver.java index 54e503b..8d7492d 100644 --- a/src/Notes-master1/app/src/main/java/net/micode/notes/ui/AlarmReceiver.java +++ b/src/Notes-master1/app/src/main/java/net/micode/notes/ui/AlarmReceiver.java @@ -20,11 +20,15 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; -public class AlarmReceiver extends BroadcastReceiver { +public class AlarmReceiver extends BroadcastReceiver {//类:闹钟消息接收器,从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这个功能最接近用户层的包,基于上面的两个包, \ No newline at end of file diff --git a/src/Notes-master1/app/src/main/java/net/micode/notes/ui/DateTimePicker.java b/src/Notes-master1/app/src/main/java/net/micode/notes/ui/DateTimePicker.java index 496b0cd..11a8469 100644 --- a/src/Notes-master1/app/src/main/java/net/micode/notes/ui/DateTimePicker.java +++ b/src/Notes-master1/app/src/main/java/net/micode/notes/ui/DateTimePicker.java @@ -28,7 +28,8 @@ import android.view.View; import android.widget.FrameLayout; import android.widget.NumberPicker; -public class DateTimePicker extends FrameLayout { +public class DateTimePicker extends FrameLayout {//FrameLayout是布局模板之一 + //所有的子元素全部在屏幕的右上方 private static final boolean DEFAULT_ENABLE_STATE = true; @@ -45,13 +46,16 @@ public class DateTimePicker extends FrameLayout { 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; - private Calendar mDate; + //NumberPicker是数字选择器 + //这里定义的四个变量全部是在设置闹钟时需要选择的变量(如日期、时、分、上午或者下午) + private Calendar mDate; + //定义了Calendar类型的变量mDate,用于操作时间 private String[] mDateDisplayValues = new String[DAYS_IN_ALL_WEEK]; private boolean mIsAm; @@ -71,41 +75,48 @@ public class DateTimePicker extends FrameLayout { 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)); @@ -117,15 +128,18 @@ public class DateTimePicker extends FrameLayout { 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()); @@ -145,6 +159,7 @@ public class DateTimePicker extends FrameLayout { }; private NumberPicker.OnValueChangeListener mOnAmPmChangedListener = new NumberPicker.OnValueChangeListener() { + //对AM和PM的监听 @Override public void onValueChange(NumberPicker picker, int oldVal, int newVal) { mIsAm = !mIsAm; @@ -161,23 +176,25 @@ public class DateTimePicker extends FrameLayout { 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)); - } + }//通过对数据库的访问,获取当前的系统时间 public DateTimePicker(Context context, long date, boolean is24HourView) { - super(context); + 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); @@ -215,22 +232,22 @@ public class DateTimePicker extends FrameLayout { } @Override - public void setEnabled(boolean enabled) { + public void setEnabled(boolean enabled) {//方法:将转轮设置为使能状态 if (mIsEnabled == enabled) { return; } super.setEnabled(enabled); - mDateSpinner.setEnabled(enabled); + mDateSpinner.setEnabled(enabled);//语句:分别对四个分部件设置使能 mMinuteSpinner.setEnabled(enabled); mHourSpinner.setEnabled(enabled); mAmPmSpinner.setEnabled(enabled); - mIsEnabled = enabled; + mIsEnabled = enabled;//修改标志变量 } @Override public boolean isEnabled() { return mIsEnabled; - } + }//函数:判断当前的时间日期选择器是否处于启用的的状态 /** * Get the current date in millis @@ -240,7 +257,7 @@ public class DateTimePicker extends FrameLayout { public long getCurrentDateInTimeMillis() { return mDate.getTimeInMillis(); } - +//实现函数——得到当前的秒数 /** * Set the current date * @@ -251,7 +268,7 @@ public class DateTimePicker extends FrameLayout { 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 @@ -269,13 +286,14 @@ public class DateTimePicker extends FrameLayout { setCurrentDay(dayOfMonth); setCurrentHour(hourOfDay); setCurrentMinute(minute); - } + }//实现函数功能——设置当前的时间,参数是各详细的变量 /** * Get current year * * @return The current year */ + //下面是得到year、month、day等值 public int getCurrentYear() { return mDate.get(Calendar.YEAR); } @@ -422,12 +440,12 @@ public class DateTimePicker extends FrameLayout { * * @param is24HourView True for 24 hour mode. False for AM/PM mode. */ - public void set24HourView(boolean is24HourView) { + public void set24HourView(boolean is24HourView) {//函数:设置24小时下的视图 if (mIs24HourView == is24HourView) { return; } mIs24HourView = is24HourView; - mAmPmSpinner.setVisibility(is24HourView ? View.GONE : View.VISIBLE); + mAmPmSpinner.setVisibility(is24HourView ? View.GONE : View.VISIBLE);// 语句:如果为12小时视图则显示上下午选择 int hour = getCurrentHourOfDay(); updateHourControl(); setCurrentHour(hour); @@ -446,7 +464,7 @@ public class DateTimePicker extends FrameLayout { mDateSpinner.setDisplayedValues(mDateDisplayValues); mDateSpinner.setValue(DAYS_IN_ALL_WEEK / 2); mDateSpinner.invalidate(); - } + }// 对于星期几的算法 private void updateAmPmControl() { if (mIs24HourView) { @@ -455,7 +473,7 @@ public class DateTimePicker extends FrameLayout { int index = mIsAm ? Calendar.AM : Calendar.PM; mAmPmSpinner.setValue(index); mAmPmSpinner.setVisibility(View.VISIBLE); - } + }// 对于上下午操作的算法 } private void updateHourControl() { @@ -465,7 +483,7 @@ public class DateTimePicker extends FrameLayout { } else { mHourSpinner.setMinValue(HOUR_SPINNER_MIN_VAL_12_HOUR_VIEW); mHourSpinner.setMaxValue(HOUR_SPINNER_MAX_VAL_12_HOUR_VIEW); - } + }// 对与小时的算法 } /** @@ -473,10 +491,11 @@ public class DateTimePicker extends FrameLayout { * @param callback the callback, if null will do nothing */ public void setOnDateTimeChangedListener(OnDateTimeChangedListener callback) { + //函数:根据参数设置时间日期监听器 mOnDateTimeChangedListener = callback; } - private void onDateTimeChanged() { + private void onDateTimeChanged() {//函数:监听日期时间的变化 if (mOnDateTimeChangedListener != null) { mOnDateTimeChangedListener.onDateTimeChanged(this, getCurrentYear(), getCurrentMonth(), getCurrentDay(), getCurrentHourOfDay(), getCurrentMinute()); diff --git a/src/Notes-master1/app/src/main/java/net/micode/notes/ui/DateTimePickerDialog.java b/src/Notes-master1/app/src/main/java/net/micode/notes/ui/DateTimePickerDialog.java index 2c47ba4..b35a4cf 100644 --- a/src/Notes-master1/app/src/main/java/net/micode/notes/ui/DateTimePickerDialog.java +++ b/src/Notes-master1/app/src/main/java/net/micode/notes/ui/DateTimePickerDialog.java @@ -32,18 +32,24 @@ 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); + setView(mDateTimePicker);//添加一个子视图 mDateTimePicker.setOnDateTimeChangedListener(new OnDateTimeChangedListener() { public void onDateTimeChanged(DateTimePicker view, int year, int month, int dayOfMonth, int hourOfDay, int minute) { @@ -51,18 +57,18 @@ public class DateTimePickerDialog extends AlertDialog implements OnClickListener mDate.set(Calendar.MONTH, month); mDate.set(Calendar.DAY_OF_MONTH, dayOfMonth); mDate.set(Calendar.HOUR_OF_DAY, hourOfDay); - mDate.set(Calendar.MINUTE, minute); + mDate.set(Calendar.MINUTE, minute);//将视图中的各选项设置为系统当前时间 updateTitle(mDate.getTimeInMillis()); } }); - mDate.setTimeInMillis(date); - mDate.set(Calendar.SECOND, 0); + 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())); + 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; @@ -70,7 +76,7 @@ public class DateTimePickerDialog extends AlertDialog implements OnClickListener public void setOnDateTimeSetListener(OnDateTimeSetListener callBack) { mOnDateTimeSetListener = callBack; - } + }//将时间日期滚动选择控件实例化 private void updateTitle(long date) { int flag = @@ -79,12 +85,12 @@ public class DateTimePickerDialog extends AlertDialog implements OnClickListener 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/Notes-master1/app/src/main/java/net/micode/notes/ui/DropdownMenu.java b/src/Notes-master1/app/src/main/java/net/micode/notes/ui/DropdownMenu.java index 613dc74..0c4b307 100644 --- a/src/Notes-master1/app/src/main/java/net/micode/notes/ui/DropdownMenu.java +++ b/src/Notes-master1/app/src/main/java/net/micode/notes/ui/DropdownMenu.java @@ -30,14 +30,18 @@ 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(); @@ -48,14 +52,14 @@ public class DropdownMenu { 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); - } -} + }//布局文件,设置标题 +} \ No newline at end of file diff --git a/src/Notes-master1/app/src/main/java/net/micode/notes/ui/FoldersListAdapter.java b/src/Notes-master1/app/src/main/java/net/micode/notes/ui/FoldersListAdapter.java index 96b77da..2c5853d 100644 --- a/src/Notes-master1/app/src/main/java/net/micode/notes/ui/FoldersListAdapter.java +++ b/src/Notes-master1/app/src/main/java/net/micode/notes/ui/FoldersListAdapter.java @@ -30,10 +30,14 @@ 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 - }; + NoteColumns.ID, + NoteColumns.SNIPPET + };//调用数据库中便签的ID和片段 public static final int ID_COLUMN = 0; public static final int NAME_COLUMN = 1; @@ -41,12 +45,13 @@ public class FoldersListAdapter extends CursorAdapter { 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) { @@ -55,26 +60,28 @@ public class FoldersListAdapter extends CursorAdapter { .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); + mName.setText(name);//设置名字 } } -} +} \ No newline at end of file diff --git a/src/Notes-master1/app/src/main/java/net/micode/notes/ui/NoteEditActivity.java b/src/Notes-master1/app/src/main/java/net/micode/notes/ui/NoteEditActivity.java index 96a9ff8..9bbbb97 100644 --- a/src/Notes-master1/app/src/main/java/net/micode/notes/ui/NoteEditActivity.java +++ b/src/Notes-master1/app/src/main/java/net/micode/notes/ui/NoteEditActivity.java @@ -74,6 +74,8 @@ import java.util.regex.Pattern; public class NoteEditActivity extends Activity implements OnClickListener, NoteSettingChangedListener, OnTextViewChangeListener { + //该类主要是针对标签的编辑 + //继承了系统内部许多和监听有关的类 private class HeadViewHolder { public TextView tvModified; @@ -83,7 +85,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, public ImageView ibSetBgColor; } - + //使用Map实现数据存储 private static final Map sBgSelectorBtnsMap = new HashMap(); static { sBgSelectorBtnsMap.put(R.id.iv_bg_yellow, ResourceParser.YELLOW); @@ -91,6 +93,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, 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(); @@ -100,6 +103,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, 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(); @@ -108,6 +112,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, 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(); @@ -116,6 +121,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, 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"; @@ -123,20 +129,23 @@ public class NoteEditActivity extends Activity implements OnClickListener, private HeadViewHolder mNoteHeaderHolder; private View mHeadViewPanel; - + //私有化一个界面操作mHeadViewPanel,对表头的操作 private View mNoteBgColorSelector; - + //私有化一个界面操作mNoteBgColorSelector,对背景颜色的操作 private View mFontSizeSelector; - + //私有化一个界面操作mFontSizeSelector,对标签字体的操作 private EditText mNoteEditor; - + //声明编辑控件,对文本操作 private View mNoteEditorPanel; - - private WorkingNote mWorkingNote; - + //私有化一个界面操作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; @@ -145,7 +154,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, public static final String TAG_UNCHECKED = String.valueOf('\u25A1'); private LinearLayout mEditTextList; - + //线性布局 private String mUserQuery; private Pattern mPattern; @@ -153,7 +162,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.note_edit); - + //对数据库的访问操作 if (savedInstanceState == null && !initActivityState(getIntent())) { finish(); return; @@ -176,7 +185,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, return; } Log.d(TAG, "Restoring from killed activity"); - } + }//为防止内存不足时程序的终止,在这里有一个保存现场的函数 } private boolean initActivityState(Intent intent) { @@ -188,34 +197,42 @@ public class NoteEditActivity extends Activity implements OnClickListener, 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; - } else { + } + //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_RESIZE); } else if(TextUtils.equals(Intent.ACTION_INSERT_OR_EDIT, intent.getAction())) { - // New note + // 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); @@ -223,7 +240,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, 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); @@ -240,15 +257,17 @@ public class NoteEditActivity extends Activity implements OnClickListener, 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_RESIZE @@ -269,8 +288,10 @@ public class NoteEditActivity extends Activity implements OnClickListener, } private void initNoteScreen() { + //对界面的初始化操作 mNoteEditor.setTextAppearance(this, TextAppearanceResources .getTexAppearanceResource(mFontSizeId)); + //设置外观 if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) { switchToListMode(mWorkingNote.getContent()); } else { @@ -294,18 +315,21 @@ public class NoteEditActivity extends Activity implements OnClickListener, */ showAlertHeader(); } - + //设置闹钟的显示 private void showAlertHeader() { if (mWorkingNote.hasClockAlert()) { long time = System.currentTimeMillis(); if (time > mWorkingNote.getAlertDate()) { mNoteHeaderHolder.tvAlertDate.setText(R.string.note_alert_expired); - } else { + } + //如果系统时间大于了闹钟设置的时间,那么闹钟失效 + 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); @@ -329,26 +353,29 @@ public class NoteEditActivity extends Activity implements OnClickListener, 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); @@ -357,9 +384,11 @@ public class NoteEditActivity extends Activity implements OnClickListener, if (ev.getX() < x || ev.getX() > (x + view.getWidth()) || ev.getY() < y - || ev.getY() > (y + view.getHeight())) { - return false; - } + || ev.getY() > (y + view.getHeight())) + //如果触控的位置超出了给定的范围,返回false + { + return false; + } return true; } @@ -377,13 +406,13 @@ public class NoteEditActivity extends Activity implements OnClickListener, 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); /** @@ -405,7 +434,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, } clearSettingState(); } - + //和桌面小工具的同步 private void updateWidget() { Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE); if (mWorkingNote.getWidgetType() == Notes.TYPE_WIDGET_2X) { @@ -418,7 +447,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, } intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] { - mWorkingNote.getWidgetId() + mWorkingNote.getWidgetId() }); sendBroadcast(intent); @@ -450,7 +479,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, } mFontSizeSelector.setVisibility(View.GONE); } - } + }//************************存在问题 @Override public void onBackPressed() { @@ -481,6 +510,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, } @Override + //对选择菜单的准备 public boolean onPrepareOptionsMenu(Menu menu) { if (isFinishing()) { return true; @@ -489,6 +519,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, 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); } @@ -506,45 +537,71 @@ public class NoteEditActivity extends Activity implements OnClickListener, } @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: @@ -553,111 +610,170 @@ public class NoteEditActivity extends Activity implements OnClickListener, 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(); + 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( @@ -666,69 +782,101 @@ public class NoteEditActivity extends Activity implements OnClickListener, 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); + 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); + 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) { @@ -739,12 +887,15 @@ public class NoteEditActivity extends Activity implements OnClickListener, } } }); + //建立一个打钩框并设置监听器 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(); @@ -753,61 +904,94 @@ public class NoteEditActivity extends Activity implements OnClickListener, 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, @@ -816,11 +1000,16 @@ public class NoteEditActivity extends Activity implements OnClickListener, * 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 @@ -829,12 +1018,16 @@ public class NoteEditActivity extends Activity implements OnClickListener, */ 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, @@ -842,9 +1035,12 @@ public class NoteEditActivity extends Activity implements OnClickListener, 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 @@ -853,20 +1049,34 @@ public class NoteEditActivity extends Activity implements OnClickListener, */ 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(); } diff --git a/src/Notes-master1/app/src/main/java/net/micode/notes/ui/NoteEditText.java b/src/Notes-master1/app/src/main/java/net/micode/notes/ui/NoteEditText.java index 2afe2a8..334ebd6 100644 --- a/src/Notes-master1/app/src/main/java/net/micode/notes/ui/NoteEditText.java +++ b/src/Notes-master1/app/src/main/java/net/micode/notes/ui/NoteEditText.java @@ -37,6 +37,7 @@ import net.micode.notes.R; import java.util.HashMap; import java.util.Map; +//继承edittext,设置便签设置文本框 public class NoteEditText extends EditText { private static final String TAG = "NoteEditText"; private int mIndex; @@ -46,6 +47,7 @@ public class NoteEditText extends EditText { 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); @@ -56,17 +58,20 @@ public class NoteEditText extends EditText { /** * 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); /** @@ -77,33 +82,43 @@ public class NoteEditText extends EditText { private OnTextViewChangeListener mOnTextViewChangeListener; + //根据context设置文本 public NoteEditText(Context context) { - super(context, null); + super(context, null);//用super引用父类变量 mIndex = 0; } + //设置当前光标 public void setIndex(int index) { mIndex = index; } + //初始化文本修改标记 public void setOnTextViewChangeListener(OnTextViewChangeListener listener) { mOnTextViewChangeListener = listener; } - public NoteEditText(Context context, AttributeSet attrs) { + //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 constructor stub + // TODO Auto-generated construct or stub } @Override + //view里的函数,处理手机屏幕的所有事件 + /*参数event为手机屏幕触摸事件封装类的对象,其中封装了该事件的所有信息, + 例如触摸的位置、触摸的类型以及触摸的时间等。该对象会在用户触摸手机屏幕时被创建。*/ public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { + //重写了需要处理屏幕被按下的事件 case MotionEvent.ACTION_DOWN: - + //跟新当前坐标值 int x = (int) event.getX(); int y = (int) event.getY(); x -= getTotalPaddingLeft(); @@ -111,9 +126,12 @@ public class NoteEditText extends EditText { x += getScrollX(); y += getScrollY(); + //用布局控件layout根据x,y的新值设置新的位置 Layout layout = getLayout(); int line = layout.getLineForVertical(y); int off = layout.getOffsetForHorizontal(line, x); + + //更新光标新的位置 Selection.setSelection(getText(), off); break; } @@ -122,96 +140,147 @@ public class NoteEditText extends EditText { } @Override + /* + * 函数功能:处理用户按下一个键盘按键时会触发 的事件 + * 实现过程:如下注释 + */ public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { + //根据按键的 Unicode 编码值来处理 case KeyEvent.KEYCODE_ENTER: + //“进入”按键 if (mOnTextViewChangeListener != null) { return false; } 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) { int selectionStart = getSelectionStart(); + //获取当前位置 String text = getText().subSequence(selectionStart, length()).toString(); + //获取当前文本 setText(getText().subSequence(0, selectionStart)); + //根据获取的文本设置当前文本 mOnTextViewChangeListener.onEditTextEnter(mIndex + 1, text); + //当{@link KeyEvent#KEYCODE_ENTER}添加新文本 } 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); } } diff --git a/src/Notes-master1/app/src/main/java/net/micode/notes/ui/NoteItemData.java b/src/Notes-master1/app/src/main/java/net/micode/notes/ui/NoteItemData.java index 0f5a878..ff52c1f 100644 --- a/src/Notes-master1/app/src/main/java/net/micode/notes/ui/NoteItemData.java +++ b/src/Notes-master1/app/src/main/java/net/micode/notes/ui/NoteItemData.java @@ -28,20 +28,20 @@ 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, + 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; @@ -75,8 +75,9 @@ public class NoteItemData { private boolean mIsOnlyOneItem; private boolean mIsOneNoteFollowingFolder; private boolean mIsMultiNotesFollowingFolder; - - public NoteItemData(Context context, Cursor cursor) { + //初始化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); @@ -92,10 +93,11 @@ public class NoteItemData { 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)) { + if (!TextUtils.isEmpty(mPhoneNumber)) {//mphonenumber里有符合字符串,则用contart功能连接 mName = Contact.getContact(context, mPhoneNumber); if (mName == null) { mName = mPhoneNumber; @@ -108,32 +110,35 @@ public class NoteItemData { } 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; - if (mType == Notes.TYPE_NOTE && !mIsFirstItem) { + //主要是设置上诉2标记 + if (mType == Notes.TYPE_NOTE && !mIsFirstItem) {//若是note格式并且不是第一个元素 int position = cursor.getPosition(); - if (cursor.moveToPrevious()) { + if (cursor.moveToPrevious()) {//获取光标位置后看上一行 if (cursor.getInt(TYPE_COLUMN) == Notes.TYPE_FOLDER - || cursor.getInt(TYPE_COLUMN) == Notes.TYPE_SYSTEM) { + || cursor.getInt(TYPE_COLUMN) == Notes.TYPE_SYSTEM) {//若光标满足系统或note格式 if (cursor.getCount() > (position + 1)) { - mIsMultiNotesFollowingFolder = true; + mIsMultiNotesFollowingFolder = true;//若是数据行数大于但前位置+1则设置成正确 } else { - mIsOneNoteFollowingFolder = true; + mIsOneNoteFollowingFolder = true;//否则单一文件夹标记为true } } - if (!cursor.moveToNext()) { + if (!cursor.moveToNext()) {//若不能再往下走则报错 throw new IllegalStateException("cursor move to previous but can't move back"); } } } } - + ///下面的代码的作用均是声明获取属性的方法,下面一系列函数都是返回状态值等,用于判断状态 public boolean isOneFollowingFolder() { return mIsOneNoteFollowingFolder; } @@ -214,11 +219,12 @@ public class NoteItemData { 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) { + public static int getNoteType(Cursor cursor) {//获得便签的类型 return cursor.getInt(TYPE_COLUMN); } -} +} \ No newline at end of file diff --git a/src/Notes-master1/app/src/main/java/net/micode/notes/ui/NotesListActivity.java b/src/Notes-master1/app/src/main/java/net/micode/notes/ui/NotesListActivity.java index e843aec..9992129 100644 --- a/src/Notes-master1/app/src/main/java/net/micode/notes/ui/NotesListActivity.java +++ b/src/Notes-master1/app/src/main/java/net/micode/notes/ui/NotesListActivity.java @@ -77,8 +77,12 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.HashSet; - -public class NotesListActivity extends Activity implements OnClickListener, OnItemLongClickListener { +//主界面,一进入就是这个界面 +/** + * @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; @@ -89,7 +93,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt private static final int MENU_FOLDER_CHANGE_NAME = 2; - private static final String PREFERENCE_ADD_INTRODUCTION = "net.micode.notes.introduction"; + private static final String PREFERENCE_ADD_INTRODUCTION = "net.micode.notes.introduction"; //单行超过80个字符 private enum ListEditState { NOTE_LIST, SUB_FOLDER, CALL_RECORD_FOLDER @@ -136,8 +140,13 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt private final static int REQUEST_CODE_NEW_NODE = 103; @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); + // 创建类 + 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(); @@ -148,26 +157,32 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } @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 { - in = getResources().openRawResource(R.raw.introduction); + // 把资源文件放到应用程序的/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]; + char [] buf = new char[1024]; // 自行定义的数值,使用者不知道有什么意义 int len = 0; while ((len = br.read(buf)) > 0) { sb.append(buf, 0, len); @@ -180,7 +195,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt e.printStackTrace(); return; } finally { - if(in != null) { + if (in != null) { try { in.close(); } catch (IOException e) { @@ -190,11 +205,13 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } } + // 创建空的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"); @@ -209,18 +226,21 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt startAsyncNotesListQuery(); } + // 初始化资源 private void initResources() { - mContentResolver = this.getContentResolver(); + mContentResolver = this.getContentResolver(); // 获取应用程序的数据,得到类似数据表的东西 mBackgroundQueryHandler = new BackgroundQueryHandler(this.getContentResolver()); mCurrentFolderId = Notes.ID_ROOT_FOLDER; - mNotesListView = (ListView) findViewById(R.id.notes_list); + + // 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); + mAddNewNote = (Button) findViewById(R.id.btn_new_note);// 在activity中要获取该按钮 mAddNewNote.setOnClickListener(this); mAddNewNote.setOnTouchListener(new NewNoteOnTouchListener()); mDispatch = false; @@ -231,6 +251,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt mModeCallBack = new ModeCallback(); } + // 继承自ListView.MultiChoiceModeListener 和 OnMenuItemClickListener private class ModeCallback implements ListView.MultiChoiceModeListener, OnMenuItemClickListener { private DropdownMenu mDropDownMenu; private ActionMode mActionMode; @@ -259,7 +280,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt (Button) customView.findViewById(R.id.selection_menu), R.menu.note_list_dropdown); mDropDownMenu.setOnDropdownMenuItemClickListener(new PopupMenu.OnMenuItemClickListener(){ - public boolean onMenuItemClick(MenuItem item) { + public boolean onMenuItemClick(final MenuItem item) { mNotesListAdapter.selectAll(!mNotesListAdapter.isAllSelected()); updateMenu(); return true; @@ -269,11 +290,12 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt 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); + mDropDownMenu.setTitle(format); // 更改标题 MenuItem item = mDropDownMenu.findItem(R.id.action_select_all); if (item != null) { if (mNotesListAdapter.isAllSelected()) { @@ -307,7 +329,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } public void onItemCheckedStateChanged(ActionMode mode, int position, long id, - boolean checked) { + boolean checked) { mNotesListAdapter.setCheckedItem(position, checked); updateMenu(); } @@ -325,14 +347,14 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt 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())); + mNotesListAdapter.getSelectedCount())); builder.setPositiveButton(android.R.string.ok, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, - int which) { - batchDelete(); - } - }); + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, + int which) { + batchDelete(); + } + }); builder.setNegativeButton(android.R.string.cancel, null); builder.show(); break; @@ -366,7 +388,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt /** * 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(Unit:pixel) + * "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 @@ -413,7 +435,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt : NORMAL_SELECTION; mBackgroundQueryHandler.startQuery(FOLDER_NOTE_LIST_QUERY_TOKEN, null, Notes.CONTENT_NOTE_URI, NoteItemData.PROJECTION, selection, new String[] { - String.valueOf(mCurrentFolderId) + String.valueOf(mCurrentFolderId) }, NoteColumns.TYPE + " DESC," + NoteColumns.MODIFIED_DATE + " DESC"); } @@ -624,7 +646,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt values.put(NoteColumns.LOCAL_MODIFIED, 1); mContentResolver.update(Notes.CONTENT_NOTE_URI, values, NoteColumns.ID + "=?", new String[] { - String.valueOf(mFocusNoteDataItem.getId()) + String.valueOf(mFocusNoteDataItem.getId()) }); } } else if (!TextUtils.isEmpty(name)) { @@ -664,30 +686,38 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt }); } + /* (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; - } + 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) { @@ -700,13 +730,16 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] { - appWidgetId + 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) { @@ -726,6 +759,10 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt super.onContextMenuClosed(menu); } + /* (non-Javadoc) + * @see android.app.Activity#onContextItemSelected(android.view.MenuItem) + * 针对menu中不同的选择进行不同的处理,里面详细注释 + */ @Override public boolean onContextItemSelected(MenuItem item) { if (mFocusNoteDataItem == null) { @@ -734,10 +771,10 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } switch (item.getItemId()) { case MENU_FOLDER_VIEW: - openFolder(mFocusNoteDataItem); + openFolder(mFocusNoteDataItem);//打开对应文件 break; case MENU_FOLDER_DELETE: - AlertDialog.Builder builder = new AlertDialog.Builder(this); + 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)); @@ -748,7 +785,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } }); builder.setNegativeButton(android.R.string.cancel, null); - builder.show(); + builder.show();//显示对话框 break; case MENU_FOLDER_CHANGE_NAME: showCreateOrModifyFolderDialog(false); @@ -818,12 +855,19 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt 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() { @@ -866,16 +910,27 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt }.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) { @@ -917,10 +972,13 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } + /** + * 查询目标文件 + */ 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 + ")"; + "(" + selection + ") OR (" + NoteColumns.ID + "=" + Notes.ID_ROOT_FOLDER + ")"; mBackgroundQueryHandler.startQuery(FOLDER_LIST_QUERY_TOKEN, null, @@ -935,7 +993,13 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt NoteColumns.MODIFIED_DATE + " DESC"); } - public boolean onItemLongClick(AdapterView parent, View view, int position, long id) { + /* (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) {// 函数:实现长按项目的点击事件。如果长按的是便签,则通过ActionMode菜单实现;如果长按的是文件夹,则通过ContextMenu菜单实现。 if (view instanceof NotesListItem) { mFocusNoteDataItem = ((NotesListItem) view).getItemData(); if (mFocusNoteDataItem.getType() == Notes.TYPE_NOTE && !mNotesListAdapter.isInChoiceMode()) { @@ -951,4 +1015,4 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } return false; } -} +} \ No newline at end of file diff --git a/src/Notes-master1/app/src/main/java/net/micode/notes/ui/NotesListAdapter.java b/src/Notes-master1/app/src/main/java/net/micode/notes/ui/NotesListAdapter.java index 51c9cb9..5c5d3ee 100644 --- a/src/Notes-master1/app/src/main/java/net/micode/notes/ui/NotesListAdapter.java +++ b/src/Notes-master1/app/src/main/java/net/micode/notes/ui/NotesListAdapter.java @@ -23,6 +23,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.CursorAdapter; + import net.micode.notes.data.Notes; import java.util.Collection; @@ -31,55 +32,94 @@ 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; + 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(); + 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) { @@ -87,30 +127,47 @@ public class NotesListAdapter extends CursorAdapter { } } } + //遍历所有光标可用的位置在判断为便签类型之后勾选单项框 } + /* + * 函数功能:建立选择项的下标列表 + * 函数实现:如下注释 + */ 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(); @@ -128,26 +185,42 @@ public class NotesListAdapter extends CursorAdapter { 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; @@ -156,29 +229,45 @@ public class NotesListAdapter extends CursorAdapter { } @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; } + //否则报错 } } } diff --git a/src/Notes-master1/app/src/main/java/net/micode/notes/ui/NotesListItem.java b/src/Notes-master1/app/src/main/java/net/micode/notes/ui/NotesListItem.java index 1221e80..b89acf7 100644 --- a/src/Notes-master1/app/src/main/java/net/micode/notes/ui/NotesListItem.java +++ b/src/Notes-master1/app/src/main/java/net/micode/notes/ui/NotesListItem.java @@ -30,37 +30,43 @@ 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; + private ImageView mAlert;//闹钟图片 + private TextView mTitle; //标题 + private TextView mTime; //时间 + private TextView mCallName; // + private NoteItemData mItemData; //标签数据 + private CheckBox mCheckBox; //打钩框 + /*初始化基本信息*/ public NotesListItem(Context context) { - super(context); - inflate(context, R.layout.note_item, this); + 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); + 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); @@ -69,8 +75,9 @@ public class NotesListItem extends LinearLayout { 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.setImageResource(R.drawable.clock);//图片来源的设置 mAlert.setVisibility(View.VISIBLE); } else { mAlert.setVisibility(View.GONE); @@ -78,45 +85,48 @@ public class NotesListItem extends LinearLayout { } 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())); + data.getNotesCount())); mAlert.setVisibility(View.GONE); } else { mTitle.setText(DataUtils.getFormattedSnippet(data.getSnippet())); if (data.hasAlert()) { - mAlert.setImageResource(R.drawable.clock); + mAlert.setImageResource(R.drawable.clock);///设置图片来源 mAlert.setVisibility(View.VISIBLE); } else { mAlert.setVisibility(View.GONE); } } } - mTime.setText(DateUtils.getRelativeTimeSpanString(data.getModifiedDate())); + ///设置内容,获取相关时间,从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()) { + } else if (data.isLast()) {//是最后一个数据 setBackgroundResource(NoteItemBgResources.getNoteBgLastRes(id)); - } else if (data.isFirst() || data.isMultiFollowingFolder()) { + } 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; - } + }//返回当前便签的数据信息 } diff --git a/src/Notes-master1/app/src/main/java/net/micode/notes/ui/NotesPreferenceActivity.java b/src/Notes-master1/app/src/main/java/net/micode/notes/ui/NotesPreferenceActivity.java index 07c5f7e..75cfd3d 100644 --- a/src/Notes-master1/app/src/main/java/net/micode/notes/ui/NotesPreferenceActivity.java +++ b/src/Notes-master1/app/src/main/java/net/micode/notes/ui/NotesPreferenceActivity.java @@ -47,66 +47,92 @@ 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标记 @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; } } @@ -114,58 +140,83 @@ public class NotesPreferenceActivity extends PreferenceActivity { } 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) + 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() { @@ -173,50 +224,67 @@ public class NotesPreferenceActivity extends PreferenceActivity { 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; @@ -224,83 +292,119 @@ public class NotesPreferenceActivity extends PreferenceActivity { 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" + "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(); + //提交修改的数据 + - // clean up last sync time setLastSyncTime(this, 0); + //将最后同步时间清零 // clean up local gtask related info new Thread(new Runnable() { @@ -311,23 +415,33 @@ public class NotesPreferenceActivity extends PreferenceActivity { 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() { @@ -338,51 +452,79 @@ public class NotesPreferenceActivity extends PreferenceActivity { 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; } } } + diff --git a/src/Notes-master1/local.properties b/src/Notes-master1/local.properties index 9cd754a..6290b01 100644 --- a/src/Notes-master1/local.properties +++ b/src/Notes-master1/local.properties @@ -2,6 +2,7 @@ # as it contains information specific to your local configuration. # # Location of the SDK. This is only used by Gradle. -# -#Fri Mar 24 15:00:12 CST 2023 -sdk.dir=C\:\\Users\\86147\\AppData\\Local\\Android\\Sdk +# For customization when using a Version Control System, please read the +# header note. +#Fri Mar 31 15:41:34 CST 2023 +sdk.dir=C\:\\Users\\86158\\AppData\\Local\\Android\\Sdk From 66f88b663ac92f8f0dab73d6c1320c6bd3a96f25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=AE=B6=E5=84=92?= <2494326140@qq.com> Date: Fri, 21 Apr 2023 14:55:08 +0800 Subject: [PATCH 04/19] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E7=94=A8=E4=BE=8B?= =?UTF-8?q?=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- model/新需求用例图.png | Bin 0 -> 17591 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 model/新需求用例图.png diff --git a/model/新需求用例图.png b/model/新需求用例图.png new file mode 100644 index 0000000000000000000000000000000000000000..f76b5050b3554eb822a6ca66e3be30bc7182e3b8 GIT binary patch literal 17591 zcmZ8}c|6qH|NmPmw@vp}5?Na8LP!i_DYBK_AZsFI&)9}6C8X?2_Mv1OTee~Bl6{%N zkev*Zy++9XJ8$>%`F-yF{&64OnR&m@d7amJo!9bwzK#%0b){3snU6ydbV@~8K^uZ- z??4dE`X7hDH`h5n{0aV{L2E1Bh6;OF=D>%;*0GJ;PWwO<@;y|I^zoe zM>B54?g>E(_f!;a>3W(jjg9DBe4Mnhy<1e^Bc|_D{!lQ>spd-7)<-eM^+gkG!!koT zYjukh3xmm24$tVcv(T`q=MdYysV`;H?o;^3rS|$mnpYXiBm$tz*ZEXSpj4d?XLa=z;REEUWWvz@c>ZnNm(Th}zVX|fmHsl_LL2XB zmpN~!f!C5MU}yQt+Z%7qGkDBUcH;_>CY)<2igX=im}zsRx+X4)Id%K@QiL#SW5U7r zrwze8wN`X{A^EKZsrl`lk(itHSK4paOv*V&n8prMPK|xQ-GO{9PG}Q8Vr@C! zQWrut1b0ayPsmQFA3~~!J9CN=~t(_)q5LvK0dq)AkGo)+0dj(aWp6ssHj+V>L zwY>U8tvsNS#QIqEKa)Cihgr{$?jkmiY}Zdjn(6u4wdbRp0=+CC2`xmGgZ0VHAF9hy z8pTgj#!AvKC0oc3u50bDcCs?i>@yX5+nMV07&0Qgw!aNuQ=A#XQ$k;FBNxHRNP9MCYGOlBqJt0 zIaHKY-h19;sNb?|UZ=^D)S;qWryt#@tjb_k-Q7Pb$67vus83wp_nj`KJAsclLrRQh z-P>Nd8DAmNTw8n7Z8(bJpJhq43XRdQn81YO3PLdlGbhB=DW!8TgA-TXDC& zC`jLdoeB5aEz4;>nene7MwInJ|9*wxGbA00qDacqd9WmLQ^k-c^g_qn_s{Pjuzc?k z=T6i|zl`i*P@>4V{A!ruY*c@TKkOJXCNNhFb|6fpl&3v?g(Rt?W1R|y?yXZD!zO_%SnaC>5-bx6|3?Z*Wb zmrf%lNpg*T$yMf&9(E5`Rt$X(2SS~hG8OG(rp;P&i<2M}?l4${9gA) z{8jr&l^&%`ZC0fRQ`#Je`Z!g$?yjF#h>i8+ySvr(dmq1`*aw>5HUr6S7*xI--XxQ+ z?&Xg--E=RR#T;HUlfOzv{Ep&4Y)Zxpxs6x{QBk>E+WTq{eM=9w+j`HUfv5MzB-d*s z-9!|zss4x`-ba_m@6C;b-|rEe2S$uh$lyOKLHn>EtD9RFhbw_|{^5;h=$Lv;CT_tG(|jkA)ybMCFj@6|Sb zt>k$BVQ5*|4mH6cb`67HdvNxxs$u)C&srCq-gRCli`~+-pp6awB`ZQfXlUnI8U2cG zTbF=pZH@h{6H)Zx+C0kwyD3lBbpQmmj@|S)ETw(z#p3qRpt#`U zTwCmq$$OhfOvBw|wLY&8R`HcX?!8QF?MsO^SMv5X!EycZdMR}3yNY@5I;xqgoR;~I zPVNC)!6h{VwY8IaSM=qS@;0#@%tI=q>e9@#;j~*FC!^MUe1q!>1x5c*H8L)z*={$z z?uL6qV9WwL>~r5QRoq zD;Mo<9ag>aFzvPRqT2VzY@f1Z+&bx|kByP^wsyDUF51_-22A6l`oQn$yi+5TM$99{ zD%B>A?fe)Q-_%rFf1bbwvm0LzgQ>8l3=5oq* zq~P^8^z?s@^ho`_ZbzU$X(RJX~cY8ZOdXa5u~ORIzpLhRD9 z*x`O|l@7YIU3HuOh?7lh5%bj19j)$o%lwRpt|S!cf@**jD-+Lt+0AoUF5)Rg z<6=gyjiq4wxtv27`tkSdq3q+CV2PlLs%(0nmUG}PScBk%TqYOb? zi^Snpfwe-E_;ax$eveYI=TSd#v)arGtIw!^V)l}(e);#vDh<4zt2~`u?Jg!8ShO?U z#_waa>WUsNwP#;e~fZ;Tk# zl39EwW#Xwiy6f_NIm=Wc>L^CtQ=(S|yFF4gp(=LIEqo;$c-ea!~k&DyI=ejdAc*B;bTQnh- zi#(WXunn*1P+y-4OSe}UBuCtcTSUQJT1+)b3^Q9gL^amgMdL;M z488H$z04Km$so7b9h{~OZp|WD%a@GjOU>3i>ig8@w<%I-J08tpy{jB&dVl{<(ZVr- zf*KL?g0ocQmgCh^t0|Fb!;YQ-0>oUt>?+qno9zHs=S0LkcgAjw+9ACJI$_ia&Axjm zaiOpdq`D!gj`hnOYrAhpy8{Rd)T-GhK^;dEW+IRtSx&f0Yx=(~6C0;p0>2GOmEuqP z_vPUldnqdgwtrrnC8(0b%!AoJzC7F?fx9?5Z*3z;Tr)87IHk^NuO6yNhmLucuF!t9 zRYB_A-XjpTO%{qv!dhjo-*h;-Ul-eJI+m*-OxWEZo{1hIn|bdW2Lvl)`5#G%HsyZj z;$O?i-|?u~BLrdEF1qaw_5KQy;&Pgca3@F=+_V~6HJ&!k#PuVx&(HJ(dwhvAv-vDJ zsp&&S*o6_adRYQ3W-DWZiuj3_FzRcpdhwrBJ!Wf`LJ=>(`H#3e6H27Li?8=p(p%c3 z^lSA{H@)+iKhbVc9^#H%%dAjrHM*!K-}k5!-OcVKc2U#KbS+8cf>pbPo2Yb=V=^TT z-Nf`2g!-h53m54)vsE>cQF>lF`7g8N4b-r9zar zwft^4ZC8CCBy3;zF0twdSRINA|rWr2a(q&+?Bc`fJ>#8#O^w?I*2g zn(|3E1N{7yv8A$P4opvzx%yYCF`_*;?fk|%iyyN&njA#B_LZ8lxSd<*HFj@KrD*+= z9*UZ?W%H=ezP}?EXUEpL(0$^LZV}=Vk;K`iO%NsetUtJ%YQ4jr0_@ep0#o~UF6W#QR_n|_HsR%^_$D#*rT<4G93ek z+dnhCCF{s}H!Q@$>v|<*6A1-%lrEN=9*^F!jLnBv472z05EDJ57CrMcs3`*NyvvC9 zm)tt`2uCTh`i~R~1L(O}Vkz?r{)2H2d1K82aZ;;z-vk;*ZgW+DnFaI zMNW}RKB-~P7E3<2k#cDF6Q<`RTB%%Mpz(#zs^kYT)*U=jpI2-f$CoG8fetPY7VJWs zohr(5*>VD&-0W-51$8I(ywf@ZHw>bFQc=bQk~~Besq!Mh023+7q$OZeTqgxb>|+w|P_131zfntgv{>7D?WF&|M*({d``r)%G`^ zhiINTR#ZOOHYDFVlG{Ms+FRvZa#7dq501%?#N5TY^&I4_QvEn`KPI{vCF!E~{BlnT zloyoKt}Q<5_7)Im={okLM~1P1-OS-Lf-bm?;gxKm{m7m|s?OHAJ61Yq+gh)iJ$+@m-WVsn_w(`$ z#rGVK6SJ9%-(3aor~A+G!wpg>=#5)PTFUtx-)j%N=k0`ais9vZp4pYFbP= z9NXP;YQ7DGXe+#TBg)NLh?SJOwcEyQPETK!EVd_-{9%`%EmI`wqa%CAeO@Ujk}@gP zesAivQYT*HkC~C^mCh!*Y+938(N~}-*f9PQXX^yl5tn)W&c!w5KLUB#7x$Lm%SH8- z=9R*vmaWCc+o0sk(%QcdsWVInRIW(&>*g(--j_=1I`?ZrftAYgl+Wp0g*){|)ZVoa z>Y49}yAY$wOz7l%_;#V9TKPLm3L3+&BO|6F55`VQhvW>1Sg&6o@&*N zt<>$x;a1&qIk=Zl<2Kg~3)wLApOxL%1fyAyTt=5j7<_m#`5cu+Q(k*)$7(B?kuFU> z#YF=~A09kKOIbvcCsm^7-?zi?#8AMI5q8;`7Eq4=a_8mUH;RaZU;Qj6sUPblvUy_6 zO|Srj?dN$?gtKC={TJS^f}+QJ`cdq%r1$`Lh4q$cL90$+-y$ZO;!m6V)(zC(o9~4S zx)?wW_H#%#g&y%crc7Vz{`8VI71XyQN&zkpRDSOPOko{a8u)JM;c0F;ENwVf+Kt?q zf|HFsi71BYg!1DFq8sQy>F24Uc`Vb^7Sk#>weuKyiK7gQ??M&<^ikQS;BohPd07ZG zjPukLVR{?oBh{a`3Kw6Cv=mlzR;TVxICVK?z4k5$eFC<1^2PhNH(puE^RjC(cZ8Ej z-27*&VKkw1PeMHB=Mu*JUDc0G)zZEOQCc^TWEBfYp zj;SO19$WPjzrTGE5w(mkDk1W&BrkS#3i=d2SRTI{+PC6F2P*oT(U;!2_i&7>NWLZ5 z8=S##{#Mxf6zb=5!` zN^J7o$A{iu_NHPwKP1ZDwBNJ3id zJ%>Xk69ZL|BGb{j)6$vqlsq<)xPf_~f;U^T?ZCRDT+!X*To`(rqH3or^_xw8drN~( z7YC*%gX+u#NH(er8(r!A$LdA-!Q_7B~0AQTfa3wAHzVhaoszI1)zndP{I0jRIWg*_DIn%zy69X zF!uH1t=jd=tfkEoD8^;A*|4)W*=HJD+j0jxct7jmPH4u>Bkc_M5=lB>N;jXjKOlV` zab~(lSuV%(g-AzoRNb&**LD@$dgBIqJG~PC^0jo-*PxUWfkI!D+G2yC6i^A-RM%)B zCuGe}pa;_g=GbW=XG!?MkH!76cj>Y<)(X~ ztPvlDFcqTaa~guw!;o}kcbzw z#qTk_zf?^6RjB%{?0$%C3E#<@AQ9p@tA(eQ)l+&K5fL0!%dA z?ZRdP$x$LH{^xVB8|nHq&}Uw7?8&_&YkJCa8m)p<{!sM`TO~u~>y<-|@ zBD@$NXiO1HnReWuPlW3r(IOBjkwQkq==(!vO41-P#zox_h?E8-T}*82UYi z@Jzu|FC4=Potg9?|2zQWC}A=@H`K@XS2=TD zKYQ0|jSq+sfuyUykoYQfCCyX1Iy0UI`f;4fQsV^lbK}pdJ^K(0*k27WMCZW}v{V)( zf7zQ@jt%E)9ghrXpm9ZP0Ns*R*aGp5;Ayp@<~~?^<9DzDgQ54DWop+<_eh-(HvM<>=~du8**$WWiz{R^OkV zRsP*8_YxLE_A0Tlz?A3+WW9j>+7HJ4&48g_j!~W|I&4)aZ4!AAo?He<)QMzy?d!E5 z4R0I|cuNcxUJgXb$_B@Q$O|5iFP#g|`~{Y;3BrBfk$71wSiZ!0Sk!b72zoMSrIm$& zp#Jh8#%o3dTm)MT577|ShIUSIzUKD$lB=C-VCRQJ(C3p>78VYtb1QWr#+BlTisB4l zp8gr&y>sv`OJI&1P&J@a2qQ>QqbH7P97{wI*1T988uo@CC=A6J4GLeFGEI@b&j@#a}a=^J9wx7 zJXAZD{{+qP^zo$wNhJM|!RNiDtKI7S9(q310fy;+^D6P}qkr2vw4{WUxBG|YzayzE z>aXFQa|O1_U6Cxt(PF~<2aJmVyL4p%-<|uXwfhTRCQg0ruc70G56I+UGJ=ITJ=wCk zckJLZ3mI{PpXDwXVT{>iN+chGB#vX~l{zmr1IdAp>~UE9jsklm+=iAo1n;~vIQ#Um zz&fN&D$gW@aF)X6;mk&5VZQiJgZI~oqCBYhm+Fn5A%l+}OsYsm*t{)&&p`lwO|a=W z7)1|vBLo*elCNqO==4+9}Xk(B%JMmBJ_q1iy<`cI{MGGcn{o_DenH#ERT%|8Na zb|WKJG*{W)!}jf86iGpTd*VF(bpJ4{!5^2YDGPxXxp!&b8fEYs2Lb*0T_F+-#(Bnl z&JvuRTpTTwfa8Mpek|GnLyEohy2xK%6$peQ0V!uixbhYU&KHdMcFeFfW z5`vyaASujtKYwLD`@Cj-7Zw&GwV?$YV6%7rgPPL!FJrfPiKG|! z15Fz`96mvR`xxj(2$FIMlkwa6n%C4gM?6dbc3&kTn*V9*Q0r~%LfyY?-T4riAowp^ zhtFoA-T$$52^p%f$3JYnVJ?ay83x;Wdbwc=MI=!7tqq&>4rh5(`wC91S-K~~YPg&E z%rx-UaNq;NINJ(zqK9sK%{QIiUD=zM*qhVeAN;(3zc7#3gWOx_wzRtYJhd)Q=wIFm z66k%7jPF@dj^3tZ`{}bz&)$sC0boNJnzo|COiw zaDeChuK=IP|81?@b_yRcb5+Wtbzj!VMyh6y_lNkIxnI-L0{=Q<=>_UoN=aaUa;CpP zp_oqnZeNjm$+6vQrofy%CKLomlT${%egQrW8lEL%1mi~bvKuD8mKesYWw-maGl*=3 z)C3-ArAa-3a=dvoCRfHt6>w>PsIv4EXBhsksgz9|TQ$Z<%DCKKm=eQNQ+)+B{uP`c z$(a`z!Nj4GnbPTjwJ)o4HH<;=;GlsR3Q`!@Wkasb$5u!CgW2sj7c19@8vBAq$_v?O z?gQ)OmN3V9`@Bmm!1oeo)c<*|p{j)!7)Q%xGl!|g!36Zst$LSn<_#L6qWHRj48lC}Fl?49U{h5b< z>7K7@HTndH2f zLqQ#7PEn&T5hrH&mYLK6kMhqT0adE;uclPzU`}fvOi?)7hun~;d{XE49JaFt+Nbd# zwd@C;rQiz#?6IMmMkS2k{{r;X=-DiwLzZ|mDhur6{Ph7`mbl|6S>LzTanA6%@Xi0F zNRk`x&VgsS2QCqJqlYUux6%qDuq$4>t!Dd?9h_@cscrvqYmH7cozdu-qoA3d>mL8@d{ybn)@dzF2B z>xinz=0l7q$WP?r`^f~$S!<<01S;diL{qmCJ zeJQ~KV4}W`X-r?~e0bH8&Si`saD;~4#NGjI9z9{_~@;}>$>1j7t zM_s3W`(d}a@~<>x@_MudN4Kt0g_EfQ$1m67C}@Y=V~4N;$c$2R!;JNCSFCud_k^2Xq@8dG3m^qm)IBiRyZ-VSK{F6N0*;fVE?4 zuRF5>)T^jfVxl#U+C5JT%~whgK{@kx&JW_+7$;L0)$J>RhhKZ*u1juciKG-AZE&lA3r>4R z!-;MN39b`R(l&MUA0b_mD49~lXgn6B+^AexI7oSx>EsuB=j{EELDylLAENOyg#RDy zNmjI}Zy%11WRmrp^6<*H5N~_N6XRag*2G=@O7nwTe1=fHvbP4ptU?E}n&vZ2Vhu(! z?gHf4ja{Gf+)W^Xg^)b(NV{Uli6`I(cZPjSVTwMCrsG&Q#H}guS%maGp-f z2jCC<1NSx)7Q?a`+Kx=lx5n=Xhh2B~FF-Xfk#q_D$L#lacVQ^T{+T~jPDSo?!AkTz zjc%!ar=4pj-K^OS9o9r;g=|M8vNq%t@=pSOpeRg z<{oXUDNQ9PB4ncZ&w-``b#?*q3rwe#ylnN?gGv`}ZFgkxi(r+H9(CY9joXxyVDgkP zs~eNbab!0PD0ahyP@={a8Lo@hg>cWA`uwy(B=UZ*KLa^m20++5%~7M5nGR-T^?XYE zu0lRnm5Sl8#=2e+La+TS8}&!y=J0QZiyDg&vih>Ar#aU1-X$=s{8}28bUoqyd}z)2 z6TbKH+E74X#N#WhPz5NIgdUDy^t&vUPU$P<^d>pyOS&C7GxTIE&?-(k=8jhYpqc3n z&SbAg{FU8xQa_F2h2Ws$BudzZNU^qs1bPHh{jbCw6 z(z6^L_`<2B^3nJMuC-^;sgv!=j_z`XXo_V?#_-(p*{%Hvh~<>w{itj`LVU4cH6V=mUDX_Ojm=LhP|E_tGdQ;#J8!6k%sg-(11?C{v9VVtv+@$;g$XvJGDB8eqWOgw*9vxrYrOwa32Zw}@+ejKlf7GV*+k|oOkmtH%l9U9xiqk}lOmunGqg*_Tl zkkzS%B0eDT54<5Xl1408-QxCH3nhL?)+g%uA)(3hYBK~l)5D7`85Qgx7PaUD4i^6FTn*#XzE}bx0ZhKV-CNf$FR>4J(@^uDk@`vb59otL(`uIKasBDy z-po2EpXjL|x3;7Gsn42!G5{dW&k#%jb_gp#jEhOphH2-C4?gBn74uZ%2uoh{Y;IkE z*saS(9!o{?t0|Z^6n5$5Hp`f-hb}gz0C(cKb{Iubf&fnC?jS8BcnjbRajSsLiUW@K zK&G2SQp#_O&o$Rxxas}nMpQTyH6T+E-cZmD>-_o^;9(xpaK znq&JeIs=w+i{7EgD2CFd&H9R7c5^hbF86eM%9`RK|4smDFoG;|L011=w0z!8;(f6q zuQ6M%xp~#wD3hM#l~W_(RjT*Lyy-aV6*1~*bO!wt1iGoi$Hgjl{F7x<4C#KH~#8ir;ePq}L9D9C<;{f_U1Im}Gm!OFLi zk2e>j)+85Ryj5Ps@!4-<(9At4f#np`Ggycm3=fW^d^XHY5k5aI15$)_H4RK1N5|cC zB07}8UmqyQPVtEox82V6c7cW?@oOEGR|9V20$Z$r*=2+vEZ`#6S6i@88)N2cOfor? z(paF=pszDY)lGxT58>h0bN&dA{vcowI1n(jMr(Vax%OTikJ*0L8)t7H7w@bU(w2M6 z=y{hTrG3j^G>r7q@|~+<@Nm){V+ zkf!Xh9|hnA=_svwOa~LjLI|)Gli$6|eV^ETIj@v6Jpc?$h)uw6+rr*gG?hPL>|G*q z^&*r`lS+BV&PbnYf0^_QSy3joxw@RRl$o~>KUR=@)ttAmmo~VQp^Kg)qq3qV4)d#T z0QB*})X9h2q(P9Ya5RkhRq!TC;8TT`6Ri*Tukb>X4YwUI)i{L`3$jd5Fc(|S+&v#ttC{3BZ9{`f&6q98mu2)bfJmXbsVHRjD6@&V1S`OZE^5pm z8l5GywMa6l5h$=fRaNas41Qm7pxEF zzTo%YxrOWgJNMn41j@OfJ{VH_;erWY1lki3B8?su;G59He5u!E&2jPsZR zJlxLp4nQ@b%HtSyZ~zj4{6*&9nB61?nUDqA2Ta+L z)ZbGNigAEib|;N|1)!St0b~yK$YG^|0C0@4NjgxeR#G>5MGxyM?o++F#aaGjG}zwS z_e&Aw!NJ_>eY)6yQwNiyBPr@H4_*P(26yYhLJpG&I$BM003?3^%l!R3)%ZjWcC6~g zpRWKc3c!H$fHri&Uw};*O+Hz`32%j5b|l5n>RHF^971nJ1MagN5ILz9|i7U7Y_ep*X0%>DUz1r zc275L94CXtU_<$Qg-i&KMsnwd9}E}RhE82~6z+i+^Z7PF=nj@)a~Xhe;4DB;*>Ox^ z@&$DmHIG0JKKkFDw<=&4WW-XI*B0NvfVc!bHRUQGdjLOEp{Ng=7mUTzQvrbRA3aYR zw4r;>7~X}6iG$gY)RgH@(f1ElIvYhvIZ$mn=q0B-gjH#C6w~wNVCHZIELsvQ@^6G3 z>IXon8~{pLj@@lP1q0sc0H|dK*bDFgXLD;{X+A_!MlBsJD8Rlp^B?@{hyRloe%cjP8L^ zA^~cyv~qqLwx$MPFEY)rzTt1p4!*hw#yfa$6f~AerwFp#orCdeJ~ATVe}}jdl$VD8 zI>Ygoh;Lf}Z7}op@qzGH$cV21B-!&n9+ zR}n>Vwg(_5_45sQdjPi0qJH2ZC4k(2pUo6NuIL{gvAbZU8-g*q#q77aT=-et^vX&rc6W0Fq{;n;DoFJDoUe+BTw8mf>#$-;cvn ze+N9(-)GbHD2CqQ6TE(y*I7T<>m^03Ja^8NYxL5=i=g#HQsMu5X`8>mN2QM`3RNDj zpTLI`H0%e51323ZwCMr*9p-~{03URMgQ$W#uoFP~%6rrpg^I$9c>^?Vcd(4RAbV1S z_jd9ZAi!i`eLFLg5faat)foXF2aC*%p;vz!)CY)t*kz|9z^}^x++Ke!kYz~#M(*!8 z3dzL)M(*AJeDnbw$M>cS-fMp=@T@UBUpf;QhZR->ysLr@@Z#w~B_IWs{2w$l7Cg%g zxKlL8HBNDu8k7V1_`h~{0uYHl0Q~_jGWLK;-UCb{KVV}(76DHp2S(64_#aT9jvcrJ z41FPN!Tv;$o*sdJ`VDUUuz~fNcvrzfz{%Tfes|@Nq}LT8n?6&$c6b>Nx-?< z{L>G60wrPH0RIS^sVo3WI^oHFz})PCw*;wS{u_BGX+R!5SluiEtC0=7Tm+ly!M6vRbyULA z-h15|)pi$_5J6cHtE=Yhp1|%^cf%pRUSORnx*}%laf6hoD$dQ>( z6mSAK+!A=fhE14Nf7pHvp0)?fLEi)`4)Eyy83zJbf|dndcwPy>+}gZhRu@MW!+LW* z3i8yG|J>0k(5ApL^5fI&%-cByz9R67U@6b^X;-LTXWpJMcaE3ys)nMcO z4A`+rGOSDIL*P+EcpjL{w4s5Gw+cWXWk+Gb#z1#~q2j6R>UCGxdB7o&Mqu5`eW6#5 z=S>%!1Pq6QXH6yER5?3|l)Zt;>oP$3+Pwa!BmR67tR)Pv`EX48>sN94-VL-Hjna6&5 zxp%%H>zY)G=K@|v4h=dX7++ZMiqX9@M``#RfhLuK&{FQDionjZ6n17$@83_QsDHkr zKRTi@6B-o9&*Cj-%BNo@twQ)E4FWq*G0WvQU3EsG6M%d~-q>9jF9x(oxoK|#!+XBO zYe{W_PLJM$h8|ylOOSRwl0jMNXaFF^y)CQn2B2T;%Q^?Hj@eY8{++IkkG?~@yCS8g zrdVl_*1rc7Q{j>Ls!!m$or@GcHO*9`)?kC*fn${NzxZf0V%X%xz{#d)H8@LCv^Bgpd zwF&Xpms<|tDsI;b0|f&kS;|zz&xF+)H{NrK@ExxDDKfwGf3KwRJ8&Y`256up1-O&u zNTnz4(tmH833OPsDA`*xY#%AeN9^Cwk(no*c%HgX+0B(j$l95N>D`@>etey09 z349l;@XA`}Cuk_UaC9(E(!+1LrPIdQja&a~o=oBi=r?T0s$5Pjl`{qRCi2$KrhEyr zH3NWhtbJ{&FtN8)_dc`-gr~pCB22e^8ausgH^Otru5{3~rxk*3kTvFCl}qMtgK43x#JX36w`u3;7Q z&2R}ja@&piY(Jw%M8NkSkA43|qWN(hI3E?4dwOfmfD}=}(N3b^PD!oNyH?6BGJJ9K z5<mmh{=}39sVRgZErW9-9}FbVE=RA${e`= zx4$-)wX|LBL%P_bcjy%pj=4E%7^#msQ?t11PTED!I(Sz_E5B#g_8|^m=%0MNfHTL& z#08TJHsyG2*t8lKeI5MX6EJ$$myWeC*Pf1>zlW9T6K4qN1klzth{7kpHQAAPkBfJo zCkZ&A-X)WwvP!_|Zr@Tjn)LFBvLjqt=|misVMEDk8XuD$V%S zfeCu366CUM@f}P6g!)?dVMJ$@X5pSwIYvEN&&^jd->)a7+i*|Ituog~ebsTDtV=59 zj*$NGBj>(VoqY-=KOlR%{Ye~aviHpeOE=pj+p&m_N8yR0eYTswb8%HjeVLh8ZZ+lJ z7{SUai`^y2-wxQxlf&rK4_|*wR_^PyMrT zQuAcD)AL=Tok-3S0%~RzcLUdh0n9Ho@r-<$LM@PH41d$6DPjk0+hvbmnE`8o3Gy<#W9murS zb5M*eF_~-ZKu1q?iP9zy2IpXYKX|`>?eh9Gc2;k0RBs5m&~W0lo+v0S&H z9gT8Q4_-CyPm(za2?E4=Bdo`#%*VW<9QW{5VvKG@Vja}<;JrwHz6>$3k#k7OCJ+}u z)W3rA$fO&S9kfUle!p`SeK%iStX+P4rY}(UkyIW|$?(3%u@{P%o>yYPsSf-=u9&DLPLuc!{--CdbLCHHTzP0exJoFn3r zGb3Ke;%0L_2vi#Z><-qUfIvsgeB~!)f~>^RSG4=^9|yIGMtjBY0rfrjYQ~CZ$7xP* z9b(rp+z|n>fvT@4)1}40Gx;yKIvm_$-_a*P*Kij&LaB_(_;yABqN})Jg;ZRMmug;k z?(VZeHP4ZBHt!`*Gpf-0gM!|lIeH#+6HL@dd^__;EdTss>JYd!KEf2hLDw(>5--|0 zW3BmivXJW_p$sHn#|oDLrvU!uz<%~2e-H5b-`5!CKnFZ)mEHxnDsXxBw>_VFFbh-< z(q<)a{Y)F&AA#>C@U;lrG5E8CcPum;1(VujwjRHJeb2Q5{Go+aaH$>q$pT4zjux69 z2vC~b&P|EpUj%*q0EF*-JXj1y_1quJQkbtP=2lVPCxXsBkmP2Aq&3z3r|#5}cF78< z>M*_0;kW8K;H1@gmhFH$1DoAthrjC<8dwI=!T=Uc0Y{_yp7ym3q-dkw;tvMHwNaw-wFWQhZEqR%@ock{pUrW zCO&UDB2hWM6QDoAGlA#>GsP_TTj$&tiU(Va=6*S3=brf^aVNI zj6>9SMHoW|-u}BthzMVIP9*5Dh|5QV6_VLD+-E^{$9+*q3*{RR{`x`tO6I#{H{@`n zUjazsJ_CfIA>@^}Bn7nWH|~R7Rk)ICt@A`hSsSbZHMy|!>op*2a^l}akLKb*@}7a$ z>_(tW9Qm>jLBpVAtkgzaXLXq`cR5}bH-AVsQ Date: Fri, 21 Apr 2023 14:58:29 +0800 Subject: [PATCH 05/19] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E9=9C=80=E6=B1=82?= =?UTF-8?q?=E5=88=86=E6=9E=90=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/新功能需求文档.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 doc/新功能需求文档.txt diff --git a/doc/新功能需求文档.txt b/doc/新功能需求文档.txt new file mode 100644 index 0000000..5ab58d4 --- /dev/null +++ b/doc/新功能需求文档.txt @@ -0,0 +1,3 @@ +1.写便签的时候加入一些当时的图片或者之前的照片,用来记录当时的情况或者情绪。 +2.小米便签背景太过简单,不够美观,想要加入自己的图片用作背景,满足个性化设计。 +3.有一些便签,比如密码或者私事怕忘记想要记录下来,但是又怕被别人看到,想要创建一个私密的空间,需要密码才能进入,极大保护了用户的个人隐私。 \ No newline at end of file From 44ea8581d670578c3eb61ac1010b4bcd0d15c36e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=AE=B6=E5=84=92?= <2494326140@qq.com> Date: Fri, 21 Apr 2023 16:52:37 +0800 Subject: [PATCH 06/19] =?UTF-8?q?=E5=88=A0=E9=99=A4=E9=9C=80=E6=B1=82?= =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/新功能需求文档.txt | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 doc/新功能需求文档.txt diff --git a/doc/新功能需求文档.txt b/doc/新功能需求文档.txt deleted file mode 100644 index 5ab58d4..0000000 --- a/doc/新功能需求文档.txt +++ /dev/null @@ -1,3 +0,0 @@ -1.写便签的时候加入一些当时的图片或者之前的照片,用来记录当时的情况或者情绪。 -2.小米便签背景太过简单,不够美观,想要加入自己的图片用作背景,满足个性化设计。 -3.有一些便签,比如密码或者私事怕忘记想要记录下来,但是又怕被别人看到,想要创建一个私密的空间,需要密码才能进入,极大保护了用户的个人隐私。 \ No newline at end of file From b8ea085e61250f7174c721220b8528d70cdbc6b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=AE=B6=E5=84=92?= <2494326140@qq.com> Date: Fri, 21 Apr 2023 16:53:45 +0800 Subject: [PATCH 07/19] =?UTF-8?q?=E5=88=A0=E9=99=A4=E7=94=A8=E4=BE=8B?= =?UTF-8?q?=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- model/新需求用例图.png | Bin 17591 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 model/新需求用例图.png diff --git a/model/新需求用例图.png b/model/新需求用例图.png deleted file mode 100644 index f76b5050b3554eb822a6ca66e3be30bc7182e3b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17591 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 Date: Thu, 27 Apr 2023 20:27:36 +0800 Subject: [PATCH 08/19] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E7=94=A8=E4=BE=8B?= =?UTF-8?q?=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/插入图片用例描述文档.txt | 23 +++++++++++++++++++++++ doc/隐私便签用例描述文档.txt | 21 +++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 doc/插入图片用例描述文档.txt create mode 100644 doc/隐私便签用例描述文档.txt diff --git a/doc/插入图片用例描述文档.txt b/doc/插入图片用例描述文档.txt new file mode 100644 index 0000000..d212e50 --- /dev/null +++ b/doc/插入图片用例描述文档.txt @@ -0,0 +1,23 @@ +用例名称:编辑便签插入图片 + +业务目标:编辑便签的时候进行插入图片 + +执行者:用户 + +前置条件: +- 用户需要登录到便签应用中 +- 用户已经创建了一个新的便签或者正在编辑一个已有的便签 + +基本交互动作: +1. 在当前编辑器中,用户点击“插入图片”按钮。 +2. 系统显示一个文件选择框,让用户选择待上传的图片文件。 +3. 用户选择并确认要上传的图片文件。 +4. 系统从本地设备上传选定的图片文件,并自动将其插入到当前编辑器中光标所在的位置。 +5. 在成功添加图片后,用户可以对添加的图片进行调整大小、旋转和定位等操作。 +6. 用户完成编辑后,可以保存或分享该便签,以确保所有内容(包括插入的图片)得以保存。 + + +后置条件: +- 图片成功地添加到了当前编辑器中的光标位置 +- 该图片将在用户保存或分享该便签时一起被保存或分享 + diff --git a/doc/隐私便签用例描述文档.txt b/doc/隐私便签用例描述文档.txt new file mode 100644 index 0000000..541a125 --- /dev/null +++ b/doc/隐私便签用例描述文档.txt @@ -0,0 +1,21 @@ +用例名称:便签中隐私功能 + +业务目标:用户可将已有便签或者正在编辑的便签设置为隐私便签 + +执行者:用户 + +前置条件: +- 用户需要登录到便签应用中 +- 用户已经创建一个新的便签或者正在编辑一个已有的便签 + + +基本交互动作: +1. 在当前编辑器中,用户点击“设置”按钮。 +2. 系统显示下拉菜单,其中包括“隐私设置”选项。 +3. 用户选择“隐私设置”选项并进入该页面。 +4. 在隐私设置页面,点击 “仅我可见”:仅允许当前用户查看和编辑此便签,其他用户无法访问。 +5. 用户完成设置后,可以保存更改并离开页面。从此时起,只有自己才能查看或编辑该便签。 + +后置条件: +- 该便签的隐私设置已被成功更改,并且只有当前用户才能查看或编辑该便签。 + From abd7c0c95c2f3ba185f62cc668f1bd7a74d6512e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=AE=B6=E5=84=92?= <2494326140@qq.com> Date: Thu, 27 Apr 2023 20:46:46 +0800 Subject: [PATCH 09/19] =?UTF-8?q?=E4=B8=8A=E4=BC=A0UML=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- model/软工.png | Bin 0 -> 55771 bytes model/软工1.png | Bin 0 -> 24765 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 model/软工.png create mode 100644 model/软工1.png diff --git a/model/软工.png b/model/软工.png new file mode 100644 index 0000000000000000000000000000000000000000..e440feadb1118f9518b63bad67bcd09315826f04 GIT binary patch literal 55771 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�%@&Zz}iy?_?ijn5q?b_W^zXbMt~P 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 G{Qm%t`7mn$ literal 0 HcmV?d00001 diff --git a/model/软工1.png b/model/软工1.png new file mode 100644 index 0000000000000000000000000000000000000000..6dfe0f19c3d4a5af034cee467cc59062b9fbe563 GIT binary patch literal 24765 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 Date: Thu, 27 Apr 2023 20:58:58 +0800 Subject: [PATCH 10/19] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E7=B2=BE=E8=AF=BB?= =?UTF-8?q?=E6=8A=A5=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/data/MetaData.java | 88 +++++++ doc/data/Node.java | 104 ++++++++ doc/data/SqlData.java | 198 ++++++++++++++++ doc/data/SqlNote.java | 527 +++++++++++++++++++++++++++++++++++++++++ doc/data/Task.java | 361 ++++++++++++++++++++++++++++ doc/data/TaskList.java | 357 ++++++++++++++++++++++++++++ 6 files changed, 1635 insertions(+) create mode 100644 doc/data/MetaData.java create mode 100644 doc/data/Node.java create mode 100644 doc/data/SqlData.java create mode 100644 doc/data/SqlNote.java create mode 100644 doc/data/Task.java create mode 100644 doc/data/TaskList.java diff --git a/doc/data/MetaData.java b/doc/data/MetaData.java new file mode 100644 index 0000000..e591aee --- /dev/null +++ b/doc/data/MetaData.java @@ -0,0 +1,88 @@ +/* + * 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; + + +//创建继承自Task的类 +public class MetaData extends Task { + private final static String TAG = MetaData.class.getSimpleName();//调用getSimpleName()函数 + + private String mRelatedGid = null;//初始化mRelatedGid为null + //函数:设置meta,用put方法将gid传给GTaskStringUtils.META_HEAD_GTASK_ID,用catch来在出现错误时报错 + 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");//catch异常处理 + } + setNotes(metaInfo.toString()); + setName(GTaskStringUtils.META_NOTE_NAME); + } + //获取相关的gid + public String getRelatedGid() { + return mRelatedGid; + } + + //函数判断getNotes()是否为空,并返回 + @Override + public boolean isWorthSaving() { + return getNotes() != null; + } + + //调用父类Task中的setContentByRemoteJSON ()函数,使用远程json数据对象设置元数据内容 + @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"); + } + + //函数:从元数据库中获得本地JSON对象,并抛出错误 + @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/doc/data/Node.java b/doc/data/Node.java new file mode 100644 index 0000000..3bb770a --- /dev/null +++ b/doc/data/Node.java @@ -0,0 +1,104 @@ +/* + * 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; //引用cursor,此公用接口提供对数据库查询返回的结果集的随机读写访问。 + +import org.json.JSONObject;//引用 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;//bool类型,表明表征是否被删除 + + private long mLastModified;//记录最后一次修改时间 + + private boolean mDeleted;//判断 表征是否被删除 + + //构造函数,进行初始化,界面没有,名字为空,最后一次修改时间为0(没有修改),表征是否删除。 + public Node() { + mGid = null; + mName = ""; + mLastModified = 0; + mDeleted = false; + } + + // 创建JSONObject对象,创建操作和更新操作,形参是操作号 + public abstract JSONObject getCreateAction(int actionId); + + public abstract JSONObject getUpdateAction(int actionId);//获取需要更新活动的ID + + public abstract void setContentByRemoteJSON(JSONObject js);//都是JSONObject和Curson中的一些操作,主要是创建相应的对象进行远端和本地同步操作 + + public abstract void setContentByLocalJSON(JSONObject js);//声明JSONObject对象抽象类,从本地JSON中同步设置目录 + + + public abstract JSONObject getLocalJSONFromContent();//声明JSONObject对象抽象类,从目录中获取本地JSON + + public abstract int getSyncAction(Cursor c);//声明int抽象类,获取同步行为代号 + + public void setGid(String gid) { + this.mGid = gid; + } //对构造函数中的对象进行赋值或者获取对象的具体内容将gid赋给mGid,以下均为Node函数参数的输入与赋值 + + 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; + }//返回git + + public String getName() { + return this.mName; + }//返回mname + + public long getLastModified() { + return this.mLastModified; + }//获取时间标识 + + public boolean getDeleted() { + return this.mDeleted; + }//获取删除标识 + +} diff --git a/doc/data/SqlData.java b/doc/data/SqlData.java new file mode 100644 index 0000000..0c04274 --- /dev/null +++ b/doc/data/SqlData.java @@ -0,0 +1,198 @@ +/* + * 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 { + //得到类的简写名称存入字符串TAG中 + private static final String TAG = SqlData.class.getSimpleName();//调用getSimpleName ()函数 + + private static final int INVALID_ID = -99999;//为mDataId置初始值-99999 + + //来自Notes类中定义的DataColumn中的一些常量 + // 集合了interface DataColumns中所有SF常量 + public static final String[] PROJECTION_DATA = new String[] { + DataColumns.ID, DataColumns.MIME_TYPE, DataColumns.CONTENT, DataColumns.DATA1, + DataColumns.DATA3 + }; + //以下五个变量作为sql表中5列的编号 + 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; + //判断是否直接用Content生成,是为true,否则为false + 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();//mContentResolver用于获取ContentProvider提供的数据 + mIsCreate = true; + mDataId = INVALID_ID; + mDataMimeType = DataConstants.NOTE; + mDataContent = ""; + mDataContentData1 = 0; + mDataContentData3 = ""; + mDiffDataValues = new ContentValues(); + } + /* + * 功能描述:构造函数,初始化数据 + * 参数注解:mContentResolver用于获取ContentProvider提供的数据 + * 参数注解: mIsCreate表征当前数据是用哪种方式创建(两种构造函数的参数不同) + */ + 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 { + //JSONObject对象中有DataColumns.ID这一项,则设置,否则设为INVALID_ID + 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对象。并将相关数据放入其中,并返回 + 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; + } + //commit函数用于把当前造作所做的修改保存到数据库 + 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; + } + //获取当前id + public long getId() { + return mDataId; + } +} diff --git a/doc/data/SqlNote.java b/doc/data/SqlNote.java new file mode 100644 index 0000000..36854e7 --- /dev/null +++ b/doc/data/SqlNote.java @@ -0,0 +1,527 @@ +/* + * 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 { + //调用getSimpleName(),类名简称存入TAG + 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; + + //构造函数只有context,对所有的变量进行初始化 + 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(); + } + + //构造函数有context和一个数据库的cursor,多数变量通过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(); + } + + + // mIsCreate用于标示构造方式 + 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从光标处加载数据 + + 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);//通过id获得对应的ContentResolver中的cursor + if (c != null) { + c.moveToNext(); + loadFromCursor(c);//然后加载数据进行初始化,这样函数 + //SqlNote(Context context, long id)与SqlNote(Context context, long id)的实现方式基本相同 + } 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); + } + + // 功能描述:通过content机制获取共享数据并加载到数据库当前游标 + 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(); + } + } + + // 功能描述:设置通过content机制用于共享的数据信息 + 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; + } + + // 功能描述:获取content机制提供的数据并加载到note中 + 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时 + 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; + } + + // 功能描述:给当前id设置父id + public void setParentId(long id) { + mParentId = id; + mDiffNoteValues.put(NoteColumns.PARENT_ID, id); + } + + //功能描述:给当前id设置Gtaskid + public void setGtaskId(String gid) { + mDiffNoteValues.put(NoteColumns.GTASK_ID, gid); + } + + // 功能描述:给当前id设置同步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的父id + public long getParentId() { + return mParentId; + } + + //获取小片段即用于显示的部分便签内容 + public String getSnippet() { + return mSnippet; + } + + //判断是否为便签类型 + public boolean isNoteType() { + return mType == Notes.TYPE_NOTE; + } + + //commit函数用于把当前造作所做的修改保存到数据库 + 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中的实现 + 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; + } +} \ No newline at end of file diff --git a/doc/data/Task.java b/doc/data/Task.java new file mode 100644 index 0000000..14edea4 --- /dev/null +++ b/doc/data/Task.java @@ -0,0 +1,361 @@ +/* + * 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; + } + + //从JSON对象创建任务的构造函数 + //如果JSON对象不符合预期的格式,则抛出异常。 + public Task(JSONObject jsonObject) throws JSONException { + super(jsonObject); + mCompleted = jsonObject.getBoolean(GTaskStringUtils.STATUS); + mNotes = jsonObject.optString(GTaskStringUtils.NOTES); + mMetaInfo = jsonObject.optJSONObject(GTaskStringUtils.META_DATA); + } + + public JSONObject getCreateAction(int actionId) { + JSONObject js = new JSONObject(); + + try { + // action_id 操作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"); // 创建者ID + 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 父任务列表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 任务列表ID + js.put(GTaskStringUtils.GTASK_JSON_LIST_ID, mParent.getGid()); + + // prior_sibling_id 前置任务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_id 操作ID + js.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, actionId); + + // id 任务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"); + } + } + + } + //将本地存储的JSON对象中的内容设置到任务对象中。 + 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(); + } + } + //从任务对象中获取本地存储的JSON对象。 + public JSONObject getLocalJSONFromContent() { + String name = getName(); + try { + if (mMetaInfo == null) { + // 从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 { + // 已同步的任务 + 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; + } + } + } + //根据传入的Cursor对象获取同步任务的操作类型。 + 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; + } + + // 验证笔记ID是否匹配 + 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) { + // 本地没有更新 + if (c.getLong(SqlNote.SYNC_ID_COLUMN) == getLastModified()) { + // 双方都没有更新 + return SYNC_ACTION_NONE; + } else { + // 应用远程更新到本地 + return SYNC_ACTION_UPDATE_LOCAL; + } + } else { + // 验证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()) { + // 仅有本地修改 + 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; + } + //判断是否值得保存。 + // 如果有元数据、名称或笔记内容,则返回true,否则返回false + 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/doc/data/TaskList.java b/doc/data/TaskList.java new file mode 100644 index 0000000..81ac4d8 --- /dev/null +++ b/doc/data/TaskList.java @@ -0,0 +1,357 @@ +/* + * 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();//tag标记 + + private int mIndex;//当前TaskList的指针 + + private ArrayList mChildren;//类中主要的保存数据的单元,用来实现一个以Task为元素的ArrayList + + public TaskList() { + super(); + mChildren = new ArrayList(); + mIndex = 1; + } + + // 生成并返回一个包含了一定数据的JSONObject实体 + 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实体 + 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; + } + + //生成并返回一个包含了一定数据的JSONObject实体 + 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; + } + + //获得TaskList的大小,即mChildren的大小 + 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); + //每一次ArrayList的变化都要紧跟相关Task中PriorSibling + + } + } + 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; + } + + //删除TaskList中的一个Task + 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; + } + + //将当前TaskList中含有的某个Task移到index位置 + 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寻找Task + 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; + } + + //返回指定Task的index + public int getChildTaskIndex(Task task) { + return mChildren.indexOf(task); + } + + //返回指定index的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的Task + public Task getChilTaskByGid(String gid) { + for (Task task : mChildren) {//一种常见的ArrayList的遍历方法(四种,见精读笔记) + 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; + } +} \ No newline at end of file From 0b2196e1317eb0494694dfab7a6981e9defadf25 Mon Sep 17 00:00:00 2001 From: DXW <1736894304@qq.com> Date: Thu, 27 Apr 2023 21:14:30 +0800 Subject: [PATCH 11/19] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E7=B2=BE=E8=AF=BB?= =?UTF-8?q?=E6=8A=A5=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/remote/GTaskASyncTask.java | 123 +++++ doc/remote/GTaskClient.java | 662 +++++++++++++++++++++++++ doc/remote/GTaskManager.java | 800 +++++++++++++++++++++++++++++++ doc/remote/GTaskSyncService.java | 128 +++++ doc/remote/软件 (D).lnk | Bin 0 -> 515 bytes 5 files changed, 1713 insertions(+) create mode 100644 doc/remote/GTaskASyncTask.java create mode 100644 doc/remote/GTaskClient.java create mode 100644 doc/remote/GTaskManager.java create mode 100644 doc/remote/GTaskSyncService.java create mode 100644 doc/remote/软件 (D).lnk diff --git a/doc/remote/GTaskASyncTask.java b/doc/remote/GTaskASyncTask.java new file mode 100644 index 0000000..d7bd6da --- /dev/null +++ b/doc/remote/GTaskASyncTask.java @@ -0,0 +1,123 @@ + +/* + * 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;//引入android自动生成的R类 +import net.micode.notes.ui.NotesListActivity; +import net.micode.notes.ui.NotesPreferenceActivity; + +//类:扩展于AysyncTask类,是用来处理GTask的异步任务的类 +public class GTaskASyncTask extends AsyncTask { + + private static int GTASK_SYNC_NOTIFICATION_ID = 5234235; + + public interface OnCompleteListener {//通过interface实现多个接口,接口为OnCompleteListener,用来初始化异步的功能 + void onComplete(); + } + + private Context mContext; + + private NotificationManager mNotifiManager; + + private GTaskManager mTaskManager; + //函数: GTaskASyncTask类的构造函数 + 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(); + } + //方法: 提交后台进度,并调用onProgressUpdate方法来更新进度条 + 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); + } + //方法:异步执行后台线程将要完成的任务 + @Override + protected Integer doInBackground(Void... unused) { + publishProgess(mContext.getString(R.string.sync_progress_login, NotesPreferenceActivity + .getSyncAccountName(mContext))); + return mTaskManager.sync(mContext, this); + } + //方法:在调用publishProgress时,该方法被执行,并将进度信息更新到UI组件中 + @Override + protected void onProgressUpdate(String... progress) { + showNotification(R.string.ticker_syncing, progress[0]); + if (mContext instanceof GTaskSyncService) { + ((GTaskSyncService) mContext).sendBroadcast(progress[0]); + } + } + //方法: 在dolnBackground执行完成后,该方法会被UI线程调用,将后台的计算结果传递到UI进程,并在界面上展示出来 + @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/doc/remote/GTaskClient.java b/doc/remote/GTaskClient.java new file mode 100644 index 0000000..c9c8bf6 --- /dev/null +++ b/doc/remote/GTaskClient.java @@ -0,0 +1,662 @@ + /* + * 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; + } + + /*用来获取的实例化对象 + * 使用 getInstance() + * 返回mInstance这个实例化对象 + */ + public static synchronized GTaskClient getInstance() { + if (mInstance == null) { + mInstance = new GTaskClient(); + } + return mInstance; + } + + //用来实现登录操作的函数,传入Activity + 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; + } + + //如果没超过时间,则不需要重新登录 + 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"; //设置用户对应的getUrl + mPostUrl = url.toString() + "r/ig"; //设置用户对应的postUrl + + if (tryToLoginGtask(activity, authToken)) { + mLoggedin = true; + } + } + + // try to login with google official url + //如果用户账户无法登录,则使用谷歌官方的URI进行登录 + 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);//AccountManager这个类给用户提供了集中注册账号的接口 + Account[] accounts = accountManager.getAccountsByType("com.google");//获取全部以com.google结尾的account + + if (accounts.length == 0) { + Log.e(TAG, "there is no available google account"); + return null; + } + + String accountName = NotesPreferenceActivity.getSyncAccountName(activity); + Account account = null; + //遍历获得的accounts信息,寻找已经记录过的账户信息 + 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); + //如果是invalidateToken,那么需要调用invalidateAuthToken(String, String)方法废除这个无效token + 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,这只是一个预先判断令牌是否是有效以及是否能登上GTask的方法,而不是具体实现登陆的方法 + private boolean tryToLoginGtask(Activity activity, String authToken) { + if (!loginGtask(authToken)) { + // maybe the auth token is out of authTokedate, now let's invalidate the + // token and try again + //删除过一个无效的authToken,申请一个新的后再次尝试登陆 + 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; + } + + //实现登录GTask的具体操作 + private boolean loginGtask(String authToken) { + int timeoutConnection = 10000; + int timeoutSocket = 15000; //socket是一种通信连接实现数据的交换的端口 + HttpParams httpParameters = new BasicHttpParams(); //实例化一个新的HTTP参数类 + HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);//设置连接超时时间 + HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);//设置设置端口超时时间 + mHttpClient = new DefaultHttpClient(httpParameters); + BasicCookieStore localBasicCookieStore = new BasicCookieStore(); //设置本地cookie + mHttpClient.setCookieStore(localBasicCookieStore); + HttpProtocolParams.setUseExpectContinue(mHttpClient.getParams(), false); + + // login gtask + try { + String loginUrl = mGetUrl + "?auth=" + authToken; //设置登录的url + HttpGet httpGet = new HttpGet(loginUrl); //通过登录的uri实例化网页上资源的查找 + HttpResponse response = null; + response = mHttpClient.execute(httpGet); + + // get the cookie now + //获取CookieStore里存放的cookie,看如果存有“GTL(不知道什么意思)”,则说明有验证成功的有效的cookie + 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 + //获取client的内容,具体操作是在返回的Content中截取从_setup(开始到)}中间的字符串内容,也就是gtask_url的内容 + 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++; + } + + /*实例化创建一个用于向网络传输数据的对象 + * 使用HttpPost类 + * 返回一个httpPost实例化对象,但里面还没有内容 + */ + 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; + } + + /*通过URL获取响应后返回的数据,也就是网络上的数据和资源 + * 使用getContentEncoding()获取网络上的资源和数据 + * 返回值就是获取到的资源 + */ + private String getResponseContent(HttpEntity entity) throws IOException { + String contentEncoding = null; + if (entity.getContentEncoding() != null) {//通过URL得到HttpEntity对象,如果不为空则使用getContent()方法创建一个流将数据从网络都过来 + contentEncoding = entity.getContentEncoding().getValue(); + Log.d(TAG, "encoding: " + contentEncoding); + } + + InputStream input = entity.getContent(); + if (contentEncoding != null && contentEncoding.equalsIgnoreCase("gzip")) {//GZIP是使用DEFLATE进行压缩数据的另一个压缩库 + input = new GZIPInputStream(entity.getContent()); + } else if (contentEncoding != null && contentEncoding.equalsIgnoreCase("deflate")) {//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(); + } + } + + /*通过JSON发送请求 + * 请求的具体内容在json的实例化对象js中然后传入 + * 利用UrlEncodedFormEntity entity和httpPost.setEntity(entity)方法把js中的内容放置到httpPost中 + * 执行请求后使用getResponseContent方法得到返回的数据和资源 + * 将资源再次放入json后返回 + */ + private JSONObject postRequest(JSONObject js) throws NetworkFailureException { + if (!mLoggedin) {//未登录 + Log.e(TAG, "please login first"); + throw new ActionFailureException("not logged in"); + } + + //实例化一个httpPost的对象用来向服务器传输数据,在这里就是发送请求,而请求的内容在js里 + HttpPost httpPost = createHttpPost(); + try { + LinkedList list = new LinkedList(); + list.add(new BasicNameValuePair("r", js.toString())); + UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list, "UTF-8"); //UrlEncodedFormEntity()的形式比较单一,是普通的键值对 + 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"); + } + } + + /*创建单个任务 + * 传入参数是一个.gtask.data.Task包里Task类的对象 + * 利用json获取Task里的内容,并且创建相应的jsPost + * 利用postRequest得到任务的返回信息 + * 使用task.setGid设置task的new_ID + */ + 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"); + } + } + + /* + * 创建一个任务列表,与createTask几乎一样,区别就是最后设置的是tasklist的gid + */ + 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"); + } + } + + /* + * 同步更新操作 + * 使用JSONObject进行数据存储,使用jsPost.put,Put的信息包括UpdateArray和ClientVersion + * 使用postRequest发送这个jspost,进行处理 + */ + 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"); + } + } + } + + /* + * 添加更新的事项 + * 调用commitUpdate()实现 + */ + 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())); + } + } + + /* + * 移动task,比如讲task移动到不同的task列表中去 + * 通过getGid获取task所属列表的gid + * 通过JSONObject.put(String name, Object value)函数设置移动后的task的相关属性值,从而达到移动的目的 + * 最后还是通过postRequest进行更新后的发送 + */ + 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 + //设置优先级ID,只有当移动是发生在文件中 + 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); + //最后将ACTION_LIST加入到jsPost中 + 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"); + } + } + + /* + * 删除操作节点 + * 还是利用JSON + * 删除过后使用postRequest发送删除后的结果 + */ + 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())); //这里会获取到删除操作的ID,加入到actionLiast中 + 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"); + } + } + + /* + * 获取任务列表 + * 首先通过GetURI使用getResponseContent从网上获取数据 + * 然后筛选出"_setup("到)}的部分,并且从中获取GTASK_JSON_LISTS的内容返回 + */ + 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 + //筛选工作,把筛选出的字符串放入jsString + 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); + //获取GTASK_JSON_LISTS + 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"); + } + } + + /* + * 通过传入的TASKList的gid,从网络上获取相应属于这个任务列表的任务 + */ + 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); //这里设置为传入的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; + } + } \ No newline at end of file diff --git a/doc/remote/GTaskManager.java b/doc/remote/GTaskManager.java new file mode 100644 index 0000000..d2b4082 --- /dev/null +++ b/doc/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/doc/remote/GTaskSyncService.java b/doc/remote/GTaskSyncService.java new file mode 100644 index 0000000..cca36f7 --- /dev/null +++ b/doc/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/doc/remote/软件 (D).lnk b/doc/remote/软件 (D).lnk new file mode 100644 index 0000000000000000000000000000000000000000..f353aa81d1b9d651b58e8b48448e7b3a02c4e104 GIT binary patch literal 515 zcmeZaU|?VrVFHp23S})9{68Scx9C-u;>N{gSLUeTuBCf7poY!B4mackRt=cAcH`(ArOOr zDG-YSF*6WXoYqto0MaMk?)k?6Hi(-+4+vv0$OMRv1rb0R1d6kDjSP&842%s73zLeA z7#w^~Z9h2wh12>&0gIOK>?loH;$nTw^R3`CmWE%^nVc1b zX`OU~@PidM%0OZu0P;7;EWGI1B&)3_)@x literal 0 HcmV?d00001 From 7148368be494e1d48f932db7be0858bb8311d3fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=AE=B6=E5=84=92?= <2494326140@qq.com> Date: Fri, 28 Apr 2023 15:47:28 +0800 Subject: [PATCH 12/19] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=90=8D=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- model/{软工1.png => 分析类图.png} | Bin model/{软工.png => 顺序图.png} | Bin 2 files changed, 0 insertions(+), 0 deletions(-) rename model/{软工1.png => 分析类图.png} (100%) rename model/{软工.png => 顺序图.png} (100%) diff --git a/model/软工1.png b/model/分析类图.png similarity index 100% rename from model/软工1.png rename to model/分析类图.png diff --git a/model/软工.png b/model/顺序图.png similarity index 100% rename from model/软工.png rename to model/顺序图.png From 0ebafe6be8edf70552d0e9f78a199cb3530664ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=AE=B6=E5=84=92?= <2494326140@qq.com> Date: Wed, 3 May 2023 16:01:24 +0800 Subject: [PATCH 13/19] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E8=BF=87=E7=9A=84=E9=A1=BA=E5=BA=8F=E5=9B=BE=E5=92=8C=E5=88=86?= =?UTF-8?q?=E6=9E=90=E7=B1=BB=E5=9B=BE=EF=BC=8C=E8=BF=98=E6=9C=89=E4=BD=93?= =?UTF-8?q?=E7=B3=BB=E7=BB=93=E6=9E=84=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- model/分析类图.png | Bin 24765 -> 0 bytes model/新功能体系结构.png | Bin 0 -> 40441 bytes model/新功能分析类图.png | Bin 0 -> 22329 bytes model/新功能分析类图2.png | Bin 0 -> 13860 bytes model/新功能分析类图UI.png | Bin 0 -> 45084 bytes model/新功能顺序图.png | Bin 0 -> 58178 bytes model/顺序图.png | Bin 55771 -> 0 bytes .../.gradle/7.5/checksums/checksums.lock | Bin 17 -> 17 bytes .../.gradle/7.5/checksums/md5-checksums.bin | Bin 0 -> 18897 bytes .../.gradle/7.5/checksums/sha1-checksums.bin | Bin 0 -> 20279 bytes .../7.5/executionHistory/executionHistory.bin | Bin 164321 -> 241960 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .../.gradle/7.5/fileHashes/fileHashes.bin | Bin 42547 -> 90965 bytes .../.gradle/7.5/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../7.5/fileHashes/resourceHashesCache.bin | Bin 20095 -> 20537 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .../buildOutputCleanup/outputFiles.bin | Bin 20891 -> 24653 bytes src/Notes-master1/.gradle/file-system.probe | Bin 8 -> 8 bytes .../.idea/render.experimental.xml | 6 + src/Notes-master1/.idea/vcs.xml | 6 + src/Notes-master1/app/build.gradle | 4 + .../intermediates/apk/debug/app-debug.apk | Bin 1046555 -> 1049850 bytes .../currentProject/dirs_bucket_0/graph.bin | Bin 1454 -> 1615 bytes .../currentProject/dirs_bucket_3/graph.bin | Bin 1423 -> 1584 bytes .../currentProject/dirs_bucket_5/graph.bin | Bin 1552 -> 1736 bytes .../graph.bin | Bin .../graph.bin | Bin .../graph.bin | Bin .../graph.bin | Bin .../graph.bin | Bin .../graph.bin | Bin .../dex/debug/mergeDexDebug/classes.dex | Bin 192004 -> 192012 bytes .../dex_archive_input_jar_hashes/debug/out | Bin 370 -> 393 bytes .../compile-file-map.properties | 192 ++++---- .../values-zh-rCN/values-zh-rCN.xml | 108 ----- .../values-zh-rTW/values-zh-rTW.xml | 108 ----- .../merged.dir/values/values.xml | 4 +- .../debug/mergeDebugResources/merger.xml | 20 +- .../incremental/mergeDebugAssets/merger.xml | 2 +- .../mergeDebugJniLibFolders/merger.xml | 2 +- .../incremental/mergeDebugShaders/merger.xml | 2 +- .../tmp/debug/dex-renamer-state.txt | 4 +- .../tmp/debug/zip-cache/androidResources | Bin 7931 -> 7931 bytes .../net/micode/notes/data/Contact.class | Bin 2970 -> 2970 bytes .../micode/notes/data/Notes$CallNote.class | Bin 935 -> 935 bytes .../notes/data/Notes$DataConstants.class | Bin 680 -> 680 bytes .../micode/notes/data/Notes$TextNote.class | Bin 931 -> 931 bytes .../classes/net/micode/notes/data/Notes.class | Bin 1887 -> 1887 bytes .../notes/data/NotesDatabaseHelper.class | Bin 8801 -> 8801 bytes .../net/micode/notes/data/NotesProvider.class | Bin 9459 -> 9459 bytes .../micode/notes/model/Note$NoteData.class | Bin 6048 -> 6048 bytes .../classes/net/micode/notes/model/Note.class | Bin 4471 -> 4471 bytes .../notes/tool/BackupUtils$TextExport.class | Bin 6349 -> 6349 bytes .../net/micode/notes/tool/BackupUtils.class | Bin 3373 -> 3373 bytes .../net/micode/notes/tool/DataUtils.class | Bin 9650 -> 9650 bytes ...sourceParser$TextAppearanceResources.class | Bin 890 -> 890 bytes .../notes/widget/NoteWidgetProvider.class | Bin 5451 -> 5451 bytes .../manifest-merger-blame-debug-report.txt | 454 +++++++++--------- .../merged_manifest/debug/AndroidManifest.xml | 3 +- .../debug/AndroidManifest.xml | 3 +- .../merged_res/debug/values_values.arsc.flat | Bin 9336 -> 9276 bytes .../debug/out/multi-v2/debug.json | 200 +++++--- .../debug/out/multi-v2/values-zh-rCN.json | 40 +- .../debug/out/multi-v2/values-zh-rTW.json | 4 +- .../debug/out/multi-v2/values.json | 136 +++++- .../debug/AndroidManifest.xml | 3 +- .../debug/out/resources-debug.ap_ | Bin 946359 -> 946323 bytes .../out/net/micode/notes/data/Contact.dex | Bin 2708 -> 2708 bytes .../net/micode/notes/data/Notes$CallNote.dex | Bin 1336 -> 1336 bytes .../micode/notes/data/Notes$DataConstants.dex | Bin 976 -> 976 bytes .../net/micode/notes/data/Notes$TextNote.dex | Bin 1336 -> 1336 bytes .../debug/out/net/micode/notes/data/Notes.dex | Bin 2116 -> 2116 bytes .../micode/notes/data/NotesDatabaseHelper.dex | Bin 8160 -> 8160 bytes .../net/micode/notes/data/NotesProvider.dex | Bin 8024 -> 8024 bytes .../net/micode/notes/model/Note$NoteData.dex | Bin 5308 -> 5308 bytes .../debug/out/net/micode/notes/model/Note.dex | Bin 4156 -> 4156 bytes .../notes/tool/BackupUtils$TextExport.dex | Bin 5784 -> 5784 bytes .../out/net/micode/notes/tool/BackupUtils.dex | Bin 3172 -> 3172 bytes .../out/net/micode/notes/tool/DataUtils.dex | Bin 8004 -> 8004 bytes ...ResourceParser$TextAppearanceResources.dex | Bin 1240 -> 1240 bytes .../notes/widget/NoteWidgetProvider.dex | Bin 4656 -> 4656 bytes .../source_set_path_map/debug/file-map.txt | 16 +- .../debug/stableIds.txt | 184 +++---- .../logs/manifest-merger-debug-report.txt | 254 +++++----- .../previous-compilation-data.bin | Bin 13215 -> 13215 bytes .../app/src/main/AndroidManifest.xml | 3 +- .../java/net/micode/notes/data/Contact.java | 17 +- .../java/net/micode/notes/data/Notes.java | 17 +- .../notes/data/NotesDatabaseHelper.java | 40 +- .../net/micode/notes/data/NotesProvider.java | 29 +- .../java/net/micode/notes/model/Note.java | 45 +- .../net/micode/notes/model/WorkingNote.java | 64 +-- .../net/micode/notes/tool/BackupUtils.java | 30 +- .../java/net/micode/notes/tool/DataUtils.java | 11 +- .../micode/notes/tool/GTaskStringUtils.java | 2 +- .../net/micode/notes/tool/ResourceParser.java | 3 +- .../notes/widget/NoteWidgetProvider.java | 20 +- .../notes/widget/NoteWidgetProvider_2x.java | 12 +- .../notes/widget/NoteWidgetProvider_4x.java | 10 +- .../app/src/main/res/values/styles.xml | 4 +- 100 files changed, 1028 insertions(+), 1034 deletions(-) delete mode 100644 model/分析类图.png create mode 100644 model/新功能体系结构.png create mode 100644 model/新功能分析类图.png create mode 100644 model/新功能分析类图2.png create mode 100644 model/新功能分析类图UI.png create mode 100644 model/新功能顺序图.png delete mode 100644 model/顺序图.png create mode 100644 src/Notes-master1/.gradle/7.5/checksums/md5-checksums.bin create mode 100644 src/Notes-master1/.gradle/7.5/checksums/sha1-checksums.bin create mode 100644 src/Notes-master1/.idea/render.experimental.xml create mode 100644 src/Notes-master1/.idea/vcs.xml rename src/Notes-master1/app/build/intermediates/desugar_graph/debug/out/currentProject/{jar_6cd080a137cd6c47b2aa34ddc45cb2f114d21cdc14a2e8250cbf75372ad7b9da_bucket_0 => jar_5749a1235ed03cd179ea4f3c365f661b2371bc5fef07fdae1888e24f71aa20ed_bucket_0}/graph.bin (100%) rename src/Notes-master1/app/build/intermediates/desugar_graph/debug/out/currentProject/{jar_6cd080a137cd6c47b2aa34ddc45cb2f114d21cdc14a2e8250cbf75372ad7b9da_bucket_1 => jar_5749a1235ed03cd179ea4f3c365f661b2371bc5fef07fdae1888e24f71aa20ed_bucket_1}/graph.bin (100%) rename src/Notes-master1/app/build/intermediates/desugar_graph/debug/out/currentProject/{jar_6cd080a137cd6c47b2aa34ddc45cb2f114d21cdc14a2e8250cbf75372ad7b9da_bucket_2 => jar_5749a1235ed03cd179ea4f3c365f661b2371bc5fef07fdae1888e24f71aa20ed_bucket_2}/graph.bin (100%) rename src/Notes-master1/app/build/intermediates/desugar_graph/debug/out/currentProject/{jar_6cd080a137cd6c47b2aa34ddc45cb2f114d21cdc14a2e8250cbf75372ad7b9da_bucket_3 => jar_5749a1235ed03cd179ea4f3c365f661b2371bc5fef07fdae1888e24f71aa20ed_bucket_3}/graph.bin (100%) rename src/Notes-master1/app/build/intermediates/desugar_graph/debug/out/currentProject/{jar_6cd080a137cd6c47b2aa34ddc45cb2f114d21cdc14a2e8250cbf75372ad7b9da_bucket_4 => jar_5749a1235ed03cd179ea4f3c365f661b2371bc5fef07fdae1888e24f71aa20ed_bucket_4}/graph.bin (100%) rename src/Notes-master1/app/build/intermediates/desugar_graph/debug/out/currentProject/{jar_6cd080a137cd6c47b2aa34ddc45cb2f114d21cdc14a2e8250cbf75372ad7b9da_bucket_5 => jar_5749a1235ed03cd179ea4f3c365f661b2371bc5fef07fdae1888e24f71aa20ed_bucket_5}/graph.bin (100%) delete mode 100644 src/Notes-master1/app/build/intermediates/incremental/debug/mergeDebugResources/merged.dir/values-zh-rCN/values-zh-rCN.xml delete mode 100644 src/Notes-master1/app/build/intermediates/incremental/debug/mergeDebugResources/merged.dir/values-zh-rTW/values-zh-rTW.xml diff --git a/model/分析类图.png b/model/分析类图.png deleted file mode 100644 index 6dfe0f19c3d4a5af034cee467cc59062b9fbe563..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24765 zcmeIbXH?T!)Gr)|5epzXN)^EpKes2t`U1 z3>d1?I|2gIduV~&6N=+J?|avC?_Kv<&;2kTX1U1!lzsNuXP!#-JIZ<# z0)f!M75=;nf&3l>fl#p={tf)H!TL@O{BywN?yYN(oF=vj@W=0#S5>Y;Ao&qAB$I>S z?<0;12p0(CkNcGW4h&duxI-Yucj13t)o?eQ>EDd$>oED|u`RX5y*BuRV+*#%H1}ON z8)+%Ga0k=V4d+^5pGywEd?&)PiC~Mdl$d(*mhY>lPII*K9l?6fJ8G!tPw5x$ct2Sj z2o24ozWvVnRChZ>Kt3hl_Q6v}`$Ha-%@zCq7O{1}I8$DFscq8%W}UASRFt@d%wnYKxr;LAtvIrSmA|(55I2d}5aWjURAFg*%+dc%R zRt|?!z2)WXW-{_7aSG9<_>$tm4>wT@TM95HA`1X131EGt)Uu2c1H&PNdfJiMI7^yX!Rl zPJd9Fd|v4M9v8G%p*C+?`!F-2jc=`I&lEp?6i*YUsYf@Zbj&CbMYEzgeO&umuvk+# zgPvYaynfLc>MMJ!oJ1jo^*8YO9FzhYfDY1k@x`+bw6J-4B6*B9p#!-h_w z5$^9izR%!g0zTP=3rsD~R6Fjk4jsv-SwD=(jGn<){9tl;u9HaU8Fc*6opDN+*CC!6 zCd;T6X4fc>5?90ABSXS-?|5_Yley}PuKVq6eNGy@=w`TP`)?V1$u*u{D14dA%d{v} zf4rXS%Vy0}hhp1x&e>)#>3qg$4jM=np0uC^^24P7&H`8;eXd7&5m`f6HOrdYZZV;H<+R`iYhMV zFQyv2PUXR#OtAGz_mKEhx>mLEl^0&rV0Z%QlrnsE=A=0R6L4Qra{0#oRwW}3@xa=# zWyNJD)$|y)+BaV0+_<49=IQW2tZ|N7#P1GiGNb+_;|SNjjOwEBk20Ye3*C9{CdOro zzW7II2Y3&PFQ{v}WMxx;aZKW%70jG^8Jcy?rZc5Z--knveUE} z-R}s?`J&G&;K%nVK`2N&+D1rvpNl43ERM|oH;*xtg%+rcogMzats%5HyJv~{X0=6b z^;n{3TnM7}*A-}a|^!P-45RY== zeuw(U83VVHLz=;ZQL*J8Jg5v2%Mg zX>hv*G&k{>X@dpbStqsnow@k~jD)WH*-guY(#^d zW2Lv)A>GA%^h+QdwYTtBnz7&e%RQDR+tF%rM4$$#IXSys)V9*+CBs^UbnBgH)Hw-n zub@ViQ6K-BtK1Y&UaVXnOQ??#gss>62@;HN-$lu7ejn5?bsnt=KRwZdcV4c7!ZDYg zBc&pdc^8%Es-S|T1Bx`Nb2FuU}2BFx-b@h)V|fV~nV*ANhGs4sPj0W!VN)D4WS;D9dGqeKy@2ffqSO zXBOpeS)3U~ghdzfyDmceqxxhK6l_e{xENwNxaw zxY+B}B#p(b@N3agu4ut?_8L#GzwV7QRlWJXjFJW@FFj^5*1$YbIAeOs+^hSvf&(+b!4F8T$8f?e$g+=_@)=q?AEyd7#50@5w5K-_k-V)C`qG8Or*~Va7WKMS&dSa`B=Z7!`)`%O z0B2->++O&&HoX0^I@{MtZ&$C2Xp`UMzPG1ykQat>f)tp)PKGvGYZ5Nj%MXP`T%9>md8A^<-~;Rx)h0 zX(-2+xGB0zNj@}y=a*4LUb+2xCZGi4&%d5Q1=Ppqzj6>Lhi>pf=;$EYyXTcvRFrAk zXZPx5^jUqJC3X;-P#3Bcer(?lZ4-G_tEHT3-u*iN*PuwgQyLYOj|AWyzLmTkeb-P7a*X1$GqY{U zPlFN8FD`@y{kp$)vINGayY1pdgITGv_1Hg4)iu8B9L-%!wHiHhJ%l^DU+(vs>%UU- z>@1-U6%vwN*1J@o&2Nbz5?$#vd_GRUyYm^dNQys+ME+BWBqPP}-T7TA_<%(Xt^6td zJDN%YdbDG=thAHGU3|mz|DlL)M%uC)jVemJFce&pkKZZ~sC-+5ExK-lXCS(|4M&CM z*Sgk4TDjDd1w@&_W$_C?v!F`p>52swnOq3Y4=vT4PVEYqn*sb>2q!cAqD_oti}mnW z;A}wt^Is0bUl(MQwBQ)iO^k*$v^(<}uluvL zI53+@phobU!zHuAe@yBEr|y&abtv!xNB+97|LlPMZ>uQA$ms^J=0LZ37odKe!nNZKH~PcD$>KM8W=h52}t$JWBOKXXVF>D??O zO@1Xyk=DPPk?UKz$(=DqYq=(m6-5sJy!&6G_>@pcG^Gqh3{R)o5D{^unaEqKCi^MN}H}kt=Z~nMSf%GFa zqA6LyB1|o>AhYRNb|apIip!#=Ctn@IbV|6 za7qMe!7PGwr|YhK?K|)7_3@!*A@=Hbv~r9$@4dGczIaPe8THffX;~H^v1Cqb`v4gE$_s_5URbKqd4^#%ft)~|A__g39FbAk|az;QERC zRnIk$9^Jkd_BB^+TaxrjW@{1l7&a)mm;sny~i&C?m9LRld@^$?l{(O6zv5G`)R;`pNSjJ1iX}$P{RnyZ`!%f zPe=M`&K?kQ-rw!#`Mt%sBd}r0yEpD&3=<{13$yl)5}D9tp)GHXQgIfABiKbvZrEoN3z)jRa&~kC#Kstcfn5=gh3htG0kh_~x%-Nm6wB7t1Iq2<^p?`>( zdw-JHCwM5;=bv`1@?$8K^Zw<2;N&@izyAJuKK!X5a#nkv0YWEGw4bB)rQ+Xi;OhT> zizT*?smpw(JWDZ9LXQ4Mp7)=OJNC&Aku@%A@{W^uoS=3OYPxFNA&`H(x$MTB5YG}?IDp6+?>{a6V+epvibBDnN-Tnp@9B=6*YQ+ z?rVi5IY-|?36svg`9hfX`z43Q0?v)8{-S~o zhtkl8nVeMu(g$DZ!QVucS_>-yvM0hL=?CQEKp$eq6xo)R3V}jiQO)cW(28u(3@t?= z5mx$TT?!)F{J()e{_&+W!>~+8h4O_Z5_!d9?C(DR-!Dy+(Ll5R`4^UWqcTY~%4i;7 zG~X6%sCKS*qJ>kAZbK}z{tKxG?*V8&@i_rXwHTRWAiFecHq^Z8yGowk?Pc0?MPcE!i+h~B!FWGkj77W9cdlq>gJ1Ya&cK5yOLcZS?hwAq5 zAZTs|nolUNimH*!nQPQ!H(>Hh=*@a=h%@lH^D&6Nhh55SU{C{3{qFdbiDUI;IIlN- zN1tDSQ-7aaR-#XvNJKM=auG0MGOcG~cw^-GihujAfVz5pL!*>4U^IqCkI&2~#|Wo$ ztc?X8oh{>LPq~zX$?YH_Fc^~n5!rde7t}Sk6sWEgppgF zU;g$0*c^9J6)PLfxZkNSH2#2ge~L~Kw9OCmc!A6dqnNzZR4*;=+dwJN2K~xYKYBOk zYH<3hsE;BPYlVgO_9P#iIu%$ezz0MJ93U4TL_-7appbd-d!400$l>CS&j`Hm0}d!A z0oT||C`;DPd+H-3tqE8@ioiv*^WHM{ziSDi6~G&T2IjdW33v@auO zJhOu+q|;eXwLlON*`cLc8DlDsb?|Z%Z#|l!QF+EtK2znRg($WNq1V;cmn*FjR+p=l zz|Zy8HB4(VYap`0i^ox7m$|RKP>q(_bnP>EHXhq2k-6*ld1h~`*77)nH8+kMoQcfh zvX9``@}|M7t^^!H8}@(@#@PoQU%3#%@k9@`gR@{8fgA5K@WK3*s=H`TAm(}a=?T}P zo3cabtl}BpTrZ^AENuKSc5M)E7MvY*#I)~Jk=T3NMn9?_dXrh#RWa*VthzX^I6)s{ zC81*he=&1fJ$F|-C=KL_!sT|jmhuN(3#a-brr|Jw%8!)=2}B#82le`y<{=Cc{7pZG z167^=C>ATj>B)X0q2Juq6T#YSx<=atZ@+1hE`%ywaCK_K+R^tCB~GPQd-3G4@5+o$ zJaSYYEyAP}ZKoEZ7H}#s5_QkPGJPiXVp%(j_QKZ}XML}5HsLLX)$K&z4=-fZ95qp@ z_)vv(AV}PEuDuAxehk&~I~#0Sp8nhFpQw-4K+KORV6ZKmD&fPL3I*vS2?MXAk2)O{ z_tNp`tdKQ4#W4*FDJyLHQD=&N;!-j{{m69nz4J!V{FY$vu?mHx2M+M)nhsMmUoSgY z{xNU{C~VEDbj+uX3he%hnlaI00 zwT9)CKr)>gwpa|R4ZVF9loyPLmbmMU-Y-A@f@?!;fq8N^Avxe8Dzz@eCz(Ft_mY27 zc7JOpG($PuK>i*uzJ-snWt5ZN9hc$#U0tQr&Fp53#XT8pw^46c4yjFPhBdRxIlo@{ zD|2xhA~+gJ*fvI^9R@i*X!cV?`RuM%2~I$c%4Myl-{a+Ln2T1%6fN-j`A;oyxDVZixaAv7IaDAX^S8#D9Id+X&G7$B zr#(jsUCAhbvV@^_1pzqYU$r4nv^U|q#Qqnn)c-g=E%z^x6qCANweOFY$gS9`h!YsS*GMTpNCsX)<&3(o^B-`BWbycyw`s%>KBr|N1oOd zS1h0Q$G-XHa>YD~##M&5>hV$Za6tiPR%(f5XX zy7Jm)*~QMVUzRAGyS;Tx%aS6pGfbeiZ_e*H-pxNdn@Z}R@?i`S0o@d@FeU6 z)P^L{uVb`jTbjHb89_hZ{5V&un+C+{c0_k}j1S@BTkPFjTBj6Jp+^*Sg&&J;#x@G- zRR)_DJGWLTF-F`;(kLRIZZ8%mN`2c|bB`?wyJcx;%S+VXn)c4_O0_eJ724g6l7wcI zSc+9j1cO(5gV9|NYqI&oyWZY~jP}T~qPeU!cHNh^blnNV!ow#lPWO<*C-qKmvdz9#dS%Gxv+-+S}h`q!nwYIKjGUPM6C8|F%vbTfJ)epha%tT#NV2 zqoM$;H@zl}AVT)0Y?bZx&9A?V7|um_G;9N<5e#^`$3_OYmTGDI$x{4!|L}J^6Q!w_ zd6lJ$CGP8s9tOQ1qrD%-1*S8tMi||%G+8jRGSM?z@ppi9prmb-;aWVE8uh#;io563 z#2nQ)u8k$=_h@w&N)9TOHCUSC+xTbxNQraEozap}^nB}+T{*5lV|=GiNY7wr#S*2s z*B*s|se)49F*~E8)0=@~T?SS-4mn`p!WMp{MBMXOj3LkBEw|NI z4D>?HuLEd|{Bd6wgZJ}>>j|`6&4HnNYPO}!fy_gv9E!)-dQ9eX_<)zyq6CXF@R1)- z#N`1!+`=rVUk+lO^Kv*cF?CcLatoZjpJu5)_7|QU$YZ3K!+T~XE-^FJ*w{|tw@3*EGu3v6>~$^tMmv$01GBpATrk%eE&!`GjW{=&S0@;u(-^$I`~{w^RpE6gL0Qo}Q)_MY z{@3SRwQW!gR~fys@y}Gv+Q2=2iBO*XTM`)beV0CJX2w>qCnU0j5+YIi0;00cJld61 z!0KdboM$d;Lr}eU{MyU&B?(IPDirwgV}07Ecz>XfGbamlTxeQLO}UtU21yp}WhqZ0 zUsOXck7ERs1!7<;PGEeijt!ql;klG!SpAR+hjC!oAaJUm4~9v!yv?INQ`TQO9cMnW>yr!ZNGhvNw^B7o(|2^RZ}U4cTs zEvo%gYY8Pv;@qS;Ev>E5j#}*uSijQ~wIp*=N(3d1Zr&ZxQ}3X3BxQn9XhN-aDeA3` z6N-tWaT`%ARE?hbqU#h`0b-VnUeozW&K(k++w$@hYjPWv^_JOZ=|#Wv+0e|zqN7j> zhmUa*tVN5vz0vVVr(h9mOLbAH{uc#I&CA?;)>Cefi#S)QQS{RUruXzWp%1iRaIG`d zPMmaayYJ2%5|2h=;}D5YG}Arm zxezN8`YszCiT#ZOvbm~kHp4W^W|24jJZG zJKXQE;-fxx>#PS(meZZ4&h3PaLvlXXviA(c@#-?19G><*ss?rRj zTj=Rt5R{>YtX$HKZwh>BtSy zVu|>Pp1O5yN^GWo8N_Dh@@fV1B)0+IystD9N2*jUL+PkK=>{;^v@l%!p1_W%K;z!cL>$R#K z62o)e)&>}CfeYi9lbCY)p-NVE2YWH^?1#BQ`=8O)Tj4%fN+m``u(d#d_r1C@wFWuDu8GQlOD3st3{e{F&uosrEq^pIcfb$vQA zKQl$%SY>Ub72|C?qyZe<^ z^$2vU8A^cYG=ggsY4ylW027Zlyu$kknSp8`=)=N!Fn`_wu8U2JXI5kn6;&GoO*-M{B{ z(cI*Jpk+jn!4mEr8B9W&!*Ad_gqq`33UuGn&8b_UdPKwklfETA-Ec5y1FcvTmNQ@deP zj27-cVJd^B5dfyrv@zB*SR3r5kkoDjG;OMbJVx&j@{ZRx=h$aM%X!kQyjpZUf$bl9d62-T`vqTv$`Th1J()jw*`XVXmQS)#9gHt1>rNPN ze`==U{cwUU73d0b0kZw0M%WN%YKeSM0vankZO5<(45c5Y>TvM{&zYH;1Y~fnm9D0( zz`(|UQLah}5jLIT8s5xM@P2IpRp+Y-MhgdH#Ym%Lpy*KzHswuzEZ=8VLB-S(5y{h2 zKrsWf1mN*YBt9`a)^uj}6FQ>E?V1gPLttB8!y81ux&SYNo#e&8;dx|@OTT*yA3o}v(LZeOWTxjiGYEMl ze?zIYROp25(csHTW_@6zpCj>ySAbvu=mgNC04@{o&O3H`hOeo5IE%kwsSYc|OVe5@ zX`m-XJ}TH_Ri0p2p0{#_xOR{+-A{-;qu`k=#X<<)IYc$~a|hTSwISpZIYX~%$SZ>n zHk1=^4&Xn)RL($A0!IksJ$OlgqrT(T*w>T0e&7G~PoXza2)^h80z1ACiUuvv3BqN) z0H{Xud!bM&W9&;L#oC+e*EaGQeHvrvy&O3H3`U;50AP=+qxf+@r^(UULGP{36d%`Z zf9NJ@sTr+)B@{1`$hilhgVaAZIu7hkTDU8)s6iBYE?i>3eWhJnEk%Co=ohpQt&!IZ zws^pEs+t~F?l^SqbB+UUtB9?*9ZI8@YlPdzGZ~SH;g;7v1cuo>PBOn=->N3dJief| zRb1m*UlPrfEVJDb8j&o&f_59&29R6hxOwzB(xVb!FJo;wtHNeSB4EcfiNsz9^06O! z%ufL%aP|;~wzmakSlbxt~Qw0gcB zEPfSs=iyYY7t|RUX!K-6pLUST+Y4aa@_JGA2zIG+(m= z;dO1w!c(zq@0Xx7RUP*ioR}-leXAlh_wtynCd6#xgt&cIqPXiG)LaVtL}3jG*B`B3 zs~5!Ch7Em0AtAT;pomNiz(5A`0O^_68v&q46W2q_0<<+Y;Jvf8(rF?PGhj&H@-3UQ zJ6o@~N;O8%=$I%DMDC-m*50dF=t(tEB{j_%UhHH^r_i^swmzN`{LvdAE9XPS!#dWP z*>`N@7KdOBa}z@*3ts}=EA7$StwFkG zB9%Uw#$~v<38$GOdd&(-eW?ZjQ+)}?DkzVOFEPsr=P!0XG`V@t780`;mQ&6r+fEN7MysB3Cl zfcBwibGr7@$n@qY`hcaCc5zG96ls@A@4m@~b#=?S;Ex9m$+`@$1&q_Lh2(*}nVt4+ z>m!4H-`0GuCi(vGf_eWymWsFuAiD_8Qoe&!tAlQ)m7bGG(RWR9Yai%mWejpiL-gsh zHd4m-$4I5e9q8p9{S+|6PNgr^uJ7F(;VD?`k4F1>p7UC zU%d#-`5w+OF_!#eRTv@leVklPOkdpD!iRPTi8l!>yA5# zb==sd_nY6Uv({nH(yw)29O8Hrz;*@Yq_cZN*}gJm#TOv+Ykip&ZE?@4CVlX=AFi2$ z^pe29^az-wpFSVHU_u9f33J^21}cfxr(O1j7VesehS8`b9<$7IO9#BKDc54qrR27w za7Nu94}(=}yu4nnNja(wKdq+XTw3uG32moVy!hA!^s2f{}_2G9A; z|M~t=e);`8SE=EKxb6zM5KPGUC!#~Au!ItZ3Os6>K8r=;TLLuqnBzE%52+o2XAc)3 zN6mxN)x*T(TOSBq*7LaVeDWzKnB%=eejTwH)laTClxaz*nj{qBtq<57Ub8gio1^#x^Rz7U|bp_bpetrSW9F5 zTER$jb?%eu;W$%?P5}%^bD~%nr{7^-TF0E2B{!NCY`P}$sd_Zd5{1<;!IiKw-jPa0 z6kbnqHbqk@MJLqamX0J76S?O{U^FF$O|e95U-h7D{VuWciQn}=N9d?b2nzEi!5$c` zbPzvI)AnW-AjexvvF^P!iUombz8Ar9*x6NTv}*3rgaP8CjKcB>QlWq0?29ab?L;tKX<#C3E*T zLSSp#RI4E4=GkecL@6ios#@0eHT(e%-+R9ACY=XK*r7oQ@6uq7qh156j%!R2xf|Og zqj90TCm}&M_Fi4CI@WN;jqlrs)Hul7)#-I~X>`zT(o_%>?Ohs4uZ_yOYcuo_+=|&* zB^$=rSFCpH!Ro76tohNrLmZXl%GU9wMA+)LYS`L9b*)f*jJ`HA!K7jUPhONXStVIROL&Nn>0ubQFHV;NVM7Jak-@iLE+?G038lJC9OeYp$2*^jxsU4o`mcKsC~2x*xB+m*3pCuD%-hHiW|&ofsdg zG&-&C^Z{hdLK0FqX#^bz*=uvBaeYpfHIUDVyOUfZ82WCfzpmqRD?UYz2(v_A%jZL? zg%!4%=Ol*3tOxofhcd0nC5qRGs!mYpF4(h7X{waVg4=!Ndl$x$$5lWVL{El#pIA_@Xhc==+5)Kb7hLD+Rrz- z%&>*wDfh5}@U?fc?&l3Y>QF0BjXtroSS4OG_-!jR}I=>!rS31eQ z;0_!4Q-*u(i@HmgwLAI25i#f}nNSTB-;I&&sOJUEsI4Jn7q{=y!u>&6@~{ZmA91k) z077j^usYLx9TCH(6rUR?bG4mB(|7oS>*pShN$`XnIhFbLN&c3oQlNWtn7ea^(_eg_ z8Vt0%w+-Y>|HS9&yfoQZ*1h3P{HSAE;2pwrzT+-W94CUbJt8MdBv&v#J{Crhz-fs1 zJY73%>p!%)x{C$JGqe`YpJ>G$rvhNwyboyBhQk+7=lT zIfo67j|7}jICn7gRgd=a-IXdlr{7fooorb>9_oZJXXr%Ea(LV*KY&!*Purz^dG&5t z%FyYCF$ zHT9=>bCaZ^W_?m}p6k0_@rUoHCZDCUgBRgW$(>A1D{sF=`(`exI6?67BkS#O!zG&E zw0W9QjcOP%fv7|@aL{Y#UPNV;L=Bh!(aiK!$NOEDH+8JEbYgRMj{On^ zGQXk@qtW~2bDb#eJ&bR(?%EDw9;CDQfMP3eH6ajc)t&Bj0D%pq?ExoC8Gzws{D@I` z8x)BB-z^lMD_rwI?uqX25avos#(r+f2BNej z8VSJur@0;g*m#A$B?*eK-v`b^Ak}UlQGgyVh6^T|qQvCiU8DZz=a?~vq2|K(vB>b= z(iaEd(XZF9Byq=~84o~i4gnUJ^tgilYJgOmK1qLB1q^MYnq@NuMGt|P-2v2q{1)8? z6tw>Ky*weU>L*Fu2#|6_JK;bB8&{O4f)pJOfe$?$34O zcvGk##vk@+1-O0>u^V;6`OgInjf*NIQ(#}CaV^HExL{Q~RvQ0x?_Txwf%`g>;(~=t5Y(CSODYK+QrbP z&ZkorTEl5j<~~zjaEU^yFo3z=pE1=15Ppb|0Dxf75BQxYv7jh<12%AsP*m~ve9|P7 zj0r7yLwl8yp7!3`W5rfV@qm9{f8_%?OjRHE0oUyzSiis>iO+5H6;;9Y&=No2oqhpHT<2F-AOL(Q*;F(5`QR_ zzg3SH(V_Kw-%i4V&~G4Eg!P`ECCuwpqdqQ98TE5;k4KQ4%*p^{zwxwDG}VKfsE>z1 zXuD$(B#6XX+@}OZ>W7Wg0MPPx@P4v^!(BH_8%CZ@;|jbQeJ77c~qtX}RRiS26Gxml>3wmE*wGOyd_8IvyI)gOjn0uPqqj0phk;ue*3 z{}I~z#$`cFMaX%AYkkzU(j`M#h5U1D*6C}OFOZ`_iy5XV%SV~d{7oImwi(qDdqQ+| zHRWm4Vg;$cvmt5?pG0j$N8e^II)Cb)amH%QYIZxkjrI}ZqOjjqn$UL!GJ9T+x2T8> z+3m^h!&bX=F`oVlqe&h^b8`e^1iPC6 zwWDW_c}cT%*72e?8a~s_0b)d=jP$Zkygd2Im=V7 zq304lF`b(8(1^-?GW=ZNmJeIs#OI+K6IXkRV663>+Mkw8O$HB+(qx7JnCKEHVI)YA z3B0SLq9auSETJz z^^H;MOSbR)TBk?}S8zL{ppY4Hj7#R-#JdXvZl3b9rO29>$L{*Q@9OVA5Ss@;ECU0n z8mF2k2QHy(xo4T4ojPO^r(sfY945``5c-~U>q?&=-pvFe3KCuXv018^%Oi-y2(WEw zx8swtoZTQLG#LfQ_z9?@ucyGT)aq<(PJ9d(u*3s-A#2~ar$XtSXKS=;m`>>$Xsz3qC*Ks^Mif<4^&j}g4siM3p?cS)p737(%lpC` z{swC*_qS{x>SxG_7bPCYyb%;4_gxBm3F3C+>P*#C@BEIIaS*@<8G1Y3gl` zMTiZIUu;m!USRy}4bgsc$0%ny^j56T)1vnYX~s)7A7Uv=1hY|v7tvtk(o!mlNs!5? zQIkql5=@Z;Zl7VN1?9xQ7~rw;uSHJMGex1(@?LLmWv>fT0YPc6Mqv8aim7wtRW!>7 z@5-x&lx@6>ur%$*R#cyW*%X}_%mdf%r(#5v+nt<`KXzvN*z5H&WEjyea|2Z>18GQW znw$gRc?x{1qlJ@ziWRiG1FA(8j)P@L>|;DW=)ULf_8j9l5~m$eMs>wlA^ zNf4VCf8+E4yMIY+f@IzJ&+wr(w(z1dpXsjrnSN(FE`Sl-)3{TH6qw5tD36v@;rw6( zXr-)<2{A4ZXy0qV8w^GNsk1P{HX-r*)^h;**`2D6kMNhNUadpM%!&{-MH+W8sVrRG z(yuuQ%)EcAy>Kps2g{JMmvo~>a<*MAF6--UB~)f<>5PB4Lk`g)fB3Y&$=~Dl=%W}A ztqqB3Qwx$eHa;CXRAG&K!HO1b*UpwTuAib`qc#S44-gwf6cT?wy-B9U@f5&;^AL1( z)3qe(4U1ppn~jv%8FA@6SnhFAGBj#mmkHcqW&K0AR@`xh0*)n)uJSg-X+;dNt$VPi z!iCjK{8%|OBcu_OQIq+G>ePNf)*3ntT(TV)Rn!f%g*v}+E{IHk#Y`XTWtfy~};f=_Y zN>nBuW7>WUH%CFbrzZ33Oj>^`O6xWR8pU_Gpkk^sH{HM|nl|WyPxN%45xHLipcMe9 z`|W`QYC#Ae$btlUL0SeS%ws#{2|QP29-qmumSTe3WWh zsyGt;5L4|$j305LHWvVA9`a=r2QY<29NF>XJDDg$Kah zOak7{OJj|bH`IJM|MTiHkoSjiXR9>kdayP)kA|*J3gq|sZ7XlEDN5OID*w-` zT+}Ws^%;GeB$PH z3h?bKSDYTz2Tx$g#~^7eGptYd-a<<0#9VX>31L$j()7KYP0GIwYGK{_JuH|4NK945 znEoY};>TZkD0#rd$eK_#wls3h0`%X-33dqGv>eGBRqhxVn0=Tj7<)$SD2#FVtYFhy zewIlg0MgpUnoEwxr$vH^AMQ*nhX0Zn@wLP4+TRtjmKiL^>x`GdHDX{ZK)FV>OvUP>dwTnyUKb~Jsd|Xm*{>h07Xknq0HcdT+S5T+ zd3JHoaM7RjYStb_msrzQ43}({Q6Pu?k)UP`RRx#5IEsaT4;2~6qGy*12)qgi^o!CZXD+p78>SKAO#pU6Aa>AHf8sFy2|IuUZ3U$@{MRs3=Yb2EA(9Z0TGZ297y(@*I>IvBoE(Jl6LK@$~53v}=<99=YLy$vm;&3j6{f-{Dn zdMUL~$>?kLfzJRL4^VyLf3CWY9IP2~QcN{<5oTTOwE0>{z6tLUlh=N%%ND<1QfmjO zj#j}`Df(=8$hY!v*|&odVj)KiH_IErSl~KgNAVr2x!ecJ`8;8+2YQUG8Fu^FEfW#N)%jne#$Pfq_2ZQwh&tYaqT zXajMMkp>U6EN0vGkCF1Z2$>^Ed#G#i)6eZDu;ekgkN(>f#)XYBP;tjj$y(7jKvkl>BLz_aAMR`eDPh{T2VaHK?G_w^ z7E}9sJ^z`P)1`o#N%_W8DhBCG+P|s3;Dh$cg8@-;yYQf+AKDG7VfldcD$FSVd{xf=9erpC)*CO}dD%=5Amu+;<8JB=Fjs;pN z^+=N1YgWA@&{jOMUHg@}Qu;x0uZ6f2w%JLbqs8B~&r8C|qCiY`P|-V>YEav2Au$@% z3FFwd9`UNIZC@H6U|F1$aoAdP)V}`W**&qxb)X`byM@DT^pMjZMZtG20W%fUUIZ}e zMNpP;Cw*W?N$jTF@1rtzt=lV1yr}7@3O{#1#A8kaD9&~zGD6kvzL*^Q^yK=myk0Q& zKY@(z12}bFAk|>oBbRHHPRC@wz1G`j?FrVY7TSA;qr*B@mEK!ScA(FCO_$1uj_h@2 z*m}(&RQ!{9pb0uYUbkzy9~=*L{_gpAWKSg3slEC#BpqDq znI7cbJ!m&5EW3uc^aVjXY7E0>NHGQ1#R$UY?lYssjz-l*9QO$1-lI1^j0pmT_ zutFMVEv!H>*I9w%85rtWikSKFBpJ6V7n7z{kS1tEMSUTxSBR(DpK>Cj$s9B)wJo*9~4Y~wR<^O0wDJRz{)RMy}axUGG-vp zBaT~`6uE5@XA&eFg5m}xJ{Uhf=K&rmZDuC#-WJ~hFmTB8r|YzWvWHzNFE3G1r`^lH z7~TQ0c_GL&;a(;56(J%pG#l z#9+f(k+m=wY{T(mM^3|Fzs12|t9{n21iyUpilc-7R=A%wK)~?zqJ!X%-y9AZAA-U1 zqSh^3_#OPs>vrs{I}Env8uV{P*Jbe=Fj!*b@gs-M+^`*9WEG1BJ^JD`O|+N_wJaMS zRCZ$3KX$)7*oI=&w~iKGFFG$sc45)aeQvr|Ifyn_dH&*!?PJ~i8RhTH9*p2 zjpkkIR1Q)0;pdM+c7C>sD`2q2f=CHZX46Lh$xn9pe(g!-Mm%ypYat9g&OT1bZds!N zgB?5gzvIIAvE3r4V#KHT=t8)OGtF~>RGLIA*POkjLvs~vQr$@OpCQzyvuGX;9&K^0 zoPmnuPaB<#e5)3vuea#g2Zs!8#=>A9JQ3)RM>2HWzrK-8rN3;(I!A3Q?N_5^@I^+X z>=taEY;WurfrniUL>}pRVG0H|OP;;wpeU9TP{qgJBFTWkp0EO`e}>?~#$QHH4CSGMRmZ)SNszr23sish8^2ng{D7x}S@>{0T=qMY`QM~2ls4fhI|;#=bSg$ZD% zmY6d$0^KdD7()|3Hb;Bu0TLO4TLrsW!H?~c{wS9*SeVk#IWz8Atm9*i%&1AHWZ%PE z-BSPz)v3vFEb~gbA2t*cX24G#BjpDGk?{0=qOsInLjESE5s&T_v*n~E@l0XWZkywM zyaeTkku8=fTY55fN~JG245W#EqqojsDWtPO)HnBBqAnvX;OeDoJ((=MQ?%1%A75HU zhFR9SM?!S{7D$!K2MhAPLz0(d=xTdD=WMCD_i7K`Q6;TJ7^5>4A*N4R0Xw)7f%hoV z@#(0q)UwrLBYWzON(Cb?o}SA2y}+1ymz}!Ze{ra=h!&;=d9?}!M}Ru;CcRb4ZJFH065ccqA} zb-{w4*Rt$gjW#5*J61>(+x~CAxaF~)@Q`mQc;L}gLa-fiKFE{PS??*XMBau9SCXn5 z)*NrOY$3{<&a_mv2T^$fbiXzU5j$t!!oh9u3|k9xSG<3&S9rQn32Go4g^qp;Ou zgxz9F^s4FN_0c1Gm$$;#Mc61!Tkr>Xj0sr{M-V^q`ZV!l=Xf>Fcheml5(Yn~`|nq4 z=!)*o$)a?%o*uPsF2~GUUUc>F7O`+=`K0Sv-!B(Zw3D03W_FSBan^;!nlT%}kk+|s z-cR!6F00It$=0Q6Xj_!!dj(p2(yt=;`f-WdTzkJ-((CuelwN7Z&7e%;jK=H& zAx$NThsn5Af}>sOd@TW+*T5_SafU{e74HoxD{>zPBJB};=WP*uH=B1cwgCB_*n)*+ zNl846!>x*Yh+B1Dg_lqjDEhh#s6gi6L}p71gZ7)y^2*ML!l>u|q6AL#x4llucICGC zKcygjdHt3Y^$yDmvj|bsIu6ZR8=naKpPW_(fo9z|t%>;*i1bJBS*c6#ymmYn9pJNr ztC_iOvV2e6rZVL$@qR^o?jx@ZIL$kkRn>5uRM;TyJ;gKF|LD#}{o0sh<;+76gJ93+ zu~VF4cFR(U;@+U0$qmGXNdwcxOYD%?Awx=H`3(x_J%6w8@4Srg~Qvj%np*La6r5NXLfwwnfp_j!aiX8)yIlLNHJGfV1C)fs*Y!QhTCj_71G3W|x!yV3M zY^FYC>M`!l?_02$Qa>{z5;z7h*!N-2{$L95(dIqL;sYuYJnMEbO3We7frmxqaoka; zve32}tmIDfW~Bm?4~iNLQFBgh>!HHJH# zphvJb2nu@Iw|CA&lc(+J*U+>vArK=Z@=W_KRXikiw5s<`?qQTUUHZN**XtjlgL{0IKsUFeVI8+c?-5}=iKj7bNmDB z7G?(*!d4*A4{$?;#tm9M^)DyBMq1qf!IAybSFEZ>$Skrmtu(v!v{8bjU`NlaOGB3h zO{I5@2HUAg>l28Xjvf;5jCl4LA>cgL^Wuh3w7q4X&Zt?QsONKf9OULR%_$^DWX3Ep z8dHer-Rw%jgZsMyo(a>WjrVtUba4heA6BRf6$*BQEz#^mMbpFc*vxs;D*VO< zF-Tm(MwBCPDMZ!s!_7Uij}=DEFb$!lMp=SS&C6gfw_`C@XUrA@!m3g;R)@`>^J9U) zEzBuQMsb_vX=AER<~qD7WkhHEIN^`SxLViGxcU0&!+^Sg`3^HVIF=M9J!EaK;?LY# zOKSSP8GqJ*60rqau6l_=ii%UBEB{(QP04QElDYXj31PJGKGaFhA1kl~Pi?g|(qV+|4{t8nNLD%XFf=3r zV;OO0$ZUbn_Wk2P>f?ouRlv9i*`1eg5Zs?Bifz1#vGOy_vKX^Sh_NWWEGD5=qo?=5 z$?Pt5v2--6=twq+_e#P$0sizT%u6dOiJo`Y6;-=WKz8wV0DX9mbEj)(9*O{ppx{ub5dU4JUGJkh!nw$y;Zr zWU`Dy%;C}0I}ZL|2j1wHnY;JX$_ke%O=}OkZ^q7%gsdo!g2HikL^T7E2^jwyqbCbB zuZK>QwM6Q+wCdJD0{j>k77`eCC)4h-T-Sq_oZ++7JNAYPXS2w2)>YQjDf@b)=6285 zvW!sqtT3lc+cjdr0z%>9xAR0vR*QNM=^k+yb1^I$5CL4!DW~2Vec*?-m*Q=RDh_*V zx!&mVDM`lj+20AaLz}RqSmsvcz9gD&raC4|Pr{AaG?S@z=+V_c(M1&?GM&=?vgX7q zA~QKwF4S};Pu1d3qn}=g0*NRoq+~H=^}uQ|^79S0Vw$&PTO2vxon+l;!9r;)W??Bo zKFONC0}K*2wJ*lAL3eVz5xZLqa>B}CkInfAvyZk0oA)PCCr+LV z#)Y+k(`M^7Ju`c{_WszgKrOWe1H3)z3^Jj=IUpa+-i)1Wc_2~zI%MNHoqQoP?L#di z8&K)V0vka9oYcmt$paHQG;oxLhGg$R0m7rBb+W299^0oV5);9z9FAom=B_5xPU z#k9|49iLI@7nMfOjyX(~9TG*l3{S7aDghB}XXE5-CArLred^Dq7pG)} zUe)%h`19--Ze2@-7{v6RO zb05jBQH_T5J%6#qNO{q2YJbHZ?)ZhB2L8>n0VBn}Nt$2x!ut|!N*c08BY^OP6a)$LvnR6ghdERu`)tRt+A|;*kazXKeW4+c@Nrt9d@UsY<^=gUY5Hi6> zBldfT6dV<(7@$6umuyY&=yK7Vo{H1MT9I*TvDe<0p^b*A|d0g=VC+ND-k z&R7f?2$!3?B%k+MB-L$S43oXgB;wgB>-AE|{ioLz!3~ONxsUn#0kTj?0X7<5u9KL z=bS0?(t+zyTj6F}Pv)L|IK*e3d<^OCr@`kuw+Dr8K2P?&O`4*Xd?{I_pF_}oGWBKr z4!Z11Yq=V_t0eQWU!W)mIz7IWMXMt4t33Ar8ZK?Z#$QP&eVG4rZH+@QTJ`W4$*!C5Mthmc}M}DMO9gH>g|pNS~4i zqF$bVVrQl7^Q)#g8%z(Xq`6a?H(n|IBX5OS7P^cRQS7!&FXevzI|E_&d>&=*7k&IU zE7yJI_+MTa5}A2uW;6F?Hr}$Zn}V@anO~z}5rG?e4MYG;GkUUMGq!dIL$y)eb8q@7 zgNPTb&c`@-3W`G7icu+$2qiyKV%!yXdLPTYS}=#em)sz<&l;(TYK&%F7MG|7!L^t= z>rZGrAV~e}X7nP9b?bBVL3 z$kdEC&I`W<7hgmwMb14)UmSAuy?#d+*#S2|`AmhZcc{GI6OH}68Jh(TEdL~>^>O~s z>nL42P0-JO*FR;js&MTq0%n^@Wizw=+#gq45i#e`Dz5LLX{D&2-W2#hh_x>4=GWGs zyv0;MVC7=nTh<5I^i*u>q2;7v7z5^Yx`;>+muk9o9fyM%wYIthQh^~gK2YBo@#0_C zU#isnuL7Z#Ci1UaOg=qdrC94%dow#yS40cEHX4b&ow!K$`xA zS!g3*(f_}`xV0d|;WN;i;uGbI9bxy)oCK_Ww4XumkgsT?TPs$K)fhXy|5?qx?|~Z# zrdT@IF9CjIceFSote%E%_@`y_cw>B{Lxivvap~(HI8^Ey!rLnpbN#T<_o-2V zq9_3gp{J)OJM5O&g0M$YF~wjfvN~K2UhDpP{=j(Hn;i!n3zwqsqLsP0TaB2ERPQR;$spr`to= zc;gxU7=co{^L~r4Ue%+Gqzg2EH`+%3xe2V?rz$nF=Tcn-(R<-TpnvAVR~8>E7AJ}|>X)-%$9rM&Y!;UY*F{2(?I!Fu6MiZwzjBR4 z@tziZz+%9Sfx0*{D`B79-fa1*K~^g+bEae3GLm#5uMzBB=tB!K!Z))@?LFgJm<`GE z(_{A^j(a>oOdqVG&4&?97bY-MG1nv+Ya?**4p#vnkS`GU{Z9u1k#BwoVvYOtZ4wN@ zUP$^zN~6eC2ttTSAoA%N!n;KaOxN-FMqFmNU?NWLKQ_Xvo=-B6ia?ffro@(}X9AY$ zAH`XHW!8ADAs`Y=1Nz^nNzYi50G(2S$W+-^v#~y`Nr&FgDt$j(La)aBhg*7yAsU!I zU+r_%$%&SF97dCse}8M6Z4Nm(&wDt<-OxtI^FppSqbk|*V&Q_twk_Cod7iVjU!@!D zLS(x5DyVOU1Cf{5W{!}aNik%r>%D26D}MO$Jq>NaN!~q`aaY2LK2ui~+PqZScf>9= zSuYi~WR5vx>37L{sJv3-ER1NSTYR73R8;X!X6Pl&OG|Yg|Ib zoaOzytLxR!3g3jC=veAb*YlZ<>aD?9TGk)_d!PY`yAX(rrybra?gvt|dAUFpQTA^# z<@zQ5?g1Y35AQ=z>IU1Va##!T#kxdqomk2K&}S1|j{nWwF4N$iLBzjYOZd_pllZT6 zx@Xv03Nt18|Ep&vo)hu=KOL^ml+)t>d$6!9JbjHfh&A4n-*fQ8{}5DtTWfV*{zDX` zhZ;a_j0pQ*K9u=a!v4{XXgef#CJAly>nBCk#$;m|Q!^F$iy!I;UaRUC$H%PQe6alg z?0=va1%s$hQM5Kr*Iv^HPIquV3yk~Nk)HXK-kN5Rf9)~Pllf;?S>rz4mVJ;?*LoR& z)<>XkO)n1m8W9kd|KK^j>UB%KDWq||fJN$g!wG??hl+{na}8k;9UD6Xo>Q++P)4e! zA9So%MK*+qtJxkC7IM8y{Zdn_3P)y4W8mWUlNn@Dz3HYGE@hap4aFKt62%82JhT6V zqJh6g$zVw~DZbC#cKWZDtHjDZ49@W{YjhQ-={e{2{qA(3sM~w3nVw{ecVTd3jAhAK z2D3W2kEGTW{#nk{n4*BgS+Dt*LGxY6`i=XT8PfFCjtx&YI3vZHj`1VVH+oU%$^jmQ z_gk@3@k(Q=(ozhN!Bq(Sdmsv|SOfm7F8{MDU$Is2UghU6>z*&c3oi<@X z_E!+`kLu;1_SE;W#F;&|W3%41L)(MNNVlG$ZRu+XMGq~|Wf{E11TW=w{5~zfWUfK6 z960f>)l^d91=n=#T* zxYi{b8t(VYL-(4=9<(1w#p+ygfhxK^U>c4Ad~+AN%$I4=i^lH~)VW zf+olz{^93!1(12I5rEwk<|g8yB~VH&R>CGWL8TtSqmUS`g7ry&tgs40(QINcwV`IW zq8(?vc5e{%87O<7-wqNDj}VF`O)nCb7HX4q=Bu$mPsiaw1m15q&nDkb!A{egL2?X< ze~tL|vz|oDBOJ=>SE4ncIxAF!O2!R=ni02Ne5vaJo}qTP)gCawGT$^yLBXscX%R(Oxo$TDb`v<}g+Qc3 zSK%MMfJv{lA%21Rs>c(w19qn&SHR-#Lk#wi0(EXHV`wfw_9_@u9fRHjGePw;ut5{* z*Qc?B-_{k*P^6W5*TPf)>WEpr|k=AQgPs>gM} zA};rS7d!!$&fNe)eVNnlT2Na5PA4L=ciBm-gzc03#wO#Qz5cVsy&sR5ZMP^MJj&#G ze{CP^AnhB0Xc4p3AG5^FMfK)RPnEkESacW&0c?#SBn*JvP4^T;_bnjA~?g{i~v(9M>FOnte_7 zVNhS~jeH8qt=Q_5C`%(kPrNIAueOD_&qyHHTfh|{X!Z2Kc@W#GN}cYH9nR*|gmra~lr54z zNmyQSwj*DdifA5hb=s!09rmP!tIwl+!;!Ng1XRCulb+=AGh+@)&9Q96Q_UwItbT_L z$Uw4zY75mANyN@!$~4=4N-GUXe46JstQ5ps3T9odio$jXLoWcp$wjWz z!eD=Z)IHEt*fD)bPyoi`zsm!(;C{Z&sfCfT7*+DNXn)Q_I~uLk9w0(`tAs0XwR_Jg zR=fxBkB<#{^BsN>3gGgki5H%z`dNtqv*M@uTpaPougaAIntBzi|0NK#KY^W~0F}hW z;#TdDli)dcZbsLm1iA7i5<-U@Y=E#oH(7uYxLd1nl%m5SzXMJNdY`ciPz`(%E*iY41jsM}lYm-3Oaq_> zrXZ}yS{P#|&=fAg%QFCooiOwy$a{=W#-{@}%N2@fNGN_80&r#vaD9KD0~FzPAiuIq z;V)t~#C2`UBQ|wOCTlPDy?|&1nab*ix>TlLKC_pYjGv*zlEIy1TE;gD4 z5R&*6EV(zhivbFb1sk(V3Is9V)|G%;ML7;u8;1jQY54h1vD*MBjk^HIEIe@t1W$0+ z%Byj+0B^JOimMRNYgd8%C;3mDSteS72ls8gf1l-5AXSGrXJM4L0G0X`Op`2W0d!DW z&dI~Pr2-v}P>5)o9(EaPTt*;r1tw2XV&+4pUI}(2e`mq7Iw)jniY)~NBs-g>aZspx z;TnGLvD+KJYCGTg6dFm%#eKHN4;1y$NXO41Lo%G5kV#vC1DLOQfUFGdT|)q1I?IkD ze~>O<-Z&;{%%1SyU`lZmI&QD9+AfP!hTEjx#Y9aOa5jD--P zP6o+gdYR7igJCpXfUFA)4GYP1DX>F@a$%N`efXed7Q|g;pjn|vt&46&$vM~iJM3YlN-57w-ChH3tDCMB!%S=4F^BMUr@_;qc zdQqsGzOyt^+u{sT38N#Pq;+XI~QoULAeMizZ5bhPM$=&&`9ig~W zA(IMIW z275QGGybm0HA&VIw&S6&zrpB8lz;IM1(ml?l`%S3S6pwS+c_=Y24JIV>=6LC5o~B# z1VGg4!lNPOYz}|N4BBbZRte(^3gdO_yvALI0fkv0vVn!vZNfI5hjxx*;~BYuFgwxR z!ctVV$OlMQ`b`Q^dU|PRtmHd-<HF?^W1rGl)y)<{;d5W9Psy>3Ax_)i zx0;~+foyc^dI_Q3f)X?D-|!e5M$dP-L$<`OHSZriH8>PoJ z_ESRxk`xhg_;htnkY`c#(Tp%5YkMi;5%+P3La==hfl7@w8;9rox1P~qOeeSMoWo3o z^n{socrfzV9SK#_X2}(H*`KAips!gvzwkG81(jy5+t{UQO%Z5X10g_7`7JT;0eCp& zLx#f9-z+kxyZ|D?&TlD%9eeLJg|c%^rjSFu9)geSDeTv+A<#V;886b$`O$OLODcA^ z%WGy-q&{9#Ht*SaHk^Lz%rfvNjoo1;5vZDoI+1|^?kWR@`s&Z zJJp)pO2`&J@l5m9$Iq6R45oVzqIMx4d<5Xz96e(p9l;SHaWy7-*lE8cU*?Q%NM`8y zd9WqNN=q{6*%tQn+ov%1Z#SpDiomTphFS_v<}~qeCISJRZgBi0Y=EG+H#-6QtT5E! zqrUX@!t#Clx8TPDyINc2E_3W+fzi2&Eb$$w2SrMxFb3ptHzt+=fabvl1to^J5@1zy z(Ybi)4WM2K6Uqw4*vB`@9d;TP_)i5cJU5fJV8IhnMGjqM_$?r$0aoeQrGhr-58vfK zCe0t%TJj#$gE;tO*JQ(OS}H14+v znjX7h$ux@E(Ru~^uq)0_ykgdrPPAL>uGl{We2CQrPzc@yL3?47cOgRyITBz@l)-rc zGQR&5c>LY-{5N_b_mZOaOVo@ckKzNT{73yS)kfOJ7&^+f@A48&Iivo0#s{zt`N4+ zPxx~_1B^uHVDadjSGIP~X{`)Hn;VS&fKmxQ?g{VCQTX&n9iE!Pnk2DPd(C!zP@h0f z-%XiWk8Tb^@pL^Nd{nL^VQH86WP9?Iq4A^JFc<*VWF;Qjx|n+@&FH~9V3*IT7|e)n z(<)`nc1Nd-SU&E5nfj6*8gnJTr0A+y#wm1DFmmohefP&YL$Pv)>bi}7!;{XY8&|?k zZo+2e(^dS#{I6d@QZ_I#h^6(XU1pN7saKO~`4V)!8ybR%BA)C4NwuAhAFxvobybhf zcFwxIGDeIJNKUmlCZUh?MF=lE>$J{uYxttJh<2uqU0gU?H}8E4cC&C7!^**00Lyco zrZksgbT7|K5&lNCWcF^c>|7Z0%bT3M4N1XesOm4I*lN`U^0`22L?t@5Bj`n3a^ z@wK?_+_90Dl4>5a7r#VyR@#L&Im2LK640Rh*h=ZD>)IMOI>^j-&*Ku0cC6ocH3CfF zbKz?ZxzBJ&v|;gMXzr7 z&1C7V2@FOCWwLx;2}|vkGsYtUu>L{OWcD`m5t>_H_4r%9%E0FV?-Vrg~E`;&gPt=r;zUdGG%v+(69Qg^B3{z)=n(^IQ};|`6_;JVZ=mtAK&iTOe~ z7IvlfCZ8*;qG!nCp~Dd!XGc4n_d;h@>KXdv5cgmin%W9acLJmsw$Fp;@R@8_d3C+* zXlK{GOofj5x19LG&HW!pWWNASJG96)act#2r#~C(Zp4>)?l_&khQQYIDZd)7f+lM} z?ELga&;(5kk!UGVf^SG#FRFdExLfQbnHamjsHMwgcg2C`7JQs#myR`{f(2ql`Kzw- zYSW*IL7J=xSIWAFIRdpXnAjSP&uy(ZxJBEsOzJ@KJD=dyj|#@>Oc2hZoV2qeq=-Tx zBfgm;a;x@3G1OO?1Fp7a)i|x|-m`c2Y^ao`WdtldLAxx?-3qqV6;ZH+5>Y0Uy!s+l zhR8$B-1$DOAfre~{M2rIZCL+l=hxSb2G{xW-M)r7s-fM@igBfG&OJP`(k~~1>pJ#P zb!WpIiAC>$q1z`dQLR~;Dj~EwM?rK~-IvSjXGYsJ6yNm`hQF*XE_-nt>Eg5k#14nj z#lqN*)HrtLL89=)`i?Jqr4_O4Yy(v<5w{2^QDuTa%YsN8$QB1#1R@ z$ERlWc7%;dsEywZt*p$*eN?7)g!z6Gw!4oNGt$<0tm>(kVuubRsm$SPeRO5OTfG06 zl7yN>!|E4a)%EeFO&d638cX+}Ai7VAk+zfZha)fH)}BX{e0Y=gWqQ}6!}$FrI;gI# z7n5pZk6X;w6*ykk)fjb;8WLWRbPZ4{`xHlfbbkS^EvL@0+rJIjEGAj(J6r0dU|FHM z-Dji)?F{GP=HGW;Ewo*>Ix) zFsmgGk$i~J$i#TvMz!cSrBAhAPGr9!il_}1_no-!-o^QitAGNK^UC4_ng~>b{6G#i zp>b`T4zv!+JhlNxo84z4x8kM-bOkbPKVJ}DfZ+4E5n<&%sMY8Faf&esk?N zsC`dr^?|UCJL8R(69CH1l}k0SF8L3jGOWFPMgwC(KP@ly?-xH7-!_vz0VRu|R2c{n ziXLl_k0E*Z=_2jrays#~@AnzOi5g(JxlaM9x%s;{Xl4LrLveX5@DmJVBqbn; z`s)Rhg9Rzm^Sbk#Ya9p$2a=S-0O4;jfscW`PJpgJDD(3L_0074xm^&$KzI$&l}5Lb zy9L1L&{Nbifugwwqln9m65O$%pJ1?DP42zFUew!`iGcLChLC6pPB#>I!KX{`VSm1Vu#jD5Wl96!0L3>pHSRMXVGhKGBhJn(f$ zNhoV-`LC#XcXUq|jgi>&{?3T9k zb(oik_NTA2@qc$KXndJB30J{s%nM1(CQryFtGJ#O?nz z1jKH}N_XwqD3A0T4L4%;`ZiQG(7{Ti{~lQ z;0&YHTrBT-SM5n?u|9#90FYg8{(z2%ZDEzw`mmcOf+ASc1Rdd0gU8vFbha|eFd;%> zCUHbu+e=p!>H9?Ue7mr2PRXT3!XJ{1^T)ZmmwxmvbzdvF0*76f@?03pk8Wmc2C;N3 zNTR{q&z+}iNS@aWn69oHQGzE6!V5m1pSzVpn%WSqZCBhaG@?2z=00{V-I$MXznl~c zud%k$4zf}%nT^{)z2Q>1iY|htj>m6q=_mspA<2PT8_f^c)`7S!I%o`{! z^3OK#gcFiLKdqhbY?kHOla(bI00_rUB^wpvoP2HL{g&Tg462zXY6ql3^@z@uhtc`8 z`yF2&v|pA`Bd?e6oRBFYQ~$sL*dsVDbOKZ+xh(uE**W~#RZzdpw}Pj6N~m?apB-5i zIzeIV(bn*^Q~7RWQHza9?})D~kiMHGijQB47#1V+b@!`iFjVJ}7Cw+JXQc(*rA8FJ zFlhh!qA22$iu|*aVyfC{u?Imgq6@dkR+MKv2KX|ci93<1t@}pM&N7PD#Mu&D$1r!k zZxU@kw{0ct!<*ZO(ff|Rq8=ExuYFl{H}#CjVDhuavQy({krdJy9o2%dw629CXx|cc zx}e(Cl2^wm8`2iP4Fghsu(+lz2y~OMf>J(LY?ck8!#M*We9P{ASz*8`f7O@HP@J-k zutfD_1)E)Kmh7L)b_Z=Cy$ThnAWQY>-GpV0z-Mc_Q7xJNn!<*fy{mMtEe_>~*qzM3 zoxfA>dj1wHq~lHV3$>;JP?IueSi3BxjFc!EcG&6Yxk~N{4{&}v4E)F^@k_8 z+HGV?Ii!Xd6^z6Um6C-%Wqp~=D?NjN2t;`!_+D+s7P|!^X(|;@F8^K~)tUNj4t}gM z6j^|zpMs^8>(8&RA^h|VFbQV@sS2VJEuIm3pPzlR8Ed$kYkbnA8JBl5p06QTt0V9% z?h*iY^an+CM<}O$p4ot+5Q9_BmSn^w;o?Ie*fhF(4WYux_fXy1NSw8-1jJk=9SJpl z34^1Q&bOPfel6T(N)-QC3tDQgn6~@)LJT%&O6niqFVEH%E+3lffZDOf98mKIdZgE8 z_I;x4e%Sg|ESn(T8T^32<p>Rrb9dB?PHz8v#E7BDf40H(adab;3IuI5B5i2_=)_EYs*`qTnDmw@%^Ql1`;i^Ml7GXQgC8_4VsK>T+T9o+P|iR@T5{-O_N$M zqS0-f&wq9dwDKf)W&&9LQJpIV06Ge`{#x3j324OP;rT{j(F~h+GjuCvd!hCksl_Ux zR||hsUY1G@7hGCmfuxHqn~szRZCIu4Q&k+hGLWYVjR4uR%p%j)_#L35YIn?4gknWU zm=;1MYIOd14_bg{E05*OW2nKW1mw&zhC&PlI(lxF+;F~1jlVADHT<=Do(cLwX00%N zY|wjdFM*dbIE)e$XwEQV(Lh)^g#Bx7K~GU=vf@~etiS587RMfGDla7T zD7P5H)Mx^b&$=`TD8JgHEpO6C_tCBI0u*fwbuS@z%9?zke^KWRXC1MQqS!GQ|zSNSf zh93bdIqV_BtXs2)hj!T3_Xiqe57>5Y*4x^18}r9Gmk@D@vHX4hUyZupdj9s7Q-`ml zoxPt7p#L>#Gl}XiLg!6Ds=9gZQrk-!6JXKvz8kH=Jo_7?egW4;bJsC9oArYk5qJOx90 z5uoMbO$%}TWKSqzZPkmW;szqIpZ%%0D3)7#7tXS zwc9%sZf0}%ec=2lk6M(*<9)G1p08&wX08)7_`KJeIANlJk?c7ELNEh4VD3S`(PH&Q zC6eg_`qXy*X~Fc6DRFF5L+HYh&Db-l6XR0ar7ixYFuLj`fc^dH`7KwvhazeHDwk0h*QCz$WObRxBI&JOyW)~y@EgBGqD4% z%oc;IrLapd9rh}C34GbBzGrVTnjL!rhh7w)RhmLL`KC?Xk?auhd`;(AQ&$+|6#4fj zV(Dq*nA}~6NDD;dAUN)TuB|ZfTg{H|LG^;35h|_?maKP~sdp|dSzs;%xCLjxaMql< zyh%HKL1y#_^wkMYj_>;cnR6JUgj}+x&*H@cQi|L9T`-#4S}dq{LVe5M$Y}1WxFCq7 zg^XaTL!9K2eC6I+8+}h(_g`>btbU*6p6UOr z?Aq7&kS~w9-wZ-}F9=q-*6DK7yb0B5XC6IJespCDZ5q>cmS|17dN#qy!ZRVyAuw;I z(mj|ysT7;(V}@zB45)afo8tMZL{4S&X><5?(M*hQ;W<4adE4sdlJx2^60c`Ze%Pb0 z7~n`C+g_kFwx~B(VYZYkG?uO2*JDh9CZ`Ast%p)FNP7*sw$<|#KV9<>>J13-P zLJu|@n|N^}Ny6Vs(5J`X=z?~bxGaeoSe_?Z%H3b)3*=3R_H&>T6vf}fyf_KUW-=!Aq0x=>D!jid(1_6d zcj{7n_rj{MJ-PPu!&{|unq|&YbLl;i5L0S1o7sf(JxSY(39}c&n#m4A%0KCMsL^9! z(zK3IWkTnVimG;3nE6GS)5`O9qYsYx**>rui`6FiNf&Lcj#`XV@W1n!a;0)E? z$0Hp~SY@*xy%0DQB7-&(J&Cl&=z&_o*rU&`UW+Jmp{&uUDao)GG_Ul8k}=F~aPCTp z0RdH0AadbTh`2JwZ6RS#QB_pJ?BHqS;o(s6SItq+d40mf{inngni{g%A>$zT=gFzF zZox+pOpm@jN{NxnN;YO`k;J4cmU>FnOnT^y{iBC4x6Ow;LEkZ^I8+a%QdGSnPh=+X z*c19Jok9EJ#th4mx$cRPZ zT<~>|7jJ@s>5e_Qvr*myw>lW(_Nffu^xnK*{$n`N!PRf7Rr={d8Mpk(AcA>%FYwqk3hc&6wL+!cDybFJp$1)WocOflo`~U!!G4yBHfz;p|5wG)aKnJ zZB2^4oS1xP|I~6Qs+x8qGV>J+eCosM^Sp@;!vZvhoaWUy$EyJ%VO4X``!|J;v9){$ zc{L5Kg|Q0ymwT^3&tm5)8`__Z2Y$HeA{7E_4WY2`6?94s&d?Kb5^i|}fc)MFvZ*bb`S$Q;EJ)sP#`e+_XY%lW3F-^CNVHHgie#cHE?hHw>f*Dl z)amV*lLw`Lhb9QOV|+OR(PqDU2G_Kf4o7fFNZkaGGAu5`*#V?bq3tf z%hAFONJ2K65@he??5Uz^VyjR^<~7@X1oY^ffXdA@BBq5%ohWZk4wwRv^rr!{-3rM| z)3jku_g--q=L7tG#o%i^{s2{%GH+5d*OJ4DieMG^PQ2CXsAUyh^PdY|^6Xg$rmT5(kC@{9bXs?p?%*^%*5g+y_ksfQ5_EpbPU!TD5f zF&z2aqN7MiD#zk-XGLG2s2MQXRsCzJ*fC`l428hT)g}<%>}1sJwkoKgdRpvZFareb z3Foq1U7stecgG<*R>a%7=>Y9uTzmk|lOG~*cR+2UfVo-aI>G9SQ#N_p%0+9xk=O36 zU~KIE8lX!9p!XFdfX|^MGxC%y3^u|`^Y&fv>3Cpp5*!=>HskP!az4EH{mEoJ5}<3@JzV~yUu+XK$8piaZnxkkg=l%lj- zIz>JPB25%DXbkB5zhjVmeTf;prD{+AsnV3C!R#fGb<*_-$^KJ`D2K4-xKzBLxSH;j z0L!q3Jr+xyG$Jv)xrHw|vU#Z?XUWR{RPe70ciM^tD5zigH<<)v(?tKQESC>}?~Oh{ zUNnR+0s9E}0Qh6T`peddmP`NFgGjkkR($$-2%fBUKQs5HNB2*XAeyWA^KPyB9Q5=4 zzJBHQlSJ@Y3H?m#ilMhZ@8WqI^`GeeUo$CKo8Mfsp8xDSq3ztY;S4tF?T_n4a5xl}FzyflNBK=@~$JN8yyq zK?f>VbNCT>X0iCv_=wPSawPwoZ4x{|T|r1pe?(vyuA^WeP!xcJjaVQ{1L;ij6-vak zH6i7?V(Yq5EqQZOP(vd8pb3!9Yc!hXH!rKXX%bJ$Jj#}Lw{jkATIOFQOksd z7;DRf>kF))iZHH|5FP7x8&0+L5L-^38uUTh=T{FkRk*AO-G}+g*Eh3Qmb+80v z^jCSS{bFn4r`8iLyfV7M=Xlii+}Tfk$Lu#44l|=oom*S|`fA^rZ~Mh2*J<9R_DK}T z5+&7qc`r>g$GDf{vF|}O`R;%0$Jt68+}Z%14mzWc%EA@3q}G8xWciJeIg7eo#|{fN zlnFfh;CM-;uQ{ftbf~X1CXhW=>2we7)^jsOnyHpEW_^3CFRyj*}q-hpNeH}3=@{aP1j=p&M6#A*Qe@_>j$9cgm0(DnBPqv)7*7bAe z-3IiZ>kSU)VHTKBSnwa)0WoZR!m#j~@MY_s!O{&^)r=`F&!0qC>*o-U<;bS0Zr|7E z5tGuguk~ejpYi(q%LEm@suJR@X3$jplfSEb1@Hlaj`ek)gzfyMiXQD`khO1JmrS_Z z{HcVaf3`WtWpeN(rr7O9bXuvGl4J{EZ0DUJ+U#aa;P`&_zE0b)sH9Jh^`C>NB}1;U z&2=bdP|*d}w$8)&*3rcpkxN zO8*xRogXV9q`W>RVo`a|v;F6oFPgF{E~vX4%em0fS(34{@-6u4OxGXq7CReXl-wg}z?j#Vpq zuzH2+tXsrO5nW92)6c5)Wb4*@uM{ObC1tGj=%APLmu*ZuTyKj zJ^mVQN57fPAECzkR^bYZ{Ea!8;lHZj8VzMMd*W5iuTmfJlbQY=;QYsM|DRus`*8E1 zbvX~YQ^oGe&k^V8U}}qo``vMSkz(mgUBIvx11t7nC>rU>6teTU<3d4tt zj)O0 zB6{yOAA@viwLbV@%_smYLw&KFDZ_wvudh9z_4_120Q5}BZN^4qImV9c!GS`a3UKy*pi>_NGEgBN91mY-0$>K(VmG5E^|A51EZ-H-x)KpO5>f8L!w~hg738B#5yw2uUb+5uraA_m2O)7wE&%JFfJx3_s@YoG%ma%uK_giSCZ6G=gc19?{&FJaKP2;^KNnn%{iykpgw_`!G^NO2iJK4BQgHNr!_D{15MLJN0Bb0r; zF(A#5y9b=z%}fie@JWg5pw0pa#0FqAGFcWBa}hYoV=^}nzK*}B*x2hgupAi7qDg^| zkoUWa7pl<)74;(CclU;P+YWC4x&ROa^rA90OCDewpww9J7T7^)D51<3dl7J!>3SWY zBIKZCB#+@ofO~=61U(!eyYe060EzXt+AH^^ZZvuH~E_?&z=kDw#fR?+$p;0^7 zK~L`BfTUTbCIL_FYXol2K^WwAkEN8~U;`!;V<^cAp_gE=;s*ek0u}(X z2i&sfA_yn+eaasff&<)dT0vU}L13(QK-&fZr2ux~2TrO==3&0#`BTe9 z^B?G@zh9`u%$NiSLO7j%Fe>=qg3U6J4?kLDIgO%; zcf{GbQJwVKW>>!93RJbVnq|7Xb3fTIQCD+F1qR!v2LYq1SEtin^#lj_RM(p*sWx1a z>8ny(VauGAAjrkw#op)T5XWRF2)KRLaD5xv}g(?c-U=$=46>9}?F=U7mt;#0I z5QN}Bg~+fff-)2pgg_9LJpy6^ih@ETAQ3PLdyg;zB+qdssNik;-n~E1=Y9IVkNu}0 z$(3uI*KwY?j^FS5n`hG7mmYLosbd$}wXDpxVabhmdn{X@%42vnbDU=h<%iD0?VFEl zJHB}5pyZF0tpn|sJj3PAP?1(xGWVEMp|Ye__gnq4_CR>F)Hq7s2>B2W6=D)qr2~S+ZdXb=+)s$aV?Oh}iEqMz+teni>y=ecL&=uhVKMNMs>6lY;1b9Yg~JlNi)vLcYI?wC-ppi*)qlcvSl>4u9YS? zL7JG~a(8g_^bpZGE?5UAA2VZ(3BCop?|fZgU2M&AR*=qKd{SeJ-jUj{0+n~Ui-ZS% z@Tq`ai0#B|OAryjedF|6cl`_kz+A zmc{6rZILfB!vzA5py^1QyLVii`wGOl4^3@k-R+t>omZ^iU$;(;+L+NE8&H>R+x5U- zHoZqP*I9Y%k8iEY4?JnUAfld8E$n$NJXLmF$OjJJ2KXYX-UzoYAs24BMBwf2@WKzY z%Or!JsY*ie?D~$eHY>7w$zbP5#qhR{_bx+al!3Gmi3wXByy`Xs zY@+i{IB&5t)N!~GgC8=ffz`*mkJQ&c&zjTayN;WBEya7tXI1p+fum!#3;U{U6$7?B z6&^8EInf3BL5uQQQ-^kM&Z~V5dCp!;x6l!VPVldqu>c)L|O5#GzOuR`) zTZ?V zxhBpGp8mk`$FELRS4Ulu$PvQn9-YGt?~<7Bh1Jt>7=}aVW#vC8!0g$5@cHfjg;GNK zZ|C7&KW`B(+7+z5-pz%Y>yE$AJQ}P6C6SuT!p+0Ex6}Lm^TL0qozrk7(s2%#ma&7p z(IgR=T6ESfVS^g3pPEjVnd&cP)G?{he9`M+*CPkMVz(_B)Xe{ zD(nktRUsfL3*it40Ih(LClCJpvlDT$Lx$B4%NxF~O5h>gg*>Eu_a(f6*ds~ZA~?!*D(8vy{Fv33ga<5_RfPue&w`( zc`R|L=Z?ykzy$lt1as=dfw_4Xv}=3>3Rk|VmIbo!ue)l$ye<knJCnT>$;kn~J?V$U>trt5OK|jWZ9#@@EZ7PDs}ezY4wh<%TyT%sA`klY5c6aZ zPMg75gQkPv^=Ov_TTi@>d?EaU;lBlCNqqjHoDN|aZA7FI(@!}Ksw!f~W2Ck-#+HPF zuTKaCRNV7FclUGx&6Eq~KkH#|8L}-YTZbrAY7W>|fiX??sY2-sC@>}c88ECnfX95? zB25SRXF;@woTBQ=8Wqpjpyl_be{yVJRhS!uK{*^(_JUk*?cM~_ynYHeL=k$roaA{^ zd6m-lNk1i;{iv(_Q<8_Yimt7Z&Ty@I+8#dKh&eT!92%O4S*sRRsY1Wy0j;0(1e0iHNWow*0@U=~w#c;H~Gm(n?_kp4o-X^jBiurtP zP;p7(^>QfDgQJb+h!u(>YWxPcbnBAi!4#mg2Au-o2Qu{jv?lEtEE2Tbhx-v>T!92% zn!$Yh`4X5lA)xR%BCYwsgZNo@Y+@Q(lU;K_B1vE%6t$g7Inne-<%|=>20nVq%H>0r z*>gqJH^X5FcE>id_@TxSGRhjuQxoEt0sb@~aNG|Apzo z4K22e$)TJPTl57;;O&>dpvwo5CG%$%;ZB+)>TNgZyG#cMaSx~r0~#L0X4s`FG2l#W zZ3*P(wInNR97dy52t|y*Wk-w#XQ$Ogx~zR0%;A~z`P~~1u6|}CpDWkVYTgMcJCXx1 zVivLyzIai%_#y}i8YE&9s`1u?NGKCQAUrXUM1-9;vm&6GBgih%?-6k+(gl)nPFF*h zm@p!e?+_EFL{qM)I&bbt7XBmdK>?>LEj9P>jz26Hnpx~{PE~#53I^)^-gID83&wL; zd~N-57<&jY4_x&{WqcDe>Ka2hj1dvpILB7ppm~`Xi<<0R1Ah9hn7evjjsWh7%siQs zw}PY?km6Bs?K=o?dHW*QP)bnC)lV?$siDx^zOp5-?gr72srlrM(vnDqNpAwJIcsRM zQP+ENTj_9J<2`8dBrXzw6CBE)6|iZ5+?EMKe&b8T)}tY!vCb=0G2T5jl$ZnQ+$Ht@I`5O%an(RyMUvsF|g?4E3^nz>!NF zuEX^I=Dl$sv}nrave}Rg)Bu=rDWqJz?5)-gNdOXej3_i<@nc@OoD4jX^J^cBd&Ki+ zuFSTM9Uh#m0Jahw!OROL4v6Jg-H73}Sfq|ZUuDzJGdC|4l%dRAXcPh8@4Ax2wtA#@ z0CR-rE`A`?vUG5+y&qP0guji^m=|lcI;PC?U4EYK38kq#doaEbZPmmcC&`Fs8O zg>bVc*2=QQ^*YLRLB%knw#vlB({csMdqGt;@f?+?l*_jY^EdSNXC_i4AhR&PF1Fp~ zOB$vx1E@cw-uQ0Zlbcm8a15ikszV0*lS$*A;Wl{wVk!!<3ADLug8h111Vh3HCMbcE zSg=VZ(9=7I(#eC!YiyPsg0ck2n*Hi;*0*V*`%JiNG&{0O2QVfOXfX{xXecvO7M#cB z+1jZCd}^-~2rSH>F?Z|7AI=5xmrbP@j^pUeOs< zy1EX4ZxO`${7=8g{A!5Tp|U~5gupVZ{0pIIP!Gh7o}ZHTdW}dX@DO4O=Ulo-7q6|Z zt;%4-@I$~J+XXl+k*-S;ud6iN5HcXe`Rx*)EFtsO(2I1y4h%}+Q&OBO!nr-C;>X{i zOHy@)g&pU3X;BqylmRlxr4q+(-oHQ}RdZ8+iFx)fuc%A# zL%CdN-W)n3C5~z{i26rpU0npYYWU%S?PNs8Aj$AxUP4mZpv%)3_52`)5rk1|678AK z{N757Lq`)y5kxDr(V@%%F`;bDPKRZ5$sc{@1v)aAfwbMZOJIr+O2sRN9jhd5Y? zV3{xvXtP^JD4`mOJ`Ft&53~n}n2lX9-^8-Uwl9U}mo%n}KC>sYL%!6r?mZo-Et-o!ltHPTtMP(QiSC?%d|P1~S;Yx1m-lKV2EhEH(||X2QfnwOMHL%*f8a zL)H0+-Q|lfJn93Bo_jpGEF+eZo)MMt%jpaT{tSiG%JVYrF0haCUaT` zM6h_&loU0k1#48iLh)%pD``kSD=Utb?I&|I?{#@5jA2@ogJLYuQ} z?z}UKQ2IlJSoeF(B0@ve3b<5isE4;@Qjk7QJKxxga6@-LG0=Y%p+qd%|3}g> zpkuJ7SqFp=+J>Rt-1Q>(HwTm$^SV|mD1&&AX45L8`Wxp~r9IS0h`w_CZVRb)k8>a7 zqEvzHpoG%r8Yojkp~!y#u$1`f0hH|E+@K0`u1TcK!phyN-J>!V_^wH7!P;rB(z9Na ze4Y+u3P@wA^zgO6R*tU!nT0iQ@hy57)K+J9#|I^;n1a><%QphhaA~k6lDV z>s61GEz=LDtWcIdAuhpu(H3tU&A{IeoRj%n#`*0nbujs%yTb~c!3z2~CFOvT_Eby?Pn;IodjI-WjCJ}gbr2MM{Lscfy49N* zMW-z6N0&6sq45?2c*diBRg43$Tzc-biC=D8t?U6258^7N@mVD2X;}sqv-8Dj`c(&j zu|iet={D7VLd9AFNOw`$^=)C4>(8cPwO3JFVW~sGX`4~8za@&@Ul<&&I)6_J(Ze^; zgV3?9n4)VJ+~9FZIju;Qy}h?eT70E+G;^r7K{wplOUd8l+6m(+(q-R4eLo9LDP) zQ4FUU%df7n!71~#RoQE<9AvA1e-OATljegbFp7H?TEIG0zsH(=(UyE7r}Sefby%{` z=c$nS@rt4ljfSXzQx(lU!Jt}f6$af20LSs5AQKm zWEWQdV)dhu)ng3Rw_$!SA-ZOD*Z$YXfc6M4**NNR)(?HdF|-cey*Bl!?kr7smNg8rLUBlg2u^u8Pd7-CPn_dy zD}F=8u3mjUM1JPCO?*2S-^Rtad*oZaKik?nFnuWjDK}Id+cPQ)g&o^3hP;1XWWTT!e8uKgd`Eeq)86UGPxH{`3MX5U-=l)2>l8t=Diz4W2xiak zR3#xvFH|#rn@WjazyuvHP__cRmfzh<1x@Uy*Mkc0)5`@AcK+-6Dge}ToBV@9A5gu$ z>q_d995bQ0-32{e@10o0i(YDO3<%qY#?q(Q9{dZI*(2Ix{D;}KGI%_=jsGZ5CFij> zbX3P$2M6H^rOnt7CnEc_Cp@vH^w!9XIW&Ec3LJ)xCBufuB=Bj<@En<0%z;PURS?VV zxW6G09?zu$t`5!Cfzh+lpsBEZ;2FZj*!eFfoG18=DY{`?x(iy1-}r~1E`_uuNkL6- ziJBVq`u2Ln{dU-K-U7?yZ%1$vQcD2_lndNzcpi%DS#CbP7MdS4EA1ub2@Tc(9!h(Y z*07eETZ7*Z05vvt5rB<)Xw09=GF3%ejB;|~s34r|rj%}Q28NiajNo$J z^H(FZujC|DEie-6FR!``8OclLzi*}?z(T&aq@^ZSR0+AUQ6chZhMH9rarmldcb$=OvL7~bKPZq(Jw zLy`ikGlZ3DRGazx=l>S?C}5f#RjxK5u2haDSCx>RDbuiT&p$n{6O29~RD=kCdaPz~K}#Nim?~GruRs^Rg`U+r3e0d_%?`CY9vNB!UA38f>Tg zYUqeD!osLE#FJqeYVc$|4P2rqjpHVdNgnq0W`oCLT#caW0zE>Bu3nkke?37agCqA zY|(dayU6%fkwAbo0L#ppC^ter0m5!>HwpUsxDn9*Y4IBQ>b*)^l!XrQ5?~g1?IO?( zw2ZY^V>)@=6}W~Azwr6sqJk3JPt6ku2=oN1hTIf^fB?EF{K`BtP@qp3{`d3=wlSWr z_mSM;cY*Hf=7WQLxx>BX0_~SVf?#uyF~^rX1f$R)u+9z$IOqJ2lu6F<8qgBSLo$hb zPuyh1m-Ka6@rd}$CNB^qj1KU6>xn$(7GC!jkZodM9FTeHyjC{ZXP8%A?Xc7q<==Dvahe3<3J@8v z-AO*KnWGzoe9if-j6)kcw73iq8{CfTYbrAgjh-Roqy$aL^OA|Nkr&-Zo8!stEf5TL zuD3!+$l*JFF9Q;ygnUc+eGYKGj3*3fLY&lGp=N#bj1S_ZG=**pdME$!iz^cO+_Pkh zk=0x~JMs#7mQXzeB|*2v)Zp<2I_&Z?D6oTo(kIeG(bJ#;o0|%(PEYOt>XZlNK-9)v*+G~($iUC4k|iMQnW*I8Euoc95 zBQ8dw32Y_I&r&56QTMBg7$!3{6k-A$?L`^0zj(_A zR!j!TVuX*RQ$Zp~M%^M%Jt|}=4*;GE!?BbUE!lQ!+YqH7W$BFso1~7(hjZ(K#YjBTz#c#p*o}T^wAue7xed~q`fx_ae^QWs$5w)Hwv19s{dHTy{1%4+?G56d3>-Ds# z+Vz`8k9EGJ*W6Oe>nrVJ8LV%5nc1|F=!OD| zGh4G5-6uOmabxEtkHDAg{QI*rAwq2(+#B`f=PfX@GsEGEI)VEhT8#Q|^JHw0tpw1f z0-Rrqn;~tAtYzr#Qa1SW%})O*^HfK*x(}zX(#PYrS5Jr4C^wnBj#!tHyJPCyOZ;uT z?w{ezIj5Otwc+uT-0p!2%&FlKBIbz@u+3l>&NQa`6Q?aJfBwo=ckZPXXt!rAXDx&9 ztl#;23w+{YMUdt2cM=l%dS`1c3+Hb)B;?#_&~xyQ^l!hV;UXR1MbAAoVy<=JJ*O;^ zW;oXT>65H{iVYk)@gr}WFx>Zx+G@+VPDT(xDajIrKC^6P*D~GC8_7Ps&(?RD4f=Gq zkLWtce%|9!T?H1HML+H5>La=i6AtMA+dp^4cr_4OC^_60;e7*_CY}TL4B0`}tvY)4 z;H$ne`zX9c&8*CdLRTy8R0}&1aI!7Hg}^iN=V&;%zp)q2{4gy`B#P|JqxpGp=>*v_8RPr)N;>jn5B}|Wt*66I>KIu}g38lZISyl{Nnp>t6W{R(!Kj9V; z#SwN6R&iA#qBdpITz;51CW6+p)E?PX8k=C82431#4nKbzH(-H(Iq4;8EaTuAO#`%( z1*9aBsd{vshg&6O)`S~(b|yt$Ke5G_`98ELxZAw{i_cDKNewG)uWQY+Z#*_=b#6k1 zse5yQp3%S>J+w|IDst2Mcf58MU3lJvJ@50U_j6#<&x;h^kyTGu(FOtU=NW4| z;8M2QduwB=Xl4>kafOy9yOcdd6(+qz8b=7cTJfQ}BrPhULz8SvRPxw7;Zk;0={nf{ z+=0<_uY7B(H{$r{13gQ!~|m^n+}Ym@j^CN znH3w$VcW{=n$mr%GC8NeiR>u3%YLoQF0xKup-J8F5uJ$g1}Bj?1Ch|WH}aSW@|%8x zK^c+{N!KCr(|jUjf!G%lXT$lr|LL!288gsPqkdwLU1=qp>G$bFU~P276JMrkI+imZ z=QK+&Cuv;@Ifs@1yv&(9d11DXVt`-U6tVvCOSHuMw30iC>w8Bv*IO@4|GXfCHX!g` zVZr+C|KHBTpN<3f2G)C-+@ahSMf=~-e^R$W7rybMAK@%9%ykg_MJp{J f+r6unCzKNM^p|T=gogl>5ZbYA*H)75p|k%5{W;tP literal 0 HcmV?d00001 diff --git a/model/新功能分析类图.png b/model/新功能分析类图.png new file mode 100644 index 0000000000000000000000000000000000000000..47203ecfe08e98b93b9cd95e5eb23ef9c12248c9 GIT binary patch literal 22329 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 literal 0 HcmV?d00001 diff --git a/model/新功能分析类图2.png b/model/新功能分析类图2.png new file mode 100644 index 0000000000000000000000000000000000000000..be085ad42ce9c0a7c5d7083fbf2d0e68501cd547 GIT binary patch literal 13860 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 s0sbMW!-N`bgy{ZR%}MGfMVLJ{pA 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 literal 0 HcmV?d00001 diff --git a/model/新功能顺序图.png b/model/新功能顺序图.png new file mode 100644 index 0000000000000000000000000000000000000000..65616a7c46f54f9387d03567e1ec5ddfa8bc5570 GIT binary patch literal 58178 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 HfB*jg1J3kC literal 0 HcmV?d00001 diff --git a/model/顺序图.png b/model/顺序图.png deleted file mode 100644 index e440feadb1118f9518b63bad67bcd09315826f04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55771 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�%@&Zz}iy?_?ijn5q?b_W^zXbMt~P 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 G{Qm%t`7mn$ diff --git a/src/Notes-master1/.gradle/7.5/checksums/checksums.lock b/src/Notes-master1/.gradle/7.5/checksums/checksums.lock index c704e4b175a367d92b938c38bc3031c570403e53..b4b8a41c15bd28c560a4b73bcd20ae68fa730d7d 100644 GIT binary patch literal 17 UcmZSHE8ni(Ju~+=0|e*-05O{cM*si- literal 17 TcmZSHE8ni(Ju~+=0~7!NF>VAJ diff --git a/src/Notes-master1/.gradle/7.5/checksums/md5-checksums.bin b/src/Notes-master1/.gradle/7.5/checksums/md5-checksums.bin new file mode 100644 index 0000000000000000000000000000000000000000..a5e7c335cc843802f3bcdcdbacbf4136bb3f3a1b GIT binary patch literal 18897 zcmeI%+e;Kt0LSrZ#d0#-328Agx=2DHvbkA_ZWoHssLfnLDDd_Wh8Kbri%5J?G%BLY zgA36HyTL;A)P*RhM8WU^ijof!E31$stY{D77HzYfbC8<ncB<(Dgt(rrtlL^2ztLxF~mosys@hn#~><(+=Tl~R?fsaA=okVqSRgR}fHol5RT9>sk zpHX)<)_ZHg6FzdVZ}ePDG=iC;u_?vc@Y);oS5FGs8-^p*TOCDxvf&qvjg8iZ;hG3v z7&sk15Xp{wY8(3VU!&jJXe!xR)m8hZ@Z{T;hxMPeccKy6CBJda+E`9Wb3*75Dy>3J+2}|%{sMuA(r*9& literal 0 HcmV?d00001 diff --git a/src/Notes-master1/.gradle/7.5/checksums/sha1-checksums.bin b/src/Notes-master1/.gradle/7.5/checksums/sha1-checksums.bin new file mode 100644 index 0000000000000000000000000000000000000000..8f8db5b036a11ad34a14b104fbfcde6f3d7acf7b GIT binary patch literal 20279 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 diff --git a/src/Notes-master1/.gradle/7.5/executionHistory/executionHistory.lock b/src/Notes-master1/.gradle/7.5/executionHistory/executionHistory.lock index 7573f89991ff511de8d0df367c7d5a407191cb61..9e28af744bf99d51ce26f949b8600158af22af58 100644 GIT binary patch literal 17 UcmZRU-_UUEu;7);3=q%)05_-w7ytkO literal 17 UcmZRU-_UUEu;7);3=m)i05@I)&Hw-a diff --git a/src/Notes-master1/.gradle/7.5/fileHashes/fileHashes.bin b/src/Notes-master1/.gradle/7.5/fileHashes/fileHashes.bin index 189ef4ff341ab7e8ba72bd214ea8f19913770948..5772f7c00875844e40757cb121c52d39270482ca 100644 GIT binary patch delta 16462 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 delta 977 zcmXYuZAg`87{||Z)L_sY1$E!IZ~1bRolKwmF}04b*|KxappEuzf;*>y9~?|rP*Y(- z9~KmB;eN@@{Z7x7iKiiQoO^^vBM=Lx;;O_@qEos`DZv((8*|lp`=jp zXJMQRMTWnMG@AmN>VTyuptv3I$SjV~QLIQ6OMQu=wZ!nP=xoVFzJ6De63T+|E$A{E z^yt|c=Iv5LL#d{tRB=_bb=O65%QRn=c?_0G_HyZ2F4@atw7QbpwNzO{k5&9)J(jFX zz31_x7iQfvlvh}e3j-D6TcK&&-O1u^O>w2+WMzcOO3T5jFc+#ks;d=k)t1F-kA^+s zzsIs|Z!ZITWwwywP)O4klKs|5_8OU~*78ZMVz@R!Tb<$8I?Ym@;`4fsYxOaj8#Kon zA`CZpcG0!d2ns0mIw@MOCxa>4EOs5AKb( z|98zk-v=k&{D0_uXn63@B{Zt}e$-<^bnBRE-;@h)zSE8hA$&I#dO(vUS_ z=@xEH#Att{x%{Y?mdA1K3-6~i-6{E(icmP&$(>1;EmIyXQ=0Qr3TN6-F|GMj_-@)| zWZKgHM0z~=opUo5@2REhX(xxD8O}Zn6P)!pIxBeu|C}N^XSgJK_#aJD`1rZu^z$&@ zywuId2`$Jh3x+$Qs|zu{cwxEzB1*+e@q8(MqRGWBjxH&#FBxV;dtVtAUMUKe4IeEl zlFOQ=73sSoJ6I9V)hL%%6(g&L!Zq<;^EkWal3X+Fe648_PQSL?7tLCa@yELKTUUfO zqFmXqtZu|O^(NkD9NiZces;PNHI5TcTydO8VyoZLiT!?gI`4PF2`A05i6d$9I-llb sC5qA=H}P4zV;O8dlQ@^*MEkEDJmvVyf|m=X{fQqoJDL3-Mjp5R3-;Bcp#T5? diff --git a/src/Notes-master1/.gradle/7.5/fileHashes/fileHashes.lock b/src/Notes-master1/.gradle/7.5/fileHashes/fileHashes.lock index 14ec67ec871ce5f7fb018e6218b8245696b5a56d..7277e06f2334bf79d1d00935be21c067bd2ccee7 100644 GIT binary patch literal 17 VcmZQB7jQf@V;lD|1~6dp2LLR&1ONa4 literal 17 VcmZQB7jQf@V;lD|1~6bU0RSwT1LFVy diff --git a/src/Notes-master1/.gradle/7.5/fileHashes/resourceHashesCache.bin b/src/Notes-master1/.gradle/7.5/fileHashes/resourceHashesCache.bin index 1b220eb9204577efea683acfdb840e0a5b9218e6..2d5b13d0a9af50769db4fa63318aaaed7e32c4c8 100644 GIT binary patch delta 789 zcmexAhjHfu#tkMCnl{ZT6MVc?_tZ0hfoJi5DCjsMz@fr%sTd;e|8=sfgoQx=%CPCu z%IAJV1=%N;N}Lc_Ui)U(f7>tG5WxWP$)=JG0*CJf#VGY2T|jUqv5C9 z0-=KaFsF+7YVO;!GOZ9Qei<&lFC($`371Fz`(k3qv8+ojRqM)n;kvu*y@de zN+p3<5QGKf&8j)BhA%Ch`M*SaN<(BjP*4t4#q1RqlKN_+ZQLI3D&P3=hZLrY)JaK> zD+0DpRt_)PGMnA&8m5XR8EHkvx@!A#wymvSc66CUEv6E2jZ4dImOMRtYw@IoKkpgu z!Bi11k|4P6O4$dcvpd&nCawlW8=6z~RP66tHczs8qSkrKEarzY=;etzp zW<56A{rBk`ky2&b6g4RkuxE|26gf L<)ZJ2Z$K&lQF-?d delta 94 zcmdnFfbstv#tkMCg8I!V6MVc?_tZ0hfoJjLSP6^CYb6d$Zk4Qb%7 diff --git a/src/Notes-master1/.gradle/buildOutputCleanup/outputFiles.bin b/src/Notes-master1/.gradle/buildOutputCleanup/outputFiles.bin index cf996d95a4430e70ff9dccb20faf0b03d32782f7..ec0d14e4ef90eed6a0777cf6799a7e0cbebe2351 100644 GIT binary patch literal 24653 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 + + + + \ No newline at end of file diff --git a/src/Notes-master1/.idea/vcs.xml b/src/Notes-master1/.idea/vcs.xml new file mode 100644 index 0000000..b2bdec2 --- /dev/null +++ b/src/Notes-master1/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/Notes-master1/app/build.gradle b/src/Notes-master1/app/build.gradle index 2924db4..8c5d4ae 100644 --- a/src/Notes-master1/app/build.gradle +++ b/src/Notes-master1/app/build.gradle @@ -18,3 +18,7 @@ android { } } } + +dependencies { + implementation 'androidx.recyclerview:recyclerview:1.2.1' +} diff --git a/src/Notes-master1/app/build/intermediates/apk/debug/app-debug.apk b/src/Notes-master1/app/build/intermediates/apk/debug/app-debug.apk index cd85620fc3105d68613065dbbda37a3384fd666c..f24ed225288989126411260937e6fc5f5e94f9e8 100644 GIT binary patch delta 103325 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μ8cXAP;@C6 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

PpHfIj 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 AWdHyG diff --git a/src/Notes-master1/app/build/intermediates/desugar_graph/debug/out/currentProject/dirs_bucket_0/graph.bin b/src/Notes-master1/app/build/intermediates/desugar_graph/debug/out/currentProject/dirs_bucket_0/graph.bin index ab2b0574f1b15b06e61d579e114e828bd505263b..1cc30efd7f1e827a3057e7c3f5db30d6bed85733 100644 GIT binary patch delta 284 zcmZ3-eV%873Zq=Bi&ac|W=TL%epYI7NsO~sP`pb-c)W9Dcua9o^5lt3K9fC}xFsfA(MP2i?bxi%^|Gp6ibL)3t?r=%)*mfShWBl1!VC6 delta 123 zcmX@lvyOX%3L|@-i&adNXTW4T7N5y|jP>lKPxr4B*xh*DBdL^Jl;7nJf^rPc@k6V`=KrB2)=Yj$$+ASw) diff --git a/src/Notes-master1/app/build/intermediates/desugar_graph/debug/out/currentProject/dirs_bucket_5/graph.bin b/src/Notes-master1/app/build/intermediates/desugar_graph/debug/out/currentProject/dirs_bucket_5/graph.bin index ddf75bb29a411a32688637116f0ee718da46bf29..b6fabc9859acbc63e34d6d9c6c2c6296fd741950 100644 GIT binary patch delta 307 zcmbQhbAoq+3ZqtcHzSGZF$baO(PI{z{F~W~ eJr7CEY!+MgY!p8CWM5V@_H?*d6I|YrtsMY1`z%%f diff --git a/src/Notes-master1/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_6cd080a137cd6c47b2aa34ddc45cb2f114d21cdc14a2e8250cbf75372ad7b9da_bucket_0/graph.bin b/src/Notes-master1/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_5749a1235ed03cd179ea4f3c365f661b2371bc5fef07fdae1888e24f71aa20ed_bucket_0/graph.bin similarity index 100% rename from src/Notes-master1/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_6cd080a137cd6c47b2aa34ddc45cb2f114d21cdc14a2e8250cbf75372ad7b9da_bucket_0/graph.bin rename to src/Notes-master1/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_5749a1235ed03cd179ea4f3c365f661b2371bc5fef07fdae1888e24f71aa20ed_bucket_0/graph.bin diff --git a/src/Notes-master1/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_6cd080a137cd6c47b2aa34ddc45cb2f114d21cdc14a2e8250cbf75372ad7b9da_bucket_1/graph.bin b/src/Notes-master1/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_5749a1235ed03cd179ea4f3c365f661b2371bc5fef07fdae1888e24f71aa20ed_bucket_1/graph.bin similarity index 100% rename from src/Notes-master1/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_6cd080a137cd6c47b2aa34ddc45cb2f114d21cdc14a2e8250cbf75372ad7b9da_bucket_1/graph.bin rename to src/Notes-master1/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_5749a1235ed03cd179ea4f3c365f661b2371bc5fef07fdae1888e24f71aa20ed_bucket_1/graph.bin diff --git a/src/Notes-master1/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_6cd080a137cd6c47b2aa34ddc45cb2f114d21cdc14a2e8250cbf75372ad7b9da_bucket_2/graph.bin b/src/Notes-master1/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_5749a1235ed03cd179ea4f3c365f661b2371bc5fef07fdae1888e24f71aa20ed_bucket_2/graph.bin similarity index 100% rename from src/Notes-master1/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_6cd080a137cd6c47b2aa34ddc45cb2f114d21cdc14a2e8250cbf75372ad7b9da_bucket_2/graph.bin rename to src/Notes-master1/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_5749a1235ed03cd179ea4f3c365f661b2371bc5fef07fdae1888e24f71aa20ed_bucket_2/graph.bin diff --git a/src/Notes-master1/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_6cd080a137cd6c47b2aa34ddc45cb2f114d21cdc14a2e8250cbf75372ad7b9da_bucket_3/graph.bin b/src/Notes-master1/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_5749a1235ed03cd179ea4f3c365f661b2371bc5fef07fdae1888e24f71aa20ed_bucket_3/graph.bin similarity index 100% rename from src/Notes-master1/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_6cd080a137cd6c47b2aa34ddc45cb2f114d21cdc14a2e8250cbf75372ad7b9da_bucket_3/graph.bin rename to src/Notes-master1/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_5749a1235ed03cd179ea4f3c365f661b2371bc5fef07fdae1888e24f71aa20ed_bucket_3/graph.bin diff --git a/src/Notes-master1/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_6cd080a137cd6c47b2aa34ddc45cb2f114d21cdc14a2e8250cbf75372ad7b9da_bucket_4/graph.bin b/src/Notes-master1/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_5749a1235ed03cd179ea4f3c365f661b2371bc5fef07fdae1888e24f71aa20ed_bucket_4/graph.bin similarity index 100% rename from src/Notes-master1/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_6cd080a137cd6c47b2aa34ddc45cb2f114d21cdc14a2e8250cbf75372ad7b9da_bucket_4/graph.bin rename to src/Notes-master1/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_5749a1235ed03cd179ea4f3c365f661b2371bc5fef07fdae1888e24f71aa20ed_bucket_4/graph.bin diff --git a/src/Notes-master1/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_6cd080a137cd6c47b2aa34ddc45cb2f114d21cdc14a2e8250cbf75372ad7b9da_bucket_5/graph.bin b/src/Notes-master1/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_5749a1235ed03cd179ea4f3c365f661b2371bc5fef07fdae1888e24f71aa20ed_bucket_5/graph.bin similarity index 100% rename from src/Notes-master1/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_6cd080a137cd6c47b2aa34ddc45cb2f114d21cdc14a2e8250cbf75372ad7b9da_bucket_5/graph.bin rename to src/Notes-master1/app/build/intermediates/desugar_graph/debug/out/currentProject/jar_5749a1235ed03cd179ea4f3c365f661b2371bc5fef07fdae1888e24f71aa20ed_bucket_5/graph.bin diff --git a/src/Notes-master1/app/build/intermediates/dex/debug/mergeDexDebug/classes.dex b/src/Notes-master1/app/build/intermediates/dex/debug/mergeDexDebug/classes.dex index 1277f85909ddf27364a32983047a038094b926ab..3a6f21efdcd754839670ee3658aced4171e7ec81 100644 GIT binary patch delta 25166 zcmZwQ2V4}#+raUi0~8eyL`8y#h{gsAf*q`AG*;|gQBkp=CKhZtdq>4Z*RI&HBN(g^ zVi)WZHCCcAYV5(pg8KgE*p2t+&Ap%R&9l$U&d%=4?w!Ct@AO-R=HDvh-9I9_pnqU> z<^9&IeA#z@o|S#5=bJh0E=;ZvS!YSS81RilthcKOj;$VO4()1EPRA)qr>jEgg6`;r z`G~`A{D`B-M6pbvl)~4jf&f%U9n`}&2uBpQ;27?}_7|aep$saa8tVTd%t|Q1H~1E9 z&<;J&9|JK8<1h)+Fb4~<6l<^-KO+;5@edrX38e+*As#6>g>>AHRl(N^&LJ1~l zi~bmmnNYC>2XFzu;R6ca;0#a`Ezu6WFb31G1Y58TM{yRJc#Kad@~coh;fES%X6CIs zhG7C`V=>O7>n$$zT{^+EdqT;^@GM6Dn@~2R^?jife82z^_q$NmBL%${grFUwFc&M3h-0`4<&jW)(FIYMj-^Y_EqK*Kid z#8F(p-zfY{C?(MVz3|;L=6@E!awOnqoWVuh#bdmO^K+q8Km+u~4_JwVxPs@feIXPN z)I@s>#3U@iUZmqbKA_-B27(%9-a23a#$z7VU=L2>KK?=BS3>bdH8e+WjKE}U#LsvH z+t;*3QB*`-v_?;i!aQumVO)Yai?_EZ_!lb^4bTrWk$?lZfe-iuQ?^jtQ5HdHhA!xV za16jue1|cZfGL=X`B;qQ*o*Vo%>P4zPbmIIDEXsp69WW)Avq2xy)6oxBGpcKlY zJSw9qf>0L?(G=gJEjpkpdLsfuG4gNbe=LC+(=iu|unh6ojy*`lHQdBM`05{_G(i-0 z-~?{t9ZJ4s4WJbwF&_y?#X~s0V;a#J(PrLO;sQRP)O+p#^ujpoKo)F22qh4$Fbr#O z7BAqK!=o7OFbtb;0UuEGBlkbrAp(=I1lw>N=3jYxi2|RvlxT!WSc6k|i4vd5V*uu3 z6At4Syo9r2QYxSkdSNo+k&eg6Crrv$sE4kYfp{DcCbM#x;1%+jOo|UWU>N3L7w*E= z#-z9-5Z_`DG@Qd{RJS!L?J*LIu^lJz8Kvz^N&|GqI4nUjF5{V<*`$=oXHptsG-9zE zXYm{Ip*reYH^ zkcGcsSCFfLCK!Z?Sd2ZmfcyA_B85!K*9buyL}3P2;V$05(ZQtDK^yePI4r9x&!|+yq;$qqY{MDkprWfuX^UvA!ZAF7Q&BEGMq(%KqD(Q9(hg?qL>63& zo0PifhLuRetK!UmaW|7v8~v~n*WgxyGr>4)Kn7mH-JP|9NW|h2{z18~Ov*s0IDp$I z?!m&tV8r1kyn$y)lhPQIvC+)iY5av!o+hO^Mqw?^;tfidVgX_ve#U!L^I|%%6^~J* zG?x{lu>$GHfuA?GBo-nSuTZ9pN$HIRFdyda8A|z>lv?P7G1!Xpuq|s+s-P?8Vmofa zp&W|}{h?w%e#ZwC``V=Vq6xZU2u5QDmLmZNaQtiL|0cm}!%Qs08f?c=+(b5LHHgEun9ln93H~9 zG6zKn+8`XmF&>k#9!GH&cklu^$meTPN}wu2&=wJhMjY0fc}qeD9>Lbnq!fZ1e9;tL zF%r|T0=tlbn|J|Hg~uzZpgFo=IA&u#&LR_k;0;z*Wx8-4=EuCfhnv4i2|_#c!f;H+ z60ATX&fp$C!8L$;84b}I-H=kvq+G>qJcCUjix)M}65*JDxmbt&fy{pf!F9Yq{vZ}2 zYM?o~BN~gb6F=f49v}y<)lG^wsv;CE&=x&06yIS!mSYq4;wPNNMcl5={68Uh15*ud zBa}fcG)6m&#$2q!kGO;<$X}B+f!b(-HW-dr?88qujcdrlOXR@07FQe9(ap@;AWX() zoW(i(f(OWksWt~gAvmK1N}((&qAIGRK0?t9thaS6ZRHnQ*sp5q+~)nQ=pMSZkHFHFT2oWf%is>|mMYNJbC=6@8yRLn&T zVzC4(um&5j6}ymxgGj{*oWVIf}6h;YDKs~fTXY|7e%)weDAQ6Xf3YT#gukjfL8nUqAh8k#!F!Y8wlDBBg z!V+vmDlXs;yuc^qZ^WY+rBN9n2t_;e!4QnaBJ9LzJiuENYRqLvF#6&LtiX}R%>Q+Q z*YFBuDiDc9SdHyCf(-nE-;s?R_%&e>p+1_R1=^t}`eQgIBL>T`4m)uam+>o}H8Im6 z!DrYt<--M~5r_t8ini#5z8Hb2n1vX`VKp{kCl25=(s2>@@C4bg{f4W6a;S%9Xlv%J z2foKVBq9?pP@oz2I4Yn9LeUO`@ja$s0ajoul5q&<@e3Z}8M5&KrsgKaAHfJk6wDKO zn}J1Gfi2jB%Xk5YZ~0(BeY8ba48Dexx8jyWdDKP|v_f};V;o{y zG5>1_wqY0cAr0xciD&o#ht_j#Z}zG6a0fuun%MY zop~#RCJ4hYs7Sz1_ytcP+HpDIiOQ&hdT4@H2tzmY!(f=P2%E4IX}E$cd_dXu?AM<8 zA5X9am+%>tJ8;_}9MiB77w`!l9hpnCK_~RUNKD33#A6%wVm~tQ3mzgHIdJO40)+?4 zc4Gd03F;seZP5!OFcEXG8p%jS2Cm`(-k?xtzF?vWdSfD{U^W(DB{tz_oWdQvg>x5< zi2-Kb#$h@ZV=Z>z46fl1yoS=1k;4oA2u3S(!2o=Zxmbl=IEXX2gIBQa#`-~NR6!jy zg}EDVQ5cW8Sc-K>L>g}6DRSV_oqv=f2%%_$E*OLfScZ+*jda{c4%~b24;F-=6}ll3 zKlEV!Rf080!Xcc;eLP40o}4vGpd9>A2Tjl#-7x^8Fb(st3OlhMCvXD~@fRF=aR;Fi zYN1Il=D#&TZwx^+=3p__AqgjN15cs!X3kLsP0=0$Fal<1*n%ICh78=m6Z`}FJ}f*` zL1VNt^EM0<5QBK^zvj6{m3xFCijWCny4UltDEFqZ7tp84lwp&LI6kRX?6EGiZup6m3hEuqRYq*C;$i^qw58;GR z3T1~d{}lQMA-|-gthp~v@hlU74cl5p~I-(DTVglx31vcRTj^h#D!2Ua?1C9~PMc#RLp zH->|w6v~@<3q%N7qBHtq6k@R!2}ndL(vgY#cnL9<&jl2NCn}&SLeL!T(F;Q`4pXrl z8;}6=kGvhhNu(naH*p`&kOTW@e$s)82tix)#RM!wJoe%^uHtw6jeO(y&VWj&i*L~b zBQOaI#xeiv2$FCH*Ki-%_zaivd>=#*>L3)Y(G~p=g^8GnSS-alY{hQu!xd!VC2S|~ zA%>#(3Uwwh|APn?U^RAOKThBhvhWIj;~hSu@I*d_Q4jqw8LMy}&ro0z^NMPyi%@h% zUkt_=m@x~nGFXpf9K;pez#}||-485KR7N1`;~Rt_0+TQsTd^PKa2pTt3J#p08!DhS znxQlLVhqd+d5cFfQgI1)@f!A%Ia`!OMN~&KbV4r-#Z=73A}qmbY{o7e#06yGB??aA zV;YqZj3!f<|84{W5RHY{h+X&@*YE^ypiE_zqcp0aG1?;v6EGhd)?p`pLOOoKpLh?) zXNRXodcmiN)B4 z6kNp%nC)lrFCetUNUXp~JcrwC79BcaI2Iuh$MFoVb66V)L{oG|A4Fj?VxVCo_8=L@ zk%{N{YYy}OnV`U2?sa^Ha_~h}R7VIJp(O@lD&nvL8?hh9kcm4m&10dV7|NjrnxixN zAPN&O2W#gs|C(msg>+m&79Qgt z*v8NoyiwE4TYE%e3SzJx+mMW-IEQO^h*wY+@BxC-sEV3siq`0Z2#kUmD%N5rj^P>} z;v)(zq)l<&%AhLhp)Gn~C?;SAR3u;@GVm78ix>d>(Ex4G8zV6li?JSwIEXXI#7o%5 zvOhdxng4PGeyEL5bU;rG#|$jQa%{sPoW`$sh`;a|_KTTsltE?GLrZkRV9dk{B;g8P zp^(ZHsLX#8f}R)$4N16!Y`Da+h|mCS&e$iNiRJOgum~9GB7&DxenXp)JBO6Ps}m8F+$su+`WHo+yVZ=!W4K zk6AF!<83KcV?DMb8EH6;8+eJ&a9c(vXofHh#u&sQ9=mZ6Cy{|$c!=lt1iR&|e3U{( z)LqW}w<8#Y5%>X%uoUaD8;5WV=Wqk}@dlsZwt{B`8lx#%q7!9E0L++$g;4#FNjM`|0Zs?EEn24#Ejpf*ky-33) z+{aThZ*TA!j;rYur4Wn`n24p=jVrKQ!_yGmF&txI#$s&1Zv2c)Jj83*uI0f69|WKt zTA&NeJ$dVkL5RXQ%)m;l!FHtJ7_Q+yp5Yw|uH)YaD1$)ML1VN)2Xw6D%Q6%m&_1~6MxrcqbN#Q;=+3DOI$>cgNTdkaj;ds8F4W^ z-7)88r{N?by3Gm6-aKhCinc(PTa`Brfpv8%qrDq>^jjl{-*_Yl*OrJw!8 z#-NW|#Ti!dRbr#hTN&mrJ3OGG939zmCFHBT9?L6KNspfrSI}d5_7(N`tyNwQ+Q=*C z_^U0wjXklkZ&6}j@^!@|e}gIFRwBZFM~kA`a2xV5@wn zRlX&0Exk<#t9&1IlD}KPAbl@4dLE_6?!*(VVmVLpC^A1?J>lqBN0Esc1i-oMPt{$+16mRC#mU};ZWM~~%|GxptK70c;v zthY(F${)^+2Ut2f&W10IzUBb(B@ZTJ<6ttD>q#EW(njw{#>N3;EDs>}El(^bNe)!T ztJDJ3e9Fa9+ki}EG8uXgGL}bgq~~v`Vby%<$(Hh1)u@$A#fV?(ds*_t@>nvKPiYkT=$yjLVXj>qy4F#P#*K7O}h#GQUba5a=VWs<#8(LX0&sn!LQ> zG~npIDAv#>PUGv0Qj{^?WLAavI{RCwGs#RW|fYDyA zH6y-te#n=DJ+Rv0DX~1Wb#!E$nT+L`$up3#elabvd}zr*%e=gbMl2637m3VgtCMQ@ zIA!Ryo5?5_)Lk{oI2vc1KxUD8yGGS;qq{^h#>G!3me<3V?k*9_R~0=rCQ;^Pd)el) zrA6)o;}>H43%SF(CS!G2O&_zoeS>LvmyEMsE9267oJDLLQP57l|27o(SK>HHhXg0s8xgQ%oWIw();wcY7|)htA7Zl&&t3Ug8fw+)b*r7D$xqM+H`%JqI@(Ot^Yg9paaQqc z+87sZl~q2~s{gH*3V*p;duTLHeHZLyK5f-pJ_5hf4|P$t&|~?P(74XGtlG;*h|&Im zRX*D4u=25C%!_<%7>ijxHt1i~LOk913-^DIB|j>R1!}LJ3-KstjG`>9rs*T{B{oJ> zOYW^Y)^n?3WZGKw*Tt%({7!GobDzsQlc|Nvrf#4r@&HRq~_N zp7pDG8yzTDzMP>w@nn7AMb(}4%R3saYEd&>&8lD3Y-IY#jNVp$4jb_xtNaLJV6K~Ml+#@#nluuy#sbV>>eC!$(@+r1P z-$6db{*C3%>ad1xB3_Mc=xUZv4r3pOt6$=x#Ku5M60g_$k~h53UfzX98~KIG$jiIU zh~-_iQQtS2_C{W=aK@ziH1hT{a&pBOZG$+b5eHk1%U|u<$R|YhD!-;lq0|OY%73A> zB=)70|HzcDDtauZM1CQW`M9J5jRuCAebe}1*A0F@Ni!E%zP?g^<~8&oKWCy zQ9qITuGDX*e*b^e&!>I}^@pfG@E`T79`eJIDKyBW!NLD%u!9aJL-D zf%*}*_z~lO)MrqiL46AKNB*P!)NZY!7oVQ5jkW(((i?MZPbS zb(^1{cc8uw^|h%#DeGZOrmXKzeMjoMQ-A6|_8&$40P6cvf9C)1Z&s$$Ach7@X>c}A z2c(oZ>d#Prf(`jSTn?ZLNhuevAr9S-&9*%JI<#yEjf zEELOYAq{Nq@jE!#07irI+*`@?@|ODI)L+a~UxE6o)VDs#500t7qSvpcl&`wEg<^Y( zHq>8bTlT+5&!<(;N9aw1E;Pv0E93y=$LDLxryQW3I%TehT@FzPHJ-@fk^E77+FTEF zNuqu1-Iu*@(As+V*=$dwzS(JhO+o!ly}k&geEpMKC|9T-OZ_c<+c^DnM(6OD-p%gpEU+Gf+C)?Kb_4NAcs&|a5qx?pI~yPo}3Do+tCY zIwenLjv621VVBMRYt^(Ek8-w8_<=pg9?h};lE=21uAOWbrGA$x7PvYt;@C1%mQ0H3 zO=cOHy<~#OJX0Gk@bb2~kh_45l{AuC`I1kyP+Iw_Qxp&Dr%Y_{Couxi^V&xGo z(LsOeqtrBxAiw3x%qTL`)vN^`cGHPgt74(6qx@;p73$*199F#-GD}36YQu#dO_GTo za)daJApebQy>v2jhp2>HT<|@qh^tj z=Pz5!OdnM&a&_Eel`*T{WcKSBhd=pKAGIMFqo0yw4yoabJnVdlE~!(9f{Aj}c%qg> z4r&@v527+^7JJI??ech|$h1*K?3cc#lZjBh$(+{P#F3exHY9UV&uk=fN)0D-UC$(w zd7w^-b@jWaXEMkLF6to;CK`E_Uv1E`nBLNu?FY1!uZyZ! z?CSW4zJDiE@+q^edXtgYO=f(_6j2-I$y89o$;hiD+XT~wr=3+Bndz*?TeWFPW`vqX zCR*RC2bq~_mQ`jbnN_M#J?thD?Nz;15A%GY3oM75oI`1O4ty3A%^kYJcLmEU{1<+C zMg4KMjBhS4Ig0$STgCqCsDDTO>HnzTLH$qE=l_lQrCu&H`I#eMAvXN%Prh!cX$z zt#0n$=(Qc37YcdpZ1ma|>XfZ+qK&$IYoO?&o}*=Ny=8Y1Bb+QPWv_}dK>bMVuzzb8 z>b1E?8KwFqxQTIUlY|K(MomlTEf%ZZ+j{e5d&;)@Vpmeywv|G>QhV;`EOL_e?HDdZ zpjvL1m#CH0WYXLG?^_bMLCxwlAG3oEb_X25-v=_DX7%yjzHa z>c@S5ilge|AGe6>YHUhx@kD*adrnf={)HwnP|Z4cU&N^=4jmI))H#P|iB#3)NM&(S z4LRZ^&Z|9%uc>p6loxl^#3SEx&CC6iB+98belm*&YS*LFL{IhhQ7_R~{m6Ty>Y3^$ zqSWfCN$zvj8KXXD8MPf_k`uc?6>06ocC}+#8;-Rpt%W$NzDhev&xt?Zx2q7({{&uj zNw2IPKQ>>4sbR-`L`QY>@yen{QarI(pq@CfU2IiHo^*5HL*v|8J@xOb$}7H4jX(Ll zNKGns>Kh?msy$D;xxdkyc5qI&jK)|1@70*oZg!ukjp3-SNrz9D6~aF$>r7=K)~JsB z_e9R9zo+|%b83N%s_xg;=N_xSH> z-NhM8)7+C+lyEieyqkOEzqRR>TEV2rk&jegQ9FiOZgFKq>8VVq6Xz)ZPf;eR-WS~5 zM;f)x1KGvNG6Z>H$Eab{PBLo!BZadmw^sH%Q=M|bL(ErKU+@vJYTAX)Vuk8{(aU|U zK9Ua3nU)J9+sYT0{-TH2qz=2-SR|>5#QT%ZT`VNn?Zzb!&lT(@p9@~1p@=FSYm&p1 zGc1RBUUj)#pH&lf*+<+_M_*nkKB+EO+)OqblPX<#Ekyey&&=&6v0FWJtvgGg+;uN; zBB{xBuDH88^2Q4>Qw{(18*Y?@U+dbf+{}M@LiPO3Pc43Pv$&pgO4t>ey(=K~`~9hS9S987Zmjpg$}4Y}`T z5(!D2?w>btIm$gO&*fr zPYVhWoD}w~g-H}nTK%G*5dBo~s9YQqn1 ztn6p+-P92u?8QcP+=mt-Sv|q~Vbvw4zDQ3B%c*N4#;Y-(>$;nF=N`5_|B(gxaFGv| z+|`uzxv_{{Qcm;}Yc+2niY-|qN{NIeM@Xc|M4)?`zHbNTf|em0!#Sl56QZt2*Aj#{ zCbCk7nZyJk>S&K`gqNtN6|fb7qKOt_D?CJNt*b0LYNKsMd(lTb!G54a4(1e{RFGgz>Wieh0vlHFLbZw`dxaq!}{p2NV=j?7WJ_F=lYqa=$ z9C?G5mQT2et=bK?+;{%l*yrEIv{m+MF8PIXI!&)`U%I5_ zvKiGUwUM$q{oiVDOLcz6FDLGz7N1{K6_2$``5FCd?OlGcQoPfa*o)4hkoL@8)E6Z+ zzXGC-sE{(L02f9yPFY@1d@saM&Cx;B6l1g|4&ob5IL1LV7K^k?6z;1MjVDnVo(KHa zojH`(VWZ~f$fe$;h09{UwnP>`r<`%*pu$y)C`{Q!6V42{%ii2BIyeXFrz_X0qV&=N zoEb)h*2-C!MU-~VnIVqX99_h2u{!05i`Xv2TP@O6loTscX1a<-!qj-BcDAS}rJXJ+ zoV34-iXx(oR-hPz?xuwm_&N!iVl@|U=6H!V ztQ5musm-BqkKdPja($Jd`Z~3oo3cp@_ZG#p%cVp+OPkzVEBEF#ZqaR8h?j8l+(j35 z?A2F^GKF$;8p}&|l&p>P;$R207+Iuh39>k;o$wNeOy~BcOf4XY+OVE{ zKE-I&d$FvSXdQde^ES<{H(PtOa=pcF&ogu=pWfZ+cZBmsqAwpK+q74`8R13Eu@Be( zsWzz(`(?bOVIBiKk`dq0U>BkY`wcD~tNcq^0c_!ODf~LP| z5fMTYe`p`&)+^0@fEXeiv>5}04`-hsiz3>&0bDY7Enpy*#7k>FkX2JjTRxB{M!?U; z=@#R3b7#<&dqB=&E$z}k4%kS0HIVVPNUbJi?#5J#ISSDVj z6c{S_zzNeLqgauhj~So;t!(87tNiXD$J$3*EvpCoTiw=DU6{F)vpGEFQWO{4eFOFK z2Jhfp$wq!wLNc!cu=TmGX` zim}w?_&C=QJVSoe-i#3G+>dD^c>rWlAgxAO z4Y8fGU!LkoRC^{c26@7=dQa)DmPTJrGSRw+4$eV&PBQC%s{{V6mZw=oa~UnlTZWfA znW{dSxnJKBw6M_(uf}nGe*Bl%8sD+x-U-?iSuKZW+1o!VPj%w|RF|G@nLc^*$g8(O z%c5E|(B3fw(OmN$!(?{WBF6BDo2fM!%O}H9ZS+_!@Wzycv7)dLN3;XcmQT_*(LC`U zX|dz@40x@b8OQ!P+N*Kwkzey3&+>NC8jj}%^3raMXL(mm@t(jlL7YyxG?AwKgj9P! zNi^l=Y4`*Ce65ZAfm^ADmiYsZ^JZExv$!TAHU3j--*fMVPiBy_v~iPJ)v?-=$)d9R zs*|}3uA_5p%XGTpm z+URK=q;ZooouT6y)`j+gV!A`CPwjZRdPZ z)g;bncjk*K%%x)ttE|Ww)GO@^YaR;W1*2|F{+& z$M{d{y9{se!q&N({5MeUPFJ*8dSotk(yCbY3cUm8yd8+s+ACU!8(M)Sd{&*&dM*)l z-Hm~aaQ5f0PCUPCEKjrhTH+FxjgqdFS}ML0g;HuSwbZ6f zk;kX`IhHPzZib8nuSF;A zSd!?HH`WH*TiVUl7*)jtIbOm z6~*t`zGP9p=vtF_Sj5S%1%Hy0;$R!xgHOd6?PW6m3_7b7-X~h|&9~=1#@$MryibG` zY{d|h*^4T<3oKlva6m@J1)#IAYE$VdjgA$T8#m@?S>UGIcQ@xn`-8-Q8U87wtu+h%O1l5WN*FJAEc{|8Xs|WNA=vTX1e@$$s-Hzg>LfXvjrkMQI z10rhp2iC|vnEwt_QTyuss@3w3s1~jz?l65-EHr#nc*jwZL%)}uL{tw7uhuuPwxvpI z?q+h)Ht#Uq%pcx2uv+c@K{8!Yt5L#KB<1){Q*lT8S~Y9->syVk;y0LzX-5v4+*6zn znHia5ltqhQ3*R`GPJc#&1S$|~M!6(?K8saA1@Rearu%>)mO4a%3056~RF z^f;V5C_l;|tGIzx+=5u{(?!okQjXAblk{??UdB?&lUzr+6=u1ym*9Y2agy=^WQPy* z^0{8V)yslMa_dX#Wfi>)(aScJvfpsZL3(bKo|{BDUC+fH;kTW#;R+J*dUB^;{-~E{ z_3{p-Z2N{X$11k}=}W$-Ra}}_o`kQSt4k@*SoR^~MwWW!zm49Y3uSLhlHc3uxzUuy zPLqhI>-7uu`ej!2>#X9f#Jlx2hph6)h|?hlc3qb8x4lmY9PF4@21CnDUEhxt>US~@?T6!41wH1cC-{5Aa~eHX`KB* zt5~-CS#Klb^N{`gYL$Dg=ick3Q)+IXWhs3j+t*BG{$vLhzN+hzsbk?9_!= zmOhka`Mrnr%RkR{u=Tc_|7O++wman6?vrPGXrArpJloUrY%j{Qy~=94ryS{4tAyN6 z&a+*bZFzRa>uWX+lRKWL-NiiHx3o!rn7qs{^Q3d~Y|HND%eZU-1h)LDFGw%*9{vD_ zcc8u~tY4+`Z2RVJ%S)X5G7cnvF)m;H&*GE@G~$2WW-0k!m08M_dbvt3*HYG^UA(@% zUN1N6_eGNIf(La$`O=1^p1Awtx32wIk2Aaf#&PK)#9-B-6%? z@-Ssd%Hxz7dG@=WXZt~(?U%XR+Lgy9cNbgZx3js&P@J`oj7^l)JfE1nTx#X14b@ta zHh0OB?w@CSM4s)5dA4Wg*+Jk2aH>tydU>-NClp*%*H?i(@0Xb?gvF8Be*2G8xvd)I8f6dA6_T*?z#b z@juG4^z$-LgPh;BnNLln%+CCkn)Rz>o^9hvVw^F5pQ!lLW-z-|psbareQ2KTwt2Su zv&}gguTlzs&!O}nDStCA%gcHx|45{V7Vyk8WKeU$qRaRvF~4+?e|aMRUcgkEaq!fT y|BoDOi6@YkUr80>C}R1yi+04-h~?if+OTgVvE_k7z9aEaIX3e0+=BTP{Qm(Zrb8J3 delta 25084 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 - - - 短信 - 邮件 - - - %1$s 条符合“%2$s”的搜索结果 - - 确认删除文件夹及所包含的便签吗? - 确认要删除该条便签吗? - 确认要删除所选的 %d 条便签吗? - 删除 - 便签 - 便签2x2 - 便签4x4 - 删除 - 通话便签 - 取消 - 设置 - 成功删除提醒 - 不能为空便签设置闹钟提醒 - 不能将空便签发送到桌面 - 要查看的便签不存在 - 导出文本时发生错误,请检查SD卡 - SD卡被占用,不能操作 - 同步已取消 - 同步失败,发生内部错误 - 同步失败,请检查网络和帐号设置 - 导出失败 - 文件夹 %1$s 已存在,请重新命名 - yyyyMMdd - MM月dd日 kk:mm - 已将文本文件(%1$s)输出至SD卡(%2$s)目录 - 已将所选 %1$d 条便签移到 %2$s 文件夹 - 请输入名称 - 已添加到桌面 - 提醒我 - 新建文件夹 - 删除 - 取消全选 - 导出文本 - 修改文件夹名称 - 刪除文件夹 - 查看文件夹 - - 正常 - 文字大小 - - 超大 - 进入清单模式 - 移动到文件夹 - 上一级文件夹 - 退出清单模式 - 删除提醒 - 搜索 - 全选 - 没有选中项,操作无效 - 选中了 %d 项 - 发送到桌面 - 设置 - 分享 - 同步 - 取消同步 - 选择文件夹 - 已过期 - 发送邮件 - 打开地图 - 呼叫电话 - 浏览网页 - 查看 - 知道了 - 新建便签 - ... - 与google task同步便签记录 - 同步账号 - 添加账号 - 新建便签背景颜色随机 - 取消同步 - 立即同步 - 当前帐号 %1$s - 如更换同步帐号,过去的帐号同步信息将被清空,再次切换的同时可能会造成数据重复 - 请选择google帐号,便签将与该帐号的google task内容同步。 - 同步便签 - 上次同步于 %1$s - 取消 - 更换账号 - 删除账号 - 设置 - 正在同步中,不能修改同步帐号 - 同步帐号已设置为%1$s - 便签 - 搜索便签 - 正在搜索便签 - 便签中的文字 - 创建提醒 - 导出成功 - 与%1$s同步成功 - 正在获取服务器便签列表... - 登录%1$s... - 正在同步本地便签... - 同步已取消 - 同步失败 - 同步成功 - 同步便签... - 没有关联内容,点击新建便签。 - 访客模式下,便签内容不可见 - \ No newline at end of file diff --git a/src/Notes-master1/app/build/intermediates/incremental/debug/mergeDebugResources/merged.dir/values-zh-rTW/values-zh-rTW.xml b/src/Notes-master1/app/build/intermediates/incremental/debug/mergeDebugResources/merged.dir/values-zh-rTW/values-zh-rTW.xml deleted file mode 100644 index 226b5bc..0000000 --- a/src/Notes-master1/app/build/intermediates/incremental/debug/mergeDebugResources/merged.dir/values-zh-rTW/values-zh-rTW.xml +++ /dev/null @@ -1,108 +0,0 @@ - - - - 短信 - 郵件 - - - %1$s 條符合”%2$s“的搜尋結果 - - 確認刪除檔夾及所包含的便簽嗎? - 确认要删除該條便籤嗎? - 确认要刪除所選的 %d 條便籤嗎? - 刪除 - 便簽 - 便簽2x2 - 便簽4x4 - 刪除 - 通話便籤 - 取消 - 設置 - 成功刪除提醒 - 不能爲空便籤設置鬧鐘提醒 - 不能將空便籤發送到桌面 - 要查看的便籤不存在 - 導出TXT時發生錯誤,請檢查SD卡 - SD卡被佔用,不能操作 - 同步已取消 - 同步失敗,發生內部錯誤 - 同步失敗,請檢查網絡和帳號設置 - 導出失敗 - 文件夾 %1$s 已存在,請重新命名 - yyyyMMdd - MM月dd日 kk:mm - 已將文本文件(%1$s)導出至SD(%2$s)目錄 - 已將所選 %1$d 便籤移到 %2$s 文件夾 - 請輸入名稱 - 已添加到桌面 - 提醒我 - 新建文件夾 - 刪除 - 取消全選 - 導出文本 - 修改文件夾名稱 - 刪除文件夾 - 查看文件夾 - - 正常 - 文字大小 - - 超大 - 進入清單模式 - 移動到文件夾 - 上一級文件夾 - 退出清單模式 - 刪除提醒 - 搜尋 - 全選 - 沒有選中項,操作無效 - 選中了 %d 項 - 發送到桌面 - 設置 - 分享 - 同步 - 取消同步 - 選擇文件夾 - 已過期 - 發送郵件 - 打開地圖 - 呼叫電話 - 浏覽網頁 - 查看 - 知道了 - 新建便簽 - ... - 与google task同步便簽記錄 - 同步賬號 - 添加賬號 - 新建便籤背景顏色隨機 - 取消同步 - 立即同步 - 當前帳號 %1$s - 如更換同步帳號,過去的帳號同步信息將被清空,再次切換的同時可能會造成數據重復 - 請選擇google帳號,便簽將與該帳號的google task內容同步。 - 同步便簽 - 上次同步于 %1$s - 取消 - 更換賬號 - 刪除賬號 - 設置 - 正在同步中,不能修改同步帳號 - 同步帳號已設置為%1$s - 便籤 - 搜索便籤 - 正在搜索便籤 - 便籤中的文字 - 創建提醒 - 導出成功 - 與%1$s同步成功 - 正在獲取服務器便籤列表... - 登陸%1$s... - 正在同步本地便籤... - 同步已取消 - 同步失敗 - 同步成功 - 同步便簽... - 沒有關聯內容,點擊新建便簽。 - 訪客模式下,便籤內容不可見 - \ No newline at end of file diff --git a/src/Notes-master1/app/build/intermediates/incremental/debug/mergeDebugResources/merged.dir/values/values.xml b/src/Notes-master1/app/build/intermediates/incremental/debug/mergeDebugResources/merged.dir/values/values.xml index e49b0c3..c71fd03 100644 --- a/src/Notes-master1/app/build/intermediates/incremental/debug/mergeDebugResources/merged.dir/values/values.xml +++ b/src/Notes-master1/app/build/intermediates/incremental/debug/mergeDebugResources/merged.dir/values/values.xml @@ -132,8 +132,8 @@ @color/secondary_text_dark + + visible + 短信 邮件 - 便签便签2x2便签4x4没有关联内容,点击新建便签。访客模式下,便签内容不可见...新建便签成功删除提醒创建提醒已过期yyyyMMddMM月dd日 kk:mm知道了查看呼叫电话发送邮件浏览网页打开地图新建文件夹导出文本同步取消同步设置搜索删除移动到文件夹选中了 %d 项没有选中项,操作无效全选取消全选文字大小正常超大进入清单模式退出清单模式查看文件夹刪除文件夹修改文件夹名称文件夹 %1$s 已存在,请重新命名分享发送到桌面提醒我删除提醒选择文件夹上一级文件夹已添加到桌面删除确认要删除所选的 %d 条便签吗?确认要删除该条便签吗?确认删除文件夹及所包含的便签吗?已将所选 %1$d 条便签移到 %2$s 文件夹SD卡被占用,不能操作导出文本时发生错误,请检查SD卡要查看的便签不存在不能为空便签设置闹钟提醒不能将空便签发送到桌面导出成功导出失败已将文本文件(%1$s)输出至SD卡(%2$s)目录同步便签...同步成功同步失败同步已取消与%1$s同步成功同步失败,请检查网络和帐号设置同步失败,发生内部错误同步已取消登录%1$s...正在获取服务器便签列表...正在同步本地便签...设置同步账号与google task同步便签记录上次同步于 %1$s添加账号更换账号删除账号取消立即同步取消同步当前帐号 %1$s如更换同步帐号,过去的帐号同步信息将被清空,再次切换的同时可能会造成数据重复同步便签请选择google帐号,便签将与该帐号的google task内容同步。正在同步中,不能修改同步帐号同步帐号已设置为%1$s新建便签背景颜色随机删除通话便签请输入名称正在搜索便签搜索便签便签中的文字便签设置取消 + 便签便签2x2便签4x4没有关联内容,点击新建便签。访客模式下,便签内容不可见...新建便签成功删除提醒创建提醒已过期yyyyMMddMM月dd日 kk:mm知道了查看呼叫电话发送邮件浏览网页打开地图新建文件夹导出文本同步取消同步设置搜索删除移动到文件夹选中了 %d 项没有选中项,操作无效全选取消全选文字大小正常超大进入清单模式退出清单模式查看文件夹刪除文件夹修改文件夹名称文件夹 %1$s 已存在,请重新命名分享发送到桌面提醒我删除提醒选择文件夹上一级文件夹已添加到桌面删除确认要删除所选的 %d 条便签吗?确认要删除该条便签吗?确认删除文件夹及所包含的便签吗?已将所选 %1$d 条便签移到 %2$s 文件夹SD卡被占用,不能操作导出文本时发生错误,请检查SD卡要查看的便签不存在不能为空便签设置闹钟提醒不能将空便签发送到桌面导出成功导出失败已将文本文件(%1$s)输出至SD卡(%2$s)目录同步便签...同步成功同步失败同步已取消与%1$s同步成功同步失败,请检查网络和帐号设置同步失败,发生内部错误同步已取消登录%1$s...正在获取服务器便签列表...正在同步本地便签...设置同步账号与google task同步便签记录上次同步于 %1$s添加账号更换账号删除账号取消立即同步取消同步当前帐号 %1$s如更换同步帐号,过去的帐号同步信息将被清空,再次切换的同时可能会造成数据重复同步便签请选择google帐号,便签将与该帐号的google task内容同步。正在同步中,不能修改同步帐号同步帐号已设置为%1$s新建便签背景颜色随机删除通话便签请输入名称正在搜索便签搜索便签便签中的文字便签设置取消 %1$s 条符合“%2$s”的搜索结果 - + 短信 郵件 - 便簽便簽2x2便簽4x4沒有關聯內容,點擊新建便簽。訪客模式下,便籤內容不可見...新建便簽成功刪除提醒創建提醒已過期yyyyMMddMM月dd日 kk:mm知道了查看呼叫電話發送郵件浏覽網頁打開地圖已將所選 %1$d 便籤移到 %2$s 文件夾新建文件夾導出文本同步取消同步設置搜尋刪除移動到文件夾選中了 %d 項沒有選中項,操作無效全選取消全選文字大小正常超大進入清單模式退出清單模式查看文件夾刪除文件夾修改文件夾名稱文件夾 %1$s 已存在,請重新命名分享發送到桌面提醒我刪除提醒選擇文件夾上一級文件夾已添加到桌面刪除确认要刪除所選的 %d 條便籤嗎?确认要删除該條便籤嗎?確認刪除檔夾及所包含的便簽嗎?SD卡被佔用,不能操作導出TXT時發生錯誤,請檢查SD卡要查看的便籤不存在不能爲空便籤設置鬧鐘提醒不能將空便籤發送到桌面導出成功導出失敗已將文本文件(%1$s)導出至SD(%2$s)目錄同步便簽...同步成功同步失敗同步已取消與%1$s同步成功同步失敗,請檢查網絡和帳號設置同步失敗,發生內部錯誤同步已取消登陸%1$s...正在獲取服務器便籤列表...正在同步本地便籤...設置同步賬號与google task同步便簽記錄上次同步于 %1$s添加賬號更換賬號刪除賬號取消立即同步取消同步當前帳號 %1$s如更換同步帳號,過去的帳號同步信息將被清空,再次切換的同時可能會造成數據重復同步便簽請選擇google帳號,便簽將與該帳號的google task內容同步。正在同步中,不能修改同步帳號同步帳號已設置為%1$s新建便籤背景顏色隨機刪除通話便籤請輸入名稱正在搜索便籤搜索便籤便籤中的文字便籤設置取消 + 便簽便簽2x2便簽4x4沒有關聯內容,點擊新建便簽。訪客模式下,便籤內容不可見...新建便簽成功刪除提醒創建提醒已過期yyyyMMddMM月dd日 kk:mm知道了查看呼叫電話發送郵件浏覽網頁打開地圖已將所選 %1$d 便籤移到 %2$s 文件夾新建文件夾導出文本同步取消同步設置搜尋刪除移動到文件夾選中了 %d 項沒有選中項,操作無效全選取消全選文字大小正常超大進入清單模式退出清單模式查看文件夾刪除文件夾修改文件夾名稱文件夾 %1$s 已存在,請重新命名分享發送到桌面提醒我刪除提醒選擇文件夾上一級文件夾已添加到桌面刪除确认要刪除所選的 %d 條便籤嗎?确认要删除該條便籤嗎?確認刪除檔夾及所包含的便簽嗎?SD卡被佔用,不能操作導出TXT時發生錯誤,請檢查SD卡要查看的便籤不存在不能爲空便籤設置鬧鐘提醒不能將空便籤發送到桌面導出成功導出失敗已將文本文件(%1$s)導出至SD(%2$s)目錄同步便簽...同步成功同步失敗同步已取消與%1$s同步成功同步失敗,請檢查網絡和帳號設置同步失敗,發生內部錯誤同步已取消登陸%1$s...正在獲取服務器便籤列表...正在同步本地便籤...設置同步賬號与google task同步便簽記錄上次同步于 %1$s添加賬號更換賬號刪除賬號取消立即同步取消同步當前帳號 %1$s如更換同步帳號,過去的帳號同步信息將被清空,再次切換的同時可能會造成數據重復同步便簽請選擇google帳號,便簽將與該帳號的google task內容同步。正在同步中,不能修改同步帳號同步帳號已設置為%1$s新建便籤背景顏色隨機刪除通話便籤請輸入名稱正在搜索便籤搜索便籤便籤中的文字便籤設置取消 %1$s 條符合”%2$s“的搜尋結果 - \ No newline at end of file + \ No newline at end of file diff --git a/src/Notes-master1/app/build/intermediates/incremental/mergeDebugAssets/merger.xml b/src/Notes-master1/app/build/intermediates/incremental/mergeDebugAssets/merger.xml index a8b31e9..8075e68 100644 --- a/src/Notes-master1/app/build/intermediates/incremental/mergeDebugAssets/merger.xml +++ b/src/Notes-master1/app/build/intermediates/incremental/mergeDebugAssets/merger.xml @@ -1,2 +1,2 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/src/Notes-master1/app/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml b/src/Notes-master1/app/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml index 005f194..bf1781c 100644 --- a/src/Notes-master1/app/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml +++ b/src/Notes-master1/app/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml @@ -1,2 +1,2 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/src/Notes-master1/app/build/intermediates/incremental/mergeDebugShaders/merger.xml b/src/Notes-master1/app/build/intermediates/incremental/mergeDebugShaders/merger.xml index 6e816be..b685066 100644 --- a/src/Notes-master1/app/build/intermediates/incremental/mergeDebugShaders/merger.xml +++ b/src/Notes-master1/app/build/intermediates/incremental/mergeDebugShaders/merger.xml @@ -1,2 +1,2 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/src/Notes-master1/app/build/intermediates/incremental/packageDebug/tmp/debug/dex-renamer-state.txt b/src/Notes-master1/app/build/intermediates/incremental/packageDebug/tmp/debug/dex-renamer-state.txt index 9d8fc27..5d91bd0 100644 --- a/src/Notes-master1/app/build/intermediates/incremental/packageDebug/tmp/debug/dex-renamer-state.txt +++ b/src/Notes-master1/app/build/intermediates/incremental/packageDebug/tmp/debug/dex-renamer-state.txt @@ -1,4 +1,4 @@ -#Fri Mar 24 15:01:41 CST 2023 -base.0=D\:\\ZIP\\Notes-master1\\app\\build\\intermediates\\dex\\debug\\mergeDexDebug\\classes.dex +#Fri Apr 14 16:52:00 CST 2023 +base.0=D\:\\gitProject\\CJR_DXW_CYW\\src\\Notes-master1\\app\\build\\intermediates\\dex\\debug\\mergeDexDebug\\classes.dex renamed.0=classes.dex path.0=classes.dex diff --git a/src/Notes-master1/app/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/androidResources b/src/Notes-master1/app/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/androidResources index 44d33ab9e7c8106ae25e31e6a7a7241789060b29..22c8c435e3b7a1a032dd140f5c145e845949a765 100644 GIT binary patch delta 1014 zcmYMzX-HI26bJCR=Q`V)MID`avuQ3LqDae`*VAzvms~Pt!f_@kL!(co6@7>nDusy9 zN<+r;LCFsp5|vbpDP@Tzw1Lt_Vnm=qL}6w{(SkueuQU1J9)ACG-s4_)+y&2q$LjYI zkg-Q4lNF}Q{?ShC+LN@LL_avl%{es3xVL)?y{_xQpb&7AxajQUD>F zL^JY`Lwe8;UI@6@Y!C#<+Q>+#2R@hMSGgT)s6d)AL<3OlXAKhLgzg|?ASM?YY8m@t z+>q12NaZe=+t0XN?uNp{j05sKaumPF12Egn8aovt{5rF^U58SRg9;~fbS@zs?c#}Jofgp^=bH6CqUN(;|je9xs!}X^djlRu)Yey zQ*7t-ST{U-$JiL_f%P94UrEgR!sv)|!J2Opc{~~CqR(Xi0=b1o-cLeU$NPv42Y4^cUF$G=i3)vY9~=zhjM;=? zb0!(ZX>$d+hifgR5FExhs|njInecr?B9AXEZqkCWR-g1-|iCR<$krK=sOS8*bFgyo!d00&_76RyIfs!{!7!bNpm8aS@fi)zEqS%Mt=x> zPzn7Jh7YL}nG(8CLb8NN$TTWTw3pPENC-^v(ZH@pmlw{D&-eGcmvi89w!B+jYtTX)PsRIvWFE;5uKG0M%d=DFlZWOM%B)k`0Yk#z~R`gEom4 z3x5q8oLoDH%Dk-K2Dj4>oX0e8+Z4#_vV|5ADTFXn*;CqEb5{?;VRFwFtFKJM7|=IH1me=@!h>*zvF04ZR(VWlpGE)U|3fU(@SjYlo${E z`pMWFYDbmXg*Ho zS|iy@9S}b4D*0uOMvupAibW!nPC%yE5m69x5@0>lL1zc5_SLp diff --git a/src/Notes-master1/app/build/intermediates/javac/debug/classes/net/micode/notes/data/Notes$CallNote.class b/src/Notes-master1/app/build/intermediates/javac/debug/classes/net/micode/notes/data/Notes$CallNote.class index 534af6e13509ec099af6e7bb2d3a3e76d5fa4fa5..b763545ec993df8d5b11d4f6cd1d1ecdf9aa8902 100644 GIT binary patch delta 19 acmZ3^zMOr7GczOWWEW-!MzP7Q%t`HWQ=KHWQ=arD9w}f&hU5NmI;$S;^TprPL^72oq~8A1R-Ol&_L<;?$8_(0dthsWP J*G;I|^&jaQ8wvmb diff --git a/src/Notes-master1/app/build/intermediates/javac/debug/classes/net/micode/notes/data/NotesProvider.class b/src/Notes-master1/app/build/intermediates/javac/debug/classes/net/micode/notes/data/NotesProvider.class index 976265d980de8a884c64b7350d50abef965fb547..0101cfcd08cc6667b10e9aca27c0ca75d90d2c01 100644 GIT binary patch delta 442 zcmXAlPe>DB7>A#qiYXFlLTawz*ow$JNIQ6(k&uD~UhCo|Fc9)ohhiW?1>JU0D^Z94 zXp?d*5N1h}Jd~KM^>36)45De+%oaMT7rcDWcX+?&{r$e}*6r5Eb&mD{N*JVq`*?Xs zGeewXn07|EM3C!@(Z@KqnPiklOc5eVm|0_tC&ZaynFtBvJDx_m9Vz)^6f#FK&p5<$ z4l_>^FH9Hb3JY}ck{i6Dm)G27iF+mp^2VggCRs6k!d|?!>7-4*xAOxVeB`%rk5Bw1 zCGlAfR^?(%Cs>!4ukw-RCU7~j==>u8cMFlR5E~X^(?a~P5L=w(Cl|@m!7n=5;hJgh zkRxF1=a2out~K4Wrg^4q)g1pw3f7EiTl-A~WK^VL9Z;D{RIXAv?RH8B_m@)&YT#DD z<62ThB{MWw2#RSj+(rCzn1(J_2-a$a>@uqIdKrbixnb({y*YQh-SNusJ} PL8k+4?vNS-Id}d)AsTur delta 442 zcmXAkO-K^}6vuymB|q3fYnIX0a4w|}>f#O^H55`%!E0T*1O|eg^q>e5l+bM#t3{ED zeatY&4&?{=L6Kr&;#5RaBruhVEz@)@AIO9Eu~fivDo zWrbs2r^=i-l!H^pap?p;<#ItMDbgv5<>IPNQzZ|#l*euRs8#s{<)ho!qXHs2%b3mu MDtsYb3hek22cNBbVE_OC diff --git a/src/Notes-master1/app/build/intermediates/javac/debug/classes/net/micode/notes/model/Note$NoteData.class b/src/Notes-master1/app/build/intermediates/javac/debug/classes/net/micode/notes/model/Note$NoteData.class index 30318fc9e67004d82873a0ddf9b02152bffe0cc6..54b4705d448987b62cdeb58fb7fc327ddf64bacd 100644 GIT binary patch delta 322 zcmWN~O(??w7{~GN&eV@A29)ih2n z6PWR1W6~J3w3z}bQ!3LcK^41EVy!pL>Yq7^n8(S2k+nLEfa;QJST&-$9LZWca(Y+w ze2r3~RIrYV4XW6rhAlj7)4~p&?9#^({p{goU+WLF@K6hnnc;*LVwyhH?TiHHB)Q;? zOVV5kT#K0-vGX8KlH%f4YPk~+_tL_<6xSQ*oh*-lfI zr}8Xo%~LT?ky`SwO}T8p)A!S>&*$rR``zKVVV$6iNy_nILs82V4yIMo=#UvzXYMi0 zQpy|#3s~{1adWR}QAtMu_EgS^WSA2LivynKp}FInMRHuMei dBN2WjK~|FFBt>4b{7IhwsI8(w#H(5>yNd9cWElVe diff --git a/src/Notes-master1/app/build/intermediates/javac/debug/classes/net/micode/notes/model/Note.class b/src/Notes-master1/app/build/intermediates/javac/debug/classes/net/micode/notes/model/Note.class index bbbea2e552d7fc5aa6e4552efd2d13ebc9f5067b..db04c033b3f635404ccd527445ae0e467a98d694 100644 GIT binary patch delta 45 zcmeya^j&GgQ31s=1|x=Y25W{g21kZU22X|>h5&{-h6ILshBSr-h75-0$hBStHh75+L${(8)+>)YGT7F++le zyfq|5DHBxk&XD&sFi8_rhD>vhS$dcwVE=RG?dSsIELyi@?*l7*37*dm8*^4OuAKc@a`>Ik*$bCUyFIi!Ol?s9DU ze*^?CB!+Z?5ydg3L}rx4q8t-?_@-ojSl(4C5fdLPO|kMRL78%*lodMgMyV=~1f9mw z8GOnoQw8LzkYb(1uOcq#99MOLYbvHjCDh4Jy-I1&d2XnTMqP9((x0itT}iLBn&`V9 NbBj~7yS=_E{{c?RXXXF^ delta 425 zcmWNMO-Pgh5Qd*ua*5jXQ(Je{4*n!2X}YTiaXn;GErbRU{+v2QAqabrE}g8j2tpJ- z6;etfI(R8-Q&P}SC_QLMU>1Z0sn8)Y&}A`9=km@l%rg(O7+egFMjhWB4sn+>?vY6+ zC+H%d`);Qb(L;B^87=L#SwFc9P|Rb(404ts&Rc((Cp7bvYYfxMGon0?jihz!#)u&= z4S8kAYeKxChPQ@{(ZD!Oyfb8iTTJnQX?m>oGh@eQZSw=~`N%wTELpCzz$TyA=ChJn z(P5T#gfH^(H8zy-T^*}<_(2LkarlLgHL?uKV}k;IQ^l64|C)N62s<}~ zaCDM@3dvRx`8q|JiV5m8)heM*6r|i}0|%o$g8-uggA}79gF2%VgE6BEgBhbMgC&r*1@c`O-53HHJsBby vy%^#deHhXieHn5Y{TT`v0~m@J0~yL0Ll~+UgBWTUgBcnb!!}Fsh%y2Ik!>6{ delta 146 zcmZ20wN`4wLQYOy1~vvg20;dc$*VX6Ib9f77+e_y7~CeaaCtF$PWI>0W%Qj~%Vp0P zIC(FS44wR!>r|i(0|%omg8-u)gA}7ZgF2%FgE6BMgBhbUgC&r*1@c`OT^Irx-5DYo vJs9E{y%^FNy%};DeHjWE{TPZE{Ta#`gBYq90~l%;0~s0_LpDqBh%y2Ig;N{? diff --git a/src/Notes-master1/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/DataUtils.class b/src/Notes-master1/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/DataUtils.class index fc1d9a2623d6761bc4895be2a395bbbbdfe325e6..7fe7a78b4e1c4f8b4ef0d578e207fb446938e754 100644 GIT binary patch delta 605 zcmWNOZD`G57{-4$r?fIow)5u9&e_h6wU$MVhGsi9M$52bYF%Q*alc-PB_Z{#@t2jY5mx*ze z8m?2z4Hog3B|Kp(-oMRT}so;V$Isamy2e$&{2!&6f!om>|juLvEc*y6Z@;d`JrMN9cpA>hbNJw#4 zihEL=4m=>2eq|kCDi2k8L{u0{8Fc*NKe1tgJXg=KX1~xTFI9O(Ij^bYjX=Mpk$1xN zUT8iFQc6fZu#ZpL^|SW*l58j_x7le8_$HgQYVg+ypI~kmV4uT#C)Z lO!G3={8U+hg%))Bi%xn%xGYST72vi)JQg9(raR5irvLr@Lxnk z(e8s_<`B_K8m&V?3$#rUJxl~*p+xu)ROjjAe)pVn&pmgrZm@2k!xt^*I2Bx_lIv7+ zlNx$i#3PpSl*K$_3E!xVU-Eg(y^M60FLCZR5oW9-wrpOa4I^#1&AvN$bM-Q>|j2!}$> zFpIOy;T)x$cQS$({1?gOGTAcaRUBa%i^y0py-r)m>m-An{yri4g}5cefDpHZhzoH? zh#vnva=0(AL*z27&I6)6R7#H>U-)-bf&eeXNoe*{-OX^J-f2ekEzo&W#< diff --git a/src/Notes-master1/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/ResourceParser$TextAppearanceResources.class b/src/Notes-master1/app/build/intermediates/javac/debug/classes/net/micode/notes/tool/ResourceParser$TextAppearanceResources.class index 1714fc2df40e460b9423c66d0789359891d3438e..bc6e46319ce0b9569a2755b599a0b58ae1a86e90 100644 GIT binary patch delta 27 jcmeyx_KR)92`0`p3>*w=8MqkMPrk_H%D8#5ICC-pitGsu delta 27 jcmeyx_KR)92`0|f3>*w=7`PbLO}@zF%D8E=ICC-pin<92 diff --git a/src/Notes-master1/app/build/intermediates/javac/debug/classes/net/micode/notes/widget/NoteWidgetProvider.class b/src/Notes-master1/app/build/intermediates/javac/debug/classes/net/micode/notes/widget/NoteWidgetProvider.class index fabc84f3035a0fba66594e2b3c04fd3e762ed88a..3bb4970f27063457f95a41d5028d9c9ffdb1871b 100644 GIT binary patch delta 218 zcmWNHy-GrH96--+NVFlmN+jHbHo-;H3o6nDmmF^92iK1&&{RHSMUWK{4eKl;B11M;QYt!zs5-f4^b{L2oqB@h^sb9j92c7%fw5HE6j04 zvrlf-pI$Dsl?*ISxkDqv1^4J=36LX1o+Jg**os9Olz64gkP6>CFrvzoM`qOcrOuis z{?xUl$v-W2wAu5_ffsS`CNAFPjE#>1yr^u^{&>R8fbusnFPas>Pe BE8hSB delta 218 zcmW-Xy-Gp>7(mZAB-#*OFQTA9Ti{}tf+Sa5GSJMw>ks~i7cxjIsG%TQ-4w(naO(jQ zn_S#=b7}Jxd;y0pF6W%#tb8lq&%}Nlz{)uef_MpWM%b*-o>4AFbNkq)p%UW+ZB$nD zgG=*|&!);;J`)_0MBy42DLmY8N*X^IB4oKDPY#`13OrDxPl*9#hE({X$~QHBsk5NT zk``;){9&-+jx8N_+>3>-*yza-kK*J>+@?J|OOO}Q9K1@BH_>^Q1_?3vnC;ZG`~&hc BE3yCp diff --git a/src/Notes-master1/app/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt b/src/Notes-master1/app/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt index d21b3ec..7b94063 100644 --- a/src/Notes-master1/app/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt +++ b/src/Notes-master1/app/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt @@ -20,254 +20,254 @@ 20 android:versionName="0.1" > 21 22 D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:23:5-44 +22-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:23:5-44 23 android:minSdkVersion="14" -23-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:23:15-41 +23-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:23:15-41 24 android:targetSdkVersion="14" /> -24-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:23:5-44 +24-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:23:5-44 25 26 -26-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:25:5-81 -26-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:25:22-78 +26-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:25:5-81 +26-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:25:22-78 27 -27-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:26:5-88 -27-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:26:22-85 +27-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:26:5-88 +27-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:26:22-85 28 -28-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:27:5-67 -28-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:27:22-64 +28-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:27:5-67 +28-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:27:22-64 29 -29-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:28:5-72 -29-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:28:22-69 +29-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:28:5-72 +29-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:28:22-69 30 -30-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:29:5-74 -30-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:29:22-71 +30-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:29:5-74 +30-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:29:22-71 31 -31-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:30:5-80 -31-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:30:22-77 +31-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:30:5-80 +31-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:30:22-77 32 -32-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:31:5-71 -32-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:31:22-68 +32-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:31:5-71 +32-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:31:22-68 33 -33-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:32:5-74 -33-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:32:22-71 +33-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:32:5-74 +33-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:32:22-71 34 -34-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:33:5-81 -34-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:33:22-78 +34-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:33:5-81 +34-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:33:22-78 35 36 D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:35:5-149:19 +36-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:35:5-150:19 37 android:debuggable="true" 38 android:icon="@drawable/icon_app" -38-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:36:9-42 +38-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:36:9-42 39 android:label="@string/app_name" -39-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:37:9-41 +39-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:37:9-41 40 android:testOnly="true" > 41 D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:38:9-51:20 +41-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:38:9-52:20 42 android:name="net.micode.notes.ui.NotesListActivity" -42-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:39:13-49 +42-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:39:13-49 43 android:configChanges="keyboardHidden|orientation|screenSize" -43-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:40:13-74 +43-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:40:13-74 44 android:label="@string/app_name" -44-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:41:13-45 +44-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:41:13-45 45 android:launchMode="singleTop" -45-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:42:13-43 +45-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:42:13-43 46 android:theme="@style/NoteTheme" -46-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:43:13-45 -47 android:uiOptions="splitActionBarWhenNarrow" -47-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:44:13-57 -48 android:windowSoftInputMode="adjustPan" > -48-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:45:13-52 -49 -49-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:47:13-50:29 -50 -50-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:48:17-69 -50-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:48:25-66 -51 -52 -52-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:49:17-77 -52-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:49:27-74 -53 -54 -55 D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:53:9-81:20 -56 android:name="net.micode.notes.ui.NoteEditActivity" -56-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:54:13-48 -57 android:configChanges="keyboardHidden|orientation|screenSize" -57-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:55:13-74 -58 android:launchMode="singleTop" -58-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:56:13-43 -59 android:theme="@style/NoteTheme" > -59-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:57:13-45 -60 -60-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:59:13-64:29 -61 -61-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:60:17-69 -61-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:60:25-66 -62 -63 -63-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:61:17-76 -63-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:61:27-73 -64 -65 -65-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:62:17-78 -65-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:62:23-75 -66 -66-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:62:17-78 -66-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:62:23-75 -67 -68 -68-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:66:13-71:29 -69 -69-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:67:17-79 -69-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:67:25-76 -70 -71 -71-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:61:17-76 -71-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:61:27-73 -72 -73 -73-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:62:17-78 -73-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:62:23-75 -74 -74-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:62:17-78 -74-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:62:23-75 -75 -76 -76-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:73:13-76:29 -77 -77-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:74:17-71 -77-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:74:25-68 -78 -79 -79-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:61:17-76 -79-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:61:27-73 -80 -81 -82 D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:78:13-80:54 -83 android:name="android.app.searchable" -83-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:79:17-54 -84 android:resource="@xml/searchable" /> -84-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:80:17-51 -85 -86 -87 D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:83:9-86:43 -88 android:name="net.micode.notes.data.NotesProvider" -88-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:84:13-63 -89 android:authorities="micode_notes" -89-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:85:13-47 -90 android:multiprocess="true" /> -90-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:86:13-40 -91 -92 D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:88:9-100:20 -93 android:name="net.micode.notes.widget.NoteWidgetProvider_2x" -93-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:89:13-57 -94 android:label="@string/app_widget2x2" > -94-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:90:13-50 -95 -95-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:91:13-95:29 -96 -96-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:92:17-84 -96-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:92:25-81 -97 -97-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:93:17-85 -97-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:93:25-82 -98 -98-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:94:17-85 -98-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:94:25-82 -99 -100 -101 D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:97:13-99:58 -102 android:name="android.appwidget.provider" -102-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:98:17-58 -103 android:resource="@xml/widget_2x_info" /> -103-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:99:17-55 -104 -105 D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:101:9-114:20 -106 android:name="net.micode.notes.widget.NoteWidgetProvider_4x" -106-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:102:13-57 -107 android:label="@string/app_widget4x4" > -107-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:103:13-50 -108 -108-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:91:13-95:29 -109 -109-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:92:17-84 -109-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:92:25-81 -110 -110-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:93:17-85 -110-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:93:25-82 -111 -111-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:94:17-85 -111-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:94:25-82 -112 -113 -114 D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:97:13-99:58 -115 android:name="android.appwidget.provider" -115-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:98:17-58 -116 android:resource="@xml/widget_4x_info" /> -116-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:99:17-55 -117 -118 -118-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:116:9-120:20 -118-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:116:19-55 -119 -119-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:117:13-119:29 -120 -120-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:118:17-79 -120-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:118:25-76 -121 -122 -123 D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:122:9-125:20 -124 android:name="net.micode.notes.ui.AlarmReceiver" -124-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:123:13-61 -125 android:process=":remote" > -125-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:124:13-38 -126 -127 -128 D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:127:9-132:20 -129 android:name="net.micode.notes.ui.AlarmAlertActivity" -129-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:128:13-50 -130 android:label="@string/app_name" -130-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:129:13-45 -131 android:launchMode="singleInstance" -131-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:130:13-48 -132 android:theme="@android:style/Theme.Holo.Wallpaper.NoTitleBar" > -132-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:131:13-75 -133 -134 D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:134:9-139:20 -135 android:name="net.micode.notes.ui.NotesPreferenceActivity" -135-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:135:13-71 -136 android:label="@string/preferences_title" -136-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:136:13-54 -137 android:launchMode="singleTop" -137-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:137:13-43 -138 android:theme="@android:style/Theme.Holo.Light" > -138-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:138:13-60 -139 -140 -141 D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:141:9-144:19 -142 android:name="net.micode.notes.gtask.remote.GTaskSyncService" -142-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:142:13-74 -143 android:exported="false" > -143-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:143:13-37 -144 -145 -146 D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:146:9-148:52 -147 android:name="android.app.default_searchable" -147-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:147:13-58 -148 android:value=".ui.NoteEditActivity" /> -148-->D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:148:13-49 -149 -150 -151 +46-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:43:13-45 +47 android:windowSoftInputMode="adjustPan" > +47-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:45:13-52 +48 +49 +50 +50-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:48:13-51:29 +51 +51-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:49:17-69 +51-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:49:25-66 +52 +53 +53-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:50:17-77 +53-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:50:27-74 +54 +55 +56 D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:54:9-82:20 +57 android:name="net.micode.notes.ui.NoteEditActivity" +57-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:55:13-48 +58 android:configChanges="keyboardHidden|orientation|screenSize" +58-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:56:13-74 +59 android:launchMode="singleTop" +59-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:57:13-43 +60 android:theme="@style/NoteTheme" > +60-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:58:13-45 +61 +61-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:60:13-65:29 +62 +62-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:61:17-69 +62-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:61:25-66 +63 +64 +64-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:62:17-76 +64-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:62:27-73 +65 +66 +66-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:63:17-78 +66-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:63:23-75 +67 +67-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:63:17-78 +67-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:63:23-75 +68 +69 +69-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:67:13-72:29 +70 +70-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:68:17-79 +70-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:68:25-76 +71 +72 +72-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:62:17-76 +72-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:62:27-73 +73 +74 +74-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:63:17-78 +74-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:63:23-75 +75 +75-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:63:17-78 +75-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:63:23-75 +76 +77 +77-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:74:13-77:29 +78 +78-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:75:17-71 +78-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:75:25-68 +79 +80 +80-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:62:17-76 +80-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:62:27-73 +81 +82 +83 D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:79:13-81:54 +84 android:name="android.app.searchable" +84-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:80:17-54 +85 android:resource="@xml/searchable" /> +85-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:81:17-51 +86 +87 +88 D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:84:9-87:43 +89 android:name="net.micode.notes.data.NotesProvider" +89-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:85:13-63 +90 android:authorities="micode_notes" +90-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:86:13-47 +91 android:multiprocess="true" /> +91-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:87:13-40 +92 +93 D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:89:9-101:20 +94 android:name="net.micode.notes.widget.NoteWidgetProvider_2x" +94-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:90:13-57 +95 android:label="@string/app_widget2x2" > +95-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:91:13-50 +96 +96-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:92:13-96:29 +97 +97-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:93:17-84 +97-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:93:25-81 +98 +98-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:94:17-85 +98-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:94:25-82 +99 +99-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:95:17-85 +99-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:95:25-82 +100 +101 +102 D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:98:13-100:58 +103 android:name="android.appwidget.provider" +103-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:99:17-58 +104 android:resource="@xml/widget_2x_info" /> +104-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:100:17-55 +105 +106 D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:102:9-115:20 +107 android:name="net.micode.notes.widget.NoteWidgetProvider_4x" +107-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:103:13-57 +108 android:label="@string/app_widget4x4" > +108-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:104:13-50 +109 +109-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:92:13-96:29 +110 +110-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:93:17-84 +110-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:93:25-81 +111 +111-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:94:17-85 +111-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:94:25-82 +112 +112-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:95:17-85 +112-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:95:25-82 +113 +114 +115 D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:98:13-100:58 +116 android:name="android.appwidget.provider" +116-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:99:17-58 +117 android:resource="@xml/widget_4x_info" /> +117-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:100:17-55 +118 +119 +119-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:117:9-121:20 +119-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:117:19-55 +120 +120-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:118:13-120:29 +121 +121-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:119:17-79 +121-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:119:25-76 +122 +123 +124 D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:123:9-126:20 +125 android:name="net.micode.notes.ui.AlarmReceiver" +125-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:124:13-61 +126 android:process=":remote" > +126-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:125:13-38 +127 +128 +129 D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:128:9-133:20 +130 android:name="net.micode.notes.ui.AlarmAlertActivity" +130-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:129:13-50 +131 android:label="@string/app_name" +131-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:130:13-45 +132 android:launchMode="singleInstance" +132-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:131:13-48 +133 android:theme="@android:style/Theme.Holo.Wallpaper.NoTitleBar" > +133-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:132:13-75 +134 +135 D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:135:9-140:20 +136 android:name="net.micode.notes.ui.NotesPreferenceActivity" +136-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:136:13-71 +137 android:label="@string/preferences_title" +137-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:137:13-54 +138 android:launchMode="singleTop" +138-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:138:13-43 +139 android:theme="@android:style/Theme.Holo.Light" > +139-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:139:13-60 +140 +141 +142 D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:142:9-145:19 +143 android:name="net.micode.notes.gtask.remote.GTaskSyncService" +143-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:143:13-74 +144 android:exported="false" > +144-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:144:13-37 +145 +146 +147 D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:147:9-149:52 +148 android:name="android.app.default_searchable" +148-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:148:13-58 +149 android:value=".ui.NoteEditActivity" /> +149-->D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:149:13-49 +150 +151 +152 diff --git a/src/Notes-master1/app/build/intermediates/merged_manifest/debug/AndroidManifest.xml b/src/Notes-master1/app/build/intermediates/merged_manifest/debug/AndroidManifest.xml index f237bf5..bb3eb72 100644 --- a/src/Notes-master1/app/build/intermediates/merged_manifest/debug/AndroidManifest.xml +++ b/src/Notes-master1/app/build/intermediates/merged_manifest/debug/AndroidManifest.xml @@ -44,8 +44,9 @@ android:label="@string/app_name" android:launchMode="singleTop" android:theme="@style/NoteTheme" - android:uiOptions="splitActionBarWhenNarrow" android:windowSoftInputMode="adjustPan" > + + diff --git a/src/Notes-master1/app/build/intermediates/merged_manifests/debug/AndroidManifest.xml b/src/Notes-master1/app/build/intermediates/merged_manifests/debug/AndroidManifest.xml index f237bf5..bb3eb72 100644 --- a/src/Notes-master1/app/build/intermediates/merged_manifests/debug/AndroidManifest.xml +++ b/src/Notes-master1/app/build/intermediates/merged_manifests/debug/AndroidManifest.xml @@ -44,8 +44,9 @@ android:label="@string/app_name" android:launchMode="singleTop" android:theme="@style/NoteTheme" - android:uiOptions="splitActionBarWhenNarrow" android:windowSoftInputMode="adjustPan" > + + diff --git a/src/Notes-master1/app/build/intermediates/merged_res/debug/values_values.arsc.flat b/src/Notes-master1/app/build/intermediates/merged_res/debug/values_values.arsc.flat index ea0ebfc6d86b85ecbadd69f5df9625cb4e89b6a5..c0e5804d41298ff1aaed78c01f70c2409b755ea3 100644 GIT binary patch delta 108 zcmez2vByKu(J>%|k%55$gh4=MqF@eV-^RLrX{LYtoB3rHGipv}6cX~wFG+PwF3HT# zb4n}%|k%55$gh3#7qF@f=@r`x;(oEY0HuK9YX4JjFC?w>UUy|yWT#}ie z=ag6!TvC~nD#c*5oso+{XcHqBs}M6s8>7|=MxmvQlW)sfS(<@`+8L#krKA({Qi}33 zQ>+q8N{aMTGK&jx5-a@+KqeI%{Qu8v!KlQ+#Rg$X8BG?G)8ycgV&h^-&(GWJCHIMy H8R#YeLWV9x diff --git a/src/Notes-master1/app/build/intermediates/merged_res_blame_folder/debug/out/multi-v2/debug.json b/src/Notes-master1/app/build/intermediates/merged_res_blame_folder/debug/out/multi-v2/debug.json index 5bc9678..9dcfc6b 100644 --- a/src/Notes-master1/app/build/intermediates/merged_res_blame_folder/debug/out/multi-v2/debug.json +++ b/src/Notes-master1/app/build/intermediates/merged_res_blame_folder/debug/out/multi-v2/debug.json @@ -1,10 +1,29 @@ { "logs": [ { - "outputFile": "net.micode.notes.app-merged_res-5:/values-zh-rCN_values-zh-rCN.arsc.flat", + "outputFile": "C:\\Users\\86147\\.gradle\\daemon\\7.5\\net.micode.notes.app-merged_res-5:\\values-zh-rTW_values-zh-rTW.arsc.flat", "map": [ { - "source": "D:\\ZIP\\Notes-master1\\app\\src\\main\\res\\values-zh-rCN\\arrays.xml", + "source": "D:\\gitProject\\CJR_DXW_CYW\\src\\Notes-master1\\app\\src\\main\\res\\values-zh-rTW\\strings.xml", + "from": { + "startLines": "122,72,71,70,69,19,20,21,112,113,121,120,26,76,77,75,74,73,89,88,87,79,61,29,30,80,37,114,68,64,39,45,50,40,60,59,58,54,53,51,52,55,56,46,67,57,65,44,49,48,47,63,43,62,41,42,66,28,34,36,33,35,32,31,25,24,96,95,98,110,103,102,104,105,107,106,97,101,99,100,94,108,109,119,117,116,118,27,78,86,91,90,92,85,84,83,82,22,23", + "startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4", + "startOffsets": "6507,3575,3509,3436,3386,827,867,915,6057,6102,6453,6403,1199,3835,3903,3776,3710,3647,4565,4505,4442,4035,2957,1369,1422,4089,1768,6159,3327,3114,1878,2159,2405,1931,2897,2844,2793,2598,2550,2456,2504,2644,2691,2202,3268,2741,3157,2116,2358,2302,2247,3059,2072,3017,1981,2022,3209,1318,1623,1719,1576,1672,1529,1484,1148,1095,4940,4881,5081,5982,5392,5323,5456,5534,5717,5644,5015,5268,5138,5203,4832,5821,5904,6365,6258,6210,6303,1261,3980,4383,4678,4620,4745,4335,4290,4242,4191,963,1029", + "endLines": "124,72,71,70,69,19,20,21,112,113,121,120,26,76,77,75,74,73,89,88,87,79,61,29,30,80,37,114,68,64,39,45,50,40,60,59,58,54,53,51,52,55,56,46,67,57,65,44,49,48,47,63,43,62,41,42,66,28,34,36,33,35,32,31,25,24,96,95,98,110,103,102,104,105,107,106,97,101,99,100,94,108,109,119,117,116,118,27,78,86,91,90,92,85,84,83,82,22,23", + "endColumns": "14,71,65,72,49,39,47,47,44,56,53,49,61,67,76,58,65,62,54,59,62,53,59,52,61,83,79,49,58,42,52,42,50,49,59,52,50,45,47,47,45,46,49,44,58,51,51,42,46,55,54,54,43,41,40,49,58,50,48,48,46,46,46,44,50,52,74,58,56,73,63,68,77,109,103,72,65,54,64,64,48,82,77,37,44,47,61,56,54,58,66,57,61,47,44,47,50,65,65", + "endOffsets": "6679,3642,3570,3504,3431,862,910,958,6097,6154,6502,6448,1256,3898,3975,3830,3771,3705,4615,4560,4500,4084,3012,1417,1479,4168,1843,6204,3381,3152,1926,2197,2451,1976,2952,2892,2839,2639,2593,2499,2545,2686,2736,2242,3322,2788,3204,2154,2400,2353,2297,3109,2111,3054,2017,2067,3263,1364,1667,1763,1618,1714,1571,1524,1194,1143,5010,4935,5133,6051,5451,5387,5529,5639,5816,5712,5076,5318,5198,5263,4876,5899,5977,6398,6298,6253,6360,1313,4030,4437,4740,4673,4802,4378,4330,4285,4237,1024,1090" + }, + "to": { + "startLines": "6,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106", + "startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4", + "startOffsets": "215,384,456,522,595,645,685,733,781,826,883,937,987,1049,1117,1194,1253,1319,1382,1437,1497,1560,1614,1674,1727,1789,1873,1953,2003,2062,2105,2158,2201,2252,2302,2362,2415,2466,2512,2560,2608,2654,2701,2751,2796,2855,2907,2959,3002,3049,3105,3160,3215,3259,3301,3342,3392,3451,3502,3551,3600,3647,3694,3741,3786,3837,3890,3965,4024,4081,4155,4219,4288,4366,4476,4580,4653,4719,4774,4839,4904,4953,5036,5114,5152,5197,5245,5307,5364,5419,5478,5545,5603,5665,5713,5758,5806,5857,5923", + "endLines": "8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106", + "endColumns": "14,71,65,72,49,39,47,47,44,56,53,49,61,67,76,58,65,62,54,59,62,53,59,52,61,83,79,49,58,42,52,42,50,49,59,52,50,45,47,47,45,46,49,44,58,51,51,42,46,55,54,54,43,41,40,49,58,50,48,48,46,46,46,44,50,52,74,58,56,73,63,68,77,109,103,72,65,54,64,64,48,82,77,37,44,47,61,56,54,58,66,57,61,47,44,47,50,65,65", + "endOffsets": "379,451,517,590,640,680,728,776,821,878,932,982,1044,1112,1189,1248,1314,1377,1432,1492,1555,1609,1669,1722,1784,1868,1948,1998,2057,2100,2153,2196,2247,2297,2357,2410,2461,2507,2555,2603,2649,2696,2746,2791,2850,2902,2954,2997,3044,3100,3155,3210,3254,3296,3337,3387,3446,3497,3546,3595,3642,3689,3736,3781,3832,3885,3960,4019,4076,4150,4214,4283,4361,4471,4575,4648,4714,4769,4834,4899,4948,5031,5109,5147,5192,5240,5302,5359,5414,5473,5540,5598,5660,5708,5753,5801,5852,5918,5984" + } + }, + { + "source": "D:\\gitProject\\CJR_DXW_CYW\\src\\Notes-master1\\app\\src\\main\\res\\values-zh-rTW\\arrays.xml", "from": { "startLines": "18", "startColumns": "4", @@ -21,25 +40,6 @@ "endColumns": "19", "endOffsets": "210" } - }, - { - "source": "D:\\ZIP\\Notes-master1\\app\\src\\main\\res\\values-zh-rCN\\strings.xml", - "from": { - "startLines": "121,71,70,69,68,19,20,21,112,113,120,119,26,77,78,76,75,74,90,89,88,80,60,29,30,81,72,114,67,63,38,44,49,39,59,58,57,53,52,50,51,54,55,45,66,56,64,43,48,47,46,62,42,61,40,41,65,28,34,36,33,35,32,31,25,24,97,96,99,111,104,103,105,106,108,107,98,102,100,101,95,109,110,118,116,115,117,27,79,87,92,91,93,86,85,84,83,22,23", - "startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4", - "startOffsets": "6532,3495,3429,3356,3306,827,867,915,6083,6128,6478,6428,1199,3861,3929,3802,3737,3674,4592,4532,4469,4061,2877,1369,1422,4115,3568,6185,3247,3034,1798,2079,2325,1851,2817,2764,2713,2518,2470,2376,2424,2564,2611,2122,3188,2661,3077,2036,2278,2222,2167,2979,1992,2937,1901,1942,3129,1318,1623,1719,1576,1672,1529,1484,1148,1095,4967,4908,5108,6009,5419,5350,5483,5561,5744,5671,5042,5295,5165,5230,4859,5848,5931,6390,6283,6235,6328,1261,4006,4410,4705,4647,4772,4362,4317,4269,4218,963,1029", - "endLines": "123,71,70,69,68,19,20,21,112,113,120,119,26,77,78,76,75,74,90,89,88,80,60,29,30,81,72,114,67,63,38,44,49,39,59,58,57,53,52,50,51,54,55,45,66,56,64,43,48,47,46,62,42,61,40,41,65,28,34,36,33,35,32,31,25,24,97,96,99,111,104,103,105,106,108,107,98,102,100,101,95,109,110,118,116,115,117,27,79,87,92,91,93,86,85,84,83,22,23", - "endColumns": "14,72,65,72,49,39,47,47,44,56,53,49,61,67,76,58,64,62,54,59,62,53,59,52,61,84,80,49,58,42,52,42,50,49,59,52,50,45,47,47,45,46,49,44,58,51,51,42,46,55,54,54,43,41,40,49,58,50,48,48,46,46,46,44,50,52,74,58,56,73,63,68,77,109,103,72,65,54,64,64,48,82,77,37,44,47,61,56,54,58,66,57,61,47,44,47,50,65,65", - "endOffsets": "6704,3563,3490,3424,3351,862,910,958,6123,6180,6527,6473,1256,3924,4001,3856,3797,3732,4642,4587,4527,4110,2932,1417,1479,4195,3644,6230,3301,3072,1846,2117,2371,1896,2872,2812,2759,2559,2513,2419,2465,2606,2656,2162,3242,2708,3124,2074,2320,2273,2217,3029,2031,2974,1937,1987,3183,1364,1667,1763,1618,1714,1571,1524,1194,1143,5037,4962,5160,6078,5478,5414,5556,5666,5843,5739,5103,5345,5225,5290,4903,5926,6004,6423,6323,6278,6385,1313,4056,4464,4767,4700,4829,4405,4357,4312,4264,1024,1090" - }, - "to": { - "startLines": "6,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106", - "startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4", - "startOffsets": "215,384,457,523,596,646,686,734,782,827,884,938,988,1050,1118,1195,1254,1319,1382,1437,1497,1560,1614,1674,1727,1789,1874,1955,2005,2064,2107,2160,2203,2254,2304,2364,2417,2468,2514,2562,2610,2656,2703,2753,2798,2857,2909,2961,3004,3051,3107,3162,3217,3261,3303,3344,3394,3453,3504,3553,3602,3649,3696,3743,3788,3839,3892,3967,4026,4083,4157,4221,4290,4368,4478,4582,4655,4721,4776,4841,4906,4955,5038,5116,5154,5199,5247,5309,5366,5421,5480,5547,5605,5667,5715,5760,5808,5859,5925", - "endLines": "8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106", - "endColumns": "14,72,65,72,49,39,47,47,44,56,53,49,61,67,76,58,64,62,54,59,62,53,59,52,61,84,80,49,58,42,52,42,50,49,59,52,50,45,47,47,45,46,49,44,58,51,51,42,46,55,54,54,43,41,40,49,58,50,48,48,46,46,46,44,50,52,74,58,56,73,63,68,77,109,103,72,65,54,64,64,48,82,77,37,44,47,61,56,54,58,66,57,61,47,44,47,50,65,65", - "endOffsets": "379,452,518,591,641,681,729,777,822,879,933,983,1045,1113,1190,1249,1314,1377,1432,1492,1555,1609,1669,1722,1784,1869,1950,2000,2059,2102,2155,2198,2249,2299,2359,2412,2463,2509,2557,2605,2651,2698,2748,2793,2852,2904,2956,2999,3046,3102,3157,3212,3256,3298,3339,3389,3448,3499,3548,3597,3644,3691,3738,3783,3834,3887,3962,4021,4078,4152,4216,4285,4363,4473,4577,4650,4716,4771,4836,4901,4950,5033,5111,5149,5194,5242,5304,5361,5416,5475,5542,5600,5662,5710,5755,5803,5854,5920,5986" - } } ] }, @@ -47,14 +47,42 @@ "outputFile": "net.micode.notes.app-merged_res-5:/values_values.arsc.flat", "map": [ { - "source": "D:\\ZIP\\Notes-master1\\app\\src\\main\\res\\values\\arrays.xml", + "source": "D:\\gitProject\\CJR_DXW_CYW\\src\\Notes-master1\\app\\src\\main\\res\\values\\colors.xml", "from": { - "startLines": "19,26", - "startColumns": "4,4", - "startOffsets": "739,1047", - "endLines": "24,29", - "endColumns": "19,19", - "endOffsets": "1041,1162" + "startLines": "-1", + "startColumns": "-1", + "startOffsets": "-1" + }, + "to": { + "startLines": "12", + "startColumns": "4", + "startOffsets": "420", + "endColumns": "56", + "endOffsets": "472" + } + }, + { + "source": "D:\\gitProject\\CJR_DXW_CYW\\src\\Notes-master1\\app\\src\\main\\res\\values\\strings.xml", + "from": { + "startLines": "-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1", + "startColumns": "-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1", + "startOffsets": "-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1" + }, + "to": { + "startLines": "18,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124", + "startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4", + "startOffsets": "739,1092,1188,1271,1367,1436,1479,1531,1583,1632,1695,1753,1804,1888,1982,2090,2161,2245,2328,2394,2477,2579,2640,2702,2753,2831,2884,2944,3049,3108,3210,3265,3336,3385,3443,3490,3549,3606,3677,3738,3795,3845,3897,3950,4000,4050,4110,4163,4229,4291,4354,4401,4456,4544,4602,4664,4714,4759,4802,4862,4929,4984,5039,5092,5139,5192,5248,5296,5351,5404,5488,5555,5619,5715,5789,5870,5959,6122,6266,6345,6420,6502,6561,6641,6721,6776,6898,7001,7042,7095,7152,7226,7291,7359,7445,7525,7594,7688,7747,7802,7864,7924,8034", + "endLines": "22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124", + "endColumns": "14,95,82,95,68,42,51,51,48,62,57,50,83,93,107,70,83,82,65,82,101,60,61,50,77,52,59,104,58,101,54,70,48,57,46,58,56,70,60,56,49,51,52,49,49,59,52,65,61,62,46,54,87,57,61,49,44,42,59,66,54,54,52,46,52,55,47,54,52,83,66,63,95,73,80,88,162,143,78,74,81,58,79,79,54,121,102,40,52,56,73,64,67,85,79,68,93,58,54,61,59,109,89", + "endOffsets": "1087,1183,1266,1362,1431,1474,1526,1578,1627,1690,1748,1799,1883,1977,2085,2156,2240,2323,2389,2472,2574,2635,2697,2748,2826,2879,2939,3044,3103,3205,3260,3331,3380,3438,3485,3544,3601,3672,3733,3790,3840,3892,3945,3995,4045,4105,4158,4224,4286,4349,4396,4451,4539,4597,4659,4709,4754,4797,4857,4924,4979,5034,5087,5134,5187,5243,5291,5346,5399,5483,5550,5614,5710,5784,5865,5954,6117,6261,6340,6415,6497,6556,6636,6716,6771,6893,6996,7037,7090,7147,7221,7286,7354,7440,7520,7589,7683,7742,7797,7859,7919,8029,8119" + } + }, + { + "source": "D:\\gitProject\\CJR_DXW_CYW\\src\\Notes-master1\\app\\src\\main\\res\\values\\arrays.xml", + "from": { + "startLines": "-1,-1", + "startColumns": "-1,-1", + "startOffsets": "-1,-1" }, "to": { "startLines": "2,8", @@ -66,32 +94,30 @@ } }, { - "source": "D:\\ZIP\\Notes-master1\\app\\src\\main\\res\\values\\styles.xml", + "source": "D:\\gitProject\\CJR_DXW_CYW\\src\\Notes-master1\\app\\src\\main\\res\\values\\styles.xml", "from": { - "startLines": "50,55,64,60,22,26,30,35,40,18,45", - "startColumns": "4,4,4,4,4,4,4,4,4,4,4", - "startOffsets": "2062,2267,2640,2479,895,1078,1263,1449,1653,712,1860", - "endLines": "53,58,67,62,25,29,33,38,43,21,48", - "endColumns": "12,12,12,12,12,12,12,12,12,12,12", - "endOffsets": "2261,2473,2843,2634,1073,1258,1443,1647,1854,890,2056" + "startLines": "-1,-1,64,-1,-1,-1,-1,-1,-1,-1,-1", + "startColumns": "-1,-1,4,-1,-1,-1,-1,-1,-1,-1,-1", + "startOffsets": "-1,-1,2640,-1,-1,-1,-1,-1,-1,-1,-1", + "endLines": "-1,-1,67,-1,-1,-1,-1,-1,-1,-1,-1", + "endColumns": "-1,-1,12,-1,-1,-1,-1,-1,-1,-1,-1", + "endOffsets": "-1,-1,2853,-1,-1,-1,-1,-1,-1,-1,-1" }, "to": { "startLines": "125,129,133,137,140,144,148,152,156,160,164", "startColumns": "4,4,4,4,4,4,4,4,4,4,4", - "startOffsets": "8124,8328,8539,8746,8906,9089,9274,9459,9662,9868,10051", + "startOffsets": "8124,8328,8539,8704,8864,9047,9232,9417,9620,9826,10009", "endLines": "128,132,136,139,143,147,151,155,159,163,167", "endColumns": "12,12,12,12,12,12,12,12,12,12,12", - "endOffsets": "8323,8534,8741,8901,9084,9269,9454,9657,9863,10046,10247" + "endOffsets": "8323,8534,8699,8859,9042,9227,9412,9615,9821,10004,10205" } }, { - "source": "D:\\ZIP\\Notes-master1\\app\\src\\main\\res\\values\\dimens.xml", + "source": "D:\\gitProject\\CJR_DXW_CYW\\src\\Notes-master1\\app\\src\\main\\res\\values\\dimens.xml", "from": { - "startLines": "19,20,21,22,18", - "startColumns": "4,4,4,4,4", - "startOffsets": "764,816,869,922,712", - "endColumns": "51,52,52,51,51", - "endOffsets": "811,864,917,969,759" + "startLines": "-1,-1,-1,-1,-1", + "startColumns": "-1,-1,-1,-1,-1", + "startOffsets": "-1,-1,-1,-1,-1" }, "to": { "startLines": "13,14,15,16,17", @@ -100,9 +126,14 @@ "endColumns": "51,52,52,51,51", "endOffsets": "524,577,630,682,734" } - }, + } + ] + }, + { + "outputFile": "C:\\Users\\86147\\.gradle\\daemon\\7.5\\net.micode.notes.app-merged_res-5:\\values_values.arsc.flat", + "map": [ { - "source": "D:\\ZIP\\Notes-master1\\app\\src\\main\\res\\values\\colors.xml", + "source": "D:\\gitProject\\CJR_DXW_CYW\\src\\Notes-master1\\app\\src\\main\\res\\values\\colors.xml", "from": { "startLines": "18", "startColumns": "4", @@ -119,7 +150,7 @@ } }, { - "source": "D:\\ZIP\\Notes-master1\\app\\src\\main\\res\\values\\strings.xml", + "source": "D:\\gitProject\\CJR_DXW_CYW\\src\\Notes-master1\\app\\src\\main\\res\\values\\strings.xml", "from": { "startLines": "128,72,75,74,73,19,20,21,118,119,127,126,26,81,82,80,79,78,94,93,92,84,39,38,64,29,30,85,41,76,120,71,67,42,48,53,43,63,62,61,57,56,54,55,58,59,49,70,60,68,47,52,51,50,66,46,65,44,45,69,28,34,36,33,35,32,31,25,24,101,100,104,116,109,108,110,111,113,112,102,103,107,105,106,99,114,115,125,123,122,124,27,83,91,96,95,97,90,89,88,87,22,23", "startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4", @@ -136,33 +167,88 @@ "endColumns": "14,95,82,95,68,42,51,51,48,62,57,50,83,93,107,70,83,82,65,82,101,60,61,50,77,52,59,104,58,101,54,70,48,57,46,58,56,70,60,56,49,51,52,49,49,59,52,65,61,62,46,54,87,57,61,49,44,42,59,66,54,54,52,46,52,55,47,54,52,83,66,63,95,73,80,88,162,143,78,74,81,58,79,79,54,121,102,40,52,56,73,64,67,85,79,68,93,58,54,61,59,109,89", "endOffsets": "1087,1183,1266,1362,1431,1474,1526,1578,1627,1690,1748,1799,1883,1977,2085,2156,2240,2323,2389,2472,2574,2635,2697,2748,2826,2879,2939,3044,3103,3205,3260,3331,3380,3438,3485,3544,3601,3672,3733,3790,3840,3892,3945,3995,4045,4105,4158,4224,4286,4349,4396,4451,4539,4597,4659,4709,4754,4797,4857,4924,4979,5034,5087,5134,5187,5243,5291,5346,5399,5483,5550,5614,5710,5784,5865,5954,6117,6261,6340,6415,6497,6556,6636,6716,6771,6893,6996,7037,7090,7147,7221,7286,7354,7440,7520,7589,7683,7742,7797,7859,7919,8029,8119" } + }, + { + "source": "D:\\gitProject\\CJR_DXW_CYW\\src\\Notes-master1\\app\\src\\main\\res\\values\\arrays.xml", + "from": { + "startLines": "19,26", + "startColumns": "4,4", + "startOffsets": "739,1047", + "endLines": "24,29", + "endColumns": "19,19", + "endOffsets": "1041,1162" + }, + "to": { + "startLines": "2,8", + "startColumns": "4,4", + "startOffsets": "105,300", + "endLines": "7,11", + "endColumns": "19,19", + "endOffsets": "295,415" + } + }, + { + "source": "D:\\gitProject\\CJR_DXW_CYW\\src\\Notes-master1\\app\\src\\main\\res\\values\\styles.xml", + "from": { + "startLines": "50,55,64,60,22,26,30,35,40,18,45", + "startColumns": "4,4,4,4,4,4,4,4,4,4,4", + "startOffsets": "2062,2267,2640,2479,895,1078,1263,1449,1653,712,1860", + "endLines": "53,58,67,62,25,29,33,38,43,21,48", + "endColumns": "12,12,12,12,12,12,12,12,12,12,12", + "endOffsets": "2261,2473,2853,2634,1073,1258,1443,1647,1854,890,2056" + }, + "to": { + "startLines": "125,129,133,137,140,144,148,152,156,160,164", + "startColumns": "4,4,4,4,4,4,4,4,4,4,4", + "startOffsets": "8124,8328,8539,8704,8864,9047,9232,9417,9620,9826,10009", + "endLines": "128,132,136,139,143,147,151,155,159,163,167", + "endColumns": "12,12,12,12,12,12,12,12,12,12,12", + "endOffsets": "8323,8534,8699,8859,9042,9227,9412,9615,9821,10004,10205" + } + }, + { + "source": "D:\\gitProject\\CJR_DXW_CYW\\src\\Notes-master1\\app\\src\\main\\res\\values\\dimens.xml", + "from": { + "startLines": "19,20,21,22,18", + "startColumns": "4,4,4,4,4", + "startOffsets": "764,816,869,922,712", + "endColumns": "51,52,52,51,51", + "endOffsets": "811,864,917,969,759" + }, + "to": { + "startLines": "13,14,15,16,17", + "startColumns": "4,4,4,4,4", + "startOffsets": "477,529,582,635,687", + "endColumns": "51,52,52,51,51", + "endOffsets": "524,577,630,682,734" + } } ] }, { - "outputFile": "net.micode.notes.app-merged_res-5:/values-zh-rTW_values-zh-rTW.arsc.flat", + "outputFile": "C:\\Users\\86147\\.gradle\\daemon\\7.5\\net.micode.notes.app-merged_res-5:\\values-zh-rCN_values-zh-rCN.arsc.flat", "map": [ { - "source": "D:\\ZIP\\Notes-master1\\app\\src\\main\\res\\values-zh-rTW\\strings.xml", + "source": "D:\\gitProject\\CJR_DXW_CYW\\src\\Notes-master1\\app\\src\\main\\res\\values-zh-rCN\\strings.xml", "from": { - "startLines": "122,72,71,70,69,19,20,21,112,113,121,120,26,76,77,75,74,73,89,88,87,79,61,29,30,80,37,114,68,64,39,45,50,40,60,59,58,54,53,51,52,55,56,46,67,57,65,44,49,48,47,63,43,62,41,42,66,28,34,36,33,35,32,31,25,24,96,95,98,110,103,102,104,105,107,106,97,101,99,100,94,108,109,119,117,116,118,27,78,86,91,90,92,85,84,83,82,22,23", + "startLines": "121,71,70,69,68,19,20,21,112,113,120,119,26,77,78,76,75,74,90,89,88,80,60,29,30,81,72,114,67,63,38,44,49,39,59,58,57,53,52,50,51,54,55,45,66,56,64,43,48,47,46,62,42,61,40,41,65,28,34,36,33,35,32,31,25,24,97,96,99,111,104,103,105,106,108,107,98,102,100,101,95,109,110,118,116,115,117,27,79,87,92,91,93,86,85,84,83,22,23", "startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4", - "startOffsets": "6507,3575,3509,3436,3386,827,867,915,6057,6102,6453,6403,1199,3835,3903,3776,3710,3647,4565,4505,4442,4035,2957,1369,1422,4089,1768,6159,3327,3114,1878,2159,2405,1931,2897,2844,2793,2598,2550,2456,2504,2644,2691,2202,3268,2741,3157,2116,2358,2302,2247,3059,2072,3017,1981,2022,3209,1318,1623,1719,1576,1672,1529,1484,1148,1095,4940,4881,5081,5982,5392,5323,5456,5534,5717,5644,5015,5268,5138,5203,4832,5821,5904,6365,6258,6210,6303,1261,3980,4383,4678,4620,4745,4335,4290,4242,4191,963,1029", - "endLines": "124,72,71,70,69,19,20,21,112,113,121,120,26,76,77,75,74,73,89,88,87,79,61,29,30,80,37,114,68,64,39,45,50,40,60,59,58,54,53,51,52,55,56,46,67,57,65,44,49,48,47,63,43,62,41,42,66,28,34,36,33,35,32,31,25,24,96,95,98,110,103,102,104,105,107,106,97,101,99,100,94,108,109,119,117,116,118,27,78,86,91,90,92,85,84,83,82,22,23", - "endColumns": "14,71,65,72,49,39,47,47,44,56,53,49,61,67,76,58,65,62,54,59,62,53,59,52,61,83,79,49,58,42,52,42,50,49,59,52,50,45,47,47,45,46,49,44,58,51,51,42,46,55,54,54,43,41,40,49,58,50,48,48,46,46,46,44,50,52,74,58,56,73,63,68,77,109,103,72,65,54,64,64,48,82,77,37,44,47,61,56,54,58,66,57,61,47,44,47,50,65,65", - "endOffsets": "6679,3642,3570,3504,3431,862,910,958,6097,6154,6502,6448,1256,3898,3975,3830,3771,3705,4615,4560,4500,4084,3012,1417,1479,4168,1843,6204,3381,3152,1926,2197,2451,1976,2952,2892,2839,2639,2593,2499,2545,2686,2736,2242,3322,2788,3204,2154,2400,2353,2297,3109,2111,3054,2017,2067,3263,1364,1667,1763,1618,1714,1571,1524,1194,1143,5010,4935,5133,6051,5451,5387,5529,5639,5816,5712,5076,5318,5198,5263,4876,5899,5977,6398,6298,6253,6360,1313,4030,4437,4740,4673,4802,4378,4330,4285,4237,1024,1090" + "startOffsets": "6532,3495,3429,3356,3306,827,867,915,6083,6128,6478,6428,1199,3861,3929,3802,3737,3674,4592,4532,4469,4061,2877,1369,1422,4115,3568,6185,3247,3034,1798,2079,2325,1851,2817,2764,2713,2518,2470,2376,2424,2564,2611,2122,3188,2661,3077,2036,2278,2222,2167,2979,1992,2937,1901,1942,3129,1318,1623,1719,1576,1672,1529,1484,1148,1095,4967,4908,5108,6009,5419,5350,5483,5561,5744,5671,5042,5295,5165,5230,4859,5848,5931,6390,6283,6235,6328,1261,4006,4410,4705,4647,4772,4362,4317,4269,4218,963,1029", + "endLines": "123,71,70,69,68,19,20,21,112,113,120,119,26,77,78,76,75,74,90,89,88,80,60,29,30,81,72,114,67,63,38,44,49,39,59,58,57,53,52,50,51,54,55,45,66,56,64,43,48,47,46,62,42,61,40,41,65,28,34,36,33,35,32,31,25,24,97,96,99,111,104,103,105,106,108,107,98,102,100,101,95,109,110,118,116,115,117,27,79,87,92,91,93,86,85,84,83,22,23", + "endColumns": "14,72,65,72,49,39,47,47,44,56,53,49,61,67,76,58,64,62,54,59,62,53,59,52,61,84,80,49,58,42,52,42,50,49,59,52,50,45,47,47,45,46,49,44,58,51,51,42,46,55,54,54,43,41,40,49,58,50,48,48,46,46,46,44,50,52,74,58,56,73,63,68,77,109,103,72,65,54,64,64,48,82,77,37,44,47,61,56,54,58,66,57,61,47,44,47,50,65,65", + "endOffsets": "6704,3563,3490,3424,3351,862,910,958,6123,6180,6527,6473,1256,3924,4001,3856,3797,3732,4642,4587,4527,4110,2932,1417,1479,4195,3644,6230,3301,3072,1846,2117,2371,1896,2872,2812,2759,2559,2513,2419,2465,2606,2656,2162,3242,2708,3124,2074,2320,2273,2217,3029,2031,2974,1937,1987,3183,1364,1667,1763,1618,1714,1571,1524,1194,1143,5037,4962,5160,6078,5478,5414,5556,5666,5843,5739,5103,5345,5225,5290,4903,5926,6004,6423,6323,6278,6385,1313,4056,4464,4767,4700,4829,4405,4357,4312,4264,1024,1090" }, "to": { "startLines": "6,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106", "startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4", - "startOffsets": "215,384,456,522,595,645,685,733,781,826,883,937,987,1049,1117,1194,1253,1319,1382,1437,1497,1560,1614,1674,1727,1789,1873,1953,2003,2062,2105,2158,2201,2252,2302,2362,2415,2466,2512,2560,2608,2654,2701,2751,2796,2855,2907,2959,3002,3049,3105,3160,3215,3259,3301,3342,3392,3451,3502,3551,3600,3647,3694,3741,3786,3837,3890,3965,4024,4081,4155,4219,4288,4366,4476,4580,4653,4719,4774,4839,4904,4953,5036,5114,5152,5197,5245,5307,5364,5419,5478,5545,5603,5665,5713,5758,5806,5857,5923", + "startOffsets": "215,384,457,523,596,646,686,734,782,827,884,938,988,1050,1118,1195,1254,1319,1382,1437,1497,1560,1614,1674,1727,1789,1874,1955,2005,2064,2107,2160,2203,2254,2304,2364,2417,2468,2514,2562,2610,2656,2703,2753,2798,2857,2909,2961,3004,3051,3107,3162,3217,3261,3303,3344,3394,3453,3504,3553,3602,3649,3696,3743,3788,3839,3892,3967,4026,4083,4157,4221,4290,4368,4478,4582,4655,4721,4776,4841,4906,4955,5038,5116,5154,5199,5247,5309,5366,5421,5480,5547,5605,5667,5715,5760,5808,5859,5925", "endLines": "8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106", - "endColumns": "14,71,65,72,49,39,47,47,44,56,53,49,61,67,76,58,65,62,54,59,62,53,59,52,61,83,79,49,58,42,52,42,50,49,59,52,50,45,47,47,45,46,49,44,58,51,51,42,46,55,54,54,43,41,40,49,58,50,48,48,46,46,46,44,50,52,74,58,56,73,63,68,77,109,103,72,65,54,64,64,48,82,77,37,44,47,61,56,54,58,66,57,61,47,44,47,50,65,65", - "endOffsets": "379,451,517,590,640,680,728,776,821,878,932,982,1044,1112,1189,1248,1314,1377,1432,1492,1555,1609,1669,1722,1784,1868,1948,1998,2057,2100,2153,2196,2247,2297,2357,2410,2461,2507,2555,2603,2649,2696,2746,2791,2850,2902,2954,2997,3044,3100,3155,3210,3254,3296,3337,3387,3446,3497,3546,3595,3642,3689,3736,3781,3832,3885,3960,4019,4076,4150,4214,4283,4361,4471,4575,4648,4714,4769,4834,4899,4948,5031,5109,5147,5192,5240,5302,5359,5414,5473,5540,5598,5660,5708,5753,5801,5852,5918,5984" + "endColumns": "14,72,65,72,49,39,47,47,44,56,53,49,61,67,76,58,64,62,54,59,62,53,59,52,61,84,80,49,58,42,52,42,50,49,59,52,50,45,47,47,45,46,49,44,58,51,51,42,46,55,54,54,43,41,40,49,58,50,48,48,46,46,46,44,50,52,74,58,56,73,63,68,77,109,103,72,65,54,64,64,48,82,77,37,44,47,61,56,54,58,66,57,61,47,44,47,50,65,65", + "endOffsets": "379,452,518,591,641,681,729,777,822,879,933,983,1045,1113,1190,1249,1314,1377,1432,1492,1555,1609,1669,1722,1784,1869,1950,2000,2059,2102,2155,2198,2249,2299,2359,2412,2463,2509,2557,2605,2651,2698,2748,2793,2852,2904,2956,2999,3046,3102,3157,3212,3256,3298,3339,3389,3448,3499,3548,3597,3644,3691,3738,3783,3834,3887,3962,4021,4078,4152,4216,4285,4363,4473,4577,4650,4716,4771,4836,4901,4950,5033,5111,5149,5194,5242,5304,5361,5416,5475,5542,5600,5662,5710,5755,5803,5854,5920,5986" } }, { - "source": "D:\\ZIP\\Notes-master1\\app\\src\\main\\res\\values-zh-rTW\\arrays.xml", + "source": "D:\\gitProject\\CJR_DXW_CYW\\src\\Notes-master1\\app\\src\\main\\res\\values-zh-rCN\\arrays.xml", "from": { "startLines": "18", "startColumns": "4", diff --git a/src/Notes-master1/app/build/intermediates/merged_res_blame_folder/debug/out/multi-v2/values-zh-rCN.json b/src/Notes-master1/app/build/intermediates/merged_res_blame_folder/debug/out/multi-v2/values-zh-rCN.json index e791c2e..e164377 100644 --- a/src/Notes-master1/app/build/intermediates/merged_res_blame_folder/debug/out/multi-v2/values-zh-rCN.json +++ b/src/Notes-master1/app/build/intermediates/merged_res_blame_folder/debug/out/multi-v2/values-zh-rCN.json @@ -4,26 +4,7 @@ "outputFile": "net.micode.notes.app-mergeDebugResources-3:/values-zh-rCN/values-zh-rCN.xml", "map": [ { - "source": "D:\\ZIP\\Notes-master1\\app\\src\\main\\res\\values-zh-rCN\\arrays.xml", - "from": { - "startLines": "18", - "startColumns": "4", - "startOffsets": "712", - "endLines": "21", - "endColumns": "19", - "endOffsets": "817" - }, - "to": { - "startLines": "2", - "startColumns": "4", - "startOffsets": "105", - "endLines": "5", - "endColumns": "19", - "endOffsets": "210" - } - }, - { - "source": "D:\\ZIP\\Notes-master1\\app\\src\\main\\res\\values-zh-rCN\\strings.xml", + "source": "D:\\gitProject\\CJR_DXW_CYW\\src\\Notes-master1\\app\\src\\main\\res\\values-zh-rCN\\strings.xml", "from": { "startLines": "121,71,70,69,68,19,20,21,112,113,120,119,26,77,78,76,75,74,90,89,88,80,60,29,30,81,72,114,67,63,38,44,49,39,59,58,57,53,52,50,51,54,55,45,66,56,64,43,48,47,46,62,42,61,40,41,65,28,34,36,33,35,32,31,25,24,97,96,99,111,104,103,105,106,108,107,98,102,100,101,95,109,110,118,116,115,117,27,79,87,92,91,93,86,85,84,83,22,23", "startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4", @@ -40,6 +21,25 @@ "endColumns": "14,72,65,72,49,39,47,47,44,56,53,49,61,67,76,58,64,62,54,59,62,53,59,52,61,84,80,49,58,42,52,42,50,49,59,52,50,45,47,47,45,46,49,44,58,51,51,42,46,55,54,54,43,41,40,49,58,50,48,48,46,46,46,44,50,52,74,58,56,73,63,68,77,109,103,72,65,54,64,64,48,82,77,37,44,47,61,56,54,58,66,57,61,47,44,47,50,65,65", "endOffsets": "379,452,518,591,641,681,729,777,822,879,933,983,1045,1113,1190,1249,1314,1377,1432,1492,1555,1609,1669,1722,1784,1869,1950,2000,2059,2102,2155,2198,2249,2299,2359,2412,2463,2509,2557,2605,2651,2698,2748,2793,2852,2904,2956,2999,3046,3102,3157,3212,3256,3298,3339,3389,3448,3499,3548,3597,3644,3691,3738,3783,3834,3887,3962,4021,4078,4152,4216,4285,4363,4473,4577,4650,4716,4771,4836,4901,4950,5033,5111,5149,5194,5242,5304,5361,5416,5475,5542,5600,5662,5710,5755,5803,5854,5920,5986" } + }, + { + "source": "D:\\gitProject\\CJR_DXW_CYW\\src\\Notes-master1\\app\\src\\main\\res\\values-zh-rCN\\arrays.xml", + "from": { + "startLines": "18", + "startColumns": "4", + "startOffsets": "712", + "endLines": "21", + "endColumns": "19", + "endOffsets": "817" + }, + "to": { + "startLines": "2", + "startColumns": "4", + "startOffsets": "105", + "endLines": "5", + "endColumns": "19", + "endOffsets": "210" + } } ] } diff --git a/src/Notes-master1/app/build/intermediates/merged_res_blame_folder/debug/out/multi-v2/values-zh-rTW.json b/src/Notes-master1/app/build/intermediates/merged_res_blame_folder/debug/out/multi-v2/values-zh-rTW.json index 55e6a32..8047a2d 100644 --- a/src/Notes-master1/app/build/intermediates/merged_res_blame_folder/debug/out/multi-v2/values-zh-rTW.json +++ b/src/Notes-master1/app/build/intermediates/merged_res_blame_folder/debug/out/multi-v2/values-zh-rTW.json @@ -4,7 +4,7 @@ "outputFile": "net.micode.notes.app-mergeDebugResources-3:/values-zh-rTW/values-zh-rTW.xml", "map": [ { - "source": "D:\\ZIP\\Notes-master1\\app\\src\\main\\res\\values-zh-rTW\\strings.xml", + "source": "D:\\gitProject\\CJR_DXW_CYW\\src\\Notes-master1\\app\\src\\main\\res\\values-zh-rTW\\strings.xml", "from": { "startLines": "122,72,71,70,69,19,20,21,112,113,121,120,26,76,77,75,74,73,89,88,87,79,61,29,30,80,37,114,68,64,39,45,50,40,60,59,58,54,53,51,52,55,56,46,67,57,65,44,49,48,47,63,43,62,41,42,66,28,34,36,33,35,32,31,25,24,96,95,98,110,103,102,104,105,107,106,97,101,99,100,94,108,109,119,117,116,118,27,78,86,91,90,92,85,84,83,82,22,23", "startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4", @@ -23,7 +23,7 @@ } }, { - "source": "D:\\ZIP\\Notes-master1\\app\\src\\main\\res\\values-zh-rTW\\arrays.xml", + "source": "D:\\gitProject\\CJR_DXW_CYW\\src\\Notes-master1\\app\\src\\main\\res\\values-zh-rTW\\arrays.xml", "from": { "startLines": "18", "startColumns": "4", diff --git a/src/Notes-master1/app/build/intermediates/merged_res_blame_folder/debug/out/multi-v2/values.json b/src/Notes-master1/app/build/intermediates/merged_res_blame_folder/debug/out/multi-v2/values.json index 41b0ba2..b22486f 100644 --- a/src/Notes-master1/app/build/intermediates/merged_res_blame_folder/debug/out/multi-v2/values.json +++ b/src/Notes-master1/app/build/intermediates/merged_res_blame_folder/debug/out/multi-v2/values.json @@ -4,14 +4,42 @@ "outputFile": "net.micode.notes.app-mergeDebugResources-3:/values/values.xml", "map": [ { - "source": "D:\\ZIP\\Notes-master1\\app\\src\\main\\res\\values\\arrays.xml", + "source": "D:\\gitProject\\CJR_DXW_CYW\\src\\Notes-master1\\app\\src\\main\\res\\values\\colors.xml", "from": { - "startLines": "19,26", - "startColumns": "4,4", - "startOffsets": "739,1047", - "endLines": "24,29", - "endColumns": "19,19", - "endOffsets": "1041,1162" + "startLines": "-1", + "startColumns": "-1", + "startOffsets": "-1" + }, + "to": { + "startLines": "12", + "startColumns": "4", + "startOffsets": "420", + "endColumns": "56", + "endOffsets": "472" + } + }, + { + "source": "D:\\gitProject\\CJR_DXW_CYW\\src\\Notes-master1\\app\\src\\main\\res\\values\\strings.xml", + "from": { + "startLines": "-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1", + "startColumns": "-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1", + "startOffsets": "-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1" + }, + "to": { + "startLines": "18,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124", + "startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4", + "startOffsets": "739,1092,1188,1271,1367,1436,1479,1531,1583,1632,1695,1753,1804,1888,1982,2090,2161,2245,2328,2394,2477,2579,2640,2702,2753,2831,2884,2944,3049,3108,3210,3265,3336,3385,3443,3490,3549,3606,3677,3738,3795,3845,3897,3950,4000,4050,4110,4163,4229,4291,4354,4401,4456,4544,4602,4664,4714,4759,4802,4862,4929,4984,5039,5092,5139,5192,5248,5296,5351,5404,5488,5555,5619,5715,5789,5870,5959,6122,6266,6345,6420,6502,6561,6641,6721,6776,6898,7001,7042,7095,7152,7226,7291,7359,7445,7525,7594,7688,7747,7802,7864,7924,8034", + "endLines": "22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124", + "endColumns": "14,95,82,95,68,42,51,51,48,62,57,50,83,93,107,70,83,82,65,82,101,60,61,50,77,52,59,104,58,101,54,70,48,57,46,58,56,70,60,56,49,51,52,49,49,59,52,65,61,62,46,54,87,57,61,49,44,42,59,66,54,54,52,46,52,55,47,54,52,83,66,63,95,73,80,88,162,143,78,74,81,58,79,79,54,121,102,40,52,56,73,64,67,85,79,68,93,58,54,61,59,109,89", + "endOffsets": "1087,1183,1266,1362,1431,1474,1526,1578,1627,1690,1748,1799,1883,1977,2085,2156,2240,2323,2389,2472,2574,2635,2697,2748,2826,2879,2939,3044,3103,3205,3260,3331,3380,3438,3485,3544,3601,3672,3733,3790,3840,3892,3945,3995,4045,4105,4158,4224,4286,4349,4396,4451,4539,4597,4659,4709,4754,4797,4857,4924,4979,5034,5087,5134,5187,5243,5291,5346,5399,5483,5550,5614,5710,5784,5865,5954,6117,6261,6340,6415,6497,6556,6636,6716,6771,6893,6996,7037,7090,7147,7221,7286,7354,7440,7520,7589,7683,7742,7797,7859,7919,8029,8119" + } + }, + { + "source": "D:\\gitProject\\CJR_DXW_CYW\\src\\Notes-master1\\app\\src\\main\\res\\values\\arrays.xml", + "from": { + "startLines": "-1,-1", + "startColumns": "-1,-1", + "startOffsets": "-1,-1" }, "to": { "startLines": "2,8", @@ -23,32 +51,30 @@ } }, { - "source": "D:\\ZIP\\Notes-master1\\app\\src\\main\\res\\values\\styles.xml", + "source": "D:\\gitProject\\CJR_DXW_CYW\\src\\Notes-master1\\app\\src\\main\\res\\values\\styles.xml", "from": { - "startLines": "50,55,64,60,22,26,30,35,40,18,45", - "startColumns": "4,4,4,4,4,4,4,4,4,4,4", - "startOffsets": "2062,2267,2640,2479,895,1078,1263,1449,1653,712,1860", - "endLines": "53,58,67,62,25,29,33,38,43,21,48", - "endColumns": "12,12,12,12,12,12,12,12,12,12,12", - "endOffsets": "2261,2473,2843,2634,1073,1258,1443,1647,1854,890,2056" + "startLines": "-1,-1,64,-1,-1,-1,-1,-1,-1,-1,-1", + "startColumns": "-1,-1,4,-1,-1,-1,-1,-1,-1,-1,-1", + "startOffsets": "-1,-1,2640,-1,-1,-1,-1,-1,-1,-1,-1", + "endLines": "-1,-1,67,-1,-1,-1,-1,-1,-1,-1,-1", + "endColumns": "-1,-1,12,-1,-1,-1,-1,-1,-1,-1,-1", + "endOffsets": "-1,-1,2853,-1,-1,-1,-1,-1,-1,-1,-1" }, "to": { "startLines": "125,129,133,137,140,144,148,152,156,160,164", "startColumns": "4,4,4,4,4,4,4,4,4,4,4", - "startOffsets": "8124,8328,8539,8746,8906,9089,9274,9459,9662,9868,10051", + "startOffsets": "8124,8328,8539,8704,8864,9047,9232,9417,9620,9826,10009", "endLines": "128,132,136,139,143,147,151,155,159,163,167", "endColumns": "12,12,12,12,12,12,12,12,12,12,12", - "endOffsets": "8323,8534,8741,8901,9084,9269,9454,9657,9863,10046,10247" + "endOffsets": "8323,8534,8699,8859,9042,9227,9412,9615,9821,10004,10205" } }, { - "source": "D:\\ZIP\\Notes-master1\\app\\src\\main\\res\\values\\dimens.xml", + "source": "D:\\gitProject\\CJR_DXW_CYW\\src\\Notes-master1\\app\\src\\main\\res\\values\\dimens.xml", "from": { - "startLines": "19,20,21,22,18", - "startColumns": "4,4,4,4,4", - "startOffsets": "764,816,869,922,712", - "endColumns": "51,52,52,51,51", - "endOffsets": "811,864,917,969,759" + "startLines": "-1,-1,-1,-1,-1", + "startColumns": "-1,-1,-1,-1,-1", + "startOffsets": "-1,-1,-1,-1,-1" }, "to": { "startLines": "13,14,15,16,17", @@ -57,9 +83,14 @@ "endColumns": "51,52,52,51,51", "endOffsets": "524,577,630,682,734" } - }, + } + ] + }, + { + "outputFile": "C:\\Users\\86147\\.gradle\\daemon\\7.5\\net.micode.notes.app-mergeDebugResources-3:\\values\\values.xml", + "map": [ { - "source": "D:\\ZIP\\Notes-master1\\app\\src\\main\\res\\values\\colors.xml", + "source": "D:\\gitProject\\CJR_DXW_CYW\\src\\Notes-master1\\app\\src\\main\\res\\values\\colors.xml", "from": { "startLines": "18", "startColumns": "4", @@ -76,7 +107,7 @@ } }, { - "source": "D:\\ZIP\\Notes-master1\\app\\src\\main\\res\\values\\strings.xml", + "source": "D:\\gitProject\\CJR_DXW_CYW\\src\\Notes-master1\\app\\src\\main\\res\\values\\strings.xml", "from": { "startLines": "128,72,75,74,73,19,20,21,118,119,127,126,26,81,82,80,79,78,94,93,92,84,39,38,64,29,30,85,41,76,120,71,67,42,48,53,43,63,62,61,57,56,54,55,58,59,49,70,60,68,47,52,51,50,66,46,65,44,45,69,28,34,36,33,35,32,31,25,24,101,100,104,116,109,108,110,111,113,112,102,103,107,105,106,99,114,115,125,123,122,124,27,83,91,96,95,97,90,89,88,87,22,23", "startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4", @@ -93,6 +124,61 @@ "endColumns": "14,95,82,95,68,42,51,51,48,62,57,50,83,93,107,70,83,82,65,82,101,60,61,50,77,52,59,104,58,101,54,70,48,57,46,58,56,70,60,56,49,51,52,49,49,59,52,65,61,62,46,54,87,57,61,49,44,42,59,66,54,54,52,46,52,55,47,54,52,83,66,63,95,73,80,88,162,143,78,74,81,58,79,79,54,121,102,40,52,56,73,64,67,85,79,68,93,58,54,61,59,109,89", "endOffsets": "1087,1183,1266,1362,1431,1474,1526,1578,1627,1690,1748,1799,1883,1977,2085,2156,2240,2323,2389,2472,2574,2635,2697,2748,2826,2879,2939,3044,3103,3205,3260,3331,3380,3438,3485,3544,3601,3672,3733,3790,3840,3892,3945,3995,4045,4105,4158,4224,4286,4349,4396,4451,4539,4597,4659,4709,4754,4797,4857,4924,4979,5034,5087,5134,5187,5243,5291,5346,5399,5483,5550,5614,5710,5784,5865,5954,6117,6261,6340,6415,6497,6556,6636,6716,6771,6893,6996,7037,7090,7147,7221,7286,7354,7440,7520,7589,7683,7742,7797,7859,7919,8029,8119" } + }, + { + "source": "D:\\gitProject\\CJR_DXW_CYW\\src\\Notes-master1\\app\\src\\main\\res\\values\\arrays.xml", + "from": { + "startLines": "19,26", + "startColumns": "4,4", + "startOffsets": "739,1047", + "endLines": "24,29", + "endColumns": "19,19", + "endOffsets": "1041,1162" + }, + "to": { + "startLines": "2,8", + "startColumns": "4,4", + "startOffsets": "105,300", + "endLines": "7,11", + "endColumns": "19,19", + "endOffsets": "295,415" + } + }, + { + "source": "D:\\gitProject\\CJR_DXW_CYW\\src\\Notes-master1\\app\\src\\main\\res\\values\\styles.xml", + "from": { + "startLines": "50,55,64,60,22,26,30,35,40,18,45", + "startColumns": "4,4,4,4,4,4,4,4,4,4,4", + "startOffsets": "2062,2267,2640,2479,895,1078,1263,1449,1653,712,1860", + "endLines": "53,58,67,62,25,29,33,38,43,21,48", + "endColumns": "12,12,12,12,12,12,12,12,12,12,12", + "endOffsets": "2261,2473,2853,2634,1073,1258,1443,1647,1854,890,2056" + }, + "to": { + "startLines": "125,129,133,137,140,144,148,152,156,160,164", + "startColumns": "4,4,4,4,4,4,4,4,4,4,4", + "startOffsets": "8124,8328,8539,8704,8864,9047,9232,9417,9620,9826,10009", + "endLines": "128,132,136,139,143,147,151,155,159,163,167", + "endColumns": "12,12,12,12,12,12,12,12,12,12,12", + "endOffsets": "8323,8534,8699,8859,9042,9227,9412,9615,9821,10004,10205" + } + }, + { + "source": "D:\\gitProject\\CJR_DXW_CYW\\src\\Notes-master1\\app\\src\\main\\res\\values\\dimens.xml", + "from": { + "startLines": "19,20,21,22,18", + "startColumns": "4,4,4,4,4", + "startOffsets": "764,816,869,922,712", + "endColumns": "51,52,52,51,51", + "endOffsets": "811,864,917,969,759" + }, + "to": { + "startLines": "13,14,15,16,17", + "startColumns": "4,4,4,4,4", + "startOffsets": "477,529,582,635,687", + "endColumns": "51,52,52,51,51", + "endOffsets": "524,577,630,682,734" + } } ] } diff --git a/src/Notes-master1/app/build/intermediates/packaged_manifests/debug/AndroidManifest.xml b/src/Notes-master1/app/build/intermediates/packaged_manifests/debug/AndroidManifest.xml index f237bf5..bb3eb72 100644 --- a/src/Notes-master1/app/build/intermediates/packaged_manifests/debug/AndroidManifest.xml +++ b/src/Notes-master1/app/build/intermediates/packaged_manifests/debug/AndroidManifest.xml @@ -44,8 +44,9 @@ android:label="@string/app_name" android:launchMode="singleTop" android:theme="@style/NoteTheme" - android:uiOptions="splitActionBarWhenNarrow" android:windowSoftInputMode="adjustPan" > + + diff --git a/src/Notes-master1/app/build/intermediates/processed_res/debug/out/resources-debug.ap_ b/src/Notes-master1/app/build/intermediates/processed_res/debug/out/resources-debug.ap_ index c31ed29d28be021789f4280f509a8c6c2e9370fa..76f607d987ad3ebb179560868ef23b139bdc254a 100644 GIT binary patch delta 3944 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 Z4giF+$^k$E2r@D?Ghs1eHM0@~CIN9?7bpM# diff --git a/src/Notes-master1/app/build/intermediates/project_dex_archive/debug/out/net/micode/notes/data/Notes$DataConstants.dex b/src/Notes-master1/app/build/intermediates/project_dex_archive/debug/out/net/micode/notes/data/Notes$DataConstants.dex index eceecda133cf4e7ad5e3b3d0987cf872dd798126..48a22244b35d510187103f2b921f8e9b6262df03 100644 GIT binary patch delta 62 zcmV-E0Kxyz2hax~WMy~?Ff%m(ueJtVZT+PcqAc&mXtBR6sghj!xCW_Yu^<=$0Wz~W U0fqqxVP#`uGcq=2v&RAn0SQwVEdT%j delta 62 zcmV-E0Kxyz2hax~WMy~?Ff%m(z_ti|t-8`auri&V5o@4^k<$e9qmaPsu^<=$0Wq^V U0fqqxGB`P6Wi>Kov&RAn0Th-OaR2}S diff --git a/src/Notes-master1/app/build/intermediates/project_dex_archive/debug/out/net/micode/notes/data/Notes$TextNote.dex b/src/Notes-master1/app/build/intermediates/project_dex_archive/debug/out/net/micode/notes/data/Notes$TextNote.dex index 2f5ecfbd58079bef722d12a008cda21e70beb824..e257f1a9f19285cd75e8ab6f1a815c65b93c98b4 100644 GIT binary patch delta 67 zcmV-J0KEUW3b+a&WMy~?Ff%m(#P8GWjnpu;5Mr$|X{d5TqL;eWpm0Vyu^^}c27&?r Z4gmGD&H*|C2sSrmFgY+`VY3hfC;^|J7?}V7 delta 67 zcmV-J0KEUW3b+a&WMy~?Ff%m(gz%=3rva(OosF#iiveM;1O&2ZWXR#Pu^^}c27v+q Z4gmDC&H*|C2st@nV>UQ4WwQ_jC;^h97?J=0 diff --git a/src/Notes-master1/app/build/intermediates/project_dex_archive/debug/out/net/micode/notes/data/Notes.dex b/src/Notes-master1/app/build/intermediates/project_dex_archive/debug/out/net/micode/notes/data/Notes.dex index e9e44c02be1cd586115701b7abcc5887a824aceb..99b90053679b1d2395b3315861b012e797cd3919 100644 GIT binary patch delta 62 zcmV-E0Kxyn5X2B5WMy~?Ff%m(jjC}aSn0=6DCrJe@uRc;_<_8xcu^@;70Xnm( U0x|>$V_{=tG%zqYv*QL~0Te?Q;Q#;t delta 62 zcmX>ia6~{MCAEUfz}S?bb@@yGf{wX$`*Xi!z0c=l(T+0+t~JsW+^EpO#AvyBC6f^g ShpCaNNm`<1%I3#xiHrcycolE} diff --git a/src/Notes-master1/app/build/intermediates/project_dex_archive/debug/out/net/micode/notes/data/NotesDatabaseHelper.dex b/src/Notes-master1/app/build/intermediates/project_dex_archive/debug/out/net/micode/notes/data/NotesDatabaseHelper.dex index 21ea4c426ca9fbe449f50eecc37e6aceea260c63..f094058dfa72e84def8866f1d20084fa01941c00 100644 GIT binary patch delta 104 zcmaE0|G-`$CAEUfz}S=_dgIGypCb~4ouqz#mM>T-YV^EZqKvut!A6B09GvT!7{mB% zY#6pqe#qe{dlkfsiURWQLRir;QOpea%uAPMGQ8ewNLVV+``Y?f+ivN>0-m=OTx C*CR#% delta 104 zcmaE0|G-`$CAEUfz}S@G{ideLh1C@wmK!uoT+p-Un${Httw{-89vc;QaB!|>VhrQ6 zv0>Oa`5}j+>_reSDhkNI31LOYL@_huGcR45$?$x$J*S!|M`BuvMN(p-<>p+uVnzTu C2qd)t diff --git a/src/Notes-master1/app/build/intermediates/project_dex_archive/debug/out/net/micode/notes/data/NotesProvider.dex b/src/Notes-master1/app/build/intermediates/project_dex_archive/debug/out/net/micode/notes/data/NotesProvider.dex index 7adac341da0f170fe12ec2776dfdf6dfd7c9df17..c67c505b394dfe3682f1c4314a892230f4edd5ce 100644 GIT binary patch delta 112 zcmca%cf(F0CAEUfz}S=_V*3p)%hJ`Jtunrc{6gJD*Ez2C+{wGxZlgk}Amhx*(*zwD z_e{Pn=*ReKvYL>);zlOMDU5s!6PXyhfs`2oUweBd2r%(SGN>`|F-+UsC$x&2BQYg8 O(IPb^d9#C@1S0@$0wYQQ delta 112 zcmca%cf(F0CAEUfz}S>wHtwSXn0vGcX+A ze3g}vm2ubP>s)gzW->DHF|;u<=JGL2WCXIKDk{8n8CEkg`KI$l{bv;BXIR3>=*5?< zE5)!8NpSAw)!Yl%8OU delta 183 zcmdm^xkpnWCAEUfz}S?*WJ}Ov)(!e`cFT^>pVVQ&x3W}t{`u}Q8rDyz6%Byh@g+qkJQ*hu^`w83npo2 edU{)>X)gk1vjYkH1qd}UVliVmGGwy`4>kenq#4ct delta 72 zcmV-O0Js0VAiN+TWMy~?Ff%m(fS{h141FVJfK^eR+T)o=FU%DiP&$Hou^`w83ngi1 edU{)>X)gk2vjYkH1qd=>W-wzjFk-U?4>keHR~YdC diff --git a/src/Notes-master1/app/build/intermediates/project_dex_archive/debug/out/net/micode/notes/tool/BackupUtils$TextExport.dex b/src/Notes-master1/app/build/intermediates/project_dex_archive/debug/out/net/micode/notes/tool/BackupUtils$TextExport.dex index 2b85968fdfedc08f41be6c73e1a10f75621909fe..13bbdf91420238bf566356d93f084e7243335bad 100644 GIT binary patch delta 136 zcmV;30C)eGEtoAJWMy~?Ff%m(BN3Yjx~Nk#RA7aKE?mH5SjxjgZE^s_u^@E|0pOFC z3q}E>lidqAKUo2V0S*9(0Rd+Y09pVJ0u2Ef4gi4x0ZR@%!!1iK0FnU$T6+!w7ZU>k qb_OkLhj>WUO9KLQ7CZ$4YCQm}vs4Vy2naPXWi~J~HaN2`6>0(4P$fVB delta 136 zcmV;30C)eGEtoAJWMy~?Ff%m(cN5!Q_dGnpdDZ{B^9lm=BDK=#&q6#Ru^@E|0p63A z3q}Ek qb_OkLhj>WUO9KLQ7CZ$4YCQm{vs4Vy2nb{_G-hNlFfp?(6>0%7Mks&) diff --git a/src/Notes-master1/app/build/intermediates/project_dex_archive/debug/out/net/micode/notes/tool/BackupUtils.dex b/src/Notes-master1/app/build/intermediates/project_dex_archive/debug/out/net/micode/notes/tool/BackupUtils.dex index 7f9fa34923210e7af8529e9696a2fa6970d8cff0..b2701279f5b852b968565a732d1c2858fd33ac34 100644 GIT binary patch delta 99 zcmaDN@kBx)CAEUfz}S>wnvmD+Z}aXy?N8j-boorsj%C5sFZ*WkxNlVW#wy^&z{lVR z#Olm$?jC#$`zEWg84HI21%iNBk5S9oyV8x7iNSSq4%=!LHq&Gy3xm|nvfS>B01itY AbN~PV delta 99 zcmaDN@kBx)CAEUfz}S>QOtAjc_s1E6lU9FSqtE&MZFCH4S5wCFg&P&Vu?l!H@GwR$GXMVsWsT&%$4q`L7j3&br`vN9vZxhm8u;1QKz z44Zsgz|U6GZFdl6a7ry1L9j6~dW5Hu9{D m45ucu2sttSnCvd3#OS*@OURjQzAfN<$K3dqC1EQ>(u;44=4@$j3JmBtwozf40Au^)?E=b- zp_6Y5__^(5Wa?$C<6{&QW@d=wlw)R0l+n$Uw`Euj5|8Ekgep20B-+e~F5ELYUr>s% zY;u>ND&v#M8w6Dh<}oo&WaQKJ&SYjNWweQ5Wnk!Gf@pnQ5)U#{SC<*6LO9dMMxK?C m;pAi%At%P~lih`s7=1Qp2|06f7^kKr8YL&0Y~Cu{&jw<<&cayZ(gte&{W{R(j~qKf$XL-&{;lk=&?Yz{q%GavHu^|B;x=8 delta 110 zcmcb?d4p3SCAEUfz}S?*vOz^5CAEUfz}S?bJoDAs5P`ZE_oBpP9<05@ur@4jtIW^1GaD67a2VM!x#jX* z`OTohz{j8r#D+|6_Iy#y3_0ve85xjE3d%FfEc%Bjs{vbltF6FY~6xp{Jukx}AiJwYZ$05A$B A{Qv*} delta 148 zcmV;F0BirSB(NkPWMy~?Ff%m(;A*YSX^{59Cy+vxc*Ts^oL!$PYc0J=fY&-%{h6Mx#1qB8L2L%WP2`d6Kvvdiv2MA#>HDzOCH88U-5ds1D C`6#mh diff --git a/src/Notes-master1/app/build/intermediates/source_set_path_map/debug/file-map.txt b/src/Notes-master1/app/build/intermediates/source_set_path_map/debug/file-map.txt index 8d0ae0c..6df606a 100644 --- a/src/Notes-master1/app/build/intermediates/source_set_path_map/debug/file-map.txt +++ b/src/Notes-master1/app/build/intermediates/source_set_path_map/debug/file-map.txt @@ -1,8 +1,8 @@ -net.micode.notes.app-pngs-0 D:\ZIP\Notes-master1\app\build\generated\res\pngs\debug -net.micode.notes.app-resValues-1 D:\ZIP\Notes-master1\app\build\generated\res\resValues\debug -net.micode.notes.app-rs-2 D:\ZIP\Notes-master1\app\build\generated\res\rs\debug -net.micode.notes.app-mergeDebugResources-3 D:\ZIP\Notes-master1\app\build\intermediates\incremental\debug\mergeDebugResources\merged.dir -net.micode.notes.app-mergeDebugResources-4 D:\ZIP\Notes-master1\app\build\intermediates\incremental\debug\mergeDebugResources\stripped.dir -net.micode.notes.app-merged_res-5 D:\ZIP\Notes-master1\app\build\intermediates\merged_res\debug -net.micode.notes.app-debug-6 D:\ZIP\Notes-master1\app\src\debug\res -net.micode.notes.app-main-7 D:\ZIP\Notes-master1\app\src\main\res +net.micode.notes.app-pngs-0 D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\build\generated\res\pngs\debug +net.micode.notes.app-resValues-1 D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\build\generated\res\resValues\debug +net.micode.notes.app-rs-2 D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\build\generated\res\rs\debug +net.micode.notes.app-mergeDebugResources-3 D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\build\intermediates\incremental\debug\mergeDebugResources\merged.dir +net.micode.notes.app-mergeDebugResources-4 D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\build\intermediates\incremental\debug\mergeDebugResources\stripped.dir +net.micode.notes.app-merged_res-5 D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\build\intermediates\merged_res\debug +net.micode.notes.app-debug-6 D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\debug\res +net.micode.notes.app-main-7 D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\res diff --git a/src/Notes-master1/app/build/intermediates/stable_resource_ids_file/debug/stableIds.txt b/src/Notes-master1/app/build/intermediates/stable_resource_ids_file/debug/stableIds.txt index 4461006..b9e1d92 100644 --- a/src/Notes-master1/app/build/intermediates/stable_resource_ids_file/debug/stableIds.txt +++ b/src/Notes-master1/app/build/intermediates/stable_resource_ids_file/debug/stableIds.txt @@ -1,129 +1,134 @@ -net.micode.notes:xml/widget_4x_info = 0x7f0c0003 -net.micode.notes:xml/preferences = 0x7f0c0000 -net.micode.notes:style/TextAppearanceSecondaryItem = 0x7f0b0008 -net.micode.notes:style/TextAppearanceNormal = 0x7f0b0006 -net.micode.notes:style/TextAppearanceLarge = 0x7f0b0004 -net.micode.notes:style/HighlightTextAppearancePrimary = 0x7f0b0000 -net.micode.notes:string/widget_havenot_content = 0x7f0a0064 -net.micode.notes:string/ticker_syncing = 0x7f0a0063 net.micode.notes:string/ticker_success = 0x7f0a0062 -net.micode.notes:style/HighlightTextAppearanceSecondary = 0x7f0b0001 -net.micode.notes:string/ticker_cancel = 0x7f0a0060 +net.micode.notes:string/preferences_menu_remove_account = 0x7f0a0052 +net.micode.notes:string/preferences_account_summary = 0x7f0a0044 +net.micode.notes:string/menu_export_text = 0x7f0a0023 +net.micode.notes:layout/note_list = 0x7f060008 +net.micode.notes:string/file_path = 0x7f0a0016 +net.micode.notes:string/menu_folder_change_name = 0x7f0a0024 +net.micode.notes:string/note_link_other = 0x7f0a003d +net.micode.notes:string/note_alert_expired = 0x7f0a003b +net.micode.notes:id/tv_title_bar = 0x7f050040 +net.micode.notes:string/menu_font_small = 0x7f0a002a +net.micode.notes:string/ticker_syncing = 0x7f0a0063 +net.micode.notes:style/HighlightTextAppearancePrimary = 0x7f0b0000 +net.micode.notes:xml/preferences = 0x7f0c0000 net.micode.notes:string/sync_progress_syncing = 0x7f0a005f -net.micode.notes:string/sync_progress_init_list = 0x7f0a005d -net.micode.notes:string/search_label = 0x7f0a0058 -net.micode.notes:string/preferences_toast_success_set_accout = 0x7f0a0055 +net.micode.notes:menu/sub_folder = 0x7f070006 net.micode.notes:string/preferences_toast_cannot_change_account = 0x7f0a0054 -net.micode.notes:string/preferences_title = 0x7f0a0053 -net.micode.notes:string/preferences_menu_remove_account = 0x7f0a0052 +net.micode.notes:string/alert_message_delete_notes = 0x7f0a0002 +net.micode.notes:string/search_label = 0x7f0a0058 +net.micode.notes:id/selection_menu = 0x7f050038 net.micode.notes:style/NoteActionBarStyle = 0x7f0b0002 net.micode.notes:string/preferences_menu_change_account = 0x7f0a0051 +net.micode.notes:string/menu_sync = 0x7f0a0038 +net.micode.notes:string/sync_progress_init_list = 0x7f0a005d net.micode.notes:string/preferences_menu_cancel = 0x7f0a0050 +net.micode.notes:string/menu_normal_mode = 0x7f0a002f +net.micode.notes:string/menu_sync_cancel = 0x7f0a0039 +net.micode.notes:drawable/title_alert = 0x7f040036 +net.micode.notes:id/note_title = 0x7f050034 +net.micode.notes:string/menu_search = 0x7f0a0031 net.micode.notes:string/preferences_last_sync_time = 0x7f0a004e +net.micode.notes:string/datetime_dialog_cancel = 0x7f0a0009 net.micode.notes:string/preferences_dialog_select_account_title = 0x7f0a004d +net.micode.notes:id/menu_search = 0x7f050028 +net.micode.notes:xml/widget_4x_info = 0x7f0c0003 net.micode.notes:string/preferences_dialog_change_account_warn_msg = 0x7f0a004b +net.micode.notes:style/TextAppearanceNormal = 0x7f0b0006 +net.micode.notes:string/preferences_title = 0x7f0a0053 +net.micode.notes:string/datetime_dialog_ok = 0x7f0a000a +net.micode.notes:id/notes_list = 0x7f050035 +net.micode.notes:layout/note_edit = 0x7f060005 +net.micode.notes:string/widget_havenot_content = 0x7f0a0064 net.micode.notes:string/preferences_button_sync_immediately = 0x7f0a0049 net.micode.notes:string/preferences_button_sync_cancel = 0x7f0a0048 -net.micode.notes:string/preferences_account_summary = 0x7f0a0044 -net.micode.notes:string/success_sdcard_export = 0x7f0a005b -net.micode.notes:string/notelist_string_info = 0x7f0a0043 +net.micode.notes:style/TextAppearanceSecondaryItem = 0x7f0b0008 net.micode.notes:string/notelist_menu_new = 0x7f0a0042 +net.micode.notes:string/menu_share = 0x7f0a0037 +net.micode.notes:style/HighlightTextAppearanceSecondary = 0x7f0b0001 +net.micode.notes:string/ticker_cancel = 0x7f0a0060 net.micode.notes:string/notealert_ok = 0x7f0a0041 -net.micode.notes:string/notealert_enter = 0x7f0a0040 net.micode.notes:string/note_link_web = 0x7f0a003f -net.micode.notes:string/note_link_tel = 0x7f0a003e -net.micode.notes:string/note_link_other = 0x7f0a003d -net.micode.notes:string/note_link_email = 0x7f0a003c -net.micode.notes:string/note_alert_expired = 0x7f0a003b -net.micode.notes:string/menu_sync_cancel = 0x7f0a0039 -net.micode.notes:string/menu_sync = 0x7f0a0038 -net.micode.notes:string/menu_share = 0x7f0a0037 -net.micode.notes:string/menu_select_title = 0x7f0a0034 -net.micode.notes:style/TextAppearanceMedium = 0x7f0b0005 -net.micode.notes:string/menu_select_none = 0x7f0a0033 net.micode.notes:string/menu_title_select_folder = 0x7f0a003a net.micode.notes:string/menu_select_all = 0x7f0a0032 -net.micode.notes:string/menu_search = 0x7f0a0031 -net.micode.notes:string/menu_remove_remind = 0x7f0a0030 -net.micode.notes:string/menu_normal_mode = 0x7f0a002f +net.micode.notes:string/note_link_email = 0x7f0a003c net.micode.notes:string/menu_move_parent_folder = 0x7f0a002e +net.micode.notes:string/notelist_string_info = 0x7f0a0043 +net.micode.notes:string/success_sdcard_export = 0x7f0a005b +net.micode.notes:string/call_record_folder_name = 0x7f0a0008 +net.micode.notes:drawable/list_green_up = 0x7f040020 net.micode.notes:string/menu_move = 0x7f0a002d +net.micode.notes:menu/note_edit = 0x7f070002 net.micode.notes:string/menu_list_mode = 0x7f0a002c +net.micode.notes:id/iv_bg_blue_select = 0x7f05000f +net.micode.notes:string/error_note_empty_for_clock = 0x7f0a000c net.micode.notes:string/menu_font_super = 0x7f0a002b -net.micode.notes:string/menu_font_small = 0x7f0a002a -net.micode.notes:string/menu_folder_change_name = 0x7f0a0024 -net.micode.notes:string/menu_export_text = 0x7f0a0023 net.micode.notes:string/menu_deselect_all = 0x7f0a0022 net.micode.notes:string/menu_create_folder = 0x7f0a0020 -net.micode.notes:style/TextAppearancePrimaryItem = 0x7f0b0007 -net.micode.notes:string/folder_exist = 0x7f0a0017 +net.micode.notes:id/menu_share = 0x7f05002b +net.micode.notes:string/info_note_enter_desktop = 0x7f0a001e +net.micode.notes:style/TextAppearanceMedium = 0x7f0b0005 +net.micode.notes:string/menu_select_none = 0x7f0a0033 net.micode.notes:string/hint_foler_name = 0x7f0a001d +net.micode.notes:string/folder_exist = 0x7f0a0017 +net.micode.notes:style/TextAppearancePrimaryItem = 0x7f0b0007 +net.micode.notes:string/preferences_toast_success_set_accout = 0x7f0a0055 +net.micode.notes:string/widget_under_visit_mode = 0x7f0a0065 +net.micode.notes:id/menu_send_to_desktop = 0x7f050029 net.micode.notes:string/format_date_ymd = 0x7f0a0018 -net.micode.notes:string/file_path = 0x7f0a0016 net.micode.notes:string/set_remind_time_message = 0x7f0a005a net.micode.notes:string/error_sync_network = 0x7f0a0013 net.micode.notes:string/error_sdcard_unmounted = 0x7f0a0010 -net.micode.notes:string/datetime_dialog_ok = 0x7f0a000a -net.micode.notes:string/datetime_dialog_cancel = 0x7f0a0009 -net.micode.notes:drawable/list_green_up = 0x7f040020 -net.micode.notes:string/call_record_folder_name = 0x7f0a0008 net.micode.notes:drawable/new_note_normal = 0x7f040030 net.micode.notes:string/button_delete = 0x7f0a0007 net.micode.notes:string/app_widget2x2 = 0x7f0a0005 -net.micode.notes:string/menu_font_normal = 0x7f0a0028 -net.micode.notes:string/format_exported_file_location = 0x7f0a001a +net.micode.notes:string/menu_select_title = 0x7f0a0034 net.micode.notes:raw/introduction = 0x7f090000 +net.micode.notes:string/format_exported_file_location = 0x7f0a001a +net.micode.notes:string/menu_font_normal = 0x7f0a0028 +net.micode.notes:string/alert_message_delete_folder = 0x7f0a0000 +net.micode.notes:layout/datetime_picker = 0x7f060002 +net.micode.notes:xml/widget_2x_info = 0x7f0c0002 +net.micode.notes:string/notealert_enter = 0x7f0a0040 +net.micode.notes:id/sv_note_edit = 0x7f050039 +net.micode.notes:drawable/new_note = 0x7f04002f +net.micode.notes:string/menu_remove_remind = 0x7f0a0030 net.micode.notes:string/delete_remind_time_message = 0x7f0a000b -net.micode.notes:dimen/text_font_size_super = 0x7f030004 net.micode.notes:drawable/selected = 0x7f040035 net.micode.notes:plurals/search_results_title = 0x7f080000 -net.micode.notes:menu/sub_folder = 0x7f070006 -net.micode.notes:menu/note_edit = 0x7f070002 -net.micode.notes:style/TextAppearanceSuper = 0x7f0b0009 -net.micode.notes:color/secondary_text_dark = 0x7f020001 -net.micode.notes:id/move = 0x7f05002e -net.micode.notes:id/iv_bg_yellow_select = 0x7f050017 -net.micode.notes:menu/call_note_edit = 0x7f070000 -net.micode.notes:drawable/new_note_pressed = 0x7f040031 +net.micode.notes:dimen/text_font_size_super = 0x7f030004 +net.micode.notes:layout/widget_4x = 0x7f06000d +net.micode.notes:id/et_foler_name = 0x7f05000a +net.micode.notes:drawable/edit_green = 0x7f040007 +net.micode.notes:style/TextAppearanceLarge = 0x7f0b0004 net.micode.notes:id/iv_bg_blue = 0x7f05000e net.micode.notes:layout/settings_header = 0x7f06000b -net.micode.notes:layout/note_list = 0x7f060008 +net.micode.notes:drawable/new_note_pressed = 0x7f040031 +net.micode.notes:id/iv_bg_yellow_select = 0x7f050017 +net.micode.notes:id/move = 0x7f05002e +net.micode.notes:menu/call_note_edit = 0x7f070000 +net.micode.notes:color/secondary_text_dark = 0x7f020001 +net.micode.notes:style/TextAppearanceSuper = 0x7f0b0009 net.micode.notes:drawable/list_white_single = 0x7f040027 net.micode.notes:layout/note_item = 0x7f060007 -net.micode.notes:xml/widget_2x_info = 0x7f0c0002 -net.micode.notes:string/alert_message_delete_folder = 0x7f0a0000 -net.micode.notes:layout/datetime_picker = 0x7f060002 +net.micode.notes:string/note_link_tel = 0x7f0a003e +net.micode.notes:id/widget_text = 0x7f050042 net.micode.notes:id/btn_new_note = 0x7f050004 net.micode.notes:layout/note_list_footer = 0x7f06000a -net.micode.notes:id/widget_text = 0x7f050042 -net.micode.notes:id/tv_title_bar = 0x7f050040 net.micode.notes:drawable/widget_2x_blue = 0x7f040038 net.micode.notes:id/tv_time = 0x7f05003e net.micode.notes:id/tv_name = 0x7f05003d -net.micode.notes:drawable/new_note = 0x7f04002f -net.micode.notes:id/sv_note_edit = 0x7f050039 -net.micode.notes:id/selection_menu = 0x7f050038 net.micode.notes:string/error_sdcard_export = 0x7f0a000f net.micode.notes:id/preference_sync_button = 0x7f050037 -net.micode.notes:layout/note_edit = 0x7f060005 -net.micode.notes:id/notes_list = 0x7f050035 -net.micode.notes:string/alert_message_delete_notes = 0x7f0a0002 -net.micode.notes:drawable/title_alert = 0x7f040036 -net.micode.notes:id/note_title = 0x7f050034 -net.micode.notes:string/preferences_last_sync_time_format = 0x7f0a004f net.micode.notes:id/note_edit_view = 0x7f050032 +net.micode.notes:string/preferences_last_sync_time_format = 0x7f0a004f net.micode.notes:id/navigation_bar = 0x7f05002f net.micode.notes:string/app_widget4x4 = 0x7f0a0006 -net.micode.notes:drawable/font_normal = 0x7f040011 net.micode.notes:id/minute = 0x7f05002d +net.micode.notes:drawable/font_normal = 0x7f040011 net.micode.notes:drawable/font_super = 0x7f040014 net.micode.notes:id/menu_sync = 0x7f05002c -net.micode.notes:string/info_note_enter_desktop = 0x7f0a001e -net.micode.notes:id/menu_share = 0x7f05002b net.micode.notes:id/menu_setting = 0x7f05002a -net.micode.notes:string/widget_under_visit_mode = 0x7f0a0065 -net.micode.notes:id/menu_send_to_desktop = 0x7f050029 -net.micode.notes:id/menu_search = 0x7f050028 net.micode.notes:drawable/list_green_down = 0x7f04001d net.micode.notes:id/menu_new_note = 0x7f050027 net.micode.notes:string/error_note_not_exist = 0x7f0a000e @@ -133,14 +138,14 @@ net.micode.notes:id/iv_medium_select = 0x7f050019 net.micode.notes:id/menu_export_text = 0x7f050023 net.micode.notes:string/menu_folder_view = 0x7f0a0026 net.micode.notes:id/menu_delete = 0x7f050021 -net.micode.notes:string/ticker_fail = 0x7f0a0061 net.micode.notes:string/file_name_txt_format = 0x7f0a0015 -net.micode.notes:drawable/edit_blue = 0x7f040006 +net.micode.notes:string/ticker_fail = 0x7f0a0061 net.micode.notes:id/prefenerece_sync_status_textview = 0x7f050036 +net.micode.notes:drawable/edit_blue = 0x7f040006 +net.micode.notes:id/menu_alert = 0x7f050020 net.micode.notes:string/menu_font_size = 0x7f0a0029 -net.micode.notes:string/menu_alert = 0x7f0a001f net.micode.notes:drawable/edit_title_yellow = 0x7f04000d -net.micode.notes:id/menu_alert = 0x7f050020 +net.micode.notes:string/menu_alert = 0x7f0a001f net.micode.notes:string/success_sync_account = 0x7f0a005c net.micode.notes:id/ll_font_super = 0x7f05001f net.micode.notes:id/ll_font_small = 0x7f05001e @@ -148,49 +153,44 @@ net.micode.notes:menu/call_record_folder = 0x7f070001 net.micode.notes:id/ll_font_normal = 0x7f05001d net.micode.notes:id/ll_font_large = 0x7f05001c net.micode.notes:id/note_bg_color_selector = 0x7f050030 -net.micode.notes:drawable/search_result = 0x7f040034 net.micode.notes:id/iv_super_select = 0x7f05001b +net.micode.notes:drawable/search_result = 0x7f040034 net.micode.notes:id/iv_bg_yellow = 0x7f050016 +net.micode.notes:drawable/widget_2x_green = 0x7f040039 net.micode.notes:string/error_sync_cancelled = 0x7f0a0011 net.micode.notes:id/iv_bg_white_select = 0x7f050015 +net.micode.notes:string/format_move_notes_to_folder = 0x7f0a001c +net.micode.notes:drawable/widget_2x_red = 0x7f04003a net.micode.notes:id/tv_alert_date = 0x7f05003a net.micode.notes:dimen/text_font_size_large = 0x7f030000 net.micode.notes:drawable/notification = 0x7f040033 net.micode.notes:id/iv_bg_red = 0x7f050012 +net.micode.notes:id/iv_large_select = 0x7f050018 net.micode.notes:string/menu_font_large = 0x7f0a0027 net.micode.notes:drawable/widget_4x_blue = 0x7f04003d -net.micode.notes:id/iv_large_select = 0x7f050018 -net.micode.notes:id/widget_bg_image = 0x7f050041 net.micode.notes:id/iv_bg_green_select = 0x7f050011 -net.micode.notes:string/error_note_empty_for_clock = 0x7f0a000c +net.micode.notes:id/widget_bg_image = 0x7f050041 net.micode.notes:string/preferences_dialog_change_account_title = 0x7f0a004a net.micode.notes:drawable/menu_move = 0x7f04002e net.micode.notes:drawable/widget_4x_white = 0x7f040040 -net.micode.notes:id/iv_bg_blue_select = 0x7f05000f -net.micode.notes:string/preferences_dialog_select_account_tips = 0x7f0a004c net.micode.notes:id/font_size_selector = 0x7f05000b +net.micode.notes:string/preferences_dialog_select_account_tips = 0x7f0a004c net.micode.notes:id/et_edit_text = 0x7f050009 -net.micode.notes:id/et_foler_name = 0x7f05000a -net.micode.notes:drawable/edit_green = 0x7f040007 -net.micode.notes:layout/widget_4x = 0x7f06000d net.micode.notes:string/search = 0x7f0a0056 net.micode.notes:id/cb_edit_item = 0x7f050006 net.micode.notes:id/btn_set_bg_color = 0x7f050005 net.micode.notes:id/account_dialog_subtitle = 0x7f050000 net.micode.notes:menu/note_list = 0x7f070003 net.micode.notes:id/account_dialog_title = 0x7f050001 -net.micode.notes:id/iv_bg_green = 0x7f050010 net.micode.notes:id/amPm = 0x7f050003 +net.micode.notes:id/iv_bg_green = 0x7f050010 net.micode.notes:drawable/widget_4x_green = 0x7f04003e -net.micode.notes:style/NoteTheme = 0x7f0b0003 net.micode.notes:id/hour = 0x7f05000c net.micode.notes:drawable/note_edit_color_selector_panel = 0x7f040032 +net.micode.notes:style/NoteTheme = 0x7f0b0003 net.micode.notes:drawable/widget_2x_yellow = 0x7f04003c -net.micode.notes:string/format_move_notes_to_folder = 0x7f0a001c -net.micode.notes:drawable/widget_2x_red = 0x7f04003a net.micode.notes:style/TextAppearanceUnderMenuIcon = 0x7f0b000a net.micode.notes:id/delete = 0x7f050008 -net.micode.notes:drawable/widget_2x_green = 0x7f040039 net.micode.notes:drawable/title_bar_bg = 0x7f040037 net.micode.notes:drawable/menu_delete = 0x7f04002d net.micode.notes:string/error_sync_internal = 0x7f0a0012 diff --git a/src/Notes-master1/app/build/outputs/logs/manifest-merger-debug-report.txt b/src/Notes-master1/app/build/outputs/logs/manifest-merger-debug-report.txt index 0f7f88e..4f79ec2 100644 --- a/src/Notes-master1/app/build/outputs/logs/manifest-merger-debug-report.txt +++ b/src/Notes-master1/app/build/outputs/logs/manifest-merger-debug-report.txt @@ -1,235 +1,233 @@ -- Merging decision tree log --- manifest -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:18:1-150:12 -INJECTED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:18:1-150:12 -INJECTED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:18:1-150:12 -INJECTED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:18:1-150:12 -INJECTED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:18:1-150:12 -INJECTED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:18:1-150:12 -INJECTED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:18:1-150:12 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:18:1-151:12 +INJECTED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:18:1-151:12 +INJECTED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:18:1-151:12 +INJECTED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:18:1-151:12 +INJECTED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:18:1-151:12 +INJECTED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:18:1-151:12 +INJECTED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:18:1-151:12 package - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:19:5-31 - INJECTED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml - INJECTED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:19:5-31 + INJECTED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml + INJECTED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml android:versionName - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:21:5-30 - INJECTED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml - INJECTED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:21:5-30 + INJECTED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml + INJECTED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml xmlns:android - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:18:11-69 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:18:11-69 android:versionCode - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:20:5-28 - INJECTED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml - INJECTED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:20:5-28 + INJECTED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml + INJECTED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml uses-sdk -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:23:5-44 -INJECTED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:23:5-44 -INJECTED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:23:5-44 -INJECTED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:23:5-44 -INJECTED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:23:5-44 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:23:5-44 +INJECTED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:23:5-44 +INJECTED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:23:5-44 +INJECTED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:23:5-44 +INJECTED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:23:5-44 android:targetSdkVersion - INJECTED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:23:5-44 - INJECTED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml + INJECTED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:23:5-44 + INJECTED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml android:minSdkVersion - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:23:15-41 - INJECTED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml - INJECTED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:23:15-41 + INJECTED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml + INJECTED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml uses-permission#android.permission.WRITE_EXTERNAL_STORAGE -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:25:5-81 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:25:5-81 android:name - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:25:22-78 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:25:22-78 uses-permission#com.android.launcher.permission.INSTALL_SHORTCUT -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:26:5-88 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:26:5-88 android:name - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:26:22-85 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:26:22-85 uses-permission#android.permission.INTERNET -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:27:5-67 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:27:5-67 android:name - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:27:22-64 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:27:22-64 uses-permission#android.permission.READ_CONTACTS -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:28:5-72 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:28:5-72 android:name - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:28:22-69 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:28:22-69 uses-permission#android.permission.MANAGE_ACCOUNTS -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:29:5-74 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:29:5-74 android:name - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:29:22-71 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:29:22-71 uses-permission#android.permission.AUTHENTICATE_ACCOUNTS -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:30:5-80 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:30:5-80 android:name - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:30:22-77 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:30:22-77 uses-permission#android.permission.GET_ACCOUNTS -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:31:5-71 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:31:5-71 android:name - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:31:22-68 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:31:22-68 uses-permission#android.permission.USE_CREDENTIALS -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:32:5-74 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:32:5-74 android:name - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:32:22-71 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:32:22-71 uses-permission#android.permission.RECEIVE_BOOT_COMPLETED -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:33:5-81 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:33:5-81 android:name - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:33:22-78 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:33:22-78 application -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:35:5-149:19 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:35:5-150:19 android:label - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:37:9-41 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:37:9-41 android:icon - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:36:9-42 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:36:9-42 activity#net.micode.notes.ui.NotesListActivity -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:38:9-51:20 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:38:9-52:20 android:label - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:41:13-45 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:41:13-45 android:launchMode - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:42:13-43 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:42:13-43 android:windowSoftInputMode - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:45:13-52 - android:uiOptions - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:44:13-57 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:45:13-52 android:configChanges - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:40:13-74 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:40:13-74 android:theme - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:43:13-45 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:43:13-45 android:name - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:39:13-49 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:39:13-49 intent-filter#action:name:android.intent.action.MAIN+category:name:android.intent.category.LAUNCHER -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:47:13-50:29 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:48:13-51:29 action#android.intent.action.MAIN -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:48:17-69 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:49:17-69 android:name - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:48:25-66 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:49:25-66 category#android.intent.category.LAUNCHER -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:49:17-77 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:50:17-77 android:name - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:49:27-74 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:50:27-74 activity#net.micode.notes.ui.NoteEditActivity -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:53:9-81:20 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:54:9-82:20 android:launchMode - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:56:13-43 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:57:13-43 android:configChanges - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:55:13-74 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:56:13-74 android:theme - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:57:13-45 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:58:13-45 android:name - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:54:13-48 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:55:13-48 intent-filter#action:name:android.intent.action.VIEW+category:name:android.intent.category.DEFAULT+data:mimeType:vnd.android.cursor.item/call_note+data:mimeType:vnd.android.cursor.item/text_note -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:59:13-64:29 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:60:13-65:29 action#android.intent.action.VIEW -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:60:17-69 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:61:17-69 android:name - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:60:25-66 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:61:25-66 category#android.intent.category.DEFAULT -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:61:17-76 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:62:17-76 android:name - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:61:27-73 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:62:27-73 data -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:62:17-78 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:63:17-78 android:mimeType - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:62:23-75 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:63:23-75 intent-filter#action:name:android.intent.action.INSERT_OR_EDIT+category:name:android.intent.category.DEFAULT+data:mimeType:vnd.android.cursor.item/call_note+data:mimeType:vnd.android.cursor.item/text_note -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:66:13-71:29 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:67:13-72:29 action#android.intent.action.INSERT_OR_EDIT -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:67:17-79 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:68:17-79 android:name - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:67:25-76 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:68:25-76 intent-filter#action:name:android.intent.action.SEARCH+category:name:android.intent.category.DEFAULT -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:73:13-76:29 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:74:13-77:29 action#android.intent.action.SEARCH -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:74:17-71 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:75:17-71 android:name - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:74:25-68 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:75:25-68 meta-data#android.app.searchable -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:78:13-80:54 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:79:13-81:54 android:resource - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:80:17-51 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:81:17-51 android:name - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:79:17-54 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:80:17-54 provider#net.micode.notes.data.NotesProvider -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:83:9-86:43 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:84:9-87:43 android:authorities - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:85:13-47 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:86:13-47 android:multiprocess - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:86:13-40 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:87:13-40 android:name - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:84:13-63 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:85:13-63 receiver#net.micode.notes.widget.NoteWidgetProvider_2x -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:88:9-100:20 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:89:9-101:20 android:label - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:90:13-50 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:91:13-50 android:name - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:89:13-57 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:90:13-57 intent-filter#action:name:android.appwidget.action.APPWIDGET_DELETED+action:name:android.appwidget.action.APPWIDGET_UPDATE+action:name:android.intent.action.PRIVACY_MODE_CHANGED -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:91:13-95:29 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:92:13-96:29 action#android.appwidget.action.APPWIDGET_UPDATE -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:92:17-84 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:93:17-84 android:name - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:92:25-81 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:93:25-81 action#android.appwidget.action.APPWIDGET_DELETED -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:93:17-85 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:94:17-85 android:name - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:93:25-82 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:94:25-82 action#android.intent.action.PRIVACY_MODE_CHANGED -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:94:17-85 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:95:17-85 android:name - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:94:25-82 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:95:25-82 meta-data#android.appwidget.provider -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:97:13-99:58 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:98:13-100:58 android:resource - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:99:17-55 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:100:17-55 android:name - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:98:17-58 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:99:17-58 receiver#net.micode.notes.widget.NoteWidgetProvider_4x -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:101:9-114:20 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:102:9-115:20 android:label - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:103:13-50 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:104:13-50 android:name - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:102:13-57 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:103:13-57 receiver#net.micode.notes.ui.AlarmInitReceiver -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:116:9-120:20 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:117:9-121:20 android:name - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:116:19-55 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:117:19-55 intent-filter#action:name:android.intent.action.BOOT_COMPLETED -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:117:13-119:29 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:118:13-120:29 action#android.intent.action.BOOT_COMPLETED -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:118:17-79 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:119:17-79 android:name - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:118:25-76 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:119:25-76 receiver#net.micode.notes.ui.AlarmReceiver -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:122:9-125:20 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:123:9-126:20 android:process - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:124:13-38 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:125:13-38 android:name - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:123:13-61 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:124:13-61 activity#net.micode.notes.ui.AlarmAlertActivity -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:127:9-132:20 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:128:9-133:20 android:label - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:129:13-45 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:130:13-45 android:launchMode - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:130:13-48 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:131:13-48 android:theme - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:131:13-75 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:132:13-75 android:name - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:128:13-50 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:129:13-50 activity#net.micode.notes.ui.NotesPreferenceActivity -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:134:9-139:20 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:135:9-140:20 android:label - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:136:13-54 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:137:13-54 android:launchMode - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:137:13-43 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:138:13-43 android:theme - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:138:13-60 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:139:13-60 android:name - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:135:13-71 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:136:13-71 service#net.micode.notes.gtask.remote.GTaskSyncService -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:141:9-144:19 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:142:9-145:19 android:exported - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:143:13-37 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:144:13-37 android:name - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:142:13-74 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:143:13-74 meta-data#android.app.default_searchable -ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:146:9-148:52 +ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:147:9-149:52 android:value - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:148:13-49 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:149:13-49 android:name - ADDED from D:\ZIP\Notes-master1\app\src\main\AndroidManifest.xml:147:13-58 + ADDED from D:\gitProject\CJR_DXW_CYW\src\Notes-master1\app\src\main\AndroidManifest.xml:148:13-58 diff --git a/src/Notes-master1/app/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin b/src/Notes-master1/app/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin index 978ffc8d513a583be3e2e9ad832618dc570d27e0..cb3530203236e0823d7b1c2117314e84827bd2a8 100644 GIT binary patch delta 1594 zcmV-A2F3ZGXP;-V1OX6APjOYc?nEk4;c3BN;NX0d6aiuo`=g6nNcz@Go$f|1gDuC9 zvxWil0T5z<{A~0VclA&i)sPO6tk#o>191=pQTmG9nrS~#15K@A%7gEd3IrSw8VCO= z0bXI(NCW;fS}EbMlQsm=5Haa~^}U$X3;~+Ex8hvK5wjNsA^{K>#^L}IWeRTecY@eL z5`8d}Nd}8vXe8!3d~O$EC_h;08X0f$%mGeOFA&5tnC#iADcQ}+MYgr_LS`xuy6E~v zu&}Q9yU_k4x){hA%>hNu0aVWcBsUQ*&;bC3cyMoWbP%1Kzu@jaR_?I$_*^xy`slMV z2Oa_tt4euYn5R+z?Gl#uljkEZG{|?}ysK`ue3Ia*T#D>*yeOyaW?rN4q<-}1%oTvhTa4Q)f`EzB zS;M|)9I}of20DJ-9+OHWo(M}jaMZF~(+ZRDBp)mvB@u_6Vz0hZbI^QX&Da>Yt~;RK zp;V+T_>N*kom=QHe5G|ThDUgQcxc#T(gaSWC#_(XRNc&_p&n7NBaL-DcMyt|lO8A>e+*w_NcVY|rIZa*xzO*27ywywLYTte_46%kk$Rt!tSM;J&6C#vO95soWnjWEJ|TylC?hWAC=m=k`n_qeBo?TmvlT zBE0AC`^3o4s*bN!ovtl5DoKI)#@Pms=TRBAUm>`Zm2=Ffgkn@)les84F5$b#wX5%- zK`qRIgaJ-`v-F>7<&#MXb|WPv_FKXR|uMmknyvm86Ap$um|atQw2Ltqam!P7VBR%k8_ z{SY9g^_i}0wKV@KtiJ@|lb|USFq<)hwt-ySCBk0TTP-$dXFOmeL@!gOm3T!|?mR#i zH#i?R@+P!69sr2*EF>AFNR#9#ASU_Qp+5T_Y^#-=>8@ISefX|&52>jI00004D#Ds7 zz7Mq6=8Om7lPW4GGC^wD8aCCfe4x)7{IXaNtxoV(Evo0l0MP{i000h&(_ynatwo16 z=7hULw)HUe+*gQ`gepE1S%8QmS^?=Z(}n}zs?)JTK(TDd)9;k zG53%QlO8KDe`519>iAyg*m0&~vs<5Aa1_G_^IgDs4fKDye_G-s_FRF{>CvqKOLSi> z=^SK-)>D$giJ!1`PF3leB0rT}fv@1hrYS;H0^Pc*_s$%X;2lg%p$D7dG&t^bp{H=v=<$9=$n z)qU*Fmkw-d3oUTCG}Aad7Qaq&M^Iuu?vws2AUX}T(;k}DavTNGyXzLDe4jtu+h+mg sDEg8~0DP6*MgDwKy^efu>8RiZ00003o)A6RhW@4sYTG9cvsf%g2b2W+{Qv*} delta 1594 zcmV-A2F3ZGXP;-V1OX7#gKyp9)ev8u{=Ex%4&f$~6aiuo!arLX9VQUL6@Zo|Qt|O1 zvxWil0TANLgcJc%fh^U{P39MuX=0O!191=#*}nWxN*Zmocr!ynpqS;83IrSw%>Dvz z*dQk)GSxg*gyOlmlQsm=5T^AZIh03%fGnl!hNu0aVWcBsUQ*&;bC3cyMoWbP!arYBDJf3L{?qe0mCkR{gUw z2Oa_t{SQPQCC&i`S9k7b%nrF@vtS9L0T5=?E|w{8!TA<2>?FK~RsE9^3uh4Dkmse` zYhZ6B>8<}9PTYpGi3t8TV@ljkEZG>YtTysK`ud|spQq>|vOTqvjPX2^HmyngiP%oTvhTa4Q)g2TRO z96Em89{;Eim9icTOsRWGuv!-~xckx&> z_wQU(D6zzvnIXZ3h>V+T_>N*kom=QHe5G}Mcxc!#hDUgxf5z9PC#_(yWk^|eMYa43 zM9B&nDx@64@!#wo#lGYzZ*4qo)VGHDDM=WnXRFw-YHQe*RNc&D(gb2o;n!MBc;Dr* zw>_p&n7NlO8A>fA@Kqr3_zWNR$mzxzO*27}Op%0svWa<8-_yW|7%ON5};$ zZ>LYTte_46%kk$Rt!tSM;J&6C#@rt=WF2y@sY4J|T)gM+`vWZIBKAxqqwluR=V-`v-KXR|u#MXb|WPv_FF>7<&Mmknyvm86Ap$um|LtqamatQw2!P7VBR%k8_ ztiJ@|^_i}0wKV@K{SY9glb|USFv4EeTY+5MC7UsWwk8|@8Y^z#+efas=p+2s152>jI00004D#Ds7 z=8Om7z7Mq6lPW4GGO}0?t*Yn50HDtr{7&#zEjHDyd_ij28qoy+000h&(_ynV=7hWT z+*gQ0w)HSOtwo2EgepE<*dW2vggDUrcTkKd>1S%8=Z(}n}G53%Q zd)9;klO8KDfB0VK*kbcD>T#xHvs<5Aa9zN84HUx%^YnkZe_G-s_FRF{>CvqKOH-1< zi5z5y)^uMi>7TH6PF3leBCp`XrazTjf!(^QP~h$Zy{{@!b-9Y_bNup#{)@k~&N1F(>_s$%X;2lg%p$C=P6D3w^+V)u5rz$N!VM zH+}5Rm$;|7t7A8Jta sDEg8~0DOE?y^fXLMgBkB+h^bf00003o)A6RYTG9chW@4svsf%g2dQK8RR910 diff --git a/src/Notes-master1/app/src/main/AndroidManifest.xml b/src/Notes-master1/app/src/main/AndroidManifest.xml index e5c7d47..101890a 100644 --- a/src/Notes-master1/app/src/main/AndroidManifest.xml +++ b/src/Notes-master1/app/src/main/AndroidManifest.xml @@ -41,9 +41,10 @@ android:label="@string/app_name" android:launchMode="singleTop" android:theme="@style/NoteTheme" - android:uiOptions="splitActionBarWhenNarrow" + android:windowSoftInputMode="adjustPan" > + diff --git a/src/Notes-master1/app/src/main/java/net/micode/notes/data/Contact.java b/src/Notes-master1/app/src/main/java/net/micode/notes/data/Contact.java index d97ac5d..b21679b 100644 --- a/src/Notes-master1/app/src/main/java/net/micode/notes/data/Contact.java +++ b/src/Notes-master1/app/src/main/java/net/micode/notes/data/Contact.java @@ -25,47 +25,52 @@ import android.util.Log; import java.util.HashMap; -public class Contact { +public class Contact {//创建一个 联系人 类 private static HashMap sContactCache; private static final String TAG = "Contact"; + //定义字符串CALLER_ID_SELECTION private static final String CALLER_ID_SELECTION = "PHONE_NUMBERS_EQUAL(" + Phone.NUMBER - + ",?) AND " + Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "'" - + " AND " + Data.RAW_CONTACT_ID + " IN " + + ",?) AND " + Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "'" + + " AND " + Data.RAW_CONTACT_ID + " IN " + "(SELECT raw_contact_id " + " FROM phone_lookup" + " WHERE min_match = '+')"; + //获取联系人 public static String getContact(Context context, String phoneNumber) { if(sContactCache == null) { sContactCache = new HashMap(); } - + //查找HashMap中是否已经有了phoneNumber的信息 if(sContactCache.containsKey(phoneNumber)) { return sContactCache.get(phoneNumber); } String selection = CALLER_ID_SELECTION.replace("+", PhoneNumberUtils.toCallerIDMinMatch(phoneNumber)); + //查找数据库中phoneNumber的信息 Cursor cursor = context.getContentResolver().query( Data.CONTENT_URI, new String [] { Phone.DISPLAY_NAME }, selection, new String[] { phoneNumber }, null); - + //如果查询结果不为空,就输出电话号码和联系人姓名 + //否则就按照异常catch 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 { + } else { //未找到相关信息 Log.d(TAG, "No contact matched with number:" + phoneNumber); return null; } diff --git a/src/Notes-master1/app/src/main/java/net/micode/notes/data/Notes.java b/src/Notes-master1/app/src/main/java/net/micode/notes/data/Notes.java index f240604..7c1a57b 100644 --- a/src/Notes-master1/app/src/main/java/net/micode/notes/data/Notes.java +++ b/src/Notes-master1/app/src/main/java/net/micode/notes/data/Notes.java @@ -18,6 +18,7 @@ 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; @@ -52,15 +53,15 @@ public class Notes { } /** - * Uri to query all notes and folders + * Uri to query all notes and folders 查询所有笔记和文件夹 */ public static final Uri CONTENT_NOTE_URI = Uri.parse("content://" + AUTHORITY + "/note"); - + //定义查询便签和文件夹的指针 /** - * Uri to query data + * Uri to query data 查询数据 */ public static final Uri CONTENT_DATA_URI = Uri.parse("content://" + AUTHORITY + "/data"); - + //定义查找数据的指针 public interface NoteColumns { /** * The unique ID for a row @@ -165,7 +166,7 @@ public class Notes { *

Type : INTEGER (long)

*/ public static final String VERSION = "version"; - } + }//定义便签属性 public interface DataColumns { /** @@ -239,7 +240,7 @@ public class Notes { *

Type: TEXT

*/ public static final String DATA5 = "data5"; - } + }//定义存储便签内容数据不可修改变量 public static final class TextNote implements DataColumns { /** @@ -255,7 +256,7 @@ public class Notes { public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/text_note"; public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/text_note"); - } + }//文本内容的数据结构 public static final class CallNote implements DataColumns { /** @@ -275,5 +276,5 @@ public class Notes { public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/call_note"; public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/call_note"); - } + }//电话内容的数据结构 } diff --git a/src/Notes-master1/app/src/main/java/net/micode/notes/data/NotesDatabaseHelper.java b/src/Notes-master1/app/src/main/java/net/micode/notes/data/NotesDatabaseHelper.java index ffe5d57..ee47e51 100644 --- a/src/Notes-master1/app/src/main/java/net/micode/notes/data/NotesDatabaseHelper.java +++ b/src/Notes-master1/app/src/main/java/net/micode/notes/data/NotesDatabaseHelper.java @@ -61,7 +61,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { NoteColumns.ORIGIN_PARENT_ID + " INTEGER NOT NULL DEFAULT 0," + NoteColumns.GTASK_ID + " TEXT NOT NULL DEFAULT ''," + NoteColumns.VERSION + " INTEGER NOT NULL DEFAULT 0" + - ")"; + ")";//数据库中需要存储的项目名称,相当于创建一个表格的表头 private static final String CREATE_DATA_TABLE_SQL = "CREATE TABLE " + TABLE.DATA + "(" + @@ -76,7 +76,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { DataColumns.DATA3 + " TEXT NOT NULL DEFAULT ''," + DataColumns.DATA4 + " TEXT NOT NULL DEFAULT ''," + DataColumns.DATA5 + " TEXT NOT NULL DEFAULT ''" + - ")"; + ")";//和上面一样,存储项目不同而已 private static final String CREATE_DATA_NOTE_ID_INDEX_SQL = "CREATE INDEX IF NOT EXISTS note_id_index ON " + @@ -92,7 +92,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { " UPDATE " + TABLE.NOTE + " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + " + 1" + " WHERE " + NoteColumns.ID + "=new." + NoteColumns.PARENT_ID + ";" + - " END"; + " END";//在文件夹中移入一个note之后需要更改的数据表格 /** * Decrease folder's note count when move note from folder @@ -105,7 +105,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + "-1" + " WHERE " + NoteColumns.ID + "=old." + NoteColumns.PARENT_ID + " AND " + NoteColumns.NOTES_COUNT + ">0" + ";" + - " END"; + " END";//在文件夹中移出一个note之后需要更改的数据表格 /** * Increase folder's note count when insert new note to the folder @@ -117,7 +117,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { " UPDATE " + TABLE.NOTE + " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + " + 1" + " WHERE " + NoteColumns.ID + "=new." + NoteColumns.PARENT_ID + ";" + - " END"; + " END";//在文件夹中插入一个note需要更改的数据表格 /** * Decrease folder's note count when delete note from the folder @@ -130,7 +130,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { " SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + "-1" + " WHERE " + NoteColumns.ID + "=old." + NoteColumns.PARENT_ID + " AND " + NoteColumns.NOTES_COUNT + ">0;" + - " END"; + " END";//在文件夹中删除一个note之后需要更改的数据表格 /** * Update note's content when insert data with type {@link DataConstants#NOTE} @@ -143,7 +143,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { " UPDATE " + TABLE.NOTE + " SET " + NoteColumns.SNIPPET + "=new." + DataColumns.CONTENT + " WHERE " + NoteColumns.ID + "=new." + DataColumns.NOTE_ID + ";" + - " END"; + " END";//在文件夹中对note导入新数据之后需要更改的数据表格 /** * Update note's content when data with {@link DataConstants#NOTE} type has changed @@ -156,7 +156,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { " UPDATE " + TABLE.NOTE + " SET " + NoteColumns.SNIPPET + "=new." + DataColumns.CONTENT + " WHERE " + NoteColumns.ID + "=new." + DataColumns.NOTE_ID + ";" + - " END"; + " END";//note数据被删除之后需要更改的数据表格 /** * Update note's content when data with {@link DataConstants#NOTE} type has deleted @@ -169,7 +169,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { " UPDATE " + TABLE.NOTE + " SET " + NoteColumns.SNIPPET + "=''" + " WHERE " + NoteColumns.ID + "=old." + DataColumns.NOTE_ID + ";" + - " END"; + " END";//note数据被修改之后需要被更改的数据表格 /** * Delete datas belong to note which has been deleted @@ -180,7 +180,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { " BEGIN" + " DELETE FROM " + TABLE.DATA + " WHERE " + DataColumns.NOTE_ID + "=old." + NoteColumns.ID + ";" + - " END"; + " END";//删除已删除的便签的数据之后需要更改的表格数据 /** * Delete notes belong to folder which has been deleted @@ -191,7 +191,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { " BEGIN" + " DELETE FROM " + TABLE.NOTE + " WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" + - " END"; + " END";//删除已删除的文件的便签之后需要被更改的表格数据 /** * Move notes belong to folder which has been moved to trash folder @@ -204,7 +204,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { " UPDATE " + TABLE.NOTE + " SET " + NoteColumns.PARENT_ID + "=" + Notes.ID_TRASH_FOLER + " WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" + - " END"; + " END";//还原垃圾桶中便签后需要更改的表格数据 public NotesDatabaseHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); @@ -215,7 +215,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { 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"); @@ -268,14 +268,14 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { values.put(NoteColumns.ID, Notes.ID_TRASH_FOLER); values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); db.insert(TABLE.NOTE, null, values); - } + }//创建几个系统文件夹 public void createDataTable(SQLiteDatabase db) { db.execSQL(CREATE_DATA_TABLE_SQL); reCreateDataTableTriggers(db); db.execSQL(CREATE_DATA_NOTE_ID_INDEX_SQL); Log.d(TAG, "data table has been created"); - } + }//创建用来存储标签内容 private void reCreateDataTableTriggers(SQLiteDatabase db) { db.execSQL("DROP TRIGGER IF EXISTS update_note_content_on_insert"); @@ -292,7 +292,11 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { mInstance = new NotesDatabaseHelper(context); } return mInstance; - } + }/* + 为了解决同一时刻只有一个线程执行的问题 + 在写代码时,有时一个类需要被所有的其他类使用, + 但又要求这个类只能被实例化一次,是个服务类,定义一次,其他类使用同一个这个类的实例 + */ @Override public void onCreate(SQLiteDatabase db) { @@ -331,7 +335,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { throw new IllegalStateException("Upgrade notes database to version " + newVersion + "fails"); } - } + } //数据库更新 private void upgradeToV2(SQLiteDatabase db) { db.execSQL("DROP TABLE IF EXISTS " + TABLE.NOTE); @@ -358,5 +362,5 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { private void upgradeToV4(SQLiteDatabase db) { db.execSQL("ALTER TABLE " + TABLE.NOTE + " ADD COLUMN " + NoteColumns.VERSION + " INTEGER NOT NULL DEFAULT 0"); - } + }//这是最新版 } diff --git a/src/Notes-master1/app/src/main/java/net/micode/notes/data/NotesProvider.java b/src/Notes-master1/app/src/main/java/net/micode/notes/data/NotesProvider.java index edb0a60..39e063b 100644 --- a/src/Notes-master1/app/src/main/java/net/micode/notes/data/NotesProvider.java +++ b/src/Notes-master1/app/src/main/java/net/micode/notes/data/NotesProvider.java @@ -35,8 +35,8 @@ import net.micode.notes.data.Notes.NoteColumns; import net.micode.notes.data.NotesDatabaseHelper.TABLE; -public class NotesProvider extends ContentProvider { - private static final UriMatcher mMatcher; +public class NotesProvider extends ContentProvider {//用来拓展查询 + private static final UriMatcher mMatcher;//用于匹配URI private NotesDatabaseHelper mHelper; @@ -50,7 +50,7 @@ public class NotesProvider extends ContentProvider { private static final int URI_SEARCH = 5; private static final int URI_SEARCH_SUGGEST = 6; - static { + static {//注册需要匹配的URI路径 mMatcher = new UriMatcher(UriMatcher.NO_MATCH); mMatcher.addURI(Notes.AUTHORITY, "note", URI_NOTE); mMatcher.addURI(Notes.AUTHORITY, "note/#", URI_NOTE_ITEM); @@ -72,26 +72,26 @@ public class NotesProvider extends ContentProvider { + R.drawable.search_result + " AS " + SearchManager.SUGGEST_COLUMN_ICON_1 + "," + "'" + Intent.ACTION_VIEW + "' AS " + SearchManager.SUGGEST_COLUMN_INTENT_ACTION + "," + "'" + Notes.TextNote.CONTENT_TYPE + "' AS " + SearchManager.SUGGEST_COLUMN_INTENT_DATA; - + //声明NOTES_SNIPPET_SEARCH_QUERY 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 + @Override//对mHelper进行实例化 public boolean onCreate() { mHelper = NotesDatabaseHelper.getInstance(getContext()); return true; } - @Override + @Override//查询uri在数据库中的位置 public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { Cursor c = null; - SQLiteDatabase db = mHelper.getReadableDatabase(); + SQLiteDatabase db = mHelper.getReadableDatabase();//获取可读数据库 String id = null; - switch (mMatcher.match(uri)) { + switch (mMatcher.match(uri)) {//匹配URI,对不同的URI有不同的查找条目 case URI_NOTE: c = db.query(TABLE.NOTE, projection, selection, selectionArgs, null, null, sortOrder); @@ -138,7 +138,7 @@ public class NotesProvider extends ContentProvider { Log.e(TAG, "got exception: " + ex.toString()); } break; - default: + default://抛出异常 throw new IllegalArgumentException("Unknown URI " + uri); } if (c != null) { @@ -149,9 +149,10 @@ public class NotesProvider extends ContentProvider { @Override public Uri insert(Uri uri, ContentValues values) { + //获取一个可写数据库 SQLiteDatabase db = mHelper.getWritableDatabase(); long dataId = 0, noteId = 0, insertedId = 0; - switch (mMatcher.match(uri)) { + switch (mMatcher.match(uri)) {//匹配URI case URI_NOTE: insertedId = noteId = db.insert(TABLE.NOTE, null, values); break; @@ -182,7 +183,8 @@ public class NotesProvider extends ContentProvider { } @Override - public int delete(Uri uri, String selection, String[] selectionArgs) { + public int delete(Uri uri, String selection, String[] selectionArgs) {//删除一个URI + //uri代表要操作的数据,Android上的每一种可用资源图片,音频,视频片段 int count = 0; String id = null; SQLiteDatabase db = mHelper.getWritableDatabase(); @@ -227,7 +229,7 @@ public class NotesProvider extends ContentProvider { return count; } - @Override + @Override//更新uri public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { int count = 0; String id = null; @@ -267,11 +269,12 @@ public class NotesProvider extends ContentProvider { return count; } - private String parseSelection(String selection) { + private String parseSelection(String selection) {//规范化字符串 return (!TextUtils.isEmpty(selection) ? " AND (" + selection + ')' : ""); } private void increaseNoteVersion(long id, String selection, String[] selectionArgs) { + //增加一个noteVersion StringBuilder sql = new StringBuilder(120); sql.append("UPDATE "); sql.append(TABLE.NOTE); diff --git a/src/Notes-master1/app/src/main/java/net/micode/notes/model/Note.java b/src/Notes-master1/app/src/main/java/net/micode/notes/model/Note.java index 6706cf6..54b6d18 100644 --- a/src/Notes-master1/app/src/main/java/net/micode/notes/model/Note.java +++ b/src/Notes-master1/app/src/main/java/net/micode/notes/model/Note.java @@ -21,9 +21,9 @@ import android.content.ContentUris; import android.content.ContentValues; import android.content.Context; import android.content.OperationApplicationException; -import android.net.Uri; +import android.net.Uri;//等待操作的数据 import android.os.RemoteException; -import android.util.Log; +import android.util.Log;//日志报告 import net.micode.notes.data.Notes; import net.micode.notes.data.Notes.CallNote; @@ -49,16 +49,16 @@ public class Note { 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); + values.put(NoteColumns.PARENT_ID, folderId);//以上为将数据写入数据库表格 Uri uri = context.getContentResolver().insert(Notes.CONTENT_NOTE_URI, values); - +//ContentResolver()主要实现外部应用对ContentResolver中的数据进行增删查改。 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); } @@ -68,35 +68,35 @@ public class Note { 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); } - - public boolean isLocalModified() { +//设置电话号码数据 + public boolean isLocalModified() {//判断是否本地修改 return mNoteDiffValues.size() > 0 || mNoteData.isLocalModified(); } @@ -114,6 +114,7 @@ public class Note { * {@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) { @@ -128,16 +129,16 @@ public class Note { } return true; - } + }//判断数据是否同步 - private class NoteData { - private long mTextDataId; + private class NoteData {//一个基本的便签内容数据类,主要包含文本数据和电话号码数据 + private long mTextDataId; //文本ID - private ContentValues mTextDataValues; + private ContentValues mTextDataValues; //文本数据 private long mCallDataId; - private ContentValues mCallDataValues; + private ContentValues mCallDataValues; //电话号码数据 private static final String TAG = "NoteData"; @@ -146,7 +147,7 @@ public class Note { mCallDataValues = new ContentValues(); mTextDataId = 0; mCallDataId = 0; - } + }//下面就是上述几个函数的具体实现 boolean isLocalModified() { return mTextDataValues.size() > 0 || mCallDataValues.size() > 0; @@ -184,7 +185,7 @@ public class Note { */ if (noteId <= 0) { throw new IllegalArgumentException("Wrong note id:" + noteId); - } + }//判断数据是否合法 ArrayList operationList = new ArrayList(); ContentProviderOperation.Builder builder = null; @@ -209,7 +210,7 @@ public class Note { operationList.add(builder.build()); } mTextDataValues.clear(); - } + }//把文本数据存入DataColumns if(mCallDataValues.size() > 0) { mCallDataValues.put(DataColumns.NOTE_ID, noteId); @@ -231,7 +232,7 @@ public class Note { operationList.add(builder.build()); } mCallDataValues.clear(); - } + }//把电话号码数据存入DataColumns if (operationList.size() > 0) { try { diff --git a/src/Notes-master1/app/src/main/java/net/micode/notes/model/WorkingNote.java b/src/Notes-master1/app/src/main/java/net/micode/notes/model/WorkingNote.java index be081e4..358c83f 100644 --- a/src/Notes-master1/app/src/main/java/net/micode/notes/model/WorkingNote.java +++ b/src/Notes-master1/app/src/main/java/net/micode/notes/model/WorkingNote.java @@ -41,7 +41,7 @@ public class WorkingNote { private String mContent; // Note mode private int mMode; - +//便签状态 private long mAlertDate; private long mModifiedDate; @@ -70,7 +70,7 @@ public class WorkingNote { DataColumns.DATA2, DataColumns.DATA3, DataColumns.DATA4, - }; + };//声明DATA_PROJECTION字符串数组 public static final String[] NOTE_PROJECTION = new String[] { NoteColumns.PARENT_ID, @@ -79,7 +79,7 @@ public class WorkingNote { NoteColumns.WIDGET_ID, NoteColumns.WIDGET_TYPE, NoteColumns.MODIFIED_DATE - }; + };//声明NOTE_PROJECTION字符串数组 private static final int DATA_ID_COLUMN = 0; @@ -112,7 +112,7 @@ public class WorkingNote { mIsDeleted = false; mMode = 0; mWidgetType = Notes.TYPE_WIDGET_INVALIDE; - } + }//WorkingNote构造函数 // Existing note construct private WorkingNote(Context context, long noteId, long folderId) { @@ -122,7 +122,7 @@ public class WorkingNote { mIsDeleted = false; mNote = new Note(); loadNote(); - } + }//WorkingNote构造函数 private void loadNote() { Cursor cursor = mContext.getContentResolver().query( @@ -146,14 +146,14 @@ public class WorkingNote { loadNoteData(); } - private void loadNoteData() { + private void loadNoteData() { //加载NoteData 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()) { + if (cursor.moveToFirst()) { //检查第一项是否为空 do { String type = cursor.getString(DATA_MIME_TYPE_COLUMN); if (DataConstants.NOTE.equals(type)) { @@ -171,11 +171,11 @@ public class WorkingNote { } 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) { + int widgetType, int defaultBgColorId) { //创建空的Note,参数context,文件夹id,背景颜色widget WorkingNote note = new WorkingNote(context, folderId); note.setBgColorId(defaultBgColorId); note.setWidgetId(widgetId); @@ -186,9 +186,9 @@ public class WorkingNote { public static WorkingNote load(Context context, long id) { return new WorkingNote(context, id, 0); } - +//保存Note public synchronized boolean saveNote() { - if (isWorthSaving()) { + if (isWorthSaving()) { //是否值得保存 if (!existInDatabase()) { if ((mNoteId = Note.getNewNoteId(mContext, mFolderId)) == 0) { Log.e(TAG, "Create new note fail with id:" + mNoteId); @@ -214,9 +214,9 @@ public class WorkingNote { public boolean existInDatabase() { return mNoteId > 0; - } + } //是否存在 - private boolean isWorthSaving() { + private boolean isWorthSaving() { //判断是否值得保存 if (mIsDeleted || (!existInDatabase() && TextUtils.isEmpty(mContent)) || (existInDatabase() && !mNote.isLocalModified())) { return false; @@ -239,7 +239,7 @@ public class WorkingNote { } } - public void markDeleted(boolean mark) { + public void markDeleted(boolean mark) { //设置删除标记 mIsDeleted = mark; if (mWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID && mWidgetType != Notes.TYPE_WIDGET_INVALIDE && mNoteSettingStatusListener != null) { @@ -247,7 +247,7 @@ public class WorkingNote { } } - public void setBgColorId(int id) { + public void setBgColorId(int id) { //设置背景颜色 if (id != mBgColorId) { mBgColorId = id; if (mNoteSettingStatusListener != null) { @@ -257,7 +257,7 @@ public class WorkingNote { } } - public void setCheckListMode(int mode) { + public void setCheckListMode(int mode) {//检查Mode if (mMode != mode) { if (mNoteSettingStatusListener != null) { mNoteSettingStatusListener.onCheckListModeChanged(mMode, mode); @@ -267,7 +267,7 @@ public class WorkingNote { } } - public void setWidgetType(int type) { + public void setWidgetType(int type) { //设置widget,参数为type,下面一个参数为ID if (type != mWidgetType) { mWidgetType = type; mNote.setNoteValue(NoteColumns.WIDGET_TYPE, String.valueOf(mWidgetType)); @@ -281,11 +281,11 @@ public class WorkingNote { } } - public void setWorkingText(String text) { + public void setWorkingText(String text) { //设置workingText,参数为更改的text if (!TextUtils.equals(mContent, text)) { mContent = text; mNote.setTextData(DataColumns.CONTENT, mContent); - } + }//调用Note的setTextData更改Text } public void convertToCallNote(String phoneNumber, long callDate) { @@ -297,52 +297,52 @@ public class WorkingNote { public boolean hasClockAlert() { return (mAlertDate > 0 ? true : false); } - +//判断是否有时钟题型 public String getContent() { return mContent; } - +//获取content public long getAlertDate() { return mAlertDate; } - + //获取tAlertDate public long getModifiedDate() { return mModifiedDate; } - + //获取ModifiedDate public int getBgColorResId() { return NoteBgResources.getNoteBgResource(mBgColorId); } - + //获取背景颜色来源ID public int getBgColorId() { return mBgColorId; } - +//获取背景颜色ID public int getTitleBgResId() { return NoteBgResources.getNoteTitleBgResource(mBgColorId); } - +//获取标题背景颜色ID public int getCheckListMode() { return mMode; } - + //获取CheckListMode public long getNoteId() { return mNoteId; } - + //获取便签ID public long getFolderId() { return mFolderId; } - +//获取文件夹ID public int getWidgetId() { return mWidgetId; } - +//获取WidgetId public int getWidgetType() { return mWidgetType; } - - public interface NoteSettingChangedListener { +//获取WidgetType + public interface NoteSettingChangedListener { //创建NoteSettingChangedListener接口,便签更新监视 /** * Called when the background color of current note has just changed */ diff --git a/src/Notes-master1/app/src/main/java/net/micode/notes/tool/BackupUtils.java b/src/Notes-master1/app/src/main/java/net/micode/notes/tool/BackupUtils.java index 39f6ec4..9f761c9 100644 --- a/src/Notes-master1/app/src/main/java/net/micode/notes/tool/BackupUtils.java +++ b/src/Notes-master1/app/src/main/java/net/micode/notes/tool/BackupUtils.java @@ -42,6 +42,7 @@ public class BackupUtils { private static BackupUtils sInstance; public static synchronized BackupUtils getInstance(Context context) { + //synchronized关键字,表示这个方法加锁,无论那个线程到这里都得检查其他线程有没有正在使用这个线程 if (sInstance == null) { sInstance = new BackupUtils(context); } @@ -68,8 +69,8 @@ public class BackupUtils { private BackupUtils(Context context) { mTextExport = new TextExport(context); } - - private static boolean externalStorageAvailable() { +//初始化工作 + private static boolean externalStorageAvailable() { //外部存储是否可用 return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()); } @@ -128,19 +129,20 @@ public class BackupUtils { public TextExport(Context context) { TEXT_FORMAT = context.getResources().getStringArray(R.array.format_for_exported_note); mContext = context; - mFileName = ""; + mFileName = "";//为空,只是为了进行初始化可用,后序再进行重命名,下面一个也是 mFileDirectory = ""; } private String getFormat(int id) { return TEXT_FORMAT[id]; - } + } //获取文本组成部分 /** * Export the folder identified by folder id to text */ private void exportFolderToText(String folderId, PrintStream ps) { // Query notes belong to this folder + //查询属于folder下的note Cursor notesCursor = mContext.getContentResolver().query(Notes.CONTENT_NOTE_URI, NOTE_PROJECTION, NoteColumns.PARENT_ID + "=?", new String[] { folderId @@ -149,13 +151,13 @@ public class BackupUtils { if (notesCursor != null) { if (notesCursor.moveToFirst()) { do { - // Print note's last modified date + // Print note's last modified date 打印最后更新的日志 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 String noteId = notesCursor.getString(NOTE_COLUMN_ID); - exportNoteToText(noteId, ps); + exportNoteToText(noteId, ps); //文件导出到text } while (notesCursor.moveToNext()); } notesCursor.close(); @@ -171,7 +173,7 @@ public class BackupUtils { noteId }, null); - if (dataCursor != null) { + if (dataCursor != null) {//光标扫描,区别call note 和note两种便签 if (dataCursor.moveToFirst()) { do { String mimeType = dataCursor.getString(DATA_COLUMN_MIME_TYPE); @@ -218,7 +220,7 @@ public class BackupUtils { /** * Note will be exported as text which is user readable */ - public int exportToText() { + public int exportToText() { //总函数,调用上面的两个函数 if (!externalStorageAvailable()) { Log.d(TAG, "Media was not mounted"); return STATE_SD_CARD_UNMOUONTED; @@ -257,7 +259,7 @@ public class BackupUtils { folderCursor.close(); } - // Export notes in root's folder + // Export notes in root's folder 导出便签 Cursor noteCursor = mContext.getContentResolver().query( Notes.CONTENT_NOTE_URI, NOTE_PROJECTION, @@ -297,7 +299,7 @@ public class BackupUtils { PrintStream ps = null; try { FileOutputStream fos = new FileOutputStream(file); - ps = new PrintStream(fos); + ps = new PrintStream(fos); //将PS输出流输出到选定的文件,目的就是导出到文件而不是直接输出 } catch (FileNotFoundException e) { e.printStackTrace(); return null; @@ -315,15 +317,15 @@ public class BackupUtils { 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()); + sb.append(context.getString(filePathResId));//文件的存储路径 + File filedir = new File(sb.toString());//filedir用来存储路径信息 sb.append(context.getString( fileNameFormatResId, DateFormat.format(context.getString(R.string.format_date_ymd), System.currentTimeMillis()))); File file = new File(sb.toString()); - try { + try { //如果这些文件不存在,则新建一个 if (!filedir.exists()) { filedir.mkdir(); } @@ -335,7 +337,7 @@ public class BackupUtils { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); - } + }//异常处理 return null; } diff --git a/src/Notes-master1/app/src/main/java/net/micode/notes/tool/DataUtils.java b/src/Notes-master1/app/src/main/java/net/micode/notes/tool/DataUtils.java index 2a14982..d3fd844 100644 --- a/src/Notes-master1/app/src/main/java/net/micode/notes/tool/DataUtils.java +++ b/src/Notes-master1/app/src/main/java/net/micode/notes/tool/DataUtils.java @@ -52,13 +52,14 @@ public class DataUtils { 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; @@ -78,7 +79,7 @@ public class DataUtils { 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); - } + }//将ids里包含的数据依次家儒operationList中,等待处理 public static boolean batchMoveToFolder(ContentResolver resolver, HashSet ids, long folderId) { @@ -119,7 +120,7 @@ public class DataUtils { new String[] { "COUNT(*)" }, NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>?", new String[] { String.valueOf(Notes.TYPE_FOLDER), String.valueOf(Notes.ID_TRASH_FOLER)}, - null); + null);//查询条件,type符合且不属于垃圾文件夹 int count = 0; if(cursor != null) { @@ -142,7 +143,7 @@ public class DataUtils { 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) { @@ -250,7 +251,7 @@ public class DataUtils { + CallNote.PHONE_NUMBER + ",?)", new String [] { String.valueOf(callDate), CallNote.CONTENT_ITEM_TYPE, phoneNumber }, null); - + //通过数据库操作,查询条件是传入的参数 if (cursor != null) { if (cursor.moveToFirst()) { try { diff --git a/src/Notes-master1/app/src/main/java/net/micode/notes/tool/GTaskStringUtils.java b/src/Notes-master1/app/src/main/java/net/micode/notes/tool/GTaskStringUtils.java index 666b729..e5473b6 100644 --- a/src/Notes-master1/app/src/main/java/net/micode/notes/tool/GTaskStringUtils.java +++ b/src/Notes-master1/app/src/main/java/net/micode/notes/tool/GTaskStringUtils.java @@ -16,7 +16,7 @@ package net.micode.notes.tool; -public class GTaskStringUtils { +public class GTaskStringUtils { //这个类就是定义一堆静态数据,为jsonObject提供key,把这些定义全部写到一个类里面 public final static String GTASK_JSON_ACTION_ID = "action_id"; diff --git a/src/Notes-master1/app/src/main/java/net/micode/notes/tool/ResourceParser.java b/src/Notes-master1/app/src/main/java/net/micode/notes/tool/ResourceParser.java index 1ad3ad6..1b7d08d 100644 --- a/src/Notes-master1/app/src/main/java/net/micode/notes/tool/ResourceParser.java +++ b/src/Notes-master1/app/src/main/java/net/micode/notes/tool/ResourceParser.java @@ -64,7 +64,7 @@ public class ResourceParser { return BG_EDIT_TITLE_RESOURCES[id]; } } - +//直接获取背景颜色 public static int getDefaultBgId(Context context) { if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean( NotesPreferenceActivity.PREFERENCE_SET_BG_COLOR_KEY, false)) { @@ -168,6 +168,7 @@ public class ResourceParser { * The id may larger than the length of resources, in this case, * return the {@link ResourceParser#BG_DEFAULT_FONT_SIZE} */ + //如果输入的id大于资源总量,则自动返回默认的设置结果 if (id >= TEXTAPPEARANCE_RESOURCES.length) { return BG_DEFAULT_FONT_SIZE; } diff --git a/src/Notes-master1/app/src/main/java/net/micode/notes/widget/NoteWidgetProvider.java b/src/Notes-master1/app/src/main/java/net/micode/notes/widget/NoteWidgetProvider.java index ec6f819..275c0b9 100644 --- a/src/Notes-master1/app/src/main/java/net/micode/notes/widget/NoteWidgetProvider.java +++ b/src/Notes-master1/app/src/main/java/net/micode/notes/widget/NoteWidgetProvider.java @@ -32,7 +32,7 @@ import net.micode.notes.tool.ResourceParser; import net.micode.notes.ui.NoteEditActivity; import net.micode.notes.ui.NotesListActivity; -public abstract class NoteWidgetProvider extends AppWidgetProvider { +public abstract class NoteWidgetProvider extends AppWidgetProvider {//构造了一个类继承Android原有的AppWidgetProvider类 public static final String [] PROJECTION = new String [] { NoteColumns.ID, NoteColumns.BG_COLOR_ID, @@ -42,8 +42,7 @@ public abstract class NoteWidgetProvider extends AppWidgetProvider { public static final int COLUMN_ID = 0; public static final int COLUMN_BG_COLOR_ID = 1; public static final int COLUMN_SNIPPET = 2; - - private static final String TAG = "NoteWidgetProvider"; + private static final String TAG = "NoteWidgetProvider";//定义TAG为NoteWidgetProvider @Override public void onDeleted(Context context, int[] appWidgetIds) { @@ -55,7 +54,9 @@ public abstract class NoteWidgetProvider extends AppWidgetProvider { NoteColumns.WIDGET_ID + "=?", new String[] { String.valueOf(appWidgetIds[i])}); } - } + }/* 方法:重载删除的过程,在删除的同时,把当前对应的窗口给关闭, + 也即把WIDGET_ID映射为INVALID_APPWIGET_ID, + 就是把当前窗口id标记为无效窗口。然后把这个修改应用到所有关联的uri便签 */ private Cursor getNoteWidgetInfo(Context context, int widgetId) { return context.getContentResolver().query(Notes.CONTENT_NOTE_URI, @@ -67,10 +68,10 @@ public abstract class NoteWidgetProvider extends AppWidgetProvider { protected void update(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { update(context, appWidgetManager, appWidgetIds, false); - } + }//更新widget的信息 private void update(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds, - boolean privacyMode) { + boolean privacyMode) {//widget信息的更新方法 for (int i = 0; i < appWidgetIds.length; i++) { if (appWidgetIds[i] != AppWidgetManager.INVALID_APPWIDGET_ID) { int bgId = ResourceParser.getDefaultBgId(context); @@ -105,6 +106,7 @@ public abstract class NoteWidgetProvider extends AppWidgetProvider { intent.putExtra(Notes.INTENT_EXTRA_BACKGROUND_ID, bgId); /** * Generate the pending intent to start host for the widget + * 为小部件生成启动主机的挂起意图 */ PendingIntent pendingIntent = null; if (privacyMode) { @@ -124,9 +126,9 @@ public abstract class NoteWidgetProvider extends AppWidgetProvider { } } - protected abstract int getBgResourceId(int bgId); + protected abstract int getBgResourceId(int bgId);//从背景资源中获取当前应用ID - protected abstract int getLayoutId(); + protected abstract int getLayoutId();//获取部局ID - protected abstract int getWidgetType(); + protected abstract int getWidgetType();//获取挂件的类型,即2x2型或者4x4型 } diff --git a/src/Notes-master1/app/src/main/java/net/micode/notes/widget/NoteWidgetProvider_2x.java b/src/Notes-master1/app/src/main/java/net/micode/notes/widget/NoteWidgetProvider_2x.java index adcb2f7..d1586ec 100644 --- a/src/Notes-master1/app/src/main/java/net/micode/notes/widget/NoteWidgetProvider_2x.java +++ b/src/Notes-master1/app/src/main/java/net/micode/notes/widget/NoteWidgetProvider_2x.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package net.micode.notes.widget; +package net.micode.notes.widget;//声明小米便签窗口部件包 import android.appwidget.AppWidgetManager; import android.content.Context; @@ -24,24 +24,24 @@ import net.micode.notes.data.Notes; import net.micode.notes.tool.ResourceParser; -public class NoteWidgetProvider_2x extends NoteWidgetProvider { +public class NoteWidgetProvider_2x extends NoteWidgetProvider {//定义2*2大小的widget @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { super.update(context, appWidgetManager, appWidgetIds); - } + } //更新窗口 @Override protected int getLayoutId() { return R.layout.widget_2x; - } + }//获取窗口布局 @Override - protected int getBgResourceId(int bgId) { + protected int getBgResourceId(int bgId) {//获取背景颜色id return ResourceParser.WidgetBgResources.getWidget2xBgResource(bgId); } @Override protected int getWidgetType() { return Notes.TYPE_WIDGET_2X; - } + } //确定窗口大小 } diff --git a/src/Notes-master1/app/src/main/java/net/micode/notes/widget/NoteWidgetProvider_4x.java b/src/Notes-master1/app/src/main/java/net/micode/notes/widget/NoteWidgetProvider_4x.java index c12a02e..1e85f60 100644 --- a/src/Notes-master1/app/src/main/java/net/micode/notes/widget/NoteWidgetProvider_4x.java +++ b/src/Notes-master1/app/src/main/java/net/micode/notes/widget/NoteWidgetProvider_4x.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package net.micode.notes.widget; +package net.micode.notes.widget;//声明小米便签窗口部件包 import android.appwidget.AppWidgetManager; import android.content.Context; @@ -28,14 +28,14 @@ public class NoteWidgetProvider_4x extends NoteWidgetProvider { @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { super.update(context, appWidgetManager, appWidgetIds); - } + }//更新窗口 protected int getLayoutId() { return R.layout.widget_4x; - } + }//获取窗口布局 @Override - protected int getBgResourceId(int bgId) { + protected int getBgResourceId(int bgId) {//获取背景颜色id return ResourceParser.WidgetBgResources.getWidget4xBgResource(bgId); } @@ -43,4 +43,4 @@ public class NoteWidgetProvider_4x extends NoteWidgetProvider { protected int getWidgetType() { return Notes.TYPE_WIDGET_4X; } -} +} //确定窗口大小 diff --git a/src/Notes-master1/app/src/main/res/values/styles.xml b/src/Notes-master1/app/src/main/res/values/styles.xml index d750e65..486abc0 100644 --- a/src/Notes-master1/app/src/main/res/values/styles.xml +++ b/src/Notes-master1/app/src/main/res/values/styles.xml @@ -63,7 +63,7 @@ \ No newline at end of file From 54d36e0e1a09ca8268db7d7fd9503d874c73c703 Mon Sep 17 00:00:00 2001 From: pia6ffb7p <2494326140@qq.com> Date: Wed, 3 May 2023 16:12:28 +0800 Subject: [PATCH 14/19] Delete '111.TXT' --- 111.TXT | 1 - 1 file changed, 1 deletion(-) delete mode 100644 111.TXT diff --git a/111.TXT b/111.TXT deleted file mode 100644 index c99fcfb..0000000 --- a/111.TXT +++ /dev/null @@ -1 +0,0 @@ -654321 \ No newline at end of file From 24591160ca328f5dfc32ef7f72d808aaf4e066cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=AE=B6=E5=84=92?= <2494326140@qq.com> Date: Wed, 3 May 2023 16:43:10 +0800 Subject: [PATCH 15/19] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BD=93=E7=B3=BB?= =?UTF-8?q?=E7=BB=93=E6=9E=84=E8=AE=BE=E8=AE=A1=E6=8A=A5=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/体系结构设计.docx | Bin 0 -> 193536 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/体系结构设计.docx diff --git a/doc/体系结构设计.docx b/doc/体系结构设计.docx new file mode 100644 index 0000000000000000000000000000000000000000..ff675f236e865e3ce14a327dbc4db5093523397d GIT binary patch literal 193536 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
@p1LD7^D5MiQLm0$4*HLI&z{K6|}&3 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 literal 0 HcmV?d00001 From 30dde2cba35aa542df6b3b7569eee7a3112fef5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=AE=B6=E5=84=92?= <2494326140@qq.com> Date: Mon, 5 Jun 2023 10:02:57 +0800 Subject: [PATCH 16/19] =?UTF-8?q?=E8=A7=84=E8=8C=83=E5=8C=96=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E6=8F=8F=E8=BF=B0=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/体系结构设计.docx | Bin 193536 -> 0 bytes doc/登录功能用例描述文档.txt | 18 ++++++++++++++++++ doc/隐私便签用例描述文档.txt | 21 --------------------- 3 files changed, 18 insertions(+), 21 deletions(-) delete mode 100644 doc/体系结构设计.docx create mode 100644 doc/登录功能用例描述文档.txt delete mode 100644 doc/隐私便签用例描述文档.txt diff --git a/doc/体系结构设计.docx b/doc/体系结构设计.docx deleted file mode 100644 index ff675f236e865e3ce14a327dbc4db5093523397d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 193536 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 diff --git a/doc/登录功能用例描述文档.txt b/doc/登录功能用例描述文档.txt new file mode 100644 index 0000000..f7177b5 --- /dev/null +++ b/doc/登录功能用例描述文档.txt @@ -0,0 +1,18 @@ +用例名称:小米便签登录功能 + +业务目标:用户需要登录后才能进入小米便签 + +执行者:用户 + +前置条件: +- 用户需要注册一个账号 + + +基本交互动作: +1. 在小米便签登录页面,用户输入 账号和密码。 +2. 点击确定后系统验证身份正确后可进入小米便签 +3. 可以点击注册去注册一个账号 + +后置条件: +- 用户成功登录后就进入小米便签。 + diff --git a/doc/隐私便签用例描述文档.txt b/doc/隐私便签用例描述文档.txt deleted file mode 100644 index 541a125..0000000 --- a/doc/隐私便签用例描述文档.txt +++ /dev/null @@ -1,21 +0,0 @@ -用例名称:便签中隐私功能 - -业务目标:用户可将已有便签或者正在编辑的便签设置为隐私便签 - -执行者:用户 - -前置条件: -- 用户需要登录到便签应用中 -- 用户已经创建一个新的便签或者正在编辑一个已有的便签 - - -基本交互动作: -1. 在当前编辑器中,用户点击“设置”按钮。 -2. 系统显示下拉菜单,其中包括“隐私设置”选项。 -3. 用户选择“隐私设置”选项并进入该页面。 -4. 在隐私设置页面,点击 “仅我可见”:仅允许当前用户查看和编辑此便签,其他用户无法访问。 -5. 用户完成设置后,可以保存更改并离开页面。从此时起,只有自己才能查看或编辑该便签。 - -后置条件: -- 该便签的隐私设置已被成功更改,并且只有当前用户才能查看或编辑该便签。 - From 58fe9bb76af08310bd34bafc7c57340aa66875f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=AE=B6=E5=84=92?= <2494326140@qq.com> Date: Mon, 5 Jun 2023 10:06:51 +0800 Subject: [PATCH 17/19] =?UTF-8?q?=E8=A7=84=E8=8C=83=E5=8C=96=E5=90=84?= =?UTF-8?q?=E7=A7=8DUML=E5=9B=BE=EF=BC=8C=E5=88=A0=E9=99=A4=E5=8E=9F?= =?UTF-8?q?=E6=9D=A5=E7=89=88=E6=9C=AC=E7=9A=84=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- model/体系结构.png | Bin 0 -> 34376 bytes model/图片插入分析类图.png | Bin 0 -> 10587 bytes model/图片插入界面跳转.png | Bin 0 -> 14908 bytes model/图片插入顺序图.png | Bin 0 -> 19360 bytes model/新功能体系结构.png | Bin 40441 -> 0 bytes model/新功能分析类图.png | Bin 22329 -> 0 bytes model/新功能分析类图2.png | Bin 13860 -> 0 bytes model/新功能分析类图UI.png | Bin 45084 -> 0 bytes model/新功能顺序图.png | Bin 58178 -> 0 bytes model/登录功能分析类图.png | Bin 0 -> 16695 bytes model/登录功能界面跳转.png | Bin 0 -> 12955 bytes model/登录功能顺序图.png | Bin 0 -> 36262 bytes model/登录和插入图片功能用例图.png | Bin 0 -> 11392 bytes 13 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 model/体系结构.png create mode 100644 model/图片插入分析类图.png create mode 100644 model/图片插入界面跳转.png create mode 100644 model/图片插入顺序图.png delete mode 100644 model/新功能体系结构.png delete mode 100644 model/新功能分析类图.png delete mode 100644 model/新功能分析类图2.png delete mode 100644 model/新功能分析类图UI.png delete mode 100644 model/新功能顺序图.png create mode 100644 model/登录功能分析类图.png create mode 100644 model/登录功能界面跳转.png create mode 100644 model/登录功能顺序图.png create mode 100644 model/登录和插入图片功能用例图.png diff --git a/model/体系结构.png b/model/体系结构.png new file mode 100644 index 0000000000000000000000000000000000000000..ef21f0f59017a0a39d7cbcc0a87acc40120c9021 GIT binary patch literal 34376 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 literal 0 HcmV?d00001 diff --git a/model/图片插入分析类图.png b/model/图片插入分析类图.png new file mode 100644 index 0000000000000000000000000000000000000000..680216e4aeba9c13965a1f32b92ff922efbc4453 GIT binary patch literal 10587 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 literal 0 HcmV?d00001 diff --git a/model/图片插入界面跳转.png b/model/图片插入界面跳转.png new file mode 100644 index 0000000000000000000000000000000000000000..c96f0e179d246396605ff58d2e92219004a276c7 GIT binary patch literal 14908 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 literal 0 HcmV?d00001 diff --git a/model/图片插入顺序图.png b/model/图片插入顺序图.png new file mode 100644 index 0000000000000000000000000000000000000000..bad871a5b9a15272a24cdab7eada09fbcaf97b82 GIT binary patch literal 19360 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 literal 0 HcmV?d00001 diff --git a/model/新功能体系结构.png b/model/新功能体系结构.png deleted file mode 100644 index 2a5d4f0404d8f088776f4bcd3bddb61f97fdc22b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40441 zcmeFZcT`i`_b(dt91#l^1cZQyC`eUAdef+&(p01<0hFjHC6FK@-2x t2UE$^n!T zKx(8!g@gzKA|fpi3894&=@1~?wS)TAQ-1H=G2Xr7{ocEOINW6Kz1CcF&9>(J%pG#l z#9+f(k+m=wY{T(mM^3|Fzs12|t9{n21iyUpilc-7R=A%wK)~?zqJ!X%-y9AZAA-U1 zqSh^3_#OPs>vrs{I}Env8uV{P*Jbe=Fj!*b@gs-M+^`*9WEG1BJ^JD`O|+N_wJaMS zRCZ$3KX$)7*oI=&w~iKGFFG$sc45)aeQvr|Ifyn_dH&*!?PJ~i8RhTH9*p2 zjpkkIR1Q)0;pdM+c7C>sD`2q2f=CHZX46Lh$xn9pe(g!-Mm%ypYat9g&OT1bZds!N zgB?5gzvIIAvE3r4V#KHT=t8)OGtF~>RGLIA*POkjLvs~vQr$@OpCQzyvuGX;9&K^0 zoPmnuPaB<#e5)3vuea#g2Zs!8#=>A9JQ3)RM>2HWzrK-8rN3;(I!A3Q?N_5^@I^+X z>=taEY;WurfrniUL>}pRVG0H|OP;;wpeU9TP{qgJBFTWkp0EO`e}>?~#$QHH4CSGMRmZ)SNszr23sish8^2ng{D7x}S@>{0T=qMY`QM~2ls4fhI|;#=bSg$ZD% zmY6d$0^KdD7()|3Hb;Bu0TLO4TLrsW!H?~c{wS9*SeVk#IWz8Atm9*i%&1AHWZ%PE z-BSPz)v3vFEb~gbA2t*cX24G#BjpDGk?{0=qOsInLjESE5s&T_v*n~E@l0XWZkywM zyaeTkku8=fTY55fN~JG245W#EqqojsDWtPO)HnBBqAnvX;OeDoJ((=MQ?%1%A75HU zhFR9SM?!S{7D$!K2MhAPLz0(d=xTdD=WMCD_i7K`Q6;TJ7^5>4A*N4R0Xw)7f%hoV z@#(0q)UwrLBYWzON(Cb?o}SA2y}+1ymz}!Ze{ra=h!&;=d9?}!M}Ru;CcRb4ZJFH065ccqA} zb-{w4*Rt$gjW#5*J61>(+x~CAxaF~)@Q`mQc;L}gLa-fiKFE{PS??*XMBau9SCXn5 z)*NrOY$3{<&a_mv2T^$fbiXzU5j$t!!oh9u3|k9xSG<3&S9rQn32Go4g^qp;Ou zgxz9F^s4FN_0c1Gm$$;#Mc61!Tkr>Xj0sr{M-V^q`ZV!l=Xf>Fcheml5(Yn~`|nq4 z=!)*o$)a?%o*uPsF2~GUUUc>F7O`+=`K0Sv-!B(Zw3D03W_FSBan^;!nlT%}kk+|s z-cR!6F00It$=0Q6Xj_!!dj(p2(yt=;`f-WdTzkJ-((CuelwN7Z&7e%;jK=H& zAx$NThsn5Af}>sOd@TW+*T5_SafU{e74HoxD{>zPBJB};=WP*uH=B1cwgCB_*n)*+ zNl846!>x*Yh+B1Dg_lqjDEhh#s6gi6L}p71gZ7)y^2*ML!l>u|q6AL#x4llucICGC zKcygjdHt3Y^$yDmvj|bsIu6ZR8=naKpPW_(fo9z|t%>;*i1bJBS*c6#ymmYn9pJNr ztC_iOvV2e6rZVL$@qR^o?jx@ZIL$kkRn>5uRM;TyJ;gKF|LD#}{o0sh<;+76gJ93+ zu~VF4cFR(U;@+U0$qmGXNdwcxOYD%?Awx=H`3(x_J%6w8@4Srg~Qvj%np*La6r5NXLfwwnfp_j!aiX8)yIlLNHJGfV1C)fs*Y!QhTCj_71G3W|x!yV3M zY^FYC>M`!l?_02$Qa>{z5;z7h*!N-2{$L95(dIqL;sYuYJnMEbO3We7frmxqaoka; zve32}tmIDfW~Bm?4~iNLQFBgh>!HHJH# zphvJb2nu@Iw|CA&lc(+J*U+>vArK=Z@=W_KRXikiw5s<`?qQTUUHZN**XtjlgL{0IKsUFeVI8+c?-5}=iKj7bNmDB z7G?(*!d4*A4{$?;#tm9M^)DyBMq1qf!IAybSFEZ>$Skrmtu(v!v{8bjU`NlaOGB3h zO{I5@2HUAg>l28Xjvf;5jCl4LA>cgL^Wuh3w7q4X&Zt?QsONKf9OULR%_$^DWX3Ep z8dHer-Rw%jgZsMyo(a>WjrVtUba4heA6BRf6$*BQEz#^mMbpFc*vxs;D*VO< zF-Tm(MwBCPDMZ!s!_7Uij}=DEFb$!lMp=SS&C6gfw_`C@XUrA@!m3g;R)@`>^J9U) zEzBuQMsb_vX=AER<~qD7WkhHEIN^`SxLViGxcU0&!+^Sg`3^HVIF=M9J!EaK;?LY# zOKSSP8GqJ*60rqau6l_=ii%UBEB{(QP04QElDYXj31PJGKGaFhA1kl~Pi?g|(qV+|4{t8nNLD%XFf=3r zV;OO0$ZUbn_Wk2P>f?ouRlv9i*`1eg5Zs?Bifz1#vGOy_vKX^Sh_NWWEGD5=qo?=5 z$?Pt5v2--6=twq+_e#P$0sizT%u6dOiJo`Y6;-=WKz8wV0DX9mbEj)(9*O{ppx{ub5dU4JUGJkh!nw$y;Zr zWU`Dy%;C}0I}ZL|2j1wHnY;JX$_ke%O=}OkZ^q7%gsdo!g2HikL^T7E2^jwyqbCbB zuZK>QwM6Q+wCdJD0{j>k77`eCC)4h-T-Sq_oZ++7JNAYPXS2w2)>YQjDf@b)=6285 zvW!sqtT3lc+cjdr0z%>9xAR0vR*QNM=^k+yb1^I$5CL4!DW~2Vec*?-m*Q=RDh_*V zx!&mVDM`lj+20AaLz}RqSmsvcz9gD&raC4|Pr{AaG?S@z=+V_c(M1&?GM&=?vgX7q zA~QKwF4S};Pu1d3qn}=g0*NRoq+~H=^}uQ|^79S0Vw$&PTO2vxon+l;!9r;)W??Bo zKFONC0}K*2wJ*lAL3eVz5xZLqa>B}CkInfAvyZk0oA)PCCr+LV z#)Y+k(`M^7Ju`c{_WszgKrOWe1H3)z3^Jj=IUpa+-i)1Wc_2~zI%MNHoqQoP?L#di z8&K)V0vka9oYcmt$paHQG;oxLhGg$R0m7rBb+W299^0oV5);9z9FAom=B_5xPU z#k9|49iLI@7nMfOjyX(~9TG*l3{S7aDghB}XXE5-CArLred^Dq7pG)} zUe)%h`19--Ze2@-7{v6RO zb05jBQH_T5J%6#qNO{q2YJbHZ?)ZhB2L8>n0VBn}Nt$2x!ut|!N*c08BY^OP6a)$LvnR6ghdERu`)tRt+A|;*kazXKeW4+c@Nrt9d@UsY<^=gUY5Hi6> zBldfT6dV<(7@$6umuyY&=yK7Vo{H1MT9I*TvDe<0p^b*A|d0g=VC+ND-k z&R7f?2$!3?B%k+MB-L$S43oXgB;wgB>-AE|{ioLz!3~ONxsUn#0kTj?0X7<5u9KL z=bS0?(t+zyTj6F}Pv)L|IK*e3d<^OCr@`kuw+Dr8K2P?&O`4*Xd?{I_pF_}oGWBKr z4!Z11Yq=V_t0eQWU!W)mIz7IWMXMt4t33Ar8ZK?Z#$QP&eVG4rZH+@QTJ`W4$*!C5Mthmc}M}DMO9gH>g|pNS~4i zqF$bVVrQl7^Q)#g8%z(Xq`6a?H(n|IBX5OS7P^cRQS7!&FXevzI|E_&d>&=*7k&IU zE7yJI_+MTa5}A2uW;6F?Hr}$Zn}V@anO~z}5rG?e4MYG;GkUUMGq!dIL$y)eb8q@7 zgNPTb&c`@-3W`G7icu+$2qiyKV%!yXdLPTYS}=#em)sz<&l;(TYK&%F7MG|7!L^t= z>rZGrAV~e}X7nP9b?bBVL3 z$kdEC&I`W<7hgmwMb14)UmSAuy?#d+*#S2|`AmhZcc{GI6OH}68Jh(TEdL~>^>O~s z>nL42P0-JO*FR;js&MTq0%n^@Wizw=+#gq45i#e`Dz5LLX{D&2-W2#hh_x>4=GWGs zyv0;MVC7=nTh<5I^i*u>q2;7v7z5^Yx`;>+muk9o9fyM%wYIthQh^~gK2YBo@#0_C zU#isnuL7Z#Ci1UaOg=qdrC94%dow#yS40cEHX4b&ow!K$`xA zS!g3*(f_}`xV0d|;WN;i;uGbI9bxy)oCK_Ww4XumkgsT?TPs$K)fhXy|5?qx?|~Z# zrdT@IF9CjIceFSote%E%_@`y_cw>B{Lxivvap~(HI8^Ey!rLnpbN#T<_o-2V zq9_3gp{J)OJM5O&g0M$YF~wjfvN~K2UhDpP{=j(Hn;i!n3zwqsqLsP0TaB2ERPQR;$spr`to= zc;gxU7=co{^L~r4Ue%+Gqzg2EH`+%3xe2V?rz$nF=Tcn-(R<-TpnvAVR~8>E7AJ}|>X)-%$9rM&Y!;UY*F{2(?I!Fu6MiZwzjBR4 z@tziZz+%9Sfx0*{D`B79-fa1*K~^g+bEae3GLm#5uMzBB=tB!K!Z))@?LFgJm<`GE z(_{A^j(a>oOdqVG&4&?97bY-MG1nv+Ya?**4p#vnkS`GU{Z9u1k#BwoVvYOtZ4wN@ zUP$^zN~6eC2ttTSAoA%N!n;KaOxN-FMqFmNU?NWLKQ_Xvo=-B6ia?ffro@(}X9AY$ zAH`XHW!8ADAs`Y=1Nz^nNzYi50G(2S$W+-^v#~y`Nr&FgDt$j(La)aBhg*7yAsU!I zU+r_%$%&SF97dCse}8M6Z4Nm(&wDt<-OxtI^FppSqbk|*V&Q_twk_Cod7iVjU!@!D zLS(x5DyVOU1Cf{5W{!}aNik%r>%D26D}MO$Jq>NaN!~q`aaY2LK2ui~+PqZScf>9= zSuYi~WR5vx>37L{sJv3-ER1NSTYR73R8;X!X6Pl&OG|Yg|Ib zoaOzytLxR!3g3jC=veAb*YlZ<>aD?9TGk)_d!PY`yAX(rrybra?gvt|dAUFpQTA^# z<@zQ5?g1Y35AQ=z>IU1Va##!T#kxdqomk2K&}S1|j{nWwF4N$iLBzjYOZd_pllZT6 zx@Xv03Nt18|Ep&vo)hu=KOL^ml+)t>d$6!9JbjHfh&A4n-*fQ8{}5DtTWfV*{zDX` zhZ;a_j0pQ*K9u=a!v4{XXgef#CJAly>nBCk#$;m|Q!^F$iy!I;UaRUC$H%PQe6alg z?0=va1%s$hQM5Kr*Iv^HPIquV3yk~Nk)HXK-kN5Rf9)~Pllf;?S>rz4mVJ;?*LoR& z)<>XkO)n1m8W9kd|KK^j>UB%KDWq||fJN$g!wG??hl+{na}8k;9UD6Xo>Q++P)4e! zA9So%MK*+qtJxkC7IM8y{Zdn_3P)y4W8mWUlNn@Dz3HYGE@hap4aFKt62%82JhT6V zqJh6g$zVw~DZbC#cKWZDtHjDZ49@W{YjhQ-={e{2{qA(3sM~w3nVw{ecVTd3jAhAK z2D3W2kEGTW{#nk{n4*BgS+Dt*LGxY6`i=XT8PfFCjtx&YI3vZHj`1VVH+oU%$^jmQ z_gk@3@k(Q=(ozhN!Bq(Sdmsv|SOfm7F8{MDU$Is2UghU6>z*&c3oi<@X z_E!+`kLu;1_SE;W#F;&|W3%41L)(MNNVlG$ZRu+XMGq~|Wf{E11TW=w{5~zfWUfK6 z960f>)l^d91=n=#T* zxYi{b8t(VYL-(4=9<(1w#p+ygfhxK^U>c4Ad~+AN%$I4=i^lH~)VW zf+olz{^93!1(12I5rEwk<|g8yB~VH&R>CGWL8TtSqmUS`g7ry&tgs40(QINcwV`IW zq8(?vc5e{%87O<7-wqNDj}VF`O)nCb7HX4q=Bu$mPsiaw1m15q&nDkb!A{egL2?X< ze~tL|vz|oDBOJ=>SE4ncIxAF!O2!R=ni02Ne5vaJo}qTP)gCawGT$^yLBXscX%R(Oxo$TDb`v<}g+Qc3 zSK%MMfJv{lA%21Rs>c(w19qn&SHR-#Lk#wi0(EXHV`wfw_9_@u9fRHjGePw;ut5{* z*Qc?B-_{k*P^6W5*TPf)>WEpr|k=AQgPs>gM} zA};rS7d!!$&fNe)eVNnlT2Na5PA4L=ciBm-gzc03#wO#Qz5cVsy&sR5ZMP^MJj&#G ze{CP^AnhB0Xc4p3AG5^FMfK)RPnEkESacW&0c?#SBn*JvP4^T;_bnjA~?g{i~v(9M>FOnte_7 zVNhS~jeH8qt=Q_5C`%(kPrNIAueOD_&qyHHTfh|{X!Z2Kc@W#GN}cYH9nR*|gmra~lr54z zNmyQSwj*DdifA5hb=s!09rmP!tIwl+!;!Ng1XRCulb+=AGh+@)&9Q96Q_UwItbT_L z$Uw4zY75mANyN@!$~4=4N-GUXe46JstQ5ps3T9odio$jXLoWcp$wjWz z!eD=Z)IHEt*fD)bPyoi`zsm!(;C{Z&sfCfT7*+DNXn)Q_I~uLk9w0(`tAs0XwR_Jg zR=fxBkB<#{^BsN>3gGgki5H%z`dNtqv*M@uTpaPougaAIntBzi|0NK#KY^W~0F}hW z;#TdDli)dcZbsLm1iA7i5<-U@Y=E#oH(7uYxLd1nl%m5SzXMJNdY`ciPz`(%E*iY41jsM}lYm-3Oaq_> zrXZ}yS{P#|&=fAg%QFCooiOwy$a{=W#-{@}%N2@fNGN_80&r#vaD9KD0~FzPAiuIq z;V)t~#C2`UBQ|wOCTlPDy?|&1nab*ix>TlLKC_pYjGv*zlEIy1TE;gD4 z5R&*6EV(zhivbFb1sk(V3Is9V)|G%;ML7;u8;1jQY54h1vD*MBjk^HIEIe@t1W$0+ z%Byj+0B^JOimMRNYgd8%C;3mDSteS72ls8gf1l-5AXSGrXJM4L0G0X`Op`2W0d!DW z&dI~Pr2-v}P>5)o9(EaPTt*;r1tw2XV&+4pUI}(2e`mq7Iw)jniY)~NBs-g>aZspx z;TnGLvD+KJYCGTg6dFm%#eKHN4;1y$NXO41Lo%G5kV#vC1DLOQfUFGdT|)q1I?IkD ze~>O<-Z&;{%%1SyU`lZmI&QD9+AfP!hTEjx#Y9aOa5jD--P zP6o+gdYR7igJCpXfUFA)4GYP1DX>F@a$%N`efXed7Q|g;pjn|vt&46&$vM~iJM3YlN-57w-ChH3tDCMB!%S=4F^BMUr@_;qc zdQqsGzOyt^+u{sT38N#Pq;+XI~QoULAeMizZ5bhPM$=&&`9ig~W zA(IMIW z275QGGybm0HA&VIw&S6&zrpB8lz;IM1(ml?l`%S3S6pwS+c_=Y24JIV>=6LC5o~B# z1VGg4!lNPOYz}|N4BBbZRte(^3gdO_yvALI0fkv0vVn!vZNfI5hjxx*;~BYuFgwxR z!ctVV$OlMQ`b`Q^dU|PRtmHd-<HF?^W1rGl)y)<{;d5W9Psy>3Ax_)i zx0;~+foyc^dI_Q3f)X?D-|!e5M$dP-L$<`OHSZriH8>PoJ z_ESRxk`xhg_;htnkY`c#(Tp%5YkMi;5%+P3La==hfl7@w8;9rox1P~qOeeSMoWo3o z^n{socrfzV9SK#_X2}(H*`KAips!gvzwkG81(jy5+t{UQO%Z5X10g_7`7JT;0eCp& zLx#f9-z+kxyZ|D?&TlD%9eeLJg|c%^rjSFu9)geSDeTv+A<#V;886b$`O$OLODcA^ z%WGy-q&{9#Ht*SaHk^Lz%rfvNjoo1;5vZDoI+1|^?kWR@`s&Z zJJp)pO2`&J@l5m9$Iq6R45oVzqIMx4d<5Xz96e(p9l;SHaWy7-*lE8cU*?Q%NM`8y zd9WqNN=q{6*%tQn+ov%1Z#SpDiomTphFS_v<}~qeCISJRZgBi0Y=EG+H#-6QtT5E! zqrUX@!t#Clx8TPDyINc2E_3W+fzi2&Eb$$w2SrMxFb3ptHzt+=fabvl1to^J5@1zy z(Ybi)4WM2K6Uqw4*vB`@9d;TP_)i5cJU5fJV8IhnMGjqM_$?r$0aoeQrGhr-58vfK zCe0t%TJj#$gE;tO*JQ(OS}H14+v znjX7h$ux@E(Ru~^uq)0_ykgdrPPAL>uGl{We2CQrPzc@yL3?47cOgRyITBz@l)-rc zGQR&5c>LY-{5N_b_mZOaOVo@ckKzNT{73yS)kfOJ7&^+f@A48&Iivo0#s{zt`N4+ zPxx~_1B^uHVDadjSGIP~X{`)Hn;VS&fKmxQ?g{VCQTX&n9iE!Pnk2DPd(C!zP@h0f z-%XiWk8Tb^@pL^Nd{nL^VQH86WP9?Iq4A^JFc<*VWF;Qjx|n+@&FH~9V3*IT7|e)n z(<)`nc1Nd-SU&E5nfj6*8gnJTr0A+y#wm1DFmmohefP&YL$Pv)>bi}7!;{XY8&|?k zZo+2e(^dS#{I6d@QZ_I#h^6(XU1pN7saKO~`4V)!8ybR%BA)C4NwuAhAFxvobybhf zcFwxIGDeIJNKUmlCZUh?MF=lE>$J{uYxttJh<2uqU0gU?H}8E4cC&C7!^**00Lyco zrZksgbT7|K5&lNCWcF^c>|7Z0%bT3M4N1XesOm4I*lN`U^0`22L?t@5Bj`n3a^ z@wK?_+_90Dl4>5a7r#VyR@#L&Im2LK640Rh*h=ZD>)IMOI>^j-&*Ku0cC6ocH3CfF zbKz?ZxzBJ&v|;gMXzr7 z&1C7V2@FOCWwLx;2}|vkGsYtUu>L{OWcD`m5t>_H_4r%9%E0FV?-Vrg~E`;&gPt=r;zUdGG%v+(69Qg^B3{z)=n(^IQ};|`6_;JVZ=mtAK&iTOe~ z7IvlfCZ8*;qG!nCp~Dd!XGc4n_d;h@>KXdv5cgmin%W9acLJmsw$Fp;@R@8_d3C+* zXlK{GOofj5x19LG&HW!pWWNASJG96)act#2r#~C(Zp4>)?l_&khQQYIDZd)7f+lM} z?ELga&;(5kk!UGVf^SG#FRFdExLfQbnHamjsHMwgcg2C`7JQs#myR`{f(2ql`Kzw- zYSW*IL7J=xSIWAFIRdpXnAjSP&uy(ZxJBEsOzJ@KJD=dyj|#@>Oc2hZoV2qeq=-Tx zBfgm;a;x@3G1OO?1Fp7a)i|x|-m`c2Y^ao`WdtldLAxx?-3qqV6;ZH+5>Y0Uy!s+l zhR8$B-1$DOAfre~{M2rIZCL+l=hxSb2G{xW-M)r7s-fM@igBfG&OJP`(k~~1>pJ#P zb!WpIiAC>$q1z`dQLR~;Dj~EwM?rK~-IvSjXGYsJ6yNm`hQF*XE_-nt>Eg5k#14nj z#lqN*)HrtLL89=)`i?Jqr4_O4Yy(v<5w{2^QDuTa%YsN8$QB1#1R@ z$ERlWc7%;dsEywZt*p$*eN?7)g!z6Gw!4oNGt$<0tm>(kVuubRsm$SPeRO5OTfG06 zl7yN>!|E4a)%EeFO&d638cX+}Ai7VAk+zfZha)fH)}BX{e0Y=gWqQ}6!}$FrI;gI# z7n5pZk6X;w6*ykk)fjb;8WLWRbPZ4{`xHlfbbkS^EvL@0+rJIjEGAj(J6r0dU|FHM z-Dji)?F{GP=HGW;Ewo*>Ix) zFsmgGk$i~J$i#TvMz!cSrBAhAPGr9!il_}1_no-!-o^QitAGNK^UC4_ng~>b{6G#i zp>b`T4zv!+JhlNxo84z4x8kM-bOkbPKVJ}DfZ+4E5n<&%sMY8Faf&esk?N zsC`dr^?|UCJL8R(69CH1l}k0SF8L3jGOWFPMgwC(KP@ly?-xH7-!_vz0VRu|R2c{n ziXLl_k0E*Z=_2jrays#~@AnzOi5g(JxlaM9x%s;{Xl4LrLveX5@DmJVBqbn; z`s)Rhg9Rzm^Sbk#Ya9p$2a=S-0O4;jfscW`PJpgJDD(3L_0074xm^&$KzI$&l}5Lb zy9L1L&{Nbifugwwqln9m65O$%pJ1?DP42zFUew!`iGcLChLC6pPB#>I!KX{`VSm1Vu#jD5Wl96!0L3>pHSRMXVGhKGBhJn(f$ zNhoV-`LC#XcXUq|jgi>&{?3T9k zb(oik_NTA2@qc$KXndJB30J{s%nM1(CQryFtGJ#O?nz z1jKH}N_XwqD3A0T4L4%;`ZiQG(7{Ti{~lQ z;0&YHTrBT-SM5n?u|9#90FYg8{(z2%ZDEzw`mmcOf+ASc1Rdd0gU8vFbha|eFd;%> zCUHbu+e=p!>H9?Ue7mr2PRXT3!XJ{1^T)ZmmwxmvbzdvF0*76f@?03pk8Wmc2C;N3 zNTR{q&z+}iNS@aWn69oHQGzE6!V5m1pSzVpn%WSqZCBhaG@?2z=00{V-I$MXznl~c zud%k$4zf}%nT^{)z2Q>1iY|htj>m6q=_mspA<2PT8_f^c)`7S!I%o`{! z^3OK#gcFiLKdqhbY?kHOla(bI00_rUB^wpvoP2HL{g&Tg462zXY6ql3^@z@uhtc`8 z`yF2&v|pA`Bd?e6oRBFYQ~$sL*dsVDbOKZ+xh(uE**W~#RZzdpw}Pj6N~m?apB-5i zIzeIV(bn*^Q~7RWQHza9?})D~kiMHGijQB47#1V+b@!`iFjVJ}7Cw+JXQc(*rA8FJ zFlhh!qA22$iu|*aVyfC{u?Imgq6@dkR+MKv2KX|ci93<1t@}pM&N7PD#Mu&D$1r!k zZxU@kw{0ct!<*ZO(ff|Rq8=ExuYFl{H}#CjVDhuavQy({krdJy9o2%dw629CXx|cc zx}e(Cl2^wm8`2iP4Fghsu(+lz2y~OMf>J(LY?ck8!#M*We9P{ASz*8`f7O@HP@J-k zutfD_1)E)Kmh7L)b_Z=Cy$ThnAWQY>-GpV0z-Mc_Q7xJNn!<*fy{mMtEe_>~*qzM3 zoxfA>dj1wHq~lHV3$>;JP?IueSi3BxjFc!EcG&6Yxk~N{4{&}v4E)F^@k_8 z+HGV?Ii!Xd6^z6Um6C-%Wqp~=D?NjN2t;`!_+D+s7P|!^X(|;@F8^K~)tUNj4t}gM z6j^|zpMs^8>(8&RA^h|VFbQV@sS2VJEuIm3pPzlR8Ed$kYkbnA8JBl5p06QTt0V9% z?h*iY^an+CM<}O$p4ot+5Q9_BmSn^w;o?Ie*fhF(4WYux_fXy1NSw8-1jJk=9SJpl z34^1Q&bOPfel6T(N)-QC3tDQgn6~@)LJT%&O6niqFVEH%E+3lffZDOf98mKIdZgE8 z_I;x4e%Sg|ESn(T8T^32<p>Rrb9dB?PHz8v#E7BDf40H(adab;3IuI5B5i2_=)_EYs*`qTnDmw@%^Ql1`;i^Ml7GXQgC8_4VsK>T+T9o+P|iR@T5{-O_N$M zqS0-f&wq9dwDKf)W&&9LQJpIV06Ge`{#x3j324OP;rT{j(F~h+GjuCvd!hCksl_Ux zR||hsUY1G@7hGCmfuxHqn~szRZCIu4Q&k+hGLWYVjR4uR%p%j)_#L35YIn?4gknWU zm=;1MYIOd14_bg{E05*OW2nKW1mw&zhC&PlI(lxF+;F~1jlVADHT<=Do(cLwX00%N zY|wjdFM*dbIE)e$XwEQV(Lh)^g#Bx7K~GU=vf@~etiS587RMfGDla7T zD7P5H)Mx^b&$=`TD8JgHEpO6C_tCBI0u*fwbuS@z%9?zke^KWRXC1MQqS!GQ|zSNSf zh93bdIqV_BtXs2)hj!T3_Xiqe57>5Y*4x^18}r9Gmk@D@vHX4hUyZupdj9s7Q-`ml zoxPt7p#L>#Gl}XiLg!6Ds=9gZQrk-!6JXKvz8kH=Jo_7?egW4;bJsC9oArYk5qJOx90 z5uoMbO$%}TWKSqzZPkmW;szqIpZ%%0D3)7#7tXS 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 diff --git a/model/新功能分析类图.png b/model/新功能分析类图.png deleted file mode 100644 index 47203ecfe08e98b93b9cd95e5eb23ef9c12248c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22329 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

w`+qgTXQiFL$UEOJ? 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 F{{_&bIr{(r literal 0 HcmV?d00001 diff --git a/model/登录和插入图片功能用例图.png b/model/登录和插入图片功能用例图.png new file mode 100644 index 0000000000000000000000000000000000000000..df2c85cce37d276965a2f458c2d466c156f719fa GIT binary patch literal 11392 zcmb_?cT`hL`|bu*R0I?}DoRlS>7w)!iU`uANDoz|cO>*KDA)iY1VkXHfRs?AOGi

qZ@7zD`T6f+12aA=xXV1L#nfHBWp6ctWGaf&G9D*Q5O$}88 z2%=MiAR2|EwBU(0gS8|0M}sg>SAmLq*oolBA;%j!Hz24qo?-XiVetEymj)aGK`cJh zKblDgt^f!U{!3H!hEag^^2C(k1!4o?*WOT%HD1s(*E?Zcrc$!zT;}r`H^%()-Y!21 zWC!F7A9NciF6qiHMll;!MST)JhAfSZZ~tI>A?@A={83xB&Ilgc)3+`vH<`06Ra0P3 zOtfifXt#-BO(ct}nny2rZB{GoRiIZ6%IJVR$OHm3C74_#{@9>J(9?5~Z+XeCsB95~ z>%&43$T<=$PH@q2X-Q+KV5i_J(RW*u<`$an#I%M(@Pzw4$y^sVDM^Wp!jk=Ootd#$ zB?=Lyj^Ph@3rVvUYsDo6wLYHhlt^4qL!z;gT-{FC@vjZ~d7LySmHSwYxL%_5Lscso zh!=`=4Md1i#rs(#&ER$TH>+dt1}6SR|_WJYCY_;#dq@!l1Zk9I%c({584pTBY8fIbr(G5wEA>z zWtL2a)Ls^u?@!3X?EHRXG>W_>I)QL-HVm`b`dZZSCTo-j`g!HA2|IVxSlN8^lzY4R zF24F0JWHvT?LiSyk)PO1#%M|>qlKG11r3vIEJOLf&R&X#(Wf85vEpxew;0^?=o5p< z5BtecK2^$YakoX^*gxMVZ7*uWIGf*eE<*g$;+w*!E(1DZvCllps%i(Plu_II&mO^u zlP)}Z`&!mxXL+$SeD7FvT!P+-(oc?BxSZ4bVfA|=dFc#>2DV3k*h|b#1nH|YC?mPy z_bW{e%PC0F)l^C;E^hs)WluEfTgJ*vCJ-X3@~hNFV(PXh>LQq%IGPkcO7W$gkqjav z#2xz`F*=syt2HS6*EFr-uHSB=hp2*$+yUFllSD#DNP^Dn7;uwptUFZxqSFTN&?@RYDs&-aYXUlLhz2ey~ z2@xjk1+U6G+8HqizsTRJ=dBh+e6RSfkd|_SwOI;rZ!-2vXd`tPzqSWma*bKDLk_Sd zyGh!OU9vbi5|^&}fg4Lh|AGB_Ps-X_sNo^`L+RqJHG@nY^1NdSE+3G~&-bzNQe^h; zNfO^;Es2AhLSJOcwWJ(S@gtSxrnG3@&Klw6vM$!yF2Rwqwhgr^G53+fz!@I6`2b+( zA(A?q5my+cAhvtbTj`G+X;0QTkmfoP$n+tf$A7OqSW$jyXxq)_p%FcozNT)n;}DDPR+ilb9*cL} z*>Ys|$YP^OU4n-94FLm=F117k-FzdyvG;@63QhFQH=5xgKgGTtn~O9#+XPR#<&63` zdZ_DSXMu1jyA`8(dlhkJH|Y6J=A7&yqeiF9$VaShN2;>#Ozw@vpBVVGV<&*JM@{rJ zC%fg^x%y7en1a=uglx9uDoEyzc~G)M$AHNl(K8X7ZRBBXn@T`73QmS z$Q6oLn1bUe;`Co-5*=bhb1emvvPeSA>!N|EHNPgUWg`oCIjKG~F4yiGb}wKyQObBN zvRfR#=Y!;O-^}^#)4lJ7(dnb(9V?lO&Pho$2UdTwG!h`)rMZLna;1`4?sWHRUL0}d zz9dfeMpNiM3X+t-^y!;7!VAJvlgtACi`6A!Z{=8`^j z%x)aH_Lr-SmOA>Tes=lSsVU0uuU<_(NDvT)>SLX2G#e8OqwTJc%ZIBvvDONGy?)lODo zW?fU~rkP%a!`;TmiGICzr<-oze6lrk!c~ zj!Lb7(j|`^i|q9;4QKkz(dA=sD^qVm4RNbyTfxC`6*H$X!Ij%j4vY31!`p>oQGAQ) zOOplG*$DkGRqqnpj_1`M*Fpy=?aR`sDktM>_gj<>xQ1fI=klfd{ajO9={pPTjwRv0 zSK0;T7pSu=J>0sqBYtirz$k?<&rGsPEM-y@b4|%&)sn`rpUDfWlse7Hhh=Q7Z(j2^C@ylr@$D>;ukPUoOw?Rio%PF1D$o-4h&E zh>cILGlldJluyIiS+-hw6-{><)vTM|Bc<4O*X$lox#!zo(eIH^Q48O}GVd37j_qa; z!hU%ghO$22$(DoDT6Jcdx_XB6Y$Y()VTWr9f~v^^wXdV~O;J{j?M@6<_e;2!rMR|E zp+t%MS!f5PMjJFDRDXDcM@ZH zv&5h5=To4?;SkdEJ#qOp;z=Bg{-E=;R?14?E)ro7cgqC%ZaiLsgxX-c?Z?M8jQkqS ze$%J;S50l4z%gNwDPts|VC|esTy;m-#(t>&$5(;m^)Ph*lzeJFXU^swAqBgs(yM_PT6)N<{?mD8p`J!NFDa))pg`R! z*B(3mCQTD816MMYusbx*z?ImKt86u@m)j5SnOxTC;27^uQ~BcBC#Ecx+EtL`V+l1 z+hcD+uSs838d7Zguz6(ZxH1~K{Mv0|z?&B!+@T?tX^Qu{aOl3Zx}MuB!bU;y^X1^v z+)~+%b4xWnrcNSQUz6yS^XYQK=yPwG=HJJ>=hfo;UFxJakTR=%)}v|Nb#H2QDj)T( zz}ee;e`a&vV% zwoB0T6(%{mb|(MJ0z$mlB5P=oTxS?NdqKF!1aFdNj%xq(k zs-WwEsf+}JUNE;isvuiBho#r&D5f0|+xRt5#&>gL@?xf!;tk}g??hhWKf1gyq+pbG ze^R>2j0Lg6f%_GRC_h@HLIvke>w~p)1sT&dT*s&WP;%y8)KV&|pPpfZM&%nPZ;fR= zla)~$mkk8|S9C(}2pyxqNOAk1PSM%Ozat#f#~%j|>6yAClDy+eB{?%MB>7#DUh-Jj zcA5BXnRP?VQ531LN?LQBe7gPSMQzb4iL+L3Rb3k8pv(;!OM>PGMrtnRVQketbCd0-zwgA zvR4|;`{7>oP1%%CR2<(x<$vCMg}y&_xGpX1k^Nq2kGu+3C- z3Frbc>gs8FWmHCLx)r?ND@tvSIpP*f{OfUhBC+K3y^8nWEa(ymmYTW=_Si?_$1rm9 zzb&JXnV2$e({k=(-DJy9$*mglq|2tKe`hm{Z%ne4a8f31E0M;kZ}NK4`nL(R{iftj zbe5+S7J*uI`LGC=RvgM3Z|G7y91%oEAMTm63Tcv9jom&br>lDcqcFxNGvOuGQKDyln6kuCbu9qA@_i3i0vH1GMX8!tG8(nHtDSbGOrAXZZBw zYQAVXZ}nzS^19@X-Q^yAoCFqkD8E6@0F5l$L@zTlRm)UdSq?hfU z@N+Wk&LbZu(>@6PoT6H~)c`+=8uK&Ww$dRKEZd{j;d^d<(Te|*^3QeWc!a7)L-sX_6A)o|X})Zw0I!m*QR zlxO_6)zC)w4-RLHbSgIsk>n^BUGvF$9v`{dcMV(?dj_C49sVJd>DzA7<;xrP7#4F^ zAgKcs`mDO@>KWFdl-~;Xn5?-wvxQTO?NP_Q+mp4cY#v|9Ja!3t>4|}b8sch@PR8Ag zI=P+SI6eM1s(D&`@6vA&7v0AE+U5PuXSrp&I#&Meidz*2~N2=p8ZJ+ zSF{(9Tsl5rRHt2KLeF{gBKFcp@>lQsB3NZBXc5$9b>Ta`fda10opx{(Z}P)hDB10; zojk6iJ{T1DR}DX0;LXfq(6y?quBdfh4rjX7>}vNEh2Qug{k#~TN_K5G(X7%bd)%kp ze4`B!F~KkXxGxi3lt|jON}Nl)ki7ORCIW6pMA@4q+YOcJY~|Z&^NewCH7O2w@C7n` zFYJ@b?+D=FkDd1Q zp7vWtfW9`l&0PJ%nwzmL`!{16IKxrDNnytq$i9Pn?qFFa^`e-kmAeaTI6d`u#W<8) zWn#~7eD%}R9G&~@-(MD!RW^Qb&Sp%H@=+X%8iQBh zxpv(@wC=kL6L}z=9s-U~Ic&zNM2Rt{tAd{@za#M^NbTI^+>PCp*3V zXx2GDro@E)%B(?V{H?3wVX}&8Nt~B>_4I>V4f<5GuPQxB9ag|u7bf`}xJcjjFe5V* z^mbe({62gl+fTh5bxHu9W#3>DoGnPuWb>c9QH!YuoKLpV4oXqD>29S+8rbF2g)v5o zQ=3bU3VP=UOZI=Zm^3O20>pD+YQE||EjI%vFEvppe?yM^&p>374NDl*40nYl;e z6!SLj=fLW?8Q#Pi^&ky$TZ>jww2bQ>$sM05WPR;`VWO4M-p&qU?vusU8K`SN_A#aO z;H>47KpXtLx%5vy&*|^8#8?f0t+9tW;ihD9IyeA3CJi!EOXqxug zV0f+Ca4F|a%J`1hY+1fjR`qD1s?3w>ly@_TFw2F*f6= zOY)V>pUvc}s)su{+_RdZho+Z+6fIAMJ+%_+_W4`Eml5jViHSR28?7ZueIoW1E(TcuauAuEJIjeNgT_!4kqdWWj>&@@I zT=%Izoxsn5uFpZhZe76;^cxCfdRUGU{o6MmPY6NHTvW>B*T~#fqa(S5y6zTu@GL+u zcxIz>vXp;~6M__PqN5JrIpm*4@77wMd%=phXrX5HHpI`GHu8I(n#K70iKO+LV0MN; zrpBCk1s}#osZXIH4ik z-@887g4LBF@Pw5r>Y+1%Os!)bDce`h)E)WkiDaWX{e}uUYQ*8pp#1ht8?5l+4j9H9 z$n@U)kKqmee8wKgbc?DwWIQK(Zr)w2U-D!l@T9#N4W!?OxE5_JsQqHG{@3NQ`h1`U zG$;E?r91c>T5ADJcK2)`lXZ1+Y2!z65GN_O2^64J^FtWD-i1sZzx5c-MswUI4W!IL zW`_y>F?;a0chpty0?Y|uqADo^iotqbc0KLH3urAbs;kXa(NU&uc401GD8qMTOgBTs~{>SmnB2m`p-mhQLvcu zQ}D?oKoQ<~@n;ZgAXBcpkWH=FewFLRE^3^QM#5qYDL-*8AU3U?)Idl>-)^B>1mJ&6 z1kx?#0yXl#gE}ca8gy{L?NkM(d0rB{%BXSMtjUd?$p-SW%+~&o-DPON@F%H{DZo)b zjZ~_3w6Qx5S4<>QR#R?%P0E80b2|Zpp z&-zzzvmu~PL`(ufpS!Gnq?fDqZ*+ie-#|xIfrQc#21!Vb`UrR%;sa2hw7?vyP+kbK z6hgctM0$wW`o?#GWWGlgF8VU|@F+;9ETu10r@gp^X2@$JI}9oR-p)Fg0uGLvedcPK zOSSBuK46)rrYW?qjAlp%4pIr?grI9&fmitl#Rdsk2`dS*RG^s_pQ};+c-EZw zKlYD^e@O`W7eGK^YUni)$zxb{P)cB>1 zgb{>h%iH7jU+!XnIuQ^Uq6$Mbc22>>ArD$Sig}s?U^Pz9e)3 z)Jp>RtZR@Fb`%Ud5!hq&#{(7rL@R9^%rP5m(^SJjr^)H}5{V(3ZR2PC=WD1+gM_`p zhSu^~j{!MP2?b-w=>h}wF#vI>K?_}-lP&q*AtHhC| zb@bY0s=*=#6A1PAe_@33^EQO_JyZwFEO7gizoQc}S4OWr`j_#QLApA+0d#)gh^AU# zx()m$T07-rDXss+6#yiIyaMKG%1`Op1N1U&of4zQ7<>P*`I^GYd_kKoQcN?|^WQz( zdk|l}-_~0NWu({akj+c8+F`mX5ShQND2*x1V!s#vyZVCA5B>hlMPiv5KmULmkp6|Rl=3Ret)&l=Qk%wsW6Z3F0bKl7)X3O>>p(ClMO%R(IQib0sQz9?J>H&8 z1?naW$*_XAhR^+}Z+#yuSr)(Q6?MG$CmO`T)c%`zNmE66x4p%T%nL!jLq#E)_bowQ zy7x`Pz$tLZv{@ivE-k1-*yO(YI^1i>Qj&n7z5{fCdV1Kx!&W+4Y|3#C znL7?eAb(vtReWNm(9?!FxwEy)b1%rD=AQ(d769_VUDv>8b(crq3T9Z~O7QN${;n6t zrAynWPLCL37s5UT7By9MZP?%Y)f8~hf-uPs*}GGirF0rDwO=m?)=7y=BgBcTZrVD) zo1U3or^Z{r6kxE-I*WHVL=P4^T<8b07BnVX9MJ%_!EOZhVLQ1J>L&OzTWU`Bm&abW z=l-st>HV?XTPh8yD(2zkn=i0ez+U^OFo34-Ew>}?D{O8~9S}+^Yl<3qHoCuX25hkN zx=h~u2ML-_yLTckJGwXM_N?zxGA-G3Q9LzDO~0qowj?ogU%6lX2PGo^*hYA{3!ybQ znsisXGGKG1(-o&xh&|hB^7d7~9{CkD?sduRR5*lMox{=MohFR~@@J^H1GAsAw*v~& zW)S{lbjZawfmE1_?*f(0ALzJdb#iU|Pr<@)wFNkC_mWxQ)qf%P^o1Mk2#c*g)UWD) z>N+UX`87d`od2thD}%r;i+NVmAc%Ut?atBOFP#r|zJ~A5sEIwz9lK`v{=+XWy{jK} zkA|2~785dsbF;QHIQjr^a;ENtNPMQI&9o^a+4B8M&Y%q?tG6V#Md|Q;Vn^${uy7Gj z8l#m8+H(a)_;f9oq@O?)Px7P#HAs&}zJ{d;dFHn!1p+jG+sky?scC+{>zH)m=Ug_X^dEwN9jDG_aw1lq-xh~|~j>?3YVP~gE{!1T{ zOBK0ded4?R1j(UTF7kN8cP&sb5Yv*V3ZCR~Ak=`Z5L8ZL`+h<;eayhrhhF3d>UIY& zEHMB5ReD082Z;W)Rt9SBKu6cesd(oS4#+h{D_O-&=rDS#lnEDcfsi@ zcr?-mE<`{M|6g7(B@n_C$gD%$e0S*gLFomi@4rMI&sxZ&=E+A+w_x5un*(b22YrXn z$%1urZ_d@^KKJ(s3-6`e9b5d?Mc(%W#W)qg(7^K7E(9`xWODm6wj7k;5Yz=4i~rM$ zvG(~IbklzSy^?J$>PVR+WH(|hJbVyfPmtHaWvT(#kN;m!`!7M3@ii*fH^Xc%l`2jZ zialNzn5(ID^FF9fsFb3}9|2m6V>#Lc@p_lA?tcwZus{lB24EZVSK&YFy8b_yT+xU> znR;8K51WT9XWA2ipm@;i9Lb9}X=il3C&@?QdCdt}DH6$l6>u$1W=$ViJj}QzUVKF7 zlc*HZS<{@bTBElgizW>uPo2@;J_TSNOkn+%tpC<5d2B=l{;qEkRd`%4Wkn?42Y>t? zy1?b~5@`Ha1230dZBn@}QW7R_%6S;7I0d>jI>A~v>Vfbvg&BVfmWak(sY~}3T1u>I zyc3m3;MT^jAK5jo`~95hWZTFHptcT}P)f(3=>>4l!};aFWj1hdp3Kkv@RnLNb8&Z# zir#nX9h8AzmYNm$x9{w|m9b=iV${%dx{u}(RZ8mmQ%N;pv1&sqUqfgsv z<@ANZTg8Y>5EEdAMsMDak@MldVYj|T0+$fN6ug68^Zr_y???TtD{_0AUfw}2*>Y%iDPNA_0t2zV$Qi0vPnB_|1g~4IBKh_(* zk)aYA;<^v4`+2oW3-A6{KFvi?Y$#)RTH!hF?I!^bG;LPkPb%+y{Io47Ill~|eF0`^ zW}AJLK*C=hra3B1W)E3$7t8YGupSfycVE89%xXnWAf4oFDsuG~4z!`4l3)bb?1LIt zM}E5*OnE+httER3egH@)A%6WMsBEwHABk(3|8kpZV?>kEYdAu=)ZHG75`THe63HSZvN+V+COBP06e63{xznxYNy zw|%$n%c2Al=V%QCao6wBMqmT3V)x>e9$TeZKa;aoC<<0J1)Zx9@$+||zRLF85bBK) z-Y?ooLlcb9iEqDw)HA=wMVof_w_Aog{n;E~hiZ5_Jm=Z+=%(rCWPhg%VKoykyn1mE zn)UNru26B2{9nz9%9-OIKF%va{RxC=1P+#)IBwFI)bm#q;w`R+Xs1V6*|Wn=Po}uI zcr_Bj3Z2!~emNEPQ$)h@LBupz_FU7Wjp(H+(2l_I@cAPz45~|W7mL)2x-^zcJz~u9 z^W%BMcqL}V6n*X0i`6;4-1yU-E4ls#noZ#FZ`08*l{SGXBA?nkgGM?rU4!sUkr6@p zD{XuvwE{W5tIvzmF`*wm!hDbbwx`}#J2$3qv(iLbaUST^Q&`NK;Wm^a$J1J=nXm#h zaeXc{11FcehC4Lqtkk$85uD_~r#Nw~Pf}@)6d=hpRD&r`*c`c>nL~H?O$)x}>}q2j zC@~i)whmjw9~?tbJ1NE;i<$HldVnye9>DKySaoA;3;mq5b2b&F{CTDFSD3EgTfckE z%c~x?4bdfmOtY6I9dA~S0Zed>9k)oD%TViBjIR<$W*lPY`Vy$?Rp;+LIPeBo|+%;3`XD&6*we&=?CFTM3Lc3Ac%dah=a zd8V5=hkUbJ*M?AXylJfOITLgaWZ;1is@m#;TNCP0%>@4-t8uQtgOm*HhLUc<`^J^H zc4KrVd*9Uk7+KASjR!x|3wjBdpk5m2=1Xvt{P_O0D>scu3xT>EwiCU!-lQ#s-gSNZ zxmEu1`>{oUE^b(WA}#^vH{E{gL%lR4HCDnKcy)3vVDZ!1xg$s5;C^QIhFSNpqIJ#Y=GQ25$E zlAJsW&d%I&tt>n;lS5PKhn|?{D$xIkKw^DIZM}mDd5Bh-aGUrkE$LdQZ&BSk4fs)p1uNu6@JYt*oO3UG)2R&>tTjJQ>U?_Qf|pxOC`O*#kk? z@$Ot9OXa20)Z_tCobcx&ds&jgVGfxUrrb3|1crv5-WZG&wR*jYw+EGX1_ryEay{pnYh zI2;%9febXv1r&q3EELx_G$aT$Shq9j@QF@X+`pw($wSnd1P24KQ}8K9uM?kXnrDEx z{a1eJX6SI&+|!Iqc*N&?OHAja3VQc7izD7Nj76t&)tcW!yU+d*6BGw@Pgl?s$GuGH zIL*7zCG4)XaOay#PS>`?BwzJZTX5s<#Vbvba&Ce-#o?k&?~U*&N1zJ89{;@RTWHcT z%F$>rq5-bK@;YmhIz3qh*JLrVLlyepZZ2x?`Q-ns6QLwadCTS5AGZ(0vWp*%FuaMT z>q;(P`Z-q+T8uE(c~o5R{`y&8SViM{3Jt`m{HL}Y>FGJ3|Lqoi@QK2f1xijxQ%zU3 JSmkcy{{s0IX-fbA literal 0 HcmV?d00001 From 7a21f6a181a026ed03ab4554c7d5a0f1fcede344 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=AE=B6=E5=84=92?= <2494326140@qq.com> Date: Thu, 15 Jun 2023 19:28:24 +0800 Subject: [PATCH 18/19] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E6=B3=9B=E8=AF=BB?= =?UTF-8?q?=E6=8A=A5=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/01_陈家儒_泛读报告.docx | Bin 0 -> 370669 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/01_陈家儒_泛读报告.docx diff --git a/doc/01_陈家儒_泛读报告.docx b/doc/01_陈家儒_泛读报告.docx new file mode 100644 index 0000000000000000000000000000000000000000..37ba7090a1b8e8ca021f1bd96a908219b5a5f974 GIT binary patch literal 370669 zcmb5V1CS_9vn@KdZQHhO+qP}n_Uy53+qP|U&&(dr-QRcaiF^MO@5PH(5!GFhy&}7M zWkgly%5DW|U=S#Pe_FWQp};@q|89_f2PXE$3QqP8&h!d@VJLqM5dXq1%@-SO0096z zfB*mx{%@F}g9Dw1txax{pnVYoLg*d!jlaNlBy31=1zD}q<}bCbL?QOENv322+V!*> zwVA#>LuEy;ovm*6*Ei!)hd+Ez6WH(hH5;XGL1mCwrrNf%TTdOHlXiYk+QC~- zL4-ZXdwm1D+TnawFp#1d^|DeUl_IrmvVXbPhJ_qj3jvzGo0|U=Yg|D24PyJ-TFOM;THUYZO99nx| ziZtq|_13ViaH!v>^bPqaO*sf7H!}v zb$Vmb`H|D4u|}Kquh9P)84n6rSlPdkarzq>#Q!@o#`aF8|AfXjNl|);0by(pv`=`# zJG+?NJ92Pb2XDWco zsZz{MMtwi;I0e9Z!4Bo`q@5jgX_eBDStBRpB~MWbX-MK@+A;E#20s8ijT+jIcV`5d zhx(W-?mj4QZR&(J-;T+LyRiusXO!**Cp1-Kg8>tzT2lbMxu z*Ql}cv(yy*|K$F=n3stBFZXbNxkvsF?p>W->}~&Hza&vsdPo2v>@Mhs@S1lco<*Nj z(z1~@0vy!(*09MEcw?u&s{-wzud77uVP7N%xeaxfn@SS;{xGaYY8(4oks9)v+y1CCge8*oxwdKk1M)g_w{xg_ zv7)R+2vNQbla_eI+E1EkB>WPH#Hi&hn;uW_T^BpD{^S~msy%*Q4jXo6?U|u{@)dJ@ihDZ|M2?%yeNVG<<;HZ$>e`5NUTgSN71kV09d8~0Pz0}adz>v zF?Ifj_7fd>=WQv(KIIX2g$oeyv0eU`%~~715xF4cIYu(KUG6!lCcTj)F$pdE9A@+= zU{S~Xs6zmBx&GKg03YnZBVTB*Z;7f@7Gl|}hw>n49LtrjtIXTC=V^;&dHxTC&{<&F zrhpM=_ow52SBq;#{)oHN+paBj@3GqC6OtFnaU(8we9Ke6m+P)Q&rZ&n$FT%6IEsj- zrSa^pDjs>cKYy6*MTwJm4IyI>#z>`!lZH&a+VB&f{Bo~7X{03ZXo48V@&Am0gNxTH z4V~U{#mc8f^-$a^r8St&ipp&`VS1>1QIah3wJSY>{$53lbq;LLTSTxiaBPK2s-8zP zY!O6O4^0ABCdMnQ_pn<6w;596m&_Dzg7HBLU3`rIajY<7v8ABmzJ+wz?zQ>mQwKdP z0)FU=!Yu+$9;w{wZ~@E=g&jt-m!{VPi%uzCoIwCU?MlA($vvU*5_D3!+_GVlXOnyx zj!xY`t&1i5xL;BmcO|-ede)s*YJ?!BEuWX!v4z*oL!_&Uc{e_Tt zwv)o*ZLJ2I}=n7M`AL>^S;B?a5@%WiYNyC;Ksrb=1k^GV3mgM_}K@4 zfisXIWjBk3Dn+Jn5OL%}LnXa)JrW-o8DVGlyA_#$Z7IQuL_*K%*FU|Dx7cCDW|4))+aCcC5eBV@?>SDw3Dr-I7SaI2rqz6IqKHvs$(Eq$gHz z%%qIE4Y6WR8;TZVN@$aX`Nk5CCWwu=7Agh9bAP|(4yDa9wQHBvgIH#>pNCj}3J7QX z;u`)Vh(?*Sh@(cP)^GY$>>{bGp{7XvAO&%N5+W#*>w!y4!<(DHoq`kV%c$Y7inh2a zTmu8wIIHfXgslN4A!3kfd6JcbIL3nHQs9AU;>I!vn$zTpp%k*6+H(b}=YCt+ScPyQ zrw5x@p&AdJa{II*km!3xkX1~ANUNL_0Y)V$!d+6wc%zaO;r7os)x?|InzF_^m6M5< z**=)3*?8x7!b2=t)qXeRtr5^g0k$MfjwzmsHsCC)T^r#aDha|O!qUSVDw?D7sJW94VH@#Rv>m!+o0IDx zH)`^($;Mn*N9iYoR-l{6lS9S=N*S)ZnxG3*XyMj^Ud>IX@|ZE7fdXtQ&q)>-duZcH zUiu;v(ME!%%UGkfEl*)2>VYeS*3}!|7bp1EW8pG?uqvfaEe-!W>CV^Q)CTl6d%D~+ zhO0Py;t&EOTylgtVCmf?rRg?fZbHxt-Uvh5!Ryr+p%>@(b^{Q-wq{yqYr;*9hpCOw zd1qK^#)mY5vYSqq4rz(K1d4_n9>@;u{6JWmAr{HGh&ND4;NDex+YULU(1V&51Jlsl z8uYsgbM`N!00tKi_UCn?>bM+S#jcb_Vym$$r6(Sed%A|XQnRH)Av9wrLhfO+u8V9d zdT7l~op1{DT=ckzMZSL~spR!l#pv~b_101$#O_@M-2@Iwhk2XN8X|_+Tz_8+9ZSlh!G> z9*_BGRC8h);sN`B18^fI7G}(bb?`@dcHp4R%~qL%pk+AtiFPTfWh=Vda!jTtX0@EK z;S&m-p~1~smiFq3O*ji;710HEsori^!+hZ7zRP;cEAg90zlgb0vDd7YIQ@!Fm?RIY z31DA_UsYUS?G(6e_TR)8LjIkLa0pvD+E2q|A>quxyv1@@#yQ=X!d_PYEiipS%DK=F|LyEM>C@C7m-JuLu zGovCTiQ{uafv>Vn(KW*}95QxRXHc|}<9xH){=$szqA64j8sx;)`cYwDlU(Zh*hVsY zngmu)6B;~5VH)UE7hEyT7CrRM-w1$)P89I&?W#lZE+|@uyc6T|B9T`kuN1Mv( zZV>pNGlVn|-_<~X`LCySvP%66A@iaLtUQhdX(YFw5p1!~=x(4O181GUjy8IXi~IYK z7>}byn#t^F^OZ2_f=i|RBf<5f4-ItU{HZ|Zcn~Pg)M&>`;OHXi;#z)6rre3Z^u@4-%$Hn0LnY07kjeLDpv|S=DiLA;L=m&u%fYSRLLu{ zkVghKKm(=h`DwNaY2pup?+2w^t^W*%-B)dlRrbd@t@4&kpjw~?eI6oFMVlN_Nk@!P zR|^)swVBOtREpqg4uTt;pwf#nxt9?mK7JnFWT9UNN8wi9gK3|AzMKeSiVQx*1!Q*3 z9e6WRlxv_}QP;KEy}j4Q6?n9Y-rX zl6{`#gdJcfIWbLW0}o+vwd=u`oW z%B^5{PQ-@%Sb8~<3#QtTOS`LW)M^!1`jP;eZU>(P6$fg&_}%Vz>NW!7M^_fyw<*lP z`%L!BV5q$1#KEDeonS7=^0D!eylkhIAZJDWC06>qUj=#~__fv>Rf z#x9?6tUQt20ir|=!(lT{HOV|Y*v0#)Pc*E(QUPhQ(sTY61xRP4;F-9p>nHD@PsjTS zP%43JpXQs@?H~!L2EHi5s0qy~tfIDiYt<=pD4y!$J;P1#q-Ne0}6N5@Zx;mVAb&QeE+z3Xm#Nn#3@*YQG0Xi;&lOI`o_bADcdcR zo0qE^*%)_?SXQpnB4cD_=cV@4RMS1#GFS_XAC--SKJV^0pX(^AcjTrx}b ztAD5fBUvoUF0qB+745b+}QT_5*LS8i>hd&71hIDFsJ?7Ct4*9 zDjuC!k6mZ0?!zPK)pqW9kE5TW{xZ>rlI-zi7xB#FqroG)QqixuYN{^Wk>*Ncu8t-n zX3o}*_=o4a@6Q!`ze}I@qq^Srp*!uJ3XN*60rfh%=_hp=hR~a5ylOj?ueO);FqwVt zKOWA;Kwh8v{BJF$@ziFo{Fe_wqmAZ2VE>siZ<}~NCxZb1m?8a_T=8#e=WOcYVrggo zZ|2sbq3vA6hT?Z8^AjB2%f<)<7*^3XG%{(1P2P27!+nzt<5UfTKy2cjtiMN0*N|-C z&ULd)k9Jn;%!ljpda_oh%DKV3;iNc6>td&ktaeto|GcyP?j${Hwpy&(OlLu9#ny(W zY5nznJBIJaDMG6ZHM|L#QNC3^dA6!nL6#-AM9eZ(!iJ517q0wXYmHfamR4gi|g%+ip z>f=T&Wo^z3!O!@dbLA}I((=x`QZ|sQv1^6#vDK%@zT8cJgt|9P<;4^XAV*}O`Jz^} zaI(B`?gcJ<=&itV?zb1jVX@VCF3?rEiEJfLXLnU-@fFg(r@*=w___~LVHQqd*aXfb zZ=29omeo5}E3m=baEn4!ZiiH?W>tolBXP{TxKXKAq>tBGMY?Rv>j! zX*|@aVK}B*b^m)ITkZm(vgfD;UTKT(`LyPp(N0^JXtIG~4wdUjvvBE$ z^CunrjXx`QPYBNp3m)OlpWLZ8j-F5@QvJ{h3+58_WAKM{(T@j@diPf!+&;;qpLHK6 zYy9@~d1>f*Q`!7{o>Mj#dipwidg}PM_H=v)rq7}Fd^2ZUJ^OFN_}xCyvkiJaVPwoi zbFIM`h~yX4g&pE?H}4@Z<31yhzFTmyTn*U86^X()Nt|SGk2**&yq6{T$KJopo5O(Y z&ER97QfH?n6B*gYo)xTO`Um2WM@!dpGS9p-Baev4WnxyhF+fjqJBM{a#H=}nBrT>} z%#RpIN+CY`TW#0IAsde7Vsh5yjBE};@W^@*!2{!Qn1zDo+6>EK8Q5UEGI5X`!JeDeGLN?yFB7uG&76g|V|X>3 z7)$N#ldb%|O<%O4<;*ljE$~@iO_9`yA6+XeznS$H&Cg zuBte&MP{5mYtvEucx&OFkRV1SgM|Of_TnvU0y@JaYj;aZi#b3W$?Q^ml~s2OyVQ5R_~xvjG9W%^7x*h~^L^`9|{X+pf5%A z1JBgfDoTS}^g6ocdpC)5>K=d>y7~bB-^EGj|5hGdEKF@p|A$1mPzq;vWdi>K;ae+FDU}-xJ`B<8=wV-GpB&6yLUr}p z-S`Ukhz zBs}Jyq~GWCw>lfc*qn)})Yq}xbidNKPQV5{bmu091Q{($lxmh+p?|OhPMB(y@0Ph* z2J^u34-nL{92tGp+_AWCtm0S&HpIj4+kg_@JwL0B3|cFM)zKbYmE5?M*!@Knl3>yoNUv;)S+{NiF&Vk6LE5WO@4S26 z`oslUQB+FHG8#qds9H02j(MO1KuIK$M3R?L;uR34I6^Bj?GJB}8h1NuUfe{R?>+>djluiz`n}%24$x;3Pg$Xp7Fa%?hSUFe zK4$*;({#7X^S&92PWC;Q$M63(rfx@IQ^=XCzQ^-*^|quQ-{|d&E1Or@+Ld%O2sn)Sn3}2khphVitOYXOltPj_$Bb)xI7|T*B%Su;Lx1>kJa| zNq4rPH%NAglPdc>4i9~miQUuT4s$p35HD0a#b4Sn;Kzqm&e*a^*%)lYPSIZUvv(sK zKYP)?E5CfclX%n(5iDFWrsKBW?{VvRyyGECcsWZv^v{pl0(OyI3>7vmqRHuQjVwX% zSLDJVX>`UDTOT-*^N=u~iBbj^dakL-3&wTB2cbUCL?U3;d7 zg$X$E=~bg0+v&z(bgSm-6hpmd*p}CJFab?J=tyEFY>=?wke)a4p^|!agy(Tco+f8Q zMTZ6s8=d&2SCF9d)l5L)#PM({viw?r$P7T-$wVCUA5%)a(sXmDe@{PE8fc*^1fgSl zf=)B+An3ntLfaDq)pjTVDTvLnZg7xSQ)X~rg| zTHH`qc$J~fk#Bk17?@0wCD`eq;CKXc8MG&)Xt3(32Esr9ymOz_WB~@MBY`H&UfUBg zo-|$aAuqS4z!qnTRoGROVVv97nuO+h*G2?B((W~bC`U}{MuZbuF__8M+G#$=!VFK< z{bNFm$|=lp#=E41y283cWj4cL4Gi7Dqn*sIF(U+Xvv_@<=|V4MXI$zEeHKzEEzlqR z%Gr5Ki4`Ph%a%@eq3nH5s--jcZ$+K$RQ$cYQ{tKxU?j?v2C zyoFosa^fn#UIssX{QxgQJX`m8t^y@f;Cz0K|G#_6|0%Ddg*S%}vjG4+lmq=+#Qirb z`df;3wKcVK`FES}wRYYTTRr_#v-#7%=qI@wWt-UPEWYcCvh|R5RBSUhJw_Q3LNban zfF44^t*uQumPVsrvi_hOS2NruIhw>XyWXj>=yAV7hi^!R*kW?Y#@4l2bhsQm?fihvKL`GSX z8neCQA~?(XRX6nW)%Rsd@=FCtIM_+-Z=G6(jxR~pg&o#Hi_Py`fsT;?UaBKFxFV$T zIEC-VKnRnk`02R>>9GJ&R2DCaRXls6th$oqSO@OzDv@bOsdmD~&cWDPN^N#u*Efob z!m=YcYSZ6BL1_-w6h8mCy12wk`69&)(3ZVTdxm01R@jQn&h0#4htP{;mfPgpn76%=TcRZ(Qt1wkpbS`U)9fnq26&QQi|IAASkkSFn3xz`ys;xVGKNwDr;2{l34%Wr&ngOr?2!DOIg0AJl(99@ z!rFvn6RiMr(FLQiN?lSf-@oa4j-Bc&d6I;f_@Or?Ye}v&f~Y2UMm8Mo=K{g5i2Hmm ze=cUYPd2~7kaA}yB_Jk6)yk5j_EEiJEF~sw2(~e0DehPa5OVb{6>3-bc~>^U(#6u*OIdQl)52<++3)bB zlDdv%12$U!A_J}m;&h9l$8@Jke}OBzs20(!txltx8reiWPk^UElzQwXsl%L{WBd~6 z$pkl|CE_y17Yk((sj}3>x&os`r8K&FxXruB9CLZy{63aV8=k6TB@(f|W_^DdRWLy@ zQeKvfgZQIgbsz6ejcy!RS5~)H)bnV58+|FP*{LcO`l*e;C$#RatZnSt zu%0a+=&Q9pdc?RH{TxQRxC?SbRzO3R_7^d3&6&nYAMeK@ZYg_Ejr({B$rRJyFK+Cv zEhE+0;`7KNCUVUDj*~xo8fS^8r?u;6;9i?q-f+!q?l`;- z#Z@gw0^+|H;#N;rXD#HL&wdt`7FJ&sOf_4vhaY3g#>!^VdKLHMlu3nM@F!j!@mziJiI%E~=Ma^?puaB*b0VmJ$Q8`B3+Fp zr>^X14~q!2VZ+0%qodtM`-{-ef!4DNt2;iS8`2d2 zvHGosjs>LHEE;*cL zK*68zw=S`Cr%ljJGuV1xA)d`ur}`q=s;{|36(#Hl=%m6eTGcRtT7wYXj@NAfA zNf-a$<}!i?3e~(V02A8jZ>=#{1HR!hM#^3Kc|7l|*+Ju) zV%tR_jafu{16VF$WZ`t}XJIllX#2MVqevf#r4aVz=RE|KgPLCQ=a^&!TBrkG4%Y<*EpLT9>m37eS9B|PjVB8;LpTt0Ql-fpn zM2}|ZN2B2lb_TD@!GYVn?EHFm@olbXPmn0DkyqcW9IyO7w15y!ZLAdjeq=F0oVYZZ zpK<^V-KA(#FFWsejX{h0Eo|AgYbAtVMz+5;sa~)~z@|aW#jX8{Ez>>9Kb zUdu7BV375&R&v7U;Ks5lrIp;90o7D9RU$?Rp2e-BKK)_Dm<)B2F-p?P=bdYY77LFv zaV+5b8wgwKEkMgADhmd zcKZ7<_}2=q@8u~zK7PlsPd%Lh1uO}?mmD^2gfk^z2iQe+@`|C2H*umw!t7l{?P_Zg z;A-QD`|OCRZdHHuFj<3zv$S;rT)Lx~s*U0Yp~2Tsf-x;Kr}O@txy4Qz$%{KMxR+d_ zh*NE(g|v7=!7T(C)aaddW@?f{t4E2~_k(7&V0m|H?b@#b9Ggb-Q53txYW|#g^S!Hd z`!#PQ+|RR;g=y>5lQp)P)S{~c0|8QAbcL1F8hrcm{jDylH{7-lk94YFrqnJot^G20 z3@#wz=KcIBEO=LzcG;P13%%`e2+N)jlrl!flAn8l{i;qv(;reK5eCq;1J@PO4;cNH zBx$7R;O{{e`!7cH;uAGEK6cmCCc#cEGLtHy9@lH1o-VyL)&^Owt`}pd@Vb3-%GvE{ ze;=(o$!)XmEyOAx^d$@ihJ=YC84*w6tlTJI#FRs}-OSR?+F82IZs9SX&N|Ykv2VBdt@~f=%Gmcpgrk?L1dq77W2SzpVWi&X2 zYm|{z;{u&>+km;l4ep3J#0or=it8z=sI*cL7Me9&m6OGhfk~7zsQL3Yt1{XxAdgiQ1 zHoKS)QeKp&h#wPm1)58TmAJF?JLUM%s#}@<@p^*(kI?GEE|kmX&m()n-BkHHRc=r3 zM`MIs$X45h}oLsk)Sc0>SQ4PQMKWL0rCcNaQhrjIr!0p)BiNl$NgUMVZ;LB=A z4Y=s;w;(6|&87yun!W%;qlp&L`u_x-4AiI20}F>SZEow!-o^VpAv;n@nkyx8r<&rd zVtN!qR)Iy9<3zkp?Lqap*DI43-OA!VoW-4`S>KT@<5t*}SKFW`!9q3L9oH#wXcs-) zd-Ot3zp*2rn(O!oB8xp0$K=;3qbQlY#+EA@Z6mI!2q?!wM%%1cykykeW7&)HFi?^> z{Twjm585K0fQfe^Y2$N3J}2!%dJu+OZM!{qYJ7B;N9+uis=I!bLZfADy%m!&rf$~7 zrcT~_+ABN(thHoj(LTY9;)nLKp(iSg8D1~nG~ZeePdrARn$owudE^iIhoc>3>4?PN z{+*;MI^gA%=ecB-cxdbpf-3Dkb@cGK1E>I<41yMNv@R%~+c z>cqnD(Ep%u*kb}ys937pDd=-_Eo*8QVG&q z<~wICO{z*6?V^mAnMW1I?jaeM$JY_|w(7Nl^Z6>Ng;rN@`UppjKE_j}v1RnqAlBr{ zU(Kf0`Uq`2hVz^iG41xHgA3`9ih_GH=g`f#L7tgZmAsB~g*bRGg29w3#avctK16`S zA;Ej`kvXT&7)yC_cAFw1DTMajsgSUJZL7u7!~59+CS-OUEC*3~<=*VKyOscM@fF_J zVZBK!ep^TpJQ|w^NIa(16NYujkSR6<+tY!(^fd=iW^rEqz%FzVn#E!L{a(bhR#XWH zLe*YIL6_$J31H@E;B0NSlVykSC`XQ|phpCY+@m z=lip(j|K{i+TpC<3SqkL12eoGC`XZM>R;b}? zL9co4sRD|aMyBKFiKN^2{Q{_XiMcys{WDU%n?eMoviG` z*-1qRc*xw-<0+=agBk7b7;)ID46T_>IBj+Hum+r*egPR zK1+vIK6?2omdl%NFZI&~SM5Oz3DfuBxxxyPM%a%Q0Q?0gVRS{``c1ll$8%~x-;W&# zM1vBbwLS!Kj{Ke%7rp5sKG&1M4Gv0Rx4l5B6y}qcqo2)4H;b99{HE&u*)t!jV&Jp1 zuTy}HU5U*Ok7UuVnv*%&W{*v+*B8qc@+I|o`QrCW5vBlGM8f^KtJRUOry>|Ma<@jZ z!?|{?i^UX@JlpU?ZP=OMECa!Qdg>ekU{jGg=FE4aLf3^L&b(25nJcO8aF5YeHr#>Ci?TS(a#oa zRmt}niT&669MdKOn7E=B{FX_=a?e{JKn~KLd3Fo{OA4ceg~&JMG`_ICeGiyGQ(jiD>q|^?gKB zpmUr2iNW?49UIrf-EV>>gAy0FrB+uD5b65Dx_(`b$mrwiec0e+FzxF*0s~R7m%EDf zvo1*Tpi}nqV`EPnqMLPedyUWJE;MVMvtkmcO*6I|!8(xH=%GlhNi;&JBgj%5AxNz{ zXqV|sxLVev<|CULlwE*LYUOT8O3O7|IIGON6TW(`-7iAxXWvTu84Z_FG}jwFzc(BP za0lyzfV`SZx}A_k}J0LsQFdn*Qum!Z#jjX!&cQKz-O zpX_6K#^Na43NmSCNb=;zHEBysK1q?;7`)hxGg?>MH`x*}Tg9=7OmNOutk`)eOA)%_ZfK|%d?lLfrt0C^*mJViD zg_g8H2~6UH2rvB9ym8zp_8#m|KW@yWtQJ$l>YNvnnY=mTve(cnkiK^qz42F zGs*d<0+}HHB#+BSYE=y7IVS*6&s;6wZ@Rbd1`0z_{i&ew3ypz*Zu^v^8r$hMiy`+T zbGEH<1f8NE8?;`8T)SXH96ltF9WX9J;Y1L{5ue-P7eF1e=zKj;t&A?n93=+?7d%cJ-BNuIz5U>0&1k$}a)_et^K z0(v`M0O+X9@&}b72GfuHFlxUKVZeX4)D*Gb9Iufu26HfjFkVEiDaI52N5gmlbBUMt zA|(g007mfAwh=kw%Chix=J%)w$LazIWQPAb2v-w7HZnd`-wa}q;j;iVe7fT=vE%l_ zr?L}?hd=4Bxk8K@u@1lWh}`nf>A>xqQG6x>Gr>^vD(vg5-D_75OOh!{OjWYl?n=`4tK%=b zl)w=Hq{u{=$czXYts#Z+Z%b{SI*SB7MW6Z}Ez)#|f%!fY7Jh^U$CxbD1d zm4}}=3CoRULnv||`R#~;0O}F^QTJ+}hvb&|X^5+iz814(4`P9kZx|jNRufX}lU;8! z2C1=aidGzXVzU~u zwU%qsa)_QvN6_jEHH2VOY)gv=sN##-1mY+D{^uI!XHGxyGI{bTZ&RA9Cr%CqDB;vD zjA}6b&IZf4Xn(vUu88C)yw^#*&ui%wSCOI)^xHwj6UDUFbMX|erm-c}_BS81zC{#K zH9ClSyou8|<;%D-B3u@)dDDlER1Ws!x2AN7^LLk}{?v|I3`Q&vI8hjSxMBz;algTw zvq(bqIlkUsEeFaz{h*f-m(TqyHoJ-IBNZQAD3O##a3VN1BeMYnwdZ<|waqNja&NHN zIm9}x$lnjMteR6(Ag?dtvh{uHF1Cz5rm8CAZIF6!v?r@tGKF%Oa z&dv+XjLWdJDlt>;xX=)pPR7<1{mbM9!LLb*I~1Tm&?RI0cKA}xed*uab)iJ+q@b0xzI^wT3$L^Lo~*ACY&dG& z@@wX6kYDc<{rf_M=`FNmyp5Cex9eS-lTb84%tWZ_3s9&~14Qt*vAuH^lraZ?U%x0u zIsgd`xj+tpBhWD84|omi=0WFbL>;K;t2Db7Rw9|c__M;!XT*M4)POt<>N$)u@>bx< zpm1BKaMM>*H7N*K_p4QVO#31+qUlQFIR9YYhvHXp}WP;sWRr zk^Bn%_f=y9ORBzaHGND$ZDKErW=>zo7U(-d;2}4Uf)6|12l0Hk0KVJ3s_5Ds85l0K z%G-6uRf?{g)-0v4mC(1Cl5@+{+L%TwJwz9o8DStV$V)%kB%CCaD@r3O1Ma1vq7TScZ}O5a`aH5;y%EVh;% z@wrX0v#dsoQg+~u=b}U>xSVJB%5B7fD~Zj;aCnkam15xruw~8AglPfh4jL;Lc)yHB z<_<>3um2d6Cd=C!+r;tRw<{JnxZ;r>&m25|L|?hn4J5Ym`DJGZeR75ev^wBGjwSwc zP!v517QpbPyUihtLC#EZ(~=vnIM~#*2kBqmiu8~RD3G5ayv8Uq#y~%d(WZ~V-@Aej zt%7jeBcikyCqIEyPfQQ&2_lrzU|FY|WI<5!h!GX&x(|X-slX^7ybtTg8s=)@(sT32 zWCrO)ko-aDLT_w5!f@Cc3Y%n~!85g|!PhD;6h7Dy1k%^IM6~2`+pXwFFN88^A6(9U zwHUvRwIR!-BJ)X>66ky1>W1v_JY+whB`oZKDe%TOKrvUpn5R0WWxVav@B85vGFzkX z8Lfc*rXkrTI|Ptthe2czKHiFO;)N?e!(^#vTy85|vP3TF<86?z%Xko#lA`|l&JqfU z#b^UAE0N(R^9COqVIyD}Lbg$Gy4yxJHq!yI))0&x^d!n5ALpO3T}H<{V^79f??#Cj zZ+ajp9e;HFpdknZYRsKmZHHrAn{F?l+9+m9dXt)kfowLsh-6@WW)qC{ra)lnbJ%J3 zYvJIGWyS_+t@jW!fDWVug7yrgJ=Qr+Vdhr_3A*hNm^YT>PQUfJoKr+-AObDXF3yiYK}kPT zC4dj)xlZ=&o@}vaITJ9yX(UnSI=--AB307Syse6WvW>F6r6t-Ph(1E++oi7k?uQRS zdKD_piMTXD`N5j^p}i07NB;oR&k;pL^M?hDB?1znbP*r6NU0wwnqsiSSo+x~5N?;J z3C?iHgZL8(fT;y{MHo}1-!A`>^AQq*LC)ftAh(1_Ftms~=%_T|Xq2Zv!%OmQL)=YF zv?OAZHUEyVix{Ei|IrJ8=8dFrUmk;{4nSIxw9iLs?$&BP8K+MiJxg1JzwW zEsMwjrj_?q;b5(2ZVsFdYD5sK+Ac~%LPdi%XhitWK{2~A#hdiH5bxmERur|D=+}J> zIvO>odWxt^RDfKqNDUYKp#+*@u(iTuL;y4?aYCp7+IB`hE}1@rFxoM~Lz`7}MD)xN z4q)jz;VPf!s5hm&>pv3n3J4B!^tX-ht5S{{k&>uLWrRZ*gt>$R_V=#_O`oDk-$p8P zq(%;uSRgjhQ3+Q};(uTAp*_Ss2gY{xlE0G*Y6T6qi) zY1uuAH@Fp3y7l3b@es<3HF8VkaK;8(BM&*y?uP7u>v=P+z9%()uvIbT3V`jX+X92IB-;XxuG9_bL{6^M%UdE#_J^Y7$i=%6wBKml zea8Es?zto~)v*P>$U>9C~y*S}$Z2 zQ7$3irIx4}V!TuZRyK5`nVeuP(1Wlg)9is=T?`gvD3}rY+CM{~#y&QeT?s^b8m(4M zD1;rmEZlXIjuxsfF>Zvk+HwtOvrCx;f_S@WQh!CQz3C^nPd6e<-RQ+Hi*-MO^i(8D zzw5;9vT}}AHY{WFWhq~ZMjLc#xX(?xJ8J*=}rB)RuS_y6)XD%SbPc@1X9|p2w=_?2249D}Gghg(o zD>!dRh~=ouvVBX;1(Y1QWU4oE!o`Z|jARHUq8&r_^xp09Yi1cn{aY=zb5_pCq3!oF zQxWlXSNY?xq?O-J^r7bHh%_1coWPee=JFUELpw};|cE2aTbXp zopohz7TPYvwYHW@916KBd$XWf+gTb{5n!kP??T&DBQ-IWHH4Iwn(B(eiQ~lyc+q>GBLb-;diA3n1@=HJyWk_3zR7Sy9l(C-~yMv`P?I{@lWTVW9 zWfloV%f@Q$S74;)khxfP+nqN2!n)eF=ThYj;|dm+Ae6E>L{>WZmq`QEXOYI>Qt_xW z7S&ZG;HL)owqK*m3(cH<1~+M0g>AXYo(C-MV_PyuG=_Svp0E5J__d)s=s0y;b%mP016B!X8o`MvW16xE1_VWBq6k>VL{rN9y+>-c~bPa)s10<0)kLn=8qPYchK4Axl!O(9ffWqiTH}{6D zFrvkkrOi!?qX4PU0uaV9zp!Sbw=aac(6k+BFWHF>kfg9~_H@lGCQ_ep?zNm#1szs9fTBEt9 zh8fKy9M|^Za=*)F+n!fJDT3A%3UQB`de|bnr=hMH6Adb{8d8BNb~h&c*Sr|ja4p&R zY8Zvc9cz;|YGFc-U9`!5u86mHIxQzRSN2xWHOZ#719m2P5u=0x5U?DysdeW5@E=(a zb8qLajVOei>`cQpL5HxvuAt=3f5aqb-RAy!A~mNUHye1p%qOJvp;tDa8jvW~Pj))H z4E|rVy>(PvLDVPM1eb*15C{Yd9)de0xC9HXjk^;Z8iKn^aCZ+*a1HM6?$C`k)=cM{ z+1YQt**|9YoUQJAPM`Ct>eYQ!*M3#+c70F@Hp8*Nia{dJSEq_{M5pYCb6Ls!`FV9a zPOGC`rcv5sNWut7&_$AjP#dtv0)KX=@pYc?bs)FuEJv}i*cYci2Wd-kd0FDZLyoWz zR2x;>Y-}@G@C;Fu3I&xf*VAy-YpZM!CFr z?(l|&WNz~02gX#J<&oLA(5S`kvH|Dc@5&^Jy*S0A+&R27xv2U%FeJRcWXVE)1jCkz zCO_&ec|q`OQK{hw=T1Rg>D)2(%d$W#y+eFz#Y(}8CH-4J-&viAJ#w*6gT zu!n-WSU&|Oo?R&PYX4@98fLJkl;|7~?|J?Y%-1!-4@38TWmKfayuT66lr0zLY$Ia3 z;gyJtcqKqt7GNYaf`WGqT0uNP{@jEzx`Hhk{C#dnCm53Hg^rUpp1;Zy8PA`3^T8Bno0(a6HeC28_3>7A zfO*Ky)mnf{n?Z<9NID2m(4R;vV5rO=pFOHd*Wq4C&&C@0J%vYGw&+t-OkX>5!8}vI z5f@5g#;(D`3&d)0oGrL@GPLlXyPvYbm{7!+4s}LfOD7#bIvDWnqE6b&*bX=DR=2K> z_!0YW*yb;$(BzHeEtE~GeQL+uA9l$|!;yv-3kt7Z|7ok$Iv(Pq*V87{Pp21WSV=Eo zojEW-v%Ijev)@q=^B+bKk>V2Ny(=(Ne%{{ZYpG|4>E40m& z*=FgSZsw_GWqm(QmsKg^4JrX!X?3Ffk}=10|HK^;Ss3jg&@>XXGnQO9v_?bwYY8P| zRSEgmUZhx%@Sk-4v^c!rC*lGus&rfgu}YhV;VZ*6*`BPX=LSqe-L31MPTegkryD{PMUoPIO3(yhTy*p^~%Ni;Y6u?MJD$6vGZ2)u67p$4D+YW1kE>x7_u7PNq zlmu#8%>;Z^^w0DpKL`z5afaDYxxGLVKraAI60r4+X6WPfz2l|Gw~2&d6QV23g-eR; zxWM#|QegTNMaO{cK%da6WrM|wzZXQ;alZj{^$Bd|Xc{CWb%s9l)+ogaGp~$BOzw;} zz|D@9h)9R=yW!cOSoCZ|jaWG2!EiWfXCxu$CAHi_W9L!QidbbP2axh^KkLWo`^Mz{ zmh^!cq5-uG5HB`rt?-SG<2mxM3OHL@w}vGhVnE=MRui{NNBEU0G-;zIX`|I%9aL`Z zIB&FfuwWKNL3G1&H$?dKM1aLsrEwZ{Gm%_kYqBMmSP#3lCKXTI3<$v2CHv)NeH!p9 zE|k^1!h6=N_dGRWeD&K)vn*$uPd*rOkweq&zZCp|H}d2qv>q4c5YJEEt@l}z#2z$7 zLVtv-;^C4 z-X!8o>mL4{ZxMn*nD#^VxUPDqCr%N^uUi^mm*nfwO?*uPjr1d|!dw#bH)^`fb)HvC zTE3iN{0~n!&gJ#3!NnhNw?1;h*mgJ*dttiJvsTcR9?0~yt2nH}`7JlrGGamp6Oy{u z8S;Fi&evtVQ5DRoT`PyXhz~RO^`B8V0wA6!p9+Pzzo1d5NU|@yE5Jyp4b1;_6&X+; z^&>|hl?yHX6DUU5B?3`U=kWJoh_bt&Fq_#+VN6UV&@*ZS9FUxx@+k=ebqk> zMtKM1``med4u{taBia!9!p5KgsmHpfY2MPpgSu5YRZVTNLE-MutMY0aL}9_q`=IpD zo;}j#-w^z&b{@%6O*Z+#LDYvRuk3RK!c_v?&iq?k-w^F4eqClYOrab_SWR?0flbS) zuDHhIA0W#YJMn0f__BCe$w&d7E2f!>XsF6x1Y!MiEZ1PoSiiLFKqT>;AQpyNk;VX~ z<{#T4sW}tjIh%dV`W}O%tcWqXtIJV{gz3p_AzcMcF)>GV5k2DbpYgN~I&dg5tM>FT zA>DJuBn@WY6e?pjT-%NBBHjv%3fDWmbxnzmcj;kWR%HLueGvlKT*R!&aY*fhL#;UA zzCZ=%i2fEjz(+D3M~49ln)@FwaQp)rX#X?n2%SA>&G)M>g&Mdf%#*ZoNA^Cb~7sn9uaxMufd>|%q^fTw@_74{OrcR!vd4F z8Wu$yR_qlgR?P2qECbHd9hXkd2@70t7@&_83lW@DyQT5qUH8&nP!@Oe5|jDokT|JDKXlRI+!c{ zc48zZt%bQk@c|w8e;@O9@=eS@^Z}D8D#*aJ&^D96M)u zcX9qO6G_OvkT06vYIvs58zP#{Uf8Q4CEs8<7x4yrk&*qlvr+nfK~3OQ1lhlBdv5yf zmXzOClzX0l7?!wUk}jNRD=y{WKao~Hf}v9;vI6mw-+LL(MA3%lWM9tMhiO%{rgv2? z(c-{(teu||=*h+~Xb(+SaAYTEVnw}Y(i^$hU#!w8+k%8iL>u1+Jfwsz#hb(gy_IcP zraEWO?GyUA%J3e33&VUpNiI2b$w0#TT5|ve<{4tr=)%7ZHzzp81&+)ZSekJ9tz{wh z>!|GJ2bwK?eQt69?%kc$bhtG--GXxBd&NJQ?rJ(2ZmGI%$v@Gg8lFpDcXr8?`Obeo z(nX6un`z(7VQ0n*y*x5+k549sVl2olJRQlr1=`^B6V@_#=(ATsOJN93 z3mONE8)N!|EVejn9zCEfeUe=( z8HLodsn6QavNA;vpB$o|{sR-uZf<@r zMui%FWK&wR)qrRAD(0tO>mpKwd`;!V3EsOV`W_9gG`^&wLR3ZfhNjW)qZP%b>Y8#v4XT=Q4AO&F zXq7BSQf^_yxfD!?Qa3-dE&V1u~5@n(tku z{iTTuq{0uc5e~0m%8=ejK~ZrnQ{weJld|7(4f?kIAA4X24N+%$V{Tuf7XY z+tz{}dAIJ+@|M}cE276Wj7L2Xmgc`Zaj{}`<-YEc-N!0RqeW2|dEuiu=#$iN7ylDv zRG~72MA3iP!HjQ=+)sR%@kMEJI1a+pUk^;8At1oL!GBel;um2f*J>_=TpNP#C7sJi zTFxjjMJZiqEc@{bF}p@m+hOcgqIhjNmTY$?<1ycCfAN?pTHcxdA2!O#$;Y9L3ZL~D zS#Y=~6$59%WUQzdx4KxksQ6E=-2ps7vCw-TZP%}d1AZ`>18&^bTJtXo8Tn2G^Z_4^ zXE2P*KQ~?mlvz>epEQ;&>q{#q(AR)gpSrXSE$86p;VXE5sf^D=D{E?x(VD+gM$~3; za{B0@elI$nDaHs43Pso!R8Ci%-Dk38?R{_DWN&=~Es;|0p{w!yK`z3~9sM<`Oq9p2 zzur@uyf5yj>hOH_PN3DbK!Z9y7zf$=mHW82YJSNHo+cN6Oz0hvYT@VipK#9-G=t>1 zkfv^{J0a5A>RhvfM7OGjiUhZ_C@U%wN!eZ6wY)r4icjiL2oP>Sd5!*nPmR#nI=x(| z4^8ZRRuR6fWJeQM#k*to)D#2~8ojwIEjtf+Oqls*1C%gO8ggQqW+jaSwR8@@zGon1 z+VUYy*yyz+^)V9cyw*W8t@A=a#7f=TQMzl&T#9*aqOj(B-UT3;k&#r_UTX#Z@zv9f z&JC4)n{{(&+fHJ&Vt+3uCdABq)Dus>9^cW4A$+E*MfN6acOmQ0o*dklCnBtXU;R`D z^m>NJ0-s9dTLmT!eIMEIG>{ZgRgV;EViTa2RR}hy?%z)2>qHMvv3Ueq%5$5*#$a}_ zfTsmjPhQ*1kU`na$UewQSb<9vfudCJEn-VW;ulw9&_&WCzS_B6_<&|v$ZYXY*)vPj zF#no7%h@U2gOewH6y|hn5t#g!WbLZke7aHQQ^=~D(2sM@nF+R&n^QY&-694Sdd{*U z52cG5$j;+-B{sQSTII>~qY#Vd?MKX{z_JuJN=c0~!(h&yfQM^q6F+=&yThx5pr(t_ zZ$k|Xx(usnGrk@5!mf2S>^kt1h|R8r;0I68R+QsOFdJV2@ZCbT2xD8T<+t?#h+Z>g z=Wlf=4m()V@yrl(#MW7*IKGzxJe&Y-`3~&PKGaVmur+T2H`KIZbf{hMGngrD( zRrcc7v?>_nb0X1H!Y$xyrMZdTngwj2pw~Q4<0#Mh`BAdm&FfTnW$XZKJHhBdq!h#dcd7^`>neKVP=i z9-sp2mIo)9K3s$Yks()oa`yTaFAroqL`5Yt`v%G6S5t((zU?5>csnmw({ieyB~5p=*4YS%e^fY*jibqrXbH&DjJpW&cn3riJWMmSSo^* z6<6%ZnV<((aS2zl^L7*pPVN-?%UE%0V*I33K7^55YJFq1ov^)(_*Yce?L&UYZS{>D z(=UddZZf?#cKu(eHwBfBFYUq)H8oFVHBUvHtnT2f(yj6wXI6R){$>Y~si0WJH{Un< zvYyS+Hl|u2Q&nc_E$)Eq6#<=ZhH+;vvfmw1f0H}3HzajSnB{dZjGNsit$4|b6z>Tq z%KiqukEKNlhQIpKD3Ly?lWLXO=o$$G4s!1Oy_w5f6$*3THZ{kdQH z^54T={?|kxIO)hK3`hXL2VwvKo(tr^=XkVpu{APvf~Nxc_s-jx=7`;jB>o!FUlBB< zw!@z7nRsULH)MYpb&({dc>j8eN6}DSeJ~3)Y8$P3PRaXoeyMmLv`!+-9F9cGPM8-( z@3_C-a<{rL)dspsjqfJJByr@fTg^3o{TcI~-RLCsX3G)8SBvtUvQa#cL$EHZrha|3 z?cvCU-xOWX0D%-WCt%3(T?mJDzN%n@Es5P{2`A}%C5IsmD`F?Bt2suD+Dxa~dZ9s= z(I!psTRC*k^S3KhmV3t*dZaOI0d?xSN(H;I5e@Qj(8Ru!93e?YZE>3Kia9GJ1Xj>d zS)}xR6uo2=%Q#CjB^W)8_*g`+Gsln@`A2*XQ-yluj|Pb5PI&zjcGq(#pX@La8f_J9 z7#MB~Ye{Fvne>D|qTIbId>d{a#O3nZfSH3*mYwW}cXobj^_0tU#t?O$S|T@@vFOcc z4{kV>df5@`*r#SC+>L~dPK>O+LO#c9pJnpJ;_oR{qi>S=s8u}vR1GO$SQS2k0*rLi z@J9ZKGb&ufi59MN%7<7ohft0@b}2xbJ6_98h|c>3&xCO8ykbFvCbxEfIcRi2^g(4Q zz@=C1r2C=Zz1UyY{tYJZj~hERx#y=BY9eaHCAdA+aCE@1H;I7{p6 z<}P6WkHkls{R{?lr?-T$I@<*PNYjQ=?2$SCBL2qhS2UhKEiS>@nr49NxiC?R({RM5q*z z!r>gRp#x7AaIKXu*LHu(Hlv2|1vjHcH2-e#GDzT*|2E)xIB0|9r}bVSv5X57b>f8( z!VNgFk6}P75127Rji3-j-qmB)HMx06> zz72aC@T1QjG3vu*>AW~*S_LaCj?4cd`c`V6ZQ#yS1hwv<%=y;+97HNG@Uz2vPw62t z?bT$K@Hzpp?v}$K?_`Q$ebGeo(8K&Sr0Nmh9w_Ya+2>>C%wTn#zwzXSKsR>bgo_Gb zd1jD;LZj;@74z;(tSh+mqU^UZdaGLpZQGOK@FiO zTWwm@YBif{EoF-63qr(lbX93;2;CW0&~V-9L2wk6Cff|%Y;;6?%?agrG+{9yh zgEW|2Mk}G8S;$E!kUP`xU5hl~lwDn@@LT2V85*t=JsIP_^tf}TLP@5i%<;A#Ov>pb z#FP9vt`_%q0%>_HYeW)4>!dMgmyh_#1{wsMTo^T@<63rVRkoFH4C!#Fgd6>GmflVa5Nzh2LSdw)5GG%}k1pqs(4!)d zxBo~*YKJ$zozKiDug}prI9-z7j~!;>Y3v$h^xl0^LtfQ+Gbu+_sDzi>-&z5HBNU8- z&25T0*;}#P9QKPZZpgT3^Yg6phgTlK<)gxSa=9eppA^{dj{wnET*`R29KDr%hGB%KWWBudO*;-*p%aguF+aAJg6(~PP2tLgBJ zL`#R5+h0=CGVsQd7|e2*NBI!1T*^}CherSoVd+J&O@@8X*vykK{f+S*nra_e?}%C8 z?$nn~1tc>qAs_~HmAvW$Zvy+XtXr*iwZ)a^eqAJ|^~~d(FH*mwF_Ry{AjV1iZTW=I ztbB;uvghoP0`O35LBdy^sAfLGZN*S*4SaLRwm>WFEgp<$q*qGG(pz`(?U z7gY2&*srnP{QLc{lYh*1r6R=bO^+_}?pk*;*Ntw&DgPzrIJK{^0LA-V9_P zK7}Nn5!EM`U+8!WaFE4>|6X0vLH&NI(|^R;a^5yKwLT?5aCI<+jIaFVe<6Z|?F|YG zeZb7}h5mefChio1SsLt8z+(1IL0v4HzMRJk0GS^8+R%*|_el#(98W~Q!sVXnBt#;E z))p?KUK`2^V|NCkB#_=3)O0lnrMIeY3UqaBlKtk{9V!Sq4J4)65bXk-fS83 z=>_3h*Ct!TB&eZ7o5z)h8DLr4|AU#_66Z&^Kt zjMa;&w;UxsbkF$$`1k`~iTLy158+ISCm8g3e*YUWUHUl}9^oFZ-p0TQ$gFv>~HCCkt2FU-onLRwpVyoHg%-Z;xh;y_1<%wfXY;-z`}+ z@;>)%Q;H^*tGY(2*iTta5JQjPPq!HQ6^wWr;v2Hu*E%=a>RoADZl&%jsiVheAa%ZI zBCu)h7^P#6h_s7cCMdE!CNl7jCAqjruh+-W7eiM^5q&j5@}xzVeA6H8Vd3(q`edPl zZlT&mNb-35PHFZN`TqX4IVf z+6^a5Ye({)F92gNSE+chy?CY1Ol@xwXgx2jZ^`a@9(cV`=RY@SXYw`)+p1PnojrAi zUyBg^ZBwlVQrvi}(QJK}kzD3oTLN}&PHebj81D~pK2)*y0no=ZtNUkKTOK_PCGb@M z|0M7ql@vW5tQQtA4B6ZseR->~P4qL4`%I?y=A+R7DYAElF8ryEAjWIKU_2EEqGUjq89$H@+bru1afw!h$o--Zr!$A*> zZ+hnY%>Mnh!#6iVC*!?j5>)z~m4K|+ph_?B~1d< zolV^=3d7WB#c2FKO={ZEyudS^JyySR9MF?P!0IGnHK*762qUaoeDk20tDERQZU!r6Lq|-nP)e>RKynDh;hhfl~KH5K#M=z+S(F=cY z_vDJuY(P-bEg{xvUMQ6s90m07QRjXK)l~0`bpde%Z6B$;Eq%m9XRF&dw&5=`%UQBT z!c#qemo^doeAFUM-xUy@$#k~^L*IF{go|$z_9?`0yTmAXM6ruuM>r;XP;bi2fa@fp=z!7(wC+Ng8fm^ z?8c_{cfqPJ072k;5Q%%t=0X3MZ?8T}u)DWJ!MY&Nx^;aN(}A#s>)u@V8wzLu;(DjV zrZ7R*{+ubZp3bH9>D-L9yw2Ggi}%!hCxxTF2tz?`P@$aQMv#?Sv?77^VP_9HF4J!ic_~KUqq@*{Gv);VR(SzL`jYut zMX_#OL^dQr%pxjv))ek|2py#yi#e6*e+KlGCmQ9VIe3_MzsKI&1EstGx|=r;=;lH6 z(1mTGu|GZu62IjMhrjb$78%kM`pi*(@!B>#w!U6x8@h}nl+n-Y?dBqtC@Hv4m$9~f z0cd9@JJ>m=?>M(|u2VTFXv90&Iu*L*yRN_x9vk-KXd?lxYD0Gsgyj^OTSlX)psj$JXfe^NOkCEeCdpYtmOAdza1Ah{(ZO`q(jMiD$ z3xX`gP_OSZ*Yk6>w7*;8HP5MKsH5fru#8mv7sv zy?}r3A2O7a#Xf84mcee0tcC6x&a9s%nl19e!7(}iOrap^HpLSG#U^V{_Pb+!GB_%D z)c9^ZMnFej2U9L}6t}dO(qhMS6&ne$d-F;!yBm9jbSvbHYCH=SQWdn#6uRKGyt0bi z8s*zI*+HXr$B4RX4Zeb53_g+{`~EgR(CS{()@Rr+4}ENy@xkt61JUmjlMT4*+L1G|CCD?C>a?#|9#t)8&*t!v;A@~i zvU)3~>;O;qHtmTf(3+Yd++mib^2EgGG__34WLZ3TF;?d%kk*zl^Jr%Ezf7jmpjE<=vd7utrV>)U3Za42SgfzC&;NtNpfB<04x4lajR1cG zqXeDJ8YfCE=D%pt4zjh+M%RiGo7f?&$pCi!ti8F(U5*E$M8f51kJlpEG=CW$j<+iY zGc+A0P3S$uBD=>t;fvfxEQpw5FFp?Fi-1oFi99>}lY5p0`dLwqsVwXy>z!>tfcf1yvZGG;~jV9 z<}8$DE8?)adbd6LqHjE1kA)DIoawu?NEvC6dBL0B~;x0Cn+FM5C2|s%)ycM2h zixr;T7|HUEhN9#HMM?EsHid6D{tLkTA`HYm$Mr1Lt6fjD+&`O=BD$j498H%j_34zz z5i{Ayp&2m;pfPXmZj(T@&FFGG6Yn3M7HP8}!l5x&PHVm7A}mGSXTEfYt(q%aU`j_v z#K4`+lF%^iX7|{UM)A{t(8i7H!Q};j0)Y+1TdlJ!z&;%}x}I4V4m@y&P-iqZ8@%o- z6Cel;y>q+L^;{Ut27k{E0KI+AegW8A5JSbfrsPmVen>S2)9Y`YW3i`eYOAg9)(RW5 z@zEj0bpf!aS)n|N+ey`-BBm4gP-(`>yWoZySEvYx^jBiOk6SRW?2^8Vw$ME8h$5^ds6sv1i)uM#JwDbfw03ub*EP|^TUU(*WYFO z$D;)E{I)U0FO$S8Y6?bShaB52Ng0t+s9UdA_~_Bj@ps2!(i0X|_xg&gYK@L{^F4hk z2)FL#@-GY*)iT*-DIIN@KMi>+woftHD@`gq7>h3Q=uc z&2Q_lDnia*0*F2I$RXDXy>g-{Y=00niwQbq#jOzw(jcjCs3Acr=4Bhv;WicY-6D z)T=hiJ+q3KqUwfk^t6mjs;2~4TP#2^pmATYqeyfcU!{aSgs1lb7{+NxINvgD^hlmV zvDX_rZsh3al&g~b_X8Hi+=gE^*)_$o*w)989U#_-;4)q42aXkz{L5WkHg$FV(Ta)! z&*%bY;3zHV6fU@k7oY4zHnTkW6{d-E<{OawK6j~J@x1NG_Y&Djds^v>#vcJ|O7GM- z>?XuV$eE@2@C)%%6hf{0TcUYLnBTB_L-uTWS}m*EfB4w>6vJ)gj``Wof3Auc83WCB zTitE=a|4VBGz9(v6M=xTbL4*Th}o#iMU1q3u6J3(W; zjs5mpXuo(^o?-*oF)sEEb~Ea7`?rr0sYa!bx?JevLbEzRPj$fxeXry#^HT`d7P_mG z%=3aU9=wYk*ffl1#@8Nxutp9d70T(u+B44$H1;1o7#?)9Z5g(Jq9dhWiCv*Q_WvAyihwU* z+2;~Lrbm6)JWmHZ*!x{1zj&)lL)OWOi@#+-m?jZp#i~IGQpT2)ESTc8zEm+Zyl30E zk@yp}#~Y3yEOe11Us1zm4b1Sr42EopEoM0l4TU5+UKd{Htv4bW5J8RbZV0lC`kQJ_ zvJIU9<<2#0+m+nMi$_=AZY@E~N37$|hiTENKuMMd z<9#y)Ju258u&(oo3=h1qgBo+niH+;-tOEWpD-*>xR`J@DC&;`R`VT&(Y|#Y_#!4qmFRU$WB~d9=Z%xL|SH*;^N7Px#q_B8`;xB-#um z**;_49_#dHc9(hxBf8ZG~^{YXR(ob zWmQ=xX9rY$D7qDX0Yo%shqAYg3-{AWs_*GGDLj*Iq)(L}P75u-Fqyy|tU()KrE0Rm zdYRWnZIjl@jCUM;l?+d2xY>i?YDxG+BY~z=o*18NV*<`Uz5fvt>Z)j=RJ+*Zz%+*W z_&(3%;V+X4?9Cf6^E&Z!z952^Q`H@jK2}qGnmvc-2qzC7>VU^4FQ1Sb2uS3O4lVZp z3+(U&c^evF>bYC1HO|JNJ~dnxXfVt=bP-Tfe~1HmrEDcz_tfOFdJJc#RQyo9kbZgr zP=tAC5Dd3*Dwnz)v1mW0OI^bP36S1?y^vFV5-Jm`Jml7B9H(t+3!)1fl$1nBgnbBa z0gjI8h&=>mPUs zyWBIcqkBpA%rJ;=aCV~FV1KiMJF!GIJ4D{S0Jh9vtKSdVK3m%(TB<+TBfXuGe%%)} z=s+tz_{>o~>CK+6?y*ZNza+_SKRy4nEW!_wtfb%l9wkwpsOn?yJABY5?#J%_sxv1W zO1;o^D2xH>7Dmx5(6aMZHWQTi(VH(ciA(t;m{;U<-D=%Uv80`N7T&`843%yEg$&(Ncd!>WH3jQg%cJvctIN^(n#qFMyvN29M-#p8@Oh+1y(6Z3FHvB%Rns0g9$TZP9Bd2;e<9|J@ z#+SEK@xxQ^dd6#I^7$+@K9!F1IC^~JG`Y49-SAxy(hV;Gt*;=(6r{ZY?%4m#qI-0M z^?}HrTVUwA?iyN26|863XW9xyabYww=YS8~(~`RevcGpt$aDOp_KCW)p*$=#; zOxAa677ro;EL9=PE~HEi&CTtBJXC16dwL-rqCw*hi_5-N7S+W=&`yq#&sV*M<`yHZ zolHK)OV1~zmn{=0rXE>T#1*Qn^tZ12as_{?TdvuJ-?<|yLRG+5V&H-JDDsr8M`E}s zH%`{f`x1(N?)r1Wb0shQzEozYMP{w;m=c+|q+jbpUO1!de+KJ>fpCc~^6eJIyM^zP z7V0l*Y9GTGAzXdQ4{Dhszq<%&RhXx3DZ`7P0|-c|M6n#e>`n}k&28*(eyK=9Ut*|l z&%=5EO^F>`1O?|v!$5dwPZA*r6I}LjmvuW8Ci|P%a*!>G2hW8Iox4Cm} zaM>0b{SuSb+Q*gF1@(o$uq0p8>ScJu-q}d;Q?h+CQ=jxOuV-!Puc*G|xzuXfr!se5 zYQ{wY8M1}a-j6z#Lu0;d8vqfD7$VrHFAj^K;^vywmDFrys&_Yjpo9mp!2n4@L0l~& zIW zn0nzSD-Ku1GM{WkDJVq_SdmnWKOkRQupzH%da3HV4?PXn|O!E$mJV`oA~- z30CkVpSxdyYakLRY)9-lS&%lTm!`I;eVaDffSpi!(_f|j>iI5m2er5X6h*`K+5Ie1Nt}nz!>U@1uUAh@Mpmk0lci%~~{G=GSGc?TihPLiPhPrcOz3l!1(5nHvY=juhyGZ}Qyr14bke4ggkqc8YG;!}<9z_+E^z>AhK#WJN z^i>_lN$IP$RosOt$ZffHgeZeGwy{G&1m2o(T^Z`lz%nXKHC=6-*40(GwzuY&F2zhC zAbW=;<@rnjUs%m>H%INs10Ey7F`73|*rj^z!mtgwrdG)N{(`^ulr3pO`%}7hZ1+~f za+Fvy05X?*fm;BSYkLCQ-JdmT(wl#_&1Z`>#4U=svGI4FV2U-Kpkj^xc^qHVVqV7k zwzs6@BoN~P{?5LQF#e6un}O6DThOh}NdTpj+uyw!p7<3>2X+|%!g7ZkNwUF};5HZI z0Ea5o%+ll75n=W1cYC$AwwRjkecsbLx+F%9#P=Q_oAi&h>(6e}<)rGpM{VtO+9025 zT}rHY+;|oie%CJ$5#iSV9zS&&A6;VZiKi)S6+vjTvl;KNklay{V^7B!)e(l9uDub zBk9@&ZGc8M0N%)OHM;biUdhRK*b|=nKXFVTgiQJpu=dVni*OcSba>#BCY3e2UU2xLIIs3h{=k~(( zY#+4ToXy~(Mi3T|;0jHCu5Os9IxL}Ty;9Rs*t3&rE{*?k-$hNZMSg5FC4rBi-)4P# z|6G!NEAX7+Ew%Ia$6uF-cIK}H4H49sbw_*E!j$S4)tzG* zp`j{)ZH==8h{g_4FrEZNs*i%mx>eR7U0_T>i!#>lvz~JZHOYvHzhb3FF?E21ucq?w zXU-O%Bx0!)YYEGv+^3k(G02=plJ<1cU0Zr*RgR+2Q4cCx%Hj$t$>4jAr}ATaD9yrY zHF)N>4f-q+1p9Ej+)x1Nz8&N4nM)?VF(m$Ikp*lk_%x5;ARBU@LiYU6hunoyZ&CPd z)OPk};&rc6Ot*;?>9|Kq)-HXiO$F4Y@4HfP)E;Yv(Ok+@6Or`S)0G zO1rpxoUljiQG<|3=x&YCe-&U^u`DlM@r9!9uKA3>*P-%rUe*l{B)>yBw54Y4K0Wp0>9mabI*kYjYhbhkrtHgV0mtZ zF#-o!+8`pKRe8~x#GFnvwtJ;WxY)x1G~^1_edWtT#e4?zvgK_Vl%Tsk`Hk^|uuRDe z$D17)ZAPbtKh6Rm@Jqhu1N(Je_Y^L zG$ATanWqcOWH2#Fd=&AQFlqrL3Fx3AQ7F=CDppTDz+J$W6rSRHH^GVf)8SKtYNkt)kFK&X zsY`BZ)W~FxMI#k8lbijiwL80&JDXijR+Qt8kJC5SCzzP!e}pjB>@N1h*@rCgWaChs z_z`JBJJku&%3HdG&>t2~4^BfitCwO1fB#sy<&Unxd~pcNA6_udaHrrdWCZq&Vsa7c~^N|SgtUhbpZVRZEv1Z zv_3JV>9Z>Dw)3S9S{w5Yj_}14sk*EiJN@aUb39~Ii^S#u$ACyk!hITeW07uqEa>hD zZ)K}9j0>~eTIW4$58=S28!h!uTZ79zGrCyR#J(&aPmS0A6g(f;`ZfRx_D0QLJDzvr z`SK~Xzr0&rXPRh$_E z|2R@oJCoh1_l=qJZW8aPntvQz)A|-+pQT_{7{OTm9tQ(F|h%bow%2Z>9K!AD27FPKA?1_ zU1?ioaX0Xu7SrBw`^uZ#y#I!b-o8o&gXZLgGffD=ePcJ0Y=LgEj)ftZ3aB~bVV4PndYwPR1yA^#oqKT$B--;}E#BuT$~N6hRy z*K4?zdcrk^!J{XxVHUUh?NMu@6)uYjRkEoInG~;*P9#$hF95t@9JXmQ z9j#r*C&9aX&a@rr$^FNzvD9iJya#fw2INTABH^MrExa{(D1hsF9}2N+&P%kL>QNw+ z5grj~^mkH#xU4B~I^Jz)>aU$dkhKO!`HC#{)~Dw{MiK_ zBo{K{o4^t9mX970!w?GX?&0Z%%()rG{Kr-+ua z-E=(@gZ=rQ@f}qZW-Ve%7w`KC{2jvO@U;ZKlKx?ZA=2z1z?&|OEuypc@WyorJ9GAosBwW|5XRjU0*FfVSUSG_=z&`A)mHlaLstWm`MqipLkjmBBfO~aF z|6arA#gyQZ`S`tkjlEV^S67X?)yImD){1yR4`ZBjJ7dFVV`f!V39hY+_Yt=ta07Mr zLPUVA zupH^3WC>#BenxW&L*TEf_*STQaYfnyE@^B?fRcrsd=>3{FxSK`cX5ySeC~M#o{*MO zHZbGpaGAFH=2dH7ujm!^<=gLKcOppOmYI0!!1jj~Y@H)|RfW->y1!5<_IrOh?7!4` zU3>4QU9OkKsg`r(k_U^oh*kmwQTHMG|G#C=YCMv?bO<4_ZZ&*xL8Io=Axz0e0XjAM z-!HNq=jjG!9^F!T$MEj+i?ckYzqquFM!AdYz&>n=c;hrbM-)M|bV`P@{R8Qlb98oa zucj!BxH2fZWbfi+qVDQ`OLc?Eiy4V2FfrTaiPw{wgyR#Ch& zX!*PLMtp*x-Jm)=ORa522N#Xf7~810t9eap1@_ggl5U{0xVU*?b%j&&Y--CK4wnKv zBgqtQY641)T@}JK_ae(jw~w&Nwa24q;M7_|SI~(5D0-&Nf9b(hA9>OZU4nSUMK#La zub-NGKWlUBglUt@Vo7UN>uQT*7e!1hr^U!pY^{ReB};W+TY~}vl|MmlOJVUbZ(=ds zL@~RJnrg1~e$os{zUA=3wXY#MHopHaM3MplKbHfhQByi2na9E1l=OJ;7V#tIuFqaZ zHTr2yh_+Q%<4x%fMT;ux0D4_FbY%zekxI@(&Wg+T-5lC>gh@jmW6d0+k2!N<`01%1^y*IJk-NKCbQ!3%ihoWRmQ{JPhz{QZC>R{UcTWGoPHcy zg`UJLCbu&%k?!J%2KY2Ei}vr$@tqvUyX$O2+}}QVM)36BvuUTI3W)mU?rq}^fw$F7 zv&RYDFFMY$y}uk6fh~}oEi5@zF4f5W6m+oBT)bko^T-Ea%D8mLpg@laL8`lc-+Z1ErHz3nNbGd+9}9W{q{?T@H4 zF3^<CKxIz+UCBe3LC_2M>r4uNvXPpsL;O)ti{Q9HX;xzT}mNh(q`BUEP5L z2rsJ93H25eZZd2-NsKfY$f%p;Kx+>DiZPz?p%(ZQ`(&M_$k{+73NgJe)AmG=@%|2c2~_oTZG~OGX|ODCgfg(;Oy$nrurM9UT4UH4;xIQ#};D8 zyYloDay^5KLV|~tR`i+Iulw&TL9Y0~m*j)8hsq1Yb;pnN^e=$j`lMcG8 z&evjS9(}i3)s{=qI*Yv&9%oRWED1D@>@#9Ktl@pGyT%@JCh$y{3KWjDbs1y`*`q8ocOGokey3uvx=@*i>}83o7g?= zrl{1_I$@k;gZ1sjqNDv6Sk5e=_0j$g=?R@LPaoq)k)rq0bG;z%Q1hYS%Eu@$nN}OW zWl=4)ICt5cKX4_XE+r|w)=|4t@JslU=?X3>BXnKkI(%Q3OgBI1X^x&YGRKu^S={Sy zI$?r!JWIT#8|lI0+t|$hp!xS>r(K2}tK~v^clc>Kx@40>WwSskhlkI=@~$9`+$ zqYF$Sa3rsd9L>|-3!v;3)RN4|G2&lNWF;1Mz4)w2h1tY1E^^qNBH*yOm^e%S3%;$@ z8gM7#O>=3N4E3|hY6&Y+?T3Q&j&&>(>BSh5nxs9b0$n)A6vMgbrYz06%kI)=?-r>V zhZ=u+NPP`w_zyH+H^=gRE(%=K-(7i-Ox=9NuV?$bZUJl9xw3K?F7u9~3^&VV}?73V0k?VPe z@LUSqC4LmqbC7m3iAA#2_CT+##N@!C014MR*!J)o@PRGj!c|xnRJ|V#9v3{)8&Y{% zEL;G0xg9NcHLN(=rv1*3THbnk-)q%p;_HsjLo~W&QwFzYl`++uh!v&M;MHJAevyQrkZ+ZmGHS5o4ISV4WIDcGkQv!|n9yQxaJR(!!M8|13fNG8Fhc0JkI187 zy}_d`UU7rUR~m2!=g*I*1mjq5T;&u@qkIlO#4uLXR2b32-tcFjpu|0nF_AvHFl$WuHaINNMP>3;0xX)`l({wF`8 zH7^HV7zi$>!R;c%Psg6SJ3se+M~;hn@jS{njz$y%l#D?0xN~W#{|a)Pk9R;8$GD|L zkG5Y}_Y{{ME~hStitAR{uPZ42)O%hKta^jTf5~!=-o{u4@y_+dDj+i0>%dnfLqZLL ze5O9TYiHU1Cfjdo_}cIIo?H4r2$DntsmMBOPfy=of;XI-?l!!r zC(HlF38&R)24*z8EAta>*5eVXl#MHz?^wGM*Z{he$_7z`{v>H%#F0f1eDI}36vzkn zI9T7RbY^D5L!yL{8iJ)=i4D+y#1xpaiex9=CJQ2-07(C*jL*%IwK?VvT}!!NvrG?( z&b=tTmBGe0MX}i*;gjkP_I?s4*m}#ggTK})&f=V6Us^8m|5loeJJoop5r9_T3rh|E z(7q#H;B$Obsm47d>lZC8wfvCL@(CU+LCsSY>87yGVZTRn+D@j)!T&_kBj-@evVVRt znf-NyO;ya((^%Z3ocuDgtDOOPazWaIz&h z?(fA(*4@&oy-1+aZG=J`(X_}3aC!M!L>-uJXg%rdJ=Z&Lmi86Z^T)5g2Jso|MOW{K(jVDWPcJJzLfw;tW z8BE|WnF)BrBUwl&3a?>d)PP3D6T1$U4DscOLEYhTQ!7#Z?hS}0p_oMt%Ac=Ue!JnN z0?T@#=KE=h_CK{$YDRl!3?~G6bcT~Jt74;TIr8(9@cwjtBQe63Gi^ng`O*uMZA9ONS{`2!LO!t7I<7WHMBF=}%<#yJREYR}X~`#< zH>9C+(kLSOTvMqUB7Zuu44GfJu<})tLfjdadK~>{lK7(E<0k(nUlFn9nDbvE!zrX4 zP#lO;7`qP)*rz&;i-L3ajU-*At`ulUfq*FJ8oTeV4S%Xfq75V(!B^eE&+M-Rg;ET= zbrf}8L)L?YW8G6j@+EJ0ZnL zV)(g;J4ugA_JzN?ermpls&C%=+pjN*wTSp>DDssS@3tESjH>6eYL+Tw{=cbuj+y{30eMU$)~+J}x)| zPaL)=+7{L(Vrb{em;BN{VS!FEr~x^sMz?>RD+r-AB6pMeYC$=zu3wn&tKjm4-wzZv zv&?y^FvAQV=kS)OV6*mydU1>Wm~8K##0t|c*juk8mRS`KNlj~4>`Sc%@#@A)0V+Xo z{7Oyyuy8!qZ;ACn;2WOL;EVgA5y4sYb%ObU;~2_w+~YJ`WNCX&GU3$GPeU@^S=+b3 z8G9~sqC4+GVuvk=0GDFaxC9k!BaAYI%f+Tl9nBKUq#ISctDY>1#VPY6qGYV&gV=+R zlP1^i$-sKXw?E;V)|Rw(9?gSkr#TakqrHYW`R?pR+!QM-x$beGSvZI18@;&q_-?&6 zD{&l*-=!688OjQF`5WmZkE}3Q!^|KD7uJ}qOQYn>sz&N31yf8mys&2eOMiYv5Lu4y z{y%#K256OWa~wiMmve?_t}&CCwYHjiY|=S2z4Qk>oZj!Um4@2S{b9KiUZf7Hu`8YN z>RdFLooIFYS)?-ej?UYY>#HwsMbk^il7Fj@Q;G~>O9Sz`tlt+l%6}o|h%_#TPfq!i z+Uo9Wg{62o0XmU+J*m#p!}$4=CI&{5FEKHbsM~agNJ*9o|(`s1Yu`|L$xc86ky3vDVQ2HUzN^F;@oHM zHr!_q`?+ryTAEWkls&xTG-g_Pxlu4e&IaL{El59qgcv!qSf628nZ>N-e?u!WlsNUvxIdZ#7s{@@R@Ej1O9@T~5f4JeDW zL;e*PX1OXW->`66(ap@)uC6#GRHHNYmMOycqWEaX`)QT$wwx5z2K1Rr$NLx?-_NX& z_X)A);2mfws<8q~g*GBC>~psW=6riHSn%!{&l)>RvXwHbyXa(X%hF4p;vo+ct0lYR z?ZQoc^NYQ+>h*ayVnm&r$V0ElZw93iF>~$;IO6R&60=NO`gJvkh2uXEE$QYW!wsKD zExRY-F2Bt>{UqZR730`mT>a>)_)zn%*P3{I1L;5Px-bbvEaldf3e87|U+!Gl9hcIm zl@}1aMTr0zC~M6M6d=zNDgRK)!JgsD2e(&is^hrfe($C36nf=5Uejg%08$jjD$^}` z!L_Kb%UZLGW>%*-)jExePwQt-TOlO7;8tr9shL0(E9M}CiubA}S_6;)1@Pc!4&Wl# z_TDd_NW=YuEk21+m!aWvISCU{VIywY0yfiXrq4gBIg~>mCb8~6Sq|KS=>liu3!IbD z`CIa^eDaxRONq~;X7i)jtJKPTcjxM=K}Rxo>H3vT?z%-m`#xOFFeO+Wh?;3Plj}!{D?_D$t!ex$B5~>mxm@D<;tRL2;4X=s0t!_DA?WVIOL{d)Y}E znh8#@!DMgK{6Nz6Xk;mFUkkh*x~7Ha^kE`P>bq#ogtBT@vNB|h*iS@mjovf z%&wLd{HUo8Mi3=-;?aP*=xUi114(?}B(h+g%v}`Gr~Fp<@-EfL8#7bWJ7K*++P0jE zCz!XG)fl1n@isfpV%EjQ=|MTWxIys`;NcmmkyHlhy#P^lD*a`?``zbH0IK*#iUO~w|3H+e$uG7K8BAs=sHjJg9f*eh-n6` zsnKY`ot~lENsDQiz;!)O&8RKeIWgyMZ(Dzrev`v*Q^hLY`y!8tZx*_vty|36zW?0t zimZXxZY5NPLY|g>zK1L)vd!U54W`s3Qf3g(MjkR%3g{OD!Z&|k#eOWjUF|M%5UUKV zCEpulnSHzZMXlg#LfATAtB*Uh2@kz;_}w3H?!j^wR0P^;l3K=t&?nAwT^mv@q;K4d zWE$DI(LdV#=VQ8fCo<&>upj|si74&@h{hanpOzLd&0i%kB#7M9jN@5BFD8+9K0H{1 z=MvVxwr$mp25C&epF&!G<&ipMgIA`x)Gl||nt677B|cKVlQb*Ehe>$%}M z4XTli%!}+z1EUT1LqfkV^>g$^*j9~5B>B;*1ia)AY2-z%WYD#|pQ5JhS+taDv>C9R zJ=EJ_tv&QlPM<*=h59J-e%Cu^@S^oqo?e+fmHJBT$Cnab64CoO{gjg?HA+D5n*ZZU zr<--QuB>=KJ9oo$dSU=)rvODN%_ag^HCOP&xp@i8srKi@H;cz<_(cIHt8ur=p1hOA znT#afCtKU_GnJwD=6baHp?!U0f5*nIPV*RQ7XM;+00J>&y*!AIEp~+;a$zN{RWshN zYiN}^;UwO}0?(qQD2tH2Vqd})Jskw=jz-BMO>_7sQbeK23-o(!gwxU!{`f^n46S*- zbeC|XX2m-eMu8Ova|*x94=5Z{oh43m;vRG@26ACE40T~CcGbTHq+7b#BNA7nswKm{ zo?JWa{2$BE-&=h&qePzhSPZG<4|f#qR&QBAq6eXb<8nk<*+)80}@P!g*9 zp+;r6I>V}JBJ|qT=gweoBjyiyH+391sM#_IF(Yb<+*P7-+i;qq~&-{f33qhWi>X-*fNz}wrtf@m;uO+eaz+H{GjRk^id?QEW1E4kjfLn6PsbakUw;)Z%BBDP&n#UA zf4t*9;&1Rty}ui5uzFR}^iDHmFx zk0@Z@1e-{nhep=RwHnG+;(-pn~_S&n1>Lh z#>`%buS`xo%II}r{b;T5!u0nuEyZO%WcgV&@ZlNplwnw5a!Wc> zo$`XNef@a3)6Ip7N{gS_R}(sdy}48F&U<%qtg(_7dRZC;1o8xKi>Y()2S*`UPtz|C zWv35f%oUJRj@m*Z_&k_KiT(xi#DzRs?8U-anW)XyL}Tj~YyS7MO0TJ5?~#-K7%=_? zI0nVH2f+H}*qd-KCI7!KCLHde?9Ii%^V4i&Z^-A;fR22${9Esb<6TT)p_F7++iCXa zPJ#K?wlUfbApfgS8lCvyK@=kFwaZetQL9C7hZ@QBKHY`z%?pCKV!fVwK1?UHaQCr zf$NOg=`J{Q6V`0tJ?-2LI9mY#)pUg}# z@pjRLmHz`7jkox?rL1zcI*txy>l?+d)_Cj9Jub%;;2yD)sa4N`rns30**)c7n86|y zfp~svOzwNv&w>@7wrOYO$5lq1+&v#%-C%~dl2p91^DnveJ;)BAd;r3<>=QSudLHi^ z&#v5`J|%xg&y;LqV`%BFOI&^1D2T(THbsaQ%2eIvrHFE6D3G{u$z<_rnn?8M%U6u* zoLBtC@q1)id0;aH4&_ioVrH5QzCJ&@0V`P*+hf@D*i2$lIpum_Aop^abqs~1+B1V) zI6uP1T|AALfzNnA?49Q|YUUFjb~=t`F#Xu*30GPXG@2W^t8g=v<}($40DJ?O8Cy0J zqhX;%A9Pg5PYVVQNH3dZJ@Q$8ir+4<7Jv5-)VbZiG8S>6N}LAlMDtrXe7r?Jey?5W z(c6Q|cr*Bhpf_V$hiy3LD|=$aZHg$q>;~Wf0~RwBjk3W_elsS9FQzjRowa2ni95E# z@1DkU-ik907k;Vpr_+n_jbVtQAUFy46OVw$Exr=asagG|Eu7-*CvLvtU)R5;;!Uw; zs-Zac_xRX@ViGmMI zA`9L7_Vw0Wl8dcE~Om3LNYe6W;t$czN`^J4)ZcAXU>HP3(8E&A8$`YtWc4vSL z;J8evm0{)#Xb^->Jh(Jq1;B4m>7ISlvpuHBZ>e+8Q(q}T)XSA>JN8TJZ}6_qBGz%1 zdm}(Sv!L9BORv2tLpR%;D(`W=A3Keosr$L>hDlN>cy8VB1OHmNC_BxVOPko{|{`(!hg%4t-aYNI>hsU zYwY}fGEiD{rh|ZL@*Y-34=+PlC3@!HY2!ApHyNap+na;65ly>`yb5W%cu;F<4` zwD-%L8B||e6^XdrDDd`5?d$YJZq8Q!M8qHPC%QdP|y=gy$>2!oK9EpO+G zpJBuwe$U1{9tJvbZLLnA`Nd2h%r&R6$IoLzoCh{j{;>F@_`G6qa(3;6#||zlc=0~G z$`h_Y$|ia)nWIDhLIy}0Z^I@22LDn2(}eyUgYPI2eaGmk6Ez~F!cT-WHIb(I_k>g;TZ%+`}F*ke!8%x}qR(NtG{l(-L`5?H!|D`RiNF#GgbC=EYx`mkSkHL(!!?Qz44Xn(I?fBHax{7Ah5 z3ZtVbX?X2mmMCX877M6GYir>mgOjRH4|Np6hhpTxCdZD-f9h?PT*3*^LCKo(pKSn% zHlxLL)0a0WH!!Xx?F(ijlAuKtw?0=P_abTWo>Ah=Z&O~}?F|eTT=9Oo7TB%R*B;mn zJyg7ozR|JX%4^E{+VurNaR)XG+5W!oHMi8iJv@)*Ft4c^Kl1bY`atm1o!*Zh%mKZg3!FcV1>8bcJ9IeQS3aw zwKVM~)6PbfZQ4{Gdxb^djGtU;+}WpHIte_w`h3l7eEXd%Nbt0hDf?05`78tLnVNz2 zn|l$4NvR3LD8jbU1w*gQOBG8O;{xAJWyFf@Y5Gum;~aq2G_l~5o6hdWD4`^oe= zBiYG>7(88u;(ff2Q&zM>Q|aszj=!m2TVcnzwq~!(6qo4=U*M4AOYo9 z2jLre`yc2i6p2~{7~79D>5HGp3FtnLk?|1-Ui%+t!XM=XnbN2AxBP35w+|VWqjO5Q z%T8m?WPXkJdKA3@rImINz4!|L+BRPh4gr~uK$X6Ofgn~+^k;syk>>jyT*q6npQJk= zgYjvuHzy|6X^VH^1bx;1l_cA^M0UqS@EriRBkK_SdC{#TwFTnp*GyyE5AQEFyu2n6 z)8k!hIK&%b^Mcf*%zWZnSotLXAW3E+&sd#D^ja(Ej%!OWrxh?yceT`Ep#Z)P1G@A` zh%=6v8zeMc$)N(( zBeE{n9i{vWHpb@5(BQ;!$@?)ctu9vQm8iYnKi684_|%MM+zgtSS~u(MsHYiQ6~E1+ z&oTe5;k3kuqhIbojnn2UY7{8F#5#2ELq$!c$-xP&wJQ+gTaWl$Dqs#XCK=f74QJF z3S-I{5A`!1^VSmqi%#1vfA8O9pv!x+7CZccS?_+lq42KW;pQ(dY9-!1&fm!JaU7a+;9x54R>@>|l^=mDKmR1%VspZqhnFGKep*b} z2V@X_ZQ7<23^ZBT5Z9_e zrg?fKMHE*3gC8fc1QRO83yr6S4F?2<7F&Gz-j>%{W(W87`0i4wZq0`^N?s0XAMi*y z=??){9@_-cNmoOr z6s=x&bh&nEJ!G(kRV)+5j*5M{j;&oBK%iX48HGcqfx{-TIcz+?bxaH^ke z3aB>OkRt1a2Gep9Vr{!OV^40Tyzq#rcNQR#6HfsG9-tnP_lV!iF|1oP*YoEcyze1hhsWKJLI3w&Se?=m)tzbs=b%yr?Fnkx-rW zgtTg2M}JA~;KGM0ooF4m&;qC3atXC3gepI|EH%;W$ls}NZm*{il4~)4k%!|=5WFR1 zY7-U!D2N|h(hf;Z&B2Hfdv>e$TRv~BXY5>8mEV0*-S!wAqv1b!`}M~h5ZVydZ%<;) zCZwUJJ`u+EHApP^XCk5L=M*|(>Y5R=UsM8OsC=UesW!9xfjx`CUE_=0V4{Z4^ON*% zFq-q@QyGE_lSg~<%DoVIhtU&g9E#<<>@;IF$X)yRSE8mV#lUzW$>}0W1&SA$7iq?X znRPu*fwjE-oifA-@pa5A|1}3#W~|@bTB`8qMQM+>4rVDBg?CwGu-GlC0D zQa6XAm#+G%b(Z1o`|dTnge&beLAV|M-opRQ^Ur`Qy=d}-=e?xS=4KcSTz|2ASCCQt z77l@$PsCLw;3^FoZp-nS{Z)ps5kJhE!o?YBfH;4S+|ts0eXmU%0M$#9#_ zHfqD@AJ7)V$3q=|F3q%4L@kdWYx}>U&vG8<=jvp^cQr6J4~+NWD%EiFQWGZxr+s;J zK^=HLti1jf zKR&D`;+TnVLKDrZL&V5^X(bMA8=hXH{&NDS+oMN*1(eT{`Uuno&N~yCMO`6+;h&6c zRYEC)82F>Oril=I8z3syYBiwu(bc)KsU|p5a5O$tFdTGyts5|mej9cSr zx5qK%st*@+YcDhxb-#UGR`kvEy3^<1&5YtY|3;<~IT!BSk0*Tj);>Ovw~nJ9(PcA5 zo}C%nhFMo>{5{=nRBc6;e_zd$>UOjiTVLXZw2a1`ZzHv0S71||-&J^JrxI`nFOE^3 z{iErV6a+9HylsxZkcCk@JQEt(#7%K!{^2@#?y3d=<)Gz{9LAjuoQecS=?0D)&z=Cf zFDqPJu|h;uL}9tFqW13Jg7opKR}yzrMF)PeaJa^X@e@^Ju%tD`ex7}puh(w) zBnGUoqx;|dF}kn1nhz9&ao>Ru73lWqB0~VI0v#hT_PW~7fW`6T!|K-$n>v<_Zpz)C z|AAUMUS)W9t$~NR|m--@GUn0_m;0q-smVUL^*^fSB8o)Y$FEdO@k*T8b zPy(9x6}4E~QKzv`p!))Ke^-@e6+qR)sW?Bk?JJllblxtL7W}L&jBWUZWtZyN_u+~u zWX|}QQa)VqY0gg3k_D{yyv@icVpJGozl=y+z)VCE00&QyBZ+ogMK90iL$l%V`vjT4 zTU^KaN{Q!rjCsuQ926d`&tm^v4eJm|A;}W=mbMroP@D*ZMLltiQvB+-f=wAqbBCl{ zHg3_`PSX)liU2>5Oe#nLvmQxUxk!@5O@j#@V|6S!Grh0v#XaqP*?Y#krB^aO7e4S@ z&M_L1ZUYRD?+jSawL;31ZZArEZt8dz#;-aRLUSv>Ih>i2lv~XhsE-jsG;Sf>_X}#_ zTBygP^#%Y{5%dAs_W`RyE46Q{1@OA1_7D{}d*@0c zBHS?Mq|;7J7)X$g-ONPm`*tkio*-oa;%7|WlCHWE&k!ibA=f!<1N|^Fc#$@+j3B>w z{MDzU?dZ63L$^hrxA#!RiDQ0oO;4*v=U#2Cx4&`ufp~M8K<7ant9?|mgy#AEnRoe# z$$kWg(R{3zwR@aF0rS($Hyk|P;4a*E7gk{QJx4-_mF970un0?$GGFQzlY0fJ(m~n{ zG5mQkZo>)`Y2rurWU3Y5cs3e?IPAEPS<}&Oo{P1*iY|A`^E2&Do^;IKh|LWUdaO88 zrACsBA%?zGrIu1-Qis-XGIeMr)z)W6Jm z956app9!$6DSt~FAq6+^r(pEMo9;gm#$LI&o)V$TQ1HK2cEHYl$rAer7#84Ny5tcK z|3I)57jjZF%o5sx!oR|uYVJitwhr|GAH@WGdI59F{RX$S3^~g5;W7RPy7dl96#56s zEX7;m9--!^_fD1jIZ+corN~KU(6vM)0OmJV&LGFrq}8yD{|i2xDaW9eA4LG1IPjOh zQ1@NIBs6|*5fu-yU;hq2X&*hQBYI69e9mcW}&rNs2|ACT{dJrAp%|RuWT|M7sY3n#` zVO)W2NV7E=6FrwahrX!iM(VE}+-hCCcO2GGpm+gzvr2HQA2Avii70y~6d{Ya@C&dK zB*o6mIqF+Jx>In4u_5?Hre)VIT%Kp3IW zH=Vt_|C&$SXhFFX{l*W(ZEB@sZ6j5~kxkB6SPKO76gGpF?+Pfke!%Tu0GzRb=zZ=%3|1el)Av-BG8&|gn%!{EG@6}G zO~2WlNB6UD-Yqr>6g}F6YJ}CnvXMO~{L=z>bIpxs4oPPTUTLhuPK(OV6~098|KSa( zbB{u)ecF|Yx$}u}p~%-U*w|L#kT9&L>VlF$_a788xTiqgIsa+H#Rr=KfT7wqz- z1S^STkMKZy6VEsSlyVIr=fX%HNt4`HiDm!P{DG=MlYddM(9R+|+v0PV(ut}cvb1#q zle=6M5ozF-^$+CYhs!yYqJEPmrPOTn;d}#k?)~?IVR9X6G+LUV8** z{||J@Crm6p6Fy`b=d~=+TC3QOtXRtCtIyl^p=8=F-B$KDhat?=WLmiB3m=75PU^tk z$3sNaXhQsSpN@yi5GHsF`)$y>))evuK#&55L8$ zYjgZZHsLz|K+`D43-mf@TYSE1q@P&A? zE`g9rScIfiDchNR)C_#e@ArMh1O`=~^~Z~k(3&tqnBIb#o9K96QtyUPFY9Wh?kM~~ z&AzoKQ9tBPSIU@Fk|i2`ri}S|_^HVt{H(IkCA@|`QdY4Si&@y3!0f<8oQX4cO?XF^ zuDl0wV20SY)6aF@Ldww%J1lK~!HIOg3m6ZbPD10lJVDwNOBn(-eo;(~tfb!Y;W_-% zbfRcq!8sMe$g@T_+NfcQ6qeGL7M&c)L;JHuS%V1tVWf4!Vj7t7AIQTn54Ykkv@v+GcEqdk8X-;m{uA*A&zHCeqjNN= z!G`BQsANlirna2Out}wORiBDK=+YIF3zU2x{XMt1QuD$;E$-+a0l^Bz64-R+^Hq`5^xszzYry{vUxdqHK0?ZP zPg>5YcBSfWFXenpW^tOm_~u_G{&1O|sVVfKU$SLGdf+Lqrud07+q_C7cR*H@voTK+ z_Bbxt*w!wew2Qpds^XtM?{@6!I5J|HwliC!T$_#31v`@fcU90S!i9*o^>@gW3atY> zdDSxODGjdFg!pa<7B;IbXz5GC*omK7pk&E001SA3um>=3Sq_Dg&bAJ}zfUZe)-t~g z-_*`E#sKQlhNhoYb_V@34s%z@I%A7`A%( zTH7jUQo26u`tefn)%%N!hJIuPxjC(R zsi)5;C5=Ti39jKGq3A*=+)nqC!(>~Jbt;(smXeQwS{&fYT}o}e>P`M;H^3^iw%rzC z6Y=c;mZ1Xm$TrB^;^I-7ZnxXHWp*cCk3FI1!S(qDZSmNSM!7veQ}IBGMtxC=D9W0( zJhmsku0(fyM9+SUlS9j;D%CCF`*`Kw!bmc`EI)Y~%ic&y7L7ExkQxzdCviujiSPQ^ z;yd{0Q~!aMcfR|)47E3BX<})EB1t*5(|WV%T|I;nQeh}d)Xm^u^&Ky?VHS!1K(fdb zpyboSy+spk=O)(L((Z)Xelm*bnb=5IFp>8lZ{EUY>AJN4Vwu9F`er#~*<1DWxC5rD z@l6zo2ep4Owby{6lgM()S@j9MxU{73R^lJXpo|Aq<1cv-QE3N<3dz~EGqS4NK*LJr(I4?d*#~6 ze{N|;h@Q4{9IUMS9Vl_l_m;Av7q^9J;)g;2Dv`Btyi>6Lz4O(OEEU} zQntj33)cQ12w;^D90Ov+cl74bS77>tF)ngutVKsEV1Q~kWjRXQk`a$h zpYNxe*f6umzi;OC?TS}L(c{|ZRIv|#i5}5_NaA=3GS$+L_C*8YZH8uDU(;W$sw)Hh z6o-#&-Na)22cSo{a#?R&3XC{Kv$+{1z0qYrdEKqAv8eRkvO(wK(F_cKOj_K}hY~Sk zox;g~cW)TJD2FhauAg`%oydC?8K7>4{#6uu;X8BNDwn#O@kc7XD>bGo4%@z^msRZ* zaf$M?`u`Joe|Bjd?zw8q;aF?V$eB=9Z(ZJPS6i)|Jm8bu7K__=av{#v=0) z$^utn6Pd1=#s>g-GIHsa3~lQ`HXm-Pzx}UtWs<|Tr@y63QQfCIPS$F#zy`Co+@`Zt z;YaA}_Yxy|EroS9BXAdWN3f8&4pM)s%H%>xR%q~8UgbqiIVw82=itXZtt=!USZ<`l zUWPRGPe3(CBzN>GGM3D9j;kxLD@KRKTtB0@@wNd~VelNjPdVQn$i4Untm^49p4+gl5m}au$S__!O+y4*L3atVn zXYdwMk#kpV)8<-bTKCzXeqVYmr+ppjwV)Hq)D!%@i|TX~`wsjJDLr-+na;2!@5TPP zzJ4~U-$nKvm2{1?39KPVtN^8B<>M{Z`g}R(Q*h+Y4eV8rB3A7OAxt&Cg%9ZsM%Okika6Zn8vEL;D4av&0M1Y z+uli-PyNo??;di%yqYX|B6Hp9eF2?CMcmX@Y3(Rqh6ar{$p0-S0P+}M#{y_tiSbL9 z@FxqqwV1M73$l7@euS`Mb^eI^?$w|rWw%uD&w|{ai|Gtz#L8yxGvjS-)ub$ELM4;h z!*1>zs8NjTi`do|T+j8*J#YPr4}SJ{>O*?E8a=?Opw-wNQ&bL#!HsG1LsGxmrr}IZ zi1^DBrxux!SFW>EKiCTLI|Oq8F;EzK^NBJ`3Zh>j?CD^1=~g9^nV8zHdJJ1a(PS#` z{Bn%+_@OQ#pLi*k+yg12j8I|Coi@0VB6k!!trD=fIqh~}XB1d%ao1gW+4BlC4SM8E z+l&S0aV+LEcHPs?>e;ccOkYIFE+I4*x$Y&gWscag+npNkVogX4`D!YtMh7(&gj+>j zF}fwzNB2qX-vWo94J-&(Fl8;)<&rhK130vAJcDpu00e)KH?X9chY7Vrkt~GzzI>GZz>$-k zc}Q9D@Q#W3SAm#E>|bm>${D`IMb~nN7^OYou;={CApWD6WAdQ2R)X8c4R`MDQQn#p8-8>#tY|L%-FhE_z@>FGJAjTO2w#(e&~Xx`e!XCWzjQd{)-2g%=t65VdbXw^L-M~ zsXkg&=);tD>>He;_f0Mg+LSK-GeccYFEA?BI}4nsqmnV43Vatwl+Syv3!bhah*X&( z#~0ueqqIARVJWi}fuzS*Mfd{JMlTrJ_E$TKbpfYH3hF0msbOfPzX)>y})p?=@)qijj0qTX46G4Y=!ttrxT$+AT(YRPIceGVPNvbm| z5^Gt@(-4!=|9r9r=0~=nig95mr@e44^hc7!pY;@Esclwgu4YYY{|%@(PqBbzmT}Cs zZtd^8*;&XUV1hM4=%B5rqS1hFVDSG&<$d~ZQEqz@VU+zN$tP{ zsLVedrn9Xm__*2JUWD#$R#gr!4w9A9f5Y%k=ZFG?*mG_@NI1!I3KpS)u=@vkSR43q zrz{L`(|q2fN^Ius)1siM;*Pwi`VvG@D**oPGrr?+?uSskh)|Jt@LO^+c~V$@)vk2- z&Tv1remc5UpyQIJ>&r=~ioFW70ahkL;_(CYER}39dX>v}gx`gEs(NkfbhgP5-iFF- ze0_3!4JQ$5l?8~0XEA#^aUM_j z3#`k}2(^olGHzcLZ8x_Zc;%93+NbOUzscm-)gr4aZZ_6_o`6uB3KQyyCMy09d+!0& z+nCN??<2&f=Y5m70T8mU1M0)j+( z2_Y0Q2m}Zv38cLb&~uP;&U^oR-~X+3?|X-}SmKv2d(X_CnLT@cd-nFW_OOBin*i?4 zUOzj^X@B2#A(c34C8U7}lAfNy(O^J*b8wk1{BSe-OkbuY#kx%^;22hP^Ip@bGg2bL z7nQ^LfvbJ8JS@=rRs^EC;U~YSZ@oXRK|ejK zvV%%0NX7tX140}zolOTgIR?vJkvd=R*dF#5*R55Ovratm{&2{4MCpf_!1Au}h`{&O z--Fnahgs&G{=nYkt6>~3zb3wC(*aOGC8-PBCb*~3bZ3tG zB_KThG%c6>@(DhuMDLuh$4=Ojt6|7`-O@8z5t4MTOT%=wb~%9S%gEt zX7=&rvyyYW*;OXfxEl;{PssGM>*D-Wxm9HkgkD%BDWla^+&k z6_8a^h=>8Z3s?N^-RZd`mw#XlW8b4mqCi_zde2SIfKjnsF}SWogTql*t~+f_AjvcG zqH2otZ`Hg=eV3Pbvh;p;_ueM~Pc8RIT?i=$hiGw5lHxkpXyI=oSeG#Ywoq}eI2o&sQ%i{7~Kjf~Gl2(PDW!~!dHKW_q4~kJ8YND1R{?;g=RdP?FiqBdM^ zE%NsGu&&|A>o4V?nDSV>rCT1RzpGz#Is@TuJz0Y*{lNrx1ngLCzgzff?TC@e_jp|J z@<=y8g_)`eBYrnn$GEi~>6fjJ!}`$6kIg=Pd6_RB=J3Ao-oE;yZ_64YzO0El$~yF- zG{WgZ2H(2(dY95v>aO%$^P%}56?JDBP_5^$+~OPYy~-Dd;hI)clQa6}0~f z;O$-e26d}kA!eD@Z*OWcS$k^V_FOx&J3lT-0{V^Xc4`>d?I6Gw9=74!hhHzU%V@K~ zRy=jMcw@aj(sk$g9>m+O&9{2^3UBU{dZYw?B`(MomFPi-a<%*&KiXKmd3~XS89rm_ zrg^UPX>y|OHA%~W=jY??^WIs$J$J%H4%0(bo|d`?FYqhhf64hm-&+N-yru!)<5RI# zBsivdHX|%*@>s#$t9hLdHy>BJ(l{(Umdn-ww;a<5h`v8^^Hll(AXYgrRsA)$8Jw*U zlz-up{f(^4r_7!YZSMK*cWW0OLfvD&(UBB(RmZwngiVb4aQZ{v75gjflOB+0j#h%> z^YD*Nm8UvgwI+8PD8Mzpa(DZKEypRrQ?(Zy4O^bM!P3p{b;YC$)(Kq&wnpDNxMDf< zAvzy8xenWx390nE8T8S^%dBOOZjgpy>J`Sy?$J8%%%vQvl5%8a=-%BM`r{#()9N2% zlN?Hqg@xpgrX_E}td|2^puESq>!^hP z**n{$N@}!m$9f-1$I;c;5(%um=jGeN4V1fWV~u#vNuo zI#cBuQZZh6?8L>!bjvL{R;Gj_2`_FAH%vj6*Gyz+Ar;aN?>gRicg!#Sig*FXhT0+x z91zGa2-ur4a1Ji5*?;md4Q?RbtVWGlZz++!x5(_yCgmeEs}=DHd2L;qY`k+qXrI(AskqZl{R*w8FY*ERJzV3qh(kwi zu(bW}RLuq@XnhGso=Cj>DXO4*pUl?x6#ha79p!8)^p3f9-K3PECYJ8C^&z1{$>Zm6Aro)_3cG!eN#2F=0C14p!B!?n zdu`zzuw~z zfo)yE3e5pWjkC2_7~x(kfqM#fp$;3P(!YnY&oRMk9g=m!wuid)C#4Q%Dllcg6PT)^ z5m{^i)Z-Ut-ok2lh8e>y?CsDn3Ef9^kP}SL#kQn>g1A6B0HhwAH&!Jj`T;3k;5x19 zaP=NNR_f(}h{BZf5!<6?4aI9mb6foSl9IC2O43g@*J1`O9TTaUz7dK>GvJY-z! zG*A1S{nGv5gM0q$-t)`zfE;TwRgU?3YJwnbbj=Tl?OJy@Z+#tCLWJn~$m zZj#S3+;&t?pG0w36fwob^trmBz}?JETPByUen`3y!{mY=<@8K%UjvJYz_c6-wcPL66AHYJ1C)tRW>8-1jT9 zv*>5cumo&HQ|kSQIBikqMkV67fgT{XQ*et$E>NEigm*Vcm;9+d1I5WzrY~ zu(v}5Yqw%uRgsd4uo9Da7gPJIyRY7B@?f8+A2xhpeSwHHo)!R(5x$U6rFKtRigqG# zk7m379rOF#Eg==#&I#@9Vz~&E9n5-Fwh0J(5C+OukOrL4ET4#j7c$w~GrL?{H$Axe zRR@19SO0SfVTvCp8Y;kTsL!F?!drdlX2-Yt=it8?X}Y6tr_Vf9YUOtU@LnFvU^ zO{URnfB|e}7SnffGT^6rE;#nKCT0yj@&2&)vA5Jzf#!K)t%t;DS3^;myoQqV$(0{V z;&!48gR8eOF!dOwTH1&XS)^<;5q|dTMb{f+{0FwR$aZ}qyz;!%l@4J1F`^2~zq!b< zpIN7W7_S|=boKe;iYG};kyM-GS=PX+uWsUfeL$RE!P)REc)n7Z%L~8I(v~M~gm3}Abt*VQN2PIpj*W@PJCe&HU)@{8n>3Hj->6t2jPRCd%X8_CRP+n8> z1rF>DSYgbG$U`G&;ZYeCrjGhVqzDsnyiuIt>{B}l>)nBYN< zBJ5#&$0yBoecms}R_!`6tLw@2q)$Ln*akK73C==i&ZI#CvfAIK^IC{UAQiray z9&2N7QK9SNI6w;7St8g+v1Du$)2N^2aw52_vT#j!?jeMkQJr;KeXu4_WiEY0z3|in zU;(`m+9WOQf`Wc_Jn<4^nNY+cj^K*TquHf>24>UiI!~oZoB}RSZey9kr)MHC%><^l z3O%d@VOE7&>-jxoz^zUvB~nJx}zMd-y%l+@r$tNSfXTGYE{S0%5QN!EnU_c(~($KEL8JLk2~z6 zi;uEhO_}u%RaHhF*LW=B*qXquQ*Za_Jc+@@nGes`l|Ks)7gv1#%m6vJ<)J5$46MgJ z5j*PqlRN1ZwoTT~ud>s03hiQzzrm((dfHwToGl+ zD1@V|(3G$7sbphvfQZnFB)-^Fk-~xpL%DFs3q!*GN`)SN;H=8y6V}~N|Gf9o8dEpM z+`pIZ#5^}%)^)UR^$pt}(t7NS+I9A(($6&cxHL?Y^xeol;K0A0Z)$6==p=l=1l`Om zjjQYQO?XR6C4Jm}nHrvLB)h?w)MastV5tthP#$AuP~nXNG_KLv>l1U-;P|(FiN4U; z(_T#QgEP~9?2U2&V#vRf>Hm29xf?rYQPq2g$}BJisGi&4wOWFbToU~zspR@vL7>Fl zFX4LlJKlLW5H-+DiAUbhe zn<4Mb*zZx_z^Zy9EOJuggyI1a&~nfk8}2ce=^-Fb`T!^jdnULUu!sn_WD#?QwUKQ! zo_{ab?uuy9sq^Q`pT$3c`Pv3Y9~i3aJE>odsRkl{S?iJGnQ(6oW{Tu}x(TzBtv}v3 zentFlf{>m)#=*V9t-9}^;=0c_ce-y_eV#jd+P5{jBYjn~qHou=uGzL$r!L#z+MF&U z=ut>zr**5gmG1@5(w*=~?~i*lC2IvAok4YlV)J&~7I~D=vMd+h7iOv&ulb;>EOs=F#U2 zJTK_%$QbjAo&;i(d(E1X?%8?6@4bs_u1~tPq}>4SlB2Nb09=1tk9~v5x#p!f{;+#v zJXq|+|{YGRUg*XfvT(QA@=@2gbTmmK&qx#GtgV1xOCB3wFoG-pCTJhmbu zMGe_d*@6z}AU1d~NHgeKUXKVQKV?NKi`QCkVYPG4@(Tfx6;obz1c$MkH z+%-yob*a)&QDqv#-TRoQ_9nhQ#|-VAUQ3eUvZ@R34_UiBe&Ht}zSj}AuIF~$N+bS& zs1aa?&PpB#ew=xyFH8j!;^ESRTVE+tS|`+P==YkW==EgJ#`uWUAod7eY=w#srt=-# zJ62El+UBfSQ#)-2#^Vh3=8SC}`>xS_tVdu-UeF7cOIyf!QC?eGZlJN zH7le=n=Ur)(U;!HpP3=MCR8`Jr{>#kooaP|%VBTj@ICj;kfn_j9ckXUIa;L?(p z7hz_4J@MK#Pl4;S@Yj+F5dw$YhCdr0l!@E_A!{UecY0vusmiau55<9~hLXEaQ?D#u zckQXww!Ke)g#fx{2&Ej9b)cuM5jAca)$y4^kK(*9k+|$pLY1wsHp2`>R;a(Us?Q1~ zMb5xq;t`a0TC-jT)VD(99SA8YNPcq;l%rq{RPR_9H2L*jRb^_z!MOWrg1PreR}T=u%&biZEP z$P78;y?BSykDlhzjD9yQXNf@)-S>whO)~1^2x4cwhK=S`(etyV3rML64b`rt|9 zttXcSw)+SVDPlfau=);~RD&gQD^-Q7fD^f{v1I*?=~YbAfL@5mxe%EIN`7gCHPy!b zec#!0ft{qNtrt!9uW0LqP`>~g_>D#x(e9gZX!Ve9DN)nqfu8x_Zr#FCtyZ{)EIU>j zs!n+uFWEL_eJ)vJ+%t~0wnDUMS7BP`m7)`=8*dLa4#~$$+|@r57q|l9HsWs`o*l4f z#u{fjCc#yjLftV?3uUUTetP&RE6%dfY$9d|Cyd(pX=C$7L*z$f8*bdoE2wPS(5Wlr z)%h@#0Le7QC&KV0`h+7vX&Y(hxqbZ`^p~~WW$ywaS|6mc8**2q+7@Qm$D3R3M(X_- z$&xEAiuSIK)D+LUMta1D7l?*p?ez}UsC=bQWY#!mI6X;7&BuMF^ghCDnEbpo%Hj27 z`d}Z2Z2QCOX;cQTryI8c%0$sO7bQ=$n)%;|+T3k-uGn$&M;Ywh_w-4bXyj|R(GTUz z8wlBTW#~Z8_6Gxv{3Kv2O0mu*^QN+OZ^_|CS-c{;Xw%gqy7t`71OPWnydHmyyr}h4p z4^4Tg#U9x1&n&eA`WtRq_c7R#+N>i`e?0whBU0+1?yHC%l7Vi`^KYxwc3B5F4i|uT z3LYODa--kJ?ZNfr0*6*ZMSw#`g&@7IaGipvGcDbXx)*FsCgb;ymgINFeuS>66XJKO zmXq7FvjkBY>&uGQP+x2%R^oOVGFqKcH zekl77DSIGZj*#ExT2HxsWyAK4-@j**^=cVb26gG^kDIz_UZ*+c-}fl(6u^jN_m~IG zwtX5CbLE1^xsL;paFMogjFMSCIx1L$FpyJW#_ ziJl*g0E(zX4qjiphozXAAXdLSbft#*cQ@STzUf^? zuk8~NYH|r(v223w+Ma1oAKKP?o&{lEV;;z36A-3?z{oxD$Qjn|AJRerFN#_QqNk-C z`ZTKckI8p}J+Dp3yfxae^3d{IrWn|ZP_~O$Sb8W%&(JU6cmX-lk6RK&+`|eL zlUCuIOatV-hU=77h83qJOt-~tF-f(|$k5oj@%E}wWgC@8LzmglIq!kk|CUZcHf_V$ zC$NB;k1aywRP2|8L(TI31|Pq%yN?8(JLZ&h&!gBF6n#qv-5$$b&uL<>?pv=`2^PsO zMqFo@KlPOT>N73#NhdsTPsZ}2%P+>AIiq{kOi2cJ{4(a<8~o$ucW(UDynKvvU7H)X znBh`cQNfPchmWA!U|~>_c@gwg_mQhaIU%_#&tyQL5p_$T*e`(YYI_7Y-F^ASW}P_M z?f2Is-B2ISqI$v;P!f8kH)!Bq)wqX9*%IC9r$DMU>y5&4s!;BOkR1lIF>l*RjNIa> zx1rNH?!&;2Z!4A6Dq1NQ#7Ej3@%0mWJKXO3pFi)J{KXUPGpjlCj@CA^o|e{I+W#S) ztwzh^2fIAp5T{zVGoaTgSVQ}8Lj=r)y@^8K&P<1~F0l=0B5i>sW-l*GOSkmnN}IK$ z3~bH(8+V_*)yUudsn<8_#92v4IV6o^Y8~N*eEB7XSyLYjCg#RFm%byb6m#(+P?dU`-1Lzj_aio<4u4Ye04pAQ2 zm`TK)$&;lS8UZ`GLN4g*CW`@K4Ij`;ia(joOl~r7R`p@$X;YUTCm!>u*1M$23v=-~&x3;k4hddmnv2n{mT0r1HyW zuXN6qngCUP#e>VYeaF2ZGj|x>(+w_o3#UWm2xOsodwN8}2n;Z)7yyfaT!jMW~=-BOjGUaGFQXNqXdtg30YV~ zR0n%Ujk@reV^weSoC+P0MX$)Op7^QVJ>yX>lVQg|}> zXweP%)k+^a(tKvqzPZ?h&%0PrK+Pc=^P#{Vgno0jDlt>0a!O$Q#d%~u^vU#TQ$F~z zi((ItZjO0ROa>z57I3>QU1l6VqCf6HuF#Q@|DJaJNM~8b*Hy1t6!2tOxwpHnzFxgX z-_!x|R&CnhDfIYLTBOU9hDfl8{O2Nhx3V$Z05Yh~>AYy%fL3boN5e^j%UfB6L|mVG=wwhY>OOznI;q1SCk&$_vvY;@UJs?=7?H@(x6^|e{n9C) z)9cCo2{Xx#H5%V%lBL%J=bJ#j9em}wx6|-mX=-Z8-qzOajNO%+R+vN^iOeY%2=v1$ z`rLJ2%AP?TaYO($`H88DjMB*yiFWcgs`mlcUVa0YH%GrQY2IYIEI#z`{B|Q?qX&f7 zanfx03Sr>;t3W{~`VI)*V+3Ijfj~LHuL$te&+EFAnuoKKtG$}5hrNsQ-d$HcUHEbi z9WM~{01P=pi-1dj-;Tqb+#$o9v1(Tlr$= zk!|83cU~RZv7=#|eZhf75TuAdn+s=H z{dkuK_=_Rslj{KsuchPgP!fJqU`$&L z{7In=rDMw4m*rT%Pek@@2AZM1IZRJ;OM%%wX)ExL=pCGPl)r93Ay&R^k4)~Lb zUTo3fKe_;wH=X+R9w<4v&-=PC8ff9FG%{WHTk5Z_l7gU~D;72JoO!q8Pm;%NN!!(a zk+PU!kh%FHl3Jt|kyN3keS1+8zjMvZ9DR`RixklK)UU1HCf<>T0)LKB2@8ahf`Qv+_*74oBs;#ef! zO@DWDZUS!@O+ruzWO3=lxCD--`*IMdx#y2zpCfp9b7c>YiQ`R7dR?v}yq6+wM{*fx zo)@yWt6lU5Shl_+xmeYpKbz=lre|jct3yJ&()2IsDj?}m8(lFt$QGb|dMF~O6Hjpa7to*lra>wi9m>unM@~hAjxP}E1Hc1 z$3Mx2c;dPHxYcDv=9wCf1g;u;r!NLtP%fl(b4%es7UOS<8 z0vcRZrg(^0=0EbDG)fMwYmdZ7%H)!;C=$n4S9_FL?_uasTnZT3lF=!N=S}mt;N*l@ znmI1zSom!Xx|dl+fm(e?&hC1*N*CdW*L0;7q%lv)zyglwfkInF+7Yp;+N>8^bUe*> zXQN#koghT18V*4tW?2S+H+{D94^y2}2|F|4#}+blo}}Jf!@izLZFIwscHSvkdn6*0 z?aqJc;oHn`cS=EtJFUaZxN|sC!hX4PAt`tXI|f*_|)QJ702eW7$fAmW-?0fm2553QwVRx7SdITGHt+tb)p z4Buyvt+wWqm7>wc4zxrFheK`mOdU-1He&VpLaVDBr?CD0C0TSfqOgdgndjY45W*D3 z6~O>K{Y{scTP~^Sr0gCEGcN=KA6-TJ!?7hg}B%dlk1ph*txwPnC zg!|Lpelwkk_dvT^e>$9hv{O*I&Aiw6pIZBZx0rXerdGI_M4Xb${Exzh(<$@5^jyRi z!;SMl`^}$;FK}}uPcbxj?x#9nS&QP_WMOKxwAhTD_wl=DcdN-vE{8>Afj2&ucwL`i?7ZNZ;ws0t8iBtXIw3D&8m47syqC8; zo_>97J_5_h*(zNzSWyyOCpe;2ggoNp`Alb#GpTUgig*N^*%nx8)D{(7xBj$CYl=oC z_Q|K`qCN|w*S=uN$%gf+ha1#|RkN3{dk~1HoYeoG-CeCy2dTW6LF^V1m8+rPV3PFnMmcSK~^)SMvAzm0L5$Yn74 zNJmfz5j6~E$M$9$pnyXfsIaK%lYK}O56b3_pEc8CKxfiX2>+2Wb_!~ycM|W$lE82) zdIQvAncn%7_8rOIK4`NLNbRW-qy4`IZV@L@cRfPHoWE&zbHiY)thlF$ED>}zPED6# z@ZE6&!zD42c{4U0Vh}89S9HfbWh$FkhcF^2s{cz5hBL)j)gYxV9FKSnl4Y#rv5o}Gm3nSEl~-fg!Z<)eqx_y0Wo{` z?4@smwEk(sS+CQ3iQX*7=j1kYn+puBc$Ap!|Aj+q?~X6zxNYEY98paPnb*+Wr{K%a zT%T7Ri@JP=T*B)N;udsN&0!#<3Zn)TV75nkgw?0*5@GdCs?#FOJAN6=FEY%)-&4Ly zND(icJ{I}8oXUM~4rN!;2Lo&iJ46GwfBxi~f#QCZc4U32ZwF(rPenU9HU$hS;*+9%(NwocZ$}i2OMlXL&1R;ZK8?xdXa|R{`D|9{ zQf&TG$}36)LUf$2bkXyY1aq_>>MSv$-o~IAtJZu6%#Yg7)v0}&c@yu*;CtN#QzKE@ z*(5rCCiC5h*#~;(EF}c*L8$^*wCTH+Sm5P@E~_5F+Rj1<1&ZsbIA9U7(lfL@MrhmnV@!qo2C6R2P6jzz*0son8|eN-*id zx$@iLylkhYT?g!8>uI@wUYh#9VY*|~k#?};_myiscsIkof)O{??CsoCRCv6bv%PLwDfc}J zy02hzb|Skpiz&u3#-tEZy@0Br!r8X15LVk}SArCaXz)hrr>9)xI#Plq;vN$%)qr7j z53ziwZ?3Y+*1k|xh&9FUBA0h4FD?icN}vu)rJ|C6(-)KtWVhQvCCAp*7NCkrE-aV0 zCxN8}ZS|?wH8!yrThJC83OK|*OdODYlNuw8<*IHcB8XIfeWG{YwN6LlzHHk!9rXMO z^#UTg@Tul(E<;QN4H#NmE+YKBxf~FOvoxW~CsVC{I_5?8?Pb_g@KrMIwx9?)Gb5bJ zO^nVIilBsg&*Co=$fDub^hR}c)Q|-Tj@t-2g%sH)foI_(5!(xh!&GoC0Z<}o&B%NR z)a7puCnKgnvs(B{onN&&DIv)WM5 ze=P%5?{ThU69wy_nG9r0A>Fw8ecE>B#pZI-ey8D{U^P!hl!%x}Jffo$;>#lg-J;*{ zaT9*i=I_inn+^Gq^$#r7}-zlQru4T)lDOd zMiEEb)-=ZN^O|}@&Ck1?OO2vZy%{|HPDj(ypA+z+840Z}h}eAU+u)otC5SbZ*(=4U z|8>H1sT)j8m2p`!C+7NiX8Zsh{VL39&9BK-(V(V!VM-O-%sT>S5vmRAh3Dq{BzY?O zF{>cWN${_){@*hD{!Os)r#$}uWHLF22?u82$&%TjbTxW6sT9bl(RsWPUZELF^)Jy> z7JAz1OCp_@#DQpgqGts*M4ftjFN%j^&_+zyHN9J$=`kb6-LYKU$zjd{R}(4r!j?V zHdeZLfLY%p{BT?t`8}*Z69UVoXjG<|ME@g+TNxJ(7ocf$-d5f zu7yx@qdr?SjY?o{xeS-sQzkNd2h6P;7vHor9-M>?^-cC;N@vzWupyiT4ILaI+51Rj z46}GE4-zE<(kIv!*B>nmRaVpE47=qJbN$M*#w}yJA!*Chzj_sl`pB88P|GWAQvN zI)(Aog5I45!4L+!;u~gUj8`ooGc$~!&$8RwCfy{YY8=s*Tfn3YqnTZ8qXrCPav`gV zL55}fjkH!$k`Zc~$2zXJE*Zkiod*5whsA(Nd%w<(>z@=2I^3LTVtDD#bT*eV_^8_A zXDt6qKm3OKa?OctU@u|{kvO6+4FT&|%fW=vBhwFg&85`gC@i&s>X9Wi2If7-Z`^6)d@Zi5i+;fRB>8VZ~IU^sqPe5rBpPy}t<~loAC=kyKw8%nt2_Kcew_ zyiqr%6iR4#SIj9qj$$|NM`S(CrEq0BUND_7X^I9cMz!;g;_XEr%pmAVKaB!V%m1L$nlolAS|O>dV62n7 z1u*`Cr3#V541exxKIdS(5*ubzQzi{_=2Q{8)4+J_dCEwsIm!;*P&oHIQfR3w6Gg-5 zrS4h!ueRGnidQPYNJY%9+%e}q!0m}Ic{i@oMG~f%!kU5@~ z{a2O@hUW!1-IX=l?*a3HC6?m*DTgVcPEo*wl{|qi!Xh}d0{x=WFZunPe#q3mzxqVS zFoJn07YvcK9HrLDvOaBI~(2w<;m`(EZBFwvB+s_r?BnC4_u$dKYxw z*r$anU3lHFAC$cuni(bUye{`E!Z7Feb!pw$n=)DeaNr%HjgHOhPtYieGWkC5+x~dW z!0&SQ0Y{H42@Q(R&jId?6ZJ0eU~?h=%u9ZYfuvPkH^ECYOP_(wHkE7gA&kZc7N%V^FDZ)n`7X_A^EU zffz~#fhh|qxIbDnr>&M;oWt4q%))9(|Hp#$@Lckkru#EO(?*^;XH!R)IxfF{_0DADHn~F~G6z zfXSRjHz=}f{evabPW${Cw>yBr5ey@cXZrj`=T`OlK6D`-;uqDY$qj+APx;+SS)BL) zv}`BxgM~1fW){(xAi*bj?{_P8Mk6^yLKp$c8fmi|;oGr7>`Bks~M1CyfigBNb=5ajq7Db;pne|e>`HGXS`Hy8yTUOz^l(1zrGv zIZt~ZkC1Bi0jc zn*mU+$r-dPGBPqua{E7uO@AJ9vP+_&IdcHpOg6ZT*CYxX4P$wL-OQzx4f+dVWPg@g z@)&swn%3Ewop4;wilrH*=RC){RV|d2h+>Tb8{-I@iSrN{i9BP>o9NE=-~z>u0Csjm zbskJB#?gi#C0HJY-Gbw?X?+y>Svfm%SiOIE!+sg#)qjy6O!$Glt;2n)wn~L#ZM{KT zD1m-+mJ)eg^Jt9+EudD>z}ae^0J+aqirPe~q9*HhHe?H>AV)J2^{`JfwAsJQf+iNi zxdxwl)D{^csk%g)h=RkJCSA6d>~yd^tINFgb#&%&l`SkF{f?1>4Nkj<5j+CLqZ)?6 zKmxkd*WHXy*<5T+OGE|+25sYM>uVddRp#)m5PXRh+-UYiKI9eiVeX10YRR(KKU$%< z0?Sg9cQ>n11QW|Vt_A!^eColYv#pMK61)nn;K2SGd?(eHY*k-Cyhbj2IUQmCSY*B{ z!|$mw*B=5{)WaB6sz2+#3)`L0Ad04%Ebt2D3HSS(h?yDPGZl|)*_K=E_TB@2*e>My6 z<(k@0r}ZJ*Lfe5&QhIh!C!^W69M!#!#VC)^U!WEV(b()9iG>{MilzDaF%eo1X>zV1sSdm6g98$0OI^YNi=TT%7xIF6U> z^{^%O>H*0xcHO5ej^%eWYu|#VcG*F<85M4wrMR*V@g%R|8irjv%CbCY`y1_QUo%J0 zZm{#;-YlE5(p`vt%{4eHVS3?I1i>T;>}(G!u{u&QhqLmRY0~j! zRBwD)b-{`VDzl@kMU3G_%w)Ppk)=~oOCxkX4Ex7=)VFY?>QGEoB8+0FDj6tu8G~$2#Ofq#3TM zj*?N{#!*dVwPamS{EP<_7U}ER}}08<=nGSVWSW2bmNBhNCx>G0FssL>xKa6%IQ{~IQ^KR3+%gi_($2{qots4--=VF9>VyBQ_e zKPFp}(J(D9<30I709?Y9SbgKS2|HyTh*7|56qNy+W`xnF7cVy+MJ?oGyFL%j0{Djo z+;Z`n#U3!(Ie6u|O3E-0Ul`F$4HpLyGjj-wlR0fBVhrcE5H~6qF!JZqsiLr6;J_U< zAdIL~5Lp~zexIWU@Q*X~#babnZ{k=Nr;0)@VhxaICrB715b@2$Uw+Wp?}DQS%o>7S z5=hshR5qt$C*;s4w@6SkEH zzc4Xy*{CfcxGthEHuSfE>#+qK$+&G(<`8?)!}Xfq@*n>p%N z#(Y`~ovE`pA%#NXk?Mqm$(&Sqvm@RRyI)_ggLZptXq`J)%cX}Hnfg8z^-_HoiK@NTqm0{JggqVXwsiiWDt{y8amjYsMGJGf^MmF zfpppZf_*mTVwrb?!m}`Vr&iWTK7Oif7l1A;k$6DpA}r{6@@ZF=E z@mUK3oYV1}$2wu|JUb$eLMOJ-rwe^cP?15>#&f{a?{+~r1@HGRF6DH%6puY8dXNuy zbkDyv--sd&VwcY#Fv0l_P@Y|9fiY`#9vm{4EcOLd1(NsN_SEoE**RQmLA2D;JQTEa%KITV$&F%2*Nd!&zrZRL1EmyZ%bK9)dJ4)&Fb%M*kS>pnWGO_ zA1&1u;{_OaP6YqtSN^jd1189uod&Szb_KFOx2eE`=v~l1mJE!R>lj5Q2av$;ii_7? zK-V*;+FDX`NWlA8a%3J3w)DOKgCzg&$OgtT(R21xbf%Lvn$IBb1JKGzTWOtL*IzDG2DGgxnz)@|xfsIkNMX(me_LiF4sUl8 z$9c`NEkV^j{)_%5znI69u2X62>aRC14D9ryPpluw@P{l9f``~sz?nh+#sv)Z<$^uc zoMA|wx6iR}!3*=?Fp!@&fKk;;F|`(dQA(hzktX^yo=6|0?`?}@MDf1%2hRac3x+a? zn10Uaq$A;~#7P!9#Zkr>Fyr4RpMb}GlVBdb4I=48W(tn!0l4&`Y1cfn#$4S8fUh*;S%N? z<^nSHhtFK%6vO+x$LNQ#j>V+z&k-B9WfCB;HqQ!Ps;6v3d9XyQ)*( zgc6Wv0cVrQWu|)DWJ#e0%VflU4x(ctE@8BT`}+5`mqa7xGk*ZyKauUoUv3blMkQOT zaU@eAl+J)?{V3VL)1fVBV((PryG}Zupue0tnB>MFPCl9g+~@VkF$bY0MUpNhBb$N6 znwc2MSkC(|(?TYWrX&*uz*uu53f3a#&@5-#$H=ypk@bbXIQ=N47+`+?o$vpmru)C} zuP-jo(4tUqMmKCMr26A0@?pTHcPrcfO$cc&tSS?uFrH&1AO6>93aB%y$1h4Q0sD}8 z;EThpe_!|oDg7&`xlQ>0>chYK@ZZ)y5Xu;(W272jsS0e2T?G^&8!TQg19f_o#d-gK zU%35WRZz2)Cy&hk)Qi40TEITURYMm_A+IMN&|293(Qw&9c)k=edUC~E3plVDW4Nejj2e>73402~DH zlcXim0hyc45AW~XFA+4rRpG|PP4sOB4g&Z!X1_^i@jxu%eu@QdM>kzT#2f?&DiKK4Y z4ka-yhWPB_73BBAAI|P*ZLMK|5|8P@c7FrMs<};=hfjYzhpGOSE)A1uUG6w_;Fy2N z@rbj6pKfkzUG9w)0FEvIMq%xlT&1H={ln1*d?HJ}RgWdvsi|**Uy1qbll;^!)6pFD z@aDxUxsxf)hqDW+=DwLN{r;-HP;83Yc`}skwIR+og(?R3?_MS9AyOs0$N4b@zvUHz zI$c9r_f%h!Lg)45h9U2u4@PR9E96`2QsBKMsIBj6N7Alzl81Mpq;$=XiG3vIwPN|2 zFtffcyVb9bzW2BL7I02zMRY$6eMm@4Io0NkrSggh%jaj5r>>;hrL?-Wtc-ZwcAaLk ztEOB&eV-IwY5$3Xs3<0=S(@=sXy(9%T2|iMz_QSx{o5vnK8+?-%u}eh&pYQzomK4f z&v&2b@8Dm4`!U{RT!6ir=L9L;l?A&sES2LY_64!SoA4~vrCRUu4V#f&q6#KSgByi6 zsrm2wpc1@E?T`%~LX-6_satDz;(;k*#fdE?ve=bsu_*zM;pJY*!Lu>JsLys2iLom> zWE;JN?V=9F=N;W{nsz+0>7{&?i`-Vr%|1U?(|&}6)*Y$u5zXRjJ@)w$c&qR7){cbd z?<9PM@gMsDWvVen9aIsi7+l-Q0T(3*RBS$MU;Xh!WNs6g`J?}RD>5tFc4$yDfBlo< zmG^IkANDnk-`8!nTXdV*$%jax62%kS(0rc;l|SBK8azO4Iv*d{5O`wUJ8^@T5~?rO z9B_5l@DDD#QxZF(dEm-KAYNd?T=)meDA4aS=o&kow!h|C{fQIR$4u*veieO*7rAsb zKwQQz{YO-*+RfOThR6H3Uynzhy|bfZxq5iAQ&6QRxMewC$kwatd_H;YQ0vD=^miUR ze>g3_AQxNc^6m|>-R)YDuyWcn-|Ncot80~mYxt7x(WK+NS6Al<_VBGbx!FB#Rr16- zBZLr@b>zn~y1u7NGapx0XiV+qUHEa3n2EB`2c45v7Zq-qY&iXW|3=ih?$s;KS$=+y zPr6c*NiS-SY1(G8-}D;)4^zX(N|QO3M{_Ej_&2`JzOXy{3FngM!(*Q#0U!A2G~nuP zT9QPH1HK(h=G(KvNyX4f0I$_v=$(1~ILzyU3)I^h_obizRIiBe!)N6JCV0J6r2|kQ zrAKSt<*fP`_(1Tkw@`rTgA(Pywl@!LA}rIb+**`(SBu|!Z5euWV_nW|xX_VzbuX&> zCD>amgpurzdqPvkL)UoQsU1Wl1f6W%C1{^T>lmf?tQFXvOJa^(g_Zl<`Cgz)V(zTD zYet)R8FTm2bEmbc(XCrjVXkLf?`^-V$^9Pyr$AW0L?L@p4BFD1^s?;K@;u#w3@(); zg0_bKX4pLfrehL!Y*CHh12K$_&5%fYfRW2gmB&a7{DyK5=v>{wooec+YVWCP=`pzl zn?mgnwN63n5)=VkBjj;_RUn{7gjArLR-;PLYU6d9IIYH@RT=PGqtvT8t&)Hmm8L24 z3s5JtghU->h&0Wp31WHyE`nYF(Xfs2GO3wz*5qL-bJO39&L&$0Va$0BrQ^rr<*W{< zC?$*CVYR!=F4vINHe_=Q*_>{GKA}kPTS1>9RJcU88u9_P6=hlJb!ojet?bZw>;=h& z1-a=9@-vqd#^)PI6PPvt)q)c>aP{%P{9Db{LIYFyVGU!s`^oe?PN}LYRtWx@c z7!LsZKu=K39=@gYg^#5mq_7Xme27e`WCqQFD?CQCKa+y|)QA87e&U2eHowiYPByfkYVI=2YBPjoQRfs@z-5sLt00bvu>?YbuJfSIo;_ zR;WsaX&{xanTQ>*51FvSu^T=LJrKj_578(GQJZ72oDoWDATeOA41O6Rb1%moYUYmA zbRMZ`?zg$2ZN7)_6TC&Xb;C$bzw2Qe1kXK0&8q>N4PtEP;#0 z|ER?qRn-xW!Y3?WG^4eU za?3;*Jr+O*q-IFUjAF)5mzz6SHF&71`9xFKprErVbap|H6Fsq-fO3qOBD)2z1n^a> zgpB0)oTS9;#Q3yC0s1kO%qb<9K)4A(K`9Alz)TRDr=IyHhm6+WAEr z7G|!_=2AE=e%g|CL|qz#_K3P^wr`4I^lbO|OujD?FEua|ur>~1nV|{n_HcVn_wGF1 zaHh*Nq>QsG^bTGl3nK4jCUFp)p#+oC;tjc}NqMOW*-1(*&#AqDY&XDVEQ5+bW0`(0 z$lqipyI~HMJv<_e%Z6svDJa|mH|T&bj~T*sOZOl#PlURaXeOD#A7ES3d#rlNk|ww| zE-2Wxw0wCk;XuGvGqF0X86Rsm+X$z!9mX(v4$Yk5s>CpQP7ccim5Kz5$0&l>OZdD? zAT@V!+|Kjd2WM)}v~=2KwTlOQh~Q6g636rK*MOUbp7Z3TCKaS77N)1hYso1cU`=^d zY8On*nK6q-$1)mOfvKRz#Wpx&w9z+SjLQzT4Tp9SCz!4QTT@S8Q}1A(+35gz4IM18 zaH0M(Ui@~cyzVreV#}h^txHoXl89IhyoP6Eu+iSs0Cs9mU2Ma0ao0D7(HG6HS`>P_sD=0j+X&`M0y)m05c1NKO0v^(Q#4RysbpE@ zafrlygGg$@BHOUA45gWucm|H>(~kl=k2{UVjLt#%5W*%o1cgiF`fXf8*Fb$&KU9t` zp9c*y3lTwp=p}Q!d#Ef)bNPz-msO-@DF{plBx_$-l1WbI7)DRB!!E$>F^s+doj&`o zgbon6Y=#q{%)NQc^3JiUHWTs5cJpdx)eGqwDn5IjrB=4$Kg`08+Va>#97TRe_yTwG$#r}Tb zdLV|;7q0JT^37QI%oUIsX+R%%w1a!|aOIxb&VE5}QN+7=Wx$*nD_<+f1sSRHa?%S^ zRR%9%IaFR3G=%;-j+O+8LkPua&>cZeBoj31qlMAzNHLC~ci7%S6cINE=2~qR_yGr3 z*D(k$p>DGcj_DqOSZ7n`d9TjvNbneoblkP87F@L|BU2`#5nJb3flj*J5y*Gx@ zv)kX%ds_gbSv-3pulZx-vnZfVcJAc^EpMHu>6G6UUW^on3VfYczYV;smuJsD#deNhkJaOIJu3UV3Na6iW#?&o&wYdBof zVdIsE0_qafU^(HXt(IH{*;SmLxG+C6FC~t+9aD#FW}Y#I{oH5?D<*SIcFu(FvC(Y) zSQd&jgcIYese32Ko859vTi4mvt{%JW5VWwy!4}KdYK_;PsZ(CNX30&fw7DFYKy9mI zF`FhkW^?EM7)H;Xv6ysCnA8h{4M@#kHlP(e(Byq?_p#%h<^ffrO@tcY46A@d zl{mj3dr^K00vzikeB&Z+*%L3`7)DQeTt+=GEsQ2Xodm!8IW3woAz(bL0^dB~KHJ<4 z(>;gm%T|LMpia=c%(;T?+7)HDY|711`XV<$te%dG`Sd#?R>Bl|AcoOX=(M@=2un0& zfd>l5y;&>2u=iA5zmxS>iSe1@p^lT01#26h2 zwhBsGqR#Xi9cwbX?V=i{TCj9RhzytDd{{D$tvv*LL2xcP?@iIxtFD}SlT#%Y95~4$i zXd6Lpfq|w%I>VYATRI!BPbQDiqxDrE9rKZ>VRQu3lv%99a1tT+U|TIV4|z}2wZO%k zL`Fph29Bif)k)S=cmGvO3h%mfUa^Mo)XZ5i0^5%Wst~(n26`Zd(b4bJs2>wyvw=7d zu-QOT?VWAhWAC1kBsOt0r>>ggCpN55w$i_yX1EJlR3 zV6pZgK0|gs(Z~J$tz*a9O#{jly9iPdE+-^fe6mVdURtmyH$GmLvG&HcqKke@!<87o zHS)pb^zPq(aR0tT0|Q2n2VQdASN`>jC8c>6Cq@T@*yJ|95yLu@0Zf8}TM@T%;Iczh zbXd4!^(}Rsh&K!DR)Oro)*dfeGG*g!8@cpt8v-Xb~69&8v`?TJ3QpiQYBy^5^HJQrVegLbn^|Ys%^w7Va{Lv=J=sm7Hl?`l3ZvD97lqkyeGC9 z4~K3OKQ)<73R4;(wGhaVgl!@+HJlZX);3l53?T*xup1`xh?9lfU0GW0p3By4FDF^d zVXztSQH)&Li2TmUv?z8jJ$p?ym_V%CqTT}|g)G0jAgE{Lsd{>M`;J5BI>jWbLQg0~ z&WkAf38Gw4lE1VdIf0WkvP+bZcqxozH}fa!u;+II(7nBbPd)jM#)eiJG@1kwg3TDF z+by?Vzj@2rivpwl15Gem^6<|-`;X(tPKlzpVdLr>Z@Mn@C_wO$Y4zv_@`-U9)VNvU zTV;ggA%FLmJmVN0Jhgl>wV-IRcn_a%YVI3yiX_7T#zpOQ#kous$%=ouX8pQs;!2KV z+JqshgBL;!qoWQBfda)J{_ux0S9+}Ev3ejFP)7vw1i1lp?%}w9)Nudr*@HWqOub6t zkOG8*8Zc3|uPaQurlNdavetn3&PZ5A@~8j^2q;j+zdw66lU!&18Yv;l;^2Vg!3Q5{ zYwcnH%_>H7ZF@IevMxP6WtM6dt+vbJ=~L(a`OmlEl_`0=PN#j-rVYXLEsX+*Ci*Oo z{YZ^l#QM6Hr=NPhqrKPVl2TIAMEC;^V>J3CiX?ED(gIV9&I=Oq8{0*aiZ9Pi$w`WL z4Gr4t4)~x#(6$SjZU_JV$=cchIjbZwULcA@mWy)qig|){$#h|oQ>%J!|oW=KTi7I_rING>AzxuT=AzH>LR-Fmafe6~zm&B)^{>Q=nC(spm&=9A&^JBLxS+Zbuw5H>5$H*-J zR~M@wR&`qrRW%McB?JrrA42lKNajr0^6~Za@7RzH`@BF}#c&fSy61q|o1z!jn__bG z43F0shd?HG1f&lZ4hiU7$8o=Vzw@`RpEz&Vn3ZuJK_$v=o#ZG_R9&;YY2a!s1(`a5GY=YFvJ4YFXcW!7`b2C0 z&NH2cjGXj%UmAhXnZzV$dTxl(9MPO?VakeO^bB_}D}HRKWO=yZE@(s$(OTD!pW3&- z&DyU_wktHE%xPs;s*2yXtb9{hR+^I2(R{B|0q4VC2Eu-f2znL${sL*?`8Y$|s#U96 zT3Y-15aNm87olZEuCOq7{f0GEioA#}{=vUKcWKoWKsNs+m@P= zx_9pZFeI!Wkf+9A(3O^!_)R8ep&y1pl;x9Tk^yFsLiUn$Xq-1QC9yC+OZIq8#z9on z!>g^LZonlUIeD(N&sk8EswP_ueU@c19}Ud2Aq>nyU(Ll=#4tMgqY{FQ6A^VFH%uTm zT-<-ZRP)$@+D zl+*;`RzkP|Pibi}HQk#lk|!0YCAI8`^VkaX!c7|&UAC+&U36|qT z9bQAc`n&(}ErWrA-NkefYr@XX?h_|Y>2$h^ilvE(@gzZS1liCjV=J__wm&^Qy_i9jIzN+hMc`8iWCXx0Kf7Na5^vZ>{*) zN<%g^qoyI5NGmQ7rFJn*py|{#hSAgMy~#bx)+IBo13*7_r1znnr+bOvvsU5=xdCP1 zl7fu2<=LsQdX}8QQIH~e(_F)7u$|xf=D(8|d_D_2*mcNj)>hng_pKKjM*F)T)@$G^ zeCcXNo(aabMyCueg2EEIf%s|D;^rJi4`p$Nnq9olV(ktu-=KeBr2?P_IqtZV`|?w#f3vHm zU6~4ihMc97?1dW79cvd}IX^ocYMd|tO-{$u3uMeQGX665A7{Bc$-J`L?NE`?7vrDw zgUp{gb!MjJ$7nYdHD^B@FVJ8ZWO#ieOar3$MkM&uA4+AA`$@iUfy8|FSC1J}M}hI6 zvm(&w;WAOvF_NE!e=n;uG1(;S2Lxx=!g&7fO$#n5N=x!s0MKxF8BizgAK*Us*If^s zw8Oy)Aqp<815vc+#%z=q!|0jsWon)T3J>9Z;hD0d()!Imy?e0R)u&E%^BPbYak71F zN%pOqmX*XS3~oDOZh#;3nbrldmKPoIhb<+@*?}sjV1uTBiNHl<*8$jqq{x17=w!2H z7+3@Tgnqzf@W<}-eGbOr$mo%opOfL<5In(1N@CfglWYmHYeQM~&6`%_>jkYu9A32fNq9f} z2|JJv(EV@a)UlfFBUuFCy1zSK*ex$?LeqgtOVj)2z&d*JUm0o}U zfQRQ1F~%vVS}gAOj@D~a^72x6=u%X3MhiOmhR^9IVtn)r4iEE8fpr}OjlJ#MuU_0! z?^Ht!fkPKgj#{s4RY}h3()2`yYGAe z13R0|2F0LSt<<2kDiy*n;TtF$T`m`bvf`<$uD+buhlJP{N3$y?t0xSd{S4{D)Q4qI zv?(;rHtvHH=Q=HJFw~gF8p)pK>c4tH?!Rp>gCY@5iGdAj2G`X`tmqg+Pk%4eqN$lOVYo35J(~1+L)Wj8>Uvw zcO%?sm&K3vUqL~I#@UDH-80wrfU*vd6pTlN@n><72vZ>oue|)$`|s^0Zrs5aFQsQD z{OiAdF+KsIhj1V7cF8~b@1L88Fw_j;QP>vq%nQLzZGdzM@ z0Mm#q>*1AVPCQ)Qeypj}tkB~d#E{W@Y^CwyckW!ZF@dBZXGaNNX9VR-47ZHtdaEPo zm>It%#&tx{#pA1X{E}~QLCpLa{Kh#4_uo$)eEodipeoTNXfSuRUdPhh)T>s`%hrm> zYeoGA$GXPa93rUm4Bj%jR@6lWSWLQNSb^r_YMDwaRIwF7?Pjj+1XyVWMo*J3-D|v$a>8YKdZJ#LrN758dKw+=!|pI#FaR35ly};=?>)KqtVLy3 z#Ctg+J|~H;YnGL)D^82!Ja9`PA?wC_|M;83G-^JrM;YP_)8?=Oc;SUt`g#YmvT{gV zw{V+QxEGGkq0d~~M|QctEdjhB`^{T#zS~gW>I-hc%ZbT`b?aALf5TPVw_huHq+k8= zH%E>fU$(SDqfsL)$)SVCc%I<(IQ>ex3{EVvJTTaQ$>xpJ&oKD*nQQN~2Ae&Msxzir zpdn^O&YPrDmgQwQhD<{iI}G&@SjNVwjyAN`^*R^LPYIA76SZ(ow>k zPPEq#|D6%g2)==&RuAs&`O`lSwh2iVg#k-b?R69+Xs=tlxHLhn^EgDw&CG@``b!q~ z?LG9y>+e*Zt37`FWL{owQc~h5#U|iL0h!cpbE=f^C}ucL#Z1B^_+b4)cf~M9JDuJq zo_N;dBHw7V>bvf~Waz=6V-vh zAQw|J=U`o97(MZzgxl+bWk5n-5`l|4T@ikRsPm~jb(il4m0;r{Cb4|`nXbZfUejvP5!Qc{|noaBoH$9h*5 z@Bi~d|9I||ci!GvQ`3-}n-^zDtf{Vl|Gho0yz-{oBWlMKDtQ4P89AQ_vja0~IV(X|n3dkw-|s+JKS2R=(mofz>v)YWDK{@wU-rc*Pp$7mWovp81it|b=%YsNdk^nB-tRFh6A_h01J^9kebvf^6?w^Vk_(=M zENY$qnn*^UTJ6YFv$HPveftibJze8BA0`l1-%!7P{Th*~jr^)qfyVYkz-7hYfa&nz zBgc-O-1)&CBmuBm?A6t^DXB?0IhnIn=aGFnB6J2w*C(HN)@sIha!JXFn>TOx!ykUX zXZJqykU1we2R14&#bfP-8Q!(mU7=Dbva+)F?b|C!z-2@vLBbQSQl-%A^)9EA?BB!5 zSrGhBzWJ8xSFT)k!S|%8&n)^Ra!NopA(8XE9-T@o$j<=PK4h|Z1SQhB**L}NbLWjV zabZaU%jd%A>DV=e9*AM|6grI|;P8~g(u7zwh|DSV+z+4L-RjZX6$V)QYd!XoIPr!x zOA6xP?(IhK4Jv8}&(#^1cBj_7$etp+?F&0zHkn{sNaRdnJ1om~yA7C|o0lDA>msza zw0CvEF^wdYlD#YIQ?H7FZKfYXv#4AbazcjU>vFR(a{ATh^^#jVv=)UUli}H5E7BxV@yL={7Qq|Yp4bsCcl9+k5 zo&9H8Ol6DHVeG;3j>lkn3d0lgGn_)F4L{Nw68jCRAsq3txfA?sYQ5lcdE47N1FfL8cSL47eCP)rix6Z1cN*nP!Fo&_jlO7`RBcdjYNeG<3!?)IE5E{v>%CK^t8qwf-zkCF!8psyi#1Xd(q%rV-aczo2JJD5&tE(_gV zJqXA#a_f=##>Q6UE}>GhZ%N|dAKcM_<3GMsC_G%gf8@ZA?J)wTXP-#JAsi@62gmIphz#Jbyvy6<2Nr6EbSh z1E@7&4JT^BZ2ujzdRXibi0`>9TRF1l$kSH?470bS|j{{3(JcQzXPRf&k}h%|$#qIdiHii+HnIFAGNc9V+x zJWkL9KQvHOm>Yh#7KKdh~D~*e=L4qZ2_! zwIUz3!eSUb#Svuzp!W@MU;W#`!)Eo6G7dyMQ z2xG8fWrbfH3l^(pg1rop`)KuszhV6cf9}Ap14M3ZZM9i}DrlpWmX;<-lE-gjmywwU z#UL$&RhzoT$ijjBM_+pJb)QY4uW!BUH>^!aj3+sOeRR<1noNEeF2obTr$Ca7p8SNU zKhXuSTuPLsE6TI3TU>|(C46Yzf(p6qf495(M{grnypQzoP4?NFwilwmqVdicMo+pI zAweS~BQ%6>H*^2_@O!l`jY$MRb9%31aaPjyb@S5&N$VMoT{qziM#;_;o@CKHR4buKoGkyPVl_EU_trv6+m9%QQgtebN~Ghx?KSe?BV`k zbv}Roe7G)}p<}RLQAzBw(GKRfOnRH4YIAdIfECed^e?^m3acA#6-Dv=_jl5N!Ju1a zVOPOj_$yBUx~Zvc$Mdhk=WqnIvh#!85B%k?HY?J)vfDqj>kc9a4vq>!Pdk=oCttsA zS*j@Ea0w^d0afzLXWIVj>Eq4RL>1dR8DoEsOt?%wvNy!+Iwn2zkPmTWd#2Ly%U2F` z2uXHP3k#$K$+Dp&d&~UXc-fyyYqv+b#;v< zlcl}AyQ#5N6ch;w34U{3_^MIE-Jqxlv#388V4iXK(9w~GRlI!9C+y8uR8EY3gw z=|P(f-~)Xrkq`ajLV_Rm_Vzb4G_F{&0_sFoU}SZkTX%(=ZhSoaa8m-A65}X?ftXISt#WQPa*ov|7E@^w1A?`Sb1x+5zwYmS zV(*z=RT@k|)skf399JwYTacyKxrzM-Cz9j;i16ycZ1NbdB!U=(vp3&(=l%Egk~4Ks z`VzX@nbm|hFF$Mh4cC^Hk+gWUs0+kz%3^odz|VgAeU5+p*hRzx~ahy1S9BoJ6ulbUJwb`9wJq z`-vH^k0a!=KM^C1{DRDHeDkZk0Md)F90-#4;9no9I#)kd31CZLdskLo_=PWiMpU39 z=1@w*Nvwf!Zw+Ju3e0x&lv7am@!~tj>S_n9F!q2VG0tONsJ8z1y<3(VxcJZ*Owp>z zhpC(o?U`#P1_=P&$#Fk~6*&wIud_w|SO?(HMS9uR$E*El^8 z!{~^n2g{-Yb;plhtbXlGt5KQk6tn>7bfx#EO)HBNR0zRAETG2_X~$oX1i54ptM^yG z{9QwRi+`OHfY#~NYuBy3`<~mcx%LX!sFD00Ob(UBv!|RTn7wdOxj*CTaQSwd`&g;5#N&ec>9KGZaI4^?OG9#v=ijRlUH_;|O_2ly%?VzfI-|khb zRa>@hZfs(vdt`T|?mNIO0GR;aDA^3dt(w2Xq>WFDcmpn#s>c)<>%6RoJ(>7ZGAOQf6OtX1d& zz9{VcfCO#iIIOcDJa*zh+mKNikB9`w30sn=zG3~6bWuVAZzbnTKRC6@pF3Bx!hZ zPl!`ft7iD8a&mG4e?Yv=oSZD!0+XtdI8)+@6Q>Rw*td4=>h$zvM8l^)uA<`Ht=l&E z&jd`d2D1tt5k3*tgXYinnG!}{>CbyttzN!rbp=h%J?wwMUPLDVk($fO$`&nJ#M%`f zZ}|87zPWzG8kft#cqiPJlbeN>Ql3XReX8>GsdFPpdE9y3^;a)h;wyxWDZYdjA)Hk; z8Tx3B$~4OIuL7T9a}3Z7q;`z-O(a30*9|9^Wx2^$tX!A?n>@*F6LnpR#9!`sZ%3sA z(zKoTrA&{s(2vG_b7f}CYHyD=>k5K3pEaA`NSa(p2?L zt4kAkNr?~~;ZvwY+#p%ly=xCNPHZtSm;eOl=4B=)C;Hf4S+JO0Cr_L?bm+(@@4W{w zO(|$<%|?#Tik%O4>COfLX*YfIPDPd$f9 zW@KdezM~rpcAYD)x-2CXaXyE8i4i`#b{=^Av1eRPAAKJVAgIL~fz+ufG+9QjLN{V( zhenwttwIEnOE#|`7(|d-b`g0TKH{JL%qK^s3JWx3mKS4~y*yO2O_&*sW1y>pwoG~^ z@LglgH^SYI@CJYp9$Z~1_T;iNM&NZvz$M{v5 zy}!=#w3xkyP5Dg$TwoG(y_fsJL&r|^6GaCA8mW;NXD42z%>+ED0O#m1EhwRfEufIJw0ApW9Px=0e9rTVn zZwA~4J;Eg=C4Auv|Dx5AQ~=>D;-@wm(|IZkw)!iE1Yq3$eMg^q@*hx>1oYCuGiqwH zi>MGGO?w>0iJI-}m#2yzh1cy6wEc?YKmT*z6DQ3vZhG{HeuVkxi55Oq-dQjA9}gWl zGbCF@0JH$#*0uS`mn|wl4sR9bp`H)EQb?HksmgY7afTHumRYUltgN(!i^|rnTYkqK zH$f01Tm~-;44D6N|K9_iEX~c$II6E+z4FMBV~D)$$1n2sbLY+jJBTi8qNYt}We1*R zt5mJh?B2B>q3lRacp0IVOG-=d8R4PdeB)i*ux9P@`SVKyc6H2T7}S4iYTChrhg?oZ z!4H>;PeVgy8Zk~NE-v;F$M~Ob%ZX0g0Hejl1zWdm-mqaE{8m7Pv-)q@y1uA5-{bL| zIdd8qee10^6&B{;)iBz7?X@?&FnlMwpM3rHtMz)sz+?He$T0a&7-ZktuyGaApW~ZX zUVandI;qc#_mlVDnU|kQBbT!Kqj-(S2uJ>!;U1QSCmw(9y?1uExAz=9dNd(EAvZTC z+@uQ6q5G|*!^`PRZvzV`y+)avnbFzNX7}=NM6?U)%GxGTlTeziVNs`J7wduO&Xo^I zuQCa`*2Dea?}yKrc#B{_V0HlX%EHVo3-S>L8ezR)$&7Pcz`<`?%qcJ7;QxtFe(aO? z-hIQ3*R5N(j@Yy@;)3`VAEYjA)CiBzfKo$aZDLZ~r#^j8sDXq41bO7)r{L-qkfuYA zt}`+^NOxU2uQ*UNb(I#Z7T42H|AU!DFI~Dc*zh?(>1egefBBbtl`3jq7;=%50jv*S z|L5C}KJt{yDWgTtJ^RuSiGb=8;iJ(Kbf#CS1e^a}Lj&}|xV*@XvTofP9A8$fT=vax zeeGM{{yM^qGP(&YlZOb?7Z&+WEsgTt&)b4OZO#0h<#~(d15R;~Z`}QL#M~{1Y#w237RG0*9Q^WzF5r|_` zQTpccES=<0hT7Qq7Tfesv;V?V7w@ge+E{uZQclFZL6Wj<1?mR)ji(C{IWy%U}5%(e!d8BVt<{jcdwzk396m2OsS2=^hy9H#Il6ojQFAd8f+CO7ik@mMvSfd^zm! zvV0NZd9JXqsHdm5vlCWdzLgI-1qrKw)aB)60V9NIR&3nIiLrJ{avDM=F$u|Rwj4Tm z1m4vQi2$hpK59v7%LfI@O6a9+na`Iy!}zot@Ru-Dh`uoTA#pE30ek)bZ(M86;*^ zFw;Lf{WaI#65~2T<}%i6HOGDD(PL)@CB{Kh2|9IiX}ZSaM1)+T)tVVy95bf_6G}Ac z%;AmNY&`$`OC9aqbI)5c*@- z*uej;;I$k97;!w}gtWII&?s@-7e)S)_kLWdBzPKJ6O2V)uW84QmxC=g7Qp0+Y8bA&?3Ug;KsF!a+MOC5}itQk2>v7 zZykU3tZg7*=|P4i+%_L^tuEdhKhhW-j9(CVAp5n$lkkbtC;L4XWxQ7q!9lMo%3NQb zYk(Ueav@V;a7IyY`}XY&@BIFRWOe=RZ;x0I^oKb?`0GH#HyPgO>Q8;@li*c@kc9;O zfYF;oqREF$>*xW&$O#WSjewm=khh)}NwX$e8?sKPy6f)Sz}}32s!{X^Y1g@PutW|Q z4RxZ|1pXfA6QxqA)+gSm6!Gc;UnM5S!`u)Wf|iyR zG?`SJmm!0H{Tp8)613ku@z}8wK_Z|R8C%AfHW*Qi9ju3Ea%z!~)_Zn5|H?B@?~pt! z!XKGQe)}BX5d;paPd)i;eO=>dkM{mPP{fg91raSGrgMmK9*4Xw&P=6z-TDeR?kXiW z!r=5PCV77(uSom-L)kgOn8nhm{O})V4|mzk3IiB3t;e=LKV@54 zrq&G!nnZI5?gWCEp^B{X>6y@KGm0Y4#El?hbL6 zc0B*u-aUun;u3DZHOgRy}`zPN4tgpZRYKW)!nOBzg)vtXaE*{=S!$$#= z2|GT!f-T>DUjYeqo&Mc#{?gw!#LVde zJ2;6a1)4Lx+J!#NqETa?#QK6IYo=PhdF_%c(Ft!Cr>N;v zr~c}dJ@2#-XK}JgencTU#z)hTE&ynR8~vY`Yd>fhFvF7&jw)XJ^1QUI3v%NnaL_&p zIv8b!EexVOb%eC^3|OQ!lEfucY$gtS99+N~8tRrUt56c984tqufxkS|+|*umuKM_i zxhQaHM*sEbl*VNQ^cKG9V`ubQ5Bz?S<5Q%PreeQWF8kg@uJ#*;$)5ZMgdCE0n4c8<4Pj_W|P|L_qQ&arPJa za=5+FH~7v6vIte=!w)@PTT>5@`HT!m@iTXpSG@52tJrc-ACqb5*zu#Vl{6UQ^?HL( ziudx*JpKH^1IGj2lA-PK!g+lQ$*wz+j|vOe%>O%*Nyo%(w3}rahfEC>VrFJmOGlU8 z%eh3g8*ypQo-HXY&eU@_T?V$wXl@j9zO0Y59L+`tCn;dtuik2Wr?$taNN`g}m8I#1 z%NOP7y&lFvvpccELb4HtoashdGEHgd$s}xPZV#N4X`mnSC8*EFhIZIX*lon181gCk z6XvZf4i1>=>uYbl?Iuv7L0%yOxW&gFecDY74;bo2vT7z$pi zn8;=zeBWU~{PBA}d3zeNNFyt&-@Rpocn$-JF$xUkVaFSb&;$Ok)EO|Nqzw@eo$jqS z-y_Cnfpa@AuUxgPth~gh65u_{Di)N^%O_D-Ls@K;03}_1@?;N4k8CZsef6Sr*$x9LyQppvQ~&d+ zUB^s>iu`Cs$ooj!bpY*fhQdkeZwCjTJzQ&4Cb|T*Msk&<8LnPl0y}6}aVUnpCn%P% zoj=Uvot`5@lGM&ya*l%uU=C?ezY4ci` zMrCGZA3Fw7Xc(gB+LW1@-q+V-wwNgFvyLU^%)s&6Zodguap9~)g2yDHu^7E+1#8bL&z?V5 z3H>p#8l=sUb$aDzKle#OVF&Hm$WQ3Uvfz0kz;2r4uJv&|ggQ8L=In_RCu?i#_wGIL z+N*CsgV)soMH~^*lT#8GE%MpnOdt40mB4p(_TY7pQ~eEO@~Gf)dItIj+uJ&ahL~N= zhI!MpJcbl03K@}nq62V^J6KL`=9qssBf?lb-BB$#J{6q}!@xUQl&4*9%E zIu#~e4Ie^7;|~PS7BcCBrR>Ounywr|?7sHuTQBT*jhfv0#zk+?{M*;Qm`WGLOh{W#~9ub({4fk$(EEt{)LG%cFqrZIKyR2eqFsRY7 z5PP}?PoFwpU)PGb)qbIsJXm?QYFJv2*02nhBge4-1@bo8mw6u4;|WQ*ce*Q{8WDA^F(8(C|s+zCH;{1`Mw zAHgW5A5l3P69fPazVO{P?pHfL=vAdSM2$*z<>|#6)+|iqJ!;rNgD(tPFyUl}k@ECp zC5RyC6spfRAU_s0dm>^NT`JzJ?2K!#y=vXM)c}+xM7g9gGPvm@hmUzYQg=6vhY8v@ zDQ@08cwkE@DJh2!A!-N1VuF1*=6WP2;%Y{J?GKm8r>A9rpK&^HED7|9EGT4n+yz6` zIA{5g?j_#RGAt-yvbJT*B}rJYxrZO+#Ej#bORh4{GX@m~;yj++}re5f&cjA?+O1wez|I&S2? z|HSTgMKWxC5Wy~6blZdSSc>SO6bawPnhX@8GWD&u?Yw6O( zRaNH@pd%-TxO>2&4mY@5ZVJ$h29`Y@*ZTEqa6jykVPW0S&>WaufS8Vs_SLIb>2w+< zr_98}0}2%67aTo$9Lgx4T1=1;?0>_?wO*iV1RA8U6=Q@6qJt(U)1)Ufnb!20;0Nfi zm=jE?^IUFj_UhFuislvEdi%`<`NWfZ42~sSm%=GLKd-g59cc{x08Pg#O#ee8mw3gM z+t>y$5pIUXR?#Q^r)BD1f`Ju*W z*0q$d2&@gPQSburvZ#@`A3VIP-Wz9A=#^e6MR0FlyDUe`1E7&Zc32{c-mDyVq!sVK zx6fo`5!8kOcHzQ>`}ZGs^Ub$vYpbum`l@BimLg^*6<3MjRG?9yZZ}h^B9`Sb+6J=AIFVCY_v=l#IyH=g(I&T9N7i?}9ruHBpR6%RgrSFeAsP z*4$Uv_+|1kD1!8ibXa8s<(3^$&9RDrL%FbYX$1xVxohG1=_lnG)8_kOeRac)*C3D~ zv3HN`h%gH11Dkr-F7!$9>FJpz#q*jPTaY|=L{KO8-r!;b95H5*&1yr~DNHKllqe}F zq104V2P0$?qjQ!{7`6=4Q{tR1Zg@W^!U(UA0CVjBQ*QB zYQ`JTg+U@Fz>ovFw)>tqb#h3sD&jB|5+&<(s}~icTU@5n=2DMDY7rIf0#?B{JrZ96p7(RByid4)p>JC=Y!dIl5#)U;sG0 zs<15T>l^Fq>*vp3ph1GPs4tRHgM+@pexUHmSs6)2v%_SuO32NA)^|NQ03oozOgDgjYl^j^p1%Ssod8W4S4 zArm9gS-*Iv!@Ya=UjKUos~#cbT>)mfySsb&ilylpsYywxCr_RVlDJ8gU2aE3#WEt} z@Nz*x;px+rR;!ItpG@kJ+uB;!tzR2SCaS45pHaOT>FGZCD{UJWU(ia$bfLW?^9-!WnMex*0}ng@py#IT^XR zS%`|YdGm%VuDp~NAUTZ3l8m+IMPcD(oQE`Lh1 zP(UZq1=zL`^h4f9h?ih-ft5TsXhM3nvhp$n)Qvt&hqjaKc5u@t3DkwmtmLkqfgu+{ zC8&^Gyt3;2qSC^27)`?#is)NIrquK%$((!o!-LTi2}VTT!BQ}C+@B5(K6kR!q=Ypw zheX9|O0!oNr0NlF^uho%nG;&A&gpbCH#g#QTztIS1vZ08RRNh7^_O6rn~{-u^vLlB z;^7j^itv4~R_p0TAW$e=L_v&?i$8hdbgtsZ1pn_Bcf5)aUCa|F@E|)`%A5xt zMps_BZSj)wvT_&-IIn-$qYY zUNt9VXJ#~Z^f)A}QYHL5PoJw_zA8UO;53w^8BRtzrZRHUubv|he0VT=!VU%OnKW0VWp*~z4{7^98YD^AO^Fms~f(BaM)9;HE_;GbasR`^+P#16FM9YggKqaIANly zj`4R^6Z+eSXu&szaGlcX

__YcCj0&pLnV8Gw2&ehQg%q+%8q_@>; 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

^Ye2c`ba5fclA}|a`^dj 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 -oOGf|FsSO*N-pw?liBn z?=52Io{CP6gH2wb_&|3h`_1-&&Yn=pE9e3qSE6%#hBbu0-pyY=K9tF78)#e-0<35d zNb(ZY-qMq@5A-tOk71pw+Sm;;H`sa$NLZi$ZirtHrGNdn{S50`V5pz$SwHU{JW3dR zb|Z2ZsOS{k3Uv23SDxFSq+5V5JY|jl@{|ngTRQs=Kz#o4@&B0R-_R_d@Cic-2xU%~ zbZKR+KjYr`k>4i{Jl)n@jrT`BoO--0czUtume*inCUM{-=v)@E+J zn0eEnuu`-BZS9dwU+&(!gYwgVPPx=VMMO(Z3zMANi8I74wu~=F&M%?piyNz9!xx^G z3PwM*AyP1#cE*A^(a^b#2V;xo9qyQ&*9_fN_8f{$Q0c{up1S0Sr(%QFaD$Wf*LVp| zVFQ|*BjbsI=V>1n-!yO#pFv(+k3}ysw@YUl;#<;c!Qtm*nzmDhqsZq~6nzGABC(~L zktWY=)Vq7#tka1&La^!3&z>*3KeoD( zTaa72Wg1R9j?Cn3ncwz};3lBw2RVBR8#v6&G?8JBTYaU@mkP5&0|cNRj<4O zM(;zWTK5q`S0G*(%*x{@$~k(EFiB)5jl$!$%wN}q2rDmSlZAPb`IvDEL|UJ(W{!`B zQ*1j0p}XBQQQ<9;JwLtT`ND>qa1e4!cw9y(opE!eA^O&FoNTpd`x&e2vANt1=e5Xf z)#EdaNS|}N2iVocyI=^svyv-vyr3FD(-z6w}IIsUZ`NVe|=j?(x1a(++G7|i_?4xkujL^n@cVx%$Jw; z)D=i)fw!sp4+8>xM-6)gduCyA!7M*~*Ypgc^gX*(qVXWRqD23vPhX(#iU{DWpm)${ z?ge-ZocjYWO)%Fhwvu}r9ro&|vOdUB2+yyx2jsu;D)+c(lJa@^?XTl1y{c$4|A@1% zzQ3es1i;;BP!x$5gLsNwLHDaPKq!%zM0d9fj-b26nT&YxWhJA&b;tIZ9OnA%7NwB` zV~rHPnXD@@QnMczzF&#?F$@~>No`Bz`R3&>+W99iL4|1|5hv-Bnat0Z;#W6)0Rq>) zzx$r;z^trR_8@(r`4&kb8CX3VHg?n$W>)RH7$pu{HmB(GnhJNyBo>*Ob3<#%bm&}t zno&0`l1U$~RfyiKT>Va@8-xRI---&~LPn~W#%$jU8a;PqAS^9LGK#$AjIBk|GBPVe zG(zU=m&>@`#B8^7dCV3{H=UJ%u7tVIV!EB5jG^5-khh>zm+)2fx;HD@TMvV}vNmsF zrfn-JfuwYF%Jnq7}|1kyaYj-uP1Tcf;t;Y?IoOGTBIm2)Zni7Cu-(}MYnS+*Yu8;Pf;?$&QcS}%#WcAx3*dJ?v>FW zi(yf|_ddtm`V|jj8`=mzhNSgr+b>Pm6< *3N}4b}ka1t~H>U459C#ezX$Ve9P{L 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 Z=3Hk3M>#zhLBtcx87Pk?nV>!F{{RZcHFp32 literal 0 HcmV?d00001 From 4c85ae582b17ab8258ba27169377c18c909eb2e4 Mon Sep 17 00:00:00 2001 From: zheyu Date: Thu, 15 Jun 2023 19:36:32 +0800 Subject: [PATCH 19/19] =?UTF-8?q?210340140=20=E7=A8=8B=E8=A1=8D=E4=BC=9F?= =?UTF-8?q?=20=E4=BB=A3=E7=A0=81=E6=A0=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/AlarmAlertActivity.java | 207 ++++ .../ui/AlarmInitReceiver.java | 71 ++ .../ui/AlarmReceiver.java | 34 + .../ui/DateTimePicker.java | 504 ++++++++ .../ui/DateTimePickerDialog.java | 96 ++ .../ui/DropdownMenu.java | 65 + .../ui/FoldersListAdapter.java | 87 ++ .../ui/NoteEditActivity.java | 1083 +++++++++++++++++ .../ui/NoteEditText.java | 286 +++++ .../ui/NoteItemData.java | 230 ++++ .../ui/NotesListActivity.java | 1018 ++++++++++++++++ .../ui/NotesListAdapter.java | 273 +++++ .../ui/NotesListItem.java | 132 ++ .../ui/NotesPreferenceActivity.java | 530 ++++++++ 14 files changed, 4616 insertions(+) create mode 100644 other/210340140 程衍伟 代码标注/ui/AlarmAlertActivity.java create mode 100644 other/210340140 程衍伟 代码标注/ui/AlarmInitReceiver.java create mode 100644 other/210340140 程衍伟 代码标注/ui/AlarmReceiver.java create mode 100644 other/210340140 程衍伟 代码标注/ui/DateTimePicker.java create mode 100644 other/210340140 程衍伟 代码标注/ui/DateTimePickerDialog.java create mode 100644 other/210340140 程衍伟 代码标注/ui/DropdownMenu.java create mode 100644 other/210340140 程衍伟 代码标注/ui/FoldersListAdapter.java create mode 100644 other/210340140 程衍伟 代码标注/ui/NoteEditActivity.java create mode 100644 other/210340140 程衍伟 代码标注/ui/NoteEditText.java create mode 100644 other/210340140 程衍伟 代码标注/ui/NoteItemData.java create mode 100644 other/210340140 程衍伟 代码标注/ui/NotesListActivity.java create mode 100644 other/210340140 程衍伟 代码标注/ui/NotesListAdapter.java create mode 100644 other/210340140 程衍伟 代码标注/ui/NotesListItem.java create mode 100644 other/210340140 程衍伟 代码标注/ui/NotesPreferenceActivity.java diff --git a/other/210340140 程衍伟 代码标注/ui/AlarmAlertActivity.java b/other/210340140 程衍伟 代码标注/ui/AlarmAlertActivity.java new file mode 100644 index 0000000..e9fdb28 --- /dev/null +++ b/other/210340140 程衍伟 代码标注/ui/AlarmAlertActivity.java @@ -0,0 +1,207 @@ +/* + * 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; +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.DialogInterface.OnClickListener; +import android.content.DialogInterface.OnDismissListener; +import android.content.Intent; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.media.RingtoneManager; +import android.net.Uri; +import android.os.Bundle; +import android.os.PowerManager; +import android.provider.Settings; +import android.view.Window; +import android.view.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/other/210340140 程衍伟 代码标注/ui/AlarmInitReceiver.java b/other/210340140 程衍伟 代码标注/ui/AlarmInitReceiver.java new file mode 100644 index 0000000..7f03f69 --- /dev/null +++ b/other/210340140 程衍伟 代码标注/ui/AlarmInitReceiver.java @@ -0,0 +1,71 @@ +/* + * 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); + + 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/other/210340140 程衍伟 代码标注/ui/AlarmReceiver.java b/other/210340140 程衍伟 代码标注/ui/AlarmReceiver.java new file mode 100644 index 0000000..8d7492d --- /dev/null +++ b/other/210340140 程衍伟 代码标注/ui/AlarmReceiver.java @@ -0,0 +1,34 @@ +/* + * 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 {//类:闹钟消息接收器,从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这个功能最接近用户层的包,基于上面的两个包, \ No newline at end of file diff --git a/other/210340140 程衍伟 代码标注/ui/DateTimePicker.java b/other/210340140 程衍伟 代码标注/ui/DateTimePicker.java new file mode 100644 index 0000000..11a8469 --- /dev/null +++ b/other/210340140 程衍伟 代码标注/ui/DateTimePicker.java @@ -0,0 +1,504 @@ +/* + * 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.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)); + }//通过对数据库的访问,获取当前的系统时间 + + 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;//修改标志变量 + } + + @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) {//函数:设置24小时下的视图 + if (mIs24HourView == is24HourView) { + return; + } + mIs24HourView = is24HourView; + mAmPmSpinner.setVisibility(is24HourView ? View.GONE : View.VISIBLE);// 语句:如果为12小时视图则显示上下午选择 + 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/other/210340140 程衍伟 代码标注/ui/DateTimePickerDialog.java b/other/210340140 程衍伟 代码标注/ui/DateTimePickerDialog.java new file mode 100644 index 0000000..b35a4cf --- /dev/null +++ b/other/210340140 程衍伟 代码标注/ui/DateTimePickerDialog.java @@ -0,0 +1,96 @@ +/* + * 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/other/210340140 程衍伟 代码标注/ui/DropdownMenu.java b/other/210340140 程衍伟 代码标注/ui/DropdownMenu.java new file mode 100644 index 0000000..0c4b307 --- /dev/null +++ b/other/210340140 程衍伟 代码标注/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); + }//布局文件,设置标题 +} \ No newline at end of file diff --git a/other/210340140 程衍伟 代码标注/ui/FoldersListAdapter.java b/other/210340140 程衍伟 代码标注/ui/FoldersListAdapter.java new file mode 100644 index 0000000..2c5853d --- /dev/null +++ b/other/210340140 程衍伟 代码标注/ui/FoldersListAdapter.java @@ -0,0 +1,87 @@ +/* + * 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);//设置名字 + } + } + +} \ No newline at end of file diff --git a/other/210340140 程衍伟 代码标注/ui/NoteEditActivity.java b/other/210340140 程衍伟 代码标注/ui/NoteEditActivity.java new file mode 100644 index 0000000..9bbbb97 --- /dev/null +++ b/other/210340140 程衍伟 代码标注/ui/NoteEditActivity.java @@ -0,0 +1,1083 @@ +/* + * 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; +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.EditText; +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.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 EditText 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_RESIZE); + } 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_RESIZE + | 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 = (EditText) 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); + } + + @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(); + } +} diff --git a/other/210340140 程衍伟 代码标注/ui/NoteEditText.java b/other/210340140 程衍伟 代码标注/ui/NoteEditText.java new file mode 100644 index 0000000..334ebd6 --- /dev/null +++ b/other/210340140 程衍伟 代码标注/ui/NoteEditText.java @@ -0,0 +1,286 @@ +/* + * 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.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 EditText { + 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 + //view里的函数,处理手机屏幕的所有事件 + /*参数event为手机屏幕触摸事件封装类的对象,其中封装了该事件的所有信息, + 例如触摸的位置、触摸的类型以及触摸的时间等。该对象会在用户触摸手机屏幕时被创建。*/ + public boolean onTouchEvent(MotionEvent event) { + switch (event.getAction()) { + //重写了需要处理屏幕被按下的事件 + case MotionEvent.ACTION_DOWN: + //跟新当前坐标值 + int x = (int) event.getX(); + int y = (int) event.getY(); + x -= getTotalPaddingLeft(); + y -= getTotalPaddingTop(); + x += getScrollX(); + y += getScrollY(); + + //用布局控件layout根据x,y的新值设置新的位置 + Layout layout = getLayout(); + 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) { + return false; + } + 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) { + int selectionStart = getSelectionStart(); + //获取当前位置 + String text = getText().subSequence(selectionStart, length()).toString(); + //获取当前文本 + setText(getText().subSequence(0, selectionStart)); + //根据获取的文本设置当前文本 + mOnTextViewChangeListener.onEditTextEnter(mIndex + 1, text); + //当{@link KeyEvent#KEYCODE_ENTER}添加新文本 + } 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); + } +} diff --git a/other/210340140 程衍伟 代码标注/ui/NoteItemData.java b/other/210340140 程衍伟 代码标注/ui/NoteItemData.java new file mode 100644 index 0000000..ff52c1f --- /dev/null +++ b/other/210340140 程衍伟 代码标注/ui/NoteItemData.java @@ -0,0 +1,230 @@ +/* + * 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.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/other/210340140 程衍伟 代码标注/ui/NotesListActivity.java b/other/210340140 程衍伟 代码标注/ui/NotesListActivity.java new file mode 100644 index 0000000..9992129 --- /dev/null +++ b/other/210340140 程衍伟 代码标注/ui/NotesListActivity.java @@ -0,0 +1,1018 @@ +/* + * 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; +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) {// 函数:实现长按项目的点击事件。如果长按的是便签,则通过ActionMode菜单实现;如果长按的是文件夹,则通过ContextMenu菜单实现。 + 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/other/210340140 程衍伟 代码标注/ui/NotesListAdapter.java b/other/210340140 程衍伟 代码标注/ui/NotesListAdapter.java new file mode 100644 index 0000000..5c5d3ee --- /dev/null +++ b/other/210340140 程衍伟 代码标注/ui/NotesListAdapter.java @@ -0,0 +1,273 @@ +/* + * 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.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; + } + //否则报错 + } + } +} diff --git a/other/210340140 程衍伟 代码标注/ui/NotesListItem.java b/other/210340140 程衍伟 代码标注/ui/NotesListItem.java new file mode 100644 index 0000000..b89acf7 --- /dev/null +++ b/other/210340140 程衍伟 代码标注/ui/NotesListItem.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.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; + }//返回当前便签的数据信息 +} diff --git a/other/210340140 程衍伟 代码标注/ui/NotesPreferenceActivity.java b/other/210340140 程衍伟 代码标注/ui/NotesPreferenceActivity.java new file mode 100644 index 0000000..75cfd3d --- /dev/null +++ b/other/210340140 程衍伟 代码标注/ui/NotesPreferenceActivity.java @@ -0,0 +1,530 @@ +/* + * 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.accounts.Account; +import android.accounts.AccountManager; +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标记 + + @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; + } + } +} +

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 diff --git a/model/新功能分析类图2.png b/model/新功能分析类图2.png deleted file mode 100644 index be085ad42ce9c0a7c5d7083fbf2d0e68501cd547..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13860 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 s0sbMW!-N`bgy{ZR%}MGfMVLJ{pA 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 diff --git a/model/新功能顺序图.png b/model/新功能顺序图.png deleted file mode 100644 index 65616a7c46f54f9387d03567e1ec5ddfa8bc5570..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58178 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 HfB*jg1J3kC diff --git a/model/登录功能分析类图.png b/model/登录功能分析类图.png new file mode 100644 index 0000000000000000000000000000000000000000..cd3fb25204093a4cbf66198688bbc6bc5636622f GIT binary patch literal 16695 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%0DfrJWr2oh82~vC( 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 L^lZ`TtH1pVVlm60 literal 0 HcmV?d00001 diff --git a/model/登录功能界面跳转.png b/model/登录功能界面跳转.png new file mode 100644 index 0000000000000000000000000000000000000000..89658ba3d49144e2c2e2f01886d54412208f2e8d GIT binary patch literal 12955 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