Add: Task manager

This commit is contained in:
hyb1996
2017-04-04 00:26:14 +08:00
parent 59811a4a5d
commit b762ceb60b
54 changed files with 758 additions and 329 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,8 +0,0 @@
package com.stardust.scriptdroid.ui.main.task;
/**
* Created by Stardust on 2017/3/24.
*/
public class TaskManagerRecyclerView {
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

View File

@@ -1,13 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<view
android:id="@+id/console"
class="com.stardust.scriptdroid.ui.console.ConsoleActivity$ConsoleView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

View File

@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#f4f4f4">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:id="@+id/close_all"
android:layout_width="match_parent"
android:layout_height="42dp"
android:background="#e4e4e4"
android:foreground="?selectableItemBackground"
android:gravity="center_vertical"
android:orientation="horizontal"
android:visibility="gone">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:text="@string/text_close_all_running_scripts"
android:textColor="@android:color/secondary_text_light"
android:textSize="16sp"/>
</LinearLayout>
<com.stardust.scriptdroid.ui.main.task.TaskListRecyclerView
android:id="@+id/task_list"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
<TextView
android:id="@+id/notice_no_running_script"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:text="@string/notice_no_running_script"
android:textColor="#adadad"
android:textSize="16sp"/>
</FrameLayout>

View File

@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:foreground="?android:selectableItemBackground">
<ImageView
android:id="@+id/icon"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginBottom="4dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="4dp"
android:contentDescription="@string/_app_name"
android:scaleType="fitCenter"
android:src="@drawable/ic_folder_yellow_100px"/>
<TextView
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="8dp"
android:layout_marginRight="80dp"
android:layout_toRightOf="@id/icon"
android:ellipsize="end"
android:maxLines="1"
android:textColor="@android:color/secondary_text_light"
android:textSize="16sp"
tools:text="示例脚本"/>
</RelativeLayout>

View File

@@ -0,0 +1,56 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:foreground="?android:selectableItemBackground">
<ImageView
android:id="@+id/icon"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginBottom="4dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="4dp"
android:contentDescription="@string/_app_name"
android:scaleType="fitCenter"
android:src="@drawable/ic_node_js_black"/>
<TextView
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="8dp"
android:layout_marginRight="80dp"
android:layout_toRightOf="@id/icon"
android:ellipsize="end"
android:maxLines="1"
android:textColor="@android:color/secondary_text_light"
android:textSize="16sp"
tools:text="正在运行的服务"/>
<LinearLayout
android:id="@+id/run"
android:layout_width="42dp"
android:layout_height="42dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="12dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_gravity="center"
android:contentDescription="@string/_app_name"
android:src="@drawable/ic_play"/>
</LinearLayout>
</RelativeLayout>

View File

@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:background="#fefefe">
<com.stardust.scriptdroid.ui.main.script_list.ScriptAndFolderListRecyclerView
android:id="@+id/script_list_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fafafa"/>
android:layout_height="match_parent"/>
<FrameLayout
android:id="@+id/progressBar"

View File

@@ -1,53 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:foreground="?android:selectableItemBackground"
android:orientation="vertical"
android:paddingBottom="8dp"
android:paddingLeft="8dp"
android:paddingTop="8dp">
<ImageView
android:id="@+id/icon"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:contentDescription="@string/_app_name"
android:scaleType="fitCenter"
android:src="@drawable/ic_folder_yellow_200px"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_marginLeft="56dp"
android:gravity="center_vertical"
android:orientation="vertical">
<TextView
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:textColor="@android:color/primary_text_light"
android:textSize="18sp"
tools:text="示例脚本"/>
<TextView
android:id="@+id/path"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:ellipsize="end"
android:maxLines="1"
android:gravity="center_vertical"
android:textColor="#777777"
android:textSize="14sp"
tools:text="/storage/emulated/0/脚本/示例脚本"/>
</LinearLayout>
</RelativeLayout>

View File

@@ -0,0 +1,72 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:foreground="?android:selectableItemBackground">
<ImageView
android:id="@+id/icon"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginBottom="6dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="6dp"
android:contentDescription="@string/_app_name"
android:scaleType="fitCenter"
android:src="@drawable/ic_node_js_black"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="8dp"
android:layout_marginRight="80dp"
android:layout_toRightOf="@id/icon"
android:orientation="vertical">
<TextView
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:textColor="@android:color/secondary_text_light"
android:textSize="16sp"
tools:text="正在运行的服务"/>
<TextView
android:id="@+id/detail"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:ellipsize="end"
android:maxLines="1"
android:textColor="#777777"
android:textSize="12sp"
tools:text="/storage/emulated/0/脚本/正在运行的服务.txt"/>
</LinearLayout>
<FrameLayout
android:id="@+id/stop"
android:layout_width="42dp"
android:layout_height="42dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="12dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:gravity="center">
<ImageView
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_gravity="center"
android:contentDescription="@string/_app_name"
android:src="@drawable/ic_close"/>
</FrameLayout>
</RelativeLayout>

View File

@@ -157,6 +157,7 @@
<string name="text_off">OFF</string>
<string name="text_please_choose_file_to_import">请选择要导入的脚本</string>
<string name="text_refresh">刷新</string>
<string name="notice_no_running_script"><![CDATA[没有正在运行的脚本 φ(>ω<*)]]></string>
<string-array name="record_control_keys">
<item>None</item>
<item>Volume Up</item>

View File

@@ -7,4 +7,6 @@
<dimen name="level_beam_view_line_width">6dp</dimen>
<dimen name="level_beam_view_line_offset">2dp</dimen>
<dimen name="level_beam_view_padding_right">-4dp</dimen>
<dimen name="script_and_folder_list_divider_left_margin">56dp</dimen>
<dimen name="script_and_folder_list_divider_right_margin">0dp</dimen>
</resources>

View File

@@ -187,6 +187,7 @@
<string name="text_no_brower">没有浏览器耶o(╯□╰)o快去安装一个吧</string>
<string name="text_please_choose_file_to_import">请选择要导入的脚本</string>
<string name="text_refresh">刷新</string>
<string name="notice_no_running_script"><![CDATA[没有正在运行的脚本 φ(>ω<*)]]></string>
<string-array name="record_control_keys">
<item></item>