diff --git a/app/src/main/java/org/autojs/autojs/ui/edit/EditorView.java b/app/src/main/java/org/autojs/autojs/ui/edit/EditorView.java
index 3f9b827c..96f9b73d 100644
--- a/app/src/main/java/org/autojs/autojs/ui/edit/EditorView.java
+++ b/app/src/main/java/org/autojs/autojs/ui/edit/EditorView.java
@@ -532,7 +532,7 @@ public class EditorView extends FrameLayout implements CodeCompletionBar.OnHintC
return mEditor;
}
- public void find(String keywords, boolean usingRegex) {
+ public void find(String keywords, boolean usingRegex) throws CodeEditor.CheckedPatternSyntaxException {
mEditor.find(keywords, usingRegex);
showSearchToolbar(false);
}
@@ -547,12 +547,12 @@ public class EditorView extends FrameLayout implements CodeCompletionBar.OnHintC
.commit();
}
- public void replace(String keywords, String replacement, boolean usingRegex) {
+ public void replace(String keywords, String replacement, boolean usingRegex) throws CodeEditor.CheckedPatternSyntaxException {
mEditor.replace(keywords, replacement, usingRegex);
showSearchToolbar(true);
}
- public void replaceAll(String keywords, String replacement, boolean usingRegex) {
+ public void replaceAll(String keywords, String replacement, boolean usingRegex) throws CodeEditor.CheckedPatternSyntaxException {
mEditor.replaceAll(keywords, replacement, usingRegex);
}
diff --git a/app/src/main/java/org/autojs/autojs/ui/edit/FindOrReplaceDialogBuilder.java b/app/src/main/java/org/autojs/autojs/ui/edit/FindOrReplaceDialogBuilder.java
index 7cf9c876..7c2317d3 100644
--- a/app/src/main/java/org/autojs/autojs/ui/edit/FindOrReplaceDialogBuilder.java
+++ b/app/src/main/java/org/autojs/autojs/ui/edit/FindOrReplaceDialogBuilder.java
@@ -10,8 +10,11 @@ import android.widget.CheckBox;
import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog;
+import com.stardust.app.GlobalAppContext;
+
import org.autojs.autojs.R;
import org.autojs.autojs.theme.dialog.ThemeColorMaterialDialogBuilder;
+import org.autojs.autojs.ui.edit.editor.CodeEditor;
import butterknife.BindView;
import butterknife.ButterKnife;
@@ -43,20 +46,16 @@ public class FindOrReplaceDialogBuilder extends ThemeColorMaterialDialogBuilder
private EditorView mEditorView;
-
public FindOrReplaceDialogBuilder(@NonNull Context context, EditorView editorView) {
super(context);
mEditorView = editorView;
setupViews();
restoreState();
- onPositive(new MaterialDialog.SingleButtonCallback() {
-
- @Override
- public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
- storeState();
- findOrReplace();
- }
-
+ autoDismiss(false);
+ onNegative((dialog, which)-> dialog.dismiss());
+ onPositive((dialog, which) -> {
+ storeState();
+ findOrReplace(dialog);
});
}
@@ -96,21 +95,27 @@ public class FindOrReplaceDialogBuilder extends ThemeColorMaterialDialogBuilder
}
}
- private void findOrReplace() {
+ private void findOrReplace(MaterialDialog dialog) {
String keywords = mKeywordsEditText.getText().toString();
if (keywords.isEmpty()) {
return;
}
- boolean usingRegex = mRegexCheckBox.isChecked();
- if (!mReplaceCheckBox.isChecked()) {
- mEditorView.find(keywords, usingRegex);
- } else {
- String replacement = mReplacementEditText.getText().toString();
- if (mReplaceAllCheckBox.isChecked()) {
- mEditorView.replaceAll(keywords, replacement, usingRegex);
+ try {
+ boolean usingRegex = mRegexCheckBox.isChecked();
+ if (!mReplaceCheckBox.isChecked()) {
+ mEditorView.find(keywords, usingRegex);
} else {
- mEditorView.replace(keywords, replacement, usingRegex);
+ String replacement = mReplacementEditText.getText().toString();
+ if (mReplaceAllCheckBox.isChecked()) {
+ mEditorView.replaceAll(keywords, replacement, usingRegex);
+ } else {
+ mEditorView.replace(keywords, replacement, usingRegex);
+ }
}
+ dialog.dismiss();
+ } catch (CodeEditor.CheckedPatternSyntaxException e) {
+ e.printStackTrace();
+ mKeywordsEditText.setError(getContext().getString(R.string.error_pattern_syntax));
}
}
diff --git a/app/src/main/java/org/autojs/autojs/ui/edit/editor/CodeEditor.java b/app/src/main/java/org/autojs/autojs/ui/edit/editor/CodeEditor.java
index 0c6eeceb..aff768ad 100644
--- a/app/src/main/java/org/autojs/autojs/ui/edit/editor/CodeEditor.java
+++ b/app/src/main/java/org/autojs/autojs/ui/edit/editor/CodeEditor.java
@@ -19,6 +19,7 @@ import com.stardust.util.TextUtils;
import java.util.LinkedHashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
import io.reactivex.Observable;
@@ -41,6 +42,11 @@ import io.reactivex.Observable;
*/
public class CodeEditor extends HVScrollView {
+ public static class CheckedPatternSyntaxException extends Exception {
+ public CheckedPatternSyntaxException(PatternSyntaxException cause) {
+ super(cause);
+ }
+ }
public interface CursorChangeCallback {
@@ -222,9 +228,13 @@ public class CodeEditor extends HVScrollView {
mTextViewRedoUndo.redo();
}
- public void find(String keywords, boolean usingRegex) {
+ public void find(String keywords, boolean usingRegex) throws CheckedPatternSyntaxException {
if (usingRegex) {
- mMatcher = Pattern.compile(keywords).matcher(mCodeEditText.getText());
+ try {
+ mMatcher = Pattern.compile(keywords).matcher(mCodeEditText.getText());
+ }catch (PatternSyntaxException e){
+ throw new CheckedPatternSyntaxException(e);
+ }
mKeywords = null;
} else {
mKeywords = keywords;
@@ -233,17 +243,21 @@ public class CodeEditor extends HVScrollView {
findNext();
}
- public void replace(String keywords, String replacement, boolean usingRegex) {
+ public void replace(String keywords, String replacement, boolean usingRegex) throws CheckedPatternSyntaxException {
mReplacement = replacement == null ? "" : replacement;
find(keywords, usingRegex);
}
- public void replaceAll(String keywords, String replacement, boolean usingRegex) {
+ public void replaceAll(String keywords, String replacement, boolean usingRegex) throws CheckedPatternSyntaxException {
if (!usingRegex) {
keywords = Pattern.quote(keywords);
}
String text = mCodeEditText.getText().toString();
- text = text.replaceAll(keywords, replacement);
+ try {
+ text = text.replaceAll(keywords, replacement);
+ }catch (PatternSyntaxException e){
+ throw new CheckedPatternSyntaxException(e);
+ }
setText(text);
}
diff --git a/app/src/main/java/org/autojs/autojs/ui/shortcut/ShortcutCreateActivity.java b/app/src/main/java/org/autojs/autojs/ui/shortcut/ShortcutCreateActivity.java
index 54368f49..67716426 100644
--- a/app/src/main/java/org/autojs/autojs/ui/shortcut/ShortcutCreateActivity.java
+++ b/app/src/main/java/org/autojs/autojs/ui/shortcut/ShortcutCreateActivity.java
@@ -6,6 +6,7 @@ import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Icon;
+import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.PersistableBundle;
@@ -131,6 +132,7 @@ public class ShortcutCreateActivity extends AppCompatActivity {
}
+ @SuppressLint("CheckResult")
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != RESULT_OK) {
@@ -146,7 +148,11 @@ public class ShortcutCreateActivity extends AppCompatActivity {
}
return;
}
- Observable.fromCallable(() -> BitmapFactory.decodeStream(getContentResolver().openInputStream(data.getData())))
+ Uri uri = data.getData();
+ if(uri == null){
+ return;
+ }
+ Observable.fromCallable(() -> BitmapFactory.decodeStream(getContentResolver().openInputStream(uri)))
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe((bitmap -> {
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ec195a39..0b17927a 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -421,4 +421,5 @@
耳机插拔时
每分钟一次
某些设置(屏幕方向,地区等)更改时
+ 正则表达式错误