Skip to content

Commit

Permalink
Feat: Added support for custom dark and light colors in app settings.
Browse files Browse the repository at this point in the history
Description:
- This feature allows users to select custom colors for both the dark and light themes within the application settings.

Implementation Details:
- Created a settings interface with color pickers for both dark and light themes.
- Integrated the selected colors into the app's theme configuration.

Impact:
- Enhances user satisfaction by offering a more personalized app experience.
  • Loading branch information
HeCodes2Much committed Apr 28, 2024
1 parent c81b75c commit 3d40055
Show file tree
Hide file tree
Showing 8 changed files with 420 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -419,6 +419,48 @@ object Constants {
}
}

enum class DarkColors : EnumOption {
System,
Dracula,
Arc,
Nokto,
Breeze,
Catppuccino,
Nordic,
Yaru;

@Composable
override fun string(): String {
return when (this) {
System -> stringResource(R.string.lang_system)
Dracula -> stringResource(R.string.dracula)
Arc -> stringResource(R.string.arc)
Nokto -> stringResource(R.string.nokto)
Breeze -> stringResource(R.string.breeze)
Catppuccino -> stringResource(R.string.catppuccino)
Nordic -> stringResource(R.string.nordic)
Yaru -> stringResource(R.string.yaru)
}
}
}

enum class LightColors : EnumOption {
System,
Adwaita,
Catppuccino,
Nordic;

@Composable
override fun string(): String {
return when (this) {
System -> stringResource(R.string.lang_system)
Adwaita -> stringResource(R.string.adwaita)
Catppuccino -> stringResource(R.string.catppuccino)
Nordic -> stringResource(R.string.nordic)
}
}
}

const val URL_DUCK_SEARCH = "https://duck.co/?q="
const val URL_GOOGLE_SEARCH = "https://google.com/search?q="
const val URL_YAHOO_SEARCH = "https://search.yahoo.com/search?p="
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,8 @@ private const val APP_ALIAS = "APP_ALIAS"
private const val APP_ACTIVITY = "APP_ACTIVITY"
private const val APP_USAGE_STATS = "APP_USAGE_STATS"
private const val APP_OPACITY = "APP_OPACITY"
private const val APP_DARK_COLORS = "APP_DARK_COLORS"
private const val APP_LIGHT_COLORS = "APP_LIGHT_COLORS"
private const val APP_THEME = "APP_THEME"

private const val SHORT_SWIPE_UP = "SHORT_SWIPE_UP"
Expand Down Expand Up @@ -315,6 +317,30 @@ class Prefs(val context: Context) {
}
set(value) = prefs.edit().putString(APP_THEME, value.name).apply()

var appDarkColors: Constants.DarkColors
get() {
return try {
Constants.DarkColors.valueOf(
prefs.getString(APP_DARK_COLORS, Constants.DarkColors.System.name).toString()
)
} catch (_: Exception) {
Constants.DarkColors.System
}
}
set(value) = prefs.edit().putString(APP_DARK_COLORS, value.name).apply()

var appLightColors: Constants.LightColors
get() {
return try {
Constants.LightColors.valueOf(
prefs.getString(APP_LIGHT_COLORS, Constants.LightColors.System.name).toString()
)
} catch (_: Exception) {
Constants.LightColors.System
}
}
set(value) = prefs.edit().putString(APP_LIGHT_COLORS, value.name).apply()

