Compare commits
12 commits
fe761b6560
...
b591179d67
Author | SHA1 | Date | |
---|---|---|---|
Peter Cai | b591179d67 | ||
Peter Cai | b9fb2010ee | ||
Peter Cai | c935edd3d8 | ||
Peter Cai | 3c0173bcc1 | ||
Peter Cai | 8bb3c4bb3d | ||
Peter Cai | 9bee6c0d9e | ||
Peter Cai | cdd0128b5b | ||
Peter Cai | a426233cb6 | ||
bfc4cd8de6 | |||
Peter Cai | 15872eb9da | ||
Peter Cai | ad6573714d | ||
3d5b846424 |
12
cmds/Android.bp
Normal file
12
cmds/Android.bp
Normal file
|
@ -0,0 +1,12 @@
|
|||
cc_binary {
|
||||
name: "aguiledbeltctl",
|
||||
system_ext_specific: true,
|
||||
srcs: [
|
||||
"aguiledbeltctl.cpp",
|
||||
],
|
||||
shared_libs: [
|
||||
"vendor.mediatek.hardware.aguiledbelt@1.0",
|
||||
"libutils",
|
||||
"libhidlbase",
|
||||
],
|
||||
}
|
62
cmds/aguiledbeltctl.cpp
Normal file
62
cmds/aguiledbeltctl.cpp
Normal file
|
@ -0,0 +1,62 @@
|
|||
// vim: expandtab tabstop=4 shiftwidth=4
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
#include <vendor/mediatek/hardware/aguiledbelt/1.0/IAguiLedBeltLight.h>
|
||||
#include <vendor/mediatek/hardware/aguiledbelt/1.0/types.h>
|
||||
|
||||
using namespace ::vendor::mediatek::hardware::aguiledbelt::V1_0;
|
||||
|
||||
void print_usage() {
|
||||
std::cerr << "Usage: aguiledbeltctl <light_bit_field> <r> <g> <b> <brightness>" << std::endl;
|
||||
std::cerr << " aguiledbeltctl clear" << std::endl;
|
||||
std::cerr << std::endl;
|
||||
std::cerr << "<light_bit_field> should be a binary string where each bit (0 or 1) corresponds to the ON state of each physical light belt" << std::endl;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
auto service = IAguiLedBeltLight::getService();
|
||||
|
||||
if (argc <= 1) {
|
||||
print_usage();
|
||||
return -1;
|
||||
}
|
||||
|
||||
std::string arg1(argv[1]);
|
||||
|
||||
if (arg1 == "clear") {
|
||||
service->setLedBeltAlwaysOnState(0, 0, 0, false);
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint32_t light_id = std::stoi(std::string(argv[1]), nullptr, 2);
|
||||
|
||||
if (light_id > 31) {
|
||||
std::cerr << "First argument should be a bit field with each bit corresponding to one physical light belt" << std::endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (argc < 6) {
|
||||
print_usage();
|
||||
return -1;
|
||||
}
|
||||
|
||||
uint32_t r = std::stoi(std::string(argv[2]));
|
||||
uint32_t g = std::stoi(std::string(argv[3]));
|
||||
uint32_t b = std::stoi(std::string(argv[4]));
|
||||
|
||||
if (r > 255 || g > 255 || b > 255) {
|
||||
std::cerr << "Color channels must be bewteen 0 and 255" << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
uint32_t brightness = std::stoi(std::string(argv[5]));
|
||||
|
||||
if (brightness > 100) {
|
||||
std::cerr << "Brightness must be between 0 and 100" << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
service->setLedBeltAlwaysOnState(light_id, (r << 16) + (g << 8) + b, brightness, false);
|
||||
return 0;
|
||||
}
|
14
device.mk
14
device.mk
|
@ -48,6 +48,10 @@ PRODUCT_COPY_FILES += \
|
|||
PRODUCT_PACKAGES += \
|
||||
OpenEUICC
|
||||
|
||||
# Telecom API (Phone Accounts, etc.)
|
||||
PRODUCT_COPY_FILES += \
|
||||
frameworks/native/data/etc/android.software.telecom.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/permissions/android.software.telecom.xml
|
||||
|
||||
# vendor/foss
|
||||
include vendor/foss/foss.mk
|
||||
|
||||
|
@ -67,10 +71,18 @@ PRODUCT_PACKAGES += \
|
|||
|
||||
PRODUCT_COPY_FILES += \
|
||||
device/peter/gsi/bluetooth/audio/config/sysbta_audio_policy_configuration.xml:$(TARGET_COPY_OUT_SYSTEM)/etc/sysbta_audio_policy_configuration.xml \
|
||||
device/peter/gsi/bluetooth/audio/config/sysbta_audio_policy_configuration_7_0.xml:$(TARGET_COPY_OUTY_SYSTEM)/etc/sysbta_audio_policy_configuration_7_0.xml
|
||||
device/peter/gsi/bluetooth/audio/config/sysbta_audio_policy_configuration_7_0.xml:$(TARGET_COPY_OUT_SYSTEM)/etc/sysbta_audio_policy_configuration_7_0.xml
|
||||
|
||||
# QcRilAm service for QCOM in-call audio (packages/apps/QcRilAm)
|
||||
PRODUCT_PACKAGES += \
|
||||
QcRilAm
|
||||
|
||||
# Enable ro.adb.secure on userdebug and user
|
||||
ifeq (,$(filter eng,$(TARGET_BUILD_VARIANT)))
|
||||
PRODUCT_SYSTEM_EXT_PROPERTIES += \
|
||||
ro.adb.secure=1
|
||||
endif
|
||||
|
||||
# Custom commands
|
||||
PRODUCT_PACKAGES += \
|
||||
aguiledbeltctl
|
||||
|
|
|
@ -5,13 +5,16 @@ cc_binary {
|
|||
"init_gsi.cpp",
|
||||
"quirks.cpp",
|
||||
|
||||
// Per-device / SoC preset properties
|
||||
"quirks/preset_props.cpp",
|
||||
|
||||
// SoC-specific quirks
|
||||
"quirks/soc/mtk_ril.cpp",
|
||||
"quirks/soc/mtk_trustkernel.cpp",
|
||||
"quirks/soc/caf_audio.cpp",
|
||||
|
||||
// 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"],
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
#include "quirks.h"
|
||||
|
||||
#include <cstdarg>
|
||||
#include <regex>
|
||||
#include <sstream>
|
||||
#include <vector>
|
||||
|
@ -11,6 +12,19 @@
|
|||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
|
||||
// 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);
|
||||
|
|
|
@ -8,6 +8,9 @@
|
|||
#include <sys/wait.h>
|
||||
#include <unistd.h>
|
||||
|
||||
// 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();
|
||||
|
|
|
@ -1,22 +0,0 @@
|
|||
#include "../../quirks.h"
|
||||
|
||||
#include <android-base/properties.h>
|
||||
|
||||
#include <filesystem>
|
||||
|
||||
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);
|
|
@ -16,7 +16,8 @@ public:
|
|||
Quirks::OverrideFolderWith("/system/usr/keylayout", [](auto p) {
|
||||
Quirks::CopyFileKeepPerms("/system/system_ext/quirks/keylayout/unihertz-fingerprint_key.kl", p / "fingerprint_key.kl");
|
||||
Quirks::CopyFileKeepPerms("/system/system_ext/quirks/keylayout/unihertz-mtk-tpd.kl", p / "mtk-tpd.kl");
|
||||
Quirks::CopyFileKeepPerms("/system/system_ext/quirks/keylayout/unihertz-mtk-tpd-kpd.kl", p / "mtk-tpd-kpd.kl");
|
||||
Quirks::CopyFileKeepPerms("/system/system_ext/quirks/keylayout/unihertz-mtk-tpd.kl", p / "mtk-tpd-kpd.kl");
|
||||
Quirks::CopyFileKeepPerms("/system/system_ext/quirks/keylayout/unihertz-mtk-tpd.kl", p / "cap_touch.kl");
|
||||
Quirks::CopyFileKeepPerms("/system/system_ext/quirks/keylayout/unihertz-mtk-kpd.kl", p / "mtk-kpd.kl");
|
||||
});
|
||||
}
|
||||
|
|
15
init/quirks/preset_props.cpp
Normal file
15
init/quirks/preset_props.cpp
Normal file
|
@ -0,0 +1,15 @@
|
|||
#include "../quirks.h"
|
||||
|
||||
#include <android-base/properties.h>
|
||||
|
||||
// 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"
|
||||
);
|
75
init/quirks/soc/mtk_trustkernel.cpp
Normal file
75
init/quirks/soc/mtk_trustkernel.cpp
Normal file
|
@ -0,0 +1,75 @@
|
|||
#include "../../quirks.h"
|
||||
|
||||
#include <android-base/properties.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <cstdlib>
|
||||
#include <filesystem>
|
||||
#include <optional>
|
||||
#include <string>
|
||||
#include <utility>
|
||||
|
||||
using namespace std;
|
||||
|
||||
#define AVB_PROP_OS_VERSION "com.android.build.boot.os_version"
|
||||
#define AVB_PROP_SPL "com.android.build.boot.security_patch"
|
||||
|
||||
optional<pair<string, string>> try_get_spl() {
|
||||
string boot_part = "/dev/block/by-name/boot" + android::base::GetProperty("ro.boot.slot_suffix", "");
|
||||
|
||||
// Read from AVB footer, https://github.com/TrebleDroid/device_phh_treble/blob/android-13.0/fixSPL/getSPL.c
|
||||
// First read into memory
|
||||
int fd = open(boot_part.c_str(), O_RDONLY);
|
||||
off_t size = lseek(fd, 0, SEEK_END);
|
||||
lseek(fd, 0, SEEK_SET);
|
||||
char *buf = (char *) malloc(size);
|
||||
read(fd, buf, size);
|
||||
|
||||
// Search for AVB footer property directly in the binary
|
||||
char* p = (char *) memmem(buf, size, AVB_PROP_OS_VERSION, sizeof(AVB_PROP_OS_VERSION));
|
||||
if (p == nullptr)
|
||||
return nullopt;
|
||||
|
||||
p += sizeof(AVB_PROP_OS_VERSION);
|
||||
string os_version(p);
|
||||
|
||||
p = (char *) memmem(buf, size, AVB_PROP_SPL, sizeof(AVB_PROP_SPL));
|
||||
if (p == nullptr)
|
||||
return nullopt;
|
||||
|
||||
p += sizeof(AVB_PROP_SPL);
|
||||
string spl(p);
|
||||
|
||||
return make_pair(os_version, spl);
|
||||
}
|
||||
|
||||
class MtkTkQuirk : DeviceQuirk {
|
||||
public:
|
||||
bool ShouldRun() {
|
||||
return filesystem::exists("/proc/tkcore/tkcore_log")
|
||||
// No longer an issue after MediaTek upgraded to KeyMint AIDL services
|
||||
&& !filesystem::exists("/vendor/bin/hw/android.hardware.security.keymint-service.trustkernel");
|
||||
}
|
||||
|
||||
void Run() {
|
||||
android::base::SetProperty("debug.phh.props.ice.trustkernel", "keymaster");
|
||||
android::base::SetProperty("debug.phh.props.teed", "keymaster");
|
||||
android::base::SetProperty("ro.keymaster.brn", "Android");
|
||||
android::base::SetProperty("ro.keymaster.mod", "AOSP on ARM64");
|
||||
|
||||
auto res = try_get_spl();
|
||||
|
||||
if (res) {
|
||||
android::base::SetProperty("ro.keymaster.xxx.release", res->first);
|
||||
android::base::SetProperty("ro.keymaster.xxx.security_patch", res->second);
|
||||
}
|
||||
|
||||
android::base::SetProperty("ctl.restart", "teed");
|
||||
}
|
||||
};
|
||||
|
||||
LOAD_QUIRK(MtkTkQuirk)
|
5
interfaces/Android.bp
Normal file
5
interfaces/Android.bp
Normal file
|
@ -0,0 +1,5 @@
|
|||
hidl_package_root {
|
||||
name: "vendor",
|
||||
path: "device/peter/gsi/interfaces/vendor",
|
||||
}
|
||||
|
16
interfaces/vendor/mediatek/hardware/aguiledbelt/1.0/Android.bp
vendored
Normal file
16
interfaces/vendor/mediatek/hardware/aguiledbelt/1.0/Android.bp
vendored
Normal file
|
@ -0,0 +1,16 @@
|
|||
// This file is autogenerated by hidl-gen -Landroidbp.
|
||||
|
||||
hidl_interface {
|
||||
name: "vendor.mediatek.hardware.aguiledbelt@1.0",
|
||||
root: "vendor",
|
||||
system_ext_specific: true,
|
||||
srcs: [
|
||||
"types.hal",
|
||||
"IAguiLedBeltLight.hal",
|
||||
"ILedBeltLightCallback.hal",
|
||||
],
|
||||
interfaces: [
|
||||
"android.hidl.base@1.0",
|
||||
],
|
||||
gen_java: true,
|
||||
}
|
15
interfaces/vendor/mediatek/hardware/aguiledbelt/1.0/IAguiLedBeltLight.hal
vendored
Normal file
15
interfaces/vendor/mediatek/hardware/aguiledbelt/1.0/IAguiLedBeltLight.hal
vendored
Normal file
|
@ -0,0 +1,15 @@
|
|||
package vendor.mediatek.hardware.aguiledbelt@1.0;
|
||||
|
||||
import vendor.mediatek.hardware.aguiledbelt@1.0::ILedBeltLightCallback;
|
||||
import vendor.mediatek.hardware.aguiledbelt@1.0::LedBeltType;
|
||||
|
||||
interface IAguiLedBeltLight {
|
||||
setLedBeltLightMusicState(uint32_t lightId, uint32_t color, uint32_t brightness, bool isRandom);
|
||||
setLedBeltLightAtomphereState(uint32_t lightId, uint32_t color, uint32_t brightness);
|
||||
setLedBeltLightState(LedBeltType type, uint32_t color, uint32_t brightness);
|
||||
setLedBeltBrightnessState(uint32_t lightId, uint32_t color, uint32_t brightness, bool isRandom);
|
||||
setLedBeltPatternSettingsState(uint32_t lightId, uint32_t color, uint32_t brightness, bool isRandom);
|
||||
setLedBeltAlwaysOnState(uint32_t lightId, uint32_t color, uint32_t brightness, bool isRandom);
|
||||
setCallback(ILedBeltLightCallback callback);
|
||||
setLedBeltChargingState(uint32_t lightId, uint32_t color);
|
||||
};
|
5
interfaces/vendor/mediatek/hardware/aguiledbelt/1.0/ILedBeltLightCallback.hal
vendored
Normal file
5
interfaces/vendor/mediatek/hardware/aguiledbelt/1.0/ILedBeltLightCallback.hal
vendored
Normal file
|
@ -0,0 +1,5 @@
|
|||
package vendor.mediatek.hardware.aguiledbelt@1.0;
|
||||
|
||||
interface ILedBeltLightCallback {
|
||||
onStateChanged(uint32_t id, uint32_t state);
|
||||
};
|
15
interfaces/vendor/mediatek/hardware/aguiledbelt/1.0/types.hal
vendored
Normal file
15
interfaces/vendor/mediatek/hardware/aguiledbelt/1.0/types.hal
vendored
Normal file
|
@ -0,0 +1,15 @@
|
|||
package vendor.mediatek.hardware.aguiledbelt@1.0;
|
||||
|
||||
enum LedBeltType: uint8_t {
|
||||
BATTERY = 0x64,
|
||||
WLR_BATTERY = 0x65,
|
||||
NOTIFICATIONS = 0x66,
|
||||
CALL = 0x67,
|
||||
LIGHT_ID_VOICE_ASSISTANT = 0x68,
|
||||
MUSIC = 0x6b,
|
||||
LIGHT_ID_FLIP = 0x6c,
|
||||
BRIGHTNESS = 0x6e,
|
||||
ATMOSPHERE = 0x6f,
|
||||
PATTERN_SETTINGS = 0x70,
|
||||
ALWAYS_ON = 0x71,
|
||||
};
|
|
@ -64,4 +64,8 @@
|
|||
|
||||
<!-- Suppress Intent Filter Verification Service crashes -->
|
||||
<string translatable="false" name="config_appsNotReportingCrashes">com.android.statementservice</string>
|
||||
|
||||
<!-- The type of the light sensor to be used by the display framework for things like
|
||||
auto-brightness. If unset, then it just gets the default sensor of type TYPE_LIGHT. -->
|
||||
<string name="config_displayLightSensorType" translatable="false">android.sensor.light</string>
|
||||
</resources>
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
# Keylayout for Unihertz devices with capacitive keys
|
||||
# Capacitive navigation
|
||||
key 172 HOME VIRTUAL
|
||||
key 580 APP_SWITCH VIRTUAL
|
||||
key 158 BACK VIRTUAL
|
||||
|
|
@ -4,5 +4,4 @@ LOCAL_PATH := device/peter/gsi/quirks
|
|||
PRODUCT_COPY_FILES += \
|
||||
$(LOCAL_PATH)/keylayout/unihertz-fingerprint_key.kl:$(TARGET_COPY_OUT_SYSTEM_EXT)/quirks/keylayout/unihertz-fingerprint_key.kl \
|
||||
$(LOCAL_PATH)/keylayout/unihertz-mtk-kpd.kl:$(TARGET_COPY_OUT_SYSTEM_EXT)/quirks/keylayout/unihertz-mtk-kpd.kl \
|
||||
$(LOCAL_PATH)/keylayout/unihertz-mtk-tpd-kpd.kl:$(TARGET_COPY_OUT_SYSTEM_EXT)/quirks/keylayout/unihertz-mtk-tpd-kpd.kl \
|
||||
$(LOCAL_PATH)/keylayout/unihertz-mtk-tpd.kl:$(TARGET_COPY_OUT_SYSTEM_EXT)/quirks/keylayout/unihertz-mtk-tpd.kl \
|
||||
|
|
4
sepolicy/private/hal_aguiledbelt_hwservice.te
Normal file
4
sepolicy/private/hal_aguiledbelt_hwservice.te
Normal file
|
@ -0,0 +1,4 @@
|
|||
type hal_aguiledbelt_hwservice, hwservice_manager_type;
|
||||
allow system_app hal_aguiledbelt_hwservice:hwservice_manager { find };
|
||||
type hal_aguiledbelt, domain;
|
||||
allow system_app hal_aguiledbelt:binder { call };
|
4
sepolicy/private/hal_telephony.te
Normal file
4
sepolicy/private/hal_telephony.te
Normal file
|
@ -0,0 +1,4 @@
|
|||
type rild, domain;
|
||||
|
||||
allow system_app hal_telephony_hwservice:hwservice_manager find;
|
||||
allow { rild system_app } { rild system_app }:binder { call transfer };
|
3
sepolicy/private/hwservice_contexts
Normal file
3
sepolicy/private/hwservice_contexts
Normal file
|
@ -0,0 +1,3 @@
|
|||
# HIDL interface for QcRilAm
|
||||
vendor.qti.hardware.radio.am::IQcRilAudio u:object_r:hal_telephony_hwservice:s0
|
||||
vendor.qti.qcril.am::IQcRilAudio u:object_r:hal_telephony_hwservice:s0
|
7
sepolicy/private/keymaster.te
Normal file
7
sepolicy/private/keymaster.te
Normal file
|
@ -0,0 +1,7 @@
|
|||
# Access to fake keymaster SPL/Android version props -- from TrebleDroid
|
||||
get_prop(hal_keymaster, default_prop);
|
||||
get_prop(tee, default_prop);
|
||||
|
||||
get_prop(hal_keymaster, system_prop);
|
||||
|
||||
get_prop(hal_gatekeeper, system_prop);
|
22
sepolicy/private/qcrilam_app.te
Normal file
22
sepolicy/private/qcrilam_app.te
Normal file
|
@ -0,0 +1,22 @@
|
|||
type qcrilam_app, domain;
|
||||
|
||||
app_domain(qcrilam_app)
|
||||
|
||||
# Needed to get access to /data/data/com.sony.qcrilam
|
||||
# Only getattr and search are requested since qcrilam does not write to its own directory
|
||||
# /data/data/com.sony.qcrilam only has two empty subdirs
|
||||
dontaudit qcrilam_app app_data_file:dir { getattr search };
|
||||
|
||||
# Access services that should be available to all apps
|
||||
allow qcrilam_app app_api_service:service_manager find;
|
||||
|
||||
# Find media.audio_flinger
|
||||
allow qcrilam_app audioserver_service:service_manager find;
|
||||
# Find isub
|
||||
allow qcrilam_app radio_service:service_manager find;
|
||||
|
||||
# Find the vendor.qti.hardware.radio.am::IQcRilAudio HIDL service
|
||||
# And grant binder access to the host (`rild`)
|
||||
hal_client_domain(qcrilam_app, hal_telephony)
|
||||
|
||||
allow qcrilam_app cgroup:file w_file_perms;
|
1
sepolicy/private/seapp_contexts
Normal file
1
sepolicy/private/seapp_contexts
Normal file
|
@ -0,0 +1 @@
|
|||
user=_app seinfo=platform name=com.sony.qcrilam domain=qcrilam_app type=app_data_file
|
Loading…
Reference in a new issue