From b2e7cc220801ac18d85b3b79c9c28deecc57113e Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Thu, 22 Sep 2022 15:18:20 +0300 Subject: [PATCH 1/7] Extend user agent by adding device manufacturer and model to the beginning. --- .../sdk/internal/network/UserAgentHolder.kt | 77 ++++++++++--------- 1 file changed, 41 insertions(+), 36 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/UserAgentHolder.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/UserAgentHolder.kt index 28d96dfce7..e0611a1de6 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/UserAgentHolder.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/UserAgentHolder.kt @@ -17,10 +17,11 @@ package org.matrix.android.sdk.internal.network import android.content.Context +import android.os.Build import org.matrix.android.sdk.BuildConfig import org.matrix.android.sdk.api.MatrixConfiguration +import org.matrix.android.sdk.api.extensions.tryOrNull import org.matrix.android.sdk.internal.di.MatrixScope -import timber.log.Timber import javax.inject.Inject @MatrixScope @@ -38,51 +39,55 @@ internal class UserAgentHolder @Inject constructor( /** * Create an user agent with the application version. - * Ex: Element/1.0.0 (Linux; U; Android 6.0.1; SM-A510F Build/MMB29; Flavour GPlay; MatrixAndroidSdk2 1.0) + * Ex: Element/1.5.0 (Xiaomi; Mi 9T; Android 11; RKQ1.200826.002; Flavour GooglePlay; MatrixAndroidSdk2 1.5.0) * * @param flavorDescription the flavor description */ private fun setApplicationFlavor(flavorDescription: String) { - var appName = "" - var appVersion = "" + val appPackageName = context.applicationContext.packageName + val pm = context.packageManager - try { - val appPackageName = context.applicationContext.packageName - val pm = context.packageManager - val appInfo = pm.getApplicationInfo(appPackageName, 0) - appName = pm.getApplicationLabel(appInfo).toString() + val appName = tryOrNull { pm.getApplicationLabel(pm.getApplicationInfo(appPackageName, 0)).toString() } + ?.takeIf { + it.matches("\\A\\p{ASCII}*\\z".toRegex()) + } + ?: run { + // Use appPackageName instead of appName if appName contains any non-ASCII character + appPackageName + } + val appVersion = tryOrNull { pm.getPackageInfo(context.applicationContext.packageName, 0).versionName } - val pkgInfo = pm.getPackageInfo(context.applicationContext.packageName, 0) - appVersion = pkgInfo.versionName ?: "" + val deviceManufacturer = Build.MANUFACTURER + val deviceModel = Build.MODEL + val androidVersion = Build.VERSION.RELEASE + val deviceBuildId = Build.DISPLAY + val matrixSdkVersion = BuildConfig.SDK_VERSION - // Use appPackageName instead of appName if appName contains any non-ASCII character - if (!appName.matches("\\A\\p{ASCII}*\\z".toRegex())) { - appName = appPackageName - } - } catch (e: Exception) { - Timber.e(e, "## initUserAgent() : failed") - } - - val systemUserAgent = System.getProperty("http.agent") - - // cannot retrieve the application version - if (appName.isEmpty() || appVersion.isEmpty()) { - if (null == systemUserAgent) { - userAgent = "Java" + System.getProperty("java.version") - } + if (appName.isNullOrEmpty() || appVersion.isNullOrEmpty()) { + userAgent = tryOrNull { System.getProperty("http.agent") } ?: ("Java" + System.getProperty("java.version")) return } - // if there is no user agent or cannot parse it - if (null == systemUserAgent || systemUserAgent.lastIndexOf(")") == -1 || !systemUserAgent.contains("(")) { - userAgent = (appName + "/" + appVersion + " ( Flavour " + flavorDescription + - "; MatrixAndroidSdk2 " + BuildConfig.SDK_VERSION + ")") - } else { - // update - userAgent = appName + "/" + appVersion + " " + - systemUserAgent.substring(systemUserAgent.indexOf("("), systemUserAgent.lastIndexOf(")") - 1) + - "; Flavour " + flavorDescription + - "; MatrixAndroidSdk2 " + BuildConfig.SDK_VERSION + ")" + userAgent = buildString { + append(appName) + append("/") + append(appVersion) + append(" (") + append(deviceManufacturer) + append("; ") + append(deviceModel) + append("; ") + append("Android ") + append(androidVersion) + append("; ") + append(deviceBuildId) + append("; ") + append("Flavour ") + append(flavorDescription) + append("; ") + append("MatrixAndroidSdk2 ") + append(matrixSdkVersion) + append(")") } } } From 8b3eaf10e11dbc02c065c4694310f9d8f12f9b21 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Thu, 22 Sep 2022 15:25:31 +0300 Subject: [PATCH 2/7] Add changelog. --- changelog.d/7209.feature | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/7209.feature diff --git a/changelog.d/7209.feature b/changelog.d/7209.feature new file mode 100644 index 0000000000..6375f5e495 --- /dev/null +++ b/changelog.d/7209.feature @@ -0,0 +1 @@ +[Device Manager] Extend user agent to include device information From ea78f504d713f005721c97db1c3dbc688611da1e Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Thu, 22 Sep 2022 15:28:26 +0300 Subject: [PATCH 3/7] Small refactoring. --- .../android/sdk/internal/network/UserAgentHolder.kt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/UserAgentHolder.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/UserAgentHolder.kt index e0611a1de6..92d00c3895 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/UserAgentHolder.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/UserAgentHolder.kt @@ -56,6 +56,11 @@ internal class UserAgentHolder @Inject constructor( appPackageName } val appVersion = tryOrNull { pm.getPackageInfo(context.applicationContext.packageName, 0).versionName } + + if (appName.isNullOrEmpty() || appVersion.isNullOrEmpty()) { + userAgent = tryOrNull { System.getProperty("http.agent") } ?: ("Java" + System.getProperty("java.version")) + return + } val deviceManufacturer = Build.MANUFACTURER val deviceModel = Build.MODEL @@ -63,11 +68,6 @@ internal class UserAgentHolder @Inject constructor( val deviceBuildId = Build.DISPLAY val matrixSdkVersion = BuildConfig.SDK_VERSION - if (appName.isNullOrEmpty() || appVersion.isNullOrEmpty()) { - userAgent = tryOrNull { System.getProperty("http.agent") } ?: ("Java" + System.getProperty("java.version")) - return - } - userAgent = buildString { append(appName) append("/") From c37a6842fe83f852037cd4caad5639106dda17e1 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Thu, 22 Sep 2022 15:53:29 +0300 Subject: [PATCH 4/7] Update format to be consistent with Element iOS. --- .../matrix/android/sdk/internal/network/UserAgentHolder.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/UserAgentHolder.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/UserAgentHolder.kt index 92d00c3895..58231badb6 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/UserAgentHolder.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/UserAgentHolder.kt @@ -39,7 +39,7 @@ internal class UserAgentHolder @Inject constructor( /** * Create an user agent with the application version. - * Ex: Element/1.5.0 (Xiaomi; Mi 9T; Android 11; RKQ1.200826.002; Flavour GooglePlay; MatrixAndroidSdk2 1.5.0) + * Ex: Element/1.5.0 (Xiaomi Mi 9T; Android 11; RKQ1.200826.002; Flavour GooglePlay; MatrixAndroidSdk2 1.5.0) * * @param flavorDescription the flavor description */ @@ -56,7 +56,7 @@ internal class UserAgentHolder @Inject constructor( appPackageName } val appVersion = tryOrNull { pm.getPackageInfo(context.applicationContext.packageName, 0).versionName } - + if (appName.isNullOrEmpty() || appVersion.isNullOrEmpty()) { userAgent = tryOrNull { System.getProperty("http.agent") } ?: ("Java" + System.getProperty("java.version")) return @@ -74,7 +74,7 @@ internal class UserAgentHolder @Inject constructor( append(appVersion) append(" (") append(deviceManufacturer) - append("; ") + append(" ") append(deviceModel) append("; ") append("Android ") From c7108f3ac37f88c7306b34d804bd0f8183ae2025 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Fri, 23 Sep 2022 13:05:16 +0300 Subject: [PATCH 5/7] Create use case to compute user agent. --- .../network/ComputeUserAgentUseCase.kt | 80 +++++++++++++++++++ .../sdk/internal/network/UserAgentHolder.kt | 64 +-------------- 2 files changed, 84 insertions(+), 60 deletions(-) create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ComputeUserAgentUseCase.kt diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ComputeUserAgentUseCase.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ComputeUserAgentUseCase.kt new file mode 100644 index 0000000000..47256a5a94 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ComputeUserAgentUseCase.kt @@ -0,0 +1,80 @@ +/* + * Copyright 2022 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.internal.network + +import android.content.Context +import android.os.Build +import org.matrix.android.sdk.BuildConfig +import org.matrix.android.sdk.api.extensions.tryOrNull +import javax.inject.Inject + +class ComputeUserAgentUseCase @Inject constructor() { + + /** + * Create an user agent with the application version. + * Ex: Element/1.5.0 (Xiaomi Mi 9T; Android 11; RKQ1.200826.002; Flavour GooglePlay; MatrixAndroidSdk2 1.5.0) + * + * @param context the context + * @param flavorDescription the flavor description + */ + fun execute(context: Context, flavorDescription: String): String { + val appPackageName = context.applicationContext.packageName + val pm = context.packageManager + + val appName = tryOrNull { pm.getApplicationLabel(pm.getApplicationInfo(appPackageName, 0)).toString() } + ?.takeIf { + it.matches("\\A\\p{ASCII}*\\z".toRegex()) + } + ?: run { + // Use appPackageName instead of appName if appName contains any non-ASCII character + appPackageName + } + val appVersion = tryOrNull { pm.getPackageInfo(context.applicationContext.packageName, 0).versionName } + + if (appName.isNullOrEmpty() || appVersion.isNullOrEmpty()) { + return tryOrNull { System.getProperty("http.agent") } ?: ("Java" + System.getProperty("java.version")) + } + + val deviceManufacturer = Build.MANUFACTURER + val deviceModel = Build.MODEL + val androidVersion = Build.VERSION.RELEASE + val deviceBuildId = Build.DISPLAY + val matrixSdkVersion = BuildConfig.SDK_VERSION + + return buildString { + append(appName) + append("/") + append(appVersion) + append(" (") + append(deviceManufacturer) + append(" ") + append(deviceModel) + append("; ") + append("Android ") + append(androidVersion) + append("; ") + append(deviceBuildId) + append("; ") + append("Flavour ") + append(flavorDescription) + append("; ") + append("MatrixAndroidSdk2 ") + append(matrixSdkVersion) + append(")") + } + } +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/UserAgentHolder.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/UserAgentHolder.kt index 58231badb6..9383932cc7 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/UserAgentHolder.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/UserAgentHolder.kt @@ -17,77 +17,21 @@ package org.matrix.android.sdk.internal.network import android.content.Context -import android.os.Build -import org.matrix.android.sdk.BuildConfig import org.matrix.android.sdk.api.MatrixConfiguration -import org.matrix.android.sdk.api.extensions.tryOrNull import org.matrix.android.sdk.internal.di.MatrixScope import javax.inject.Inject @MatrixScope internal class UserAgentHolder @Inject constructor( - private val context: Context, - matrixConfiguration: MatrixConfiguration + context: Context, + matrixConfiguration: MatrixConfiguration, + computeUserAgentUseCase: ComputeUserAgentUseCase, ) { var userAgent: String = "" private set init { - setApplicationFlavor(matrixConfiguration.applicationFlavor) - } - - /** - * Create an user agent with the application version. - * Ex: Element/1.5.0 (Xiaomi Mi 9T; Android 11; RKQ1.200826.002; Flavour GooglePlay; MatrixAndroidSdk2 1.5.0) - * - * @param flavorDescription the flavor description - */ - private fun setApplicationFlavor(flavorDescription: String) { - val appPackageName = context.applicationContext.packageName - val pm = context.packageManager - - val appName = tryOrNull { pm.getApplicationLabel(pm.getApplicationInfo(appPackageName, 0)).toString() } - ?.takeIf { - it.matches("\\A\\p{ASCII}*\\z".toRegex()) - } - ?: run { - // Use appPackageName instead of appName if appName contains any non-ASCII character - appPackageName - } - val appVersion = tryOrNull { pm.getPackageInfo(context.applicationContext.packageName, 0).versionName } - - if (appName.isNullOrEmpty() || appVersion.isNullOrEmpty()) { - userAgent = tryOrNull { System.getProperty("http.agent") } ?: ("Java" + System.getProperty("java.version")) - return - } - - val deviceManufacturer = Build.MANUFACTURER - val deviceModel = Build.MODEL - val androidVersion = Build.VERSION.RELEASE - val deviceBuildId = Build.DISPLAY - val matrixSdkVersion = BuildConfig.SDK_VERSION - - userAgent = buildString { - append(appName) - append("/") - append(appVersion) - append(" (") - append(deviceManufacturer) - append(" ") - append(deviceModel) - append("; ") - append("Android ") - append(androidVersion) - append("; ") - append(deviceBuildId) - append("; ") - append("Flavour ") - append(flavorDescription) - append("; ") - append("MatrixAndroidSdk2 ") - append(matrixSdkVersion) - append(")") - } + userAgent = computeUserAgentUseCase.execute(context, matrixConfiguration.applicationFlavor) } } From 42983f5ce458b2ef515389b4ca0d259bc42214b0 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Fri, 23 Sep 2022 15:55:02 +0300 Subject: [PATCH 6/7] Write unit test for computing user agent user case. --- .../network/ComputeUserAgentUseCase.kt | 12 +- .../network/ComputeUserAgentUseCaseTest.kt | 149 ++++++++++++++++++ 2 files changed, 155 insertions(+), 6 deletions(-) create mode 100644 matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/network/ComputeUserAgentUseCaseTest.kt diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ComputeUserAgentUseCase.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ComputeUserAgentUseCase.kt index 47256a5a94..64696ca298 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ComputeUserAgentUseCase.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ComputeUserAgentUseCase.kt @@ -40,14 +40,10 @@ class ComputeUserAgentUseCase @Inject constructor() { it.matches("\\A\\p{ASCII}*\\z".toRegex()) } ?: run { - // Use appPackageName instead of appName if appName contains any non-ASCII character + // Use appPackageName instead of appName if appName is null or contains any non-ASCII character appPackageName } - val appVersion = tryOrNull { pm.getPackageInfo(context.applicationContext.packageName, 0).versionName } - - if (appName.isNullOrEmpty() || appVersion.isNullOrEmpty()) { - return tryOrNull { System.getProperty("http.agent") } ?: ("Java" + System.getProperty("java.version")) - } + val appVersion = tryOrNull { pm.getPackageInfo(context.applicationContext.packageName, 0).versionName } ?: FALLBACK_APP_VERSION val deviceManufacturer = Build.MANUFACTURER val deviceModel = Build.MODEL @@ -77,4 +73,8 @@ class ComputeUserAgentUseCase @Inject constructor() { append(")") } } + + companion object { + const val FALLBACK_APP_VERSION = "0.0.0" + } } diff --git a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/network/ComputeUserAgentUseCaseTest.kt b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/network/ComputeUserAgentUseCaseTest.kt new file mode 100644 index 0000000000..77f432a70a --- /dev/null +++ b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/network/ComputeUserAgentUseCaseTest.kt @@ -0,0 +1,149 @@ +/* + * Copyright 2022 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.internal.network + +import android.content.Context +import android.content.pm.ApplicationInfo +import android.content.pm.PackageInfo +import android.content.pm.PackageManager +import android.os.Build +import io.mockk.every +import io.mockk.mockk +import org.amshove.kluent.shouldBeEqualTo +import org.junit.Before +import org.junit.Test +import org.matrix.android.sdk.BuildConfig +import java.lang.Exception + +private const val A_PACKAGE_NAME = "org.matrix.sdk" +private const val AN_APP_NAME = "Element" +private const val A_NON_ASCII_APP_NAME = "Élement" +private const val AN_APP_VERSION = "1.5.1" +private const val A_FLAVOUR = "GooglePlay" + +class ComputeUserAgentUseCaseTest { + + private val context = mockk() + private val packageManager = mockk() + private val applicationInfo = mockk() + private val packageInfo = mockk() + + private val computeUserAgentUseCase = ComputeUserAgentUseCase() + + @Before + fun setUp() { + every { context.applicationContext } returns context + every { context.packageName } returns A_PACKAGE_NAME + every { context.packageManager } returns packageManager + every { packageManager.getApplicationInfo(any(), any()) } returns applicationInfo + every { packageManager.getPackageInfo(any(), any()) } returns packageInfo + } + + @Test + fun `given a non-null app name and app version when computing user agent then returns expected user agent`() { + // Given + givenAppName(AN_APP_NAME) + givenAppVersion(AN_APP_VERSION) + + // When + val result = computeUserAgentUseCase.execute(context, A_FLAVOUR) + + // Then + val expectedUserAgent = constructExpectedUserAgent(AN_APP_NAME, AN_APP_VERSION) + result shouldBeEqualTo expectedUserAgent + } + + @Test + fun `given a null app name when computing user agent then returns user agent with package name instead of app name`() { + // Given + givenAppName(null) + givenAppVersion(AN_APP_VERSION) + + // When + val result = computeUserAgentUseCase.execute(context, A_FLAVOUR) + + // Then + val expectedUserAgent = constructExpectedUserAgent(A_PACKAGE_NAME, AN_APP_VERSION) + result shouldBeEqualTo expectedUserAgent + } + + @Test + fun `given a non-ascii app name when computing user agent then returns user agent with package name instead of app name`() { + // Given + givenAppName(A_NON_ASCII_APP_NAME) + givenAppVersion(AN_APP_VERSION) + + // When + val result = computeUserAgentUseCase.execute(context, A_FLAVOUR) + + // Then + val expectedUserAgent = constructExpectedUserAgent(A_PACKAGE_NAME, AN_APP_VERSION) + result shouldBeEqualTo expectedUserAgent + } + + @Test + fun `given a null app version when computing user agent then returns user agent with a fallback app version`() { + // Given + givenAppName(AN_APP_NAME) + givenAppVersion(null) + + // When + val result = computeUserAgentUseCase.execute(context, A_FLAVOUR) + + // Then + val expectedUserAgent = constructExpectedUserAgent(AN_APP_NAME, ComputeUserAgentUseCase.FALLBACK_APP_VERSION) + result shouldBeEqualTo expectedUserAgent + } + + private fun constructExpectedUserAgent(appName: String, appVersion: String): String { + return buildString { + append(appName) + append("/") + append(appVersion) + append(" (") + append(Build.MANUFACTURER) + append(" ") + append(Build.MODEL) + append("; ") + append("Android ") + append(Build.VERSION.RELEASE) + append("; ") + append(Build.DISPLAY) + append("; ") + append("Flavour ") + append(A_FLAVOUR) + append("; ") + append("MatrixAndroidSdk2 ") + append(BuildConfig.SDK_VERSION) + append(")") + } + } + + private fun givenAppName(deviceName: String?) { + if (deviceName == null) { + every { packageManager.getApplicationLabel(any()) } throws Exception("Cannot retrieve application name") + } else if (!deviceName.matches("\\A\\p{ASCII}*\\z".toRegex())) { + every { packageManager.getApplicationLabel(any()) } returns A_PACKAGE_NAME + } else { + every { packageManager.getApplicationLabel(any()) } returns deviceName + } + } + + private fun givenAppVersion(appVersion: String?) { + packageInfo.versionName = appVersion + } +} From 0f0ec54ed1264eab882e98abc98d38ad71f0d7dc Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Thu, 29 Sep 2022 12:20:01 +0300 Subject: [PATCH 7/7] Code review fixes. --- changelog.d/{7209.feature => 7209.sdk} | 0 .../sdk/internal/network/ComputeUserAgentUseCase.kt | 7 ++++--- .../android/sdk/internal/network/UserAgentHolder.kt | 4 +--- .../internal/network/ComputeUserAgentUseCaseTest.kt | 10 +++++----- 4 files changed, 10 insertions(+), 11 deletions(-) rename changelog.d/{7209.feature => 7209.sdk} (100%) diff --git a/changelog.d/7209.feature b/changelog.d/7209.sdk similarity index 100% rename from changelog.d/7209.feature rename to changelog.d/7209.sdk diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ComputeUserAgentUseCase.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ComputeUserAgentUseCase.kt index 64696ca298..6eb4d5b104 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ComputeUserAgentUseCase.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ComputeUserAgentUseCase.kt @@ -22,16 +22,17 @@ import org.matrix.android.sdk.BuildConfig import org.matrix.android.sdk.api.extensions.tryOrNull import javax.inject.Inject -class ComputeUserAgentUseCase @Inject constructor() { +class ComputeUserAgentUseCase @Inject constructor( + private val context: Context, +) { /** * Create an user agent with the application version. * Ex: Element/1.5.0 (Xiaomi Mi 9T; Android 11; RKQ1.200826.002; Flavour GooglePlay; MatrixAndroidSdk2 1.5.0) * - * @param context the context * @param flavorDescription the flavor description */ - fun execute(context: Context, flavorDescription: String): String { + fun execute(flavorDescription: String): String { val appPackageName = context.applicationContext.packageName val pm = context.packageManager diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/UserAgentHolder.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/UserAgentHolder.kt index 9383932cc7..4e83261277 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/UserAgentHolder.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/UserAgentHolder.kt @@ -16,14 +16,12 @@ package org.matrix.android.sdk.internal.network -import android.content.Context import org.matrix.android.sdk.api.MatrixConfiguration import org.matrix.android.sdk.internal.di.MatrixScope import javax.inject.Inject @MatrixScope internal class UserAgentHolder @Inject constructor( - context: Context, matrixConfiguration: MatrixConfiguration, computeUserAgentUseCase: ComputeUserAgentUseCase, ) { @@ -32,6 +30,6 @@ internal class UserAgentHolder @Inject constructor( private set init { - userAgent = computeUserAgentUseCase.execute(context, matrixConfiguration.applicationFlavor) + userAgent = computeUserAgentUseCase.execute(matrixConfiguration.applicationFlavor) } } diff --git a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/network/ComputeUserAgentUseCaseTest.kt b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/network/ComputeUserAgentUseCaseTest.kt index 77f432a70a..9ed6f28d7e 100644 --- a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/network/ComputeUserAgentUseCaseTest.kt +++ b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/network/ComputeUserAgentUseCaseTest.kt @@ -42,7 +42,7 @@ class ComputeUserAgentUseCaseTest { private val applicationInfo = mockk() private val packageInfo = mockk() - private val computeUserAgentUseCase = ComputeUserAgentUseCase() + private val computeUserAgentUseCase = ComputeUserAgentUseCase(context) @Before fun setUp() { @@ -60,7 +60,7 @@ class ComputeUserAgentUseCaseTest { givenAppVersion(AN_APP_VERSION) // When - val result = computeUserAgentUseCase.execute(context, A_FLAVOUR) + val result = computeUserAgentUseCase.execute(A_FLAVOUR) // Then val expectedUserAgent = constructExpectedUserAgent(AN_APP_NAME, AN_APP_VERSION) @@ -74,7 +74,7 @@ class ComputeUserAgentUseCaseTest { givenAppVersion(AN_APP_VERSION) // When - val result = computeUserAgentUseCase.execute(context, A_FLAVOUR) + val result = computeUserAgentUseCase.execute(A_FLAVOUR) // Then val expectedUserAgent = constructExpectedUserAgent(A_PACKAGE_NAME, AN_APP_VERSION) @@ -88,7 +88,7 @@ class ComputeUserAgentUseCaseTest { givenAppVersion(AN_APP_VERSION) // When - val result = computeUserAgentUseCase.execute(context, A_FLAVOUR) + val result = computeUserAgentUseCase.execute(A_FLAVOUR) // Then val expectedUserAgent = constructExpectedUserAgent(A_PACKAGE_NAME, AN_APP_VERSION) @@ -102,7 +102,7 @@ class ComputeUserAgentUseCaseTest { givenAppVersion(null) // When - val result = computeUserAgentUseCase.execute(context, A_FLAVOUR) + val result = computeUserAgentUseCase.execute(A_FLAVOUR) // Then val expectedUserAgent = constructExpectedUserAgent(AN_APP_NAME, ComputeUserAgentUseCase.FALLBACK_APP_VERSION)