use LiveData for status activity summary

This commit is contained in:
Mariotaku Lee 2017-12-31 03:36:19 +08:00
parent e8774425a7
commit bdd8a9bab6
No known key found for this signature in database
GPG Key ID: 15C10F89D7C33535
14 changed files with 193 additions and 141 deletions

View File

@ -40,4 +40,4 @@ fun TextView.hideIfEmpty(hideVisibility: Int = View.GONE) {
} else {
View.VISIBLE
}
}
}

View File

@ -38,6 +38,7 @@ import org.mariotaku.twidere.adapter.iface.IStatusesAdapter
import org.mariotaku.twidere.annotation.LoadMorePosition
import org.mariotaku.twidere.annotation.TimelineStyle
import org.mariotaku.twidere.constant.*
import org.mariotaku.twidere.data.status.StatusActivitySummaryLiveData
import org.mariotaku.twidere.extension.model.originalId
import org.mariotaku.twidere.extension.model.retweet_sort_id
import org.mariotaku.twidere.fragment.status.StatusFragment
@ -86,7 +87,7 @@ class StatusDetailsAdapter(
}
notifyDataSetChanged()
}
var statusActivity: StatusFragment.StatusActivity? = null
var statusActivity: StatusActivitySummaryLiveData.StatusActivity? = null
internal set(value) {
val status = status ?: return
if (value != null && !value.isStatus(status)) {
@ -302,7 +303,7 @@ class StatusDetailsAdapter(
holder as DetailStatusViewHolder
payloads.forEach { it ->
when (it) {
is StatusFragment.StatusActivity -> {
is StatusActivitySummaryLiveData.StatusActivity -> {
holder.updateStatusActivity(it)
}
is ParcelableStatus -> {

View File

@ -27,7 +27,7 @@ import org.mariotaku.twidere.app.TwidereApplication
import org.mariotaku.twidere.dagger.DependencyHolder
import org.mariotaku.twidere.dagger.module.ApplicationModule
import org.mariotaku.twidere.dagger.module.ChannelModule
import org.mariotaku.twidere.data.impl.UserLiveData
import org.mariotaku.twidere.data.user.UserLiveData
import org.mariotaku.twidere.extension.get
import org.mariotaku.twidere.fragment.BaseDialogFragment
import org.mariotaku.twidere.fragment.BaseFragment

View File

@ -0,0 +1,137 @@
/*
* Twidere - Twitter client for Android
*
* Copyright (C) 2012-2017 Mariotaku Lee <mariotaku.lee@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.mariotaku.twidere.data.status
import android.accounts.AccountManager
import android.content.ContentValues
import android.content.Context
import org.mariotaku.ktextension.addAllTo
import org.mariotaku.microblog.library.Twitter
import org.mariotaku.microblog.library.model.Paging
import org.mariotaku.sqliteqb.library.Expression
import org.mariotaku.twidere.annotation.AccountType
import org.mariotaku.twidere.data.ComputableExceptionLiveData
import org.mariotaku.twidere.exception.APINotSupportedException
import org.mariotaku.twidere.exception.RequiredFieldNotFoundException
import org.mariotaku.twidere.extension.getDetailsOrThrow
import org.mariotaku.twidere.extension.model.api.key
import org.mariotaku.twidere.extension.model.api.toParcelable
import org.mariotaku.twidere.extension.model.isOfficial
import org.mariotaku.twidere.extension.model.newMicroBlogInstance
import org.mariotaku.twidere.model.AccountDetails
import org.mariotaku.twidere.model.ParcelableStatus
import org.mariotaku.twidere.model.ParcelableUser
import org.mariotaku.twidere.model.UserKey
import org.mariotaku.twidere.provider.TwidereDataStore
import org.mariotaku.twidere.util.DataStoreUtils
import org.mariotaku.twidere.util.updateStatusInfo
class StatusActivitySummaryLiveData(val context: Context) : ComputableExceptionLiveData<StatusActivitySummaryLiveData.StatusActivity>(false) {
var accountKey: UserKey? = null
var statusId: String? = null
override fun compute(): StatusActivity {
val context = this.context
val accountKey = this.accountKey ?: throw RequiredFieldNotFoundException("account_key")
val statusId = this.statusId ?: throw RequiredFieldNotFoundException("status_id")
val account = AccountManager.get(context).getDetailsOrThrow(accountKey, true)
if (AccountType.TWITTER != account.type) {
throw APINotSupportedException()
}
val twitter = account.newMicroBlogInstance(context, Twitter::class.java)
val activitySummary = if (account.isOfficial(context)) {
twitter.getActivitySummaryOfficial(statusId, account)
} else {
twitter.getActivitySummary(statusId, account)
}
val countValues = ContentValues()
countValues.put(TwidereDataStore.Statuses.REPLY_COUNT, activitySummary.replyCount)
countValues.put(TwidereDataStore.Statuses.FAVORITE_COUNT, activitySummary.favoriteCount)
countValues.put(TwidereDataStore.Statuses.RETWEET_COUNT, activitySummary.retweetCount)
val cr = context.contentResolver
val statusWhere = Expression.and(
Expression.equalsArgs(TwidereDataStore.Statuses.ACCOUNT_KEY),
Expression.or(
Expression.equalsArgs(TwidereDataStore.Statuses.ID),
Expression.equalsArgs(TwidereDataStore.Statuses.RETWEET_ID)))
val statusWhereArgs = arrayOf(accountKey.toString(), statusId, statusId)
cr.update(TwidereDataStore.Statuses.HomeTimeline.CONTENT_URI, countValues, statusWhere.sql, statusWhereArgs)
cr.updateStatusInfo(DataStoreUtils.STATUSES_ACTIVITIES_URIS, TwidereDataStore.Statuses.COLUMNS,
accountKey, statusId, ParcelableStatus::class.java) { item ->
item.favorite_count = activitySummary.favoriteCount
item.reply_count = activitySummary.replyCount
item.retweet_count = activitySummary.retweetCount
return@updateStatusInfo item
}
return activitySummary
}
private fun Twitter.getActivitySummary(statusId: String, account: AccountDetails): StatusActivity {
val relatedUsers = getRetweets(statusId, Paging().count(10))
.filterNot { DataStoreUtils.isFilteringUser(context, it.user.key) }
.distinctBy { it.user.id }
.map { it.user.toParcelable(account) }
val result = StatusActivity(statusId, relatedUsers)
val status = showStatus(statusId)
result.favoriteCount = status.favoriteCount
result.retweetCount = status.retweetCount
result.replyCount = status.descendentReplyCount
return result
}
private fun Twitter.getActivitySummaryOfficial(statusId: String, account: AccountDetails): StatusActivity {
val summary = getStatusActivitySummary(statusId)
val relatedIds = mutableSetOf<String>()
summary.favoriters?.iDs?.let {
it.slice(0 until (10.coerceAtMost(it.size)))
}?.addAllTo(relatedIds)
summary.retweeters?.iDs?.let {
it.slice(0 until (10.coerceAtMost(it.size)))
}?.addAllTo(relatedIds)
val relatedUsers = lookupUsers(relatedIds.toTypedArray())
.filterNot { DataStoreUtils.isFilteringUser(context, it.key) }
.map { it.toParcelable(account) }
val result = StatusActivity(statusId, relatedUsers)
result.favoriteCount = summary.favoritersCount
result.retweetCount = summary.retweetersCount
result.replyCount = summary.descendentReplyCount
return result
}
data class StatusActivity(
var statusId: String,
var relatedUsers: List<ParcelableUser>,
var favoriteCount: Long = 0,
var replyCount: Long = -1,
var retweetCount: Long = 0
) {
fun isStatus(status: ParcelableStatus): Boolean {
return statusId == status.retweet_id ?: status.id
}
}
}

View File

@ -17,13 +17,13 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.mariotaku.twidere.data.impl
package org.mariotaku.twidere.data.user
import android.accounts.AccountManager
import android.content.Context
import org.mariotaku.microblog.library.Mastodon
import org.mariotaku.microblog.library.MicroBlog
import org.mariotaku.microblog.library.MicroBlogException
import org.mariotaku.microblog.library.Mastodon
import org.mariotaku.twidere.annotation.AccountType
import org.mariotaku.twidere.data.ComputableExceptionLiveData
import org.mariotaku.twidere.exception.RequiredFieldNotFoundException

View File

@ -17,7 +17,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.mariotaku.twidere.data.impl
package org.mariotaku.twidere.data.user
import android.accounts.AccountManager
import android.content.Context

View File

@ -20,6 +20,7 @@
package org.mariotaku.twidere.extension
import android.graphics.drawable.Drawable
import android.widget.TextView
fun Drawable.setBoundsFitCenter(left: Int, top: Int, right: Int, bottom: Int) {
val boundsWidth = right - left
@ -43,6 +44,13 @@ fun Drawable.setBoundsFitCenter(left: Int, top: Int, right: Int, bottom: Int) {
}
}
fun Drawable.applyCompoundDrawableBounds(textView: TextView) {
val iconSize = textView.textSize.toInt()
val top = (intrinsicHeight - iconSize) / 2
val left = (intrinsicWidth - iconSize) / 2
setBounds(left, top, left + iconSize, top + iconSize)
}
var Drawable.isActivated: Boolean
get() = android.R.attr.state_activated in state
set(value) {

View File

@ -143,7 +143,7 @@ fun Status.applyTo(accountKey: UserKey, accountType: String, profileImageSize: S
result.addFilterFlag(ParcelableStatus.FilterFlags.QUOTE_NOT_AVAILABLE)
}
result.reply_count = status.replyCount
result.reply_count = status.descendentReplyCount
result.retweet_count = status.retweetCount
result.favorite_count = status.favoriteCount

View File

@ -91,8 +91,8 @@ import org.mariotaku.twidere.annotation.DisplayOption
import org.mariotaku.twidere.annotation.TimelineStyle
import org.mariotaku.twidere.constant.*
import org.mariotaku.twidere.constant.KeyboardShortcutConstants.*
import org.mariotaku.twidere.data.impl.RelationshipLiveData
import org.mariotaku.twidere.data.impl.UserLiveData
import org.mariotaku.twidere.data.user.RelationshipLiveData
import org.mariotaku.twidere.data.user.UserLiveData
import org.mariotaku.twidere.extension.*
import org.mariotaku.twidere.extension.data.observe
import org.mariotaku.twidere.extension.model.*

View File

@ -40,7 +40,7 @@ import org.mariotaku.twidere.activity.ColorPickerDialogActivity
import org.mariotaku.twidere.activity.ThemedMediaPickerActivity
import org.mariotaku.twidere.annotation.AccountType
import org.mariotaku.twidere.annotation.ImageShapeStyle
import org.mariotaku.twidere.data.impl.UserLiveData
import org.mariotaku.twidere.data.user.UserLiveData
import org.mariotaku.twidere.extension.*
import org.mariotaku.twidere.extension.data.observe
import org.mariotaku.twidere.extension.model.urlPreferred

View File

@ -19,10 +19,8 @@
package org.mariotaku.twidere.fragment.status
import android.accounts.AccountManager
import android.app.Activity
import android.app.Dialog
import android.content.ContentValues
import android.content.Context
import android.content.DialogInterface
import android.content.Intent
@ -34,7 +32,6 @@ import android.nfc.NfcAdapter.CreateNdefMessageCallback
import android.os.Bundle
import android.support.v4.app.LoaderManager.LoaderCallbacks
import android.support.v4.app.hasRunningLoadersSafe
import android.support.v4.content.FixedAsyncTaskLoader
import android.support.v4.content.Loader
import android.support.v7.app.AlertDialog
import android.support.v7.widget.FixedLinearLayoutManager
@ -53,25 +50,21 @@ import nl.komponents.kovenant.ui.alwaysUi
import nl.komponents.kovenant.ui.successUi
import org.mariotaku.kpreferences.get
import org.mariotaku.ktextension.*
import org.mariotaku.microblog.library.MicroBlog
import org.mariotaku.microblog.library.MicroBlogException
import org.mariotaku.microblog.library.Twitter
import org.mariotaku.microblog.library.model.Paging
import org.mariotaku.microblog.library.model.twitter.TranslationResult
import org.mariotaku.sqliteqb.library.Expression
import org.mariotaku.twidere.Constants.*
import org.mariotaku.twidere.R
import org.mariotaku.twidere.activity.ColorPickerDialogActivity
import org.mariotaku.twidere.adapter.StatusDetailsAdapter
import org.mariotaku.twidere.adapter.decorator.ExtendedDividerItemDecoration
import org.mariotaku.twidere.annotation.AccountType
import org.mariotaku.twidere.annotation.LoadMorePosition
import org.mariotaku.twidere.constant.KeyboardShortcutConstants.*
import org.mariotaku.twidere.constant.displaySensitiveContentsKey
import org.mariotaku.twidere.constant.newDocumentApiKey
import org.mariotaku.twidere.data.status.StatusActivitySummaryLiveData
import org.mariotaku.twidere.extension.*
import org.mariotaku.twidere.extension.model.api.key
import org.mariotaku.twidere.extension.model.api.toParcelable
import org.mariotaku.twidere.extension.data.observe
import org.mariotaku.twidere.extension.model.newMicroBlogInstance
import org.mariotaku.twidere.extension.model.originalId
import org.mariotaku.twidere.extension.view.calculateSpaceItemHeight
@ -85,8 +78,6 @@ import org.mariotaku.twidere.model.event.FavoriteTaskEvent
import org.mariotaku.twidere.model.event.StatusListChangedEvent
import org.mariotaku.twidere.model.pagination.Pagination
import org.mariotaku.twidere.model.pagination.SinceMaxPagination
import org.mariotaku.twidere.provider.TwidereDataStore.CachedStatuses
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses
import org.mariotaku.twidere.task.AbsAccountRequestTask
import org.mariotaku.twidere.util.*
import org.mariotaku.twidere.util.ContentScrollHandler.ContentListSupport
@ -118,7 +109,6 @@ class StatusFragment : BaseFragment(), LoaderCallbacks<SingleResponse<Parcelable
// Data fields
private var conversationLoaderInitialized: Boolean = false
private var activityLoaderInitialized: Boolean = false
private var hasMoreConversation = true
// Listeners
@ -139,7 +129,7 @@ class StatusFragment : BaseFragment(), LoaderCallbacks<SingleResponse<Parcelable
val adapter = this@StatusFragment.adapter
adapter.updateItemDecoration()
val conversationLoader = loader as ConversationLoader
var supportedPositions: Int = 0
var supportedPositions = 0
if (data != null && !data.isEmpty()) {
val sinceSortId = (conversationLoader.pagination as? SinceMaxPagination)?.sinceSortId ?: -1
if (sinceSortId < data[data.size - 1].sort_id) {
@ -166,22 +156,7 @@ class StatusFragment : BaseFragment(), LoaderCallbacks<SingleResponse<Parcelable
}
}
private val statusActivityLoaderCallback = object : LoaderCallbacks<StatusActivity?> {
override fun onCreateLoader(id: Int, args: Bundle): Loader<StatusActivity?> {
val accountKey = args.getParcelable<UserKey>(EXTRA_ACCOUNT_KEY)
val statusId = args.getString(EXTRA_STATUS_ID)
return StatusActivitySummaryLoader(activity!!, accountKey, statusId)
}
override fun onLoadFinished(loader: Loader<StatusActivity?>, data: StatusActivity?) {
adapter.updateItemDecoration()
adapter.statusActivity = data
}
override fun onLoaderReset(loader: Loader<StatusActivity?>) {
}
}
private lateinit var statusActivitySummaryLiveData: StatusActivitySummaryLiveData
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
val activity = activity ?: return
@ -244,6 +219,13 @@ class StatusFragment : BaseFragment(), LoaderCallbacks<SingleResponse<Parcelable
setState(STATE_LOADING)
statusActivitySummaryLiveData = StatusActivitySummaryLiveData(context!!)
statusActivitySummaryLiveData.observe(this, success = { data ->
adapter.updateItemDecoration()
adapter.statusActivity = data
}, fail = {
DebugLog.w(tr = it)
})
loaderManager.initLoader(LOADER_ID_DETAIL_STATUS, arguments, this)
}
@ -460,16 +442,9 @@ class StatusFragment : BaseFragment(), LoaderCallbacks<SingleResponse<Parcelable
private fun loadActivity(status: ParcelableStatus?) {
if (status == null || host == null || isDetached) return
val args = Bundle {
this[EXTRA_ACCOUNT_KEY] = status.account_key
this[EXTRA_STATUS_ID] = status.originalId
}
if (activityLoaderInitialized) {
loaderManager.restartLoader(LOADER_ID_STATUS_ACTIVITY, args, statusActivityLoaderCallback)
return
}
loaderManager.initLoader(LOADER_ID_STATUS_ACTIVITY, args, statusActivityLoaderCallback)
activityLoaderInitialized = true
statusActivitySummaryLiveData.accountKey = status.account_key
statusActivitySummaryLiveData.statusId = status.id
statusActivitySummaryLiveData.load()
}
internal fun loadTranslation(status: ParcelableStatus?) {
@ -671,81 +646,6 @@ class StatusFragment : BaseFragment(), LoaderCallbacks<SingleResponse<Parcelable
}
}
class StatusActivitySummaryLoader(
context: Context,
private val accountKey: UserKey,
private val statusId: String
) : FixedAsyncTaskLoader<StatusActivity>(context) {
override fun loadInBackground(): StatusActivity? {
val context = context
val details = AccountManager.get(context).getDetails(accountKey, true) ?: return null
if (AccountType.TWITTER != details.type) {
return null
}
val paging = Paging()
paging.setCount(10)
val activitySummary = StatusActivity(statusId, emptyList())
try {
val twitter = details.newMicroBlogInstance(context, MicroBlog::class.java)
activitySummary.retweeters = twitter.getRetweets(statusId, paging)
.filterNot { DataStoreUtils.isFilteringUser(context, it.user.key) }
.distinctBy { it.user.id }
.map { it.user.toParcelable(details) }
val countValues = ContentValues()
val status = twitter.showStatus(statusId)
activitySummary.favoriteCount = status.favoriteCount
activitySummary.retweetCount = status.retweetCount
activitySummary.replyCount = status.replyCount
countValues.put(Statuses.REPLY_COUNT, activitySummary.replyCount)
countValues.put(Statuses.FAVORITE_COUNT, activitySummary.favoriteCount)
countValues.put(Statuses.RETWEET_COUNT, activitySummary.retweetCount)
val cr = context.contentResolver
val statusWhere = Expression.and(
Expression.equalsArgs(Statuses.ACCOUNT_KEY),
Expression.or(
Expression.equalsArgs(Statuses.ID),
Expression.equalsArgs(Statuses.RETWEET_ID)))
val statusWhereArgs = arrayOf(accountKey.toString(), statusId, statusId)
cr.update(Statuses.HomeTimeline.CONTENT_URI, countValues, statusWhere.sql, statusWhereArgs)
cr.updateStatusInfo(DataStoreUtils.STATUSES_ACTIVITIES_URIS, Statuses.COLUMNS,
accountKey, statusId, ParcelableStatus::class.java) { item ->
item.favorite_count = activitySummary.favoriteCount
item.reply_count = activitySummary.replyCount
item.retweet_count = activitySummary.retweetCount
return@updateStatusInfo item
}
val pStatus = status.toParcelable(details)
cr.insert(CachedStatuses.CONTENT_URI, pStatus, ParcelableStatus::class.java)
return activitySummary
} catch (e: MicroBlogException) {
return null
}
}
override fun onStartLoading() {
forceLoad()
}
}
data class StatusActivity(
var statusId: String,
var retweeters: List<ParcelableUser>,
var favoriteCount: Long = 0,
var replyCount: Long = -1,
var retweetCount: Long = 0
) {
fun isStatus(status: ParcelableStatus): Boolean {
return statusId == status.retweet_id ?: status.id
}
}
data class ReadPosition(var statusId: Long, var offsetTop: Int)
private class StatusListLinearLayoutManager(context: Context, private val recyclerView: RecyclerView) : FixedLinearLayoutManager(context) {
@ -901,7 +801,6 @@ class StatusFragment : BaseFragment(), LoaderCallbacks<SingleResponse<Parcelable
// Constants
private val LOADER_ID_DETAIL_STATUS = 1
private val LOADER_ID_STATUS_CONVERSATIONS = 2
private val LOADER_ID_STATUS_ACTIVITY = 3
private val STATE_LOADED = 1
private val STATE_LOADING = 2
private val STATE_ERROR = 3

View File

@ -23,6 +23,7 @@ import android.content.Context
import android.content.res.ColorStateList
import android.os.Build
import android.support.v4.graphics.drawable.DrawableCompat
import android.support.v4.widget.TextViewCompat
import android.util.AttributeSet
import org.mariotaku.twidere.R
@ -47,9 +48,9 @@ class DrawableTintTextView(
val a = context.obtainStyledAttributes(attrs, R.styleable.DrawableTintTextView)
if (a.hasValue(R.styleable.DrawableTintTextView_drawableTint)) {
compoundDrawableTintListCompat = a.getColorStateList(R.styleable.DrawableTintTextView_drawableTint)
iconWidth = a.getDimensionPixelSize(R.styleable.DrawableTintTextView_iabIconWidth, 0)
iconHeight = a.getDimensionPixelSize(R.styleable.DrawableTintTextView_iabIconHeight, 0)
}
iconWidth = a.getDimensionPixelSize(R.styleable.DrawableTintTextView_iabIconWidth, 0)
iconHeight = a.getDimensionPixelSize(R.styleable.DrawableTintTextView_iabIconHeight, 0)
a.recycle()
updateDrawableCompat()
}
@ -60,16 +61,19 @@ class DrawableTintTextView(
}
private fun updateDrawableCompat() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) return
compoundDrawables.forEach { drawable ->
if (drawable == null) return@forEach
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
DrawableCompat.setTintList(drawable, compoundDrawableTintListCompat)
if (drawable == null) {
return@forEach
}
if (iconWidth > 0 && iconHeight > 0) {
val top = (drawable.intrinsicHeight - iconHeight) / 2
val left = (drawable.intrinsicWidth - iconWidth) / 2
drawable.setBounds(left, top, left + iconWidth, top + iconHeight)
DrawableCompat.setTintList(drawable, compoundDrawableTintListCompat)
}
TextViewCompat.getCompoundDrawablesRelative(this).forEach { drawable ->
if (drawable == null) {
return@forEach
}
DrawableCompat.setTintList(drawable, compoundDrawableTintListCompat)
}
}
}

View File

@ -49,6 +49,7 @@ import org.mariotaku.twidere.adapter.StatusDetailsAdapter
import org.mariotaku.twidere.annotation.ProfileImageSize
import org.mariotaku.twidere.constant.displaySensitiveContentsKey
import org.mariotaku.twidere.constant.newDocumentApiKey
import org.mariotaku.twidere.data.status.StatusActivitySummaryLiveData
import org.mariotaku.twidere.extension.loadProfileImage
import org.mariotaku.twidere.extension.model.*
import org.mariotaku.twidere.fragment.status.StatusFragment
@ -94,7 +95,7 @@ class DetailStatusViewHolder(
@UiThread
fun displayStatus(account: AccountDetails?, status: ParcelableStatus?,
statusActivity: StatusFragment.StatusActivity?, translation: TranslationResult?) {
statusActivity: StatusActivitySummaryLiveData.StatusActivity?, translation: TranslationResult?) {
if (account == null || status == null) return
val fragment = adapter.fragment
val context = adapter.context
@ -422,9 +423,9 @@ class DetailStatusViewHolder(
preferences, manager, status, item)
}
internal fun updateStatusActivity(activity: StatusFragment.StatusActivity) {
internal fun updateStatusActivity(activity: StatusActivitySummaryLiveData.StatusActivity) {
val adapter = itemView.countsUsers.adapter as CountsUsersAdapter
adapter.setUsers(activity.retweeters)
adapter.setUsers(activity.relatedUsers)
adapter.setCounts(activity)
}
@ -585,7 +586,7 @@ class DetailStatusViewHolder(
notifyDataSetChanged()
}
fun setCounts(activity: StatusFragment.StatusActivity?) {
fun setCounts(activity: StatusActivitySummaryLiveData.StatusActivity?) {
if (activity != null) {
val counts = ArrayList<LabeledCount>()
val replyCount = activity.replyCount

View File

@ -709,8 +709,10 @@ class StatusViewHolder(private val adapter: IStatusesAdapter, itemView: View) :
}
private fun TextView.setLabelIcon(@DrawableRes icon: Int) {
TextViewCompat.setCompoundDrawablesRelative(this, ContextCompat.getDrawable(context, icon),
null, null, null)
val drawable = ContextCompat.getDrawable(context, icon)?.also {
// it.applyCompoundDrawableBounds(this)
}
TextViewCompat.setCompoundDrawablesRelativeWithIntrinsicBounds(this, drawable, null, null, null)
}
private val Array<ParcelableMedia?>.type: Int