├── AIOCPFMD └── META-INF │ └── com │ └── google │ └── android │ ├── updater-script │ └── update-binary ├── AIOPFMD └── META-INF │ └── com │ └── google │ └── android │ └── updater-script └── AIOIARPFMD └── META-INF └── com └── google └── android ├── updater-script └── update-binary /AIOCPFMD/META-INF/com/google/android/updater-script: -------------------------------------------------------------------------------- 1 | #MAGISK 2 | -------------------------------------------------------------------------------- /AIOPFMD/META-INF/com/google/android/updater-script: -------------------------------------------------------------------------------- 1 | #MAGISK 2 | -------------------------------------------------------------------------------- /AIOIARPFMD/META-INF/com/google/android/updater-script: -------------------------------------------------------------------------------- 1 | #MAGISK 2 | -------------------------------------------------------------------------------- /AIOCPFMD/META-INF/com/google/android/update-binary: -------------------------------------------------------------------------------- 1 | #!/sbin/sh 2 | 3 | VAIOCPFMD="16.05.21 (35)" 4 | 5 | { #TMPDIR & Magisk Default Var 6 | IPDLTMP="/data/local/tmp" 7 | TMPDIR="$IPDLTMP/AIOCPFMD" 8 | ALTTMPDIR="/dev/AIOCPFMD" 9 | MAGISKTMP="/sbin/.magisk" 10 | NVBASE="/data/adb" 11 | SERVICED="$NVBASE/service.d" 12 | POSTFSDATAD="$NVBASE/post-fs-data.d" 13 | } # 14 | 15 | { #Var true/false By Fefault 16 | HFMODE=false 17 | FINDPATCHMODE=false 18 | } # 19 | 20 | { #BB & Other Useful Links In This Patch (BB/ToyBox/ToolBox In Rom/TWRP May Not Do Some Things) 21 | OUTFD="$2" 22 | ZIPFILE="$3" 23 | ADDONS="$ALTTMPDIR/Addons" 24 | AADDONS="$TMPDIR/AltAddons" 25 | BB="$ALTTMPDIR/BB" 26 | EVENTS="$BB/events" 27 | UNTARXZ="$BB/tar" 28 | UNZIP="$BB/unzip" 29 | TIMEOUT="$BB/timeout" 30 | } # 31 | 32 | { #Version 33 | 34 | { #PIE 35 | VBSGPIE="V6.2.030 (V5)" 36 | VParrot043PIE="V6.2.030 (V16)" 37 | VSan1tyPIE="V6.2.030 (F1 V9.6)" 38 | VTigrNOSDM845="V6.2.030 (REBORN V5)" 39 | } # 40 | 41 | { #TEN 42 | VBSGTEN="V7.3.020 (RPII v0f)" 43 | VParrot043TEN="V7.3.020 (V8)" 44 | VSan1tyTEN="V7.2.018 (F1 MinimalMod V2.1)" 45 | VTigrTEN="V7.2.010 (V7.1)" 46 | } # 47 | 48 | { #SDM845 49 | VTigrSDM845="V6.2.030 (REBORN V5 SDM 845)" 50 | } # 51 | 52 | { #OTHERPIE 53 | VBSGOTHERPIE="V7.0.009 (V1b)" 54 | VParrot043OTHERPIE="V7.0.009 (V13)" 55 | VTigrOTHERPIE="V7.4.201 (Xmas Release)" 56 | } # 57 | 58 | { #OTHERTEN 59 | VBSGOTHERTEN="V7.4.104 (V0a)" 60 | VParrot043OTHERTEN="V7.4.201 (v1.1)" 61 | } # 62 | 63 | { #ELEVEN 64 | VBSGELEVEN="V8.1.101 (A9 GVw)" 65 | VParrot043ELEVEN="V7.6.008 (v7)" 66 | } # 67 | 68 | { #ANX 69 | VANXCameraR="v185R" 70 | VANXCameraN="v190" 71 | VANXCameraO="v185" 72 | V48MPFixQ="v181" 73 | V48MPFixR="v201" 74 | } # 75 | 76 | { #OTHER 77 | GCAltOne="GCamOne" 78 | GCAltTwo="GCamTwo" 79 | } # 80 | 81 | } # 82 | 83 | { #Link Update/Support 84 | BSGLUPD="https://www.celsoazevedo.com/files/android/google-camera/dev-bsg/" 85 | SAN1TYLUPD="https://www.celsoazevedo.com/files/android/google-camera/dev-san1ty/" 86 | PARROT043LUPD="https://www.celsoazevedo.com/files/android/google-camera/dev-parrot043/" 87 | TIGRLUPD="https://www.celsoazevedo.com/files/android/google-camera/dev-tigr/" 88 | } # 89 | 90 | { #Helper Functions 91 | 92 | BOOT_DETECTED() { 93 | # Detect whether in boot mode 94 | [ -z $BOOTMODE ] && ps | grep zygote | grep -qv grep && BOOTMODE=true 95 | [ -z $BOOTMODE ] && ps -A 2>/dev/null | grep zygote | grep -qv grep && BOOTMODE=true 96 | [ -z $BOOTMODE ] && BOOTMODE=false 97 | } 98 | 99 | SYMBOLDESIGN() { 100 | MSGSD="•" 101 | if $BOOTMODE; then 102 | MSGVU="▲ ►" 103 | MSGVD="▼ ►" 104 | elif [ $BOOTMODE != true ]; then 105 | MSGVU="+ >" 106 | MSGVD="- >" 107 | fi 108 | } 109 | 110 | ALLPATCHMSG() { 111 | MSGDELIMITER="••••••••••••••••••••••••••••••••••••••••" 112 | MSGDI="Install Done" 113 | MSGUD="Uninstall Done" 114 | MSGDRM="Remove Done" 115 | MSGDRP="Replace Done" 116 | MSGDRS="Restore Done" 117 | MSGDD="Disable Done" 118 | MSGED="Enable Done" 119 | MSGFI="Found Install" 120 | MSGIIP="(I)" 121 | MSGEFTC="(\)" 122 | MSGNIS="(|)" 123 | MSGNUS="(/)" 124 | MSGEND="(//)" 125 | MSGRI="(R)" 126 | WDI="Community" 127 | FMR="For More Rom" 128 | FAOOR="For AOSP/LOS & Others Rom" 129 | MSGPMODE="$MSGSD Opens Some Test Items/Patches - Set: U(ser) Or D(ebug)" 130 | MSGKMETHOD="$MSGSD Force Switching Between Old And New \"KeyCheck\" Method - Set: N(ew), O(ld) Or A(lt)" 131 | MSGTKEY="$MSGSD A Second Check Is Turned On For KMETHOD O(ld) - Set: false Or true" 132 | MSGPDESIGN="$MSGSD Changes The \"Design\" Of The Patch - Set: N(ew) Or O(ld)" 133 | MSGLEDCOLOR="$MSGSD This Is The Color Of Your Diode - Set: R(ed), G(reen), B(lue) Or W(hite)" 134 | MSGHFMODE="$MSGSD Adds Tactile Feedback To Patch Selections - Set: Values From 1 To 255 For Weak/Strong Vibration" 135 | MSGHFSMODE="$MSGSD Sets Values From HFMODE Not To duration, But To enable And/Or activate - Set: false Or true" 136 | MSGMCMODE="$MSGSD Enables Or Disables The Choice In TWRP How To Install Via Magisk Or Not With DEBUGMODE - Set: false Or true" 137 | MSGENDMODE="$MSGSD Allows You To Return To The Beginning Of The Patch Without Reselecting If You Missed Something - Set: false Or true" 138 | MSGBIDMODE="$MSGSD Writes The ID Of The Buttons For Alt KMETHOD O(ld) Without A Bind" 139 | if $MAGISK; then IAMM="(M)"; else IAMM=; fi 140 | } 141 | 142 | IS_MOUNTED() { 143 | grep -q " `readlink -f $1` " /proc/mounts 2>/dev/null 144 | return $? 145 | } 146 | 147 | PARTITION_AND_MOUNTS() { 148 | if [ $BOOTMODE != true ]; then 149 | if [ -n "$(cat /proc/cmdline | grep slot_suffix)" ]; then DABP=true; SYSTEM_MOUNT="/system"; SYSTEM="$SYSTEM_MOUNT/system"; VENDOR="/vendor/vendor"; elif [ -n "$(cat /etc/fstab | grep /system_root)" ]; then DABP=false; SYSTEM_MOUNT="/system_root"; SYSTEM="$SYSTEM_MOUNT/system"; VENDOR="/vendor"; else DABP=false; SYSTEM_MOUNT="/system"; SYSTEM="$SYSTEM_MOUNT"; VENDOR="/vendor"; fi 150 | Mounts="" 151 | for p in "$SYSTEM_MOUNT" "$VENDOR"; do 152 | if [ -d "$p" ] && grep -q "$p" "/etc/fstab"; then 153 | Mounts="$Mounts $p" 154 | fi 155 | done 156 | for m in $Mounts; do 157 | if IS_MOUNTED "$m"; then 158 | umount "$m" 159 | fi 160 | mount "$m" 161 | done 162 | grep -q "$SYSTEM_MOUNT.*\sro[\s,]" /proc/mounts && mount -o remount,rw $SYSTEM_MOUNT # remount whatever $SYSTEM_MOUNT is, sometimes necessary if mounted read-only 163 | MSGDELIMITER; UIP "Mounting$Mounts" 164 | else 165 | MSGDELIMITER 166 | fi 167 | if [ -f /system/system/build.prop ]; then FTSYSTEM=true; FTSYSTEMROOT=false; SYSTEM="/system/system"; elif [ -f /system_root/system/build.prop ]; then FTSYSTEM=true; FTSYSTEMROOT=true; SYSTEM="/system_root/system"; elif [ -f /system/build.prop ]; then FTSYSTEM=false; FTSYSTEMROOT=false; SYSTEM="/system"; fi 168 | if [ $BOOTMODE != true ] && [ -n "$(cat /etc/fstab | grep /vendor)" ]; then FVENDOR=true; elif [ $BOOTMODE != true ] && [ -d $SYSTEM/vendor ]; then FVENDOR=false; VENDOR="$SYSTEM/vendor"; elif $BOOTMODE; then VENDOR="/vendor"; fi 169 | } 170 | 171 | IMPORTANT_VARIABLES() { 172 | MODPATH="$NVBASE/modules"; MODPATHUPD="$NVBASE/modules_update" 173 | IPSAX="$SYSTEM/apex"; MIPSAX="/system/apex" 174 | IPSB="$SYSTEM/bin"; MIPSB="/system/bin" 175 | IPSXB="$SYSTEM/xbin"; MIPSXB="/system/xbin" 176 | IPSA="$SYSTEM/app"; MIPSA="/system/app" 177 | IPSPA="$SYSTEM/priv-app"; MIPSPA="/system/priv-app" 178 | IPSE="$SYSTEM/etc"; MIPSE="/system/etc" 179 | IPSEID="$IPSE/init.d"; MIPSEID="$MIPSE/init.d" 180 | IPSES="$IPSE/sysconfig"; MIPSES="$MIPSE/sysconfig" 181 | IPSEP="$IPSE/permissions"; MIPSEP="$MIPSE/permissions" 182 | IPSEDP="$IPSE/default-permissions"; MIPSEDP="$MIPSE/default-permissions" 183 | IPSL="$SYSTEM/lib"; MIPSL="/system/lib" 184 | IPSL64="$SYSTEM/lib64"; MIPSL64="/system/lib64" 185 | IPSAD="$SYSTEM/addon.d"; MIPSAD="/system/addon.d" 186 | IPSBP="$SYSTEM/build.prop"; MIPSBP="/system/build.prop" 187 | IPSSP="$SYSTEM/product"; MIPSSP="/system/product" 188 | IPSSPBP="$IPSSP/build.prop"; MIPSSPBP="$MIPSSP/build.prop" 189 | IPSDP="$SYSTEM/default.prop"; MIPSDP="/system/default.prop" 190 | IPSSPA="$IPSSP/app"; MIPSSPA="$MIPSSP/app" 191 | IPSSPPA="$IPSSP/priv-app"; MIPSSPPA="$MIPSSP/priv-app" 192 | IPSSPE="$IPSSP/etc"; MIPSSPE="$MIPSSP/etc" 193 | IPSSPER="$IPSSPE/res"; MIPSSPER="$MIPSSPE/res" 194 | IPSSPERVC="$IPSSPER/values/charger"; MIPSSPERVC="$MIPSSPER/values/charger" 195 | IPSSPERIC="$IPSSPER/images/charger"; MIPSSPERIC="$MIPSSPER/images/charger" 196 | IPSSPEP="$IPSSPE/permissions"; MIPSSPEP="$MIPSSPE/permissions" 197 | IPSSS="$SYSTEM/system_ext"; MIPSSS="/system/system_ext" 198 | IPSSSA="$IPSSS/app"; MIPSSSA="$MIPSSS/app" 199 | IPSSSPA="$IPSSS/priv-app"; MIPSSSPA="$MIPSSS/priv-app" 200 | IPSFW="$SYSTEM/framework"; MIPSFW="/system/framework" 201 | IPSPO="$IPSSP/overlay"; MIPSPO="$MIPSSP/overlay" 202 | IPSO="$SYSTEM/overlay"; MIPSO="/system/overlay" 203 | IPSUKL="$SYSTEM/usr/keylayout"; MIPSUKL="/system/usr/keylayout" 204 | IPSPM="$IPSSP/media"; MIPSPM="$MIPSSP/media" 205 | IPSPMAU="$IPSPM/audio/ui"; MIPSPMAU="$MIPSPM/audio/ui" 206 | IPSM="$SYSTEM/media"; MIPSM="/system/media" 207 | IPSMAU="$IPSM/audio/ui"; MIPSMAU="$MIPSM/audio/ui" 208 | IPSF="$SYSTEM/fonts"; MIPSF="/system/fonts" 209 | IPSEDF="$IPSE/device_features"; MIPSEDF="/system/device_features" 210 | IPVBP="$VENDOR/build.prop"; MIPSVBP="/system/vendor/build.prop" 211 | IPVE="$VENDOR/etc"; MIPSVE="/system/vendor/etc" 212 | IPVL="$VENDOR/lib"; MIPSVL="/system/vendor/lib" 213 | IPVL64="$VENDOR/lib64"; MIPSVL64="/system/vendor/lib64" 214 | IPVLS="$IPVL/soundfx"; MIPSVLS="$MIPSVL/soundfx" 215 | IPVLS64="$IPVL64/soundfx"; MIPSVLS64="$MIPSVL64/soundfx" 216 | IPVO="$VENDOR/overlay"; MIPSVO="/system/vendor/overlay" 217 | IPVUKL="$VENDOR/usr/keylayout"; MIPSVUKL="/vendor/usr/keylayout" 218 | IPVF="$VENDOR/firmware"; MIPVF="/system/vendor/firmware" 219 | IPVEDF="$IPVE/device_features"; MIPSVEDF="/system/vendor/device_features" 220 | IPDA="/data/app"; IPDD="/data/data"; IPDS="/data/system"; IPDSU="$IPDS/users"; IPDSUDE="/data/user_de"; IPDSNS="$IPDS/netstats"; IPDBBN="/dev/block/by-name"; IPDM="/data/misc"; IPDMDE="/data/misc_de"; IPDRESC="/data/resource-cache"; STORAGE="/sdcard"; ASTORAGE="/data/media" 221 | ACONFS="$(find $SYSTEM $VENDOR -type f -name "audio_configs*.xml")" 222 | APINF="$(find $SYSTEM $VENDOR -type f -name "audio_platform_info*.xml")" 223 | CFGS="$(find $SYSTEM $VENDOR -type f -name "*audio_effects*.conf" -o -name "*audio_effects*.xml")" 224 | MPATHS="$(find $SYSTEM $VENDOR -type f -name "mixer_paths*.xml")" 225 | STPI="$(find $SYSTEM $VENDOR -type f -name "sound_trigger_platform_info*.xml")" 226 | APCFGS="$(find $SYSTEM $VENDOR -type f -name "*audio_io_policy*.conf" -o -name "*audio_output_policy*.conf")" 227 | MCGAX="$(find $SYSTEM $VENDOR -type f -name "*media_codecs_google_c2_audio*.xml" -o -name "*media_codecs_google_audio*.xml")" 228 | DEVFEA=$IPSEDF/*.xml; DEVFEAA=$IPVEDF/*.xml 229 | SPG="settings put global"; SPS="settings put secure" 230 | if [ -f $STORAGE/PATCHMODE* ]; then PATCHMODEFILE="$(find $STORAGE/PATCHMODE*)"; FINDPATCHMODE=true; else for f in $(ls $STORAGE); do if [ -f $STORAGE/$f/PATCHMODE* ]; then PATCHMODEFILE="$(find $STORAGE/$f/PATCHMODE*)"; FINDPATCHMODE=true; break; else FINDPATCHMODE=false; fi; done; fi; if [ $FINDPATCHMODE != true ]; then touch $STORAGE/PATCHMODE.sh; PATCHMODEFILE="$STORAGE/PATCHMODE.sh"; fi 231 | PMODE="$(GET_PMODE_PROP "$PATCHMODEFILE" "PMODE")"; HFDURATION="$(GET_PMODE_PROP "$PATCHMODEFILE" "HFMODE")"; HFSWAPMODE="$(GET_PMODE_PROP "$PATCHMODEFILE" "HFSMODE")"; PDESIGN="$(GET_PMODE_PROP "$PATCHMODEFILE" "PDESIGN")"; LEDCOLOR="$(GET_PMODE_PROP "$PATCHMODEFILE" "LEDCOLOR")"; KMETHOD="$(GET_PMODE_PROP "$PATCHMODEFILE" "KMETHOD")"; TKEY="$(GET_PMODE_PROP "$PATCHMODEFILE" "TKEY")"; MCMODE="$(GET_PMODE_PROP "$PATCHMODEFILE" "MCMODE")"; ENDMODE="$(GET_PMODE_PROP "$PATCHMODEFILE" "ENDMODE")"; BIDMODE="$(GET_PMODE_PROP "$PATCHMODEFILE" "BIDMODE")"; BUTTONIDUP="$(GET_PMODE_PROP "$PATCHMODEFILE" "ButtonIDUP")"; BUTTONIDDOWN="$(GET_PMODE_PROP "$PATCHMODEFILE" "ButtonIDDOWN")" 232 | PROPFILES="$IPSDP $IPSBP $IPVBP /data/local.prop /default.prop /build.prop"; PROPFILESALT="$IPSSPBP $IPSBP $IPVBP" 233 | DMYHMS="$( date +"%d-%m-%Y-%H:%M:%S" )" 234 | if [ -d $IPSPO ]; then IPPO="$IPSPO"; MIPPO="$MIPSPO"; elif [ -d $IPSO ]; then IPPO="$IPSO"; MIPPO="$MIPSO"; elif [ -d $IPVO ]; then IPPO="$IPVO"; MIPPO="$MIPSVO"; fi 235 | if [ -d $IPSPMAU ]; then IPPMU="$IPSPMAU"; MIPPMU="$MIPSPMAU"; elif [ -d $IPSMAU ]; then IPPMU="$IPSMAU"; MIPPMU="$MIPSMAU"; fi 236 | if [ -d $IPSPM ]; then IPPM="$IPSPM"; MIPPM="$MIPSPM"; elif [ -d $IPSM ]; then IPPM="$IPSM"; MIPPM="$MIPSM"; fi 237 | for f in Fox TWRP SHRP; do if [ -d $STORAGE/$f ]; then PLOGS="$STORAGE/$f/AIOLogs"; FPLOGS=true; break; else FPLOGS=false; fi; done; if [ $FPLOGS != true ]; then PLOGS="$STORAGE/AIOLogs"; fi 238 | if [ ! -d $IPSXB ] && [ $BOOTMODE != true ]; then mkdir -p $IPSXB; IPPSXB=$IPSXB; IPPSXBM=$MIPSXB; elif [ ! -d $IPSXB ] && $BOOTMODE; then IPPSXB=$IPSB; IPPSXBM=$MIPSB; else IPPSXB=$IPSXB; IPPSXBM=$MIPSXB; fi 239 | } 240 | 241 | MIUI_CHECKER() { 242 | if [ -d /data/miui ] || grep "ro.miui.build.region" $IPSBP || grep "ro.miui.region" $IPSBP || grep "ro.miui.ui.version*" $IPSBP || grep "ro.miui.ui.version.name*" $IPSBP; then MIUI=true; else MIUI=false; fi 243 | } 244 | 245 | BB_CHECKER() { 246 | if [ -f $IPSB/busybox ]; then 247 | BUSYBOX=/bin; FBUSYBOX=true 248 | elif [ -f $IPSXB/busybox ]; then 249 | BUSYBOX=/xbin; FBUSYBOX=true 250 | elif [ -d $MODPATH/busybox-brutal ] || [ -d $MODPATHUPD/busybox-brutal ] || [ -d $MODPATH/busybox-ndk ] || [ -d $MODPATHUPD/busybox-ndk ]; then 251 | FBUSYBOX=true 252 | else 253 | FBUSYBOX=false 254 | fi 255 | } 256 | 257 | ARCH_CHECKER() { 258 | DARCH="$(GET_PROP "ro.product.cpu.abi")" 259 | case "$DARCH" in 260 | *x86_64*) arch="x86_64"; MSGDELIMITER; UIP "Warning, Arch $arch Not Supported!"; libarch="lib64";; 261 | *x86*) arch="x86"; MSGDELIMITER; UIP "Warning, Arch $arch Not Supported!"; libarch="lib";; 262 | *arm64*) arch="arm64"; libarch="lib64";; 263 | *armeabi*) arch="arm"; libarch="lib";; 264 | *) arch="unknown"; MSGDELIMITER; UIP "Warning, $arch Not Supported/Found!";; 265 | esac 266 | AAPT="$AADDONS/aapt-$arch" 267 | XMLSTARLET="$AADDONS/xmlstarlet-$arch" 268 | SQLITE3="$TMPDIR/SQLite3/sqlite3-$arch" 269 | FKEYCHECK="$ADDONS/keycheck-$arch" 270 | ZIPPACKER="$AADDONS/zip-$arch" 271 | # SED="$AADDONS/sed-$arch" 272 | } 273 | 274 | PATCHMODE() { 275 | case "$PMODE" in 276 | D) DEBUGMODE=true; TESTMODE=false; MSGPMODE=", Debug Mode";; 277 | T) TESTMODE=true; DEBUGMODE=true; MSGPMODE=", Test Mode";; 278 | U) MSGPMODE=", User Mode"; DEBUGMODE=false; TESTMODE=false;; 279 | *) echo -e "$MSGPMODE\nPMODE=U" >> $PATCHMODEFILE; MSGPMODE=", User Mode"; DEBUGMODE=false; TESTMODE=false;; 280 | esac 281 | case "$MCMODE" in 282 | "true") MCMODE=true;; 283 | "false") MCMODE=false;; 284 | *) echo -e "$MSGMCMODE\nMCMODE=true" >> $PATCHMODEFILE; MCMODE=true;; 285 | esac 286 | if find /sys/class -name leds >/dev/null; then 287 | LEDPATH="$(find /sys/class -name leds)" 288 | case "$LEDCOLOR" in 289 | R) LEDCOLOR=red;; 290 | G) LEDCOLOR=green;; 291 | B) LEDCOLOR=blue;; 292 | W) LEDCOLOR=white;; 293 | "false") BLINKMODE=false;; 294 | *) BLINKMODE=false; echo -e "$MSGLEDCOLOR\nLEDCOLOR=false" >> $PATCHMODEFILE;; 295 | esac 296 | if [ -f $LEDPATH/$LEDCOLOR/blink ]; then echo -n 1 > $LEDPATH/$LEDCOLOR/blink; BLINKMODE=true; fi 297 | fi 298 | case "$HFDURATION" in 299 | "false") HFMODE=false;; 300 | [0-255]*) HFMODE=true; HFPATH="$(find /sys/class -name vibrator)"; if [ -f $HFPATH/duration ]; then echo -n $HFDURATION > $HFPATH/duration; fi; if [ -f $HFPATH/activate ]; then HFFPATH=$HFPATH/activate; elif [ -f $HFPATH/enable ]; then HFFPATH=$HFPATH/enable; fi;; 301 | *) HFMODE=false; echo -e "$MSGHFMODE\nHFMODE=false" >> $PATCHMODEFILE;; 302 | esac 303 | case "$HFSWAPMODE" in 304 | "true") HFSWAPMODE=true;; 305 | "false") HFSWAPMODE=false;; 306 | *) echo -e "$MSGHFSMODE\nHFSMODE=false" >> $PATCHMODEFILE; HFSWAPMODE=false;; 307 | esac 308 | case "$PDESIGN" in 309 | N) NEWDESIGN=true; OLDDESIGN=false;; 310 | O) OLDDESIGN=true; NEWDESIGN=false;; 311 | *) NEWDESIGN=true; echo -e "$MSGPDESIGN\nPDESIGN=N" >> $PATCHMODEFILE;; 312 | esac 313 | case "$KMETHOD" in 314 | N) AKOLD=false; KNEW=true; KOLD=false;; 315 | O) AKOLD=false; KNEW=false; KOLD=true;; 316 | A) AKOLD=true; KNEW=false; KOLD=false;; 317 | "false") AKOLD=false; KOLD=false; KNEW=false;; 318 | *) echo -e "$MSGKMETHOD\nKMETHOD=false" >> $PATCHMODEFILE; AKOLD=false; KOLD=false; KNEW=false;; 319 | esac 320 | case "$TKEY" in 321 | "true") TKEYCHECK=true;; 322 | "false") TKEYCHECK=false;; 323 | *) TKEYCHECK=false; echo -e "$MSGTKEY\nTKEY=false" >> $PATCHMODEFILE;; 324 | esac 325 | case "$ENDMODE" in 326 | "true") ENDMODE=true;; 327 | "false") ENDMODE=false;; 328 | *) ENDMODE=true; echo -e "$MSGENDMODE\nENDMODE=true" >> $PATCHMODEFILE;; 329 | esac 330 | case "$BIDMODE" in 331 | "true") BIDMODE=true; BUTTONIDUP="$(GET_PMODE_PROP "$PATCHMODEFILE" "ButtonIDUP")"; BUTTONIDDOWN="$(GET_PMODE_PROP "$PATCHMODEFILE" "ButtonIDDOWN")";; 332 | "false") BIDMODE=false;; 333 | *) BIDMODE=true; echo -e "$MSGBIDMODE\nBIDMODE=true\nButtonIDUP=#UP\nButtonIDDOWN=#DOWN" >> $PATCHMODEFILE;; 334 | esac 335 | } 336 | 337 | AIOCPFMD() { 338 | if $DEBUGMODE || $TESTMODE; then mkdir -p $PLOGS/TWRP; mkdir -p $PLOGS/MM; fi; [ -d $TMPDIR ] && rm -rf $TMPDIR; mkdir -p $TMPDIR; [ -d $ALTTMPDIR ] && rm -rf $ALTTMPDIR; mkdir -p $ALTTMPDIR 339 | UIP "Copy AIOCPFMD To TMPDIR$MSGPMODE" 340 | unzip -oq $ZIPFILE BB.zip Addons.tar.xz -d $ALTTMPDIR 2>/dev/null 341 | unzip -oq $BB.zip -d $ALTTMPDIR 2>/dev/null; rm -f $BB.zip 342 | chmod -R 777 $TMPDIR; chmod -R 777 $ALTTMPDIR 343 | $BB/busybox-$arch --install -s $BB 344 | $UNTARXZ -xf $ADDONS.tar.xz -C $ALTTMPDIR; rm -f $ADDONS.tar.xz 345 | UPN="AltAddons"; UZTPN & 346 | } 347 | 348 | CHECK_AVERSION() { 349 | ASDK="$(GREP_PROP "ro.build.version.sdk")" 350 | AVERSION="$(GREP_PROP "ro.build.version.release")" 351 | # Major supported versions default=false 352 | AKITKAT=false; ALOLLIPOP=false; AMARSHMALLOW=false; ANOUGAT=false; AOREO=false; APIE=false; ATEN=false; AELEVEN=false; ATWELVE=false 353 | # Check major supported versions 354 | if [ "$ASDK" = "19" ] && [ "$AVERSION" = "4.4.4" ]; then 355 | AKITKAT=true 356 | elif [ "$ASDK" = "22" ] && [ "$AVERSION" = "5.1.1" ]; then 357 | ALOLLIPOP=true 358 | elif [ "$ASDK" = "23" ] && [ "$AVERSION" = "6.0.1" ]; then 359 | AMARSHMALLOW=true 360 | elif [ "$ASDK" = "25" ] && [ "$AVERSION" = "7.1.2" ]; then 361 | ANOUGAT=true 362 | elif [ "$ASDK" = "27" ] && [ "$AVERSION" = "8.1" ] || [ "$AVERSION" = "8.1.0" ]; then 363 | AOREO=true 364 | elif [ "$ASDK" = "28" ] && [ "$AVERSION" = "9" ] || [ "$AVERSION" = "9.0" ]; then 365 | APIE=true 366 | elif [ "$ASDK" = "29" ] && [ "$AVERSION" = "10" ] || [ "$AVERSION" = "10.0" ]; then 367 | ATEN=true 368 | elif [ "$ASDK" = "30" ] && [ "$AVERSION" = "11" ] || [ "$AVERSION" = "11.0" ]; then 369 | AELEVEN=true 370 | elif [ "$ASDK" = "31" ] && [ "$AVERSION" = "12" ] || [ "$AVERSION" = "12.0" ]; then 371 | ATWELVE=true 372 | fi 373 | case $ASDK in 374 | "10");; "15");; "16");; "17");; "18");; "19");; "21");; "22");; "23");; "24");; "25");; "26");; "27");; "28");; "29");; "30");; "31");; *) MSGDELIMITER; UIP "Warning, SDK Not Supported/Found!";; 375 | esac 376 | } 377 | 378 | CHECK_DEVICE() { 379 | local PROPDEVICE=$(echo "$1" | tr '[:upper:]' '[:lower:]') 380 | for i in $SYSTEM $VENDOR $IPSSP; do 381 | if [ -f $i/build.prop ]; then 382 | for j in "ro.product.device" "ro.build.product" "ro.product.vendor.device" "ro.vendor.product.device"; do 383 | [ "$(sed -n "s/^$j=//p" $i/build.prop 2>/dev/null | head -n 1 | tr '[:upper:]' '[:lower:]')" == "$PROPDEVICE" ] && return 0 384 | done 385 | fi 386 | done 387 | return 1 388 | } 389 | 390 | MAGISK_CHECKER() { 391 | if [ -d /data/magisk ] && [ -f /data/magisk/util_functions.sh ]; then 392 | MAGISKFIRSTTIME=true 393 | FINDMAGISK=true 394 | MAGISK=true 395 | MAGISKVC="$(GET_FILE_PROP "/data/magisk/util_functions.sh" "MAGISK_VER_CODE")" 396 | elif [ -d $NVBASE/magisk ] && [ -f $NVBASE/magisk/util_functions.sh ]; then 397 | MAGISKFIRSTTIME=false 398 | FINDMAGISK=true 399 | MAGISK=true 400 | MAGISKVC="$(GET_FILE_PROP "$NVBASE/magisk/util_functions.sh" "MAGISK_VER_CODE")" 401 | else 402 | MAGISKFIRSTTIME=false 403 | FINDMAGISK=false 404 | MAGISK=false 405 | fi 406 | if $FINDMAGISK && [ $BOOTMODE != true ] && $DEBUGMODE && $MCMODE; then 407 | MSGDELIMITER 408 | if [ $MAGISKVC -ge 20000 ]; then 409 | UIP "Found Magisk, Install Everything $IAMM?" 410 | elif [ $MAGISKVC -lt 20400 ]; then 411 | UIP "Found Old Magisk, Please Install Magisk v18.0+!" "Found Magisk, Install Everything $IAMM?" 412 | fi 413 | UIP "$MSGVU Yes $MSGRI" "$MSGVD No $MSGNUS" 414 | if $KEYFUNCTION; then 415 | MAGISK=true 416 | else 417 | MAGISK=false 418 | fi 419 | fi 420 | if $MAGISK; then 421 | mkdir -p $MODPATH; mkdir -p $POSTFSDATAD; mkdir -p $SERVICED 422 | chmod 755 $MODPATH; chmod 755 $POSTFSDATAD; chmod 755 $SERVICED 423 | fi 424 | ALLPATCHMSG 425 | } 426 | 427 | MAGISKMIRROR_CHECKER() { 428 | if $BOOTMODE; then MAGISKMIRROR=$(find `magisk --path` -type d -name "mirror" | head -n 1); else MAGISKMIRROR=""; fi 429 | } 430 | 431 | HFBMODE() { 432 | if $HFMODE; then if $HFSWAPMODE; then echo -n $HFDURATION > $HFFPATH; else echo -n 1 > $HFFPATH; fi; fi 433 | } 434 | 435 | UNMOUNT() { 436 | if [ $BOOTMODE != true ]; then 437 | UIP "UnMounting$Mounts" 438 | for m in $Mounts; do 439 | case $m in 440 | $SYSTEM_MOUNT) 441 | if $DABP; then 442 | mount -o ro $SYSTEM_MOUNT 443 | else 444 | umount $SYSTEM_MOUNT 445 | fi;; 446 | *) umount "$m";; 447 | esac 448 | done 449 | fi 450 | } 451 | 452 | END() { 453 | MSGDELIMITER 454 | if $ENDMODE; then 455 | UIP "It's Time To Choose:" "$MSGVU To The Beginning $MSGEFTC" "$MSGVD Exit $MSGEND" 456 | if $KEYFUNCTION; then cd $TMPDIR; ls | grep -v AltAddons | xargs rm -rf; UNIVERSALREMOVECAM; GCAM_PRESETS; ANXCAM_PRESETS; END; else ENDMODE=false; END; fi 457 | else 458 | UNMOUNT 459 | if $DEBUGMODE; then 460 | UIP "Clear TMPDIR, Copy Logs & Exit" 461 | if [ $BOOTMODE != true ]; then mkdir -p $PLOGS/TWRP/$( date +"%Y-%m" ); cp -f /tmp/recovery.log $PLOGS/TWRP/$( date +"%Y-%m" )/AIORecovery-$( date +"%d-%H:%M:%S" ).log; fi 462 | if $BOOTMODE && $TESTMODE; then input tap 1040 140; fi 463 | mkdir -p $PLOGS/MM/$( date +"%Y-%m" ) 464 | find $STORAGE/Download/ -type f -name 'magisk_install_log*.log' -exec mv {} $PLOGS/MM/$( date +"%Y-%m" )/AIOMagisk-$( date +"%d-%H:%M:%S" ).log \; 465 | else 466 | UIP "Clear TMPDIR & Exit" 467 | fi 468 | if $BLINKMODE; then echo -n 0 > $LEDPATH/$LEDCOLOR/blink; fi 469 | rm -rf $TMPDIR && rm -rf $ALTTMPDIR && MSGDELIMITER && exit 0 470 | fi 471 | } 472 | 473 | ui_print() { 474 | $BOOTMODE && echo "$MSGSD $1" || echo -e "ui_print $MSGSD $1\nui_print" >> /proc/self/fd/$OUTFD 475 | } 476 | 477 | UIP() { 478 | for uip in "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9" "$10"; do 479 | if [ "$uip" ]; then 480 | ui_print "$uip" 481 | else 482 | break 483 | fi 484 | done 485 | } 486 | 487 | MSGDELIMITER() { 488 | $BOOTMODE && echo "$MSGDELIMITER" || echo -e "ui_print $MSGDELIMITER\nui_print" >> /proc/self/fd/$OUTFD 489 | } 490 | 491 | GREP_PROP() { 492 | local REGEX="s/^$1=//p" 493 | shift 494 | local FILES=$@ 495 | [ -z "$FILES" ] && FILES="$PROPFILESALT" 496 | sed -n "$REGEX" $FILES 2>/dev/null | head -n 1 497 | } 498 | 499 | UCS() { 500 | UIP "$MSGUC" "$MSGVU $UCUP" 501 | UIP "$MSGVD $UCDOWN" 502 | if $KEYFUNCTION; then 503 | $UCONE 504 | else 505 | $UCTWO 506 | fi 507 | } 508 | 509 | UCSA() { 510 | MSGDELIMITER 511 | UIP "$1" "$MSGVU Yes $2" "$MSGVD No $3" 512 | if $KEYFUNCTION; then 513 | $4 514 | else 515 | $5 516 | fi 517 | } 518 | 519 | GET_FILE_PROP() { 520 | grep -m1 "^$2=" "$1" | cut -d= -f2 521 | } 522 | 523 | GET_PMODE_PROP() { 524 | grep -m1 "^$2=" "$1" | cut -d= -f2 | cut -d ' ' -f1 525 | } 526 | 527 | GET_PROP() { 528 | #check known .prop files using GET_FILE_PROP 529 | for f in $PROPFILES; do 530 | if [ -e "$f" ]; then 531 | PROP="$(GET_FILE_PROP "$f" "$1")" 532 | if [ -n "$PROP" ]; then 533 | break #if an entry has been found, break out of the loop 534 | fi 535 | fi 536 | done 537 | #if prop is still empty; try to use recovery's built-in getprop method; otherwise output current result 538 | if [ -z "$PROP" ]; then 539 | getprop "$1" | cut -c1- 540 | else 541 | printf "$PROP" 542 | fi 543 | } 544 | 545 | MKTOUCHER() { 546 | mkdir -p ${1%/*} 2>/dev/null 547 | [ -z $2 ] && touch $1 || echo $2 > $1 548 | chmod 644 $1 549 | } 550 | 551 | REPLACER() { 552 | # Handle replace folders 553 | for TARGET in $REPLACE; do 554 | MKTOUCHER $MODPATH/$MODID$TARGET/.replace 555 | done 556 | } 557 | 558 | REMOVER() { 559 | local REMOVE=$2 560 | case $1 in 561 | -rm) for TARGET in $REMOVE; do if [ -d $TARGET ]; then rm -rf $TARGET; fi; done;; 562 | -mm) for TARGET in $(echo $REMOVE | cut -f 1 -d '_'); do if [ -d $MODPATH/$TARGET ]; then rm -rf $MODPATH/$TARGET; fi; if [ -d $MODPATHUPD/$TARGET ]; then rm -rf $MODPATHUPD/$TARGET; fi; done;; 563 | esac 564 | } 565 | 566 | FINDER() { 567 | for TARGET in $FIND; do 568 | if [ -d $TARGET ]; then 569 | STANDARTFINDER=true 570 | fi 571 | done 572 | } 573 | 574 | SET_PERM() { 575 | chown $2:$3 $1 || return 1 576 | chmod $4 $1 || return 1 577 | CON=$5 578 | [ -z $CON ] && CON=u:object_r:system_file:s0 579 | chcon $CON $1 || return 1 580 | } 581 | 582 | SET_PERM_R() { 583 | find $1 -type d 2>/dev/null | while read dir; do 584 | SET_PERM $dir $2 $3 $4 $6 585 | done 586 | find $1 -type f -o -type l 2>/dev/null | while read file; do 587 | SET_PERM $file $2 $3 $5 $6 588 | done 589 | } 590 | 591 | SET_PERM_RM() { 592 | SET_PERM_R $MODPATH/$MODID 0 0 0755 0644 593 | } 594 | 595 | UZTPN() { 596 | $UNZIP -oq $ZIPFILE $UPN.tar.xz -d $TMPDIR 2>/dev/null 597 | $UNTARXZ -xf $TMPDIR/$UPN.tar.xz -C $TMPDIR; rm -f $TMPDIR/$UPN.tar.xz 598 | } 599 | 600 | APKPERM() { 601 | PACKAGENAME=$($AAPT list -a $APKINPUT | awk -v FS='"' '/package=/{print $2}') 602 | mkdir -p $APKDIROUTPUT 603 | PERM=$($AAPT d permissions $APKINPUT | grep "uses-permission:" | \ 604 | sed -r "s|.*='(.*)'|\1|") 605 | APPPERM=$(echo "$PERM" | \ 606 | sed -re "s| ||g; s|^| |") 607 | echo " 608 | # 613 | 614 | 615 | $APPPERM 616 | 617 | " > $APKDIROUTPUT/privapp-permissions-$PACKAGENAME.xml 618 | chmod 644 $APKDIROUTPUT/privapp-permissions-$PACKAGENAME.xml 619 | } 620 | 621 | HAPWL() { 622 | mkdir -p $APKDIROUTPUT 623 | echo " 624 | 627 | 628 | 629 | " >> $APKDIROUTPUT/$PACKAGENAME-package-whitelist.xml 630 | } 631 | 632 | MMPR() { 633 | case $1 in 634 | -v) echo "id=$MODID 635 | name=$2 636 | version=$3 637 | author=$WDI 638 | description=$4" > $MODPATH/$MODID/module.prop;; 639 | -vs) echo "id=$MODID 640 | name=$2 641 | version=$3 642 | author=$WDI 643 | description=$4 644 | support=$5" > $MODPATH/$MODID/module.prop;; 645 | -vc) echo "id=$MODID 646 | name=$2 647 | version=$3 648 | versionCode=$4 649 | author=$5 650 | description=$6" > $MODPATH/$MODID/module.prop;; 651 | -vcs) echo "id=$MODID 652 | name=$2 653 | version=$3 654 | versionCode=$4 655 | author=$5 656 | description=$6 657 | support=$7" > $MODPATH/$MODID/module.prop;; 658 | -vcmm) echo "id=$MODID 659 | name=$2 660 | version=$3 661 | versionCode=$4 662 | author=$5 663 | description=$6 664 | minMagisk=$7" > $MODPATH/$MODID/module.prop;; 665 | -vcma) echo "id=$MODID 666 | name=$2 667 | version=$3 668 | versionCode=$4 669 | author=$5 670 | description=$6 671 | minApi=$7" > $MODPATH/$MODID/module.prop;; 672 | -vcsd) echo "id=$MODID 673 | name=$2 674 | version=$3 675 | versionCode=$4 676 | author=$5 677 | description=$6 678 | support=$7 679 | donate=$8" > $MODPATH/$MODID/module.prop;; 680 | -vcsdt) echo "id=$MODID 681 | name=$2 682 | version=$3 683 | versionCode=$4 684 | author=$5 685 | description=$6 686 | support=$7 687 | donate=$8 688 | template=$9" > $MODPATH/$MODID/module.prop;; 689 | esac 690 | } 691 | 692 | } # 693 | 694 | { #KeyCheck 695 | 696 | KEYTEST() { 697 | MSGDELIMITER; UIP "Press Vol: Up Or Down" "Or Tap The Screen To Assign Buttons" 698 | if ($TIMEOUT 5 $KGETEVENT -lc 1 2>&1 | $KGREP VOLUME | $KGREP " DOWN" > $EVENTS); then HFBMODE && sed -i "s/KMETHOD=false/KMETHOD=N/g" $PATCHMODEFILE && return 0; else return 1; fi 699 | } 700 | 701 | CHOOSENEW() { 702 | # Original idea by chainfire @xda-developers, improved on by ianmacd @xda-developers 703 | while true; do 704 | $KGETEVENT -lc 1 2>&1 | $KGREP VOLUME | $KGREP " DOWN" > $EVENTS 705 | if (`cat $EVENTS 2>/dev/null | $KGREP VOLUME >/dev/null`); then 706 | break 707 | fi 708 | done 709 | if (`cat $EVENTS 2>/dev/null | $KGREP VOLUMEUP >/dev/null`); then 710 | HFBMODE && return 0 711 | else 712 | HFBMODE && return 1 713 | fi 714 | } 715 | 716 | CHOOSEOLD() { 717 | while true; do 718 | if $TKEYCHECK; then $FKEYCHECK; fi; $FKEYCHECK 719 | local SEL=$? 720 | if [ "$1" == "UP" ]; then 721 | HFBMODE && UP=$SEL && sed -i "s/ButtonIDUP=#UP/ButtonIDUP=$SEL/g" $PATCHMODEFILE 722 | break 723 | elif [ "$1" == "DOWN" ]; then 724 | HFBMODE && DOWN=$SEL && if [ "$UP" -ne "$SEL" ]; then sed -i "s/ButtonIDDOWN=#DOWN/ButtonIDDOWN=$SEL/g" $PATCHMODEFILE; fi 725 | break 726 | elif [ $SEL -eq $UP ]; then 727 | HFBMODE && return 0 728 | elif [ $SEL -eq $DOWN ]; then 729 | HFBMODE && return 1 730 | fi 731 | done 732 | } 733 | 734 | ALTCHOOSEOLD() { 735 | while true; do 736 | if $TKEYCHECK; then $FKEYCHECK; fi; $FKEYCHECK 737 | local SEL=$? 738 | if [ $SEL -eq $BUTTONIDUP ]; then 739 | HFBMODE && return 0 740 | elif [ $SEL -eq $BUTTONIDDOWN ]; then 741 | HFBMODE && return 1 742 | fi 743 | done 744 | } 745 | 746 | KEYCHOOSEOLDBIND() { 747 | MSGDELIMITER; UIP "Vol Key Programming Method" "Press Vol Up" 748 | $KEYFUNCTION "UP" 749 | UIP "Press Vol Down" 750 | $KEYFUNCTION "DOWN" 751 | if [ $UP = $DOWN ]; then 752 | UIP "Two Identical Keys Are Tied! Try Again!" "Activated TKEY For CHOOSEOLD" 753 | TKEYCHECK=true 754 | MSGDELIMITER; UIP "Vol Key Programming Method" "Press Vol Up" 755 | $KEYFUNCTION "UP" 756 | UIP "Press Vol Down" 757 | $KEYFUNCTION "DOWN" 758 | if [ $UP = $DOWN ]; then 759 | UIP "Two Identical Keys Are Tied! Try Again!" "Or Vol Key Not Detected!" 760 | ENDMODE=false; END 761 | else 762 | sed -i "s/TKEY=false/TKEY=true/g" $PATCHMODEFILE 763 | fi 764 | fi 765 | if $BIDMODE; then sed -i "s/KMETHOD=false/KMETHOD=A/g" $PATCHMODEFILE; else sed -i "s/KMETHOD=A/KMETHOD=O/g" $PATCHMODEFILE; fi 766 | } 767 | 768 | KEYCHECK() { 769 | if [ -f /sbin/getevent ] && [ -f /sbin/grep ]; then KGETEVENT="/sbin/getevent"; KGREP="/sbin/grep"; elif [ -f $IPSB/getevent ] && [ -f $IPSB/grep ]; then KGETEVENT="$IPSB/getevent"; KGREP="$IPSB/grep"; else KGETEVENT="getevent"; KGREP="grep"; fi 770 | if $KOLD && [ $AKOLD != true ] && [ $KNEW != true ]; then 771 | KEYFUNCTION=CHOOSEOLD; KEYCHOOSEOLDBIND 772 | elif $KNEW && [ $AKOLD != true ] && [ $KOLD != true ]; then 773 | KEYFUNCTION=CHOOSENEW 774 | elif $AKOLD && [ $KNEW != true ] && [ $KOLD != true ]; then 775 | KEYFUNCTION=ALTCHOOSEOLD 776 | elif KEYTEST; then 777 | KEYFUNCTION=CHOOSENEW 778 | else 779 | KEYFUNCTION=CHOOSEOLD; KEYCHOOSEOLDBIND 780 | fi 781 | } 782 | 783 | } # 784 | 785 | { #Removal Mechanism 786 | 787 | RTrash_System_AppSA() { 788 | for FINDTRASH in $REMOVETRASHNAME; do 789 | for NAMEPATHDELLTRASH in "$IPSA" "$IPSPA" "$IPSSPA" "$IPSSPPA" "$IPSSSA" "$IPSSSPA"; do 790 | if [ -d $NAMEPATHDELLTRASH/$FINDTRASH ]; then 791 | MSGDELIMITER 792 | MSGUC="Found ($FINDTRASH)" 793 | UCUP="Removed?" 794 | UCDOWN="No $MSGNUS" 795 | UCONE="rm -rf $NAMEPATHDELLTRASH/$FINDTRASH && ui_print '$MSGDRM'" 796 | UCS 797 | break 798 | UIP "Other Search App, Please Wait..." 799 | fi 800 | done 801 | done 802 | } 803 | 804 | UNIVERSALREMOVECAM() { 805 | if [ $BOOTMODE != true ]; then 806 | REMOVETRASHNAME=" 807 | Camera2 808 | CameraGo 809 | GCam 810 | GCamGOPrebuilt 811 | GCamGo 812 | Gcam 813 | GoogleCamera 814 | GoogleCameraGo 815 | GoogleCameraLegacy 816 | Snap 817 | madCamera 818 | " 819 | RTrash_System_AppSA 820 | fi 821 | } 822 | 823 | } # 824 | 825 | { #Install Mechanism 826 | 827 | Google_Camera_Universal_Alt_Method_Install() { 828 | if [ -f $STORAGE/$GCAltName.apk ]; then 829 | VGCN="Your Version" 830 | MSGDELIMITER; UIP "Found $GCAltName.apk in $STORAGE" "$MSGVU Install" "$MSGVD No $MSGNUS" 831 | if $KEYFUNCTION; then 832 | UIP "Installing $GCAltName $IAMM" 833 | mkdir -p $TMPDIR/$GCAltName 834 | cp -f $STORAGE/$GCAltName.apk $TMPDIR/$GCAltName 835 | rm -rf $IPSA/$GCAltName 836 | rm -rf $MODPATH/$GCAltName 837 | if $MAGISK; then 838 | mkdir -p $MODPATH/$GCAltName$MIPSA/$GCAltName/lib/arm64 839 | cp -f $TMPDIR/$GCAltName/$GCAltName.apk $MODPATH/$GCAltName$MIPSA/$GCAltName 840 | mkdir -p $TMPDIR/Lib_GCam_$GCAltName 841 | $UNZIP -oq $TMPDIR/$GCAltName/$GCAltName.apk lib/arm64-v8a/* -d $TMPDIR/Lib_GCam_$GCAltName >/dev/null 842 | cp -rf $TMPDIR/Lib_GCam_$GCAltName/lib/arm64-v8a/* $MODPATH/$GCAltName$MIPSA/$GCAltName/lib/arm64 843 | MODID="GoogleCamera" 844 | MMPR -v "$GCAltName" "$VGCN" "Google Camera $IAMM" 845 | APKINPUT="$MODPATH/$GCAltName$MIPSA/$GCAltName/$GCAltName.apk"; APKDIROUTPUT="$MODPATH/$GCAltName$MIPSEP"; APKPERM; APKDIROUTPUT="$MODPATH/$GCAltName$MIPSES"; HAPWL 846 | SET_PERM_R $MODPATH/$GCAltName 0 0 0755 0644 847 | else 848 | mkdir -p $TMPDIR/$GCAltName 849 | mkdir -p $TMPDIR/Lib_$GCAltName 850 | cp -rf $TMPDIR/$GCAltName $IPSA 851 | mkdir -p $IPSA/$GCAltName/lib/arm64 852 | $UNZIP -oq $TMPDIR/$GCAltName/$GCAltName.apk lib/arm64-v8a/* -d $TMPDIR/Lib_$GCAltName >/dev/null 853 | cp -rf $TMPDIR/Lib_$GCAltName/lib/arm64-v8a/* $IPSA/$GCAltName/lib/arm64 854 | APKINPUT="$IPSA/$GCAltName/$GCAltName.apk"; APKDIROUTPUT="$IPSEP"; APKPERM; APKDIROUTPUT="$IPSES"; HAPWL 855 | SET_PERM_R $IPSA/$GCAltName 0 0 0755 0644 856 | fi 857 | UIP "$MSGDI" 858 | fi 859 | fi 860 | } 861 | 862 | Google_Camera_Universal_Method() { 863 | if [ -f $STORAGE/$GCFN.apk ]; then 864 | MSGDELIMITER; UIP "Found $GCFN.apk in $STORAGE" "$MSGVU Install Of ($STORAGE)" "$MSGVD Install Of (AIOCPFMD)" 865 | if $KEYFUNCTION; then 866 | UIP "Installing Of ($STORAGE) GCam by $GCN $IAMM" 867 | VGCN="Your Version" 868 | cp -f $STORAGE/$GCFN.apk $TMPDIR/$GCNP 869 | else 870 | UIP "Installing GCam by $GCN $VGCN $IAMM" 871 | fi 872 | else 873 | UIP "Installing GCam by $GCN $VGCN $IAMM" 874 | fi 875 | $UNZIP -oq $ZIPFILE $GCNP.tar.xz -d $TMPDIR 2>/dev/null 876 | $UNTARXZ -xf $TMPDIR/$GCNP.tar.xz -C $TMPDIR/$FOLDERCAM; rm -f $TMPDIR/$GCNP.tar.xz 877 | rm -rf $IPSA/$GCFN 878 | rm -rf $MODPATH/$GCFN 879 | if $MAGISK; then 880 | mkdir -p $TMPDIR/Lib_GCam_$GCFN 881 | mkdir -p $MODPATH/$GCFN$MIPSA/$GCFN/lib/arm64 882 | cp -f $TMPDIR/$GCNP/$GCFN.apk $MODPATH/$GCFN$MIPSA/$GCFN 883 | $UNZIP -oq $TMPDIR/$GCNP/$GCFN.apk lib/arm64-v8a/* -d $TMPDIR/Lib_GCam_$GCFN >/dev/null 884 | cp -rf $TMPDIR/Lib_GCam_$GCFN/lib/arm64-v8a/* $MODPATH/$GCFN$MIPSA/$GCFN/lib/arm64 885 | MODID="$GCFN" 886 | MMPR -vs "$GCFN" "$VGCN" "$GCN" "Google Camera $IAMM" "$Support" 887 | APKINPUT="$MODPATH/$GCFN$MIPSA/$GCFN/$GCFN.apk"; APKDIROUTPUT="$MODPATH/$GCFN$MIPSEP"; APKPERM 888 | SET_PERM_R $MODPATH/$GCFN 0 0 0755 0644 889 | else 890 | cp -rf $TMPDIR/$GCNP $IPSA 891 | mkdir -p $TMPDIR/Lib_GCam_$GCFN 892 | mkdir -p $IPSA/$GCFN/lib/arm64 893 | $UNZIP -oq $TMPDIR/$GCNP/$GCFN.apk lib/arm64-v8a/* -d $TMPDIR/Lib_GCam_$GCFN >/dev/null 894 | cp -rf $TMPDIR/Lib_GCam_$GCFN/lib/arm64-v8a/* $IPSA/$GCFN/lib/arm64 895 | APKINPUT="$IPSA/$GCFN/$GCFN.apk"; APKDIROUTPUT="$IPSEP"; APKPERM 896 | SET_PERM_R $IPSA/$GCFN 0 0 0755 0644 897 | fi 898 | UIP "$MSGDI" 899 | } 900 | 901 | IANXCam() { 902 | if $MAGISK && $AELEVEN; then 903 | UCSA "Install ANXCamera $VANXCameraR" "" "$MSGNUS" "IANXCamS" 904 | else 905 | UCSA "Install ANXCamera $VANXCameraN Or $VANXCameraO?" "" "$MSGNUS" "IANXCamS" 906 | fi 907 | } 908 | 909 | IANXCamS() { 910 | MODID="ANXMiuiCamera"; REMOVER -mm "$MODID" 911 | mkdir -p $MODPATH/$MODID 912 | if $AELEVEN; then 913 | NAMEANX="ANXCameraR" 914 | MMPR -vcs "ANXCamera" "185R.SaltyIntelligentPlainsqueaker" "185R" "AEonAX" "ANXCamera Magisk Module R Mod" "https://forum.xda-developers.com/poco-f1/themes/port-t3879357" 915 | UIP "Please Wait..." 916 | $UNZIP -oq $ZIPFILE $NAMEANX.tar.xz -d $TMPDIR 2>/dev/null 917 | $UNTARXZ -xf $TMPDIR/$NAMEANX.tar.xz -C $TMPDIR; rm -f $TMPDIR/$NAMEANX.tar.xz 918 | else 919 | MSGDELIMITER; UIP "Choose Variant:" "$MSGVU Install $VANXCameraN" "$MSGVD Install $VANXCameraO" 920 | if $KEYFUNCTION; then 921 | NAMEANX="ANXCameraN" 922 | MMPR -vc "ANXCamera" "190.BountifulDistantHapuka" "190" "AEonAX" "ANXCamera Magisk Module" 923 | UIP "Please Wait..." 924 | $UNZIP -oq $ZIPFILE $NAMEANX.tar.xz -d $TMPDIR 2>/dev/null 925 | $UNTARXZ -xf $TMPDIR/$NAMEANX.tar.xz -C $TMPDIR; rm -f $TMPDIR/$NAMEANX.tar.xz 926 | MSGDELIMITER; UIP "Remove ANXScanner?" "$MSGVU Yes" "$MSGVD No" 927 | if $KEYFUNCTION; then 928 | rm -rf $TMPDIR/$NAMEANX/system/app/ANXScanner 929 | rm -f $TMPDIR/$NAMEANX/system/etc/permissions/privapp-permissions-scanner.xml 930 | fi 931 | else 932 | NAMEANX="ANXCameraO" 933 | MMPR -vc "ANXCamera" "185.SaltyIntelligentPlainsqueaker" "185" "AEonAX" "ANXCamera Magisk Module" 934 | UIP "Please Wait..." 935 | $UNZIP -oq $ZIPFILE $NAMEANX.tar.xz -d $TMPDIR 2>/dev/null 936 | $UNTARXZ -xf $TMPDIR/$NAMEANX.tar.xz -C $TMPDIR; rm -f $TMPDIR/$NAMEANX.tar.xz 937 | fi 938 | fi 939 | UIP "Installing ANXCamera $IAMM" 940 | cp -rf $TMPDIR/$NAMEANX/* $MODPATH/$MODID 941 | cp -rf $MODPATH/$MODID$MIPSE/ANXCamera $STORAGE/.ANXCamera 942 | echo "ro.miui.notch=1" >> $MODPATH/$MODID/system.prop 943 | SET_PERM_RM 944 | UIP "$MSGDI" 945 | } 946 | 947 | IANXAddons() { 948 | if $MAGISK && $AELEVEN; then 949 | UCSA "Install 48MPFixR $V48MPFixR?" "" "$MSGNUS" "IANXAddonsS" 950 | else 951 | UCSA "Install 48MPFixQ $V48MPFixQ?" "" "$MSGNUS" "IANXAddonsS" 952 | fi 953 | } 954 | 955 | IANXAddonsS() { 956 | if $AELEVEN; then 957 | MODID="48MPFixR" 958 | UIP "Please Wait..." 959 | $UNZIP -oq $ZIPFILE "48MPFixR".tar.xz -d $TMPDIR 2>/dev/null 960 | $UNTARXZ -xf $TMPDIR/"48MPFixR".tar.xz -C $TMPDIR; rm -f $TMPDIR/"48MPFixR".tar.xz 961 | REMOVER -mm "$MODID" 962 | if CHECK_DEVICE ginkgo || CHECK_DEVICE lavender || CHECK_DEVICE willow; then 963 | cp -rf $TMPDIR/"48MPFixR"/system/qti_samsung/* $TMPDIR/"48MPFixR"/system 964 | elif CHECK_DEVICE gram || CHECK_DEVICE curtana || CHECK_DEVICE joyeuse; then 965 | cp -rf $TMPDIR/"48MPFixR"/system/miatoll/* $TMPDIR/"48MPFixR"/system 966 | elif CHECK_DEVICE laurel_sprout; then 967 | cp -rf $TMPDIR/"48MPFixR"/system/laurel_sprout/* $TMPDIR/"48MPFixR"/system 968 | elif CHECK_DEVICE begonia || CHECK_DEVICE merlin || CHECK_DEVICE lancelot || CHECK_DEVICE shiva; then 969 | cp -rf $TMPDIR/"48MPFixR"/mtk_samsung/* $TMPDIR/system 970 | else 971 | cp -rf $TMPDIR/"48MPFixR"/system/qti_imx/* $TMPDIR/"48MPFixR"/system 972 | fi 973 | rm -rf $TMPDIR/"48MPFixR"/system/qti_imx; rm -rf $TMPDIR/"48MPFixR"/system/qti_samsung; rm -rf $TMPDIR/"48MPFixR"/system/miatoll; rm -rf $TMPDIR/"48MPFixR"/system/laurel_sprout; rm -rf $TMPDIR/"48MPFixR"/system/mtk_samsung 974 | cp -rf $TMPDIR/"48MPFixR" $MODPATH 975 | MMPR -vc "$MODID" "201.DullAggressiveHylaeosaurus" "201" "Noid" "48MPFix for ANXCamera Magisk Module" 976 | else 977 | MODID="48MPFixQ" 978 | UIP "Please Wait..." 979 | $UNZIP -oq $ZIPFILE "48MPFixQ".tar.xz -d $TMPDIR 2>/dev/null 980 | $UNTARXZ -xf $TMPDIR/"48MPFixQ".tar.xz -C $TMPDIR; rm -f $TMPDIR/"48MPFixQ".tar.xz 981 | REMOVER -mm "$MODID" 982 | if CHECK_DEVICE ginkgo || CHECK_DEVICE lavender || CHECK_DEVICE willow ; then 983 | mv -f $TMPDIR/"48MPFixQ"/system/samsung/* $TMPDIR/"48MPFixQ"/system 984 | elif CHECK_DEVICE laurel_sprout; then 985 | cp -rf $TMPDIR/"48MPFixQ"/system/laurel_sprout/* $TMPDIR/"48MPFixQ"/system 986 | elif CHECK_DEVICE curtana ; then 987 | cp -rf $TMPDIR/"48MPFixQ"/system/curtana/* $TMPDIR/"48MPFixQ"/system 988 | else 989 | cp -rf $TMPDIR/"48MPFixQ"/system/imx/* $TMPDIR/"48MPFixQ"/system 990 | fi 991 | rm -rf $TMPDIR/"48MPFixQ"/system/imx; rm -rf $TMPDIR/"48MPFixQ"/system/samsung; rm -rf $TMPDIR/"48MPFixQ"/system/laurel_sprout; rm -rf $TMPDIR/"48MPFixQ"/system/curtana 992 | cp -rf $TMPDIR/"48MPFixQ" $MODPATH 993 | MMPR -vc "$MODID" "181.GlossyIntelligentCock" "180" "Noid" "48MPFix for ANXCamera Magisk Module" 994 | fi 995 | SET_PERM_RM 996 | UIP "$MSGDI" 997 | } 998 | 999 | } # 1000 | 1001 | { #Presets 1002 | 1003 | BSG_PRESETS() { 1004 | GCN="BSG" 1005 | GCFN="GoogleCameraBSG" 1006 | Support="$BSGLUPD" 1007 | MSGUC="Install GCam by BSG?" 1008 | MSGDELIMITER 1009 | UCUP="$VBSGPIE" 1010 | UCDOWN="No $MSGNIS" 1011 | FOLDERCAM="PIE" 1012 | VGCN="$VBSGPIE" 1013 | GCNP="$FOLDERCAM/$GCFN" 1014 | UCONE="Google_Camera_Universal_Method" 1015 | UCS 1016 | MSGDELIMITER 1017 | UCUP="$VBSGOTHERPIE" 1018 | UCDOWN="No $MSGNIS" 1019 | FOLDERCAM="OTHERPIE" 1020 | VGCN="$VBSGOTHERPIE" 1021 | GCNP="$FOLDERCAM/$GCFN" 1022 | UCONE="Google_Camera_Universal_Method" 1023 | UCS 1024 | MSGDELIMITER 1025 | UCUP="$VBSGTEN" 1026 | UCDOWN="No $MSGNIS" 1027 | FOLDERCAM="TEN" 1028 | VGCN="$VBSGTEN" 1029 | GCNP="$FOLDERCAM/$GCFN" 1030 | UCONE="Google_Camera_Universal_Method" 1031 | UCS 1032 | MSGDELIMITER 1033 | UCUP="$VBSGOTHERTEN" 1034 | UCDOWN="No $MSGNUS" 1035 | FOLDERCAM="OTHERTEN" 1036 | VGCN="$VBSGOTHERTEN" 1037 | GCNP="$FOLDERCAM/$GCFN" 1038 | UCONE="Google_Camera_Universal_Method" 1039 | UCS 1040 | MSGDELIMITER 1041 | UCUP="$VBSGELEVEN" 1042 | UCDOWN="No $MSGNUS" 1043 | FOLDERCAM="ELEVEN" 1044 | VGCN="$VBSGELEVEN" 1045 | GCNP="$FOLDERCAM/$GCFN" 1046 | UCONE="Google_Camera_Universal_Method" 1047 | UCS 1048 | } 1049 | 1050 | PARROT_PRESETS() { 1051 | GCN="Parrot043" 1052 | GCFN="GoogleCameraParrot043" 1053 | Support="$PARROT043LUPD" 1054 | MSGUC="Install GCam by Parrot043?" 1055 | MSGDELIMITER 1056 | UCUP="$VParrot043PIE" 1057 | UCDOWN="No $MSGNIS" 1058 | FOLDERCAM="PIE" 1059 | VGCN="$VParrot043PIE" 1060 | GCNP="$FOLDERCAM/$GCFN" 1061 | UCONE="Google_Camera_Universal_Method" 1062 | UCS 1063 | MSGDELIMITER 1064 | UCUP="$VParrot043OTHERPIE" 1065 | UCDOWN="No $MSGNIS" 1066 | FOLDERCAM="OTHERPIE" 1067 | VGCN="$VParrot043OTHERPIE" 1068 | GCNP="$FOLDERCAM/$GCFN" 1069 | UCONE="Google_Camera_Universal_Method" 1070 | UCS 1071 | MSGDELIMITER 1072 | UCUP="$VParrot043TEN" 1073 | UCDOWN="No $MSGNIS" 1074 | FOLDERCAM="TEN" 1075 | VGCN="$VParrot043TEN" 1076 | GCNP="$FOLDERCAM/$GCFN" 1077 | UCONE="Google_Camera_Universal_Method" 1078 | UCS 1079 | MSGDELIMITER 1080 | UCUP="$VParrot043OTHERTEN" 1081 | UCDOWN="No $MSGNUS" 1082 | FOLDERCAM="OTHERTEN" 1083 | VGCN="$VParrot043OTHERTEN" 1084 | GCNP="$FOLDERCAM/$GCFN" 1085 | UCONE="Google_Camera_Universal_Method" 1086 | UCS 1087 | MSGDELIMITER 1088 | UCUP="$VParrot043ELEVEN" 1089 | UCDOWN="No $MSGNUS" 1090 | FOLDERCAM="ELEVEN" 1091 | VGCN="$VParrot043ELEVEN" 1092 | GCNP="$FOLDERCAM/$GCFN" 1093 | UCONE="Google_Camera_Universal_Method" 1094 | UCS 1095 | } 1096 | 1097 | SAN1TY_PRESETS() { 1098 | GCN="San1ty" 1099 | GCFN="GoogleCameraSan1ty" 1100 | Support="$SAN1TYLUPD" 1101 | MSGUC="Install GCam by San1ty?" 1102 | MSGDELIMITER 1103 | UCUP="$VSan1tyPIE" 1104 | UCDOWN="No $MSGNIS" 1105 | FOLDERCAM="PIE" 1106 | VGCN="$VSan1tyPIE" 1107 | GCNP="$FOLDERCAM/$GCFN" 1108 | UCONE="Google_Camera_Universal_Method" 1109 | UCS 1110 | MSGDELIMITER 1111 | UCUP="$VSan1tyTEN" 1112 | UCDOWN="No $MSGNUS" 1113 | FOLDERCAM="TEN" 1114 | VGCN="$VSan1tyTEN" 1115 | GCNP="$FOLDERCAM/$GCFN" 1116 | UCONE="Google_Camera_Universal_Method" 1117 | UCS 1118 | } 1119 | 1120 | TIGR_PRESETS() { 1121 | GCN="Tigr" 1122 | GCFN="GoogleCameraTigr" 1123 | Support="$TIGRLUPD" 1124 | MSGUC="Install GCam by Tigr?" 1125 | MSGDELIMITER 1126 | UCUP="$VTigrNOSDM845" 1127 | UCDOWN="No $MSGNIS" 1128 | FOLDERCAM="PIE" 1129 | VGCN="$VTigrNOSDM845" 1130 | GCNP="$FOLDERCAM/$GCFN" 1131 | UCONE="Google_Camera_Universal_Method" 1132 | UCS 1133 | MSGDELIMITER 1134 | UCUP="$VTigrOTHERPIE" 1135 | UCDOWN="No $MSGNIS" 1136 | FOLDERCAM="OTHERPIE" 1137 | VGCN="$VTigrOTHERPIE" 1138 | GCNP="$FOLDERCAM/$GCFN" 1139 | UCONE="Google_Camera_Universal_Method" 1140 | UCS 1141 | MSGDELIMITER 1142 | UCUP="$VTigrSDM845" 1143 | UCDOWN="No $MSGNIS" 1144 | FOLDERCAM="SDM845" 1145 | VGCN="$VTigrSDM845" 1146 | GCNP="$FOLDERCAM/$GCFN" 1147 | UCONE="Google_Camera_Universal_Method" 1148 | UCS 1149 | if $ENDMODE; then 1150 | MSGNUS="(/)" 1151 | else 1152 | if [ $MAGISK != true ]; then 1153 | MSGNUS="$MSGEND" 1154 | else 1155 | MSGNUS="(/)" 1156 | fi 1157 | fi 1158 | MSGDELIMITER 1159 | UCUP="$VTigrTEN" 1160 | UCDOWN="No $MSGNUS" 1161 | FOLDERCAM="TEN" 1162 | VGCN="$VTigrTEN" 1163 | GCNP="$FOLDERCAM/$GCFN" 1164 | UCONE="Google_Camera_Universal_Method" 1165 | UCS 1166 | } 1167 | 1168 | GCAM_PRESETS() { 1169 | GCAltName="GCamOne" 1170 | Google_Camera_Universal_Alt_Method_Install 1171 | GCAltName="GCamTwo" 1172 | Google_Camera_Universal_Alt_Method_Install 1173 | if $NEWDESIGN; then 1174 | MSGDELIMITER; UIP "BSG GCam:" "$VBSGPIE" "$VBSGOTHERPIE" "$VBSGTEN" "$VBSGOTHERTEN" "$VBSGELEVEN" "$MSGVU Yes $MSGEFTC" "$MSGVD No $MSGNUS" 1175 | if $KEYFUNCTION; then 1176 | BSG_PRESETS 1177 | fi 1178 | MSGDELIMITER; UIP "Parrot043 GCam:" "$VParrot043PIE" "$VParrot043OTHERPIE" "$VParrot043TEN" "$VParrot043OTHERTEN" "$MSGVU Yes $MSGEFTC" "$MSGVD No $MSGNUS" 1179 | if $KEYFUNCTION; then 1180 | PARROT_PRESETS 1181 | fi 1182 | MSGDELIMITER; UIP "San1ty GCam:" "$VSan1tyPIE" "$VSan1tyTEN" "$MSGVU Yes $MSGEFTC" "$MSGVD No $MSGNUS" 1183 | if $KEYFUNCTION; then 1184 | SAN1TY_PRESETS 1185 | fi 1186 | if $ENDMODE; then 1187 | MSGNUS="(/)" 1188 | else 1189 | if [ $MAGISK != true ]; then 1190 | MSGNUS="$MSGEND" 1191 | else 1192 | MSGNUS="(/)" 1193 | fi 1194 | fi 1195 | MSGDELIMITER; UIP "Tigr GCam:" "$VTigrNOSDM845" "$VTigrSDM845" "$VTigrTEN" "$MSGVU Yes $MSGEFTC" "$MSGVD No $MSGNUS" 1196 | if $KEYFUNCTION; then 1197 | TIGR_PRESETS 1198 | fi 1199 | elif $OLDDESIGN; then 1200 | BSG_PRESETS 1201 | PARROT_PRESETS 1202 | SAN1TY_PRESETS 1203 | TIGR_PRESETS 1204 | fi 1205 | } 1206 | 1207 | ANXCAM_PRESETS() { 1208 | IANXCam 1209 | if $ENDMODE; then 1210 | MSGNUS="(/)" 1211 | else 1212 | MSGNUS="$MSGEND" 1213 | fi 1214 | IANXAddons 1215 | } 1216 | 1217 | } # 1218 | 1219 | BOOT_DETECTED 1220 | SYMBOLDESIGN 1221 | ALLPATCHMSG 1222 | PARTITION_AND_MOUNTS 1223 | IMPORTANT_VARIABLES 1224 | MIUI_CHECKER #& 1225 | BB_CHECKER 1226 | ARCH_CHECKER 1227 | PATCHMODE 1228 | AIOCPFMD 1229 | CHECK_AVERSION 1230 | KEYCHECK 1231 | MAGISK_CHECKER 1232 | UNIVERSALREMOVECAM 1233 | GCAM_PRESETS 1234 | ANXCAM_PRESETS 1235 | END -------------------------------------------------------------------------------- /AIOIARPFMD/META-INF/com/google/android/update-binary: -------------------------------------------------------------------------------- 1 | #!/sbin/sh 2 | 3 | VAIOIARPFMD="16.05.21 (26)" 4 | 5 | { #TMPDIR & Magisk Default Var 6 | IPDLTMP="/data/local/tmp" 7 | TMPDIR="$IPDLTMP/AIOIARPFMD" 8 | ALTTMPDIR="/dev/AIOIARPFMD" 9 | MAGISKTMP="/sbin/.magisk" 10 | NVBASE="/data/adb" 11 | SERVICED="$NVBASE/service.d" 12 | POSTFSDATAD="$NVBASE/post-fs-data.d" 13 | } # 14 | 15 | { #Var true/false By Fefault 16 | DELETEWITHOUTSELECTION=false 17 | HFMODE=false 18 | FINDPATCHMODE=false 19 | } # 20 | 21 | { #BB & Other Useful Links In This Patch (BB/ToyBox/ToolBox In Rom/TWRP May Not Do Some Things) 22 | OUTFD="$2" 23 | ZIPFILE="$3" 24 | ADDONS="$ALTTMPDIR/Addons" 25 | AADDONS="$TMPDIR/AltAddons" 26 | BB="$ALTTMPDIR/BB" 27 | EVENTS="$BB/events" 28 | UNTARXZ="$BB/tar" 29 | UNZIP="$BB/unzip" 30 | TIMEOUT="$BB/timeout" 31 | } # 32 | 33 | { #Helper Functions 34 | 35 | BOOT_DETECTED() { 36 | # Detect whether in boot mode 37 | [ -z $BOOTMODE ] && ps | grep zygote | grep -qv grep && BOOTMODE=true 38 | [ -z $BOOTMODE ] && ps -A 2>/dev/null | grep zygote | grep -qv grep && BOOTMODE=true 39 | [ -z $BOOTMODE ] && BOOTMODE=false 40 | } 41 | 42 | SYMBOLDESIGN() { 43 | MSGSD="•" 44 | if $BOOTMODE; then 45 | MSGVU="▲ ►" 46 | MSGVD="▼ ►" 47 | elif [ $BOOTMODE != true ]; then 48 | MSGVU="+ >" 49 | MSGVD="- >" 50 | fi 51 | } 52 | 53 | ALLPATCHMSG() { 54 | MSGDELIMITER="••••••••••••••••••••••••••••••••••••••••" 55 | MSGDI="Install Done" 56 | MSGUD="Uninstall Done" 57 | MSGDRM="Remove Done" 58 | MSGDRP="Replace Done" 59 | MSGDRS="Restore Done" 60 | MSGDD="Disable Done" 61 | MSGED="Enable Done" 62 | MSGFI="Found Install" 63 | MSGIIP="(I)" 64 | MSGEFTC="(\)" 65 | MSGNIS="(|)" 66 | MSGNUS="(/)" 67 | MSGEND="(//)" 68 | MSGRI="(R)" 69 | WDI="Community" 70 | FMR="For More Rom" 71 | FAOOR="For AOSP/LOS & Others Rom" 72 | MSGPMODE="$MSGSD Opens Some Test Items/Patches - Set: U(ser) Or D(ebug)" 73 | MSGKMETHOD="$MSGSD Force Switching Between Old And New \"KeyCheck\" Method - Set: N(ew), O(ld) Or A(lt)" 74 | MSGTKEY="$MSGSD A Second Check Is Turned On For KMETHOD O(ld) - Set: false Or true" 75 | MSGPDESIGN="$MSGSD Changes The \"Design\" Of The Patch - Set: N(ew) Or O(ld)" 76 | MSGLEDCOLOR="$MSGSD This Is The Color Of Your Diode - Set: R(ed), G(reen), B(lue) Or W(hite)" 77 | MSGHFMODE="$MSGSD Adds Tactile Feedback To Patch Selections - Set: Values From 1 To 255 For Weak/Strong Vibration" 78 | MSGHFSMODE="$MSGSD Sets Values From HFMODE Not To duration, But To enable And/Or activate - Set: false Or true" 79 | MSGMCMODE="$MSGSD Enables Or Disables The Choice In TWRP How To Install Via Magisk Or Not With DEBUGMODE - Set: false Or true" 80 | MSGENDMODE="$MSGSD Allows You To Return To The Beginning Of The Patch Without Reselecting If You Missed Something - Set: false Or true" 81 | MSGBIDMODE="$MSGSD Writes The ID Of The Buttons For Alt KMETHOD O(ld) Without A Bind" 82 | if $MAGISK; then IAMM="(M)"; else IAMM=; fi 83 | } 84 | 85 | IS_MOUNTED() { 86 | grep -q " `readlink -f $1` " /proc/mounts 2>/dev/null 87 | return $? 88 | } 89 | 90 | PARTITION_AND_MOUNTS() { 91 | if [ $BOOTMODE != true ]; then 92 | if [ -n "$(cat /proc/cmdline | grep slot_suffix)" ]; then 93 | DABP=true 94 | SYSTEM_MOUNT="/system" 95 | SYSTEM="$SYSTEM_MOUNT/system" 96 | VENDOR="/vendor/vendor" 97 | elif [ -n "$(cat /etc/fstab | grep /system_root)" ]; then 98 | DABP=false 99 | SYSTEM_MOUNT="/system_root" 100 | SYSTEM="$SYSTEM_MOUNT/system" 101 | VENDOR="/vendor" 102 | else 103 | DABP=false 104 | SYSTEM_MOUNT="/system" 105 | SYSTEM="$SYSTEM_MOUNT" 106 | VENDOR="/vendor" 107 | fi 108 | Mounts="" 109 | for p in "$SYSTEM_MOUNT" "$VENDOR"; do 110 | if [ -d "$p" ] && grep -q "$p" "/etc/fstab"; then 111 | Mounts="$Mounts $p" 112 | fi 113 | done 114 | for m in $Mounts; do 115 | if IS_MOUNTED "$m"; then 116 | umount "$m" 117 | fi 118 | mount "$m" 119 | done 120 | grep -q "$SYSTEM_MOUNT.*\sro[\s,]" /proc/mounts && mount -o remount,rw $SYSTEM_MOUNT # remount whatever $SYSTEM_MOUNT is, sometimes necessary if mounted read-only 121 | MSGDELIMITER && UIP "Mounting$Mounts" 122 | else 123 | MSGDELIMITER 124 | fi 125 | if [ -f /system/system/build.prop ]; then 126 | FTSYSTEM=true 127 | FTSYSTEMROOT=false 128 | SYSTEM="/system/system" 129 | elif [ -f /system_root/system/build.prop ]; then 130 | FTSYSTEM=true 131 | FTSYSTEMROOT=true 132 | SYSTEM="/system_root/system" 133 | elif [ -f /system/build.prop ]; then 134 | FTSYSTEM=false 135 | FTSYSTEMROOT=false 136 | SYSTEM="/system" 137 | fi 138 | if [ $BOOTMODE != true ] && [ -n "$(cat /etc/fstab | grep /vendor)" ]; then 139 | FVENDOR=true 140 | elif [ $BOOTMODE != true ] && [ -d $SYSTEM/vendor ]; then 141 | FVENDOR=false 142 | VENDOR="$SYSTEM/vendor" 143 | elif $BOOTMODE; then 144 | VENDOR="/vendor" 145 | fi 146 | } 147 | 148 | IMPORTANT_VARIABLES() { 149 | MODPATH="$NVBASE/modules"; MODPATHUPD="$NVBASE/modules_update" 150 | IPSAX="$SYSTEM/apex"; MIPSAX="/system/apex" 151 | IPSB="$SYSTEM/bin"; MIPSB="/system/bin" 152 | IPSXB="$SYSTEM/xbin"; MIPSXB="/system/xbin" 153 | IPSA="$SYSTEM/app"; MIPSA="/system/app" 154 | IPSPA="$SYSTEM/priv-app"; MIPSPA="/system/priv-app" 155 | IPSE="$SYSTEM/etc"; MIPSE="/system/etc" 156 | IPSEID="$IPSE/init.d"; MIPSEID="$MIPSE/init.d" 157 | IPSES="$IPSE/sysconfig"; MIPSES="$MIPSE/sysconfig" 158 | IPSEP="$IPSE/permissions"; MIPSEP="$MIPSE/permissions" 159 | IPSEDP="$IPSE/default-permissions"; MIPSEDP="$MIPSE/default-permissions" 160 | IPSL="$SYSTEM/lib"; MIPSL="/system/lib" 161 | IPSL64="$SYSTEM/lib64"; MIPSL64="/system/lib64" 162 | IPSAD="$SYSTEM/addon.d"; MIPSAD="/system/addon.d" 163 | IPSBP="$SYSTEM/build.prop"; MIPSBP="/system/build.prop" 164 | IPSSP="$SYSTEM/product"; MIPSSP="/system/product" 165 | IPSSPBP="$IPSSP/build.prop"; MIPSSPBP="$MIPSSP/build.prop" 166 | IPSDP="$SYSTEM/default.prop"; MIPSDP="/system/default.prop" 167 | IPSSPA="$IPSSP/app"; MIPSSPA="$MIPSSP/app" 168 | IPSSPPA="$IPSSP/priv-app"; MIPSSPPA="$MIPSSP/priv-app" 169 | IPSSPE="$IPSSP/etc"; MIPSSPE="$MIPSSP/etc" 170 | IPSSPER="$IPSSPE/res"; MIPSSPER="$MIPSSPE/res" 171 | IPSSPERVC="$IPSSPER/values/charger"; MIPSSPERVC="$MIPSSPER/values/charger" 172 | IPSSPERIC="$IPSSPER/images/charger"; MIPSSPERIC="$MIPSSPER/images/charger" 173 | IPSSPEP="$IPSSPE/permissions"; MIPSSPEP="$MIPSSPE/permissions" 174 | IPSSS="$SYSTEM/system_ext"; MIPSSS="/system/system_ext" 175 | IPSSSA="$IPSSS/app"; MIPSSSA="$MIPSSS/app" 176 | IPSSSPA="$IPSSS/priv-app"; MIPSSSPA="$MIPSSS/priv-app" 177 | IPSFW="$SYSTEM/framework"; MIPSFW="/system/framework" 178 | IPSPO="$IPSSP/overlay"; MIPSPO="$MIPSSP/overlay" 179 | IPSO="$SYSTEM/overlay"; MIPSO="/system/overlay" 180 | IPSUKL="$SYSTEM/usr/keylayout"; MIPSUKL="/system/usr/keylayout" 181 | IPSPM="$IPSSP/media"; MIPSPM="$MIPSSP/media" 182 | IPSPMAU="$IPSPM/audio/ui"; MIPSPMAU="$MIPSPM/audio/ui" 183 | IPSM="$SYSTEM/media"; MIPSM="/system/media" 184 | IPSMAU="$IPSM/audio/ui"; MIPSMAU="$MIPSM/audio/ui" 185 | IPSF="$SYSTEM/fonts"; MIPSF="/system/fonts" 186 | IPSEDF="$IPSE/device_features"; MIPSEDF="/system/device_features" 187 | IPVBP="$VENDOR/build.prop"; MIPSVBP="/system/vendor/build.prop" 188 | IPVE="$VENDOR/etc"; MIPSVE="/system/vendor/etc" 189 | IPVL="$VENDOR/lib"; MIPSVL="/system/vendor/lib" 190 | IPVL64="$VENDOR/lib64"; MIPSVL64="/system/vendor/lib64" 191 | IPVLS="$IPVL/soundfx"; MIPSVLS="$MIPSVL/soundfx" 192 | IPVLS64="$IPVL64/soundfx"; MIPSVLS64="$MIPSVL64/soundfx" 193 | IPVO="$VENDOR/overlay"; MIPSVO="/system/vendor/overlay" 194 | IPVUKL="$VENDOR/usr/keylayout"; MIPSVUKL="/vendor/usr/keylayout" 195 | IPVF="$VENDOR/firmware"; MIPVF="/system/vendor/firmware" 196 | IPVEDF="$IPVE/device_features"; MIPSVEDF="/system/vendor/device_features" 197 | IPDA="/data/app"; IPDD="/data/data"; IPDS="/data/system"; IPDSU="$IPDS/users"; IPDSUDE="/data/user_de"; IPDSNS="$IPDS/netstats"; IPDBBN="/dev/block/by-name"; IPDM="/data/misc"; IPDMDE="/data/misc_de"; IPDRESC="/data/resource-cache"; STORAGE="/sdcard"; ASTORAGE="/data/media" 198 | ACONFS="$(find $SYSTEM $VENDOR -type f -name "audio_configs*.xml")" 199 | APINF="$(find $SYSTEM $VENDOR -type f -name "audio_platform_info*.xml")" 200 | CFGS="$(find $SYSTEM $VENDOR -type f -name "*audio_effects*.conf" -o -name "*audio_effects*.xml")" 201 | MPATHS="$(find $SYSTEM $VENDOR -type f -name "mixer_paths*.xml")" 202 | STPI="$(find $SYSTEM $VENDOR -type f -name "sound_trigger_platform_info*.xml")" 203 | APCFGS="$(find $SYSTEM $VENDOR -type f -name "*audio_io_policy*.conf" -o -name "*audio_output_policy*.conf")" 204 | MCGAX="$(find $SYSTEM $VENDOR -type f -name "*media_codecs_google_c2_audio*.xml" -o -name "*media_codecs_google_audio*.xml")" 205 | DEVFEA=$IPSEDF/*.xml; DEVFEAA=$IPVEDF/*.xml 206 | SPG="settings put global"; SPS="settings put secure" 207 | if [ -f $STORAGE/PATCHMODE* ]; then PATCHMODEFILE="$(find $STORAGE/PATCHMODE*)"; FINDPATCHMODE=true; else for f in $(ls $STORAGE); do if [ -f $STORAGE/$f/PATCHMODE* ]; then PATCHMODEFILE="$(find $STORAGE/$f/PATCHMODE*)"; FINDPATCHMODE=true; break; else FINDPATCHMODE=false; fi; done; fi; if [ $FINDPATCHMODE != true ]; then touch $STORAGE/PATCHMODE.sh; PATCHMODEFILE="$STORAGE/PATCHMODE.sh"; fi 208 | PMODE="$(GET_PMODE_PROP "$PATCHMODEFILE" "PMODE")"; HFDURATION="$(GET_PMODE_PROP "$PATCHMODEFILE" "HFMODE")"; HFSWAPMODE="$(GET_PMODE_PROP "$PATCHMODEFILE" "HFSMODE")"; PDESIGN="$(GET_PMODE_PROP "$PATCHMODEFILE" "PDESIGN")"; LEDCOLOR="$(GET_PMODE_PROP "$PATCHMODEFILE" "LEDCOLOR")"; KMETHOD="$(GET_PMODE_PROP "$PATCHMODEFILE" "KMETHOD")"; TKEY="$(GET_PMODE_PROP "$PATCHMODEFILE" "TKEY")"; MCMODE="$(GET_PMODE_PROP "$PATCHMODEFILE" "MCMODE")"; ENDMODE="$(GET_PMODE_PROP "$PATCHMODEFILE" "ENDMODE")"; BIDMODE="$(GET_PMODE_PROP "$PATCHMODEFILE" "BIDMODE")"; BUTTONIDUP="$(GET_PMODE_PROP "$PATCHMODEFILE" "ButtonIDUP")"; BUTTONIDDOWN="$(GET_PMODE_PROP "$PATCHMODEFILE" "ButtonIDDOWN")" 209 | PROPFILES="$IPSDP $IPSBP $IPVBP /data/local.prop /default.prop /build.prop"; PROPFILESALT="$IPSSPBP $IPSBP $IPVBP" 210 | DMYHMS="$( date +"%d-%m-%Y-%H:%M:%S" )" 211 | if [ -d $IPSPO ]; then IPPO="$IPSPO"; MIPPO="$MIPSPO"; elif [ -d $IPSO ]; then IPPO="$IPSO"; MIPPO="$MIPSO"; elif [ -d $IPVO ]; then IPPO="$IPVO"; MIPPO="$MIPSVO"; fi 212 | if [ -d $IPSPMAU ]; then IPPMU="$IPSPMAU"; MIPPMU="$MIPSPMAU"; elif [ -d $IPSMAU ]; then IPPMU="$IPSMAU"; MIPPMU="$MIPSMAU"; fi 213 | if [ -d $IPSPM ]; then IPPM="$IPSPM"; MIPPM="$MIPSPM"; elif [ -d $IPSM ]; then IPPM="$IPSM"; MIPPM="$MIPSM"; fi 214 | for f in Fox TWRP SHRP; do if [ -d $STORAGE/$f ]; then PLOGS="$STORAGE/$f/AIOLogs"; FPLOGS=true; break; else FPLOGS=false; fi; done; if [ $FPLOGS != true ]; then PLOGS="$STORAGE/AIOLogs"; fi 215 | if [ ! -d $IPSXB ] && [ $BOOTMODE != true ]; then mkdir -p $IPSXB; IPPSXB=$IPSXB; IPPSXBM=$MIPSXB; elif [ ! -d $IPSXB ] && $BOOTMODE; then IPPSXB=$IPSB; IPPSXBM=$MIPSB; else IPPSXB=$IPSXB; IPPSXBM=$MIPSXB; fi 216 | } 217 | 218 | MIUI_CHECKER() { 219 | if [ -d /data/miui ] || grep "ro.miui.build.region" $IPSBP || grep "ro.miui.region" $IPSBP || grep "ro.miui.ui.version*" $IPSBP || grep "ro.miui.ui.version.name*" $IPSBP; then MIUI=true; else MIUI=false; fi 220 | } 221 | 222 | BB_CHECKER() { 223 | if [ -f $IPSB/busybox ]; then 224 | BUSYBOX=/bin; FBUSYBOX=true 225 | elif [ -f $IPSXB/busybox ]; then 226 | BUSYBOX=/xbin; FBUSYBOX=true 227 | elif [ -d $MODPATH/busybox-brutal ] || [ -d $MODPATHUPD/busybox-brutal ] || [ -d $MODPATH/busybox-ndk ] || [ -d $MODPATHUPD/busybox-ndk ]; then 228 | FBUSYBOX=true 229 | else 230 | FBUSYBOX=false 231 | fi 232 | } 233 | 234 | ARCH_CHECKER() { 235 | DARCH="$(GET_PROP "ro.product.cpu.abi")" 236 | case "$DARCH" in 237 | *x86_64*) arch="x86_64"; MSGDELIMITER; UIP "Warning, Arch $arch Not Supported!"; libarch="lib64";; 238 | *x86*) arch="x86"; MSGDELIMITER; UIP "Warning, Arch $arch Not Supported!"; libarch="lib";; 239 | *arm64*) arch="arm64"; libarch="lib64";; 240 | *armeabi*) arch="arm"; libarch="lib";; 241 | *) arch="unknown"; MSGDELIMITER; UIP "Warning, $arch Not Supported/Found!";; 242 | esac 243 | AAPT="$AADDONS/aapt-$arch" 244 | XMLSTARLET="$AADDONS/xmlstarlet-$arch" 245 | SQLITE3="$TMPDIR/SQLite3/sqlite3-$arch" 246 | FKEYCHECK="$ADDONS/keycheck-$arch" 247 | ZIPPACKER="$AADDONS/zip-$arch" 248 | # SED="$AADDONS/sed-$arch" 249 | } 250 | 251 | PATCHMODE() { 252 | case "$PMODE" in 253 | D) DEBUGMODE=true; TESTMODE=false; MSGPMODE=", Debug Mode";; 254 | T) TESTMODE=true; DEBUGMODE=true; MSGPMODE=", Test Mode";; 255 | U) MSGPMODE=", User Mode"; DEBUGMODE=false; TESTMODE=false;; 256 | *) echo -e "$MSGPMODE\nPMODE=U" >> $PATCHMODEFILE; MSGPMODE=", User Mode"; DEBUGMODE=false; TESTMODE=false;; 257 | esac 258 | case "$MCMODE" in 259 | "true") MCMODE=true;; 260 | "false") MCMODE=false;; 261 | *) echo -e "$MSGMCMODE\nMCMODE=true" >> $PATCHMODEFILE; MCMODE=true;; 262 | esac 263 | if find /sys/class -name leds >/dev/null; then 264 | LEDPATH="$(find /sys/class -name leds)" 265 | case "$LEDCOLOR" in 266 | R) LEDCOLOR=red;; 267 | G) LEDCOLOR=green;; 268 | B) LEDCOLOR=blue;; 269 | W) LEDCOLOR=white;; 270 | "false") BLINKMODE=false;; 271 | *) BLINKMODE=false; echo -e "$MSGLEDCOLOR\nLEDCOLOR=false" >> $PATCHMODEFILE;; 272 | esac 273 | if [ -f $LEDPATH/$LEDCOLOR/blink ]; then echo -n 1 > $LEDPATH/$LEDCOLOR/blink; BLINKMODE=true; fi 274 | fi 275 | case "$HFDURATION" in 276 | "false") HFMODE=false;; 277 | [0-255]*) HFMODE=true; HFPATH="$(find /sys/class -name vibrator)"; if [ -f $HFPATH/duration ]; then echo -n $HFDURATION > $HFPATH/duration; fi; if [ -f $HFPATH/activate ]; then HFFPATH=$HFPATH/activate; elif [ -f $HFPATH/enable ]; then HFFPATH=$HFPATH/enable; fi;; 278 | *) HFMODE=false; echo -e "$MSGHFMODE\nHFMODE=false" >> $PATCHMODEFILE;; 279 | esac 280 | case "$HFSWAPMODE" in 281 | "true") HFSWAPMODE=true;; 282 | "false") HFSWAPMODE=false;; 283 | *) echo -e "$MSGHFSMODE\nHFSMODE=false" >> $PATCHMODEFILE; HFSWAPMODE=false;; 284 | esac 285 | case "$PDESIGN" in 286 | N) NEWDESIGN=true; OLDDESIGN=false;; 287 | O) OLDDESIGN=true; NEWDESIGN=false;; 288 | *) NEWDESIGN=true; echo -e "$MSGPDESIGN\nPDESIGN=N" >> $PATCHMODEFILE;; 289 | esac 290 | case "$KMETHOD" in 291 | N) AKOLD=false; KNEW=true; KOLD=false;; 292 | O) AKOLD=false; KNEW=false; KOLD=true;; 293 | A) AKOLD=true; KNEW=false; KOLD=false;; 294 | "false") AKOLD=false; KOLD=false; KNEW=false;; 295 | *) echo -e "$MSGKMETHOD\nKMETHOD=false" >> $PATCHMODEFILE; AKOLD=false; KOLD=false; KNEW=false;; 296 | esac 297 | case "$TKEY" in 298 | "true") TKEYCHECK=true;; 299 | "false") TKEYCHECK=false;; 300 | *) TKEYCHECK=false; echo -e "$MSGTKEY\nTKEY=false" >> $PATCHMODEFILE;; 301 | esac 302 | case "$ENDMODE" in 303 | "true") ENDMODE=true;; 304 | "false") ENDMODE=false;; 305 | *) ENDMODE=true; echo -e "$MSGENDMODE\nENDMODE=true" >> $PATCHMODEFILE;; 306 | esac 307 | case "$BIDMODE" in 308 | "true") BIDMODE=true;; 309 | "false") BIDMODE=false;; 310 | *) BIDMODE=true; echo -e "$MSGBIDMODE\nBIDMODE=true\nButtonIDUP=#UP\nButtonIDDOWN=#DOWN" >> $PATCHMODEFILE;; 311 | esac 312 | } 313 | 314 | AIOIARPFMD() { 315 | if $DEBUGMODE || $TESTMODE; then mkdir -p $PLOGS/TWRP; mkdir -p $PLOGS/MM; fi; [ -d $TMPDIR ] && rm -rf $TMPDIR; mkdir -p $TMPDIR; [ -d $ALTTMPDIR ] && rm -rf $ALTTMPDIR; mkdir -p $ALTTMPDIR 316 | UIP "Copy AIOIARPFMD To TMPDIR$MSGPMODE" 317 | unzip -oq $ZIPFILE BB.zip Addons.tar.xz -d $ALTTMPDIR 2>/dev/null 318 | unzip -oq $BB.zip -d $ALTTMPDIR 2>/dev/null; rm -f $BB.zip 319 | chmod -R 777 $TMPDIR; chmod -R 777 $ALTTMPDIR 320 | $BB/busybox-$arch --install -s $BB 321 | $UNTARXZ -xf $ADDONS.tar.xz -C $ALTTMPDIR; rm -f $ADDONS.tar.xz 322 | UPN="AltAddons"; UZTPN & 323 | } 324 | 325 | CHECK_AVERSION() { 326 | ASDK="$(GREP_PROP "ro.build.version.sdk")" 327 | AVERSION="$(GREP_PROP "ro.build.version.release")" 328 | # Major supported versions default=false 329 | AKITKAT=false; ALOLLIPOP=false; AMARSHMALLOW=false; ANOUGAT=false; AOREO=false; APIE=false; ATEN=false; AELEVEN=false; ATWELVE=false 330 | # Check major supported versions 331 | if [ "$ASDK" = "19" ] && [ "$AVERSION" = "4.4.4" ]; then 332 | AKITKAT=true 333 | elif [ "$ASDK" = "22" ] && [ "$AVERSION" = "5.1.1" ]; then 334 | ALOLLIPOP=true 335 | elif [ "$ASDK" = "23" ] && [ "$AVERSION" = "6.0.1" ]; then 336 | AMARSHMALLOW=true 337 | elif [ "$ASDK" = "25" ] && [ "$AVERSION" = "7.1.2" ]; then 338 | ANOUGAT=true 339 | elif [ "$ASDK" = "27" ] && [ "$AVERSION" = "8.1" ] || [ "$AVERSION" = "8.1.0" ]; then 340 | AOREO=true 341 | elif [ "$ASDK" = "28" ] && [ "$AVERSION" = "9" ] || [ "$AVERSION" = "9.0" ]; then 342 | APIE=true 343 | elif [ "$ASDK" = "29" ] && [ "$AVERSION" = "10" ] || [ "$AVERSION" = "10.0" ]; then 344 | ATEN=true 345 | elif [ "$ASDK" = "30" ] && [ "$AVERSION" = "11" ] || [ "$AVERSION" = "11.0" ]; then 346 | AELEVEN=true 347 | elif [ "$ASDK" = "31" ] && [ "$AVERSION" = "12" ] || [ "$AVERSION" = "12.0" ]; then 348 | ATWELVE=true 349 | fi 350 | case $ASDK in 351 | "10");; "15");; "16");; "17");; "18");; "19");; "21");; "22");; "23");; "24");; "25");; "26");; "27");; "28");; "29");; "30");; "31");; *) MSGDELIMITER; UIP "Warning, SDK Not Supported/Found!";; 352 | esac 353 | } 354 | 355 | MAGISK_CHECKER() { 356 | if [ -d /data/magisk ] && [ -f /data/magisk/util_functions.sh ]; then 357 | MAGISKFIRSTTIME=true 358 | FINDMAGISK=true 359 | MAGISK=true 360 | MAGISKVC="$(GET_FILE_PROP "/data/magisk/util_functions.sh" "MAGISK_VER_CODE")" 361 | elif [ -d $NVBASE/magisk ] && [ -f $NVBASE/magisk/util_functions.sh ]; then 362 | MAGISKFIRSTTIME=false 363 | FINDMAGISK=true 364 | MAGISK=true 365 | MAGISKVC="$(GET_FILE_PROP "$NVBASE/magisk/util_functions.sh" "MAGISK_VER_CODE")" 366 | else 367 | MAGISKFIRSTTIME=false 368 | FINDMAGISK=false 369 | MAGISK=false 370 | fi 371 | if $FINDMAGISK && [ $BOOTMODE != true ] && $DEBUGMODE && $MCMODE; then 372 | MSGDELIMITER 373 | if [ $MAGISKVC -ge 20000 ]; then 374 | UIP "Found Magisk, Install Everything $IAMM?" 375 | elif [ $MAGISKVC -lt 20400 ]; then 376 | UIP "Found Old Magisk, Please Install Magisk v18.0+!" "Found Magisk, Install Everything $IAMM?" 377 | fi 378 | UIP "$MSGVU Yes $MSGRI" "$MSGVD No $MSGNUS" 379 | if $KEYFUNCTION; then 380 | MAGISK=true 381 | else 382 | MAGISK=false 383 | fi 384 | fi 385 | if $MAGISK; then 386 | mkdir -p $MODPATH; mkdir -p $POSTFSDATAD; mkdir -p $SERVICED 387 | chmod 755 $MODPATH; chmod 755 $POSTFSDATAD; chmod 755 $SERVICED 388 | fi 389 | ALLPATCHMSG 390 | } 391 | 392 | PHONESCRIPT() { 393 | RTrash_System_App 394 | MSGDELIMITER && UIP "Extract System" 395 | $UNTARXZ -xf $TMPDIR/all.tar.xz -C $TMPDIR; rm -f $TMPDIR/all.tar.xz && $UNTARXZ -xf $TMPDIR/arm.tar.xz -C $TMPDIR; rm -f $TMPDIR/arm.tar.xz && $UNTARXZ -xf $TMPDIR/arm64.tar.xz -C $TMPDIR; rm -f $TMPDIR/arm64.tar.xz 396 | MiXplorerSilver 397 | GBoard 398 | if [ $ATEN != true ] && [ $AELEVEN != true ]; then 399 | UCSA "Install Lawnchair?" "$MSGEFTC" "$MSGNUS" "Lawnchair" 400 | fi 401 | } 402 | 403 | PHONE() { 404 | if find $STORAGE/Applications/*.apk >/dev/null; then 405 | MSGNUS="(/)" 406 | else 407 | if $ENDMODE; then 408 | MSGNUS="(/)" 409 | else 410 | MSGNUS="$MSGEND" 411 | fi 412 | fi 413 | UCSA "Phone" "$MSGEFTC" "$MSGNUS" "PHONESCRIPT" 414 | IApplications 415 | } 416 | 417 | HFBMODE() { 418 | if $HFMODE; then if $HFSWAPMODE; then echo -n $HFDURATION > $HFFPATH; else echo -n 1 > $HFFPATH; fi; fi 419 | } 420 | 421 | UNMOUNT() { 422 | if [ $BOOTMODE != true ]; then 423 | UIP "UnMounting$Mounts" 424 | for m in $Mounts; do 425 | case $m in 426 | $SYSTEM_MOUNT) 427 | if $DABP; then 428 | mount -o ro $SYSTEM_MOUNT 429 | else 430 | umount $SYSTEM_MOUNT 431 | fi;; 432 | *) umount "$m";; 433 | esac 434 | done 435 | fi 436 | } 437 | 438 | END() { 439 | MSGDELIMITER 440 | if $ENDMODE; then 441 | UIP "It's Time To Choose:" "$MSGVU To The Beginning $MSGEFTC" "$MSGVD Exit $MSGEND" 442 | if $KEYFUNCTION; then cd $TMPDIR; ls | grep -v AltAddons | xargs rm -rf; PHONE; END; else ENDMODE=false; END; fi 443 | else 444 | UNMOUNT 445 | if $DEBUGMODE; then 446 | UIP "Clear TMPDIR, Copy Logs & Exit" 447 | if [ $BOOTMODE != true ]; then mkdir -p $PLOGS/TWRP/$( date +"%Y-%m" ); cp -f /tmp/recovery.log $PLOGS/TWRP/$( date +"%Y-%m" )/AIORecovery-$( date +"%d-%H:%M:%S" ).log; fi 448 | if $BOOTMODE && $TESTMODE; then input tap 1040 140; fi 449 | mkdir -p $PLOGS/MM/$( date +"%Y-%m" ) 450 | find $STORAGE/Download/ -type f -name 'magisk_install_log*.log' -exec mv {} $PLOGS/MM/$( date +"%Y-%m" )/AIOMagisk-$( date +"%d-%H:%M:%S" ).log \; 451 | else 452 | UIP "Clear TMPDIR & Exit" 453 | fi 454 | if $BLINKMODE; then echo -n 0 > $LEDPATH/$LEDCOLOR/blink; fi 455 | rm -rf $TMPDIR && rm -rf $ALTTMPDIR && MSGDELIMITER && exit 0 456 | fi 457 | } 458 | 459 | ui_print() { 460 | $BOOTMODE && echo "$MSGSD $1" || echo -e "ui_print $MSGSD $1\nui_print" >> /proc/self/fd/$OUTFD 461 | } 462 | 463 | UIP() { 464 | for uip in "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9" "$10"; do 465 | if [ "$uip" ]; then 466 | ui_print "$uip" 467 | else 468 | break 469 | fi 470 | done 471 | } 472 | 473 | MSGDELIMITER() { 474 | $BOOTMODE && echo "$MSGDELIMITER" || echo -e "ui_print $MSGDELIMITER\nui_print" >> /proc/self/fd/$OUTFD 475 | } 476 | 477 | GREP_PROP() { 478 | local REGEX="s/^$1=//p" 479 | shift 480 | local FILES=$@ 481 | [ -z "$FILES" ] && FILES="$PROPFILESALT" 482 | sed -n "$REGEX" $FILES 2>/dev/null | head -n 1 483 | } 484 | 485 | UCS() { 486 | UIP "$MSGUC" "$MSGVU $UCUP" 487 | UIP "$MSGVD $UCDOWN" 488 | if $KEYFUNCTION; then 489 | $UCONE 490 | else 491 | $UCTWO 492 | fi 493 | } 494 | 495 | UCSA() { 496 | MSGDELIMITER 497 | UIP "$1" "$MSGVU Yes $2" "$MSGVD No $3" 498 | if $KEYFUNCTION; then 499 | $4 500 | else 501 | $5 502 | fi 503 | } 504 | 505 | GET_FILE_PROP() { 506 | grep -m1 "^$2=" "$1" | cut -d= -f2 507 | } 508 | 509 | GET_PMODE_PROP() { 510 | grep -m1 "^$2=" "$1" | cut -d= -f2 | cut -d ' ' -f1 511 | } 512 | 513 | GET_PROP() { 514 | #check known .prop files using GET_FILE_PROP 515 | for f in $PROPFILES; do 516 | if [ -e "$f" ]; then 517 | PROP="$(GET_FILE_PROP "$f" "$1")" 518 | if [ -n "$PROP" ]; then 519 | break #if an entry has been found, break out of the loop 520 | fi 521 | fi 522 | done 523 | #if prop is still empty; try to use recovery's built-in getprop method; otherwise output current result 524 | if [ -z "$PROP" ]; then 525 | getprop "$1" | cut -c1- 526 | else 527 | printf "$PROP" 528 | fi 529 | } 530 | 531 | MKTOUCHER() { 532 | mkdir -p ${1%/*} 2>/dev/null 533 | [ -z $2 ] && touch $1 || echo $2 > $1 534 | chmod 644 $1 535 | } 536 | 537 | REPLACER() { 538 | # Handle replace folders 539 | for TARGET in $REPLACE; do 540 | MKTOUCHER $MODPATH/$MODID$TARGET/.replace 541 | done 542 | } 543 | 544 | FINDER() { 545 | for TARGET in $FIND; do 546 | if [ -d $TARGET ]; then 547 | STANDARTFINDER=true 548 | fi 549 | done 550 | } 551 | 552 | SET_PERM() { 553 | chown $2:$3 $1 || return 1 554 | chmod $4 $1 || return 1 555 | CON=$5 556 | [ -z $CON ] && CON=u:object_r:system_file:s0 557 | chcon $CON $1 || return 1 558 | } 559 | 560 | SET_PERM_R() { 561 | find $1 -type d 2>/dev/null | while read dir; do 562 | SET_PERM $dir $2 $3 $4 $6 563 | done 564 | find $1 -type f -o -type l 2>/dev/null | while read file; do 565 | SET_PERM $file $2 $3 $5 $6 566 | done 567 | } 568 | 569 | SET_PERM_RM() { 570 | SET_PERM_R $MODPATH/$MODID 0 0 0755 0644 571 | } 572 | 573 | UZTPN() { 574 | $UNZIP -oq $ZIPFILE $UPN.tar.xz -d $TMPDIR 2>/dev/null 575 | $UNTARXZ -xf $TMPDIR/$UPN.tar.xz -C $TMPDIR; rm -f $TMPDIR/$UPN.tar.xz 576 | } 577 | 578 | MOVERPATH() { 579 | if [ $BOOTMODE != true ] && [ -d $MODPATH/$MODID/system_root/system ]; then 580 | mkdir -p $MODPATH/$MODID/system; cp -rf $MODPATH/$MODID/system_root/system/* $MODPATH/$MODID/system; rm -rf $MODPATH/$MODID/system_root 581 | fi 582 | if [ -d $MODPATH/$MODID/vendor ]; then 583 | mkdir -p $MODPATH/$MODID/system/vendor; cp -rf $MODPATH/$MODID/vendor/* $MODPATH/$MODID/system/vendor; rm -rf $MODPATH/$MODID/vendor 584 | fi 585 | if [ $BOOTMODE != true ] && [ -d $MODPATH/$MODID/system/system ]; then 586 | mkdir -p $MODPATH/$MODID/system; cp -rf $MODPATH/$MODID/system/system/* $MODPATH/$MODID/system; rm -rf $MODPATH/$MODID/system/system 587 | fi 588 | if [ $BOOTMODE != true ] && [ -d $MODPATH/$MODID/system_root/system/system_ext ]; then 589 | mkdir -p $MODPATH/$MODID/system/system_ext; cp -rf $MODPATH/$MODID/system_root/system/system_ext/* $MODPATH/$MODID/system/system_ext; rm -rf $MODPATH/$MODID/system_root 590 | fi 591 | } 592 | 593 | APKPERM() { 594 | PACKAGENAME=$($AAPT list -a $APKINPUT | awk -v FS='"' '/package=/{print $2}') 595 | mkdir -p $APKDIROUTPUT 596 | PERM=$($AAPT d permissions $APKINPUT | grep "uses-permission:" | \ 597 | sed -r "s|.*='(.*)'|\1|") 598 | APPPERM=$(echo "$PERM" | \ 599 | sed -re "s| ||g; s|^| |") 600 | echo " 601 | # 606 | 607 | 608 | $APPPERM 609 | 610 | " > $APKDIROUTPUT/privapp-permissions-$PACKAGENAME.xml 611 | chmod 644 $APKDIROUTPUT/privapp-permissions-$PACKAGENAME.xml 612 | } 613 | 614 | HAPWL() { 615 | mkdir -p $APKDIROUTPUT 616 | echo " 617 | 620 | 621 | 622 | " >> $APKDIROUTPUT/$PACKAGENAME-package-whitelist.xml 623 | } 624 | 625 | MMPR() { 626 | case $1 in 627 | -v) echo "id=$MODID 628 | name=$2 629 | version=$3 630 | author=$WDI 631 | description=$4" > $MODPATH/$MODID/module.prop;; 632 | -vs) echo "id=$MODID 633 | name=$2 634 | version=$3 635 | author=$WDI 636 | description=$4 637 | support=$5" > $MODPATH/$MODID/module.prop;; 638 | -vc) echo "id=$MODID 639 | name=$2 640 | version=$3 641 | versionCode=$4 642 | author=$5 643 | description=$6" > $MODPATH/$MODID/module.prop;; 644 | -vcs) echo "id=$MODID 645 | name=$2 646 | version=$3 647 | versionCode=$4 648 | author=$5 649 | description=$6 650 | support=$7" > $MODPATH/$MODID/module.prop;; 651 | -vcmm) echo "id=$MODID 652 | name=$2 653 | version=$3 654 | versionCode=$4 655 | author=$5 656 | description=$6 657 | minMagisk=$7" > $MODPATH/$MODID/module.prop;; 658 | -vcma) echo "id=$MODID 659 | name=$2 660 | version=$3 661 | versionCode=$4 662 | author=$5 663 | description=$6 664 | minApi=$7" > $MODPATH/$MODID/module.prop;; 665 | -vcsd) echo "id=$MODID 666 | name=$2 667 | version=$3 668 | versionCode=$4 669 | author=$5 670 | description=$6 671 | support=$7 672 | donate=$8" > $MODPATH/$MODID/module.prop;; 673 | -vcsdt) echo "id=$MODID 674 | name=$2 675 | version=$3 676 | versionCode=$4 677 | author=$5 678 | description=$6 679 | support=$7 680 | donate=$8 681 | template=$9" > $MODPATH/$MODID/module.prop;; 682 | esac 683 | } 684 | 685 | } # 686 | 687 | { #KeyCheck 688 | 689 | KEYTEST() { 690 | MSGDELIMITER; UIP "Press Vol: Up Or Down" "Or Tap The Screen To Assign Buttons" 691 | if ($TIMEOUT 5 $KGETEVENT -lc 1 2>&1 | $KGREP VOLUME | $KGREP " DOWN" > $EVENTS); then HFBMODE && sed -i "s/KMETHOD=false/KMETHOD=N/g" $PATCHMODEFILE && return 0; else return 1; fi 692 | } 693 | 694 | CHOOSENEW() { 695 | # Original idea by chainfire @xda-developers, improved on by ianmacd @xda-developers 696 | while true; do 697 | $KGETEVENT -lc 1 2>&1 | $KGREP VOLUME | $KGREP " DOWN" > $EVENTS 698 | if (`cat $EVENTS 2>/dev/null | $KGREP VOLUME >/dev/null`); then 699 | break 700 | fi 701 | done 702 | if (`cat $EVENTS 2>/dev/null | $KGREP VOLUMEUP >/dev/null`); then 703 | HFBMODE && return 0 704 | else 705 | HFBMODE && return 1 706 | fi 707 | } 708 | 709 | CHOOSEOLD() { 710 | while true; do 711 | if $TKEYCHECK; then $FKEYCHECK; fi; $FKEYCHECK 712 | local SEL=$? 713 | if [ "$1" == "UP" ]; then 714 | HFBMODE && UP=$SEL && sed -i "s/ButtonIDUP=#UP/ButtonIDUP=$SEL/g" $PATCHMODEFILE 715 | break 716 | elif [ "$1" == "DOWN" ]; then 717 | HFBMODE && DOWN=$SEL && if [ "$UP" -ne "$SEL" ]; then sed -i "s/ButtonIDDOWN=#DOWN/ButtonIDDOWN=$SEL/g" $PATCHMODEFILE; fi 718 | break 719 | elif [ $SEL -eq $UP ]; then 720 | HFBMODE && return 0 721 | elif [ $SEL -eq $DOWN ]; then 722 | HFBMODE && return 1 723 | fi 724 | done 725 | } 726 | 727 | ALTCHOOSEOLD() { 728 | while true; do 729 | if $TKEYCHECK; then $FKEYCHECK; fi; $FKEYCHECK 730 | local SEL=$? 731 | if [ $SEL -eq $BUTTONIDUP ]; then 732 | HFBMODE && return 0 733 | elif [ $SEL -eq $BUTTONIDDOWN ]; then 734 | HFBMODE && return 1 735 | fi 736 | done 737 | } 738 | 739 | KEYCHOOSEOLDBIND() { 740 | MSGDELIMITER; UIP "Vol Key Programming Method" "Press Vol Up" 741 | $KEYFUNCTION "UP" 742 | UIP "Press Vol Down" 743 | $KEYFUNCTION "DOWN" 744 | if [ $UP = $DOWN ]; then 745 | UIP "Two Identical Keys Are Tied! Try Again!" "Activated TKEY For CHOOSEOLD" 746 | TKEYCHECK=true 747 | MSGDELIMITER; UIP "Vol Key Programming Method" "Press Vol Up" 748 | $KEYFUNCTION "UP" 749 | UIP "Press Vol Down" 750 | $KEYFUNCTION "DOWN" 751 | if [ $UP = $DOWN ]; then 752 | UIP "Two Identical Keys Are Tied! Try Again!" "Or Vol Key Not Detected!" 753 | ENDMODE=false; END 754 | else 755 | sed -i "s/TKEY=false/TKEY=true/g" $PATCHMODEFILE 756 | fi 757 | fi 758 | if $BIDMODE; then sed -i "s/KMETHOD=false/KMETHOD=A/g" $PATCHMODEFILE; else sed -i "s/KMETHOD=A/KMETHOD=O/g" $PATCHMODEFILE; fi 759 | } 760 | 761 | KEYCHECK() { 762 | if [ -f /sbin/getevent ] && [ -f /sbin/grep ]; then KGETEVENT="/sbin/getevent"; KGREP="/sbin/grep"; elif [ -f $IPSB/getevent ] && [ -f $IPSB/grep ]; then KGETEVENT="$IPSB/getevent"; KGREP="$IPSB/grep"; else KGETEVENT="getevent"; KGREP="grep"; fi 763 | if $KOLD && [ $AKOLD != true ] && [ $KNEW != true ]; then 764 | KEYFUNCTION=CHOOSEOLD; KEYCHOOSEOLDBIND 765 | elif $KNEW && [ $AKOLD != true ] && [ $KOLD != true ]; then 766 | KEYFUNCTION=CHOOSENEW 767 | elif $AKOLD && [ $KNEW != true ] && [ $KOLD != true ]; then 768 | KEYFUNCTION=ALTCHOOSEOLD 769 | elif KEYTEST; then 770 | KEYFUNCTION=CHOOSENEW 771 | else 772 | KEYFUNCTION=CHOOSEOLD; KEYCHOOSEOLDBIND 773 | fi 774 | } 775 | 776 | } # 777 | 778 | { #Code/Path/App 779 | 780 | APKINSTALLER() { 781 | if $MAGISK; then 782 | MODID="AIOIARPFMD" 783 | PATHINSTALLAPP=$MODPATH/$MODID$MIPSA/$NAMEINSTALLAPP 784 | else 785 | PATHINSTALLAPP=$IPSA/$NAMEINSTALLAPP 786 | fi 787 | UIP "Installing $NAMEINSTALLAPP $IAMM" 788 | rm -rf $PATHINSTALLAPP 789 | mkdir -p $TMPDIR/Lib_$NAMEINSTALLAPP 790 | for ARCH in "armeabi" "armeabi-v7a" "arm64-v8a"; do 791 | $UNZIP -oq $ZIPFILE $NAMEPATHOUT/$NAMEINSTALLAPP.apk -d $TMPDIR 2>/dev/null 792 | $UNZIP -oq $TMPDIR/$NAMEPATHOUT/$NAMEINSTALLAPP.apk lib/$ARCH/* -d $TMPDIR/Lib_$NAMEINSTALLAPP 2>/dev/null 793 | case $ARCH in 794 | "armeabi") ARCHOUT="arm";; "armeabi-v7a") ARCHOUT="arm";; "arm64-v8a") ARCHOUT="arm64";; 795 | esac 796 | if [ -d $TMPDIR/Lib_$NAMEINSTALLAPP/lib/$ARCH ]; then 797 | mkdir -p $PATHINSTALLAPP/lib/$ARCHOUT 798 | cp -f $TMPDIR/Lib_$NAMEINSTALLAPP/lib/$ARCH/* $PATHINSTALLAPP/lib/$ARCHOUT 799 | else 800 | mkdir -p $PATHINSTALLAPP 801 | fi 802 | cp -f $TMPDIR/$NAMEPATHOUT/$NAMEINSTALLAPP.apk $PATHINSTALLAPP 803 | done 804 | rm -rf $TMPDIR/Lib_$NAMEINSTALLAPP 805 | if $MAGISK; then 806 | MMPR -v "AIOIARPFMD" "$VAIOIARPFMD" "AIOIARPFMD - Systemless Apps" 807 | APKINPUT="$PATHINSTALLAPP/$NAMEINSTALLAPP.apk" && APKDIROUTPUT="$MODPATH/$MODID$MIPSEP" && APKPERM && APKDIROUTPUT="$MODPATH/$MODID$MIPSES" && HAPWL 808 | SET_PERM_RM 809 | else 810 | APKINPUT="$PATHINSTALLAPP/$NAMEINSTALLAPP.apk" && APKDIROUTPUT="$IPSEP" && APKPERM && APKDIROUTPUT="$IPSES" && HAPWL 811 | SET_PERM_R $IPSA/$NAMEINSTALLAPP 0 0 0755 0644 812 | fi 813 | } 814 | 815 | IApplications() { 816 | if find $STORAGE/Applications/*.apk >/dev/null; then 817 | if $ENDMODE; then 818 | MSGNUS="(/)" 819 | else 820 | MSGNUS="$MSGEND" 821 | fi 822 | UCSA "Install App In $STORAGE/Applications?" "" "$MSGNUS" "IApplicationsS" 823 | fi 824 | } 825 | 826 | IApplicationsS() { 827 | MSGNUS="(/)" 828 | MSGDELIMITER && UIP "Choose Variant:" "$MSGVU Install Every App With Confirm" "$MSGVD Install Every App Without Confirm" 829 | if $KEYFUNCTION; then 830 | IEAW=true 831 | else 832 | IEAW=false 833 | fi 834 | dirname=$STORAGE/Applications; IFS=$'\n' 835 | for i in $(find $dirname -depth -name '* *'); do mv $i $(dirname $i)/$(basename $i| tr ' ' '_'); done 836 | for APKINPUT in $(ls $STORAGE/Applications); do 837 | if $IEAW; then 838 | MSGDELIMITER && UIP "Found $APKINPUT" "$MSGVU Install?" "$MSGVD No $MSGNUS" 839 | if $KEYFUNCTION; then 840 | PACKAGENAME="$($AAPT list -a "$STORAGE/Applications/$APKINPUT" | awk -v FS='"' '/package=/{print $2}')" 841 | mkdir -p $TMPDIR/$PACKAGENAME && cp -f "$STORAGE/Applications/$APKINPUT" "$TMPDIR/$PACKAGENAME/$PACKAGENAME.apk" 842 | NAMEINSTALLAPP="$PACKAGENAME" && NAMEPATHOUT="$PACKAGENAME" && ALTAPKINSTALLER && rm -rf $TMPDIR/$PACKAGENAME 843 | fi 844 | else 845 | PACKAGENAME="$($AAPT list -a "$STORAGE/Applications/$APKINPUT" | awk -v FS='"' '/package=/{print $2}')" 846 | mkdir -p $TMPDIR/$PACKAGENAME && cp -f "$STORAGE/Applications/$APKINPUT" "$TMPDIR/$PACKAGENAME/$PACKAGENAME.apk" 847 | NAMEINSTALLAPP="$PACKAGENAME" && NAMEPATHOUT="$PACKAGENAME" && ALTAPKINSTALLER && rm -rf $TMPDIR/$PACKAGENAME 848 | fi 849 | done 850 | UIP "$MSGDI" 851 | } 852 | 853 | Lawnchair() { 854 | NAMEINSTALLAPP="Lawnchair" 855 | NAMEPATHOUT="all" 856 | APKINSTALLER 857 | } 858 | 859 | GBoard() { 860 | NAMEINSTALLAPP="GBoard" 861 | NAMEPATHOUT="$arch" 862 | APKINSTALLER 863 | } 864 | 865 | MiXplorerSilver() { 866 | NAMEINSTALLAPP="MiXplorerSilver" 867 | NAMEPATHOUT="$arch" 868 | APKINSTALLER 869 | } 870 | 871 | } # 872 | 873 | { #Removal Mechanics 874 | 875 | RTrash_System_App() { 876 | if [ $BOOTMODE != true ] && $MAGISK; then 877 | MSGUC="Go To Remove/Replace Mode?" 878 | elif [ $BOOTMODE != true ]; then 879 | MSGUC="Go To Remove Mode?" 880 | elif $BOOTMODE; then 881 | MSGUC="Go To Replace Mode?" 882 | fi 883 | UCSA "$MSGUC" "$MSGEFTC" "$MSGNUS" "RTrash_System_AppS" 884 | } 885 | 886 | RTrash_System_AppS() { 887 | DELETEWITHOUTSELECTION=false; RMTSAV=false; CAILIST=false 888 | if [ $BOOTMODE != true ] && $MAGISK; then 889 | MSGDELIMITER; UIP "Choose Variant:" "$MSGVU Replace All Find Apps" "$MSGVD Remove All Find Apps" 890 | if $KEYFUNCTION; then 891 | RMTSAV=true 892 | fi 893 | elif $BOOTMODE; then 894 | RMTSAV=true 895 | fi 896 | if $RMTSAV; then 897 | MSGDELIMITER; UIP "Choose Variant:" "$MSGVU Replace Every App Found With Confirm" "$MSGVD Replace Every App Found Without Confirm" 898 | else 899 | MSGDELIMITER; UIP "Choose Variant:" "$MSGVU Remove Every App Found With Confirm" "$MSGVD Remove Every App Found Without Confirm" 900 | fi 901 | if $KEYFUNCTION; then 902 | RMLISTCHOICECONFIRMATION=true 903 | else 904 | RMLISTCHOICECONFIRMATION=false 905 | DELETEWITHOUTSELECTION=true 906 | fi 907 | if [ -f $STORAGE/rmlist.sh ]; then 908 | MSGDELIMITER; UIP "Choose Variant:" "$MSGVU Use rmlist.sh & Patch List" "$MSGVD Use Only rmlist.sh" 909 | if $KEYFUNCTION; then 910 | RMLISTCHOICEVARIANT=true 911 | else 912 | RMLISTCHOICEVARIANT=false 913 | fi 914 | RMLIST=$(cat $STORAGE/rmlist.sh) 915 | REMOVETRASHNAME="$RMLIST" 916 | UIP "Search App, Please Wait..." 917 | RTrash_System_AppSA 918 | UIP "Other App Not Found" 919 | sleep 3 920 | DELETEWITHOUTSELECTION=false 921 | fi 922 | if $RMLISTCHOICEVARIANT; then 923 | if [ -f $AIOPFMDPH/AIL.txt ]; then 924 | MSGDELIMITER; UIP "Found $AIOPFMDPH/AIL.txt" "$MSGVU Use AIL.txt List" "$MSGVD No, Next List $MSGNUS" 925 | if $KEYFUNCTION; then 926 | CAILIST=true 927 | AILIST=$(cat $AIOPFMDPH/AIL.txt) 928 | REMOVETRASHNAME="$AILIST" 929 | UIP "Search App, Please Wait..." 930 | RTrash_System_AppSA 931 | UIP "Other App Not Found" 932 | sleep 3 933 | fi 934 | fi 935 | MSGDELIMITER; UIP "Choose Variant:" "$MSGVU Use Stock List" "$MSGVD No, Next List $MSGNUS" 936 | if $KEYFUNCTION; then 937 | if [ $MIUI != true ] || $RMLISTCHOICECONFIRMATION; then 938 | REMOVETRASHNAME=" 939 | Calculator 940 | Calendar 941 | Contacts 942 | DeskClock 943 | MiuiCamera 944 | Mms 945 | " 946 | RTrash_System_AppSA 947 | fi 948 | REMOVETRASHNAME=" 949 | AEXPapers 950 | Abstruct 951 | AccuweatherPhone2015_MASS_HD_SWS 952 | AdAway 953 | Aegis 954 | AirDots 955 | AirDotsPlugin 956 | AnalyticsCore 957 | AndroidAutoPrebuilt 958 | AndroidAutoStub 959 | AndroidAutoStubPrebuilt 960 | AndroidForWork 961 | AudioFX 962 | BatteryTile 963 | BookmarkProvider 964 | Books 965 | BooksPhone 966 | BooksStub 967 | Browser 968 | Browser2 969 | CMFileManager 970 | CalculatorGoogle 971 | CalculatorGooglePrebuilt 972 | CalendarGoogle 973 | CalendarGooglePrebuilt 974 | Camera2 975 | CameraGo 976 | CarHomeGoogle 977 | CarrierServices 978 | CatchLog 979 | ChocoEUKor 980 | Chrome 981 | Chrome-Stub 982 | ChromeCustomizations 983 | ClockPackage_MASS_Le 984 | CloudPrint 985 | CloudPrint2 986 | ColtPapers 987 | DeskClockGoogle 988 | DevicePersonalizationPrebuiltPixel2020 989 | DevicePersonalizationPrebuiltPixel4 990 | DevicePolicyPrebuilt 991 | DiagMonAgent 992 | DiagnosticsToolPrebuilt 993 | Dialer 994 | DigitalClockEasy_L 995 | DigitalClock_L 996 | DotWallpapers 997 | Drive 998 | DualClockDigital_L 999 | DuckDuckGo 1000 | Duo 1001 | EasterEgg 1002 | EasymodeContactsWidget 1003 | Eleven 1004 | Email 1005 | EngineerMode 1006 | Etar 1007 | ExactCalculator 1008 | Excel_SamsungStub 1009 | Exchange2 1010 | FBAppManager_NS 1011 | FBInstaller_NS 1012 | FDroid 1013 | FDroidPrivilegedExtension 1014 | FM 1015 | FM2 1016 | FMRadio 1017 | FM_TEST 1018 | Facebook_stub 1019 | FileExplorer 1020 | FileExplorerGlobal 1021 | FilesPrebuilt 1022 | FitnessPrebuilt 1023 | Focus 1024 | FotaAgent 1025 | GCS 1026 | GCam 1027 | GCamGOPrebuilt 1028 | GCamGo 1029 | GalaxyApps 1030 | Gallery 1031 | Gallery2 1032 | GalleryGo 1033 | GalleryGoPrebuilt 1034 | GalleryGoogle 1035 | GalleryPrebuilt 1036 | GameCenter 1037 | GameCenterGlobal 1038 | Gboard 1039 | Gcam 1040 | GenieWidget 1041 | GlobalTrendNews 1042 | GlobalUserGuide 1043 | Gmail 1044 | Gmail2 1045 | GoogleCalendar 1046 | GoogleCamera 1047 | GoogleCameraGo 1048 | GoogleCameraLegacy 1049 | GoogleCloudPrint 1050 | GoogleContacts 1051 | GoogleDialer 1052 | GoogleEars 1053 | GoogleEarth 1054 | GoogleFeedback 1055 | GoogleHangouts 1056 | GoogleHindiIME 1057 | GoogleHome 1058 | GoogleJapaneseInput 1059 | GoogleKeep 1060 | GoogleKeyboard 1061 | GoogleLatinIme 1062 | GoogleMusic 1063 | GoogleNow 1064 | GoogleNowVoiceSearch 1065 | GooglePinyinIME 1066 | GooglePlus 1067 | GooglePrintRecommendationService 1068 | GoogleTTS 1069 | GoogleVrCore 1070 | HTMLViewer 1071 | Hangouts 1072 | HangoutsDialer 1073 | Health 1074 | HelpRtcPrebuilt 1075 | HotwordEnrollment 1076 | HotwordEnrollmentOKGoogle* 1077 | HotwordEnrollmentXGoogle* 1078 | HybridAccessory 1079 | HybridPlatform 1080 | HybridRadio2015 1081 | HyconWallpapers 1082 | IdMipay 1083 | InMipay 1084 | Jelly 1085 | Joyose 1086 | KLMSAgent 1087 | Keep 1088 | KimciRecorder 1089 | KoreanIME 1090 | KoreanIMEStub 1091 | LPaper-v1.0.0-release 1092 | LPaper-v2.0-release 1093 | LatinIME 1094 | LatinIMEGooglePrebuild 1095 | LatinIMEGooglePrebuilt 1096 | LatinImeDictionaryPack 1097 | LatinImeGoogle 1098 | LatinImeTutorial 1099 | Lawnfeed 1100 | Lens 1101 | MSA-Global 1102 | MSSkype_stub 1103 | MaestroPrebuilt 1104 | Maps 1105 | MatLog 1106 | MatchmakerPrebuilt 1107 | MatchmakerPrebuiltPixel4 1108 | Messages 1109 | Messaging 1110 | MiBrowser 1111 | MiDrive 1112 | MiDrop 1113 | MiGalleryLockscreen 1114 | MiHealth 1115 | MiMover 1116 | MiMusic 1117 | MiPicks 1118 | MiService 1119 | MiShare 1120 | MiVideo 1121 | Mimoji 1122 | MiuiBugReport 1123 | MiuiCompass 1124 | MiuiScanner 1125 | MiuiSuperMarket 1126 | MiuiVideo 1127 | MiuiVideoGlobal 1128 | MiuiVideoPlayer 1129 | MozillaNlpBackend 1130 | Music 1131 | Music2 1132 | MusicFX 1133 | MusicPlayerGO 1134 | MyVerizonServices 1135 | Netflix_activation 1136 | NewsWeather 1137 | Newsstand 1138 | NewsstandStub 1139 | NextPay 1140 | NexusLauncherIcons 1141 | NexusWallpapersStubPrebuilt2017 1142 | NexusWallpapersStubPrebuilt2019 1143 | NezukoMusic 1144 | Notes 1145 | NovaBugreportWrapper 1146 | ONESettings 1147 | OPFileManager 1148 | OPIconpackRound 1149 | OPScreenRecord 1150 | OPScreenRecorder 1151 | OPWeather 1152 | OPWidget 1153 | OmniSwitch 1154 | OneNote 1155 | OneOSLogcat 1156 | Ornament 1157 | Papers 1158 | PartnerBookmarksProvider 1159 | PaymentService 1160 | PersonalAssistant 1161 | PersonalAssistantGlobal 1162 | Phonograph 1163 | PhotoTable 1164 | Photos 1165 | PicoTts 1166 | PixelLiveWallpaperPrebuilt 1167 | PixelWallpapers2020 1168 | PlayGames 1169 | PowerPoint_SamsungStub 1170 | PrebuiltBugle 1171 | PrebuiltBugleStub 1172 | PrebuiltDeskClockGoogle 1173 | PrebuiltEmailGoogle 1174 | PrebuiltExchange3Google 1175 | PrebuiltGmail 1176 | PrebuiltGoogleTelemetryTvp 1177 | PureBrowser 1178 | QPGallery 1179 | QuickAccessWallet 1180 | QuickSearchBox 1181 | RRWallpapers 1182 | Recorder 1183 | RecorderPrebuilt 1184 | RetroMusicPlayer 1185 | RetroMusicPlayerPrebuilt 1186 | RevengeMessages 1187 | RevengeOSCalculator 1188 | RomStats 1189 | RoseEUKor 1190 | SBrowser_3.0.38_MASS_LATEST 1191 | SOAgent 1192 | SPPPushClient_Prod 1193 | SPenSdk3 1194 | SPlannerWidget_Essential 1195 | SPlanner_Essential 1196 | SafetyHubPrebuilt 1197 | SamsungIMEv2 1198 | SamsungSans 1199 | SamsungTTS 1200 | ScribePrebuilt 1201 | SecCalculator2_L 1202 | SecEmailComposer-mass 1203 | SecEmailProvider-mass 1204 | SecEmailSync-mass 1205 | SecEmailUI-mass 1206 | SecEmailWidget-mass 1207 | SecHTMLViewer 1208 | SecMyFiles2015_ESS 1209 | SecSetupWizard2015 1210 | SecurityLogAgent 1211 | ShiftPapers 1212 | SimpleCalendar 1213 | SimpleGallery 1214 | SimpleGalleryPro 1215 | SmartManagerSDK 1216 | SmartManager_OLEDHD 1217 | Snap 1218 | SoundAmplifierPrebuilt 1219 | Street 1220 | Superiorwalls 1221 | Talk 1222 | Terminal 1223 | TipsPrebuilt 1224 | TouchAssistant 1225 | Translate 1226 | TranslatePrebuilt 1227 | Turbo 1228 | TurboAdapter 1229 | TurboPrebuilt 1230 | Tycho 1231 | UPTsmService 1232 | Velvet 1233 | Velvet_update 1234 | Via 1235 | ViaBrowser 1236 | Videos 1237 | VinylMusicPlayer 1238 | VoiceSearch 1239 | VoiceSearchStub 1240 | Wallet 1241 | Wallpaper 1242 | WallpaperPickerGoogle 1243 | WallpaperPickerGooglePrebuilt 1244 | WallpaperPickerGoogleRelease 1245 | WallpapersBReel2017 1246 | WallpapersBReel2019 1247 | WallpapersBReel2020 1248 | WallpapersBReel2020a 1249 | WarpShare 1250 | WaveWidget 1251 | WeatherDaemon 1252 | WeatherTile 1253 | WebManual 1254 | Wellbeing 1255 | WellbeingPrebuilt 1256 | Word_SamsungStub 1257 | XiaomiKeyboard 1258 | YGPS 1259 | YellowPage 1260 | YouDaoEngine 1261 | YouTube 1262 | YouTubeMusicPrebuilt 1263 | YouTubeVanced 1264 | ZVideoMass 1265 | arcore 1266 | com.google.ar.core 1267 | crDroidMusic 1268 | facebook-appmanager 1269 | facebook-installer 1270 | facebook-services 1271 | greenguard 1272 | iWnnIME 1273 | iWnnIME_Kbd_White 1274 | mab 1275 | madCamera 1276 | madLauncher 1277 | madWallpapers 1278 | messaging 1279 | stats 1280 | talkback 1281 | " 1282 | UIP "Search App, Please Wait..." 1283 | RTrash_System_AppSA 1284 | UIP "Other App Not Found" 1285 | sleep 3 1286 | fi 1287 | MSGDELIMITER; UIP "Choose Variant:" "$MSGVU Use Experimental List" "$MSGVD No, Next List $MSGNUS" 1288 | if $KEYFUNCTION; then 1289 | REMOVETRASHNAME=" 1290 | AmbientSensePrebuilt 1291 | AndroidMigratePrebuilt 1292 | AndroidPlatformServices 1293 | BackupRestoreConfirmation 1294 | BasicDreams 1295 | BrowserProviderProxy 1296 | BuiltInPrintService 1297 | CalendarProvider 1298 | CellBroadcastReceiver 1299 | ChromeBookmarksSyncAdapter 1300 | ConfigUpdater 1301 | ConnMO 1302 | Currents 1303 | DMAgent 1304 | EditorsDocs 1305 | EditorsDocsStub 1306 | EditorsSheets 1307 | EditorsSheetsStub 1308 | EditorsSlides 1309 | EditorsSlidesStub 1310 | EuiccGoogle 1311 | ExchangeServices 1312 | FOTAKill 1313 | FaceLock 1314 | Finsky 1315 | GmsCore 1316 | GmsCoreSetupPrebuilt 1317 | GmsCore_update 1318 | GoogleBackupTransport 1319 | GoogleCalendarSyncAdapter 1320 | GoogleContactsSyncAdapter 1321 | GoogleLoginService 1322 | GoogleOneTimeInitializer 1323 | GooglePartnerSetup 1324 | GooglePlay 1325 | GoogleQuickSearchBox 1326 | GoogleSearch 1327 | GoogleServicesFramework 1328 | GoogleZhuyinIME 1329 | LineageSetupWizard 1330 | LocationHistoryPrebuilt 1331 | Magazines 1332 | MarketUpdater 1333 | Markup 1334 | MarkupGoogle 1335 | MediaUploader 1336 | NetworkLocation 1337 | OccamQuickOffice 1338 | OneTimeInitializer 1339 | Phonesky 1340 | PlayAutoInstallConfig 1341 | PlayStore 1342 | PlusOne 1343 | PrebuiltGmsCore 1344 | PrebuiltGmsCorePix 1345 | PrebuiltGmsCoreQt 1346 | PrebuiltGmsCoreRvc 1347 | PrebuiltKeep 1348 | PrebuiltKeepStub 1349 | PrebuiltNewsWeather 1350 | PrintSpooler 1351 | QuickOffice 1352 | SPrintSpoolerLMR1 1353 | SamsungBilling 1354 | SettingsGoogle 1355 | SettingsIntelligenceGooglePrebuilt 1356 | SoundPicker 1357 | SoundPickerPrebuilt 1358 | Stk 1359 | Stk2 1360 | StorageManagerGoogle 1361 | Tag 1362 | TagGoogle 1363 | TrichromeLibrary 1364 | Vending 1365 | WallpaperPicker_Zero2 1366 | WebView 1367 | WebViewGoogle 1368 | WebViewStub 1369 | " 1370 | UIP "Search App, Please Wait..." 1371 | RTrash_System_AppSA 1372 | UIP "Other App Not Found" 1373 | sleep 3 1374 | fi 1375 | MSGDELIMITER; UIP "Choose Variant:" "$MSGVU Use Launchers List" "$MSGVD No $MSGNUS" 1376 | if $KEYFUNCTION; then 1377 | REMOVETRASHNAME=" 1378 | AsusLauncher 1379 | AsusLauncherDev 1380 | EasyLauncher2_Zero 1381 | EnigmaLauncher 1382 | Launcher3QuickStep 1383 | Lawnchair 1384 | NexusLauncher 1385 | NexusLauncherPrebuilt 1386 | NexusLauncherRelease 1387 | OPLauncherReleases 1388 | ParanoidQuickStep 1389 | PixelLauncher 1390 | ShadyLauncher 1391 | TWLauncherESS 1392 | Trebuchet 1393 | TrebuchetQuickStep 1394 | " 1395 | UIP "Search App, Please Wait..." 1396 | RTrash_System_AppSA 1397 | UIP "Other App Not Found" 1398 | sleep 3 1399 | fi 1400 | fi 1401 | } 1402 | 1403 | RTrash_System_AppSA() { 1404 | for FINDTRASH in $REMOVETRASHNAME; do 1405 | for NAMEPATHDELLTRASH in "$IPSA" "$IPSPA" "$IPSSPA" "$IPSSPPA" "$IPSSSA" "$IPSSSPA"; do 1406 | if [ -d $NAMEPATHDELLTRASH/$FINDTRASH ]; then 1407 | if $DELETEWITHOUTSELECTION; then 1408 | UIP "Found ($FINDTRASH)" 1409 | RTrash_System_AppSAA 1410 | else 1411 | MSGDELIMITER 1412 | MSGUC="Found ($FINDTRASH)" 1413 | if $RMTSAV; then UCUP="Replace?"; else UCUP="Remove?"; fi 1414 | UCDOWN="No, Next Search $MSGNUS" 1415 | UCONE="RTrash_System_AppSAA" 1416 | UCS 1417 | fi 1418 | break 1419 | UIP "Other Search App, Please Wait..." 1420 | fi 1421 | done 1422 | done 1423 | } 1424 | 1425 | RTrash_System_AppSAA() { 1426 | if $RMTSAV; then 1427 | REPLACE="$NAMEPATHDELLTRASH/$FINDTRASH" 1428 | MODID="RTSA"; REPLACER; MOVERPATH 1429 | MMPR -v "Replace Trash System App" "$VAIOIARPFMD" "Replace Trash System App $FMR" 1430 | UIP "$MSGDRP" 1431 | else 1432 | rm -rf $NAMEPATHDELLTRASH/$FINDTRASH; UIP "$MSGDRM" 1433 | if $CAILIST; then 1434 | sed -i "/$FINDTRASH/d" $AIOPFMDPH/AIL.txt 1435 | fi 1436 | fi 1437 | } 1438 | 1439 | } # 1440 | 1441 | BOOT_DETECTED 1442 | SYMBOLDESIGN 1443 | ALLPATCHMSG 1444 | PARTITION_AND_MOUNTS 1445 | IMPORTANT_VARIABLES 1446 | MIUI_CHECKER #& 1447 | BB_CHECKER 1448 | ARCH_CHECKER 1449 | PATCHMODE 1450 | AIOIARPFMD 1451 | CHECK_AVERSION 1452 | KEYCHECK 1453 | MAGISK_CHECKER 1454 | PHONE 1455 | END --------------------------------------------------------------------------------