Skip to content

Commit 195ad93

Browse files
committed
Revert "Implement GutenbergKit ViewModel Architecture (#22087)" (#22127)
This reverts commit 890d484.
1 parent 373c074 commit 195ad93

File tree

6 files changed

+78
-170
lines changed

6 files changed

+78
-170
lines changed

WordPress/src/main/java/org/wordpress/android/modules/AppComponent.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,6 @@
9090
import org.wordpress.android.ui.posts.EditPostActivity;
9191
import org.wordpress.android.ui.posts.EditPostPublishSettingsFragment;
9292
import org.wordpress.android.ui.posts.EditPostSettingsFragment;
93-
import org.wordpress.android.ui.posts.editor.GutenbergKitEditorFragment;
9493
import org.wordpress.android.ui.posts.HistoryListFragment;
9594
import org.wordpress.android.ui.posts.PostDatePickerDialogFragment;
9695
import org.wordpress.android.ui.posts.PostListFragment;
@@ -274,8 +273,6 @@ public interface AppComponent {
274273

275274
void inject(EditPostSettingsFragment object);
276275

277-
void inject(GutenbergKitEditorFragment object);
278-
279276
void inject(PostSettingsListDialogFragment object);
280277

281278
void inject(PostsListActivity object);

WordPress/src/main/java/org/wordpress/android/modules/ViewModelModule.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
import org.wordpress.android.ui.posts.EditPostPublishSettingsViewModel;
3636
import org.wordpress.android.ui.posts.EditorBloggingPromptsViewModel;
3737
import org.wordpress.android.ui.posts.EditorJetpackSocialViewModel;
38-
import org.wordpress.android.ui.posts.GutenbergKitViewModel;
3938
import org.wordpress.android.ui.posts.navigation.EditPostNavigationViewModel;
4039
import org.wordpress.android.ui.posts.EditPostSettingsViewModel;
4140
import org.wordpress.android.ui.posts.PostListMainViewModel;
@@ -308,11 +307,6 @@ abstract class ViewModelModule {
308307
@ViewModelKey(EditPostSettingsViewModel.class)
309308
abstract ViewModel editPostSettingsViewModel(EditPostSettingsViewModel viewModel);
310309

311-
@Binds
312-
@IntoMap
313-
@ViewModelKey(GutenbergKitViewModel.class)
314-
abstract ViewModel gutenbergKitViewModel(GutenbergKitViewModel viewModel);
315-
316310
@Binds
317311
@IntoMap
318312
@ViewModelKey(ReaderCommentListViewModel.class)

WordPress/src/main/java/org/wordpress/android/ui/posts/EditPostActivity.kt

Lines changed: 21 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -434,7 +434,6 @@ class EditPostActivity : BaseAppCompatActivity(), EditorFragmentActivity, Editor
434434
private lateinit var editPostSettingsViewModel: EditPostSettingsViewModel
435435
private lateinit var prepublishingViewModel: PrepublishingViewModel
436436
private lateinit var editPostAuthViewModel: EditPostAuthViewModel
437-
private lateinit var gutenbergKitViewModel: GutenbergKitViewModel
438437

439438
private lateinit var siteModel: SiteModel
440439

@@ -653,7 +652,6 @@ class EditPostActivity : BaseAppCompatActivity(), EditorFragmentActivity, Editor
653652
editPostSettingsViewModel = ViewModelProvider(this, viewModelFactory)[EditPostSettingsViewModel::class.java]
654653
prepublishingViewModel = ViewModelProvider(this, viewModelFactory)[PrepublishingViewModel::class.java]
655654
editPostAuthViewModel = ViewModelProvider(this, viewModelFactory)[EditPostAuthViewModel::class.java]
656-
gutenbergKitViewModel = ViewModelProvider(this, viewModelFactory)[GutenbergKitViewModel::class.java]
657655
}
658656

659657
private fun initializeSiteModel(savedInstanceState: Bundle?): Boolean {
@@ -2617,17 +2615,13 @@ class EditPostActivity : BaseAppCompatActivity(), EditorFragmentActivity, Editor
26172615
val gutenbergWebViewAuthorizationData = createGutenbergWebViewAuthorizationData(isWpCom)
26182616
val settings = createGutenbergKitSettings(isWpCom)
26192617

2620-
val fragment = GutenbergKitEditorFragment.newInstance(
2618+
return GutenbergKitEditorFragment.newInstance(
26212619
getContext(),
26222620
isNewPost,
26232621
gutenbergWebViewAuthorizationData,
26242622
jetpackFeatureRemovalPhaseHelper.shouldShowJetpackPoweredEditorFeatures(),
2623+
settings
26252624
)
2626-
2627-
// Set settings in ViewModel for fragment to observe
2628-
gutenbergKitViewModel.updateEditorSettings(settings)
2629-
2630-
return fragment
26312625
}
26322626

26332627
private fun createGutenbergWebViewAuthorizationData(isWpCom: Boolean): GutenbergWebViewAuthorizationData {
@@ -2647,35 +2641,36 @@ class EditPostActivity : BaseAppCompatActivity(), EditorFragmentActivity, Editor
26472641
)
26482642
}
26492643

2650-
private fun createGutenbergKitSettings(isWpCom: Boolean): GutenbergKitSettings {
2644+
private fun createGutenbergKitSettings(isWpCom: Boolean): MutableMap<String, Any?> {
26512645
val postType = if (editPostRepository.isPage) "page" else "post"
26522646
val siteURL = siteModel.url
26532647
val siteApiRoot = if (isWpCom) "https://public-api.wordpress.com/"
26542648
else siteModel.wpApiRestUrl ?: "$siteURL/wp-json/"
26552649
// Use the application password for self-hosted sites when available
26562650
val authHeader = if (isWpCom) "Bearer ${accountStore.accessToken}" else "Basic "
26572651
val siteApiNamespace = if (isWpCom)
2658-
listOf("sites/${site.siteId}/", "sites/${UrlUtils.removeScheme(siteURL)}/")
2659-
else emptyList()
2652+
arrayOf("sites/${site.siteId}/", "sites/${UrlUtils.removeScheme(siteURL)}/")
2653+
else arrayOf()
26602654

26612655
val languageString = perAppLocaleManager.getCurrentLocaleLanguageCode()
26622656
val wpcomLocaleSlug = languageString.replace("_", "-").lowercase()
26632657

2664-
return GutenbergKitSettings(
2665-
postId = editPostRepository.getPost()?.remotePostId?.toInt(),
2666-
postType = postType,
2667-
postTitle = editPostRepository.getPost()?.title,
2668-
postContent = editPostRepository.getPost()?.content,
2669-
siteURL = siteURL,
2670-
siteApiRoot = siteApiRoot,
2671-
namespaceExcludedPaths = listOf("/wpcom/v2/following/recommendations", "/wpcom/v2/following/mine"),
2672-
authHeader = authHeader,
2673-
siteApiNamespace = siteApiNamespace,
2674-
themeStyles = experimentalFeatures.isEnabled(Feature.EXPERIMENTAL_BLOCK_EDITOR_THEME_STYLES),
2675-
plugins = gutenbergKitPluginsFeature.isEnabled() && site.isWPCom,
2676-
locale = wpcomLocaleSlug,
2677-
cookies = editPostAuthViewModel.getCookiesForPrivateSites(site, privateAtomicCookie),
2678-
webViewGlobals = listOf(
2658+
return mutableMapOf(
2659+
"postId" to editPostRepository.getPost()?.remotePostId?.toInt(),
2660+
"postType" to postType,
2661+
"postTitle" to editPostRepository.getPost()?.title,
2662+
"postContent" to editPostRepository.getPost()?.content,
2663+
"siteURL" to siteURL,
2664+
"siteApiRoot" to siteApiRoot,
2665+
"namespaceExcludedPaths" to arrayOf("/wpcom/v2/following/recommendations", "/wpcom/v2/following/mine"),
2666+
"authHeader" to authHeader,
2667+
"siteApiNamespace" to siteApiNamespace,
2668+
"themeStyles" to experimentalFeatures.isEnabled(Feature.EXPERIMENTAL_BLOCK_EDITOR_THEME_STYLES),
2669+
// Limited to Simple sites until application passwords are supported
2670+
"plugins" to (gutenbergKitPluginsFeature.isEnabled() && site.isWPCom),
2671+
"locale" to wpcomLocaleSlug,
2672+
"cookies" to editPostAuthViewModel.getCookiesForPrivateSites(site, privateAtomicCookie),
2673+
"webViewGlobals" to listOf(
26792674
WebViewGlobal(
26802675
"_currentSiteType",
26812676
when {

WordPress/src/main/java/org/wordpress/android/ui/posts/GutenbergKitViewModel.kt

Lines changed: 0 additions & 45 deletions
This file was deleted.

WordPress/src/main/java/org/wordpress/android/ui/posts/editor/GutenbergKitEditorFragment.kt

Lines changed: 57 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -50,19 +50,13 @@ import org.wordpress.gutenberg.GutenbergView.TitleAndContentCallback
5050
import org.wordpress.gutenberg.GutenbergWebViewPool.getPreloadedWebView
5151
import org.wordpress.gutenberg.GutenbergWebViewPool.recycleWebView
5252
import org.wordpress.gutenberg.Media
53+
import org.wordpress.gutenberg.WebViewGlobal
54+
import java.io.Serializable
5355
import java.util.concurrent.CountDownLatch
54-
import androidx.lifecycle.ViewModelProvider
55-
import org.wordpress.android.ui.posts.GutenbergKitSettings
56-
import org.wordpress.android.ui.posts.GutenbergKitViewModel
57-
import org.wordpress.android.WordPress
58-
import javax.inject.Inject
5956

6057
class GutenbergKitEditorFragment : EditorFragmentAbstract(), EditorMediaUploadListener, IHistoryListener,
6158
EditorThemeUpdateListener, GutenbergDialogPositiveClickInterface, GutenbergDialogNegativeClickInterface,
6259
GutenbergNetworkConnectionListener {
63-
@Inject lateinit var viewModelFactory: ViewModelProvider.Factory
64-
private lateinit var gutenbergKitViewModel: GutenbergKitViewModel
65-
6660
private var gutenbergView: GutenbergView? = null
6761
private var isHtmlModeEnabled = false
6862

@@ -77,29 +71,12 @@ class GutenbergKitEditorFragment : EditorFragmentAbstract(), EditorMediaUploadLi
7771
private var rootView: View? = null
7872
private var isXPostsEnabled: Boolean = false
7973

80-
// Access settings through ViewModel
81-
private val settings: GutenbergKitSettings?
82-
get() = if (::gutenbergKitViewModel.isInitialized) {
83-
gutenbergKitViewModel.editorSettings.value
84-
} else {
85-
null
86-
}
87-
8874
override fun onCreate(savedInstanceState: Bundle?) {
8975
super.onCreate(savedInstanceState)
9076

9177
ProfilingUtils.start("Visual Editor Startup")
9278
ProfilingUtils.split("EditorFragment.onCreate")
9379

94-
// Trigger dependency injection
95-
(requireActivity().applicationContext as WordPress).component().inject(this)
96-
97-
// Initialize shared ViewModel (same scope as Activity) - after DI is complete
98-
gutenbergKitViewModel = ViewModelProvider(
99-
requireActivity(),
100-
viewModelFactory
101-
)[GutenbergKitViewModel::class.java]
102-
10380
if (savedInstanceState != null) {
10481
isHtmlModeEnabled = savedInstanceState.getBoolean(KEY_HTML_MODE_ENABLED)
10582
isEditorStarted = savedInstanceState.getBoolean(KEY_EDITOR_STARTED)
@@ -111,6 +88,11 @@ class GutenbergKitEditorFragment : EditorFragmentAbstract(), EditorMediaUploadLi
11188
override fun onCreateView(
11289
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
11390
): View? {
91+
if (arguments != null) {
92+
@Suppress("UNCHECKED_CAST", "DEPRECATION")
93+
settings = requireArguments().getSerializable(ARG_GUTENBERG_KIT_SETTINGS) as Map<String, Any?>?
94+
}
95+
11496
// request dependency injection. Do this after setting min/max dimensions
11597
if (activity is EditorFragmentActivity) {
11698
(activity as EditorFragmentActivity).initializeEditorFragment()
@@ -261,6 +243,17 @@ class GutenbergKitEditorFragment : EditorFragmentAbstract(), EditorMediaUploadLi
261243
}
262244
}
263245

246+
// Type-safe settings accessors
247+
private inline fun <reified T> Map<String, Any?>.getSetting(key: String): T? = this[key] as? T
248+
private inline fun <reified T> Map<String, Any?>.getSettingOrDefault(key: String, default: T): T =
249+
getSetting(key) ?: default
250+
251+
private fun Map<String, Any?>.getStringArray(key: String): Array<String> =
252+
getSetting<Array<String?>>(key)?.asSequence()?.filterNotNull()?.toList()?.toTypedArray() ?: emptyArray()
253+
254+
private fun Map<String, Any?>.getWebViewGlobals(key: String): List<WebViewGlobal> =
255+
getSetting<List<WebViewGlobal>>(key) ?: emptyList()
256+
264257
// View extension functions
265258
private fun View?.setVisibleOrGone(visible: Boolean) {
266259
this?.visibility = if (visible) View.VISIBLE else View.GONE
@@ -554,31 +547,39 @@ class GutenbergKitEditorFragment : EditorFragmentAbstract(), EditorMediaUploadLi
554547
}
555548

556549
private fun buildEditorConfiguration(editorSettings: String): EditorConfiguration {
557-
val kitSettings = settings!!
558-
559-
val postId = kitSettings.postId?.let { if (it == 0) -1 else it }
560-
val firstNamespace = kitSettings.siteApiNamespace.firstOrNull() ?: ""
561-
val editorAssetsEndpoint = "${kitSettings.siteApiRoot}wpcom/v2/${firstNamespace}editor-assets"
562-
563-
return EditorConfiguration.Builder()
564-
.setTitle(kitSettings.postTitle ?: "")
565-
.setContent(kitSettings.postContent ?: "")
566-
.setPostId(postId)
567-
.setPostType(kitSettings.postType)
568-
.setThemeStyles(kitSettings.themeStyles)
569-
.setPlugins(kitSettings.plugins)
570-
.setSiteApiRoot(kitSettings.siteApiRoot)
571-
.setSiteApiNamespace(kitSettings.siteApiNamespace.toTypedArray())
572-
.setNamespaceExcludedPaths(kitSettings.namespaceExcludedPaths.toTypedArray())
573-
.setAuthHeader(kitSettings.authHeader)
574-
.setWebViewGlobals(kitSettings.webViewGlobals)
575-
.setEditorSettings(editorSettings)
576-
.setLocale(kitSettings.locale)
577-
.setEditorAssetsEndpoint(editorAssetsEndpoint)
578-
.setCachedAssetHosts(setOf("s0.wp.com", UrlUtils.getHost(kitSettings.siteURL)))
579-
.setEnableAssetCaching(true)
580-
.setCookies(kitSettings.cookies)
581-
.build()
550+
val settingsMap = settings!!
551+
552+
return settingsMap.run {
553+
val postId = getSetting<Int>("postId").let { if (it == 0) -1 else it }
554+
val siteURL = getSetting<String>("siteURL")
555+
val siteApiRoot = getSetting<String>("siteApiRoot")
556+
val siteApiNamespace = getStringArray("siteApiNamespace")
557+
val firstNamespace = siteApiNamespace.firstOrNull() ?: ""
558+
val editorAssetsEndpoint = "${siteApiRoot}wpcom/v2/${firstNamespace}editor-assets"
559+
val cookies = getSetting<Map<String, String>>("cookies") ?: emptyMap()
560+
val namespaceExcludedPaths = getStringArray("namespaceExcludedPaths")
561+
val webViewGlobals = getWebViewGlobals("webViewGlobals")
562+
563+
EditorConfiguration.Builder()
564+
.setTitle(getSetting<String>("postTitle") ?: "")
565+
.setContent(getSetting<String>("postContent") ?: "")
566+
.setPostId(postId)
567+
.setPostType(getSetting<String>("postType"))
568+
.setThemeStyles(getSettingOrDefault("themeStyles", false))
569+
.setPlugins(getSettingOrDefault("plugins", false))
570+
.setSiteApiRoot(getSetting<String>("siteApiRoot") ?: "")
571+
.setSiteApiNamespace(siteApiNamespace)
572+
.setNamespaceExcludedPaths(namespaceExcludedPaths)
573+
.setAuthHeader(getSetting<String>("authHeader") ?: "")
574+
.setWebViewGlobals(webViewGlobals)
575+
.setEditorSettings(editorSettings)
576+
.setLocale(getSetting<String>("locale"))
577+
.setEditorAssetsEndpoint(editorAssetsEndpoint)
578+
.setCachedAssetHosts(setOf("s0.wp.com", UrlUtils.getHost(siteURL)))
579+
.setEnableAssetCaching(true)
580+
.setCookies(cookies)
581+
.build()
582+
}
582583
}
583584

584585
override fun showNotice(message: String?) {
@@ -618,22 +619,28 @@ class GutenbergKitEditorFragment : EditorFragmentAbstract(), EditorMediaUploadLi
618619
private const val ARG_GUTENBERG_WEB_VIEW_AUTH_DATA = "param_gutenberg_web_view_auth_data"
619620
const val ARG_FEATURED_IMAGE_ID: String = "featured_image_id"
620621
const val ARG_JETPACK_FEATURES_ENABLED: String = "jetpack_features_enabled"
622+
const val ARG_GUTENBERG_KIT_SETTINGS: String = "gutenberg_kit_settings"
621623

622624
private const val CAPTURE_PHOTO_PERMISSION_REQUEST_CODE = 101
623625
private const val CAPTURE_VIDEO_PERMISSION_REQUEST_CODE = 102
624626

627+
private var settings: Map<String, Any?>? = null
628+
625629
fun newInstance(
626630
context: Context,
627631
isNewPost: Boolean,
628632
webViewAuthorizationData: GutenbergWebViewAuthorizationData?,
629633
jetpackFeaturesEnabled: Boolean,
634+
settings: Map<String, Any?>?
630635
): GutenbergKitEditorFragment {
631636
val fragment = GutenbergKitEditorFragment()
632637
val args = Bundle()
633638
args.putBoolean(ARG_IS_NEW_POST, isNewPost)
634639
args.putBoolean(ARG_JETPACK_FEATURES_ENABLED, jetpackFeaturesEnabled)
640+
args.putSerializable(ARG_GUTENBERG_KIT_SETTINGS, settings as Serializable?)
635641
fragment.setArguments(args)
636642
val db = getDatabase(context)
643+
GutenbergKitEditorFragment.settings = settings
637644
db?.addParcel(ARG_GUTENBERG_WEB_VIEW_AUTH_DATA, webViewAuthorizationData)
638645
return fragment
639646
}

WordPress/src/test/java/org/wordpress/android/ui/posts/GutenbergKitViewModelTest.kt

Lines changed: 0 additions & 40 deletions
This file was deleted.

0 commit comments

Comments
 (0)