#!/sbin/sh
# Template: Shell Script EDIFY Replacement: Recovery Flashable Zip by osm0sis @ xda-developers
# Can be found here - https://forum.xda-developers.com/android/software-hacking/dev-complete-shell-script-flashable-zip-t2934449/amp/

OUTFD=/proc/self/fd/$2;
ZIPFILE="$3";

# ui_print "<message>" ["<message 2>" ...]
ui_print() {
  while [ "$1" ]; do
    echo -e "ui_print $1
      ui_print" >> "$OUTFD";
    shift;
  done;
}

# package_extract_file <file> <destination_file>
package_extract_file() { mkdir -p "$(dirname "$2")"; unzip -o "$ZIPFILE" "$1" -p > "$2"; }

# package_extract_dir <dir> <destination_dir>
package_extract_dir() {
  local entry outfile;
  for entry in $(unzip -l "$ZIPFILE" 2>/dev/null | tail -n+4 | grep -v '/$' | grep -o " $1.*$" | cut -c2-); do
    outfile="$(echo "$entry" | sed "s|${1}|${2}|")";
    mkdir -p "$(dirname "$outfile")";
    unzip -o "$ZIPFILE" "$entry" -p > "$outfile";
  done;
}

# getprop <property>
getprop() { test -e /sbin/getprop && /sbin/getprop $1 || grep "^$1=" /default.prop | cut -d= -f2-; }

ui_print "****************************"
ui_print "   GSI Qualcomm VoLTE Fix   "
ui_print "     by @KhushrajRathod     "
ui_print "****************************"

ui_print "Mounting system..."
mount /system; mount /system_root; mount /system_root/system /system

ui_print "Moving Files..."

if [ $(getprop ro.product.cpu.abi) == "arm64-v8a" ]; then
  ui_print "Detected 64bit architecture"
  package_extract_dir "system64" "/system"
elif [[ $(getprop ro.product.cpu.abi) == "armeabi-v7a" ]]; then
  ui_print "Detected 32bit architecture"
  package_extract_dir "system32" "/system"
else
  ui_print "ERROR: Unknown architecture"
  exit 1
fi

ui_print "Moving xmls"
package_extract_dir "system" "/system"

ui_print "Extracting persistprop binary..."
package_extract_file "persistprop" "/tmp/"
chmod 0755 /tmp/persistprop

ui_print "Setting props..."
/tmp/persistprop persist.dbg.allow_ims_off 1
/tmp/persistprop persist.dbg.volte_avail_ovr 1
/tmp/persistprop persist.dbg.vt_avail_ovr 1
/tmp/persistprop persist.dbg.wfc_avail_ovr 1
/tmp/persistprop persist.sys.phh.ims.caf true

ui_print "Done!"
