mirror of
https://github.com/nextcloud/talk-android.git
synced 2024-11-24 14:05:40 +03:00
hide "unread mention" bubble in search mode
This commit is contained in:
parent
540ec1ab71
commit
ce248a7fc0
1 changed files with 41 additions and 24 deletions
|
@ -131,6 +131,7 @@ import io.reactivex.Observable
|
|||
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.disposables.Disposable
|
||||
import io.reactivex.schedulers.Schedulers
|
||||
import io.reactivex.subjects.BehaviorSubject
|
||||
import org.apache.commons.lang3.builder.CompareToBuilder
|
||||
import org.greenrobot.eventbus.Subscribe
|
||||
import org.greenrobot.eventbus.ThreadMode
|
||||
|
@ -197,6 +198,7 @@ class ConversationsListActivity :
|
|||
FilterConversationFragment.MENTION to false,
|
||||
FilterConversationFragment.UNREAD to false
|
||||
)
|
||||
val searchBehaviorSubject = BehaviorSubject.createDefault(false)
|
||||
|
||||
private val onBackPressedCallback = object : OnBackPressedCallback(true) {
|
||||
override fun handleOnBackPressed() {
|
||||
|
@ -217,10 +219,10 @@ class ConversationsListActivity :
|
|||
viewThemeUtils.material.themeSearchBarText(binding.searchText)
|
||||
|
||||
forwardMessage = intent.getBooleanExtra(KEY_FORWARD_MSG_FLAG, false)
|
||||
|
||||
onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
|
||||
}
|
||||
|
||||
|
||||
override fun onPostCreate(savedInstanceState: Bundle?) {
|
||||
super.onPostCreate(savedInstanceState)
|
||||
|
||||
|
@ -266,7 +268,7 @@ class ConversationsListActivity :
|
|||
|
||||
loadUserAvatar(binding.switchAccountButton)
|
||||
viewThemeUtils.material.colorMaterialTextButton(binding.switchAccountButton)
|
||||
|
||||
searchBehaviorSubject.onNext(false)
|
||||
fetchRooms()
|
||||
} else {
|
||||
Log.e(TAG, "userManager.currentUser.blockingGet() returned null")
|
||||
|
@ -498,6 +500,7 @@ class ConversationsListActivity :
|
|||
adapter!!.updateDataSet(filterableConversationItems, false)
|
||||
adapter!!.showAllHeaders()
|
||||
binding?.swipeRefreshLayoutView?.isEnabled = false
|
||||
searchBehaviorSubject.onNext(true)
|
||||
return true
|
||||
}
|
||||
|
||||
|
@ -510,6 +513,7 @@ class ConversationsListActivity :
|
|||
// cancel any pending searches
|
||||
searchHelper!!.cancelSearch()
|
||||
binding?.swipeRefreshLayoutView?.isRefreshing = false
|
||||
searchBehaviorSubject.onNext(false )
|
||||
}
|
||||
binding?.swipeRefreshLayoutView?.isEnabled = true
|
||||
searchView!!.onActionViewCollapsed()
|
||||
|
@ -645,7 +649,8 @@ class ConversationsListActivity :
|
|||
if (!filterState.containsValue(true)) filterableConversationItems = conversationItems
|
||||
filterConversation()
|
||||
adapter!!.updateDataSet(filterableConversationItems, false)
|
||||
Handler().postDelayed({ checkToShowUnreadBubble() }, UNREAD_BUBBLE_DELAY.toLong())
|
||||
Handler().postDelayed({ checkToShowUnreadBubble() }, UNREAD_BUBBLE_DELAY
|
||||
.toLong())
|
||||
fetchOpenConversations(apiVersion)
|
||||
binding?.swipeRefreshLayoutView?.isRefreshing = false
|
||||
}, { throwable: Throwable ->
|
||||
|
@ -820,7 +825,10 @@ class ConversationsListActivity :
|
|||
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
|
||||
super.onScrollStateChanged(recyclerView, newState)
|
||||
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
|
||||
checkToShowUnreadBubble()
|
||||
val isSearchActive = searchBehaviorSubject.value
|
||||
if(!isSearchActive!!){
|
||||
checkToShowUnreadBubble()
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
@ -869,31 +877,39 @@ class ConversationsListActivity :
|
|||
binding?.newMentionPopupBubble?.let { viewThemeUtils.material.colorMaterialButtonPrimaryFilled(it) }
|
||||
}
|
||||
|
||||
|
||||
@Suppress("Detekt.TooGenericExceptionCaught")
|
||||
private fun checkToShowUnreadBubble() {
|
||||
try {
|
||||
val lastVisibleItem = layoutManager!!.findLastCompletelyVisibleItemPosition()
|
||||
for (flexItem in conversationItems) {
|
||||
val conversation: Conversation = (flexItem as ConversationItem).model
|
||||
val position = adapter!!.getGlobalPositionOf(flexItem)
|
||||
if (hasUnreadItems(conversation) && position > lastVisibleItem) {
|
||||
nextUnreadConversationScrollPosition = position
|
||||
if (!binding?.newMentionPopupBubble?.isShown!!) {
|
||||
binding?.newMentionPopupBubble?.show()
|
||||
searchBehaviorSubject.subscribe { value ->
|
||||
if (value) {
|
||||
nextUnreadConversationScrollPosition = 0
|
||||
binding.newMentionPopupBubble.hide()
|
||||
} else {
|
||||
try {
|
||||
val lastVisibleItem = layoutManager!!.findLastCompletelyVisibleItemPosition()
|
||||
for (flexItem in conversationItems) {
|
||||
val conversation: Conversation = (flexItem as ConversationItem).model
|
||||
val position = adapter!!.getGlobalPositionOf(flexItem)
|
||||
if (hasUnreadItems(conversation) && position > lastVisibleItem) {
|
||||
nextUnreadConversationScrollPosition = position
|
||||
if (!binding?.newMentionPopupBubble?.isShown!!) {
|
||||
binding?.newMentionPopupBubble?.show()
|
||||
}
|
||||
return@subscribe
|
||||
}
|
||||
nextUnreadConversationScrollPosition = 0
|
||||
binding?.newMentionPopupBubble?.hide()
|
||||
}
|
||||
return
|
||||
} catch (e: NullPointerException) {
|
||||
Log.d(
|
||||
TAG,
|
||||
"A NPE was caught when trying to show the unread popup bubble. This might happen when the " +
|
||||
"user already left the conversations-list screen so the popup bubble is not available anymore.",
|
||||
e
|
||||
)
|
||||
}
|
||||
}
|
||||
nextUnreadConversationScrollPosition = 0
|
||||
binding?.newMentionPopupBubble?.hide()
|
||||
} catch (e: NullPointerException) {
|
||||
Log.d(
|
||||
TAG,
|
||||
"A NPE was caught when trying to show the unread popup bubble. This might happen when the " +
|
||||
"user already left the conversations-list screen so the popup bubble is not available anymore.",
|
||||
e
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun hasUnreadItems(conversation: Conversation) =
|
||||
|
@ -907,6 +923,7 @@ class ConversationsListActivity :
|
|||
startActivity(intent)
|
||||
}
|
||||
|
||||
|
||||
private fun dispose(disposable: Disposable?) {
|
||||
if (disposable != null && !disposable.isDisposed) {
|
||||
disposable.dispose()
|
||||
|
|
Loading…
Reference in a new issue