omni: Update gapps backup for A11

taken from opengapps A11 test build (2021-10-01)

Added also sepolicy related changes too

Change-Id: Ie0bb9fbbf7e67f0344a2ce97122ef47a7ffbd76b
diff --git a/prebuilt/addon.d/69-gapps.sh b/prebuilt/addon.d/69-gapps.sh
index c62bbfb..542b1f8 100755
--- a/prebuilt/addon.d/69-gapps.sh
+++ b/prebuilt/addon.d/69-gapps.sh
@@ -6,9 +6,17 @@
 #
 . /postinstall/tmp/backuptool.functions
 
+if [ -z $backuptool_ab ]; then
+  SYS=$S
+  TMP=/tmp
+else
+  SYS=/postinstall/system
+  TMP=/postinstall/tmp
+fi
+
+
 list_files() {
 cat <<EOF
-app/FaceLock/FaceLock.apk
 app/GoogleCalendarSyncAdapter/GoogleCalendarSyncAdapter.apk
 app/GoogleContactsSyncAdapter/GoogleContactsSyncAdapter.apk
 app/GoogleExtShared/GoogleExtShared.apk
@@ -16,7 +24,7 @@
 app/MarkupGoogle/MarkupGoogle.apk
 app/SoundPickerPrebuilt/SoundPickerPrebuilt.apk
 etc/default-permissions/default-permissions.xml
-etc/default-permissions/opengapps-permissions.xml
+etc/default-permissions/opengapps-permissions-q.xml
 etc/g.prop
 etc/permissions/com.google.android.dialer.support.xml
 etc/permissions/com.google.android.maps.xml
@@ -32,21 +40,16 @@
 framework/com.google.android.dialer.support.jar
 framework/com.google.android.maps.jar
 framework/com.google.android.media.effects.jar
-lib/libfilterpack_facedetect.so
-lib/libfrsdk.so
 lib/libsketchology_native.so
-lib64/libfacenet.so
-lib64/libfilterpack_facedetect.so
-lib64/libfrsdk.so
 lib64/libjni_latinimegoogle.so
 lib64/libsketchology_native.so
 priv-app/CarrierSetup/CarrierSetup.apk
 priv-app/ConfigUpdater/ConfigUpdater.apk
-priv-app/GmsCoreSetupPrebuilt/GmsCoreSetupPrebuilt.apk
 priv-app/GoogleBackupTransport/GoogleBackupTransport.apk
 priv-app/GoogleExtServices/GoogleExtServices.apk
 priv-app/GoogleFeedback/GoogleFeedback.apk
 priv-app/GoogleOneTimeInitializer/GoogleOneTimeInitializer.apk
+priv-app/GooglePackageInstaller/GooglePackageInstaller.apk
 priv-app/GooglePartnerSetup/GooglePartnerSetup.apk
 priv-app/GoogleRestore/GoogleRestore.apk
 priv-app/GoogleServicesFramework/GoogleServicesFramework.apk
@@ -56,6 +59,7 @@
 priv-app/Turbo/Turbo.apk
 priv-app/Velvet/Velvet.apk
 priv-app/WellbeingPrebuilt/WellbeingPrebuilt.apk
+product/overlay/WellbeingOverlay.apk
 usr/srec/en-US/APP_NAME.fst
 usr/srec/en-US/APP_NAME.syms
 usr/srec/en-US/CLG.prewalk.fst
@@ -118,156 +122,237 @@
 EOF
 }
 
