diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index 27f84a523b46..533a2196b4b9 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -3,6 +3,7 @@ 14.9 ----- +* [**] Block editor: Avoid crash when editor gets into invalid state * [*] Fix issue with Preview post not working after switching to classic editor from inside the post * [***] Block Editor: New block: Pullquote * [**] Block Editor: Add support for changing background and text color in Buttons block diff --git a/WordPress/src/main/java/org/wordpress/android/ui/posts/EditPostActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/posts/EditPostActivity.java index 7fd1637d5541..91230f54e862 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/posts/EditPostActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/posts/EditPostActivity.java @@ -63,6 +63,7 @@ import org.wordpress.android.editor.EditorImageSettingsListener; import org.wordpress.android.editor.EditorMediaUploadListener; import org.wordpress.android.editor.EditorMediaUtils; +import org.wordpress.android.editor.ExceptionLogger; import org.wordpress.android.editor.GutenbergEditorFragment; import org.wordpress.android.editor.ImageSettingsDialogFragment; import org.wordpress.android.fluxc.Dispatcher; @@ -226,7 +227,8 @@ public class EditPostActivity extends LocaleAwareActivity implements PostSettingsListDialogFragment.OnPostSettingsDialogFragmentListener, HistoryListFragment.HistoryItemClickInterface, EditPostSettingsCallback, - PrivateAtCookieProgressDialogOnDismissListener { + PrivateAtCookieProgressDialogOnDismissListener, + ExceptionLogger { public static final String ACTION_REBLOG = "reblogAction"; public static final String EXTRA_POST_LOCAL_ID = "postModelLocalId"; public static final String EXTRA_LOAD_AUTO_SAVE_REVISION = "loadAutosaveRevision"; @@ -3087,6 +3089,11 @@ public void syncPostObjectWithUiAndSaveIt(@Nullable OnPostUpdatedFromUIListener WPMediaUtils.advertiseImageOptimization(this, listener::invoke); } + @Override + public Consumer getExceptionLogger() { + return (Exception e) -> CrashLoggingUtils.logException(e, T.EDITOR); + } + private void updateAddingMediaToEditorProgressDialogState(ProgressDialogUiState uiState) { mAddingMediaToEditorProgressDialog = mProgressDialogHelper .updateProgressDialogState(this, mAddingMediaToEditorProgressDialog, uiState, mUiHelpers); diff --git a/libs/editor/WordPressEditor/src/main/java/org/wordpress/android/editor/ExceptionLogger.java b/libs/editor/WordPressEditor/src/main/java/org/wordpress/android/editor/ExceptionLogger.java new file mode 100644 index 000000000000..9ad7cf810f7f --- /dev/null +++ b/libs/editor/WordPressEditor/src/main/java/org/wordpress/android/editor/ExceptionLogger.java @@ -0,0 +1,7 @@ +package org.wordpress.android.editor; + +import androidx.core.util.Consumer; + +public interface ExceptionLogger { + Consumer getExceptionLogger(); +} diff --git a/libs/editor/WordPressEditor/src/main/java/org/wordpress/android/editor/GutenbergContainerFragment.java b/libs/editor/WordPressEditor/src/main/java/org/wordpress/android/editor/GutenbergContainerFragment.java index 14df597555be..a3ab05b2100e 100644 --- a/libs/editor/WordPressEditor/src/main/java/org/wordpress/android/editor/GutenbergContainerFragment.java +++ b/libs/editor/WordPressEditor/src/main/java/org/wordpress/android/editor/GutenbergContainerFragment.java @@ -3,6 +3,7 @@ import android.os.Bundle; import android.view.ViewGroup; +import androidx.core.util.Consumer; import androidx.fragment.app.Fragment; import org.wordpress.mobile.WPAndroidGlue.RequestExecutor; @@ -88,6 +89,11 @@ public void onCreate(Bundle savedInstanceState) { Bundle translations = getArguments().getBundle(ARG_TRANSLATIONS); boolean isDarkMode = getArguments().getBoolean(ARG_PREFERRED_COLOR_SCHEME); + Consumer exceptionLogger = null; + if (getActivity() instanceof ExceptionLogger) { + exceptionLogger = ((ExceptionLogger) getActivity()).getExceptionLogger(); + } + mWPAndroidGlueCode = new WPAndroidGlueCode(); mWPAndroidGlueCode.onCreate(getContext()); mWPAndroidGlueCode.onCreateView( @@ -101,7 +107,8 @@ public void onCreate(Bundle savedInstanceState) { localeString, translations, getContext().getResources().getColor(R.color.background_color), - isDarkMode); + isDarkMode, + exceptionLogger); // clear the content initialization flag since a new ReactRootView has been created; mHasReceivedAnyContent = false; diff --git a/libs/gutenberg-mobile b/libs/gutenberg-mobile index fe0b27e85f1d..63af45506a36 160000 --- a/libs/gutenberg-mobile +++ b/libs/gutenberg-mobile @@ -1 +1 @@ -Subproject commit fe0b27e85f1d8f460c2a36d88f8b6aa248f88c13 +Subproject commit 63af45506a36ddd2c54a28f1655a8c31014da2ba