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/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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +