mirror of
https://github.com/SchildiChat/SchildiChat-android.git
synced 2024-11-26 03:16:02 +03:00
Room decoration - UI
This commit is contained in:
parent
27c74c9118
commit
f5ecf4bd90
5 changed files with 91 additions and 9 deletions
|
@ -0,0 +1,31 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2020 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.matrix.android.api.crypto
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RoomEncryptionTrustLevel represents the trust level in an encrypted room.
|
||||||
|
*/
|
||||||
|
enum class RoomEncryptionTrustLevel {
|
||||||
|
// No one in the room has been verified -> Black shield
|
||||||
|
Default,
|
||||||
|
|
||||||
|
// There are one or more device un-verified -> the app should display a red shield
|
||||||
|
Warning,
|
||||||
|
|
||||||
|
// All devices in the room are verified -> the app should display a green shield
|
||||||
|
Trusted
|
||||||
|
}
|
|
@ -16,6 +16,7 @@
|
||||||
|
|
||||||
package im.vector.matrix.android.api.session.room.model
|
package im.vector.matrix.android.api.session.room.model
|
||||||
|
|
||||||
|
import im.vector.matrix.android.api.crypto.RoomEncryptionTrustLevel
|
||||||
import im.vector.matrix.android.api.session.room.model.tag.RoomTag
|
import im.vector.matrix.android.api.session.room.model.tag.RoomTag
|
||||||
import im.vector.matrix.android.api.session.room.send.UserDraft
|
import im.vector.matrix.android.api.session.room.send.UserDraft
|
||||||
import im.vector.matrix.android.api.session.room.timeline.TimelineEvent
|
import im.vector.matrix.android.api.session.room.timeline.TimelineEvent
|
||||||
|
@ -24,7 +25,7 @@ import im.vector.matrix.android.api.session.room.timeline.TimelineEvent
|
||||||
* This class holds some data of a room.
|
* This class holds some data of a room.
|
||||||
* It can be retrieved by [im.vector.matrix.android.api.session.room.Room] and [im.vector.matrix.android.api.session.room.RoomService]
|
* It can be retrieved by [im.vector.matrix.android.api.session.room.Room] and [im.vector.matrix.android.api.session.room.RoomService]
|
||||||
*/
|
*/
|
||||||
data class RoomSummary(
|
data class RoomSummary constructor(
|
||||||
val roomId: String,
|
val roomId: String,
|
||||||
val displayName: String = "",
|
val displayName: String = "",
|
||||||
val topic: String = "",
|
val topic: String = "",
|
||||||
|
@ -46,7 +47,9 @@ data class RoomSummary(
|
||||||
val userDrafts: List<UserDraft> = emptyList(),
|
val userDrafts: List<UserDraft> = emptyList(),
|
||||||
var isEncrypted: Boolean,
|
var isEncrypted: Boolean,
|
||||||
val typingRoomMemberIds: List<String> = emptyList(),
|
val typingRoomMemberIds: List<String> = emptyList(),
|
||||||
val breadcrumbsIndex: Int = NOT_IN_BREADCRUMBS
|
val breadcrumbsIndex: Int = NOT_IN_BREADCRUMBS,
|
||||||
|
// TODO Plug it
|
||||||
|
val roomEncryptionTrustLevel: RoomEncryptionTrustLevel? = null
|
||||||
) {
|
) {
|
||||||
|
|
||||||
val isVersioned: Boolean
|
val isVersioned: Boolean
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2020 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.riotx.features.crypto.util
|
||||||
|
|
||||||
|
import androidx.annotation.DrawableRes
|
||||||
|
import im.vector.matrix.android.api.crypto.RoomEncryptionTrustLevel
|
||||||
|
import im.vector.riotx.R
|
||||||
|
import im.vector.riotx.core.extensions.exhaustive
|
||||||
|
|
||||||
|
@DrawableRes
|
||||||
|
fun RoomEncryptionTrustLevel?.toImageRes(): Int {
|
||||||
|
return when (this) {
|
||||||
|
null -> 0
|
||||||
|
RoomEncryptionTrustLevel.Default -> R.drawable.ic_shield_black
|
||||||
|
RoomEncryptionTrustLevel.Warning -> R.drawable.ic_shield_warning
|
||||||
|
RoomEncryptionTrustLevel.Trusted -> R.drawable.ic_shield_trusted
|
||||||
|
}.exhaustive
|
||||||
|
}
|
|
@ -116,6 +116,7 @@ import im.vector.riotx.features.attachments.AttachmentTypeSelectorView
|
||||||
import im.vector.riotx.features.attachments.AttachmentsHelper
|
import im.vector.riotx.features.attachments.AttachmentsHelper
|
||||||
import im.vector.riotx.features.attachments.ContactAttachment
|
import im.vector.riotx.features.attachments.ContactAttachment
|
||||||
import im.vector.riotx.features.command.Command
|
import im.vector.riotx.features.command.Command
|
||||||
|
import im.vector.riotx.features.crypto.util.toImageRes
|
||||||
import im.vector.riotx.features.crypto.verification.VerificationBottomSheet
|
import im.vector.riotx.features.crypto.verification.VerificationBottomSheet
|
||||||
import im.vector.riotx.features.home.AvatarRenderer
|
import im.vector.riotx.features.home.AvatarRenderer
|
||||||
import im.vector.riotx.features.home.room.detail.composer.TextComposerView
|
import im.vector.riotx.features.home.room.detail.composer.TextComposerView
|
||||||
|
@ -682,18 +683,23 @@ class RoomDetailFragment @Inject constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun renderRoomSummary(state: RoomDetailViewState) {
|
private fun renderRoomSummary(state: RoomDetailViewState) {
|
||||||
state.asyncRoomSummary()?.let {
|
state.asyncRoomSummary()?.let { roomSummary ->
|
||||||
if (it.membership.isLeft()) {
|
if (roomSummary.membership.isLeft()) {
|
||||||
Timber.w("The room has been left")
|
Timber.w("The room has been left")
|
||||||
activity?.finish()
|
activity?.finish()
|
||||||
} else {
|
} else {
|
||||||
roomToolbarTitleView.text = it.displayName
|
roomToolbarTitleView.text = roomSummary.displayName
|
||||||
avatarRenderer.render(it.toMatrixItem(), roomToolbarAvatarImageView)
|
avatarRenderer.render(roomSummary.toMatrixItem(), roomToolbarAvatarImageView)
|
||||||
|
|
||||||
renderSubTitle(state.typingMessage, it.topic)
|
renderSubTitle(state.typingMessage, roomSummary.topic)
|
||||||
|
}
|
||||||
|
jumpToBottomView.count = roomSummary.notificationCount
|
||||||
|
jumpToBottomView.drawBadge = roomSummary.hasUnreadMessages
|
||||||
|
|
||||||
|
roomToolbarDecorationImageView.let {
|
||||||
|
it.setImageResource(roomSummary.roomEncryptionTrustLevel.toImageRes())
|
||||||
|
it.isVisible = roomSummary.roomEncryptionTrustLevel != null
|
||||||
}
|
}
|
||||||
jumpToBottomView.count = it.notificationCount
|
|
||||||
jumpToBottomView.drawBadge = it.hasUnreadMessages
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,16 @@
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
tools:src="@tools:sample/avatars" />
|
tools:src="@tools:sample/avatars" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/roomToolbarDecorationImageView"
|
||||||
|
android:layout_width="20dp"
|
||||||
|
android:layout_height="20dp"
|
||||||
|
app:layout_constraintCircle="@+id/roomToolbarAvatarImageView"
|
||||||
|
app:layout_constraintCircleAngle="135"
|
||||||
|
app:layout_constraintCircleRadius="20dp"
|
||||||
|
tools:ignore="MissingConstraints"
|
||||||
|
tools:src="@drawable/ic_shield_trusted" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/roomToolbarTitleView"
|
android:id="@+id/roomToolbarTitleView"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
|
|
Loading…
Reference in a new issue