aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKazuki Yamaguchi <k@rhe.jp>2017-10-25 02:14:17 +0900
committerKazuki Yamaguchi <k@rhe.jp>2017-10-25 02:14:17 +0900
commit349f13814b8a6b4e515025816d7db3a1722eaab8 (patch)
tree6b80f0113a46187af51177df0c38f6af1d797148
parent0a6d63b6f02a167ac387f6d04f3a9c5f35a3a902 (diff)
downloadSmileEssence-349f13814b8a6b4e515025816d7db3a1722eaab8.tar.gz
avoid epandedlistview
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/ExpandedListView.kt22
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/Partials.kt57
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/adapter/TimelineAdapter.kt2
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/dialog/StatusDetailDialogFragment.kt22
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/page/ListPageFragment.kt2
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/page/SearchPageFragment.kt2
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/page/TweetsPageFragment.kt2
-rw-r--r--app/src/main/res/layout/dialog_status_detail.xml9
-rw-r--r--app/src/main/res/layout/item_status_base.xml9
9 files changed, 53 insertions, 74 deletions
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/ExpandedListView.kt b/app/src/main/java/net/lacolaco/smileessence/view/ExpandedListView.kt
deleted file mode 100644
index 794b4ea6..00000000
--- a/app/src/main/java/net/lacolaco/smileessence/view/ExpandedListView.kt
+++ /dev/null
@@ -1,22 +0,0 @@
-package net.lacolaco.smileessence.view
-
-import android.content.Context
-import android.util.AttributeSet
-import android.view.View
-import android.widget.ListView
-
-class ExpandedListView : ListView {
- constructor(context: Context) : super(context)
-
- constructor(context: Context, attrs: AttributeSet) : super(context, attrs)
-
- constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr)
-
- public override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
- val expandSpec = View.MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE shr 2, View.MeasureSpec.AT_MOST)
- super.onMeasure(widthMeasureSpec, expandSpec)
-
- val params = layoutParams
- params.height = measuredHeight
- }
-}
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
}
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/adapter/TimelineAdapter.kt b/app/src/main/java/net/lacolaco/smileessence/view/adapter/TimelineAdapter.kt
index 362e183b..f2b640c8 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/adapter/TimelineAdapter.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/view/adapter/TimelineAdapter.kt
@@ -23,6 +23,6 @@ class TimelineAdapter(private val activity: Activity, private val world: World)
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
- return Partials.getTweetView(getItem(position), world, activity, convertView, true)
+ return Partials.getTweetView(getItem(position), world, activity, convertView)
}
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/dialog/StatusDetailDialogFragment.kt b/app/src/main/java/net/lacolaco/smileessence/view/dialog/StatusDetailDialogFragment.kt
index ea2fa461..26621ec7 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/dialog/StatusDetailDialogFragment.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/view/dialog/StatusDetailDialogFragment.kt
@@ -16,6 +16,7 @@ import net.lacolaco.smileessence.view.Partials
import net.lacolaco.smileessence.view.PopupMenu
import net.lacolaco.smileessence.view.adapter.TimelineAdapter
import net.lacolaco.smileessence.view.confirm
+import twitter4j.Twitter
class StatusDetailDialogFragment : StackableDialogFragment() {
private lateinit var tweet: Tweet
@@ -44,25 +45,20 @@ class StatusDetailDialogFragment : StackableDialogFragment() {
updateViewButtons(view)
setupViewMenu(view)
- val adapter = TimelineAdapter(activity, world)
- view.listview_status_detail_reply_to.adapter = adapter
-
if (tweet.inReplyToStatusId != null) {
+ view.tweet_in_reply_to.visibility = View.VISIBLE
view.detail_dialog_divider_top.visibility = View.VISIBLE
- view.listview_status_detail_reply_to.visibility = View.VISIBLE
-
- bg {
- val inreply = try {
- world.getTweetAsync(tweet.inReplyToStatusId!!, false).await()
- } catch (e: Exception) {
- return@bg
+ Partials.getTweetView(Tweet.placeHolder, world, activity, view.tweet_in_reply_to)
+ launchUi {
+ try {
+ val tweet = world.getTweetAsync(tweet.inReplyToStatusId!!, false).await()
+ Partials.getTweetView(tweet, world, activity, view.tweet_in_reply_to)
+ } catch (e: TwitterTaskException) {
}
- adapter.add(inreply)
- adapter.update()
}
} else {
+ view.tweet_in_reply_to.visibility = View.GONE
view.detail_dialog_divider_top.visibility = View.GONE
- view.listview_status_detail_reply_to.visibility = View.GONE
}
return view
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/page/ListPageFragment.kt b/app/src/main/java/net/lacolaco/smileessence/view/page/ListPageFragment.kt
index 492d241e..c149d762 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/page/ListPageFragment.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/view/page/ListPageFragment.kt
@@ -63,7 +63,7 @@ class ListPageFragment : RefreshableTimelinePageFragment<Tweet, PageInfo.ListPag
}
override fun onBindItemView(item: Tweet, itemView: View) {
- Partials.getTweetView(item, world, activity, itemView, true)
+ Partials.getTweetView(item, world, activity, itemView)
}
override fun onCreateItemView(parent: ViewGroup): View {
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/page/SearchPageFragment.kt b/app/src/main/java/net/lacolaco/smileessence/view/page/SearchPageFragment.kt
index 9491eb05..1ee32215 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/page/SearchPageFragment.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/view/page/SearchPageFragment.kt
@@ -130,7 +130,7 @@ class SearchPageFragment : RefreshableTimelinePageFragment<Tweet, PageInfo.Searc
}
override fun onBindItemView(item: Tweet, itemView: View) {
- Partials.getTweetView(item, world, activity, itemView, true)
+ Partials.getTweetView(item, world, activity, itemView)
}
override fun onCreateItemView(parent: ViewGroup): View {
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/page/TweetsPageFragment.kt b/app/src/main/java/net/lacolaco/smileessence/view/page/TweetsPageFragment.kt
index 0b445e12..4faaa7be 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/page/TweetsPageFragment.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/view/page/TweetsPageFragment.kt
@@ -26,7 +26,7 @@ class TweetsPageFragment : TimelinePageFragment<Tweet, PageInfo.TweetsPageInfo>(
}
override fun onBindItemView(item: Tweet, itemView: View) {
- Partials.getTweetView(item, world, activity, itemView, true)
+ Partials.getTweetView(item, world, activity, itemView)
}
override fun onCreateItemView(parent: ViewGroup): View {
diff --git a/app/src/main/res/layout/dialog_status_detail.xml b/app/src/main/res/layout/dialog_status_detail.xml
index 3e6f4ba8..0a96f1ce 100644
--- a/app/src/main/res/layout/dialog_status_detail.xml
+++ b/app/src/main/res/layout/dialog_status_detail.xml
@@ -7,10 +7,11 @@
android:layout_height="wrap_content"
android:orientation="vertical">
- <net.lacolaco.smileessence.view.ExpandedListView
- android:id="@+id/listview_status_detail_reply_to"
- android:layout_width="match_parent"
- android:layout_height="wrap_content" />
+ <include
+ android:id="@+id/tweet_in_reply_to"
+ layout="@layout/list_item_status"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent" />
<FrameLayout
android:id="@+id/detail_dialog_divider_top"
diff --git a/app/src/main/res/layout/item_status_base.xml b/app/src/main/res/layout/item_status_base.xml
index bc52dbcd..ad63de69 100644
--- a/app/src/main/res/layout/item_status_base.xml
+++ b/app/src/main/res/layout/item_status_base.xml
@@ -64,7 +64,7 @@
android:layout_marginStart="8dp"
android:textColor="?attr/color_status_text_footer"
android:textSize="@dimen/status_meta_text_size"
- app:layout_constraintBottom_toTopOf="@+id/listview_status_embedded_status"
+ app:layout_constraintBottom_toTopOf="@+id/tweet_embedded_items"
app:layout_constraintStart_toEndOf="@+id/imageview_status_icon"
app:layout_goneMarginBottom="5dp"
tools:text="2017-01-01 00:00:00 via !!!VIA!!!" />
@@ -117,16 +117,17 @@
app:layout_constraintTop_toTopOf="@+id/textview_status_footer"
tools:text="999999" />
- <net.lacolaco.smileessence.view.ExpandedListView
- android:id="@+id/listview_status_embedded_status"
+ <LinearLayout
+ android:id="@+id/tweet_embedded_items"
android:layout_width="0dp"
android:layout_height="wrap_content"
+ android:orientation="vertical"
android:layout_marginBottom="5dp"
android:layout_marginEnd="5dp"
android:layout_marginStart="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintStart_toEndOf="@+id/imageview_status_icon" />
+ app:layout_constraintStart_toEndOf="@+id/imageview_status_icon"/>
<TextView
android:id="@+id/textview_status_text"