# Raven/Oriole specific init.rc

on init && property:ro.vendor.factory=1
    import /vendor/etc/init/hw/init.factory.rc

on early-boot
    # Wait for insmod_sh to finish all common modules
    wait_for_prop vendor.common.modules.ready 1
    start insmod_sh_raviole

# Disables fingerprint antispoof on PROTO1.0 devices
on boot && property:ro.build.type=userdebug && \
           property:ro.revision=PROTO1.0 && \
           property:persist.vendor.fingerprint.disable.fake.override=none
    setprop vendor.fingerprint.disable.fake 100

# Overrides fingerprint antispoof if following persist sysprops are set
on boot && property:ro.build.type=userdebug && \
           property:persist.vendor.fingerprint.disable.fake.override=0
    setprop vendor.fingerprint.disable.fake ${persist.vendor.fingerprint.disable.fake.override}

on boot && property:ro.build.type=userdebug && \
           property:persist.vendor.fingerprint.disable.fake.override=1
    setprop vendor.fingerprint.disable.fake ${persist.vendor.fingerprint.disable.fake.override}

on boot && property:ro.build.type=userdebug && \
           property:persist.vendor.fingerprint.disable.fake.override=100
    setprop vendor.fingerprint.disable.fake ${persist.vendor.fingerprint.disable.fake.override}

service insmod_sh_raviole /vendor/bin/init.insmod.sh /vendor/etc/init.insmod.${ro.hardware}.cfg
    class main
    user root
    group root system
    disabled
    oneshot

on post-fs-data
    # Fingerprint
    chown system system /dev/goodix_fp
    exec_background - system shell -- /vendor/bin/trusty_apploader /vendor/firmware/g6.app

    # Start the twoshay touch service
    start twoshay

on property:ro.revision=PROTO1.0
    setprop persist.fingerprint.ghbm true
