From d4d8f410611957373c62d462559a47c0e0125a09 Mon Sep 17 00:00:00 2001 From: Gregor Santner Date: Sat, 22 Jan 2022 11:47:17 +0100 Subject: [PATCH] Editor: Fix crash at activity state restoring, closes #1565, by @gsantner --- .../gsantner/markor/activity/DocumentActivity.java | 11 ++++++++++- .../markor/activity/DocumentEditFragment.java | 11 ++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/net/gsantner/markor/activity/DocumentActivity.java b/app/src/main/java/net/gsantner/markor/activity/DocumentActivity.java index 6a836cf03..323b89daf 100644 --- a/app/src/main/java/net/gsantner/markor/activity/DocumentActivity.java +++ b/app/src/main/java/net/gsantner/markor/activity/DocumentActivity.java @@ -135,6 +135,9 @@ public static void askUserIfWantsToOpenFileInThisApp(final Activity activity, fi protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); AppSettings.clearDebugLog(); + if (savedInstanceState != null && savedInstanceState.containsKey(DocumentEditFragment.SAVESTATE_DOCUMENT)) { + _document = (Document) savedInstanceState.getSerializable(DocumentEditFragment.SAVESTATE_DOCUMENT); + } if (nextLaunchTransparentBg) { //getWindow().getDecorView().setBackgroundColor(Color.TRANSPARENT); nextLaunchTransparentBg = false; @@ -264,7 +267,7 @@ public void showTextEditor(@Nullable Document document, @Nullable File file, boo boolean sameDocumentRequested = false; if (currentFragment instanceof DocumentEditFragment) { String reqPath = (reqFile != null) ? reqFile.getPath() : ""; - sameDocumentRequested = reqPath.equals(((DocumentEditFragment) currentFragment).getDocument().getPath()); + sameDocumentRequested = reqPath.equals(((DocumentEditFragment) currentFragment).getDocument(_document).getPath()); } if (!sameDocumentRequested) { @@ -359,4 +362,10 @@ private void onToolbarTitleClicked(View v) { def.onToolbarTitleClicked(_toolbar); } } + + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putSerializable(DocumentEditFragment.SAVESTATE_DOCUMENT, _document); + } } diff --git a/app/src/main/java/net/gsantner/markor/activity/DocumentEditFragment.java b/app/src/main/java/net/gsantner/markor/activity/DocumentEditFragment.java index 127ec0b02..054ac6bec 100644 --- a/app/src/main/java/net/gsantner/markor/activity/DocumentEditFragment.java +++ b/app/src/main/java/net/gsantner/markor/activity/DocumentEditFragment.java @@ -75,9 +75,8 @@ @SuppressWarnings({"UnusedReturnValue"}) @SuppressLint("NonConstantResourceId") public class DocumentEditFragment extends GsFragmentBase implements TextFormat.TextFormatApplier { - public static final int HISTORY_DELTA = 5000; public static final String FRAGMENT_TAG = "DocumentEditFragment"; - private static final String SAVESTATE_DOCUMENT = "DOCUMENT"; + public static final String SAVESTATE_DOCUMENT = "DOCUMENT"; private static final String SAVESTATE_CURSOR_POS = "CURSOR_POS"; private static final String SAVESTATE_PREVIEW_ON = "SAVESTATE_PREVIEW_ON"; @@ -818,7 +817,13 @@ public boolean onLongClick(View v) { // // - public Document getDocument() { + /** + * Get document of this fragment. if no document set yet, fallback to other passed instances (i.e. from onSavedInstanceState) + */ + public Document getDocument(Document... fallback) { + if (_document == null && fallback != null && fallback.length > 0 && fallback[0] != null) { + _document = fallback[0]; + } return _document; }