add: syntax and api document
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
package com.stardust.scriptdroid;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.view.View;
|
||||
|
||||
import com.stardust.scriptdroid.file.FileUtils;
|
||||
import com.stardust.view.MarkdownView;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/2/1.
|
||||
*/
|
||||
|
||||
public class DocumentActivity extends BaseActivity {
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setUpUI();
|
||||
}
|
||||
|
||||
private void setUpUI() {
|
||||
setContentView(R.layout.activity_document);
|
||||
setUpToolbar();
|
||||
loadDocument();
|
||||
}
|
||||
|
||||
private void loadDocument() {
|
||||
MarkdownView markdownView = $(R.id.markdown);
|
||||
try {
|
||||
markdownView.loadMarkdown(FileUtils.readString(getResources().openRawResource(R.raw.document)));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
markdownView.setText("文档加载失败/(ㄒoㄒ)/~~");
|
||||
}
|
||||
}
|
||||
|
||||
private void setUpToolbar() {
|
||||
Toolbar toolbar = $(R.id.toolbar);
|
||||
toolbar.setTitle(R.string.text_syntax_and_api);
|
||||
setSupportActionBar(toolbar);
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
finish();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -45,31 +45,24 @@ public class Droid {
|
||||
|
||||
public void runScriptFile(File file, OnRunFinishedListener listener) {
|
||||
checkFile(file);
|
||||
runScript(FileUtils.readString(file), listener);
|
||||
runScript(FileUtils.readString(file), listener, RunningConfig.getDefault());
|
||||
}
|
||||
|
||||
private void runScript(String script) {
|
||||
runScript(script, null);
|
||||
runScript(script, null, RunningConfig.getDefault());
|
||||
}
|
||||
|
||||
public void runScriptFile(String path) {
|
||||
runScriptFile(new File(path));
|
||||
}
|
||||
|
||||
public void runScript(final String script, OnRunFinishedListener listener) {
|
||||
if (listener == null)
|
||||
listener = DEFAULT_LISTENER;
|
||||
final OnRunFinishedListener finalListener = listener;
|
||||
new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
finalListener.onRunFinished(JAVA_SCRIPT_ENGINE.execute(script), null);
|
||||
} catch (Exception e) {
|
||||
finalListener.onRunFinished(null, e);
|
||||
}
|
||||
}
|
||||
}).start();
|
||||
public void runScript(final String script, OnRunFinishedListener listener, RunningConfig config) {
|
||||
if (config.runInNewThread) {
|
||||
new Thread(new RunScriptRunnable(script, listener, config)).start();
|
||||
}else {
|
||||
new RunScriptRunnable(script, listener, config).run();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -90,4 +83,23 @@ public class Droid {
|
||||
}
|
||||
|
||||
|
||||
private static class RunScriptRunnable implements Runnable {
|
||||
|
||||
private final String mScript;
|
||||
private OnRunFinishedListener mOnRunFinishedListener;
|
||||
|
||||
public RunScriptRunnable(String script, OnRunFinishedListener listener, RunningConfig config) {
|
||||
mOnRunFinishedListener = listener == null ? DEFAULT_LISTENER : listener;
|
||||
mScript = script;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
mOnRunFinishedListener.onRunFinished(JAVA_SCRIPT_ENGINE.execute(mScript), null);
|
||||
} catch (Exception e) {
|
||||
mOnRunFinishedListener.onRunFinished(null, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
package com.stardust.scriptdroid.droid;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/2/1.
|
||||
*/
|
||||
public class RunningConfig {
|
||||
|
||||
private static final RunningConfig RUNNING_CONFIG = new RunningConfig();
|
||||
|
||||
public static RunningConfig getDefault() {
|
||||
return RUNNING_CONFIG;
|
||||
}
|
||||
|
||||
public boolean runInNewThread = true;
|
||||
public Activity activity;
|
||||
public Context context;
|
||||
|
||||
public RunningConfig runInNewThread(boolean runInNewThread) {
|
||||
this.runInNewThread = runInNewThread;
|
||||
return this;
|
||||
}
|
||||
|
||||
public RunningConfig activity(Activity activity) {
|
||||
this.activity = activity;
|
||||
this.context = activity;
|
||||
return this;
|
||||
}
|
||||
|
||||
public RunningConfig context(Context context) {
|
||||
this.context = context;
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -14,7 +14,7 @@ public abstract class ScriptFileList {
|
||||
|
||||
public abstract void remove(int i);
|
||||
|
||||
public abstract void rename(int position, String newName);
|
||||
public abstract void rename(int position, String newName, boolean renameFile);
|
||||
|
||||
public abstract int size();
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ import android.content.SharedPreferences;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import com.stardust.scriptdroid.App;
|
||||
import com.stardust.scriptdroid.file.FileUtils;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.ArrayList;
|
||||
@@ -38,7 +39,6 @@ public class SharedPrefScriptFileList extends ScriptFileList {
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void readFromSharedPref() {
|
||||
Type type = new TypeToken<List<String>>() {
|
||||
}.getType();
|
||||
@@ -75,8 +75,12 @@ public class SharedPrefScriptFileList extends ScriptFileList {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void rename(int position, String newName) {
|
||||
public void rename(int position, String newName, boolean renameFile) {
|
||||
mScriptName.set(position, newName);
|
||||
if (renameFile) {
|
||||
String newPath = FileUtils.renameWithoutExtension(mScriptPath.get(position), newName);
|
||||
mScriptPath.set(position, newPath);
|
||||
}
|
||||
syncWithSharedPref();
|
||||
}
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ import com.stardust.scriptdroid.App;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
@@ -78,7 +79,7 @@ public class FileUtils {
|
||||
if (i >= 0) {
|
||||
String folder = path.substring(0, i);
|
||||
File file = new File(folder);
|
||||
if(file.exists())
|
||||
if (file.exists())
|
||||
return true;
|
||||
return file.mkdirs();
|
||||
} else {
|
||||
@@ -88,11 +89,8 @@ public class FileUtils {
|
||||
|
||||
public static String readString(File file, String encoding) {
|
||||
try {
|
||||
FileInputStream fis = new FileInputStream(file);
|
||||
byte[] bytes = new byte[fis.available()];
|
||||
fis.read(bytes);
|
||||
return new String(bytes, encoding);
|
||||
} catch (IOException e) {
|
||||
return readString(new FileInputStream(file), encoding);
|
||||
} catch (FileNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
@@ -102,6 +100,21 @@ public class FileUtils {
|
||||
return readString(file, "utf-8");
|
||||
}
|
||||
|
||||
public static String readString(InputStream is, String encoding) {
|
||||
try {
|
||||
byte[] bytes = new byte[is.available()];
|
||||
is.read(bytes);
|
||||
return new String(bytes, encoding);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public static String readString(InputStream inputStream) {
|
||||
return readString(inputStream, "utf-8");
|
||||
}
|
||||
|
||||
public static boolean copy(int rawId, String path) {
|
||||
InputStream is = App.getApp().getResources().openRawResource(rawId);
|
||||
return copy(is, path);
|
||||
@@ -147,4 +160,20 @@ public class FileUtils {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static String renameWithoutExtension(String path, String newName) {
|
||||
File file = new File(path);
|
||||
File newFile = new File(file.getParent(), newName + "." + getExtension(file.getName()));
|
||||
file.renameTo(newFile);
|
||||
return newFile.getAbsolutePath();
|
||||
}
|
||||
|
||||
public static String getExtension(String fileName) {
|
||||
int i = fileName.lastIndexOf('.');
|
||||
if (i < 0)
|
||||
return "";
|
||||
return fileName.substring(i + 1);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -112,10 +112,7 @@ public abstract class ScriptFileOperation {
|
||||
.input("输入新名称", oldName, new MaterialDialog.InputCallback() {
|
||||
@Override
|
||||
public void onInput(@NonNull MaterialDialog dialog, CharSequence input) {
|
||||
scriptFileList.rename(position, input.toString());
|
||||
if(dialog.isPromptCheckBoxChecked()){
|
||||
scriptFileList.get(position).rename(input);
|
||||
}
|
||||
scriptFileList.rename(position, input.toString(), dialog.isPromptCheckBoxChecked());
|
||||
recyclerView.getAdapter().notifyItemChanged(position);
|
||||
}
|
||||
})
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.stardust.scriptdroid.ui;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.design.widget.Snackbar;
|
||||
@@ -12,6 +13,7 @@ import android.widget.CompoundButton;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.stardust.app.Fragment;
|
||||
import com.stardust.scriptdroid.DocumentActivity;
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.scriptdroid.droid.Droid;
|
||||
import com.stardust.scriptdroid.droid.runtime.action.ActionPerformService;
|
||||
@@ -94,8 +96,7 @@ public class SlideMenuFragment extends Fragment {
|
||||
|
||||
@ViewBinding.Click(R.id.syntax_and_api)
|
||||
private void startSyntaxHelpActivity() {
|
||||
// TODO: 2017/1/30 startSyntaxHelpActivity
|
||||
Toast.makeText(getContext(), "暂无", Toast.LENGTH_LONG).show();
|
||||
startActivity(new Intent(getContext(), DocumentActivity.class));
|
||||
}
|
||||
|
||||
@ViewBinding.Click(R.id.about_app)
|
||||
|
||||
61
app/src/main/java/com/stardust/view/MarkdownView.java
Normal file
61
app/src/main/java/com/stardust/view/MarkdownView.java
Normal file
@@ -0,0 +1,61 @@
|
||||
package com.stardust.view;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.support.annotation.RequiresApi;
|
||||
import android.text.Html;
|
||||
import android.text.Spanned;
|
||||
import android.text.method.ScrollingMovementMethod;
|
||||
import android.util.AttributeSet;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.zzhoujay.markdown.MarkDown;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/2/1.
|
||||
*/
|
||||
|
||||
public class MarkdownView extends TextView {
|
||||
public MarkdownView(Context context) {
|
||||
super(context);
|
||||
init();
|
||||
}
|
||||
|
||||
public MarkdownView(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
init();
|
||||
}
|
||||
|
||||
public MarkdownView(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
init();
|
||||
}
|
||||
|
||||
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
|
||||
public MarkdownView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
||||
super(context, attrs, defStyleAttr, defStyleRes);
|
||||
init();
|
||||
}
|
||||
|
||||
private void init() {
|
||||
setMovementMethod(ScrollingMovementMethod.getInstance());
|
||||
setVerticalScrollBarEnabled(true);
|
||||
setTextIsSelectable(true);
|
||||
setClickable(true);
|
||||
}
|
||||
|
||||
public void loadMarkdown(final String text, final Html.ImageGetter imageGetter) {
|
||||
post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Spanned spanned = MarkDown.fromMarkdown(text, imageGetter, MarkdownView.this);
|
||||
setText(spanned);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void loadMarkdown(final String text) {
|
||||
loadMarkdown(text, null);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user