From 7e577b59577fb463e42d153d9fbe567098e0a11f Mon Sep 17 00:00:00 2001 From: Mariotaku Lee Date: Fri, 10 Feb 2017 19:55:00 +0800 Subject: [PATCH] improved status conversation load --- .../twidere/fragment/AbsActivitiesFragment.kt | 4 +-- .../twidere/fragment/AbsStatusesFragment.kt | 3 +- .../fragment/MessagesEntriesFragment.kt | 6 ++++ .../twidere/fragment/StatusFragment.kt | 35 ++++++++++--------- .../twidere/model/BaseRefreshTaskParam.kt | 6 +--- .../twidere/model/RefreshTaskParam.kt | 7 ++++ .../twidere/model/SimpleRefreshTaskParam.kt | 7 ++-- .../mariotaku/twidere/task/GetMessagesTask.kt | 34 +++++++++--------- 8 files changed, 55 insertions(+), 47 deletions(-) diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AbsActivitiesFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AbsActivitiesFragment.kt index f70fe1567..e78554632 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AbsActivitiesFragment.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AbsActivitiesFragment.kt @@ -20,7 +20,6 @@ package org.mariotaku.twidere.fragment import android.accounts.AccountManager -import android.app.Activity import android.content.Context import android.content.Intent import android.graphics.Rect @@ -310,7 +309,8 @@ abstract class AbsActivitiesFragment protected constructor() : val accountIds = arrayOf(activity.account_key) val maxIds = arrayOf(activity.min_position) val maxSortIds = longArrayOf(activity.min_sort_position) - getActivities(BaseRefreshTaskParam(accountIds, maxIds, null, maxSortIds, null)) + getActivities(BaseRefreshTaskParam(accountKeys = accountIds, maxIds = maxIds, + sinceIds = null, maxSortIds = maxSortIds, sinceSortIds = null)) } override fun onMediaClick(holder: IStatusViewHolder, view: View, media: ParcelableMedia, position: Int) { diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AbsStatusesFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AbsStatusesFragment.kt index cdfc5a998..d9230f00b 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AbsStatusesFragment.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AbsStatusesFragment.kt @@ -359,7 +359,8 @@ abstract class AbsStatusesFragment : AbsContentListRecyclerViewFragment(status.id) val maxSortIds = longArrayOf(status.sort_id) - getStatuses(BaseRefreshTaskParam(accountIds, maxIds, null, maxSortIds, null)) + getStatuses(BaseRefreshTaskParam(accountKeys = accountIds, maxIds = maxIds, sinceIds = null, + maxSortIds = maxSortIds, sinceSortIds = null)) } override fun onMediaClick(holder: IStatusViewHolder, view: View, media: ParcelableMedia, statusPosition: Int) { diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/MessagesEntriesFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/MessagesEntriesFragment.kt index 409c153c6..850357679 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/MessagesEntriesFragment.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/MessagesEntriesFragment.kt @@ -8,6 +8,7 @@ import org.mariotaku.kpreferences.get import org.mariotaku.sqliteqb.library.OrderBy import org.mariotaku.twidere.R import org.mariotaku.twidere.adapter.MessagesEntriesAdapter +import org.mariotaku.twidere.adapter.iface.ILoadMoreSupportAdapter import org.mariotaku.twidere.constant.newDocumentApiKey import org.mariotaku.twidere.extension.model.user import org.mariotaku.twidere.loader.ObjectCursorLoader @@ -35,6 +36,7 @@ class MessagesEntriesFragment : AbsContentListRecyclerViewFragment + (l.sort_id - r.sort_id).toInt() + } return loader } @@ -1503,7 +1505,7 @@ class StatusFragment : BaseFragment(), LoaderCallbacks? = null private var replyError: CharSequence? = null private var conversationError: CharSequence? = null - private var mReplyStart: Int = 0 - private var mShowingActionCardPosition: Int = 0 + private var replyStart: Int = 0 + private var showingActionCardPosition: Int = 0 init { setHasStableIds(true) @@ -1555,7 +1557,7 @@ class StatusFragment : BaseFragment(), LoaderCallbacks>(context, preferences) listener.setAdapter(this) @@ -1570,9 +1572,9 @@ class StatusFragment : BaseFragment(), LoaderCallbacks { - if (data == null || mReplyStart < 0) return null + if (data == null || replyStart < 0) return null return data!![position - getIndexStart(ITEM_IDX_CONVERSATION) - - getTypeCount(ITEM_IDX_CONVERSATION) - getTypeCount(ITEM_IDX_STATUS) + mReplyStart] + - getTypeCount(ITEM_IDX_CONVERSATION) - getTypeCount(ITEM_IDX_STATUS) + replyStart] } ITEM_IDX_STATUS -> { return status @@ -1622,15 +1624,15 @@ class StatusFragment : BaseFragment(), LoaderCallbacks?): Boolean { val status = this.status ?: return false - val changed = !CompareUtils.objectEquals(data, data) + val changed = this.data != data this.data = data if (data == null || data.isEmpty()) { setTypeCount(ITEM_IDX_CONVERSATION, 0) setTypeCount(ITEM_IDX_REPLY, 0) - mReplyStart = -1 + replyStart = -1 } else { var sortId = status.sort_id if (status.is_retweet) { @@ -1657,8 +1659,7 @@ class StatusFragment : BaseFragment(), LoaderCallbacks if (item.sort_id < sortId) { conversationCount++ } else if (item.sort_id > sortId && status.id != item.id) { @@ -1670,7 +1671,7 @@ class StatusFragment : BaseFragment(), LoaderCallbacks, override val maxIds: Array?, override val sinceIds: Array?, + override val cursors: Array? = null, override val maxSortIds: LongArray? = null, override val sinceSortIds: LongArray? = null ) : RefreshTaskParam { override var isLoadingMore: Boolean = false override var shouldAbort: Boolean = false - override val hasMaxIds: Boolean - get() = maxIds != null - - override val hasSinceIds: Boolean - get() = sinceIds != null } diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/model/RefreshTaskParam.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/model/RefreshTaskParam.kt index a688a23a5..e6cbb0efd 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/model/RefreshTaskParam.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/model/RefreshTaskParam.kt @@ -10,13 +10,20 @@ interface RefreshTaskParam { val sinceIds: Array? + val cursors: Array? + val maxSortIds: LongArray? val sinceSortIds: LongArray? val hasMaxIds: Boolean + get() = maxIds != null val hasSinceIds: Boolean + get() = sinceIds != null + + val hasCursors: Boolean + get() = cursors != null val isLoadingMore: Boolean diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/model/SimpleRefreshTaskParam.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/model/SimpleRefreshTaskParam.kt index 1e65c2f6b..4683c1fe0 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/model/SimpleRefreshTaskParam.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/model/SimpleRefreshTaskParam.kt @@ -22,11 +22,8 @@ abstract class SimpleRefreshTaskParam : RefreshTaskParam { override val sinceIds: Array? get() = null - override val hasMaxIds: Boolean - get() = maxIds != null - - override val hasSinceIds: Boolean - get() = sinceIds != null + override val cursors: Array? + get() = null override val sinceSortIds: LongArray? get() = null diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/task/GetMessagesTask.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/task/GetMessagesTask.kt index 5063be326..c54114a96 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/task/GetMessagesTask.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/task/GetMessagesTask.kt @@ -20,7 +20,6 @@ import org.mariotaku.twidere.model.util.AccountUtils.getAccountDetails import org.mariotaku.twidere.model.util.ParcelableMessageUtils import org.mariotaku.twidere.model.util.ParcelableUserUtils import org.mariotaku.twidere.model.util.UserKeyUtils -import org.mariotaku.twidere.provider.TwidereDataStore.AccountSupportColumns import org.mariotaku.twidere.provider.TwidereDataStore.Messages import org.mariotaku.twidere.provider.TwidereDataStore.Messages.Conversations import org.mariotaku.twidere.util.content.ContentResolverUtils @@ -37,7 +36,7 @@ class GetMessagesTask(context: Context) : BaseAbstractTask { // Use fanfou DM api @@ -58,32 +57,37 @@ class GetMessagesTask(context: Context) : BaseAbstractTask { // Use official DM api if (details.isOfficial(context)) { - return getTwitterOfficialMessages(microBlog, details) + return getTwitterOfficialMessages(microBlog, details, param, index) } } } // Use default method - return getDefaultMessages(microBlog, details) + return getDefaultMessages(microBlog, details, param, index) } private fun getFanfouMessages(microBlog: MicroBlog): GetMessagesData { return GetMessagesData(emptyList(), emptyList()) } - private fun getTwitterOfficialMessages(microBlog: MicroBlog, details: AccountDetails): GetMessagesData { - return getDefaultMessages(microBlog, details) + private fun getTwitterOfficialMessages(microBlog: MicroBlog, details: AccountDetails, param: RefreshTaskParam, index: Int): GetMessagesData { + return getDefaultMessages(microBlog, details, param, index) } - private fun getDefaultMessages(microBlog: MicroBlog, details: AccountDetails): GetMessagesData { + private fun getDefaultMessages(microBlog: MicroBlog, details: AccountDetails, param: RefreshTaskParam, index: Int): GetMessagesData { val accountKey = details.key - val paging = Paging() + + + val received = microBlog.getDirectMessages(Paging().apply { + count(100) + }) + val sent = microBlog.getSentDirectMessages(Paging().apply { + count(100) + }) + + val insertMessages = arrayListOf() val conversations = hashMapOf() - - val received = microBlog.getDirectMessages(paging) - val sent = microBlog.getSentDirectMessages(paging) - val conversationIds = hashSetOf() received.forEach { conversationIds.add(ParcelableMessageUtils.incomingConversationId(it.senderId, it.recipientId)) @@ -135,10 +139,6 @@ class GetMessagesTask(context: Context) : BaseAbstractTask 0) {