Create VectorRoomDisplayNameFallbackProvider to provide default room names
This commit is contained in:
parent
c13ff6a392
commit
a3b1c348ef
@ -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
|
||||
) {
|
||||
|
||||
/**
|
||||
|
@ -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
|
||||
}
|
@ -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),
|
||||
|
@ -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()
|
||||
|
@ -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
|
||||
)
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user