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