Skip to content

Commit bf502f4

Browse files
author
Maxime NATUREL
committed
Set the corresponding deviceType icon in list item and in overview view
1 parent 5c95cee commit bf502f4

File tree

6 files changed

+68
-26
lines changed

6 files changed

+68
-26
lines changed

vector/src/main/java/im/vector/app/features/settings/devices/v2/VectorSettingsDevicesFragment.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import im.vector.app.core.dialogs.ManuallyVerifyDialog
3333
import im.vector.app.core.platform.VectorBaseFragment
3434
import im.vector.app.core.resources.ColorProvider
3535
import im.vector.app.core.resources.DrawableProvider
36+
import im.vector.app.core.resources.StringProvider
3637
import im.vector.app.databinding.FragmentSettingsDevicesBinding
3738
import im.vector.app.features.crypto.recover.SetupMode
3839
import im.vector.app.features.crypto.verification.VerificationBottomSheet
@@ -61,6 +62,8 @@ class VectorSettingsDevicesFragment :
6162

6263
@Inject lateinit var colorProvider: ColorProvider
6364

65+
@Inject lateinit var stringProvider: StringProvider
66+
6467
private val viewModel: DevicesViewModel by fragmentViewModel()
6568

6669
override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentSettingsDevicesBinding {
@@ -237,7 +240,7 @@ class VectorSettingsDevicesFragment :
237240
isCurrentSession = true,
238241
deviceFullInfo = it
239242
)
240-
views.deviceListCurrentSession.render(viewState, dateFormatter, drawableProvider, colorProvider)
243+
views.deviceListCurrentSession.render(viewState, dateFormatter, drawableProvider, colorProvider, stringProvider)
241244
views.deviceListCurrentSession.debouncedClicks {
242245
currentDeviceInfo.deviceInfo.deviceId?.let { deviceId -> navigateToSessionOverview(deviceId) }
243246
}

