Add: Task manager
This commit is contained in:
@@ -11,6 +11,7 @@ import android.view.ViewGroup;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
import android.workground.WrapContentLinearLayoutManager;
|
||||
|
||||
import com.afollestad.materialdialogs.MaterialDialog;
|
||||
import com.stardust.scriptdroid.scripts.ScriptFile;
|
||||
@@ -74,7 +75,7 @@ public class FloatingScriptFileListView extends RecyclerView {
|
||||
|
||||
private void init() {
|
||||
setAdapter(new Adapter());
|
||||
setLayoutManager(new LinearLayoutManager(getContext()));
|
||||
setLayoutManager(new WrapContentLinearLayoutManager(getContext()));
|
||||
addItemDecoration(new DividerItemDecoration(getContext(), DividerItemDecoration.VERTICAL));
|
||||
initScriptFileOperationPopupMenu();
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@ public class StorageScriptProvider {
|
||||
|
||||
public void notifyDirectoryChanged(ScriptFile directory) {
|
||||
if (directory.equals(mInitialDirectory)) {
|
||||
mInitialDirectoryScriptFiles = getInitialDirectoryScriptFiles();
|
||||
mInitialDirectoryScriptFiles = getInitialDirectoryScriptFilesInner();
|
||||
} else {
|
||||
clearCache(directory);
|
||||
}
|
||||
@@ -80,6 +80,7 @@ public class StorageScriptProvider {
|
||||
mDirectoryEventBus.post(new DirectoryChangeEvent(mInitialDirectory));
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void refreshAll() {
|
||||
Map<String, ScriptFile> files = (Map<String, ScriptFile>) mScriptFileCache.clone();
|
||||
mScriptFileCache.clear();
|
||||
|
||||
@@ -16,12 +16,13 @@ import android.view.View;
|
||||
import com.afollestad.materialdialogs.DialogAction;
|
||||
import com.afollestad.materialdialogs.MaterialDialog;
|
||||
import com.stardust.autojs.engine.JavaScriptEngine;
|
||||
import com.stardust.autojs.engine.ScriptExecutionListener;
|
||||
import com.stardust.autojs.ScriptExecutionListener;
|
||||
import com.stardust.autojs.script.FileScriptSource;
|
||||
import com.stardust.autojs.script.ScriptSource;
|
||||
import com.stardust.pio.PFile;
|
||||
import com.stardust.scriptdroid.Pref;
|
||||
import com.stardust.scriptdroid.autojs.AutoJs;
|
||||
import com.stardust.scriptdroid.scripts.ScriptFile;
|
||||
import com.stardust.scriptdroid.ui.edit.editor920.Editor920Activity;
|
||||
import com.stardust.scriptdroid.ui.edit.sidemenu.EditSideMenuFragment;
|
||||
import com.stardust.scriptdroid.ui.edit.sidemenu.FunctionListRecyclerView;
|
||||
@@ -42,8 +43,6 @@ import com.stardust.theme.ThemeColorManager;
|
||||
import com.stardust.view.ViewBinder;
|
||||
|
||||
import java.io.File;
|
||||
import java.text.DateFormat;
|
||||
import java.util.Date;
|
||||
|
||||
import timber.log.Timber;
|
||||
|
||||
@@ -99,6 +98,10 @@ public class EditActivity extends Editor920Activity {
|
||||
.putExtra("name", name));
|
||||
}
|
||||
|
||||
public static void editFile(Context context, ScriptFile file) {
|
||||
editFile(context, file.getSimplifiedName(), file.getPath());
|
||||
}
|
||||
|
||||
private String mName;
|
||||
private File mFile;
|
||||
private View mView;
|
||||
@@ -264,7 +267,7 @@ public class EditActivity extends Editor920Activity {
|
||||
private void run() {
|
||||
Snackbar.make(mView, R.string.text_start_running, Snackbar.LENGTH_SHORT).show();
|
||||
setMenuStatus(R.id.run, MenuDef.STATUS_DISABLED);
|
||||
AutoJs.getInstance().getScriptEngineService().execute(new FileScriptSource(mFile), SCRIPT_EXECUTION_LISTENER);
|
||||
AutoJs.getInstance().getScriptEngineService().execute(new FileScriptSource(mName, mFile), SCRIPT_EXECUTION_LISTENER);
|
||||
}
|
||||
|
||||
@ViewBinding.Click(R.id.undo)
|
||||
|
||||
@@ -12,6 +12,7 @@ import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
import android.workground.WrapContentLinearLayoutManager;
|
||||
|
||||
import com.stardust.scriptdroid.App;
|
||||
import com.stardust.scriptdroid.R;
|
||||
@@ -77,8 +78,8 @@ public class InputMethodEnhanceBar extends RecyclerView implements CodeCompletio
|
||||
|
||||
private void init() {
|
||||
setAdapter(new CodeCompletionAdapter());
|
||||
setLayoutManager(new LinearLayoutManager(getContext(), HORIZONTAL, false));
|
||||
mCodeCompletion.setFunctions(AutoJs.getInstance().getScriptEngineService().getJavaScriptEngineManager().getGlobalFunctions());
|
||||
setLayoutManager(new WrapContentLinearLayoutManager(getContext(), HORIZONTAL, false));
|
||||
mCodeCompletion.setFunctions(AutoJs.getInstance().getScriptEngineService().getGlobalFunctions());
|
||||
}
|
||||
|
||||
public void setEditTextBridge(EditTextBridge editTextBridge) {
|
||||
|
||||
@@ -11,6 +11,7 @@ import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
import android.workground.WrapContentLinearLayoutManager;
|
||||
|
||||
import com.stardust.pio.PFile;
|
||||
import com.stardust.scriptdroid.App;
|
||||
@@ -118,7 +119,7 @@ public class HelpCatalogueActivity extends BaseActivity {
|
||||
|
||||
private void setUpRecyclerView() {
|
||||
mRecyclerView = $(R.id.catalogue);
|
||||
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
|
||||
mRecyclerView.setLayoutManager(new WrapContentLinearLayoutManager(this));
|
||||
mRecyclerView.setAdapter(new Adapter());
|
||||
mRecyclerView.addItemDecoration(new DividerItemDecoration(this, RecyclerView.VERTICAL));
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ import android.view.WindowManager;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.PopupWindow;
|
||||
import android.widget.TextView;
|
||||
import android.workground.WrapContentLinearLayoutManager;
|
||||
|
||||
import com.stardust.util.ViewUtil;
|
||||
import com.stardust.scriptdroid.R;
|
||||
@@ -130,7 +131,7 @@ public class ScriptFileOperationPopupMenu extends PopupWindow {
|
||||
}
|
||||
|
||||
private void init() {
|
||||
setLayoutManager(new LinearLayoutManager(getContext()));
|
||||
setLayoutManager(new WrapContentLinearLayoutManager(getContext()));
|
||||
setAdapter(new Adapter<ViewHolder>() {
|
||||
@Override
|
||||
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
|
||||
@@ -10,6 +10,7 @@ import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
import android.workground.WrapContentLinearLayoutManager;
|
||||
|
||||
import com.bignerdranch.expandablerecyclerview.ChildViewHolder;
|
||||
import com.bignerdranch.expandablerecyclerview.ExpandableRecyclerAdapter;
|
||||
@@ -96,7 +97,7 @@ public class SampleScriptListRecyclerView extends RecyclerView {
|
||||
}
|
||||
|
||||
private void init() {
|
||||
setLayoutManager(new LinearLayoutManager(getContext()));
|
||||
setLayoutManager(new WrapContentLinearLayoutManager(getContext()));
|
||||
addItemDecoration(new DividerItemDecoration(getContext(), VERTICAL));
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@ import com.stardust.scriptdroid.scripts.ScriptFile;
|
||||
import com.stardust.pio.PFile;
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.scriptdroid.scripts.StorageScriptProvider;
|
||||
import com.stardust.scriptdroid.ui.edit.EditActivity;
|
||||
import com.stardust.scriptdroid.ui.main.operation.ScriptFileOperation;
|
||||
import com.stardust.theme.dialog.ThemeColorMaterialDialogBuilder;
|
||||
import com.stardust.view.ViewBinder;
|
||||
@@ -82,8 +83,7 @@ public class MyScriptListFragment extends Fragment {
|
||||
mScriptListRecyclerView.setOnItemClickListener(new ScriptAndFolderListRecyclerView.OnScriptFileClickListener() {
|
||||
@Override
|
||||
public void onClick(ScriptFile file) {
|
||||
mSelectedScriptFile = file;
|
||||
mScriptFileOperationDialog.show();
|
||||
EditActivity.editFile(getContext(), file);
|
||||
}
|
||||
});
|
||||
mScriptListRecyclerView.setOnItemLongClickListener(new ScriptAndFolderListRecyclerView.OnScriptFileLongClickListener() {
|
||||
|
||||
@@ -4,7 +4,6 @@ import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.os.Parcelable;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v7.widget.DividerItemDecoration;
|
||||
import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.util.AttributeSet;
|
||||
@@ -12,14 +11,16 @@ import android.view.KeyEvent;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
import android.workground.WrapContentLinearLayoutManager;
|
||||
|
||||
import com.stardust.autojs.script.FileScriptSource;
|
||||
import com.stardust.scriptdroid.autojs.AutoJs;
|
||||
import com.stardust.scriptdroid.scripts.ScriptFile;
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.scriptdroid.scripts.StorageScriptProvider;
|
||||
import com.stardust.scriptdroid.ui.main.operation.ScriptFileOperation;
|
||||
import com.yqritc.recyclerviewflexibledivider.HorizontalDividerItemDecoration;
|
||||
|
||||
import org.greenrobot.eventbus.Subscribe;
|
||||
|
||||
@@ -58,7 +59,7 @@ public class ScriptAndFolderListRecyclerView extends RecyclerView {
|
||||
}
|
||||
ScriptFile file = mScriptFileList[getActualPosition(position)];
|
||||
if (file.isDirectory()) {
|
||||
setCurrentFolder(file, true);
|
||||
setCurrentDirectory(file, true);
|
||||
} else if (mOnItemClickListener != null) {
|
||||
mOnItemClickListener.onClick(file);
|
||||
}
|
||||
@@ -84,17 +85,10 @@ public class ScriptAndFolderListRecyclerView extends RecyclerView {
|
||||
AutoJs.getInstance().getScriptEngineService().execute(new FileScriptSource(file));
|
||||
}
|
||||
};
|
||||
private OnClickListener mOnEditClickListener = new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
int position = getChildViewHolder((View) v.getParent()).getAdapterPosition();
|
||||
ScriptFileOperation.edit(mScriptFileList[getActualPosition(position)]);
|
||||
}
|
||||
};
|
||||
|
||||
private ScriptFile[] mScriptFileList = new ScriptFile[0];
|
||||
private ScriptFile mCurrentFolder;
|
||||
private ScriptFile mRootFolder;
|
||||
private ScriptFile mCurrentDirectory;
|
||||
private ScriptFile mRootDirectory;
|
||||
private Adapter mAdapter;
|
||||
private boolean mCanGoBack = false;
|
||||
private StorageScriptProvider mStorageScriptProvider;
|
||||
@@ -116,8 +110,8 @@ public class ScriptAndFolderListRecyclerView extends RecyclerView {
|
||||
init();
|
||||
}
|
||||
|
||||
private void setCurrentFolder(final ScriptFile folder, boolean canGoBack) {
|
||||
mCurrentFolder = folder;
|
||||
private void setCurrentDirectory(final ScriptFile folder, boolean canGoBack) {
|
||||
mCurrentDirectory = folder;
|
||||
mCanGoBack = canGoBack;
|
||||
if (mFileProcessListener != null) {
|
||||
mFileProcessListener.onFilesListing();
|
||||
@@ -137,9 +131,9 @@ public class ScriptAndFolderListRecyclerView extends RecyclerView {
|
||||
}).start();
|
||||
}
|
||||
|
||||
private void setRootFolder(ScriptFile folder) {
|
||||
mRootFolder = folder;
|
||||
setCurrentFolder(mRootFolder, false);
|
||||
private void setRootDirectory(ScriptFile folder) {
|
||||
mRootDirectory = folder;
|
||||
setCurrentDirectory(mRootDirectory, false);
|
||||
}
|
||||
|
||||
public void setFileProcessListener(FileProcessListener fileProcessListener) {
|
||||
@@ -151,7 +145,7 @@ public class ScriptAndFolderListRecyclerView extends RecyclerView {
|
||||
mStorageScriptProvider.unregisterDirectoryChangeListener(this);
|
||||
mStorageScriptProvider = storageScriptProvider;
|
||||
mStorageScriptProvider.registerDirectoryChangeListener(this);
|
||||
setRootFolder(mStorageScriptProvider.getInitialDirectory());
|
||||
setRootDirectory(mStorageScriptProvider.getInitialDirectory());
|
||||
}
|
||||
|
||||
public void setOnItemClickListener(OnScriptFileClickListener onItemClickListener) {
|
||||
@@ -163,7 +157,7 @@ public class ScriptAndFolderListRecyclerView extends RecyclerView {
|
||||
}
|
||||
|
||||
public ScriptFile getCurrentDirectory() {
|
||||
return mCurrentFolder;
|
||||
return mCurrentDirectory;
|
||||
}
|
||||
|
||||
public void setScriptFileOperationEnabled(boolean scriptFileOperationEnabled) {
|
||||
@@ -171,13 +165,18 @@ public class ScriptAndFolderListRecyclerView extends RecyclerView {
|
||||
}
|
||||
|
||||
private void goBack() {
|
||||
ScriptFile parent = mCurrentFolder.getParentFile();
|
||||
setCurrentFolder(parent, !parent.equals(mRootFolder));
|
||||
ScriptFile parent = mCurrentDirectory.getParentFile();
|
||||
setCurrentDirectory(parent, !parent.equals(mRootDirectory));
|
||||
}
|
||||
|
||||
private void init() {
|
||||
setLayoutManager(new LinearLayoutManager(getContext()));
|
||||
addItemDecoration(new DividerItemDecoration(getContext(), VERTICAL));
|
||||
setLayoutManager(new WrapContentLinearLayoutManager(getContext()));
|
||||
addItemDecoration(new HorizontalDividerItemDecoration.Builder(getContext())
|
||||
.color(0xffd9d9d9)
|
||||
.size(2)
|
||||
.marginResId(R.dimen.script_and_folder_list_divider_left_margin, R.dimen.script_and_folder_list_divider_right_margin)
|
||||
.showLastDivider()
|
||||
.build());
|
||||
mAdapter = new Adapter();
|
||||
setAdapter(mAdapter);
|
||||
}
|
||||
@@ -186,17 +185,17 @@ public class ScriptAndFolderListRecyclerView extends RecyclerView {
|
||||
protected Parcelable onSaveInstanceState() {
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putParcelable("superData", super.onSaveInstanceState());
|
||||
bundle.putSerializable("current", mCurrentFolder);
|
||||
bundle.putSerializable("root", mRootFolder);
|
||||
bundle.putSerializable("current", mCurrentDirectory);
|
||||
bundle.putSerializable("root", mRootDirectory);
|
||||
return bundle;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onRestoreInstanceState(Parcelable state) {
|
||||
Bundle bundle = (Bundle) state;
|
||||
mRootFolder = (ScriptFile) bundle.getSerializable("root");
|
||||
mCurrentFolder = (ScriptFile) bundle.getSerializable("current");
|
||||
setCurrentFolder(mCurrentFolder, !mCurrentFolder.equals(mRootFolder));
|
||||
mRootDirectory = (ScriptFile) bundle.getSerializable("root");
|
||||
mCurrentDirectory = (ScriptFile) bundle.getSerializable("current");
|
||||
setCurrentDirectory(mCurrentDirectory, !mCurrentDirectory.equals(mRootDirectory));
|
||||
super.onRestoreInstanceState(bundle.getParcelable("superData"));
|
||||
}
|
||||
|
||||
@@ -226,13 +225,13 @@ public class ScriptAndFolderListRecyclerView extends RecyclerView {
|
||||
|
||||
@Subscribe
|
||||
public void onDirectoryChange(StorageScriptProvider.DirectoryChangeEvent event) {
|
||||
if (event.directory.equals(mCurrentFolder)) {
|
||||
updateCurrentFolder();
|
||||
if (event.directory.equals(mCurrentDirectory)) {
|
||||
updateCurrentDirectory();
|
||||
}
|
||||
}
|
||||
|
||||
private void updateCurrentFolder() {
|
||||
setCurrentFolder(mCurrentFolder, mCanGoBack);
|
||||
private void updateCurrentDirectory() {
|
||||
setCurrentDirectory(mCurrentDirectory, mCanGoBack);
|
||||
}
|
||||
|
||||
private class Adapter extends RecyclerView.Adapter<ViewHolder> {
|
||||
@@ -244,9 +243,9 @@ public class ScriptAndFolderListRecyclerView extends RecyclerView {
|
||||
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
switch (viewType) {
|
||||
case VIEW_TYPE_FILE:
|
||||
return new FileViewHolder(LayoutInflater.from(getContext()).inflate(R.layout.script_list_recycler_view_item, parent, false));
|
||||
return new FileViewHolder(LayoutInflater.from(getContext()).inflate(R.layout.script_and_folder_list_recycler_view_file, parent, false));
|
||||
case VIEW_TYPE_FOLDER:
|
||||
return new ViewHolder(LayoutInflater.from(getContext()).inflate(R.layout.script_list_recycler_view_folder, parent, false));
|
||||
return new ViewHolder(LayoutInflater.from(getContext()).inflate(R.layout.script_and_folder_list_recycler_view_directory, parent, false));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -255,7 +254,6 @@ public class ScriptAndFolderListRecyclerView extends RecyclerView {
|
||||
public void onBindViewHolder(ViewHolder holder, int position) {
|
||||
if (mCanGoBack && position == 0) {
|
||||
holder.name.setText("..");
|
||||
holder.path.setText("");
|
||||
} else
|
||||
holder.bind(mScriptFileList[getActualPosition(position)]);
|
||||
}
|
||||
@@ -281,19 +279,30 @@ public class ScriptAndFolderListRecyclerView extends RecyclerView {
|
||||
|
||||
private class ViewHolder extends RecyclerView.ViewHolder {
|
||||
|
||||
TextView name, path;
|
||||
TextView name;
|
||||
|
||||
ViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
itemView.setOnClickListener(mOnItemClickListenerProxy);
|
||||
itemView.setOnLongClickListener(mOnItemLongClickListenerProxy);
|
||||
name = (TextView) itemView.findViewById(R.id.name);
|
||||
path = (TextView) itemView.findViewById(R.id.path);
|
||||
if (!mScriptFileOperationEnabled) {
|
||||
setMarginRight(name, 0);
|
||||
}
|
||||
}
|
||||
|
||||
private void setMarginRight(View view, int marginRight) {
|
||||
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) view.getLayoutParams();
|
||||
layoutParams.rightMargin = marginRight;
|
||||
view.setLayoutParams(layoutParams);
|
||||
}
|
||||
|
||||
public void bind(ScriptFile file) {
|
||||
name.setText(file.getSimplifiedName());
|
||||
path.setText(file.getSimplifiedPath());
|
||||
if (file.isDirectory()) {
|
||||
name.setText(file.getName());
|
||||
} else {
|
||||
name.setText(file.getSimplifiedName());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -302,10 +311,8 @@ public class ScriptAndFolderListRecyclerView extends RecyclerView {
|
||||
FileViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
if (mScriptFileOperationEnabled) {
|
||||
itemView.findViewById(R.id.edit).setOnClickListener(mOnEditClickListener);
|
||||
itemView.findViewById(R.id.run).setOnClickListener(mOnRunClickListener);
|
||||
} else {
|
||||
itemView.findViewById(R.id.edit).setVisibility(GONE);
|
||||
itemView.findViewById(R.id.run).setVisibility(GONE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
import android.workground.WrapContentLinearLayoutManager;
|
||||
|
||||
import com.stardust.scriptdroid.scripts.ScriptFile;
|
||||
import com.stardust.scriptdroid.scripts.ScriptFileList;
|
||||
@@ -87,7 +88,7 @@ public class ScriptListRecyclerView extends ThemeColorRecyclerView {
|
||||
|
||||
private void init() {
|
||||
setAdapter(new Adapter());
|
||||
setLayoutManager(new LinearLayoutManager(getContext()));
|
||||
setLayoutManager(new WrapContentLinearLayoutManager(getContext()));
|
||||
addItemDecoration(new DividerItemDecoration(getContext(), DividerItemDecoration.VERTICAL));
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,161 @@
|
||||
package com.stardust.scriptdroid.ui.main.task;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.support.v7.widget.ThemeColorRecyclerView;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
import android.workground.WrapContentLinearLayoutManager;
|
||||
|
||||
import com.stardust.autojs.ScriptEngineService;
|
||||
import com.stardust.autojs.engine.JavaScriptEngine;
|
||||
import com.stardust.autojs.engine.JavaScriptEngineManager;
|
||||
import com.stardust.autojs.script.ScriptSource;
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.yqritc.recyclerviewflexibledivider.HorizontalDividerItemDecoration;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/3/24.
|
||||
*/
|
||||
|
||||
public class TaskListRecyclerView extends ThemeColorRecyclerView implements JavaScriptEngineManager.EngineLifecycleCallback {
|
||||
|
||||
|
||||
private final OnClickListener mOnItemClickListenerProxy = new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
private final OnClickListener mOnStopClickListener = new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
int position = getChildViewHolder((View) v.getParent()).getAdapterPosition();
|
||||
mScriptEngines.get(position).forceStop();
|
||||
}
|
||||
};
|
||||
|
||||
private final List<JavaScriptEngine> mScriptEngines = new LinkedList<>();
|
||||
private Adapter mAdapter;
|
||||
|
||||
public TaskListRecyclerView(Context context) {
|
||||
super(context);
|
||||
init();
|
||||
}
|
||||
|
||||
public TaskListRecyclerView(Context context, @Nullable AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
init();
|
||||
}
|
||||
|
||||
public TaskListRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {
|
||||
super(context, attrs, defStyle);
|
||||
init();
|
||||
}
|
||||
|
||||
private void init() {
|
||||
setLayoutManager(new WrapContentLinearLayoutManager(getContext()));
|
||||
addItemDecoration(new HorizontalDividerItemDecoration.Builder(getContext())
|
||||
.color(0xffd9d9d9)
|
||||
.size(2)
|
||||
.marginResId(R.dimen.script_and_folder_list_divider_left_margin, R.dimen.script_and_folder_list_divider_right_margin)
|
||||
.showLastDivider()
|
||||
.build());
|
||||
mAdapter = new Adapter();
|
||||
setAdapter(mAdapter);
|
||||
}
|
||||
|
||||
private void updateEngineList() {
|
||||
mScriptEngines.clear();
|
||||
mScriptEngines.addAll(ScriptEngineService.getInstance().getEngines());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onAttachedToWindow() {
|
||||
super.onAttachedToWindow();
|
||||
updateEngineList();
|
||||
mAdapter.notifyDataSetChanged();
|
||||
ScriptEngineService.getInstance().registerEngineLifecycleCallback(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDetachedFromWindow() {
|
||||
super.onDetachedFromWindow();
|
||||
ScriptEngineService.getInstance().unregisterEngineLifecycleCallback(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEngineCreate(final JavaScriptEngine engine) {
|
||||
synchronized (mScriptEngines) {
|
||||
post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
mScriptEngines.add(engine);
|
||||
getAdapter().notifyItemInserted(mScriptEngines.size() - 1);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEngineRemove(final JavaScriptEngine engine) {
|
||||
post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
final int i = mScriptEngines.indexOf(engine);
|
||||
mScriptEngines.remove(i);
|
||||
mAdapter.notifyItemRemoved(i);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private class Adapter extends RecyclerView.Adapter<ViewHolder> {
|
||||
|
||||
@Override
|
||||
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
return new ViewHolder(LayoutInflater.from(getContext()).inflate(R.layout.task_list_recycler_view_item, parent, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(ViewHolder holder, int position) {
|
||||
holder.bind(mScriptEngines.get(position).getExecutedScript());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return mScriptEngines.size();
|
||||
}
|
||||
}
|
||||
|
||||
private class ViewHolder extends RecyclerView.ViewHolder {
|
||||
|
||||
TextView name, detail;
|
||||
View stop;
|
||||
|
||||
ViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
itemView.setOnClickListener(mOnItemClickListenerProxy);
|
||||
name = (TextView) itemView.findViewById(R.id.name);
|
||||
detail = (TextView) itemView.findViewById(R.id.detail);
|
||||
stop = itemView.findViewById(R.id.stop);
|
||||
stop.setOnClickListener(mOnStopClickListener);
|
||||
}
|
||||
|
||||
public void bind(ScriptSource source) {
|
||||
if (source == null)
|
||||
return;
|
||||
name.setText(source.getName());
|
||||
detail.setText(source.toString());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2,20 +2,59 @@ package com.stardust.scriptdroid.ui.main.task;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import com.stardust.app.Fragment;
|
||||
import com.stardust.autojs.ScriptEngineService;
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.view.ViewBinder;
|
||||
import com.stardust.view.ViewBinding;
|
||||
import com.stardust.widget.SimpleAdapterDataObserver;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/3/24.
|
||||
*/
|
||||
|
||||
public class TaskManagerFragment extends Fragment {
|
||||
|
||||
private TaskListRecyclerView mTaskListRecyclerView;
|
||||
private View mCloseAllView;
|
||||
private View mNoRunningScriptNotice;
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View createView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
return null;
|
||||
return inflater.inflate(R.layout.fragment_task_manager, container, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
ViewBinder.bind(this, view);
|
||||
init();
|
||||
}
|
||||
|
||||
private void init() {
|
||||
mNoRunningScriptNotice = $(R.id.notice_no_running_script);
|
||||
mCloseAllView = $(R.id.close_all);
|
||||
mTaskListRecyclerView = $(R.id.task_list);
|
||||
mTaskListRecyclerView.getAdapter().registerAdapterDataObserver(new SimpleAdapterDataObserver() {
|
||||
|
||||
@Override
|
||||
public void onSomethingChanged() {
|
||||
boolean noRunningScript = mTaskListRecyclerView.getAdapter().getItemCount() == 0;
|
||||
mNoRunningScriptNotice.setVisibility(noRunningScript ? View.VISIBLE : View.GONE);
|
||||
mCloseAllView.setVisibility(noRunningScript ? View.GONE : View.VISIBLE);
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
@ViewBinding.Click(R.id.close_all)
|
||||
private void closeAllRunningScripts() {
|
||||
ScriptEngineService.getInstance().stopAll();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
package com.stardust.scriptdroid.ui.main.task;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/3/24.
|
||||
*/
|
||||
|
||||
public class TaskManagerRecyclerView {
|
||||
}
|
||||
Reference in New Issue
Block a user