diff options
author | Kazuki Yamaguchi <k@rhe.jp> | 2018-08-19 14:13:19 +0900 |
---|---|---|
committer | Kazuki Yamaguchi <k@rhe.jp> | 2018-08-19 14:13:19 +0900 |
commit | 1b3f83b4811180bbb825de48ffcee4a4963214c9 (patch) | |
tree | 6e9533cc3500c03b38ef7062a24b46225b140c40 | |
parent | a2b93915b534a5f05c3478395ef2e777a90907a1 (diff) | |
download | SmileEssence-1b3f83b4811180bbb825de48ffcee4a4963214c9.tar.gz |
limit tweet view recursion
-rw-r--r-- | app/src/main/java/net/lacolaco/smileessence/view/Partials.kt | 62 |
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 } |