MagiskHidePropsConf/common/util_functions.sh

2351 lines
64 KiB
Bash
Raw Normal View History

2018-03-18 15:39:43 +00:00
#!/system/bin/sh
# MagiskHide Props Config
2020-01-10 18:45:27 +00:00
# Copyright (c) 2018-2020 Didgeridoohan @ XDA Developers
2019-02-02 12:37:20 +00:00
# Licence: MIT
2018-03-18 15:39:43 +00:00
2020-08-14 08:01:35 +00:00
ADBPATH=/data/adb
MHPCPATH=$ADBPATH/mhpc
if [ "$INSTFN" ]; then
LOGFILE=$MHPCPATH/propsconf_install.log
else
LOGFILE=$MHPCPATH/propsconf.log
fi
2020-10-25 19:49:49 +00:00
# Checking Magisk Busybox
2020-08-14 08:01:35 +00:00
if [ -z "$INSTFN" ] && [ "$BOOTSTAGE" != "post" -a "$BOOTSTAGE" != "late" ]; then
BBPATH=$ADBPATH/magisk/busybox
if [ -f "$BBPATH" ]; then
for ITEM in $($BBPATH --list | tail -n +3); do
alias $ITEM="$BBPATH $ITEM"
done
fi
if [ -f "$BBPATH" ]; then
echo "" >> $LOGFILE 2>&1
echo -e "$(date +"%Y-%m-%d %H:%M:%S.%3N") - Using $($BBPATH | head -1)." >> $LOGFILE 2>&1
echo "$BBPATH" >> $LOGFILE 2>&1
else
echo "" >> $LOGFILE 2>&1
echo -e "$(date +"%Y-%m-%d %H:%M:%S.%3N") - No Busybox found." >> $LOGFILE 2>&1
fi
fi
# Finding file values, $1=file (with path), $2=string to look for
2019-03-27 10:50:00 +00:00
get_file_value() {
if [ -f "$1" ]; then
2020-08-14 08:01:35 +00:00
echo $(grep $2 $1) | sed "s|.*${2}||" | sed 's|\"||g'
2019-03-27 10:50:00 +00:00
fi
}
2019-02-02 12:37:20 +00:00
# ======================== Variables ========================
2019-11-02 22:24:17 +00:00
MODULESPATH=$ADBPATH/modules
2019-11-22 19:19:18 +00:00
LATEFILE=$MHPCPATH/propsconf_late
if [ -z $SLOT ]; then
CACHELOC=/cache
else
CACHELOC=/data/cache
fi
2019-03-27 10:50:00 +00:00
if [ "$INSTFN" ]; then
# Installation (config.sh)
2019-11-22 19:19:18 +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-03-27 10:50:00 +00:00
POSTFILE=$POSTPATH/propsconf_post
POSTLATEFILE=$POSTPATH/propsconf_late
2020-03-06 12:37:19 +00:00
UPDATELATEFILE=$MHPCPATH/propsconf_late_update
ORIGLATEFILE=$MODPATH/common/propsconf_late
2019-11-02 22:24:17 +00:00
CACHERM="
$CACHELOC/propsconf_postfile.log
$CACHELOC/propsconf.log
$CACHELOC/propsconf_install.log
$CACHELOC/propsconf_last.log
"
2019-03-27 10:50:00 +00:00
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
2020-09-12 18:30:24 +00:00
OPTIONWEBP
OPTIONWEBU
2019-03-27 10:50:00 +00:00
OPTIONUPDATE
2019-11-22 19:19:18 +00:00
OPTIONBACK
2019-03-27 10:50:00 +00:00
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
2020-02-26 21:08:29 +00:00
MANUFACTURERSET
MODELSET
PARTPROPSSET
2019-03-27 10:50:00 +00:00
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
2020-02-26 21:08:29 +00:00
SIMMANUFACTURER
SIMMODEL
2019-03-27 10:50:00 +00:00
CUSTOMPROPS
CUSTOMPROPSPOST
CUSTOMPROPSLATE
2019-05-04 18:57:59 +00:00
CUSTOMPROPSDELAY
2019-03-27 10:50:00 +00:00
DELETEPROPS
"
else
# Placeholder variables
2020-08-14 08:01:35 +00:00
MODVERSIONPH=VER_PLACEHOLDER
BINPH=BIN_PLACEHOLDER
2019-03-27 10:50:00 +00:00
# Log variables
2019-11-02 22:24:17 +00:00
LASTLOGFILE=$MHPCPATH/propsconf_last.log
2020-01-26 09:36:26 +00:00
VLOGFILE=$MHPCPATH/propsconf_verbose.log
VLASTLOGFILE=$MHPCPATH/propsconf_verbose_last.log
2019-11-02 22:24:17 +00:00
TMPLOGLOC=$MHPCPATH/propslogs
2019-03-27 10:50:00 +00:00
TMPLOGLIST="
2019-11-02 22:24:17 +00:00
$MHPCPATH/defaultprops
2019-11-03 21:04:04 +00:00
$CACHELOC/magisk.log
$CACHELOC/magisk.log.bak
2019-11-02 22:24:17 +00:00
$MHPCPATH/propsconf*
2019-03-27 10:50:00 +00:00
$LATEFILE
"
fi
2020-09-12 18:30:24 +00:00
TMPFSMOUNT=$(magisk --path)
MIRRORPATH=$TMPFSMOUNT/.magisk/mirror
2019-03-27 10:50:00 +00:00
SYSTEMFILE=$MODPATH/system.prop
2019-11-22 19:19:18 +00:00
RUNFILE=$MHPCPATH/script_check
2020-09-12 18:30:24 +00:00
UPDATECHECK=""
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-22 19:19:18 +00:00
2019-03-27 10:50:00 +00:00
# Fingerprint variables
2020-01-10 18:45:27 +00:00
PRINTSLOC=$MODPATH/common/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
2020-02-26 21:08:29 +00:00
CSTMPRINTS=/data/media/0/printslist
2019-11-03 21:04:04 +00:00
CSTMFILE=$PRINTFILES/Custom.sh
2020-02-26 21:08:29 +00:00
EXPORTPATH=/data/media/0/mhpc
EXPORTFILE=$EXPORTPATH/propsconf_conf
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
2020-08-27 09:07:28 +00:00
PIXELARITY
2019-03-27 10:50:00 +00:00
"
# Configuration file locations
2020-03-06 12:37:19 +00:00
CONFFILELOC="
2020-01-17 08:44:46 +00:00
/data
$CACHELOC
/data/media/0
2019-03-27 10:50:00 +00:00
"
2018-03-18 15:39:43 +00:00
2020-09-12 18:30:24 +00:00
# Solo-run run options
SOLORUN="
d
f
h
l
r
s
u
"
2018-03-18 15:39:43 +00:00
# MagiskHide props
PROPSLIST="
ro.debuggable
ro.secure
ro.build.type
ro.build.tags
2020-05-21 19:02:54 +00:00
ro.bootmode
ro.boot.mode
2018-03-18 15:39:43 +00:00
ro.build.selinux
"
# Safe values
SAFELIST="
ro.debuggable=0
ro.secure=1
ro.build.type=user
ro.build.tags=release-keys
2020-05-21 19:02:54 +00:00
ro.bootmode=unknown
ro.boot.mode=unknown
2018-03-18 15:39:43 +00:00
ro.build.selinux=0
"
2020-02-26 21:08:29 +00:00
# Partitions used for different props
PARTITIONS="
system
vendor
product
odm
2020-09-12 18:30:24 +00:00
system_ext
2020-02-26 21:08:29 +00:00
"
# Additional fingerprint prop parts
2020-03-06 12:37:19 +00:00
PRINTPROPSPARTS="
2020-02-26 21:08:29 +00:00
bootimage
2018-04-26 20:40:46 +00:00
"
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
2020-02-26 21:08:29 +00:00
ADNSIMPROPS1="
2019-11-02 22:24:17 +00:00
ro.build.display.id
2019-03-27 10:50:00 +00:00
ro.build.version.sdk
"
2020-02-26 21:08:29 +00:00
ADNSIMPROPS2="
ro.product.manufacturer
ro.product.model
"
ADNSIMPROPS=$ADNSIMPROPS1$ADNSIMPROPS2
2019-03-27 10:50:00 +00:00
# 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-11-22 19:19:18 +00:00
10=29
"
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
2019-11-22 19:19:18 +00:00
# Add log divider
if [ "$BOOTSTAGE" != "post" ]; then
echo "" >> $LOGFILE
echo "==============================" >> $LOGFILE
fi
2019-02-02 12:37:20 +00:00
# ======================== General functions ========================
2020-08-14 08:01:35 +00:00
# Log functions, $1=Log text
# Print to log
2019-03-27 10:50:00 +00:00
log_handler() {
if [ "$(id -u)" == 0 ] ; then
echo "" >> $LOGFILE 2>&1
2020-05-21 19:02:54 +00:00
echo -e "$(date +"%Y-%m-%d %H:%M:%S.%3N") - $1" >> $LOGFILE 2>&1
2018-07-01 05:29:20 +00:00
fi
2018-04-25 22:17:32 +00:00
}
2020-08-14 08:01:35 +00:00
# Print to log and screen
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
2020-08-14 08:01:35 +00:00
echo -e "$1"
2019-03-27 10:50:00 +00:00
fi
2018-03-26 16:25:58 +00:00
log_handler "$1"
}
2020-08-14 08:01:35 +00:00
# Print to controll file for boot scripts
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}"
2020-08-14 08:01:35 +00:00
# Header, $1=header text
2018-03-26 16:25:58 +00:00
menu_header() {
2020-10-25 19:49:49 +00:00
# Don't clear screen if running from adb or if testing flag is active
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 ""
2020-08-14 08:01:35 +00:00
echo -e "${W}MagiskHide Props Config $VERSIONTXT${N}"
echo -e "${W}by Didgeridoohan @ XDA Developers${N}"
2018-03-26 16:25:58 +00:00
echo ""
2020-08-14 08:01:35 +00:00
echo -e $DIVIDER
2018-03-26 16:25:58 +00:00
echo -e " $1"
2020-08-14 08:01:35 +00:00
echo -e $DIVIDER
2018-03-26 16:25:58 +00:00
}
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
}
2020-08-14 08:01:35 +00:00
# Find prop type, $1=prop name
2018-03-18 15:39:43 +00:00
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
}
2020-08-14 08:01:35 +00:00
# Get left side of =, $1=string to check
2018-04-15 22:05:33 +00:00
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
2020-08-14 08:01:35 +00:00
# Get right side of =, $1=string to check
2018-04-15 22:05:33 +00:00
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
}
2020-08-14 08:01:35 +00:00
# Get the list of print version, $1=Fingerprint device info with android versions
2019-03-27 10:50:00 +00:00
get_print_versions() {
echo "$1" | sed 's|.*(||' | sed 's|).*||' | sed 's| \& | |g'
}
2020-08-14 08:01:35 +00:00
# Get Android version with 3 digits for input, $1=version string to convert to three digits
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
2020-01-17 08:44:46 +00:00
until [ "${#VERTMP}" == 3 ]; do
2018-10-21 14:17:11 +00:00
VERTMP="$(echo ${VERTMP}0)"
done
fi
echo $VERTMP
}
2020-08-14 08:01:35 +00:00
# Get security patch date for current fingerprint, $1=fingerprint string, including appended security patch date
2018-10-21 14:17:11 +00:00
get_sec_patch() {
2018-10-25 10:22:27 +00:00
echo $1 | sed 's|.*\_\_||'
2018-10-21 14:17:11 +00:00
}
2020-08-14 08:01:35 +00:00
# Get the fingerprint for displaying in the ui, $1=fingerprint
2018-10-21 14:17:11 +00:00
get_print_display() {
2018-10-25 10:22:27 +00:00
echo $1 | sed 's|\_\_.*||'
2018-10-21 14:17:11 +00:00
}
2020-08-14 08:01:35 +00:00
# Get prop value for custom props, $1=full prop string with name and value
get_prop_value() {
echo "$(get_eq_right "$1")" | sed 's|_sp_| |g' | sed 's|\;.*$||'
}
# Get delay for custom props, $1=full prop string with name, value and delay. If no delay is set, 0 is returned
get_prop_delay() {
TMPVAL="$(echo "$(get_eq_right "$1")" | sed 's|^.*\;||' | sed 's|\_\_.*$||')"
if [ "$TMPVAL" ]; then
echo "$TMPVAL"
else
echo "0"
fi
}
# Get execution point for custom prop delay, $1=full prop string with name, value and delay
get_prop_delay_exec() {
echo "$(get_eq_right "$1")" | sed 's|^.*\_\_||'
}
# Replace file values, $1=Variable to update, $2=Original variable value, $3=New variable value, $4=File, $5=control option for placeholder replacement
2018-04-25 22:17:32 +00:00
replace_fn() {
2019-03-27 10:50:00 +00:00
if [ "$5" == "placeholder" ]; then
2020-02-26 21:08:29 +00:00
sed -i "s|${1}PH=${2}|${1}=${3}|" $4 >> $LOGFILE 2>&1
2019-03-27 10:50:00 +00:00
else
2020-02-26 21:08:29 +00:00
sed -i "s|${1}=${2}|${1}=${3}|" $4 >> $LOGFILE 2>&1
2019-03-27 10:50:00 +00:00
fi
2018-03-18 15:39:43 +00:00
}
2020-08-14 08:01:35 +00:00
# Format user files to remove Windows file endings, $1=file to format
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() {
2020-09-12 18:30:24 +00:00
RBREASON=""
if [ "$(get_file_value "$TMPFSMOUNT/.magisk/config" "RECOVERYMODE=")" == "true" ]; then
RBREASON="recovery"
fi
2019-02-10 16:12:18 +00:00
echo ""
2020-08-14 08:01:35 +00:00
echo -e "${C}Rebooting...${N}"
2019-05-04 18:57:59 +00:00
log_handler "Rebooting."
2020-09-12 18:30:24 +00:00
[ $(getprop sys.boot_completed) == 1 ] && /system/bin/svc power reboot $RBREASON >> $LOGFILE 2>&1 || /system/bin/reboot $RBREASON >> $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
}
2020-08-14 08:01:35 +00:00
# Updates placeholders, $1=file, $2=Variable name to replace to, $3=Placeholder name, $4=Value to assign updated variable
2018-03-18 15:39:43 +00:00
placeholder_update() {
2019-03-27 10:50:00 +00:00
log_handler "Checking for ${3} in ${1}."
2019-11-22 19:19:18 +00:00
if [ -f "$1" ]; then
FILEVALUE=$(get_file_value "$1" "${2}PH=")
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
2019-03-27 10:50:00 +00:00
else
2019-11-22 19:19:18 +00:00
log_handler "$1 does not exist."
2019-03-27 10:50:00 +00:00
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
2020-03-06 12:37:19 +00:00
CURRTMP=$(getprop $ITEM)
2019-02-02 12:37:20 +00:00
TMPPROP=$(get_prop_type $ITEM | tr '[:lower:]' '[:upper:]')
eval "CURR${TMPPROP}='$CURRTMP'"
2020-03-06 12:37:19 +00:00
echo "${ITEM}: ${CURRTMP}" >> $LOGFILE 2>&1
2019-02-02 12:37:20 +00:00
done
2018-04-15 22:05:33 +00:00
if [ -z "$CURRFINGERPRINT" ]; then
2020-03-06 12:37:19 +00:00
CURRFINGERPRINT=$(getprop ro.bootimage.build.fingerprint)
2018-04-26 20:40:46 +00:00
if [ -z "$CURRFINGERPRINT" ]; then
2020-03-06 12:37:19 +00:00
CURRFINGERPRINT=$(getprop ro.vendor.build.fingerprint)
2018-04-26 20:40:46 +00:00
fi
2020-03-06 12:37:19 +00:00
echo "ro.build.fingerprint: ${CURRFINGERPRINT}" >> $LOGFILE 2>&1
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
}
2020-02-26 21:08:29 +00:00
# Run before updated props/settings
before_change() {
if [ -z "$INSTFN" ]; then
echo ""
2020-08-14 08:01:35 +00:00
echo -e "${C}Working. Please wait...${N}"
2020-02-26 21:08:29 +00:00
fi
}
2020-08-14 08:01:35 +00:00
# Run after updated props/settings, $1=header, $2=Run options, $3=Reboot or not
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
2020-02-26 21:08:29 +00:00
elif [ "$2" != "none" ]; then
2019-02-02 12:37:20 +00:00
# Update the reboot variable
2019-11-22 19:19:18 +00:00
replace_fn REBOOTCHK 0 1 $LATEFILE
2019-02-02 12:37:20 +00:00
# Load all values
all_values
2019-03-27 10:50:00 +00:00
# Update the system.prop file
system_prop
2019-11-22 19:19:18 +00:00
if [ "$3" != "noreboot" ] && [ ! "$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
}
2020-08-14 08:01:35 +00:00
# Reboot function, $1=header, $2=Run options
2019-03-27 10:50:00 +00:00
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
2020-08-14 08:01:35 +00:00
echo -e "Do you want to reboot now (${G}y/n${N})?"
2019-03-27 10:50:00 +00:00
echo ""
if [ "$2" == "p" ] || [ "$2" == "r" ] || [ "$2" == "reset-script" ]; then
2020-08-14 08:01:35 +00:00
echo -en "Enter ${G}y${N}(es) or ${G}n${N}(o): "
2019-03-27 10:50:00 +00:00
INV1=2
else
2020-10-25 19:49:49 +00:00
echo -en "Enter ${G}y${N}(es), ${G}n${N}(o) or ${G}e${N}(xit): "
2019-03-27 10:50:00 +00:00
INV1=3
fi
read -r INPUT5
fi
case "$INPUT5" in
2019-11-22 19:19:18 +00:00
y|Y) force_reboot
2019-03-27 10:50:00 +00:00
;;
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
;;
2019-11-22 19:19:18 +00:00
*) invalid_input $INV1 5
2019-03-27 10:50:00 +00:00
;;
esac
done
}
2020-08-14 08:01:35 +00:00
# Reset module, $1=header, $2=Run options
2018-04-15 22:05:33 +00:00
reset_fn() {
2020-02-26 21:08:29 +00:00
before_change
2020-10-25 19:49:49 +00:00
2020-01-10 18:45:27 +00:00
cp -af $MODPATH/common/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=""
2020-03-06 12:37:19 +00:00
for ITEM in $CONFFILELOC; do
2020-01-17 08:44:46 +00:00
if [ -s "$ITEM/propsconf_conf" ]; then
CONFFILE="$ITEM/propsconf_conf"
2019-02-02 12:37:20 +00:00
break
fi
2020-01-17 08:44:46 +00:00
if [ "$ITEM" == "/data/media/0" ]; then
until [ -e "$ITEM/testfbe" ]; do
sleep 1
touch $ITEM/testfbe
done
rm -f $ITEM/testfbe
if [ -s "$ITEM/propsconf_conf" ]; then
CONFFILE="$ITEM/propsconf_conf"
break
fi
fi
2019-02-02 12:37:20 +00:00
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"
2020-03-06 12:37:19 +00:00
CONFFINGERPRINT=$(getprop ro.vendor.build.fingerprint)
echo "ro.vendor.build.fingerprint: ${CONFFINGERPRINT}" >> $LOGFILE 2>&1
2019-02-02 12:37:20 +00:00
fi
2020-10-25 19:49:49 +00:00
# Updates prop values (including fingerprint)
2019-02-02 12:37:20 +00:00
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
2020-01-17 08:44:46 +00:00
reset_print "$PROPTYPE" "file"
2018-04-15 22:05:33 +00:00
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
2020-02-26 21:08:29 +00:00
# Partition specific props
if [ "$CONFPARTPROPS" == "true" ]; then
change_sim_partprops "Device simulation" 1 "file"
else
change_sim_partprops "Device simulation" 0 "file"
fi
2018-04-15 22:05:33 +00:00
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
2020-09-12 18:30:24 +00:00
if [ "$CONFWEBP" == "true" ]; then
OPTWCHNG=1
else
OPTWCHNG=0
fi
replace_fn OPTIONWEBP $OPTIONWEBP $OPTWCHNG $LATEFILE
log_handler "Automatic fingerprints list update is set to $CONFWEBP."
# Module update check
if [ "$CONFWEBU" == "true" ]; then
2019-02-02 12:37:20 +00:00
OPTWCHNG=1
else
OPTWCHNG=0
fi
2020-09-12 18:30:24 +00:00
replace_fn OPTIONWEBU $OPTIONWEBU $OPTWCHNG $LATEFILE
log_handler "Module update check at start is set to $CONFWEBU."
2019-03-27 10:50:00 +00:00
# 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."
2020-03-06 12:37:19 +00:00
for ITEM in $CONFFILELOC; do
2020-01-17 08:44:46 +00:00
rm -f $ITEM/propsconf_conf
2019-11-02 22:24:17 +00:00
done
2019-02-02 12:37:20 +00:00
log_handler "Configuration file import complete."
2019-11-22 19:19:18 +00:00
if [ "$BOOTSTAGE" == "late" ]; then
force_reboot
fi
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() {
2020-09-12 18:30:24 +00:00
case $1 in
*nw*) # Don't run if the -nw run option is used.
;;
*)
log_handler "Checking connection."
ping -c 1 -W 1 google.com >> $LOGFILE 2>&1 && CNTTEST="true" || CNTTEST="false"
;;
esac
}
# Module update check
update_check() {
case $2 in
*nw*) # Don't run if the -nw run option is used.
;;
*)
if [ "$1" == "manual" ]; then
# Testing connection
test_connection
fi
if [ "$CNTTEST" == "true" ]; then
echo ""
log_print "Checking for module update."
MODPROPTMP=$MHPCPATH/module.prop
MODPROPWWW="https://raw.githubusercontent.com/Magisk-Modules-Repo/MagiskHidePropsConf/master/module.prop"
MODVERTMP="$(echo $(get_file_value $MODPROPTMP "version=") | sed 's|-.*||' | sed 's|v||' | sed 's|\.||g')"
module_v_ctrl
wget -T 5 -q -O $MODPROPTMP $MODPROPWWW >> $LOGFILE 2>&1
if [ -s "$MODPROPTMP" ]; then
if [ "$VERSIONCMP" -lt "$MODVERTMP" ]; then
UPDATECHECK="There is a newer version of the module\navailable. Please update."
log_print "Module update available."
else
if [ "$1" == "manual" ]; then
UPDATECHECK="No update available."
else
UPDATECHECK=""
fi
log_print "No update available."
fi
elif [ -f "$MODPROPTMP" ]; then
rm -f $MODPROPTMP
log_print "! File not downloaded!"
log_handler "File is empty."
else
log_print "! File not downloaded!"
fi
else
log_handler "No connection."
fi
sleep 0.5
;;
esac
2018-06-19 09:56:08 +00:00
}
2019-03-27 10:50:00 +00:00
# system.prop creation
system_prop() {
if [ "$OPTIONBOOT" == 0 ]; then
log_handler "Creating system.prop file."
2020-01-10 18:45:27 +00:00
echo -e "# This file will be read by resetprop\n\n# MagiskHide Props Config\n# Copyright (c) 2018-2020 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
2021-01-14 21:01:33 +00:00
#if [ "$BASICATTEST" == 1 ]; then
# forced_basic "$MODPATH/system.prop"
#fi
2019-04-02 19:42:29 +00:00
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
2020-09-12 18:30:24 +00:00
# Check for edge case where module has been updated but no reboot has been done yet
if [ -d "$ADBPATH/modules_update/MagiskHidePropsConf" ] && [ -f "$MODPATH/system.prop" ]; then
log_handler "Copying system.prop to update folder."
cp -f $MODPATH/system.prop $ADBPATH/modules_update/MagiskHidePropsConf >> $LOGFILE 2>&1
else
rm -f $ADBPATH/modules_update/MagiskHidePropsConf/system.prop >> $LOGFILE 2>&1
fi
2019-04-02 19:42:29 +00:00
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 ========================
2020-01-10 18:45:27 +00:00
# Places and updates the settings file
settings_placement() {
2020-03-06 12:37:19 +00:00
cp -af $ORIGLATEFILE $UPDATELATEFILE >> $LOGFILE 2>&1
2019-11-03 21:04:04 +00:00
UPDATEV=$(get_file_value $UPDATELATEFILE "SCRIPTV=")
UPDATETRANSF=$(get_file_value $UPDATELATEFILE "SETTRANSF=")
NOTTRANSF=$(get_file_value $UPDATELATEFILE "NOTTRANSF=")
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
2020-01-10 18:45:27 +00:00
log_print "- Installing settings file"
2019-03-27 10:50:00 +00:00
if [ "$FILEV" ]; then
2020-01-10 18:45:27 +00:00
# New file
2019-03-27 10:50:00 +00:00
if [ "$UPDATEV" -gt "$FILEV" ]; then
# Fresh install
if [ "$FILEV" == 0 ]; then
2020-01-10 18:45:27 +00:00
log_print "- Placing settings file"
# Updated file with a required clearing of settings
2019-11-03 21:04:04 +00:00
elif [ "$UPDATETRANSF" -gt "$FILETRANSF" ] && [ ! "$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"
2020-01-10 18:45:27 +00:00
log_print "- File updated and settings cleared"
# Updated file
2019-03-27 10:50:00 +00:00
else
2020-01-10 18:45:27 +00:00
log_print "- File updated"
log_print "- Transferring settings from old file"
2019-03-27 10:50:00 +00:00
# Prop settings
for ITEM in $SETTINGSLIST; do
2020-01-10 18:45:27 +00:00
# Checking if a file update requires some options not to transfer
2019-03-27 10:50:00 +00:00
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
2020-03-01 19:50:53 +00:00
# Change post-fs-data execution between regular and background
2019-11-22 19:19:18 +00:00
if [ "$ITEM" == "OPTIONBACK" -a "$SNEW" == 1 ]; then
2020-01-10 18:45:27 +00:00
sed -i -e "s|^{|\#anch0}|;s|^\#anch1|{|;s|regular|background|" $MODPATH/post-fs-data.sh
2019-11-22 19:19:18 +00:00
fi
2019-03-27 10:50:00 +00:00
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
2020-01-10 18:45:27 +00:00
log_handler "Setting up settings file."
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
2020-03-06 12:37:19 +00:00
mv -f $UPDATELATEFILE $LATEFILE >> $LOGFILE 2>&1
2020-01-10 18:45:27 +00:00
# Downgraded file (flashed old module version)
2019-03-27 10:50:00 +00:00
elif [ "$UPDATEV" -lt "$FILEV" ]; then
2020-01-10 18:45:27 +00:00
log_print "- Settings cleared (file 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
2020-03-06 12:37:19 +00:00
mv -f $UPDATELATEFILE $LATEFILE >> $LOGFILE 2>&1
2020-01-10 18:45:27 +00:00
# No update of file
2019-03-27 10:50:00 +00:00
else
log_print "- Module settings preserved"
fi
else
2020-01-10 18:45:27 +00:00
log_print "- Placing settings file"
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
2020-03-06 12:37:19 +00:00
mv -f $UPDATELATEFILE $LATEFILE >> $LOGFILE 2>&1
2019-03-27 10:50:00 +00:00
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() {
2020-09-12 18:30:24 +00:00
$BOOTMODE && BINCHECK=$MIRRORPATH/system/xbin || BINCHECK=/system/xbin
2019-03-27 10:50:00 +00:00
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-03 21:04:04 +00:00
# Function for removing screwed up and old files.
2019-11-02 22:24:17 +00:00
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-11-22 19:19:18 +00:00
if [ -f "$PRINTFILES/custom.sh" ]; then
2019-11-03 21:04:04 +00:00
log_handler "Removing broken custom.sh file."
2019-11-22 19:19:18 +00:00
rm -f $PRINTFILES/custom.sh
2019-11-03 21:04:04 +00:00
fi
2019-03-27 10:50:00 +00:00
}
# 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
2020-01-10 18:45:27 +00:00
settings_placement
2019-03-27 10:50:00 +00:00
log_print "- Updating placeholders"
2020-01-10 18:45:27 +00:00
placeholder_update $MODPATH/post-fs-data.sh MODVERSION VER_PLACEHOLDER "$MODVERSION"
placeholder_update $MODPATH/post-fs-data.sh LATEFILE LATE_PLACEHOLDER "$LATEFILE"
placeholder_update $MODPATH/common/util_functions.sh MODVERSION VER_PLACEHOLDER "$MODVERSION"
placeholder_update $MODPATH/common/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
print_files
# Checks for configuration file
CONFFILE=""
2020-03-06 12:37:19 +00:00
for ITEM in $CONFFILELOC; do
2020-01-17 08:44:46 +00:00
if [ -s "$ITEM/propsconf_conf" ]; then
CONFFILE="$ITEM/propsconf_conf"
2019-03-27 10:50:00 +00:00
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 ========================
2020-08-14 08:01:35 +00:00
# Get full device info from fingerprint string, $1=full fingerprint string, including device info
2020-02-26 21:08:29 +00:00
get_device() {
echo $1 | cut -f 1 -d '=' | sed "s|\:.*$||"
}
2020-08-14 08:01:35 +00:00
# Get first word in fingerprint string, $1=full fingerprint string, including device info
2020-02-26 21:08:29 +00:00
get_first() {
case $1 in
*\ *) echo $1 | sed 's|\ .*||'
;;
*=*) get_device "$1"
;;
esac
}
2020-08-14 08:01:35 +00:00
# Get the device for current fingerprint, $1=fingerprint
2020-02-26 21:08:29 +00:00
get_device_used() {
PRINTTMP=$(cat $MODPATH/common/prints.sh | grep "$1")
if [ "$PRINTTMP" ]; then
2020-08-14 08:01:35 +00:00
echo -e "${C}$(get_device "$PRINTTMP" | sed "s| (.*||")${N}"
2020-02-26 21:08:29 +00:00
echo ""
elif [ -s "$CSTMPRINTS" ]; then
PRINTTMP=$(cat $CSTMPRINTS | grep "$1")
if [ "$PRINTTMP" ]; then
2020-08-14 08:01:35 +00:00
echo -e "${C}$(get_device "$PRINTTMP" | sed "s| (.*||")${N} (from custom list)"
2020-02-26 21:08:29 +00:00
echo ""
fi
fi
}
2020-08-14 08:01:35 +00:00
# Set new fingerprint, $1=file to add prop info to
2018-05-29 07:29:19 +00:00
print_edit() {
2020-03-06 12:37:19 +00:00
if [ "$1" != "none" ]; then
2020-02-26 21:08:29 +00:00
before_change
fi
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)."
2020-03-01 19:50:53 +00:00
PRINTCHNG="$(getprop ro.vendor.build.fingerprint)"
2019-02-02 12:37:20 +00:00
# Set device simulation variables
print_parts "$PRINTCHNG"
else
PRINTCHNG="$(echo $MODULEFINGERPRINT | sed 's|\_\_.*||')"
fi
2020-01-10 18:45:27 +00:00
# Changing props
2020-03-01 19:50:53 +00:00
if [ "$(getprop "ro.build.fingerprint")" ]; then
2020-02-26 21:08:29 +00:00
log_handler "Changing/writing ro.build.fingerprint."
2020-03-06 12:37:19 +00:00
if [ "$1" != "none" ]; then
2020-02-26 21:08:29 +00:00
echo "ro.build.fingerprint=${PRINTCHNG}" >> $1
2019-03-27 10:50:00 +00:00
else
2020-09-23 08:30:49 +00:00
resetprop -nv ro.build.fingerprint "$PRINTCHNG" >> $LOGFILE 2>&1
2019-03-27 10:50:00 +00:00
fi
2020-02-26 21:08:29 +00:00
else
log_handler "ro.build.fingerprint not currently set on device. Skipping."
fi
set_partition_props $1 "ro.build.fingerprint" $PRINTCHNG
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."
2020-03-06 12:37:19 +00:00
if [ "$1" != "none" ]; 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
}
2020-08-14 08:01:35 +00:00
# Edit security patch date if included, $1=file to add prop info to
2019-04-02 19:42:29 +00:00
patch_edit() {
2020-03-06 12:37:19 +00:00
if [ "$1" != "none" ]; then
2020-02-26 21:08:29 +00:00
before_change
fi
2019-04-02 19:42:29 +00:00
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."
2020-03-06 12:37:19 +00:00
if [ "$1" != "none" ]; then
2019-04-02 19:42:29 +00:00
echo "ro.build.version.security_patch=${SECPATCH}" >> $1
else
2020-09-23 08:30:49 +00:00
resetprop -nv ro.build.version.security_patch "$SECPATCH" >> $LOGFILE 2>&1
2019-04-02 19:42:29 +00:00
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
2020-01-10 18:45:27 +00:00
. $MODPATH/common/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
2020-07-26 18:52:21 +00:00
TMPFILE=$MODPATH/printfiles/${OEM}\.sh
echo -e "PRINTSLIST=\"" >> $TMPFILE
awk "/^$OEM/" $MODPATH/common/prints.sh >> $TMPFILE
echo -e "\"" >> $TMPFILE
TMPI=6
while [ "$TMPI" -ge 4 ]; do
TMPLINE=$(grep -m 1 "(${TMPI}" $TMPFILE)
if [ "$TMPLINE" ]; then
break
else
TMPI=$(($TMPI - 1))
fi
done
2021-01-14 21:01:33 +00:00
#echo -e "BASICATTMODEL=\"$(get_eq_left "$TMPLINE" | sed "s|^.*\:||")\"" >> $TMPFILE
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."
}
2020-08-14 08:01:35 +00:00
# Check for and update used fingerprint, $1=header
2019-02-02 12:37:20 +00:00
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
}
2020-08-14 08:01:35 +00:00
# Checks and updates the prints list, $1=run option
2018-03-20 18:31:57 +00:00
download_prints() {
2020-09-12 18:30:24 +00:00
case $2 in
*nw*) # Don't run if the -nw run option is used.
;;
*)
if [ "$1" == "Dev" ]; then
PRINTSWWW=$PRINTSDEV
fi
menu_header "Updating fingerprints list"
echo ""
if [ "$1" == "manual" ]; then
# Testing connection
test_connection
fi
# Checking and downloading fingerprints list
if [ "$CNTTEST" == "true" ]; then
echo ""
log_print "Checking list version."
wget -T 5 -q -O $PRINTSTMP $PRINTSWWW >> $LOGFILE 2>&1
if [ -s "$PRINTSTMP" ]; then
LISTVERSION=$(get_file_value $PRINTSTMP "PRINTSV=")
if [ "$LISTVERSION" ]; then
if [ "$LISTVERSION" == "Dev" ] || [ "$1" == "f" -a "$(get_file_value $PRINTSLOC "PRINTSV=")" == "Dev" ] || [ "$LISTVERSION" -gt "$(get_file_value $PRINTSLOC "PRINTSV=")" ]; then
module_v_ctrl
if [ "$(get_file_value $PRINTSTMP "PRINTSTRANSF=")" -le $VERSIONCMP ]; then
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}."
print_files
else
rm -f $PRINTSTMP
log_print "New fingerprints list requires module update."
fi
else
rm -f $PRINTSTMP
log_print "Fingerprints list up-to-date."
fi
2018-09-04 07:55:57 +00:00
else
rm -f $PRINTSTMP
2020-09-12 18:30:24 +00:00
log_print "! File not downloaded!"
log_handler "Couldn't extract list version."
2018-09-04 07:55:57 +00:00
fi
2020-09-12 18:30:24 +00:00
elif [ -f "$PRINTSTMP" ]; then
2018-06-19 09:56:08 +00:00
rm -f $PRINTSTMP
2020-09-12 18:30:24 +00:00
log_print "! File not downloaded!"
log_handler "File is empty."
else
log_print "! File not downloaded!"
2018-06-19 09:56:08 +00:00
fi
2018-03-26 16:25:58 +00:00
else
2020-09-12 18:30:24 +00:00
log_print "No connection."
2018-03-26 16:25:58 +00:00
fi
2020-09-12 18:30:24 +00:00
if [ "$1" == "manual" ]; then
sleep 2
else
sleep 0.5
fi
;;
esac
2018-03-28 16:39:57 +00:00
}
2020-08-14 08:01:35 +00:00
# Reset the module fingerprint change, $1=prop name, $2=run option
2018-04-15 22:05:33 +00:00
reset_print() {
2020-02-26 21:08:29 +00:00
before_change
2020-10-25 19:49:49 +00:00
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
}
2020-08-14 08:01:35 +00:00
# Use fingerprint, $1=header, $2=fingerprint
2018-04-15 22:05:33 +00:00
change_print() {
2020-02-26 21:08:29 +00:00
before_change
2020-10-25 19:49:49 +00:00
2018-04-15 22:05:33 +00:00
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
2020-10-25 19:49:49 +00:00
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=""
2020-03-06 12:37:19 +00:00
REBOOTCHK=""
# Check if fingerprints testing is active
if [ "$(get_file_value $PRINTSLOC "PRINTSV=")" == "Dev" ]; then
REBOOTCHK="noreboot"
fi
after_change "$1" "$3" "$REBOOTCHK"
2019-02-02 12:37:20 +00:00
}
2020-08-14 08:01:35 +00:00
# Use vendor fingerprint, $1=header, $2=Current state of option (enabled or disabled)
2019-02-02 12:37:20 +00:00
change_print_vendor() {
2020-02-26 21:08:29 +00:00
before_change
2020-10-25 19:49:49 +00:00
2019-02-02 12:37:20 +00:00
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
}
2020-08-14 08:01:35 +00:00
# Save props values from fingerprint parts, $1=fingerprint
2019-02-02 12:37:20 +00:00
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
2020-03-01 19:50:53 +00:00
SUBA=$(get_file_value $LATEFILE "SIM${TMPPROP}=")
replace_fn "SIM${TMPPROP}" "\"$SUBA\"" "\"$TMPVALUE\"" $LATEFILE
2019-02-02 12:37:20 +00:00
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
2020-03-01 19:50:53 +00:00
replace_fn SIMDESCRIPTION "\"$SIMDESCRIPTION\"" "\"$VARDESCRIPTION\"" $LATEFILE
replace_fn SIMDISPLAY "\"$SIMDISPLAY\"" "\"$VARDESCRIPTION\"" $LATEFILE
2020-10-25 19:49:49 +00:00
replace_fn SIMSDK "\"$SIMSDK\"" "\"$VARSDK\"" $LATEFILE
2020-03-01 19:50:53 +00:00
TMPPARTS=$(get_eq_left "$(grep $1 $PRINTSLOC)" | sed 's|.*)\:||')
2020-04-12 21:22:21 +00:00
if [ -z "$TMPPARTS" -a -s "$CSTMPRINTS" ]; then
2020-03-01 19:50:53 +00:00
TMPPARTS=$(get_eq_left "$(grep $1 $CSTMPRINTS)" | sed 's|.*)\:||')
fi
2020-04-12 21:22:21 +00:00
if [ "$TMPPARTS" -a $(echo $TMPPARTS | grep -o "\:" | wc -l) == 1 ]; then
2020-03-01 19:50:53 +00:00
replace_fn SIMMANUFACTURER "\"$SIMMANUFACTURER\"" "\"$(echo $TMPPARTS | cut -f 1 -d ':')\"" $LATEFILE
replace_fn SIMMODEL "\"$SIMMODEL\"" "\"$(echo $TMPPARTS | cut -f 2 -d ':')\"" $LATEFILE
else
replace_fn SIMMANUFACTURER "\"$SIMMANUFACTURER\"" "\"\"" $LATEFILE
replace_fn SIMMODEL "\"$SIMMODEL\"" "\"\"" $LATEFILE
2019-02-02 12:37:20 +00:00
fi
# Load module values
. $LATEFILE
}
2020-02-26 21:08:29 +00:00
set_partition_props() {
if [ "$2" == "ro.build.fingerprint" ]; then
2020-03-06 12:37:19 +00:00
TMPLST=$PRINTPROPSPARTS$PARTITIONS
2020-02-26 21:08:29 +00:00
else
TMPLST=$PARTITIONS
fi
for PART in $TMPLST; do
CNTP=1
while [ $CNTP != 0 ]; do
TMPPART="$(echo $2 | cut -f $CNTP -d ".")"
if [ "$CNTP" == 1 ]; then
TMPPROP="${TMPPART}.${PART}.$(echo "$2" | sed "s|${TMPPART}\.||")"
else
TMPPROP="$(echo "$2" | sed "s|\.${TMPPART}||").${PART}.${TMPPART}"
fi
2020-03-01 19:50:53 +00:00
if [ "$(getprop $TMPPROP)" ]; then
2020-02-26 21:08:29 +00:00
log_handler "Changing/writing $TMPPROP."
2020-03-06 12:37:19 +00:00
if [ "$1" != "none" ]; then
2020-02-26 21:08:29 +00:00
echo "${TMPPROP}=${3}" >> $1
else
2020-09-23 08:30:49 +00:00
resetprop -nv $TMPPROP "$3" >> $LOGFILE 2>&1
2020-02-26 21:08:29 +00:00
fi
else
log_handler "$TMPPROP not currently set on device. Skipping."
fi
if [ "$CNTP" == 1 ]; then
CNTP=$(echo $2 | grep -o "\." | wc -l)
CNTP=$(($CNTP + 1))
else
CNTP=0
fi
done
done
}
2020-07-26 18:52:21 +00:00
# ======================== Force BASIC attestation ========================
2020-10-25 19:49:49 +00:00
# Find OEM print file
fn_oem_file() {
2020-07-26 18:52:21 +00:00
# Find what brand is being used
if [ "$FINGERPRINTENB" == 1 -o "$PRINTMODULE" == 0 ] && [ "$PRINTEDIT" == 1 ] && [ "$MODULEFINGERPRINT" ]; then
BASICATTDEV="$SIMBRAND"
else
BASICATTDEV="$(getprop ro.product.brand)"
fi
2020-10-25 19:49:49 +00:00
# Find the OEM print file
TMPFILE="$(ls $MODPATH/printfiles | grep -i $BASICATTDEV)"
BASICATTMODEL="$(get_file_value "$MODPATH/printfiles/$TMPFILE" "BASICATTMODEL=")"
}
# Switch/set forced basic attestation, $1=header/file to change (system.prop), $2=model prop value from fingerprint, $3=custom model prop value, $4=reset flag
forced_basic() {
2020-09-23 08:30:49 +00:00
if [ "$BASICATTCUST" ]; then
2020-07-26 18:52:21 +00:00
BASICATTMODEL=$BASICATTCUST
2020-09-23 08:30:49 +00:00
elif [ "$BASICATTLIST" ]; then
2020-07-26 18:52:21 +00:00
BASICATTMODEL=$BASICATTLIST
2020-09-23 08:30:49 +00:00
else
2020-10-25 19:49:49 +00:00
fn_oem_file
2020-09-23 08:30:49 +00:00
fi
2020-07-26 18:52:21 +00:00
# Write or load values
if [ "$1" != "none" ]; then
if [ "$1" == "$MODPATH/system.prop" ]; then
if [ "$BASICATTMODEL" ]; then
TMPVAL="$BASICATTMODEL"
else
TMPVAL="$(getprop ro.product.device)"
fi
echo "ro.product.model=$TMPVAL" >> "$1"
set_partition_props "$1" "ro.product.model" "$TMPVAL"
else
TMPVAL=1
if [ "$BASICATTEST" == 0 ]; then
log_handler "Enabling forced basic attestation."
2020-09-23 08:30:49 +00:00
# Disabling ro.product.model simulation
replace_fn "MODELSET" $MODELSET 0 $LATEFILE
2020-07-26 18:52:21 +00:00
elif [ "$BASICATTEST" == 1 ] && [ -z "$2" ] && [ -z "$3" ] && [ "$4" != "reset" ]; then
TMPVAL=0
log_handler "Disabling forced basic attestation."
fi
# Enables or disables the settings
replace_fn "BASICATTEST" $BASICATTEST $TMPVAL $LATEFILE
replace_fn "BASICATTLIST" "\"$BASICATTLIST\"" "\"$2\"" $LATEFILE
replace_fn "BASICATTCUST" "\"$BASICATTCUST\"" "\"$3\"" $LATEFILE
after_change "$1"
fi
else
if [ "$BASICATTMODEL" ]; then
TMPVAL="$BASICATTMODEL"
else
TMPVAL="$(getprop ro.product.device)"
fi
2020-09-23 08:30:49 +00:00
resetprop -nv ro.product.model "$TMPVAL" >> $LOGFILE 2>&1
2020-07-26 18:52:21 +00:00
set_partition_props "none" "ro.product.model" "$TMPVAL"
fi
}
2020-08-14 08:01:35 +00:00
# Set a list value for forced basic attestation, $1=header, $2=model prop value
2020-07-26 18:52:21 +00:00
forced_list_confirm() {
log_handler "Setting value for forced basic attestation to \"$2\" (from fingerprints list)."
forced_basic "$1" "$2"
}
2020-08-14 08:01:35 +00:00
# Set a custom value for forced basic attestation, $1=header, $2=custom model prop value
2020-07-26 18:52:21 +00:00
forced_custom_confirm() {
log_handler "Setting custom value for forced basic attestation to \"$2\"."
forced_basic "$1" "" "$2"
}
2020-08-14 08:01:35 +00:00
# Reset the values for forced basic attestation, $1=header, $2=reset type
2020-07-26 18:52:21 +00:00
forced_reset() {
LISTVAL="$BASICATTLIST"
CUSTVAL="$BASICATTCUST"
if [ "$2" == 1 ] || [ "$2" == 3 ]; then
LISTVAL=""
TMPTXT="list value"
fi
if [ "$2" == 2 ] || [ "$2" == 3 ]; then
CUSTVAL=""
TMPTXT="custom value"
fi
if [ "$2" == 3 ]; then
TMPTXT="custom/list values"
fi
log_handler "Resetting $TMPTXT for forced basic attestation."
forced_basic "$1" "$LISTVAL" "$CUSTVAL" "reset"
}
2019-02-02 12:37:20 +00:00
# ======================== Device simulation functions ========================
2020-08-14 08:01:35 +00:00
# Edit the simulation props, $1=file to edit (system.prop)
2019-02-02 12:37:20 +00:00
dev_sim_edit() {
2020-03-06 12:37:19 +00:00
if [ "$1" != "none" ]; then
2020-02-26 21:08:29 +00:00
before_change
fi
2019-02-02 12:37:20 +00:00
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}=")
2020-02-26 21:08:29 +00:00
if [ "TMPVALUE" ]; then
if [ "$TMPENB" == 1 ] && [ "$TMPVALUE" ]; then
2020-03-01 19:50:53 +00:00
if [ "$(getprop $ITEM)" ]; then
2020-02-26 21:08:29 +00:00
log_handler "Changing/writing $ITEM."
2020-03-06 12:37:19 +00:00
if [ "$1" != "none" ]; then
2020-02-26 21:08:29 +00:00
echo "${ITEM}=${TMPVALUE}" >> $1
else
2020-09-23 08:30:49 +00:00
resetprop -nv $ITEM "$TMPVALUE" >> $LOGFILE 2>&1
2020-02-26 21:08:29 +00:00
fi
else
log_handler "$ITEM not currently set on device. Skipping."
fi
if [ "$PARTPROPSSET" == 1 ]; then
2020-09-23 08:30:49 +00:00
set_partition_props "$1" $ITEM "$TMPVALUE"
2020-02-26 21:08:29 +00:00
fi
2019-03-27 10:50:00 +00:00
else
2020-02-26 21:08:29 +00:00
log_handler "Changing/writing $ITEM is disabled."
2019-03-27 10:50:00 +00:00
fi
2019-02-02 12:37:20 +00:00
else
2020-02-26 21:08:29 +00:00
log_handler "No simulation value set for $ITEM."
2019-02-02 12:37:20 +00:00
fi
done
fi
fi
}
2020-08-14 08:01:35 +00:00
# Enable/disable the option, $1=header, $2=run option
2019-02-02 12:37:20 +00:00
change_dev_sim() {
2020-02-26 21:08:29 +00:00
before_change
2020-10-25 19:49:49 +00:00
2019-02-02 12:37:20 +00:00
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
2020-02-26 21:08:29 +00:00
# Disables all simulation props
if [ $TMPVAL == 0 ]; then
TMPPARTS=$PRINTPARTS$ADNSIMPROPS
for ITEM in $TMPPARTS; do
change_sim_prop "Device simulation" "$ITEM" 0 "none"
done
system_prop
fi
2019-02-02 12:37:20 +00:00
after_change "$1" "$2"
}
2020-08-14 08:01:35 +00:00
# Change if prop should be simulated or not, $1=header, $2=prop name, $3=prop value, $4=run option
2019-02-02 12:37:20 +00:00
change_sim_prop() {
2020-02-26 21:08:29 +00:00
before_change
2020-10-25 19:49:49 +00:00
2019-02-02 12:37:20 +00:00
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
}
2020-08-14 08:01:35 +00:00
# Change if description should be simulated or not, $1=header, $2=Check if option is enabled or disabled, $3=run option
2019-02-02 12:37:20 +00:00
change_sim_descr() {
2020-02-26 21:08:29 +00:00
before_change
2020-10-25 19:49:49 +00:00
2019-02-02 12:37:20 +00:00
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
}
2020-08-14 08:01:35 +00:00
# Change if partition specific props should be simulated or not, $1=header, $2=Check if option is enabled or disabled, $3=run option
2020-02-26 21:08:29 +00:00
change_sim_partprops() {
before_change
2020-10-25 19:49:49 +00:00
2020-02-26 21:08:29 +00:00
if [ $2 == 1 ]; then
STATETXT="enabled"
else
STATETXT="disabled"
fi
log_handler "Changing partition specific prop editing to $STATETXT."
# Saves new value
replace_fn PARTPROPSSET $PARTPROPSSET $2 $LATEFILE
after_change "$1" "$3"
}
2018-04-15 22:05:33 +00:00
# ======================== MagiskHide Props functions ========================
2020-08-14 08:01:35 +00:00
# Check safe values, $1=header, $2=Currently set prop value
2018-04-15 22:05:33 +00:00
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
}
2020-08-14 08:01:35 +00:00
# Find what prop value to change to, $1=header, $2=Currently set prop value
2018-04-15 22:05:33 +00:00
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
;;
2020-05-21 19:02:54 +00:00
ro.bootmode) if [ "$2" == "recovery" ]; then CHANGE="unknown"; else CHANGE="recovery"; fi
;;
ro.boot.mode) if [ "$2" == "recovery" ]; then CHANGE="unknown"; else CHANGE="recovery"; fi
;;
ro.build.selinux) if [ "$2" == 1 ]; then CHANGE=0; else CHANGE=1; fi
2018-04-15 22:05:33 +00:00
;;
esac
}
2020-08-14 08:01:35 +00:00
# Reset the module prop change, $1=prop name, $2=run option
2018-04-15 22:05:33 +00:00
reset_prop() {
2020-02-26 21:08:29 +00:00
before_change
2018-04-15 22:05:33 +00:00
# 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
2020-02-26 21:08:29 +00:00
if [ "$PROPCOUNTP" == 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
}
2020-08-14 08:01:35 +00:00
# Use prop value, $1=prop name, $2=new prop value, $3=run option
2018-04-15 22:05:33 +00:00
change_prop() {
2020-02-26 21:08:29 +00:00
before_change
2020-10-25 19:49:49 +00:00
2018-04-15 22:05:33 +00:00
# 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
}
2020-08-14 08:01:35 +00:00
# Reset all module prop changes, $1=header
2018-04-15 22:05:33 +00:00
reset_prop_all() {
2020-02-26 21:08:29 +00:00
before_change
2020-10-25 19:49:49 +00:00
2018-04-15 22:05:33 +00:00
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
2020-10-25 19:49:49 +00:00
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 ========================
2020-08-14 08:01:35 +00:00
# Set custom props, $1=custom type (default, post, late, delay) , $2=file to edit
2018-05-29 07:29:19 +00:00
custom_edit() {
2020-02-26 21:08:29 +00:00
if [ "$2" ]; then
before_change
fi
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."
2020-08-14 08:01:35 +00:00
for ITEM in $TMPLST; do
TMPITEM=$(get_prop_value "$ITEM")
if [ "$1" == "CUSTOMPROPSDELAY" ]; then
{
TMPBOOTTXT=""
TMPDELAY=$(get_prop_delay "$ITEM")
# Wait for "Boot completed", if enabled
if [ "$(get_prop_delay_exec "$ITEM")" == "boot" ]; then
TMPBOOTTXT=" after \"Boot completed\""
until [ $(getprop sys.boot_completed) == 1 ]; do
sleep 0.1
done
fi
TMPI=1
until [ "$TMPI" -gt "$TMPDELAY" ]; do
sleep 1
TMPI=$(($TMPI + 1))
done
log_handler "Changing/writing $(get_eq_left "$ITEM") with a delay of $TMPDELAY seconds${TMPBOOTTXT}."
resetprop -nv $(get_eq_left "$ITEM") "${TMPITEM}" >> $LOGFILE 2>&1
} &
2019-03-27 10:50:00 +00:00
else
2020-08-14 08:01:35 +00:00
log_handler "Changing/writing $(get_eq_left "$ITEM")."
if [ "$2" ]; then
echo "$(get_eq_left "$ITEM")=${TMPITEM}" >> $2
else
resetprop -nv $(get_eq_left "$ITEM") "${TMPITEM}" >> $LOGFILE 2>&1
fi
2019-03-27 10:50:00 +00:00
fi
2018-09-04 07:55:57 +00:00
done
fi
2018-05-29 07:29:19 +00:00
fi
}
2020-08-14 08:01:35 +00:00
# Find custom props module set value, $1=prop name
2019-05-04 18:57:59 +00:00
custprop_value() {
TMPLST="$CUSTOMPROPSLIST"
if [ "$TMPLST" ]; then
for ITEM in $TMPLST; do
case "$ITEM" in
*$1*)
2020-08-14 08:01:35 +00:00
get_prop_value "$ITEM"
2019-05-04 18:57:59 +00:00
;;
esac
done
fi
}
2020-08-14 08:01:35 +00:00
# Set custom prop value, $1=prop name, $2=prop value , $3=boot stage , $4=original value, $5=delay, $6=exectuion timing ("boot completed" or now)
2018-04-15 22:05:33 +00:00
set_custprop() {
2020-02-26 21:08:29 +00:00
before_change
2020-08-14 08:01:35 +00:00
2018-04-15 22:05:33 +00:00
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"
2020-08-14 08:01:35 +00:00
elif [ "$3" == "delay" ]; then
PROPSBOOTSTAGE="CUSTOMPROPSDELAY"
PROPSTXT="late_start service"
fi
DELAYVAL=""
DELAYLOG=""
DELAYBOOT=""
if [ "$3" == "delay" ] && [ "$5" ]; then
DELAYVAL=";$5"
DELAYLOG=", with a delay of $5 seconds"
elif [ "$3" == "delay" ] && [ -z "$5" ]; then
DELAYVAL=";0"
fi
if [ "$3" == "delay" ] && [ "$6" == "boot" ]; then
DELAYBOOT="__boot"
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}=")
2020-08-14 08:01:35 +00:00
TMPCUSTPROPS=$(echo "$CURRCUSTPROPS ${1}=${TMPVALUE}${DELAYVAL}${DELAYBOOT}" | sed 's|^[ \t]*||')
2019-02-02 12:37:20 +00:00
SORTCUSTPROPS=$(echo $(printf '%s\n' $TMPCUSTPROPS | sort -u))
2018-04-15 22:05:33 +00:00
2020-08-14 08:01:35 +00:00
log_handler "Setting custom prop $1 in $(echo $PROPSTXT | cut -f $DLIMTMP -d '/') stage${DELAYLOG}."
2019-02-02 12:37:20 +00:00
replace_fn $ITEM "\"$CURRCUSTPROPS\"" "\"$SORTCUSTPROPS\"" $LATEFILE
replace_fn CUSTOMEDIT 0 1 $LATEFILE
DLIMTMP=$(($DLIMTMP + 1))
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
}
2020-08-14 08:01:35 +00:00
# Reset all custom prop values, $1=after_change option (run from configuration file or not)
2018-04-15 22:05:33 +00:00
reset_all_custprop() {
2020-02-26 21:08:29 +00:00
before_change
2020-08-14 08:01:35 +00:00
2018-04-15 22:05:33 +00:00
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
2020-08-14 08:01:35 +00:00
replace_fn CUSTOMPROPSDELAY "\"$CUSTOMPROPSDELAY\"" "\"\"" $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
}
2020-08-14 08:01:35 +00:00
# Reset custom prop value, $1=prop name, $2=prop value, $3=run after_change or not
2018-04-15 22:05:33 +00:00
reset_custprop() {
2020-02-26 21:08:29 +00:00
before_change
2020-08-14 08:01:35 +00:00
2019-02-02 12:37:20 +00:00
log_handler "Resetting custom prop $1."
2020-08-14 08:01:35 +00:00
PROPSBOOTSTAGE="CUSTOMPROPS CUSTOMPROPSPOST CUSTOMPROPSLATE CUSTOMPROPSDELAY"
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}=")
2020-08-14 08:01:35 +00:00
if [ "$CURRCUSTPROPS" ]; then
TMPDELAY=""
TMPBOOTEXEC=""
if [ "$ITEM" == "CUSTOMPROPSDELAY" ]; then
for PROP in $CURRCUSTPROPS; do
case $PROP in
*$TMPVALUE*)
TMPDELAY=";$(get_prop_delay "$PROP")"
case $PROP in
*\_\_*)
TMPBOOTEXEC="$(get_prop_delay_exec "$PROP")"
if [ "$TMPBOOTEXEC" ]; then
TMPBOOTEXEC="__$TMPBOOTEXEC"
fi
;;
esac
break
;;
esac
2020-10-25 19:49:49 +00:00
done
2020-08-14 08:01:35 +00:00
fi
TMPCUSTPROPS=$(echo $CURRCUSTPROPS | sed "s|${1}=${TMPVALUE}${TMPDELAY}${TMPBOOTEXEC}||" | tr -s " " | sed 's|^[ \t]*||;s|[ \t]*$||')
# Updating custom props string
replace_fn $ITEM "\"$CURRCUSTPROPS\"" "\"$TMPCUSTPROPS\"" $LATEFILE
fi
2019-02-02 12:37:20 +00:00
done
2018-04-15 22:05:33 +00:00
2020-08-14 08:01:35 +00:00
if [ -z "$CUSTOMPROPS" ] && [ -z "$CUSTOMPROPSPOST" ] && [ -z "$CUSTOMPROPSLATE" ] && [ -z "$CUSTOMPROPSDELAY" ]; 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."
2020-10-25 19:49:49 +00:00
for ITEM in $DELETEPROPS; do
2018-06-19 09:56:08 +00:00
log_handler "Deleting $ITEM."
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
}
2020-08-14 08:01:35 +00:00
# Set prop to delete, $1=prop name, $2=run option
2018-06-19 09:56:08 +00:00
set_delprop() {
if [ "$1" ]; then
2020-02-26 21:08:29 +00:00
before_change
2020-08-14 08:01:35 +00:00
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
}
2020-08-14 08:01:35 +00:00
# Reset all props to delete, $1=run option
2018-06-19 09:56:08 +00:00
reset_all_delprop() {
2020-02-26 21:08:29 +00:00
before_change
2020-08-14 08:01:35 +00:00
2018-06-19 09:56:08 +00:00
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
}
2020-08-14 08:01:35 +00:00
# Reset prop to delete, $1=prop name
2018-06-19 09:56:08 +00:00
reset_delprop() {
2020-02-26 21:08:29 +00:00
before_change
2020-08-14 08:01:35 +00:00
2018-06-19 09:56:08 +00:00
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
}
2020-02-26 21:08:29 +00:00
# ======================== Options functions ========================
2020-08-14 08:01:35 +00:00
# Export all settings to a module configuration file, $1=header
2020-02-26 21:08:29 +00:00
export_settings() {
before_change
2020-03-01 19:50:53 +00:00
log_handler "Exporting module settings to $EXPORTFILE."
2020-02-26 21:08:29 +00:00
# Load settings
. $LATEFILE
# Create export directory
2020-02-26 21:56:02 +00:00
mkdir -pv $EXPORTPATH >> $LOGFILE 2>&1
2020-02-26 21:08:29 +00:00
# Create file and Delete instructions
2020-02-26 22:17:37 +00:00
head -n 59 $MODPATH/common/propsconf_conf > $EXPORTFILE
2020-02-26 21:08:29 +00:00
# Export settings
2020-08-14 08:01:35 +00:00
# Fingerprint
2020-02-26 21:08:29 +00:00
replace_fn CONFFINGERPRINT "\"\"" "\"$MODULEFINGERPRINT\"" $EXPORTFILE
2020-08-14 08:01:35 +00:00
replace_fn CONFVENDPRINT false $([ $PRINTVEND == 0 ] && echo "false" || echo "true") $EXPORTFILE
2020-02-26 21:08:29 +00:00
replace_fn CONFPRINTBOOT default $([ $PRINTSTAGE == 0 ] && echo "default" || $([ $PRINTSTAGE == 1 ] && echo "post" || echo "late")) $EXPORTFILE
2020-08-14 08:01:35 +00:00
replace_fn CONFPATCHBOOT late $([ $PATCHSTAGE == 0 ] && echo "default" || $([ $PATCHSTAGE == 1 ] && echo "post" || echo "late")) $EXPORTFILE
# Force BASIC attestation
2021-01-14 21:01:33 +00:00
#replace_fn CONFBASICATTEST false $([ $BASICATTEST == 0 ] && echo "false" || echo "true") $EXPORTFILE
#replace_fn CONFBASICATTCUST "\"\"" "\"$BASICATTCUST\"" $EXPORTFILE
2020-08-14 08:01:35 +00:00
# Device Simulation
2020-02-26 21:08:29 +00:00
replace_fn CONFDEVSIM false $([ $DEVSIM == 0 ] && echo "false" || echo "true") $EXPORTFILE
replace_fn CONFBRAND false $([ $BRANDSET == 0 ] && echo "false" || echo "true") $EXPORTFILE
replace_fn CONFNAME false $([ $NAMESET == 0 ] && echo "false" || echo "true") $EXPORTFILE
replace_fn CONFDEVICE false $([ $DEVICESET == 0 ] && echo "false" || echo "true") $EXPORTFILE
replace_fn CONFRELEASE false $([ $RELEASESET == 0 ] && echo "false" || echo "true") $EXPORTFILE
replace_fn CONFID false $([ $IDSET == 0 ] && echo "false" || echo "true") $EXPORTFILE
replace_fn CONFINCREMENTAL false $([ $INCREMENTALSET == 0 ] && echo "false" || echo "true") $EXPORTFILE
replace_fn CONFDISPLAY false $([ $DISPLAYSET == 0 ] && echo "false" || echo "true") $EXPORTFILE
replace_fn CONFSDK false $([ $SDKSET == 0 ] && echo "false" || echo "true") $EXPORTFILE
replace_fn CONFMANUFACTURER false $([ $MANUFACTURERSET == 0 ] && echo "false" || echo "true") $EXPORTFILE
replace_fn CONFMODEL false $([ $MODELSET == 0 ] && echo "false" || echo "true") $EXPORTFILE
replace_fn CONFDESCRIPTION true $([ $DESCRIPTIONSET == 0 ] && echo "false" || echo "true") $EXPORTFILE
replace_fn CONFPARTPROPS true $([ $PARTPROPSSET == 0 ] && echo "false" || echo "true") $EXPORTFILE
replace_fn CONFSIMBOOT default $([ $SIMSTAGE == 0 ] && echo "default" || $([ $PRINTSTAGE == 1 ] && echo "post" || echo "late")) $EXPORTFILE
2020-08-14 08:01:35 +00:00
# MagiskHide sensitive props
replace_fn CONFDEBUGGABLE "\"\"" "\"$MODULEDEBUGGABLE\"" $EXPORTFILE
replace_fn CONFSECURE "\"\"" "\"$MODULESECURE\"" $EXPORTFILE
replace_fn CONFTYPE "\"\"" "\"$MODULETYPE\"" $EXPORTFILE
replace_fn CONFTAGS "\"\"" "\"$MODULETAGS\"" $EXPORTFILE
replace_fn CONFSELINUX "\"\"" "\"$MODULESELINUX\"" $EXPORTFILE
# Custom props
2020-02-26 21:08:29 +00:00
replace_fn CONFPROPS "\"\"" "\"$CUSTOMPROPS\"" $EXPORTFILE
replace_fn CONFPROPSPOST "\"\"" "\"$CUSTOMPROPSPOST\"" $EXPORTFILE
replace_fn CONFPROPSLATE "\"\"" "\"$CUSTOMPROPSLATE\"" $EXPORTFILE
2020-08-14 08:01:35 +00:00
replace_fn CONFPROPSDELAY "\"\"" "\"$CUSTOMPROPSDELAY\"" $EXPORTFILE
# Delete props
2020-02-26 21:08:29 +00:00
replace_fn CONFDELPROPS "\"\"" "\"$DELETEPROPS\"" $EXPORTFILE
2020-08-14 08:01:35 +00:00
# Module settings
2020-02-26 21:08:29 +00:00
replace_fn CONFBOOT default $([ $OPTIONBOOT == 0 ] && echo "default" || $([ $PRINTSTAGE == 1 ] && echo "post" || echo "late")) $EXPORTFILE
replace_fn CONFCOLOUR true $([ $OPTIONCOLOUR == 0 ] && echo "false" || echo "true") $EXPORTFILE
2020-09-12 18:30:24 +00:00
replace_fn CONFWEBP true $([ $OPTIONWEBP == 0 ] && echo "false" || echo "true") $EXPORTFILE
replace_fn CONFWEBU true $([ $OPTIONWEBU == 0 ] && echo "false" || echo "true") $EXPORTFILE
2020-02-26 21:08:29 +00:00
replace_fn CONFUPDATE true $([ $OPTIONUPDATE == 0 ] && echo "false" || echo "true") $EXPORTFILE
replace_fn CONFBACK false $([ $OPTIONBACK == 0 ] && echo "false" || echo "true") $EXPORTFILE
log_handler "Export done."
# Print info
menu_header "${C}$1${N}"
echo ""
echo "A module configuration file with"
echo "your current settings have been"
echo "saved to your internal storage,"
2020-08-14 08:01:35 +00:00
echo -e "in the ${C}/mhcp${N} directory."
2020-02-26 21:08:29 +00:00
echo ""
echo -n "Press enter to continue..."
read -r INPUTTMP
}
2018-06-19 09:56:08 +00:00
# ======================== Log collecting functions ========================
2020-08-14 08:01:35 +00:00
# Collects useful logs and info for troubleshooting, $1=header, $2=Run as a command flag or not
2018-06-19 09:56:08 +00:00
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
2019-11-02 22:24:17 +00:00
if [ "$ITEM" != "$MHPCPATH/propsconf.log" ]; then
2020-05-21 19:02:54 +00:00
cp -af $ITEM ${TMPLOGLOC} >> $LOGFILE 2>&1
2019-04-02 19:42:29 +00:00
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
2020-03-01 19:50:53 +00:00
getprop > $TMPLOGLOC/currentprops
2019-11-22 19:19:18 +00:00
sed -i -e "s|\]\:\ \[|=|g;s|^\[||g;s|\]$||g" $TMPLOGLOC/currentprops
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
2020-05-21 19:11:42 +00:00
cp -f $MHPCPATH/propslogs.tar.gz /storage/emulated/0 >> $LOGFILE 2>&1
rm -f $MHPCPATH/propslogs.tar.gz
2019-11-22 19:19:18 +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 ""
2020-08-27 09:07:28 +00:00
echo "The packaged file (${C}propslogs.tar.gz${N})"
echo "has been saved to the root of your device's"
echo "internal storage."
2019-11-22 19:19:18 +00:00
echo "If it did not, please see the documentation"
echo "for details on how to collect the logs"
echo "manually."
2018-07-01 05:29:20 +00:00
echo ""
2019-11-22 19:19:18 +00:00
echo "Attach the file(s) to a post in the support"
2018-07-01 05:29:20 +00:00
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."
fi