var language: Constants.Language
get() {
return try {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,213 @@
package com.github.droidworksstudio.mlauncher.helper

import android.content.Context
import android.os.Build
import androidx.annotation.RequiresApi
import androidx.core.content.ContextCompat
import com.github.droidworksstudio.mlauncher.R
import com.github.droidworksstudio.mlauncher.data.Prefs

class Colors {
@RequiresApi(Build.VERSION_CODES.Q)
fun background(context: Context, prefs: Prefs): Int {
val opacity = getHexForOpacity(context, prefs)
return when (prefs.appTheme.name) {
"Dark" -> {
when (prefs.appDarkColors.name) {
"Dracula" -> {
getColorWithAccent(context, prefs, R.color.draculaBackground)
}
"Arc-Darker" -> {
getColorWithAccent(context, prefs, R.color.arcBackground)
}
"Adapta-Nokto" -> {
getColorWithAccent(context, prefs, R.color.noktoBackground)
}
"Breeze" -> {
getColorWithAccent(context, prefs, R.color.breezeBackground)
}
"Yaru" -> {
getColorWithAccent(context, prefs, R.color.yaruBackground)
}
"Nordic" -> {
getColorWithAccent(context, prefs, R.color.nordicDarkBackground)
}
"Catppuccino" -> {
getColorWithAccent(context, prefs, R.color.catppuccinoDarkBackground)
}
else -> {
opacity
}
}
}
"Light" -> {
when (prefs.appLightColors.name) {
"Adwaita" -> {
getColorWithAccent(context, prefs, R.color.adwaitaBackground)
}
"Nordic" -> {
getColorWithAccent(context, prefs, R.color.nordicLightBackground)
}
"Catppuccino" -> {
getColorWithAccent(context, prefs, R.color.catppuccinoLightBackground)
}
else -> {
opacity
}
}
}
else -> {
opacity
}
}
}

@RequiresApi(Build.VERSION_CODES.Q)
fun accents(context: Context, prefs: Prefs, accentNumber: Int): Int {
return when (prefs.appTheme.name) {
"Dark" -> {
when (prefs.appDarkColors.name) {
"Dracula" -> {
when (accentNumber) {
1 -> ContextCompat.getColor(context, R.color.draculaAccent1)
2 -> ContextCompat.getColor(context, R.color.draculaAccent2)
3 -> ContextCompat.getColor(context, R.color.draculaAccent3)
4 -> ContextCompat.getColor(context, R.color.draculaAccent4)
else -> ContextCompat.getColor(context, R.color.draculaAccent1)
}
}

"Arc" -> {
when (accentNumber) {
1 -> ContextCompat.getColor(context, R.color.arcAccent1)
2 -> ContextCompat.getColor(context, R.color.arcAccent2)
3 -> ContextCompat.getColor(context, R.color.arcAccent3)
4 -> ContextCompat.getColor(context, R.color.arcAccent4)
else -> ContextCompat.getColor(context, R.color.arcAccent1)
}
}

"Nokto" -> {
when (accentNumber) {
1 -> ContextCompat.getColor(context, R.color.noktoAccent1)
2 -> ContextCompat.getColor(context, R.color.noktoAccent2)
3 -> ContextCompat.getColor(context, R.color.noktoAccent3)
4 -> ContextCompat.getColor(context, R.color.noktoAccent4)
else -> ContextCompat.getColor(context, R.color.noktoAccent1)
}
}

"Breeze" -> {
when (accentNumber) {
1 -> ContextCompat.getColor(context, R.color.breezeAccent1)
2 -> ContextCompat.getColor(context, R.color.breezeAccent2)
3 -> ContextCompat.getColor(context, R.color.breezeAccent3)
4 -> ContextCompat.getColor(context, R.color.breezeAccent4)
else -> ContextCompat.getColor(context, R.color.breezeAccent1)
}
}

"Nordic" -> {
when (accentNumber) {
1 -> ContextCompat.getColor(context, R.color.nordicDarkAccent1)
2 -> ContextCompat.getColor(context, R.color.nordicDarkAccent2)
3 -> ContextCompat.getColor(context, R.color.nordicDarkAccent3)
4 -> ContextCompat.getColor(context, R.color.nordicDarkAccent4)
else -> ContextCompat.getColor(context, R.color.nordicDarkAccent1)
}
}

"Catppuccino" -> {
when (accentNumber) {
1 -> ContextCompat.getColor(context, R.color.catppuccinoDarkAccent1)
2 -> ContextCompat.getColor(context, R.color.catppuccinoDarkAccent2)
3 -> ContextCompat.getColor(context, R.color.catppuccinoDarkAccent3)
4 -> ContextCompat.getColor(context, R.color.catppuccinoDarkAccent4)
else -> ContextCompat.getColor(context, R.color.catppuccinoDarkAccent1)
}
}

"Yaru" -> {
when (accentNumber) {
1 -> ContextCompat.getColor(context, R.color.yaruAccent1)
2 -> ContextCompat.getColor(context, R.color.yaruAccent2)
3 -> ContextCompat.getColor(context, R.color.yaruAccent3)
4 -> ContextCompat.getColor(context, R.color.yaruAccent4)
else -> ContextCompat.getColor(context, R.color.yaruAccent1)
}
}

else -> {
when (accentNumber) {
1 -> getHexFontColor(context)
2 -> getHexFontColor(context)
3 -> getHexFontColor(context)
4 -> getHexFontColor(context)
else -> getHexFontColor(context)
}
}
}
}
"Light" -> {
when (prefs.appLightColors.name) {
"Adwaita" -> {
when (accentNumber) {
1 -> ContextCompat.getColor(context, R.color.adwaitaAccent1)
2 -> ContextCompat.getColor(context, R.color.adwaitaAccent2)
3 -> ContextCompat.getColor(context, R.color.adwaitaAccent3)
4 -> ContextCompat.getColor(context, R.color.adwaitaAccent4)
else -> ContextCompat.getColor(context, R.color.adwaitaAccent1)
}
}

"Nordic" -> {
when (accentNumber) {
1 -> ContextCompat.getColor(context, R.color.nordicLightAccent1)
2 -> ContextCompat.getColor(context, R.color.nordicLightAccent2)
3 -> ContextCompat.getColor(context, R.color.nordicLightAccent3)
4 -> ContextCompat.getColor(context, R.color.nordicLightAccent4)
else -> ContextCompat.getColor(context, R.color.nordicLightAccent1)
}
}

"Catppuccino" -> {
when (accentNumber) {
1 -> ContextCompat.getColor(context, R.color.catppuccinoLightAccent1)
2 -> ContextCompat.getColor(context, R.color.catppuccinoLightAccent2)
3 -> ContextCompat.getColor(context, R.color.catppuccinoLightAccent3)
4 -> ContextCompat.getColor(context, R.color.catppuccinoLightAccent4)
else -> ContextCompat.getColor(context, R.color.catppuccinoLightAccent1)
}
}

else -> {
when (accentNumber) {
1 -> getHexFontColor(context)
2 -> getHexFontColor(context)
3 -> getHexFontColor(context)
4 -> getHexFontColor(context)
else -> getHexFontColor(context)
}
}
}
}
else -> {
when (accentNumber) {
1 -> getHexFontColor(context)
2 -> getHexFontColor(context)
3 -> getHexFontColor(context)
4 -> getHexFontColor(context)
else -> getHexFontColor(context)
}
}
}
}

private fun getColorWithAccent(context: Context,prefs: Prefs, backgroundColorResId: Int): Int {
val setColor = prefs.opacityNum
val hexColor = Integer.toHexString(setColor).toString()
val backgroundColor = ContextCompat.getColor(context, backgroundColorResId)
val hexAccentColor = java.lang.String.format("%06X", 0xFFFFFF and backgroundColor)
return android.graphics.Color.parseColor("#${hexColor}$hexAccentColor")
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -419,12 +419,10 @@ fun loadFile(activity: Activity) {
fun getHexForOpacity(context: Context, prefs: Prefs): Int {
val setColor = prefs.opacityNum

val accentColor = getBackgroundColor(context)
val hexAccentColor = java.lang.String.format("%06X", 0xFFFFFF and accentColor)
val backgroundColor = getBackgroundColor(context)
val hexAccentColor = java.lang.String.format("%06X", 0xFFFFFF and backgroundColor)

var hex = Integer.toHexString(setColor).toString()
if (hex.length < 2)
hex = "$hex$hex"
val hex = Integer.toHexString(setColor).toString()

return android.graphics.Color.parseColor("#${hex}$hexAccentColor")
}
Expand Down

0 comments on commit 3d40055

Please sign in to comment.