# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

description    "Displays an animation while the system is booting"
author         "chromium-os-dev@chromium.org"

start on startup
task

script
  if [ ! -f /root/.factory_installer ]; then
    # Set the backlight to 40% of its maximum level.
    BACKLIGHT_DIR=/sys/class/backlight
    if [ -d $BACKLIGHT_DIR ] &&
       [ -n "$(find $BACKLIGHT_DIR -maxdepth 0 ! -empty)" ]; then
      backlight_tool --set_brightness_percent=40.0 || true
    fi

    # Use differently-sized images depending on the framebuffer width.
    if [ -x /sbin/frecon ]; then
       RESOLUTION_CMD=frecon
    else
       RESOLUTION_CMD=ply-image
    fi

    WIDTH=$($RESOLUTION_CMD --print-resolution | cut -d ' ' -f 1)

    ASSETS=/usr/share/chromeos-assets
    ASSETS_200=$ASSETS/images_200_percent
    ASSETS_100=$ASSETS/images_100_percent
    if [ $WIDTH -gt 1920 -a -e "$ASSETS_200/boot_splash_frame01.png" ]; then
      BOOT_IMAGES="$ASSETS_200"/boot_splash_frame*.png
    else
      BOOT_IMAGES="$ASSETS_100"/boot_splash_frame*.png
    fi

    DEV_END_USER=
    if is_developer_end_user; then
      DEV_END_USER=--dev-mode
    fi

    show_splash() {
      if [ -x /sbin/frecon ]; then
        frecon --daemon \
          --gamma /usr/share/color/bin/internal_display.bin \
          --clear 0xfffefefe $DEV_END_USER --frame-interval 25 \
          $BOOT_IMAGES
      else
        # Disable blinking cursor. Without this, a splash screen will show a
        # distinct cursor shape even when the cursor is set to none.
        echo 0 > /sys/devices/virtual/graphics/fbcon/cursor_blink

        ply-image --set-monitors \
          --gamma /usr/share/color/bin/internal_display.bin \
          --clear 0xfefefe --frame-interval 25 $BOOT_IMAGES
       fi
    }

    if ! show_splash; then
      # Triggering events is only useful if the udev daemon is up and
      # responding, which we wait for here.
      until udevadm control --reload; do
        sleep 0.01s
      done

      udevadm trigger --action=add --subsystem-match="graphics" \
        --subsystem-match="pci"
      udevadm settle

      show_splash
    fi
  fi
end script
