Skip to content

Commit

Permalink
Using Material3 color schemes to theme Mobile SDK activities
Browse files Browse the repository at this point in the history
Providing a way for the application to provide its own color schemes
  • Loading branch information
wmathurin committed Feb 4, 2025
1 parent c0e2660 commit 5b18ebe
Show file tree
Hide file tree
Showing 6 changed files with 32 additions and 140 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,9 @@ import android.view.View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR
import android.view.View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
import android.webkit.CookieManager
import android.webkit.URLUtil.isHttpsUrl
import androidx.compose.material3.ColorScheme
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.lightColorScheme
import androidx.core.content.ContextCompat.RECEIVER_EXPORTED
import androidx.core.content.ContextCompat.RECEIVER_NOT_EXPORTED
import androidx.core.content.ContextCompat.registerReceiver
Expand Down Expand Up @@ -391,6 +394,20 @@ open class SalesforceSDKManager protected constructor(
@set:Synchronized
var theme = SYSTEM_DEFAULT

/**
* The light color scheme to use in Mobile SDK screens
* Defaults to androidx.compose.Material3.lightColorScheme()
*/
@set:Synchronized
var lightColorScheme = lightColorScheme()

/**
* The dark color scheme to use in Mobile SDK screens
* Defaults to androidx.compose.Material3.darkColorScheme()
*/
@set:Synchronized
var darkColorScheme = lightColorScheme()

/**
* The app name to use in [.getUserAgent]. This string must only contain
* printable ASCII characters.
Expand Down Expand Up @@ -1456,6 +1473,12 @@ open class SalesforceSDKManager protected constructor(
else -> theme == DARK
}

/**
* @return the color scheme to use for Mobile SDK screens
*/
val colorScheme: ColorScheme
get() = if(isDarkTheme) darkColorScheme else lightColorScheme

/**
* Sets the system status and navigation bars as visible regardless of style
* and OS dark theme states.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
Expand All @@ -57,8 +58,6 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import androidx.compose.ui.viewinterop.AndroidView
import com.salesforce.androidsdk.app.SalesforceSDKManager
import com.salesforce.androidsdk.ui.theme.SalesforceTheme
import com.salesforce.androidsdk.ui.theme.SalesforceThemeType
import com.salesforce.androidsdk.util.LogUtil
import com.salesforce.androidsdk.util.SalesforceSDKLogger
import com.salesforce.androidsdk.auth.idp.interfaces.IDPAuthCodeActivity as IDPAuthCodeActivityInterface
Expand All @@ -82,12 +81,9 @@ class IDPAuthCodeActivity : ComponentActivity(), IDPAuthCodeActivityInterface {
// Make navigation and status visible always
SalesforceSDKManager.getInstance().setViewNavigationVisibility(this)

// Set theme
val isDarkTheme = SalesforceSDKManager.getInstance().isDarkTheme
val themeType:SalesforceThemeType = if (isDarkTheme) SalesforceThemeType.DarkLogin else SalesforceThemeType.Light

// Set content
setContent {
SalesforceTheme(themeType = themeType) {
MaterialTheme(colorScheme = SalesforceSDKManager.getInstance().colorScheme) {
IDPAuthCodeScreen(intent = intent)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.runtime.Composable
Expand All @@ -51,8 +52,6 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import com.salesforce.androidsdk.R
import com.salesforce.androidsdk.app.SalesforceSDKManager
import com.salesforce.androidsdk.ui.theme.SalesforceTheme
import com.salesforce.androidsdk.ui.theme.SalesforceThemeType

class DevInfoActivity : ComponentActivity() {

Expand All @@ -63,12 +62,8 @@ class DevInfoActivity : ComponentActivity() {

val devInfoList = prepareListData(SalesforceSDKManager.getInstance().devSupportInfos)

// Set theme
val isDarkTheme = SalesforceSDKManager.getInstance().isDarkTheme
val themeType: SalesforceThemeType = if (isDarkTheme) SalesforceThemeType.Dark else SalesforceThemeType.Light

setContent {
SalesforceTheme(themeType = themeType) {
MaterialTheme(colorScheme = SalesforceSDKManager.getInstance().colorScheme) {
DevInfoScreen(devInfoList)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ import androidx.biometric.BiometricPrompt.AuthenticationResult
import androidx.biometric.BiometricPrompt.PromptInfo
import androidx.browser.customtabs.CustomTabColorSchemeParams
import androidx.browser.customtabs.CustomTabsIntent
import androidx.compose.material3.MaterialTheme
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.toArgb
import androidx.core.content.ContextCompat.getMainExecutor
Expand Down Expand Up @@ -133,8 +134,6 @@ import com.salesforce.androidsdk.ui.OAuthWebviewHelper.Companion.HTTP_ERROR_RESP
import com.salesforce.androidsdk.ui.OAuthWebviewHelper.Companion.RESPONSE_ERROR_DESCRIPTION_INTENT
import com.salesforce.androidsdk.ui.OAuthWebviewHelper.Companion.RESPONSE_ERROR_INTENT
import com.salesforce.androidsdk.ui.components.LoginView
import com.salesforce.androidsdk.ui.theme.SalesforceTheme
import com.salesforce.androidsdk.ui.theme.SalesforceThemeType
import com.salesforce.androidsdk.util.EventsObservable
import com.salesforce.androidsdk.util.EventsObservable.EventType.AuthWebViewPageFinished
import com.salesforce.androidsdk.util.EventsObservable.EventType.LoginActivityCreateComplete
Expand Down Expand Up @@ -228,13 +227,9 @@ open class LoginActivity: FragmentActivity() {
window.setFlags(FLAG_SECURE, FLAG_SECURE)
}

// Set theme
val isDarkTheme = SalesforceSDKManager.getInstance().isDarkTheme
val themeType: SalesforceThemeType = if (isDarkTheme) SalesforceThemeType.DarkLogin else SalesforceThemeType.Light

// Set content
setContent {
SalesforceTheme(themeType = themeType) {
MaterialTheme(colorScheme = SalesforceSDKManager.getInstance().colorScheme) {
LoginView()
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ import androidx.compose.material3.AlertDialog
import androidx.compose.material3.CenterAlignedTopAppBar
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.MaterialTheme.colorScheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
Expand All @@ -52,11 +53,8 @@ import com.salesforce.androidsdk.R.string.sf__manage_space_confirmation
import com.salesforce.androidsdk.R.string.sf__manage_space_logout_no
import com.salesforce.androidsdk.R.string.sf__manage_space_logout_yes
import com.salesforce.androidsdk.R.string.sf__manage_space_title
import com.salesforce.androidsdk.app.SalesforceSDKManager
import com.salesforce.androidsdk.app.SalesforceSDKManager.Companion.getInstance
import com.salesforce.androidsdk.auth.OAuth2.LogoutReason.USER_LOGOUT
import com.salesforce.androidsdk.ui.theme.SalesforceTheme
import com.salesforce.androidsdk.ui.theme.SalesforceThemeType

/**
* An activity which prompts the user to clear storage and informs the user that
Expand All @@ -74,13 +72,9 @@ open class ManageSpaceActivity : ComponentActivity() {

super.onCreate(savedInstanceState)

// Set theme
val isDarkTheme = SalesforceSDKManager.getInstance().isDarkTheme
val themeType: SalesforceThemeType = if (isDarkTheme) SalesforceThemeType.Dark else SalesforceThemeType.Light

// Set content
setContent {
SalesforceTheme(themeType = themeType) {
MaterialTheme(colorScheme = getInstance().colorScheme) {
ManageSpaceView()
}
}
Expand Down

This file was deleted.

0 comments on commit 5b18ebe

Please sign in to comment.