Files
AutoJs6/app/src/main/java/com/stardust/scriptdroid/ui/ScriptFileOperation.java

173 lines
6.5 KiB
Java

package com.stardust.scriptdroid.ui;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.design.widget.Snackbar;
import com.afollestad.materialdialogs.MaterialDialog;
import com.stardust.scriptdroid.App;
import com.stardust.scriptdroid.EditActivity;
import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.ShortcutActivity;
import com.stardust.scriptdroid.droid.script.file.ScriptFile;
import com.stardust.scriptdroid.droid.script.file.ScriptFileList;
import com.stardust.scriptdroid.shortcut.Shortcut;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Stardust on 2017/1/23.
*/
public abstract class ScriptFileOperation {
private static List<String> operationNames = new ArrayList<>();
private static List<ScriptFileOperation> operations = new ArrayList<>();
public static ScriptFileOperation getOperation(int index) {
return operations.get(index);
}
public static List<String> getOperationNames() {
return operationNames;
}
public abstract void operate(ScriptListRecyclerView recyclerView, ScriptFileList scriptFileList, int position);
private static void addOperation(String name, int iconResId, ScriptFileOperation operation) {
operation.mName = name;
operation.mIconResId = iconResId;
operationNames.add(name);
operations.add(operation);
}
private String mName;
private int mIconResId;
public String getName() {
return mName;
}
public int getIconResId() {
return mIconResId;
}
public static class Run extends ScriptFileOperation {
static {
addOperation(App.getApp().getString(R.string.text_run), R.drawable.ic_play_green, new Run());
}
@Override
public void operate(ScriptListRecyclerView recyclerView, ScriptFileList scriptFileList, int position) {
Snackbar.make(recyclerView, R.string.text_start_running, Snackbar.LENGTH_SHORT).show();
ScriptFile scriptFile = scriptFileList.get(position);
scriptFile.run();
}
}
public static class Edit extends ScriptFileOperation {
static {
//addOperation(App.getApp().getString(R.string.text_edit)", R.drawable.ic_edit_green_48dp, new Edit());
}
@Override
public void operate(ScriptListRecyclerView recyclerView, ScriptFileList scriptFileList, int position) {
Context context = recyclerView.getContext();
ScriptFile scriptFile = scriptFileList.get(position);
EditActivity.editFile(context, scriptFile.name, scriptFile.path);
}
}
public static class OpenByOtherApp extends ScriptFileOperation {
static {
addOperation(App.getApp().getString(R.string.text_open_by_other_apps), R.drawable.ic_open_in_new_green_48dp, new OpenByOtherApp());
}
@Override
public void operate(ScriptListRecyclerView recyclerView, ScriptFileList scriptFileList, int position) {
Context context = recyclerView.getContext();
ScriptFile scriptFile = scriptFileList.get(position);
Uri uri = Uri.parse("file://" + scriptFile.path);
context.startActivity(new Intent(Intent.ACTION_VIEW).setDataAndType(uri, "text/plain"));
}
}
public static class Rename extends ScriptFileOperation {
static {
addOperation(App.getApp().getString(R.string.text_rename), R.drawable.ic_rename_green, new Rename());
}
@Override
public void operate(final ScriptListRecyclerView recyclerView, final ScriptFileList scriptFileList, final int position) {
String oldName = scriptFileList.get(position).name;
new MaterialDialog.Builder(recyclerView.getContext())
.title(R.string.text_rename)
.checkBoxPrompt(App.getApp().getString(R.string.text_rename_file_meanwhile), false, null)
.input(App.getApp().getString(R.string.text_please_input_new_name), oldName, new MaterialDialog.InputCallback() {
@Override
public void onInput(@NonNull MaterialDialog dialog, CharSequence input) {
scriptFileList.rename(position, input.toString(), dialog.isPromptCheckBoxChecked());
recyclerView.getAdapter().notifyItemChanged(position);
}
})
.show();
}
}
public static class CreateShortcut extends ScriptFileOperation {
static {
addOperation(App.getApp().getString(R.string.text_send_shortcut), R.drawable.ic_shortcut_green, new CreateShortcut());
}
@Override
public void operate(ScriptListRecyclerView recyclerView, ScriptFileList scriptFileList, int position) {
Context context = recyclerView.getContext();
ScriptFile scriptFile = scriptFileList.get(position);
new Shortcut(context).name(scriptFile.name)
.targetClass(ShortcutActivity.class)
.icon(R.drawable.script_droid)
.extras(new Intent().putExtra("path", scriptFile.path))
.send();
Snackbar.make(recyclerView, R.string.text_already_create, Snackbar.LENGTH_SHORT).show();
}
}
public static class Remove extends ScriptFileOperation {
static {
addOperation(App.getApp().getString(R.string.text_delete), R.drawable.ic_delete_green_48dp, new Remove());
}
@Override
public void operate(ScriptListRecyclerView recyclerView, ScriptFileList scriptFileList, int position) {
scriptFileList.remove(position);
recyclerView.getAdapter().notifyItemRemoved(position);
}
}
public static class Delete extends ScriptFileOperation {
static {
addOperation(App.getApp().getString(R.string.text_delete_absolutly), R.drawable.ic_delete_forever_green_48dp, new Delete());
}
@Override
public void operate(ScriptListRecyclerView recyclerView, ScriptFileList scriptFileList, int position) {
boolean succeed = scriptFileList.deleteFromFileSystem(position);
Snackbar.make(recyclerView, succeed ? R.string.text_already_delete : R.string.text_delete_failed, Snackbar.LENGTH_SHORT).show();
recyclerView.getAdapter().notifyItemRemoved(position);
}
}
}