diff --git a/library/ui-strings/src/main/res/values/strings.xml b/library/ui-strings/src/main/res/values/strings.xml
index c436044153..aa56f6a25a 100644
--- a/library/ui-strings/src/main/res/values/strings.xml
+++ b/library/ui-strings/src/main/res/values/strings.xml
@@ -1700,8 +1700,8 @@
App ID:
Push Key:
App Display Name:
- Device Display Name:
- Device ID:
+ Session Display Name:
+ Session ID:
Url:
Format:
Profile tag:
diff --git a/vector/src/main/java/im/vector/app/core/device/GetDeviceInfoUseCase.kt b/vector/src/main/java/im/vector/app/core/device/GetDeviceInfoUseCase.kt
new file mode 100644
index 0000000000..344173aab7
--- /dev/null
+++ b/vector/src/main/java/im/vector/app/core/device/GetDeviceInfoUseCase.kt
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2022 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.core.device
+
+import im.vector.app.core.di.ActiveSessionHolder
+import org.matrix.android.sdk.api.session.crypto.model.CryptoDeviceInfo
+import javax.inject.Inject
+
+interface GetDeviceInfoUseCase {
+
+ fun execute(): CryptoDeviceInfo
+}
+
+class DefaultGetDeviceInfoUseCase @Inject constructor(
+ private val activeSessionHolder: ActiveSessionHolder
+) : GetDeviceInfoUseCase {
+
+ override fun execute(): CryptoDeviceInfo {
+ return activeSessionHolder.getActiveSession().cryptoService().getMyDevice()
+ }
+}
diff --git a/vector/src/main/java/im/vector/app/core/pushers/PushersManager.kt b/vector/src/main/java/im/vector/app/core/pushers/PushersManager.kt
index 67e7868df7..44cccbd3f5 100644
--- a/vector/src/main/java/im/vector/app/core/pushers/PushersManager.kt
+++ b/vector/src/main/java/im/vector/app/core/pushers/PushersManager.kt
@@ -16,8 +16,8 @@
package im.vector.app.core.pushers
-import im.vector.app.AppBuildConfig
import im.vector.app.R
+import im.vector.app.core.device.GetDeviceInfoUseCase
import im.vector.app.core.di.ActiveSessionHolder
import im.vector.app.core.resources.AppNameProvider
import im.vector.app.core.resources.LocaleProvider
@@ -35,6 +35,7 @@ class PushersManager @Inject constructor(
private val localeProvider: LocaleProvider,
private val stringProvider: StringProvider,
private val appNameProvider: AppNameProvider,
+ private val getDeviceInfoUseCase: GetDeviceInfoUseCase,
) {
suspend fun testPush() {
val currentSession = activeSessionHolder.getActiveSession()
@@ -64,12 +65,12 @@ class PushersManager @Inject constructor(
pushKey: String,
gateway: String
) = HttpPusher(
- pushKey,
+ pushkey = pushKey,
appId = stringProvider.getString(R.string.pusher_app_id),
profileTag = DEFAULT_PUSHER_FILE_TAG + "_" + abs(activeSessionHolder.getActiveSession().myUserId.hashCode()),
lang = localeProvider.current().language,
appDisplayName = appNameProvider.getAppName(),
- deviceDisplayName = AppBuildConfig.getModel(),
+ deviceDisplayName = getDeviceInfoUseCase.execute().displayName().orEmpty(),
url = gateway,
enabled = true,
deviceId = activeSessionHolder.getActiveSession().sessionParams.deviceId ?: "MOBILE",
diff --git a/vector/src/test/java/im/vector/app/core/device/DefaultGetDeviceInfoUseCaseTest.kt b/vector/src/test/java/im/vector/app/core/device/DefaultGetDeviceInfoUseCaseTest.kt
new file mode 100644
index 0000000000..0675556bec
--- /dev/null
+++ b/vector/src/test/java/im/vector/app/core/device/DefaultGetDeviceInfoUseCaseTest.kt
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2022 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.core.device
+
+import im.vector.app.test.fakes.FakeActiveSessionHolder
+import im.vector.app.test.fakes.FakeCryptoService
+import im.vector.app.test.fakes.FakeSession
+import org.amshove.kluent.shouldBeEqualTo
+import org.junit.Test
+
+class DefaultGetDeviceInfoUseCaseTest {
+
+ private val cryptoService = FakeCryptoService()
+ private val session = FakeSession(fakeCryptoService = cryptoService)
+ private val activeSessionHolder = FakeActiveSessionHolder(session)
+
+ private val getDeviceInfoUseCase = DefaultGetDeviceInfoUseCase(activeSessionHolder.instance)
+
+ @Test
+ fun `when execute, then get crypto device info`() {
+
+ val result = getDeviceInfoUseCase.execute()
+
+ result shouldBeEqualTo cryptoService.cryptoDeviceInfo
+ }
+}
diff --git a/vector/src/test/java/im/vector/app/core/pushers/PushersManagerTest.kt b/vector/src/test/java/im/vector/app/core/pushers/PushersManagerTest.kt
index e42f995ef6..50c9024e86 100644
--- a/vector/src/test/java/im/vector/app/core/pushers/PushersManagerTest.kt
+++ b/vector/src/test/java/im/vector/app/core/pushers/PushersManagerTest.kt
@@ -16,20 +16,20 @@
package im.vector.app.core.pushers
-import im.vector.app.AppBuildConfig
import im.vector.app.R
import im.vector.app.test.fakes.FakeActiveSessionHolder
import im.vector.app.test.fakes.FakeAppNameProvider
+import im.vector.app.test.fakes.FakeGetDeviceInfoUseCase
import im.vector.app.test.fakes.FakeLocaleProvider
import im.vector.app.test.fakes.FakePushersService
import im.vector.app.test.fakes.FakeSession
import im.vector.app.test.fakes.FakeStringProvider
-import io.mockk.every
+import im.vector.app.test.fixtures.CryptoDeviceInfoFixture.aCryptoDeviceInfo
import io.mockk.mockk
-import io.mockk.mockkObject
import org.amshove.kluent.shouldBeEqualTo
-import org.junit.Before
import org.junit.Test
+import org.matrix.android.sdk.api.session.crypto.model.UnsignedDeviceInfo
+import org.matrix.android.sdk.api.session.pushers.HttpPusher
import java.util.Locale
import kotlin.math.abs
@@ -41,6 +41,7 @@ class PushersManagerTest {
private val stringProvider = FakeStringProvider()
private val localeProvider = FakeLocaleProvider()
private val appNameProvider = FakeAppNameProvider()
+ private val getDeviceInfoUseCase = FakeGetDeviceInfoUseCase()
private val pushersManager = PushersManager(
mockk(),
@@ -48,13 +49,9 @@ class PushersManagerTest {
localeProvider,
stringProvider.instance,
appNameProvider,
+ getDeviceInfoUseCase,
)
- @Before
- fun setUp() {
- mockkObject(AppBuildConfig)
- }
-
@Test
fun `when enqueueRegisterPusher, then HttpPusher created and enqueued`() {
val pushKey = "abc"
@@ -65,21 +62,24 @@ class PushersManagerTest {
stringProvider.given(R.string.pusher_app_id, pusherAppId)
localeProvider.givenCurrent(Locale.UK)
appNameProvider.givenAppName(appName)
- every { AppBuildConfig.getModel() } returns deviceDisplayName
+ getDeviceInfoUseCase.givenDeviceInfo(aCryptoDeviceInfo(unsigned = UnsignedDeviceInfo(deviceDisplayName)))
+ val expectedHttpPusher = HttpPusher(
+ pushkey = pushKey,
+ appId = pusherAppId,
+ profileTag = DEFAULT_PUSHER_FILE_TAG + "_" + abs(session.myUserId.hashCode()),
+ lang = Locale.UK.language,
+ appDisplayName = appName,
+ deviceDisplayName = deviceDisplayName,
+ url = gateway,
+ enabled = true,
+ deviceId = session.sessionParams.deviceId!!,
+ append = false,
+ withEventIdOnly = true,
+ )
pushersManager.enqueueRegisterPusher(pushKey, gateway)
val httpPusher = pushersService.verifyEnqueueAddHttpPusher()
- httpPusher.pushkey shouldBeEqualTo pushKey
- httpPusher.appId shouldBeEqualTo pusherAppId
- httpPusher.profileTag shouldBeEqualTo DEFAULT_PUSHER_FILE_TAG + "_" + abs(session.myUserId.hashCode())
- httpPusher.lang shouldBeEqualTo Locale.UK.language
- httpPusher.appDisplayName shouldBeEqualTo appName
- httpPusher.deviceDisplayName shouldBeEqualTo deviceDisplayName
- httpPusher.enabled shouldBeEqualTo true
- httpPusher.deviceId shouldBeEqualTo session.sessionParams.deviceId
- httpPusher.append shouldBeEqualTo false
- httpPusher.withEventIdOnly shouldBeEqualTo true
- httpPusher.url shouldBeEqualTo gateway
+ httpPusher shouldBeEqualTo expectedHttpPusher
}
}
diff --git a/vector/src/test/java/im/vector/app/test/fakes/FakeCryptoService.kt b/vector/src/test/java/im/vector/app/test/fakes/FakeCryptoService.kt
index 538ce671d2..02b911e800 100644
--- a/vector/src/test/java/im/vector/app/test/fakes/FakeCryptoService.kt
+++ b/vector/src/test/java/im/vector/app/test/fakes/FakeCryptoService.kt
@@ -17,6 +17,7 @@
package im.vector.app.test.fakes
import androidx.lifecycle.MutableLiveData
+import im.vector.app.test.fixtures.CryptoDeviceInfoFixture.aCryptoDeviceInfo
import io.mockk.mockk
import org.matrix.android.sdk.api.session.crypto.CryptoService
import org.matrix.android.sdk.api.session.crypto.model.CryptoDeviceInfo
@@ -32,6 +33,7 @@ class FakeCryptoService(
var cryptoDeviceInfos = mutableMapOf()
var cryptoDeviceInfoWithIdLiveData: MutableLiveData> = MutableLiveData()
var myDevicesInfoWithIdLiveData: MutableLiveData> = MutableLiveData()
+ var cryptoDeviceInfo = aCryptoDeviceInfo()
override fun crossSigningService() = fakeCrossSigningService
@@ -50,4 +52,6 @@ class FakeCryptoService(
override fun getLiveCryptoDeviceInfoWithId(deviceId: String) = cryptoDeviceInfoWithIdLiveData
override fun getMyDevicesInfoLive(deviceId: String) = myDevicesInfoWithIdLiveData
+
+ override fun getMyDevice() = cryptoDeviceInfo
}
diff --git a/vector/src/main/java/im/vector/app/AppBuildConfig.kt b/vector/src/test/java/im/vector/app/test/fakes/FakeGetDeviceInfoUseCase.kt
similarity index 61%
rename from vector/src/main/java/im/vector/app/AppBuildConfig.kt
rename to vector/src/test/java/im/vector/app/test/fakes/FakeGetDeviceInfoUseCase.kt
index 54eb4f87ea..c284263d28 100644
--- a/vector/src/main/java/im/vector/app/AppBuildConfig.kt
+++ b/vector/src/test/java/im/vector/app/test/fakes/FakeGetDeviceInfoUseCase.kt
@@ -14,13 +14,16 @@
* limitations under the License.
*/
-package im.vector.app
+package im.vector.app.test.fakes
-import android.os.Build
+import im.vector.app.core.device.GetDeviceInfoUseCase
+import io.mockk.every
+import io.mockk.mockk
+import org.matrix.android.sdk.api.session.crypto.model.CryptoDeviceInfo
-object AppBuildConfig {
+class FakeGetDeviceInfoUseCase : GetDeviceInfoUseCase by mockk() {
- fun getModel(): String {
- return Build.MODEL
+ fun givenDeviceInfo(cryptoDeviceInfo: CryptoDeviceInfo) {
+ every { execute() } returns cryptoDeviceInfo
}
}
diff --git a/vector/src/test/java/im/vector/app/test/fixtures/CryptoDeviceInfoFixture.kt b/vector/src/test/java/im/vector/app/test/fixtures/CryptoDeviceInfoFixture.kt
new file mode 100644
index 0000000000..834a428b4a
--- /dev/null
+++ b/vector/src/test/java/im/vector/app/test/fixtures/CryptoDeviceInfoFixture.kt
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2022 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.test.fixtures
+
+import org.matrix.android.sdk.api.session.crypto.crosssigning.DeviceTrustLevel
+import org.matrix.android.sdk.api.session.crypto.model.CryptoDeviceInfo
+import org.matrix.android.sdk.api.session.crypto.model.UnsignedDeviceInfo
+
+object CryptoDeviceInfoFixture {
+
+ fun aCryptoDeviceInfo(
+ deviceId: String = "",
+ userId: String = "",
+ algorithms: List? = null,
+ keys: Map? = null,
+ signatures: Map>? = null,
+ unsigned: UnsignedDeviceInfo? = null,
+ trustLevel: DeviceTrustLevel? = null,
+ isBlocked: Boolean = false,
+ firstTimeSeenLocalTs: Long? = null,
+ ) = CryptoDeviceInfo(
+ deviceId,
+ userId,
+ algorithms,
+ keys,
+ signatures,
+ unsigned,
+ trustLevel,
+ isBlocked,
+ firstTimeSeenLocalTs,
+ )
+}