MagiskHidePropsConf/system/binpath/props

3051 lines
68 KiB
Plaintext
Raw Normal View History

2018-10-30 08:28:47 +00:00
#!/system/bin/sh
2018-03-18 15:39:43 +00:00
# MagiskHide Props Config
2019-02-02 12:37:20 +00:00
# Copyright (c) 2018-2019 Didgeridoohan @ XDA Developers
# Licence: MIT
2018-03-18 15:39:43 +00:00
2018-08-07 11:50:01 +00:00
# ====================================================
# ==================== Root check ====================
# ====================================================
2018-10-21 14:17:11 +00:00
# Check for access to the Magisk internals. No access == no root
ls /data/adb>/dev/null 2>&1
2018-10-04 21:54:41 +00:00
if [ "$?" != 0 ]; then
su -c props "$@" # Rerun script with root access
2018-08-07 11:50:01 +00:00
exit
fi
2019-02-02 12:37:20 +00:00
# Startup message
echo ""
echo "Loading... Please wait."
echo ""
2018-03-18 15:39:43 +00:00
# =====================================================
# ================ Paths and variables ================
# =====================================================
2019-04-05 21:10:02 +00:00
ADBPATHPH=ADB_PLACEHOLDER
MODPATH=$ADBPATH/modules/MagiskHidePropsConf
2019-03-27 10:50:00 +00:00
LATEFILEPH=LATE_PLACEHOLDER
2018-03-18 15:39:43 +00:00
2018-06-19 09:56:08 +00:00
# Development testing set to false
DEVTESTING=false
2018-07-01 05:31:37 +00:00
case "$1" in
*t*) # Development testing
DEVTESTING=true
;;
esac
2018-03-18 15:39:43 +00:00
# Colours
2019-02-02 12:37:20 +00:00
if [ -f "$LATEFILE" ] && [ "$(grep "OPTIONCOLOUR=" $LATEFILE | sed 's|.*=||' | sed 's|\"||g')" == 0 ] || [ "$LOGNAME" ]; then
2018-04-15 22:05:33 +00:00
COLOURCHK="nc"
2018-03-18 15:39:43 +00:00
else
2018-04-15 22:05:33 +00:00
COLOURCHK="$1"
2018-03-18 15:39:43 +00:00
fi
2018-04-15 22:05:33 +00:00
case "$COLOURCHK" in
*nc*) # Don't use colours
G=''
R=''
Y=''
B=''
V=''
Bl=''
C=''
W=''
N=''
;;
*) # Use colours
G='\e[01;32m' # GREEN
R='\e[01;31m' # RED
Y='\e[01;33m' # YELLOW
B='\e[01;34m' # BLUE
V='\e[01;35m' # VIOLET
Bl='\e[01;30m' # BLACK
C='\e[01;36m' # CYAN
W='\e[01;37m' # WHITE
N='\e[00;37;40m' # NEUTRAL
;;
esac
2018-03-18 15:39:43 +00:00
# ===================================================
# ==================== Functions ====================
# ===================================================
# Load functions
. $MODPATH/util_functions.sh
2018-07-19 19:47:43 +00:00
log_handler "Running props script."
2018-12-05 15:22:57 +00:00
if [ -z "$BBPATH" ]; then
menu_header "${C}No Busybox found${N}"
echo ""
echo "You don't seem to have Busybox installed"
echo "to your system. Please install it, since"
echo "it is required to ensure proper"
echo "functionality of the scripts."
echo ""
echo "I recommend osm0sis' Busybox, installable"
echo "as a Magisk module from the Magisk repo."
echo ""
echo "If you do have Busybox installed, please"
echo "check the module documentation on how to"
echo "ask for support and provide logs."
echo ""
log_handler "No Busybox found."
log_handler "Exiting... Bye bye.\n\n===================="
exit 0
fi
2018-05-29 20:44:54 +00:00
blank_input() {
# Find menu level
case $1 in
1) INPUT=""
;;
2) INPUT2=""
;;
3) INPUT3=""
;;
4) INPUT4=""
;;
5) INPUT5=""
;;
2019-02-02 12:37:20 +00:00
6) INPUT6=""
;;
2018-05-29 20:44:54 +00:00
esac
echo ""
echo "${R}Don't enter an empty value${N}."
echo "Try again."
sleep 2
}
2018-09-04 07:55:57 +00:00
active_option() {
echo ""
echo "${R}That's already the active option.${N}"
sleep 2
}
2018-03-18 15:39:43 +00:00
invalid_input() {
INPMSG=""
# Set the message text
case $1 in
2019-03-27 10:50:00 +00:00
1) INPMSG="Only pick from the options above, one at a time."
2018-03-18 15:39:43 +00:00
;;
2019-02-02 12:37:20 +00:00
2) INPMSG="Only enter '${G}y${N}' or '${G}n${N}'."
2018-03-18 15:39:43 +00:00
;;
2019-02-02 12:37:20 +00:00
3) INPMSG="Only enter '${G}y${N}', '${G}n${N}' or '${G}e${N}'."
2018-03-18 15:39:43 +00:00
;;
2019-02-02 12:37:20 +00:00
4) INPMSG="Only enter '${G}y${N}', '${G}n${N}', '${G}r${N}' or '${G}e${N}'."
2018-03-18 15:39:43 +00:00
;;
2019-02-10 16:12:18 +00:00
5) INPMSG="Only enter '${G}d${N}', '${G}y${N}', '${G}n${N}' or '${G}e${N}'."
;;
6) INPMSG="Enter a fingerprint or pick from the options, one at a time."
2018-10-25 06:37:05 +00:00
;;
2018-03-18 15:39:43 +00:00
esac
# Find menu level
case $2 in
2019-02-02 12:37:20 +00:00
1) INPUT=""
2018-03-18 15:39:43 +00:00
;;
2019-02-02 12:37:20 +00:00
2) INPUT2=""
2018-03-18 15:39:43 +00:00
;;
2019-02-02 12:37:20 +00:00
3) INPUT3=""
2018-03-18 15:39:43 +00:00
;;
2019-02-02 12:37:20 +00:00
4) INPUT4=""
2018-03-18 15:39:43 +00:00
;;
2019-02-02 12:37:20 +00:00
5) INPUT5=""
;;
6) INPUT6=""
2018-03-18 15:39:43 +00:00
;;
2019-03-27 10:50:00 +00:00
7) INPUT7=""
;;
2018-03-18 15:39:43 +00:00
esac
echo ""
echo "${R}Invalid input${N}. $INPMSG"
sleep 2
}
exit_fn() {
menu_header "${C}Bye bye.${N}"
echo ""
2018-06-19 09:56:08 +00:00
log_handler "Exiting... Bye bye.\n\n===================="
2018-03-18 15:39:43 +00:00
exit 0
}
# ======================== Device's fingerprint ========================
# Second menu level - fingerprint
menu_change_fingerprint() {
2018-10-30 08:28:47 +00:00
rm -f $CSTMFILE
2018-03-18 15:39:43 +00:00
INPUT2=""
while true
do
2018-04-15 22:05:33 +00:00
if [ -z "$INPUT2" ]; then
2018-03-18 15:39:43 +00:00
menu_header "${C}$1${N}"
echo ""
2019-02-02 12:37:20 +00:00
if [ "$FINGERPRINTENB" == 0 ]; then
2018-03-18 15:39:43 +00:00
echo "Fingerprint modification currently disabled"
echo "because of a conflicting module."
echo ""
echo "Nothing to do... Returning to main menu."
2018-06-19 09:56:08 +00:00
sleep 3
2018-03-18 15:39:43 +00:00
INPUT=""
break
else
2019-02-02 12:37:20 +00:00
if [ "$4" ] && [ "$PRINTEDIT" == 1 ]; then
2018-03-18 15:39:43 +00:00
PRINTMODULETXT=" (by this module)"
else
PRINTMODULETXT=""
fi
2019-04-02 19:42:29 +00:00
if [ "$PRINTSTAGE" == 0 ]; then
PRINTSTAGETXT="default"
elif [ "$PRINTSTAGE" == 1 ]; then
PRINTSTAGETXT="post-fs-data"
elif [ "$PRINTSTAGE" == 2 ]; then
PRINTSTAGETXT="late_start service"
fi
if [ "$PATCHSTAGE" == 0 ]; then
PATCHSTAGETXT="default"
elif [ "$PATCHSTAGE" == 1 ]; then
PATCHSTAGETXT="post-fs-data"
elif [ "$PATCHSTAGE" == 2 ]; then
PATCHSTAGETXT="late_start service"
fi
2018-03-28 16:50:15 +00:00
if [ "$2" ]; then
2018-04-15 22:05:33 +00:00
echo "Currently set to${PRINTMODULETXT}:"
2018-05-06 09:57:49 +00:00
echo ""
if [ "$PRINTMODULETXT" ]; then
2019-02-02 12:37:20 +00:00
get_device_used "$2"
2018-05-06 09:57:49 +00:00
fi
echo ${C}$2${N}
2018-03-28 16:39:57 +00:00
if [ "$2" != "$3" ]; then
2018-05-06 09:57:49 +00:00
echo ""
2018-03-28 16:39:57 +00:00
echo "The original value is:"
echo ${C}$3${N}
fi
else
echo "ro.build.fingerprint doesn't seem to"
echo "currently exist on your system."
2018-03-18 15:39:43 +00:00
fi
echo ""
echo "Enter the new fingerprint or"
echo "pick from the options below."
echo ""
echo "${G}f${N} - Pick a certified fingerprint"
if [ "$PRINTMODULETXT" ]; then
echo "${G}r${N} - Reset fingerprint"
fi
2019-02-02 12:37:20 +00:00
if [ "$ORIGVENDPRINT" ]; then
if [ "$PRINTVEND" == 1 ]; then
VENDTXT="${G} (active)${N}"
else
VENDTXT=""
fi
echo "${G}v${N} - Use vendor fingerprint (for Treble GSI ROMs)${VENDTXT}"
fi
if [ "$OPTIONWEB" == 0 ]; then
2018-04-15 22:05:33 +00:00
echo "${G}u${N} - Update fingerprints list (v$(get_file_value $PRINTSLOC "PRINTSV="))"
fi
2019-04-02 19:42:29 +00:00
echo "${G}s${N} - Boot stages (${C}${PRINTSTAGETXT}/${PATCHSTAGETXT}${N})."
2018-03-18 15:39:43 +00:00
echo "${G}b${N} - Go back."
echo ""
2019-02-02 12:37:20 +00:00
if [ "$PRINTCHK" == 1 ]; then
echo "${R}The device fingerprint has been updated.${N}"
echo "${R}Please reboot to apply.${N}"
echo ""
fi
2018-04-19 03:13:40 +00:00
echo "See the module readme or the"
echo "support thread @ XDA for details."
echo ""
2018-03-18 15:39:43 +00:00
echo -n "Enter '${G}e${N}' to exit: "
read -r INPUT2
fi
fi
case "$INPUT2" in
2018-06-03 16:40:24 +00:00
f|F) menu_pick_print "$1"
2018-03-18 15:39:43 +00:00
;;
2018-06-19 09:56:08 +00:00
r|R)
2018-03-18 15:39:43 +00:00
if [ "$PRINTMODULETXT" ]; then
menu_reset_print "Reset fingerprint"
else
2018-04-15 22:05:33 +00:00
menu_new_print "$1" "$INPUT2" 2
2018-03-18 15:39:43 +00:00
fi
;;
2019-02-02 12:37:20 +00:00
v|V)
if [ "$ORIGVENDPRINT" ]; then
menu_vendor_print "$1"
else
2019-02-10 16:12:18 +00:00
invalid_input 6 2
2019-02-02 12:37:20 +00:00
fi
;;
2018-06-19 09:56:08 +00:00
u|U)
2019-02-02 12:37:20 +00:00
if [ "$OPTIONWEB" == 0 ]; then
2018-06-19 09:56:08 +00:00
menu_update_print "Update fingerprints list"
else
menu_new_print "$1" "$INPUT2" 2
fi
2018-04-15 22:05:33 +00:00
;;
2019-03-27 10:50:00 +00:00
s|S) menu_bootstage_print "$1"
;;
2018-06-03 16:40:24 +00:00
b|B)
2018-03-18 15:39:43 +00:00
INPUT=""
break
;;
2019-02-02 12:37:20 +00:00
e|E) exit_fn
2018-03-18 15:39:43 +00:00
;;
2018-06-03 16:40:24 +00:00
""|[[:blank:]]*) blank_input 2
2018-05-29 20:44:54 +00:00
;;
2018-10-25 06:37:05 +00:00
*)
if [ "${#INPUT2}" -lt 10 ]; then
2019-02-10 16:12:18 +00:00
invalid_input 6 2
2018-10-25 06:37:05 +00:00
else
menu_new_print "$1" "$INPUT2" 2
fi
2018-03-18 15:39:43 +00:00
;;
esac
done
}
# Third menu level - pick fingerprint
2018-04-15 22:05:33 +00:00
menu_pick_print() {
2018-03-18 15:39:43 +00:00
INPUT3=""
2018-04-15 22:05:33 +00:00
OEMLIST=""
2019-03-27 10:50:00 +00:00
HEADERPRINTV="${C}$1${N}\n List version - v$(get_file_value $PRINTSLOC "PRINTSV=")\n Select an option below."
2018-03-18 15:39:43 +00:00
while true
do
2018-04-15 22:05:33 +00:00
if [ -z "$INPUT3" ]; then
2018-10-30 08:28:47 +00:00
# Load the list of fingerprint files
log_handler "Loading fingerprints list v$(get_file_value $PRINTSLOC "PRINTSV=")."
2018-10-25 06:37:05 +00:00
OEMLIST="$(ls $PRINTFILES | sed 's|\.sh||g')"
2018-10-30 08:28:47 +00:00
if [ "$OEMLIST" ]; then
# Check for custom fingerprints list
2018-12-09 09:05:50 +00:00
if [ -s "$CSTMPRINTS" ] && [ ! -f "$CSTMFILE" ]; then
2018-10-30 08:28:47 +00:00
log_handler "Found custom fingerprints list."
2018-12-09 09:05:50 +00:00
format_file $CSTMPRINTS
2018-10-30 08:28:47 +00:00
log_handler "Creating custom prints file."
2018-10-30 08:59:15 +00:00
cat $CSTMPRINTS >> $LOGFILE 2>&1 && echo "" >> $LOGFILE 2>&1
2018-10-30 08:28:47 +00:00
echo -e "PRINTSLIST=\"" >> $CSTMFILE
cat $CSTMPRINTS >> $CSTMFILE
echo -e "\"" >> $CSTMFILE
# Reload the list with new files
OEMLIST="$(ls $PRINTFILES | sed 's|\.sh||g')"
fi
ITEMCOUNT=1
2019-03-27 10:50:00 +00:00
menu_header "$HEADERPRINTV"
2018-10-30 08:28:47 +00:00
echo ""
for ITEM in $OEMLIST; do
echo "${G}$ITEMCOUNT${N} - $ITEM"
ITEMCOUNT=$(($ITEMCOUNT+1))
done
echo "${G}b${N} - Go back"
echo ""
echo -n "Enter '${G}e${N}' to exit: "
read -r INPUT3
else
log_handler "No fingerprints list."
collect_logs "issue"
2018-11-18 06:31:58 +00:00
menu_header "${C}$1${N}\n Something's wrong!"
2018-10-30 08:28:47 +00:00
echo "Hm... That's not right."
echo ""
echo "There is currently no fingerprints list"
echo "available. Try updating it manually."
echo ""
echo "If the issue persists, report it in the"
echo "support thread @ XDA, ${R}with logs!${C}"
echo ""
echo "Logs have automatically been saved to"
echo "your internal storage ${R}(propslogs.tar.gz)${C}."
echo ""
echo -n "Press enter to continue..."
read -r INPUTTMP
INPUT2=""
break
fi
2018-03-18 15:39:43 +00:00
fi
2018-12-09 09:05:50 +00:00
if [ "$INPUT3" -ge 1 ] && [ "$INPUT3" -lt "$ITEMCOUNT" ]; then
2018-03-18 15:39:43 +00:00
ITEMCOUNT=1
2018-04-15 22:05:33 +00:00
for ITEM in $OEMLIST; do
2018-03-18 15:39:43 +00:00
if [ "$ITEMCOUNT" == "$INPUT3" ]; then
2019-03-27 10:50:00 +00:00
menu_pick_print_sub "$HEADERPRINTV" "$ITEM"
2018-03-18 15:39:43 +00:00
break
fi
ITEMCOUNT=$(($ITEMCOUNT+1))
done
2018-06-03 16:40:24 +00:00
elif [ "$INPUT3" == "b" ] || [ "$INPUT3" == "B" ]; then
2018-03-18 15:39:43 +00:00
INPUT2=""
break
2018-06-03 16:40:24 +00:00
elif [ "$INPUT3" == "e" ] || [ "$INPUT3" == "E" ]; then
2018-03-18 15:39:43 +00:00
exit_fn
else
invalid_input 1 3
fi
done
}
2018-04-15 22:05:33 +00:00
# Fourth menu level - pick fingerprint
menu_pick_print_sub() {
2018-10-25 06:37:05 +00:00
# Loading fingerprints
2018-10-30 08:28:47 +00:00
TMPFILE=$PRINTFILES/$2.sh
if [ -f "$TMPFILE" ]; then
. $TMPFILE
INPUT4=""
else
2019-03-27 10:50:00 +00:00
menu_header "$1"
2018-10-30 08:28:47 +00:00
log_handler "Can't find '$TMPFILE'."
collect_logs "issue"
echo "Oh no! Something went wrong..."
echo ""
echo "Can't find the fingerprints file."
echo "Try updating it manually."
echo ""
echo "If the issue persists, report it in the"
echo "support thread @ XDA, ${R}with logs!${C}"
echo ""
echo "Logs have automatically been saved to"
echo "your internal storage ${R}(propslogs.tar.gz)${C}."
echo ""
echo -n "Press enter to continue..."
read -r INPUTTMP
INPUT4="b"
fi
2018-03-18 15:39:43 +00:00
while true
do
2018-04-15 22:05:33 +00:00
if [ -z "$INPUT4" ]; then
ITEMCOUNT=1
2019-03-27 10:50:00 +00:00
menu_header "$1"
2018-04-15 22:05:33 +00:00
echo ""
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
for ITEM in $PRINTSLIST; do
2018-10-30 08:28:47 +00:00
if [ "$(get_first $ITEM)" == "$2" ] || [ "$2" == "Custom" ]; then
2018-05-06 09:57:49 +00:00
echo "${G}$ITEMCOUNT${N} - $(get_eq_left "$ITEM")"
2018-04-15 22:05:33 +00:00
ITEMCOUNT=$(($ITEMCOUNT+1))
fi
done
IFS=$SAVEIFS
echo "${G}b${N} - Go back"
echo ""
echo -n "Enter '${G}e${N}' to exit: "
read -r INPUT4
fi
2018-12-09 09:05:50 +00:00
if [ "$INPUT4" -ge 1 ] && [ "$INPUT4" -lt "$ITEMCOUNT" ]; then
2018-04-15 22:05:33 +00:00
ITEMCOUNT=1
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
for ITEM in $PRINTSLIST; do
2018-10-30 08:28:47 +00:00
if [ "$ITEMCOUNT" == "$INPUT4" ]; then
2019-03-27 10:50:00 +00:00
case "$ITEM" in
*\;*)
2019-04-02 19:42:29 +00:00
IFS=$SAVEIFS
menu_pick_print_version "$1" "$(get_eq_left "$ITEM")" "$(get_eq_right "$ITEM")"
2019-03-27 10:50:00 +00:00
INPUT2=""
INPUT3=""
break
;;
*)
2019-04-02 19:42:29 +00:00
IFS=$SAVEIFS
menu_new_print "$1" "$(get_eq_right "$ITEM")"
2019-03-27 10:50:00 +00:00
INPUT2=""
INPUT3=""
break
;;
esac
2018-04-15 22:05:33 +00:00
fi
2018-10-30 08:28:47 +00:00
ITEMCOUNT=$(($ITEMCOUNT+1))
2018-04-15 22:05:33 +00:00
done
IFS=$SAVEIFS
2018-06-03 16:40:24 +00:00
elif [ "$INPUT4" == "b" ] || [ "$INPUT4" == "B" ]; then
2018-04-15 22:05:33 +00:00
INPUT3=""
break
2018-06-03 16:40:24 +00:00
elif [ "$INPUT4" == "e" ] || [ "$INPUT4" == "E" ]; then
2018-04-15 22:05:33 +00:00
exit_fn
else
invalid_input 1 4
fi
done
}
2019-03-27 10:50:00 +00:00
# Fifth menu level - pick Android version
menu_pick_print_version() {
2018-04-15 22:05:33 +00:00
INPUT5=""
2019-03-27 10:50:00 +00:00
ANDROIDV="$(get_print_versions "$2")"
2018-04-15 22:05:33 +00:00
while true
do
if [ -z "$INPUT5" ]; then
2019-03-27 10:50:00 +00:00
ITEMCOUNT=1
menu_header "$1"
echo ""
echo "There are several fingerprints available"
echo "for this device, for different versions"
echo "of Android. Pick one."
echo ""
echo "${C}$(echo "$2" | sed 's| (.*||')${N}"
echo ""
for ITEM in $ANDROIDV; do
echo "${G}$ITEMCOUNT${N} - Android version ${C}$ITEM${N}"
ITEMCOUNT=$(($ITEMCOUNT+1))
done
echo "${G}b${N} - Go back"
echo ""
echo -n "Enter '${G}e${N}' to exit: "
read -r INPUT5
fi
if [ "$INPUT5" -ge 1 ] && [ "$INPUT5" -lt "$ITEMCOUNT" ]; then
ITEMCOUNT=1
for ITEM in $ANDROIDV; do
if [ "$ITEMCOUNT" == "$INPUT5" ]; then
TMPPRINT="$(echo $3 | cut -f $ITEMCOUNT -d ';')"
menu_new_print "$1" "$TMPPRINT"
INPUT2=""
INPUT3=""
INPUT4=""
break
fi
ITEMCOUNT=$(($ITEMCOUNT+1))
done
elif [ "$INPUT5" == "b" ] || [ "$INPUT5" == "B" ]; then
INPUT4=""
break
elif [ "$INPUT5" == "e" ] || [ "$INPUT5" == "E" ]; then
exit_fn
else
invalid_input 1 5
fi
done
}
# Sixth menu level - confirm fingerprint
menu_new_print() {
INPUT6=""
PRINTDISP="$(get_print_display $2)"
while true
do
if [ -z "$INPUT6" ]; then
2018-03-18 15:39:43 +00:00
menu_header "${C}$1${N}"
echo ""
echo "You are about to use the following as your device's fingerprint."
2018-05-06 09:57:49 +00:00
echo ""
2019-02-02 12:37:20 +00:00
get_device_used "$2"
2018-10-21 14:17:11 +00:00
echo "${V}$PRINTDISP${N}"
2018-03-18 15:39:43 +00:00
echo ""
echo "Make sure that it is correct before continuing."
echo ""
echo -n "Enter ${G}y${N}(es), ${G}n${N}(o) or ${G}e${N}(xit): "
2019-03-27 10:50:00 +00:00
read -r INPUT6
2018-03-18 15:39:43 +00:00
fi
2019-03-27 10:50:00 +00:00
case "$INPUT6" in
2018-06-03 16:40:24 +00:00
y|Y)
2018-05-06 09:57:49 +00:00
change_print "$1" "$2"
2019-02-02 12:37:20 +00:00
if [ "$DEVSIM" == 0 ]; then
menu_devsim_activate "$1"
fi
INPUT2=""
INPUT3=""
INPUT4=""
2019-03-27 10:50:00 +00:00
INPUT5=""
2018-03-18 15:39:43 +00:00
break
;;
2018-06-03 16:40:24 +00:00
n|N)
2018-03-18 15:39:43 +00:00
INPUT2=""
INPUT3=""
2018-04-15 22:05:33 +00:00
INPUT4=""
2019-03-27 10:50:00 +00:00
INPUT5=""
2018-03-18 15:39:43 +00:00
break
;;
2019-02-02 12:37:20 +00:00
e|E) exit_fn
2018-03-18 15:39:43 +00:00
;;
2019-03-27 10:50:00 +00:00
*) invalid_input 3 6
2018-03-18 15:39:43 +00:00
;;
esac
done
}
2019-03-27 10:50:00 +00:00
# Seventh menu level - activate device simulation
2019-02-02 12:37:20 +00:00
menu_devsim_activate() {
2019-03-27 10:50:00 +00:00
INPUT7=""
2019-02-02 12:37:20 +00:00
while true
do
2019-03-27 10:50:00 +00:00
if [ -z "$INPUT7" ]; then
2019-02-02 12:37:20 +00:00
menu_header "${C}$1${N}"
echo ""
2019-02-10 16:12:18 +00:00
echo "The device fingerprint has been updated."
2019-02-02 12:37:20 +00:00
echo ""
2019-02-10 16:12:18 +00:00
echo "Reboot for changes to take effect."
echo ""
2019-04-02 19:42:29 +00:00
echo "${G}Do you want to reboot now (y/n)?${N}"
2019-02-10 16:12:18 +00:00
echo ""
echo "You have just chosen a new device"
echo "fingerprint. Enter ${G}d${N} to"
echo "activate basic device simulation."
echo "See the module documentation for"
echo "details about this feature."
2019-04-02 19:42:29 +00:00
echo ""
echo "Note: device simulation is not needed"
echo "for passing SafetyNet's CTS profile"
echo "and may even cause issues. Don't enable"
echo "unless you actually need it."
2019-02-10 16:12:18 +00:00
echo ""
2019-03-27 10:50:00 +00:00
echo -n "Enter ${G}y${N}(es), ${G}n${N}(o), ${G}d${N} or ${G}e${N}(xit): "
read -r INPUT7
2019-02-02 12:37:20 +00:00
fi
2019-03-27 10:50:00 +00:00
case "$INPUT7" in
2019-02-10 16:12:18 +00:00
d|D)
2019-02-02 12:37:20 +00:00
INPUT2=""
INPUT3=""
INPUT4=""
INPUT5=""
2019-03-27 10:50:00 +00:00
INPUT6=""
2019-02-02 12:37:20 +00:00
change_dev_sim "Device simulation"
break
;;
2019-02-10 16:12:18 +00:00
y|Y)
force_reboot
;;
2019-02-02 12:37:20 +00:00
n|N)
INPUT2=""
INPUT3=""
INPUT4=""
INPUT5=""
2019-03-27 10:50:00 +00:00
INPUT6=""
2019-04-02 19:42:29 +00:00
# Update the reboot variable
reboot_chk
# Load all values
all_values
# Update the system.prop file
system_prop
2019-02-02 12:37:20 +00:00
break
;;
e|E) exit_fn
;;
2019-03-27 10:50:00 +00:00
*) invalid_input 5 7
2019-02-02 12:37:20 +00:00
;;
esac
done
}
2018-03-18 15:39:43 +00:00
# Third menu level - Reset fingerprint
menu_reset_print() {
INPUT3=""
while true
do
2018-04-15 22:05:33 +00:00
if [ -z "$INPUT3" ]; then
2018-03-18 15:39:43 +00:00
menu_header "${C}$1${N}"
echo ""
echo "This will reset the device"
echo "fingerprint to the default value."
echo ""
echo "Do you want to continue?"
echo ""
echo -n "Enter ${G}y${N}(es), ${G}n${N}(o) or ${G}e${N}(xit): "
read -r INPUT3
fi
case "$INPUT3" in
2018-06-03 16:40:24 +00:00
y|Y)
2018-03-18 15:39:43 +00:00
reset_print "$1"
2019-02-02 12:37:20 +00:00
INPUT2=""
2018-03-18 15:39:43 +00:00
break
;;
2018-06-03 16:40:24 +00:00
n|N)
2018-03-18 15:39:43 +00:00
INPUT2=""
break
;;
2019-02-02 12:37:20 +00:00
e|E) exit_fn
;;
*) invalid_input 3 3
;;
esac
done
}
# Third menu level - Vendor fingerprint
menu_vendor_print() {
INPUT3=""
while true
do
if [ "$PRINTVEND" == 0 ]; then
STATETXT="${G}enable${N}"
CURRTXT="${R}disabled${N}"
TMPVAL=1
else
STATETXT="${R}disable${N}"
CURRTXT="${G}enabled${N}"
TMPVAL=0
fi
if [ -z "$INPUT3" ]; then
menu_header "${C}$1${N}"
echo ""
echo "This will $STATETXT using the vendor"
echo "fingerprint for Treble GSI ROMs."
echo ""
echo "The option is currently $CURRTXT."
echo ""
echo "Do you want to continue?"
echo ""
echo "See the module readme or the"
echo "support thread @ XDA for details."
echo ""
echo -n "Enter ${G}y${N}(es), ${G}n${N}(o) or ${G}e${N}(xit): "
read -r INPUT3
fi
case "$INPUT3" in
y|Y)
change_print_vendor "$1" "$TMPVAL"
if [ "$DEVSIM" == 0 ] && [ "$TMPVAL" == 1 ]; then
menu_devsim_activate "$1"
fi
INPUT2=""
break
;;
n|N)
INPUT2=""
break
;;
e|E) exit_fn
2018-03-18 15:39:43 +00:00
;;
*) invalid_input 3 3
;;
esac
done
}
2018-04-15 22:05:33 +00:00
# Third menu level - Update fingerprints list
menu_update_print() {
INPUT3=""
while true
do
if [ -z "$INPUT3" ]; then
menu_header "${C}$1${N}\n List version - v$(get_file_value $PRINTSLOC "PRINTSV=")"
echo ""
echo "Do you want to check online if there"
echo "is an update to the fingerprints list?"
echo ""
echo -n "Enter ${G}y${N}(es), ${G}n${N}(o) or ${G}e${N}(xit): "
read -r INPUT3
2018-03-18 15:39:43 +00:00
fi
2018-04-15 22:05:33 +00:00
case "$INPUT3" in
2018-06-03 16:40:24 +00:00
y|Y)
2018-04-15 22:05:33 +00:00
download_prints "manual"
INPUT2=""
break
;;
2018-06-03 16:40:24 +00:00
n|N)
2018-04-15 22:05:33 +00:00
INPUT2=""
break
;;
2019-02-02 12:37:20 +00:00
e|E) exit_fn
;;
*) invalid_input 3 3
;;
esac
done
}
2019-03-27 10:50:00 +00:00
# Third menu level - Boot stage
menu_bootstage_print() {
INPUT3=""
while true
do
if [ -z "$INPUT3" ]; then
if [ "$PRINTSTAGE" == 0 ]; then
2019-04-02 19:42:29 +00:00
PRINTSTAGETXT=" ${C}(default)${N}"
elif [ "$PRINTSTAGE" == 1 ]; then
PRINTSTAGETXT=" ${C}(post-fs-data)${N}"
elif [ "$PRINTSTAGE" == 2 ]; then
PRINTSTAGETXT=" ${C}(late_start service)${N}"
fi
if [ "$PATCHSTAGE" == 0 ]; then
PATCHSTAGETXT=" ${C}(default)${N}"
elif [ "$PATCHSTAGE" == 1 ]; then
PATCHSTAGETXT=" ${C}(post-fs-data)${N}"
elif [ "$PATCHSTAGE" == 2 ]; then
PATCHSTAGETXT=" ${C}(late_start service)${N}"
fi
menu_header "${C}$1${N}"
echo ""
echo "Change boot stage for the device fingerprint"
echo "or security patch date props."
echo ""
echo "Pick an option below."
echo ""
echo "${G}1${N} - Device fingerprint$PRINTSTAGETXT."
echo "${G}2${N} - Security patch date$PATCHSTAGETXT."
echo "${G}b${N} - Go back"
echo ""
echo -n "Enter '${G}e${N}' to exit: "
read -r INPUT3
fi
case "$INPUT3" in
1)
menu_bootstage_print_set "$1" "print"
INPUT2=""
break
;;
2)
menu_bootstage_print_set "$1" "patch"
INPUT2=""
break
;;
b|B)
INPUT2=""
break
;;
e|E) exit_fn
;;
*) invalid_input 1 3
;;
esac
done
}
# Fourth menu level - Set boot stage
menu_bootstage_print_set() {
INPUT4=""
while true
do
if [ -z "$INPUT4" ]; then
if [ "$2" == "print" ]; then
PROPTXT="fingerprint"
TMPSTAGE=$PRINTSTAGE
CHNGSTAGE="PRINTSTAGE"
elif [ "$2" == "patch" ]; then
PROPTXT="security patch date"
TMPSTAGE=$PATCHSTAGE
CHNGSTAGE="PATCHSTAGE"
fi
if [ "$TMPSTAGE" == 0 ]; then
2019-03-27 10:50:00 +00:00
CURRTXT="default"
TMPTXT="${C}post-fs-data${N} or ${C}late_start sevice${N}"
CHOICETXT="${G}p${N}(ost), ${G}l${N}(ate)"
2019-04-02 19:42:29 +00:00
elif [ "$TMPSTAGE" == 1 ]; then
2019-03-27 10:50:00 +00:00
CURRTXT="post-fs-data"
TMPTXT="${C}default${N} or ${C}late_start service${N}"
CHOICETXT="${G}d${N}(efault), ${G}l${N}(ate)"
2019-04-02 19:42:29 +00:00
elif [ "$TMPSTAGE" == 2 ]; then
2019-03-27 10:50:00 +00:00
CURRTXT="late_start service"
TMPTXT="${C}default${N} or ${C}post-fs-data${N}"
CHOICETXT="${G}d${N}(efault), ${G}p${N}(post)"
fi
menu_header "${C}$1${N}"
echo ""
2019-04-02 19:42:29 +00:00
echo "Current boot stage for $PROPTXT is"
echo "${G}$CURRTXT${N}."
2019-03-27 10:50:00 +00:00
echo ""
echo "Do you want to change it to"
echo "$TMPTXT?"
echo ""
echo -n "Enter $CHOICETXT, ${G}b${N}(ack) or ${G}e${N}(xit): "
2019-04-02 19:42:29 +00:00
read -r INPUT4
2019-03-27 10:50:00 +00:00
fi
2019-04-02 19:42:29 +00:00
case "$INPUT4" in
2019-03-27 10:50:00 +00:00
d|D)
2019-04-02 19:42:29 +00:00
if [ "$TMPSTAGE" != 0 ]; then
2019-03-27 10:50:00 +00:00
OPTNEW=0
2019-04-02 19:42:29 +00:00
log_handler "Boot stage for $PROPTXT changed to default."
replace_fn $CHNGSTAGE $TMPSTAGE $OPTNEW $LATEFILE
2019-03-27 10:50:00 +00:00
# Load module values
. $LATEFILE
2019-04-02 19:42:29 +00:00
INPUT3=""
after_change "$1"
2019-03-27 10:50:00 +00:00
break
else
2019-04-02 19:42:29 +00:00
invalid_input 1 4
2019-03-27 10:50:00 +00:00
fi
;;
p|P)
2019-04-02 19:42:29 +00:00
if [ "$TMPSTAGE" != 1 ]; then
2019-03-27 10:50:00 +00:00
OPTNEW=1
2019-04-02 19:42:29 +00:00
log_handler "Boot stage for $PROPTXT changed to post-fs-data."
replace_fn $CHNGSTAGE $TMPSTAGE $OPTNEW $LATEFILE
2019-03-27 10:50:00 +00:00
# Load module values
. $LATEFILE
2019-04-02 19:42:29 +00:00
INPUT3=""
after_change "$1"
2019-03-27 10:50:00 +00:00
break
else
2019-04-02 19:42:29 +00:00
invalid_input 1 4
2019-03-27 10:50:00 +00:00
fi
;;
l|L)
2019-04-02 19:42:29 +00:00
if [ "$TMPSTAGE" != 2 ]; then
2019-03-27 10:50:00 +00:00
OPTNEW=2
2019-04-02 19:42:29 +00:00
log_handler "Boot stage for $PROPTXT changed to late_start service."
replace_fn $CHNGSTAGE $TMPSTAGE $OPTNEW $LATEFILE
2019-03-27 10:50:00 +00:00
# Load module values
. $LATEFILE
2019-04-02 19:42:29 +00:00
INPUT3=""
after_change "$1"
2019-03-27 10:50:00 +00:00
break
else
2019-04-02 19:42:29 +00:00
invalid_input 1 4
2019-03-27 10:50:00 +00:00
fi
;;
b|B)
2019-04-02 19:42:29 +00:00
INPUT3=""
2019-03-27 10:50:00 +00:00
break
;;
e|E) exit_fn
;;
2019-04-02 19:42:29 +00:00
*) invalid_input 1 4
2019-03-27 10:50:00 +00:00
;;
esac
done
}
2019-02-02 12:37:20 +00:00
# ======================== Device simulation ========================
# Second menu level - Device simulation
menu_dev_sim() {
INPUT2=""
while true
do
ENABLE="${G} (enabled)${N}"
DISABLE="${R} (disabled)${N}"
DEVSIMTXT=""
DESCRIPTIONTXT=""
2019-03-27 10:50:00 +00:00
SDKTXT=""
2019-02-02 12:37:20 +00:00
if [ "$DEVSIM" == 1 ]; then
DEVSIMTXT=$ENABLE
else
DEVSIMTXT=$DISABLE
fi
for ITEM in $PRINTPARTS; do
TMPPROP=$(get_prop_type $ITEM | tr '[:lower:]' '[:upper:]')
TMPVAR=$(echo "${TMPPROP}TXT")
if [ "$(get_file_value $LATEFILE "${TMPPROP}SET=")" == 1 ]; then
eval "${TMPPROP}TXT='$ENABLE'"
elif [ "$(get_file_value $LATEFILE "${TMPPROP}SET=")" == 0 ]; then
eval "${TMPPROP}TXT='$DISABLE'"
else
eval "${TMPPROP}TXT="
fi
done
if [ "$DESCRIPTIONSET" == 1 ]; then
DESCRIPTIONTXT=$ENABLE
else
DESCRIPTIONTXT=$DISABLE
fi
2019-03-27 10:50:00 +00:00
if [ "$SDKSET" == 1 ]; then
SDKTXT=$ENABLE
else
SDKTXT=$DISABLE
fi
if [ "$SIMSTAGE" == 0 ]; then
2019-04-02 19:42:29 +00:00
STAGETXT=" ${C}(default)${N}"
2019-03-27 10:50:00 +00:00
elif [ "$SIMSTAGE" == 1 ]; then
2019-04-02 19:42:29 +00:00
STAGETXT=" ${C}(post-fs-data)${N}"
2019-03-27 10:50:00 +00:00
elif [ "$SIMSTAGE" == 2 ]; then
2019-04-02 19:42:29 +00:00
STAGETXT=" ${C}(late_start service)${N}"
2019-03-27 10:50:00 +00:00
fi
2019-02-02 12:37:20 +00:00
if [ -z "$INPUT2" ]; then
menu_header "${C}$1${N}"
echo ""
if [ "$PRINTEDIT" == 0 ]; then
echo "This option is only enabled if there"
echo "is a fingerprint set by the module."
echo ""
echo "Nothing to do... Returning to main menu."
sleep 3
INPUT=""
break
fi
echo "This setting will do basic device"
echo "simulation by setting certain props"
echo "based on the currently set device"
echo "fingerprint."
echo ""
2019-03-27 10:50:00 +00:00
echo "Note that this is not necessary to pass"
2019-04-02 19:42:29 +00:00
echo "SafetyNet's CTS profile check and may"
echo "cause issues. Only enable if you really"
echo "need it."
2019-03-27 10:50:00 +00:00
echo ""
2019-02-02 12:37:20 +00:00
echo "Pick an option below."
echo ""
echo "${G}s${N} - Device simulation${DEVSIMTXT}"
if [ "$DEVSIM" == 1 ]; then
echo "${G}1${N} - ro.product.brand${BRANDTXT}"
echo "${G}2${N} - ro.product.name${NAMETXT}"
echo "${G}3${N} - ro.product.device${DEVICETXT}"
echo "${G}4${N} - ro.build.version.release${RELEASETXT}"
echo "${G}5${N} - ro.build.id${IDTXT}"
echo "${G}6${N} - ro.build.version.incremental${INCREMENTALTXT}"
2019-03-27 10:50:00 +00:00
echo "${G}7${N} - ro.build.version.sdk${SDKTXT}"
2019-02-02 12:37:20 +00:00
fi
echo "${G}d${N} - ro.build.description${DESCRIPTIONTXT}"
2019-03-27 10:50:00 +00:00
echo "${G}t${N} - Boot stage$STAGETXT."
2019-02-02 12:37:20 +00:00
echo "${G}b${N} - Go back"
echo ""
echo "See the module readme or the"
echo "support thread @ XDA for details."
echo ""
echo -n "Enter '${G}e${N}' to exit: "
read -r INPUT2
fi
case "$INPUT2" in
s|S) menu_dev_sim_enable "$1"
;;
2019-03-27 10:50:00 +00:00
1|2|3|4|5|6|7|d|D)
2019-02-02 12:37:20 +00:00
if [ "$DEVSIM" == 1 ] || [ "$INPUT2" == "d" -o "$INPUT2" == "D" ]; then
menu_dev_sim_prop "$1" "$INPUT2"
else
invalid_input 1 2
fi
;;
2019-03-27 10:50:00 +00:00
t|T) menu_bootstage_sim "$1"
;;
2019-02-02 12:37:20 +00:00
b|B)
INPUT=""
break
;;
e|E) exit_fn
;;
*) invalid_input 1 2
;;
esac
done
}
# Third menu level - Enable device simulation
menu_dev_sim_enable() {
INPUT3=""
while true
do
if [ "$DEVSIM" == 0 ]; then
STATETXT="${G}enable${N}"
CURRTXT="${R}disabled${N}"
else
STATETXT="${R}disable${N}"
CURRTXT="${G}enabled${N}"
fi
if [ -z "$INPUT3" ]; then
menu_header "${C}$1${N}"
echo ""
echo "Do you want to $STATETXT basic"
echo "device simulation?"
echo ""
echo "Currently $CURRTXT."
echo ""
if [ "$DEVSIM" == 0 ]; then
echo "Enabling this option will set"
echo "certain props based on the"
echo "currently set device fingerprint."
echo ""
fi
echo -n "Enter ${G}y${N}(es), ${G}n${N}(o) or ${G}e${N}(xit): "
read -r INPUT3
fi
case "$INPUT3" in
y|Y)
change_dev_sim "$1"
INPUT2=""
break
;;
n|N)
INPUT2=""
break
;;
e|E) exit_fn
;;
*) invalid_input 3 3
;;
esac
done
}
# Third menu level - Set device simulation props
menu_dev_sim_prop() {
INPUT3=""
while true
do
case "$2" in
1) TMPTXT="ro.build.brand"
;;
2) TMPTXT="ro.build.name"
;;
3) TMPTXT="ro.build.device"
;;
4) TMPTXT="ro.build.version.release"
;;
5) TMPTXT="ro.build.id"
;;
6) TMPTXT="ro.build.version.incremental"
;;
2019-03-27 10:50:00 +00:00
7) TMPTXT="ro.build.version.sdk"
;;
2019-02-02 12:37:20 +00:00
d|D) TMPTXT="ro.build.description"
;;
esac
TMPPROP=$(get_prop_type $TMPTXT | tr '[:lower:]' '[:upper:]')
if [ "$(get_file_value $LATEFILE "${TMPPROP}SET=")" == 0 ]; then
STATETXT="${G}enable${N}"
CURRTXT="${R}disabled${N}"
TMPVAL=1
else
STATETXT="${R}disable${N}"
CURRTXT="${G}enabled${N}"
TMPVAL=0
fi
if [ -z "$INPUT3" ]; then
menu_header "${C}$1${N}"
echo ""
echo "Do you want to $STATETXT editing of"
echo "${C}${TMPTXT}${N}?"
echo "It is currently $CURRTXT."
echo ""
echo -n "Enter ${G}y${N}(es), ${G}n${N}(o) or ${G}e${N}(xit): "
read -r INPUT3
fi
case "$INPUT3" in
y|Y)
if [ "$TMPPROP" == "DESCRIPTION" ]; then
change_sim_descr "$1" "$TMPVAL"
else
change_sim_prop "$1" "$TMPTXT" "$TMPVAL"
fi
INPUT2=""
break
;;
n|N)
INPUT2=""
break
;;
e|E) exit_fn
2018-04-15 22:05:33 +00:00
;;
*) invalid_input 3 3
;;
esac
2018-03-18 15:39:43 +00:00
done
}
2019-03-27 10:50:00 +00:00
# Third menu level - Boot stage
menu_bootstage_sim() {
INPUT3=""
while true
do
if [ -z "$INPUT3" ]; then
if [ "$SIMSTAGE" == 0 ]; then
CURRTXT="default"
TMPTXT="${C}post-fs-data${N} or ${C}late_start sevice${N}"
CHOICETXT="${G}p${N}(ost), ${G}l${N}(ate)"
elif [ "$SIMSTAGE" == 1 ]; then
CURRTXT="post-fs-data"
TMPTXT="${C}default${N} or ${C}late_start service${N}"
CHOICETXT="${G}d${N}(efault), ${G}l${N}(ate)"
elif [ "$SIMSTAGE" == 2 ]; then
CURRTXT="late_start service"
TMPTXT="${C}default${N} or ${C}post-fs-data${N}"
CHOICETXT="${G}d${N}(efault), ${G}p${N}(post)"
fi
menu_header "${C}$1${N}"
echo ""
echo "Current boot stage is ${G}$CURRTXT${N}."
echo ""
echo "Do you want to change it to"
echo "$TMPTXT?"
echo ""
echo -n "Enter $CHOICETXT, ${G}b${N}(ack) or ${G}e${N}(xit): "
read -r INPUT3
fi
case "$INPUT3" in
d|D)
if [ "$SIMSTAGE" != 0 ]; then
OPTNEW=0
log_handler "Boot stage changed to default."
replace_fn SIMSTAGE $SIMSTAGE $OPTNEW $LATEFILE
# Load module values
. $LATEFILE
INPUT2=""
2019-04-02 19:42:29 +00:00
after_change "$1"
2019-03-27 10:50:00 +00:00
break
else
invalid_input 1 3
fi
;;
p|P)
if [ "$SIMSTAGE" != 1 ]; then
OPTNEW=1
log_handler "Boot stage changed to post-fs-data."
replace_fn SIMSTAGE $SIMSTAGE $OPTNEW $LATEFILE
# Load module values
. $LATEFILE
INPUT2=""
2019-04-02 19:42:29 +00:00
after_change "$1"
2019-03-27 10:50:00 +00:00
break
else
invalid_input 1 3
fi
;;
l|L)
if [ "$SIMSTAGE" != 2 ]; then
OPTNEW=2
log_handler "Boot stage changed to late_start service."
replace_fn SIMSTAGE $SIMSTAGE $OPTNEW $LATEFILE
# Load module values
. $LATEFILE
INPUT2=""
2019-04-02 19:42:29 +00:00
after_change "$1"
2019-03-27 10:50:00 +00:00
break
else
invalid_input 1 3
fi
;;
b|B)
INPUT2=""
break
;;
e|E) exit_fn
;;
*) invalid_input 1 3
;;
esac
done
}
2018-04-15 22:05:33 +00:00
# ======================== Edit props files ========================
2018-03-18 15:39:43 +00:00
# Second menu level - prop files
menu_edit_prop_files() {
INPUT2=""
while true
do
2018-04-15 22:05:33 +00:00
if [ -z "$INPUT2" ]; then
2018-03-18 15:39:43 +00:00
menu_header "${C}$1${N}"
echo ""
# Checks if file values are "safe"
2019-02-02 12:37:20 +00:00
if [ "$FILESAFE" == 1 ]; then
2018-03-18 15:39:43 +00:00
echo "Prop file modification currently disabled,"
echo "since all relevant file values are \"safe\"."
echo ""
2019-02-02 12:37:20 +00:00
echo "The option is not needed."
echo ""
2018-03-18 15:39:43 +00:00
if [ "$2" == "p" ]; then
echo "Nothing to do... Exiting."
exit 0
else
echo "Nothing to do... Returning to main menu."
2018-06-19 09:56:08 +00:00
sleep 3
2018-03-18 15:39:43 +00:00
INPUT=""
break
fi
else
# Checks if editing prop files is enabled and/or active
2019-02-02 12:37:20 +00:00
if [ "$BUILDEDIT" == 1 ] || [ "$DEFAULTEDIT" == 1 ]; then
if [ "$BUILDPROPENB" == 1 ]; then
echo "This will ${R}disable${N} editing values in"
echo "build.prop and default.prop."
2018-03-18 15:39:43 +00:00
else
2019-02-02 12:37:20 +00:00
echo "This will ${R}disable${N} editing values in"
echo "default.prop."
2018-03-18 15:39:43 +00:00
fi
else
2019-02-02 12:37:20 +00:00
if [ "$BUILDPROPENB" == 1 ]; then
echo "This will ${G}enable${N} editing values in"
echo "build.prop and default.prop to match the values"
2018-03-18 15:39:43 +00:00
else
2019-02-02 12:37:20 +00:00
echo "This will ${G}enable${N} editing values in"
2018-03-18 15:39:43 +00:00
echo "default.prop to match the values"
fi
echo "set by MagiskHide or this module."
fi
echo ""
2019-02-02 12:37:20 +00:00
if [ "$BUILDPROPENB" == 0 ]; then
2018-03-18 15:39:43 +00:00
echo "Please note that build.prop editing is"
2019-02-02 12:37:20 +00:00
echo "${R}disabled${N} because of a conflicting module."
2018-03-18 15:39:43 +00:00
echo ""
fi
echo "Do you want to continue?"
2019-02-02 12:37:20 +00:00
if [ "$BUILDEDIT" == 1 ] || [ "$DEFAULTEDIT" == 1 ]; then
2018-04-19 03:13:40 +00:00
echo ""
echo "Enter ${G}r${N} to re-apply the settings."
echo "This option is only useful if there's been"
echo "an update to the \"Improved hiding\" feature."
fi
echo ""
echo "See the module readme or the"
echo "support thread @ XDA for details."
2018-03-18 15:39:43 +00:00
echo ""
if [ "$2" == "p" ]; then
echo -n "Enter ${G}y${N}(es) or ${G}n${N}(o): "
LOGTXT=" (option -p)"
INV1=2
INV2=1
else
echo -n "Enter ${G}y${N}(es), ${G}n${N}(o) or ${G}e${N}(xit): "
LOGTXT=""
INV1=3
INV2=2
fi
read -r INPUT2
fi
fi
case "$INPUT2" in
2018-06-03 16:40:24 +00:00
y|Y)
2019-02-02 12:37:20 +00:00
if [ "$BUILDEDIT" == 1 ] || [ "$DEFAULTEDIT" == 1 ]; then
2018-04-15 22:05:33 +00:00
reset_prop_files "$1" "$2" "$LOGTXT"
2018-03-18 15:39:43 +00:00
else
2018-04-15 22:05:33 +00:00
edit_prop_files "$1" "$2" "$LOGTXT"
2018-03-18 15:39:43 +00:00
fi
2019-02-02 12:37:20 +00:00
INPUT=""
2018-03-18 15:39:43 +00:00
break
;;
2018-06-03 16:40:24 +00:00
n|N)
2018-03-18 15:39:43 +00:00
if [ "$2" == "p" ]; then
exit_fn
else
INPUT=""
break
fi
;;
2018-06-03 16:40:24 +00:00
r|R)
2019-02-02 12:37:20 +00:00
if [ "$BUILDEDIT" == 1 ] || [ "$DEFAULTEDIT" == 1 ]; then
2018-04-19 03:13:40 +00:00
edit_prop_files "$1" "$2" "$LOGTXT"
else
invalid_input $INV1 $INV2
fi
;;
2018-06-03 16:40:24 +00:00
e|E)
2018-03-18 15:39:43 +00:00
if [ "$2" == "p" ]; then
invalid_input $INV1 $INV2
else
exit_fn
fi
;;
*) invalid_input $INV1 $INV2
;;
esac
done
}
# ======================== MagiskHide Props ========================
# Second menu level - MagiskHide props
menu_magiskhide_props() {
INPUT2=""
while true
do
ACTIVE="${G} (active)${N}"
DEBUGGABLETXT=""
SECURETXT=""
TYPETXT=""
TAGSTXT=""
SELINUXTXT=""
2018-04-15 22:05:33 +00:00
if [ -z "$INPUT2" ]; then
2019-02-02 12:37:20 +00:00
if [ "$REDEBUGGABLE" == "true" ]; then
2018-03-18 15:39:43 +00:00
DEBUGGABLETXT=$ACTIVE
fi
2019-02-02 12:37:20 +00:00
if [ "$RESECURE" == "true" ]; then
2018-03-18 15:39:43 +00:00
SECURETXT=$ACTIVE
fi
2019-02-02 12:37:20 +00:00
if [ "$RETYPE" == "true" ]; then
2018-03-18 15:39:43 +00:00
TYPETXT=$ACTIVE
fi
2019-02-02 12:37:20 +00:00
if [ "RETAGS" == "true" ]; then
2018-03-18 15:39:43 +00:00
TAGSTXT=$ACTIVE
fi
2019-02-02 12:37:20 +00:00
if [ "$RESELINUX" == "true" ]; then
2018-03-18 15:39:43 +00:00
SELINUXTXT=$ACTIVE
fi
menu_header "${C}$1${N}\n Select an option below:"
echo ""
2018-04-19 03:13:40 +00:00
echo "Change the sensitive props set by MagiskHide."
echo ""
2018-04-15 22:05:33 +00:00
echo "${G}1${N} - ro.debuggable${DEBUGGABLETXT}"
echo "${G}2${N} - ro.secure${SECURETXT}"
echo "${G}3${N} - ro.build.type${TYPETXT}"
echo "${G}4${N} - ro.build.tags${TAGSTXT}"
echo "${G}5${N} - ro.build.selinux${SELINUXTXT}"
2019-02-02 12:37:20 +00:00
if [ "$PROPCOUNT" -gt 1 ]; then
2018-03-18 15:39:43 +00:00
echo "${G}r${N} - Reset all props"
fi
echo "${G}b${N} - Go back to main menu"
echo ""
2018-04-19 03:13:40 +00:00
echo "See the module readme or the"
echo "support thread @ XDA for details."
echo ""
2018-03-18 15:39:43 +00:00
echo -n "Enter '${G}e${N}' to exit: "
read -r INPUT2
fi
case "$INPUT2" in
2018-06-03 16:40:24 +00:00
1) menu_change_prop "ro.debuggable" $CURRDEBUGGABLE $ORIGDEBUGGABLE $MODULEDEBUGGABLE
2018-03-18 15:39:43 +00:00
;;
2018-06-03 16:40:24 +00:00
2) menu_change_prop "ro.secure" $CURRSECURE $ORIGSECURE $MODULESECURE
2018-03-18 15:39:43 +00:00
;;
2018-06-03 16:40:24 +00:00
3) menu_change_prop "ro.build.type" $CURRTYPE $ORIGTYPE $MODULETYPE
2018-03-18 15:39:43 +00:00
;;
2018-06-03 16:40:24 +00:00
4) menu_change_prop "ro.build.tags" $CURRTAGS $ORIGTAGS $MODULETAGS
2018-03-18 15:39:43 +00:00
;;
2018-06-03 16:40:24 +00:00
5) menu_change_prop "ro.build.selinux" $CURRSELINUX $ORIGSELINUX $MODULESELINUX
2018-03-18 15:39:43 +00:00
;;
2018-06-03 16:40:24 +00:00
r|R)
2019-02-02 12:37:20 +00:00
if [ "$PROPCOUNT" -gt 1 ]; then
2018-03-18 15:39:43 +00:00
menu_reset_prop_all "Reset all props"
else
invalid_input 1 2
fi
;;
2018-06-03 16:40:24 +00:00
b|B)
2018-03-18 15:39:43 +00:00
INPUT=""
break
;;
2019-02-02 12:37:20 +00:00
e|E) exit_fn
2018-03-18 15:39:43 +00:00
;;
*) invalid_input 1 2
;;
esac
done
}
# Third menu level - MagiskHide props
menu_change_prop() {
INPUT3=""
while true
do
2018-04-15 22:05:33 +00:00
if [ -z "$INPUT3" ]; then
2018-03-18 15:39:43 +00:00
PROP=$(get_prop_type "$1")
2018-04-15 22:05:33 +00:00
REPROP=$(echo "RE${PROP}" | tr '[:lower:]' '[:upper:]')
2018-03-18 15:39:43 +00:00
menu_header "${C}$1${N}"
echo ""
# Checks if the prop exists
if [ "$2" ]; then
2018-04-15 22:05:33 +00:00
if [ "$4" ] && [ "$(get_file_value $LATEFILE "${REPROP}=")" == "true" ]; then
2018-03-18 15:39:43 +00:00
PROPMODULETXT=", by this module"
BACKTXT=" back"
else
PROPMODULETXT=""
BACKTXT=""
fi
2018-04-15 22:05:33 +00:00
echo "Currently set to ${C}$2${N}${PROPMODULETXT}."
2018-03-18 15:39:43 +00:00
if [ "$2" != "$3" ]; then
echo "The original value is ${C}$3${N}."
fi
echo ""
safe_props "$1" $2
change_to "$1" $2
if [ "$SAFE" == 1 ]; then
echo "You currently have the safe value set."
echo "Are you sure you want to change it$BACKTXT to ${C}$CHANGE${N}?"
else
2018-04-15 22:05:33 +00:00
echo "Do you want to change it${BACKTXT} to ${C}$CHANGE${N}?"
2018-03-18 15:39:43 +00:00
fi
echo ""
echo -n "Enter ${G}y${N}(es), ${G}n${N}(o) or ${G}e${N}(xit): "
read -r INPUT3
else
INPUT3="n"
echo "This prop doesn't currently exist on your system."
echo ""
echo "Nothing to do... Returning to main menu."
2018-06-19 09:56:08 +00:00
sleep 3
2018-03-18 15:39:43 +00:00
fi
fi
case "$INPUT3" in
2018-06-03 16:40:24 +00:00
y|Y)
2018-03-18 15:39:43 +00:00
if [ "$PROPMODULETXT" ]; then
menu_reset_prop "Reset $1" "$1"
else
change_prop "$1" $CHANGE
fi
2019-02-02 12:37:20 +00:00
INPUT2=""
2018-03-18 15:39:43 +00:00
break
;;
2018-06-03 16:40:24 +00:00
n|N)
2018-03-18 15:39:43 +00:00
INPUT2=""
break
;;
2019-02-02 12:37:20 +00:00
e|E) exit_fn
2018-03-18 15:39:43 +00:00
;;
*) invalid_input 3 3
;;
esac
done
}
# Third menu level - Reset all MagiskHide props
menu_reset_prop_all() {
INPUT3=""
while true
do
2018-04-15 22:05:33 +00:00
if [ -z "$INPUT3" ]; then
2018-03-18 15:39:43 +00:00
menu_header "${C}$1${N}"
echo ""
echo "This will reset all prop"
echo "values to default values."
echo ""
echo "Do you want to continue?"
echo ""
echo -n "Enter ${G}y${N}(es), ${G}n${N}(o) or ${G}e${N}(xit): "
read -r INPUT3
fi
case "$INPUT3" in
2018-06-03 16:40:24 +00:00
y|Y)
2018-03-18 15:39:43 +00:00
reset_prop_all "$1"
2019-02-02 12:37:20 +00:00
INPUT2=""
2018-03-18 15:39:43 +00:00
break
;;
2018-06-03 16:40:24 +00:00
n|N)
2018-03-18 15:39:43 +00:00
INPUT2=""
break
;;
2019-02-02 12:37:20 +00:00
e|E) exit_fn
2018-03-18 15:39:43 +00:00
;;
2018-04-15 22:05:33 +00:00
*) invalid_input 3 3
2018-03-18 15:39:43 +00:00
;;
esac
done
}
# Third menu level - Reset specific MagiskHide prop
menu_reset_prop() {
INPUT3=""
while true
do
2018-04-15 22:05:33 +00:00
if [ -z "$INPUT3" ]; then
2018-03-18 15:39:43 +00:00
menu_header "${C}$1${N}"
echo ""
echo "This will reset $2"
echo "to it's default value."
echo ""
echo "Do you want to continue?"
echo ""
echo -n "Enter ${G}y${N}(es), ${G}n${N}(o) or ${G}e${N}(xit): "
read -r INPUT3
fi
case "$INPUT3" in
2018-06-03 16:40:24 +00:00
y|Y)
2018-03-18 15:39:43 +00:00
reset_prop "$2"
2019-02-02 12:37:20 +00:00
INPUT2=""
2018-03-18 15:39:43 +00:00
break
;;
2018-06-03 16:40:24 +00:00
n|N)
2018-03-18 15:39:43 +00:00
INPUT2=""
break
;;
2019-02-02 12:37:20 +00:00
e|E) exit_fn
2018-03-18 15:39:43 +00:00
;;
2018-04-15 22:05:33 +00:00
*) invalid_input 3 3
2018-03-18 15:39:43 +00:00
;;
esac
done
}
2018-04-15 22:05:33 +00:00
# ======================== Custom Props ========================
# Second menu level - Custom props
menu_custom_props() {
2018-03-18 15:39:43 +00:00
INPUT2=""
while true
do
2018-04-15 22:05:33 +00:00
if [ -z "$INPUT2" ]; then
2019-03-27 10:50:00 +00:00
ITEMCOUNT=0
if [ "$OPTIONBOOT" == 0 ]; then
2019-04-02 19:42:29 +00:00
DEFSTAGETXT=" (system.prop)"
2019-03-27 10:50:00 +00:00
elif [ "$OPTIONBOOT" == 1 ]; then
2018-09-04 07:55:57 +00:00
DEFSTAGETXT=" (post-fs-data)"
2019-03-27 10:50:00 +00:00
elif [ "$OPTIONBOOT" == 2 ]; then
2018-09-04 07:55:57 +00:00
DEFSTAGETXT=" (late_start service)"
2018-09-04 08:23:35 +00:00
fi
2018-04-15 22:05:33 +00:00
menu_header "${C}$1${N}\n Select an option below:"
2018-04-26 20:40:46 +00:00
echo ""
2019-02-02 12:37:20 +00:00
if [ "$CUSTOMEDIT" == 0 ] && [ "$CUSTOMPROPS" -o "$CUSTOMPROPSPOST" -o "$CUSTOMPROPSLATE" ]; then
2018-04-26 20:40:46 +00:00
CTRLSET=0
echo "You have ${C}custom props set${N},"
echo "but the option is ${R}not activated${N}."
echo ""
echo "Do you want to activate it (enter ${G}r${N} to reset)?"
echo ""
echo -n "Enter ${G}y${N}(es), ${G}n${N}(o), ${G}r${N}(eset) or ${G}e${N}(xit): "
2018-06-03 16:40:24 +00:00
read -r INPUT2
else
2018-04-26 20:40:46 +00:00
CTRLSET=1
echo "Set or edit custom prop values for your device."
echo ""
2018-09-04 07:55:57 +00:00
if [ "$CUSTOMPROPS" ] || [ "$CUSTOMPROPSPOST" ] || [ "$CUSTOMPROPSLATE" ]; then
2019-03-27 10:50:00 +00:00
ITEMCOUNT=1
2018-09-04 07:55:57 +00:00
if [ "$CUSTOMPROPS" ]; then
echo "${C}Default boot stage${G}${DEFSTAGETXT}${N}"
for ITEM in $CUSTOMPROPS; do
echo "${G}$ITEMCOUNT${N} - $(get_eq_left "$ITEM")"
ITEMCOUNT=$(($ITEMCOUNT+1))
done
fi
if [ "$CUSTOMPROPSPOST" ]; then
echo ""
echo "${C}post-fs-data boot stage${N}"
for ITEM in $CUSTOMPROPSPOST; do
echo "${G}$ITEMCOUNT${N} - $(get_eq_left "$ITEM")"
ITEMCOUNT=$(($ITEMCOUNT+1))
done
fi
if [ "$CUSTOMPROPSLATE" ]; then
echo ""
echo "${C}late_start service boot stage${N}"
for ITEM in $CUSTOMPROPSLATE; do
echo "${G}$ITEMCOUNT${N} - $(get_eq_left "$ITEM")"
ITEMCOUNT=$(($ITEMCOUNT+1))
done
fi
2018-04-26 20:40:46 +00:00
else
echo "Currently no custom props set."
echo "Please add one by selecting"
echo "\"New custom prop\" below."
fi
echo ""
echo "${G}n${N} - New custom prop"
2018-09-04 07:55:57 +00:00
if [ "$CUSTOMPROPS" ] || [ "$CUSTOMPROPSPOST" ] || [ "$CUSTOMPROPSLATE" ]; then
2018-04-26 20:40:46 +00:00
echo "${G}r${N} - Reset all custom props"
fi
echo "${G}b${N} - Go back to main menu"
echo ""
echo "See the module readme or the"
echo "support thread @ XDA for details."
echo ""
echo -n "Enter '${G}e${N}' to exit: "
read -r INPUT2
2018-04-15 22:05:33 +00:00
fi
2019-03-27 10:50:00 +00:00
if [ "$INPUT2" -ge 1 -a "$INPUT2" -lt "$ITEMCOUNT" ] || [ "$INPUT2" == "y" -a "@CTRLSET" == 0 ] || [ "$INPUT2" == "Y" -a "@CTRLSET" == 0 ]; then
2018-04-26 20:40:46 +00:00
if [ "$CTRLSET" == 1 ]; then
ITEMCOUNT=1
2018-09-04 07:55:57 +00:00
for ITEM in $CUSTOMPROPSLIST; do
2018-04-26 20:40:46 +00:00
if [ "$ITEMCOUNT" == "$INPUT2" ]; then
2018-05-06 09:57:49 +00:00
menu_edit_custprop "$(get_eq_left "$ITEM")"
2018-04-26 20:40:46 +00:00
break
fi
ITEMCOUNT=$(($ITEMCOUNT+1))
done
elif [ "$CTRLSET" == 0 ]; then
replace_fn CUSTOMEDIT 0 1 $LATEFILE
INPUT=""
2018-04-15 22:05:33 +00:00
break
fi
2018-06-03 16:40:24 +00:00
elif [ "$INPUT2" == "n" ] || [ "$INPUT2" == "N" ]; then
2018-04-26 20:40:46 +00:00
if [ "$CTRLSET" == 1 ]; then
menu_new_custprop "New custom prop"
elif [ "$CTRLSET" == 0 ]; then
INPUT=""
break
fi
2018-06-03 16:40:24 +00:00
elif [ "$INPUT2" == "r" ] || [ "$INPUT2" == "R" ]; then
2018-04-26 20:40:46 +00:00
if [ "$CTRLSET" == 1 ]; then
menu_reset_all_custprop "Reset all custom props"
elif [ "$CTRLSET" == 0 ]; then
menu_reset_all_custprop "Reset all custom props"
fi
2018-06-03 16:40:24 +00:00
elif [ "$INPUT2" == "b" ] || [ "$INPUT2" == "B" ]; then
2018-04-26 20:40:46 +00:00
if [ "$CTRLSET" == 1 ]; then
INPUT=""
break
elif [ "$CTRLSET" == 0 ]; then
invalid_input 4 2
fi
2018-06-03 16:40:24 +00:00
elif [ "$INPUT2" == "e" ] || [ "$INPUT2" == "E" ]; then
2018-04-26 20:40:46 +00:00
exit_fn
else
if [ "$CTRLSET" == 1 ]; then
invalid_input 1 2
elif [ "$CTRLSET" == 0 ]; then
invalid_input 4 2
fi
fi
2018-04-15 22:05:33 +00:00
fi
done
}
# Third menu level - Edit custom prop
menu_edit_custprop() {
INPUT3=""
2018-09-04 07:55:57 +00:00
if [ "$(echo $CUSTOMPROPS | grep $1)" ]; then
2019-04-02 19:42:29 +00:00
STAGETXT=" ${C}(system.prop)${N}"
2019-02-02 12:37:20 +00:00
elif [ "$(echo $CUSTOMPROPSPOST | grep $1)" ] && [ "$(echo $CUSTOMPROPSLATE | grep $1)" ]; then
2019-04-02 19:42:29 +00:00
STAGETXT=" ${C}(both)${N}"
2018-09-04 07:55:57 +00:00
elif [ "$(echo $CUSTOMPROPSPOST | grep $1)" ]; then
2019-04-02 19:42:29 +00:00
STAGETXT=" ${C}(post-fs-data)${N}"
2018-09-04 07:55:57 +00:00
elif [ "$(echo $CUSTOMPROPSLATE | grep $1)" ]; then
2019-04-02 19:42:29 +00:00
STAGETXT=" ${C}(late_start service)${N}"
2018-09-04 07:55:57 +00:00
else
TMPBSTAGE=""
fi
2018-04-15 22:05:33 +00:00
while true
do
if [ -z "$INPUT3" ]; then
2018-09-04 07:55:57 +00:00
for ITEM in $CUSTOMPROPSLIST; do
2018-06-03 16:40:24 +00:00
TMPITEM=$( echo $(get_eq_right "$ITEM") | sed 's|_sp_| |g')
2018-05-06 09:57:49 +00:00
if [ "$(get_eq_left "$ITEM")" == "$1" ]; then
2018-06-03 16:40:24 +00:00
if [ "$TMPITEM" == "$(resetprop $1)" ]; then
2018-04-15 22:05:33 +00:00
PROPNOTSET=0
2018-06-03 16:40:24 +00:00
SETPROPVALUE="$TMPITEM"
2018-04-15 22:05:33 +00:00
else
PROPNOTSET=1
fi
break
fi
done
menu_header "${C}$1${N}"
echo ""
2018-09-04 07:55:57 +00:00
echo "The current value for"
echo "${C}'$1'${N} is:"
echo ""
2018-04-15 22:05:33 +00:00
echo "${C}$(resetprop $1)${N}"
if [ "$PROPNOTSET" == 0 ]; then
echo "(Set by this module.)"
echo ""
echo "Enter a new value or select"
echo "from the options below."
echo ""
2018-09-04 07:55:57 +00:00
echo "${G}s${N} - Prop boot stage$STAGETXT"
2018-04-15 22:05:33 +00:00
echo "${G}r${N} - Reset prop"
2018-03-18 15:39:43 +00:00
else
2018-04-15 22:05:33 +00:00
echo "${R}Not yet set by this module. Please reboot to set.${N}"
2019-04-02 19:42:29 +00:00
if [ "$OPTIONBOOT" == 1 ] || [ "$STAGETXT" == " ${C}(post-fs-data)${N}" ]; then
2018-10-25 06:37:05 +00:00
echo ""
echo "This might be caused by the prop being set to early."
echo "If the above state does not change after a reboot,"
echo "try changing the boot stage when the prop is set"
2019-03-27 10:50:00 +00:00
echo "to default, late_start service or both."
2018-10-25 06:37:05 +00:00
fi
2018-04-15 22:05:33 +00:00
echo ""
echo "${G}r${N} - Reboot"
2018-03-18 15:39:43 +00:00
fi
2018-04-15 22:05:33 +00:00
echo "${G}b${N} - Go back."
echo ""
echo -n "Enter '${G}e${N}' to exit: "
read -r INPUT3
2018-03-18 15:39:43 +00:00
fi
2018-04-15 22:05:33 +00:00
case "$INPUT3" in
2018-09-04 07:55:57 +00:00
s|S)
menu_bootstage_custprop "$1"
;;
2018-06-03 16:40:24 +00:00
r|R)
2018-04-15 22:05:33 +00:00
if [ "$PROPNOTSET" == 0 ]; then
menu_reset_custprop "$1" "$SETPROPVALUE"
2018-03-18 15:39:43 +00:00
break
2018-04-15 22:05:33 +00:00
else
reboot_fn "Reboot device" "reboot"
2018-03-18 15:39:43 +00:00
fi
;;
2018-06-03 16:40:24 +00:00
b|B)
2018-04-15 22:05:33 +00:00
INPUT2=""
break
;;
2019-02-02 12:37:20 +00:00
e|E) exit_fn
2018-04-15 22:05:33 +00:00
;;
*)
2018-07-01 05:31:37 +00:00
if [ "$PROPNOTSET" == 0 ]; then
2018-10-21 14:17:11 +00:00
menu_set_custprop "$1" "$INPUT3" "$(resetprop $1)"
2018-04-15 22:05:33 +00:00
break
2018-03-18 15:39:43 +00:00
else
2018-04-15 22:05:33 +00:00
invalid_input 1 3
2018-03-18 15:39:43 +00:00
fi
;;
esac
done
}
2018-04-15 22:05:33 +00:00
# Third menu level - New custom prop
menu_new_custprop() {
INPUT3=""
while true
do
if [ -z "$INPUT3" ]; then
menu_header "${C}$1${N}"
echo ""
echo "Enter the prop to set,"
echo "or ${G}b${N} to go back."
echo ""
echo -n "Enter '${G}e${N}' to exit: "
read -r INPUT3
fi
case "$INPUT3" in
2018-06-03 16:40:24 +00:00
b|B)
2018-04-15 22:05:33 +00:00
INPUT2=""
break
;;
2019-02-02 12:37:20 +00:00
e|E) exit_fn
2018-04-15 22:05:33 +00:00
;;
2018-06-03 16:40:24 +00:00
""|[[:blank:]]*) blank_input 3
2018-05-29 20:44:54 +00:00
;;
2018-04-15 22:05:33 +00:00
*)
2018-09-04 07:55:57 +00:00
if [ "$(echo $PROPSLIST | grep -o $INPUT3)" ] || [ "$(echo $CUSTOMPROPSLIST | grep -o $INPUT3)" ]; then
2018-04-15 22:05:33 +00:00
menu_magiskhide_custprop "$INPUT3"
else
menu_set_new_custprop "$INPUT3"
break
fi
;;
esac
done
}
# Third menu level - Reset all custom props
menu_reset_all_custprop() {
INPUT3=""
while true
do
if [ -z "$INPUT3" ]; then
menu_header "${C}$1${N}"
echo ""
echo "This will reset all"
echo "custom prop values."
echo ""
echo "Do you want to continue?"
echo ""
echo -n "Enter ${G}y${N}(es), ${G}n${N}(o) or ${G}e${N}(xit): "
read -r INPUT3
fi
case "$INPUT3" in
2018-06-03 16:40:24 +00:00
y|Y)
2018-04-15 22:05:33 +00:00
reset_all_custprop
INPUT2=""
break
;;
2018-06-03 16:40:24 +00:00
n|N)
2018-04-15 22:05:33 +00:00
INPUT2=""
break
;;
2019-02-02 12:37:20 +00:00
e|E) exit_fn
2018-04-15 22:05:33 +00:00
;;
*) invalid_input 3 3
;;
esac
done
}
2018-06-19 09:56:08 +00:00
# Fourth menu level - MagiskHide custom prop and duplicate props
2018-04-15 22:05:33 +00:00
menu_magiskhide_custprop() {
INPUT4=""
while true
do
if [ -z "$INPUT4" ]; then
menu_header "${C}$1${N}"
echo ""
2018-06-19 09:56:08 +00:00
if [ "$(echo $PROPSLIST | grep -o $1)" ]; then
echo "That prop, ${C}$1${N}, is"
echo "one of the sensitive props already set"
echo "by MagiskHide. No need to do it again."
else
echo "That prop, ${C}$1${N}, is"
echo "already on your list of custom props."
echo "No need to set it again."
fi
2018-04-15 22:05:33 +00:00
echo ""
echo "${G}b${N} - Go back."
echo ""
echo -n "Enter '${G}e${N}' to exit: "
read -r INPUT4
fi
case "$INPUT4" in
2018-06-03 16:40:24 +00:00
b|B)
2018-04-15 22:05:33 +00:00
INPUT3=""
break
;;
2019-02-02 12:37:20 +00:00
e|E) exit_fn
2018-04-15 22:05:33 +00:00
;;
*) invalid_input 1 4
;;
esac
done
}
# Fourth menu level - Set new custom prop
menu_set_new_custprop() {
INPUT4=""
TMPPROP=$(resetprop "$1")
while true
do
if [ -z "$INPUT4" ]; then
menu_header "${C}$1${N}"
echo ""
2018-09-04 07:55:57 +00:00
echo "Enter the value to set"
echo "${C}$1${N} to,"
2018-04-15 22:05:33 +00:00
echo "or select from the options below."
echo ""
if [ "$TMPPROP" ]; then
echo "The current value is:"
echo "${C}$TMPPROP${N}"
else
echo "This prop currently doesn't exist on your system."
fi
echo ""
echo "${G}b${N} - Go back."
echo ""
echo -n "Enter '${G}e${N}' to exit: "
read -r INPUT4
fi
case "$INPUT4" in
2018-06-03 16:40:24 +00:00
b|B)
2018-10-21 14:17:11 +00:00
INPUT2=""
2018-04-15 22:05:33 +00:00
INPUT3=""
break
;;
2019-02-02 12:37:20 +00:00
e|E) exit_fn
2018-05-29 20:44:54 +00:00
;;
2018-06-03 16:40:24 +00:00
""|[[:blank:]]*) blank_input 4
2018-05-29 20:44:54 +00:00
;;
2018-04-15 22:05:33 +00:00
*)
2018-10-21 14:17:11 +00:00
menu_set_custprop "$1" "$INPUT4" "$TMPPROP"
2018-04-15 22:05:33 +00:00
INPUT2=""
INPUT3=""
break
;;
esac
done
}
2018-09-04 07:55:57 +00:00
# Fourth menu level - Custom prop boot stage
menu_bootstage_custprop() {
INPUT4=""
if [ "$(echo $CUSTOMPROPS | grep $1)" ]; then
TMPBSTAGE="default"
2019-02-02 12:37:20 +00:00
PLEND=" is"
2018-09-04 07:55:57 +00:00
DEFAULTTXT="${G} (current)${N}"
POSTTXT=""
LATETXT=""
2019-02-02 12:37:20 +00:00
BOTHTXT=""
elif [ "$(echo $CUSTOMPROPSPOST | grep $1)" ] && [ "$(echo $CUSTOMPROPSLATE | grep $1)" ]; then
TMPBSTAGE="both"
PLEND="s are"
DEFAULTTXT=""
POSTTXT=""
LATETXT=""
BOTHTXT="${G} (current)${N}"
2018-09-04 07:55:57 +00:00
elif [ "$(echo $CUSTOMPROPSPOST | grep $1)" ]; then
TMPBSTAGE="post-fs-data"
2019-02-02 12:37:20 +00:00
PLEND=" is"
2018-09-04 07:55:57 +00:00
DEFAULTTXT=""
POSTTXT="${G} (current)${N}"
LATETXT=""
2019-02-02 12:37:20 +00:00
BOTHTXT=""
2018-09-04 07:55:57 +00:00
elif [ "$(echo $CUSTOMPROPSLATE | grep $1)" ]; then
TMPBSTAGE="late_start service"
2019-02-02 12:37:20 +00:00
PLEND=" is"
2018-09-04 07:55:57 +00:00
DEFAULTTXT=""
POSTTXT=""
LATETXT="${G} (current)${N}"
2019-02-02 12:37:20 +00:00
BOTHTXT=""
2018-09-04 07:55:57 +00:00
else
TMPBSTAGE=""
fi
while true
do
if [ -z "$INPUT4" ]; then
menu_header "${C}$1${N}"
echo ""
echo "Select what boot stage"
echo "${C}$1${N}"
echo "should be set in."
echo ""
2019-02-02 12:37:20 +00:00
echo "Currently ${C}${TMPBSTAGE}${N}"
echo "boot stage$PLEND used."
2018-09-04 07:55:57 +00:00
echo ""
echo "Select an option below."
echo ""
echo "${G}1${N} - Default${DEFAULTTXT}"
echo "${G}2${N} - post-fs-data${POSTTXT}"
echo "${G}3${N} - late_start service${LATETXT}"
2019-02-02 12:37:20 +00:00
echo "${G}4${N} - Both boot stages${BOTHTXT}"
2018-09-04 07:55:57 +00:00
echo "${G}b${N} - Go back."
echo ""
echo -n "Enter '${G}e${N}' to exit: "
read -r INPUT4
fi
case "$INPUT4" in
1)
if [ "$DEFAULTTXT" ]; then
2019-02-02 12:37:20 +00:00
INPUT4=""
2018-09-04 07:55:57 +00:00
active_option
else
2019-02-02 12:37:20 +00:00
set_custprop "$1" "$(resetprop $1)" "default"
2018-09-04 07:55:57 +00:00
INPUT3=""
break
fi
;;
2)
if [ "$POSTTXT" ]; then
2019-02-02 12:37:20 +00:00
INPUT4=""
2018-09-04 07:55:57 +00:00
active_option
else
2019-02-02 12:37:20 +00:00
set_custprop "$1" "$(resetprop $1)" "post"
2018-09-04 07:55:57 +00:00
INPUT3=""
break
fi
;;
3)
if [ "$LATETXT" ]; then
2019-02-02 12:37:20 +00:00
INPUT4=""
2018-09-04 07:55:57 +00:00
active_option
else
2019-02-02 12:37:20 +00:00
set_custprop "$1" "$(resetprop $1)" "late"
INPUT3=""
break
fi
;;
4)
if [ "$BOTHTXT" ]; then
INPUT4=""
active_option
else
set_custprop "$1" "$(resetprop $1)" "both"
2018-09-04 07:55:57 +00:00
INPUT3=""
break
fi
;;
b|B)
INPUT3=""
break
;;
2019-02-02 12:37:20 +00:00
e|E) exit_fn
2018-09-04 07:55:57 +00:00
;;
*) invalid_input 1 4
;;
esac
done
}
2018-04-15 22:05:33 +00:00
# Fourth menu level - Reset custom prop
menu_reset_custprop() {
INPUT4=""
while true
do
if [ -z "$INPUT4" ]; then
menu_header "${C}$1${N}"
echo ""
echo "This will reset ${C}$1${N}"
echo "to its original value."
echo ""
echo "Do you want to continue?"
echo ""
echo -n "Enter ${G}y${N}(es), ${G}n${N}(o) or ${G}e${N}(xit): "
read -r INPUT4
fi
case "$INPUT4" in
2018-06-03 16:40:24 +00:00
y|Y)
2018-04-15 22:05:33 +00:00
reset_custprop "$1" "$2"
INPUT2=""
INPUT3=""
break
;;
2018-06-03 16:40:24 +00:00
n|N)
2018-04-15 22:05:33 +00:00
INPUT3=""
break
;;
2019-02-02 12:37:20 +00:00
e|E) exit_fn
2018-04-15 22:05:33 +00:00
;;
*) invalid_input 3 4
;;
esac
done
}
# Fifth menu level - Set custom prop
menu_set_custprop() {
2018-09-04 07:55:57 +00:00
PROPSTAGE="default"
DEFAULTTXT=" ${G}(current)${N}"
POSTTXT=""
LATETXT=""
2019-02-02 12:37:20 +00:00
BOTHTXT=""
2018-04-15 22:05:33 +00:00
INPUT5=""
while true
do
if [ -z "$INPUT5" ]; then
menu_header "${C}$1${N}"
echo ""
echo "This will set ${C}$1${N} to:"
echo "${C}$2${N}"
echo ""
2018-09-04 07:55:57 +00:00
echo "Pick an option below to change"
echo "what boot stage the prop will"
echo "be set in:"
echo ""
echo "${G}1${N} - Default${DEFAULTTXT}"
echo "${G}2${N} - post-fs-data${POSTTXT}"
echo "${G}3${N} - late_start service${LATETXT}"
2019-02-02 12:37:20 +00:00
echo "${G}4${N} - both boot stages${BOTHTXT}"
2018-09-04 07:55:57 +00:00
echo ""
2018-04-15 22:05:33 +00:00
echo "Do you want to continue?"
echo ""
echo -n "Enter ${G}y${N}(es), ${G}n${N}(o) or ${G}e${N}(xit): "
read -r INPUT5
fi
case "$INPUT5" in
2018-09-04 07:55:57 +00:00
1)
if [ "$DEFAULTTXT" ]; then
2019-02-02 12:37:20 +00:00
INPUT5=""
2018-09-04 07:55:57 +00:00
active_option
else
PROPSTAGE="default"
DEFAULTTXT=" ${G}(current)${N}"
POSTTXT=""
LATETXT=""
2019-02-02 12:37:20 +00:00
BOTHTXT=""
2018-09-04 07:55:57 +00:00
INPUT5=""
fi
;;
2)
if [ "$POSTTXT" ]; then
2019-02-02 12:37:20 +00:00
INPUT5=""
2018-09-04 07:55:57 +00:00
active_option
else
PROPSTAGE="post"
DEFAULTTXT=""
POSTTXT=" ${G}(current)${N}"
LATETXT=""
2019-02-02 12:37:20 +00:00
BOTHTXT=""
2018-09-04 07:55:57 +00:00
INPUT5=""
fi
;;
3)
if [ "$LATETXT" ]; then
2019-02-02 12:37:20 +00:00
INPUT5=""
2018-09-04 07:55:57 +00:00
active_option
else
PROPSTAGE="late"
DEFAULTTXT=""
POSTTXT=""
LATETXT=" ${G}(current)${N}"
2019-02-02 12:37:20 +00:00
BOTHTXT=""
INPUT5=""
fi
;;
4)
if [ "$BOTHTXT" ]; then
INPUT5=""
active_option
else
PROPSTAGE="both"
DEFAULTTXT=""
POSTTXT=""
LATETXT=""
BOTHTXT=" ${G}(current)${N}"
2018-09-04 07:55:57 +00:00
INPUT5=""
fi
;;
2018-06-03 16:40:24 +00:00
y|Y)
2018-10-21 14:17:11 +00:00
set_custprop "$1" "$2" "$PROPSTAGE" "$3"
2018-04-15 22:05:33 +00:00
INPUT2=""
INPUT3=""
INPUT4=""
2019-02-02 12:37:20 +00:00
INPUT5=""
2018-04-15 22:05:33 +00:00
break
;;
2018-06-03 16:40:24 +00:00
n|N)
2018-04-15 22:05:33 +00:00
INPUT4=""
2018-09-04 07:55:57 +00:00
INPUT5=""
2018-04-15 22:05:33 +00:00
break
;;
2019-02-02 12:37:20 +00:00
e|E) exit_fn
2018-04-15 22:05:33 +00:00
;;
*) invalid_input 3 5
;;
esac
done
}
2018-06-19 09:56:08 +00:00
# ======================== Delete Props ========================
# Second menu level - Delete props
menu_delete_props() {
INPUT2=""
while true
do
if [ -z "$INPUT2" ]; then
2019-03-27 10:50:00 +00:00
ITEMCOUNT=0
2018-06-19 09:56:08 +00:00
menu_header "${C}$1${N}\n Select an option below:"
echo ""
2019-02-02 12:37:20 +00:00
if [ "$DELEDIT" == 0 ] && [ "$DELETEPROPS" ]; then
2018-06-19 09:56:08 +00:00
CTRLSET=0
echo "You have a list of ${C}props to delete${N},"
echo "but the option is ${R}not activated${N}."
echo ""
echo "Do you want to activate it (enter ${G}r${N} to reset)?"
echo ""
echo -n "Enter ${G}y${N}(es), ${G}n${N}(o), ${G}r${N}(eset) or ${G}e${N}(xit): "
read -r INPUT2
else
CTRLSET=1
echo "Delete prop values on your device."
echo ""
if [ "$DELETEPROPS" ]; then
2019-03-27 10:50:00 +00:00
ITEMCOUNT=1
2018-06-19 09:56:08 +00:00
echo "Select a prop below to reset it."
echo ""
for ITEM in $DELETEPROPS; do
echo "${G}$ITEMCOUNT${N} - $ITEM"
ITEMCOUNT=$(($ITEMCOUNT+1))
done
else
echo "Currently no props set for removal."
echo "Please add one by selecting"
echo "\"New prop\" below."
fi
echo ""
echo "${G}n${N} - New prop"
if [ "$CUSTOMPROPS" ]; then
echo "${G}r${N} - Reset all props"
fi
echo "${G}b${N} - Go back to main menu"
echo ""
echo "See the module readme or the"
echo "support thread @ XDA for details."
echo ""
echo -n "Enter '${G}e${N}' to exit: "
read -r INPUT2
fi
2019-03-27 10:50:00 +00:00
if [ "$INPUT2" -ge 1 -a "$INPUT2" -lt "$ITEMCOUNT" ] || [ "$INPUT2" == "y" -a "@CTRLSET" == 0 ] || [ "$INPUT2" == "Y" -a "@CTRLSET" == 0 ]; then
2018-06-19 09:56:08 +00:00
if [ "$CTRLSET" == 1 ]; then
ITEMCOUNT=1
for ITEM in $DELETEPROPS; do
if [ "$ITEMCOUNT" == "$INPUT2" ]; then
menu_reset_delprop "$ITEM"
break
fi
ITEMCOUNT=$(($ITEMCOUNT+1))
done
elif [ "$CTRLSET" == 0 ]; then
replace_fn DELEDIT 0 1 $LATEFILE
INPUT=""
break
fi
elif [ "$INPUT2" == "n" ] || [ "$INPUT2" == "N" ]; then
if [ "$CTRLSET" == 1 ]; then
menu_new_delprop "New prop"
elif [ "$CTRLSET" == 0 ]; then
INPUT=""
break
fi
elif [ "$INPUT2" == "r" ] || [ "$INPUT2" == "R" ]; then
if [ "$CTRLSET" == 1 ]; then
menu_reset_all_delprop "Reset all props"
elif [ "$CTRLSET" == 0 ]; then
menu_reset_all_delprop "Reset all props"
fi
elif [ "$INPUT2" == "b" ] || [ "$INPUT2" == "B" ]; then
if [ "$CTRLSET" == 1 ]; then
INPUT=""
break
elif [ "$CTRLSET" == 0 ]; then
invalid_input 4 2
fi
elif [ "$INPUT2" == "e" ] || [ "$INPUT2" == "E" ]; then
exit_fn
else
if [ "$CTRLSET" == 1 ]; then
invalid_input 1 2
elif [ "$CTRLSET" == 0 ]; then
invalid_input 4 2
fi
fi
fi
done
}
# Third menu level - Reset deleted prop
menu_reset_delprop() {
INPUT3=""
while true
do
if [ -z "$INPUT3" ]; then
menu_header "${C}$1${N}"
echo ""
echo "This will remove ${C}$1${N}"
echo "from the list of props to delete."
echo ""
echo "Do you want to continue?"
echo ""
echo -n "Enter ${G}y${N}(es), ${G}n${N}(o) or ${G}e${N}(xit): "
read -r INPUT3
fi
case "$INPUT3" in
y|Y)
reset_delprop "$1"
INPUT2=""
break
;;
n|N)
INPUT2=""
break
;;
2019-02-02 12:37:20 +00:00
e|E) exit_fn
2018-06-19 09:56:08 +00:00
;;
*) invalid_input 3 3
;;
esac
done
}
# Third menu level - New prop to delete
menu_new_delprop() {
INPUT3=""
while true
do
if [ -z "$INPUT3" ]; then
menu_header "${C}$1${N}"
echo ""
echo "Enter the prop to delete,"
echo "or ${G}b${N} to go back."
echo ""
echo -n "Enter '${G}e${N}' to exit: "
read -r INPUT3
fi
case "$INPUT3" in
b|B)
INPUT2=""
break
;;
2019-02-02 12:37:20 +00:00
e|E) exit_fn
2018-06-19 09:56:08 +00:00
;;
""|[[:blank:]]*) blank_input 3
;;
*)
menu_set_new_delprop "$INPUT3"
break
;;
esac
done
}
# Third menu level - Reset all deleted props
menu_reset_all_delprop() {
INPUT3=""
while true
do
if [ -z "$INPUT3" ]; then
menu_header "${C}$1${N}"
echo ""
echo "This will reset the entire"
echo "list of props to delete."
echo ""
echo "Do you want to continue?"
echo ""
echo -n "Enter ${G}y${N}(es), ${G}n${N}(o) or ${G}e${N}(xit): "
read -r INPUT3
fi
case "$INPUT3" in
y|Y)
reset_all_delprop
INPUT2=""
break
;;
n|N)
INPUT2=""
break
;;
2019-02-02 12:37:20 +00:00
e|E) exit_fn
2018-06-19 09:56:08 +00:00
;;
*) invalid_input 3 3
;;
esac
done
}
2018-09-04 07:55:57 +00:00
# Fourth menu level - Set new prop to delete
2018-06-19 09:56:08 +00:00
menu_set_new_delprop() {
INPUT4=""
TMPPROP=$(resetprop "$1")
while true
do
if [ -z "$INPUT4" ]; then
menu_header "${C}$1${N}"
echo ""
if [ "$TMPPROP" ]; then
echo "The current value is:"
echo "${C}$TMPPROP${N}"
echo ""
2018-09-04 07:55:57 +00:00
echo "This will delete"
echo "${C}$1${N}"
2018-06-19 09:56:08 +00:00
echo "from your system."
else
echo "This prop currently doesn't exist on your system."
echo ""
echo "Nothing to do... Returning to main menu."
sleep 3
INPUT2=""
INPUT3=""
break
fi
echo ""
echo "Do you want to continue?"
echo ""
echo -n "Enter ${G}y${N}(es), ${G}n${N}(o) or ${G}e${N}(xit): "
read -r INPUT4
fi
case "$INPUT4" in
y|Y)
set_delprop "$1"
INPUT2=""
INPUT3=""
break
;;
n|N)
INPUT3=""
break
;;
2019-02-02 12:37:20 +00:00
e|E) exit_fn
2018-06-19 09:56:08 +00:00
;;
*) invalid_input 3 4
;;
esac
done
}
2018-04-15 22:05:33 +00:00
# ======================== Options ========================
# Second menu level - Options
menu_options() {
INPUT2=""
while true
do
COLOURTXT=""
PRINTSCHKTXT=""
if [ -z "$INPUT2" ]; then
2019-03-27 10:50:00 +00:00
if [ "$OPTIONBOOT" == 0 ]; then
2019-04-02 19:42:29 +00:00
BOOTTXT="system.prop"
2019-03-27 10:50:00 +00:00
elif [ "$OPTIONBOOT" == 1 ]; then
2018-05-29 07:29:19 +00:00
BOOTTXT="post-fs-data"
2019-03-27 10:50:00 +00:00
elif [ "$OPTIONBOOT" == 2 ]; then
BOOTTXT="late_start service"
2018-05-29 07:29:19 +00:00
fi
2019-02-02 12:37:20 +00:00
if [ "$OPTIONCOLOUR" == 1 ]; then
2018-04-15 22:05:33 +00:00
COLOURTXT="enabled"
CC=${G}
else
COLOURTXT="disabled"
CC=${R}
fi
2019-02-02 12:37:20 +00:00
if [ "$OPTIONWEB" == 1 ]; then
2018-04-15 22:05:33 +00:00
PRINTSCHKTXT="enabled"
CP=${G}
else
PRINTSCHKTXT="disabled"
CP=${R}
fi
2019-02-02 12:37:20 +00:00
if [ "$OPTIONUPDATE" == 1 ]; then
UPDATECHKTXT="enabled"
CU=${G}
else
UPDATECHKTXT="disabled"
CU=${R}
fi
2018-04-15 22:05:33 +00:00
menu_header "${C}$1${N}\n Select an option below:"
echo ""
2018-07-19 19:47:43 +00:00
echo "${G}1${N} - Boot stage (currently ${C}${BOOTTXT}${N})"
echo "${G}2${N} - Script colours (currently ${CC}${COLOURTXT}${N})"
echo "${G}3${N} - Fingerprints list check (currently ${CP}${PRINTSCHKTXT}${N})"
2019-02-02 12:37:20 +00:00
echo "${G}4${N} - Automatic fingerprints update (currently ${CU}${UPDATECHKTXT}${N})"
2018-04-19 03:13:40 +00:00
echo "${G}r${N} - Reset all settings"
2018-05-29 20:44:54 +00:00
if [ "$2" != "s" ]; then
echo "${G}b${N} - Go back to main menu"
fi
2018-04-15 22:05:33 +00:00
echo ""
2018-04-19 03:13:40 +00:00
echo "See the module readme or the"
echo "support thread @ XDA for details."
echo ""
2018-04-15 22:05:33 +00:00
echo -n "Enter '${G}e${N}' to exit: "
read -r INPUT2
fi
case "$INPUT2" in
2018-05-29 07:29:19 +00:00
1) menu_options_bootstage "Boot stage" "$BOOTTXT"
;;
2) menu_options_colour "Script colours" "$COLOURTXT"
2018-04-15 22:05:33 +00:00
;;
2018-05-29 07:29:19 +00:00
3) menu_options_printschk "Fingerprints list check" "$PRINTSCHKTXT"
2018-04-15 22:05:33 +00:00
;;
2019-02-02 12:37:20 +00:00
4) menu_options_updatechk "Automatic fingerprints update" "$UPDATECHKTXT"
;;
2018-06-03 16:40:24 +00:00
r|R) menu_options_reset "Reset all settings"
2018-04-15 22:05:33 +00:00
;;
2018-06-03 16:40:24 +00:00
b|B)
2018-05-29 20:44:54 +00:00
if [ "$2" == "s" ]; then
invalid_input 1 2
else
INPUT=""
break
fi
2018-04-15 22:05:33 +00:00
;;
2019-02-02 12:37:20 +00:00
e|E) exit_fn
2018-04-15 22:05:33 +00:00
;;
*) invalid_input 1 2
;;
esac
done
}
2018-05-29 07:29:19 +00:00
# Third menu level - Options, boot stage
menu_options_bootstage() {
INPUT3=""
while true
do
if [ -z "$INPUT3" ]; then
2019-04-02 19:42:29 +00:00
if [ "$2" == "system.prop" ]; then
2019-03-27 10:50:00 +00:00
TMPTXT="${C}post-fs-data${N} or ${C}late_start sevice${N}"
CHOICETXT="${G}p${N}(ost), ${G}l${N}(ate)"
elif [ "$2" == "post-fs-data" ]; then
2019-04-02 19:42:29 +00:00
TMPTXT="${C}system.prop${N} or ${C}late_start service${N}"
CHOICETXT="${G}s${N}(ystem.prop), ${G}l${N}(ate)"
2019-03-27 10:50:00 +00:00
elif [ "$2" == "late_start service" ]; then
2019-04-02 19:42:29 +00:00
TMPTXT="${C}system.prop${N} or ${C}post-fs-data${N}"
CHOICETXT="${G}s${N}(ystem.prop), ${G}p${N}(post)"
2018-05-29 07:29:19 +00:00
fi
menu_header "${C}$1${N}"
echo ""
echo "Current boot stage is ${G}$2${N}."
echo ""
2019-03-27 10:50:00 +00:00
echo "Do you want to change it to"
echo "$TMPTXT?"
2018-05-29 07:29:19 +00:00
echo ""
2019-03-27 10:50:00 +00:00
echo -n "Enter $CHOICETXT, ${G}b${N}(ack) or ${G}e${N}(xit): "
2018-05-29 07:29:19 +00:00
read -r INPUT3
fi
case "$INPUT3" in
2019-04-02 19:42:29 +00:00
s|S)
2019-03-27 10:50:00 +00:00
if [ "$OPTIONBOOT" != 0 ]; then
OPTNEW=0
2019-04-02 19:42:29 +00:00
log_handler "Boot stage changed to system.prop."
2019-03-27 10:50:00 +00:00
replace_fn OPTIONBOOT $OPTIONBOOT $OPTNEW $LATEFILE
# Load module values
. $LATEFILE
INPUT2=""
2019-04-02 19:42:29 +00:00
after_change "$1"
2019-03-27 10:50:00 +00:00
break
else
invalid_input 1 3
fi
2018-05-29 07:29:19 +00:00
;;
2019-03-27 10:50:00 +00:00
p|P)
if [ "$OPTIONBOOT" != 1 ]; then
OPTNEW=1
log_handler "Boot stage changed to post-fs-data."
replace_fn OPTIONBOOT $OPTIONBOOT $OPTNEW $LATEFILE
# Load module values
. $LATEFILE
INPUT2=""
2019-04-02 19:42:29 +00:00
after_change "$1"
2019-03-27 10:50:00 +00:00
break
else
invalid_input 1 3
fi
;;
l|L)
if [ "$OPTIONBOOT" != 2 ]; then
OPTNEW=2
log_handler "Boot stage changed to late_start service."
replace_fn OPTIONBOOT $OPTIONBOOT $OPTNEW $LATEFILE
# Load module values
. $LATEFILE
INPUT2=""
2019-04-02 19:42:29 +00:00
after_change "$1"
2019-03-27 10:50:00 +00:00
break
else
invalid_input 1 3
fi
;;
b|B)
2018-05-29 07:29:19 +00:00
INPUT2=""
break
;;
2019-02-02 12:37:20 +00:00
e|E) exit_fn
2018-05-29 07:29:19 +00:00
;;
2019-03-27 10:50:00 +00:00
*) invalid_input 1 3
2018-05-29 07:29:19 +00:00
;;
esac
done
}
2018-04-15 22:05:33 +00:00
# Third menu level - Options, colour
menu_options_colour() {
INPUT3=""
while true
do
if [ -z "$INPUT3" ]; then
if [ "$2" == "enabled" ]; then
TMPTXT="disable"
OPTCURR=1
OPTNEW=0
else
TMPTXT="enable"
OPTCURR=0
OPTNEW=1
fi
menu_header "${C}$1${N}"
echo ""
2018-04-19 03:13:40 +00:00
echo "Script colours are currently ${G}$2${N}d."
2018-04-15 22:05:33 +00:00
echo ""
2018-04-19 03:13:40 +00:00
echo "Do you want to ${C}$TMPTXT${N} them?"
2018-04-15 22:05:33 +00:00
echo ""
echo -n "Enter ${G}y${N}(es), ${G}n${N}(o) or ${G}e${N}(xit): "
read -r INPUT3
fi
case "$INPUT3" in
2018-06-03 16:40:24 +00:00
y|Y)
2018-04-15 22:05:33 +00:00
log_handler "The script colour option was ${TMPTXT}d."
2018-04-25 22:17:32 +00:00
replace_fn OPTIONCOLOUR $OPTCURR $OPTNEW $LATEFILE
2019-02-02 12:37:20 +00:00
# Load module values
. $LATEFILE
2018-04-15 22:05:33 +00:00
INPUT2=""
break
;;
2018-06-03 16:40:24 +00:00
n|N)
2018-04-15 22:05:33 +00:00
INPUT2=""
break
;;
2019-02-02 12:37:20 +00:00
e|E) exit_fn
2018-04-15 22:05:33 +00:00
;;
*) invalid_input 3 3
;;
esac
done
}
# Third menu level - Options, prints list check
menu_options_printschk() {
INPUT3=""
while true
do
if [ -z "$INPUT3" ]; then
if [ "$2" == "enabled" ]; then
TMPTXT="disable"
OPTCURR=1
OPTNEW=0
else
TMPTXT="enable"
OPTCURR=0
OPTNEW=1
fi
menu_header "${C}$1${N}"
echo ""
echo "Automatic updating of the fingerprints"
echo "list is currently ${G}$2${N}."
echo ""
echo "Do you want to ${C}$TMPTXT${N} it?"
echo ""
echo -n "Enter ${G}y${N}(es), ${G}n${N}(o) or ${G}e${N}(xit): "
read -r INPUT3
fi
case "$INPUT3" in
2018-06-03 16:40:24 +00:00
y|Y)
2018-04-15 22:05:33 +00:00
log_handler "The script prints list check option was ${TMPTXT}d."
2018-04-25 22:17:32 +00:00
replace_fn OPTIONWEB $OPTCURR $OPTNEW $LATEFILE
2019-02-02 12:37:20 +00:00
# Load module values
. $LATEFILE
2018-04-15 22:05:33 +00:00
INPUT2=""
break
;;
2018-06-03 16:40:24 +00:00
n|N)
2018-04-15 22:05:33 +00:00
INPUT2=""
break
;;
2019-02-02 12:37:20 +00:00
e|E) exit_fn
;;
*) invalid_input 3 3
;;
esac
done
}
# Third menu level - Options, prints list check
menu_options_updatechk() {
INPUT3=""
while true
do
if [ -z "$INPUT3" ]; then
if [ "$2" == "enabled" ]; then
TMPTXT="disable"
OPTCURR=1
OPTNEW=0
else
TMPTXT="enable"
OPTCURR=0
OPTNEW=1
fi
menu_header "${C}$1${N}"
echo ""
echo "Automatic updating of the applied"
echo "fingerprint is currently ${G}$2${N}."
echo ""
echo "Do you want to ${C}$TMPTXT${N} it?"
echo ""
echo -n "Enter ${G}y${N}(es), ${G}n${N}(o) or ${G}e${N}(xit): "
read -r INPUT3
fi
case "$INPUT3" in
y|Y)
log_handler "The script prints list check option was ${TMPTXT}d."
replace_fn OPTIONUPDATE $OPTCURR $OPTNEW $LATEFILE
# Load module values
. $LATEFILE
INPUT2=""
break
;;
n|N)
INPUT2=""
break
;;
e|E) exit_fn
2018-04-15 22:05:33 +00:00
;;
*) invalid_input 3 3
;;
esac
done
}
# Third menu level - Options, reset all options
menu_options_reset() {
INPUT3=""
while true
do
if [ -z "$INPUT3" ]; then
menu_header "${C}$1${N}"
echo ""
2018-04-19 03:13:40 +00:00
echo "This will reset all script settings"
2018-04-15 22:05:33 +00:00
echo "to their default values."
echo ""
echo "Do you want to continue?"
echo ""
echo -n "Enter ${G}y${N}(es), ${G}n${N}(o) or ${G}e${N}(xit): "
read -r INPUT3
fi
case "$INPUT3" in
2018-06-03 16:40:24 +00:00
y|Y)
2018-04-19 03:13:40 +00:00
log_handler "Resetting all script settings."
2019-03-27 10:50:00 +00:00
replace_fn OPTIONBOOT $OPTIONBOOT 0 $LATEFILE
2019-02-02 12:37:20 +00:00
replace_fn OPTIONCOLOUR $OPTIONCOLOUR 1 $LATEFILE
replace_fn OPTIONWEB $OPTIONWEB 1 $LATEFILE
# Load module values
. $LATEFILE
2018-04-15 22:05:33 +00:00
INPUT2=""
break
;;
2018-06-03 16:40:24 +00:00
n|N)
2018-04-15 22:05:33 +00:00
INPUT2=""
break
;;
2019-02-02 12:37:20 +00:00
e|E) exit_fn
2018-04-15 22:05:33 +00:00
;;
*) invalid_input 3 3
;;
esac
done
}
2018-06-19 09:56:08 +00:00
# ======================== Logs ========================
# Second menu level - Logs
menu_logs() {
INPUT2=""
while true
do
if [ -z "$INPUT2" ]; then
menu_header "${C}$1${N}"
echo ""
echo "This will package the Magisk log and the"
echo "module specific log files, together"
echo "with the device default build.prop"
echo "file and all the current prop values"
echo "to a file and save it on your device."
echo ""
echo "Upload the file to the support thread"
echo "@ XDA, with a detailed description if"
echo "you're having issues."
echo ""
echo "Do you want to contine?"
echo ""
if [ "$2" == "l" ]; then
echo -n "Enter ${G}y${N}(es) or ${G}n${N}(o): "
else
echo -n "Enter ${G}y${N}(es), ${G}n${N}(o) or ${G}e${N}(xit): "
fi
read -r INPUT2
fi
case "$INPUT2" in
y|Y)
collect_logs "$1" "$2"
INPUT=""
break
;;
n|N)
if [ "$2" == "l" ]; then
exit_fn
else
INPUT=""
break
fi
;;
e|E)
if [ "$2" == "l" ]; then
invalid_input 1 2
else
exit_fn
fi
;;
*) invalid_input 1 2
;;
esac
done
}
2018-04-19 03:13:40 +00:00
# ======================== Reset all options and settings ========================
# Second menu level - Reset all options and settings
2018-04-15 22:05:33 +00:00
reset_everything() {
INPUT2=""
while true
do
if [ -z "$INPUT2" ]; then
menu_header "${C}$1${N}"
echo ""
2018-04-19 03:13:40 +00:00
echo "All module options and settings"
echo "will be reset to the default values."
2018-04-15 22:05:33 +00:00
echo ""
echo "Do you want to continue?"
echo ""
if [ "$2" == "r" ]; then
echo -n "Enter ${G}y${N}(es) or ${G}n${N}(o): "
LOGTXT=" (option -r)"
INV1=2
INV2=1
else
echo -n "Enter ${G}y${N}(es), ${G}n${N}(o) or ${G}e${N}(xit): "
LOGTXT=""
INV1=3
INV2=2
fi
read -r INPUT2
fi
case "$INPUT2" in
2018-06-03 16:40:24 +00:00
y|Y)
2018-04-15 22:05:33 +00:00
log_handler "Resetting all module settings$LOGTXT."
2019-04-02 19:42:29 +00:00
reset_fn "$1" "$2"
2019-02-02 12:37:20 +00:00
INPUT=""
2018-04-15 22:05:33 +00:00
break
;;
2018-06-03 16:40:24 +00:00
n|N)
2018-04-15 22:05:33 +00:00
if [ "$2" == "r" ]; then
exit_fn
else
INPUT=""
break
fi
;;
2018-06-03 16:40:24 +00:00
e|E)
2018-04-15 22:05:33 +00:00
if [ "$2" == "r" ]; then
invalid_input $INV1 $INV2
else
exit_fn
fi
;;
*) invalid_input $INV1 $INV2
;;
esac
done
}
2018-03-18 15:39:43 +00:00
# ====================================================
# =================== Script check ===================
# ====================================================
2018-07-01 05:31:37 +00:00
ISSUECHK=0
if [ "$ISSUECHK" == 0 ] && [ ! -f "$LATEFILE" ]; then
2019-02-02 12:37:20 +00:00
log_handler "The module settings file can't be found."
2018-07-01 05:31:37 +00:00
ISSUECHK=1
2019-02-02 12:37:20 +00:00
ISSUETXT="The module settings file can't be found.\n\n Please reboot your device to reset."
2018-03-18 15:39:43 +00:00
fi
2019-02-02 12:37:20 +00:00
# Load module settings
all_values
2018-03-28 16:39:57 +00:00
orig_check
2018-07-01 05:31:37 +00:00
if [ "$ISSUECHK" == 0 ] && [ "$ORIGLOAD" == 0 ]; then
2018-12-05 15:22:57 +00:00
log_handler "Original prop values are not loaded in late_start service boot script."
2018-07-01 05:31:37 +00:00
ISSUECHK=1
ISSUETXT="The original prop values are not loaded,\n possibly due to a full reset of the module,\n or something has gone wrong.\n\n Please reboot your device to reset."
2018-03-18 15:39:43 +00:00
fi
2018-04-19 03:13:40 +00:00
script_ran_check
2018-07-01 05:31:37 +00:00
if [ "$ISSUECHK" == 0 ] && [ "$POSTCHECK" == 0 ] && [ "$LATECHECK" == 0 ]; then
2019-02-02 12:37:20 +00:00
log_handler "None of the module scripts ran during boot."
2018-07-01 05:31:37 +00:00
ISSUECHK=1
2019-02-02 12:37:20 +00:00
ISSUETXT="None of the module scripts appear\n to have run during boot.\n\n This means the module won't work.\n\n Please reboot your device and see if\n they do run."
2018-07-01 05:31:37 +00:00
elif [ "$ISSUECHK" == 0 ] && [ "$POSTCHECK" == 0 ]; then
2019-02-02 12:37:20 +00:00
log_handler "The post-fs-data.sh module script did not run during boot."
2018-07-01 05:31:37 +00:00
ISSUECHK=1
2019-02-02 12:37:20 +00:00
ISSUETXT="The post-fs-data.sh module script does not\n appear to have run during boot.\n\n This means the module won't work.\n\n Please reboot your device and see if\n it does run."
2018-07-01 05:31:37 +00:00
elif [ "$ISSUECHK" == 0 ] && [ "$LATECHECK" == 0 ]; then
2019-02-02 12:37:20 +00:00
log_handler "The service.sh module script did not run during boot."
2018-07-01 05:31:37 +00:00
ISSUECHK=1
2019-02-02 12:37:20 +00:00
ISSUETXT="The service.sh module script does not\n appear to have run during boot.\n\n This means the module won't work.\n\n Please reboot your device and see if\n it does run."
2018-04-19 03:13:40 +00:00
fi
2018-07-01 05:31:37 +00:00
if [ "$ISSUECHK" == 1 ]; then
collect_logs "issue"
2018-07-23 11:13:43 +00:00
reboot_fn "${ISSUETXT}\n\n If the issue persists after a reboot,\n please report the issue, ${R}with logs!${C}\n\n Logs have automatically been saved\n to your internal storage\n ${R}(propslogs.tar.gz)${C}.\n\n If the automatic collection failed,\n please collect the logs manually.\n\n ${G}See the documentation for details.${N}" "reset-script"
2018-07-01 05:31:37 +00:00
fi
2018-07-26 09:03:13 +00:00
2018-03-18 15:39:43 +00:00
# ====================================================
# ====================== Options =====================
# ====================================================
2018-04-15 22:05:33 +00:00
case "$1" in
-h)
2018-07-26 09:03:13 +00:00
log_handler "Showing help (-h)."
2018-04-15 22:05:33 +00:00
menu_header "${C}Help${N}"
echo ""
2018-05-06 09:57:49 +00:00
echo $(echo $(get_file_value $MODPATH/module.prop "description=") | sed 's|, |,\\n|g' | sed 's|\. |\.\\n|g')
2018-04-15 22:05:33 +00:00
echo ""
echo "Usage: props [options]..."
echo ""
echo "Options:"
2018-05-12 16:29:05 +00:00
echo " -f Update fingerprints list."
2018-06-19 09:56:08 +00:00
echo " -l Save module logs and info."
2018-04-15 22:05:33 +00:00
echo " -h Show this message."
2018-07-19 19:47:43 +00:00
echo " -nc Run without colours."
echo " -nw Run without fingerprint startup check."
2018-04-19 03:13:40 +00:00
echo " -r Reset all options/settings."
2018-05-29 20:44:54 +00:00
echo " -s Open script settings menu."
2018-04-15 22:05:33 +00:00
echo ""
echo "See the module readme or the"
echo "support thread @ XDA for details."
echo ""
2018-10-25 06:37:05 +00:00
log_handler "Exiting... Bye bye.\n\n===================="
2018-04-15 22:05:33 +00:00
exit 0
;;
esac
case "$1" in
2018-05-12 16:29:05 +00:00
*d*) # Download developers prints list, for testing prints
download_prints "Dev"
;;
*f*) # Update fingerprints list
download_prints
;;
2018-06-19 09:56:08 +00:00
*l*) # Save logs
menu_logs "Collect logs" "l"
;;
2018-04-15 22:05:33 +00:00
*r*) # Reset all settings
reset_everything "Reset all settings" "r"
2018-05-06 09:57:49 +00:00
;;
2018-05-29 20:44:54 +00:00
*s*) # Open settings menu
menu_options "Script settings" "s"
;;
2018-04-15 22:05:33 +00:00
esac
2019-02-02 12:37:20 +00:00
if [ "$OPTIONWEB" == 1 ]; then
case "$1" in
*d*|*f*) # Do nothing
;;
*) download_prints
;;
esac
2018-04-15 22:05:33 +00:00
fi
if [ "$1" ]; then
case "$1" in
2019-02-02 12:37:20 +00:00
*d*|*f*|*l*|*h*|*nc*|*nw*|*r*|*s*|*t*) # Do nothing
2018-04-15 22:05:33 +00:00
;;
*)
2018-07-26 09:03:13 +00:00
log_handler "Invalid option."
2018-04-15 22:05:33 +00:00
menu_header "${C}Help${N}"
echo ""
echo "${R}Invalid option.${N}"
echo ""
echo "Try again without options,"
2018-05-29 20:44:54 +00:00
echo "or use -h for help and details."
2018-04-15 22:05:33 +00:00
echo ""
2018-07-26 09:03:13 +00:00
log_handler "Exiting... Bye bye.\n\n===================="
2018-04-15 22:05:33 +00:00
exit 0
;;
esac
2018-03-18 15:39:43 +00:00
fi
# ===================================================
# ==================== Main menu ====================
# ===================================================
while true
do
2018-03-28 16:39:57 +00:00
orig_check
if [ "$ORIGLOAD" == 0 ]; then
2018-03-18 15:39:43 +00:00
log_handler "Original values are not loaded in propsconf_late."
2018-03-28 16:39:57 +00:00
reboot_fn "The original prop values are not loaded,\n possibly due to a full reset of the module.\n\n Please reboot your device to reset." "reset-script"
2018-03-18 15:39:43 +00:00
else
INPUT=""
ACTIVE="${G} (active)${N}"
DISABLED="${R} (disabled)${N}"
PRINTTXT=""
2019-02-02 12:37:20 +00:00
DEVTXT=""
2018-03-18 15:39:43 +00:00
FILETXT=""
PROPTXT=""
2018-04-15 22:05:33 +00:00
CUSTTXT=""
2018-06-19 09:56:08 +00:00
DELTXT=""
2018-04-15 22:05:33 +00:00
if [ -z "$INPUT" ]; then
2019-02-02 12:37:20 +00:00
if [ "$FINGERPRINTENB" == 0 ]; then
2018-03-18 15:39:43 +00:00
PRINTTXT=$DISABLED
2019-02-02 12:37:20 +00:00
elif [ "$PRINTEDIT" == 1 ]; then
2018-03-18 15:39:43 +00:00
PRINTTXT=$ACTIVE
fi
2019-02-02 12:37:20 +00:00
if [ "$FINGERPRINTENB" == 0 ] || [ "$PRINTEDIT" == 0 ]; then
DEVTXT=$DISABLED
elif [ "$DEVSIM" == 1 ]; then
DEVTXT=$ACTIVE
fi
if [ "$FILESAFE" == 1 ]; then
2018-03-18 15:39:43 +00:00
FILETXT=$DISABLED
2019-02-02 12:37:20 +00:00
elif [ "$BUILDEDIT" == 1 ] || [ "$DEFAULTEDIT" == 1 ]; then
2018-03-18 15:39:43 +00:00
FILETXT=$ACTIVE
fi
2019-02-02 12:37:20 +00:00
if [ "$PROPEDIT" == 1 ]; then
2018-03-18 15:39:43 +00:00
PROPTXT=$ACTIVE
fi
2019-02-02 12:37:20 +00:00
if [ "$CUSTOMEDIT" == 1 ]; then
2018-04-15 22:05:33 +00:00
CUSTTXT=$ACTIVE
fi
2019-02-02 12:37:20 +00:00
if [ "$DELEDIT" == 1 ]; then
2018-06-19 09:56:08 +00:00
DELTXT=$ACTIVE
fi
2018-03-18 15:39:43 +00:00
menu_header "Select an option below."
echo ""
2018-04-19 03:13:40 +00:00
echo "${G}1${N} - Edit device fingerprint${PRINTTXT}"
2019-02-02 12:37:20 +00:00
echo "${G}2${N} - Device simulation${DEVTXT}"
echo "${G}3${N} - Improved hiding${FILETXT}"
echo "${G}4${N} - Edit MagiskHide props${PROPTXT}"
echo "${G}5${N} - Add/edit custom props${CUSTTXT}"
echo "${G}6${N} - Delete prop values${DELTXT}"
echo "${G}7${N} - Script settings"
echo "${G}8${N} - Collect logs"
2018-04-19 03:13:40 +00:00
echo "${G}r${N} - Reset all options/settings"
2018-03-18 15:39:43 +00:00
echo "${G}b${N} - Reboot device"
echo ""
2019-02-02 12:37:20 +00:00
if [ "$REBOOTCHK" == 1 ]; then
2018-04-19 03:13:40 +00:00
echo "${R}Some options/settings have been changed.${N}"
2018-03-18 15:39:43 +00:00
echo "${R}Please reboot for them to take affect.${N}"
echo ""
fi
2019-02-02 12:37:20 +00:00
if [ "$PRINTCHK" == 1 ]; then
echo "${R}The device fingerprint has been updated.${N}"
echo "${R}Please reboot to apply.${N}"
echo ""
fi
2018-03-18 15:39:43 +00:00
echo "See the module readme or the"
2018-04-15 22:05:33 +00:00
echo "support thread @ XDA for details."
2018-03-18 15:39:43 +00:00
echo ""
echo -n "Enter '${G}e${N}' to exit: "
read -r INPUT
fi
case "$INPUT" in
2019-02-02 12:37:20 +00:00
1) menu_change_fingerprint "Edit device fingerprint${PRINTTXT}" $CURRFINGERPRINT $ORIGFINGERPRINT $MODULEFINGERPRINT
;;
2) menu_dev_sim "Device simulation${DEVTXT}"
2018-04-15 22:05:33 +00:00
;;
2019-02-02 12:37:20 +00:00
3) menu_edit_prop_files "Improved hiding${FILETXT}"
2018-04-15 22:05:33 +00:00
;;
2019-02-02 12:37:20 +00:00
4) menu_magiskhide_props "MagiskHide props${PROPTXT}"
2018-03-18 15:39:43 +00:00
;;
2019-02-02 12:37:20 +00:00
5) menu_custom_props "Custom props${CUSTTXT}"
2018-03-18 15:39:43 +00:00
;;
2019-02-02 12:37:20 +00:00
6) menu_delete_props "Delete props${DELTXT}"
2018-06-19 09:56:08 +00:00
;;
2019-02-02 12:37:20 +00:00
7) menu_options "Script settings"
2018-06-19 09:56:08 +00:00
;;
2019-02-02 12:37:20 +00:00
8) menu_logs "Collect logs"
2018-03-18 15:39:43 +00:00
;;
2019-02-02 12:37:20 +00:00
r|R) reset_everything "Reset all options/settings"
2018-03-18 15:39:43 +00:00
;;
2019-02-02 12:37:20 +00:00
b|B) reboot_fn "Reboot device" "reboot"
2018-03-18 15:39:43 +00:00
;;
2019-02-02 12:37:20 +00:00
e|E) exit_fn
2018-03-18 15:39:43 +00:00
;;
2019-02-02 12:37:20 +00:00
*) invalid_input 1 1
2018-03-18 15:39:43 +00:00
;;
esac
fi
2018-09-04 08:23:35 +00:00
done