Initial unified commit for Android 14, with "light" GSI target
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
From 1a8eee6d2a1d79412902331b74283eec77414c6b Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Sat, 19 Feb 2022 08:20:25 -0500
|
||||
Subject: [PATCH 1/2] Add new mechanism to fake vendor props on a per-process
|
||||
basis
|
||||
|
||||
This reads debug.phh.props.<process name>. If its value is "vendor",
|
||||
then ro.product.device/ro.product.manufacturer is read from vendor
|
||||
---
|
||||
libc/system_properties/system_properties.cpp | 38 ++++++++++++++++++++
|
||||
1 file changed, 38 insertions(+)
|
||||
|
||||
diff --git a/libc/system_properties/system_properties.cpp b/libc/system_properties/system_properties.cpp
|
||||
index 1cb15c3df..d6e7e3e68 100644
|
||||
--- a/libc/system_properties/system_properties.cpp
|
||||
+++ b/libc/system_properties/system_properties.cpp
|
||||
@@ -35,6 +35,7 @@
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
+#include <fcntl.h>
|
||||
|
||||
#include <new>
|
||||
|
||||
@@ -50,6 +51,32 @@
|
||||
#define SERIAL_DIRTY(serial) ((serial)&1)
|
||||
#define SERIAL_VALUE_LEN(serial) ((serial) >> 24)
|
||||
|
||||
+static char comm[128];
|
||||
+static bool self_ok = false;
|
||||
+static char comm_override[PROP_VALUE_MAX];
|
||||
+
|
||||
+static void read_self() {
|
||||
+ //NB: Not atomic, but should be good enough, there is no possible corruption from concurrency
|
||||
+ if(self_ok) return;
|
||||
+ self_ok = true;
|
||||
+
|
||||
+ int fd = open("/proc/self/comm", O_RDONLY);
|
||||
+ if(fd<0) return;
|
||||
+ read(fd, comm, sizeof(comm)-1);
|
||||
+ for(unsigned i=0; i<sizeof(comm); i++)
|
||||
+ if(comm[i] == '\n')
|
||||
+ comm[i] = 0;
|
||||
+ close(fd);
|
||||
+
|
||||
+ //That's calling ourselves but that's fine because we already have self_ok = true
|
||||
+ char propName[PROP_NAME_MAX];
|
||||
+ memset(propName, 0, PROP_NAME_MAX);
|
||||
+ strncpy(propName, "debug.phh.props.", PROP_NAME_MAX - 1);
|
||||
+ strncat(propName, comm, PROP_NAME_MAX - 1);
|
||||
+
|
||||
+ __system_property_get(propName, comm_override);
|
||||
+}
|
||||
+
|
||||
static bool is_dir(const char* pathname) {
|
||||
struct stat info;
|
||||
if (stat(pathname, &info) == -1) {
|
||||
@@ -216,6 +243,17 @@ void SystemProperties::ReadCallback(const prop_info* pi,
|
||||
}
|
||||
|
||||
int SystemProperties::Get(const char* name, char* value) {
|
||||
+ read_self();
|
||||
+ if(strcmp(comm_override, "vendor") == 0) {
|
||||
+ if(strcmp(name, "ro.product.device") == 0) {
|
||||
+ int r = Get("ro.product.vendor.device", value);
|
||||
+ if(r>0) return r;
|
||||
+ }
|
||||
+ if(strcmp(name, "ro.product.manufacturer") == 0) {
|
||||
+ int r = Get("ro.product.vendor.manufacturer", value);
|
||||
+ if(r>0) return r;
|
||||
+ }
|
||||
+ }
|
||||
const prop_info* pi = Find(name);
|
||||
|
||||
if (pi != nullptr) {
|
||||
--
|
||||
2.34.1
|
||||
|
||||
145
patches_treble/bionic/0002-Rework-property-overriding.patch
Normal file
145
patches_treble/bionic/0002-Rework-property-overriding.patch
Normal file
@@ -0,0 +1,145 @@
|
||||
From ad25fd64270b2c3dc9fbce5e97c2eb75d63f015b Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Thu, 19 Jan 2023 16:44:01 -0500
|
||||
Subject: [PATCH 2/2] Rework property overriding
|
||||
|
||||
- Support property read with callback in addition to previous
|
||||
constant-size property_get
|
||||
- Add another class of redirect "keymaster", to redirect to AOSP/GSI
|
||||
props + SPL based on boot.img
|
||||
---
|
||||
libc/system_properties/system_properties.cpp | 77 +++++++++++++++-----
|
||||
1 file changed, 58 insertions(+), 19 deletions(-)
|
||||
|
||||
diff --git a/libc/system_properties/system_properties.cpp b/libc/system_properties/system_properties.cpp
|
||||
index d6e7e3e68..40ff48bad 100644
|
||||
--- a/libc/system_properties/system_properties.cpp
|
||||
+++ b/libc/system_properties/system_properties.cpp
|
||||
@@ -35,6 +35,7 @@
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
+#include <string.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
#include <new>
|
||||
@@ -60,23 +61,70 @@ static void read_self() {
|
||||
if(self_ok) return;
|
||||
self_ok = true;
|
||||
|
||||
- int fd = open("/proc/self/comm", O_RDONLY);
|
||||
+ char cmdline[128];
|
||||
+ int fd = open("/proc/self/cmdline", O_RDONLY);
|
||||
if(fd<0) return;
|
||||
- read(fd, comm, sizeof(comm)-1);
|
||||
- for(unsigned i=0; i<sizeof(comm); i++)
|
||||
- if(comm[i] == '\n')
|
||||
- comm[i] = 0;
|
||||
+ read(fd, cmdline, sizeof(cmdline)-1);
|
||||
+ for(unsigned i=0; i<sizeof(cmdline); i++)
|
||||
+ if(cmdline[i] == '\n')
|
||||
+ cmdline[i] = 0;
|
||||
close(fd);
|
||||
|
||||
+ // Truncate to last /, we don't want `/` in the prop
|
||||
+ const char *c = strrchr(cmdline, '/');
|
||||
+ if (c != nullptr) {
|
||||
+ c = c+1;
|
||||
+ } else {
|
||||
+ c = cmdline;
|
||||
+ }
|
||||
+ // Take only the last 16 bytes (prop names max is 32)
|
||||
+ if(strlen(c) < 15) {
|
||||
+ strcpy(comm, c);
|
||||
+ } else {
|
||||
+ strcpy(comm, c + strlen(c) - 15);
|
||||
+ }
|
||||
+
|
||||
+
|
||||
//That's calling ourselves but that's fine because we already have self_ok = true
|
||||
char propName[PROP_NAME_MAX];
|
||||
memset(propName, 0, PROP_NAME_MAX);
|
||||
strncpy(propName, "debug.phh.props.", PROP_NAME_MAX - 1);
|
||||
- strncat(propName, comm, PROP_NAME_MAX - 1);
|
||||
+ strncat(propName, comm, PROP_NAME_MAX - strlen(propName) - 1);
|
||||
|
||||
+ //async_safe_format_log(ANDROID_LOG_WARN, "libc", "Reading debug prop %s", propName);
|
||||
__system_property_get(propName, comm_override);
|
||||
}
|
||||
|
||||
+static const char* redirectToProp(const char *name) {
|
||||
+ read_self();
|
||||
+ /*if(strstr(name, "ro.keymaster") != nullptr || strstr(name, "security_patch") != nullptr || strstr(name, "release") != nullptr) {
|
||||
+ async_safe_format_log(ANDROID_LOG_WARN, "libc", "Process/comm %s/%s is reading %s", comm, comm_override, name);
|
||||
+ }*/
|
||||
+ if(strcmp(comm_override, "vendor") == 0) {
|
||||
+ if(strcmp(name, "ro.product.device") == 0) {
|
||||
+ return "ro.product.vendor.device";
|
||||
+ }
|
||||
+ if(strcmp(name, "ro.product.manufacturer") == 0) {
|
||||
+ return "ro.product.vendor.manufacturer";
|
||||
+ }
|
||||
+ }
|
||||
+ if(strcmp(comm_override, "keymaster") == 0) {
|
||||
+ if(strcmp(name, "ro.product.model") == 0) {
|
||||
+ return "ro.keymaster.mod";
|
||||
+ }
|
||||
+ if(strcmp(name, "ro.product.brand") == 0) {
|
||||
+ return "ro.keymaster.brn";
|
||||
+ }
|
||||
+ if(strcmp(name, "ro.build.version.release") == 0) {
|
||||
+ return "ro.keymaster.xxx.release";
|
||||
+ }
|
||||
+ if(strcmp(name, "ro.build.version.security_patch") == 0) {
|
||||
+ return "ro.keymaster.xxx.security_patch";
|
||||
+ }
|
||||
+ }
|
||||
+ return name;
|
||||
+}
|
||||
+
|
||||
static bool is_dir(const char* pathname) {
|
||||
struct stat info;
|
||||
if (stat(pathname, &info) == -1) {
|
||||
@@ -150,17 +198,19 @@ uint32_t SystemProperties::AreaSerial() {
|
||||
}
|
||||
|
||||
const prop_info* SystemProperties::Find(const char* name) {
|
||||
+ const char* newName = redirectToProp(name);
|
||||
+
|
||||
if (!initialized_) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
- prop_area* pa = contexts_->GetPropAreaForName(name);
|
||||
+ prop_area* pa = contexts_->GetPropAreaForName(newName);
|
||||
if (!pa) {
|
||||
async_safe_format_log(ANDROID_LOG_WARN, "libc", "Access denied finding property \"%s\"", name);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
- return pa->find(name);
|
||||
+ return pa->find(newName);
|
||||
}
|
||||
|
||||
static bool is_read_only(const char* name) {
|
||||
@@ -243,17 +293,6 @@ void SystemProperties::ReadCallback(const prop_info* pi,
|
||||
}
|
||||
|
||||
int SystemProperties::Get(const char* name, char* value) {
|
||||
- read_self();
|
||||
- if(strcmp(comm_override, "vendor") == 0) {
|
||||
- if(strcmp(name, "ro.product.device") == 0) {
|
||||
- int r = Get("ro.product.vendor.device", value);
|
||||
- if(r>0) return r;
|
||||
- }
|
||||
- if(strcmp(name, "ro.product.manufacturer") == 0) {
|
||||
- int r = Get("ro.product.vendor.manufacturer", value);
|
||||
- if(r>0) return r;
|
||||
- }
|
||||
- }
|
||||
const prop_info* pi = Find(name);
|
||||
|
||||
if (pi != nullptr) {
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
From 32c4d23814d4b387226dd4b4abae04663f89afbe Mon Sep 17 00:00:00 2001
|
||||
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||
Date: Wed, 8 Dec 2021 07:04:53 +0000
|
||||
Subject: [PATCH] Remove init.vndk-nodef.rc
|
||||
|
||||
This partially reverts "Deprecate VNDK-lite support from Legacy GSI".
|
||||
|
||||
Paired with https://github.com/LineageOS/android_system_core/commit/0b265e35ddf42638fa807f5349a10c40e3d46446, it kicks permissive devices into bootloader.
|
||||
Given that GSI+permissive won't ever be a Lineage official scenario, revert this only on our side.
|
||||
Thanks @Kethen for the insight!
|
||||
|
||||
Change-Id: I7c14fe5229e953f620bb225fa5c981752d0ac5f9
|
||||
---
|
||||
target/product/gsi/Android.mk | 13 -------------
|
||||
target/product/gsi/init.gsi.rc | 2 --
|
||||
target/product/gsi/init.vndk-nodef.rc | 3 ---
|
||||
target/product/gsi_release.mk | 1 -
|
||||
4 files changed, 19 deletions(-)
|
||||
delete mode 100644 target/product/gsi/init.vndk-nodef.rc
|
||||
|
||||
diff --git a/target/product/gsi/Android.mk b/target/product/gsi/Android.mk
|
||||
index 107c94f685..0ad39c3610 100644
|
||||
--- a/target/product/gsi/Android.mk
|
||||
+++ b/target/product/gsi/Android.mk
|
||||
@@ -256,16 +256,3 @@ LOCAL_SYSTEM_EXT_MODULE := true
|
||||
LOCAL_MODULE_RELATIVE_PATH := init
|
||||
|
||||
include $(BUILD_PREBUILT)
|
||||
-
|
||||
-
|
||||
-include $(CLEAR_VARS)
|
||||
-LOCAL_MODULE := init.vndk-nodef.rc
|
||||
-LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
|
||||
-LOCAL_LICENSE_CONDITIONS := notice
|
||||
-LOCAL_NOTICE_FILE := build/soong/licenses/LICENSE
|
||||
-LOCAL_SRC_FILES := $(LOCAL_MODULE)
|
||||
-LOCAL_MODULE_CLASS := ETC
|
||||
-LOCAL_SYSTEM_EXT_MODULE := true
|
||||
-LOCAL_MODULE_RELATIVE_PATH := gsi
|
||||
-
|
||||
-include $(BUILD_PREBUILT)
|
||||
diff --git a/target/product/gsi/init.gsi.rc b/target/product/gsi/init.gsi.rc
|
||||
index 69c8e467be..c6faba78d9 100644
|
||||
--- a/target/product/gsi/init.gsi.rc
|
||||
+++ b/target/product/gsi/init.gsi.rc
|
||||
@@ -1,5 +1,3 @@
|
||||
#
|
||||
# Android init script for GSI required initialization
|
||||
#
|
||||
-
|
||||
-import /system/system_ext/etc/gsi/init.vndk-${ro.vndk.version:-nodef}.rc
|
||||
diff --git a/target/product/gsi/init.vndk-nodef.rc b/target/product/gsi/init.vndk-nodef.rc
|
||||
deleted file mode 100644
|
||||
index 1b141a05e7..0000000000
|
||||
--- a/target/product/gsi/init.vndk-nodef.rc
|
||||
+++ /dev/null
|
||||
@@ -1,3 +0,0 @@
|
||||
-on early-init
|
||||
- # Reboot if BOARD_VNDK_VERSION is not defined
|
||||
- exec - root -- /system/bin/reboot bootloader
|
||||
diff --git a/target/product/gsi_release.mk b/target/product/gsi_release.mk
|
||||
index 3b977927d1..7bade98ca1 100644
|
||||
--- a/target/product/gsi_release.mk
|
||||
+++ b/target/product/gsi_release.mk
|
||||
@@ -62,7 +62,6 @@ PRODUCT_PACKAGES += com.android.apex.cts.shim.v1_with_prebuilts.flattened
|
||||
PRODUCT_PACKAGES += \
|
||||
gsi_skip_mount.cfg \
|
||||
init.gsi.rc \
|
||||
- init.vndk-nodef.rc \
|
||||
|
||||
# Overlay the GSI specific SystemUI setting
|
||||
PRODUCT_PACKAGES += gsi_overlay_systemui
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -0,0 +1,326 @@
|
||||
From b5b0fd54c77d0c5feb3eb20395fa6e2400c41172 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Cai <peter@typeblog.net>
|
||||
Date: Thu, 18 Aug 2022 15:44:46 -0400
|
||||
Subject: [PATCH 1/3] APM: Restore S, R and Q behavior respectively for
|
||||
telephony audio
|
||||
|
||||
This conditionally reverts part of b2e5cb (T), 51c9cc (S) and afd4ce (R)
|
||||
when the VNDK version is equal to or before S, R and Q respectively.
|
||||
|
||||
On R, commit afd4ce made it so that both HW and SW bridging go through
|
||||
`createAudioPatch()`, which is broken on some devices such as on MTK Q
|
||||
vendor, because their HAL do not support HW patching via the newer
|
||||
`createAudioPatch()` method. Instead, the patching on Q was done through
|
||||
`setOutputDevices()`.
|
||||
|
||||
On S, commit 51c9cc refactored the related code again such that HW
|
||||
bridging for the Rx direction is essentially removed, replaced with SW
|
||||
bridging through `startAudioSource()`. This is, again, broken on MTK R
|
||||
vendor devices.
|
||||
|
||||
On T, commit b2e5cb applied the same SW bridging to the Tx direction.
|
||||
|
||||
All of these commits rely on assumptions that are not tested through
|
||||
VTS and just presumed to be true. Although we can blame MTK for not
|
||||
supporting all the possible cases in their HAL, it will not fix
|
||||
anything, and really frameworks code should not depend on such untested
|
||||
assumptions.
|
||||
|
||||
To work around said issues, we restore old behavior from S, R and Q
|
||||
relying on the value of `ro.vndk.version`.
|
||||
|
||||
Change-Id: I56d36d2aef4319935cb88a3e4771b23c6d5b2145
|
||||
---
|
||||
.../managerdefault/AudioPolicyManager.cpp | 206 ++++++++++++------
|
||||
.../managerdefault/AudioPolicyManager.h | 3 +
|
||||
2 files changed, 147 insertions(+), 62 deletions(-)
|
||||
|
||||
diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
|
||||
index f093e685ba..9a90009f9e 100644
|
||||
--- a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
|
||||
+++ b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
|
||||
@@ -689,6 +689,17 @@ status_t AudioPolicyManager::updateCallRoutingInternal(
|
||||
disconnectTelephonyAudioSource(mCallRxSourceClient);
|
||||
disconnectTelephonyAudioSource(mCallTxSourceClient);
|
||||
|
||||
+ // release existing RX patch if any
|
||||
+ if (mCallRxPatch != 0) {
|
||||
+ releaseAudioPatchInternal(mCallRxPatch->getHandle());
|
||||
+ mCallRxPatch.clear();
|
||||
+ }
|
||||
+ // release TX patch if any
|
||||
+ if (mCallTxPatch != 0) {
|
||||
+ releaseAudioPatchInternal(mCallTxPatch->getHandle());
|
||||
+ mCallTxPatch.clear();
|
||||
+ }
|
||||
+
|
||||
auto telephonyRxModule =
|
||||
mHwModules.getModuleForDeviceType(AUDIO_DEVICE_IN_TELEPHONY_RX, AUDIO_FORMAT_DEFAULT);
|
||||
auto telephonyTxModule =
|
||||
@@ -711,9 +722,20 @@ status_t AudioPolicyManager::updateCallRoutingInternal(
|
||||
ALOGE("%s() no telephony Tx and/or RX device", __func__);
|
||||
return INVALID_OPERATION;
|
||||
}
|
||||
- // createAudioPatchInternal now supports both HW / SW bridging
|
||||
- createRxPatch = true;
|
||||
- createTxPatch = true;
|
||||
+ if (property_get_int32("ro.vndk.version", 31) >= 30) {
|
||||
+ // createAudioPatchInternal now supports both HW / SW bridging
|
||||
+ createRxPatch = true;
|
||||
+ createTxPatch = true;
|
||||
+ } else {
|
||||
+ // pre-R behavior: some devices before VNDK 30 do not support createAudioPatch correctly
|
||||
+ // for HW bridging even though they declare support for it
|
||||
+ // do not create a patch (aka Sw Bridging) if Primary HW module has declared supporting a
|
||||
+ // route between telephony RX to Sink device and Source device to telephony TX
|
||||
+ ALOGI("%s() Using pre-R behavior for createRxPatch and createTxPatch", __func__);
|
||||
+ const auto &primaryModule = telephonyRxModule;
|
||||
+ createRxPatch = !primaryModule->supportsPatch(rxSourceDevice, rxDevices.itemAt(0));
|
||||
+ createTxPatch = !primaryModule->supportsPatch(txSourceDevice, txSinkDevice);
|
||||
+ }
|
||||
} else {
|
||||
// If the RX device is on the primary HW module, then use legacy routing method for
|
||||
// voice calls via setOutputDevice() on primary output.
|
||||
@@ -730,7 +752,14 @@ status_t AudioPolicyManager::updateCallRoutingInternal(
|
||||
if (!createRxPatch) {
|
||||
muteWaitMs = setOutputDevices(mPrimaryOutput, rxDevices, true, delayMs);
|
||||
} else { // create RX path audio patch
|
||||
- connectTelephonyRxAudioSource();
|
||||
+ if (property_get_int32("ro.vndk.version", 31) >= 31) {
|
||||
+ connectTelephonyRxAudioSource();
|
||||
+ } else {
|
||||
+ // pre-S behavior: some devices do not support SW bridging correctly when HW bridge is
|
||||
+ // available through createAudioPatch(); startAudioSource() forces SW bridging.
|
||||
+ ALOGI("%s() Using pre-S behavior to create HW Rx patch", __func__);
|
||||
+ mCallRxPatch = createTelephonyPatch(true /*isRx*/, rxDevices.itemAt(0), delayMs);
|
||||
+ }
|
||||
// If the TX device is on the primary HW module but RX device is
|
||||
// on other HW module, SinkMetaData of telephony input should handle it
|
||||
// assuming the device uses audio HAL V5.0 and above
|
||||
@@ -745,7 +774,12 @@ status_t AudioPolicyManager::updateCallRoutingInternal(
|
||||
closeActiveClients(activeDesc);
|
||||
}
|
||||
}
|
||||
- connectTelephonyTxAudioSource(txSourceDevice, txSinkDevice, delayMs);
|
||||
+ if (property_get_int32("ro.vndk.version", 33) >= 33) {
|
||||
+ connectTelephonyTxAudioSource(txSourceDevice, txSinkDevice, delayMs);
|
||||
+ } else {
|
||||
+ // pre-T behavior: hw bridging for tx too; skip the SwOutput
|
||||
+ mCallTxPatch = createTelephonyPatch(false /*isRx*/, txSourceDevice, delayMs);
|
||||
+ }
|
||||
}
|
||||
if (waitMs != nullptr) {
|
||||
*waitMs = muteWaitMs;
|
||||
@@ -753,6 +787,36 @@ status_t AudioPolicyManager::updateCallRoutingInternal(
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
+sp<AudioPatch> AudioPolicyManager::createTelephonyPatch(
|
||||
+ bool isRx, const sp<DeviceDescriptor> &device, uint32_t delayMs) {
|
||||
+ PatchBuilder patchBuilder;
|
||||
+
|
||||
+ if (device == nullptr) {
|
||||
+ return nullptr;
|
||||
+ }
|
||||
+
|
||||
+ // @TODO: still ignoring the address, or not dealing platform with multiple telephony devices
|
||||
+ if (isRx) {
|
||||
+ patchBuilder.addSink(device).
|
||||
+ addSource(mAvailableInputDevices.getDevice(
|
||||
+ AUDIO_DEVICE_IN_TELEPHONY_RX, String8(), AUDIO_FORMAT_DEFAULT));
|
||||
+ } else {
|
||||
+ patchBuilder.addSource(device).
|
||||
+ addSink(mAvailableOutputDevices.getDevice(
|
||||
+ AUDIO_DEVICE_OUT_TELEPHONY_TX, String8(), AUDIO_FORMAT_DEFAULT));
|
||||
+ }
|
||||
+
|
||||
+ audio_patch_handle_t patchHandle = AUDIO_PATCH_HANDLE_NONE;
|
||||
+ status_t status =
|
||||
+ createAudioPatchInternal(patchBuilder.patch(), &patchHandle, mUidCached, delayMs, nullptr);
|
||||
+ ssize_t index = mAudioPatches.indexOfKey(patchHandle);
|
||||
+ if (status != NO_ERROR || index < 0) {
|
||||
+ ALOGW("%s() error %d creating %s audio patch", __func__, status, isRx ? "RX" : "TX");
|
||||
+ return nullptr;
|
||||
+ }
|
||||
+ return mAudioPatches.valueAt(index);
|
||||
+}
|
||||
+
|
||||
bool AudioPolicyManager::isDeviceOfModule(
|
||||
const sp<DeviceDescriptor>& devDesc, const char *moduleId) const {
|
||||
sp<HwModule> module = mHwModules.getModuleFromName(moduleId);
|
||||
@@ -4958,83 +5022,101 @@ status_t AudioPolicyManager::createAudioPatchInternal(const struct audio_patch *
|
||||
// in config XML to reach the sink so that is can be declared as available.
|
||||
audio_io_handle_t output = AUDIO_IO_HANDLE_NONE;
|
||||
sp<SwAudioOutputDescriptor> outputDesc;
|
||||
- if (!sourceDesc->isInternal()) {
|
||||
- // take care of dynamic routing for SwOutput selection,
|
||||
- audio_attributes_t attributes = sourceDesc->attributes();
|
||||
- audio_stream_type_t stream = sourceDesc->stream();
|
||||
- audio_attributes_t resultAttr;
|
||||
- audio_config_t config = AUDIO_CONFIG_INITIALIZER;
|
||||
- config.sample_rate = sourceDesc->config().sample_rate;
|
||||
- audio_channel_mask_t sourceMask = sourceDesc->config().channel_mask;
|
||||
- config.channel_mask =
|
||||
- (audio_channel_mask_get_representation(sourceMask)
|
||||
- == AUDIO_CHANNEL_REPRESENTATION_INDEX) ? sourceMask
|
||||
- : audio_channel_mask_in_to_out(sourceMask);
|
||||
- config.format = sourceDesc->config().format;
|
||||
- audio_output_flags_t flags = AUDIO_OUTPUT_FLAG_NONE;
|
||||
- audio_port_handle_t selectedDeviceId = AUDIO_PORT_HANDLE_NONE;
|
||||
- bool isRequestedDeviceForExclusiveUse = false;
|
||||
- output_type_t outputType;
|
||||
- bool isSpatialized;
|
||||
- bool isBitPerfect;
|
||||
- getOutputForAttrInt(&resultAttr, &output, AUDIO_SESSION_NONE, &attributes,
|
||||
- &stream, sourceDesc->uid(), &config, &flags,
|
||||
- &selectedDeviceId, &isRequestedDeviceForExclusiveUse,
|
||||
- nullptr, &outputType, &isSpatialized, &isBitPerfect);
|
||||
- if (output == AUDIO_IO_HANDLE_NONE) {
|
||||
- ALOGV("%s no output for device %s",
|
||||
- __FUNCTION__, sinkDevice->toString().c_str());
|
||||
- return INVALID_OPERATION;
|
||||
- }
|
||||
- outputDesc = mOutputs.valueFor(output);
|
||||
- if (outputDesc->isDuplicated()) {
|
||||
- ALOGE("%s output is duplicated", __func__);
|
||||
- return INVALID_OPERATION;
|
||||
- }
|
||||
- bool closeOutput = outputDesc->mDirectOpenCount != 0;
|
||||
- sourceDesc->setSwOutput(outputDesc, closeOutput);
|
||||
- } else {
|
||||
- // Same for "raw patches" aka created from createAudioPatch API
|
||||
- SortedVector<audio_io_handle_t> outputs =
|
||||
- getOutputsForDevices(DeviceVector(sinkDevice), mOutputs);
|
||||
- // if the sink device is reachable via an opened output stream, request to
|
||||
- // go via this output stream by adding a second source to the patch
|
||||
- // description
|
||||
- output = selectOutput(outputs);
|
||||
- if (output == AUDIO_IO_HANDLE_NONE) {
|
||||
- ALOGE("%s no output available for internal patch sink", __func__);
|
||||
- return INVALID_OPERATION;
|
||||
- }
|
||||
- outputDesc = mOutputs.valueFor(output);
|
||||
- if (outputDesc->isDuplicated()) {
|
||||
- ALOGV("%s output for device %s is duplicated",
|
||||
- __func__, sinkDevice->toString().c_str());
|
||||
- return INVALID_OPERATION;
|
||||
+ if (sourceDesc != nullptr) {
|
||||
+ if (!sourceDesc->isInternal()) {
|
||||
+ // take care of dynamic routing for SwOutput selection,
|
||||
+ audio_attributes_t attributes = sourceDesc->attributes();
|
||||
+ audio_stream_type_t stream = sourceDesc->stream();
|
||||
+ audio_attributes_t resultAttr;
|
||||
+ audio_config_t config = AUDIO_CONFIG_INITIALIZER;
|
||||
+ config.sample_rate = sourceDesc->config().sample_rate;
|
||||
+ audio_channel_mask_t sourceMask = sourceDesc->config().channel_mask;
|
||||
+ config.channel_mask =
|
||||
+ (audio_channel_mask_get_representation(sourceMask)
|
||||
+ == AUDIO_CHANNEL_REPRESENTATION_INDEX) ? sourceMask
|
||||
+ : audio_channel_mask_in_to_out(sourceMask);
|
||||
+ config.format = sourceDesc->config().format;
|
||||
+ audio_output_flags_t flags = AUDIO_OUTPUT_FLAG_NONE;
|
||||
+ audio_port_handle_t selectedDeviceId = AUDIO_PORT_HANDLE_NONE;
|
||||
+ bool isRequestedDeviceForExclusiveUse = false;
|
||||
+ output_type_t outputType;
|
||||
+ bool isSpatialized;
|
||||
+ bool isBitPerfect;
|
||||
+ getOutputForAttrInt(&resultAttr, &output, AUDIO_SESSION_NONE, &attributes,
|
||||
+ &stream, sourceDesc->uid(), &config, &flags,
|
||||
+ &selectedDeviceId, &isRequestedDeviceForExclusiveUse,
|
||||
+ nullptr, &outputType, &isSpatialized, &isBitPerfect);
|
||||
+ if (output == AUDIO_IO_HANDLE_NONE) {
|
||||
+ ALOGV("%s no output for device %s",
|
||||
+ __FUNCTION__, sinkDevice->toString().c_str());
|
||||
+ return INVALID_OPERATION;
|
||||
+ }
|
||||
+ outputDesc = mOutputs.valueFor(output);
|
||||
+ if (outputDesc->isDuplicated()) {
|
||||
+ ALOGE("%s output is duplicated", __func__);
|
||||
+ return INVALID_OPERATION;
|
||||
+ }
|
||||
+ bool closeOutput = outputDesc->mDirectOpenCount != 0;
|
||||
+ sourceDesc->setSwOutput(outputDesc, closeOutput);
|
||||
+ } else {
|
||||
+ // Same for "raw patches" aka created from createAudioPatch API
|
||||
+ SortedVector<audio_io_handle_t> outputs =
|
||||
+ getOutputsForDevices(DeviceVector(sinkDevice), mOutputs);
|
||||
+ // if the sink device is reachable via an opened output stream, request to
|
||||
+ // go via this output stream by adding a second source to the patch
|
||||
+ // description
|
||||
+ output = selectOutput(outputs);
|
||||
+ if (output == AUDIO_IO_HANDLE_NONE) {
|
||||
+ ALOGE("%s no output available for internal patch sink", __func__);
|
||||
+ return INVALID_OPERATION;
|
||||
+ }
|
||||
+ outputDesc = mOutputs.valueFor(output);
|
||||
+ if (outputDesc->isDuplicated()) {
|
||||
+ ALOGV("%s output for device %s is duplicated",
|
||||
+ __func__, sinkDevice->toString().c_str());
|
||||
+ return INVALID_OPERATION;
|
||||
+ }
|
||||
}
|
||||
- sourceDesc->setSwOutput(outputDesc, /* closeOutput= */ false);
|
||||
}
|
||||
// create a software bridge in PatchPanel if:
|
||||
// - source and sink devices are on different HW modules OR
|
||||
// - audio HAL version is < 3.0
|
||||
// - audio HAL version is >= 3.0 but no route has been declared between devices
|
||||
- // - called from startAudioSource (aka sourceDesc is not internal) and source device
|
||||
+ // - called from startAudioSource (aka sourceDesc is neither null nor internal) and source device
|
||||
// does not have a gain controller
|
||||
if (!srcDevice->hasSameHwModuleAs(sinkDevice) ||
|
||||
(srcDevice->getModuleVersionMajor() < 3) ||
|
||||
!srcDevice->getModule()->supportsPatch(srcDevice, sinkDevice) ||
|
||||
- (!sourceDesc->isInternal() &&
|
||||
+ ((sourceDesc != nullptr && !sourceDesc->isInternal()) &&
|
||||
srcDevice->getAudioPort()->getGains().size() == 0)) {
|
||||
// support only one sink device for now to simplify output selection logic
|
||||
if (patch->num_sinks > 1) {
|
||||
return INVALID_OPERATION;
|
||||
}
|
||||
- sourceDesc->setUseSwBridge();
|
||||
+ if (sourceDesc == nullptr) {
|
||||
+ SortedVector<audio_io_handle_t> outputs =
|
||||
+ getOutputsForDevices(DeviceVector(sinkDevice), mOutputs);
|
||||
+ // if the sink device is reachable via an opened output stream, request to
|
||||
+ // go via this output stream by adding a second source to the patch
|
||||
+ // description
|
||||
+ output = selectOutput(outputs);
|
||||
+ if (output != AUDIO_IO_HANDLE_NONE) {
|
||||
+ outputDesc = mOutputs.valueFor(output);
|
||||
+ if (outputDesc->isDuplicated()) {
|
||||
+ ALOGV("%s output for device %s is duplicated",
|
||||
+ __FUNCTION__, sinkDevice->toString().c_str());
|
||||
+ return INVALID_OPERATION;
|
||||
+ }
|
||||
+ }
|
||||
+ } else {
|
||||
+ sourceDesc->setUseSwBridge();
|
||||
+ }
|
||||
if (outputDesc != nullptr) {
|
||||
audio_port_config srcMixPortConfig = {};
|
||||
outputDesc->toAudioPortConfig(&srcMixPortConfig, nullptr);
|
||||
// for volume control, we may need a valid stream
|
||||
srcMixPortConfig.ext.mix.usecase.stream =
|
||||
- (!sourceDesc->isInternal() || isCallTxAudioSource(sourceDesc)) ?
|
||||
+ (sourceDesc != nullptr && (!sourceDesc->isInternal() || isCallTxAudioSource(sourceDesc))) ?
|
||||
mEngine->getStreamTypeForAttributes(sourceDesc->attributes()) :
|
||||
AUDIO_STREAM_PATCH;
|
||||
patchBuilder.addSource(srcMixPortConfig);
|
||||
diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.h b/services/audiopolicy/managerdefault/AudioPolicyManager.h
|
||||
index 88bafefdb1..188b5732b3 100644
|
||||
--- a/services/audiopolicy/managerdefault/AudioPolicyManager.h
|
||||
+++ b/services/audiopolicy/managerdefault/AudioPolicyManager.h
|
||||
@@ -953,6 +953,9 @@ protected:
|
||||
|
||||
SoundTriggerSessionCollection mSoundTriggerSessions;
|
||||
|
||||
+ sp<AudioPatch> mCallTxPatch;
|
||||
+ sp<AudioPatch> mCallRxPatch;
|
||||
+
|
||||
HwAudioOutputCollection mHwOutputs;
|
||||
SourceClientCollection mAudioSources;
|
||||
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
From cf178b74640512639620ed5f99122407225053f8 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Cai <peter@typeblog.net>
|
||||
Date: Wed, 24 Aug 2022 15:42:39 -0400
|
||||
Subject: [PATCH 2/3] APM: Optionally force-load audio policy for system-side
|
||||
bt audio HAL
|
||||
|
||||
Required to support our system-side bt audio implementation, i.e.
|
||||
`sysbta`.
|
||||
|
||||
Co-authored-by: Pierre-Hugues Husson <phh@phh.me>
|
||||
Change-Id: I279fff541a531f922f3fa55b8f14d00237db59ff
|
||||
---
|
||||
.../managerdefinitions/src/Serializer.cpp | 25 +++++++++++++++++++
|
||||
1 file changed, 25 insertions(+)
|
||||
|
||||
diff --git a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||
index 3d5c1d2e42..881c188e4c 100644
|
||||
--- a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||
+++ b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||
@@ -25,6 +25,7 @@
|
||||
#include <libxml/parser.h>
|
||||
#include <libxml/xinclude.h>
|
||||
#include <media/convert.h>
|
||||
+#include <cutils/properties.h>
|
||||
#include <utils/Log.h>
|
||||
#include <utils/StrongPointer.h>
|
||||
#include <utils/Errors.h>
|
||||
@@ -885,6 +886,30 @@ status_t PolicySerializer::deserialize(const char *configFile, AudioPolicyConfig
|
||||
if (status != NO_ERROR) {
|
||||
return status;
|
||||
}
|
||||
+
|
||||
+ // Remove modules called bluetooth, bluetooth_qti or a2dp, and inject our own
|
||||
+ if (property_get_bool("persist.bluetooth.system_audio_hal.enabled", false)) {
|
||||
+ for (auto it = modules.begin(); it != modules.end(); it++) {
|
||||
+ const char *name = (*it)->getName();
|
||||
+ if (strcmp(name, "a2dp") == 0 ||
|
||||
+ strcmp(name, "a2dpsink") == 0 ||
|
||||
+ strcmp(name, "bluetooth") == 0 ||
|
||||
+ strcmp(name, "bluetooth_qti") == 0) {
|
||||
+
|
||||
+ ALOGE("Removed module %s\n", name);
|
||||
+ it = modules.erase(it);
|
||||
+ }
|
||||
+ if (it == modules.end()) break;
|
||||
+ }
|
||||
+ const char* a2dpFileName = "/system/etc/sysbta_audio_policy_configuration.xml";
|
||||
+ if (version == "7.0")
|
||||
+ a2dpFileName = "/system/etc/sysbta_audio_policy_configuration_7_0.xml";
|
||||
+ auto doc = make_xmlUnique(xmlParseFile(a2dpFileName));
|
||||
+ xmlNodePtr root = xmlDocGetRootElement(doc.get());
|
||||
+ auto maybeA2dpModule = deserialize<ModuleTraits>(root, config);
|
||||
+ modules.add(std::get<1>(maybeA2dpModule));
|
||||
+ }
|
||||
+
|
||||
config->setHwModules(modules);
|
||||
|
||||
// Global Configuration
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
From f792286920c7c2c43758a8e1053bab89948bf305 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Cai <peter@typeblog.net>
|
||||
Date: Thu, 25 Aug 2022 13:30:29 -0400
|
||||
Subject: [PATCH 3/3] APM: Remove A2DP audio ports from the primary HAL
|
||||
|
||||
These ports defined in the primary HAL are intended for A2DP offloading,
|
||||
however they do not work in general on GSIs, and will interfere with
|
||||
sysbta, the system-side generic bluetooth audio implementation.
|
||||
|
||||
Remove them as we parse the policy XML.
|
||||
|
||||
Co-authored-by: Pierre-Hugues Husson <phh@phh.me>
|
||||
Change-Id: I3305594a17285da113167b419543543f0ef71122
|
||||
---
|
||||
.../managerdefinitions/src/Serializer.cpp | 26 ++++++++++++++++---
|
||||
1 file changed, 22 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||
index 881c188e4c..8519cfdc04 100644
|
||||
--- a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||
+++ b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||
@@ -26,6 +26,7 @@
|
||||
#include <libxml/xinclude.h>
|
||||
#include <media/convert.h>
|
||||
#include <cutils/properties.h>
|
||||
+#include <system/audio.h>
|
||||
#include <utils/Log.h>
|
||||
#include <utils/StrongPointer.h>
|
||||
#include <utils/Errors.h>
|
||||
@@ -334,11 +335,8 @@ status_t PolicySerializer::deserializeCollection(const xmlNode *cur,
|
||||
Trait::collectionTag);
|
||||
return status;
|
||||
}
|
||||
- } else if (mIgnoreVendorExtensions && std::get<status_t>(maybeElement) == NO_INIT) {
|
||||
- // Skip a vendor extension element.
|
||||
- } else {
|
||||
- return BAD_VALUE;
|
||||
}
|
||||
+ // Ignore elements that failed to parse, e.g. routes with invalid sinks
|
||||
}
|
||||
}
|
||||
if (!xmlStrcmp(cur->name, reinterpret_cast<const xmlChar*>(Trait::tag))) {
|
||||
@@ -679,6 +677,7 @@ std::variant<status_t, ModuleTraits::Element> PolicySerializer::deserialize<Modu
|
||||
ALOGE("%s: No %s found", __func__, Attributes::name);
|
||||
return BAD_VALUE;
|
||||
}
|
||||
+
|
||||
uint32_t versionMajor = 0, versionMinor = 0;
|
||||
std::string versionLiteral = getXmlAttribute(cur, Attributes::version);
|
||||
if (!versionLiteral.empty()) {
|
||||
@@ -704,6 +703,25 @@ std::variant<status_t, ModuleTraits::Element> PolicySerializer::deserialize<Modu
|
||||
if (status != NO_ERROR) {
|
||||
return status;
|
||||
}
|
||||
+ bool shouldEraseA2DP = name == "primary" && property_get_bool("persist.bluetooth.system_audio_hal.enabled", false);
|
||||
+ if (shouldEraseA2DP) {
|
||||
+ // Having A2DP ports in the primary audio HAL module will interfere with sysbta
|
||||
+ // so remove them here. Note that we do not need to explicitly remove the
|
||||
+ // corresponding routes below, because routes with invalid sinks will be ignored
|
||||
+ auto iter = devicePorts.begin();
|
||||
+ while (iter != devicePorts.end()) {
|
||||
+ auto port = *iter;
|
||||
+ auto type = port->type();
|
||||
+ if (type == AUDIO_DEVICE_OUT_BLUETOOTH_A2DP
|
||||
+ || type == AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES
|
||||
+ || type == AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER) {
|
||||
+ ALOGE("Erasing A2DP device port %s", port->getTagName().c_str());
|
||||
+ iter = devicePorts.erase(iter);
|
||||
+ } else {
|
||||
+ iter++;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
module->setDeclaredDevices(devicePorts);
|
||||
|
||||
RouteTraits::Collection routes;
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
From 36920a508f5c97585652116c356451ae759bf946 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Sun, 25 Oct 2020 23:57:26 +0100
|
||||
Subject: [PATCH 1/5] Re-implement fnmatch-like behaviour for RRO java-side
|
||||
|
||||
T: Also apply to FrameworkParsingPackageUtils (@PeterCxy)
|
||||
|
||||
Change-Id: Id38292a9a1453aa87b8401c1fdb390fa4e63c7d1
|
||||
---
|
||||
.../pm/parsing/FrameworkParsingPackageUtils.java | 13 +++++++++++--
|
||||
1 file changed, 11 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java b/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java
|
||||
index b75ba82ad091..b344f7232190 100644
|
||||
--- a/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java
|
||||
+++ b/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java
|
||||
@@ -223,8 +223,17 @@ public class FrameworkParsingPackageUtils {
|
||||
continue;
|
||||
}
|
||||
// 3. Check if prop is equal to expected value.
|
||||
- if (!currValue.equals(propValues[i])) {
|
||||
- return false;
|
||||
+ final String value = propValues[i];
|
||||
+ if(value.startsWith("+")) {
|
||||
+ final java.util.regex.Pattern regex = java.util.regex.Pattern.compile(value.substring(1, value.length()).replace("*", ".*"));
|
||||
+ java.util.regex.Matcher matcher = regex.matcher(currValue);
|
||||
+ if (!matcher.find()) {
|
||||
+ return false;
|
||||
+ }
|
||||
+ } else {
|
||||
+ if(!value.equals(currValue)) {
|
||||
+ return false;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
return true;
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
From 69fbb22f3d265d9baf7ba87c2e0d42671a898037 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Sat, 24 Mar 2018 08:01:48 +0100
|
||||
Subject: [PATCH 2/5] LightsService: Alternative backlight scale
|
||||
|
||||
Reserved a manual override just in case
|
||||
|
||||
Change-Id: I46ae69c758d1a4609d89cf1c293488ea5fc76787
|
||||
---
|
||||
.../com/android/server/lights/LightsService.java | 13 +++++++++++++
|
||||
1 file changed, 13 insertions(+)
|
||||
|
||||
diff --git a/services/core/java/com/android/server/lights/LightsService.java b/services/core/java/com/android/server/lights/LightsService.java
|
||||
index fea6b29d9260..2a9a3b63ea2e 100644
|
||||
--- a/services/core/java/com/android/server/lights/LightsService.java
|
||||
+++ b/services/core/java/com/android/server/lights/LightsService.java
|
||||
@@ -32,6 +32,7 @@ import android.os.IBinder;
|
||||
import android.os.Looper;
|
||||
import android.os.RemoteException;
|
||||
import android.os.ServiceManager;
|
||||
+import android.os.SystemProperties;
|
||||
import android.os.Trace;
|
||||
import android.provider.Settings;
|
||||
import android.util.Slog;
|
||||
@@ -295,6 +296,18 @@ public class LightsService extends SystemService {
|
||||
return;
|
||||
}
|
||||
int brightnessInt = BrightnessSynchronizer.brightnessFloatToInt(brightness);
|
||||
+ if (mHwLight.id == 0) {
|
||||
+ int scaleOverrideValue = SystemProperties.getInt("persist.sys.treble.backlight_scale.override_value", -1);
|
||||
+ if (scaleOverrideValue != -1) {
|
||||
+ setLightLocked(brightnessInt * scaleOverrideValue / 255, LIGHT_FLASH_NONE, 0, 0, brightnessMode);
|
||||
+ return;
|
||||
+ }
|
||||
+ int scaleValue = SystemProperties.getInt("persist.sys.treble.backlight_scale.value", -1);
|
||||
+ if (scaleValue != -1) {
|
||||
+ setLightLocked(brightnessInt * scaleValue / 255, LIGHT_FLASH_NONE, 0, 0, brightnessMode);
|
||||
+ return;
|
||||
+ }
|
||||
+ }
|
||||
int color = brightnessInt & 0x000000ff;
|
||||
color = 0xff000000 | (color << 16) | (color << 8) | color;
|
||||
setLightLocked(color, LIGHT_FLASH_NONE, 0, 0, brightnessMode);
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -0,0 +1,110 @@
|
||||
From f5e64bb671b92afc7e9d897c950f3c51aebfe882 Mon Sep 17 00:00:00 2001
|
||||
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||
Date: Sat, 15 Oct 2022 09:33:56 +0000
|
||||
Subject: [PATCH 3/5] Revert "Remove more FDE methods from StorageManager"
|
||||
|
||||
This reverts commit bd13f84152449a3ead6fa8604fd31f48c0224676.
|
||||
|
||||
Change-Id: Ic394934ec27b1a486c60123130825d44dad73412
|
||||
---
|
||||
.../android/os/storage/StorageManager.java | 57 +++++++++++++++++++
|
||||
.../internal/os/RoSystemProperties.java | 4 ++
|
||||
2 files changed, 61 insertions(+)
|
||||
|
||||
diff --git a/core/java/android/os/storage/StorageManager.java b/core/java/android/os/storage/StorageManager.java
|
||||
index 80dd48825ba7..cb4769ff4ec3 100644
|
||||
--- a/core/java/android/os/storage/StorageManager.java
|
||||
+++ b/core/java/android/os/storage/StorageManager.java
|
||||
@@ -1660,6 +1660,15 @@ public class StorageManager {
|
||||
return false;
|
||||
}
|
||||
|
||||
+ /** {@hide}
|
||||
+ * Is this device encryptable or already encrypted?
|
||||
+ * @return true for encryptable or encrypted
|
||||
+ * false not encrypted and not encryptable
|
||||
+ */
|
||||
+ public static boolean isEncryptable() {
|
||||
+ return RoSystemProperties.CRYPTO_ENCRYPTABLE;
|
||||
+ }
|
||||
+
|
||||
/** {@hide}
|
||||
* Is this device encrypted?
|
||||
* <p>
|
||||
@@ -1693,6 +1702,54 @@ public class StorageManager {
|
||||
return isFileEncrypted();
|
||||
}
|
||||
|
||||
+ /** {@hide}
|
||||
+ * Is this device block encrypted?
|
||||
+ * @return true for block encrypted. (Implies isEncrypted() == true)
|
||||
+ * false not encrypted or file encrypted
|
||||
+ */
|
||||
+ public static boolean isBlockEncrypted() {
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ /** {@hide}
|
||||
+ * Is this device block encrypted with credentials?
|
||||
+ * @return true for crediential block encrypted.
|
||||
+ * (Implies isBlockEncrypted() == true)
|
||||
+ * false not encrypted, file encrypted or default block encrypted
|
||||
+ */
|
||||
+ public static boolean isNonDefaultBlockEncrypted() {
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ /** {@hide}
|
||||
+ * Is this device in the process of being block encrypted?
|
||||
+ * @return true for encrypting.
|
||||
+ * false otherwise
|
||||
+ * Whether device isEncrypted at this point is undefined
|
||||
+ * Note that only system services and CryptKeeper will ever see this return
|
||||
+ * true - no app will ever be launched in this state.
|
||||
+ * Also note that this state will not change without a teardown of the
|
||||
+ * framework, so no service needs to check for changes during their lifespan
|
||||
+ */
|
||||
+ public static boolean isBlockEncrypting() {
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ /** {@hide}
|
||||
+ * Is this device non default block encrypted and in the process of
|
||||
+ * prompting for credentials?
|
||||
+ * @return true for prompting for credentials.
|
||||
+ * (Implies isNonDefaultBlockEncrypted() == true)
|
||||
+ * false otherwise
|
||||
+ * Note that only system services and CryptKeeper will ever see this return
|
||||
+ * true - no app will ever be launched in this state.
|
||||
+ * Also note that this state will not change without a teardown of the
|
||||
+ * framework, so no service needs to check for changes during their lifespan
|
||||
+ */
|
||||
+ public static boolean inCryptKeeperBounce() {
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
/** {@hide}
|
||||
* @deprecated Use {@link #isFileEncrypted} instead, since emulated FBE is no longer supported.
|
||||
*/
|
||||
diff --git a/core/java/com/android/internal/os/RoSystemProperties.java b/core/java/com/android/internal/os/RoSystemProperties.java
|
||||
index 40d5c4761dff..66288706b0f1 100644
|
||||
--- a/core/java/com/android/internal/os/RoSystemProperties.java
|
||||
+++ b/core/java/com/android/internal/os/RoSystemProperties.java
|
||||
@@ -68,10 +68,14 @@ public class RoSystemProperties {
|
||||
public static final CryptoProperties.type_values CRYPTO_TYPE =
|
||||
CryptoProperties.type().orElse(CryptoProperties.type_values.NONE);
|
||||
// These are pseudo-properties
|
||||
+ public static final boolean CRYPTO_ENCRYPTABLE =
|
||||
+ CRYPTO_STATE != CryptoProperties.state_values.UNSUPPORTED;
|
||||
public static final boolean CRYPTO_ENCRYPTED =
|
||||
CRYPTO_STATE == CryptoProperties.state_values.ENCRYPTED;
|
||||
public static final boolean CRYPTO_FILE_ENCRYPTED =
|
||||
CRYPTO_TYPE == CryptoProperties.type_values.FILE;
|
||||
+ public static final boolean CRYPTO_BLOCK_ENCRYPTED =
|
||||
+ CRYPTO_TYPE == CryptoProperties.type_values.BLOCK;
|
||||
|
||||
public static final boolean CONTROL_PRIVAPP_PERMISSIONS_LOG =
|
||||
"log".equalsIgnoreCase(CONTROL_PRIVAPP_PERMISSIONS);
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
From aaf44460fbf5dcdbb844e4c5bba99b48576e59ef Mon Sep 17 00:00:00 2001
|
||||
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||
Date: Wed, 2 Aug 2023 20:59:53 +0800
|
||||
Subject: [PATCH 4/5] Restore getSimStateForSlotIndex in SubscriptionManager
|
||||
|
||||
MTK IMS still needs it here
|
||||
|
||||
Change-Id: I41bac57c68055f369232359a464642daab94403b
|
||||
---
|
||||
.../android/telephony/SubscriptionManager.java | 14 ++++++++++++++
|
||||
1 file changed, 14 insertions(+)
|
||||
|
||||
diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java
|
||||
index 64e43568e4d6..cfb4f12815a2 100644
|
||||
--- a/telephony/java/android/telephony/SubscriptionManager.java
|
||||
+++ b/telephony/java/android/telephony/SubscriptionManager.java
|
||||
@@ -2549,6 +2549,20 @@ public class SubscriptionManager {
|
||||
return TelephonyManager.getDefault().isNetworkRoaming(subId);
|
||||
}
|
||||
|
||||
+ /**
|
||||
+ * Returns a constant indicating the state of sim for the slot index.
|
||||
+ *
|
||||
+ * @param slotIndex Logical SIM slot index.
|
||||
+ *
|
||||
+ * @see TelephonyManager.SimState
|
||||
+ *
|
||||
+ * @hide
|
||||
+ */
|
||||
+ @TelephonyManager.SimState
|
||||
+ public static int getSimStateForSlotIndex(int slotIndex) {
|
||||
+ return TelephonyManager.getSimStateForSlotIndex(slotIndex);
|
||||
+ }
|
||||
+
|
||||
/**
|
||||
* Set a field in the subscription database. Note not all fields are supported.
|
||||
*
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
From d9dd8793634f892d905e46d45e190f72f8761def Mon Sep 17 00:00:00 2001
|
||||
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||
Date: Sun, 19 Nov 2023 23:07:03 +0800
|
||||
Subject: [PATCH 5/5] Restore getPhysicalDisplayIds in SurfaceControl
|
||||
|
||||
For convenience of accessing DynamicDisplayInfo from Settings
|
||||
Copy over the updated implementation from DisplayControl while we're at it
|
||||
|
||||
This partially reverts commit e2f333728788ad88a65208a6119aed90e13e7040.
|
||||
|
||||
Change-Id: Ie056ecaf76acbc70d73e1c26cc4542088fcda18d
|
||||
---
|
||||
core/java/android/view/SurfaceControl.java | 8 ++++++++
|
||||
core/jni/android_view_SurfaceControl.cpp | 18 ++++++++++++++++++
|
||||
2 files changed, 26 insertions(+)
|
||||
|
||||
diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java
|
||||
index c11f4975149d..cf9262aafb03 100644
|
||||
--- a/core/java/android/view/SurfaceControl.java
|
||||
+++ b/core/java/android/view/SurfaceControl.java
|
||||
@@ -179,6 +179,7 @@ public final class SurfaceControl implements Parcelable {
|
||||
private static native boolean nativeClearAnimationFrameStats();
|
||||
private static native boolean nativeGetAnimationFrameStats(WindowAnimationFrameStats outStats);
|
||||
|
||||
+ private static native long[] nativeGetPhysicalDisplayIds();
|
||||
private static native void nativeSetDisplaySurface(long transactionObj,
|
||||
IBinder displayToken, long nativeSurfaceObject);
|
||||
private static native void nativeSetDisplayLayerStack(long transactionObj,
|
||||
@@ -2402,6 +2403,13 @@ public final class SurfaceControl implements Parcelable {
|
||||
IVirtualDisplayCallback.Stub.asInterface(displayToken));
|
||||
}
|
||||
|
||||
+ /**
|
||||
+ * @hide
|
||||
+ */
|
||||
+ public static long[] getPhysicalDisplayIds() {
|
||||
+ return nativeGetPhysicalDisplayIds();
|
||||
+ }
|
||||
+
|
||||
/**
|
||||
* Returns whether protected content is supported in GPU composition.
|
||||
* @hide
|
||||
diff --git a/core/jni/android_view_SurfaceControl.cpp b/core/jni/android_view_SurfaceControl.cpp
|
||||
index 424925328dfd..2ebd6bec0b18 100644
|
||||
--- a/core/jni/android_view_SurfaceControl.cpp
|
||||
+++ b/core/jni/android_view_SurfaceControl.cpp
|
||||
@@ -36,6 +36,7 @@
|
||||
#include <gui/SurfaceComposerClient.h>
|
||||
#include <jni.h>
|
||||
#include <nativehelper/JNIHelp.h>
|
||||
+#include <nativehelper/ScopedPrimitiveArray.h>
|
||||
#include <nativehelper/ScopedUtfChars.h>
|
||||
#include <private/gui/ComposerService.h>
|
||||
#include <stdio.h>
|
||||
@@ -985,6 +986,21 @@ static void nativeSetDestinationFrame(JNIEnv* env, jclass clazz, jlong transacti
|
||||
transaction->setDestinationFrame(ctrl, crop);
|
||||
}
|
||||
|
||||
+static jlongArray nativeGetPhysicalDisplayIds(JNIEnv* env, jclass clazz) {
|
||||
+ const auto displayIds = SurfaceComposerClient::getPhysicalDisplayIds();
|
||||
+ ScopedLongArrayRW values(env, env->NewLongArray(displayIds.size()));
|
||||
+ if (values.get() == nullptr) {
|
||||
+ jniThrowException(env, "java/lang/OutOfMemoryError", nullptr);
|
||||
+ return nullptr;
|
||||
+ }
|
||||
+
|
||||
+ for (size_t i = 0; i < displayIds.size(); ++i) {
|
||||
+ values[i] = static_cast<jlong>(displayIds[i].value);
|
||||
+ }
|
||||
+
|
||||
+ return values.getJavaArray();
|
||||
+}
|
||||
+
|
||||
static jobject nativeGetDisplayedContentSamplingAttributes(JNIEnv* env, jclass clazz,
|
||||
jobject tokenObj) {
|
||||
sp<IBinder> token(ibinderForJavaObject(env, tokenObj));
|
||||
@@ -2133,6 +2149,8 @@ static const JNINativeMethod sSurfaceControlMethods[] = {
|
||||
(void*)nativeSetFrameRate },
|
||||
{"nativeSetDefaultFrameRateCompatibility", "(JJI)V",
|
||||
(void*)nativeSetDefaultFrameRateCompatibility},
|
||||
+ {"nativeGetPhysicalDisplayIds", "()[J",
|
||||
+ (void*)nativeGetPhysicalDisplayIds },
|
||||
{"nativeSetDisplaySurface", "(JLandroid/os/IBinder;J)V",
|
||||
(void*)nativeSetDisplaySurface },
|
||||
{"nativeSetDisplayLayerStack", "(JLandroid/os/IBinder;I)V",
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
From d817f1b8271e51853040685214aebc378dafd1aa Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Fri, 25 Mar 2022 05:37:56 -0400
|
||||
Subject: [PATCH] MIUI13 devices hide their vibrator HAL behind non-default
|
||||
name: "vibratorfeature"
|
||||
|
||||
---
|
||||
services/vibratorservice/VibratorHalController.cpp | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
diff --git a/services/vibratorservice/VibratorHalController.cpp b/services/vibratorservice/VibratorHalController.cpp
|
||||
index c1795f5c32..345016efd6 100644
|
||||
--- a/services/vibratorservice/VibratorHalController.cpp
|
||||
+++ b/services/vibratorservice/VibratorHalController.cpp
|
||||
@@ -59,6 +59,12 @@ std::shared_ptr<HalWrapper> connectHal(std::shared_ptr<CallbackScheduler> schedu
|
||||
return std::make_shared<AidlHalWrapper>(std::move(scheduler), aidlHal);
|
||||
}
|
||||
|
||||
+ aidlHal = waitForVintfService<Aidl::IVibrator>(String16("vibratorfeature"));
|
||||
+ if (aidlHal) {
|
||||
+ ALOGV("Successfully connected to Xiaomi Vibrator HAL AIDL service.");
|
||||
+ return std::make_shared<AidlHalWrapper>(std::move(scheduler), aidlHal);
|
||||
+ }
|
||||
+
|
||||
sp<V1_0::IVibrator> halV1_0 = V1_0::IVibrator::getService();
|
||||
if (halV1_0 == nullptr) {
|
||||
ALOGV("Vibrator HAL service not available.");
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
From 2bb0d801335970b8f0e9b8b7ffdf86128ae19468 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Sun, 14 Nov 2021 13:47:29 -0500
|
||||
Subject: [PATCH] Pie MTK IMS calls static
|
||||
ImsManager.updateImsServiceConfig(Context,int,boolean). Bring it back
|
||||
|
||||
Change-Id: I3dd66d436629d37c8ec795df6569736195ae570e
|
||||
---
|
||||
src/java/com/android/ims/ImsManager.java | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/src/java/com/android/ims/ImsManager.java b/src/java/com/android/ims/ImsManager.java
|
||||
index c41426d..2c6d656 100644
|
||||
--- a/src/java/com/android/ims/ImsManager.java
|
||||
+++ b/src/java/com/android/ims/ImsManager.java
|
||||
@@ -1667,6 +1667,14 @@ public class ImsManager implements FeatureUpdates {
|
||||
}
|
||||
}
|
||||
|
||||
+ public static void updateImsServiceConfig(Context context, int phoneId, boolean force) {
|
||||
+ ImsManager mgr = ImsManager.getInstance(context, phoneId);
|
||||
+ if (mgr != null) {
|
||||
+ mgr.updateImsServiceConfig();
|
||||
+ }
|
||||
+ Rlog.e(TAG, "updateImsServiceConfig: ImsManager null, returning without update.");
|
||||
+ }
|
||||
+
|
||||
/**
|
||||
* Push configuration updates to the ImsService implementation.
|
||||
*/
|
||||
--
|
||||
2.25.1
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
From fc4ecc73093f88934a65a9371ae7af274c2b143d Mon Sep 17 00:00:00 2001
|
||||
From: ironydelerium <42721860+ironydelerium@users.noreply.github.com>
|
||||
Date: Fri, 31 Dec 2021 02:20:28 -0800
|
||||
Subject: [PATCH] Reintroduce 'public void
|
||||
TelephonyMetrics.writeRilSendSms(int, int, int, int)'. (#8)
|
||||
|
||||
The MediaTek IMS package for Android Q, at the very least (likely for the rest, too)
|
||||
invoke this method in their `sendSms` method; Google, in their infinite wisdom,
|
||||
decided that this method needed a message ID passed in as well, changing the signature
|
||||
to 'public void TelephonyMetrics.writeRilSendSms(int, int, int, int, long)' and resulting
|
||||
in a MethodNotFoundException being raised in com.mediatek.ims, crashing it.
|
||||
|
||||
Fixes https://github.com/phhusson/treble_experimentations/issues/2125.
|
||||
|
||||
Co-authored-by: Sarah Vandomelen <sarah@sightworks.com>
|
||||
Change-Id: I789f470fb38d86dd37e8408536e208a7a49e7e26
|
||||
---
|
||||
.../telephony/metrics/TelephonyMetrics.java | 13 +++++++++++++
|
||||
1 file changed, 13 insertions(+)
|
||||
|
||||
diff --git a/src/java/com/android/internal/telephony/metrics/TelephonyMetrics.java b/src/java/com/android/internal/telephony/metrics/TelephonyMetrics.java
|
||||
index 5b47ae5b7a..f3e7717aca 100644
|
||||
--- a/src/java/com/android/internal/telephony/metrics/TelephonyMetrics.java
|
||||
+++ b/src/java/com/android/internal/telephony/metrics/TelephonyMetrics.java
|
||||
@@ -2324,6 +2324,19 @@ public class TelephonyMetrics {
|
||||
smsSession.increaseExpectedResponse();
|
||||
}
|
||||
|
||||
+ /**
|
||||
+ * Write Send SMS event (backwards-compatible method for R and earlier IMS implementations)
|
||||
+ *
|
||||
+ * @param phoneId Phone id
|
||||
+ * @param rilSerial RIL request serial number
|
||||
+ * @param tech SMS RAT
|
||||
+ * @param format SMS format. Either {@link SmsMessage#FORMAT_3GPP} or
|
||||
+ * {@link SmsMessage#FORMAT_3GPP2}.
|
||||
+ */
|
||||
+ public void writeRilSendSms(int phoneId, int rilSerial, int tech, int format) {
|
||||
+ writeRilSendSms(phoneId, rilSerial, tech, format, 0);
|
||||
+ }
|
||||
+
|
||||
/**
|
||||
* Write Send SMS event using ImsService. Expecting response from
|
||||
* {@link #writeOnSmsSolicitedResponse}.
|
||||
--
|
||||
2.25.1
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
From 31b4f85f4d8d4e3aad6cab62d88ec7c065b62607 Mon Sep 17 00:00:00 2001
|
||||
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||
Date: Fri, 30 Sep 2022 11:32:24 +0000
|
||||
Subject: [PATCH] Add an enum for Treble settings
|
||||
|
||||
Change-Id: I8dc25afa27e938ee82594a8343e73c7c494003e2
|
||||
---
|
||||
stats/enums/app/settings_enums.proto | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/stats/enums/app/settings_enums.proto b/stats/enums/app/settings_enums.proto
|
||||
index 50a68098..7392b1ce 100644
|
||||
--- a/stats/enums/app/settings_enums.proto
|
||||
+++ b/stats/enums/app/settings_enums.proto
|
||||
@@ -2217,6 +2217,9 @@ enum PageId {
|
||||
// OPEN: Settings > System > Input & Gesture > Double twist gesture
|
||||
SETTINGS_GESTURE_DOUBLE_TWIST = 755;
|
||||
|
||||
+ // OPEN: Settings > Treble Settings
|
||||
+ SETTINGS_TREBLE_CATEGORY = 777;
|
||||
+
|
||||
// OPEN: Settings > Apps > Default Apps > Default browser
|
||||
DEFAULT_BROWSER_PICKER = 785;
|
||||
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
From 89f823e7f42d3fb3677a9dc0384363f7ba540e64 Mon Sep 17 00:00:00 2001
|
||||
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||
Date: Tue, 18 Apr 2023 23:48:15 +0000
|
||||
Subject: [PATCH] Fix light sensor crash on Xiaomi 13
|
||||
|
||||
SensorService expects a scalar, but Xiaomi HAL returns a pose6DOF vector encapsulation
|
||||
Thanks @phhusson for the analysis
|
||||
|
||||
Change-Id: Ie358321d5328d01541f455d6af86944ff413c9c9
|
||||
---
|
||||
sensors/aidl/convert/convert.cpp | 9 ++++++++-
|
||||
1 file changed, 8 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/sensors/aidl/convert/convert.cpp b/sensors/aidl/convert/convert.cpp
|
||||
index 2dc7a177a..be3833dfa 100644
|
||||
--- a/sensors/aidl/convert/convert.cpp
|
||||
+++ b/sensors/aidl/convert/convert.cpp
|
||||
@@ -162,7 +162,14 @@ void convertToSensorEvent(const Event& src, sensors_event_t* dst) {
|
||||
case SensorType::MOTION_DETECT:
|
||||
case SensorType::HEART_BEAT:
|
||||
case SensorType::LOW_LATENCY_OFFBODY_DETECT: {
|
||||
- dst->data[0] = src.payload.get<Event::EventPayload::scalar>();
|
||||
+ if (src.payload.getTag() == Event::EventPayload::pose6DOF) {
|
||||
+ auto d = src.payload.get<Event::EventPayload::pose6DOF>();
|
||||
+ auto dstr = ::android::internal::ToString(d);
|
||||
+ // ALOGE("Received 6DOF for expected scalar %s", dstr.c_str());
|
||||
+ dst->data[0] = d.values[0];
|
||||
+ } else {
|
||||
+ dst->data[0] = src.payload.get<Event::EventPayload::scalar>();
|
||||
+ }
|
||||
break;
|
||||
}
|
||||
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -0,0 +1,363 @@
|
||||
From 5310d801b343b76a82247193b092e7944681e3c0 Mon Sep 17 00:00:00 2001
|
||||
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||
Date: Thu, 22 Sep 2022 12:37:50 +0000
|
||||
Subject: [PATCH 1/8] TrebleSettings: Screen resolution & refresh rate
|
||||
|
||||
Change-Id: I4a4679cdb6d4ede55479e9ab2f014342025b0fec
|
||||
---
|
||||
AndroidManifest.xml | 8 +
|
||||
res/drawable/ic_settings_treble.xml | 10 +
|
||||
res/values/menu_keys.xml | 1 +
|
||||
res/values/strings.xml | 10 +
|
||||
res/xml/top_level_settings.xml | 9 +
|
||||
res/xml/treble_settings.xml | 18 ++
|
||||
...lutionRefreshRatePreferenceController.java | 176 ++++++++++++++++++
|
||||
.../settings/treble/TrebleSettings.java | 39 ++++
|
||||
8 files changed, 271 insertions(+)
|
||||
create mode 100644 res/drawable/ic_settings_treble.xml
|
||||
create mode 100644 res/xml/treble_settings.xml
|
||||
create mode 100644 src/com/android/settings/treble/ScreenResolutionRefreshRatePreferenceController.java
|
||||
create mode 100644 src/com/android/settings/treble/TrebleSettings.java
|
||||
|
||||
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
|
||||
index f05f3d2381..9cf3b4fd2d 100644
|
||||
--- a/AndroidManifest.xml
|
||||
+++ b/AndroidManifest.xml
|
||||
@@ -241,6 +241,14 @@
|
||||
android:value="com.android.settings.shortcut.CreateShortcut" />
|
||||
</activity>
|
||||
|
||||
+ <receiver
|
||||
+ android:name=".treble.ScreenResolutionRefreshRatePreferenceController$BootReceiver"
|
||||
+ android:exported="true">
|
||||
+ <intent-filter>
|
||||
+ <action android:name="android.intent.action.BOOT_COMPLETED"/>
|
||||
+ </intent-filter>
|
||||
+ </receiver>
|
||||
+
|
||||
<!-- Wireless Controls -->
|
||||
<activity
|
||||
android:name=".Settings$NetworkDashboardActivity"
|
||||
diff --git a/res/drawable/ic_settings_treble.xml b/res/drawable/ic_settings_treble.xml
|
||||
new file mode 100644
|
||||
index 0000000000..3c56ed7032
|
||||
--- /dev/null
|
||||
+++ b/res/drawable/ic_settings_treble.xml
|
||||
@@ -0,0 +1,10 @@
|
||||
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
+ android:width="24dp"
|
||||
+ android:height="24dp"
|
||||
+ android:viewportWidth="24.0"
|
||||
+ android:viewportHeight="24.0"
|
||||
+ android:tint="?attr/colorControlNormal">
|
||||
+ <path
|
||||
+ android:fillColor="@android:color/white"
|
||||
+ android:pathData="M10.82 12.49c.02-.16.04-.32.04-.49 0-.17-.02-.33-.04-.49l1.08-.82c.1-.07.12-.21.06-.32l-1.03-1.73c-.06-.11-.2-.15-.31-.11l-1.28.5c-.27-.2-.56-.36-.87-.49l-.2-1.33c0-.12-.11-.21-.24-.21H5.98c-.13 0-.24.09-.26.21l-.2 1.32c-.31.12-.6.3-.87.49l-1.28-.5c-.12-.05-.25 0-.31.11l-1.03 1.73c-.06.12-.03.25.07.33l1.08.82c-.02.16-.03.33-.03.49 0 .17.02.33.04.49l-1.09.83c-.1.07-.12.21-.06.32l1.03 1.73c.06.11.2.15.31.11l1.28-.5c.27.2.56.36.87.49l.2 1.32c.01.12.12.21.25.21h2.06c.13 0 .24-.09.25-.21l.2-1.32c.31-.12.6-.3.87-.49l1.28.5c.12.05.25 0 .31-.11l1.03-1.73c.06-.11.04-.24-.06-.32l-1.1-.83zM7 13.75c-.99 0-1.8-.78-1.8-1.75s.81-1.75 1.8-1.75 1.8.78 1.8 1.75S8 13.75 7 13.75zM18 1.01L8 1c-1.1 0-2 .9-2 2v3h2V5h10v14H8v-1H6v3c0 1.1.9 2 2 2h10c1.1 0 2-.9 2-2V3c0-1.1-.9-1.99-2-1.99z"/>
|
||||
+</vector>
|
||||
diff --git a/res/values/menu_keys.xml b/res/values/menu_keys.xml
|
||||
index 27e9639122..ef25f9971c 100755
|
||||
--- a/res/values/menu_keys.xml
|
||||
+++ b/res/values/menu_keys.xml
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
|
||||
+ <string name="menu_key_treble" translatable="false">top_level_treble</string>
|
||||
<string name="menu_key_network" translatable="false">top_level_network</string>
|
||||
<string name="menu_key_communal" translatable="false">top_level_communal</string>
|
||||
<string name="menu_key_connected_devices" translatable="false">top_level_connected_devices</string>
|
||||
diff --git a/res/values/strings.xml b/res/values/strings.xml
|
||||
index 32cb7803a6..dcb08f0731 100644
|
||||
--- a/res/values/strings.xml
|
||||
+++ b/res/values/strings.xml
|
||||
@@ -6875,6 +6875,16 @@
|
||||
<!-- Text to describe the dashboard fragment title [CHAR LIMIT=16] -->
|
||||
<string name="dashboard_title">Settings</string>
|
||||
|
||||
+ <!-- Title for setting tile leading to Treble settings [CHAR LIMIT=40]-->
|
||||
+ <string name="treble_settings">Treble settings</string>
|
||||
+ <!-- Summary for Treble settings [CHAR LIMIT=NONE]-->
|
||||
+ <string name="treble_settings_summary">Fixes & tweaks for GSIs</string>
|
||||
+ <!-- Display category name [CHAR LIMIT=none] -->
|
||||
+ <string name="treble_settings_category_name_display">Display</string>
|
||||
+
|
||||
+ <!-- Treble settings screen, screen resolution and refresh rate settings title -->
|
||||
+ <string name="screen_resolution_refresh_rate_title">Screen resolution & refresh rate</string>
|
||||
+
|
||||
<!-- Title for setting tile leading to network and Internet settings [CHAR LIMIT=40]-->
|
||||
<string name="network_dashboard_title">Network & internet</string>
|
||||
<!-- Summary for Network and Internet settings, explaining it contains mobile, wifi setting and data usage settings [CHAR LIMIT=NONE]-->
|
||||
diff --git a/res/xml/top_level_settings.xml b/res/xml/top_level_settings.xml
|
||||
index d050a1f274..258a567f56 100644
|
||||
--- a/res/xml/top_level_settings.xml
|
||||
+++ b/res/xml/top_level_settings.xml
|
||||
@@ -20,6 +20,15 @@
|
||||
xmlns:settings="http://schemas.android.com/apk/res-auto"
|
||||
android:key="top_level_settings">
|
||||
|
||||
+ <com.android.settings.widget.HomepagePreference
|
||||
+ android:fragment="com.android.settings.treble.TrebleSettings"
|
||||
+ android:icon="@drawable/ic_settings_treble"
|
||||
+ android:key="top_level_treble"
|
||||
+ android:order="-160"
|
||||
+ android:title="@string/treble_settings"
|
||||
+ android:summary="@string/treble_settings_summary"
|
||||
+ settings:highlightableMenuKey="@string/menu_key_treble"/>
|
||||
+
|
||||
<com.android.settings.widget.HomepagePreference
|
||||
android:fragment="com.android.settings.network.NetworkDashboardFragment"
|
||||
android:icon="@drawable/ic_settings_wireless"
|
||||
diff --git a/res/xml/treble_settings.xml b/res/xml/treble_settings.xml
|
||||
new file mode 100644
|
||||
index 0000000000..1a82c468a2
|
||||
--- /dev/null
|
||||
+++ b/res/xml/treble_settings.xml
|
||||
@@ -0,0 +1,18 @@
|
||||
+<?xml version="1.0" encoding="utf-8"?>
|
||||
+
|
||||
+<PreferenceScreen
|
||||
+ xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
|
||||
+ android:key="treble_settings_screen"
|
||||
+ android:title="@string/treble_settings">
|
||||
+
|
||||
+ <PreferenceCategory
|
||||
+ android:title="@string/treble_settings_category_name_display">
|
||||
+
|
||||
+ <ListPreference
|
||||
+ android:key="screen_resolution_refresh_rate"
|
||||
+ android:title="@string/screen_resolution_refresh_rate_title" />
|
||||
+
|
||||
+ </PreferenceCategory>
|
||||
+
|
||||
+</PreferenceScreen>
|
||||
diff --git a/src/com/android/settings/treble/ScreenResolutionRefreshRatePreferenceController.java b/src/com/android/settings/treble/ScreenResolutionRefreshRatePreferenceController.java
|
||||
new file mode 100644
|
||||
index 0000000000..d8d7b4faf6
|
||||
--- /dev/null
|
||||
+++ b/src/com/android/settings/treble/ScreenResolutionRefreshRatePreferenceController.java
|
||||
@@ -0,0 +1,176 @@
|
||||
+package com.android.settings.treble;
|
||||
+
|
||||
+import static android.content.Intent.ACTION_BOOT_COMPLETED;
|
||||
+
|
||||
+import android.app.ActivityManager;
|
||||
+import android.content.BroadcastReceiver;
|
||||
+import android.content.Context;
|
||||
+import android.content.Intent;
|
||||
+import android.os.IBinder;
|
||||
+import android.os.Parcel;
|
||||
+import android.os.RemoteException;
|
||||
+import android.os.ServiceManager;
|
||||
+import android.os.SystemProperties;
|
||||
+import android.view.SurfaceControl;
|
||||
+import android.view.SurfaceControl.DisplayMode;
|
||||
+
|
||||
+import androidx.preference.ListPreference;
|
||||
+import androidx.preference.Preference;
|
||||
+import androidx.preference.PreferenceScreen;
|
||||
+
|
||||
+import com.android.settings.core.BasePreferenceController;
|
||||
+
|
||||
+import java.util.ArrayList;
|
||||
+import java.util.Collections;
|
||||
+import java.util.Comparator;
|
||||
+import java.util.HashSet;
|
||||
+import java.util.List;
|
||||
+import java.util.Set;
|
||||
+
|
||||
+public class ScreenResolutionRefreshRatePreferenceController extends BasePreferenceController
|
||||
+ implements Preference.OnPreferenceChangeListener {
|
||||
+
|
||||
+ private static final String SCREEN_RESOLUTION_REFRESH_RATE_KEY = "screen_resolution_refresh_rate";
|
||||
+ private static final String SURFACE_FLINGER_SERVICE_KEY = "SurfaceFlinger";
|
||||
+ private static final String SURFACE_COMPOSER_INTERFACE_KEY = "android.ui.ISurfaceComposer";
|
||||
+ private static final int SURFACE_FLINGER_CODE = 1035;
|
||||
+ private static final String TREBLE_DISPLAY_MODE_PROPERTY = "persist.sys.treble.display_mode";
|
||||
+ private static final String SYSTEMUI_PACKAGE_NAME = "com.android.systemui";
|
||||
+
|
||||
+ private ActivityManager mAm;
|
||||
+ private ListPreference mListPreference;
|
||||
+ private List<DisplayMode> mModes = new ArrayList<>();
|
||||
+ private List<String> mEntries = new ArrayList<>();
|
||||
+ private List<String> mValues = new ArrayList<>();
|
||||
+
|
||||
+ public ScreenResolutionRefreshRatePreferenceController(Context context) {
|
||||
+ super(context, SCREEN_RESOLUTION_REFRESH_RATE_KEY);
|
||||
+
|
||||
+ mAm = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
|
||||
+
|
||||
+ long[] physicalDisplayIds = SurfaceControl.getPhysicalDisplayIds();
|
||||
+ DisplayMode[] supportedDisplayModes =
|
||||
+ SurfaceControl.getDynamicDisplayInfo(physicalDisplayIds[0]).supportedDisplayModes;
|
||||
+ Set<String> summarySet = new HashSet<>();
|
||||
+ for (DisplayMode m : supportedDisplayModes) {
|
||||
+ String summary = String.format("%dx%d @ %dHz", m.width, m.height, Math.round(m.refreshRate));
|
||||
+ if (!summarySet.contains(summary)) {
|
||||
+ summarySet.add(summary);
|
||||
+ mModes.add(m);
|
||||
+ }
|
||||
+ }
|
||||
+ Collections.sort(mModes, Comparator.comparing((DisplayMode m)->m.width)
|
||||
+ .thenComparing(m->m.height)
|
||||
+ .thenComparing(m->m.refreshRate)
|
||||
+ .thenComparing(m->m.id));
|
||||
+ for (DisplayMode m : mModes) {
|
||||
+ String summary = String.format("%dx%d @ %dHz", m.width, m.height, Math.round(m.refreshRate));
|
||||
+ mEntries.add(summary);
|
||||
+ mValues.add(String.valueOf(m.id));
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public int getAvailabilityStatus() {
|
||||
+ return AVAILABLE;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public String getPreferenceKey() {
|
||||
+ return SCREEN_RESOLUTION_REFRESH_RATE_KEY;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void displayPreference(PreferenceScreen screen) {
|
||||
+ mListPreference = screen.findPreference(getPreferenceKey());
|
||||
+ mListPreference.setEntries(mEntries.toArray(new String[mEntries.size()]));
|
||||
+ mListPreference.setEntryValues(mValues.toArray(new String[mValues.size()]));
|
||||
+
|
||||
+ if (mEntries.size() <= 1) {
|
||||
+ mListPreference.setEnabled(false);
|
||||
+ }
|
||||
+
|
||||
+ super.displayPreference(screen);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void updateState(Preference preference) {
|
||||
+ long[] physicalDisplayIds = SurfaceControl.getPhysicalDisplayIds();
|
||||
+ int id = SurfaceControl.getDynamicDisplayInfo(physicalDisplayIds[0]).activeDisplayModeId;
|
||||
+ int index = mListPreference.findIndexOfValue(String.valueOf(id));
|
||||
+ try {
|
||||
+ mListPreference.setValueIndex(index);
|
||||
+ mListPreference.setSummary(mListPreference.getEntries()[index]);
|
||||
+ } catch (ArrayIndexOutOfBoundsException e) {
|
||||
+ e.printStackTrace();
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
+ DisplayMode currentMode = getCurrentMode();
|
||||
+ int id = Integer.valueOf((String) newValue);
|
||||
+ DisplayMode newMode = getModeById(id);
|
||||
+ setModeFromBackdoor(id);
|
||||
+ SystemProperties.set(TREBLE_DISPLAY_MODE_PROPERTY, (String) newValue);
|
||||
+ int index = mListPreference.findIndexOfValue((String) newValue);
|
||||
+ mListPreference.setValueIndex(index);
|
||||
+ mListPreference.setSummary(mListPreference.getEntries()[index]);
|
||||
+ if ((newMode.width != currentMode.width) || (newMode.height != currentMode.height)) {
|
||||
+ try {
|
||||
+ for (ActivityManager.RunningAppProcessInfo app: mAm.getRunningAppProcesses()) {
|
||||
+ if (app.processName.equals(SYSTEMUI_PACKAGE_NAME)) {
|
||||
+ ActivityManager.getService().killApplicationProcess(app.processName, app.uid);
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ } catch (Exception e) {
|
||||
+ e.printStackTrace();
|
||||
+ }
|
||||
+ }
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ private DisplayMode getCurrentMode() {
|
||||
+ long[] physicalDisplayIds = SurfaceControl.getPhysicalDisplayIds();
|
||||
+ int id = SurfaceControl.getDynamicDisplayInfo(physicalDisplayIds[0]).activeDisplayModeId;
|
||||
+ return getModeById(id);
|
||||
+ }
|
||||
+
|
||||
+ private DisplayMode getModeById(int id) {
|
||||
+ for (DisplayMode m : mModes) {
|
||||
+ if (m.id == id) {
|
||||
+ return m;
|
||||
+ }
|
||||
+ }
|
||||
+ return null;
|
||||
+ }
|
||||
+
|
||||
+ public static void setModeFromBackdoor(int id) {
|
||||
+ IBinder surfaceFlinger = ServiceManager.getService(SURFACE_FLINGER_SERVICE_KEY);
|
||||
+ try {
|
||||
+ if (surfaceFlinger != null) {
|
||||
+ Parcel data = Parcel.obtain();
|
||||
+ data.writeInterfaceToken(SURFACE_COMPOSER_INTERFACE_KEY);
|
||||
+ data.writeInt(id);
|
||||
+ surfaceFlinger.transact(SURFACE_FLINGER_CODE, data, null, 0);
|
||||
+ data.recycle();
|
||||
+ }
|
||||
+ } catch (RemoteException ex) {}
|
||||
+ }
|
||||
+
|
||||
+ public static class BootReceiver extends BroadcastReceiver {
|
||||
+
|
||||
+ @Override
|
||||
+ public void onReceive(Context context, Intent intent) {
|
||||
+ if (ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
|
||||
+ int id = SystemProperties.getInt(TREBLE_DISPLAY_MODE_PROPERTY, -1);
|
||||
+ if (id != -1) {
|
||||
+ setModeFromBackdoor(id);
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ }
|
||||
+
|
||||
+}
|
||||
diff --git a/src/com/android/settings/treble/TrebleSettings.java b/src/com/android/settings/treble/TrebleSettings.java
|
||||
new file mode 100644
|
||||
index 0000000000..e581539229
|
||||
--- /dev/null
|
||||
+++ b/src/com/android/settings/treble/TrebleSettings.java
|
||||
@@ -0,0 +1,39 @@
|
||||
+package com.android.settings.treble;
|
||||
+
|
||||
+import android.app.settings.SettingsEnums;
|
||||
+import android.content.Context;
|
||||
+
|
||||
+import com.android.settings.R;
|
||||
+import com.android.settings.dashboard.DashboardFragment;
|
||||
+import com.android.settingslib.core.AbstractPreferenceController;
|
||||
+
|
||||
+import java.util.ArrayList;
|
||||
+import java.util.List;
|
||||
+
|
||||
+public class TrebleSettings extends DashboardFragment {
|
||||
+
|
||||
+ private static final String TAG = "TrebleSettings";
|
||||
+
|
||||
+ @Override
|
||||
+ protected int getPreferenceScreenResId() {
|
||||
+ return R.xml.treble_settings;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ protected String getLogTag() {
|
||||
+ return TAG;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public int getMetricsCategory() {
|
||||
+ return SettingsEnums.SETTINGS_TREBLE_CATEGORY;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
|
||||
+ final List<AbstractPreferenceController> controllers = new ArrayList<>();
|
||||
+ controllers.add(new ScreenResolutionRefreshRatePreferenceController(context));
|
||||
+ return controllers;
|
||||
+ }
|
||||
+
|
||||
+}
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -0,0 +1,288 @@
|
||||
From 01ce7e73cb79e56484594b0ce03eb2ebfa193e90 Mon Sep 17 00:00:00 2001
|
||||
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||
Date: Sat, 24 Sep 2022 03:38:41 +0000
|
||||
Subject: [PATCH 2/8] TrebleSettings: Basic audio and display fixes
|
||||
|
||||
- Alternative audio policy
|
||||
- Disable soundvolume effect
|
||||
- Alternative backlight scale
|
||||
|
||||
Change-Id: I4f22dcd9c59c40b3fd70ba642db35b9466467b7d
|
||||
---
|
||||
res/values/strings.xml | 8 +++
|
||||
res/xml/treble_settings.xml | 17 ++++++
|
||||
...SoundvolumeEffectPreferenceController.java | 59 +++++++++++++++++++
|
||||
.../settings/treble/TrebleSettings.java | 3 +
|
||||
...nativeAudioPolicyPreferenceController.java | 59 +++++++++++++++++++
|
||||
...iveBacklightScalePreferenceController.java | 53 +++++++++++++++++
|
||||
6 files changed, 199 insertions(+)
|
||||
create mode 100644 src/com/android/settings/treble/DisableSoundvolumeEffectPreferenceController.java
|
||||
create mode 100644 src/com/android/settings/treble/UseAlternativeAudioPolicyPreferenceController.java
|
||||
create mode 100644 src/com/android/settings/treble/UseAlternativeBacklightScalePreferenceController.java
|
||||
|
||||
diff --git a/res/values/strings.xml b/res/values/strings.xml
|
||||
index dcb08f0731..f799b4d0c7 100644
|
||||
--- a/res/values/strings.xml
|
||||
+++ b/res/values/strings.xml
|
||||
@@ -6879,11 +6879,19 @@
|
||||
<string name="treble_settings">Treble settings</string>
|
||||
<!-- Summary for Treble settings [CHAR LIMIT=NONE]-->
|
||||
<string name="treble_settings_summary">Fixes & tweaks for GSIs</string>
|
||||
+ <!-- Audio category name [CHAR LIMIT=none] -->
|
||||
+ <string name="treble_settings_category_name_audio">Audio</string>
|
||||
<!-- Display category name [CHAR LIMIT=none] -->
|
||||
<string name="treble_settings_category_name_display">Display</string>
|
||||
|
||||
+ <!-- Treble settings screen, use alternative audio policy title -->
|
||||
+ <string name="use_alternative_audio_policy_title">Use alternative audio policy</string>
|
||||
+ <!-- Treble settings screen, disable soundvolume effect title -->
|
||||
+ <string name="disable_soundvolume_effect_title">Disable soundvolume effect</string>
|
||||
<!-- Treble settings screen, screen resolution and refresh rate settings title -->
|
||||
<string name="screen_resolution_refresh_rate_title">Screen resolution & refresh rate</string>
|
||||
+ <!-- Treble settings screen, use alternative backlight scale title -->
|
||||
+ <string name="use_alternative_backlight_scale_title">Use alternative backlight scale</string>
|
||||
|
||||
<!-- Title for setting tile leading to network and Internet settings [CHAR LIMIT=40]-->
|
||||
<string name="network_dashboard_title">Network & internet</string>
|
||||
diff --git a/res/xml/treble_settings.xml b/res/xml/treble_settings.xml
|
||||
index 1a82c468a2..336137c95f 100644
|
||||
--- a/res/xml/treble_settings.xml
|
||||
+++ b/res/xml/treble_settings.xml
|
||||
@@ -6,6 +6,19 @@
|
||||
android:key="treble_settings_screen"
|
||||
android:title="@string/treble_settings">
|
||||
|
||||
+ <PreferenceCategory
|
||||
+ android:title="@string/treble_settings_category_name_audio">
|
||||
+
|
||||
+ <SwitchPreference
|
||||
+ android:key="use_alternative_audio_policy"
|
||||
+ android:title="@string/use_alternative_audio_policy_title" />
|
||||
+
|
||||
+ <SwitchPreference
|
||||
+ android:key="disable_soundvolume_effect"
|
||||
+ android:title="@string/disable_soundvolume_effect_title" />
|
||||
+
|
||||
+ </PreferenceCategory>
|
||||
+
|
||||
<PreferenceCategory
|
||||
android:title="@string/treble_settings_category_name_display">
|
||||
|
||||
@@ -13,6 +26,10 @@
|
||||
android:key="screen_resolution_refresh_rate"
|
||||
android:title="@string/screen_resolution_refresh_rate_title" />
|
||||
|
||||
+ <SwitchPreference
|
||||
+ android:key="use_alternative_backlight_scale"
|
||||
+ android:title="@string/use_alternative_backlight_scale_title" />
|
||||
+
|
||||
</PreferenceCategory>
|
||||
|
||||
</PreferenceScreen>
|
||||
diff --git a/src/com/android/settings/treble/DisableSoundvolumeEffectPreferenceController.java b/src/com/android/settings/treble/DisableSoundvolumeEffectPreferenceController.java
|
||||
new file mode 100644
|
||||
index 0000000000..8feb318f55
|
||||
--- /dev/null
|
||||
+++ b/src/com/android/settings/treble/DisableSoundvolumeEffectPreferenceController.java
|
||||
@@ -0,0 +1,59 @@
|
||||
+package com.android.settings.treble;
|
||||
+
|
||||
+import android.content.Context;
|
||||
+import android.os.SystemProperties;
|
||||
+
|
||||
+import androidx.preference.Preference;
|
||||
+import androidx.preference.PreferenceScreen;
|
||||
+import androidx.preference.SwitchPreference;
|
||||
+
|
||||
+import com.android.settings.core.BasePreferenceController;
|
||||
+
|
||||
+public class DisableSoundvolumeEffectPreferenceController extends BasePreferenceController
|
||||
+ implements Preference.OnPreferenceChangeListener {
|
||||
+
|
||||
+ private static final String DISABLE_SOUNDVOLUME_EFFECT_KEY = "disable_soundvolume_effect";
|
||||
+ private static final String RO_HARDWARE_PROPERTY = "ro.hardware";
|
||||
+ private static final String TREBLE_CAF_DISABLE_SOUNDVOLUME_EFFECT_PROPERTY = "persist.sys.treble.caf.disable_soundvolume_effect";
|
||||
+
|
||||
+ private SwitchPreference mSwitchPreference;
|
||||
+
|
||||
+ public DisableSoundvolumeEffectPreferenceController(Context context) {
|
||||
+ super(context, DISABLE_SOUNDVOLUME_EFFECT_KEY);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public int getAvailabilityStatus() {
|
||||
+ return AVAILABLE;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public String getPreferenceKey() {
|
||||
+ return DISABLE_SOUNDVOLUME_EFFECT_KEY;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void displayPreference(PreferenceScreen screen) {
|
||||
+ mSwitchPreference = screen.findPreference(getPreferenceKey());
|
||||
+
|
||||
+ if (!SystemProperties.get(RO_HARDWARE_PROPERTY, "N/A").equals("qcom")) {
|
||||
+ mSwitchPreference.setEnabled(false);
|
||||
+ }
|
||||
+
|
||||
+ super.displayPreference(screen);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void updateState(Preference preference) {
|
||||
+ boolean checked = SystemProperties.getBoolean(TREBLE_CAF_DISABLE_SOUNDVOLUME_EFFECT_PROPERTY, false);
|
||||
+ mSwitchPreference.setChecked(checked);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
+ SystemProperties.set(TREBLE_CAF_DISABLE_SOUNDVOLUME_EFFECT_PROPERTY, String.valueOf((boolean) newValue));
|
||||
+ mSwitchPreference.setChecked((boolean) newValue);
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+}
|
||||
diff --git a/src/com/android/settings/treble/TrebleSettings.java b/src/com/android/settings/treble/TrebleSettings.java
|
||||
index e581539229..5c1611c053 100644
|
||||
--- a/src/com/android/settings/treble/TrebleSettings.java
|
||||
+++ b/src/com/android/settings/treble/TrebleSettings.java
|
||||
@@ -32,7 +32,10 @@ public class TrebleSettings extends DashboardFragment {
|
||||
@Override
|
||||
protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
|
||||
final List<AbstractPreferenceController> controllers = new ArrayList<>();
|
||||
+ controllers.add(new UseAlternativeAudioPolicyPreferenceController(context));
|
||||
+ controllers.add(new DisableSoundvolumeEffectPreferenceController(context));
|
||||
controllers.add(new ScreenResolutionRefreshRatePreferenceController(context));
|
||||
+ controllers.add(new UseAlternativeBacklightScalePreferenceController(context));
|
||||
return controllers;
|
||||
}
|
||||
|
||||
diff --git a/src/com/android/settings/treble/UseAlternativeAudioPolicyPreferenceController.java b/src/com/android/settings/treble/UseAlternativeAudioPolicyPreferenceController.java
|
||||
new file mode 100644
|
||||
index 0000000000..fbc327cba0
|
||||
--- /dev/null
|
||||
+++ b/src/com/android/settings/treble/UseAlternativeAudioPolicyPreferenceController.java
|
||||
@@ -0,0 +1,59 @@
|
||||
+package com.android.settings.treble;
|
||||
+
|
||||
+import android.content.Context;
|
||||
+import android.os.SystemProperties;
|
||||
+
|
||||
+import androidx.preference.Preference;
|
||||
+import androidx.preference.PreferenceScreen;
|
||||
+import androidx.preference.SwitchPreference;
|
||||
+
|
||||
+import com.android.settings.core.BasePreferenceController;
|
||||
+
|
||||
+public class UseAlternativeAudioPolicyPreferenceController extends BasePreferenceController
|
||||
+ implements Preference.OnPreferenceChangeListener {
|
||||
+
|
||||
+ private static final String USE_ALTERNATIVE_AUDIO_POLICY_KEY = "use_alternative_audio_policy";
|
||||
+ private static final String RO_HARDWARE_PROPERTY = "ro.hardware";
|
||||
+ private static final String TREBLE_CAF_AUDIO_POLICY_PROPERTY = "persist.sys.treble.caf.audio_policy";
|
||||
+
|
||||
+ private SwitchPreference mSwitchPreference;
|
||||
+
|
||||
+ public UseAlternativeAudioPolicyPreferenceController(Context context) {
|
||||
+ super(context, USE_ALTERNATIVE_AUDIO_POLICY_KEY);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public int getAvailabilityStatus() {
|
||||
+ return AVAILABLE;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public String getPreferenceKey() {
|
||||
+ return USE_ALTERNATIVE_AUDIO_POLICY_KEY;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void displayPreference(PreferenceScreen screen) {
|
||||
+ mSwitchPreference = screen.findPreference(getPreferenceKey());
|
||||
+
|
||||
+ if (!SystemProperties.get(RO_HARDWARE_PROPERTY, "N/A").equals("qcom")) {
|
||||
+ mSwitchPreference.setEnabled(false);
|
||||
+ }
|
||||
+
|
||||
+ super.displayPreference(screen);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void updateState(Preference preference) {
|
||||
+ boolean checked = SystemProperties.getBoolean(TREBLE_CAF_AUDIO_POLICY_PROPERTY, false);
|
||||
+ mSwitchPreference.setChecked(checked);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
+ SystemProperties.set(TREBLE_CAF_AUDIO_POLICY_PROPERTY, String.valueOf((boolean) newValue));
|
||||
+ mSwitchPreference.setChecked((boolean) newValue);
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+}
|
||||
diff --git a/src/com/android/settings/treble/UseAlternativeBacklightScalePreferenceController.java b/src/com/android/settings/treble/UseAlternativeBacklightScalePreferenceController.java
|
||||
new file mode 100644
|
||||
index 0000000000..bd9de82d90
|
||||
--- /dev/null
|
||||
+++ b/src/com/android/settings/treble/UseAlternativeBacklightScalePreferenceController.java
|
||||
@@ -0,0 +1,53 @@
|
||||
+package com.android.settings.treble;
|
||||
+
|
||||
+import android.content.Context;
|
||||
+import android.os.SystemProperties;
|
||||
+
|
||||
+import androidx.preference.Preference;
|
||||
+import androidx.preference.PreferenceScreen;
|
||||
+import androidx.preference.SwitchPreference;
|
||||
+
|
||||
+import com.android.settings.core.BasePreferenceController;
|
||||
+
|
||||
+public class UseAlternativeBacklightScalePreferenceController extends BasePreferenceController
|
||||
+ implements Preference.OnPreferenceChangeListener {
|
||||
+
|
||||
+ private static final String USE_ALTERNATIVE_BACKLIGHT_SCALE_KEY = "use_alternative_backlight_scale";
|
||||
+ private static final String TREBLE_BACKLIGHT_SCALE_PROPERTY = "persist.sys.treble.backlight_scale";
|
||||
+
|
||||
+ private SwitchPreference mSwitchPreference;
|
||||
+
|
||||
+ public UseAlternativeBacklightScalePreferenceController(Context context) {
|
||||
+ super(context, USE_ALTERNATIVE_BACKLIGHT_SCALE_KEY);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public int getAvailabilityStatus() {
|
||||
+ return AVAILABLE;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public String getPreferenceKey() {
|
||||
+ return USE_ALTERNATIVE_BACKLIGHT_SCALE_KEY;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void displayPreference(PreferenceScreen screen) {
|
||||
+ mSwitchPreference = screen.findPreference(getPreferenceKey());
|
||||
+ super.displayPreference(screen);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void updateState(Preference preference) {
|
||||
+ boolean checked = SystemProperties.getBoolean(TREBLE_BACKLIGHT_SCALE_PROPERTY, false);
|
||||
+ mSwitchPreference.setChecked(checked);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
+ SystemProperties.set(TREBLE_BACKLIGHT_SCALE_PROPERTY, String.valueOf((boolean) newValue));
|
||||
+ mSwitchPreference.setChecked((boolean) newValue);
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+}
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -0,0 +1,374 @@
|
||||
From 9cef4d5c64956f27e73320c6f5cc28201bd2692c Mon Sep 17 00:00:00 2001
|
||||
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||
Date: Tue, 11 Oct 2022 10:29:36 +0000
|
||||
Subject: [PATCH 3/8] TrebleSettings: IMS
|
||||
|
||||
Change-Id: Id7a12e150d4a3dc988f8ce1a888ad88443fa0ea4
|
||||
---
|
||||
Android.bp | 1 +
|
||||
res/values/strings.xml | 9 +
|
||||
res/xml/treble_settings.xml | 13 ++
|
||||
.../InstallImsApkPreferenceController.java | 209 ++++++++++++++++++
|
||||
...VolteAvailabilityPreferenceController.java | 59 +++++
|
||||
.../settings/treble/TrebleSettings.java | 2 +
|
||||
6 files changed, 293 insertions(+)
|
||||
create mode 100644 src/com/android/settings/treble/InstallImsApkPreferenceController.java
|
||||
create mode 100644 src/com/android/settings/treble/OverrideVolteAvailabilityPreferenceController.java
|
||||
|
||||
diff --git a/Android.bp b/Android.bp
|
||||
index 8cd7aa76aa..20efe42a50 100644
|
||||
--- a/Android.bp
|
||||
+++ b/Android.bp
|
||||
@@ -105,6 +105,7 @@ android_library {
|
||||
"LineagePreferenceLib",
|
||||
"vendor.lineage.fastcharge-V1.0-java",
|
||||
"SystemUISharedLib",
|
||||
+ "android.hidl.manager-V1.0-java",
|
||||
],
|
||||
|
||||
plugins: ["androidx.room_room-compiler-plugin"],
|
||||
diff --git a/res/values/strings.xml b/res/values/strings.xml
|
||||
index f799b4d0c7..1df0fe22f1 100644
|
||||
--- a/res/values/strings.xml
|
||||
+++ b/res/values/strings.xml
|
||||
@@ -6883,6 +6883,8 @@
|
||||
<string name="treble_settings_category_name_audio">Audio</string>
|
||||
<!-- Display category name [CHAR LIMIT=none] -->
|
||||
<string name="treble_settings_category_name_display">Display</string>
|
||||
+ <!-- IMS category name [CHAR LIMIT=none] -->
|
||||
+ <string name="treble_settings_category_name_ims">IMS</string>
|
||||
|
||||
<!-- Treble settings screen, use alternative audio policy title -->
|
||||
<string name="use_alternative_audio_policy_title">Use alternative audio policy</string>
|
||||
@@ -6892,6 +6894,13 @@
|
||||
<string name="screen_resolution_refresh_rate_title">Screen resolution & refresh rate</string>
|
||||
<!-- Treble settings screen, use alternative backlight scale title -->
|
||||
<string name="use_alternative_backlight_scale_title">Use alternative backlight scale</string>
|
||||
+ <!-- Treble settings screen, install IMS APK title -->
|
||||
+ <string name="install_ims_apk_title">Install IMS APK</string>
|
||||
+ <!-- Treble settings screen, install IMS APK toasts -->
|
||||
+ <string name="install_ims_apk_toast_downloading">Downloading IMS APK...</string>
|
||||
+ <string name="install_ims_apk_toast_completed">IMS APK installed. Reboot required.</string>
|
||||
+ <!-- Treble settings screen, override VoLTE availability title -->
|
||||
+ <string name="override_volte_availability_title">Override VoLTE availability</string>
|
||||
|
||||
<!-- Title for setting tile leading to network and Internet settings [CHAR LIMIT=40]-->
|
||||
<string name="network_dashboard_title">Network & internet</string>
|
||||
diff --git a/res/xml/treble_settings.xml b/res/xml/treble_settings.xml
|
||||
index 336137c95f..09e6bc5d00 100644
|
||||
--- a/res/xml/treble_settings.xml
|
||||
+++ b/res/xml/treble_settings.xml
|
||||
@@ -32,4 +32,17 @@
|
||||
|
||||
</PreferenceCategory>
|
||||
|
||||
+ <PreferenceCategory
|
||||
+ android:title="@string/treble_settings_category_name_ims">
|
||||
+
|
||||
+ <Preference
|
||||
+ android:key="install_ims_apk"
|
||||
+ android:title="@string/install_ims_apk_title" />
|
||||
+
|
||||
+ <SwitchPreference
|
||||
+ android:key="override_volte_availability"
|
||||
+ android:title="@string/override_volte_availability_title" />
|
||||
+
|
||||
+ </PreferenceCategory>
|
||||
+
|
||||
</PreferenceScreen>
|
||||
diff --git a/src/com/android/settings/treble/InstallImsApkPreferenceController.java b/src/com/android/settings/treble/InstallImsApkPreferenceController.java
|
||||
new file mode 100644
|
||||
index 0000000000..6a63cbf1bf
|
||||
--- /dev/null
|
||||
+++ b/src/com/android/settings/treble/InstallImsApkPreferenceController.java
|
||||
@@ -0,0 +1,209 @@
|
||||
+package com.android.settings.treble;
|
||||
+
|
||||
+import android.app.DownloadManager;
|
||||
+import android.app.PendingIntent;
|
||||
+import android.content.BroadcastReceiver;
|
||||
+import android.content.Context;
|
||||
+import android.content.Intent;
|
||||
+import android.content.IntentFilter;
|
||||
+import android.content.pm.PackageInstaller;
|
||||
+import android.database.Cursor;
|
||||
+import android.hidl.manager.V1_0.IServiceManager;
|
||||
+import android.net.Uri;
|
||||
+import android.os.Environment;
|
||||
+import android.os.RemoteException;
|
||||
+import android.os.ServiceManager;
|
||||
+import android.os.SystemProperties;
|
||||
+import android.util.Log;
|
||||
+import android.widget.Toast;
|
||||
+
|
||||
+import androidx.preference.Preference;
|
||||
+import androidx.preference.PreferenceScreen;
|
||||
+
|
||||
+import com.android.settings.R;
|
||||
+import com.android.settings.core.BasePreferenceController;
|
||||
+
|
||||
+import java.io.File;
|
||||
+import java.io.FileInputStream;
|
||||
+import java.io.IOException;
|
||||
+import java.io.InputStream;
|
||||
+import java.io.OutputStream;
|
||||
+
|
||||
+public class InstallImsApkPreferenceController extends BasePreferenceController
|
||||
+ implements Preference.OnPreferenceClickListener {
|
||||
+
|
||||
+ private static final String TAG = "TrebleSettings";
|
||||
+ private static final String INSTALL_IMS_APK_KEY = "install_ims_apk";
|
||||
+ private static final String[] IMS_SLOTS = {
|
||||
+ "imsrild1", "imsrild2", "imsrild3",
|
||||
+ "slot1", "slot2", "slot3",
|
||||
+ "imsSlot1", "imsSlot2",
|
||||
+ "mtkSlot1", "mtkSlot2",
|
||||
+ "imsradio0", "imsradio1"
|
||||
+ };
|
||||
+ private static final String RO_PRODUCT_VENDOR_BRAND_PROPERTY = "ro.product.vendor.brand";
|
||||
+
|
||||
+ private Preference mPreference;
|
||||
+ private String mImsType = "none";
|
||||
+ private String mImsApkUrl = "";
|
||||
+
|
||||
+ public InstallImsApkPreferenceController(Context context) {
|
||||
+ super(context, INSTALL_IMS_APK_KEY);
|
||||
+
|
||||
+ mImsType = getImsType();
|
||||
+ Log.d(TAG, "IMS type = " + mImsType);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public int getAvailabilityStatus() {
|
||||
+ return AVAILABLE;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public String getPreferenceKey() {
|
||||
+ return INSTALL_IMS_APK_KEY;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void displayPreference(PreferenceScreen screen) {
|
||||
+ mPreference = screen.findPreference(getPreferenceKey());
|
||||
+
|
||||
+ if (mImsType.equals("none")) {
|
||||
+ mPreference.setEnabled(false);
|
||||
+ } else {
|
||||
+ mPreference.setOnPreferenceClickListener(this);
|
||||
+ String summary = "IMS type: ";
|
||||
+ switch (mImsType) {
|
||||
+ case "qcom":
|
||||
+ summary += "Qualcomm";
|
||||
+ break;
|
||||
+ case "mtk_p":
|
||||
+ summary += "MediaTek P";
|
||||
+ break;
|
||||
+ case "mtk_q":
|
||||
+ summary += "MediaTek Q";
|
||||
+ break;
|
||||
+ case "mtk_r":
|
||||
+ summary += "MediaTek R";
|
||||
+ break;
|
||||
+ case "mtk_s":
|
||||
+ summary += "MediaTek S";
|
||||
+ break;
|
||||
+ default:
|
||||
+ break;
|
||||
+ }
|
||||
+ mPreference.setSummary(summary);
|
||||
+ }
|
||||
+
|
||||
+ super.displayPreference(screen);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean onPreferenceClick(Preference preference) {
|
||||
+ switch (mImsType) {
|
||||
+ case "qcom":
|
||||
+ mImsApkUrl = "https://treble.phh.me/ims-caf-u.apk";
|
||||
+ break;
|
||||
+ case "mtk_p":
|
||||
+ mImsApkUrl = "https://treble.phh.me/stable/ims-mtk-p.apk";
|
||||
+ break;
|
||||
+ case "mtk_q":
|
||||
+ mImsApkUrl = "https://treble.phh.me/stable/ims-mtk-q.apk";
|
||||
+ break;
|
||||
+ case "mtk_r":
|
||||
+ mImsApkUrl = "https://treble.phh.me/stable/ims-mtk-r.apk";
|
||||
+ break;
|
||||
+ case "mtk_s":
|
||||
+ mImsApkUrl = "https://treble.phh.me/stable/ims-mtk-s.apk";
|
||||
+ break;
|
||||
+ default:
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ Context context = preference.getContext();
|
||||
+ DownloadManager dm = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
|
||||
+ DownloadManager.Request request = new DownloadManager.Request(Uri.parse(mImsApkUrl));
|
||||
+ request.setTitle("IMS APK");
|
||||
+ request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
|
||||
+ request.setDestinationInExternalFilesDir(context, Environment.DIRECTORY_DOWNLOADS, "ims.apk");
|
||||
+ long id = dm.enqueue(request);
|
||||
+ Toast.makeText(context, context.getString(R.string.install_ims_apk_toast_downloading), Toast.LENGTH_LONG).show();
|
||||
+
|
||||
+ context.registerReceiver(new BroadcastReceiver() {
|
||||
+ @Override
|
||||
+ public void onReceive(Context context, Intent intent) {
|
||||
+ if (intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1L) != id) {
|
||||
+ return;
|
||||
+ }
|
||||
+ Cursor cursor = dm.query(new DownloadManager.Query().setFilterById(id));
|
||||
+ if (!cursor.moveToFirst()) {
|
||||
+ return;
|
||||
+ }
|
||||
+ Uri localUri = Uri.parse(cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI)));
|
||||
+ String path = localUri.getPath();
|
||||
+ if (path == null) {
|
||||
+ return;
|
||||
+ }
|
||||
+ long fileSize = 0;
|
||||
+ File file = new File(path);
|
||||
+ if (file.isFile()) {
|
||||
+ fileSize = file.length();
|
||||
+ } else {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ try (InputStream in = new FileInputStream(path)) {
|
||||
+ PackageInstaller pi = context.getPackageManager().getPackageInstaller();
|
||||
+ int sessionId = pi.createSession(new PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL));
|
||||
+ PackageInstaller.Session session = pi.openSession(sessionId);
|
||||
+ try (OutputStream out = session.openWrite(TAG, 0, fileSize)) {
|
||||
+ byte[] buffer = new byte[512 * 1024];
|
||||
+ while (in.available() > 0) {
|
||||
+ int l = in.read(buffer);
|
||||
+ out.write(buffer, 0, l);
|
||||
+ }
|
||||
+ session.fsync(out);
|
||||
+ }
|
||||
+ String action = TAG + "_" + sessionId;
|
||||
+ PendingIntent pendingIntent = PendingIntent.getBroadcast(context, sessionId,
|
||||
+ new Intent(action), PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_IMMUTABLE);
|
||||
+ context.registerReceiver(new BroadcastReceiver() {
|
||||
+ @Override
|
||||
+ public void onReceive(Context context, Intent intent) {
|
||||
+ Toast.makeText(context, context.getString(R.string.install_ims_apk_toast_completed), Toast.LENGTH_LONG).show();
|
||||
+ }
|
||||
+ }, new IntentFilter(action));
|
||||
+ session.commit(pendingIntent.getIntentSender());
|
||||
+ context.unregisterReceiver(this);
|
||||
+ } catch (IOException ex) {
|
||||
+ Log.d(TAG, "IOException while installing IMS APK");
|
||||
+ }
|
||||
+ }
|
||||
+ }, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
|
||||
+
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ protected static String getImsType() {
|
||||
+ try {
|
||||
+ IServiceManager hidlManager = IServiceManager.getService();
|
||||
+ for (String slot: IMS_SLOTS) {
|
||||
+ if (hidlManager.get("vendor.qti.hardware.radio.ims@1.0::IImsRadio", slot) != null
|
||||
+ || ServiceManager.getService("vendor.qti.hardware.radio.ims.IImsRadio/" + slot) != null) {
|
||||
+ return "qcom";
|
||||
+ } else if (hidlManager.get("vendor.mediatek.hardware.radio@3.0::IRadio", slot) != null) {
|
||||
+ return "mtk_p";
|
||||
+ } else if (hidlManager.get("vendor.mediatek.hardware.mtkradioex@1.0::IMtkRadioEx", slot) != null) {
|
||||
+ return "mtk_q";
|
||||
+ } else if (hidlManager.get("vendor.mediatek.hardware.mtkradioex@2.0::IMtkRadioEx", slot) != null) {
|
||||
+ return "mtk_r";
|
||||
+ } else if (hidlManager.get("vendor.mediatek.hardware.mtkradioex@3.0::IMtkRadioEx", slot) != null) {
|
||||
+ return "mtk_s";
|
||||
+ }
|
||||
+ }
|
||||
+ } catch (RemoteException ex) {}
|
||||
+
|
||||
+ return "none";
|
||||
+ }
|
||||
+
|
||||
+}
|
||||
diff --git a/src/com/android/settings/treble/OverrideVolteAvailabilityPreferenceController.java b/src/com/android/settings/treble/OverrideVolteAvailabilityPreferenceController.java
|
||||
new file mode 100644
|
||||
index 0000000000..1ab12d3ca0
|
||||
--- /dev/null
|
||||
+++ b/src/com/android/settings/treble/OverrideVolteAvailabilityPreferenceController.java
|
||||
@@ -0,0 +1,59 @@
|
||||
+package com.android.settings.treble;
|
||||
+
|
||||
+import android.content.Context;
|
||||
+import android.os.SystemProperties;
|
||||
+
|
||||
+import androidx.preference.Preference;
|
||||
+import androidx.preference.PreferenceScreen;
|
||||
+import androidx.preference.SwitchPreference;
|
||||
+
|
||||
+import com.android.settings.core.BasePreferenceController;
|
||||
+
|
||||
+public class OverrideVolteAvailabilityPreferenceController extends BasePreferenceController
|
||||
+ implements Preference.OnPreferenceChangeListener {
|
||||
+
|
||||
+ private static final String OVERRIDE_VOLTE_AVAILABILITY_KEY = "override_volte_availability";
|
||||
+ private static final String[] IMSMANAGER_DEBUG_OVERRIDE_PROPERTIES = {
|
||||
+ "persist.dbg.volte_avail_ovr",
|
||||
+ "persist.dbg.wfc_avail_ovr",
|
||||
+ "persist.dbg.allow_ims_off"
|
||||
+ };
|
||||
+
|
||||
+ private SwitchPreference mSwitchPreference;
|
||||
+
|
||||
+ public OverrideVolteAvailabilityPreferenceController(Context context) {
|
||||
+ super(context, OVERRIDE_VOLTE_AVAILABILITY_KEY);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public int getAvailabilityStatus() {
|
||||
+ return AVAILABLE;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public String getPreferenceKey() {
|
||||
+ return OVERRIDE_VOLTE_AVAILABILITY_KEY;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void displayPreference(PreferenceScreen screen) {
|
||||
+ mSwitchPreference = screen.findPreference(getPreferenceKey());
|
||||
+ super.displayPreference(screen);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void updateState(Preference preference) {
|
||||
+ boolean checked = SystemProperties.getBoolean(IMSMANAGER_DEBUG_OVERRIDE_PROPERTIES[0], false);
|
||||
+ mSwitchPreference.setChecked(checked);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
+ for (String prop: IMSMANAGER_DEBUG_OVERRIDE_PROPERTIES) {
|
||||
+ SystemProperties.set(prop, ((boolean) newValue) ? "1" : "0");
|
||||
+ }
|
||||
+ mSwitchPreference.setChecked((boolean) newValue);
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+}
|
||||
diff --git a/src/com/android/settings/treble/TrebleSettings.java b/src/com/android/settings/treble/TrebleSettings.java
|
||||
index 5c1611c053..50e3eda8c6 100644
|
||||
--- a/src/com/android/settings/treble/TrebleSettings.java
|
||||
+++ b/src/com/android/settings/treble/TrebleSettings.java
|
||||
@@ -36,6 +36,8 @@ public class TrebleSettings extends DashboardFragment {
|
||||
controllers.add(new DisableSoundvolumeEffectPreferenceController(context));
|
||||
controllers.add(new ScreenResolutionRefreshRatePreferenceController(context));
|
||||
controllers.add(new UseAlternativeBacklightScalePreferenceController(context));
|
||||
+ controllers.add(new InstallImsApkPreferenceController(context));
|
||||
+ controllers.add(new OverrideVolteAvailabilityPreferenceController(context));
|
||||
return controllers;
|
||||
}
|
||||
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -0,0 +1,116 @@
|
||||
From 75e694dddc0a06a097983f0a8674849f3cec5fb6 Mon Sep 17 00:00:00 2001
|
||||
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||
Date: Sat, 10 Dec 2022 12:04:37 +0000
|
||||
Subject: [PATCH 4/8] TrebleSettings: Disable A2DP offload
|
||||
|
||||
Change-Id: I737f49d146f83d96793f4436850529e3c528acbe
|
||||
---
|
||||
res/values/strings.xml | 2 +
|
||||
res/xml/treble_settings.xml | 4 ++
|
||||
...isableA2DPOffloadPreferenceController.java | 53 +++++++++++++++++++
|
||||
.../settings/treble/TrebleSettings.java | 1 +
|
||||
4 files changed, 60 insertions(+)
|
||||
create mode 100644 src/com/android/settings/treble/DisableA2DPOffloadPreferenceController.java
|
||||
|
||||
diff --git a/res/values/strings.xml b/res/values/strings.xml
|
||||
index 1df0fe22f1..8f1056da77 100644
|
||||
--- a/res/values/strings.xml
|
||||
+++ b/res/values/strings.xml
|
||||
@@ -6890,6 +6890,8 @@
|
||||
<string name="use_alternative_audio_policy_title">Use alternative audio policy</string>
|
||||
<!-- Treble settings screen, disable soundvolume effect title -->
|
||||
<string name="disable_soundvolume_effect_title">Disable soundvolume effect</string>
|
||||
+ <!-- Treble settings screen, disable A2DP offload title -->
|
||||
+ <string name="disable_a2dp_offload_title">Disable A2DP offload</string>
|
||||
<!-- Treble settings screen, screen resolution and refresh rate settings title -->
|
||||
<string name="screen_resolution_refresh_rate_title">Screen resolution & refresh rate</string>
|
||||
<!-- Treble settings screen, use alternative backlight scale title -->
|
||||
diff --git a/res/xml/treble_settings.xml b/res/xml/treble_settings.xml
|
||||
index 09e6bc5d00..b58e7a1282 100644
|
||||
--- a/res/xml/treble_settings.xml
|
||||
+++ b/res/xml/treble_settings.xml
|
||||
@@ -17,6 +17,10 @@
|
||||
android:key="disable_soundvolume_effect"
|
||||
android:title="@string/disable_soundvolume_effect_title" />
|
||||
|
||||
+ <SwitchPreference
|
||||
+ android:key="disable_a2dp_offload"
|
||||
+ android:title="@string/disable_a2dp_offload_title" />
|
||||
+
|
||||
</PreferenceCategory>
|
||||
|
||||
<PreferenceCategory
|
||||
diff --git a/src/com/android/settings/treble/DisableA2DPOffloadPreferenceController.java b/src/com/android/settings/treble/DisableA2DPOffloadPreferenceController.java
|
||||
new file mode 100644
|
||||
index 0000000000..f53103160d
|
||||
--- /dev/null
|
||||
+++ b/src/com/android/settings/treble/DisableA2DPOffloadPreferenceController.java
|
||||
@@ -0,0 +1,53 @@
|
||||
+package com.android.settings.treble;
|
||||
+
|
||||
+import android.content.Context;
|
||||
+import android.os.SystemProperties;
|
||||
+
|
||||
+import androidx.preference.Preference;
|
||||
+import androidx.preference.PreferenceScreen;
|
||||
+import androidx.preference.SwitchPreference;
|
||||
+
|
||||
+import com.android.settings.core.BasePreferenceController;
|
||||
+
|
||||
+public class DisableA2DPOffloadPreferenceController extends BasePreferenceController
|
||||
+ implements Preference.OnPreferenceChangeListener {
|
||||
+
|
||||
+ private static final String DISABLE_A2DP_OFFLOAD_KEY = "disable_a2dp_offload";
|
||||
+ private static final String A2DP_OFFLOAD_DISABLED_PROPERTY = "persist.bluetooth.a2dp_offload.disabled";
|
||||
+
|
||||
+ private SwitchPreference mSwitchPreference;
|
||||
+
|
||||
+ public DisableA2DPOffloadPreferenceController(Context context) {
|
||||
+ super(context, DISABLE_A2DP_OFFLOAD_KEY);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public int getAvailabilityStatus() {
|
||||
+ return AVAILABLE;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public String getPreferenceKey() {
|
||||
+ return DISABLE_A2DP_OFFLOAD_KEY;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void displayPreference(PreferenceScreen screen) {
|
||||
+ mSwitchPreference = screen.findPreference(getPreferenceKey());
|
||||
+ super.displayPreference(screen);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void updateState(Preference preference) {
|
||||
+ boolean checked = SystemProperties.getBoolean(A2DP_OFFLOAD_DISABLED_PROPERTY, false);
|
||||
+ mSwitchPreference.setChecked(checked);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
+ SystemProperties.set(A2DP_OFFLOAD_DISABLED_PROPERTY, String.valueOf((boolean) newValue));
|
||||
+ mSwitchPreference.setChecked((boolean) newValue);
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+}
|
||||
diff --git a/src/com/android/settings/treble/TrebleSettings.java b/src/com/android/settings/treble/TrebleSettings.java
|
||||
index 50e3eda8c6..5e9b7f88e2 100644
|
||||
--- a/src/com/android/settings/treble/TrebleSettings.java
|
||||
+++ b/src/com/android/settings/treble/TrebleSettings.java
|
||||
@@ -34,6 +34,7 @@ public class TrebleSettings extends DashboardFragment {
|
||||
final List<AbstractPreferenceController> controllers = new ArrayList<>();
|
||||
controllers.add(new UseAlternativeAudioPolicyPreferenceController(context));
|
||||
controllers.add(new DisableSoundvolumeEffectPreferenceController(context));
|
||||
+ controllers.add(new DisableA2DPOffloadPreferenceController(context));
|
||||
controllers.add(new ScreenResolutionRefreshRatePreferenceController(context));
|
||||
controllers.add(new UseAlternativeBacklightScalePreferenceController(context));
|
||||
controllers.add(new InstallImsApkPreferenceController(context));
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -0,0 +1,116 @@
|
||||
From 51821d58357b577cbc62ce5a2e9d0b4f19e686b3 Mon Sep 17 00:00:00 2001
|
||||
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||
Date: Sat, 10 Dec 2022 14:16:50 +0000
|
||||
Subject: [PATCH 5/8] TrebleSettings: Alternative audio jack detection
|
||||
|
||||
Change-Id: I5d6d48f26a4a2134fd6edf996eca89a1fc42e6de
|
||||
---
|
||||
res/values/strings.xml | 2 +
|
||||
res/xml/treble_settings.xml | 4 ++
|
||||
.../settings/treble/TrebleSettings.java | 1 +
|
||||
...udioJackDetectionPreferenceController.java | 53 +++++++++++++++++++
|
||||
4 files changed, 60 insertions(+)
|
||||
create mode 100644 src/com/android/settings/treble/UseAlternativeAudioJackDetectionPreferenceController.java
|
||||
|
||||
diff --git a/res/values/strings.xml b/res/values/strings.xml
|
||||
index 8f1056da77..deb2cf9d77 100644
|
||||
--- a/res/values/strings.xml
|
||||
+++ b/res/values/strings.xml
|
||||
@@ -6892,6 +6892,8 @@
|
||||
<string name="disable_soundvolume_effect_title">Disable soundvolume effect</string>
|
||||
<!-- Treble settings screen, disable A2DP offload title -->
|
||||
<string name="disable_a2dp_offload_title">Disable A2DP offload</string>
|
||||
+ <!-- Treble settings screen, use alternative audio jack detection title -->
|
||||
+ <string name="use_alternative_audio_jack_detection_title">Use alternative audio jack detection</string>
|
||||
<!-- Treble settings screen, screen resolution and refresh rate settings title -->
|
||||
<string name="screen_resolution_refresh_rate_title">Screen resolution & refresh rate</string>
|
||||
<!-- Treble settings screen, use alternative backlight scale title -->
|
||||
diff --git a/res/xml/treble_settings.xml b/res/xml/treble_settings.xml
|
||||
index b58e7a1282..47097a14c7 100644
|
||||
--- a/res/xml/treble_settings.xml
|
||||
+++ b/res/xml/treble_settings.xml
|
||||
@@ -21,6 +21,10 @@
|
||||
android:key="disable_a2dp_offload"
|
||||
android:title="@string/disable_a2dp_offload_title" />
|
||||
|
||||
+ <SwitchPreference
|
||||
+ android:key="use_alternative_audio_jack_detection"
|
||||
+ android:title="@string/use_alternative_audio_jack_detection_title" />
|
||||
+
|
||||
</PreferenceCategory>
|
||||
|
||||
<PreferenceCategory
|
||||
diff --git a/src/com/android/settings/treble/TrebleSettings.java b/src/com/android/settings/treble/TrebleSettings.java
|
||||
index 5e9b7f88e2..09aa001e82 100644
|
||||
--- a/src/com/android/settings/treble/TrebleSettings.java
|
||||
+++ b/src/com/android/settings/treble/TrebleSettings.java
|
||||
@@ -35,6 +35,7 @@ public class TrebleSettings extends DashboardFragment {
|
||||
controllers.add(new UseAlternativeAudioPolicyPreferenceController(context));
|
||||
controllers.add(new DisableSoundvolumeEffectPreferenceController(context));
|
||||
controllers.add(new DisableA2DPOffloadPreferenceController(context));
|
||||
+ controllers.add(new UseAlternativeAudioJackDetectionPreferenceController(context));
|
||||
controllers.add(new ScreenResolutionRefreshRatePreferenceController(context));
|
||||
controllers.add(new UseAlternativeBacklightScalePreferenceController(context));
|
||||
controllers.add(new InstallImsApkPreferenceController(context));
|
||||
diff --git a/src/com/android/settings/treble/UseAlternativeAudioJackDetectionPreferenceController.java b/src/com/android/settings/treble/UseAlternativeAudioJackDetectionPreferenceController.java
|
||||
new file mode 100644
|
||||
index 0000000000..0d60b72db1
|
||||
--- /dev/null
|
||||
+++ b/src/com/android/settings/treble/UseAlternativeAudioJackDetectionPreferenceController.java
|
||||
@@ -0,0 +1,53 @@
|
||||
+package com.android.settings.treble;
|
||||
+
|
||||
+import android.content.Context;
|
||||
+import android.os.SystemProperties;
|
||||
+
|
||||
+import androidx.preference.Preference;
|
||||
+import androidx.preference.PreferenceScreen;
|
||||
+import androidx.preference.SwitchPreference;
|
||||
+
|
||||
+import com.android.settings.core.BasePreferenceController;
|
||||
+
|
||||
+public class UseAlternativeAudioJackDetectionPreferenceController extends BasePreferenceController
|
||||
+ implements Preference.OnPreferenceChangeListener {
|
||||
+
|
||||
+ private static final String USE_ALTERNATIVE_AUDIO_JACK_DETECTION_KEY = "use_alternative_audio_jack_detection";
|
||||
+ private static final String DEVINPUT_JACK_PROPERTY = "persist.sys.overlay.devinputjack";
|
||||
+
|
||||
+ private SwitchPreference mSwitchPreference;
|
||||
+
|
||||
+ public UseAlternativeAudioJackDetectionPreferenceController(Context context) {
|
||||
+ super(context, USE_ALTERNATIVE_AUDIO_JACK_DETECTION_KEY);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public int getAvailabilityStatus() {
|
||||
+ return AVAILABLE;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public String getPreferenceKey() {
|
||||
+ return USE_ALTERNATIVE_AUDIO_JACK_DETECTION_KEY;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void displayPreference(PreferenceScreen screen) {
|
||||
+ mSwitchPreference = screen.findPreference(getPreferenceKey());
|
||||
+ super.displayPreference(screen);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void updateState(Preference preference) {
|
||||
+ boolean checked = SystemProperties.getBoolean(DEVINPUT_JACK_PROPERTY, false);
|
||||
+ mSwitchPreference.setChecked(checked);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
+ SystemProperties.set(DEVINPUT_JACK_PROPERTY, String.valueOf((boolean) newValue));
|
||||
+ mSwitchPreference.setChecked((boolean) newValue);
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+}
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -0,0 +1,116 @@
|
||||
From 77dfd4ad7da5a0320f143b06324da05a212229fc Mon Sep 17 00:00:00 2001
|
||||
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||
Date: Sat, 17 Dec 2022 10:29:05 +0000
|
||||
Subject: [PATCH 6/8] TrebleSettings: Override minimum brightness
|
||||
|
||||
Change-Id: I6d621f7dd04b675b6e2e851a5e474dc9a9841eb0
|
||||
---
|
||||
res/values/strings.xml | 2 +
|
||||
res/xml/treble_settings.xml | 4 ++
|
||||
...MinimumBrightnessPreferenceController.java | 53 +++++++++++++++++++
|
||||
.../settings/treble/TrebleSettings.java | 1 +
|
||||
4 files changed, 60 insertions(+)
|
||||
create mode 100644 src/com/android/settings/treble/OverrideMinimumBrightnessPreferenceController.java
|
||||
|
||||
diff --git a/res/values/strings.xml b/res/values/strings.xml
|
||||
index deb2cf9d77..865a9c4f5f 100644
|
||||
--- a/res/values/strings.xml
|
||||
+++ b/res/values/strings.xml
|
||||
@@ -6898,6 +6898,8 @@
|
||||
<string name="screen_resolution_refresh_rate_title">Screen resolution & refresh rate</string>
|
||||
<!-- Treble settings screen, use alternative backlight scale title -->
|
||||
<string name="use_alternative_backlight_scale_title">Use alternative backlight scale</string>
|
||||
+ <!-- Treble settings screen, override minimum brightness title -->
|
||||
+ <string name="override_minimum_brightness_title">Override minimum brightness</string>
|
||||
<!-- Treble settings screen, install IMS APK title -->
|
||||
<string name="install_ims_apk_title">Install IMS APK</string>
|
||||
<!-- Treble settings screen, install IMS APK toasts -->
|
||||
diff --git a/res/xml/treble_settings.xml b/res/xml/treble_settings.xml
|
||||
index 47097a14c7..5c18461b69 100644
|
||||
--- a/res/xml/treble_settings.xml
|
||||
+++ b/res/xml/treble_settings.xml
|
||||
@@ -38,6 +38,10 @@
|
||||
android:key="use_alternative_backlight_scale"
|
||||
android:title="@string/use_alternative_backlight_scale_title" />
|
||||
|
||||
+ <SwitchPreference
|
||||
+ android:key="override_minimum_brightness"
|
||||
+ android:title="@string/override_minimum_brightness_title" />
|
||||
+
|
||||
</PreferenceCategory>
|
||||
|
||||
<PreferenceCategory
|
||||
diff --git a/src/com/android/settings/treble/OverrideMinimumBrightnessPreferenceController.java b/src/com/android/settings/treble/OverrideMinimumBrightnessPreferenceController.java
|
||||
new file mode 100644
|
||||
index 0000000000..95200fbeaa
|
||||
--- /dev/null
|
||||
+++ b/src/com/android/settings/treble/OverrideMinimumBrightnessPreferenceController.java
|
||||
@@ -0,0 +1,53 @@
|
||||
+package com.android.settings.treble;
|
||||
+
|
||||
+import android.content.Context;
|
||||
+import android.os.SystemProperties;
|
||||
+
|
||||
+import androidx.preference.Preference;
|
||||
+import androidx.preference.PreferenceScreen;
|
||||
+import androidx.preference.SwitchPreference;
|
||||
+
|
||||
+import com.android.settings.core.BasePreferenceController;
|
||||
+
|
||||
+public class OverrideMinimumBrightnessPreferenceController extends BasePreferenceController
|
||||
+ implements Preference.OnPreferenceChangeListener {
|
||||
+
|
||||
+ private static final String OVERRIDE_MINIMUM_BRIGHTNESS_KEY = "override_minimum_brightness";
|
||||
+ private static final String MINIMAL_BRIGHTNESS_PROPERTY = "persist.sys.overlay.minimal_brightness";
|
||||
+
|
||||
+ private SwitchPreference mSwitchPreference;
|
||||
+
|
||||
+ public OverrideMinimumBrightnessPreferenceController(Context context) {
|
||||
+ super(context, OVERRIDE_MINIMUM_BRIGHTNESS_KEY);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public int getAvailabilityStatus() {
|
||||
+ return AVAILABLE;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public String getPreferenceKey() {
|
||||
+ return OVERRIDE_MINIMUM_BRIGHTNESS_KEY;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void displayPreference(PreferenceScreen screen) {
|
||||
+ mSwitchPreference = screen.findPreference(getPreferenceKey());
|
||||
+ super.displayPreference(screen);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void updateState(Preference preference) {
|
||||
+ boolean checked = SystemProperties.getBoolean(MINIMAL_BRIGHTNESS_PROPERTY, false);
|
||||
+ mSwitchPreference.setChecked(checked);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
+ SystemProperties.set(MINIMAL_BRIGHTNESS_PROPERTY, String.valueOf((boolean) newValue));
|
||||
+ mSwitchPreference.setChecked((boolean) newValue);
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+}
|
||||
diff --git a/src/com/android/settings/treble/TrebleSettings.java b/src/com/android/settings/treble/TrebleSettings.java
|
||||
index 09aa001e82..39a0e19972 100644
|
||||
--- a/src/com/android/settings/treble/TrebleSettings.java
|
||||
+++ b/src/com/android/settings/treble/TrebleSettings.java
|
||||
@@ -38,6 +38,7 @@ public class TrebleSettings extends DashboardFragment {
|
||||
controllers.add(new UseAlternativeAudioJackDetectionPreferenceController(context));
|
||||
controllers.add(new ScreenResolutionRefreshRatePreferenceController(context));
|
||||
controllers.add(new UseAlternativeBacklightScalePreferenceController(context));
|
||||
+ controllers.add(new OverrideMinimumBrightnessPreferenceController(context));
|
||||
controllers.add(new InstallImsApkPreferenceController(context));
|
||||
controllers.add(new OverrideVolteAvailabilityPreferenceController(context));
|
||||
return controllers;
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -0,0 +1,128 @@
|
||||
From 47061bc2ff7442d892e488a0a369d61d7ecdfc0c Mon Sep 17 00:00:00 2001
|
||||
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||
Date: Sat, 17 Dec 2022 11:00:38 +0000
|
||||
Subject: [PATCH 7/8] TrebleSettings: Override navbar availability
|
||||
|
||||
Change-Id: I7c771caf6274543fed23a8cc47411bf8c369ac2c
|
||||
---
|
||||
res/values/strings.xml | 4 ++
|
||||
res/xml/treble_settings.xml | 9 ++++
|
||||
...avbarAvailabilityPreferenceController.java | 53 +++++++++++++++++++
|
||||
.../settings/treble/TrebleSettings.java | 1 +
|
||||
4 files changed, 67 insertions(+)
|
||||
create mode 100644 src/com/android/settings/treble/OverrideNavbarAvailabilityPreferenceController.java
|
||||
|
||||
diff --git a/res/values/strings.xml b/res/values/strings.xml
|
||||
index 865a9c4f5f..67d944d9bf 100644
|
||||
--- a/res/values/strings.xml
|
||||
+++ b/res/values/strings.xml
|
||||
@@ -6885,6 +6885,8 @@
|
||||
<string name="treble_settings_category_name_display">Display</string>
|
||||
<!-- IMS category name [CHAR LIMIT=none] -->
|
||||
<string name="treble_settings_category_name_ims">IMS</string>
|
||||
+ <!-- UI category name [CHAR LIMIT=none] -->
|
||||
+ <string name="treble_settings_category_name_ui">UI</string>
|
||||
|
||||
<!-- Treble settings screen, use alternative audio policy title -->
|
||||
<string name="use_alternative_audio_policy_title">Use alternative audio policy</string>
|
||||
@@ -6907,6 +6909,8 @@
|
||||
<string name="install_ims_apk_toast_completed">IMS APK installed. Reboot required.</string>
|
||||
<!-- Treble settings screen, override VoLTE availability title -->
|
||||
<string name="override_volte_availability_title">Override VoLTE availability</string>
|
||||
+ <!-- Treble settings screen, override navbar availability title -->
|
||||
+ <string name="override_navbar_availability_title">Override navigation bar availability</string>
|
||||
|
||||
<!-- Title for setting tile leading to network and Internet settings [CHAR LIMIT=40]-->
|
||||
<string name="network_dashboard_title">Network & internet</string>
|
||||
diff --git a/res/xml/treble_settings.xml b/res/xml/treble_settings.xml
|
||||
index 5c18461b69..250a8ee75a 100644
|
||||
--- a/res/xml/treble_settings.xml
|
||||
+++ b/res/xml/treble_settings.xml
|
||||
@@ -57,4 +57,13 @@
|
||||
|
||||
</PreferenceCategory>
|
||||
|
||||
+ <PreferenceCategory
|
||||
+ android:title="@string/treble_settings_category_name_ui">
|
||||
+
|
||||
+ <SwitchPreference
|
||||
+ android:key="override_navbar_availability"
|
||||
+ android:title="@string/override_navbar_availability_title" />
|
||||
+
|
||||
+ </PreferenceCategory>
|
||||
+
|
||||
</PreferenceScreen>
|
||||
diff --git a/src/com/android/settings/treble/OverrideNavbarAvailabilityPreferenceController.java b/src/com/android/settings/treble/OverrideNavbarAvailabilityPreferenceController.java
|
||||
new file mode 100644
|
||||
index 0000000000..d6baa33739
|
||||
--- /dev/null
|
||||
+++ b/src/com/android/settings/treble/OverrideNavbarAvailabilityPreferenceController.java
|
||||
@@ -0,0 +1,53 @@
|
||||
+package com.android.settings.treble;
|
||||
+
|
||||
+import android.content.Context;
|
||||
+import android.os.SystemProperties;
|
||||
+
|
||||
+import androidx.preference.Preference;
|
||||
+import androidx.preference.PreferenceScreen;
|
||||
+import androidx.preference.SwitchPreference;
|
||||
+
|
||||
+import com.android.settings.core.BasePreferenceController;
|
||||
+
|
||||
+public class OverrideNavbarAvailabilityPreferenceController extends BasePreferenceController
|
||||
+ implements Preference.OnPreferenceChangeListener {
|
||||
+
|
||||
+ private static final String OVERRIDE_NAVBAR_AVAILABILITY_KEY = "override_navbar_availability";
|
||||
+ private static final String TREBLE_MAINKEYS_PROPERTY = "persist.sys.treble.mainkeys";
|
||||
+
|
||||
+ private SwitchPreference mSwitchPreference;
|
||||
+
|
||||
+ public OverrideNavbarAvailabilityPreferenceController(Context context) {
|
||||
+ super(context, OVERRIDE_NAVBAR_AVAILABILITY_KEY);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public int getAvailabilityStatus() {
|
||||
+ return AVAILABLE;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public String getPreferenceKey() {
|
||||
+ return OVERRIDE_NAVBAR_AVAILABILITY_KEY;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void displayPreference(PreferenceScreen screen) {
|
||||
+ mSwitchPreference = screen.findPreference(getPreferenceKey());
|
||||
+ super.displayPreference(screen);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void updateState(Preference preference) {
|
||||
+ boolean checked = (SystemProperties.getInt(TREBLE_MAINKEYS_PROPERTY, 0) == 0);
|
||||
+ mSwitchPreference.setChecked(checked);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
+ SystemProperties.set(TREBLE_MAINKEYS_PROPERTY, ((boolean) newValue) ? "0" : "1");
|
||||
+ mSwitchPreference.setChecked((boolean) newValue);
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+}
|
||||
diff --git a/src/com/android/settings/treble/TrebleSettings.java b/src/com/android/settings/treble/TrebleSettings.java
|
||||
index 39a0e19972..634b7ce3ce 100644
|
||||
--- a/src/com/android/settings/treble/TrebleSettings.java
|
||||
+++ b/src/com/android/settings/treble/TrebleSettings.java
|
||||
@@ -41,6 +41,7 @@ public class TrebleSettings extends DashboardFragment {
|
||||
controllers.add(new OverrideMinimumBrightnessPreferenceController(context));
|
||||
controllers.add(new InstallImsApkPreferenceController(context));
|
||||
controllers.add(new OverrideVolteAvailabilityPreferenceController(context));
|
||||
+ controllers.add(new OverrideNavbarAvailabilityPreferenceController(context));
|
||||
return controllers;
|
||||
}
|
||||
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -0,0 +1,133 @@
|
||||
From 3b2b06803b579a2572ca1707aee7b56d1bfd0cff Mon Sep 17 00:00:00 2001
|
||||
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||
Date: Sat, 17 Dec 2022 14:30:52 +0000
|
||||
Subject: [PATCH 8/8] TrebleSettings: Securize on-demand
|
||||
|
||||
Change-Id: I76f54620277ccdc41636d74d1afa6330c382ce6a
|
||||
---
|
||||
res/values/strings.xml | 6 +++
|
||||
res/xml/treble_settings.xml | 10 ++++
|
||||
.../treble/SecurizePreferenceController.java | 53 +++++++++++++++++++
|
||||
.../settings/treble/TrebleSettings.java | 1 +
|
||||
4 files changed, 70 insertions(+)
|
||||
create mode 100644 src/com/android/settings/treble/SecurizePreferenceController.java
|
||||
|
||||
diff --git a/res/values/strings.xml b/res/values/strings.xml
|
||||
index 67d944d9bf..f034a9ff39 100644
|
||||
--- a/res/values/strings.xml
|
||||
+++ b/res/values/strings.xml
|
||||
@@ -6885,6 +6885,8 @@
|
||||
<string name="treble_settings_category_name_display">Display</string>
|
||||
<!-- IMS category name [CHAR LIMIT=none] -->
|
||||
<string name="treble_settings_category_name_ims">IMS</string>
|
||||
+ <!-- System category name [CHAR LIMIT=none] -->
|
||||
+ <string name="treble_settings_category_name_system">System</string>
|
||||
<!-- UI category name [CHAR LIMIT=none] -->
|
||||
<string name="treble_settings_category_name_ui">UI</string>
|
||||
|
||||
@@ -6909,6 +6911,10 @@
|
||||
<string name="install_ims_apk_toast_completed">IMS APK installed. Reboot required.</string>
|
||||
<!-- Treble settings screen, override VoLTE availability title -->
|
||||
<string name="override_volte_availability_title">Override VoLTE availability</string>
|
||||
+ <!-- Treble settings screen, securize title -->
|
||||
+ <string name="securize_title">Spoof system properties</string>
|
||||
+ <!-- Treble settings screen, securize summary -->
|
||||
+ <string name="securize_summary">For better chances of passing SafetyNet\nMight cause bootloop on some devices</string>
|
||||
<!-- Treble settings screen, override navbar availability title -->
|
||||
<string name="override_navbar_availability_title">Override navigation bar availability</string>
|
||||
|
||||
diff --git a/res/xml/treble_settings.xml b/res/xml/treble_settings.xml
|
||||
index 250a8ee75a..1f24352421 100644
|
||||
--- a/res/xml/treble_settings.xml
|
||||
+++ b/res/xml/treble_settings.xml
|
||||
@@ -57,6 +57,16 @@
|
||||
|
||||
</PreferenceCategory>
|
||||
|
||||
+ <PreferenceCategory
|
||||
+ android:title="@string/treble_settings_category_name_system">
|
||||
+
|
||||
+ <SwitchPreference
|
||||
+ android:key="securize"
|
||||
+ android:title="@string/securize_title"
|
||||
+ android:summary="@string/securize_summary" />
|
||||
+
|
||||
+ </PreferenceCategory>
|
||||
+
|
||||
<PreferenceCategory
|
||||
android:title="@string/treble_settings_category_name_ui">
|
||||
|
||||
diff --git a/src/com/android/settings/treble/SecurizePreferenceController.java b/src/com/android/settings/treble/SecurizePreferenceController.java
|
||||
new file mode 100644
|
||||
index 0000000000..0b59bbad81
|
||||
--- /dev/null
|
||||
+++ b/src/com/android/settings/treble/SecurizePreferenceController.java
|
||||
@@ -0,0 +1,53 @@
|
||||
+package com.android.settings.treble;
|
||||
+
|
||||
+import android.content.Context;
|
||||
+import android.os.SystemProperties;
|
||||
+
|
||||
+import androidx.preference.Preference;
|
||||
+import androidx.preference.PreferenceScreen;
|
||||
+import androidx.preference.SwitchPreference;
|
||||
+
|
||||
+import com.android.settings.core.BasePreferenceController;
|
||||
+
|
||||
+public class SecurizePreferenceController extends BasePreferenceController
|
||||
+ implements Preference.OnPreferenceChangeListener {
|
||||
+
|
||||
+ private static final String SECURIZE_KEY = "securize";
|
||||
+ private static final String SECURIZE_PROPERTY = "persist.sys.treble.securize";
|
||||
+
|
||||
+ private SwitchPreference mSwitchPreference;
|
||||
+
|
||||
+ public SecurizePreferenceController(Context context) {
|
||||
+ super(context, SECURIZE_KEY);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public int getAvailabilityStatus() {
|
||||
+ return AVAILABLE;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public String getPreferenceKey() {
|
||||
+ return SECURIZE_KEY;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void displayPreference(PreferenceScreen screen) {
|
||||
+ mSwitchPreference = screen.findPreference(getPreferenceKey());
|
||||
+ super.displayPreference(screen);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void updateState(Preference preference) {
|
||||
+ boolean checked = SystemProperties.getBoolean(SECURIZE_PROPERTY, false);
|
||||
+ mSwitchPreference.setChecked(checked);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
+ SystemProperties.set(SECURIZE_PROPERTY, String.valueOf((boolean) newValue));
|
||||
+ mSwitchPreference.setChecked((boolean) newValue);
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+}
|
||||
diff --git a/src/com/android/settings/treble/TrebleSettings.java b/src/com/android/settings/treble/TrebleSettings.java
|
||||
index 634b7ce3ce..149c18f231 100644
|
||||
--- a/src/com/android/settings/treble/TrebleSettings.java
|
||||
+++ b/src/com/android/settings/treble/TrebleSettings.java
|
||||
@@ -41,6 +41,7 @@ public class TrebleSettings extends DashboardFragment {
|
||||
controllers.add(new OverrideMinimumBrightnessPreferenceController(context));
|
||||
controllers.add(new InstallImsApkPreferenceController(context));
|
||||
controllers.add(new OverrideVolteAvailabilityPreferenceController(context));
|
||||
+ controllers.add(new SecurizePreferenceController(context));
|
||||
controllers.add(new OverrideNavbarAvailabilityPreferenceController(context));
|
||||
return controllers;
|
||||
}
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -0,0 +1,116 @@
|
||||
From 706908e6a63595671e12bd34fb7f6ff2d2892cdb Mon Sep 17 00:00:00 2001
|
||||
From: Peter Cai <peter@typeblog.net>
|
||||
Date: Wed, 24 Aug 2022 15:45:18 -0400
|
||||
Subject: [PATCH] audio_hal_interface: Optionally use sysbta HAL
|
||||
|
||||
Required to support sysbta, our system-side bt audio implementation.
|
||||
|
||||
Change-Id: I59973e6ec84c5923be8a7c67b36b2e237f000860
|
||||
---
|
||||
system/audio_hal_interface/aidl/client_interface_aidl.cc | 8 ++++----
|
||||
system/audio_hal_interface/aidl/client_interface_aidl.h | 7 +++++++
|
||||
system/audio_hal_interface/hal_version_manager.cc | 9 ++++++++-
|
||||
3 files changed, 19 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/system/audio_hal_interface/aidl/client_interface_aidl.cc b/system/audio_hal_interface/aidl/client_interface_aidl.cc
|
||||
index 897b891aa7..ed41627c3e 100644
|
||||
--- a/system/audio_hal_interface/aidl/client_interface_aidl.cc
|
||||
+++ b/system/audio_hal_interface/aidl/client_interface_aidl.cc
|
||||
@@ -56,7 +56,7 @@ BluetoothAudioClientInterface::BluetoothAudioClientInterface(
|
||||
|
||||
bool BluetoothAudioClientInterface::is_aidl_available() {
|
||||
return AServiceManager_isDeclared(
|
||||
- kDefaultAudioProviderFactoryInterface.c_str());
|
||||
+ audioProviderFactoryInterface().c_str());
|
||||
}
|
||||
|
||||
std::vector<AudioCapabilities>
|
||||
@@ -72,7 +72,7 @@ BluetoothAudioClientInterface::GetAudioCapabilities(SessionType session_type) {
|
||||
}
|
||||
auto provider_factory = IBluetoothAudioProviderFactory::fromBinder(
|
||||
::ndk::SpAIBinder(AServiceManager_waitForService(
|
||||
- kDefaultAudioProviderFactoryInterface.c_str())));
|
||||
+ audioProviderFactoryInterface().c_str())));
|
||||
|
||||
if (provider_factory == nullptr) {
|
||||
LOG(ERROR) << __func__ << ", can't get capability from unknown factory";
|
||||
@@ -99,7 +99,7 @@ void BluetoothAudioClientInterface::FetchAudioProvider() {
|
||||
}
|
||||
auto provider_factory = IBluetoothAudioProviderFactory::fromBinder(
|
||||
::ndk::SpAIBinder(AServiceManager_waitForService(
|
||||
- kDefaultAudioProviderFactoryInterface.c_str())));
|
||||
+ audioProviderFactoryInterface().c_str())));
|
||||
|
||||
if (provider_factory == nullptr) {
|
||||
LOG(ERROR) << __func__ << ", can't get capability from unknown factory";
|
||||
@@ -266,7 +266,7 @@ int BluetoothAudioClientInterface::GetAidlInterfaceVersion() {
|
||||
|
||||
auto provider_factory = IBluetoothAudioProviderFactory::fromBinder(
|
||||
::ndk::SpAIBinder(AServiceManager_waitForService(
|
||||
- kDefaultAudioProviderFactoryInterface.c_str())));
|
||||
+ audioProviderFactoryInterface().c_str())));
|
||||
|
||||
if (provider_factory == nullptr) {
|
||||
LOG(ERROR) << __func__ << ", can't get aidl version from unknown factory";
|
||||
diff --git a/system/audio_hal_interface/aidl/client_interface_aidl.h b/system/audio_hal_interface/aidl/client_interface_aidl.h
|
||||
index 8a40c1d7d7..6d962d3473 100644
|
||||
--- a/system/audio_hal_interface/aidl/client_interface_aidl.h
|
||||
+++ b/system/audio_hal_interface/aidl/client_interface_aidl.h
|
||||
@@ -28,6 +28,7 @@
|
||||
#include "bluetooth_audio_port_impl.h"
|
||||
#include "common/message_loop_thread.h"
|
||||
#include "transport_instance.h"
|
||||
+#include "osi/include/properties.h"
|
||||
|
||||
#define BLUETOOTH_AUDIO_HAL_PROP_DISABLED \
|
||||
"persist.bluetooth.bluetooth_audio_hal.disabled"
|
||||
@@ -119,6 +120,12 @@ class BluetoothAudioClientInterface {
|
||||
// "android.hardware.bluetooth.audio.IBluetoothAudioProviderFactory/default";
|
||||
static inline const std::string kDefaultAudioProviderFactoryInterface =
|
||||
std::string() + IBluetoothAudioProviderFactory::descriptor + "/default";
|
||||
+ static inline const std::string kSystemAudioProviderFactoryInterface =
|
||||
+ std::string() + IBluetoothAudioProviderFactory::descriptor + "/sysbta";
|
||||
+ static inline const std::string audioProviderFactoryInterface() {
|
||||
+ return osi_property_get_bool("persist.bluetooth.system_audio_hal.enabled", false)
|
||||
+ ? kSystemAudioProviderFactoryInterface : kDefaultAudioProviderFactoryInterface;
|
||||
+ }
|
||||
|
||||
private:
|
||||
IBluetoothTransportInstance* transport_;
|
||||
diff --git a/system/audio_hal_interface/hal_version_manager.cc b/system/audio_hal_interface/hal_version_manager.cc
|
||||
index a2c192f37d..c3d1cf35c2 100644
|
||||
--- a/system/audio_hal_interface/hal_version_manager.cc
|
||||
+++ b/system/audio_hal_interface/hal_version_manager.cc
|
||||
@@ -24,6 +24,7 @@
|
||||
#include <memory>
|
||||
|
||||
#include "aidl/audio_aidl_interfaces.h"
|
||||
+#include "osi/include/properties.h"
|
||||
|
||||
namespace bluetooth {
|
||||
namespace audio {
|
||||
@@ -33,6 +34,12 @@ using ::aidl::android::hardware::bluetooth::audio::
|
||||
|
||||
static const std::string kDefaultAudioProviderFactoryInterface =
|
||||
std::string() + IBluetoothAudioProviderFactory::descriptor + "/default";
|
||||
+static const std::string kSystemAudioProviderFactoryInterface =
|
||||
+ std::string() + IBluetoothAudioProviderFactory::descriptor + "/sysbta";
|
||||
+static inline const std::string audioProviderFactoryInterface() {
|
||||
+ return osi_property_get_bool("persist.bluetooth.system_audio_hal.enabled", false)
|
||||
+ ? kSystemAudioProviderFactoryInterface : kDefaultAudioProviderFactoryInterface;
|
||||
+}
|
||||
|
||||
std::unique_ptr<HalVersionManager> HalVersionManager::instance_ptr =
|
||||
std::make_unique<HalVersionManager>();
|
||||
@@ -92,7 +99,7 @@ HalVersionManager::GetProvidersFactory_2_0() {
|
||||
|
||||
HalVersionManager::HalVersionManager() {
|
||||
if (AServiceManager_checkService(
|
||||
- kDefaultAudioProviderFactoryInterface.c_str()) != nullptr) {
|
||||
+ audioProviderFactoryInterface().c_str()) != nullptr) {
|
||||
hal_version_ = BluetoothAudioHalVersion::VERSION_AIDL_V1;
|
||||
return;
|
||||
}
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
From 04eb0f02934f58c1c842da1ea365275ba03c5b58 Mon Sep 17 00:00:00 2001
|
||||
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||
Date: Wed, 19 Oct 2022 02:20:05 +0000
|
||||
Subject: [PATCH] Revert "detect inability to write to index != 0 of bpf map
|
||||
array"
|
||||
|
||||
This reverts commit ead9d83423877458023056f6ccf9390950d6726f.
|
||||
---
|
||||
bpfloader/BpfLoader.cpp | 9 ---------
|
||||
1 file changed, 9 deletions(-)
|
||||
|
||||
diff --git a/bpfloader/BpfLoader.cpp b/bpfloader/BpfLoader.cpp
|
||||
index 5cd80b7..bc72811 100644
|
||||
--- a/bpfloader/BpfLoader.cpp
|
||||
+++ b/bpfloader/BpfLoader.cpp
|
||||
@@ -199,15 +199,6 @@ int main(int argc, char** argv) {
|
||||
}
|
||||
}
|
||||
|
||||
- int key = 1;
|
||||
- int value = 123;
|
||||
- android::base::unique_fd map(
|
||||
- android::bpf::createMap(BPF_MAP_TYPE_ARRAY, sizeof(key), sizeof(value), 2, 0));
|
||||
- if (android::bpf::writeToMapEntry(map, &key, &value, BPF_ANY)) {
|
||||
- ALOGE("Critical kernel bug - failure to write into index 1 of 2 element bpf map array.");
|
||||
- return 1;
|
||||
- }
|
||||
-
|
||||
if (android::base::SetProperty("bpf.progs_loaded", "1") == false) {
|
||||
ALOGE("Failed to set bpf.progs_loaded property");
|
||||
return 1;
|
||||
--
|
||||
2.25.1
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
From cd56da986fdf17fc6d5d82d6cb553a8444093099 Mon Sep 17 00:00:00 2001
|
||||
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||
Date: Mon, 26 Sep 2022 14:41:41 +0000
|
||||
Subject: [PATCH 1/4] Make xbin and su executable by other
|
||||
|
||||
Needed by PHH-SU
|
||||
|
||||
Change-Id: I5304b787ce4602036904a373a409bb08f8f969de
|
||||
---
|
||||
libcutils/fs_config.cpp | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/libcutils/fs_config.cpp b/libcutils/fs_config.cpp
|
||||
index f90a1bc3c..ef35e0588 100644
|
||||
--- a/libcutils/fs_config.cpp
|
||||
+++ b/libcutils/fs_config.cpp
|
||||
@@ -87,7 +87,7 @@ static const struct fs_path_config android_dirs[] = {
|
||||
{ 00751, AID_ROOT, AID_SHELL, 0, "system/bin" },
|
||||
{ 00755, AID_ROOT, AID_ROOT, 0, "system/etc/ppp" },
|
||||
{ 00755, AID_ROOT, AID_SHELL, 0, "system/vendor" },
|
||||
- { 00750, AID_ROOT, AID_SHELL, 0, "system/xbin" },
|
||||
+ { 00755, AID_ROOT, AID_SHELL, 0, "system/xbin" },
|
||||
{ 00751, AID_ROOT, AID_SHELL, 0, "system/apex/*/bin" },
|
||||
{ 00750, AID_ROOT, AID_SYSTEM, 0, "system_ext/apex/com.android.tethering/bin/for-system" },
|
||||
{ 00751, AID_ROOT, AID_SHELL, 0, "system_ext/bin" },
|
||||
@@ -192,7 +192,7 @@ static const struct fs_path_config android_files[] = {
|
||||
// the following two files are INTENTIONALLY set-uid, but they
|
||||
// are NOT included on user builds.
|
||||
{ 06755, AID_ROOT, AID_ROOT, 0, "system/xbin/procmem" },
|
||||
- { 04750, AID_ROOT, AID_SHELL, 0, "system/xbin/su" },
|
||||
+ { 04755, AID_ROOT, AID_SHELL, 0, "system/xbin/su" },
|
||||
|
||||
// the following files have enhanced capabilities and ARE included
|
||||
// in user builds.
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
From 4d4585b2f4f0f7dd1b6ae28cae77b8340d9e0bae Mon Sep 17 00:00:00 2001
|
||||
From: Victor Bo <bvoid@yandex.ru>
|
||||
Date: Wed, 3 Mar 2021 06:31:17 -0500
|
||||
Subject: [PATCH 2/4] Restore /sbin for Magisk compatibility
|
||||
|
||||
Squash of:
|
||||
- Revert "Do not create /sbin"
|
||||
- Revert "Remove sbin from fs_config.cpp"
|
||||
- add /sbin to the PATH
|
||||
|
||||
Change-Id: I1224c9b64ce8eb14f7d15c8441c0633a7e6a20de
|
||||
---
|
||||
CleanSpec.mk | 2 --
|
||||
libcutils/fs_config.cpp | 3 +++
|
||||
rootdir/Android.mk | 2 +-
|
||||
rootdir/init.environ.rc.in | 1 +
|
||||
4 files changed, 5 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/CleanSpec.mk b/CleanSpec.mk
|
||||
index 0a534a2bd..81150a0fa 100644
|
||||
--- a/CleanSpec.mk
|
||||
+++ b/CleanSpec.mk
|
||||
@@ -80,8 +80,6 @@ $(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/etc/vndksp.libraries.txt)
|
||||
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/recovery/root/)
|
||||
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/root/sbin/charger)
|
||||
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/recovery/root/sbin/charger)
|
||||
-$(call add-clean-step, rm -rf $(PRODUCT_OUT)/root/sbin)
|
||||
-$(call add-clean-step, rm -rf $(PRODUCT_OUT)/recovery/root/sbin)
|
||||
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/product_services)
|
||||
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/product_services.img)
|
||||
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/product_services)
|
||||
diff --git a/libcutils/fs_config.cpp b/libcutils/fs_config.cpp
|
||||
index ef35e0588..76174ce1c 100644
|
||||
--- a/libcutils/fs_config.cpp
|
||||
+++ b/libcutils/fs_config.cpp
|
||||
@@ -80,6 +80,7 @@ static const struct fs_path_config android_dirs[] = {
|
||||
{ 00771, AID_SYSTEM, AID_SYSTEM, 0, "data" },
|
||||
{ 00755, AID_ROOT, AID_SYSTEM, 0, "mnt" },
|
||||
{ 00751, AID_ROOT, AID_SHELL, 0, "product/bin" },
|
||||
+ { 00750, AID_ROOT, AID_SHELL, 0, "sbin" },
|
||||
{ 00751, AID_ROOT, AID_SHELL, 0, "product/apex/*/bin" },
|
||||
{ 00777, AID_ROOT, AID_ROOT, 0, "sdcard" },
|
||||
{ 00751, AID_ROOT, AID_SDCARD_R, 0, "storage" },
|
||||
@@ -168,6 +169,7 @@ static const struct fs_path_config android_files[] = {
|
||||
{ 00600, AID_ROOT, AID_ROOT, 0, "system_ext/build.prop" },
|
||||
{ 00444, AID_ROOT, AID_ROOT, 0, system_ext_conf_dir + 1 },
|
||||
{ 00444, AID_ROOT, AID_ROOT, 0, system_ext_conf_file + 1 },
|
||||
+ { 00750, AID_ROOT, AID_SHELL, 0, "sbin/fs_mgr" },
|
||||
{ 00755, AID_ROOT, AID_SHELL, 0, "system/bin/crash_dump32" },
|
||||
{ 00755, AID_ROOT, AID_SHELL, 0, "system/bin/crash_dump64" },
|
||||
{ 00755, AID_ROOT, AID_SHELL, 0, "system/bin/debuggerd" },
|
||||
@@ -222,6 +224,7 @@ static const struct fs_path_config android_files[] = {
|
||||
{ 00750, AID_ROOT, AID_SHELL, 0, "init*" },
|
||||
{ 00755, AID_ROOT, AID_SHELL, 0, "odm/bin/*" },
|
||||
{ 00755, AID_ROOT, AID_SHELL, 0, "product/bin/*" },
|
||||
+ { 00750, AID_ROOT, AID_SHELL, 0, "sbin/*" },
|
||||
{ 00755, AID_ROOT, AID_SHELL, 0, "product/apex/*bin/*" },
|
||||
{ 00755, AID_ROOT, AID_SHELL, 0, "system/bin/*" },
|
||||
{ 00755, AID_ROOT, AID_SHELL, 0, "system/xbin/*" },
|
||||
diff --git a/rootdir/Android.mk b/rootdir/Android.mk
|
||||
index 3362872c0..1b686c38f 100644
|
||||
--- a/rootdir/Android.mk
|
||||
+++ b/rootdir/Android.mk
|
||||
@@ -91,7 +91,7 @@ endif
|
||||
#
|
||||
# create some directories (some are mount points) and symlinks
|
||||
LOCAL_POST_INSTALL_CMD := mkdir -p $(addprefix $(TARGET_ROOT_OUT)/, \
|
||||
- dev proc sys system data data_mirror odm oem acct config storage mnt apex debug_ramdisk \
|
||||
+ sbin dev proc sys system data data_mirror odm oem acct config storage mnt apex debug_ramdisk \
|
||||
linkerconfig second_stage_resources postinstall $(BOARD_ROOT_EXTRA_FOLDERS)); \
|
||||
ln -sf /system/bin $(TARGET_ROOT_OUT)/bin; \
|
||||
ln -sf /system/etc $(TARGET_ROOT_OUT)/etc; \
|
||||
diff --git a/rootdir/init.environ.rc.in b/rootdir/init.environ.rc.in
|
||||
index bf6e986c4..090fa5a78 100644
|
||||
--- a/rootdir/init.environ.rc.in
|
||||
+++ b/rootdir/init.environ.rc.in
|
||||
@@ -10,6 +10,7 @@ on early-init
|
||||
export ANDROID_TZDATA_ROOT /apex/com.android.tzdata
|
||||
export EXTERNAL_STORAGE /sdcard
|
||||
export ASEC_MOUNTPOINT /mnt/asec
|
||||
+ export PATH /sbin:/product/bin:/apex/com.android.runtime/bin:/apex/com.android.art/bin:/system_ext/bin:/system/bin:/system/xbin:/odm/bin:/vendor/bin:/vendor/xbin
|
||||
%EXPORT_GLOBAL_ASAN_OPTIONS%
|
||||
%EXPORT_GLOBAL_GCOV_OPTIONS%
|
||||
%EXPORT_GLOBAL_CLANG_COVERAGE_OPTIONS%
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
From 0cf9d044459a3e0259917dca782103126b0c2d42 Mon Sep 17 00:00:00 2001
|
||||
From: Isaac Chen <tingyi364@gmail.com>
|
||||
Date: Wed, 23 Jun 2021 13:07:30 +0800
|
||||
Subject: [PATCH 3/4] init: Do not start console service when debuggable
|
||||
|
||||
Google added a check for this in R, when it's running it will show a
|
||||
notification about that performance is impacted.
|
||||
|
||||
Signed-off-by: Isaac Chen <tingyi364@gmail.com>
|
||||
Change-Id: I34cfd6b42d3b9aee4b3e63181480cfb8b1255f29
|
||||
---
|
||||
rootdir/init.rc | 3 ---
|
||||
1 file changed, 3 deletions(-)
|
||||
|
||||
diff --git a/rootdir/init.rc b/rootdir/init.rc
|
||||
index 1e6918d00..8b48a9c87 100644
|
||||
--- a/rootdir/init.rc
|
||||
+++ b/rootdir/init.rc
|
||||
@@ -1312,9 +1312,6 @@ on property:ro.debuggable=1
|
||||
# Give reads to anyone for the accessibility trace folder on debug builds.
|
||||
chmod 0775 /data/misc/a11ytrace
|
||||
|
||||
-on init && property:ro.debuggable=1
|
||||
- start console
|
||||
-
|
||||
on userspace-reboot-requested
|
||||
# TODO(b/135984674): reset all necessary properties here.
|
||||
setprop sys.boot_completed ""
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
From a27092d9b56b807b66f121321e9242a9a4db834f Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Sun, 18 Oct 2020 18:14:47 +0200
|
||||
Subject: [PATCH 4/4] Don't abandon creating property tree if there is a
|
||||
conflict, and hope for the best
|
||||
|
||||
Change-Id: I194c815fdd58bfb84aaf7db02b8f0d00b4db21e8
|
||||
---
|
||||
.../libpropertyinfoserializer/property_info_serializer.cpp | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/property_service/libpropertyinfoserializer/property_info_serializer.cpp b/property_service/libpropertyinfoserializer/property_info_serializer.cpp
|
||||
index 803657ab8..ecdd0be20 100644
|
||||
--- a/property_service/libpropertyinfoserializer/property_info_serializer.cpp
|
||||
+++ b/property_service/libpropertyinfoserializer/property_info_serializer.cpp
|
||||
@@ -19,6 +19,7 @@
|
||||
#include "property_info_parser/property_info_parser.h"
|
||||
|
||||
#include <set>
|
||||
+#include <iostream>
|
||||
|
||||
#include "trie_builder.h"
|
||||
#include "trie_serializer.h"
|
||||
@@ -34,7 +35,7 @@ bool BuildTrie(const std::vector<PropertyInfoEntry>& property_info,
|
||||
|
||||
for (const auto& [name, context, type, is_exact] : property_info) {
|
||||
if (!trie_builder.AddToTrie(name, context, type, is_exact, error)) {
|
||||
- return false;
|
||||
+ std::cerr << "Failed adding " << name << " to property trie... let's hope for the best" << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
From 1c1e3e209c687d9ef0e86c80a113208251a375b9 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Tue, 18 Oct 2022 16:08:09 -0400
|
||||
Subject: [PATCH] Exfat can be mounted with "exfat" kernel fs driver, or
|
||||
"sdfat" or "texfat" (Samsung and Sony variants)
|
||||
|
||||
@AndyCGYan: Adapt to LineageOS vold
|
||||
|
||||
Change-Id: I331e66d8cb37664adbd493b9190123e29f01fd9d
|
||||
---
|
||||
Utils.cpp | 5 +++++
|
||||
fs/Exfat.cpp | 11 +++++++++--
|
||||
2 files changed, 14 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/Utils.cpp b/Utils.cpp
|
||||
index a7e85f2..fb67067 100644
|
||||
--- a/Utils.cpp
|
||||
+++ b/Utils.cpp
|
||||
@@ -1059,6 +1059,11 @@ bool IsFilesystemSupported(const std::string& fsType) {
|
||||
/* fuse filesystems */
|
||||
supported.append("fuse\tntfs\n");
|
||||
|
||||
+ /* treat sdfat/texfat as exfat */
|
||||
+ if (supported.find("sdfat\n") != std::string::npos || supported.find("texfat\n") != std::string::npos) {
|
||||
+ supported.append("\texfat\n");
|
||||
+ }
|
||||
+
|
||||
return supported.find(fsType + "\n") != std::string::npos;
|
||||
}
|
||||
|
||||
diff --git a/fs/Exfat.cpp b/fs/Exfat.cpp
|
||||
index c8b19e0..46a0e2d 100644
|
||||
--- a/fs/Exfat.cpp
|
||||
+++ b/fs/Exfat.cpp
|
||||
@@ -61,13 +61,20 @@ status_t Mount(const std::string& source, const std::string& target, int ownerUi
|
||||
auto mountData = android::base::StringPrintf("uid=%d,gid=%d,fmask=%o,dmask=%o", ownerUid,
|
||||
ownerGid, permMask, permMask);
|
||||
|
||||
- if (mount(source.c_str(), target.c_str(), "exfat", mountFlags, mountData.c_str()) == 0) {
|
||||
+ const char *fs = "exfat";
|
||||
+ if (IsFilesystemSupported("sdfat")) {
|
||||
+ fs = "sdfat";
|
||||
+ } else if (IsFilesystemSupported("texfat")) {
|
||||
+ fs = "texfat";
|
||||
+ }
|
||||
+
|
||||
+ if (mount(source.c_str(), target.c_str(), fs, mountFlags, mountData.c_str()) == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
PLOG(ERROR) << "Mount failed; attempting read-only";
|
||||
mountFlags |= MS_RDONLY;
|
||||
- if (mount(source.c_str(), target.c_str(), "exfat", mountFlags, mountData.c_str()) == 0) {
|
||||
+ if (mount(source.c_str(), target.c_str(), fs, mountFlags, mountData.c_str()) == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
--
|
||||
2.25.1
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
From 6ac3e22846c212278b9870f045bb9491c8f5e3a3 Mon Sep 17 00:00:00 2001
|
||||
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||
Date: Wed, 21 Sep 2022 13:36:07 +0000
|
||||
Subject: [PATCH 1/2] Exclude TrebleApp & co.
|
||||
|
||||
Change-Id: Ieb62801a79c6e015634fd58b654c63c1de5aef7e
|
||||
---
|
||||
overlay.mk | 3 ---
|
||||
1 file changed, 3 deletions(-)
|
||||
|
||||
diff --git a/overlay.mk b/overlay.mk
|
||||
index a1de82b..a7fc18a 100644
|
||||
--- a/overlay.mk
|
||||
+++ b/overlay.mk
|
||||
@@ -1,7 +1,4 @@
|
||||
PRODUCT_PACKAGES += \
|
||||
- HardwareOverlayPicker \
|
||||
- QtiAudio \
|
||||
- TrebleApp \
|
||||
treble-overlay-NavBar \
|
||||
treble-overlay-NightMode \
|
||||
treble-overlay-SystemUI-FalseLocks \
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -0,0 +1,135 @@
|
||||
From ea0f9443f862e2059cef4c3f8f64707d1d3ff46c Mon Sep 17 00:00:00 2001
|
||||
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||
Date: Tue, 11 Oct 2022 10:53:34 +0000
|
||||
Subject: [PATCH 2/2] Enable IMS overlays statically on QCOM/MTK devices
|
||||
|
||||
Change-Id: I851cf859328cc431e8bb163297c33837d4270f58
|
||||
---
|
||||
CAF-IMS/AndroidManifest.xml | 8 ++++----
|
||||
CAF-IMS/res/values/config.xml | 4 ++--
|
||||
MTK-IMS/AndroidManifest.xml | 8 ++++----
|
||||
MTK-IMS/res/values/config.xml | 8 +++++---
|
||||
Telephony/CAF-IMS/AndroidManifest.xml | 6 ++++--
|
||||
Telephony/CAF-IMS/res/values/config.xml | 2 +-
|
||||
Telephony/MTK-IMS/AndroidManifest.xml | 6 ++++--
|
||||
Telephony/MTK-IMS/res/values/config.xml | 3 +--
|
||||
8 files changed, 25 insertions(+), 20 deletions(-)
|
||||
|
||||
diff --git a/CAF-IMS/AndroidManifest.xml b/CAF-IMS/AndroidManifest.xml
|
||||
index 47236c6..5376fb8 100644
|
||||
--- a/CAF-IMS/AndroidManifest.xml
|
||||
+++ b/CAF-IMS/AndroidManifest.xml
|
||||
@@ -3,8 +3,8 @@
|
||||
android:versionCode="1"
|
||||
android:versionName="1.0">
|
||||
<overlay android:targetPackage="android"
|
||||
- android:requiredSystemPropertyName="persist.sys.phh.ims.caf"
|
||||
- android:requiredSystemPropertyValue="true"
|
||||
- android:priority="39"
|
||||
- android:isStatic="true" />
|
||||
+ android:requiredSystemPropertyName="ro.hardware"
|
||||
+ android:requiredSystemPropertyValue="qcom"
|
||||
+ android:priority="39"
|
||||
+ android:isStatic="true" />
|
||||
</manifest>
|
||||
diff --git a/CAF-IMS/res/values/config.xml b/CAF-IMS/res/values/config.xml
|
||||
index 1af87c7..5b85ebd 100644
|
||||
--- a/CAF-IMS/res/values/config.xml
|
||||
+++ b/CAF-IMS/res/values/config.xml
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
- <string name="config_ims_package">org.codeaurora.ims</string>
|
||||
- <bool name="config_dynamic_bind_ims">true</bool>
|
||||
+ <string name="config_ims_package">org.codeaurora.ims</string>
|
||||
+ <bool name="config_dynamic_bind_ims">true</bool>
|
||||
<bool name="config_carrier_volte_available">true</bool>
|
||||
<bool name="config_device_volte_available">true</bool>
|
||||
<bool name="config_device_wfc_ims_available">true</bool>
|
||||
diff --git a/MTK-IMS/AndroidManifest.xml b/MTK-IMS/AndroidManifest.xml
|
||||
index 96ba83e..33132cc 100644
|
||||
--- a/MTK-IMS/AndroidManifest.xml
|
||||
+++ b/MTK-IMS/AndroidManifest.xml
|
||||
@@ -3,8 +3,8 @@
|
||||
android:versionCode="1"
|
||||
android:versionName="1.0">
|
||||
<overlay android:targetPackage="android"
|
||||
- android:requiredSystemPropertyName="persist.sys.phh.ims.mtk"
|
||||
- android:requiredSystemPropertyValue="true"
|
||||
- android:priority="79"
|
||||
- android:isStatic="true" />
|
||||
+ android:requiredSystemPropertyName="ro.hardware"
|
||||
+ android:requiredSystemPropertyValue="+mt6*"
|
||||
+ android:priority="79"
|
||||
+ android:isStatic="true" />
|
||||
</manifest>
|
||||
diff --git a/MTK-IMS/res/values/config.xml b/MTK-IMS/res/values/config.xml
|
||||
index f5e0486..2d49a11 100644
|
||||
--- a/MTK-IMS/res/values/config.xml
|
||||
+++ b/MTK-IMS/res/values/config.xml
|
||||
@@ -1,6 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
- <string name="config_ims_package">com.mediatek.ims</string>
|
||||
- <bool name="config_carrier_volte_available">true</bool>
|
||||
- <bool name="config_dynamic_bind_ims">true</bool>
|
||||
+ <string name="config_ims_package">com.mediatek.ims</string>
|
||||
+ <bool name="config_dynamic_bind_ims">true</bool>
|
||||
+ <bool name="config_carrier_volte_available">true</bool>
|
||||
+ <bool name="config_device_volte_available">true</bool>
|
||||
+ <bool name="config_device_wfc_ims_available">true</bool>
|
||||
</resources>
|
||||
diff --git a/Telephony/CAF-IMS/AndroidManifest.xml b/Telephony/CAF-IMS/AndroidManifest.xml
|
||||
index 2267406..365525c 100644
|
||||
--- a/Telephony/CAF-IMS/AndroidManifest.xml
|
||||
+++ b/Telephony/CAF-IMS/AndroidManifest.xml
|
||||
@@ -3,6 +3,8 @@
|
||||
android:versionCode="1"
|
||||
android:versionName="1.0">
|
||||
<overlay android:targetPackage="com.android.phone"
|
||||
- android:priority="79"
|
||||
- />
|
||||
+ android:requiredSystemPropertyName="ro.hardware"
|
||||
+ android:requiredSystemPropertyValue="qcom"
|
||||
+ android:priority="79"
|
||||
+ android:isStatic="true" />
|
||||
</manifest>
|
||||
diff --git a/Telephony/CAF-IMS/res/values/config.xml b/Telephony/CAF-IMS/res/values/config.xml
|
||||
index 565ee42..ddf685d 100644
|
||||
--- a/Telephony/CAF-IMS/res/values/config.xml
|
||||
+++ b/Telephony/CAF-IMS/res/values/config.xml
|
||||
@@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
- <string name="config_ims_mmtel_package">org.codeaurora.ims</string>
|
||||
+ <string name="config_ims_mmtel_package">org.codeaurora.ims</string>
|
||||
</resources>
|
||||
diff --git a/Telephony/MTK-IMS/AndroidManifest.xml b/Telephony/MTK-IMS/AndroidManifest.xml
|
||||
index 5afe885..644d06b 100644
|
||||
--- a/Telephony/MTK-IMS/AndroidManifest.xml
|
||||
+++ b/Telephony/MTK-IMS/AndroidManifest.xml
|
||||
@@ -3,6 +3,8 @@
|
||||
android:versionCode="1"
|
||||
android:versionName="1.0">
|
||||
<overlay android:targetPackage="com.android.phone"
|
||||
- android:priority="79"
|
||||
- />
|
||||
+ android:requiredSystemPropertyName="ro.hardware"
|
||||
+ android:requiredSystemPropertyValue="+mt6*"
|
||||
+ android:priority="79"
|
||||
+ android:isStatic="true" />
|
||||
</manifest>
|
||||
diff --git a/Telephony/MTK-IMS/res/values/config.xml b/Telephony/MTK-IMS/res/values/config.xml
|
||||
index ead0cc2..01eca95 100644
|
||||
--- a/Telephony/MTK-IMS/res/values/config.xml
|
||||
+++ b/Telephony/MTK-IMS/res/values/config.xml
|
||||
@@ -1,5 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
- <string name="config_ims_mmtel_package">com.mediatek.ims</string>
|
||||
-
|
||||
+ <string name="config_ims_mmtel_package">com.mediatek.ims</string>
|
||||
</resources>
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
From f3ffdeec910a9d36e92c88071c95016c3ecf2e1c Mon Sep 17 00:00:00 2001
|
||||
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||
Date: Sat, 24 Sep 2022 11:40:52 +0000
|
||||
Subject: [PATCH 1/2] vendor_lineage: Commonly build some packages
|
||||
|
||||
These were in handheld_product.mk and thus weren't included in GSI targets:
|
||||
Contacts, DeskClock, Gallery2, SettingsIntelligence, fwb overlays
|
||||
|
||||
Change-Id: I00cc5918164ed70c612c5caa31eb8d2d0cd05b62
|
||||
---
|
||||
config/common_full.mk | 3 +++
|
||||
config/common_mobile.mk | 4 +++-
|
||||
2 files changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/config/common_full.mk b/config/common_full.mk
|
||||
index f7eecd84..51e1e022 100644
|
||||
--- a/config/common_full.mk
|
||||
+++ b/config/common_full.mk
|
||||
@@ -9,8 +9,11 @@ $(call inherit-product-if-exists, external/google-fonts/rubik/fonts.mk)
|
||||
|
||||
# Apps
|
||||
PRODUCT_PACKAGES += \
|
||||
+ Contacts \
|
||||
+ DeskClock \
|
||||
Eleven \
|
||||
Etar \
|
||||
+ Gallery2 \
|
||||
Profiles \
|
||||
Recorder \
|
||||
Seedvault
|
||||
diff --git a/config/common_mobile.mk b/config/common_mobile.mk
|
||||
index 560074e4..9f3ae002 100644
|
||||
--- a/config/common_mobile.mk
|
||||
+++ b/config/common_mobile.mk
|
||||
@@ -15,7 +15,9 @@ PRODUCT_PRODUCT_PROPERTIES += \
|
||||
# Apps
|
||||
PRODUCT_PACKAGES += \
|
||||
Backgrounds \
|
||||
- Glimpse
|
||||
+ Glimpse \
|
||||
+ SettingsIntelligence \
|
||||
+ frameworks-base-overlays
|
||||
|
||||
ifeq ($(PRODUCT_TYPE), go)
|
||||
PRODUCT_PACKAGES += \
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
From 1dcb3c39633bc877678577d9f6d43b8b3b51f953 Mon Sep 17 00:00:00 2001
|
||||
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||
Date: Tue, 19 Oct 2021 15:48:43 +0000
|
||||
Subject: [PATCH 2/2] vendor_lineage: Disable ADB authentication
|
||||
|
||||
Change-Id: I4370583ecab1c88ef6f42e29d3eaa52c24d13f09
|
||||
---
|
||||
config/common.mk | 5 -----
|
||||
1 file changed, 5 deletions(-)
|
||||
|
||||
diff --git a/config/common.mk b/config/common.mk
|
||||
index 00d0a416..c9930600 100644
|
||||
--- a/config/common.mk
|
||||
+++ b/config/common.mk
|
||||
@@ -13,16 +13,11 @@ PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \
|
||||
ro.com.google.clientidbase=$(PRODUCT_GMS_CLIENTID_BASE)
|
||||
endif
|
||||
|
||||
-ifeq ($(TARGET_BUILD_VARIANT),eng)
|
||||
# Disable ADB authentication
|
||||
PRODUCT_SYSTEM_DEFAULT_PROPERTIES += ro.adb.secure=0
|
||||
-else
|
||||
-# Enable ADB authentication
|
||||
-PRODUCT_SYSTEM_DEFAULT_PROPERTIES += ro.adb.secure=1
|
||||
|
||||
# Disable extra StrictMode features on all non-engineering builds
|
||||
PRODUCT_SYSTEM_DEFAULT_PROPERTIES += persist.sys.strictmode.disable=true
|
||||
-endif
|
||||
|
||||
# Backup Tool
|
||||
PRODUCT_COPY_FILES += \
|
||||
--
|
||||
2.34.1
|
||||
|
||||
Reference in New Issue
Block a user