#!/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"
generate_accent "Blue" "#2196F3" "#2196F3"
generate_accent "Carnation" "#fb83b2" "#ffa6c9"
generate_accent "Cyan" "#00bcd4" "#00bcd4"
generate_accent "Denim" "#1560BD" "#1560BD"
generate_accent "Gold" "#CFB53B" "#CFB53B"
#generate_accent "GreenLight" "#8bc34a" "#8bc34a" "Light green"
generate_accent "GreenDark" "#4CAF50" "#4CAF50" "Dark green"
#generate_accent "Grey" "#808080" "#808080"
#generate_accent "Hope" "#5fc72d" "#59ff3a"
generate_accent "Indigo" "#5C6BC0" "#5C6BC0"
generate_accent "Lava" "#B20120" "#EB0028"
generate_accent "Lime" "#C0CA33" "#AFB42B"
generate_accent "Orange" "#ff9800" "#ff9800"
#generate_accent "Oxygen" "#53ADEF" "#53ADEF"
generate_accent "Pink" "#e91e63" "#f48fb1"
#generate_accent "Pixel" "#4285f4" "#3367d6"
generate_accent "Purple" "#673ab7" "#9575CD"
generate_accent "Red" "#ff0000" "#ff0000"
generate_accent "Teal" "#008577" "#80cbc4"
generate_accent "Turquoise" "#00C1C1" "#00C1C1"
generate_accent "Yellow" "#FBC02D" "#FBC02D"
# 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