-list_google() {
-cat <<EOF
-app/GoogleExtShared/GoogleExtShared.apk
-priv-app/GoogleExtServices/GoogleExtServices.apk
-priv-app/GooglePackageInstaller/GooglePackageInstaller.apk
-EOF
+mount_generic() {
+  local device_abpartition=$(getprop ro.build.ab_update)
+  local partitions="$*"
+  if [ -z "$device_abpartition" ]; then
+    # We're on an A only device
+    local partition
+    for partition in $partitions; do
+      if [ "$(getprop ro.boot.dynamic_partitions)" = "true" ]; then
+        mount -o ro -t auto /dev/block/mapper/"$partition" /"$partition" 2> /dev/null
+        blockdev --setrw /dev/block/mapper/"$partition" 2> /dev/null
+        mount -o rw,remount -t auto /dev/block/mapper/"$partition" /"$partition" 2> /dev/null
+      else
+        mount -o ro -t auto /"$partition" 2> /dev/null
+        mount -o rw,remount -t auto /"$partition" 2> /dev/null
+      fi
+    done
+  fi
 }
-list_aosp() {
-cat <<EOF
-/postinstall/system/priv-app/ExtServices
-/postinstall/system/app/ExtShared
-/postinstall/system/priv-app/PackageInstaller
-EOF
-}
+
+# Backup/Restore using /sdcard if the installed GApps size plus a buffer for other addon.d backups (204800=200MB) is larger than /tmp
+installed_gapps_size_kb=$(grep "^installed_gapps_size_kb" $TMP/gapps.prop | cut -d '=' -f 2)
+if [ ! "$installed_gapps_size_kb" ]; then
+  installed_gapps_size_kb="$(cd $SYS; size=0; for n in $(du -ak $(list_files) | cut -f 1); do size=$((size+n)); done; echo "$size")"
+  echo "installed_gapps_size_kb=$installed_gapps_size_kb" >> $TMP/gapps.prop
+fi
+
+free_tmp_size_kb=$(grep "^free_tmp_size_kb" $TMP/gapps.prop | cut -d '=' -f 2)
+if [ ! "$free_tmp_size_kb" ]; then
+  free_tmp_size_kb="$(echo $(df -k $TMP | tail -n 1) | cut -d ' ' -f 4)"
+  echo "free_tmp_size_kb=$free_tmp_size_kb" >> $TMP/gapps.prop
+fi
+
+buffer_size_kb=204800
+if [ $((installed_gapps_size_kb + buffer_size_kb)) -ge "$free_tmp_size_kb" ]; then
+  C=/sdcard/tmp-gapps
+fi
+
+# Get ROM SDK from installed GApps
+rom_build_sdk=$(grep "^rom_build_sdk" $TMP/gapps.prop | cut -d '=' -f 2)
+if [ ! "$rom_build_sdk" ]; then
+  rom_build_sdk="$(cd $SYS; grep "^ro.addon.sdk" etc/g.prop | cut -d '=' -f 2)"
+  echo "rom_build_sdk=$rom_build_sdk" >> $TMP/gapps.prop
+fi
 
 case "$1" in
   backup)
-    if test -f priv-app/GooglePackageInstaller/GooglePackageInstaller.apk ;then
-        GOOGLE=1
-        list_google | while read FILE DUMMY; do
-            backup_file $S/$FILE
-        done
-    fi
-    list_files | while read FILE DUMMY; do
-      backup_file $S/$FILE
+    list_files | while read -r FILE DUMMY; do
+      backup_file "$S"/"$FILE"
     done
+
+    umount /product /vendor 2> /dev/null
   ;;
   restore)
-    list_files | while read FILE REPLACEMENT; do
+    list_files | while read -r FILE REPLACEMENT; do
       R=""
       [ -n "$REPLACEMENT" ] && R="$S/$REPLACEMENT"
-      [ -f "$C/$S/$FILE" ] && restore_file $S/$FILE $R
+      [ -f "$C/$S/$FILE" ] && restore_file "$S"/"$FILE" "$R"
     done
-    if [ "$GOOGLE" -eq "1" ]; then
-    list_google | while read FILE REPLACEMENT; do
-      R=""
-      [ -n "$REPLACEMENT" ] && R="$S/$REPLACEMENT"
-      [ -f "$C/$S/$FILE" ] && restore_file $S/$FILE $R
-    done
-    fi
   ;;
   pre-backup)
+    mount_generic product vendor
   ;;
   post-backup)
     # Stub
   ;;
   pre-restore)
-    if [ "$GOOGLE" -eq "1" ]; then
-        list_aosp | while read FILE DUMMY; do
-        rm -rf $FILE
-       done
-    fi
-    # Remove/postinstall Stock/AOSP apps (from GApps Installer)
-    rm -rf /postinstall/system/app/Provision
-    rm -rf /postinstall/system/priv-app/Provision
+    mount_generic product vendor
 
