Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/talk-android.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorMarcel Hibbe <dev@mhibbe.de>2022-10-13 12:54:51 +0300
committerMarcel Hibbe <dev@mhibbe.de>2022-10-13 13:12:47 +0300
commit871f798720328756f1b6d7bdb4a2fe0f27b1baed (patch)
treec6702a8b64ad157ab57f7508e14de3c6d084a2db /app
parent5312bee14d8397cada45b1e02458f923116f286b (diff)
improve fetching of user statuses in conversation list
replace /ocs/v2.php/apps/user_status/api/v1/statuses with "includeStatus=true" when fetching conversations, see https://nextcloud-talk.readthedocs.io/en/latest/conversation/ fix #2478 Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
Diffstat (limited to 'app')
-rw-r--r--app/src/main/java/com/nextcloud/talk/activities/CallActivity.java2
-rw-r--r--app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.java20
-rw-r--r--app/src/main/java/com/nextcloud/talk/api/NcApi.java7
-rw-r--r--app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt2
-rw-r--r--app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.kt54
-rw-r--r--app/src/main/java/com/nextcloud/talk/models/json/conversations/Conversation.kt14
-rw-r--r--app/src/main/java/com/nextcloud/talk/models/json/statuses/StatusesOCS.kt41
-rw-r--r--app/src/main/java/com/nextcloud/talk/models/json/statuses/StatusesOverall.kt37
-rw-r--r--app/src/main/java/com/nextcloud/talk/ui/dialog/ConversationsListBottomDialog.kt2
9 files changed, 35 insertions, 144 deletions
diff --git a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java
index 4b65a8fb1..c7aad0c37 100644
--- a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java
+++ b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java
@@ -564,7 +564,7 @@ public class CallActivity extends CallBaseActivity {
private void handleFromNotification() {
int apiVersion = ApiUtils.getConversationApiVersion(conversationUser, new int[]{ApiUtils.APIv4, 1});
- ncApi.getRooms(credentials, ApiUtils.getUrlForRooms(apiVersion, baseUrl))
+ ncApi.getRooms(credentials, ApiUtils.getUrlForRooms(apiVersion, baseUrl), false)
.retry(3)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.java b/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.java
index 7110277df..fe9febafe 100644
--- a/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.java
+++ b/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.java
@@ -43,7 +43,6 @@ import com.nextcloud.talk.data.user.model.User;
import com.nextcloud.talk.databinding.RvItemConversationWithLastMessageBinding;
import com.nextcloud.talk.models.json.chat.ChatMessage;
import com.nextcloud.talk.models.json.conversations.Conversation;
-import com.nextcloud.talk.models.json.status.Status;
import com.nextcloud.talk.ui.StatusDrawable;
import com.nextcloud.talk.ui.theme.ViewThemeUtils;
import com.nextcloud.talk.utils.ApiUtils;
@@ -51,7 +50,6 @@ import com.nextcloud.talk.utils.DisplayUtils;
import com.nextcloud.talk.utils.database.user.CapabilitiesUtilNew;
import java.util.List;
-import java.util.Objects;
import java.util.regex.Pattern;
import androidx.core.content.ContextCompat;
@@ -74,22 +72,20 @@ public class ConversationItem extends AbstractFlexibleItem<ConversationItem.Conv
private final User user;
private final Context context;
private GenericTextHeaderItem header;
- private final Status status;
private final ViewThemeUtils viewThemeUtils;
- public ConversationItem(Conversation conversation, User user, Context activityContext, Status status, final ViewThemeUtils viewThemeUtils) {
+ public ConversationItem(Conversation conversation, User user, Context activityContext, final ViewThemeUtils viewThemeUtils) {
this.conversation = conversation;
this.user = user;
this.context = activityContext;
- this.status = status;
this.viewThemeUtils = viewThemeUtils;
}
public ConversationItem(Conversation conversation, User user,
- Context activityContext, GenericTextHeaderItem genericTextHeaderItem, Status status,
+ Context activityContext, GenericTextHeaderItem genericTextHeaderItem,
final ViewThemeUtils viewThemeUtils) {
- this(conversation, user, activityContext, status, viewThemeUtils);
+ this(conversation, user, activityContext, viewThemeUtils);
this.header = genericTextHeaderItem;
}
@@ -97,7 +93,7 @@ public class ConversationItem extends AbstractFlexibleItem<ConversationItem.Conv
public boolean equals(Object o) {
if (o instanceof ConversationItem) {
ConversationItem inItem = (ConversationItem) o;
- return conversation.equals(inItem.getModel()) && Objects.equals(status, inItem.status);
+ return conversation.equals(inItem.getModel());
}
return false;
}
@@ -109,7 +105,7 @@ public class ConversationItem extends AbstractFlexibleItem<ConversationItem.Conv
@Override
public int hashCode() {
int result = conversation.hashCode();
- result = 31 * result + (status != null ? status.hashCode() : 0);
+ result = 31 * result;
return result;
}
@@ -196,13 +192,13 @@ public class ConversationItem extends AbstractFlexibleItem<ConversationItem.Conv
holder.binding.favoriteConversationImageView.setVisibility(View.GONE);
}
- if (status != null && Conversation.ConversationType.ROOM_SYSTEM != conversation.getType()) {
+ if (conversation.getStatus() != null && Conversation.ConversationType.ROOM_SYSTEM != conversation.getType()) {
float size = DisplayUtils.convertDpToPixel(STATUS_SIZE_IN_DP, appContext);
holder.binding.userStatusImage.setVisibility(View.VISIBLE);
holder.binding.userStatusImage.setImageDrawable(new StatusDrawable(
- status.getStatus(),
- status.getIcon(),
+ conversation.getStatus(),
+ conversation.getStatusIcon(),
size,
context.getResources().getColor(R.color.bg_default),
appContext));
diff --git a/app/src/main/java/com/nextcloud/talk/api/NcApi.java b/app/src/main/java/com/nextcloud/talk/api/NcApi.java
index 5b75bff8b..cbc2e1c7c 100644
--- a/app/src/main/java/com/nextcloud/talk/api/NcApi.java
+++ b/app/src/main/java/com/nextcloud/talk/api/NcApi.java
@@ -44,7 +44,6 @@ import com.nextcloud.talk.models.json.search.ContactsByNumberOverall;
import com.nextcloud.talk.models.json.signaling.SignalingOverall;
import com.nextcloud.talk.models.json.signaling.settings.SignalingSettingsOverall;
import com.nextcloud.talk.models.json.status.StatusOverall;
-import com.nextcloud.talk.models.json.statuses.StatusesOverall;
import com.nextcloud.talk.models.json.unifiedsearch.UnifiedSearchOverall;
import com.nextcloud.talk.models.json.userprofile.UserProfileFieldsOverall;
import com.nextcloud.talk.models.json.userprofile.UserProfileOverall;
@@ -101,7 +100,8 @@ public interface NcApi {
Server URL is: baseUrl + ocsApiVersion + spreedApiVersion + /room
*/
@GET
- Observable<RoomsOverall> getRooms(@Header("Authorization") String authorization, @Url String url);
+ Observable<RoomsOverall> getRooms(@Header("Authorization") String authorization, @Url String url,
+ @Nullable @Query("includeStatus") Boolean includeStatus);
/*
Server URL is: baseUrl + ocsApiVersion + spreedApiVersion + /room/roomToken
@@ -518,9 +518,6 @@ public interface NcApi {
@Url String url,
@Field("statusType") String statusType);
- @GET
- Observable<StatusesOverall> getUserStatuses(@Header("Authorization") String authorization, @Url String url);
-
@POST
Observable<GenericOverall> sendReaction(@Header("Authorization") String authorization, @Url String url,
diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt
index 0a227e5f7..1e55d37dc 100644
--- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt
+++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt
@@ -423,7 +423,7 @@ class ChatController(args: Bundle) :
}
Log.d(TAG, "handleFromNotification - getRooms - calling")
- ncApi.getRooms(credentials, ApiUtils.getUrlForRooms(apiVersion, conversationUser?.baseUrl))
+ ncApi.getRooms(credentials, ApiUtils.getUrlForRooms(apiVersion, conversationUser?.baseUrl), false)
?.subscribeOn(Schedulers.io())?.observeOn(AndroidSchedulers.mainThread())
?.subscribe(object : Observer<RoomsOverall> {
override fun onSubscribe(d: Disposable) {
diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.kt
index 3c9098054..8e6a0e464 100644
--- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.kt
+++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.kt
@@ -96,20 +96,18 @@ import com.nextcloud.talk.messagesearch.MessageSearchHelper
import com.nextcloud.talk.messagesearch.MessageSearchHelper.MessageSearchResults
import com.nextcloud.talk.models.json.conversations.Conversation
import com.nextcloud.talk.models.json.conversations.RoomsOverall
-import com.nextcloud.talk.models.json.status.Status
-import com.nextcloud.talk.models.json.statuses.StatusesOverall
import com.nextcloud.talk.repositories.unifiedsearch.UnifiedSearchRepository
import com.nextcloud.talk.ui.dialog.ChooseAccountDialogFragment
import com.nextcloud.talk.ui.dialog.ChooseAccountShareToDialogFragment
import com.nextcloud.talk.ui.dialog.ConversationsListBottomDialog
import com.nextcloud.talk.users.UserManager
import com.nextcloud.talk.utils.ApiUtils
-import com.nextcloud.talk.utils.ParticipantPermissions
import com.nextcloud.talk.utils.ClosedInterfaceImpl
import com.nextcloud.talk.utils.ConductorRemapping.remapChatController
import com.nextcloud.talk.utils.DisplayUtils
import com.nextcloud.talk.utils.FileUtils
import com.nextcloud.talk.utils.Mimetype
+import com.nextcloud.talk.utils.ParticipantPermissions
import com.nextcloud.talk.utils.bundle.BundleKeys
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ACTIVE_CONVERSATION
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_FORWARD_HIDE_SOURCE_ROOM
@@ -131,7 +129,6 @@ import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager
import eu.davidea.flexibleadapter.items.AbstractFlexibleItem
import io.reactivex.Observable
-import io.reactivex.Observer
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers
@@ -198,7 +195,6 @@ class ConversationsListController(bundle: Bundle) :
private var layoutManager: SmoothScrollLinearLayoutManager? = null
private val callHeaderItems = HashMap<String, GenericTextHeaderItem>()
private var conversationsListBottomDialog: ConversationsListBottomDialog? = null
- private val userStatuses = HashMap<String?, Status>()
private var searchHelper: MessageSearchHelper? = null
private var searchViewDisposable: Disposable? = null
@@ -318,7 +314,7 @@ class ConversationsListController(bundle: Bundle) :
viewThemeUtils.material
.colorMaterialTextButton((activity as MainActivity?)!!.binding.switchAccountButton)
}
- fetchData()
+ fetchRooms()
}
}
@@ -493,39 +489,9 @@ class ConversationsListController(bundle: Bundle) :
searchItem!!.expandActionView()
}
- fun fetchData() {
- if (isUserStatusAvailable(userManager.currentUser.blockingGet())) {
- fetchUserStatusesAndRooms()
- } else {
- fetchRooms()
- }
- }
+ fun fetchRooms() {
+ val includeStatus = isUserStatusAvailable(userManager.currentUser.blockingGet())
- private fun fetchUserStatusesAndRooms() {
- ncApi.getUserStatuses(credentials, ApiUtils.getUrlForUserStatuses(currentUser!!.baseUrl))
- .subscribe(object : Observer<StatusesOverall> {
- override fun onSubscribe(d: Disposable) {
- // unused atm
- }
- override fun onNext(statusesOverall: StatusesOverall) {
- for (status in statusesOverall.ocs!!.data!!) {
- userStatuses[status.userId] = status
- }
- fetchRooms()
- }
-
- override fun onError(e: Throwable) {
- Log.e(TAG, "failed to fetch user statuses", e)
- fetchRooms()
- }
-
- override fun onComplete() {
- // unused atm
- }
- })
- }
-
- private fun fetchRooms() {
dispose(null)
isRefreshing = true
conversationItems = ArrayList()
@@ -538,7 +504,8 @@ class ConversationsListController(bundle: Bundle) :
ApiUtils.getUrlForRooms(
apiVersion,
currentUser!!.baseUrl
- )
+ ),
+ includeStatus
)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
@@ -589,7 +556,6 @@ class ConversationsListController(bundle: Bundle) :
conversation,
currentUser,
activity,
- userStatuses[conversation.name],
viewThemeUtils
)
conversationItems.add(conversationItem)
@@ -598,7 +564,6 @@ class ConversationsListController(bundle: Bundle) :
currentUser,
activity,
callHeaderItems[headerTitle],
- userStatuses[conversation.name],
viewThemeUtils
)
conversationItemsWithHeader.add(conversationItemWithHeader)
@@ -681,7 +646,6 @@ class ConversationsListController(bundle: Bundle) :
currentUser,
activity,
callHeaderItems[headerTitle],
- userStatuses[conversation.name],
viewThemeUtils
)
openConversationItems.add(conversationItem)
@@ -742,7 +706,7 @@ class ConversationsListController(bundle: Bundle) :
}
false
}
- binding.swipeRefreshLayoutView.setOnRefreshListener { fetchData() }
+ binding.swipeRefreshLayoutView.setOnRefreshListener { fetchRooms() }
viewThemeUtils.androidx.themeSwipeRefreshLayout(binding.swipeRefreshLayoutView)
binding.emptyLayout.setOnClickListener { showNewConversationsScreen() }
binding.floatingActionButton.setOnClickListener {
@@ -1182,7 +1146,7 @@ class ConversationsListController(bundle: Bundle) :
if (currentUser != null && eventStatus.userId == currentUser!!.id) {
when (eventStatus.eventType) {
EventStatus.EventType.CONVERSATION_UPDATE -> if (eventStatus.isAllGood && !isRefreshing) {
- fetchData()
+ fetchRooms()
}
else -> {}
}
@@ -1191,7 +1155,7 @@ class ConversationsListController(bundle: Bundle) :
@Subscribe(threadMode = ThreadMode.MAIN)
fun onMessageEvent(conversationsListFetchDataEvent: ConversationsListFetchDataEvent?) {
- fetchData()
+ fetchRooms()
Handler().postDelayed({
if (conversationsListBottomDialog!!.isShowing) {
conversationsListBottomDialog!!.dismiss()
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 0160f649c..4fa6a111f 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
@@ -127,7 +127,19 @@ data class Conversation(
var permissions: Int = 0,
@JsonField(name = ["messageExpiration"])
- var messageExpiration: Int = 0
+ var messageExpiration: Int = 0,
+
+ @JsonField(name = ["status"])
+ var status: String? = null,
+
+ @JsonField(name = ["statusIcon"])
+ var statusIcon: String? = null,
+
+ @JsonField(name = ["statusMessage"])
+ var statusMessage: String? = null,
+
+ @JsonField(name = ["statusClearAt"])
+ var statusClearAt: Long? = 0
) : Parcelable {
// This constructor is added to work with the 'com.bluelinelabs.logansquare.annotation.JsonObject'
diff --git a/app/src/main/java/com/nextcloud/talk/models/json/statuses/StatusesOCS.kt b/app/src/main/java/com/nextcloud/talk/models/json/statuses/StatusesOCS.kt
deleted file mode 100644
index 95937fff4..000000000
--- a/app/src/main/java/com/nextcloud/talk/models/json/statuses/StatusesOCS.kt
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Nextcloud Talk application
- *
- * @author Tim Krüger
- * @author Andy Scherzinger
- * Copyright (C) 2022 Andy Scherzinger <info@andy-scherzinger.de>
- * Copyright (C) 2021 Tim Krüger <t@timkrueger.me>
- *
- * 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 <http://www.gnu.org/licenses/>.
- */
-package com.nextcloud.talk.models.json.statuses
-
-import android.os.Parcelable
-import com.bluelinelabs.logansquare.annotation.JsonField
-import com.bluelinelabs.logansquare.annotation.JsonObject
-import com.nextcloud.talk.models.json.generic.GenericMeta
-import com.nextcloud.talk.models.json.status.Status
-import kotlinx.android.parcel.Parcelize
-
-@Parcelize
-@JsonObject
-data class StatusesOCS(
- @JsonField(name = ["meta"])
- var meta: GenericMeta?,
- @JsonField(name = ["data"])
- var data: List<Status>?
-) : Parcelable {
- // This constructor is added to work with the 'com.bluelinelabs.logansquare.annotation.JsonObject'
- constructor() : this(null, null)
-}
diff --git a/app/src/main/java/com/nextcloud/talk/models/json/statuses/StatusesOverall.kt b/app/src/main/java/com/nextcloud/talk/models/json/statuses/StatusesOverall.kt
deleted file mode 100644
index 0a65abac1..000000000
--- a/app/src/main/java/com/nextcloud/talk/models/json/statuses/StatusesOverall.kt
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Nextcloud Talk application
- *
- * @author Tim Krüger
- * @author Andy Scherzinger
- * Copyright (C) 2022 Andy Scherzinger <info@andy-scherzinger.de>
- * Copyright (C) 2021 Tim Krüger <t@timkrueger.me>
- *
- * 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 <http://www.gnu.org/licenses/>.
- */
-package com.nextcloud.talk.models.json.statuses
-
-import android.os.Parcelable
-import com.bluelinelabs.logansquare.annotation.JsonField
-import com.bluelinelabs.logansquare.annotation.JsonObject
-import kotlinx.android.parcel.Parcelize
-
-@Parcelize
-@JsonObject
-data class StatusesOverall(
- @JsonField(name = ["ocs"])
- var ocs: StatusesOCS?
-) : Parcelable {
- // This constructor is added to work with the 'com.bluelinelabs.logansquare.annotation.JsonObject'
- constructor() : this(null)
-}
diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/ConversationsListBottomDialog.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/ConversationsListBottomDialog.kt
index d9a16aceb..8dd0caf72 100644
--- a/app/src/main/java/com/nextcloud/talk/ui/dialog/ConversationsListBottomDialog.kt
+++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/ConversationsListBottomDialog.kt
@@ -202,7 +202,7 @@ class ConversationsListBottomDialog(
.popChangeHandler(HorizontalChangeHandler())
)
- controller.fetchData()
+ controller.fetchRooms()
}
private fun executeEntryMenuController(operation: ConversationOperationEnum) {