From 687f8ed24cff7a0bbce05bc4910440e86e973183 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=9C=E7=85=9C=E6=99=97?= <3383489395@qq.com> Date: Fri, 12 May 2023 13:55:54 +0800 Subject: [PATCH] Squashed commit of the following: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commit 4f6fc29c336d5253b3842c7774e606ce8ad210f5 Merge: 878c91a bb513ca Author: 陈禹昕 <2819428065@qq.com> Date: Fri Apr 28 08:42:18 2023 +0800 Merge branch 'master' of https://bdgit.educoder.net/pf6tfm8hg/cyxgitProject commit 878c91acba1c515293be04a329fd1754f686dcd1 Author: 陈禹昕 <2819428065@qq.com> Date: Fri Apr 28 08:42:05 2023 +0800 1 commit 08402c7784081a6b4dc97def82b080fdda79f3f8 Merge: a3f4189 e0613c4 Author: 陈禹昕 <2819428065@qq.com> Date: Thu Apr 27 18:58:43 2023 +0800 Merge branch 'dev-1' of https://bdgit.educoder.net/pf6tfm8hg/cyxgitProject commit a3f41893f88042687db9b4233d06ad57e0e8cdf4 Author: 陈禹昕 <2819428065@qq.com> Date: Thu Apr 27 18:58:10 2023 +0800 2 commit bb513cadc51a1e56c8b069fc5799905a1af3862f Merge: 8520940 e0613c4 Author: pf6tfm8hg <2819428065@qq.com> Date: Thu Apr 27 18:50:32 2023 +0800 Merge pull request '1' (#6) from dev-1 into master commit 8520940050d8f680e2c37d05ebfb5ebbf963d686 Author: 陈禹昕 <2819428065@qq.com> Date: Thu Apr 27 18:49:19 2023 +0800 210340006杜煜晗ui commit 4530df7a86d2d61741dfa040a315b8bea4cc1f38 Author: 陈禹昕 <2819428065@qq.com> Date: Fri Apr 21 16:07:02 2023 +0800 泛读报告 commit 820cb4437655f6f2a561ef29a7c7020b3494c9db Author: 陈禹昕 <2819428065@qq.com> Date: Fri Apr 21 13:42:03 2023 +0800 2 commit e0613c414bd300a11af5e7fc7b4c1c4e7042cb21 Merge: 08309e0 42384aa Author: 陈禹昕 <2819428065@qq.com> Date: Wed Apr 19 22:15:59 2023 +0800 Merge branch 'dev-1' of https://bdgit.educoder.net/pf6tfm8hg/cyxgitProject into dev-1 # Conflicts: # Notes-master/.gradle/7.5/fileHashes/fileHashes.lock commit 08309e03b2d0da99de2e2bb4f98c532c35fafd43 Author: 陈禹昕 <2819428065@qq.com> Date: Wed Apr 19 22:12:37 2023 +0800 210340003陈禹昕 commit 42384aac835f673c9f851babc6e5e7f401cba673 Merge: 33d2919 548abb3 Author: pf6tfm8hg <2819428065@qq.com> Date: Wed Apr 19 19:49:41 2023 +0800 Merge pull request '陈荣浩精读' (#3) from crh_branch into dev-1 commit 548abb34a372012fd9291131879abd3148f73c32 Author: 陈荣浩 <1652154670@qq.com> Date: Wed Apr 19 19:13:58 2023 +0800 2 commit af332a0b83fe86cc6ead5ff255fc6cfa6d66ac36 Author: 陈荣浩 <1652154670@qq.com> Date: Wed Apr 19 18:59:20 2023 +0800 精读notes包model包,gtask包exception文件 commit 17625e4ccd6b60de0944b5527f3c7b4f33c55325 Author: 张卓杨 <2424012376@qq.com> Date: Mon Apr 17 21:51:55 2023 +0800 张卓杨精读 commit b4ea29e9abdbd0be7251f859850ba0e15afcb403 Author: pyote5ckf <2424012376@qq.com> Date: Mon Apr 17 21:46:10 2023 +0800 Delete 'e76723e5a7' commit 27cf75b42216de83d0b129d0b4897080c199de04 Author: pyote5ckf <2424012376@qq.com> Date: Mon Apr 17 21:40:58 2023 +0800 ADD file via upload commit 385cf12527a3687f9f374e203d064f7cbd1d1be1 Author: 陈禹昕 <2819428065@qq.com> Date: Fri Apr 14 14:26:58 2023 +0800 1 commit 3a317b4998791d552915b0f939dfe2dab9d0cc3d Author: 陈禹昕 <2819428065@qq.com> Date: Fri Apr 14 13:17:45 2023 +0800 1 commit 03fba0d9fc78bccdfe27c03ec11becfba60b5a5d Author: 陈禹昕 <2819428065@qq.com> Date: Thu Apr 13 21:37:16 2023 +0800 泛读报告初版 commit badc9fc0c3a26a2dc53bf78f59e1e3f935596a84 Author: 陈禹昕 <2819428065@qq.com> Date: Fri Apr 7 14:02:58 2023 +0800 doc commit 33d291958591177c302bffd25cc9bb1bd3ce7c20 Merge: e76723e 7627b24 Author: pf6tfm8hg <2819428065@qq.com> Date: Fri Mar 31 14:40:42 2023 +0800 Merge pull request '111' (#1) from crh_branch into dev-1 commit 7627b24b7be2b680adec2e3c1c263423ac7d1ef9 Author: 陈荣浩 <1652154670@qq.com> Date: Fri Mar 31 14:38:43 2023 +0800 111 --- Notes-master/.idea/Notes-master.iml | 9 + Notes-master/.idea/modules.xml | 8 + .../c182d0c9c237ea8a46a92ccaae9bb5c751923a88 | 3 + .../.idea/sonarlint/issuestore/index.pb | 3 + .../c182d0c9c237ea8a46a92ccaae9bb5c751923a88 | 0 .../sonarlint/securityhotspotstore/index.pb | 3 + .../net/micode/notes/.scannerwork/.sonar_lock | 0 .../ui包/AlarmAlertActivity.txt | 192 +++ .../ui包/AlarmReceiver.txt | 20 + .../ui包/AlarmlnitReceiver.txt | 56 + .../ui包/DateTimePacker.txt | 491 ++++++++ .../ui包/DateTimePackerDialog.txt | 87 ++ doc/210340006杜煜晗/ui包/DropdownMenu.txt | 49 + .../ui包/FoldersListAdapter.txt | 71 ++ .../ui包/NoteEditActivity.txt | 1068 +++++++++++++++++ doc/210340006杜煜晗/ui包/NoteEditText.txt | 270 +++++ doc/210340006杜煜晗/ui包/NoteItemData.txt | 214 ++++ .../ui包/NotesListActivity.txt | 1002 ++++++++++++++++ .../ui包/NotesListAdapter.txt | 257 ++++ .../ui包/NotesListItem.txt | 116 ++ .../ui包/NotesPreferenceActivity.txt | 514 ++++++++ .../tool类/BackupUtils.txt | 310 +++++ doc/210340038张卓杨/tool类/DataUtils.txt | 264 ++++ .../tool类/GTaskStringUtils.txt | 100 ++ .../tool类/ResourceParser.txt | 163 +++ .../widget类/NoteWidgetProvider.txt | 118 ++ .../widget类/NoteWidgetProvider_2x.txt | 34 + .../widget类/NoteWidgetProvider_4x.txt | 33 + doc/陈禹昕组泛读报告.docx | Bin 0 -> 398484 bytes 29 files changed, 5455 insertions(+) create mode 100644 Notes-master/.idea/Notes-master.iml create mode 100644 Notes-master/.idea/modules.xml create mode 100644 Notes-master/.idea/sonarlint/issuestore/c/1/c182d0c9c237ea8a46a92ccaae9bb5c751923a88 create mode 100644 Notes-master/.idea/sonarlint/issuestore/index.pb create mode 100644 Notes-master/.idea/sonarlint/securityhotspotstore/c/1/c182d0c9c237ea8a46a92ccaae9bb5c751923a88 create mode 100644 Notes-master/.idea/sonarlint/securityhotspotstore/index.pb create mode 100644 Notes-master/app/src/main/java/net/micode/notes/.scannerwork/.sonar_lock create mode 100644 doc/210340006杜煜晗/ui包/AlarmAlertActivity.txt create mode 100644 doc/210340006杜煜晗/ui包/AlarmReceiver.txt create mode 100644 doc/210340006杜煜晗/ui包/AlarmlnitReceiver.txt create mode 100644 doc/210340006杜煜晗/ui包/DateTimePacker.txt create mode 100644 doc/210340006杜煜晗/ui包/DateTimePackerDialog.txt create mode 100644 doc/210340006杜煜晗/ui包/DropdownMenu.txt create mode 100644 doc/210340006杜煜晗/ui包/FoldersListAdapter.txt create mode 100644 doc/210340006杜煜晗/ui包/NoteEditActivity.txt create mode 100644 doc/210340006杜煜晗/ui包/NoteEditText.txt create mode 100644 doc/210340006杜煜晗/ui包/NoteItemData.txt create mode 100644 doc/210340006杜煜晗/ui包/NotesListActivity.txt create mode 100644 doc/210340006杜煜晗/ui包/NotesListAdapter.txt create mode 100644 doc/210340006杜煜晗/ui包/NotesListItem.txt create mode 100644 doc/210340006杜煜晗/ui包/NotesPreferenceActivity.txt create mode 100644 doc/210340038张卓杨/tool类/BackupUtils.txt create mode 100644 doc/210340038张卓杨/tool类/DataUtils.txt create mode 100644 doc/210340038张卓杨/tool类/GTaskStringUtils.txt create mode 100644 doc/210340038张卓杨/tool类/ResourceParser.txt create mode 100644 doc/210340038张卓杨/widget类/NoteWidgetProvider.txt create mode 100644 doc/210340038张卓杨/widget类/NoteWidgetProvider_2x.txt create mode 100644 doc/210340038张卓杨/widget类/NoteWidgetProvider_4x.txt create mode 100644 doc/陈禹昕组泛读报告.docx diff --git a/Notes-master/.idea/Notes-master.iml b/Notes-master/.idea/Notes-master.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/Notes-master/.idea/Notes-master.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/Notes-master/.idea/modules.xml b/Notes-master/.idea/modules.xml new file mode 100644 index 0000000..a1d3884 --- /dev/null +++ b/Notes-master/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/Notes-master/.idea/sonarlint/issuestore/c/1/c182d0c9c237ea8a46a92ccaae9bb5c751923a88 b/Notes-master/.idea/sonarlint/issuestore/c/1/c182d0c9c237ea8a46a92ccaae9bb5c751923a88 new file mode 100644 index 0000000..c005de0 --- /dev/null +++ b/Notes-master/.idea/sonarlint/issuestore/c/1/c182d0c9c237ea8a46a92ccaae9bb5c751923a88 @@ -0,0 +1,3 @@ + +[ +java:S1124"EReorder the modifiers to comply with the Java Language Specification.( \ No newline at end of file diff --git a/Notes-master/.idea/sonarlint/issuestore/index.pb b/Notes-master/.idea/sonarlint/issuestore/index.pb new file mode 100644 index 0000000..7a6e811 --- /dev/null +++ b/Notes-master/.idea/sonarlint/issuestore/index.pb @@ -0,0 +1,3 @@ + +k +;app/src/main/java/net/micode/notes/gtask/data/MetaData.java,c\1\c182d0c9c237ea8a46a92ccaae9bb5c751923a88 \ No newline at end of file diff --git a/Notes-master/.idea/sonarlint/securityhotspotstore/c/1/c182d0c9c237ea8a46a92ccaae9bb5c751923a88 b/Notes-master/.idea/sonarlint/securityhotspotstore/c/1/c182d0c9c237ea8a46a92ccaae9bb5c751923a88 new file mode 100644 index 0000000..e69de29 diff --git a/Notes-master/.idea/sonarlint/securityhotspotstore/index.pb b/Notes-master/.idea/sonarlint/securityhotspotstore/index.pb new file mode 100644 index 0000000..7a6e811 --- /dev/null +++ b/Notes-master/.idea/sonarlint/securityhotspotstore/index.pb @@ -0,0 +1,3 @@ + +k +;app/src/main/java/net/micode/notes/gtask/data/MetaData.java,c\1\c182d0c9c237ea8a46a92ccaae9bb5c751923a88 \ No newline at end of file diff --git a/Notes-master/app/src/main/java/net/micode/notes/.scannerwork/.sonar_lock b/Notes-master/app/src/main/java/net/micode/notes/.scannerwork/.sonar_lock new file mode 100644 index 0000000..e69de29 diff --git a/doc/210340006杜煜晗/ui包/AlarmAlertActivity.txt b/doc/210340006杜煜晗/ui包/AlarmAlertActivity.txt new file mode 100644 index 0000000..e3327bd --- /dev/null +++ b/doc/210340006杜煜晗/ui包/AlarmAlertActivity.txt @@ -0,0 +1,192 @@ +package net.micode.notes.ui; + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.DialogInterface.OnClickListener; +import android.content.DialogInterface.OnDismissListener; +import android.content.Intent; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.media.RingtoneManager; +import android.net.Uri; +import android.os.Bundle; +import android.os.PowerManager; +import android.provider.Settings; +import android.view.Window; +import android.view.WindowManager; + +import net.micode.notes.R; +import net.micode.notes.data.Notes; +import net.micode.notes.tool.DataUtils; + +import java.io.IOException; + +public class AlarmAlertActivity extends Activity implements OnClickListener, OnDismissListener { + private long mNoteId; //文本在数据库存储中的ID号 + private String mSnippet; //闹钟提示时出现的文本片段 + private static final int SNIPPET_PREW_MAX_LEN = 60; + MediaPlayer mPlayer; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + //Bundle类型的数据与Map类型的数据相似,都是以key-value的形式存储数据的 + //onsaveInstanceState方法是用来保存Activity的状态的 + //能从onCreate的参数savedInsanceState中获得状态数据 + requestWindowFeature(Window.FEATURE_NO_TITLE); + //界面显示——无标题 + + final Window win = getWindow(); + win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); + + if (!isScreenOn()) { + win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON + //保持窗体点亮 + | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON + //将窗体点亮 + | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON + //允许窗体点亮时锁屏 + | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR); + }//在手机锁屏后如果到了闹钟提示时间,点亮屏幕 + + Intent intent = getIntent(); + + try { + mNoteId = Long.valueOf(intent.getData().getPathSegments().get(1)); + mSnippet = DataUtils.getSnippetById(this.getContentResolver(), mNoteId); + //根据ID从数据库中获取标签的内容; + //getContentResolver()是实现数据共享,实例存储。 + mSnippet = mSnippet.length() > SNIPPET_PREW_MAX_LEN ? mSnippet.substring(0, + SNIPPET_PREW_MAX_LEN) + getResources().getString(R.string.notelist_string_info) + : mSnippet; + //判断标签片段是否达到符合长度 + } catch (IllegalArgumentException e) { + e.printStackTrace(); + return; + } + /* + try + { + // 代码区 + } + catch(Exception e) + { + // 异常处理 + } + 代码区如果有错误,就会返回所写异常的处理。*/ + mPlayer = new MediaPlayer(); + if (DataUtils.visibleInNoteDatabase(getContentResolver(), mNoteId, Notes.TYPE_NOTE)) { + showActionDialog(); + //弹出对话框 + playAlarmSound(); + //闹钟提示音激发 + } else { + finish(); + //完成闹钟动作 + } + } + + private boolean isScreenOn() { + //判断屏幕是否锁屏,调用系统函数判断,最后返回值是布尔类型 + PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); + return pm.isScreenOn(); + } + + private void playAlarmSound() { + //闹钟提示音激发 + Uri url = RingtoneManager.getActualDefaultRingtoneUri(this, RingtoneManager.TYPE_ALARM); + //调用系统的铃声管理URI,得到闹钟提示音 + int silentModeStreams = Settings.System.getInt(getContentResolver(), + Settings.System.MODE_RINGER_STREAMS_AFFECTED, 0); + + if ((silentModeStreams & (1 << AudioManager.STREAM_ALARM)) != 0) { + mPlayer.setAudioStreamType(silentModeStreams); + } else { + mPlayer.setAudioStreamType(AudioManager.STREAM_ALARM); + } + try { + mPlayer.setDataSource(this, url); + //方法:setDataSource(Context context, Uri uri) + //解释:无返回值,设置多媒体数据来源【根据 Uri】 + mPlayer.prepare(); + //准备同步 + mPlayer.setLooping(true); + //设置是否循环播放 + mPlayer.start(); + //开始播放 + } catch (IllegalArgumentException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + //e.printStackTrace()函数功能是抛出异常, 还将显示出更深的调用信息 + //System.out.println(e),这个方法打印出异常,并且输出在哪里出现的异常 + } catch (SecurityException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IllegalStateException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + private void showActionDialog() { + AlertDialog.Builder dialog = new AlertDialog.Builder(this); + //AlertDialog的构造方法全部是Protected的 + //所以不能直接通过new一个AlertDialog来创建出一个AlertDialog。 + //要创建一个AlertDialog,就要用到AlertDialog.Builder中的create()方法 + //如这里的dialog就是新建了一个AlertDialog + dialog.setTitle(R.string.app_name); + //为对话框设置标题 + dialog.setMessage(mSnippet); + //为对话框设置内容 + dialog.setPositiveButton(R.string.notealert_ok, this); + //给对话框添加"Yes"按钮 + if (isScreenOn()) { + dialog.setNegativeButton(R.string.notealert_enter, this); + }//对话框添加"No"按钮 + dialog.show().setOnDismissListener(this); + } + + public void onClick(DialogInterface dialog, int which) { + switch (which) { + //用which来选择click后下一步的操作 + case DialogInterface.BUTTON_NEGATIVE: + //这是取消操作 + Intent intent = new Intent(this, NoteEditActivity.class); + //实现两个类间的数据传输 + intent.setAction(Intent.ACTION_VIEW); + //设置动作属性 + intent.putExtra(Intent.EXTRA_UID, mNoteId); + //实现key-value对 + //EXTRA_UID为key;mNoteId为键 + startActivity(intent); + //开始动作 + break; + default: + //这是确定操作 + break; + } + } + + public void onDismiss(DialogInterface dialog) { + //忽略 + stopAlarmSound(); + //停止闹钟声音 + finish(); + //完成该动作 + } + + private void stopAlarmSound() { + if (mPlayer != null) { + mPlayer.stop(); + //停止播放 + mPlayer.release(); + //释放MediaPlayer对象 + mPlayer = null; + } + } +} \ No newline at end of file diff --git a/doc/210340006杜煜晗/ui包/AlarmReceiver.txt b/doc/210340006杜煜晗/ui包/AlarmReceiver.txt new file mode 100644 index 0000000..f35ed7b --- /dev/null +++ b/doc/210340006杜煜晗/ui包/AlarmReceiver.txt @@ -0,0 +1,20 @@ +package net.micode.notes.ui; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +public class AlarmReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + intent.setClass(context, AlarmAlertActivity.class); + //启动AlarmAlertActivity + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + //activity要存在于activity的栈中,而非activity的途径启动activity时必然不存在一个activity的栈 + //所以要新起一个栈装入启动的activity + context.startActivity(intent); + } +} +//这是实现alarm这个功能最接近用户层的包,基于上面的两个包, +//作用还需要深究但是对于setClass和addFlags的 + \ No newline at end of file diff --git a/doc/210340006杜煜晗/ui包/AlarmlnitReceiver.txt b/doc/210340006杜煜晗/ui包/AlarmlnitReceiver.txt new file mode 100644 index 0000000..353f4ae --- /dev/null +++ b/doc/210340006杜煜晗/ui包/AlarmlnitReceiver.txt @@ -0,0 +1,56 @@ +package net.micode.notes.ui; + +import android.app.AlarmManager; +import android.app.PendingIntent; +import android.content.BroadcastReceiver; +import android.content.ContentUris; +import android.content.Context; +import android.content.Intent; +import android.database.Cursor; + +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.NoteColumns; + + +public class AlarmInitReceiver extends BroadcastReceiver { + + private static final String [] PROJECTION = new String [] { + NoteColumns.ID, + NoteColumns.ALERTED_DATE + }; + //对数据库的操作,调用标签ID和闹钟时间 + private static final int COLUMN_ID = 0; + private static final int COLUMN_ALERTED_DATE = 1; + + @Override + public void onReceive(Context context, Intent intent) { + long currentDate = System.currentTimeMillis(); + //System.currentTimeMillis()产生一个当前的毫秒 + //这个毫秒其实就是自1970年1月1日0时起的毫秒数 + Cursor c = context.getContentResolver().query(Notes.CONTENT_NOTE_URI, + PROJECTION, + NoteColumns.ALERTED_DATE + ">? AND " + NoteColumns.TYPE + "=" + Notes.TYPE_NOTE, + new String[] { String.valueOf(currentDate) }, + //将long变量currentDate转化为字符串 + null); + //Cursor在这里的作用是通过查找数据库中的标签内容,找到和当前系统时间相等的标签 + + if (c != null) { + if (c.moveToFirst()) { + do { + long alertDate = c.getLong(COLUMN_ALERTED_DATE); + Intent sender = new Intent(context, AlarmReceiver.class); + sender.setData(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, c.getLong(COLUMN_ID))); + PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, sender, 0); + AlarmManager alermManager = (AlarmManager) context + .getSystemService(Context.ALARM_SERVICE); + alermManager.set(AlarmManager.RTC_WAKEUP, alertDate, pendingIntent); + } while (c.moveToNext()); + } + c.close(); + } + //然而通过网上查找资料发现,对于闹钟机制的启动,通常需要上面的几个步骤 + //如新建Intent、PendingIntent以及AlarmManager等 + //这里就是根据数据库里的闹钟时间创建一个闹钟机制 + } +} \ No newline at end of file diff --git a/doc/210340006杜煜晗/ui包/DateTimePacker.txt b/doc/210340006杜煜晗/ui包/DateTimePacker.txt new file mode 100644 index 0000000..c7fbbcd --- /dev/null +++ b/doc/210340006杜煜晗/ui包/DateTimePacker.txt @@ -0,0 +1,491 @@ +package net.micode.notes.ui; + +import java.text.DateFormatSymbols; +import java.util.Calendar; + +import net.micode.notes.R; + + +import android.content.Context; +import android.text.format.DateFormat; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.NumberPicker; + +public class DateTimePicker extends FrameLayout { + //FrameLayout是布局模板之一 + //所有的子元素全部在屏幕的右上方 + private static final boolean DEFAULT_ENABLE_STATE = true; + + private static final int HOURS_IN_HALF_DAY = 12; + private static final int HOURS_IN_ALL_DAY = 24; + private static final int DAYS_IN_ALL_WEEK = 7; + private static final int DATE_SPINNER_MIN_VAL = 0; + private static final int DATE_SPINNER_MAX_VAL = DAYS_IN_ALL_WEEK - 1; + private static final int HOUR_SPINNER_MIN_VAL_24_HOUR_VIEW = 0; + private static final int HOUR_SPINNER_MAX_VAL_24_HOUR_VIEW = 23; + private static final int HOUR_SPINNER_MIN_VAL_12_HOUR_VIEW = 1; + private static final int HOUR_SPINNER_MAX_VAL_12_HOUR_VIEW = 12; + private static final int MINUT_SPINNER_MIN_VAL = 0; + private static final int MINUT_SPINNER_MAX_VAL = 59; + private static final int AMPM_SPINNER_MIN_VAL = 0; + private static final int AMPM_SPINNER_MAX_VAL = 1; + //初始化控件 + private final NumberPicker mDateSpinner; + private final NumberPicker mHourSpinner; + private final NumberPicker mMinuteSpinner; + private final NumberPicker mAmPmSpinner; + //NumberPicker是数字选择器 + //这里定义的四个变量全部是在设置闹钟时需要选择的变量(如日期、时、分、上午或者下午) + private Calendar mDate; + //定义了Calendar类型的变量mDate,用于操作时间 + private String[] mDateDisplayValues = new String[DAYS_IN_ALL_WEEK]; + + private boolean mIsAm; + + private boolean mIs24HourView; + + private boolean mIsEnabled = DEFAULT_ENABLE_STATE; + + private boolean mInitialising; + + private OnDateTimeChangedListener mOnDateTimeChangedListener; + + private NumberPicker.OnValueChangeListener mOnDateChangedListener = new NumberPicker.OnValueChangeListener() { + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + mDate.add(Calendar.DAY_OF_YEAR, newVal - oldVal); + updateDateControl(); + onDateTimeChanged(); + } + };//OnValueChangeListener,这是时间改变监听器,这里主要是对日期的监听 + //将现在日期的值传递给mDate;updateDateControl是同步操作 + + private NumberPicker.OnValueChangeListener mOnHourChangedListener = new NumberPicker.OnValueChangeListener() { + //这里是对 小时(Hour) 的监听 + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + boolean isDateChanged = false; + Calendar cal = Calendar.getInstance(); + //声明一个Calendar的变量cal,便于后续的操作 + if (!mIs24HourView) { + if (!mIsAm && oldVal == HOURS_IN_HALF_DAY - 1 && newVal == HOURS_IN_HALF_DAY) { + cal.setTimeInMillis(mDate.getTimeInMillis()); + cal.add(Calendar.DAY_OF_YEAR, 1); + isDateChanged = true; + //这里是对于12小时制时,晚上11点和12点交替时对日期的更改 + } else if (mIsAm && oldVal == HOURS_IN_HALF_DAY && newVal == HOURS_IN_HALF_DAY - 1) { + cal.setTimeInMillis(mDate.getTimeInMillis()); + cal.add(Calendar.DAY_OF_YEAR, -1); + isDateChanged = true; + } + //这里是对于12小时制时,凌晨11点和12点交替时对日期的更改 + if (oldVal == HOURS_IN_HALF_DAY - 1 && newVal == HOURS_IN_HALF_DAY || + oldVal == HOURS_IN_HALF_DAY && newVal == HOURS_IN_HALF_DAY - 1) { + mIsAm = !mIsAm; + updateAmPmControl(); + }//这里是对于12小时制时,中午11点和12点交替时对AM和PM的更改 + } else { + if (oldVal == HOURS_IN_ALL_DAY - 1 && newVal == 0) { + cal.setTimeInMillis(mDate.getTimeInMillis()); + cal.add(Calendar.DAY_OF_YEAR, 1); + isDateChanged = true; + //这里是对于24小时制时,晚上11点和12点交替时对日期的更改 + } else if (oldVal == 0 && newVal == HOURS_IN_ALL_DAY - 1) { + cal.setTimeInMillis(mDate.getTimeInMillis()); + cal.add(Calendar.DAY_OF_YEAR, -1); + isDateChanged = true; + } + } //这里是对于12小时制时,凌晨11点和12点交替时对日期的更改 + int newHour = mHourSpinner.getValue() % HOURS_IN_HALF_DAY + (mIsAm ? 0 : HOURS_IN_HALF_DAY); + //通过数字选择器对newHour的赋值 + mDate.set(Calendar.HOUR_OF_DAY, newHour); + //通过set函数将新的Hour值传给mDate + onDateTimeChanged(); + if (isDateChanged) { + setCurrentYear(cal.get(Calendar.YEAR)); + setCurrentMonth(cal.get(Calendar.MONTH)); + setCurrentDay(cal.get(Calendar.DAY_OF_MONTH)); + } + } + }; + + private NumberPicker.OnValueChangeListener mOnMinuteChangedListener = new NumberPicker.OnValueChangeListener() { + @Override + //这里是对 分钟(Minute)改变的监听 + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + int minValue = mMinuteSpinner.getMinValue(); + int maxValue = mMinuteSpinner.getMaxValue(); + int offset = 0; + //设置offset,作为小时改变的一个记录数据 + if (oldVal == maxValue && newVal == minValue) { + offset += 1; + } else if (oldVal == minValue && newVal == maxValue) { + offset -= 1; + } + //如果原值为59,新值为0,则offset加1 + //如果原值为0,新值为59,则offset减1 + if (offset != 0) { + mDate.add(Calendar.HOUR_OF_DAY, offset); + mHourSpinner.setValue(getCurrentHour()); + updateDateControl(); + int newHour = getCurrentHourOfDay(); + if (newHour >= HOURS_IN_HALF_DAY) { + mIsAm = false; + updateAmPmControl(); + } else { + mIsAm = true; + updateAmPmControl(); + } + } + mDate.set(Calendar.MINUTE, newVal); + onDateTimeChanged(); + } + }; + + private NumberPicker.OnValueChangeListener mOnAmPmChangedListener = new NumberPicker.OnValueChangeListener() { + //对AM和PM的监听 + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + mIsAm = !mIsAm; + if (mIsAm) { + mDate.add(Calendar.HOUR_OF_DAY, -HOURS_IN_HALF_DAY); + } else { + mDate.add(Calendar.HOUR_OF_DAY, HOURS_IN_HALF_DAY); + } + updateAmPmControl(); + onDateTimeChanged(); + } + }; + + public interface OnDateTimeChangedListener { + void onDateTimeChanged(DateTimePicker view, int year, int month, + int dayOfMonth, int hourOfDay, int minute); + } + + public DateTimePicker(Context context) { + this(context, System.currentTimeMillis()); + }//通过对数据库的访问,获取当前的系统时间 + + public DateTimePicker(Context context, long date) { + this(context, date, DateFormat.is24HourFormat(context)); + }//上面函数的得到的是一个天文数字(1970至今的秒数),需要DateFormat将其变得有意义 + + public DateTimePicker(Context context, long date, boolean is24HourView) { + super(context); + //获取系统时间 + mDate = Calendar.getInstance(); + mInitialising = true; + mIsAm = getCurrentHourOfDay() >= HOURS_IN_HALF_DAY; + inflate(context, R.layout.datetime_picker, this); + //如果当前Activity里用到别的layout,比如对话框layout + //还要设置这个layout上的其他组件的内容,就必须用inflate()方法先将对话框的layout找出来 + //然后再用findViewById()找到它上面的其它组件 + mDateSpinner = (NumberPicker) findViewById(R.id.date); + mDateSpinner.setMinValue(DATE_SPINNER_MIN_VAL); + mDateSpinner.setMaxValue(DATE_SPINNER_MAX_VAL); + mDateSpinner.setOnValueChangedListener(mOnDateChangedListener); + + mHourSpinner = (NumberPicker) findViewById(R.id.hour); + mHourSpinner.setOnValueChangedListener(mOnHourChangedListener); + mMinuteSpinner = (NumberPicker) findViewById(R.id.minute); + mMinuteSpinner.setMinValue(MINUT_SPINNER_MIN_VAL); + mMinuteSpinner.setMaxValue(MINUT_SPINNER_MAX_VAL); + mMinuteSpinner.setOnLongPressUpdateInterval(100); + mMinuteSpinner.setOnValueChangedListener(mOnMinuteChangedListener); + + String[] stringsForAmPm = new DateFormatSymbols().getAmPmStrings(); + mAmPmSpinner = (NumberPicker) findViewById(R.id.amPm); + mAmPmSpinner.setMinValue(AMPM_SPINNER_MIN_VAL); + mAmPmSpinner.setMaxValue(AMPM_SPINNER_MAX_VAL); + mAmPmSpinner.setDisplayedValues(stringsForAmPm); + mAmPmSpinner.setOnValueChangedListener(mOnAmPmChangedListener); + + // update controls to initial state + updateDateControl(); + updateHourControl(); + updateAmPmControl(); + + set24HourView(is24HourView); + + // set to current time + setCurrentDate(date); + + setEnabled(isEnabled()); + + // set the content descriptions + mInitialising = false; + } + + @Override + public void setEnabled(boolean enabled) { + if (mIsEnabled == enabled) { + return; + } + super.setEnabled(enabled); + mDateSpinner.setEnabled(enabled); + mMinuteSpinner.setEnabled(enabled); + mHourSpinner.setEnabled(enabled); + mAmPmSpinner.setEnabled(enabled); + mIsEnabled = enabled; + } + //存在疑问!!!!!!!!!!!!!setEnabled的作用 + //下面的代码通过原程序的注释已经比较清晰,另外可以通过函数名来判断 + //下面的各函数主要是对上面代码引用到的各函数功能的实现 + @Override + public boolean isEnabled() { + return mIsEnabled; + } + + /** + * Get the current date in millis + * + * @return the current date in millis + */ + public long getCurrentDateInTimeMillis() { + return mDate.getTimeInMillis(); + }//实现函数——得到当前的秒数 + + /** + * Set the current date + * + * @param date The current date in millis + */ + public void setCurrentDate(long date) { + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(date); + setCurrentDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), + cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE)); + }//实现函数功能——设置当前的时间,参数是date + + /** + * Set the current date + * + * @param year The current year + * @param month The current month + * @param dayOfMonth The current dayOfMonth + * @param hourOfDay The current hourOfDay + * @param minute The current minute + */ + public void setCurrentDate(int year, int month, + int dayOfMonth, int hourOfDay, int minute) { + setCurrentYear(year); + setCurrentMonth(month); + setCurrentDay(dayOfMonth); + setCurrentHour(hourOfDay); + setCurrentMinute(minute); + }//实现函数功能——设置当前的时间,参数是各详细的变量 + + /** + * Get current year + * + * @return The current year + */ + //下面是得到year、month、day等值 + public int getCurrentYear() { + return mDate.get(Calendar.YEAR); + } + + /** + * Set current year + * + * @param year The current year + */ + public void setCurrentYear(int year) { + if (!mInitialising && year == getCurrentYear()) { + return; + } + mDate.set(Calendar.YEAR, year); + updateDateControl(); + onDateTimeChanged(); + } + + /** + * Get current month in the year + * + * @return The current month in the year + */ + public int getCurrentMonth() { + return mDate.get(Calendar.MONTH); + } + + /** + * Set current month in the year + * + * @param month The month in the year + */ + public void setCurrentMonth(int month) { + if (!mInitialising && month == getCurrentMonth()) { + return; + } + mDate.set(Calendar.MONTH, month); + updateDateControl(); + onDateTimeChanged(); + } + + /** + * Get current day of the month + * + * @return The day of the month + */ + public int getCurrentDay() { + return mDate.get(Calendar.DAY_OF_MONTH); + } + + /** + * Set current day of the month + * + * @param dayOfMonth The day of the month + */ + public void setCurrentDay(int dayOfMonth) { + if (!mInitialising && dayOfMonth == getCurrentDay()) { + return; + } + mDate.set(Calendar.DAY_OF_MONTH, dayOfMonth); + updateDateControl(); + onDateTimeChanged(); + } + + /** + * Get current hour in 24 hour mode, in the range (0~23) + * @return The current hour in 24 hour mode + */ + public int getCurrentHourOfDay() { + return mDate.get(Calendar.HOUR_OF_DAY); + } + + private int getCurrentHour() { + if (mIs24HourView){ + return getCurrentHourOfDay(); + } else { + int hour = getCurrentHourOfDay(); + if (hour > HOURS_IN_HALF_DAY) { + return hour - HOURS_IN_HALF_DAY; + } else { + return hour == 0 ? HOURS_IN_HALF_DAY : hour; + } + } + } + + /** + * Set current hour in 24 hour mode, in the range (0~23) + * + * @param hourOfDay + */ + public void setCurrentHour(int hourOfDay) { + if (!mInitialising && hourOfDay == getCurrentHourOfDay()) { + return; + } + mDate.set(Calendar.HOUR_OF_DAY, hourOfDay); + if (!mIs24HourView) { + if (hourOfDay >= HOURS_IN_HALF_DAY) { + mIsAm = false; + if (hourOfDay > HOURS_IN_HALF_DAY) { + hourOfDay -= HOURS_IN_HALF_DAY; + } + } else { + mIsAm = true; + if (hourOfDay == 0) { + hourOfDay = HOURS_IN_HALF_DAY; + } + } + updateAmPmControl(); + } + mHourSpinner.setValue(hourOfDay); + onDateTimeChanged(); + } + + /** + * Get currentMinute + * + * @return The Current Minute + */ + public int getCurrentMinute() { + return mDate.get(Calendar.MINUTE); + } + + /** + * Set current minute + */ + public void setCurrentMinute(int minute) { + if (!mInitialising && minute == getCurrentMinute()) { + return; + } + mMinuteSpinner.setValue(minute); + mDate.set(Calendar.MINUTE, minute); + onDateTimeChanged(); + } + + /** + * @return true if this is in 24 hour view else false. + */ + public boolean is24HourView () { + return mIs24HourView; + } + + /** + * Set whether in 24 hour or AM/PM mode. + * + * @param is24HourView True for 24 hour mode. False for AM/PM mode. + */ + public void set24HourView(boolean is24HourView) { + if (mIs24HourView == is24HourView) { + return; + } + mIs24HourView = is24HourView; + mAmPmSpinner.setVisibility(is24HourView ? View.GONE : View.VISIBLE); + int hour = getCurrentHourOfDay(); + updateHourControl(); + setCurrentHour(hour); + updateAmPmControl(); + } + + private void updateDateControl() { + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(mDate.getTimeInMillis()); + cal.add(Calendar.DAY_OF_YEAR, -DAYS_IN_ALL_WEEK / 2 - 1); + mDateSpinner.setDisplayedValues(null); + for (int i = 0; i < DAYS_IN_ALL_WEEK; ++i) { + cal.add(Calendar.DAY_OF_YEAR, 1); + mDateDisplayValues[i] = (String) DateFormat.format("MM.dd EEEE", cal); + } + mDateSpinner.setDisplayedValues(mDateDisplayValues); + mDateSpinner.setValue(DAYS_IN_ALL_WEEK / 2); + mDateSpinner.invalidate(); + }// 对于星期几的算法 + + private void updateAmPmControl() { + if (mIs24HourView) { + mAmPmSpinner.setVisibility(View.GONE); + } else { + int index = mIsAm ? Calendar.AM : Calendar.PM; + mAmPmSpinner.setValue(index); + mAmPmSpinner.setVisibility(View.VISIBLE); + }// 对于上下午操作的算法 + } + + private void updateHourControl() { + if (mIs24HourView) { + mHourSpinner.setMinValue(HOUR_SPINNER_MIN_VAL_24_HOUR_VIEW); + mHourSpinner.setMaxValue(HOUR_SPINNER_MAX_VAL_24_HOUR_VIEW); + } else { + mHourSpinner.setMinValue(HOUR_SPINNER_MIN_VAL_12_HOUR_VIEW); + mHourSpinner.setMaxValue(HOUR_SPINNER_MAX_VAL_12_HOUR_VIEW); + }// 对与小时的算法 + } + + /** + * Set the callback that indicates the 'Set' button has been pressed. + * @param callback the callback, if null will do nothing + */ + public void setOnDateTimeChangedListener(OnDateTimeChangedListener callback) { + mOnDateTimeChangedListener = callback; + } + + private void onDateTimeChanged() { + if (mOnDateTimeChangedListener != null) { + mOnDateTimeChangedListener.onDateTimeChanged(this, getCurrentYear(), + getCurrentMonth(), getCurrentDay(), getCurrentHourOfDay(), getCurrentMinute()); + } + } +} \ No newline at end of file diff --git a/doc/210340006杜煜晗/ui包/DateTimePackerDialog.txt b/doc/210340006杜煜晗/ui包/DateTimePackerDialog.txt new file mode 100644 index 0000000..c11de32 --- /dev/null +++ b/doc/210340006杜煜晗/ui包/DateTimePackerDialog.txt @@ -0,0 +1,87 @@ +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/210340006杜煜晗/ui包/DropdownMenu.txt b/doc/210340006杜煜晗/ui包/DropdownMenu.txt new file mode 100644 index 0000000..4c4cf90 --- /dev/null +++ b/doc/210340006杜煜晗/ui包/DropdownMenu.txt @@ -0,0 +1,49 @@ +package net.micode.notes.ui; + +import android.content.Context; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.Button; +import android.widget.PopupMenu; +import android.widget.PopupMenu.OnMenuItemClickListener; + +import net.micode.notes.R; + +public class DropdownMenu { + private Button mButton; + private PopupMenu mPopupMenu; + //声明一个下拉菜单 + private Menu mMenu; + + public DropdownMenu(Context context, Button button, int menuId) { + mButton = button; + mButton.setBackgroundResource(R.drawable.dropdown_icon); + //设置这个view的背景 + mPopupMenu = new PopupMenu(context, mButton); + mMenu = mPopupMenu.getMenu(); + mPopupMenu.getMenuInflater().inflate(menuId, mMenu); + //MenuInflater是用来实例化Menu目录下的Menu布局文件 + //根据ID来确认menu的内容选项 + mButton.setOnClickListener(new OnClickListener() { + public void onClick(View v) { + mPopupMenu.show(); + } + }); + } + + public void setOnDropdownMenuItemClickListener(OnMenuItemClickListener listener) { + if (mPopupMenu != null) { + mPopupMenu.setOnMenuItemClickListener(listener); + }//设置菜单的监听 + } + + public MenuItem findItem(int id) { + return mMenu.findItem(id); + }//对于菜单选项的初始化,根据索引搜索菜单需要的选项 + + public void setTitle(CharSequence title) { + mButton.setText(title); + }//布局文件,设置标题 +} \ No newline at end of file diff --git a/doc/210340006杜煜晗/ui包/FoldersListAdapter.txt b/doc/210340006杜煜晗/ui包/FoldersListAdapter.txt new file mode 100644 index 0000000..4fbe285 --- /dev/null +++ b/doc/210340006杜煜晗/ui包/FoldersListAdapter.txt @@ -0,0 +1,71 @@ +package net.micode.notes.ui; + +import android.content.Context; +import android.database.Cursor; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CursorAdapter; +import android.widget.LinearLayout; +import android.widget.TextView; + +import net.micode.notes.R; +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.NoteColumns; + + +public class FoldersListAdapter extends CursorAdapter { + //CursorAdapter是Cursor和ListView的接口 + //FoldersListAdapter继承了CursorAdapter的类 + //主要作用是便签数据库和用户的交互 + //这里就是用folder(文件夹)的形式展现给用户 + public static final String [] PROJECTION = { + NoteColumns.ID, + NoteColumns.SNIPPET + };//调用数据库中便签的ID和片段 + + public static final int ID_COLUMN = 0; + public static final int NAME_COLUMN = 1; + + public FoldersListAdapter(Context context, Cursor c) { + super(context, c); + // TODO Auto-generated constructor stub + }//数据库操作 + + @Override + public View newView(Context context, Cursor cursor, ViewGroup parent) { + //ViewGroup是容器 + return new FolderListItem(context); + }//创建一个文件夹,对于各文件夹中子标签的初始化 + + @Override + public void bindView(View view, Context context, Cursor cursor) { + if (view instanceof FolderListItem) { + String folderName = (cursor.getLong(ID_COLUMN) == Notes.ID_ROOT_FOLDER) ? context + .getString(R.string.menu_move_parent_folder) : cursor.getString(NAME_COLUMN); + ((FolderListItem) view).bind(folderName); + } + }//将各个布局文件绑定起来 + + public String getFolderName(Context context, int position) { + Cursor cursor = (Cursor) getItem(position); + return (cursor.getLong(ID_COLUMN) == Notes.ID_ROOT_FOLDER) ? context + .getString(R.string.menu_move_parent_folder) : cursor.getString(NAME_COLUMN); + }//根据数据库中标签的ID得到标签的各项内容 + + private class FolderListItem extends LinearLayout { + private TextView mName; + + public FolderListItem(Context context) { + super(context); + //操作数据库 + inflate(context, R.layout.folder_list_item, this); + //根据布局文件的名字等信息将其找出来 + mName = (TextView) findViewById(R.id.tv_folder_name); + } + + public void bind(String name) { + mName.setText(name); + } + } + +} \ No newline at end of file diff --git a/doc/210340006杜煜晗/ui包/NoteEditActivity.txt b/doc/210340006杜煜晗/ui包/NoteEditActivity.txt new file mode 100644 index 0000000..40d766a --- /dev/null +++ b/doc/210340006杜煜晗/ui包/NoteEditActivity.txt @@ -0,0 +1,1068 @@ + +package net.micode.notes.ui; + +import android.app.Activity; +import android.app.AlarmManager; +import android.app.AlertDialog; +import android.app.PendingIntent; +import android.app.SearchManager; +import android.appwidget.AppWidgetManager; +import android.content.ContentUris; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.SharedPreferences; +import android.graphics.Paint; +import android.os.Bundle; +import android.preference.PreferenceManager; +import android.text.Spannable; +import android.text.SpannableString; +import android.text.TextUtils; +import android.text.format.DateUtils; +import android.text.style.BackgroundColorSpan; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; +import android.view.MotionEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.WindowManager; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.CompoundButton.OnCheckedChangeListener; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; +import android.widget.Toast; + +import net.micode.notes.R; +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.TextNote; +import net.micode.notes.model.WorkingNote; +import net.micode.notes.model.WorkingNote.NoteSettingChangedListener; +import net.micode.notes.tool.DataUtils; +import net.micode.notes.tool.ResourceParser; +import net.micode.notes.tool.ResourceParser.TextAppearanceResources; +import net.micode.notes.ui.DateTimePickerDialog.OnDateTimeSetListener; +import net.micode.notes.ui.NoteEditText.OnTextViewChangeListener; +import net.micode.notes.widget.NoteWidgetProvider_2x; +import net.micode.notes.widget.NoteWidgetProvider_4x; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + + +public class NoteEditActivity extends Activity implements OnClickListener, + NoteSettingChangedListener, OnTextViewChangeListener { + //该类主要是针对标签的编辑 + //继承了系统内部许多和监听有关的类 + private class HeadViewHolder { + public TextView tvModified; + + public ImageView ivAlertIcon; + + public TextView tvAlertDate; + + public ImageView ibSetBgColor; + } + //使用Map实现数据存储 + private static final Map sBgSelectorBtnsMap = new HashMap(); + static { + sBgSelectorBtnsMap.put(R.id.iv_bg_yellow, ResourceParser.YELLOW); + sBgSelectorBtnsMap.put(R.id.iv_bg_red, ResourceParser.RED); + sBgSelectorBtnsMap.put(R.id.iv_bg_blue, ResourceParser.BLUE); + sBgSelectorBtnsMap.put(R.id.iv_bg_green, ResourceParser.GREEN); + sBgSelectorBtnsMap.put(R.id.iv_bg_white, ResourceParser.WHITE); + //put函数是将指定值和指定键相连 + } + + private static final Map sBgSelectorSelectionMap = new HashMap(); + static { + sBgSelectorSelectionMap.put(ResourceParser.YELLOW, R.id.iv_bg_yellow_select); + sBgSelectorSelectionMap.put(ResourceParser.RED, R.id.iv_bg_red_select); + sBgSelectorSelectionMap.put(ResourceParser.BLUE, R.id.iv_bg_blue_select); + sBgSelectorSelectionMap.put(ResourceParser.GREEN, R.id.iv_bg_green_select); + sBgSelectorSelectionMap.put(ResourceParser.WHITE, R.id.iv_bg_white_select); + //put函数是将指定值和指定键相连 + } + + private static final Map sFontSizeBtnsMap = new HashMap(); + static { + sFontSizeBtnsMap.put(R.id.ll_font_large, ResourceParser.TEXT_LARGE); + sFontSizeBtnsMap.put(R.id.ll_font_small, ResourceParser.TEXT_SMALL); + sFontSizeBtnsMap.put(R.id.ll_font_normal, ResourceParser.TEXT_MEDIUM); + sFontSizeBtnsMap.put(R.id.ll_font_super, ResourceParser.TEXT_SUPER); + //put函数是将指定值和指定键相连 + } + + private static final Map sFontSelectorSelectionMap = new HashMap(); + static { + sFontSelectorSelectionMap.put(ResourceParser.TEXT_LARGE, R.id.iv_large_select); + sFontSelectorSelectionMap.put(ResourceParser.TEXT_SMALL, R.id.iv_small_select); + sFontSelectorSelectionMap.put(ResourceParser.TEXT_MEDIUM, R.id.iv_medium_select); + sFontSelectorSelectionMap.put(ResourceParser.TEXT_SUPER, R.id.iv_super_select); + //put函数是将指定值和指定键相连 + } + + private static final String TAG = "NoteEditActivity"; + + private HeadViewHolder mNoteHeaderHolder; + + private View mHeadViewPanel; + //私有化一个界面操作mHeadViewPanel,对表头的操作 + private View mNoteBgColorSelector; + //私有化一个界面操作mNoteBgColorSelector,对背景颜色的操作 + private View mFontSizeSelector; + //私有化一个界面操作mFontSizeSelector,对标签字体的操作 + private EditText mNoteEditor; + //声明编辑控件,对文本操作 + private View mNoteEditorPanel; + //私有化一个界面操作mNoteEditorPanel,文本编辑的控制板 + //private WorkingNote mWorkingNote; + public WorkingNote mWorkingNote; + //对模板WorkingNote的初始化 + private SharedPreferences mSharedPrefs; + //私有化SharedPreferences的数据存储方式 + //它的本质是基于XML文件存储key-value键值对数据 + private int mFontSizeId; + //用于操作字体的大小 + private static final String PREFERENCE_FONT_SIZE = "pref_font_size"; + + private static final int SHORTCUT_ICON_TITLE_MAX_LEN = 10; + + public static final String TAG_CHECKED = String.valueOf('\u221A'); + public static final String TAG_UNCHECKED = String.valueOf('\u25A1'); + + private LinearLayout mEditTextList; + //线性布局 + private String mUserQuery; + private Pattern mPattern; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + this.setContentView(R.layout.note_edit); + //对数据库的访问操作 + if (savedInstanceState == null && !initActivityState(getIntent())) { + finish(); + return; + } + initResources(); + } + + /** + * Current activity may be killed when the memory is low. Once it is killed, for another time + * user load this activity, we should restore the former state + */ + @Override + protected void onRestoreInstanceState(Bundle savedInstanceState) { + super.onRestoreInstanceState(savedInstanceState); + if (savedInstanceState != null && savedInstanceState.containsKey(Intent.EXTRA_UID)) { + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.putExtra(Intent.EXTRA_UID, savedInstanceState.getLong(Intent.EXTRA_UID)); + if (!initActivityState(intent)) { + finish(); + return; + } + Log.d(TAG, "Restoring from killed activity"); + }//为防止内存不足时程序的终止,在这里有一个保存现场的函数 + } + + private boolean initActivityState(Intent intent) { + /** + * If the user specified the {@link Intent#ACTION_VIEW} but not provided with id, + * then jump to the NotesListActivity + */ + mWorkingNote = null; + if (TextUtils.equals(Intent.ACTION_VIEW, intent.getAction())) { + long noteId = intent.getLongExtra(Intent.EXTRA_UID, 0); + mUserQuery = ""; + //如果用户实例化标签时,系统并未给出标签ID + /** + * Starting from the searched result + */ + //根据键值查找ID + if (intent.hasExtra(SearchManager.EXTRA_DATA_KEY)) { + noteId = Long.parseLong(intent.getStringExtra(SearchManager.EXTRA_DATA_KEY)); + mUserQuery = intent.getStringExtra(SearchManager.USER_QUERY); + } + //如果ID在数据库中未找到 + if (!DataUtils.visibleInNoteDatabase(getContentResolver(), noteId, Notes.TYPE_NOTE)) { + Intent jump = new Intent(this, NotesListActivity.class); + startActivity(jump); + //程序将跳转到上面声明的intent——jump + showToast(R.string.error_note_not_exist); + finish(); + return false; + } + //ID在数据库中找到 + else { + mWorkingNote = WorkingNote.load(this, noteId); + if (mWorkingNote == null) { + Log.e(TAG, "load note failed with note id" + noteId); + //打印出红色的错误信息 + finish(); + return false; + } + } + //setSoftInputMode——软键盘输入模式 + getWindow().setSoftInputMode( + WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN + | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + } else if(TextUtils.equals(Intent.ACTION_INSERT_OR_EDIT, intent.getAction())) { + // intent.getAction() + // 大多用于broadcast发送广播时给机制(intent)设置一个action,就是一个字符串 + // 用户可以通过receive(接受)intent,通过 getAction得到的字符串,来决定做什么 + long folderId = intent.getLongExtra(Notes.INTENT_EXTRA_FOLDER_ID, 0); + int widgetId = intent.getIntExtra(Notes.INTENT_EXTRA_WIDGET_ID, + AppWidgetManager.INVALID_APPWIDGET_ID); + int widgetType = intent.getIntExtra(Notes.INTENT_EXTRA_WIDGET_TYPE, + Notes.TYPE_WIDGET_INVALIDE); + int bgResId = intent.getIntExtra(Notes.INTENT_EXTRA_BACKGROUND_ID, + ResourceParser.getDefaultBgId(this)); + // intent.getInt(Long、String)Extra是对各变量的语法分析 + // Parse call-record note + String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); + long callDate = intent.getLongExtra(Notes.INTENT_EXTRA_CALL_DATE, 0); + if (callDate != 0 && phoneNumber != null) { + if (TextUtils.isEmpty(phoneNumber)) { + Log.w(TAG, "The call record number is null"); + } + long noteId = 0; + if ((noteId = DataUtils.getNoteIdByPhoneNumberAndCallDate(getContentResolver(), + phoneNumber, callDate)) > 0) { + mWorkingNote = WorkingNote.load(this, noteId); + if (mWorkingNote == null) { + Log.e(TAG, "load call note failed with note id" + noteId); + finish(); + return false; + } + //将电话号码与手机的号码簿相关 + } else { + mWorkingNote = WorkingNote.createEmptyNote(this, folderId, widgetId, + widgetType, bgResId); + mWorkingNote.convertToCallNote(phoneNumber, callDate); + // + } + } else { + mWorkingNote = WorkingNote.createEmptyNote(this, folderId, widgetId, widgetType, + bgResId); + }//创建一个新的WorkingNote + + getWindow().setSoftInputMode( + WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE + | WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); + } else { + Log.e(TAG, "Intent not specified action, should not support"); + finish(); + return false; + } + mWorkingNote.setOnSettingStatusChangedListener(this); + return true; + } + + @Override + protected void onResume() { + super.onResume(); + initNoteScreen(); + } + + private void initNoteScreen() { + //对界面的初始化操作 + mNoteEditor.setTextAppearance(this, TextAppearanceResources + .getTexAppearanceResource(mFontSizeId)); + //设置外观 + if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) { + switchToListMode(mWorkingNote.getContent()); + } else { + mNoteEditor.setText(getHighlightQueryResult(mWorkingNote.getContent(), mUserQuery)); + mNoteEditor.setSelection(mNoteEditor.getText().length()); + } + for (Integer id : sBgSelectorSelectionMap.keySet()) { + findViewById(sBgSelectorSelectionMap.get(id)).setVisibility(View.GONE); + } + mHeadViewPanel.setBackgroundResource(mWorkingNote.getTitleBgResId()); + mNoteEditorPanel.setBackgroundResource(mWorkingNote.getBgColorResId()); + + mNoteHeaderHolder.tvModified.setText(DateUtils.formatDateTime(this, + mWorkingNote.getModifiedDate(), DateUtils.FORMAT_SHOW_DATE + | DateUtils.FORMAT_NUMERIC_DATE | DateUtils.FORMAT_SHOW_TIME + | DateUtils.FORMAT_SHOW_YEAR)); + + /** + * TODO: Add the menu for setting alert. Currently disable it because the DateTimePicker + * is not ready + */ + showAlertHeader(); + } + //设置闹钟的显示 + private void showAlertHeader() { + if (mWorkingNote.hasClockAlert()) { + long time = System.currentTimeMillis(); + if (time > mWorkingNote.getAlertDate()) { + mNoteHeaderHolder.tvAlertDate.setText(R.string.note_alert_expired); + } + //如果系统时间大于了闹钟设置的时间,那么闹钟失效 + else { + mNoteHeaderHolder.tvAlertDate.setText(DateUtils.getRelativeTimeSpanString( + mWorkingNote.getAlertDate(), time, DateUtils.MINUTE_IN_MILLIS)); + } + mNoteHeaderHolder.tvAlertDate.setVisibility(View.VISIBLE); + mNoteHeaderHolder.ivAlertIcon.setVisibility(View.VISIBLE); + //显示闹钟开启的图标 + } else { + mNoteHeaderHolder.tvAlertDate.setVisibility(View.GONE); + mNoteHeaderHolder.ivAlertIcon.setVisibility(View.GONE); + }; + } + + @Override + protected void onNewIntent(Intent intent) { + super.onNewIntent(intent); + initActivityState(intent); + } + + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + /** + * For new note without note id, we should firstly save it to + * generate a id. If the editing note is not worth saving, there + * is no id which is equivalent to create new note + */ + if (!mWorkingNote.existInDatabase()) { + saveNote(); + } + //在创建一个新的标签时,先在数据库中匹配 + //如果不存在,那么先在数据库中存储 + outState.putLong(Intent.EXTRA_UID, mWorkingNote.getNoteId()); + Log.d(TAG, "Save working note id: " + mWorkingNote.getNoteId() + " onSaveInstanceState"); + } + + @Override + //MotionEvent是对屏幕触控的传递机制 + public boolean dispatchTouchEvent(MotionEvent ev) { + if (mNoteBgColorSelector.getVisibility() == View.VISIBLE + && !inRangeOfView(mNoteBgColorSelector, ev)) { + mNoteBgColorSelector.setVisibility(View.GONE); + return true; + }//颜色选择器在屏幕上可见 + + if (mFontSizeSelector.getVisibility() == View.VISIBLE + && !inRangeOfView(mFontSizeSelector, ev)) { + mFontSizeSelector.setVisibility(View.GONE); + return true; + }//字体大小选择器在屏幕上可见 + return super.dispatchTouchEvent(ev); + } + //对屏幕触控的坐标进行操作 + private boolean inRangeOfView(View view, MotionEvent ev) { + int []location = new int[2]; + view.getLocationOnScreen(location); + int x = location[0]; + int y = location[1]; + if (ev.getX() < x + || ev.getX() > (x + view.getWidth()) + || ev.getY() < y + || ev.getY() > (y + view.getHeight())) + //如果触控的位置超出了给定的范围,返回false + { + return false; + } + return true; + } + + private void initResources() { + mHeadViewPanel = findViewById(R.id.note_title); + mNoteHeaderHolder = new HeadViewHolder(); + mNoteHeaderHolder.tvModified = (TextView) findViewById(R.id.tv_modified_date); + mNoteHeaderHolder.ivAlertIcon = (ImageView) findViewById(R.id.iv_alert_icon); + mNoteHeaderHolder.tvAlertDate = (TextView) findViewById(R.id.tv_alert_date); + mNoteHeaderHolder.ibSetBgColor = (ImageView) findViewById(R.id.btn_set_bg_color); + mNoteHeaderHolder.ibSetBgColor.setOnClickListener(this); + mNoteEditor = (EditText) findViewById(R.id.note_edit_view); + mNoteEditorPanel = findViewById(R.id.sv_note_edit); + mNoteBgColorSelector = findViewById(R.id.note_bg_color_selector); + for (int id : sBgSelectorBtnsMap.keySet()) { + ImageView iv = (ImageView) findViewById(id); + iv.setOnClickListener(this); + }//对标签各项属性内容的初始化 + + mFontSizeSelector = findViewById(R.id.font_size_selector); + for (int id : sFontSizeBtnsMap.keySet()) { + View view = findViewById(id); + view.setOnClickListener(this); + };//对字体大小的选择 + mSharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); + mFontSizeId = mSharedPrefs.getInt(PREFERENCE_FONT_SIZE, ResourceParser.BG_DEFAULT_FONT_SIZE); + /** + * HACKME: Fix bug of store the resource id in shared preference. + * The id may larger than the length of resources, in this case, + * return the {@link ResourceParser#BG_DEFAULT_FONT_SIZE} + */ + if(mFontSizeId >= TextAppearanceResources.getResourcesSize()) { + mFontSizeId = ResourceParser.BG_DEFAULT_FONT_SIZE; + } + mEditTextList = (LinearLayout) findViewById(R.id.note_edit_list); + } + + @Override + protected void onPause() { + super.onPause(); + if(saveNote()) { + Log.d(TAG, "Note data was saved with length:" + mWorkingNote.getContent().length()); + } + clearSettingState(); + } + //和桌面小工具的同步 + private void updateWidget() { + Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE); + if (mWorkingNote.getWidgetType() == Notes.TYPE_WIDGET_2X) { + intent.setClass(this, NoteWidgetProvider_2x.class); + } else if (mWorkingNote.getWidgetType() == Notes.TYPE_WIDGET_4X) { + intent.setClass(this, NoteWidgetProvider_4x.class); + } else { + Log.e(TAG, "Unspported widget type"); + return; + } + + intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] { + mWorkingNote.getWidgetId() + }); + + sendBroadcast(intent); + setResult(RESULT_OK, intent); + } + + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.btn_set_bg_color) { + mNoteBgColorSelector.setVisibility(View.VISIBLE); + findViewById(sBgSelectorSelectionMap.get(mWorkingNote.getBgColorId())).setVisibility( + - View.VISIBLE); + } else if (sBgSelectorBtnsMap.containsKey(id)) { + findViewById(sBgSelectorSelectionMap.get(mWorkingNote.getBgColorId())).setVisibility( + View.GONE); + mWorkingNote.setBgColorId(sBgSelectorBtnsMap.get(id)); + mNoteBgColorSelector.setVisibility(View.GONE); + } else if (sFontSizeBtnsMap.containsKey(id)) { + findViewById(sFontSelectorSelectionMap.get(mFontSizeId)).setVisibility(View.GONE); + mFontSizeId = sFontSizeBtnsMap.get(id); + mSharedPrefs.edit().putInt(PREFERENCE_FONT_SIZE, mFontSizeId).commit(); + findViewById(sFontSelectorSelectionMap.get(mFontSizeId)).setVisibility(View.VISIBLE); + if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) { + getWorkingText(); + switchToListMode(mWorkingNote.getContent()); + } else { + mNoteEditor.setTextAppearance(this, + TextAppearanceResources.getTexAppearanceResource(mFontSizeId)); + } + mFontSizeSelector.setVisibility(View.GONE); + } + }//************************存在问题 + + @Override + public void onBackPressed() { + if(clearSettingState()) { + return; + } + + saveNote(); + super.onBackPressed(); + } + + private boolean clearSettingState() { + if (mNoteBgColorSelector.getVisibility() == View.VISIBLE) { + mNoteBgColorSelector.setVisibility(View.GONE); + return true; + } else if (mFontSizeSelector.getVisibility() == View.VISIBLE) { + mFontSizeSelector.setVisibility(View.GONE); + return true; + } + return false; + } + + public void onBackgroundColorChanged() { + findViewById(sBgSelectorSelectionMap.get(mWorkingNote.getBgColorId())).setVisibility( + View.VISIBLE); + mNoteEditorPanel.setBackgroundResource(mWorkingNote.getBgColorResId()); + mHeadViewPanel.setBackgroundResource(mWorkingNote.getTitleBgResId()); + } + + @Override + //对选择菜单的准备 + public boolean onPrepareOptionsMenu(Menu menu) { + if (isFinishing()) { + return true; + } + clearSettingState(); + menu.clear(); + if (mWorkingNote.getFolderId() == Notes.ID_CALL_RECORD_FOLDER) { + getMenuInflater().inflate(R.menu.call_note_edit, menu); + // MenuInflater是用来实例化Menu目录下的Menu布局文件的 + } else { + getMenuInflater().inflate(R.menu.note_edit, menu); + } + if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) { + menu.findItem(R.id.menu_list_mode).setTitle(R.string.menu_normal_mode); + } else { + menu.findItem(R.id.menu_list_mode).setTitle(R.string.menu_list_mode); + } + if (mWorkingNote.hasClockAlert()) { + menu.findItem(R.id.menu_alert).setVisible(false); + } else { + menu.findItem(R.id.menu_delete_remind).setVisible(false); + } + return true; + } + + @Override + /* + * 函数功能:动态改变菜单选项内容 + * 函数实现:如下注释 + */ + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + //根据菜单的id来编剧相关项目 + case R.id.menu_new_note: + //创建一个新的便签 + createNewNote(); + break; + case R.id.menu_delete: + //删除便签 + AlertDialog.Builder builder = new AlertDialog.Builder(this); + //创建关于删除操作的对话框 + builder.setTitle(getString(R.string.alert_title_delete)); + // 设置标签的标题为alert_title_delete + builder.setIcon(android.R.drawable.ic_dialog_alert); + //设置对话框图标 + builder.setMessage(getString(R.string.alert_message_delete_note)); + //设置对话框内容 + builder.setPositiveButton(android.R.string.ok, + new DialogInterface.OnClickListener() { + //建立按键监听器 + public void onClick(DialogInterface dialog, int which) { + //点击所触发事件 + deleteCurrentNote(); + // 删除单签便签 + finish(); + } + }); + //添加“YES”按钮 + builder.setNegativeButton(android.R.string.cancel, null); + //添加“NO”的按钮 + builder.show(); + //显示对话框 + break; + case R.id.menu_font_size: + //字体大小的编辑 + mFontSizeSelector.setVisibility(View.VISIBLE); + // 将字体选择器置为可见 + findViewById(sFontSelectorSelectionMap.get(mFontSizeId)).setVisibility(View.VISIBLE); + // 通过id找到相应的大小 + break; + case R.id.menu_list_mode: + //选择列表模式 + mWorkingNote.setCheckListMode(mWorkingNote.getCheckListMode() == 0 ? + TextNote.MODE_CHECK_LIST : 0); + break; + case R.id.menu_share: + //菜单共享 + getWorkingText(); + sendTo(this, mWorkingNote.getContent()); + // 用sendto函数将运行文本发送到遍历的本文内 + break; + case R.id.menu_send_to_desktop: + //发送到桌面 + sendToDesktop(); + break; + case R.id.menu_alert: + //创建提醒器 + setReminder(); + break; + case R.id.menu_delete_remind: + //删除日期提醒 + mWorkingNote.setAlertDate(0, false); + break; + default: + break; + } + return true; + } + + /* + * 函数功能:建立事件提醒器 + * 函数实现:如下注释 + */ + private void setReminder() { + DateTimePickerDialog d = new DateTimePickerDialog(this, System.currentTimeMillis()); + // 建立修改时间日期的对话框 + d.setOnDateTimeSetListener(new OnDateTimeSetListener() { + public void OnDateTimeSet(AlertDialog dialog, long date) { + mWorkingNote.setAlertDate(date , true); + //选择提醒的日期 + } + }); + //建立时间日期的监听器 + d.show(); + //显示对话框 + } + + /** + * Share note to apps that support {@link Intent#ACTION_SEND} action + * and {@text/plain} type + */ + /* + * 函数功能:共享便签 + * 函数实现:如下注释 + */ + private void sendTo(Context context, String info) { + Intent intent = new Intent(Intent.ACTION_SEND); + //建立intent链接选项 + intent.putExtra(Intent.EXTRA_TEXT, info); + //将需要传递的便签信息放入text文件中 + intent.setType("text/plain"); + //编辑连接器的类型 + context.startActivity(intent); + //在acti中进行链接 + } + + /* + * 函数功能:创建一个新的便签 + * 函数实现:如下注释 + */ + private void createNewNote() { + // Firstly, save current editing notes + //保存当前便签 + saveNote(); + + // For safety, start a new NoteEditActivity + finish(); + Intent intent = new Intent(this, NoteEditActivity.class); + //设置链接器 + intent.setAction(Intent.ACTION_INSERT_OR_EDIT); + //该活动定义为创建或编辑 + intent.putExtra(Notes.INTENT_EXTRA_FOLDER_ID, mWorkingNote.getFolderId()); + //将运行便签的id添加到INTENT_EXTRA_FOLDER_ID标记中 + startActivity(intent); + //开始activity并链接 + } + + /* + * 函数功能:删除当前便签 + * 函数实现:如下注释 + */ + private void deleteCurrentNote() { + if (mWorkingNote.existInDatabase()) { + //假如当前运行的便签内存有数据 + HashSet ids = new HashSet(); + long id = mWorkingNote.getNoteId(); + if (id != Notes.ID_ROOT_FOLDER) { + ids.add(id); + //如果不是头文件夹建立一个hash表把便签id存起来 + } else { + Log.d(TAG, "Wrong note id, should not happen"); + //否则报错 + } + if (!isSyncMode()) { + //在非同步模式情况下 + //删除操作 + if (!DataUtils.batchDeleteNotes(getContentResolver(), ids)) { + Log.e(TAG, "Delete Note error"); + } + } else { + //同步模式 + //移动至垃圾文件夹的操作 + if (!DataUtils.batchMoveToFolder(getContentResolver(), ids, Notes.ID_TRASH_FOLER)) { + Log.e(TAG, "Move notes to trash folder error, should not happens"); + } + } + } + mWorkingNote.markDeleted(true); + //将这些标签的删除标记置为true + } + + /* + * 函数功能:判断是否为同步模式 + * 函数实现:直接看NotesPreferenceActivity中同步名称是否为空 + */ + private boolean isSyncMode() { + return NotesPreferenceActivity.getSyncAccountName(this).trim().length() > 0; + } + + /* + * 函数功能:设置提醒时间 + * 函数实现:如下注释 + */ + public void onClockAlertChanged(long date, boolean set) { + /** + * User could set clock to an unsaved note, so before setting the + * alert clock, we should save the note first + */ + if (!mWorkingNote.existInDatabase()) { + //首先保存已有的便签 + saveNote(); + } + if (mWorkingNote.getNoteId() > 0) { + Intent intent = new Intent(this, AlarmReceiver.class); + intent.setData(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, mWorkingNote.getNoteId())); + //若有有运行的便签就是建立一个链接器将标签id都存在uri中 + PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0); + AlarmManager alarmManager = ((AlarmManager) getSystemService(ALARM_SERVICE)); + //设置提醒管理器 + showAlertHeader(); + if(!set) { + alarmManager.cancel(pendingIntent); + } else { + alarmManager.set(AlarmManager.RTC_WAKEUP, date, pendingIntent); + } + //如果用户设置了时间,就通过提醒管理器设置一个监听事项 + } else { + /** + * There is the condition that user has input nothing (the note is + * not worthy saving), we have no note id, remind the user that he + * should input something + */ + //没有运行的便签就报错 + Log.e(TAG, "Clock alert setting error"); + showToast(R.string.error_note_empty_for_clock); + } + } + + /* + * 函数功能:Widget发生改变的所触发的事件 + */ + public void onWidgetChanged() { + updateWidget();//更新Widget + } + + /* + * 函数功能: 删除编辑文本框所触发的事件 + * 函数实现:如下注释 + */ + public void onEditTextDelete(int index, String text) { + int childCount = mEditTextList.getChildCount(); + if (childCount == 1) { + return; + } + //没有编辑框的话直接返回 + for (int i = index + 1; i < childCount; i++) { + ((NoteEditText) mEditTextList.getChildAt(i).findViewById(R.id.et_edit_text)) + .setIndex(i - 1); + //通过id把编辑框存在便签编辑框中 + } + + mEditTextList.removeViewAt(index); + //删除特定位置的视图 + NoteEditText edit = null; + if(index == 0) { + edit = (NoteEditText) mEditTextList.getChildAt(0).findViewById( + R.id.et_edit_text); + } else { + edit = (NoteEditText) mEditTextList.getChildAt(index - 1).findViewById( + R.id.et_edit_text); + } + //通过id把编辑框存在空的NoteEditText中 + int length = edit.length(); + edit.append(text); + edit.requestFocus();//请求优先完成该此 编辑 + edit.setSelection(length);//定位到length位置处的条目 + } + + /* + * 函数功能:进入编辑文本框所触发的事件 + * 函数实现:如下注释 + */ + public void onEditTextEnter(int index, String text) { + /** + * Should not happen, check for debug + */ + if(index > mEditTextList.getChildCount()) { + Log.e(TAG, "Index out of mEditTextList boundrary, should not happen"); + //越界把偶偶 + } + + View view = getListItem(text, index); + mEditTextList.addView(view, index); + //建立一个新的视图并添加到编辑文本框内 + NoteEditText edit = (NoteEditText) view.findViewById(R.id.et_edit_text); + edit.requestFocus();//请求优先操作 + edit.setSelection(0);//定位到起始位置 + for (int i = index + 1; i < mEditTextList.getChildCount(); i++) { + ((NoteEditText) mEditTextList.getChildAt(i).findViewById(R.id.et_edit_text)) + .setIndex(i); + //遍历子文本框并设置对应对下标 + } + } + + /* + * 函数功能:切换至列表模式 + * 函数实现:如下注释 + */ + private void switchToListMode(String text) { + mEditTextList.removeAllViews(); + String[] items = text.split("\n"); + int index = 0; + //清空所有视图,初始化下标 + for (String item : items) { + if(!TextUtils.isEmpty(item)) { + mEditTextList.addView(getListItem(item, index)); + index++; + //遍历所有文本单元并添加到文本框中 + } + } + mEditTextList.addView(getListItem("", index)); + mEditTextList.getChildAt(index).findViewById(R.id.et_edit_text).requestFocus(); + //优先请求此操作 + + mNoteEditor.setVisibility(View.GONE); + //便签编辑器不可见 + mEditTextList.setVisibility(View.VISIBLE); + //将文本编辑框置为可见 + } + + /* + * 函数功能:获取高亮效果的反馈情况 + * 函数实现:如下注释 + */ + private Spannable getHighlightQueryResult(String fullText, String userQuery) { + SpannableString spannable = new SpannableString(fullText == null ? "" : fullText); + //新建一个效果选项 + if (!TextUtils.isEmpty(userQuery)) { + mPattern = Pattern.compile(userQuery); + //将用户的询问进行解析 + Matcher m = mPattern.matcher(fullText); + //建立一个状态机检查Pattern并进行匹配 + int start = 0; + while (m.find(start)) { + spannable.setSpan( + new BackgroundColorSpan(this.getResources().getColor( + R.color.user_query_highlight)), m.start(), m.end(), + Spannable.SPAN_INCLUSIVE_EXCLUSIVE); + //设置背景颜色 + start = m.end(); + //跟新起始位置 + } + } + return spannable; + } + + /* + * 函数功能:获取列表项 + * 函数实现:如下注释 + */ + private View getListItem(String item, int index) { + View view = LayoutInflater.from(this).inflate(R.layout.note_edit_list_item, null); + //创建一个视图 + final NoteEditText edit = (NoteEditText) view.findViewById(R.id.et_edit_text); + edit.setTextAppearance(this, TextAppearanceResources.getTexAppearanceResource(mFontSizeId)); + //创建一个文本编辑框并设置可见性 + CheckBox cb = ((CheckBox) view.findViewById(R.id.cb_edit_item)); + cb.setOnCheckedChangeListener(new OnCheckedChangeListener() { + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + if (isChecked) { + edit.setPaintFlags(edit.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); + } else { + edit.setPaintFlags(Paint.ANTI_ALIAS_FLAG | Paint.DEV_KERN_TEXT_FLAG); + } + } + }); + //建立一个打钩框并设置监听器 + + if (item.startsWith(TAG_CHECKED)) { + //选择勾选 + cb.setChecked(true); + edit.setPaintFlags(edit.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); + item = item.substring(TAG_CHECKED.length(), item.length()).trim(); + } else if (item.startsWith(TAG_UNCHECKED)) { + //选择不勾选 + cb.setChecked(false); + edit.setPaintFlags(Paint.ANTI_ALIAS_FLAG | Paint.DEV_KERN_TEXT_FLAG); + item = item.substring(TAG_UNCHECKED.length(), item.length()).trim(); + } + + edit.setOnTextViewChangeListener(this); + edit.setIndex(index); + edit.setText(getHighlightQueryResult(item, mUserQuery)); + //运行编辑框的监听器对该行为作出反应,并设置下标及文本内容 + return view; + } + + /* + * 函数功能:便签内容发生改变所 触发的事件 + * 函数实现:如下注释 + */ + public void onTextChange(int index, boolean hasText) { + if (index >= mEditTextList.getChildCount()) { + Log.e(TAG, "Wrong index, should not happen"); + return; + //越界报错 + } + if(hasText) { + mEditTextList.getChildAt(index).findViewById(R.id.cb_edit_item).setVisibility(View.VISIBLE); + } else { + mEditTextList.getChildAt(index).findViewById(R.id.cb_edit_item).setVisibility(View.GONE); + } + //如果内容不为空则将其子编辑框可见性置为可见,否则不可见 + } + + /* + * 函数功能:检查模式和列表模式的切换 + * 函数实现:如下注释 + */ + public void onCheckListModeChanged(int oldMode, int newMode) { + if (newMode == TextNote.MODE_CHECK_LIST) { + switchToListMode(mNoteEditor.getText().toString()); + //检查模式切换到列表模式 + } else { + if (!getWorkingText()) { + mWorkingNote.setWorkingText(mWorkingNote.getContent().replace(TAG_UNCHECKED + " ", + "")); + } + //若是获取到文本就改变其检查标记 + mNoteEditor.setText(getHighlightQueryResult(mWorkingNote.getContent(), mUserQuery)); + mEditTextList.setVisibility(View.GONE); + mNoteEditor.setVisibility(View.VISIBLE); + //修改文本编辑器的内容和可见性 + } + } + + /* + * 函数功能:设置勾选选项表并返回是否勾选的标记 + * 函数实现:如下注释 + */ + private boolean getWorkingText() { + boolean hasChecked = false; + //初始化check标记 + if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) { + // 若模式为CHECK_LIST + StringBuilder sb = new StringBuilder(); + //创建可变字符串 + for (int i = 0; i < mEditTextList.getChildCount(); i++) { + View view = mEditTextList.getChildAt(i); + //遍历所有子编辑框的视图 + NoteEditText edit = (NoteEditText) view.findViewById(R.id.et_edit_text); + if (!TextUtils.isEmpty(edit.getText())) { + //若文本不为空 + if (((CheckBox) view.findViewById(R.id.cb_edit_item)).isChecked()) { + //该选项框已打钩 + sb.append(TAG_CHECKED).append(" ").append(edit.getText()).append("\n"); + hasChecked = true; + //扩展字符串为已打钩并把标记置true + } else { + sb.append(TAG_UNCHECKED).append(" ").append(edit.getText()).append("\n"); + //扩展字符串添加未打钩 + } + } + } + mWorkingNote.setWorkingText(sb.toString()); + //利用编辑好的字符串设置运行便签的内容 + } else { + mWorkingNote.setWorkingText(mNoteEditor.getText().toString()); + // 若不是该模式直接用编辑器中的内容设置运行中标签的内容 + } + return hasChecked; + } + + /* + * 函数功能:保存便签 + * 函数实现:如下注释 + */ + private boolean saveNote() { + getWorkingText(); + boolean saved = mWorkingNote.saveNote(); + //运行 getWorkingText()之后保存 + if (saved) { + /** + * There are two modes from List view to edit view, open one note, + * create/edit a node. Opening node requires to the original + * position in the list when back from edit view, while creating a + * new node requires to the top of the list. This code + * {@link #RESULT_OK} is used to identify the create/edit state + */ + //如英文注释所说链接RESULT_OK是为了识别保存的2种情况,一是创建后保存,二是修改后保存 + setResult(RESULT_OK); + } + return saved; + } + + /* + * 函数功能:将便签发送至桌面 + * 函数实现:如下注释 + */ + private void sendToDesktop() { + /** + * Before send message to home, we should make sure that current + * editing note is exists in databases. So, for new note, firstly + * save it + */ + if (!mWorkingNote.existInDatabase()) { + saveNote(); + //若不存在数据也就是新的标签就保存起来先 + } + + if (mWorkingNote.getNoteId() > 0) { + //若是有内容 + Intent sender = new Intent(); + Intent shortcutIntent = new Intent(this, NoteEditActivity.class); + //建立发送到桌面的连接器 + shortcutIntent.setAction(Intent.ACTION_VIEW); + //链接为一个视图 + shortcutIntent.putExtra(Intent.EXTRA_UID, mWorkingNote.getNoteId()); + sender.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); + sender.putExtra(Intent.EXTRA_SHORTCUT_NAME, + makeShortcutIconTitle(mWorkingNote.getContent())); + sender.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, + Intent.ShortcutIconResource.fromContext(this, R.drawable.icon_app)); + sender.putExtra("duplicate", true); + //将便签的相关信息都添加到要发送的文件里 + sender.setAction("com.android.launcher.action.INSTALL_SHORTCUT"); + //设置sneder的行为是发送 + showToast(R.string.info_note_enter_desktop); + sendBroadcast(sender); + //显示到桌面 + } else { + /** + * There is the condition that user has input nothing (the note is + * not worthy saving), we have no note id, remind the user that he + * should input something + */ + Log.e(TAG, "Send to desktop error"); + showToast(R.string.error_note_empty_for_send_to_desktop); + //空便签直接报错 + } + } + + /* + * 函数功能:编辑小图标的标题 + * 函数实现:如下注释 + */ + private String makeShortcutIconTitle(String content) { + content = content.replace(TAG_CHECKED, ""); + content = content.replace(TAG_UNCHECKED, ""); + return content.length() > SHORTCUT_ICON_TITLE_MAX_LEN ? content.substring(0, + SHORTCUT_ICON_TITLE_MAX_LEN) : content; + //直接设置为content中的内容并返回,有勾选和未勾选2种 + } + + /* + * 函数功能:显示提示的视图 + * 函数实现:根据下标显示对应的提示 + */ + private void showToast(int resId) { + showToast(resId, Toast.LENGTH_SHORT); + } + + /* + * 函数功能:持续显示提示的视图 + * 函数实现:根据下标和持续的时间(duration)编辑提示视图并显示 + */ + private void showToast(int resId, int duration) { + Toast.makeText(this, resId, duration).show(); + } +} \ No newline at end of file diff --git a/doc/210340006杜煜晗/ui包/NoteEditText.txt b/doc/210340006杜煜晗/ui包/NoteEditText.txt new file mode 100644 index 0000000..fa3db89 --- /dev/null +++ b/doc/210340006杜煜晗/ui包/NoteEditText.txt @@ -0,0 +1,270 @@ +package net.micode.notes.ui; + +import android.content.Context; +import android.graphics.Rect; +import android.text.Layout; +import android.text.Selection; +import android.text.Spanned; +import android.text.TextUtils; +import android.text.style.URLSpan; +import android.util.AttributeSet; +import android.util.Log; +import android.view.ContextMenu; +import android.view.KeyEvent; +import android.view.MenuItem; +import android.view.MenuItem.OnMenuItemClickListener; +import android.view.MotionEvent; +import android.widget.EditText; + +import net.micode.notes.R; + +import java.util.HashMap; +import java.util.Map; + +//继承edittext,设置便签设置文本框 +public class NoteEditText extends EditText { + private static final String TAG = "NoteEditText"; + private int mIndex; + private int mSelectionStartBeforeDelete; + + private static final String SCHEME_TEL = "tel:" ; + private static final String SCHEME_HTTP = "http:" ; + private static final String SCHEME_EMAIL = "mailto:" ; + + ///建立一个字符和整数的hash表,用于链接电话,网站,还有邮箱 + private static final Map sSchemaActionResMap = new HashMap(); + static { + sSchemaActionResMap.put(SCHEME_TEL, R.string.note_link_tel); + sSchemaActionResMap.put(SCHEME_HTTP, R.string.note_link_web); + sSchemaActionResMap.put(SCHEME_EMAIL, R.string.note_link_email); + } + + /** + * Call by the {@link NoteEditActivity} to delete or add edit text + */ + //在NoteEditActivity中删除或添加文本的操作,可以看做是一个文本是否被变的标记,英文注释已说明的很清楚 + public interface OnTextViewChangeListener { + /** + * Delete current edit text when {@link KeyEvent#KEYCODE_DEL} happens + * and the text is null + */ + //处理删除按键时的操作 + void onEditTextDelete(int index, String text); + + /** + * Add edit text after current edit text when {@link KeyEvent#KEYCODE_ENTER} + * happen + */ + //处理进入按键时的操作 + void onEditTextEnter(int index, String text); + + /** + * Hide or show item option when text change + */ + void onTextChange(int index, boolean hasText); + } + + private OnTextViewChangeListener mOnTextViewChangeListener; + + //根据context设置文本 + public NoteEditText(Context context) { + super(context, null);//用super引用父类变量 + mIndex = 0; + } + + //设置当前光标 + public void setIndex(int index) { + mIndex = index; + } + + //初始化文本修改标记 + public void setOnTextViewChangeListener(OnTextViewChangeListener listener) { + mOnTextViewChangeListener = listener; + } + + //AttributeSet 百度了一下是自定义空控件属性,用于维护便签动态变化的属性 + //初始化便签 + public NoteEditText(Context context, AttributeSet attrs) { + super(context, attrs, android.R.attr.editTextStyle); + } + + // 根据defstyle自动初始化 + public NoteEditText(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + // TODO Auto-generated construct or stub + } + + @Override + //view里的函数,处理手机屏幕的所有事件 + /*参数event为手机屏幕触摸事件封装类的对象,其中封装了该事件的所有信息, + 例如触摸的位置、触摸的类型以及触摸的时间等。该对象会在用户触摸手机屏幕时被创建。*/ + public boolean onTouchEvent(MotionEvent event) { + switch (event.getAction()) { + //重写了需要处理屏幕被按下的事件 + case MotionEvent.ACTION_DOWN: + //跟新当前坐标值 + int x = (int) event.getX(); + int y = (int) event.getY(); + x -= getTotalPaddingLeft(); + y -= getTotalPaddingTop(); + x += getScrollX(); + y += getScrollY(); + + //用布局控件layout根据x,y的新值设置新的位置 + Layout layout = getLayout(); + int line = layout.getLineForVertical(y); + int off = layout.getOffsetForHorizontal(line, x); + + //更新光标新的位置 + Selection.setSelection(getText(), off); + break; + } + + return super.onTouchEvent(event); + } + + @Override + /* + * 函数功能:处理用户按下一个键盘按键时会触发 的事件 + * 实现过程:如下注释 + */ + public boolean onKeyDown(int keyCode, KeyEvent event) { + switch (keyCode) { + //根据按键的 Unicode 编码值来处理 + case KeyEvent.KEYCODE_ENTER: + //“进入”按键 + if (mOnTextViewChangeListener != null) { + return false; + } + break; + case KeyEvent.KEYCODE_DEL: + //“删除”按键 + mSelectionStartBeforeDelete = getSelectionStart(); + break; + default: + break; + } + //继续执行父类的其他点击事件 + return super.onKeyDown(keyCode, event); + } + + @Override + /* + * 函数功能:处理用户松开一个键盘按键时会触发 的事件 + * 实现方式:如下注释 + */ + public boolean onKeyUp(int keyCode, KeyEvent event) { + switch(keyCode) { + //根据按键的 Unicode 编码值来处理,有删除和进入2种操作 + case KeyEvent.KEYCODE_DEL: + if (mOnTextViewChangeListener != null) { + //若是被修改过 + if (0 == mSelectionStartBeforeDelete && mIndex != 0) { + //若之前有被修改并且文档不为空 + mOnTextViewChangeListener.onEditTextDelete(mIndex, getText().toString()); + //利用上文OnTextViewChangeListener对KEYCODE_DEL按键情况的删除函数进行删除 + return true; + } + } else { + Log.d(TAG, "OnTextViewChangeListener was not seted"); + //其他情况报错,文档的改动监听器并没有建立 + } + break; + case KeyEvent.KEYCODE_ENTER: + //同上也是分为监听器是否建立2种情况 + if (mOnTextViewChangeListener != null) { + int selectionStart = getSelectionStart(); + //获取当前位置 + String text = getText().subSequence(selectionStart, length()).toString(); + //获取当前文本 + setText(getText().subSequence(0, selectionStart)); + //根据获取的文本设置当前文本 + mOnTextViewChangeListener.onEditTextEnter(mIndex + 1, text); + //当{@link KeyEvent#KEYCODE_ENTER}添加新文本 + } else { + Log.d(TAG, "OnTextViewChangeListener was not seted"); + //其他情况报错,文档的改动监听器并没有建立 + } + break; + default: + break; + } + //继续执行父类的其他按键弹起的事件 + return super.onKeyUp(keyCode, event); + } + + @Override + /* + * 函数功能:当焦点发生变化时,会自动调用该方法来处理焦点改变的事件 + * 实现方式:如下注释 + * 参数:focused表示触发该事件的View是否获得了焦点,当该控件获得焦点时,Focused等于true,否则等于false。 + direction表示焦点移动的方向,用数值表示 + Rect:表示在触发事件的View的坐标系中,前一个获得焦点的矩形区域,即表示焦点是从哪里来的。如果不可用则为null + */ + protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { + if (mOnTextViewChangeListener != null) { + //若监听器已经建立 + if (!focused && TextUtils.isEmpty(getText())) { + //获取到焦点并且文本不为空 + mOnTextViewChangeListener.onTextChange(mIndex, false); + //mOnTextViewChangeListener子函数,置false隐藏事件选项 + } else { + mOnTextViewChangeListener.onTextChange(mIndex, true); + //mOnTextViewChangeListener子函数,置true显示事件选项 + } + } + //继续执行父类的其他焦点变化的事件 + super.onFocusChanged(focused, direction, previouslyFocusedRect); + } + + @Override + /* + * 函数功能:生成上下文菜单 + * 函数实现:如下注释 + */ + protected void onCreateContextMenu(ContextMenu menu) { + if (getText() instanceof Spanned) { + //有文本存在 + int selStart = getSelectionStart(); + int selEnd = getSelectionEnd(); + //获取文本开始和结尾位置 + + int min = Math.min(selStart, selEnd); + int max = Math.max(selStart, selEnd); + //获取开始到结尾的最大值和最小值 + + final URLSpan[] urls = ((Spanned) getText()).getSpans(min, max, URLSpan.class); + //设置url的信息的范围值 + if (urls.length == 1) { + int defaultResId = 0; + for(String schema: sSchemaActionResMap.keySet()) { + //获取计划表中所有的key值 + if(urls[0].getURL().indexOf(schema) >= 0) { + //若url可以添加则在添加后将defaultResId置为key所映射的值 + defaultResId = sSchemaActionResMap.get(schema); + break; + } + } + + if (defaultResId == 0) { + //defaultResId == 0则说明url并没有添加任何东西,所以置为连接其他SchemaActionResMap的值 + defaultResId = R.string.note_link_other; + } + + //建立菜单 + menu.add(0, 0, 0, defaultResId).setOnMenuItemClickListener( + new OnMenuItemClickListener() { + //新建按键监听器 + public boolean onMenuItemClick(MenuItem item) { + // goto a new intent + urls[0].onClick(NoteEditText.this); + //根据相应的文本设置菜单的按键 + return true; + } + }); + } + } + //继续执行父类的其他菜单创建的事件 + super.onCreateContextMenu(menu); + } +} \ No newline at end of file diff --git a/doc/210340006杜煜晗/ui包/NoteItemData.txt b/doc/210340006杜煜晗/ui包/NoteItemData.txt new file mode 100644 index 0000000..7b9be8d --- /dev/null +++ b/doc/210340006杜煜晗/ui包/NoteItemData.txt @@ -0,0 +1,214 @@ +package net.micode.notes.ui; + +import android.content.Context; +import android.database.Cursor; +import android.text.TextUtils; + +import net.micode.notes.data.Contact; +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.tool.DataUtils; + + +public class NoteItemData { + static final String [] PROJECTION = new String [] { + NoteColumns.ID, + NoteColumns.ALERTED_DATE, + NoteColumns.BG_COLOR_ID, + NoteColumns.CREATED_DATE, + NoteColumns.HAS_ATTACHMENT, + NoteColumns.MODIFIED_DATE, + NoteColumns.NOTES_COUNT, + NoteColumns.PARENT_ID, + NoteColumns.SNIPPET, + NoteColumns.TYPE, + NoteColumns.WIDGET_ID, + NoteColumns.WIDGET_TYPE, + }; + //常量标记和数据就不一一标记了,意义翻译基本就知道 + private static final int ID_COLUMN = 0; + private static final int ALERTED_DATE_COLUMN = 1; + private static final int BG_COLOR_ID_COLUMN = 2; + private static final int CREATED_DATE_COLUMN = 3; + private static final int HAS_ATTACHMENT_COLUMN = 4; + private static final int MODIFIED_DATE_COLUMN = 5; + private static final int NOTES_COUNT_COLUMN = 6; + private static final int PARENT_ID_COLUMN = 7; + private static final int SNIPPET_COLUMN = 8; + private static final int TYPE_COLUMN = 9; + private static final int WIDGET_ID_COLUMN = 10; + private static final int WIDGET_TYPE_COLUMN = 11; + + private long mId; + private long mAlertDate; + private int mBgColorId; + private long mCreatedDate; + private boolean mHasAttachment; + private long mModifiedDate; + private int mNotesCount; + private long mParentId; + private String mSnippet; + private int mType; + private int mWidgetId; + private int mWidgetType; + private String mName; + private String mPhoneNumber; + + private boolean mIsLastItem; + private boolean mIsFirstItem; + private boolean mIsOnlyOneItem; + private boolean mIsOneNoteFollowingFolder; + private boolean mIsMultiNotesFollowingFolder; + //初始化NoteItemData,主要利用光标cursor获取的东西 + public NoteItemData(Context context, Cursor cursor) { + //getxxx为转换格式 + mId = cursor.getLong(ID_COLUMN); + mAlertDate = cursor.getLong(ALERTED_DATE_COLUMN); + mBgColorId = cursor.getInt(BG_COLOR_ID_COLUMN); + mCreatedDate = cursor.getLong(CREATED_DATE_COLUMN); + mHasAttachment = (cursor.getInt(HAS_ATTACHMENT_COLUMN) > 0) ? true : false; + mModifiedDate = cursor.getLong(MODIFIED_DATE_COLUMN); + mNotesCount = cursor.getInt(NOTES_COUNT_COLUMN); + mParentId = cursor.getLong(PARENT_ID_COLUMN); + mSnippet = cursor.getString(SNIPPET_COLUMN); + mSnippet = mSnippet.replace(NoteEditActivity.TAG_CHECKED, "").replace( + NoteEditActivity.TAG_UNCHECKED, ""); + mType = cursor.getInt(TYPE_COLUMN); + mWidgetId = cursor.getInt(WIDGET_ID_COLUMN); + mWidgetType = cursor.getInt(WIDGET_TYPE_COLUMN); + + //初始化电话号码的信息 + mPhoneNumber = ""; + if (mParentId == Notes.ID_CALL_RECORD_FOLDER) { + mPhoneNumber = DataUtils.getCallNumberByNoteId(context.getContentResolver(), mId); + if (!TextUtils.isEmpty(mPhoneNumber)) {//mphonenumber里有符合字符串,则用contart功能连接 + mName = Contact.getContact(context, mPhoneNumber); + if (mName == null) { + mName = mPhoneNumber; + } + } + } + + if (mName == null) { + mName = ""; + } + checkPostion(cursor); + } + ///根据鼠标的位置设置标记,和位置 + private void checkPostion(Cursor cursor) { + //初始化几个标记,cursor具体功能笔记中已提到,不一一叙述 + mIsLastItem = cursor.isLast() ? true : false; + mIsFirstItem = cursor.isFirst() ? true : false; + mIsOnlyOneItem = (cursor.getCount() == 1); + //初始化“多重子文件”“单一子文件”2个标记 + mIsMultiNotesFollowingFolder = false; + mIsOneNoteFollowingFolder = false; + + //主要是设置上诉2标记 + if (mType == Notes.TYPE_NOTE && !mIsFirstItem) {//若是note格式并且不是第一个元素 + int position = cursor.getPosition(); + if (cursor.moveToPrevious()) {//获取光标位置后看上一行 + if (cursor.getInt(TYPE_COLUMN) == Notes.TYPE_FOLDER + || cursor.getInt(TYPE_COLUMN) == Notes.TYPE_SYSTEM) {//若光标满足系统或note格式 + if (cursor.getCount() > (position + 1)) { + mIsMultiNotesFollowingFolder = true;//若是数据行数大于但前位置+1则设置成正确 + } else { + mIsOneNoteFollowingFolder = true;//否则单一文件夹标记为true + } + } + if (!cursor.moveToNext()) {//若不能再往下走则报错 + throw new IllegalStateException("cursor move to previous but can't move back"); + } + } + } + } +///以下都是获取标记没什么好说的,不过倒数第二个需要说明下,很具体看下面 + public boolean isOneFollowingFolder() { + return mIsOneNoteFollowingFolder; + } + + public boolean isMultiFollowingFolder() { + return mIsMultiNotesFollowingFolder; + } + + public boolean isLast() { + return mIsLastItem; + } + + public String getCallName() { + return mName; + } + + public boolean isFirst() { + return mIsFirstItem; + } + + public boolean isSingle() { + return mIsOnlyOneItem; + } + + public long getId() { + return mId; + } + + public long getAlertDate() { + return mAlertDate; + } + + public long getCreatedDate() { + return mCreatedDate; + } + + public boolean hasAttachment() { + return mHasAttachment; + } + + public long getModifiedDate() { + return mModifiedDate; + } + + public int getBgColorId() { + return mBgColorId; + } + + public long getParentId() { + return mParentId; + } + + public int getNotesCount() { + return mNotesCount; + } + + public long getFolderId () { + return mParentId; + } + + public int getType() { + return mType; + } + + public int getWidgetType() { + return mWidgetType; + } + + public int getWidgetId() { + return mWidgetId; + } + + public String getSnippet() { + return mSnippet; + } + + public boolean hasAlert() { + return (mAlertDate > 0); + } + + //若数据父id为保存至文件夹模式的id且满足电话号码单元不为空,则isCallRecord为true + public boolean isCallRecord() { + return (mParentId == Notes.ID_CALL_RECORD_FOLDER && !TextUtils.isEmpty(mPhoneNumber)); + } + + public static int getNoteType(Cursor cursor) { + return cursor.getInt(TYPE_COLUMN); + } +} \ No newline at end of file diff --git a/doc/210340006杜煜晗/ui包/NotesListActivity.txt b/doc/210340006杜煜晗/ui包/NotesListActivity.txt new file mode 100644 index 0000000..bc6c868 --- /dev/null +++ b/doc/210340006杜煜晗/ui包/NotesListActivity.txt @@ -0,0 +1,1002 @@ +package net.micode.notes.ui; + +import android.app.Activity; +import android.app.AlertDialog; +import android.app.Dialog; +import android.appwidget.AppWidgetManager; +import android.content.AsyncQueryHandler; +import android.content.ContentResolver; +import android.content.ContentValues; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.SharedPreferences; +import android.database.Cursor; +import android.os.AsyncTask; +import android.os.Bundle; +import android.preference.PreferenceManager; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.util.Log; +import android.view.ActionMode; +import android.view.ContextMenu; +import android.view.ContextMenu.ContextMenuInfo; +import android.view.Display; +import android.view.HapticFeedbackConstants; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; +import android.view.MenuItem.OnMenuItemClickListener; +import android.view.MotionEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.View.OnCreateContextMenuListener; +import android.view.View.OnTouchListener; +import android.view.inputmethod.InputMethodManager; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.AdapterView.OnItemLongClickListener; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ListView; +import android.widget.PopupMenu; +import android.widget.TextView; +import android.widget.Toast; + +import net.micode.notes.R; +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.gtask.remote.GTaskSyncService; +import net.micode.notes.model.WorkingNote; +import net.micode.notes.tool.BackupUtils; +import net.micode.notes.tool.DataUtils; +import net.micode.notes.tool.ResourceParser; +import net.micode.notes.ui.NotesListAdapter.AppWidgetAttribute; +import net.micode.notes.widget.NoteWidgetProvider_2x; +import net.micode.notes.widget.NoteWidgetProvider_4x; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.HashSet; +//主界面,一进入就是这个界面 +/** + * @author k + * + */ +public class NotesListActivity extends Activity implements OnClickListener, OnItemLongClickListener { //没有用特定的标签加注释。。。感觉没有什么用 + private static final int FOLDER_NOTE_LIST_QUERY_TOKEN = 0; + + private static final int FOLDER_LIST_QUERY_TOKEN = 1; + + private static final int MENU_FOLDER_DELETE = 0; + + private static final int MENU_FOLDER_VIEW = 1; + + private static final int MENU_FOLDER_CHANGE_NAME = 2; + + private static final String PREFERENCE_ADD_INTRODUCTION = "net.micode.notes.introduction"; //单行超过80个字符 + + private enum ListEditState { + NOTE_LIST, SUB_FOLDER, CALL_RECORD_FOLDER + }; + + private ListEditState mState; + + private BackgroundQueryHandler mBackgroundQueryHandler; + + private NotesListAdapter mNotesListAdapter; + + private ListView mNotesListView; + + private Button mAddNewNote; + + private boolean mDispatch; + + private int mOriginY; + + private int mDispatchY; + + private TextView mTitleBar; + + private long mCurrentFolderId; + + private ContentResolver mContentResolver; + + private ModeCallback mModeCallBack; + + private static final String TAG = "NotesListActivity"; + + public static final int NOTES_LISTVIEW_SCROLL_RATE = 30; + + private NoteItemData mFocusNoteDataItem; + + private static final String NORMAL_SELECTION = NoteColumns.PARENT_ID + "=?"; + + private static final String ROOT_FOLDER_SELECTION = "(" + NoteColumns.TYPE + "<>" + + Notes.TYPE_SYSTEM + " AND " + NoteColumns.PARENT_ID + "=?)" + " OR (" + + NoteColumns.ID + "=" + Notes.ID_CALL_RECORD_FOLDER + " AND " + + NoteColumns.NOTES_COUNT + ">0)"; + + private final static int REQUEST_CODE_OPEN_NODE = 102; + private final static int REQUEST_CODE_NEW_NODE = 103; + + @Override + // 创建类 + protected void onCreate(final Bundle savedInstanceState) { //需要是final类型 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。 + // final类不能被继承,没有子类,final类中的方法默认是final的。 + //final方法不能被子类的方法覆盖,但可以被继承。 + //final成员变量表示常量,只能被赋值一次,赋值后值不再改变。 + //final不能用于修饰构造方法。 + super.onCreate(savedInstanceState); // 调用父类的onCreate函数 + setContentView(R.layout.note_list); + initResources(); + + /** + * Insert an introduction when user firstly use this application + */ + setAppInfoFromRawRes(); + } + + @Override + // 返回一些子模块完成的数据交给主Activity处理 + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // 结果值 和 要求值 符合要求 + if (resultCode == RESULT_OK + && (requestCode == REQUEST_CODE_OPEN_NODE || requestCode == REQUEST_CODE_NEW_NODE)) { + mNotesListAdapter.changeCursor(null); + } else { + super.onActivityResult(requestCode, resultCode, data); + // 调用 Activity 的onActivityResult() + } + } + + private void setAppInfoFromRawRes() { + // Android平台给我们提供了一个SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数。 + SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); + if (!sp.getBoolean(PREFERENCE_ADD_INTRODUCTION, false)) { + StringBuilder sb = new StringBuilder(); + InputStream in = null; + try { + // 把资源文件放到应用程序的/raw/raw下,那么就可以在应用中使用getResources获取资源后, + // 以openRawResource方法(不带后缀的资源文件名)打开这个文件。 + in = getResources().openRawResource(R.raw.introduction); + if (in != null) { + InputStreamReader isr = new InputStreamReader(in); + BufferedReader br = new BufferedReader(isr); + char [] buf = new char[1024]; // 自行定义的数值,使用者不知道有什么意义 + int len = 0; + while ((len = br.read(buf)) > 0) { + sb.append(buf, 0, len); + } + } else { + Log.e(TAG, "Read introduction file error"); + return; + } + } catch (IOException e) { + e.printStackTrace(); + return; + } finally { + if (in != null) { + try { + in.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + + // 创建空的WorkingNote + WorkingNote note = WorkingNote.createEmptyNote(this, Notes.ID_ROOT_FOLDER, + AppWidgetManager.INVALID_APPWIDGET_ID, Notes.TYPE_WIDGET_INVALIDE, + ResourceParser.RED); + note.setWorkingText(sb.toString()); + if (note.saveNote()) { + // 更新保存note的信息 + sp.edit().putBoolean(PREFERENCE_ADD_INTRODUCTION, true).commit(); + } else { + Log.e(TAG, "Save introduction note error"); + return; + } + } + } + + @Override + protected void onStart() { + super.onStart(); + startAsyncNotesListQuery(); + } + + // 初始化资源 + private void initResources() { + mContentResolver = this.getContentResolver(); // 获取应用程序的数据,得到类似数据表的东西 + mBackgroundQueryHandler = new BackgroundQueryHandler(this.getContentResolver()); + mCurrentFolderId = Notes.ID_ROOT_FOLDER; + + // findViewById 是安卓编程的定位函数,主要是引用.R文件里的引用名 + mNotesListView = (ListView) findViewById(R.id.notes_list); // 绑定XML中的ListView,作为Item的容器 + mNotesListView.addFooterView(LayoutInflater.from(this).inflate(R.layout.note_list_footer, null), + null, false); + mNotesListView.setOnItemClickListener(new OnListItemClickListener()); + mNotesListView.setOnItemLongClickListener(this); + mNotesListAdapter = new NotesListAdapter(this); + mNotesListView.setAdapter(mNotesListAdapter); + mAddNewNote = (Button) findViewById(R.id.btn_new_note);// 在activity中要获取该按钮 + mAddNewNote.setOnClickListener(this); + mAddNewNote.setOnTouchListener(new NewNoteOnTouchListener()); + mDispatch = false; + mDispatchY = 0; + mOriginY = 0; + mTitleBar = (TextView) findViewById(R.id.tv_title_bar); + mState = ListEditState.NOTE_LIST; + mModeCallBack = new ModeCallback(); + } + + // 继承自ListView.MultiChoiceModeListener 和 OnMenuItemClickListener + private class ModeCallback implements ListView.MultiChoiceModeListener, OnMenuItemClickListener { + private DropdownMenu mDropDownMenu; + private ActionMode mActionMode; + private MenuItem mMoveMenu; + + public boolean onCreateActionMode(ActionMode mode, Menu menu) { + getMenuInflater().inflate(R.menu.note_list_options, menu); + menu.findItem(R.id.delete).setOnMenuItemClickListener(this); + mMoveMenu = menu.findItem(R.id.move); + if (mFocusNoteDataItem.getParentId() == Notes.ID_CALL_RECORD_FOLDER + || DataUtils.getUserFolderCount(mContentResolver) == 0) { + mMoveMenu.setVisible(false); + } else { + mMoveMenu.setVisible(true); + mMoveMenu.setOnMenuItemClickListener(this); + } + mActionMode = mode; + mNotesListAdapter.setChoiceMode(true); + mNotesListView.setLongClickable(false); + mAddNewNote.setVisibility(View.GONE); + + View customView = LayoutInflater.from(NotesListActivity.this).inflate( + R.layout.note_list_dropdown_menu, null); + mode.setCustomView(customView); + mDropDownMenu = new DropdownMenu(NotesListActivity.this, + (Button) customView.findViewById(R.id.selection_menu), + R.menu.note_list_dropdown); + mDropDownMenu.setOnDropdownMenuItemClickListener(new PopupMenu.OnMenuItemClickListener(){ + public boolean onMenuItemClick(final MenuItem item) { + mNotesListAdapter.selectAll(!mNotesListAdapter.isAllSelected()); + updateMenu(); + return true; + } + + }); + return true; + } + + // 更新菜单 + private void updateMenu() { + int selectedCount = mNotesListAdapter.getSelectedCount(); + // Update dropdown menu + String format = getResources().getString(R.string.menu_select_title, selectedCount); + mDropDownMenu.setTitle(format); // 更改标题 + MenuItem item = mDropDownMenu.findItem(R.id.action_select_all); + if (item != null) { + if (mNotesListAdapter.isAllSelected()) { + item.setChecked(true); + item.setTitle(R.string.menu_deselect_all); + } else { + item.setChecked(false); + item.setTitle(R.string.menu_select_all); + } + } + } + + public boolean onPrepareActionMode(ActionMode mode, Menu menu) { + // TODO Auto-generated method stub + return false; + } + + public boolean onActionItemClicked(ActionMode mode, MenuItem item) { + // TODO Auto-generated method stub + return false; + } + + public void onDestroyActionMode(ActionMode mode) { + mNotesListAdapter.setChoiceMode(false); + mNotesListView.setLongClickable(true); + mAddNewNote.setVisibility(View.VISIBLE); + } + + public void finishActionMode() { + mActionMode.finish(); + } + + public void onItemCheckedStateChanged(ActionMode mode, int position, long id, + boolean checked) { + mNotesListAdapter.setCheckedItem(position, checked); + updateMenu(); + } + + public boolean onMenuItemClick(MenuItem item) { + if (mNotesListAdapter.getSelectedCount() == 0) { + Toast.makeText(NotesListActivity.this, getString(R.string.menu_select_none), + Toast.LENGTH_SHORT).show(); + return true; + } + + switch (item.getItemId()) { + case R.id.delete: + AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); + builder.setTitle(getString(R.string.alert_title_delete)); + builder.setIcon(android.R.drawable.ic_dialog_alert); + builder.setMessage(getString(R.string.alert_message_delete_notes, + mNotesListAdapter.getSelectedCount())); + builder.setPositiveButton(android.R.string.ok, + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, + int which) { + batchDelete(); + } + }); + builder.setNegativeButton(android.R.string.cancel, null); + builder.show(); + break; + case R.id.move: + startQueryDestinationFolders(); + break; + default: + return false; + } + return true; + } + } + + private class NewNoteOnTouchListener implements OnTouchListener { + + public boolean onTouch(View v, MotionEvent event) { + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: { + Display display = getWindowManager().getDefaultDisplay(); + int screenHeight = display.getHeight(); + int newNoteViewHeight = mAddNewNote.getHeight(); + int start = screenHeight - newNoteViewHeight; + int eventY = start + (int) event.getY(); + /** + * Minus TitleBar's height + */ + if (mState == ListEditState.SUB_FOLDER) { + eventY -= mTitleBar.getHeight(); + start -= mTitleBar.getHeight(); + } + /** + * HACKME:When click the transparent part of "New Note" button, dispatch + * the event to the list view behind this button. The transparent part of + * "New Note" button could be expressed by formula y=-0.12x+94锛圲nit:pixel锛 + * and the line top of the button. The coordinate based on left of the "New + * Note" button. The 94 represents maximum height of the transparent part. + * Notice that, if the background of the button changes, the formula should + * also change. This is very bad, just for the UI designer's strong requirement. + */ + if (event.getY() < (event.getX() * (-0.12) + 94)) { + View view = mNotesListView.getChildAt(mNotesListView.getChildCount() - 1 + - mNotesListView.getFooterViewsCount()); + if (view != null && view.getBottom() > start + && (view.getTop() < (start + 94))) { + mOriginY = (int) event.getY(); + mDispatchY = eventY; + event.setLocation(event.getX(), mDispatchY); + mDispatch = true; + return mNotesListView.dispatchTouchEvent(event); + } + } + break; + } + case MotionEvent.ACTION_MOVE: { + if (mDispatch) { + mDispatchY += (int) event.getY() - mOriginY; + event.setLocation(event.getX(), mDispatchY); + return mNotesListView.dispatchTouchEvent(event); + } + break; + } + default: { + if (mDispatch) { + event.setLocation(event.getX(), mDispatchY); + mDispatch = false; + return mNotesListView.dispatchTouchEvent(event); + } + break; + } + } + return false; + } + + }; + + private void startAsyncNotesListQuery() { + String selection = (mCurrentFolderId == Notes.ID_ROOT_FOLDER) ? ROOT_FOLDER_SELECTION + : NORMAL_SELECTION; + mBackgroundQueryHandler.startQuery(FOLDER_NOTE_LIST_QUERY_TOKEN, null, + Notes.CONTENT_NOTE_URI, NoteItemData.PROJECTION, selection, new String[] { + String.valueOf(mCurrentFolderId) + }, NoteColumns.TYPE + " DESC," + NoteColumns.MODIFIED_DATE + " DESC"); + } + + private final class BackgroundQueryHandler extends AsyncQueryHandler { + public BackgroundQueryHandler(ContentResolver contentResolver) { + super(contentResolver); + } + + @Override + protected void onQueryComplete(int token, Object cookie, Cursor cursor) { + switch (token) { + case FOLDER_NOTE_LIST_QUERY_TOKEN: + mNotesListAdapter.changeCursor(cursor); + break; + case FOLDER_LIST_QUERY_TOKEN: + if (cursor != null && cursor.getCount() > 0) { + showFolderListMenu(cursor); + } else { + Log.e(TAG, "Query folder failed"); + } + break; + default: + return; + } + } + } + + private void showFolderListMenu(Cursor cursor) { + AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); + builder.setTitle(R.string.menu_title_select_folder); + final FoldersListAdapter adapter = new FoldersListAdapter(this, cursor); + builder.setAdapter(adapter, new DialogInterface.OnClickListener() { + + public void onClick(DialogInterface dialog, int which) { + DataUtils.batchMoveToFolder(mContentResolver, + mNotesListAdapter.getSelectedItemIds(), adapter.getItemId(which)); + Toast.makeText( + NotesListActivity.this, + getString(R.string.format_move_notes_to_folder, + mNotesListAdapter.getSelectedCount(), + adapter.getFolderName(NotesListActivity.this, which)), + Toast.LENGTH_SHORT).show(); + mModeCallBack.finishActionMode(); + } + }); + builder.show(); + } + + private void createNewNote() { + Intent intent = new Intent(this, NoteEditActivity.class); + intent.setAction(Intent.ACTION_INSERT_OR_EDIT); + intent.putExtra(Notes.INTENT_EXTRA_FOLDER_ID, mCurrentFolderId); + this.startActivityForResult(intent, REQUEST_CODE_NEW_NODE); + } + + private void batchDelete() { + new AsyncTask>() { + protected HashSet doInBackground(Void... unused) { + HashSet widgets = mNotesListAdapter.getSelectedWidget(); + if (!isSyncMode()) { + // if not synced, delete notes directly + if (DataUtils.batchDeleteNotes(mContentResolver, mNotesListAdapter + .getSelectedItemIds())) { + } else { + Log.e(TAG, "Delete notes error, should not happens"); + } + } else { + // in sync mode, we'll move the deleted note into the trash + // folder + if (!DataUtils.batchMoveToFolder(mContentResolver, mNotesListAdapter + .getSelectedItemIds(), Notes.ID_TRASH_FOLER)) { + Log.e(TAG, "Move notes to trash folder error, should not happens"); + } + } + return widgets; + } + + @Override + protected void onPostExecute(HashSet widgets) { + if (widgets != null) { + for (AppWidgetAttribute widget : widgets) { + if (widget.widgetId != AppWidgetManager.INVALID_APPWIDGET_ID + && widget.widgetType != Notes.TYPE_WIDGET_INVALIDE) { + updateWidget(widget.widgetId, widget.widgetType); + } + } + } + mModeCallBack.finishActionMode(); + } + }.execute(); + } + + private void deleteFolder(long folderId) { + if (folderId == Notes.ID_ROOT_FOLDER) { + Log.e(TAG, "Wrong folder id, should not happen " + folderId); + return; + } + + HashSet ids = new HashSet(); + ids.add(folderId); + HashSet widgets = DataUtils.getFolderNoteWidget(mContentResolver, + folderId); + if (!isSyncMode()) { + // if not synced, delete folder directly + DataUtils.batchDeleteNotes(mContentResolver, ids); + } else { + // in sync mode, we'll move the deleted folder into the trash folder + DataUtils.batchMoveToFolder(mContentResolver, ids, Notes.ID_TRASH_FOLER); + } + if (widgets != null) { + for (AppWidgetAttribute widget : widgets) { + if (widget.widgetId != AppWidgetManager.INVALID_APPWIDGET_ID + && widget.widgetType != Notes.TYPE_WIDGET_INVALIDE) { + updateWidget(widget.widgetId, widget.widgetType); + } + } + } + } + + private void openNode(NoteItemData data) { + Intent intent = new Intent(this, NoteEditActivity.class); + intent.setAction(Intent.ACTION_VIEW); + intent.putExtra(Intent.EXTRA_UID, data.getId()); + this.startActivityForResult(intent, REQUEST_CODE_OPEN_NODE); + } + + private void openFolder(NoteItemData data) { + mCurrentFolderId = data.getId(); + startAsyncNotesListQuery(); + if (data.getId() == Notes.ID_CALL_RECORD_FOLDER) { + mState = ListEditState.CALL_RECORD_FOLDER; + mAddNewNote.setVisibility(View.GONE); + } else { + mState = ListEditState.SUB_FOLDER; + } + if (data.getId() == Notes.ID_CALL_RECORD_FOLDER) { + mTitleBar.setText(R.string.call_record_folder_name); + } else { + mTitleBar.setText(data.getSnippet()); + } + mTitleBar.setVisibility(View.VISIBLE); + } + + public void onClick(View v) { + switch (v.getId()) { + case R.id.btn_new_note: + createNewNote(); + break; + default: + break; + } + } + + private void showSoftInput() { + InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + if (inputMethodManager != null) { + inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); + } + } + + private void hideSoftInput(View view) { + InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + + private void showCreateOrModifyFolderDialog(final boolean create) { + final AlertDialog.Builder builder = new AlertDialog.Builder(this); + View view = LayoutInflater.from(this).inflate(R.layout.dialog_edit_text, null); + final EditText etName = (EditText) view.findViewById(R.id.et_foler_name); + showSoftInput(); + if (!create) { + if (mFocusNoteDataItem != null) { + etName.setText(mFocusNoteDataItem.getSnippet()); + builder.setTitle(getString(R.string.menu_folder_change_name)); + } else { + Log.e(TAG, "The long click data item is null"); + return; + } + } else { + etName.setText(""); + builder.setTitle(this.getString(R.string.menu_create_folder)); + } + + builder.setPositiveButton(android.R.string.ok, null); + builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + hideSoftInput(etName); + } + }); + + final Dialog dialog = builder.setView(view).show(); + final Button positive = (Button)dialog.findViewById(android.R.id.button1); + positive.setOnClickListener(new OnClickListener() { + public void onClick(View v) { + hideSoftInput(etName); + String name = etName.getText().toString(); + if (DataUtils.checkVisibleFolderName(mContentResolver, name)) { + Toast.makeText(NotesListActivity.this, getString(R.string.folder_exist, name), + Toast.LENGTH_LONG).show(); + etName.setSelection(0, etName.length()); + return; + } + if (!create) { + if (!TextUtils.isEmpty(name)) { + ContentValues values = new ContentValues(); + values.put(NoteColumns.SNIPPET, name); + values.put(NoteColumns.TYPE, Notes.TYPE_FOLDER); + values.put(NoteColumns.LOCAL_MODIFIED, 1); + mContentResolver.update(Notes.CONTENT_NOTE_URI, values, NoteColumns.ID + + "=?", new String[] { + String.valueOf(mFocusNoteDataItem.getId()) + }); + } + } else if (!TextUtils.isEmpty(name)) { + ContentValues values = new ContentValues(); + values.put(NoteColumns.SNIPPET, name); + values.put(NoteColumns.TYPE, Notes.TYPE_FOLDER); + mContentResolver.insert(Notes.CONTENT_NOTE_URI, values); + } + dialog.dismiss(); + } + }); + + if (TextUtils.isEmpty(etName.getText())) { + positive.setEnabled(false); + } + /** + * When the name edit text is null, disable the positive button + */ + etName.addTextChangedListener(new TextWatcher() { + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + // TODO Auto-generated method stub + + } + + public void onTextChanged(CharSequence s, int start, int before, int count) { + if (TextUtils.isEmpty(etName.getText())) { + positive.setEnabled(false); + } else { + positive.setEnabled(true); + } + } + + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + + } + }); + } + + /* (non-Javadoc) + * @see android.app.Activity#onBackPressed() + * 按返回键时根据情况更改类中的数据 + */ + @Override + public void onBackPressed() { switch (mState) { + case SUB_FOLDER: + mCurrentFolderId = Notes.ID_ROOT_FOLDER; + mState = ListEditState.NOTE_LIST; + startAsyncNotesListQuery(); + mTitleBar.setVisibility(View.GONE); + break; + case CALL_RECORD_FOLDER: + mCurrentFolderId = Notes.ID_ROOT_FOLDER; + mState = ListEditState.NOTE_LIST; + mAddNewNote.setVisibility(View.VISIBLE); + mTitleBar.setVisibility(View.GONE); + startAsyncNotesListQuery(); + break; + case NOTE_LIST: + super.onBackPressed(); + break; + default: + break; + } + } + + /** + * @param appWidgetId + * @param appWidgetType + * 根据不同类型的widget更新插件,通过intent传送数据 + */ + private void updateWidget(int appWidgetId, int appWidgetType) { + Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE); + if (appWidgetType == Notes.TYPE_WIDGET_2X) { + intent.setClass(this, NoteWidgetProvider_2x.class); + } else if (appWidgetType == Notes.TYPE_WIDGET_4X) { + intent.setClass(this, NoteWidgetProvider_4x.class); + } else { + Log.e(TAG, "Unspported widget type"); + return; + } + + intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] { + appWidgetId + }); + + sendBroadcast(intent); + setResult(RESULT_OK, intent); + } + + /** + * 声明监听器,建立菜单,包括名称,视图,删除操作,更改名称操作; + */ + private final OnCreateContextMenuListener mFolderOnCreateContextMenuListener = new OnCreateContextMenuListener() { + public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { + if (mFocusNoteDataItem != null) { + menu.setHeaderTitle(mFocusNoteDataItem.getSnippet()); + menu.add(0, MENU_FOLDER_VIEW, 0, R.string.menu_folder_view); + menu.add(0, MENU_FOLDER_DELETE, 0, R.string.menu_folder_delete); + menu.add(0, MENU_FOLDER_CHANGE_NAME, 0, R.string.menu_folder_change_name); + } + } + }; + + @Override + public void onContextMenuClosed(Menu menu) { + if (mNotesListView != null) { + mNotesListView.setOnCreateContextMenuListener(null); + } + super.onContextMenuClosed(menu); + } + + /* (non-Javadoc) + * @see android.app.Activity#onContextItemSelected(android.view.MenuItem) + * 针对menu中不同的选择进行不同的处理,里面详细注释 + */ + @Override + public boolean onContextItemSelected(MenuItem item) { + if (mFocusNoteDataItem == null) { + Log.e(TAG, "The long click data item is null"); + return false; + } + switch (item.getItemId()) { + case MENU_FOLDER_VIEW: + openFolder(mFocusNoteDataItem);//打开对应文件 + break; + case MENU_FOLDER_DELETE: + AlertDialog.Builder builder = new AlertDialog.Builder(this);//设置确认是否删除的对话框 + builder.setTitle(getString(R.string.alert_title_delete)); + builder.setIcon(android.R.drawable.ic_dialog_alert); + builder.setMessage(getString(R.string.alert_message_delete_folder)); + builder.setPositiveButton(android.R.string.ok, + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + deleteFolder(mFocusNoteDataItem.getId()); + } + }); + builder.setNegativeButton(android.R.string.cancel, null); + builder.show();//显示对话框 + break; + case MENU_FOLDER_CHANGE_NAME: + showCreateOrModifyFolderDialog(false); + break; + default: + break; + } + + return true; + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + menu.clear(); + if (mState == ListEditState.NOTE_LIST) { + getMenuInflater().inflate(R.menu.note_list, menu); + // set sync or sync_cancel + menu.findItem(R.id.menu_sync).setTitle( + GTaskSyncService.isSyncing() ? R.string.menu_sync_cancel : R.string.menu_sync); + } else if (mState == ListEditState.SUB_FOLDER) { + getMenuInflater().inflate(R.menu.sub_folder, menu); + } else if (mState == ListEditState.CALL_RECORD_FOLDER) { + getMenuInflater().inflate(R.menu.call_record_folder, menu); + } else { + Log.e(TAG, "Wrong state:" + mState); + } + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.menu_new_folder: { + showCreateOrModifyFolderDialog(true); + break; + } + case R.id.menu_export_text: { + exportNoteToText(); + break; + } + case R.id.menu_sync: { + if (isSyncMode()) { + if (TextUtils.equals(item.getTitle(), getString(R.string.menu_sync))) { + GTaskSyncService.startSync(this); + } else { + GTaskSyncService.cancelSync(this); + } + } else { + startPreferenceActivity(); + } + break; + } + case R.id.menu_setting: { + startPreferenceActivity(); + break; + } + case R.id.menu_new_note: { + createNewNote(); + break; + } + case R.id.menu_search: + onSearchRequested(); + break; + default: + break; + } + return true; + } + + /* (non-Javadoc) + * @see android.app.Activity#onSearchRequested() + * 直接调用startSearch函数 + */ + @Override + public boolean onSearchRequested() { + startSearch(null, false, null /* appData */, false); + return true; + } + + /** + * 函数功能:实现将便签导出到文本功能 + */ + private void exportNoteToText() { + final BackupUtils backup = BackupUtils.getInstance(NotesListActivity.this); + new AsyncTask() { + + @Override + protected Integer doInBackground(Void... unused) { + return backup.exportToText(); + } + + @Override + protected void onPostExecute(Integer result) { + if (result == BackupUtils.STATE_SD_CARD_UNMOUONTED) { + AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); + builder.setTitle(NotesListActivity.this + .getString(R.string.failed_sdcard_export)); + builder.setMessage(NotesListActivity.this + .getString(R.string.error_sdcard_unmounted)); + builder.setPositiveButton(android.R.string.ok, null); + builder.show(); + } else if (result == BackupUtils.STATE_SUCCESS) { + AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); + builder.setTitle(NotesListActivity.this + .getString(R.string.success_sdcard_export)); + builder.setMessage(NotesListActivity.this.getString( + R.string.format_exported_file_location, backup + .getExportedTextFileName(), backup.getExportedTextFileDir())); + builder.setPositiveButton(android.R.string.ok, null); + builder.show(); + } else if (result == BackupUtils.STATE_SYSTEM_ERROR) { + AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); + builder.setTitle(NotesListActivity.this + .getString(R.string.failed_sdcard_export)); + builder.setMessage(NotesListActivity.this + .getString(R.string.error_sdcard_export)); + builder.setPositiveButton(android.R.string.ok, null); + builder.show(); + } + } + + }.execute(); + } + + /** + * @return + * 功能:判断是否正在同步 + */ + private boolean isSyncMode() { + return NotesPreferenceActivity.getSyncAccountName(this).trim().length() > 0; + } + + /** + * 功能:跳转到PreferenceActivity界面 + */ + private void startPreferenceActivity() { + Activity from = getParent() != null ? getParent() : this; + Intent intent = new Intent(from, NotesPreferenceActivity.class); + from.startActivityIfNeeded(intent, -1); + } + + /** + * @author k + * 函数功能:实现对便签列表项的点击事件(短按) + */ + private class OnListItemClickListener implements OnItemClickListener { + + public void onItemClick(AdapterView parent, View view, int position, long id) { + if (view instanceof NotesListItem) { + NoteItemData item = ((NotesListItem) view).getItemData(); + if (mNotesListAdapter.isInChoiceMode()) { + if (item.getType() == Notes.TYPE_NOTE) { + position = position - mNotesListView.getHeaderViewsCount(); + mModeCallBack.onItemCheckedStateChanged(null, position, id, + !mNotesListAdapter.isSelectedItem(position)); + } + return; + } + + switch (mState) { + case NOTE_LIST: + if (item.getType() == Notes.TYPE_FOLDER + || item.getType() == Notes.TYPE_SYSTEM) { + openFolder(item); + } else if (item.getType() == Notes.TYPE_NOTE) { + openNode(item); + } else { + Log.e(TAG, "Wrong note type in NOTE_LIST"); + } + break; + case SUB_FOLDER: + case CALL_RECORD_FOLDER: + if (item.getType() == Notes.TYPE_NOTE) { + openNode(item); + } else { + Log.e(TAG, "Wrong note type in SUB_FOLDER"); + } + break; + default: + break; + } + } + } + + } + + /** + * 查询目标文件 + */ + private void startQueryDestinationFolders() { + String selection = NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>? AND " + NoteColumns.ID + "<>?"; + selection = (mState == ListEditState.NOTE_LIST) ? selection: + "(" + selection + ") OR (" + NoteColumns.ID + "=" + Notes.ID_ROOT_FOLDER + ")"; + + mBackgroundQueryHandler.startQuery(FOLDER_LIST_QUERY_TOKEN, + null, + Notes.CONTENT_NOTE_URI, + FoldersListAdapter.PROJECTION, + selection, + new String[] { + String.valueOf(Notes.TYPE_FOLDER), + String.valueOf(Notes.ID_TRASH_FOLER), + String.valueOf(mCurrentFolderId) + }, + NoteColumns.MODIFIED_DATE + " DESC"); + } + + /* (non-Javadoc) + * @see android.widget.AdapterView.OnItemLongClickListener#onItemLongClick(android.widget.AdapterView, android.view.View, int, long) + * 长按某一项时进行的操作 + * 如果长按的是便签,则通过ActionMode菜单实现;如果长按的是文件夹,则通过ContextMenu菜单实现; + * 具体ActionMOde菜单和ContextMenu菜单的详细见精度笔记 + */ + public boolean onItemLongClick(AdapterView parent, View view, int position, long id) { + if (view instanceof NotesListItem) { + mFocusNoteDataItem = ((NotesListItem) view).getItemData(); + if (mFocusNoteDataItem.getType() == Notes.TYPE_NOTE && !mNotesListAdapter.isInChoiceMode()) { + if (mNotesListView.startActionMode(mModeCallBack) != null) { + mModeCallBack.onItemCheckedStateChanged(null, position, id, true); + mNotesListView.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); + } else { + Log.e(TAG, "startActionMode fails"); + } + } else if (mFocusNoteDataItem.getType() == Notes.TYPE_FOLDER) { + mNotesListView.setOnCreateContextMenuListener(mFolderOnCreateContextMenuListener); + } + } + return false; + } +} \ No newline at end of file diff --git a/doc/210340006杜煜晗/ui包/NotesListAdapter.txt b/doc/210340006杜煜晗/ui包/NotesListAdapter.txt new file mode 100644 index 0000000..ea7f9f9 --- /dev/null +++ b/doc/210340006杜煜晗/ui包/NotesListAdapter.txt @@ -0,0 +1,257 @@ +package net.micode.notes.ui; + +import android.content.Context; +import android.database.Cursor; +import android.util.Log; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CursorAdapter; + + +import net.micode.notes.data.Notes; + +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; + + +/* + * 功能:直译为便签表连接器,继承了CursorAdapter,它为cursor和ListView提供了连接的桥梁。 + * 所以NotesListAdapter实现的是鼠标和编辑便签链接的桥梁 + */ +public class NotesListAdapter extends CursorAdapter { + private static final String TAG = "NotesListAdapter"; + private Context mContext; + private HashMap mSelectedIndex; + private int mNotesCount; //便签数 + private boolean mChoiceMode; //选择模式标记 + + /* + * 桌面widget的属性,包括编号和类型 + */ + public static class AppWidgetAttribute { + public int widgetId; + public int widgetType; + }; + + /* + * 函数功能:初始化便签链接器 + * 函数实现:根据传进来的内容设置相关变量 + */ + public NotesListAdapter(Context context) { + super(context, null); //父类对象置空 + mSelectedIndex = new HashMap(); //新建选项下标的hash表 + mContext = context; + mNotesCount = 0; + } + + @Override + /* + * 函数功能:新建一个视图来存储光标所指向的数据 + * 函数实现:使用兄弟类NotesListItem新建一个项目选项 + */ + public View newView(Context context, Cursor cursor, ViewGroup parent) { + return new NotesListItem(context); + } + + /* + * 函数功能:将已经存在的视图和鼠标指向的数据进行捆绑 + * 函数实现:如下注释 + */ + @Override + public void bindView(View view, Context context, Cursor cursor) { + if (view instanceof NotesListItem) { + //若view是NotesListItem的一个实例 + NoteItemData itemData = new NoteItemData(context, cursor); + ((NotesListItem) view).bind(context, itemData, mChoiceMode, + isSelectedItem(cursor.getPosition())); + //则新建一个项目选项并且用bind跟将view和鼠标,内容,便签数据捆绑在一起 + } + } + + /* + * 函数功能:设置勾选框 + * 函数实现:如下注释 + */ + public void setCheckedItem(final int position, final boolean checked) { + mSelectedIndex.put(position, checked); + //根据定位和是否勾选设置下标 + notifyDataSetChanged(); + //在修改后刷新activity + } + + /* + * 函数功能:判断单选按钮是否勾选 + */ + public boolean isInChoiceMode() { + return mChoiceMode; + } + + /* + * 函数功能:设置单项选项框 + * 函数实现:重置下标并且根据参数mode设置选项 + */ + public void setChoiceMode(boolean mode) { + mSelectedIndex.clear(); + mChoiceMode = mode; + } + + /* + * 函数功能:选择全部选项 + * 函数实现:如下注释 + */ + public void selectAll(boolean checked) { + Cursor cursor = getCursor(); + //获取光标位置 + for (int i = 0; i < getCount(); i++) { + if (cursor.moveToPosition(i)) { + if (NoteItemData.getNoteType(cursor) == Notes.TYPE_NOTE) { + setCheckedItem(i, checked); + } + } + } + //遍历所有光标可用的位置在判断为便签类型之后勾选单项框 + } + + /* + * 函数功能:建立选择项的下标列表 + * 函数实现:如下注释 + */ + public HashSet getSelectedItemIds() { + HashSet itemSet = new HashSet(); + //建立hash表 + for (Integer position : mSelectedIndex.keySet()) { + //遍历所有的关键 + if (mSelectedIndex.get(position) == true) { + //若光标位置可用 + Long id = getItemId(position); + if (id == Notes.ID_ROOT_FOLDER) { + //原文件不需要添加 + Log.d(TAG, "Wrong item id, should not happen"); + } else { + itemSet.add(id); + } + //则将id该下标假如选项集合中 + + } + } + + return itemSet; + } + + /* + * 函数功能:建立桌面Widget的选项表 + * 函数实现:如下注释 + */ + public HashSet getSelectedWidget() { + HashSet itemSet = new HashSet(); + for (Integer position : mSelectedIndex.keySet()) { + if (mSelectedIndex.get(position) == true) { + Cursor c = (Cursor) getItem(position); + //以上4句和getSelectedItemIds一样,不再重复 + if (c != null) { + //光标位置可用的话就建立新的Widget属性并编辑下标和类型,最后添加到选项集中 + AppWidgetAttribute widget = new AppWidgetAttribute(); + NoteItemData item = new NoteItemData(mContext, c); + widget.widgetId = item.getWidgetId(); + widget.widgetType = item.getWidgetType(); + itemSet.add(widget); + /** + * Don't close cursor here, only the adapter could close it + */ + } else { + Log.e(TAG, "Invalid cursor"); + return null; + } + } + } + return itemSet; + } + + /* + * 函数功能:获取选项个数 + * 函数实现:如下注释 + */ + public int getSelectedCount() { + Collection values = mSelectedIndex.values(); + //首先获取选项下标的值 + if (null == values) { + return 0; + } + Iterator iter = values.iterator(); + //初始化叠加器 + int count = 0; + while (iter.hasNext()) { + if (true == iter.next()) { + //若value值为真计数+1 + count++; + } + } + return count; + } + + /* + * 函数功能:判断是否全部选中 + * 函数实现:如下注释 + */ + public boolean isAllSelected() { + int checkedCount = getSelectedCount(); + return (checkedCount != 0 && checkedCount == mNotesCount); + //获取选项数看是否等于便签的个数 + } + + /* + * 函数功能:判断是否为选项表 + * 函数实现:通过传递的下标来确定 + */ + public boolean isSelectedItem(final int position) { + if (null == mSelectedIndex.get(position)) { + return false; + } + return mSelectedIndex.get(position); + } + + @Override + /* + * 函数功能:在activity内容发生局部变动的时候回调该函数计算便签的数量 + * 函数实现:如下注释 + */ + protected void onContentChanged() { + super.onContentChanged(); + //执行基类函数 + calcNotesCount(); + } + + @Override + /* + * 函数功能:在activity光标发生局部变动的时候回调该函数计算便签的数量 + */ + public void changeCursor(Cursor cursor) { + super.changeCursor(cursor); + //执行基类函数 + calcNotesCount(); + } + + /* + * 函数功能:计算便签数量 + * + */ + private void calcNotesCount() { + mNotesCount = 0; + for (int i = 0; i < getCount(); i++) { + //获取总数同时遍历 + Cursor c = (Cursor) getItem(i); + if (c != null) { + if (NoteItemData.getNoteType(c) == Notes.TYPE_NOTE) { + mNotesCount++; + //若该位置不为空并且文本类型为便签就+1 + } + } else { + Log.e(TAG, "Invalid cursor"); + return; + } + //否则报错 + } + } +} \ No newline at end of file diff --git a/doc/210340006杜煜晗/ui包/NotesListItem.txt b/doc/210340006杜煜晗/ui包/NotesListItem.txt new file mode 100644 index 0000000..08a8017 --- /dev/null +++ b/doc/210340006杜煜晗/ui包/NotesListItem.txt @@ -0,0 +1,116 @@ +package net.micode.notes.ui; + +import android.content.Context; +import android.text.format.DateUtils; +import android.view.View; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import net.micode.notes.R; +import net.micode.notes.data.Notes; +import net.micode.notes.tool.DataUtils; +import net.micode.notes.tool.ResourceParser.NoteItemBgResources; + + +//创建便签列表项目选项 +public class NotesListItem extends LinearLayout { + private ImageView mAlert;//闹钟图片 + private TextView mTitle; //标题 + private TextView mTime; //时间 + private TextView mCallName; // + private NoteItemData mItemData; //标签数据 + private CheckBox mCheckBox; //打钩框 + + /*初始化基本信息*/ + public NotesListItem(Context context) { + super(context); //super()它的主要作用是调整调用父类构造函数的顺序 + inflate(context, R.layout.note_item, this);//Inflate可用于将一个xml中定义的布局控件找出来,这里的xml是r。layout + //findViewById用于从contentView中查找指定ID的View,转换出来的形式根据需要而定; + mAlert = (ImageView) findViewById(R.id.iv_alert_icon); + mTitle = (TextView) findViewById(R.id.tv_title); + mTime = (TextView) findViewById(R.id.tv_time); + mCallName = (TextView) findViewById(R.id.tv_name); + mCheckBox = (CheckBox) findViewById(android.R.id.checkbox); + } + ///根据data的属性对各个控件的属性的控制,主要是可见性Visibility,内容setText,格式setTextAppearance + public void bind(Context context, NoteItemData data, boolean choiceMode, boolean checked) { + if (choiceMode && data.getType() == Notes.TYPE_NOTE) { + mCheckBox.setVisibility(View.VISIBLE); ///设置可见行为可见 + mCheckBox.setChecked(checked); ///格子打钩 + } else { + mCheckBox.setVisibility(View.GONE); + } + + mItemData = data; + ///设置控件属性,一共三种情况,由data的id和父id是否与保存到文件夹的id一致来决定 + if (data.getId() == Notes.ID_CALL_RECORD_FOLDER) { + mCallName.setVisibility(View.GONE); + mAlert.setVisibility(View.VISIBLE); + //设置该textview的style + mTitle.setTextAppearance(context, R.style.TextAppearancePrimaryItem); + //settext为设置内容 + mTitle.setText(context.getString(R.string.call_record_folder_name) + + context.getString(R.string.format_folder_files_count, data.getNotesCount())); + mAlert.setImageResource(R.drawable.call_record); + } else if (data.getParentId() == Notes.ID_CALL_RECORD_FOLDER) { + mCallName.setVisibility(View.VISIBLE); + mCallName.setText(data.getCallName()); + mTitle.setTextAppearance(context,R.style.TextAppearanceSecondaryItem); + mTitle.setText(DataUtils.getFormattedSnippet(data.getSnippet())); + ///关于闹钟的设置 + if (data.hasAlert()) { + mAlert.setImageResource(R.drawable.clock);//图片来源的设置 + mAlert.setVisibility(View.VISIBLE); + } else { + mAlert.setVisibility(View.GONE); + } + } else { + mCallName.setVisibility(View.GONE); + mTitle.setTextAppearance(context, R.style.TextAppearancePrimaryItem); + ///设置title格式 + if (data.getType() == Notes.TYPE_FOLDER) { + mTitle.setText(data.getSnippet() + + context.getString(R.string.format_folder_files_count, + data.getNotesCount())); + mAlert.setVisibility(View.GONE); + } else { + mTitle.setText(DataUtils.getFormattedSnippet(data.getSnippet())); + if (data.hasAlert()) { + mAlert.setImageResource(R.drawable.clock);///设置图片来源 + mAlert.setVisibility(View.VISIBLE); + } else { + mAlert.setVisibility(View.GONE); + } + } + } + ///设置内容,获取相关时间,从data里编辑的日期中获取 + mTime. setText(DateUtils.getRelativeTimeSpanString(data.getModifiedDate())); + + setBackground(data); + } + //根据data的文件属性来设置背景 + private void setBackground(NoteItemData data) { + int id = data.getBgColorId(); + //,若是note型文件,则4种情况,对于4种不同情况的背景来源 + if (data.getType() == Notes.TYPE_NOTE) { + //单个数据并且只有一个子文件夹 + if (data.isSingle() || data.isOneFollowingFolder()) { + setBackgroundResource(NoteItemBgResources.getNoteBgSingleRes(id)); + } else if (data.isLast()) {//是最后一个数据 + setBackgroundResource(NoteItemBgResources.getNoteBgLastRes(id)); + } else if (data.isFirst() || data.isMultiFollowingFolder()) {//是一个数据并有多个子文件夹 + setBackgroundResource(NoteItemBgResources.getNoteBgFirstRes(id)); + } else { + setBackgroundResource(NoteItemBgResources.getNoteBgNormalRes(id)); + } + } else { + //若不是note直接调用文件夹的背景来源 + setBackgroundResource(NoteItemBgResources.getFolderBgRes()); + } + } + public NoteItemData getItemData() { + return mItemData; + } +} \ No newline at end of file diff --git a/doc/210340006杜煜晗/ui包/NotesPreferenceActivity.txt b/doc/210340006杜煜晗/ui包/NotesPreferenceActivity.txt new file mode 100644 index 0000000..4ae4976 --- /dev/null +++ b/doc/210340006杜煜晗/ui包/NotesPreferenceActivity.txt @@ -0,0 +1,514 @@ +package net.micode.notes.ui; + +import android.accounts.Account; +import android.accounts.AccountManager; +import android.app.ActionBar; +import android.app.AlertDialog; +import android.content.BroadcastReceiver; +import android.content.ContentValues; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.preference.Preference; +import android.preference.Preference.OnPreferenceClickListener; +import android.preference.PreferenceActivity; +import android.preference.PreferenceCategory; +import android.text.TextUtils; +import android.text.format.DateFormat; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; +import android.widget.Toast; + +import net.micode.notes.R; +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.gtask.remote.GTaskSyncService; + +/* + *该类功能:NotesPreferenceActivity,在小米便签中主要实现的是对背景颜色和字体大小的数据储存。 + * 继承了PreferenceActivity主要功能为对系统信息和配置进行自动保存的Activity + */ +public class NotesPreferenceActivity extends PreferenceActivity { + public static final String PREFERENCE_NAME = "notes_preferences"; + //优先名 + public static final String PREFERENCE_SYNC_ACCOUNT_NAME = "pref_key_account_name"; + //同步账号 + public static final String PREFERENCE_LAST_SYNC_TIME = "pref_last_sync_time"; + //同步时间 + public static final String PREFERENCE_SET_BG_COLOR_KEY = "pref_key_bg_random_appear"; + + private static final String PREFERENCE_SYNC_ACCOUNT_KEY = "pref_sync_account_key"; + //同步密码 + private static final String AUTHORITIES_FILTER_KEY = "authorities"; + //本地密码 + private PreferenceCategory mAccountCategory; + //账户分组 + private GTaskReceiver mReceiver; + //同步任务接收器 + private Account[] mOriAccounts; + //账户 + private boolean mHasAddedAccount; + //账户的hash标记 + + @Override + /* + *函数功能:创建一个activity,在函数里要完成所有的正常静态设置 + *参数:Bundle icicle:存放了 activity 当前的状态 + *函数实现:如下注释 + */ + protected void onCreate(Bundle icicle) { + //先执行父类的创建函数 + super.onCreate(icicle); + + /* using the app icon for navigation */ + getActionBar().setDisplayHomeAsUpEnabled(true); + //给左上角图标的左边加上一个返回的图标 + + addPreferencesFromResource(R.xml.preferences); + //添加xml来源并显示 xml + mAccountCategory = (PreferenceCategory) findPreference(PREFERENCE_SYNC_ACCOUNT_KEY); + //根据同步账户关键码来初始化分组 + mReceiver = new GTaskReceiver(); + IntentFilter filter = new IntentFilter(); + filter.addAction(GTaskSyncService.GTASK_SERVICE_BROADCAST_NAME); + registerReceiver(mReceiver, filter); + //初始化同步组件 + + mOriAccounts = null; + View header = LayoutInflater.from(this).inflate(R.layout.settings_header, null); + //获取listvivew,ListView的作用:用于列出所有选择 + getListView().addHeaderView(header, null, true); + //在listview组件上方添加其他组件 + } + + @Override + /* + * 函数功能:activity交互功能的实现,用于接受用户的输入 + * 函数实现:如下注释 + */ + protected void onResume() { + //先执行父类 的交互实现 + super.onResume(); + + // need to set sync account automatically if user has added a new + // account + if (mHasAddedAccount) { + //若用户新加了账户则自动设置同步账户 + Account[] accounts = getGoogleAccounts(); + //获取google同步账户 + if (mOriAccounts != null && accounts.length > mOriAccounts.length) { + //若原账户不为空且当前账户有增加 + for (Account accountNew : accounts) { + boolean found = false; + for (Account accountOld : mOriAccounts) { + if (TextUtils.equals(accountOld.name, accountNew.name)) { + //更新账户 + found = true; + break; + } + } + if (!found) { + setSyncAccount(accountNew.name); + //若是没有找到旧的账户,那么同步账号中就只添加新账户 + break; + } + } + } + } + + refreshUI(); + //刷新标签界面 + } + + @Override + /* + * 函数功能:销毁一个activity + * 函数实现:如下注释 + */ + protected void onDestroy() { + if (mReceiver != null) { + unregisterReceiver(mReceiver); + //注销接收器 + } + super.onDestroy(); + //执行父类的销毁动作 + } + + /* + * 函数功能:重新设置账户信息 + * 函数实现:如下注释 + */ + private void loadAccountPreference() { + mAccountCategory.removeAll(); + //销毁所有的分组 + Preference accountPref = new Preference(this); + //建立首选项 + final String defaultAccount = getSyncAccountName(this); + accountPref.setTitle(getString(R.string.preferences_account_title)); + accountPref.setSummary(getString(R.string.preferences_account_summary)); + //设置首选项的大标题和小标题 + accountPref.setOnPreferenceClickListener(new OnPreferenceClickListener() { + public boolean onPreferenceClick(Preference preference) { + //建立监听器 + if (!GTaskSyncService.isSyncing()) { + if (TextUtils.isEmpty(defaultAccount)) { + // the first time to set account + //若是第一次建立账户显示选择账户提示对话框 + showSelectAccountAlertDialog(); + } else { + // if the account has already been set, we need to promp + // user about the risk + //若是已经建立则显示修改对话框并进行修改操作 + showChangeAccountConfirmAlertDialog(); + } + } else { + //若在没有同步的情况下,则在toast中显示不能修改 + Toast.makeText(NotesPreferenceActivity.this, + R.string.preferences_toast_cannot_change_account, Toast.LENGTH_SHORT) + .show(); + } + return true; + } + }); + + //根据新建首选项编辑新的账户分组 + mAccountCategory.addPreference(accountPref); + } + + /* + *函数功能:设置按键的状态和最后同步的时间 + *函数实现:如下注释 + */ + private void loadSyncButton() { + Button syncButton = (Button) findViewById(R.id.preference_sync_button); + TextView lastSyncTimeView = (TextView) findViewById(R.id.prefenerece_sync_status_textview); + //获取同步按钮控件和最终同步时间的的窗口 + // set button state + //设置按钮的状态 + if (GTaskSyncService.isSyncing()) { + //若是在同步状态下 + syncButton.setText(getString(R.string.preferences_button_sync_cancel)); + syncButton.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + GTaskSyncService.cancelSync(NotesPreferenceActivity.this); + } + }); + //设置按钮显示的文本为“取消同步”以及监听器 + } else { + syncButton.setText(getString(R.string.preferences_button_sync_immediately)); + syncButton.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + GTaskSyncService.startSync(NotesPreferenceActivity.this); + } + }); + //若是不同步则设置按钮显示的文本为“立即同步”以及对应监听器 + } + syncButton.setEnabled(!TextUtils.isEmpty(getSyncAccountName(this))); + //设置按键可用还是不可用 + + // set last sync time + // 设置最终同步时间 + if (GTaskSyncService.isSyncing()) { + //若是在同步的情况下 + lastSyncTimeView.setText(GTaskSyncService.getProgressString()); + lastSyncTimeView.setVisibility(View.VISIBLE); + // 根据当前同步服务器设置时间显示框的文本以及可见性 + } else { + //若是非同步情况 + long lastSyncTime = getLastSyncTime(this); + if (lastSyncTime != 0) { + lastSyncTimeView.setText(getString(R.string.preferences_last_sync_time, + DateFormat.format(getString(R.string.preferences_last_sync_time_format), + lastSyncTime))); + lastSyncTimeView.setVisibility(View.VISIBLE); + //则根据最后同步时间的信息来编辑时间显示框的文本内容和可见性 + } else { + //若时间为空直接设置为不可见状态 + lastSyncTimeView.setVisibility(View.GONE); + } + } + } + /* + *函数功能:刷新标签界面 + *函数实现:调用上文设置账号和设置按键两个函数来实现 + */ + private void refreshUI() { + loadAccountPreference(); + loadSyncButton(); + } + + /* + * 函数功能:显示账户选择的对话框并进行账户的设置 + * 函数实现:如下注释 + */ + private void showSelectAccountAlertDialog() { + AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this); + //创建一个新的对话框 + + View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null); + TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title); + titleTextView.setText(getString(R.string.preferences_dialog_select_account_title)); + TextView subtitleTextView = (TextView) titleView.findViewById(R.id.account_dialog_subtitle); + subtitleTextView.setText(getString(R.string.preferences_dialog_select_account_tips)); + //设置标题以及子标题的内容 + dialogBuilder.setCustomTitle(titleView); + dialogBuilder.setPositiveButton(null, null); + //设置对话框的自定义标题,建立一个YES的按钮 + Account[] accounts = getGoogleAccounts(); + String defAccount = getSyncAccountName(this); + //获取同步账户信息 + mOriAccounts = accounts; + mHasAddedAccount = false; + + if (accounts.length > 0) { + //若账户不为空 + CharSequence[] items = new CharSequence[accounts.length]; + final CharSequence[] itemMapping = items; + int checkedItem = -1; + int index = 0; + for (Account account : accounts) { + if (TextUtils.equals(account.name, defAccount)) { + checkedItem = index; + //在账户列表中查询到所需账户 + } + items[index++] = account.name; + } + dialogBuilder.setSingleChoiceItems(items, checkedItem, + //在对话框建立一个单选的复选框 + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + setSyncAccount(itemMapping[which].toString()); + dialog.dismiss(); + //取消对话框 + refreshUI(); + } + //设置点击后执行的事件,包括检录新同步账户和刷新标签界面 + }); + //建立对话框网络版的监听器 + } + + View addAccountView = LayoutInflater.from(this).inflate(R.layout.add_account_text, null); + dialogBuilder.setView(addAccountView); + //给新加账户对话框设置自定义样式 + + final AlertDialog dialog = dialogBuilder.show(); + //显示对话框 + addAccountView.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + mHasAddedAccount = true; + //将新加账户的hash置true + Intent intent = new Intent("android.settings.ADD_ACCOUNT_SETTINGS"); + //建立网络建立组件 + intent.putExtra(AUTHORITIES_FILTER_KEY, new String[] { + "gmail-ls" + }); + startActivityForResult(intent, -1); + //跳回上一个选项 + dialog.dismiss(); + } + }); + //建立新加账户对话框的监听器 + } + + /* + * 函数功能:显示账户选择对话框和相关账户操作 + * 函数实现:如下注释 + */ + private void showChangeAccountConfirmAlertDialog() { + AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this); + //创建一个新的对话框 + View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null); + TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title); + titleTextView.setText(getString(R.string.preferences_dialog_change_account_title, + getSyncAccountName(this))); + TextView subtitleTextView = (TextView) titleView.findViewById(R.id.account_dialog_subtitle); + subtitleTextView.setText(getString(R.string.preferences_dialog_change_account_warn_msg)); + //根据同步修改的账户信息设置标题以及子标题的内容 + dialogBuilder.setCustomTitle(titleView); + //设置对话框的自定义标题 + CharSequence[] menuItemArray = new CharSequence[] { + getString(R.string.preferences_menu_change_account), + getString(R.string.preferences_menu_remove_account), + getString(R.string.preferences_menu_cancel) + }; + //定义一些标记字符串 + dialogBuilder.setItems(menuItemArray, new DialogInterface.OnClickListener() { + //设置对话框要显示的一个list,用于显示几个命令时,即change,remove,cancel + public void onClick(DialogInterface dialog, int which) { + //按键功能,由which来决定 + if (which == 0) { + //进入账户选择对话框 + showSelectAccountAlertDialog(); + } else if (which == 1) { + //删除账户并且跟新便签界面 + removeSyncAccount(); + refreshUI(); + } + } + }); + dialogBuilder.show(); + //显示对话框 + } + + /* + *函数功能:获取谷歌账户 + *函数实现:通过账户管理器直接获取 + */ + private Account[] getGoogleAccounts() { + AccountManager accountManager = AccountManager.get(this); + return accountManager.getAccountsByType("com.google"); + } + + /* + * 函数功能:设置同步账户 + * 函数实现:如下注释: + */ + private void setSyncAccount(String account) { + if (!getSyncAccountName(this).equals(account)) { + //假如该账号不在同步账号列表中 + SharedPreferences settings = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE); + SharedPreferences.Editor editor = settings.edit(); + //编辑共享的首选项 + if (account != null) { + editor.putString(PREFERENCE_SYNC_ACCOUNT_NAME, account); + } else { + editor.putString(PREFERENCE_SYNC_ACCOUNT_NAME, ""); + } + //将该账号加入到首选项中 + + editor.commit(); + //提交修改的数据 + + + setLastSyncTime(this, 0); + //将最后同步时间清零 + + // clean up local gtask related info + new Thread(new Runnable() { + public void run() { + ContentValues values = new ContentValues(); + values.put(NoteColumns.GTASK_ID, ""); + values.put(NoteColumns.SYNC_ID, 0); + getContentResolver().update(Notes.CONTENT_NOTE_URI, values, null, null); + } + }).start(); + //重置当地同步任务的信息 + + Toast.makeText(NotesPreferenceActivity.this, + getString(R.string.preferences_toast_success_set_accout, account), + Toast.LENGTH_SHORT).show(); + //将toast的文本信息置为“设置账户成功”并显示出来 + } + } + /* + * 函数功能:删除同步账户 + * 函数实现:如下注释: + */ + private void removeSyncAccount() { + SharedPreferences settings = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE); + SharedPreferences.Editor editor = settings.edit(); + //设置共享首选项 + + if (settings.contains(PREFERENCE_SYNC_ACCOUNT_NAME)) { + editor.remove(PREFERENCE_SYNC_ACCOUNT_NAME); + //假如当前首选项中有账户就删除 + } + if (settings.contains(PREFERENCE_LAST_SYNC_TIME)) { + editor.remove(PREFERENCE_LAST_SYNC_TIME); + //删除当前首选项中有账户时间 + } + editor.commit(); + //提交更新后的数据 + + // clean up local gtask related info + new Thread(new Runnable() { + public void run() { + ContentValues values = new ContentValues(); + values.put(NoteColumns.GTASK_ID, ""); + values.put(NoteColumns.SYNC_ID, 0); + getContentResolver().update(Notes.CONTENT_NOTE_URI, values, null, null); + } + }).start(); + //重置当地同步任务的信息 + } + + /* + * 函数功能:获取同步账户名称 + * 函数实现:通过共享的首选项里的信息直接获取 + */ + public static String getSyncAccountName(Context context) { + SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, + Context.MODE_PRIVATE); + return settings.getString(PREFERENCE_SYNC_ACCOUNT_NAME, ""); + } + + /* + * 函数功能:设置最终同步的时间 + * 函数实现:如下注释 + */ + public static void setLastSyncTime(Context context, long time) { + SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, + Context.MODE_PRIVATE); + SharedPreferences.Editor editor = settings.edit(); + // 从共享首选项中找到相关账户并获取其编辑器 + editor.putLong(PREFERENCE_LAST_SYNC_TIME, time); + editor.commit(); + //编辑最终同步时间并提交更新 + } + /* + * 函数功能:获取最终同步时间 + * 函数实现:通过共享的首选项里的信息直接获取 + */ + public static long getLastSyncTime(Context context) { + SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, + Context.MODE_PRIVATE); + return settings.getLong(PREFERENCE_LAST_SYNC_TIME, 0); + } + + /* + * 函数功能:接受同步信息 + * 函数实现:继承BroadcastReceiver + */ + private class GTaskReceiver extends BroadcastReceiver { + + @Override + public void onReceive(Context context, Intent intent) { + refreshUI(); + if (intent.getBooleanExtra(GTaskSyncService.GTASK_SERVICE_BROADCAST_IS_SYNCING, false)) { + //获取随广播而来的Intent中的同步服务的数据 + TextView syncStatus = (TextView) findViewById(R.id.prefenerece_sync_status_textview); + syncStatus.setText(intent + .getStringExtra(GTaskSyncService.GTASK_SERVICE_BROADCAST_PROGRESS_MSG)); + //通过获取的数据在设置系统的状态 + } + + } + } + + /* + * 函数功能:处理菜单的选项 + * 函数实现:如下注释 + * 参数:MenuItem菜单选项 + */ + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + //根据选项的id选择,这里只有一个主页 + case android.R.id.home: + Intent intent = new Intent(this, NotesListActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + return true; + //在主页情况下在创建连接组件intent,发出清空的信号并开始一个相应的activity + default: + return false; + } + } +} + \ No newline at end of file diff --git a/doc/210340038张卓杨/tool类/BackupUtils.txt b/doc/210340038张卓杨/tool类/BackupUtils.txt new file mode 100644 index 0000000..7e5abe4 --- /dev/null +++ b/doc/210340038张卓杨/tool类/BackupUtils.txt @@ -0,0 +1,310 @@ +BackupUtils: + +package net.micode.notes.tool; + +public class BackupUtils { + private static final String TAG = "BackupUtils"; + // Singleton stuff + private static BackupUtils sInstance; //类里面定义自己类的对象 + + public static synchronized BackupUtils getInstance(Context context) { + //当某个线程运行时,要检查其他线程是否也在进行 + if (sInstance == null) { + sInstance = new BackupUtils(context); + } + return sInstance; + } + + /** + * Following states are signs to represents backup or restore + * status + */ + // Currently, the sdcard is not mounted 手机内没有SD卡 + public static final int STATE_SD_CARD_UNMOUONTED = 0; + // The backup file not exist 没有备份文件夹 + public static final int STATE_BACKUP_FILE_NOT_EXIST = 1; + // The data is not well formated, may be changed by other programs 数据已被破坏,也可能被修改 + public static final int STATE_DATA_DESTROIED = 2; + // Some run-time exception which causes restore or backup fails 超时异常 + public static final int STATE_SYSTEM_ERROR = 3; + // Backup or restore success 成功存储 + public static final int STATE_SUCCESS = 4; + + private TextExport mTextExport; + + private BackupUtils(Context context) { //初始化函数 + mTextExport = new TextExport(context); + } + + private static boolean externalStorageAvailable() { //外部存储功能是否正常 + return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()); + } + + public int exportToText() { + return mTextExport.exportToText(); + } + + public String getExportedTextFileName() { + return mTextExport.mFileName; + } + + public String getExportedTextFileDir() { + return mTextExport.mFileDirectory; + } + + private static class TextExport { + private static final String[] NOTE_PROJECTION = { + NoteColumns.ID, + NoteColumns.MODIFIED_DATE, + NoteColumns.SNIPPET, + NoteColumns.TYPE + }; + + private static final int NOTE_COLUMN_ID = 0; + + private static final int NOTE_COLUMN_MODIFIED_DATE = 1; + + private static final int NOTE_COLUMN_SNIPPET = 2; + + private static final String[] DATA_PROJECTION = { + DataColumns.CONTENT, + DataColumns.MIME_TYPE, + DataColumns.DATA1, + DataColumns.DATA2, + DataColumns.DATA3, + DataColumns.DATA4, + }; + + private static final int DATA_COLUMN_CONTENT = 0; + + private static final int DATA_COLUMN_MIME_TYPE = 1; + + private static final int DATA_COLUMN_CALL_DATE = 2; + + private static final int DATA_COLUMN_PHONE_NUMBER = 4; + + private final String [] TEXT_FORMAT; + private static final int FORMAT_FOLDER_NAME = 0; + private static final int FORMAT_NOTE_DATE = 1; + private static final int FORMAT_NOTE_CONTENT = 2; + + private Context mContext; + private String mFileName; + private String mFileDirectory; + + public TextExport(Context context) { + TEXT_FORMAT = context.getResources().getStringArray(R.array.format_for_exported_note); + mContext = context; + mFileName = ""; + mFileDirectory = ""; + } + + private String getFormat(int id) { //获取文本的组成部分 + return TEXT_FORMAT[id]; + } + + /** + * Export the folder identified by folder id to text + */ + private void exportFolderToText(String folderId, PrintStream ps) { + // Query notes belong to this folder 通过查询parent id来制定ID文件夹下的Note + Cursor notesCursor = mContext.getContentResolver().query(Notes.CONTENT_NOTE_URI, + NOTE_PROJECTION, NoteColumns.PARENT_ID + "=?", new String[] { + folderId + }, null); + + if (notesCursor != null) { + if (notesCursor.moveToFirst()) { + do { + // Print note's last modified date ps里面保存有这份note的日期 + ps.println(String.format(getFormat(FORMAT_NOTE_DATE), DateFormat.format( + mContext.getString(R.string.format_datetime_mdhm), + notesCursor.getLong(NOTE_COLUMN_MODIFIED_DATE)))); + // Query data belong to this note + String noteId = notesCursor.getString(NOTE_COLUMN_ID); + exportNoteToText(noteId, ps); //将文件导出到text + } while (notesCursor.moveToNext()); + } + notesCursor.close(); + } + } + + /** + * Export note identified by id to a print stream + */ + private void exportNoteToText(String noteId, PrintStream ps) { + Cursor dataCursor = mContext.getContentResolver().query(Notes.CONTENT_DATA_URI, + DATA_PROJECTION, DataColumns.NOTE_ID + "=?", new String[] { + noteId + }, null); + + if (dataCursor != null) { //利用光标来扫描内容,看是callnote或者note二者中的哪一个,靠ps.printline输出 + if (dataCursor.moveToFirst()) { + do { + String mimeType = dataCursor.getString(DATA_COLUMN_MIME_TYPE); + if (DataConstants.CALL_NOTE.equals(mimeType)) { + // Print phone number 输出电话号 + String phoneNumber = dataCursor.getString(DATA_COLUMN_PHONE_NUMBER); + long callDate = dataCursor.getLong(DATA_COLUMN_CALL_DATE); + String location = dataCursor.getString(DATA_COLUMN_CONTENT); + + if (!TextUtils.isEmpty(phoneNumber)) { //判断是否为空字符 + ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), + phoneNumber)); + } + // Print call date + ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), DateFormat + .format(mContext.getString(R.string.format_datetime_mdhm), + callDate))); + // Print call attachment location 打印调用附件位置 + if (!TextUtils.isEmpty(location)) { + ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), + location)); + } + } else if (DataConstants.NOTE.equals(mimeType)) { + String content = dataCursor.getString(DATA_COLUMN_CONTENT); + if (!TextUtils.isEmpty(content)) { + ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), + content)); + } + } + } while (dataCursor.moveToNext()); + } + dataCursor.close(); + } + // print a line separator between note 在注释间打印分隔符 + try { + ps.write(new byte[] { + Character.LINE_SEPARATOR, Character.LETTER_NUMBER + }); + } catch (IOException e) { + Log.e(TAG, e.toString()); + } + } + + /** + * Note will be exported as text which is user readable + */ + public int exportToText() { //总函数,调用上面的exportFolder和exportNote + if (!externalStorageAvailable()) { + Log.d(TAG, "Media was not mounted"); + return STATE_SD_CARD_UNMOUONTED; + } + + PrintStream ps = getExportToTextPrintStream(); + if (ps == null) { + Log.e(TAG, "get print stream error"); + return STATE_SYSTEM_ERROR; + } + // First export folder and its notes 导出文件夹里面包含的便签 + Cursor folderCursor = mContext.getContentResolver().query( + Notes.CONTENT_NOTE_URI, + NOTE_PROJECTION, + "(" + NoteColumns.TYPE + "=" + Notes.TYPE_FOLDER + " AND " + + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER + ") OR " + + NoteColumns.ID + "=" + Notes.ID_CALL_RECORD_FOLDER, null, null); + + if (folderCursor != null) { + if (folderCursor.moveToFirst()) { + do { + // Print folder's name + String folderName = ""; + if(folderCursor.getLong(NOTE_COLUMN_ID) == Notes.ID_CALL_RECORD_FOLDER) { + folderName = mContext.getString(R.string.call_record_folder_name); + } else { + folderName = folderCursor.getString(NOTE_COLUMN_SNIPPET); + } + if (!TextUtils.isEmpty(folderName)) { + ps.println(String.format(getFormat(FORMAT_FOLDER_NAME), folderName)); + } + String folderId = folderCursor.getString(NOTE_COLUMN_ID); + exportFolderToText(folderId, ps); + } while (folderCursor.moveToNext()); + } + folderCursor.close(); + } + + // Export notes in root's folder 将根目录里的便签导出 + Cursor noteCursor = mContext.getContentResolver().query( + Notes.CONTENT_NOTE_URI, + NOTE_PROJECTION, + NoteColumns.TYPE + "=" + +Notes.TYPE_NOTE + " AND " + NoteColumns.PARENT_ID + + "=0", null, null); + + if (noteCursor != null) { + if (noteCursor.moveToFirst()) { + do { + ps.println(String.format(getFormat(FORMAT_NOTE_DATE), DateFormat.format( + mContext.getString(R.string.format_datetime_mdhm), + noteCursor.getLong(NOTE_COLUMN_MODIFIED_DATE)))); + // Query data belong to this note 查询数据属于此备注 + String noteId = noteCursor.getString(NOTE_COLUMN_ID); + exportNoteToText(noteId, ps); + } while (noteCursor.moveToNext()); + } + noteCursor.close(); + } + ps.close(); + + return STATE_SUCCESS; + } + + /** + * Get a print stream pointed to the file {@generateExportedTextFile} + */ + private PrintStream getExportToTextPrintStream() { + File file = generateFileMountedOnSDcard(mContext, R.string.file_path, + R.string.file_name_txt_format); + if (file == null) { + Log.e(TAG, "create file to exported failed"); + return null; + } + mFileName = file.getName(); + mFileDirectory = mContext.getString(R.string.file_path); + PrintStream ps = null; + try { + FileOutputStream fos = new FileOutputStream(file); + ps = new PrintStream(fos); //将ps输出流输出到特定的文件 + } catch (FileNotFoundException e) { + e.printStackTrace(); + return null; + } catch (NullPointerException e) { + e.printStackTrace(); + return null; + } + return ps; + } + } + + /** + * Generate the text file to store imported data + */ + private static File generateFileMountedOnSDcard(Context context, int filePathResId, int fileNameFormatResId) { + StringBuilder sb = new StringBuilder(); + sb.append(Environment.getExternalStorageDirectory()); //SD卡的存储路径 + sb.append(context.getString(filePathResId)); //文件的存储路径 + File filedir = new File(sb.toString()); //filedir应该就是用来存储路径信息 + sb.append(context.getString( + fileNameFormatResId, + DateFormat.format(context.getString(R.string.format_date_ymd), + System.currentTimeMillis()))); + File file = new File(sb.toString()); + + try { //如果这些文件不存在,则新建 + if (!filedir.exists()) { + filedir.mkdir(); + } + if (!file.exists()) { + file.createNewFile(); + } + return file; + } catch (SecurityException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } +// try catch 异常处理 + return null; + } +} + \ No newline at end of file diff --git a/doc/210340038张卓杨/tool类/DataUtils.txt b/doc/210340038张卓杨/tool类/DataUtils.txt new file mode 100644 index 0000000..858cbf6 --- /dev/null +++ b/doc/210340038张卓杨/tool类/DataUtils.txt @@ -0,0 +1,264 @@ +DataUtils: + +package net.micode.notes.tool; + +public class DataUtils { + public static final String TAG = "DataUtils"; + public static boolean batchDeleteNotes(ContentResolver resolver, HashSet ids) { //删除多个笔记 + if (ids == null) { + Log.d(TAG, "the ids is null"); + return true; + } + if (ids.size() == 0) { + Log.d(TAG, "no id is in the hashset"); + return true; + } + + ArrayList operationList = new ArrayList(); //提供一个任务列表 + for (long id : ids) { + if(id == Notes.ID_ROOT_FOLDER) { + Log.e(TAG, "Don't delete system folder root"); + continue; + } //如果发现是根文件夹,则不删除 + ContentProviderOperation.Builder builder = ContentProviderOperation + .newDelete(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id)); //用newDelete实现删除功能 + operationList.add(builder.build()); // + } + try { + ContentProviderResult[] results = resolver.applyBatch(Notes.AUTHORITY, operationList);//Authority用于唯一标识这个ContentProvider,外部调用者可以根据这个标识来找到它。 + if (results == null || results.length == 0 || results[0] == null) { + Log.d(TAG, "delete notes failed, ids:" + ids.toString()); + return false; + } + return true; + } catch (RemoteException e) { + Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); + } catch (OperationApplicationException e) { + Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); + } + return false; + } + + public static void moveNoteToFoler(ContentResolver resolver, long id, long srcFolderId, long desFolderId) { + ContentValues values = new ContentValues(); + values.put(NoteColumns.PARENT_ID, desFolderId); + values.put(NoteColumns.ORIGIN_PARENT_ID, srcFolderId); + values.put(NoteColumns.LOCAL_MODIFIED, 1); + resolver.update(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id), values, null, null); //对需要移动的便签进行数据更新,然后用update实现 + } + + public static boolean batchMoveToFolder(ContentResolver resolver, HashSet ids, + long folderId) { + if (ids == null) { + Log.d(TAG, "the ids is null"); + return true; + } + + ArrayList operationList = new ArrayList(); + for (long id : ids) { + ContentProviderOperation.Builder builder = ContentProviderOperation + .newUpdate(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id)); //通过withAppendedId方法,为该Uri加上ID + builder.withValue(NoteColumns.PARENT_ID, folderId); + builder.withValue(NoteColumns.LOCAL_MODIFIED, 1); + operationList.add(builder.build()); + }//将ids里包含的每一列的数据逐次加入到operationList中,等待最后的批量处理 + + try { + ContentProviderResult[] results = resolver.applyBatch(Notes.AUTHORITY, operationList); //applyBatch一次性处理一个操作列表 + if (results == null || results.length == 0 || results[0] == null) { + Log.d(TAG, "delete notes failed, ids:" + ids.toString()); + return false; + } + 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); //筛选条件:源文件不为trash folder + + int count = 0; + if(cursor != null) { + if(cursor.moveToFirst()) { + try { + count = cursor.getInt(0); + } catch (IndexOutOfBoundsException e) { + Log.e(TAG, "get folder count failed:" + e.toString()); + } finally { + cursor.close(); + } + } + } + return count; + } + + public static boolean visibleInNoteDatabase(ContentResolver resolver, long noteId, int type) { + Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), //通过withAppendedId方法,为该Uri加上ID + null, + NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER, + new String [] {String.valueOf(type)}, + null); //查询条件:type符合,且不属于垃圾文件夹 + + boolean exist = false; + if (cursor != null) { + if (cursor.getCount() > 0) {//用getcount函数判断cursor是否为空 + exist = true; + } + cursor.close(); + } + return exist; + } + + public static boolean existInNoteDatabase(ContentResolver resolver, long noteId) { + Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), + null, null, null, null); + + boolean exist = false; + if (cursor != null) { + if (cursor.getCount() > 0) { + exist = true; + } + cursor.close(); + } + return exist; + } + + public static boolean existInDataDatabase(ContentResolver resolver, long dataId) { + Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_DATA_URI, dataId), + null, null, null, null); + + boolean exist = false; + if (cursor != null) { + if (cursor.getCount() > 0) { + exist = true; + } + cursor.close(); + } + return exist; + } + + public static boolean checkVisibleFolderName(ContentResolver resolver, String name) { + Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI, null, + NoteColumns.TYPE + "=" + Notes.TYPE_FOLDER + + " AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER + + " AND " + NoteColumns.SNIPPET + "=?", + new String[] { name }, null); + //通过名字查询文件是否存在 + boolean exist = false; + if(cursor != null) { + if(cursor.getCount() > 0) { + exist = true; + } + cursor.close(); + } + return exist; + } + + public static HashSet getFolderNoteWidget(ContentResolver resolver, long folderId) { + Cursor c = resolver.query(Notes.CONTENT_NOTE_URI, + new String[] { NoteColumns.WIDGET_ID, NoteColumns.WIDGET_TYPE }, + NoteColumns.PARENT_ID + "=?", + new String[] { String.valueOf(folderId) }, + null); //查询条件:父ID是传入的folderId; + + HashSet set = null; + if (c != null) { + if (c.moveToFirst()) { + set = new HashSet(); + do { + try { + AppWidgetAttribute widget = new AppWidgetAttribute(); + widget.widgetId = c.getInt(0); //0对应的NoteColumns.WIDGET_ID + widget.widgetType = c.getInt(1); //1对应的NoteColumns.WIDGET_TYPE + set.add(widget); + } catch (IndexOutOfBoundsException e) { + Log.e(TAG, e.toString()); + } + } while (c.moveToNext()); //查询下一条 + } + c.close(); + } + return set; + } + + public static String getCallNumberByNoteId(ContentResolver resolver, long noteId) { + Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI, + new String [] { CallNote.PHONE_NUMBER }, + CallNote.NOTE_ID + "=? AND " + CallNote.MIME_TYPE + "=?", + new String [] { String.valueOf(noteId), CallNote.CONTENT_ITEM_TYPE }, + null); + + if (cursor != null && cursor.moveToFirst()) { + try { + return cursor.getString(0); + } catch (IndexOutOfBoundsException e) { + Log.e(TAG, "Get call number fails " + e.toString()); + } finally { + cursor.close(); + } + } + return ""; + } + + public static long getNoteIdByPhoneNumberAndCallDate(ContentResolver resolver, String phoneNumber, long callDate) { + Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI, + new String [] { CallNote.NOTE_ID }, + CallNote.CALL_DATE + "=? AND " + CallNote.MIME_TYPE + "=? AND PHONE_NUMBERS_EQUAL(" + + CallNote.PHONE_NUMBER + ",?)", + new String [] { String.valueOf(callDate), CallNote.CONTENT_ITEM_TYPE, phoneNumber }, + null); + //通过数据库操作,查询条件是(callDate和phoneNumber匹配传入参数的值) + + if (cursor != null) { + if (cursor.moveToFirst()) { + try { + return cursor.getLong(0); //0对应的CallNote.NOTE_ID + } catch (IndexOutOfBoundsException e) { + Log.e(TAG, "Get call note id fails " + e.toString()); + } + } + cursor.close(); + } + return 0; + } + + public static String getSnippetById(ContentResolver resolver, long noteId) { + Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI, + new String [] { NoteColumns.SNIPPET }, + NoteColumns.ID + "=?", + new String [] { String.valueOf(noteId)}, + null);//查询条件:noteId + + 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; + } + +} \ No newline at end of file diff --git a/doc/210340038张卓杨/tool类/GTaskStringUtils.txt b/doc/210340038张卓杨/tool类/GTaskStringUtils.txt new file mode 100644 index 0000000..71a0694 --- /dev/null +++ b/doc/210340038张卓杨/tool类/GTaskStringUtils.txt @@ -0,0 +1,100 @@ +GTaskStringUtils: + +package net.micode.notes.tool; + +//定义了很多的静态字符串,目的就是为了提供jsonObject中相应字符串的钥匙。 +public class GTaskStringUtils { + + public final static String GTASK_JSON_ACTION_ID = "action_id"; + + public final static String GTASK_JSON_ACTION_LIST = "action_list"; + + public final static String GTASK_JSON_ACTION_TYPE = "action_type"; + + public final static String GTASK_JSON_ACTION_TYPE_CREATE = "create"; + + public final static String GTASK_JSON_ACTION_TYPE_GETALL = "get_all"; + + public final static String GTASK_JSON_ACTION_TYPE_MOVE = "move"; + + public final static String GTASK_JSON_ACTION_TYPE_UPDATE = "update"; + + public final static String GTASK_JSON_CREATOR_ID = "creator_id"; + + public final static String GTASK_JSON_CHILD_ENTITY = "child_entity"; + + public final static String GTASK_JSON_CLIENT_VERSION = "client_version"; + + public final static String GTASK_JSON_COMPLETED = "completed"; + + public final static String GTASK_JSON_CURRENT_LIST_ID = "current_list_id"; + + public final static String GTASK_JSON_DEFAULT_LIST_ID = "default_list_id"; + + public final static String GTASK_JSON_DELETED = "deleted"; + + public final static String GTASK_JSON_DEST_LIST = "dest_list"; + + public final static String GTASK_JSON_DEST_PARENT = "dest_parent"; + + public final static String GTASK_JSON_DEST_PARENT_TYPE = "dest_parent_type"; + + public final static String GTASK_JSON_ENTITY_DELTA = "entity_delta"; + + public final static String GTASK_JSON_ENTITY_TYPE = "entity_type"; + + public final static String GTASK_JSON_GET_DELETED = "get_deleted"; + + public final static String GTASK_JSON_ID = "id"; + + public final static String GTASK_JSON_INDEX = "index"; + + public final static String GTASK_JSON_LAST_MODIFIED = "last_modified"; + + public final static String GTASK_JSON_LATEST_SYNC_POINT = "latest_sync_point"; + + public final static String GTASK_JSON_LIST_ID = "list_id"; + + public final static String GTASK_JSON_LISTS = "lists"; + + public final static String GTASK_JSON_NAME = "name"; + + public final static String GTASK_JSON_NEW_ID = "new_id"; + + public final static String GTASK_JSON_NOTES = "notes"; + + public final static String GTASK_JSON_PARENT_ID = "parent_id"; + + public final static String GTASK_JSON_PRIOR_SIBLING_ID = "prior_sibling_id"; + + public final static String GTASK_JSON_RESULTS = "results"; + + public final static String GTASK_JSON_SOURCE_LIST = "source_list"; + + public final static String GTASK_JSON_TASKS = "tasks"; + + public final static String GTASK_JSON_TYPE = "type"; + + public final static String GTASK_JSON_TYPE_GROUP = "GROUP"; + + public final static String GTASK_JSON_TYPE_TASK = "TASK"; + + public final static String GTASK_JSON_USER = "user"; + + public final static String MIUI_FOLDER_PREFFIX = "[MIUI_Notes]"; + + public final static String FOLDER_DEFAULT = "Default"; + + public final static String FOLDER_CALL_NOTE = "Call_Note"; + + public final static String FOLDER_META = "METADATA"; + + public final static String META_HEAD_GTASK_ID = "meta_gid"; + + public final static String META_HEAD_NOTE = "meta_note"; + + public final static String META_HEAD_DATA = "meta_data"; + + public final static String META_NOTE_NAME = "[META INFO] DON'T UPDATE AND DELETE"; + +} \ No newline at end of file diff --git a/doc/210340038张卓杨/tool类/ResourceParser.txt b/doc/210340038张卓杨/tool类/ResourceParser.txt new file mode 100644 index 0000000..5750ec3 --- /dev/null +++ b/doc/210340038张卓杨/tool类/ResourceParser.txt @@ -0,0 +1,163 @@ +ResourceParser: + +package net.micode.notes.tool; + +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 + //R.drawable 图片资源 + }; + + private final static int [] BG_EDIT_TITLE_RESOURCES = new int [] { + R.drawable.edit_title_yellow, + R.drawable.edit_title_blue, + R.drawable.edit_title_white, + R.drawable.edit_title_green, + R.drawable.edit_title_red + }; + + public static int getNoteBgResource(int id) { + return BG_EDIT_RESOURCES[id]; + } + + public static int getNoteTitleBgResource(int id) { + return BG_EDIT_TITLE_RESOURCES[id]; + } + } + //获取默认的背景颜色 + public static int getDefaultBgId(Context context) { + if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean( + NotesPreferenceActivity.PREFERENCE_SET_BG_COLOR_KEY, false)) { + return (int) (Math.random() * NoteBgResources.BG_EDIT_RESOURCES.length); + } else { + return BG_DEFAULT_COLOR; + } + } + + public static class NoteItemBgResources { + private final static int [] BG_FIRST_RESOURCES = new int [] { + R.drawable.list_yellow_up, + R.drawable.list_blue_up, + R.drawable.list_white_up, + R.drawable.list_green_up, + R.drawable.list_red_up + }; + + private final static int [] BG_NORMAL_RESOURCES = new int [] { + R.drawable.list_yellow_middle, + R.drawable.list_blue_middle, + R.drawable.list_white_middle, + R.drawable.list_green_middle, + R.drawable.list_red_middle + }; + + private final static int [] BG_LAST_RESOURCES = new int [] { + R.drawable.list_yellow_down, + R.drawable.list_blue_down, + R.drawable.list_white_down, + R.drawable.list_green_down, + R.drawable.list_red_down, + }; + + private final static int [] BG_SINGLE_RESOURCES = new int [] { + R.drawable.list_yellow_single, + R.drawable.list_blue_single, + R.drawable.list_white_single, + R.drawable.list_green_single, + R.drawable.list_red_single + }; + + public static int getNoteBgFirstRes(int id) { + return BG_FIRST_RESOURCES[id]; + } + + public static int getNoteBgLastRes(int id) { + return BG_LAST_RESOURCES[id]; + } + + public static int getNoteBgSingleRes(int id) { + return BG_SINGLE_RESOURCES[id]; + } + + public static int getNoteBgNormalRes(int id) { + return BG_NORMAL_RESOURCES[id]; + } + + public static int getFolderBgRes() { + return R.drawable.list_folder; + } + } + + public static class WidgetBgResources { + private final static int [] BG_2X_RESOURCES = new int [] { + R.drawable.widget_2x_yellow, + R.drawable.widget_2x_blue, + R.drawable.widget_2x_white, + R.drawable.widget_2x_green, + R.drawable.widget_2x_red, + }; + + public static int getWidget2xBgResource(int id) { + return BG_2X_RESOURCES[id]; + } + + private final static int [] BG_4X_RESOURCES = new int [] { + R.drawable.widget_4x_yellow, + R.drawable.widget_4x_blue, + R.drawable.widget_4x_white, + R.drawable.widget_4x_green, + R.drawable.widget_4x_red + }; + + public static int getWidget4xBgResource(int id) { + return BG_4X_RESOURCES[id]; + } + } + + public static class TextAppearanceResources { + private final static int [] TEXTAPPEARANCE_RESOURCES = new int [] { + R.style.TextAppearanceNormal, + R.style.TextAppearanceMedium, + R.style.TextAppearanceLarge, + R.style.TextAppearanceSuper + }; + + //一个防止输入的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; + } + } +} \ No newline at end of file diff --git a/doc/210340038张卓杨/widget类/NoteWidgetProvider.txt b/doc/210340038张卓杨/widget类/NoteWidgetProvider.txt new file mode 100644 index 0000000..4a991cc --- /dev/null +++ b/doc/210340038张卓杨/widget类/NoteWidgetProvider.txt @@ -0,0 +1,118 @@ +NoteWidgetProvider: + +package net.micode.notes.widget; +import android.app.PendingIntent; +import android.appwidget.AppWidgetManager; +import android.appwidget.AppWidgetProvider; +import android.content.ContentValues; +import android.content.Context; +import android.content.Intent; +import android.database.Cursor; +import android.util.Log; +import android.widget.RemoteViews; + +import net.micode.notes.R; +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.tool.ResourceParser; +import net.micode.notes.ui.NoteEditActivity; +import net.micode.notes.ui.NotesListActivity; + +public abstract class NoteWidgetProvider extends AppWidgetProvider { + public static final String [] PROJECTION = new String [] { + NoteColumns.ID, + NoteColumns.BG_COLOR_ID, + NoteColumns.SNIPPET + };//小米便签的桌面挂件 + + public static final int COLUMN_ID = 0; + public static final int COLUMN_BG_COLOR_ID = 1; + public static final int COLUMN_SNIPPET = 2; + + private static final String TAG = "NoteWidgetProvider"; + + @Override + public void onDeleted(Context context, int[] appWidgetIds) { + ContentValues values = new ContentValues(); + values.put(NoteColumns.WIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); + for (int i = 0; i < appWidgetIds.length; i++) { + context.getContentResolver().update(Notes.CONTENT_NOTE_URI, + values, + NoteColumns.WIDGET_ID + "=?", + new String[] { String.valueOf(appWidgetIds[i])}); + } + } + + private Cursor getNoteWidgetInfo(Context context, int widgetId) { + return context.getContentResolver().query(Notes.CONTENT_NOTE_URI, + PROJECTION, + NoteColumns.WIDGET_ID + "=? AND " + NoteColumns.PARENT_ID + "<>?", + new String[] { String.valueOf(widgetId), String.valueOf(Notes.ID_TRASH_FOLER) }, + null); + } + + protected void update(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { + update(context, appWidgetManager, appWidgetIds, false); + } + + private void update(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds, + boolean privacyMode) { + for (int i = 0; i < appWidgetIds.length; i++) { + if (appWidgetIds[i] != AppWidgetManager.INVALID_APPWIDGET_ID) { + int bgId = ResourceParser.getDefaultBgId(context); + String snippet = ""; + Intent intent = new Intent(context, NoteEditActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); + intent.putExtra(Notes.INTENT_EXTRA_WIDGET_ID, appWidgetIds[i]); + intent.putExtra(Notes.INTENT_EXTRA_WIDGET_TYPE, getWidgetType()); + + Cursor c = getNoteWidgetInfo(context, appWidgetIds[i]); + if (c != null && c.moveToFirst()) { + if (c.getCount() > 1) { + Log.e(TAG, "Multiple message with same widget id:" + appWidgetIds[i]); + c.close(); + return; + } + snippet = c.getString(COLUMN_SNIPPET); + bgId = c.getInt(COLUMN_BG_COLOR_ID); + intent.putExtra(Intent.EXTRA_UID, c.getLong(COLUMN_ID)); + intent.setAction(Intent.ACTION_VIEW); + } else { + snippet = context.getResources().getString(R.string.widget_havenot_content); + intent.setAction(Intent.ACTION_INSERT_OR_EDIT); + } + + if (c != null) { + c.close(); + } + + RemoteViews rv = new RemoteViews(context.getPackageName(), getLayoutId()); + rv.setImageViewResource(R.id.widget_bg_image, getBgResourceId(bgId)); + intent.putExtra(Notes.INTENT_EXTRA_BACKGROUND_ID, bgId); + /** + * Generate the pending intent to start host for the widget + */ + PendingIntent pendingIntent = null; + if (privacyMode) { + rv.setTextViewText(R.id.widget_text, + context.getString(R.string.widget_under_visit_mode)); + pendingIntent = PendingIntent.getActivity(context, appWidgetIds[i], new Intent( + context, NotesListActivity.class), PendingIntent.FLAG_UPDATE_CURRENT); + } else { + rv.setTextViewText(R.id.widget_text, snippet); + pendingIntent = PendingIntent.getActivity(context, appWidgetIds[i], intent, + PendingIntent.FLAG_UPDATE_CURRENT); + } + + rv.setOnClickPendingIntent(R.id.widget_text, pendingIntent); + appWidgetManager.updateAppWidget(appWidgetIds[i], rv); + } + } + } + + protected abstract int getBgResourceId(int bgId); + + protected abstract int getLayoutId(); + + protected abstract int getWidgetType(); +} \ No newline at end of file diff --git a/doc/210340038张卓杨/widget类/NoteWidgetProvider_2x.txt b/doc/210340038张卓杨/widget类/NoteWidgetProvider_2x.txt new file mode 100644 index 0000000..e21533f --- /dev/null +++ b/doc/210340038张卓杨/widget类/NoteWidgetProvider_2x.txt @@ -0,0 +1,34 @@ +NoteWidgetProvider_2x: + +package net.micode.notes.widget; + +import android.appwidget.AppWidgetManager; +import android.content.Context; + +import net.micode.notes.R; +import net.micode.notes.data.Notes; +import net.micode.notes.tool.ResourceParser; + + +public class NoteWidgetProvider_2x extends NoteWidgetProvider { + //2倍大小的桌面挂件 + @Override + public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { + super.update(context, appWidgetManager, appWidgetIds); + } + + @Override + protected int getLayoutId() { + return R.layout.widget_2x; + } + + @Override + protected int getBgResourceId(int bgId) { + return ResourceParser.WidgetBgResources.getWidget2xBgResource(bgId); + } + + @Override + protected int getWidgetType() { + return Notes.TYPE_WIDGET_2X; + } +} diff --git a/doc/210340038张卓杨/widget类/NoteWidgetProvider_4x.txt b/doc/210340038张卓杨/widget类/NoteWidgetProvider_4x.txt new file mode 100644 index 0000000..8690867 --- /dev/null +++ b/doc/210340038张卓杨/widget类/NoteWidgetProvider_4x.txt @@ -0,0 +1,33 @@ +NoteWidgetProvider_4x: + +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 { + //4倍大小的桌面挂件 + @Override + public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { + super.update(context, appWidgetManager, appWidgetIds); + } + + protected int getLayoutId() { + return R.layout.widget_4x; + } + + @Override + protected int getBgResourceId(int bgId) { + return ResourceParser.WidgetBgResources.getWidget4xBgResource(bgId); + } + + @Override + protected int getWidgetType() { + return Notes.TYPE_WIDGET_4X; + } +} diff --git a/doc/陈禹昕组泛读报告.docx b/doc/陈禹昕组泛读报告.docx new file mode 100644 index 0000000000000000000000000000000000000000..bcd2d2acb133a390e1a82fdd8a22646e7aa83051 GIT binary patch literal 398484 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 $hW>^(5KBrEEZf~ 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%0Af&EAcH0!T?4!^t7Jbeb3k(BmkZqknyFYJZ>0( zof%Bh7u6NWy%cMWr4g)eXy27au-{V=K=fa|ST+#yJ53zO%gT?lC;g*n6qP-+IyRRV zU7?j_JAhbD`4veBuP$^=g#I}z%&C21Q2VNO0!JJG^MT&AMZ5FBpXfSCn!hOnhP*R)pn$81%dXKrwM`;|wJmN1R|qe91i;1dQW*1YhSK$M=cT{JGrnxdn%0 zoKVuSugGWn4s`E~4!eJ0VcRoqzk(h-e@HUbUV+lvC+7l|8 z-CnxSKJ>QKVFBK=V|?L_(Ob;BOt2%s)RAx@SY6cV7+?m82`1EUMF4@Bz92DUMK3#H zzPGZ?VtOiXfuN=J#pi4!+N<8Sd+}v-cIe!Vg1JWmA+~X}e6*3YPq6mkgDpFBBRAn_ zgzRC~h*6ds^WK;_9Vnzh>)_-t@2wo>h&TEVXgRx09C4CC5-IDbL z8)}ysOg2hhTB|F}U$7HB@e<(bKJR(woz!&ad_HhdVuo{u@8vvWA4GY~F8+}?=N{&% z_dG!bXUpeN;yTl%b(B31^VqMsCHDY|emygm6+>l^sRAg_%HgFdW}r)rYu<&h!<0G( zLVsYd?@oXBfddbE>!l?!B}Zmj-;6QRl@E|6$(U5*thNPmt!p@s^|xtB%h5g!srTr>t5Pa+BxgPgH(_+27E6*S!+1E6IZ}{Oss^xcTt1TK_;4(4e?l9J?z8Bu z!bA2Xw%j|__Y0%!0fxFzy3f^(4J8vl-GjG;3`Sd+o>Zj;*L=^Q*sSppYn3TkWQjCP zs9+%HW)KNRJ_3$S`}bc<733v+?Mfl7ebh$LT036ZmQ9dniV?gMUU8f5L=;T4cJh?n z2W>+0sRkDpUHy+mz~Fu#L2XT+EYXetdlIFkgxijSQ}TA=`}YXS&ZuRv6BSy{uEjMa z{FHfFKMUDJgBb;oyOV5un-eQqdu}9{IhllVGmJ0+b*b|HB##3qEEj`BWdgc7Ht6c! zyQ=83q=M;^ngV@9I1%RwCtpj>v)W6maLbZ$ zArS?JfSrpnOFs5Lw|_%WA3c$$r)uXAaCS;0I2)UB9HznHX=GCVCn>RIH&&7 z?cp^PoaSF2$QgLV17;K_Ed&g{ta@KxRX^P)&lVv?`dI72o0Au*O584GFYOQq1AbnS z0ukQGv*v_!M4e=GL}xELXg=9TS9NK$T6x(PLfCX!Lx4))S)y2I7M%0U`~TN3d_Ge3}{nP z-w9O2x#*#%8$g9(wJ%iP-qaL&|1A}z+@0mqy|X>- zI)>bL#$Sw{6bwgw1Z)8f|8V={bT?ig^K+32FHaW(8Z!|WRN!tuCk}0^+?q~uq z0*=3Va8~C@Ey$gm>J|c19e+f6TU##3n91YniK33dC9p-{J7O;=G<~dJFYpq=A*)O)xh|Y!=Y)`fYzGQuU!M`EJU}%=8RMEnHMl^+NUW zxlY1)zyhPlZnc#`D3!z7eo0i9q&Xo;e*RR=?L|bh4SOb0o-u6}LbNl&eNq0@GEs&N$R@FF}0M8J%qk{1r zwC;$@v)1p`_Pk!2S}E#IPng{S$?tzV0x38e1rX+^GF3+aJ4#pR?3W8tfdT zPfXGg%-rPEO1lHu$r+?2v$ylWW5tMpy8%Tiv_10n#T;UoJ5&qs9hcJ{ZEkS2!&6eX=!MNz*N;G(_k-ZFy~V0 zzi=g+qxHgmMyjX~4;9&L${k)}d_7_Bw0V}oHw6Hp#-A`TVF}!2kYE&Q`mo9G3ObtZ zUJ+^To-7>AaS#DLDEIo@p{8{Ku%uz|Zq_~6nyXQ_GGj-65w7M{z8^kq+9(%?^>q#~ zhEXu4auAutmNV}M5i>js`Ha|IB4MC|1F`n0DN4-0oNCdH_V&!i+Fi}Xo5#;8yf>3@ zafa4jG>}Int?E2d(C4HphbOTm*SQDmVicXJ1AH6aoRRQNLUzcrqsDdz6)rN7S9Mf% zA~cIJXqE$P3iMLU7OSOH_G}vhi#Mc~m)^Ut`Nt-XF%YJ8dnryW@j^CP=2LT|{2OaI zXU!_rnqBCLm5FHj5tI9CW!)kw5m*PoX74_GqpLz31AEidzOfDrKv}A5-bMf)?GVr5 zP?`oN=t%bw3PRg|`+JPx^<3+)`pwqi{Tdp$tBX_$>p$a6R_&1Y znZqJ(Y2~h`gZ9h}4M_gQMa1~=OS?~at72#0I|K;3S~qz_`O*Ra>5d~do!A2}oUf?? zxACy^?cTP%pBB0VE+aMc<(LQl_T@|G=8xpi=kZw?qJa0$^J+_$`21U62t!zP!&IIC zvL(6SgImj#Cr3Vi{QP51O2pwyLGF{w(k-NZ@jeCOG;{YCF&{>uFwu>}WS zR8y(nFY=v`;;sGrTfiMX4Air^2&Zllw`&KNl~=@OBK}E6ia{Ek#E|g?buK7qO^Kne zZ6E};oGZOHro@Z@X+;z=@2R9_CS?J!V7@0P?`Q^J^>C(FF^E7+-?bFQ==j(APb&Kc50JD0B^3 z=zUUBU!aG# z$JzJd|3xsfaeL`y{mNve_cw5Jq1(xSl)n#fnKUBk2t#|&Uu01U)x(0ZeIcia{p{VVgn2b;sh^tVuVHwJBhx$r=D69(L3C5h|4h|GyL zrN*UH0i0qZPsvGGWJLK8O%6ZoHmjxb^&x8EbK3b{`@LT`-#~m&-~^k3;=?&g3<=yw zXx;S2wJ~=&XMO8F^7EO#Z54;o_oMP}h1&s6R;q;nK#jTrZW0tltq0HCnEC_}r|F;6 z)a6ybAb%vSpot;zgV`__zmW!}0#8{Fm4TwydU(7wdMD~`E=BkeHlshlvHdE_KI~p? zd4T$p$KFS9$XA!+)J}r(;iZ&dr_Z|Pf9CpirPY2L$bFD-q(S?5Eu`g>G?CNhpF2|> z3i0_YUj+Z2GQ+uZaK;3R_79+d0WLV*{o(;JrWhvQX71SFw}VCQ17E!X=L|^|TFShc zaoRGJ3&!H}6;&Rl!sdaW=@|(x)Qy~yHALk}_cn@N1fu;qnkbyZU4-o5%FT7_e z&*D9e_e1F6N=eigHycYPyCv@0b&FkDVPkyY<(OPvx3OfEwNp<5G~~5e zo&&>?7zFbTaf)qrk`Lw7r-k+%7sO4nx;Jwg7 zBp0vHE70yxy1UuCuTTKe9YILC5XpDrNCh0?JWyZ<%mn=fKP@jvDN~A0-=$y>8~1|J zq0c;(x*-2(we7cMjQ;FapKgO4Si%zBx1DQaeS*vRWsolIKnj#H+OOOl+{frxKeBOo z*MUVz|72gAH^s#wwP$s~86XDv`*#FpJ?x#LCLSj$U~EzfH~za4@)jt3_XFg2?Ymgdhdfzkr($(q(r_P`Xn1HUD*fcsG6+O5SL=Rtyy5aRzGFK;LJJ3}mF zXCM~=x@-=wb3P7+)4-UZx&>(qIFeP)0Z-JCaajtfy8w!(b9UJWgPsgl1}p`i(jAdA zB%elcj;O-&eU53}f1aojw^t}3UB-Br3GC@NHF8V27e2-?xX4BZQw^jj(!enPqHM{Y z4Evlp-Y%}L3}s9K+{lZUJ;sw-Ln zuepqm76zQ8!043NVJfbP2s~d^zZ$uUASBo;Pf)@9|I1kr|N4Q+&!hg?)2Uy=FG2cb z_0GwHIy7E8e?U;jx&S2N0n}&rK1g169P$9UH9#Tx*$k_?fhyJ^es(%D)G3@@mea2m zc%$Y3pF%1U4N?R&fg8n&=ep86s{JO)ZE!YahgNA91jv`4T`?|aW@E<~KlX;Fc;YufHa*PlK}Q~tL``|ZmGCA z%0}gr&N7AgWuccoXdN}+c%(xPxzLyCry zelIi6{7x`8y44r(N^9(z9P;u9Aj}Wfir9^>!0pR-H_DeH{>AZo9r|&x72`^Pz$8TA zn|f1)0TI2NN!8=1W#iBO=;@;TlQrtgU7PG|4r3tC8Z;WUsEGiGFZ^7P4c3XK6oZ!U z{Nc4Eu;P=WCZm#e_|s6D{JX7nIlGfsJd5rVNLxk2`+XwJAXJG>V@T^>J-Fmexe+z$OQ!K*0rZ0!p!a0Uv6%DYEv;e9N)wvWpZZx+D#a`aN{SZrv8*| z;vk|lm+^+J6Fe|92yzRjZM2yn1fF#Tz>8?_KGWpvjN)Uz>UM^t9vVZ`FgcE#I@6g@ zoA~zGTD_gV;{0RMi(ezZ1n6SWhSsvZ(Dho(ov^50M6okQ*-9tj4fM37MfzgJ!)5Y| zor7j-K=-YWtu-3R-%Fxu;)@%7M^X%SW|~;2SfIfiV&7KUwpk1@Xa8i2g{l1K+Kj~u z+szWUHUOX=0(2Oz=-2SwEWI>=z`z|_^mB0%6I&SS?C{!QngIdTw;^+4f^fEYN0`yU zW1VOt>yWYAKVlCyGsA?ZCRP+x+x(J&>)6ivKJoa$g<3!i7`WZIV_;6*|LNl-D(ei< zlnnY2mhu1m1=n=!k0KyEXU23cF_RCDfRiLv*Ozv{5{B>Pv!1SGuI>G?+-VMH4pG*Z1)<=9N15PBX-rZg#1+F`-i0;v!n5lLfQVZk?=5el1=D?}fMR8|c9P+7vJN z1#u3Jx{kE78I!m)@epnuTwfRsFa993w8r<*YQzrUPQ#hc%F%^Y^j5kkbrtL%>^SOK zq%NT?>3n9+g9MqG<%$FV<_TSaFz?Q^i{6E)Mqgm(#4qavlI2g>M>kHUUE*gEl5eW& zNJxp{0aAgh$D33Aq>7ZTZuSi2DK%GcD-Dkt!OIFd@e=cg@mQIq+>sknq#L>woTOq# zFc<42()F>!xD|NmKOka`W3vb&??suOIItEtVFyq84BE@53u05FASia z+<}wXmxh#B(uK4Rw322F;?>Bx1ECW&AYYYqRZrT2)&|SDq;jQw(aoO653ct(I8n{& zu&ZZ7O|+wFls)*=%!P14{Ubx*k3AKgX5;>^;J;XVOZ>gro+ys`aH_b0MVCl zp}+g*{M1(3Qw0mPY%c1=2Oy)vC?_$jz{O61^cF;EOc$tpdE&#T^G%hSSPfW+V=T>A z5I9nSXB-b97chdafDmNS@w{u$_QOBolNZ<7y+z5SZJhNJ#aT7F8qFh$H5TS&R2@fh zL7L~u;jehk6h>I+nhmt%bI}4K(oR|G!(HL+u{FAzs5QxXr$rOR@0QcMerRV9!msbA z!N&Bf@p)Hd0CL=N+B#5J)odjrL1j#b53~uHbsmfs7m)ncluRf$k%srBuf(z}n$|;3 zZ@*)(oKaDc^s4^TmiVVOwR6;G`?>0X?P7(+n)(lIL1qttvDEWVwy?kO`wqs8+ma}u z!N29pjj)7 zlbeC}P`VSpRlEg>j55WlFALlz%}*0IZ2u9HJ6OK^G2KUbdYTr`C@hM`gu|l_a7j`b z{^pX*)l!pY6`?x7T+QJ35M+y4*ubQH3*Bdj6%a~{mwyqHggO_RowD(ZytU_QF2OjU zcHS|yB?o?26YGPXwMT;H{12p~7cNW{RI&3;x=m}3`Z6r3sn2n1P{zj9wkN}Wba`r#+0<$ zEl7s=PhF07&E4BWS}3Frr@K6L9`?{#jVG+=H^0!EwnzEx z#Aa0*GIr(S!-}!A%gt0LN(^R!5;TrX`GH+sqsaW&+(>~STJ}|8zz%dS=S-Sz85jeB zrcgh1-faCPh@}&C@DZ;eAs9^3OO}gN>uoU*oz?Ait-0hDd&6hjC)39XQ?np*n@*Ma zZ$7R(TJ4aJ>s-ovR;6TccD%Mf&X`Dp&wNV*a4V<)L2CY~uFdNRvXDT$+nnqN)NZ?S zjZ}~zx>YJ&;2PRhm6}R|ac8AU4YYp$RsYxc$O9}hCVd$GKyVKFnc4d)@1fodO#>u5 zm#7eiyb}^T0^O(HPMzX)q%U|DMrJH%i`Sd*#EgC*hfcjT4UErK<-x`L0z6?G9VgL4 zR)=X>B(Ke$bcU0o-wN^FG2r0TLHVj5Ok!*^=Ric!`qs3eFyuyWYxZ^N#b&?8VG=g7 zA9I6aYJbC6FzgKwb~O$3pw#}14JiXL1k!valz>ZaBFB+!{zYqQ;j(l zP-slZBI#HI%TUn@+V>!;k_OZpNcB)B5r(}&a>LN5)DT*cN1_KqG)f|He^JSLSn5U^aLmF(A}Ty?8t0Af+q7Zg_XML3eNX zbi9+7Z9J8g1vZLm?SF&0XV9!S-y41j5j1dzL+0_pb9qp~2huAbkpp^4T%=#LpoxRa z7(wDmsA3zT2Q>A&N@4{KlJVO~555uI?u~P*ip!xiz=oJ3Yg@{rQeZAqqBK z50FeM=L?ED&MoEYnCo;SMl*Lz3TzG0BU#Fya zPx?JDc53t{pi@SuHSG-a2+_nw%JQK6pYn1L*Bo9M`ibC)8zzs{kK?mR==!{=AQo^3 zg8&md#t)v`GyC^D z<+5TIyFi#3@GOTSng04{s4zxKrEMR3e_PLtGrP#LGW6tY#2>=yxQ%Rk;&C!Ji@Wbd z0xAF+C;*0^z4*onM84(uEtrm1U4ZHF?NAwNZ4(x9z`!ks!+$GbhJ_Bfg57dCe634q z*VszgNsASl9r?XT6F`cB2h~knNYAYZ!Ob*oejtSWOP*?f$xiU*%cLyJy*3t=wg*|c zr>yyRN7+u(yE!-Xb5tj#2K0B2K0nV8`}+3g`q#rnkDB-){}E+O2*tt;&xYDFp^Cq{ zw{m&h6u699hkt#7ch~dX-NnHuY%WNMaMXQO-Ud+dzgggGlgq$xQPu?~g?Imch6L#0 ziT=>%1F3gYsvMcD&_p(iy?c^*(OAFc2Ezihf!jo;k?ej-g{X8fu}bzIA^Rq11E7gT zhU(5W;u}i?cz}9Nm2Q6o!E(=_kYaq->rYPs7*_@jT9}0lz;S3AkfTZE0mnVt}P3^Se*pl2g*60%r@eCNj)wswr`m_CPO{N~Cm6J>wPA<7~F&1YQ3mq6Sj;lf&G z!kq$8Zd=93YcEbedlO{Q>e5$`F758q51`fx?lN{+#t&P(lr;KAEcWC1oZB94kb>*ORB6EeWpE{QYkgc zw}CQ>hm$2X(0hUn^y&eacZXFtC6p(SU@Sun(#X1j@5X0lR=lD=t*}>IdU=|xe5&q- zga9HmBuwu?J;3zq+n1CK$?B8ceBorS9d}Q1jSV6IgxWS7)jYGas~^8c z{d9u2J+ZhT1z9u9)VWVc&9UL$%^CT-hdE`sEBXYu-9Q9t<`3h!vvCOMaspisOUiZ6 zv{TR0&WkinO{i_%JoviF@P^>7EhffLuknztuqbf^G$sb)$N&{$RDfd?11Syi)51}32_b8Q?w4RW)he;$!P-DNdO`JFl=}+OpSFki;Li{RR2ZTF&#o7VQ>kX|b z@83(M3_P5)X}}+?U_mp~yQH=_)f417x(T!T-0rgy*Z{!9xVH`n-^M}2V@v$Tbgkai zId22R`5Athh5F^exNJOXLYEuP7VunLy96t8s<;^dgaS?E5^(&*d6X5Q=AOc-ytK6y3+hd@SmPdrUBm~K*tB5Lto z-^2LFX(u0FZP4}O9@N1WJJ#I(d`?if+y;Y*1{0#K;Pzsb!2V9KJ4uX2G(%5($;=j> z=eqQz0pbXtmd3OC$|Dsj*@wN+JRP;Z98xUxRBr$%6TQuzcoARvN6Z07L_@ezC z*;QfhujU5{)zlz7Pr)=6i^&Pg`N$NL)-iZnM3ncYL9Q6&%gvT!s2fR}mqu_&v(1{x zwjUoadt-0#Vg;%SM4lcq4W8_XH=S1z5>JAM7z)*hX>cKdt50VfCgu)s!gJQOB6NAU z98ho*D-cX6>D&cqUb6bgZnm67$!1r& zNDic54z#~~UTjwq-FdUgKZFixL`iClu+H!f_G`ccStz9-4QJn*$8Iadk%)@o=+2)| zgCCle*VFCWzg+z#*y0rD@i2{dc7zNw7KzKk-^KhbZ?9|IOPB?G-wP9x&N<>&a-Lr- zS^TqUR|dhYpxhN%%JaEWZ@I)`u`L7kP7XPtT4^2fzX~;d^iL}=Wh2pmt3p#}+<&8A zfWgoieYb#e{6|U@`oF;-(S6|E%)Ia3O=nTi6sUBC@0vWDtOh-fY00{geXBi4-NN<`Jew{CPZBFT$QSIlf`(qI|x)V*6XyZ#4O z@vK0o+=_;-Kb4h}?LA&^3ZaYklaI4sWDiimMQ_{zn=1dEXy7r1*Q`#fFx-o(>HC~H zj|rvNis$`S~+WcNTz|{R*G+IMT=@iLY6{-$~=Ax5)i5=GoX-`tQBY3_fgx z3R6ihP!vqA)D}_jZL)XE7kC(yX@jzpde7wQhLd_j^134_joRE!b}4pW_xi1WT}jTl zKa6aq$6EM-6%}Sp8zVvb0nNBbKkmzRlEW8K6x zq0)mB+C}t|Gnii~$k&xlu}D=VK0QcK#Cu_}$)A@O_q@?qA>BHt>*2iGDbMTSRRkJRa%%=OjP7ho6{{O=ibjM6~`j1+>r9uL5T`|^(mJq zd4!4C(S&&5Nw zQKz()@Q7wHhUQvZltVcy<;Yu3SOJKKne z`}1piEc4HC3N^FiT8uN*pVO1$m=`83H^(8UZC%;UT{!YDk(*v7OklnF6zzl39`M_W z_yrp7k~vch^0O>Qk)1Lnijx^MwI6GqmE;`;hG-!;-nRaIwEnMtRMJzerOU&l@u z^|rb-<@8nMa*dk*S@U<;aDt<_>~-S&RxeCdM5OG`v4rMnV_fiH6L$ks@#FP8u0_Iv zqvVH%qt~wlwJ*&Nsrb;mEi1kb6|*JwN$x-!D;ZNO{_Jah7PJH}>(_cbBg#k76WS z(d(JV9DDCSKbvVp+&B=@ChtTH;2izla~Z@rT735FilI@>%ndKos6Ot!`{s(DIJ4+0 zf|uvv6VBQBB&Sbvi%4@XwStlhzq$*clDKhMcE7zz?*B#;l6WuQ{7F>Lv%yoYdlHL3Q$JUv$XTWVLCjdQn-l-c>pn;#)8o+-=ehBeaj ziPGPz?$wk_ds`YIGu8FA#q)DggpX2n&KWhr?T~coyGI)PSj_S68PBivJm)fYwL07j zTG!tiYq}Y!=2PO&K6jJX9pVasaq^W5&W+IJVT)3}w7eJh>pR_?zBF-7h?Nr-WwB_z zo~Dx|X>Djo({+)#kjC%uS>-I(S#(K3tdk)1H+Upfh;##H`K*~i3iMl1Nl!~Xgt2&7 z8?^ZD`Nmr(8&>}ffuXXPU0GreTr5?oH+b}#WE&5x;mzCSf^Vv+u_ zUd%(4f0FWzO__lBNzv|Hf|pmnK?(Ybm+t0dYoW);+u2efhSlHV6@^4$g3~+}IJG%5 zd3C)QA-v1}wq-*1X9MoBmFWkF4$YI9W%l zsmNlX--G@Ymb{#_1{@qBCLA1m0SpEF^{+C|7qs$+-cSz2-|x|W#^UavBWTGQO{w=03BOq!cUiuqTfu=o ziV_JX9t`Jk(ISF#qEhX5HQdpmlqvYxWajhe$;nc+sqgC1pJDhPPZ8nZ#-+@_Rr#`j zyAbD$fQN(I$>Rb)Xe9(Ul$F{E{`W+K6b>%f7#(`C;{W>>cVPxzO=UV=z`?b%5k_kD z6C8$({W;%if8*@5BXTit`_m8(&Xkuh68>`FCJYtl9rf*Ikj?L7*3Z-ae{lXRL=HU; z+|1#xqN+W^o0-Zf3f!-U`=N0zBrDvVMY;D7^#9C6cn&f1Cas63Zjk_fk+dS z4pIUn(alhlCMrcK5m6Co0@6c*fP@}YAVBB=G7>_INeF5GmFVm}v+p_2DfgWFocq7q z=TXe}t#7S&z3Xki-&*+)dvkL`^KH$IQ2ugqrXy;3@vQF{rgn0LNk=(tXr?9mrc&~N zPTnYjR{CXFlmJQpV4-@ypOE=5naGQ4KkkjPd48HMk}jzgoJk7wDA*N2v}mzt$B zY2$1?C9Jjs_EuTs)n~u=vKq5!SDWOp z7d}>&^wb7X&eRPQTL_;W_}N)ryR>OZ4@KAO*5Wp4-72}7tPa+^D7s1e+CbCh@vV`c z&%$mZ+36^@wOt!HRa-&OMRP_dPhi~lFik3%m^!t#s^C6JK`u}_7}hFlttH2VCgGK< zEtyfNZEhF$P@w-#Fsp|ff-w3nC2ug3y;Eay_Jr)OBMZ{}3F(fIW!82V-rF*-yTUox zgGpUKCU zqr7?#Nq%ZA+53mVTgDCIWVkiTeBwhS)NRqMg590+qP*r0s(~d{F zUXY7X-)jB6i{tY{>#PsCI3^^+OrPk69JB_;Zo4tsxv?mE=R*|S;1Gp?83{(bY#4o8 zR$&gz|Jp%dTV4kxUE_bB$N#c87eF6_U7(pz#>~e}+Q)^@9l0bgE>yYqbucS+$$-Bi z7<2vCJ5e0D?zB==37jl}s+%k)KSr?voL67WE}b3s8bd@}4O-|enQhn&-MVGVmK1!~ zi%X?YLqCU;ppVr(CRpd1z?n1jc^d(o{m982{Mkc)ch@GpO7nYQhsb9C&mUjRvZ0*x z?w&>NnIIb18T7JcXxf0$F`nM!&(BVOg62-E%|y+*Yf6DG!zLF;YCkz(!ph*2S8*Tb z*@apqMeBg<@vsy3n*7%$k~{pKt4n5H#w=C)jb8!t%(x#t*>csWL!wJs1!8Mg;UM%p zjnnB`FyAUZTTZB(dzz9KuyK2nYggoT3)ZxZ@zBE8z_2&ZH7x-@O2y&dBnThcWX6X| z3N>cx{4}oVf&lOH?SoLAzdh5wAXMHhYk75HpLObzvclVrvf>+r#(!wT`e?8o$K|5$ z{0x-+G`{J0E*PWtg!9w?Up`K?mhZ_LKDcXlN9x(dB8-tU#H5aKCoVzLOji6JLtU~I zyP9~N$`ZKJ{~DLDYr}e1S&loAe_&Vq=`7qPpu>Se?fFr*MfXf6<%HWEgW#$6ftxSL z%jaoIN{n%RgH{F)ZLzzCe9K_T#@quDqG3Zbb`%6m4E&P$wu~T;vCH!E#hQ|3=nxui z*I`@>JhN%($cARIXj3=%Gi~kb8=~66o@t-ED75%poifpPbS}x8x5`92KM*>@X1g49 z$%MyEI}U@N4~2db)wW{pe634XJZ0J3IpevuwGGXCgrRRoImB9C z{sE|~5rW>)54S|l_ zgc*qZEkyHX8RW>xhAfFYHKXC#ZP$f5KCdCE<6*_|SF;)jGDzMCf1pYt;!|$m<4z?M zTCI|q)R~$r{40kfbb!M}SvQ5Ri{DkKJw224hD0RF1U=6gso!9Rc|*Ma6Ivz|DRTiOW35FTmvviio55y`xE~SPz{{UvPIb{4rxAN7i~3G2 zYZw!&IeLxuWqB7zM3<+k(iD=q98imGP&O()7v~K^s?ZJM)g|pVPkA_{OGKSZi#|7E z=>W4@f;;Y$7N=3E&vuq~eKV802G|@N)zvho&ttB(0a0`VJxGzTN>R2^)fkS>RZ%Ta zwJ>Rg%*J`QeC^k&PCKrREA-1k;3|jF{}(yke=-g%)kN>CvH>9{MN=|eOT`Wz+Y|;O z(YGk^MkU&rNXL!NkE~qnRx0I2$7yPFn2`-x_p>3)pW%KduYCxFLV_c`hM>|I_GmKe zgX6C9My@Am@tBscfcMTdy6N~9qjviZX5Or&$>wtM{OV+SW-)qUM8zfS4&ZOY--}ER0g+fGU%SO}8>y9OkKB9O zZMhwGI(%`2)D8T$lk;|QhZub`2ZpTqvT%3QT>uH3i0B^rRC=%Ny9y7E&6D&HL~(8C zq7yus`K_lP+l#MOKWQ)$*n$XXTCSaC!mtOG<){T(`Q0-&=QwiL&?mn~yiemG2uDs~ zXfGTEFKQ7SX5ZGQ+82r{wOiKhu>YK>r1wNFl$!zq^k3ba_2JwZQF4eHlonP8S%%B^ zz?}yz@T*xk#Oh@1C7k;OFb|4S%-}nhdSeofSIF$O$oc*B*>df{bTDnC**| zClA34Nf^c)EWI-#6j|wA&x^&`rIB?B=uv^Ew?h)jXZIm|hP)D~C2-{A$dx2x#9V41 ztX4UBr|Kncf=`fRLi}>A1N7yn7I&e=^&SVe#4odOCF@k8BTQa0gOVwZP?oKn>r|i# z%Yleo2tcz(=sNESwn=z00-`(&AFD}V48c^4F+uam~09;<4A zPzU>cMT*oUnG}e$o9+H*ZU60al}cv%ZaeuY$e|vJtoY0Di_tqny7X)B-a1H`8M#B9 z!7J1c`*}F>y!f~SdA|UAqnR(KF9=f!TONb!r^IUWg{v^ zKH$2P&(+earJTp0WoTk|z?MIiG9TVH?bsFnwFG(N6ulF>Qn&ic5HrR4R*q9-CfprPBv<0FOOD zSa_dhRU}5h=X5WV@tJ0^QpY5uls%b?<627Ee%P{VfW<_E0bs4Wh@o2st$q1C+mWg< z1MRpdFCWE4$scm8>%(vs>bobKV>7GAk@awDakaTy&s~;NR^fKz@VD^A1{N3ZqXF_A zKv6qGp6LGoe%JH-Esvh8{SxbkG7OOO4^e9eks-zD0c!V}hAKQVnoTYsSN^EZTi_CYfu8LpZpc%M{>Xh zGi2xH7n7}tO5Od1HfNt5Z)@%3EM{v)@BBKBIy~MIp|zEQsP-K_K)Jnq@M%-yWgvX5>wEC)D6C{-Yqk&7u$NjTUTC)v zN*IUvEgWsju9xTe+J1J5Q?^?;H)MxbQ)|^X?>a1K;b@J;GM1k$X5?yLXp!0~vuclZ zZriRYBk}!EO)c+3>P7h}4`R3iY6X$uqOh$Pkq{^Ih`WCm-3lv5m)D`$3Lmp9A82X} ztc{@9@0VPbxz^wwusLPfEl!w~KwJcX=k^mJ{<#m3($kkh;Is!|q*wcekm)o)M>mCF z={TTu{@Lt5p^&xb+L2|o0kqLnFR|O*=Y#i)O^(H#9 z^C`fg8`f)p4*;-&CD{;t=LvwSdqj)}``De3#Qz1J#OlMmwL!pNx zVVY1Xb+=gKtcW1UBsHjxYmTcI?bF#NHV6?ZyTOS6#$dT82)%Z4XHb}6{8(wjmwb)9 zb+^00VqK8eM@|nVZ+wR?)8Q4vTT;h|u zL40n2uTJngjsYePIHS7cucKE{`S8UN4UMx<`hXYegK{{>&n68Rhq-WoAC_6NV@MjR zL=!Q!kWHP*jPw_!?2UoQjrSw>?nfTm-%`5sed+G^rF++jWj++S{1o6feJvKazDr_V&O@!FN_+7nsI z!z9U37!R|H;hI!W*)!S><)l3ZJwLzu&FNhf1n5Ds!djy=)KM@mX5)29;JYmHmq`%KrZ z1yFou>y*(2$BrxTxv zN@CEvW-!Ifp!fg=`7Wu5h@WB7d&&Yb8RcC+=(%3|ijx!{x<2UWe{pz9Hq z-7{IzoY_}QT3_;REn;#WcGLmQ+ETEXk5#U=Cg7JHTo4To&?MU)13d~kTxy%0&$kK4 z#bB~z95`#3tQ%HIj21;#*GvcBrBa|T!o_7%G-** zQhM906J3?H%re^0<@(i58+ zA)_@Rb#M*?r^y+4SIxHx;^cK|c^Xs@?`>g9tSW?TX!$RHo4RXEZ1i5S)7(fR_z5pGR9Vtayf62&^Wix)A zhz@$m8=0e|wA1Pr@-2DF?pSO2jMzH$7D7-yOBZ0>D|RNxX-;>P1nbI4q)S@UeY!&z z6pkQ{kaDC+L024-sDW_%sgS^&`6ryig>Yp?AOf)mfZyTt-3*`5QLAjboXk^3UzxFI z8_XlTt#|S(Udd zYYyoobC+5tG+}2IO);}t0sJmtJb;fTn_C$)Xz3cGBg!osgARkRGu*(6gl&zv_w&_9 z(dwJ5Ri2r5*~{=8%-M6LHX zDjuZ9um>^sn(g_id$v6G`y1CTOvlo+sU>}Z^gp)G$gk5cVxYpe{asS?G!WVU7Jnw?Aswmf%+`b#^pa3Gd3^C2;siv=g z*K-gsg+t4+fC2=#ZY+5j+r?7XJhOmOOK!Np>~y?}UKsH^;f5UIkN6!mLaxrt0_Z!# z8?pe~Sl~6TIOn)*04zx}$KMq|=#UM8=WxfzQ$GHZ;fo*cr64>WW4t;iY=Ja4g>l?? z7L;>kNQ-yoLEDrJ?tyG=1k2aJQeE;K1Mr|G$Lat@7{psU1}d37?M<5(JHt?GX?ITC zdzhlX-vBWux_-C(O(;cG4W$OFgmPeCR5uYzb z?_`aRph%oRVjXiu#2Y3#(yA&Fe6$GVw1rYhZIyNJyC^Ji)q+yHDQ5SXQ@ zbey^**7@3N#sNt=E#wlAbhVMy5u9R+gcI~SW{50A{d`UB!e9y|^C3P2YLAWl>`fmi zL^&Q>9A)>H)0nFK>vl;b2r5L7R~Eo-%p5R zQx;pCQ6twDh_TX$ozJ1c!fr_iWsg>bhV6os9RX$NaK}S=?0YmRT^0wWN2tN3vk zzmepq;6?;5{2WQn)w@Bf3YLsTlp)V8hfM`OKO`BT@=9B~{~_2nJc74W`fT6R8Gwjj z2ekfc#M{40NxlVCrO{iT2H%DS4?xjDj$U!Tb}k0%{E9V`i>Uvv<@hE}Zxi2QcMjkV zH+v9d-~WAoQdpur15TjzHCl(u#Q@962M*;9n7=6mnCmuLlYf{%K>ZpYDrg!a9P?%@ z+Eln1dPm1oPJD}k#WQUO9N_#`GejG$W?Xurg;YZyhP{?F+n)~eWYT!Kahf}p`SC1g zj4H3G$}kkva9^Ih?H7JDjRNYgqSn>2%MiU_DJ;4KF7v|Ez48Cfe! zjzugs1RmE9noan-)MSLhq7|^fy9g~y^Jg`!ciUf_O+WLPHXM4w&BP#d!D0VKn^LEP z7$d`pt7;C)!+YlUhxzCIsu!Gbp74mCTw_oHXKT507x?qQ zT3)wST@q}TX+%%9QH`GH!MLXMjvlb-=fmM#UmOr<2%BYUbE*Vp^x=g?Jqagdt^pkQ zAd^M{6}a@3o*n7&P1+M6{|oo;GBfr3bma~?cv|K_hLjBgpBvoz?LyGfgsJEZ&aZca z-sM>&>w;5UJ|zyd9|3P|;XK$iMSbC!DD;IFlR_r@@evQ7x(aYy%kQ-yJw^(Ag?x*~Dbw#afpeuAqEn`o zZ^A(c`j4M7RW1Del<9|Lw;{*D01k8oeJz@(o_ulxWbc{#D_fsIZp(H>{d9NpL&&__ zzP2>y!?xvr+4Eh<$@1ODoueW4QhMwFkJtYN zx8~f;qEG@H|E?uCEGCwfnfnfKrDC^(jvTeU0WSFa#)xYO1?cJSz4l@qIDlBIpjadv zU0=^EDis_k6Qf-BeDe|foEWK7RE(rXz{U}?@i+%SdXCqIB3KMP!Q1em+V6y&UVY!Y zL+T5;u_0vW(X7-a6G2C}hV&-OU>JHE=pc*q%q&WOw`GMF)fII5Q18< zL6dkxR1^lPWzs{%2m4``7RQ3dmdaN!lf64|CyQ&kYZCPxl@$B1%n^>Enozvz_c7w| zYbp{Wlf|l-GSqvMd!MWwawK>GhWDbr)M%PO{WN^@Fq#CdSn&Y6NC%@hLa9P}EY}{+ z&Mh^jV0%Q9_DRV#Rj!GRoPkPJktYnbP?J<#19YM%IWJP~xNPYJj+e*be1czv+u2EN znyQ-G!S5~PFIUoULrWe?@Pu7$KVMsl|6Zu3s^5BdNSBaPSHr50J2@F`PA0G!^{S(| zI@R=Oyu^_5~gI`^InDH1!lBJx9I; z?=^vJPNw4Tpt4j;NAUhT9!X3E+*gT;UHOGqL*s7w>*@#urx`0gZ2@BldbH7e3UYQxW51B{c(Al?VhyVp5&3vN_dx;-7J2Obgh)jHffH%ky_ zOyRN;Lo>L;n8n`)U2{ONu6b_|N*%Vz%gG#(q{RiVhAA z^NULWyuIdi^@)_C(kKNz5{HD)&jn1Xqep*j~!1ZXf}N z{nloAqx_UqD`~eB9F(nmLjrFOg@|0@$UGSWNp#O?!`GnCfYD)}QxBfIKUu>xJbEa- zX{x-Y2b{7FC6*Ygoqo`B86p=kmbRxL@g>BsG{kelCrPYVia-+UO{z5UgI2(P{Y~z` zx<)vBO#F685d$9av3JMxm)#5A=M1K3TdcEs{C4mk{~$KOh4`&MZZxopF@}5k2Lvql z;I`XoVB2e?#Qc#t)$5*a_lg|LfgC-x91>U4EEHQ#x8;VP&-b^351^}egYn)tc^Qu7 z7#~%4tPi2B$O;Ym0L5fXR~U|Nr~YSS;;YpHE39Tgg^DAe)m_KCHB~TH#Xsx4nLO(|Q!M66+%1yc*7h!f0l(KDS5bmD-%4X|N$GiRaimlH$$#x~+s&J!M zVPSdUwa+~=|30@H*F87Kd*6$$4#`gEuehMtO5+i>4cyBJ{!BF!=J6`T@w64tpP5gd zLkVu@!0=?S)UgqDiqEKEGI^X;IVIR#hE1cKHarBhc(yp&ES6dGAgL3~w|mnjmppc* zAI`DC(#gc#bF)(4YSyrOY)7ss+(}CFrFR&aqyMGhRD(NtIA-#sfnMFraL964H)gIi z#M@JQ#NTSW;U%>uV*E;K`DC4K$&A5o-K2s|n_>jGc7~B|hZ)=s*?lx* z{KZ%Wv!`O(-gfNdQHPB%M5NIRjNc4#W7*4D_vT~e%;4t-``7F}Jug^CJnejcY}@3@ z4kNAjPtBcE4pCNXVdZ-kiRF(nG32wB!ZEBL2 zR`sAVG-ofd36oglP%#zK$5=UNeq0t!$$|0J?6;K)!tZ>x12@^ zlQ)aas{EyyS}Uj^N|ie?WfnErq!jP25{XC8n1;X`Rxl2?$%M(?YlHsI1hvFT#jeb*D4xF*LMBI+w@+cG zWzNawZ`#ynrd!gv)=qI6;pLBW<`(EMK69Zvo+WK6UEA@pJTmmS_qopCLt5x^>m(|E zSbn7{ru3ydkjt+S)ANf{@WZOU0peKNK$E&}9t5ZS=wx$cS=DSROQVDI_R!5v5b5%V za!ns~oG{$hzS0P>OjniejD8F8TQvyC+=&aJ1-Y0?!(l7!xfnm^uzIjA9cr;*F4{*g zNGm96QWsHQlIyiFYXjia+M?e)|Gk>iFfVpI63&7Ormxl$vGk};uf9!ssbxD45}!{F z>vHXeB4407P8yWT#CZMYU!lC>)$gl8=qy$9X(%pjI9MDVa5a}}xV)OGir?(4e^edX zLw#fxCBN&}N!A{p{lK`68Xs+oVy}c(u3ugadxe2)BR!&|x|B(=D}$_6I|$t|#CX#F z#j7TFeuY4B1X;8UOABgo^O#u_eQgDXLb0GutA(SuhG0KfRuVntW@g9W?X=AhG^c$=xIpK338ALy)}K4a)NFxFfY z{W0YC%(K=Or1kpF&E(NOkPR4@Ig1WfrOZ%+V_vy$bAHb^nBhtlC&!0X4=Y*P;ClA& z*S#GG)C@E^RhZ~l<=f7Xy8f0$g6;Cx5+@%F`%=A1D=%Dh`#q0%zA5rx`#n5+GaqPs z;OEmRzo(;I)Bic?=>J?6?Ku!D1V6WPP5a-!kAB|sY*QuP@?yP?6>ah2#rn#g-lxx) z$Isq08om%Qzo$}(-p4<*xAH1ga?^pE(r=$v<^8*xcSx*$(u#Ctr2t13e17}MvO2hq z>-SjKHX=Kuj`wL`jBK}2^grX`=os;zX4Y#KBzv0Cghfo(B~JaLKHuUaM_;`%?tL(v zq}!)rbeh%*sl=TTrktH_`Y6_9K+QLX}MLnE8y8swF&Zhtshg6Z0ImMsD05X}FnsPzK`i<0B(*PC6 zp*DV!7cLdXD-ln62!OE~xo4~{*eeupd!vAuW4-^ZuXQNiZ);AgaDgTqy&z*bM~}u; zn@#HpciK9G#($#B=uKJt6s9OzRkeX|jPVW6`+g7O_TzU3*g4?qH~sn6X56nk7p`H9 zr|!o}t1gtv5TkWOmSI)I2;)qfMb&im-Y(P@R`_8q#o)L%cjxT#yn^~(hFf0&P)oZKRplu|jBnedNO-9IL^B~%}|PWbIo zRzC04cbC3uV*E)`wTJYkGsF_dddOdFJVe&LFoGw=h-W4KzizKv%>G&kxQ#{`;JmGP zKU^Ir&t?q6{f&oYyPcr3xx%5Jc9z{?ZlERrz58vcxi_ zSHNox4OQh83qsjjz(enPZ=W~#vU`Jo&9(_et*(R~f`S;cLtgRC{z_Hr)qzj}5+vy5 zj|(4W@Sr)w*|YIwAJTmC6N*dZ2<=4+1d@F2mgulhQ%vWMF(2@iU|lG$Jv|h*BPZIdUrTnFIn=hg&s}!7!sL%UgG2)+!0zEH8T-#fjeSY3>Nb)Sty}|h4 zw_744m^m0+u8_9Y86IIjaQd4pLflwJbvvTTNM|tL7CpR(Qcyhi6=k{*+ppWsX;Eo6 z?9^U-9bbq^TS^{wzv+VwkUo`Lp5eKBYA1>i>|IB-Oy>ezQFXq1_M^4V-fO^j0dSP5 zw-kzL=V#Svxc{480Lfc88S({ilA z{QfqHovETp#16D`Blv^#(gq5bsH!@TqLKV?6ik7F;wgfzNSWWdybt7TFfK03eaBPf zuOcK^09LIX5i0cCgfrx_wN zCX2RlQZf6hZ1qpgal=OPX9oOkApan+ec-3ZO7p|+4=jaB&e1&@H-2MtAb3UUrYUlu z*yhDE>ZPivn8@m%ot%(8OS&#?7o-mCIS+LBq+5EEi*@penvloOKe+>4HgBT5C!haq zXR}SiOI_WgZRdk%Ofr4ym+DFOgE^pNYHyuQ$&DG)NQ0wo>lz2O&PFlG09}X~IR3@`=ftEOf_T@qH7U?czD% zar=dusM{xp9X1d!I5b*Pq6V%<3Ka#BlHNa3(OhPb0ae>@cZP;Av*;Bh@qFMtbkqQhzPWH63wc zTSg7j@Q8zKJD86FmFBE-bQM~PsZ~{uoW8gIS2M5EwJ+UkO;V{YSvFEfgYMs7+}g&_ ziv5lqz%~d_iXCu0{mIKG`>3$Gd1H6zd1a@I&cQ^-w2eVoFt9$iymjfWr}KrnX_YFH z2Ha^`7ojssFruH_FpO53pQM=ARuN4~l@$|4v7w5mtjfn!wwXn7Id@G>B_(rokL$mE zIsN2HPP*5SKTX+WU$d%4T&U7>Tl`c=4Ass+ds9r_N3Q)zMqq*<^9N1E6B)DGx2n-Ri2{a>SuO+l4k zWhr6@2Q~H5n(6fZ5?Q4#;b<3Ye>?=%KA4`WaXSC=;u!x!QRo)Q@x-MDe0B5ZL1BFN z^tT;h{v!UDz2BnzQD6mq*O%}05Kyxk^`$&oRHxu${#`;mA(`~y^K0WP4~9#a@htq{T5CD<@xp%WFshH?5^7$COLarD&?{q4fwZjZ`;H*EWd zWH2+u?blmaM1E#r>o~Op?$E;fQWR@tq^<^1B1cRnkiQ6{JiwZN%tOy7ry#nUGY;EM z=nGSWf@0PmbHK;k_qE&)Q8w6M9gc;3240wg%%c93YZR|$p}vq&BM9b#9t+1kz)wiF zixK9e81es_q_xxK~bK6rbfS4-PjstcVcvg(KDBDq|rhdNYQQ0bti{GmQSPrtO zFvo*z+ApQQr_#|&2;!`6KN#)-p+%VBK`y*PyKQ!n^zVCU+wEqtyLb6BR}c@_C> z2aaTgTS^?Y$cYFLNiZ0R0 z9`uD|U7;=7{w_k}nVUuf1x(x1H;pU{nW35mG<#Pe^#@9f?bOQ=MSCi@=l{YnO6vsOFjB^xJOaXFCZ#ui)G*3%T{FeHOwN>Z-kFR!Npdv@dH`>4Jk5mNTw< z3X;Wsix&#<dcODf9Gsm239R;JA}ykWnJ#%UjkJvNRC`SYINCQn+7J;M3cfRd2r%r4@0`l~UaW^e*A;u~nkd?c0b3SaaTQ3IKYXEn z3d22#nb{)N(R!nJ2{LUIn)=Ue|#3HQLSHQb&A zYux<)>vqhFNI{?I%z4pD_38;B*nh*`^nY-(``+k+VEtBegr(#e_fjCxzjBaZzoPhl zbrmr&;opDhAi=SJ`5?i1WpH%BS#*$KZBLO2=>9+ax~lCB-wqOtj20G?5OV$kU4fXE zMpfuvmM^wwd>E0{lKp(XY@5CLrs%Y_zsjea{L&O#+D#ww83Rc)GWj$;li@=E-7;#Nnd>nzsEdlBLH%Eh2(NAas&ZK;D5?qnW z^9TRNTI&P4rCA+Jr_otf3ZQuH4HBTayr_BC&S-ICE^523_rnapyO862=HF7uh(&$LMVU9ir*=h zMtz`P?$6EE;=RBJO;c|2fNO~@41JC!!vq5algEves|jd+GKxW`z#aDPj@}Kn|Az#f zIF^+v@x85n;D|j`F4fzHx^e`51E<+ZU!A53rrMc)GGbyi9{F-fi`>s1XsfX!1p+=A zwKy5d$D{a>2o;ZKX#8WY2M1#LuB{3OUP!f8W73(o!D2wr9*X0`bKBMoeYfYIInj3v zQVmPJ|0;Nh?*r7yn*Y+2;gBkVtfx%I zy3Q#jtr_q$Q_`82z|v0eBJVd@yXRrM+geOesRtC)Sgw<8dOPgUe@&rXQhBz)qNdM_h3$L-(f3hFgyMLblQIU#HPI|rszR;N1 z^x+)vjN3}ld5?vDqPM}~h_DCWe|GS@4lFo#VXK$T52a~b5-CyH=a}7=l!hR8k*aRz z74Os7RUTS$PNY%)xBYG>%$Yr@`<1)Lm@y?|{@~t(XCW&)Za({K2fMzrxZ1F2?zZUg zSg8EXTl9zL5Nf+3C>=tb$Hp~&xUy)pWyr|prEsmxzfYV$Niw}!@$b?E}fbAzhmgonMg*mlW`<-R8^DcXbc~P^9q9li~lGc zYsLykukp>v5cH*E*)`mF7<;~bWuXP4(_^rksC!7Yv_OSGN-)UtkEC54M`4maoF(?9 ztYy!r6b-0($R%ZI1VXQX*Zlmk&-8XGi$5O=j_}-Fsh3SM9Jo0e)c$?&p}!E$JK@Qw zxTY<1UPdXDSTS63BseMgg@51TE}T*{nfu31Y#tKNS>nt6uS~w8CwCsU>j}8hIez_T z&dv=MD^*0edEh3GpOP>Gb;J#L_E!Zi2i8H4hIBkuRa|jiFI$`lL1+oC9TdRFSxple*od&~M{{dC%#JbmRA;=wC& zAN3Wzk4g5hNV~i?BI+udE!D z^pI97k3y-PHAIcZzhd}3Sq?p_a-@LTMPNU9p(V6U>H%ei1Q+EU6jR3e!&2UUPb3eM zpJw(w)ss5j9>%T1E(k4|)pW*_*=s?@g*3xUl&~9ODiZX(2jpZ*o547frM0Lk zG=CfLd(H@GUV;SO1Aj9CU9Es;o?&J}*U!4nL{`F7h)lQxDKS~Y8oj-cs>CYr+Kwk> z1&s)Ti3){;q@l2+{@`vF<|4}^nI42mH#k|`dCWZ9W5lnLH^(~c)Xa^D{M3c-HlRdg zc*XS}J7Xnu)&ce=3;yxs^^NtCdkWuu4pxvTJtK}*_Na_hdE|7)=@QefI3m4e&dk*W zPjaGcX+M@_e2SoYJJ@IjiU5!&h+wJ#ctQZ4*jttSIacw^6U)V zR=(0_fI!qkg(Q#&rCOxoE)J2I+V6qS=wItcoGEu~h*_?vS0QFV#?m3l;f|@wg$p)F z6E!M6C=nm#xT4rfPa;CEACtb16w^*`X3;H=15Y(OF=n=k*OV74 zU^#?RSN{B~2pj6dVZG!EUw%WvV^p%=gJFt6un%J`h)*1a!K+0Rt@n4kUx23{zeu3m z(Vb)8^nbn1SNXmRq({Hez22}D1G$ObGpElmoP$*I^ap2af-!7HKa&BuyKLy{fbLS= zKo9OSeoenJYkF(U4>Mp7W4$N|R?f()>PG4;K%s@mUniHxLOI7J#gCwsNwT0-wB3=v-7uOsgQk7w!!m=5w2*OSQ zN@RkL`VS;c6uf8exE)*VCiU&m^L@x`z4JUR5#PbSiG!5T=rvVJsy5HWoBA1voW9Cg zk79xWo(Buf){zb$x~`k!8th0nF70a|kh#i>?n&0vn_?yO1Ws`kjOWzqm4QlLd|)`X zI{eVVtf<5~T$Ffnl<UC@y~ni5y+=x`9^)4&X=*wu9?JM2o}FG2 zsW1RJg6lb^NF?gZS4J|1v}bD>$DBa8(A!TgXIJc2Sd1t+LfMX=>t~mD*DN4Rj2>Wm z46kn`A9Hi;3;NtH%z;Vj$_$M7OT|+w5=iCE2dvk7B70Q#D4e>|dgqq%_Z65VJuS3a zku|Aj{gnqaJpGTZ0v!B$&rRN($=;z7r)K^8L^8LlZW%ib@1wq+whhLu&<*UMIbM*~ z%$FsUS{`-1Po?D;RJf1}PUVWF74u_@@$+b5&fRVe^jz}z&B^n-Y-A|#XLX7h6|nQq zU}un5ThC&2DOgm&8N`E&}M`szpI zXmVX>rAYyTu1}pE@62HBR}MZ%XKVb;goW9=KB67MA1F_6y_~W=5R?fOpsYT>D{o(J z;a&HA_sLJ|4X+%`>}<+19Du|@t08yma@Y_C#zZ}kSLk|qY}zod$EM&%MvZq@5Op_o zjy=bLq_ye9tb;t`q>|1(~M#&%>%tETM``CF0HoJDzcxSZ{%a^ef!=SMP z%I$NJL)RTxRqjv6c2^ksCJ^t>SQB2T_3nH>W$^dHCs;Nq;`D|lhx@OuC3KpHY`k?r z-+V#iYmqYsVQbOodYkO3*3wS8k4dam1J}M1`GbkW#0Htts&{-%3AG4}YjG&CEp;dQuekwf-Aw z7{73Pw>psjZ#5^gO79jU22^}z|9%OLG;pi!dMc#{p~lSBGs!lKtRr8mSukGukMA1b zpO2OPsi^$3f+E1oM{FW3Of0cW8aQ$pK0Sgv62X6kC!^ihW=zI2)1Bz6NSPF`Y2mc6 zpu+vns(k%581SA5T&|eK1^sV&69b)zaW0BVah|NyZ3Kui;0JPpL?c!NTEKghMb7~o z^Az2*?v0iR+5pvx4W^6G4$!IC{8>@C4y@y!-TqSv01E$83I8LM(8%d@;{?~%MT8|b zA})xWd~s2gOM-^2TH#nURpW>QofZ5!S*eKwB4=;pL=;@cTs~Q1J}Fl6v&g40xJAK4 zY_iM(SJ}9ld+%>ek0)oq){9j6U1seS}@lP<+8@ZRy$N9EhfcQPl?!;+a_c^ zMY5g>jyEnKHbXhn$*TM{ITTd~p5?wfdi@0XsfdGFyWGAyj^d+K_ybykg=RTE8x_Ib zwtM{g^wq@3`eo%mwCscBz2<(wafX{0QOpL_V#H9*c*(k&@4gDCG49VDL9I69{q$EB zk1Wh6N!>2|s=0<0;%ojelwWGaU%bp(^3(raMPI@f1eU*)tf30N`!-F=nvmp}rgK*b zKo}Uic06*m6UtFaj&`j~jO4B>IU&?-W9^lPKLKi@u~IZsed5jXUArPAYPN|aq1d0l z0%#2};xpj{Cmagf@5Rk;pRgA#RF;=0udR287slY*L0>c2Z7&fq? zN>Rr9ZyD64$42m5f3wFp?_J<%|3hLn5ofPP-0+8yBiWx8Atjk=vrxthKa)d(DI1fB za*UCVRYFitTV-M=-s?4@AN)amXU;nv zG1%VOWEY*+13lE~R(qxw6M1N-)(m)R+NYErH?1g}#QEV5vM0#!U!9(N?cY~!UEKM7 z#1(2_!Uz2=PT6X6byqsk5jo^E*|b{!e;_kqrl+UBk)EEJyq#R$@%-_L!}NZ}q`XtgyesK5wvLFNqZow-+$$pc-NhpH>oy1|bto;dfoM%0H^EAT$U{$pM{`p|xN`p@pKrwR+c5DyD| zjSAj5a3I0Gt;{?irvQuzbN*)5@a+6|||`GpJRyDuNT_Bo&T z>)66)(MVDs&pAjM%lnuhJ&XW)U}c>4ie3nZd?cl1$)#e?Gs%T z-aJe%9+R*WdFxb6i|b}RdiZ}~s|7Id{#TmHe+>HXZR(v*gn21Y9@PTCWc|OV@wJwB zKMc2EyPh1lo?ej%W^Wi?8N0ga{g(h&2-m8+!aK2Dt`9k}@5n&@=?+#1`FINu{+BuW zr;Pun7A@9%{O;FQzLB4Ot-oJAMEvb2m0 z^v_*&@qyA=WPpVyA5h|} z{S2eX0?PH(MB3yomI?1%3ySsR!csn}1)NUUA6Bi&}I0zM@-;d$<59hHmLrq-TA(P>rt zJaRTt77n}qetjR1o7Ve{qgykE4?`V@bT~6o?K8XIAy~I}6N zM9VAKYEw>sA}c{zn-O$^TNfXj5-_`n`-+|-Qcm9jL(iNk8d=COH#+TW25F0Hrw@Ol zG|+zwK{B1}PI}-{ebRaj^23)>S)p_#HP?;H)kOfGV=FN7%MKb53l++IOJs_eE1xuHnQO{m zeP*s@ODKzG1xnC}CU>n8C%%?8ONS3JL>KAk8l$|!`ND4g)#dsjrIB&WD9D96S|~`D z6z!0mfh{w7k=VdHF^*wun0@HdDS!S3e$7S~DAd{5N{?k(Vx7{M=-gP1n>lGl z){ocV&7}NTqA>wSRjkNBB%Tz#;`hi&n}K^)Qf>LVJu!gKeI`nhG}MjcWHGglf%^mj z6ZB^H#0|uvpih0ThEos1t>P2!;aTb)g&aAjuwCf^$JhizDFkbN?|Afb2HYI{P|}gU z<4E(ou~Zjc2%JUXTQ$LW8;EpujXZfR(cEUYb8d|J-jI+IlBz9nBBuO(hHd|V?PY~Y zZ(x5Od^gsQ9{9K>wMPeoWCap|y%|81Es%>>WaFJ=Z{=*hq%8Mk)x1wSoI{bRO{6P& z|AE39j3_;T|rTiU#HUrShk&5HV!qdsQcmLo#CVM zHKn6(gP;Z}AXVIq}3q=;TuZSzZYRA%sNt)7_sIaOigB*S5_f)3frW z`HqF+gYHMwG6KX?WkHL^$IZ`NfW&O&wcqJ*Gunv|tcR6PmdxX7Nob2dYoSpn!)av{ z!2cqI9vg@AupUi=C>JeT z>Rkz0GZNv1$5+az#}+UoDvH#N7}3n)L&%j!ZKLSrAo7j|Vs9e02TcH77q`>JwZlkQ z(p>3zAbOxt6g39!tY8#k6wx=92(Kg@8r`hXU?#DmN|-=j5ow>*XMuH~$}N{fEr^Wz z>K`muMtf$-cyg0$7EV-my_QMdX(i&#Ufc1zF>d9PLp&FMKi2J@R5DSdrCW$lYCI^& zTTU2ICi){7FG+O>hEg(LL9A*LZWK@{?##uzL~_Bz)h zsTd7vS71I0FRfqgd?dfxdl#n>z(EJ%OqYgU05O6LJjSS*>r<;n-!;=}Pir*Rl7P+i zspkBq|A#wE?MBu1V%3~RDMkCmKIKmPMj*SP$dJ8MUR(Qhk9+7f!#O8qUq{mLTBKpz zQc+_)9_sP1I^}1%oy8pZ^$L&4`9Xwqc7BMj9`Mz3WWCrB2Iz^p!RyuGz3e@cggOSX zj9qo50TMLkdM;J-vC?CemIpCD@(m+;Il(38jvX4l;3PkA$Qn+dJD6&BE#@WGm3zg_ zlaz}Vy5H3Y&m*mI>?B(i<9Jwuq1Q0W%^aV_IDi~Vms^UMcp)S*Af3ttBUHSxy@m9H z=I3#C76LzEq0?MuZ<+_X`*b+!kRCubuHK7kX=sV61@8>qaO#Vb>Hh8W-9j-#7ThMz zEuaJa=aRvPuC)<<79{$<=LNWFAOVpA>DbxWT9_%CnNk|r>Y4q#1Qs`q5QsDd_x?x! z!;lcv4Anvf&+9?7J7=DU`dY}j$Pr}}?m6`scdbfI&QN2eBz$}PM66Tm$XNQpD0{## z4LWHFmMrc-bW{O&f7XpLv~XIw|4z&YPXqYuuTjGih}DH^w#E&()Rz8MqzE#?N*IL4 zUbA%haP(I>aL87PsF(?PbC}-VSRI9ovq(KxPafn?^f&R60!1|F#^1K zY&;a~%ol_x6Dw(x*tbc^e5eM}d;q8G9@q7O2`SnWvdUXZAN}AR=H5NmNzyZmb>&7* z6Kkr%D43UU5l*a0i=wDNiqkx`A0LKb*2vzw;z}(t9x`MTLvu+nhCIBK3m!Ceb1z6P za;UV%|8uc)mhzXCOZcMfj$WO?k1nDr=c;AhBum;UI7ei?K~eRq^$k=nI(x z`GXQxFGEPo;x6b=zHuf)f#-qm5Nj*;-||&z;_83yP&^5YiH#QSHq`&lvR($1IVad` zBCZod7?@69L}GLNo~)8js(b#le;D}(4QHFcDNZCXgpZcwwdK~XiNk(`niB_1luYS} ziY2!J!V!H9vZJTK9#Vp0s9FOhDW6J@#?mR|pY*Ezd$-RLKpt}ceZBg(gpv@_Y}`r( z<8$z_{^QV`o%S@{TPxw2vca86O@#?7L>^PH8FWmY1CCFLH7nxF;UNt;a#wJyVGesA zxkzv|^xl=pOkzwxJGxa5A`1Erms|5@fiZcx-JDC7YfW^M^6(ZGN~wfl5RaJ^WRZ}_$qiezuNh{r-t zbkoI0%^<>DvQNJDn`6{V(LN!Ih27^TVH*xtN)Aid(T1grcjdFaW^|J-%&^H#+kQ7v zC7SsMiSEOc13GM}i3Bx-g9Wq(gv$j}uD_ry~l_Nh0)(CaJH@DF%TyzAp?uz9)c> zxX4uGF1nPgEkUH8J`K7pkeQrYTs(XAXTi&U0&mD+NMuAAZsf zc{kulR8J0e^#`y}o-tu1PL7t1IwxXwxX+DXk@(S7sPPi-_Oqn5nC@n!j^~I+B(;o? z+Hl9$q91Gs!;Hd+wTWV*6tpF|ahw$i70jN4@+U&_gzF-RYspHN6jK}6mZ^JGC>4t0 zyxf`S(+3luVVCEipgK$!tR|f(VVHi|V^Lx$PW4imK72`bJ4Ond~-eY!O%mwZ|T77)lfl@w7a&#hW&LK1`(C0Wxwtnh%w5`$T;~ zRrWotS)lJRnxL(EdeU^yO?=SJOI57GqKxFMp$bXGOJ0tfJAv(&fZV|}j^8vT}T7>Z6oBjz9SAd6BK zW{l+C;bieKi9T0Ozi?%E3t>pCZ5K>meY~}ke6X8U=<({iu>?974mvrUyO+Wzy#NK7 zC|=II;xZ)>k|GKagJpW7*LN?S-sFk)6a)8^>`r90jYK!r5_`j5*MGH~)@#SHu5h+l zW&JF*=kgje_d~X3Ar!D(Fxk2;UsaQF2LkA2R_VLe8=VzQ$c&b%Hz8Ljz&A5;xSB3m zc#;T|V-e0Eo-A2t-@lH)e`6j({x}>L4xcTUJt9KAneYv7FVWDid6DBxZX3wfG9axw(^TwoFUJfJKTpRhaHx;Tc(#xTRH)b)9d7ip6 ze|>|ISyQ=TeEH(^HVT0^zRz2%K(ouub+I0Ncj37ij8ErttSpG z&3jm|P4kW7(`dWcud(X(mw;wlt1nd99lb2k>|a2@{}8HJDsE{$zB!*@!Q8HT_idS>R&}$HtNa zR`o#dweXY)Wc|-z0B6=+NiI4SfVfGjMhA*IzR#h&amzfY;s6qt%n&Cim96=lle>1g z?uI!%_~8>WSnXgMxp9d99ia96eb^&oc)Jt}aM@+>0s?~jr+u}tbu!iaX+K#_9I#ns zdf9m(d&pUJ3HoX3N1<(4PM^6R4Xv&pAtrI`TiB(qeJ#9|D+HA=P_S3VnawffVsS*G;VLosAbGu=NA&m|(D1bpA~swU zU$JvdW%MVJxR7gthP0e>>*i7~OQtE*N~lm8 zWQu~x$CinMWs;{Z=z(CNSr=jXM}GDT-u45fhLMLM>(!gKh|zUkMP(fUnLrUmR4dFH z$T*+-H&I?kP~pIiX$aLl+g$v{X%LI=V}{JHk03am%Xc zp@88)Q1*2^PoVh5LScPDUEBRb;6~`?I4p|~dzO>P>D%Ptq7M-_NAwR4$37(dw7uKc zL{3&=wAO6r+Y+2toeLhXE6F8>>zod#KE5T{(r zWcCM*)s-la$XH4;H@+ww@|3&Dncb1H@ILZ-QP^XP+wjHT277*Jvj$!R3(n_AQhOy{ zK>>XwHstznaZ}KuE)$YfM~YWQr_;6z|FS(S)503Vtm1C-OIZFq{E^+8+a#=B!1;J= z&W98kZ(~8*Dqjn=rBZ(3B0Ezr?Q4#_2!1;$7_1b26NVTI`Ef|c%a{X-+MM?*j-A}A z=k1BEBC|PV-(U~ug1PQM_B^sd`Zz{CU))E|QBUOc88&zkf>7zP+wWBGYy8v8);-h9 z);x8F5aV=0q2hF;fa7!^ZRt7@I}L+~L=h4`e5xR&`{1Vi`P9CE=#7gFxzu!gtqZv2 z%D(uy`Rv@qTwpD0Vy%^ffd%9KzHZ<~6m-sFWQdaT5BaGN$M|btuuzu;oPil1zW8x+ zvN3NB^?s3H$OEE>-WIBK;N(u@I0ynK5ljzy#GqLe@ zX+JNg=i6Rh=m!gQ;&p4EY@*I^-aw(Y({TRCoq8()gUp zb=}05u5U!pC@$;S2%W@=d`DKH)%}M|qofY8k;~v2*tgn|%YAa4*;h(cBQZTP$MrK- zedaRwC_pz^m~N-ERru)Decz1HzuDCGDV7fOb#Ae|7;yXnKYJdtWE@ubvK}f%h8mnq z?F?t0JdQGFj7>s2&nanD{`eAlpPMXh&3f-^f$rs&K074_(JZ@dp->$~bmdLCfZr`b z1wxZZ)Y`o6V897{bF{V9+qo?QICJHxMlDQv4<+_~VfFZ|P;6!Nv~iD&Uh}VHVFN%2McJF)#YRc3))h2FeI-{!oGGB`9gg8 zOy)#c68fn;blFXuhIjz|B5X1cHO5MqT4SIwL+h^1p$ml4Ado`^b$d2L`TUKEN7b#r z54q|c*vF&H7&6^!=gnP|0uO^q%LWz~jBqxC@nq>lr-mApL)WuPkJs5wZ0l3nudXng zpf=4w-=AL8I~8Sh7uAzQNTAWi%j-p_BkbMnJ?NjZuL3 z(J0;d{-ja$KGDzea#99HqtdWix4S(10Uh$}_@x2V`rCfwUWJ6$F@;R=Y;c>}cqq-c znP?zeZ`WZm8b1@08zWI)T4^}LL(1)CcnF0P)==*-PwgIa ztr|-6NePF)#i;?qtdUaWyo!D;+$5cIsg?f}Sl}c}4hEEkdyH5O=EoUq{gJtjc>3n3 zHFp6K$KEOPo<3)Xo}-j>BDQrc0TD}(&fVu=n#@ndr4{jE9qZ)Ne{;sH{t5Sa!OD43Q>HE~C1bF`~a) zuV6riG>=(V$$&3NSJvMo>X{4Jj@P~#QaZQi&4SUS7x)6q`o%`Ph=7Fzf)zNCNRzlj z57IEW2XSzoNaUTLNYp0v)igq4mKG~8xvcLy=<-e&Gl3K@sNO^`sMm(6+@Q+Y@SZ4d zRL>W^p!Te|y-z8)y^&E3Dmz<%Pq#2@6A+bP2aP%x!( zy8tNs{2zbk{k%*P?`M{fFJo9CUrG;h|NUt6h@Zm&K$0MtS`Q#;=gSWHfb!;1M)&;i z{>EbNWp(~1$y9dn?7?{e$uhpIAQ$vK7Y{iB{*~kgTNekE;P1>0{UvS)lJ`nZq|O%N z)xUs=*{~Xa?YFk8wa7FbH96)tLZaUa%2n1guxqTiL*H=VS}}7&lC!Y=Sme}O#X@g- zp*6jl>klQ#`O4jX+PyPC=-}cU-_64FG7+IEOO3plInqewTYOZ?xA+Ra8Y4*g#F2_! z6Xg#^meWzTkra77EN!-+0W-q^T5KgTm3k(vSTC$pf*4?yo>%JWx5B@$RN-KNIRlAJ zz)?AHz{*l`^CreE^G@etDngoWLA=Zr?vzAROVlT^JxNL&91FAu?oO76nJ>0So^G{| zh|f#yEh?}_%}so7M^DI9jiEWK1}oKH;6uu&(Awq;c&4egmz1yvN}>P~P@9L>Jv9cu zwr$j0Z5DMgSgq_dgEte|N5;F)tXz*u!nQQ2lk!I*R! zci}S0iwr764p@zaZPBr&=AG?&6_}SHN#2%ee-A28AH=RmpH&Uai;7d-qmX3<%YxjyoqCvH@rJTNYUIc}M}4&eK0I`OJ+RWL7VtEz8d0<%oz=q#&5ZH=Kk`f#6u zUX>NR3VWCuZMY9QZ!~qCm+7#yMkr%8u3O-Zxy3YT!6o-b#GYeO^>)zk*q4-Tu9UY3 z8g!H{wfL!~p@spj9Wk3dj+xl_f+%2p+Y(2yV))^Kqrl?sj`dLoRs=gAqG6ZTY!dqy z#)~Dr_2U>DYO1_@Y$m>gPs(5#QYKMW3(9+rEgC8`Q8K~7-R;#d8Or*4)mgQI@r-G zWVeoy{J@rl8gU8?RL)rh!mb{|E9V~~T#h5%CSoXb+59X7cuoX^1r`Q+4CIveXv?3M z0-si3%D9^X#*1nwm)p2AlC3`!*?|i;NOeYlJe}S(T4fSJe)ATr7t)x}v9PYB!%dUv zn_pgl!c|cFk}1y?4ZJXs(={n@Q8>S5Nh8~%zeUp5BU4hdv`trKmKH@l8Ux1=tC^wD zvJR?bZqwJO+erP409+mQdA8@ojS9Pex0gZ=&s5i^rJW6)22SjV;C%%2nC(s2HD||g z`87kMUXMYCOD3FY7XwDrjV2H4mD6Kk71b${Q2X#;s2yY5V15==Q`UeNJyZP+o#!dJ z5N0l-`eXFt73`T;pQgPl*iW+rSe04ggY3(GXwu9N4Yyj^v1|9d-!t4YWMZ47&u&dm ze`WS6Fvy1$gB8PneScEVT2gJxa88e9#)GWr1@rgAG`nNqrKo5q3kJG+5ykz^RaX1A z+*6jN+(T~EZ;;u6R9^Z`SE#g{v>1fD!o7Fw$<iP%_XK_FLWMSGoIR@q81V!nl!&toEd; z8~85@)?NgoW{mJSeck39ob$LnrPR3D+Zbtm=U#iEq0)%yERaUY2d&=Y_$K;JMY^)@ zBp$!$>oIYB+JRN#29xWZCu5Gqm*Q>HXPMomheWS6RLw6B;umf%b{4Mb&bNabFE8O5 zEl!o~e8yC@wxJL9L|%?`-IbG6UVgo03BD*Z>b*M&*GTVFr3}9d?x?$bd$+pq$62gj zSVEHsz`$w;*h_kUOz}@Ep@W{b%p+HTgb@*o7AhE^#jA{)Pj4Iqxj<6=TJ)yrj3|wQ zT?ADz$Uo;1e*Lj9u!pwO=Dk1MA$HT%uTwp*67Ko|4nwV!0#G+#pp%R&Js1P6R`(b=_|c@ui5Uf#Otl3zAP)h!lXt zljIzCb&)r8&?QzN2^kyKX~GZ6iRIyY#kUn+hN*N6-Rtvg1WA)Zi?de|3r0NFO(0LJ z|9aDK%;r`>6z=((T=NNF-u=gZyR=lOdzl1bFSCO zF1>kp6KSAef}kV5RS7a^k3p#B4iSQws6ZDfzV$XUsd^I>^QQ;!hd{PQ^ zr3b-beMrB~Vh_E5i)7~xfHrL&q=1UAQS#Q0rQzGwhfR_zEx@!+LrqcC{2VG?CS!vt zg&5Q^9wXB>?CDFWPE~P`79*H7g2&}dHHi8O$+AR5f*ghPI<39GFGsb^5vsG^5OAJx z6Jub+dn^Q2FYQ#bCC^hyC-pYp+3`4~XT(@lW}D3I0ojx{%mnd^rS((h$+W}3B6Il# z8)!;30SG6?UzijOR;eSFu% zO-5g$!B$mSjTS>#ej=O^g2d%Og2UC*mU+&DfxsvT-~-NfZF{=UygG)}y*VmGD?uR+ zxJKOlMhf{3T)&<~_Xuv;ejtt>y|ZsCQ&+F6A7k&?7Fbs=l0Xve-PY%DyS8r1KQ?Sj ziAYQufVa*Cuwx$q==n2U3!R@!k(7Wg^yjOEn+E!fH06Gg_W$qT8a5={N`>rm0Jf02 z+8{P87W-xIou0xAP!c}}JoXtsF^sUP0uE0~+)e277Y!lHDlzsdl}q1`zTe$-dWa*! zMW=m7NfA@;1|52j3r9#ZFa{f^U6rqH)G}WLYXg^*e6M4Djc%ZY-%aveLa3;c4WauI?ov0=7&AcGr@oxbR zf+rdNC?QrbV9!IwH8CXXPLu~*uwcr%gJf1KPazETVS4eNER(H6rPJwKwY{WU7=PJ~wupzRLx<8Q6Z4^V)~vv3S`hTPlys^HU&P^XuyLDYDJJWhkoE_uU+MM zAbRS9XKXNW;VQq1uDlgd(Z}NPwIEphn2cB}lB$21WkIKx@_gx;>BnQVu#T8eufUx; zv94rV6g~e$U)nTs>T>8r!BHQd>Y8!H!UWg7L1KB7cE2ST?mWp?7gAI>$O8+*9(}}!5jb+&S_h$J^Cs62UX|B32YtiA^=AyNtZcoa3wTx?*F3ZC4i z*r`h=4vSZ@@72d7OzhmMPh{H^5rS1Z1(6jcYr`E}_*5Ed2P!o{GtX!KuA=l zN72}5pm=Eh?3ajsH4ORvir+;8Dt!dlnK9L{Em7eEG4r(#ps$&E>w;cvX2 zxIc96FD-ZmOb#$C{Il(#TDyy~70?o#1CGxEoO|{psPF*hzIx`i8nRB7dNykJ{feZ> zuK=-f?qIh7vL(O(3i=oFYk=bY)ujB?p{Imm&})s-B0xZg93Ve8JUr081-MWBGoC7Eyze1@BTggCjkBZ&W(rQp!hevp1JN5a=;OJKLZ{RZ{KU~ ztWQ8d_woKJyN4j5@;AAep01G=rIDGIfgUx5v8A5DUo1Reta>&zZ4v^zi6cy!ao5)W|h8X*1(ktF{+1mm9| zAXxI;f&i*0#LL$-Uw0^ohfg8sB99j0J^Vb~h# zndwpfOn>?ZKdsgq$DkjyZ-9XA%wEi37QMJ-NaPd&BPjBLUP_+Jp-ywe9%lVXx zr)O|JK%mzD4)OCu&ZoNmbg$I|g!Rnd5RZ3WJthCupZtLs2&iuv>`&h1PXT^)(0&Y1 zzw#8|!Cm_)%CGLpk5RzZo}&Eh%AW%K>d*Ta;N|*LfS+vq5#^~{>jRGL#^1vH#mV(4 z7f;=`9_Y(<|EY|BIdMHDerhd$Aa=g`oA`mH#v~ lc#8Gwkn%Cs66Bw;9tN0_A^?5?0T1vO4H$}SK;QrS-vE2MYCZq} literal 0 HcmV?d00001