diff --git a/src/net/micode/notes/ui/NoteEditActivity.java b/src/net/micode/notes/ui/NoteEditActivity.java index 9553954..c8ede86 100644 --- a/src/net/micode/notes/ui/NoteEditActivity.java +++ b/src/net/micode/notes/ui/NoteEditActivity.java @@ -643,60 +643,75 @@ public class NoteEditActivity extends Activity implements OnClickListener, } private void createNewNote() { - // Firstly, save current editing notes + // Firstly, save current editing notes 保存正在编辑的笔记 saveNote(); - // For safety, start a new NoteEditActivity + // For safety, start a new NoteEditActivity 结束当前的编辑活动并启动新的编辑活动 finish(); Intent intent = new Intent(this, NoteEditActivity.class); intent.setAction(Intent.ACTION_INSERT_OR_EDIT); + //传递当前工作笔记所在的文件夹的ID到新的编辑活动 intent.putExtra(Notes.INTENT_EXTRA_FOLDER_ID, mWorkingNote.getFolderId()); startActivity(intent); } + //删除当前编辑的笔记 private void deleteCurrentNote() { + //检查工作笔记是否存在于数据库中 if (mWorkingNote.existInDatabase()) { HashSet ids = new HashSet(); long id = mWorkingNote.getNoteId(); if (id != Notes.ID_ROOT_FOLDER) { + //如果不是根文件夹,则加入到需要删除的笔记ID集合中 ids.add(id); } else { + //不应该尝试删除根文件夹,记录错误信息 Log.d(TAG, "Wrong note id, should not happen"); } + //如果不存在同步模式,则直接删除笔记 if (!isSyncMode()) { if (!DataUtils.batchDeleteNotes(getContentResolver(), ids)) { Log.e(TAG, "Delete Note error"); } } else { + //否则将笔记移动到垃圾箱文件夹 if (!DataUtils.batchMoveToFolder(getContentResolver(), ids, Notes.ID_TRASH_FOLER)) { Log.e(TAG, "Move notes to trash folder error, should not happens"); } } } + //标记工作笔记为已删除 mWorkingNote.markDeleted(true); } private boolean isSyncMode() { + //获取同步账号名,如果长度大于0,表明存在同步账号,即处于同步模式 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(); + saveNote(); //如果笔记在数据库中不存在,则保存它 } if (mWorkingNote.getNoteId() > 0) { + //创建一个AlarmReceiver的Intent,将笔记ID附加到数据URI Intent intent = new Intent(this, AlarmReceiver.class); intent.setData(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, mWorkingNote.getNoteId())); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0); AlarmManager alarmManager = ((AlarmManager) getSystemService(ALARM_SERVICE)); + //显示提醒的头部信息 showAlertHeader(); if(!set) { + //如果set为false,取消任何现有的闹钟 alarmManager.cancel(pendingIntent); } else { + //如果set为true,设置一个新的闹钟,以唤醒设备并执行pendingIntent alarmManager.set(AlarmManager.RTC_WAKEUP, date, pendingIntent); } } else { @@ -705,41 +720,46 @@ public class NoteEditActivity extends Activity implements OnClickListener, * not worthy saving), we have no note id, remind the user that he * should input something */ + //如果笔记ID小于或等于0,表示没有内容,记录错误并显示提示 Log.e(TAG, "Clock alert setting error"); showToast(R.string.error_note_empty_for_clock); } } + //当小部件状态发生变化时的回调方法,可能是用来触发状态更新或视图刷新 public void onWidgetChanged() { - updateWidget(); + updateWidget(); //更新小部件 } + //当编辑框中的文本被删除时的回调方法 public void onEditTextDelete(int index, String text) { - int childCount = mEditTextList.getChildCount(); - if (childCount == 1) { + int childCount = mEditTextList.getChildCount();//获取编辑框列表的子项数量 + if (childCount == 1) { //如果仅有一个编辑框,则不进行任何操作 return; } - + //更新后续编辑框的索引,因为一个项已经被删除 for (int i = index + 1; i < childCount; i++) { ((NoteEditText) mEditTextList.getChildAt(i).findViewById(R.id.et_edit_text)) .setIndex(i - 1); } - mEditTextList.removeViewAt(index); + mEditTextList.removeViewAt(index);//移除指定索引处的编辑框视图 NoteEditText edit = null; - if(index == 0) { + if(index == 0) { //如果删除的是第一个编辑框 edit = (NoteEditText) mEditTextList.getChildAt(0).findViewById( R.id.et_edit_text); - } else { + } else {//否则,获取欠一个编辑框 edit = (NoteEditText) mEditTextList.getChildAt(index - 1).findViewById( R.id.et_edit_text); } + //将删除的文本追加到当前聚焦的编辑框中 int length = edit.length(); edit.append(text); - edit.requestFocus(); - edit.setSelection(length); + edit.requestFocus();//请求焦点 + edit.setSelection(length);//设置光标位置 } + //当按下回车键时的回调方法,用于添加新的编辑框 public void onEditTextEnter(int index, String text) { /** * Should not happen, check for debug @@ -747,42 +767,47 @@ public class NoteEditActivity extends Activity implements OnClickListener, if(index > mEditTextList.getChildCount()) { Log.e(TAG, "Index out of mEditTextList boundrary, should not happen"); } - + //创建新的列表项视图,然后将其添加到列表中的指定位置 View view = getListItem(text, index); mEditTextList.addView(view, index); NoteEditText edit = (NoteEditText) view.findViewById(R.id.et_edit_text); - edit.requestFocus(); - edit.setSelection(0); + edit.requestFocus();//请求焦点 + edit.setSelection(0);//设置光标位置为最开始 + //更新后续编辑框的索引,因为添加了一个新项 for (int i = index + 1; i < mEditTextList.getChildCount(); i++) { ((NoteEditText) mEditTextList.getChildAt(i).findViewById(R.id.et_edit_text)) .setIndex(i); } } + //将编辑器从文本模式切换到列表模式的方法 private void switchToListMode(String text) { - mEditTextList.removeAllViews(); - String[] items = text.split("\n"); + mEditTextList.removeAllViews();//移除所有视图 + String[] items = text.split("\n");//按换行符拆分文本成多个项 int index = 0; for (String item : items) { - if(!TextUtils.isEmpty(item)) { - mEditTextList.addView(getListItem(item, index)); + if(!TextUtils.isEmpty(item)) { //跳过空项 + mEditTextList.addView(getListItem(item, index));//添加列表项 index++; } } - mEditTextList.addView(getListItem("", 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实例 SpannableString spannable = new SpannableString(fullText == null ? "" : fullText); if (!TextUtils.isEmpty(userQuery)) { - mPattern = Pattern.compile(userQuery); - Matcher m = mPattern.matcher(fullText); + mPattern = Pattern.compile(userQuery);//编译用户的查询文本为正则模式 + Matcher m = mPattern.matcher(fullText);//对全文进行匹配搜索 int start = 0; while (m.find(start)) { + //对匹配到的结果设置高亮背景颜色 spannable.setSpan( new BackgroundColorSpan(this.getResources().getColor( R.color.user_query_highlight)), m.start(), m.end(), @@ -790,16 +815,21 @@ public class NoteEditActivity extends Activity implements OnClickListener, start = m.end(); } } - return spannable; + return spannable;//返回包含高亮查询结果的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 { @@ -807,7 +837,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, } } }); - + //根据复选框的状态初始化编辑框的文本和样式 if (item.startsWith(TAG_CHECKED)) { cb.setChecked(true); edit.setPaintFlags(edit.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); @@ -818,17 +848,20 @@ public class NoteEditActivity extends Activity implements OnClickListener, item = item.substring(TAG_UNCHECKED.length(), item.length()).trim(); } - edit.setOnTextViewChangeListener(this); - edit.setIndex(index); + edit.setOnTextViewChangeListener(this);//设置文本变化监听器 + edit.setIndex(index);//设置编辑框的索引 + //设置并显示高亮查询结果 edit.setText(getHighlightQueryResult(item, mUserQuery)); return view; } + //当文本内容发生改变且编辑框不为空时,会显示或隐藏复选框的方法 public void onTextChange(int index, boolean hasText) { - if (index >= mEditTextList.getChildCount()) { + 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 { @@ -836,6 +869,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, } } + //当勾选列表模式发生改变时的回调方法 public void onCheckListModeChanged(int oldMode, int newMode) { if (newMode == TextNote.MODE_CHECK_LIST) { switchToListMode(mNoteEditor.getText().toString());