aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/net/lacolaco/smileessence/view/Partials.kt
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/net/lacolaco/smileessence/view/Partials.kt')
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/Partials.kt57
1 files changed, 30 insertions, 27 deletions
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/Partials.kt b/app/src/main/java/net/lacolaco/smileessence/view/Partials.kt
index 3a42af8c..82da5358 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/Partials.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/view/Partials.kt
@@ -2,23 +2,23 @@ package net.lacolaco.smileessence.view
import android.app.Activity
import android.text.Html
+import android.view.LayoutInflater
import android.view.View
-import android.view.ViewGroup
import com.bumptech.glide.Glide
import kotlinx.android.synthetic.main.item_status_base.view.*
import net.lacolaco.smileessence.R
import net.lacolaco.smileessence.World
import net.lacolaco.smileessence.entity.Tweet
import net.lacolaco.smileessence.entity.User
+import net.lacolaco.smileessence.twitter.TwitterTaskException
import net.lacolaco.smileessence.twitter.task.getTweetAsync
-import net.lacolaco.smileessence.util.launchBg
+import net.lacolaco.smileessence.util.launchUi
import net.lacolaco.smileessence.util.toCompactString
-import net.lacolaco.smileessence.view.adapter.UnorderedCustomListAdapter
import net.lacolaco.smileessence.view.dialog.StatusDetailDialogFragment
import net.lacolaco.smileessence.view.dialog.UserDetailDialogFragment
object Partials {
- fun getTweetView(tweet: Tweet, world: World, activity: Activity, convertView: View?, expandEmbeddedTweets: Boolean = true): View {
+ fun getTweetView(tweet: Tweet, world: World, activity: Activity, convertView: View?): View {
val view: View = convertView ?: activity.layoutInflater.inflate(R.layout.list_item_status, null)
view.setOnClickListener {
@@ -27,36 +27,39 @@ object Partials {
updateViewUser(tweet.originalTweet.user, activity, view)
updateViewBody(tweet, world, activity, view)
updateTweetReactionsViews(tweet, world, view)
- updateViewEmbeddeds(tweet, world, activity, view, expandEmbeddedTweets)
+ updateViewEmbeddeds(tweet, world, activity, view)
return view
}
- private fun updateViewEmbeddeds(tweet: Tweet, world: World, activity: Activity, view: View, expandEmbeddedTweets: Boolean) {
- if (expandEmbeddedTweets && tweet.embeddedStatusIDs.isNotEmpty()) {
- val embeddedTweetsAdapter = object : UnorderedCustomListAdapter<Tweet>() {
- override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
- return Partials.getTweetView(getItem(position), world, activity, convertView, false)
- }
- }
+ private fun updateViewEmbeddeds(tweet: Tweet, world: World, activity: Activity, view: View) {
+ val layout = view.tweet_embedded_items
+ layout.visibility = if (tweet.embeddedStatusIDs.isNotEmpty()) View.VISIBLE else View.GONE
+ if (layout.childCount < tweet.embeddedStatusIDs.size) {
+ val inflater = LayoutInflater.from(layout.context)
+ layout.addView(inflater.inflate(R.layout.list_item_status, layout, false))
+ }
+ for (i in 0 until layout.childCount)
+ layout.getChildAt(i).visibility = View.GONE
- launchBg {
- val tasks = tweet.embeddedStatusIDs.map { id -> world.getTweetAsync(id, false) }
- for (task in tasks) {
- val t = try {
- task.await()
- } catch (e: Exception) {
- continue
- }
- embeddedTweetsAdapter.add(t)
- embeddedTweetsAdapter.update()
+ launchUi {
+ tweet.embeddedStatusIDs.mapIndexed { i, id ->
+ val itemView = layout.getChildAt(i)
+ itemView.tag = id
+ Triple(i, id, world.getTweetAsync(id, false))
+ }.forEach { (i, id, task) ->
+ try {
+ val tweet = task.await()
+ if (activity.isDestroyed)
+ return@forEach
+ val itemView = layout.getChildAt(i)
+ if (itemView.tag != id)
+ return@forEach
+ getTweetView(tweet, world, activity, itemView)
+ itemView.visibility = View.VISIBLE
+ } catch (e: TwitterTaskException) {
}
}
- view.listview_status_embedded_status.adapter = embeddedTweetsAdapter
- view.listview_status_embedded_status.visibility = View.VISIBLE
- } else {
- view.listview_status_embedded_status.adapter = null // view may be reused, set null explicitly
- view.listview_status_embedded_status.visibility = View.GONE
}
}