vector/src/main/java/im/vector/app/features/settings/devices/v2/list/OtherSessionItem.kt

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -59,31 +59,16 @@ abstract class OtherSessionItem : VectorEpoxyModel<OtherSessionItem.Holder>(R.la
5959
@EpoxyAttribute(EpoxyAttribute.Option.DoNotHash)
6060
var clickListener: ClickListener? = null
6161

62+
private val setDeviceTypeIconUseCase = SetDeviceTypeIconUseCase()
63+
6264
override fun bind(holder: Holder) {
6365
super.bind(holder)
6466
holder.view.onClick(clickListener)
6567
if (clickListener == null) {
6668
holder.view.isClickable = false
6769
}
6870

69-
when (deviceType) {
70-
DeviceType.MOBILE -> {
71-
holder.otherSessionDeviceTypeImageView.setImageResource(R.drawable.ic_device_type_mobile)
72-
holder.otherSessionDeviceTypeImageView.contentDescription = stringProvider.getString(R.string.a11y_device_manager_device_type_mobile)
73-
}
74-
DeviceType.WEB -> {
75-
holder.otherSessionDeviceTypeImageView.setImageResource(R.drawable.ic_device_type_web)
76-
holder.otherSessionDeviceTypeImageView.contentDescription = stringProvider.getString(R.string.a11y_device_manager_device_type_web)
77-
}
78-
DeviceType.DESKTOP -> {
79-
holder.otherSessionDeviceTypeImageView.setImageResource(R.drawable.ic_device_type_desktop)
80-
holder.otherSessionDeviceTypeImageView.contentDescription = stringProvider.getString(R.string.a11y_device_manager_device_type_desktop)
81-
}
82-
DeviceType.UNKNOWN -> {
83-
holder.otherSessionDeviceTypeImageView.setImageResource(R.drawable.ic_device_type_unknown)
84-
holder.otherSessionDeviceTypeImageView.contentDescription = stringProvider.getString(R.string.a11y_device_manager_device_type_unknown)
85-
}
86-
}
71+
setDeviceTypeIconUseCase.execute(deviceType, holder.otherSessionDeviceTypeImageView, stringProvider)
8772
holder.otherSessionVerificationStatusImageView.render(roomEncryptionTrustLevel)
8873
holder.otherSessionNameTextView.text = sessionName
8974
holder.otherSessionDescriptionTextView.text = sessionDescription

vector/src/main/java/im/vector/app/features/settings/devices/v2/list/OtherSessionsController.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ class OtherSessionsController @Inject constructor(
6464

6565
otherSessionItem {
6666
id(device.deviceInfo.deviceId)
67-
deviceType(DeviceType.UNKNOWN) // TODO. We don't have this info yet. Update accordingly.
67+
deviceType(device.deviceExtendedInfo.deviceType)
6868
roomEncryptionTrustLevel(device.roomEncryptionTrustLevel)
6969
sessionName(device.deviceInfo.displayName)
7070
sessionDescription(description)

vector/src/main/java/im/vector/app/features/settings/devices/v2/list/SessionInfoView.kt

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import im.vector.app.core.extensions.setTextOrHide
2828
import im.vector.app.core.extensions.setTextWithColoredPart
2929
import im.vector.app.core.resources.ColorProvider
3030
import im.vector.app.core.resources.DrawableProvider
31+
import im.vector.app.core.resources.StringProvider
3132
import im.vector.app.databinding.ViewSessionInfoBinding
3233
import im.vector.app.features.themes.ThemeUtils
3334
import org.matrix.android.sdk.api.session.crypto.model.DeviceInfo
@@ -51,13 +52,20 @@ class SessionInfoView @JvmOverloads constructor(
5152
val viewDetailsButton = views.sessionInfoViewDetailsButton
5253
val viewVerifyButton = views.sessionInfoVerifySessionButton
5354

55+
private val setDeviceTypeIconUseCase = SetDeviceTypeIconUseCase()
56+
5457
fun render(
5558
sessionInfoViewState: SessionInfoViewState,
5659
dateFormatter: VectorDateFormatter,
5760
drawableProvider: DrawableProvider,
5861
colorProvider: ColorProvider,
62+
stringProvider: StringProvider,
5963
) {
60-
renderDeviceInfo(sessionInfoViewState.deviceFullInfo.deviceInfo.displayName.orEmpty())
64+
renderDeviceInfo(
65+
sessionInfoViewState.deviceFullInfo.deviceInfo.displayName.orEmpty(),
66+
sessionInfoViewState.deviceFullInfo.deviceExtendedInfo.deviceType,
67+
stringProvider,
68+
)
6169
renderVerificationStatus(
6270
sessionInfoViewState.deviceFullInfo.roomEncryptionTrustLevel,
6371
sessionInfoViewState.isCurrentSession,
@@ -134,10 +142,8 @@ class SessionInfoView @JvmOverloads constructor(
134142
views.sessionInfoVerifySessionButton.isVisible = isVerifyButtonVisible
135143
}
136144

137-
// TODO. We don't have this info yet. Update later accordingly.
138-
private fun renderDeviceInfo(sessionName: String) {
139-
views.sessionInfoDeviceTypeImageView.setImageResource(R.drawable.ic_device_type_mobile)
140-
views.sessionInfoDeviceTypeImageView.contentDescription = context.getString(R.string.a11y_device_manager_device_type_mobile)
145+
private fun renderDeviceInfo(sessionName: String, deviceType: DeviceType, stringProvider: StringProvider) {
146+
setDeviceTypeIconUseCase.execute(deviceType, views.sessionInfoDeviceTypeImageView, stringProvider)
141147
views.sessionInfoNameTextView.text = sessionName
142148
}
143149

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
* Copyright (c) 2022 New Vector Ltd
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package im.vector.app.features.settings.devices.v2.list
18+
19+
import android.widget.ImageView
20+
import im.vector.app.R
21+
import im.vector.app.core.resources.StringProvider
22+
23+
class SetDeviceTypeIconUseCase {
24+
25+
fun execute(deviceType: DeviceType, imageView: ImageView, stringProvider: StringProvider) {
26+
when (deviceType) {
27+
DeviceType.MOBILE -> {
28+
imageView.setImageResource(R.drawable.ic_device_type_mobile)
29+
imageView.contentDescription = stringProvider.getString(R.string.a11y_device_manager_device_type_mobile)
30+
}
31+
DeviceType.WEB -> {
32+
imageView.setImageResource(R.drawable.ic_device_type_web)
33+
imageView.contentDescription = stringProvider.getString(R.string.a11y_device_manager_device_type_web)
34+
}
35+
DeviceType.DESKTOP -> {
36+
imageView.setImageResource(R.drawable.ic_device_type_desktop)
37+
imageView.contentDescription = stringProvider.getString(R.string.a11y_device_manager_device_type_desktop)
38+
}
39+
DeviceType.UNKNOWN -> {
40+
imageView.setImageResource(R.drawable.ic_device_type_unknown)
41+
imageView.contentDescription = stringProvider.getString(R.string.a11y_device_manager_device_type_unknown)
42+
}
43+
}
44+
}
45+
}

vector/src/main/java/im/vector/app/features/settings/devices/v2/overview/SessionOverviewFragment.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import im.vector.app.core.platform.VectorBaseFragment
3737
import im.vector.app.core.platform.VectorMenuProvider
3838
import im.vector.app.core.resources.ColorProvider
3939
import im.vector.app.core.resources.DrawableProvider
40+
import im.vector.app.core.resources.StringProvider
4041
import im.vector.app.databinding.FragmentSessionOverviewBinding
4142
import im.vector.app.features.auth.ReAuthActivity
4243
import im.vector.app.features.crypto.recover.SetupMode
@@ -64,6 +65,8 @@ class SessionOverviewFragment :
6465

6566
@Inject lateinit var colorProvider: ColorProvider
6667

68+
@Inject lateinit var stringProvider: StringProvider
69+
6770
private val viewModel: SessionOverviewViewModel by fragmentViewModel()
6871

6972
override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentSessionOverviewBinding {
@@ -205,7 +208,7 @@ class SessionOverviewFragment :
205208
isLearnMoreLinkVisible = true,
206209
isLastSeenDetailsVisible = true,
207210
)
208-
views.sessionOverviewInfo.render(infoViewState, dateFormatter, drawableProvider, colorProvider)
211+
views.sessionOverviewInfo.render(infoViewState, dateFormatter, drawableProvider, colorProvider, stringProvider)
209212
views.sessionOverviewInfo.onLearnMoreClickListener = {
210213
showLearnMoreInfoVerificationStatus(deviceInfo.roomEncryptionTrustLevel == RoomEncryptionTrustLevel.Trusted)
211214
}

0 commit comments

Comments
 (0)