Skip to content

Commit 3e73137

Browse files
committed
Fixes new device detections banner problems
1 parent dfadc8e commit 3e73137

File tree

6 files changed

+37
-33
lines changed

6 files changed

+37
-33
lines changed

matrix-sdk-android/src/rustCrypto/java/org/matrix/android/sdk/internal/crypto/Device.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -187,8 +187,7 @@ internal class Device @AssistedInject constructor(
187187
locallyVerified = innerDevice.locallyTrusted
188188
),
189189
isBlocked = innerDevice.isBlocked,
190-
// TODO
191-
firstTimeSeenLocalTs = null
190+
firstTimeSeenLocalTs = innerDevice.firstTimeSeenTs.toLong() * 1000
192191
)
193192
}
194193
}

vector/src/main/java/im/vector/app/features/crypto/verification/self/SelfVerificationBottomSheet.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ class SelfVerificationBottomSheet : VectorBaseBottomSheetDialogFragment<BottomSh
156156
)
157157
}
158158
is VerificationBottomSheetViewEvents.RequestNotFound -> {
159-
dismiss()
159+
dismiss()
160160
}
161161
is VerificationBottomSheetViewEvents.ConfirmCancel -> {
162162
// TODO? applies to self?
@@ -229,6 +229,9 @@ class SelfVerificationBottomSheet : VectorBaseBottomSheetDialogFragment<BottomSh
229229
}
230230

231231
companion object {
232+
233+
val TAG: String = "VERIF"
234+
232235
fun verifyOwnUntrustedDevice(): SelfVerificationBottomSheet {
233236
return SelfVerificationBottomSheet().apply {
234237
setArguments(

vector/src/main/java/im/vector/app/features/home/NewHomeDetailFragment.kt

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,15 @@ import im.vector.app.features.call.SharedKnownCallsViewModel
4747
import im.vector.app.features.call.VectorCallActivity
4848
import im.vector.app.features.call.dialpad.PstnDialActivity
4949
import im.vector.app.features.call.webrtc.WebRtcCallManager
50+
import im.vector.app.features.crypto.verification.self.SelfVerificationBottomSheet
5051
import im.vector.app.features.home.room.list.UnreadCounterBadgeView
5152
import im.vector.app.features.home.room.list.actions.RoomListSharedAction
5253
import im.vector.app.features.home.room.list.actions.RoomListSharedActionViewModel
5354
import im.vector.app.features.home.room.list.home.HomeRoomListFragment
5455
import im.vector.app.features.home.room.list.home.NewChatBottomSheet
5556
import im.vector.app.features.popup.PopupAlertManager
5657
import im.vector.app.features.popup.VerificationVectorAlert
58+
import im.vector.app.features.qrcode.QrCodeScannerActivity
5759
import im.vector.app.features.settings.VectorPreferences
5860
import im.vector.app.features.settings.VectorSettingsActivity.Companion.EXTRA_DIRECT_ACCESS_SECURITY_PRIVACY_MANAGE_SESSIONS
5961
import im.vector.app.features.spaces.SpaceListBottomSheet
@@ -161,8 +163,8 @@ class NewHomeDetailFragment :
161163

162164
unknownDeviceDetectorSharedViewModel.onEach { state ->
163165
state.unknownSessions.invoke()?.let { unknownDevices ->
166+
val uid = PopupAlertManager.REVIEW_LOGIN_UID
164167
if (unknownDevices.firstOrNull()?.currentSessionTrust == true) {
165-
val uid = PopupAlertManager.REVIEW_LOGIN_UID
166168
alertManager.cancelAlert(uid)
167169
val olderUnverified = unknownDevices.filter { !it.isNew }
168170
val newest = unknownDevices.firstOrNull { it.isNew }?.deviceInfo
@@ -172,6 +174,9 @@ class NewHomeDetailFragment :
172174
// In this case we prompt to go to settings to review logins
173175
promptToReviewChanges(uid, state, olderUnverified.map { it.deviceInfo })
174176
}
177+
} else {
178+
// cancel as there are not anymore untrusted devices
179+
alertManager.cancelAlert(uid)
175180
}
176181
}
177182
}
@@ -278,7 +283,14 @@ class NewHomeDetailFragment :
278283
uid = uid,
279284
title = getString(R.string.review_unverified_sessions_title),
280285
description = getString(R.string.review_unverified_sessions_description),
281-
iconId = R.drawable.ic_shield_warning
286+
iconId = R.drawable.ic_shield_warning,
287+
shouldBeDisplayedIn = { activity ->
288+
// do not show when there is an ongoing verification flow
289+
if (activity is VectorBaseActivity<*>) {
290+
activity.supportFragmentManager.findFragmentByTag(SelfVerificationBottomSheet.TAG) == null &&
291+
activity !is QrCodeScannerActivity
292+
} else true
293+
}
282294
).apply {
283295
viewBinder = VerificationVectorAlert.ViewBinder(user, avatarRenderer)
284296
colorInt = colorProvider.getColorFromAttribute(R.attr.colorPrimary)
@@ -351,9 +363,9 @@ class NewHomeDetailFragment :
351363
})
352364
}
353365

354-
/* ==========================================================================================
355-
* KeysBackupBanner Listener
356-
* ========================================================================================== */
366+
/* ==========================================================================================
367+
* KeysBackupBanner Listener
368+
* ========================================================================================== */
357369

