mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-21 20:49:36 +01:00
minor code cleanup
Signed-off-by: Marijan Šikić <marijansikic77@gmail.com>
This commit is contained in:
parent
c1066b6c1d
commit
80628e48e0
@ -44,7 +44,7 @@ import com.nextcloud.talk.controllers.base.providers.ActionBarProvider
|
||||
import com.nextcloud.talk.newarch.domain.repository.offline.UsersRepository
|
||||
import com.nextcloud.talk.newarch.features.account.serverentry.ServerEntryView
|
||||
import com.nextcloud.talk.newarch.features.contactsflow.contacts.ContactsView
|
||||
import com.nextcloud.talk.newarch.features.conversationslist.ConversationsListView
|
||||
import com.nextcloud.talk.newarch.features.conversationsList.ConversationsListView
|
||||
import com.nextcloud.talk.newarch.local.models.UserNgEntity
|
||||
import com.nextcloud.talk.utils.ConductorRemapping
|
||||
import com.nextcloud.talk.utils.SecurityUtils
|
||||
|
@ -50,7 +50,7 @@ import com.nextcloud.talk.newarch.di.module.StorageModule
|
||||
import com.nextcloud.talk.newarch.domain.di.module.UseCasesModule
|
||||
import com.nextcloud.talk.newarch.features.account.di.module.AccountModule
|
||||
import com.nextcloud.talk.newarch.features.contactsflow.di.module.ContactsFlowModule
|
||||
import com.nextcloud.talk.newarch.features.conversationslist.di.module.ConversationsListModule
|
||||
import com.nextcloud.talk.newarch.features.conversationsList.di.module.ConversationsListModule
|
||||
import com.nextcloud.talk.newarch.local.dao.UsersDao
|
||||
import com.nextcloud.talk.newarch.local.models.User
|
||||
import com.nextcloud.talk.newarch.local.models.other.UserStatus.*
|
||||
|
@ -26,6 +26,7 @@ import androidx.lifecycle.LiveData
|
||||
import com.nextcloud.talk.models.json.conversations.Conversation
|
||||
|
||||
interface ConversationsRepository {
|
||||
|
||||
fun getConversationsForUser(userId: Long, filter: CharSequence?): LiveData<List<Conversation>>
|
||||
fun getShortcutTargetConversations(userId: Long): LiveData<List<Conversation>>
|
||||
suspend fun getConversationForUserWithToken(internalUserId: Long, token: String): Conversation?
|
||||
|
@ -37,7 +37,7 @@ import com.bluelinelabs.conductor.archlifecycle.ControllerLifecycleOwner
|
||||
import com.bluelinelabs.conductor.autodispose.ControllerScopeProvider
|
||||
import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler
|
||||
import com.nextcloud.talk.R
|
||||
import com.nextcloud.talk.newarch.features.conversationslist.ConversationsListView
|
||||
import com.nextcloud.talk.newarch.features.conversationsList.ConversationsListView
|
||||
import com.nextcloud.talk.newarch.mvvm.BaseView
|
||||
import com.nextcloud.talk.utils.bundle.BundleKeys
|
||||
import com.uber.autodispose.lifecycle.LifecycleScopeProvider
|
||||
|
@ -41,7 +41,7 @@ import com.nextcloud.talk.newarch.domain.usecases.base.UseCaseResponse
|
||||
import com.nextcloud.talk.newarch.features.contactsflow.ContactsViewOperationState
|
||||
import com.nextcloud.talk.newarch.features.contactsflow.ContactsViewOperationStateWrapper
|
||||
import com.nextcloud.talk.newarch.features.contactsflow.ParticipantElement
|
||||
import com.nextcloud.talk.newarch.features.conversationslist.ConversationsListView
|
||||
import com.nextcloud.talk.newarch.features.conversationsList.ConversationsListView
|
||||
import com.nextcloud.talk.newarch.local.models.canUserCreateGroupConversations
|
||||
import com.nextcloud.talk.newarch.services.GlobalService
|
||||
import kotlinx.coroutines.runBlocking
|
||||
|
@ -36,7 +36,7 @@ import com.nextcloud.talk.newarch.domain.usecases.SetConversationPasswordUseCase
|
||||
import com.nextcloud.talk.newarch.domain.usecases.base.UseCaseResponse
|
||||
import com.nextcloud.talk.newarch.features.contactsflow.ContactsViewOperationState
|
||||
import com.nextcloud.talk.newarch.features.contactsflow.ContactsViewOperationStateWrapper
|
||||
import com.nextcloud.talk.newarch.features.conversationslist.ConversationsListView
|
||||
import com.nextcloud.talk.newarch.features.conversationsList.ConversationsListView
|
||||
import com.nextcloud.talk.newarch.services.GlobalService
|
||||
import org.koin.core.parameter.parametersOf
|
||||
|
||||
|
@ -20,7 +20,7 @@
|
||||
*
|
||||
*/
|
||||
|
||||
package com.nextcloud.talk.newarch.features.conversationslist
|
||||
package com.nextcloud.talk.newarch.features.conversationsList
|
||||
|
||||
import android.app.Application
|
||||
import androidx.lifecycle.ViewModel
|
||||
|
@ -20,7 +20,7 @@
|
||||
*
|
||||
*/
|
||||
|
||||
package com.nextcloud.talk.newarch.features.conversationslist
|
||||
package com.nextcloud.talk.newarch.features.conversationsList
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.drawable.Drawable
|
||||
|
@ -20,7 +20,7 @@
|
||||
*
|
||||
*/
|
||||
|
||||
package com.nextcloud.talk.newarch.features.conversationslist
|
||||
package com.nextcloud.talk.newarch.features.conversationsList
|
||||
|
||||
import androidx.lifecycle.LiveData
|
||||
import com.nextcloud.talk.models.json.conversations.Conversation
|
||||
|
@ -20,9 +20,8 @@
|
||||
*
|
||||
*/
|
||||
|
||||
package com.nextcloud.talk.newarch.features.conversationslist
|
||||
package com.nextcloud.talk.newarch.features.conversationsList
|
||||
|
||||
import android.content.Context
|
||||
import android.content.res.ColorStateList
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
@ -30,7 +29,6 @@ import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.lifecycle.observe
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.afollestad.materialdialogs.LayoutMode
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.afollestad.materialdialogs.bottomsheets.BottomSheet
|
||||
@ -51,12 +49,12 @@ import com.nextcloud.talk.newarch.features.contactsflow.contacts.ContactsView
|
||||
import com.nextcloud.talk.newarch.features.search.DebouncingTextWatcher
|
||||
import com.nextcloud.talk.newarch.local.models.toUser
|
||||
import com.nextcloud.talk.newarch.mvvm.BaseView
|
||||
import com.nextcloud.talk.newarch.mvvm.ext.initRecyclerView
|
||||
import com.nextcloud.talk.utils.ConductorRemapping
|
||||
import com.nextcloud.talk.utils.DisplayUtils
|
||||
import com.nextcloud.talk.utils.animations.SharedElementTransition
|
||||
import com.nextcloud.talk.utils.bundle.BundleKeys
|
||||
import com.otaliastudios.elements.Adapter
|
||||
import com.otaliastudios.elements.Adapter.Companion.AUTOSCROLL_POSITION_0
|
||||
import com.otaliastudios.elements.Element
|
||||
import com.otaliastudios.elements.Page
|
||||
import com.otaliastudios.elements.Presenter
|
||||
@ -84,28 +82,31 @@ class ConversationsListView : BaseView() {
|
||||
|
||||
val adapter = Adapter.builder(this)
|
||||
.addSource(ConversationsListSource(viewModel.conversationsLiveData))
|
||||
.addPresenter(ConversationPresenter(activity as Context, ::onElementClick, ::onElementLongClick))
|
||||
.addPresenter(Presenter.forLoadingIndicator(activity as Context, R.layout.loading_state))
|
||||
.addPresenter(AdvancedEmptyPresenter(activity as Context, R.layout.message_state, ::openNewConversationScreen) { view ->
|
||||
.addPresenter(ConversationPresenter(context, ::onElementClick, ::onElementLongClick))
|
||||
.addPresenter(Presenter.forLoadingIndicator(context, R.layout.loading_state))
|
||||
.addPresenter(AdvancedEmptyPresenter(context, R.layout.message_state, ::openNewConversationScreen) { view ->
|
||||
view.messageStateImageView.imageTintList = resources?.getColor(R.color.colorPrimary)?.let { ColorStateList.valueOf(it) }
|
||||
})
|
||||
.addPresenter(Presenter.forErrorIndicator(activity as Context, R.layout.message_state) { view, throwable ->
|
||||
view.messageStateTextView.setText(R.string.nc_oops)
|
||||
view.messageStateImageView.setImageDrawable((activity as Context).getDrawable(drawable.ic_announcement_white_24dp))
|
||||
view.messageStateImageView.imageTintList = resources?.getColor(R.color.colorPrimary)?.let { ColorStateList.valueOf(it) }
|
||||
})
|
||||
.setAutoScrollMode(Adapter.AUTOSCROLL_POSITION_0, true)
|
||||
.addPresenter(Presenter.forErrorIndicator(context, R.layout.message_state) { view, _ ->
|
||||
with(view) {
|
||||
messageStateTextView.setText(R.string.nc_oops)
|
||||
messageStateImageView.setImageDrawable(context.getDrawable(drawable.ic_announcement_white_24dp))
|
||||
messageStateImageView.imageTintList = resources?.getColor(R.color.colorPrimary)?.let { ColorStateList.valueOf(it) }
|
||||
}
|
||||
}
|
||||
)
|
||||
.setAutoScrollMode(AUTOSCROLL_POSITION_0, true)
|
||||
.into(view.recyclerView)
|
||||
|
||||
|
||||
view.apply {
|
||||
recyclerView.initRecyclerView(LinearLayoutManager(activity), adapter, true)
|
||||
swipeRefreshLayoutView.setOnRefreshListener {
|
||||
recyclerView.adapter = adapter
|
||||
with(swipeRefreshLayoutView) {
|
||||
setColorSchemeResources(R.color.colorPrimary)
|
||||
setOnRefreshListener {
|
||||
view.swipeRefreshLayoutView.isRefreshing = false
|
||||
viewModel.loadConversations()
|
||||
}
|
||||
|
||||
swipeRefreshLayoutView.setColorSchemeResources(R.color.colorPrimary)
|
||||
}
|
||||
}
|
||||
|
||||
activity?.inputEditText?.addTextChangedListener(DebouncingTextWatcher(lifecycle, ::setSearchQuery))
|
||||
@ -124,19 +125,22 @@ class ConversationsListView : BaseView() {
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
viewModel.apply {
|
||||
avatar.observe(this@ConversationsListView) { avatar ->
|
||||
activity?.settingsButton?.imageTintList = null
|
||||
activity?.settingsButton?.setImageDrawable(avatar)
|
||||
avatar.observe(this@ConversationsListView) {
|
||||
with(activity) {
|
||||
this?.settingsButton?.imageTintList = null
|
||||
this?.settingsButton?.setImageDrawable(it)
|
||||
}
|
||||
}
|
||||
|
||||
filterLiveData.observe(this@ConversationsListView) { query ->
|
||||
if (!transitionInProgress) {
|
||||
activity?.settingsButton?.isVisible = query.isNullOrEmpty()
|
||||
activity?.clearButton?.isVisible = !query.isNullOrEmpty()
|
||||
with(activity) {
|
||||
this?.settingsButton?.isVisible = query.isNullOrEmpty()
|
||||
this?.clearButton?.isVisible = !query.isNullOrEmpty()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -149,9 +153,7 @@ class ConversationsListView : BaseView() {
|
||||
appBar?.isVisible = true
|
||||
}
|
||||
|
||||
private fun setSearchQuery(query: CharSequence?) {
|
||||
viewModel.filterLiveData.postValue(query)
|
||||
}
|
||||
private fun setSearchQuery(query: CharSequence?) = viewModel.filterLiveData.postValue(query)
|
||||
|
||||
private fun onElementClick(page: Page, holder: Presenter.Holder, element: Element<Conversation>) {
|
||||
val conversation = element.data
|
||||
@ -160,16 +162,18 @@ class ConversationsListView : BaseView() {
|
||||
user?.let { user ->
|
||||
conversation?.let { conversation ->
|
||||
val bundle = Bundle()
|
||||
bundle.putParcelable(BundleKeys.KEY_USER_ENTITY, user)
|
||||
bundle.putString(BundleKeys.KEY_CONVERSATION_TOKEN, conversation.token)
|
||||
bundle.putString(BundleKeys.KEY_ROOM_ID, conversation.conversationId)
|
||||
bundle.putParcelable(BundleKeys.KEY_ACTIVE_CONVERSATION, Parcels.wrap(conversation))
|
||||
with(bundle) {
|
||||
putParcelable(BundleKeys.KEY_USER_ENTITY, user)
|
||||
putString(BundleKeys.KEY_CONVERSATION_TOKEN, conversation.token)
|
||||
putString(BundleKeys.KEY_ROOM_ID, conversation.conversationId)
|
||||
putParcelable(BundleKeys.KEY_ACTIVE_CONVERSATION, Parcels.wrap(conversation))
|
||||
}
|
||||
|
||||
ConductorRemapping.remapChatController(
|
||||
router, user.id, conversation.token!!,
|
||||
bundle, false
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -182,7 +186,7 @@ class ConversationsListView : BaseView() {
|
||||
cornerRadius(res = R.dimen.corner_radius)
|
||||
title(text = conversation.displayName)
|
||||
|
||||
listItemsWithImage(getConversationMenuItemsForConversation(conversation)) { dialog, index, item ->
|
||||
listItemsWithImage(getConversationMenuItemsForConversation(conversation)) { _, _, item ->
|
||||
when (item.iconRes) {
|
||||
drawable.ic_star_border_black_24dp -> {
|
||||
viewModel.changeFavoriteValueForConversation(conversation, false)
|
||||
@ -227,20 +231,17 @@ class ConversationsListView : BaseView() {
|
||||
}
|
||||
}
|
||||
|
||||
override fun getLayoutId(): Int {
|
||||
return R.layout.conversations_list_view
|
||||
}
|
||||
override fun getLayoutId(): Int = R.layout.conversations_list_view
|
||||
|
||||
private fun openNewConversationScreen() {
|
||||
private fun openNewConversationScreen() =
|
||||
router.pushController(
|
||||
RouterTransaction.with(ContactsView())
|
||||
.pushChangeHandler(HorizontalChangeHandler())
|
||||
.popChangeHandler(HorizontalChangeHandler()))
|
||||
}
|
||||
.popChangeHandler(HorizontalChangeHandler())
|
||||
)
|
||||
|
||||
private fun getConversationMenuItemsForConversation(conversation: Conversation): MutableList<BasicListItemWithImage> {
|
||||
val items = mutableListOf<BasicListItemWithImage>()
|
||||
|
||||
if (conversation.favorite) {
|
||||
items.add(
|
||||
BasicListItemWithImage(
|
||||
@ -288,17 +289,11 @@ class ConversationsListView : BaseView() {
|
||||
return items
|
||||
}
|
||||
|
||||
override fun onFloatingActionButtonClick() {
|
||||
openNewConversationScreen()
|
||||
}
|
||||
override fun onFloatingActionButtonClick() = openNewConversationScreen()
|
||||
|
||||
override fun getAppBarLayoutType(): AppBarLayoutType {
|
||||
return AppBarLayoutType.SEARCH_BAR
|
||||
}
|
||||
override fun getAppBarLayoutType(): AppBarLayoutType = AppBarLayoutType.SEARCH_BAR
|
||||
|
||||
override fun getTitle(): String? {
|
||||
return resources?.getString(R.string.nc_search_conversations)
|
||||
}
|
||||
override fun getTitle(): String? = resources?.getString(R.string.nc_search_conversations)
|
||||
|
||||
override fun onRestoreViewState(view: View, savedViewState: Bundle) {
|
||||
super.onRestoreViewState(view, savedViewState)
|
||||
|
@ -20,7 +20,7 @@
|
||||
*
|
||||
*/
|
||||
|
||||
package com.nextcloud.talk.newarch.features.conversationslist
|
||||
package com.nextcloud.talk.newarch.features.conversationsList
|
||||
|
||||
import android.app.Application
|
||||
import android.graphics.drawable.Drawable
|
||||
@ -49,7 +49,7 @@ import org.koin.core.parameter.parametersOf
|
||||
import java.util.concurrent.locks.ReentrantLock
|
||||
|
||||
|
||||
class ConversationsListViewModel constructor(
|
||||
class ConversationsListViewModel (
|
||||
application: Application,
|
||||
private val getConversationsUseCase: GetConversationsUseCase,
|
||||
private val setConversationFavoriteValueUseCase: SetConversationFavoriteValueUseCase,
|
||||
|
@ -20,7 +20,7 @@
|
||||
*
|
||||
*/
|
||||
|
||||
package com.nextcloud.talk.newarch.features.conversationslist
|
||||
package com.nextcloud.talk.newarch.features.conversationsList
|
||||
|
||||
enum class ConversationsListViewNetworkState {
|
||||
LOADING,
|
||||
|
@ -20,15 +20,17 @@
|
||||
*
|
||||
*/
|
||||
|
||||
package com.nextcloud.talk.newarch.features.conversationslist.di.module
|
||||
package com.nextcloud.talk.newarch.features.conversationsList.di.module
|
||||
|
||||
import android.app.Application
|
||||
import android.os.CountDownTimer
|
||||
import android.util.Log
|
||||
import com.nextcloud.talk.newarch.domain.repository.offline.ConversationsRepository
|
||||
import com.nextcloud.talk.newarch.domain.usecases.DeleteConversationUseCase
|
||||
import com.nextcloud.talk.newarch.domain.usecases.GetConversationsUseCase
|
||||
import com.nextcloud.talk.newarch.domain.usecases.LeaveConversationUseCase
|
||||
import com.nextcloud.talk.newarch.domain.usecases.SetConversationFavoriteValueUseCase
|
||||
import com.nextcloud.talk.newarch.features.conversationslist.ConversationListViewModelFactory
|
||||
import com.nextcloud.talk.newarch.features.conversationsList.ConversationListViewModelFactory
|
||||
import com.nextcloud.talk.newarch.services.GlobalService
|
||||
import org.koin.android.ext.koin.androidApplication
|
||||
import org.koin.dsl.module
|
||||
|
@ -18,8 +18,10 @@
|
||||
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<androidx.coordinatorlayout.widget.CoordinatorLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/generic_rv_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
@ -32,6 +34,7 @@
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/recyclerView"
|
||||
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:clipToPadding="false"
|
||||
|
Loading…
Reference in New Issue
Block a user