Signed-off-by: rapterjet2004 <juliuslinus1@gmail.com>
This commit is contained in:
rapterjet2004 2024-10-11 10:51:37 -05:00
parent 3369e71a21
commit 8eeca17d86
No known key found for this signature in database
GPG Key ID: 3AA5FDFED7944099
10 changed files with 111 additions and 3 deletions

View File

@ -727,4 +727,12 @@ public interface NcApi {
@DELETE
Observable<GenericOverall> unbanActor(@Header("Authorization") String authorization,
@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);
}

View File

@ -179,17 +179,36 @@ class ConversationInfoActivity :
databaseStorageModule = DatabaseStorageModule(conversationUser, conversationToken)
}
if (!spreedCapabilities.features!!.contains(ARCHIVED_CONVERSATIONS)) {
binding.archiveConversationBtn.visibility = GONE
}
binding.deleteConversationAction.setOnClickListener { showDeleteConversationDialog() }
binding.leaveConversationAction.setOnClickListener { leaveConversation() }
binding.clearConversationHistory.setOnClickListener { showClearHistoryDialog() }
binding.addParticipantsAction.setOnClickListener { addParticipants() }
binding.listBansButton.setOnClickListener { listBans() }
binding.archiveConversationBtn.setOnClickListener {
if (conversation!!.isArchived) {
viewModel.unarchiveConversation(conversationUser, conversationToken)
} else {
viewModel.archiveConversation(conversationUser, conversationToken)
}
}
viewModel.getRoom(conversationUser, conversationToken)
themeTextViews()
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.progressBar.let { viewThemeUtils.platform.colorCircularProgressBar(it, ColorRole.PRIMARY) }
@ -1445,6 +1464,7 @@ class ConversationInfoActivity :
private const val DEMOTE_OR_PROMOTE = 1
private const val REMOVE_FROM_CONVERSATION = 2
private const val BAN_FROM_CONVERSATION = 3
private const val ARCHIVED_CONVERSATIONS = "archived-conversations"
}
/**

View File

@ -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.generic.GenericOverall
import com.nextcloud.talk.models.json.participants.TalkBan
import com.nextcloud.talk.repositories.conversations.ConversationsRepository
import com.nextcloud.talk.utils.ApiUtils
import io.reactivex.Observer
import io.reactivex.android.schedulers.AndroidSchedulers
@ -26,7 +27,8 @@ import io.reactivex.schedulers.Schedulers
import javax.inject.Inject
class ConversationInfoViewModel @Inject constructor(
private val chatNetworkDataSource: ChatNetworkDataSource
private val chatNetworkDataSource: ChatNetworkDataSource,
private val conversationsRepository: ConversationsRepository
) : ViewModel() {
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> {
override fun onSubscribe(d: Disposable) {
// unused atm

View File

@ -59,6 +59,7 @@ class ConversationModel(
var recordingConsentRequired: Int = 0,
var remoteServer: String? = null,
var remoteToken: String? = null,
var isArchived: Boolean = false,
// attributes that don't come from API. This should be changed?!
var password: String? = null
@ -120,7 +121,8 @@ class ConversationModel(
callStartTime = conversation.callStartTime,
recordingConsentRequired = conversation.recordingConsentRequired,
remoteServer = conversation.remoteServer,
remoteToken = conversation.remoteToken
remoteToken = conversation.remoteToken,
isArchived = conversation.isArchived
)
}
}

View File

@ -159,5 +159,8 @@ data class Conversation(
var remoteServer: String? = "",
@JsonField(name = ["remoteToken"])
var remoteToken: String? = ""
var remoteToken: String? = "",
@JsonField(name = ["isArchived"])
var isArchived: Boolean
) : Parcelable

View File

@ -7,6 +7,7 @@
*/
package com.nextcloud.talk.repositories.conversations
import com.nextcloud.talk.models.json.generic.GenericOverall
import io.reactivex.Observable
interface ConversationsRepository {
@ -29,4 +30,8 @@ interface ConversationsRepository {
val successful: Boolean
)
fun resendInvitations(token: String): Observable<ResendInvitationsResult>
fun archiveConversation(credentials: String, url: String): Observable<GenericOverall>
fun unarchiveConversation(credentials: String, url: String): Observable<GenericOverall>
}

View File

@ -11,6 +11,7 @@ import com.bluelinelabs.logansquare.LoganSquare
import com.nextcloud.talk.api.NcApi
import com.nextcloud.talk.data.user.model.User
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.PasswordResult
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 {
return ApiUtils.getConversationApiVersion(user, intArrayOf(ApiUtils.API_V4))
}

View 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>

View File

@ -383,6 +383,37 @@
</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
android:id="@+id/danger_zone_options"
android:layout_width="match_parent"

View File

@ -815,4 +815,6 @@ How to translate with transifex:
<string name="show_ban_reason">Show ban reason</string>
<string name="error_unbanning">Error occurred when unbanning participant</string>
<string name="connection_lost">Connection lost</string>
<string name="archive_conversation">Archive Conversation</string>
<string name="unarchive_conversation">Unarchive Conversation</string>
</resources>