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.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();

View File

@ -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;
}
}
}

View File

@ -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<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

View File

@ -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();
});

View File

@ -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);
}

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.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();

View File

@ -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() {

View File

@ -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();

View File

@ -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() {

View File

@ -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) -> {

View File

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

View File

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