-    # Remove/postinstall 'other' apps (per installer.data)
-    rm -rf /postinstall/system/app/BookmarkProvider
-    rm -rf /postinstall/system/app/BooksStub
-    rm -rf /postinstall/system/app/CalendarGoogle
-    rm -rf /postinstall/system/app/CloudPrint
-    rm -rf /postinstall/system/app/DeskClockGoogle
-    rm -rf /postinstall/system/app/EditorsDocsStub
-    rm -rf /postinstall/system/app/EditorsSheetsStub
-    rm -rf /postinstall/system/app/EditorsSlidesStub
-    rm -rf /postinstall/system/app/Gmail
-    rm -rf /postinstall/system/app/Gmail2
-    rm -rf /postinstall/system/app/GoogleCalendar
-    rm -rf /postinstall/system/app/GoogleCloudPrint
-    rm -rf /postinstall/system/app/GoogleHangouts
-    rm -rf /postinstall/system/app/GoogleKeep
-    rm -rf /postinstall/system/app/GoogleLatinIme
-    rm -rf /postinstall/system/app/Keep
-    rm -rf /postinstall/system/app/NewsstandStub
-    rm -rf /postinstall/system/app/PartnerBookmarksProvider
-    rm -rf /postinstall/system/app/PrebuiltBugleStub
-    rm -rf /postinstall/system/app/PrebuiltKeepStub
-    rm -rf /postinstall/system/app/QuickSearchBox
-    rm -rf /postinstall/system/app/Vending
-    rm -rf /postinstall/system/priv-app/GmsCore
-    rm -rf /postinstall/system/priv-app/GmsCore_update
-    rm -rf /postinstall/system/priv-app/GoogleHangouts
-    rm -rf /postinstall/system/priv-app/GoogleNow
-    rm -rf /postinstall/system/priv-app/GoogleSearch
-    rm -rf /postinstall/system/priv-app/OneTimeInitializer
-    rm -rf /postinstall/system/priv-app/QuickSearchBox
-    rm -rf /postinstall/system/priv-app/Velvet_update
-    rm -rf /postinstall/system/priv-app/Vending
+    # Remove Stock/AOSP apps (from GApps Installer)
+    rm -rf $SYS/priv-app/ExtServices
+    rm -rf $SYS/product/priv-app/ExtServices
+    rm -rf $SYS/app/ExtShared
+    rm -rf $SYS/product/app/ExtShared
+    rm -rf $SYS/app/PackageInstaller
+    rm -rf $SYS/priv-app/PackageInstaller
+    rm -rf $SYS/priv-app/packageinstaller
+    rm -rf $SYS/product/app/PackageInstaller
+    rm -rf $SYS/product/priv-app/PackageInstaller
+    rm -rf $SYS/product/priv-app/packageinstaller
+    rm -rf $SYS/app/Provision
+    rm -rf $SYS/priv-app/Provision
+    rm -rf $SYS/product/app/Provision
+    rm -rf $SYS/product/priv-app/Provision
 
