From fd9902bf2e3c2f7cf456b7bde1d03728fec2404c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E4=BB=95=E8=B1=AA?= <1710331409@qq.com> Date: Thu, 13 Apr 2023 22:48:03 +0800 Subject: [PATCH 1/9] =?UTF-8?q?4/13=20=E7=B2=BE=E8=AF=BB=E6=8A=A5=E5=91=8A?= =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/精读报告/data/Contact.doc | Bin 28672 -> 0 bytes doc/精读报告/data/Notes.doc | Bin 40960 -> 0 bytes doc/精读报告/data/NotesDatabaseHelper.doc | Bin 58368 -> 0 bytes doc/精读报告/data/NotesProvider.doc | Bin 52224 -> 0 bytes doc/精读报告/gtask/data/MetaData.doc | 118 --- doc/精读报告/gtask/data/Node.doc | 104 --- doc/精读报告/gtask/data/SqlData.doc | 218 ----- doc/精读报告/gtask/data/SqlNote.doc | 566 ----------- doc/精读报告/gtask/data/Task.doc | 351 ------- doc/精读报告/gtask/data/TaskList.doc | 401 -------- doc/精读报告/ui/AlarmAlertActivity.doc | 176 ++++ doc/精读报告/ui/AlarmInitReceiver.doc | 67 ++ doc/精读报告/ui/AlarmReceiver.doc | 31 + doc/精读报告/ui/DateTimePicker.doc | 496 ++++++++++ doc/精读报告/ui/DateTimePickerDialog.doc | 92 ++ doc/精读报告/ui/DropdownMenu.doc | 63 ++ doc/精读报告/ui/FoldersListAdapter.doc | 84 ++ doc/精读报告/ui/NoteEditActivity.doc | 877 ++++++++++++++++++ doc/精读报告/ui/NoteEditText.doc | 221 +++++ 19 files changed, 2107 insertions(+), 1758 deletions(-) delete mode 100644 doc/精读报告/data/Contact.doc delete mode 100644 doc/精读报告/data/Notes.doc delete mode 100644 doc/精读报告/data/NotesDatabaseHelper.doc delete mode 100644 doc/精读报告/data/NotesProvider.doc delete mode 100644 doc/精读报告/gtask/data/MetaData.doc delete mode 100644 doc/精读报告/gtask/data/Node.doc delete mode 100644 doc/精读报告/gtask/data/SqlData.doc delete mode 100644 doc/精读报告/gtask/data/SqlNote.doc delete mode 100644 doc/精读报告/gtask/data/Task.doc delete mode 100644 doc/精读报告/gtask/data/TaskList.doc create mode 100644 doc/精读报告/ui/AlarmAlertActivity.doc create mode 100644 doc/精读报告/ui/AlarmInitReceiver.doc create mode 100644 doc/精读报告/ui/AlarmReceiver.doc create mode 100644 doc/精读报告/ui/DateTimePicker.doc create mode 100644 doc/精读报告/ui/DateTimePickerDialog.doc create mode 100644 doc/精读报告/ui/DropdownMenu.doc create mode 100644 doc/精读报告/ui/FoldersListAdapter.doc create mode 100644 doc/精读报告/ui/NoteEditActivity.doc create mode 100644 doc/精读报告/ui/NoteEditText.doc diff --git a/doc/精读报告/data/Contact.doc b/doc/精读报告/data/Contact.doc deleted file mode 100644 index fc86dec7b4d2e5b02e96b40e1938e4c80c816a62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28672 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%0D<-bmoZ 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 diff --git a/doc/精读报告/data/NotesProvider.doc b/doc/精读报告/data/NotesProvider.doc deleted file mode 100644 index 921721eeeeb9a676f124b5c23f98fb362305a524..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52224 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 b75FI3#mNyxFuT_CtqGO2T$kIwO@aRhHt?M5 diff --git a/doc/精读报告/gtask/data/MetaData.doc b/doc/精读报告/gtask/data/MetaData.doc deleted file mode 100644 index f876671..0000000 --- a/doc/精读报告/gtask/data/MetaData.doc +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.gtask.data; - -import android.database.Cursor; -import android.util.Log; - -import net.micode.notes.tool.GTaskStringUtils; - -import org.json.JSONException; -import org.json.JSONObject; - - -public class MetaData extends Task { - /* - * 功能描述:得到类的简写名称存入字符串TAG中 - * 实现过程:调用getSimpleName ()函数 - */ - private final static String TAG = MetaData.class.getSimpleName(); - private String mRelatedGid = null; - /* - * 功能描述:设置数据,即生成元数据库 - * 实现过程:调用JSONObject库函数put (),Task类中的setNotes ()和setName ()函数 - */ - public void setMeta(String gid, JSONObject metaInfo) { - //对函数块进行注释 - try { - metaIwnfo.put(GTaskStringUtils.META_HEAD_GTASK_ID, gid); - /* - * 将这对键值放入metaInfo这个jsonobject对象中 - */ - } catch (JSONException e) { - Log.e(TAG, "failed to put related gid"); - /* - * 输出错误信息 - */ - } - setNotes(metaInfo.toString()); - setName(GTaskStringUtils.META_NOTE_NAME); - } - /* - * 功能描述:获取相关联的Gid - */ - public String getRelatedGid() { - return mRelatedGid; - } - /* - * 功能描述:判断当前数据是否为空,若为空则返回真即值得保存 - */ - @Override - public boolean isWorthSaving() { - return getNotes() != null; - } - /* - * 功能描述:使用远程json数据对象设置元数据内容 - * 实现过程:调用父类Task中的setContentByRemoteJSON ()函数 - */ - @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; - } - } - } - /* - * 功能描述:使用本地json数据对象设置元数据内容,一般不会用到,若用到,则抛出异常 - */ - @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/精读报告/gtask/data/Node.doc b/doc/精读报告/gtask/data/Node.doc deleted file mode 100644 index fabe296..0000000 --- a/doc/精读报告/gtask/data/Node.doc +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.gtask.data; - -import android.database.Cursor; - -import org.json.JSONObject; -/* - * 应该是同步操作的基础数据类型,定义了相关指示同步操作的常量 -*/ -public abstract class Node { - //定义了各种用于表征同步状态的常量 - public static final int SYNC_ACTION_NONE = 0;// 本地和云端都无可更新内容(即本地和云端内容一致) - - public static final int SYNC_ACTION_ADD_REMOTE = 1;// 需要在远程云端增加内容 - - public static final int SYNC_ACTION_ADD_LOCAL = 2;// 需要在本地增加内容 - - public static final int SYNC_ACTION_DEL_REMOTE = 3;// 需要在远程云端删除内容 - - public static final int SYNC_ACTION_DEL_LOCAL = 4;// 需要在本地删除内容 - - public static final int SYNC_ACTION_UPDATE_REMOTE = 5;// 需要将本地内容更新到远程云端 - - public static final int SYNC_ACTION_UPDATE_LOCAL = 6;// 需要将远程云端内容更新到本地 - - public static final int SYNC_ACTION_UPDATE_CONFLICT = 7;// 同步出现冲突 - - public static final int SYNC_ACTION_ERROR = 8;// 同步出现错误 - - private String mGid; - - private String mName; - - private long mLastModified; - //记录最后一次修改时间 - private boolean mDeleted; - //表征是否被删除 - public Node() { - mGid = null; - mName = ""; - mLastModified = 0; - mDeleted = false; - } - - public abstract JSONObject getCreateAction(int actionId); - - public abstract JSONObject getUpdateAction(int actionId); - - public abstract void setContentByRemoteJSON(JSONObject js); - - public abstract void setContentByLocalJSON(JSONObject js); - - public abstract JSONObject getLocalJSONFromContent(); - - public abstract int getSyncAction(Cursor c); - - public void setGid(String gid) { - this.mGid = gid; - } - - public void setName(String name) { - this.mName = name; - } - - public void setLastModified(long lastModified) { - this.mLastModified = lastModified; - } - - public void setDeleted(boolean deleted) { - this.mDeleted = deleted; - } - - public String getGid() { - return this.mGid; - } - - public String getName() { - return this.mName; - } - - public long getLastModified() { - return this.mLastModified; - } - - public boolean getDeleted() { - return this.mDeleted; - } - -} diff --git a/doc/精读报告/gtask/data/SqlData.doc b/doc/精读报告/gtask/data/SqlData.doc deleted file mode 100644 index ff9ab81..0000000 --- a/doc/精读报告/gtask/data/SqlData.doc +++ /dev/null @@ -1,218 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/* - * Description:用于支持小米便签最底层的数据库相关操作,和sqlnote的关系上是子集关系,即data是note的子集(节点)。 - * SqlData其实就是也就是所谓数据中的数据 - */ -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中 - * 实现过程:调用getSimpleName ()函数 - */ - private static final String TAG = SqlData.class.getSimpleName(); - - private static final int INVALID_ID = -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; - /* - * 功能描述:构造函数,用于初始化数据 - * 参数注解:mContentResolver用于获取ContentProvider提供的数据 - * 参数注解: mIsCreate表征当前数据是用哪种方式创建(两种构造函数的参数不同) - */ - public SqlData(Context context) { - mContentResolver = context.getContentResolver(); - mIsCreate = true; - mDataId = INVALID_ID; - mDataMimeType = DataConstants.NOTE; - mDataContent = ""; - mDataContentData1 = 0; - mDataContentData3 = ""; - mDiffDataValues = new ContentValues(); - } - - public SqlData(Context context, Cursor c) { - mContentResolver = context.getContentResolver(); - mIsCreate = false; - loadFromCursor(c); - mDiffDataValues = new ContentValues(); - } - /* - * 功能描述:从光标处加载数据 - * 从当前的光标处将五列的数据加载到该类的对象 - */ - private void loadFromCursor(Cursor c) { - mDataId = c.getLong(DATA_ID_COLUMN); - mDataMimeType = c.getString(DATA_MIME_TYPE_COLUMN); - mDataContent = c.getString(DATA_CONTENT_COLUMN); - mDataContentData1 = c.getLong(DATA_CONTENT_DATA_1_COLUMN); - mDataContentData3 = c.getString(DATA_CONTENT_DATA_3_COLUMN); - } - /* - * 功能描述:设置用于共享的数据,并提供异常抛出与处理机制 - */ - public void setContent(JSONObject js) throws JSONException { - //如果传入的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/精读报告/gtask/data/SqlNote.doc b/doc/精读报告/gtask/data/SqlNote.doc deleted file mode 100644 index 6e3e842..0000000 --- a/doc/精读报告/gtask/data/SqlNote.doc +++ /dev/null @@ -1,566 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.gtask.data; - -import android.appwidget.AppWidgetManager; -import android.content.ContentResolver; -import android.content.ContentValues; -import android.content.Context; -import android.database.Cursor; -import android.net.Uri; -import android.util.Log; - -import net.micode.notes.data.Notes; -import net.micode.notes.data.Notes.DataColumns; -import net.micode.notes.data.Notes.NoteColumns; -import net.micode.notes.gtask.exception.ActionFailureException; -import net.micode.notes.tool.GTaskStringUtils; -import net.micode.notes.tool.ResourceParser; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - -import java.util.ArrayList; - - -public class SqlNote { - /* - * 功能描述:得到类的简写名称存入字符串TAG中 - * 实现过程:调用getSimpleName ()函数 - */ - private static final String TAG = SqlNote.class.getSimpleName(); - - private static final int INVALID_ID = -99999; - // 集合了interface NoteColumns中所有SF常量(17个) - 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; - //一下定义了17个内部的变量,其中12个可以由content中获得,5个需要初始化为0或者new - 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; - - - /* - * 功能描述:构造函数 - * 参数注解: mIsCreate用于标示构造方式 - */ - //构造函数只有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(); - } - /* - * 功能描述:构造函数 - * 参数注解: mIsCreate用于标示构造方式 - */ - //构造函数有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; - } -} diff --git a/doc/精读报告/gtask/data/Task.doc b/doc/精读报告/gtask/data/Task.doc deleted file mode 100644 index 72068a0..0000000 --- a/doc/精读报告/gtask/data/Task.doc +++ /dev/null @@ -1,351 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.gtask.data; - -import android.database.Cursor; -import android.text.TextUtils; -import android.util.Log; - -import net.micode.notes.data.Notes; -import net.micode.notes.data.Notes.DataColumns; -import net.micode.notes.data.Notes.DataConstants; -import net.micode.notes.data.Notes.NoteColumns; -import net.micode.notes.gtask.exception.ActionFailureException; -import net.micode.notes.tool.GTaskStringUtils; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - - -public class Task extends Node { - private static final String TAG = Task.class.getSimpleName(); - - private boolean mCompleted;//是否完成 - - private String mNotes; - - private JSONObject mMetaInfo;//将在实例中存储数据的类型 - - private Task mPriorSibling;//对应的优先兄弟Task的指针(待完善) - - private TaskList mParent;//所在的任务列表的指针 - - public Task() { - super(); - mCompleted = false; - mNotes = null; - mPriorSibling = null;//TaskList中当前Task前面的Task的指针 - mParent = null;//当前Task所在的TaskList - mMetaInfo = null; - } - - public JSONObject getCreateAction(int actionId) { - JSONObject js = new JSONObject(); - - try { - // action_type - js.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE, - GTaskStringUtils.GTASK_JSON_ACTION_TYPE_CREATE); - - // action_id - js.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, actionId); - - // index - js.put(GTaskStringUtils.GTASK_JSON_INDEX, mParent.getChildTaskIndex(this)); - - // entity_delta - JSONObject entity = new JSONObject(); - entity.put(GTaskStringUtils.GTASK_JSON_NAME, getName()); - entity.put(GTaskStringUtils.GTASK_JSON_CREATOR_ID, "null"); - entity.put(GTaskStringUtils.GTASK_JSON_ENTITY_TYPE, - GTaskStringUtils.GTASK_JSON_TYPE_TASK); - if (getNotes() != null) { - entity.put(GTaskStringUtils.GTASK_JSON_NOTES, getNotes()); - } - js.put(GTaskStringUtils.GTASK_JSON_ENTITY_DELTA, entity); - - // parent_id - js.put(GTaskStringUtils.GTASK_JSON_PARENT_ID, mParent.getGid()); - - // dest_parent_type - js.put(GTaskStringUtils.GTASK_JSON_DEST_PARENT_TYPE, - GTaskStringUtils.GTASK_JSON_TYPE_GROUP); - - // list_id - js.put(GTaskStringUtils.GTASK_JSON_LIST_ID, mParent.getGid()); - - // prior_sibling_id - if (mPriorSibling != null) { - js.put(GTaskStringUtils.GTASK_JSON_PRIOR_SIBLING_ID, mPriorSibling.getGid()); - } - - } catch (JSONException e) { - Log.e(TAG, e.toString()); - e.printStackTrace(); - throw new ActionFailureException("fail to generate task-create jsonobject"); - } - - return js; - } - - public JSONObject getUpdateAction(int actionId) { - JSONObject js = new JSONObject(); - - try { - // action_type - js.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE, - GTaskStringUtils.GTASK_JSON_ACTION_TYPE_UPDATE); - - // action_id - js.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, actionId); - - // id - js.put(GTaskStringUtils.GTASK_JSON_ID, getGid()); - - // entity_delta - JSONObject entity = new JSONObject(); - entity.put(GTaskStringUtils.GTASK_JSON_NAME, getName()); - if (getNotes() != null) { - entity.put(GTaskStringUtils.GTASK_JSON_NOTES, getNotes()); - } - entity.put(GTaskStringUtils.GTASK_JSON_DELETED, getDeleted()); - js.put(GTaskStringUtils.GTASK_JSON_ENTITY_DELTA, entity); - - } catch (JSONException e) { - Log.e(TAG, e.toString()); - e.printStackTrace(); - throw new ActionFailureException("fail to generate task-update jsonobject"); - } - - return js; - } - - public void setContentByRemoteJSON(JSONObject js) { - if (js != null) { - try { - // id - if (js.has(GTaskStringUtils.GTASK_JSON_ID)) { - setGid(js.getString(GTaskStringUtils.GTASK_JSON_ID)); - } - - // last_modified - if (js.has(GTaskStringUtils.GTASK_JSON_LAST_MODIFIED)) { - setLastModified(js.getLong(GTaskStringUtils.GTASK_JSON_LAST_MODIFIED)); - } - - // name - if (js.has(GTaskStringUtils.GTASK_JSON_NAME)) { - setName(js.getString(GTaskStringUtils.GTASK_JSON_NAME)); - } - - // notes - if (js.has(GTaskStringUtils.GTASK_JSON_NOTES)) { - setNotes(js.getString(GTaskStringUtils.GTASK_JSON_NOTES)); - } - - // deleted - if (js.has(GTaskStringUtils.GTASK_JSON_DELETED)) { - setDeleted(js.getBoolean(GTaskStringUtils.GTASK_JSON_DELETED)); - } - - // completed - if (js.has(GTaskStringUtils.GTASK_JSON_COMPLETED)) { - setCompleted(js.getBoolean(GTaskStringUtils.GTASK_JSON_COMPLETED)); - } - } catch (JSONException e) { - Log.e(TAG, e.toString()); - e.printStackTrace(); - throw new ActionFailureException("fail to get task content from jsonobject"); - } - } - } - - public void setContentByLocalJSON(JSONObject js) { - if (js == null || !js.has(GTaskStringUtils.META_HEAD_NOTE) - || !js.has(GTaskStringUtils.META_HEAD_DATA)) { - Log.w(TAG, "setContentByLocalJSON: nothing is avaiable"); - } - - try { - JSONObject note = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE); - JSONArray dataArray = js.getJSONArray(GTaskStringUtils.META_HEAD_DATA); - - if (note.getInt(NoteColumns.TYPE) != Notes.TYPE_NOTE) { - Log.e(TAG, "invalid type"); - return; - } - - for (int i = 0; i < dataArray.length(); i++) { - JSONObject data = dataArray.getJSONObject(i); - if (TextUtils.equals(data.getString(DataColumns.MIME_TYPE), DataConstants.NOTE)) { - setName(data.getString(DataColumns.CONTENT)); - break; - } - } - - } catch (JSONException e) { - Log.e(TAG, e.toString()); - e.printStackTrace(); - } - } - - public JSONObject getLocalJSONFromContent() { - String name = getName(); - try { - if (mMetaInfo == null) { - // new task created from web - if (name == null) { - Log.w(TAG, "the note seems to be an empty one"); - return null; - } - - JSONObject js = new JSONObject(); - JSONObject note = new JSONObject(); - JSONArray dataArray = new JSONArray(); - JSONObject data = new JSONObject(); - data.put(DataColumns.CONTENT, name); - dataArray.put(data); - js.put(GTaskStringUtils.META_HEAD_DATA, dataArray); - note.put(NoteColumns.TYPE, Notes.TYPE_NOTE); - js.put(GTaskStringUtils.META_HEAD_NOTE, note); - return js; - } else { - // synced task - JSONObject note = mMetaInfo.getJSONObject(GTaskStringUtils.META_HEAD_NOTE); - JSONArray dataArray = mMetaInfo.getJSONArray(GTaskStringUtils.META_HEAD_DATA); - - for (int i = 0; i < dataArray.length(); i++) { - JSONObject data = dataArray.getJSONObject(i); - if (TextUtils.equals(data.getString(DataColumns.MIME_TYPE), DataConstants.NOTE)) { - data.put(DataColumns.CONTENT, getName()); - break; - } - } - - note.put(NoteColumns.TYPE, Notes.TYPE_NOTE); - return mMetaInfo; - } - } catch (JSONException e) { - Log.e(TAG, e.toString()); - e.printStackTrace(); - return null; - } - } - - public void setMetaInfo(MetaData metaData) { - if (metaData != null && metaData.getNotes() != null) { - try { - mMetaInfo = new JSONObject(metaData.getNotes()); - } catch (JSONException e) { - Log.w(TAG, e.toString()); - mMetaInfo = null; - } - } - } - - public int getSyncAction(Cursor c) { - try { - JSONObject noteInfo = null; - if (mMetaInfo != null && mMetaInfo.has(GTaskStringUtils.META_HEAD_NOTE)) { - noteInfo = mMetaInfo.getJSONObject(GTaskStringUtils.META_HEAD_NOTE); - } - - if (noteInfo == null) { - Log.w(TAG, "it seems that note meta has been deleted"); - return SYNC_ACTION_UPDATE_REMOTE; - } - - if (!noteInfo.has(NoteColumns.ID)) { - Log.w(TAG, "remote note id seems to be deleted"); - return SYNC_ACTION_UPDATE_LOCAL; - } - - // validate the note id now - if (c.getLong(SqlNote.ID_COLUMN) != noteInfo.getLong(NoteColumns.ID)) { - Log.w(TAG, "note id doesn't match"); - return SYNC_ACTION_UPDATE_LOCAL; - } - - if (c.getInt(SqlNote.LOCAL_MODIFIED_COLUMN) == 0) { - // there is no local update - if (c.getLong(SqlNote.SYNC_ID_COLUMN) == getLastModified()) { - // no update both side - return SYNC_ACTION_NONE; - } else { - // apply remote to local - return SYNC_ACTION_UPDATE_LOCAL; - } - } else { - // validate gtask id - if (!c.getString(SqlNote.GTASK_ID_COLUMN).equals(getGid())) { - Log.e(TAG, "gtask id doesn't match"); - return SYNC_ACTION_ERROR; - } - if (c.getLong(SqlNote.SYNC_ID_COLUMN) == getLastModified()) { - // local modification only - return SYNC_ACTION_UPDATE_REMOTE; - } else { - return SYNC_ACTION_UPDATE_CONFLICT; - } - } - } catch (Exception e) { - Log.e(TAG, e.toString()); - e.printStackTrace(); - } - - return SYNC_ACTION_ERROR; - } - - public boolean isWorthSaving() { - return mMetaInfo != null || (getName() != null && getName().trim().length() > 0) - || (getNotes() != null && getNotes().trim().length() > 0); - } - - public void setCompleted(boolean completed) { - this.mCompleted = completed; - } - - public void setNotes(String notes) { - this.mNotes = notes; - } - - public void setPriorSibling(Task priorSibling) { - this.mPriorSibling = priorSibling; - } - - public void setParent(TaskList parent) { - this.mParent = parent; - } - - public boolean getCompleted() { - return this.mCompleted; - } - - public String getNotes() { - return this.mNotes; - } - - public Task getPriorSibling() { - return this.mPriorSibling; - } - - public TaskList getParent() { - return this.mParent; - } - -} diff --git a/doc/精读报告/gtask/data/TaskList.doc b/doc/精读报告/gtask/data/TaskList.doc deleted file mode 100644 index 37dad1c..0000000 --- a/doc/精读报告/gtask/data/TaskList.doc +++ /dev/null @@ -1,401 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.gtask.data; - -import android.database.Cursor; -import android.util.Log; - -import net.micode.notes.data.Notes; -import net.micode.notes.data.Notes.NoteColumns; -import net.micode.notes.gtask.exception.ActionFailureException; -import net.micode.notes.tool.GTaskStringUtils; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.util.ArrayList; - - -public class TaskList extends Node { - private static final String TAG = TaskList.class.getSimpleName();//tag标记 - - private int mIndex;//当前TaskList的指针 - - private ArrayList mChildren;//类中主要的保存数据的单元,用来实现一个以Task为元素的ArrayList - - public TaskList() { - super(); - mChildren = new ArrayList(); - mIndex = 1; - } - /* (non-Javadoc) - * @see net.micode.notes.gtask.data.Node#getCreateAction(int) - * 生成并返回一个包含了一定数据的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.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; - } - - - /* (non-Javadoc) - * @see net.micode.notes.gtask.data.Node#getUpdateAction(int) - * 生成并返回一个包含了一定数据的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(); - } - /** - * @param task - * @return 返回值为是否成功添加任务。 - * 功能:在当前任务表末尾添加新的任务。 - */ - 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; - } - /** - * @param task - * @param index - * @return - * 功能:在当前任务表的指定位置添加新的任务。 - */ - 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; - } - /** - * @param task - * @return 返回删除是否成功 - * 功能:删除TaskList中的一个Task - */ - /** - * @param task - * @param index - * @return - * 功能:将当前TaskList中含有的某个Task移到index位置 - */ - 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; - } - /** - * @param gid - * @return返回寻找结果 - * 功能:按gid寻找Task - */ - 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)); - //利用已实现好的功能完成当下功能; - } - - - /** - * @param task - * @return - * 功能:返回指定Task的index - */ - public Task findChildTaskByGid(String gid) { - for (int i = 0; i < mChildren.size(); i++) { - Task t = mChildren.get(i); - if (t.getGid().equals(gid)) { - return t; - } - } - return null; - } - - - /** - * @param index - * @return - * 功能:返回指定index的Task - */ - public int getChildTaskIndex(Task task) { - return mChildren.indexOf(task); - } - - public Task getChildTaskByIndex(int index) { - if (index < 0 || index >= mChildren.size()) { - Log.e(TAG, "getTaskByIndex: invalid index"); - return null; - } - return mChildren.get(index); - } - - - /** - * @param gid - * @return - * 功能:返回指定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; - } -} diff --git a/doc/精读报告/ui/AlarmAlertActivity.doc b/doc/精读报告/ui/AlarmAlertActivity.doc new file mode 100644 index 0000000..d3f8954 --- /dev/null +++ b/doc/精读报告/ui/AlarmAlertActivity.doc @@ -0,0 +1,176 @@ +/* + * 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 { + //. 继承了Activity类,改类实现了OnClickListener和 OnDismissListener两个接口,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; + } + + 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); + //根据Uri设置多媒体数据来源 + mPlayer.prepare();//播放器准备 + mPlayer.setLooping(true);//设置循环播放 + mPlayer.start();//开始播放 + + } catch (IllegalArgumentException e) { + // TODO Auto-generated catch block + e.printStackTrace();//e.printStackTrace()函数功能是抛出异常, 还将显示出更深的调用信息 + } 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/精读报告/ui/AlarmInitReceiver.doc b/doc/精读报告/ui/AlarmInitReceiver.doc new file mode 100644 index 0000000..5c70518 --- /dev/null +++ b/doc/精读报告/ui/AlarmInitReceiver.doc @@ -0,0 +1,67 @@ +/* + * 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()产生一个当前的毫秒 + Cursor c = context.getContentResolver().query(Notes.CONTENT_NOTE_URI, + PROJECTION, + NoteColumns.ALERTED_DATE + ">? AND " + NoteColumns.TYPE + "=" + Notes.TYPE_NOTE, + new String[] { String.valueOf(currentDate) },//将long变量currentDate转化为字符串 + null); +//Cursor在这里的作用是通过查找数据库中的标签内容,找到和当前系统时间相等的标签 + if (c != null) {//当c != null的时候,将cursor移动到开始处,然后执行相关对信息的读取工作,直至读取结束,然后关闭该cursor + if (c.moveToFirst()) {//游标移动到开始位置 + do { + long alertDate = c.getLong(COLUMN_ALERTED_DATE);//获取便签的提醒时间 + Intent sender = new Intent(context, AlarmReceiver.class);//新建一个intent类 来指向alarmreceiver 来传输数据 + sender.setData(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, c.getLong(COLUMN_ID)));//设置数据为便签的uri和id + PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, sender, 0); + //使用了PendingIntent方法,得到可以延时向之前定义的Intent sender发送广播的PendingIntent实例Pendingintent + AlarmManager alermManager = (AlarmManager) context//新建系统的闹钟服务 + .getSystemService(Context.ALARM_SERVICE); + alermManager.set(AlarmManager.RTC_WAKEUP, alertDate, pendingIntent); + //调用android系统方法AlarmManager,设置一个系统提醒事项,设置提醒时间为当前便签中所存alertdate,并设置激活提醒时,广播类Pendingintent + } while (c.moveToNext());//游标移动到下一位置 + } + c.close();//关闭游标 + } + } +} diff --git a/doc/精读报告/ui/AlarmReceiver.doc b/doc/精读报告/ui/AlarmReceiver.doc new file mode 100644 index 0000000..37f264c --- /dev/null +++ b/doc/精读报告/ui/AlarmReceiver.doc @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.ui; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +public class AlarmReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + intent.setClass(context, AlarmAlertActivity.class);//启动AlarmAlertActivity + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + //属性设置启动Activity模式:在任务栈中会判断是否存在相同的activity,如果存在,那么会清除该activity之上的其他activity对象显示,如果不存在,则会创建一个新的activity放入栈顶 + context.startActivity(intent);//使用intent启动activity + } +} diff --git a/doc/精读报告/ui/DateTimePicker.doc b/doc/精读报告/ui/DateTimePicker.doc new file mode 100644 index 0000000..9e6c5ee --- /dev/null +++ b/doc/精读报告/ui/DateTimePicker.doc @@ -0,0 +1,496 @@ +/* + * 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;//定义半天为12小时 + private static final int HOURS_IN_ALL_DAY = 24;//定义一天为24小时 + private static final int DAYS_IN_ALL_WEEK = 7;//定义一周为七天 + private static final int DATE_SPINNER_MIN_VAL = 0;//定义日期循环最小值为0 + private static final int DATE_SPINNER_MAX_VAL = DAYS_IN_ALL_WEEK - 1;//一周循环最大天数为一周天数减1天 + private static final int HOUR_SPINNER_MIN_VAL_24_HOUR_VIEW = 0;//24小时制小时最小值为0 + private static final int HOUR_SPINNER_MAX_VAL_24_HOUR_VIEW = 23;//定义24小时循环的最大值为23 + private static final int HOUR_SPINNER_MIN_VAL_12_HOUR_VIEW = 1;// 12小时制下小时转轮最小值 + private static final int HOUR_SPINNER_MAX_VAL_12_HOUR_VIEW = 12;// 12小时制下小时转轮最大值 + private static final int MINUT_SPINNER_MIN_VAL = 0;//分钟轮转最小值为0 + private static final int MINUT_SPINNER_MAX_VAL = 59;//分钟轮转最大值为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);//置监听长按时间间隔为100ms + mMinuteSpinner.setOnValueChangedListener(mOnMinuteChangedListener); + + String[] stringsForAmPm = new DateFormatSymbols().getAmPmStrings();//对24小时下的 am 与pm各属性值进行初始化 + 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) { + if (mIs24HourView == is24HourView) { + return; + } + mIs24HourView = is24HourView; + mAmPmSpinner.setVisibility(is24HourView ? View.GONE : View.VISIBLE); + int hour = getCurrentHourOfDay(); + updateHourControl(); + setCurrentHour(hour); + updateAmPmControl(); + } + + private void updateDateControl() { + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(mDate.getTimeInMillis()); + cal.add(Calendar.DAY_OF_YEAR, -DAYS_IN_ALL_WEEK / 2 - 1); + mDateSpinner.setDisplayedValues(null); + for (int i = 0; i < DAYS_IN_ALL_WEEK; ++i) { + cal.add(Calendar.DAY_OF_YEAR, 1); + mDateDisplayValues[i] = (String) DateFormat.format("MM.dd EEEE", cal); + } + mDateSpinner.setDisplayedValues(mDateDisplayValues); + mDateSpinner.setValue(DAYS_IN_ALL_WEEK / 2); + mDateSpinner.invalidate();// 对于星期几的算法 + } + + private void updateAmPmControl() { + if (mIs24HourView) { + mAmPmSpinner.setVisibility(View.GONE); + } else { + int index = mIsAm ? Calendar.AM : Calendar.PM; + mAmPmSpinner.setValue(index); + mAmPmSpinner.setVisibility(View.VISIBLE); + }// 对于上下午操作的算法 + } + + private void updateHourControl() { + if (mIs24HourView) { + mHourSpinner.setMinValue(HOUR_SPINNER_MIN_VAL_24_HOUR_VIEW); + mHourSpinner.setMaxValue(HOUR_SPINNER_MAX_VAL_24_HOUR_VIEW); + } else { + mHourSpinner.setMinValue(HOUR_SPINNER_MIN_VAL_12_HOUR_VIEW); + mHourSpinner.setMaxValue(HOUR_SPINNER_MAX_VAL_12_HOUR_VIEW); + } //对于小时的算法 + } + + /** + * Set the callback that indicates the 'Set' button has been pressed. + * @param callback the callback, if null will do nothing + */ + public void setOnDateTimeChangedListener(OnDateTimeChangedListener callback) { + mOnDateTimeChangedListener = callback; + } + + private void onDateTimeChanged() { + if (mOnDateTimeChangedListener != null) { + mOnDateTimeChangedListener.onDateTimeChanged(this, getCurrentYear(), + getCurrentMonth(), getCurrentDay(), getCurrentHourOfDay(), getCurrentMinute()); + } + } +} diff --git a/doc/精读报告/ui/DateTimePickerDialog.doc b/doc/精读报告/ui/DateTimePickerDialog.doc new file mode 100644 index 0000000..3c5bc83 --- /dev/null +++ b/doc/精读报告/ui/DateTimePickerDialog.doc @@ -0,0 +1,92 @@ +/* + * 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/精读报告/ui/DropdownMenu.doc b/doc/精读报告/ui/DropdownMenu.doc new file mode 100644 index 0000000..1d7851c --- /dev/null +++ b/doc/精读报告/ui/DropdownMenu.doc @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.ui; + +import android.content.Context; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.Button; +import android.widget.PopupMenu; +import android.widget.PopupMenu.OnMenuItemClickListener; + +import net.micode.notes.R; + +public class DropdownMenu { + private Button mButton; + private PopupMenu mPopupMenu;//声明一个下拉菜单 + private Menu mMenu; + + public DropdownMenu(Context context, Button button, int menuId) { + mButton = button; + mButton.setBackgroundResource(R.drawable.dropdown_icon);//设置这个view的背景 + mPopupMenu = new PopupMenu(context, mButton); + mMenu = mPopupMenu.getMenu(); + mPopupMenu.getMenuInflater().inflate(menuId, mMenu); + //MenuInflater是用来实例化Menu目录下的Menu布局文件 + //根据ID来确认menu的内容选项 + mButton.setOnClickListener(new OnClickListener() { + public void onClick(View v) { + mPopupMenu.show(); + } + }); + } + + public void setOnDropdownMenuItemClickListener(OnMenuItemClickListener listener) { + if (mPopupMenu != null) { + mPopupMenu.setOnMenuItemClickListener(listener); + }//设置菜单的监听 + } + + public MenuItem findItem(int id) { + return mMenu.findItem(id); + }//对于菜单选项的初始化,根据索引搜索菜单需要的选项 + + public void setTitle(CharSequence title) { + mButton.setText(title); + }//布局文件,设置标题 +} diff --git a/doc/精读报告/ui/FoldersListAdapter.doc b/doc/精读报告/ui/FoldersListAdapter.doc new file mode 100644 index 0000000..0088aa0 --- /dev/null +++ b/doc/精读报告/ui/FoldersListAdapter.doc @@ -0,0 +1,84 @@ +/* + * 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;//初始化Column的id和name,id唯一标识了Colum + + public FoldersListAdapter(Context context, Cursor c) { + super(context, c); + // TODO Auto-generated constructor stub + }//数据库操作 + + @Override + public View newView(Context context, Cursor cursor, ViewGroup parent) { + return new FolderListItem(context); + }//创建一个文件夹,对于各文件夹中子标签的初始化 + + @Override + public void bindView(View view, Context context, Cursor cursor) { + if (view instanceof FolderListItem) { + String folderName = (cursor.getLong(ID_COLUMN) == Notes.ID_ROOT_FOLDER) ? context + .getString(R.string.menu_move_parent_folder) : cursor.getString(NAME_COLUMN); + ((FolderListItem) view).bind(folderName); + } + }//将各个布局文件绑定起来 + + public String getFolderName(Context context, int position) { + Cursor cursor = (Cursor) getItem(position); + return (cursor.getLong(ID_COLUMN) == Notes.ID_ROOT_FOLDER) ? context + .getString(R.string.menu_move_parent_folder) : cursor.getString(NAME_COLUMN); + }//根据数据库中标签的ID得到标签的各项内容 + + private class FolderListItem extends LinearLayout { + private TextView mName; + + public FolderListItem(Context context) { + super(context);//操作数据库 + inflate(context, R.layout.folder_list_item, this);//根据布局文件的名字等信息将其找出来 + mName = (TextView) findViewById(R.id.tv_folder_name); + } + + public void bind(String name) { + mName.setText(name); + } + } + +} diff --git a/doc/精读报告/ui/NoteEditActivity.doc b/doc/精读报告/ui/NoteEditActivity.doc new file mode 100644 index 0000000..1b32368 --- /dev/null +++ b/doc/精读报告/ui/NoteEditActivity.doc @@ -0,0 +1,877 @@ +/* + * 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); + } + + 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); + }//用户可以选择笔记本界面的大小,提供四个规格 + + 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); + } + + 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; + //对模板WorkingNote的初始化 + private SharedPreferences mSharedPrefs;//私有化SharedPreferences的数据存储方式 + private int mFontSizeId;//用于操作字体的大小 + + private static final String PREFERENCE_FONT_SIZE = "pref_font_size";//定义常量 字体大小设置 + + private static final int SHORTCUT_ICON_TITLE_MAX_LEN = 10;//定义final常量,设置了桌面快捷方式标题的最大长度 + + public static final String TAG_CHECKED = String.valueOf('\u221A');//定义final字符串,表明已标记 + public static final String TAG_UNCHECKED = String.valueOf('\u25A1');//定义final字符串,表明未标记 + + private LinearLayout mEditTextList;//线性布局 + + private String mUserQuery;//用户请求 + private Pattern mPattern;//一个Pattern是一个正则表达式经编译后的表现模式 + + @Override + protected void onCreate(Bundle savedInstanceState) {//初始化系统的状态 + super.onCreate(savedInstanceState); + this.setContentView(R.layout.note_edit); + + if (savedInstanceState == null && !initActivityState(getIntent())) {//判断传入参数是否为空,且对activity进行初始化是否成功,满足则结束create函数 如果传入的保存的状态不为NULL时,则不会调用之后的initActivityState函数进行初始化操作 + 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) {//用户没有给出ID,就跳转到NoteListActivity + /** + * 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())) {//判断intent中的action是ACTION_VIEW还是ACTION_INSERT_OR_EDIT,分别进行不同的操作 + long noteId = intent.getLongExtra(Intent.EXTRA_UID, 0); + mUserQuery = ""; + + /** + * Starting from the searched result + */ + if (intent.hasExtra(SearchManager.EXTRA_DATA_KEY)) {//查找intent中的数据。将数据标识符存在noteIId中,用户请求字符串存在mUserQuery中 + noteId = Long.parseLong(intent.getStringExtra(SearchManager.EXTRA_DATA_KEY)); + mUserQuery = intent.getStringExtra(SearchManager.USER_QUERY); + } + + if (!DataUtils.visibleInNoteDatabase(getContentResolver(), noteId, Notes.TYPE_NOTE)) {//如果没有找到便签标识符,就跳转到主界面 + Intent jump = new Intent(this, NotesListActivity.class); + startActivity(jump); + showToast(R.string.error_note_not_exist); + finish(); + return false; + } else { + mWorkingNote = WorkingNote.load(this, noteId);//根据noteId导入WorkingNote + if (mWorkingNote == null) {//noteId对应的活动标签为空,报错并结束活动,初始化活动返回false,即初始化活动状态位成功 + Log.e(TAG, "load note failed with note id" + noteId);//导出信息失败 反馈错误信息 + finish(); + return false; + } + } + getWindow().setSoftInputMode(//设置软键盘输入模式 + WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN//将软键盘进行隐藏 + | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);//调节Edit界面,使之适应软键盘弹出 + } else if(TextUtils.equals(Intent.ACTION_INSERT_OR_EDIT, intent.getAction())) {//判断intent的活动是INSERT OR EDIT,即新建便签 + // New note + 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)); + + // Parse call-record note + String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);//下面的程序实现的功能是解析通话记录便签,首先获取intent里的电话号码 + 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(),//根据电话号码和日期找到对应标识符,赋给noteId. + 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); + } + + 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");//显示错误信息,Intent没有指定动作,不应支持 + finish(); + return false; + } + mWorkingNote.setOnSettingStatusChangedListener(this); + return true; + } + + @Override + protected void onResume() {//重写Activity的onResume方法,将标签编辑界面作为界面的最上层呈现 + super.onResume(); + initNoteScreen(); + } + + private void initNoteScreen() {//初始化便签界面的窗口 + mNoteEditor.setTextAppearance(this, TextAppearanceResources + .getTexAppearanceResource(mFontSizeId)); + if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) {//如果载入的workingnote对象模式为Check_List则调用switchToListMode函数 + 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();//获取当前时间,定义为long类型 + 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) {//当活动从后台切换但前台时会调用该函数,再次启动Activity的状态 + super.onNewIntent(intent); + initActivityState(intent); + } + + @Override + protected void onSaveInstanceState(Bundle outState) {//该函数用于分派触摸事件,其中参数MotionEvent是对屏幕触控的传递机制 + 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 + 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//当触摸点的位置超出该控件的视图区域范围时,返回false + || ev.getX() > (x + view.getWidth()) + || ev.getY() < y + || ev.getY() > (y + view.getHeight())) { + 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()) {//如果Size大于TextAppearance的大小,则将之设置为默认大小 + mFontSizeId = ResourceParser.BG_DEFAULT_FONT_SIZE; + } + mEditTextList = (LinearLayout) findViewById(R.id.note_edit_list);//得到布局列表 + } + + @Override + protected void onPause() {//重写onPause方法,将便签编辑界面暂停 + super.onPause(); + if(saveNote()) { + Log.d(TAG, "Note data was saved with length:" + mWorkingNote.getContent().length());//暂停时即进行便签的存储,记录log文件 + } + 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);//判断当前工作中的便签的桌面挂件的类型,并根据不同类型的桌面挂件指定Intent不同的目的组件 + } else if (mWorkingNote.getWidgetType() == Notes.TYPE_WIDGET_4X) { + intent.setClass(this, NoteWidgetProvider_4x.class); + } else { + Log.e(TAG, "Unspported widget type");//Log输出error信息,不支持的widget类型 + 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();//获取点击目标的id + 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) {//如果workingNote模式为核对列表模式,则执行下面函数 + getWorkingText(); + switchToListMode(mWorkingNote.getContent()); + } else { + mNoteEditor.setTextAppearance(this,//如果不是check模式,则设置文字编辑器中文字为相应字体大小 + 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); + } 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));//创建关于删除操作的对话框 + 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();//结束这个activity + } + }); + builder.setNegativeButton(android.R.string.cancel, null);//设置取消按钮 + 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());//发送文本 + 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) {//将便签的文本发送到其他支持plain类型文字显示的app中 + Intent intent = new Intent(Intent.ACTION_SEND); + intent.putExtra(Intent.EXTRA_TEXT, info); + intent.setType("text/plain"); + context.startActivity(intent); + } + + 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()); + startActivity(intent); + } + + private void deleteCurrentNote() {//删除当前的便签 + if (mWorkingNote.existInDatabase()) { + HashSet ids = new HashSet(); + long id = mWorkingNote.getNoteId(); + if (id != Notes.ID_ROOT_FOLDER) { + ids.add(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); + } + + private boolean isSyncMode() {//判断是否为同步模式 + return NotesPreferenceActivity.getSyncAccountName(this).trim().length() > 0; + }//返回同步的用户名长度,如果大于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) {//数据库中有该提醒的id,执行下面操作。否则,报错 + Intent intent = new Intent(this, AlarmReceiver.class); + intent.setData(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, mWorkingNote.getNoteId())); + 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); + } + } + + public void onWidgetChanged() { + updateWidget(); + }//当widget变化时,执行更新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); + } + + 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); + } + int length = edit.length(); + edit.append(text); + edit.requestFocus(); + edit.setSelection(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); + 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) {//如果CheckBox已勾选,则执行下面函数,设置显示方式 + 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); + } + }//如果新模式为列表模式,则调用switchToListMode()方法将便签编辑器的文本切换到列表模式,否则若是获取到文本就改变其检查标记,修改文本编辑器的内容和可见性 + + private boolean getWorkingText() {//获取当前活动便签的文本并保存到数据库中 + boolean hasChecked = false;//初始化check标记 + if (mWorkingNote.getCheckListMode() == TextNote.MODE_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; + } 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(); + 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 + */ + 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) {//若便签的id大于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"); + showToast(R.string.info_note_enter_desktop); + sendBroadcast(sender);//建立发送到桌面的连接器 链接为一个视图 将便签的相关信息都添加到要发送的文件里 设置sneder的行为是发送 + } else {//如果便签的id错误,则保存提醒用户 + /** + * 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); + }//显示提示的视图 + + private void showToast(int resId, int duration) {//持续显示提示的视图 + Toast.makeText(this, resId, duration).show(); + } +} diff --git a/doc/精读报告/ui/NoteEditText.doc b/doc/精读报告/ui/NoteEditText.doc new file mode 100644 index 0000000..9318ea6 --- /dev/null +++ b/doc/精读报告/ui/NoteEditText.doc @@ -0,0 +1,221 @@ +/* + * 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 + */ + public interface OnTextViewChangeListener {//该接口用于实现对TextView组件中的文字信息进行修改 + /** + * Delete current edit text when {@link KeyEvent#KEYCODE_DEL} happens + * and the text is null + */ + void onEditTextDelete(int index, String text);//当delete键按下时删除当前编辑的文字块 + + /** + * Add edit text after current edit text when {@link KeyEvent#KEYCODE_ENTER} + * happen + */ + void onEditTextEnter(int index, String text);//当enter键按下时添加一个文字编辑块 + + /** + * Hide or show item option when text change + */ + void onTextChange(int index, boolean hasText);//当文字发生变化时隐藏或者显示设置 + } + + private OnTextViewChangeListener mOnTextViewChangeListener;//声明文本视图变化监听器 + + public NoteEditText(Context context) {//下面有三个构造函数,继承父类的方法,各个参数不同 + super(context, null); + mIndex = 0; + } + + public void setIndex(int index) { + mIndex = index; + } + + public void setOnTextViewChangeListener(OnTextViewChangeListener listener) { + mOnTextViewChangeListener = listener; + } + + public NoteEditText(Context context, AttributeSet attrs) {//下面两个函数都是NoteEditText的构造函数,它们同样继承了父类的构造函数,不同的是它们调用的参数不一样 + super(context, attrs, android.R.attr.editTextStyle); + } + + public NoteEditText(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + // TODO Auto-generated constructor stub + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + //触摸屏幕编辑便签时触发,参数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 layout = getLayout();//用布局控件layout根据x,y的新值设置新的位置 + int line = layout.getLineForVertical(y); + int off = layout.getOffsetForHorizontal(line, x); + Selection.setSelection(getText(), off); + break; + } + + return super.onTouchEvent(event);//这是调用父类的方法,当屏幕有Touch事件时,此方法就会被调用 + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + switch (keyCode) { + case KeyEvent.KEYCODE_ENTER: + if (mOnTextViewChangeListener != null) { + //mOnTextViewChangeListener是上面接口OnTextViewChangeListener的引用,指向初始化时的listener对象,该对象是OnTextViewChangeListener的实现类的对象,接口无法直接实例化。mOnTextViewChangeListener标志着文本是否被改变。 + 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) { + case KeyEvent.KEYCODE_DEL: + if (mOnTextViewChangeListener != null) {//如果文本视图发生变化 + if (0 == mSelectionStartBeforeDelete && mIndex != 0) {//若之前有被修改并且文档不为空 + mOnTextViewChangeListener.onEditTextDelete(mIndex, getText().toString());//监听文本的删除 + return true; + } + } else { + Log.d(TAG, "OnTextViewChangeListener was not seted");////其他情况报错,文档的改动监听器并没有建立 + } + break; + case KeyEvent.KEYCODE_ENTER: + if (mOnTextViewChangeListener != null) { + int selectionStart = getSelectionStart();////获取当前位置 + String text = getText().subSequence(selectionStart, length()).toString();//获取选择区域后面的文本信息 + setText(getText().subSequence(0, selectionStart));//根据获取的文本设置当前文本 + mOnTextViewChangeListener.onEditTextEnter(mIndex + 1, text);//将选择区域内的文字移到下一行 + } else { + Log.d(TAG, "OnTextViewChangeListener was not seted");//其他情况报错,监听器OnTextViewChangeListener并没有建立 + } + break; + default: + break; + } + return super.onKeyUp(keyCode, event);//继续执行父类的其他按键弹起的事件 + } + + @Override + 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);//获取一段text内容,并且把这段内容强制转换为Spanned类型,并存入URLSpan数组urls中 + if (urls.length == 1) { + int defaultResId = 0; + for(String schema: sSchemaActionResMap.keySet()) { + 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);//继续执行父类的其他菜单创建的事件 + } +} From 8e050b9c4532772e236dd3faf57dcd15695dfaac Mon Sep 17 00:00:00 2001 From: pj36foInf <445038096@qq.com> Date: Fri, 14 Apr 2023 15:31:17 +0800 Subject: [PATCH 2/9] 414 --- doc/精读报告/data/Contact.doc | Bin 28672 -> 0 bytes doc/精读报告/data/Notes.doc | Bin 40960 -> 0 bytes doc/精读报告/data/NotesDatabaseHelper.doc | Bin 58368 -> 0 bytes doc/精读报告/data/NotesProvider.doc | Bin 52224 -> 0 bytes doc/精读报告/gtask/data/MetaData.doc | 118 ---- doc/精读报告/gtask/data/Node.doc | 104 ---- doc/精读报告/gtask/data/SqlData.doc | 218 ------- doc/精读报告/gtask/data/SqlNote.doc | 566 ------------------ doc/精读报告/gtask/data/Task.doc | 351 ----------- doc/精读报告/gtask/data/TaskList.doc | 401 ------------- 10 files changed, 1758 deletions(-) delete mode 100644 doc/精读报告/data/Contact.doc delete mode 100644 doc/精读报告/data/Notes.doc delete mode 100644 doc/精读报告/data/NotesDatabaseHelper.doc delete mode 100644 doc/精读报告/data/NotesProvider.doc delete mode 100644 doc/精读报告/gtask/data/MetaData.doc delete mode 100644 doc/精读报告/gtask/data/Node.doc delete mode 100644 doc/精读报告/gtask/data/SqlData.doc delete mode 100644 doc/精读报告/gtask/data/SqlNote.doc delete mode 100644 doc/精读报告/gtask/data/Task.doc delete mode 100644 doc/精读报告/gtask/data/TaskList.doc diff --git a/doc/精读报告/data/Contact.doc b/doc/精读报告/data/Contact.doc deleted file mode 100644 index fc86dec7b4d2e5b02e96b40e1938e4c80c816a62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28672 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%0D<-bmoZ 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 diff --git a/doc/精读报告/data/NotesProvider.doc b/doc/精读报告/data/NotesProvider.doc deleted file mode 100644 index 921721eeeeb9a676f124b5c23f98fb362305a524..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52224 zcmeHw30zcF`~P7P(NHm!6u0Y$Iw}sMx!?{W3M%`ehKd6Wiw*-018S}%87?WB<&v4X z6j_;Nn%QPqnkl)ITbgV3W?A~0W?C`-?{n`QXNN(p{Qcj#e7>A}&wieB&U2pgoMjH| zuYcynH~r5ttEV6HU=@a1%*)K)4eu)c?aNp?-pQ`QU@(yNSOBlC=l>7|F0KEVg|k|o zj9rQUh$@jW)GQuv##ZYXtIN{HrHxZErD$pS&(qtFb(zUn{J7dVgr_@Ox?6u44E1hX zIeOZugo-h5j|2R(94HLOM7Mj+|R*1!_43IhZxhLSr2MNp{q7q z`APn)%_P{n!)dtD-B~lR31eFk@LW^IdKtqvr*3BTa60gGt(+ORcVzPX@NhgnZu0VT zcltho4?XBZMRF7`x3`YR`kUxu{_t?-cFw%>a8<>}{W%k-Gk$n{oKC#G&3v@1VFT^) z+cn1Rxqoi*G(tfKYNB&NSL$Wd{^;TUnl-EZTXMbo|2!QY6R$7IhX6~SpQ=nA-jV4j zJa3QObQGT3^LY5TBa{2HHm&Jw?ase>yu2Q*&8pn3{oku^USB+)&YC>G)ioW(PrNzJ zhq3$y;8$q%HQ0mrU(3@IBZ%v{-zkuy0!4;Ouj*Y# zsFRbMpQqCcDs6@?FDFBx%FkCMs8zc3>?oBM0d>8teWd4U^=hqN5hj_jy1b&CjH>-5 z>2eCHiYr;ADO5Z56)7g{FcPE?rP8No+sO+RHceHaR)iJm3i52rblbgPf+k0=RwTp? zgE7z;$|gl3CQ`Gp*Q+P#6^Zzlq|edVmZK21ieY(KW@NXimiXI|+Bi`r713hlQO?5h zG=;fZQz{Ppvpl9}YF5A$EZX=U22;ZdSuWGUzBjAGa`2uHTOIrguvNoUz%B=KfILV~ zYJ6#pp(&;e%oFs0Db4~m&}f$ivj8C?01aYQBUS}VWT9*T8wOdF(hI_0ujmmeWwG-U z-a`WuyPGNF|RIA;*+k9i!Nai{4cq)=0i5puA*1nfV(oWSyHQ+2)88AbUOR52dT) zB>O_-TPmX(_SZ5usU>@gTLTb9{S88V#>c*^ONsq=={fn6a> zLpY+Q0BA%C72uuMNP$iM1;jJSSh@_*Q(%>sS71{>*IFWF1(t*o<*+ERM$%a};?gmB z;ezO%2~mqAw>pSX`pXyn7KwhP5)3Z;r>Zg^8lqt<9t28OCF83&{fuJSP(|)NW8b5rG)2ggoUGHI?C4hFJ zsJ}3@LVM*SI(EB9WiwAJl_j9v48~tL-V(*MDXs1{WwUG()cbipITvUee`}1rKKq;6 z$KWwvUTDuvZnu{cpN~OHjuLB}Xwsf#m-L!kN8~7fL?^{ueyTXNxajMJr;^93Zb4)ys@|Yd>L+SD9KWOI1)sC(@p9*lk z4E#wwS#HKJ6re;B>L&tppHF80D z5z|hMj!6tpjZ6%WY7e=?_~aS|C50*@BPl*oE=d)kNr@3L@sWum0|glg8?rzFj;RAf z6GN*VHmJ2(=;|k5Ac~;IC=$X$Db+9OgRZ`O+f>Wggb?6|~P6uI9J7s7)L8s2wsS6-z7YO=nwa{*q zww;iktAmr4-~9GjTWqf%#n@uphJHvfGncH z=oDziF9g;Bt`p%(|8wB3!J9N{=Hjg#8--Tg4sR-$8KSRj_#-KZSmJUB#o&F;7XSK zGZy_Zh7AG#3`4Js#Cx<^9L`HS2}TM?azpjfllU8#bS&j<1@bfyMMq^RiB$mqoI=)~0U5sC4kV(+GA8YsKX z9q^SH9~mW&504!d8Wt{>!JRmSamJxYh>nbn4Nnw9Nv$=oUAy+}h0p|nyxQ-4#9bB3C1fjbgGG}G>uvz@tRchwnB}bJUUg7$gr4bdj)AnB#>sRiqNpcNcc*Q z3?EMMwsS6Gsdl8WHu;u`@k{)gW}5V-Kvu*WO&l2;Zk-T%A@zP^Yk&+){Ze5iWu&67 z#9(%o1b@-!QIYsh(j)y(MQfGhJoAy()E6y#Ml{04;xAkbY1uR55Pvv&=SZ^_UwMD5 ztPeVu5|{KTCp7ycoMxdgH%WY{C_!ah#JrzUT!Td4QD!ll=DU*YMAWpEHzXb) zu;Gv+h%z)sFy&2>Bdobc0&2xXW6nnelrEAD6=Ue{kf%`Gp$Jd>r>b;f;gfPCwE=UU z)ra-72~Ao7@{zQK+@>C@D z0-6=lIAzM4)T&K0ZJL4qm{2QAKAgs;F!UVauQcw-Apv)aj!JvAqm_wm!TA-QPeg?X_n7hA2%&ivK)J=(#uGii%6s>%_p?t zNG=!ogdQd4Iu@b?mD#@hN_5dfve1b+C&_`dE#~}Unn-06m8z}<($Y|jIZQsBbSY1d z=@fl4WyzT0qNo_{3{y;&R16byQGk4t^kLHa@Oh0Oy61@Uu{n21VWZ)nxKSP(hrFkw zJd#8b2zzs%B=JaEAjf{B*lhiUBK|Cdx0JqkJxZo^T9Q^S1|cPxsy*^E#jMTp(3T}n zhcB8pYEfR2=gjMZhmcx3>EA9V{4r0Wv5BtSR|1PeAC{y&YmJS7Jf#^^vTTJ4V+)E0 zt!NIV5;b6Ia0p3r$hCyjrtIa-k_yyMoh=W|_by~jPm|h?ZFver8CNfkiUQiS?c7U} zM`_fQ8(Rytd;3)9bM2cc3!){BC8ggd*2iFKwUnFRp~);RQf2*8WSb*S>2%PB+KjE{ zsF$7k=ApQmZln;^h{DwJ<%yvKhJ`C=78oex>+;5_)Ac!d+CWSVG&ZlHx~zggL0hQN z82{gv3Hi*Co6w@`V|38_n@yRxTbfR-8gH6xl65+i@8W#x_H4A5P1HFVLSLa!m!rs1 z>tj{=>;!dIF3o@B?a4;o*-lF72$7Mdm{6$JO?FsNbI~<&AjwC4Nk+@bu*m^0Kt~~8 zr7KV;a0@+$m9LhHXm^JB1^U_d_jGKEz4AZLaT4E!q~;Y{^4$f7YU; zO0cBJ?RIaeXR!1{%`PWXkl$`TLaV-FClsbmHS4n6w!JW=j?>GIoI5x&Isd8??VWg7 zQ(W{3)?(aKgU2}LQr0o)!6#|dq}e^!=tYWSjv8YCtsF?B9<4X2;X@A@ZjvZvvZ|I3}XZ77$m)$q>rHSI|tf@$*`AX0X?KXK7!JSZaX&Hw>6E}l3v5Uj37gd zk}Oa96QT%dK1fGGD>o)7MCM?$<7MHdwY0?Ttxd~OlFGzq|CTOQNdngK678HH8);;w z6u7R_a@J?5&vrD9TIYa&^PEVdIhQJ8QBI<70!o~9yImEC5~>0;&tZ?kg=7l>a}`=$ zscyQwUr6$CW$DoxBdzzb=nm25R4*k-tJ=dZ#Rn1yh$~--gQc75nnWxKD>E*IEZQ2yHX(J=K!7N+0X;Qkz5g&>vkuY)+mJ(8p>Nc*b zmXz0aiA-_Oqg78dW+R1WHB$h`ykVNtJc-t>sozQ3WI5*hG_&Abp4z@NH@4;P(rR{f z``|F}^(@G;)RU!kTjJ3&*pX&Lij(xtrg5Z~=q~YMT0d97U!KM6&G8(Ta~y6;JeYsk zH`6et5YHWNcMikD(7Y`Zz9h|iWwJc){m-S{igRuhzBi+<47^*5QqUMW5&tJ-!Ru(hSs#-xhYK>Z}9-1erXNrmTB2e3sX5>krIN?UbYTkO>u3F1MdroNNkaA%fCoHuZQi-KC6QT|6 zSFxwjuq<&hXh!>dsN4cdZThmV1K#f5nYA?aa>DYs;-bGt8!%j~IpPzvAI5oYfClv@ zt;3Kefx<`L)(9xYT9l+ewT(TkGI5Hj5ym{6J-x%=v;)Xz*i=uGsI^6FSy#8b64 zZEMIfKN6=4MNVi;q@Lh(UTh_eO64?cPgG<;l`^coeD8sIycW=x_>2$rL^*U7b&QF}W;BJ6@YN zQA^q?aXAwjDYHaPVsB6oEsEx3P8Jv1MT)?y^D}d&r|@^>(YmEcJxywF)b=N1{LBVF zr8cEz#Q%v;nZ^;)`&*BkH&ayei^epJrhSq77NspME_x#F-4xT<#na?{%d&OTd`wy8 zeC+PWcD`fPwv^S;Hkc?uGK4e^(^?mw=Z8Z2q&=UsFM^LRmivTgWz~E&)x_7N`Le`g zrL{g9og}G*bKS}$E?bIAwHpl{A<0do{~!sGbjp0>0Jn*Sft-w058VQ%u1Xhu}Kh{mTYtEu&gLPZRyD5KNx@Z~sh@A3Q zskoEfxX)6ZMLQ5-1K3XQZOeVWo@Zo#>#d5NhO?X8TN4H-D4(-LR}gaPA$ zg}@fzYv2a(P%WH-1jYc;nz}{V*^N05;M9Sr>kQ*}wtdD)1YShU24O0*8Q0KoL%=9ss@vTGU7S0DBO@ zfgwOP@DxxEbjInVY+xm@23QBY1~kLbySIT)fdhayPC33rCqHrOEf9Df_zI|tQ+b)d zF5oL5wlQb`MB}vP0^lX!7Qp;*k`M60>CM_eTVNcp1b7Mf8elllmki7V<^!d`Yrr?a zisp>{`42o^e%U9p8=`Tbe($FKovC|!^?nOvxc#_3(0FcB122E$2PK2k-dPz`{j9m8 zKFIrDWqr@Q-|;?Y-rp+gYky-2T~SxofUN4D_#WqZoZp%AI%_^hJkAk+Bi>dSU;75U z&8G#%1;ABF{}K(X>Yv7&mjJ38hI--kQ-=4GfO|`fb-)tf3jksV3js2KDZq0;8So|0 zycJ`Ufl{Chcop!HG1dVH1ysNipbR(<^ly#!0u%ttfHL4H&3f zPkoH{ud4c1RsG7kPuc5Fyf3-x|Nf|dXZRZDY4-RT=Vj)6jCfcxpa>`dz5;#(Du9TG zabFPNs{en91{h|{<$qpRQK%b7^%Z5Tvk5RYU2!iI(6}4s!oWAcDF6phSu-FO_#9~5 z1MvZKfd#<(01IZUD-Z$<1jYi>frdTdA6No>0{jL*CCcQ$D&TuS7K5C zCl2Ek9WMDB6{Rr{|{0{h}poqXgAOgq$9tRc!14kimz)L{0(QpG618)I8 z0NOE#JJrdt|JGee2+SkN+s!!sr&C|7tX|FQ)Ve+$)unkon%ALu{ki)8{n7uq){vWg z&;R|o&ToAN##}?p*IuP_0JNV*Bd+Y*TZO*2tN5IDwkyqiEytOaX4-{7+HTXS5ve3H zOmX=BQG0%*eWj$kcJ`!{`B|-gn2^ve9(z>c<>IEb{#n{3U|t7~cL~_$oYoj@ZTWs$ z%asP618dW{-2;y6#dKSQGc{z=rAw>I|yFa-fY44>oR1RVt@MpUUU|n|URJK%? zw1!9fUWlS}Iz`%dC!MdBR&QywfK~%&r%wS^bqnBI4Zi}`cxkT!)gt+yh?r%4CTubGl?CqH2Zrr@{-snuN@l+&JS}|6Od+E&g zwU~1f(|Jp&pAcW7lm9x@yIS0dZOPr_qP?Y^v{w3WaRt7T>kKcbF7n^;wt6y*sgFr?lxCRbbap($G~W?zU!JmWTfH3KseHsW0r#VP z&|0kwpGrk9%M#ga3-=0YZ! zl{6()aoEc0j#Kvk&z|&8wxR#ab0b^s$Y(j`T)TSnBYU)W&5tBGpWn2_HOtidOfvxM zvp95$wX%~g|IGYIlG{x!MOtO@8Z|tn?UXLj=jW7W`KEn3XGKb%?0RPB8m#aBvz)(F zu3NP9Yb%#JYE71NJ~_@NCqe=ynkNBt_bJVcNi!Y}?Kzz+r*nVyhJ2SIf~e3Mo!3UG&t1}2SY{EivN{%I|y3)VyI>nxHgd5#3%!mDL*9RIu|?F zdv*lfsYmeCOzo1->-oqbwMl8r5ZF}w(JcXY+7li1b)KrD8n?c8ljoaH`#J&Mt7uf&6Se(l#k&xO6#%-!tw6Gu6-pN_rwZTWyCAJDi<`ynK4A4xKFmlBslpUUnFvAhw)vIR*xcK-V_ z)_P<|oJp#MM4V3^2#_382wLYs2T1YJI7_SgByZ4u0J^=6R&40^fT+FFeXnVD*843b zEUuL|?}5D3WV)Wemjcf0rF689va&st_V!Pj@11n*|GPi-|5axntGzv}*85lcVGrwc z;5%UUSRC0=;cN_W3TT*yGcmxQfUExhB^nSrF+2ZBdyaXXEw-w+#SZGOLpt_60|$Wo z43q=tpvGQnKnpAb0yFUq3Y97K*N0OKL_-{ zbYM2ncmmFS0c(JlfKLD)9nPHt(}DTGGGHaJ3Rn%?)lO`iz`s-N{H+i6eXsI*73cD# z^WQPl7wy$&Rdwl1JvypGsy|o%|CeY$t;?+c-$`F`)Q_s_L+1U*RsZ)#{Sz-EK4wuL ze=7%aMgFf-z|{ZUl&o`Uuv?c{ch+*#;|gKZuFzJSylcvU)}^a!1ORO|;RcvZ2_B6% zo$>G~eZ}ox&%G-H_mBcDyz1e~95*(}tsbk%Jj6d5AiR;rGGJ8|=JKtEpUC@RagOdSJ1%q}YfZqXc(6cd+ z3`_?~fz`k!UM{FuG?#0YNx3t*wbRl|!cfceysEPa_5JGN@wye;GV77tHJz-e#Xw*sZWuZGPq zxi6)cC(~y7mu8prfzF^Adx%&?*CSrct+t0odZ_^$6=N?hBPJg^)WfqOazI6I#V($z_mKf_&CrG$z)T6t)9P^VS>`KQ$dZdj07hF~?s|p7WT0<36hO^_E@R{^9%b z9#77UoU z*t)6th`zsExVbFgT-~Rd@YTK)^DwLpvL{DGFL&8Wyy68apeWku7U_qUld3Vs?Age$Tsj-Q^pv^sU%9@8;Ph z{}KFFZ1CE7F0B9F?6XCEKbrCQo+sA5+{Qa)QvU3)O!r}5UH6MW+GFg-g=KpTn|CVr zt%~`0#v6eb!acP;mJG}JF73s#pz{eIl$NPCeBI)}mTfnW{Dq>}7IggNXZ>cOfO7%d z*~jopy1D8gv;R>lt@y*LXdyoPqH6CHd_&GodvRjv@gC{#$-~p$+Pm?+-&oj6|Ipp5 z54~{W=!NsMdVG1h;o;|o))^VNvSyvR>T*TNJ6EO#zTC9zn}}wg1!~UjZuI@dNsafs z{Zxa~k)IdDO>2F)^oiHEd@CH;((!Ps%YomHc{gBO-+6e#lnd$9e? zd-=Z^|071lZ7s!14sA2vnHu(`k>8GQI@otc(6t%CzkKj!#!s!gFPe3|QIG#Vv}p0- z-Os$eJ!Smm-;RwwelR6s)sPosBZju{mruJG*1k^H0|)wDoAJuLuoV^cpa1shUy9Zz z{TW*O#bezEy>sKa<)^>gS3dtY?a8T)<1Tv_gpL^X>%612KYa3hzowzmS63pUlf`sT5aZvB^ZIX+@!{b?fxo%0`>?{j1J z{J{~Qw5gZu)vWofQzaW;^Q-;LGv14i-AHTr*f)QjExq>UjiaxgK0VcNY5(BV9WQ*; zbMwJ9W982d=ya|9W%&cg9{l>)$7N-{X)^yMQwEnDnX2qDcK7H%V{f$xAMnXjD^d^i zulVBory9N8xzQTkoYz_%J<>nn-B)&ueS1Uh)zwRzbb98C^eDS7ULW%6 z;)`FguP^V6PEc(9^2c#&yME@s`r6vCiJQL})$x%@VTNzq|MU7=x3*mIU-Dy6r!yyh z_L_9?lku^0gM!ZNy?*`Cua3MC+Wy10X1?LKb;bG(>r-b97;^5Q`}Ww4uXW3OuUrTl z^v?5FuIpYIJ^J|$`{PRMj4W#3Ak1&C`dz;l!*-ouu_1E<=Jf3udByj7tL3SNYd3#7 zU2&x-!gs)_Hu6mOiOE7p0;?XK)n+^CZv^Lw^o^O$QrBQwfBs`JP+ z58bUF5AQj@wB5oPeJ5Z2?z{i)PdM?&Gi}~^>fDYcQ~uaF+|XyncYpo0cVgZP)1P0l zYWD*T@^Z^xX;HLt%DHRLJ@iKEhr!c+yYO7g7ka&&H{t7t&yIdjb@u18>6aDr#?Gqi zv2Axy+kKAG&hn_XDz%wQi1h z@X1}hRT*v*o2)I|_57G^Yc)-@zbrVvBX{M(sFS0M7mV84RK9i1N&j}SX>*3ETYu_T z?lCuQj(fB8i?2-46u+51v7Yyve{LUoYh|tOOHO&5J6wOl_H{!aP40eSz=?pzw+$QR z+3M7@c}16}6b>5wp7vbprnUBat*Lu;^sr7nP7O$(BU}1~Vs6>RE6oGK9@_I|@r|fa zLnBJ`Gu!|Ah(}=Y(99QhPJe3k>Co7dD^;i0KmGY2UF0Ce^Sw(tH#nZLc2LQhPoMa? zG`Q=VFU+mKPJXrSGX2LBm;Y5sh8_|6+Szn-~Pzcbzj_| zNgtl}?VzHK8-8m1z@>}FGvAE<#aFdnQ?sU~)(hY68FhB~>fixWmw(^4Wc$TmlNavX z`NOgQ^!s_?urn|d2T@-xc& z)St88f9CgtUbs4=$E_VRC*1nEU~t_JUzo7_^%M1HXDDqlXd?jv6PvzLN z?hD?YzkB(g^FQCzV2x+pC+B_`|6s{0KZZ=I)gV7}-O}f`H(Iq|?da|i3wzBAFMMrz zQSxIMAC8e{{ggkfO@e;?ik7Fg4@4J~ z9_T$KDDX)0z>OWRZ;tJ>iH#eXc;=6-HBTQJKmA=#nc%s5g7Ud~i7OAq?qBojtegE> zf3RXfQ`vxJ}V3r&~$Mrzh72Y`8h@kCBbDUmIWY zee$R$9>4PO;*=-fy87axS*uTk?%LVvm!S_|+BNs8{?S^E`n}%h%l97n^Xk|(dv^K$ z5*-};+oSq@mt_%e>b8_M3l`kRG;f%YSJ(Uf+Iwq{Ts5QMshmfO$|uJ4dh$@=z^8qq zde0rXFJYVFLX+mxp1HYW+lpVBG#j@q;~VcOkB!^(Qo`%n6@^bN*?DN=l&z&#SH^Yy zbyZGMqr=_4P1^UCa=b^uhwqPiy2ps}Q9j+uFI~yGxGLz~pEf_zqer`p(eBMw-Q0h$ zaQ{JHpKJPJG9q1 zSo*?N4CzfV@YD5zW`lZ=B+rO8W&^xYzKN>+iLznwjmIZ?=jDC1-FH#jZ%Yom{E}8d1HBbbsyEsI~#|az*E5y1MO#JiYS3+{BwRHwLd=nEah=?MtDbzjq+w zM&Y#8|9#GF>SqBTr1?%c%$htKyTY*fuVDW!fw_%v) z7b)Afe|j1PlZx)<-ibLDc;U_Lu_OM*4z-NHS^_kMR)U^p@}PA^GdKL zzjaL3;*BY$Blcnvg&pfStQ&zTj%&3nb5lu^h#gu3QWj%1@HZNzzg(NX`t*lzB^0T3 z1^6+EzOv2=rA)we;&~bPowdHQq{Km;f@MO1UZu@YY4Wt{zOu>c0$Kllb!zuf^-9<1 zqEz_;BG4A}QuUQ(>-G7)f`SUtA%3a~6nVIp9B$H2ao|&z6-2*bkBD<*M;oxmN6c0s`PYBcHqPK!foI#+1&Q?Ft>S_ z`{~MUx^kOt+@>41>CSDs%YCU3eI+NZFcxa+V zH<)^Kk#5hTl?;4h?uJ`Gfj$8Fp<9mWrdzu0l5RYtTkq)RE86`+J0NHklvcv{Y6!eB zh{sF-WI$^m0B8&J0(t{|0m@W=pdJ(*!7!n(xlkPyMe4D0{1J6Vdcxbuh8UE42VeTF^?-seAi>1SLC97tt%9P_2bTJi{WT#uLc~+ z{{WZ|8tvU+PuHp^um`SC;XXnFzHBcg!wmTE%{)EOv{`=-H!KQe{fvZD_Im}DPCEggm8 z_2@$YNO`mg;17K%=2;P_+6d%63{^u(j&(yBLPS&STll8f$UeYmFX}At9ccWf${}~e zD4H~Tqi>=KnIT4h0mg5taI%jz+IKL1qy32X3ZqGNME)|2{<<2!yBkfhalk#Az70fi zXxlA+Q;lqiK>U$>k#8cRvBj9Z6F~>JC`DB6?p_`>JZrdncp4P!Ov)s-gNRIzm=MfF zXi#W>9_?0*hDpE08jqcNbXSlT?%kS|y1BC&HQe0YYI?cXs7Yb*n76cm+;v1cXs?I#KJE|otM)a!(H;?2->5yGPs z42D_Sk_|nrj3n~_7ikKv)dqW91985j7dT8m*o|h>*cw*GHnDfuZudRzjRZfTiO^hV zD=397!oxx@!J}1onVZsG>7lHpd_Y-8Sx;GC*+}`2vW2pHMX!o}6(JP^D;}vBRWYW* z&ERgRVW?@SW$-c7HTWBv8d@6q8bS=C45JNW3}-}+B<1Sv{|8|AaSDD{axGhroHrJl z3Es-uN*`rirLVG~(ofl3IkF<9VswS4!5ew$ZAdYkHC(864!mowuJJZo$sV5x=3((X z3hqF-o5$T0c*v~!(#M~qQgQHv#*#y=D~5W^EdcLj#=6BYHNzf6=84AM#cq79q;6p0 z<_m5`%w2jW!65Kwwb6-~D?KLx%B{g*O&w1*uRvgaOWzq|dZQ4o=YNj^73g)f#X;J# z?9_73Jn_QSn=#qGuP*Xt9oua_PJ^5V4%8XQy%eBcvJ9Zcz7C*fy9uDixC5Y3Y9ByD z$}xaOxJv+yP=5l{HoXxU4d8N^J}|q&B+(!QW?h)WU_wM-i7K0Gg{~>J6=|G%p_u zlji#xfad$8Z6zJSQ~+vxRt%6p_gx3ro5#~Um^7tik}j1@(&|a` zV_z{&SUEJw&Gon_;G%$w0xk-;DBz-iivlhRxG3PFfQtey3b-iXqJT7yr@1%HscHS3 z=J7O#r}cVTo2GSon(y1$vM0{vX`WAO_%xqy2s8p{PEYfGS|6u*J8iaW3N!;~cP6dR zw*&;B6(9pz0|7uApe@i2kOS=jEQ#Z`QSqnPard0~GwUn}Cg~%f4iIhKu>`0*zALM^Ie-E_^!a#oB=SyfPp|bFbEh7L;#V%5MU@U42S|~6JHEKVdG%N z0|`JPfS;1Z?YoQ(2gsfD7mon=30U04$graezcUM@0_6S|kY;?RZ^A$M&@Mo_Ggv^$ z=@w}ncKB82@nbdIcz&r3dDWuUB<=lxL8QF>Y`R?5koG`iz-Fe=wlk=v!freI9k@Gr z>S8Y-rBCgaOlRT2=t)IS^(#ZY-o-l0*k*AAh9p2G5i>JJP zPkKY1zMJ@)f^?I13|hfBa;etyAT)xgaWm><8whiyfNY b75FI3#mNyxFuT_CtqGO2T$kIwO@aRhHt?M5 diff --git a/doc/精读报告/gtask/data/MetaData.doc b/doc/精读报告/gtask/data/MetaData.doc deleted file mode 100644 index f876671..0000000 --- a/doc/精读报告/gtask/data/MetaData.doc +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.gtask.data; - -import android.database.Cursor; -import android.util.Log; - -import net.micode.notes.tool.GTaskStringUtils; - -import org.json.JSONException; -import org.json.JSONObject; - - -public class MetaData extends Task { - /* - * 功能描述:得到类的简写名称存入字符串TAG中 - * 实现过程:调用getSimpleName ()函数 - */ - private final static String TAG = MetaData.class.getSimpleName(); - private String mRelatedGid = null; - /* - * 功能描述:设置数据,即生成元数据库 - * 实现过程:调用JSONObject库函数put (),Task类中的setNotes ()和setName ()函数 - */ - public void setMeta(String gid, JSONObject metaInfo) { - //对函数块进行注释 - try { - metaIwnfo.put(GTaskStringUtils.META_HEAD_GTASK_ID, gid); - /* - * 将这对键值放入metaInfo这个jsonobject对象中 - */ - } catch (JSONException e) { - Log.e(TAG, "failed to put related gid"); - /* - * 输出错误信息 - */ - } - setNotes(metaInfo.toString()); - setName(GTaskStringUtils.META_NOTE_NAME); - } - /* - * 功能描述:获取相关联的Gid - */ - public String getRelatedGid() { - return mRelatedGid; - } - /* - * 功能描述:判断当前数据是否为空,若为空则返回真即值得保存 - */ - @Override - public boolean isWorthSaving() { - return getNotes() != null; - } - /* - * 功能描述:使用远程json数据对象设置元数据内容 - * 实现过程:调用父类Task中的setContentByRemoteJSON ()函数 - */ - @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; - } - } - } - /* - * 功能描述:使用本地json数据对象设置元数据内容,一般不会用到,若用到,则抛出异常 - */ - @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/精读报告/gtask/data/Node.doc b/doc/精读报告/gtask/data/Node.doc deleted file mode 100644 index fabe296..0000000 --- a/doc/精读报告/gtask/data/Node.doc +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.gtask.data; - -import android.database.Cursor; - -import org.json.JSONObject; -/* - * 应该是同步操作的基础数据类型,定义了相关指示同步操作的常量 -*/ -public abstract class Node { - //定义了各种用于表征同步状态的常量 - public static final int SYNC_ACTION_NONE = 0;// 本地和云端都无可更新内容(即本地和云端内容一致) - - public static final int SYNC_ACTION_ADD_REMOTE = 1;// 需要在远程云端增加内容 - - public static final int SYNC_ACTION_ADD_LOCAL = 2;// 需要在本地增加内容 - - public static final int SYNC_ACTION_DEL_REMOTE = 3;// 需要在远程云端删除内容 - - public static final int SYNC_ACTION_DEL_LOCAL = 4;// 需要在本地删除内容 - - public static final int SYNC_ACTION_UPDATE_REMOTE = 5;// 需要将本地内容更新到远程云端 - - public static final int SYNC_ACTION_UPDATE_LOCAL = 6;// 需要将远程云端内容更新到本地 - - public static final int SYNC_ACTION_UPDATE_CONFLICT = 7;// 同步出现冲突 - - public static final int SYNC_ACTION_ERROR = 8;// 同步出现错误 - - private String mGid; - - private String mName; - - private long mLastModified; - //记录最后一次修改时间 - private boolean mDeleted; - //表征是否被删除 - public Node() { - mGid = null; - mName = ""; - mLastModified = 0; - mDeleted = false; - } - - public abstract JSONObject getCreateAction(int actionId); - - public abstract JSONObject getUpdateAction(int actionId); - - public abstract void setContentByRemoteJSON(JSONObject js); - - public abstract void setContentByLocalJSON(JSONObject js); - - public abstract JSONObject getLocalJSONFromContent(); - - public abstract int getSyncAction(Cursor c); - - public void setGid(String gid) { - this.mGid = gid; - } - - public void setName(String name) { - this.mName = name; - } - - public void setLastModified(long lastModified) { - this.mLastModified = lastModified; - } - - public void setDeleted(boolean deleted) { - this.mDeleted = deleted; - } - - public String getGid() { - return this.mGid; - } - - public String getName() { - return this.mName; - } - - public long getLastModified() { - return this.mLastModified; - } - - public boolean getDeleted() { - return this.mDeleted; - } - -} diff --git a/doc/精读报告/gtask/data/SqlData.doc b/doc/精读报告/gtask/data/SqlData.doc deleted file mode 100644 index ff9ab81..0000000 --- a/doc/精读报告/gtask/data/SqlData.doc +++ /dev/null @@ -1,218 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/* - * Description:用于支持小米便签最底层的数据库相关操作,和sqlnote的关系上是子集关系,即data是note的子集(节点)。 - * SqlData其实就是也就是所谓数据中的数据 - */ -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中 - * 实现过程:调用getSimpleName ()函数 - */ - private static final String TAG = SqlData.class.getSimpleName(); - - private static final int INVALID_ID = -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; - /* - * 功能描述:构造函数,用于初始化数据 - * 参数注解:mContentResolver用于获取ContentProvider提供的数据 - * 参数注解: mIsCreate表征当前数据是用哪种方式创建(两种构造函数的参数不同) - */ - public SqlData(Context context) { - mContentResolver = context.getContentResolver(); - mIsCreate = true; - mDataId = INVALID_ID; - mDataMimeType = DataConstants.NOTE; - mDataContent = ""; - mDataContentData1 = 0; - mDataContentData3 = ""; - mDiffDataValues = new ContentValues(); - } - - public SqlData(Context context, Cursor c) { - mContentResolver = context.getContentResolver(); - mIsCreate = false; - loadFromCursor(c); - mDiffDataValues = new ContentValues(); - } - /* - * 功能描述:从光标处加载数据 - * 从当前的光标处将五列的数据加载到该类的对象 - */ - private void loadFromCursor(Cursor c) { - mDataId = c.getLong(DATA_ID_COLUMN); - mDataMimeType = c.getString(DATA_MIME_TYPE_COLUMN); - mDataContent = c.getString(DATA_CONTENT_COLUMN); - mDataContentData1 = c.getLong(DATA_CONTENT_DATA_1_COLUMN); - mDataContentData3 = c.getString(DATA_CONTENT_DATA_3_COLUMN); - } - /* - * 功能描述:设置用于共享的数据,并提供异常抛出与处理机制 - */ - public void setContent(JSONObject js) throws JSONException { - //如果传入的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/精读报告/gtask/data/SqlNote.doc b/doc/精读报告/gtask/data/SqlNote.doc deleted file mode 100644 index 6e3e842..0000000 --- a/doc/精读报告/gtask/data/SqlNote.doc +++ /dev/null @@ -1,566 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.gtask.data; - -import android.appwidget.AppWidgetManager; -import android.content.ContentResolver; -import android.content.ContentValues; -import android.content.Context; -import android.database.Cursor; -import android.net.Uri; -import android.util.Log; - -import net.micode.notes.data.Notes; -import net.micode.notes.data.Notes.DataColumns; -import net.micode.notes.data.Notes.NoteColumns; -import net.micode.notes.gtask.exception.ActionFailureException; -import net.micode.notes.tool.GTaskStringUtils; -import net.micode.notes.tool.ResourceParser; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - -import java.util.ArrayList; - - -public class SqlNote { - /* - * 功能描述:得到类的简写名称存入字符串TAG中 - * 实现过程:调用getSimpleName ()函数 - */ - private static final String TAG = SqlNote.class.getSimpleName(); - - private static final int INVALID_ID = -99999; - // 集合了interface NoteColumns中所有SF常量(17个) - 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; - //一下定义了17个内部的变量,其中12个可以由content中获得,5个需要初始化为0或者new - 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; - - - /* - * 功能描述:构造函数 - * 参数注解: mIsCreate用于标示构造方式 - */ - //构造函数只有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(); - } - /* - * 功能描述:构造函数 - * 参数注解: mIsCreate用于标示构造方式 - */ - //构造函数有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; - } -} diff --git a/doc/精读报告/gtask/data/Task.doc b/doc/精读报告/gtask/data/Task.doc deleted file mode 100644 index 72068a0..0000000 --- a/doc/精读报告/gtask/data/Task.doc +++ /dev/null @@ -1,351 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.gtask.data; - -import android.database.Cursor; -import android.text.TextUtils; -import android.util.Log; - -import net.micode.notes.data.Notes; -import net.micode.notes.data.Notes.DataColumns; -import net.micode.notes.data.Notes.DataConstants; -import net.micode.notes.data.Notes.NoteColumns; -import net.micode.notes.gtask.exception.ActionFailureException; -import net.micode.notes.tool.GTaskStringUtils; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - - -public class Task extends Node { - private static final String TAG = Task.class.getSimpleName(); - - private boolean mCompleted;//是否完成 - - private String mNotes; - - private JSONObject mMetaInfo;//将在实例中存储数据的类型 - - private Task mPriorSibling;//对应的优先兄弟Task的指针(待完善) - - private TaskList mParent;//所在的任务列表的指针 - - public Task() { - super(); - mCompleted = false; - mNotes = null; - mPriorSibling = null;//TaskList中当前Task前面的Task的指针 - mParent = null;//当前Task所在的TaskList - mMetaInfo = null; - } - - public JSONObject getCreateAction(int actionId) { - JSONObject js = new JSONObject(); - - try { - // action_type - js.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE, - GTaskStringUtils.GTASK_JSON_ACTION_TYPE_CREATE); - - // action_id - js.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, actionId); - - // index - js.put(GTaskStringUtils.GTASK_JSON_INDEX, mParent.getChildTaskIndex(this)); - - // entity_delta - JSONObject entity = new JSONObject(); - entity.put(GTaskStringUtils.GTASK_JSON_NAME, getName()); - entity.put(GTaskStringUtils.GTASK_JSON_CREATOR_ID, "null"); - entity.put(GTaskStringUtils.GTASK_JSON_ENTITY_TYPE, - GTaskStringUtils.GTASK_JSON_TYPE_TASK); - if (getNotes() != null) { - entity.put(GTaskStringUtils.GTASK_JSON_NOTES, getNotes()); - } - js.put(GTaskStringUtils.GTASK_JSON_ENTITY_DELTA, entity); - - // parent_id - js.put(GTaskStringUtils.GTASK_JSON_PARENT_ID, mParent.getGid()); - - // dest_parent_type - js.put(GTaskStringUtils.GTASK_JSON_DEST_PARENT_TYPE, - GTaskStringUtils.GTASK_JSON_TYPE_GROUP); - - // list_id - js.put(GTaskStringUtils.GTASK_JSON_LIST_ID, mParent.getGid()); - - // prior_sibling_id - if (mPriorSibling != null) { - js.put(GTaskStringUtils.GTASK_JSON_PRIOR_SIBLING_ID, mPriorSibling.getGid()); - } - - } catch (JSONException e) { - Log.e(TAG, e.toString()); - e.printStackTrace(); - throw new ActionFailureException("fail to generate task-create jsonobject"); - } - - return js; - } - - public JSONObject getUpdateAction(int actionId) { - JSONObject js = new JSONObject(); - - try { - // action_type - js.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE, - GTaskStringUtils.GTASK_JSON_ACTION_TYPE_UPDATE); - - // action_id - js.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, actionId); - - // id - js.put(GTaskStringUtils.GTASK_JSON_ID, getGid()); - - // entity_delta - JSONObject entity = new JSONObject(); - entity.put(GTaskStringUtils.GTASK_JSON_NAME, getName()); - if (getNotes() != null) { - entity.put(GTaskStringUtils.GTASK_JSON_NOTES, getNotes()); - } - entity.put(GTaskStringUtils.GTASK_JSON_DELETED, getDeleted()); - js.put(GTaskStringUtils.GTASK_JSON_ENTITY_DELTA, entity); - - } catch (JSONException e) { - Log.e(TAG, e.toString()); - e.printStackTrace(); - throw new ActionFailureException("fail to generate task-update jsonobject"); - } - - return js; - } - - public void setContentByRemoteJSON(JSONObject js) { - if (js != null) { - try { - // id - if (js.has(GTaskStringUtils.GTASK_JSON_ID)) { - setGid(js.getString(GTaskStringUtils.GTASK_JSON_ID)); - } - - // last_modified - if (js.has(GTaskStringUtils.GTASK_JSON_LAST_MODIFIED)) { - setLastModified(js.getLong(GTaskStringUtils.GTASK_JSON_LAST_MODIFIED)); - } - - // name - if (js.has(GTaskStringUtils.GTASK_JSON_NAME)) { - setName(js.getString(GTaskStringUtils.GTASK_JSON_NAME)); - } - - // notes - if (js.has(GTaskStringUtils.GTASK_JSON_NOTES)) { - setNotes(js.getString(GTaskStringUtils.GTASK_JSON_NOTES)); - } - - // deleted - if (js.has(GTaskStringUtils.GTASK_JSON_DELETED)) { - setDeleted(js.getBoolean(GTaskStringUtils.GTASK_JSON_DELETED)); - } - - // completed - if (js.has(GTaskStringUtils.GTASK_JSON_COMPLETED)) { - setCompleted(js.getBoolean(GTaskStringUtils.GTASK_JSON_COMPLETED)); - } - } catch (JSONException e) { - Log.e(TAG, e.toString()); - e.printStackTrace(); - throw new ActionFailureException("fail to get task content from jsonobject"); - } - } - } - - public void setContentByLocalJSON(JSONObject js) { - if (js == null || !js.has(GTaskStringUtils.META_HEAD_NOTE) - || !js.has(GTaskStringUtils.META_HEAD_DATA)) { - Log.w(TAG, "setContentByLocalJSON: nothing is avaiable"); - } - - try { - JSONObject note = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE); - JSONArray dataArray = js.getJSONArray(GTaskStringUtils.META_HEAD_DATA); - - if (note.getInt(NoteColumns.TYPE) != Notes.TYPE_NOTE) { - Log.e(TAG, "invalid type"); - return; - } - - for (int i = 0; i < dataArray.length(); i++) { - JSONObject data = dataArray.getJSONObject(i); - if (TextUtils.equals(data.getString(DataColumns.MIME_TYPE), DataConstants.NOTE)) { - setName(data.getString(DataColumns.CONTENT)); - break; - } - } - - } catch (JSONException e) { - Log.e(TAG, e.toString()); - e.printStackTrace(); - } - } - - public JSONObject getLocalJSONFromContent() { - String name = getName(); - try { - if (mMetaInfo == null) { - // new task created from web - if (name == null) { - Log.w(TAG, "the note seems to be an empty one"); - return null; - } - - JSONObject js = new JSONObject(); - JSONObject note = new JSONObject(); - JSONArray dataArray = new JSONArray(); - JSONObject data = new JSONObject(); - data.put(DataColumns.CONTENT, name); - dataArray.put(data); - js.put(GTaskStringUtils.META_HEAD_DATA, dataArray); - note.put(NoteColumns.TYPE, Notes.TYPE_NOTE); - js.put(GTaskStringUtils.META_HEAD_NOTE, note); - return js; - } else { - // synced task - JSONObject note = mMetaInfo.getJSONObject(GTaskStringUtils.META_HEAD_NOTE); - JSONArray dataArray = mMetaInfo.getJSONArray(GTaskStringUtils.META_HEAD_DATA); - - for (int i = 0; i < dataArray.length(); i++) { - JSONObject data = dataArray.getJSONObject(i); - if (TextUtils.equals(data.getString(DataColumns.MIME_TYPE), DataConstants.NOTE)) { - data.put(DataColumns.CONTENT, getName()); - break; - } - } - - note.put(NoteColumns.TYPE, Notes.TYPE_NOTE); - return mMetaInfo; - } - } catch (JSONException e) { - Log.e(TAG, e.toString()); - e.printStackTrace(); - return null; - } - } - - public void setMetaInfo(MetaData metaData) { - if (metaData != null && metaData.getNotes() != null) { - try { - mMetaInfo = new JSONObject(metaData.getNotes()); - } catch (JSONException e) { - Log.w(TAG, e.toString()); - mMetaInfo = null; - } - } - } - - public int getSyncAction(Cursor c) { - try { - JSONObject noteInfo = null; - if (mMetaInfo != null && mMetaInfo.has(GTaskStringUtils.META_HEAD_NOTE)) { - noteInfo = mMetaInfo.getJSONObject(GTaskStringUtils.META_HEAD_NOTE); - } - - if (noteInfo == null) { - Log.w(TAG, "it seems that note meta has been deleted"); - return SYNC_ACTION_UPDATE_REMOTE; - } - - if (!noteInfo.has(NoteColumns.ID)) { - Log.w(TAG, "remote note id seems to be deleted"); - return SYNC_ACTION_UPDATE_LOCAL; - } - - // validate the note id now - if (c.getLong(SqlNote.ID_COLUMN) != noteInfo.getLong(NoteColumns.ID)) { - Log.w(TAG, "note id doesn't match"); - return SYNC_ACTION_UPDATE_LOCAL; - } - - if (c.getInt(SqlNote.LOCAL_MODIFIED_COLUMN) == 0) { - // there is no local update - if (c.getLong(SqlNote.SYNC_ID_COLUMN) == getLastModified()) { - // no update both side - return SYNC_ACTION_NONE; - } else { - // apply remote to local - return SYNC_ACTION_UPDATE_LOCAL; - } - } else { - // validate gtask id - if (!c.getString(SqlNote.GTASK_ID_COLUMN).equals(getGid())) { - Log.e(TAG, "gtask id doesn't match"); - return SYNC_ACTION_ERROR; - } - if (c.getLong(SqlNote.SYNC_ID_COLUMN) == getLastModified()) { - // local modification only - return SYNC_ACTION_UPDATE_REMOTE; - } else { - return SYNC_ACTION_UPDATE_CONFLICT; - } - } - } catch (Exception e) { - Log.e(TAG, e.toString()); - e.printStackTrace(); - } - - return SYNC_ACTION_ERROR; - } - - public boolean isWorthSaving() { - return mMetaInfo != null || (getName() != null && getName().trim().length() > 0) - || (getNotes() != null && getNotes().trim().length() > 0); - } - - public void setCompleted(boolean completed) { - this.mCompleted = completed; - } - - public void setNotes(String notes) { - this.mNotes = notes; - } - - public void setPriorSibling(Task priorSibling) { - this.mPriorSibling = priorSibling; - } - - public void setParent(TaskList parent) { - this.mParent = parent; - } - - public boolean getCompleted() { - return this.mCompleted; - } - - public String getNotes() { - return this.mNotes; - } - - public Task getPriorSibling() { - return this.mPriorSibling; - } - - public TaskList getParent() { - return this.mParent; - } - -} diff --git a/doc/精读报告/gtask/data/TaskList.doc b/doc/精读报告/gtask/data/TaskList.doc deleted file mode 100644 index 37dad1c..0000000 --- a/doc/精读报告/gtask/data/TaskList.doc +++ /dev/null @@ -1,401 +0,0 @@ -/* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.micode.notes.gtask.data; - -import android.database.Cursor; -import android.util.Log; - -import net.micode.notes.data.Notes; -import net.micode.notes.data.Notes.NoteColumns; -import net.micode.notes.gtask.exception.ActionFailureException; -import net.micode.notes.tool.GTaskStringUtils; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.util.ArrayList; - - -public class TaskList extends Node { - private static final String TAG = TaskList.class.getSimpleName();//tag标记 - - private int mIndex;//当前TaskList的指针 - - private ArrayList mChildren;//类中主要的保存数据的单元,用来实现一个以Task为元素的ArrayList - - public TaskList() { - super(); - mChildren = new ArrayList(); - mIndex = 1; - } - /* (non-Javadoc) - * @see net.micode.notes.gtask.data.Node#getCreateAction(int) - * 生成并返回一个包含了一定数据的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.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; - } - - - /* (non-Javadoc) - * @see net.micode.notes.gtask.data.Node#getUpdateAction(int) - * 生成并返回一个包含了一定数据的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(); - } - /** - * @param task - * @return 返回值为是否成功添加任务。 - * 功能:在当前任务表末尾添加新的任务。 - */ - 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; - } - /** - * @param task - * @param index - * @return - * 功能:在当前任务表的指定位置添加新的任务。 - */ - 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; - } - /** - * @param task - * @return 返回删除是否成功 - * 功能:删除TaskList中的一个Task - */ - /** - * @param task - * @param index - * @return - * 功能:将当前TaskList中含有的某个Task移到index位置 - */ - 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; - } - /** - * @param gid - * @return返回寻找结果 - * 功能:按gid寻找Task - */ - 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)); - //利用已实现好的功能完成当下功能; - } - - - /** - * @param task - * @return - * 功能:返回指定Task的index - */ - public Task findChildTaskByGid(String gid) { - for (int i = 0; i < mChildren.size(); i++) { - Task t = mChildren.get(i); - if (t.getGid().equals(gid)) { - return t; - } - } - return null; - } - - - /** - * @param index - * @return - * 功能:返回指定index的Task - */ - public int getChildTaskIndex(Task task) { - return mChildren.indexOf(task); - } - - public Task getChildTaskByIndex(int index) { - if (index < 0 || index >= mChildren.size()) { - Log.e(TAG, "getTaskByIndex: invalid index"); - return null; - } - return mChildren.get(index); - } - - - /** - * @param gid - * @return - * 功能:返回指定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; - } -} From 252d72e6ec40d03bfb94c169f2f32b57e0c0b997 Mon Sep 17 00:00:00 2001 From: pj36foInf <445038096@qq.com> Date: Fri, 14 Apr 2023 15:50:26 +0800 Subject: [PATCH 3/9] 414 --- doc/精读报告/tool/BackupUtils.doc | 345 +++++ doc/精读报告/tool/DataUtils.doc | 306 +++++ doc/精读报告/tool/GTaskStringUtils.doc | 115 ++ doc/精读报告/tool/ResourceParser.doc | 214 +++ doc/精读报告/ui/NotesListActivity.doc | 1220 +++++++++++++++++ .../widget/NoteWidgetProvider.doc | 169 +++ .../widget/NoteWidgetProvider_2x.doc | 48 + .../widget/NoteWidgetProvider_4x.doc | 58 + 8 files changed, 2475 insertions(+) create mode 100644 doc/精读报告/tool/BackupUtils.doc create mode 100644 doc/精读报告/tool/DataUtils.doc create mode 100644 doc/精读报告/tool/GTaskStringUtils.doc create mode 100644 doc/精读报告/tool/ResourceParser.doc create mode 100644 doc/精读报告/ui/NotesListActivity.doc create mode 100644 doc/精读报告/widget/NoteWidgetProvider.doc create mode 100644 doc/精读报告/widget/NoteWidgetProvider_2x.doc create mode 100644 doc/精读报告/widget/NoteWidgetProvider_4x.doc diff --git a/doc/精读报告/tool/BackupUtils.doc b/doc/精读报告/tool/BackupUtils.doc new file mode 100644 index 0000000..5abf325 --- /dev/null +++ b/doc/精读报告/tool/BackupUtils.doc @@ -0,0 +1,345 @@ +/* + * 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;// 定义一个常量,表示当前的状态是 SD 卡没有挂载 + // 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;// 定义一个私有变量,用于保存一个 TextExport 对象的引用 + + private BackupUtils(Context context) { + // 定义一个私有构造器,用于创建 BackupUtils 对象mTextExport = new TextExport(context);// 用传入的上下文参数创建一个 TextExport 对象,并赋值给 mTextExport 变量 + } + + private static boolean externalStorageAvailable() {// 定义一个私有静态方法,用于判断外部存储是否可用 + return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()); + } + + public int exportToText() { + // 定义一个公有方法,用于导出文本文件 + return mTextExport.exportToText();//调用 mTextExport 对象的 exportToText 方法,并返回其结果 + } + + public String getExportedTextFileName() {// 定义一个公有方法,用于获取导出的文本文件名 + return mTextExport.mFileName;// 返回 mTextExport 对象的 mFileName 变量的值 + } + + public String getExportedTextFileDir() {// 定义一个公有方法,用于获取导出的文本文件目录 + return mTextExport.mFileDirectory;// 返回 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;// 定义一个私有静态常量,表示笔记 ID 列在 NOTE_PROJECTION 数组中的索引 + + private static final int NOTE_COLUMN_MODIFIED_DATE = 1;// 定义一个私有静态常量,表示笔记修改日期列在 NOTE_PROJECTION 数组中的索引 + + private static final int NOTE_COLUMN_SNIPPET = 2; // 定义一个私有静态常量,表示笔记摘要列在 NOTE_PROJECTION 数组中的索引 + + 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;// 定义一个私有静态常量,表示数据内容列在 DATA_PROJECTION 数组中的索引 + + private static final int DATA_COLUMN_MIME_TYPE = 1;// 定义一个私有静态常量,表示数据 MIME 类型列在 DATA_PROJECTION 数组中的索引 + + private static final int DATA_COLUMN_CALL_DATE = 2;// 定义一个私有静态常量,表示数据 MIME 类型列在 DATA_PROJECTION 数组中的索引 + + private static final int DATA_COLUMN_PHONE_NUMBER = 4;// 定义一个私有静态常量,表示数据 3 列在 DATA_PROJECTION 数组中的索引,用于存储电话号码 + + private final String [] TEXT_FORMAT;// 定义一个私有不可变数组,用于存储文本文件的格式字符串 + private static final int FORMAT_FOLDER_NAME = 0;// 定义一个私有静态常量,表示文件夹名称格式在 TEXT_FORMAT 数组中的索引 + private static final int FORMAT_NOTE_DATE = 1;// 定义一个私有静态常量,表示笔记日期格式在 TEXT_FORMAT 数组中的索引 + private static final int FORMAT_NOTE_CONTENT = 2;// 定义一个私有静态常量,表示笔记内容格式在 TEXT_FORMAT 数组中的索引 + + private Context mContext;// 定义一个私有变量,用于保存上下文对象的引用 + private String mFileName;// 定义一个私有变量,用于保存导出的文本文件名 + private String mFileDirectory;// 定义一个私有变量,用于保存导出的文本文件目录 + + public TextExport(Context context) {// 定义一个公有构造器,用于创建 TextExport 对象 + TEXT_FORMAT = context.getResources().getStringArray(R.array.format_for_exported_note);// 用传入的上下文参数获取资源数组,并赋值给 TEXT_FORMAT 数组 + mContext = context; // 用传入的上下文参数赋值给 mContext 变量 + mFileName = "";// 初始化 mFileName 变量为空字符串 + mFileDirectory = "";// 初始化 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) {// 定义一个私有方法,用于导出指定文件夹 ID 的文本文件,需要传入文件夹 ID 和打印流对象作为参数 + // Query notes belong to this folder + Cursor notesCursor = mContext.getContentResolver().query(Notes.CONTENT_NOTE_URI,// 用 mContext 变量获取内容解析器,并查询笔记表的 URI + NOTE_PROJECTION, NoteColumns.PARENT_ID + "=?", new String[] {// 指定需要返回的列名数组为 NOTE_PROJECTION + 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);// 用游标获取当前行的笔记 ID 列的值,转换为字符串,并赋值给 noteId 变量 + exportNoteToText(noteId, ps);// 调用 exportNoteToText 方法,传入笔记 ID 和打印流对象作为参数,导出该笔记的文本文件 + } while (notesCursor.moveToNext());// 循环条件为游标移动到下一行,直到没有更多行为止 + } + notesCursor.close();//关闭游标对象,释放资源 + } + } + + /** + * Export note identified by id to a print stream + */ + private void exportNoteToText(String noteId, PrintStream ps) { // 定义一个私有方法,用于导出指定笔记 ID 的文本文件,需要传入笔记 ID 和打印流对象作为参数 + Cursor dataCursor = mContext.getContentResolver().query(Notes.CONTENT_DATA_URI,// 用 mContext 变量获取内容解析器,并查询数据表的 URI + DATA_PROJECTION, DataColumns.NOTE_ID + "=?", new String[] {// 指定查询条件为笔记 ID 等于传入的笔记 ID noteId }, null); // 指定排序方式为 null + noteId + }, null); + + if (dataCursor != null) { // 如果数据游标不为空 + if (dataCursor.moveToFirst()) { // 如果数据游标移动到第一行 + do { + String mimeType = dataCursor.getString(DATA_COLUMN_MIME_TYPE); // 获取数据的类型 + if (DataConstants.CALL_NOTE.equals(mimeType)) { // 如果数据是通话记录 + // 打印电话号码 + 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)); // 格式化并打印电话号码 + } + // 打印通话日期 + ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), DateFormat + .format(mContext.getString(R.string.format_datetime_mdhm), + callDate))); // 格式化并打印通话日期 + // 打印通话附件位置 + if (!TextUtils.isEmpty(location)) { // 如果通话附件位置不为空 + ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), + location)); // 格式化并打印通话附件位置 + } + } 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; // 返回SD卡未挂载的状态 + } + + PrintStream ps = getExportToTextPrintStream(); // 获取导出文本的打印流 + if (ps == null) { // 如果打印流为空 + Log.e(TAG, "get print stream error"); // 打印错误日志 + return STATE_SYSTEM_ERROR; // 返回系统错误的状态 + } + // 首先导出文件夹和它们的便签 + 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 { + // 打印文件夹的名字 + 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); // 获取文件夹的ID + exportFolderToText(folderId, ps); // 调用导出文件夹到文本的方法,传入文件夹ID和打印流 + } 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)))); // 格式化并打印便签的修改日期 + // 查询属于这个便签的数据 + String noteId = noteCursor.getString(NOTE_COLUMN_ID); // 获取便签的ID + exportNoteToText(noteId, ps); // 调用导出便签到文本的方法,传入便签ID和打印流 + } 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); // 调用生成挂载在SD卡上的文件的方法,传入上下文,文件路径和文件名格式 + 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) { // 定义一个生成挂载在SD卡上的文件的方法,传入上下文,文件路径资源ID和文件名格式资源ID + 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/精读报告/tool/DataUtils.doc b/doc/精读报告/tool/DataUtils.doc new file mode 100644 index 0000000..472fd39 --- /dev/null +++ b/doc/精读报告/tool/DataUtils.doc @@ -0,0 +1,306 @@ +/* + * 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) { // 定义一个静态方法,批量删除便签,传入内容解析器和便签ID的集合 + if (ids == null) { // 如果ID集合为空 + Log.d(TAG, "the ids is null"); // 打印调试日志 + return true; // 返回真值 + } + if (ids.size() == 0) { // 如果ID集合的大小为零 + Log.d(TAG, "no id is in the hashset"); // 打印调试日志 + return true; // 返回真值 + } + + ArrayList operationList = new ArrayList(); // 创建一个内容提供者操作的列表 + for (long id : ids) { // 遍历ID集合中的每个ID + if(id == Notes.ID_ROOT_FOLDER) { // 如果ID是根文件夹的ID + Log.e(TAG, "Don't delete system folder root"); // 打印错误日志 + continue; // 跳过本次循环 + } + ContentProviderOperation.Builder builder = ContentProviderOperation + .newDelete(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id)); // 创建一个内容提供者操作的构建器,指定删除便签的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()); // 打印调试日志,显示失败的ID集合 + 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) { // 定义一个静态方法,移动便签到文件夹,传入内容解析器,便签ID,源文件夹ID和目标文件夹ID + ContentValues values = new ContentValues(); // 创建一个内容值对象 + values.put(NoteColumns.PARENT_ID, desFolderId); // 把目标文件夹ID作为父ID放入内容值中 + values.put(NoteColumns.ORIGIN_PARENT_ID, srcFolderId); // 把源文件夹ID作为原始父ID放入内容值中 + values.put(NoteColumns.LOCAL_MODIFIED, 1); // 把本地修改标志设为1放入内容值中 + resolver.update(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id), values, null, null); // 调用内容解析器的更新方法,传入便签的URI和ID,内容值,空的选择和选择参数 + } + + public static boolean batchMoveToFolder(ContentResolver resolver, HashSet ids, + long folderId) { // 定义一个静态方法,批量移动到文件夹,传入内容解析器,便签ID的集合和文件夹ID + if (ids == null) { // 如果ID集合为空 + Log.d(TAG, "the ids is null"); // 打印调试日志 + return true; // 返回真值 + } + + ArrayList operationList = new ArrayList(); // 创建一个内容提供者操作的列表 + for (long id : ids) { // 遍历ID集合中的每个ID + ContentProviderOperation.Builder builder = ContentProviderOperation + .newUpdate(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id)); // 创建一个内容提供者操作的构建器,指定更新便签的URI和ID + builder.withValue(NoteColumns.PARENT_ID, folderId); // 把文件夹ID作为父ID放入构建器中 + builder.withValue(NoteColumns.LOCAL_MODIFIED, 1); // 把本地修改标志设为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()); // 打印调试日志,显示失败的ID集合 + 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); // 查询便签的URI,返回文件夹类型且不在回收站的便签的数量 + + 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) { // 定义一个静态方法,判断便签是否在数据库中可见,传入内容解析器,便签ID和类型 + 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); // 查询便签的URI和ID,返回指定类型且不在回收站的便签 + + boolean exist = false; // 声明一个布尔型变量,表示是否存在 + if (cursor != null) { // 如果游标不为空 + if (cursor.getCount() > 0) { // 如果游标的数量大于零 + exist = true; // 把存在设为真值 + } + cursor.close(); // 关闭游标 + } + return exist; // 返回是否存在 + } + + public static boolean existInNoteDatabase(ContentResolver resolver, long noteId) { + // 查询便签的URI和ID,返回便签的所有列 + 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) { + // 查询数据的URI和ID,返回数据的所有列 + 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) { + // 查询便签的URI,返回文件夹类型且不在回收站且名称等于指定值的便签 + 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) { + // 查询便签的URI,返回指定父ID的便签的小部件ID和类型 + Cursor c = resolver.query(Notes.CONTENT_NOTE_URI, + new String[] { NoteColumns.WIDGET_ID, NoteColumns.WIDGET_TYPE }, + NoteColumns.PARENT_ID + "=?", + new String[] { String.valueOf(folderId) }, + null); + + HashSet set = null; // 声明一个哈希集合,用于存储便签小部件的属性 + if (c != null) { // 如果游标不为空 + if (c.moveToFirst()) { // 如果游标移动到第一行 + set = new HashSet(); // 创建一个新的哈希集合 + do { + try { + AppWidgetAttribute widget = new AppWidgetAttribute(); // 创建一个新的便签小部件属性对象 + widget.widgetId = c.getInt(0); // 获取游标的第一列的值,即小部件ID + 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) { + // 查询数据的URI,返回指定便签ID和MIME类型的数据的电话号码 + 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) { + // 查询数据的URI,返回指定通话日期、MIME类型和电话号码的数据的便签ID + 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); // 返回游标的第一列的值,即便签ID + } catch (IndexOutOfBoundsException e) { // 如果发生索引越界异常 + Log.e(TAG, "Get call note id fails " + e.toString()); // 打印错误日志,显示异常信息 + } + } + cursor.close(); // 关闭游标 + } + return 0; // 返回0 + } + + + public static String getSnippetById(ContentResolver resolver, long noteId) { + // 查询便签的URI,返回指定ID的便签的摘要 + 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/精读报告/tool/GTaskStringUtils.doc b/doc/精读报告/tool/GTaskStringUtils.doc new file mode 100644 index 0000000..a147377 --- /dev/null +++ b/doc/精读报告/tool/GTaskStringUtils.doc @@ -0,0 +1,115 @@ +/* + * 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 { + + // 定义一些常量字符串,表示Google任务的JSON格式的属性名 + + public final static String GTASK_JSON_ACTION_ID = "action_id"; // 动作ID + + public final static String GTASK_JSON_ACTION_LIST = "action_list"; // 动作列表 + + public final static String GTASK_JSON_ACTION_TYPE = "action_type"; // 动作类型 + + public final static String GTASK_JSON_ACTION_TYPE_CREATE = "create"; // 创建动作 + + public final static String GTASK_JSON_ACTION_TYPE_GETALL = "get_all"; // 获取所有动作 + + public final static String GTASK_JSON_ACTION_TYPE_MOVE = "move"; // 移动动作 + + public final static String GTASK_JSON_ACTION_TYPE_UPDATE = "update"; // 更新动作 + + public final static String GTASK_JSON_CREATOR_ID = "creator_id"; // 创建者ID + + public final static String GTASK_JSON_CHILD_ENTITY = "child_entity"; // 子实体 + + public final static String GTASK_JSON_CLIENT_VERSION = "client_version"; // 客户端版本 + + public final static String GTASK_JSON_COMPLETED = "completed"; // 完成状态 + + public final static String GTASK_JSON_CURRENT_LIST_ID = "current_list_id"; // 当前列表ID + + public final static String GTASK_JSON_DEFAULT_LIST_ID = "default_list_id"; // 默认列表ID + + public final static String GTASK_JSON_DELETED = "deleted"; // 删除状态 + + public final static String GTASK_JSON_DEST_LIST = "dest_list"; // 目标列表 + + public final static String GTASK_JSON_DEST_PARENT = "dest_parent"; // 目标父实体 + + public final static String GTASK_JSON_DEST_PARENT_TYPE = "dest_parent_type"; // 目标父实体类型 + + public final static String GTASK_JSON_ENTITY_DELTA = "entity_delta"; // 实体变化 + + public final static String GTASK_JSON_ENTITY_TYPE = "entity_type"; // 实体类型 + + public final static String GTASK_JSON_GET_DELETED = "get_deleted"; // 获取删除状态 + + public final static String GTASK_JSON_ID = "id"; // ID + + public final static String GTASK_JSON_INDEX = "index"; // 索引 + + public final static String GTASK_JSON_LAST_MODIFIED = "last_modified"; // 最后修改时间 + + public final static String GTASK_JSON_LATEST_SYNC_POINT = "latest_sync_point"; // 最新同步点 + + public final static String GTASK_JSON_LIST_ID = "list_id"; // 列表ID + + public final static String GTASK_JSON_LISTS = "lists"; // 列表 + + public final static String GTASK_JSON_NAME = "name"; // 名称 + + public final static String GTASK_JSON_NEW_ID = "new_id"; // 新ID + + public final static String GTASK_JSON_NOTES = "notes"; // 便签 + + public final static String GTASK_JSON_PARENT_ID = "parent_id"; // 父ID + + public final static String GTASK_JSON_PRIOR_SIBLING_ID = "prior_sibling_id"; // 前一个兄弟ID + + public final static String GTASK_JSON_RESULTS = "results"; // 结果 + + public final static String GTASK_JSON_SOURCE_LIST = "source_list"; // 源列表 + + public final static String GTASK_JSON_TASKS = "tasks"; // 任务 + + public final static String GTASK_JSON_TYPE = "type"; // 类型 + + public final static String GTASK_JSON_TYPE_GROUP = "GROUP"; // 组类型 + + public final static String GTASK_JSON_TYPE_TASK = "TASK"; // 任务类型 + + public final static String GTASK_JSON_USER = "user"; // 用户 + + public final static String MIUI_FOLDER_PREFFIX = "[MIUI_Notes]"; // MIUI文件夹的前缀 + + public final static String FOLDER_DEFAULT = "Default"; // 默认文件夹的名称 + + public final static String FOLDER_CALL_NOTE = "Call_Note"; // 通话便签文件夹的名称 + + public final static String FOLDER_META = "METADATA"; // 元数据文件夹的名称 + + public final static String META_HEAD_GTASK_ID = "meta_gid"; // 元数据中的Google任务ID的头部 + + public final static String META_HEAD_NOTE = "meta_note"; // 元数据中的便签的头部 + + public final static String META_HEAD_DATA = "meta_data"; // 元数据中的数据的头部 + + public final static String META_NOTE_NAME = "[META INFO] DON'T UPDATE AND DELETE"; // 元数据便签的名称,提示不要更新和删除 + +} diff --git a/doc/精读报告/tool/ResourceParser.doc b/doc/精读报告/tool/ResourceParser.doc new file mode 100644 index 0000000..2708d61 --- /dev/null +++ b/doc/精读报告/tool/ResourceParser.doc @@ -0,0 +1,214 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.tool; + +import android.content.Context; +import android.preference.PreferenceManager; + +import net.micode.notes.R; +import net.micode.notes.ui.NotesPreferenceActivity; + +public class ResourceParser { + + // 定义一些常量整型,表示便签的背景颜色 + public static final int YELLOW = 0; + public static final int BLUE = 1; + public static final int WHITE = 2; + public static final int GREEN = 3; + public static final int RED = 4; + + // 定义一个常量整型,表示默认的背景颜色 + public static final int BG_DEFAULT_COLOR = YELLOW; + + // 定义一些常量整型,表示便签的文字大小 + public static final int TEXT_SMALL = 0; + public static final int TEXT_MEDIUM = 1; + public static final int TEXT_LARGE = 2; + public static final int TEXT_SUPER = 3; + + // 定义一个常量整型,表示默认的文字大小 + public static final int BG_DEFAULT_FONT_SIZE = TEXT_MEDIUM; + + // 定义一个静态内部类,用于存储便签的背景资源 + public static class NoteBgResources { + // 定义一个静态整型数组,表示编辑模式下的便签背景资源 + private final static int [] BG_EDIT_RESOURCES = new int [] { + R.drawable.edit_yellow, + R.drawable.edit_blue, + R.drawable.edit_white, + R.drawable.edit_green, + R.drawable.edit_red + }; + + // 定义一个静态整型数组,表示编辑模式下的便签标题背景资源 + private final static int [] BG_EDIT_TITLE_RESOURCES = new int [] { + R.drawable.edit_title_yellow, + R.drawable.edit_title_blue, + R.drawable.edit_title_white, + R.drawable.edit_title_green, + R.drawable.edit_title_red + }; + + // 定义一个静态方法,根据ID获取便签背景资源 + public static int getNoteBgResource(int id) { + return BG_EDIT_RESOURCES[id]; + } + + // 定义一个静态方法,根据ID获取便签标题背景资源 + public static int getNoteTitleBgResource(int id) { + return BG_EDIT_TITLE_RESOURCES[id]; + } + } + + // 定义一个静态方法,获取默认的背景ID + public static int getDefaultBgId(Context context) { + // 如果用户设置了随机背景颜色 + if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean( + NotesPreferenceActivity.PREFERENCE_SET_BG_COLOR_KEY, false)) { + // 返回一个随机的背景ID + return (int) (Math.random() * NoteBgResources.BG_EDIT_RESOURCES.length); + } else { + // 否则返回默认的背景ID + return BG_DEFAULT_COLOR; + } + } + + // 这是一个公共静态类,用于存储笔记项的背景资源 + public static class NoteItemBgResources { + // 这是一个整型数组,用于存储第一个笔记项的背景资源 + private final static int [] BG_FIRST_RESOURCES = new int [] { + R.drawable.list_yellow_up, + R.drawable.list_blue_up, + R.drawable.list_white_up, + R.drawable.list_green_up, + R.drawable.list_red_up + }; + + // 这是一个整型数组,用于存储中间笔记项的背景资源 + private final static int [] BG_NORMAL_RESOURCES = new int [] { + R.drawable.list_yellow_middle, + R.drawable.list_blue_middle, + R.drawable.list_white_middle, + R.drawable.list_green_middle, + R.drawable.list_red_middle + }; + + // 这是一个整型数组,用于存储最后一个笔记项的背景资源 + private final static int [] BG_LAST_RESOURCES = new int [] { + R.drawable.list_yellow_down, + R.drawable.list_blue_down, + R.drawable.list_white_down, + R.drawable.list_green_down, + R.drawable.list_red_down, + }; + + // 这是一个整型数组,用于存储单个笔记项的背景资源 + private final static int [] BG_SINGLE_RESOURCES = new int [] { + R.drawable.list_yellow_single, + R.drawable.list_blue_single, + R.drawable.list_white_single, + R.drawable.list_green_single, + R.drawable.list_red_single + }; + + // 这是一个公共静态方法,用于根据id返回第一个笔记项的背景资源 + public static int getNoteBgFirstRes(int id) { + return BG_FIRST_RESOURCES[id]; + } + + // 这是一个公共静态方法,用于根据id返回最后一个笔记项的背景资源 + public static int getNoteBgLastRes(int id) { + return BG_LAST_RESOURCES[id]; + } + + // 这是一个公共静态方法,用于根据id返回单个笔记项的背景资源 + public static int getNoteBgSingleRes(int id) { + return BG_SINGLE_RESOURCES[id]; + } + + // 这是一个公共静态方法,用于根据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 { + // 这是一个整型数组,用于存储2x2小部件的背景资源 + private final static int [] BG_2X_RESOURCES = new int [] { + R.drawable.widget_2x_yellow, + R.drawable.widget_2x_blue, + R.drawable.widget_2x_white, + R.drawable.widget_2x_green, + R.drawable.widget_2x_red, + }; + + // 这是一个公共静态方法,用于根据id返回2x2小部件的背景资源 + public static int getWidget2xBgResource(int id) { + return BG_2X_RESOURCES[id]; + } + + // 这是一个整型数组,用于存储4x4小部件的背景资源 + private final static int [] BG_4X_RESOURCES = new int [] { + R.drawable.widget_4x_yellow, + R.drawable.widget_4x_blue, + R.drawable.widget_4x_white, + R.drawable.widget_4x_green, + R.drawable.widget_4x_red + }; + + // 这是一个公共静态方法,用于根据id返回4x4小部件的背景资源 + public static int getWidget4xBgResource(int id) { + return BG_4X_RESOURCES[id]; + } + } + + // 这是一个公共静态类,用于存储文本外观的资源 + public static class TextAppearanceResources { + // 这是一个整型数组,用于存储不同大小的文本外观资源 + private final static int [] TEXTAPPEARANCE_RESOURCES = new int [] { + R.style.TextAppearanceNormal, + R.style.TextAppearanceMedium, + R.style.TextAppearanceLarge, + R.style.TextAppearanceSuper + }; + + // 这是一个公共静态方法,用于根据id返回文本外观资源 + public static int getTexAppearanceResource(int id) { + /** + * 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/精读报告/ui/NotesListActivity.doc b/doc/精读报告/ui/NotesListActivity.doc new file mode 100644 index 0000000..784995a --- /dev/null +++ b/doc/精读报告/ui/NotesListActivity.doc @@ -0,0 +1,1220 @@ +/* + * 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; + +// 定义一个类,继承自Activity类,实现OnClickListener和OnItemLongClickListener接口 +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"; + + // 定义一个枚举类型,表示列表编辑的状态,有三种可能:笔记列表、子文件夹、通话记录文件夹 + 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; // 用于记录触摸事件的原始 Y 坐标 + private int mDispatchY; // 用于记录分发触摸事件的 Y 坐标 + private TextView mTitleBar; // 用于显示标题栏的文本视图 + private long mCurrentFolderId; // 用于记录当前文件夹的 ID + 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(Bundle savedInstanceState) {// 调用父类的方法 + super.onCreate(savedInstanceState);// 设置布局文件为note_list.xml + + setContentView(R.layout.note_list);// 初始化资源 + initResources(); + + /** + * Insert an introduction when user firstly use this application + */ + setAppInfoFromRawRes(); // 从原始资源文件中设置应用程序的介绍信息 + } + + @Override + // 这个方法是在一个Activity从另一个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); + } + } + + // 这个方法是从raw资源文件中读取应用信息,并保存到SharedPreferences中 + private void setAppInfoFromRawRes() { + // 获取SharedPreferences对象 + SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); + // 如果没有添加过介绍信息,就执行以下操作 + if (!sp.getBoolean(PREFERENCE_ADD_INTRODUCTION, false)) { + // 创建一个StringBuilder对象,用来存储读取的内容 + StringBuilder sb = new StringBuilder(); + // 声明一个输入流对象 + InputStream in = null; + try { + // 从raw资源文件中打开输入流 + in = getResources().openRawResource(R.raw.introduction); + // 如果输入流不为空,就创建一个字符输入流和缓冲输入流,按照字符数组读取内容,并追加到StringBuilder中 + 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); + // 设置WorkingNote对象的文本内容为StringBuilder中的内容 + note.setWorkingText(sb.toString()); + // 如果保存WorkingNote对象成功,就把SharedPreferences中的添加介绍信息的标志设为true + if (note.saveNote()) { + sp.edit().putBoolean(PREFERENCE_ADD_INTRODUCTION, true).commit(); + } else { + // 如果保存失败,就打印错误日志并返回 + Log.e(TAG, "Save introduction note error"); + return; + } + } + } + + @Override + // 这个方法是在Activity启动时调用的 + protected void onStart() { + // 调用父类的方法 + super.onStart(); + // 开始异步查询笔记列表 + startAsyncNotesListQuery(); + } + + // 这个方法是初始化资源的 + private void initResources() { + // 获取内容解析器对象 + mContentResolver = this.getContentResolver(); + // 创建一个后台查询处理器对象 + mBackgroundQueryHandler = new BackgroundQueryHandler(this.getContentResolver()); + // 设置当前文件夹的ID为根文件夹的ID + mCurrentFolderId = Notes.ID_ROOT_FOLDER; + // 获取笔记列表视图对象,并设置其底部视图和点击监听器 + mNotesListView = (ListView) findViewById(R.id.notes_list); + 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.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(); + } + + // 这个内部类实现了多选模式监听器和菜单项点击监听器的接口,用来处理列表视图的多选模式和菜单操作 + 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); + } + // 保存操作模式对象的引用,并设置列表适配器的选择模式为true + 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(MenuItem item) { + mNotesListAdapter.selectAll(!mNotesListAdapter.isAllSelected()); + updateMenu(); + return true; + } + + }); + return true; + } + // 这个方法是更新菜单状态的 + private void updateMenu() { + // 获取已选择的笔记数量 + int selectedCount = mNotesListAdapter.getSelectedCount(); + // 更新下拉菜单的标题,显示已选择的数量 + 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) { + // 设置列表适配器的选择模式为false,并恢复列表视图的长按功能和添加新笔记按钮的可见性 + 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) { + // 如果没有选择任何笔记,就弹出一个提示信息,并返回true + if (mNotesListAdapter.getSelectedCount() == 0) { + Toast.makeText(NotesListActivity.this, getString(R.string.menu_select_none), + Toast.LENGTH_SHORT).show(); + return true; + } + + // 根据菜单项的ID,执行相应的操作 + 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; + // 如果是其他菜单项,就返回false + 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; + // 获取触摸事件在屏幕上的Y坐标,并加上按钮的起始位置 + int eventY = start + (int) event.getY(); + /** + * Minus TitleBar's height + */ + // 如果当前的列表编辑状态是子文件夹状态,就减去标题栏的高度 + if (mState == ListEditState.SUB_FOLDER) { + eventY -= mTitleBar.getHeight(); + start -= mTitleBar.getHeight(); + } + + // 如果触摸事件在一个特定的区域内,就执行以下操作 + 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))) { + // 保存触摸事件在按钮上的Y坐标和在屏幕上的Y坐标 + mOriginY = (int) event.getY(); + mDispatchY = eventY; + // 设置触摸事件在屏幕上的Y坐标为之前保存的值 + event.setLocation(event.getX(), mDispatchY); + // 设置分发标志为true,并把触摸事件分发给列表视图处理 + mDispatch = true; + return mNotesListView.dispatchTouchEvent(event); + } + } + break; + } + // 如果是移动事件,就执行以下操作 + case MotionEvent.ACTION_MOVE: { + // 如果分发标志为true,就执行以下操作 + if (mDispatch) { + // 更新触摸事件在屏幕上的Y坐标,并设置给触摸事件对象 + mDispatchY += (int) event.getY() - mOriginY; + event.setLocation(event.getX(), mDispatchY); + // 把触摸事件分发给列表视图处理,并返回true + return mNotesListView.dispatchTouchEvent(event); + } + break; + } + // 如果是其他类型的事件,就执行以下操作 + default: { + // 如果分发标志为true,就执行以下操作 + if (mDispatch) { + // 设置触摸事件在屏幕上的Y坐标为之前保存的值,并把分发标志设为false + event.setLocation(event.getX(), mDispatchY); + mDispatch = false; + // 把触摸事件分发给列表视图处理,并返回true + return mNotesListView.dispatchTouchEvent(event); + } + break; + } + } + // 如果没有分发触摸事件,就返回false + return false; + } + + }; + + // 这个方法是开始异步查询笔记列表的 + private void startAsyncNotesListQuery() { + // 根据当前文件夹的ID,设置查询条件 + 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() { + // 创建一个异步任务,传入空参数,返回一个AppWidgetAttribute的集合 + new AsyncTask>() { + // 在后台线程执行的方法,返回要更新的小部件的集合 + protected HashSet doInBackground(Void... unused) { + // 获取选中的小部件的集合 + HashSet widgets = mNotesListAdapter.getSelectedWidget(); + // 判断是否是同步模式 + if (!isSyncMode()) { + // 如果不是同步模式,直接删除选中的笔记 + if (DataUtils.batchDeleteNotes(mContentResolver, mNotesListAdapter + .getSelectedItemIds())) { + } else { + // 如果删除失败,打印错误日志 + Log.e(TAG, "Delete notes error, should not happens"); + } + } else { + // 如果是同步模式,将选中的笔记移动到回收站文件夹中 + 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) { + // 判断小部件的id和类型是否有效 + if (widget.widgetId != AppWidgetManager.INVALID_APPWIDGET_ID + && widget.widgetType != Notes.TYPE_WIDGET_INVALIDE) { + // 更新小部件的显示内容 + updateWidget(widget.widgetId, widget.widgetType); + } + } + } + // 结束操作模式 + mModeCallBack.finishActionMode(); + } + }.execute(); // 执行异步任务 + } + + // 这个方法是删除一个文件夹的,传入一个文件夹的ID + private void deleteFolder(long folderId) { + // 如果文件夹的ID是根文件夹的ID,就打印错误日志,并返回 + if (folderId == Notes.ID_ROOT_FOLDER) { + Log.e(TAG, "Wrong folder id, should not happen " + folderId); + return; + } + + // 创建一个哈希集合对象,用来存储要删除的文件夹的ID + HashSet ids = new HashSet(); + ids.add(folderId); + // 调用数据工具类的方法,获取该文件夹关联的小部件属性集合 + HashSet widgets = DataUtils.getFolderNoteWidget(mContentResolver, + folderId); + // 判断是否是同步模式 + if (!isSyncMode()) { + // 如果不是同步模式,就直接批量删除该文件夹 + DataUtils.batchDeleteNotes(mContentResolver, ids); + } else { + // 如果是同步模式,就把该文件夹批量移动到回收站文件夹中 + 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); + // 把笔记项数据对象的ID作为额外数据传给意图对象 + intent.putExtra(Intent.EXTRA_UID, data.getId()); + // 用该意图启动一个新的Activity,并指定请求码 + this.startActivityForResult(intent, REQUEST_CODE_OPEN_NODE); + } + + // 这个方法是打开一个文件夹的,传入一个笔记项数据对象 + private void openFolder(NoteItemData data) { + // 设置当前文件夹的ID为笔记项数据对象的ID,并开始异步查询笔记列表 + mCurrentFolderId = data.getId(); + startAsyncNotesListQuery(); + // 判断笔记项数据对象的ID是否是通话记录文件夹的ID,如果是,就设置当前的列表编辑状态为通话记录文件夹状态,并隐藏添加新笔记按钮 + if (data.getId() == Notes.ID_CALL_RECORD_FOLDER) { + mState = ListEditState.CALL_RECORD_FOLDER; + mAddNewNote.setVisibility(View.GONE); + } else { + // 否则,设置当前的列表编辑状态为子文件夹状态 + mState = ListEditState.SUB_FOLDER; + } + // 判断笔记项数据对象的ID是否是通话记录文件夹的ID,如果是,就设置标题栏的文本为通话记录文件夹的名称 + 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) { + // 根据被点击的视图的ID,执行相应的操作 + 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 + + } + }); + } + + @Override + // 这个方法是在用户按下返回键时调用的 + public void onBackPressed() { + // 根据当前的列表编辑状态,执行相应的操作 + switch (mState) { + // 如果是子文件夹状态,就把当前文件夹的ID设为根文件夹的ID,并把列表编辑状态设为笔记列表状态,然后开始异步查询笔记列表,并隐藏标题栏 + case SUB_FOLDER: + mCurrentFolderId = Notes.ID_ROOT_FOLDER; + mState = ListEditState.NOTE_LIST; + startAsyncNotesListQuery(); + mTitleBar.setVisibility(View.GONE); + break; + // 如果是通话记录文件夹状态,就把当前文件夹的ID设为根文件夹的ID,并把列表编辑状态设为笔记列表状态,然后开始异步查询笔记列表,并显示添加新笔记按钮,并隐藏标题栏 + 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; + } + } + + // 这个方法是更新小部件的,传入一个小部件的ID和类型 + 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; + } + + // 把小部件的ID作为额外数据传给意图对象 + 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()); + // 添加三个菜单项,分别是查看文件夹、删除文件夹和修改文件夹名称,并设置其ID和标题 + 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) { + // 如果列表视图对象不为空,就设置其创建上下文菜单的监听器为null + if (mNotesListView != null) { + mNotesListView.setOnCreateContextMenuListener(null); + } + // 调用父类的方法 + super.onContextMenuClosed(menu); + } + @Override + + // 这个方法是在选择上下文菜单中的某一项时调用的,传入一个菜单项对象 + public boolean onContextItemSelected(MenuItem item) { + // 如果当前的焦点笔记项数据对象为空,就打印错误日志,并返回false + if (mFocusNoteDataItem == null) { + Log.e(TAG, "The long click data item is null"); + return false; + } + // 根据菜单项的ID,执行相应的操作 + 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)); + // 如果用户点击确定,就调用删除文件夹的方法,传入焦点笔记项数据对象的ID + 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; + // 如果是修改文件夹名称菜单项,就调用显示创建或修改文件夹对话框的方法,传入false表示不是创建 + case MENU_FOLDER_CHANGE_NAME: + showCreateOrModifyFolderDialog(false); + break; + // 如果是其他菜单项,就什么都不做 + default: + break; + } + + // 返回true表示处理了该事件 + 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); + } + // 返回true表示准备好了选项菜单 + return true; + } + + @Override + // 这个方法是在选择选项菜单中的某一项时调用的,传入一个菜单项对象 + public boolean onOptionsItemSelected(MenuItem item) { + // 根据菜单项的ID,执行相应的操作 + switch (item.getItemId()) { + // 如果是新建文件夹菜单项,就调用显示创建或修改文件夹对话框的方法,传入true表示是创建 + 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 { + // 如果不是同步模式,就调用启动偏好设置Activity的方法 + startPreferenceActivity(); + } + break; + } + // 如果是设置菜单项,就调用启动偏好设置Activity的方法 + case R.id.menu_setting: { + startPreferenceActivity(); + break; + } + // 如果是新建笔记菜单项,就调用创建新笔记的方法 + case R.id.menu_new_note: { + createNewNote(); + break; + } + // 如果是搜索菜单项,就调用启动搜索请求的方法 + case R.id.menu_search: + onSearchRequested(); + break; + // 如果是其他菜单项,就什么都不做 + default: + break; + } + // 返回true表示处理了该事件 + return true; + } + + @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) { + // 如果结果是SD卡未挂载,就创建一个警告对话框 + AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); + // 设置对话框的标题为导出失败 + builder.setTitle(NotesListActivity.this + .getString(R.string.failed_sdcard_export)); + // 设置对话框的内容为SD卡未挂载的错误信息 + 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(); + } + + private boolean isSyncMode() { + return NotesPreferenceActivity.getSyncAccountName(this).trim().length() > 0; + } + + private void startPreferenceActivity() { + Activity from = getParent() != null ? getParent() : this; + Intent intent = new Intent(from, NotesPreferenceActivity.class); + from.startActivityIfNeeded(intent, -1); + } + + // 这个内部类实现了列表项点击监听器的接口,用来处理列表视图中的点击事件 + private class OnListItemClickListener implements OnItemClickListener { + + // 这个方法是在点击列表视图中的某一项时调用的,传入一个父视图对象、一个被点击的视图对象、一个位置和一个ID + 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() { + // 设置查询条件,筛选出类型为文件夹,并且父ID不是回收站文件夹,并且ID不是当前文件夹的笔记项 + String selection = NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>? AND " + NoteColumns.ID + "<>?"; + // 如果当前的列表编辑状态是笔记列表状态,就保持原来的查询条件,否则就加上根文件夹的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"); + } + + // 这个方法是实现列表项长按监听器的接口,用来处理列表视图中的长按事件 + public boolean onItemLongClick(AdapterView parent, View view, int position, long id) { + // 如果被长按的视图对象是一个笔记列表项对象,就执行以下操作 + if (view instanceof NotesListItem) { + // 获取笔记列表项对象中的笔记项数据对象,并赋值给当前的焦点笔记项数据对象 + mFocusNoteDataItem = ((NotesListItem) view).getItemData(); + // 判断焦点笔记项数据对象的类型是否是笔记类型,并且列表适配器是否不处于选择模式 + if (mFocusNoteDataItem.getType() == Notes.TYPE_NOTE && !mNotesListAdapter.isInChoiceMode()) { + // 如果是,就调用列表视图对象的方法,启动操作模式,并传入操作模式回调对象 + if (mNotesListView.startActionMode(mModeCallBack) != null) { + // 如果启动成功,就调用操作模式回调对象的方法,改变被长按位置的选中状态,并执行触觉反馈 + mModeCallBack.onItemCheckedStateChanged(null, position, id, true); + mNotesListView.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); + } else { + // 如果启动失败,就打印错误日志 + Log.e(TAG, "startActionMode fails"); + } + } else if (mFocusNoteDataItem.getType() == Notes.TYPE_FOLDER) { + // 如果焦点笔记项数据对象的类型是文件夹类型,就设置列表视图对象的创建上下文菜单的监听器为文件夹创建上下文菜单的监听器 + mNotesListView.setOnCreateContextMenuListener(mFolderOnCreateContextMenuListener); + } + } + // 返回false表示没有处理该事件 + return false; + } +} diff --git a/doc/精读报告/widget/NoteWidgetProvider.doc b/doc/精读报告/widget/NoteWidgetProvider.doc new file mode 100644 index 0000000..364842f --- /dev/null +++ b/doc/精读报告/widget/NoteWidgetProvider.doc @@ -0,0 +1,169 @@ +/* + * 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 + }; + + //PROJECTION中对应列的下标 + public static final int COLUMN_ID = 0; + public static final int COLUMN_BG_COLOR_ID = 1; + public static final int COLUMN_SNIPPET = 2; + + //Log输出的标签 + private static final String TAG = "NoteWidgetProvider"; + + /* + * 重写onDeleted()方法,实现删除 Widget 时清除相应 Widget 对应的便签数据库中的记录 + * value:用于更新的ContentValues,将 Widget ID 设为无效值 + * appWidgetIds:被删除的所有 Widget 的 ID 数组 + */ + @Override +// 定义一个方法,用于在widget被删除时更新数据库中的widget_id字段 + public void onDeleted(Context context, int[] appWidgetIds) { + // 创建一个ContentValues对象,用于存放要更新的字段和值 + ContentValues values = new ContentValues(); + // 把widget_id设置为无效的值 + values.put(NoteColumns.WIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); + //遍历所有被删除的widget的id + for (int i = 0; i < appWidgetIds.length; i++) { + // 根据widget_id更新数据库中对应的笔记记录 + context.getContentResolver().update(Notes.CONTENT_NOTE_URI, + values, + NoteColumns.WIDGET_ID + "=?", + new String[] { String.valueOf(appWidgetIds[i])}); + } + } + +// 定义一个方法,用于根据widget_id查询数据库中的笔记信息 + private Cursor getNoteWidgetInfo(Context context, int widgetId) { + // 使用ContentResolver查询笔记表,返回一个Cursor对象 + 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); + } + +// 定义一个方法,用于更新widget的视图 + protected void update(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { + // 调用另一个重载的update方法,传入false表示不是访客模式 + 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) { + // 获取 Widget 的默认背景 ID + int bgId = ResourceParser.getDefaultBgId(context); + // 默认便签摘要为空字符串 + String snippet = ""; + // 创建用于启动编辑页面的 Intent,并添加必要的参数 + 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()); + + // 从数据库中查询指定 Widget ID 对应的便签信息 + 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; + } + // 设置 Widget 中需要显示的便签摘要、背景 ID、绑定的便签 ID 和点击跳转功能 + 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); + } + + // 关闭查询结果的 Cursor 对象 + if (c != null) { + c.close(); + } + + // 创建 RemoteViews 对象,并为其设置相应布局及需要显示的参数 + 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,初始化为null + PendingIntent pendingIntent = null; +// 如果privacyMode为真,表示用户处于访客模式 + if (privacyMode) { + // 设置widget_text的文本为“访客模式” + rv.setTextViewText(R.id.widget_text, + context.getString(R.string.widget_under_visit_mode)); + // 创建一个PendingIntent,用于启动NotesListActivity + pendingIntent = PendingIntent.getActivity(context, appWidgetIds[i], new Intent( + context, NotesListActivity.class), PendingIntent.FLAG_UPDATE_CURRENT); + } else { + // 否则,设置widget_text的文本为snippet,即笔记的摘要 + rv.setTextViewText(R.id.widget_text, snippet); + // 创建一个PendingIntent,用于启动intent指定的Activity + pendingIntent = PendingIntent.getActivity(context, appWidgetIds[i], intent, + PendingIntent.FLAG_UPDATE_CURRENT); + } + +// 设置widget_text的点击事件为pendingIntent + rv.setOnClickPendingIntent(R.id.widget_text, pendingIntent); +// 更新widget的视图 + appWidgetManager.updateAppWidget(appWidgetIds[i], rv); + } + } + } + +// 定义一个抽象方法,用于根据bgId返回背景资源的id + protected abstract int getBgResourceId(int bgId); + +// 定义一个抽象方法,用于返回布局资源的id + protected abstract int getLayoutId(); + +// 定义一个抽象方法,用于返回widget的类型 + protected abstract int getWidgetType(); +} diff --git a/doc/精读报告/widget/NoteWidgetProvider_2x.doc b/doc/精读报告/widget/NoteWidgetProvider_2x.doc new file mode 100644 index 0000000..9933e13 --- /dev/null +++ b/doc/精读报告/widget/NoteWidgetProvider_2x.doc @@ -0,0 +1,48 @@ +/* + * 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; //声明package + +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 {//继承NoteWidgetProvider类 + + @Override + public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { + super.update(context, appWidgetManager, appWidgetIds); //调用NoteWidgetProvider的update方法 + } + + @Override + protected int getLayoutId() { //重写NoteWidgetProvider中的getLayoutId方法 + return R.layout.widget_2x; //返回 widget_2x 布局文件的ID + } + + @Override + protected int getBgResourceId(int bgId) { //重写NoteWidgetProvider中的getBgResourceId方法,接受传入的bgId参数 + return ResourceParser.WidgetBgResources.getWidget2xBgResource(bgId); //调用ResourceParser类中的getWidget2xBgResource(bgId)方法,返回该bgId对应的Widget2xBg资源ID + } + + @Override + protected int getWidgetType() { //重写NoteWidgetProvider中的getWidgetType方法 + return Notes.TYPE_WIDGET_2X; //返回Note中的TYPE_WIDGET_2X常量值 + } +} + diff --git a/doc/精读报告/widget/NoteWidgetProvider_4x.doc b/doc/精读报告/widget/NoteWidgetProvider_4x.doc new file mode 100644 index 0000000..17222a0 --- /dev/null +++ b/doc/精读报告/widget/NoteWidgetProvider_4x.doc @@ -0,0 +1,58 @@ +/* + * 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) { + // 调用父类中的 update 方法,进行具体的 Widget 内容更新操作 + super.update(context, appWidgetManager, appWidgetIds); + } + + + protected int getLayoutId() { + return R.layout.widget_4x; + } + + /** + * 根据传入的背景颜色 ID 获取对应的背景资源 ID + * @param bgId 背景颜色 ID + * @return 对应的背景资源 ID + */ + @Override + protected int getBgResourceId(int bgId) { + return ResourceParser.WidgetBgResources.getWidget4xBgResource(bgId); + } + + /** + * 获取该 Widget 对应的类型常量,用于在程序中进行判断和处理 + * @return 4x4 Widget 对应的类型常量 + */ + @Override + protected int getWidgetType() { + return Notes.TYPE_WIDGET_4X; + } +} From 69ef45c5eae48ba7bf503c6eb1cbc783a9fc0762 Mon Sep 17 00:00:00 2001 From: pj36foInf <445038096@qq.com> Date: Thu, 20 Apr 2023 21:47:13 +0800 Subject: [PATCH 4/9] 4/20 --- NUNG95)KSCVJKJJAANMGS(8.png | Bin 0 -> 23775 bytes W3~]OT3)~ZILZ1W`2_1M`R4.png | Bin 0 -> 23838 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 NUNG95)KSCVJKJJAANMGS(8.png create mode 100644 W3~]OT3)~ZILZ1W`2_1M`R4.png diff --git a/NUNG95)KSCVJKJJAANMGS(8.png b/NUNG95)KSCVJKJJAANMGS(8.png new file mode 100644 index 0000000000000000000000000000000000000000..78adfc7937dad1f3c6a5844b88043f1aba744031 GIT binary patch literal 23775 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 literal 0 HcmV?d00001 From 56f1a6f2a619e8621c99d4e022fbac898d71c884 Mon Sep 17 00:00:00 2001 From: Conquer_CN <2832035049@qq.com> Date: Thu, 27 Apr 2023 23:16:04 +0800 Subject: [PATCH 5/9] =?UTF-8?q?4/27=20=E7=94=A8=E6=88=B7=E7=95=8C=E9=9D=A2?= =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/字符统计/字符.png | Bin 0 -> 173089 bytes doc/实时显示天气/天气显示.png | Bin 0 -> 142167 bytes doc/实时显示天气/菜单栏.png | Bin 0 -> 78920 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/字符统计/字符.png create mode 100644 doc/实时显示天气/天气显示.png create mode 100644 doc/实时显示天气/菜单栏.png diff --git a/doc/字符统计/字符.png b/doc/字符统计/字符.png new file mode 100644 index 0000000000000000000000000000000000000000..3afcb663dd193ffd174e49a56a8f9ae37f16fdf2 GIT binary patch literal 173089 zcmeFYg;QNY^EQZI9D=(fxCVE3C%8j`2X`(m3GVLh?tXE1cXuxC4x4ws@3-~6`yXu8 zo~o%cH8VZa)u+!)*VE60Dl1B%AQB)#KtQ0#NQzvKKFrsPI>d&szbpS=6eV_LOyJwzJKZq)4u2@Qvg_x*oW7>pkBss3MW>%89s z`v1>C$au;>VM6~8sej@*z3>=-|7V*2RD}P2p+NngdH+`r;x}oc|Gm)v9*Qj)!~NgO z(M6Cs{I^bOcp|(1r6h96|F6)08RY+?7P^;G=$0fOe9EW#`Cnh$hk^W0%}ztJbIdVx z-xr$ycA^PLKnR{(CGPjlI*~lJUv%GzAou>u7xQs z9F7N+@yM8vu6a+=EpzbepWTUwrmSpQS!xegEtANzM3K{rOVOjDpp-7cJx? zCqKdRQ&9PB{YX%1sY?I#M;yn0{R@`_+gjm);&2Ga&zOPzx@J^AAfN~I+g)cO3Audw zu~1sDAr5+dv!{+4nwm6xhkyl*&jb@ohbQq{&s~vBx;PnyuhY9raI>zQ5W#o8qXI6o z^H}hmrlwrLb(SF^bojKKExVwkd%qc5oww^WNGhPI>0ejt4Uuc`?ht_~V`C*nr~EU% z`L;hR39>OZOCWo~Tt6X8@$CfU{R(`vJx~%_9x2+`hB9pkNRZj?cp&RBa39l=&Shs? zH`z)+U*3RWCOa3AFcsc~mp4l)SEOvfyzhncYeX4?(SmI72y(RwNWyAxA*C0bf@HwY zd|%~gm=%8>EO(vkR+`Q9VjOo6z=ff`f)PUecA8*3%bfqW?u_-aL(jQ>AWl&7)p4YB zXM9L8Hy-xjZWMm28H&H0_k!v!c{+Z7>Ctovz+E|1`HM77uqO9IZ0;=116I19CjMh| zd@CgitBnc~an@4SyFBWliyBEQ83vl0Ap2wrx%t(fg7N;zk3rikkY$@ zw&e+>_3S$md-}wzq2qD56S>bQxJaSF@H;bOo^5 zX~So;(k5MRdHZ#W&PM0Jxt>ZI@9F|}=CS!LtG`qcB;*xY`Z#6_fo{orw<<_w(aD;nLhuqt%;RqgPjw zVC1*ves~t9MzXk$jc@ds5!VkyQ4l^I+`5E`=PrT$V4_C`ABj3FWJV?>8vrtfv18`_ zb6wpc0t02|-t=#q*guhLHlDWM+Jt$O_l@j*MZBr@EgWBWHzp;Xk8r#?aO$bnkR%ME z5q_?3!adoiqQIRPxqlozkFrFrwB=or^ zG!l!{RRohEc<7+5gvWtLNM@DxdEG(YNtol$kH6^+J0q{2We3w=PTnNTq(a#06!?~M zm~=WRQW6oLWpP@Md_4DFA|>i}rxTJno@7r%QE}X@bB=?lY7jCVOA3x4cyM$&_9AUM zpX|FEj0$hS7-d!bb%la7vB5H{JXTDBZGGn(AIDT1>;^E7=g^cbhV|kVGLNEeG z{w!VvzIa%u?Sj7a+v*@vJbD&vj-plh0!9;he`_4<>>& z26ztUXghCOvv|DNXz(6#U2U>i+kMy2(brdavf9`D9dG3`{KC6d;N5$(Z`F1v-$EnQq|db%ho3Fk7Ieh zSA6ow*Sn_-<9HzMC9B|XYb>=azB?rz*;+}Pv?ly75!>;YyO;K9kL0MthY@M1 zNSkLTvSD=7{hfiwr0Im2LR;yUstfvNq4qT;>Z!*|^HS11C>4q#-c~?cx2UUlmci=O z^!__%N#L*Fe#o!6OX-9%ms|HQ;RQXH7{ZgnsGK-zbOIpG<9j8BzPZpF=DVxxVu_a_ z4_7zsZ2iG@Q|=|`Qp1~UvpEq`RM~Ah`liA&-^!wgUtaXIG3)Ja%;&41aMTS?Qh}FY zW9LVZ+gzvj>+vMtML}k}>+Hc;venfwkbiseuj#{S5(0)mgz)tuv@NCvRIy@4UcOY+ zEdTgPSX6@}+Vx!Ks7cxP%d+E)w__Co+ylz|bV2YWSB^<)xBAiD#G)ax00j(E=P1RCJEv zjj7m08=pW;b6ceJEW#Yz%tyw0FyGcjaO7lgCXyoJIW}%R>@=@lEspMed?_pZOpMuS z0HPNNUBtio&JNNU6}Nz1W*s8La${f{Q#XgM1X2xK_D}B)Ea2bLl-p4Zk2v~ySCIP2 z=1VMmX`Gx@q*Izr7Cm9(4;N56k3WskxEp69j+1)QpLZ$EhmlruAv;QJd%V+Q2$MQi zJ6okrK&3U<0G;)wnfg;U1k%@EVBI_^wAT_UeZ832F>Gp?>xT?!wsf*TiH>Ov`w#(;mbyd`=qo*B%YKp}g`08XaGqM6qu+NI zR+Ob^Z^q*`%YS_1J9LX!(B|qbwil^TlCG7ai>?K!YtpeK;ugFvQySVS=T#+rhjd#rlT5~fy!x8+qBAz0w|~ZR zMbGGzF-7mwFpwq4m!r(1MbGFh1^#(T=J7QS0n1puJgPCuH&*YN4$$i~PrqC|)~Dmj zmQM9R#lC2ej&_S6_-C7e^!Ul3xppk9hx12lCWhasa7vO;pFbuI0QRQ=9N-tix@r4V zWZi)z-03qPvk<8BX@5a?gfxAuTU4GcWLLMgdVo76N)DHKrc||&2#CZ zAtEtw0QCAW8>P=@F*HfcQ?uT{1M0f$d_A7d6|)SA^X_bBBjeh(L$xg>a~LQ2uqTg1 zuGG&*(qx_J4>?9i&b-g?o&bS%4`~N%Pl6jfw5uL#fILeX~;<>{* z_X~ACK7}+y+LPU3G||cfze~8E)<#eFa1n!&xvaO^7;VZ9yB)@oi1=++GXe(`I#xV# zEwolB-YB(9{_?Vg4Mq;D;=^WyV#*f^IyFS|*qF037vBqd;s3QEOPUt*)f6*e0~kl7 zJoKaN(YOA%w=ma?vrHY@)k@0g+IKKk#g8o|>yQh@{)wIM}gBs19233_X{||VXp3fTZM`l-> z8z6}=4^!_1Y6h}+@`i7@qY!WJIPRgeNht2-3;0*S&pnnOE^Qpj%E5e>_;lJwE4iXa zbAe6SIOKKAJrr;hmS&Vjo;uX}a49#?mlR1oX+U=O!f}mid9)b$iHtJoBcJuN;5a{6 z7v1v`aQ~urG@dnl0G+H2x{A!B(C^mK;)Y(BC+x5fe}|+t;+`C+oj7eF%X;l;K|@WW zVN6Rl{O)fjfy65%H(z-X&BaZrX383}DoZ<(I*~k;JnLI1?x6*+J#Ap`ll@BJ;!Cc? zqp{j4yL2~7+A7(V@_qA$XA^ir3xXO3MdOqZh9F5(MI^l~0h^*E>`; zy^8}`L(uNzYTD!%sNi$T6!yMpk!YIk$X8AdI}!)*$G&Lle z)JiT@-3s=fhWlNO_71ftz}+!3L4oL#nJBZPp$DC-#Kt?dZvNu1cC^)9ZG;Im*R|=; z_p(hBsV#2TzfFwAsSgft16}a@#;QB?0M~Pzc>}&@V;erN=Xd=|0wPKsm!WswR;gsm zpzuf43t33YSAXNh>tJY*_JHm#VnkNW?Ut&NK%!YRT!&K(_OOor2k@+y#p7e*=%kPt zBtGT!itq7$zZ5?!-1)dV#B7B@?T?Kx^HXaODl)v z44mvB;qH??l>EW|EDRtF8O2b`Y^9Ha;bj$sM;8koq>{v3e>$K=$x@!^A{2l&4$WU$ zkeQss<-MK=G2x9-$xPm~&e$UT6J!`s$jf#^oKdZXxztf-E|pQUm?l+eXj(b$Tp~xY zfX<(b=ircLC5$Q;O9795$XVZ{Oqwfk_3L(i`)`=T09b_tq0*7wR9Y7&ZI8&@!G%+M zc0Lux_{3lC2N5n0KKtwI0x)!#t1OGYDe+1gEXcuDqGBr5KNHHu1JxAAJA%-4OIa(3 zUF{j9b|sHKnfKJE7J)n}#DUkm40HHpP1JBD1*)UEx5nrNzdw1qF+MuU z5c~cZg53ECN+LqVVu=}EFWu#ELWxV$;4l{d)&-%62b?fB|ne#{Yg|BTC# zAIy`|B@AOru!t^jS&tzaCktHXWf4JMevs9)gr57;DR2%!2bMfBTrE#T*Bgl4C$Ww> zWh{=Mu%#tDu!(2%Ui&%TJIIP?>n9_vvW1A;f=P_L1sZ{2{CP->qr65mVD6Mw*k(wGjt_ctT2A;0I(kH@aA z8MLR@q%;|#D=suI_i@dx7xkB$D* z=Tv1h69{ipXUa1!_$TlqhID@tr!^-2yJTvKB_iqXOu2NaRP4$qIi7Xs0jnaLAEnsl zRi)BBCKrU$M#H@31?O1v&n`0r(?~YDS*3IG>Sq1^u|9LiCRj%;yl61*ptog?4aNkLC2Y+jJ-5MT36siW=|jA{2GB(Na*P;o4H4g%1EK5Fioo(cv^{Cu z?S(>%Xu)62IoE$LD|(Mo-j#jA}Bpyb-8xlYBhVI$J2- z7aZ?x8{P(0n#An=2P_;oj0RSHhOZ-l4bV%)#$HK!?+)M_3s`J6DE7A$UFlUt6n*XX z?WjBL_Gfh7et=$;94}7vf}&T#v!5Ok+)Gt0J|2$!b~j2Nd@{jhp!8uXNbVxnN+)}# zBwruBsV}KepzIQG63XUJnJ1`d)T=pG2GE9;6{m_DRv-9-3(2)Yqsa zXlpC-M!N)kr%!BM3)IT^>O->dgEM=EF9b;2uSbN>QZm3Z!4_FdH>>3^9>2%IWhQnz zZ;oCOg9oF${idX@xVy|Agc2$E1*^0xkWKxgS;ZnSDr9Q_&+<8rIgCqT;AhhK_TAFa zLFT-+yH#cmyuWmVSMIijh56gBc#TX2mKbY4a}jfjH(Gb_S;M`=$2RMp87IbClhGGy zEg~z2&GF%ey=0XD6ev;*2#7=%jW5I1aQdn}A8jRdzxX$dR>{?d#51(cn86kEya+aU zWZc1euVyeS)_tfB7BohN;Z%%al5ESL?_SWtRt+7O6uu9AFuU}3 zs;oMqRKY4!uS^!{WSRiB#W|MoeTSJVW8D{i3#^R@KjJ`Iz_I@3tRXhh?VA1a?Suec z>bt!vW{I~2pwe&sc(nZMZ-AIA3bMC~vxZoWosxx>tf~jw(NWGGIbI}2!Jbj+xnZM_ zNI!K`LV)$k^a_iyQ<+!L3j-*rM_8Mc;4fM&Q+m;{?jZQr4+r(A@87}uQ_$9&SEZL= zh=5`D5?&N&Ccbu#dcdPFTTUe=QCa?gBptKWHkAcg%bcqU;WrLhf6`fmrEDYNV9rV( zf>(93CUZ7ot*?!+cvy#Ls{qHBR0M+322~W^vB!o1i=?TrlKQx-R=2H>28odBjh35! z%?--a4#zT`5_ARt7lM3bOmP23R_fb3TK0Dd-;?1z0H$^&|c3&DBHs8SuPWS98 zVHiZc)HkZEAFYW8Qxdn@(QjH35la9Q%9f9m%S^7#{$UQog2Ri9%TdQoa=Y=b+)h+OX{ zcfe>~gK`?0cHpK;9NYI5+7btl>AUv*K;71OzdZBDIESQ8>76cN&F^RKQ-(6ep>k#B zpY^VOX;VzrY9vSe1SS?P=81ByS(>w8w|*M-Q8pX(t_Ie9RE=`%@;)McVfFCTKukmI z+{s1%0Eh?J7~F(EdFIj!kSe(9H1bMAe&T@980sL^M)^h=(Wa&h6bu(y0dNGtew{7U zJ>^Z1AOxxkUMt;z=7!F>hJ;#c4j7j}Yk$MF7|{i%X1k|~9CE#*A$Pp)XLlHIe4MXT zTCU!>3$sfM&bp+i*4tYnu+8W$Wg3(IeZVZys+Xd>+_eASFUO0rkgzW;{vqs0|+h&q(Dt& z!XBH#59SWpmh)!|91NfT$r&YA?&aa+w@`|9AbP_~065T6TA2=%M3-_ceE;2EEI{wQ zhF8Zi0x81gNUw<3BgBOACSMGKuC{@|8`EY<>Kxn=SwcqXT2``0W=&`KG-h$;Mv5FH z6FT(dlqf9in3Cm#H;h|DrT%s3in3~!u#vp(df=njQqKmM5O&ka2D_M-B)c_Fx@(NEH`CsXLba9`$$&htm4Roa902%F8?D2FpY8$oaU z$EgYjCe3I?1<9mp@{h!bdPlV6VX|97<|J1pMz1Aw5jZk-gAv?rO+ZuDKKK;`CcrG>aXC4cL-atEEEYZeM(Tn?F*r?3 z#lb!|=1qqoVp{us$};}&r(GoGX{RZE1@ooJX)3|%gu7k0!=V$^;*;^8*_ci3i%NCkeR?Y*e%s*LngM zEQxqA;ahfPOo)FYdnMF)-f3m5a;JVWrrvDIHBBNnSH-@u--;BCqYCEHt*M&oEE{?L ztP$r8i3yzKJdV31F0z=`ZYpiEe9aOR3)cVb&vvo=kqe~aNq3!9Tr2GY6dQM+3@kuL ziNYg$+}CoOO3J@59maP|oT258{}P5_}4Ej?C+nZ#wm}P%dzDTWpW!$=c8Y?mF*K@f;P}@@DfCe_jYUEslsXJt(fg z$5mJ9F+bG-)GzYMWeUHeR|m_61sN2I*zbWuTW2hjq(BSbTV@OG`p$ZkfXc&L`r*$n zFJyD9<@{-Vf|CRke5(Z@=Td<$JXzscoNO_T74s#QF&x?CU+Ah;w_DsN0V@@72vlO) zzYPOMv92l;RFAj{{g|_ry99`T4R<}Wd!T;TG~*FY2z0oq*Pa~1#0^(k1UMe749MZ0 zl-ha48}N+l7BDS&;uTJ4oc;`5o5Lwp@_m`RBkZ~+JXw#puabC`0US*_T}< zL``Fv&Gofu!W>-&ckzpVO2kNJj~*w}c;b$kW}wrXP&s30(XZfXJJ9uDDR9By{j#F= z1XlELO#YHEM*)fz_btJNrlGzi1>`@gJ0gOp)cjy(gs%Pw>xz%XZqGJ7 zC5vlq#vn>EKpzzIU&3l+>FQe^!-PzNz~V&lC~JSS%1Pc{6_HsEr17ayPHQP@Y>1Q* zD;aER1i6p|c;8+PHvUe2t)a4raM)wdcUp9!SQ?vqjdU-%TJS3!wUAmg%4vKY=UY5c zg+j&%R(mKqYSwBZ?Qgs@&D<<-Ky|!L&rn6}NhE>_fc|@<>)dfMVEr0I7SE)aEEw!@ zDuXK?z2HZFuwg;fU|rby{(fVDQ+Ru9C!kw=9X>pNr|i=VK2}W=q$+n()Af z;6hD#aQ-u1lg^vaxuE4Q9Ap@Tv&1yWJ~S@H=gIgP)YLJGSz#}k0Vf%Fxa5)R&v1iL zaF8(rxfi^ynSx*{91Ull$Qg-j#VcT`<1pH7Vu1Yxyj_*6f1GOhpj`e7-ymD_H5oS2 zJe0ob*~QpN>?ESJBbDhP37k7GC!7j3xZov#53utxlR*67Om45jooZ%!<$91?}FK8Od0JbX<=EhdIK+ex9c{_53FBsmR zuUkq_LhtpY`Pnbsua=+sZZm$(fN#=oEYKI|=2IDkxc?C8EZ++tuj@XZ!1IyPY%9{y ztfzKdvJ$zz0&arfQ&zA_ceDAWVB7h_n(C1ZZV6LBd$=ha%hbih{YP&d@|{O2{yxg! z((Flr=CSOH9!#ia)nQHz1Fpj9$k;(gh45_1>|$j@CU#GryatB*R305ptL_YwX^bfX zGJVbA2F-93Nwq(cxI#{JX(!XFU|PgHfr)b!jM6*tS}@bp?8BeS9`7N)0T{oOBJ$2? z?{_R1FDT0;aeBN2%;UhGQ_qxD=4^C=Jbe)Nt2FXEUYvz|ZUlCIvLpo+H z(5eH|lYq(`xmU9oo5GvT51vZZ;DNpUm)o1P$z({3QtrS{A3!19d``4Hs=%0Bgm(pU z$bsR^0W9Vl-0K&_2hnUzOpdDx{*uJJHt|OOp%vk=Amso$!=F3BS>oYd@xm+`L`hZf zt~Ii8>^a{G1AFJIN2%tg+}Wpvmo?p6pVF?-!21;1=D1@wv)TgFRLr^u!pd)=S*Giq z-fLf_^r>b-$gbx2G;W3L+MD(oF2yUd0o#e4652_ zqLqGl??rN{Za-PyLi=0K5rlr`CWH* z8xKXz&<7jl3cd9S$p_C|CA8^jlKXmrj}Hf^nQ0GF`_O!j`<$=e{yOKNOhGwP&k6Wh z-QRkEuB9Jr!;ih+BB3zC&r9Jf6d4LIQpU_LHYdy{=?r%B?6ix(l&E=@$cgNP`YCU^))Y` znJ`6uIu{iV@1w-!&cA3VpN%n-HPX1CBVANy>=dt*$}vMM zxM8v3AoW?mzg;(4N6C}!XA=k#_#AB;&#` z`lxa7WsZ3hx!#a(YbLa2)~$O~ytW5D#A-_eo2-SVS<^gvYCdldwAW^el7&?@YEr}& zcw1D{N*?+b6*4Wnn0%i+zmeS~{wf7)kxoms0GgJ&%YyZDjKUNz)lxmuPZlUp@hxY{ zmcH9Ci+4-i808`yus+NU1OL)d$Dn4;!;FZgFB?qX{^*n3;!Kng>5?rxhZLEi7<&4GSM+?qsFz=G z2bHX9IINqLH*AI9G4e{RDF@M#%6T2JW37savyy$_+33a)z_S_Nl4|}HH=9VUPHBWK z>J9jr3$VEC1UbLl(R!Q=;GXpMavi>%)!)!@o`fs;oYKC;SNqz;exTdvuZTBq0R1jn zZYLYi;;0#YX8rg4@3)gS z;VdczpAX#Mk7Rr=(v5(Bn^sGW@rfK^MY*ju zbzpiJ39MgIe7LFLEE1BX&42+Ca%=X!;*%c5(J?Xw1q4<7J) z6z8Be90+UO1Uo_j{c~OoPrtEVM}xJE_8l|el!@-07pIM{lh<&sgKxRnCKU>7;E8DyW zp>Um;4!SE-!y~R&zW1f zLZ7!nN=w>Az;|h$eM)+z3m9r#$o;*`cUq6D++dZi{m3qU;wi)|a~M16m|;)ku})D` zcp&EYDGUQWn4n}_k)4B^k*Vsf;aB9=44bv4qE`zNpQjz?^{YczTc0eYW}Ql_VFy}T zXu3NC!m*=$_$%?6Wv+^nykGATB~L^OV@CNWNqbM}vHEssj@nlhGefor2rdzDFq?Mf zlE$#-z=&z!6LD`-xFjIWw`0BplYLiPTl4$16myQ#eIMX5So!}KG>qL#ruf!F7$bVcFS3;kp4SocuXH{ z6R4?E=5bXOc*p$l+$CL{&vY=;j>m~Xu{k@Y;2Y;}e%<-GYIWCG?Hk$ocEDWhiN>>x zxxFGng5P?y`Fece`E;2@aYiI;(CWpb&|bap4_dKIihabnamv!)PwkaUW-5x$e{xGJ zQhLSH#L097Z1`*|^U7*nG_2ISUFJD$XfrcaQYZAPkizlpW`1nM)Skmeb3+|*B=^vU zb$C^CgX<}Q)ZKK>r1sWc7v}&M#A5r!OJbcQY}Ii$V>|v#fliQ($0-d*)N3cEJ2o=z zs1Room`9P2Mm(ZkH_zmn0ZGMEJY01;oi?G5h*L7BxD+>~Lg{o1xk5@#MgsI<0ub2T z5eauO%J1osyk&m%W^+m7-99|ueHFRE3X@*7{#H)r6Z7EN4qUPdk37sq?DVvmMOrOd zqp>YWH}Aj)ilNQ2${3@J=YesFGDcJV41mAU22S8|K8WFxYvTDXvdmmGQfh1bg#PRXRAf+3)%QrE& z{2#NhdYhs?0E9OrROwTgXNXPROp<87h={*l(v*XX!Icvbg z_y>({dc5_~wFAM@zbY!SrA3MYg5qln$@2qV6or#D+zp;*5jqYMdckT*arQChbV1V} zKYu?#iyV;0hAo)zHK0aEeJJT+2Oyv{3<0;BvZI3R>rQGNf96P?V_UAywv4 z=NSnh65fi^onJePPLZ+M4;tQS_nZW#4$>V&pR3V#C)Cw^)9&=DdNi<(_ zYrWUf7837MH@S4HBg0gb%DI$%=!oBhU_yPuk>Eig)VCD+n!V`zJZie?VQHoF{xC=Smb%Ypx8=b7T{r96aNOXv8SWJ!{}wOw z7HiVHA?ne88}~ssF)EfzmuYL4g8}McYwnUqNUWTkT`H%IzoLE5Q~=$IhsWkR49yM0 zhIv9rgU#=RuD1h1aOs8RpYCrkPDl>CwjG`M%8`n|95%+kLc9oxmhwZH$=`No6FYcr zRR8K(Bno_W#7G5MXkMtqy&xDK-tTu=x1?OkZ+9^D$ebL`n*DY2%2v}3ONdyK2dhWu zR8|sndF9sJaKd`IkJvxkB;iinv!03H=1ug;M>_v9-yr;k5OiiP12R6&He-IT?_ts9T{xZ$S;sVO}Hmx@&PSuE;lNlrgn<`2SJq~AmtyYo8qF&V`X?M&ivNKuNu}jJT+BT-4 zxT@j`7>8fKo+Xxwd~h`tAEv`9j6GEDJ-ymvG7rGt+rT^ojb0={zHh}1HFySxrF}Cg zrA!dW#pG3CxRW-NU6S(a9#|!TbPv(A6c;%#v(6kZ4)`8zw=GOn(i_E39xdLKy<@pv z_Wj9D#gdl*qO=)dgS%ua?E#cCPn-mz(Am&_r*xSUR?k)v5!~Q-MN0-!uJ;Bri9vee` z@@%uspJ%xafbLy(ionzmm7@05Y%Nnds$DoyXK~v&FRK{{t(_#q*HxztjVwpFz^71) z&bQ+LeGvt)u%of$(;8+D7CCN+yRVkzs{3GxX%h?LZKzdqrMW#%QjcNVS@YU{Yf-vV z`;h6mmfyf}*px;AaSF8=&Pr~pKmVK|Kt3$-gZ}9htkHlq2!<8&48Sb2^~iMkMrbhH z^|bkdr^eF28anOBAWSPD)eXQbaE299F4%#?-efm0bVNL)+>oarUn+%zgd_yK1YE&d z+JF$8!GASX!bB{yJd)SUMLk5jo+zUf(26e&=1^IS&am_R$FUHOyL8&t3^dkiue@6a zumRYXx?7U;x}bHLt-Jar;8o#aBrDreyzY6mDPFGtHMrRgTREMGPse4Fc%-)H*H$YP zdk>A7#a-22DPh7DFeWpgYmFdg$Vv3pzY~l9mjU=SN1vE#kYRx*vww0XkXQw`kZ&zRdP+Bxl~+W=LoyeJtKmwFznfE;cb-<*Y#x5a1I`8pN^aJt zOipO&=i+wW5_>#*`YLG7vMwfiBn=)irl0(WnU3~x2RKgleNH|RBmIyby|oRhrM@15 z$pXIMzpO5GN-}poef>{H+p z2r991Bad(Gb7MDcJE2ZZl$kCPl&}~rJN{@5RVY2Dw8!_e&NOFuG{`3Gy0u;dhr`5* z0!!n9wf>F11iW|^J7`qiR7e7FE#PJ?Ytyv`CkE=AG6bs>;a$q(r{>$~TJJJ34s1A> z+e%q^mR(58(`hTGHc#}qc%J=7VDXE1arD!c1D!rTc~Yt~7WO^7UzNODrni%UTK_xe zi6Lo%MIr_#n^6IV8If`_ms=_ArZc@Qk}bW~)<52b>=?WLdx8x?sz_ai$_PT%S&3I_ z*^%1ogJs%c<=8X++9k2R{C?1EfvDX3cFUj3VYz+(%b|JKdIMK?JE)kuamwDW9(P<* zzdkdEkW>}T^pM69Aco?Mr|ESA75vP|OTEaI#*)meV|HAL3}2z8aAz6?vfyVphx(k7hPf9Cvm;EiXV<&VL*gf%_1R&c{BHZ_>= zj4d$j+&j+Zr)dUX;}cnF-pIULsuO27_vn`42!3Z4J2+Rh%>J64(q?0YNb-*|oOPEm z$NxFbHqyNR9;R8XSGd&qsnZ5Ne+tFC16_jTv!BO(?=gkS-Q@tGL|XQHAVQI(B%jx{ zts-XcYq^uVS>vJTg~v0PD`M8i_4eosU!yM+n?6#GaLfiRT4ozJn|(xH`g$A|6jW!T)&6ucvXd9sTyU4DfKiA0%a)6~91-Uk?kj zJH~HE)dh*D0e>9Z%GRf7{OOtTw_mneYBi#kB_l}|UCvI+@cPjI+Bz>O zNmsw(qEGpxRH|@g`Ft;*0Z?Cdyzj5Rb8vU~5ARy*DwX!^R6frd@BeHe^W z1GJT>76b1sjuRUrqD-f)lng%-R9tKpGsDspKbjy8R?t|SFZN^qa>z>KCW!IPz!S6ntwTvbVB+CilCw^W%2&sS0NS_6z=@dI(&D6x6+}; z+z79J3Z3>ag4XX!i?cj5;X?Ue9CmhLdA**#zdv-noHukNJo=Bw>q|eP+vbA)AywJ0 zt=V#*fWIlpi8q-+T-yaIs033PJn=A@fnp>IKZ(-0s%Jme9_IEgy_vlaFF)V^h+SyM zIpSUMF_GSTVt9@zI9(+}tE1{1(F%9Sn&bL|uZ@TPanzRnp%{O$<{f7&?Fe!A--xwy zQ%I`o4Y_Fv=O5G!6)ml#)vAb;O=9{B>@v4~mggCWC`s4%DP37rVe1`LKO&epl4Pem zEIVqCQ_qFL;MMv2W`=Vsg6^bPNm)W2t>qrevX#XLQAy(cxF+pGac{?-Hi zXwDH#L@SXT&YX=q=f;ve3|M-+x*LNebh#0rtNSKQZqgvniKCWR^}+JHa;vi8-v*d! z4<4W&)%jff4<8bHT2CgiLXMQ#8taU%#;FEkMuoIR60N;cafMdU$Jd+OuC(OS0H$P2 z{OOP6tu>IY$m*9;_WS7#4e}B4#fdrIb8%A@XB>7Kjgophz{k=$SaQ(@H>G_`I$DW& z$^)8tETcQJ4UQz5xmfC(;O%qm)*YB=+btSLCu>l1>(saFZsjQT1tg#RsB!FpeR20Y z+_C81fq|V9D@=hKYQfw6>(MM1r9c?>*rEKLfp?Lj4~I-o(vF0kpxw$|Jbp*)c#7fq zlJe4MQO-STR`Ig8Ff#br|!I5Nx>=anOQ4r{ww;zaAHx!$FZD86774=AGs|_RK zHNBVR?TPEZTjh-Yt?k?r{6AcPDH>ZPx9=A^Ps^_-e~-GvszHw2HY2;|y7V2H<*U=e zT_4dOU%bJ%zAV|$b>>RJ!9tzg_j_~tLymL0$dj1@Qd=*BhO>5`Q(c)*d|1OyN0Y^T zXr$g}*X)ixB6vu)sQot;M1bIqio3I~-25&tSeZg@Ow9D440AM6pZ%XN{nUaYm%u4c zmEsab8S@hwCfxH(oiLF+20)^@-sVjH(DD6}p;9(3Q-+e9xTz~k;lV4GIotWBA~g_N zdFdwk$R|M!nSdasz$9SfuzHlM3>tov?T8*0U!oG`ex97yeRq@5sqHJ?J-mhuxAqVslnvGTAz7fKZ#H}N)GXKV z($o~B?7DBHOi&;FIqR@lm?6=;L+jX@-cmtP`vD4DOS%%K)G^LH>bggh5b$8;KsS*2 zQ~T1z*v&B8`Df+XUB?0KbHHWiXx3!eynqeJ!(|kFRZgp7jpQssXwi)}=Z=2I862Ci z<@2zKqSilMYl@DA(+GVwF;;VqxYqiM!SZ^Xh{&X@(?eeO$?B`ar&ZRXN#m=2;b;hS z+1hH&Te^Y-esUGPZ^7&M=ws^XVGm&@UhLhs^jHMfuGE z>YH!AN#Fnekwu3(kxmG`T27ndfRO`4Q4q!+LI;)?RWE=NP9O(+%5(L3Yrfw8l@_MN zy61?<^XSre4Nu@CG__O$t45yyzqh6_9#b^-V1kZy^Z9a6G5gs>pJ&;#)>&@B9@Nt2 z+lUgj>3SSU&%uI5Q*Ny9b@dro9&h-dB=sTj6wREeJ*Y_OFsJmIG!qV~tDWYVmfJ!F z_4(=L17*j*7i^N!oZCs+aQ9|%ENxTm;$dUy`Z5-R56FC43>_(p|oIX%TmP zlg=;v>MdI~*U1w0$M3k~4tn4F-bcUnTfaqj95|2;di-&RF_U-;0S9<|TI-WfK1tvF z#y9EktFNTz9C)$7?%#iVnhxhfYF1ZP(`+Hw{WpT^QKDGY%~23}+jtOqC(^ z+$g9cxIX=!-l^xy+S#|!G~7gZLDTK}c3>mzsqd%v2~R1ejq-UJ4a@2q`#*cCD52SC znNtwo8TOkq;2WjRxG1^2B@TsyOr>abVQ)vnPG)qHT`j_o_rZ2&v2?My-AZMWY}?|JB9I(ht9x|5Orc$*YYg1qv|E6MlW zwR0!^-M{@`(8CWuOq;g8yC$)EFoMJ%0`TnL%inuB-G9gj)tp`gSPUGD@n+gP58g!& zJn$acw|{>USibs!1F|$t&ifA21)^`I0PWPNlXUUIxs-RyBJaV2chaXn{Y&)dBahPV zJ$uqUiGCj;28XzeRAvk1YKe5eU|G(}K`4J7KYoH? zDi|XBMGZpj`x0Cl1Qwum>2V{-&8%fMV;;GV4{bueb%2XQjGd9G)&t$g-~z_9jsUUew>l+L4UR$I>C}tY@3P)WA^FpGBPZNZTs|`n?VJ zC{|eoM@qS)Wy^9oEX{tmROhGD`!+o_a`#y;0JOD6K7rDtddOB)qnJ{aX z^m<65VasXbY`a?PqhWu3I2lCFVX zgu05U5<(prqK}m~L7NR|==VeY6&-&Zvn8z6REQ(A{iP>bLF;04yrJ9L(Vhi0 zwLn>cBq*bm&!_^t88b@}sxX5xb&3aO#`5;4ON#(;C7+=*NlB&Yk||J}c%ur{OccLUw`;Js=2>brRf>If45 zhJl6ih3~vT|K@-FH}ul?Udn;iLZDdac$V%LKJ`oKNM8QUqZKTu*UBgdAIZym4|!?l ziQ~u9Y~F?Q=hB|PyY9Y=KKAjC(Xal4U#*wK&*3l{KVvADhvMb-Tqgc8aL3{0q+j{U zlZ!y{Tz$?P8)k0tyI-y%`wVK`2^KB}wcBW*!(44?2xN^KIYTNq+`$g$Tm;O7hSDGt zZ>OU%oBesMVzL*kqsL)t>~LEJruzUh69O_JJ@*%6Ifu!7Mo1s@QSb*~U_HpDZ}9nY z{9GKm2jC)_y$ds_3p)R{9KGGFT7&WoHoBy?l|z68<_#|MJtEapkPnnmG_qt=Em_*1 zR}4`IbIOO*$ez48)q5XnQGxKl5?KnT`!VeAng;~m?tGOtlf!R>Yu-3(I{Ulls_DNO zaG9(3=20F|_7R`H(-$5O_78c6ZHR47oxBQ-LvDVc69c#+zU$B{dcnNvY9fW+fh6#K z4tmd!1i$@u>LiYlbg5l%c!k91o_la?G{rhPF}?Zeafp&f`hBLUZVAqz(K?K7COES` z&3&xjr>n}1YJ<{wP1O2{UcKpFTfm3u~W~7=ud~Wmm8l3&$aAKkN7MZ|#%8_}y})6b5_P1!NbTXy-~S=sfvXG!R;!Y}y>f zels1^EwLqLjo_C_*5-;LZg@DCtnKJ6b(f*8%v4Mf&9(!Vr^=aMpaM-7h%(7 z6}3QS))9uh94E>6Qz?mfA{x)mtKAS75a_e_zn8dhd=zTz9M4; ziGPE@f!G(m@CEwMfApW}dxyW5g1;1?E&h1c@0b48ucZBh*UFMoSz^kwi9GxG*4eXk z>cmMpdFo`E+2eP-q4pD>`~`ad``<_RAG*J5Ec~d3KX?WML;lTpd9UGjzx&r|=8&(i z;JuFAiOeA%M8^1|6M=fvmQ5xWGdd4+$IK-#4vH(69Z9`2kIFs_M^GiuBbq9pOJRoy zyN4|{dGN3SPm@W7YRo0^G_++j9tI%MjpIEF>=nB;H8y?riu`^$Pq2A2G3*-6$+EGN z!g@{mjNms4Qgme**KNr&YMe(o)Jdyg4=6FSZK+9dAV5!SBlA=*j?ac2@P*!H{kfql z);emv>&!xtDdiEkV)YOn1W%ha+O_=p%nvxke%sZ~-P`Y{t!B$IZX=n7sPDauc9FML z=>CQ>@jZIvB>mAoYYH?|aj0`T;wVX|HkUz#>@*Vs;6OH8h}y26K0DR1?1?71ewkCd z#SqJkojmx7&DrpFnm!-Md9@^mZ1|Z^%)rLqwR>N(9J!B+ll_w>e0Ox28zC4d9!Um0u} zV??E7vd!QRkFtei-j<*R+cB1qsAJZGB-SUuJ1EzGsgrNNWp&3C>^O*EtMBq(zX zLhW;~p+R`#=nSQF)VF?!8G}NoF=*V_Nv$$~tvS`TrpjqGYRi+L=m}ZU7F6;E5%d13 zKa~n$nEVK`wdzLlvpHDg^lRmswjDdJr~AkG_5itK@xveaD1Gm{-(C2|$7s{0)uNvQ zJ^joxDbHKy&ZP_KdG_($2)A^Q$ai>b_~P+f2$*Kx&-aBt{sR5+7yg)@d;U4Pc{? z=k?UMj8w`-I&c}O1cmZ>>eQ(e9KQMHu{2A`>#fh9yHF0($v7rmHBeaVxpcUf-Y8M+ z@A{jZlIYkwQE!T;=gnZo*dfv*cAk$HyJm=5)u1mccn_yj<}|;iJe8@m-ZS-1sX76Z z7dq8CbggN#q-&aH#MgP>)&9MP?zN53Cqf`;{LB>cWP+E5H!bbZgNn0ZF=tza{j4ny zgUaYU&=@=QsqN$FuRnu22$QZDb>+1E?x`)}Y7S)T@n#BVPXpj!33lA|^!bF``yv`I zbR)PWZO3zLsu1kMI+N5*c*QKYR zQ@0R3YB==7>Hq4M_IL+0ijM0_XjK2c%m0o#fC(Yh-#vilH{Bj^ns(};0Mu&3)M>Bn zL(yDdA36fl@U$X`_4&s7w8f1U&O7w3HntwxUD_f_!v&jEONmn&89pP_%mlmL)DBtb zepMYG>}w~>k;n%2qm~H>*aW59a0lIc-yu49@UBHbC^Lsw)80eA3z0`9PMKu14zlQa*S zVAuapRf@Bixc{y1fg;Iad73su^Q<*9R#}6JZeLH9gEURi<)3$){RVI2igfb$ci0~4 zbc8Ac>p5GIy59N{TDyL!A+?{kot50EH{XKDcen2tk?GK~tiyE&OnT6^4LW8UNN(SG z(k8uze!fX>72l)3g5J(LP}#}pWz~A8EI(tmVF0{{Z;CdV7&WstF1b2s=s-dMF{KVS z=w~jI|77Flj<`aC56YS@H`Ol2Gj(}9c(t$&U^l5^hx_DQe+SJmNs15s_;W^fP^&H% zrQRx+2_`ffG2W8z*s@ku4ZT9Bp7`i z>ss0OpnNREIV3D_e@hsuJ_ufYrFJ7Wc z7cZnOU%Z2h?zxa#fyYqIhEnByyQ&8VcFoMK)7&tP2{`u$WU;fK~nSw>RsD5Q- zmG<9$2R-uWW3+4c?j&4te~WCGS~4%%~ZYYRH?l@48*z(JX4f4Ax=u1Q2b~-xXzmIv`&mpK}Kd z3znD;V_!mViqGrFM(yaL@2Vw$-_4jz)HD^RD@u4^cJQW`cF8t2wWjg(>vF>$3uK8J z{uVviLDk?e1GrJzD*z9K5sIhRHPlwX0>emz)CjMG1V11zil}4OO!=*VdQH@dKsx}5 zW>__UyWbGoCVh7eVa8vP#?)V6z}<08_KEvoE&{zqB}oUWX!7q^Xp*hmcu`U-16q!? zPdWfQE1%PrEp~r}PMLo1qNeXD*64n<9d{$E|AZfP3q>&!q3EyqJVLrqi$$3=1Z!&h z6TWBH0F`u115eklUZab}ciy^nTe|O?_a|OUvx)gGMLr*7|84u}XFv8a`r4CEF8ub( z>OU_2zWwymDgVmCR({W6uHg3MX_Sor|jMY!ZV7Y#@y zqcc)5@5{8x+%wAUOlZ!r0h3s0jUl#&TEKo8+54b1?s*VkcxvMl)W!0;3Dl}ZjjnNV z-=0XKhuHZJCek}=l}LReyq$ucL)zH+T5o+ZgN?T;cTsVY8u8lX2BE9-)C?W0W6F5c z!bV4HaP3^hGTJujE?JC7YqZW6c-Em7puAv6h(8WVFNX+aM5T< z#kaLp+Eo`~Ip)MrqI&A31X?o4Xfb*>Un>#F;>X%r>1#WM^m25> z=Yq$mVtWVUobTN0S-D^Tt+L;fUufr0c%zy# zS60!fTX(cv;Ykcy4{5=ADs?HKW?SH?{)^~dC#2$1)VfJI1;6%JtuQV@2F?(2S|q`; zPs=VEm3+9}?m=v^C^r9mJ*6uc%ZUuqCrS5EhN1vuhP<-O6jRz8ZE%N%JisVI0Cosv zG-OWk`5Qb-c;m)A%`URv9M|%UVw|s~Kix@zcLZd-v|$5I=5p7(wDY2w(i-7wJ#_^iS#K!-unwErfahZMV_g zci&5Q-F-K0+O#>1P^6`$3o9eiQ{yc_a82V^s&btqhI>;r|FSL9!gW) zd>JS@xEvHROa+Lt#FS?a|MD;YG95^B^l09DxVAPoj!nknoziGNx_%cJXf)bYy{OjK zXJEX&U9V`xxdB7q%S8u{LgyKjn+yOOSxFZh9-ysjv#VVY^$Si#OTAV;YF(?6GCzdJ zzTjva(qajnmo;SoI?CN>+MxN-OGJF3Pm{JGFs66Hf~xnN4_`|_9W<@Aof9-u=7Bsm zHHEURJUJeAj99xcM_n|fAzD<YWMI9f=fDbw-DFUv6#b4`WTF~E*hlFw(AS)w_P zb$HQnbenz+{m1v|I)E-B>Se+-PAk2sXW=YnXGA)a9~+&bNMhsAR$8DAW?6bPkLrwC zt$QUWnxM-pldsYcqC{t1n;)+m)R~e4ZUUM3; z1HFX0-CtMXXJ8^SFQv=5oqBKTkbVb!UkCe;mWZ|_m_d@-<`YXmkyaHkcNmJu9OTKo z2(^yE*p5Pn?_W+T@U5RqicJc^nVh%7!ScAs<>F*rJtoU1eYd2COio=m*@6} z#!&UGl_=>kR!dl^@(WS@@?L8M@-Htp9vZ{3E?^B&mX(`Ya(fzUDYH?copPkDLYpoW zzTyNyKB)0>T6#L4ua$urxd~t`-L-gq;ZyJ3vnSoBI9r*~=|!L@w+gU7&)dsB{~te3 zo40JH4}avt?~0|TBS?G)fDfDb>%ac%bWqK+&pw-eGwj;Ehwi>-5g^`mcUr4_<+22a zm(xt%g$ozx^vP2xIOIcQ`1jVWTj-&O-a|kC^FL3Y`s6R@s8=1`()$l(rm{D4c=qhs z6nMV+>TC4WQ{P(PzL=hy39Op|_0yXrRp@9mrl@0hJ)nbD`+orAKBb3Z=UwB?1oL6M z8IR68aDdk;YQ!BKx(=bfs445zkhY!zR>QIJjY~cEPaVE4X&XX~CUPo+cRZp??izB5 zoYqlw`DoGxS1HKrW)r*B(8L?IgUv(%;_MU$6MmXUjDK(<<@4W+U3T_0eR#u(&eH_F zJwSPBW^OzWdUY%B@U-G4u6O#z;3VqP+ToXo96GVpL6dGA`sI4ufjaFcb-_o@0dGVJ z+q_TqQgu)tb>3Nbv3!p%U#GnFVCsO8hF(WQzZ`XK^^UzrW<~}wO&&IB+Ly@hbdv3W zjjBd`z7O<3oXUyU9kfgBA9l+gk9voUv;l$Ui0*rH-X_>(qaRHZML*6kg2W#Xc*gGaBd^o%{-3`?&piE1T4tIrn_s0v zhaO0GAaZ~xOH4U{&a=)Rh zna97WrKP;@ka2U+`ph%WrfV(ga>ywi7RC8;J6jUB5$4PZj;vWHW@eb8|im|qJ!i`pFDIJ1Nkv8)S-4e zNq|mmY4?8Hmg)vuq`x8{`tOo1x+D5g6hf92S(;}ipaHpYV!e)Xb*}R5^-)=3H+l6A zwad90K0y1%g4m~RW;{AP)n-wt#Wpj`=fIiqgKH7XkIJKpH3Zidj-0ATr4I(>f6b%Z z4TTB1Bus1EiVe(9MBF(n4D=Qvm|VtLD<47&NE1~-4pnQC4JIR$g$#r`5$K+#?S-P& zU_{6qqn`y71W4wpYjQKK@#c&*`y5C=2s>4Qbmv z82XgQl`iv}2xnX~KL~80yl9W$<0SdsasG8ZmB}jr+0Rdh+OY4<6EpKQ+P!->-ErqZ zx^&?(UAcC#`ity`f8{G*q1BZY+O};Qec}_J$lJu;*6hrW9!8M(1Hx;szD9ri$A3)U zcv?>i0ea#m9J=o>Y6CcprQGxms)K6H;7$8_qSE5dH!;i4D61{m>lBL< zHWTHW=uiWownq@e>bUqzl(U0fmM9gb@uuuLV^I#-!R43y0+$1Nhu+4avGR;Zt}x+z zZXMxJnGu!O)lr1Iz-GuvszCx8dGG$>(cn#xFZan|9qRtbVkoIigYR=al~)@4<%+;p zl6FCPjpWFlV>wPxN&3}l^F{w*g`ihM$OI&M%5UK!*_cV>y>7-8%K=$tmulBk}1 zP-vM^Ec>Ym5_nZ*Ny-UD?q}MsB%rX46p$M; zYttq0QOVI|eSS%wrC%MOU=QIExpaJzy;p)SNLl3>I${wDwfpU~ABgLT@3ncFjtqk- z5ikf1kRwuAJp*ltm_VkZdE)|QpsemGBN+G#xliiAUda1~=N=CjipJWsYDg9#h zE0`Y75POChc{A41Qt5?~@V(b9vd?Z7ZU69qbAL(Rny5smnYv&>r3LAz^pvX1ir%c< zISmX#zi`hgma5O7t_>l6sV>NEaEEhs_=@}FP~Z0IDlnh>_wD|BJ1ZQTZ|kQ&e#9!&uGi$&Gf`$kI~)(2h4dQKTdE<2Z=l@#zEGt3K!2^q-URgmj2{V z|0D&7Yvl;s+iyQWk3RBPI#QQUM!IzAatahV4KD*ddGZ9EIDVYYoH>GjuNUzB@oLV*!@ zIO)fR>WZn1zl2T}S+p=PZEb9QV3jaBXHCJ*F_1tJX+hjN`lM;Sv(e0~1~oRm(#SI7 zsCe(YOAEL!5dy@LI-SNUzrY!GlaftSY5Xsap9V|SXgE5M0k+NLhj+UmO?_Yq3sZHM z?}?P2C$DJi$fqL|@dNMdEQi!7fPfGf2dpcU>m0g3owf!}V4#U|iZUVJYhVJh?nT@F zh7$$N)Gr{fjF57aKfy6yel}`A+CFL#z5Xq;t@&B&K4AWK*}3h=W@f8HPvyVsPgV4r zHc?s-cMX&)gDg*?%R>aZ0{ebY*7o*eo4$!J&2OVAAqnUvvOLtnElRTtwgbZVN|Tq* zXsJ-jkT?F=3Ta8dFAvkk4kn}vW*3THZmSWDJf>82H9-EY$7b1mZ|%}Wc}`GaS#43= zanLjJywZdB6#}kkID*h~jrED>7pYI~CyHgFIU7J4P?vZty}oRBG-~@*YN7wdCY?M5 zOrX!GK9!b`?^0P!g=vZGbHN!q)Hb`uV@qu`_%*kDZ(GUf$!Nn{FU`L1^j)jq()(FA zp;@t2c?26ihY>432BZIfwi`dh8q*_di{kuJVCnQo7gq?d#dMT z-LKq`UQ(&6N)PCbs-prnY}BL|&R?MU+C0q)vQN*e{_>VDo>|P3E4LlEoo1(J^w!xk zw6dDDCHv*y{MNVVfB2t%oBo@B{x9gRyY9N>;u*e9Z#}rBgTz}ExFhq)q+k8&SLw@N z{xZG(#_Pox1lqs(oh%2`@BuPBgUELvzVCfc z&@X=K7wLUJ^+X-jlo1IAKU*k4;`MUj=c}*2x(E;trzNKR*_sKWUZ;W@O*}8%)9Yw) zSU>|b4uW@bmXzMrBtDPRL*l%NKh?#LFM`GC)tWr?4%^Hbt_@WnSfyqN3C`qomIGCV z)p_0MX6w1ZL}9eN@(6?+LwW?psxEE!=PYTgjxCNt&qV&M!qdGmp&k%0g{Q?Gj>p7O=CTkN_^bzng7f?wP%rv@6X5))mpO*bKz z5UW;pQaWAb!$h*lBB2jXK{TH_OO*4rdeh(n(=w$iqi0fQiR`4H_kMO{wvm%g$B(WY zUB=em8EA{mO4&EnIu^IVV`m5L%+WG@7BX-BQf7J6(vBs2eo*sV^G7T1T69yIr9C>j zmeeZB_Kt}n3_V)XBuO1=kcRb6iEYTM+}T*m)PwaVDC?IzjXT$5W0K*AS>(G9vX+A# zL~1E)%aB~tGn1_>R^8AmyVIXFMZpk#PWRora*KAqcJ*3S7Q1$BPT#LxyGm3v9Q)Gm>(xpXk$oC&gfXD~Q96x@H&MpGPD~kY; z*E&D+$iwu>Pkxd<_H!T0LY|fm&FkzTE;Yqqk%L1HLK)|`zV$77>80<|>CFd~n>hA^b z@Pi_QWrp}0EwA`CQVmr;&NK47A=23ktbQyHmvm?YF;yIBO-&cRy^R24`G)ryJEsj>laNqtrJpZ1REu)(ZF`fvr19N0wOTRuV7*S`o1Sd*n6P&E6j4jCTWqI86`C@I~S7F&y+SWGPPJC%z*K3dtbYDofZx~ZQi_vwr<&)d~sgs$iN5LaI#&ycG3R* z`;%YJ2ik;L<_#ZM`S1Uae@_Pv+@21+IdJ;{UE=;@03%4eNnqjN(Sd*Uul`3ma^!WA zjjHD_T%b>W>X%Z0c==LZT6(!GG39-NCr_P9S5TZidn(N!^0f28g9qs!|Kop5?|uC7 zthi^v1crEmDegy<18R;OIYOWN+~*g;;pr4K+5l0NLnDvI;>rUe6J<0T%cwe<8E;mi z)o}-Xik;2`D$(zy>8Mq;R}H;Y2?W4faEdKTX(HKubg``4m;GRtMNKu)Q(WsPQdD-? zX;+5;XM3vaArVYLTsPVy4pP1dkBqYxf^8lkGvz588R}+uL0A&htr6g4rZVtQpz6ug z>Qi$S#+>TDD{U+5bYa`@_Zi&J7%-7xBp?t{-GN0YvKfDAXra}SioqHd>v7G?i)uXP zdf-j0T>%|vbx?$i5a4&^L2;a{*G+y;jl7!)Zjl4Dq=pHKuFkR<8yeuGNXrijt)nJ) zu<4y{us^j_H9yxqx|Ryd6Ul2-45`f3oI#Jx4<#q!uLC{W%(a~0`DDnD50k@`_k6O_e1qSKhhq(>UNpzFJ!Go&RQ6 zT&Y}F`e+Kk=8z-Cr;BYEWcH()ccJpdEH(uX58F;l$<)s0$lYZi_>7h}AF>}$`QZ22 zLB9ts;Qn2u#dAPE)lFW)`4E~teC2Uz!_rqwFfL19wSKkVSNi2Oq#+G%0`SMTl_5{^ znEq^2pI8IocpT zHe%VE=~Xe%Hc?$7b&HVPEfKGFPutCFE<0OIj8s&N~=MuFGUC8((huIvF{akC(kHexk@LGpP;?__NF_`8F(w%_U$2EYsbJ# zQXhQqJ@nldUm$jtwrt&!^70n4&;I^rlRW?CZ~o>865q}6!V53Z@BQxYrh5nTor z*CjRD{?B>mB#J|HLNJb0qllfJjR6s(XQ%Z>I&;~^L#c|*#z1cAQE)sg4~=0Lg9rvQ z!c3{~%mi!jT8*kR4M7|lJKAn8>vl#l8_lAoUArJ}2%K0#UR6}K(R`d}W`CsG&}KoI z4ERIEYfghi+Uh?gdw_?M-Oy>-#v_s5tj$E|gnuM6dFn*;cyGvaer%m7D9ot5aXg7W zzch=lgJFO^6K70kKFIL7qHyvfg9CO(v>0{Q_W0E-)eFIJB@$U$om}Kc&JFQ81;P7Y zPELLEn6#x50T^X?0&*vG)&3!TD2V;6F6u8Q-i02wAE=|2y$-arlgcurKqsq3+rI0l z^p>`+%~;ZbCh&?p)l0P@K$l#`39JEPONsb^Bn}_wGJkl7a^LdG5M~C!w4Lj-BBWTa z0BK7i@~y2lFDM=;$@0LrNd7)Abu`DJM32LBNWV*K>x>hr0f02VpY{fy{p@x#^X5io zL}y#M%-`p>BBsuWx!sl8m)d~2f`8k}Fyhbj*fbuWP!K_$RCoK(vOk+B-@9i?1S_iv zi#fg-6_`-hJ3ZDK04Ir#O5q&l^vZVmW}H@E`1eXLmhH>2k{fIP7n(vDbqj8~)emT- z&uDQ;>Hzri!_rb_uzj9x58y}Jwrx*`(eRaaiH2DoXyq}f19#q;&KzN1oe#d@gKSQp zI!)hR`0Zc&%9Hf*U--n2%|SLJNW2L+cJu^2{q1Mzsi&SwjnBfv_o47HxCigLi*BR< z?o$4{bcxQNJD=`QId$^H;`4M8rqz{Idi?SC(l7t*U!lhydz3b~SN_aO2z zSDwoL<~P5&pyL^OvypEW1x&Q^vYWeiNE-z`TT?gCSorUZ@ z=#?XQv|o4aM0;0`O(t|T&aHSHu|uzOGV@1!-k&%?m3&W|cU~!Kz&25N6Ldwf5#ae( z{xR+35eHxq_DWqH5V!qd^fGxB*JK_s0@pMVE1u1`n;Qc9~ z3k`_Bm>D6b)7iAP!z?Kq+Z4=OJ){Z!O(1jXs)qod$j8cGz*lGHd>aMeH8uj2fXzFp zI%4}=P|6SNN4>-mUYK(FKF;LQKGQa?TU4I)bV#uB(OdA;<}>bOdD3^9P?Z=m zFy%~1u9t43c*#rL#zAfNbn8vf=MBlyyz66Lm!A`Sik_z0JW=fzq5CJCMAWgCtWTC2E#6lVF2DPs{L&qE*;U zymH8SZrs>zbygsUj~po{pNjon%k9vUPd-Wi-+%w_^s!HToNmAU_5&Rp^G>ID1Ks;+ zAu(e-^5~=Vz3+dY&YeGBI-eQhw%bnANA9_|{N`0e2{FBL`3hZ_^KoeE*>h*<>a{C{ z#x5~k3ISrJ@~+b^vtu*DD&M^ z5?#9P{Xz1h1sZ*m)W7a@N~X@~TB@deg5$FW4aGUusd)w!VfhhEBg4RQbU#xp0J?Kf zajq}Zntt(B^x8R0o@p6$IQ;K1v=lnap)@3Pdywo;kFS3>Y(i{zs6+cd2SWwljXE&q z85&1SMC^U43UBAe{tyJsN$fwmX_drKB-4I{Ex$Ei$dqXmIHr+zS zN&d~buS2Q{_%E6%1KFXpNFGcF1KSBazl79?O_2y@u(l@yURlC*B;Fz#(Uinbd>-+% zK21R;``qh{-!ypUpAQD!^3UOu@%wSjxKbCxTa`8o18cN;GLWp{?WoLh8}@5m%+as< z91Lb{tH*DDta^bNTeu`r57Oc>efOtG^sR0tEN|JY39Wc@9^(P)I%wW??HcpiGK_KF zA-#iAcN{(x_DfFPnX{lh=}L$T-C&VRS3_g4}Rkhqgyd+iPS*0;Y& z5B}qKX2-7j)`t!qDTmeEe&+VF1kD>%ugy$zr5sdqk&tKE-%#?cn;b_Xc8DR3YB+;jsJ?g;m zgib9QEI?VklL1#&zSotZIB5rx1OwDJC z2F;T!*Jntds)3j_ghxXt;lLFOv+`kT*sV$vo#nHaN|*Kn@2$oaKqQ*XcA?=bBuqI0 z-Livi88KzWQQCvy8Koa&lV$Wsa^Mw2bE>HOC-i~s)5XoF&XV(VAzlVZt zi=qdy&H+Z2c9cHAd~mG{&^|ke8DNkLzm6$}!Qy@?#5b~?^{Vwx+>fVWbc#0xB^79; z1ns%aw=d9xAOtmuY_&WdcYmOm(>Gd&wP1j({*Jrzkj%K+g9B(7dI`F1yw^6CX?dK$ zLjl+10YDs-Cah{WzA?2rmiOqv*ciwt1LAu!G}qb%@~Z=t8{fuo-|$0uj+zW#K4qzc zU;nfa*nybrYxHBeAMr~RMtKZ8tKp|W@x~`f^+gK(mq{-^K|KJQnU5kA1AH9P*4px$fff6}o)!Lb>9C??dEw z%ot}*pP~Q#|M=hN%fInuI(717iBU#o9GzgwA9fJ=ZpDWmewhC5@Be{zS1~$%G>`|D z$~vhgS~E(S1_MJlll+&cs{;*B{O%HP9K)DUxXGYy&(xSCcqT?-z!5Wx;Vn2sSQ^Ty zajMxIqD*?xIhN_#s5DtQr-(q&%LGytLX~dQzEPu;|+%4>x+c5=PB0oX@yY@syzw(6S_l(O5`zZk7i5W3wGGuTp zI@u2)VMfAndj`u%E6hWPL+$vLw3XXmK1q3~ly8lU{G=?|exQ@?Sfn*m+Aqojd8@G& zxq=DuH)`lCCGdXaTE*&l= z@Yf??026UcG7gZCBZd4n-hE_*)t?-YME#6i{GG_{t8Z=WSq>G6JOZ4cmE#0GtV==2 zw^FBU_gMoa_59wapy)a{!b2tp#^7Q-Ue5RUi+nIV+@8s$hB>rh+#YBJ*ULNIBRMP@ zWkPn(y`+*S_0T2H=TKpwk4^|Bam7vVW++zV@<9BEY*^_>_DEO5Vzn~Lv@K!fz)8NMj?W+2NW~F6fBs@|C`;Lf+wZuY zzWAjt(HB1dg}KZb-LPsW=h=QlSv`~kYF>Ty)pEtfBab{*F7;d^RTk5dy2o**21Hse zBnlKy2}RixL+c8N4Anqh{H=?kTcdi0N7-6;t!6w3bF{<5W zMzhv~@~!Fyzp|xOq8`kl$zWFve)?5BD6&>xH6R#TsHn$&>X044Qk;VzbzdryJqTFs zATyad6`8$p9q;RKD|fLHP_E-(vzn<}SuBr@z#Hr^wh11?BUgpeF4z@iCA=`KEsch< z=eOiKr9Q{is`|TMU+N(ObESB&idWNk&#>i*=D6^h7+}^I-}lMd0Z)a_*v9s>GaS3s z)B!1Rr3&ed^`fjw6zE7mWi0@`GWWd83izET|HeacZ6mz zU0pf43w>V%Y5?xog0b%LD8Hz8dSCkDm*_*k_MrhL?~e4YUP*kX z(`si$FFpS<{q=_1dzRw^eblzV7(16Mm_86p-$=^tgEx(*f~S3Z5o0G&!dQQbxXNC$QOisjz9J# zI@Gg}#JP5kL>hcTor(Nk#H;HAvDL6WIeZ_$9;M+OVzI7|aBOFoD0c|3mE;cnUWEiCb^6^N$AGl~suC2=7HwVQTar^Wwl3~AE zx;{+SPb2>8WCB$qWxsuJ!~Whk#R7>4YFc7_W2A$?Twl97<-;6HoH1rZkNpxx_G{dC zxqF8&qqC)_cdXJzb`RO>l z7xlv|;kPQYm>CQr7t+WH!>uxgg0*MkDV@&o5C<;K?u(O#n-X~e@7RB4k6RG>jwb;A3j+6vUv@?wCJlv86*?>XfF03ZNK zL_t(CTX(53n5=G$L>vmk5go}gN4k%I$m*zs(3Ftc;^;NUu*Kx13Dt>6-<5NYc*d}X zbgUGvb5H@<+CINZmmvI9Llx0V&O+bZ$Z36r#+qI?3e2&2=n!qN3?OP_chzuC&hcGw zd?D?+L#1l9a^*u?ZR=Ksq$gpex%8#qGvUUHv=8V|sXCArI>v1;l#(P%&)IJ>6s%5! zn@KMf*E%L(N`Pl$y1(yA3pWOHKdJT=MlRqTsFsrQy*kg?i!-TTxRfIAGF~QlbPEq(i#>INZR_AjEBj!ao$U&*gZ9SCS^#IG; z`Igqjw3QT{O~j~QK^iF+58Lle9Ki@}4g%2l*Wma)iA!S`>UAgr9KfZ9x%I*|cfZ6i zMWG3B@%x&jeBb34P8jf4!mkS}sn#0TQV#(8JX9mXH-;I&dyJM@LQr^V?TRlg*W-SH z++Cz=g3O)Li5Vjg`+WT*_qzUEs%MlH2|XV1i@c*5qfo?%ANY4jD}X()Blb-lD~#F< zdmTvbd_m^iIeQ&nmPwkze<0nqi_Rh9yo4nd+lgNkE z)-Sfv{Q2>Ze_ZPRo!|Lwy5r6}-!)t8FulK$xF+5Io%`uO|KI<)bS9^3*RIpn)(QIZ z?C|aFt%`%Vy?rz&> zu)DKc#(y2Rd*$R~p4?$taQVaYxaW|Pf1US?N6n&7x z{!fao6SbOL_b5NfXBD3IFnXA=O^CT~n|)h_GCBMA)>>?P|JGX4a1WV;_bo-GWoxx4 z@_dP`f1^|C$6nT4zAgfWLkjs?tXJDuPlB1@j1wj9U1YpK2pTs^S3&`p zgfqnm7!y5 z?voh4&quTk##c_lJ9e*WUpKS|C&AaCY-vD? zz;6|;p4fFCua#GOCk0unvVaCFcpy!e$SZ8CJu(%$fStulmoAnF!(tQUD$n?^Nj{)v zbMx^0{z|E{Mkj63OE0}dfAXLH6TSA@Yx@!A9ZB!6Brc?vYp zUHHd;{9bWNqlqU5nHnn5!gJQr`qVjhVJz#yO(q{ljwnG{QOs^dkIc}O_X1O3M4i}$ z+hve5*`<~Jw~~hKtz7?h_YsOwn2i=_nn}N@frgH=@}tl)7l)U_ zOZmGvh1%xk`J;(i-*XshDxs;oA35)3l9SDFLMFE|I9%gU7RL&DOO>;XlfpM(^9XFh z@8Jc?4^fqhPofT2wWACTqgQ9B3Qh61F`n|YC~KJ!$^>Ikk8~iCl|-mKh#fZ`MX~p^ zNbZ@M2(U`o8)Lplus_C!_$6rHfF^1ZgAo$2wA|P?o;z$rVw?KCIJhFz+d2vI#F{(N zKCF9`b9p5()D6Y+fC{*J2MTt924UB`Qaa-0Y0~HNEx{4#bA{iiV;!FIEZ{53z6(b&a901IqU0qL zmhuMBh%Nwk*!01}G@@nS&W@YF(H^o;5G-!-5^7pbInZsPvM7uqE(6?#E3FYm9Y{Wl zo2?%R!me(RisNAxXgH=v$0^w=9&xZMhX!Z&*5r{b$e3+_;!0Rt><%1b5?;!7(2?2x z-`m|OSK*yFd7{`ujPKE-N9g3KlVyR4Cz3fYpLOzsAO5i1d(L|oj~+d`K%{pjy}yze zQt9l~9)0s$-=s$$d9*lfHKno~eES`Dl$AcdCq-hBnGr5uzDyS{UMP;^*47r?_woDa zD_{L8eei=Hbb`_xM1K#WIEp{~;g9G?KYF;#E(k`!qVs8K&{=~PA7%JBebj!V@f=?- z0mb}IZ3Lz6R;ZRhrg6O)0pa_RKFR?`ih0KScRB+wk$Zx=A=ZsBXwZgA*X%PV1MlP| z&?%FbbqO?&67Gh`t(Woms1I|ETNVg<|y*_HiItDQdSN_~SD(prOK&GY?iAk4FmX-HyvkH)p-TX(XfPy5MRm)F&K0E<)cxryg_ z@r|p?pJTc{f9`s&&+k|DmdYI@1>>1ULnSZdj!+I*yHnaYzO434%lzxHrSXVcQubZF zLy$L>))jdZ;MT)fXxE#qXIU=oYb`B6Lz|!(Ukk$Gm!^#>x-tBHD_Z9iD!>J$^Cr_+ z7DnqPclmoL)V*0N?*Q~@0!(y!Sutz}PVz6-|15L)U`v@)=O`=Qs#dqvRAB4_ym9s{ z{pDZ&B|ZN57S9@eRA9B({$@?x0RIz?sQp2 zWGC_RrAu_-f~_L*si$B2+P|U?-+gy+7{yTJ6tB7v2ay?zXAcG#8Yck283QX!zm9zZho(4I z3lo}FZ}M%7j-pT>b+lVSL>#qkS?S>4Td+|m=6^Tq+lBgSqXy5)18}|wGG||pI_apF zs2Wh6k>&E_BJemB2T=}enZ#kL&Rq^pl!W6de2dX_p}Nu`DOE?21#NW_&Do4}5paPt zT}MlwdFF6gG;K`M4k}}@>g#4$3C?mo#?+z%7#y#Ba{l?R;9aVMr4KO*D;=^vtIf(i zL$v&fjE2a!&{LhN6y9)SBK!I1E^J5hXR;anv0Y$e%MTn3a1(RX2fa~%2;@9)sw>8~)x+7(WfwqKk2e3n-y z^M-df`SK3Jk_e`ej7?-$YY+{+2&^5lB9ygd7P7igKkA~TYVrWw`r$Z+6Y<-xTvSdG z$bkT18RMm1!i?pIRkjAd{--`0mBZ(}{e-uh)w|KFjdbnW)e?QkHb2+AF>RJZFUuIp zHqQUzFaClaeDDFf&<@Fbx1@KqlX#FjJl^Vb{@i)`^Z)D5>5Vtu(9?)`h3~8X^0(-& zyFO5y!r~y_xL!K{%GE1nx%iFOUoD$ed2{NA@BT3T!5{oVxgUj-tf=52HEej|2}rzh z_*Z}RSM>VpXRCu)OOkHJNfMq%YdJU?N8$*mKuI7}#7+F)MnVci7k%UHl0vm&G{np5jVV)LJFdqyUw+j6@nQG|lr6@*T%@Ma0c6bEr*vxJ6L z$1Vj$h-x^O&cqAgMUWQ!Hd5OcX&2AdHchsonA*WONbH8Y?lC0Ni4gR;rba_0x8xBt zVQi%4+^u$Zt5L2mY+#5ZD>xv}?ls0x=U74}8^26yoPmj?d6jHkpGtoe9_QJ}Rimx& zx>h6qweJcOI=%G=_EWUom41obUPajA3#F;`uZ7p@`!L3>@2w9+w#A{>-B%j+DA)SE ziR#93XpiFKQVK9&<=fbmjJkf@4<{)|crEF74Do6dxBAFrtmNjmE66RF%C`*9{605p zXPsBc3K#igCP?$n6&RDSGgd$CF7B$dr^$g3|~ob-tzF z`O^&LZUwQ0fQslA=S`leW7OJ&JR;*ENvLKHv*wx1S>m6o+_qiTP}btWO`h;BOxCtG z`c-p=!3*?qAW_SNq)_vty;HIRFDqTy$ZBDz)0Cj!EgV;ry=)srXF`p^RtEGJbd-%V zaa1K_U0D~S3{ZH$qAHCUOCF6ACCt z%C~Op`+GZ)GYP+Eq(23X3}fmcDsc0}#)!9Gaq z+mrp*A(^4R;kcH1B4;O`$B(l%KC{Vq?iV>I3GEp&hz@b(uT0I(&*jRy<6Fn+)mL6B z2ila?#4P=YKP}XhmzA$vxm;%WPo6qOAOHA$^vO?t(lJ%M>H-g| z;V{*o{p=}v?6JpYr}IX6XEG=-NtAs!Rqw1iat0k5&_lM1qcN|^>(OzUdSfWS8OT-) zeJdwGHlwD(^X8H>>G6&j{dOJL*gKAw0(n#Wc85bBvJt+lOel%^)%4cZriU{ z_w21!I3}_h-p)FuDx7scqK30h?MfPJsPu6{8szpYC?0Qzj+LWdMM$RHq`n42_8JTg z2edE6Jf4Gx6A43sYHjYdP>)lj-dJ<_JaLo^ zuCre#nZq-rA`Nnk>Rx)@bEqq!^j=zViMWlPdxa`aQXjO7RIPnD4zI= z6NOb|nkeGY7{HMgCM?z_FID&Rbw;JVpcnp@Z3LFF=c|2i8+PkxbON{~R*#_9HL?@1 z@caO_Cd#B6Y7pQ^!Y5a=<0q2uEi>Vtcmtd6B8CD9-PX z964Ha#P*HtYWL5HqY{7iv!9h~_qgo4A-(S;w!{wGlTSTK-}uHi%5P>Dz8me9TW+Oa zyZi3a;T&Gd4x(Ik&(2{v#Afbf4!QgEr#?j={pd&O`0?Xz6%khsaUUXoo__jg^!VdH zr59g(S#gQ6{?2S$V)Bt5TZCc{a6riOJgR;mSVU|JjM`ogW4R^E&qi%Y@KPAS#Bfs;CL z6Ru8CZlTn0Fw@>{a|ZX?0WkGb4usj0)$x&1YpXUI_Lr>ADF#;c&P9PUvZdq^_AQQw zmTv@4l|BC-w+#y(t{t!<8vAq+{@|64sjM))F7^XgNZQSM0}eUTp!NOOi9ybf5e?C) z8Cg&Z2dn^`&WK&&@#LT2im(<6c57S|AphDWb$$o(XJmIu$T(J+LZD8=Ke};HvNe1KAOcUtO($k326zDv^a)N{#Sa9!eOQ;NU|ztML(y+={9= z86&|hD;1!4C)YfCF7=5)C5Dcya!C8gE9OLor#IqEqKg5pR1aZaXizW62Urcu3bPX? zh#Y?=dyD|npa?o7onj&AS7}=6VN^U@vDoH;B<41;bI0}8)x!;-O9;VW9+{oKop#@6 zaR3_(B};2W)@8mH&Wa(F4nee@e7)sv#g^BFR0{99Mq9rM^UJJrwGrhWc8s1AVtk1wWk+MO&j(H{SV(cVD_T0GY5&NPE}L_UZd@+_yt^gciCr z$Yi+KO3nyEhJUesDN~_N0K0FsKvol%Ph6)GDSx`Y1H&MZ(Pm6L82qD#3{pn92sXh|*k|PH zas9MB(38*F;j&)}a8)fXz!@Fr)YUs8X4ChsDR3~G>SxE!FopnJXXC@Cc5ziy93{nm z1FshHftP&PC2v*ZQ&9Qc@e?P?p_tWitngla_0`!g_)dv3WPjnEPVYO3E#3e1`{}_4 z9@Lc+-e}6#U3~OoAES$WIp(!%w7tDkR}ruB-o$Hk>GH)gQ^5Bi-ZAIBd-gx3Ab+;`Ji~+$ZHZJ#%bTEpb7z%nkHKQF^66KVeS?mOSJpja=^d|~PlxgY( zjqHzcD5G)3c_$!B`-#G2)o!15Z45%MTviL3&)rcD;N{=W$!3`0{t(d{&Y(@C55%#` z&EcsyGtcf;HfyJsZfw|UqV7LzVWz_4e02mWwGvvoXL}-7IxbeF59-~D?aGO^LMc6H z^sa_MoqelUQ`E56HgdA(W4)_P=%3r30cGe~!^l`tgC^DRRyQbQ?4%k>D7%&9g6jIV zp8U`mxS+WG@g?mF4R0N(U1B`lCSt(;v_pPK9YS=fMhT4@5g};1tVCG?PuVJ_@sZ4| z<}B3AKqH}sM?#$iFkYN3=0sU<$WNlg8_r1^(6tgtsqIcuU~(0ao0$^tOA3p@heg1^ z(hA}sJVb8)Fbrv{M)!K#DtWi+iE??Wh~Qmi1rDf(+<==jqb6qzKgBnaD~CP^vLD;# zd&cBuWdr;Vay1!KOUV8%;YB2>)sXR>t1;`uR?>glx70f!;*k2G;m1M>@1tHJSFWZN z;P0GXAf(BMF^r_V-nUa=t$^}jCu@6_Jgy;(A~!s&1Y#m(MW&6C3NHlfHLLK;pp63G zo<@3vXpq6IWtDH9k}I;k;|E!>w8=T?t5NSR^aJErt@?7xlL>yizL$YWPPR9YV_BAm zU)QAUny0o`WNP47wNXL^`{@#gyXp{YSlUN6TP5qWP_l=k{hs#SPdnivhE_+hIbJer zlTjvS$Wi35(5+1p3#7(Q!eTo+_2z;T$B)z9AO3K03eTQ>L;V18CVBE*&M{!ShW(5` z{nJ0CC!c(>r_HZ8ZNAe8ywiydTVBz7;>joIxnDe2p0NTxefoAfdFqzZiC3>&Ely*( z8?hW%bCoWfKUW+?W`^6(+)jV=M}I_j-+gy6DrMy%I*GCukykB${_~&HPk;Jkxnohp zwykp1-)2n&DG>%x5}_&MTm~rFZ?~$1${ys2jT{zqvcdx}LHIkTGh=Nd@tbgrd&3tE z#P$!|`#x;8H!Q~&A@>)hH>X4N_kscf>F(5-wX;uA4a&nL^%HfgvaV5~e{+TwCFw6Y z3?Sf&mY_2fLE+{=Gw2*K{-QA?D>&@@*F$OS74Oq581 zccovzgpwg0l{QHmZC2Z8YgybFXnn_Y$*m*Z7{jUqA0VGAiL~FOEUfO?t_ zS_8858^A>8jK1~<##E;(pi$bCk0@TJ%)-DJv8(JvH z+B(r#X5-i~9Ff87SL2z5aq9Oc4F*ewyza#Sck-?mLL5-r@+b0iC!zU*!sw8skT>F0 za~R)C4KY_JlO>Nm?^i4P`bW4|*(|y-8!dsCms+!&pi`AmlEHNv*mxK_BQ4aJ*L@p| zxyWA!@4MxEqqj=`1iu{(2BmD~#l~EqLszlG)XIDGb5D~{_5h1^UH(NLlgX4cYTrRp zc7MXt_I*%uYpcg5a)wN>f_%sV(IlO~8}@qgT_}*)8RQ7XlP6E=_8b0e?9~(7*(p4E z^3?2CT+stBInwZf2OglWeeG-XiBEi@oFe~DrT4s($er<%pFB>_KmUAj7THMUj{4Yr z_sx#tnG#NVy)74S^MN(x>Wgc1>C%OwXpbM?q7Q%M!}KqI>$m9e;X^tQmR1pYhJfpO z=%I(`+&MlTSMryCX`Rr~)VMF$Sk5p>KC91jFbO_(it_MlCx4<-=|Cl-C?^h#o(OX= zMwgt*^>F=@p)ogr86B_G=jc%$*kM>?T&lfR!?f3@`x%&S&S3$=A^$`f-c}9OQ5+bz zWwkKFif&tFDrkiEYWspZrCfGDt=h@20dIn~ z%MV>4g118^ZSdR5rOb|MH9|-9x# z@}My^^XEo8A(!*;KJto7eb1}ptG3k7ikm}%_+DI20$=iTKOZ`DsGVxPQGT;N;P2Da zPQIP<@e$)3fg*Qivi#?AMK9#)$ZpQOUsmAf_l!5|8_rYf-D_>0v|gEMmgCE%y?jTP zI1!wW%kp#PMLuqwPwM8p^Zz7~E@fYE6!Z)HXsm&E>>b2h?z>n3rY6vr_*0ybrM0c) zy4J4+-Gmxk14FR;W#BGJ{|YI}YH^$TdY0XqgW)9gjSPHi=YICa!PCu`*e_N5*0t1g z)my;>H=EvxI^T&J-WE&jj%c%^>O=P)1)HAC1Y zyJW*}GK0D~iv30NLllSYSxQ+dx7Ju0K{|Mr{Ryz1@NuRwh84)ek@KrpKm=z`ipEF} zn6TBqQzSG&9&{uryo*IZv5Np3DtmnCr;GCf9kmS6lVa;xJJ@i?UJ6zD=X`m+TAE^LCkJ@ULe`So5gjv9o%PJ-qF3v>vR9{G2@(nnvB;N4$EdPYYyOM*^A3gmhP8raO-Kj)SSVr$m!}g zO?nUkr`_GzE2B+tB(2Vx=TLFpDqd63Es}@F3zw@-U@gmSXT2p(D}QHQiT7|xT|x(T zW_dz$#bYIJ6vvct!;Jz#`DB}KtAE9<2xA6t9qAg!ub@XnEXGO8rB%h={mNbaz6Cb+^JoCN`mD{q zM}0r|7Ga-S38fKE*mc-heVxq`WVT1v6F9IJJOepMk*|_f-6Iw7i@Yf^ePmQD8CW#P z8&jj1qeYxnh^vT8aO1N)BEAAS$Qrhzd$vc8{vz6zXsYi#tiBJjp`2pb1-KO6FXiv@ z#(qqLZy{S_O#c(cPEV=;EQ8KMIRe!+eY3T-RqTm>e)gFnvo{YPn%`}-^A*?-u>)*a z=KttNKcai?xrcu3*M4mnJ@U(@gWN^`-rkcq_u}udWU~gE$!D?tbhE_(#k8h^?QOd-g&lCWU$Efc28oZAx$!RZ5W)0a( zpw!F)X#*03Qir}N11*C2R4@ktk`T_4lM!fwxM$K8r}~{bBCWzRX(uLJDNSTT%XKg4 zFGoV@n-l`-L;(P9ik|?Gy+X<8l)`L*yJxSZ)vlh}V(q3{|KZI;WkvprU-$z3=5PK6 zeR3WzEGRdoO?4`EXJee5LCRV8KGyw@o7GsRs>Hp5ZEf7JkiV6N*O@v-e=UR2mxYIt zQq+hqohq=Vx@SOEi8eOOM5%i!`>R2sni?tYk#l6U6~)^4So#X@hin~fvcNM}HZcBK zOu;D>e!xSZ3jZYAbs2d;Bcf!bxs9OFMfS1*77bJR7UjVNA;gl4BQ|(t?%1)Tbn4Wp za#Z-Ox8B-T4_9>Wz4z)W+KCe<$_aAQ{2$*-#SRwB;g5XeBL&*gqetn^JMV1HWhy6A z^D~CYidh`e4}S22x-xjnEw_|>d`Ir>x8JUzKp*(P2g-YP_BgbN^RcerJp5c>mWh$M z4CBoB^Y1ff&Xjt2hMDuQzTw1qxPHcsVe)F=<;#~f54V%yGi)ALj2FXZyicD#tz(Sy zy#D&@j8Hj?QG&x45S*8TMJWrv#<% zs)Ba8JjoOyiEKiucyx8Fn^GQ9*7k23MeK%2P_9B-3Wtbj8RIt(Uz-?G21Say(g2RD z7wrW9ueB^vp~Gg)JAenQF1?4iL|ApWq&9&WWc|9@^YH5soixe?dV2x2{(+LHGlKg1 zV@F5h5i_aL4!WOa zUA{!G&wj@Fb7yPB%j{$9Z13n@%eUQj+bo-pxXC`gKb^0~dnXUDc~3iuuf6svegFI4 za~D^#qW#jBzEqScA5O#0A}eD#k@WhtYxDCfCI5-zTXbet#N4^@pql6$G8{gv<`>UB zPp{3&S`?2dfM$@72BmPl40Pd1v&$_FjIwZsi5Y`req<7(9S^s`e5H>Pa}CJ zPF++_E>0e4A<9Q_vNm?@&(tYdyKKEZZ+zkvbZUDNo57Pk9r?4$E9*=6u#h`^=x{My zPoFtWAGqrS<$x!?Ty~?Jl3G_NDNi-*I>8ki^ZN~U7TNJC;hTNHnew5&(FPc8m29;Q z-U&%IjzH*B=)+38RGh`)Ol)kbaa|opa1L9id*`$%8&4iw5Ny9;9~ba9GDXfNG049P zMg@%R07h_9{>kB882|oxHYEw~<6a>*I2sX+Pm?!+EFTupKUPRb;ZP z$no#OZ?gj=eZ$U`M5E{-0S#Ai_&AS*fij;;ep!X&znq8lLfu|)Tvz+pVH0J}d01yK z9^%-sBle*WeMl8N=NAW&9X_rLokD)c zW?t@ABaCmoGvnXGUb%*oH~-RLEFcsq&?yv~9Hr>kdhZG+2g@?r_0;-Xhe2$GB13GM+z=4X4_Y=3|g_S+91U2AsVHz zo?a>4WD?k-LlN!*;I#B(AZ+6d9SWTYBK}?K^Vok?tR}55`jwqQF{-eu92BgqC`5W> zEZfxRWbLj(Z>LPS@aM+$of7s}L;W_&iekAdDA)P)sfAt?2W%Fa93EI#Y6fZ@h*b9h zT0bK1I%91#oSY#>rflQ$)=*xRN^OtkB>N8uW`5(?>h)a&tkC<(3ZKs#xPx)N2L8Gf z%a4ko(c_z#-QOVqagtN_Xux;y8(5H6aXAc>9WY5Ed&}Ot=GcjI$8wkDFXxv70VG6I z6uCH5>73wZ|xYr&ezG&OgC6dw#8eK4gzbq z^0}tqFVQ2UN@FRFh;bk%FVukwWS^`(4oiX?i`@(rMz-*qOm8J~M9^S33~eI7L1iP8 zx?Gu6&u&=BSLusi`l1UhjSgZpkgt|KkKg|Gcj%Q@ zUoCaTL#%t{lMgmlmhuEALB6Q7Aogs+nHS4v#x;P97OGR-EnFtniRClFbrb`&lF%Ta zjzX5l?nN{(D8O+gM~qWBy^3@K3_}L`YLdY*KWV5W+%u4y5~;8#uUei$?o6&Dm?atANiUx4xR1cwPvu4>Yk%(pFU=AKP7cO3)=bw9?e*W~c^x_LI zmn&r0lib`qG#jah>Ch&B4i!g_okR(jE8l0QfJ4BWJ?YykZA-Fm(&JvkO3>#6Zw(1L zpfi?_L{%y};(C6L#tz=wm@~kJIvx7Z(QehwF(ex1eHyM1B>&0y8I<>TIz|cv4;W~r z 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

