1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
package net.lacolaco.smileessence.view
import android.app.Activity
import android.text.Html
import android.view.LayoutInflater
import android.view.View
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.twitter.TwitterTaskException
import net.lacolaco.smileessence.twitter.getTweetAsync
import net.lacolaco.smileessence.util.launchUi
import net.lacolaco.smileessence.util.toCompactString
import net.lacolaco.smileessence.view.dialog.StatusDetailDialogFragment
import net.lacolaco.smileessence.view.dialog.UserDetailDialogFragment
object Partials {
fun getTweetView(tweet: Tweet, world: World, activity: Activity, view: View,
maxRecursion: Int = 2): View {
view.setOnClickListener {
DialogHelper.showDialog(activity, StatusDetailDialogFragment.newInstance(tweet))
}
// Display source
val user = tweet.originalTweet.user
Glide.with(view).load(user.profileImageUrl).into(view.imageview_status_icon)
view.imageview_status_icon.setOnClickListener {
DialogHelper.showDialog(activity, UserDetailDialogFragment.newInstance(user))
}
view.source_user_protected.visibility =
if (user.isProtected) View.VISIBLE else View.INVISIBLE
view.textview_status_header_username.text = user.screenName
view.textview_status_header_name.text = user.name
// Display tweet body
view.textview_status_text.text = tweet.text
var footerText = tweet.originalTweet.createdAt.toCompactString()
footerText += " via ${Html.fromHtml(tweet.originalTweet.source)}"
if (tweet.isRetweet)
footerText += " (RT by ${tweet.user.screenName})"
view.textview_status_footer.text = footerText
(view as TweetStateFrameLayout).isMention =
tweet.entities.mentions.contains(world.user.screenName)
view.isRetweet = tweet.isRetweet
view.isMine = tweet.originalTweet.user == world.user
// Display reactions
if (tweet.retweetCount > 0) {
view.tweet_retweet_count.visibility = View.VISIBLE
view.tweet_retweet_count.text = tweet.retweetCount.toString()
view.imageview_status_retweeted.visibility = View.VISIBLE
view.imageview_status_retweeted.isActivated = world.id in tweet.retweets
} else {
view.tweet_retweet_count.visibility = View.INVISIBLE
view.imageview_status_retweeted.visibility = View.INVISIBLE
}
if (tweet.favoriteCount > 0) {
view.tweet_favorite_count.visibility = View.VISIBLE
view.tweet_favorite_count.text = tweet.favoriteCount.toString()
view.imageview_status_favorited.visibility = View.VISIBLE
view.imageview_status_favorited.isActivated = world.id in tweet.favoriters
} else {
view.tweet_favorite_count.visibility = View.INVISIBLE
view.imageview_status_favorited.visibility = View.INVISIBLE
}
// Display embedded tweets
val layout = view.tweet_embedded_items
if (maxRecursion > 0 && tweet.embeddedStatusIDs.isNotEmpty()) {
layout.visibility = View.VISIBLE
if (layout.childCount < tweet.embeddedStatusIDs.size) {
val inflater = LayoutInflater.from(layout.context)
for (i in layout.childCount until tweet.embeddedStatusIDs.size)
layout.addView(inflater.inflate(R.layout.list_item_tweet, layout, false))
}
tweet.embeddedStatusIDs.forEachIndexed { i, id ->
val itemView = layout.getChildAt(i)
val cached = Tweet.cached(id)
if (cached != null) {
getTweetView(cached, world, activity, itemView, maxRecursion - 1)
itemView.visibility = View.VISIBLE
} else {
itemView.tag = id
itemView.visibility = View.GONE
launchUi {
try {
val fetched = world.getTweetAsync(id, false).await()
if (activity.isDestroyed)
return@launchUi
if (itemView.tag != id)
return@launchUi
getTweetView(fetched, world, activity, itemView, maxRecursion - 1)
itemView.visibility = View.VISIBLE
} catch (e: TwitterTaskException) {
}
}
}
}
for (i in tweet.embeddedStatusIDs.size until layout.childCount)
layout.getChildAt(i).visibility = View.GONE
} else
layout.visibility = View.GONE
return view
}
}
|