MagiskHidePropsConf/common/util_functions.sh

967 lines
25 KiB
Bash
Raw Normal View History

2018-03-18 15:39:43 +00:00
#!/system/bin/sh
# MagiskHide Props Config
2018-04-15 22:05:33 +00:00
# By Didgeridoohan @ XDA Developers
2018-03-18 15:39:43 +00:00
# Variables
2018-04-15 22:05:33 +00:00
MODVERSION=VER_PLACEHOLDER
POSTFILE=$IMGPATH/.core/post-fs-data.d/propsconf_post
2018-03-18 15:39:43 +00:00
LATEFILE=$IMGPATH/.core/service.d/propsconf_late
2018-06-19 09:56:08 +00:00
SYSTEMLOC=SYSTEM_PLACEHOLDER
2018-04-15 22:05:33 +00:00
CACHELOC=CACHE_PLACEHOLDER
2018-05-29 07:29:19 +00:00
POSTCHKFILE=$CACHELOC/propsconf_postchk
2018-04-19 03:13:40 +00:00
RUNFILE=$MODPATH/script_check
2018-04-15 22:05:33 +00:00
LOGFILE=$CACHELOC/propsconf.log
LASTLOGFILE=$CACHELOC/propsconf_last.log
2018-06-19 09:56:08 +00:00
TMPLOGLOC=$CACHELOC/propslogs
TMPLOGLIST="
$CACHELOC/magisk.log
$CACHELOC/magisk.log.bak
/data/adb/magisk_debug.log
$CACHELOC/propsconf*
/sbin/.core/mirror/system/build.prop
"
2018-04-15 22:05:33 +00:00
CONFFILE=$CACHELOC/propsconf_conf
RESETFILE=$CACHELOC/reset_mhpc
2018-03-18 15:39:43 +00:00
MAGISKLOC=/data/adb/magisk
2018-06-19 09:56:08 +00:00
BBWWWPATH=BB_PLACEHOLDER
BBLOC=$MODPATH/busybox
if [ -f "$BBLOC" ]; then
BBPATH=$BBLOC
elif [ -d "$IMGPATH/busybox-ndk" ]; then
2018-06-03 16:40:24 +00:00
BBPATH=$(find $IMGPATH/busybox-ndk -name 'busybox')
else
BBPATH=$MAGISKLOC/busybox
fi
if [ -z "$(echo $PATH | grep /sbin:)" ]; then
alias resetprop="$MAGISKLOC/magisk resetprop"
fi
2018-06-19 09:56:08 +00:00
alias cat="$BBPATH cat"
alias grep="$BBPATH grep"
alias printf="$BBPATH printf"
2018-03-20 18:31:57 +00:00
alias sed="$BBPATH sed"
2018-04-15 22:05:33 +00:00
alias sort="$BBPATH sort"
2018-06-19 09:56:08 +00:00
alias tar="$BBPATH tar"
2018-03-20 18:31:57 +00:00
alias tr="$BBPATH tr"
alias wget="$BBPATH wget"
2018-05-29 07:29:19 +00:00
PRINTSLOC=$MODPATH/prints.sh
PRINTSTMP=$CACHELOC/prints.sh
PRINTSWWW="https://raw.githubusercontent.com/Magisk-Modules-Repo/MagiskHide-Props-Config/master/common/prints.sh"
BIN=BIN_PLACEHOLDER
USNFLIST=USNF_PLACEHOLDER
2018-03-18 15:39:43 +00:00
# MagiskHide props
PROPSLIST="
ro.debuggable
ro.secure
ro.build.type
ro.build.tags
ro.build.selinux
"
# Safe values
SAFELIST="
ro.debuggable=0
ro.secure=1
ro.build.type=user
ro.build.tags=release-keys
ro.build.selinux=0
"
2018-04-26 20:40:46 +00:00
# Print props
PRINTPROPS="
ro.build.fingerprint
ro.bootimage.build.fingerprint
ro.vendor.build.fingerprint
"
2018-04-25 22:17:32 +00:00
# Finding file values
get_file_value() {
2018-05-06 09:57:49 +00:00
cat $1 | grep $2 | sed "s|.*${2}||" | sed 's|\"||g'
2018-04-25 22:17:32 +00:00
}
2018-03-18 15:39:43 +00:00
# Logs
2018-04-29 09:14:35 +00:00
# Saves the previous log (if available) and creates a new one
log_start() {
if [ -f "$LOGFILE" ]; then
mv -f $LOGFILE $LASTLOGFILE
fi
touch $LOGFILE
echo "***************************************************" >> $LOGFILE
2018-05-29 07:29:19 +00:00
echo "********* MagiskHide Props Config $MODVERSION ********" >> $LOGFILE
echo "***************** By Didgeridoohan ***************" >> $LOGFILE
2018-04-29 09:14:35 +00:00
echo "***************************************************" >> $LOGFILE
log_script_chk "Log start."
}
2018-03-18 15:39:43 +00:00
log_handler() {
echo "" >> $LOGFILE
echo -e "$(date +"%m-%d-%Y %H:%M:%S") - $1" >> $LOGFILE
}
2018-03-26 16:25:58 +00:00
log_print() {
echo "$1"
log_handler "$1"
}
2018-04-19 03:13:40 +00:00
log_script_chk() {
log_handler "$1"
echo -e "$(date +"%m-%d-%Y %H:%M:%S") - $1" >> $RUNFILE
}
2018-03-26 16:25:58 +00:00
#Divider
DIVIDER="${Y}=====================================${N}"
# Header
menu_header() {
2018-06-19 09:56:08 +00:00
if [ -z "$LOGNAME" ] && [ "$DEVTESTING" == "false" ]; then
2018-04-19 03:13:40 +00:00
clear
fi
2018-03-26 16:25:58 +00:00
if [ "$MODVERSION" == "VER_PLACEHOLDER" ]; then
VERSIONTXT=""
else
VERSIONTXT=$MODVERSION
fi
echo ""
echo "${W}MagiskHide Props Config $VERSIONTXT${N}"
echo "${W}by Didgeridoohan @ XDA Developers${N}"
echo ""
echo $DIVIDER
echo -e " $1"
echo $DIVIDER
}
2018-03-18 15:39:43 +00:00
# Find prop type
get_prop_type() {
2018-05-06 09:57:49 +00:00
echo $1 | sed 's|.*\.||'
2018-03-18 15:39:43 +00:00
}
2018-04-15 22:05:33 +00:00
# Get left side of =
get_eq_left() {
2018-05-06 09:57:49 +00:00
echo $1 | sed 's|=.*||'
2018-03-18 15:39:43 +00:00
}
2018-04-15 22:05:33 +00:00
# Get right side of =
get_eq_right() {
2018-05-06 09:57:49 +00:00
echo $1 | sed 's|.*=||'
2018-03-18 15:39:43 +00:00
}
2018-04-15 22:05:33 +00:00
# Get first word in string
get_first() {
2018-04-25 22:17:32 +00:00
case $1 in
2018-05-06 09:57:49 +00:00
*\ *) echo $1 | sed 's|\ .*||'
2018-04-25 22:17:32 +00:00
;;
2018-05-06 09:57:49 +00:00
*=*) get_eq_left "$1"
2018-04-25 22:17:32 +00:00
;;
esac
}
2018-05-06 09:57:49 +00:00
# Get the device for current fingerprint
get_device_used() {
PRINTTMP=$(cat $MODPATH/prints.sh | grep "$1")
if [ "$PRINTTMP" ]; then
echo "${C}$(get_eq_left "$PRINTTMP" | sed "s| (.*||")${N}"
echo ""
fi
}
2018-04-25 22:17:32 +00:00
# Replace file values
replace_fn() {
2018-05-06 09:57:49 +00:00
sed -i "s|${1}=${2}|${1}=${3}|" $4
2018-03-18 15:39:43 +00:00
}
# Updates placeholders
placeholder_update() {
FILEVALUE=$(get_file_value $1 "$2=")
2018-04-29 09:14:35 +00:00
log_handler "Checking for ${3} in ${1}. Current value is ${FILEVALUE}."
2018-03-18 15:39:43 +00:00
case $FILEVALUE in
2018-04-25 22:17:32 +00:00
*PLACEHOLDER*) replace_fn $2 $3 $4 $1
2018-04-29 09:14:35 +00:00
log_handler "Placeholder ${3} updated to ${4} in ${1}."
2018-03-18 15:39:43 +00:00
;;
esac
}
2018-03-20 18:31:57 +00:00
2018-04-15 22:05:33 +00:00
orig_check() {
PROPSTMPLIST=$PROPSLIST"
ro.build.fingerprint
"
ORIGLOAD=0
for PROPTYPE in $PROPSTMPLIST; do
PROP=$(get_prop_type $PROPTYPE)
2018-06-03 16:40:24 +00:00
ORIGPROP=$(echo "ORIG${PROP}" | tr '[:lower:]' '[:upper:]')
2018-04-15 22:05:33 +00:00
ORIGVALUE=$(get_file_value $LATEFILE "${ORIGPROP}=")
if [ "$ORIGVALUE" ]; then
ORIGLOAD=1
fi
done
}
2018-04-19 03:13:40 +00:00
script_ran_check() {
POSTCHECK=0
2018-05-29 07:29:19 +00:00
if [ "$(cat $RUNFILE | grep "post-fs-data.d finished")" ]; then
2018-04-19 03:13:40 +00:00
POSTCHECK=1
fi
LATECHECK=0
if [ "$(cat $RUNFILE | grep "Boot script finished")" ]; then
LATECHECK=1
fi
}
2018-04-15 22:05:33 +00:00
# Currently set values
curr_values() {
2018-06-03 16:40:24 +00:00
CURRDEBUGGABLE=$(resetprop -v ro.debuggable) 2>> $LOGFILE
CURRSECURE=$(resetprop -v ro.secure) 2>> $LOGFILE
CURRTYPE=$(resetprop -v ro.build.type) 2>> $LOGFILE
CURRTAGS=$(resetprop -v ro.build.tags) 2>> $LOGFILE
CURRSELINUX=$(resetprop -v ro.build.selinux) 2>> $LOGFILE
CURRFINGERPRINT=$(resetprop -v ro.build.fingerprint) 2>> $LOGFILE
2018-04-15 22:05:33 +00:00
if [ -z "$CURRFINGERPRINT" ]; then
2018-06-03 16:40:24 +00:00
CURRFINGERPRINT=$(resetprop -v ro.bootimage.build.fingerprint) 2>> $LOGFILE
2018-04-26 20:40:46 +00:00
if [ -z "$CURRFINGERPRINT" ]; then
2018-06-03 16:40:24 +00:00
CURRFINGERPRINT=$(resetprop -v ro.vendor.build.fingerprint) 2>> $LOGFILE
2018-04-26 20:40:46 +00:00
fi
2018-04-15 22:05:33 +00:00
fi
}
2018-06-03 16:40:24 +00:00
# Original values
orig_values() {
ORIGDEBUGGABLE=$(get_file_value $LATEFILE "ORIGDEBUGGABLE=")
ORIGSECURE=$(get_file_value $LATEFILE "ORIGSECURE=")
ORIGTYPE=$(get_file_value $LATEFILE "ORIGTYPE=")
ORIGTAGS=$(get_file_value $LATEFILE "ORIGTAGS=")
ORIGSELINUX=$(get_file_value $LATEFILE "ORIGSELINUX=")
ORIGFINGERPRINT=$(get_file_value $LATEFILE "ORIGFINGERPRINT=")
2018-04-15 22:05:33 +00:00
}
# Module values
module_values() {
MODULEDEBUGGABLE=$(get_file_value $LATEFILE "MODULEDEBUGGABLE=")
MODULESECURE=$(get_file_value $LATEFILE "MODULESECURE=")
MODULETYPE=$(get_file_value $LATEFILE "MODULETYPE=")
MODULETAGS=$(get_file_value $LATEFILE "MODULETAGS=")
MODULESELINUX=$(get_file_value $LATEFILE "MODULESELINUX=")
MODULEFINGERPRINT=$(get_file_value $LATEFILE "MODULEFINGERPRINT=")
CUSTOMPROPS=$(get_file_value $LATEFILE "CUSTOMPROPS=")
2018-06-19 09:56:08 +00:00
DELETEPROPS=$(get_file_value $LATEFILE "DELETEPROPS=")
2018-04-15 22:05:33 +00:00
}
# Run all value functions
all_values() {
2018-06-19 09:56:08 +00:00
log_handler "Loading values."
2018-04-15 22:05:33 +00:00
# Currently set values
curr_values
2018-06-03 16:40:24 +00:00
# Original values
orig_values
2018-04-15 22:05:33 +00:00
# Module values
module_values
}
after_change() {
# Update the reboot variable
reboot_chk
# Load all values
all_values
# Ask to reboot
reboot_fn "$1"
}
after_change_file() {
# Update the reboot variable
reboot_chk
# Load all values
INPUT=""
all_values
# Ask to reboot
reboot_fn "$1" "$2"
}
reboot_chk() {
2018-04-25 22:17:32 +00:00
replace_fn REBOOTCHK 0 1 $LATEFILE
2018-04-15 22:05:33 +00:00
}
reset_fn() {
BUILDPROPENB=$(get_file_value $LATEFILE "BUILDPROPENB=")
FINGERPRINTENB=$(get_file_value $LATEFILE "FINGERPRINTENB=")
2018-05-29 07:29:19 +00:00
cp -afv $MODPATH/propsconf_late $LATEFILE >> $LOGFILE
if [ "$BUILDPROPENB" ] && [ "$BUILDPROPENB" != 1 ]; then
2018-04-25 22:17:32 +00:00
replace_fn BUILDPROPENB 1 $BUILDPROPENB $LATEFILE
2018-04-15 22:05:33 +00:00
fi
2018-05-29 07:29:19 +00:00
if [ "$FINGERPRINTENB" ] && [ "$FINGERPRINTENB" != 1 ]; then
2018-04-25 22:17:32 +00:00
replace_fn FINGERPRINTENB 1 $FINGERPRINTENB $LATEFILE
2018-04-15 22:05:33 +00:00
fi
2018-06-19 09:56:08 +00:00
chmod-v 755 $LATEFILE >> $INSTLOG
2018-04-15 22:05:33 +00:00
placeholder_update $LATEFILE IMGPATH IMG_PLACEHOLDER $IMGPATH
2018-05-29 07:29:19 +00:00
placeholder_update $LATEFILE CACHELOC CACHE_PLACEHOLDER $CACHELOC
2018-04-15 22:05:33 +00:00
2018-05-29 07:29:19 +00:00
if [ "$1" != "post" ]; then
# Update the reboot variable
reboot_chk
2018-04-15 22:05:33 +00:00
2018-05-29 07:29:19 +00:00
# Update all prop value variables
all_values
fi
2018-04-15 22:05:33 +00:00
}
# Check if original file values are safe
orig_safe() {
2018-04-25 22:17:32 +00:00
replace_fn FILESAFE 0 1 $LATEFILE
2018-04-15 22:05:33 +00:00
for V in $PROPSLIST; do
PROP=$(get_prop_type $V)
2018-06-03 16:40:24 +00:00
FILEPROP=$(echo "CURR${PROP}" | tr '[:lower:]' '[:upper:]')
2018-04-15 22:05:33 +00:00
FILEVALUE=$(eval "echo \$$FILEPROP")
log_handler "Checking $FILEPROP=$FILEVALUE"
safe_props $V $FILEVALUE
if [ "$SAFE" == 0 ]; then
log_handler "Prop $V set to triggering value in prop file."
2018-04-25 22:17:32 +00:00
replace_fn FILESAFE 1 0 $LATEFILE
2018-04-15 22:05:33 +00:00
else
log_handler "Prop $V set to \"safe\" value in prop file."
fi
done
}
# Checks for configuration file
config_file() {
2018-04-25 22:17:32 +00:00
log_handler "Checking for configuration file."
2018-04-15 22:05:33 +00:00
if [ -f "$CONFFILE" ]; then
2018-06-19 09:56:08 +00:00
log_handler "Configuration file detected (${CONFFILE})."
2018-04-15 22:05:33 +00:00
# Loads custom variables
. $CONFFILE
# Updates prop values (including fingerprint)
PROPSTMPLIST=$PROPSLIST"
ro.build.fingerprint
"
for PROPTYPE in $PROPSTMPLIST; do
CONFPROP=$(echo "CONF$(get_prop_type $PROPTYPE)" | tr '[:lower:]' '[:upper:]')
TMPPROP=$(eval "echo \$$CONFPROP")
if [ "$TMPPROP" ]; then
log_handler "Checking $PROPTYPE settings."
if [ "$TMPPROP" != "preserve" ]; then
if [ "$PROPTYPE" == "ro.build.fingerprint" ]; then
if [ "$(get_file_value $LATEFILE "FINGERPRINTENB=")" == 1 ]; then
change_print "$PROPTYPE" "$TMPPROP" "file"
fi
else
change_prop "$PROPTYPE" "$TMPPROP" "file"
fi
fi
else
if [ "$PROPTYPE" == "ro.build.fingerprint" ]; then
if [ "$(get_file_value $LATEFILE "FINGERPRINTENB=")" == 1 ]; then
reset_print "$PROPTYPE" "file"
fi
else
reset_prop "$PROPTYPE" "file"
fi
fi
done
# Updates prop file editing
if [ "$(get_file_value $LATEFILE "FILESAFE=")" == 0 ]; then
if [ "$CONFPROPFILES" == "true" ]; then
edit_prop_files "file" "" " (configuration file)"
elif [ "$CONFPROPFILES" == "false" ]; then
reset_prop_files "file" "" " (configuration file)"
fi
fi
# Updates custom props
if [ "$PROPOPTION" != "preserve" ]; then
if [ "$CONFPROPS" ]; then
if [ "$PROPOPTION" == "add" ] || [ "$PROPOPTION" == "replace" ]; then
if [ "$PROPOPTION" == "replace" ]; then
reset_all_custprop "file"
fi
for ITEM in $CONFPROPS; do
2018-05-06 09:57:49 +00:00
set_custprop "$(get_eq_left "$ITEM")" "$(get_eq_right "$ITEM")" "file"
2018-04-15 22:05:33 +00:00
done
fi
else
reset_all_custprop "file"
fi
fi
2018-06-19 09:56:08 +00:00
# Updates props to delete
if [ "$DELPROPOPTION" != "preserve" ]; then
if [ "$CONFDELPROPS" ]; then
if [ "$DELPROPOPTION" == "add" ] || [ "$DELPROPOPTION" == "replace" ]; then
if [ "$DELPROPOPTION" == "replace" ]; then
reset_all_delprop "file"
fi
for ITEM in $CONFDELPROPS; do
set_delprop "$ITEM" "file"
done
fi
else
reset_all_delprop "file"
fi
fi
2018-04-15 22:05:33 +00:00
# Updates options
2018-05-29 07:29:19 +00:00
OPTLCURR=$(get_file_value $LATEFILE "OPTIONLATE=")
2018-04-15 22:05:33 +00:00
OPTCCURR=$(get_file_value $LATEFILE "OPTIONCOLOUR=")
OPTWCURR=$(get_file_value $LATEFILE "OPTIONWEB=")
2018-05-29 07:29:19 +00:00
if [ "$CONFLATE" == "true" ]; then
OPTLCHNG=1
TMPTXT="late_start service"
else
OPTLCHNG=0
TMPTXT="post-fs-data"
fi
replace_fn OPTIONLATE $OPTLCURR $OPTLCHNG $LATEFILE
log_handler "Boot stage is ${TMPTXT}."
2018-04-15 22:05:33 +00:00
if [ "$CONFCOLOUR" == "enabled" ]; then
2018-04-25 22:17:32 +00:00
OPTCCHNG=1
2018-04-15 22:05:33 +00:00
else
2018-04-25 22:17:32 +00:00
OPTCCHNG=0
2018-04-15 22:05:33 +00:00
fi
2018-04-25 22:17:32 +00:00
replace_fn OPTIONCOLOUR $OPTCCURR $OPTCCHNG $LATEFILE
2018-04-15 22:05:33 +00:00
log_handler "Colour $CONFCOLOUR."
if [ "$CONFWEB" == "enabled" ]; then
2018-04-25 22:17:32 +00:00
OPTWCHNG=1
2018-04-15 22:05:33 +00:00
else
2018-04-25 22:17:32 +00:00
OPTWCHNG=0
2018-04-15 22:05:33 +00:00
fi
2018-04-25 22:17:32 +00:00
replace_fn OPTIONWEB $OPTWCURR $OPTWCHNG $LATEFILE
2018-04-15 22:05:33 +00:00
log_handler "Automatic fingerprints list update $CONFWEB."
# Deletes the configuration file
log_handler "Deleting configuration file."
rm -f $CONFFILE
2018-04-25 22:17:32 +00:00
else
log_handler "No configuration file."
2018-04-15 22:05:33 +00:00
fi
}
2018-06-19 09:56:08 +00:00
# Connection test
test_connection() {
ping -c 1 -W 1 google.com >> $LOGFILE 2>> $LOGFILE && CNTTEST="true" || CNTTEST="false"
}
# Download osm0sis' busybox
download_bb() {
log_print "Downloading busybox."
wget -T 5 -O $MODPATH/busybox $BBWWWPATH >> $LOGFILE
if [ -f "$MODPATH/busybox" ]; then
chmod -v 755 $MODPATH/busybox >> $LOGFILE
fi
}
2018-04-15 22:05:33 +00:00
# ======================== Fingerprint functions ========================
2018-05-29 07:29:19 +00:00
# Set new fingerprint
print_edit() {
if [ "$(get_file_value $LATEFILE "FINGERPRINTENB=")" == 1 -o "$(get_file_value $LATEFILE "PRINTMODULE=")" == "false" ] && [ "$(get_file_value $LATEFILE "PRINTEDIT=")" == 1 ]; then
log_handler "Changing fingerprint."
for ITEM in $PRINTPROPS; do
log_handler "Changing/writing $ITEM."
resetprop -v $ITEM 2>> $LOGFILE
resetprop -nv $ITEM "$(get_file_value $LATEFILE "MODULEFINGERPRINT=")" 2>> $LOGFILE
done
fi
}
2018-04-15 22:05:33 +00:00
# Checks and updates the prints list
2018-03-20 18:31:57 +00:00
download_prints() {
2018-06-19 09:56:08 +00:00
if [ -z "$LOGNAME" ] && [ "$DEVTESTING" == "false" ]; then
2018-04-19 03:13:40 +00:00
clear
fi
2018-05-12 16:29:05 +00:00
if [ "$1" == "Dev" ]; then
PRINTSWWW="https://raw.githubusercontent.com/Didgeridoohan/Playground/master/prints.sh"
2018-05-06 09:57:49 +00:00
fi
2018-03-26 16:25:58 +00:00
menu_header "Updating fingerprints list"
echo ""
2018-06-19 09:56:08 +00:00
# Testing connection
log_print "Checking connection."
test_connection
# Checking and downloading fingerprints list
if [ "$CNTTEST" == "true" ]; then
log_print "Checking list version."
wget -T 5 -O $PRINTSTMP $PRINTSWWW 2>> $LOGFILE
if [ -f "$PRINTSTMP" ]; then
LISTVERSION=$(get_file_value $PRINTSTMP "PRINTSV=")
if [ "$LISTVERSION" == "Dev" ] || [ "$LISTVERSION" -gt "$(get_file_value $PRINTSLOC "PRINTSV=")" ]; then
if [ "$(get_file_value $PRINTSTMP "PRINTSTRANSF=")" -le "$(get_file_value $PRINTSLOC "PRINTSTRANSF=")" ]; then
mv -f $PRINTSTMP $PRINTSLOC
# Updates list version in module.prop
VERSIONTMP=$(get_file_value $MODPATH/module.prop "version=")
replace_fn version $VERSIONTMP "${MODVERSION}-v${LISTVERSION}" $MODPATH/module.prop
log_print "Updated list to v${LISTVERSION}."
else
rm -f $PRINTSTMP
log_print "New fingerprints list requires module update."
fi
2018-03-26 16:25:58 +00:00
else
rm -f $PRINTSTMP
2018-06-19 09:56:08 +00:00
log_print "Fingerprints list up-to-date."
2018-03-26 16:25:58 +00:00
fi
else
2018-06-19 09:56:08 +00:00
log_print "File not downloaded."
2018-03-20 18:31:57 +00:00
fi
else
2018-03-26 16:25:58 +00:00
log_print "No connection."
2018-03-20 18:31:57 +00:00
fi
2018-04-15 22:05:33 +00:00
if [ "$1" == "manual" ]; then
sleep 2
2018-05-12 16:29:05 +00:00
elif [ "$1" == "Dev" ]; then
2018-05-06 09:57:49 +00:00
sleep 2
exit_fn
2018-04-19 03:13:40 +00:00
else
sleep 0.5
2018-04-15 22:05:33 +00:00
fi
2018-03-28 16:39:57 +00:00
}
2018-04-15 22:05:33 +00:00
# Reset the module fingerprint change
reset_print() {
2018-04-29 09:14:35 +00:00
log_handler "Resetting device fingerprint to default system value."
2018-04-15 22:05:33 +00:00
SUBA=$(get_file_value $LATEFILE "MODULEFINGERPRINT=")
# Saves new module value
2018-04-25 22:17:32 +00:00
replace_fn MODULEFINGERPRINT "\"$SUBA\"" "\"\"" $LATEFILE
2018-04-15 22:05:33 +00:00
# Updates prop change variables in propsconf_late
2018-04-25 22:17:32 +00:00
replace_fn PRINTEDIT 1 0 $LATEFILE
# Updates improved hiding setting
if [ "$(get_file_value $LATEFILE "BUILDEDIT=")" ]; then
replace_fn SETFINGERPRINT "true" "false" $LATEFILE
fi
2018-04-15 22:05:33 +00:00
if [ "$2" != "file" ]; then
after_change "$1"
fi
}
# Use fingerprint
change_print() {
log_handler "Changing device fingerprint to $2."
SUBA=$(get_file_value $LATEFILE "MODULEFINGERPRINT=")
# Saves new module value
2018-04-25 22:17:32 +00:00
replace_fn MODULEFINGERPRINT "\"$SUBA\"" "\"$2\"" $LATEFILE
2018-04-15 22:05:33 +00:00
# Updates prop change variables in propsconf_late
2018-04-25 22:17:32 +00:00
replace_fn PRINTEDIT 0 1 $LATEFILE
# Updates improved hiding setting
if [ "$(get_file_value $LATEFILE "BUILDEDIT=")" ]; then
replace_fn SETFINGERPRINT "false" "true" $LATEFILE
fi
2018-04-15 22:05:33 +00:00
NEWFINGERPRINT=""
if [ "$3" != "file" ]; then
after_change "$1"
fi
}
# ======================== Props files functions ========================
# Reset prop files
reset_prop_files() {
log_handler "Resetting prop files$3."
2018-04-19 03:13:40 +00:00
# Changes files
2018-04-15 22:05:33 +00:00
for PROPTYPE in $PROPSLIST; do
log_handler "Disabling prop file editing for '$PROPTYPTE'."
2018-03-28 16:39:57 +00:00
PROP=$(get_prop_type $PROPTYPE)
2018-04-15 22:05:33 +00:00
SETPROP=$(echo "SET$PROP" | tr '[:lower:]' '[:upper:]')
2018-04-25 22:17:32 +00:00
replace_fn $SETPROP "true" "false" $LATEFILE
2018-04-15 22:05:33 +00:00
done
2018-04-19 03:13:40 +00:00
# Change fingerprint
2018-04-25 22:17:32 +00:00
replace_fn SETFINGERPRINT "true" "false" $LATEFILE
2018-04-19 03:13:40 +00:00
# Edit settings variables
2018-04-25 22:17:32 +00:00
replace_fn BUILDEDIT 1 0 $LATEFILE
replace_fn DEFAULTEDIT 1 0 $LATEFILE
2018-04-15 22:05:33 +00:00
if [ "$1" != "file" ]; then
after_change_file "$1" "$2"
fi
}
# Editing prop files
edit_prop_files() {
log_handler "Modifying prop files$3."
# Checks if editing prop files is enabled
if [ "$(get_file_value $LATEFILE "BUILDPROPENB=")" == 0 ]; then
log_handler "Editing build.prop is disabled. Only editing default.prop."
PROPSLIST="
ro.debuggable
ro.secure
"
2018-04-19 03:13:40 +00:00
else
# Checking if the device fingerprint is set by the module
if [ "$(get_file_value $LATEFILE "FINGERPRINTENB=")" == 1 ] && [ "$(get_file_value $LATEFILE "PRINTEDIT=")" == 1 ]; then
2018-06-19 09:56:08 +00:00
if [ "$(cat $SYSTEMLOC/build.prop | grep "$ORIGFINGERPRINT")" ]; then
2018-04-29 09:14:35 +00:00
log_handler "Enabling prop file editing for device fingerprint."
2018-04-25 22:17:32 +00:00
replace_fn SETFINGERPRINT "false" "true" $LATEFILE
2018-04-19 03:13:40 +00:00
fi
fi
2018-04-15 22:05:33 +00:00
fi
for PROPTYPE in $PROPSLIST; do
log_handler "Checking original file value for '$PROPTYPE'."
PROP=$(get_prop_type $PROPTYPE)
FILEPROP=$(echo "FILE$PROP" | tr '[:lower:]' '[:upper:]')
SETPROP=$(echo "SET$PROP" | tr '[:lower:]' '[:upper:]')
# Check the original file value
PROPVALUE=$(get_file_value $LATEFILE "$FILEPROP=")
if [ -z "$PROPVALUE" ]; then
if [ "$PROPTYPE" == "ro.debuggable" ] || [ "$PROPTYPE" == "ro.secure" ]; then
PROPVALUE=$(get_file_value /default.prop "${PROPTYPE}=")
else
2018-06-19 09:56:08 +00:00
PROPVALUE=$(get_file_value $SYSTEMLOC/build.prop "${PROPTYPE}=")
2018-04-15 22:05:33 +00:00
fi
2018-03-28 16:39:57 +00:00
fi
2018-04-15 22:05:33 +00:00
# Checks for default/set values
safe_props $PROPTYPE $PROPVALUE
# Changes file only if necessary
if [ "$SAFE" == 0 ]; then
log_handler "Enabling prop file editing for '$PROPTYPE'."
2018-04-25 22:17:32 +00:00
replace_fn $SETPROP "false" "true" $LATEFILE
2018-04-15 22:05:33 +00:00
elif [ "$SAFE" == 1 ]; then
log_handler "Prop file editing unnecessary for '$PROPTYPE'."
2018-04-25 22:17:32 +00:00
replace_fn $SETPROP "true" "false" $LATEFILE
2018-04-15 22:05:33 +00:00
else
log_handler "Couldn't check safe value for '$PROPTYPE'."
fi
2018-03-28 16:39:57 +00:00
done
2018-04-25 22:17:32 +00:00
replace_fn BUILDEDIT 0 1 $LATEFILE
replace_fn DEFAULTEDIT 0 1 $LATEFILE
2018-04-15 22:05:33 +00:00
if [ "$1" != "file" ]; then
after_change_file "$1" "$2"
fi
2018-03-28 16:39:57 +00:00
}
2018-04-15 22:05:33 +00:00
2018-04-29 09:14:35 +00:00
change_prop_file() {
case $1 in
build)
FNLIST="
ro.build.type
ro.build.tags
ro.build.selinux
"
PROPFILELOC=$MODPATH/system/build.prop
;;
default)
FNLIST="
ro.debuggable
ro.secure
"
PROPFILELOC=/default.prop
;;
esac
for ITEM in $FNLIST; do
PROP=$(get_prop_type $ITEM)
MODULEPROP=$(echo "MODULE${PROP}" | tr '[:lower:]' '[:upper:]')
2018-06-03 16:40:24 +00:00
FILEPROP=$(echo "ORIG${PROP}" | tr '[:lower:]' '[:upper:]')
2018-04-29 09:14:35 +00:00
SETPROP=$(echo "SET${PROP}" | tr '[:lower:]' '[:upper:]')
if [ "$(eval "echo \$$MODULEPROP")" ]; then
SEDVAR="$(eval "echo \$$MODULEPROP")"
else
for P in $SAFELIST; do
2018-05-06 09:57:49 +00:00
if [ "$(get_eq_left "$P")" == "$ITEM" ]; then
SEDVAR=$(get_eq_right "$P")
2018-04-29 09:14:35 +00:00
fi
done
fi
if [ "$(get_file_value $LATEFILE "${SETPROP}=")" == "true" ]; then
replace_fn $ITEM $(eval "echo \$$FILEPROP") $SEDVAR $PROPFILELOC && log_handler "${ITEM}=${SEDVAR}"
fi
done
}
2018-04-15 22:05:33 +00:00
# ======================== MagiskHide Props functions ========================
# Check safe values
safe_props() {
SAFE=""
if [ "$2" ]; then
for P in $SAFELIST; do
2018-05-06 09:57:49 +00:00
if [ "$(get_eq_left "$P")" == "$1" ]; then
if [ "$2" == "$(get_eq_right "$P")" ]; then
2018-04-15 22:05:33 +00:00
SAFE=1
else
SAFE=0
fi
break
fi
done
fi
}
# Find what prop value to change to
change_to() {
CHANGE=""
case "$1" in
ro.debuggable) if [ "$2" == 0 ]; then CHANGE=1; else CHANGE=0; fi
;;
ro.secure) if [ "$2" == 0 ]; then CHANGE=1; else CHANGE=0; fi
;;
ro.build.type) if [ "$2" == "userdebug" ]; then CHANGE="user"; else CHANGE="userdebug"; fi
;;
ro.build.tags) if [ "$2" == "test-keys" ]; then CHANGE="release-keys"; else CHANGE="test-keys"; fi
;;
ro.build.selinux) if [ "$2" == 0 ]; then CHANGE=1; else CHANGE=0; fi
;;
esac
}
# Reset the module prop change
reset_prop() {
# Sets variables
PROP=$(get_prop_type $1)
MODULEPROP=$(echo "MODULE${PROP}" | tr '[:lower:]' '[:upper:]')
REPROP=$(echo "RE${PROP}" | tr '[:lower:]' '[:upper:]')
SUBA=$(get_file_value $LATEFILE "${MODULEPROP}=")
2018-04-29 09:14:35 +00:00
log_handler "Resetting $1 to default system value."
2018-04-15 22:05:33 +00:00
# Saves new module value
2018-04-25 22:17:32 +00:00
replace_fn $MODULEPROP "\"$SUBA\"" "\"\"" $LATEFILE
2018-04-15 22:05:33 +00:00
# Changes prop
2018-04-25 22:17:32 +00:00
replace_fn $REPROP "true" "false" $LATEFILE
2018-04-15 22:05:33 +00:00
# Updates prop change variable in propsconf_late
PROPCOUNT=$(get_file_value $LATEFILE "PROPCOUNT=")
if [ "$SUBA" ]; then
if [ "$PROPCOUNT" -gt 0 ]; then
PROPCOUNTP=$(($PROPCOUNT-1))
2018-04-25 22:17:32 +00:00
replace_fn PROPCOUNT $PROPCOUNT $PROPCOUNTP $LATEFILE
2018-04-15 22:05:33 +00:00
fi
2018-05-29 07:29:19 +00:00
fi
if [ "$(get_file_value $LATEFILE "PROPCOUNT=")" == 0 ]; then
replace_fn PROPEDIT 1 0 $LATEFILE
2018-04-15 22:05:33 +00:00
fi
if [ "$2" != "file" ]; then
after_change "$1"
fi
}
# Use prop value
change_prop() {
# Sets variables
PROP=$(get_prop_type $1)
MODULEPROP=$(echo "MODULE${PROP}" | tr '[:lower:]' '[:upper:]')
REPROP=$(echo "RE${PROP}" | tr '[:lower:]' '[:upper:]')
SUBA=$(get_file_value $LATEFILE "${MODULEPROP}=")
log_handler "Changing $1 to $2."
# Saves new module value
2018-04-25 22:17:32 +00:00
replace_fn $MODULEPROP "\"$SUBA\"" "\"$2\"" $LATEFILE
2018-04-15 22:05:33 +00:00
# Changes prop
2018-04-25 22:17:32 +00:00
replace_fn $REPROP "false" "true" $LATEFILE
2018-04-15 22:05:33 +00:00
# Updates prop change variables in propsconf_late
if [ -z "$SUBA" ]; then
PROPCOUNT=$(get_file_value $LATEFILE "PROPCOUNT=")
PROPCOUNTP=$(($PROPCOUNT+1))
2018-04-25 22:17:32 +00:00
replace_fn PROPCOUNT $PROPCOUNT $PROPCOUNTP $LATEFILE
2018-04-15 22:05:33 +00:00
fi
2018-04-25 22:17:32 +00:00
replace_fn PROPEDIT 0 1 $LATEFILE
2018-04-15 22:05:33 +00:00
if [ "$3" != "file" ]; then
after_change "$1"
fi
}
# Reset all module prop changes
reset_prop_all() {
log_handler "Resetting all props to default values."
for PROPTYPE in $PROPSLIST; do
PROP=$(get_prop_type $PROPTYPE)
MODULEPROP=$(echo "MODULE${PROP}" | tr '[:lower:]' '[:upper:]')
REPROP=$(echo "RE${PROP}" | tr '[:lower:]' '[:upper:]')
SUBA=$(get_file_value $LATEFILE "${MODULEPROP}=")
# Saves new module value
2018-04-25 22:17:32 +00:00
replace_fn $MODULEPROP "\"$SUBA\"" "\"\"" $LATEFILE
2018-04-15 22:05:33 +00:00
# Changes prop
2018-04-25 22:17:32 +00:00
replace_fn $REPROP "true" "false" $LATEFILE
2018-04-15 22:05:33 +00:00
done
2018-04-25 22:17:32 +00:00
# Updates prop change variables in propsconf_late
PROPCOUNT=$(get_file_value $LATEFILE "PROPCOUNT=")
replace_fn PROPCOUNT $PROPCOUNT 0 $LATEFILE
replace_fn PROPEDIT 1 0 $LATEFILE
2018-05-29 07:29:19 +00:00
2018-04-15 22:05:33 +00:00
after_change "$1"
}
# ======================== Custom Props functions ========================
2018-05-29 07:29:19 +00:00
# Set custom props
custom_edit() {
if [ "$(get_file_value $LATEFILE "CUSTOMEDIT=")" == 1 ]; then
log_handler "Writing custom props."
TMPLST="$(get_file_value $LATEFILE "CUSTOMPROPS=")"
2018-06-03 16:40:24 +00:00
for ITEM in $TMPLST; do
2018-05-29 07:29:19 +00:00
log_handler "Changing/writing $(get_eq_left "$ITEM")."
2018-06-03 16:40:24 +00:00
TMPITEM=$( echo $(get_eq_right "$ITEM") | sed 's|_sp_| |g')
2018-05-29 07:29:19 +00:00
resetprop -v $(get_eq_left "$ITEM") 2>> $LOGFILE
2018-06-03 16:40:24 +00:00
resetprop -nv $(get_eq_left "$ITEM") "$TMPITEM" 2>> $LOGFILE
2018-05-29 07:29:19 +00:00
done
fi
}
2018-04-15 22:05:33 +00:00
# Set custom prop value
set_custprop() {
if [ "$2" ]; then
2018-06-03 16:40:24 +00:00
TMPVALUE=$(echo "$2" | sed 's| |_sp_|g')
2018-04-15 22:05:33 +00:00
CURRCUSTPROPS=$(get_file_value $LATEFILE "CUSTOMPROPS=")
2018-06-03 16:40:24 +00:00
TMPCUSTPROPS=$(echo "$CURRCUSTPROPS ${1}=${TMPVALUE}" | sed 's|^[ \t]*||')
2018-04-15 22:05:33 +00:00
SORTCUSTPROPS=$(echo $(printf '%s\n' $TMPCUSTPROPS | sort -u))
log_handler "Setting custom prop $1."
2018-04-25 22:17:32 +00:00
replace_fn CUSTOMPROPS "\"$CURRCUSTPROPS\"" "\"$SORTCUSTPROPS\"" $LATEFILE
replace_fn CUSTOMEDIT 0 1 $LATEFILE
2018-04-15 22:05:33 +00:00
if [ "$3" != "file" ]; then
after_change "$1"
fi
fi
}
# Reset all custom prop values
reset_all_custprop() {
CURRCUSTPROPS=$(get_file_value $LATEFILE "CUSTOMPROPS=")
log_handler "Resetting all custom props."
# Removing all custom props
2018-04-25 22:17:32 +00:00
replace_fn CUSTOMPROPS "\"$CURRCUSTPROPS\"" "\"\"" $LATEFILE
replace_fn CUSTOMEDIT 1 0 $LATEFILE
2018-04-15 22:05:33 +00:00
if [ "$1" != "file" ]; then
after_change "$1"
fi
}
# Reset custom prop value
reset_custprop() {
2018-06-03 16:40:24 +00:00
TMPVALUE=$(echo "$2" | sed 's| |_sp_|g')
2018-04-15 22:05:33 +00:00
CURRCUSTPROPS=$(get_file_value $LATEFILE "CUSTOMPROPS=")
2018-06-03 16:40:24 +00:00
log_handler "Resetting custom prop $1."
TMPCUSTPROPS=$(echo $CURRCUSTPROPS | sed "s|${1}=${TMPVALUE}||" | tr -s " " | sed 's|^[ \t]*||')
2018-04-15 22:05:33 +00:00
2018-06-03 16:40:24 +00:00
# Updating custom props string
2018-04-25 22:17:32 +00:00
replace_fn CUSTOMPROPS "\"$CURRCUSTPROPS\"" "\"$TMPCUSTPROPS\"" $LATEFILE
2018-04-15 22:05:33 +00:00
CURRCUSTPROPS=$(get_file_value $LATEFILE "CUSTOMPROPS=")
if [ -z "$CURRCUSTPROPS" ]; then
2018-04-25 22:17:32 +00:00
replace_fn CUSTOMEDIT 1 0 $LATEFILE
2018-04-15 22:05:33 +00:00
fi
after_change "$1"
2018-06-19 09:56:08 +00:00
}
# ======================== Delete Props functions ========================
# Delete props
prop_del() {
if [ "$(get_file_value $LATEFILE "DELEDIT=")" == 1 ]; then
log_handler "Deleting props."
TMPLST="$(get_file_value $LATEFILE "DELETEPROPS=")"
for ITEM in $TMPLST; do
log_handler "Deleting $ITEM."
TMPITEM=$( echo $(get_eq_right "$ITEM") | sed 's|_sp_| |g')
resetprop -v $ITEM 2>> $LOGFILE
resetprop -v --delete $ITEM 2>> $LOGFILE
done
fi
}
# Set prop to delete
set_delprop() {
if [ "$1" ]; then
CURRDELPROPS=$(get_file_value $LATEFILE "DELETEPROPS=")
TMPDELPROPS=$(echo "$CURRDELPROPS ${1}" | sed 's|^[ \t]*||')
SORTDELPROPS=$(echo $(printf '%s\n' $TMPDELPROPS | sort -u))
log_handler "Setting prop to delete, $1."
replace_fn DELETEPROPS "\"$CURRDELPROPS\"" "\"$SORTDELPROPS\"" $LATEFILE
replace_fn DELEDIT 0 1 $LATEFILE
if [ "$2" != "file" ]; then
after_change "Delete $1"
fi
fi
}
# Reset all props to delete
reset_all_delprop() {
CURRDELPROPS=$(get_file_value $LATEFILE "DELETEPROPS=")
log_handler "Resetting list of props to delete."
# Removing all props to delete
replace_fn DELETEPROPS "\"$CURRDELPROPS\"" "\"\"" $LATEFILE
replace_fn DELEDIT 1 0 $LATEFILE
if [ "$1" != "file" ]; then
after_change "Delete $1"
fi
}
# Reset prop to delete
reset_delprop() {
CURRDELPROPS=$(get_file_value $LATEFILE "DELETEPROPS=")
log_handler "Resetting prop to delete, $1."
TMPDELPROPS=$(echo $CURRDELPROPS | sed "s|${1}||" | tr -s " " | sed 's|^[ \t]*||')
# Resetting prop to delete
replace_fn DELETEPROPS "\"$CURRDELPROPS\"" "\"$TMPDELPROPS\"" $LATEFILE
CURRDELPROPS=$(get_file_value $LATEFILE "DELETEPROPS=")
if [ -z "$CURRDELPROPS" ]; then
replace_fn DELEDIT 1 0 $LATEFILE
fi
after_change "Delete $1"
}
# ======================== Log collecting functions ========================
# Collects useful logs and info for troubleshooting
collect_logs() {
log_handler "Collecting logs and information."
# Create temporary directory
mkdir -pv $TMPLOGLOC 2>> $LOGFILE
# Saving Magisk and module log files and device original build.prop
for ITEM in $TMPLOGLIST; do
cp -afv $ITEM $TMPLOGLOC >> $LOGFILE
done
# Saving the current prop values
resetprop > $TMPLOGLOC/props.txt
# Package the files
cd $CACHELOC
tar -zcvf propslogs.tar.gz propslogs >> $LOGFILE
# Copy package to internal storage
mv -fv $CACHELOC/propslogs.tar.gz /storage/emulated/0 >> $LOGFILE
# Remove temporary directory
rm -rf $TMPLOGLOC >> $LOGFILE
log_handler "Logs and information collected."
INPUTTMP=""
menu_header "${C}$1${N}"
echo ""
echo "Logs and information collected."
echo ""
echo "The packaged file has been saved to the"
echo "root of your device's internal storage."
echo ""
echo "Attach the file to a post in the support"
echo "thread @ XDA, with a detailed description"
echo "of your issue."
echo ""
echo -n "Press enter to continue..."
read -r INPUTTMP
case "$INPUTTMP" in
*)
if [ "$2" == "l" ]; then
exit_fn
fi
;;
esac
2018-04-15 22:05:33 +00:00
}