Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
b0f6d19
started PageListDialogHelper
jd-alexander Feb 1, 2020
def1b79
added logic to edit local or auto revision version.
jd-alexander Feb 3, 2020
3dfcfa1
refactored delete dialog implementation
jd-alexander Feb 3, 2020
abff27e
added logic to enable auto revision checks
jd-alexander Feb 3, 2020
7087c23
refactored parameter name since type provides enough context.
jd-alexander Feb 3, 2020
bc5d7a4
style changes.
jd-alexander Feb 3, 2020
41b5d04
used names for pair and fixed activity launcher function.
jd-alexander Feb 4, 2020
c1193eb
dialog now says page instead of post for auto revision
jd-alexander Feb 4, 2020
e9c140f
added page title to delete dialog.
jd-alexander Feb 4, 2020
dc26429
fixed style errors.
jd-alexander Feb 4, 2020
45cc77d
style fixes.
jd-alexander Feb 4, 2020
09eef06
utilize page that is stored in pageMap to perform edit.
jd-alexander Feb 4, 2020
6ca5d59
changed post to page for more clarity and consistency.
jd-alexander Feb 4, 2020
fd53523
Merge branch 'feature/master-pages-offline-support' into issue-11131/…
jd-alexander Feb 4, 2020
42a636a
fixed a minor test issue with viewmodel initialization
jd-alexander Feb 4, 2020
98946e5
fixed formatting issue.
jd-alexander Feb 4, 2020
f6cbb9f
refactored naming of click actions.
jd-alexander Feb 4, 2020
28a76e4
added an exception to the else clause of this event; fail fast principle
jd-alexander Feb 10, 2020
aa7d8db
removed isPage from function parameter and used the PostModel directly.
jd-alexander Feb 10, 2020
d522cd2
added params to UiString & UiHelpers functionality.
jd-alexander Feb 10, 2020
d5f27b7
convert to an array that can be passed as a vararg
jd-alexander Feb 10, 2020
8dd300b
Removed unneeded parameter since value is being accessed inside
jd-alexander Feb 10, 2020
d276c95
utilize the UIiStringResWithParams functionality for the arguments.
jd-alexander Feb 10, 2020
ca2ccdc
throw NullPointerException for appropriate dialog click events.
jd-alexander Feb 10, 2020
155b6dd
added a TODO comment to link to the issue related to refactoring.
jd-alexander Feb 10, 2020
b2f073b
Merge branch 'feature/master-pages-offline-support' into issue-11131/…
jd-alexander Feb 10, 2020
65bf483
removed unneeded space.
jd-alexander Feb 10, 2020
9c3dfcb
fixed indentation issue.
jd-alexander Feb 10, 2020
ac2129b
added post type to events that are being tracked for the dialogs.
jd-alexander Feb 10, 2020
0ef669e
Fixed spacing issue
jd-alexander Feb 10, 2020
4b912f0
Utilized UiString instead of any for string resource formatting.
jd-alexander Feb 11, 2020
2a6afe5
simplified how exceptions are thrown
jd-alexander Feb 11, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -556,15 +556,17 @@ public static void editPostOrPageForResult(Intent intent, Activity activity, Sit
activity.startActivityForResult(intent, RequestCodes.EDIT_POST);
}

