diff --git a/device.mk b/device.mk index 9e2d330..6296c8d 100644 --- a/device.mk +++ b/device.mk @@ -13,6 +13,9 @@ $(call inherit-product, device/generic/common/gsi_product.mk) # Special settings for GSI releasing $(call inherit-product, $(SRC_TARGET_DIR)/product/gsi_release.mk) +# This is whitelisted by product name -- unset it +PRODUCT_INSTALL_DEBUG_POLICY_TO_SYSTEM_EXT := + # Enable dynamically-sized images PRODUCT_USE_DYNAMIC_PARTITION_SIZE := true @@ -35,6 +38,17 @@ PRODUCT_PACKAGES += \ # Quirks include device/peter/gsi/quirks/quirks.mk +# Euicc -- enabled by default, won't work without eSIM slot definition anyway +PRODUCT_COPY_FILES += \ + frameworks/native/data/etc/android.hardware.telephony.euicc.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/permissions/android.hardware.telephony.euicc.xml + +PRODUCT_PACKAGES += \ + OpenEUICC + +# vendor/foss +PRODUCT_PACKAGES += \ + UnifiedNlp + # Enable ro.adb.secure on userdebug and user ifeq (,$(filter eng,$(TARGET_BUILD_VARIANT))) PRODUCT_SYSTEM_EXT_PROPERTIES += \ diff --git a/init/Android.bp b/init/Android.bp index aaca8b4..3bfacd2 100644 --- a/init/Android.bp +++ b/init/Android.bp @@ -7,6 +7,7 @@ cc_binary { // SoC-specific quirks "quirks/soc/mtk_ril.cpp", + "quirks/soc/caf_audio.cpp", // Device-specific quirks "quirks/device/unihertz_keylayout.cpp", diff --git a/init/init_gsi.cpp b/init/init_gsi.cpp index b278821..c910fb7 100644 --- a/init/init_gsi.cpp +++ b/init/init_gsi.cpp @@ -58,8 +58,13 @@ void handle_device_model_props() { override_ro_prop("ro", "", "build.version.real_security_patch", spl_orig); } -int main() { - handle_device_model_props(); - Quirks::Run(); +int main(int argc, char **argv) { + if (argc >= 2 && strcmp(argv[1], "--late-init") == 0) { + // Reset SPL / device model related props during late init + // so that they are set before keystore / vold is started. + handle_device_model_props(); + } else { + Quirks::Run(); + } return 0; } diff --git a/init/init_gsi.rc b/init/init_gsi.rc index 84829c8..9e572e2 100644 --- a/init/init_gsi.rc +++ b/init/init_gsi.rc @@ -1,2 +1,8 @@ +on late-init + exec u:r:init_gsi:s0 root -- /system_ext/bin/init_gsi --late-init + on post-fs exec u:r:init_gsi:s0 root -- /system_ext/bin/init_gsi + +on property:persist.sys.gsi.hw.mainkeys=* + setprop qemu.hw.mainkeys ${persist.sys.gsi.hw.mainkeys} diff --git a/init/quirks.cpp b/init/quirks.cpp index bb40d26..fa74ec4 100644 --- a/init/quirks.cpp +++ b/init/quirks.cpp @@ -87,6 +87,16 @@ void Quirks::CopyFileKeepPerms(filesystem::path src, filesystem::path dst) { RestoreFilePermissions(src, dst); } +int Quirks::OverrideWithBindMount(filesystem::path src, filesystem::path dst) { + int err = mount(src.c_str(), dst.c_str(), nullptr, MS_BIND, nullptr); + + if (err < 0) { + ALOGE("bind mount %s on %s err = %d\n", src.c_str(), dst.c_str(), errno); + } + + return err; +} + void Quirks::OverrideFileWith(filesystem::path p, function proc) { if (!filesystem::is_regular_file(p)) return; @@ -108,10 +118,9 @@ void Quirks::OverrideFileWith(filesystem::path p, function proc); void OverrideFileReplaceSubstr(filesystem::path p, string pattern, string replacement); diff --git a/init/quirks/soc/caf_audio.cpp b/init/quirks/soc/caf_audio.cpp new file mode 100644 index 0000000..89a31ae --- /dev/null +++ b/init/quirks/soc/caf_audio.cpp @@ -0,0 +1,27 @@ +#include "../../quirks.h" + +#include + +#include + +using namespace std; + +class CafAudioQuirk : DeviceQuirk { +public: + bool ShouldRun() { + return filesystem::exists("/vendor/etc/audio/audio_policy_configuration.xml"); + } + + void Run() { + Quirks::OverrideWithBindMount("/vendor/etc/audio/audio_policy_configuration.xml", "/vendor/etc/audio_policy_configuration.xml"); + if (filesystem::exists("/vendor/etc/a2dp_audio_policy_configuration.xml")) { + Quirks::OverrideFileReplaceSubstr("/vendor/etc/a2dp_audio_policy_configuration.xml", "bluetooth_qti", "a2dp"); + } + + // Disable A2DP offload on qcom + android::base::SetProperty("persist.bluetooth.a2dp_offload.disabled", "true"); + android::base::SetProperty("persist.bluetooth.bluetooth_audio_hal.disabled", "true"); + } +}; + +LOAD_QUIRK(CafAudioQuirk); diff --git a/sepolicy/private/qualcomm.te b/sepolicy/private/qualcomm.te new file mode 100644 index 0000000..9ccb730 --- /dev/null +++ b/sepolicy/private/qualcomm.te @@ -0,0 +1,5 @@ +type vendor_qmipriod, domain; +type vendor_qmipriod_data_file, file_type, data_file_type; + +r_dir_file(vendor_qmipriod, vendor_qmipriod_data_file); +allow vendor_qmipriod vendor_qmipriod_data_file:file w_file_perms; diff --git a/system.prop b/system.prop index 4023a69..837843e 100644 --- a/system.prop +++ b/system.prop @@ -10,3 +10,5 @@ persist.dbg.volte_avail_ovr=1 persist.dbg.vt_avail_ovr=1 persist.dbg.wfc_avail_ovr=1 persist.dbg.allow_ims_off=1 +# Enable hw keys by default (unless overridden by user) +persist.sys.gsi.hw.mainkeys=0