358370
override fun onCloseClicked() {
359371
serverBackupStatusViewModel.handle(ServerBackupStatusAction.OnBannerClosed)

vector/src/main/java/im/vector/app/features/home/UnknownDeviceDetectorSharedViewModel.kt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ import kotlinx.coroutines.flow.launchIn
3939
import kotlinx.coroutines.flow.onEach
4040
import kotlinx.coroutines.flow.sample
4141
import kotlinx.coroutines.launch
42-
import org.matrix.android.sdk.api.extensions.orFalse
4342
import org.matrix.android.sdk.api.extensions.tryOrNull
4443
import org.matrix.android.sdk.api.session.Session
4544
import org.matrix.android.sdk.api.session.crypto.model.DeviceInfo
@@ -116,8 +115,14 @@ class UnknownDeviceDetectorSharedViewModel @AssistedInject constructor(
116115
session.sessionParams.deviceId != it.deviceId
117116
}
118117
.filter { info ->
119-
// filter out verified sessions or those which do not support encryption (i.e. without crypto info)
120-
cryptoList.firstOrNull { info.deviceId == it.deviceId }?.isVerified?.not().orFalse()
118+
val matchingDeviceWithKeys = cryptoList.firstOrNull { it.deviceId == info.deviceId }
119+
if (matchingDeviceWithKeys == null) {
120+
// filter out verified sessions or those which do not support encryption (i.e. without crypto info)
121+
false
122+
} else {
123+
// Only report unverified
124+
!matchingDeviceWithKeys.isVerified
125+
}
121126
}
122127
// filter out ignored devices
123128
.filter { shouldShowUnverifiedSessionsAlertUseCase.execute(it.deviceId) }
@@ -136,7 +141,7 @@ class UnknownDeviceDetectorSharedViewModel @AssistedInject constructor(
136141
}
137142
.distinctUntilChanged()
138143
.execute { async ->
139-
Timber.v("## Detector trigger passed distinct")
144+
Timber.v("## Detector trigger passed distinct ${async.invoke()}")
140145
copy(
141146
myMatrixItem = session.getUserOrDefault(session.myUserId).toMatrixItem(),
142147
unknownSessions = async

vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -242,8 +242,8 @@ class DefaultNavigator @Inject constructor(
242242
}
243243

244244
if (context is AppCompatActivity) {
245-
SelfVerificationBottomSheet.forTransaction(tx.transactionId)
246-
.show(context.supportFragmentManager, "VERIF")
245+
SelfVerificationBottomSheet.forTransaction(tx.transactionId)
246+
.show(context.supportFragmentManager, "VERIF")
247247
}
248248
}
249249
}
@@ -258,33 +258,18 @@ class DefaultNavigator @Inject constructor(
258258
)
259259
if (context is AppCompatActivity) {
260260
context.supportFragmentManager.commitTransaction(allowStateLoss = true) {
261-
add(SelfVerificationBottomSheet.forTransaction(request.transactionId), "VERIF")
261+
add(SelfVerificationBottomSheet.forTransaction(request.transactionId), SelfVerificationBottomSheet.TAG)
262262
}
263263
}
264264
}
265265
}
266266

267267
override fun requestSelfSessionVerification(context: Context) {
268268
coroutineScope.launch {
269-
// TODO
270-
// val session = sessionHolder.getSafeActiveSession() ?: return@launch
271-
// val otherSessions = session.cryptoService()
272-
// .getCryptoDeviceInfoList(session.myUserId)
273-
// .filter { it.deviceId != session.sessionParams.deviceId }
274-
// .map { it.deviceId }
275269
if (context is AppCompatActivity) {
276270
context.supportFragmentManager.commitTransaction(allowStateLoss = true) {
277-
add(SelfVerificationBottomSheet.verifyOwnUntrustedDevice(), "VERIF")
271+
add(SelfVerificationBottomSheet.verifyOwnUntrustedDevice(), SelfVerificationBottomSheet.TAG)
278272
}
279-
// if (otherSessions.isNotEmpty()) {
280-
// val pr = session.cryptoService().verificationService().requestSelfKeyVerification(
281-
// supportedVerificationMethodsProvider.provide())
282-
// VerificationBottomSheet.forSelfVerification(session, pr.transactionId)
283-
// .show(context.supportFragmentManager, VerificationBottomSheet.WAITING_SELF_VERIF_TAG)
284-
// } else {
285-
// VerificationBottomSheet.forSelfVerification(session)
286-
// .show(context.supportFragmentManager, VerificationBottomSheet.WAITING_SELF_VERIF_TAG)
287-
// }
288273
}
289274
}
290275
}
@@ -293,7 +278,7 @@ class DefaultNavigator @Inject constructor(
293278
// val session = sessionHolder.getSafeActiveSession() ?: return
294279
coroutineScope.launch(Dispatchers.Main) {
295280
SelfVerificationBottomSheet.forTransaction(transactionId)
296-
.show(fragmentActivity.supportFragmentManager, "SELF_VERIF_TAG")
281+
.show(fragmentActivity.supportFragmentManager, SelfVerificationBottomSheet.TAG)
297282
}
298283
}
299284

vector/src/main/java/im/vector/app/features/popup/PopupAlertManager.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ class PopupAlertManager @Inject constructor(
164164
next = alertQueue.maxByOrNull { it.priority }
165165
// If next alert with highest priority is higher than the current one, we should display it
166166
// and add the current one to queue again.
167-
if (next != null && next.priority > currentAlerter?.priority ?: Int.MIN_VALUE) {
167+
if (next != null && next.priority > (currentAlerter?.priority ?: Int.MIN_VALUE)) {
168168
alertQueue.remove(next)
169169
currentAlerter?.also {
170170
alertQueue.add(0, it)

0 commit comments

Comments
 (0)