aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKazuki Yamaguchi <k@rhe.jp>2018-08-19 14:13:19 +0900
committerKazuki Yamaguchi <k@rhe.jp>2018-08-19 14:13:19 +0900
commit1b3f83b4811180bbb825de48ffcee4a4963214c9 (patch)
tree6e9533cc3500c03b38ef7062a24b46225b140c40
parenta2b93915b534a5f05c3478395ef2e777a90907a1 (diff)
downloadSmileEssence-1b3f83b4811180bbb825de48ffcee4a4963214c9.tar.gz
limit tweet view recursion
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/Partials.kt62
1 files changed, 32 insertions, 30 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 50fd7235..1f22c41d 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/Partials.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/view/Partials.kt
@@ -17,7 +17,8 @@ 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): View {
+ fun getTweetView(tweet: Tweet, world: World, activity: Activity, view: View,
+ maxRecursion: Int = 2): View {
view.setOnClickListener {
DialogHelper.showDialog(activity, StatusDetailDialogFragment.newInstance(tweet))
}
@@ -29,10 +30,7 @@ object Partials {
DialogHelper.showDialog(activity, UserDetailDialogFragment.newInstance(user))
}
view.source_user_protected.visibility =
- if (user.isProtected)
- View.VISIBLE
- else
- View.INVISIBLE
+ if (user.isProtected) View.VISIBLE else View.INVISIBLE
view.textview_status_header_username.text = user.screenName
view.textview_status_header_name.text = user.name
@@ -44,7 +42,8 @@ object Partials {
footerText += " (RT by ${tweet.user.screenName})"
view.textview_status_footer.text = footerText
- (view as TweetStateFrameLayout).isMention = tweet.entities.mentions.contains(world.user.screenName)
+ (view as TweetStateFrameLayout).isMention =
+ tweet.entities.mentions.contains(world.user.screenName)
view.isRetweet = tweet.isRetweet
view.isMine = tweet.originalTweet.user == world.user
@@ -70,34 +69,37 @@ object Partials {
// Display embedded tweets
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)
- for (i in layout.childCount until tweet.embeddedStatusIDs.size)
- layout.addView(inflater.inflate(R.layout.list_item_tweet, layout, false))
- }
- for (i in 0 until layout.childCount)
- layout.getChildAt(i).visibility = View.GONE
+ 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))
+ }
+ for (i in 0 until layout.childCount)
+ layout.getChildAt(i).visibility = View.GONE
- 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
+ launchUi {
+ tweet.embeddedStatusIDs.mapIndexed { i, id ->
val itemView = layout.getChildAt(i)
- if (itemView.tag != id)
- return@forEach
- getTweetView(tweet, world, activity, itemView)
- itemView.visibility = View.VISIBLE
- } catch (e: TwitterTaskException) {
+ itemView.tag = id
+ Triple(i, id, world.getTweetAsync(id, false))
+ }.forEach { (i, id, task) ->
+ try {
+ val updatedTweet = task.await()
+ if (activity.isDestroyed)
+ return@forEach
+ val itemView = layout.getChildAt(i)
+ if (itemView.tag != id)
+ return@forEach
+ getTweetView(updatedTweet, world, activity, itemView, maxRecursion - 1)
+ itemView.visibility = View.VISIBLE
+ } catch (e: TwitterTaskException) {
+ }
}
}
- }
+ } else
+ layout.visibility = View.GONE
return view
}