remove unnessary files of editor; add 'delete line' and 'copy line' options to editor context menu

This commit is contained in:
hyb1996
2017-11-02 23:29:54 +08:00
parent 37445b7905
commit 36c6b38b17
161 changed files with 240 additions and 38503 deletions

View File

@@ -5,10 +5,15 @@ import android.content.DialogInterface;
import android.graphics.Color;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.support.design.widget.Snackbar;
import android.util.AttributeSet;
import android.util.Log;
import android.util.TypedValue;
import android.view.ActionMode;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.ConsoleMessage;
import android.webkit.JavascriptInterface;
import android.webkit.JsPromptResult;
import android.webkit.JsResult;
@@ -24,6 +29,7 @@ import com.afollestad.materialdialogs.MaterialDialog;
import com.stardust.pio.PFiles;
import com.stardust.scriptdroid.R;
import com.stardust.theme.dialog.ThemeColorMaterialDialogBuilder;
import com.stardust.util.ClipboardUtil;
import org.jdeferred.Deferred;
import org.jdeferred.DoneCallback;
@@ -52,6 +58,7 @@ public class CodeMirrorEditor extends FrameLayout {
private static final String LOG_TAG = "CodeMirrorEditor";
public interface Callback {
void onChange();
@@ -92,12 +99,16 @@ public class CodeMirrorEditor extends FrameLayout {
init();
}
public WebView getWebView() {
return mWebView;
}
public void setCallback(Callback callback) {
mCallback = callback;
}
public void beautifyCode() {
evalJavaScript("editor.setValue(js_beautify(editor.getValue()));");
evalJavaScript("editor.setValue(js_beautify(editor.getValue(), {indent_size: 2}));");
}
public String[] getAvailableThemes() {
@@ -173,6 +184,17 @@ public class CodeMirrorEditor extends FrameLayout {
mWebView.setWebChromeClient(new MyWebChromeClient());
}
@Override
public ActionMode startActionModeForChild(View originalView, ActionMode.Callback callback) {
return super.startActionModeForChild(originalView, new EditorActionModeCallback(callback, this));
}
@Override
public ActionMode startActionModeForChild(View originalView, ActionMode.Callback callback, int type) {
return super.startActionModeForChild(originalView, new EditorActionModeCallback(callback, this), type);
}
public void setReadOnly(boolean readOnly) {
evalJavaScript(String.format("editor.setOption('readOnly', %b);", readOnly));
}
@@ -191,6 +213,7 @@ public class CodeMirrorEditor extends FrameLayout {
mPageFinished.promise().done(result -> evalJavaScript("editor.replaceSelection(__bridge__.getStringFromAndroid());"));
}
public void loadFile(final File file) {
setProgress(true);
Observable.fromCallable(() -> PFiles.read(file))
@@ -223,6 +246,42 @@ public class CodeMirrorEditor extends FrameLayout {
" {line: editor.getCursor().line + 1, ch: 0});");
}
public void copyLine() {
getLine()
.observeOn(AndroidSchedulers.mainThread())
.subscribe(s -> {
ClipboardUtil.setClip(getContext(), s);
Snackbar.make(mWebView, R.string.text_already_copy_to_clip, Snackbar.LENGTH_SHORT).show();
});
}
public void cut() {
getSelection().observeOn(AndroidSchedulers.mainThread())
.subscribe(s -> {
ClipboardUtil.setClip(getContext(), s);
evalJavaScript("editor.replaceSelection('');");
});
}
public void copy() {
getSelection().observeOn(AndroidSchedulers.mainThread())
.subscribe(s -> ClipboardUtil.setClip(getContext(), s));
}
public void paste() {
CharSequence clip = ClipboardUtil.getClip(getContext());
if (clip == null) {
return;
}
evalJavaScript(String.format("editor.replaceSelection('%s');", clip.toString().replace("'", "\\'")));
}
public void selectAll() {
evalJavaScript("editor.execCommand('selectAll');");
}
public Observable<Integer> getLineCount() {
mIntFromJs = PublishSubject.create();
evalJavaScript("__bridge__.setIntFromJs(editor.lineCount())");
@@ -438,18 +497,8 @@ public class CodeMirrorEditor extends FrameLayout {
new ThemeColorMaterialDialogBuilder(getContext())
.title(R.string.text_alert)
.content(message)
.onPositive(new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(@android.support.annotation.NonNull MaterialDialog dialog, @android.support.annotation.NonNull DialogAction which) {
result.confirm();
}
})
.cancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
result.cancel();
}
})
.onPositive((dialog, which) -> result.confirm())
.cancelListener(dialog -> result.cancel())
.positiveText(R.string.ok)
.show();
return true;
@@ -459,5 +508,27 @@ public class CodeMirrorEditor extends FrameLayout {
public void onProgressChanged(WebView view, int newProgress) {
setProgress(newProgress != 100);
}
@Override
public boolean onConsoleMessage(ConsoleMessage m) {
switch (m.messageLevel()) {
case LOG:
Log.i(LOG_TAG, String.format("%s (%s:%d)", m.message(), m.sourceId(), m.lineNumber()));
return true;
case TIP:
Log.v(LOG_TAG, String.format("%s (%s:%d)", m.message(), m.sourceId(), m.lineNumber()));
return true;
case DEBUG:
Log.d(LOG_TAG, String.format("%s (%s:%d)", m.message(), m.sourceId(), m.lineNumber()));
return true;
case WARNING:
Log.w(LOG_TAG, String.format("%s (%s:%d)", m.message(), m.sourceId(), m.lineNumber()));
return true;
case ERROR:
Log.e(LOG_TAG, String.format("%s (%s:%d)", m.message(), m.sourceId(), m.lineNumber()));
return true;
}
return false;
}
}
}

