Skip to content

Commit b39adbd

Browse files
@W-15548296: [MSDK Android] NetworkOnMainThreadException In App Created From Hybrid Local Template (#2552)
1 parent 1a9e447 commit b39adbd

2 files changed

Lines changed: 28 additions & 19 deletions

File tree

libs/SalesforceHybrid/src/com/salesforce/androidsdk/phonegap/ui/SalesforceDroidGapActivity.kt

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
*/
2727
package com.salesforce.androidsdk.phonegap.ui
2828

29-
import android.net.Uri.parse
3029
import android.os.Bundle
3130
import android.view.KeyEvent
3231
import android.webkit.URLUtil.isHttpsUrl
@@ -57,7 +56,11 @@ import com.salesforce.androidsdk.util.AuthConfigUtil.MyDomainAuthConfig
5756
import com.salesforce.androidsdk.util.AuthConfigUtil.getMyDomainAuthConfig
5857
import com.salesforce.androidsdk.util.EventsObservable
5958
import com.salesforce.androidsdk.util.EventsObservable.EventType.GapWebViewCreateComplete
59+
import com.salesforce.androidsdk.util.SalesforceSDKLogger
60+
import kotlinx.coroutines.CoroutineScope
61+
import kotlinx.coroutines.Dispatchers.Default
6062
import kotlinx.coroutines.launch
63+
import kotlinx.coroutines.withTimeout
6164
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
6265
import org.apache.cordova.CallbackContext
6366
import org.apache.cordova.CordovaActivity
@@ -581,21 +584,26 @@ open class SalesforceDroidGapActivity : CordovaActivity(), SalesforceActivityInt
581584
}
582585

583586
private fun doAuthConfig() {
584-
val loginServer = SalesforceHybridSDKManager
585-
.getInstance()
586-
.loginServerManager
587-
.selectedLoginServer
588-
?.url
589-
?.trim { it <= ' ' } ?: return
590-
591-
if (loginServer == PRODUCTION_LOGIN_URL || loginServer == SANDBOX_LOGIN_URL || !isHttpsUrl(loginServer) || parse(loginServer) == null
592-
) {
593-
return
594-
}
595-
596-
authConfig = getMyDomainAuthConfig(loginServer)
587+
CoroutineScope(Default).launch {
588+
runCatching {
589+
withTimeout(5000L) {
590+
val loginServer = SalesforceHybridSDKManager
591+
.getInstance()
592+
.loginServerManager
593+
.selectedLoginServer
594+
?.url
595+
?.trim { it <= ' ' } ?: return@withTimeout
596+
597+
if (loginServer == PRODUCTION_LOGIN_URL || loginServer == SANDBOX_LOGIN_URL || !isHttpsUrl(loginServer) || loginServer.toHttpUrlOrNull() == null) {
598+
return@withTimeout
599+
}
597600

598-
return
601+
authConfig = getMyDomainAuthConfig(loginServer)
602+
}
603+
}.onFailure { e ->
604+
SalesforceSDKLogger.e(TAG, "Exception occurred while fetching authentication configuration", e)
605+
}
606+
}
599607
}
600608

601609
companion object {

libs/SalesforceSDK/src/com/salesforce/androidsdk/app/SalesforceSDKManager.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -564,6 +564,7 @@ open class SalesforceSDKManager protected constructor(
564564
* license
565565
* @return The Native Login Manager.
566566
*/
567+
@Suppress("unused")
567568
fun useNativeLogin(
568569
consumerKey: String,
569570
callbackUrl: String,
@@ -1399,12 +1400,12 @@ open class SalesforceSDKManager protected constructor(
13991400
* Determines whether the device has a compact screen.
14001401
* Taken directly from https://developer.android.com/guide/topics/large-screens/large-screen-cookbook#kotlin
14011402
*/
1402-
fun compactScreen(activity: Activity) : Boolean {
1403+
fun compactScreen(activity: Activity): Boolean {
14031404
val metrics = WindowMetricsCalculator.getOrCreate().computeMaximumWindowMetrics(activity)
14041405
val width = metrics.bounds.width()
14051406
val height = metrics.bounds.height()
14061407
val density = activity.resources.displayMetrics.density
1407-
val windowSizeClass = WindowSizeClass.compute(width/density, height/density)
1408+
val windowSizeClass = WindowSizeClass.compute(width / density, height / density)
14081409

14091410
return windowSizeClass.windowWidthSizeClass == WindowWidthSizeClass.COMPACT ||
14101411
windowSizeClass.windowHeightSizeClass == WindowHeightSizeClass.COMPACT
@@ -1443,6 +1444,7 @@ open class SalesforceSDKManager protected constructor(
14431444
* TODO: Remove the suppress lint annotation once the Android context is no longer retained.
14441445
*/
14451446
@JvmField
1447+
@SuppressLint("StaticFieldLeak")
14461448
protected var INSTANCE: SalesforceSDKManager? = null
14471449

14481450
/** The current version of this SDK */
@@ -1749,8 +1751,7 @@ open class SalesforceSDKManager protected constructor(
17491751
withTimeout(5000L) {
17501752
val loginServer = loginServerManager.selectedLoginServer?.url?.trim { it <= ' ' } ?: return@withTimeout
17511753

1752-
if (loginServer == PRODUCTION_LOGIN_URL || loginServer == SANDBOX_LOGIN_URL || !isHttpsUrl(loginServer) || loginServer.toHttpUrlOrNull() == null
1753-
) {
1754+
if (loginServer == PRODUCTION_LOGIN_URL || loginServer == SANDBOX_LOGIN_URL || !isHttpsUrl(loginServer) || loginServer.toHttpUrlOrNull() == null) {
17541755
setBrowserLoginEnabled(
17551756
browserLoginEnabled = false,
17561757
shareBrowserSessionEnabled = false

0 commit comments

Comments
 (0)