diff --git a/app/src/main/java/com/hbb20/androidcountrypicker/compose/ComposeDemoActivity.kt b/app/src/main/java/com/hbb20/androidcountrypicker/compose/ComposeDemoActivity.kt index 97f7cdb..af3c7c9 100644 --- a/app/src/main/java/com/hbb20/androidcountrypicker/compose/ComposeDemoActivity.kt +++ b/app/src/main/java/com/hbb20/androidcountrypicker/compose/ComposeDemoActivity.kt @@ -36,6 +36,7 @@ import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.hbb20.androidcountrypicker.R +import com.hbb20.androidcountrypicker.compose.theme.DemoTheme import com.hbb20.contrypicker.flagpack1.FlagPack1 import com.hbb20.countrypicker.compose.CountryFlagLayout import com.hbb20.countrypicker.compose.CountryPicker @@ -51,7 +52,7 @@ class ComposeDemoActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { - MaterialTheme { + DemoTheme { // A surface container using the 'background' color from the theme Surface( modifier = Modifier.fillMaxSize(), @@ -157,13 +158,22 @@ class ComposeDemoActivity : ComponentActivity() { flagProvider = CPFlagImageProvider( // map of alpha2 to drawable resource id alpha2ToFlag = mapOf( - "IN" to R.drawable.ic_flag, - "US" to R.drawable.ic_flag, - "GB" to R.drawable.ic_flag, + "IN" to R.drawable.ic_flag_green_outlint, + "gb" to R.drawable.ic_flag_yellow, + "US" to R.drawable.ic_flag_blue, ), // drawable resource id for missing flag missingFlagPlaceHolder = R.drawable.ic_flag - ) + ), + pickerDialog = { cpDataStore, flagProvider, onDismissRequest, onCountrySelected -> + CountryPickerDialog( + cpDataStore = cpDataStore, + flagProvider = flagProvider, + onDismissRequest = onDismissRequest, + onCountrySelected = onCountrySelected, + quickAccessCountries = listOf("IN", "us", "GB"), + ) + } ) { setCountryCode(it?.alpha2) } @@ -215,7 +225,7 @@ class ComposeDemoActivity : ComponentActivity() { ) } - if(showPickerDialog){ + if (showPickerDialog) { CountryPickerDialog( cpDataStore = cpDataStore, flagProvider = flagProvider, @@ -359,21 +369,24 @@ class ComposeDemoActivity : ComponentActivity() { modifier = Modifier .fillMaxWidth() .background(MaterialTheme.colors.surface) - .padding(16.dp) + .padding(16.dp), + backgroundColor = MaterialTheme.colors.surface ) { - Column(modifier = Modifier.padding(16.dp)) { - Text( - text = title, - style = MaterialTheme.typography.subtitle1, - color = Color.Black - ) - Text( - text = body, - style = MaterialTheme.typography.body2, - color = Color.DarkGray - ) - Spacer(modifier = Modifier.padding(8.dp)) - countryPickerLayout() + Surface(color = MaterialTheme.colors.surface) { + Column(modifier = Modifier.padding(16.dp)) { + Text( + text = title, + style = MaterialTheme.typography.subtitle1, + color = MaterialTheme.colors.onSurface + ) + Text( + text = body, + style = MaterialTheme.typography.body2, + color = MaterialTheme.colors.onSurface + ) + Spacer(modifier = Modifier.padding(8.dp)) + countryPickerLayout() + } } } } diff --git a/app/src/main/java/com/hbb20/androidcountrypicker/compose/theme/Colors.kt b/app/src/main/java/com/hbb20/androidcountrypicker/compose/theme/Colors.kt new file mode 100644 index 0000000..589665b --- /dev/null +++ b/app/src/main/java/com/hbb20/androidcountrypicker/compose/theme/Colors.kt @@ -0,0 +1,50 @@ +package com.hbb20.androidcountrypicker.compose.theme + +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.material.MaterialTheme +import androidx.compose.material.darkColors +import androidx.compose.material.lightColors +import androidx.compose.runtime.Composable +import androidx.compose.ui.graphics.Color + + +@Composable +fun DemoTheme( + darkTheme: Boolean = isSystemInDarkTheme(), + content: @Composable () -> Unit +) { + MaterialTheme( + colors = if (darkTheme) darkThemeColors else lightThemeColors, + content = content + ) +} + +val lightThemeColors = lightColors( + primary = Color(0xFF008577), + primaryVariant = Color(0xFF00574B), + secondary = Color(0xFF3F51B5), + secondaryVariant = Color(0xFF3F51B5), + onPrimary = Color(0xFFFFFFFF), + onSecondary = Color(0xFFFFFFFF), + error = Color(0xFFED5933), + onError = Color(0xFFFFFFFF), + background = Color(0xFFF4F4F7), + onBackground = Color(0xFF000000), + surface = Color(0xFFFFFFFF), + onSurface = Color(0xFF000000) +) + +val darkThemeColors = darkColors( + primary = Color(0xFF00E0C9), + primaryVariant = Color(0xFF00C7AB), + secondary = Color(0xFF3F51B5), + secondaryVariant = Color(0xFF3F51B5), + onPrimary = Color(0xFFFFFFFF), + onSecondary = Color(0xFFFFFFFF), + error = Color(0xFFED5933), + onError = Color(0xFFFFFFFF), + background = Color(0xFF000000), + onBackground = Color(0xFFFAFAFC), + surface = Color(0xFF292B2E), + onSurface = Color(0xFFFAFAFC) +) diff --git a/app/src/main/res/drawable/ic_flag_blue.xml b/app/src/main/res/drawable/ic_flag_blue.xml new file mode 100644 index 0000000..4ea8b2e --- /dev/null +++ b/app/src/main/res/drawable/ic_flag_blue.xml @@ -0,0 +1,6 @@ + + + diff --git a/app/src/main/res/drawable/ic_flag_green_outlint.xml b/app/src/main/res/drawable/ic_flag_green_outlint.xml new file mode 100644 index 0000000..5dd8f92 --- /dev/null +++ b/app/src/main/res/drawable/ic_flag_green_outlint.xml @@ -0,0 +1,12 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_flag_yellow.xml b/app/src/main/res/drawable/ic_flag_yellow.xml new file mode 100644 index 0000000..2198d8c --- /dev/null +++ b/app/src/main/res/drawable/ic_flag_yellow.xml @@ -0,0 +1,10 @@ + + + diff --git a/countrypicker/src/main/java/com/hbb20/countrypicker/compose/CountryPickerComposable.kt b/countrypicker/src/main/java/com/hbb20/countrypicker/compose/CountryPickerComposable.kt index a3eadb3..15cb1f3 100644 --- a/countrypicker/src/main/java/com/hbb20/countrypicker/compose/CountryPickerComposable.kt +++ b/countrypicker/src/main/java/com/hbb20/countrypicker/compose/CountryPickerComposable.kt @@ -351,6 +351,7 @@ private fun DefaultCountryPickerDialogContent( .fillMaxWidth(0.8f) .padding(16.dp), shape = RoundedCornerShape(16.dp), + backgroundColor = MaterialTheme.colors.surface, ) { val countryList = remember(cpDataStore) { cpDataStore.countryList @@ -439,7 +440,7 @@ private fun DefaultSearchField( BasicTextField( value = searchQuery, onValueChange = { setSearchQuery(it) }, - textStyle = MaterialTheme.typography.body1, + textStyle = MaterialTheme.typography.body1.copy(color = MaterialTheme.colors.onSurface), cursorBrush = SolidColor( TextFieldDefaults.outlinedTextFieldColors() .cursorColor(isError = false).value diff --git a/countrypicker/src/main/java/com/hbb20/countrypicker/flagprovider/CPFlagProvider.kt b/countrypicker/src/main/java/com/hbb20/countrypicker/flagprovider/CPFlagProvider.kt index 6d4c9a2..fd9b2ad 100644 --- a/countrypicker/src/main/java/com/hbb20/countrypicker/flagprovider/CPFlagProvider.kt +++ b/countrypicker/src/main/java/com/hbb20/countrypicker/flagprovider/CPFlagProvider.kt @@ -1,6 +1,7 @@ package com.hbb20.countrypicker.flagprovider import androidx.annotation.DrawableRes +import java.util.Locale abstract class CPFlagProvider @@ -18,14 +19,17 @@ class DefaultEmojiFlagProvider(val useEmojiCompat: Boolean = false) : CPFlagProv * other flags in this pack to maintain visual symmetry. */ class CPFlagImageProvider( - val alpha2ToFlag: Map, + alpha2ToFlag: Map, @DrawableRes val missingFlagPlaceHolder: Int ) : CPFlagProvider() { + private val flagMap = alpha2ToFlag.map { it.key.uppercase(Locale.ENGLISH) to it.value }.toMap() @DrawableRes fun getFlag(alpha2Code: String): Int { - return alpha2ToFlag.getOrElse( - getNormalizedAlpha2ForFlag(alpha2Code) + val upperCaseAlpha2Code = alpha2Code.uppercase(Locale.ENGLISH) + val flag = flagMap[upperCaseAlpha2Code] + return flag ?: flagMap.getOrElse( + getNormalizedAlpha2ForFlag(upperCaseAlpha2Code) ) { missingFlagPlaceHolder } } @@ -35,12 +39,12 @@ class CPFlagImageProvider( * This function will convert "UM" to "US" */ private fun getNormalizedAlpha2ForFlag(alpha2Code: String): String { - return when (alpha2Code.toLowerCase()) { - "um" -> "us" - "sj" -> "no" - "bv" -> "no" - "hm" -> "au" - else -> alpha2Code.toLowerCase() + return when (alpha2Code.uppercase(Locale.ENGLISH)) { + "UM" -> "US" + "SJ" -> "NO" + "BV" -> "NO" + "HM" -> "AU" + else -> alpha2Code.uppercase(Locale.ENGLISH) } } } diff --git a/countrypicker/src/main/java/com/hbb20/countrypicker/models/CPLanguage.kt b/countrypicker/src/main/java/com/hbb20/countrypicker/models/CPLanguage.kt index 4724e40..a2ab75c 100644 --- a/countrypicker/src/main/java/com/hbb20/countrypicker/models/CPLanguage.kt +++ b/countrypicker/src/main/java/com/hbb20/countrypicker/models/CPLanguage.kt @@ -40,5 +40,5 @@ enum class CPLanguage( UZBEK("uz"), VIETNAMESE("vi"); - val translationFileName: String by lazy { "cp_${name.toLowerCase(Locale.ROOT)}.xml" } + val translationFileName: String by lazy { "cp_${name.lowercase(Locale.ROOT)}.xml" } } diff --git a/countrypicker/src/main/java/com/hbb20/countrypicker/view/CPViewHelper.kt b/countrypicker/src/main/java/com/hbb20/countrypicker/view/CPViewHelper.kt index d53ee55..cbb215d 100644 --- a/countrypicker/src/main/java/com/hbb20/countrypicker/view/CPViewHelper.kt +++ b/countrypicker/src/main/java/com/hbb20/countrypicker/view/CPViewHelper.kt @@ -77,7 +77,7 @@ class CPViewHelper( val detectedAlpha2 = if (isInEditMode) "US" else countryDetector.detectCountry(countryDetectSources) val detectedCountry = cpDataStore.countryList.firstOrNull { - it.alpha2.toLowerCase(Locale.ROOT) == detectedAlpha2?.toLowerCase( + it.alpha2.lowercase(Locale.ROOT) == detectedAlpha2?.lowercase( Locale.ROOT ) }