-#!/bin/sh
+#!/data/data/com.termux/files/usr/bin/bash
set -e -u
SCRIPTNAME=termux-notification
show_usage () {
- echo "usage: termux-notification [OPTIONS]"
- echo "Display a system notification."
- echo ""
- echo " -c <content> notification content to show"
- echo " -i <id> notification id (will overwrite the previous notification with the same id)"
- echo " -t <title> notification title to show"
- echo " -u <url> notification url when clicking on it"
- exit 1
+ echo "Usage: termux-notification [options]"
+ echo "Display a system notification. Context text is read from stdin or specified using --content."
+ echo " --action action action to execute when pressing the notification"
+ echo " --button1 text text to show on the first notification button"
+ echo " --button1-action action action to execute on the first notification button"
+ echo " --button2 text text to show on the second notification button"
+ echo " --button2-action action action to execute on the second notification button"
+ echo " --button3 text text to show on the third notification button"
+ echo " --button3-action action action to execute on the third notification button"
+ echo " --content content contnet to show in the notification. Read from stdin not specified here."
+ echo " --id id notification id (will overwrite any previous notification with the same id)"
+ echo " --led-color rrggbb color of the blinking led as RRGGBB (default: none)"
+ echo " --led-on milliseconds number of milliseconds for the LED to be on while it's flashing (default: 800)"
+ echo " --led-off milliseconds number of milliseconds for the LED to be off while it's flashing (default: 800)"
+ echo " --priority prio notification priority (high/low/max/min/default)"
+ echo " --sound play a sound with the notification"
+ echo " --title title notification title to show"
+ echo " --vibrate pattern vibrate pattern, comma separated as in 500,1000,200"
+ exit 0
}
-CONTENT_OR_TITLE_SET=no
-ARG_C=""
-OPT_C=""
-ARG_I=""
-OPT_I=""
-ARG_T=""
-OPT_T=""
-ARG_U=""
-OPT_U=""
+OPT_ACTION=""
+OPT_ID=""
+OPT_LED_COLOR=""
+OPT_LED_OFF=""
+OPT_LED_ON=""
+OPT_PRIORITY=""
+OPT_SOUND=""
+OPT_TITLE=""
+OPT_VIBRATE=""
+OPT_BUTTON1_TEXT=""
+OPT_BUTTON1_ACTION=""
+OPT_BUTTON2_TEXT=""
+OPT_BUTTON2_ACTION=""
+OPT_BUTTON3_TEXT=""
+OPT_BUTTON3_ACTION=""
-while getopts :hc:i:t:u: option
-do
- case "$option" in
- h) show_usage;;
- c) ARG_C="--es content"; OPT_C="$OPTARG"; CONTENT_OR_TITLE_SET=yes;;
- i) ARG_I="--es id"; OPT_I="$OPTARG";;
- t) ARG_T="--es title"; OPT_T="$OPTARG"; CONTENT_OR_TITLE_SET=yes;;
- u) ARG_U="--es url"; OPT_U="$OPTARG";;
- ?) echo "$SCRIPTNAME: illegal option -$OPTARG"; exit 1;
+TEMP=`busybox getopt \
+ -n $SCRIPTNAME \
+ -o hc:i:t: \
+ --long action:,\
+button1:,button1-action:,\
+button2:,button2-action:,\
+button3:,button3-action:,\
+content:,help,id:,\
+led-color:,led-on:,led-off:,\
+priority:,sound,title:,vibrate: \
+ -s bash \
+ -- "$@"`
+eval set -- "$TEMP"
+
+while true; do
+ case "$1" in
+ --action) OPT_ACTION="$2"; shift 2;;
+ --button1) OPT_BUTTON1_TEXT="$2"; shift 2;;
+ --button1-action) OPT_BUTTON1_ACTION="$2"; shift 2;;
+ --button2) OPT_BUTTON2_TEXT="$2"; shift 2;;
+ --button2-action) OPT_BUTTON2_ACTION="$2"; shift 2;;
+ --button3) OPT_BUTTON3_TEXT="$2"; shift 2;;
+ --button3-action) OPT_BUTTON3_ACTION="$2"; shift 2;;
+ -c | --content) OPT_CONTENT="$2"; shift 2;;
+ -h | --help) show_usage;;
+ -i | --id) OPT_ID="$2"; shift 2;;
+ --led-color) OPT_LED_COLOR="$2"; shift 2;;
+ --led-on) OPT_LED_ON="$2"; shift 2;;
+ --led-off) OPT_LED_OFF="$2"; shift 2;;
+ --priority) OPT_PRIORITY="$2"; shift 2;;
+ --sound) OPT_SOUND="true"; shift 1;;
+ -t | --title) OPT_TITLE="$2"; shift 2;;
+ --vibrate) OPT_VIBRATE="$2"; shift 2;;
+ --) shift; break ;;
esac
done
-shift $(($OPTIND-1))
if [ $# != 0 ]; then echo "$SCRIPTNAME: too many arguments"; exit 1; fi
-if [ $CONTENT_OR_TITLE_SET = "no" ]; then
- echo "$SCRIPTNAME: no title or content set"
- exit 1
-fi
+set --
+if [ -n "$OPT_ACTION" ]; then set -- "$@" --es action "$OPT_ACTION"; fi
+if [ -n "$OPT_BUTTON1_ACTION" ]; then set -- "$@" --es button_action_1 "$OPT_BUTTON1_ACTION"; fi
+if [ -n "$OPT_BUTTON1_TEXT" ]; then set -- "$@" --es button_text_1 "$OPT_BUTTON1_TEXT"; fi
+if [ -n "$OPT_BUTTON2_ACTION" ]; then set -- "$@" --es button_action_2 "$OPT_BUTTON2_ACTION"; fi
+if [ -n "$OPT_BUTTON2_TEXT" ]; then set -- "$@" --es button_text_2 "$OPT_BUTTON2_TEXT"; fi
+if [ -n "$OPT_BUTTON3_ACTION" ]; then set -- "$@" --es button_action_3 "$OPT_BUTTON3_ACTION"; fi
+if [ -n "$OPT_BUTTON3_TEXT" ]; then set -- "$@" --es button_text_3 "$OPT_BUTTON3_TEXT"; fi
+if [ -n "$OPT_ID" ]; then set -- "$@" --es id "$OPT_ID"; fi
+if [ -n "$OPT_LED_COLOR" ]; then set -- "$@" --es led-color "$OPT_LED_COLOR"; fi
+if [ -n "$OPT_LED_OFF" ]; then set -- "$@" --ei led-off "$OPT_LED_OFF"; fi
+if [ -n "$OPT_LED_ON" ]; then set -- "$@" --ei led-on "$OPT_LED_ON"; fi
+if [ -n "$OPT_PRIORITY" ]; then set -- "$@" --es priority "$OPT_PRIORITY"; fi
+if [ -n "$OPT_SOUND" ]; then set -- "$@" --ez sound "$OPT_SOUND"; fi
+if [ -n "$OPT_TITLE" ]; then set -- "$@" --es title "$OPT_TITLE"; fi
+if [ -n "$OPT_VIBRATE" ]; then set -- "$@" --ela vibrate "$OPT_VIBRATE"; fi
-@TERMUX_API@ Notification $ARG_C "$OPT_C" $ARG_I "$OPT_I" $ARG_T "$OPT_T" $ARG_U "$OPT_U"
+if [ -v OPT_CONTENT ]; then
+ # Note that we want to accept an empty content (--content "").
+ echo ${OPT_CONTENT:=""} | /data/data/com.termux/files/usr/libexec/termux-api Notification "$@"
+else
+ /data/data/com.termux/files/usr/libexec/termux-api Notification "$@"
+fi