mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-21 20:49:36 +01:00
WIP
Signed-off-by: rapterjet2004 <juliuslinus1@gmail.com>
This commit is contained in:
parent
3369e71a21
commit
8eeca17d86
@ -727,4 +727,12 @@ public interface NcApi {
|
|||||||
@DELETE
|
@DELETE
|
||||||
Observable<GenericOverall> unbanActor(@Header("Authorization") String authorization,
|
Observable<GenericOverall> unbanActor(@Header("Authorization") String authorization,
|
||||||
@Url String url);
|
@Url String url);
|
||||||
|
|
||||||
|
@POST
|
||||||
|
Observable<GenericOverall> archiveConversation(@Header("Authorization") String authorization,
|
||||||
|
@Url String url);
|
||||||
|
|
||||||
|
@DELETE
|
||||||
|
Observable<GenericOverall> unarchiveConversation(@Header("Authorization") String authorization,
|
||||||
|
@Url String url);
|
||||||
}
|
}
|
@ -179,17 +179,36 @@ class ConversationInfoActivity :
|
|||||||
databaseStorageModule = DatabaseStorageModule(conversationUser, conversationToken)
|
databaseStorageModule = DatabaseStorageModule(conversationUser, conversationToken)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!spreedCapabilities.features!!.contains(ARCHIVED_CONVERSATIONS)) {
|
||||||
|
binding.archiveConversationBtn.visibility = GONE
|
||||||
|
}
|
||||||
|
|
||||||
binding.deleteConversationAction.setOnClickListener { showDeleteConversationDialog() }
|
binding.deleteConversationAction.setOnClickListener { showDeleteConversationDialog() }
|
||||||
binding.leaveConversationAction.setOnClickListener { leaveConversation() }
|
binding.leaveConversationAction.setOnClickListener { leaveConversation() }
|
||||||
binding.clearConversationHistory.setOnClickListener { showClearHistoryDialog() }
|
binding.clearConversationHistory.setOnClickListener { showClearHistoryDialog() }
|
||||||
binding.addParticipantsAction.setOnClickListener { addParticipants() }
|
binding.addParticipantsAction.setOnClickListener { addParticipants() }
|
||||||
binding.listBansButton.setOnClickListener { listBans() }
|
binding.listBansButton.setOnClickListener { listBans() }
|
||||||
|
binding.archiveConversationBtn.setOnClickListener {
|
||||||
|
if (conversation!!.isArchived) {
|
||||||
|
viewModel.unarchiveConversation(conversationUser, conversationToken)
|
||||||
|
} else {
|
||||||
|
viewModel.archiveConversation(conversationUser, conversationToken)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
viewModel.getRoom(conversationUser, conversationToken)
|
viewModel.getRoom(conversationUser, conversationToken)
|
||||||
|
|
||||||
themeTextViews()
|
themeTextViews()
|
||||||
themeSwitchPreferences()
|
themeSwitchPreferences()
|
||||||
|
|
||||||
|
if (conversation!!.isArchived) {
|
||||||
|
binding.archiveConversationIcon.setImageDrawable(resources.getDrawable(R.drawable.ic_eye))
|
||||||
|
binding.archiveConversationText.text = resources.getString(R.string.unarchive_conversation)
|
||||||
|
} else {
|
||||||
|
binding.archiveConversationIcon.setImageDrawable(resources.getDrawable(R.drawable.outline_archive_24))
|
||||||
|
binding.archiveConversationText.text = resources.getString(R.string.archive_conversation)
|
||||||
|
}
|
||||||
|
|
||||||
binding.addParticipantsAction.visibility = GONE
|
binding.addParticipantsAction.visibility = GONE
|
||||||
|
|
||||||
binding.progressBar.let { viewThemeUtils.platform.colorCircularProgressBar(it, ColorRole.PRIMARY) }
|
binding.progressBar.let { viewThemeUtils.platform.colorCircularProgressBar(it, ColorRole.PRIMARY) }
|
||||||
@ -1445,6 +1464,7 @@ class ConversationInfoActivity :
|
|||||||
private const val DEMOTE_OR_PROMOTE = 1
|
private const val DEMOTE_OR_PROMOTE = 1
|
||||||
private const val REMOVE_FROM_CONVERSATION = 2
|
private const val REMOVE_FROM_CONVERSATION = 2
|
||||||
private const val BAN_FROM_CONVERSATION = 3
|
private const val BAN_FROM_CONVERSATION = 3
|
||||||
|
private const val ARCHIVED_CONVERSATIONS = "archived-conversations"
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -18,6 +18,7 @@ import com.nextcloud.talk.models.domain.ConversationModel
|
|||||||
import com.nextcloud.talk.models.json.capabilities.SpreedCapability
|
import com.nextcloud.talk.models.json.capabilities.SpreedCapability
|
||||||
import com.nextcloud.talk.models.json.generic.GenericOverall
|
import com.nextcloud.talk.models.json.generic.GenericOverall
|
||||||
import com.nextcloud.talk.models.json.participants.TalkBan
|
import com.nextcloud.talk.models.json.participants.TalkBan
|
||||||
|
import com.nextcloud.talk.repositories.conversations.ConversationsRepository
|
||||||
import com.nextcloud.talk.utils.ApiUtils
|
import com.nextcloud.talk.utils.ApiUtils
|
||||||
import io.reactivex.Observer
|
import io.reactivex.Observer
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||||
@ -26,7 +27,8 @@ import io.reactivex.schedulers.Schedulers
|
|||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class ConversationInfoViewModel @Inject constructor(
|
class ConversationInfoViewModel @Inject constructor(
|
||||||
private val chatNetworkDataSource: ChatNetworkDataSource
|
private val chatNetworkDataSource: ChatNetworkDataSource,
|
||||||
|
private val conversationsRepository: ConversationsRepository
|
||||||
) : ViewModel() {
|
) : ViewModel() {
|
||||||
|
|
||||||
object LifeCycleObserver : DefaultLifecycleObserver {
|
object LifeCycleObserver : DefaultLifecycleObserver {
|
||||||
@ -200,6 +202,14 @@ class ConversationInfoViewModel @Inject constructor(
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun archiveConversation(user: User, token: String) {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
fun unarchiveConversation(user: User, token: String) {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
inner class GetRoomObserver : Observer<ConversationModel> {
|
inner class GetRoomObserver : Observer<ConversationModel> {
|
||||||
override fun onSubscribe(d: Disposable) {
|
override fun onSubscribe(d: Disposable) {
|
||||||
// unused atm
|
// unused atm
|
||||||
|
@ -59,6 +59,7 @@ class ConversationModel(
|
|||||||
var recordingConsentRequired: Int = 0,
|
var recordingConsentRequired: Int = 0,
|
||||||
var remoteServer: String? = null,
|
var remoteServer: String? = null,
|
||||||
var remoteToken: String? = null,
|
var remoteToken: String? = null,
|
||||||
|
var isArchived: Boolean = false,
|
||||||
|
|
||||||
// attributes that don't come from API. This should be changed?!
|
// attributes that don't come from API. This should be changed?!
|
||||||
var password: String? = null
|
var password: String? = null
|
||||||
@ -120,7 +121,8 @@ class ConversationModel(
|
|||||||
callStartTime = conversation.callStartTime,
|
callStartTime = conversation.callStartTime,
|
||||||
recordingConsentRequired = conversation.recordingConsentRequired,
|
recordingConsentRequired = conversation.recordingConsentRequired,
|
||||||
remoteServer = conversation.remoteServer,
|
remoteServer = conversation.remoteServer,
|
||||||
remoteToken = conversation.remoteToken
|
remoteToken = conversation.remoteToken,
|
||||||
|
isArchived = conversation.isArchived
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -159,5 +159,8 @@ data class Conversation(
|
|||||||
var remoteServer: String? = "",
|
var remoteServer: String? = "",
|
||||||
|
|
||||||
@JsonField(name = ["remoteToken"])
|
@JsonField(name = ["remoteToken"])
|
||||||
var remoteToken: String? = ""
|
var remoteToken: String? = "",
|
||||||
|
|
||||||
|
@JsonField(name = ["isArchived"])
|
||||||
|
var isArchived: Boolean
|
||||||
) : Parcelable
|
) : Parcelable
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.nextcloud.talk.repositories.conversations
|
package com.nextcloud.talk.repositories.conversations
|
||||||
|
|
||||||
|
import com.nextcloud.talk.models.json.generic.GenericOverall
|
||||||
import io.reactivex.Observable
|
import io.reactivex.Observable
|
||||||
|
|
||||||
interface ConversationsRepository {
|
interface ConversationsRepository {
|
||||||
@ -29,4 +30,8 @@ interface ConversationsRepository {
|
|||||||
val successful: Boolean
|
val successful: Boolean
|
||||||
)
|
)
|
||||||
fun resendInvitations(token: String): Observable<ResendInvitationsResult>
|
fun resendInvitations(token: String): Observable<ResendInvitationsResult>
|
||||||
|
|
||||||
|
fun archiveConversation(credentials: String, url: String): Observable<GenericOverall>
|
||||||
|
|
||||||
|
fun unarchiveConversation(credentials: String, url: String): Observable<GenericOverall>
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,7 @@ import com.bluelinelabs.logansquare.LoganSquare
|
|||||||
import com.nextcloud.talk.api.NcApi
|
import com.nextcloud.talk.api.NcApi
|
||||||
import com.nextcloud.talk.data.user.model.User
|
import com.nextcloud.talk.data.user.model.User
|
||||||
import com.nextcloud.talk.models.json.conversations.password.PasswordOverall
|
import com.nextcloud.talk.models.json.conversations.password.PasswordOverall
|
||||||
|
import com.nextcloud.talk.models.json.generic.GenericOverall
|
||||||
import com.nextcloud.talk.repositories.conversations.ConversationsRepository.AllowGuestsResult
|
import com.nextcloud.talk.repositories.conversations.ConversationsRepository.AllowGuestsResult
|
||||||
import com.nextcloud.talk.repositories.conversations.ConversationsRepository.PasswordResult
|
import com.nextcloud.talk.repositories.conversations.ConversationsRepository.PasswordResult
|
||||||
import com.nextcloud.talk.repositories.conversations.ConversationsRepository.ResendInvitationsResult
|
import com.nextcloud.talk.repositories.conversations.ConversationsRepository.ResendInvitationsResult
|
||||||
@ -89,6 +90,14 @@ class ConversationsRepositoryImpl(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun archiveConversation(credentials: String, url: String): Observable<GenericOverall> {
|
||||||
|
return api.archiveConversation(credentials, url)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun unarchiveConversation(credentials: String, url: String): Observable<GenericOverall> {
|
||||||
|
return api.unarchiveConversation(credentials, url)
|
||||||
|
}
|
||||||
|
|
||||||
private fun apiVersion(): Int {
|
private fun apiVersion(): Int {
|
||||||
return ApiUtils.getConversationApiVersion(user, intArrayOf(ApiUtils.API_V4))
|
return ApiUtils.getConversationApiVersion(user, intArrayOf(ApiUtils.API_V4))
|
||||||
}
|
}
|
||||||
|
18
app/src/main/res/drawable/outline_archive_24.xml
Normal file
18
app/src/main/res/drawable/outline_archive_24.xml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<!--
|
||||||
|
~ Nextcloud Talk - Android Client
|
||||||
|
~
|
||||||
|
~ SPDX-FileCopyrightText: 2024 Google LLC
|
||||||
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
|
-->
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:height="24dp"
|
||||||
|
android:tint="#000000"
|
||||||
|
android:viewportHeight="960"
|
||||||
|
android:viewportWidth="960"
|
||||||
|
android:width="24dp">
|
||||||
|
|
||||||
|
<path
|
||||||
|
android:fillColor="@android:color/white"
|
||||||
|
android:pathData="M480,720L640,560L584,504L520,568L520,400L440,400L440,568L376,504L320,560L480,720ZM200,320L200,760Q200,760 200,760Q200,760 200,760L760,760Q760,760 760,760Q760,760 760,760L760,320L200,320ZM200,840Q167,840 143.5,816.5Q120,793 120,760L120,261Q120,247 124.5,234Q129,221 138,210L188,149Q199,135 215.5,127.5Q232,120 250,120L710,120Q728,120 744.5,127.5Q761,135 772,149L822,210Q831,221 835.5,234Q840,247 840,261L840,760Q840,793 816.5,816.5Q793,840 760,840L200,840ZM216,240L744,240L710,200Q710,200 710,200Q710,200 710,200L250,200Q250,200 250,200Q250,200 250,200L216,240ZM480,540L480,540L480,540Q480,540 480,540Q480,540 480,540L480,540Q480,540 480,540Q480,540 480,540Z" />
|
||||||
|
|
||||||
|
</vector>
|
@ -383,6 +383,37 @@
|
|||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/archive_conversation_btn"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingStart="@dimen/standard_margin"
|
||||||
|
android:paddingTop="@dimen/standard_half_margin"
|
||||||
|
android:paddingEnd="@dimen/standard_margin"
|
||||||
|
android:paddingBottom="@dimen/standard_half_margin"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:background="?android:attr/selectableItemBackground">
|
||||||
|
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/archive_conversation_icon"
|
||||||
|
android:layout_width="24dp"
|
||||||
|
android:layout_height="40dp"
|
||||||
|
android:layout_marginEnd="@dimen/standard_margin"
|
||||||
|
android:contentDescription="@null"
|
||||||
|
tools:src="@drawable/outline_archive_24"
|
||||||
|
app:tint="@color/grey_600" />
|
||||||
|
|
||||||
|
<com.google.android.material.textview.MaterialTextView
|
||||||
|
android:id="@+id/archive_conversation_text"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
tools:text="@string/unarchive_conversation"
|
||||||
|
android:textSize="@dimen/headline_text_size" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/danger_zone_options"
|
android:id="@+id/danger_zone_options"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
@ -815,4 +815,6 @@ How to translate with transifex:
|
|||||||
<string name="show_ban_reason">Show ban reason</string>
|
<string name="show_ban_reason">Show ban reason</string>
|
||||||
<string name="error_unbanning">Error occurred when unbanning participant</string>
|
<string name="error_unbanning">Error occurred when unbanning participant</string>
|
||||||
<string name="connection_lost">Connection lost</string>
|
<string name="connection_lost">Connection lost</string>
|
||||||
|
<string name="archive_conversation">Archive Conversation</string>
|
||||||
|
<string name="unarchive_conversation">Unarchive Conversation</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
Loading…
Reference in New Issue
Block a user