-    # Remove/postinstall 'priv-app' apps from 'app' (per installer.data)
-    rm -rf /postinstall/system/app/CanvasPackageInstaller
-    rm -rf /postinstall/system/app/ConfigUpdater
-    rm -rf /postinstall/system/app/GoogleBackupTransport
-    rm -rf /postinstall/system/app/GoogleFeedback
-    rm -rf /postinstall/system/app/GoogleLoginService
-    rm -rf /postinstall/system/app/GoogleOneTimeInitializer
-    rm -rf /postinstall/system/app/GooglePartnerSetup
-    rm -rf /postinstall/system/app/GoogleServicesFramework
-    rm -rf /postinstall/system/app/OneTimeInitializer
-    rm -rf /postinstall/system/app/Phonesky
-    rm -rf /postinstall/system/app/PrebuiltGmsCore
-    rm -rf /postinstall/system/app/SetupWizard
-    rm -rf /postinstall/system/app/Velvet
+    # Remove 'other' apps (per installer.data)
+    rm -rf $SYS/app/BookmarkProvider
+    rm -rf $SYS/app/BooksStub
+    rm -rf $SYS/app/CalendarGoogle
+    rm -rf $SYS/app/CloudPrint
+    rm -rf $SYS/app/DeskClockGoogle
+    rm -rf $SYS/app/EditorsDocsStub
+    rm -rf $SYS/app/EditorsSheetsStub
+    rm -rf $SYS/app/EditorsSlidesStub
+    rm -rf $SYS/app/Gmail
+    rm -rf $SYS/app/Gmail2
+    rm -rf $SYS/app/GoogleCalendar
+    rm -rf $SYS/app/GoogleCloudPrint
+    rm -rf $SYS/app/GoogleHangouts
+    rm -rf $SYS/app/GoogleKeep
+    rm -rf $SYS/app/GoogleLatinIme
+    rm -rf $SYS/app/Keep
+    rm -rf $SYS/app/NewsstandStub
+    rm -rf $SYS/app/PartnerBookmarksProvider
+    rm -rf $SYS/app/PrebuiltBugleStub
+    rm -rf $SYS/app/PrebuiltKeepStub
+    rm -rf $SYS/app/QuickSearchBox
+    rm -rf $SYS/app/Vending
+    rm -rf $SYS/priv-app/GmsCore
+    rm -rf $SYS/priv-app/GmsCore_update
+    rm -rf $SYS/priv-app/GoogleHangouts
+    rm -rf $SYS/priv-app/GoogleNow
+    rm -rf $SYS/priv-app/GoogleSearch
+    rm -rf $SYS/priv-app/OneTimeInitializer
+    rm -rf $SYS/priv-app/QuickSearchBox
+    rm -rf $SYS/priv-app/Velvet_update
+    rm -rf $SYS/priv-app/Vending
+    rm -rf $SYS/product/app/BookmarkProvider
+    rm -rf $SYS/product/app/BooksStub
+    rm -rf $SYS/product/app/CalendarGoogle
+    rm -rf $SYS/product/app/CloudPrint
+    rm -rf $SYS/product/app/DeskClockGoogle
+    rm -rf $SYS/product/app/EditorsDocsStub
+    rm -rf $SYS/product/app/EditorsSheetsStub
+    rm -rf $SYS/product/app/EditorsSlidesStub
+    rm -rf $SYS/product/app/Gmail
+    rm -rf $SYS/product/app/Gmail2
+    rm -rf $SYS/product/app/GoogleCalendar
+    rm -rf $SYS/product/app/GoogleCloudPrint
+    rm -rf $SYS/product/app/GoogleHangouts
+    rm -rf $SYS/product/app/GoogleKeep
+    rm -rf $SYS/product/app/GoogleLatinIme
+    rm -rf $SYS/product/app/Keep
+    rm -rf $SYS/product/app/NewsstandStub
+    rm -rf $SYS/product/app/PartnerBookmarksProvider
+    rm -rf $SYS/product/app/PrebuiltBugleStub
+    rm -rf $SYS/product/app/PrebuiltKeepStub
+    rm -rf $SYS/product/app/QuickSearchBox
+    rm -rf $SYS/product/app/Vending
+    rm -rf $SYS/product/priv-app/GmsCore
+    rm -rf $SYS/product/priv-app/GmsCore_update
+    rm -rf $SYS/product/priv-app/GoogleHangouts
+    rm -rf $SYS/product/priv-app/GoogleNow
+    rm -rf $SYS/product/priv-app/GoogleSearch
+    rm -rf $SYS/product/priv-app/OneTimeInitializer
+    rm -rf $SYS/product/priv-app/QuickSearchBox
+    rm -rf $SYS/product/priv-app/Velvet_update
+    rm -rf $SYS/product/priv-app/Vending
 
