Compare commits
4 Commits
Author | SHA1 | Date | |
---|---|---|---|
ebf4d294a8 | |||
4a4dbacc95 | |||
687839b5f8 | |||
8fb339034f |
10
CHANGELOG.md
10
CHANGELOG.md
@ -1,3 +1,13 @@
|
|||||||
|
**1.5.4.14**
|
||||||
|
|
||||||
|
- Fixing infinite scroll trying to load more items when there are no more.
|
||||||
|
|
||||||
|
**1.5.4.13**
|
||||||
|
|
||||||
|
- Displaying the right number of items.
|
||||||
|
|
||||||
|
- Fixing infinite scroll remaining issues. Should be stable enough.
|
||||||
|
|
||||||
**1.5.4.12**
|
**1.5.4.12**
|
||||||
|
|
||||||
- Fixed fab and toolbar issue (#113)
|
- Fixed fab and toolbar issue (#113)
|
||||||
|
@ -71,7 +71,6 @@ import retrofit2.Callback
|
|||||||
import retrofit2.Response
|
import retrofit2.Response
|
||||||
import kotlinx.android.synthetic.main.activity_home.*
|
import kotlinx.android.synthetic.main.activity_home.*
|
||||||
|
|
||||||
|
|
||||||
class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
||||||
|
|
||||||
private val MENU_PREFERENCES = 12302
|
private val MENU_PREFERENCES = 12302
|
||||||
@ -117,6 +116,10 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
private var recyclerViewScrollListener: RecyclerView.OnScrollListener? = null
|
private var recyclerViewScrollListener: RecyclerView.OnScrollListener? = null
|
||||||
private lateinit var settings: SharedPreferences
|
private lateinit var settings: SharedPreferences
|
||||||
|
|
||||||
|
private var badgeNew: Int = -1
|
||||||
|
private var badgeAll: Int = -1
|
||||||
|
private var badgeFavs: Int = -1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -190,8 +193,10 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
is ItemListAdapter -> adapter.removeItemAtIndex(position)
|
is ItemListAdapter -> adapter.removeItemAtIndex(position)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (items.size > 0)
|
if (items.size > 0) {
|
||||||
tabNewBadge.setText("${items.size}").maybeShow()
|
badgeNew--
|
||||||
|
reloadBadgeContent()
|
||||||
|
}
|
||||||
else
|
else
|
||||||
tabNewBadge.hide()
|
tabNewBadge.hide()
|
||||||
|
|
||||||
@ -203,8 +208,8 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
else -> 0
|
else -> 0
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lastVisibleItem == (items.size - 1)) {
|
if (lastVisibleItem === items.size && items.size <= maxItemNumber() && maxItemNumber() >= itemsNumber) {
|
||||||
getElementsAccordingToTab(appendResults = true)
|
getElementsAccordingToTab(appendResults = true, offsetOverride = lastVisibleItem)
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (e: IndexOutOfBoundsException) {
|
} catch (e: IndexOutOfBoundsException) {
|
||||||
@ -628,7 +633,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
else -> 0
|
else -> 0
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lastVisibleItem == (items.size - 1)) {
|
if (lastVisibleItem == (items.size - 1) && items.size < maxItemNumber()) {
|
||||||
getElementsAccordingToTab(appendResults = true)
|
getElementsAccordingToTab(appendResults = true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -639,7 +644,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
recyclerView.addOnScrollListener(recyclerViewScrollListener)
|
recyclerView.addOnScrollListener(recyclerViewScrollListener)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun mayBeEmpty() =
|
private fun mayBeEmpty() =
|
||||||
if (items.isEmpty()) {
|
if (items.isEmpty()) {
|
||||||
emptyText.visibility = View.VISIBLE
|
emptyText.visibility = View.VISIBLE
|
||||||
recyclerView.visibility = View.GONE
|
recyclerView.visibility = View.GONE
|
||||||
@ -648,13 +653,21 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
recyclerView.visibility = View.VISIBLE
|
recyclerView.visibility = View.VISIBLE
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getElementsAccordingToTab(appendResults: Boolean = false) =
|
private fun getElementsAccordingToTab(appendResults: Boolean = false, offsetOverride: Int? = null) {
|
||||||
when (elementsShown) {
|
offset = if (appendResults && offsetOverride === null) {
|
||||||
UNREAD_SHOWN -> getUnRead(appendResults)
|
(offset + itemsNumber)
|
||||||
READ_SHOWN -> getRead(appendResults)
|
} else {
|
||||||
FAV_SHOWN -> getStarred(appendResults)
|
offsetOverride ?: 0
|
||||||
else -> getUnRead(appendResults)
|
}
|
||||||
}
|
firstVisible = if (appendResults) firstVisible else 0
|
||||||
|
|
||||||
|
when (elementsShown) {
|
||||||
|
UNREAD_SHOWN -> getUnRead(appendResults)
|
||||||
|
READ_SHOWN -> getRead(appendResults)
|
||||||
|
FAV_SHOWN -> getStarred(appendResults)
|
||||||
|
else -> getUnRead(appendResults)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun doCallTo(appendResults: Boolean, toastMessage: Int, call: (String?, Long?, String?) -> Call<List<Item>>) {
|
private fun doCallTo(appendResults: Boolean, toastMessage: Int, call: (String?, Long?, String?) -> Call<List<Item>>) {
|
||||||
fun handleItemsResponse(response: Response<List<Item>>) {
|
fun handleItemsResponse(response: Response<List<Item>>) {
|
||||||
@ -694,25 +707,16 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun getUnRead(appendResults: Boolean = false) {
|
private fun getUnRead(appendResults: Boolean = false) {
|
||||||
offset = if (appendResults) (offset + itemsNumber)
|
|
||||||
else 0
|
|
||||||
firstVisible = if (appendResults) firstVisible else 0
|
|
||||||
elementsShown = UNREAD_SHOWN
|
elementsShown = UNREAD_SHOWN
|
||||||
doCallTo(appendResults, R.string.cant_get_new_elements){t, id, f -> api.newItems(t, id, f, itemsNumber, offset)}
|
doCallTo(appendResults, R.string.cant_get_new_elements){t, id, f -> api.newItems(t, id, f, itemsNumber, offset)}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getRead(appendResults: Boolean = false) {
|
private fun getRead(appendResults: Boolean = false) {
|
||||||
offset = if (appendResults) (offset + itemsNumber)
|
|
||||||
else 0
|
|
||||||
firstVisible = if (appendResults) firstVisible else 0
|
|
||||||
elementsShown = READ_SHOWN
|
elementsShown = READ_SHOWN
|
||||||
doCallTo(appendResults, R.string.cant_get_read){t, id, f -> api.readItems(t, id, f, itemsNumber, offset)}
|
doCallTo(appendResults, R.string.cant_get_read){t, id, f -> api.readItems(t, id, f, itemsNumber, offset)}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getStarred(appendResults: Boolean = false) {
|
private fun getStarred(appendResults: Boolean = false) {
|
||||||
offset = if (appendResults) (offset + itemsNumber)
|
|
||||||
else 0
|
|
||||||
firstVisible = if (appendResults) firstVisible else 0
|
|
||||||
elementsShown = FAV_SHOWN
|
elementsShown = FAV_SHOWN
|
||||||
doCallTo(appendResults, R.string.cant_get_favs){t, id, f -> api.starredItems(t, id, f, itemsNumber, offset)}
|
doCallTo(appendResults, R.string.cant_get_favs){t, id, f -> api.starredItems(t, id, f, itemsNumber, offset)}
|
||||||
}
|
}
|
||||||
@ -771,26 +775,38 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
api.stats.enqueue(object : Callback<Stats> {
|
api.stats.enqueue(object : Callback<Stats> {
|
||||||
override fun onResponse(call: Call<Stats>, response: Response<Stats>) {
|
override fun onResponse(call: Call<Stats>, response: Response<Stats>) {
|
||||||
if (response.body() != null) {
|
if (response.body() != null) {
|
||||||
if (displayUnreadCount)
|
|
||||||
tabNewBadge
|
badgeNew = response.body()!!.unread
|
||||||
.setText(response.body()!!.unread.toString())
|
badgeAll = response.body()!!.total
|
||||||
.maybeShow()
|
badgeFavs = response.body()!!.starred
|
||||||
if (displayAllCount) {
|
reloadBadgeContent()
|
||||||
tabArchiveBadge
|
|
||||||
.setText(response.body()!!.total.toString())
|
|
||||||
.maybeShow()
|
|
||||||
tabStarredBadge
|
|
||||||
.setText(response.body()!!.starred.toString())
|
|
||||||
.maybeShow()
|
|
||||||
} else {
|
|
||||||
tabArchiveBadge.removeBadge()
|
|
||||||
tabStarredBadge.removeBadge()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onFailure(call: Call<Stats>, t: Throwable) {}
|
override fun onFailure(call: Call<Stats>, t: Throwable) {}
|
||||||
})
|
})
|
||||||
|
} else {
|
||||||
|
reloadBadgeContent(succeeded = false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun reloadBadgeContent(succeeded: Boolean = true) {
|
||||||
|
if (succeeded) {
|
||||||
|
if (displayUnreadCount)
|
||||||
|
tabNewBadge
|
||||||
|
.setText(badgeNew.toString())
|
||||||
|
.maybeShow()
|
||||||
|
if (displayAllCount) {
|
||||||
|
tabArchiveBadge
|
||||||
|
.setText(badgeAll.toString())
|
||||||
|
.maybeShow()
|
||||||
|
tabStarredBadge
|
||||||
|
.setText(badgeFavs.toString())
|
||||||
|
.maybeShow()
|
||||||
|
} else {
|
||||||
|
tabArchiveBadge.removeBadge()
|
||||||
|
tabStarredBadge.removeBadge()
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
tabNewBadge.removeBadge()
|
tabNewBadge.removeBadge()
|
||||||
tabArchiveBadge.removeBadge()
|
tabArchiveBadge.removeBadge()
|
||||||
@ -919,4 +935,12 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
else -> return super.onOptionsItemSelected(item)
|
else -> return super.onOptionsItemSelected(item)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun maxItemNumber(): Int =
|
||||||
|
when (elementsShown) {
|
||||||
|
UNREAD_SHOWN -> badgeNew
|
||||||
|
READ_SHOWN -> badgeAll
|
||||||
|
FAV_SHOWN -> badgeFavs
|
||||||
|
else -> badgeNew // if !elementsShown then unread are fetched.
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,7 @@ buildscript {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:3.0.0'
|
classpath 'com.android.tools.build:gradle:3.0.1'
|
||||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||||
|
|
||||||
// NOTE: Do not place your application dependencies here; they belong
|
// NOTE: Do not place your application dependencies here; they belong
|
||||||
|
Reference in New Issue
Block a user