feat(ui): reset sample

This commit is contained in:
hyb1996
2018-10-12 20:43:57 +08:00
parent d80d871a8d
commit 8a7966ba3c
14 changed files with 91 additions and 44 deletions

View File

@@ -7,7 +7,7 @@ import android.widget.Toast;
import org.autojs.autojs.R; import org.autojs.autojs.R;
import org.autojs.autojs.timing.TaskReceiver; 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.BaseActivity;
import org.autojs.autojs.ui.edit.EditorView; import org.autojs.autojs.ui.edit.EditorView;
@@ -16,8 +16,6 @@ import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.ViewById; import org.androidannotations.annotations.ViewById;
import io.reactivex.android.schedulers.AndroidSchedulers; 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_CONTENT;
import static org.autojs.autojs.ui.edit.EditorView.EXTRA_NAME; 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_RUN_ENABLED, false)
.putExtra(EXTRA_SAVE_ENABLED, false)) .putExtra(EXTRA_SAVE_ENABLED, false))
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.subscribe(EmptyObservers.consumer(), .subscribe(Observers.consumer(),
ex -> { ex -> {
Toast.makeText(TaskerScriptEditActivity.this, ex.getMessage(), Toast.LENGTH_LONG).show(); Toast.makeText(TaskerScriptEditActivity.this, ex.getMessage(), Toast.LENGTH_LONG).show();
finish(); finish();

View File

@@ -7,7 +7,7 @@ import org.greenrobot.eventbus.EventBus;
public class Explorers { 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); private static Explorer sExternalExplorer = new Explorer(new ExplorerFileProvider(), 10);
@@ -18,4 +18,12 @@ public class Explorers {
public static Explorer external() { public static Explorer external() {
return sExternalExplorer; return sExternalExplorer;
} }
public static class Providers {
private static WorkspaceFileProvider sWorkspaceFileProvider = new WorkspaceFileProvider(GlobalAppContext.get(), null);
public static WorkspaceFileProvider workspace() {
return sWorkspaceFileProvider;
}
}
} }

View File

@@ -8,7 +8,7 @@ import com.stardust.pio.PFile;
import com.stardust.pio.PFiles; import com.stardust.pio.PFiles;
import org.autojs.autojs.Pref; 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.File;
import java.io.FileFilter; import java.io.FileFilter;
@@ -16,6 +16,7 @@ import java.io.FileNotFoundException;
import java.io.InputStream; import java.io.InputStream;
import io.reactivex.Observable; import io.reactivex.Observable;
import io.reactivex.Scheduler;
import io.reactivex.Single; import io.reactivex.Single;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
@@ -99,8 +100,18 @@ public class WorkspaceFileProvider extends ExplorerFileProvider {
}); });
} }
public static void resetSample(SampleFile sampleFile){ public Observable<ScriptFile> 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 @Override

View File

@@ -8,7 +8,7 @@ import android.text.TextUtils;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken; 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.IOException;
import java.io.InputStreamReader; import java.io.InputStreamReader;
@@ -101,7 +101,7 @@ public class AndroidClassIndices {
.doOnNext(this::load) .doOnNext(this::load)
.subscribeOn(Schedulers.from(mSingleThreadExecutor)) .subscribeOn(Schedulers.from(mSingleThreadExecutor))
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.subscribe(EmptyObservers.consumer(), t -> { .subscribe(Observers.consumer(), t -> {
mLoadThrowable = t; mLoadThrowable = t;
t.printStackTrace(); t.printStackTrace();
}); });

View File

@@ -11,7 +11,7 @@ import org.autojs.autojs.App;
import org.autojs.autojs.storage.database.IntentTaskDatabase; import org.autojs.autojs.storage.database.IntentTaskDatabase;
import org.autojs.autojs.storage.database.ModelChange; import org.autojs.autojs.storage.database.ModelChange;
import org.autojs.autojs.storage.database.TimedTaskDatabase; import org.autojs.autojs.storage.database.TimedTaskDatabase;
import org.autojs.autojs.tool.EmptyObservers; import org.autojs.autojs.tool.Observers;
import java.util.List; import java.util.List;
@@ -58,11 +58,11 @@ public class TimedTaskManager {
return; return;
if (task.isDisposable()) { if (task.isDisposable()) {
mTimedTaskDatabase.delete(task) mTimedTaskDatabase.delete(task)
.subscribe(EmptyObservers.consumer(), Throwable::printStackTrace); .subscribe(Observers.consumer(), Throwable::printStackTrace);
} else { } else {
task.setScheduled(false); task.setScheduled(false);
mTimedTaskDatabase.update(task) 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) { public void removeTask(TimedTask timedTask) {
TimedTaskScheduler.cancel(mContext, timedTask); TimedTaskScheduler.cancel(mContext, timedTask);
mTimedTaskDatabase.delete(timedTask) mTimedTaskDatabase.delete(timedTask)
.subscribe(EmptyObservers.consumer(), Throwable::printStackTrace); .subscribe(Observers.consumer(), Throwable::printStackTrace);
} }
@SuppressLint("CheckResult") @SuppressLint("CheckResult")
public void addTask(TimedTask timedTask) { public void addTask(TimedTask timedTask) {
mTimedTaskDatabase.insert(timedTask) mTimedTaskDatabase.insert(timedTask)
.subscribe(EmptyObservers.consumer(), Throwable::printStackTrace);; .subscribe(Observers.consumer(), Throwable::printStackTrace);;
TimedTaskScheduler.scheduleTaskIfNeeded(mContext, timedTask); TimedTaskScheduler.scheduleTaskIfNeeded(mContext, timedTask);
} }
@@ -119,7 +119,7 @@ public class TimedTaskManager {
public void notifyTaskScheduled(TimedTask timedTask) { public void notifyTaskScheduled(TimedTask timedTask) {
timedTask.setScheduled(true); timedTask.setScheduled(true);
mTimedTaskDatabase.update(timedTask) mTimedTaskDatabase.update(timedTask)
.subscribe(EmptyObservers.consumer(), Throwable::printStackTrace); .subscribe(Observers.consumer(), Throwable::printStackTrace);
} }
@@ -134,7 +134,7 @@ public class TimedTaskManager {
@SuppressLint("CheckResult") @SuppressLint("CheckResult")
public void updateTask(TimedTask task) { public void updateTask(TimedTask task) {
mTimedTaskDatabase.update(task) mTimedTaskDatabase.update(task)
.subscribe(EmptyObservers.consumer(), Throwable::printStackTrace); .subscribe(Observers.consumer(), Throwable::printStackTrace);
TimedTaskScheduler.cancel(mContext, task); TimedTaskScheduler.cancel(mContext, task);
TimedTaskScheduler.scheduleTaskIfNeeded(mContext, task); TimedTaskScheduler.scheduleTaskIfNeeded(mContext, task);
} }

View File

@@ -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 <T> Consumer<T> consumer() {
return CONSUMER;
}
}

View File

@@ -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<Throwable> TOAST_MESSAGE = e -> {
e.printStackTrace();
GlobalAppContext.toast(e.getMessage());
};
@SuppressWarnings("unchecked")
public static <T> Consumer<T> consumer() {
return CONSUMER;
}
public static Consumer<Throwable> toastMessage() {
return TOAST_MESSAGE;
}
}

View File

@@ -10,7 +10,6 @@ import android.util.Log;
import android.view.ActionMode; import android.view.ActionMode;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.widget.Toast;
import com.stardust.app.OnActivityResultDelegate; import com.stardust.app.OnActivityResultDelegate;
import com.stardust.autojs.core.permission.OnRequestPermissionsResultCallback; 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.R;
import org.autojs.autojs.storage.file.TmpScriptFiles; 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.ui.BaseActivity;
import org.autojs.autojs.theme.dialog.ThemeColorMaterialDialogBuilder; import org.autojs.autojs.theme.dialog.ThemeColorMaterialDialogBuilder;
@@ -82,7 +81,7 @@ EditActivity extends BaseActivity implements OnActivityResultDelegate.DelegateHo
void setUpViews() { void setUpViews() {
mEditorView.handleIntent(getIntent()) mEditorView.handleIntent(getIntent())
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.subscribe(EmptyObservers.consumer(), .subscribe(Observers.consumer(),
ex -> onLoadFileError(ex.getMessage())); ex -> onLoadFileError(ex.getMessage()));
mEditorMenu = new EditorMenu(mEditorView); mEditorMenu = new EditorMenu(mEditorView);
setUpToolbar(); setUpToolbar();

View File

@@ -22,6 +22,7 @@ import android.view.Gravity;
import android.view.View; import android.view.View;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.Toast;
import com.afollestad.materialdialogs.MaterialDialog; import com.afollestad.materialdialogs.MaterialDialog;
import com.stardust.autojs.engine.JavaScriptEngine; 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.Module;
import org.autojs.autojs.model.indices.Property; import org.autojs.autojs.model.indices.Property;
import org.autojs.autojs.model.script.Scripts; 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.doc.ManualDialog;
import org.autojs.autojs.ui.edit.completion.CodeCompletionBar; import org.autojs.autojs.ui.edit.completion.CodeCompletionBar;
import org.autojs.autojs.ui.edit.debug.DebugBar; import org.autojs.autojs.ui.edit.debug.DebugBar;
@@ -384,7 +386,7 @@ public class EditorView extends FrameLayout implements CodeCompletionBar.OnHintC
@SuppressLint("CheckResult") @SuppressLint("CheckResult")
public void runAndSaveFileIfNeeded() { public void runAndSaveFileIfNeeded() {
save().observeOn(AndroidSchedulers.mainThread()) save().observeOn(AndroidSchedulers.mainThread())
.subscribe(s -> run(true)); .subscribe(s -> run(true), Observers.toastMessage());
} }
public ScriptExecution run(boolean showMessage) { public ScriptExecution run(boolean showMessage) {
@@ -434,8 +436,14 @@ public class EditorView extends FrameLayout implements CodeCompletionBar.OnHintC
} }
} }
@SuppressLint("CheckResult")
public void saveFile() { 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() { void findNext() {

View File

@@ -4,6 +4,7 @@ import android.annotation.SuppressLint;
import android.content.Context; import android.content.Context;
import android.graphics.drawable.GradientDrawable; import android.graphics.drawable.GradientDrawable;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
import android.support.v4.widget.SwipeRefreshLayout; import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager; 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.sample.SampleFile;
import org.autojs.autojs.model.script.ScriptFile; import org.autojs.autojs.model.script.ScriptFile;
import org.autojs.autojs.model.script.Scripts; 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.project.BuildActivity_; import org.autojs.autojs.ui.project.BuildActivity_;
import org.autojs.autojs.ui.common.ScriptLoopDialog; import org.autojs.autojs.ui.common.ScriptLoopDialog;
@@ -313,7 +315,12 @@ public class ExplorerView extends ThemeColorSwipeRefreshLayout implements SwipeR
sort(ExplorerItemList.SORT_TYPE_SIZE, mDirSortMenuShowing); sort(ExplorerItemList.SORT_TYPE_SIZE, mDirSortMenuShowing);
break; break;
case R.id.reset: 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: default:
return false; return false;
} }
@@ -496,8 +503,8 @@ public class ExplorerView extends ThemeColorSwipeRefreshLayout implements SwipeR
if (!mExplorerItem.canRename()) { if (!mExplorerItem.canRename()) {
menu.removeItem(R.id.rename); menu.removeItem(R.id.rename);
} }
if (mExplorerItem instanceof ExplorerSampleItem) { if (!(mExplorerItem instanceof ExplorerSampleItem)) {
menu.removeItem(R.id.reset);
} }
popupMenu.setOnMenuItemClickListener(ExplorerView.this); popupMenu.setOnMenuItemClickListener(ExplorerView.this);
popupMenu.show(); popupMenu.show();

View File

@@ -134,7 +134,7 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
} }
private void checkPermissions() { private void checkPermissions() {
checkPermission(Manifest.permission.READ_EXTERNAL_STORAGE); checkPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE);
} }
private void showAccessibilitySettingPromptIfDisabled() { private void showAccessibilitySettingPromptIfDisabled() {

View File

@@ -26,7 +26,7 @@ import org.autojs.autojs.R;
import org.autojs.autojs.external.foreground.ForegroundService; import org.autojs.autojs.external.foreground.ForegroundService;
import org.autojs.autojs.network.GlideApp; import org.autojs.autojs.network.GlideApp;
import org.autojs.autojs.network.UserService; 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.common.NotAskAgainDialog;
import org.autojs.autojs.ui.floating.CircularMenu; import org.autojs.autojs.ui.floating.CircularMenu;
import org.autojs.autojs.ui.floating.FloatyWindowManger; import org.autojs.autojs.ui.floating.FloatyWindowManger;
@@ -279,7 +279,7 @@ public class DrawerFragment extends android.support.v4.app.Fragment {
.input("", host, (dialog, input) -> { .input("", host, (dialog, input) -> {
Pref.saveServerAddress(input.toString()); Pref.saveServerAddress(input.toString());
DevPluginService.getInstance().connectToServer(input.toString()) DevPluginService.getInstance().connectToServer(input.toString())
.subscribe(EmptyObservers.consumer(), this::onConnectException); .subscribe(Observers.consumer(), this::onConnectException);
}) })
.neutralText(R.string.text_help) .neutralText(R.string.text_help)
.onNeutral((dialog, which) -> { .onNeutral((dialog, which) -> {

View File

@@ -17,7 +17,9 @@
android:id="@+id/send" android:id="@+id/send"
android:title="@string/text_send"/> android:title="@string/text_send"/>
<item
android:id="@+id/reset"
android:title="@string/text_reset_to_initial_content"/>
<item <item
android:id="@+id/more" android:id="@+id/more"
android:title="@string/text_more"> android:title="@string/text_more">

View File

@@ -41,4 +41,6 @@ public class Gravities {
return gravity; return gravity;
} }
} }