feat(editor): auto restore text after screen orientation changed
This commit is contained in:
@@ -48,13 +48,8 @@ public class TaskerScriptEditActivity extends BaseActivity {
|
||||
|
||||
@Override
|
||||
public void finish() {
|
||||
mEditorView.getEditor().getText().subscribe(new Consumer<String>() {
|
||||
@Override
|
||||
public void accept(@NonNull String s) throws Exception {
|
||||
setResult(RESULT_OK, new Intent().putExtra(EXTRA_CONTENT, s));
|
||||
TaskerScriptEditActivity.super.finish();
|
||||
}
|
||||
});
|
||||
setResult(RESULT_OK, new Intent().putExtra(EXTRA_CONTENT, mEditorView.getEditor().getText()));
|
||||
TaskerScriptEditActivity.super.finish();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -2,15 +2,16 @@ package com.stardust.scriptdroid.ui.edit;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.view.ActionMode;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.widget.Toolbar;
|
||||
|
||||
import com.stardust.app.OnActivityResultDelegate;
|
||||
import com.stardust.pio.PFiles;
|
||||
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.theme.dialog.ThemeColorMaterialDialogBuilder;
|
||||
|
||||
@@ -18,6 +19,13 @@ import org.androidannotations.annotations.AfterViews;
|
||||
import org.androidannotations.annotations.EActivity;
|
||||
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_NAME;
|
||||
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();
|
||||
|
||||
@ViewById(R.id.editor_view)
|
||||
EditorView mEditor;
|
||||
EditorView mEditorView;
|
||||
|
||||
|
||||
private EditorMenu mEditorMenu;
|
||||
@@ -58,13 +66,13 @@ public class EditActivity extends BaseActivity implements OnActivityResultDelega
|
||||
|
||||
@AfterViews
|
||||
void setUpViews() {
|
||||
mEditor.handleIntent(getIntent());
|
||||
mEditorMenu = new EditorMenu(mEditor);
|
||||
mEditorView.handleIntent(getIntent());
|
||||
mEditorMenu = new EditorMenu(mEditorView);
|
||||
setUpToolbar();
|
||||
}
|
||||
|
||||
private void setUpToolbar() {
|
||||
BaseActivity.setToolbarAsBack(this, R.id.toolbar, mEditor.getName());
|
||||
BaseActivity.setToolbarAsBack(this, R.id.toolbar, mEditorView.getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -90,14 +98,14 @@ public class EditActivity extends BaseActivity implements OnActivityResultDelega
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
if (!mEditor.onBackPressed()) {
|
||||
if (!mEditorView.onBackPressed()) {
|
||||
super.onBackPressed();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void finish() {
|
||||
if (mEditor.isTextChanged()) {
|
||||
if (mEditorView.isTextChanged()) {
|
||||
showExitConfirmDialog();
|
||||
return;
|
||||
}
|
||||
@@ -112,7 +120,7 @@ public class EditActivity extends BaseActivity implements OnActivityResultDelega
|
||||
.negativeText(R.string.text_save_and_exit)
|
||||
.neutralText(R.string.text_exit_directly)
|
||||
.onNegative((dialog, which) -> {
|
||||
mEditor.saveFile();
|
||||
mEditorView.saveFile();
|
||||
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) {
|
||||
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() {
|
||||
Observable.zip(mEditor.getText(), mEditor.getLineCount(), (text, lineCount) -> {
|
||||
Observable.zip(Observable.just(mEditor.getText()), mEditor.getLineCount(), (text, lineCount) -> {
|
||||
String size = PFiles.getHumanReadableSize(text.length());
|
||||
return String.format(Locale.getDefault(), mContext.getString(R.string.format_editor_info),
|
||||
text.length(), lineCount, size);
|
||||
@@ -198,13 +198,8 @@ public class EditorMenu {
|
||||
}
|
||||
|
||||
private void copyAll() {
|
||||
mEditor.getText().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();
|
||||
}
|
||||
});
|
||||
ClipboardUtil.setClip(mContext, mEditor.getText());
|
||||
Snackbar.make(mEditorView, R.string.text_already_copy_to_clip, Snackbar.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -126,6 +126,7 @@ public class EditorView extends FrameLayout implements CodeCompletionBar.OnHintC
|
||||
}
|
||||
}
|
||||
};
|
||||
private String mRestoredText;
|
||||
|
||||
public EditorView(Context 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) {
|
||||
String path = intent.getStringExtra(EXTRA_PATH);
|
||||
String content = intent.getStringExtra(EXTRA_CONTENT);
|
||||
@@ -209,6 +215,11 @@ public class EditorView extends FrameLayout implements CodeCompletionBar.OnHintC
|
||||
}
|
||||
|
||||
private void setInitialText(String text) {
|
||||
if (mRestoredText != null) {
|
||||
mEditor.setText(mRestoredText);
|
||||
mRestoredText = null;
|
||||
return;
|
||||
}
|
||||
mEditor.setInitialText(text);
|
||||
}
|
||||
|
||||
@@ -313,7 +324,7 @@ public class EditorView extends FrameLayout implements CodeCompletionBar.OnHintC
|
||||
}
|
||||
|
||||
public Observable<String> save() {
|
||||
return mEditor.getText()
|
||||
return Observable.just(mEditor.getText())
|
||||
.observeOn(Schedulers.io())
|
||||
.doOnNext(s -> PFiles.write(mFile, s))
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
@@ -499,4 +510,6 @@ public class EditorView extends FrameLayout implements CodeCompletionBar.OnHintC
|
||||
showManual(property.getUrl(), property.getKey());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.Typeface;
|
||||
import android.os.Parcelable;
|
||||
import android.support.v7.widget.AppCompatEditText;
|
||||
import android.text.Editable;
|
||||
import android.text.Layout;
|
||||
@@ -352,4 +353,5 @@ public class CodeEditText extends AppCompatEditText {
|
||||
}
|
||||
super.setSelection(index);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -311,8 +311,8 @@ public class CodeEditor extends HVScrollView {
|
||||
mCodeEditText.setSelection(mCodeEditText.getSelectionStart() + dCh);
|
||||
}
|
||||
|
||||
public Observable<String> getText() {
|
||||
return Observable.just(mCodeEditText.getText().toString());
|
||||
public String getText() {
|
||||
return mCodeEditText.getText().toString();
|
||||
}
|
||||
|
||||
public Observable<String> getSelection() {
|
||||
|
||||
Reference in New Issue
Block a user