#!/bin/bash set -e # Colors for output GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color echo -e "${GREEN}Generating Android app icons...${NC}\n" # Check for inkscape (preferred) or rsvg-convert as fallback if command -v inkscape &> /dev/null; then SVG_RENDERER="inkscape" elif command -v rsvg-convert &> /dev/null; then SVG_RENDERER="rsvg" else echo -e "${YELLOW}Warning: neither inkscape nor rsvg-convert found. Install one to render SVG icons.${NC}" echo "On Fedora/RHEL: sudo dnf install inkscape" echo "On Ubuntu/Debian: sudo apt-get install inkscape" exit 1 fi # Check if ImageMagick is installed (needed for compositing). # ImageMagick 7+ uses `magick`; ImageMagick 6 (Ubuntu/Debian) uses `convert`. if command -v magick &> /dev/null; then MAGICK="magick" elif command -v convert &> /dev/null; then MAGICK="convert" else echo -e "${YELLOW}Warning: ImageMagick not found. Please install it to generate icons.${NC}" echo "On Fedora/RHEL: sudo dnf install ImageMagick" echo "On Ubuntu/Debian: sudo apt-get install imagemagick" exit 1 fi # Source SVG logo SOURCE_SVG="public/logo.svg" if [ ! -f "$SOURCE_SVG" ]; then echo -e "${YELLOW}Error: Source logo not found at $SOURCE_SVG${NC}" exit 1 fi # Brand colors BG_COLOR="#7c52e0" # Ditto purple TMPDIR=$(mktemp -d) LOGO_WHITE_SVG="$TMPDIR/logo_white.svg" LOGO_WHITE="$TMPDIR/logo_white.png" # Recolor the SVG fill to white before rasterizing. sed 's/#7c52e0/#ffffff/g' "$SOURCE_SVG" > "$LOGO_WHITE_SVG" echo "Rendering white SVG at 512x512..." if [ "$SVG_RENDERER" = "inkscape" ]; then inkscape --export-type=png --export-filename="$LOGO_WHITE" -w 512 -h 512 "$LOGO_WHITE_SVG" 2>/dev/null else rsvg-convert -w 512 -h 512 "$LOGO_WHITE_SVG" -o "$LOGO_WHITE" fi # ── Adaptive icon foreground PNGs (transparent bg, white logo, safe-zone padding) ── # Launcher PNGs (ic_launcher, ic_launcher_round) are committed directly to the repo. # Only the adaptive foreground PNGs need to be generated here. # Safe zone = 66% of canvas. Content centered on transparent background. echo "Generating adaptive foreground PNGs..." make_foreground() { local size=$1 local content_size=$(echo "$size * 66 / 100" | bc) local dest=$2 $MAGICK -size "${size}x${size}" "xc:none" \ \( "$LOGO_WHITE" -resize "${content_size}x${content_size}" \) \ -gravity center -compose over -composite \ "$dest" } make_foreground 48 android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png make_foreground 72 android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png make_foreground 96 android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png make_foreground 144 android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png make_foreground 192 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png # Update background color BACKGROUND_COLOR_FILE="android/app/src/main/res/values/ic_launcher_background.xml" mkdir -p android/app/src/main/res/values cat > "$BACKGROUND_COLOR_FILE" << 'EOF' #7c52e0 EOF # Cleanup temp files rm -rf "$TMPDIR" echo -e "\n${GREEN}Android icons generated successfully!${NC}" echo -e "Icon: white Ditto logo on ${GREEN}${BG_COLOR}${NC} (Ditto purple)"