diff --git a/app/schemas/com.nextcloud.talk.newarch.local.db.TalkDatabase/1.json b/app/schemas/com.nextcloud.talk.newarch.local.db.TalkDatabase/1.json index 5ebd0a436..f63b80b4e 100644 --- a/app/schemas/com.nextcloud.talk.newarch.local.db.TalkDatabase/1.json +++ b/app/schemas/com.nextcloud.talk.newarch.local.db.TalkDatabase/1.json @@ -2,11 +2,11 @@ "formatVersion": 1, "database": { "version": 1, - "identityHash": "24ed06b3e6bdb36d2657cc9735999e89", + "identityHash": "2c4f372b48cd11e679b04c6d577f1cd8", "entities": [ { "tableName": "conversations", - "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `user_id` INTEGER, `conversation_id` TEXT, `token` TEXT, `name` TEXT, `display_name` TEXT, `type` INTEGER, `count` INTEGER NOT NULL, `number_of_guests` INTEGER NOT NULL, `participants` TEXT, `participant_type` INTEGER, `has_password` INTEGER NOT NULL, `session_id` TEXT, `favorite` INTEGER NOT NULL, `last_activity` INTEGER NOT NULL, `unread_messages` INTEGER NOT NULL, `unread_mention` INTEGER NOT NULL, `last_message` TEXT, `object_type` TEXT, `notification_level` INTEGER, `read_only_state` INTEGER, `lobby_state` INTEGER, `lobby_timer` INTEGER, `last_read_message` INTEGER NOT NULL, `can_start_call` INTEGER, `modified_at` INTEGER, `changing` INTEGER NOT NULL, `local_configuration` TEXT, PRIMARY KEY(`id`), FOREIGN KEY(`user_id`) REFERENCES `users`(`id`) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED)", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `user_id` INTEGER, `conversation_id` TEXT, `token` TEXT, `name` TEXT, `display_name` TEXT, `type` INTEGER, `count` INTEGER NOT NULL, `number_of_guests` INTEGER NOT NULL, `participants` TEXT, `participant_type` INTEGER, `has_password` INTEGER NOT NULL, `session_id` TEXT, `favorite` INTEGER NOT NULL, `last_activity` INTEGER NOT NULL, `unread_messages` INTEGER NOT NULL, `unread_mention` INTEGER NOT NULL, `last_message` TEXT, `object_type` TEXT, `notification_level` INTEGER, `read_only_state` INTEGER, `lobby_state` INTEGER, `lobby_timer` INTEGER, `last_read_message` INTEGER NOT NULL, `can_start_call` INTEGER, `modified_at` INTEGER, `changing` INTEGER NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`user_id`) REFERENCES `users`(`id`) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED)", "fields": [ { "fieldPath": "id", @@ -169,12 +169,6 @@ "columnName": "changing", "affinity": "INTEGER", "notNull": true - }, - { - "fieldPath": "localConfiguration", - "columnName": "local_configuration", - "affinity": "TEXT", - "notNull": false } ], "primaryKey": { @@ -395,7 +389,7 @@ "views": [], "setupQueries": [ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", - "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '24ed06b3e6bdb36d2657cc9735999e89')" + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '2c4f372b48cd11e679b04c6d577f1cd8')" ] } } \ No newline at end of file diff --git a/app/src/main/java/com/nextcloud/talk/models/json/conversations/Conversation.kt b/app/src/main/java/com/nextcloud/talk/models/json/conversations/Conversation.kt index 98519bb46..52934a71b 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/conversations/Conversation.kt +++ b/app/src/main/java/com/nextcloud/talk/models/json/conversations/Conversation.kt @@ -29,7 +29,6 @@ import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.models.json.chat.ChatMessage import com.nextcloud.talk.models.json.converters.* import com.nextcloud.talk.models.json.participants.Participant -import com.nextcloud.talk.newarch.data.model.LocalConversationConfiguration import com.nextcloud.talk.newarch.local.models.UserNgEntity import lombok.Data import org.parceler.Parcel @@ -40,8 +39,6 @@ import java.util.* @Data @JsonObject(serializeNullCollectionElements = true, serializeNullObjects = true) class Conversation { - @JsonIgnore - var localConfiguration: LocalConversationConfiguration? = null @JsonIgnore var databaseId: String? = null @JsonIgnore @@ -193,7 +190,6 @@ class Conversation { if (lastReadMessageId != other.lastReadMessageId) return false if (canStartCall != other.canStartCall) return false if (changing != other.changing) return false - if (localConfiguration != other.localConfiguration) return false return true } diff --git a/app/src/main/java/com/nextcloud/talk/newarch/data/repository/online/NextcloudTalkRepositoryImpl.kt b/app/src/main/java/com/nextcloud/talk/newarch/data/repository/online/NextcloudTalkRepositoryImpl.kt index c3f1c6350..013f69668 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/data/repository/online/NextcloudTalkRepositoryImpl.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/data/repository/online/NextcloudTalkRepositoryImpl.kt @@ -20,6 +20,7 @@ package com.nextcloud.talk.newarch.data.repository.online +import com.nextcloud.talk.models.json.capabilities.CapabilitiesOverall import com.nextcloud.talk.models.json.conversations.Conversation import com.nextcloud.talk.models.json.conversations.RoomOverall import com.nextcloud.talk.models.json.generic.GenericOverall @@ -63,6 +64,10 @@ class NextcloudTalkRepositoryImpl(private val apiService: ApiService) : Nextclou return apiService.exitConversation(userNgEntity.getCredentials(), ApiUtils.getUrlForSettingMyselfAsActiveParticipant(userNgEntity.baseUrl, conversationToken)) } + override suspend fun getCapabilitiesForServer(server: String): CapabilitiesOverall { + return apiService.getCapabilities(ApiUtils.getUrlForCapabilities(server)) + } + override suspend fun setFavoriteValueForConversation( user: UserNgEntity, conversation: Conversation, diff --git a/app/src/main/java/com/nextcloud/talk/newarch/data/source/remote/ApiService.kt b/app/src/main/java/com/nextcloud/talk/newarch/data/source/remote/ApiService.kt index 9cff494ee..fc35dcb13 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/data/source/remote/ApiService.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/data/source/remote/ApiService.kt @@ -20,6 +20,7 @@ package com.nextcloud.talk.newarch.data.source.remote +import com.nextcloud.talk.models.json.capabilities.CapabilitiesOverall import com.nextcloud.talk.models.json.conversations.RoomOverall import com.nextcloud.talk.models.json.conversations.RoomsOverall import com.nextcloud.talk.models.json.generic.GenericOverall @@ -30,6 +31,9 @@ interface ApiService { /* Server URL is: baseUrl + ocsApiVersion + spreedApiVersion + /room */ + @GET + suspend fun getCapabilities(@Url url: String): CapabilitiesOverall + @GET suspend fun getConversations( @Header( diff --git a/app/src/main/java/com/nextcloud/talk/newarch/domain/repository/online/NextcloudTalkRepository.kt b/app/src/main/java/com/nextcloud/talk/newarch/domain/repository/online/NextcloudTalkRepository.kt index d33a1342a..e5f52c6ef 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/domain/repository/online/NextcloudTalkRepository.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/domain/repository/online/NextcloudTalkRepository.kt @@ -20,6 +20,7 @@ package com.nextcloud.talk.newarch.domain.repository.online +import com.nextcloud.talk.models.json.capabilities.CapabilitiesOverall import com.nextcloud.talk.models.json.conversations.Conversation import com.nextcloud.talk.models.json.conversations.RoomOverall import com.nextcloud.talk.models.json.generic.GenericOverall @@ -58,4 +59,8 @@ interface NextcloudTalkRepository { userNgEntity: UserNgEntity, conversationToken: String ): GenericOverall + + suspend fun getCapabilitiesForServer( + server: String + ): CapabilitiesOverall } diff --git a/app/src/main/java/com/nextcloud/talk/newarch/domain/usecases/GetCapabilitiesUseCase.kt b/app/src/main/java/com/nextcloud/talk/newarch/domain/usecases/GetCapabilitiesUseCase.kt new file mode 100644 index 000000000..a6621fdf4 --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/newarch/domain/usecases/GetCapabilitiesUseCase.kt @@ -0,0 +1,39 @@ +/* + * + * * Nextcloud Talk application + * * + * * @author Mario Danic + * * Copyright (C) 2017-2020 Mario Danic + * * + * * This program is free software: you can redistribute it and/or modify + * * it under the terms of the GNU General Public License as published by + * * the Free Software Foundation, either version 3 of the License, or + * * at your option) any later version. + * * + * * This program is distributed in the hope that it will be useful, + * * but WITHOUT ANY WARRANTY; without even the implied warranty of + * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * * GNU General Public License for more details. + * * + * * You should have received a copy of the GNU General Public License + * * along with this program. If not, see . + * + */ + +package com.nextcloud.talk.newarch.domain.usecases + +import com.nextcloud.talk.models.json.capabilities.CapabilitiesOverall +import com.nextcloud.talk.newarch.data.source.remote.ApiErrorHandler +import com.nextcloud.talk.newarch.domain.repository.online.NextcloudTalkRepository +import com.nextcloud.talk.newarch.domain.usecases.base.UseCase +import org.koin.core.parameter.DefinitionParameters + +class GetCapabilitiesUseCase constructor( + private val nextcloudTalkRepository: NextcloudTalkRepository, + apiErrorHandler: ApiErrorHandler? +) : UseCase(apiErrorHandler) { + override suspend fun run(params: Any?): CapabilitiesOverall { + val definitionParameters = params as DefinitionParameters + return nextcloudTalkRepository.getCapabilitiesForServer(definitionParameters[0]) + } +} diff --git a/app/src/main/java/com/nextcloud/talk/newarch/data/model/LocalConversationConfiguration.kt b/app/src/main/java/com/nextcloud/talk/newarch/features/account/ServerEntryCapabilitiesCheckState.kt similarity index 64% rename from app/src/main/java/com/nextcloud/talk/newarch/data/model/LocalConversationConfiguration.kt rename to app/src/main/java/com/nextcloud/talk/newarch/features/account/ServerEntryCapabilitiesCheckState.kt index cc08f307f..770f6ddb4 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/data/model/LocalConversationConfiguration.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/features/account/ServerEntryCapabilitiesCheckState.kt @@ -20,18 +20,11 @@ * */ -package com.nextcloud.talk.newarch.data.model +package com.nextcloud.talk.newarch.features.account -import android.os.Parcelable -import kotlinx.android.parcel.Parcelize -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable - -@Parcelize -@Serializable -data class LocalConversationConfiguration( - @SerialName("important_conversation") - var importantConversation: Boolean = false, - @SerialName("ignore_calls") - var ignoreCalls: Boolean = false -) : Parcelable \ No newline at end of file +enum class ServerEntryCapabilitiesCheckState { + WAITING_FOR_INPUT, + CHECKING, + SERVER_UNSUPPORTED, + SERVER_SUPPORTED +} \ No newline at end of file diff --git a/app/src/main/java/com/nextcloud/talk/newarch/features/account/ServerEntryVideModelFactory.kt b/app/src/main/java/com/nextcloud/talk/newarch/features/account/ServerEntryVideModelFactory.kt new file mode 100644 index 000000000..82630f9bb --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/newarch/features/account/ServerEntryVideModelFactory.kt @@ -0,0 +1,34 @@ +/* + * + * * Nextcloud Talk application + * * + * * @author Mario Danic + * * Copyright (C) 2017-2020 Mario Danic + * * + * * This program is free software: you can redistribute it and/or modify + * * it under the terms of the GNU General Public License as published by + * * the Free Software Foundation, either version 3 of the License, or + * * at your option) any later version. + * * + * * This program is distributed in the hope that it will be useful, + * * but WITHOUT ANY WARRANTY; without even the implied warranty of + * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * * GNU General Public License for more details. + * * + * * You should have received a copy of the GNU General Public License + * * along with this program. If not, see . + * + */ + +package com.nextcloud.talk.newarch.features.account + +import android.app.Application +import androidx.lifecycle.ViewModel +import androidx.lifecycle.ViewModelProvider +import com.nextcloud.talk.newarch.domain.usecases.GetCapabilitiesUseCase + +class ServerEntryVideModelFactory constructor(private val application: Application, private val getCapabilitiesUseCase: GetCapabilitiesUseCase): ViewModelProvider.Factory { + override fun create(modelClass: Class): T { + return ServerEntryViewModel(application, getCapabilitiesUseCase) as T + } +} diff --git a/app/src/main/java/com/nextcloud/talk/newarch/features/account/ServerEntryView.kt b/app/src/main/java/com/nextcloud/talk/newarch/features/account/ServerEntryView.kt new file mode 100644 index 000000000..3d3b48930 --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/newarch/features/account/ServerEntryView.kt @@ -0,0 +1,77 @@ +/* + * + * * Nextcloud Talk application + * * + * * @author Mario Danic + * * Copyright (C) 2017-2020 Mario Danic + * * + * * This program is free software: you can redistribute it and/or modify + * * it under the terms of the GNU General Public License as published by + * * the Free Software Foundation, either version 3 of the License, or + * * at your option) any later version. + * * + * * This program is distributed in the hope that it will be useful, + * * but WITHOUT ANY WARRANTY; without even the implied warranty of + * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * * GNU General Public License for more details. + * * + * * You should have received a copy of the GNU General Public License + * * along with this program. If not, see . + * + */ + +package com.nextcloud.talk.newarch.features.account + +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.core.view.isVisible +import androidx.lifecycle.Observer +import com.nextcloud.talk.R +import com.nextcloud.talk.newarch.conversationsList.mvp.BaseView +import kotlinx.android.synthetic.main.server_entry_view.view.* +import org.koin.android.ext.android.inject + +class ServerEntryView : BaseView() { + private lateinit var viewModel: ServerEntryViewModel + val factory: ServerEntryVideModelFactory by inject() + + override fun getLayoutId(): Int { + return R.layout.server_entry_view + } + + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup): View { + actionBar?.hide() + viewModel = viewModelProvider(factory).get(ServerEntryViewModel::class.java) + val view = super.onCreateView(inflater, container) + + viewModel.apply { + checkState.observe(this@ServerEntryView, Observer { + when(it) { + ServerEntryCapabilitiesCheckState.WAITING_FOR_INPUT -> { + view.serverEntryTextInputLayout.isEnabled = true + view.serverEntryProgressBar.isVisible = false + view.serverEntryTextInputEditText.setCompoundDrawablesRelative(null, null, resources?.getDrawable(R.drawable.ic_arrow_forward_white_24px), null) + } + ServerEntryCapabilitiesCheckState.CHECKING -> { + view.serverEntryTextInputLayout.isEnabled = false + view.serverEntryTextInputEditText.setCompoundDrawablesRelative(null, null, null, null) + view.serverEntryProgressBar.isVisible = true + } + ServerEntryCapabilitiesCheckState.SERVER_SUPPORTED -> { + + } + // Unsupported + else -> { + view.serverEntryTextInputLayout.isEnabled = true + view.serverEntryProgressBar.isVisible = false + view.serverEntryTextInputEditText.setCompoundDrawablesRelative(null, null, resources?.getDrawable(R.drawable.ic_arrow_forward_white_24px), null) + } + } + }) + } + + return view + } +} \ No newline at end of file diff --git a/app/src/main/java/com/nextcloud/talk/newarch/features/account/ServerEntryViewModel.kt b/app/src/main/java/com/nextcloud/talk/newarch/features/account/ServerEntryViewModel.kt new file mode 100644 index 000000000..04005f066 --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/newarch/features/account/ServerEntryViewModel.kt @@ -0,0 +1,59 @@ +/* + * + * * Nextcloud Talk application + * * + * * @author Mario Danic + * * Copyright (C) 2017-2020 Mario Danic + * * + * * This program is free software: you can redistribute it and/or modify + * * it under the terms of the GNU General Public License as published by + * * the Free Software Foundation, either version 3 of the License, or + * * at your option) any later version. + * * + * * This program is distributed in the hope that it will be useful, + * * but WITHOUT ANY WARRANTY; without even the implied warranty of + * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * * GNU General Public License for more details. + * * + * * You should have received a copy of the GNU General Public License + * * along with this program. If not, see . + * + */ + +package com.nextcloud.talk.newarch.features.account + +import android.app.Application +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.viewModelScope +import com.nextcloud.talk.models.json.capabilities.CapabilitiesOverall +import com.nextcloud.talk.newarch.conversationsList.mvp.BaseViewModel +import com.nextcloud.talk.newarch.data.model.ErrorModel +import com.nextcloud.talk.newarch.domain.usecases.* +import com.nextcloud.talk.newarch.domain.usecases.base.UseCaseResponse +import org.koin.core.parameter.parametersOf + +class ServerEntryViewModel constructor( + application: Application, + private val getCapabilitiesUseCase: GetCapabilitiesUseCase +) : BaseViewModel(application) { + val checkState: MutableLiveData = MutableLiveData(ServerEntryCapabilitiesCheckState.WAITING_FOR_INPUT) + + fun fetchCapabilities(url: String) { + checkState.postValue(ServerEntryCapabilitiesCheckState.CHECKING) + getCapabilitiesUseCase.invoke(viewModelScope, parametersOf(url), object : UseCaseResponse { + override suspend fun onSuccess(result: CapabilitiesOverall) { + val hasSupportedTalkVersion = result.ocs?.data?.capabilities?.spreedCapability?.features?.contains("no-ping") == true + if (hasSupportedTalkVersion) { + checkState.postValue(ServerEntryCapabilitiesCheckState.SERVER_SUPPORTED) + } else { + checkState.postValue(ServerEntryCapabilitiesCheckState.SERVER_UNSUPPORTED) + } + } + + override suspend fun onError(errorModel: ErrorModel?) { + checkState.postValue(ServerEntryCapabilitiesCheckState.SERVER_UNSUPPORTED) + } + + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/nextcloud/talk/newarch/features/chat/ChatView.kt b/app/src/main/java/com/nextcloud/talk/newarch/features/chat/ChatView.kt index 23f6b56ac..866a272c3 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/features/chat/ChatView.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/features/chat/ChatView.kt @@ -43,7 +43,7 @@ import com.stfalcon.chatkit.messages.MessageHolders import com.stfalcon.chatkit.messages.MessagesListAdapter import com.stfalcon.chatkit.utils.DateFormatter import kotlinx.android.synthetic.main.controller_chat.view.* -import kotlinx.android.synthetic.main.controller_conversations_rv.view.* +import kotlinx.android.synthetic.main.conversations_list_view.view.* import kotlinx.android.synthetic.main.lobby_view.view.* import kotlinx.android.synthetic.main.view_message_input.view.* import org.koin.android.ext.android.inject diff --git a/app/src/main/java/com/nextcloud/talk/newarch/features/conversationsList/ConversationsListView.kt b/app/src/main/java/com/nextcloud/talk/newarch/features/conversationsList/ConversationsListView.kt index 880055ab4..7631838f0 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/features/conversationsList/ConversationsListView.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/features/conversationsList/ConversationsListView.kt @@ -22,7 +22,6 @@ package com.nextcloud.talk.newarch.features.conversationsList import android.content.Context import android.os.Bundle -import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -59,7 +58,7 @@ import com.otaliastudios.elements.Page import com.otaliastudios.elements.Presenter import com.uber.autodispose.lifecycle.LifecycleScopeProvider import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager -import kotlinx.android.synthetic.main.controller_conversations_rv.view.* +import kotlinx.android.synthetic.main.conversations_list_view.view.* import kotlinx.android.synthetic.main.message_state.view.* import kotlinx.android.synthetic.main.search_layout.* import org.koin.android.ext.android.inject @@ -222,7 +221,7 @@ class ConversationsListView : BaseView() { } override fun getLayoutId(): Int { - return R.layout.controller_conversations_rv + return R.layout.conversations_list_view } private fun openNewConversationScreen() { diff --git a/app/src/main/java/com/nextcloud/talk/newarch/features/search/DebouncingQueryTextListener.kt b/app/src/main/java/com/nextcloud/talk/newarch/features/search/DebouncingTextWatcher.kt similarity index 100% rename from app/src/main/java/com/nextcloud/talk/newarch/features/search/DebouncingQueryTextListener.kt rename to app/src/main/java/com/nextcloud/talk/newarch/features/search/DebouncingTextWatcher.kt diff --git a/app/src/main/java/com/nextcloud/talk/newarch/local/converters/LocalConversationConfigurationConverter.kt b/app/src/main/java/com/nextcloud/talk/newarch/local/converters/LocalConversationConfigurationConverter.kt deleted file mode 100644 index 5102ba613..000000000 --- a/app/src/main/java/com/nextcloud/talk/newarch/local/converters/LocalConversationConfigurationConverter.kt +++ /dev/null @@ -1,47 +0,0 @@ -/* - * - * * Nextcloud Talk application - * * - * * @author Mario Danic - * * Copyright (C) 2017-2020 Mario Danic - * * - * * This program is free software: you can redistribute it and/or modify - * * it under the terms of the GNU General Public License as published by - * * the Free Software Foundation, either version 3 of the License, or - * * at your option) any later version. - * * - * * This program is distributed in the hope that it will be useful, - * * but WITHOUT ANY WARRANTY; without even the implied warranty of - * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * * GNU General Public License for more details. - * * - * * You should have received a copy of the GNU General Public License - * * along with this program. If not, see . - * - */ - -package com.nextcloud.talk.newarch.local.converters - -import androidx.room.TypeConverter -import com.nextcloud.talk.newarch.data.model.LocalConversationConfiguration -import kotlinx.serialization.json.Json - -class LocalConversationConfigurationConverter { - @TypeConverter - fun fromLocalConversationConfigurationToString(localConversationConfiguration: LocalConversationConfiguration?): String { - return if (localConversationConfiguration != null) { - Json.stringify(LocalConversationConfiguration.serializer(), localConversationConfiguration) - } else { - Json.stringify(LocalConversationConfiguration.serializer(), LocalConversationConfiguration()) - } - } - - @TypeConverter - fun fromStringToLocalConversationConfiguration(value: String?): LocalConversationConfiguration? { - return if (value.isNullOrEmpty()) { - LocalConversationConfiguration() - } else { - Json.parse(LocalConversationConfiguration.serializer(), value) - } - } -} diff --git a/app/src/main/java/com/nextcloud/talk/newarch/local/db/TalkDatabase.kt b/app/src/main/java/com/nextcloud/talk/newarch/local/db/TalkDatabase.kt index e592ae57a..d8772f2a5 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/local/db/TalkDatabase.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/local/db/TalkDatabase.kt @@ -44,8 +44,7 @@ import com.nextcloud.talk.newarch.local.models.UserNgEntity ConversationTypeConverter::class, ParticipantTypeConverter::class, PushConfigurationConverter::class, CapabilitiesConverter::class, ExternalSignalingConverter::class, - UserStatusConverter::class, SystemMessageTypeConverter::class, ParticipantMapConverter::class, - LocalConversationConfigurationConverter::class + UserStatusConverter::class, SystemMessageTypeConverter::class, ParticipantMapConverter::class ) abstract class TalkDatabase : RoomDatabase() { diff --git a/app/src/main/java/com/nextcloud/talk/newarch/local/models/ConversationEntity.kt b/app/src/main/java/com/nextcloud/talk/newarch/local/models/ConversationEntity.kt index c28aa025c..73eed3fce 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/local/models/ConversationEntity.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/local/models/ConversationEntity.kt @@ -27,7 +27,6 @@ import com.nextcloud.talk.models.json.conversations.Conversation import com.nextcloud.talk.models.json.conversations.Conversation.* import com.nextcloud.talk.models.json.participants.Participant import com.nextcloud.talk.models.json.participants.Participant.ParticipantType -import com.nextcloud.talk.newarch.data.model.LocalConversationConfiguration import java.util.* @Entity( @@ -72,8 +71,7 @@ data class ConversationEntity( @ColumnInfo(name = "can_start_call") var canStartCall: Boolean? = true, @ColumnInfo(name = "modified_at") var modifiedAt: Long? = null, - @ColumnInfo(name = "changing") var changing: Boolean = false, - @ColumnInfo(name = "local_configuration") var localConfiguration: LocalConversationConfiguration? = null + @ColumnInfo(name = "changing") var changing: Boolean = false ) { override fun equals(other: Any?): Boolean { if (this === other) return true @@ -107,7 +105,6 @@ data class ConversationEntity( if (canStartCall != other.canStartCall) return false if (lastReadMessageId != other.lastReadMessageId) return false if (changing != other.changing) return false - if (localConfiguration != other.localConfiguration) return false return true } @@ -147,7 +144,6 @@ fun ConversationEntity.toConversation(): Conversation { conversation.canStartCall = this.canStartCall conversation.lastReadMessageId = this.lastReadMessageId conversation.changing = this.changing - conversation.localConfiguration = this.localConfiguration return conversation } @@ -179,7 +175,6 @@ fun Conversation.toConversationEntity(): ConversationEntity { conversationEntity.canStartCall = this.canStartCall conversationEntity.type = this.type conversationEntity.changing = this.changing - conversationEntity.localConfiguration = this.localConfiguration return conversationEntity } \ No newline at end of file diff --git a/app/src/main/java/com/nextcloud/talk/newarch/local/models/UserNgEntity.kt b/app/src/main/java/com/nextcloud/talk/newarch/local/models/UserNgEntity.kt index 725def02f..7e0298b59 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/local/models/UserNgEntity.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/local/models/UserNgEntity.kt @@ -85,16 +85,9 @@ data class UserNgEntity( fun UserNgEntity.getCredentials() = ApiUtils.getCredentials(username, token) fun UserNgEntity.hasSpreedFeatureCapability(capabilityName: String): Boolean { - val capabilityExists = capabilities?.spreedCapability?.features?.contains(capabilityName) - if (capabilityExists != null) { - return capabilityExists - } else { - return false - } + return capabilities?.spreedCapability?.features?.contains(capabilityName) ?: false } fun UserNgEntity.getMaxMessageLength(): Int { - val maxLength = capabilities?.spreedCapability?.config?.get("chat") - ?.get("max-length") - return maxLength?.toInt() ?: 1000 + return capabilities?.spreedCapability?.config?.get("chat")?.get("max-length")?.toInt() ?: 1000 } diff --git a/app/src/main/res/layout/controller_conversations_rv.xml b/app/src/main/res/layout/conversations_list_view.xml similarity index 93% rename from app/src/main/res/layout/controller_conversations_rv.xml rename to app/src/main/res/layout/conversations_list_view.xml index e4e3d5bc8..23b34548b 100644 --- a/app/src/main/res/layout/controller_conversations_rv.xml +++ b/app/src/main/res/layout/conversations_list_view.xml @@ -30,15 +30,15 @@ android:id="@+id/swipeRefreshLayoutView" android:layout_width="match_parent" android:layout_height="match_parent" - android:visibility="visible"> + android:visibility="visible" + app:layout_behavior="@string/appbar_scrolling_view_behavior"> + tools:listitem="@layout/rv_item_conversation_with_last_message" /> diff --git a/app/src/main/res/layout/server_entry_view.xml b/app/src/main/res/layout/server_entry_view.xml new file mode 100644 index 000000000..85d110c4e --- /dev/null +++ b/app/src/main/res/layout/server_entry_view.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + +