|
|
|
@ -86,11 +86,14 @@ import net.micode.notes.ui.NoteEditText.OnTextViewChangeListener;
|
|
|
|
|
import net.micode.notes.widget.NoteWidgetProvider_2x;
|
|
|
|
|
import net.micode.notes.widget.NoteWidgetProvider_4x;
|
|
|
|
|
|
|
|
|
|
import org.w3c.dom.Text;
|
|
|
|
|
|
|
|
|
|
import java.io.FileNotFoundException;
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
import java.util.HashSet;
|
|
|
|
|
import java.util.Locale;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
import java.util.Vector;
|
|
|
|
|
import java.util.regex.Matcher;
|
|
|
|
|
import java.util.regex.Pattern;
|
|
|
|
|
|
|
|
|
@ -177,7 +180,7 @@ public class NoteEditActivity extends AppCompatActivity implements OnClickListen
|
|
|
|
|
private static final int SHORTCUT_ICON_TITLE_MAX_LEN = 10;
|
|
|
|
|
|
|
|
|
|
private static final int PHOTO_REQUEST=1;
|
|
|
|
|
|
|
|
|
|
private boolean mIsRvoke=false;
|
|
|
|
|
public static final String TAG_CHECKED = String.valueOf('\u221A');
|
|
|
|
|
public static final String TAG_UNCHECKED = String.valueOf('\u25A1');
|
|
|
|
|
|
|
|
|
@ -190,6 +193,7 @@ public class NoteEditActivity extends AppCompatActivity implements OnClickListen
|
|
|
|
|
private TextView textView;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
|
|
|
super.onCreate(savedInstanceState);
|
|
|
|
@ -220,6 +224,32 @@ public class NoteEditActivity extends AppCompatActivity implements OnClickListen
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
final ImageButton revoke = (ImageButton) findViewById(R.id.revoke);
|
|
|
|
|
revoke.setOnClickListener(new View.OnClickListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(View view) {
|
|
|
|
|
doRevoke();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
mNoteEditor.addTextChangedListener(new TextWatcher() {
|
|
|
|
|
@Override
|
|
|
|
|
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
|
|
|
|
}
|
|
|
|
|
@Override
|
|
|
|
|
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
@Override
|
|
|
|
|
public void afterTextChanged(Editable s) {//文本更改后
|
|
|
|
|
if(!mIsRvoke) {
|
|
|
|
|
saveMyChanged();
|
|
|
|
|
}else {
|
|
|
|
|
mIsRvoke = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -1182,7 +1212,33 @@ public class NoteEditActivity extends AppCompatActivity implements OnClickListen
|
|
|
|
|
}while (flag1 != -1);
|
|
|
|
|
return stringBuffer.toString();
|
|
|
|
|
}
|
|
|
|
|
private String Text_revoke(String oriText){
|
|
|
|
|
StringBuffer stringBuffer = new StringBuffer(oriText);
|
|
|
|
|
int flag1 = -1;
|
|
|
|
|
int flag2 = -1;
|
|
|
|
|
do{//不计入表示图片的字符
|
|
|
|
|
flag1 = stringBuffer.indexOf("/n");
|
|
|
|
|
flag2 = stringBuffer.indexOf("[/local]")+7;
|
|
|
|
|
if (flag1 != -1 && flag2 != -1){
|
|
|
|
|
stringBuffer = stringBuffer.replace(flag1,flag2+1,"");
|
|
|
|
|
}
|
|
|
|
|
}while (flag1 != -1 && flag2 != -1);
|
|
|
|
|
|
|
|
|
|
do{//不计入换行字符
|
|
|
|
|
flag1 = stringBuffer.indexOf("\n");
|
|
|
|
|
if (flag1 != -1){
|
|
|
|
|
stringBuffer = stringBuffer.replace(flag1,flag1+1,"");
|
|
|
|
|
}
|
|
|
|
|
}while (flag1 != -1);
|
|
|
|
|
|
|
|
|
|
do{//不计入空格字符
|
|
|
|
|
flag1 = stringBuffer.indexOf(" ");
|
|
|
|
|
if (flag1 != -1){
|
|
|
|
|
stringBuffer = stringBuffer.replace(flag1,flag1+1,"");
|
|
|
|
|
}
|
|
|
|
|
}while (flag1 != -1);
|
|
|
|
|
return stringBuffer.toString();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
函数功能:实现在编辑小米便签的时候计数
|
|
|
|
@ -1416,5 +1472,40 @@ public class NoteEditActivity extends AppCompatActivity implements OnClickListen
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static final int MAX_TIME_OF_RVOKE_TIME=100;
|
|
|
|
|
private int MAX_OF_RVOKE_TIME=100;
|
|
|
|
|
private Vector<SpannableString> mChanged = new Vector<SpannableString>(MAX_OF_RVOKE_TIME);
|
|
|
|
|
private void saveMyChanged(){
|
|
|
|
|
SpannableString text = new SpannableString(mNoteEditor.getText());//用getText方法获取每次编辑的内容
|
|
|
|
|
if(mChanged.size()>=MAX_TIME_OF_RVOKE_TIME){//如果栈中的数据大于最大撤销次数,就把第一次修改的内容删除
|
|
|
|
|
mChanged.removeElementAt(0);
|
|
|
|
|
}
|
|
|
|
|
mChanged.add(text);//然后把本次修改的内容加入栈中
|
|
|
|
|
}
|
|
|
|
|
private void doRevoke(){
|
|
|
|
|
int size = mChanged.size();//获取当前栈大小
|
|
|
|
|
AlertDialog.Builder dialog = new AlertDialog.Builder(this);//创建一个alertdialog窗口
|
|
|
|
|
dialog.setTitle(R.string.tips_of_revoke);//设置title信息
|
|
|
|
|
dialog.setCancelable(true);//设置为可取消
|
|
|
|
|
dialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {//只需要设置一个OK键即可
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(DialogInterface dialog, int which) {
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
mIsRvoke = true;//把是否已执行撤销的标记设置为true
|
|
|
|
|
if(size<=1){//如果栈中元素过少,打印提示信息
|
|
|
|
|
dialog.setMessage(R.string.have_not_input_anything);//提示用户您还没有输入任何信息
|
|
|
|
|
dialog.show();//显示当前alertdialog
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
mNoteEditor.setText((CharSequence) mChanged.elementAt(size-2));//在textview中设置撤销的内容
|
|
|
|
|
mNoteEditor.setSelection(mNoteEditor.length());
|
|
|
|
|
mChanged.removeElementAt(size-1);//删除元素
|
|
|
|
|
if(size==2){
|
|
|
|
|
dialog.setMessage(R.string.can_not_revoke);//如果只有一次操作,那么提示用户不能再撤销了
|
|
|
|
|
dialog.show();//显示当前alertdialog
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|