diff --git a/app/src/main/java/org/autojs/autojs/external/tasker/TaskerScriptEditActivity.java b/app/src/main/java/org/autojs/autojs/external/tasker/TaskerScriptEditActivity.java index d74ebdd4..0b5afb01 100644 --- a/app/src/main/java/org/autojs/autojs/external/tasker/TaskerScriptEditActivity.java +++ b/app/src/main/java/org/autojs/autojs/external/tasker/TaskerScriptEditActivity.java @@ -1,9 +1,12 @@ package org.autojs.autojs.external.tasker; +import android.annotation.SuppressLint; import android.app.Activity; import android.content.Intent; +import android.widget.Toast; import org.autojs.autojs.R; +import org.autojs.autojs.tool.EmptyObservers; import org.autojs.autojs.ui.BaseActivity; import org.autojs.autojs.ui.edit.EditorView; @@ -11,6 +14,7 @@ import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.EActivity; import org.androidannotations.annotations.ViewById; +import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.annotations.NonNull; import io.reactivex.functions.Consumer; @@ -37,11 +41,18 @@ public class TaskerScriptEditActivity extends BaseActivity { @ViewById(R.id.editor_view) EditorView mEditorView; + @SuppressLint("CheckResult") @AfterViews void setUpViews() { mEditorView.handleIntent(getIntent() .putExtra(EXTRA_RUN_ENABLED, false) - .putExtra(EXTRA_SAVE_ENABLED, false)); + .putExtra(EXTRA_SAVE_ENABLED, false)) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(EmptyObservers.consumer(), + ex -> { + Toast.makeText(TaskerScriptEditActivity.this, ex.getMessage(), Toast.LENGTH_LONG).show(); + finish(); + }); BaseActivity.setToolbarAsBack(this, R.id.toolbar, mEditorView.getName()); } diff --git a/app/src/main/java/org/autojs/autojs/ui/common/ScriptOperations.java b/app/src/main/java/org/autojs/autojs/ui/common/ScriptOperations.java index 79d9b31b..1e8a1c9a 100644 --- a/app/src/main/java/org/autojs/autojs/ui/common/ScriptOperations.java +++ b/app/src/main/java/org/autojs/autojs/ui/common/ScriptOperations.java @@ -226,12 +226,7 @@ public class ScriptOperations { @SuppressLint("CheckResult") public void delete(final ScriptFile scriptFile) { - Observable.fromPublisher(new Publisher() { - @Override - public void subscribe(Subscriber s) { - s.onNext(PFiles.deleteRecursively(scriptFile)); - } - }).subscribeOn(Schedulers.io()) + Observable.fromPublisher((Publisher) s -> s.onNext(PFiles.deleteRecursively(scriptFile))).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(deleted -> { showMessage(deleted ? R.string.text_already_delete : R.string.text_delete_failed); diff --git a/app/src/main/java/org/autojs/autojs/ui/edit/EditActivity.java b/app/src/main/java/org/autojs/autojs/ui/edit/EditActivity.java index e751d2ab..f6e59b16 100644 --- a/app/src/main/java/org/autojs/autojs/ui/edit/EditActivity.java +++ b/app/src/main/java/org/autojs/autojs/ui/edit/EditActivity.java @@ -1,5 +1,6 @@ package org.autojs.autojs.ui.edit; +import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; import android.os.Bundle; @@ -7,6 +8,7 @@ import android.support.annotation.NonNull; import android.view.ActionMode; import android.view.Menu; import android.view.MenuItem; +import android.widget.Toast; import com.stardust.app.OnActivityResultDelegate; import com.stardust.autojs.core.permission.OnRequestPermissionsResultCallback; @@ -17,6 +19,7 @@ import com.stardust.pio.PFiles; import org.autojs.autojs.R; import org.autojs.autojs.storage.file.TmpScriptFiles; +import org.autojs.autojs.tool.EmptyObservers; import org.autojs.autojs.ui.BaseActivity; import org.autojs.autojs.theme.dialog.ThemeColorMaterialDialogBuilder; @@ -70,13 +73,27 @@ public class EditActivity extends BaseActivity implements OnActivityResultDelega .putExtra(EXTRA_READ_ONLY, true)); } + @SuppressLint("CheckResult") @AfterViews void setUpViews() { - mEditorView.handleIntent(getIntent()); + mEditorView.handleIntent(getIntent()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(EmptyObservers.consumer(), + ex -> onLoadFileError(ex.getMessage())); mEditorMenu = new EditorMenu(mEditorView); setUpToolbar(); } + private void onLoadFileError(String message) { + new ThemeColorMaterialDialogBuilder(this) + .title(getString(R.string.text_cannot_read_file)) + .content(message) + .positiveText(R.string.text_exit) + .cancelable(false) + .onPositive((dialog, which) -> finish()) + .show(); + } + private void setUpToolbar() { BaseActivity.setToolbarAsBack(this, R.id.toolbar, mEditorView.getName()); } 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 04726f8a..289a6dde 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 @@ -22,13 +22,11 @@ import android.view.Gravity; import android.view.View; import android.widget.FrameLayout; import android.widget.ImageView; -import android.widget.Toast; import com.afollestad.materialdialogs.MaterialDialog; import com.stardust.autojs.engine.JavaScriptEngine; import com.stardust.autojs.engine.ScriptEngine; import com.stardust.autojs.execution.ScriptExecution; -import com.stardust.autojs.rhino.debug.Debugger; import com.stardust.pio.PFiles; import com.stardust.util.BackPressedHandler; import com.stardust.util.Callback; @@ -183,21 +181,23 @@ public class EditorView extends FrameLayout implements CodeCompletionBar.OnHintC return mFile; } - public void handleIntent(Intent intent) { + public Observable handleIntent(Intent intent) { mName = intent.getStringExtra(EXTRA_NAME); - handleText(intent); - mReadOnly = intent.getBooleanExtra(EXTRA_READ_ONLY, false); - boolean saveEnabled = intent.getBooleanExtra(EXTRA_SAVE_ENABLED, true); - if (mReadOnly || !saveEnabled) { - findViewById(R.id.save).setVisibility(View.GONE); - } - if (!intent.getBooleanExtra(EXTRA_RUN_ENABLED, true)) { - findViewById(R.id.run).setVisibility(GONE); - } - if (mReadOnly) { - mEditor.setReadOnly(true); - } - + return handleText(intent) + .observeOn(AndroidSchedulers.mainThread()) + .doOnNext(str -> { + mReadOnly = intent.getBooleanExtra(EXTRA_READ_ONLY, false); + boolean saveEnabled = intent.getBooleanExtra(EXTRA_SAVE_ENABLED, true); + if (mReadOnly || !saveEnabled) { + findViewById(R.id.save).setVisibility(View.GONE); + } + if (!intent.getBooleanExtra(EXTRA_RUN_ENABLED, true)) { + findViewById(R.id.run).setVisibility(GONE); + } + if (mReadOnly) { + mEditor.setReadOnly(true); + } + }); } public void setRestoredText(String text) { @@ -205,37 +205,34 @@ public class EditorView extends FrameLayout implements CodeCompletionBar.OnHintC mEditor.setText(text); } - private void handleText(Intent intent) { + private Observable handleText(Intent intent) { String path = intent.getStringExtra(EXTRA_PATH); String content = intent.getStringExtra(EXTRA_CONTENT); if (content != null) { setInitialText(content); + return Observable.just(content); } else { if (path == null) { - return; + return Observable.error(new IllegalArgumentException("path and content is empty")); } mFile = new File(path); if (mName == null) { mName = mFile.getName(); } - loadFile(mFile); + return loadFile(mFile); } } @SuppressLint("CheckResult") - private void loadFile(final File file) { + private Observable loadFile(final File file) { mEditor.setProgress(true); - Observable.fromCallable(() -> PFiles.read(file)) + return Observable.fromCallable(() -> PFiles.read(file)) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(s -> { + .doOnNext(s -> { setInitialText(s); mEditor.setProgress(false); - }, err -> { - err.printStackTrace(); - Toast.makeText(getContext(), getContext().getString(R.string.text_cannot_read_file, file.getPath()), - Toast.LENGTH_SHORT).show(); }); } diff --git a/app/src/main/java/org/autojs/autojs/ui/main/scripts/ScriptListView.java b/app/src/main/java/org/autojs/autojs/ui/main/scripts/ScriptListView.java index 3d1bba9d..ca0850cc 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/scripts/ScriptListView.java +++ b/app/src/main/java/org/autojs/autojs/ui/main/scripts/ScriptListView.java @@ -218,12 +218,12 @@ public class ScriptListView extends ThemeColorSwipeRefreshLayout implements Swip public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { case R.id.rename: - new ScriptOperations(getContext(), this) + new ScriptOperations(getContext(), this, getCurrentDirectory()) .rename(mSelectedScriptFile) .subscribe(); break; case R.id.delete: - new ScriptOperations(getContext(), this) + new ScriptOperations(getContext(), this, getCurrentDirectory()) .delete(mSelectedScriptFile); break; case R.id.run_repeatedly: @@ -232,7 +232,7 @@ public class ScriptListView extends ThemeColorSwipeRefreshLayout implements Swip notifyOperated(); break; case R.id.create_shortcut: - new ScriptOperations(getContext(), this) + new ScriptOperations(getContext(), this, getCurrentDirectory()) .createShortcut(mSelectedScriptFile); break; case R.id.open_by_other_apps: @@ -244,7 +244,7 @@ public class ScriptListView extends ThemeColorSwipeRefreshLayout implements Swip notifyOperated(); break; case R.id.timed_task: - new ScriptOperations(getContext(), this) + new ScriptOperations(getContext(), this, getCurrentDirectory()) .timedTask(mSelectedScriptFile); notifyOperated(); break; diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 19ecd8bf..42346bcc 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -271,7 +271,7 @@ 重置为初始内容 重置失败 重置成功 - 无法读取文件: %s + 无法读取文件 服务 通知权限