diff --git a/.gitignore b/.gitignore index e3879fd..548e911 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ /src/.idea/ /src/Notes-master1/ /.idea/ +/MiNotes.iml/ \ No newline at end of file diff --git a/MiNotes.iml b/MiNotes.iml index a0a9b8c..81b0882 100644 --- a/MiNotes.iml +++ b/MiNotes.iml @@ -1,6 +1,6 @@ - \ No newline at end of file diff --git a/doc/小米便签泛读、标注和维护报告文档.docx b/doc/小米便签泛读、标注和维护报告文档.docx index 73adb30..efb0d8f 100644 Binary files a/doc/小米便签泛读、标注和维护报告文档.docx and b/doc/小米便签泛读、标注和维护报告文档.docx differ diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index b6036d7..952d7c5 100644 --- a/src/main/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -4,18 +4,25 @@ android:versionCode="1" android:versionName="0.1"> + - - - - - + + + + + - + + + + + "); - if (Flag1 != -1 && Flag2 != -1) { - stringBuffer = stringBuffer.replace(Flag1, Flag2+1, ""); - } - } while (Flag1 != -1 && Flag2 != -1); + private String textChange(String oriText) { + StringBuilder stringBuilder = new StringBuilder(oriText); - do {//不计入换行字符 - Flag1 = stringBuffer.indexOf("\n"); + // 移除所有<> + removeAngleBrackets(stringBuilder); - if (Flag1 != -1){ - stringBuffer = stringBuffer.replace(Flag1, Flag1+1, ""); + // 移除换行符和空格 + for (int i = 0; i < stringBuilder.length(); i++) { + char c = stringBuilder.charAt(i); + if (c == '\n' || c == ' ') { + stringBuilder.deleteCharAt(i); + i--; } - } while (Flag1 != -1); - do {//不计入空格字符 - Flag1 = stringBuffer.indexOf(" "); + } - if (Flag1 != -1) { - stringBuffer = stringBuffer.replace(Flag1, Flag1+1, ""); - } - } while (Flag1 != -1); - return stringBuffer.toString(); + return stringBuilder.toString(); } + /** + * @method removeAngleBrackets + * @description 用以辅助移除<> + * @date: 1/18/2024 7:22 PM + * @author: YangYizhe + * @param + * @return + */ + private void removeAngleBrackets(StringBuilder stringBuilder) { + int startIndex = stringBuilder.indexOf("<"); + int endIndex = stringBuilder.indexOf(">"); + if (startIndex != -1 && endIndex != -1 && startIndex < endIndex) { + stringBuilder.delete(startIndex, endIndex + 1); + removeAngleBrackets(stringBuilder); + } + } + + + /** * @method count @@ -180,7 +433,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, * @date: 1/3/2024 9:09 AM * @author: YangYizhe */ - private void count() { + /**private void count() { mNoteEditor.addTextChangedListener(new TextWatcher() { int currentLength = 0; @Override @@ -190,7 +443,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, @Override public void onTextChanged(CharSequence s, int start, int before, int count) { - currentLength = Textchange(mNoteEditor.getText().toString()).length(); + currentLength = textChange(mNoteEditor.getText().toString()).length(); } @Override @@ -198,7 +451,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, mNoteHeaderHolder.textNum.setText("字数:" + currentLength); } }); - } + }*/ /** *在 Activity 创建时进行一些初始化工作,包括设置布局、初始化状态和资源等操作 @@ -212,7 +465,8 @@ public class NoteEditActivity extends Activity implements OnClickListener, return; } initResources(); - count(); + initRichEditor(); + //count(); } /** @@ -332,13 +586,12 @@ public class NoteEditActivity extends Activity implements OnClickListener, * @author: YangYizhe */ private void initNoteScreen() { - mNoteEditor.setTextAppearance(this, TextAppearanceResources - .getTexAppearanceResource(mFontSizeId)); + mNoteEditor.setEditorFontSize(30); if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) { switchToListMode(mWorkingNote.getContent()); } else { - mNoteEditor.setText(getHighlightQueryResult(mWorkingNote.getContent(), mUserQuery)); - mNoteEditor.setSelection(mNoteEditor.getText().length()); + mNoteEditor.setHtml(String.valueOf(getHighlightQueryResult(mWorkingNote.getContent(), mUserQuery))); + //mNoteEditor.setSelection(mText.length()); } for (Integer id : sBgSelectorSelectionMap.keySet()) { findViewById(sBgSelectorSelectionMap.get(id)).setVisibility(View.GONE); @@ -446,7 +699,18 @@ public class NoteEditActivity extends Activity implements OnClickListener, mNoteHeaderHolder.ibSetBgColor = (ImageView) findViewById(R.id.btn_set_bg_color); mNoteHeaderHolder.textNum = (TextView) findViewById(R.id.text_num); mNoteHeaderHolder.ibSetBgColor.setOnClickListener(this); - mNoteEditor = (EditText) findViewById(R.id.note_edit_view); + mNoteEditor = findViewById(R.id.note_edit_view); + mNoteEditor.setOnTextChangeListener(new RichEditor.OnTextChangeListener() { + @Override + public void onTextChange(String text) { + mText = text; + mNoteLength = textChange(mText).length(); + mNoteHeaderHolder.tvModified.setText(DateUtils.formatDateTime(NoteEditActivity.this, + mWorkingNote.getModifiedDate(), DateUtils.FORMAT_SHOW_DATE + | DateUtils.FORMAT_NUMERIC_DATE | DateUtils.FORMAT_SHOW_TIME + | DateUtils.FORMAT_SHOW_YEAR)+"\n字符数:"+mNoteLength); + } + }); mNoteEditorPanel = findViewById(R.id.sv_note_edit); mNoteBgColorSelector = findViewById(R.id.note_bg_color_selector); for (int id : sBgSelectorBtnsMap.keySet()) { @@ -526,8 +790,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, getWorkingText(); switchToListMode(mWorkingNote.getContent()); } else { - mNoteEditor.setTextAppearance(this, - TextAppearanceResources.getTexAppearanceResource(mFontSizeId)); + mNoteEditor.setEditorFontSize(mFontSizeId); } mFontSizeSelector.setVisibility(View.GONE); } @@ -822,15 +1085,15 @@ public class NoteEditActivity extends Activity implements OnClickListener, mEditTextList.setVisibility(View.VISIBLE); } /** - * @method getHighlightQueryResult + * @param fullText 完整文本 + * @param userQuery 用户查询关键词 + * @return 带有高亮效果的 Spannable 对象 + * @method getHighlightQueryResult * @description 获取高亮查询结果 * @date: 12/24/2023 6:18 PM * @author: YangYizhe - * @param fullText 完整文本 - * @param userQuery 用户查询关键词 - * @return 带有高亮效果的 Spannable 对象 */ - private Spannable getHighlightQueryResult(String fullText, String userQuery) { + private SpannableString getHighlightQueryResult(String fullText, String userQuery) { SpannableString spannable = new SpannableString(fullText == null ? "" : fullText); if (!TextUtils.isEmpty(userQuery)) { mPattern = Pattern.compile(userQuery); @@ -914,13 +1177,13 @@ public class NoteEditActivity extends Activity implements OnClickListener, */ public void onCheckListModeChanged(int oldMode, int newMode) { if (newMode == TextNote.MODE_CHECK_LIST) { - switchToListMode(mNoteEditor.getText().toString()); + switchToListMode(mText.toString()); } else { if (!getWorkingText()) { mWorkingNote.setWorkingText(mWorkingNote.getContent().replace(TAG_UNCHECKED + " ", "")); } - mNoteEditor.setText(getHighlightQueryResult(mWorkingNote.getContent(), mUserQuery)); + mNoteEditor.setHtml(String.valueOf(getHighlightQueryResult(mWorkingNote.getContent(), mUserQuery))); mEditTextList.setVisibility(View.GONE); mNoteEditor.setVisibility(View.VISIBLE); } @@ -961,7 +1224,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, } mWorkingNote.setWorkingText(sb.toString());//利用编辑好的字符串设置运行便签的内容 } else {// 若不是该模式直接用编辑器中的内容设置运行中标签的内容 - mWorkingNote.setWorkingText(mNoteEditor.getText().toString()); + mWorkingNote.setWorkingText(mText.toString()); } return hasChecked; } diff --git a/src/main/res/drawable-hdpi/bg.png b/src/main/res/drawable-hdpi/bg.png new file mode 100644 index 0000000..edd0fa3 Binary files /dev/null and b/src/main/res/drawable-hdpi/bg.png differ diff --git a/src/main/res/drawable-hdpi/bg_color.png b/src/main/res/drawable-hdpi/bg_color.png new file mode 100644 index 0000000..c6bd0ef Binary files /dev/null and b/src/main/res/drawable-hdpi/bg_color.png differ diff --git a/src/main/res/drawable-hdpi/blockquote.png b/src/main/res/drawable-hdpi/blockquote.png new file mode 100644 index 0000000..638a40c Binary files /dev/null and b/src/main/res/drawable-hdpi/blockquote.png differ diff --git a/src/main/res/drawable-hdpi/bold.png b/src/main/res/drawable-hdpi/bold.png new file mode 100644 index 0000000..7184e00 Binary files /dev/null and b/src/main/res/drawable-hdpi/bold.png differ diff --git a/src/main/res/drawable-hdpi/bullets.png b/src/main/res/drawable-hdpi/bullets.png new file mode 100644 index 0000000..91a0fc0 Binary files /dev/null and b/src/main/res/drawable-hdpi/bullets.png differ diff --git a/src/main/res/drawable-hdpi/check.png b/src/main/res/drawable-hdpi/check.png new file mode 100644 index 0000000..59a56ae Binary files /dev/null and b/src/main/res/drawable-hdpi/check.png differ diff --git a/src/main/res/drawable-hdpi/h1.png b/src/main/res/drawable-hdpi/h1.png new file mode 100644 index 0000000..774786c Binary files /dev/null and b/src/main/res/drawable-hdpi/h1.png differ diff --git a/src/main/res/drawable-hdpi/h2.png b/src/main/res/drawable-hdpi/h2.png new file mode 100644 index 0000000..3715b7a Binary files /dev/null and b/src/main/res/drawable-hdpi/h2.png differ diff --git a/src/main/res/drawable-hdpi/h3.png b/src/main/res/drawable-hdpi/h3.png new file mode 100644 index 0000000..4a8915c Binary files /dev/null and b/src/main/res/drawable-hdpi/h3.png differ diff --git a/src/main/res/drawable-hdpi/h4.png b/src/main/res/drawable-hdpi/h4.png new file mode 100644 index 0000000..6781447 Binary files /dev/null and b/src/main/res/drawable-hdpi/h4.png differ diff --git a/src/main/res/drawable-hdpi/h5.png b/src/main/res/drawable-hdpi/h5.png new file mode 100644 index 0000000..682a91d Binary files /dev/null and b/src/main/res/drawable-hdpi/h5.png differ diff --git a/src/main/res/drawable-hdpi/h6.png b/src/main/res/drawable-hdpi/h6.png new file mode 100644 index 0000000..dee7ff4 Binary files /dev/null and b/src/main/res/drawable-hdpi/h6.png differ diff --git a/src/main/res/drawable-hdpi/html_edit.png b/src/main/res/drawable-hdpi/html_edit.png new file mode 100644 index 0000000..3bbdedb Binary files /dev/null and b/src/main/res/drawable-hdpi/html_edit.png differ diff --git a/src/main/res/drawable-hdpi/indent.png b/src/main/res/drawable-hdpi/indent.png new file mode 100644 index 0000000..77efb71 Binary files /dev/null and b/src/main/res/drawable-hdpi/indent.png differ diff --git a/src/main/res/drawable-hdpi/insert_image.png b/src/main/res/drawable-hdpi/insert_image.png new file mode 100644 index 0000000..3c88842 Binary files /dev/null and b/src/main/res/drawable-hdpi/insert_image.png differ diff --git a/src/main/res/drawable-hdpi/insert_link.png b/src/main/res/drawable-hdpi/insert_link.png new file mode 100644 index 0000000..e86e04c Binary files /dev/null and b/src/main/res/drawable-hdpi/insert_link.png differ diff --git a/src/main/res/drawable-hdpi/italic.png b/src/main/res/drawable-hdpi/italic.png new file mode 100644 index 0000000..f1a1363 Binary files /dev/null and b/src/main/res/drawable-hdpi/italic.png differ diff --git a/src/main/res/drawable-hdpi/justify_center.png b/src/main/res/drawable-hdpi/justify_center.png new file mode 100644 index 0000000..450ce24 Binary files /dev/null and b/src/main/res/drawable-hdpi/justify_center.png differ diff --git a/src/main/res/drawable-hdpi/justify_left.png b/src/main/res/drawable-hdpi/justify_left.png new file mode 100644 index 0000000..5125d0e Binary files /dev/null and b/src/main/res/drawable-hdpi/justify_left.png differ diff --git a/src/main/res/drawable-hdpi/justify_right.png b/src/main/res/drawable-hdpi/justify_right.png new file mode 100644 index 0000000..47be92b Binary files /dev/null and b/src/main/res/drawable-hdpi/justify_right.png differ diff --git a/src/main/res/drawable-hdpi/music.png b/src/main/res/drawable-hdpi/music.png new file mode 100644 index 0000000..88ee22d Binary files /dev/null and b/src/main/res/drawable-hdpi/music.png differ diff --git a/src/main/res/drawable-hdpi/numbers.png b/src/main/res/drawable-hdpi/numbers.png new file mode 100644 index 0000000..44d388e Binary files /dev/null and b/src/main/res/drawable-hdpi/numbers.png differ diff --git a/src/main/res/drawable-hdpi/outdent.png b/src/main/res/drawable-hdpi/outdent.png new file mode 100644 index 0000000..3a953ce Binary files /dev/null and b/src/main/res/drawable-hdpi/outdent.png differ diff --git a/src/main/res/drawable-hdpi/redo.png b/src/main/res/drawable-hdpi/redo.png new file mode 100644 index 0000000..eb9bf47 Binary files /dev/null and b/src/main/res/drawable-hdpi/redo.png differ diff --git a/src/main/res/drawable-hdpi/strikethrough.png b/src/main/res/drawable-hdpi/strikethrough.png new file mode 100644 index 0000000..7f3e464 Binary files /dev/null and b/src/main/res/drawable-hdpi/strikethrough.png differ diff --git a/src/main/res/drawable-hdpi/subscript.png b/src/main/res/drawable-hdpi/subscript.png new file mode 100644 index 0000000..34d4c57 Binary files /dev/null and b/src/main/res/drawable-hdpi/subscript.png differ diff --git a/src/main/res/drawable-hdpi/superscript.png b/src/main/res/drawable-hdpi/superscript.png new file mode 100644 index 0000000..0ad3576 Binary files /dev/null and b/src/main/res/drawable-hdpi/superscript.png differ diff --git a/src/main/res/drawable-hdpi/txt_color.png b/src/main/res/drawable-hdpi/txt_color.png new file mode 100644 index 0000000..7d0e2eb Binary files /dev/null and b/src/main/res/drawable-hdpi/txt_color.png differ diff --git a/src/main/res/drawable-hdpi/underline.png b/src/main/res/drawable-hdpi/underline.png new file mode 100644 index 0000000..24d55a4 Binary files /dev/null and b/src/main/res/drawable-hdpi/underline.png differ diff --git a/src/main/res/drawable-hdpi/undo.png b/src/main/res/drawable-hdpi/undo.png new file mode 100644 index 0000000..9fa457a Binary files /dev/null and b/src/main/res/drawable-hdpi/undo.png differ diff --git a/src/main/res/drawable-hdpi/video.png b/src/main/res/drawable-hdpi/video.png new file mode 100644 index 0000000..bbbc39e Binary files /dev/null and b/src/main/res/drawable-hdpi/video.png differ diff --git a/src/main/res/drawable-hdpi/youtube.png b/src/main/res/drawable-hdpi/youtube.png new file mode 100644 index 0000000..0f35775 Binary files /dev/null and b/src/main/res/drawable-hdpi/youtube.png differ diff --git a/src/main/res/layout/note_edit.xml b/src/main/res/layout/note_edit.xml index 59415d7..74fe6cd 100644 --- a/src/main/res/layout/note_edit.xml +++ b/src/main/res/layout/note_edit.xml @@ -85,17 +85,17 @@ + android:scrollbars="none"> - @@ -395,14 +395,249 @@ + android:focusable="false" + android:src="@drawable/selected" + android:visibility="gone" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +