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 345d9ea8..4f4df88e 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 @@ -7,7 +7,7 @@ import android.widget.Toast; import org.autojs.autojs.R; import org.autojs.autojs.timing.TaskReceiver; -import org.autojs.autojs.tool.EmptyObservers; +import org.autojs.autojs.tool.Observers; import org.autojs.autojs.ui.BaseActivity; import org.autojs.autojs.ui.edit.EditorView; @@ -16,8 +16,6 @@ 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; import static org.autojs.autojs.ui.edit.EditorView.EXTRA_CONTENT; import static org.autojs.autojs.ui.edit.EditorView.EXTRA_NAME; @@ -50,7 +48,7 @@ public class TaskerScriptEditActivity extends BaseActivity { .putExtra(EXTRA_RUN_ENABLED, false) .putExtra(EXTRA_SAVE_ENABLED, false)) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(EmptyObservers.consumer(), + .subscribe(Observers.consumer(), ex -> { Toast.makeText(TaskerScriptEditActivity.this, ex.getMessage(), Toast.LENGTH_LONG).show(); finish(); diff --git a/app/src/main/java/org/autojs/autojs/model/explorer/Explorers.java b/app/src/main/java/org/autojs/autojs/model/explorer/Explorers.java index b3dd18dd..e149d8ef 100644 --- a/app/src/main/java/org/autojs/autojs/model/explorer/Explorers.java +++ b/app/src/main/java/org/autojs/autojs/model/explorer/Explorers.java @@ -7,7 +7,7 @@ import org.greenrobot.eventbus.EventBus; public class Explorers { - private static Explorer sWorkspaceExplorer = new Explorer(new WorkspaceFileProvider(GlobalAppContext.get(), null), 20); + private static Explorer sWorkspaceExplorer = new Explorer(Providers.workspace(), 20); private static Explorer sExternalExplorer = new Explorer(new ExplorerFileProvider(), 10); @@ -18,4 +18,12 @@ public class Explorers { public static Explorer external() { return sExternalExplorer; } + + public static class Providers { + private static WorkspaceFileProvider sWorkspaceFileProvider = new WorkspaceFileProvider(GlobalAppContext.get(), null); + + public static WorkspaceFileProvider workspace() { + return sWorkspaceFileProvider; + } + } } diff --git a/app/src/main/java/org/autojs/autojs/model/explorer/WorkspaceFileProvider.java b/app/src/main/java/org/autojs/autojs/model/explorer/WorkspaceFileProvider.java index e9a147d2..fe0398ea 100644 --- a/app/src/main/java/org/autojs/autojs/model/explorer/WorkspaceFileProvider.java +++ b/app/src/main/java/org/autojs/autojs/model/explorer/WorkspaceFileProvider.java @@ -8,7 +8,7 @@ import com.stardust.pio.PFile; import com.stardust.pio.PFiles; import org.autojs.autojs.Pref; -import org.autojs.autojs.model.sample.SampleFile; +import org.autojs.autojs.model.script.ScriptFile; import java.io.File; import java.io.FileFilter; @@ -16,6 +16,7 @@ import java.io.FileNotFoundException; import java.io.InputStream; import io.reactivex.Observable; +import io.reactivex.Scheduler; import io.reactivex.Single; import io.reactivex.schedulers.Schedulers; @@ -99,8 +100,18 @@ public class WorkspaceFileProvider extends ExplorerFileProvider { }); } - public static void resetSample(SampleFile sampleFile){ - + public Observable resetSample(ScriptFile file) { + if (file.getPath().length() <= mSampleDir.getPath().length() + 1) { + return null; + } + String pathOfSample = file.getPath().substring(mSampleDir.getPath().length()); + String pathOfAsset = SAMPLE_PATH + pathOfSample; + return Observable.fromCallable(() -> { + InputStream stream = mAssetManager.open(pathOfAsset); + PFiles.copyStream(stream, file.getPath()); + return file; + }) + .subscribeOn(Schedulers.io()); } @Override diff --git a/app/src/main/java/org/autojs/autojs/model/indices/AndroidClassIndices.java b/app/src/main/java/org/autojs/autojs/model/indices/AndroidClassIndices.java index acca9a9b..ddec3833 100644 --- a/app/src/main/java/org/autojs/autojs/model/indices/AndroidClassIndices.java +++ b/app/src/main/java/org/autojs/autojs/model/indices/AndroidClassIndices.java @@ -8,7 +8,7 @@ import android.text.TextUtils; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; -import org.autojs.autojs.tool.EmptyObservers; +import org.autojs.autojs.tool.Observers; import java.io.IOException; import java.io.InputStreamReader; @@ -101,7 +101,7 @@ public class AndroidClassIndices { .doOnNext(this::load) .subscribeOn(Schedulers.from(mSingleThreadExecutor)) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(EmptyObservers.consumer(), t -> { + .subscribe(Observers.consumer(), t -> { mLoadThrowable = t; t.printStackTrace(); }); diff --git a/app/src/main/java/org/autojs/autojs/timing/TimedTaskManager.java b/app/src/main/java/org/autojs/autojs/timing/TimedTaskManager.java index b0bcd9a2..9523d787 100644 --- a/app/src/main/java/org/autojs/autojs/timing/TimedTaskManager.java +++ b/app/src/main/java/org/autojs/autojs/timing/TimedTaskManager.java @@ -11,7 +11,7 @@ import org.autojs.autojs.App; import org.autojs.autojs.storage.database.IntentTaskDatabase; import org.autojs.autojs.storage.database.ModelChange; import org.autojs.autojs.storage.database.TimedTaskDatabase; -import org.autojs.autojs.tool.EmptyObservers; +import org.autojs.autojs.tool.Observers; import java.util.List; @@ -58,11 +58,11 @@ public class TimedTaskManager { return; if (task.isDisposable()) { mTimedTaskDatabase.delete(task) - .subscribe(EmptyObservers.consumer(), Throwable::printStackTrace); + .subscribe(Observers.consumer(), Throwable::printStackTrace); } else { task.setScheduled(false); mTimedTaskDatabase.update(task) - .subscribe(EmptyObservers.consumer(), Throwable::printStackTrace); + .subscribe(Observers.consumer(), Throwable::printStackTrace); } } @@ -70,13 +70,13 @@ public class TimedTaskManager { public void removeTask(TimedTask timedTask) { TimedTaskScheduler.cancel(mContext, timedTask); mTimedTaskDatabase.delete(timedTask) - .subscribe(EmptyObservers.consumer(), Throwable::printStackTrace); + .subscribe(Observers.consumer(), Throwable::printStackTrace); } @SuppressLint("CheckResult") public void addTask(TimedTask timedTask) { mTimedTaskDatabase.insert(timedTask) - .subscribe(EmptyObservers.consumer(), Throwable::printStackTrace);; + .subscribe(Observers.consumer(), Throwable::printStackTrace);; TimedTaskScheduler.scheduleTaskIfNeeded(mContext, timedTask); } @@ -119,7 +119,7 @@ public class TimedTaskManager { public void notifyTaskScheduled(TimedTask timedTask) { timedTask.setScheduled(true); mTimedTaskDatabase.update(timedTask) - .subscribe(EmptyObservers.consumer(), Throwable::printStackTrace); + .subscribe(Observers.consumer(), Throwable::printStackTrace); } @@ -134,7 +134,7 @@ public class TimedTaskManager { @SuppressLint("CheckResult") public void updateTask(TimedTask task) { mTimedTaskDatabase.update(task) - .subscribe(EmptyObservers.consumer(), Throwable::printStackTrace); + .subscribe(Observers.consumer(), Throwable::printStackTrace); TimedTaskScheduler.cancel(mContext, task); TimedTaskScheduler.scheduleTaskIfNeeded(mContext, task); } diff --git a/app/src/main/java/org/autojs/autojs/tool/EmptyObservers.java b/app/src/main/java/org/autojs/autojs/tool/EmptyObservers.java deleted file mode 100644 index 789f1bbc..00000000 --- a/app/src/main/java/org/autojs/autojs/tool/EmptyObservers.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.autojs.autojs.tool; - -import io.reactivex.functions.Consumer; - -public class EmptyObservers { - - private static final Consumer CONSUMER = ignored -> { - - }; - - @SuppressWarnings("unchecked") - public static Consumer consumer() { - return CONSUMER; - } -} diff --git a/app/src/main/java/org/autojs/autojs/tool/Observers.java b/app/src/main/java/org/autojs/autojs/tool/Observers.java new file mode 100644 index 00000000..63207729 --- /dev/null +++ b/app/src/main/java/org/autojs/autojs/tool/Observers.java @@ -0,0 +1,27 @@ +package org.autojs.autojs.tool; + +import com.stardust.app.GlobalAppContext; + +import io.reactivex.functions.Consumer; + +public class Observers { + + private static final Consumer CONSUMER = ignored -> { + + }; + + private static final Consumer TOAST_MESSAGE = e -> { + e.printStackTrace(); + GlobalAppContext.toast(e.getMessage()); + }; + + + @SuppressWarnings("unchecked") + public static Consumer consumer() { + return CONSUMER; + } + + public static Consumer toastMessage() { + return TOAST_MESSAGE; + } +} 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 2063ab26..aaeea590 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 @@ -10,7 +10,6 @@ import android.util.Log; 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; @@ -21,7 +20,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.tool.Observers; import org.autojs.autojs.ui.BaseActivity; import org.autojs.autojs.theme.dialog.ThemeColorMaterialDialogBuilder; @@ -82,7 +81,7 @@ EditActivity extends BaseActivity implements OnActivityResultDelegate.DelegateHo void setUpViews() { mEditorView.handleIntent(getIntent()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(EmptyObservers.consumer(), + .subscribe(Observers.consumer(), ex -> onLoadFileError(ex.getMessage())); mEditorMenu = new EditorMenu(mEditorView); setUpToolbar(); 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 96f9b73d..3285c02e 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,6 +22,7 @@ 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; @@ -45,6 +46,7 @@ import org.autojs.autojs.model.autocomplete.Symbols; import org.autojs.autojs.model.indices.Module; import org.autojs.autojs.model.indices.Property; import org.autojs.autojs.model.script.Scripts; +import org.autojs.autojs.tool.Observers; import org.autojs.autojs.ui.doc.ManualDialog; import org.autojs.autojs.ui.edit.completion.CodeCompletionBar; import org.autojs.autojs.ui.edit.debug.DebugBar; @@ -384,7 +386,7 @@ public class EditorView extends FrameLayout implements CodeCompletionBar.OnHintC @SuppressLint("CheckResult") public void runAndSaveFileIfNeeded() { save().observeOn(AndroidSchedulers.mainThread()) - .subscribe(s -> run(true)); + .subscribe(s -> run(true), Observers.toastMessage()); } public ScriptExecution run(boolean showMessage) { @@ -434,8 +436,14 @@ public class EditorView extends FrameLayout implements CodeCompletionBar.OnHintC } } + @SuppressLint("CheckResult") public void saveFile() { - save().subscribe(); + save() + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(Observers.consumer(), e -> { + e.printStackTrace(); + Toast.makeText(getContext(), e.getMessage(), Toast.LENGTH_SHORT).show(); + }); } void findNext() { diff --git a/app/src/main/java/org/autojs/autojs/ui/explorer/ExplorerView.java b/app/src/main/java/org/autojs/autojs/ui/explorer/ExplorerView.java index 900fefa6..9059a87e 100644 --- a/app/src/main/java/org/autojs/autojs/ui/explorer/ExplorerView.java +++ b/app/src/main/java/org/autojs/autojs/ui/explorer/ExplorerView.java @@ -4,6 +4,7 @@ import android.annotation.SuppressLint; import android.content.Context; import android.graphics.drawable.GradientDrawable; import android.support.annotation.Nullable; +import android.support.design.widget.Snackbar; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.LinearLayoutManager; @@ -34,6 +35,7 @@ import org.autojs.autojs.model.explorer.WorkspaceFileProvider; import org.autojs.autojs.model.sample.SampleFile; import org.autojs.autojs.model.script.ScriptFile; import org.autojs.autojs.model.script.Scripts; +import org.autojs.autojs.tool.Observers; import org.autojs.autojs.ui.project.BuildActivity; import org.autojs.autojs.ui.project.BuildActivity_; import org.autojs.autojs.ui.common.ScriptLoopDialog; @@ -313,7 +315,12 @@ public class ExplorerView extends ThemeColorSwipeRefreshLayout implements SwipeR sort(ExplorerItemList.SORT_TYPE_SIZE, mDirSortMenuShowing); break; case R.id.reset: - // WorkspaceFileProvider.resetSample(mSelectedItem.toScriptFile()); + Explorers.Providers.workspace().resetSample(mSelectedItem.toScriptFile()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(ignored -> { + Snackbar.make(this, R.string.text_reset_succeed, Snackbar.LENGTH_SHORT).show(); + }, Observers.toastMessage()); + break; default: return false; } @@ -496,8 +503,8 @@ public class ExplorerView extends ThemeColorSwipeRefreshLayout implements SwipeR if (!mExplorerItem.canRename()) { menu.removeItem(R.id.rename); } - if (mExplorerItem instanceof ExplorerSampleItem) { - + if (!(mExplorerItem instanceof ExplorerSampleItem)) { + menu.removeItem(R.id.reset); } popupMenu.setOnMenuItemClickListener(ExplorerView.this); popupMenu.show(); diff --git a/app/src/main/java/org/autojs/autojs/ui/main/MainActivity.java b/app/src/main/java/org/autojs/autojs/ui/main/MainActivity.java index 606485f7..e3313660 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/MainActivity.java +++ b/app/src/main/java/org/autojs/autojs/ui/main/MainActivity.java @@ -134,7 +134,7 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega } private void checkPermissions() { - checkPermission(Manifest.permission.READ_EXTERNAL_STORAGE); + checkPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE); } private void showAccessibilitySettingPromptIfDisabled() { diff --git a/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerFragment.java b/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerFragment.java index 49e176eb..902ad195 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerFragment.java +++ b/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerFragment.java @@ -26,7 +26,7 @@ import org.autojs.autojs.R; import org.autojs.autojs.external.foreground.ForegroundService; import org.autojs.autojs.network.GlideApp; import org.autojs.autojs.network.UserService; -import org.autojs.autojs.tool.EmptyObservers; +import org.autojs.autojs.tool.Observers; import org.autojs.autojs.ui.common.NotAskAgainDialog; import org.autojs.autojs.ui.floating.CircularMenu; import org.autojs.autojs.ui.floating.FloatyWindowManger; @@ -279,7 +279,7 @@ public class DrawerFragment extends android.support.v4.app.Fragment { .input("", host, (dialog, input) -> { Pref.saveServerAddress(input.toString()); DevPluginService.getInstance().connectToServer(input.toString()) - .subscribe(EmptyObservers.consumer(), this::onConnectException); + .subscribe(Observers.consumer(), this::onConnectException); }) .neutralText(R.string.text_help) .onNeutral((dialog, which) -> { diff --git a/app/src/main/res/menu/menu_script_options.xml b/app/src/main/res/menu/menu_script_options.xml index 5e229e46..2e31fe8f 100644 --- a/app/src/main/res/menu/menu_script_options.xml +++ b/app/src/main/res/menu/menu_script_options.xml @@ -17,7 +17,9 @@ android:id="@+id/send" android:title="@string/text_send"/> - + diff --git a/autojs/src/main/java/com/stardust/autojs/core/ui/inflater/util/Gravities.java b/autojs/src/main/java/com/stardust/autojs/core/ui/inflater/util/Gravities.java index a56711b5..2b7f74cc 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/ui/inflater/util/Gravities.java +++ b/autojs/src/main/java/com/stardust/autojs/core/ui/inflater/util/Gravities.java @@ -41,4 +41,6 @@ public class Gravities { return gravity; } + + }