diff options
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.kt | 84 |
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() + } +} |