-    # Remove/postinstall 'required' apps (per installer.data)
-    rm -rf /postinstall/system/app/LatinIME/lib//libjni_keyboarddecoder.so
-    rm -rf /postinstall/system/app/LatinIME/lib//libjni_latinimegoogle.so
-    rm -rf /postinstall/system/lib/libjni_keyboarddecoder.so
-    rm -rf /postinstall/system/lib/libjni_latinimegoogle.so
-    rm -rf /postinstall/system/lib64/libjni_keyboarddecoder.so
-    rm -rf /postinstall/system/lib64/libjni_latinimegoogle.so
+    # Remove 'priv-app' apps from 'app' (per installer.data)
+    rm -rf $SYS/app/CanvasPackageInstaller
+    rm -rf $SYS/app/ConfigUpdater
+    rm -rf $SYS/app/GoogleBackupTransport
+    rm -rf $SYS/app/GoogleFeedback
+    rm -rf $SYS/app/GoogleLoginService
+    rm -rf $SYS/app/GoogleOneTimeInitializer
+    rm -rf $SYS/app/GooglePartnerSetup
+    rm -rf $SYS/app/GoogleServicesFramework
+    rm -rf $SYS/app/OneTimeInitializer
+    rm -rf $SYS/app/Phonesky
+    rm -rf $SYS/app/PrebuiltGmsCore
+    rm -rf $SYS/app/SetupWizard
+    rm -rf $SYS/app/Velvet
+    rm -rf $SYS/product/app/CanvasPackageInstaller
+    rm -rf $SYS/product/app/ConfigUpdater
+    rm -rf $SYS/product/app/GoogleBackupTransport
+    rm -rf $SYS/product/app/GoogleFeedback
+    rm -rf $SYS/product/app/GoogleLoginService
+    rm -rf $SYS/product/app/GoogleOneTimeInitializer
+    rm -rf $SYS/product/app/GooglePartnerSetup
+    rm -rf $SYS/product/app/GoogleServicesFramework
+    rm -rf $SYS/product/app/OneTimeInitializer
+    rm -rf $SYS/product/app/Phonesky
+    rm -rf $SYS/product/app/PrebuiltGmsCore
+    rm -rf $SYS/product/app/SetupWizard
+    rm -rf $SYS/product/app/Velvet
+
+    # Remove 'required' apps (per installer.data)
+    rm -rf $SYS/app/LatinIME/lib//libjni_keyboarddecoder.so
+    rm -rf $SYS/app/LatinIME/lib//libjni_latinimegoogle.so
+    rm -rf $SYS/lib/libjni_keyboarddecoder.so
+    rm -rf $SYS/lib/libjni_latinimegoogle.so
+    rm -rf $SYS/lib64/libjni_keyboarddecoder.so
+    rm -rf $SYS/lib64/libjni_latinimegoogle.so
+    rm -rf $SYS/product/app/LatinIME/lib//libjni_keyboarddecoder.so
+    rm -rf $SYS/product/app/LatinIME/lib//libjni_latinimegoogle.so
+    rm -rf $SYS/product/lib/libjni_keyboarddecoder.so
+    rm -rf $SYS/product/lib/libjni_latinimegoogle.so
+    rm -rf $SYS/product/lib64/libjni_keyboarddecoder.so
+    rm -rf $SYS/product/lib64/libjni_latinimegoogle.so
 
     # Remove 'user requested' apps (from gapps-config)
-    # Stub
+
   ;;
   post-restore)
-    if [ -d "/postinstall" ]; then
-      P="/postinstall/system"
-    else
-      P="/system"
-    fi
-
     # Recreate required symlinks (from GApps Installer)
-    install -d "$P/app/MarkupGoogle/lib/arm64"
-    ln -sfn "$P/lib64/libsketchology_native.so" "$P/app/MarkupGoogle/lib/arm64/libsketchology_native.so"
-    install -d "$P/app/FaceLock/lib/arm64"
-    ln -sfn "$P/lib64/libfacenet.so" "$P/app/FaceLock/lib/arm64/libfacenet.so"
-    install -d "$P/app/LatinIME/lib64/arm64"
-    ln -sfn "$P/lib64/libjni_latinimegoogle.so" "$P/app/LatinIME/lib64/arm64/libjni_latinimegoogle.so"
-    ln -sfn "$P/lib64/libjni_keyboarddecoder.so" "$P/app/LatinIME/lib64/arm64/libjni_keyboarddecoder.so"
+    install -d "$SYS/app/MarkupGoogle/lib/arm64"
+    ln -sfn "$SYS/lib64/libsketchology_native.so" "$SYS/app/MarkupGoogle/lib/arm64/libsketchology_native.so"
+    install -d "$SYS/app/LatinIME/lib64/arm64"
+    ln -sfn "$SYS/product/lib64/libjni_latinimegoogle.so" "$SYS/product/app/LatinIME/lib64/arm64/libjni_latinimegoogle.so"
+    ln -sfn "$SYS/product/lib64/libjni_keyboarddecoder.so" "$SYS/product/app/LatinIME/lib64/arm64/libjni_keyboarddecoder.so"
+    ln -sfn "$SYS/lib64/libjni_latinimegoogle.so" "$SYS/app/LatinIME/lib64/arm64/libjni_latinimegoogle.so"
+    ln -sfn "$SYS/lib64/libjni_keyboarddecoder.so" "$SYS/app/LatinIME/lib64/arm64/libjni_keyboarddecoder.so"
 
     # Apply build.prop changes (from GApps Installer)
