├── 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
--------------------------------------------------------------------------------