feat(editor): auto restore text after screen orientation changed
This commit is contained in:
@@ -48,13 +48,8 @@ public class TaskerScriptEditActivity extends BaseActivity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void finish() {
|
public void finish() {
|
||||||
mEditorView.getEditor().getText().subscribe(new Consumer<String>() {
|
setResult(RESULT_OK, new Intent().putExtra(EXTRA_CONTENT, mEditorView.getEditor().getText()));
|
||||||
@Override
|
|
||||||
public void accept(@NonNull String s) throws Exception {
|
|
||||||
setResult(RESULT_OK, new Intent().putExtra(EXTRA_CONTENT, s));
|
|
||||||
TaskerScriptEditActivity.super.finish();
|
TaskerScriptEditActivity.super.finish();
|
||||||
}
|
}
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,15 +2,16 @@ package com.stardust.scriptdroid.ui.edit;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.os.Bundle;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.view.ActionMode;
|
import android.view.ActionMode;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.widget.Toolbar;
|
|
||||||
|
|
||||||
import com.stardust.app.OnActivityResultDelegate;
|
import com.stardust.app.OnActivityResultDelegate;
|
||||||
|
import com.stardust.pio.PFiles;
|
||||||
import com.stardust.scriptdroid.R;
|
import com.stardust.scriptdroid.R;
|
||||||
import com.stardust.scriptdroid.model.script.ScriptFile;
|
import com.stardust.scriptdroid.storage.file.TmpScriptFiles;
|
||||||
import com.stardust.scriptdroid.ui.BaseActivity;
|
import com.stardust.scriptdroid.ui.BaseActivity;
|
||||||
import com.stardust.theme.dialog.ThemeColorMaterialDialogBuilder;
|
import com.stardust.theme.dialog.ThemeColorMaterialDialogBuilder;
|
||||||
|
|
||||||
@@ -18,6 +19,13 @@ import org.androidannotations.annotations.AfterViews;
|
|||||||
import org.androidannotations.annotations.EActivity;
|
import org.androidannotations.annotations.EActivity;
|
||||||
import org.androidannotations.annotations.ViewById;
|
import org.androidannotations.annotations.ViewById;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import io.reactivex.Observable;
|
||||||
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||||
|
import io.reactivex.schedulers.Schedulers;
|
||||||
|
|
||||||
import static com.stardust.scriptdroid.ui.edit.EditorView.EXTRA_CONTENT;
|
import static com.stardust.scriptdroid.ui.edit.EditorView.EXTRA_CONTENT;
|
||||||
import static com.stardust.scriptdroid.ui.edit.EditorView.EXTRA_NAME;
|
import static com.stardust.scriptdroid.ui.edit.EditorView.EXTRA_NAME;
|
||||||
import static com.stardust.scriptdroid.ui.edit.EditorView.EXTRA_PATH;
|
import static com.stardust.scriptdroid.ui.edit.EditorView.EXTRA_PATH;
|
||||||
@@ -32,7 +40,7 @@ public class EditActivity extends BaseActivity implements OnActivityResultDelega
|
|||||||
private OnActivityResultDelegate.Mediator mMediator = new OnActivityResultDelegate.Mediator();
|
private OnActivityResultDelegate.Mediator mMediator = new OnActivityResultDelegate.Mediator();
|
||||||
|
|
||||||
@ViewById(R.id.editor_view)
|
@ViewById(R.id.editor_view)
|
||||||
EditorView mEditor;
|
EditorView mEditorView;
|
||||||
|
|
||||||
|
|
||||||
private EditorMenu mEditorMenu;
|
private EditorMenu mEditorMenu;
|
||||||
@@ -58,13 +66,13 @@ public class EditActivity extends BaseActivity implements OnActivityResultDelega
|
|||||||
|
|
||||||
@AfterViews
|
@AfterViews
|
||||||
void setUpViews() {
|
void setUpViews() {
|
||||||
mEditor.handleIntent(getIntent());
|
mEditorView.handleIntent(getIntent());
|
||||||
mEditorMenu = new EditorMenu(mEditor);
|
mEditorMenu = new EditorMenu(mEditorView);
|
||||||
setUpToolbar();
|
setUpToolbar();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setUpToolbar() {
|
private void setUpToolbar() {
|
||||||
BaseActivity.setToolbarAsBack(this, R.id.toolbar, mEditor.getName());
|
BaseActivity.setToolbarAsBack(this, R.id.toolbar, mEditorView.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -90,14 +98,14 @@ public class EditActivity extends BaseActivity implements OnActivityResultDelega
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBackPressed() {
|
public void onBackPressed() {
|
||||||
if (!mEditor.onBackPressed()) {
|
if (!mEditorView.onBackPressed()) {
|
||||||
super.onBackPressed();
|
super.onBackPressed();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void finish() {
|
public void finish() {
|
||||||
if (mEditor.isTextChanged()) {
|
if (mEditorView.isTextChanged()) {
|
||||||
showExitConfirmDialog();
|
showExitConfirmDialog();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -112,7 +120,7 @@ public class EditActivity extends BaseActivity implements OnActivityResultDelega
|
|||||||
.negativeText(R.string.text_save_and_exit)
|
.negativeText(R.string.text_save_and_exit)
|
||||||
.neutralText(R.string.text_exit_directly)
|
.neutralText(R.string.text_exit_directly)
|
||||||
.onNegative((dialog, which) -> {
|
.onNegative((dialog, which) -> {
|
||||||
mEditor.saveFile();
|
mEditorView.saveFile();
|
||||||
EditActivity.super.finish();
|
EditActivity.super.finish();
|
||||||
})
|
})
|
||||||
.onNeutral((dialog, which) -> EditActivity.super.finish())
|
.onNeutral((dialog, which) -> EditActivity.super.finish())
|
||||||
@@ -134,4 +142,54 @@ public class EditActivity extends BaseActivity implements OnActivityResultDelega
|
|||||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||||
mMediator.onActivityResult(requestCode, resultCode, data);
|
mMediator.onActivityResult(requestCode, resultCode, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onSaveInstanceState(Bundle outState) {
|
||||||
|
super.onSaveInstanceState(outState);
|
||||||
|
if (!mEditorView.isTextChanged()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String text = mEditorView.getEditor().getText();
|
||||||
|
if (text.length() < 256 * 1024) {
|
||||||
|
outState.putString("text", text);
|
||||||
|
} else {
|
||||||
|
File tmp = saveToTmpFile(text);
|
||||||
|
if (tmp != null) {
|
||||||
|
outState.putString("path", tmp.getPath());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private File saveToTmpFile(String text) {
|
||||||
|
try {
|
||||||
|
File tmp = TmpScriptFiles.create(this);
|
||||||
|
Observable.just(text)
|
||||||
|
.observeOn(Schedulers.io())
|
||||||
|
.subscribe(t -> PFiles.write(tmp, t));
|
||||||
|
return tmp;
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onRestoreInstanceState(Bundle savedInstanceState) {
|
||||||
|
super.onRestoreInstanceState(savedInstanceState);
|
||||||
|
String text = savedInstanceState.getString("text");
|
||||||
|
if (text != null) {
|
||||||
|
mEditorView.setRestoredText(text);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String path = savedInstanceState.getString("path");
|
||||||
|
if (path != null) {
|
||||||
|
Observable.just(path)
|
||||||
|
.observeOn(Schedulers.io())
|
||||||
|
.map(PFiles::read)
|
||||||
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.subscribe(t -> mEditorView.getEditor().setText(t), Throwable::printStackTrace);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -156,7 +156,7 @@ public class EditorMenu {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void showInfo() {
|
private void showInfo() {
|
||||||
Observable.zip(mEditor.getText(), mEditor.getLineCount(), (text, lineCount) -> {
|
Observable.zip(Observable.just(mEditor.getText()), mEditor.getLineCount(), (text, lineCount) -> {
|
||||||
String size = PFiles.getHumanReadableSize(text.length());
|
String size = PFiles.getHumanReadableSize(text.length());
|
||||||
return String.format(Locale.getDefault(), mContext.getString(R.string.format_editor_info),
|
return String.format(Locale.getDefault(), mContext.getString(R.string.format_editor_info),
|
||||||
text.length(), lineCount, size);
|
text.length(), lineCount, size);
|
||||||
@@ -198,14 +198,9 @@ public class EditorMenu {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void copyAll() {
|
private void copyAll() {
|
||||||
mEditor.getText().observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<String>() {
|
ClipboardUtil.setClip(mContext, mEditor.getText());
|
||||||
@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();
|
Snackbar.make(mEditorView, R.string.text_already_copy_to_clip, Snackbar.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private void showLog() {
|
private void showLog() {
|
||||||
|
|||||||
@@ -126,6 +126,7 @@ public class EditorView extends FrameLayout implements CodeCompletionBar.OnHintC
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
private String mRestoredText;
|
||||||
|
|
||||||
public EditorView(Context context) {
|
public EditorView(Context context) {
|
||||||
super(context);
|
super(context);
|
||||||
@@ -178,6 +179,11 @@ public class EditorView extends FrameLayout implements CodeCompletionBar.OnHintC
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setRestoredText(String text) {
|
||||||
|
mRestoredText = text;
|
||||||
|
mEditor.setText(text);
|
||||||
|
}
|
||||||
|
|
||||||
private void handleText(Intent intent) {
|
private void handleText(Intent intent) {
|
||||||
String path = intent.getStringExtra(EXTRA_PATH);
|
String path = intent.getStringExtra(EXTRA_PATH);
|
||||||
String content = intent.getStringExtra(EXTRA_CONTENT);
|
String content = intent.getStringExtra(EXTRA_CONTENT);
|
||||||
@@ -209,6 +215,11 @@ public class EditorView extends FrameLayout implements CodeCompletionBar.OnHintC
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void setInitialText(String text) {
|
private void setInitialText(String text) {
|
||||||
|
if (mRestoredText != null) {
|
||||||
|
mEditor.setText(mRestoredText);
|
||||||
|
mRestoredText = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
mEditor.setInitialText(text);
|
mEditor.setInitialText(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -313,7 +324,7 @@ public class EditorView extends FrameLayout implements CodeCompletionBar.OnHintC
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Observable<String> save() {
|
public Observable<String> save() {
|
||||||
return mEditor.getText()
|
return Observable.just(mEditor.getText())
|
||||||
.observeOn(Schedulers.io())
|
.observeOn(Schedulers.io())
|
||||||
.doOnNext(s -> PFiles.write(mFile, s))
|
.doOnNext(s -> PFiles.write(mFile, s))
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
@@ -499,4 +510,6 @@ public class EditorView extends FrameLayout implements CodeCompletionBar.OnHintC
|
|||||||
showManual(property.getUrl(), property.getKey());
|
showManual(property.getUrl(), property.getKey());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import android.graphics.Canvas;
|
|||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.graphics.Paint;
|
import android.graphics.Paint;
|
||||||
import android.graphics.Typeface;
|
import android.graphics.Typeface;
|
||||||
|
import android.os.Parcelable;
|
||||||
import android.support.v7.widget.AppCompatEditText;
|
import android.support.v7.widget.AppCompatEditText;
|
||||||
import android.text.Editable;
|
import android.text.Editable;
|
||||||
import android.text.Layout;
|
import android.text.Layout;
|
||||||
@@ -352,4 +353,5 @@ public class CodeEditText extends AppCompatEditText {
|
|||||||
}
|
}
|
||||||
super.setSelection(index);
|
super.setSelection(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -311,8 +311,8 @@ public class CodeEditor extends HVScrollView {
|
|||||||
mCodeEditText.setSelection(mCodeEditText.getSelectionStart() + dCh);
|
mCodeEditText.setSelection(mCodeEditText.getSelectionStart() + dCh);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Observable<String> getText() {
|
public String getText() {
|
||||||
return Observable.just(mCodeEditText.getText().toString());
|
return mCodeEditText.getText().toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Observable<String> getSelection() {
|
public Observable<String> getSelection() {
|
||||||
|
|||||||
Reference in New Issue
Block a user