public static void editPageForResult(@NonNull Fragment fragment, @NonNull PageModel page) {
public static void editPageForResult(@NonNull Fragment fragment, @NonNull PageModel page,
boolean loadAutoSaveRevision) {
Intent intent = new Intent(fragment.getContext(), EditPostActivity.class);
editPageForResult(intent, fragment, page.getSite(), page.getPageId());
editPageForResult(intent, fragment, page.getSite(), page.getPageId(), loadAutoSaveRevision);
}

public static void editPageForResult(Intent intent, @NonNull Fragment fragment, @NonNull SiteModel site,
int pageLocalId) {
int pageLocalId, boolean loadAutoSaveRevision) {
intent.putExtra(WordPress.SITE, site);
intent.putExtra(EditPostActivity.EXTRA_POST_LOCAL_ID, pageLocalId);
intent.putExtra(EditPostActivity.EXTRA_LOAD_AUTO_SAVE_REVISION, loadAutoSaveRevision);
fragment.startActivityForResult(intent, RequestCodes.EDIT_POST);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,16 +53,20 @@ class PagesActivity : AppCompatActivity(),
}

override fun onPositiveClicked(instanceTag: String) {
passDeleteConfirmation(instanceTag.toLong())
val fragment = supportFragmentManager.findFragmentById(R.id.fragment_container)
if (fragment is PagesFragment) {
fragment.onPositiveClickedForBasicDialog(instanceTag)
} else {
throw IllegalStateException("PagesFragment is required to consume this event.")
}
Comment thread
malinajirka marked this conversation as resolved.
}

override fun onNegativeClicked(instanceTag: String) {
}

private fun passDeleteConfirmation(remoteId: Long) {
val fragment = supportFragmentManager.findFragmentById(R.id.fragment_container)
if (fragment is PagesFragment) {
fragment.onPageDeleteConfirmed(remoteId)
fragment.onNegativeClickedForBasicDialog(instanceTag)
} else {
throw IllegalStateException("PagesFragment is required to consume this event.")
}
Comment thread
malinajirka marked this conversation as resolved.
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,6 @@ import org.wordpress.android.fluxc.store.QuickStartStore.QuickStartTask
import org.wordpress.android.ui.ActivityLauncher
import org.wordpress.android.ui.PagePostCreationSourcesDetail.PAGE_FROM_PAGES_LIST
import org.wordpress.android.ui.RequestCodes
import org.wordpress.android.ui.pages.PageItem.Page
import org.wordpress.android.ui.posts.BasicFragmentDialog
import org.wordpress.android.ui.posts.EditPostActivity
import org.wordpress.android.ui.posts.PostListAction.PreviewPost
import org.wordpress.android.ui.posts.PreviewStateHelper
Expand Down Expand Up @@ -125,7 +123,7 @@ class PagesFragment : Fragment() {

if (EditPostActivity.checkToRestart(data)) {
ActivityLauncher.editPageForResult(data, this@PagesFragment, viewModel.site,
data.getIntExtra(EditPostActivity.EXTRA_POST_LOCAL_ID, 0))
data.getIntExtra(EditPostActivity.EXTRA_POST_LOCAL_ID, 0), false)

// a restart will happen so, no need to continue here
return
Expand Down Expand Up @@ -314,9 +312,9 @@ class PagesFragment : Fragment() {
}
})

viewModel.editPage.observe(this, Observer { page ->
viewModel.editPage.observe(this, Observer { (page, loadAutoRevision) ->
page?.let {
ActivityLauncher.editPageForResult(this, page)
ActivityLauncher.editPageForResult(this, page, loadAutoRevision)
}
})

Expand Down Expand Up @@ -345,10 +343,6 @@ class PagesFragment : Fragment() {
page?.let { ActivityLauncher.viewPageParentForResult(this, page) }
})

viewModel.displayDeleteDialog.observe(this, Observer { page ->
page?.let { displayDeleteDialog(page) }
})

viewModel.isNewPageButtonVisible.observe(this, Observer { isVisible ->
isVisible?.let {
if (isVisible) {
Expand All @@ -366,6 +360,10 @@ class PagesFragment : Fragment() {
(pagesPager.adapter as PagesPagerAdapter).scrollToPage(page)
}
})

viewModel.dialogAction.observe(this, Observer {
it?.show(activity, activity.supportFragmentManager, uiHelpers)
})
}

override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
Expand All @@ -378,10 +376,6 @@ class PagesFragment : Fragment() {
initializeSearchView()
}

fun onPageDeleteConfirmed(remoteId: Long) {
viewModel.onDeleteConfirmed(remoteId)
}

private fun refreshProgressBars(listState: PageListState?) {
if (!isAdded || view == null) {
return
Expand All @@ -408,16 +402,12 @@ class PagesFragment : Fragment() {
}
}

private fun displayDeleteDialog(page: Page) {
val dialog = BasicFragmentDialog()
dialog.initialize(
page.id.toString(),
getString(R.string.delete_page),
getString(R.string.page_delete_dialog_message, page.title),
getString(R.string.delete),
getString(R.string.cancel)
)
dialog.show(fragmentManager, page.id.toString())
fun onPositiveClickedForBasicDialog(instanceTag: String) {
viewModel.onPositiveClickedForBasicDialog(instanceTag)
}

fun onNegativeClickedForBasicDialog(instanceTag: String) {
viewModel.onNegativeClickedForBasicDialog(instanceTag)
}

override fun onStart() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -461,7 +461,8 @@ public static String getConflictedPostCustomStringForDialog(PostModel post) {

public static UiStringText getCustomStringForAutosaveRevisionDialog(PostModel post) {
Context context = WordPress.getContext();
String firstPart = context.getString(R.string.dialog_confirm_autosave_body_first_part);
String firstPart = post.isPage() ? context.getString(R.string.dialog_confirm_autosave_body_first_part_for_page)
: context.getString(R.string.dialog_confirm_autosave_body_first_part);

String lastModified =
TextUtils.isEmpty(post.getDateLocallyChanged()) ? post.getLastModified() : post.getDateLocallyChanged();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import org.wordpress.android.ui.utils.UiString.UiStringText
import org.wordpress.android.util.DisplayUtils
import javax.inject.Inject
import android.graphics.Point
import org.wordpress.android.ui.utils.UiString.UiStringResWithParams

class UiHelpers @Inject constructor() {
fun getPxOfUiDimen(context: Context, uiDimen: UiDimen): Int =
Expand All @@ -28,6 +29,15 @@ class UiHelpers @Inject constructor() {
when (uiString) {
is UiStringRes -> context.getString(uiString.stringRes)
is UiStringText -> uiString.text
is UiStringResWithParams -> context.getString(
uiString.stringRes,
*uiString.params.map { value ->
getTextOfUiString(
context,
value
)
}.toTypedArray()
)
}

fun updateVisibility(view: View, visible: Boolean) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,5 @@ import androidx.annotation.StringRes
sealed class UiString {
data class UiStringText(val text: String) : UiString()
data class UiStringRes(@StringRes val stringRes: Int) : UiString()
data class UiStringResWithParams(@StringRes val stringRes: Int, val params: List<UiString>) : UiString()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package org.wordpress.android.viewmodel.pages

import org.wordpress.android.fluxc.model.PostModel
import org.wordpress.android.ui.posts.PostUtils
import javax.inject.Inject

class PageConflictResolver @Inject constructor() {
fun hasUnhandledAutoSave(post: PostModel): Boolean {
return PostUtils.hasAutoSave(post)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
package org.wordpress.android.viewmodel.pages

import org.wordpress.android.R
import org.wordpress.android.analytics.AnalyticsTracker.Stat.UNPUBLISHED_REVISION_DIALOG_LOAD_LOCAL_VERSION_CLICKED
import org.wordpress.android.analytics.AnalyticsTracker.Stat.UNPUBLISHED_REVISION_DIALOG_LOAD_UNPUBLISHED_VERSION_CLICKED
import org.wordpress.android.analytics.AnalyticsTracker.Stat.UNPUBLISHED_REVISION_DIALOG_SHOWN
import org.wordpress.android.fluxc.model.LocalOrRemoteId.RemoteId
import org.wordpress.android.fluxc.model.PostModel
import org.wordpress.android.ui.posts.PostUtils
import org.wordpress.android.ui.utils.UiString.UiStringRes
import org.wordpress.android.ui.utils.UiString.UiStringResWithParams
import org.wordpress.android.ui.utils.UiString.UiStringText
import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper
import org.wordpress.android.viewmodel.helpers.DialogHolder
import java.lang.NullPointerException

private const val CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG = "CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG"
private const val CONFIRM_DELETE_PAGE_DIALOG_TAG = "CONFIRM_DELETE_PAGE_DIALOG_TAG"
private const val POST_TYPE = "post_type"

class PageListDialogHelper(
Comment thread
malinajirka marked this conversation as resolved.
private val showDialog: (DialogHolder) -> Unit,
private val analyticsTracker: AnalyticsTrackerWrapper
) {
private var pageIdForAutosaveRevisionResolutionDialog: RemoteId? = null
private var pageIdForDeleteDialog: RemoteId? = null

fun showAutoSaveRevisionDialog(page: PostModel) {
analyticsTracker.track(UNPUBLISHED_REVISION_DIALOG_SHOWN, mapOf(POST_TYPE to "page"))
val dialogHolder = DialogHolder(
tag = CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG,
title = UiStringRes(R.string.dialog_confirm_autosave_title),
message = PostUtils.getCustomStringForAutosaveRevisionDialog(page),
positiveButton = UiStringRes(R.string.dialog_confirm_autosave_restore_button),
negativeButton = UiStringRes(R.string.dialog_confirm_autosave_dont_restore_button)
)
pageIdForAutosaveRevisionResolutionDialog = RemoteId(page.remotePostId)
showDialog.invoke(dialogHolder)
}

fun showDeletePageConfirmationDialog(pageId: RemoteId, pageTitle: String) {
val dialogHolder = DialogHolder(
tag = CONFIRM_DELETE_PAGE_DIALOG_TAG,
title = UiStringRes(R.string.delete_page),
message = UiStringResWithParams(
R.string.page_delete_dialog_message,
listOf(UiStringText(pageTitle))
),
positiveButton = UiStringRes(R.string.delete),
negativeButton = UiStringRes(R.string.cancel)
)
pageIdForDeleteDialog = pageId
showDialog.invoke(dialogHolder)
}

fun onPositiveClickedForBasicDialog(
instanceTag: String,
deletePage: (RemoteId) -> Unit,
editPage: (RemoteId, LoadAutoSaveRevision) -> Unit
) {
when (instanceTag) {
CONFIRM_DELETE_PAGE_DIALOG_TAG -> pageIdForDeleteDialog?.let {
pageIdForDeleteDialog = null
deletePage(it)
} ?: throw NullPointerException("pageIdForDeleteDialog shouldn't be null.")
CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG -> pageIdForAutosaveRevisionResolutionDialog?.let {
// open the editor with the restored auto save
pageIdForAutosaveRevisionResolutionDialog = null
editPage(it, true)
analyticsTracker.track(
UNPUBLISHED_REVISION_DIALOG_LOAD_UNPUBLISHED_VERSION_CLICKED,
mapOf(POST_TYPE to "page")
)
}
Comment thread
malinajirka marked this conversation as resolved.
?: throw NullPointerException("pageIdForAutosaveRevisionResolutionDialog shouldn't be null.")

else -> throw IllegalArgumentException("Dialog's positive button click is not handled: $instanceTag")
}
}

fun onNegativeClickedForBasicDialog(
instanceTag: String,
editPage: (RemoteId, LoadAutoSaveRevision) -> Unit
) {
when (instanceTag) {
CONFIRM_DELETE_PAGE_DIALOG_TAG -> pageIdForDeleteDialog = null
CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG -> pageIdForAutosaveRevisionResolutionDialog?.let {
// open the editor with the local page (don't use the auto save version)
editPage(it, false)
analyticsTracker.track(
UNPUBLISHED_REVISION_DIALOG_LOAD_LOCAL_VERSION_CLICKED,
mapOf(POST_TYPE to "page")
)
}
Comment thread
malinajirka marked this conversation as resolved.
?: throw NullPointerException("pageIdForAutosaveRevisionResolutionDialog shouldn't be null.")

else -> throw IllegalArgumentException("Dialog's negative button click is not handled: $instanceTag")
}
}
}
Loading