View File

@@ -2,8 +2,10 @@ package com.stardust.scriptdroid.ui.edit;
import android.content.Context;
import android.content.Intent;
import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toolbar;
import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.model.script.ScriptFile;
@@ -25,7 +27,6 @@ import static com.stardust.scriptdroid.ui.edit.EditorView.EXTRA_READ_ONLY;
@EActivity(R.layout.activity_edit)
public class EditActivity extends BaseActivity {
@ViewById(R.id.editor_view)
EditorView mEditor;
@@ -73,6 +74,16 @@ public class EditActivity extends BaseActivity {
return mEditorMenu.onOptionsItemSelected(item);
}
@Override
public void onActionModeStarted(ActionMode mode) {
Menu menu = mode.getMenu();
MenuItem item = menu.getItem(menu.size() - 1);
menu.add(item.getGroupId(), R.id.action_delete_line, 10000, R.string.text_delete_line);
menu.add(item.getGroupId(), R.id.action_copy_line, 20000, R.string.text_copy_line);
super.onActionModeStarted(mode);
}
@Override
public void finish() {
if (mEditor.isTextChanged()) {

View File

@@ -0,0 +1,61 @@
package com.stardust.scriptdroid.ui.edit;
import android.app.Activity;
import android.content.Intent;
import android.os.Build;
import android.support.v7.view.menu.MenuBuilder;
import android.support.v7.view.menu.MenuItemImpl;
import android.util.Log;
import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuItem;
import com.stardust.scriptdroid.R;
/**
* Created by Stardust on 2017/11/2.
*/
public class EditorActionModeCallback implements ActionMode.Callback {
private static final int ID_SELECT_ALL = 34275489;
private ActionMode.Callback mCallback;
private CodeMirrorEditor mEditor;
public EditorActionModeCallback(ActionMode.Callback callback, CodeMirrorEditor editor) {
mCallback = callback;
mEditor = editor;
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
return mCallback.onCreateActionMode(mode, menu);
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return mCallback.onPrepareActionMode(mode, menu);
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.action_delete_line:
mEditor.deleteLine();
return true;
case R.id.action_copy_line:
mEditor.copyLine();
mode.finish();
return true;
}
return mCallback.onActionItemClicked(mode, item);
}
@Override
public void onDestroyActionMode(ActionMode mode) {
mCallback.onDestroyActionMode(mode);
}
}

View File

@@ -213,15 +213,7 @@ public class EditorMenu {
}
private void copyLine() {
mEditor.getLine()
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<String>() {
@Override
public void accept(@NonNull String s) throws Exception {
ClipboardUtil.setClip(mContext, s);
Snackbar.make(mEditorView, R.string.text_already_copy_to_clip, Snackbar.LENGTH_SHORT).show();
}
});
mEditor.copyLine();
}