RVhXF 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

    oQrRpy3Uki8)_$AK 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 aKQ+#Z6a@$BZP*3yr=wx0UVYy_{Qm$m&4hgb literal 0 HcmV?d00001 diff --git a/doc/实时显示天气/菜单栏.png b/doc/实时显示天气/菜单栏.png new file mode 100644 index 0000000000000000000000000000000000000000..1ed2bce82848beed32beb8b8fcd191069dce6ada GIT binary patch literal 78920 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

    $@@P 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 F{tqA{fVThu literal 0 HcmV?d00001 From 2fe11d2da74cfaa67f7265f20bcb662117fffb31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E4=BB=95=E8=B1=AA?= <1710331409@qq.com> Date: Fri, 28 Apr 2023 15:51:22 +0800 Subject: [PATCH 6/9] 4.28 --- doc/字符统计/界面跳转顺序图.docx | Bin 0 -> 35684 bytes .../界面跳转顺序图.docx | Bin 0 -> 35684 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/字符统计/界面跳转顺序图.docx create mode 100644 doc/实时显示天气/界面跳转顺序图.docx diff --git a/doc/字符统计/界面跳转顺序图.docx b/doc/字符统计/界面跳转顺序图.docx new file mode 100644 index 0000000000000000000000000000000000000000..2319f6a96042b0233e4ce240b491c0e09dba35e2 GIT binary patch literal 35684 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 literal 0 HcmV?d00001 diff --git a/doc/实时显示天气/界面跳转顺序图.docx b/doc/实时显示天气/界面跳转顺序图.docx new file mode 100644 index 0000000000000000000000000000000000000000..2319f6a96042b0233e4ce240b491c0e09dba35e2 GIT binary patch literal 35684 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 literal 0 HcmV?d00001 From 0f4d70ea6007dfb261b3d56d3a3c3007c4b395b6 Mon Sep 17 00:00:00 2001 From: Conquer_CN <2832035049@qq.com> Date: Fri, 28 Apr 2023 16:04:46 +0800 Subject: [PATCH 7/9] =?UTF-8?q?4/28=20=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../天气显示.png | Bin .../界面跳转顺序图.docx | Bin .../菜单栏.png | Bin 3 files changed, 0 insertions(+), 0 deletions(-) rename doc/{实时显示天气 => 显示实时天气}/天气显示.png (100%) rename doc/{实时显示天气 => 显示实时天气}/界面跳转顺序图.docx (100%) rename doc/{实时显示天气 => 显示实时天气}/菜单栏.png (100%) diff --git a/doc/实时显示天气/天气显示.png b/doc/显示实时天气/天气显示.png similarity index 100% rename from doc/实时显示天气/天气显示.png rename to doc/显示实时天气/天气显示.png diff --git a/doc/实时显示天气/界面跳转顺序图.docx b/doc/显示实时天气/界面跳转顺序图.docx similarity index 100% rename from doc/实时显示天气/界面跳转顺序图.docx rename to doc/显示实时天气/界面跳转顺序图.docx diff --git a/doc/实时显示天气/菜单栏.png b/doc/显示实时天气/菜单栏.png similarity index 100% rename from doc/实时显示天气/菜单栏.png rename to doc/显示实时天气/菜单栏.png From eb91a71f154646e4c19ef213b269ee292e6d6aba Mon Sep 17 00:00:00 2001 From: pj36foInf <445038096@qq.com> Date: Fri, 28 Apr 2023 16:53:11 +0800 Subject: [PATCH 8/9] 4/28 --- .../物理体系结构体.png | Bin 0 -> 11371 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/显示实时天气/物理体系结构体.png diff --git a/doc/显示实时天气/物理体系结构体.png b/doc/显示实时天气/物理体系结构体.png new file mode 100644 index 0000000000000000000000000000000000000000..8d353ab97c41ff22be6b5fdfaca765ceda5c22b3 GIT binary patch literal 11371 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 KcZxJ0J^vr)Qb{@h literal 0 HcmV?d00001 From 8899bbe28896c194a21787b9ec1d92a78e3c0d36 Mon Sep 17 00:00:00 2001 From: pj36foInf <445038096@qq.com> Date: Fri, 28 Apr 2023 16:53:40 +0800 Subject: [PATCH 9/9] 4/28 --- doc/字符统计/物理体系结构图.png | Bin 0 -> 16772 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/字符统计/物理体系结构图.png diff --git a/doc/字符统计/物理体系结构图.png b/doc/字符统计/物理体系结构图.png new file mode 100644 index 0000000000000000000000000000000000000000..2cf1bc7811a1289415ad57b5ec79d21964c49c54 GIT binary patch literal 16772 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 literal 0 HcmV?d00001

    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