aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/net/lacolaco/smileessence/view/page/ListPageFragment.kt
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/net/lacolaco/smileessence/view/page/ListPageFragment.kt')
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/page/ListPageFragment.kt84
1 files changed, 84 insertions, 0 deletions
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
new file mode 100644
index 00000000..a226266e
--- /dev/null
+++ b/app/src/main/java/net/lacolaco/smileessence/view/page/ListPageFragment.kt
@@ -0,0 +1,84 @@
+package net.lacolaco.smileessence.view.page
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import com.omadahealth.github.swipyrefreshlayout.library.SwipyRefreshLayout
+import kotlinx.android.synthetic.main.page_fragment_list.*
+import kotlinx.coroutines.experimental.Deferred
+import net.lacolaco.smileessence.R
+import net.lacolaco.smileessence.data.PageInfo
+import net.lacolaco.smileessence.entity.Tweet
+import net.lacolaco.smileessence.twitter.TwitterTaskException
+import net.lacolaco.smileessence.twitter.task.getListTimelineAsync
+import net.lacolaco.smileessence.util.launchUi
+import net.lacolaco.smileessence.view.Partials
+import net.lacolaco.smileessence.view.PopupMenu
+
+class ListPageFragment : RefreshableTimelinePageFragment<Tweet, PageInfo.ListPageInfo>() {
+ override fun refresh() {
+ if (pageInfo.fullName != null)
+ runRefreshTask(world.getListTimelineAsync(pageInfo.fullName!!)) {}
+ }
+
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup, savedInstanceState: Bundle?): View {
+ return inflater.inflate(R.layout.page_fragment_list, container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ setSwipeRefreshEnabled(pageInfo.fullName != null)
+
+ button_userlist_lists.setOnClickListener {
+ val popup = PopupMenu(activity, button_userlist_lists)
+ for (name in world.listSubscriptions) {
+ popup.add(name) {
+ textview_userlist_name.text = name
+ pageInfo.fullName = name
+ setSwipeRefreshEnabled(true)
+ adapter.sortedList.clear()
+ refresh()
+ }
+ }
+ popup.show()
+ }
+ textview_userlist_name.text = pageInfo.fullName ?: "<none selected>"
+
+ refresh()
+ }
+
+ override fun onSwipeDown(view: SwipyRefreshLayout) {
+ val sinceId = if (adapter.sortedList.size() > 0) adapter.sortedList[0].id else null
+ runRefreshTask(world.getListTimelineAsync(pageInfo.fullName!!, sinceId = sinceId)) {
+ view.isRefreshing = false
+ }
+ }
+
+ override fun onSwipeUp(view: SwipyRefreshLayout) {
+ val maxId = if (adapter.sortedList.size() > 0) adapter.sortedList[adapter.sortedList.size() - 1].id - 1 else null
+ runRefreshTask(world.getListTimelineAsync(pageInfo.fullName!!, maxId = maxId)) {
+ view.isRefreshing = false
+ }
+ }
+
+ override fun onBindItemView(item: Tweet, itemView: View) {
+ Partials.getTweetView(item, world, activity, itemView, true)
+ }
+
+ override fun onCreateItemView(parent: ViewGroup): View {
+ val layoutInflater = LayoutInflater.from(parent.context)
+ return layoutInflater.inflate(R.layout.list_item_status, parent, false)
+ }
+
+ private fun runRefreshTask(task: Deferred<List<Tweet>>, onFinish: () -> Unit) = launchUi {
+ try {
+ val tweets = task.await()
+ world.addTweetAll(tweets)
+ adapter.sortedList.addAll(tweets)
+ } catch (e: TwitterTaskException) {
+ world.notifyError(R.string.notice_error_get_list)
+ }
+ onFinish()
+ }
+}