Create VectorRoomDisplayNameFallbackProvider to provide default room names

This commit is contained in:
Benoit Marty 2021-03-03 14:15:40 +01:00
parent c13ff6a392
commit a3b1c348ef
5 changed files with 105 additions and 13 deletions

View File

@ -39,7 +39,11 @@ data class MatrixConfiguration(
/**
* True to advertise support for call transfers to other parties on Matrix calls.
*/
val supportsCallTransfer: Boolean = false
val supportsCallTransfer: Boolean = false,
/**
* RoomDisplayNameFallbackProvider to provide default room display name.
*/
val roomDisplayNameFallbackProvider: RoomDisplayNameFallbackProvider
) {
/**

View File

@ -0,0 +1,26 @@
/*
* Copyright (c) 2021 The Matrix.org Foundation C.I.C.
*
* 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 org.matrix.android.sdk.api
interface RoomDisplayNameFallbackProvider {
fun getNameForRoomInvite(): String
fun getNameForEmptyRoom(): String
fun getNameFor2members(name1: String?, name2: String?): String
fun getNameFor3members(name1: String?, name2: String?, name3: String?): String
fun getNameFor4members(name1: String?, name2: String?, name3: String?, name4: String?): String
fun getNameFor4membersAndMore(name1: String?, name2: String?, name3: String?, remainingCount: Int): String
}

View File

@ -17,7 +17,7 @@
package org.matrix.android.sdk.internal.session.room.membership
import io.realm.Realm
import org.matrix.android.sdk.R
import org.matrix.android.sdk.api.MatrixConfiguration
import org.matrix.android.sdk.api.session.events.model.EventType
import org.matrix.android.sdk.api.session.events.model.toModel
import org.matrix.android.sdk.api.session.room.model.Membership
@ -32,17 +32,18 @@ import org.matrix.android.sdk.internal.database.model.RoomSummaryEntity
import org.matrix.android.sdk.internal.database.query.getOrNull
import org.matrix.android.sdk.internal.database.query.where
import org.matrix.android.sdk.internal.di.UserId
import org.matrix.android.sdk.internal.util.StringProvider
import javax.inject.Inject
/**
* This class computes room display name
*/
internal class RoomDisplayNameResolver @Inject constructor(
private val stringProvider: StringProvider,
matrixConfiguration: MatrixConfiguration,
@UserId private val userId: String
) {
private val roomDisplayNameFallbackProvider= matrixConfiguration.roomDisplayNameFallbackProvider
/**
* Compute the room display name
*
@ -82,7 +83,7 @@ internal class RoomDisplayNameResolver @Inject constructor(
.findFirst()
?.displayName
} else {
stringProvider.getString(R.string.room_displayname_room_invite)
roomDisplayNameFallbackProvider.getNameForRoomInvite()
}
} else if (roomEntity?.membership == Membership.JOIN) {
val roomSummary = RoomSummaryEntity.where(realm, roomId).findFirst()
@ -104,25 +105,25 @@ internal class RoomDisplayNameResolver @Inject constructor(
val otherMembersCount = otherMembersSubset.count()
name = when (otherMembersCount) {
0 -> {
stringProvider.getString(R.string.room_displayname_empty_room)
roomDisplayNameFallbackProvider.getNameForEmptyRoom()
// TODO (was xx and yyy) ...
}
1 -> resolveRoomMemberName(otherMembersSubset[0], roomMembers)
2 -> {
stringProvider.getString(R.string.room_displayname_two_members,
roomDisplayNameFallbackProvider.getNameFor2members(
resolveRoomMemberName(otherMembersSubset[0], roomMembers),
resolveRoomMemberName(otherMembersSubset[1], roomMembers)
)
}
3 -> {
stringProvider.getString(R.string.room_displayname_3_members,
roomDisplayNameFallbackProvider.getNameFor3members(
resolveRoomMemberName(otherMembersSubset[0], roomMembers),
resolveRoomMemberName(otherMembersSubset[1], roomMembers),
resolveRoomMemberName(otherMembersSubset[2], roomMembers)
)
}
4 -> {
stringProvider.getString(R.string.room_displayname_4_members,
roomDisplayNameFallbackProvider.getNameFor4members(
resolveRoomMemberName(otherMembersSubset[0], roomMembers),
resolveRoomMemberName(otherMembersSubset[1], roomMembers),
resolveRoomMemberName(otherMembersSubset[2], roomMembers),
@ -131,9 +132,7 @@ internal class RoomDisplayNameResolver @Inject constructor(
}
else -> {
val remainingCount = invitedCount + joinedCount - otherMembersCount + 1
stringProvider.getQuantityString(
R.plurals.room_displayname_four_and_more_members,
remainingCount,
roomDisplayNameFallbackProvider.getNameFor4membersAndMore(
resolveRoomMemberName(otherMembersSubset[0], roomMembers),
resolveRoomMemberName(otherMembersSubset[1], roomMembers),
resolveRoomMemberName(otherMembersSubset[2], roomMembers),

View File

@ -53,6 +53,7 @@ import im.vector.app.features.notifications.NotificationUtils
import im.vector.app.features.pin.PinLocker
import im.vector.app.features.popup.PopupAlertManager
import im.vector.app.features.rageshake.VectorUncaughtExceptionHandler
import im.vector.app.features.room.VectorRoomDisplayNameFallbackProvider
import im.vector.app.features.settings.VectorLocale
import im.vector.app.features.settings.VectorPreferences
import im.vector.app.features.themes.ThemeUtils
@ -205,7 +206,12 @@ class VectorApplication :
}
}
override fun providesMatrixConfiguration() = MatrixConfiguration(applicationFlavor = BuildConfig.FLAVOR_DESCRIPTION)
override fun providesMatrixConfiguration(): MatrixConfiguration {
return MatrixConfiguration(
applicationFlavor = BuildConfig.FLAVOR_DESCRIPTION,
roomDisplayNameFallbackProvider = VectorRoomDisplayNameFallbackProvider(this)
)
}
override fun getWorkManagerConfiguration(): WorkConfiguration {
return WorkConfiguration.Builder()

View File

@ -0,0 +1,57 @@
/*
* Copyright (c) 2021 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.app.features.room
import android.content.Context
import org.matrix.android.sdk.R
import org.matrix.android.sdk.api.RoomDisplayNameFallbackProvider
class VectorRoomDisplayNameFallbackProvider(
private val context: Context
) : RoomDisplayNameFallbackProvider {
override fun getNameForRoomInvite(): String {
return context.getString(R.string.room_displayname_room_invite)
}
override fun getNameForEmptyRoom(): String {
return context.getString(R.string.room_displayname_empty_room)
}
override fun getNameFor2members(name1: String?, name2: String?): String {
return context.getString(R.string.room_displayname_two_members, name1, name2)
}
override fun getNameFor3members(name1: String?, name2: String?, name3: String?): String {
return context.getString(R.string.room_displayname_3_members, name1, name2, name3)
}
override fun getNameFor4members(name1: String?, name2: String?, name3: String?, name4: String?): String {
return context.getString(R.string.room_displayname_4_members, name1, name2, name3, name4)
}
override fun getNameFor4membersAndMore(name1: String?, name2: String?, name3: String?, remainingCount: Int): String {
return context.resources.getQuantityString(
R.plurals.room_displayname_four_and_more_members,
remainingCount,
name1,
name2,
name3,
remainingCount
)
}
}