From 127e07ab58675a8a858215b94c676d44a1e29cff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=8F=E5=BD=A6=E5=8D=9A?= <1139346339@qq.com> Date: Sun, 24 Dec 2023 11:07:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=B9=E6=B3=A8=E4=BA=86NoteEditText?= =?UTF-8?q?=E5=92=8CGTaskASyncTask=E4=B8=A4=E4=B8=AA=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/report.docx | Bin 427839 -> 428098 bytes .../notes/gtask/remote/GTaskASyncTask.java | 87 ++++++++++--- .../net/micode/notes/ui/NoteEditText.java | 118 +++++++++++++----- 3 files changed, 161 insertions(+), 44 deletions(-) diff --git a/doc/report.docx b/doc/report.docx index 16fb34e646a1e46c490cf363f6498bbb359b355c..dedc5fa830e49094c0cd4e868107aee2000fba3d 100644 GIT binary patch delta 17962 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 RemZA6n*m#0Be2WI008RYmE8aU delta 17785 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 BX_Fd~9%Y?V34iUc&>B}fZThvU#AQYS*7 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 bI#@mZTsxZ$Q)%6Fo(?txw(168c3}VjRowjf diff --git a/src/main/java/net/micode/notes/gtask/remote/GTaskASyncTask.java b/src/main/java/net/micode/notes/gtask/remote/GTaskASyncTask.java index 0ea27b7..b5a9e75 100644 --- a/src/main/java/net/micode/notes/gtask/remote/GTaskASyncTask.java +++ b/src/main/java/net/micode/notes/gtask/remote/GTaskASyncTask.java @@ -29,10 +29,21 @@ import net.micode.notes.ui.NotesListActivity; import net.micode.notes.ui.NotesPreferenceActivity; +/** + * @method: GTaskASyncTask + * @description:GTaskASyncTask 类继承 AsyncTask 类而来,负责同步任务读取的账户准备, + * 完成消息报文的读取,取消任务同步,以及显示任务的进度信息,完成信息的任务。 + * 总计定义了4个私有的变量 + * mcontext 用于访问特定资源和类的context对象 + * mOnCompleteListener 回调接口,将传递结果给调用者 + * mNotifiManager 通过调用 mTaskManager 控制和调度异步任务 + * @date: 9:01 + * @author: Xia Yanbo +*/ public class GTaskASyncTask extends AsyncTask { - private static int GTASK_SYNC_NOTIFICATION_ID = 5234235; - + private static int GTASK_SYNC_NOTIFICATION_ID = 5234235;//序列化,用于验证版本 +//声明定义一个接口OnCompleteListener,实现放在后面 public interface OnCompleteListener { void onComplete(); } @@ -44,7 +55,16 @@ public class GTaskASyncTask extends AsyncTask { private GTaskManager mTaskManager; private OnCompleteListener mOnCompleteListener; - +/** + * @method: GTaskASyncTask + * @description:GTaskASyncTask类的构造函数,完成构造 + * @date: 16:11 + * @author: Xia Yanbo + * @param: mcontext 用于访问特定资源和类的context对象 + * @param: mOnCompleteListener 回调接口,将传递结果给调用者 + * @param: mNotifiManager 通过调用 + * @param: mTaskManager 控制和调度异步任务 +*/ public GTaskASyncTask(Context context, OnCompleteListener listener) { mContext = context; mOnCompleteListener = listener; @@ -52,22 +72,42 @@ public class GTaskASyncTask extends AsyncTask { .getSystemService(Context.NOTIFICATION_SERVICE); mTaskManager = GTaskManager.getInstance(); } - + /** + * @method: GTaskASyncTask + * @description:取消异步任务 + * @date: 8:32 + * @author: Xia Yanbo + */ public void cancelSync() { mTaskManager.cancelSync(); } + /** + * @method: GTaskASyncTask + * @description:更新异步任务的进度 + * @date: 8:33 + * @author: Xia Yanbo + * @param: message 进度的报文 + */ public void publishProgess(String message) { publishProgress(new String[] { message }); } - + /** + * @method: GTaskASyncTask + * @description:显示系统通知 + * @date: 8:35 + * @author: Xia Yanbo + * @param:tickerId通知的文本资源的ID + * @param:content通知的具体文本内容 + * @return:NULL + */ private void showNotification(int tickerId, String content) { Notification notification = new Notification(R.drawable.notification, mContext .getString(tickerId), System.currentTimeMillis()); notification.defaults = Notification.DEFAULT_LIGHTS; - notification.flags = Notification.FLAG_AUTO_CANCEL; + notification.flags = Notification.FLAG_AUTO_CANCEL;//打上标识,用于判断发送报错信息和通知操作等 PendingIntent pendingIntent; if (tickerId != R.string.ticker_success) { pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext, @@ -79,24 +119,43 @@ public class GTaskASyncTask extends AsyncTask { } // notification.setLatestEventInfo(mContext, mContext.getString(R.string.app_name), content, // pendingIntent); - mNotifiManager.notify(GTASK_SYNC_NOTIFICATION_ID, notification); + mNotifiManager.notify(GTASK_SYNC_NOTIFICATION_ID, notification);//直接调用父类的方法 } - + /** + * @method: GTaskASyncTask + * @description:运行在后台,执行同步操作前准备 + * @date: 8:46 + * @author: Xia Yanbo + * @return: 状态码,用于检验同步是否完成 + */ @Override protected Integer doInBackground(Void... unused) { publishProgess(mContext.getString(R.string.sync_progress_login, NotesPreferenceActivity - .getSyncAccountName(mContext))); + .getSyncAccountName(mContext)));//获取用户的状态信息 return mTaskManager.sync(mContext, this); } - + /** + * @method: GTaskASyncTask + * @description:同步过程中发送传输同步信息的报文 + * @date: 8:50 + * @author: Xia Yanbo + * @param:Progress 正在进行的任务的进度信息 + */ @Override protected void onProgressUpdate(String... progress) { - showNotification(R.string.ticker_syncing, progress[0]); - if (mContext instanceof GTaskSyncService) { + showNotification(R.string.ticker_syncing, progress[0]);//显示正在进行同步操作的通知 + if (mContext instanceof GTaskSyncService) {//检查是否是GTaskSyncService的实例。 ((GTaskSyncService) mContext).sendBroadcast(progress[0]); + // 如果是,就调用该服务的sendBroadcast方法发送广播,通知其他组件同步的进度。 } } - + /** + * @method: GTaskASyncTask + * @description:将执行完毕的任务的完成信息,错误信息以及取消信息显示出来 + * @date: 8:57 + * @author: Xia Yanbo + * @param:result 进程运行的结果信息 + */ @Override protected void onPostExecute(Integer result) { if (result == GTaskManager.STATE_SUCCESS) { @@ -111,7 +170,7 @@ public class GTaskASyncTask extends AsyncTask { showNotification(R.string.ticker_cancel, mContext .getString(R.string.error_sync_cancelled)); } - if (mOnCompleteListener != null) { + if (mOnCompleteListener != null) {//如果监听到了报文,创建一个新的线程来通知任务完成(减少主进程时间浪费) new Thread(new Runnable() { public void run() { diff --git a/src/main/java/net/micode/notes/ui/NoteEditText.java b/src/main/java/net/micode/notes/ui/NoteEditText.java index 2afe2a8..39592b5 100644 --- a/src/main/java/net/micode/notes/ui/NoteEditText.java +++ b/src/main/java/net/micode/notes/ui/NoteEditText.java @@ -36,16 +36,26 @@ import net.micode.notes.R; import java.util.HashMap; import java.util.Map; - +/** + * @classname: NoteEditText + * @methodname + * @description: + * @date: 2023/12/24 9:22 + * @author: Xia Yanbo + * @param: + * @param: + * @param: + * @return: +*/ public class NoteEditText extends EditText { - private static final String TAG = "NoteEditText"; - private int mIndex; + 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:" ; - + //设置映射,将文本内容拼接成完整的网址 private static final Map sSchemaActionResMap = new HashMap(); static { sSchemaActionResMap.put(SCHEME_TEL, R.string.note_link_tel); @@ -55,53 +65,65 @@ public class NoteEditText extends EditText { /** * Call by the {@link NoteEditActivity} to delete or add edit text + * 可以用作往整个文本里添加以及删除文本,会被NoteEditActivity时常调用 */ public interface OnTextViewChangeListener { /** * Delete current edit text when {@link KeyEvent#KEYCODE_DEL} happens * and the text is null + * 当按下delete时删除编辑的文字 */ void onEditTextDelete(int index, String text); /** * Add edit text after current edit text when {@link KeyEvent#KEYCODE_ENTER} * happen + * 当按下enter时添加编辑的文本到文本中 */ void onEditTextEnter(int index, String text); /** * Hide or show item option when text change + * 当文字发生变化时显示或者隐藏起设置 */ void onTextChange(int index, boolean hasText); } - + //声明文本视图变化的监听器 private OnTextViewChangeListener mOnTextViewChangeListener; - + //实例化NoteEditText对象, public NoteEditText(Context context) { super(context, null); mIndex = 0; } - + //为本本编辑设置一个索引 public void setIndex(int index) { mIndex = index; } - + //直接调用父类,定义好文本视图变化的监听器 public void setOnTextViewChangeListener(OnTextViewChangeListener listener) { mOnTextViewChangeListener = listener; } - + //NoteEditText的构造函数,通过文本编辑风格的参数集实例化 public NoteEditText(Context context, AttributeSet attrs) { super(context, attrs, android.R.attr.editTextStyle); } - + //NoteEditText的构造函数,通过文本编辑风格的参数集实例化,支持用户自定义风格 public NoteEditText(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); + super(context, attrs, defStyle);//允许自定义风格 // TODO Auto-generated constructor stub } - + /** + * @classname: NoteEditText + * @methodname onTouchEvent + * @description:根据得到的用户采取的动作(事件)类型进行相应的光标的设置 + * @date: 2023/12/24 10:05 + * @author: Xia Yanbo + * @param:event 具体的动作动作事件 + * @return:boolean 表示是否成功 + */ @Override public boolean onTouchEvent(MotionEvent event) { - switch (event.getAction()) { + switch (event.getAction()) {//对动作事件进行分类的判别 case MotionEvent.ACTION_DOWN: int x = (int) event.getX(); @@ -112,15 +134,24 @@ public class NoteEditText extends EditText { y += getScrollY(); Layout layout = getLayout(); - int line = layout.getLineForVertical(y); - int off = layout.getOffsetForHorizontal(line, x); + int line = layout.getLineForVertical(y);//直接获取行数 + int off = layout.getOffsetForHorizontal(line, x);//从边界起数获得偏移 Selection.setSelection(getText(), off); break; } - return super.onTouchEvent(event); + return super.onTouchEvent(event);//再调用父类的方法进行后续的处理 } - + /** + * @classname: NoteEditText + * @methodname onKeyDown + * @description:监听键盘按键按下 + * @date: 2023/12/24 10:15 + * @author: Xia Yanbo + * @param:keyCode 按键的编码值 + * @param:event 按键的具体事件 + * @return:boolean 表示判断执行的过程是否顺利 + */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { @@ -137,7 +168,16 @@ public class NoteEditText extends EditText { } return super.onKeyDown(keyCode, event); } - + /** + * @classname: NoteEditText + * @methodname onKeyUp + * @description:监听键盘按键抬起 + * @date: 2023/12/24 10:15 + * @author: Xia Yanbo + * @param:keyCode 按键的编码值 + * @param:event 按键的具体事件 + * @return:boolean 表示判断执行的过程是否顺利 + */ @Override public boolean onKeyUp(int keyCode, KeyEvent event) { switch(keyCode) { @@ -166,11 +206,20 @@ public class NoteEditText extends EditText { } return super.onKeyUp(keyCode, event); } - + /** + * @classname: NoteEditText + * @methodname onFocusChanged + * @description:对应当前视图的焦点改变 + * @date: 2023/12/24 10:25 + * @author: Xia Yanbo + * @param:focused 焦点改变或者还未改变 + * @param:direction 改变方向? + * @param:reviouslyFocusedRect 上一个焦点所关注的视图 + */ @Override protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { if (mOnTextViewChangeListener != null) { - if (!focused && TextUtils.isEmpty(getText())) { + if (!focused && TextUtils.isEmpty(getText())) {//当没有输入,关注的视图也发生改变,设置隐藏 mOnTextViewChangeListener.onTextChange(mIndex, false); } else { mOnTextViewChangeListener.onTextChange(mIndex, true); @@ -178,19 +227,27 @@ public class NoteEditText extends EditText { } super.onFocusChanged(focused, direction, previouslyFocusedRect); } - + /** + * @classname: NoteEditText + * @methodname onCreateContextMenu + * @description:创建文本的上下文菜单 + * @date: 2023/12/24 10:34 + * @author: Xia Yanbo + * @param:contextMenu 现有的上下文菜单 + */ @Override protected void onCreateContextMenu(ContextMenu menu) { - if (getText() instanceof Spanned) { - int selStart = getSelectionStart(); - int selEnd = getSelectionEnd(); - + if (getText() instanceof Spanned) {//检查文本的类型 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); + //获取选择的文本范围内获取所有的 URLSpan 对象。URLSpan 是用于表示文本中的链接的。 + final URLSpan[] urls = ((Spanned) getText()).getSpans(min, max, URLSpan.class);//获取范围 if (urls.length == 1) { int defaultResId = 0; + //根据URL获取资源 for(String schema: sSchemaActionResMap.keySet()) { if(urls[0].getURL().indexOf(schema) >= 0) { defaultResId = sSchemaActionResMap.get(schema); @@ -201,9 +258,10 @@ public class NoteEditText extends EditText { if (defaultResId == 0) { 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); @@ -212,6 +270,6 @@ public class NoteEditText extends EditText { }); } } - super.onCreateContextMenu(menu); + super.onCreateContextMenu(menu);//调用父类方法 } }