diff --git a/generate_themes.sh b/generate_themes.sh
new file mode 100755
index 0000000000..542af5aa25
--- /dev/null
+++ b/generate_themes.sh
@@ -0,0 +1,184 @@
+#!/bin/bash
+
+set -e
+shopt -s globstar
+
+my_dir="$(dirname "$(realpath "$0")")"
+pushd "$my_dir" > /dev/null
+
+function add_alpha_to_color() {
+ local color="$1"
+ local alpha="$2"
+ echo "$color" | sed "s|#|#$alpha|"
+}
+
+function add_noalpha_to_color() {
+ local color="$1"
+ local alpha="$2"
+ python -c "print('#' + hex(int(255 - $alpha*(255-int('$color'[1:3], 16))))[2:] + hex(int(255 - $alpha*(255-int('$color'[3:5], 16))))[2:] + hex(int(255 - $alpha*(255-int('$color'[5:7], 16))))[2:])"
+}
+
+function theme_file() {
+ local file="$1"
+ local name="$2"
+ local color="$3"
+ local name_lc=`echo "$name" | tr '[:upper:]' '[:lower:]'`
+ local color_alpha25=`add_alpha_to_color "$color" "3f"`
+ local color_noalpha12=`add_noalpha_to_color "$color" '0.12'`
+ local target_file=`echo "$file" | sed "s|bluelight|$name_lc|g"`
+ if [ "$file" = "$target_file" ]; then
+ return
+ fi
+ cp "$file" "$target_file"
+ sed -i "s|BlueLight|$name|g;s|bluelight|$name_lc|g;s|#03a9f4|$color|g;s|#3f03a9f4|$color_alpha25|g;s|#e0f4f3|$color_noalpha12|g" "$target_file"
+}
+
+function insert_above_comment() {
+ local comment_pre="$1"
+ local comment_post="$2"
+ local file="$3"
+ local comment="$4"
+ local insert="$5"
+ local indention="$6"
+ if ! grep -q "$insert" "$file"; then
+ cat "$file" | tr '\n' '\r' | sed "s|\\($comment_pre$comment$comment_post\\)|$insert\r$indention\\1|" | tr '\r' '\n' > "$file.tmp"
+ mv "$file.tmp" "$file"
+ fi
+}
+
+function insert_above_java_comment() {
+ insert_above_comment "// " "" "$@"
+}
+
+function insert_above_xml_comment() {
+ insert_above_comment "" "$@"
+}
+
+function generate_accent_common() {
+ local name="$1"
+ local name_str="$2"
+ local name_lc=`echo "$name" | tr '[:upper:]' '[:lower:]'`
+ insert_above_xml_comment "vector/src/main/res/values/strings_sc.xml" "do not change this comment for accent generation" "$name_str" " "
+}
+
+function generate_accent_light() {
+ # Usage:
+ # generate_accent
+ local name="$1"
+ local name_str="$2"
+ local color_lt="$3"
+ local name_lc=`echo "$name" | tr '[:upper:]' '[:lower:]'`
+
+ # String
+ generate_accent_common "$name" "$name_str"
+
+ # Settings arrays
+ insert_above_xml_comment "vector/src/main/res/values/arrays_sc.xml" \
+ "do not change this comment for light accent entry generation" \
+ "- @string/sc_accent_$name_lc
" \
+ " "
+ insert_above_xml_comment "vector/src/main/res/values/arrays_sc.xml" \
+ "do not change this comment for light accent value generation" \
+ "- $name_lc
" \
+ " "
+ insert_above_xml_comment "vector/src/main/res/values/arrays_sc.xml" \
+ "do not change this comment for light accent preview generation" \
+ "- $color_lt
" \
+ " "
+
+ # Actual theming
+ for f in **/"theme_sc_light_accent_bluelight.xml"; do
+ theme_file "$f" "$name" "$color_lt" \;
+ done
+
+ # Selection code
+ insert_above_java_comment "vector/src/main/java/im/vector/app/features/themes/ThemeUtils.kt" \
+ "Do not change this comment for automatic light theme insertion" \
+ "\"$name_lc\" -> R.style.AppTheme_SC_Light_$name" \
+ " "
+}
+
+function generate_accent_dark() {
+ # Usage:
+ # generate_accent
+ local name="$1"
+ local name_str="$2"
+ local color_dk="$3"
+ local name_lc=`echo "$name" | tr '[:upper:]' '[:lower:]'`
+
+ # String
+ generate_accent_common "$name" "$name_str"
+
+ # Settings arrays
+ insert_above_xml_comment "vector/src/main/res/values/arrays_sc.xml" \
+ "do not change this comment for dark accent entry generation" \
+ "- @string/sc_accent_$name_lc
" \
+ " "
+ insert_above_xml_comment "vector/src/main/res/values/arrays_sc.xml" \
+ "do not change this comment for dark accent value generation" \
+ "- $name_lc
" \
+ " "
+ insert_above_xml_comment "vector/src/main/res/values/arrays_sc.xml" \
+ "do not change this comment for dark accent preview generation" \
+ "- $color_dk
" \
+ " "
+
+ # Actual theming
+ for f in **/"theme_sc_accent_bluelight.xml"; do
+ theme_file "$f" "$name" "$color_dk" \;
+ done
+
+ # Selection code
+ insert_above_java_comment "vector/src/main/java/im/vector/app/features/themes/ThemeUtils.kt" \
+ "Do not change this comment for automatic black theme insertion" \
+ "\"$name_lc\" -> R.style.AppTheme_SC_$name" \
+ " "
+ insert_above_java_comment "vector/src/main/java/im/vector/app/features/themes/ThemeUtils.kt" \
+ "Do not change this comment for automatic dark theme insertion" \
+ "\"$name_lc\" -> R.style.AppTheme_SC_Dark_$name" \
+ " "
+ insert_above_java_comment "vector/src/main/java/im/vector/app/features/themes/ThemeUtils.kt" \
+ "Do not change this comment for automatic black colored theme insertion" \
+ "\"$name_lc\" -> R.style.AppTheme_SC_Colored_$name" \
+ " "
+ insert_above_java_comment "vector/src/main/java/im/vector/app/features/themes/ThemeUtils.kt" \
+ "Do not change this comment for automatic dark colored theme insertion" \
+ "\"$name_lc\" -> R.style.AppTheme_SC_Dark_Colored_$name" \
+ " "
+}
+
+function generate_accent() {
+ # Usage:
+ # generate_accent
+ local name="$1"
+ local color_lt="$2"
+ local color_dk="$3"
+ local name_str="$4"
+ if [ -z "$name_str" ]; then
+ name_str="$name"
+ fi
+ generate_accent_light "$name" "$name_str" "$color_lt"
+ generate_accent_dark "$name" "$name_str" "$color_dk"
+}
+
+generate_accent "Amber" "#ffa000" "#ffab00"
+generate_accent "BlueLight" "#03a9f4" "#03a9f4" "Light blue"
+# TODO normal blue
+generate_accent "Cyan" "#00bcd4" "#00bcd4"
+generate_accent "Gold" "#CFB53B" "#CFB53B"
+#generate_accent "GreenLight" "#8bc34a" "#8bc34a"
+generate_accent "Lime" "#cddc39" "#cddc39"
+generate_accent "Orange" "#ff9800" "#ff9800"
+generate_accent "Pink" "#e91e63" "#f48fb1"
+generate_accent "Purple" "#673ab7" "#673ab7"
+generate_accent "Red" "#ff0000" "#ff0000"
+generate_accent "Teal" "#008577" "#80cbc4"
+generate_accent "Turquoise" "#00C1C1" "#00FFFF"
+generate_accent "Yellow" "#fdd835" "#ffeb3b"
+
+# We have foreground on accent colors, better skip these
+#generate_accent "Grey" "#808080" "#808080"
+#generate_accent_light "Black" "Black" "#212121"
+#generate_accent_dark "White" "White" "#eeeeee"
+
+popd > /dev/null
diff --git a/library/ui-styles/src/main/res/values-v23/theme_sc_accent_amber.xml b/library/ui-styles/src/main/res/values-v23/theme_sc_accent_amber.xml
new file mode 100644
index 0000000000..19531fbae5
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v23/theme_sc_accent_amber.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v23/theme_sc_accent_bluelight.xml b/library/ui-styles/src/main/res/values-v23/theme_sc_accent_bluelight.xml
new file mode 100644
index 0000000000..7bdc0114b4
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v23/theme_sc_accent_bluelight.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v23/theme_sc_accent_cyan.xml b/library/ui-styles/src/main/res/values-v23/theme_sc_accent_cyan.xml
new file mode 100644
index 0000000000..79aa126439
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v23/theme_sc_accent_cyan.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v23/theme_sc_accent_gold.xml b/library/ui-styles/src/main/res/values-v23/theme_sc_accent_gold.xml
new file mode 100644
index 0000000000..9483b75f7d
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v23/theme_sc_accent_gold.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v23/theme_sc_accent_lime.xml b/library/ui-styles/src/main/res/values-v23/theme_sc_accent_lime.xml
new file mode 100644
index 0000000000..61af718684
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v23/theme_sc_accent_lime.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v23/theme_sc_accent_orange.xml b/library/ui-styles/src/main/res/values-v23/theme_sc_accent_orange.xml
new file mode 100644
index 0000000000..4adff9eca4
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v23/theme_sc_accent_orange.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v23/theme_sc_accent_pink.xml b/library/ui-styles/src/main/res/values-v23/theme_sc_accent_pink.xml
new file mode 100644
index 0000000000..f448e98a5c
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v23/theme_sc_accent_pink.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v23/theme_sc_accent_purple.xml b/library/ui-styles/src/main/res/values-v23/theme_sc_accent_purple.xml
new file mode 100644
index 0000000000..0091820029
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v23/theme_sc_accent_purple.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v23/theme_sc_accent_red.xml b/library/ui-styles/src/main/res/values-v23/theme_sc_accent_red.xml
new file mode 100644
index 0000000000..7712737c0d
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v23/theme_sc_accent_red.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v23/theme_sc_accent_teal.xml b/library/ui-styles/src/main/res/values-v23/theme_sc_accent_teal.xml
new file mode 100644
index 0000000000..fe19adfe09
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v23/theme_sc_accent_teal.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v23/theme_sc_accent_turquoise.xml b/library/ui-styles/src/main/res/values-v23/theme_sc_accent_turquoise.xml
new file mode 100644
index 0000000000..241b19be08
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v23/theme_sc_accent_turquoise.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v23/theme_sc_accent_yellow.xml b/library/ui-styles/src/main/res/values-v23/theme_sc_accent_yellow.xml
new file mode 100644
index 0000000000..0792535038
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v23/theme_sc_accent_yellow.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v23/theme_sc_light_accent_amber.xml b/library/ui-styles/src/main/res/values-v23/theme_sc_light_accent_amber.xml
new file mode 100644
index 0000000000..1546244c2b
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v23/theme_sc_light_accent_amber.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v23/theme_sc_light_accent_bluelight.xml b/library/ui-styles/src/main/res/values-v23/theme_sc_light_accent_bluelight.xml
new file mode 100644
index 0000000000..01efc7f8a0
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v23/theme_sc_light_accent_bluelight.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v23/theme_sc_light_accent_cyan.xml b/library/ui-styles/src/main/res/values-v23/theme_sc_light_accent_cyan.xml
new file mode 100644
index 0000000000..ca774f17c3
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v23/theme_sc_light_accent_cyan.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v23/theme_sc_light_accent_gold.xml b/library/ui-styles/src/main/res/values-v23/theme_sc_light_accent_gold.xml
new file mode 100644
index 0000000000..6957ff5457
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v23/theme_sc_light_accent_gold.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v23/theme_sc_light_accent_lime.xml b/library/ui-styles/src/main/res/values-v23/theme_sc_light_accent_lime.xml
new file mode 100644
index 0000000000..598ad3e442
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v23/theme_sc_light_accent_lime.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v23/theme_sc_light_accent_orange.xml b/library/ui-styles/src/main/res/values-v23/theme_sc_light_accent_orange.xml
new file mode 100644
index 0000000000..25ade9d652
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v23/theme_sc_light_accent_orange.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v23/theme_sc_light_accent_pink.xml b/library/ui-styles/src/main/res/values-v23/theme_sc_light_accent_pink.xml
new file mode 100644
index 0000000000..5f09603691
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v23/theme_sc_light_accent_pink.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v23/theme_sc_light_accent_purple.xml b/library/ui-styles/src/main/res/values-v23/theme_sc_light_accent_purple.xml
new file mode 100644
index 0000000000..921957cb3b
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v23/theme_sc_light_accent_purple.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v23/theme_sc_light_accent_red.xml b/library/ui-styles/src/main/res/values-v23/theme_sc_light_accent_red.xml
new file mode 100644
index 0000000000..5a0c2ff3e3
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v23/theme_sc_light_accent_red.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v23/theme_sc_light_accent_teal.xml b/library/ui-styles/src/main/res/values-v23/theme_sc_light_accent_teal.xml
new file mode 100644
index 0000000000..b413971da5
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v23/theme_sc_light_accent_teal.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v23/theme_sc_light_accent_turquoise.xml b/library/ui-styles/src/main/res/values-v23/theme_sc_light_accent_turquoise.xml
new file mode 100644
index 0000000000..f28f4b7185
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v23/theme_sc_light_accent_turquoise.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v23/theme_sc_light_accent_yellow.xml b/library/ui-styles/src/main/res/values-v23/theme_sc_light_accent_yellow.xml
new file mode 100644
index 0000000000..ffcec85d82
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v23/theme_sc_light_accent_yellow.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v27/theme_sc_accent_amber.xml b/library/ui-styles/src/main/res/values-v27/theme_sc_accent_amber.xml
new file mode 100644
index 0000000000..539ad75108
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v27/theme_sc_accent_amber.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v27/theme_sc_accent_bluelight.xml b/library/ui-styles/src/main/res/values-v27/theme_sc_accent_bluelight.xml
new file mode 100644
index 0000000000..e573ab64d3
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v27/theme_sc_accent_bluelight.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v27/theme_sc_accent_cyan.xml b/library/ui-styles/src/main/res/values-v27/theme_sc_accent_cyan.xml
new file mode 100644
index 0000000000..7ed4be7571
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v27/theme_sc_accent_cyan.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v27/theme_sc_accent_gold.xml b/library/ui-styles/src/main/res/values-v27/theme_sc_accent_gold.xml
new file mode 100644
index 0000000000..8cb5763c5d
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v27/theme_sc_accent_gold.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v27/theme_sc_accent_lime.xml b/library/ui-styles/src/main/res/values-v27/theme_sc_accent_lime.xml
new file mode 100644
index 0000000000..f97f139425
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v27/theme_sc_accent_lime.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v27/theme_sc_accent_orange.xml b/library/ui-styles/src/main/res/values-v27/theme_sc_accent_orange.xml
new file mode 100644
index 0000000000..0b93c1916a
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v27/theme_sc_accent_orange.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v27/theme_sc_accent_pink.xml b/library/ui-styles/src/main/res/values-v27/theme_sc_accent_pink.xml
new file mode 100644
index 0000000000..d964c4f9c6
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v27/theme_sc_accent_pink.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v27/theme_sc_accent_purple.xml b/library/ui-styles/src/main/res/values-v27/theme_sc_accent_purple.xml
new file mode 100644
index 0000000000..f5bb09c8e8
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v27/theme_sc_accent_purple.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v27/theme_sc_accent_red.xml b/library/ui-styles/src/main/res/values-v27/theme_sc_accent_red.xml
new file mode 100644
index 0000000000..a763689ca8
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v27/theme_sc_accent_red.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v27/theme_sc_accent_teal.xml b/library/ui-styles/src/main/res/values-v27/theme_sc_accent_teal.xml
new file mode 100644
index 0000000000..30676b6340
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v27/theme_sc_accent_teal.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v27/theme_sc_accent_turquoise.xml b/library/ui-styles/src/main/res/values-v27/theme_sc_accent_turquoise.xml
new file mode 100644
index 0000000000..4504db2e78
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v27/theme_sc_accent_turquoise.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v27/theme_sc_accent_yellow.xml b/library/ui-styles/src/main/res/values-v27/theme_sc_accent_yellow.xml
new file mode 100644
index 0000000000..c0538efbab
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v27/theme_sc_accent_yellow.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v27/theme_sc_light_accent_amber.xml b/library/ui-styles/src/main/res/values-v27/theme_sc_light_accent_amber.xml
new file mode 100644
index 0000000000..089e3d04cd
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v27/theme_sc_light_accent_amber.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v27/theme_sc_light_accent_bluelight.xml b/library/ui-styles/src/main/res/values-v27/theme_sc_light_accent_bluelight.xml
new file mode 100644
index 0000000000..43108703ab
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v27/theme_sc_light_accent_bluelight.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v27/theme_sc_light_accent_cyan.xml b/library/ui-styles/src/main/res/values-v27/theme_sc_light_accent_cyan.xml
new file mode 100644
index 0000000000..dc3e45c802
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v27/theme_sc_light_accent_cyan.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v27/theme_sc_light_accent_gold.xml b/library/ui-styles/src/main/res/values-v27/theme_sc_light_accent_gold.xml
new file mode 100644
index 0000000000..78772d2210
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v27/theme_sc_light_accent_gold.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v27/theme_sc_light_accent_lime.xml b/library/ui-styles/src/main/res/values-v27/theme_sc_light_accent_lime.xml
new file mode 100644
index 0000000000..8bc84d6979
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v27/theme_sc_light_accent_lime.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v27/theme_sc_light_accent_orange.xml b/library/ui-styles/src/main/res/values-v27/theme_sc_light_accent_orange.xml
new file mode 100644
index 0000000000..579c142c52
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v27/theme_sc_light_accent_orange.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v27/theme_sc_light_accent_pink.xml b/library/ui-styles/src/main/res/values-v27/theme_sc_light_accent_pink.xml
new file mode 100644
index 0000000000..9c9dd3d1ca
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v27/theme_sc_light_accent_pink.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v27/theme_sc_light_accent_purple.xml b/library/ui-styles/src/main/res/values-v27/theme_sc_light_accent_purple.xml
new file mode 100644
index 0000000000..00cfc921d0
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v27/theme_sc_light_accent_purple.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v27/theme_sc_light_accent_red.xml b/library/ui-styles/src/main/res/values-v27/theme_sc_light_accent_red.xml
new file mode 100644
index 0000000000..4003b71363
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v27/theme_sc_light_accent_red.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v27/theme_sc_light_accent_teal.xml b/library/ui-styles/src/main/res/values-v27/theme_sc_light_accent_teal.xml
new file mode 100644
index 0000000000..47bc54902b
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v27/theme_sc_light_accent_teal.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v27/theme_sc_light_accent_turquoise.xml b/library/ui-styles/src/main/res/values-v27/theme_sc_light_accent_turquoise.xml
new file mode 100644
index 0000000000..b8c4122fda
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v27/theme_sc_light_accent_turquoise.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values-v27/theme_sc_light_accent_yellow.xml b/library/ui-styles/src/main/res/values-v27/theme_sc_light_accent_yellow.xml
new file mode 100644
index 0000000000..2d3e846cbd
--- /dev/null
+++ b/library/ui-styles/src/main/res/values-v27/theme_sc_light_accent_yellow.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values/theme_sc_accent_amber.xml b/library/ui-styles/src/main/res/values/theme_sc_accent_amber.xml
new file mode 100644
index 0000000000..c0d2d3a38d
--- /dev/null
+++ b/library/ui-styles/src/main/res/values/theme_sc_accent_amber.xml
@@ -0,0 +1,81 @@
+
+
+
+
+
+ #ffab00
+ #3fffab00
+ @color/accent_sc_dark_amber
+ @color/accent_sc_dark_amber_alpha25
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values/theme_sc_accent_bluelight.xml b/library/ui-styles/src/main/res/values/theme_sc_accent_bluelight.xml
new file mode 100644
index 0000000000..8e8df89a8c
--- /dev/null
+++ b/library/ui-styles/src/main/res/values/theme_sc_accent_bluelight.xml
@@ -0,0 +1,81 @@
+
+
+
+
+
+ #03a9f4
+ #3f03a9f4
+ @color/accent_sc_dark_bluelight
+ @color/accent_sc_dark_bluelight_alpha25
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values/theme_sc_accent_cyan.xml b/library/ui-styles/src/main/res/values/theme_sc_accent_cyan.xml
new file mode 100644
index 0000000000..e99bcf91e2
--- /dev/null
+++ b/library/ui-styles/src/main/res/values/theme_sc_accent_cyan.xml
@@ -0,0 +1,81 @@
+
+
+
+
+
+ #00bcd4
+ #3f00bcd4
+ @color/accent_sc_dark_cyan
+ @color/accent_sc_dark_cyan_alpha25
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values/theme_sc_accent_gold.xml b/library/ui-styles/src/main/res/values/theme_sc_accent_gold.xml
new file mode 100644
index 0000000000..e540c18bee
--- /dev/null
+++ b/library/ui-styles/src/main/res/values/theme_sc_accent_gold.xml
@@ -0,0 +1,81 @@
+
+
+
+
+
+ #CFB53B
+ #3fCFB53B
+ @color/accent_sc_dark_gold
+ @color/accent_sc_dark_gold_alpha25
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values/theme_sc_accent_lime.xml b/library/ui-styles/src/main/res/values/theme_sc_accent_lime.xml
new file mode 100644
index 0000000000..71f7a2e255
--- /dev/null
+++ b/library/ui-styles/src/main/res/values/theme_sc_accent_lime.xml
@@ -0,0 +1,81 @@
+
+
+
+
+
+ #cddc39
+ #3fcddc39
+ @color/accent_sc_dark_lime
+ @color/accent_sc_dark_lime_alpha25
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values/theme_sc_accent_orange.xml b/library/ui-styles/src/main/res/values/theme_sc_accent_orange.xml
new file mode 100644
index 0000000000..960dc31939
--- /dev/null
+++ b/library/ui-styles/src/main/res/values/theme_sc_accent_orange.xml
@@ -0,0 +1,81 @@
+
+
+
+
+
+ #ff9800
+ #3fff9800
+ @color/accent_sc_dark_orange
+ @color/accent_sc_dark_orange_alpha25
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values/theme_sc_accent_pink.xml b/library/ui-styles/src/main/res/values/theme_sc_accent_pink.xml
new file mode 100644
index 0000000000..1c17ceecbf
--- /dev/null
+++ b/library/ui-styles/src/main/res/values/theme_sc_accent_pink.xml
@@ -0,0 +1,81 @@
+
+
+
+
+
+ #f48fb1
+ #3ff48fb1
+ @color/accent_sc_dark_pink
+ @color/accent_sc_dark_pink_alpha25
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values/theme_sc_accent_purple.xml b/library/ui-styles/src/main/res/values/theme_sc_accent_purple.xml
new file mode 100644
index 0000000000..9d734671c3
--- /dev/null
+++ b/library/ui-styles/src/main/res/values/theme_sc_accent_purple.xml
@@ -0,0 +1,81 @@
+
+
+
+
+
+ #673ab7
+ #3f673ab7
+ @color/accent_sc_dark_purple
+ @color/accent_sc_dark_purple_alpha25
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values/theme_sc_accent_red.xml b/library/ui-styles/src/main/res/values/theme_sc_accent_red.xml
new file mode 100644
index 0000000000..b643d51296
--- /dev/null
+++ b/library/ui-styles/src/main/res/values/theme_sc_accent_red.xml
@@ -0,0 +1,81 @@
+
+
+
+
+
+ #ff0000
+ #3fff0000
+ @color/accent_sc_dark_red
+ @color/accent_sc_dark_red_alpha25
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values/theme_sc_accent_teal.xml b/library/ui-styles/src/main/res/values/theme_sc_accent_teal.xml
new file mode 100644
index 0000000000..c88c351b97
--- /dev/null
+++ b/library/ui-styles/src/main/res/values/theme_sc_accent_teal.xml
@@ -0,0 +1,81 @@
+
+
+
+
+
+ #80cbc4
+ #3f80cbc4
+ @color/accent_sc_dark_teal
+ @color/accent_sc_dark_teal_alpha25
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values/theme_sc_accent_turquoise.xml b/library/ui-styles/src/main/res/values/theme_sc_accent_turquoise.xml
new file mode 100644
index 0000000000..19e537f929
--- /dev/null
+++ b/library/ui-styles/src/main/res/values/theme_sc_accent_turquoise.xml
@@ -0,0 +1,81 @@
+
+
+
+
+
+ #00FFFF
+ #3f00FFFF
+ @color/accent_sc_dark_turquoise
+ @color/accent_sc_dark_turquoise_alpha25
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values/theme_sc_accent_yellow.xml b/library/ui-styles/src/main/res/values/theme_sc_accent_yellow.xml
new file mode 100644
index 0000000000..e7d360ac06
--- /dev/null
+++ b/library/ui-styles/src/main/res/values/theme_sc_accent_yellow.xml
@@ -0,0 +1,81 @@
+
+
+
+
+
+ #ffeb3b
+ #3fffeb3b
+ @color/accent_sc_dark_yellow
+ @color/accent_sc_dark_yellow_alpha25
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values/theme_sc_light_accent_amber.xml b/library/ui-styles/src/main/res/values/theme_sc_light_accent_amber.xml
new file mode 100644
index 0000000000..fdf9647e50
--- /dev/null
+++ b/library/ui-styles/src/main/res/values/theme_sc_light_accent_amber.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+ #ffa000
+ #3fffa000
+ @color/accent_sc_light_amber
+ @color/accent_sc_light_amber_alpha25
+ #fff3e0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values/theme_sc_light_accent_bluelight.xml b/library/ui-styles/src/main/res/values/theme_sc_light_accent_bluelight.xml
new file mode 100644
index 0000000000..96584f8194
--- /dev/null
+++ b/library/ui-styles/src/main/res/values/theme_sc_light_accent_bluelight.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+ #03a9f4
+ #3f03a9f4
+ @color/accent_sc_light_bluelight
+ @color/accent_sc_light_bluelight_alpha25
+ #e0f4f3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values/theme_sc_light_accent_cyan.xml b/library/ui-styles/src/main/res/values/theme_sc_light_accent_cyan.xml
new file mode 100644
index 0000000000..a9abcc7f55
--- /dev/null
+++ b/library/ui-styles/src/main/res/values/theme_sc_light_accent_cyan.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+ #00bcd4
+ #3f00bcd4
+ @color/accent_sc_light_cyan
+ @color/accent_sc_light_cyan_alpha25
+ #e0f6f9
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values/theme_sc_light_accent_gold.xml b/library/ui-styles/src/main/res/values/theme_sc_light_accent_gold.xml
new file mode 100644
index 0000000000..a3eec21751
--- /dev/null
+++ b/library/ui-styles/src/main/res/values/theme_sc_light_accent_gold.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+ #CFB53B
+ #3fCFB53B
+ @color/accent_sc_light_gold
+ @color/accent_sc_light_gold_alpha25
+ #f9f6e7
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values/theme_sc_light_accent_lime.xml b/library/ui-styles/src/main/res/values/theme_sc_light_accent_lime.xml
new file mode 100644
index 0000000000..3b1effa620
--- /dev/null
+++ b/library/ui-styles/src/main/res/values/theme_sc_light_accent_lime.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+ #cddc39
+ #3fcddc39
+ @color/accent_sc_light_lime
+ @color/accent_sc_light_lime_alpha25
+ #f9fae7
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values/theme_sc_light_accent_orange.xml b/library/ui-styles/src/main/res/values/theme_sc_light_accent_orange.xml
new file mode 100644
index 0000000000..b851d4f8b8
--- /dev/null
+++ b/library/ui-styles/src/main/res/values/theme_sc_light_accent_orange.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+ #ff9800
+ #3fff9800
+ @color/accent_sc_light_orange
+ @color/accent_sc_light_orange_alpha25
+ #fff2e0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values/theme_sc_light_accent_pink.xml b/library/ui-styles/src/main/res/values/theme_sc_light_accent_pink.xml
new file mode 100644
index 0000000000..64bfd077f3
--- /dev/null
+++ b/library/ui-styles/src/main/res/values/theme_sc_light_accent_pink.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+ #e91e63
+ #3fe91e63
+ @color/accent_sc_light_pink
+ @color/accent_sc_light_pink_alpha25
+ #fce4ec
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values/theme_sc_light_accent_purple.xml b/library/ui-styles/src/main/res/values/theme_sc_light_accent_purple.xml
new file mode 100644
index 0000000000..c0f3b075d9
--- /dev/null
+++ b/library/ui-styles/src/main/res/values/theme_sc_light_accent_purple.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+ #673ab7
+ #3f673ab7
+ @color/accent_sc_light_purple
+ @color/accent_sc_light_purple_alpha25
+ #ece7f6
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values/theme_sc_light_accent_red.xml b/library/ui-styles/src/main/res/values/theme_sc_light_accent_red.xml
new file mode 100644
index 0000000000..13c2a374c5
--- /dev/null
+++ b/library/ui-styles/src/main/res/values/theme_sc_light_accent_red.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+ #ff0000
+ #3fff0000
+ @color/accent_sc_light_red
+ @color/accent_sc_light_red_alpha25
+ #ffe0e0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values/theme_sc_light_accent_teal.xml b/library/ui-styles/src/main/res/values/theme_sc_light_accent_teal.xml
new file mode 100644
index 0000000000..2531306cc7
--- /dev/null
+++ b/library/ui-styles/src/main/res/values/theme_sc_light_accent_teal.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+ #008577
+ #3f008577
+ @color/accent_sc_light_teal
+ @color/accent_sc_light_teal_alpha25
+ #e0f0ee
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values/theme_sc_light_accent_turquoise.xml b/library/ui-styles/src/main/res/values/theme_sc_light_accent_turquoise.xml
new file mode 100644
index 0000000000..32ca00c0aa
--- /dev/null
+++ b/library/ui-styles/src/main/res/values/theme_sc_light_accent_turquoise.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+ #00C1C1
+ #3f00C1C1
+ @color/accent_sc_light_turquoise
+ @color/accent_sc_light_turquoise_alpha25
+ #e0f7f7
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values/theme_sc_light_accent_yellow.xml b/library/ui-styles/src/main/res/values/theme_sc_light_accent_yellow.xml
new file mode 100644
index 0000000000..8458690933
--- /dev/null
+++ b/library/ui-styles/src/main/res/values/theme_sc_light_accent_yellow.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+ #fdd835
+ #3ffdd835
+ @color/accent_sc_light_yellow
+ @color/accent_sc_light_yellow_alpha25
+ #fefae6
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vector/src/main/java/im/vector/app/features/configuration/VectorConfiguration.kt b/vector/src/main/java/im/vector/app/features/configuration/VectorConfiguration.kt
index 53f6b79f3b..35ca796b12 100644
--- a/vector/src/main/java/im/vector/app/features/configuration/VectorConfiguration.kt
+++ b/vector/src/main/java/im/vector/app/features/configuration/VectorConfiguration.kt
@@ -112,6 +112,8 @@ class VectorConfiguration @Inject constructor(private val context: Context) {
+ "_" + FontScale.getFontScaleValue(context).preferenceValue
+ "_" + ThemeUtils.getApplicationLightTheme(context)
+ "_" + ThemeUtils.getApplicationDarkTheme(context)
+ + "_" + ThemeUtils.getApplicationLightThemeAccent(context)
+ + "_" + ThemeUtils.getApplicationDarkThemeAccent(context)
+ "_" + ThemeUtils.useDarkTheme(context).toString())
}
}
diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/MatrixItemColorProvider.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/MatrixItemColorProvider.kt
index 4ff9b396eb..046efe24d6 100644
--- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/MatrixItemColorProvider.kt
+++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/MatrixItemColorProvider.kt
@@ -43,7 +43,7 @@ class MatrixItemColorProvider @Inject constructor(
USER_COLORING_FROM_PL -> {
colorProvider.getColorFromAttribute(
when {
- userInRoomInformation?.userPowerLevel == null -> R.attr.user_color_pl_0
+ userInRoomInformation?.userPowerLevel == null -> R.attr.colorAccent // This is also used for avatars in the room overview
userInRoomInformation.userPowerLevel >= 100 -> R.attr.user_color_pl_100
userInRoomInformation.userPowerLevel >= 95 -> R.attr.user_color_pl_95
userInRoomInformation.userPowerLevel >= 51 -> R.attr.user_color_pl_51
diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsAdvancedThemeFragment.kt b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsAdvancedThemeFragment.kt
index 2d15be4253..ccbece778d 100644
--- a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsAdvancedThemeFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsAdvancedThemeFragment.kt
@@ -16,7 +16,11 @@
package im.vector.app.features.settings
+import androidx.preference.Preference
+import de.spiritcroc.preference.ColorMatrixListPreference
import im.vector.app.R
+import im.vector.app.core.extensions.restart
+import im.vector.app.features.themes.ThemeUtils
import javax.inject.Inject
class VectorSettingsAdvancedThemeFragment @Inject constructor(
@@ -27,5 +31,33 @@ class VectorSettingsAdvancedThemeFragment @Inject constructor(
override val preferenceXmlRes = R.xml.vector_settings_advanced_theme_settings
override fun bindPref() {
+ val lightAccentPref = findPreference(ThemeUtils.SETTINGS_SC_ACCENT_LIGHT)!!
+ val darkAccentPref = findPreference(ThemeUtils.SETTINGS_SC_ACCENT_DARK)!!
+
+ lightAccentPref.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue ->
+ if (newValue is String) {
+ ThemeUtils.setApplicationLightThemeAccent(requireContext().applicationContext, newValue)
+ if (ThemeUtils.isLightTheme(requireContext())) {
+ // Restart the Activity
+ activity?.restart()
+ }
+ true
+ } else {
+ false
+ }
+ }
+
+ darkAccentPref.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue ->
+ if (newValue is String) {
+ ThemeUtils.setApplicationDarkThemeAccent(requireContext().applicationContext, newValue)
+ if (!ThemeUtils.isLightTheme(requireContext())) {
+ // Restart the Activity
+ activity?.restart()
+ }
+ true
+ } else {
+ false
+ }
+ }
}
}
diff --git a/vector/src/main/java/im/vector/app/features/themes/ThemeUtils.kt b/vector/src/main/java/im/vector/app/features/themes/ThemeUtils.kt
index 247a34bd76..e8d76cd586 100644
--- a/vector/src/main/java/im/vector/app/features/themes/ThemeUtils.kt
+++ b/vector/src/main/java/im/vector/app/features/themes/ThemeUtils.kt
@@ -19,12 +19,12 @@ package im.vector.app.features.themes
import android.app.Activity
import android.content.Context
import android.content.res.Configuration
-import android.content.res.Resources
import android.graphics.drawable.Drawable
import android.os.Build
import android.util.TypedValue
import androidx.annotation.AttrRes
import androidx.annotation.ColorInt
+import androidx.annotation.StyleRes
import androidx.core.content.ContextCompat
import androidx.core.content.edit
import androidx.core.graphics.drawable.DrawableCompat
@@ -41,6 +41,8 @@ object ThemeUtils {
const val APPLICATION_THEME_KEY = "APPLICATION_THEME_KEY"
const val APPLICATION_DARK_THEME_KEY = "APPLICATION_DARK_THEME_KEY"
const val SYSTEM_DARK_THEME_PRE_TEN = "SYSTEM_DARK_THEME_PRE_TEN"
+ const val SETTINGS_SC_ACCENT_LIGHT = "SETTINGS_SC_ACCENT_LIGHT"
+ const val SETTINGS_SC_ACCENT_DARK = "SETTINGS_SC_ACCENT_DARK"
// the theme possible values
//private const val SYSTEM_THEME_VALUE = "system" // SC does not use this
@@ -56,15 +58,16 @@ object ThemeUtils {
private var currentLightTheme = AtomicReference(null)
private var currentDarkTheme = AtomicReference(null)
+ private var currentLightThemeAccent = AtomicReference(null)
+ private var currentDarkThemeAccent = AtomicReference(null)
// The default theme // SC: from upstream, ignore
//private const val DEFAULT_THEME = SYSTEM_THEME_VALUE
- private var currentTheme = AtomicReference(null)
+ //private var currentTheme = AtomicReference(null)
private val mColorByAttr = HashMap()
- private var mIsScTheme = false
private var mUseDarkTheme = false
private var mThemeInitialized = false
@@ -101,8 +104,9 @@ object ThemeUtils {
val lightTheme = getApplicationLightTheme(context)
val darkTheme = getApplicationDarkTheme(context)
if (lightTheme != darkTheme && darkThemePossible(context)) {
- mThemeInitialized = false;
- setApplicationTheme(context.applicationContext, getApplicationLightTheme(context), getApplicationDarkTheme(context))
+ mThemeInitialized = false
+ setApplicationTheme(context.applicationContext, getApplicationLightTheme(context), getApplicationDarkTheme(context),
+ getApplicationLightThemeAccent(context), getApplicationDarkThemeAccent(context))
}
}
@@ -110,7 +114,9 @@ object ThemeUtils {
fun init(context: Context) {
val lightTheme = getApplicationLightTheme(context)
val darkTheme = getApplicationDarkTheme(context)
- setApplicationTheme(context, lightTheme, darkTheme)
+ val lightAccent = getApplicationLightThemeAccent(context)
+ val darkAccent = getApplicationDarkThemeAccent(context)
+ setApplicationTheme(context, lightTheme, darkTheme, lightAccent, darkAccent)
}
/**
@@ -206,6 +212,28 @@ object ThemeUtils {
}
}
+ fun getApplicationLightThemeAccent(context: Context): String {
+ val currentAccent = this.currentLightThemeAccent.get()
+ return if (currentAccent == null) {
+ val accentFromPref = DefaultSharedPreferences.getInstance(context).getString(SETTINGS_SC_ACCENT_LIGHT, "green") ?: "green"
+ this.currentLightThemeAccent.set(accentFromPref)
+ accentFromPref
+ } else {
+ currentAccent
+ }
+ }
+
+ fun getApplicationDarkThemeAccent(context: Context): String {
+ val currentAccent = this.currentDarkThemeAccent.get()
+ return if (currentAccent == null) {
+ val accentFromPref = DefaultSharedPreferences.getInstance(context).getString(SETTINGS_SC_ACCENT_DARK, "green") ?: "green"
+ this.currentDarkThemeAccent.set(accentFromPref)
+ accentFromPref
+ } else {
+ currentAccent
+ }
+ }
+
/**
* @return true if system theme is dark
*/
@@ -220,9 +248,11 @@ object ThemeUtils {
*
* @param aTheme the new theme
*/
- fun setApplicationTheme(context: Context, aLightTheme: String, aDarkTheme: String) {
+ fun setApplicationTheme(context: Context, aLightTheme: String, aDarkTheme: String, aLightAccent: String, aDarkAccent: String) {
currentLightTheme.set(aLightTheme)
currentDarkTheme.set(aDarkTheme)
+ currentLightThemeAccent.set(aLightAccent)
+ currentDarkThemeAccent.set(aDarkAccent)
val aTheme = if (useDarkTheme(context)) aDarkTheme else aLightTheme
context.setTheme(
when (aTheme) {
@@ -230,12 +260,12 @@ object ThemeUtils {
THEME_LIGHT_VALUE -> R.style.Theme_Vector_Light
THEME_DARK_VALUE -> R.style.Theme_Vector_Dark
THEME_BLACK_VALUE -> R.style.Theme_Vector_Black
- THEME_SC_LIGHT_VALUE -> R.style.AppTheme_SC_Light
- THEME_SC_VALUE -> R.style.AppTheme_SC
- THEME_SC_DARK_VALUE -> R.style.AppTheme_SC_Dark
- THEME_SC_COLORED_VALUE -> R.style.AppTheme_SC_Colored
- THEME_SC_DARK_COLORED_VALUE -> R.style.AppTheme_SC_Dark_Colored
- else -> R.style.AppTheme_SC_Light
+ THEME_SC_LIGHT_VALUE -> getAccentedThemeRes(R.style.AppTheme_SC_Light, aLightAccent)
+ THEME_SC_VALUE -> getAccentedThemeRes(R.style.AppTheme_SC, aDarkAccent)
+ THEME_SC_DARK_VALUE -> getAccentedThemeRes(R.style.AppTheme_SC_Dark, aDarkAccent)
+ THEME_SC_COLORED_VALUE -> getAccentedThemeRes(R.style.AppTheme_SC_Colored, aDarkAccent)
+ THEME_SC_DARK_COLORED_VALUE -> getAccentedThemeRes(R.style.AppTheme_SC_Dark_Colored, aDarkAccent)
+ else -> getAccentedThemeRes(R.style.AppTheme_SC_Light, aLightAccent)
}
)
@@ -244,11 +274,23 @@ object ThemeUtils {
}
fun setApplicationLightTheme(context: Context, theme: String) {
- setApplicationTheme(context, theme, getApplicationDarkTheme(context))
+ setApplicationTheme(context, theme, getApplicationDarkTheme(context),
+ getApplicationLightThemeAccent(context), getApplicationDarkThemeAccent(context))
}
fun setApplicationDarkTheme(context: Context, theme: String) {
- setApplicationTheme(context, getApplicationLightTheme(context), theme)
+ setApplicationTheme(context, getApplicationLightTheme(context), theme,
+ getApplicationLightThemeAccent(context), getApplicationDarkThemeAccent(context))
+ }
+
+ fun setApplicationLightThemeAccent(context: Context, themeAccent: String) {
+ setApplicationTheme(context, getApplicationLightTheme(context), getApplicationDarkTheme(context),
+ themeAccent, getApplicationDarkThemeAccent(context))
+ }
+
+ fun setApplicationDarkThemeAccent(context: Context, themeAccent: String) {
+ setApplicationTheme(context, getApplicationLightTheme(context), getApplicationDarkTheme(context),
+ getApplicationLightThemeAccent(context), themeAccent)
}
/**
@@ -262,11 +304,11 @@ object ThemeUtils {
THEME_LIGHT_VALUE -> activity.setTheme(otherThemes.light)
THEME_DARK_VALUE -> activity.setTheme(otherThemes.dark)
THEME_BLACK_VALUE -> activity.setTheme(otherThemes.black)
- THEME_SC_LIGHT_VALUE -> activity.setTheme(otherThemes.sc_light)
- THEME_SC_VALUE -> activity.setTheme(otherThemes.sc)
- THEME_SC_DARK_VALUE -> activity.setTheme(otherThemes.sc_dark)
- THEME_SC_COLORED_VALUE -> activity.setTheme(otherThemes.sc_colored)
- THEME_SC_DARK_COLORED_VALUE -> activity.setTheme(otherThemes.sc_dark_colored)
+ THEME_SC_LIGHT_VALUE -> activity.setTheme(getAccentedThemeRes(otherThemes.sc_light, getApplicationLightThemeAccent(activity)))
+ THEME_SC_VALUE -> activity.setTheme(getAccentedThemeRes(otherThemes.sc, getApplicationDarkThemeAccent(activity)))
+ THEME_SC_DARK_VALUE -> activity.setTheme(getAccentedThemeRes(otherThemes.sc_dark, getApplicationDarkThemeAccent(activity)))
+ THEME_SC_COLORED_VALUE -> activity.setTheme(getAccentedThemeRes(otherThemes.sc_colored, getApplicationDarkThemeAccent(activity)))
+ THEME_SC_DARK_COLORED_VALUE -> activity.setTheme(getAccentedThemeRes(otherThemes.sc_dark_colored, getApplicationDarkThemeAccent(activity)))
}
mColorByAttr.clear()
@@ -335,4 +377,107 @@ object ThemeUtils {
DrawableCompat.setTint(tinted, color)
return tinted
}
+
+ @StyleRes
+ private fun getAccentedThemeRes(@StyleRes resId: Int, themeAccent: String): Int {
+ return when (resId) {
+ R.style.AppTheme_SC_Light -> {
+ when (themeAccent) {
+ "green" -> resId
+ "bluelight" -> R.style.AppTheme_SC_Light_BlueLight
+ "amber" -> R.style.AppTheme_SC_Light_Amber
+ "cyan" -> R.style.AppTheme_SC_Light_Cyan
+ "gold" -> R.style.AppTheme_SC_Light_Gold
+ "lime" -> R.style.AppTheme_SC_Light_Lime
+ "orange" -> R.style.AppTheme_SC_Light_Orange
+ "pink" -> R.style.AppTheme_SC_Light_Pink
+ "purple" -> R.style.AppTheme_SC_Light_Purple
+ "red" -> R.style.AppTheme_SC_Light_Red
+ "teal" -> R.style.AppTheme_SC_Light_Teal
+ "turquoise" -> R.style.AppTheme_SC_Light_Turquoise
+ "yellow" -> R.style.AppTheme_SC_Light_Yellow
+ // Do not change this comment for automatic light theme insertion
+ else -> resId
+ }
+ }
+ R.style.AppTheme_SC -> {
+ when (themeAccent) {
+ "green" -> resId
+ "bluelight" -> R.style.AppTheme_SC_BlueLight
+ "amber" -> R.style.AppTheme_SC_Amber
+ "cyan" -> R.style.AppTheme_SC_Cyan
+ "gold" -> R.style.AppTheme_SC_Gold
+ "lime" -> R.style.AppTheme_SC_Lime
+ "orange" -> R.style.AppTheme_SC_Orange
+ "pink" -> R.style.AppTheme_SC_Pink
+ "purple" -> R.style.AppTheme_SC_Purple
+ "red" -> R.style.AppTheme_SC_Red
+ "teal" -> R.style.AppTheme_SC_Teal
+ "turquoise" -> R.style.AppTheme_SC_Turquoise
+ "yellow" -> R.style.AppTheme_SC_Yellow
+ // Do not change this comment for automatic black theme insertion
+ else -> resId
+ }
+ }
+ R.style.AppTheme_SC_Dark -> {
+ when (themeAccent) {
+ "green" -> resId
+ "bluelight" -> R.style.AppTheme_SC_Dark_BlueLight
+ "amber" -> R.style.AppTheme_SC_Dark_Amber
+ "cyan" -> R.style.AppTheme_SC_Dark_Cyan
+ "gold" -> R.style.AppTheme_SC_Dark_Gold
+ "lime" -> R.style.AppTheme_SC_Dark_Lime
+ "orange" -> R.style.AppTheme_SC_Dark_Orange
+ "pink" -> R.style.AppTheme_SC_Dark_Pink
+ "purple" -> R.style.AppTheme_SC_Dark_Purple
+ "red" -> R.style.AppTheme_SC_Dark_Red
+ "teal" -> R.style.AppTheme_SC_Dark_Teal
+ "turquoise" -> R.style.AppTheme_SC_Dark_Turquoise
+ "yellow" -> R.style.AppTheme_SC_Dark_Yellow
+ // Do not change this comment for automatic dark theme insertion
+ else -> resId
+ }
+ }
+ R.style.AppTheme_SC_Colored -> {
+ when (themeAccent) {
+ "green" -> resId
+ "bluelight" -> R.style.AppTheme_SC_Colored_BlueLight
+ "amber" -> R.style.AppTheme_SC_Colored_Amber
+ "cyan" -> R.style.AppTheme_SC_Colored_Cyan
+ "gold" -> R.style.AppTheme_SC_Colored_Gold
+ "lime" -> R.style.AppTheme_SC_Colored_Lime
+ "orange" -> R.style.AppTheme_SC_Colored_Orange
+ "pink" -> R.style.AppTheme_SC_Colored_Pink
+ "purple" -> R.style.AppTheme_SC_Colored_Purple
+ "red" -> R.style.AppTheme_SC_Colored_Red
+ "teal" -> R.style.AppTheme_SC_Colored_Teal
+ "turquoise" -> R.style.AppTheme_SC_Colored_Turquoise
+ "yellow" -> R.style.AppTheme_SC_Colored_Yellow
+ // Do not change this comment for automatic black colored theme insertion
+ else -> resId
+ }
+ }
+ R.style.AppTheme_SC_Dark_Colored -> {
+ when (themeAccent) {
+ "green" -> resId
+ "bluelight" -> R.style.AppTheme_SC_Dark_Colored_BlueLight
+ "amber" -> R.style.AppTheme_SC_Dark_Colored_Amber
+ "cyan" -> R.style.AppTheme_SC_Dark_Colored_Cyan
+ "gold" -> R.style.AppTheme_SC_Dark_Colored_Gold
+ "lime" -> R.style.AppTheme_SC_Dark_Colored_Lime
+ "orange" -> R.style.AppTheme_SC_Dark_Colored_Orange
+ "pink" -> R.style.AppTheme_SC_Dark_Colored_Pink
+ "purple" -> R.style.AppTheme_SC_Dark_Colored_Purple
+ "red" -> R.style.AppTheme_SC_Dark_Colored_Red
+ "teal" -> R.style.AppTheme_SC_Dark_Colored_Teal
+ "turquoise" -> R.style.AppTheme_SC_Dark_Colored_Turquoise
+ "yellow" -> R.style.AppTheme_SC_Dark_Colored_Yellow
+ // Do not change this comment for automatic dark colored theme insertion
+ else -> resId
+ }
+ }
+ else -> resId
+ }
+ }
+
}
diff --git a/vector/src/main/res/values/arrays_sc.xml b/vector/src/main/res/values/arrays_sc.xml
index 2a42632b51..8ef6b51caf 100644
--- a/vector/src/main/res/values/arrays_sc.xml
+++ b/vector/src/main/res/values/arrays_sc.xml
@@ -49,4 +49,106 @@
- from-id
+
+ - @string/sc_accent_green
+ - @string/sc_accent_amber
+ - @string/sc_accent_bluelight
+ - @string/sc_accent_cyan
+ - @string/sc_accent_gold
+ - @string/sc_accent_lime
+ - @string/sc_accent_orange
+ - @string/sc_accent_pink
+ - @string/sc_accent_purple
+ - @string/sc_accent_red
+ - @string/sc_accent_teal
+ - @string/sc_accent_turquoise
+ - @string/sc_accent_yellow
+
+
+
+
+ - green
+ - amber
+ - bluelight
+ - cyan
+ - gold
+ - lime
+ - orange
+ - pink
+ - purple
+ - red
+ - teal
+ - turquoise
+ - yellow
+
+
+
+
+ - #8bc34a
+ - #ffab00
+ - #03a9f4
+ - #00bcd4
+ - #CFB53B
+ - #cddc39
+ - #ff9800
+ - #f48fb1
+ - #673ab7
+ - #ff0000
+ - #80cbc4
+ - #00FFFF
+ - #ffeb3b
+
+
+
+
+ - @string/sc_accent_green
+ - @string/sc_accent_amber
+ - @string/sc_accent_bluelight
+ - @string/sc_accent_cyan
+ - @string/sc_accent_gold
+ - @string/sc_accent_lime
+ - @string/sc_accent_orange
+ - @string/sc_accent_pink
+ - @string/sc_accent_purple
+ - @string/sc_accent_red
+ - @string/sc_accent_teal
+ - @string/sc_accent_turquoise
+ - @string/sc_accent_yellow
+
+
+
+
+ - green
+ - amber
+ - bluelight
+ - cyan
+ - gold
+ - lime
+ - orange
+ - pink
+ - purple
+ - red
+ - teal
+ - turquoise
+ - yellow
+
+
+
+
+ - #8bc34a
+ - #ffa000
+ - #03a9f4
+ - #00bcd4
+ - #CFB53B
+ - #cddc39
+ - #ff9800
+ - #e91e63
+ - #673ab7
+ - #ff0000
+ - #008577
+ - #00C1C1
+ - #fdd835
+
+
+
diff --git a/vector/src/main/res/values/strings_sc.xml b/vector/src/main/res/values/strings_sc.xml
index cbcc8bac86..ab29615cfb 100644
--- a/vector/src/main/res/values/strings_sc.xml
+++ b/vector/src/main/res/values/strings_sc.xml
@@ -79,5 +79,25 @@
Advanced theme settings
User colors
+ Theme colors
+ Accent color for light themes
+ Accent color for dark themes
+ Note that these color settings only apply to SC themes, and not Element themes.
+
+
+ Green
+ Amber
+ Light blue
+ Cyan
+ Gold
+ Lime
+ Orange
+ Pink
+ Purple
+ Red
+ Teal
+ Turquoise
+ Yellow
+
diff --git a/vector/src/main/res/xml/vector_settings_advanced_theme_settings.xml b/vector/src/main/res/xml/vector_settings_advanced_theme_settings.xml
index 3562a91a52..6c99028ff2 100644
--- a/vector/src/main/res/xml/vector_settings_advanced_theme_settings.xml
+++ b/vector/src/main/res/xml/vector_settings_advanced_theme_settings.xml
@@ -2,6 +2,33 @@
+
+
+
+
+
+
+
+
+
+