Skip to content
This repository was archived by the owner on Feb 4, 2025. It is now read-only.

Commit 9a51a9d

Browse files
authored
Merge pull request #3101 from wordpress-mobile/revert-3067-fix-useragent-anr
Revert "[ANR fix] Move UserAgent initialization to a background thread"
2 parents fe905a6 + 76b49de commit 9a51a9d

File tree

3 files changed

+14
-52
lines changed

3 files changed

+14
-52
lines changed

example/src/main/java/org/wordpress/android/fluxc/example/di/AppConfigModule.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515

1616
import java.lang.reflect.Field;
1717

18-
import javax.inject.Singleton;
19-
2018
import dagger.Module;
2119
import dagger.Provides;
2220

@@ -43,7 +41,6 @@ public AppSecrets provideAppSecrets() {
4341
}
4442

4543
@Provides
46-
@Singleton
4744
public UserAgent provideUserAgent(Context appContext) {
4845
return new UserAgent(appContext, "fluxc-example-android");
4946
}

fluxc/src/main/java/org/wordpress/android/fluxc/network/UserAgent.kt

Lines changed: 12 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -2,45 +2,13 @@ package org.wordpress.android.fluxc.network
22

33
import android.content.Context
44
import android.webkit.WebSettings
5-
import kotlinx.coroutines.CoroutineDispatcher
6-
import kotlinx.coroutines.CoroutineScope
7-
import kotlinx.coroutines.Dispatchers
8-
import kotlinx.coroutines.launch
9-
import org.wordpress.android.util.AppLog
105
import org.wordpress.android.util.PackageUtils
116

12-
@Suppress("MemberNameEqualsClassName")
13-
class UserAgent @JvmOverloads constructor(
14-
private val appContext: Context?,
15-
private val appName: String,
16-
bgDispatcher: CoroutineDispatcher = Dispatchers.Default
17-
) {
18-
/**
19-
* User-Agent string when making HTTP connections, for both API traffic and WebViews.
20-
* Appends "[appName]/version" to WebView's default User-Agent string for the webservers
21-
* to get the full feature list of the browser and serve content accordingly, e.g.:
22-
* "Mozilla/5.0 (Linux; Android 6.0; Android SDK built for x86_64 Build/MASTER; wv)
23-
* AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/44.0.2403.119 Mobile Safari/537.36
24-
* wp-android/4.7"
25-
*/
26-
var userAgent: String = getAppNameVersion()
27-
private set
28-
29-
private val coroutineScope = CoroutineScope(bgDispatcher)
7+
@SuppressWarnings("SwallowedException", "TooGenericExceptionCaught", "MemberNameEqualsClassName")
8+
class UserAgent(appContext: Context?, appName: String) {
9+
val userAgent: String
3010

3111
init {
32-
coroutineScope.launch {
33-
initUserAgent()
34-
}
35-
}
36-
37-
/**
38-
* Initializes the User-Agent string.
39-
* This method will be called asynchronously to avoid blocking the main thread,
40-
* because `WebSettings.getDefaultUserAgent()` can be slow.
41-
*/
42-
@Suppress("TooGenericExceptionCaught", "SwallowedException")
43-
private fun initUserAgent() {
4412
// Device's default User-Agent string.
4513
// E.g.:
4614
// "Mozilla/5.0 (Linux; Android 6.0; Android SDK built for x86_64 Build/MASTER; wv)
@@ -50,17 +18,17 @@ class UserAgent @JvmOverloads constructor(
5018
} catch (e: RuntimeException) {
5119
// `getDefaultUserAgent()` can throw an Exception
5220
// see: https://github.com/wordpress-mobile/WordPress-Android/issues/20147#issuecomment-1961238187
53-
AppLog.e(
54-
AppLog.T.UTILS,
55-
"Error getting the user's default User-Agent, ${e.stackTraceToString()}"
56-
)
57-
return
21+
""
5822
}
59-
60-
userAgent = "$defaultUserAgent ${getAppNameVersion()}"
23+
// User-Agent string when making HTTP connections, for both API traffic and WebViews.
24+
// Appends "wp-android/version" to WebView's default User-Agent string for the webservers
25+
// to get the full feature list of the browser and serve content accordingly, e.g.:
26+
// "Mozilla/5.0 (Linux; Android 6.0; Android SDK built for x86_64 Build/MASTER; wv)
27+
// AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/44.0.2403.119 Mobile Safari/537.36
28+
// wp-android/4.7"
29+
val appWithVersion = "$appName/${PackageUtils.getVersionName(appContext)}"
30+
userAgent = if (defaultUserAgent.isNotEmpty()) "$defaultUserAgent $appWithVersion" else appWithVersion
6131
}
6232

63-
private fun getAppNameVersion() = "$appName/${PackageUtils.getVersionName(appContext)}"
64-
6533
override fun toString(): String = userAgent
6634
}

fluxc/src/test/java/org/wordpress/android/fluxc/network/UserAgentTest.kt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package org.wordpress.android.fluxc.network
22

33
import android.webkit.WebSettings
4-
import kotlinx.coroutines.Dispatchers
54
import org.junit.Test
65
import org.junit.runner.RunWith
76
import org.mockito.Mockito.mockStatic
@@ -23,8 +22,7 @@ class UserAgentTest {
2322
fun testUserAgent() = withMockedPackageUtils {
2423
mockStatic(WebSettings::class.java).use {
2524
whenever(WebSettings.getDefaultUserAgent(context)).thenReturn(USER_AGENT)
26-
// Use the Unconfined dispatcher to allow the test to run synchronously
27-
val result = UserAgent(context, APP_NAME, bgDispatcher = Dispatchers.Unconfined)
25+
val result = UserAgent(context, APP_NAME)
2826
assertEquals("$USER_AGENT $APP_NAME/$APP_VERSION", result.toString())
2927
}
3028
}
@@ -33,8 +31,7 @@ class UserAgentTest {
3331
fun testDefaultUserAgentFailure() = withMockedPackageUtils {
3432
mockStatic(WebSettings::class.java).use {
3533
whenever(WebSettings.getDefaultUserAgent(context)).thenThrow(RuntimeException(""))
36-
// Use the Unconfined dispatcher to allow the test to run synchronously
37-
val result = UserAgent(context, APP_NAME, bgDispatcher = Dispatchers.Unconfined)
34+
val result = UserAgent(context, APP_NAME)
3835
assertEquals("$APP_NAME/$APP_VERSION", result.toString())
3936
}
4037
}

0 commit comments

Comments
 (0)