# adb completion                                           -*- shell-script -*-
# taken from bash-completion 2.10 (https://github.com/scop/bash-completion) and
# extended by missing commands by Izzy

# Use of this file is deprecated.  Upstream completion is available in
# the Android SDK, use that instead.

_adb_command_usage()
{
    COMPREPLY=( $(compgen -W \
        '$("$1" help 2>&1 | command grep "^ *\(adb \)\? *$2 " \
            | command sed -e "s/[]|[]/\n/g" | _parse_help -)' -- "$cur") )
}

_adb()
{
    local cur prev words cword
    _init_completion || return

    case $prev in
        -s|-p|--algo|--key|--iv)
            return
            ;;
        -f)
            _filedir
            return
            ;;
    esac

    local cmd i
    for (( i=1; i < cword; i++ )); do
        if [[ "${words[i]}" != -* && "${words[i-1]}" != -[sp] ]]; then
            cmd="${words[i]}"
            break
        fi
    done

    if [[ ! "$cmd" ]]; then
        local tmp=()
        if [[ ! $cur || $cur == -* ]]; then
            tmp+=( $(compgen -W '$(_parse_help "$1" help)' -- "$cur") )
        fi
        if [[ ! $cur || $cur != -* ]]; then
            tmp+=( $($1 help 2>&1 | awk '$1 == "adb" { print $2 }') )
            tmp+=( bugreport devices connect disable-verity disconnect emu enable-verity forward help install install-multiple install-multi-package )
            tmp+=( keygen logcat mdns pair pull push reboot restore reverse sideload shell sync uninstall version )
            tmp+=( wait-for-device wait-for-recovery wait-for-rescue wait-for-sideload wait-for-bootloader wait-for-disconnect )
            tmp+=( wait-for-local-device wait-for-local-recovery wait-for-local-rescue wait-for-local-sideload wait-for-local-bootloader wait-for-local-disconnect )
            tmp+=( wait-for-usb-device wait-for-usb-recovery wait-for-usb-rescue wait-for-usb-sideload wait-for-usb-bootloader wait-for-usb-disconnect )
            tmp+=( get-state get-serialno get-devpath remount reboot root unroot usb tcpip start-server kill-server reconnect attach detach )
        fi
        COMPREPLY=( $(compgen -W '${tmp[@]}' -- "$cur") )
        return
    fi

    # TODO: more and better command completions

    _adb_command_usage "$1" $cmd

    case $cmd in
        mdns)
            COMPREPLY=( $(compgen -W '
              check services
            ' -- "$cur" ) )
            ;;
        push|restore|sideload)
            _filedir
            ;;
        forward)
            COMPREPLY=( $(compgen -W \
                '$("$1" help 2>&1 | command sed -ne "s/^ *adb  *forward  *-/-/p" | \
                    _parse_help -)' -- "$cur") )
            ;;
        reboot)
            COMPREPLY=( $(compgen -W 'bootloader recovery sideload sideload-auto-reboot' -- "$cur") )
            ;;
        reconnect)
            COMPREPLY=( $(compgen -W 'device offline' -- "$cur") )
            ;;
    esac
} &&
complete -F _adb adb

# ex: filetype=sh
