commit ded86fe0635eadb6425d393a2d8e7d6df057ac81 Author: Claudio Maradonna Date: Tue Oct 27 18:46:46 2020 +0100 First commit. diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..77749cc --- /dev/null +++ b/.gitattributes @@ -0,0 +1,8 @@ +# Declare files that will always have LF line endings on checkout. +META-INF/** text eol=lf +common/** text eol=lf +module.prop text eol=lf +changelog.txt text eol=lf + +# Denote all files that are truly binary and should not be modified. +system/** binary diff --git a/META-INF/com/google/android/update-binary b/META-INF/com/google/android/update-binary new file mode 100644 index 0000000..1fe91b0 --- /dev/null +++ b/META-INF/com/google/android/update-binary @@ -0,0 +1,321 @@ +#!/sbin/sh + +########################################################################################## +# Functions +########################################################################################## + +ui_print() { + if ($BOOTMODE); then + echo "$1" + else + echo -n -e "ui_print $1\n" >> /proc/self/fd/$OUTFD + echo -n -e "ui_print\n" >> /proc/self/fd/$OUTFD + fi +} + +grep_prop() { + REGEX="s/^$1=//p" + shift + FILES=$@ + if [ -z "$FILES" ]; then + FILES='/system/build.prop' + fi + cat $FILES 2>/dev/null | sed -n $REGEX | head -n 1 +} + +is_mounted() { + if [ ! -z "$2" ]; then + cat /proc/mounts | grep $1 | grep $2, >/dev/null + else + cat /proc/mounts | grep $1 >/dev/null + fi + return $? +} + +mount_image() { + if [ ! -d "$2" ]; then + mkdir -p $2 2>/dev/null + chmod 755 $2 + [ ! -d "$2" ] && return 1 + fi + if (! is_mounted $2); then + LOOPDEVICE= + for LOOP in 0 1 2 3 4 5 6 7; do + if (! is_mounted $2); then + LOOPDEVICE=/dev/block/loop$LOOP + if [ ! -f "$LOOPDEVICE" ]; then + mknod $LOOPDEVICE b 7 $LOOP + fi + losetup $LOOPDEVICE $1 + if [ "$?" -eq "0" ]; then + mount -t ext4 -o loop $LOOPDEVICE $2 + if (! is_mounted $2); then + /system/bin/toolbox mount -t ext4 -o loop $LOOPDEVICE $2 + fi + if (! is_mounted $2); then + /system/bin/toybox mount -t ext4 -o loop $LOOPDEVICE $2 + fi + fi + if (is_mounted $2); then + ui_print "- Mounting $1 to $2" + break; + fi + fi + done + fi +} + +set_perm() { + chown $2:$3 $1 || exit 1 + chmod $4 $1 || exit 1 + if [ "$5" ]; then + chcon $5 $1 2>/dev/null + else + chcon 'u:object_r:system_file:s0' $1 2>/dev/null + fi +} + +set_perm_recursive() { + find $1 -type d 2>/dev/null | while read dir; do + set_perm $dir $2 $3 $4 $6 + done + find $1 -type f 2>/dev/null | while read file; do + set_perm $file $2 $3 $5 $6 + done +} + +mktouch() { + mkdir -p ${1%/*} + if [ -z "$2" ]; then + touch $1 + else + echo $2 > $1 + fi + chmod 644 $1 +} + +payload_size_check() { + reqSizeM=0; + for entry in $(unzip -l "$@" 2>/dev/null | tail -n +4 | awk '{ print $1 }'); do + test $entry != "--------" && reqSizeM=$((reqSizeM + entry)) || break; + done; + test $reqSizeM -lt 1048576 && reqSizeM=1 || reqSizeM=$((reqSizeM / 1048576)); +} + +target_size_check() { + e2fsck -p -f $1 + curBlocks=`e2fsck -n $1 2>/dev/null | cut -d, -f3 | cut -d\ -f2`; + curUsedM=$((`echo "$curBlocks" | cut -d/ -f1` * 4 / 1024)); + curSizeM=$((`echo "$curBlocks" | cut -d/ -f2` * 4 / 1024)); + curFreeM=$((curSizeM - curUsedM)); +} + +########################################################################################## +# Flashable update-binary preparation +########################################################################################## + +OUTFD=$2 +ZIP=$3 + +readlink /proc/$$/fd/$OUTFD 2>/dev/null | grep /tmp >/dev/null +if [ "$?" -eq "0" ]; then + OUTFD=0 + + for FD in `ls /proc/$$/fd`; do + readlink /proc/$$/fd/$FD 2>/dev/null | grep pipe >/dev/null + if [ "$?" -eq "0" ]; then + ps | grep " 3 $FD " | grep -v grep >/dev/null + if [ "$?" -eq "0" ]; then + OUTFD=$FD + break + fi + fi + done +fi + +if [ -z "$BOOTMODE" ]; then + BOOTMODE=false +fi + +if ($BOOTMODE) && (! is_mounted /magisk); then + ui_print "! Magisk is not activated!... abort" + exit 1 +fi + +# Fix SuperSU..... +($BOOTMODE) && /data/magisk/sepolicy-inject -s fsck --live + +TMPDIR=/tmp +MOUNTPATH=/magisk +IMGNAME=magisk.img + +if ($BOOTMODE); then + TMPDIR=/dev/tmp + MOUNTPATH=/dev/magisk_merge + IMGNAME=magisk_merge.img +fi + +mkdir -p $TMPDIR 2>/dev/null +cd $TMPDIR +unzip -o "$ZIP" config.sh + +if [ ! -f "config.sh" ]; then + ui_print "! Failed: Unable to extract zip file!" + exit 1 +fi + +source config.sh + +INSTALLER=$TMPDIR/$MODID +MODPATH=$MOUNTPATH/$MODID + +mkdir -p $INSTALLER +cd $INSTALLER +unzip -o "$ZIP" "common/*" module.prop + +########################################################################################## +# Main +########################################################################################## + +# Print mod name +print_modname + +# Please leave this message in your flashable zip for credits :) +ui_print "******************************" +ui_print "Powered by Magisk (@topjohnwu)" +ui_print "******************************" + +ui_print "- Mounting /system(ro), /vendor(ro), /data, /cache" +mount -o ro /system 2>/dev/null +mount -o ro /vendor 2>/dev/null +mount /data 2>/dev/null +mount /cache 2>/dev/null + +if [ ! -f '/system/build.prop' ]; then + ui_print "! Failed: /system could not be mounted!" + exit 1 +fi + +API=$(grep_prop ro.build.version.sdk) +ABI=$(grep_prop ro.product.cpu.abi | cut -c-3) +ABI2=$(grep_prop ro.product.cpu.abi2 | cut -c-3) +ABILONG=$(grep_prop ro.product.cpu.abi) + +ARCH=arm +IS64BIT=false +if [ "$ABI" = "x86" ]; then ARCH=x86; fi; +if [ "$ABI2" = "x86" ]; then ARCH=x86; fi; +if [ "$ABILONG" = "arm64-v8a" ]; then ARCH=arm64; IS64BIT=true; fi; +if [ "$ABILONG" = "x86_64" ]; then ARCH=x64; IS64BIT=true; fi; + +# You can get the Android API version from $API, the CPU architecture from $ARCH +# Useful if you are creating Android version / platform dependent mods + +IMG= +if (is_mounted /data); then + IMG=/data/$IMGNAME + if [ ! -f "/data/magisk.img" ]; then + ui_print "! Magisk is not installed!" + ui_print "! Magisk is required for this mod!" + exit 1 + fi +else + IMG=/cache/magisk.img + ui_print " " + ui_print "***********************************" + ui_print "* !! Data unavailible !! *" + ui_print "* Magisk detection is impossible *" + ui_print "* Installation will still proceed *" + ui_print "* But please make sure you have *" + ui_print "* Magisk installed!! *" + ui_print "***********************************" + ui_print " " +fi + +payload_size_check "$ZIP" "*" + +if [ -f "$IMG" ]; then + ui_print "- $IMG detected!" + target_size_check $IMG + if [ "$reqSizeM" -gt "$curFreeM" ]; then + SIZE=$((((reqSizeM + curUsedM) / 32 + 2) * 32)) + ui_print "- Resizing $IMG to ${SIZE}M..." + resize2fs $IMG ${SIZE}M + fi +else + SIZE=$(((reqSizeM / 32 + 2) * 32)); + ui_print "- Creating $IMG with size ${SIZE}M" + make_ext4fs -l ${SIZE}M -a /magisk -S $INSTALLER/common/file_contexts_image $IMG +fi + +mount_image $IMG $MOUNTPATH +if (! is_mounted $MOUNTPATH); then + ui_print "! $IMG mount failed... abort" + exit 1 +fi + +# Create mod paths +rm -rf $MODPATH 2>/dev/null +mkdir -p $MODPATH + +# Copy files +ui_print "- Copying files" +unzip -o "$ZIP" "system/*" -d $MODPATH + +# Handle replace folders +for TARGET in $REPLACE; do + mktouch $MODPATH$TARGET/.replace +done + +# Auto Mount +if ($AUTOMOUNT); then + mktouch $MODPATH/auto_mount +fi + +# prop files +if ($PROPFILE); then + cp -af $INSTALLER/common/system.prop $MODPATH/system.prop +fi + +# Module info +cp -af $INSTALLER/module.prop $MODPATH/module.prop +if ($BOOTMODE); then + # Update info for Magisk Manager + mktouch /magisk/$MODID/update + cp -af $INSTALLER/module.prop /magisk/$MODID/module.prop +fi + +# post-fs-data mode scripts +if ($POSTFSDATA); then + cp -af $INSTALLER/common/post-fs-data.sh $MODPATH/post-fs-data.sh +fi + +# service mode scripts +if ($LATESTARTSERVICE); then + cp -af $INSTALLER/common/service.sh $MODPATH/service.sh +fi + +ui_print "- Setting permissions" +set_permissions + +ui_print "- Unmounting partitions" + +umount $MOUNTPATH +losetup -d $LOOPDEVICE +rmdir $MOUNTPATH + +# Shrink the image if possible +target_size_check $IMG +NEWDATASIZE=$(((curUsedM / 32 + 2) * 32)) +if [ "$curSizeM" -gt "$NEWDATASIZE" ]; then + ui_print "- Shrinking $IMG to ${NEWDATASIZE}M..." + resize2fs $IMG ${NEWDATASIZE}M +fi + +if (! $BOOTMODE); then + umount /system + umount /vendor 2>/dev/null +fi + +ui_print "- Done" +exit 0 diff --git a/META-INF/com/google/android/updater-script b/META-INF/com/google/android/updater-script new file mode 100644 index 0000000..11d5c96 --- /dev/null +++ b/META-INF/com/google/android/updater-script @@ -0,0 +1 @@ +#MAGISK diff --git a/README.md b/README.md new file mode 100644 index 0000000..fe78f56 --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +# Introduction + +This module applies a fix for the audio policy inside /vendor/etc. +More info on: https://gitlab.com/LineageOS/issues/android/-/issues/1805 diff --git a/common/file_contexts_image b/common/file_contexts_image new file mode 100644 index 0000000..ee54edc --- /dev/null +++ b/common/file_contexts_image @@ -0,0 +1 @@ +/magisk(/.*)? u:object_r:system_file:s0 diff --git a/common/post-fs-data.sh b/common/post-fs-data.sh new file mode 100644 index 0000000..426ab83 --- /dev/null +++ b/common/post-fs-data.sh @@ -0,0 +1,7 @@ +#!/system/bin/sh +# Please don't hardcode /magisk/modname/... ; instead, please use $MODDIR/... +# This will make your scripts compatible even if Magisk change its mount point in the future +MODDIR=${0%/*} + +# This script will be executed in post-fs-data mode +# More info in the main Magisk thread diff --git a/common/service.sh b/common/service.sh new file mode 100644 index 0000000..4512417 --- /dev/null +++ b/common/service.sh @@ -0,0 +1,7 @@ +#!/system/bin/sh +# Please don't hardcode /magisk/modname/... ; instead, please use $MODDIR/... +# This will make your scripts compatible even if Magisk change its mount point in the future +MODDIR=${0%/*} + +# This script will be executed in late_start service mode +# More info in the main Magisk thread diff --git a/common/system.prop b/common/system.prop new file mode 100644 index 0000000..3d42789 --- /dev/null +++ b/common/system.prop @@ -0,0 +1,3 @@ +# This file will be read by resetprop +# Example: Change dpi +# ro.sf.lcd_density=320 diff --git a/config.sh b/config.sh new file mode 100644 index 0000000..d9efcd9 --- /dev/null +++ b/config.sh @@ -0,0 +1,101 @@ +########################################################################################## +# +# Magisk +# by topjohnwu +# +# This is a template zip for developers +# +########################################################################################## +########################################################################################## +# +# Instructions: +# +# 1. Place your files into system folder (delete the placeholder file) +# 2. Fill in your module's info into module.prop +# 3. Configure the settings in this file (common/config.sh) +# 4. For advanced features, add shell commands into the script files under common: +# post-fs-data.sh, service.sh +# 5. For changing props, add your additional/modified props into common/system.prop +# +########################################################################################## + +########################################################################################## +# Defines +########################################################################################## + +# NOTE: This part has to be adjusted to fit your own needs + +# This will be the folder name under /magisk +# This should also be the same as the id in your module.prop to prevent confusion +MODID=magisk-module-audio-policy-fix + +# Set to true if you need to enable Magic Mount +# Most mods would like it to be enabled +AUTOMOUNT=true + +# Set to true if you need to load system.prop +PROPFILE=false + +# Set to true if you need post-fs-data script +POSTFSDATA=false + +# Set to true if you need late_start service script +LATESTARTSERVICE=false + +########################################################################################## +# Installation Message +########################################################################################## + +# Set what you want to show when installing your mod + +print_modname() { + ui_print "****************************************" + ui_print " Magisk Module Audio Policy Fix " + ui_print "****************************************" +} + +########################################################################################## +# Replace list +########################################################################################## + +# List all directories you want to directly replace in the system +# By default Magisk will merge your files with the original system +# Directories listed here however, will be directly mounted to the correspond directory in the system + +# You don't need to remove the example below, these values will be overwritten by your own list +# This is an example +REPLACE=" +/system/app/Youtube +/system/priv-app/SystemUI +/system/priv-app/Settings +/system/framework +" + +# Construct your own list here, it will overwrite the example +# !DO NOT! remove this if you don't need to replace anything, leave it empty as it is now +REPLACE=" +" + +########################################################################################## +# Permissions +########################################################################################## + +# NOTE: This part has to be adjusted to fit your own needs + +set_permissions() { + # Default permissions, don't remove them + set_perm_recursive $MODPATH 0 0 0755 0644 + + # Only some special files require specific permissions + # The default permissions should be good enough for most cases + + # Some templates if you have no idea what to do: + + # set_perm_recursive (default: u:object_r:system_file:s0) + # set_perm_recursive $MODPATH/system/lib 0 0 0755 0644 + + # set_perm (default: u:object_r:system_file:s0) + # set_perm $MODPATH/system/bin/app_process32 0 2000 0755 u:object_r:zygote_exec:s0 + # set_perm $MODPATH/system/bin/dex2oat 0 2000 0755 u:object_r:dex2oat_exec:s0 + # set_perm $MODPATH/system/lib/libart.so 0 0 0644 +} diff --git a/module.prop b/module.prop new file mode 100644 index 0000000..57a6f09 --- /dev/null +++ b/module.prop @@ -0,0 +1,6 @@ +id=magisk-module-audio-policy-fix +name=Magisk Module Audio Policy Fix +version=v1 +versionCode=1 +author=unitoo +description=Implement audio/ microphone fix to /vendor/etc diff --git a/system/placeholder b/system/placeholder new file mode 100644 index 0000000..1a69395 --- /dev/null +++ b/system/placeholder @@ -0,0 +1 @@ +This file will be deleted in Magisk Manager, it is only a placeholder for git diff --git a/system/vendor/etc/audio_policy_configuration.xml b/system/vendor/etc/audio_policy_configuration.xml new file mode 100644 index 0000000..868376b --- /dev/null +++ b/system/vendor/etc/audio_policy_configuration.xml @@ -0,0 +1,321 @@ + + + + + + + + + + + + + + + + + Earpiece + Speaker + Telephony Tx + Built-In Mic + Built-In Back Mic + FM Tuner + Telephony Rx + + Speaker + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +