MagiskHidePropsConf/common/util_functions.sh

1898 lines
49 KiB
Bash
Raw Normal View History

2018-03-18 15:39:43 +00:00
#!/system/bin/sh
# 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
2019-03-27 10:50:00 +00:00
# Finding file values
get_file_value() {
if [ -f "$1" ]; then
grep $2 $1 | sed "s|.*${2}||" | sed 's|\"||g'
fi
}
2019-02-02 12:37:20 +00:00
# ======================== Variables ========================
2019-11-02 22:24:17 +00:00
ADBPATH=/data/adb
MODULESPATH=$ADBPATH/modules
MHPCPATH=$ADBPATH/mhpc
2019-03-27 10:50:00 +00:00
if [ "$INSTFN" ]; then
# Installation (config.sh)
2019-11-02 22:24:17 +00:00
MODVERSION=$(echo $(get_file_value $TMPDIR/module.prop "version=") | sed 's|-.*||')
2019-04-05 21:10:02 +00:00
POSTPATH=$ADBPATH/post-fs-data.d
SERVICEPATH=$ADBPATH/service.d
2019-11-02 22:24:17 +00:00
LATEFILE=$MHPCPATH/propsconf_late
2019-03-27 10:50:00 +00:00
POSTFILE=$POSTPATH/propsconf_post
POSTLATEFILE=$POSTPATH/propsconf_late
2019-04-05 21:10:02 +00:00
UPDATELATEFILE=$TMPDIR/propsconf_late
2019-03-27 10:50:00 +00:00
MIRRORLOC=/sbin/.magisk/mirror/system
2019-11-02 22:24:17 +00:00
VENDLOC=/sbin/.magisk/mirror/vendor
2019-03-27 10:50:00 +00:00
if [ -z $SLOT ]; then
CACHELOC=/cache
else
CACHELOC=/data/cache
fi
2019-11-02 22:24:17 +00:00
CACHERM="
$CACHELOC/propsconf_postfile.log
$CACHELOC/propsconf.log
$CACHELOC/propsconf_install.log
$CACHELOC/propsconf_last.log
"
LOGFILE=$MHPCPATH/propsconf_install.log
2019-03-27 10:50:00 +00:00
UPDATEV=$(get_file_value $UPDATELATEFILE "SCRIPTV=")
UPDATETRANSF=$(get_file_value $UPDATELATEFILE "SETTRANSF=")
NOTTRANSF=$(get_file_value $UPDATELATEFILE "NOTTRANSF=")
SETTINGSLIST="
FINGERPRINTENB
PRINTMODULE
PRINTEDIT
PRINTVEND
PRINTCHK
DEVSIM
PROPCOUNT
PROPEDIT
CUSTOMEDIT
DELEDIT
PRINTSTAGE
2019-04-02 19:42:29 +00:00
PATCHSTAGE
2019-03-27 10:50:00 +00:00
SIMSTAGE
OPTIONBOOT
OPTIONCOLOUR
OPTIONWEB
OPTIONUPDATE
BRANDSET
NAMESET
DEVICESET
RELEASESET
IDSET
INCREMENTALSET
DESCRIPTIONSET
2019-11-02 22:24:17 +00:00
DISPLAYSET
2019-03-27 10:50:00 +00:00
SDKSET
REBOOTCHK
"
PROPSETTINGSLIST="
MODULEDEBUGGABLE
MODULESECURE
MODULETYPE
MODULETAGS
MODULESELINUX
MODULEFINGERPRINT
SIMBRAND
SIMNAME
SIMDEVICE
SIMRELEASE
SIMID
SIMINCREMENTAL
SIMDESCRIPTION
2019-11-02 22:24:17 +00:00
SIMDISPLAY
2019-03-27 10:50:00 +00:00
SIMSDK
CUSTOMPROPS
CUSTOMPROPSPOST
CUSTOMPROPSLATE
2019-05-04 18:57:59 +00:00
CUSTOMPROPSDELAY
2019-03-27 10:50:00 +00:00
DELETEPROPS
"
else
# Placeholder variables
MODVERSIONPH=VER_PLACEHOLDER
2019-11-02 22:24:17 +00:00
MHPCPATHPH=MHPCPATH_PLACEHOLDER
2019-03-27 10:50:00 +00:00
LATEFILEPH=LATE_PLACEHOLDER
MIRRORLOCPH=MIRROR_PLACEHOLDER
2019-11-02 22:24:17 +00:00
VENDLOCPH=VEND_PLACEHOLDER
2019-03-27 10:50:00 +00:00
CACHELOCPH=CACHE_PLACEHOLDER
BINPH=BIN_PLACEHOLDER
# Log variables
2019-11-02 22:24:17 +00:00
LOGFILE=$MHPCPATH/propsconf.log
LASTLOGFILE=$MHPCPATH/propsconf_last.log
TMPLOGLOC=$MHPCPATH/propslogs
2019-03-27 10:50:00 +00:00
TMPLOGLIST="
2019-11-02 22:24:17 +00:00
$MHPCPATH/defaultprops
$MHPCPATH/magisk.log
$MHPCPATH/magisk.log.bak
$MHPCPATH/propsconf*
2019-03-27 10:50:00 +00:00
$MIRRORPATH/system/build.prop
$MIRRORPATH/vendor/build.prop
$LATEFILE
"
fi
2019-04-05 21:10:02 +00:00
COREPATH=/sbin/.magisk
2018-07-26 09:03:13 +00:00
MIRRORPATH=$COREPATH/mirror
2019-03-27 10:50:00 +00:00
SYSTEMFILE=$MODPATH/system.prop
2019-11-02 22:24:17 +00:00
POSTCHKFILE=$MHPCPATH/propsconf_postchk
2018-04-19 03:13:40 +00:00
RUNFILE=$MODPATH/script_check
2019-02-02 12:37:20 +00:00
# Make sure that the terminal app used actually can see resetprop
2019-05-04 18:57:59 +00:00
if [ "$BOOTSTAGE" == "props" ]; then
alias resetprop="$ADBPATH/magisk/magisk resetprop"
fi
2019-11-02 22:24:17 +00:00
alias reboot="/system/bin/reboot"
2019-02-02 12:37:20 +00:00
# Finding installed Busybox
2019-04-05 21:10:02 +00:00
if [ -d "$MODULESPATH/busybox-ndk" ]; then
BBPATH=$(find $MODULESPATH/busybox-ndk -name 'busybox')
2018-12-05 15:22:57 +00:00
else
BBPATH=$(which busybox)
2018-06-03 16:40:24 +00:00
fi
2019-03-27 10:50:00 +00:00
# Fingerprint variables
2018-05-29 07:29:19 +00:00
PRINTSLOC=$MODPATH/prints.sh
2019-11-02 22:24:17 +00:00
PRINTSTMP=$MHPCPATH/prints.sh
2018-05-29 07:29:19 +00:00
PRINTSWWW="https://raw.githubusercontent.com/Magisk-Modules-Repo/MagiskHide-Props-Config/master/common/prints.sh"
2018-10-30 08:28:47 +00:00
PRINTSDEV="https://raw.githubusercontent.com/Didgeridoohan/Playground/master/prints.sh"
2018-10-25 06:37:05 +00:00
PRINTFILES=$MODPATH/printfiles
2018-10-30 08:28:47 +00:00
CSTMPRINTS=/sdcard/printslist
2019-11-02 22:24:17 +00:00
CSTMFILE=$PRINTFILES/custom.sh
2019-03-27 10:50:00 +00:00
# Known modules that edit device fingerprint
USNFLIST="
xiaomi-safetynet-fix
safetynet-fingerprint-fix
VendingVisa
DeviceSpoofingTool4Magisk
universal-safetynet-fix
samodx-safetyskipper
safetypatcher
petnoires-safetyspoofer
2019-04-05 21:10:02 +00:00
VR_Patch
2019-03-27 10:50:00 +00:00
"
# Configuration file locations
CONFFILELST="
2019-11-02 22:24:17 +00:00
/data/media/0/propsconf_conf
2019-03-27 10:50:00 +00:00
/data/propsconf_conf
$CACHELOC/propsconf_conf
"
2018-03-18 15:39:43 +00:00
2019-11-02 22:24:17 +00:00
# Reset file locations
RESETFILELST="
/data/media/0/reset_mhpc
/data/reset_mhpc
$CACHELOC/reset_mhpc
"
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
"
2019-02-02 12:37:20 +00:00
# Fingerprint props to change
2018-04-26 20:40:46 +00:00
PRINTPROPS="
ro.build.fingerprint
ro.bootimage.build.fingerprint
ro.vendor.build.fingerprint
"
2019-02-02 12:37:20 +00:00
# Print parts
PRINTPARTS="
ro.product.brand
ro.product.name
ro.product.device
ro.build.version.release
ro.build.id
ro.build.version.incremental
"
2018-10-30 08:28:47 +00:00
# Additional SafetyNet props
SNPROPS="
ro.build.version.security_patch
"
2019-02-02 12:37:20 +00:00
# Additional props
ADNPROPS="
ro.build.fingerprint
ro.vendor.build.fingerprint
ro.build.description
"
2019-03-27 10:50:00 +00:00
# Additional simulation props
ADNSIMPROPS="
2019-11-02 22:24:17 +00:00
ro.build.display.id
2019-03-27 10:50:00 +00:00
ro.build.version.sdk
"
# Android API level
APILVL="
4.2=17
4.3=18
4.4=19
5.0=21
5.1=22
6.0=23
7.0=24
7.1=25
8.0=26
8.1=27
9=28
"
2019-02-02 12:37:20 +00:00
# Values props list
2019-03-27 10:50:00 +00:00
VALPROPSLIST=$PROPSLIST$PRINTPARTS$SNPROPS$ADNPROPS$ADNSIMPROPS
2019-02-02 12:37:20 +00:00
# Loading module settings
2019-03-27 10:50:00 +00:00
if [ -z "$INSTFN" ]; then
. $LATEFILE
fi
2019-02-02 12:37:20 +00:00
# ======================== General functions ========================
2019-03-27 10:50:00 +00:00
# Log functions
log_handler() {
if [ "$(id -u)" == 0 ] ; then
echo "" >> $LOGFILE 2>&1
echo -e "$(date +"%Y-%m-%d %H:%M:%S:%N") - $1" >> $LOGFILE 2>&1
2018-07-01 05:29:20 +00:00
fi
2018-04-25 22:17:32 +00:00
}
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
2019-03-27 10:50:00 +00:00
if [ "$INSTFN" ]; then
rm -f $LOGFILE
else
mv -f $LOGFILE $LASTLOGFILE
fi
2018-04-29 09:14:35 +00:00
fi
touch $LOGFILE
2018-08-07 11:50:01 +00:00
echo "***************************************************" >> $LOGFILE 2>&1
echo "********* MagiskHide Props Config $MODVERSION ********" >> $LOGFILE 2>&1
echo "***************** By Didgeridoohan ***************" >> $LOGFILE 2>&1
echo "***************************************************" >> $LOGFILE 2>&1
2019-03-27 10:50:00 +00:00
if [ "$INSTFN" ]; then
log_handler "Starting module installation script"
else
log_script_chk "Log start."
2018-07-26 09:03:13 +00:00
fi
2018-03-18 15:39:43 +00:00
}
2018-03-26 16:25:58 +00:00
log_print() {
2019-03-27 10:50:00 +00:00
if [ "$INSTFN" ]; then
ui_print "$1"
else
echo "$1"
fi
2018-03-26 16:25:58 +00:00
log_handler "$1"
}
2018-04-19 03:13:40 +00:00
log_script_chk() {
log_handler "$1"
2018-08-07 11:50:01 +00:00
echo -e "$(date +"%m-%d-%Y %H:%M:%S") - $1" >> $RUNFILE 2>&1
2018-04-19 03:13:40 +00:00
}
2018-03-26 16:25:58 +00:00
#Divider
DIVIDER="${Y}=====================================${N}"
# Header
menu_header() {
2019-11-02 22:24:17 +00:00
if [ -z "$ANDROID_SOCKET_adbd" ] && [ "$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
2019-02-02 12:37:20 +00:00
# Get module version
module_v_ctrl() {
2019-04-05 21:10:02 +00:00
VERSIONCMP=$(echo $MODVERSION | sed 's|v||g' | sed 's|\.||g')
2019-05-12 05:10:24 +00:00
VERSIONTMP=$(echo $(get_file_value $MODPATH/module.prop "version="))
2019-02-02 12:37:20 +00:00
}
2019-04-02 19:42:29 +00:00
# Check for Busybox
bb_check() {
if [ "$BBPATH" ]; then
log_handler "Using $($BBPATH | head -1)."
echo "$BBPATH" >> $LOGFILE 2>&1
else
log_handler "No Busybox found."
fi
}
2018-03-18 15:39:43 +00:00
# Find prop type
get_prop_type() {
2019-02-02 12:37:20 +00:00
if [ "$1" == "ro.vendor.build.fingerprint" ]; then
echo "vendprint"
2019-11-02 22:24:17 +00:00
elif [ "$1" == "ro.build.display.id" ]; then
echo "display"
2019-02-02 12:37:20 +00:00
else
echo $1 | sed 's|.*\.||' | sed 's|.*\_||'
fi
2018-03-18 15:39:43 +00:00
}
2018-04-15 22:05:33 +00:00
# Get left side of =
get_eq_left() {
2019-02-02 12:37:20 +00:00
echo $1 | cut -f 1 -d '='
2018-03-18 15:39:43 +00:00
}
2018-04-15 22:05:33 +00:00
# Get right side of =
get_eq_right() {
2019-02-02 12:37:20 +00:00
echo $1 | cut -f 2 -d '='
2018-03-18 15:39:43 +00:00
}
2019-02-02 12:37:20 +00:00
# Get first word in fingerprint string
2018-04-15 22:05:33 +00:00
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 ""
2018-12-09 09:05:50 +00:00
elif [ -s "$CSTMPRINTS" ]; then
PRINTTMP=$(cat $CSTMPRINTS | grep "$1")
if [ "$PRINTTMP" ]; then
echo "${C}$(get_eq_left "$PRINTTMP" | sed "s| (.*||")${N} (from custom list)"
echo ""
fi
2018-05-06 09:57:49 +00:00
fi
}
2019-03-27 10:50:00 +00:00
# Get the list of print version
get_print_versions() {
echo "$1" | sed 's|.*(||' | sed 's|).*||' | sed 's| \& | |g'
}
# Get Android version with 3 digits for input
2018-10-21 14:17:11 +00:00
get_android_version() {
2019-04-08 19:44:41 +00:00
VERTMP=$(echo $1 | sed 's|\.||g')
2018-10-21 14:17:11 +00:00
if [ "${#VERTMP}" -lt 3 ]; then
until [ "${#VERTMP}" == 3 ]
do
VERTMP="$(echo ${VERTMP}0)"
done
fi
echo $VERTMP
}
# Get security patch date for current fingerprint
get_sec_patch() {
2018-10-25 10:22:27 +00:00
echo $1 | sed 's|.*\_\_||'
2018-10-21 14:17:11 +00:00
}
# Get the fingerprint for displaying in the ui
get_print_display() {
2018-10-25 10:22:27 +00:00
echo $1 | sed 's|\_\_.*||'
2018-10-21 14:17:11 +00:00
}
2018-04-25 22:17:32 +00:00
# Replace file values
replace_fn() {
2019-03-27 10:50:00 +00:00
if [ "$5" == "placeholder" ]; then
sed -i "s|${1}PH=${2}|${1}=${3}|" $4
else
sed -i "s|${1}=${2}|${1}=${3}|" $4
fi
2018-03-18 15:39:43 +00:00
}
2019-02-02 12:37:20 +00:00
# Format user files to remove Windows file endings
2018-12-09 09:05:50 +00:00
format_file() {
log_handler "Formating file (${1})."
# Remove Windows line endings
sed -i 's/\r$//' $1
# Check for newline at EOF
if [ ! -z "$(tail -c 1 "$1")" ]; then
echo "" >> $1
fi
}
2019-02-10 16:12:18 +00:00
# Reboot the device
force_reboot() {
echo ""
2019-05-04 18:57:59 +00:00
echo "${C}Rebooting...${N}"
log_handler "Rebooting."
2019-11-02 22:24:17 +00:00
/system/bin/svc power reboot "" >> $LOGFILE 2>&1 || /system/bin/reboot "" >> $LOGFILE 2>&1 || setprop sys.powerctl reboot >> $LOGFILE 2>&1
2019-02-10 16:12:18 +00:00
sleep 15
log_handler "Rebooting failed."
echo ""
echo "That doesn't seem like it worked..."
echo "Please reboot manually."
echo ""
exit 0
}
2018-03-18 15:39:43 +00:00
# Updates placeholders
placeholder_update() {
2019-03-27 10:50:00 +00:00
FILEVALUE=$(get_file_value $1 "${2}PH=")
log_handler "Checking for ${3} in ${1}."
if [ "$FILEVALUE" ]; then
case $FILEVALUE in
*PLACEHOLDER*) replace_fn $2 $3 $4 $1 "placeholder"
log_handler "Placeholder ${3} updated to ${4} in ${1}."
;;
esac
else
log_handler "No placeholder to update for ${2} in ${1}."
fi
2018-03-18 15:39:43 +00:00
}
2018-03-20 18:31:57 +00:00
2019-02-02 12:37:20 +00:00
# Check if boot scripts ran during boot
script_ran_check() {
POSTCHECK=0
if [ -f "$RUNFILE" ] && [ "$(grep "post-fs-data.sh module script finished" $RUNFILE)" ]; then
POSTCHECK=1
fi
LATECHECK=0
if [ -f "$RUNFILE" ] && [ "$(grep "service.sh module script finished" $RUNFILE)" ]; then
LATECHECK=1
fi
}
2019-11-02 22:24:17 +00:00
#Save default file values in propsconf_late
default_save(){
#Format the props file
log_handler "Formatting prop file."
sed -i -e "s|\]\:\ \[|=|g;s|^\[||g;s|\]$||g" $MHPCPATH/defaultprops
#Save the props values to $LATEFILE
for ITEM in $VALPROPSLIST; do
TMPPROP=$(get_prop_type $ITEM | tr '[:lower:]' '[:upper:]')
ORIGPROP="ORIG${TMPPROP}"
ORIGTMP="$(get_file_value $LATEFILE "${ORIGPROP}=")"
CURRPROP="CURR${TMPPROP}"
CURRTMP="$(get_file_value $MHPCPATH/defaultprops "${ITEM}=")"
replace_fn $ORIGPROP "\"$ORIGTMP\"" "\"$CURRTMP\"" $LATEFILE
done
}
2018-08-07 11:50:01 +00:00
# Check for original prop values
2018-04-15 22:05:33 +00:00
orig_check() {
2019-02-02 12:37:20 +00:00
PROPSTMPLIST=$VALPROPSLIST
2018-04-15 22:05:33 +00:00
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:]')
2019-02-02 12:37:20 +00:00
ORIGVALUE="$(echo ${ORIGPROP})"
2018-04-15 22:05:33 +00:00
if [ "$ORIGVALUE" ]; then
ORIGLOAD=1
fi
done
}
2018-08-07 11:50:01 +00:00
# Load currently set values
2018-04-15 22:05:33 +00:00
curr_values() {
2019-02-02 12:37:20 +00:00
for ITEM in $VALPROPSLIST; do
CURRTMP=$(resetprop -v $ITEM) >> $LOGFILE 2>&1
TMPPROP=$(get_prop_type $ITEM | tr '[:lower:]' '[:upper:]')
eval "CURR${TMPPROP}='$CURRTMP'"
done
2018-04-15 22:05:33 +00:00
if [ -z "$CURRFINGERPRINT" ]; then
2018-08-07 11:50:01 +00:00
CURRFINGERPRINT=$(resetprop -v ro.bootimage.build.fingerprint) >> $LOGFILE 2>&1
2018-04-26 20:40:46 +00:00
if [ -z "$CURRFINGERPRINT" ]; then
2018-08-07 11:50:01 +00:00
CURRFINGERPRINT=$(resetprop -v ro.vendor.build.fingerprint) >> $LOGFILE 2>&1
2018-04-26 20:40:46 +00:00
fi
2018-04-15 22:05:33 +00:00
fi
}
2018-08-07 11:50:01 +00:00
# Run all value loading functions
2018-04-15 22:05:33 +00:00
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
2019-02-02 12:37:20 +00:00
# Module saved values
. $LATEFILE
2018-04-15 22:05:33 +00:00
}
2018-08-07 11:50:01 +00:00
# Run after updated props/settings
2018-04-15 22:05:33 +00:00
after_change() {
2019-02-02 12:37:20 +00:00
if [ "$2" == "file" ]; then
# Load module settings
. $LATEFILE
else
# Update the reboot variable
reboot_chk
# Load all values
all_values
2019-03-27 10:50:00 +00:00
# Update the system.prop file
system_prop
2019-04-05 21:10:02 +00:00
if [ "$3" != "noreboot" ] && [ -z "$INSTFN" ]; then
2019-04-02 19:42:29 +00:00
# Ask to reboot
reboot_fn "$1" "$2"
fi
2019-02-02 12:37:20 +00:00
fi
2018-04-15 22:05:33 +00:00
}
2019-04-02 19:42:29 +00:00
# Run after editing prop files
2019-03-27 10:50:00 +00:00
after_change_propfile() {
2018-04-15 22:05:33 +00:00
# Update the reboot variable
reboot_chk
# Load all values
INPUT=""
all_values
# Ask to reboot
reboot_fn "$1" "$2"
}
2018-08-07 11:50:01 +00:00
# Check if module needs a reboot
2018-04-15 22:05:33 +00:00
reboot_chk() {
2018-04-25 22:17:32 +00:00
replace_fn REBOOTCHK 0 1 $LATEFILE
2018-04-15 22:05:33 +00:00
}
2019-03-27 10:50:00 +00:00
# Reboot function
reboot_fn() {
INPUT5=""
while true
do
if [ -z "$INPUT5" ]; then
if [ "$2" == "reboot" ] || [ "$2" == "reset-script" ] || [ "$2" == "update" ]; then
REBOOTTXT=""
else
REBOOTTXT="Reboot - "
fi
menu_header "$REBOOTTXT${C}$1${N}"
echo ""
if [ "$2" != "reset-script" ] && [ "$2" != "reboot" ]; then
if [ "$2" == "update" ]; then
echo "The device fingerprint has been updated."
echo ""
fi
echo "Reboot for changes to take effect."
echo ""
fi
echo "Do you want to reboot now (y/n)?"
echo ""
if [ "$2" == "p" ] || [ "$2" == "r" ] || [ "$2" == "reset-script" ]; then
echo -n "Enter ${G}y${N}(es) or ${G}n${N}(o): "
INV1=2
else
echo -n "Enter ${G}y${N}(es), ${G}n${N}(o) or ${G}e${N}(xit): "
INV1=3
fi
read -r INPUT5
fi
case "$INPUT5" in
y|Y)
force_reboot
;;
n|N)
if [ "$2" == "p" ] || [ "$2" == "r" ] || [ "$2" == "reset-script" ]; then
exit_fn
else
INPUT2=""
INPUT3=""
INPUT4=""
INPUT5=""
INPUT6=""
break
fi
;;
e|E)
if [ "$2" == "p" ] || [ "$2" == "r" ] || [ "$2" == "reset-script" ]; then
invalid_input $INV1 5
else
exit_fn
fi
;;
*) invalid_input $INV1 5
;;
esac
done
}
2018-08-07 11:50:01 +00:00
# Reset module
2018-04-15 22:05:33 +00:00
reset_fn() {
2018-08-07 11:50:01 +00:00
cp -af $MODPATH/propsconf_late $LATEFILE >> $LOGFILE 2>&1
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
2019-04-02 19:42:29 +00:00
after_change "$1" "$2"
2018-04-15 22:05:33 +00:00
}
# Checks for configuration file
config_file() {
2018-04-25 22:17:32 +00:00
log_handler "Checking for configuration file."
2019-02-02 12:37:20 +00:00
CONFFILE=""
for ITEM in $CONFFILELST; do
if [ -s "$ITEM" ]; then
CONFFILE="$ITEM"
break
fi
done
2019-03-27 10:50:00 +00:00
2019-02-02 12:37:20 +00:00
if [ "$CONFFILE" ]; then
2018-06-19 09:56:08 +00:00
log_handler "Configuration file detected (${CONFFILE})."
2018-12-09 09:05:50 +00:00
format_file $CONFFILE
2018-04-15 22:05:33 +00:00
# Loads custom variables
. $CONFFILE
2019-02-02 12:37:20 +00:00
module_v_ctrl
2019-03-27 10:50:00 +00:00
2019-04-05 21:10:02 +00:00
if [ "$CONFTRANSF" ] && [ $CONFTRANSF -le $VERSIONCMP ]; then
2019-02-02 12:37:20 +00:00
# Check if vendor fingerprint is set
if [ "$CONFVENDPRINT" == "true" ]; then
log_handler "Using vendor fingerprint"
CONFFINGERPRINT=$(resetprop -v ro.vendor.build.fingerprint) >> $LOGFILE 2>&1
fi
# 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 [ "$FINGERPRINTENB" == 1 ]; then
2019-04-05 21:10:02 +00:00
change_print "$PROPTYPE" "$TMPPROP" "file"
2019-02-02 12:37:20 +00:00
fi
else
2019-04-05 21:10:02 +00:00
change_prop "$PROPTYPE" "$TMPPROP" "file"
2019-02-02 12:37:20 +00:00
fi
fi
else
2018-04-15 22:05:33 +00:00
if [ "$PROPTYPE" == "ro.build.fingerprint" ]; then
2019-02-02 12:37:20 +00:00
if [ "$FINGERPRINTENB" == 1 ]; then
2019-04-05 21:10:02 +00:00
reset_print "$PROPTYPE" "file"
2018-04-15 22:05:33 +00:00
fi
else
2019-04-05 21:10:02 +00:00
reset_prop "$PROPTYPE" "file"
2018-04-15 22:05:33 +00:00
fi
fi
2019-02-02 12:37:20 +00:00
done
# Updates device simulation options, only if fingerprint editing is enabled
if [ "$PRINTEDIT" == 1 ]; then
# Fingerprint parts
if [ "$CONFDEVSIM" == "true" ]; then
change_dev_sim "Device simulation" "file"
2019-11-02 22:24:17 +00:00
TMPPARTS=$PRINTPARTS$ADNSIMPROPS
for ITEM in $TMPPARTS; do
2019-02-02 12:37:20 +00:00
TMPVAR="CONF$(get_prop_type $ITEM | tr '[:lower:]' '[:upper:]')"
if [ $(eval "echo \$$TMPVAR") == "true" ]; then
TMPVAL=1
else
TMPVAL=0
fi
2019-04-05 21:10:02 +00:00
change_sim_prop "Device simulation" "$ITEM" "$TMPVAL" "file"
2019-02-02 12:37:20 +00:00
done
fi
# Device description
if [ "$CONFDESCRIPTION" == "true" ]; then
2019-04-05 21:10:02 +00:00
change_sim_descr "Device simulation" 1 "file"
2018-04-15 22:05:33 +00:00
else
2019-04-05 21:10:02 +00:00
change_sim_descr "Device simulation" 0 "file"
2018-04-15 22:05:33 +00:00
fi
fi
2019-03-27 10:50:00 +00:00
# Updates boot options for fingerprint and simulation props
if [ "$PRINTEDIT" == 1 ]; then
if [ "$CONFPRINTBOOT" == "default" ]; then
OPTLCHNG=0
TMPTXT="default"
elif [ "$CONFPRINTBOOT" == "post" ]; then
OPTLCHNG=1
TMPTXT="post-fs-data"
elif [ "$CONFPRINTBOOT" == "late" ]; then
OPTLCHNG=2
TMPTXT="late_start service"
fi
replace_fn PRINTSTAGE $PRINTSTAGE $OPTLCHNG $LATEFILE
log_handler "Fingerprint boot stage is ${TMPTXT}."
2019-04-02 19:42:29 +00:00
if [ "$CONFPATCHBOOT" == "default" ]; then
OPTLCHNG=0
TMPTXT="default"
elif [ "$CONFPATCHBOOT" == "post" ]; then
OPTLCHNG=1
TMPTXT="post-fs-data"
elif [ "$CONFPATCHBOOT" == "late" ]; then
OPTLCHNG=2
TMPTXT="late_start service"
fi
replace_fn PATCHSTAGE $PATCHSTAGE $OPTLCHNG $LATEFILE
log_handler "Security patch boot stage is ${TMPTXT}."
2019-03-27 10:50:00 +00:00
fi
if [ "$DEVSIM" == 1 ]; then
if [ "$CONFSIMBOOT" == "default" ]; then
OPTLCHNG=0
TMPTXT="default"
elif [ "$CONFSIMBOOT" == "post" ]; then
OPTLCHNG=1
TMPTXT="post-fs-data"
elif [ "$CONFSIMBOOT" == "late" ]; then
OPTLCHNG=2
TMPTXT="late_start service"
fi
replace_fn SIMSTAGE $SIMSTAGE $OPTLCHNG $LATEFILE
log_handler "Device simulation boot stage is ${TMPTXT}."
fi
2019-02-02 12:37:20 +00:00
# Updates custom props
if [ "$PROPOPTION" != "preserve" ]; then
if [ "$CONFPROPS" ] || [ "$CONFPROPSPOST" ] || [ "$CONFPROPSLATE" ]; then
if [ "$PROPOPTION" == "add" ] || [ "$PROPOPTION" == "replace" ]; then
if [ "$PROPOPTION" == "replace" ]; then
2019-04-05 21:10:02 +00:00
reset_all_custprop "file"
2019-02-02 12:37:20 +00:00
fi
if [ "$CONFPROPS" ]; then
for ITEM in $CONFPROPS; do
2019-04-05 21:10:02 +00:00
set_custprop "$(get_eq_left "$ITEM")" "$(get_eq_right "$ITEM")" "default" "file"
2019-02-02 12:37:20 +00:00
done
fi
if [ "$CONFPROPSPOST" ]; then
for ITEM in $CONFPROPSPOST; do
2019-04-05 21:10:02 +00:00
set_custprop "$(get_eq_left "$ITEM")" "$(get_eq_right "$ITEM")" "post" "file"
2019-02-02 12:37:20 +00:00
done
fi
if [ "$CONFPROPSLATE" ]; then
for ITEM in $CONFPROPSLATE; do
2019-04-05 21:10:02 +00:00
set_custprop "$(get_eq_left "$ITEM")" "$(get_eq_right "$ITEM")" "late" "file"
2019-02-02 12:37:20 +00:00
done
fi
2018-09-04 07:55:57 +00:00
fi
2019-02-02 12:37:20 +00:00
else
2019-04-05 21:10:02 +00:00
reset_all_custprop "file"
2018-04-15 22:05:33 +00:00
fi
fi
2019-02-02 12:37:20 +00:00
# Updates props to delete
if [ "$DELPROPOPTION" != "preserve" ]; then
if [ "$CONFDELPROPS" ]; then
if [ "$DELPROPOPTION" == "add" ] || [ "$DELPROPOPTION" == "replace" ]; then
if [ "$DELPROPOPTION" == "replace" ]; then
2019-04-05 21:10:02 +00:00
reset_all_delprop "file"
2019-02-02 12:37:20 +00:00
fi
for ITEM in $CONFDELPROPS; do
2019-04-05 21:10:02 +00:00
set_delprop "$ITEM" "file"
2019-02-02 12:37:20 +00:00
done
2018-06-19 09:56:08 +00:00
fi
2019-02-02 12:37:20 +00:00
else
2019-04-05 21:10:02 +00:00
reset_all_delprop "file"
2018-06-19 09:56:08 +00:00
fi
fi
2019-02-02 12:37:20 +00:00
# Updates options
2019-03-27 10:50:00 +00:00
# Boot stage
if [ "$CONFBOOT" == "default" ]; then
2019-02-02 12:37:20 +00:00
OPTLCHNG=0
2019-03-27 10:50:00 +00:00
TMPTXT="default"
elif [ "$CONFBOOT" == "post" ]; then
OPTLCHNG=1
2019-02-02 12:37:20 +00:00
TMPTXT="post-fs-data"
2019-03-27 10:50:00 +00:00
elif [ "$CONFBOOT" == "late" ]; then
OPTLCHNG=2
TMPTXT="late_start service"
2019-02-02 12:37:20 +00:00
fi
2019-03-27 10:50:00 +00:00
replace_fn OPTIONBOOT $OPTIONBOOT $OPTLCHNG $LATEFILE
log_handler "General boot stage is ${TMPTXT}."
# Script colours
2019-02-02 12:37:20 +00:00
if [ "$CONFCOLOUR" == "true" ]; then
OPTCCHNG=1
else
OPTCCHNG=0
fi
replace_fn OPTIONCOLOUR $OPTIONCOLOUR $OPTCCHNG $LATEFILE
2019-03-27 10:50:00 +00:00
log_handler "Colour is set to $CONFCOLOUR."
# Fingerprints list update
2019-02-02 12:37:20 +00:00
if [ "$CONFWEB" == "true" ]; then
OPTWCHNG=1
else
OPTWCHNG=0
fi
replace_fn OPTIONWEB $OPTIONWEB $OPTWCHNG $LATEFILE
2019-03-27 10:50:00 +00:00
log_handler "Automatic fingerprints list update is set to $CONFWEB."
# Automatic fingerprints update
if [ "$CONFUPDATE" == "true" ]; then
OPTFCHNG=1
else
OPTFCHNG=0
fi
replace_fn OPTIONUPDATE $OPTIONUPDATE $OPTFCHNG $LATEFILE
log_handler "Automatic fingerprint update is set to $CONFUPDATE."
2018-04-15 22:05:33 +00:00
else
2019-04-05 21:10:02 +00:00
log_handler "The configuration file is not compatible with the current module version ($CONFTRANSF vs $VERSIONCMP)."
2018-04-15 22:05:33 +00:00
fi
2019-03-27 10:50:00 +00:00
# Update the system.prop file
system_prop
2018-04-15 22:05:33 +00:00
# Deletes the configuration file
log_handler "Deleting configuration file."
2019-11-02 22:24:17 +00:00
for ITEM in $CONFFILELST; do
rm -f $ITEM
done
2019-02-02 12:37:20 +00:00
log_handler "Configuration file import complete."
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() {
2018-08-07 11:50:01 +00:00
ping -c 1 -W 1 google.com >> $LOGFILE 2>&1 && CNTTEST="true" || CNTTEST="false"
2018-06-19 09:56:08 +00:00
}
2019-03-27 10:50:00 +00:00
# system.prop creation
system_prop() {
rm -f $MODPATH/system.prop
if [ "$OPTIONBOOT" == 0 ]; then
log_handler "Creating system.prop file."
touch $MODPATH/system.prop >> $LOGFILE 2>&1
echo -e "# This file will be read by resetprop\n\n# MagiskHide Props Config\n# Copyright (c) 2018-2019 Didgeridoohan @ XDA Developers\n# Licence: MIT\n" >> $MODPATH/system.prop
2019-04-02 19:42:29 +00:00
if [ "$PRINTSTAGE" == 0 ]; then
print_edit "$MODPATH/system.prop"
fi
if [ "$PATCHSTAGE" == 0 ]; then
patch_edit "$MODPATH/system.prop"
fi
if [ "$SIMSTAGE" == 0 ]; then
dev_sim_edit "$MODPATH/system.prop"
fi
2019-05-12 05:10:24 +00:00
if [ "$CUSTOMPROPS" ]; then
2019-04-02 19:42:29 +00:00
custom_edit "CUSTOMPROPS" "$MODPATH/system.prop"
fi
# Check system.prop content
system_prop_cont
fi
}
# system.prop content
system_prop_cont() {
if [ -f "$MODPATH/system.prop" ]; then
log_handler "system.prop contents:"
echo "----------------------------------------" >> $LOGFILE 2>&1
cat $MODPATH/system.prop >> $LOGFILE 2>&1
echo "----------------------------------------" >> $LOGFILE 2>&1
else
log_handler "No system.prop file present."
2019-03-27 10:50:00 +00:00
fi
}
# ======================== Installation functions ========================
# Places various module scripts in their proper places
script_placement() {
2019-11-02 22:24:17 +00:00
if [ -f "$LATEFILE" ] && [ -d "$MODULESPATH/MagiskHidePropsConf" ]; then
2019-03-27 10:50:00 +00:00
FILEV=$(get_file_value $LATEFILE "SCRIPTV=")
FILETRANSF=$(get_file_value $LATEFILE "SETTRANSF=")
2019-04-05 21:10:02 +00:00
LATEFILETMP="$LATEFILE"
elif [ -f "$SERVICEPATH/propsconf_late" ]; then
FILEV=$(get_file_value $SERVICEPATH/propsconf_late "SCRIPTV=")
FILETRANSF=$(get_file_value $SERVICEPATH/propsconf_late "SETTRANSF=")
LATEFILETMP="$SERVICEPATH/propsconf_late"
2019-03-27 10:50:00 +00:00
else
2019-11-02 22:24:17 +00:00
rm -f $LATEFILE
2019-03-27 10:50:00 +00:00
FILEV=0
FILETRANSF=$UPDATETRANSF
2019-04-05 21:10:02 +00:00
LATEFILETMP="$LATEFILE"
2019-03-27 10:50:00 +00:00
fi
log_print "- Installing scripts"
2019-04-05 21:10:02 +00:00
cp -af $TMPDIR/util_functions.sh $MODPATH/util_functions.sh >> $LOGFILE 2>&1
cp -af $TMPDIR/prints.sh $MODPATH/prints.sh >> $LOGFILE 2>&1
2019-03-27 10:50:00 +00:00
cp -af $UPDATELATEFILE $MODPATH/propsconf_late >> $LOGFILE 2>&1
if [ "$FILEV" ]; then
# New script
if [ "$UPDATEV" -gt "$FILEV" ]; then
# Fresh install
if [ "$FILEV" == 0 ]; then
log_print "- Placing settings script"
# Updated script with a required clearing of settings
elif [ "$UPDATETRANSF" -gt "$FILETRANSF" ] && [ -z "$NOTTRANSF" ]; then
2019-11-02 22:24:17 +00:00
log_handler "Current transfer version - ${FILETRANSF}"
log_handler "Update transfer version - ${UPDATETRANSF}"
log_handler "No settings set to not transfer"
log_print "- Script updated and settings cleared"
2019-03-27 10:50:00 +00:00
# Updated script
else
log_print "- Script updated"
log_print "- Transferring settings from old script"
# Prop settings
for ITEM in $SETTINGSLIST; do
# Checking if a script update requires some options not to transfer
case "$NOTTRANSF" in
2019-11-02 22:24:17 +00:00
*$ITEM*)
2019-03-27 10:50:00 +00:00
if [ "$UPDATETRANSF" -gt "$FILETRANSF" ]; then
TRANSFOPT=1
else
TRANSFOPT=0
fi
;;
*)
TRANSFOPT=0
;;
esac
if [ "$TRANSFOPT" == 1 ]; then
log_handler "Not transfering settings for ${ITEM}."
else
2019-04-05 21:10:02 +00:00
SOLD=$(get_file_value $LATEFILETMP "${ITEM}=")
2019-03-27 10:50:00 +00:00
SNEW=$(get_file_value $UPDATELATEFILE "${ITEM}=")
if [ "$SOLD" ] && [ "$SOLD" != "$SNEW" ]; then
log_handler "Setting ${ITEM} from ${SNEW} to ${SOLD}."
sed -i "s|${ITEM}=${SNEW}|${ITEM}=${SOLD}|" $UPDATELATEFILE
fi
fi
done
# Prop values
for ITEM in $PROPSETTINGSLIST; do
2019-04-05 21:10:02 +00:00
SOLD=$(get_file_value $LATEFILETMP "${ITEM}=")
2019-03-27 10:50:00 +00:00
if [ "$SOLD" ]; then
log_handler "Setting ${ITEM} to ${SOLD}."
sed -i "s|${ITEM}=\"\"|${ITEM}=\"${SOLD}\"|" $UPDATELATEFILE
fi
done
# Prop and file edits
for ITEM in $PROPSLIST; do
ITEM="$(get_prop_type $ITEM)"
REPROP=$(echo "RE${ITEM}" | tr '[:lower:]' '[:upper:]')
SETPROP=$(echo "SET${ITEM}" | tr '[:lower:]' '[:upper:]')
2019-04-05 21:10:02 +00:00
REOLD=$(get_file_value $LATEFILETMP "${REPROP}=")
SETOLD=$(get_file_value $LATEFILETMP "${SETPROP}=")
2019-03-27 10:50:00 +00:00
if [ "$REOLD" ] && [ "$REOLD" != "false" ]; then
log_handler "Setting sensitive prop ${ITEM} to ${REOLD}."
sed -i "s/${REPROP}=false/${REPROP}=${REOLD}/" $UPDATELATEFILE
fi
if [ "$SETOLD" ] && [ "$SETOLD" != "false" ]; then
log_handler "Setting file edit ${ITEM} to ${SETOLD}."
sed -i "s/${SETPROP}=false/${SETPROP}=${SETOLD}/" $UPDATELATEFILE
fi
done
fi
log_handler "Setting up late_start settings script."
2019-11-02 22:24:17 +00:00
if [ ! -d "$MHPCPATH" ]; then
mkdir -pv $MHPCPATH >> $LOGFILE 2>&1
2019-04-05 21:10:02 +00:00
fi
2019-03-27 10:50:00 +00:00
cp -af $UPDATELATEFILE $LATEFILE >> $LOGFILE 2>&1
# Downgraded script (flashed old module version)
elif [ "$UPDATEV" -lt "$FILEV" ]; then
log_print "- Settings cleared (script downgraded)"
2019-11-02 22:24:17 +00:00
if [ ! -d "$MHPCPATH" ]; then
mkdir -pv $MHPCPATH >> $LOGFILE 2>&1
2019-04-05 21:10:02 +00:00
fi
2019-03-27 10:50:00 +00:00
cp -af $UPDATELATEFILE $LATEFILE >> $LOGFILE 2>&1
# No update of script
else
log_print "- Module settings preserved"
fi
else
log_print "- Placing settings script"
log_handler "Setting up late_start settings script."
2019-11-02 22:24:17 +00:00
if [ ! -d "$MHPCPATH" ]; then
mkdir -pv $MHPCPATH >> $LOGFILE 2>&1
2019-04-05 21:10:02 +00:00
fi
2019-03-27 10:50:00 +00:00
cp -af $UPDATELATEFILE $LATEFILE >> $LOGFILE 2>&1
fi
2019-04-05 21:10:02 +00:00
if [ -f "$SERVICEPATH/propsconf_late" ]; then
log_handler "Old settings file found in $SERVICEPATH."
rm -f $SERVICEPATH/propsconf_late >> $LOGFILE 2>&1
fi
2019-03-27 10:50:00 +00:00
}
# Checks for the Universal SafetyNet Fix module and similar modules editing device fingerprint
usnf_check() {
log_print "- Checking for fingerprint conflicts"
for USNF in $USNFLIST; do
2019-04-05 21:10:02 +00:00
if [ -d "$MODULESPATH/$USNF" ]; then
2019-05-04 18:57:59 +00:00
if [ ! -f "$MODULESPATH/$USNF/disable" ]; then
NAME=$(get_file_value $MODULESPATH/$USNF/module.prop "name=")
ui_print "!"
log_print "! Module editing fingerprint detected!"
log_print "! Module - '$NAME'!"
log_print "! Fingerprint modification disabled!"
ui_print "!"
sed -i 's/FINGERPRINTENB=1/FINGERPRINTENB=0/' $UPDATELATEFILE
fi
2019-03-27 10:50:00 +00:00
fi
done
}
# Check for bin/xbin
bin_check() {
$BOOTMODE && BINCHECK=$COREPATH/mirror/system/xbin || BINCHECK=/system/xbin
if [ -d "$BINCHECK" ]; then
BIN=xbin
else
BIN=bin
fi
log_handler "Using /system/$BIN."
mv -f $MODPATH/system/binpath $MODPATH/system/$BIN >> $LOGFILE 2>&1
}
2019-11-02 22:24:17 +00:00
# Check for late_start service boot script in post-fs-data.d, in case someone's moved it, delete the old propsconf_post boot script if present and remove a few old log files from /cache
files_check() {
2019-03-27 10:50:00 +00:00
if [ -f "$POSTLATEFILE" ]; then
log_handler "Removing late_start service boot script from post-fs-data.d."
rm -f $POSTLATEFILE
fi
if [ -f "$POSTFILE" ]; then
log_handler "Removing old post-fs-data boot script from post-fs-data.d"
rm -f $POSTFILE
fi
2019-11-02 22:24:17 +00:00
for ITEM in $CACHERM; do
if [ -f "$ITEM" ]; then
log_handler "Removing old log files ($ITEM)."
rm -f $ITEM
fi
done
2019-03-27 10:50:00 +00:00
}
# Update the device simulation variables if a fingerprint is set
devsim_update() {
if [ "$MODULEFINGERPRINT" ]; then
log_handler "Updating device simulation variables."
2019-04-08 19:44:41 +00:00
print_parts "$MODULEFINGERPRINT" "var"
2019-03-27 10:50:00 +00:00
for ITEM in $PROPSETTINGSLIST; do
case $ITEM in
SIM*)
SUBA="$(get_file_value $LATEFILE "${ITEM}=")"
TMPVAR="$(echo $ITEM | sed 's|SIM|VAR|')"
TMPPROP="$(eval "echo \$$TMPVAR")"
sed -i "s|${ITEM}=\"${SUBA}\"|${ITEM}=\"${TMPPROP}\"|" $LATEFILE
;;
esac
done
# Reload module settings
load_settings
fi
}
# Load module settings and reapply the MODPATH variable
load_settings() {
log_handler "Loading/reloading module settings."
if [ -f "$LATEFILE" ]; then
. $LATEFILE
fi
}
# Installs everything
script_install() {
load_settings
usnf_check
bin_check
2019-11-02 22:24:17 +00:00
files_check
2019-03-27 10:50:00 +00:00
script_placement
log_print "- Updating placeholders"
placeholder_update $MODPATH/util_functions.sh MODVERSION VER_PLACEHOLDER "$MODVERSION"
2019-04-05 21:10:02 +00:00
placeholder_update $MODPATH/util_functions.sh LATEFILE LATE_PLACEHOLDER "$LATEFILE"
2019-03-27 10:50:00 +00:00
placeholder_update $MODPATH/util_functions.sh MIRRORLOC MIRROR_PLACEHOLDER "$MIRRORLOC"
2019-11-02 22:24:17 +00:00
placeholder_update $MODPATH/util_functions.sh VENDLOC VEND_PLACEHOLDER "$VENDLOC"
2019-03-27 10:50:00 +00:00
placeholder_update $MODPATH/util_functions.sh CACHELOC CACHE_PLACEHOLDER "$CACHELOC"
placeholder_update $MODPATH/util_functions.sh BIN BIN_PLACEHOLDER "$BIN"
2019-04-05 21:10:02 +00:00
placeholder_update $MODPATH/system/$BIN/props ADBPATH ADB_PLACEHOLDER "$ADBPATH"
placeholder_update $MODPATH/system/$BIN/props LATEFILE LATE_PLACEHOLDER "$LATEFILE"
2019-03-27 10:50:00 +00:00
load_settings
devsim_update
print_files
ui_print ""
ui_print "- Make sure to have Busybox installed."
ui_print "- osm0sis' Busybox is recommended."
ui_print ""
# Checks for configuration file
CONFFILE=""
for ITEM in $CONFFILELST; do
if [ -s "$ITEM" ]; then
CONFFILE="$ITEM"
break
fi
done
if [ "$CONFFILE" ]; then
load_settings
ui_print "- Configuration file found."
ui_print "- Installing..."
ui_print ""
2019-04-05 21:10:02 +00:00
config_file
2019-03-27 10:50:00 +00:00
else
load_settings
# Create system.prop in case of no configuration file
system_prop
fi
log_handler "Module installation complete."
}
2018-04-15 22:05:33 +00:00
# ======================== Fingerprint functions ========================
2018-05-29 07:29:19 +00:00
# Set new fingerprint
print_edit() {
2019-02-02 12:37:20 +00:00
if [ "$FINGERPRINTENB" == 1 -o "$PRINTMODULE" == 0 ] && [ "$PRINTEDIT" == 1 ]; then
2018-05-29 07:29:19 +00:00
log_handler "Changing fingerprint."
2019-02-02 12:37:20 +00:00
if [ "$PRINTVEND" == 1 ]; then
log_handler "Using vendor fingerprint (for Treble GSI ROMs)."
PRINTCHNG="$(resetprop ro.vendor.build.fingerprint)"
# Set device simulation variables
print_parts "$PRINTCHNG"
else
PRINTCHNG="$(echo $MODULEFINGERPRINT | sed 's|\_\_.*||')"
fi
2018-05-29 07:29:19 +00:00
for ITEM in $PRINTPROPS; do
2019-11-02 22:24:17 +00:00
if [ "$(resetprop $ITEM)" ]; then
log_handler "Changing/writing $ITEM."
if [ "$1" ]; then
echo "${ITEM}=${PRINTCHNG}" >> $1
else
resetprop -nv $ITEM $PRINTCHNG >> $LOGFILE 2>&1
fi
2019-03-27 10:50:00 +00:00
else
2019-11-02 22:24:17 +00:00
log_handler "$ITEM not currently set on device. Skipping."
2019-03-27 10:50:00 +00:00
fi
2018-07-19 19:47:43 +00:00
done
2019-02-02 12:37:20 +00:00
# Edit device description
if [ "$DESCRIPTIONSET" == 1 ]; then
if [ "$SIMDESCRIPTION" ]; then
log_handler "Changing/writing ro.build.description."
2019-03-27 10:50:00 +00:00
if [ "$1" ]; then
2019-04-02 19:42:29 +00:00
echo "ro.build.description=${SIMDESCRIPTION}" >> $1
2019-03-27 10:50:00 +00:00
else
resetprop -nv ro.build.description "$SIMDESCRIPTION" >> $LOGFILE 2>&1
fi
2019-02-02 12:37:20 +00:00
fi
else
log_handler "Changing/writing ro.build.description is disabled."
fi
2018-05-29 07:29:19 +00:00
fi
}
2019-04-02 19:42:29 +00:00
# Edit security patch date if included
patch_edit() {
if [ "$PRINTVEND" != 1 ]; then
case "$MODULEFINGERPRINT" in
*__*)
SECPATCH="$(get_sec_patch $MODULEFINGERPRINT)"
if [ "$SECPATCH" ]; then
log_handler "Updating security patch date to match fingerprint used."
if [ "$1" ]; then
echo "ro.build.version.security_patch=${SECPATCH}" >> $1
else
resetprop -nv ro.build.version.security_patch $SECPATCH >> $LOGFILE 2>&1
fi
fi
;;
esac
fi
}
2018-10-25 06:37:05 +00:00
# Create fingerprint files
print_files() {
2019-03-27 10:50:00 +00:00
if [ "$INSTFN" ]; then
log_print "- Creating fingerprint files."
else
log_print "Creating fingerprint files."
fi
rm -rf $MODPATH/printfiles >> $LOGFILE 2>&1
mkdir -pv $MODPATH/printfiles >> $LOGFILE 2>&1
2018-10-25 06:37:05 +00:00
# Loading prints
2019-03-27 10:50:00 +00:00
. $MODPATH/prints.sh
2018-10-25 06:37:05 +00:00
# Saving manufacturers
log_handler "Saving manufacturers."
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
for ITEM in $PRINTSLIST; do
TMPOEMLIST=$(echo "$OEMLIST $(get_first $ITEM)" | sed 's|^[ \t]*||')
OEMLIST="$TMPOEMLIST"
done
IFS=$SAVEIFS
TMPOEMLIST=$(echo $(printf '%s\n' $OEMLIST | sort -u))
OEMLIST="$TMPOEMLIST"
log_handler "Creating files."
for OEM in $OEMLIST; do
2019-03-27 10:50:00 +00:00
echo -e "PRINTSLIST=\"" >> $MODPATH/printfiles/${OEM}\.sh
grep $OEM >> $MODPATH/printfiles/${OEM}\.sh $MODPATH/prints.sh
echo -e "\"" >> $MODPATH/printfiles/${OEM}\.sh
2018-10-25 06:37:05 +00:00
done
2019-02-02 12:37:20 +00:00
# Check for updated fingerprint
device_print_update "Updating module fingerprint."
}
device_print_update() {
2019-04-08 19:44:41 +00:00
log_handler "$1"
2019-02-02 12:37:20 +00:00
if [ "$OPTIONUPDATE" == 1 ]; then
if [ "$FINGERPRINTENB" == 1 -o "$PRINTMODULE" == 0 ] && [ "$PRINTEDIT" == 1 ] && [ "$MODULEFINGERPRINT" ]; then
TMPDEV="${SIMBRAND}/${SIMNAME}/${SIMDEVICE}"
2019-04-08 19:44:41 +00:00
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
2019-02-02 12:37:20 +00:00
for ITEM in $PRINTSLIST; do
case $ITEM in
*$TMPDEV*)
2019-04-08 19:44:41 +00:00
IFS=$SAVEIFS
case $ITEM in
*\;*)
ITEMCOUNT=1
ITEMFOUND=0
TMPVPRINT="$(get_print_versions "$(get_eq_left "$ITEM")")"
TMPVCURR="$(get_android_version $SIMRELEASE)"
for V in $TMPVPRINT; do
if [ "$(get_android_version $V)" == "$TMPVCURR" ]; then
ITEMFOUND=1
break
fi
ITEMCOUNT=$(($ITEMCOUNT+1))
done
if [ "$ITEMFOUND" == 1 ]; then
TMPPRINT="$(get_eq_right "$ITEM" | cut -f $ITEMCOUNT -d ';')"
else
TMPPRINT=""
fi
;;
*) TMPPRINT="$(get_eq_right "$ITEM")"
;;
esac
2019-02-02 12:37:20 +00:00
break
;;
esac
done
2019-04-08 19:44:41 +00:00
IFS=$SAVEIFS
2019-02-02 12:37:20 +00:00
if [ "$TMPDEV" ] && [ "$TMPPRINT" ]; then
2019-04-08 19:44:41 +00:00
log_handler "Checking for updated fingerprint ($TMPDEV).\nCurrent - $MODULEFINGERPRINT\nUpdate - $TMPPRINT"
2019-03-27 10:50:00 +00:00
if [ "$MODULEFINGERPRINT" != "$TMPPRINT" ]; then
change_print "$1" "$TMPPRINT" "update"
2019-02-02 12:37:20 +00:00
replace_fn PRINTCHK 0 1 $LATEFILE
# Load module values
. $LATEFILE
else
log_handler "No update available."
fi
2019-04-08 19:44:41 +00:00
else
log_handler "Can't check for update."
2019-02-02 12:37:20 +00:00
fi
fi
fi
2018-10-25 06:37:05 +00:00
}
2018-04-15 22:05:33 +00:00
# Checks and updates the prints list
2018-03-20 18:31:57 +00:00
download_prints() {
2019-11-02 22:24:17 +00:00
if [ -z "$ANDROID_SOCKET_adbd" ] && [ "$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
2018-10-30 08:28:47 +00:00
PRINTSWWW=$PRINTSDEV
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."
2018-09-04 07:55:57 +00:00
wget -T 5 -q -O $PRINTSTMP $PRINTSWWW >> $LOGFILE 2>&1
if [ -s "$PRINTSTMP" ]; then
2018-06-19 09:56:08 +00:00
LISTVERSION=$(get_file_value $PRINTSTMP "PRINTSV=")
2018-09-04 07:55:57 +00:00
if [ "$LISTVERSION" ]; then
if [ "$LISTVERSION" == "Dev" ] || [ "$LISTVERSION" -gt "$(get_file_value $PRINTSLOC "PRINTSV=")" ]; then
2019-02-02 12:37:20 +00:00
module_v_ctrl
2018-10-25 06:37:05 +00:00
if [ "$(get_file_value $PRINTSTMP "PRINTSTRANSF=")" -le $VERSIONCMP ]; then
2018-09-04 07:55:57 +00:00
mv -f $PRINTSTMP $PRINTSLOC >> $LOGFILE 2>&1
# Updates list version in module.prop
replace_fn version $VERSIONTMP "${MODVERSION}-v${LISTVERSION}" $MODPATH/module.prop
log_print "Updated list to v${LISTVERSION}."
2018-10-25 06:37:05 +00:00
print_files
2018-09-04 07:55:57 +00:00
else
rm -f $PRINTSTMP
log_print "New fingerprints list requires module update."
fi
2018-06-19 09:56:08 +00:00
else
rm -f $PRINTSTMP
2018-09-04 07:55:57 +00:00
log_print "Fingerprints list up-to-date."
2018-06-19 09:56:08 +00:00
fi
2018-03-26 16:25:58 +00:00
else
rm -f $PRINTSTMP
2018-09-04 07:55:57 +00:00
log_print "! File not downloaded!"
log_handler "Couldn't extract list version."
2018-03-26 16:25:58 +00:00
fi
2018-09-04 07:55:57 +00:00
elif [ -f "$PRINTSTMP" ]; then
rm -f $PRINTSTMP
log_print "! File not downloaded!"
log_handler "File is empty."
2018-03-26 16:25:58 +00:00
else
2018-09-04 07:55:57 +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-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
2019-02-02 12:37:20 +00:00
# Saves new module valueS
replace_fn MODULEFINGERPRINT "\"$MODULEFINGERPRINT\"" "\"\"" $LATEFILE
# Updates vendor print setting
replace_fn PRINTVEND 1 0 $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
2019-02-02 12:37:20 +00:00
# Updates simulation setting
replace_fn DEVSIM 1 0 $LATEFILE
2018-04-15 22:05:33 +00:00
2019-02-02 12:37:20 +00:00
# Clear out device simulation variables
print_parts "none"
2019-04-05 21:10:02 +00:00
after_change "$1" "$2"
2018-04-15 22:05:33 +00:00
}
# Use fingerprint
change_print() {
log_handler "Changing device fingerprint to $2."
2019-02-02 12:37:20 +00:00
# Saves new module values
replace_fn MODULEFINGERPRINT "\"$MODULEFINGERPRINT\"" "\"$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
2019-02-02 12:37:20 +00:00
# Set device simulation variables
print_parts "$2"
2018-04-15 22:05:33 +00:00
NEWFINGERPRINT=""
2019-05-04 18:57:59 +00:00
after_change "$1" "$3"
2019-02-02 12:37:20 +00:00
}
# Use vendor fingerprint
change_print_vendor() {
if [ $2 == 1 ]; then
STATETXT="Enabling"
TMPVAL=0
BUILD1="false"
BUILD2="true"
else
STATETXT="Disabling"
TMPVAL=1
BUILD1="true"
BUILD2="false"
fi
log_handler "$STATETXT using the stock vendor fingerprint (for Treble GSI ROMs)."
# Enables or disables the setting
replace_fn PRINTVEND $TMPVAL $2 $LATEFILE
# Updates prop change variables in propsconf_late
replace_fn PRINTEDIT $TMPVAL $2 $LATEFILE
# Clearing out module value
replace_fn MODULEFINGERPRINT "\"$MODULEFINGERPRINT\"" "\"\"" $LATEFILE
# Updates simulation setting
replace_fn DEVSIM $TMPVAL $2 $LATEFILE
# Set device simulation variables
print_parts "$ORIGVENDPRINT"
2019-05-04 18:57:59 +00:00
after_change "$1" "$3"
2019-02-02 12:37:20 +00:00
}
# Save props values from fingerprint parts
print_parts() {
DLIM1=1
DLIM2=1
for ITEM in $PRINTPARTS; do
TMPVALUE=""
TMPPROP=$(get_prop_type $ITEM | tr '[:lower:]' '[:upper:]')
if [ $1 != "none" ]; then
2019-03-27 10:50:00 +00:00
TMPVALUE=$(echo $1 | sed 's|\:user\/release-keys.*||' | cut -f $DLIM1 -d ':' | cut -f $DLIM2 -d '/')
2019-02-02 12:37:20 +00:00
eval "VAR${TMPPROP}='$TMPVALUE'"
fi
DLIM2=$(($DLIM2 + 1))
if [ "$DLIM2" == 4 ]; then
DLIM1=2
DLIM2=1
fi
if [ "$2" != "var" ]; then
SUBA=$(get_file_value $LATEFILE "SIM${TMPPROP}=")
replace_fn "SIM${TMPPROP}" "\"$SUBA\"" "\"$TMPVALUE\"" $LATEFILE
fi
done
VARDESCRIPTION=""
2019-03-27 10:50:00 +00:00
VARSDK=""
2019-02-02 12:37:20 +00:00
if [ $1 != "none" ]; then
VARDESCRIPTION="${VARNAME}-user $VARRELEASE $VARID $VARINCREMENTAL release-keys"
2019-03-27 10:50:00 +00:00
for ITEM in $APILVL; do
case $VARRELEASE in
*$(get_eq_left $ITEM)*)
VARSDK="$(get_eq_right $ITEM)"
break
;;
esac
done
2019-02-02 12:37:20 +00:00
fi
if [ "$2" != "var" ]; then
replace_fn SIMDESCRIPTION "\"$SIMDESCRIPTION\"" "\"$VARDESCRIPTION\"" $LATEFILE
2019-11-02 22:24:17 +00:00
replace_fn SIMDISPLAY "\"$SIMDISPLAY\"" "\"$VARDESCRIPTION\"" $LATEFILE
2019-03-27 10:50:00 +00:00
replace_fn SIMSDK "\"$SIMSDK\"" "\"$VARSDK\"" $LATEFILE
2019-02-02 12:37:20 +00:00
fi
# Load module values
. $LATEFILE
}
# ======================== Device simulation functions ========================
# Edit the simulation props
dev_sim_edit() {
if [ "$FINGERPRINTENB" == 1 -o "$PRINTMODULE" == 0 ] && [ "$PRINTEDIT" == 1 ]; then
if [ "$DEVSIM" == 1 ]; then
log_handler "Editing device simulation props."
2019-03-27 10:50:00 +00:00
TMPPARTS=$PRINTPARTS$ADNSIMPROPS
for ITEM in $TMPPARTS; do
2019-02-02 12:37:20 +00:00
TMPPROP=$(get_prop_type $ITEM | tr '[:lower:]' '[:upper:]')
TMPENB=$(get_file_value $LATEFILE "${TMPPROP}SET=")
TMPVALUE=$(get_file_value $LATEFILE "SIM${TMPPROP}=")
if [ "$TMPENB" == 1 ] && [ "$TMPVALUE" ]; then
log_handler "Changing/writing $ITEM."
2019-03-27 10:50:00 +00:00
if [ "$1" ]; then
2019-04-02 19:42:29 +00:00
echo "${ITEM}=${TMPVALUE}" >> $1
2019-03-27 10:50:00 +00:00
else
resetprop -nv $ITEM $TMPVALUE >> $LOGFILE 2>&1
fi
2019-02-02 12:37:20 +00:00
else
log_handler "Changing/writing $ITEM is disabled."
fi
done
fi
fi
}
# Enable/disable the option
change_dev_sim() {
if [ $DEVSIM == 0 ]; then
STATETXT="Enabling"
TMPVAL=1
else
STATETXT="Disabling"
TMPVAL=0
2018-04-15 22:05:33 +00:00
fi
2019-02-02 12:37:20 +00:00
log_handler "$STATETXT basic device simulation."
# Enables or disables the setting
replace_fn "DEVSIM" $DEVSIM $TMPVAL $LATEFILE
after_change "$1" "$2"
}
# Change if prop should be simulated or not
change_sim_prop() {
if [ $3 == 1 ]; then
STATETXT="enabled"
else
STATETXT="disabled"
fi
log_handler "Changing device simulation prop $2 to $STATETXT."
TMPPROP=$(get_prop_type $2 | tr '[:lower:]' '[:upper:]')
SUBA=$(get_file_value $LATEFILE "${TMPPROP}SET=")
# Saves new value
replace_fn "${TMPPROP}SET" $SUBA $3 $LATEFILE
2019-04-05 21:10:02 +00:00
after_change "$1" "$4"
2019-02-02 12:37:20 +00:00
}
# Change if description should be simulated or not
change_sim_descr() {
if [ $2 == 1 ]; then
STATETXT="enabled"
else
STATETXT="disabled"
fi
log_handler "Changing device description editing to $STATETXT."
# Saves new value
replace_fn DESCRIPTIONSET $DESCRIPTIONSET $2 $LATEFILE
2019-04-05 21:10:02 +00:00
after_change "$1" "$3"
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
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
2019-02-02 12:37:20 +00:00
if [ "$PROPCOUNT" == 0 ]; then
2018-05-29 07:29:19 +00:00
replace_fn PROPEDIT 1 0 $LATEFILE
2018-04-15 22:05:33 +00:00
fi
2019-04-05 21:10:02 +00:00
after_change "$1" "$2"
2018-04-15 22:05:33 +00:00
}
# 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
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
2019-04-05 21:10:02 +00:00
after_change "$1" "$3"
2018-04-15 22:05:33 +00:00
}
# 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
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() {
2019-02-02 12:37:20 +00:00
if [ "$1" ] && [ "$CUSTOMEDIT" == 1 ]; then
2018-09-04 07:55:57 +00:00
TMPLST="$(get_file_value $LATEFILE "${1}=")"
if [ "$TMPLST" ]; then
log_handler "Writing custom props."
for ITEM in $TMPLST; do
log_handler "Changing/writing $(get_eq_left "$ITEM")."
2019-04-02 19:42:29 +00:00
TMPITEM=$(echo $(get_eq_right "$ITEM") | sed 's|_sp_| |g')
if [ "$2" ]; then
2019-03-27 10:50:00 +00:00
echo "$(get_eq_left "$ITEM")=${TMPITEM}" >> $2
else
resetprop -nv $(get_eq_left "$ITEM") "$TMPITEM" >> $LOGFILE 2>&1
fi
2018-09-04 07:55:57 +00:00
done
fi
2018-05-29 07:29:19 +00:00
fi
}
2019-05-04 18:57:59 +00:00
# Find custom props module set value
custprop_value() {
TMPLST="$CUSTOMPROPSLIST"
if [ "$TMPLST" ]; then
for ITEM in $TMPLST; do
case "$ITEM" in
*$1*)
echo $(get_eq_right "$ITEM" | sed 's|_sp_| |g')
;;
esac
done
fi
}
2018-04-15 22:05:33 +00:00
# Set custom prop value
set_custprop() {
if [ "$2" ]; then
2019-02-02 12:37:20 +00:00
# Reset the prop
2019-05-04 18:57:59 +00:00
reset_custprop "$1" "$2" "bootstage"
2019-02-02 12:37:20 +00:00
# Set the prop
2018-09-04 07:55:57 +00:00
PROPSBOOTSTAGE="CUSTOMPROPS"
2019-02-02 12:37:20 +00:00
PROPSTXT="default"
2018-09-04 07:55:57 +00:00
if [ "$3" == "post" ]; then
PROPSBOOTSTAGE="CUSTOMPROPSPOST"
2019-02-02 12:37:20 +00:00
PROPSTXT="post-fs-data"
2018-09-04 07:55:57 +00:00
elif [ "$3" == "late" ]; then
PROPSBOOTSTAGE="CUSTOMPROPSLATE"
2019-02-02 12:37:20 +00:00
PROPSTXT="late_start service"
elif [ "$3" == "both" ]; then
PROPSBOOTSTAGE="CUSTOMPROPSPOST CUSTOMPROPSLATE"
PROPSTXT="post-fs-data/late_start service"
2018-09-04 07:55:57 +00:00
fi
2018-06-03 16:40:24 +00:00
TMPVALUE=$(echo "$2" | sed 's| |_sp_|g')
2019-02-02 12:37:20 +00:00
TMPORIG=$(echo "$4" | sed 's| |_sp_|g')
DLIMTMP=1
for ITEM in $PROPSBOOTSTAGE; do
CURRCUSTPROPS=$(get_file_value $LATEFILE "${ITEM}=")
case "$CURRCUSTPROPS" in
*$1*)
2019-11-02 22:24:17 +00:00
if [ "$(echo $CUSTOMPROPSLIST | grep -Eo "(^| )$1($| )")" ]; then
TMPCUSTPROPS=$(echo "$CURRCUSTPROPS" | sed "s|${1}=${TMPORIG}|${1}=${TMPVALUE}|")
else
TMPCUSTPROPS=$(echo "$CURRCUSTPROPS ${1}=${TMPVALUE}" | sed 's|^[ \t]*||')
fi
2019-02-02 12:37:20 +00:00
;;
2019-11-02 22:24:17 +00:00
*) TMPCUSTPROPS=$(echo "$CURRCUSTPROPS ${1}=${TMPVALUE}" | sed 's|^[ \t]*||')
2019-02-02 12:37:20 +00:00
;;
esac
SORTCUSTPROPS=$(echo $(printf '%s\n' $TMPCUSTPROPS | sort -u))
2018-04-15 22:05:33 +00:00
2019-02-02 12:37:20 +00:00
log_handler "Setting custom prop $1 in $(echo $PROPSTXT | cut -f $DLIMTMP -d '/') stage."
replace_fn $ITEM "\"$CURRCUSTPROPS\"" "\"$SORTCUSTPROPS\"" $LATEFILE
replace_fn CUSTOMEDIT 0 1 $LATEFILE
DLIMTMP=$(($DLIMTMP + 1))
2019-05-04 18:57:59 +00:00
# if [ "$ITEM" == "CUSTOMPROPSLATE" ] && [ "$(get_file_value $LATEFILE "CUSTOMEDIT=")" == 1 ]; then
# case "$CURRCUSTPROPS" in
# *$1*) #Do nothing when the prop already exists
# ;;
# *)
# CUSTOMPROPSLATE=$(get_file_value $LATEFILE "${ITEM}=")
# CNTLITEM=1
# FNDLITEM=0
# for LITEM in $CUSTOMPROPSLATE
# case "$CUSTOMPROPSLATE" in
# *$1*)
# $FNDLITEM=1
# break
# ;;
# esac
# CNTLITEM=$(($CNTLITEM + 1))
# done
# if [ "$FNDLITEM" == 1 ]; then
# CUSTOMPROPSDELAY=$(get_file_value $LATEFILE "CUSTOMPROPSDELAY=")
# replace_fn CUSTOMPROPSDELAY "$CUSTOMPROPSDELAY" "$(echo "$CUSTOMPROPSDELAY" | cut -f 1-$CNTLITEM -d ';');0;$(echo "$CUSTOMPROPSDELAY" | cut -f $(($CNTLITEM + 1))- -d ';')" $LATEFILE
# fi
# ;;
# esac
# fi
2019-02-02 12:37:20 +00:00
done
2018-04-15 22:05:33 +00:00
2019-04-05 21:10:02 +00:00
after_change "$1" "$4"
2018-04-15 22:05:33 +00:00
fi
}
# Reset all custom prop values
reset_all_custprop() {
log_handler "Resetting all custom props."
# Removing all custom props
2019-02-02 12:37:20 +00:00
replace_fn CUSTOMPROPS "\"$CUSTOMPROPS\"" "\"\"" $LATEFILE
replace_fn CUSTOMPROPSPOST "\"$CUSTOMPROPSPOST\"" "\"\"" $LATEFILE
replace_fn CUSTOMPROPSLATE "\"$CUSTOMPROPSLATE\"" "\"\"" $LATEFILE
2018-04-25 22:17:32 +00:00
replace_fn CUSTOMEDIT 1 0 $LATEFILE
2018-04-15 22:05:33 +00:00
2019-04-05 21:10:02 +00:00
after_change "Resetting all custom props" "$1"
2018-04-15 22:05:33 +00:00
}
# Reset custom prop value
reset_custprop() {
2019-02-02 12:37:20 +00:00
log_handler "Resetting custom prop $1."
PROPSBOOTSTAGE="CUSTOMPROPS CUSTOMPROPSPOST CUSTOMPROPSLATE"
2018-06-03 16:40:24 +00:00
TMPVALUE=$(echo "$2" | sed 's| |_sp_|g')
2018-04-15 22:05:33 +00:00
2019-02-02 12:37:20 +00:00
for ITEM in $PROPSBOOTSTAGE; do
CURRCUSTPROPS=$(get_file_value $LATEFILE "${ITEM}=")
2019-05-04 18:57:59 +00:00
TMPCUSTPROPS=$(echo $CURRCUSTPROPS | sed "s|${1}=${TMPVALUE}||" | tr -s " " | sed 's|^[ \t]*||;s|[ \t]*$||')
2019-02-02 12:37:20 +00:00
# Updating custom props string
replace_fn $ITEM "\"$CURRCUSTPROPS\"" "\"$TMPCUSTPROPS\"" $LATEFILE
done
2018-04-15 22:05:33 +00:00
2019-02-02 12:37:20 +00:00
if [ -z "$CUSTOMPROPS" ] && [ -z "$CUSTOMPROPSPOST" ] && [ -z "$CUSTOMPROPSLATE" ]; then
2018-04-25 22:17:32 +00:00
replace_fn CUSTOMEDIT 1 0 $LATEFILE
2018-04-15 22:05:33 +00:00
fi
2018-09-04 07:55:57 +00:00
if [ "$3" != "bootstage" ]; then
after_change "$1"
fi
}
2018-06-19 09:56:08 +00:00
# ======================== Delete Props functions ========================
# Delete props
prop_del() {
2019-02-02 12:37:20 +00:00
if [ "$DELEDIT" == 1 ]; then
2018-06-19 09:56:08 +00:00
log_handler "Deleting props."
2019-02-02 12:37:20 +00:00
for ITEM in $DELETEPROPS; do
2018-06-19 09:56:08 +00:00
log_handler "Deleting $ITEM."
TMPITEM=$( echo $(get_eq_right "$ITEM") | sed 's|_sp_| |g')
2018-11-18 06:31:58 +00:00
case "$ITEM" in
persist*)
resetprop -pv --delete $ITEM >> $LOGFILE 2>&1
;;
*)
resetprop -v --delete $ITEM >> $LOGFILE 2>&1
;;
esac
2018-06-19 09:56:08 +00:00
done
fi
}
# Set prop to delete
set_delprop() {
if [ "$1" ]; then
2019-02-02 12:37:20 +00:00
TMPDELPROPS=$(echo "$DELETEPROPS ${1}" | sed 's|^[ \t]*||')
2018-06-19 09:56:08 +00:00
SORTDELPROPS=$(echo $(printf '%s\n' $TMPDELPROPS | sort -u))
log_handler "Setting prop to delete, $1."
2019-02-02 12:37:20 +00:00
replace_fn DELETEPROPS "\"$DELETEPROPS\"" "\"$SORTDELPROPS\"" $LATEFILE
2018-06-19 09:56:08 +00:00
replace_fn DELEDIT 0 1 $LATEFILE
2019-04-05 21:10:02 +00:00
after_change "Delete $1" "$2"
2018-06-19 09:56:08 +00:00
fi
}
# Reset all props to delete
reset_all_delprop() {
log_handler "Resetting list of props to delete."
# Removing all props to delete
2019-02-02 12:37:20 +00:00
replace_fn DELETEPROPS "\"$DELETEPROPS\"" "\"\"" $LATEFILE
2018-06-19 09:56:08 +00:00
replace_fn DELEDIT 1 0 $LATEFILE
2019-04-05 21:10:02 +00:00
after_change "Reset all props to delete." "$1"
2018-06-19 09:56:08 +00:00
}
# Reset prop to delete
reset_delprop() {
log_handler "Resetting prop to delete, $1."
2019-02-02 12:37:20 +00:00
TMPDELPROPS=$(echo $DELETEPROPS | sed "s|${1}||" | tr -s " " | sed 's|^[ \t]*||')
2018-06-19 09:56:08 +00:00
# Resetting prop to delete
2019-02-02 12:37:20 +00:00
replace_fn DELETEPROPS "\"$DELETEPROPS\"" "\"$TMPDELPROPS\"" $LATEFILE
# Loading new value
. $LATEFILE
if [ -z "$DELETEPROPS" ]; then
2018-06-19 09:56:08 +00:00
replace_fn DELEDIT 1 0 $LATEFILE
fi
2019-03-27 10:50:00 +00:00
after_change "Reset prop to delete - $1"
2018-06-19 09:56:08 +00:00
}
# ======================== Log collecting functions ========================
# Collects useful logs and info for troubleshooting
collect_logs() {
log_handler "Collecting logs and information."
# Create temporary directory
2018-08-07 11:50:01 +00:00
mkdir -pv $TMPLOGLOC >> $LOGFILE 2>&1
2018-06-19 09:56:08 +00:00
# Saving Magisk and module log files and device original build.prop
for ITEM in $TMPLOGLIST; do
2018-07-01 05:29:20 +00:00
if [ -f "$ITEM" ]; then
case "$ITEM" in
2019-02-02 12:37:20 +00:00
*build.prop*) BPNAME="build_$(echo $ITEM | sed 's|\/build.prop||' | sed 's|.*\/||g').prop"
2018-07-01 05:29:20 +00:00
;;
2019-02-02 12:37:20 +00:00
*) BPNAME=""
2018-07-01 05:29:20 +00:00
;;
esac
2019-11-02 22:24:17 +00:00
if [ "$ITEM" != "$MHPCPATH/propsconf.log" ]; then
2019-04-02 19:42:29 +00:00
cp -af $ITEM ${TMPLOGLOC}/${BPNAME} >> $LOGFILE 2>&1
fi
2018-07-01 05:29:20 +00:00
else
2019-11-02 22:24:17 +00:00
log_handler "$ITEM not available."
2018-07-01 05:29:20 +00:00
fi
2018-06-19 09:56:08 +00:00
done
# Saving the current prop values
resetprop > $TMPLOGLOC/props.txt
2019-04-05 21:10:02 +00:00
2019-04-02 19:42:29 +00:00
# Saving the log file
2019-11-02 22:24:17 +00:00
cp -af $MHPCPATH/propsconf.log $TMPLOGLOC >> $LOGFILE 2>&1
2018-06-19 09:56:08 +00:00
# Package the files
2019-11-02 22:24:17 +00:00
cd $MHPCPATH
2018-08-07 11:50:01 +00:00
tar -zcvf propslogs.tar.gz propslogs >> $LOGFILE 2>&1
2018-06-19 09:56:08 +00:00
# Copy package to internal storage
2019-11-02 22:24:17 +00:00
mv -f $MHPCPATH/propslogs.tar.gz /storage/emulated/0 >> $LOGFILE 2>&1
2018-09-04 07:55:57 +00:00
2018-06-19 09:56:08 +00:00
# Remove temporary directory
2018-08-07 11:50:01 +00:00
rm -rf $TMPLOGLOC >> $LOGFILE 2>&1
2018-06-19 09:56:08 +00:00
log_handler "Logs and information collected."
2018-07-01 05:29:20 +00:00
if [ "$1" != "issue" ]; then
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
fi
}
2018-07-19 19:47:43 +00:00
# Log print
2019-04-02 19:42:29 +00:00
if [ "$BOOTSTAGE" != "post" ]; then
log_handler "Functions loaded."
bb_check
fi