@@ -28,6 +28,7 @@ import com.github.code.gambit.utility.extention.longToast
28
28
import com.github.code.gambit.utility.extention.shortToast
29
29
import com.github.code.gambit.utility.extention.show
30
30
import com.github.code.gambit.utility.extention.snackbar
31
+ import com.github.code.gambit.utility.sharedpreference.LastEvaluatedKeyManager
31
32
import com.google.android.material.bottomsheet.BottomSheetBehavior
32
33
import com.google.android.material.bottomsheet.BottomSheetBehavior.BottomSheetCallback
33
34
import com.takusemba.spotlight.OnSpotlightListener
@@ -56,12 +57,17 @@ class HomeFragment : Fragment(R.layout.fragment_home), FileUrlClickCallback, Bot
56
57
private lateinit var _urlBinding : FileUrlLayoutBinding
57
58
private val urlBinding get() = _urlBinding
58
59
60
+ private var isFirstLoading = true
61
+
59
62
@Inject
60
63
lateinit var homeRepository: HomeRepository
61
64
62
65
@Inject
63
66
lateinit var adapter: FileListAdapter
64
67
68
+ @Inject
69
+ lateinit var lekManager: LastEvaluatedKeyManager
70
+
65
71
lateinit var fileSearchComponent: FileSearchComponent
66
72
67
73
override fun onViewCreated (view : View , savedInstanceState : Bundle ? ) {
@@ -71,9 +77,10 @@ class HomeFragment : Fragment(R.layout.fragment_home), FileUrlClickCallback, Bot
71
77
_searchBinding = binding.searchLayout
72
78
_urlBinding = binding.fileUrlLayout
73
79
activity?.window?.exitFullscreen()
80
+ lekManager.flush()
74
81
registerFilterComponents()
75
82
registerUrlComponent()
76
-
83
+ binding.linearProgress.hide()
77
84
binding.filterButton.setOnClickListener {
78
85
showFilter()
79
86
}
@@ -92,6 +99,7 @@ class HomeFragment : Fragment(R.layout.fragment_home), FileUrlClickCallback, Bot
92
99
}
93
100
94
101
binding.swipeRefresh.setOnRefreshListener {
102
+ binding.swipeRefresh.isRefreshing = false
95
103
viewModel.setEvent(HomeEvent .GetFiles )
96
104
}
97
105
@@ -112,7 +120,11 @@ class HomeFragment : Fragment(R.layout.fragment_home), FileUrlClickCallback, Bot
112
120
is HomeState .Error -> longToast(it.message)
113
121
is HomeState .FilesLoaded -> {
114
122
if (! it.isSearchResult) {
115
- stopShimmer()
123
+ if (isFirstLoading) {
124
+ stopShimmer()
125
+ } else {
126
+ binding.linearProgress.hide()
127
+ }
116
128
adapter.addAll(it.files, true )
117
129
binding.noFileIllustrationContainer.hide()
118
130
binding.swipeRefresh.isRefreshing = false
@@ -122,7 +134,11 @@ class HomeFragment : Fragment(R.layout.fragment_home), FileUrlClickCallback, Bot
122
134
}
123
135
is HomeState .Loading -> {
124
136
if (! it.isSearchResultLoading) {
125
- showShimmer()
137
+ if (isFirstLoading) {
138
+ showShimmer()
139
+ } else {
140
+ binding.linearProgress.show()
141
+ }
126
142
return @observe
127
143
}
128
144
fileSearchComponent.setRefreshing()
@@ -151,6 +167,18 @@ class HomeFragment : Fragment(R.layout.fragment_home), FileUrlClickCallback, Bot
151
167
binding.fileList.adapter = adapter
152
168
adapter.listener = this
153
169
binding.fileList.addOnScrollListener(object : RecyclerView .OnScrollListener () {
170
+ override fun onScrollStateChanged (recyclerView : RecyclerView , newState : Int ) {
171
+ super .onScrollStateChanged(recyclerView, newState)
172
+ val visibleItemCount = layoutManager.childCount
173
+ val totalItemCount = layoutManager.itemCount
174
+ val pastVisibleItem = layoutManager.findFirstCompletelyVisibleItemPosition()
175
+ if (! recyclerView.canScrollVertically(1 ) &&
176
+ newState == RecyclerView .SCROLL_STATE_IDLE &&
177
+ pastVisibleItem + visibleItemCount >= totalItemCount
178
+ ) {
179
+ viewModel.setEvent(HomeEvent .GetFiles )
180
+ }
181
+ }
154
182
override fun onScrolled (recyclerView : RecyclerView , dx : Int , dy : Int ) {
155
183
if (searchBinding.root.isVisible) {
156
184
super .onScrolled(recyclerView, dx, dy)
@@ -161,11 +189,6 @@ class HomeFragment : Fragment(R.layout.fragment_home), FileUrlClickCallback, Bot
161
189
} else {
162
190
showBottomNav()
163
191
}
164
- if (! recyclerView.canScrollVertically(1 ) && layoutManager.findLastVisibleItemPosition() == layoutManager.itemCount - 1 ) {
165
- // shortToast("End of list")
166
- println ()
167
- }
168
- Timber .tag(" home" ).i(" (dx: $dx , dy: $dy )" )
169
192
super .onScrolled(recyclerView, dx, dy)
170
193
}
171
194
})
@@ -230,6 +253,7 @@ class HomeFragment : Fragment(R.layout.fragment_home), FileUrlClickCallback, Bot
230
253
}
231
254
232
255
private fun stopShimmer () {
256
+ isFirstLoading = false
233
257
showBottomNav()
234
258
binding.shimmerLayout.stopShimmer()
235
259
binding.shimmerLayout.hide()
0 commit comments