From b591179d67a34ff82b2703ee04c027458f4c088a Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Tue, 22 Aug 2023 05:23:42 -0400 Subject: [PATCH] init_gsi: Add generic mechanism to preset properties --- init/Android.bp | 4 +++- init/init_gsi.cpp | 3 --- init/quirks.cpp | 14 ++++++++++++ init/quirks.h | 17 ++++++++++++++ init/quirks/device/ulefone_power_armor_13.cpp | 22 ------------------- init/quirks/preset_props.cpp | 15 +++++++++++++ 6 files changed, 49 insertions(+), 26 deletions(-) delete mode 100644 init/quirks/device/ulefone_power_armor_13.cpp create mode 100644 init/quirks/preset_props.cpp diff --git a/init/Android.bp b/init/Android.bp index 9074b1b..efdda28 100644 --- a/init/Android.bp +++ b/init/Android.bp @@ -4,6 +4,9 @@ cc_binary { srcs: [ "init_gsi.cpp", "quirks.cpp", + + // Per-device / SoC preset properties + "quirks/preset_props.cpp", // SoC-specific quirks "quirks/soc/mtk_ril.cpp", @@ -12,7 +15,6 @@ cc_binary { // Device-specific quirks "quirks/device/unihertz_keylayout.cpp", - "quirks/device/ulefone_power_armor_13.cpp", ], shared_libs: ["libbase", "libdl", "liblog", "libutils"], static_libs: ["libresetprop", "libc++fs"], diff --git a/init/init_gsi.cpp b/init/init_gsi.cpp index d1fd08a..5e2f3cd 100644 --- a/init/init_gsi.cpp +++ b/init/init_gsi.cpp @@ -9,9 +9,6 @@ using namespace android; using namespace std; -// From libresetprop -extern int setprop(const char *name, const char *value, bool trigger); - void override_ro_prop(string prefix, string source, string postfix, string value) { if (value.length() == 0) return; diff --git a/init/quirks.cpp b/init/quirks.cpp index d3eab5b..7cb6aa6 100644 --- a/init/quirks.cpp +++ b/init/quirks.cpp @@ -3,6 +3,7 @@ #include "quirks.h" +#include #include #include #include @@ -11,6 +12,19 @@ #include #include +// Utility function used with preset properties +void __set_props(int _ignore, ...) { + va_list args; + va_start(args, _ignore); + + while (auto key = va_arg(args, const char*)) { + auto val = va_arg(args, const char*); + setprop(key, val, true); + } + + va_end(args); +} + // Default constructor to add self to the loaded list of quirks DeviceQuirk::DeviceQuirk() { Quirks::Add(this); diff --git a/init/quirks.h b/init/quirks.h index 812346f..c0c1b66 100644 --- a/init/quirks.h +++ b/init/quirks.h @@ -8,6 +8,9 @@ #include #include +// From libresetprop +extern int setprop(const char *name, const char *value, bool trigger); + #define PROP_STARTS_WITH(prop, prefix) \ (android::base::GetProperty(prop, "").rfind(prefix, 0) == 0) #define FP_STARTS_WITH(prefix) \ @@ -37,6 +40,20 @@ public: #define LOAD_QUIRK(NAME) \ static NAME _ignored; +void __set_props(int _ignore, ...); + +#define CONCAT_(x,y) x##y +#define CONCAT(x,y) CONCAT_(x,y) +#define UNIQUE_NAME CONCAT(_unique_name_, __LINE__) + +#define PRESET_PROPS(cond, ...) \ + class UNIQUE_NAME: DeviceQuirk { \ + public: \ + bool ShouldRun() { return cond; } \ + void Run() { __set_props(0, __VA_ARGS__, NULL); } \ + }; \ + static UNIQUE_NAME CONCAT(_ignored, UNIQUE_NAME); + namespace Quirks { void Add(DeviceQuirk* quirk); void Run(); diff --git a/init/quirks/device/ulefone_power_armor_13.cpp b/init/quirks/device/ulefone_power_armor_13.cpp deleted file mode 100644 index 28a689c..0000000 --- a/init/quirks/device/ulefone_power_armor_13.cpp +++ /dev/null @@ -1,22 +0,0 @@ -#include "../../quirks.h" - -#include - -#include - -using namespace std; - -class UlefonePowerArmor13Quirks : DeviceQuirk { -public: - bool ShouldRun() { - return FP_STARTS_WITH("Ulefone/Power_Armor_13/"); - } - - void Run() { - // Set the A2DP offload properties to disabled so legacy policy is loaded - android::base::SetProperty("persist.bluetooth.a2dp_offload.disabled", "true"); - android::base::SetProperty("persist.bluetooth.bluetooth_audio_hal.disabled", "true"); - } -}; - -LOAD_QUIRK(UlefonePowerArmor13Quirks); diff --git a/init/quirks/preset_props.cpp b/init/quirks/preset_props.cpp new file mode 100644 index 0000000..f97473e --- /dev/null +++ b/init/quirks/preset_props.cpp @@ -0,0 +1,15 @@ +#include "../quirks.h" + +#include + +// Disable navbar by default on devices known to have physical keys +PRESET_PROPS( + FP_STARTS_WITH("Unihertz/Jelly") || FP_STARTS_WITH("Unihertz/Atom"), + "persist.sys.gsi.hw.mainkeys", "1" +); + +// Some xiaomi devices: Override default network mode to enable 5G +PRESET_PROPS( + FP_STARTS_WITH("Redmi/gauguin"), + "ro.telephony.default_network", "33,22" +);