-    sed -i "s/ro.error.receiver.system.apps=.*/ro.error.receiver.system.apps=com.google.android.gms/g" /system/system/build.prop
+    sed -i "s/ro.error.receiver.system.apps=.*/ro.error.receiver.system.apps=com.google.android.gms/g" $SYS/build.prop
 
     # Re-pre-ODEX APKs (from GApps Installer)
 
     # Remove any empty folders we may have created during the removal process
-    for i in /system/app /system/priv-app /system/usr/srec; do
+    for i in $SYS/app $SYS/priv-app $SYS/vendor/pittpatt $SYS/usr/srec; do
       if [ -d $i ]; then
-        find $i -type d -exec rmdir -p '{}' \+ 2>/dev/null;
+        find $i -type d -exec rmdir -p '{}' \+ 2>/dev/null
       fi
-    done;
-    for i in $(list_files); do
-      chown root:root "$P/$i"
-      chmod 644 "$P/$i"
-      chmod 755 "$(dirname "$P/$i")"
-        if [ "$API" -ge "26" ]; then # Android 8.0+ uses 0600 for its permission on build.prop
-          chmod 600 /system/build.prop
-        fi
     done
 
+    # Fix ownership/permissions and clean up after backup and restore from /sdcard
+    find $SYS/vendor/pittpatt -type d -exec chown 0:2000 '{}' \; 2>/dev/null # Change pittpatt folders to root:shell per Google Factory Settings
+    for i in $(list_files); do
+      chown root:root "$SYS/$i"
+      chmod 644 "$SYS/$i"
+      chmod 755 "$(dirname "$SYS/$i")" "$(dirname "$SYS/$i")/../"
+      case $i in
+        */overlay/*) chcon -h u:object_r:vendor_overlay_file:s0 "$SYS/$i";;
+      esac
+    done
+
+    umount /product /vendor 2> /dev/null
+
+    if [ "$rom_build_sdk" -ge "26" ]; then # Android 8.0+ uses 0600 for its permission on build.prop
+      chmod 600 "$SYS/build.prop"
+    fi
+    rm -rf /sdcard/tmp-gapps
   ;;
 esac
diff --git a/sepolicy/private/update_engine.te b/sepolicy/private/update_engine.te
index 81873ed..4e4f94b 100644
--- a/sepolicy/private/update_engine.te
+++ b/sepolicy/private/update_engine.te
@@ -15,7 +15,7 @@
 allow update_engine system_data_file:file { create read write open unlink };
 allow update_engine system_data_file:dir { create write add_name read remove_name unlink };
 
-allow update_engine system_file:file { create setattr write relabelto relabelfrom rx_file_perms unlink };
+allow update_engine system_file:file { create setattr write relabelto relabelfrom rename rx_file_perms unlink };
 allow update_engine system_file:dir { create setattr write rmdir remove_name add_name setattr };
 
 allow update_engine storage_file:lnk_file read;
@@ -24,10 +24,16 @@
 allow update_engine sepolicy_file:file { append };
 
 allow update_engine gsi_metadata_file:dir search;
-allow update_engine metadata_file:dir search;
-allow update_engine rootfs:file { create write };
+allow update_engine metadata_file:dir { getattr search };
+allow update_engine rootfs:file { append create write };
 #####
 allow update_engine proc_filesystems:file { getattr open read };
 allow update_engine system_file:lnk_file { create rename };
 allow update_engine system_lib_file:dir { add_name setattr write };
+allow update_engine system_lib_file:file { create relabelfrom setattr write };
 
+#allow update_engine vendor_overlay_file:dir { getattr search };
+allow update_engine vendor_overlay_file:file { getattr read };
+allow update_engine linkerconfig_file:dir { getattr };
+allow update_engine bt_firmware_file:dir { getattr search};
+allow update_engine update_engine:capability { kill };