From a9b83d897780e9c4baa1cb053e8f7cc033791745 Mon Sep 17 00:00:00 2001 From: Mariotaku Lee Date: Tue, 19 Sep 2017 13:15:12 +0800 Subject: [PATCH] fixed conversation order bug --- build.gradle | 4 ++-- .../twidere/adapter/StatusDetailsAdapter.kt | 12 ++++++------ .../extension/model/ParcelableStatusExtensions.kt | 10 +++++++++- .../twidere/fragment/status/StatusFragment.kt | 2 -- .../loader/statuses/AbsRequestStatusesLoader.kt | 14 +++++++------- .../twidere/loader/statuses/ConversationLoader.kt | 14 ++++++++------ 6 files changed, 32 insertions(+), 24 deletions(-) diff --git a/build.gradle b/build.gradle index f9a93b828..fdc3582d4 100644 --- a/build.gradle +++ b/build.gradle @@ -42,12 +42,12 @@ subprojects { ] libVersions = [ Kotlin : "${kotlinVersion}", - SupportLib : '26.0.2', + SupportLib : '26.1.0', SupportTest : '1.0.0', MariotakuCommons : '0.9.19', RestFu : '0.9.60', ObjectCursor : '0.9.20', - PlayServices : '11.2.0', + PlayServices : '11.2.2', MapsUtils : '0.5', DropboxCoreSdk : '3.0.3', GoogleDriveApi : 'v3-rev61-1.22.0', diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/adapter/StatusDetailsAdapter.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/adapter/StatusDetailsAdapter.kt index 2982e59df..4fe17aa79 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/adapter/StatusDetailsAdapter.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/adapter/StatusDetailsAdapter.kt @@ -38,6 +38,7 @@ import org.mariotaku.twidere.adapter.iface.ILoadMoreSupportAdapter import org.mariotaku.twidere.adapter.iface.IStatusesAdapter import org.mariotaku.twidere.constant.* import org.mariotaku.twidere.extension.model.originalId +import org.mariotaku.twidere.extension.model.retweet_sort_id import org.mariotaku.twidere.fragment.status.StatusFragment import org.mariotaku.twidere.model.* import org.mariotaku.twidere.util.StatusAdapterLinkClickHandler @@ -207,13 +208,12 @@ class StatusDetailsAdapter( setTypeCount(ITEM_IDX_REPLY, 0) replyStart = -1 } else { - var sortId = status.sort_id - - if (status.is_retweet) { - sortId = data.find { - it.id == status.retweet_id - }?.sort_id ?: status.retweet_timestamp + val sortId = if (status.is_retweet) { + status.retweet_sort_id + } else { + status.sort_id } + var conversationCount = 0 var replyCount = 0 var replyStart = -1 diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/extension/model/ParcelableStatusExtensions.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/extension/model/ParcelableStatusExtensions.kt index 199b8c98c..fa2665717 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/extension/model/ParcelableStatusExtensions.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/extension/model/ParcelableStatusExtensions.kt @@ -1,6 +1,7 @@ package org.mariotaku.twidere.extension.model import org.mariotaku.ktextension.addAllTo +import org.mariotaku.ktextension.toLongOr import org.mariotaku.microblog.library.mastodon.annotation.StatusVisibility import org.mariotaku.twidere.TwidereConstants.USER_TYPE_FANFOU_COM import org.mariotaku.twidere.model.* @@ -103,6 +104,12 @@ val ParcelableStatus.quoted: ParcelableStatus? return obj } +val ParcelableStatus.retweet_sort_id: Long + get() { + if (!is_retweet) return -1 + return retweet_id.toLongOr(timestamp) + } + fun ParcelableStatus.toSummaryLine(): ParcelableActivity.SummaryLine { val result = ParcelableActivity.SummaryLine() result.key = user_key @@ -133,13 +140,14 @@ fun ParcelableStatus.extractFanfouHashtags(): List { fun ParcelableStatus.makeOriginal() { if (!is_retweet) return id = retweet_id - is_retweet = false retweeted_by_user_key = null retweeted_by_user_name = null retweeted_by_user_screen_name = null retweeted_by_user_profile_image = null retweet_timestamp = -1 retweet_id = null + is_retweet = false + sort_id = id.toLongOr(timestamp) } fun ParcelableStatus.addFilterFlag(@ParcelableStatus.FilterFlags flags: Long) { diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/status/StatusFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/status/StatusFragment.kt index d6a55d5ab..f30549397 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/status/StatusFragment.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/status/StatusFragment.kt @@ -142,8 +142,6 @@ class StatusFragment : BaseFragment(), LoaderCallbacks? = ParcelableStatus.REVERSE_COMPARATOR + open val comparator: Comparator? = ParcelableStatus.REVERSE_COMPARATOR var exception: MicroBlogException? get() = exceptionRef.get() @@ -105,6 +104,7 @@ abstract class AbsRequestStatusesLoader( @SuppressWarnings("unchecked") override final fun loadInBackground(): ListResponse { val context = context + val comparator = this.comparator val accountKey = accountKey ?: return ListResponse.getListInstance(MicroBlogException("No Account")) val details = AccountUtils.getAccountDetails(AccountManager.get(context), accountKey, true) ?: return ListResponse.getListInstance(MicroBlogException("No Account")) @@ -114,11 +114,11 @@ abstract class AbsRequestStatusesLoader( if (cached != null) { data.addAll(cached) if (comparator != null) { - Collections.sort(data, comparator) + data.sortWith(comparator) } else { - Collections.sort(data) + data.sort() } - return ListResponse.getListInstance(CopyOnWriteArrayList(data)) + return ListResponse.getListInstance(data) } } if (!fromUser) return ListResponse.getListInstance(data) @@ -171,12 +171,12 @@ abstract class AbsRequestStatusesLoader( data.forEach { it.is_filtered = shouldFilterStatus(it) } if (comparator != null) { - data.sortWith(comparator!!) + data.sortWith(comparator) } else { data.sort() } saveCachedData(data) - return ListResponse.getListInstance(CopyOnWriteArrayList(data)) + return ListResponse.getListInstance(data) } override final fun onStartLoading() { diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/loader/statuses/ConversationLoader.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/loader/statuses/ConversationLoader.kt index 1cf838c57..b65205c68 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/loader/statuses/ConversationLoader.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/loader/statuses/ConversationLoader.kt @@ -59,11 +59,13 @@ class ConversationLoader( loadingMore: Boolean ) : AbsRequestStatusesLoader(context, status.account_key, adapterData, null, -1, fromUser, loadingMore) { - private val status = ParcelUtils.clone(status).apply { makeOriginal() } + override val comparator: Comparator? = null var canLoadAllReplies: Boolean = false private set + private val status = ParcelUtils.clone(status).apply { makeOriginal() } + @Throws(MicroBlogException::class) override fun getStatuses(account: AccountDetails, paging: Paging): PaginatedList { when (account.type) { @@ -89,11 +91,11 @@ class ConversationLoader( AccountType.TWITTER -> { val isOfficial = account.isOfficial(context) canLoadAllReplies = isOfficial - if (isOfficial) { - return microBlog.showConversation(status.id, paging).mapMicroBlogToPaginated { - it.toParcelable(account, profileImageSize) - } - } +// if (isOfficial) { +// return microBlog.showConversation(status.id, paging).mapMicroBlogToPaginated { +// it.toParcelable(account, profileImageSize) +// } +// } return showConversationCompat(microBlog, account, status, true) } AccountType.STATUSNET -> {