1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
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.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.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 {
if (world.listSubscriptions.isEmpty()) {
world.notifyError("No list subscriptions")
return@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)
}
override fun onCreateItemView(parent: ViewGroup): View {
val layoutInflater = LayoutInflater.from(parent.context)
return layoutInflater.inflate(R.layout.list_item_tweet, 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("Could not retrieve list timeline")
}
onFinish()
}
}
|