From ebc4ea1e260d5059f7f83764f13465b54c623ce8 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 7 Oct 2023 19:15:00 -0400 Subject: [PATCH 01/43] [1/n] Android 14 port --- ...m-to-fake-vendor-props-on-a-per-proc.patch | 4 +- ...rce-load-audio-policy-for-system-si.patch} | 10 +- ...and-Q-behavior-respectively-for-tele.patch | 232 ----------------- ...DP-audio-ports-from-the-primary-HAL.patch} | 8 +- ...ecessary-close-of-buffer-acquire-fen.patch | 43 ---- ...support-glob-matching-for-properties.patch | 6 +- ...d-support-for-app-signature-spoofing.patch | 44 ++-- ...PackageUtils-Add-glob-matching-suppo.patch | 4 +- .../base/0004-Global-VPN-feature-1-2.patch | 38 +-- ...d.version.incremental-to-signal-OTA-.patch | 236 ------------------ ...more-FDE-methods-from-StorageManager.patch | 127 ---------- ...ability-to-write-to-index-0-of-bpf-m.patch | 8 +- ...tart-console-service-when-debuggable.patch | 8 +- ...ide-some-properties-ro.apex.updatabl.patch | 8 +- 14 files changed, 69 insertions(+), 707 deletions(-) rename frameworks/av/{0002-APM-Optionally-force-load-audio-policy-for-system-si.patch => 0001-APM-Optionally-force-load-audio-policy-for-system-si.patch} (89%) delete mode 100644 frameworks/av/0001-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch rename frameworks/av/{0003-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch => 0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch} (95%) delete mode 100644 frameworks/av/0004-Camera-Avoid-unnecessary-close-of-buffer-acquire-fen.patch delete mode 100644 frameworks/base/0005-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch delete mode 100644 frameworks/base/0006-Revert-Remove-more-FDE-methods-from-StorageManager.patch diff --git a/bionic/0001-Add-new-mechanism-to-fake-vendor-props-on-a-per-proc.patch b/bionic/0001-Add-new-mechanism-to-fake-vendor-props-on-a-per-proc.patch index a756b22..3b2f16f 100644 --- a/bionic/0001-Add-new-mechanism-to-fake-vendor-props-on-a-per-proc.patch +++ b/bionic/0001-Add-new-mechanism-to-fake-vendor-props-on-a-per-proc.patch @@ -1,4 +1,4 @@ -From ea0f283eec1e7750351302dbc2009fa905cef375 Mon Sep 17 00:00:00 2001 +From ee3be511ddfa2474c7c5890cea4725e908996b9f Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Sat, 19 Feb 2022 08:20:25 -0500 Subject: [PATCH] Add new mechanism to fake vendor props on a per-process basis @@ -132,5 +132,5 @@ index 1cb15c3df..40ff48bad 100644 static bool is_read_only(const char* name) { -- -2.40.0 +2.41.0 diff --git a/frameworks/av/0002-APM-Optionally-force-load-audio-policy-for-system-si.patch b/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch similarity index 89% rename from frameworks/av/0002-APM-Optionally-force-load-audio-policy-for-system-si.patch rename to frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch index 5c6a2cc..334fb3b 100644 --- a/frameworks/av/0002-APM-Optionally-force-load-audio-policy-for-system-si.patch +++ b/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch @@ -1,7 +1,7 @@ -From 5ae18168ff97d9e4eb66fc6dc8e087bd0ead8f31 Mon Sep 17 00:00:00 2001 +From f8b9cb1d3cdf0274414bb7d100844d2707999558 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 24 Aug 2022 15:42:39 -0400 -Subject: [PATCH 2/4] APM: Optionally force-load audio policy for system-side +Subject: [PATCH 1/2] APM: Optionally force-load audio policy for system-side bt audio HAL Required to support our system-side bt audio implementation, i.e. @@ -14,7 +14,7 @@ Change-Id: I279fff541a531f922f3fa55b8f14d00237db59ff 1 file changed, 25 insertions(+) diff --git a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp -index d446e9667b..f5233f2a42 100644 +index 3d5c1d2e42..881c188e4c 100644 --- a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp +++ b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp @@ -25,6 +25,7 @@ @@ -25,7 +25,7 @@ index d446e9667b..f5233f2a42 100644 #include #include #include -@@ -890,6 +891,30 @@ status_t PolicySerializer::deserialize(const char *configFile, AudioPolicyConfig +@@ -885,6 +886,30 @@ status_t PolicySerializer::deserialize(const char *configFile, AudioPolicyConfig if (status != NO_ERROR) { return status; } @@ -57,5 +57,5 @@ index d446e9667b..f5233f2a42 100644 // Global Configuration -- -2.39.2 +2.41.0 diff --git a/frameworks/av/0001-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch b/frameworks/av/0001-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch deleted file mode 100644 index ae6b430..0000000 --- a/frameworks/av/0001-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch +++ /dev/null @@ -1,232 +0,0 @@ -From f9be27ef60cd4ccca6803458ff29ee7a2236769c Mon Sep 17 00:00:00 2001 -From: Peter Cai -Date: Thu, 18 Aug 2022 15:44:46 -0400 -Subject: [PATCH 1/4] 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 | 103 ++++++++++++++++-- - .../managerdefault/AudioPolicyManager.h | 3 + - 2 files changed, 96 insertions(+), 10 deletions(-) - -diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp -index 4573382a06..c218c7ce2d 100644 ---- a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp -+++ b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp -@@ -675,6 +675,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 = -@@ -697,9 +708,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. -@@ -716,7 +738,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 -@@ -731,7 +760,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; -@@ -739,6 +773,36 @@ status_t AudioPolicyManager::updateCallRoutingInternal( - return NO_ERROR; - } - -+sp AudioPolicyManager::createTelephonyPatch( -+ bool isRx, const sp &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& devDesc, const char *moduleId) const { - sp module = mHwModules.getModuleFromName(moduleId); -@@ -4541,6 +4605,7 @@ 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 outputDesc; -+ if (sourceDesc != nullptr) { // Ignore indentation, we don't want to cuase huge conflicts... - if (!sourceDesc->isInternal()) { - // take care of dynamic routing for SwOutput selection, - audio_attributes_t attributes = sourceDesc->attributes(); -@@ -4586,33 +4651,51 @@ status_t AudioPolicyManager::createAudioPatchInternal(const struct audio_patch * - outputDesc = mOutputs.valueFor(output); - if (outputDesc->isDuplicated()) { - ALOGV("%s output for device %s is duplicated", -- __func__, sinkDevice->toString().c_str()); -+ __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 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 a69e08871b..f8762016db 100644 ---- a/services/audiopolicy/managerdefault/AudioPolicyManager.h -+++ b/services/audiopolicy/managerdefault/AudioPolicyManager.h -@@ -944,6 +944,9 @@ protected: - - SoundTriggerSessionCollection mSoundTriggerSessions; - -+ sp mCallTxPatch; -+ sp mCallRxPatch; -+ - HwAudioOutputCollection mHwOutputs; - SourceClientCollection mAudioSources; - --- -2.39.2 - diff --git a/frameworks/av/0003-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch b/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch similarity index 95% rename from frameworks/av/0003-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch rename to frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch index 51420ea..aa0b992 100644 --- a/frameworks/av/0003-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch +++ b/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch @@ -1,7 +1,7 @@ -From d11e204968cbf01851042f03fe2a12aabbe84a93 Mon Sep 17 00:00:00 2001 +From d60a1b5fc58a7cc84b48c554cb2cffaeff14d86e Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 25 Aug 2022 13:30:29 -0400 -Subject: [PATCH 3/4] APM: Remove A2DP audio ports from the primary HAL +Subject: [PATCH 2/2] 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 @@ -16,7 +16,7 @@ Change-Id: I3305594a17285da113167b419543543f0ef71122 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 f5233f2a42..6630d06f6d 100644 +index 881c188e4c..8519cfdc04 100644 --- a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp +++ b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp @@ -26,6 +26,7 @@ @@ -75,5 +75,5 @@ index f5233f2a42..6630d06f6d 100644 RouteTraits::Collection routes; -- -2.39.2 +2.41.0 diff --git a/frameworks/av/0004-Camera-Avoid-unnecessary-close-of-buffer-acquire-fen.patch b/frameworks/av/0004-Camera-Avoid-unnecessary-close-of-buffer-acquire-fen.patch deleted file mode 100644 index 3f1e671..0000000 --- a/frameworks/av/0004-Camera-Avoid-unnecessary-close-of-buffer-acquire-fen.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 628ff965d6ade74843a58cab6fe58069ef0ec3ad Mon Sep 17 00:00:00 2001 -From: Emilian Peev -Date: Fri, 5 Aug 2022 17:28:06 -0700 -Subject: [PATCH 4/4] Camera: Avoid unnecessary close of buffer acquire fence - fds - -According to the gralloc lock documentation: -The ownership of acquireFence is always transferred to the callee, even -on errors. - -Bug: 241455881 -Test: Manual using camera application -Change-Id: Ieec34b54aaa7f0d773eccb593c3daaa3e41bae0b -Merged-In: Ieec34b54aaa7f0d773eccb593c3daaa3e41bae0b ---- - .../camera/libcameraservice/device3/Camera3OutputStream.cpp | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/services/camera/libcameraservice/device3/Camera3OutputStream.cpp b/services/camera/libcameraservice/device3/Camera3OutputStream.cpp -index 396104c4fd..c725aadb79 100644 ---- a/services/camera/libcameraservice/device3/Camera3OutputStream.cpp -+++ b/services/camera/libcameraservice/device3/Camera3OutputStream.cpp -@@ -331,7 +331,7 @@ status_t Camera3OutputStream::fixUpHidlJpegBlobHeader(ANativeWindowBuffer* anwBu - status_t res = - gbLocker.lockAsync( - GraphicBuffer::USAGE_SW_READ_OFTEN | GraphicBuffer::USAGE_SW_WRITE_RARELY, -- &mapped, fenceFd.get()); -+ &mapped, fenceFd.release()); - if (res != OK) { - ALOGE("%s: Failed to lock the buffer: %s (%d)", __FUNCTION__, strerror(-res), res); - return res; -@@ -1327,7 +1327,7 @@ void Camera3OutputStream::dumpImageToDisk(nsecs_t timestamp, - void* mapped = nullptr; - base::unique_fd fenceFd(dup(fence)); - status_t res = graphicBuffer->lockAsync(GraphicBuffer::USAGE_SW_READ_OFTEN, &mapped, -- fenceFd.get()); -+ fenceFd.release()); - if (res != OK) { - ALOGE("%s: Failed to lock the buffer: %s (%d)", __FUNCTION__, strerror(-res), res); - return; --- -2.39.2 - diff --git a/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch b/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch index 5521e96..cea0159 100644 --- a/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch +++ b/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch @@ -1,7 +1,7 @@ -From 5e94fc70ba1963ed33eb6633702cce706b6814d1 Mon Sep 17 00:00:00 2001 +From c25e4bfafc3b0b9f44c9cd2b9fed590299480f71 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Tue, 12 Oct 2021 21:37:22 -0400 -Subject: [PATCH 1/6] PackageParser: support glob matching for properties +Subject: [PATCH 1/4] PackageParser: support glob matching for properties Needed to make phh's vendor overlays work --- @@ -9,7 +9,7 @@ Needed to make phh's vendor overlays work 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java -index c15b3e0b80c3..05bb843c0c4d 100644 +index 048289f56a0c..0d88d7ab97a4 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -2545,8 +2545,16 @@ public class PackageParser { diff --git a/frameworks/base/0002-Add-support-for-app-signature-spoofing.patch b/frameworks/base/0002-Add-support-for-app-signature-spoofing.patch index 966f492..d2fe6b4 100644 --- a/frameworks/base/0002-Add-support-for-app-signature-spoofing.patch +++ b/frameworks/base/0002-Add-support-for-app-signature-spoofing.patch @@ -1,7 +1,7 @@ -From 3199a7f449d08acf306aafb180ccbcbacd993616 Mon Sep 17 00:00:00 2001 +From 540857efdf49ba24121970d2b836eb38ab7e7b32 Mon Sep 17 00:00:00 2001 From: Danny Lin Date: Sat, 16 Oct 2021 05:27:57 -0700 -Subject: [PATCH 2/6] Add support for app signature spoofing +Subject: [PATCH 2/4] Add support for app signature spoofing This is needed by microG GmsCore to pretend to be the official Google Play Services package, because client apps check the package signature @@ -38,18 +38,18 @@ Change-Id: Ied7d6ce0b83a2d2345c3abba0429998d86494a88 4 files changed, 56 insertions(+), 3 deletions(-) diff --git a/core/api/current.txt b/core/api/current.txt -index 487e57d114c9..04e69741b9fd 100644 +index 288ab479c0fb..2124d89c6e6f 100644 --- a/core/api/current.txt +++ b/core/api/current.txt -@@ -87,6 +87,7 @@ package android { - field public static final String DUMP = "android.permission.DUMP"; +@@ -95,6 +95,7 @@ package android { + field public static final String EXECUTE_APP_ACTION = "android.permission.EXECUTE_APP_ACTION"; field public static final String EXPAND_STATUS_BAR = "android.permission.EXPAND_STATUS_BAR"; field public static final String FACTORY_TEST = "android.permission.FACTORY_TEST"; + field public static final String FAKE_PACKAGE_SIGNATURE = "android.permission.FAKE_PACKAGE_SIGNATURE"; field public static final String FOREGROUND_SERVICE = "android.permission.FOREGROUND_SERVICE"; - field public static final String GET_ACCOUNTS = "android.permission.GET_ACCOUNTS"; - field public static final String GET_ACCOUNTS_PRIVILEGED = "android.permission.GET_ACCOUNTS_PRIVILEGED"; -@@ -222,6 +223,7 @@ package android { + field public static final String FOREGROUND_SERVICE_CAMERA = "android.permission.FOREGROUND_SERVICE_CAMERA"; + field public static final String FOREGROUND_SERVICE_CONNECTED_DEVICE = "android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE"; +@@ -326,6 +327,7 @@ package android { field public static final String CALL_LOG = "android.permission-group.CALL_LOG"; field public static final String CAMERA = "android.permission-group.CAMERA"; field public static final String CONTACTS = "android.permission-group.CONTACTS"; @@ -58,10 +58,10 @@ index 487e57d114c9..04e69741b9fd 100644 field public static final String MICROPHONE = "android.permission-group.MICROPHONE"; field public static final String NEARBY_DEVICES = "android.permission-group.NEARBY_DEVICES"; diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml -index 0e95e30a99b8..a456ac6b7129 100644 +index 2f9f6ae3f3c4..c4cde374ce58 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml -@@ -3569,6 +3569,21 @@ +@@ -4251,6 +4251,21 @@ android:description="@string/permdesc_getPackageSize" android:protectionLevel="normal" /> @@ -84,10 +84,10 @@ index 0e95e30a99b8..a456ac6b7129 100644 {@link android.content.pm.PackageManager#addPackageToPreferred} for details. --> diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml -index 2091c0502b6f..6888edcf7d3c 100644 +index a5b2b853fddd..f8b48c55ce21 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml -@@ -982,6 +982,18 @@ +@@ -991,6 +991,18 @@ @@ -107,10 +107,10 @@ index 2091c0502b6f..6888edcf7d3c 100644 disable or modify status bar diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java -index 46b7460dff1b..40549962436f 100644 +index 78f1fa60b69f..fb2f7da97cda 100644 --- a/services/core/java/com/android/server/pm/ComputerEngine.java +++ b/services/core/java/com/android/server/pm/ComputerEngine.java -@@ -1603,6 +1603,29 @@ public class ComputerEngine implements Computer { +@@ -1450,6 +1450,29 @@ public class ComputerEngine implements Computer { return result; } @@ -140,21 +140,21 @@ index 46b7460dff1b..40549962436f 100644 public final PackageInfo generatePackageInfo(PackageStateInternal ps, @PackageManager.PackageInfoFlagsBits long flags, int userId) { if (!mUserManager.exists(userId)) return null; -@@ -1632,13 +1655,14 @@ public class ComputerEngine implements Computer { - final int[] gids = (flags & PackageManager.GET_GIDS) == 0 ? EMPTY_INT_ARRAY - : mPermissionManager.getGidsForUid(UserHandle.getUid(userId, ps.getAppId())); +@@ -1483,13 +1506,14 @@ public class ComputerEngine implements Computer { + || ArrayUtils.isEmpty(p.getPermissions())) ? Collections.emptySet() + : mPermissionManager.getInstalledPermissions(ps.getPackageName()); // Compute granted permissions only if package has requested permissions -- final Set permissions = ((flags & PackageManager.GET_PERMISSIONS) == 0 -+ final Set permissions = (((flags & PackageManager.GET_PERMISSIONS) == 0 +- final Set grantedPermissions = ((flags & PackageManager.GET_PERMISSIONS) == 0 ++ final Set grantedPermissions = (((flags & PackageManager.GET_PERMISSIONS) == 0 + && !requestsFakeSignature(p)) || ArrayUtils.isEmpty(p.getRequestedPermissions())) ? Collections.emptySet() : mPermissionManager.getGrantedPermissions(ps.getPackageName(), userId); - PackageInfo packageInfo = PackageInfoUtils.generate(p, gids, flags, + PackageInfo packageInfo = mayFakeSignature(p, PackageInfoUtils.generate(p, gids, flags, - state.getFirstInstallTime(), ps.getLastUpdateTime(), permissions, state, userId, -- ps); -+ ps), permissions); + state.getFirstInstallTimeMillis(), ps.getLastUpdateTime(), installedPermissions, +- grantedPermissions, state, userId, ps); ++ grantedPermissions, state, userId, ps), grantedPermissions); if (packageInfo == null) { return null; diff --git a/frameworks/base/0003-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch b/frameworks/base/0003-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch index f449efc..ccecbe6 100644 --- a/frameworks/base/0003-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch +++ b/frameworks/base/0003-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch @@ -1,7 +1,7 @@ -From 734839b7918f93cb746ebbe82179a9cbcf165424 Mon Sep 17 00:00:00 2001 +From 148fe28e381f444f7d06ea611dbd82c1e1ae8573 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 2 Sep 2022 21:36:06 -0400 -Subject: [PATCH 3/6] FrameworkParsingPackageUtils: Add glob matching support +Subject: [PATCH 3/4] FrameworkParsingPackageUtils: Add glob matching support for properties This is now required in addition to the one in PackageParser in order diff --git a/frameworks/base/0004-Global-VPN-feature-1-2.patch b/frameworks/base/0004-Global-VPN-feature-1-2.patch index 39f3205..173de2b 100644 --- a/frameworks/base/0004-Global-VPN-feature-1-2.patch +++ b/frameworks/base/0004-Global-VPN-feature-1-2.patch @@ -1,7 +1,7 @@ -From af0cbe50e889694dc72ab84c4e1af816bdd199b9 Mon Sep 17 00:00:00 2001 +From 00b72ce36c74f294e9823a41c0f50f73d435b1dd Mon Sep 17 00:00:00 2001 From: Oliver Scott Date: Thu, 8 Jul 2021 10:41:43 -0400 -Subject: [PATCH 4/6] Global VPN feature [1/2] +Subject: [PATCH 4/4] Global VPN feature [1/2] * Modify existing VPN user range functions to conditionally have traffic from all users pass through the global VPN. @@ -28,10 +28,10 @@ Signed-off-by: Mohammad Hasan Keramat J 3 files changed, 46 insertions(+), 5 deletions(-) diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java -index 8d8379831e87..bd6cc1d4d7bf 100644 +index d695c0cb3760..5c705aa14d44 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java -@@ -16060,6 +16060,12 @@ public final class Settings { +@@ -16734,6 +16734,12 @@ public final class Settings { CLOCKWORK_HOME_READY, }; @@ -45,7 +45,7 @@ index 8d8379831e87..bd6cc1d4d7bf 100644 * Keys we no longer back up under the current schema, but want to continue to * process when restoring historical backup datasets. diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java -index ba947149d287..e5eb04c7818d 100644 +index 03656f000c07..fddf8167beb5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java @@ -39,6 +39,7 @@ import android.os.Handler; @@ -56,7 +56,7 @@ index ba947149d287..e5eb04c7818d 100644 import android.security.KeyChain; import android.util.ArrayMap; import android.util.Log; -@@ -332,8 +333,13 @@ public class SecurityControllerImpl implements SecurityController { +@@ -338,8 +339,13 @@ public class SecurityControllerImpl implements SecurityController { @Override public void onUserSwitched(int newUserId) { mCurrentUserId = newUserId; @@ -72,10 +72,10 @@ index ba947149d287..e5eb04c7818d 100644 mVpnUserId = newUserInfo.restrictedProfileParentId; } else { diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java -index 8510de4ef201..7c02924a711d 100644 +index e85eee817d29..2a731532b8d2 100644 --- a/services/core/java/com/android/server/connectivity/Vpn.java +++ b/services/core/java/com/android/server/connectivity/Vpn.java -@@ -691,6 +691,15 @@ public class Vpn { +@@ -909,6 +909,15 @@ public class Vpn { return mAlwaysOn; } @@ -91,7 +91,7 @@ index 8510de4ef201..7c02924a711d 100644 /** * Checks if a VPN app supports always-on mode. * -@@ -1559,6 +1568,7 @@ public class Vpn { +@@ -1855,6 +1864,7 @@ public class Vpn { try { // Restricted users are not allowed to create VPNs, they are tied to Owner enforceNotRestrictedUser(); @@ -99,7 +99,7 @@ index 8510de4ef201..7c02924a711d 100644 final PackageManager packageManager = mUserIdContext.getPackageManager(); if (packageManager == null) { -@@ -1720,7 +1730,7 @@ public class Vpn { +@@ -2007,7 +2017,7 @@ public class Vpn { addUserToRanges(ranges, userId, allowedApplications, disallowedApplications); // If the user can have restricted profiles, assign all its restricted profiles too @@ -108,7 +108,7 @@ index 8510de4ef201..7c02924a711d 100644 final long token = Binder.clearCallingIdentity(); List users; try { -@@ -1729,7 +1739,8 @@ public class Vpn { +@@ -2016,7 +2026,8 @@ public class Vpn { Binder.restoreCallingIdentity(token); } for (UserInfo user : users) { @@ -118,7 +118,7 @@ index 8510de4ef201..7c02924a711d 100644 addUserToRanges(ranges, user.id, allowedApplications, disallowedApplications); } } -@@ -1810,7 +1821,8 @@ public class Vpn { +@@ -2097,7 +2108,8 @@ public class Vpn { public void onUserAdded(int userId) { // If the user is restricted tie them to the parent user's VPN UserInfo user = mUserManager.getUserInfo(userId); @@ -128,7 +128,7 @@ index 8510de4ef201..7c02924a711d 100644 synchronized(Vpn.this) { final Set> existingRanges = mNetworkCapabilities.getUids(); if (existingRanges != null) { -@@ -1839,7 +1851,8 @@ public class Vpn { +@@ -2126,7 +2138,8 @@ public class Vpn { public void onUserRemoved(int userId) { // clean up if restricted UserInfo user = mUserManager.getUserInfo(userId); @@ -138,7 +138,7 @@ index 8510de4ef201..7c02924a711d 100644 synchronized(Vpn.this) { final Set> existingRanges = mNetworkCapabilities.getUids(); if (existingRanges != null) { -@@ -2278,6 +2291,17 @@ public class Vpn { +@@ -2565,6 +2578,17 @@ public class Vpn { } } @@ -156,7 +156,7 @@ index 8510de4ef201..7c02924a711d 100644 /** * Start legacy VPN, controlling native daemons as needed. Creates a * secondary thread to perform connection work, returning quickly. -@@ -2362,6 +2386,7 @@ public class Vpn { +@@ -2649,6 +2673,7 @@ public class Vpn { new UserHandle(mUserId))) { throw new SecurityException("Restricted users cannot establish VPNs"); } @@ -164,7 +164,7 @@ index 8510de4ef201..7c02924a711d 100644 final RouteInfo ipv4DefaultRoute = findIPv4DefaultRoute(egress); final String gateway = ipv4DefaultRoute.getGateway().getHostAddress(); -@@ -3859,6 +3884,7 @@ public class Vpn { +@@ -4627,6 +4652,7 @@ public class Vpn { verifyCallingUidAndPackage(packageName); enforceNotRestrictedUser(); @@ -172,7 +172,7 @@ index 8510de4ef201..7c02924a711d 100644 validateRequiredFeatures(profile); if (profile.isRestrictedToTestNetworks) { -@@ -3901,6 +3927,7 @@ public class Vpn { +@@ -4669,6 +4695,7 @@ public class Vpn { verifyCallingUidAndPackage(packageName); enforceNotRestrictedUser(); @@ -180,7 +180,7 @@ index 8510de4ef201..7c02924a711d 100644 final long token = Binder.clearCallingIdentity(); try { -@@ -3964,6 +3991,7 @@ public class Vpn { +@@ -4738,6 +4765,7 @@ public class Vpn { requireNonNull(packageName, "No package name provided"); enforceNotRestrictedUser(); @@ -188,7 +188,7 @@ index 8510de4ef201..7c02924a711d 100644 // Prepare VPN for startup if (!prepare(packageName, null /* newPackage */, VpnManager.TYPE_VPN_PLATFORM)) { -@@ -4085,6 +4113,7 @@ public class Vpn { +@@ -4860,6 +4888,7 @@ public class Vpn { requireNonNull(packageName, "No package name provided"); enforceNotRestrictedUser(); diff --git a/frameworks/base/0005-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch b/frameworks/base/0005-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch deleted file mode 100644 index 77c15f4..0000000 --- a/frameworks/base/0005-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch +++ /dev/null @@ -1,236 +0,0 @@ -From 628ab41923ce082cd68ab8d4a184823b62a75ab3 Mon Sep 17 00:00:00 2001 -From: dhacker29 -Date: Tue, 24 Nov 2015 01:53:47 -0500 -Subject: [PATCH 5/6] fw/b: Use ro.build.version.incremental to signal OTA - upgrades - -Squash of: - -Author: dhacker29 -Date: Tue Nov 24 01:53:47 2015 -0500 - Core: Use ro.build.date to signal mIsUpgrade - - M: We use a static fingerprint that is only changed when a new OEM build is released, so - every flash shows Android is starting instead of upgrading. This will fix that. - N: even though we dont have the dexopt sceen on N, this is still needed to delete the - correct caches, and grant/deny specific runtime permissions like a true oem update - would do. - Updated for Nougat By: BeansTown106 - - Change-Id: I0e3ed5c8f0351e48944432ae6a0c5194ddeff1fa - -Author: Sam Mortimer -Date: Fri Sep 28 13:45:00 2018 -0700 - fw/b UserManagerService: Use ro.build.date to signal upgrades - - *) We changed PackageManagerService to use Build.DATE instead of - Build.FINGERPRINT to detect upgrade. Do the same for - UserManagerService. - *) Affects generation of preboot intent and app data migration. - - Change-Id: I56887b7ca842afdcf3cf84b27b4c04667cf43307 - -Author: Wang Han <416810799@qq.com> -Date: Sat Dec 29 23:33:20 2018 +0800 - ShortcutService: Use ro.build.date to signal package scanning - - * Affects system apps scanning. - - Change-Id: I5f6d6647929f5b5ae7e820b18e95bf5ed2ec8d1c - -Author: maxwen -Date: Tue Nov 19 01:02:01 2019 +0100 - base: Use ro.build.date to clear cache dirs on update - - instead of using ro.build.fingerprint we explictly need to use ro.build.date - - Change-Id: Ib3e80e58eb8c9a21c108e9f5cd2dbdb7ada8e3a4 - -Author: maxwen -Date: Wed Oct 28 07:07:10 2020 -0400 - One more Build.FINGERPRINT to Build.DATE change - - Change-Id: I13dbf3d7f6587d3fcd6591cc0f861b34b6d5561c - -Change-Id: If0eb969ba509981f9209ffa37a949d9042ef4c2a ---- - core/java/android/app/admin/SystemUpdateInfo.java | 4 ++-- - .../java/com/android/server/am/UserController.java | 3 ++- - .../com/android/server/pm/PackageManagerService.java | 12 ++++++------ - .../core/java/com/android/server/pm/Settings.java | 4 ++-- - .../java/com/android/server/pm/ShortcutService.java | 2 +- - .../com/android/server/pm/UserManagerService.java | 8 ++++---- - 6 files changed, 17 insertions(+), 16 deletions(-) - -diff --git a/core/java/android/app/admin/SystemUpdateInfo.java b/core/java/android/app/admin/SystemUpdateInfo.java -index b88bf76c96ca..fdf2b3f54311 100644 ---- a/core/java/android/app/admin/SystemUpdateInfo.java -+++ b/core/java/android/app/admin/SystemUpdateInfo.java -@@ -132,7 +132,7 @@ public final class SystemUpdateInfo implements Parcelable { - out.startTag(null, tag); - out.attributeLong(null, ATTR_RECEIVED_TIME, mReceivedTime); - out.attributeInt(null, ATTR_SECURITY_PATCH_STATE, mSecurityPatchState); -- out.attribute(null, ATTR_ORIGINAL_BUILD , Build.FINGERPRINT); -+ out.attribute(null, ATTR_ORIGINAL_BUILD , Build.VERSION.INCREMENTAL); - out.endTag(null, tag); - } - -@@ -141,7 +141,7 @@ public final class SystemUpdateInfo implements Parcelable { - public static SystemUpdateInfo readFromXml(TypedXmlPullParser parser) { - // If an OTA has been applied (build fingerprint has changed), discard stale info. - final String buildFingerprint = parser.getAttributeValue(null, ATTR_ORIGINAL_BUILD ); -- if (!Build.FINGERPRINT.equals(buildFingerprint)) { -+ if (!Build.VERSION.INCREMENTAL.equals(buildFingerprint)) { - return null; - } - try { -diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java -index 44b186e1541f..9470a728389f 100644 ---- a/services/core/java/com/android/server/am/UserController.java -+++ b/services/core/java/com/android/server/am/UserController.java -@@ -71,6 +71,7 @@ import android.content.pm.PackagePartitions; - import android.content.pm.UserInfo; - import android.os.BatteryStats; - import android.os.Binder; -+import android.os.Build; - import android.os.Bundle; - import android.os.Debug; - import android.os.Handler; -@@ -761,7 +762,7 @@ class UserController implements Handler.Callback { - // purposefully block sending BOOT_COMPLETED until after all - // PRE_BOOT receivers are finished to avoid ANR'ing apps - final UserInfo info = getUserInfo(userId); -- if (!Objects.equals(info.lastLoggedInFingerprint, PackagePartitions.FINGERPRINT) -+ if (!Objects.equals(info.lastLoggedInFingerprint, Build.VERSION.INCREMENTAL) - || SystemProperties.getBoolean("persist.pm.mock-upgrade", false)) { - // Suppress double notifications for managed profiles that - // were unlocked automatically as part of their parent user being -diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java -index 47860373156b..858bf1aad92f 100644 ---- a/services/core/java/com/android/server/pm/PackageManagerService.java -+++ b/services/core/java/com/android/server/pm/PackageManagerService.java -@@ -1492,7 +1492,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService - } - - PackageManagerService m = new PackageManagerService(injector, onlyCore, factoryTest, -- PackagePartitions.FINGERPRINT, Build.IS_ENG, Build.IS_USERDEBUG, -+ Build.VERSION.INCREMENTAL, Build.IS_ENG, Build.IS_USERDEBUG, - Build.VERSION.SDK_INT, Build.VERSION.INCREMENTAL); - t.traceEnd(); // "create package manager" - -@@ -1954,7 +1954,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService - !buildFingerprint.equals(ver.fingerprint); - if (mIsUpgrade) { - PackageManagerServiceUtils.logCriticalInfo(Log.INFO, "Upgrading from " -- + ver.fingerprint + " to " + PackagePartitions.FINGERPRINT); -+ + ver.fingerprint + " to " + Build.VERSION.INCREMENTAL); - } - - mInitAppsHelper = new InitAppsHelper(this, mApexManager, mInstallPackageHelper, -@@ -2068,8 +2068,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService - // allow... it would be nice to have some better way to handle - // this situation. - if (mIsUpgrade) { -- Slog.i(TAG, "Build fingerprint changed from " + ver.fingerprint + " to " -- + PackagePartitions.FINGERPRINT -+ Slog.i(TAG, "Build incremental version changed from " + ver.fingerprint + " to " -+ + Build.VERSION.INCREMENTAL - + "; regranting permissions for internal storage"); - } - mPermissionManager.onStorageVolumeMounted( -@@ -2091,7 +2091,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService - // across OTAs and are used to drive profile verification (post OTA) and - // profile compilation (without waiting to collect a fresh set of profiles). - if (mIsUpgrade && !mOnlyCore) { -- Slog.i(TAG, "Build fingerprint changed; clearing code caches"); -+ Slog.i(TAG, "Build incremental version changed; clearing code caches"); - for (int i = 0; i < packageSettings.size(); i++) { - final PackageSetting ps = packageSettings.valueAt(i); - if (Objects.equals(StorageManager.UUID_PRIVATE_INTERNAL, ps.getVolumeUuid())) { -@@ -2102,7 +2102,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService - | Installer.FLAG_CLEAR_APP_DATA_KEEP_ART_PROFILES); - } - } -- ver.fingerprint = PackagePartitions.FINGERPRINT; -+ ver.fingerprint = Build.VERSION.INCREMENTAL; - } - - // Defer the app data fixup until we are done with app data clearing above. -diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java -index cfd029346340..a9b624653b92 100644 ---- a/services/core/java/com/android/server/pm/Settings.java -+++ b/services/core/java/com/android/server/pm/Settings.java -@@ -445,7 +445,7 @@ public final class Settings implements Watchable, Snappable { - public void forceCurrent() { - sdkVersion = Build.VERSION.SDK_INT; - databaseVersion = CURRENT_DATABASE_VERSION; -- fingerprint = PackagePartitions.FINGERPRINT; -+ fingerprint = Build.VERSION.INCREMENTAL; - } - } - -@@ -5527,7 +5527,7 @@ public final class Settings implements Watchable, Snappable { - } - - private String getExtendedFingerprint(long version) { -- return PackagePartitions.FINGERPRINT + "?pc_version=" + version; -+ return Build.VERSION.INCREMENTAL + "?pc_version=" + version; - } - - private static long uniformRandom(double low, double high) { -diff --git a/services/core/java/com/android/server/pm/ShortcutService.java b/services/core/java/com/android/server/pm/ShortcutService.java -index a2b2983a8f35..4564e9dccc13 100644 ---- a/services/core/java/com/android/server/pm/ShortcutService.java -+++ b/services/core/java/com/android/server/pm/ShortcutService.java -@@ -5168,7 +5168,7 @@ public class ShortcutService extends IShortcutService.Stub { - - // Injection point. - String injectBuildFingerprint() { -- return Build.FINGERPRINT; -+ return Build.VERSION.INCREMENTAL; - } - - final void wtf(String message) { -diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java -index 88aeb17dc2b4..af7b481dd311 100644 ---- a/services/core/java/com/android/server/pm/UserManagerService.java -+++ b/services/core/java/com/android/server/pm/UserManagerService.java -@@ -4104,7 +4104,7 @@ public class UserManagerService extends IUserManager.Stub { - userInfo.creationTime = getCreationTime(); - userInfo.partial = true; - userInfo.preCreated = preCreate; -- userInfo.lastLoggedInFingerprint = PackagePartitions.FINGERPRINT; -+ userInfo.lastLoggedInFingerprint = Build.VERSION.INCREMENTAL; - if (userTypeDetails.hasBadge() && parentId != UserHandle.USER_NULL) { - userInfo.profileBadge = getFreeProfileBadgeLU(parentId, userType); - } -@@ -5390,7 +5390,7 @@ public class UserManagerService extends IUserManager.Stub { - t.traceBegin("onBeforeStartUser-" + userId); - final int userSerial = userInfo.serialNumber; - // Migrate only if build fingerprints mismatch -- boolean migrateAppsData = !PackagePartitions.FINGERPRINT.equals( -+ boolean migrateAppsData = !Build.VERSION.INCREMENTAL.equals( - userInfo.lastLoggedInFingerprint); - t.traceBegin("prepareUserData"); - mUserDataPreparer.prepareUserData(userId, userSerial, StorageManager.FLAG_STORAGE_DE); -@@ -5421,7 +5421,7 @@ public class UserManagerService extends IUserManager.Stub { - } - final int userSerial = userInfo.serialNumber; - // Migrate only if build fingerprints mismatch -- boolean migrateAppsData = !PackagePartitions.FINGERPRINT.equals( -+ boolean migrateAppsData = !Build.VERSION.INCREMENTAL.equals( - userInfo.lastLoggedInFingerprint); - - final TimingsTraceAndSlog t = new TimingsTraceAndSlog(); -@@ -5466,7 +5466,7 @@ public class UserManagerService extends IUserManager.Stub { - if (now > EPOCH_PLUS_30_YEARS) { - userData.info.lastLoggedInTime = now; - } -- userData.info.lastLoggedInFingerprint = PackagePartitions.FINGERPRINT; -+ userData.info.lastLoggedInFingerprint = Build.VERSION.INCREMENTAL; - scheduleWriteUser(userData); - } - --- -2.41.0 - diff --git a/frameworks/base/0006-Revert-Remove-more-FDE-methods-from-StorageManager.patch b/frameworks/base/0006-Revert-Remove-more-FDE-methods-from-StorageManager.patch deleted file mode 100644 index 54e5bff..0000000 --- a/frameworks/base/0006-Revert-Remove-more-FDE-methods-from-StorageManager.patch +++ /dev/null @@ -1,127 +0,0 @@ -From 54e70eb7ce231f6a1bef4ffdedb6008b3a949820 Mon Sep 17 00:00:00 2001 -From: Andy CrossGate Yan -Date: Sat, 15 Oct 2022 09:33:56 +0000 -Subject: [PATCH 6/6] Revert "Remove more FDE methods from StorageManager" - -This reverts commit bd13f84152449a3ead6fa8604fd31f48c0224676. ---- - .../android/os/storage/StorageManager.java | 69 ++++++++++++++++--- - .../internal/os/RoSystemProperties.java | 4 ++ - 2 files changed, 65 insertions(+), 8 deletions(-) - -diff --git a/core/java/android/os/storage/StorageManager.java b/core/java/android/os/storage/StorageManager.java -index d9604b3f0145..603612e82007 100644 ---- a/core/java/android/os/storage/StorageManager.java -+++ b/core/java/android/os/storage/StorageManager.java -@@ -1681,13 +1681,18 @@ public class StorageManager { - } - - /** {@hide} -- * Is this device encrypted? -- *

-- * Note: all devices launching with Android 10 (API level 29) or later are -- * required to be encrypted. This should only ever return false for -- * in-development devices on which encryption has not yet been configured. -- * -- * @return true if encrypted, false if not encrypted -+ * 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 already encrypted? -+ * @return true for encrypted. (Implies isEncryptable() == true) -+ * false not encrypted - */ - public static boolean isEncrypted() { - return RoSystemProperties.CRYPTO_ENCRYPTED; -@@ -1696,7 +1701,7 @@ public class StorageManager { - /** {@hide} - * Is this device file encrypted? - * @return true for file encrypted. (Implies isEncrypted() == true) -- * false not encrypted or using "managed" encryption -+ * false not encrypted or block encrypted - */ - @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) - public static boolean isFileEncryptedNativeOnly() { -@@ -1706,6 +1711,54 @@ public class StorageManager { - return RoSystemProperties.CRYPTO_FILE_ENCRYPTED; - } - -+ /** {@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} */ - public static boolean isFileEncryptedEmulatedOnly() { - return SystemProperties.getBoolean(StorageManager.PROP_EMULATE_FBE, false); -diff --git a/core/java/com/android/internal/os/RoSystemProperties.java b/core/java/com/android/internal/os/RoSystemProperties.java -index cccd80e82420..adb5c107bc62 100644 ---- a/core/java/com/android/internal/os/RoSystemProperties.java -+++ b/core/java/com/android/internal/os/RoSystemProperties.java -@@ -62,10 +62,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.41.0 - diff --git a/system/bpf/0001-Revert-detect-inability-to-write-to-index-0-of-bpf-m.patch b/system/bpf/0001-Revert-detect-inability-to-write-to-index-0-of-bpf-m.patch index 8704b6d..ae8b43c 100644 --- a/system/bpf/0001-Revert-detect-inability-to-write-to-index-0-of-bpf-m.patch +++ b/system/bpf/0001-Revert-detect-inability-to-write-to-index-0-of-bpf-m.patch @@ -1,4 +1,4 @@ -From cf04b02d96fef364996067ca4ecc51b65f521dca Mon Sep 17 00:00:00 2001 +From 89613b61836c202b6ba3d3f35be16e24500ffe6c Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Tue, 6 Dec 2022 18:30:32 -0500 Subject: [PATCH] Revert "detect inability to write to index != 0 of bpf map @@ -10,10 +10,10 @@ This reverts commit ead9d83423877458023056f6ccf9390950d6726f. 1 file changed, 9 deletions(-) diff --git a/bpfloader/BpfLoader.cpp b/bpfloader/BpfLoader.cpp -index 5cd80b7..bc72811 100644 +index e53669a..2816161 100644 --- a/bpfloader/BpfLoader.cpp +++ b/bpfloader/BpfLoader.cpp -@@ -199,15 +199,6 @@ int main(int argc, char** argv) { +@@ -307,15 +307,6 @@ int main(int argc, char** argv) { } } @@ -30,5 +30,5 @@ index 5cd80b7..bc72811 100644 ALOGE("Failed to set bpf.progs_loaded property"); return 1; -- -2.38.1 +2.41.0 diff --git a/system/core/0001-init-Do-not-start-console-service-when-debuggable.patch b/system/core/0001-init-Do-not-start-console-service-when-debuggable.patch index 64462e1..f543b89 100644 --- a/system/core/0001-init-Do-not-start-console-service-when-debuggable.patch +++ b/system/core/0001-init-Do-not-start-console-service-when-debuggable.patch @@ -1,4 +1,4 @@ -From f53da166596fc34df3255b1c5120fd7cdcf21e5f Mon Sep 17 00:00:00 2001 +From b370e176ea2fe56423d668a9c7a53000d6154b8a Mon Sep 17 00:00:00 2001 From: Isaac Chen Date: Wed, 23 Jun 2021 13:07:30 +0800 Subject: [PATCH 1/2] init: Do not start console service when debuggable @@ -13,10 +13,10 @@ Change-Id: I34cfd6b42d3b9aee4b3e63181480cfb8b1255f29 1 file changed, 3 deletions(-) diff --git a/rootdir/init.rc b/rootdir/init.rc -index 02e51d2c4..ab45bb032 100644 +index 1e6918d00..8b48a9c87 100644 --- a/rootdir/init.rc +++ b/rootdir/init.rc -@@ -1277,9 +1277,6 @@ on property:ro.debuggable=1 +@@ -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 @@ -27,5 +27,5 @@ index 02e51d2c4..ab45bb032 100644 # TODO(b/135984674): reset all necessary properties here. setprop sys.boot_completed "" -- -2.40.0 +2.41.0 diff --git a/system/core/0002-Let-system-override-some-properties-ro.apex.updatabl.patch b/system/core/0002-Let-system-override-some-properties-ro.apex.updatabl.patch index 8ac9347..85f37f0 100644 --- a/system/core/0002-Let-system-override-some-properties-ro.apex.updatabl.patch +++ b/system/core/0002-Let-system-override-some-properties-ro.apex.updatabl.patch @@ -1,4 +1,4 @@ -From b50dd85e88568bddedbab1e18984a5b5578c8612 Mon Sep 17 00:00:00 2001 +From 1b075ec9186fd7b8b501272370a7ebfe43fe2fb4 Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Fri, 21 Apr 2023 13:08:48 -0400 Subject: [PATCH 2/2] Let system override some properties (ro.apex.updatable, @@ -10,10 +10,10 @@ Change-Id: I3c84fa617f0ab7990abb0d905230a8703cf39bf7 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/init/property_service.cpp b/init/property_service.cpp -index 26341b196..19fc09d63 100644 +index 8da69822c..0680b8e06 100644 --- a/init/property_service.cpp +++ b/init/property_service.cpp -@@ -726,7 +726,12 @@ static void LoadProperties(char* data, const char* filter, const char* filename, +@@ -787,7 +787,12 @@ static void LoadProperties(char* data, const char* filter, const char* filename, } else if (it->second != value) { LOG(WARNING) << "Overriding previous property '" << key << "':'" << it->second << "' with new value '" << value << "'"; @@ -28,5 +28,5 @@ index 26341b196..19fc09d63 100644 } else { LOG(ERROR) << "Do not have permissions to set '" << key << "' to '" << value -- -2.40.0 +2.41.0 From edbcfc74f228d67d361dd378b563b510488a9976 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 7 Oct 2023 19:36:35 -0400 Subject: [PATCH 02/43] [2/n] Android 14 port --- ...s-static-ImsManager.updateImsService.patch | 8 +-- ...c-void-TelephonyMetrics.writeRilSen.patch} | 6 +- ...roller-Do-not-override-default-calli.patch | 45 -------------- ...e-to-setPreferredNetworkType-for-RI.patch} | 16 ++--- ...g-too-long-to-fit-into-a-91-chars-p.patch} | 10 ++-- ...vert-Block-Binder-thread-until-incom.patch | 29 +++++----- ...roller-Do-not-override-default-calli.patch | 58 +++++++++++++++++++ 7 files changed, 91 insertions(+), 81 deletions(-) rename frameworks/opt/telephony/{0002-Reintroduce-public-void-TelephonyMetrics.writeRilSen.patch => 0001-Reintroduce-public-void-TelephonyMetrics.writeRilSen.patch} (94%) delete mode 100644 frameworks/opt/telephony/0001-SubscriptionController-Do-not-override-default-calli.patch rename frameworks/opt/telephony/{0003-Pass-correct-value-to-setPreferredNetworkType-for-RI.patch => 0002-Pass-correct-value-to-setPreferredNetworkType-for-RI.patch} (84%) rename frameworks/opt/telephony/{0005-Fix-baseband-being-too-long-to-fit-into-a-91-chars-p.patch => 0003-Fix-baseband-being-too-long-to-fit-into-a-91-chars-p.patch} (83%) create mode 100644 frameworks/opt/telephony/0005-SubscriptionController-Do-not-override-default-calli.patch diff --git a/frameworks/opt/net/ims/0001-Pie-MTK-IMS-calls-static-ImsManager.updateImsService.patch b/frameworks/opt/net/ims/0001-Pie-MTK-IMS-calls-static-ImsManager.updateImsService.patch index cea2729..732d74a 100644 --- a/frameworks/opt/net/ims/0001-Pie-MTK-IMS-calls-static-ImsManager.updateImsService.patch +++ b/frameworks/opt/net/ims/0001-Pie-MTK-IMS-calls-static-ImsManager.updateImsService.patch @@ -1,4 +1,4 @@ -From 9f88617d1af3f068efdff111984a7a631464a205 Mon Sep 17 00:00:00 2001 +From 45ee12fd0ac92b5e6a07de927716b8b03c18f1fd Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Sun, 14 Nov 2021 13:47:29 -0500 Subject: [PATCH] Pie MTK IMS calls static @@ -10,10 +10,10 @@ Change-Id: I3dd66d436629d37c8ec795df6569736195ae570e 1 file changed, 8 insertions(+) diff --git a/src/java/com/android/ims/ImsManager.java b/src/java/com/android/ims/ImsManager.java -index c41426d0..2c6d656f 100644 +index b5a1168b..547a3a16 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 { +@@ -1666,6 +1666,14 @@ public class ImsManager implements FeatureUpdates { } } @@ -29,5 +29,5 @@ index c41426d0..2c6d656f 100644 * Push configuration updates to the ImsService implementation. */ -- -2.40.0 +2.41.0 diff --git a/frameworks/opt/telephony/0002-Reintroduce-public-void-TelephonyMetrics.writeRilSen.patch b/frameworks/opt/telephony/0001-Reintroduce-public-void-TelephonyMetrics.writeRilSen.patch similarity index 94% rename from frameworks/opt/telephony/0002-Reintroduce-public-void-TelephonyMetrics.writeRilSen.patch rename to frameworks/opt/telephony/0001-Reintroduce-public-void-TelephonyMetrics.writeRilSen.patch index 6dc0420..c7c6822 100644 --- a/frameworks/opt/telephony/0002-Reintroduce-public-void-TelephonyMetrics.writeRilSen.patch +++ b/frameworks/opt/telephony/0001-Reintroduce-public-void-TelephonyMetrics.writeRilSen.patch @@ -1,7 +1,7 @@ -From bcaff4d8a493c657519ae50cf7f3661da6c4a46b Mon Sep 17 00:00:00 2001 +From d8c305abadf223aef7237029d9b58c6756922a7d 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 2/5] Reintroduce 'public void +Subject: [PATCH 1/5] 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) @@ -42,5 +42,5 @@ index 3fdbfe0ed7..fb8011c3df 100644 * Write Send SMS event using ImsService. Expecting response from * {@link #writeOnSmsSolicitedResponse}. -- -2.40.0 +2.41.0 diff --git a/frameworks/opt/telephony/0001-SubscriptionController-Do-not-override-default-calli.patch b/frameworks/opt/telephony/0001-SubscriptionController-Do-not-override-default-calli.patch deleted file mode 100644 index 6bb0898..0000000 --- a/frameworks/opt/telephony/0001-SubscriptionController-Do-not-override-default-calli.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 02041484d88e3c8a6cd62e1253f4b12b15be6852 Mon Sep 17 00:00:00 2001 -From: Peter Cai -Date: Mon, 5 Sep 2022 14:02:37 -0400 -Subject: [PATCH 1/5] SubscriptionController: Do not override default calling - account from third-party apps - -When the user has selected a calling account from a third-party app as -default, it should not be overridden by the rest of the telephony -subsystem (e.g. SIM subcription updates, or default SIM slot selection). - -Otherwise, it creates a somewhat annoying situation where the user has -to keep re-selecting the desired calling account after every reboot. - -Test: manual -Change-Id: Iccab64e9b3b3ab4773bd8944d47c2006f229d472 ---- - .../internal/telephony/SubscriptionController.java | 11 ++++++++++- - 1 file changed, 10 insertions(+), 1 deletion(-) - -diff --git a/src/java/com/android/internal/telephony/SubscriptionController.java b/src/java/com/android/internal/telephony/SubscriptionController.java -index 82799bea8b..5105d3a183 100644 ---- a/src/java/com/android/internal/telephony/SubscriptionController.java -+++ b/src/java/com/android/internal/telephony/SubscriptionController.java -@@ -2855,8 +2855,17 @@ public class SubscriptionController extends ISub.Stub { - subId); - - TelecomManager telecomManager = mContext.getSystemService(TelecomManager.class); -+ PhoneAccountHandle currentHandle = telecomManager.getUserSelectedOutgoingPhoneAccount(); -+ String currentPackageName = -+ currentHandle == null ? null : currentHandle.getComponentName().getPackageName(); -+ boolean currentIsSim = "com.android.phone".equals(currentPackageName); -+ // Do not override user selected outgoing calling account -+ // if the user has selected a third-party app as default -+ boolean shouldKeepOutgoingAccount = currentHandle != null && !currentIsSim; - -- telecomManager.setUserSelectedOutgoingPhoneAccount(newHandle); -+ if (!shouldKeepOutgoingAccount) { -+ telecomManager.setUserSelectedOutgoingPhoneAccount(newHandle); -+ } - logd("[setDefaultVoiceSubId] requesting change to phoneAccountHandle=" + newHandle); - - if (previousDefaultSub != getDefaultSubId()) { --- -2.40.0 - diff --git a/frameworks/opt/telephony/0003-Pass-correct-value-to-setPreferredNetworkType-for-RI.patch b/frameworks/opt/telephony/0002-Pass-correct-value-to-setPreferredNetworkType-for-RI.patch similarity index 84% rename from frameworks/opt/telephony/0003-Pass-correct-value-to-setPreferredNetworkType-for-RI.patch rename to frameworks/opt/telephony/0002-Pass-correct-value-to-setPreferredNetworkType-for-RI.patch index c070a86..7eba6ed 100644 --- a/frameworks/opt/telephony/0003-Pass-correct-value-to-setPreferredNetworkType-for-RI.patch +++ b/frameworks/opt/telephony/0002-Pass-correct-value-to-setPreferredNetworkType-for-RI.patch @@ -1,7 +1,7 @@ -From 9550951ff96e643d143da826cb9560da572850a1 Mon Sep 17 00:00:00 2001 +From b299cb6cb26268d1a0a58b8df42ea334d7bdc950 Mon Sep 17 00:00:00 2001 From: LuK1337 Date: Fri, 21 Oct 2022 20:55:05 +0200 -Subject: [PATCH 3/5] Pass correct value to setPreferredNetworkType() for RIL +Subject: [PATCH 2/5] Pass correct value to setPreferredNetworkType() for RIL version < 1.4 Change-Id: Id14be66a2ea4e85b6504bc03fd7d2f038185c17d @@ -11,10 +11,10 @@ Change-Id: Id14be66a2ea4e85b6504bc03fd7d2f038185c17d 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/java/com/android/internal/telephony/RIL.java b/src/java/com/android/internal/telephony/RIL.java -index 6de66527e1..0c1b7cdf8c 100644 +index 5ecdfcbbd4..174b89c141 100644 --- a/src/java/com/android/internal/telephony/RIL.java +++ b/src/java/com/android/internal/telephony/RIL.java -@@ -2879,7 +2879,8 @@ public class RIL extends BaseCommands implements CommandsInterface { +@@ -3027,7 +3027,8 @@ public class RIL extends BaseCommands implements CommandsInterface { mMetrics.writeSetPreferredNetworkType(mPhoneId, networkType); try { @@ -22,13 +22,13 @@ index 6de66527e1..0c1b7cdf8c 100644 + networkProxy.setPreferredNetworkTypeBitmap( + rr.mSerial, mAllowedNetworkTypesBitmask, networkType); } catch (RemoteException | RuntimeException e) { - handleRadioProxyExceptionForRR(NETWORK_SERVICE, "setPreferredNetworkType", e); + handleRadioProxyExceptionForRR(HAL_SERVICE_NETWORK, "setPreferredNetworkType", e); } diff --git a/src/java/com/android/internal/telephony/RadioNetworkProxy.java b/src/java/com/android/internal/telephony/RadioNetworkProxy.java -index b88103510a..661fa56954 100644 +index 246c2e0204..2e352a96b4 100644 --- a/src/java/com/android/internal/telephony/RadioNetworkProxy.java +++ b/src/java/com/android/internal/telephony/RadioNetworkProxy.java -@@ -379,16 +379,17 @@ public class RadioNetworkProxy extends RadioServiceProxy { +@@ -389,16 +389,17 @@ public class RadioNetworkProxy extends RadioServiceProxy { * Call IRadioNetwork#setPreferredNetworkTypeBitmap * @param serial Serial number of request * @param networkTypesBitmask Preferred network types bitmask to set @@ -49,5 +49,5 @@ index b88103510a..661fa56954 100644 } -- -2.40.0 +2.41.0 diff --git a/frameworks/opt/telephony/0005-Fix-baseband-being-too-long-to-fit-into-a-91-chars-p.patch b/frameworks/opt/telephony/0003-Fix-baseband-being-too-long-to-fit-into-a-91-chars-p.patch similarity index 83% rename from frameworks/opt/telephony/0005-Fix-baseband-being-too-long-to-fit-into-a-91-chars-p.patch rename to frameworks/opt/telephony/0003-Fix-baseband-being-too-long-to-fit-into-a-91-chars-p.patch index 9210d5e..a7f9bd6 100644 --- a/frameworks/opt/telephony/0005-Fix-baseband-being-too-long-to-fit-into-a-91-chars-p.patch +++ b/frameworks/opt/telephony/0003-Fix-baseband-being-too-long-to-fit-into-a-91-chars-p.patch @@ -1,7 +1,7 @@ -From 53160d33c83afe4f56862c3c12d4b61e2970209b Mon Sep 17 00:00:00 2001 +From 2861b7ed720286f3a69782d4fc18128e742d8949 Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Mon, 6 Dec 2021 16:28:22 -0500 -Subject: [PATCH 5/5] Fix baseband being too long to fit into a 91 chars +Subject: [PATCH 3/5] Fix baseband being too long to fit into a 91 chars property, preventing telephony subsystem from starting Change-Id: I1762e4a8cc137626be89f350229d6be162bdaf57 @@ -10,10 +10,10 @@ Change-Id: I1762e4a8cc137626be89f350229d6be162bdaf57 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java/com/android/internal/telephony/GsmCdmaPhone.java b/src/java/com/android/internal/telephony/GsmCdmaPhone.java -index 76a8d57246..9a72712c59 100644 +index 5eae06112c..d5302413bc 100644 --- a/src/java/com/android/internal/telephony/GsmCdmaPhone.java +++ b/src/java/com/android/internal/telephony/GsmCdmaPhone.java -@@ -3124,7 +3124,7 @@ public class GsmCdmaPhone extends Phone { +@@ -3282,7 +3282,7 @@ public class GsmCdmaPhone extends Phone { String version = (String)ar.result; if (version != null) { int length = version.length(); @@ -23,5 +23,5 @@ index 76a8d57246..9a72712c59 100644 length <= MAX_VERSION_LEN ? version : version.substring(length - MAX_VERSION_LEN, length)); -- -2.40.0 +2.41.0 diff --git a/frameworks/opt/telephony/0004-Conditionally-revert-Block-Binder-thread-until-incom.patch b/frameworks/opt/telephony/0004-Conditionally-revert-Block-Binder-thread-until-incom.patch index 5e1d94d..8870493 100644 --- a/frameworks/opt/telephony/0004-Conditionally-revert-Block-Binder-thread-until-incom.patch +++ b/frameworks/opt/telephony/0004-Conditionally-revert-Block-Binder-thread-until-incom.patch @@ -1,4 +1,4 @@ -From c527732943bc02fd434cbecbd07787e2d429023d Mon Sep 17 00:00:00 2001 +From ec5993b869fc758bd48c1636ee009bad8d4205bf Mon Sep 17 00:00:00 2001 From: ExactExampl Date: Tue, 11 Oct 2022 12:38:00 +0300 Subject: [PATCH 4/5] Conditionally revert "Block Binder thread until incoming @@ -13,14 +13,14 @@ This conditionally reverts commit 75c3dc9ba272b43971f519caba0382f9871c7d9d. Change-Id: I55a8f3bbca4a2b9a6bc7511e9fe2d0884a8818e5 --- - .../imsphone/ImsPhoneCallTracker.java | 18 ++++++++++++++---- - 1 file changed, 14 insertions(+), 4 deletions(-) + .../telephony/imsphone/ImsPhoneCallTracker.java | 15 ++++++++++++++- + 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java -index 5968ba6fa1..86034f6fa1 100644 +index c3ee0f6060..f11b921c08 100644 --- a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java +++ b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java -@@ -50,6 +50,7 @@ import android.os.Registrant; +@@ -70,6 +70,7 @@ import android.os.Registrant; import android.os.RegistrantList; import android.os.RemoteException; import android.os.SystemClock; @@ -28,30 +28,27 @@ index 5968ba6fa1..86034f6fa1 100644 import android.preference.PreferenceManager; import android.provider.Settings; import android.sysprop.TelephonyProperties; -@@ -322,10 +323,19 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { - - @Override - public void onIncomingCall(IImsCallSession c, Bundle extras) { -- // we want to ensure we block this binder thread until incoming call setup completes -- // as to avoid race conditions where the ImsService tries to update the state of the -- // call before the listeners have been attached. -- executeAndWait(()-> processIncomingCall(c, extras)); +@@ -385,7 +386,19 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { + @Nullable + public IImsCallSessionListener onIncomingCall( + @NonNull IImsCallSession c, @Nullable String callId, @Nullable Bundle extras) { +- return executeAndWaitForReturn(()-> processIncomingCall(c, callId, extras)); + final boolean shouldBlockBinderThreadOnIncomingCalls = SystemProperties.getBoolean( + "ro.telephony.block_binder_thread_on_incoming_calls", true); + if (shouldBlockBinderThreadOnIncomingCalls) { + // we want to ensure we block this binder thread until incoming call setup completes + // as to avoid race conditions where the ImsService tries to update the state of the + // call before the listeners have been attached. -+ executeAndWait(()-> processIncomingCall(c, extras)); ++ return executeAndWaitForReturn(()-> processIncomingCall(c, callId, extras)); + } else { + // for legacy IMS we want to avoid blocking the binder thread, otherwise + // we end up with half dead incoming calls with unattached call session -+ TelephonyUtils.runWithCleanCallingIdentity(()-> processIncomingCall(c, extras), ++ return TelephonyUtils.runWithCleanCallingIdentity(()-> processIncomingCall(c, callId, extras), + mExecutor); + } } @Override -- -2.40.0 +2.41.0 diff --git a/frameworks/opt/telephony/0005-SubscriptionController-Do-not-override-default-calli.patch b/frameworks/opt/telephony/0005-SubscriptionController-Do-not-override-default-calli.patch new file mode 100644 index 0000000..32fe8b6 --- /dev/null +++ b/frameworks/opt/telephony/0005-SubscriptionController-Do-not-override-default-calli.patch @@ -0,0 +1,58 @@ +From 2685c843046fcfb12b42f530ed4d5b8fa28cdc9e Mon Sep 17 00:00:00 2001 +From: Peter Cai +Date: Mon, 5 Sep 2022 14:02:37 -0400 +Subject: [PATCH 5/5] SubscriptionController: Do not override default calling + account from third-party apps + +When the user has selected a calling account from a third-party app as +default, it should not be overridden by the rest of the telephony +subsystem (e.g. SIM subcription updates, or default SIM slot selection). + +Otherwise, it creates a somewhat annoying situation where the user has +to keep re-selecting the desired calling account after every reboot. + +Test: manual +Change-Id: Iccab64e9b3b3ab4773bd8944d47c2006f229d472 +--- + .../SubscriptionManagerService.java | 18 +++++++++++++++++- + 1 file changed, 17 insertions(+), 1 deletion(-) + +diff --git a/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java b/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java +index 8e773c072d..1efe9ba3b4 100644 +--- a/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java ++++ b/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java +@@ -78,6 +78,7 @@ import android.util.Base64; + import android.util.EventLog; + import android.util.IndentingPrintWriter; + import android.util.LocalLog; ++import android.util.Log; + + import com.android.internal.R; + import com.android.internal.annotations.VisibleForTesting; +@@ -2839,7 +2840,22 @@ public class SubscriptionManagerService extends ISub.Stub { + + TelecomManager telecomManager = mContext.getSystemService(TelecomManager.class); + if (telecomManager != null) { +- telecomManager.setUserSelectedOutgoingPhoneAccount(newHandle); ++ PhoneAccountHandle currentHandle = telecomManager.getUserSelectedOutgoingPhoneAccount(); ++ log("[setDefaultVoiceSubId] current phoneAccountHandle=" + currentHandle); ++ ++ String currentPackageName = ++ currentHandle == null ? null : currentHandle.getComponentName().getPackageName(); ++ boolean currentIsSim = "com.android.phone".equals(currentPackageName); ++ // Do not override user selected outgoing calling account ++ // if the user has selected a third-party app as default ++ boolean shouldKeepOutgoingAccount = currentHandle != null && !currentIsSim; ++ ++ if (!shouldKeepOutgoingAccount) { ++ telecomManager.setUserSelectedOutgoingPhoneAccount(newHandle); ++ log("[setDefaultVoiceSubId] change to phoneAccountHandle=" + newHandle); ++ } else { ++ log("[setDefaultVoiceSubId] default phoneAccountHandle not changed."); ++ } + } + + updateDefaultSubId(); +-- +2.41.0 + From c06b6e26a20913e1549bc6df3bb9f30081e0677f Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 7 Oct 2023 19:38:33 -0400 Subject: [PATCH 03/43] [3/n] Android 14 port More required fwb patches --- ...support-glob-matching-for-properties.patch | 2 +- ...d-support-for-app-signature-spoofing.patch | 2 +- ...PackageUtils-Add-glob-matching-suppo.patch | 2 +- .../base/0004-Global-VPN-feature-1-2.patch | 2 +- ...more-FDE-methods-from-StorageManager.patch | 110 ++++++++++++++++++ ...ze-boot-animation-to-match-screen-si.patch | 46 ++++++++ ...ateForSlotIndex-in-SubscriptionManag.patch | 40 +++++++ ...CallingIdentity-variant-with-both-ex.patch | 72 ++++++++++++ 8 files changed, 272 insertions(+), 4 deletions(-) create mode 100644 frameworks/base/0005-Revert-Remove-more-FDE-methods-from-StorageManager.patch create mode 100644 frameworks/base/0006-Dynamically-resize-boot-animation-to-match-screen-si.patch create mode 100644 frameworks/base/0007-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch create mode 100644 frameworks/base/0008-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch diff --git a/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch b/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch index cea0159..bedcf73 100644 --- a/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch +++ b/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch @@ -1,7 +1,7 @@ From c25e4bfafc3b0b9f44c9cd2b9fed590299480f71 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Tue, 12 Oct 2021 21:37:22 -0400 -Subject: [PATCH 1/4] PackageParser: support glob matching for properties +Subject: [PATCH 1/8] PackageParser: support glob matching for properties Needed to make phh's vendor overlays work --- diff --git a/frameworks/base/0002-Add-support-for-app-signature-spoofing.patch b/frameworks/base/0002-Add-support-for-app-signature-spoofing.patch index d2fe6b4..e986653 100644 --- a/frameworks/base/0002-Add-support-for-app-signature-spoofing.patch +++ b/frameworks/base/0002-Add-support-for-app-signature-spoofing.patch @@ -1,7 +1,7 @@ From 540857efdf49ba24121970d2b836eb38ab7e7b32 Mon Sep 17 00:00:00 2001 From: Danny Lin Date: Sat, 16 Oct 2021 05:27:57 -0700 -Subject: [PATCH 2/4] Add support for app signature spoofing +Subject: [PATCH 2/8] Add support for app signature spoofing This is needed by microG GmsCore to pretend to be the official Google Play Services package, because client apps check the package signature diff --git a/frameworks/base/0003-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch b/frameworks/base/0003-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch index ccecbe6..4e6cc3c 100644 --- a/frameworks/base/0003-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch +++ b/frameworks/base/0003-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch @@ -1,7 +1,7 @@ From 148fe28e381f444f7d06ea611dbd82c1e1ae8573 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 2 Sep 2022 21:36:06 -0400 -Subject: [PATCH 3/4] FrameworkParsingPackageUtils: Add glob matching support +Subject: [PATCH 3/8] FrameworkParsingPackageUtils: Add glob matching support for properties This is now required in addition to the one in PackageParser in order diff --git a/frameworks/base/0004-Global-VPN-feature-1-2.patch b/frameworks/base/0004-Global-VPN-feature-1-2.patch index 173de2b..c777a2b 100644 --- a/frameworks/base/0004-Global-VPN-feature-1-2.patch +++ b/frameworks/base/0004-Global-VPN-feature-1-2.patch @@ -1,7 +1,7 @@ From 00b72ce36c74f294e9823a41c0f50f73d435b1dd Mon Sep 17 00:00:00 2001 From: Oliver Scott Date: Thu, 8 Jul 2021 10:41:43 -0400 -Subject: [PATCH 4/4] Global VPN feature [1/2] +Subject: [PATCH 4/8] Global VPN feature [1/2] * Modify existing VPN user range functions to conditionally have traffic from all users pass through the global VPN. diff --git a/frameworks/base/0005-Revert-Remove-more-FDE-methods-from-StorageManager.patch b/frameworks/base/0005-Revert-Remove-more-FDE-methods-from-StorageManager.patch new file mode 100644 index 0000000..8f664c6 --- /dev/null +++ b/frameworks/base/0005-Revert-Remove-more-FDE-methods-from-StorageManager.patch @@ -0,0 +1,110 @@ +From aa7e0467d0c5c98a9de336ef8e3e635491c8395a Mon Sep 17 00:00:00 2001 +From: Andy CrossGate Yan +Date: Sat, 15 Oct 2022 09:33:56 +0000 +Subject: [PATCH 5/8] 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? + *

+@@ -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.41.0 + diff --git a/frameworks/base/0006-Dynamically-resize-boot-animation-to-match-screen-si.patch b/frameworks/base/0006-Dynamically-resize-boot-animation-to-match-screen-si.patch new file mode 100644 index 0000000..ac1b186 --- /dev/null +++ b/frameworks/base/0006-Dynamically-resize-boot-animation-to-match-screen-si.patch @@ -0,0 +1,46 @@ +From 5c0f50bd093ad8fa878b79d124942d1a5bceef00 Mon Sep 17 00:00:00 2001 +From: Pierre-Hugues Husson +Date: Mon, 20 Dec 2021 15:01:41 -0500 +Subject: [PATCH 6/8] Dynamically resize boot animation to match screen size + +Change-Id: I54e49fc6b8c670103852e212d1416e27ff976205 +--- + cmds/bootanimation/BootAnimation.cpp | 22 ++++++++++++++++++++++ + 1 file changed, 22 insertions(+) + +diff --git a/cmds/bootanimation/BootAnimation.cpp b/cmds/bootanimation/BootAnimation.cpp +index a8b6c0b70804..9c50e954cee5 100644 +--- a/cmds/bootanimation/BootAnimation.cpp ++++ b/cmds/bootanimation/BootAnimation.cpp +@@ -605,6 +605,28 @@ status_t BootAnimation::readyToRun() { + mFlingerSurface = s; + mTargetInset = -1; + ++ if ( mAnimation != nullptr ) { ++ SLOGE("Got screen size %d, animation size %d", mWidth, mAnimation->width); ++ int origWidth = mAnimation->width; ++ if ( mAnimation->width*2 < mWidth ) { ++ SLOGE("Making animation bigger"); ++ mAnimation->width *= 2; ++ mAnimation->height *= 2; ++ } else if ( mWidth < mAnimation->width ) { ++ SLOGE("Making animation smaller"); ++ mAnimation->width /= 2; ++ mAnimation->height /= 2; ++ } ++ for (Animation::Part& part : mAnimation->parts) { ++ for(auto& frame: part.frames) { ++ if(frame.trimWidth == origWidth && frame.trimX == 0 && frame.trimY == 0) { ++ frame.trimWidth = mAnimation->width; ++ frame.trimHeight = mAnimation->height; ++ } ++ } ++ } ++ } ++ + // Rotate the boot animation according to the value specified in the sysprop + // ro.bootanim.set_orientation_. Four values are supported: ORIENTATION_0, + // ORIENTATION_90, ORIENTATION_180 and ORIENTATION_270. +-- +2.41.0 + diff --git a/frameworks/base/0007-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch b/frameworks/base/0007-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch new file mode 100644 index 0000000..6a120b5 --- /dev/null +++ b/frameworks/base/0007-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch @@ -0,0 +1,40 @@ +From d2b69b92fe4f37f8bcfdd4b8e3b756e5ad253663 Mon Sep 17 00:00:00 2001 +From: Andy CrossGate Yan +Date: Wed, 2 Aug 2023 20:59:53 +0800 +Subject: [PATCH 7/8] 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.41.0 + diff --git a/frameworks/base/0008-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch b/frameworks/base/0008-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch new file mode 100644 index 0000000..ccf5495 --- /dev/null +++ b/frameworks/base/0008-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch @@ -0,0 +1,72 @@ +From 8a8a763c989ddbf886288a130a66c39a4613c515 Mon Sep 17 00:00:00 2001 +From: Andy CrossGate Yan +Date: Sat, 12 Aug 2023 20:11:17 +0800 +Subject: [PATCH 8/8] Add runWithCleanCallingIdentity variant with both + executor and return value + +This complements the fixup to ImsPhoneCallTracker (in fw/o/t) for U + +Change-Id: If444290787025e130dce4bdeaf92372ae32793fe +--- + .../telephony/util/TelephonyUtils.java | 32 ++++++++++++++++++- + 1 file changed, 31 insertions(+), 1 deletion(-) + +diff --git a/telephony/common/com/android/internal/telephony/util/TelephonyUtils.java b/telephony/common/com/android/internal/telephony/util/TelephonyUtils.java +index 9a8c9655375d..454080144d35 100644 +--- a/telephony/common/com/android/internal/telephony/util/TelephonyUtils.java ++++ b/telephony/common/com/android/internal/telephony/util/TelephonyUtils.java +@@ -42,7 +42,9 @@ import com.android.internal.telephony.ITelephony; + import java.io.PrintWriter; + import java.util.Collections; + import java.util.List; ++import java.util.concurrent.CompletableFuture; + import java.util.concurrent.CountDownLatch; ++import java.util.concurrent.ExecutionException; + import java.util.concurrent.Executor; + import java.util.concurrent.TimeUnit; + import java.util.function.Supplier; +@@ -151,6 +153,34 @@ public final class TelephonyUtils { + } + } + ++ /** ++ * Convenience method for running the provided action in the provided ++ * executor enclosed in ++ * {@link Binder#clearCallingIdentity}/{@link Binder#restoreCallingIdentity} and return ++ * the result. ++ * ++ * Any exception thrown by the given action will need to be handled by caller. ++ * ++ */ ++ public static T runWithCleanCallingIdentity( ++ @NonNull Supplier action, @NonNull Executor executor) { ++ if (action != null) { ++ if (executor != null) { ++ try { ++ return CompletableFuture.supplyAsync( ++ () -> runWithCleanCallingIdentity(action), executor).get(); ++ } catch (ExecutionException | InterruptedException e) { ++ Log.w(LOG_TAG, "TelephonyUtils : runWithCleanCallingIdentity exception: " ++ + e.getMessage()); ++ return null; ++ } ++ } else { ++ return runWithCleanCallingIdentity(action); ++ } ++ } ++ return null; ++ } ++ + /** + * Filter values in bundle to only basic types. + */ +@@ -319,4 +349,4 @@ public final class TelephonyUtils { + return false; + + } +-} +\ No newline at end of file ++} +-- +2.41.0 + From c4daf7d00466a059e8e84e66a365c90809f2503d Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 7 Oct 2023 20:22:56 -0400 Subject: [PATCH 04/43] [4/n] Android 14 port Refresh Bluetooth patches --- ...ck-le_set_event_mask-command-resturn.patch | 57 ------------------- ...hci-Ignore-unexpected-status-events.patch} | 20 +++---- ...interface-Optionally-use-sysbta-HAL.patch} | 12 ++-- 3 files changed, 16 insertions(+), 73 deletions(-) delete mode 100644 packages/modules/Bluetooth/0001-Additionally-check-le_set_event_mask-command-resturn.patch rename packages/modules/Bluetooth/{0002-gd-hci-Ignore-unexpected-status-events.patch => 0001-gd-hci-Ignore-unexpected-status-events.patch} (72%) rename packages/modules/Bluetooth/{0003-audio_hal_interface-Optionally-use-sysbta-HAL.patch => 0002-audio_hal_interface-Optionally-use-sysbta-HAL.patch} (94%) diff --git a/packages/modules/Bluetooth/0001-Additionally-check-le_set_event_mask-command-resturn.patch b/packages/modules/Bluetooth/0001-Additionally-check-le_set_event_mask-command-resturn.patch deleted file mode 100644 index 5d8eb45..0000000 --- a/packages/modules/Bluetooth/0001-Additionally-check-le_set_event_mask-command-resturn.patch +++ /dev/null @@ -1,57 +0,0 @@ -From 08cae5289428f6a99f2a6d28145fa542d1288916 Mon Sep 17 00:00:00 2001 -From: "tzu-hsien.huang" -Date: Wed, 20 Jul 2022 15:12:01 +0800 -Subject: [PATCH 1/3] Additionally check le_set_event_mask command resturn - status with UNSUPPORTED_LMP_OR_LL_PARAMETER -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -In GD BT stack, stack will check each return status of HCI Commands. E.g. reset , le_set_event_mask, set_event_mask …etc. -In BT spec 5.2, SIG add some parameters for le_set_event_mask for le audio, like LE Terminate BIG Complete event: Supported. -However, some legacy chips do not support LE Audio feature, and controller will return Status: Unsupported LMP Parameter Value when it receives this HCI Command -When it checks the return value and find the status is not SUCCESS, it will cause FAIL and cannot be compatible with old legacy chip. -After brushing GSI, Bluetooth will turn off automatically when it is turned on. -So all CTS test will always fail. - -Check le_set_event_mask command return status with SUCCESS or UNSUPPORTED_LMP_OR_LL_PARAMETER - -Bug: 239662211 -Test: CtsBluetoothTestCases -Change-Id: I2b0cede7f47eecd2124a386e958773289eb6f11c ---- - system/gd/hci/controller.cc | 11 ++++++++++- - 1 file changed, 10 insertions(+), 1 deletion(-) - -diff --git a/system/gd/hci/controller.cc b/system/gd/hci/controller.cc -index 9dac2b6a84..50342d639e 100644 ---- a/system/gd/hci/controller.cc -+++ b/system/gd/hci/controller.cc -@@ -548,7 +548,7 @@ struct Controller::impl { - void le_set_event_mask(uint64_t le_event_mask) { - std::unique_ptr packet = LeSetEventMaskBuilder::Create(le_event_mask); - hci_->EnqueueCommand(std::move(packet), module_.GetHandler()->BindOnceOn( -- this, &Controller::impl::check_status)); -+ this, &Controller::impl::check_event_mask_status)); - } - - template -@@ -559,6 +559,15 @@ struct Controller::impl { - ASSERT(status_view.GetStatus() == ErrorCode::SUCCESS); - } - -+ template -+ void check_event_mask_status(CommandCompleteView view) { -+ ASSERT(view.IsValid()); -+ auto status_view = T::Create(view); -+ ASSERT(status_view.IsValid()); -+ ASSERT(status_view.GetStatus() == ErrorCode::SUCCESS || -+ status_view.GetStatus() == ErrorCode::UNSUPPORTED_LMP_OR_LL_PARAMETER); -+ } -+ - #define OP_CODE_MAPPING(name) \ - case OpCode::name: { \ - uint16_t index = (uint16_t)OpCodeIndex::name; \ --- -2.40.1 - diff --git a/packages/modules/Bluetooth/0002-gd-hci-Ignore-unexpected-status-events.patch b/packages/modules/Bluetooth/0001-gd-hci-Ignore-unexpected-status-events.patch similarity index 72% rename from packages/modules/Bluetooth/0002-gd-hci-Ignore-unexpected-status-events.patch rename to packages/modules/Bluetooth/0001-gd-hci-Ignore-unexpected-status-events.patch index 319c7f4..214a703 100644 --- a/packages/modules/Bluetooth/0002-gd-hci-Ignore-unexpected-status-events.patch +++ b/packages/modules/Bluetooth/0001-gd-hci-Ignore-unexpected-status-events.patch @@ -1,7 +1,7 @@ -From 55a4e7e7158f50f3e8840b526e15d7c9f10423de Mon Sep 17 00:00:00 2001 +From 184dbd4770340934511622b0bac58eb45d0cb905 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 24 Aug 2022 10:41:29 -0400 -Subject: [PATCH 2/3] gd: hci: Ignore unexpected status events +Subject: [PATCH 1/2] gd: hci: Ignore unexpected status events For some reason, on some old devices, the controller will report a remote to support SNIFF_SUBRATING even when it does not. Just ignore the @@ -13,12 +13,12 @@ Change-Id: Ifb9a65fd77f21d15a8dc1ced9240194d38218ef6 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/system/gd/hci/hci_layer.cc b/system/gd/hci/hci_layer.cc -index 5def729ac8..9c235294bb 100644 +index c3312a557c..3e8ab78371 100644 --- a/system/gd/hci/hci_layer.cc +++ b/system/gd/hci/hci_layer.cc -@@ -195,14 +195,13 @@ struct HciLayer::impl { - EventView::Create(PacketView(std::make_shared>(std::vector())))); - command_queue_.front().GetCallback()->Invoke(move(command_complete_view)); +@@ -211,14 +211,13 @@ struct HciLayer::impl { + command_queue_.front().GetCallback()->Invoke( + std::move(command_complete_view)); } else { - ASSERT_LOG( - command_queue_.front().waiting_for_status_ == is_status, @@ -27,17 +27,17 @@ index 5def729ac8..9c235294bb 100644 - OpCodeText(op_code).c_str(), - logging_id.c_str()); - -- command_queue_.front().GetCallback()->Invoke(move(response_view)); +- command_queue_.front().GetCallback()->Invoke(std::move(response_view)); + if (command_queue_.front().waiting_for_status_ == is_status) { -+ command_queue_.front().GetCallback()->Invoke(move(response_view)); ++ command_queue_.front().GetCallback()->Invoke(std::move(response_view)); + } else { + CommandCompleteView command_complete_view = CommandCompleteView::Create( + EventView::Create(PacketView(std::make_shared>(std::vector())))); -+ command_queue_.front().GetCallback()->Invoke(move(command_complete_view)); ++ command_queue_.front().GetCallback()->Invoke(std::move(command_complete_view)); + } } command_queue_.pop_front(); -- -2.40.1 +2.41.0 diff --git a/packages/modules/Bluetooth/0003-audio_hal_interface-Optionally-use-sysbta-HAL.patch b/packages/modules/Bluetooth/0002-audio_hal_interface-Optionally-use-sysbta-HAL.patch similarity index 94% rename from packages/modules/Bluetooth/0003-audio_hal_interface-Optionally-use-sysbta-HAL.patch rename to packages/modules/Bluetooth/0002-audio_hal_interface-Optionally-use-sysbta-HAL.patch index 0dca5de..57ca3c3 100644 --- a/packages/modules/Bluetooth/0003-audio_hal_interface-Optionally-use-sysbta-HAL.patch +++ b/packages/modules/Bluetooth/0002-audio_hal_interface-Optionally-use-sysbta-HAL.patch @@ -1,7 +1,7 @@ -From f2d820597f4dcbb08e4e0c9026dc1d56fe7b3bfd Mon Sep 17 00:00:00 2001 +From 9524502060facedcba0682c61b4b94340d082f36 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 24 Aug 2022 15:45:18 -0400 -Subject: [PATCH 3/3] audio_hal_interface: Optionally use sysbta HAL +Subject: [PATCH 2/2] audio_hal_interface: Optionally use sysbta HAL Required to support sysbta, our system-side bt audio implementation. @@ -13,7 +13,7 @@ Change-Id: I59973e6ec84c5923be8a7c67b36b2e237f000860 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/system/audio_hal_interface/aidl/client_interface_aidl.cc b/system/audio_hal_interface/aidl/client_interface_aidl.cc -index 9af28031f7..5a9dbbccad 100644 +index 897b891aa7..660a141894 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( @@ -44,7 +44,7 @@ index 9af28031f7..5a9dbbccad 100644 if (provider_factory == nullptr) { LOG(ERROR) << __func__ << ", can't get capability 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 17abefe8fe..07dd11266f 100644 +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 @@ @@ -55,7 +55,7 @@ index 17abefe8fe..07dd11266f 100644 #define BLUETOOTH_AUDIO_HAL_PROP_DISABLED \ "persist.bluetooth.bluetooth_audio_hal.disabled" -@@ -117,6 +118,12 @@ class BluetoothAudioClientInterface { +@@ -119,6 +120,12 @@ class BluetoothAudioClientInterface { // "android.hardware.bluetooth.audio.IBluetoothAudioProviderFactory/default"; static inline const std::string kDefaultAudioProviderFactoryInterface = std::string() + IBluetoothAudioProviderFactory::descriptor + "/default"; @@ -103,5 +103,5 @@ index a2c192f37d..c3d1cf35c2 100644 return; } -- -2.40.1 +2.41.0 From ccca70ec25a27a235d0ac8954d4758d060e52ba5 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 7 Oct 2023 23:19:37 -0400 Subject: [PATCH 05/43] Fixup sysbta for Android 14 --- ...al_interface-Optionally-use-sysbta-HAL.patch | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/packages/modules/Bluetooth/0002-audio_hal_interface-Optionally-use-sysbta-HAL.patch b/packages/modules/Bluetooth/0002-audio_hal_interface-Optionally-use-sysbta-HAL.patch index 57ca3c3..f5032de 100644 --- a/packages/modules/Bluetooth/0002-audio_hal_interface-Optionally-use-sysbta-HAL.patch +++ b/packages/modules/Bluetooth/0002-audio_hal_interface-Optionally-use-sysbta-HAL.patch @@ -1,4 +1,4 @@ -From 9524502060facedcba0682c61b4b94340d082f36 Mon Sep 17 00:00:00 2001 +From a105602829eba6d179d3bfd4f117f2169f724b91 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 24 Aug 2022 15:45:18 -0400 Subject: [PATCH 2/2] audio_hal_interface: Optionally use sysbta HAL @@ -7,13 +7,13 @@ Required to support sysbta, our system-side bt audio implementation. Change-Id: I59973e6ec84c5923be8a7c67b36b2e237f000860 --- - system/audio_hal_interface/aidl/client_interface_aidl.cc | 6 +++--- + 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, 18 insertions(+), 4 deletions(-) + 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..660a141894 100644 +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( @@ -43,6 +43,15 @@ index 897b891aa7..660a141894 100644 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 From 4b704639a2685f3f73714781b1ad998827643455 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sun, 8 Oct 2023 10:39:23 -0400 Subject: [PATCH 06/43] Add patch for qcom voip_rx pitch issue --- ...orce-load-audio-policy-for-system-si.patch | 2 +- ...2DP-audio-ports-from-the-primary-HAL.patch | 2 +- ...gh-pitched-voice-on-Qualcomm-devices.patch | 56 +++++++++++++++++++ 3 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 frameworks/av/0003-voip-Fix-high-pitched-voice-on-Qualcomm-devices.patch diff --git a/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch b/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch index 334fb3b..a0a77cf 100644 --- a/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch +++ b/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch @@ -1,7 +1,7 @@ From f8b9cb1d3cdf0274414bb7d100844d2707999558 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 24 Aug 2022 15:42:39 -0400 -Subject: [PATCH 1/2] APM: Optionally force-load audio policy for system-side +Subject: [PATCH 1/3] APM: Optionally force-load audio policy for system-side bt audio HAL Required to support our system-side bt audio implementation, i.e. diff --git a/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch b/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch index aa0b992..a20824d 100644 --- a/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch +++ b/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch @@ -1,7 +1,7 @@ From d60a1b5fc58a7cc84b48c554cb2cffaeff14d86e Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 25 Aug 2022 13:30:29 -0400 -Subject: [PATCH 2/2] APM: Remove A2DP audio ports from the primary HAL +Subject: [PATCH 2/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 diff --git a/frameworks/av/0003-voip-Fix-high-pitched-voice-on-Qualcomm-devices.patch b/frameworks/av/0003-voip-Fix-high-pitched-voice-on-Qualcomm-devices.patch new file mode 100644 index 0000000..2021695 --- /dev/null +++ b/frameworks/av/0003-voip-Fix-high-pitched-voice-on-Qualcomm-devices.patch @@ -0,0 +1,56 @@ +From aa1f3595b06e6d3d7027a5dd40ae183d71d032f0 Mon Sep 17 00:00:00 2001 +From: ponces +Date: Mon, 24 Oct 2022 09:38:34 +0100 +Subject: [PATCH 3/3] voip: Fix high pitched voice on Qualcomm devices + +Change-Id: I6d314912169776b76d07d8c0301ec5249c1870a2 +--- + .../common/managerdefinitions/src/Serializer.cpp | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +diff --git a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp +index 8519cfdc04..d23d55677d 100644 +--- a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp ++++ b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp +@@ -252,6 +252,7 @@ private: + std::string mChannelMasksSeparator = ","; + std::string mSamplingRatesSeparator = ","; + std::string mFlagsSeparator = "|"; ++ std::string mMixPortName = ""; + + // Children: ModulesTraits, VolumeTraits, SurroundSoundTraits (optional) + }; +@@ -426,13 +427,21 @@ PolicySerializer::deserialize( + std::string samplingRates = getXmlAttribute(cur, Attributes::samplingRates); + std::string format = getXmlAttribute(cur, Attributes::format); + std::string channels = getXmlAttribute(cur, Attributes::channelMasks); ++ ChannelTraits::Collection channelsMask = channelMasksFromString(channels, mChannelMasksSeparator.c_str()); ++ ++ // This breaks in-game voice chat and audio in some messaging apps causing it to play with a higher pitch and speed ++ bool disableStereoVoip = property_get_bool("persist.sys.phh.disable_stereo_voip", false); ++ if (disableStereoVoip && mMixPortName == "voip_rx") { ++ ALOGI("%s: disabling stereo support on voip_rx", __func__); ++ channelsMask = channelMasksFromString("AUDIO_CHANNEL_OUT_MONO", ","); ++ } + + if (mIgnoreVendorExtensions && maybeVendorExtension(format)) { + ALOGI("%s: vendor extension format \"%s\" skipped", __func__, format.c_str()); + return NO_INIT; + } + AudioProfileTraits::Element profile = new AudioProfile(formatFromString(format, gDynamicFormat), +- channelMasksFromString(channels, mChannelMasksSeparator.c_str()), ++ channelsMask, + samplingRatesFromString(samplingRates, mSamplingRatesSeparator.c_str())); + + profile->setDynamicFormat(profile->getFormat() == gDynamicFormat); +@@ -449,6 +458,7 @@ std::variant PolicySerializer::deserialize Date: Sun, 8 Oct 2023 10:42:20 -0400 Subject: [PATCH 07/43] frameworks/av: Include more forward-ports from TD --- ...orce-load-audio-policy-for-system-si.patch | 2 +- ...2DP-audio-ports-from-the-primary-HAL.patch | 2 +- ...gh-pitched-voice-on-Qualcomm-devices.patch | 2 +- ...and-Q-behavior-respectively-for-tele.patch | 326 ++++++++++++++++++ .../0005-Fix-BT-in-call-on-CAF-devices.patch | 131 +++++++ 5 files changed, 460 insertions(+), 3 deletions(-) create mode 100644 frameworks/av/0004-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch create mode 100644 frameworks/av/0005-Fix-BT-in-call-on-CAF-devices.patch diff --git a/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch b/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch index a0a77cf..25c41ad 100644 --- a/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch +++ b/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch @@ -1,7 +1,7 @@ From f8b9cb1d3cdf0274414bb7d100844d2707999558 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 24 Aug 2022 15:42:39 -0400 -Subject: [PATCH 1/3] APM: Optionally force-load audio policy for system-side +Subject: [PATCH 1/5] APM: Optionally force-load audio policy for system-side bt audio HAL Required to support our system-side bt audio implementation, i.e. diff --git a/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch b/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch index a20824d..3da3764 100644 --- a/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch +++ b/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch @@ -1,7 +1,7 @@ From d60a1b5fc58a7cc84b48c554cb2cffaeff14d86e Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 25 Aug 2022 13:30:29 -0400 -Subject: [PATCH 2/3] APM: Remove A2DP audio ports from the primary HAL +Subject: [PATCH 2/5] 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 diff --git a/frameworks/av/0003-voip-Fix-high-pitched-voice-on-Qualcomm-devices.patch b/frameworks/av/0003-voip-Fix-high-pitched-voice-on-Qualcomm-devices.patch index 2021695..ac07cfd 100644 --- a/frameworks/av/0003-voip-Fix-high-pitched-voice-on-Qualcomm-devices.patch +++ b/frameworks/av/0003-voip-Fix-high-pitched-voice-on-Qualcomm-devices.patch @@ -1,7 +1,7 @@ From aa1f3595b06e6d3d7027a5dd40ae183d71d032f0 Mon Sep 17 00:00:00 2001 From: ponces Date: Mon, 24 Oct 2022 09:38:34 +0100 -Subject: [PATCH 3/3] voip: Fix high pitched voice on Qualcomm devices +Subject: [PATCH 3/5] voip: Fix high pitched voice on Qualcomm devices Change-Id: I6d314912169776b76d07d8c0301ec5249c1870a2 --- diff --git a/frameworks/av/0004-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch b/frameworks/av/0004-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch new file mode 100644 index 0000000..ad766d2 --- /dev/null +++ b/frameworks/av/0004-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch @@ -0,0 +1,326 @@ +From 1a9a9faca4d5c28747a3b7d9843b67c641ed91c9 Mon Sep 17 00:00:00 2001 +From: Peter Cai +Date: Thu, 18 Aug 2022 15:44:46 -0400 +Subject: [PATCH 4/5] 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 AudioPolicyManager::createTelephonyPatch( ++ bool isRx, const sp &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& devDesc, const char *moduleId) const { + sp 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 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 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 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 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 mCallTxPatch; ++ sp mCallRxPatch; ++ + HwAudioOutputCollection mHwOutputs; + SourceClientCollection mAudioSources; + +-- +2.41.0 + diff --git a/frameworks/av/0005-Fix-BT-in-call-on-CAF-devices.patch b/frameworks/av/0005-Fix-BT-in-call-on-CAF-devices.patch new file mode 100644 index 0000000..04a2722 --- /dev/null +++ b/frameworks/av/0005-Fix-BT-in-call-on-CAF-devices.patch @@ -0,0 +1,131 @@ +From 97421e35dd716c9b07ec44ec05265944efc96294 Mon Sep 17 00:00:00 2001 +From: Pierre-Hugues Husson +Date: Mon, 5 Aug 2019 18:09:50 +0200 +Subject: [PATCH 5/5] Fix BT in-call on CAF devices + +See https://github.com/phhusson/treble_experimentations/issues/374 + +In Qualcomm's BSP audio_policy_configuration.xml, one route is missing, +from primary output and telephony to BT SCO. + +Add it if we detect telephony and bt sco, but no such route. + +Change-Id: Ifea0f88276ec9a0811f3cb1973c4b06f2c82077b +--- + .../managerdefinitions/src/Serializer.cpp | 93 +++++++++++++++++++ + 1 file changed, 93 insertions(+) + +diff --git a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp +index d23d55677d..4f896111cb 100644 +--- a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp ++++ b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp +@@ -672,6 +672,98 @@ std::variant PolicySerializer::deserialize primary input mix ++ // But Telephony Rx => BT SCO Headset route is missing ++ // When we detect such case, add the missing route ++ ++ // If we have: ++ // ++ // ++ // ++ // And no ++ ++ // Add: ++ // ++ bool foundBtScoHeadsetDevice = false; ++ for(const auto& device: devicePorts) { ++ if(device->getTagName() == "BT SCO Headset") { ++ foundBtScoHeadsetDevice = true; ++ break; ++ } ++ } ++ if(!foundBtScoHeadsetDevice) { ++ ALOGE("No BT SCO Headset device found, don't patch policy"); ++ return; ++ } ++ ++ bool foundTelephony = false; ++ bool foundBtScoInput = false; ++ bool foundScoHeadsetRoute = false; ++ for(const auto& route: routes) { ++ ALOGE("Looking at route %d\n", route->getType()); ++ if(route->getType() != AUDIO_ROUTE_MIX) ++ continue; ++ auto sink = route->getSink(); ++ ALOGE("... With sink %s\n", sink->getTagName().c_str()); ++ if(sink->getTagName() == "Telephony Tx") { ++ foundTelephony = true; ++ continue; ++ } ++ if(sink->getTagName() == "BT SCO Headset") { ++ foundScoHeadsetRoute = true; ++ break; ++ } ++ for(const auto& source: route->getSources()) { ++ ALOGE("... With source %s\n", source->getTagName().c_str()); ++ if(source->getTagName() == "BT SCO Headset Mic") { ++ foundBtScoInput = true; ++ break; ++ } ++ } ++ } ++ //The route we want to add is already there ++ ALOGE("Done looking for existing routes"); ++ if(foundScoHeadsetRoute) ++ return; ++ ++ ALOGE("No existing route found... %d %d", foundTelephony ? 1 : 0, foundBtScoInput ? 1 : 0); ++ //We couldn't find the routes we assume are required for the function we want to add ++ if(!foundTelephony || !foundBtScoInput) ++ return; ++ ALOGE("Adding our own."); ++ ++ // Add: ++ // ++ AudioRoute *newRoute = new AudioRoute(AUDIO_ROUTE_MIX); ++ ++ auto sink = ctx->findPortByTagName("BT SCO Headset"); ++ ALOGE("Got sink %p\n", sink.get()); ++ newRoute->setSink(sink); ++ ++ Vector> sources; ++ for(const auto& sourceName: { ++ "primary output", ++ "deep_buffer", ++ "compressed_offload", ++ "Telephony Rx" ++ }) { ++ auto source = ctx->findPortByTagName(sourceName); ++ ALOGE("Got source %p\n", source.get()); ++ if (source.get() != nullptr) { ++ sources.add(source); ++ source->addRoute(newRoute); ++ } ++ } ++ ++ newRoute->setSources(sources); ++ ++ sink->addRoute(newRoute); ++ ++ auto ret = routes.add(newRoute); ++ ALOGE("route add returned %zd", ret); ++} ++ + template<> + std::variant PolicySerializer::deserialize( + const xmlNode *cur, ModuleTraits::PtrSerializingCtx ctx) +@@ -739,6 +831,7 @@ std::variant PolicySerializer::deserializesetRoutes(routes); + + for (const xmlNode *children = cur->xmlChildrenNode; children != NULL; +-- +2.41.0 + From 87b06501bc8403e4204fb80ef98f704a30e9255e Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sun, 8 Oct 2023 10:50:51 -0400 Subject: [PATCH 08/43] [5/n] Android 14 port --- ...001-Expose-themed-icon-setting-in-ThemePicker.patch | 4 ++-- ...02-Properly-expose-GridCustomizationsProvider.patch | 6 +++--- .../0003-Fix-all-apps-header-color-in-dark-mode.patch | 10 +++++----- .../Launcher3/0004-Disable-QSB-in-BuildConfig.patch | 4 ++-- .../0001-Add-wallpaper-privapp-whitelist.patch | 8 ++++---- .../0002-Override-legacy-WallpaperPicker-app.patch | 8 ++++---- .../0003-Add-wallpaper-default-permissions.patch | 10 +++++----- ...4-Specify-we-read-and-write-launcher-settings.patch | 4 ++-- ...Add-permission-for-launcher-preview-rendering.patch | 4 ++-- 9 files changed, 29 insertions(+), 29 deletions(-) diff --git a/packages/apps/Launcher3/0001-Expose-themed-icon-setting-in-ThemePicker.patch b/packages/apps/Launcher3/0001-Expose-themed-icon-setting-in-ThemePicker.patch index c93a740..021c20b 100644 --- a/packages/apps/Launcher3/0001-Expose-themed-icon-setting-in-ThemePicker.patch +++ b/packages/apps/Launcher3/0001-Expose-themed-icon-setting-in-ThemePicker.patch @@ -1,4 +1,4 @@ -From 8cd54396bbf29cc977497b53c1464a80aea69825 Mon Sep 17 00:00:00 2001 +From ca78711f5e5f3d23d11955f1f7368a3b4297ba40 Mon Sep 17 00:00:00 2001 From: Danny Lin Date: Mon, 11 Oct 2021 20:48:44 -0700 Subject: [PATCH 1/4] Expose themed icon setting in ThemePicker @@ -38,5 +38,5 @@ index 7d7054f5a5..d2955c4327 100644 -- -2.40.1 +2.41.0 diff --git a/packages/apps/Launcher3/0002-Properly-expose-GridCustomizationsProvider.patch b/packages/apps/Launcher3/0002-Properly-expose-GridCustomizationsProvider.patch index a67fa4c..7fc75a2 100644 --- a/packages/apps/Launcher3/0002-Properly-expose-GridCustomizationsProvider.patch +++ b/packages/apps/Launcher3/0002-Properly-expose-GridCustomizationsProvider.patch @@ -1,4 +1,4 @@ -From 0d97b73a079dd81b0dd8c0bb512a926d37f76cf9 Mon Sep 17 00:00:00 2001 +From 2e42cd9a638142a055e3ce55cfe767ff21e44cad Mon Sep 17 00:00:00 2001 From: Luca Stefani Date: Fri, 1 Nov 2019 23:17:59 +0100 Subject: [PATCH 2/4] Properly expose GridCustomizationsProvider @@ -9,7 +9,7 @@ Change-Id: I8268a215257ae0e399c56ac8b44cdfdff8cc92a0 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/AndroidManifest-common.xml b/AndroidManifest-common.xml -index 0c7b48fe66..1fe86ad022 100644 +index 14605d8053..89ebe026f9 100644 --- a/AndroidManifest-common.xml +++ b/AndroidManifest-common.xml @@ -137,7 +137,9 @@ @@ -24,5 +24,5 @@ index 0c7b48fe66..1fe86ad022 100644 - QR code isn\u0027t a valid format +@@ -12129,4 +12129,10 @@ + + "This app can only be opened in 1 window" ++ + + Global VPN + Force all traffic on the device through this VPN, including work profile and other users. @@ -29,12 +30,12 @@ index 28b35b3fcf..29ca3882e9 100644 + You need to disable all active VPN connections first to enable this diff --git a/res/xml/vpn_app_management.xml b/res/xml/vpn_app_management.xml -index adc441d846..e00f23ccfa 100644 +index dffbbbe311..93df378fd7 100644 --- a/res/xml/vpn_app_management.xml +++ b/res/xml/vpn_app_management.xml -@@ -31,6 +31,12 @@ +@@ -23,6 +23,12 @@ + android:key="version" android:selectable="false"/> - --> + + Date: Sat, 14 Oct 2023 15:50:39 -0400 Subject: [PATCH 10/43] fw/b: Add patch for proper upgrades --- ...support-glob-matching-for-properties.patch | 4 +- ...d-support-for-app-signature-spoofing.patch | 4 +- ...PackageUtils-Add-glob-matching-suppo.patch | 4 +- .../base/0004-Global-VPN-feature-1-2.patch | 4 +- ...more-FDE-methods-from-StorageManager.patch | 4 +- ...ze-boot-animation-to-match-screen-si.patch | 4 +- ...ateForSlotIndex-in-SubscriptionManag.patch | 4 +- ...CallingIdentity-variant-with-both-ex.patch | 4 +- ...d.version.incremental-to-signal-OTA-.patch | 239 ++++++++++++++++++ 9 files changed, 255 insertions(+), 16 deletions(-) create mode 100644 frameworks/base/0009-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch diff --git a/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch b/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch index bedcf73..c880193 100644 --- a/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch +++ b/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch @@ -1,7 +1,7 @@ -From c25e4bfafc3b0b9f44c9cd2b9fed590299480f71 Mon Sep 17 00:00:00 2001 +From 68cd896eee1f2b1ba313b82d7fa466333fd6f157 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Tue, 12 Oct 2021 21:37:22 -0400 -Subject: [PATCH 1/8] PackageParser: support glob matching for properties +Subject: [PATCH 1/9] PackageParser: support glob matching for properties Needed to make phh's vendor overlays work --- diff --git a/frameworks/base/0002-Add-support-for-app-signature-spoofing.patch b/frameworks/base/0002-Add-support-for-app-signature-spoofing.patch index e986653..9df9ac7 100644 --- a/frameworks/base/0002-Add-support-for-app-signature-spoofing.patch +++ b/frameworks/base/0002-Add-support-for-app-signature-spoofing.patch @@ -1,7 +1,7 @@ -From 540857efdf49ba24121970d2b836eb38ab7e7b32 Mon Sep 17 00:00:00 2001 +From 2f4174b9b2e8f23fb893a74f1cf7649714ea7758 Mon Sep 17 00:00:00 2001 From: Danny Lin Date: Sat, 16 Oct 2021 05:27:57 -0700 -Subject: [PATCH 2/8] Add support for app signature spoofing +Subject: [PATCH 2/9] Add support for app signature spoofing This is needed by microG GmsCore to pretend to be the official Google Play Services package, because client apps check the package signature diff --git a/frameworks/base/0003-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch b/frameworks/base/0003-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch index 4e6cc3c..6f7258d 100644 --- a/frameworks/base/0003-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch +++ b/frameworks/base/0003-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch @@ -1,7 +1,7 @@ -From 148fe28e381f444f7d06ea611dbd82c1e1ae8573 Mon Sep 17 00:00:00 2001 +From 5d662f5b7e2410564d76b8424957707203ec52b6 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 2 Sep 2022 21:36:06 -0400 -Subject: [PATCH 3/8] FrameworkParsingPackageUtils: Add glob matching support +Subject: [PATCH 3/9] FrameworkParsingPackageUtils: Add glob matching support for properties This is now required in addition to the one in PackageParser in order diff --git a/frameworks/base/0004-Global-VPN-feature-1-2.patch b/frameworks/base/0004-Global-VPN-feature-1-2.patch index c777a2b..8cd13b1 100644 --- a/frameworks/base/0004-Global-VPN-feature-1-2.patch +++ b/frameworks/base/0004-Global-VPN-feature-1-2.patch @@ -1,7 +1,7 @@ -From 00b72ce36c74f294e9823a41c0f50f73d435b1dd Mon Sep 17 00:00:00 2001 +From a7bc80200ad51943936eae7db443913c9a0cd6dc Mon Sep 17 00:00:00 2001 From: Oliver Scott Date: Thu, 8 Jul 2021 10:41:43 -0400 -Subject: [PATCH 4/8] Global VPN feature [1/2] +Subject: [PATCH 4/9] Global VPN feature [1/2] * Modify existing VPN user range functions to conditionally have traffic from all users pass through the global VPN. diff --git a/frameworks/base/0005-Revert-Remove-more-FDE-methods-from-StorageManager.patch b/frameworks/base/0005-Revert-Remove-more-FDE-methods-from-StorageManager.patch index 8f664c6..bcd25ae 100644 --- a/frameworks/base/0005-Revert-Remove-more-FDE-methods-from-StorageManager.patch +++ b/frameworks/base/0005-Revert-Remove-more-FDE-methods-from-StorageManager.patch @@ -1,7 +1,7 @@ -From aa7e0467d0c5c98a9de336ef8e3e635491c8395a Mon Sep 17 00:00:00 2001 +From d83831158f32f782a856e37cc23bd7fcc0f293ca Mon Sep 17 00:00:00 2001 From: Andy CrossGate Yan Date: Sat, 15 Oct 2022 09:33:56 +0000 -Subject: [PATCH 5/8] Revert "Remove more FDE methods from StorageManager" +Subject: [PATCH 5/9] Revert "Remove more FDE methods from StorageManager" This reverts commit bd13f84152449a3ead6fa8604fd31f48c0224676. diff --git a/frameworks/base/0006-Dynamically-resize-boot-animation-to-match-screen-si.patch b/frameworks/base/0006-Dynamically-resize-boot-animation-to-match-screen-si.patch index ac1b186..f21eb9b 100644 --- a/frameworks/base/0006-Dynamically-resize-boot-animation-to-match-screen-si.patch +++ b/frameworks/base/0006-Dynamically-resize-boot-animation-to-match-screen-si.patch @@ -1,7 +1,7 @@ -From 5c0f50bd093ad8fa878b79d124942d1a5bceef00 Mon Sep 17 00:00:00 2001 +From a4fa97491d1b55e49e29af49eae58f03e42eb642 Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Mon, 20 Dec 2021 15:01:41 -0500 -Subject: [PATCH 6/8] Dynamically resize boot animation to match screen size +Subject: [PATCH 6/9] Dynamically resize boot animation to match screen size Change-Id: I54e49fc6b8c670103852e212d1416e27ff976205 --- diff --git a/frameworks/base/0007-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch b/frameworks/base/0007-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch index 6a120b5..b1752ab 100644 --- a/frameworks/base/0007-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch +++ b/frameworks/base/0007-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch @@ -1,7 +1,7 @@ -From d2b69b92fe4f37f8bcfdd4b8e3b756e5ad253663 Mon Sep 17 00:00:00 2001 +From 407e57ccb7dcf4fdd4c260c6e6b5972abc9177e7 Mon Sep 17 00:00:00 2001 From: Andy CrossGate Yan Date: Wed, 2 Aug 2023 20:59:53 +0800 -Subject: [PATCH 7/8] Restore getSimStateForSlotIndex in SubscriptionManager +Subject: [PATCH 7/9] Restore getSimStateForSlotIndex in SubscriptionManager MTK IMS still needs it here diff --git a/frameworks/base/0008-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch b/frameworks/base/0008-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch index ccf5495..dcee571 100644 --- a/frameworks/base/0008-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch +++ b/frameworks/base/0008-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch @@ -1,7 +1,7 @@ -From 8a8a763c989ddbf886288a130a66c39a4613c515 Mon Sep 17 00:00:00 2001 +From 989c6bc643e6e3b6ffd47d15267433b70faa6141 Mon Sep 17 00:00:00 2001 From: Andy CrossGate Yan Date: Sat, 12 Aug 2023 20:11:17 +0800 -Subject: [PATCH 8/8] Add runWithCleanCallingIdentity variant with both +Subject: [PATCH 8/9] Add runWithCleanCallingIdentity variant with both executor and return value This complements the fixup to ImsPhoneCallTracker (in fw/o/t) for U diff --git a/frameworks/base/0009-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch b/frameworks/base/0009-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch new file mode 100644 index 0000000..e0935a0 --- /dev/null +++ b/frameworks/base/0009-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch @@ -0,0 +1,239 @@ +From c9d2c616f979b05ef609e5b8e890471b7b246beb Mon Sep 17 00:00:00 2001 +From: dhacker29 +Date: Tue, 24 Nov 2015 01:53:47 -0500 +Subject: [PATCH 9/9] fw/b: Use ro.build.version.incremental to signal OTA + upgrades + +Squash of: + +Author: dhacker29 +Date: Tue Nov 24 01:53:47 2015 -0500 + Core: Use ro.build.date to signal mIsUpgrade + + M: We use a static fingerprint that is only changed when a new OEM build is released, so + every flash shows Android is starting instead of upgrading. This will fix that. + N: even though we dont have the dexopt sceen on N, this is still needed to delete the + correct caches, and grant/deny specific runtime permissions like a true oem update + would do. + Updated for Nougat By: BeansTown106 + + Change-Id: I0e3ed5c8f0351e48944432ae6a0c5194ddeff1fa + +Author: Sam Mortimer +Date: Fri Sep 28 13:45:00 2018 -0700 + fw/b UserManagerService: Use ro.build.date to signal upgrades + + *) We changed PackageManagerService to use Build.DATE instead of + Build.FINGERPRINT to detect upgrade. Do the same for + UserManagerService. + *) Affects generation of preboot intent and app data migration. + + Change-Id: I56887b7ca842afdcf3cf84b27b4c04667cf43307 + +Author: Wang Han <416810799@qq.com> +Date: Sat Dec 29 23:33:20 2018 +0800 + ShortcutService: Use ro.build.date to signal package scanning + + * Affects system apps scanning. + + Change-Id: I5f6d6647929f5b5ae7e820b18e95bf5ed2ec8d1c + +Author: maxwen +Date: Tue Nov 19 01:02:01 2019 +0100 + base: Use ro.build.date to clear cache dirs on update + + instead of using ro.build.fingerprint we explictly need to use ro.build.date + + Change-Id: Ib3e80e58eb8c9a21c108e9f5cd2dbdb7ada8e3a4 + +Author: maxwen +Date: Wed Oct 28 07:07:10 2020 -0400 + One more Build.FINGERPRINT to Build.DATE change + + Change-Id: I13dbf3d7f6587d3fcd6591cc0f861b34b6d5561c + +Change-Id: If0eb969ba509981f9209ffa37a949d9042ef4c2a +--- + core/java/android/app/admin/SystemUpdateInfo.java | 4 ++-- + .../com/android/server/am/UserController.java | 3 ++- + .../android/server/pm/PackageManagerService.java | 15 +++++++-------- + .../core/java/com/android/server/pm/Settings.java | 4 ++-- + .../com/android/server/pm/ShortcutService.java | 2 +- + .../com/android/server/pm/UserManagerService.java | 8 ++++---- + 6 files changed, 18 insertions(+), 18 deletions(-) + +diff --git a/core/java/android/app/admin/SystemUpdateInfo.java b/core/java/android/app/admin/SystemUpdateInfo.java +index 9e6c91f4ec31..7459b0e05e3a 100644 +--- a/core/java/android/app/admin/SystemUpdateInfo.java ++++ b/core/java/android/app/admin/SystemUpdateInfo.java +@@ -133,7 +133,7 @@ public final class SystemUpdateInfo implements Parcelable { + out.startTag(null, tag); + out.attributeLong(null, ATTR_RECEIVED_TIME, mReceivedTime); + out.attributeInt(null, ATTR_SECURITY_PATCH_STATE, mSecurityPatchState); +- out.attribute(null, ATTR_ORIGINAL_BUILD , Build.FINGERPRINT); ++ out.attribute(null, ATTR_ORIGINAL_BUILD , Build.VERSION.INCREMENTAL); + out.endTag(null, tag); + } + +@@ -142,7 +142,7 @@ public final class SystemUpdateInfo implements Parcelable { + public static SystemUpdateInfo readFromXml(TypedXmlPullParser parser) { + // If an OTA has been applied (build fingerprint has changed), discard stale info. + final String buildFingerprint = parser.getAttributeValue(null, ATTR_ORIGINAL_BUILD ); +- if (!Build.FINGERPRINT.equals(buildFingerprint)) { ++ if (!Build.VERSION.INCREMENTAL.equals(buildFingerprint)) { + return null; + } + try { +diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java +index 76a994ec63e9..f8d1f8178871 100644 +--- a/services/core/java/com/android/server/am/UserController.java ++++ b/services/core/java/com/android/server/am/UserController.java +@@ -90,6 +90,7 @@ import android.content.pm.UserInfo; + import android.content.pm.UserProperties; + import android.os.BatteryStats; + import android.os.Binder; ++import android.os.Build; + import android.os.Bundle; + import android.os.Debug; + import android.os.Handler; +@@ -753,7 +754,7 @@ class UserController implements Handler.Callback { + // purposefully block sending BOOT_COMPLETED until after all + // PRE_BOOT receivers are finished to avoid ANR'ing apps + final UserInfo info = getUserInfo(userId); +- if (!Objects.equals(info.lastLoggedInFingerprint, PackagePartitions.FINGERPRINT) ++ if (!Objects.equals(info.lastLoggedInFingerprint, Build.VERSION.INCREMENTAL) + || SystemProperties.getBoolean("persist.pm.mock-upgrade", false)) { + // Suppress double notifications for managed profiles that + // were unlocked automatically as part of their parent user being +diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java +index f2b62eaf25f8..c721e5474317 100644 +--- a/services/core/java/com/android/server/pm/PackageManagerService.java ++++ b/services/core/java/com/android/server/pm/PackageManagerService.java +@@ -1615,7 +1615,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService + } + + PackageManagerService m = new PackageManagerService(injector, factoryTest, +- PackagePartitions.FINGERPRINT, Build.IS_ENG, Build.IS_USERDEBUG, ++ Build.VERSION.INCREMENTAL, Build.IS_ENG, Build.IS_USERDEBUG, + Build.VERSION.SDK_INT, Build.VERSION.INCREMENTAL); + t.traceEnd(); // "create package manager" + +@@ -2082,9 +2082,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService + mIsUpgrade = + !partitionsFingerprint.equals(ver.fingerprint); + if (mIsUpgrade) { +- PackageManagerServiceUtils.logCriticalInfo(Log.INFO, +- "Upgrading from " + ver.fingerprint + " (" + ver.buildFingerprint + ") to " +- + PackagePartitions.FINGERPRINT + " (" + Build.FINGERPRINT + ")"); ++ PackageManagerServiceUtils.logCriticalInfo(Log.INFO, "Upgrading from " ++ + ver.fingerprint + " to " + Build.VERSION.INCREMENTAL); + } + + mInitAppsHelper = new InitAppsHelper(this, mApexManager, mInstallPackageHelper, +@@ -2221,8 +2220,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService + // allow... it would be nice to have some better way to handle + // this situation. + if (mIsUpgrade) { +- Slog.i(TAG, "Partitions fingerprint changed from " + ver.fingerprint + " to " +- + PackagePartitions.FINGERPRINT ++ Slog.i(TAG, "Build incremental version changed from " + ver.fingerprint + " to " ++ + Build.VERSION.INCREMENTAL + + "; regranting permissions for internal storage"); + } + mPermissionManager.onStorageVolumeMounted( +@@ -2242,7 +2241,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService + // across OTAs and are used to drive profile verification (post OTA) and + // profile compilation (without waiting to collect a fresh set of profiles). + if (mIsUpgrade) { +- Slog.i(TAG, "Build fingerprint changed; clearing code caches"); ++ Slog.i(TAG, "Build incremental version changed; clearing code caches"); + for (int i = 0; i < packageSettings.size(); i++) { + final PackageSetting ps = packageSettings.valueAt(i); + if (Objects.equals(StorageManager.UUID_PRIVATE_INTERNAL, ps.getVolumeUuid())) { +@@ -2254,7 +2253,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService + } + } + ver.buildFingerprint = Build.FINGERPRINT; +- ver.fingerprint = PackagePartitions.FINGERPRINT; ++ ver.fingerprint = Build.VERSION.INCREMENTAL; + } + + // Defer the app data fixup until we are done with app data clearing above. +diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java +index aaf13ebeff2a..8fc6492ae873 100644 +--- a/services/core/java/com/android/server/pm/Settings.java ++++ b/services/core/java/com/android/server/pm/Settings.java +@@ -464,7 +464,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile + sdkVersion = Build.VERSION.SDK_INT; + databaseVersion = CURRENT_DATABASE_VERSION; + buildFingerprint = Build.FINGERPRINT; +- fingerprint = PackagePartitions.FINGERPRINT; ++ fingerprint = Build.VERSION.INCREMENTAL; + } + } + +@@ -5692,7 +5692,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile + } + + private String getExtendedFingerprint(long version) { +- return PackagePartitions.FINGERPRINT + "?pc_version=" + version; ++ return Build.VERSION.INCREMENTAL + "?pc_version=" + version; + } + + private static long uniformRandom(double low, double high) { +diff --git a/services/core/java/com/android/server/pm/ShortcutService.java b/services/core/java/com/android/server/pm/ShortcutService.java +index 5b3514c01f9f..265125987be1 100644 +--- a/services/core/java/com/android/server/pm/ShortcutService.java ++++ b/services/core/java/com/android/server/pm/ShortcutService.java +@@ -5175,7 +5175,7 @@ public class ShortcutService extends IShortcutService.Stub { + + // Injection point. + String injectBuildFingerprint() { +- return Build.FINGERPRINT; ++ return Build.VERSION.INCREMENTAL; + } + + final void wtf(String message) { +diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java +index 7e88e13e1788..9d8ace530d26 100644 +--- a/services/core/java/com/android/server/pm/UserManagerService.java ++++ b/services/core/java/com/android/server/pm/UserManagerService.java +@@ -4876,7 +4876,7 @@ public class UserManagerService extends IUserManager.Stub { + userInfo.creationTime = getCreationTime(); + userInfo.partial = true; + userInfo.preCreated = preCreate; +- userInfo.lastLoggedInFingerprint = PackagePartitions.FINGERPRINT; ++ userInfo.lastLoggedInFingerprint = Build.VERSION.INCREMENTAL; + if (userTypeDetails.hasBadge() && parentId != UserHandle.USER_NULL) { + userInfo.profileBadge = getFreeProfileBadgeLU(parentId, userType); + } +@@ -6200,7 +6200,7 @@ public class UserManagerService extends IUserManager.Stub { + t.traceBegin("onBeforeStartUser-" + userId); + final int userSerial = userInfo.serialNumber; + // Migrate only if build fingerprints mismatch +- boolean migrateAppsData = !PackagePartitions.FINGERPRINT.equals( ++ boolean migrateAppsData = !Build.VERSION.INCREMENTAL.equals( + userInfo.lastLoggedInFingerprint); + t.traceBegin("prepareUserData"); + mUserDataPreparer.prepareUserData(userId, userSerial, StorageManager.FLAG_STORAGE_DE); +@@ -6231,7 +6231,7 @@ public class UserManagerService extends IUserManager.Stub { + } + final int userSerial = userInfo.serialNumber; + // Migrate only if build fingerprints mismatch +- boolean migrateAppsData = !PackagePartitions.FINGERPRINT.equals( ++ boolean migrateAppsData = !Build.VERSION.INCREMENTAL.equals( + userInfo.lastLoggedInFingerprint); + + final TimingsTraceAndSlog t = new TimingsTraceAndSlog(); +@@ -6276,7 +6276,7 @@ public class UserManagerService extends IUserManager.Stub { + if (now > EPOCH_PLUS_30_YEARS) { + userData.info.lastLoggedInTime = now; + } +- userData.info.lastLoggedInFingerprint = PackagePartitions.FINGERPRINT; ++ userData.info.lastLoggedInFingerprint = Build.VERSION.INCREMENTAL; + scheduleWriteUser(userId); + } + +-- +2.41.0 + From 09dbc007f53685671085e99d9c0b21b3c95fe617 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 9 Dec 2023 18:34:42 -0500 Subject: [PATCH 11/43] Refresh patches for r17 --- ...support-glob-matching-for-properties.patch | 4 +- ...d-support-for-app-signature-spoofing.patch | 10 +-- ...PackageUtils-Add-glob-matching-suppo.patch | 4 +- .../base/0004-Global-VPN-feature-1-2.patch | 34 ++++----- ...more-FDE-methods-from-StorageManager.patch | 10 +-- ...ze-boot-animation-to-match-screen-si.patch | 4 +- ...ateForSlotIndex-in-SubscriptionManag.patch | 8 +- ...CallingIdentity-variant-with-both-ex.patch | 4 +- ...d.version.incremental-to-signal-OTA-.patch | 38 +++++----- ...ubbleDataRepositoryTest-to-use-mocki.patch | 75 +++++++++++++++++++ ...e-themed-icon-setting-in-ThemePicker.patch | 8 +- ...ly-expose-GridCustomizationsProvider.patch | 4 +- ... => 0003-Disable-QSB-in-BuildConfig.patch} | 4 +- ...x-all-apps-header-color-in-dark-mode.patch | 25 ------- 14 files changed, 141 insertions(+), 91 deletions(-) create mode 100644 frameworks/base/0010-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch rename packages/apps/Launcher3/{0004-Disable-QSB-in-BuildConfig.patch => 0003-Disable-QSB-in-BuildConfig.patch} (89%) delete mode 100644 packages/apps/Launcher3/0003-Fix-all-apps-header-color-in-dark-mode.patch diff --git a/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch b/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch index c880193..0da3ae4 100644 --- a/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch +++ b/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch @@ -1,7 +1,7 @@ -From 68cd896eee1f2b1ba313b82d7fa466333fd6f157 Mon Sep 17 00:00:00 2001 +From 8def4ecfdf6f04417ba886679e386be40fc713ec Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Tue, 12 Oct 2021 21:37:22 -0400 -Subject: [PATCH 1/9] PackageParser: support glob matching for properties +Subject: [PATCH 01/10] PackageParser: support glob matching for properties Needed to make phh's vendor overlays work --- diff --git a/frameworks/base/0002-Add-support-for-app-signature-spoofing.patch b/frameworks/base/0002-Add-support-for-app-signature-spoofing.patch index 9df9ac7..a753bda 100644 --- a/frameworks/base/0002-Add-support-for-app-signature-spoofing.patch +++ b/frameworks/base/0002-Add-support-for-app-signature-spoofing.patch @@ -1,7 +1,7 @@ -From 2f4174b9b2e8f23fb893a74f1cf7649714ea7758 Mon Sep 17 00:00:00 2001 +From db57e0cf315286e83e3855d8aaf465fe5ea22dcb Mon Sep 17 00:00:00 2001 From: Danny Lin Date: Sat, 16 Oct 2021 05:27:57 -0700 -Subject: [PATCH 2/9] Add support for app signature spoofing +Subject: [PATCH 02/10] Add support for app signature spoofing This is needed by microG GmsCore to pretend to be the official Google Play Services package, because client apps check the package signature @@ -58,10 +58,10 @@ index 288ab479c0fb..2124d89c6e6f 100644 field public static final String MICROPHONE = "android.permission-group.MICROPHONE"; field public static final String NEARBY_DEVICES = "android.permission-group.NEARBY_DEVICES"; diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml -index 2f9f6ae3f3c4..c4cde374ce58 100644 +index 8c9a3ff5149f..4a55643dc503 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml -@@ -4251,6 +4251,21 @@ +@@ -4250,6 +4250,21 @@ android:description="@string/permdesc_getPackageSize" android:protectionLevel="normal" /> @@ -84,7 +84,7 @@ index 2f9f6ae3f3c4..c4cde374ce58 100644 {@link android.content.pm.PackageManager#addPackageToPreferred} for details. --> diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml -index a5b2b853fddd..f8b48c55ce21 100644 +index 9c018c30f9e3..966fec172070 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -991,6 +991,18 @@ diff --git a/frameworks/base/0003-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch b/frameworks/base/0003-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch index 6f7258d..02369b5 100644 --- a/frameworks/base/0003-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch +++ b/frameworks/base/0003-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch @@ -1,7 +1,7 @@ -From 5d662f5b7e2410564d76b8424957707203ec52b6 Mon Sep 17 00:00:00 2001 +From 3df53ee5075cc7db5065531a157f97960097cfb3 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 2 Sep 2022 21:36:06 -0400 -Subject: [PATCH 3/9] FrameworkParsingPackageUtils: Add glob matching support +Subject: [PATCH 03/10] FrameworkParsingPackageUtils: Add glob matching support for properties This is now required in addition to the one in PackageParser in order diff --git a/frameworks/base/0004-Global-VPN-feature-1-2.patch b/frameworks/base/0004-Global-VPN-feature-1-2.patch index 8cd13b1..f8b0756 100644 --- a/frameworks/base/0004-Global-VPN-feature-1-2.patch +++ b/frameworks/base/0004-Global-VPN-feature-1-2.patch @@ -1,7 +1,7 @@ -From a7bc80200ad51943936eae7db443913c9a0cd6dc Mon Sep 17 00:00:00 2001 +From 7b3ac6fb32bc619235aab6d06c2ed356dd684b4d Mon Sep 17 00:00:00 2001 From: Oliver Scott Date: Thu, 8 Jul 2021 10:41:43 -0400 -Subject: [PATCH 4/9] Global VPN feature [1/2] +Subject: [PATCH 04/10] Global VPN feature [1/2] * Modify existing VPN user range functions to conditionally have traffic from all users pass through the global VPN. @@ -28,10 +28,10 @@ Signed-off-by: Mohammad Hasan Keramat J 3 files changed, 46 insertions(+), 5 deletions(-) diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java -index d695c0cb3760..5c705aa14d44 100644 +index a55183c0f7c5..faa16d0c8aad 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java -@@ -16734,6 +16734,12 @@ public final class Settings { +@@ -16838,6 +16838,12 @@ public final class Settings { CLOCKWORK_HOME_READY, }; @@ -72,10 +72,10 @@ index 03656f000c07..fddf8167beb5 100644 mVpnUserId = newUserInfo.restrictedProfileParentId; } else { diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java -index e85eee817d29..2a731532b8d2 100644 +index e3262cfbd30b..614628f42e39 100644 --- a/services/core/java/com/android/server/connectivity/Vpn.java +++ b/services/core/java/com/android/server/connectivity/Vpn.java -@@ -909,6 +909,15 @@ public class Vpn { +@@ -915,6 +915,15 @@ public class Vpn { return mAlwaysOn; } @@ -91,7 +91,7 @@ index e85eee817d29..2a731532b8d2 100644 /** * Checks if a VPN app supports always-on mode. * -@@ -1855,6 +1864,7 @@ public class Vpn { +@@ -1864,6 +1873,7 @@ public class Vpn { try { // Restricted users are not allowed to create VPNs, they are tied to Owner enforceNotRestrictedUser(); @@ -99,7 +99,7 @@ index e85eee817d29..2a731532b8d2 100644 final PackageManager packageManager = mUserIdContext.getPackageManager(); if (packageManager == null) { -@@ -2007,7 +2017,7 @@ public class Vpn { +@@ -2016,7 +2026,7 @@ public class Vpn { addUserToRanges(ranges, userId, allowedApplications, disallowedApplications); // If the user can have restricted profiles, assign all its restricted profiles too @@ -108,7 +108,7 @@ index e85eee817d29..2a731532b8d2 100644 final long token = Binder.clearCallingIdentity(); List users; try { -@@ -2016,7 +2026,8 @@ public class Vpn { +@@ -2025,7 +2035,8 @@ public class Vpn { Binder.restoreCallingIdentity(token); } for (UserInfo user : users) { @@ -118,7 +118,7 @@ index e85eee817d29..2a731532b8d2 100644 addUserToRanges(ranges, user.id, allowedApplications, disallowedApplications); } } -@@ -2097,7 +2108,8 @@ public class Vpn { +@@ -2106,7 +2117,8 @@ public class Vpn { public void onUserAdded(int userId) { // If the user is restricted tie them to the parent user's VPN UserInfo user = mUserManager.getUserInfo(userId); @@ -128,7 +128,7 @@ index e85eee817d29..2a731532b8d2 100644 synchronized(Vpn.this) { final Set> existingRanges = mNetworkCapabilities.getUids(); if (existingRanges != null) { -@@ -2126,7 +2138,8 @@ public class Vpn { +@@ -2135,7 +2147,8 @@ public class Vpn { public void onUserRemoved(int userId) { // clean up if restricted UserInfo user = mUserManager.getUserInfo(userId); @@ -138,7 +138,7 @@ index e85eee817d29..2a731532b8d2 100644 synchronized(Vpn.this) { final Set> existingRanges = mNetworkCapabilities.getUids(); if (existingRanges != null) { -@@ -2565,6 +2578,17 @@ public class Vpn { +@@ -2580,6 +2593,17 @@ public class Vpn { } } @@ -156,7 +156,7 @@ index e85eee817d29..2a731532b8d2 100644 /** * Start legacy VPN, controlling native daemons as needed. Creates a * secondary thread to perform connection work, returning quickly. -@@ -2649,6 +2673,7 @@ public class Vpn { +@@ -2664,6 +2688,7 @@ public class Vpn { new UserHandle(mUserId))) { throw new SecurityException("Restricted users cannot establish VPNs"); } @@ -164,7 +164,7 @@ index e85eee817d29..2a731532b8d2 100644 final RouteInfo ipv4DefaultRoute = findIPv4DefaultRoute(egress); final String gateway = ipv4DefaultRoute.getGateway().getHostAddress(); -@@ -4627,6 +4652,7 @@ public class Vpn { +@@ -4621,6 +4646,7 @@ public class Vpn { verifyCallingUidAndPackage(packageName); enforceNotRestrictedUser(); @@ -172,7 +172,7 @@ index e85eee817d29..2a731532b8d2 100644 validateRequiredFeatures(profile); if (profile.isRestrictedToTestNetworks) { -@@ -4669,6 +4695,7 @@ public class Vpn { +@@ -4663,6 +4689,7 @@ public class Vpn { verifyCallingUidAndPackage(packageName); enforceNotRestrictedUser(); @@ -180,7 +180,7 @@ index e85eee817d29..2a731532b8d2 100644 final long token = Binder.clearCallingIdentity(); try { -@@ -4738,6 +4765,7 @@ public class Vpn { +@@ -4732,6 +4759,7 @@ public class Vpn { requireNonNull(packageName, "No package name provided"); enforceNotRestrictedUser(); @@ -188,7 +188,7 @@ index e85eee817d29..2a731532b8d2 100644 // Prepare VPN for startup if (!prepare(packageName, null /* newPackage */, VpnManager.TYPE_VPN_PLATFORM)) { -@@ -4860,6 +4888,7 @@ public class Vpn { +@@ -4856,6 +4884,7 @@ public class Vpn { requireNonNull(packageName, "No package name provided"); enforceNotRestrictedUser(); diff --git a/frameworks/base/0005-Revert-Remove-more-FDE-methods-from-StorageManager.patch b/frameworks/base/0005-Revert-Remove-more-FDE-methods-from-StorageManager.patch index bcd25ae..96de0b7 100644 --- a/frameworks/base/0005-Revert-Remove-more-FDE-methods-from-StorageManager.patch +++ b/frameworks/base/0005-Revert-Remove-more-FDE-methods-from-StorageManager.patch @@ -1,7 +1,7 @@ -From d83831158f32f782a856e37cc23bd7fcc0f293ca Mon Sep 17 00:00:00 2001 +From 69e129d654ccc2fb9d364d64fe65e7ea7302f85a Mon Sep 17 00:00:00 2001 From: Andy CrossGate Yan Date: Sat, 15 Oct 2022 09:33:56 +0000 -Subject: [PATCH 5/9] Revert "Remove more FDE methods from StorageManager" +Subject: [PATCH 05/10] Revert "Remove more FDE methods from StorageManager" This reverts commit bd13f84152449a3ead6fa8604fd31f48c0224676. @@ -12,10 +12,10 @@ Change-Id: Ic394934ec27b1a486c60123130825d44dad73412 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 +index ee387e7c284f..0adc55598d9b 100644 --- a/core/java/android/os/storage/StorageManager.java +++ b/core/java/android/os/storage/StorageManager.java -@@ -1660,6 +1660,15 @@ public class StorageManager { +@@ -1669,6 +1669,15 @@ public class StorageManager { return false; } @@ -31,7 +31,7 @@ index 80dd48825ba7..cb4769ff4ec3 100644 /** {@hide} * Is this device encrypted? *

-@@ -1693,6 +1702,54 @@ public class StorageManager { +@@ -1702,6 +1711,54 @@ public class StorageManager { return isFileEncrypted(); } diff --git a/frameworks/base/0006-Dynamically-resize-boot-animation-to-match-screen-si.patch b/frameworks/base/0006-Dynamically-resize-boot-animation-to-match-screen-si.patch index f21eb9b..a8ce6bb 100644 --- a/frameworks/base/0006-Dynamically-resize-boot-animation-to-match-screen-si.patch +++ b/frameworks/base/0006-Dynamically-resize-boot-animation-to-match-screen-si.patch @@ -1,7 +1,7 @@ -From a4fa97491d1b55e49e29af49eae58f03e42eb642 Mon Sep 17 00:00:00 2001 +From 37122c75c56d08b1c07d95f1d1ef040a7d9c6564 Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Mon, 20 Dec 2021 15:01:41 -0500 -Subject: [PATCH 6/9] Dynamically resize boot animation to match screen size +Subject: [PATCH 06/10] Dynamically resize boot animation to match screen size Change-Id: I54e49fc6b8c670103852e212d1416e27ff976205 --- diff --git a/frameworks/base/0007-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch b/frameworks/base/0007-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch index b1752ab..6740fa2 100644 --- a/frameworks/base/0007-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch +++ b/frameworks/base/0007-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch @@ -1,7 +1,7 @@ -From 407e57ccb7dcf4fdd4c260c6e6b5972abc9177e7 Mon Sep 17 00:00:00 2001 +From 831c7dd6fbb57a3ccd722e5387f811dfd0e21349 Mon Sep 17 00:00:00 2001 From: Andy CrossGate Yan Date: Wed, 2 Aug 2023 20:59:53 +0800 -Subject: [PATCH 7/9] Restore getSimStateForSlotIndex in SubscriptionManager +Subject: [PATCH 07/10] Restore getSimStateForSlotIndex in SubscriptionManager MTK IMS still needs it here @@ -11,10 +11,10 @@ Change-Id: I41bac57c68055f369232359a464642daab94403b 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 +index 8e4ec0914563..a65a7e9ec2e6 100644 --- a/telephony/java/android/telephony/SubscriptionManager.java +++ b/telephony/java/android/telephony/SubscriptionManager.java -@@ -2549,6 +2549,20 @@ public class SubscriptionManager { +@@ -2558,6 +2558,20 @@ public class SubscriptionManager { return TelephonyManager.getDefault().isNetworkRoaming(subId); } diff --git a/frameworks/base/0008-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch b/frameworks/base/0008-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch index dcee571..c3f32fb 100644 --- a/frameworks/base/0008-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch +++ b/frameworks/base/0008-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch @@ -1,7 +1,7 @@ -From 989c6bc643e6e3b6ffd47d15267433b70faa6141 Mon Sep 17 00:00:00 2001 +From 28cd1a43c63151391142a54fe6c3067a0f40f73b Mon Sep 17 00:00:00 2001 From: Andy CrossGate Yan Date: Sat, 12 Aug 2023 20:11:17 +0800 -Subject: [PATCH 8/9] Add runWithCleanCallingIdentity variant with both +Subject: [PATCH 08/10] Add runWithCleanCallingIdentity variant with both executor and return value This complements the fixup to ImsPhoneCallTracker (in fw/o/t) for U diff --git a/frameworks/base/0009-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch b/frameworks/base/0009-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch index e0935a0..d0bbc7a 100644 --- a/frameworks/base/0009-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch +++ b/frameworks/base/0009-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch @@ -1,7 +1,7 @@ -From c9d2c616f979b05ef609e5b8e890471b7b246beb Mon Sep 17 00:00:00 2001 +From 8abbc55bf9452f935c59e869f6713da27fbec24f Mon Sep 17 00:00:00 2001 From: dhacker29 Date: Tue, 24 Nov 2015 01:53:47 -0500 -Subject: [PATCH 9/9] fw/b: Use ro.build.version.incremental to signal OTA +Subject: [PATCH 09/10] fw/b: Use ro.build.version.incremental to signal OTA upgrades Squash of: @@ -85,7 +85,7 @@ index 9e6c91f4ec31..7459b0e05e3a 100644 } try { diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java -index 76a994ec63e9..f8d1f8178871 100644 +index 99c2f8a5cc56..d6b55f9d1e8c 100644 --- a/services/core/java/com/android/server/am/UserController.java +++ b/services/core/java/com/android/server/am/UserController.java @@ -90,6 +90,7 @@ import android.content.pm.UserInfo; @@ -106,10 +106,10 @@ index 76a994ec63e9..f8d1f8178871 100644 // Suppress double notifications for managed profiles that // were unlocked automatically as part of their parent user being diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java -index f2b62eaf25f8..c721e5474317 100644 +index c583f1767b41..912eaafc5b4a 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java -@@ -1615,7 +1615,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService +@@ -1616,7 +1616,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService } PackageManagerService m = new PackageManagerService(injector, factoryTest, @@ -118,7 +118,7 @@ index f2b62eaf25f8..c721e5474317 100644 Build.VERSION.SDK_INT, Build.VERSION.INCREMENTAL); t.traceEnd(); // "create package manager" -@@ -2082,9 +2082,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService +@@ -2083,9 +2083,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService mIsUpgrade = !partitionsFingerprint.equals(ver.fingerprint); if (mIsUpgrade) { @@ -130,7 +130,7 @@ index f2b62eaf25f8..c721e5474317 100644 } mInitAppsHelper = new InitAppsHelper(this, mApexManager, mInstallPackageHelper, -@@ -2221,8 +2220,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService +@@ -2222,8 +2221,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService // allow... it would be nice to have some better way to handle // this situation. if (mIsUpgrade) { @@ -141,7 +141,7 @@ index f2b62eaf25f8..c721e5474317 100644 + "; regranting permissions for internal storage"); } mPermissionManager.onStorageVolumeMounted( -@@ -2242,7 +2241,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService +@@ -2243,7 +2242,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService // across OTAs and are used to drive profile verification (post OTA) and // profile compilation (without waiting to collect a fresh set of profiles). if (mIsUpgrade) { @@ -150,7 +150,7 @@ index f2b62eaf25f8..c721e5474317 100644 for (int i = 0; i < packageSettings.size(); i++) { final PackageSetting ps = packageSettings.valueAt(i); if (Objects.equals(StorageManager.UUID_PRIVATE_INTERNAL, ps.getVolumeUuid())) { -@@ -2254,7 +2253,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService +@@ -2255,7 +2254,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService } } ver.buildFingerprint = Build.FINGERPRINT; @@ -160,10 +160,10 @@ index f2b62eaf25f8..c721e5474317 100644 // Defer the app data fixup until we are done with app data clearing above. diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java -index aaf13ebeff2a..8fc6492ae873 100644 +index 677a5d11cc6b..3c7080996875 100644 --- a/services/core/java/com/android/server/pm/Settings.java +++ b/services/core/java/com/android/server/pm/Settings.java -@@ -464,7 +464,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile +@@ -465,7 +465,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile sdkVersion = Build.VERSION.SDK_INT; databaseVersion = CURRENT_DATABASE_VERSION; buildFingerprint = Build.FINGERPRINT; @@ -172,7 +172,7 @@ index aaf13ebeff2a..8fc6492ae873 100644 } } -@@ -5692,7 +5692,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile +@@ -5732,7 +5732,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile } private String getExtendedFingerprint(long version) { @@ -182,10 +182,10 @@ index aaf13ebeff2a..8fc6492ae873 100644 private static long uniformRandom(double low, double high) { diff --git a/services/core/java/com/android/server/pm/ShortcutService.java b/services/core/java/com/android/server/pm/ShortcutService.java -index 5b3514c01f9f..265125987be1 100644 +index c6aba2ab9cbe..1aad29efa322 100644 --- a/services/core/java/com/android/server/pm/ShortcutService.java +++ b/services/core/java/com/android/server/pm/ShortcutService.java -@@ -5175,7 +5175,7 @@ public class ShortcutService extends IShortcutService.Stub { +@@ -5206,7 +5206,7 @@ public class ShortcutService extends IShortcutService.Stub { // Injection point. String injectBuildFingerprint() { @@ -195,10 +195,10 @@ index 5b3514c01f9f..265125987be1 100644 final void wtf(String message) { diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java -index 7e88e13e1788..9d8ace530d26 100644 +index d2929aef8a63..ba0b597bb2ce 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java -@@ -4876,7 +4876,7 @@ public class UserManagerService extends IUserManager.Stub { +@@ -4889,7 +4889,7 @@ public class UserManagerService extends IUserManager.Stub { userInfo.creationTime = getCreationTime(); userInfo.partial = true; userInfo.preCreated = preCreate; @@ -207,7 +207,7 @@ index 7e88e13e1788..9d8ace530d26 100644 if (userTypeDetails.hasBadge() && parentId != UserHandle.USER_NULL) { userInfo.profileBadge = getFreeProfileBadgeLU(parentId, userType); } -@@ -6200,7 +6200,7 @@ public class UserManagerService extends IUserManager.Stub { +@@ -6219,7 +6219,7 @@ public class UserManagerService extends IUserManager.Stub { t.traceBegin("onBeforeStartUser-" + userId); final int userSerial = userInfo.serialNumber; // Migrate only if build fingerprints mismatch @@ -216,7 +216,7 @@ index 7e88e13e1788..9d8ace530d26 100644 userInfo.lastLoggedInFingerprint); t.traceBegin("prepareUserData"); mUserDataPreparer.prepareUserData(userId, userSerial, StorageManager.FLAG_STORAGE_DE); -@@ -6231,7 +6231,7 @@ public class UserManagerService extends IUserManager.Stub { +@@ -6250,7 +6250,7 @@ public class UserManagerService extends IUserManager.Stub { } final int userSerial = userInfo.serialNumber; // Migrate only if build fingerprints mismatch @@ -225,7 +225,7 @@ index 7e88e13e1788..9d8ace530d26 100644 userInfo.lastLoggedInFingerprint); final TimingsTraceAndSlog t = new TimingsTraceAndSlog(); -@@ -6276,7 +6276,7 @@ public class UserManagerService extends IUserManager.Stub { +@@ -6295,7 +6295,7 @@ public class UserManagerService extends IUserManager.Stub { if (now > EPOCH_PLUS_30_YEARS) { userData.info.lastLoggedInTime = now; } diff --git a/frameworks/base/0010-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch b/frameworks/base/0010-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch new file mode 100644 index 0000000..a2bb767 --- /dev/null +++ b/frameworks/base/0010-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch @@ -0,0 +1,75 @@ +From f35f1213d1221cde06ee24956649e5ecb4ac5277 Mon Sep 17 00:00:00 2001 +From: Peter Cai +Date: Sat, 9 Dec 2023 18:37:08 -0500 +Subject: [PATCH 10/10] Revert "Convert BubbleDataRepositoryTest to use + mockito-kotlin" + +This reverts commit 625a23ff22f0a9327b9a24341dfa0b8fbaf61a1b. +--- + .../Shell/tests/unittest/Android.bp | 1 - + .../shell/bubbles/BubbleDataRepositoryTest.kt | 17 ++++++++++------- + 2 files changed, 10 insertions(+), 8 deletions(-) + +diff --git a/libs/WindowManager/Shell/tests/unittest/Android.bp b/libs/WindowManager/Shell/tests/unittest/Android.bp +index c2f184a03380..ad4d97f6fe40 100644 +--- a/libs/WindowManager/Shell/tests/unittest/Android.bp ++++ b/libs/WindowManager/Shell/tests/unittest/Android.bp +@@ -43,7 +43,6 @@ android_test { + "frameworks-base-testutils", + "kotlinx-coroutines-android", + "kotlinx-coroutines-core", +- "mockito-kotlin2", + "mockito-target-extended-minus-junit4", + "truth-prebuilt", + "testables", +diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleDataRepositoryTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleDataRepositoryTest.kt +index e35995775f76..0e05e01a8da3 100644 +--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleDataRepositoryTest.kt ++++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleDataRepositoryTest.kt +@@ -29,11 +29,11 @@ import com.google.common.truth.Truth.assertThat + import org.junit.After + import org.junit.Before + import org.junit.Test +-import org.mockito.kotlin.any +-import org.mockito.kotlin.mock +-import org.mockito.kotlin.never +-import org.mockito.kotlin.spy +-import org.mockito.kotlin.verify ++import org.mockito.Mockito ++import org.mockito.Mockito.mock ++import org.mockito.Mockito.never ++import org.mockito.Mockito.spy ++import org.mockito.Mockito.verify + + class BubbleDataRepositoryTest : ShellTestCase() { + +@@ -124,7 +124,7 @@ class BubbleDataRepositoryTest : ShellTestCase() { + + private val testHandler = Handler(Looper.getMainLooper()) + private val mainExecutor = HandlerExecutor(testHandler) +- private val launcherApps = mock() ++ private val launcherApps = mock(LauncherApps::class.java) + + private val persistedBubbles = SparseArray>() + +@@ -158,7 +158,8 @@ class BubbleDataRepositoryTest : ShellTestCase() { + assertThat(persistedBubbles).isEqualTo(validEntitiesByUser) + + // No invalid users, so no persist to disk happened +- verify(dataRepository, never()).persistToDisk(any()) ++ verify(dataRepository, never()).persistToDisk( ++ any(SparseArray>()::class.java)) + } + + @Test +@@ -198,4 +199,6 @@ class BubbleDataRepositoryTest : ShellTestCase() { + // Verify that persist to disk happened with the new valid entities list. + verify(dataRepository).persistToDisk(validEntitiesByUser) + } ++ ++ fun any(type: Class): T = Mockito.any(type) + } +\ No newline at end of file +-- +2.41.0 + diff --git a/packages/apps/Launcher3/0001-Expose-themed-icon-setting-in-ThemePicker.patch b/packages/apps/Launcher3/0001-Expose-themed-icon-setting-in-ThemePicker.patch index 021c20b..854ac44 100644 --- a/packages/apps/Launcher3/0001-Expose-themed-icon-setting-in-ThemePicker.patch +++ b/packages/apps/Launcher3/0001-Expose-themed-icon-setting-in-ThemePicker.patch @@ -1,7 +1,7 @@ -From ca78711f5e5f3d23d11955f1f7368a3b4297ba40 Mon Sep 17 00:00:00 2001 +From 079ec0124a642a3a473697c23da5907380930dd0 Mon Sep 17 00:00:00 2001 From: Danny Lin Date: Mon, 11 Oct 2021 20:48:44 -0700 -Subject: [PATCH 1/4] Expose themed icon setting in ThemePicker +Subject: [PATCH 1/3] Expose themed icon setting in ThemePicker Change-Id: I44e9288c3de13a3604b7a03857ec400753317d9a --- @@ -24,10 +24,10 @@ index 4f580e0bd6..d5b14e5bb9 100644 diff --git a/quickstep/AndroidManifest-launcher.xml b/quickstep/AndroidManifest-launcher.xml -index 7d7054f5a5..d2955c4327 100644 +index c6e2d8cb74..1d7405e345 100644 --- a/quickstep/AndroidManifest-launcher.xml +++ b/quickstep/AndroidManifest-launcher.xml -@@ -66,6 +66,9 @@ +@@ -65,6 +65,9 @@ diff --git a/packages/apps/Launcher3/0002-Properly-expose-GridCustomizationsProvider.patch b/packages/apps/Launcher3/0002-Properly-expose-GridCustomizationsProvider.patch index 7fc75a2..2c628ca 100644 --- a/packages/apps/Launcher3/0002-Properly-expose-GridCustomizationsProvider.patch +++ b/packages/apps/Launcher3/0002-Properly-expose-GridCustomizationsProvider.patch @@ -1,7 +1,7 @@ -From 2e42cd9a638142a055e3ce55cfe767ff21e44cad Mon Sep 17 00:00:00 2001 +From f3f90de4d2440dcff4fab813b45862a9912bccf4 Mon Sep 17 00:00:00 2001 From: Luca Stefani Date: Fri, 1 Nov 2019 23:17:59 +0100 -Subject: [PATCH 2/4] Properly expose GridCustomizationsProvider +Subject: [PATCH 2/3] Properly expose GridCustomizationsProvider Change-Id: I8268a215257ae0e399c56ac8b44cdfdff8cc92a0 --- diff --git a/packages/apps/Launcher3/0004-Disable-QSB-in-BuildConfig.patch b/packages/apps/Launcher3/0003-Disable-QSB-in-BuildConfig.patch similarity index 89% rename from packages/apps/Launcher3/0004-Disable-QSB-in-BuildConfig.patch rename to packages/apps/Launcher3/0003-Disable-QSB-in-BuildConfig.patch index 9340d04..c0e04e7 100644 --- a/packages/apps/Launcher3/0004-Disable-QSB-in-BuildConfig.patch +++ b/packages/apps/Launcher3/0003-Disable-QSB-in-BuildConfig.patch @@ -1,7 +1,7 @@ -From a7449be810f87a28a97c88507f5ba5f9b9ae0ffa Mon Sep 17 00:00:00 2001 +From 6de82b193ca71f4e9c9f578b8168fcfd11d9a95b Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 7 Jul 2023 18:13:32 -0400 -Subject: [PATCH 4/4] Disable QSB in BuildConfig +Subject: [PATCH 3/3] Disable QSB in BuildConfig Change-Id: I3150ef1d9b8c161ed2a6569d1ae75bba0060b36f --- diff --git a/packages/apps/Launcher3/0003-Fix-all-apps-header-color-in-dark-mode.patch b/packages/apps/Launcher3/0003-Fix-all-apps-header-color-in-dark-mode.patch deleted file mode 100644 index 930750d..0000000 --- a/packages/apps/Launcher3/0003-Fix-all-apps-header-color-in-dark-mode.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 486d89b7393a33a3ebb8a1dd678c4f4c666e711e Mon Sep 17 00:00:00 2001 -From: Danny Lin -Date: Wed, 6 Oct 2021 22:45:33 -0700 -Subject: [PATCH 3/4] Fix all apps header color in dark mode - -Change-Id: Ib2ce7f6e3c9b87a4626699cb54673d88392a5f41 ---- - res/values/styles.xml | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/res/values/styles.xml b/res/values/styles.xml -index c41f0e86e9..53a7498b3d 100644 ---- a/res/values/styles.xml -+++ b/res/values/styles.xml -@@ -151,6 +151,7 @@ - #19FFFFFF - #FF212121 - ?attr/materialColorSurfaceDim -+ @color/popup_color_tertiary_dark - #80000000 - @color/popup_color_primary_dark - @color/popup_color_secondary_dark --- -2.41.0 - From d05b445c89b96d5a14ce64debd1b383e48403132 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 15 Dec 2023 22:49:57 -0500 Subject: [PATCH 12/43] Fix fingerprint sensor error on Pixel 7 Pro --- ...support-glob-matching-for-properties.patch | 2 +- ...d-support-for-app-signature-spoofing.patch | 2 +- ...PackageUtils-Add-glob-matching-suppo.patch | 2 +- .../base/0004-Global-VPN-feature-1-2.patch | 2 +- ...more-FDE-methods-from-StorageManager.patch | 2 +- ...ze-boot-animation-to-match-screen-si.patch | 2 +- ...ateForSlotIndex-in-SubscriptionManag.patch | 2 +- ...CallingIdentity-variant-with-both-ex.patch | 2 +- ...d.version.incremental-to-signal-OTA-.patch | 2 +- ...ubbleDataRepositoryTest-to-use-mocki.patch | 2 +- ...ce-Do-not-use-HIDL-providers-when-AI.patch | 32 ++++++++++++++++ ...tart-console-service-when-debuggable.patch | 6 +-- ...ide-some-properties-ro.apex.updatabl.patch | 4 +- ...ide-ro.apex.updatable-for-newer-devi.patch | 38 +++++++++++++++++++ 14 files changed, 85 insertions(+), 15 deletions(-) create mode 100644 frameworks/base/0011-FingerprintService-Do-not-use-HIDL-providers-when-AI.patch create mode 100644 system/core/0003-init-Don-t-override-ro.apex.updatable-for-newer-devi.patch diff --git a/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch b/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch index 0da3ae4..3147cbb 100644 --- a/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch +++ b/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch @@ -1,7 +1,7 @@ From 8def4ecfdf6f04417ba886679e386be40fc713ec Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Tue, 12 Oct 2021 21:37:22 -0400 -Subject: [PATCH 01/10] PackageParser: support glob matching for properties +Subject: [PATCH 01/11] PackageParser: support glob matching for properties Needed to make phh's vendor overlays work --- diff --git a/frameworks/base/0002-Add-support-for-app-signature-spoofing.patch b/frameworks/base/0002-Add-support-for-app-signature-spoofing.patch index a753bda..cb66611 100644 --- a/frameworks/base/0002-Add-support-for-app-signature-spoofing.patch +++ b/frameworks/base/0002-Add-support-for-app-signature-spoofing.patch @@ -1,7 +1,7 @@ From db57e0cf315286e83e3855d8aaf465fe5ea22dcb Mon Sep 17 00:00:00 2001 From: Danny Lin Date: Sat, 16 Oct 2021 05:27:57 -0700 -Subject: [PATCH 02/10] Add support for app signature spoofing +Subject: [PATCH 02/11] Add support for app signature spoofing This is needed by microG GmsCore to pretend to be the official Google Play Services package, because client apps check the package signature diff --git a/frameworks/base/0003-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch b/frameworks/base/0003-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch index 02369b5..fdafb6f 100644 --- a/frameworks/base/0003-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch +++ b/frameworks/base/0003-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch @@ -1,7 +1,7 @@ From 3df53ee5075cc7db5065531a157f97960097cfb3 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 2 Sep 2022 21:36:06 -0400 -Subject: [PATCH 03/10] FrameworkParsingPackageUtils: Add glob matching support +Subject: [PATCH 03/11] FrameworkParsingPackageUtils: Add glob matching support for properties This is now required in addition to the one in PackageParser in order diff --git a/frameworks/base/0004-Global-VPN-feature-1-2.patch b/frameworks/base/0004-Global-VPN-feature-1-2.patch index f8b0756..cab3b05 100644 --- a/frameworks/base/0004-Global-VPN-feature-1-2.patch +++ b/frameworks/base/0004-Global-VPN-feature-1-2.patch @@ -1,7 +1,7 @@ From 7b3ac6fb32bc619235aab6d06c2ed356dd684b4d Mon Sep 17 00:00:00 2001 From: Oliver Scott Date: Thu, 8 Jul 2021 10:41:43 -0400 -Subject: [PATCH 04/10] Global VPN feature [1/2] +Subject: [PATCH 04/11] Global VPN feature [1/2] * Modify existing VPN user range functions to conditionally have traffic from all users pass through the global VPN. diff --git a/frameworks/base/0005-Revert-Remove-more-FDE-methods-from-StorageManager.patch b/frameworks/base/0005-Revert-Remove-more-FDE-methods-from-StorageManager.patch index 96de0b7..0a0e909 100644 --- a/frameworks/base/0005-Revert-Remove-more-FDE-methods-from-StorageManager.patch +++ b/frameworks/base/0005-Revert-Remove-more-FDE-methods-from-StorageManager.patch @@ -1,7 +1,7 @@ From 69e129d654ccc2fb9d364d64fe65e7ea7302f85a Mon Sep 17 00:00:00 2001 From: Andy CrossGate Yan Date: Sat, 15 Oct 2022 09:33:56 +0000 -Subject: [PATCH 05/10] Revert "Remove more FDE methods from StorageManager" +Subject: [PATCH 05/11] Revert "Remove more FDE methods from StorageManager" This reverts commit bd13f84152449a3ead6fa8604fd31f48c0224676. diff --git a/frameworks/base/0006-Dynamically-resize-boot-animation-to-match-screen-si.patch b/frameworks/base/0006-Dynamically-resize-boot-animation-to-match-screen-si.patch index a8ce6bb..4fcd28b 100644 --- a/frameworks/base/0006-Dynamically-resize-boot-animation-to-match-screen-si.patch +++ b/frameworks/base/0006-Dynamically-resize-boot-animation-to-match-screen-si.patch @@ -1,7 +1,7 @@ From 37122c75c56d08b1c07d95f1d1ef040a7d9c6564 Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Mon, 20 Dec 2021 15:01:41 -0500 -Subject: [PATCH 06/10] Dynamically resize boot animation to match screen size +Subject: [PATCH 06/11] Dynamically resize boot animation to match screen size Change-Id: I54e49fc6b8c670103852e212d1416e27ff976205 --- diff --git a/frameworks/base/0007-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch b/frameworks/base/0007-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch index 6740fa2..d16a9c8 100644 --- a/frameworks/base/0007-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch +++ b/frameworks/base/0007-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch @@ -1,7 +1,7 @@ From 831c7dd6fbb57a3ccd722e5387f811dfd0e21349 Mon Sep 17 00:00:00 2001 From: Andy CrossGate Yan Date: Wed, 2 Aug 2023 20:59:53 +0800 -Subject: [PATCH 07/10] Restore getSimStateForSlotIndex in SubscriptionManager +Subject: [PATCH 07/11] Restore getSimStateForSlotIndex in SubscriptionManager MTK IMS still needs it here diff --git a/frameworks/base/0008-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch b/frameworks/base/0008-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch index c3f32fb..ffd46e5 100644 --- a/frameworks/base/0008-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch +++ b/frameworks/base/0008-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch @@ -1,7 +1,7 @@ From 28cd1a43c63151391142a54fe6c3067a0f40f73b Mon Sep 17 00:00:00 2001 From: Andy CrossGate Yan Date: Sat, 12 Aug 2023 20:11:17 +0800 -Subject: [PATCH 08/10] Add runWithCleanCallingIdentity variant with both +Subject: [PATCH 08/11] Add runWithCleanCallingIdentity variant with both executor and return value This complements the fixup to ImsPhoneCallTracker (in fw/o/t) for U diff --git a/frameworks/base/0009-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch b/frameworks/base/0009-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch index d0bbc7a..e018a96 100644 --- a/frameworks/base/0009-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch +++ b/frameworks/base/0009-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch @@ -1,7 +1,7 @@ From 8abbc55bf9452f935c59e869f6713da27fbec24f Mon Sep 17 00:00:00 2001 From: dhacker29 Date: Tue, 24 Nov 2015 01:53:47 -0500 -Subject: [PATCH 09/10] fw/b: Use ro.build.version.incremental to signal OTA +Subject: [PATCH 09/11] fw/b: Use ro.build.version.incremental to signal OTA upgrades Squash of: diff --git a/frameworks/base/0010-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch b/frameworks/base/0010-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch index a2bb767..871fc89 100644 --- a/frameworks/base/0010-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch +++ b/frameworks/base/0010-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch @@ -1,7 +1,7 @@ From f35f1213d1221cde06ee24956649e5ecb4ac5277 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 9 Dec 2023 18:37:08 -0500 -Subject: [PATCH 10/10] Revert "Convert BubbleDataRepositoryTest to use +Subject: [PATCH 10/11] Revert "Convert BubbleDataRepositoryTest to use mockito-kotlin" This reverts commit 625a23ff22f0a9327b9a24341dfa0b8fbaf61a1b. diff --git a/frameworks/base/0011-FingerprintService-Do-not-use-HIDL-providers-when-AI.patch b/frameworks/base/0011-FingerprintService-Do-not-use-HIDL-providers-when-AI.patch new file mode 100644 index 0000000..a4b1b7a --- /dev/null +++ b/frameworks/base/0011-FingerprintService-Do-not-use-HIDL-providers-when-AI.patch @@ -0,0 +1,32 @@ +From 3d3312bd96d2c8a74e4a27b5567a24f92ad8d243 Mon Sep 17 00:00:00 2001 +From: Peter Cai +Date: Fri, 15 Dec 2023 22:48:39 -0500 +Subject: [PATCH 11/11] FingerprintService: Do not use HIDL providers when AIDL + is present + +This fixes duplicated sensor ID when config_biometric_sensors is defined +on AIDL devices. + +Change-Id: I9942e91a95106a7a11ab7ddf145d87562d1b7c0d +--- + .../biometrics/sensors/fingerprint/FingerprintService.java | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java +index 5ce0c8b384ef..a4e4a1b347d3 100644 +--- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java ++++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java +@@ -885,8 +885,9 @@ public class FingerprintService extends SystemService { + filteredInstances = filterAvailableHalInstances(hidlSensors, aidlSensors); + + final List providers = new ArrayList<>(); +- providers.addAll(getHidlProviders(filteredInstances.first)); + providers.addAll(getAidlProviders(filteredInstances.second)); ++ if (providers.isEmpty()) // Only use HIDL providers if AIDL ones are not found ++ providers.addAll(getHidlProviders(filteredInstances.first)); + + return providers; + }); +-- +2.41.0 + diff --git a/system/core/0001-init-Do-not-start-console-service-when-debuggable.patch b/system/core/0001-init-Do-not-start-console-service-when-debuggable.patch index f543b89..2b08444 100644 --- a/system/core/0001-init-Do-not-start-console-service-when-debuggable.patch +++ b/system/core/0001-init-Do-not-start-console-service-when-debuggable.patch @@ -1,7 +1,7 @@ -From b370e176ea2fe56423d668a9c7a53000d6154b8a Mon Sep 17 00:00:00 2001 +From 332fec7a7f18271f42c50ad85d955604aaff8777 Mon Sep 17 00:00:00 2001 From: Isaac Chen Date: Wed, 23 Jun 2021 13:07:30 +0800 -Subject: [PATCH 1/2] init: Do not start console service when debuggable +Subject: [PATCH 1/3] 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. @@ -13,7 +13,7 @@ Change-Id: I34cfd6b42d3b9aee4b3e63181480cfb8b1255f29 1 file changed, 3 deletions(-) diff --git a/rootdir/init.rc b/rootdir/init.rc -index 1e6918d00..8b48a9c87 100644 +index 7da264611..8b037bc9a 100644 --- a/rootdir/init.rc +++ b/rootdir/init.rc @@ -1312,9 +1312,6 @@ on property:ro.debuggable=1 diff --git a/system/core/0002-Let-system-override-some-properties-ro.apex.updatabl.patch b/system/core/0002-Let-system-override-some-properties-ro.apex.updatabl.patch index 85f37f0..820092b 100644 --- a/system/core/0002-Let-system-override-some-properties-ro.apex.updatabl.patch +++ b/system/core/0002-Let-system-override-some-properties-ro.apex.updatabl.patch @@ -1,7 +1,7 @@ -From 1b075ec9186fd7b8b501272370a7ebfe43fe2fb4 Mon Sep 17 00:00:00 2001 +From a644ef7d888b90a768564e0be805fd1975514e1a Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Fri, 21 Apr 2023 13:08:48 -0400 -Subject: [PATCH 2/2] Let system override some properties (ro.apex.updatable, +Subject: [PATCH 2/3] Let system override some properties (ro.apex.updatable, ro.adb.secure, etc.) Change-Id: I3c84fa617f0ab7990abb0d905230a8703cf39bf7 diff --git a/system/core/0003-init-Don-t-override-ro.apex.updatable-for-newer-devi.patch b/system/core/0003-init-Don-t-override-ro.apex.updatable-for-newer-devi.patch new file mode 100644 index 0000000..1ff3a3a --- /dev/null +++ b/system/core/0003-init-Don-t-override-ro.apex.updatable-for-newer-devi.patch @@ -0,0 +1,38 @@ +From 896473ddb7ddc7eed869360ab2e06af6c5f882e1 Mon Sep 17 00:00:00 2001 +From: Peter Cai +Date: Fri, 15 Dec 2023 22:47:32 -0500 +Subject: [PATCH 3/3] init: Don't override ro.apex.updatable for newer devices + +...where apexes may be required for hardware features to work. + +Change-Id: Ieed7de617231c93419f03aa31c9182018df131ec +--- + init/property_service.cpp | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/init/property_service.cpp b/init/property_service.cpp +index 0680b8e06..5edf246a1 100644 +--- a/init/property_service.cpp ++++ b/init/property_service.cpp +@@ -33,6 +33,7 @@ + #include + #include + #include ++#include + #include + #include + +@@ -787,7 +788,9 @@ static void LoadProperties(char* data, const char* filter, const char* filename, + } else if (it->second != value) { + LOG(WARNING) << "Overriding previous property '" << key << "':'" << it->second + << "' with new value '" << value << "'"; +- if (strcmp("ro.apex.updatable", key) == 0 || strcmp("ro.control_privapp_permissions", key) == 0 ++ struct utsname uts; ++ if ((strcmp("ro.apex.updatable", key) == 0 && !(uname(&uts) == 0 && atoi(uts.release) >= 5)) ++ || strcmp("ro.control_privapp_permissions", key) == 0 + || strstr(key, "adb") || strstr(key, "secure")) { + LOG(WARNING) << "... Ignored"; + } else { +-- +2.41.0 + From c5a6c7eb2aa39a812c7563b93aaac559562be2f9 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Tue, 12 Mar 2024 19:41:47 -0400 Subject: [PATCH 13/43] Refresh patches for AOSP 14 r29 --- ...m-to-fake-vendor-props-on-a-per-proc.patch | 16 +- ...orce-load-audio-policy-for-system-si.patch | 8 +- ...2DP-audio-ports-from-the-primary-HAL.patch | 10 +- ...gh-pitched-voice-on-Qualcomm-devices.patch | 6 +- ...and-Q-behavior-respectively-for-tele.patch | 30 ++-- .../0005-Fix-BT-in-call-on-CAF-devices.patch | 10 +- ...support-glob-matching-for-properties.patch | 8 +- ...d-support-for-app-signature-spoofing.patch | 163 ------------------ ...ackageUtils-Add-glob-matching-suppo.patch} | 8 +- ...atch => 0003-Global-VPN-feature-1-2.patch} | 42 ++--- ...e-boot-animation-to-match-screen-si.patch} | 10 +- ...teForSlotIndex-in-SubscriptionManag.patch} | 10 +- ...more-FDE-methods-from-StorageManager.patch | 110 ------------ ...allingIdentity-variant-with-both-ex.patch} | 19 +- ....version.incremental-to-signal-OTA-.patch} | 50 +++--- ...bbleDataRepositoryTest-to-use-mocki.patch} | 12 +- ...e-Do-not-use-HIDL-providers-when-AI.patch} | 10 +- ...spoofing-for-microG-Companion-Servic.patch | 130 ++++++++++++++ ...ic-void-TelephonyMetrics.writeRilSen.patch | 6 +- ...g-too-long-to-fit-into-a-91-chars-p.patch} | 10 +- ...ue-to-setPreferredNetworkType-for-RI.patch | 53 ------ ...ert-Block-Binder-thread-until-incom.patch} | 10 +- ...oller-Do-not-override-default-calli.patch} | 12 +- ...e-themed-icon-setting-in-ThemePicker.patch | 4 +- ...ly-expose-GridCustomizationsProvider.patch | 8 +- .../0003-Disable-QSB-in-BuildConfig.patch | 8 +- .../0001-Global-VPN-feature-2-2.patch | 20 +-- ...0001-Add-wallpaper-privapp-whitelist.patch | 17 +- ...2-Add-wallpaper-default-permissions.patch} | 21 ++- ...-Override-legacy-WallpaperPicker-app.patch | 26 --- ...we-read-and-write-launcher-settings.patch} | 10 +- ...sion-for-launcher-preview-rendering.patch} | 8 +- ...-hci-Ignore-unexpected-status-events.patch | 8 +- ..._interface-Optionally-use-sysbta-HAL.patch | 54 +++--- ...ability-to-write-to-index-0-of-bpf-m.patch | 34 ---- ...tart-console-service-when-debuggable.patch | 10 +- ...ide-some-properties-ro.apex.updatabl.patch | 32 ---- ...it-Override-select-system-properties.patch | 87 ++++++++++ ...ide-ro.apex.updatable-for-newer-devi.patch | 38 ---- 39 files changed, 440 insertions(+), 688 deletions(-) delete mode 100644 frameworks/base/0002-Add-support-for-app-signature-spoofing.patch rename frameworks/base/{0003-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch => 0002-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch} (90%) rename frameworks/base/{0004-Global-VPN-feature-1-2.patch => 0003-Global-VPN-feature-1-2.patch} (89%) rename frameworks/base/{0006-Dynamically-resize-boot-animation-to-match-screen-si.patch => 0004-Dynamically-resize-boot-animation-to-match-screen-si.patch} (87%) rename frameworks/base/{0007-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch => 0005-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch} (83%) delete mode 100644 frameworks/base/0005-Revert-Remove-more-FDE-methods-from-StorageManager.patch rename frameworks/base/{0008-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch => 0006-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch} (84%) rename frameworks/base/{0009-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch => 0007-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch} (88%) rename frameworks/base/{0010-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch => 0008-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch} (92%) rename frameworks/base/{0011-FingerprintService-Do-not-use-HIDL-providers-when-AI.patch => 0009-FingerprintService-Do-not-use-HIDL-providers-when-AI.patch} (85%) create mode 100644 frameworks/base/0010-Allow-signature-spoofing-for-microG-Companion-Servic.patch rename frameworks/opt/telephony/{0003-Fix-baseband-being-too-long-to-fit-into-a-91-chars-p.patch => 0002-Fix-baseband-being-too-long-to-fit-into-a-91-chars-p.patch} (83%) delete mode 100644 frameworks/opt/telephony/0002-Pass-correct-value-to-setPreferredNetworkType-for-RI.patch rename frameworks/opt/telephony/{0004-Conditionally-revert-Block-Binder-thread-until-incom.patch => 0003-Conditionally-revert-Block-Binder-thread-until-incom.patch} (91%) rename frameworks/opt/telephony/{0005-SubscriptionController-Do-not-override-default-calli.patch => 0004-SubscriptionController-Do-not-override-default-calli.patch} (90%) rename packages/apps/ThemePicker/{0003-Add-wallpaper-default-permissions.patch => 0002-Add-wallpaper-default-permissions.patch} (87%) delete mode 100644 packages/apps/ThemePicker/0002-Override-legacy-WallpaperPicker-app.patch rename packages/apps/ThemePicker/{0004-Specify-we-read-and-write-launcher-settings.patch => 0003-Specify-we-read-and-write-launcher-settings.patch} (77%) rename packages/apps/ThemePicker/{0005-Add-permission-for-launcher-preview-rendering.patch => 0004-Add-permission-for-launcher-preview-rendering.patch} (90%) delete mode 100644 system/bpf/0001-Revert-detect-inability-to-write-to-index-0-of-bpf-m.patch delete mode 100644 system/core/0002-Let-system-override-some-properties-ro.apex.updatabl.patch create mode 100644 system/core/0002-init-Override-select-system-properties.patch delete mode 100644 system/core/0003-init-Don-t-override-ro.apex.updatable-for-newer-devi.patch diff --git a/bionic/0001-Add-new-mechanism-to-fake-vendor-props-on-a-per-proc.patch b/bionic/0001-Add-new-mechanism-to-fake-vendor-props-on-a-per-proc.patch index 3b2f16f..f24e88b 100644 --- a/bionic/0001-Add-new-mechanism-to-fake-vendor-props-on-a-per-proc.patch +++ b/bionic/0001-Add-new-mechanism-to-fake-vendor-props-on-a-per-proc.patch @@ -1,4 +1,4 @@ -From ee3be511ddfa2474c7c5890cea4725e908996b9f Mon Sep 17 00:00:00 2001 +From 13537c3a17b60050d431d7d5b9dbfc591ee41762 Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Sat, 19 Feb 2022 08:20:25 -0500 Subject: [PATCH] Add new mechanism to fake vendor props on a per-process basis @@ -17,10 +17,10 @@ Squashed: Rework property overriding 1 file changed, 79 insertions(+), 2 deletions(-) diff --git a/libc/system_properties/system_properties.cpp b/libc/system_properties/system_properties.cpp -index 1cb15c3df..40ff48bad 100644 +index 9dd5e35ce..4524f8410 100644 --- a/libc/system_properties/system_properties.cpp +++ b/libc/system_properties/system_properties.cpp -@@ -35,6 +35,8 @@ +@@ -36,6 +36,8 @@ #include #include #include @@ -29,9 +29,9 @@ index 1cb15c3df..40ff48bad 100644 #include -@@ -50,6 +52,79 @@ - #define SERIAL_DIRTY(serial) ((serial)&1) +@@ -53,6 +55,79 @@ #define SERIAL_VALUE_LEN(serial) ((serial) >> 24) + #define APPCOMPAT_PREFIX "ro.appcompat_override." +static char comm[128]; +static bool self_ok = false; @@ -109,7 +109,7 @@ index 1cb15c3df..40ff48bad 100644 static bool is_dir(const char* pathname) { struct stat info; if (stat(pathname, &info) == -1) { -@@ -123,17 +198,19 @@ uint32_t SystemProperties::AreaSerial() { +@@ -156,17 +231,19 @@ uint32_t SystemProperties::AreaSerial() { } const prop_info* SystemProperties::Find(const char* name) { @@ -130,7 +130,7 @@ index 1cb15c3df..40ff48bad 100644 + return pa->find(newName); } - static bool is_read_only(const char* name) { + static bool is_appcompat_override(const char* name) { -- -2.41.0 +2.43.1 diff --git a/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch b/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch index 25c41ad..47702a3 100644 --- a/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch +++ b/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch @@ -1,4 +1,4 @@ -From f8b9cb1d3cdf0274414bb7d100844d2707999558 Mon Sep 17 00:00:00 2001 +From ea475bf0af44eaaa124ce6113f9aa05d6d6daa1a Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 24 Aug 2022 15:42:39 -0400 Subject: [PATCH 1/5] APM: Optionally force-load audio policy for system-side @@ -14,7 +14,7 @@ Change-Id: I279fff541a531f922f3fa55b8f14d00237db59ff 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 +index 6f19a7a145..08836377b7 100644 --- a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp +++ b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp @@ -25,6 +25,7 @@ @@ -25,7 +25,7 @@ index 3d5c1d2e42..881c188e4c 100644 #include #include #include -@@ -885,6 +886,30 @@ status_t PolicySerializer::deserialize(const char *configFile, AudioPolicyConfig +@@ -895,6 +896,30 @@ status_t PolicySerializer::deserialize(const char *configFile, AudioPolicyConfig if (status != NO_ERROR) { return status; } @@ -57,5 +57,5 @@ index 3d5c1d2e42..881c188e4c 100644 // Global Configuration -- -2.41.0 +2.43.1 diff --git a/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch b/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch index 3da3764..b3c2e70 100644 --- a/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch +++ b/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch @@ -1,4 +1,4 @@ -From d60a1b5fc58a7cc84b48c554cb2cffaeff14d86e Mon Sep 17 00:00:00 2001 +From bb39db1a329a76edb2f936fbec305dc561638177 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 25 Aug 2022 13:30:29 -0400 Subject: [PATCH 2/5] APM: Remove A2DP audio ports from the primary HAL @@ -16,7 +16,7 @@ Change-Id: I3305594a17285da113167b419543543f0ef71122 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 +index 08836377b7..0f7c903909 100644 --- a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp +++ b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp @@ -26,6 +26,7 @@ @@ -40,7 +40,7 @@ index 881c188e4c..8519cfdc04 100644 } } if (!xmlStrcmp(cur->name, reinterpret_cast(Trait::tag))) { -@@ -679,6 +677,7 @@ std::variant PolicySerializer::deserialize PolicySerializer::deserialize PolicySerializer::deserialize PolicySerializer::deserialize Date: Mon, 24 Oct 2022 09:38:34 +0100 Subject: [PATCH 3/5] voip: Fix high pitched voice on Qualcomm devices @@ -9,7 +9,7 @@ Change-Id: I6d314912169776b76d07d8c0301ec5249c1870a2 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp -index 8519cfdc04..d23d55677d 100644 +index 0f7c903909..c4474cf1c2 100644 --- a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp +++ b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp @@ -252,6 +252,7 @@ private: @@ -52,5 +52,5 @@ index 8519cfdc04..d23d55677d 100644 ALOGE("%s: No %s found", __func__, Attributes::name); return BAD_VALUE; -- -2.41.0 +2.43.1 diff --git a/frameworks/av/0004-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch b/frameworks/av/0004-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch index ad766d2..e808505 100644 --- a/frameworks/av/0004-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch +++ b/frameworks/av/0004-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch @@ -1,4 +1,4 @@ -From 1a9a9faca4d5c28747a3b7d9843b67c641ed91c9 Mon Sep 17 00:00:00 2001 +From ecc5b31e7fbc1875deee1befd4d1b29e98db8836 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 18 Aug 2022 15:44:46 -0400 Subject: [PATCH 4/5] APM: Restore S, R and Q behavior respectively for @@ -36,12 +36,12 @@ Change-Id: I56d36d2aef4319935cb88a3e4771b23c6d5b2145 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 +index 135548fb9c..fc99bdbd78 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); +@@ -692,6 +692,17 @@ status_t AudioPolicyManager::updateCallRoutingInternal( + ALOGV("%s device rxDevice %s txDevice %s", __func__, + rxDevices.itemAt(0)->toString().c_str(), txSourceDevice->toString().c_str()); + // release existing RX patch if any + if (mCallRxPatch != 0) { @@ -57,7 +57,7 @@ index f093e685ba..9a90009f9e 100644 auto telephonyRxModule = mHwModules.getModuleForDeviceType(AUDIO_DEVICE_IN_TELEPHONY_RX, AUDIO_FORMAT_DEFAULT); auto telephonyTxModule = -@@ -711,9 +722,20 @@ status_t AudioPolicyManager::updateCallRoutingInternal( +@@ -714,9 +725,20 @@ status_t AudioPolicyManager::updateCallRoutingInternal( ALOGE("%s() no telephony Tx and/or RX device", __func__); return INVALID_OPERATION; } @@ -81,9 +81,9 @@ index f093e685ba..9a90009f9e 100644 } 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); +@@ -737,7 +759,14 @@ status_t AudioPolicyManager::updateCallRoutingInternal( + } + muteWaitMs = setOutputDevices(__func__, mPrimaryOutput, rxDevices, true, delayMs); } else { // create RX path audio patch - connectTelephonyRxAudioSource(); + if (property_get_int32("ro.vndk.version", 31) >= 31) { @@ -97,7 +97,7 @@ index f093e685ba..9a90009f9e 100644 // 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( +@@ -752,7 +781,12 @@ status_t AudioPolicyManager::updateCallRoutingInternal( closeActiveClients(activeDesc); } } @@ -111,7 +111,7 @@ index f093e685ba..9a90009f9e 100644 } if (waitMs != nullptr) { *waitMs = muteWaitMs; -@@ -753,6 +787,36 @@ status_t AudioPolicyManager::updateCallRoutingInternal( +@@ -760,6 +794,36 @@ status_t AudioPolicyManager::updateCallRoutingInternal( return NO_ERROR; } @@ -148,7 +148,7 @@ index f093e685ba..9a90009f9e 100644 bool AudioPolicyManager::isDeviceOfModule( const sp& devDesc, const char *moduleId) const { sp module = mHwModules.getModuleFromName(moduleId); -@@ -4958,83 +5022,101 @@ status_t AudioPolicyManager::createAudioPatchInternal(const struct audio_patch * +@@ -5087,83 +5151,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 outputDesc; @@ -308,10 +308,10 @@ index f093e685ba..9a90009f9e 100644 AUDIO_STREAM_PATCH; patchBuilder.addSource(srcMixPortConfig); diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.h b/services/audiopolicy/managerdefault/AudioPolicyManager.h -index 88bafefdb1..188b5732b3 100644 +index a1c8f6202c..ee1b595e30 100644 --- a/services/audiopolicy/managerdefault/AudioPolicyManager.h +++ b/services/audiopolicy/managerdefault/AudioPolicyManager.h -@@ -953,6 +953,9 @@ protected: +@@ -964,6 +964,9 @@ protected: SoundTriggerSessionCollection mSoundTriggerSessions; @@ -322,5 +322,5 @@ index 88bafefdb1..188b5732b3 100644 SourceClientCollection mAudioSources; -- -2.41.0 +2.43.1 diff --git a/frameworks/av/0005-Fix-BT-in-call-on-CAF-devices.patch b/frameworks/av/0005-Fix-BT-in-call-on-CAF-devices.patch index 04a2722..0c614b7 100644 --- a/frameworks/av/0005-Fix-BT-in-call-on-CAF-devices.patch +++ b/frameworks/av/0005-Fix-BT-in-call-on-CAF-devices.patch @@ -1,4 +1,4 @@ -From 97421e35dd716c9b07ec44ec05265944efc96294 Mon Sep 17 00:00:00 2001 +From 91ae0a3a9df1e37856cf0065bb24b7c27bb40ba4 Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Mon, 5 Aug 2019 18:09:50 +0200 Subject: [PATCH 5/5] Fix BT in-call on CAF devices @@ -16,10 +16,10 @@ Change-Id: Ifea0f88276ec9a0811f3cb1973c4b06f2c82077b 1 file changed, 93 insertions(+) diff --git a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp -index d23d55677d..4f896111cb 100644 +index c4474cf1c2..c1df8f278b 100644 --- a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp +++ b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp -@@ -672,6 +672,98 @@ std::variant PolicySerializer::deserialize PolicySerializer::deserialize std::variant PolicySerializer::deserialize( const xmlNode *cur, ModuleTraits::PtrSerializingCtx ctx) -@@ -739,6 +831,7 @@ std::variant PolicySerializer::deserialize PolicySerializer::deserializexmlChildrenNode; children != NULL; -- -2.41.0 +2.43.1 diff --git a/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch b/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch index 3147cbb..971948f 100644 --- a/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch +++ b/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch @@ -1,7 +1,7 @@ -From 8def4ecfdf6f04417ba886679e386be40fc713ec Mon Sep 17 00:00:00 2001 +From ceeeecf00329e2b0c50aa71c7c4da5aec6a0080b Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Tue, 12 Oct 2021 21:37:22 -0400 -Subject: [PATCH 01/11] PackageParser: support glob matching for properties +Subject: [PATCH 01/10] PackageParser: support glob matching for properties Needed to make phh's vendor overlays work --- @@ -9,7 +9,7 @@ Needed to make phh's vendor overlays work 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java -index 048289f56a0c..0d88d7ab97a4 100644 +index 4b579e7db9f8..8176cf8e8567 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -2545,8 +2545,16 @@ public class PackageParser { @@ -32,5 +32,5 @@ index 048289f56a0c..0d88d7ab97a4 100644 } return true; -- -2.41.0 +2.43.1 diff --git a/frameworks/base/0002-Add-support-for-app-signature-spoofing.patch b/frameworks/base/0002-Add-support-for-app-signature-spoofing.patch deleted file mode 100644 index cb66611..0000000 --- a/frameworks/base/0002-Add-support-for-app-signature-spoofing.patch +++ /dev/null @@ -1,163 +0,0 @@ -From db57e0cf315286e83e3855d8aaf465fe5ea22dcb Mon Sep 17 00:00:00 2001 -From: Danny Lin -Date: Sat, 16 Oct 2021 05:27:57 -0700 -Subject: [PATCH 02/11] Add support for app signature spoofing - -This is needed by microG GmsCore to pretend to be the official Google -Play Services package, because client apps check the package signature -to make sure it matches Google's official certificate. - -This was forward-ported from the Android 10 patch by gudenau: -https://github.com/microg/android_packages_apps_GmsCore/pull/957 - -Changes made for Android 11: - - Updated PackageInfo calls - - Added new permission to public API surface, needed for - PermissionController which is now an updatable APEX on 11 - - Added a dummy permission group to allow users to manage the - permission through the PermissionController UI - (by Vachounet ) - - Updated location provider comment for conciseness - -Changes made for Android 12: - - Moved mayFakeSignature into lock-free Computer subclass - - Always get permissions for packages that request signature spoofing - (otherwise permissions are usually ommitted and thus the permission - check doesn't work properly) - - Optimize mayFakeSignature check order to improve performance - -Changes made for Android 13: - - Computer subclass is now an independent class. - -Change-Id: Ied7d6ce0b83a2d2345c3abba0429998d86494a88 ---- - core/api/current.txt | 2 ++ - core/res/AndroidManifest.xml | 15 ++++++++++ - core/res/res/values/strings.xml | 12 ++++++++ - .../com/android/server/pm/ComputerEngine.java | 30 +++++++++++++++++-- - 4 files changed, 56 insertions(+), 3 deletions(-) - -diff --git a/core/api/current.txt b/core/api/current.txt -index 288ab479c0fb..2124d89c6e6f 100644 ---- a/core/api/current.txt -+++ b/core/api/current.txt -@@ -95,6 +95,7 @@ package android { - field public static final String EXECUTE_APP_ACTION = "android.permission.EXECUTE_APP_ACTION"; - field public static final String EXPAND_STATUS_BAR = "android.permission.EXPAND_STATUS_BAR"; - field public static final String FACTORY_TEST = "android.permission.FACTORY_TEST"; -+ field public static final String FAKE_PACKAGE_SIGNATURE = "android.permission.FAKE_PACKAGE_SIGNATURE"; - field public static final String FOREGROUND_SERVICE = "android.permission.FOREGROUND_SERVICE"; - field public static final String FOREGROUND_SERVICE_CAMERA = "android.permission.FOREGROUND_SERVICE_CAMERA"; - field public static final String FOREGROUND_SERVICE_CONNECTED_DEVICE = "android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE"; -@@ -326,6 +327,7 @@ package android { - field public static final String CALL_LOG = "android.permission-group.CALL_LOG"; - field public static final String CAMERA = "android.permission-group.CAMERA"; - field public static final String CONTACTS = "android.permission-group.CONTACTS"; -+ field public static final String FAKE_PACKAGE = "android.permission-group.FAKE_PACKAGE"; - field public static final String LOCATION = "android.permission-group.LOCATION"; - field public static final String MICROPHONE = "android.permission-group.MICROPHONE"; - field public static final String NEARBY_DEVICES = "android.permission-group.NEARBY_DEVICES"; -diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml -index 8c9a3ff5149f..4a55643dc503 100644 ---- a/core/res/AndroidManifest.xml -+++ b/core/res/AndroidManifest.xml -@@ -4250,6 +4250,21 @@ - android:description="@string/permdesc_getPackageSize" - android:protectionLevel="normal" /> - -+ -+ -+ -+ -+ -+ - -diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml -index 9c018c30f9e3..966fec172070 100644 ---- a/core/res/res/values/strings.xml -+++ b/core/res/res/values/strings.xml -@@ -991,6 +991,18 @@ - - - -+ -+ Spoof package signature -+ -+ Allows the app to pretend to be a different app. Malicious applications might be able to use this to access private application data. Legitimate uses include an emulator pretending to be what it emulates. Grant this permission with caution only! -+ -+ Spoof package signature -+ -+ allow to spoof package signature -+ -+ Allow -+ <b>%1$s</b> to spoof package signature? -+ - - disable or modify status bar - -diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java -index 78f1fa60b69f..fb2f7da97cda 100644 ---- a/services/core/java/com/android/server/pm/ComputerEngine.java -+++ b/services/core/java/com/android/server/pm/ComputerEngine.java -@@ -1450,6 +1450,29 @@ public class ComputerEngine implements Computer { - return result; - } - -+ private boolean requestsFakeSignature(AndroidPackage p) { -+ return p.getMetaData() != null && -+ p.getMetaData().getString("fake-signature") != null; -+ } -+ -+ private PackageInfo mayFakeSignature(AndroidPackage p, PackageInfo pi, -+ Set permissions) { -+ try { -+ if (p.getMetaData() != null && -+ p.getTargetSdkVersion() > Build.VERSION_CODES.LOLLIPOP_MR1) { -+ String sig = p.getMetaData().getString("fake-signature"); -+ if (sig != null && -+ permissions.contains("android.permission.FAKE_PACKAGE_SIGNATURE")) { -+ pi.signatures = new Signature[] {new Signature(sig)}; -+ } -+ } -+ } catch (Throwable t) { -+ // We should never die because of any failures, this is system code! -+ Log.w("PackageManagerService.FAKE_PACKAGE_SIGNATURE", t); -+ } -+ return pi; -+ } -+ - public final PackageInfo generatePackageInfo(PackageStateInternal ps, - @PackageManager.PackageInfoFlagsBits long flags, int userId) { - if (!mUserManager.exists(userId)) return null; -@@ -1483,13 +1506,14 @@ public class ComputerEngine implements Computer { - || ArrayUtils.isEmpty(p.getPermissions())) ? Collections.emptySet() - : mPermissionManager.getInstalledPermissions(ps.getPackageName()); - // Compute granted permissions only if package has requested permissions -- final Set grantedPermissions = ((flags & PackageManager.GET_PERMISSIONS) == 0 -+ final Set grantedPermissions = (((flags & PackageManager.GET_PERMISSIONS) == 0 -+ && !requestsFakeSignature(p)) - || ArrayUtils.isEmpty(p.getRequestedPermissions())) ? Collections.emptySet() - : mPermissionManager.getGrantedPermissions(ps.getPackageName(), userId); - -- PackageInfo packageInfo = PackageInfoUtils.generate(p, gids, flags, -+ PackageInfo packageInfo = mayFakeSignature(p, PackageInfoUtils.generate(p, gids, flags, - state.getFirstInstallTimeMillis(), ps.getLastUpdateTime(), installedPermissions, -- grantedPermissions, state, userId, ps); -+ grantedPermissions, state, userId, ps), grantedPermissions); - - if (packageInfo == null) { - return null; --- -2.41.0 - diff --git a/frameworks/base/0003-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch b/frameworks/base/0002-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch similarity index 90% rename from frameworks/base/0003-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch rename to frameworks/base/0002-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch index fdafb6f..1d8f58b 100644 --- a/frameworks/base/0003-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch +++ b/frameworks/base/0002-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch @@ -1,7 +1,7 @@ -From 3df53ee5075cc7db5065531a157f97960097cfb3 Mon Sep 17 00:00:00 2001 +From a16e57cffc48223fb6e756b03ebbd16d6d7f1276 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 2 Sep 2022 21:36:06 -0400 -Subject: [PATCH 03/11] FrameworkParsingPackageUtils: Add glob matching support +Subject: [PATCH 02/10] FrameworkParsingPackageUtils: Add glob matching support for properties This is now required in addition to the one in PackageParser in order @@ -13,7 +13,7 @@ Change-Id: Ie8679c0ffe03cead4a68bd2d0eb429f05af2d417 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java b/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java -index 3e1c5bb3d7ec..f15978c57574 100644 +index 153dd9a93490..900151440ca9 100644 --- a/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java +++ b/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java @@ -215,8 +215,16 @@ public class FrameworkParsingPackageUtils { @@ -36,5 +36,5 @@ index 3e1c5bb3d7ec..f15978c57574 100644 } return true; -- -2.41.0 +2.43.1 diff --git a/frameworks/base/0004-Global-VPN-feature-1-2.patch b/frameworks/base/0003-Global-VPN-feature-1-2.patch similarity index 89% rename from frameworks/base/0004-Global-VPN-feature-1-2.patch rename to frameworks/base/0003-Global-VPN-feature-1-2.patch index cab3b05..473451d 100644 --- a/frameworks/base/0004-Global-VPN-feature-1-2.patch +++ b/frameworks/base/0003-Global-VPN-feature-1-2.patch @@ -1,7 +1,7 @@ -From 7b3ac6fb32bc619235aab6d06c2ed356dd684b4d Mon Sep 17 00:00:00 2001 +From 2d871d0c51d43d0c3e4ce15a3f811fd5a9c316ad Mon Sep 17 00:00:00 2001 From: Oliver Scott Date: Thu, 8 Jul 2021 10:41:43 -0400 -Subject: [PATCH 04/11] Global VPN feature [1/2] +Subject: [PATCH 03/10] Global VPN feature [1/2] * Modify existing VPN user range functions to conditionally have traffic from all users pass through the global VPN. @@ -28,10 +28,10 @@ Signed-off-by: Mohammad Hasan Keramat J 3 files changed, 46 insertions(+), 5 deletions(-) diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java -index a55183c0f7c5..faa16d0c8aad 100644 +index 2cc56d838b79..af98f07e9669 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java -@@ -16838,6 +16838,12 @@ public final class Settings { +@@ -17352,6 +17352,12 @@ public final class Settings { CLOCKWORK_HOME_READY, }; @@ -45,7 +45,7 @@ index a55183c0f7c5..faa16d0c8aad 100644 * Keys we no longer back up under the current schema, but want to continue to * process when restoring historical backup datasets. diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java -index 03656f000c07..fddf8167beb5 100644 +index 4a4d4e1f27b2..a5e06164d0b8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java @@ -39,6 +39,7 @@ import android.os.Handler; @@ -72,10 +72,10 @@ index 03656f000c07..fddf8167beb5 100644 mVpnUserId = newUserInfo.restrictedProfileParentId; } else { diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java -index e3262cfbd30b..614628f42e39 100644 +index c5170585a1b3..53d1f6c2c52f 100644 --- a/services/core/java/com/android/server/connectivity/Vpn.java +++ b/services/core/java/com/android/server/connectivity/Vpn.java -@@ -915,6 +915,15 @@ public class Vpn { +@@ -776,6 +776,15 @@ public class Vpn { return mAlwaysOn; } @@ -91,7 +91,7 @@ index e3262cfbd30b..614628f42e39 100644 /** * Checks if a VPN app supports always-on mode. * -@@ -1864,6 +1873,7 @@ public class Vpn { +@@ -1718,6 +1727,7 @@ public class Vpn { try { // Restricted users are not allowed to create VPNs, they are tied to Owner enforceNotRestrictedUser(); @@ -99,7 +99,7 @@ index e3262cfbd30b..614628f42e39 100644 final PackageManager packageManager = mUserIdContext.getPackageManager(); if (packageManager == null) { -@@ -2016,7 +2026,7 @@ public class Vpn { +@@ -1868,7 +1878,7 @@ public class Vpn { addUserToRanges(ranges, userId, allowedApplications, disallowedApplications); // If the user can have restricted profiles, assign all its restricted profiles too @@ -108,7 +108,7 @@ index e3262cfbd30b..614628f42e39 100644 final long token = Binder.clearCallingIdentity(); List users; try { -@@ -2025,7 +2035,8 @@ public class Vpn { +@@ -1877,7 +1887,8 @@ public class Vpn { Binder.restoreCallingIdentity(token); } for (UserInfo user : users) { @@ -118,7 +118,7 @@ index e3262cfbd30b..614628f42e39 100644 addUserToRanges(ranges, user.id, allowedApplications, disallowedApplications); } } -@@ -2106,7 +2117,8 @@ public class Vpn { +@@ -1958,7 +1969,8 @@ public class Vpn { public void onUserAdded(int userId) { // If the user is restricted tie them to the parent user's VPN UserInfo user = mUserManager.getUserInfo(userId); @@ -128,7 +128,7 @@ index e3262cfbd30b..614628f42e39 100644 synchronized(Vpn.this) { final Set> existingRanges = mNetworkCapabilities.getUids(); if (existingRanges != null) { -@@ -2135,7 +2147,8 @@ public class Vpn { +@@ -1987,7 +1999,8 @@ public class Vpn { public void onUserRemoved(int userId) { // clean up if restricted UserInfo user = mUserManager.getUserInfo(userId); @@ -138,7 +138,7 @@ index e3262cfbd30b..614628f42e39 100644 synchronized(Vpn.this) { final Set> existingRanges = mNetworkCapabilities.getUids(); if (existingRanges != null) { -@@ -2580,6 +2593,17 @@ public class Vpn { +@@ -2412,6 +2425,17 @@ public class Vpn { } } @@ -156,15 +156,15 @@ index e3262cfbd30b..614628f42e39 100644 /** * Start legacy VPN, controlling native daemons as needed. Creates a * secondary thread to perform connection work, returning quickly. -@@ -2664,6 +2688,7 @@ public class Vpn { +@@ -2495,6 +2519,7 @@ public class Vpn { new UserHandle(mUserId))) { throw new SecurityException("Restricted users cannot establish VPNs"); } + enforceNotGlobalVpn(); - final RouteInfo ipv4DefaultRoute = findIPv4DefaultRoute(egress); - final String gateway = ipv4DefaultRoute.getGateway().getHostAddress(); -@@ -4621,6 +4646,7 @@ public class Vpn { + // Load certificates. + String privateKey = ""; +@@ -4029,6 +4054,7 @@ public class Vpn { verifyCallingUidAndPackage(packageName); enforceNotRestrictedUser(); @@ -172,7 +172,7 @@ index e3262cfbd30b..614628f42e39 100644 validateRequiredFeatures(profile); if (profile.isRestrictedToTestNetworks) { -@@ -4663,6 +4689,7 @@ public class Vpn { +@@ -4071,6 +4097,7 @@ public class Vpn { verifyCallingUidAndPackage(packageName); enforceNotRestrictedUser(); @@ -180,7 +180,7 @@ index e3262cfbd30b..614628f42e39 100644 final long token = Binder.clearCallingIdentity(); try { -@@ -4732,6 +4759,7 @@ public class Vpn { +@@ -4140,6 +4167,7 @@ public class Vpn { requireNonNull(packageName, "No package name provided"); enforceNotRestrictedUser(); @@ -188,7 +188,7 @@ index e3262cfbd30b..614628f42e39 100644 // Prepare VPN for startup if (!prepare(packageName, null /* newPackage */, VpnManager.TYPE_VPN_PLATFORM)) { -@@ -4856,6 +4884,7 @@ public class Vpn { +@@ -4262,6 +4290,7 @@ public class Vpn { requireNonNull(packageName, "No package name provided"); enforceNotRestrictedUser(); @@ -197,5 +197,5 @@ index e3262cfbd30b..614628f42e39 100644 // To stop the VPN profile, the caller must be the current prepared package and must be // running an Ikev2VpnProfile. -- -2.41.0 +2.43.1 diff --git a/frameworks/base/0006-Dynamically-resize-boot-animation-to-match-screen-si.patch b/frameworks/base/0004-Dynamically-resize-boot-animation-to-match-screen-si.patch similarity index 87% rename from frameworks/base/0006-Dynamically-resize-boot-animation-to-match-screen-si.patch rename to frameworks/base/0004-Dynamically-resize-boot-animation-to-match-screen-si.patch index 4fcd28b..5a3dc12 100644 --- a/frameworks/base/0006-Dynamically-resize-boot-animation-to-match-screen-si.patch +++ b/frameworks/base/0004-Dynamically-resize-boot-animation-to-match-screen-si.patch @@ -1,7 +1,7 @@ -From 37122c75c56d08b1c07d95f1d1ef040a7d9c6564 Mon Sep 17 00:00:00 2001 +From 46413dd5f5d3ea13e25327b95f087b063006887d Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Mon, 20 Dec 2021 15:01:41 -0500 -Subject: [PATCH 06/11] Dynamically resize boot animation to match screen size +Subject: [PATCH 04/10] Dynamically resize boot animation to match screen size Change-Id: I54e49fc6b8c670103852e212d1416e27ff976205 --- @@ -9,10 +9,10 @@ Change-Id: I54e49fc6b8c670103852e212d1416e27ff976205 1 file changed, 22 insertions(+) diff --git a/cmds/bootanimation/BootAnimation.cpp b/cmds/bootanimation/BootAnimation.cpp -index a8b6c0b70804..9c50e954cee5 100644 +index 820d2b0d607e..56dfa8af31c4 100644 --- a/cmds/bootanimation/BootAnimation.cpp +++ b/cmds/bootanimation/BootAnimation.cpp -@@ -605,6 +605,28 @@ status_t BootAnimation::readyToRun() { +@@ -618,6 +618,28 @@ status_t BootAnimation::readyToRun() { mFlingerSurface = s; mTargetInset = -1; @@ -42,5 +42,5 @@ index a8b6c0b70804..9c50e954cee5 100644 // ro.bootanim.set_orientation_. Four values are supported: ORIENTATION_0, // ORIENTATION_90, ORIENTATION_180 and ORIENTATION_270. -- -2.41.0 +2.43.1 diff --git a/frameworks/base/0007-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch b/frameworks/base/0005-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch similarity index 83% rename from frameworks/base/0007-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch rename to frameworks/base/0005-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch index d16a9c8..8f9cbad 100644 --- a/frameworks/base/0007-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch +++ b/frameworks/base/0005-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch @@ -1,7 +1,7 @@ -From 831c7dd6fbb57a3ccd722e5387f811dfd0e21349 Mon Sep 17 00:00:00 2001 +From 4b49ad5b8f7401ec6ae02a4db674721ce10ac4ea Mon Sep 17 00:00:00 2001 From: Andy CrossGate Yan Date: Wed, 2 Aug 2023 20:59:53 +0800 -Subject: [PATCH 07/11] Restore getSimStateForSlotIndex in SubscriptionManager +Subject: [PATCH 05/10] Restore getSimStateForSlotIndex in SubscriptionManager MTK IMS still needs it here @@ -11,10 +11,10 @@ Change-Id: I41bac57c68055f369232359a464642daab94403b 1 file changed, 14 insertions(+) diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java -index 8e4ec0914563..a65a7e9ec2e6 100644 +index 326b6f5af613..b994888362b0 100644 --- a/telephony/java/android/telephony/SubscriptionManager.java +++ b/telephony/java/android/telephony/SubscriptionManager.java -@@ -2558,6 +2558,20 @@ public class SubscriptionManager { +@@ -2693,6 +2693,20 @@ public class SubscriptionManager { return TelephonyManager.getDefault().isNetworkRoaming(subId); } @@ -36,5 +36,5 @@ index 8e4ec0914563..a65a7e9ec2e6 100644 * Set a field in the subscription database. Note not all fields are supported. * -- -2.41.0 +2.43.1 diff --git a/frameworks/base/0005-Revert-Remove-more-FDE-methods-from-StorageManager.patch b/frameworks/base/0005-Revert-Remove-more-FDE-methods-from-StorageManager.patch deleted file mode 100644 index 0a0e909..0000000 --- a/frameworks/base/0005-Revert-Remove-more-FDE-methods-from-StorageManager.patch +++ /dev/null @@ -1,110 +0,0 @@ -From 69e129d654ccc2fb9d364d64fe65e7ea7302f85a Mon Sep 17 00:00:00 2001 -From: Andy CrossGate Yan -Date: Sat, 15 Oct 2022 09:33:56 +0000 -Subject: [PATCH 05/11] 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 ee387e7c284f..0adc55598d9b 100644 ---- a/core/java/android/os/storage/StorageManager.java -+++ b/core/java/android/os/storage/StorageManager.java -@@ -1669,6 +1669,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? - *

-@@ -1702,6 +1711,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.41.0 - diff --git a/frameworks/base/0008-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch b/frameworks/base/0006-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch similarity index 84% rename from frameworks/base/0008-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch rename to frameworks/base/0006-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch index ffd46e5..031aeab 100644 --- a/frameworks/base/0008-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch +++ b/frameworks/base/0006-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch @@ -1,18 +1,18 @@ -From 28cd1a43c63151391142a54fe6c3067a0f40f73b Mon Sep 17 00:00:00 2001 +From 1d03233fbd587b33b92c1017f5682db1a7887692 Mon Sep 17 00:00:00 2001 From: Andy CrossGate Yan Date: Sat, 12 Aug 2023 20:11:17 +0800 -Subject: [PATCH 08/11] Add runWithCleanCallingIdentity variant with both +Subject: [PATCH 06/10] Add runWithCleanCallingIdentity variant with both executor and return value This complements the fixup to ImsPhoneCallTracker (in fw/o/t) for U Change-Id: If444290787025e130dce4bdeaf92372ae32793fe --- - .../telephony/util/TelephonyUtils.java | 32 ++++++++++++++++++- - 1 file changed, 31 insertions(+), 1 deletion(-) + .../telephony/util/TelephonyUtils.java | 30 +++++++++++++++++++ + 1 file changed, 30 insertions(+) diff --git a/telephony/common/com/android/internal/telephony/util/TelephonyUtils.java b/telephony/common/com/android/internal/telephony/util/TelephonyUtils.java -index 9a8c9655375d..454080144d35 100644 +index aed8fb8c4503..1467e7f2fc29 100644 --- a/telephony/common/com/android/internal/telephony/util/TelephonyUtils.java +++ b/telephony/common/com/android/internal/telephony/util/TelephonyUtils.java @@ -42,7 +42,9 @@ import com.android.internal.telephony.ITelephony; @@ -60,13 +60,6 @@ index 9a8c9655375d..454080144d35 100644 /** * Filter values in bundle to only basic types. */ -@@ -319,4 +349,4 @@ public final class TelephonyUtils { - return false; - - } --} -\ No newline at end of file -+} -- -2.41.0 +2.43.1 diff --git a/frameworks/base/0009-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch b/frameworks/base/0007-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch similarity index 88% rename from frameworks/base/0009-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch rename to frameworks/base/0007-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch index e018a96..e0c74fb 100644 --- a/frameworks/base/0009-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch +++ b/frameworks/base/0007-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch @@ -1,7 +1,7 @@ -From 8abbc55bf9452f935c59e869f6713da27fbec24f Mon Sep 17 00:00:00 2001 +From 696e378fac49c9a90032b588dd4bb0887b44452f Mon Sep 17 00:00:00 2001 From: dhacker29 Date: Tue, 24 Nov 2015 01:53:47 -0500 -Subject: [PATCH 09/11] fw/b: Use ro.build.version.incremental to signal OTA +Subject: [PATCH 07/10] fw/b: Use ro.build.version.incremental to signal OTA upgrades Squash of: @@ -85,10 +85,10 @@ index 9e6c91f4ec31..7459b0e05e3a 100644 } try { diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java -index 99c2f8a5cc56..d6b55f9d1e8c 100644 +index a6b532cdef09..7f41474c63f4 100644 --- a/services/core/java/com/android/server/am/UserController.java +++ b/services/core/java/com/android/server/am/UserController.java -@@ -90,6 +90,7 @@ import android.content.pm.UserInfo; +@@ -89,6 +89,7 @@ import android.content.pm.UserInfo; import android.content.pm.UserProperties; import android.os.BatteryStats; import android.os.Binder; @@ -96,7 +96,7 @@ index 99c2f8a5cc56..d6b55f9d1e8c 100644 import android.os.Bundle; import android.os.Debug; import android.os.Handler; -@@ -753,7 +754,7 @@ class UserController implements Handler.Callback { +@@ -774,7 +775,7 @@ class UserController implements Handler.Callback { // purposefully block sending BOOT_COMPLETED until after all // PRE_BOOT receivers are finished to avoid ANR'ing apps final UserInfo info = getUserInfo(userId); @@ -106,10 +106,10 @@ index 99c2f8a5cc56..d6b55f9d1e8c 100644 // Suppress double notifications for managed profiles that // were unlocked automatically as part of their parent user being diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java -index c583f1767b41..912eaafc5b4a 100644 +index bc441b84c58b..68e3f9f73c74 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java -@@ -1616,7 +1616,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService +@@ -1746,7 +1746,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService } PackageManagerService m = new PackageManagerService(injector, factoryTest, @@ -118,7 +118,7 @@ index c583f1767b41..912eaafc5b4a 100644 Build.VERSION.SDK_INT, Build.VERSION.INCREMENTAL); t.traceEnd(); // "create package manager" -@@ -2083,9 +2083,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService +@@ -2225,9 +2225,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService mIsUpgrade = !partitionsFingerprint.equals(ver.fingerprint); if (mIsUpgrade) { @@ -130,7 +130,7 @@ index c583f1767b41..912eaafc5b4a 100644 } mInitAppsHelper = new InitAppsHelper(this, mApexManager, mInstallPackageHelper, -@@ -2222,8 +2221,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService +@@ -2364,8 +2363,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService // allow... it would be nice to have some better way to handle // this situation. if (mIsUpgrade) { @@ -141,7 +141,7 @@ index c583f1767b41..912eaafc5b4a 100644 + "; regranting permissions for internal storage"); } mPermissionManager.onStorageVolumeMounted( -@@ -2243,7 +2242,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService +@@ -2387,7 +2386,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService // across OTAs and are used to drive profile verification (post OTA) and // profile compilation (without waiting to collect a fresh set of profiles). if (mIsUpgrade) { @@ -150,7 +150,7 @@ index c583f1767b41..912eaafc5b4a 100644 for (int i = 0; i < packageSettings.size(); i++) { final PackageSetting ps = packageSettings.valueAt(i); if (Objects.equals(StorageManager.UUID_PRIVATE_INTERNAL, ps.getVolumeUuid())) { -@@ -2255,7 +2254,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService +@@ -2399,7 +2398,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService } } ver.buildFingerprint = Build.FINGERPRINT; @@ -160,10 +160,10 @@ index c583f1767b41..912eaafc5b4a 100644 // Defer the app data fixup until we are done with app data clearing above. diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java -index 677a5d11cc6b..3c7080996875 100644 +index d6952262d82e..d03a3522a67a 100644 --- a/services/core/java/com/android/server/pm/Settings.java +++ b/services/core/java/com/android/server/pm/Settings.java -@@ -465,7 +465,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile +@@ -481,7 +481,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile sdkVersion = Build.VERSION.SDK_INT; databaseVersion = CURRENT_DATABASE_VERSION; buildFingerprint = Build.FINGERPRINT; @@ -172,7 +172,7 @@ index 677a5d11cc6b..3c7080996875 100644 } } -@@ -5732,7 +5732,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile +@@ -5983,7 +5983,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile } private String getExtendedFingerprint(long version) { @@ -182,10 +182,10 @@ index 677a5d11cc6b..3c7080996875 100644 private static long uniformRandom(double low, double high) { diff --git a/services/core/java/com/android/server/pm/ShortcutService.java b/services/core/java/com/android/server/pm/ShortcutService.java -index c6aba2ab9cbe..1aad29efa322 100644 +index 3adeb4b5925f..4895a71c1322 100644 --- a/services/core/java/com/android/server/pm/ShortcutService.java +++ b/services/core/java/com/android/server/pm/ShortcutService.java -@@ -5206,7 +5206,7 @@ public class ShortcutService extends IShortcutService.Stub { +@@ -5208,7 +5208,7 @@ public class ShortcutService extends IShortcutService.Stub { // Injection point. String injectBuildFingerprint() { @@ -195,10 +195,10 @@ index c6aba2ab9cbe..1aad29efa322 100644 final void wtf(String message) { diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java -index d2929aef8a63..ba0b597bb2ce 100644 +index c48eccf2aac5..9033d8ee5e7a 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java -@@ -4889,7 +4889,7 @@ public class UserManagerService extends IUserManager.Stub { +@@ -5100,7 +5100,7 @@ public class UserManagerService extends IUserManager.Stub { userInfo.creationTime = getCreationTime(); userInfo.partial = true; userInfo.preCreated = preCreate; @@ -207,25 +207,25 @@ index d2929aef8a63..ba0b597bb2ce 100644 if (userTypeDetails.hasBadge() && parentId != UserHandle.USER_NULL) { userInfo.profileBadge = getFreeProfileBadgeLU(parentId, userType); } -@@ -6219,7 +6219,7 @@ public class UserManagerService extends IUserManager.Stub { +@@ -6401,7 +6401,7 @@ public class UserManagerService extends IUserManager.Stub { + TimingsTraceAndSlog t = new TimingsTraceAndSlog(); t.traceBegin("onBeforeStartUser-" + userId); - final int userSerial = userInfo.serialNumber; // Migrate only if build fingerprints mismatch - boolean migrateAppsData = !PackagePartitions.FINGERPRINT.equals( + boolean migrateAppsData = !Build.VERSION.INCREMENTAL.equals( userInfo.lastLoggedInFingerprint); t.traceBegin("prepareUserData"); - mUserDataPreparer.prepareUserData(userId, userSerial, StorageManager.FLAG_STORAGE_DE); -@@ -6250,7 +6250,7 @@ public class UserManagerService extends IUserManager.Stub { + mUserDataPreparer.prepareUserData(userInfo, StorageManager.FLAG_STORAGE_DE); +@@ -6431,7 +6431,7 @@ public class UserManagerService extends IUserManager.Stub { + return; } - final int userSerial = userInfo.serialNumber; // Migrate only if build fingerprints mismatch - boolean migrateAppsData = !PackagePartitions.FINGERPRINT.equals( + boolean migrateAppsData = !Build.VERSION.INCREMENTAL.equals( userInfo.lastLoggedInFingerprint); final TimingsTraceAndSlog t = new TimingsTraceAndSlog(); -@@ -6295,7 +6295,7 @@ public class UserManagerService extends IUserManager.Stub { +@@ -6476,7 +6476,7 @@ public class UserManagerService extends IUserManager.Stub { if (now > EPOCH_PLUS_30_YEARS) { userData.info.lastLoggedInTime = now; } @@ -235,5 +235,5 @@ index d2929aef8a63..ba0b597bb2ce 100644 } -- -2.41.0 +2.43.1 diff --git a/frameworks/base/0010-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch b/frameworks/base/0008-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch similarity index 92% rename from frameworks/base/0010-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch rename to frameworks/base/0008-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch index 871fc89..5a271e5 100644 --- a/frameworks/base/0010-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch +++ b/frameworks/base/0008-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch @@ -1,7 +1,7 @@ -From f35f1213d1221cde06ee24956649e5ecb4ac5277 Mon Sep 17 00:00:00 2001 +From eeeb323b495245354be3b98089a430ee04f67ae5 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 9 Dec 2023 18:37:08 -0500 -Subject: [PATCH 10/11] Revert "Convert BubbleDataRepositoryTest to use +Subject: [PATCH 08/10] Revert "Convert BubbleDataRepositoryTest to use mockito-kotlin" This reverts commit 625a23ff22f0a9327b9a24341dfa0b8fbaf61a1b. @@ -11,16 +11,16 @@ This reverts commit 625a23ff22f0a9327b9a24341dfa0b8fbaf61a1b. 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/libs/WindowManager/Shell/tests/unittest/Android.bp b/libs/WindowManager/Shell/tests/unittest/Android.bp -index c2f184a03380..ad4d97f6fe40 100644 +index aadadd604d3e..70106c3d41b4 100644 --- a/libs/WindowManager/Shell/tests/unittest/Android.bp +++ b/libs/WindowManager/Shell/tests/unittest/Android.bp -@@ -43,7 +43,6 @@ android_test { +@@ -44,7 +44,6 @@ android_test { "frameworks-base-testutils", "kotlinx-coroutines-android", "kotlinx-coroutines-core", - "mockito-kotlin2", "mockito-target-extended-minus-junit4", - "truth-prebuilt", + "truth", "testables", diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleDataRepositoryTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleDataRepositoryTest.kt index e35995775f76..0e05e01a8da3 100644 @@ -71,5 +71,5 @@ index e35995775f76..0e05e01a8da3 100644 } \ No newline at end of file -- -2.41.0 +2.43.1 diff --git a/frameworks/base/0011-FingerprintService-Do-not-use-HIDL-providers-when-AI.patch b/frameworks/base/0009-FingerprintService-Do-not-use-HIDL-providers-when-AI.patch similarity index 85% rename from frameworks/base/0011-FingerprintService-Do-not-use-HIDL-providers-when-AI.patch rename to frameworks/base/0009-FingerprintService-Do-not-use-HIDL-providers-when-AI.patch index a4b1b7a..2af5671 100644 --- a/frameworks/base/0011-FingerprintService-Do-not-use-HIDL-providers-when-AI.patch +++ b/frameworks/base/0009-FingerprintService-Do-not-use-HIDL-providers-when-AI.patch @@ -1,7 +1,7 @@ -From 3d3312bd96d2c8a74e4a27b5567a24f92ad8d243 Mon Sep 17 00:00:00 2001 +From 9c7aba6023ca7fe010300d1c92af0c9e461afd10 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 15 Dec 2023 22:48:39 -0500 -Subject: [PATCH 11/11] FingerprintService: Do not use HIDL providers when AIDL +Subject: [PATCH 09/10] FingerprintService: Do not use HIDL providers when AIDL is present This fixes duplicated sensor ID when config_biometric_sensors is defined @@ -13,10 +13,10 @@ Change-Id: I9942e91a95106a7a11ab7ddf145d87562d1b7c0d 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java -index 5ce0c8b384ef..a4e4a1b347d3 100644 +index 83b306b07c27..7f144a0f615f 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java -@@ -885,8 +885,9 @@ public class FingerprintService extends SystemService { +@@ -889,8 +889,9 @@ public class FingerprintService extends SystemService { filteredInstances = filterAvailableHalInstances(hidlSensors, aidlSensors); final List providers = new ArrayList<>(); @@ -28,5 +28,5 @@ index 5ce0c8b384ef..a4e4a1b347d3 100644 return providers; }); -- -2.41.0 +2.43.1 diff --git a/frameworks/base/0010-Allow-signature-spoofing-for-microG-Companion-Servic.patch b/frameworks/base/0010-Allow-signature-spoofing-for-microG-Companion-Servic.patch new file mode 100644 index 0000000..7463878 --- /dev/null +++ b/frameworks/base/0010-Allow-signature-spoofing-for-microG-Companion-Servic.patch @@ -0,0 +1,130 @@ +From ae82395ce31a35c73b817fc25b8b7d5f96c32770 Mon Sep 17 00:00:00 2001 +From: LuK1337 +Date: Mon, 19 Feb 2024 16:20:04 +0100 +Subject: [PATCH 10/10] Allow signature spoofing for microG Companion/Services + +This patch enables signature spoofing when the following conditions are +met: +* Build is debuggable (userdebug/eng) +* Package name is com.android.vending or com.google.android.gms +* Package is signed with microG release keys +* Fake signature is correct + +Additionally, we let these apps be forceQueryable if they so desire. + +phh change: No need to be debuggable + +Change-Id: I8fc82ed266a2cc59636b662c7ea7e29c94f509b5 +--- + .../com/android/server/pm/AppsFilterImpl.java | 2 + + .../com/android/server/pm/ComputerEngine.java | 46 +++++++++++++++++++ + 2 files changed, 48 insertions(+) + +diff --git a/services/core/java/com/android/server/pm/AppsFilterImpl.java b/services/core/java/com/android/server/pm/AppsFilterImpl.java +index 82622d9a4ea8..277c9abe2e1c 100644 +--- a/services/core/java/com/android/server/pm/AppsFilterImpl.java ++++ b/services/core/java/com/android/server/pm/AppsFilterImpl.java +@@ -36,6 +36,7 @@ import static com.android.server.pm.AppsFilterUtils.canQueryAsUpdateOwner; + import static com.android.server.pm.AppsFilterUtils.canQueryViaComponents; + import static com.android.server.pm.AppsFilterUtils.canQueryViaPackage; + import static com.android.server.pm.AppsFilterUtils.canQueryViaUsesLibrary; ++import static com.android.server.pm.ComputerEngine.isMicrogSigned; + + import android.annotation.NonNull; + import android.annotation.Nullable; +@@ -599,6 +600,7 @@ public final class AppsFilterImpl extends AppsFilterLocked implements Watchable, + newIsForceQueryable = mForceQueryable.contains(newPkgSetting.getAppId()) + /* shared user that is already force queryable */ + || newPkgSetting.isForceQueryableOverride() /* adb override */ ++ || (newPkg.isForceQueryable() && isMicrogSigned(newPkg)) + || (newPkgSetting.isSystem() && (mSystemAppsQueryable + || newPkg.isForceQueryable() + || ArrayUtils.contains(mForceQueryableByDevicePackageNames, +diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java +index 3cb2420cd223..b0d9be30edc1 100644 +--- a/services/core/java/com/android/server/pm/ComputerEngine.java ++++ b/services/core/java/com/android/server/pm/ComputerEngine.java +@@ -100,6 +100,7 @@ import android.content.pm.UserPackage; + import android.content.pm.VersionedPackage; + import android.os.Binder; + import android.os.Build; ++import android.os.Bundle; + import android.os.IBinder; + import android.os.ParcelableException; + import android.os.PatternMatcher; +@@ -172,6 +173,7 @@ import java.util.Collections; + import java.util.Comparator; + import java.util.List; + import java.util.Objects; ++import java.util.Optional; + import java.util.Set; + import java.util.UUID; + +@@ -421,6 +423,10 @@ public class ComputerEngine implements Computer { + private final PackageManagerInternal.ExternalSourcesPolicy mExternalSourcesPolicy; + private final CrossProfileIntentResolverEngine mCrossProfileIntentResolverEngine; + ++ // Signatures used by microG ++ private static final Signature MICROG_FAKE_SIGNATURE = new Signature("308204433082032ba003020102020900c2e08746644a308d300d06092a864886f70d01010405003074310b3009060355040613025553311330110603550408130a43616c69666f726e6961311630140603550407130d4d6f756e7461696e205669657731143012060355040a130b476f6f676c6520496e632e3110300e060355040b1307416e64726f69643110300e06035504031307416e64726f6964301e170d3038303832313233313333345a170d3336303130373233313333345a3074310b3009060355040613025553311330110603550408130a43616c69666f726e6961311630140603550407130d4d6f756e7461696e205669657731143012060355040a130b476f6f676c6520496e632e3110300e060355040b1307416e64726f69643110300e06035504031307416e64726f696430820120300d06092a864886f70d01010105000382010d00308201080282010100ab562e00d83ba208ae0a966f124e29da11f2ab56d08f58e2cca91303e9b754d372f640a71b1dcb130967624e4656a7776a92193db2e5bfb724a91e77188b0e6a47a43b33d9609b77183145ccdf7b2e586674c9e1565b1f4c6a5955bff251a63dabf9c55c27222252e875e4f8154a645f897168c0b1bfc612eabf785769bb34aa7984dc7e2ea2764cae8307d8c17154d7ee5f64a51a44a602c249054157dc02cd5f5c0e55fbef8519fbe327f0b1511692c5a06f19d18385f5c4dbc2d6b93f68cc2979c70e18ab93866b3bd5db8999552a0e3b4c99df58fb918bedc182ba35e003c1b4b10dd244a8ee24fffd333872ab5221985edab0fc0d0b145b6aa192858e79020103a381d93081d6301d0603551d0e04160414c77d8cc2211756259a7fd382df6be398e4d786a53081a60603551d2304819e30819b8014c77d8cc2211756259a7fd382df6be398e4d786a5a178a4763074310b3009060355040613025553311330110603550408130a43616c69666f726e6961311630140603550407130d4d6f756e7461696e205669657731143012060355040a130b476f6f676c6520496e632e3110300e060355040b1307416e64726f69643110300e06035504031307416e64726f6964820900c2e08746644a308d300c0603551d13040530030101ff300d06092a864886f70d010104050003820101006dd252ceef85302c360aaace939bcff2cca904bb5d7a1661f8ae46b2994204d0ff4a68c7ed1a531ec4595a623ce60763b167297a7ae35712c407f208f0cb109429124d7b106219c084ca3eb3f9ad5fb871ef92269a8be28bf16d44c8d9a08e6cb2f005bb3fe2cb96447e868e731076ad45b33f6009ea19c161e62641aa99271dfd5228c5c587875ddb7f452758d661f6cc0cccb7352e424cc4365c523532f7325137593c4ae341f4db41edda0d0b1071a7c440f0fe9ea01cb627ca674369d084bd2fd911ff06cdbf2cfa10dc0f893ae35762919048c7efc64c7144178342f70581c9de573af55b390dd7fdb9418631895d5f759f30112687ff621410c069308a"); ++ private static final Signature MICROG_REAL_SIGNATURE = new Signature("308202ed308201d5a003020102020426ffa009300d06092a864886f70d01010b05003027310b300906035504061302444531183016060355040a130f4e4f47415050532050726f6a656374301e170d3132313030363132303533325a170d3337303933303132303533325a3027310b300906035504061302444531183016060355040a130f4e4f47415050532050726f6a65637430820122300d06092a864886f70d01010105000382010f003082010a02820101009a8d2a5336b0eaaad89ce447828c7753b157459b79e3215dc962ca48f58c2cd7650df67d2dd7bda0880c682791f32b35c504e43e77b43c3e4e541f86e35a8293a54fb46e6b16af54d3a4eda458f1a7c8bc1b7479861ca7043337180e40079d9cdccb7e051ada9b6c88c9ec635541e2ebf0842521c3024c826f6fd6db6fd117c74e859d5af4db04448965ab5469b71ce719939a06ef30580f50febf96c474a7d265bb63f86a822ff7b643de6b76e966a18553c2858416cf3309dd24278374bdd82b4404ef6f7f122cec93859351fc6e5ea947e3ceb9d67374fe970e593e5cd05c905e1d24f5a5484f4aadef766e498adf64f7cf04bddd602ae8137b6eea40722d0203010001a321301f301d0603551d0e04160414110b7aa9ebc840b20399f69a431f4dba6ac42a64300d06092a864886f70d01010b0500038201010007c32ad893349cf86952fb5a49cfdc9b13f5e3c800aece77b2e7e0e9c83e34052f140f357ec7e6f4b432dc1ed542218a14835acd2df2deea7efd3fd5e8f1c34e1fb39ec6a427c6e6f4178b609b369040ac1f8844b789f3694dc640de06e44b247afed11637173f36f5886170fafd74954049858c6096308fc93c1bc4dd5685fa7a1f982a422f2a3b36baa8c9500474cf2af91c39cbec1bc898d10194d368aa5e91f1137ec115087c31962d8f76cd120d28c249cf76f4c70f5baa08c70a7234ce4123be080cee789477401965cfe537b924ef36747e8caca62dfefdd1a6288dcb1c4fd2aaa6131a7ad254e9742022cfd597d2ca5c660ce9e41ff537e5a4041e37"); ++ + // PackageManagerService attributes that are primitives are referenced through the + // pms object directly. Primitives are the only attributes so referenced. + protected final PackageManagerService mService; +@@ -1463,6 +1469,42 @@ public class ComputerEngine implements Computer { + return result; + } + ++ public static boolean isMicrogSigned(AndroidPackage p) { ++ // Allowlist the following apps: ++ // * com.android.vending - microG Companion ++ // * com.google.android.gms - microG Services ++ if (!p.getPackageName().equals("com.android.vending") && ++ !p.getPackageName().equals("com.google.android.gms")) { ++ return false; ++ } ++ return Signature.areExactMatch( ++ p.getSigningDetails(), new Signature[]{MICROG_REAL_SIGNATURE}); ++ } ++ ++ private static Optional generateFakeSignature(AndroidPackage p) { ++ if (!isMicrogSigned(p)) { ++ return Optional.empty(); ++ } ++ ++ Bundle metadata = p.getMetaData(); ++ if (metadata == null) { ++ return Optional.empty(); ++ } ++ ++ String fakeSignatureStr = metadata.getString("fake-signature"); ++ if (TextUtils.isEmpty(fakeSignatureStr)) { ++ return Optional.empty(); ++ } ++ ++ // Only MICROG_FAKE_SIGNATURE can be faked ++ Signature fakeSignature = new Signature(fakeSignatureStr); ++ if (!fakeSignature.equals(MICROG_FAKE_SIGNATURE)) { ++ return Optional.empty(); ++ } ++ ++ return Optional.of(fakeSignature); ++ } ++ + public final PackageInfo generatePackageInfo(PackageStateInternal ps, + @PackageManager.PackageInfoFlagsBits long flags, int userId) { + if (!mUserManager.exists(userId)) return null; +@@ -1511,6 +1553,10 @@ public class ComputerEngine implements Computer { + packageInfo.packageName = packageInfo.applicationInfo.packageName = + resolveExternalPackageName(p); + ++ generateFakeSignature(p).ifPresent(fakeSignature -> { ++ packageInfo.signatures = new Signature[]{fakeSignature}; ++ }); ++ + return packageInfo; + } else if ((flags & (MATCH_UNINSTALLED_PACKAGES | MATCH_ARCHIVED_PACKAGES)) != 0 + && PackageUserStateUtils.isAvailable(state, flags)) { +-- +2.43.1 + diff --git a/frameworks/opt/telephony/0001-Reintroduce-public-void-TelephonyMetrics.writeRilSen.patch b/frameworks/opt/telephony/0001-Reintroduce-public-void-TelephonyMetrics.writeRilSen.patch index c7c6822..c36dff6 100644 --- a/frameworks/opt/telephony/0001-Reintroduce-public-void-TelephonyMetrics.writeRilSen.patch +++ b/frameworks/opt/telephony/0001-Reintroduce-public-void-TelephonyMetrics.writeRilSen.patch @@ -1,7 +1,7 @@ -From d8c305abadf223aef7237029d9b58c6756922a7d Mon Sep 17 00:00:00 2001 +From ab08eec99a802be5014b876823cab89c2d2e9ef6 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 1/5] Reintroduce 'public void +Subject: [PATCH 1/4] 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) @@ -42,5 +42,5 @@ index 3fdbfe0ed7..fb8011c3df 100644 * Write Send SMS event using ImsService. Expecting response from * {@link #writeOnSmsSolicitedResponse}. -- -2.41.0 +2.43.1 diff --git a/frameworks/opt/telephony/0003-Fix-baseband-being-too-long-to-fit-into-a-91-chars-p.patch b/frameworks/opt/telephony/0002-Fix-baseband-being-too-long-to-fit-into-a-91-chars-p.patch similarity index 83% rename from frameworks/opt/telephony/0003-Fix-baseband-being-too-long-to-fit-into-a-91-chars-p.patch rename to frameworks/opt/telephony/0002-Fix-baseband-being-too-long-to-fit-into-a-91-chars-p.patch index a7f9bd6..0426c7b 100644 --- a/frameworks/opt/telephony/0003-Fix-baseband-being-too-long-to-fit-into-a-91-chars-p.patch +++ b/frameworks/opt/telephony/0002-Fix-baseband-being-too-long-to-fit-into-a-91-chars-p.patch @@ -1,7 +1,7 @@ -From 2861b7ed720286f3a69782d4fc18128e742d8949 Mon Sep 17 00:00:00 2001 +From ca7d875358b275da98fcd55d583a9121bb68f309 Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Mon, 6 Dec 2021 16:28:22 -0500 -Subject: [PATCH 3/5] Fix baseband being too long to fit into a 91 chars +Subject: [PATCH 2/4] Fix baseband being too long to fit into a 91 chars property, preventing telephony subsystem from starting Change-Id: I1762e4a8cc137626be89f350229d6be162bdaf57 @@ -10,10 +10,10 @@ Change-Id: I1762e4a8cc137626be89f350229d6be162bdaf57 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java/com/android/internal/telephony/GsmCdmaPhone.java b/src/java/com/android/internal/telephony/GsmCdmaPhone.java -index 5eae06112c..d5302413bc 100644 +index 620b8711e2..951ef23115 100644 --- a/src/java/com/android/internal/telephony/GsmCdmaPhone.java +++ b/src/java/com/android/internal/telephony/GsmCdmaPhone.java -@@ -3282,7 +3282,7 @@ public class GsmCdmaPhone extends Phone { +@@ -3373,7 +3373,7 @@ public class GsmCdmaPhone extends Phone { String version = (String)ar.result; if (version != null) { int length = version.length(); @@ -23,5 +23,5 @@ index 5eae06112c..d5302413bc 100644 length <= MAX_VERSION_LEN ? version : version.substring(length - MAX_VERSION_LEN, length)); -- -2.41.0 +2.43.1 diff --git a/frameworks/opt/telephony/0002-Pass-correct-value-to-setPreferredNetworkType-for-RI.patch b/frameworks/opt/telephony/0002-Pass-correct-value-to-setPreferredNetworkType-for-RI.patch deleted file mode 100644 index 7eba6ed..0000000 --- a/frameworks/opt/telephony/0002-Pass-correct-value-to-setPreferredNetworkType-for-RI.patch +++ /dev/null @@ -1,53 +0,0 @@ -From b299cb6cb26268d1a0a58b8df42ea334d7bdc950 Mon Sep 17 00:00:00 2001 -From: LuK1337 -Date: Fri, 21 Oct 2022 20:55:05 +0200 -Subject: [PATCH 2/5] Pass correct value to setPreferredNetworkType() for RIL - version < 1.4 - -Change-Id: Id14be66a2ea4e85b6504bc03fd7d2f038185c17d ---- - src/java/com/android/internal/telephony/RIL.java | 3 ++- - .../com/android/internal/telephony/RadioNetworkProxy.java | 5 +++-- - 2 files changed, 5 insertions(+), 3 deletions(-) - -diff --git a/src/java/com/android/internal/telephony/RIL.java b/src/java/com/android/internal/telephony/RIL.java -index 5ecdfcbbd4..174b89c141 100644 ---- a/src/java/com/android/internal/telephony/RIL.java -+++ b/src/java/com/android/internal/telephony/RIL.java -@@ -3027,7 +3027,8 @@ public class RIL extends BaseCommands implements CommandsInterface { - mMetrics.writeSetPreferredNetworkType(mPhoneId, networkType); - - try { -- networkProxy.setPreferredNetworkTypeBitmap(rr.mSerial, mAllowedNetworkTypesBitmask); -+ networkProxy.setPreferredNetworkTypeBitmap( -+ rr.mSerial, mAllowedNetworkTypesBitmask, networkType); - } catch (RemoteException | RuntimeException e) { - handleRadioProxyExceptionForRR(HAL_SERVICE_NETWORK, "setPreferredNetworkType", e); - } -diff --git a/src/java/com/android/internal/telephony/RadioNetworkProxy.java b/src/java/com/android/internal/telephony/RadioNetworkProxy.java -index 246c2e0204..2e352a96b4 100644 ---- a/src/java/com/android/internal/telephony/RadioNetworkProxy.java -+++ b/src/java/com/android/internal/telephony/RadioNetworkProxy.java -@@ -389,16 +389,17 @@ public class RadioNetworkProxy extends RadioServiceProxy { - * Call IRadioNetwork#setPreferredNetworkTypeBitmap - * @param serial Serial number of request - * @param networkTypesBitmask Preferred network types bitmask to set -+ * @param networkType Preferred network type to set for RIL version < 1.4 - * @throws RemoteException - */ -- public void setPreferredNetworkTypeBitmap(int serial, int networkTypesBitmask) -+ public void setPreferredNetworkTypeBitmap(int serial, int networkTypesBitmask, int networkType) - throws RemoteException { - if (isEmpty() || mHalVersion.greaterOrEqual(RIL.RADIO_HAL_VERSION_1_6)) return; - if (mHalVersion.greaterOrEqual(RIL.RADIO_HAL_VERSION_1_4)) { - ((android.hardware.radio.V1_4.IRadio) mRadioProxy).setPreferredNetworkTypeBitmap(serial, - RILUtils.convertToHalRadioAccessFamily(networkTypesBitmask)); - } else { -- mRadioProxy.setPreferredNetworkType(serial, networkTypesBitmask); -+ mRadioProxy.setPreferredNetworkType(serial, networkType); - } - } - --- -2.41.0 - diff --git a/frameworks/opt/telephony/0004-Conditionally-revert-Block-Binder-thread-until-incom.patch b/frameworks/opt/telephony/0003-Conditionally-revert-Block-Binder-thread-until-incom.patch similarity index 91% rename from frameworks/opt/telephony/0004-Conditionally-revert-Block-Binder-thread-until-incom.patch rename to frameworks/opt/telephony/0003-Conditionally-revert-Block-Binder-thread-until-incom.patch index 8870493..eb703a0 100644 --- a/frameworks/opt/telephony/0004-Conditionally-revert-Block-Binder-thread-until-incom.patch +++ b/frameworks/opt/telephony/0003-Conditionally-revert-Block-Binder-thread-until-incom.patch @@ -1,7 +1,7 @@ -From ec5993b869fc758bd48c1636ee009bad8d4205bf Mon Sep 17 00:00:00 2001 +From 8a28ea8c3ecb378dba2aff1d93e87095d71df873 Mon Sep 17 00:00:00 2001 From: ExactExampl Date: Tue, 11 Oct 2022 12:38:00 +0300 -Subject: [PATCH 4/5] Conditionally revert "Block Binder thread until incoming +Subject: [PATCH 3/4] Conditionally revert "Block Binder thread until incoming call process completes" * Legacy IMS packages handling incoming calls in such a way that @@ -17,7 +17,7 @@ Change-Id: I55a8f3bbca4a2b9a6bc7511e9fe2d0884a8818e5 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java -index c3ee0f6060..f11b921c08 100644 +index e95433c2ee..7e4fdf6b41 100644 --- a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java +++ b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java @@ -70,6 +70,7 @@ import android.os.Registrant; @@ -28,7 +28,7 @@ index c3ee0f6060..f11b921c08 100644 import android.preference.PreferenceManager; import android.provider.Settings; import android.sysprop.TelephonyProperties; -@@ -385,7 +386,19 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { +@@ -389,7 +390,19 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { @Nullable public IImsCallSessionListener onIncomingCall( @NonNull IImsCallSession c, @Nullable String callId, @Nullable Bundle extras) { @@ -50,5 +50,5 @@ index c3ee0f6060..f11b921c08 100644 @Override -- -2.41.0 +2.43.1 diff --git a/frameworks/opt/telephony/0005-SubscriptionController-Do-not-override-default-calli.patch b/frameworks/opt/telephony/0004-SubscriptionController-Do-not-override-default-calli.patch similarity index 90% rename from frameworks/opt/telephony/0005-SubscriptionController-Do-not-override-default-calli.patch rename to frameworks/opt/telephony/0004-SubscriptionController-Do-not-override-default-calli.patch index 32fe8b6..391932b 100644 --- a/frameworks/opt/telephony/0005-SubscriptionController-Do-not-override-default-calli.patch +++ b/frameworks/opt/telephony/0004-SubscriptionController-Do-not-override-default-calli.patch @@ -1,7 +1,7 @@ -From 2685c843046fcfb12b42f530ed4d5b8fa28cdc9e Mon Sep 17 00:00:00 2001 +From d7626b9015a9505c225254dcf36e5472f4c4e4a8 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Mon, 5 Sep 2022 14:02:37 -0400 -Subject: [PATCH 5/5] SubscriptionController: Do not override default calling +Subject: [PATCH 4/4] SubscriptionController: Do not override default calling account from third-party apps When the user has selected a calling account from a third-party app as @@ -18,10 +18,10 @@ Change-Id: Iccab64e9b3b3ab4773bd8944d47c2006f229d472 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java b/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java -index 8e773c072d..1efe9ba3b4 100644 +index a8d05a334b..42310ccc3f 100644 --- a/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java +++ b/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java -@@ -78,6 +78,7 @@ import android.util.Base64; +@@ -81,6 +81,7 @@ import android.util.Base64; import android.util.EventLog; import android.util.IndentingPrintWriter; import android.util.LocalLog; @@ -29,7 +29,7 @@ index 8e773c072d..1efe9ba3b4 100644 import com.android.internal.R; import com.android.internal.annotations.VisibleForTesting; -@@ -2839,7 +2840,22 @@ public class SubscriptionManagerService extends ISub.Stub { +@@ -3023,7 +3024,22 @@ public class SubscriptionManagerService extends ISub.Stub { TelecomManager telecomManager = mContext.getSystemService(TelecomManager.class); if (telecomManager != null) { @@ -54,5 +54,5 @@ index 8e773c072d..1efe9ba3b4 100644 updateDefaultSubId(); -- -2.41.0 +2.43.1 diff --git a/packages/apps/Launcher3/0001-Expose-themed-icon-setting-in-ThemePicker.patch b/packages/apps/Launcher3/0001-Expose-themed-icon-setting-in-ThemePicker.patch index 854ac44..a62384f 100644 --- a/packages/apps/Launcher3/0001-Expose-themed-icon-setting-in-ThemePicker.patch +++ b/packages/apps/Launcher3/0001-Expose-themed-icon-setting-in-ThemePicker.patch @@ -1,4 +1,4 @@ -From 079ec0124a642a3a473697c23da5907380930dd0 Mon Sep 17 00:00:00 2001 +From ab27acf28b7e01c2fe9933849eaeb1622f5dfb6a Mon Sep 17 00:00:00 2001 From: Danny Lin Date: Mon, 11 Oct 2021 20:48:44 -0700 Subject: [PATCH 1/3] Expose themed icon setting in ThemePicker @@ -38,5 +38,5 @@ index c6e2d8cb74..1d7405e345 100644 -- -2.41.0 +2.43.1 diff --git a/packages/apps/Launcher3/0002-Properly-expose-GridCustomizationsProvider.patch b/packages/apps/Launcher3/0002-Properly-expose-GridCustomizationsProvider.patch index 2c628ca..f5eb255 100644 --- a/packages/apps/Launcher3/0002-Properly-expose-GridCustomizationsProvider.patch +++ b/packages/apps/Launcher3/0002-Properly-expose-GridCustomizationsProvider.patch @@ -1,4 +1,4 @@ -From f3f90de4d2440dcff4fab813b45862a9912bccf4 Mon Sep 17 00:00:00 2001 +From 910c5a085260dfd33a0a2377b03a3c0eeb647cc5 Mon Sep 17 00:00:00 2001 From: Luca Stefani Date: Fri, 1 Nov 2019 23:17:59 +0100 Subject: [PATCH 2/3] Properly expose GridCustomizationsProvider @@ -9,10 +9,10 @@ Change-Id: I8268a215257ae0e399c56ac8b44cdfdff8cc92a0 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/AndroidManifest-common.xml b/AndroidManifest-common.xml -index 14605d8053..89ebe026f9 100644 +index 7e824ec15c..b87972e0ac 100644 --- a/AndroidManifest-common.xml +++ b/AndroidManifest-common.xml -@@ -137,7 +137,9 @@ +@@ -138,7 +138,9 @@ Date: Fri, 7 Jul 2023 18:13:32 -0400 Subject: [PATCH 3/3] Disable QSB in BuildConfig @@ -9,7 +9,7 @@ Change-Id: I3150ef1d9b8c161ed2a6569d1ae75bba0060b36f 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src_build_config/com/android/launcher3/BuildConfig.java b/src_build_config/com/android/launcher3/BuildConfig.java -index 1f2e0e5387..ab6c528580 100644 +index 3841969e9d..ae151abe75 100644 --- a/src_build_config/com/android/launcher3/BuildConfig.java +++ b/src_build_config/com/android/launcher3/BuildConfig.java @@ -24,7 +24,7 @@ public final class BuildConfig { @@ -20,7 +20,7 @@ index 1f2e0e5387..ab6c528580 100644 + public static final boolean QSB_ON_FIRST_SCREEN = false; /** - * Flag to control various developer centric features + * Flag to state if the widget on the top of the first screen should be shown. -- -2.41.0 +2.43.1 diff --git a/packages/apps/Settings/0001-Global-VPN-feature-2-2.patch b/packages/apps/Settings/0001-Global-VPN-feature-2-2.patch index cf646b4..444a88d 100644 --- a/packages/apps/Settings/0001-Global-VPN-feature-2-2.patch +++ b/packages/apps/Settings/0001-Global-VPN-feature-2-2.patch @@ -1,4 +1,4 @@ -From a70d53f488f7cfc9e5296df4fbc23e1c8a3955b3 Mon Sep 17 00:00:00 2001 +From 22b752c0770f00c92ad91ab2c17b52a1c2c651a9 Mon Sep 17 00:00:00 2001 From: Oliver Scott Date: Thu, 8 Jul 2021 10:40:49 -0400 Subject: [PATCH] Global VPN feature [2/2] @@ -15,13 +15,13 @@ Signed-off-by: Mohammad Hasan Keramat J 3 files changed, 59 insertions(+), 1 deletion(-) diff --git a/res/values/strings.xml b/res/values/strings.xml -index fa79cbbb33..d14a25abd1 100644 +index 630aeed0049..20902850060 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml -@@ -12129,4 +12129,10 @@ - - - "This app can only be opened in 1 window" +@@ -12633,4 +12633,10 @@ + + + + + + Global VPN @@ -30,7 +30,7 @@ index fa79cbbb33..d14a25abd1 100644 + You need to disable all active VPN connections first to enable this diff --git a/res/xml/vpn_app_management.xml b/res/xml/vpn_app_management.xml -index dffbbbe311..93df378fd7 100644 +index dffbbbe3116..93df378fd76 100644 --- a/res/xml/vpn_app_management.xml +++ b/res/xml/vpn_app_management.xml @@ -23,6 +23,12 @@ @@ -47,7 +47,7 @@ index dffbbbe311..93df378fd7 100644 android:key="always_on_vpn" android:title="@string/vpn_menu_lockdown" diff --git a/src/com/android/settings/vpn2/AppManagementFragment.java b/src/com/android/settings/vpn2/AppManagementFragment.java -index 7d17541fd9..260d3ad94d 100644 +index 1d5b3cc6d51..c1180ea1a8e 100644 --- a/src/com/android/settings/vpn2/AppManagementFragment.java +++ b/src/com/android/settings/vpn2/AppManagementFragment.java @@ -28,10 +28,12 @@ import android.content.pm.ApplicationInfo; @@ -88,7 +88,7 @@ index 7d17541fd9..260d3ad94d 100644 private RestrictedSwitchPreference mPreferenceLockdown; private RestrictedPreference mPreferenceForget; @@ -126,10 +131,16 @@ public class AppManagementFragment extends SettingsPreferenceFragment - mFeatureProvider = FeatureFactory.getFactory(getContext()).getAdvancedVpnFeatureProvider(); + mFeatureProvider = FeatureFactory.getFeatureFactory().getAdvancedVpnFeatureProvider(); mPreferenceVersion = findPreference(KEY_VERSION); + mPreferenceGlobal = (SwitchPreference) findPreference(KEY_GLOBAL_VPN); @@ -177,5 +177,5 @@ index 7d17541fd9..260d3ad94d 100644 private static final String TAG = "CannotConnect"; private static final String ARG_VPN_LABEL = "label"; -- -2.41.0 +2.43.1 diff --git a/packages/apps/ThemePicker/0001-Add-wallpaper-privapp-whitelist.patch b/packages/apps/ThemePicker/0001-Add-wallpaper-privapp-whitelist.patch index a6c4777..b375179 100644 --- a/packages/apps/ThemePicker/0001-Add-wallpaper-privapp-whitelist.patch +++ b/packages/apps/ThemePicker/0001-Add-wallpaper-privapp-whitelist.patch @@ -1,26 +1,25 @@ -From 1752966cf96e7c037db368e62f93233b5905ed64 Mon Sep 17 00:00:00 2001 +From d5cd47a4f197ab1d30b3ab03adfa27a602e94d70 Mon Sep 17 00:00:00 2001 From: Luca Stefani Date: Fri, 1 Nov 2019 21:14:29 +0100 -Subject: [PATCH 1/5] Add wallpaper privapp whitelist +Subject: [PATCH 1/4] Add wallpaper privapp whitelist Change-Id: I044b1d9201ac0b8780fc37a387f401f3dd0ddeac --- - Android.bp | 10 +++++++++ + Android.bp | 9 ++++++++ privapp_whitelist_com.android.wallpaper.xml | 24 +++++++++++++++++++++ - 2 files changed, 34 insertions(+) + 2 files changed, 33 insertions(+) create mode 100644 privapp_whitelist_com.android.wallpaper.xml diff --git a/Android.bp b/Android.bp -index f6c85581..e25c6e3d 100644 +index d3a7c514..e23d0c84 100644 --- a/Android.bp +++ b/Android.bp -@@ -118,5 +118,15 @@ android_app { +@@ -141,5 +141,14 @@ android_app { platform_apis: true, manifest: "AndroidManifest.xml", additional_manifests: [":WallpaperPicker2_Manifest"], -+ + required: ["privapp_whitelist_com.android.wallpaper.xml"], - overrides: ["WallpaperPicker2"], + overrides: ["WallpaperPicker", "WallpaperPicker2"], } + +prebuilt_etc_xml { @@ -61,5 +60,5 @@ index 00000000..e3f3b658 + + -- -2.41.0 +2.43.1 diff --git a/packages/apps/ThemePicker/0003-Add-wallpaper-default-permissions.patch b/packages/apps/ThemePicker/0002-Add-wallpaper-default-permissions.patch similarity index 87% rename from packages/apps/ThemePicker/0003-Add-wallpaper-default-permissions.patch rename to packages/apps/ThemePicker/0002-Add-wallpaper-default-permissions.patch index bfff5fc..56865fd 100644 --- a/packages/apps/ThemePicker/0003-Add-wallpaper-default-permissions.patch +++ b/packages/apps/ThemePicker/0002-Add-wallpaper-default-permissions.patch @@ -1,33 +1,32 @@ -From 0c493c5d97381bc1f809f15a4c948b47631a4346 Mon Sep 17 00:00:00 2001 +From 17911eaa692b1b4db729ab0662827a50f9e7e2ff Mon Sep 17 00:00:00 2001 From: LuK1337 Date: Tue, 15 Sep 2020 03:27:19 +0200 -Subject: [PATCH 3/5] Add wallpaper default permissions +Subject: [PATCH 2/4] Add wallpaper default permissions Change-Id: If43a594da31fbab9280ce45b049737f6c534b620 --- - Android.bp | 14 ++++++- + Android.bp | 13 ++++++- default_permissions_com.android.wallpaper.xml | 37 +++++++++++++++++++ - 2 files changed, 50 insertions(+), 1 deletion(-) + 2 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 default_permissions_com.android.wallpaper.xml diff --git a/Android.bp b/Android.bp -index f2efc94e..1a525b0e 100644 +index e23d0c84..44319052 100644 --- a/Android.bp +++ b/Android.bp -@@ -119,7 +119,11 @@ android_app { +@@ -141,7 +141,10 @@ android_app { + platform_apis: true, manifest: "AndroidManifest.xml", additional_manifests: [":WallpaperPicker2_Manifest"], - - required: ["privapp_whitelist_com.android.wallpaper.xml"], + required: [ + "privapp_whitelist_com.android.wallpaper.xml", + "default_permissions_com.android.wallpaper.xml", + ], -+ - overrides: ["WallpaperPicker2", "WallpaperPicker"], + overrides: ["WallpaperPicker", "WallpaperPicker2"], } -@@ -130,3 +134,11 @@ prebuilt_etc_xml { +@@ -152,3 +155,11 @@ prebuilt_etc_xml { filename_from_src: true, sub_dir: "permissions", } @@ -83,5 +82,5 @@ index 00000000..41b23ce1 + + -- -2.41.0 +2.43.1 diff --git a/packages/apps/ThemePicker/0002-Override-legacy-WallpaperPicker-app.patch b/packages/apps/ThemePicker/0002-Override-legacy-WallpaperPicker-app.patch deleted file mode 100644 index 8462956..0000000 --- a/packages/apps/ThemePicker/0002-Override-legacy-WallpaperPicker-app.patch +++ /dev/null @@ -1,26 +0,0 @@ -From e2fec57334a92244d36ba79cbdd25a469400603b Mon Sep 17 00:00:00 2001 -From: Danny Lin -Date: Tue, 5 Oct 2021 19:00:36 -0700 -Subject: [PATCH 2/5] Override legacy WallpaperPicker app - -Change-Id: I9a1907527eea0e8e7cd10bab64ba79c2c4006c59 ---- - Android.bp | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/Android.bp b/Android.bp -index e25c6e3d..f2efc94e 100644 ---- a/Android.bp -+++ b/Android.bp -@@ -120,7 +120,7 @@ android_app { - additional_manifests: [":WallpaperPicker2_Manifest"], - - required: ["privapp_whitelist_com.android.wallpaper.xml"], -- overrides: ["WallpaperPicker2"], -+ overrides: ["WallpaperPicker2", "WallpaperPicker"], - } - - prebuilt_etc_xml { --- -2.41.0 - diff --git a/packages/apps/ThemePicker/0004-Specify-we-read-and-write-launcher-settings.patch b/packages/apps/ThemePicker/0003-Specify-we-read-and-write-launcher-settings.patch similarity index 77% rename from packages/apps/ThemePicker/0004-Specify-we-read-and-write-launcher-settings.patch rename to packages/apps/ThemePicker/0003-Specify-we-read-and-write-launcher-settings.patch index 5c38345..af530ec 100644 --- a/packages/apps/ThemePicker/0004-Specify-we-read-and-write-launcher-settings.patch +++ b/packages/apps/ThemePicker/0003-Specify-we-read-and-write-launcher-settings.patch @@ -1,7 +1,7 @@ -From bb52f513459c59ad25248dc98c632ed455dfd4c5 Mon Sep 17 00:00:00 2001 +From b20465459c5c8848bd4c31ff4499f5bbb51afc48 Mon Sep 17 00:00:00 2001 From: Luca Stefani Date: Fri, 1 Nov 2019 23:17:08 +0100 -Subject: [PATCH 4/5] Specify we read and write launcher settings +Subject: [PATCH 3/4] Specify we read and write launcher settings Change-Id: Ifc8196588443b007602118389ca76d34ab531f14 --- @@ -9,10 +9,10 @@ Change-Id: Ifc8196588443b007602118389ca76d34ab531f14 1 file changed, 3 insertions(+) diff --git a/AndroidManifest.xml b/AndroidManifest.xml -index 4e71bcc6..26f4fce0 100755 +index b8126e55..2dd11fbb 100755 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml -@@ -45,6 +45,9 @@ +@@ -54,6 +54,9 @@ @@ -23,5 +23,5 @@ index 4e71bcc6..26f4fce0 100755 tools:replace="android:icon,android:name" android:extractNativeLibs="false" -- -2.41.0 +2.43.1 diff --git a/packages/apps/ThemePicker/0005-Add-permission-for-launcher-preview-rendering.patch b/packages/apps/ThemePicker/0004-Add-permission-for-launcher-preview-rendering.patch similarity index 90% rename from packages/apps/ThemePicker/0005-Add-permission-for-launcher-preview-rendering.patch rename to packages/apps/ThemePicker/0004-Add-permission-for-launcher-preview-rendering.patch index 1e4ac4a..68301ac 100644 --- a/packages/apps/ThemePicker/0005-Add-permission-for-launcher-preview-rendering.patch +++ b/packages/apps/ThemePicker/0004-Add-permission-for-launcher-preview-rendering.patch @@ -1,7 +1,7 @@ -From 0226fd9e4610eb6db37426afe6c7cb05e31aa5e6 Mon Sep 17 00:00:00 2001 +From 20d38bfa9324501ac1c1c183c72427f2662bcd28 Mon Sep 17 00:00:00 2001 From: Danny Lin Date: Tue, 5 Oct 2021 22:40:58 -0700 -Subject: [PATCH 5/5] Add permission for launcher preview rendering +Subject: [PATCH 4/4] Add permission for launcher preview rendering Change-Id: Ie707dcd98161e8f5993b0504295fddc3f395cd20 --- @@ -10,7 +10,7 @@ Change-Id: Ie707dcd98161e8f5993b0504295fddc3f395cd20 2 files changed, 2 insertions(+) diff --git a/AndroidManifest.xml b/AndroidManifest.xml -index 26f4fce0..40281cf9 100755 +index 2dd11fbb..63d76b8e 100755 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -8,6 +8,7 @@ @@ -33,5 +33,5 @@ index e3f3b658..47133be8 100644 -- -2.41.0 +2.43.1 diff --git a/packages/modules/Bluetooth/0001-gd-hci-Ignore-unexpected-status-events.patch b/packages/modules/Bluetooth/0001-gd-hci-Ignore-unexpected-status-events.patch index 214a703..f17ccff 100644 --- a/packages/modules/Bluetooth/0001-gd-hci-Ignore-unexpected-status-events.patch +++ b/packages/modules/Bluetooth/0001-gd-hci-Ignore-unexpected-status-events.patch @@ -1,4 +1,4 @@ -From 184dbd4770340934511622b0bac58eb45d0cb905 Mon Sep 17 00:00:00 2001 +From 638bd11ae1854619a40a5abbedcfdf397e2e1f53 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 24 Aug 2022 10:41:29 -0400 Subject: [PATCH 1/2] gd: hci: Ignore unexpected status events @@ -13,10 +13,10 @@ Change-Id: Ifb9a65fd77f21d15a8dc1ced9240194d38218ef6 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/system/gd/hci/hci_layer.cc b/system/gd/hci/hci_layer.cc -index c3312a557c..3e8ab78371 100644 +index 0889aa69e9..0b61fd4a4a 100644 --- a/system/gd/hci/hci_layer.cc +++ b/system/gd/hci/hci_layer.cc -@@ -211,14 +211,13 @@ struct HciLayer::impl { +@@ -213,14 +213,13 @@ struct HciLayer::impl { command_queue_.front().GetCallback()->Invoke( std::move(command_complete_view)); } else { @@ -39,5 +39,5 @@ index c3312a557c..3e8ab78371 100644 command_queue_.pop_front(); -- -2.41.0 +2.43.1 diff --git a/packages/modules/Bluetooth/0002-audio_hal_interface-Optionally-use-sysbta-HAL.patch b/packages/modules/Bluetooth/0002-audio_hal_interface-Optionally-use-sysbta-HAL.patch index f5032de..35f8b8a 100644 --- a/packages/modules/Bluetooth/0002-audio_hal_interface-Optionally-use-sysbta-HAL.patch +++ b/packages/modules/Bluetooth/0002-audio_hal_interface-Optionally-use-sysbta-HAL.patch @@ -1,4 +1,4 @@ -From a105602829eba6d179d3bfd4f117f2169f724b91 Mon Sep 17 00:00:00 2001 +From 1e1aee85f08b67be4b8805c9c0727ce826b0793a Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 24 Aug 2022 15:45:18 -0400 Subject: [PATCH 2/2] audio_hal_interface: Optionally use sysbta HAL @@ -7,16 +7,16 @@ 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 ++++++++- + .../audio_hal_interface/aidl/client_interface_aidl.cc | 6 +++--- + .../audio_hal_interface/aidl/client_interface_aidl.h | 7 +++++++ + system/audio_hal_interface/hal_version_manager.cc | 11 +++++++++-- 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 +index 9faa725022..f6706d98f1 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( +@@ -58,7 +58,7 @@ BluetoothAudioClientInterface::BluetoothAudioClientInterface( bool BluetoothAudioClientInterface::is_aidl_available() { return AServiceManager_isDeclared( @@ -25,7 +25,7 @@ index 897b891aa7..ed41627c3e 100644 } std::vector -@@ -72,7 +72,7 @@ BluetoothAudioClientInterface::GetAudioCapabilities(SessionType session_type) { +@@ -74,7 +74,7 @@ BluetoothAudioClientInterface::GetAudioCapabilities(SessionType session_type) { } auto provider_factory = IBluetoothAudioProviderFactory::fromBinder( ::ndk::SpAIBinder(AServiceManager_waitForService( @@ -34,7 +34,7 @@ index 897b891aa7..ed41627c3e 100644 if (provider_factory == nullptr) { LOG(ERROR) << __func__ << ", can't get capability from unknown factory"; -@@ -99,7 +99,7 @@ void BluetoothAudioClientInterface::FetchAudioProvider() { +@@ -101,7 +101,7 @@ void BluetoothAudioClientInterface::FetchAudioProvider() { } auto provider_factory = IBluetoothAudioProviderFactory::fromBinder( ::ndk::SpAIBinder(AServiceManager_waitForService( @@ -43,17 +43,8 @@ index 897b891aa7..ed41627c3e 100644 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 +index 0dd9575acb..d28e8e46fb 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 @@ @@ -64,7 +55,7 @@ index 8a40c1d7d7..6d962d3473 100644 #define BLUETOOTH_AUDIO_HAL_PROP_DISABLED \ "persist.bluetooth.bluetooth_audio_hal.disabled" -@@ -119,6 +120,12 @@ class BluetoothAudioClientInterface { +@@ -160,6 +161,12 @@ class BluetoothAudioClientInterface { // "android.hardware.bluetooth.audio.IBluetoothAudioProviderFactory/default"; static inline const std::string kDefaultAudioProviderFactoryInterface = std::string() + IBluetoothAudioProviderFactory::descriptor + "/default"; @@ -78,18 +69,18 @@ index 8a40c1d7d7..6d962d3473 100644 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 +index 275bbb067e..032856ef0e 100644 --- a/system/audio_hal_interface/hal_version_manager.cc +++ b/system/audio_hal_interface/hal_version_manager.cc -@@ -24,6 +24,7 @@ - #include +@@ -25,6 +25,7 @@ #include "aidl/audio_aidl_interfaces.h" + #include "osi/include/log.h" +#include "osi/include/properties.h" namespace bluetooth { namespace audio { -@@ -33,6 +34,12 @@ using ::aidl::android::hardware::bluetooth::audio:: +@@ -34,6 +35,12 @@ using ::aidl::android::hardware::bluetooth::audio:: static const std::string kDefaultAudioProviderFactoryInterface = std::string() + IBluetoothAudioProviderFactory::descriptor + "/default"; @@ -102,15 +93,24 @@ index a2c192f37d..c3d1cf35c2 100644 std::unique_ptr HalVersionManager::instance_ptr = std::make_unique(); -@@ -92,7 +99,7 @@ HalVersionManager::GetProvidersFactory_2_0() { +@@ -88,7 +95,7 @@ BluetoothAudioHalVersion GetAidlInterfaceVersion() { + auto provider_factory = IBluetoothAudioProviderFactory::fromBinder( + ::ndk::SpAIBinder(AServiceManager_waitForService( +- kDefaultAudioProviderFactoryInterface.c_str()))); ++ audioProviderFactoryInterface().c_str()))); + + if (provider_factory == nullptr) { + LOG_ERROR("Can't get aidl version from unknown factory"); +@@ -122,7 +129,7 @@ BluetoothAudioHalVersion GetAidlInterfaceVersion() { HalVersionManager::HalVersionManager() { + hal_transport_ = BluetoothAudioHalTransport::UNKNOWN; if (AServiceManager_checkService( - kDefaultAudioProviderFactoryInterface.c_str()) != nullptr) { + audioProviderFactoryInterface().c_str()) != nullptr) { - hal_version_ = BluetoothAudioHalVersion::VERSION_AIDL_V1; + hal_version_ = GetAidlInterfaceVersion(); + hal_transport_ = BluetoothAudioHalTransport::AIDL; return; - } -- -2.41.0 +2.43.1 diff --git a/system/bpf/0001-Revert-detect-inability-to-write-to-index-0-of-bpf-m.patch b/system/bpf/0001-Revert-detect-inability-to-write-to-index-0-of-bpf-m.patch deleted file mode 100644 index ae8b43c..0000000 --- a/system/bpf/0001-Revert-detect-inability-to-write-to-index-0-of-bpf-m.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 89613b61836c202b6ba3d3f35be16e24500ffe6c Mon Sep 17 00:00:00 2001 -From: Peter Cai -Date: Tue, 6 Dec 2022 18:30:32 -0500 -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 e53669a..2816161 100644 ---- a/bpfloader/BpfLoader.cpp -+++ b/bpfloader/BpfLoader.cpp -@@ -307,15 +307,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.41.0 - diff --git a/system/core/0001-init-Do-not-start-console-service-when-debuggable.patch b/system/core/0001-init-Do-not-start-console-service-when-debuggable.patch index 2b08444..d82a182 100644 --- a/system/core/0001-init-Do-not-start-console-service-when-debuggable.patch +++ b/system/core/0001-init-Do-not-start-console-service-when-debuggable.patch @@ -1,7 +1,7 @@ -From 332fec7a7f18271f42c50ad85d955604aaff8777 Mon Sep 17 00:00:00 2001 +From 9a08bf33057b2fe1ec3e4e2d922a67462bafe347 Mon Sep 17 00:00:00 2001 From: Isaac Chen Date: Wed, 23 Jun 2021 13:07:30 +0800 -Subject: [PATCH 1/3] init: Do not start console service when debuggable +Subject: [PATCH 1/2] 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. @@ -13,10 +13,10 @@ Change-Id: I34cfd6b42d3b9aee4b3e63181480cfb8b1255f29 1 file changed, 3 deletions(-) diff --git a/rootdir/init.rc b/rootdir/init.rc -index 7da264611..8b037bc9a 100644 +index 317f80908..9dc09ea4a 100644 --- a/rootdir/init.rc +++ b/rootdir/init.rc -@@ -1312,9 +1312,6 @@ on property:ro.debuggable=1 +@@ -1290,9 +1290,6 @@ on property:ro.debuggable=1 # Give reads to anyone for the accessibility trace folder on debug builds. chmod 0775 /data/misc/a11ytrace @@ -27,5 +27,5 @@ index 7da264611..8b037bc9a 100644 # TODO(b/135984674): reset all necessary properties here. setprop sys.boot_completed "" -- -2.41.0 +2.43.1 diff --git a/system/core/0002-Let-system-override-some-properties-ro.apex.updatabl.patch b/system/core/0002-Let-system-override-some-properties-ro.apex.updatabl.patch deleted file mode 100644 index 820092b..0000000 --- a/system/core/0002-Let-system-override-some-properties-ro.apex.updatabl.patch +++ /dev/null @@ -1,32 +0,0 @@ -From a644ef7d888b90a768564e0be805fd1975514e1a Mon Sep 17 00:00:00 2001 -From: Pierre-Hugues Husson -Date: Fri, 21 Apr 2023 13:08:48 -0400 -Subject: [PATCH 2/3] Let system override some properties (ro.apex.updatable, - ro.adb.secure, etc.) - -Change-Id: I3c84fa617f0ab7990abb0d905230a8703cf39bf7 ---- - init/property_service.cpp | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) - -diff --git a/init/property_service.cpp b/init/property_service.cpp -index 8da69822c..0680b8e06 100644 ---- a/init/property_service.cpp -+++ b/init/property_service.cpp -@@ -787,7 +787,12 @@ static void LoadProperties(char* data, const char* filter, const char* filename, - } else if (it->second != value) { - LOG(WARNING) << "Overriding previous property '" << key << "':'" << it->second - << "' with new value '" << value << "'"; -- it->second = value; -+ if (strcmp("ro.apex.updatable", key) == 0 || strcmp("ro.control_privapp_permissions", key) == 0 -+ || strstr(key, "adb") || strstr(key, "secure")) { -+ LOG(WARNING) << "... Ignored"; -+ } else { -+ it->second = value; -+ } - } - } else { - LOG(ERROR) << "Do not have permissions to set '" << key << "' to '" << value --- -2.41.0 - diff --git a/system/core/0002-init-Override-select-system-properties.patch b/system/core/0002-init-Override-select-system-properties.patch new file mode 100644 index 0000000..ec54513 --- /dev/null +++ b/system/core/0002-init-Override-select-system-properties.patch @@ -0,0 +1,87 @@ +From a0aa4c41f921134482737cf32437854816aba057 Mon Sep 17 00:00:00 2001 +From: Pierre-Hugues Husson +Date: Wed, 23 Feb 2022 17:37:47 -0500 +Subject: [PATCH 2/2] init: Override select system properties + +* ro.apex.updatable is overridden based on the kernel version and + vendor. +* adb secure props and logd can be overridden from system. + +Change-Id: I94efa3f108ae97711026f099f367b6bea325629f +--- + init/property_service.cpp | 42 +++++++++++++++++++++++++++++++++++---- + 1 file changed, 38 insertions(+), 4 deletions(-) + +diff --git a/init/property_service.cpp b/init/property_service.cpp +index 013924778..90c6fa538 100644 +--- a/init/property_service.cpp ++++ b/init/property_service.cpp +@@ -64,6 +64,8 @@ + #include + #include + #include ++#include ++ + #include "debug_ramdisk.h" + #include "epoll.h" + #include "init.h" +@@ -704,6 +706,26 @@ uint32_t InitPropertySet(const std::string& name, const std::string& value) { + static Result load_properties_from_file(const char*, const char*, + std::map*); + ++static bool kernel_supports_capex() { ++ // Put a threshold at >= 5.0 ++ struct utsname buf; ++ uname(&buf); ++ const char *where = buf.release; ++ int a = atoi(where); ++ if (a >= 5) return true; ++ ++ // If there are vendor apexes, we most likely actually need them ++ auto dir = std::unique_ptr{opendir("/vendor/apex"), closedir}; ++ if (!dir) { ++ return false; ++ } ++ for (struct dirent* ent = readdir(dir.get()); ent; ent = readdir(dir.get())) { ++ if(strstr(ent->d_name, "apex")) return true; ++ } ++ ++ return false; ++} ++ + /* + * Filter is used to decide which properties to load: NULL loads all keys, + * "ro.foo.*" is a prefix match, and "ro.foo.bar" is an exact match. +@@ -796,13 +818,25 @@ static void LoadProperties(char* data, const char* filter, const char* filename, + std::string error; + if (CheckPermissions(key, value, context, cr, &error) == PROP_SUCCESS) { + auto it = properties->find(key); ++ const char *new_value = value; ++ ++ if (strcmp("ro.apex.updatable", key) == 0) { ++ new_value = kernel_supports_capex() ? "true" : "false"; ++ } + if (it == properties->end()) { +- (*properties)[key] = value; +- } else if (it->second != value) { ++ (*properties)[key] = new_value; ++ } else if (it->second != new_value) { + LOG(WARNING) << "Overriding previous property '" << key << "':'" << it->second + << "' with new value '" << value << "'"; +- it->second = value; +- } ++ if (strcmp("ro.apex.updatable", key) == 0) { ++ LOG(WARNING) << "... Ignored apex by kernel version"; ++ } else if (strstr(key, "adb") || strstr(key, "secure") || strstr(key, "ro.logd.kernel") ++ || strcmp("ro.control_privapp_permissions", key) == 0) { ++ LOG(WARNING) << "... Ignored"; ++ } else { ++ it->second = new_value; ++ } ++ } + } else { + LOG(ERROR) << "Do not have permissions to set '" << key << "' to '" << value + << "' in property file '" << filename << "': " << error; +-- +2.43.1 + diff --git a/system/core/0003-init-Don-t-override-ro.apex.updatable-for-newer-devi.patch b/system/core/0003-init-Don-t-override-ro.apex.updatable-for-newer-devi.patch deleted file mode 100644 index 1ff3a3a..0000000 --- a/system/core/0003-init-Don-t-override-ro.apex.updatable-for-newer-devi.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 896473ddb7ddc7eed869360ab2e06af6c5f882e1 Mon Sep 17 00:00:00 2001 -From: Peter Cai -Date: Fri, 15 Dec 2023 22:47:32 -0500 -Subject: [PATCH 3/3] init: Don't override ro.apex.updatable for newer devices - -...where apexes may be required for hardware features to work. - -Change-Id: Ieed7de617231c93419f03aa31c9182018df131ec ---- - init/property_service.cpp | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/init/property_service.cpp b/init/property_service.cpp -index 0680b8e06..5edf246a1 100644 ---- a/init/property_service.cpp -+++ b/init/property_service.cpp -@@ -33,6 +33,7 @@ - #include - #include - #include -+#include - #include - #include - -@@ -787,7 +788,9 @@ static void LoadProperties(char* data, const char* filter, const char* filename, - } else if (it->second != value) { - LOG(WARNING) << "Overriding previous property '" << key << "':'" << it->second - << "' with new value '" << value << "'"; -- if (strcmp("ro.apex.updatable", key) == 0 || strcmp("ro.control_privapp_permissions", key) == 0 -+ struct utsname uts; -+ if ((strcmp("ro.apex.updatable", key) == 0 && !(uname(&uts) == 0 && atoi(uts.release) >= 5)) -+ || strcmp("ro.control_privapp_permissions", key) == 0 - || strstr(key, "adb") || strstr(key, "secure")) { - LOG(WARNING) << "... Ignored"; - } else { --- -2.41.0 - From 6e4f421edbe70cb3e8ee2f965fce1d76f671ebff Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Tue, 12 Mar 2024 22:50:46 -0400 Subject: [PATCH 14/43] bluetooth: Revert utterly broken MTK patch MTK please stop sending completely broken patches to AOSP thanks --- ...-hci-Ignore-unexpected-status-events.patch | 2 +- ..._interface-Optionally-use-sysbta-HAL.patch | 2 +- ...ow-latency-flow-for-Mediatek-BT-Chip.patch | 91 +++++++++++++++++++ 3 files changed, 93 insertions(+), 2 deletions(-) create mode 100644 packages/modules/Bluetooth/0003-Revert-BT-Add-Low-latency-flow-for-Mediatek-BT-Chip.patch diff --git a/packages/modules/Bluetooth/0001-gd-hci-Ignore-unexpected-status-events.patch b/packages/modules/Bluetooth/0001-gd-hci-Ignore-unexpected-status-events.patch index f17ccff..932f845 100644 --- a/packages/modules/Bluetooth/0001-gd-hci-Ignore-unexpected-status-events.patch +++ b/packages/modules/Bluetooth/0001-gd-hci-Ignore-unexpected-status-events.patch @@ -1,7 +1,7 @@ From 638bd11ae1854619a40a5abbedcfdf397e2e1f53 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 24 Aug 2022 10:41:29 -0400 -Subject: [PATCH 1/2] gd: hci: Ignore unexpected status events +Subject: [PATCH 1/3] gd: hci: Ignore unexpected status events For some reason, on some old devices, the controller will report a remote to support SNIFF_SUBRATING even when it does not. Just ignore the diff --git a/packages/modules/Bluetooth/0002-audio_hal_interface-Optionally-use-sysbta-HAL.patch b/packages/modules/Bluetooth/0002-audio_hal_interface-Optionally-use-sysbta-HAL.patch index 35f8b8a..68c9a01 100644 --- a/packages/modules/Bluetooth/0002-audio_hal_interface-Optionally-use-sysbta-HAL.patch +++ b/packages/modules/Bluetooth/0002-audio_hal_interface-Optionally-use-sysbta-HAL.patch @@ -1,7 +1,7 @@ From 1e1aee85f08b67be4b8805c9c0727ce826b0793a Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 24 Aug 2022 15:45:18 -0400 -Subject: [PATCH 2/2] audio_hal_interface: Optionally use sysbta HAL +Subject: [PATCH 2/3] audio_hal_interface: Optionally use sysbta HAL Required to support sysbta, our system-side bt audio implementation. diff --git a/packages/modules/Bluetooth/0003-Revert-BT-Add-Low-latency-flow-for-Mediatek-BT-Chip.patch b/packages/modules/Bluetooth/0003-Revert-BT-Add-Low-latency-flow-for-Mediatek-BT-Chip.patch new file mode 100644 index 0000000..67b667c --- /dev/null +++ b/packages/modules/Bluetooth/0003-Revert-BT-Add-Low-latency-flow-for-Mediatek-BT-Chip.patch @@ -0,0 +1,91 @@ +From b2dff222788e6fe7e28e27f277980025f9548fa3 Mon Sep 17 00:00:00 2001 +From: Peter Cai +Date: Tue, 12 Mar 2024 22:33:37 -0400 +Subject: [PATCH 3/3] Revert "BT: Add Low latency flow for Mediatek BT Chip" + +This reverts commit 78b3684eb205e1b4bc0aa3e12138687e73f78ebe. +--- + system/stack/include/hcidefs.h | 9 --------- + system/stack/l2cap/l2c_utils.cc | 32 -------------------------------- + 2 files changed, 41 deletions(-) + +diff --git a/system/stack/include/hcidefs.h b/system/stack/include/hcidefs.h +index a8ad4499bf..344507f76d 100644 +--- a/system/stack/include/hcidefs.h ++++ b/system/stack/include/hcidefs.h +@@ -916,9 +916,6 @@ typedef struct { + // TODO Remove this once all UNISOC specific hacks are removed. + #define LMP_COMPID_UNISOC 0x073F + +-// TODO Remove this once all Mediatek specific hacks are removed. +-#define LMP_COMPID_MEDIATEK 0x0046 +- + /* Parameter information for HCI_SYNA_SET_ACL_PRIORITY */ + #define HCI_SYNA_ACL_PRIORITY_PARAM_SIZE 3 + #define HCI_SYNA_ACL_NORMAL_PRIORITY 0xF0 +@@ -932,12 +929,6 @@ typedef struct { + #define HCI_UNISOC_ACL_NORMAL_PRIORITY 0x00 + #define HCI_UNISOC_ACL_HIGH_PRIORITY 0xFF + +-/* Parameter information for HCI_MTK_SET_ACL_PRIORITY */ +-#define HCI_MTK_ACL_PRIORITY_PARAM_SIZE 1 +-#define HCI_MTK_SET_ACL_PRIORITY (0xFD95 | HCI_GRP_VENDOR_SPECIFIC) +-#define HCI_MTK_ACL_NORMAL_PRIORITY 0x00 +-#define HCI_MTK_ACL_HIGH_PRIORITY 0x01 +- + /* + * Define packet size + */ +diff --git a/system/stack/l2cap/l2c_utils.cc b/system/stack/l2cap/l2c_utils.cc +index 7b722f426a..ef213c4de6 100644 +--- a/system/stack/l2cap/l2c_utils.cc ++++ b/system/stack/l2cap/l2c_utils.cc +@@ -2338,34 +2338,6 @@ static void l2cu_set_acl_priority_unisoc(tL2C_LCB* p_lcb, + HCI_UNISOC_ACL_PRIORITY_PARAM_SIZE, command, NULL); + } + +-/******************************************************************************* +- * +- * Function l2cu_set_acl_priority_latency_mtk +- * +- * Description Sends a VSC to set the ACL priority and recorded latency on +- * Mediatek chip. +- * +- * Returns void +- * +- ******************************************************************************/ +- +-static void l2cu_set_acl_priority_latency_mtk(tL2C_LCB* p_lcb, +- tL2CAP_PRIORITY priority) { +- uint8_t vs_param; +- if (priority == L2CAP_PRIORITY_HIGH) { +- // priority to high, if using latency mode check preset latency +- LOG_INFO("Set ACL priority: High Priority Mode"); +- vs_param = HCI_MTK_ACL_HIGH_PRIORITY; +- } else { +- // priority to normal +- LOG_INFO("Set ACL priority: Normal Mode"); +- vs_param = HCI_MTK_ACL_NORMAL_PRIORITY; +- } +- +- BTM_VendorSpecificCommand(HCI_MTK_SET_ACL_PRIORITY, +- HCI_MTK_ACL_PRIORITY_PARAM_SIZE, &vs_param, NULL); +-} +- + /******************************************************************************* + * + * Function l2cu_set_acl_priority +@@ -2410,10 +2382,6 @@ bool l2cu_set_acl_priority(const RawAddress& bd_addr, tL2CAP_PRIORITY priority, + l2cu_set_acl_priority_unisoc(p_lcb, priority); + break; + +- case LMP_COMPID_MEDIATEK: +- l2cu_set_acl_priority_latency_mtk(p_lcb, priority); +- break; +- + default: + /* Not supported/required for other vendors */ + break; +-- +2.43.1 + From bc7032fc5460df8007f925b555f053ffed273a30 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 16 Mar 2024 15:40:07 -0400 Subject: [PATCH 15/43] packages/modules/Connectivity: Fix for R vendors with 4.19 kernels --- ...ort-for-V-gsi-on-pixel-5-R-base-kern.patch | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 packages/modules/Connectivity/0001-Revert-drop-support-for-V-gsi-on-pixel-5-R-base-kern.patch diff --git a/packages/modules/Connectivity/0001-Revert-drop-support-for-V-gsi-on-pixel-5-R-base-kern.patch b/packages/modules/Connectivity/0001-Revert-drop-support-for-V-gsi-on-pixel-5-R-base-kern.patch new file mode 100644 index 0000000..43f61ca --- /dev/null +++ b/packages/modules/Connectivity/0001-Revert-drop-support-for-V-gsi-on-pixel-5-R-base-kern.patch @@ -0,0 +1,44 @@ +From 7c61a53d73e8ac2903653d92fdd2aad8e38ffad3 Mon Sep 17 00:00:00 2001 +From: Peter Cai +Date: Sat, 16 Mar 2024 15:27:27 -0400 +Subject: [PATCH] Revert "drop support for V gsi on pixel 5 R base kernel" + +This reverts commit bbbd18a71368a80f689b924dcf82062c2ee351b2. +--- + ..._android_server_connectivity_ClatCoordinator.cpp | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +diff --git a/service/jni/com_android_server_connectivity_ClatCoordinator.cpp b/service/jni/com_android_server_connectivity_ClatCoordinator.cpp +index c125bd6479..787ef8fd69 100644 +--- a/service/jni/com_android_server_connectivity_ClatCoordinator.cpp ++++ b/service/jni/com_android_server_connectivity_ClatCoordinator.cpp +@@ -90,6 +90,11 @@ static void verifyPerms(const char * const path, + + #undef ALOGF + ++bool isGsiImage() { ++ // this implementation matches 2 other places in the codebase (same function name too) ++ return !access("/system/system_ext/etc/init/init.gsi.rc", F_OK); ++} ++ + static const char* kClatdDir = "/apex/com.android.tethering/bin/for-system"; + static const char* kClatdBin = "/apex/com.android.tethering/bin/for-system/clatd"; + +@@ -130,6 +135,14 @@ static void verifyClatPerms() { + + #undef V2 + ++ // HACK: Some old vendor kernels lack ~5.10 backport of 'bpffs selinux genfscon' support. ++ // This is *NOT* supported, but let's allow, at least for now, U+ GSI to boot on them. ++ // (without this hack pixel5 R vendor + U gsi breaks) ++ if (isGsiImage() && !bpf::isAtLeastKernelVersion(5, 10, 0)) { ++ ALOGE("GSI with *BAD* pre-5.10 kernel lacking bpffs selinux genfscon support."); ++ return; ++ } ++ + if (fatal) abort(); + } + +-- +2.43.1 + From 23d4cb289cf4ffe123610f7612fb2a9416e4316c Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 27 Mar 2024 20:13:12 -0400 Subject: [PATCH 16/43] f/a: Add Lineage patch for camera service --- ...orce-load-audio-policy-for-system-si.patch | 4 +- ...2DP-audio-ports-from-the-primary-HAL.patch | 4 +- ...gh-pitched-voice-on-Qualcomm-devices.patch | 4 +- ...and-Q-behavior-respectively-for-tele.patch | 4 +- .../0005-Fix-BT-in-call-on-CAF-devices.patch | 4 +- ...-Use-the-correct-vendor-tag-id-type-.patch | 48 +++++++++++++++++++ 6 files changed, 58 insertions(+), 10 deletions(-) create mode 100644 frameworks/av/0006-libcameraservice-Use-the-correct-vendor-tag-id-type-.patch diff --git a/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch b/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch index 47702a3..3fc31ef 100644 --- a/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch +++ b/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch @@ -1,7 +1,7 @@ -From ea475bf0af44eaaa124ce6113f9aa05d6d6daa1a Mon Sep 17 00:00:00 2001 +From 8ce083670ba59e4ddd33895d491a050744dcc134 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 24 Aug 2022 15:42:39 -0400 -Subject: [PATCH 1/5] APM: Optionally force-load audio policy for system-side +Subject: [PATCH 1/6] APM: Optionally force-load audio policy for system-side bt audio HAL Required to support our system-side bt audio implementation, i.e. diff --git a/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch b/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch index b3c2e70..6788055 100644 --- a/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch +++ b/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch @@ -1,7 +1,7 @@ -From bb39db1a329a76edb2f936fbec305dc561638177 Mon Sep 17 00:00:00 2001 +From 54dd7999a1345914fed398daf604522f0e177227 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 25 Aug 2022 13:30:29 -0400 -Subject: [PATCH 2/5] APM: Remove A2DP audio ports from the primary HAL +Subject: [PATCH 2/6] 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 diff --git a/frameworks/av/0003-voip-Fix-high-pitched-voice-on-Qualcomm-devices.patch b/frameworks/av/0003-voip-Fix-high-pitched-voice-on-Qualcomm-devices.patch index 4edd366..c2c6384 100644 --- a/frameworks/av/0003-voip-Fix-high-pitched-voice-on-Qualcomm-devices.patch +++ b/frameworks/av/0003-voip-Fix-high-pitched-voice-on-Qualcomm-devices.patch @@ -1,7 +1,7 @@ -From b0898400ce6154291505edb284a63f2991cac382 Mon Sep 17 00:00:00 2001 +From fc5eda105a6c5bdc57a75d6fc459c7041dc87dde Mon Sep 17 00:00:00 2001 From: ponces Date: Mon, 24 Oct 2022 09:38:34 +0100 -Subject: [PATCH 3/5] voip: Fix high pitched voice on Qualcomm devices +Subject: [PATCH 3/6] voip: Fix high pitched voice on Qualcomm devices Change-Id: I6d314912169776b76d07d8c0301ec5249c1870a2 --- diff --git a/frameworks/av/0004-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch b/frameworks/av/0004-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch index e808505..e156d06 100644 --- a/frameworks/av/0004-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch +++ b/frameworks/av/0004-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch @@ -1,7 +1,7 @@ -From ecc5b31e7fbc1875deee1befd4d1b29e98db8836 Mon Sep 17 00:00:00 2001 +From a7b1332761ec195370f701ec38d81d37c7fb082c Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 18 Aug 2022 15:44:46 -0400 -Subject: [PATCH 4/5] APM: Restore S, R and Q behavior respectively for +Subject: [PATCH 4/6] APM: Restore S, R and Q behavior respectively for telephony audio This conditionally reverts part of b2e5cb (T), 51c9cc (S) and afd4ce (R) diff --git a/frameworks/av/0005-Fix-BT-in-call-on-CAF-devices.patch b/frameworks/av/0005-Fix-BT-in-call-on-CAF-devices.patch index 0c614b7..9137f75 100644 --- a/frameworks/av/0005-Fix-BT-in-call-on-CAF-devices.patch +++ b/frameworks/av/0005-Fix-BT-in-call-on-CAF-devices.patch @@ -1,7 +1,7 @@ -From 91ae0a3a9df1e37856cf0065bb24b7c27bb40ba4 Mon Sep 17 00:00:00 2001 +From d118ce30ea1536f2883e23636d74b90973e3ebf5 Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Mon, 5 Aug 2019 18:09:50 +0200 -Subject: [PATCH 5/5] Fix BT in-call on CAF devices +Subject: [PATCH 5/6] Fix BT in-call on CAF devices See https://github.com/phhusson/treble_experimentations/issues/374 diff --git a/frameworks/av/0006-libcameraservice-Use-the-correct-vendor-tag-id-type-.patch b/frameworks/av/0006-libcameraservice-Use-the-correct-vendor-tag-id-type-.patch new file mode 100644 index 0000000..845ef65 --- /dev/null +++ b/frameworks/av/0006-libcameraservice-Use-the-correct-vendor-tag-id-type-.patch @@ -0,0 +1,48 @@ +From ab96b0bbaa4bd636121f8015cf9b0406625513d2 Mon Sep 17 00:00:00 2001 +From: danielml +Date: Tue, 26 Mar 2024 11:49:00 +0100 +Subject: [PATCH 6/6] libcameraservice: Use the correct vendor tag id type on + filterParameters + +This fixes an overflow caused by using the `int` type, thus breaking +the camera on cases where the actual vendor tag id is bigger than the +maximum value `int` can hold. + +Test: Open camera, make sure that preview shows correctly and that + there are no vendor tag errors in logs. +Change-Id: Ia00e9e3fcc737bfaf0a917f11690f15d686441ba +Signed-off-by: danielml +--- + .../camera/libcameraservice/utils/SessionConfigurationUtils.cpp | 2 +- + .../camera/libcameraservice/utils/SessionConfigurationUtils.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/services/camera/libcameraservice/utils/SessionConfigurationUtils.cpp b/services/camera/libcameraservice/utils/SessionConfigurationUtils.cpp +index 3be8e15161..384f53e23d 100644 +--- a/services/camera/libcameraservice/utils/SessionConfigurationUtils.cpp ++++ b/services/camera/libcameraservice/utils/SessionConfigurationUtils.cpp +@@ -1133,7 +1133,7 @@ status_t mapRequestTemplateToAidl(camera_request_template_t templateId, + } + + void filterParameters(const CameraMetadata& src, const CameraMetadata& deviceInfo, +- int vendorTagId, CameraMetadata& dst) { ++ metadata_vendor_id_t vendorTagId, CameraMetadata& dst) { + const CameraMetadata params(src); + camera_metadata_ro_entry_t availableSessionKeys = deviceInfo.find( + ANDROID_REQUEST_AVAILABLE_SESSION_KEYS); +diff --git a/services/camera/libcameraservice/utils/SessionConfigurationUtils.h b/services/camera/libcameraservice/utils/SessionConfigurationUtils.h +index 29e3eca9af..5b2ea5c06f 100644 +--- a/services/camera/libcameraservice/utils/SessionConfigurationUtils.h ++++ b/services/camera/libcameraservice/utils/SessionConfigurationUtils.h +@@ -177,7 +177,7 @@ status_t mapRequestTemplateToAidl(camera_request_template_t templateId, + aidl::android::hardware::camera::device::RequestTemplate* tempId /*out*/); + + void filterParameters(const CameraMetadata& src, const CameraMetadata& deviceInfo, +- int vendorTagId, CameraMetadata& dst); ++ metadata_vendor_id_t vendorTagId, CameraMetadata& dst); + + constexpr int32_t MAX_SURFACES_PER_STREAM = 4; + +-- +2.43.1 + From 2eb02ceb6b107d3e81ed23f42b1408cf9bc98601 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 5 Apr 2024 20:06:11 -0400 Subject: [PATCH 17/43] f/av: Remove unneeded vendor tag id fix for r31 --- ...orce-load-audio-policy-for-system-si.patch | 6 +-- ...2DP-audio-ports-from-the-primary-HAL.patch | 6 +-- ...gh-pitched-voice-on-Qualcomm-devices.patch | 6 +-- ...and-Q-behavior-respectively-for-tele.patch | 6 +-- .../0005-Fix-BT-in-call-on-CAF-devices.patch | 6 +-- ...-Use-the-correct-vendor-tag-id-type-.patch | 48 ------------------- 6 files changed, 15 insertions(+), 63 deletions(-) delete mode 100644 frameworks/av/0006-libcameraservice-Use-the-correct-vendor-tag-id-type-.patch diff --git a/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch b/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch index 3fc31ef..6f098ec 100644 --- a/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch +++ b/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch @@ -1,7 +1,7 @@ -From 8ce083670ba59e4ddd33895d491a050744dcc134 Mon Sep 17 00:00:00 2001 +From 682110b814e507f7ab30f0027fb3d41519fc809d Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 24 Aug 2022 15:42:39 -0400 -Subject: [PATCH 1/6] APM: Optionally force-load audio policy for system-side +Subject: [PATCH 1/5] APM: Optionally force-load audio policy for system-side bt audio HAL Required to support our system-side bt audio implementation, i.e. @@ -57,5 +57,5 @@ index 6f19a7a145..08836377b7 100644 // Global Configuration -- -2.43.1 +2.44.0 diff --git a/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch b/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch index 6788055..5858af4 100644 --- a/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch +++ b/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch @@ -1,7 +1,7 @@ -From 54dd7999a1345914fed398daf604522f0e177227 Mon Sep 17 00:00:00 2001 +From 4dc4f2ff0eb1df7d8bfaab7d5d6a006035c3b403 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 25 Aug 2022 13:30:29 -0400 -Subject: [PATCH 2/6] APM: Remove A2DP audio ports from the primary HAL +Subject: [PATCH 2/5] 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 @@ -75,5 +75,5 @@ index 08836377b7..0f7c903909 100644 RouteTraits::Collection routes; -- -2.43.1 +2.44.0 diff --git a/frameworks/av/0003-voip-Fix-high-pitched-voice-on-Qualcomm-devices.patch b/frameworks/av/0003-voip-Fix-high-pitched-voice-on-Qualcomm-devices.patch index c2c6384..77a5202 100644 --- a/frameworks/av/0003-voip-Fix-high-pitched-voice-on-Qualcomm-devices.patch +++ b/frameworks/av/0003-voip-Fix-high-pitched-voice-on-Qualcomm-devices.patch @@ -1,7 +1,7 @@ -From fc5eda105a6c5bdc57a75d6fc459c7041dc87dde Mon Sep 17 00:00:00 2001 +From 819c95781f525035656b02f00d5251d1328f5073 Mon Sep 17 00:00:00 2001 From: ponces Date: Mon, 24 Oct 2022 09:38:34 +0100 -Subject: [PATCH 3/6] voip: Fix high pitched voice on Qualcomm devices +Subject: [PATCH 3/5] voip: Fix high pitched voice on Qualcomm devices Change-Id: I6d314912169776b76d07d8c0301ec5249c1870a2 --- @@ -52,5 +52,5 @@ index 0f7c903909..c4474cf1c2 100644 ALOGE("%s: No %s found", __func__, Attributes::name); return BAD_VALUE; -- -2.43.1 +2.44.0 diff --git a/frameworks/av/0004-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch b/frameworks/av/0004-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch index e156d06..d62e793 100644 --- a/frameworks/av/0004-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch +++ b/frameworks/av/0004-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch @@ -1,7 +1,7 @@ -From a7b1332761ec195370f701ec38d81d37c7fb082c Mon Sep 17 00:00:00 2001 +From 96765f345007ee59522f839a6e994f571dc782d3 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 18 Aug 2022 15:44:46 -0400 -Subject: [PATCH 4/6] APM: Restore S, R and Q behavior respectively for +Subject: [PATCH 4/5] APM: Restore S, R and Q behavior respectively for telephony audio This conditionally reverts part of b2e5cb (T), 51c9cc (S) and afd4ce (R) @@ -322,5 +322,5 @@ index a1c8f6202c..ee1b595e30 100644 SourceClientCollection mAudioSources; -- -2.43.1 +2.44.0 diff --git a/frameworks/av/0005-Fix-BT-in-call-on-CAF-devices.patch b/frameworks/av/0005-Fix-BT-in-call-on-CAF-devices.patch index 9137f75..7a7b206 100644 --- a/frameworks/av/0005-Fix-BT-in-call-on-CAF-devices.patch +++ b/frameworks/av/0005-Fix-BT-in-call-on-CAF-devices.patch @@ -1,7 +1,7 @@ -From d118ce30ea1536f2883e23636d74b90973e3ebf5 Mon Sep 17 00:00:00 2001 +From caaf4d4bd4fcc3fd59a2185b69ba0d77fe2e66c6 Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Mon, 5 Aug 2019 18:09:50 +0200 -Subject: [PATCH 5/6] Fix BT in-call on CAF devices +Subject: [PATCH 5/5] Fix BT in-call on CAF devices See https://github.com/phhusson/treble_experimentations/issues/374 @@ -127,5 +127,5 @@ index c4474cf1c2..c1df8f278b 100644 for (const xmlNode *children = cur->xmlChildrenNode; children != NULL; -- -2.43.1 +2.44.0 diff --git a/frameworks/av/0006-libcameraservice-Use-the-correct-vendor-tag-id-type-.patch b/frameworks/av/0006-libcameraservice-Use-the-correct-vendor-tag-id-type-.patch deleted file mode 100644 index 845ef65..0000000 --- a/frameworks/av/0006-libcameraservice-Use-the-correct-vendor-tag-id-type-.patch +++ /dev/null @@ -1,48 +0,0 @@ -From ab96b0bbaa4bd636121f8015cf9b0406625513d2 Mon Sep 17 00:00:00 2001 -From: danielml -Date: Tue, 26 Mar 2024 11:49:00 +0100 -Subject: [PATCH 6/6] libcameraservice: Use the correct vendor tag id type on - filterParameters - -This fixes an overflow caused by using the `int` type, thus breaking -the camera on cases where the actual vendor tag id is bigger than the -maximum value `int` can hold. - -Test: Open camera, make sure that preview shows correctly and that - there are no vendor tag errors in logs. -Change-Id: Ia00e9e3fcc737bfaf0a917f11690f15d686441ba -Signed-off-by: danielml ---- - .../camera/libcameraservice/utils/SessionConfigurationUtils.cpp | 2 +- - .../camera/libcameraservice/utils/SessionConfigurationUtils.h | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/services/camera/libcameraservice/utils/SessionConfigurationUtils.cpp b/services/camera/libcameraservice/utils/SessionConfigurationUtils.cpp -index 3be8e15161..384f53e23d 100644 ---- a/services/camera/libcameraservice/utils/SessionConfigurationUtils.cpp -+++ b/services/camera/libcameraservice/utils/SessionConfigurationUtils.cpp -@@ -1133,7 +1133,7 @@ status_t mapRequestTemplateToAidl(camera_request_template_t templateId, - } - - void filterParameters(const CameraMetadata& src, const CameraMetadata& deviceInfo, -- int vendorTagId, CameraMetadata& dst) { -+ metadata_vendor_id_t vendorTagId, CameraMetadata& dst) { - const CameraMetadata params(src); - camera_metadata_ro_entry_t availableSessionKeys = deviceInfo.find( - ANDROID_REQUEST_AVAILABLE_SESSION_KEYS); -diff --git a/services/camera/libcameraservice/utils/SessionConfigurationUtils.h b/services/camera/libcameraservice/utils/SessionConfigurationUtils.h -index 29e3eca9af..5b2ea5c06f 100644 ---- a/services/camera/libcameraservice/utils/SessionConfigurationUtils.h -+++ b/services/camera/libcameraservice/utils/SessionConfigurationUtils.h -@@ -177,7 +177,7 @@ status_t mapRequestTemplateToAidl(camera_request_template_t templateId, - aidl::android::hardware::camera::device::RequestTemplate* tempId /*out*/); - - void filterParameters(const CameraMetadata& src, const CameraMetadata& deviceInfo, -- int vendorTagId, CameraMetadata& dst); -+ metadata_vendor_id_t vendorTagId, CameraMetadata& dst); - - constexpr int32_t MAX_SURFACES_PER_STREAM = 4; - --- -2.43.1 - From 714720852efdd8abc2d97e8aba3cde0d26776e48 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 5 Apr 2024 20:09:08 -0400 Subject: [PATCH 18/43] s/core: Remove useless ro.apex.updatable override This doesn't work anymore on r29; remove it. If we want to boot on devices where apexes are broken, we have to find another way. --- ...tart-console-service-when-debuggable.patch | 4 +- ...it-Override-select-system-properties.patch | 51 +++---------------- 2 files changed, 10 insertions(+), 45 deletions(-) diff --git a/system/core/0001-init-Do-not-start-console-service-when-debuggable.patch b/system/core/0001-init-Do-not-start-console-service-when-debuggable.patch index d82a182..e5d4383 100644 --- a/system/core/0001-init-Do-not-start-console-service-when-debuggable.patch +++ b/system/core/0001-init-Do-not-start-console-service-when-debuggable.patch @@ -1,4 +1,4 @@ -From 9a08bf33057b2fe1ec3e4e2d922a67462bafe347 Mon Sep 17 00:00:00 2001 +From ce23dec99926b3e688ae5cd85f5da71c8765f89c Mon Sep 17 00:00:00 2001 From: Isaac Chen Date: Wed, 23 Jun 2021 13:07:30 +0800 Subject: [PATCH 1/2] init: Do not start console service when debuggable @@ -27,5 +27,5 @@ index 317f80908..9dc09ea4a 100644 # TODO(b/135984674): reset all necessary properties here. setprop sys.boot_completed "" -- -2.43.1 +2.44.0 diff --git a/system/core/0002-init-Override-select-system-properties.patch b/system/core/0002-init-Override-select-system-properties.patch index ec54513..631840d 100644 --- a/system/core/0002-init-Override-select-system-properties.patch +++ b/system/core/0002-init-Override-select-system-properties.patch @@ -1,66 +1,33 @@ -From a0aa4c41f921134482737cf32437854816aba057 Mon Sep 17 00:00:00 2001 +From b5256522214257f1a5f8ee5ecac84609993f8129 Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Wed, 23 Feb 2022 17:37:47 -0500 Subject: [PATCH 2/2] init: Override select system properties -* ro.apex.updatable is overridden based on the kernel version and - vendor. * adb secure props and logd can be overridden from system. Change-Id: I94efa3f108ae97711026f099f367b6bea325629f --- - init/property_service.cpp | 42 +++++++++++++++++++++++++++++++++++---- - 1 file changed, 38 insertions(+), 4 deletions(-) + init/property_service.cpp | 16 ++++++++++++---- + 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/init/property_service.cpp b/init/property_service.cpp -index 013924778..90c6fa538 100644 +index 013924778..ce164372a 100644 --- a/init/property_service.cpp +++ b/init/property_service.cpp -@@ -64,6 +64,8 @@ +@@ -64,6 +64,7 @@ #include #include #include -+#include + #include "debug_ramdisk.h" #include "epoll.h" #include "init.h" -@@ -704,6 +706,26 @@ uint32_t InitPropertySet(const std::string& name, const std::string& value) { - static Result load_properties_from_file(const char*, const char*, - std::map*); - -+static bool kernel_supports_capex() { -+ // Put a threshold at >= 5.0 -+ struct utsname buf; -+ uname(&buf); -+ const char *where = buf.release; -+ int a = atoi(where); -+ if (a >= 5) return true; -+ -+ // If there are vendor apexes, we most likely actually need them -+ auto dir = std::unique_ptr{opendir("/vendor/apex"), closedir}; -+ if (!dir) { -+ return false; -+ } -+ for (struct dirent* ent = readdir(dir.get()); ent; ent = readdir(dir.get())) { -+ if(strstr(ent->d_name, "apex")) return true; -+ } -+ -+ return false; -+} -+ - /* - * Filter is used to decide which properties to load: NULL loads all keys, - * "ro.foo.*" is a prefix match, and "ro.foo.bar" is an exact match. -@@ -796,13 +818,25 @@ static void LoadProperties(char* data, const char* filter, const char* filename, +@@ -796,13 +797,20 @@ static void LoadProperties(char* data, const char* filter, const char* filename, std::string error; if (CheckPermissions(key, value, context, cr, &error) == PROP_SUCCESS) { auto it = properties->find(key); + const char *new_value = value; + -+ if (strcmp("ro.apex.updatable", key) == 0) { -+ new_value = kernel_supports_capex() ? "true" : "false"; -+ } if (it == properties->end()) { - (*properties)[key] = value; - } else if (it->second != value) { @@ -70,9 +37,7 @@ index 013924778..90c6fa538 100644 << "' with new value '" << value << "'"; - it->second = value; - } -+ if (strcmp("ro.apex.updatable", key) == 0) { -+ LOG(WARNING) << "... Ignored apex by kernel version"; -+ } else if (strstr(key, "adb") || strstr(key, "secure") || strstr(key, "ro.logd.kernel") ++ if (strstr(key, "adb") || strstr(key, "secure") || strstr(key, "ro.logd.kernel") + || strcmp("ro.control_privapp_permissions", key) == 0) { + LOG(WARNING) << "... Ignored"; + } else { @@ -83,5 +48,5 @@ index 013924778..90c6fa538 100644 LOG(ERROR) << "Do not have permissions to set '" << key << "' to '" << value << "' in property file '" << filename << "': " << error; -- -2.43.1 +2.44.0 From 18c3fbb0b5094a51bdc248c0a493c2034acdf73c Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 15 Jun 2024 13:24:08 -0400 Subject: [PATCH 19/43] Refresh patches for r50 --- ...support-glob-matching-for-properties.patch | 4 +- ...PackageUtils-Add-glob-matching-suppo.patch | 4 +- .../base/0003-Global-VPN-feature-1-2.patch | 16 ++-- ...ze-boot-animation-to-match-screen-si.patch | 6 +- ...ateForSlotIndex-in-SubscriptionManag.patch | 8 +- ...CallingIdentity-variant-with-both-ex.patch | 10 +- ...d.version.incremental-to-signal-OTA-.patch | 42 ++++----- ...ubbleDataRepositoryTest-to-use-mocki.patch | 8 +- ...ce-Do-not-use-HIDL-providers-when-AI.patch | 8 +- ...spoofing-for-microG-Companion-Servic.patch | 30 +++--- .../0001-Global-VPN-feature-2-2.patch | 18 ++-- ...0001-Add-wallpaper-privapp-whitelist.patch | 9 +- ...02-Add-wallpaper-default-permissions.patch | 12 +-- ...-we-read-and-write-launcher-settings.patch | 8 +- ...ssion-for-launcher-preview-rendering.patch | 8 +- ...-hci-Ignore-unexpected-status-events.patch | 12 +-- ..._interface-Optionally-use-sysbta-HAL.patch | 67 ++++++++------ ...ow-latency-flow-for-Mediatek-BT-Chip.patch | 91 ------------------- ...tart-console-service-when-debuggable.patch | 6 +- ...it-Override-select-system-properties.patch | 18 +--- 20 files changed, 152 insertions(+), 233 deletions(-) delete mode 100644 packages/modules/Bluetooth/0003-Revert-BT-Add-Low-latency-flow-for-Mediatek-BT-Chip.patch diff --git a/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch b/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch index 971948f..db89d83 100644 --- a/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch +++ b/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch @@ -1,4 +1,4 @@ -From ceeeecf00329e2b0c50aa71c7c4da5aec6a0080b Mon Sep 17 00:00:00 2001 +From 01d09cb926af28c390360747b7e4ce78d913ba5d Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Tue, 12 Oct 2021 21:37:22 -0400 Subject: [PATCH 01/10] PackageParser: support glob matching for properties @@ -32,5 +32,5 @@ index 4b579e7db9f8..8176cf8e8567 100644 } return true; -- -2.43.1 +2.44.0 diff --git a/frameworks/base/0002-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch b/frameworks/base/0002-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch index 1d8f58b..3838bab 100644 --- a/frameworks/base/0002-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch +++ b/frameworks/base/0002-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch @@ -1,4 +1,4 @@ -From a16e57cffc48223fb6e756b03ebbd16d6d7f1276 Mon Sep 17 00:00:00 2001 +From e9c04f963f87ed7c44c63017f34e24a450c3a3c9 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 2 Sep 2022 21:36:06 -0400 Subject: [PATCH 02/10] FrameworkParsingPackageUtils: Add glob matching support @@ -36,5 +36,5 @@ index 153dd9a93490..900151440ca9 100644 } return true; -- -2.43.1 +2.44.0 diff --git a/frameworks/base/0003-Global-VPN-feature-1-2.patch b/frameworks/base/0003-Global-VPN-feature-1-2.patch index 473451d..d9fbccd 100644 --- a/frameworks/base/0003-Global-VPN-feature-1-2.patch +++ b/frameworks/base/0003-Global-VPN-feature-1-2.patch @@ -1,4 +1,4 @@ -From 2d871d0c51d43d0c3e4ce15a3f811fd5a9c316ad Mon Sep 17 00:00:00 2001 +From 55faa21dece9f9eafdfed5506c6c72130ccf9704 Mon Sep 17 00:00:00 2001 From: Oliver Scott Date: Thu, 8 Jul 2021 10:41:43 -0400 Subject: [PATCH 03/10] Global VPN feature [1/2] @@ -28,10 +28,10 @@ Signed-off-by: Mohammad Hasan Keramat J 3 files changed, 46 insertions(+), 5 deletions(-) diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java -index 2cc56d838b79..af98f07e9669 100644 +index 51585af10f5d..4603fc609f3d 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java -@@ -17352,6 +17352,12 @@ public final class Settings { +@@ -17696,6 +17696,12 @@ public final class Settings { CLOCKWORK_HOME_READY, }; @@ -45,10 +45,10 @@ index 2cc56d838b79..af98f07e9669 100644 * Keys we no longer back up under the current schema, but want to continue to * process when restoring historical backup datasets. diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java -index 4a4d4e1f27b2..a5e06164d0b8 100644 +index f39762766633..c7dc809c986d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java -@@ -39,6 +39,7 @@ import android.os.Handler; +@@ -44,6 +44,7 @@ import android.os.Handler; import android.os.RemoteException; import android.os.UserHandle; import android.os.UserManager; @@ -56,7 +56,7 @@ index 4a4d4e1f27b2..a5e06164d0b8 100644 import android.security.KeyChain; import android.util.ArrayMap; import android.util.Log; -@@ -338,8 +339,13 @@ public class SecurityControllerImpl implements SecurityController { +@@ -383,8 +384,13 @@ public class SecurityControllerImpl implements SecurityController { @Override public void onUserSwitched(int newUserId) { mCurrentUserId = newUserId; @@ -72,7 +72,7 @@ index 4a4d4e1f27b2..a5e06164d0b8 100644 mVpnUserId = newUserInfo.restrictedProfileParentId; } else { diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java -index c5170585a1b3..53d1f6c2c52f 100644 +index b7ece2ea65b1..82a3f45ca993 100644 --- a/services/core/java/com/android/server/connectivity/Vpn.java +++ b/services/core/java/com/android/server/connectivity/Vpn.java @@ -776,6 +776,15 @@ public class Vpn { @@ -197,5 +197,5 @@ index c5170585a1b3..53d1f6c2c52f 100644 // To stop the VPN profile, the caller must be the current prepared package and must be // running an Ikev2VpnProfile. -- -2.43.1 +2.44.0 diff --git a/frameworks/base/0004-Dynamically-resize-boot-animation-to-match-screen-si.patch b/frameworks/base/0004-Dynamically-resize-boot-animation-to-match-screen-si.patch index 5a3dc12..793fe73 100644 --- a/frameworks/base/0004-Dynamically-resize-boot-animation-to-match-screen-si.patch +++ b/frameworks/base/0004-Dynamically-resize-boot-animation-to-match-screen-si.patch @@ -1,4 +1,4 @@ -From 46413dd5f5d3ea13e25327b95f087b063006887d Mon Sep 17 00:00:00 2001 +From 30aef337016de69871d0bdd70568cd7d018540d7 Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Mon, 20 Dec 2021 15:01:41 -0500 Subject: [PATCH 04/10] Dynamically resize boot animation to match screen size @@ -9,7 +9,7 @@ Change-Id: I54e49fc6b8c670103852e212d1416e27ff976205 1 file changed, 22 insertions(+) diff --git a/cmds/bootanimation/BootAnimation.cpp b/cmds/bootanimation/BootAnimation.cpp -index 820d2b0d607e..56dfa8af31c4 100644 +index 77b74e9898b8..ba14cc03fccb 100644 --- a/cmds/bootanimation/BootAnimation.cpp +++ b/cmds/bootanimation/BootAnimation.cpp @@ -618,6 +618,28 @@ status_t BootAnimation::readyToRun() { @@ -42,5 +42,5 @@ index 820d2b0d607e..56dfa8af31c4 100644 // ro.bootanim.set_orientation_. Four values are supported: ORIENTATION_0, // ORIENTATION_90, ORIENTATION_180 and ORIENTATION_270. -- -2.43.1 +2.44.0 diff --git a/frameworks/base/0005-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch b/frameworks/base/0005-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch index 8f9cbad..085efd7 100644 --- a/frameworks/base/0005-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch +++ b/frameworks/base/0005-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch @@ -1,4 +1,4 @@ -From 4b49ad5b8f7401ec6ae02a4db674721ce10ac4ea Mon Sep 17 00:00:00 2001 +From a8cddefcb64fad404a0af0358505057f8890ef1d Mon Sep 17 00:00:00 2001 From: Andy CrossGate Yan Date: Wed, 2 Aug 2023 20:59:53 +0800 Subject: [PATCH 05/10] Restore getSimStateForSlotIndex in SubscriptionManager @@ -11,10 +11,10 @@ Change-Id: I41bac57c68055f369232359a464642daab94403b 1 file changed, 14 insertions(+) diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java -index 326b6f5af613..b994888362b0 100644 +index c5f2d42389e5..1324741145bd 100644 --- a/telephony/java/android/telephony/SubscriptionManager.java +++ b/telephony/java/android/telephony/SubscriptionManager.java -@@ -2693,6 +2693,20 @@ public class SubscriptionManager { +@@ -2902,6 +2902,20 @@ public class SubscriptionManager { return TelephonyManager.getDefault().isNetworkRoaming(subId); } @@ -36,5 +36,5 @@ index 326b6f5af613..b994888362b0 100644 * Set a field in the subscription database. Note not all fields are supported. * -- -2.43.1 +2.44.0 diff --git a/frameworks/base/0006-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch b/frameworks/base/0006-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch index 031aeab..4fb8474 100644 --- a/frameworks/base/0006-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch +++ b/frameworks/base/0006-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch @@ -1,4 +1,4 @@ -From 1d03233fbd587b33b92c1017f5682db1a7887692 Mon Sep 17 00:00:00 2001 +From 3090e1f2fc65eb525db64ff05c7a13f1e328deaf Mon Sep 17 00:00:00 2001 From: Andy CrossGate Yan Date: Sat, 12 Aug 2023 20:11:17 +0800 Subject: [PATCH 06/10] Add runWithCleanCallingIdentity variant with both @@ -12,10 +12,10 @@ Change-Id: If444290787025e130dce4bdeaf92372ae32793fe 1 file changed, 30 insertions(+) diff --git a/telephony/common/com/android/internal/telephony/util/TelephonyUtils.java b/telephony/common/com/android/internal/telephony/util/TelephonyUtils.java -index aed8fb8c4503..1467e7f2fc29 100644 +index a63db88cb614..1d5a36885307 100644 --- a/telephony/common/com/android/internal/telephony/util/TelephonyUtils.java +++ b/telephony/common/com/android/internal/telephony/util/TelephonyUtils.java -@@ -42,7 +42,9 @@ import com.android.internal.telephony.ITelephony; +@@ -44,7 +44,9 @@ import com.android.internal.telephony.ITelephony; import java.io.PrintWriter; import java.util.Collections; import java.util.List; @@ -25,7 +25,7 @@ index aed8fb8c4503..1467e7f2fc29 100644 import java.util.concurrent.Executor; import java.util.concurrent.TimeUnit; import java.util.function.Supplier; -@@ -151,6 +153,34 @@ public final class TelephonyUtils { +@@ -153,6 +155,34 @@ public final class TelephonyUtils { } } @@ -61,5 +61,5 @@ index aed8fb8c4503..1467e7f2fc29 100644 * Filter values in bundle to only basic types. */ -- -2.43.1 +2.44.0 diff --git a/frameworks/base/0007-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch b/frameworks/base/0007-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch index e0c74fb..9463a5b 100644 --- a/frameworks/base/0007-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch +++ b/frameworks/base/0007-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch @@ -1,4 +1,4 @@ -From 696e378fac49c9a90032b588dd4bb0887b44452f Mon Sep 17 00:00:00 2001 +From da661076da778c1ea9b9ef4411b386e445ab1675 Mon Sep 17 00:00:00 2001 From: dhacker29 Date: Tue, 24 Nov 2015 01:53:47 -0500 Subject: [PATCH 07/10] fw/b: Use ro.build.version.incremental to signal OTA @@ -85,7 +85,7 @@ index 9e6c91f4ec31..7459b0e05e3a 100644 } try { diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java -index a6b532cdef09..7f41474c63f4 100644 +index 3abfe082db27..a6dbeb4bd051 100644 --- a/services/core/java/com/android/server/am/UserController.java +++ b/services/core/java/com/android/server/am/UserController.java @@ -89,6 +89,7 @@ import android.content.pm.UserInfo; @@ -96,7 +96,7 @@ index a6b532cdef09..7f41474c63f4 100644 import android.os.Bundle; import android.os.Debug; import android.os.Handler; -@@ -774,7 +775,7 @@ class UserController implements Handler.Callback { +@@ -775,7 +776,7 @@ class UserController implements Handler.Callback { // purposefully block sending BOOT_COMPLETED until after all // PRE_BOOT receivers are finished to avoid ANR'ing apps final UserInfo info = getUserInfo(userId); @@ -106,10 +106,10 @@ index a6b532cdef09..7f41474c63f4 100644 // Suppress double notifications for managed profiles that // were unlocked automatically as part of their parent user being diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java -index bc441b84c58b..68e3f9f73c74 100644 +index c814a1ef1c13..441d0163cf1a 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java -@@ -1746,7 +1746,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService +@@ -1789,7 +1789,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService } PackageManagerService m = new PackageManagerService(injector, factoryTest, @@ -118,7 +118,7 @@ index bc441b84c58b..68e3f9f73c74 100644 Build.VERSION.SDK_INT, Build.VERSION.INCREMENTAL); t.traceEnd(); // "create package manager" -@@ -2225,9 +2225,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService +@@ -2269,9 +2269,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService mIsUpgrade = !partitionsFingerprint.equals(ver.fingerprint); if (mIsUpgrade) { @@ -128,9 +128,9 @@ index bc441b84c58b..68e3f9f73c74 100644 + PackageManagerServiceUtils.logCriticalInfo(Log.INFO, "Upgrading from " + + ver.fingerprint + " to " + Build.VERSION.INCREMENTAL); } - + mPriorSdkVersion = mIsUpgrade ? ver.sdkVersion : -1; mInitAppsHelper = new InitAppsHelper(this, mApexManager, mInstallPackageHelper, -@@ -2364,8 +2363,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService +@@ -2408,8 +2407,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService // allow... it would be nice to have some better way to handle // this situation. if (mIsUpgrade) { @@ -141,7 +141,7 @@ index bc441b84c58b..68e3f9f73c74 100644 + "; regranting permissions for internal storage"); } mPermissionManager.onStorageVolumeMounted( -@@ -2387,7 +2386,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService +@@ -2431,7 +2430,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService // across OTAs and are used to drive profile verification (post OTA) and // profile compilation (without waiting to collect a fresh set of profiles). if (mIsUpgrade) { @@ -150,7 +150,7 @@ index bc441b84c58b..68e3f9f73c74 100644 for (int i = 0; i < packageSettings.size(); i++) { final PackageSetting ps = packageSettings.valueAt(i); if (Objects.equals(StorageManager.UUID_PRIVATE_INTERNAL, ps.getVolumeUuid())) { -@@ -2399,7 +2398,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService +@@ -2443,7 +2442,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService } } ver.buildFingerprint = Build.FINGERPRINT; @@ -160,10 +160,10 @@ index bc441b84c58b..68e3f9f73c74 100644 // Defer the app data fixup until we are done with app data clearing above. diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java -index d6952262d82e..d03a3522a67a 100644 +index fe65010b7281..04a8e24839e9 100644 --- a/services/core/java/com/android/server/pm/Settings.java +++ b/services/core/java/com/android/server/pm/Settings.java -@@ -481,7 +481,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile +@@ -482,7 +482,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile sdkVersion = Build.VERSION.SDK_INT; databaseVersion = CURRENT_DATABASE_VERSION; buildFingerprint = Build.FINGERPRINT; @@ -172,7 +172,7 @@ index d6952262d82e..d03a3522a67a 100644 } } -@@ -5983,7 +5983,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile +@@ -6020,7 +6020,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile } private String getExtendedFingerprint(long version) { @@ -182,10 +182,10 @@ index d6952262d82e..d03a3522a67a 100644 private static long uniformRandom(double low, double high) { diff --git a/services/core/java/com/android/server/pm/ShortcutService.java b/services/core/java/com/android/server/pm/ShortcutService.java -index 3adeb4b5925f..4895a71c1322 100644 +index c1ab3f9e3eb9..1b0c9917f43e 100644 --- a/services/core/java/com/android/server/pm/ShortcutService.java +++ b/services/core/java/com/android/server/pm/ShortcutService.java -@@ -5208,7 +5208,7 @@ public class ShortcutService extends IShortcutService.Stub { +@@ -5230,7 +5230,7 @@ public class ShortcutService extends IShortcutService.Stub { // Injection point. String injectBuildFingerprint() { @@ -195,10 +195,10 @@ index 3adeb4b5925f..4895a71c1322 100644 final void wtf(String message) { diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java -index c48eccf2aac5..9033d8ee5e7a 100644 +index 7349755402b1..8ff9359c98e7 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java -@@ -5100,7 +5100,7 @@ public class UserManagerService extends IUserManager.Stub { +@@ -5420,7 +5420,7 @@ public class UserManagerService extends IUserManager.Stub { userInfo.creationTime = getCreationTime(); userInfo.partial = true; userInfo.preCreated = preCreate; @@ -207,7 +207,7 @@ index c48eccf2aac5..9033d8ee5e7a 100644 if (userTypeDetails.hasBadge() && parentId != UserHandle.USER_NULL) { userInfo.profileBadge = getFreeProfileBadgeLU(parentId, userType); } -@@ -6401,7 +6401,7 @@ public class UserManagerService extends IUserManager.Stub { +@@ -6722,7 +6722,7 @@ public class UserManagerService extends IUserManager.Stub { TimingsTraceAndSlog t = new TimingsTraceAndSlog(); t.traceBegin("onBeforeStartUser-" + userId); // Migrate only if build fingerprints mismatch @@ -216,7 +216,7 @@ index c48eccf2aac5..9033d8ee5e7a 100644 userInfo.lastLoggedInFingerprint); t.traceBegin("prepareUserData"); mUserDataPreparer.prepareUserData(userInfo, StorageManager.FLAG_STORAGE_DE); -@@ -6431,7 +6431,7 @@ public class UserManagerService extends IUserManager.Stub { +@@ -6752,7 +6752,7 @@ public class UserManagerService extends IUserManager.Stub { return; } // Migrate only if build fingerprints mismatch @@ -225,7 +225,7 @@ index c48eccf2aac5..9033d8ee5e7a 100644 userInfo.lastLoggedInFingerprint); final TimingsTraceAndSlog t = new TimingsTraceAndSlog(); -@@ -6476,7 +6476,7 @@ public class UserManagerService extends IUserManager.Stub { +@@ -6797,7 +6797,7 @@ public class UserManagerService extends IUserManager.Stub { if (now > EPOCH_PLUS_30_YEARS) { userData.info.lastLoggedInTime = now; } @@ -235,5 +235,5 @@ index c48eccf2aac5..9033d8ee5e7a 100644 } -- -2.43.1 +2.44.0 diff --git a/frameworks/base/0008-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch b/frameworks/base/0008-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch index 5a271e5..a6f52d9 100644 --- a/frameworks/base/0008-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch +++ b/frameworks/base/0008-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch @@ -1,4 +1,4 @@ -From eeeb323b495245354be3b98089a430ee04f67ae5 Mon Sep 17 00:00:00 2001 +From 52196edce8f30a2b061beb934f477eec673ef43e Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 9 Dec 2023 18:37:08 -0500 Subject: [PATCH 08/10] Revert "Convert BubbleDataRepositoryTest to use @@ -11,10 +11,10 @@ This reverts commit 625a23ff22f0a9327b9a24341dfa0b8fbaf61a1b. 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/libs/WindowManager/Shell/tests/unittest/Android.bp b/libs/WindowManager/Shell/tests/unittest/Android.bp -index aadadd604d3e..70106c3d41b4 100644 +index 32c070305e05..6eaf19953093 100644 --- a/libs/WindowManager/Shell/tests/unittest/Android.bp +++ b/libs/WindowManager/Shell/tests/unittest/Android.bp -@@ -44,7 +44,6 @@ android_test { +@@ -48,7 +48,6 @@ android_test { "frameworks-base-testutils", "kotlinx-coroutines-android", "kotlinx-coroutines-core", @@ -71,5 +71,5 @@ index e35995775f76..0e05e01a8da3 100644 } \ No newline at end of file -- -2.43.1 +2.44.0 diff --git a/frameworks/base/0009-FingerprintService-Do-not-use-HIDL-providers-when-AI.patch b/frameworks/base/0009-FingerprintService-Do-not-use-HIDL-providers-when-AI.patch index 2af5671..d84c410 100644 --- a/frameworks/base/0009-FingerprintService-Do-not-use-HIDL-providers-when-AI.patch +++ b/frameworks/base/0009-FingerprintService-Do-not-use-HIDL-providers-when-AI.patch @@ -1,4 +1,4 @@ -From 9c7aba6023ca7fe010300d1c92af0c9e461afd10 Mon Sep 17 00:00:00 2001 +From 0f6bac48544a7b15180fe62f970c6c9760d12b5c Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 15 Dec 2023 22:48:39 -0500 Subject: [PATCH 09/10] FingerprintService: Do not use HIDL providers when AIDL @@ -13,10 +13,10 @@ Change-Id: I9942e91a95106a7a11ab7ddf145d87562d1b7c0d 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java -index 83b306b07c27..7f144a0f615f 100644 +index 1ba12134ab29..09a24052e18f 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java -@@ -889,8 +889,9 @@ public class FingerprintService extends SystemService { +@@ -913,8 +913,9 @@ public class FingerprintService extends SystemService { filteredInstances = filterAvailableHalInstances(hidlSensors, aidlSensors); final List providers = new ArrayList<>(); @@ -28,5 +28,5 @@ index 83b306b07c27..7f144a0f615f 100644 return providers; }); -- -2.43.1 +2.44.0 diff --git a/frameworks/base/0010-Allow-signature-spoofing-for-microG-Companion-Servic.patch b/frameworks/base/0010-Allow-signature-spoofing-for-microG-Companion-Servic.patch index 7463878..6ac22c9 100644 --- a/frameworks/base/0010-Allow-signature-spoofing-for-microG-Companion-Servic.patch +++ b/frameworks/base/0010-Allow-signature-spoofing-for-microG-Companion-Servic.patch @@ -1,4 +1,4 @@ -From ae82395ce31a35c73b817fc25b8b7d5f96c32770 Mon Sep 17 00:00:00 2001 +From 3b581eb494050e35ba1e044898bb85811bc4ec61 Mon Sep 17 00:00:00 2001 From: LuK1337 Date: Mon, 19 Feb 2024 16:20:04 +0100 Subject: [PATCH 10/10] Allow signature spoofing for microG Companion/Services @@ -17,11 +17,11 @@ phh change: No need to be debuggable Change-Id: I8fc82ed266a2cc59636b662c7ea7e29c94f509b5 --- .../com/android/server/pm/AppsFilterImpl.java | 2 + - .../com/android/server/pm/ComputerEngine.java | 46 +++++++++++++++++++ - 2 files changed, 48 insertions(+) + .../com/android/server/pm/ComputerEngine.java | 47 +++++++++++++++++++ + 2 files changed, 49 insertions(+) diff --git a/services/core/java/com/android/server/pm/AppsFilterImpl.java b/services/core/java/com/android/server/pm/AppsFilterImpl.java -index 82622d9a4ea8..277c9abe2e1c 100644 +index cc4c2b5bf893..57263da936d6 100644 --- a/services/core/java/com/android/server/pm/AppsFilterImpl.java +++ b/services/core/java/com/android/server/pm/AppsFilterImpl.java @@ -36,6 +36,7 @@ import static com.android.server.pm.AppsFilterUtils.canQueryAsUpdateOwner; @@ -41,10 +41,10 @@ index 82622d9a4ea8..277c9abe2e1c 100644 || newPkg.isForceQueryable() || ArrayUtils.contains(mForceQueryableByDevicePackageNames, diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java -index 3cb2420cd223..b0d9be30edc1 100644 +index 9afdde53643c..fe73eadb3352 100644 --- a/services/core/java/com/android/server/pm/ComputerEngine.java +++ b/services/core/java/com/android/server/pm/ComputerEngine.java -@@ -100,6 +100,7 @@ import android.content.pm.UserPackage; +@@ -102,6 +102,7 @@ import android.content.pm.UserPackage; import android.content.pm.VersionedPackage; import android.os.Binder; import android.os.Build; @@ -52,7 +52,7 @@ index 3cb2420cd223..b0d9be30edc1 100644 import android.os.IBinder; import android.os.ParcelableException; import android.os.PatternMatcher; -@@ -172,6 +173,7 @@ import java.util.Collections; +@@ -174,6 +175,7 @@ import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Objects; @@ -60,7 +60,7 @@ index 3cb2420cd223..b0d9be30edc1 100644 import java.util.Set; import java.util.UUID; -@@ -421,6 +423,10 @@ public class ComputerEngine implements Computer { +@@ -423,6 +425,10 @@ public class ComputerEngine implements Computer { private final PackageManagerInternal.ExternalSourcesPolicy mExternalSourcesPolicy; private final CrossProfileIntentResolverEngine mCrossProfileIntentResolverEngine; @@ -71,7 +71,7 @@ index 3cb2420cd223..b0d9be30edc1 100644 // PackageManagerService attributes that are primitives are referenced through the // pms object directly. Primitives are the only attributes so referenced. protected final PackageManagerService mService; -@@ -1463,6 +1469,42 @@ public class ComputerEngine implements Computer { +@@ -1465,6 +1471,42 @@ public class ComputerEngine implements Computer { return result; } @@ -114,17 +114,25 @@ index 3cb2420cd223..b0d9be30edc1 100644 public final PackageInfo generatePackageInfo(PackageStateInternal ps, @PackageManager.PackageInfoFlagsBits long flags, int userId) { if (!mUserManager.exists(userId)) return null; -@@ -1511,6 +1553,10 @@ public class ComputerEngine implements Computer { +@@ -1513,6 +1555,10 @@ public class ComputerEngine implements Computer { packageInfo.packageName = packageInfo.applicationInfo.packageName = resolveExternalPackageName(p); + generateFakeSignature(p).ifPresent(fakeSignature -> { + packageInfo.signatures = new Signature[]{fakeSignature}; + }); ++ + if (Flags.provideInfoOfApkInApex()) { + final String apexModuleName = ps.getApexModuleName(); + if (apexModuleName != null) { +@@ -1520,6 +1566,7 @@ public class ComputerEngine implements Computer { + mApexManager.getActivePackageNameForApexModuleName(apexModuleName)); + } + } + return packageInfo; } else if ((flags & (MATCH_UNINSTALLED_PACKAGES | MATCH_ARCHIVED_PACKAGES)) != 0 && PackageUserStateUtils.isAvailable(state, flags)) { -- -2.43.1 +2.44.0 diff --git a/packages/apps/Settings/0001-Global-VPN-feature-2-2.patch b/packages/apps/Settings/0001-Global-VPN-feature-2-2.patch index 444a88d..19033f9 100644 --- a/packages/apps/Settings/0001-Global-VPN-feature-2-2.patch +++ b/packages/apps/Settings/0001-Global-VPN-feature-2-2.patch @@ -1,4 +1,4 @@ -From 22b752c0770f00c92ad91ab2c17b52a1c2c651a9 Mon Sep 17 00:00:00 2001 +From ef5e90c542a7cffcaabfbe76ffc3a6826587ede8 Mon Sep 17 00:00:00 2001 From: Oliver Scott Date: Thu, 8 Jul 2021 10:40:49 -0400 Subject: [PATCH] Global VPN feature [2/2] @@ -15,13 +15,13 @@ Signed-off-by: Mohammad Hasan Keramat J 3 files changed, 59 insertions(+), 1 deletion(-) diff --git a/res/values/strings.xml b/res/values/strings.xml -index 630aeed0049..20902850060 100644 +index ef93ba71132..a83c8de557e 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml -@@ -12633,4 +12633,10 @@ - - - +@@ -13017,4 +13017,10 @@ + + + Show pointer while hovering + + + Global VPN @@ -47,10 +47,10 @@ index dffbbbe3116..93df378fd76 100644 android:key="always_on_vpn" android:title="@string/vpn_menu_lockdown" diff --git a/src/com/android/settings/vpn2/AppManagementFragment.java b/src/com/android/settings/vpn2/AppManagementFragment.java -index 1d5b3cc6d51..c1180ea1a8e 100644 +index 00c8f5994ce..c4f447f44fb 100644 --- a/src/com/android/settings/vpn2/AppManagementFragment.java +++ b/src/com/android/settings/vpn2/AppManagementFragment.java -@@ -28,10 +28,12 @@ import android.content.pm.ApplicationInfo; +@@ -27,10 +27,12 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; @@ -177,5 +177,5 @@ index 1d5b3cc6d51..c1180ea1a8e 100644 private static final String TAG = "CannotConnect"; private static final String ARG_VPN_LABEL = "label"; -- -2.43.1 +2.44.0 diff --git a/packages/apps/ThemePicker/0001-Add-wallpaper-privapp-whitelist.patch b/packages/apps/ThemePicker/0001-Add-wallpaper-privapp-whitelist.patch index b375179..0133d64 100644 --- a/packages/apps/ThemePicker/0001-Add-wallpaper-privapp-whitelist.patch +++ b/packages/apps/ThemePicker/0001-Add-wallpaper-privapp-whitelist.patch @@ -1,4 +1,4 @@ -From d5cd47a4f197ab1d30b3ab03adfa27a602e94d70 Mon Sep 17 00:00:00 2001 +From 51bbaa3c11244498aec37e305716eaaa08c9fa5f Mon Sep 17 00:00:00 2001 From: Luca Stefani Date: Fri, 1 Nov 2019 21:14:29 +0100 Subject: [PATCH 1/4] Add wallpaper privapp whitelist @@ -11,15 +11,16 @@ Change-Id: I044b1d9201ac0b8780fc37a387f401f3dd0ddeac create mode 100644 privapp_whitelist_com.android.wallpaper.xml diff --git a/Android.bp b/Android.bp -index d3a7c514..e23d0c84 100644 +index 8676f26c..a61ee790 100644 --- a/Android.bp +++ b/Android.bp -@@ -141,5 +141,14 @@ android_app { +@@ -133,6 +133,15 @@ android_app { platform_apis: true, manifest: "AndroidManifest.xml", additional_manifests: [":WallpaperPicker2_Manifest"], + required: ["privapp_whitelist_com.android.wallpaper.xml"], overrides: ["WallpaperPicker", "WallpaperPicker2"], + static_libs: ["ThemePickerApplicationLib"], } + +prebuilt_etc_xml { @@ -60,5 +61,5 @@ index 00000000..e3f3b658 + + -- -2.43.1 +2.44.0 diff --git a/packages/apps/ThemePicker/0002-Add-wallpaper-default-permissions.patch b/packages/apps/ThemePicker/0002-Add-wallpaper-default-permissions.patch index 56865fd..cb81161 100644 --- a/packages/apps/ThemePicker/0002-Add-wallpaper-default-permissions.patch +++ b/packages/apps/ThemePicker/0002-Add-wallpaper-default-permissions.patch @@ -1,4 +1,4 @@ -From 17911eaa692b1b4db729ab0662827a50f9e7e2ff Mon Sep 17 00:00:00 2001 +From cc2bdac1523f69e04f4e9e919e6f9aa6056cfd01 Mon Sep 17 00:00:00 2001 From: LuK1337 Date: Tue, 15 Sep 2020 03:27:19 +0200 Subject: [PATCH 2/4] Add wallpaper default permissions @@ -11,10 +11,10 @@ Change-Id: If43a594da31fbab9280ce45b049737f6c534b620 create mode 100644 default_permissions_com.android.wallpaper.xml diff --git a/Android.bp b/Android.bp -index e23d0c84..44319052 100644 +index a61ee790..c07b2ee1 100644 --- a/Android.bp +++ b/Android.bp -@@ -141,7 +141,10 @@ android_app { +@@ -133,7 +133,10 @@ android_app { platform_apis: true, manifest: "AndroidManifest.xml", additional_manifests: [":WallpaperPicker2_Manifest"], @@ -24,9 +24,9 @@ index e23d0c84..44319052 100644 + "default_permissions_com.android.wallpaper.xml", + ], overrides: ["WallpaperPicker", "WallpaperPicker2"], + static_libs: ["ThemePickerApplicationLib"], } - -@@ -152,3 +155,11 @@ prebuilt_etc_xml { +@@ -145,3 +148,11 @@ prebuilt_etc_xml { filename_from_src: true, sub_dir: "permissions", } @@ -82,5 +82,5 @@ index 00000000..41b23ce1 + + -- -2.43.1 +2.44.0 diff --git a/packages/apps/ThemePicker/0003-Specify-we-read-and-write-launcher-settings.patch b/packages/apps/ThemePicker/0003-Specify-we-read-and-write-launcher-settings.patch index af530ec..5461d71 100644 --- a/packages/apps/ThemePicker/0003-Specify-we-read-and-write-launcher-settings.patch +++ b/packages/apps/ThemePicker/0003-Specify-we-read-and-write-launcher-settings.patch @@ -1,4 +1,4 @@ -From b20465459c5c8848bd4c31ff4499f5bbb51afc48 Mon Sep 17 00:00:00 2001 +From c6f2fb731c84223bb5790241d5d901908f40f2ca Mon Sep 17 00:00:00 2001 From: Luca Stefani Date: Fri, 1 Nov 2019 23:17:08 +0100 Subject: [PATCH 3/4] Specify we read and write launcher settings @@ -9,10 +9,10 @@ Change-Id: Ifc8196588443b007602118389ca76d34ab531f14 1 file changed, 3 insertions(+) diff --git a/AndroidManifest.xml b/AndroidManifest.xml -index b8126e55..2dd11fbb 100755 +index 6e5844de..555d3b63 100755 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml -@@ -54,6 +54,9 @@ +@@ -60,6 +60,9 @@ @@ -23,5 +23,5 @@ index b8126e55..2dd11fbb 100755 tools:replace="android:icon,android:name" android:extractNativeLibs="false" -- -2.43.1 +2.44.0 diff --git a/packages/apps/ThemePicker/0004-Add-permission-for-launcher-preview-rendering.patch b/packages/apps/ThemePicker/0004-Add-permission-for-launcher-preview-rendering.patch index 68301ac..6084efd 100644 --- a/packages/apps/ThemePicker/0004-Add-permission-for-launcher-preview-rendering.patch +++ b/packages/apps/ThemePicker/0004-Add-permission-for-launcher-preview-rendering.patch @@ -1,4 +1,4 @@ -From 20d38bfa9324501ac1c1c183c72427f2662bcd28 Mon Sep 17 00:00:00 2001 +From cb6fbb5ce4555504bb2bf317a694f52a1c2dcd6a Mon Sep 17 00:00:00 2001 From: Danny Lin Date: Tue, 5 Oct 2021 22:40:58 -0700 Subject: [PATCH 4/4] Add permission for launcher preview rendering @@ -10,10 +10,10 @@ Change-Id: Ie707dcd98161e8f5993b0504295fddc3f395cd20 2 files changed, 2 insertions(+) diff --git a/AndroidManifest.xml b/AndroidManifest.xml -index 2dd11fbb..63d76b8e 100755 +index 555d3b63..02fa70f1 100755 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml -@@ -8,6 +8,7 @@ +@@ -13,6 +13,7 @@ @@ -33,5 +33,5 @@ index e3f3b658..47133be8 100644 -- -2.43.1 +2.44.0 diff --git a/packages/modules/Bluetooth/0001-gd-hci-Ignore-unexpected-status-events.patch b/packages/modules/Bluetooth/0001-gd-hci-Ignore-unexpected-status-events.patch index 932f845..344eacc 100644 --- a/packages/modules/Bluetooth/0001-gd-hci-Ignore-unexpected-status-events.patch +++ b/packages/modules/Bluetooth/0001-gd-hci-Ignore-unexpected-status-events.patch @@ -1,7 +1,7 @@ -From 638bd11ae1854619a40a5abbedcfdf397e2e1f53 Mon Sep 17 00:00:00 2001 +From a4c4caca86ecfe7f0dfce67fc479f9777be26410 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 24 Aug 2022 10:41:29 -0400 -Subject: [PATCH 1/3] gd: hci: Ignore unexpected status events +Subject: [PATCH 1/2] gd: hci: Ignore unexpected status events For some reason, on some old devices, the controller will report a remote to support SNIFF_SUBRATING even when it does not. Just ignore the @@ -13,10 +13,10 @@ Change-Id: Ifb9a65fd77f21d15a8dc1ced9240194d38218ef6 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/system/gd/hci/hci_layer.cc b/system/gd/hci/hci_layer.cc -index 0889aa69e9..0b61fd4a4a 100644 +index 5ae661cb75..d91bb1480d 100644 --- a/system/gd/hci/hci_layer.cc +++ b/system/gd/hci/hci_layer.cc -@@ -213,14 +213,13 @@ struct HciLayer::impl { +@@ -218,14 +218,13 @@ struct HciLayer::impl { command_queue_.front().GetCallback()->Invoke( std::move(command_complete_view)); } else { @@ -37,7 +37,7 @@ index 0889aa69e9..0b61fd4a4a 100644 + } } - command_queue_.pop_front(); + #ifdef TARGET_FLOSS -- -2.43.1 +2.44.0 diff --git a/packages/modules/Bluetooth/0002-audio_hal_interface-Optionally-use-sysbta-HAL.patch b/packages/modules/Bluetooth/0002-audio_hal_interface-Optionally-use-sysbta-HAL.patch index 68c9a01..46f6904 100644 --- a/packages/modules/Bluetooth/0002-audio_hal_interface-Optionally-use-sysbta-HAL.patch +++ b/packages/modules/Bluetooth/0002-audio_hal_interface-Optionally-use-sysbta-HAL.patch @@ -1,22 +1,22 @@ -From 1e1aee85f08b67be4b8805c9c0727ce826b0793a Mon Sep 17 00:00:00 2001 +From 16e6571d11f6a2509a496e84e0d08ebae3b39254 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 24 Aug 2022 15:45:18 -0400 -Subject: [PATCH 2/3] audio_hal_interface: Optionally use sysbta HAL +Subject: [PATCH 2/2] audio_hal_interface: Optionally use sysbta HAL Required to support sysbta, our system-side bt audio implementation. Change-Id: I59973e6ec84c5923be8a7c67b36b2e237f000860 --- - .../audio_hal_interface/aidl/client_interface_aidl.cc | 6 +++--- + .../audio_hal_interface/aidl/client_interface_aidl.cc | 8 ++++---- .../audio_hal_interface/aidl/client_interface_aidl.h | 7 +++++++ system/audio_hal_interface/hal_version_manager.cc | 11 +++++++++-- - 3 files changed, 19 insertions(+), 5 deletions(-) + 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/system/audio_hal_interface/aidl/client_interface_aidl.cc b/system/audio_hal_interface/aidl/client_interface_aidl.cc -index 9faa725022..f6706d98f1 100644 +index 76e8788d02..a990422993 100644 --- a/system/audio_hal_interface/aidl/client_interface_aidl.cc +++ b/system/audio_hal_interface/aidl/client_interface_aidl.cc -@@ -58,7 +58,7 @@ BluetoothAudioClientInterface::BluetoothAudioClientInterface( +@@ -63,7 +63,7 @@ BluetoothAudioClientInterface::BluetoothAudioClientInterface( bool BluetoothAudioClientInterface::is_aidl_available() { return AServiceManager_isDeclared( @@ -25,7 +25,7 @@ index 9faa725022..f6706d98f1 100644 } std::vector -@@ -74,7 +74,7 @@ BluetoothAudioClientInterface::GetAudioCapabilities(SessionType session_type) { +@@ -79,7 +79,7 @@ BluetoothAudioClientInterface::GetAudioCapabilities(SessionType session_type) { } auto provider_factory = IBluetoothAudioProviderFactory::fromBinder( ::ndk::SpAIBinder(AServiceManager_waitForService( @@ -34,7 +34,16 @@ index 9faa725022..f6706d98f1 100644 if (provider_factory == nullptr) { LOG(ERROR) << __func__ << ", can't get capability from unknown factory"; -@@ -101,7 +101,7 @@ void BluetoothAudioClientInterface::FetchAudioProvider() { +@@ -108,7 +108,7 @@ BluetoothAudioClientInterface::GetProviderInfo( + if (provider_factory == nullptr) { + provider_factory = IBluetoothAudioProviderFactory::fromBinder( + ::ndk::SpAIBinder(AServiceManager_waitForService( +- kDefaultAudioProviderFactoryInterface.c_str()))); ++ audioProviderFactoryInterface().c_str()))); + } + + if (provider_factory == nullptr) { +@@ -192,7 +192,7 @@ void BluetoothAudioClientInterface::FetchAudioProvider() { } auto provider_factory = IBluetoothAudioProviderFactory::fromBinder( ::ndk::SpAIBinder(AServiceManager_waitForService( @@ -44,18 +53,18 @@ index 9faa725022..f6706d98f1 100644 if (provider_factory == nullptr) { LOG(ERROR) << __func__ << ", can't get capability 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 0dd9575acb..d28e8e46fb 100644 +index c191e4054e..99d5192376 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 @@ +@@ -27,6 +27,7 @@ + #include "audio_ctrl_ack.h" #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" -@@ -160,6 +161,12 @@ class BluetoothAudioClientInterface { +@@ -175,6 +176,12 @@ class BluetoothAudioClientInterface { // "android.hardware.bluetooth.audio.IBluetoothAudioProviderFactory/default"; static inline const std::string kDefaultAudioProviderFactoryInterface = std::string() + IBluetoothAudioProviderFactory::descriptor + "/default"; @@ -69,18 +78,18 @@ index 0dd9575acb..d28e8e46fb 100644 private: IBluetoothTransportInstance* transport_; diff --git a/system/audio_hal_interface/hal_version_manager.cc b/system/audio_hal_interface/hal_version_manager.cc -index 275bbb067e..032856ef0e 100644 +index 36672cb32c..d2b75e7891 100644 --- a/system/audio_hal_interface/hal_version_manager.cc +++ b/system/audio_hal_interface/hal_version_manager.cc -@@ -25,6 +25,7 @@ - +@@ -26,6 +26,7 @@ #include "aidl/audio_aidl_interfaces.h" - #include "osi/include/log.h" + #include "include/check.h" + #include "os/log.h" +#include "osi/include/properties.h" namespace bluetooth { namespace audio { -@@ -34,6 +35,12 @@ using ::aidl::android::hardware::bluetooth::audio:: +@@ -35,6 +36,12 @@ using ::aidl::android::hardware::bluetooth::audio:: static const std::string kDefaultAudioProviderFactoryInterface = std::string() + IBluetoothAudioProviderFactory::descriptor + "/default"; @@ -91,18 +100,18 @@ index 275bbb067e..032856ef0e 100644 + ? kSystemAudioProviderFactoryInterface : kDefaultAudioProviderFactoryInterface; +} - std::unique_ptr HalVersionManager::instance_ptr = - std::make_unique(); -@@ -88,7 +95,7 @@ BluetoothAudioHalVersion GetAidlInterfaceVersion() { + std::string toString(BluetoothAudioHalTransport transport) { + switch (transport) { +@@ -76,7 +83,7 @@ BluetoothAudioHalVersion GetAidlInterfaceVersion() { + int version = 0; + auto provider_factory = IBluetoothAudioProviderFactory::fromBinder( + ::ndk::SpAIBinder(AServiceManager_waitForService( +- kDefaultAudioProviderFactoryInterface.c_str()))); ++ audioProviderFactoryInterface().c_str()))); - auto provider_factory = IBluetoothAudioProviderFactory::fromBinder( - ::ndk::SpAIBinder(AServiceManager_waitForService( -- kDefaultAudioProviderFactoryInterface.c_str()))); -+ audioProviderFactoryInterface().c_str()))); - - if (provider_factory == nullptr) { - LOG_ERROR("Can't get aidl version from unknown factory"); -@@ -122,7 +129,7 @@ BluetoothAudioHalVersion GetAidlInterfaceVersion() { + if (provider_factory == nullptr) { + LOG_ERROR( +@@ -146,7 +153,7 @@ HalVersionManager::GetProvidersFactory_2_0() { HalVersionManager::HalVersionManager() { hal_transport_ = BluetoothAudioHalTransport::UNKNOWN; if (AServiceManager_checkService( @@ -112,5 +121,5 @@ index 275bbb067e..032856ef0e 100644 hal_transport_ = BluetoothAudioHalTransport::AIDL; return; -- -2.43.1 +2.44.0 diff --git a/packages/modules/Bluetooth/0003-Revert-BT-Add-Low-latency-flow-for-Mediatek-BT-Chip.patch b/packages/modules/Bluetooth/0003-Revert-BT-Add-Low-latency-flow-for-Mediatek-BT-Chip.patch deleted file mode 100644 index 67b667c..0000000 --- a/packages/modules/Bluetooth/0003-Revert-BT-Add-Low-latency-flow-for-Mediatek-BT-Chip.patch +++ /dev/null @@ -1,91 +0,0 @@ -From b2dff222788e6fe7e28e27f277980025f9548fa3 Mon Sep 17 00:00:00 2001 -From: Peter Cai -Date: Tue, 12 Mar 2024 22:33:37 -0400 -Subject: [PATCH 3/3] Revert "BT: Add Low latency flow for Mediatek BT Chip" - -This reverts commit 78b3684eb205e1b4bc0aa3e12138687e73f78ebe. ---- - system/stack/include/hcidefs.h | 9 --------- - system/stack/l2cap/l2c_utils.cc | 32 -------------------------------- - 2 files changed, 41 deletions(-) - -diff --git a/system/stack/include/hcidefs.h b/system/stack/include/hcidefs.h -index a8ad4499bf..344507f76d 100644 ---- a/system/stack/include/hcidefs.h -+++ b/system/stack/include/hcidefs.h -@@ -916,9 +916,6 @@ typedef struct { - // TODO Remove this once all UNISOC specific hacks are removed. - #define LMP_COMPID_UNISOC 0x073F - --// TODO Remove this once all Mediatek specific hacks are removed. --#define LMP_COMPID_MEDIATEK 0x0046 -- - /* Parameter information for HCI_SYNA_SET_ACL_PRIORITY */ - #define HCI_SYNA_ACL_PRIORITY_PARAM_SIZE 3 - #define HCI_SYNA_ACL_NORMAL_PRIORITY 0xF0 -@@ -932,12 +929,6 @@ typedef struct { - #define HCI_UNISOC_ACL_NORMAL_PRIORITY 0x00 - #define HCI_UNISOC_ACL_HIGH_PRIORITY 0xFF - --/* Parameter information for HCI_MTK_SET_ACL_PRIORITY */ --#define HCI_MTK_ACL_PRIORITY_PARAM_SIZE 1 --#define HCI_MTK_SET_ACL_PRIORITY (0xFD95 | HCI_GRP_VENDOR_SPECIFIC) --#define HCI_MTK_ACL_NORMAL_PRIORITY 0x00 --#define HCI_MTK_ACL_HIGH_PRIORITY 0x01 -- - /* - * Define packet size - */ -diff --git a/system/stack/l2cap/l2c_utils.cc b/system/stack/l2cap/l2c_utils.cc -index 7b722f426a..ef213c4de6 100644 ---- a/system/stack/l2cap/l2c_utils.cc -+++ b/system/stack/l2cap/l2c_utils.cc -@@ -2338,34 +2338,6 @@ static void l2cu_set_acl_priority_unisoc(tL2C_LCB* p_lcb, - HCI_UNISOC_ACL_PRIORITY_PARAM_SIZE, command, NULL); - } - --/******************************************************************************* -- * -- * Function l2cu_set_acl_priority_latency_mtk -- * -- * Description Sends a VSC to set the ACL priority and recorded latency on -- * Mediatek chip. -- * -- * Returns void -- * -- ******************************************************************************/ -- --static void l2cu_set_acl_priority_latency_mtk(tL2C_LCB* p_lcb, -- tL2CAP_PRIORITY priority) { -- uint8_t vs_param; -- if (priority == L2CAP_PRIORITY_HIGH) { -- // priority to high, if using latency mode check preset latency -- LOG_INFO("Set ACL priority: High Priority Mode"); -- vs_param = HCI_MTK_ACL_HIGH_PRIORITY; -- } else { -- // priority to normal -- LOG_INFO("Set ACL priority: Normal Mode"); -- vs_param = HCI_MTK_ACL_NORMAL_PRIORITY; -- } -- -- BTM_VendorSpecificCommand(HCI_MTK_SET_ACL_PRIORITY, -- HCI_MTK_ACL_PRIORITY_PARAM_SIZE, &vs_param, NULL); --} -- - /******************************************************************************* - * - * Function l2cu_set_acl_priority -@@ -2410,10 +2382,6 @@ bool l2cu_set_acl_priority(const RawAddress& bd_addr, tL2CAP_PRIORITY priority, - l2cu_set_acl_priority_unisoc(p_lcb, priority); - break; - -- case LMP_COMPID_MEDIATEK: -- l2cu_set_acl_priority_latency_mtk(p_lcb, priority); -- break; -- - default: - /* Not supported/required for other vendors */ - break; --- -2.43.1 - diff --git a/system/core/0001-init-Do-not-start-console-service-when-debuggable.patch b/system/core/0001-init-Do-not-start-console-service-when-debuggable.patch index e5d4383..c9319b1 100644 --- a/system/core/0001-init-Do-not-start-console-service-when-debuggable.patch +++ b/system/core/0001-init-Do-not-start-console-service-when-debuggable.patch @@ -1,4 +1,4 @@ -From ce23dec99926b3e688ae5cd85f5da71c8765f89c Mon Sep 17 00:00:00 2001 +From 5452f9228873c2e00897aeb74e8b453d939d2e4c Mon Sep 17 00:00:00 2001 From: Isaac Chen Date: Wed, 23 Jun 2021 13:07:30 +0800 Subject: [PATCH 1/2] init: Do not start console service when debuggable @@ -13,10 +13,10 @@ Change-Id: I34cfd6b42d3b9aee4b3e63181480cfb8b1255f29 1 file changed, 3 deletions(-) diff --git a/rootdir/init.rc b/rootdir/init.rc -index 317f80908..9dc09ea4a 100644 +index 8a2ed9fac..960534805 100644 --- a/rootdir/init.rc +++ b/rootdir/init.rc -@@ -1290,9 +1290,6 @@ on property:ro.debuggable=1 +@@ -1306,9 +1306,6 @@ on property:ro.debuggable=1 # Give reads to anyone for the accessibility trace folder on debug builds. chmod 0775 /data/misc/a11ytrace diff --git a/system/core/0002-init-Override-select-system-properties.patch b/system/core/0002-init-Override-select-system-properties.patch index 631840d..d86947a 100644 --- a/system/core/0002-init-Override-select-system-properties.patch +++ b/system/core/0002-init-Override-select-system-properties.patch @@ -1,4 +1,4 @@ -From b5256522214257f1a5f8ee5ecac84609993f8129 Mon Sep 17 00:00:00 2001 +From ddaa66e3cdc62f065143b1a8eb3f06bec65ff651 Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Wed, 23 Feb 2022 17:37:47 -0500 Subject: [PATCH 2/2] init: Override select system properties @@ -7,22 +7,14 @@ Subject: [PATCH 2/2] init: Override select system properties Change-Id: I94efa3f108ae97711026f099f367b6bea325629f --- - init/property_service.cpp | 16 ++++++++++++---- - 1 file changed, 12 insertions(+), 4 deletions(-) + init/property_service.cpp | 15 +++++++++++---- + 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/init/property_service.cpp b/init/property_service.cpp -index 013924778..ce164372a 100644 +index 157fc709c..7ec3c0b10 100644 --- a/init/property_service.cpp +++ b/init/property_service.cpp -@@ -64,6 +64,7 @@ - #include - #include - #include -+ - #include "debug_ramdisk.h" - #include "epoll.h" - #include "init.h" -@@ -796,13 +797,20 @@ static void LoadProperties(char* data, const char* filter, const char* filename, +@@ -797,13 +797,20 @@ static void LoadProperties(char* data, const char* filter, const char* filename, std::string error; if (CheckPermissions(key, value, context, cr, &error) == PROP_SUCCESS) { auto it = properties->find(key); From 42014a3948067de7062c2a6f83cbf0ee74a0b6a2 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 14 Sep 2024 17:36:10 -0400 Subject: [PATCH 20/43] [1/n] Refresh bionic, system/core for Android 15 --- ...new-mechanism-to-fake-vendor-props-on-a-per-proc.patch | 8 ++++---- ...nit-Do-not-start-console-service-when-debuggable.patch | 6 +++--- .../0002-init-Override-select-system-properties.patch | 6 +++--- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/bionic/0001-Add-new-mechanism-to-fake-vendor-props-on-a-per-proc.patch b/bionic/0001-Add-new-mechanism-to-fake-vendor-props-on-a-per-proc.patch index f24e88b..9ad8c37 100644 --- a/bionic/0001-Add-new-mechanism-to-fake-vendor-props-on-a-per-proc.patch +++ b/bionic/0001-Add-new-mechanism-to-fake-vendor-props-on-a-per-proc.patch @@ -1,4 +1,4 @@ -From 13537c3a17b60050d431d7d5b9dbfc591ee41762 Mon Sep 17 00:00:00 2001 +From 7222eae1b450166edb709164eaa060d50df0284c Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Sat, 19 Feb 2022 08:20:25 -0500 Subject: [PATCH] Add new mechanism to fake vendor props on a per-process basis @@ -17,7 +17,7 @@ Squashed: Rework property overriding 1 file changed, 79 insertions(+), 2 deletions(-) diff --git a/libc/system_properties/system_properties.cpp b/libc/system_properties/system_properties.cpp -index 9dd5e35ce..4524f8410 100644 +index e0d38a8..4f54885 100644 --- a/libc/system_properties/system_properties.cpp +++ b/libc/system_properties/system_properties.cpp @@ -36,6 +36,8 @@ @@ -109,7 +109,7 @@ index 9dd5e35ce..4524f8410 100644 static bool is_dir(const char* pathname) { struct stat info; if (stat(pathname, &info) == -1) { -@@ -156,17 +231,19 @@ uint32_t SystemProperties::AreaSerial() { +@@ -160,17 +235,19 @@ uint32_t SystemProperties::AreaSerial() { } const prop_info* SystemProperties::Find(const char* name) { @@ -132,5 +132,5 @@ index 9dd5e35ce..4524f8410 100644 static bool is_appcompat_override(const char* name) { -- -2.43.1 +2.44.0 diff --git a/system/core/0001-init-Do-not-start-console-service-when-debuggable.patch b/system/core/0001-init-Do-not-start-console-service-when-debuggable.patch index c9319b1..9c00dd0 100644 --- a/system/core/0001-init-Do-not-start-console-service-when-debuggable.patch +++ b/system/core/0001-init-Do-not-start-console-service-when-debuggable.patch @@ -1,4 +1,4 @@ -From 5452f9228873c2e00897aeb74e8b453d939d2e4c Mon Sep 17 00:00:00 2001 +From 54428255201c9f02f4827961ad077c74ff126860 Mon Sep 17 00:00:00 2001 From: Isaac Chen Date: Wed, 23 Jun 2021 13:07:30 +0800 Subject: [PATCH 1/2] init: Do not start console service when debuggable @@ -13,10 +13,10 @@ Change-Id: I34cfd6b42d3b9aee4b3e63181480cfb8b1255f29 1 file changed, 3 deletions(-) diff --git a/rootdir/init.rc b/rootdir/init.rc -index 8a2ed9fac..960534805 100644 +index 2443b7c..06cb386 100644 --- a/rootdir/init.rc +++ b/rootdir/init.rc -@@ -1306,9 +1306,6 @@ on property:ro.debuggable=1 +@@ -1317,9 +1317,6 @@ on property:ro.debuggable=1 # Give reads to anyone for the accessibility trace folder on debug builds. chmod 0775 /data/misc/a11ytrace diff --git a/system/core/0002-init-Override-select-system-properties.patch b/system/core/0002-init-Override-select-system-properties.patch index d86947a..f66edbd 100644 --- a/system/core/0002-init-Override-select-system-properties.patch +++ b/system/core/0002-init-Override-select-system-properties.patch @@ -1,4 +1,4 @@ -From ddaa66e3cdc62f065143b1a8eb3f06bec65ff651 Mon Sep 17 00:00:00 2001 +From 18b70443969bec36e1f8551b6f67a762df5fc210 Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Wed, 23 Feb 2022 17:37:47 -0500 Subject: [PATCH 2/2] init: Override select system properties @@ -11,10 +11,10 @@ Change-Id: I94efa3f108ae97711026f099f367b6bea325629f 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/init/property_service.cpp b/init/property_service.cpp -index 157fc709c..7ec3c0b10 100644 +index 0d6eb15..16e0448 100644 --- a/init/property_service.cpp +++ b/init/property_service.cpp -@@ -797,13 +797,20 @@ static void LoadProperties(char* data, const char* filter, const char* filename, +@@ -801,13 +801,20 @@ static void LoadProperties(char* data, const char* filter, const char* filename, std::string error; if (CheckPermissions(key, value, context, cr, &error) == PROP_SUCCESS) { auto it = properties->find(key); From ed1d196854a82a8d92a112bd5d5d8b94d932ce20 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 14 Sep 2024 17:59:08 -0400 Subject: [PATCH 21/43] [2/n] Refresh bt patches for Android 15 --- ...-hci-Ignore-unexpected-status-events.patch | 29 ++++++----- ..._interface-Optionally-use-sysbta-HAL.patch | 48 +++++++++---------- 2 files changed, 38 insertions(+), 39 deletions(-) diff --git a/packages/modules/Bluetooth/0001-gd-hci-Ignore-unexpected-status-events.patch b/packages/modules/Bluetooth/0001-gd-hci-Ignore-unexpected-status-events.patch index 344eacc..0bc9623 100644 --- a/packages/modules/Bluetooth/0001-gd-hci-Ignore-unexpected-status-events.patch +++ b/packages/modules/Bluetooth/0001-gd-hci-Ignore-unexpected-status-events.patch @@ -1,4 +1,4 @@ -From a4c4caca86ecfe7f0dfce67fc479f9777be26410 Mon Sep 17 00:00:00 2001 +From e164e6032a9df3bf8814cdb8d6267b1c5663687f Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 24 Aug 2022 10:41:29 -0400 Subject: [PATCH 1/2] gd: hci: Ignore unexpected status events @@ -9,31 +9,30 @@ error here (the status event comes from the failure response). Change-Id: Ifb9a65fd77f21d15a8dc1ced9240194d38218ef6 --- - system/gd/hci/hci_layer.cc | 15 +++++++-------- - 1 file changed, 7 insertions(+), 8 deletions(-) + system/gd/hci/hci_layer.cc | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/system/gd/hci/hci_layer.cc b/system/gd/hci/hci_layer.cc -index 5ae661cb75..d91bb1480d 100644 +index fe5fa33..9c411fb 100644 --- a/system/gd/hci/hci_layer.cc +++ b/system/gd/hci/hci_layer.cc -@@ -218,14 +218,13 @@ struct HciLayer::impl { - command_queue_.front().GetCallback()->Invoke( - std::move(command_complete_view)); +@@ -230,13 +230,13 @@ struct HciLayer::impl { + command_complete_view.IsValid(), "assert failed: command_complete_view.IsValid()"); + (*command_queue_.front().GetCallback())(command_complete_view); } else { -- ASSERT_LOG( +- log::assert_that( - command_queue_.front().waiting_for_status_ == is_status, -- "0x%02hx (%s) was not expecting %s event", -- op_code, -- OpCodeText(op_code).c_str(), -- logging_id.c_str()); +- "{} was not expecting {} event", +- OpCodeText(op_code), +- logging_id); - -- command_queue_.front().GetCallback()->Invoke(std::move(response_view)); +- (*command_queue_.front().GetCallback())(std::move(response_view)); + if (command_queue_.front().waiting_for_status_ == is_status) { -+ command_queue_.front().GetCallback()->Invoke(std::move(response_view)); ++ (*command_queue_.front().GetCallback())(std::move(response_view)); + } else { + CommandCompleteView command_complete_view = CommandCompleteView::Create( + EventView::Create(PacketView(std::make_shared>(std::vector())))); -+ command_queue_.front().GetCallback()->Invoke(std::move(command_complete_view)); ++ (*command_queue_.front().GetCallback())(std::move(command_complete_view)); + } } diff --git a/packages/modules/Bluetooth/0002-audio_hal_interface-Optionally-use-sysbta-HAL.patch b/packages/modules/Bluetooth/0002-audio_hal_interface-Optionally-use-sysbta-HAL.patch index 46f6904..93b4024 100644 --- a/packages/modules/Bluetooth/0002-audio_hal_interface-Optionally-use-sysbta-HAL.patch +++ b/packages/modules/Bluetooth/0002-audio_hal_interface-Optionally-use-sysbta-HAL.patch @@ -1,4 +1,4 @@ -From 16e6571d11f6a2509a496e84e0d08ebae3b39254 Mon Sep 17 00:00:00 2001 +From 63b517cc58a937ba43ff7fe2527990b4b532521d Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 24 Aug 2022 15:45:18 -0400 Subject: [PATCH 2/2] audio_hal_interface: Optionally use sysbta HAL @@ -13,10 +13,10 @@ Change-Id: I59973e6ec84c5923be8a7c67b36b2e237f000860 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/system/audio_hal_interface/aidl/client_interface_aidl.cc b/system/audio_hal_interface/aidl/client_interface_aidl.cc -index 76e8788d02..a990422993 100644 +index f4cfee0..f98032e 100644 --- a/system/audio_hal_interface/aidl/client_interface_aidl.cc +++ b/system/audio_hal_interface/aidl/client_interface_aidl.cc -@@ -63,7 +63,7 @@ BluetoothAudioClientInterface::BluetoothAudioClientInterface( +@@ -68,7 +68,7 @@ bool BluetoothAudioClientInterface::IsValid() const { bool BluetoothAudioClientInterface::is_aidl_available() { return AServiceManager_isDeclared( @@ -25,7 +25,7 @@ index 76e8788d02..a990422993 100644 } std::vector -@@ -79,7 +79,7 @@ BluetoothAudioClientInterface::GetAudioCapabilities(SessionType session_type) { +@@ -84,7 +84,7 @@ BluetoothAudioClientInterface::GetAudioCapabilities(SessionType session_type) { } auto provider_factory = IBluetoothAudioProviderFactory::fromBinder( ::ndk::SpAIBinder(AServiceManager_waitForService( @@ -33,8 +33,8 @@ index 76e8788d02..a990422993 100644 + audioProviderFactoryInterface().c_str()))); if (provider_factory == nullptr) { - LOG(ERROR) << __func__ << ", can't get capability from unknown factory"; -@@ -108,7 +108,7 @@ BluetoothAudioClientInterface::GetProviderInfo( + log::error("can't get capability from unknown factory"); +@@ -112,7 +112,7 @@ BluetoothAudioClientInterface::GetProviderInfo( if (provider_factory == nullptr) { provider_factory = IBluetoothAudioProviderFactory::fromBinder( ::ndk::SpAIBinder(AServiceManager_waitForService( @@ -43,7 +43,7 @@ index 76e8788d02..a990422993 100644 } if (provider_factory == nullptr) { -@@ -192,7 +192,7 @@ void BluetoothAudioClientInterface::FetchAudioProvider() { +@@ -193,7 +193,7 @@ void BluetoothAudioClientInterface::FetchAudioProvider() { } auto provider_factory = IBluetoothAudioProviderFactory::fromBinder( ::ndk::SpAIBinder(AServiceManager_waitForService( @@ -51,20 +51,20 @@ index 76e8788d02..a990422993 100644 + audioProviderFactoryInterface().c_str()))); if (provider_factory == nullptr) { - LOG(ERROR) << __func__ << ", can't get capability from unknown factory"; + log::error("can't get capability 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 c191e4054e..99d5192376 100644 +index 9b92319..643507e 100644 --- a/system/audio_hal_interface/aidl/client_interface_aidl.h +++ b/system/audio_hal_interface/aidl/client_interface_aidl.h -@@ -27,6 +27,7 @@ - #include "audio_ctrl_ack.h" - #include "bluetooth_audio_port_impl.h" +@@ -29,6 +29,7 @@ + #include "bta/le_audio/broadcaster/broadcaster_types.h" + #include "bta/le_audio/le_audio_types.h" #include "transport_instance.h" +#include "osi/include/properties.h" #define BLUETOOTH_AUDIO_HAL_PROP_DISABLED \ "persist.bluetooth.bluetooth_audio_hal.disabled" -@@ -175,6 +176,12 @@ class BluetoothAudioClientInterface { +@@ -177,6 +178,12 @@ class BluetoothAudioClientInterface { // "android.hardware.bluetooth.audio.IBluetoothAudioProviderFactory/default"; static inline const std::string kDefaultAudioProviderFactoryInterface = std::string() + IBluetoothAudioProviderFactory::descriptor + "/default"; @@ -78,18 +78,18 @@ index c191e4054e..99d5192376 100644 private: IBluetoothTransportInstance* transport_; diff --git a/system/audio_hal_interface/hal_version_manager.cc b/system/audio_hal_interface/hal_version_manager.cc -index 36672cb32c..d2b75e7891 100644 +index c4e01bc..55ef87b 100644 --- a/system/audio_hal_interface/hal_version_manager.cc +++ b/system/audio_hal_interface/hal_version_manager.cc -@@ -26,6 +26,7 @@ - #include "aidl/audio_aidl_interfaces.h" - #include "include/check.h" - #include "os/log.h" +@@ -20,6 +20,7 @@ + #include + #include + #include +#include "osi/include/properties.h" - namespace bluetooth { - namespace audio { -@@ -35,6 +36,12 @@ using ::aidl::android::hardware::bluetooth::audio:: + #include + +@@ -34,6 +35,12 @@ using ::aidl::android::hardware::bluetooth::audio:: static const std::string kDefaultAudioProviderFactoryInterface = std::string() + IBluetoothAudioProviderFactory::descriptor + "/default"; @@ -102,7 +102,7 @@ index 36672cb32c..d2b75e7891 100644 std::string toString(BluetoothAudioHalTransport transport) { switch (transport) { -@@ -76,7 +83,7 @@ BluetoothAudioHalVersion GetAidlInterfaceVersion() { +@@ -75,7 +82,7 @@ BluetoothAudioHalVersion GetAidlInterfaceVersion() { int version = 0; auto provider_factory = IBluetoothAudioProviderFactory::fromBinder( ::ndk::SpAIBinder(AServiceManager_waitForService( @@ -110,8 +110,8 @@ index 36672cb32c..d2b75e7891 100644 + audioProviderFactoryInterface().c_str()))); if (provider_factory == nullptr) { - LOG_ERROR( -@@ -146,7 +153,7 @@ HalVersionManager::GetProvidersFactory_2_0() { + log::error( +@@ -147,7 +154,7 @@ HalVersionManager::GetProvidersFactory_2_0() { HalVersionManager::HalVersionManager() { hal_transport_ = BluetoothAudioHalTransport::UNKNOWN; if (AServiceManager_checkService( From 54ea7eb127e2a713fd55442e0acc42a04cbab9dd Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 14 Sep 2024 18:01:27 -0400 Subject: [PATCH 22/43] [3/n] Refresh patches for p/m/Connectivity --- ...drop-support-for-V-gsi-on-pixel-5-R-base-kern.patch | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/modules/Connectivity/0001-Revert-drop-support-for-V-gsi-on-pixel-5-R-base-kern.patch b/packages/modules/Connectivity/0001-Revert-drop-support-for-V-gsi-on-pixel-5-R-base-kern.patch index 43f61ca..d80aced 100644 --- a/packages/modules/Connectivity/0001-Revert-drop-support-for-V-gsi-on-pixel-5-R-base-kern.patch +++ b/packages/modules/Connectivity/0001-Revert-drop-support-for-V-gsi-on-pixel-5-R-base-kern.patch @@ -1,4 +1,4 @@ -From 7c61a53d73e8ac2903653d92fdd2aad8e38ffad3 Mon Sep 17 00:00:00 2001 +From 9d596e5d42b506b61cc114450d09264aa323f1b7 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 16 Mar 2024 15:27:27 -0400 Subject: [PATCH] Revert "drop support for V gsi on pixel 5 R base kernel" @@ -9,10 +9,10 @@ This reverts commit bbbd18a71368a80f689b924dcf82062c2ee351b2. 1 file changed, 13 insertions(+) diff --git a/service/jni/com_android_server_connectivity_ClatCoordinator.cpp b/service/jni/com_android_server_connectivity_ClatCoordinator.cpp -index c125bd6479..787ef8fd69 100644 +index c0082bb..619f4a3 100644 --- a/service/jni/com_android_server_connectivity_ClatCoordinator.cpp +++ b/service/jni/com_android_server_connectivity_ClatCoordinator.cpp -@@ -90,6 +90,11 @@ static void verifyPerms(const char * const path, +@@ -91,6 +91,11 @@ static void verifyPerms(const char * const path, #undef ALOGF @@ -24,7 +24,7 @@ index c125bd6479..787ef8fd69 100644 static const char* kClatdDir = "/apex/com.android.tethering/bin/for-system"; static const char* kClatdBin = "/apex/com.android.tethering/bin/for-system/clatd"; -@@ -130,6 +135,14 @@ static void verifyClatPerms() { +@@ -132,6 +137,14 @@ static void verifyClatPerms() { #undef V2 @@ -40,5 +40,5 @@ index c125bd6479..787ef8fd69 100644 } -- -2.43.1 +2.44.0 From d91a9d8556a7a18cd25e3ba67c6c200933614e30 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sun, 15 Sep 2024 09:31:37 -0400 Subject: [PATCH 23/43] [4/n] Refresh patches for f/a --- ...orce-load-audio-policy-for-system-si.patch | 2 +- ...2DP-audio-ports-from-the-primary-HAL.patch | 2 +- ...gh-pitched-voice-on-Qualcomm-devices.patch | 2 +- ... 0004-Fix-BT-in-call-on-CAF-devices.patch} | 4 +-- ...nd-Q-behavior-respectively-for-tele.patch} | 30 +++++++++---------- 5 files changed, 20 insertions(+), 20 deletions(-) rename frameworks/av/{0005-Fix-BT-in-call-on-CAF-devices.patch => 0004-Fix-BT-in-call-on-CAF-devices.patch} (97%) rename frameworks/av/{0004-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch => 0005-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch} (95%) diff --git a/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch b/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch index 6f098ec..f926891 100644 --- a/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch +++ b/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch @@ -1,4 +1,4 @@ -From 682110b814e507f7ab30f0027fb3d41519fc809d Mon Sep 17 00:00:00 2001 +From b5ae870ceb8e3a1b307031125d873670b10bee8d Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 24 Aug 2022 15:42:39 -0400 Subject: [PATCH 1/5] APM: Optionally force-load audio policy for system-side diff --git a/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch b/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch index 5858af4..15fd7aa 100644 --- a/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch +++ b/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch @@ -1,4 +1,4 @@ -From 4dc4f2ff0eb1df7d8bfaab7d5d6a006035c3b403 Mon Sep 17 00:00:00 2001 +From 6ab60718820d0dd9daba8a7c2d7fcb9ebd489e05 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 25 Aug 2022 13:30:29 -0400 Subject: [PATCH 2/5] APM: Remove A2DP audio ports from the primary HAL diff --git a/frameworks/av/0003-voip-Fix-high-pitched-voice-on-Qualcomm-devices.patch b/frameworks/av/0003-voip-Fix-high-pitched-voice-on-Qualcomm-devices.patch index 77a5202..ed1eb46 100644 --- a/frameworks/av/0003-voip-Fix-high-pitched-voice-on-Qualcomm-devices.patch +++ b/frameworks/av/0003-voip-Fix-high-pitched-voice-on-Qualcomm-devices.patch @@ -1,4 +1,4 @@ -From 819c95781f525035656b02f00d5251d1328f5073 Mon Sep 17 00:00:00 2001 +From 8925759cfef3f4c1249fbb8c096f968d51d1acb2 Mon Sep 17 00:00:00 2001 From: ponces Date: Mon, 24 Oct 2022 09:38:34 +0100 Subject: [PATCH 3/5] voip: Fix high pitched voice on Qualcomm devices diff --git a/frameworks/av/0005-Fix-BT-in-call-on-CAF-devices.patch b/frameworks/av/0004-Fix-BT-in-call-on-CAF-devices.patch similarity index 97% rename from frameworks/av/0005-Fix-BT-in-call-on-CAF-devices.patch rename to frameworks/av/0004-Fix-BT-in-call-on-CAF-devices.patch index 7a7b206..66f7f5d 100644 --- a/frameworks/av/0005-Fix-BT-in-call-on-CAF-devices.patch +++ b/frameworks/av/0004-Fix-BT-in-call-on-CAF-devices.patch @@ -1,7 +1,7 @@ -From caaf4d4bd4fcc3fd59a2185b69ba0d77fe2e66c6 Mon Sep 17 00:00:00 2001 +From 5566cead40292b85ed911d400bde301811644394 Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Mon, 5 Aug 2019 18:09:50 +0200 -Subject: [PATCH 5/5] Fix BT in-call on CAF devices +Subject: [PATCH 4/5] Fix BT in-call on CAF devices See https://github.com/phhusson/treble_experimentations/issues/374 diff --git a/frameworks/av/0004-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch b/frameworks/av/0005-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch similarity index 95% rename from frameworks/av/0004-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch rename to frameworks/av/0005-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch index d62e793..a08711b 100644 --- a/frameworks/av/0004-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch +++ b/frameworks/av/0005-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch @@ -1,7 +1,7 @@ -From 96765f345007ee59522f839a6e994f571dc782d3 Mon Sep 17 00:00:00 2001 +From ed9047148097f35fa8d63a32a8d615262d9eb148 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 18 Aug 2022 15:44:46 -0400 -Subject: [PATCH 4/5] APM: Restore S, R and Q behavior respectively for +Subject: [PATCH 5/5] APM: Restore S, R and Q behavior respectively for telephony audio This conditionally reverts part of b2e5cb (T), 51c9cc (S) and afd4ce (R) @@ -36,10 +36,10 @@ Change-Id: I56d36d2aef4319935cb88a3e4771b23c6d5b2145 2 files changed, 147 insertions(+), 62 deletions(-) diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp -index 135548fb9c..fc99bdbd78 100644 +index 07073c7678..71af25c146 100644 --- a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp +++ b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp -@@ -692,6 +692,17 @@ status_t AudioPolicyManager::updateCallRoutingInternal( +@@ -719,6 +719,17 @@ status_t AudioPolicyManager::updateCallRoutingInternal( ALOGV("%s device rxDevice %s txDevice %s", __func__, rxDevices.itemAt(0)->toString().c_str(), txSourceDevice->toString().c_str()); @@ -57,7 +57,7 @@ index 135548fb9c..fc99bdbd78 100644 auto telephonyRxModule = mHwModules.getModuleForDeviceType(AUDIO_DEVICE_IN_TELEPHONY_RX, AUDIO_FORMAT_DEFAULT); auto telephonyTxModule = -@@ -714,9 +725,20 @@ status_t AudioPolicyManager::updateCallRoutingInternal( +@@ -741,9 +752,20 @@ status_t AudioPolicyManager::updateCallRoutingInternal( ALOGE("%s() no telephony Tx and/or RX device", __func__); return INVALID_OPERATION; } @@ -81,13 +81,13 @@ index 135548fb9c..fc99bdbd78 100644 } else { // If the RX device is on the primary HW module, then use legacy routing method for // voice calls via setOutputDevice() on primary output. -@@ -737,7 +759,14 @@ status_t AudioPolicyManager::updateCallRoutingInternal( +@@ -764,7 +786,14 @@ status_t AudioPolicyManager::updateCallRoutingInternal( } muteWaitMs = setOutputDevices(__func__, mPrimaryOutput, rxDevices, true, delayMs); } else { // create RX path audio patch -- connectTelephonyRxAudioSource(); +- connectTelephonyRxAudioSource(delayMs); + if (property_get_int32("ro.vndk.version", 31) >= 31) { -+ connectTelephonyRxAudioSource(); ++ connectTelephonyRxAudioSource(delayMs); + } else { + // pre-S behavior: some devices do not support SW bridging correctly when HW bridge is + // available through createAudioPatch(); startAudioSource() forces SW bridging. @@ -97,7 +97,7 @@ index 135548fb9c..fc99bdbd78 100644 // 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 -@@ -752,7 +781,12 @@ status_t AudioPolicyManager::updateCallRoutingInternal( +@@ -779,7 +808,12 @@ status_t AudioPolicyManager::updateCallRoutingInternal( closeActiveClients(activeDesc); } } @@ -111,7 +111,7 @@ index 135548fb9c..fc99bdbd78 100644 } if (waitMs != nullptr) { *waitMs = muteWaitMs; -@@ -760,6 +794,36 @@ status_t AudioPolicyManager::updateCallRoutingInternal( +@@ -787,6 +821,36 @@ status_t AudioPolicyManager::updateCallRoutingInternal( return NO_ERROR; } @@ -148,7 +148,7 @@ index 135548fb9c..fc99bdbd78 100644 bool AudioPolicyManager::isDeviceOfModule( const sp& devDesc, const char *moduleId) const { sp module = mHwModules.getModuleFromName(moduleId); -@@ -5087,83 +5151,101 @@ status_t AudioPolicyManager::createAudioPatchInternal(const struct audio_patch * +@@ -5353,83 +5417,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 outputDesc; @@ -302,16 +302,16 @@ index 135548fb9c..fc99bdbd78 100644 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))) ? +- (!sourceDesc->isInternal() || sourceDesc->isCallTx()) ? ++ (sourceDesc != nullptr && (!sourceDesc->isInternal() || sourceDesc->isCallTx())) ? 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 a1c8f6202c..ee1b595e30 100644 +index 1b4f33a961..6e9c99b18b 100644 --- a/services/audiopolicy/managerdefault/AudioPolicyManager.h +++ b/services/audiopolicy/managerdefault/AudioPolicyManager.h -@@ -964,6 +964,9 @@ protected: +@@ -1009,6 +1009,9 @@ protected: SoundTriggerSessionCollection mSoundTriggerSessions; From 3956f9b275fe4f44b46ae2c7a53c7e27e2aca3db Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sun, 15 Sep 2024 21:16:08 -0400 Subject: [PATCH 24/43] [5/n] Refresh fw/b patches for Android 15 --- ...support-glob-matching-for-properties.patch | 6 +-- ...PackageUtils-Add-glob-matching-suppo.patch | 6 +-- .../base/0003-Global-VPN-feature-1-2.patch | 36 +++++++-------- ...ze-boot-animation-to-match-screen-si.patch | 6 +-- ...ateForSlotIndex-in-SubscriptionManag.patch | 8 ++-- ...CallingIdentity-variant-with-both-ex.patch | 10 ++--- ...d.version.incremental-to-signal-OTA-.patch | 44 +++++++++---------- ...ubbleDataRepositoryTest-to-use-mocki.patch | 8 ++-- ...poofing-for-microG-Companion-Servic.patch} | 16 +++---- ...ce-Do-not-use-HIDL-providers-when-AI.patch | 32 -------------- 10 files changed, 70 insertions(+), 102 deletions(-) rename frameworks/base/{0010-Allow-signature-spoofing-for-microG-Companion-Servic.patch => 0009-Allow-signature-spoofing-for-microG-Companion-Servic.patch} (95%) delete mode 100644 frameworks/base/0009-FingerprintService-Do-not-use-HIDL-providers-when-AI.patch diff --git a/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch b/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch index db89d83..9613a9a 100644 --- a/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch +++ b/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch @@ -1,7 +1,7 @@ -From 01d09cb926af28c390360747b7e4ce78d913ba5d Mon Sep 17 00:00:00 2001 +From 488693484a0b9952915ae5f8c0b4cc6884e41d06 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Tue, 12 Oct 2021 21:37:22 -0400 -Subject: [PATCH 01/10] PackageParser: support glob matching for properties +Subject: [PATCH 1/9] PackageParser: support glob matching for properties Needed to make phh's vendor overlays work --- @@ -9,7 +9,7 @@ Needed to make phh's vendor overlays work 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java -index 4b579e7db9f8..8176cf8e8567 100644 +index 4b579e7db..8176cf8e8 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -2545,8 +2545,16 @@ public class PackageParser { diff --git a/frameworks/base/0002-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch b/frameworks/base/0002-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch index 3838bab..407b448 100644 --- a/frameworks/base/0002-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch +++ b/frameworks/base/0002-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch @@ -1,7 +1,7 @@ -From e9c04f963f87ed7c44c63017f34e24a450c3a3c9 Mon Sep 17 00:00:00 2001 +From 4fc717db714859ba5cc7768beb37ba9a7c3c1bfe Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 2 Sep 2022 21:36:06 -0400 -Subject: [PATCH 02/10] FrameworkParsingPackageUtils: Add glob matching support +Subject: [PATCH 2/9] FrameworkParsingPackageUtils: Add glob matching support for properties This is now required in addition to the one in PackageParser in order @@ -13,7 +13,7 @@ Change-Id: Ie8679c0ffe03cead4a68bd2d0eb429f05af2d417 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java b/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java -index 153dd9a93490..900151440ca9 100644 +index 153dd9a93..900151440 100644 --- a/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java +++ b/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java @@ -215,8 +215,16 @@ public class FrameworkParsingPackageUtils { diff --git a/frameworks/base/0003-Global-VPN-feature-1-2.patch b/frameworks/base/0003-Global-VPN-feature-1-2.patch index d9fbccd..a31f684 100644 --- a/frameworks/base/0003-Global-VPN-feature-1-2.patch +++ b/frameworks/base/0003-Global-VPN-feature-1-2.patch @@ -1,7 +1,7 @@ -From 55faa21dece9f9eafdfed5506c6c72130ccf9704 Mon Sep 17 00:00:00 2001 +From 3b598a42eeedbfdf1c9a97458dab8e04e3e8e744 Mon Sep 17 00:00:00 2001 From: Oliver Scott Date: Thu, 8 Jul 2021 10:41:43 -0400 -Subject: [PATCH 03/10] Global VPN feature [1/2] +Subject: [PATCH 3/9] Global VPN feature [1/2] * Modify existing VPN user range functions to conditionally have traffic from all users pass through the global VPN. @@ -28,10 +28,10 @@ Signed-off-by: Mohammad Hasan Keramat J 3 files changed, 46 insertions(+), 5 deletions(-) diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java -index 51585af10f5d..4603fc609f3d 100644 +index 5c392ae6b..594b034f3 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java -@@ -17696,6 +17696,12 @@ public final class Settings { +@@ -17891,6 +17891,12 @@ public final class Settings { CLOCKWORK_HOME_READY, }; @@ -45,7 +45,7 @@ index 51585af10f5d..4603fc609f3d 100644 * Keys we no longer back up under the current schema, but want to continue to * process when restoring historical backup datasets. diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java -index f39762766633..c7dc809c986d 100644 +index f39762766..c7dc809c9 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java @@ -44,6 +44,7 @@ import android.os.Handler; @@ -72,10 +72,10 @@ index f39762766633..c7dc809c986d 100644 mVpnUserId = newUserInfo.restrictedProfileParentId; } else { diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java -index b7ece2ea65b1..82a3f45ca993 100644 +index 5905b7de5..f8fcde0a3 100644 --- a/services/core/java/com/android/server/connectivity/Vpn.java +++ b/services/core/java/com/android/server/connectivity/Vpn.java -@@ -776,6 +776,15 @@ public class Vpn { +@@ -774,6 +774,15 @@ public class Vpn { return mAlwaysOn; } @@ -91,7 +91,7 @@ index b7ece2ea65b1..82a3f45ca993 100644 /** * Checks if a VPN app supports always-on mode. * -@@ -1718,6 +1727,7 @@ public class Vpn { +@@ -1716,6 +1725,7 @@ public class Vpn { try { // Restricted users are not allowed to create VPNs, they are tied to Owner enforceNotRestrictedUser(); @@ -99,7 +99,7 @@ index b7ece2ea65b1..82a3f45ca993 100644 final PackageManager packageManager = mUserIdContext.getPackageManager(); if (packageManager == null) { -@@ -1868,7 +1878,7 @@ public class Vpn { +@@ -1866,7 +1876,7 @@ public class Vpn { addUserToRanges(ranges, userId, allowedApplications, disallowedApplications); // If the user can have restricted profiles, assign all its restricted profiles too @@ -108,7 +108,7 @@ index b7ece2ea65b1..82a3f45ca993 100644 final long token = Binder.clearCallingIdentity(); List users; try { -@@ -1877,7 +1887,8 @@ public class Vpn { +@@ -1875,7 +1885,8 @@ public class Vpn { Binder.restoreCallingIdentity(token); } for (UserInfo user : users) { @@ -118,7 +118,7 @@ index b7ece2ea65b1..82a3f45ca993 100644 addUserToRanges(ranges, user.id, allowedApplications, disallowedApplications); } } -@@ -1958,7 +1969,8 @@ public class Vpn { +@@ -1956,7 +1967,8 @@ public class Vpn { public void onUserAdded(int userId) { // If the user is restricted tie them to the parent user's VPN UserInfo user = mUserManager.getUserInfo(userId); @@ -128,7 +128,7 @@ index b7ece2ea65b1..82a3f45ca993 100644 synchronized(Vpn.this) { final Set> existingRanges = mNetworkCapabilities.getUids(); if (existingRanges != null) { -@@ -1987,7 +1999,8 @@ public class Vpn { +@@ -1985,7 +1997,8 @@ public class Vpn { public void onUserRemoved(int userId) { // clean up if restricted UserInfo user = mUserManager.getUserInfo(userId); @@ -138,7 +138,7 @@ index b7ece2ea65b1..82a3f45ca993 100644 synchronized(Vpn.this) { final Set> existingRanges = mNetworkCapabilities.getUids(); if (existingRanges != null) { -@@ -2412,6 +2425,17 @@ public class Vpn { +@@ -2410,6 +2423,17 @@ public class Vpn { } } @@ -156,7 +156,7 @@ index b7ece2ea65b1..82a3f45ca993 100644 /** * Start legacy VPN, controlling native daemons as needed. Creates a * secondary thread to perform connection work, returning quickly. -@@ -2495,6 +2519,7 @@ public class Vpn { +@@ -2493,6 +2517,7 @@ public class Vpn { new UserHandle(mUserId))) { throw new SecurityException("Restricted users cannot establish VPNs"); } @@ -164,7 +164,7 @@ index b7ece2ea65b1..82a3f45ca993 100644 // Load certificates. String privateKey = ""; -@@ -4029,6 +4054,7 @@ public class Vpn { +@@ -4027,6 +4052,7 @@ public class Vpn { verifyCallingUidAndPackage(packageName); enforceNotRestrictedUser(); @@ -172,7 +172,7 @@ index b7ece2ea65b1..82a3f45ca993 100644 validateRequiredFeatures(profile); if (profile.isRestrictedToTestNetworks) { -@@ -4071,6 +4097,7 @@ public class Vpn { +@@ -4069,6 +4095,7 @@ public class Vpn { verifyCallingUidAndPackage(packageName); enforceNotRestrictedUser(); @@ -180,7 +180,7 @@ index b7ece2ea65b1..82a3f45ca993 100644 final long token = Binder.clearCallingIdentity(); try { -@@ -4140,6 +4167,7 @@ public class Vpn { +@@ -4138,6 +4165,7 @@ public class Vpn { requireNonNull(packageName, "No package name provided"); enforceNotRestrictedUser(); @@ -188,7 +188,7 @@ index b7ece2ea65b1..82a3f45ca993 100644 // Prepare VPN for startup if (!prepare(packageName, null /* newPackage */, VpnManager.TYPE_VPN_PLATFORM)) { -@@ -4262,6 +4290,7 @@ public class Vpn { +@@ -4260,6 +4288,7 @@ public class Vpn { requireNonNull(packageName, "No package name provided"); enforceNotRestrictedUser(); diff --git a/frameworks/base/0004-Dynamically-resize-boot-animation-to-match-screen-si.patch b/frameworks/base/0004-Dynamically-resize-boot-animation-to-match-screen-si.patch index 793fe73..8b8b40e 100644 --- a/frameworks/base/0004-Dynamically-resize-boot-animation-to-match-screen-si.patch +++ b/frameworks/base/0004-Dynamically-resize-boot-animation-to-match-screen-si.patch @@ -1,7 +1,7 @@ -From 30aef337016de69871d0bdd70568cd7d018540d7 Mon Sep 17 00:00:00 2001 +From e3bd1c9efbb40d55c0cbdc89a9c1c59350764714 Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Mon, 20 Dec 2021 15:01:41 -0500 -Subject: [PATCH 04/10] Dynamically resize boot animation to match screen size +Subject: [PATCH 4/9] Dynamically resize boot animation to match screen size Change-Id: I54e49fc6b8c670103852e212d1416e27ff976205 --- @@ -9,7 +9,7 @@ Change-Id: I54e49fc6b8c670103852e212d1416e27ff976205 1 file changed, 22 insertions(+) diff --git a/cmds/bootanimation/BootAnimation.cpp b/cmds/bootanimation/BootAnimation.cpp -index 77b74e9898b8..ba14cc03fccb 100644 +index 7eb9d0f3e..d2611e25f 100644 --- a/cmds/bootanimation/BootAnimation.cpp +++ b/cmds/bootanimation/BootAnimation.cpp @@ -618,6 +618,28 @@ status_t BootAnimation::readyToRun() { diff --git a/frameworks/base/0005-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch b/frameworks/base/0005-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch index 085efd7..5aecee0 100644 --- a/frameworks/base/0005-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch +++ b/frameworks/base/0005-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch @@ -1,7 +1,7 @@ -From a8cddefcb64fad404a0af0358505057f8890ef1d Mon Sep 17 00:00:00 2001 +From 82d6554f2dc5d9b8c7d5f978a2a04db067c07737 Mon Sep 17 00:00:00 2001 From: Andy CrossGate Yan Date: Wed, 2 Aug 2023 20:59:53 +0800 -Subject: [PATCH 05/10] Restore getSimStateForSlotIndex in SubscriptionManager +Subject: [PATCH 5/9] Restore getSimStateForSlotIndex in SubscriptionManager MTK IMS still needs it here @@ -11,10 +11,10 @@ Change-Id: I41bac57c68055f369232359a464642daab94403b 1 file changed, 14 insertions(+) diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java -index c5f2d42389e5..1324741145bd 100644 +index 76b4e0052..6650551d7 100644 --- a/telephony/java/android/telephony/SubscriptionManager.java +++ b/telephony/java/android/telephony/SubscriptionManager.java -@@ -2902,6 +2902,20 @@ public class SubscriptionManager { +@@ -2879,6 +2879,20 @@ public class SubscriptionManager { return TelephonyManager.getDefault().isNetworkRoaming(subId); } diff --git a/frameworks/base/0006-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch b/frameworks/base/0006-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch index 4fb8474..3cce8ba 100644 --- a/frameworks/base/0006-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch +++ b/frameworks/base/0006-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch @@ -1,7 +1,7 @@ -From 3090e1f2fc65eb525db64ff05c7a13f1e328deaf Mon Sep 17 00:00:00 2001 +From cda6d1eacbc47beb1a5fd579944e05be2642ce5f Mon Sep 17 00:00:00 2001 From: Andy CrossGate Yan Date: Sat, 12 Aug 2023 20:11:17 +0800 -Subject: [PATCH 06/10] Add runWithCleanCallingIdentity variant with both +Subject: [PATCH 6/9] Add runWithCleanCallingIdentity variant with both executor and return value This complements the fixup to ImsPhoneCallTracker (in fw/o/t) for U @@ -12,10 +12,10 @@ Change-Id: If444290787025e130dce4bdeaf92372ae32793fe 1 file changed, 30 insertions(+) diff --git a/telephony/common/com/android/internal/telephony/util/TelephonyUtils.java b/telephony/common/com/android/internal/telephony/util/TelephonyUtils.java -index a63db88cb614..1d5a36885307 100644 +index f31a87f2b..3f29d4bae 100644 --- a/telephony/common/com/android/internal/telephony/util/TelephonyUtils.java +++ b/telephony/common/com/android/internal/telephony/util/TelephonyUtils.java -@@ -44,7 +44,9 @@ import com.android.internal.telephony.ITelephony; +@@ -47,7 +47,9 @@ import com.android.internal.telephony.ITelephony; import java.io.PrintWriter; import java.util.Collections; import java.util.List; @@ -25,7 +25,7 @@ index a63db88cb614..1d5a36885307 100644 import java.util.concurrent.Executor; import java.util.concurrent.TimeUnit; import java.util.function.Supplier; -@@ -153,6 +155,34 @@ public final class TelephonyUtils { +@@ -158,6 +160,34 @@ public final class TelephonyUtils { } } diff --git a/frameworks/base/0007-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch b/frameworks/base/0007-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch index 9463a5b..818a897 100644 --- a/frameworks/base/0007-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch +++ b/frameworks/base/0007-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch @@ -1,7 +1,7 @@ -From da661076da778c1ea9b9ef4411b386e445ab1675 Mon Sep 17 00:00:00 2001 +From d11518030300207aa9fdfa89432cce0ee5459f24 Mon Sep 17 00:00:00 2001 From: dhacker29 Date: Tue, 24 Nov 2015 01:53:47 -0500 -Subject: [PATCH 07/10] fw/b: Use ro.build.version.incremental to signal OTA +Subject: [PATCH 7/9] fw/b: Use ro.build.version.incremental to signal OTA upgrades Squash of: @@ -63,7 +63,7 @@ Change-Id: If0eb969ba509981f9209ffa37a949d9042ef4c2a 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/core/java/android/app/admin/SystemUpdateInfo.java b/core/java/android/app/admin/SystemUpdateInfo.java -index 9e6c91f4ec31..7459b0e05e3a 100644 +index 9e6c91f4e..7459b0e05 100644 --- a/core/java/android/app/admin/SystemUpdateInfo.java +++ b/core/java/android/app/admin/SystemUpdateInfo.java @@ -133,7 +133,7 @@ public final class SystemUpdateInfo implements Parcelable { @@ -85,10 +85,10 @@ index 9e6c91f4ec31..7459b0e05e3a 100644 } try { diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java -index 3abfe082db27..a6dbeb4bd051 100644 +index fa0e2ca3b..1b035333c 100644 --- a/services/core/java/com/android/server/am/UserController.java +++ b/services/core/java/com/android/server/am/UserController.java -@@ -89,6 +89,7 @@ import android.content.pm.UserInfo; +@@ -90,6 +90,7 @@ import android.content.pm.UserInfo; import android.content.pm.UserProperties; import android.os.BatteryStats; import android.os.Binder; @@ -96,7 +96,7 @@ index 3abfe082db27..a6dbeb4bd051 100644 import android.os.Bundle; import android.os.Debug; import android.os.Handler; -@@ -775,7 +776,7 @@ class UserController implements Handler.Callback { +@@ -838,7 +839,7 @@ class UserController implements Handler.Callback { // purposefully block sending BOOT_COMPLETED until after all // PRE_BOOT receivers are finished to avoid ANR'ing apps final UserInfo info = getUserInfo(userId); @@ -106,10 +106,10 @@ index 3abfe082db27..a6dbeb4bd051 100644 // Suppress double notifications for managed profiles that // were unlocked automatically as part of their parent user being diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java -index c814a1ef1c13..441d0163cf1a 100644 +index c0b8034b9..866bb7a8c 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java -@@ -1789,7 +1789,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService +@@ -1750,7 +1750,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService } PackageManagerService m = new PackageManagerService(injector, factoryTest, @@ -118,7 +118,7 @@ index c814a1ef1c13..441d0163cf1a 100644 Build.VERSION.SDK_INT, Build.VERSION.INCREMENTAL); t.traceEnd(); // "create package manager" -@@ -2269,9 +2269,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService +@@ -2227,9 +2227,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService mIsUpgrade = !partitionsFingerprint.equals(ver.fingerprint); if (mIsUpgrade) { @@ -130,7 +130,7 @@ index c814a1ef1c13..441d0163cf1a 100644 } mPriorSdkVersion = mIsUpgrade ? ver.sdkVersion : -1; mInitAppsHelper = new InitAppsHelper(this, mApexManager, mInstallPackageHelper, -@@ -2408,8 +2407,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService +@@ -2353,8 +2352,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService // allow... it would be nice to have some better way to handle // this situation. if (mIsUpgrade) { @@ -141,7 +141,7 @@ index c814a1ef1c13..441d0163cf1a 100644 + "; regranting permissions for internal storage"); } mPermissionManager.onStorageVolumeMounted( -@@ -2431,7 +2430,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService +@@ -2376,7 +2375,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService // across OTAs and are used to drive profile verification (post OTA) and // profile compilation (without waiting to collect a fresh set of profiles). if (mIsUpgrade) { @@ -150,7 +150,7 @@ index c814a1ef1c13..441d0163cf1a 100644 for (int i = 0; i < packageSettings.size(); i++) { final PackageSetting ps = packageSettings.valueAt(i); if (Objects.equals(StorageManager.UUID_PRIVATE_INTERNAL, ps.getVolumeUuid())) { -@@ -2443,7 +2442,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService +@@ -2388,7 +2387,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService } } ver.buildFingerprint = Build.FINGERPRINT; @@ -160,10 +160,10 @@ index c814a1ef1c13..441d0163cf1a 100644 // Defer the app data fixup until we are done with app data clearing above. diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java -index fe65010b7281..04a8e24839e9 100644 +index 39565526f..9d0032a00 100644 --- a/services/core/java/com/android/server/pm/Settings.java +++ b/services/core/java/com/android/server/pm/Settings.java -@@ -482,7 +482,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile +@@ -485,7 +485,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile sdkVersion = Build.VERSION.SDK_INT; databaseVersion = CURRENT_DATABASE_VERSION; buildFingerprint = Build.FINGERPRINT; @@ -172,7 +172,7 @@ index fe65010b7281..04a8e24839e9 100644 } } -@@ -6020,7 +6020,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile +@@ -6059,7 +6059,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile } private String getExtendedFingerprint(long version) { @@ -182,10 +182,10 @@ index fe65010b7281..04a8e24839e9 100644 private static long uniformRandom(double low, double high) { diff --git a/services/core/java/com/android/server/pm/ShortcutService.java b/services/core/java/com/android/server/pm/ShortcutService.java -index c1ab3f9e3eb9..1b0c9917f43e 100644 +index 1cd77ffce..b918cfa56 100644 --- a/services/core/java/com/android/server/pm/ShortcutService.java +++ b/services/core/java/com/android/server/pm/ShortcutService.java -@@ -5230,7 +5230,7 @@ public class ShortcutService extends IShortcutService.Stub { +@@ -5248,7 +5248,7 @@ public class ShortcutService extends IShortcutService.Stub { // Injection point. String injectBuildFingerprint() { @@ -195,10 +195,10 @@ index c1ab3f9e3eb9..1b0c9917f43e 100644 final void wtf(String message) { diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java -index 7349755402b1..8ff9359c98e7 100644 +index 695e58dad..ba8f9c91f 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java -@@ -5420,7 +5420,7 @@ public class UserManagerService extends IUserManager.Stub { +@@ -5549,7 +5549,7 @@ public class UserManagerService extends IUserManager.Stub { userInfo.creationTime = getCreationTime(); userInfo.partial = true; userInfo.preCreated = preCreate; @@ -207,7 +207,7 @@ index 7349755402b1..8ff9359c98e7 100644 if (userTypeDetails.hasBadge() && parentId != UserHandle.USER_NULL) { userInfo.profileBadge = getFreeProfileBadgeLU(parentId, userType); } -@@ -6722,7 +6722,7 @@ public class UserManagerService extends IUserManager.Stub { +@@ -6851,7 +6851,7 @@ public class UserManagerService extends IUserManager.Stub { TimingsTraceAndSlog t = new TimingsTraceAndSlog(); t.traceBegin("onBeforeStartUser-" + userId); // Migrate only if build fingerprints mismatch @@ -216,7 +216,7 @@ index 7349755402b1..8ff9359c98e7 100644 userInfo.lastLoggedInFingerprint); t.traceBegin("prepareUserData"); mUserDataPreparer.prepareUserData(userInfo, StorageManager.FLAG_STORAGE_DE); -@@ -6752,7 +6752,7 @@ public class UserManagerService extends IUserManager.Stub { +@@ -6881,7 +6881,7 @@ public class UserManagerService extends IUserManager.Stub { return; } // Migrate only if build fingerprints mismatch @@ -225,7 +225,7 @@ index 7349755402b1..8ff9359c98e7 100644 userInfo.lastLoggedInFingerprint); final TimingsTraceAndSlog t = new TimingsTraceAndSlog(); -@@ -6797,7 +6797,7 @@ public class UserManagerService extends IUserManager.Stub { +@@ -6926,7 +6926,7 @@ public class UserManagerService extends IUserManager.Stub { if (now > EPOCH_PLUS_30_YEARS) { userData.info.lastLoggedInTime = now; } diff --git a/frameworks/base/0008-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch b/frameworks/base/0008-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch index a6f52d9..951cf42 100644 --- a/frameworks/base/0008-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch +++ b/frameworks/base/0008-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch @@ -1,7 +1,7 @@ -From 52196edce8f30a2b061beb934f477eec673ef43e Mon Sep 17 00:00:00 2001 +From 34fd9f1ca0563c7a13349248a659c46ad403a6f6 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 9 Dec 2023 18:37:08 -0500 -Subject: [PATCH 08/10] Revert "Convert BubbleDataRepositoryTest to use +Subject: [PATCH 8/9] Revert "Convert BubbleDataRepositoryTest to use mockito-kotlin" This reverts commit 625a23ff22f0a9327b9a24341dfa0b8fbaf61a1b. @@ -11,7 +11,7 @@ This reverts commit 625a23ff22f0a9327b9a24341dfa0b8fbaf61a1b. 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/libs/WindowManager/Shell/tests/unittest/Android.bp b/libs/WindowManager/Shell/tests/unittest/Android.bp -index 32c070305e05..6eaf19953093 100644 +index 13f95ccea..850fc50c4 100644 --- a/libs/WindowManager/Shell/tests/unittest/Android.bp +++ b/libs/WindowManager/Shell/tests/unittest/Android.bp @@ -48,7 +48,6 @@ android_test { @@ -23,7 +23,7 @@ index 32c070305e05..6eaf19953093 100644 "truth", "testables", diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleDataRepositoryTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleDataRepositoryTest.kt -index e35995775f76..0e05e01a8da3 100644 +index e35995775..0e05e01a8 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleDataRepositoryTest.kt +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleDataRepositoryTest.kt @@ -29,11 +29,11 @@ import com.google.common.truth.Truth.assertThat diff --git a/frameworks/base/0010-Allow-signature-spoofing-for-microG-Companion-Servic.patch b/frameworks/base/0009-Allow-signature-spoofing-for-microG-Companion-Servic.patch similarity index 95% rename from frameworks/base/0010-Allow-signature-spoofing-for-microG-Companion-Servic.patch rename to frameworks/base/0009-Allow-signature-spoofing-for-microG-Companion-Servic.patch index 6ac22c9..aacf064 100644 --- a/frameworks/base/0010-Allow-signature-spoofing-for-microG-Companion-Servic.patch +++ b/frameworks/base/0009-Allow-signature-spoofing-for-microG-Companion-Servic.patch @@ -1,7 +1,7 @@ -From 3b581eb494050e35ba1e044898bb85811bc4ec61 Mon Sep 17 00:00:00 2001 +From 78639261d62d3875da55e02a30a2fb57e30a3b33 Mon Sep 17 00:00:00 2001 From: LuK1337 Date: Mon, 19 Feb 2024 16:20:04 +0100 -Subject: [PATCH 10/10] Allow signature spoofing for microG Companion/Services +Subject: [PATCH 9/9] Allow signature spoofing for microG Companion/Services This patch enables signature spoofing when the following conditions are met: @@ -21,7 +21,7 @@ Change-Id: I8fc82ed266a2cc59636b662c7ea7e29c94f509b5 2 files changed, 49 insertions(+) diff --git a/services/core/java/com/android/server/pm/AppsFilterImpl.java b/services/core/java/com/android/server/pm/AppsFilterImpl.java -index cc4c2b5bf893..57263da936d6 100644 +index cc4c2b5bf..57263da93 100644 --- a/services/core/java/com/android/server/pm/AppsFilterImpl.java +++ b/services/core/java/com/android/server/pm/AppsFilterImpl.java @@ -36,6 +36,7 @@ import static com.android.server.pm.AppsFilterUtils.canQueryAsUpdateOwner; @@ -41,7 +41,7 @@ index cc4c2b5bf893..57263da936d6 100644 || newPkg.isForceQueryable() || ArrayUtils.contains(mForceQueryableByDevicePackageNames, diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java -index 9afdde53643c..fe73eadb3352 100644 +index ee0159d72..1a63f2606 100644 --- a/services/core/java/com/android/server/pm/ComputerEngine.java +++ b/services/core/java/com/android/server/pm/ComputerEngine.java @@ -102,6 +102,7 @@ import android.content.pm.UserPackage; @@ -60,7 +60,7 @@ index 9afdde53643c..fe73eadb3352 100644 import java.util.Set; import java.util.UUID; -@@ -423,6 +425,10 @@ public class ComputerEngine implements Computer { +@@ -422,6 +424,10 @@ public class ComputerEngine implements Computer { private final PackageManagerInternal.ExternalSourcesPolicy mExternalSourcesPolicy; private final CrossProfileIntentResolverEngine mCrossProfileIntentResolverEngine; @@ -71,7 +71,7 @@ index 9afdde53643c..fe73eadb3352 100644 // PackageManagerService attributes that are primitives are referenced through the // pms object directly. Primitives are the only attributes so referenced. protected final PackageManagerService mService; -@@ -1465,6 +1471,42 @@ public class ComputerEngine implements Computer { +@@ -1481,6 +1487,42 @@ public class ComputerEngine implements Computer { return result; } @@ -114,7 +114,7 @@ index 9afdde53643c..fe73eadb3352 100644 public final PackageInfo generatePackageInfo(PackageStateInternal ps, @PackageManager.PackageInfoFlagsBits long flags, int userId) { if (!mUserManager.exists(userId)) return null; -@@ -1513,6 +1555,10 @@ public class ComputerEngine implements Computer { +@@ -1529,6 +1571,10 @@ public class ComputerEngine implements Computer { packageInfo.packageName = packageInfo.applicationInfo.packageName = resolveExternalPackageName(p); @@ -125,7 +125,7 @@ index 9afdde53643c..fe73eadb3352 100644 if (Flags.provideInfoOfApkInApex()) { final String apexModuleName = ps.getApexModuleName(); if (apexModuleName != null) { -@@ -1520,6 +1566,7 @@ public class ComputerEngine implements Computer { +@@ -1536,6 +1582,7 @@ public class ComputerEngine implements Computer { mApexManager.getActivePackageNameForApexModuleName(apexModuleName)); } } diff --git a/frameworks/base/0009-FingerprintService-Do-not-use-HIDL-providers-when-AI.patch b/frameworks/base/0009-FingerprintService-Do-not-use-HIDL-providers-when-AI.patch deleted file mode 100644 index d84c410..0000000 --- a/frameworks/base/0009-FingerprintService-Do-not-use-HIDL-providers-when-AI.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 0f6bac48544a7b15180fe62f970c6c9760d12b5c Mon Sep 17 00:00:00 2001 -From: Peter Cai -Date: Fri, 15 Dec 2023 22:48:39 -0500 -Subject: [PATCH 09/10] FingerprintService: Do not use HIDL providers when AIDL - is present - -This fixes duplicated sensor ID when config_biometric_sensors is defined -on AIDL devices. - -Change-Id: I9942e91a95106a7a11ab7ddf145d87562d1b7c0d ---- - .../biometrics/sensors/fingerprint/FingerprintService.java | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java -index 1ba12134ab29..09a24052e18f 100644 ---- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java -+++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java -@@ -913,8 +913,9 @@ public class FingerprintService extends SystemService { - filteredInstances = filterAvailableHalInstances(hidlSensors, aidlSensors); - - final List providers = new ArrayList<>(); -- providers.addAll(getHidlProviders(filteredInstances.first)); - providers.addAll(getAidlProviders(filteredInstances.second)); -+ if (providers.isEmpty()) // Only use HIDL providers if AIDL ones are not found -+ providers.addAll(getHidlProviders(filteredInstances.first)); - - return providers; - }); --- -2.44.0 - From bf5c1bb3c09847f9033948b6de7f4783de3fbf2f Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 21 Sep 2024 08:27:13 -0400 Subject: [PATCH 25/43] [6/n] f/o: Update patches for Android 15 --- ...-IMS-calls-static-ImsManager.updateImsService.patch | 8 ++++---- ...duce-public-void-TelephonyMetrics.writeRilSen.patch | 6 +++--- ...eband-being-too-long-to-fit-into-a-91-chars-p.patch | 8 ++++---- ...onally-revert-Block-Binder-thread-until-incom.patch | 6 +++--- ...ptionController-Do-not-override-default-calli.patch | 10 +++++----- 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/frameworks/opt/net/ims/0001-Pie-MTK-IMS-calls-static-ImsManager.updateImsService.patch b/frameworks/opt/net/ims/0001-Pie-MTK-IMS-calls-static-ImsManager.updateImsService.patch index 732d74a..9fffba3 100644 --- a/frameworks/opt/net/ims/0001-Pie-MTK-IMS-calls-static-ImsManager.updateImsService.patch +++ b/frameworks/opt/net/ims/0001-Pie-MTK-IMS-calls-static-ImsManager.updateImsService.patch @@ -1,4 +1,4 @@ -From 45ee12fd0ac92b5e6a07de927716b8b03c18f1fd Mon Sep 17 00:00:00 2001 +From c776ae5c5e002aa824137df6b367b5873cb23fcf Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Sun, 14 Nov 2021 13:47:29 -0500 Subject: [PATCH] Pie MTK IMS calls static @@ -10,10 +10,10 @@ Change-Id: I3dd66d436629d37c8ec795df6569736195ae570e 1 file changed, 8 insertions(+) diff --git a/src/java/com/android/ims/ImsManager.java b/src/java/com/android/ims/ImsManager.java -index b5a1168b..547a3a16 100644 +index 217a26f..b687e4b 100644 --- a/src/java/com/android/ims/ImsManager.java +++ b/src/java/com/android/ims/ImsManager.java -@@ -1666,6 +1666,14 @@ public class ImsManager implements FeatureUpdates { +@@ -1679,6 +1679,14 @@ public class ImsManager implements FeatureUpdates { } } @@ -29,5 +29,5 @@ index b5a1168b..547a3a16 100644 * Push configuration updates to the ImsService implementation. */ -- -2.41.0 +2.44.0 diff --git a/frameworks/opt/telephony/0001-Reintroduce-public-void-TelephonyMetrics.writeRilSen.patch b/frameworks/opt/telephony/0001-Reintroduce-public-void-TelephonyMetrics.writeRilSen.patch index c36dff6..2c9d0e9 100644 --- a/frameworks/opt/telephony/0001-Reintroduce-public-void-TelephonyMetrics.writeRilSen.patch +++ b/frameworks/opt/telephony/0001-Reintroduce-public-void-TelephonyMetrics.writeRilSen.patch @@ -1,4 +1,4 @@ -From ab08eec99a802be5014b876823cab89c2d2e9ef6 Mon Sep 17 00:00:00 2001 +From 5c72e94d6d8822bae2a5dbfaaf47f4631bade8ae 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 1/4] Reintroduce 'public void @@ -18,7 +18,7 @@ Co-authored-by: Sarah Vandomelen 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 3fdbfe0ed7..fb8011c3df 100644 +index 3fdbfe0..fb8011c 100644 --- a/src/java/com/android/internal/telephony/metrics/TelephonyMetrics.java +++ b/src/java/com/android/internal/telephony/metrics/TelephonyMetrics.java @@ -2320,6 +2320,19 @@ public class TelephonyMetrics { @@ -42,5 +42,5 @@ index 3fdbfe0ed7..fb8011c3df 100644 * Write Send SMS event using ImsService. Expecting response from * {@link #writeOnSmsSolicitedResponse}. -- -2.43.1 +2.44.0 diff --git a/frameworks/opt/telephony/0002-Fix-baseband-being-too-long-to-fit-into-a-91-chars-p.patch b/frameworks/opt/telephony/0002-Fix-baseband-being-too-long-to-fit-into-a-91-chars-p.patch index 0426c7b..0bb1e27 100644 --- a/frameworks/opt/telephony/0002-Fix-baseband-being-too-long-to-fit-into-a-91-chars-p.patch +++ b/frameworks/opt/telephony/0002-Fix-baseband-being-too-long-to-fit-into-a-91-chars-p.patch @@ -1,4 +1,4 @@ -From ca7d875358b275da98fcd55d583a9121bb68f309 Mon Sep 17 00:00:00 2001 +From 2d369615a75bee5933d927874d25e8e758a52f2d Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Mon, 6 Dec 2021 16:28:22 -0500 Subject: [PATCH 2/4] Fix baseband being too long to fit into a 91 chars @@ -10,10 +10,10 @@ Change-Id: I1762e4a8cc137626be89f350229d6be162bdaf57 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java/com/android/internal/telephony/GsmCdmaPhone.java b/src/java/com/android/internal/telephony/GsmCdmaPhone.java -index 620b8711e2..951ef23115 100644 +index 93a0c2f..2cabeb6 100644 --- a/src/java/com/android/internal/telephony/GsmCdmaPhone.java +++ b/src/java/com/android/internal/telephony/GsmCdmaPhone.java -@@ -3373,7 +3373,7 @@ public class GsmCdmaPhone extends Phone { +@@ -3444,7 +3444,7 @@ public class GsmCdmaPhone extends Phone { String version = (String)ar.result; if (version != null) { int length = version.length(); @@ -23,5 +23,5 @@ index 620b8711e2..951ef23115 100644 length <= MAX_VERSION_LEN ? version : version.substring(length - MAX_VERSION_LEN, length)); -- -2.43.1 +2.44.0 diff --git a/frameworks/opt/telephony/0003-Conditionally-revert-Block-Binder-thread-until-incom.patch b/frameworks/opt/telephony/0003-Conditionally-revert-Block-Binder-thread-until-incom.patch index eb703a0..23a62de 100644 --- a/frameworks/opt/telephony/0003-Conditionally-revert-Block-Binder-thread-until-incom.patch +++ b/frameworks/opt/telephony/0003-Conditionally-revert-Block-Binder-thread-until-incom.patch @@ -1,4 +1,4 @@ -From 8a28ea8c3ecb378dba2aff1d93e87095d71df873 Mon Sep 17 00:00:00 2001 +From 0a4d81b29a66003ed09fab955e898908e9f6edd6 Mon Sep 17 00:00:00 2001 From: ExactExampl Date: Tue, 11 Oct 2022 12:38:00 +0300 Subject: [PATCH 3/4] Conditionally revert "Block Binder thread until incoming @@ -17,7 +17,7 @@ Change-Id: I55a8f3bbca4a2b9a6bc7511e9fe2d0884a8818e5 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java -index e95433c2ee..7e4fdf6b41 100644 +index e73eafd..2cf59c7 100644 --- a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java +++ b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java @@ -70,6 +70,7 @@ import android.os.Registrant; @@ -50,5 +50,5 @@ index e95433c2ee..7e4fdf6b41 100644 @Override -- -2.43.1 +2.44.0 diff --git a/frameworks/opt/telephony/0004-SubscriptionController-Do-not-override-default-calli.patch b/frameworks/opt/telephony/0004-SubscriptionController-Do-not-override-default-calli.patch index 391932b..ca1d37a 100644 --- a/frameworks/opt/telephony/0004-SubscriptionController-Do-not-override-default-calli.patch +++ b/frameworks/opt/telephony/0004-SubscriptionController-Do-not-override-default-calli.patch @@ -1,4 +1,4 @@ -From d7626b9015a9505c225254dcf36e5472f4c4e4a8 Mon Sep 17 00:00:00 2001 +From d23d744b546bc88cd6489f9bcd39d001855cf2b8 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Mon, 5 Sep 2022 14:02:37 -0400 Subject: [PATCH 4/4] SubscriptionController: Do not override default calling @@ -18,10 +18,10 @@ Change-Id: Iccab64e9b3b3ab4773bd8944d47c2006f229d472 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java b/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java -index a8d05a334b..42310ccc3f 100644 +index 0e98a9e..c511b1f 100644 --- a/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java +++ b/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java -@@ -81,6 +81,7 @@ import android.util.Base64; +@@ -86,6 +86,7 @@ import android.util.Base64; import android.util.EventLog; import android.util.IndentingPrintWriter; import android.util.LocalLog; @@ -29,7 +29,7 @@ index a8d05a334b..42310ccc3f 100644 import com.android.internal.R; import com.android.internal.annotations.VisibleForTesting; -@@ -3023,7 +3024,22 @@ public class SubscriptionManagerService extends ISub.Stub { +@@ -3221,7 +3222,22 @@ public class SubscriptionManagerService extends ISub.Stub { TelecomManager telecomManager = mContext.getSystemService(TelecomManager.class); if (telecomManager != null) { @@ -54,5 +54,5 @@ index a8d05a334b..42310ccc3f 100644 updateDefaultSubId(); -- -2.43.1 +2.44.0 From d59a47018374e4974fe5738b626d7a92849c8867 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 21 Sep 2024 08:48:11 -0400 Subject: [PATCH 26/43] [7/n] p/a/Launcher3: Refresh for AOSP 15 --- ...1-Expose-themed-icon-setting-in-ThemePicker.patch | 8 ++++---- ...g.patch => 0002-Disable-QSB-in-BuildConfig.patch} | 8 ++++---- ...Properly-expose-GridCustomizationsProvider.patch} | 12 ++++++------ 3 files changed, 14 insertions(+), 14 deletions(-) rename packages/apps/Launcher3/{0003-Disable-QSB-in-BuildConfig.patch => 0002-Disable-QSB-in-BuildConfig.patch} (85%) rename packages/apps/Launcher3/{0002-Properly-expose-GridCustomizationsProvider.patch => 0003-Properly-expose-GridCustomizationsProvider.patch} (75%) diff --git a/packages/apps/Launcher3/0001-Expose-themed-icon-setting-in-ThemePicker.patch b/packages/apps/Launcher3/0001-Expose-themed-icon-setting-in-ThemePicker.patch index a62384f..4a47169 100644 --- a/packages/apps/Launcher3/0001-Expose-themed-icon-setting-in-ThemePicker.patch +++ b/packages/apps/Launcher3/0001-Expose-themed-icon-setting-in-ThemePicker.patch @@ -1,4 +1,4 @@ -From ab27acf28b7e01c2fe9933849eaeb1622f5dfb6a Mon Sep 17 00:00:00 2001 +From dfc41a9e3661541deb16120d668a2db258ac5bdc Mon Sep 17 00:00:00 2001 From: Danny Lin Date: Mon, 11 Oct 2021 20:48:44 -0700 Subject: [PATCH 1/3] Expose themed icon setting in ThemePicker @@ -10,7 +10,7 @@ Change-Id: I44e9288c3de13a3604b7a03857ec400753317d9a 2 files changed, 6 insertions(+) diff --git a/AndroidManifest.xml b/AndroidManifest.xml -index 4f580e0bd6..d5b14e5bb9 100644 +index 517bd6d..89291c1 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -67,6 +67,9 @@ @@ -24,7 +24,7 @@ index 4f580e0bd6..d5b14e5bb9 100644 diff --git a/quickstep/AndroidManifest-launcher.xml b/quickstep/AndroidManifest-launcher.xml -index c6e2d8cb74..1d7405e345 100644 +index c6e2d8c..1d7405e 100644 --- a/quickstep/AndroidManifest-launcher.xml +++ b/quickstep/AndroidManifest-launcher.xml @@ -65,6 +65,9 @@ @@ -38,5 +38,5 @@ index c6e2d8cb74..1d7405e345 100644 -- -2.43.1 +2.44.0 diff --git a/packages/apps/Launcher3/0003-Disable-QSB-in-BuildConfig.patch b/packages/apps/Launcher3/0002-Disable-QSB-in-BuildConfig.patch similarity index 85% rename from packages/apps/Launcher3/0003-Disable-QSB-in-BuildConfig.patch rename to packages/apps/Launcher3/0002-Disable-QSB-in-BuildConfig.patch index d15ae54..08f2328 100644 --- a/packages/apps/Launcher3/0003-Disable-QSB-in-BuildConfig.patch +++ b/packages/apps/Launcher3/0002-Disable-QSB-in-BuildConfig.patch @@ -1,7 +1,7 @@ -From a87776a7970affcfbf86a8e22d9f109869d0163f Mon Sep 17 00:00:00 2001 +From 3cdbed6a05724beff6104f6fa0bb20ff9b4e9a37 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 7 Jul 2023 18:13:32 -0400 -Subject: [PATCH 3/3] Disable QSB in BuildConfig +Subject: [PATCH 2/3] Disable QSB in BuildConfig Change-Id: I3150ef1d9b8c161ed2a6569d1ae75bba0060b36f --- @@ -9,7 +9,7 @@ Change-Id: I3150ef1d9b8c161ed2a6569d1ae75bba0060b36f 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src_build_config/com/android/launcher3/BuildConfig.java b/src_build_config/com/android/launcher3/BuildConfig.java -index 3841969e9d..ae151abe75 100644 +index 6d4f56d..2630ec1 100644 --- a/src_build_config/com/android/launcher3/BuildConfig.java +++ b/src_build_config/com/android/launcher3/BuildConfig.java @@ -24,7 +24,7 @@ public final class BuildConfig { @@ -22,5 +22,5 @@ index 3841969e9d..ae151abe75 100644 /** * Flag to state if the widget on the top of the first screen should be shown. -- -2.43.1 +2.44.0 diff --git a/packages/apps/Launcher3/0002-Properly-expose-GridCustomizationsProvider.patch b/packages/apps/Launcher3/0003-Properly-expose-GridCustomizationsProvider.patch similarity index 75% rename from packages/apps/Launcher3/0002-Properly-expose-GridCustomizationsProvider.patch rename to packages/apps/Launcher3/0003-Properly-expose-GridCustomizationsProvider.patch index f5eb255..5c5451e 100644 --- a/packages/apps/Launcher3/0002-Properly-expose-GridCustomizationsProvider.patch +++ b/packages/apps/Launcher3/0003-Properly-expose-GridCustomizationsProvider.patch @@ -1,7 +1,7 @@ -From 910c5a085260dfd33a0a2377b03a3c0eeb647cc5 Mon Sep 17 00:00:00 2001 +From a75d769d962e2356d2685dde26141edb312c8e00 Mon Sep 17 00:00:00 2001 From: Luca Stefani Date: Fri, 1 Nov 2019 23:17:59 +0100 -Subject: [PATCH 2/3] Properly expose GridCustomizationsProvider +Subject: [PATCH 3/3] Properly expose GridCustomizationsProvider Change-Id: I8268a215257ae0e399c56ac8b44cdfdff8cc92a0 --- @@ -9,20 +9,20 @@ Change-Id: I8268a215257ae0e399c56ac8b44cdfdff8cc92a0 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/AndroidManifest-common.xml b/AndroidManifest-common.xml -index 7e824ec15c..b87972e0ac 100644 +index 80d2eac..53bdfff 100644 --- a/AndroidManifest-common.xml +++ b/AndroidManifest-common.xml @@ -138,7 +138,9 @@ -+ android:exported="true" ++ android:exported="true" + android:writePermission="${packageName}.permission.WRITE_SETTINGS" + android:readPermission="${packageName}.permission.READ_SETTINGS" /> - Show pointer while hovering + + + + + Global VPN @@ -30,7 +29,7 @@ index ef93ba71132..a83c8de557e 100644 + You need to disable all active VPN connections first to enable this diff --git a/res/xml/vpn_app_management.xml b/res/xml/vpn_app_management.xml -index dffbbbe3116..93df378fd76 100644 +index dffbbbe..93df378 100644 --- a/res/xml/vpn_app_management.xml +++ b/res/xml/vpn_app_management.xml @@ -23,6 +23,12 @@ @@ -47,7 +46,7 @@ index dffbbbe3116..93df378fd76 100644 android:key="always_on_vpn" android:title="@string/vpn_menu_lockdown" diff --git a/src/com/android/settings/vpn2/AppManagementFragment.java b/src/com/android/settings/vpn2/AppManagementFragment.java -index 00c8f5994ce..c4f447f44fb 100644 +index 00c8f59..c4f447f 100644 --- a/src/com/android/settings/vpn2/AppManagementFragment.java +++ b/src/com/android/settings/vpn2/AppManagementFragment.java @@ -27,10 +27,12 @@ import android.content.pm.ApplicationInfo; From 6beaf5912d517d4e59902bb50630920bc94e83fd Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sun, 22 Sep 2024 22:54:54 -0400 Subject: [PATCH 29/43] fw/b: Add fp sensor fix for Android 15 --- ...support-glob-matching-for-properties.patch | 4 +- ...PackageUtils-Add-glob-matching-suppo.patch | 4 +- .../base/0003-Global-VPN-feature-1-2.patch | 4 +- ...ze-boot-animation-to-match-screen-si.patch | 4 +- ...ateForSlotIndex-in-SubscriptionManag.patch | 4 +- ...CallingIdentity-variant-with-both-ex.patch | 4 +- ...d.version.incremental-to-signal-OTA-.patch | 4 +- ...ubbleDataRepositoryTest-to-use-mocki.patch | 4 +- ...spoofing-for-microG-Companion-Servic.patch | 4 +- ...-and-AIDL-fingerprint-services-are-m.patch | 42 +++++++++++++++++++ 10 files changed, 60 insertions(+), 18 deletions(-) create mode 100644 frameworks/base/0010-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch diff --git a/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch b/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch index 9613a9a..ac724eb 100644 --- a/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch +++ b/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch @@ -1,7 +1,7 @@ -From 488693484a0b9952915ae5f8c0b4cc6884e41d06 Mon Sep 17 00:00:00 2001 +From da111d2b6b6f8e1edf6872d0a8f379c2ed6b676c Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Tue, 12 Oct 2021 21:37:22 -0400 -Subject: [PATCH 1/9] PackageParser: support glob matching for properties +Subject: [PATCH 01/10] PackageParser: support glob matching for properties Needed to make phh's vendor overlays work --- diff --git a/frameworks/base/0002-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch b/frameworks/base/0002-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch index 407b448..8ac1160 100644 --- a/frameworks/base/0002-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch +++ b/frameworks/base/0002-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch @@ -1,7 +1,7 @@ -From 4fc717db714859ba5cc7768beb37ba9a7c3c1bfe Mon Sep 17 00:00:00 2001 +From 1ad3c8a609bdeadeb402036ead657f071bdf1878 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 2 Sep 2022 21:36:06 -0400 -Subject: [PATCH 2/9] FrameworkParsingPackageUtils: Add glob matching support +Subject: [PATCH 02/10] FrameworkParsingPackageUtils: Add glob matching support for properties This is now required in addition to the one in PackageParser in order diff --git a/frameworks/base/0003-Global-VPN-feature-1-2.patch b/frameworks/base/0003-Global-VPN-feature-1-2.patch index a31f684..baa0823 100644 --- a/frameworks/base/0003-Global-VPN-feature-1-2.patch +++ b/frameworks/base/0003-Global-VPN-feature-1-2.patch @@ -1,7 +1,7 @@ -From 3b598a42eeedbfdf1c9a97458dab8e04e3e8e744 Mon Sep 17 00:00:00 2001 +From 270746ccbb9824725951f371a401534eea9e9798 Mon Sep 17 00:00:00 2001 From: Oliver Scott Date: Thu, 8 Jul 2021 10:41:43 -0400 -Subject: [PATCH 3/9] Global VPN feature [1/2] +Subject: [PATCH 03/10] Global VPN feature [1/2] * Modify existing VPN user range functions to conditionally have traffic from all users pass through the global VPN. diff --git a/frameworks/base/0004-Dynamically-resize-boot-animation-to-match-screen-si.patch b/frameworks/base/0004-Dynamically-resize-boot-animation-to-match-screen-si.patch index 8b8b40e..dbc93b6 100644 --- a/frameworks/base/0004-Dynamically-resize-boot-animation-to-match-screen-si.patch +++ b/frameworks/base/0004-Dynamically-resize-boot-animation-to-match-screen-si.patch @@ -1,7 +1,7 @@ -From e3bd1c9efbb40d55c0cbdc89a9c1c59350764714 Mon Sep 17 00:00:00 2001 +From ad942f3c0450d09d8e39f79af90354fecc9cd873 Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Mon, 20 Dec 2021 15:01:41 -0500 -Subject: [PATCH 4/9] Dynamically resize boot animation to match screen size +Subject: [PATCH 04/10] Dynamically resize boot animation to match screen size Change-Id: I54e49fc6b8c670103852e212d1416e27ff976205 --- diff --git a/frameworks/base/0005-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch b/frameworks/base/0005-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch index 5aecee0..336da8e 100644 --- a/frameworks/base/0005-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch +++ b/frameworks/base/0005-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch @@ -1,7 +1,7 @@ -From 82d6554f2dc5d9b8c7d5f978a2a04db067c07737 Mon Sep 17 00:00:00 2001 +From 9ac87d38461af8732ddb8c5d450e89f19fe26b44 Mon Sep 17 00:00:00 2001 From: Andy CrossGate Yan Date: Wed, 2 Aug 2023 20:59:53 +0800 -Subject: [PATCH 5/9] Restore getSimStateForSlotIndex in SubscriptionManager +Subject: [PATCH 05/10] Restore getSimStateForSlotIndex in SubscriptionManager MTK IMS still needs it here diff --git a/frameworks/base/0006-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch b/frameworks/base/0006-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch index 3cce8ba..7260293 100644 --- a/frameworks/base/0006-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch +++ b/frameworks/base/0006-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch @@ -1,7 +1,7 @@ -From cda6d1eacbc47beb1a5fd579944e05be2642ce5f Mon Sep 17 00:00:00 2001 +From 86e7d4b971af424acc24d1df1f8994b8d9853b2b Mon Sep 17 00:00:00 2001 From: Andy CrossGate Yan Date: Sat, 12 Aug 2023 20:11:17 +0800 -Subject: [PATCH 6/9] Add runWithCleanCallingIdentity variant with both +Subject: [PATCH 06/10] Add runWithCleanCallingIdentity variant with both executor and return value This complements the fixup to ImsPhoneCallTracker (in fw/o/t) for U diff --git a/frameworks/base/0007-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch b/frameworks/base/0007-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch index 818a897..9b76f34 100644 --- a/frameworks/base/0007-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch +++ b/frameworks/base/0007-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch @@ -1,7 +1,7 @@ -From d11518030300207aa9fdfa89432cce0ee5459f24 Mon Sep 17 00:00:00 2001 +From 9be9ed959b6c35a1b946c41e6fede51579f1214c Mon Sep 17 00:00:00 2001 From: dhacker29 Date: Tue, 24 Nov 2015 01:53:47 -0500 -Subject: [PATCH 7/9] fw/b: Use ro.build.version.incremental to signal OTA +Subject: [PATCH 07/10] fw/b: Use ro.build.version.incremental to signal OTA upgrades Squash of: diff --git a/frameworks/base/0008-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch b/frameworks/base/0008-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch index 951cf42..fd7f416 100644 --- a/frameworks/base/0008-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch +++ b/frameworks/base/0008-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch @@ -1,7 +1,7 @@ -From 34fd9f1ca0563c7a13349248a659c46ad403a6f6 Mon Sep 17 00:00:00 2001 +From 8cfa24a2af3d375d51bb05a91a40cb6f53aa6b0a Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 9 Dec 2023 18:37:08 -0500 -Subject: [PATCH 8/9] Revert "Convert BubbleDataRepositoryTest to use +Subject: [PATCH 08/10] Revert "Convert BubbleDataRepositoryTest to use mockito-kotlin" This reverts commit 625a23ff22f0a9327b9a24341dfa0b8fbaf61a1b. diff --git a/frameworks/base/0009-Allow-signature-spoofing-for-microG-Companion-Servic.patch b/frameworks/base/0009-Allow-signature-spoofing-for-microG-Companion-Servic.patch index aacf064..c4b2364 100644 --- a/frameworks/base/0009-Allow-signature-spoofing-for-microG-Companion-Servic.patch +++ b/frameworks/base/0009-Allow-signature-spoofing-for-microG-Companion-Servic.patch @@ -1,7 +1,7 @@ -From 78639261d62d3875da55e02a30a2fb57e30a3b33 Mon Sep 17 00:00:00 2001 +From 81fb8bb84d833c342e6a563e012d3276b250aa44 Mon Sep 17 00:00:00 2001 From: LuK1337 Date: Mon, 19 Feb 2024 16:20:04 +0100 -Subject: [PATCH 9/9] Allow signature spoofing for microG Companion/Services +Subject: [PATCH 09/10] Allow signature spoofing for microG Companion/Services This patch enables signature spoofing when the following conditions are met: diff --git a/frameworks/base/0010-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch b/frameworks/base/0010-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch new file mode 100644 index 0000000..acfd315 --- /dev/null +++ b/frameworks/base/0010-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch @@ -0,0 +1,42 @@ +From 5355fa3ee31421212f5a485da1e9f88f2acb1cd9 Mon Sep 17 00:00:00 2001 +From: Peter Cai +Date: Sun, 22 Sep 2024 22:53:01 -0400 +Subject: [PATCH 10/10] AuthService: HIDL and AIDL fingerprint services are + mutually exclusive + +...and make sure that we prioritize AIDL over HIDL. This is essential +for GSIs to boot on newer devices while having the HIDL property set for +compatibility with older ones. + +Change-Id: I834297a44674820d813d8f6d376dfd294f084f3b +--- + .../com/android/server/biometrics/AuthService.java | 10 ++++------ + 1 file changed, 4 insertions(+), 6 deletions(-) + +diff --git a/services/core/java/com/android/server/biometrics/AuthService.java b/services/core/java/com/android/server/biometrics/AuthService.java +index 2a1687209..e2ac79a34 100644 +--- a/services/core/java/com/android/server/biometrics/AuthService.java ++++ b/services/core/java/com/android/server/biometrics/AuthService.java +@@ -890,15 +890,13 @@ public class AuthService extends SystemService { + + handlerProvider.getFingerprintHandler().post(() -> { + final FingerprintSensorConfigurations mFingerprintSensorConfigurations = +- new FingerprintSensorConfigurations(!(hidlConfigStrings != null +- && hidlConfigStrings.length > 0)); +- +- if (hidlConfigStrings != null && hidlConfigStrings.length > 0) { +- mFingerprintSensorConfigurations.addHidlSensors(hidlConfigStrings, context); +- } ++ new FingerprintSensorConfigurations(fingerprintAidlInstances != null ++ && fingerprintAidlInstances.length > 0); + + if (fingerprintAidlInstances != null && fingerprintAidlInstances.length > 0) { + mFingerprintSensorConfigurations.addAidlSensors(fingerprintAidlInstances); ++ } else if (hidlConfigStrings != null && hidlConfigStrings.length > 0) { ++ mFingerprintSensorConfigurations.addHidlSensors(hidlConfigStrings, context); + } + + if (fingerprintService != null) { +-- +2.44.0 + From 11f7628593c33f091e2950b7d9f0e44333d5fa51 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 5 Oct 2024 10:39:53 -0400 Subject: [PATCH 30/43] Temporary patch for ExactCalculator --- ...1-Temporarily-switch-targetSDK-to-34.patch | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 packages/apps/ExactCalculator/0001-Temporarily-switch-targetSDK-to-34.patch diff --git a/packages/apps/ExactCalculator/0001-Temporarily-switch-targetSDK-to-34.patch b/packages/apps/ExactCalculator/0001-Temporarily-switch-targetSDK-to-34.patch new file mode 100644 index 0000000..b85f57b --- /dev/null +++ b/packages/apps/ExactCalculator/0001-Temporarily-switch-targetSDK-to-34.patch @@ -0,0 +1,26 @@ +From a32887d1305e6095a8ba71b3fd60fe457c661b20 Mon Sep 17 00:00:00 2001 +From: Peter Cai +Date: Sat, 5 Oct 2024 10:39:15 -0400 +Subject: [PATCH] Temporarily switch targetSDK to 34 + +...before LineageOS pushes the SDK 35 updates +--- + Android.bp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Android.bp b/Android.bp +index 5f5359b..d9d135b 100644 +--- a/Android.bp ++++ b/Android.bp +@@ -19,7 +19,7 @@ android_app { + + resource_dirs: ["res"], + +- sdk_version: "current", ++ sdk_version: "34", + + overrides: ["Calculator"], + +-- +2.44.0 + From 5f58e66d4b718afaff815b834c8e8ed8ae1d1442 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 5 Oct 2024 16:40:35 -0400 Subject: [PATCH 31/43] Add phh's camera ID filter-out patch --- ...orce-load-audio-policy-for-system-si.patch | 4 +- ...2DP-audio-ports-from-the-primary-HAL.patch | 4 +- ...gh-pitched-voice-on-Qualcomm-devices.patch | 4 +- .../0004-Fix-BT-in-call-on-CAF-devices.patch | 4 +- ...and-Q-behavior-respectively-for-tele.patch | 4 +- ...-Make-camera-IDs-filter-out-optional.patch | 47 +++++++++++++++++++ 6 files changed, 57 insertions(+), 10 deletions(-) create mode 100644 frameworks/av/0006-Make-camera-IDs-filter-out-optional.patch diff --git a/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch b/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch index f926891..bef710e 100644 --- a/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch +++ b/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch @@ -1,7 +1,7 @@ -From b5ae870ceb8e3a1b307031125d873670b10bee8d Mon Sep 17 00:00:00 2001 +From 94398a2d4ce14c0eeb86eecc4d6982a083bc910f Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 24 Aug 2022 15:42:39 -0400 -Subject: [PATCH 1/5] APM: Optionally force-load audio policy for system-side +Subject: [PATCH 1/6] APM: Optionally force-load audio policy for system-side bt audio HAL Required to support our system-side bt audio implementation, i.e. diff --git a/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch b/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch index 15fd7aa..ea1a73b 100644 --- a/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch +++ b/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch @@ -1,7 +1,7 @@ -From 6ab60718820d0dd9daba8a7c2d7fcb9ebd489e05 Mon Sep 17 00:00:00 2001 +From 2715a3a91706ea31bdfc4d258b9f9020c8a3100e Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 25 Aug 2022 13:30:29 -0400 -Subject: [PATCH 2/5] APM: Remove A2DP audio ports from the primary HAL +Subject: [PATCH 2/6] 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 diff --git a/frameworks/av/0003-voip-Fix-high-pitched-voice-on-Qualcomm-devices.patch b/frameworks/av/0003-voip-Fix-high-pitched-voice-on-Qualcomm-devices.patch index ed1eb46..12ad63d 100644 --- a/frameworks/av/0003-voip-Fix-high-pitched-voice-on-Qualcomm-devices.patch +++ b/frameworks/av/0003-voip-Fix-high-pitched-voice-on-Qualcomm-devices.patch @@ -1,7 +1,7 @@ -From 8925759cfef3f4c1249fbb8c096f968d51d1acb2 Mon Sep 17 00:00:00 2001 +From 3bc99248d1862bc3688efe2cb005e1c086119601 Mon Sep 17 00:00:00 2001 From: ponces Date: Mon, 24 Oct 2022 09:38:34 +0100 -Subject: [PATCH 3/5] voip: Fix high pitched voice on Qualcomm devices +Subject: [PATCH 3/6] voip: Fix high pitched voice on Qualcomm devices Change-Id: I6d314912169776b76d07d8c0301ec5249c1870a2 --- diff --git a/frameworks/av/0004-Fix-BT-in-call-on-CAF-devices.patch b/frameworks/av/0004-Fix-BT-in-call-on-CAF-devices.patch index 66f7f5d..63d09c1 100644 --- a/frameworks/av/0004-Fix-BT-in-call-on-CAF-devices.patch +++ b/frameworks/av/0004-Fix-BT-in-call-on-CAF-devices.patch @@ -1,7 +1,7 @@ -From 5566cead40292b85ed911d400bde301811644394 Mon Sep 17 00:00:00 2001 +From 5a7663def04a88a90b7edb10bf8a038eb545d48d Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Mon, 5 Aug 2019 18:09:50 +0200 -Subject: [PATCH 4/5] Fix BT in-call on CAF devices +Subject: [PATCH 4/6] Fix BT in-call on CAF devices See https://github.com/phhusson/treble_experimentations/issues/374 diff --git a/frameworks/av/0005-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch b/frameworks/av/0005-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch index a08711b..30fe042 100644 --- a/frameworks/av/0005-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch +++ b/frameworks/av/0005-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch @@ -1,7 +1,7 @@ -From ed9047148097f35fa8d63a32a8d615262d9eb148 Mon Sep 17 00:00:00 2001 +From f19eebbe64e22c684b7e3a00f182f740a946f776 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 18 Aug 2022 15:44:46 -0400 -Subject: [PATCH 5/5] APM: Restore S, R and Q behavior respectively for +Subject: [PATCH 5/6] APM: Restore S, R and Q behavior respectively for telephony audio This conditionally reverts part of b2e5cb (T), 51c9cc (S) and afd4ce (R) diff --git a/frameworks/av/0006-Make-camera-IDs-filter-out-optional.patch b/frameworks/av/0006-Make-camera-IDs-filter-out-optional.patch new file mode 100644 index 0000000..32468a4 --- /dev/null +++ b/frameworks/av/0006-Make-camera-IDs-filter-out-optional.patch @@ -0,0 +1,47 @@ +From b3945062957bae75cc2816b6f62ecea7e437ff8c Mon Sep 17 00:00:00 2001 +From: Pierre-Hugues Husson +Date: Mon, 21 Dec 2020 20:19:11 +0100 +Subject: [PATCH 6/6] Make camera IDs filter-out optional + +Nowadays most people have Camera 2 apps, and would like to have all +cameras, rather than limit which cameras are available. +Add a property for that. +--- + .../common/CameraProviderManager.cpp | 14 +++++++++----- + 1 file changed, 9 insertions(+), 5 deletions(-) + +diff --git a/services/camera/libcameraservice/common/CameraProviderManager.cpp b/services/camera/libcameraservice/common/CameraProviderManager.cpp +index 6416c11b69..d17d0136d1 100644 +--- a/services/camera/libcameraservice/common/CameraProviderManager.cpp ++++ b/services/camera/libcameraservice/common/CameraProviderManager.cpp +@@ -320,7 +320,9 @@ std::vector CameraProviderManager::getAPI1CompatibleCameraDeviceIds + // API1 app doesn't handle logical and physical camera devices well. So + // for each camera facing, only take the first id advertised by HAL in + // all [logical, physical1, physical2, ...] id combos, and filter out the rest. +- filterLogicalCameraIdsLocked(providerDeviceIds); ++ if(!property_get_bool("persist.sys.phh.include_all_cameras", false)) { ++ filterLogicalCameraIdsLocked(providerDeviceIds); ++ } + collectDeviceIdsLocked(providerDeviceIds, publicDeviceIds, systemDeviceIds); + } + auto sortFunc = +@@ -1108,10 +1110,12 @@ SystemCameraKind CameraProviderManager::ProviderInfo::DeviceInfo3::getSystemCame + + // Go through the capabilities and check if it has + // ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SYSTEM_CAMERA +- for (size_t i = 0; i < entryCap.count; ++i) { +- uint8_t capability = entryCap.data.u8[i]; +- if (capability == ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SYSTEM_CAMERA) { +- return SystemCameraKind::SYSTEM_ONLY_CAMERA; ++ if(!property_get_bool("persist.sys.phh.include_all_cameras", false)) { ++ for (size_t i = 0; i < entryCap.count; ++i) { ++ uint8_t capability = entryCap.data.u8[i]; ++ if (capability == ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SYSTEM_CAMERA) { ++ return SystemCameraKind::SYSTEM_ONLY_CAMERA; ++ } + } + } + return SystemCameraKind::PUBLIC; +-- +2.44.0 + From 12336ff914cbae818d9faee69b444df4f8891140 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sun, 6 Oct 2024 09:08:12 -0400 Subject: [PATCH 32/43] f/native: Add patch for sensor filter-out Required for Jelly Max --- ...d-support-for-ignoring-broken-sensor.patch | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 frameworks/native/0001-sensorservice-Add-support-for-ignoring-broken-sensor.patch diff --git a/frameworks/native/0001-sensorservice-Add-support-for-ignoring-broken-sensor.patch b/frameworks/native/0001-sensorservice-Add-support-for-ignoring-broken-sensor.patch new file mode 100644 index 0000000..c9fe082 --- /dev/null +++ b/frameworks/native/0001-sensorservice-Add-support-for-ignoring-broken-sensor.patch @@ -0,0 +1,61 @@ +From e84296f15137b076bf2504481cba80956eb793ae Mon Sep 17 00:00:00 2001 +From: Peter Cai +Date: Sun, 6 Oct 2024 09:06:48 -0400 +Subject: [PATCH] sensorservice: Add support for ignoring broken sensors + +This allows those sensors to be replaced by SensorFusion when possible. + +Change-Id: I5509ee1f54fdf4838f6e3b109819a689f483cfc4 +--- + services/sensorservice/SensorDevice.cpp | 17 +++++++++++++++++ + 1 file changed, 17 insertions(+) + +diff --git a/services/sensorservice/SensorDevice.cpp b/services/sensorservice/SensorDevice.cpp +index 9c4d1ac..5a95096 100644 +--- a/services/sensorservice/SensorDevice.cpp ++++ b/services/sensorservice/SensorDevice.cpp +@@ -17,6 +17,7 @@ + #include "SensorDevice.h" + + #include ++#include + #include + #include + #include +@@ -32,6 +33,8 @@ + #include + #include + #include ++#include ++#include + #include + + #include "AidlSensorHalWrapper.h" +@@ -86,10 +89,24 @@ void SensorDevice::initializeSensorList() { + auto list = mHalWrapper->getSensorsList(); + const size_t count = list.size(); + ++ auto sensorFilter = base::GetProperty("persist.sys.phh.sensor_filter", ""); ++ + mActivationCount.setCapacity(count); + Info model; + for (size_t i = 0; i < count; i++) { + sensor_t sensor = list[i]; ++ std::string vendorNamePair = std::string(sensor.vendor) + ":" + std::string(sensor.name); ++ ++ std::istringstream iss(sensorFilter); ++ std::string item; ++ bool shouldIgnore = false; ++ while (std::getline(iss, item, ';')) { ++ if (item == vendorNamePair) { ++ shouldIgnore = true; ++ } ++ } ++ ++ if (shouldIgnore) continue; + + if (sensor.type < DEVICE_PRIVATE_BASE) { + sensor.resolution = SensorDeviceUtils::resolutionForSensor(sensor); +-- +2.44.0 + From e7200bcf03f4f5d690b1ffe704aed938ecfbc290 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sun, 6 Oct 2024 14:34:35 -0400 Subject: [PATCH 33/43] Add temporary patch for Lineage dialer --- ...ade-target_sdk_version-to-34-for-now.patch | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 packages/apps/Dialer/0001-DNM-Downgrade-target_sdk_version-to-34-for-now.patch diff --git a/packages/apps/Dialer/0001-DNM-Downgrade-target_sdk_version-to-34-for-now.patch b/packages/apps/Dialer/0001-DNM-Downgrade-target_sdk_version-to-34-for-now.patch new file mode 100644 index 0000000..46642ef --- /dev/null +++ b/packages/apps/Dialer/0001-DNM-Downgrade-target_sdk_version-to-34-for-now.patch @@ -0,0 +1,24 @@ +From 6597fc02ebe5811ff69566aab6c8a48c7fcdeeb2 Mon Sep 17 00:00:00 2001 +From: Peter Cai +Date: Sun, 6 Oct 2024 14:22:49 -0400 +Subject: [PATCH] [DNM] Downgrade target_sdk_version to 34 for now + +--- + Android.bp | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/Android.bp b/Android.bp +index 388f4c0..498e7c8 100644 +--- a/Android.bp ++++ b/Android.bp +@@ -207,6 +207,7 @@ android_app { + "java/com/android/voicemail/impl/configui/res", + "java/com/android/voicemail/impl/res", + ], ++ target_sdk_version: "34", + sdk_version: "system_current", + srcs: [ + "java/**/I*.aidl", +-- +2.44.0 + From 0bbc4c63d0b07c564992b50c0e8a9821508e494f Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sun, 6 Oct 2024 16:22:46 -0400 Subject: [PATCH 34/43] f/native: Add MTK GED KPI patch ...so that Unihertz phones no longer laaaaag --- ...d-support-for-ignoring-broken-sensor.patch | 2 +- ...support-to-fix-broken-Mediatek-gpufr.patch | 295 ++++++++++++++++++ 2 files changed, 296 insertions(+), 1 deletion(-) create mode 100644 frameworks/native/0002-Add-MTK-GED-KPI-support-to-fix-broken-Mediatek-gpufr.patch diff --git a/frameworks/native/0001-sensorservice-Add-support-for-ignoring-broken-sensor.patch b/frameworks/native/0001-sensorservice-Add-support-for-ignoring-broken-sensor.patch index c9fe082..0475bff 100644 --- a/frameworks/native/0001-sensorservice-Add-support-for-ignoring-broken-sensor.patch +++ b/frameworks/native/0001-sensorservice-Add-support-for-ignoring-broken-sensor.patch @@ -1,7 +1,7 @@ From e84296f15137b076bf2504481cba80956eb793ae Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sun, 6 Oct 2024 09:06:48 -0400 -Subject: [PATCH] sensorservice: Add support for ignoring broken sensors +Subject: [PATCH 1/2] sensorservice: Add support for ignoring broken sensors This allows those sensors to be replaced by SensorFusion when possible. diff --git a/frameworks/native/0002-Add-MTK-GED-KPI-support-to-fix-broken-Mediatek-gpufr.patch b/frameworks/native/0002-Add-MTK-GED-KPI-support-to-fix-broken-Mediatek-gpufr.patch new file mode 100644 index 0000000..25c523d --- /dev/null +++ b/frameworks/native/0002-Add-MTK-GED-KPI-support-to-fix-broken-Mediatek-gpufr.patch @@ -0,0 +1,295 @@ +From c84b2a4ea735ac9d399ca8b15ef7382f80929e22 Mon Sep 17 00:00:00 2001 +From: Pierre-Hugues Husson +Date: Sat, 25 Nov 2023 08:15:28 -0500 +Subject: [PATCH 2/2] Add MTK GED KPI support to fix broken Mediatek gpufreq + +Mediatek GPU scheduler likes to have the timestamps of the frames to be +able to adjust DVFS. +Technically this isn't completely needed, because it looks like DVFS can +work once we started triggering /proc/ged. But now that the work is +done, let's do it completely. + +In benchmarks on Poco X4 GT, before this patch result is 1500, after is +5700. If we disable the patch after enabling it without rebooting, it +goes to 5400. So looks like GED KPI thingy does try to do a bit more +than just standard DVFS. + +Thanks @sarthakroy2002 for the help and support (other people helped as +well) +--- + libs/gui/Surface.cpp | 202 +++++++++++++++++++++++++++++++++ + libs/gui/include/gui/Surface.h | 3 + + 2 files changed, 205 insertions(+) + +diff --git a/libs/gui/Surface.cpp b/libs/gui/Surface.cpp +index 87fd448..8896973 100644 +--- a/libs/gui/Surface.cpp ++++ b/libs/gui/Surface.cpp +@@ -24,6 +24,9 @@ + #include + #include + #include ++#include ++#include ++#include + + #include + +@@ -50,6 +53,9 @@ + #include + #include + #include ++#include ++ ++#include + + #include + +@@ -76,6 +82,37 @@ bool isInterceptorRegistrationOp(int op) { + } + + } // namespace ++ // ++#define GED_MAGIC 'g' ++#define GED_BRIDGE_COMMAND_GPU_TIMESTAMP 103 ++#define GED_IOWR(INDEX) _IOWR(GED_MAGIC, INDEX, GED_BRIDGE_PACKAGE) ++#define GED_BRIDGE_IO_GPU_TIMESTAMP \ ++ GED_IOWR(GED_BRIDGE_COMMAND_GPU_TIMESTAMP) ++typedef struct _GED_BRIDGE_PACKAGE { ++ unsigned int ui32FunctionID; ++ int i32Size; ++ void *pvParamIn; ++ int i32InBufferSize; ++ void *pvParamOut; ++ int i32OutBufferSize; ++} GED_BRIDGE_PACKAGE; ++ ++struct GED_BRIDGE_IN_GPU_TIMESTAMP { ++ int pid; ++ uint64_t ullWnd; ++ int32_t i32FrameID; ++ int fence_fd; ++ int QedBuffer_length; ++ int isSF; ++}; ++ ++struct GED_BRIDGE_OUT_GPU_TIMESTAMP { ++ int eError; ++ int is_ged_kpi_enabled; ++}; ++ ++static int doMtkGedKpi = -1; ++static int ged_fd = -1; + + Surface::Surface(const sp& bufferProducer, bool controlledByApp, + const sp& surfaceControlHandle) +@@ -128,6 +165,47 @@ Surface::Surface(const sp& bufferProducer, bool controll + mSwapIntervalZero = false; + mMaxBufferCount = NUM_BUFFER_SLOTS; + mSurfaceControlHandle = surfaceControlHandle; ++ ++ if (doMtkGedKpi == -1) { ++ doMtkGedKpi = android::base::GetIntProperty("persist.sys.phh.mtk_ged_kpi", 0); ++ } ++ ++ if (ged_fd == -1 && doMtkGedKpi == 1) { ++ ALOGE("Opening ged"); ++ ged_fd = open("/proc/ged", O_RDONLY); ++ ALOGE("Opening ged ret = %d", ged_fd); ++ { ++ struct GED_BRIDGE_IN_GPU_TIMESTAMP in = { ++ .pid = 0, ++ //.ullWnd = (uint64_t)(intptr_t)this, ++ .ullWnd = 0, ++ .i32FrameID = 0, ++ .fence_fd = 0, ++ .isSF = 0, ++ .QedBuffer_length = 0, ++ }; ++ struct GED_BRIDGE_OUT_GPU_TIMESTAMP out; ++ memset(&in, 0, sizeof(in)); ++ GED_BRIDGE_PACKAGE package = { ++ .ui32FunctionID = GED_BRIDGE_IO_GPU_TIMESTAMP, ++ .i32Size = sizeof(GED_BRIDGE_PACKAGE), ++ .pvParamIn = &in, ++ .i32InBufferSize = sizeof(in), ++ .pvParamOut = &out, ++ .i32OutBufferSize = sizeof(out), ++ }; ++ if (ged_fd >= 0) { ++ int ret = ioctl(ged_fd, GED_BRIDGE_IO_GPU_TIMESTAMP, &package); ++ ALOGE("First null timestamp ioctl returned %d %d %d", ret, out.eError, out.is_ged_kpi_enabled); ++ if (out.is_ged_kpi_enabled != 1) { ++ ALOGE("is_ged_kpi_enabled reported disabled"); ++ doMtkGedKpi = 0; ++ } ++ } else { ++ ALOGE("No /proc/ged"); ++ } ++ } ++ } + } + + Surface::~Surface() { +@@ -668,6 +746,36 @@ int Surface::dequeueBuffer(android_native_buffer_t** buffer, int* fenceFd) { + } + } + ++ if (mGraphicBufferProducer != nullptr && ged_fd >= 0) { ++ uint64_t uniqueId; ++ mGraphicBufferProducer->getUniqueId(&uniqueId); ++ ++ const int32_t dupFenceFd = fence->isValid() ? fence->dup() : -1; ++ ++ struct GED_BRIDGE_IN_GPU_TIMESTAMP in = { ++ .pid = mPid, ++ .ullWnd = uniqueId, ++ .i32FrameID = static_cast(reinterpret_cast(gbuf->handle)) & 0x3fffffff, ++ .fence_fd = dupFenceFd, ++ .isSF = mIsSurfaceFlinger ? 1 : 0, ++ .QedBuffer_length = -2, ++ }; ++ struct GED_BRIDGE_OUT_GPU_TIMESTAMP out; ++ memset(&out, 0, sizeof(out)); ++ GED_BRIDGE_PACKAGE package = { ++ .ui32FunctionID = GED_BRIDGE_IO_GPU_TIMESTAMP, ++ .i32Size = sizeof(GED_BRIDGE_PACKAGE), ++ .pvParamIn = &in, ++ .i32InBufferSize = sizeof(in), ++ .pvParamOut = &out, ++ .i32OutBufferSize = sizeof(out), ++ }; ++ ++ int ret = ioctl(ged_fd, GED_BRIDGE_IO_GPU_TIMESTAMP, &package); ++ ALOGV("GPU timestamp ioctl returned %d %d %d %d", ret, out.eError, out.is_ged_kpi_enabled, in.i32FrameID); ++ ++ close(dupFenceFd); ++ } + if (fence->isValid()) { + *fenceFd = fence->dup(); + if (*fenceFd == -1) { +@@ -1111,6 +1219,60 @@ void Surface::onBufferQueuedLocked(int slot, sp fence, + } + + mQueueBufferCondition.broadcast(); ++ if (mGraphicBufferProducer != nullptr && ged_fd >= 0) { ++ sp& gbuf(mSlots[slot].buffer); ++ uint64_t uniqueId; ++ mGraphicBufferProducer->getUniqueId(&uniqueId); ++ ++ const int32_t dupFenceFd = fence->isValid() ? fence->dup() : -1; ++ // onQueue ++ { ++ struct GED_BRIDGE_IN_GPU_TIMESTAMP in = { ++ .pid = mPid, ++ .ullWnd = uniqueId, ++ .i32FrameID = static_cast(reinterpret_cast(gbuf->handle)) & 0x3fffffff, ++ .fence_fd = dupFenceFd, ++ .isSF = mIsSurfaceFlinger ? 1 : 0, ++ .QedBuffer_length = static_cast(output.numPendingBuffers), ++ }; ++ struct GED_BRIDGE_OUT_GPU_TIMESTAMP out; ++ memset(&out, 0, sizeof(out)); ++ GED_BRIDGE_PACKAGE package = { ++ .ui32FunctionID = GED_BRIDGE_IO_GPU_TIMESTAMP, ++ .i32Size = sizeof(GED_BRIDGE_PACKAGE), ++ .pvParamIn = &in, ++ .i32InBufferSize = sizeof(in), ++ .pvParamOut = &out, ++ .i32OutBufferSize = sizeof(out), ++ }; ++ int ret = ioctl(ged_fd, GED_BRIDGE_IO_GPU_TIMESTAMP, &package); ++ ALOGV("GPU timestamp ioctl returned %d %d %d", ret, out.eError, in.i32FrameID); ++ } ++ // acquire ++ { ++ struct GED_BRIDGE_IN_GPU_TIMESTAMP in = { ++ .pid = mPid, ++ .isSF = mIsSurfaceFlinger ? 1 : 0, ++ .ullWnd = uniqueId, ++ .i32FrameID = static_cast(reinterpret_cast(gbuf->handle)) & 0x3fffffff, ++ .fence_fd = dupFenceFd, ++ .QedBuffer_length = -1, ++ }; ++ struct GED_BRIDGE_OUT_GPU_TIMESTAMP out; ++ memset(&out, 0, sizeof(out)); ++ GED_BRIDGE_PACKAGE package = { ++ .ui32FunctionID = GED_BRIDGE_IO_GPU_TIMESTAMP, ++ .i32Size = sizeof(GED_BRIDGE_PACKAGE), ++ .pvParamIn = &in, ++ .i32InBufferSize = sizeof(in), ++ .pvParamOut = &in, ++ .i32OutBufferSize = sizeof(out), ++ }; ++ int ret = ioctl(ged_fd, GED_BRIDGE_IO_GPU_TIMESTAMP, &package); ++ ALOGV("GPU timestamp ioctl returned %d %d %d", ret, out.eError, in.i32FrameID); ++ } ++ close(dupFenceFd); ++ } + + if (CC_UNLIKELY(atrace_is_tag_enabled(ATRACE_TAG_GRAPHICS))) { + static gui::FenceMonitor gpuCompletionThread("GPU completion"); +@@ -1899,6 +2061,46 @@ int Surface::connect( + + mConsumerRunningBehind = (output.numPendingBuffers >= 2); + } ++ ++ // For MTK GED KPI, we need to grab the Surface owner's PID ++ // and also know whether that owner is surfaceflinger ++ if (api == NATIVE_WINDOW_API_EGL && ged_fd >= 0) { ++ IPCThreadState *ipc = IPCThreadState::selfOrNull(); ++ const sp& token = listener->asBinder(listener); ++ mPid = (token != NULL && NULL != token->localBinder()) ++ ? getpid() ++ : (ipc != nullptr)?ipc->getCallingPid():-1; ++ ++ // We've got caller PID. Now checking whether it is surfaceflinger ++ char cmdline[128]; ++ char path[128]; ++ snprintf(path, sizeof(path)-1, "/proc/%d/cmdline", mPid); ++ int fd = open(path, O_RDONLY); ++ read(fd, cmdline, sizeof(cmdline)-1); ++ // Normally cmdline is already \0-separated, but well ++ for(unsigned i=0; i mDequeuedSlots; ++ ++ pid_t mPid; ++ bool mIsSurfaceFlinger; + }; + + } // namespace android +-- +2.44.0 + From cb15bad67f26c1e1365e8fcbe297f5e8c73b85c2 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sun, 6 Oct 2024 16:57:04 -0400 Subject: [PATCH 35/43] fw/b: Refresh patches, add WebView check patch and update ro.build.version.incremental patch from LOS --- ...support-glob-matching-for-properties.patch | 2 +- ...PackageUtils-Add-glob-matching-suppo.patch | 2 +- .../base/0003-Global-VPN-feature-1-2.patch | 2 +- ...ze-boot-animation-to-match-screen-si.patch | 2 +- ...ateForSlotIndex-in-SubscriptionManag.patch | 2 +- ...CallingIdentity-variant-with-both-ex.patch | 2 +- ...bbleDataRepositoryTest-to-use-mocki.patch} | 4 +- ...d.version.incremental-to-signal-OTA-.patch | 239 ------------------ ...poofing-for-microG-Companion-Servic.patch} | 4 +- ...and-AIDL-fingerprint-services-are-m.patch} | 4 +- ...k-before-setting-default-or-fallback.patch | 140 ++++++++++ ...d.version.incremental-to-signal-OTA-.patch | 150 +++++++++++ 12 files changed, 302 insertions(+), 251 deletions(-) rename frameworks/base/{0008-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch => 0007-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch} (95%) delete mode 100644 frameworks/base/0007-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch rename frameworks/base/{0009-Allow-signature-spoofing-for-microG-Companion-Servic.patch => 0008-Allow-signature-spoofing-for-microG-Companion-Servic.patch} (98%) rename frameworks/base/{0010-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch => 0009-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch} (93%) create mode 100644 frameworks/base/0010-WebView-Add-check-before-setting-default-or-fallback.patch create mode 100644 frameworks/base/0011-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch diff --git a/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch b/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch index ac724eb..37e3138 100644 --- a/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch +++ b/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch @@ -1,7 +1,7 @@ From da111d2b6b6f8e1edf6872d0a8f379c2ed6b676c Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Tue, 12 Oct 2021 21:37:22 -0400 -Subject: [PATCH 01/10] PackageParser: support glob matching for properties +Subject: [PATCH 01/11] PackageParser: support glob matching for properties Needed to make phh's vendor overlays work --- diff --git a/frameworks/base/0002-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch b/frameworks/base/0002-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch index 8ac1160..456a19b 100644 --- a/frameworks/base/0002-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch +++ b/frameworks/base/0002-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch @@ -1,7 +1,7 @@ From 1ad3c8a609bdeadeb402036ead657f071bdf1878 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 2 Sep 2022 21:36:06 -0400 -Subject: [PATCH 02/10] FrameworkParsingPackageUtils: Add glob matching support +Subject: [PATCH 02/11] FrameworkParsingPackageUtils: Add glob matching support for properties This is now required in addition to the one in PackageParser in order diff --git a/frameworks/base/0003-Global-VPN-feature-1-2.patch b/frameworks/base/0003-Global-VPN-feature-1-2.patch index baa0823..bc11e17 100644 --- a/frameworks/base/0003-Global-VPN-feature-1-2.patch +++ b/frameworks/base/0003-Global-VPN-feature-1-2.patch @@ -1,7 +1,7 @@ From 270746ccbb9824725951f371a401534eea9e9798 Mon Sep 17 00:00:00 2001 From: Oliver Scott Date: Thu, 8 Jul 2021 10:41:43 -0400 -Subject: [PATCH 03/10] Global VPN feature [1/2] +Subject: [PATCH 03/11] Global VPN feature [1/2] * Modify existing VPN user range functions to conditionally have traffic from all users pass through the global VPN. diff --git a/frameworks/base/0004-Dynamically-resize-boot-animation-to-match-screen-si.patch b/frameworks/base/0004-Dynamically-resize-boot-animation-to-match-screen-si.patch index dbc93b6..7d8c6f9 100644 --- a/frameworks/base/0004-Dynamically-resize-boot-animation-to-match-screen-si.patch +++ b/frameworks/base/0004-Dynamically-resize-boot-animation-to-match-screen-si.patch @@ -1,7 +1,7 @@ From ad942f3c0450d09d8e39f79af90354fecc9cd873 Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Mon, 20 Dec 2021 15:01:41 -0500 -Subject: [PATCH 04/10] Dynamically resize boot animation to match screen size +Subject: [PATCH 04/11] Dynamically resize boot animation to match screen size Change-Id: I54e49fc6b8c670103852e212d1416e27ff976205 --- diff --git a/frameworks/base/0005-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch b/frameworks/base/0005-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch index 336da8e..99b0afb 100644 --- a/frameworks/base/0005-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch +++ b/frameworks/base/0005-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch @@ -1,7 +1,7 @@ From 9ac87d38461af8732ddb8c5d450e89f19fe26b44 Mon Sep 17 00:00:00 2001 From: Andy CrossGate Yan Date: Wed, 2 Aug 2023 20:59:53 +0800 -Subject: [PATCH 05/10] Restore getSimStateForSlotIndex in SubscriptionManager +Subject: [PATCH 05/11] Restore getSimStateForSlotIndex in SubscriptionManager MTK IMS still needs it here diff --git a/frameworks/base/0006-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch b/frameworks/base/0006-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch index 7260293..ecd57fa 100644 --- a/frameworks/base/0006-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch +++ b/frameworks/base/0006-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch @@ -1,7 +1,7 @@ From 86e7d4b971af424acc24d1df1f8994b8d9853b2b Mon Sep 17 00:00:00 2001 From: Andy CrossGate Yan Date: Sat, 12 Aug 2023 20:11:17 +0800 -Subject: [PATCH 06/10] Add runWithCleanCallingIdentity variant with both +Subject: [PATCH 06/11] Add runWithCleanCallingIdentity variant with both executor and return value This complements the fixup to ImsPhoneCallTracker (in fw/o/t) for U diff --git a/frameworks/base/0008-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch b/frameworks/base/0007-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch similarity index 95% rename from frameworks/base/0008-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch rename to frameworks/base/0007-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch index fd7f416..186d9b7 100644 --- a/frameworks/base/0008-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch +++ b/frameworks/base/0007-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch @@ -1,7 +1,7 @@ -From 8cfa24a2af3d375d51bb05a91a40cb6f53aa6b0a Mon Sep 17 00:00:00 2001 +From c9b319d242965e38cb0ca0fa4850af126c15d487 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 9 Dec 2023 18:37:08 -0500 -Subject: [PATCH 08/10] Revert "Convert BubbleDataRepositoryTest to use +Subject: [PATCH 07/11] Revert "Convert BubbleDataRepositoryTest to use mockito-kotlin" This reverts commit 625a23ff22f0a9327b9a24341dfa0b8fbaf61a1b. diff --git a/frameworks/base/0007-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch b/frameworks/base/0007-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch deleted file mode 100644 index 9b76f34..0000000 --- a/frameworks/base/0007-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch +++ /dev/null @@ -1,239 +0,0 @@ -From 9be9ed959b6c35a1b946c41e6fede51579f1214c Mon Sep 17 00:00:00 2001 -From: dhacker29 -Date: Tue, 24 Nov 2015 01:53:47 -0500 -Subject: [PATCH 07/10] fw/b: Use ro.build.version.incremental to signal OTA - upgrades - -Squash of: - -Author: dhacker29 -Date: Tue Nov 24 01:53:47 2015 -0500 - Core: Use ro.build.date to signal mIsUpgrade - - M: We use a static fingerprint that is only changed when a new OEM build is released, so - every flash shows Android is starting instead of upgrading. This will fix that. - N: even though we dont have the dexopt sceen on N, this is still needed to delete the - correct caches, and grant/deny specific runtime permissions like a true oem update - would do. - Updated for Nougat By: BeansTown106 - - Change-Id: I0e3ed5c8f0351e48944432ae6a0c5194ddeff1fa - -Author: Sam Mortimer -Date: Fri Sep 28 13:45:00 2018 -0700 - fw/b UserManagerService: Use ro.build.date to signal upgrades - - *) We changed PackageManagerService to use Build.DATE instead of - Build.FINGERPRINT to detect upgrade. Do the same for - UserManagerService. - *) Affects generation of preboot intent and app data migration. - - Change-Id: I56887b7ca842afdcf3cf84b27b4c04667cf43307 - -Author: Wang Han <416810799@qq.com> -Date: Sat Dec 29 23:33:20 2018 +0800 - ShortcutService: Use ro.build.date to signal package scanning - - * Affects system apps scanning. - - Change-Id: I5f6d6647929f5b5ae7e820b18e95bf5ed2ec8d1c - -Author: maxwen -Date: Tue Nov 19 01:02:01 2019 +0100 - base: Use ro.build.date to clear cache dirs on update - - instead of using ro.build.fingerprint we explictly need to use ro.build.date - - Change-Id: Ib3e80e58eb8c9a21c108e9f5cd2dbdb7ada8e3a4 - -Author: maxwen -Date: Wed Oct 28 07:07:10 2020 -0400 - One more Build.FINGERPRINT to Build.DATE change - - Change-Id: I13dbf3d7f6587d3fcd6591cc0f861b34b6d5561c - -Change-Id: If0eb969ba509981f9209ffa37a949d9042ef4c2a ---- - core/java/android/app/admin/SystemUpdateInfo.java | 4 ++-- - .../com/android/server/am/UserController.java | 3 ++- - .../android/server/pm/PackageManagerService.java | 15 +++++++-------- - .../core/java/com/android/server/pm/Settings.java | 4 ++-- - .../com/android/server/pm/ShortcutService.java | 2 +- - .../com/android/server/pm/UserManagerService.java | 8 ++++---- - 6 files changed, 18 insertions(+), 18 deletions(-) - -diff --git a/core/java/android/app/admin/SystemUpdateInfo.java b/core/java/android/app/admin/SystemUpdateInfo.java -index 9e6c91f4e..7459b0e05 100644 ---- a/core/java/android/app/admin/SystemUpdateInfo.java -+++ b/core/java/android/app/admin/SystemUpdateInfo.java -@@ -133,7 +133,7 @@ public final class SystemUpdateInfo implements Parcelable { - out.startTag(null, tag); - out.attributeLong(null, ATTR_RECEIVED_TIME, mReceivedTime); - out.attributeInt(null, ATTR_SECURITY_PATCH_STATE, mSecurityPatchState); -- out.attribute(null, ATTR_ORIGINAL_BUILD , Build.FINGERPRINT); -+ out.attribute(null, ATTR_ORIGINAL_BUILD , Build.VERSION.INCREMENTAL); - out.endTag(null, tag); - } - -@@ -142,7 +142,7 @@ public final class SystemUpdateInfo implements Parcelable { - public static SystemUpdateInfo readFromXml(TypedXmlPullParser parser) { - // If an OTA has been applied (build fingerprint has changed), discard stale info. - final String buildFingerprint = parser.getAttributeValue(null, ATTR_ORIGINAL_BUILD ); -- if (!Build.FINGERPRINT.equals(buildFingerprint)) { -+ if (!Build.VERSION.INCREMENTAL.equals(buildFingerprint)) { - return null; - } - try { -diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java -index fa0e2ca3b..1b035333c 100644 ---- a/services/core/java/com/android/server/am/UserController.java -+++ b/services/core/java/com/android/server/am/UserController.java -@@ -90,6 +90,7 @@ import android.content.pm.UserInfo; - import android.content.pm.UserProperties; - import android.os.BatteryStats; - import android.os.Binder; -+import android.os.Build; - import android.os.Bundle; - import android.os.Debug; - import android.os.Handler; -@@ -838,7 +839,7 @@ class UserController implements Handler.Callback { - // purposefully block sending BOOT_COMPLETED until after all - // PRE_BOOT receivers are finished to avoid ANR'ing apps - final UserInfo info = getUserInfo(userId); -- if (!Objects.equals(info.lastLoggedInFingerprint, PackagePartitions.FINGERPRINT) -+ if (!Objects.equals(info.lastLoggedInFingerprint, Build.VERSION.INCREMENTAL) - || SystemProperties.getBoolean("persist.pm.mock-upgrade", false)) { - // Suppress double notifications for managed profiles that - // were unlocked automatically as part of their parent user being -diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java -index c0b8034b9..866bb7a8c 100644 ---- a/services/core/java/com/android/server/pm/PackageManagerService.java -+++ b/services/core/java/com/android/server/pm/PackageManagerService.java -@@ -1750,7 +1750,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService - } - - PackageManagerService m = new PackageManagerService(injector, factoryTest, -- PackagePartitions.FINGERPRINT, Build.IS_ENG, Build.IS_USERDEBUG, -+ Build.VERSION.INCREMENTAL, Build.IS_ENG, Build.IS_USERDEBUG, - Build.VERSION.SDK_INT, Build.VERSION.INCREMENTAL); - t.traceEnd(); // "create package manager" - -@@ -2227,9 +2227,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService - mIsUpgrade = - !partitionsFingerprint.equals(ver.fingerprint); - if (mIsUpgrade) { -- PackageManagerServiceUtils.logCriticalInfo(Log.INFO, -- "Upgrading from " + ver.fingerprint + " (" + ver.buildFingerprint + ") to " -- + PackagePartitions.FINGERPRINT + " (" + Build.FINGERPRINT + ")"); -+ PackageManagerServiceUtils.logCriticalInfo(Log.INFO, "Upgrading from " -+ + ver.fingerprint + " to " + Build.VERSION.INCREMENTAL); - } - mPriorSdkVersion = mIsUpgrade ? ver.sdkVersion : -1; - mInitAppsHelper = new InitAppsHelper(this, mApexManager, mInstallPackageHelper, -@@ -2353,8 +2352,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService - // allow... it would be nice to have some better way to handle - // this situation. - if (mIsUpgrade) { -- Slog.i(TAG, "Partitions fingerprint changed from " + ver.fingerprint + " to " -- + PackagePartitions.FINGERPRINT -+ Slog.i(TAG, "Build incremental version changed from " + ver.fingerprint + " to " -+ + Build.VERSION.INCREMENTAL - + "; regranting permissions for internal storage"); - } - mPermissionManager.onStorageVolumeMounted( -@@ -2376,7 +2375,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService - // across OTAs and are used to drive profile verification (post OTA) and - // profile compilation (without waiting to collect a fresh set of profiles). - if (mIsUpgrade) { -- Slog.i(TAG, "Build fingerprint changed; clearing code caches"); -+ Slog.i(TAG, "Build incremental version changed; clearing code caches"); - for (int i = 0; i < packageSettings.size(); i++) { - final PackageSetting ps = packageSettings.valueAt(i); - if (Objects.equals(StorageManager.UUID_PRIVATE_INTERNAL, ps.getVolumeUuid())) { -@@ -2388,7 +2387,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService - } - } - ver.buildFingerprint = Build.FINGERPRINT; -- ver.fingerprint = PackagePartitions.FINGERPRINT; -+ ver.fingerprint = Build.VERSION.INCREMENTAL; - } - - // Defer the app data fixup until we are done with app data clearing above. -diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java -index 39565526f..9d0032a00 100644 ---- a/services/core/java/com/android/server/pm/Settings.java -+++ b/services/core/java/com/android/server/pm/Settings.java -@@ -485,7 +485,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile - sdkVersion = Build.VERSION.SDK_INT; - databaseVersion = CURRENT_DATABASE_VERSION; - buildFingerprint = Build.FINGERPRINT; -- fingerprint = PackagePartitions.FINGERPRINT; -+ fingerprint = Build.VERSION.INCREMENTAL; - } - } - -@@ -6059,7 +6059,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile - } - - private String getExtendedFingerprint(long version) { -- return PackagePartitions.FINGERPRINT + "?pc_version=" + version; -+ return Build.VERSION.INCREMENTAL + "?pc_version=" + version; - } - - private static long uniformRandom(double low, double high) { -diff --git a/services/core/java/com/android/server/pm/ShortcutService.java b/services/core/java/com/android/server/pm/ShortcutService.java -index 1cd77ffce..b918cfa56 100644 ---- a/services/core/java/com/android/server/pm/ShortcutService.java -+++ b/services/core/java/com/android/server/pm/ShortcutService.java -@@ -5248,7 +5248,7 @@ public class ShortcutService extends IShortcutService.Stub { - - // Injection point. - String injectBuildFingerprint() { -- return Build.FINGERPRINT; -+ return Build.VERSION.INCREMENTAL; - } - - final void wtf(String message) { -diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java -index 695e58dad..ba8f9c91f 100644 ---- a/services/core/java/com/android/server/pm/UserManagerService.java -+++ b/services/core/java/com/android/server/pm/UserManagerService.java -@@ -5549,7 +5549,7 @@ public class UserManagerService extends IUserManager.Stub { - userInfo.creationTime = getCreationTime(); - userInfo.partial = true; - userInfo.preCreated = preCreate; -- userInfo.lastLoggedInFingerprint = PackagePartitions.FINGERPRINT; -+ userInfo.lastLoggedInFingerprint = Build.VERSION.INCREMENTAL; - if (userTypeDetails.hasBadge() && parentId != UserHandle.USER_NULL) { - userInfo.profileBadge = getFreeProfileBadgeLU(parentId, userType); - } -@@ -6851,7 +6851,7 @@ public class UserManagerService extends IUserManager.Stub { - TimingsTraceAndSlog t = new TimingsTraceAndSlog(); - t.traceBegin("onBeforeStartUser-" + userId); - // Migrate only if build fingerprints mismatch -- boolean migrateAppsData = !PackagePartitions.FINGERPRINT.equals( -+ boolean migrateAppsData = !Build.VERSION.INCREMENTAL.equals( - userInfo.lastLoggedInFingerprint); - t.traceBegin("prepareUserData"); - mUserDataPreparer.prepareUserData(userInfo, StorageManager.FLAG_STORAGE_DE); -@@ -6881,7 +6881,7 @@ public class UserManagerService extends IUserManager.Stub { - return; - } - // Migrate only if build fingerprints mismatch -- boolean migrateAppsData = !PackagePartitions.FINGERPRINT.equals( -+ boolean migrateAppsData = !Build.VERSION.INCREMENTAL.equals( - userInfo.lastLoggedInFingerprint); - - final TimingsTraceAndSlog t = new TimingsTraceAndSlog(); -@@ -6926,7 +6926,7 @@ public class UserManagerService extends IUserManager.Stub { - if (now > EPOCH_PLUS_30_YEARS) { - userData.info.lastLoggedInTime = now; - } -- userData.info.lastLoggedInFingerprint = PackagePartitions.FINGERPRINT; -+ userData.info.lastLoggedInFingerprint = Build.VERSION.INCREMENTAL; - scheduleWriteUser(userId); - } - --- -2.44.0 - diff --git a/frameworks/base/0009-Allow-signature-spoofing-for-microG-Companion-Servic.patch b/frameworks/base/0008-Allow-signature-spoofing-for-microG-Companion-Servic.patch similarity index 98% rename from frameworks/base/0009-Allow-signature-spoofing-for-microG-Companion-Servic.patch rename to frameworks/base/0008-Allow-signature-spoofing-for-microG-Companion-Servic.patch index c4b2364..808f428 100644 --- a/frameworks/base/0009-Allow-signature-spoofing-for-microG-Companion-Servic.patch +++ b/frameworks/base/0008-Allow-signature-spoofing-for-microG-Companion-Servic.patch @@ -1,7 +1,7 @@ -From 81fb8bb84d833c342e6a563e012d3276b250aa44 Mon Sep 17 00:00:00 2001 +From 2220bb2e3219a9c1f0f918254414281afe57a354 Mon Sep 17 00:00:00 2001 From: LuK1337 Date: Mon, 19 Feb 2024 16:20:04 +0100 -Subject: [PATCH 09/10] Allow signature spoofing for microG Companion/Services +Subject: [PATCH 08/11] Allow signature spoofing for microG Companion/Services This patch enables signature spoofing when the following conditions are met: diff --git a/frameworks/base/0010-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch b/frameworks/base/0009-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch similarity index 93% rename from frameworks/base/0010-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch rename to frameworks/base/0009-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch index acfd315..0db1276 100644 --- a/frameworks/base/0010-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch +++ b/frameworks/base/0009-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch @@ -1,7 +1,7 @@ -From 5355fa3ee31421212f5a485da1e9f88f2acb1cd9 Mon Sep 17 00:00:00 2001 +From 49443a9f7beb8c1e736c2618aed8ccd8e11d67cc Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sun, 22 Sep 2024 22:53:01 -0400 -Subject: [PATCH 10/10] AuthService: HIDL and AIDL fingerprint services are +Subject: [PATCH 09/11] AuthService: HIDL and AIDL fingerprint services are mutually exclusive ...and make sure that we prioritize AIDL over HIDL. This is essential diff --git a/frameworks/base/0010-WebView-Add-check-before-setting-default-or-fallback.patch b/frameworks/base/0010-WebView-Add-check-before-setting-default-or-fallback.patch new file mode 100644 index 0000000..b29ed3a --- /dev/null +++ b/frameworks/base/0010-WebView-Add-check-before-setting-default-or-fallback.patch @@ -0,0 +1,140 @@ +From d312502517ffed128d9872d6521d041da457e97b Mon Sep 17 00:00:00 2001 +From: Pranav Vashi +Date: Sat, 21 Sep 2024 13:44:09 +0530 +Subject: [PATCH 10/11] WebView: Add check before setting default or fallback + provider + +Signed-off-by: Pranav Vashi +--- + .../webkit/WebViewUpdateServiceImpl.java | 14 ++++++- + .../webkit/WebViewUpdateServiceImpl2.java | 40 ++++++++++++++----- + 2 files changed, 42 insertions(+), 12 deletions(-) + +diff --git a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java +index dcf20f97e..113bd4a54 100644 +--- a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java ++++ b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java +@@ -15,6 +15,7 @@ + */ + package com.android.server.webkit; + ++import android.app.AppGlobals; + import android.annotation.Nullable; + import android.content.Context; + import android.content.pm.PackageInfo; +@@ -401,7 +402,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { + @Override + public WebViewProviderInfo getDefaultWebViewPackage() { + for (WebViewProviderInfo provider : getWebViewPackages()) { +- if (provider.availableByDefault) { ++ if (provider.availableByDefault && isPackageAvailable(provider.packageName)) { + return provider; + } + } +@@ -411,6 +412,15 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { + throw new AndroidRuntimeException("No available by default WebView Provider."); + } + ++ private static boolean isPackageAvailable(String packageName) { ++ try { ++ AppGlobals.getInitialApplication().getPackageManager().getPackageInfo(packageName, 0); ++ return true; ++ } catch (NameNotFoundException e) { ++ return false; ++ } ++ } ++ + private static class ProviderAndPackageInfo { + public final WebViewProviderInfo provider; + public final PackageInfo packageInfo; +@@ -649,7 +659,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { + */ + private static WebViewProviderInfo getFallbackProvider(WebViewProviderInfo[] webviewPackages) { + for (WebViewProviderInfo provider : webviewPackages) { +- if (provider.isFallback) { ++ if (provider.isFallback && isPackageAvailable(provider.packageName)) { + return provider; + } + } +diff --git a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java +index 993597eed..b11b596d3 100644 +--- a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java ++++ b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java +@@ -15,6 +15,7 @@ + */ + package com.android.server.webkit; + ++import android.app.AppGlobals; + import android.annotation.Nullable; + import android.content.Context; + import android.content.pm.PackageInfo; +@@ -115,7 +116,7 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { + + WebViewProviderInfo defaultProvider = null; + for (WebViewProviderInfo provider : webviewProviders) { +- if (provider.availableByDefault) { ++ if (provider.availableByDefault && isPackageAvailable(provider.packageName)) { + defaultProvider = provider; + break; + } +@@ -185,6 +186,15 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { + } + } + ++ private static boolean isPackageAvailable(String packageName) { ++ try { ++ AppGlobals.getInitialApplication().getPackageManager().getPackageInfo(packageName, 0); ++ return true; ++ } catch (NameNotFoundException e) { ++ return false; ++ } ++ } ++ + private boolean shouldTriggerRepairLocked() { + if (mAttemptedToRepairBefore) { + return false; +@@ -212,14 +222,24 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { + } + mAttemptedToRepairBefore = true; + } +- Slog.w( +- TAG, +- "No provider available for all users, trying to install and enable " +- + mDefaultProvider.packageName); +- mSystemInterface.installExistingPackageForAllUsers( +- mContext, mDefaultProvider.packageName); +- mSystemInterface.enablePackageForAllUsers( +- mContext, mDefaultProvider.packageName, true); ++ ++ WebViewProviderInfo[] webviewProviders = mSystemInterface.getWebViewPackages(); ++ WebViewProviderInfo fallbackProvider = getFallbackProvider(webviewProviders); ++ if (fallbackProvider != null) { ++ Slog.w(TAG, "No valid provider, trying to install and enable " ++ + fallbackProvider.packageName); ++ mSystemInterface.installExistingPackageForAllUsers( ++ mContext, fallbackProvider.packageName); ++ mSystemInterface.enablePackageForAllUsers( ++ mContext, fallbackProvider.packageName, true); ++ } else { ++ Slog.w(TAG, "No provider available for all users, trying to install and enable " ++ + mDefaultProvider.packageName); ++ mSystemInterface.installExistingPackageForAllUsers( ++ mContext, mDefaultProvider.packageName); ++ mSystemInterface.enablePackageForAllUsers( ++ mContext, mDefaultProvider.packageName, true); ++ } + } + + @Override +@@ -709,7 +729,7 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { + */ + private static WebViewProviderInfo getFallbackProvider(WebViewProviderInfo[] webviewPackages) { + for (WebViewProviderInfo provider : webviewPackages) { +- if (provider.isFallback) { ++ if (provider.isFallback && isPackageAvailable(provider.packageName)) { + return provider; + } + } +-- +2.44.0 + diff --git a/frameworks/base/0011-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch b/frameworks/base/0011-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch new file mode 100644 index 0000000..94597ae --- /dev/null +++ b/frameworks/base/0011-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch @@ -0,0 +1,150 @@ +From 22a165579df84085b3e18608264c616159b21bfe Mon Sep 17 00:00:00 2001 +From: dhacker29 +Date: Tue, 24 Nov 2015 01:53:47 -0500 +Subject: [PATCH 11/11] fw/b: Use ro.build.version.incremental to signal OTA + upgrades + +Co-authored-by: maxwen +Co-authored-by: Sam Mortimer +Co-authored-by: Wang Han <416810799@qq.com> +Change-Id: If0eb969ba509981f9209ffa37a949d9042ef4c2a +--- + core/java/android/app/admin/SystemUpdateInfo.java | 4 ++-- + core/java/android/content/pm/PackagePartitions.java | 2 +- + .../java/com/android/server/appwidget/AppWidgetXmlUtil.java | 4 ++-- + .../java/com/android/server/pm/PackageManagerService.java | 5 +++-- + .../com/android/server/pm/PackageManagerServiceUtils.java | 3 +-- + services/core/java/com/android/server/pm/Settings.java | 2 +- + .../core/java/com/android/server/pm/ShortcutService.java | 2 +- + 7 files changed, 11 insertions(+), 11 deletions(-) + +diff --git a/core/java/android/app/admin/SystemUpdateInfo.java b/core/java/android/app/admin/SystemUpdateInfo.java +index 9e6c91f4e..7459b0e05 100644 +--- a/core/java/android/app/admin/SystemUpdateInfo.java ++++ b/core/java/android/app/admin/SystemUpdateInfo.java +@@ -133,7 +133,7 @@ public final class SystemUpdateInfo implements Parcelable { + out.startTag(null, tag); + out.attributeLong(null, ATTR_RECEIVED_TIME, mReceivedTime); + out.attributeInt(null, ATTR_SECURITY_PATCH_STATE, mSecurityPatchState); +- out.attribute(null, ATTR_ORIGINAL_BUILD , Build.FINGERPRINT); ++ out.attribute(null, ATTR_ORIGINAL_BUILD , Build.VERSION.INCREMENTAL); + out.endTag(null, tag); + } + +@@ -142,7 +142,7 @@ public final class SystemUpdateInfo implements Parcelable { + public static SystemUpdateInfo readFromXml(TypedXmlPullParser parser) { + // If an OTA has been applied (build fingerprint has changed), discard stale info. + final String buildFingerprint = parser.getAttributeValue(null, ATTR_ORIGINAL_BUILD ); +- if (!Build.FINGERPRINT.equals(buildFingerprint)) { ++ if (!Build.VERSION.INCREMENTAL.equals(buildFingerprint)) { + return null; + } + try { +diff --git a/core/java/android/content/pm/PackagePartitions.java b/core/java/android/content/pm/PackagePartitions.java +index ff80e614b..da3b68ecf 100644 +--- a/core/java/android/content/pm/PackagePartitions.java ++++ b/core/java/android/content/pm/PackagePartitions.java +@@ -131,7 +131,7 @@ public class PackagePartitions { + final String partitionName = SYSTEM_PARTITIONS.get(i).getName(); + digestProperties[i] = "ro." + partitionName + ".build.fingerprint"; + } +- digestProperties[SYSTEM_PARTITIONS.size()] = "ro.build.fingerprint"; // build fingerprint ++ digestProperties[SYSTEM_PARTITIONS.size()] = "ro.build.version.incremental"; + return SystemProperties.digestOf(digestProperties); + } + +diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetXmlUtil.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetXmlUtil.java +index d781cd8d5..c1b2c5824 100644 +--- a/services/appwidget/java/com/android/server/appwidget/AppWidgetXmlUtil.java ++++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetXmlUtil.java +@@ -100,7 +100,7 @@ public class AppWidgetXmlUtil { + out.attributeInt(null, ATTR_WIDGET_FEATURES, info.widgetFeatures); + out.attributeInt(null, ATTR_DESCRIPTION_RES, info.descriptionRes); + out.attributeBoolean(null, ATTR_PROVIDER_INHERITANCE, info.isExtendedFromAppWidgetProvider); +- out.attribute(null, ATTR_OS_FINGERPRINT, Build.FINGERPRINT); ++ out.attribute(null, ATTR_OS_FINGERPRINT, Build.VERSION.INCREMENTAL); + } + + /** +@@ -111,7 +111,7 @@ public class AppWidgetXmlUtil { + @NonNull final TypedXmlPullParser parser) { + Objects.requireNonNull(parser); + final String fingerprint = parser.getAttributeValue(null, ATTR_OS_FINGERPRINT); +- if (!Build.FINGERPRINT.equals(fingerprint)) { ++ if (!Build.VERSION.INCREMENTAL.equals(fingerprint)) { + return null; + } + final AppWidgetProviderInfo info = new AppWidgetProviderInfo(); +diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java +index c0b8034b9..dd7d5cea8 100644 +--- a/services/core/java/com/android/server/pm/PackageManagerService.java ++++ b/services/core/java/com/android/server/pm/PackageManagerService.java +@@ -2229,7 +2229,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService + if (mIsUpgrade) { + PackageManagerServiceUtils.logCriticalInfo(Log.INFO, + "Upgrading from " + ver.fingerprint + " (" + ver.buildFingerprint + ") to " +- + PackagePartitions.FINGERPRINT + " (" + Build.FINGERPRINT + ")"); ++ + PackagePartitions.FINGERPRINT ++ + " (" + Build.VERSION.INCREMENTAL + ")"); + } + mPriorSdkVersion = mIsUpgrade ? ver.sdkVersion : -1; + mInitAppsHelper = new InitAppsHelper(this, mApexManager, mInstallPackageHelper, +@@ -2387,7 +2388,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService + | Installer.FLAG_CLEAR_APP_DATA_KEEP_ART_PROFILES); + } + } +- ver.buildFingerprint = Build.FINGERPRINT; ++ ver.buildFingerprint = Build.VERSION.INCREMENTAL; + ver.fingerprint = PackagePartitions.FINGERPRINT; + } + +diff --git a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java +index ff8abf879..0babd99a5 100644 +--- a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java ++++ b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java +@@ -1399,8 +1399,6 @@ public class PackageManagerServiceUtils { + // that starts with "eng." to signify that this is an engineering build and not + // destined for release. + if (isUserDebugBuild && incrementalVersion.startsWith("eng.")) { +- Slog.w(TAG, "Wiping cache directory because the system partition changed."); +- + // Heuristic: If the /system directory has been modified recently due to an "adb sync" + // or a regular make, then blow away the cache. Note that mtimes are *NOT* reliable + // in general and should not be used for production changes. In this specific case, +@@ -1408,6 +1406,7 @@ public class PackageManagerServiceUtils { + File frameworkDir = + new File(Environment.getRootDirectory(), "framework"); + if (cacheDir.lastModified() < frameworkDir.lastModified()) { ++ Slog.w(TAG, "Wiping cache directory because the system partition changed."); + FileUtils.deleteContents(cacheBaseDir); + cacheDir = FileUtils.createDir(cacheBaseDir, cacheName); + } +diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java +index 39565526f..d410f237f 100644 +--- a/services/core/java/com/android/server/pm/Settings.java ++++ b/services/core/java/com/android/server/pm/Settings.java +@@ -484,7 +484,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile + public void forceCurrent() { + sdkVersion = Build.VERSION.SDK_INT; + databaseVersion = CURRENT_DATABASE_VERSION; +- buildFingerprint = Build.FINGERPRINT; ++ buildFingerprint = Build.VERSION.INCREMENTAL; + fingerprint = PackagePartitions.FINGERPRINT; + } + } +diff --git a/services/core/java/com/android/server/pm/ShortcutService.java b/services/core/java/com/android/server/pm/ShortcutService.java +index 1cd77ffce..b918cfa56 100644 +--- a/services/core/java/com/android/server/pm/ShortcutService.java ++++ b/services/core/java/com/android/server/pm/ShortcutService.java +@@ -5248,7 +5248,7 @@ public class ShortcutService extends IShortcutService.Stub { + + // Injection point. + String injectBuildFingerprint() { +- return Build.FINGERPRINT; ++ return Build.VERSION.INCREMENTAL; + } + + final void wtf(String message) { +-- +2.44.0 + From 006f792b9cc03e18a50b3b7f5766c95fd38b8cb3 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Mon, 7 Oct 2024 09:03:10 -0400 Subject: [PATCH 36/43] Add new icons for settings --- .../0001-Global-VPN-feature-2-2.patch | 4 +- .../0002-Settings-Bring-in-the-new-icon.patch | 1622 +++++++++++++++++ 2 files changed, 1624 insertions(+), 2 deletions(-) create mode 100644 packages/apps/Settings/0002-Settings-Bring-in-the-new-icon.patch diff --git a/packages/apps/Settings/0001-Global-VPN-feature-2-2.patch b/packages/apps/Settings/0001-Global-VPN-feature-2-2.patch index 46665b5..5cec122 100644 --- a/packages/apps/Settings/0001-Global-VPN-feature-2-2.patch +++ b/packages/apps/Settings/0001-Global-VPN-feature-2-2.patch @@ -1,7 +1,7 @@ -From c081876f2a3e0c7354cc9c963a26599d0a5989be Mon Sep 17 00:00:00 2001 +From 55872bc4a7ac74319ba3798fa5ab69153591fec4 Mon Sep 17 00:00:00 2001 From: Oliver Scott Date: Thu, 8 Jul 2021 10:40:49 -0400 -Subject: [PATCH] Global VPN feature [2/2] +Subject: [PATCH 1/2] Global VPN feature [2/2] * Create a global VPN toggle for VPNs in the system user. It is only enabled when no VPN is active in any user. diff --git a/packages/apps/Settings/0002-Settings-Bring-in-the-new-icon.patch b/packages/apps/Settings/0002-Settings-Bring-in-the-new-icon.patch new file mode 100644 index 0000000..1f5c21b --- /dev/null +++ b/packages/apps/Settings/0002-Settings-Bring-in-the-new-icon.patch @@ -0,0 +1,1622 @@ +From 7f107defba4ab1ea850d8a9dbd897135c01dd9b9 Mon Sep 17 00:00:00 2001 +From: Asher Simonds +Date: Sun, 3 Apr 2022 12:18:21 +0200 +Subject: [PATCH 2/2] Settings: Bring in the new icon + +* Part of the new iconset made by Asher Simonds + +Co-authored-by: Michael W +Change-Id: Icdc71193c78642c9253f34b04f8629864f48212a +--- + res/drawable/ic_launcher_background.xml | 18 +++++++++ + res/drawable/ic_launcher_foreground.xml | 36 ++++++++++++++++++ + res/drawable/ic_launcher_monochrome.xml | 15 ++++++++ + res/drawable/ic_launcher_settings.xml | 9 ++++- + res/mipmap-hdpi/ic_launcher_settings.png | Bin 9956 -> 0 bytes + res/mipmap-mdpi/ic_launcher_settings.png | Bin 5473 -> 0 bytes + res/mipmap-xhdpi/ic_launcher_settings.png | Bin 12234 -> 0 bytes + res/mipmap-xxhdpi/ic_launcher_settings.png | Bin 18397 -> 0 bytes + res/mipmap-xxxhdpi/ic_launcher_settings.png | Bin 29215 -> 0 bytes + .../CreateShortcutPreferenceController.java | 2 +- + 10 files changed, 77 insertions(+), 3 deletions(-) + create mode 100644 res/drawable/ic_launcher_background.xml + create mode 100644 res/drawable/ic_launcher_foreground.xml + create mode 100644 res/drawable/ic_launcher_monochrome.xml + delete mode 100644 res/mipmap-hdpi/ic_launcher_settings.png + delete mode 100644 res/mipmap-mdpi/ic_launcher_settings.png + delete mode 100644 res/mipmap-xhdpi/ic_launcher_settings.png + delete mode 100644 res/mipmap-xxhdpi/ic_launcher_settings.png + delete mode 100644 res/mipmap-xxxhdpi/ic_launcher_settings.png + +diff --git a/res/drawable/ic_launcher_background.xml b/res/drawable/ic_launcher_background.xml +new file mode 100644 +index 0000000..8c65155 +--- /dev/null ++++ b/res/drawable/ic_launcher_background.xml +@@ -0,0 +1,18 @@ ++ ++ ++ ++ ++ ++ +diff --git a/res/drawable/ic_launcher_foreground.xml b/res/drawable/ic_launcher_foreground.xml +new file mode 100644 +index 0000000..4d28d39 +--- /dev/null ++++ b/res/drawable/ic_launcher_foreground.xml +@@ -0,0 +1,36 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/res/drawable/ic_launcher_monochrome.xml b/res/drawable/ic_launcher_monochrome.xml +new file mode 100644 +index 0000000..087d83f +--- /dev/null ++++ b/res/drawable/ic_launcher_monochrome.xml +@@ -0,0 +1,15 @@ ++ ++ ++ ++ ++ +diff --git a/res/drawable/ic_launcher_settings.xml b/res/drawable/ic_launcher_settings.xml +index 9ede59d..b58c81f 100644 +--- a/res/drawable/ic_launcher_settings.xml ++++ b/res/drawable/ic_launcher_settings.xml +@@ -1,5 +1,10 @@ + ++ + +- +- ++ ++ ++ + +diff --git a/res/mipmap-hdpi/ic_launcher_settings.png b/res/mipmap-hdpi/ic_launcher_settings.png +deleted file mode 100644 +index ddce98e04e44c4207af24023ba8dbf947f1ab491..0000000000000000000000000000000000000000 +GIT binary patch +literal 0 +HcmV?d00001 + +literal 9956 +zcmcgS<69Df1TFWKj}K07}#o9 +zwJNQ!)MQQ3WDyK-y5QOt-A{RUzpiq5rGtc6#;44nXUa3O#;0<9k2bzO9jf+I?;=$?I#Q~ts*%Jrw6tVPP*5d21e9hVghFh2h{p1Q +zlrvVFC0aDN@F-L5FiMfdGB`9NIFk|iLGC@dXIm*K(^M|7jNwjsv_Zq^j=IWxc?<*!RFoN# +zoznQ9P3&Z5=$;>F&_WxXu9^?x8HV}{LB?HTUSO1B#Gxrl)Zfi{04hvfie&~Ny^eA# +z?!m3vB(^l>9L86@pMMiY26lR-FIUuQ1xw=S{qC0V6$NZ3APO|VeKChI9emGiW-8o= +zd#%xND7=FBr}#jKHeN@8Upw801426nJ3%T4rUr&uFoMm$`cv9yy2{JmqxTvws#{f+T1@^Ptcx+NC#j%10yxwvhtg?wVc>h;TLP3E)|1x{V*~i?; +z@nQ*g(RVk4ebd@~0GHfE^fRGO +zxI7SO2wG*NDdbPf$VgGY?m#nakrl&XwLq|UZ~&Dr0ud(oPrEH}xWIllBqs~(FR-%* +z)|8tmMff5Nu_B1MVW@#|wF?PdB7v;kFsPw$iniM9*Bwj=qogrmdaXRbV57xCjQVlR +zSjqKxve#DnJcQx2{zb_d9~V{v4Ml4bm`%j7*l}m%-+o~Q?>@kobdaIaK`_+yaHGj0 +zJHcQtnFuZ*4it@vfHrvt8zs_MTmidv2MYs$1cSAjz;p82V1pX7FjDJBv_9GNu79s9 +zAn|kN5o^}70xIa}kj*9tT22Jwhlv^O@*DL!VFLDK5+XZgKETt4Ga-;u|axpA4cmuVIQ0mN;e+hA{eJVv$Y~ +z;)0EiyaRqxu6GsU~qiSEOtPK$%HF&HT%MjZ?PI_ptpF1p#tK9vgN& +zlo=~=*4yq?FyMN1JFg-#+NS`H3#g0Kp5)X6IDrhw#7SeurOZ^m=lF&kfbd80IwT96 +zfhbsEoXc_$a-Hg*OM8St^_q2hmBE?jB(Ki9Xh$a5@Ilv!$Q$}R4pW)7@8qXW~z-+dtN7U +zR}4F^1_ar@GiVzHL9;C3E)f6Zy1%Z1*(F1szyR=qe?K-c-CSni%=g@-s0W(ud1=Ca +zYlo*0{Pp=KnJM4>b#ZVo4wf94DCJrTFsLPLtyNpVPYZ(xGZ8Zr?}p!hz>{l@#Mmy%pYoGalu4Z2wW}O{BL^} +z7fjT8&otpsP+l#cwe3Qg?+he)RQC)tdB6ZY=Zxd9eD1>%az|$q(TvqcZ2TxI=MTT@ +z9ywOl+iwx->TXo@4H*r>K5(LC<0x2OXRTR+2$3Qg1a^$blPr^z@;JDGuboRvl+o-( +zktD{bDt9B;MRj!viz_R(f+m#rBIIa=kVv8(B)@?!pg20l-VO}0^Z2#-3zz6?&O|)s +zlPYuxCo{sxBr$NxY4dC>JiP7Bz4`ops8dlS +zm5^}iuKkSd4m`O`C3=CLdHGaadJHlNk|fR7z?oPJIU;dQc~MaacYe3JEa=t>L{RC+ +zS^hTPedZ6zkH+?+w&H-}vWN&!S6Nv)VZy%HP@$2t<5Y1;${u)$8jvS +zL*99g9?wp~Lqqd8ykhL7o07)hZ?W>x_um(i2*%d{C&1lD`_V51tgC0cY4c5Nd_kT2 +z&(X=F57*t>Kqfs67&&jwSa3N6j@^>|*L;7F^k^Ku@42%m60w_K+tKm{!JE^0NxlI? +z*eR?7=bu9NRC_4=!hgdG&aPgF>!}XzMUM7o`(c!(^SwwUg +zx_*PxsbIO_!-Ot8R;_`fPI#ln#)YN4emOT+z(&+Sh9S#g%MDe$z))Ll99Crk?{RIr +z=I7N@z3)3BX^3-&a!A*vENf-zb{I#l^?=~d4S +z82x7ff@{CI=jTylAHCN5%Wt)Vyh^&f_ib7@R2$0a0GT)1-KSwT*xA<*mBxMnrf1{(> +zrB=gF>Op1+HN4~|QHr-*^9uIkXBHL^IVTecOhLshxvcXm&gylYr#!TOy#L8zA+2(j +zmwCldL(3xFwUkD&8OfPM*6t>af?~<@*mesAlD0H9{unM+rVSmx7Tiy@-)!q;R6Q0$ +z`Nd|rW&*Z?j1kCHlZoOHcL(5uHdXoB12dZU07v$k-Q~;Nx%T8ccq0pg380GERyXa} +z0#YW#ACE1*+uF1{6sNL!O96eHRGn&)XD-*LR5fq<5)mhP^(xZ=8tX8+9ZT7OMRb+iL;p$$evaad^D;AV_M_Q?!6(o@B_{ICB$<*PGg*v(rMVLuaVF3Es#ZOeZlQ?vSNF~k +zcKz$_6_JHSN7l7ctjoR@64gLh7hEzYRPeSao{c~sLwQ_AE{6svflzi%N%$fu)D2|8 +zrlJqAx!gp5HEx;b@41>(_57Pu)aO7JvKM%Jw@%z^`cVdANX22qruG;RLQRjgu988= +zI9NJ%=s22il<&Ix9Wat&KUuNbJQ8J}gZVKLI~w@#&WxSsIdd~Wm9O0}JUiK+s*%|d +zOhKo$iSQVIy1ckp$9r~>%$m%1Uphq +z4Z$={bGK_=c&uQ+VX)wIUL;wn%p{I5HG@$Y3BU7H(%$ix^9NxXX6cwe#Lu^Tse+mo +zrz!JouEVHA%^E{3)%7H+G$F16T1|>2{Prt6S3UJp<51|hlS{<=dAd8|uNOkao?$I& +zXuWlDl0n1+YIndA+(P^H2Z6h}9>qZB7$)$D4P|Z^_mX%S2fk +zA#K_Bc@&dg22upY^Y6A?2HoVn<-hAcM7&=74H1U^ +zqc^G@FnF>*D+d*K#<>{aH0o%<2eXs1rzPcV2RqUW>Hm^NY{=TsbS~I+#wY^J^M7Rq +zsm}Ixi$!~hwlqofn?6J^Osmci@-~$yDvQ(RUTb;^xQxm+XM`A=^A>PGV7Caz3M*Jq +z^jBpNpo+6%jveZD8vBw^+CxGXFRU9)!BlHAO +zThQxto$vRRusl=Qa`aRa%t6!MO|U#toUAet8t}PEebqm;;Nv6&n<~3sDOta_@buFd +z_F8=KR>pOjo&H^8`t`W0($KFQ?lgy&k*hRD{-T=%U#0Ui;f+7qW2&N{z4kO0h79`5 +zJh!D0H3L5#moX29Bo)&Md{P4?YLyg+*XTBq_)S;l<)+!tu%~8v8a#1cyB6mXamC-9 +z*0iNzG#0^hM=O9P595UvJoLEO@9`{FK*7AH`||A#-fB+vng-DI31+euw!U;fKn=Ey +z%85ZJ1#)r>VRn3vvRz4_TyIN@NlynvwnG1gll1xyrb&ua9Rp&I()jW0G&0d;#nx6@ +zy+8AI+=STA3^XYsqaJgeQz&Pw#?up^(Z9H2 +z(&$I(vJ^rnR^r@7r=3t?9A$qDDFmy1h!2_Y%=ECnJc +z@>GN)3mG1#_KCM$6~bPB#F#Y_%Rx3Fg5Ll7hssCp;9$YRE&#o9nJ-m__N^LV6ZX_& +zv}7ty@K7iOMR@f*N^F~@F(lNXIu&axOFYLafT)XO5x +z9)5M$7;l?Wiz_5Y@*#G>Ya|vGKNk(N#EkQX7b~xf4s$|gF|!b3KOzZem~N|` +zsEbq8!oj0VPHti^EsAe*-0mdPcTG2KMXXO1pL-;pGPja(N{?6lvj|tnRdvl>xEhJn +zA^6cy+_%fd04RnwkqjdwmXSdsZ`49h*8qm2 +z{AsJt>%y{KcF;?z`tNlVBQvQLiU_BOKd4PWwk+w*i=%i1 +z@3)1_&9LFz!AEr{@3&YtA?gpK3^SL~4vX=|?spOUJ+136U0l0b=5f5@6yCq`izhu_ +zT;=8EIOR$ymdF3g2VXED7EzH|9>Sxf!Cc3WQ*-R9oQTPDqB#Al-L@@kO^lMWP2#2r +z+`D-4iB^z76p{|E+=yMu*6!O?*T>0xa&ol_?)BJi8hT1@(!56qGW4gL{YL_FMqNN{ +zc?yWxsip+6r5w-a;5wM*LJ#P75)@nivE?oKoV7YU3(`1bOO0XF87~SgZf>2$!MUqA +z9Ane@Rr}*Hl-x=ZXD9?=LkvbuWbuKx>+5n3U6JUC&ktDoXD`Ib$jN^5k-K_j@m!{k +zQ$B{j0NY~Pko|B2T{1Nl1NkIfpgZ6$65Idm@r@c$f*DTOd_+kQB60z~&u6fp(oolr&%}4ybvSZ%Le0QM2vrwRU4G=J +z@ccZ>pYlXe2r%tLGwR5!+&=!Na7!j`m*)n-(r<&`)e)#|y^mg?Xla70xSHz|ls7!h +z=k^lQf4c2O75b|}?qe_Iq#Jk+eSKJ17OzyG(Iz8VmM$08-_GbV^&TWO?WGbP!-ALy +zIS*=Xs0bVVk0!5bmEGBgJuN2X@P(hCO+ANQB9qxRji&HPG&KIO;j~m*v$&<;Y8fTo +z<+I+MIz9-tY(s$izIk9D_{T;#ZqMC={yiDlsr(Z>EM!(G|aUkOzoSNos=0EFgk%>uo_tvdexf`Cv%G(Ewz9k)6$3+NjMZ7H#8}A_#F-`J_=eEul$QDjV~G8~ +z_L?P$IZfO~f&wI4h>OcS&dOyoY7Jidhh}H0w-)tGe=DUvYcuPWS-oI=yTK`~dztCs +zy`rIG$X?x#g^jAIto<6rRdwi9O@oCrAqrp)Ug!EG5vd8xq1W{^_>QzD +ziGJJ7&Rf?bA@223ioqgBDPDAIw8J0{-!Se6R1BJdH?bnp&)F^S+<9o^|;Y+jI +zOkZK)Vfc;ZmRs|Vmc7+$7B`q2rfRO1Hpd%;fh6F3>LLXTc+_LXh{qDZXr^Xa?PcW+VI(j^ks=*0Tl3Z&g@z4`&pR8Z!#aI%+6}Ts70C*QP~6b +z{#SHa9fCr=mzlwYr+kxh_0(91M5wX78XtLF!6-<2sA;N74rA3cV>y-)C-AA>q0@?> +zupcg3Qk{%3O2eUWEEXbCnn;-jyz_!s>nYBC>htYd`yDAjvlE^f@)D1WBaa+i-^N)! +zCMG0Q$Pa++Ss}NQx`E~ZHIDLBjea?+a~WgC?z{JA+?qs!3>7VQBbt5`S@ImX +zubjyTNF1H$eR60ekLeCZx0vA;^kl1J_LCKlxc@`$tN&Q5!)$^;RPc?*o1f-?`TG-7i$h5QX>a@E +zfB7eo8e#$>?TDNgf2gv0e>!mipBGgn?n5d~1GQ0*5N6%rdo?X)`<^ZW1Dnu`Uvm68u +zh|_n1Z#|cWlj-$e_w9Xw_K4Q@y^B7$r-}8vS7ZALxPHUeg&$ODj|{oF^uK1=?6(d2 +z_7+|1UyyL*3d&8&VSZbS_wV*llOj?yWcT{J4!b!I@e5zNr?LK5Y-_D8u1ewWJEJ+u +z08sb=g+OCvc%g4PU(Q==qwjl1`BM`|xyc1;MZlZNGavcq4Yv3qr!fICYc{j)&iAh^ +zw^?)7ZJl4=YW5+i0Adc^uwr0BCG#en9cQ>jv31#b0O#2&54bpPLnFZoLqRma4MFUr +zmw>wOq$*93X27lWkah}{MtXXB!qibuvJk7hMufe@b^meiKQ3w20y*w0ABr<2i*m4R +znGL#G4Sa+4iKwy`_7I#K86&w0C?2|U$9|9T`&_q1)Ja*}099(&B-{w!H~uI7oh}Df +zZmDtSjda7Uo8S5BFs$0q)cB0!l)@c1^#yvcv@8|q9!IufK)j#Y3*5-VR%|hmKszl1 +zNHPx-H1M3Aon8N)*M&b%Sbbk_p_oxuOfS#T?D;E8Z4iZ$=2pnd(JTWa4u=pwU*K7x +z78M3E???p}(Qllmv)NN~pbE}$rYIBuSX+Yva{WZ`xnA@=JMr91*x1;J+?hfhu9l_` +zNLEU*Ze%UQ+Pz>*<#kwRbVM!R(NIObgvnXxa@lsG(Y1bE4AUV8GZ`hm3F$~<>+u=VTIKe6@`fU +z+;J{1+w0$5_6d4H9Np`vs!l>rviz(&5ENkFUs}gzcsXaSF%ZiywBsj}v#X9&a91+@ +zEyIzb$DBgOO~E8D$z!^8t`NrX*Nb{sNdUsO1rp{$cZU&z4RWWY<9N;0Qs5)wGm^+> +zf{4e$%yl|lF`ZujX23Mi*LVQ?tbGw*gIeJbYcsb~;k(#2+f8-&bjybIdT}ox8CYLLv7`oQvGhc_TF}{)3^5Rk1<{+MAI^TjE8ET +z-!b>DhH#h7lVR5gRE^cM5PiKjgA0`TZo$2y;)?=lwX8m@{`!AT!&y_UWHv6E{$#l2e$Oc1B +z0MiZ}9w2sYCq%ch%ccoxxVJx3Q)r{b8Xb?ZB^=tU6417Ei-Xud+mF~kw`Sk1K#&mf +zD-2RJT_5KOe`S0z%M6uDAm#w8`vjrrc}#u={c$JQpO&cW%ksnd3lMpmGrhJIMCjn1V(%7xh={TZd6s95#*D?)dhG*CMJYWtr=zt$_a1 +z4AgeduE7v2XZ5dT3|DAo<8;{!3@B%r_ZkN6LaO?dS)f{u%JX#9EOM8{!6kGR!_Q+( +zUfMNq(Ri@6$Al}ar%Sf(vhFTZ#YyC_WJqtRp$Nocg9-v5W`QsoYeR|JV^v|q=~K-Q +zI5>r(CX@kcUG{Mu)KC|@(cKKmafAHSp(ifW;YKiQN^sOqECPX&p7*R%&o6d;6Fm2& +zSf;+0nAv6fP3WNL$w%st&fL|6b5qewIqW-L7j#jdN;N~8C8EgZ99Wu}N*;Ke1RGXx +ziD+0-67CJf!4-I3^pQ@$;PTU5Q@;VX5P!!u;V=#dcM{Yur=Mo~3ZyxnDl1L4LSMJp +zYLwrO(6iyz)YZo{`be;tiEL#EWnCzD%Uw|a`aO;;*X9SbeNMYgd+r}GzzgcOo71J; +znI<5Uu_L>;l%)o@o;kg6o}1WKO1|JvL5_BQYyE(ZviJ?fkXW_Ix|XX-v0DZyl5C9P +z5k2Jxx%;QpHhhB~?OBLVD=Hghr0F|MKMk;&*!TGjY*)x>Xh!N_tYODP$jH@0jo|}? +zWaLeb4Mjaf-j*tFPD0;^Z9r@t$<)Hjn{1A+FbNhwo)I7WPPsu4k3m_z#jiG@Cscek +z2w$U&N~cl#c5p9ky1=rnUftIp7S=I4zSq=)Aq)3=Lfs_Yb*pWyWNIKS3gaT?mbqj& +z9Gp1Y_BLIW#=suSg+qvXewzJGgU$0gRNT}#=sJiZB!U!2Z~Y*+{w}_g9oZY_2`pVfCE*Hg98TMrF2>t1raV%I>yvZp~$jdh5n-=R5T9f2p28I%8 +zb4%&J_>9SkhY$i*pCykNEqo9v!s+-5PJM`(r`1_a5)vVVwPx&gHy+KY +zJxYw)wjg!ziK<$c52Q|!9`$ksy;3V?wq5YKe4x#8a$cU*YYJ0fL6E%ptZmgT&7lU~ +zpyd!hK#x`**99yLrloP7ur3OovYQ2nB@~NEj!KllU+K>YAGKgkx9php_S$!OcIk~p +zuXj5(f4HOzIAZ*pr{+*h8jqpiRcHi +z1=^(bo;(qh1ZXn!Nt6r?UBBxWmW1kEMw5ZdFnz}wdkAXEUH`V#4FS>vGuFA6P!(;6 +zhkn|m_Rw)~la$3>zRh8|`}TBz>B6aoU|1X;Yn{|$zfLqaQzYfUUg9R!N|#Er-#@50 +zmn^4w@ggaV~=h!~X{IW>8NFzQGEdz`iiZ +zstm&Fba_`SLU8*OM~BUGpmhjQh!mZ^|HG(ZLb!nNdC)JoR)uK4$tT#@SiY-6udR!< +zWdDvP{Dn>OJcQj|{b&DlM=d?ZZbnCiN=5=wCtWbf-=uK3pI7O$P5r_1%oY+t72GB^ +zxv0eFY_(ZqC`z|zVPOOt(#SMF3$~5%xBsUja1>|zQ564v9OHPcUY{QX +z>3H`RC%1!q4tGoX+JvAS3~cx^Dl*^9s_IWwGxRVqNev{fnM}{lNaiY<(RCFt|C50X +z%007PApDOp6OMQ~Sg!Iv@=*Xs8*3nghH=#t1+8e4vsWfSmXCa>fATx_218mkRSCDr +zr4vZ*1(Wq??2-oipCzXe?YZ4waLI9ivZ2WFJ~X&3|s5RXKUgM|bB{x_ipkQP@E +Js}nH_`5&Sx#q|IH + +diff --git a/res/mipmap-mdpi/ic_launcher_settings.png b/res/mipmap-mdpi/ic_launcher_settings.png +deleted file mode 100644 +index 86f3be86ab5479dc6b3ece055fdf38dd1a81ea4e..0000000000000000000000000000000000000000 +GIT binary patch +literal 0 +HcmV?d00001 + +literal 5473 +zcmb7IXD}Q9(>^7~38MEJC2E2Q7ZNS%=^PG`J4EkYq8*~w=)L!za2%)i8uj!N5kx1V +zMtSqjJM;bjemu`Jv%539zn-1l2rUgI5+Vj7002OuqAaiTPwoE;Lf}7+vosj{Cm?5K +zLpK26A?1I81IWmt`xm5lSAexZ?>0DA#$%ydMP#kzm&)Uw+?Gg1X2D>K9FRW@tmOxf^*r^Gjl{j3F~HgtTrta0 +zx)v^$(yCD1j*>J)Bsm~bS1!4tCs+sa>2V~$`K=DUM_CekJ}{$%kB3LAH*qxZh5fvc +z*!Lp1t!hf!QejESRfvDBZ3(8|?v}=C0#Gjv)GKm_g +zIteB3=KCEU{?)&MM6mo{n6Y{Q6a-BApxdJh(@; +zP3gkX>WL4-J|0@otlJaKW#J)E0ucSpF_sHxkBOfG&be|vSpB0sk?|NE%QmVxW1wD4 +z*mGUW-7>BuCzOt845y5v%uSj}N&uDHK$P8F?y@4HL%kwuwtsZ +z>e~!I%6VN&C8vKV@bsPgdaqp+)g~kr0Mc=b5qZjdH~(gufRt6t-L>{LYW2;f%5J0ca|nKYmI`z%mijHR)rUriKA^@Qd)Yv_Z$dCm8?Nfz~_?uQE! +zS^N&yUuT#SPWT$aU}dokofE_b(vg#F1IN~9zZJX)@B)_}m4eQW&K75Ms%;@l6fcz~ +z&!?>VHPIH4j!DoknA)GCHTY&zAbi82;9YaG8Vp!xZ+!nZ_+p!6nDN-wZNCOp-0bFl +z$i(nYUqj#TRBwo7y|Tf}X{iJ;>EUY>R}v3}YMB^j>D0u59WH~@0i4XpcL4{rPWA6K +za=pjcau+aOnV<0Ku|jGOl2cQ4jp-P$<-!+N_pj@%;tsuv?QSwM2Jf;lkoMc_O!W|j +zrKk>SIe8M3Ig&Szip+0hI`@|_2BozrZB5nPH6W~h=!k-Xwzi^yv7!OtSGk1bKD|#n +zK`-0KrC=v7%p1J;%#Bi*Z-3T1t){=eVCC1ZHZ&MT+h`BJ&(>GwR#*o6^~S$5cqeu^ +z8o+#ax(4v(weWK=PRep$JRloMM}3;3@_OV;KEjDJ#Dm~aj7I$B$irrcrfzlIh2;$V +z@qR_^hIa5dp%uT|USnBmtharn4W$?^wri!*lTIM&BLpaYZ-eJnnOjP^?iKm_`H-lG +z6#43)H#=(4mb0$_f(7oCMcyl;-eISv)})nc(=nw~+O4Xo-%?9(XEPtJ`kiM*9in}f +zVi(N{qQPqKpb&3RK$0>%iHEg)fYZ1CC|qP?p5`xN4eGm)*J?hX`@kq%!TovS}+a8T&m<4KOD0MS5>t<^?edUn1x3KNMKEb~+-j8=M)?K;33(J#?f +z@4Pzg_whoCKi#GANPzd%-|itVZL{8@DS?Tn#(^;pILdPT_v6fe1OL$FWHWLnvPpk#%VjVgM{5WMU5m1WAno|jU@uEZ~gxMVM-aj5_eo}+`Wl9Y748+a-G-; +z=afPNSM(!a9(ybtR!?V<;?QOEo)s6*@Fq%N%}O{0*zEcDP_$MnFMsw@)G|iR=2B-IzsROy}z3}Q!+WZ!572(nvAX*(A9Cfm);aPk^^9KLh +z>od-@OjSP-xe$Qvs1|q#UiULm7Vlc&dUHz*Lw>ce%}CRFY}*CFClYCF~}@amY(cQRi>vHTo_<7Bw9LCS=G<*f+yJ +zTSFJ^=-t8>)0unH;`eP$5mWY?8M5D>3QbttOS$qDiq7oE$T8ZhmgPaZIQds_fImmG +zo6Kz7{AdL}+|wWXI0^rV;^=Z2s}o_OBe?waC>r{r&WQckrga5xtDpbxg{r!*lcNQf$c!HF8rM`Pdsge|8!lEkZg}S4ySfria4M$zY>INU1fq7 +z`qg4YOUKv_f;LbBnRPMa)fdvt55Poe;B&B!;o-$=$)6nvY;fmLGHB +zF^{RyH<|9b`d(3UK_A)3d0exHcRqtMB1WmX&|xA*fq#&8?qj*Yxrn>*v!1Wy$U*jj +z6M4%P8N2$&SwTU#2?yXhSQj-}>j&Q8z|Jo*sH52zK6zD{czV*0d@hoyxqMdJis!>v +zWLgh9SXLxRtVPaUP~<4a&cgZNAt18MQnc#M2~Vc*fJR8bH=?gwz6rcetm~HqylL-> +zL5&X+5hFY()%UhdZ%dfr+|2Lnd!=^s$fyP!tJ?DI*zF_1`RocP{o(vDq#KV`n21us +z(}_i(5MhB!`T&XVCs`NJ$HrsSLMlV3i`%Jj;7I&NNdP*GL_5&@|#%eSCWZf$jF7lD7OD$wCI9}-2?DV)`mg$0L(SiV| +zp{sE|488OW9GaI3|LwGqA$c?i&jMd1Th&TFQq2Fk-I^|ypnFhm($OE?cRM8{WdM53^2S>RIW(*)FWm9Ec(T~sy> +z|F!stE&FnDW55j3N+LHdoe^Qurp|F4u`t(om4C$B7JD#ButamTigD}dKY&XKnL7sd +z*H=&j+vJ-}jFs_?Zx0*7+*&?qYI=WVJHPY~z!qqmm#!8RMaVY1S&k;4CFqO~YZWgI +zh{1d(0qPm2=E +z7@(A5qKIXSYTDHgGCOu^FRl6_)e-t21-SRF^wZ1DXBt^k38zQPXSa#w1JXio$fX_E +z=OJ`I0LmnR2_R&$s5SjcC-INuzT0TwVUlS&>=c;j$@Nv~ojZ=ks|0)Au2B_Aap9F1 +zHAoNkvU~hc_>y!9&B=0&SW7|b1>Akh4l32Qbg5txH|=ibR2S-(=QPbtIU!L?73CQg +zcU){ODmKTG2U3>!qJ0;8N=f%}^=JWhu?c9y9Y;&W-FL?euk}j}|F>a1F%LW5-p68^ +zLTjSIFv$Xj{Hq~kDw#F?TIYMx>GCB1k*{Cp+B^2M5khIH!)Tp~39_FnoouRMEjKw9kD4ijki`ZXA_K{r+r&&L$#yrzzC?%DwA +zz%pT-lp*rETf!TRX(zU-1iC*8BMC~?+c)=5wr|dxp#wFwt0?=@qDJoa=BfhA#1THp +z5a5G1TPI{U=QqNF$r-J`7k^~3Ui;j+s@%Mo8p3rT?W3P8=0K};I&tCB*$_1}mS_Cv +z#`mX1Vu+u?FSnvrFdnb78}JrPzFus6+19*%h*OtDJOd$*)%{V=ysnw*`68(&C}py< +zxuOEHgAwmHWLH)(J`Xo|F^(YFMJ7}}XwXFVy< +z<1@*#5S>*72<^4S%;i%#464)QUA}zyD<8yA@}hApff%Na%3pt4sN$!{xzTr{EG6c! +z_*2TZmrgz_=}M?ca=q0}^LmWl>aC$MW6UTVZFUx!47ayhcH&Lt&tuQa;xT4?Zadh? +zSc~}?NeMh-O&<2JU%pw{O&@O+#vriLO%xRi%5=`s6sIjy5e!zbSE=o^IbK^kfk^4g +zfT&d;yOXcu_bPQ-de?<=p$-b_ILj(UDi|p40M~Vc*asB32eeG;JPTJ=WiQvoogkt_&^ub{%t;kkf +z_k1IxT0XpQ7q7Sa>6bmnVC@S@9ojTiJlx~D2c2EQcnzwl)r7O_?THS*ePJpppdk=2 +z!eNWY1f)=gG&B=3jU_?O5Pcp)xPGr64^sJ3W?Wn(iOxRaek=RJpz6kVdLB-4kUCwg +z>nO5)=ec*DJhysztedo}4dW435MulhMP9yuSdA~h0|OqLI=_2Ox@e`s#z1tFVh4=i +zouGnPyl1Ft`PEXLb(tb)JQL4e5*;Sjn*>?tC5Jc2 +zZS!O&144KfLOQBXJJq(>fW$twnO@uJ48znjE6oCf<>K%iWF3r~(3`2$+QW9|lxb=q +zFMfAhVX%_c_=rHZHuz{{+uuj)D)R*eLEkgDnK45nev_^~Uw1q)Fk4c!WhlPOe+O2R0BM +zK3$6D+j3T6c=k{Wgga@b3k$dzyfRI`@zpy{41Pe`%dQvB8jsgh62vZ!Gl(D(yi~0$ +zt9rUWi*l1oPZ+M)mHUNf^mF#7xgWcA4Cx7#lIuDy8%PrTp>kOelB`%~lyoHZSj|js +zC$D;X0zZFIg&kl2sR~;ZZaEmZ+K0KI=9bWRQQ>VU7P}N+1keuqg|CM(A$rCJw$4#H +zII5^)%sCDWZ^D+YrwUA|Oo4R9V=g`Ccy9G<*`OuB#LXO$sl<}o1`q|!KasNO#{Vp! +z?VRyjuOhii$06lLUGEqN?^{-0fwqQqb;%dL#NRNPA!V&$@U`%ke)!Zi1Uy%;E*<2; +z0fC`IA>wU%Xmy(!DT6ESTN~`BMD$2i&IuMM=^w@z86j;Uqa>? +z5cIj=*uh+l3F!2v0>=}W=&Z=*;hp*doJkw0Aiy-8Of|`@Y24{KkWR`ATffa4D@a08 +zV4!EPUe5N*5=LyUT40#u{Lpc%d)(17d)MWXw1E#Pp0Yt;%WC!3jg@TR@?56vHcsrz;gg8?ue!WUCb+OX2mj8+B#?D1B!#Mh +z8+I_oDV9X3aZOp<7$miY08kgIx%v`@-jP*(53YnJ;wH9qhmGG*l9~o`5Mzny%5js4 +zV9d02A9K0g2Skgl8}K`Cn_u^LMcE7mO--RI^g4IRkjwy*qaNjr-VzExrD(1J3Ii4h +z1d})o+gd)R_#mKMT&BktBBrFzZWAg~ukr&$y;Id;jlD4q!xzArm;z~KB0~niJBT3E +zqf4kVkjA`!O8aa8A)7!-00YXX8iaD#)Gb<+6q3lQT1_lJu9FZ&*x*;I*E5oI?H(hG +z0Y)WwmRQ1w>!B~Ck6=N0D6wkI#aCkILcQ8J^Xz%W&oR?{N$uqWG5>xVQ)==?)grsj +zmd9le1W58ww)+})i5i@Q_Y-F<-tio3fNclY8B%VNcgdvUko6nB@8`+0xGH|LDc +zH7Chrl3d9|swhdLAQB=%K|!I&%1Eev)Jy+m_%9!2BstURM}^=hqw4|%g-i2a{v@kL +zeep3!;3}!(s_tOn>S5w+4kZe5Ff}KawKK6aS2H&Oc{z=k3qnD$Xv<27YIv@k7{Uc= +z3_Rv%YBw7e$iw}U6fKSSME_>5=)At$$3i1D|RPjlp +zg?xMSomf3hWdwHe2FJV$m;ah#Og4G9}NC3vq|4P^}+6d>LM6n#_A%jC_E{Afo%CYNv$ks=nLnM$yoA1lYQsnyi`^4xpn++`>N3{>MT0U{#G +z^oNf<9rzX+Es;j6VmL>!`Yiej*oPHYXBjQ;Pdh9=}2UFHt2v45w@toq`*@2dOVavWy1ojyKB?f1vWN4b$1c*FJJakKsC +z*|yswrxWM>?C&S_bfU^am!YECQ)Y2Fp0~FG^Xr;0Hn>ZtSR3CoRC`j9tWmq~xuq-? +znRCB#IAbJns?vjo8rixqtPOsBgRP0OLwoX#^CleqVxz_Cy0b=|RP~f`^v8lUs|~hd +zpg$68>vz!St+x=k0{d0;(16CPQ8FvP;-;{Gg>X<`BxEhXG_hI*7z&>i1j7Jc$;!j*{8)-Dx4s +z_2aL07BS8Zo2dwJj~+Je3!SDL9`T!m~y-a83wOtE#OoB|mAzFbWFq+LykB!}T`zN7c%?Xn8Cl +z_pvl4I1_lS?@(6Tg2?`)q+`AH2Nje8AM8bZ1^t$?D&ytf4e3h>Hpj4@psS5-cHX~G +zxR2JmuKs~aG8$m4r8U^nCQX-amz~AwiQF6pe`pkcu&ZGlw|LA)AodfB@klampfger +z+Xc1?K0H!`U8N-{@|n%4@Igau(odD6GBwy7=k4`@s)$qZIOoV)honyAeNFc$&hpEI +zaMnhXsQa)FMgofKFraXwp32#XTyb}hwZnAZG0*l<-dqV;023oBi0wTW4#^=m#BD>K +z9Q7_j0M!pKo=ltd-$FJXMJRvS4k6oM`+304C5Ocy|CXH5?+IA(=>EMJKxfHo0l3z} +z)by6h%hiRN0XJ>$&fYZS=*)$t^Jo^vjwDUB;WqhmkW0&HN^l85j6p!x?S9Klfl)mJ +z_rJ94%`BN?E#+_YI(omiFGB6+f_d0g#bdBC{n?5#cuh;$EG|Pj=*2o{Xs6br2>QR^ +z+JB=|APjV)>j+!Ib;^UudhtQ=!tJ=smltRh*|&!`5oPEMcN6|@9Wl*6CO>v3@-T}; +zt3;*NgC49}s~{uc3G~YK_Y$Hw*;+)4q-qf>2-2`FKK2bLkIbB%{+S_br^ml}^z^CA +zu-o6SL4$p7xBRpG!KBFM`Tb@PIkALse{Pyxx4xd<-DoDB(UUplkk9jNy7K8v>yC!u +zA{@JENwz`GL8Fq?Nwb~aX6Mn)JYHVg#TocD9SaWaSh<-NKcwE#Ee(ORpbXdr$tsu0K-e(CXc~=rspuDYfmf +zc%03^?>1+|MyQZ7Li9~Cu|RjnEP3tu95Z6Dh#^H#@bhUk#IMGR9fGPe$VzXA3>$<`Y%r)xP&%cWB3B +zX_n3%UNpA`@M794ev-c{FH2NEMM%|c1;u7JcR2T*+pprle)_v)Cpg76;nnbVUUs_D +zj8AmoGgJ=Y3^GO_WI;NrYP=((u(RHMT8f?4XH5O@UZ8{FZts!8Nh|Hr=t8M0psv#8U)2_a +z(0ZQ!)bX|Y_?E*kO6Oubj>wzucZhf0tq$*rD~eGDvOlbjNcP7c#@tRe3 +zWsp=BcItSc)4Bv0M$=n_QHJDjg{wJ{NBjz*veA5 +zE81i1w6__<=KI`^p<#tBm==|1Awh4=lvE4dsjeWz_KYj%?Pf=Wfc@bib6KMHmZ;hP +zY2<3&hV11a8o(91%)CK2Bd7|GQL9hG+N;#>dIJ8(YqEJ7@XPxlUWwGZ_xGpHhC!3Q +z!NHA;rkj@JbAO+T??fFYid9SDFE*%KDG{mbd+Yh)^cwX5iKUtx!* +zF^2$%>3nH!))pEih?gz?NB=!C!tbRSV!$C8U$t?IOZdg4r?F7 +z{C_TM>Mwn1o9o`^bCzY@4G+(Lcg)3)z3BM3NV`Ry9?>Pig%<2Aq2F8}0Y +z`_T`%XF3zNJ2f}E1lP!5=N1YO3LyE}aL+RnNES@^U58{`tA +z72vK4nNPI}A4=#ELbaJ9{#sXZ`wITX+-<{G2DE2>SWkqHIphc1Rb%xRy0S&{Nw5fA +z_x~eVA-k?Z=4TB~KJ(pu`&u^PXUu~HfMP2Yt4A)?K{d&*z?^2%WNaI-wOL9~ku1tz +z-t?qs>l4Q6s$))7XrTaJ&n<20EUGndt>gJSOj{DUpS@U&Wst?<*IH#IQiMytv7I6= +z_}yGSIZ%vMNM=x_gVE8jVB+g1`8$(Sqg$`C^Mf%G>d6iENpgJelhMYFZ{``Ewxwt8 +zoM+o~a;xp#Q8U%*p8`o5_7041FAuhl(_HMmd5%>jzT8rh?{ldlh4Ikl*BQO`{oR4H +z2sRMC3!c>db>=esW2;<|WJ3Kmhy#cxm{A7+C9cAW--0U +zo1h4$(2RMM-^uD_YmciU*`I1J +z%7F1gLZ_>RcB>l-9-T1;=N&B;D6ZQ5V^BKlC&Wvw#qDQJ$J|UA903C!(kpOgonW)c +zkuC%8O=tg~1bT%iPMbFCI}LwGMK1reI!sJG-TvdCAUR-t@1)__XVhs&q)1*-BFrZX +zizLN?1|htI*1TgcJ?EDNe@b8H-ZFRW%)lll`8x&xCGHXH2ZB$YY> +zTBYbbO!v-IWT^8I{+a4USzM=02N9kVh5^t>ua`pZjr|u0L>|o;Cc|5|1ANaE1LkkU +zE_?fB!QE@ZUGID%B(7H33y)?QAwO%)1W;?2wDsyeAETJg-yZ)ERPABm7@7jd(r6ek +zsEilNe4q(Ds+^qX#og=0qNVNup5x;^$M +z^LJmY#iGR%FI<-fZqBB!sF8YTIh_Wh-@riUb-g~j6W&Jyq|mCW5&bXcpVo20Q;=2l +z!#ly%r2R4qD5T*H$X2Bde$RJ>PG-{aijfmmx;-rx0T-i&_npG(JXhjStmky*_zMGR +zp0*n~P-$v`d0#1gBjWiOW)A6>6P#T1<2`px| +zE7u}AjgQ}S|7jN~5%PVR7B*m?G{4QdC40HfY`uOQ>svpp_E%&UJF`d2?5TTuE_F&* +z7Tgo98#>%TSN^)XxWmRDCtULGRU~!8oPGOel*xV*rcDW*&L#d^rV=Wq-QwBI=OMHc +zgQ*&up)OhX!_c!|$MpdUK2}>pGG=l#Kaj2Y-8^ei(_{_kc)qcFp~rMy&?-Z6sPKuT +zO=zY%1whI((IM#nxSfbs6d-4K<`{liI$g_+G(5v?x7qHn004J9vGB%tQwVkMD3a)WbCebx_^_a|2`o`Apj8SQ-B +zur-rpu?FrceL2>uc=tz&r;5wy*gYBVd5-#|B4ukvi|bL&eU|}3A`f)A>2zgzFd>Fs +zfg)=*+Th$M_z(fB;O|Wj5M_~4`&NKK)`FhJRQ>h_|Ho@Sk0nd@1q4tlsAKe|$R5{f +zbolQ0v&fz3U(8@!3$)BTux}gg=IH9TVVi`CL*xUg4U^+l!Q~U)qJd4aMrNI5k +zy6XfA&udplhpCU*@w@4IT1mn(2_dton}x1APsbq +zak4bG7F>;9Xr_vs9p7qVi2YOFrknAJ8e#Y8?yBnDchW;-Y4wn;F99DHpiqyXZns^q +zI2kokq`^9EHK|pWHSi{WY0x1nyRQvn)BBUUZ}WutZT~UdsI{*C%UeoC9do4R=IT4^ +z8>-w*2gn#nfL6d=@Oi`SU0z;yv6k&t=w?ZNwriDW+3=m0tioYrg^D1%7&Yk;y9WYg +z`}8>J5Au7f~frh_wq%Gj666$hH)uu_idAY +zO1GExkwgW09YY>iE6?kNLNu(`*Eo^^r#i2ZI!g^^g=JjP_#=E>5v=Jxv5#Mn-x +zN|1E^s#M(1@AUy3bR!)fCmL8-NYSC8>BS0YoNm;mK#hQiWlu%)X%m_deAlJusDAZ+ +zO^;k?wHj-Y4E>gU;d{<_Ny{`YK6rv+jV5Z3x2(6y4O>?7^yEb{wP2_p6AycJNxKV% +zju;#(t=Yt-S)+;T^@9R0$yEZEBCf;)A)dPRI&&gleuN-URt}^@9&72!JUOQlh=d}jkYwFIX$)>lV-^gGROwm91_(06HPZ2ZP+nGA| +z2lBAS4Ft2XFc{747fMRlf6F0nl~Je2R0C_QX-qU`ukl?AlGCeJSyv8K=oQB~b0%4( +zfJ!NKq{3nt2$(trNsZPn*@&!B0fE45JgD`g2c)4ZGxYvwFqbJ6b|_KeFMwoek+M|r +zaS|SnW^sfjwFEYlN$+PTbT%%Kyur+~42r?;&X7VV+=?Ed^g_~zfdFZ8P4Qf^dN~V* +z;62_ou71LWG1>6tOC(_jS%g!!IaP|B*Bkr +zsnzBK9q1T!8R&ztLKQ+5R=dR#^@1>`mhcFeMiTy>90^Lq^Gykt7Z-A)HF){FSG +z2xRofaBacT>K^F2rWEB-^XE=qI%g5!MihgGqoiA(xj6jZ{K{zU-^erK?mc_M^gd$AP~vJi@O +zfD;+C+FXz3_@?pff!+3gIxqar2f_;(OAH%C#a<`5?NQprPu{vD@b#_QXU}@auGC*{ +zjj-MWSFGlG0YX>xzE3W^RA_EHaBI-n8TjH1P@N +zy;_XF0NpF=s5bcdJ*<6v3*B;fe=XAA(kZZ?)OwzN@m;q|0AmX)07;Gf{ +zh+IgVTC8NnTgl0d(r4X1Dkh?Dl95{TZJIqmXf~J3f+O75gdWPlzV9XPkLQrvfdQIq +zb+?g|rD{~IbRtntN +z!Huwd>77j#MxH?;E)JJTA`VpuIO6*~%X24kc=>XU3JtmSr4WH^CauGTT`U9f>a{bv +zn?)b&#}g_$0;b@gb%>PTWEYIJ +zskCqEt5Er292;C**^sep89JryMYbHs_+nQMhDV@t)}VSb2vhs$-swq5kG?uX~qGU2NuBKfpKDf02Mf(Ypoi-umd`GyXW!z3i-Gsi91 +zuj{ENKg~u-T@DlS@Zt%l9VV;!06Y;-t-%n^PdejBE}#8W#dC>99Q})9L455{n^Ohi +zk4+?VZkd585zLwN5Gf2ePrUIgC*AP7A;G+HU;HLjBMd#4nSU+o3a}h%JCf=D=Fq_s +zgnamW2VtW9Hj=2jiufL*PKz(TFPWX*?g9l}f>#RlQO&0Y&%J<#&4A~1b7P`B+*Eka +z-rh@K6ik`#Jno{;25UO~s|vdk@2zbw}8hFH4y +zFSU0l@Dm9p%YcxD +z344qJw)O$x$Y)M2m1X0sNvHJ8KDRgZ9?Dx~VP4|m2(;IfS4>+7j^AEupMGFgQ(RA| +z$w6{xbne;A9-^_!E4K~V#-J%@^kzH8HnTlgnnvtpxLQq(A!Vf#?N5=G2lnO-zBJRj +z;&^|)z(|^EKrvYbL{83V6+W->yHir4H1F4wPgZ;ijaK4i1DPs|(kbj(E>=)zvlWb* +zznv`}+;;tYaxqpoxWxvyaf +zoKhTMx=)XiEOsesvw3Z0&UTbyod#xwY5_L(F~hBNnlQBW43CIFIegD{lm}}g``$5OFB;p%UT?nWAUMnwkIaVbRPbz&7U7RvN%Yn +zzpX%se@Qje@~FkHkgp-EG#Y6mmx2`E9c8UwNv3LQ)-3up?_$*r%?e{347GXBTwX4j +zFABbV`EAjdc3m{s5L65ON$prSlG#*2NmQ*to~{H+a)N+m&3)v<&EkJvJDP+5BfdqZ +zgzq-+_+ul@1EW3}4_hfCQ1T%Ojda7jUnhRi20y-##=Bm&VI(Uz`0)x+OkP;`PGt}~ +zg(*?8UH&BO{iP^C(Cd+=%vDCy@PEn=uZqKLRI=Xn@hBaILqwx0mV9@(m0wM^u#ryp +z4*(yMsKOfKw{7+NTX|(~%Sm6DL$m$7wF>Rzyk>*YfcbTPcGqDmfdezZ9dG+{xK^9s +zDAF#ovg`M)&M{`;l0KBhJSXuX)S5vHwI+j;SCh>j)0Rd7Bvkl48w^`Q;|GZQK+<-p +z--$TY!Zh++mxMJSz5~e<=FafF=2K?>+L6H-L+mw9h4>n(Umm*`COaJVSTpG&BAbiP +zH`7Cg!cM*As8m00p|5dkm!|`{!CAn`m+KX_fTzC4ZhVhFQ{4@J*A=kF25jE_?h`d_ +z-0e~}#FlC9bl5&m1b!X*6wY*|Gz0RP_c)RA!E;gSG3|)(C8|J|FBdcQ8PM7p`@7^` +z41CM36Im&7IcR9uTQih&AvW;(3!Fcifkf39*L;Kms&3owI=EdP^OpPqxG#6(KK^ax +z&2b#{SQn}eDAm%*3x=%A>XuH6Xwd@UCe0eHO +z7b}=D`k9~s6H<@_2;j5gm$3ayv_K6-eQW+gpk-vFq{H?Sh{s@n +z3P8uo#)D?m>Ie${+_2x_6JIFd%;vDQZK?GJbHBZASe=uoeN_YS!0pqo7c&tn +zr?aj;^*SXpS|V@*e?u8HRx*quO%ZF67mf}ff&dj4x4#+tb}GCN^OY4;=VVaN9)}v< +zr((X*=)Y$w7EvU$?q}+6#PIh!5}TTC<5%+%&IHz4T@GSf=yh5rBXj8ob73RBwRrBd +zv2=UWByK{Gm3*QCKJ*bz!@%$CBO%}cbDfz>VP(nsR||_8=c2&Oy?Ol*)CGC#8+6e#jCYsPNO5@$|v(htC3Q~izd46^CjBr-pgsHB|cD7!E10) +z%X;$}z^}h8T?LlDTA-lkQ&IAdgT_^qTD(c5-h@_5fs)`N^ccJIj?;YrOUK`r_9K2R +zO-;wm{hHP8hx74P`Au)jX)VS3A8vhkm^L;P_&&-t-_18<`<`wyUedE`51nk&u^^Wl +zwwsryEA;n5w?~!$9y=aEFU@cx`~q%#{VY3Jzc`XRBiA0~X9M?3ud=&;>pT75es7l6 +z?o8yqZ($|BIXp$L4MO{_A)%ifNc1TgrL^zV=a*d41_N!Cu`EBe63Ta97W35@s@SjSKE112+(h`o~9u>lO;Gs +zR0?>k(Jt#`^+`3sB?fK?iX|wN(Q2hSr6cViMb+DrI&lKjwi-?o&XbTPk39Yj9K@b2 +zG+je^$G4I2>U5cHyhw7Kd0muva28#Vf5pEGgO&B8C@^?T`#vnejB5Jqm{V+xxLcVH +ziUKyl4{ij0=LJcLx%&kB!KxH#u)mn}6&D8+?h{M~;*Xm^r2CN&%y4hgI1(hgB)!Ak +zPITIE_@=J%M!JQ}dLJ!~w2U#cHA0p(9VWd321(TOUVh&+F2!>;j{_Wc-Nvv#OR&pV +zr~X+4LrGXD;fSw>@~R{-9hzSsqtDpQs;fxN3q~OzB1sqUP{Z$AN)*8Wzz@m=aPq-? +zP6-Ul%f)Jn;69oE$iGF~v&@13)X5rlEBK57qu^Tqho#?MNlY%rH-2aL;4?Z=UH`$B +z7@KCkxxO?PPRyj>55eb{rB#ffkY*Eo3Wr4{SVN1Bm%~lHCdQL2t@)Jz$3=7Pb?5Wi +z^HC2~N(ofhb;@J(o($S(FDt>NFy*g3>~i^*`Y!2~pUyb3=-@}~BbjWO9W-ne?OjX= +z5Mja6==f301tBPF-v%fZ0}a9x6}&LwcPVEWD6@=IHC>Ry(eaN_1UTcwQR$%?L?cd| +z6OUX$Hv_16=@Q+oS1Tf~oe&0{tlDFsTRnfYJmu;#U*J(@KQ--H{M`6Hj7^MT;>tbL +z?<1S^3h)4blP^+z_5kmK4LoYMwqlaO<C25umu<&U1Ypyg`L>FsM|l|x{dACy23M3qVzKR3=Mzk&C69g3o2{NXumMox4i=|ScCH~yX1{T69}8^Ko^hB=x*&WDN;IeZsd-dv;8>)Z)dYNrQ4KmMom@#ea>-@C +zHMaSAj1yXGH}DpFxn-^YtXFKPC2-Z*>~R4;u3P+L9kt&3BTqcm?{;4)ZN5r-(f809 +z=&ca>V4$k1YWBWhs}n;JV0M_jjlqjJA?_5N@HoavPCVCqK`SFtBNb}*MONb1)Xx&C +zb<5P0lv;m1(psTiiaULCuV4ZDX<~y$+S5ZTKYBk|RTvz9;mNMtv5y(!}{F +zYKnv6{NrgnA9pp*yir{`i&Xva){YqzX{k)H@cbx_bK>Ah6(DP_cRcfjmMQKTE}DwO +zN6DfaAwqyr9K$?MEHo0{dfv5_pCek!vaVu~imn;^RByfIzMfu|OuO-PH8t>8BH<4j +zK{R_*AN3?dkW13BOQd;<*>EUYQ;!>#6gLw*PlN|!-H@Q553<|D{x>?bh81ZVU_3iiUa#{QQq{yH2EOW +z`!HwXaNy7KUgQb+qjvp;+bSaHcl=Av-Dl{)&Be@fU@ +zmdY?ERr?hbN?1?TAAqLR$d`>`!B`U$F_MO-sF2v76VqB +z>}JIUn~x+(wnH70-&G(E&m6Nxe$P95`dVVeW)X@?2I1Jl=oNz5%LYq#V*~@?C@?&s +ztg$p&>R;0-bxLJRDOSG*--{C6p_5W!d-!2{MQR +zTK%qnefz!=C;J>Nx=eyb7z~7agi$V+4;EdeqIKuDs5xuTF78?=qG3bJe2rIZH8Ezt +z7eSi4>c@;>&?(4(lBMn;Ci9pTpiH6Hlo*|>q$4;dWC$*4Z!Zt?%~38-l6L+sLq{NG +z60cHGP9Ir1Mw;Ia&tH9P)q7NiypAt=hS2}5<#Eo8(Sp%zh{X~Y&X&|U;;P^FQz8~s +zs>G0!s9R(4q$Fp%}as}Q+T%8$U991Z}fNNYg8dT0J~ +zd!IIYqTAdsG;EwjJc(jvT&Ygf$8~0p{&81Nq@v`sq15th%*u`sZWrczPT^` +zEBX%+G=t1l2Q=j22ZGhcZiG)Q3gx&Xtb9bSwk1GaC~l>FeAAb)5ZFyH5rdm6mEMY} +z={-EAdO4T8ayVwmY)`^J91YABWqKXlz}RFA6oIBlEM+U;7+L(O1fe6NWNpz&88+is +z3i2FkqTDHx%*;#D0cC64uewsB;}g+=w|FQ2s#zeS4=(j*7LNv+^dm|OOOM1yxLj(! +z&)fe9EyVFyasI@_B+Jw5+yMv_c93$JhWE`Q2|Mc4z$aSlIi_Lcx)RLLkO1AnFZtnW +z;5BXb85riKiju)N8{-uj23VV3IjL>NWu@vI>h$(}HE?MW2x@l$ET;rIt8ox1HHrc% +zMuVs);^Iris;gEdOsM2g}4@IHXHZ&BMWR-+`Y)C8rVID|AY-u&wk4ETP +zv3sybAc-0ym4KaHH5hg3FQ +zq#m>4oR8Z+5e{mVsjmKzD;Y=3+?u9b2+s7u^hsP?Y9-M+vK0S^0J+xS{}5Qfj+h6H +z{D(@~M6n!CeUcJ0l*ZACMRc6dR~vGl2F((otfH>R57xq-sQ~e{f{h@W09C26!zM4#Thdxs_~1Niao9US1l6Y1mI9fKq3fwwo7~Ihwu`GqDGmQpnmGnVbGFH8Sz|Ic)m% +z-8*S3S%8?T`|?Q^@-LkJ`N6h_Olvozlt-)<)qf_Ek~kb#JmHAIuOK##X?Gu@Jh}n* +z{=QTIc2v_v^nefpm?1oXN}q&`B;eO73JZ$Y1XSu8vDcnCsk}X=Q9$ +zPjBrx2Ue=zfrap9*Z)8MUmo~%`)vy0n^G$8cuN!A{DL4m9}ka<6`!f8>BQ~RdIyx4 +zy-VSDoWBjVIQCmpzbN3}E~BU>lcZ#Ijs;ha5*{sAt$s}hHiPg+`&=)@i_n238IRX6 +z$WC)FtJRQ)p5-n73Tx8Ry@I51UR?+1+QOj>t{MaG-Mer9UH+JUY)z0&pc8#eaC!Bh{?TP{2Q8?90g$7QG$ +z+;(y_R6V+u)6nRkUIV3U$6MkBUlU-H!D3z?^eh)ZqS0Djj=F08Tf)QwoZ!T#;r292MLYTXl#6tf +zo=tOz2~I1U#1n%~8{#8ZW&_uJTez0KdT04OpnN*yWY;NFQLytDFQ9GU)(_)gdC_km`Y +zukd5TwI^wcfH=+YdNLBR>C3)>o#+^=i{DnaS9IG!ZP_05bs=mgl9RdB&S4+Pj`JNJ +zRjkjOSs?FDL{*0R&+i{@N#AQAyfu9(MS(%^-UaS$AcV)a)^aA_v=#(E8_H3w(Am7y +zmNHdhQdUV5vtyiPCp#BS@CQhqk$5EFt^Q}=@8hSPCrjK?NTjR04~;Al;21&U<6D!h +zSt?4IC#~O8>L&Qnq%z(RklBol={=c3C#E|>nnNN+ALH3uHIbMl;Zs>u<2Bd%qs#VX +ztL^w!M_M_X`+}9PWo!X0D)!&m6S`98ZJ~}vdZ*7+31`m){A7HP@ogibF}@Kp3Ek&kmX3@> +ztZH|KUtU_)M>`a}b4Wu$^-Xko?;PiL-k;huT=jsGOo&c*cP +z%9Do5p%PN3j8^yC^!=#P4jf1Iz&#{-wB2yx7?zZhlC>*^GVPi{Oq8LYsziz3i;oR*kE7i>4^ZHu8LP>%r*ebRD#c5cF|J;KCpX4+3 +z+FK7k^p&S%3l~8ks|_HFwsGMx!3p0BsMFtYI12DLCHKdM6kh@NsXtz;EFtX-Gp!R@ +z7c=aeBXEB?+fq4<2l!7bkA*YI3yOR8)=NdGI2YAGY;~1&)^xQl;mBJ}wB|b93LQvh +zC|`^SYkpgo%PYvn9(hY)v8LQNZs-Z!AtrRW}$n%rjn?N-THrx-Z +zstmF*Mv<(=aa>mQ;|h>^bypsmT~Un2E&Twfb{Q^WNV;x845KW8O(y&+(-e-br2{7B +zI?2abr?|}OzaCe||0pEE|J^MjUn$Zs-4(eoAOAL(BX|>d#(#Eiu2|9hgpaSUqmOr2 +zVC#Y#PH=g1<6fUPK>qWt9epGF{-8HT)Mv4dy|cDXDEjr~gb>?DeL~*{M+M%#SYAGc7%zmXEb`f{`T$=ESaMx>gpW;)*uNT@*EO?K9 +zyobyuQ+d2@-^Ykd8~UaTcY}q;+lwjvP5h$>ie!PI|=%Xp;B`M!UaxiH)HsH70rr?j-RsNU{) +zVR7uw-LXV;8YgBLr8GFqf`2ecZ60&?Z3xd94ad_`L{oqZn8D=ZX&$B?TF|W2I;9`N +zt4{`_Ba!`Pe0)vq7Xvy@<{Lg65@?5?whUg~XJfbNmF^Of-HRiDs5%i4Q{1BmX>#xD +zi`}ly%|gYuhi)_sfIpAI=oK#ReN1$dH>8iN_adlqb6U|H@9!Cm+Tbf^JHZ@(pf +zikJI=4Yf?y%doOB#4@T`MB%e&VwB#vf93WI-j4&48oCXPNfhgTiv}T)!aILQpM5uI +z``Lm{8#MSyJYLFnnP0qzle(ZLC=fE@V$74I4-!|pPP=ImN-r-)^tWefzR`{hV^sahEGm~QUM)Q9r<{cBDD5uR5GE9V;e!Uuc +zM)df)e1F<9a;Qall3RfO+vZcwVL*)Kxl=*-+DBKRn{y4zcuQOm@CS +zzW>M4`VKjrA{3RBX(8hy5v!Cct}z60I^eqkCI+UZSU_=FNEl#rbn+{2gL0L=#xI$q +zk7O}|f2$=zPCR{X<8KHw62lxNz7GgW0Wd7XO5wx8s34{*ZX0o@D@`c%C+i)=MCdGi +zTYDN^cUt}bd_vck)iekhNDdmv_*{3csY^psfbtwfWE@j}cK;~^P{8A7dM#7|fF!7_ +zK<(nv)$`--mF^eH#rrY0Np@@3zHc0Xic!?t&Vve_&Wv~D;SvEi) +zWrFn8cCqc-E}m){7o{F?B#fBCg*OR5q_kA04zMCM_&$5`QqvC9D$6sasH4=K%*yX| +z2^%EuPE&wsUnr<(5CY>GjAQOkV-QAZ=@78(0pFwmHAnBoHO7XXh +z372{L92V*RFwI=}bh7nmUc*PjLqs&MjMrovze7slO9Ad5R-VjIpRTgcS&7g?Ror~M +zU1=a*V0kcsHpPhEj1aASmV%IQRX`e*$c(59m)XW7MMb^lrlm=F9e2RFc?!8CTIII5 +z=)Ht5$3N$(_xw6{R;2WCjHfrB$D&T-+pz(dx@K;@`+PVfqgjS-SU6cOQD{Inb$_aW +z1D!AX4LXV_2l)L5OpB+L8=SDUnDu8^0=rL((e}b`hEh!659;`nu<&?1Ng0LXT;41x +z%nY);+)y!xxYGr>CRenPlK)jsweJVFh{hl{2~-G+^ObLHperSe`}=C0?vFmrt$`+;%~ +zV%lMB&JSN`m|q;qRw7M&W3a?x8r&89uZg6Vgl_7wZ_{38>pJ<&u7@uA=c2hKm&onB +zZp%~5S#<0_>}rxVgtB>kQ^*qxn2TDWapC$Xh9JiBN$lzRxus4`jnIH)Vbf6s>Ad}T +z8cOc>F#lQWf@jo1T$EEJoUm#gG)sL6~I5=m5Eg!^Vc5*F^~;Uf7o(%r!NP +z^(WvkK1F+0aJ?ZU$Ye5|R24@IqYh=vbON4QDiVW7QKFt3@dM@{f(b74yF$_ALkz|a +zC4BtL;~n+j?fD{X8H6EmMD%*>Z%)>67Sgt{4kTVJ^z>W|k6)}uQskhaVhvG45HRa7 +z!<}XflHsU3IK{nk3b`T;sIF6{A%g56k6L+bFH{JnXM4Rg?B;$ySb2X-F4DJugX67G +zw3v5GKGn4q0mEZi@sFj%x@zP+X8?X_io0LJ$_v#<2;AKJgd95d7@hopM*Iz47or57*6VGJY0YoBRk~d3ypGT~+){2(Gp%BU@)&L4SV*AAI_VPImHC9R$*?Zj&)l +zqDXAg_jy^pto`E=%o4(Fvlo(a{<6Pu?qLtfw){&ZNS-#_=h) +z{VnygfiBcbPJ40>k}Gvq#oA&YajvYun^QWfQ*H@;xEG46_Ddt*$8+IyFN;MXoQ3jo +z?ld=Ok`r+MwwW58T=P;?GmQyQOvn5r-Bls7ca)Q^ZY1Ass_=gLpLABIWH&L_D?oTx +z$2E#{fYU}o{dDY?rPvxcQ)bZsT&~%0yZv)e>2dpZ`QW28svc?ubp>+;SA|z@W7}jI +z?Vui3Vh>nMuKDNpDto@qzxD|cFo$@Yaqh1zHJ(ovPqSIzV+vnrJ8E{9Faks +zbW`^M0gV@(o7=M7KT~mQB(I<=}JX_skxq( +zDL+XeV*{GIT(`J054mssfoQO*!Lqqb1@ri#IldebBO8mwTR*0pa`#nbT>OkDdI+CN +z@@I9XmS)-<|NP6?gnkrr=HpxSUJ12ctnezpIFgf2n7qH3ce7kCZFMeMZqdP!l*c&~ +zn08_g5}fpb<-I;#y=dT>J2cK+9b1M|p{BcHA+-(1=1PPL^6BJNa-|4R$rhHeXiD~d +zl6xvQreQ1{#P_({4DBQme)tuF*&9N7x_8xfvEX&4eQ7%G2)vdWuj>I10cpS=SqrUg +zI_U`2Dbrh6Xa8CUB7O2fn+;&WUt$bX{}$$ucIP@X8{Yi7%pG)qorjA{Pi?j +z%ewXmOE#N8xQS8p?j&kE+Qs}|BV&m2s{3)^x%+eAk)Y`8&#L_l?QpNgibv|8&3t1W +z32c*reA$G|#ucnj0($5_WXyhoqqm-Vayj*V{PI)v)g`bN=Thx+GyL2WZ +zZfi(ARzLVnd3PM&!D0K$D23qKXh)p5@Fb6DbJ+6l!?piyH~y%5w;i^Rez0-HO=L4h +zUgZ)iXoaf=B51bM8PC>I7HRu?Z*FjBp%X88XmhlRiid~DM5Sk1MZDTr2?%IV%VBdr +zQ??5SMoJmy65F@zS8?y-)GEwT +zMRfr_Ewf4vdOIY-ndT!O=4`*CS3CZjonE^N1{kS{RhC)AZ$0hV2VoV8hVV}tVuPek +ze_{$1g&qHf+w-!nsH@;(Hxv3?q44a1y}e1n*87)v+o#eBz;fS4Hcg4aRmn6HRd;b8!RHO +zJwbuoipOb_P7q4ou8zaF6one_r?3}3b-yr_?Y~VbF{8p)=cCGPPg@D+JbGJ!%UE5` +zHC;M*|DpxA=YEQQz5Ivi!ez#)pD;2hCOiB11wTEn&WjW?EPQaQfZ5geytzi=;kt6H +zEU7sodN0QZdMe+!TCJq+#p`%FrntD>o1t3yj5~-0SZ$EuP$uzbD4Z^USBy3I`ck`h +zA0hI5DJ|Oe?;&Jh;QUf6rS0730auIF{_x0GB-3lOLOP1rqmBW>nSRAV?9_B9a?p7o +z5<|jwnT)=_?rp6BD@om#n-rMT!_g_!`*++mKPSaIYNb`(E5bHcFpw`gwfp4(6%Vwa +z)#6y7@+1)o(S+m;1P00^x`;;@eK(*#gVWX$jr&!B^-2lpy8MW?lx#w)-Bjc|+3s=f +z`}3(UOk!kYq*WOEdPL0{f6Zm1%${NzJG{->tVSwfo6TueF*;@)iwd(%=No{4(prR2 +zY~C0V=6y9!oP7fA740ljH3>gE0543T{vDcbi23w7l_%HTu +zHf&QD*9QG=g9Yknq4W!>>J0W!{*{h8?45s(;mgxh)(-LS&ZwVq3vzGMybbb@eY)R~_(XsFM4{E~{Lgu&8`gH;g5r~i? +zz=v8@ise0BtfoyP`(-T0K^tHli2;NmM%3~=NM9{!pQ1n^MK|IQ?blVW!~ +zgH??WtVC7nT=e9h?jr0y#Z2_(c;n?+aeT#1NZk210wK7V!(@K6oE%6UZO!hEwT4rB +z$f>efUlnYX+&9FTyAhG&u=Q1_7E6a1P}p$iQa|<3ZIFzU#bK@)sIkv=$STZR@xDU7@X>uMjSp|HHQO2Ibx&0IYt?qkW)RY$ +zq=|XnbO{jW-G5)?2Ep^XyzQZt_-xUogH~g3NxjbL<{`?R1X+dhCXOVUCFwL#yN(mTnt(lw`G-zE)(uysX +zYFq$xQEP^4Nq*PtwpwE2en*DQYW2+XmBYq@17rd8|7eUojsYHY +z&KbX|jyU9;jk~!!@XSay7Q_c@hj;$Km&5?1P!EUuo(IN^jm^KL_}ri3r}@GlIf^2S +zipRZEty6-gPrZ#cE)xhB>~6vW*kRtCLt{!DD3x4rz&A)^pE#4MxkicgHxb7s>V#lkw12 +z`mb|b+At)*%l#BIApG>SU$|R1Kw!^ag-*_CYhyiv8_+EcBY!1$9L9r!_D>PV#MCw# +zAMS7lw@c8{Pc81Tt>W1-i>+%X|NWTYNPwC~8_izg?C?%d;g^WFr9uhQ)Swt@lVGzL +zMpuj>nI7wJMihe|kW{RqfS-mN^UNoO#W??k6+q)Ei(oK|3Oz+88UFr7Rvf>*fFYa$ +z{6T#D_H?wiV{$L~dj$g%VL`g6(M;}O>rVkS?V{m9a!(t&jRNYf@$uYcn?>2=T?O6U +z&mUF4Ye?nF5>+MTGXzlJA-(((%{=uvE49{4Idt<%hL +z($To-R*{1sA%p5Z>!7>!Hd{`V1vUaQo9jO5@udpU3Uc8pxPf;G6|{G<89<+B?m~N~ +z>1J7KrI?^)KaTqMK8!5@@TwIO+FEZ5d5_H&rlV<^OnU_Idm3oPS@O_NiNI1(11F0^ +zm-C8Ex_fo{P6D(os7p%^3abtHI9ugiEOIPmXi`DgBhd)eW#=mp0=8i9a6`)EFX?;3 +z?#r4npI&qAgsUp&6oHA}mFkOef8ur;KCR$1IJ3yj$YxE+b^kzk6E&LrmvK5Lnn%*Y +z4RmtYk^c)^MeAHnInoO0JMHbkIoA0nvD4@h>iZPq(YF`xTZR;i;MX=S01lD +z8#>=+?Wvon&dx&Pk=)u>J&OchHR@;bx}Y!d&K0fBlHAzL9D4rsYvvdL3LiSf^qoY9 +z<}pS&RmX6eaHX1fApIvFk+H=Qr@x#ql)JABM;fk}ne|H*wm(EZ6Cf*#!WNd3lc(64 +z8n`NE-pn{zv*o7!uabf +zChMtYd_Ji>mj;)XHu-zpi2tU%V*Iyf4Pt~aS=J842c8-o;Zk@UDQ1;rg{&$t&yce+z4FB{h)>4{76Xx&t +zv|V&qN?x2dm{kA~qx^XDl-}6bevSY=#y{oJ8}1fnHWAuwmf4J^hPg5K +z=QaGxHTC+>^=xTP-RN|CwZ04K?9a@8|2F8Wga>^Ku*DN54COS|b}N;TSv~=ST6CbW +zge+cC!TJU0?KQHXs0aeH(zmZYnhi}g-`a0)R|(nIrka$`%MJn)t;JA-Asg!CUN_fw +z#-+hf2^J^ITGZqh6iMzz(krRnwh{AA@5L(gCBG$(dy5OTjdBC`hkEPR5>HPaEJ%>% +za|6;!a(K5~`DxJR@!5GUAWW4_&S1pWNZ%lk_(hJpp}DIlF4a&%!i +zw)ZCFwNhvIjr8pEB`jq{_)I3un!DA5XbA_dR#xlk_ewHifVt_ +zQsKgT&jct^>Ug4Tb(L{z!WE`_%Pu4eAAj#Ft^5``lCRqT=ku7;@wZ~dUXIj$>7gO< +zbwZkv(t?AOnvhT?|3gM6$<3w(C6Xog{;cvuhPum*X-a#c +z<+8hokfs|Dct+mhF*@Pasa4lOc_G30NhZHi=Sh^RHl?E2Je^mbCd@VxVc5dP4q4=G +zNF^tm+e7?(y@M%qXF*XPHvNIxl|0eGRC2@nQ#p-#?7D{kV6CV7o9dumkP +z8)KY*eEN5d+;x2BYE=PuyTAHNx}qlj(P#ZE=qs%mo`HYx7SN#q-G{!tfuh?3EC@@xo@Lf +zlb!XY_Bq*6c~WOWa`7~@87^wsOjWeaSrfA<$(j&GpkJ{6u`=a90UeqwGe +zv8UPb{TNceK3|PpE-0&TW9di-9f`}ILsQev7(6!Zx>*l-89Ay5s3pZ&D>#c(?ToD~ +z76-!6!{CHhTv_S5TqBlDx|twulgp4FK4HPhfnaTN73a6+^S8Msw8QM-+pgWvH^ukA +z0=tn!w@73e*>rDhfMCXxN1$u8j0T!;v805HaE!o1ES!ek#q99oIp0b3uMLg)G{H1| +z_cgwi}|`<^TDWXX_Hk9%_CJIEv_jjS8zr1d$S7&V-dXx#vnkdRT#) +z=6CQ{>^~_j-TvFFNZ#GHeHpZcjwBj^&%Ol8>2&*O@CLx#c*Em~;!F*`|M2AIEICf6 +zm~ej?I7B?*yX*1R*{zU_OD-^|Y&(>meSHz+@Qw?jzzWE+7E=)GoA`zb#HQrm)5CEq +zYs0dd)iSbCzMJVN(W89}<{lV*d|#gmCGJg;Z0n0yTuD6bPK5ia)W(?7x$9Ppx(_Yo!8f=yKlwVfJ%b#4}wfLV_#;ndx{ro`vte +zm(N_^KwsarL#KbrmjNv@!|yV}FSFrf^ky6xCNL64-KEckEuHW59L8byCAcG-V6)*y +zj=LYo;UmG}tBagLMUajX2PNZ%LIq$HVA}C+KKlo(Fxou3_i3bD(WTOZd +ziCg+$y +zk6(%lDlg|Wn;us-De<2suL!vDj5N0JL?^6@;H6Xlrb$VA#2l~<@(I&DK*fLPZ5aqc +zX^?FV!`#~n1SzHTw`(=6aa$NxC9EykFU386eE>&%rfcN`AZi{wnfEe8EXkVIU^r~y +z#r@{b8w;T{o3%X~a+zqX-Wz{I#5G>_XP4q-T(}raH0P6@&jY$`lP!)3mTM?L)C7An +zUncUyaJ2*V<0;(aH*CsRYd)E68mwv0MDzYZBm461y~e763`FKw?pWbizZj&sF?FX$ +zEG}cCBM`BbWS8B4R=s{n75+tq_KmDM3=HW0{l*)9m*I9Mou)dH2@fsM)GAU;L7NV% +zr;>_yo!bn3Ktv^ZiWoLQl{J0YE?0_KX<>ltv+lQ38&9=#j^IA +z8kBn)?PbQKP%-a-l^BX5_-1j8)bA+6={1X12>PoesUlK&U|+2lj5-DN+I*x?t|`ri +z{+G=KeS%z}V8?5bL-K|0(a>n_iH=;absJ8u+`gtSRDGXZ`HXyTHl9pB!GF#kgQB_H +z`_qAV5(EDQh02lC<EN=Ke83B+$?if%EZf|xhtc}-u#FbHal2y`gp?LyWK~t3 +z_NSxQ7uBJC!w6K|%mS3xi#Y>3p{`|CmpqqT7p9LK`CsqHm|^bT9YhJrG&Q!$hfW_= +z1tW>al3h|`q)vHZge-k5I$#JJCkm!9ds{?o&Wr7GUD;NzhrQ@>mqAw^N(b5j61S<& +z_!%F$yYnq}RePg5wvfSuIHhc|9z8ijPe#Dl436f)aoyxs@1b4%9KozxTx~p6O7v`+ +zr5dNj5#)_WXh9(bZ=a%was(?lb;?wI8`_9QGDXUv(1pMtiE{bfuiow_Q9Vn50$t@ofswF5F&#rVZs``>iOIMUk*vmOgNo+^dUHqi$^7nGCC~-#2K#5o +zo*dJW_q;umbZI1dY7U0kBt}~O{PE69y3N;T|g=qFi~vzvX}3e&&JdKB_LG!t&*Xk +z-&wz1256KI&ui89PTTkAZQ6FQg=!VDG-&0BIKUb*t*KJ#Q(XFEA+LvTB#-gEs@mDc +z!b?OP)V>3D?e~=xHmpb}b_RNrwMG?!WBDd%)v>+N1AD{b`F`ogZm=i! +zm$n#KX{liG(n>@V(fw(3AJ4pNO>I%9(KaUbVqc4F0OW-6AS +zHd=Fyjgk=l_l$*aMHH)_^LKPGoIs2{zvV*8bz5c_sUKj{=|)KPLE}2OM$G=WVpNzw +zD!G-__@KU#Z^)yWL*YbcKs<1y@O3P|h9^n%+t-+e1UPkjfLZK;n4C#|$y$OJ5G9x0`rAC7Uw2$&GOOlF{G)N} +z4P#wJ4jL?YzxKw6EVw +zPrLtSY)oAfv4x!p@*ED)Q$Un)`-BN{&26dKYZvnCzr8 +zSN&7VX2@ZNOO+uxUD2hdA +z5QE{o#cLtMiOfHlfpy&j7O1gczgkxy%&~gR&K^?oh|_k&gb#5^#RUdcXR!PU{adcz +zu?*!+bflk9!3Pnwty1v?2J>(7v!dNR<8_F_;(j3Y!fjn8#iTvuS##TOkRn03lyDhxa4)efm#7UCkT4`D}rMSKLttS-{V0d{%Kqn`#lX8 +zk^f3&KqK?M7LA!rm6%%|k!X&JGof;>PQ?KmG5Z{s7a(z|=?I3(+SAM=-7P{sj}bjL5wLaJ>ekG?obo*Y4V7IDlDi9o-8idfQiQN +zSle8|$e0`p^TyGYXD-u|lW7jC9MYNUBa5ejZ$)X|CnYH&+Rfm`1e^j5mRzy=tVH7& +zfp)7A^v`2BNbT9Ghy7 +zkJ{bOcCfQOT$feUZdvonr-n2jt)|lk5!7dW4Iu-fQEw49PJVl(?P@l(DcrgnE|ND$ +z^Svka!>3h@i6LU9Or9SguSbtU^P}-CL7J{nR>lK(<$5+~KA_e4l&d}-egBWuU;rm3 +zKde3Dcf3vnlA=}jfolFP-w>y;8Px1$NRxTlm0037f@|>-aqTtL;WzsN6N(eS%gwhS +zmgSQO$@Eb_k4>ntufTJ=Q^Z=*x^3$~jL5}S#H;UR!EU(rLa_y$kfdMui_p5Mq)ZI2 +zm$UFmzh|Fw5#qg{Y52Ck@vV^IT{WdKuH;3-TlVrWfVLf-<(am3+|-Mli@EdrnK-z@ +zKQZXWTpR4#tf-4|S^(cZfmL2evBd&5s?iCxjCjk{k}a+K1R_)U!y%jH_%;;Ny*_Ku +z0m0idq3TIrzqV~<{8K)wojG+j4Tt9t#Rz<#c9RS8^Jcdi%X`AY4;I=1+2HbYDw*~B5>pT$lk>}hKfjUt^swW#I1n+%dkZG5l|qPlU4@vVYZ~@@2RSWS +zF@na+cxa(9NTq*`u#ZEXOF +zdZsSwqSM$eSux*R*6L-K$5Ru(9o5FGjlx%(5AH&RKALg{Iec=Vc^3w +zCZi|oO|_LaR73*ZgM%Z#j4ekbovlMg)G&NgNd?U3`P6Z2(vRH_h~~$mx(&*t$Mv#B +zna1h6Bq&SY1G|W0)a?@CXAl&&btOWO0uDf8&Yi?IOnlDv=;GW_W>Y{_KXAC=C6O~r +zQ8Kl6GSa7|dnCQ?8NBXhf6C2qHC%d~RR>Cf^%RN8js)>t%4vjz^Xb;(^ +z+rUSF!Y=3RzMdnSC>3WLC910~4*r>D{&dwKQQ6t+J}dpp-@fe$_I&Fv=4S!>?5{T! +z_RMmUS&*a#n&mX)C<*}|rvOvRDZBfSqS)qxLc`Xq>Hxk;xROC8&}Yd;#s6g5K|AFy`ZrG +znPc)XzFk#(eo*I$BoubEp{#$Euj;(NbLr}`j$Yg_PoeSZIWfXStE`H36NU1E1U^)V +z0O;H-*mD)ER(DLrf$fhy*^Yx+dGXoR6N)r}w$@5AQH-lWisK1c53zR@aG=zz=iJ(n +zZ3Lm5H=n~HLvHjK^RXe}USW_w0v+N%T&+Mt1FP`L#q;UsPZDf`k7AlTx5l16FH@^- +z8&v`iLlT~-2ODmw87scKr413j9{sGZH+Nq1{f`&TahPy~3he;jUja@DlIA99=X?rC +z8~SWcj$XBxR)CXj5GZCs(kvZv13Zgv(PHy+6K7isZc0Bn +zx_I=2YXJ-CqMHy$g;W3#vOR%*QWlwdbJPoKbwNlEp;8ohoOxYo6>g38sQJ-14bP0- +zV2i~BT!^4JUbROs%jq5~z&ds9RrdzfT3`+CnECjDm+}TQW1W@eGBHgu9imD+l&Vw0 +z8oH$tR*?QoG!i7IyDU9CzAd@<4B@Q>gkiZ~+=OKvi$LCo@VD8|)t6QDYv@6bx@CqN +zJBy7r_RE)t<_7KC3yt@l{prCvRzyupE>aV}Ib?rU>WaZLSFE6EK~nDc){md(pk_#7 +zUgqVPOE9g1_@cjY3R1DM_>%9-rIwjL*na;5DYmf=ivX2!15^7RFHR9#=HF*t|DzAf +zosuIsjafnG!<5v@Y5H4-zP8L(x5whHlej}5hebmfJVhS{2Ynpuu6eoRwUS^+2vVAdzYr{u_Y|_J +zmc-WIO-)X#L8~n+*w%mC`xe*-v{ArNi`YU%zxw9syWA>cFwuc{Qh{9fN#dY +z=9E#=<~;@6S4_e+0Q`wJ7BhwfXZZ?BMDbI%_YoW0m7Jh@f`<-u6!f3b3Hy98Ded|M +zHjU_6N#z#5yMn~yV!^UFTg>~kW~rK%o!mBl_$WkXq4P4yebvI#49*;5r4#|dnh5Ug +z)(Y|*B(j!pjR96v%PX`rjH_mYOsgv+R6$B;x(F@iqR#sgOIzp)~+Ko+K3d>F@!E-+0N@X-{Ei^YI=6#_nG%ZtL?5{nOzDCJr +zFMZVn<-O(b_ZU}y!f}~1iSt@pmw%2Qjf`Y2J~yzKvF=zpDxfOQWjN*ld6nu4=z; +zQw*xKK-s$9J4=LGg{Oa{l94YYZ7w+1e(*}C$|wG+0mJY_JTGmy3Abqs1n>QuxC{sN +z4x2Hw;pUMw^u%vtJ}W+T3lejow6dvj&_G{AG{OC5jLAMG+Tk_-)}h+BM7kJ1nqw>U +zOmfjuCO{LbF&b^BPy1tf^@6gA@hpvZ6i8mS>=9prO=W*H&95J)*Benb@)*u!yRhXy +z>gR%ux-~N>z>?sqBPSJ{8<``-`1})gg?YavZ4B*}F_V5iV%Q0E_HVi`pfzAET#Xo3 +z|B2P{0Rz*jmvv8)UY13rWAbLa5o=|~w|C-+qQDjzuauw__zSstjLqb2(?|*VJ2u(A +zeC=CL6&00{XVs)6+ODbdh(Z^gL1R)`BG{LeM;fYR{tQ|3I*MithcH9lf*3&ayUSG2 +zslv>)o{LxKF|-au&R4%1P1@Ee6;BT!N#Q-CqqeSJ9Br8-3(Qa%8`q8tTbucaC2Nfh +zwZa}-;MpuH`3umetk<9y9{q}wu+%ujie#Ek?@JM~=0IjhiO124=({RTgY}bzsOLFl +z*%R}J&i9gXS(~I~JulsD-t#4`Cc0sWVmPLP(Fgi|!^TaBBOaxtd61ywA1|RZ$D(q8 +zLqZ$yyBJ19<|$%@B_&l@AyTj9XqJ)$iI%}iPfUvMVX~86o$Gef>DTwVzj??#6X)>8 +zDr{+kXr6sLqI=w1(;*Q!u>^R1-{fkk-z6fv57|(7U)-R&NKUy%_!AEp`79$hUdxIe +zzcd!o)F0asRjt3_G(WSr-?m8tBlmi!snu->y{~!sZM#djG}$sHvPWke6~%&$Y%W$_ +z%jkV5GDZ=iwT!3TS~FH$wXVW%sO04?WJtife3L@A%u +z4OH(G3&<3|LZ{-IC85{U3%MotW1RtQ8u1?kQ^YDS{V^Oe|aIEc^ +zw(KXn!t=@0o0sI}<<{MM!JK8iwv?`ihj!MX5xJ<-KUVr0%P3XDfXv#Pvni +zLNGXaq(la8Jx{IOpK~tBn4GVnCfzK3pEwH3t}x@+X3QTZ3$118|3PFx7fhJc04|%^ +zKc+;wDQ}8=^W4J_p-N|&k(TuxH3Z0O_F06 +zF%pnOfF>aExU=JINCQc1Q44+x1CA(9=KMWT5d$UV2mvQsPG=Yfsfdk#QCpnj_j@`RrLf#wO(^j-&yVle5983Myc8mGS +zyGQ2|4^|7m0g7Ep_0V@Zy#Sa%TF@7u;EKj#7G&S7tooo_0s~;k4#cVWP;}Bp-B+PI +zPeqS_CJV|N2rEp{isKlc%5$XAG*FTmn_P>cq6ZiEwy`q~g(}xbYD!rHk*(IrqTwe)3h%_Pz-||~m6WKUJ6~&Q2sYO0-droB`3=yhBSP@teV$n17~+gi^oVkTZ(cb$E65fXX4c3lg(K{lg*J-t8^5dgGPR`8to4niC& +zE(JwndKN1fTD@9p`ivVMp`hD&9(fCwH}>m2sn3~KrvUh1C_Il$_vPE1XP-bW?SfZo +zeU?XSV9-42`r_>vcIQ9p5ysA0*HU)M{!f97N~N<^D0<$ceP1R)NO)9J*^ei<`LQ+| +z)U`_|sHHMgb$B%d3#r5;F6H8w7nOXQx@HSGGBeGL$SET76i?d2ocr*jHd&^wrdeW7w=p`cQs_*(@QdkBAh{lfm;C>BKKtV;BSRSyg*dHq#%*~&KUWEWP +zSOF91#*YBfImQdM`1Vc(Z9Ie4bJNkw_Z-gC0^&<(u~pt>gX|bDolw|-i?%Kd2^_Rp`Y9glaTRrnrMh2 +zNfEGBx}adHko>ZZ;7I7Vj7S#ifg1}Q2e)kzGM3^1;ZFf*66RaM{4wf=Rn%c&bjkf4 +z1wfewIjbI0sj;p-I{fs<9T2i4o?u`{CX!WaM=;px%Y7pBo17~GbBeg89O$4_@NN6p +z=?wLE3Hy2nJ$d#V%g^CsQ4L8Ut@#(gJ?=BL8Now^#WS0pqd)EHGo6oFDjcKgw`o7H +zBs9>l{3+lq!$1+uLL_!XhnQfRGZ%JBFEPwj^^vE_^{OzRO(jnIM=JD*mftCWgV +zu_i6hTW@G|HiCg>6s)CXWxy|j1U$h~mNJH1nn-*F%JKiFhHH;Y`ikN|A1J0K7^2K3 +zkE}pVWxXt&6+%-~e5@LZHN`}ok2dKsQwy0Qf|^<*SK5MUX+9=uOR;4de6(q%wwx6> +zE71zG(w6g4+XX-Uckkz%d(ZcN@9%fcALpFgmi%aG3Z=YcQaW4{@7)?OA4)sdB+fd$ +z?Vf*BOe;#xP|f_+Mt8_NvQgSvwP+4t$T)4 +zc|?0DIn_zN7IwIxyzYiM=u<~(Z&bV$h^7-hsg@7Mk7flw(5!Ea$R^e=w%k|zp?Nb_ +z?DNWA=^4UKc>n#aU#t()P}&PRSw3b1Mt!=5F7V>kKdQJ~&Y%swPmT{kDF?J{Q2tbG +zXUqM0uisz=mTB!+RG4QmJwvWbJgzS0QV*_*sVpl`N-7)=gLYaqU-MuJP(7dLx7`gZ +z-98&Mw0bfq&>qVV>Kh2UGfZiOw>Mu%x0 +z{lPJ7!Ysw#3EN7cKMh&&+Dns`0$56W?CWYA82og?{HNABUz{NQ1_N|qM_fbox}4e= +zb^H+0-ggQoa9r+;&KAj +z6DtdUeVe3z!Qoa`sxHsI?RB=xrOic_5mvK99hSf&d@5lFJ@eYz!BXqkND2aY%Zm_= +z{I{{csIDy_8|(3_^vki&Of=7ZpDIszx{R5la|V8Ak5t9p!=?gNCbi_uxA*uCN58{b +zc$h_TZvHd9F`)U(6+|h)i!=IH>~C8^>(NXc$@bq}?&-AycI*UJ9!>~>T35UfZw@Cw +zGB|}PViQ}?z%WEbDjWBxJhgL=*O|^Ro=p5HT^sKEwz8+_<%FjKrK8Pp5zMD2pNcR0b;2=rFiiIy=Wp|rTc0sOi+Q57iBCgeOo +z_%SIE(Mg1J?k?ok2U4tHJ!RIsDmXgENjL67o+_vXox(h#L;&Y6ufy>*%nq5J8i*?Q +z0=c33uIpmF9y~LXz!dJ2x-MgITWK^ky}dn!yig}x7LOQ%&_L4zqeq~`iPjSopCX-J +znFtGW8-`WW)A0-Cdfm_hnNYN}2N2$Sl?~dId5cycs^|wqJ_21PF6Vwcon@!X6#CS&!JQm0j$k~OIO9Xuli@kt{SQxgpI6(tQ6XYbAX0)kQnJ^uspJBD +zLa`F&u}sq&akLa3GpaH$>2?5Q`T=5I3#}xTlN5>^4j~zn`zEZ7AXqo=@mBHvMwI5< +zCfUWNgOjn&7_hZ}3aOOA6g3{Dmqg|Q-UsBwE(NL0Ti~ifL~)?#>5aD0n#oeb6%&2* +zS9KNxDO6eg??9)81Fn4nWJZs9*LTjXw3{`HBOX%C(VQc +mh=)=Us!U_bh{cDmc}7rC6fL0p9D}HT{Uw0Lpf*sV`TqlYEG8!UM8*yp8+je`vYcep>J(g`tA_s`O^k;cm95?IQjC;cG-tg?7{`ndx24^fu{we+ +z(P&11_q|ayL{-xFxI^&Ix?i{8?atbbr)B+6cehp`Ip^+uT7V#D_if(Ji)A3C?7Kbx +z|MUMn@a};%uIs>V~o +zcbj#t3Pc!d7&OWMoEH=X``-CskBxAaWTbo9EzWrLdO;S$2&Kq#KaBWK81&Ez8U!X+jJVW9o0BiZJn{>DKkl}Zx%H6AC%Pw@9R>SG6! +z2UY_0x_SHWCmx3``SF0A`^@VMI|Iza!0&B~Xl~?*c;KWXe5ns#X+DTY{%7s~dA5b% +z&xa2j(LZOa%gPY0#lzFOLKJ4ksU{`nnXpN)i5841nmR_Okf#wyXVtQ-t3YEyb5=DrSw7f_GjDe +zw>%-pAmLlLwllOS5spx#@|;NBh>!RQusX146mT$OXBazg1~w0lmp*$V9~&rB%%~?K +zn(eZmc5^^Kh~Z!`*T2g81yz!}n(nSzYa`W>c&)}uRzR>ds1_NTQ*b>Zd&mxdYX%%?ET +zR^(oPM)M_-4x#3%R7 +zRQFumLYvb8b+M{aOPak9TI^^AmTr3`;UxY7V+%?6+8-MT|CuO|zrLQsNqO;*8jbOjH1DYi;HZ);sBZi+IXE0(6v3>95`0$^tGNMXC +z7b`Ykd4c^FwNJssAHVj)e33s{D*l(~egpJruw$WT2#F&7s`=sF#kG}F<0eq5T#-U; +zG>UEHQ1%;BG67}~)nmV_Tak_3i1tcgMX7ny6#$^UN*exMVvj3nr=uuSO6ikm#^*gM +zxc9LA#>ylt4zk&!g2J1$vwHC|JBrKuSa%&6EVKkr??4Yx2+^7T6-6c}DPW4xjQYb; +zV6uNP2&RzuV%K^19MxNM-}A+wey8jHW$Y5xUFarw90;m` +z5628{G5rr?FxM=HjDult>a&th6&by1aAh~4ljykCkT_S@qM>;gIB5W@{kP^c#E=r3 +zz(6cdIGN6Z#xt&=EZfT-WvVJ7sXfw8!i7H5tobZXtHC&gcf|cFh(__nFtmcID=6_Q +z;UFq6fOK9=d_fqRX(ijKtw2cxW#~3iz=(M0mU3Vv<-KltC?t0%z6m#eCxiMP_V$$7+L;BF*es!%Bo +z-Pvh0i*Sy`g&+Tw0B=o;m>MoJ +zG;@m=le`MO>pbdvx#{b-bcM`^*W5yzTAi;XxItF=9XnNyB_XnS?f(VOT^WnMU>v +zUgYVjSDKX1b$Bw1M?bulL%+lN+9(kCX0(%ZwgeaT*_I4DzH){*OFtWzvg)87 +zr@Cq)$-UP_%ZCa(!#s;|(toLnY6o04W{SOgPic1%m?V=bxA+iD#4k}4ZL~A8On(FS +zj1FG@&us{T+|l2tm>p@7safpDB*v9BZ^a*nLDJMi*eF}J{XJA9;kZo_6Y?EI@{#Ly +zPI>ql-Ya7?4jtoItOvA$iL3?w1;1Oh43;55SVILWZB94zy!VhrZ)t%%LC3dVs0BR+1D`?Dl;|(X|5GgGDc)T{u +zD5p!f#%GzY{mx(eYeY5PL}&=Bm$3r(N30US8{I3@9HYHLV5;hHO?@m*WSw@;t!MDt +zuV(~a`B6ju(Iu-)WI`=b_98$aHj-(`2z|O6Q)bkjn7dBd +zrhq%LiCE|FxMZy68RKVKb%iX`Js`}!zyvmuwkKQ?Uy$bYlJw=Pq1qB<4MJ1G#+QqV +z+UlIQr`-B-=zdp@r~AJ<;io?(g_Pmwy&4NG;=ka=(rX#TuD|I2?lw<4d( +z>iz>)E-lAz5rsucAM-44}*eU&)4vi^0(_v?sJ>q*E`l@{1?X;8!c(dB-AG<(yLl_ +zDFY@RiwVYhMgKpd$`{tksAsLm1s4n5RSB_Kb{zuPfzw_o5B` +zFqjQYw1o1`8BD0rV$=N+pQ9~gH;X=lo(2zI-^=P`_)ioeyHUsr$=f$NHdTp}!PC=I +zdQld`=ei}Z(Ikla;>`r2SMkNz|AX}!W-vtk$c#+av}`K#ZT)FPGOzB&_jb+JgZt@c +zHzS5nwa-dj)fk58eTl3BC7qt|F>*+#LLXdarpf@~xKO%Gg#rT?9hZtxf+$<%Lt?($mnIs5Xk+FiA+ZKL#RWdhQd8zAUF=kqdZc)$4dB +z50&>F_Y$$-%Cwb*pzb&TM;KXim3}G)sMEcbsA;Tk`*6`NiQEhaq_C>%D9r=BGW)z$ +zz^Y4Vo%k_@kxocvP|Vrzi2J(EY5i6?{_}6p&QN{MeUL`G`9W)?}n7G~^NlxRt4Kcs{LhXD6p>ST8UU$#Mjq+i2ZMDcbqQ%Hq&X4k9T +zcFT2;%g5$fsEOCdvzeTFu-jr%gm6jKsWoPuFagIFTVL+$p%$>$e$T^BkI|UD*Xmzb +zIn4#9`Q=-=9fd>9o#W*eR&BV1{Ze)uMVX+UIzU6wTm;fdqwod-#^<*i}cpmwJKk| +zQWtO#+dO0R3pG>LEy*S|lrAb9^BYI0uKCSA0og*e)%AdZz%f*HA$8t7Qu8XX@gl*% +zYYV#Faa`VaQ;V%j@B#K6FFA6J?Zw-G_&dK=3X$-SI^|Q5(|4jx{4A?p-`WcTAFb(1 +z^0MrctYxM$jc7h6fb=_HxdF?xivQa^|VVWM& +z_%&`5lPf25uX~qkoQ<0$-OR;>otcgflf{GhjP*TCB?&=UxoU#pMX<0bp&shkW%guv +zzON%z7$m>zFE<<zazJ!w6? +zSEd#jTu8+bRFa&6(^6A^zr6TkHYkvN3j)9p7kSm^Yqdvw_YN5jormN=4c-DSIlpc! +z!5hu^8(fXOK+ath$KHI05ACCxKVPcY{@voLpnqp()~Q5Jy}sd9bj2HbOd)aRemtpP +z7d+;^9~br3Q4-G~h(d>r#?}F48TV}e<}nvB`-5aiiAE8Q$sJ|b#x^vE1BMdM$7i?M +z)A0HzZz0J0a&plzjvwY=RAm(~2>JiqBvJZKX9)rWIvw3FD0d$bbhe1aKQ@Lw) +z4QrMnRR{8Y@%AcgsTq^^%l18PAd%%usyMhL8&g$SDXpqvpn&~i{1w6Vl8pC(g^8{M +zWf)aP5^KY%KL1#O&%vG7>kLK@ph>(UKS28)9GGPHRSLu{1QFUV8t}2Dj4VWc!Ylsc +zT`KF8bq{a_+Ual$e;0E9h#jJ|;b&E^V5+d~6*a2bE9V>wvYhRXspSWr{SJ882BT{e +zqLsKOkeJ!5len>TU8HB6RXm4Uv-8-_l&w~u9`QB3;TIuSuS!&bl$Z$2h)2Xgc{92E +zI4Jl`Y+tC2A#RNxMvktgQIPQ{+W}h0=YBtQ;>R!AhF=A=O=5bA`QA7QJ@y5)ocfqC +zIjnZPz8d8@FT^dYm?p4^iQmg%OK!BtqSq#WKv04gv~}2v%by5&*$(Nour+`D(V%TI$3{Jc%!)Gv15|uv!M1~ +zuHi485>}FH$5P)OF7t8XBAT=w^H*hU+DdU+k=kGxQk|*D*N80?@rZ8v?;DIOPU}q$ +zuWd~?=Wc!ZP#nMWlks|%j7K8pxPSaJ!jP7MvjlOB&+HX$vMMeQb$NdH1O)e?st#ml +z+rqd1hFH5VcfFu{3Nm|6mZ5RlHoO4omFkIEkMFuf>%kEK8P*W-Nbqv4cvl^5ycbdQ +z6b8ivgX)v;ALMWMEl=%6z84*Ry?(-o%UY8aRaI+!-Y3z}>Ad#8&okpJ|0Tq}0D +zrncsOyd)C|5~I`)bQX4VIYqy2V$)M%D9rtd0Ws0T#y&y(kQY6CP +zpGn<+e-q1F66k)SHsl01FuA}sb4(vW+N6LRyfy(Ed}sITV$os>?@STMuu= +zLQFvdn>XNBa!17@T0cVOd#dWOoBzUWoVmGSyF@B()!v1l8ZM)e%?*;}dl~MzEO%{_y9~ +z(1%2?Yngk4WKTD67{AhH{ZG#UDuUUjIUQ)B~i +z6e+lMSmT`Sy}w)cAc3wFw^Xl}y1B4cFeeo$`TS^e++a7mPL4}+R4^h4;~PWDqT-d4 +zF=Wn{|JwQPnZ~uznZJO4dfz@Qh)(ZMoi=O90yyK_3{Ud`W_9b +zwr(0kr|a#D0MuKWPK7zRI%kcq+?BS7uB$3O*H4&U?LHKzlv3O($Iq`UunL^mbGVdnTQxnxm{^!&d>) +zPqiC<&d|5)GO6ZXmMm6YQC5Kp=?A4-(Y#h;PO*>8!D@LH1_oOM(qF>5lgaqr`gr{5lN +zbkZXRhtXx99WO8n-uBmJFKcwVUCQwpR!ySB;}$RhfXr`P#=#VRGiZl7N{tkfwG8^h +ziVZG|3PPWHE(1RkT^r1K+e-)TY?nTHy+I~$Fi5%2v~+edb#B!42#iE-elrFhYsKT2 +ztMlMQ#7j!8RhJ7(9%rN)%))!E7wFiF%)x +zUc%N=RJtr{pMcT5$x_7twEC%bjnC`&ee*gfp{ZvFI?Ig6krzmibvjQ +zmhoQsnCqAekQ~+2)UX-(+~pNi+1X}5_xfKW^vH0zbHFQ2QZesVIxplbfOIZ!%N@|& +zJQyG%?3}!E{|0qao3{>TRXTmSxwvfLB=&w`cX@$*<=bLb!sGM;1@22kjUfLHRx&~X +zBO9&GztplcwE +zCPgK`ij|Ly0>(9zr;608Q+g;Q +zs#EEZPf}e`^QfoIMdWohTAA0M5PS8MKAn@|=|{V-x7hr~42DOb`d})Yi;$6<7~zN$ +zfsJ007%hNj*}4NR)!NRpk6JNjR{vfnDL1j!#o|R6wJySP^l+2RSvjbzE@Y|lS^L9Z +z+O-z!>tyDjn&5xQxH9Sr1Gh^M|K4E(Mn#3khLx%?K;Goicax__QT=TtQC +zr%A}FI&$qnz`-+-{tjHi#>K%tCgn#S&O3m2u*~YJzktNFcm&lFLnx>V0 +z4BUG8eU@S9bKF@&T50`~@8pW0B=ngjA5`+rAhKcR{;K6pOvvqa)U|1HR9t@eHp7O* +z3r_4*#3T?v+104ls;6T)P4!4$@n{zkVkBkW8Vq0Qxu3eWx#mQ-pmess;l!#u$JyVJ +zPBm%`I@Rkoos>-y{eGw)^yullT-Z#8658Eo`$;4q!5cOFKP6l;99 +z>`K8i%_=u=P-jgY>egr25Xv8fMJ;oKxK?{gkqqhi-pz4-bM%=UyjEGO7TpJJ^m^*g +zNA<7{e&;3kF!(n4%AuIxEUM&;5OhG%onI!-oAdoym$tnd{(ICWpEL2IJ?T?2z4?pG +zXm@7A{DIhBOwaA7ke}B55lcY@(KnU(vkKTLiy>5o7`7}=J{EzE))@{pOiea?ja_A) +z8=y=7BWcL4^YD%z&Et&WPptu3z6Sg&xAsyaW +zxF%tMP+V?x-n&xzoCtI>U7nvn&|H?L(shTS+i56hOUIzxF*z+)*Xa>mwrK!P0x&L{ +zT=G}Rn!+hki96Rrj7jW+e6;L2aO+adshgV>K0b+;;gCw*NSKs7_Q9xGp0)S%ZYF`+ +zMLW4SAqv>*DY^(UJZ7jUFoNKL@xPN{ybM%yT#Eq@6;rx7Y}OyHW12rKuh4U;4aI82aWhj@W=DQ0HgxQlAs73mo+*B!&@Mzd~Ja<*PJ#q5fhDH~bP~pUY%REf55k2vn+?o|4oomJ>1YS=b +z#>n`tt3dim?0EzR^_}<6kW1gY=>$!?-3zbWT4kBlp`fj;4wHmbp>5`JwvMw3Q21heK}k~<<;G5ovs3c=f0bcW3e4v&}u68uY$V24y%5+ +z3NGaviolTGb=JO_XW^+OFq2KU5S$~#p`AheQHwAWr95jMr&vB(r#ux`Db79`87`Jo +zRS$YAb6q}L+sXHSxkd~XD{RrHyFa_F7lrK7icXEWu5J&ZuE8BC^Oh$U3C1N8pvZY7 +z9`8kNDq`-w(I2oDd-S>ZZJ{EoY?PFE&3ZZlYub2Lj(HZs0H@>dq4=Jz+8J*Es +zr1x4Jr;Qc33*AA(sMYQ~DUZvU@bG&jK>x>i&KLW32NSP)3lZ#@`tl8g@EvW@RY7*UznRXQdNOt5JGJ)ao}JpjniI@d=Zc@tcX} +zS(PmR&QGe!;Rj}b-*TA;%h+w0J*-_t0r>=@K=N5tro~rOcznX&9|w&47$+uGa#4@$ +z)Uii&a!z!N+0%B!qh<5 +zy6>DGD}U0~kKX0d?im^BW#v0B{c~?2fhY_u*N-n{(GSoVwkaCv& +z^i-6?(sg#ClZsHs`ZuJRVDAP$%R1NuS1W8}E>}`htGDv@n3KjxYrS{U@I?KRQLEPI +z>KL^?z;i47hJ$(Dfkdldv915?xlF0SuxPXgW;!xVsEwH|>v0*kx&I&(J{;Rr3J0IC +z^p1&b8$0G3N6totYaec>NVV-OUqLM4jfRdLa9#@AwYI;=iNcS6pN=T%ZPy+!Ve0>K#(x&K|Y= +zj#7l3C2D#>!1b1ow&sR8;c=Dx*r&jkLQzpe{Zzjahw-)~XKotvSOB=aprJ0Vl2L;0BxHaPrOb +zWg930)=CKDDs5p7N7Z96Z%Zp-7#Vs1-+~jvL9a*MrD-#!92>nhM)kdT+Pxmu{?_!K +zpA~Q{OqC(h$OV~9c9tF*K3nw(0`3Y7D-VnBWXpfIl()A$JZ2J?8#ICOdblX+8jiK) +z5qP$`;VZ?ROCi3j)gEA2)*D5COWnjSDZ6XB!bz($NPdJ)(KgJmpkF{(gY(XzLMc*4 +zV!~2)+FAFC+icQX-;uA7S6z*(l^y@~B83_y7YMKDRlS$OrV2hUG#-fi^dxP4y=S3O +zo_|yQdUN9{r&?RL26tyu54_s3bL@e}IJew-w#nonfO7!tE0*MbDc)2N?kexQ%kA6k +zLCZ_hml`!MI5dYZ`ldsJBcM-!_wg8)w85}Y7MW3g<43J)fW71ZNQlti8s3cehwI%S!lBlAGP2d03mYs#QC~yPfA<^r1l0b5;SZTY?OsWwz9s9| +zcM4pF@6L2nd>l2?y|y8nS~d1+vORA;Tfz^0{IAU#yPJ+1$?XMtIT(n?sh>Iwe`tPu +zAEEv|si-dYZ|d@0Z0OoDOs3<&Dxezo)sg8+q++0|z8y~vw&2fSsq}tzg9iA_$(Aef +zwYRl-+A$me*KU^F@M@hAC(HBBUVC07s7D&gXS&C){jT+5zw=s`WGLu}g}XuxthRm? +z*_0G{Ujs(#k_;HTEorf)jw7C&>C!q&GX0a0NL+7mN~aP+Bda{B^xOQGdT_Dov(1#B +zZ@Ha%1#gePw}36HeK<9FrkYZ`B5Jt7d5UxWv1obn**qEUsVQ$L^=YG0X4z7_?ao?1X{@ +zY}Dop8rCklSSGDWIzwpSQ +z$ahLa|CI~$bMNeyHCwYS0D?j0fi9m>n|nDWr0|*7(Cyj#NKX#&dQURe;1(TcEJ69m +z2amhmalAs@X;=9vWL>vn*u;~*^3Itq(<8HwoS?JJT60kVPEv6 +zV-GP@+{LOaDR7N4SKtoDX%riN$2-;vR8R7B04D_&u#;x8nU8UA`7-d2` +zerM+!Rn?_2>ms@~)&;5m7BxW~7qFdLAxBl!Xx?OV=cv;GHKk}ZMKHBV +zy3nVX%O;kssw^~Y>ixJ0w71|a*!LYQAJoz3Dc*xo%c)l3i2q@&+e%m0s3)>fi0U?1RL^1x(A(~1n9c<8 +z2_~M{>7*^)9rr+$V)YzLUN_i!c;UlbI>NVUjPUa2u%iLeg>dOY +z{#gzoG@hR>*M?7Q5*y{(Ws12YFf{iuv~NYfeqKpxF(U%~n-) +zp*wDhE@a7_bML*0y!YzSB&q;xB#i-p8m9YMy>zUi)qe?kco+=rx%-*%thC`Z%AWqBzhnMzmH2berwyf#v;skrFWPAQ2M9Sw0M<;%4Lx!4T)_>DB=MY?I1HS9zt +zCD5b>-U04DbVSbna;FEHWP_UGQAbkGZzfT;G>(pwl2H!%oc}Ctxib*irfQu{qGVr- +zsfyW1<?%Evd>2QV@eN7BbR(4cla-uBqQJEeNpmCe$Qf+>VS+mE=z%m{i +zx?(+cW*lU`u+19Y1@3+kA;j~iO8)!7P5NtRJaN*kE9Fy`C(gmKSi +zF=kX;dv5~%Uikd#9_k`bPAHE~?`pixc-a7|h>}$v`Ej|~HEHD(>@M#ei1}XeFEu;WG~2sohCxkPG?u-t2z}?;+t7xl3%=v&;|_u)b@rOL6{b% +z(MN5kRZB<-uL&iq#-KKRq-JS28D9uKm#l%_oiBKNr+EauNae~gDK8fo72#`q(h8)b +zd(?D-w>xJwehZ*BRCZ2|=c6BaNTIM2Wt(`q!G3TP`$?AJ{4>ZJCw)0zTeB8V5VLU$ +z=3VTSTHe*gGk*OUs#!(ZEB?H!%j-P%DLv7 +zHhL@KANFu#@mXWfZY16z0+vyJ{^aPP2S>B(`RDT0QG}AKq#`xFBEEHfkyCU@3_I_n +z&TZbZs^HHV>K>9ZjI5EctYyTHz$LNfdNh#;u|{AZ^pINElvEl>RDGc!3E7wWTR|um +z1^?YVrg(7ofSK4yh0M%}*1?ZK=y=~0cq_s>DkH +zMo2Wc2XZH?@_|~-Y26os(FizrtlNyb4s?KDd8ODhsPE-(?fn+-{F?MFEOv26CRQfpae;!|;U-5H@la1YT62-Ti3>D58a?mzXWp;> +zF&^Q=RGj#Ya)a&z&5f3w#K58Cm9G(ZtzaJJnbc=v9}^$BUY;H@h +z<$zWiV#THxBlO<#ph%Z6SjogSG;$GrKAve(`p*v#=FDu(%M2p|nyBU~2Li(556y3r +z)8pe#mk4!k$AiJ!l3%v1j(Zmm#AiVVXso^0_ftfW%k~wQtnXt?tb6nI##lc!TWWDV +z7^avVE`|P`s?4Lyx|;|S|tCw){Rje*v<-^v6ArMC9^jpS}R> +zu)VX?(VK&a3R|G|XKlk|4-w5wczFH~8-nD$eja4{^<_oWjI)ht!+fRYXgTpW}#GB +zmw#gkdH&7E|H5~3L)&rcH(55~3_CB%joW(#msh}&hjr|v@%BC+FCA|5z1;)J$wYh? +z=})wmjDWWwqUvRJd$mRXK(f?D^B&QI06G=YLF?;2$UmYr6&${J0oP%2>gP=>(=ma@ +zj2seZ;<Sc^XI?*7TvWbF^Sj>y2zvWX!$WcX +zX>gT$$A1I3t<}<_+nAkghm^xoFz+ZC;Vu!lDx8)>Ld15s2F%rj`r?Q%ZOXD` +z78xG@Yc?lES-VSCSTV?j(J4}Q=D_Y@vTpWI9z(oL5<0 +zQySl&={dWP(;K&q)ksmLJ{m^+cT+#|gejLgQKtR*W7HwmiheT{s!b7_Le^)=w&OxEf+{P*|GHS*Xlms#~6lb}1;Fuq0{gWY13>&YKoZyby3 +zyF+C!Hq%e*x)3kkLvLEIBoMkHiby-cZ +z9MnyI6<-;fsKChJwVdX#(d06Ph1jH%Zp*ODmE+;P03r|gyWvwEsG6FanS!{6X^>Il +zGKSv4fddyla{ecB>f?EE_pGSvRsTGW8bv`Jbr~6->u;5~ +zefvdHccB&FGG89eEl#-B>z&h3UyL5F`#v^o7bk1Em$X!y;!hteW4u!e1RtmM)a(Bg +z%CYL$tO-V>4J(!7BIQ+h%RTqYXQepxpi4&@+)6sb6@B1N3Ga4(Z>oWvK +zN}z{6>aDi-Z^kpGQL`_{n?|jKelFc2zamanr^H6~U}c%mV*|&K^Xj!bbK(=COL#gn +zeY#j}{(3$#E&A5M*5|T+WMLLB^tWHVaTt4#JK$(`*ZQI9Yv6~c3|V98eap%H@F*N9 +z-Q^knN_=SIx=BgmVzcyh=8sQ=JtuJ|My%z@*fmZ73dhLAi6{y&+G6CGsaLeJ+Lr$0 +z6AZfy(@7e6w2w^FCv)QBPfv%*1#Bo`R3$cxO4tBGtZ})>PSM2X7!-|6w@~WnMBA;k +zri{Kv=Vy?7bPP1DYVUBa+Uod1Srob}ojW^8f}`+a0hJypO}4AfxJ0jbrM&Vu#9i7mlu@ +zid4FZ2{6LI#J_@g@7WKLz#pZ$p1uea=he0Nlu(OKN4XKTImm_z|e*hbpGeytMkzC0tVkd0zaeFiMw+HJwr$H +zs}m5J!Sh)RrzL;(ki@T?{{1=}Gm8T+(;mH?=3gPGTRH!tT0I2<8PLfs!y_ePI1CsyzK>+&)YT@8)q-rk$h +zz?j#gC{V94M>m2e^Z4dv%yFn0hLE7aX-;XK0gBSg+pVlJsq1e;pO)AS4s*j)+H$v+;aY4}m6_&u5GhOha7Ld}1jfcy`NiVITZG2T8B +z%#8N$XZi3F$W^eB+eCpHOF-KwL|Q<2Np+K8!L1w7s9*_XFTZ)kumWziD=YW5_+=P6 +z9FoM0-L1cq0mz>a&=%X%7KUa096%D!w!&FUxIp=KEY6~!y}u-aCeQC6F~IkgBJVU8 +z3#GCY#BV!Xh)PiVWW4npy)NY+kP +zTdYtK%R3(?yjK26+HQ0uS`0ABBcP75xtY)7HQIsvHTrzrv-AZ+k@wnl7*W<`Yt?=E +z=>cjpFqo#HWTd~8CpB(|=iKjFm{~9tP9=W5{Eh#35wALK-?y?%tdf4r?9ivoFmI#Y +zDPfcGEpX;9C5GtL-_2ZW7geUZ)9mwR5vb#638Wya+4nA-L1%icG%VVaB6h9hqk;ZP +z>0hN6QC48|V_%Bb>2bmrm4@0E*^d}I^}q`^<(F3-MUAd;gnCcJ8Y#6@hjxK`H$QSaH`KcwQkhis8h=2d#Iw`5~WHL7`)1uxopMSdX@ +zVv)G_MX<~a4#fw-;|tslI8G0 +z=Z9%v%{txomqV=`$W1G+sG-$L9(JWls}dd(WbP0v4c(=%$u#mwtp-6i(?eziQK;i$ +zQs>v}8<^K{zTT-2@(~a5&~5?&Mai1V;~O&waD-Cy@O!a>#{$5j-DV}QWg=6+Xzx! +z#-r9Pw(eX~GDkPR30cI4^Bfw!E}kLuI{0z2>9Q-xrZBt>wZ7P?@3}v@WP-f~H2;=} +z2uB&q59$<;MMu%r(=%cw(zVBcmH(fG9I%k9I~(BHeCL75SkbRo8BT?Mq(Tjlpw)cG +z6Y7daOKZ^eEINe;#XHzcbW|FF164}(Jxq`b?Ox;Ea`YmQov^I!>X>S(RIG6uX`6bTxk@; +zl4Btb45ngGp=9FuNJbZbXj@ +zN?`qSTO`xcv3dt-WCLaKpCpC6{Ebwo0geumYZR#vy +zw;QXihOxP#Z5SmO^J?o`2-q{F3M?}9yBGLh)tsFRsxQswWXb=FeTtjP*i?Jlh7p+35o{?o4_ +zpY-b`NTPk{baR!S|840()1vl9b`~J$=YAW_(9Q#Eu~OQW!EJudvS$~9p;!N3!jR+IVJ5>eZzlFpGYPeLJhOt6)RS84Oo?&SVF +zc}7P?0)ryT8JyV=k98k0jg)pULp>5<Cu +zJ>U1B-mJE%gN9@{287t<0d8R(JW_}vEIam;u-C~vA5{4G&Ab%A;@7UFf$b!UKfD~K +zvhKL7RVDFk44`p%d9uWLmpFF{e+oUjqBksJa<5!6^cna2)OjGFXuX`8l(9l7g^~AH +z+w@z3_CBSglFHLKKGQ@gg1_lqJiVh3yok~4CH|ujka_0rquJA(@t~ndLEu3>EvaP` +zff0?48gy}sdn_dny=~Ff6#7jCzBzk({v>E# +zVE6v(y&4iFb015e<4HjE>CO@rE+O$jQ3Dqq3A;`+x|(Dxhvxe%pebm{Zuu=W?&(PK +ztl7({lSl7n`X+mNZ{*QtdnR#KUFpO4( +zyfAw(a+dxU=x)yQ)D!YIT&4HnDkTB^*nN#2i}~oR;0TG3I*G3|8psr;$S{s9N>yYF +z;D|WqEN&8X->?PSDHE{J%708*CRdOwco%Y3zOkKlCDwfAF0$`x$a(Qwldsq&W@FA( +zdsxyk63wZ#_{)712G37v=zrR@;@D+5_$yQtjT@w-pup7cs3yWLn59THhp4$DjsMt- +zp!pp2YzgVn&NuYGxvaP9_GTA(bY5PFPRB{X?yjJs>53F#)5@?85G`tnFdTY+=TLPU +z`yJQe#O87zb&g*T8h!u0xh3@cE5f;8pq~+3{k%V}3M6=!{wnlZ +zZ6}c6o78k+y*^nWDQs!{zoNb}psl6}7kAeH#hn7dDNvwzDems>(o)6N? +z&(ECB$-q*`ZriDu5SdBD!Hui%(nvN5aJvHD3dP;GwBPm|xK6o! +z-|dxqahuaxt9m4&ZX7Nu6HQjwjQ4~s`&`bh)ol&_@_k+o7FJHO$jKCMFc-9VqH9z_ +zW30*og1UBUQFJtiY6;)+KS85Mvy@3YVLTvmVqy~@=;>lxbZxwIt7b2^*~7k6pSF$Y +zt3pw(&zb-G^O39O)QX))PxQ4%pNU>Vz$ohBh?6~Y#hOJCW;y(KZ#)57J$Yl1yyEY^ +zrckeC0-|MCoN}}2((bApk&h_-8!Y!wyj=<;NA2kv?cvIpESA-Kt=DQr{I~BoPiOpiOVc)06T`Nnp)d&6Fz&p>sI5P>!)NuLmG_-QJU_aw((aD +z9Z9oaLXB(KWXUX@Ln<*SOLN)~k|tYvo!MRPo(DX`L#Dq+y?%k6WVH}MT^*IcJ8h73 +zMG4Bra&ZauVZ?QuOL_&?*6$_d@tVuWX2ZF#^2T|=X4Ba9u5>R;B&a6OylxMY$9ODM$&6_Vvo@^ +zQ&Vc&A-*L!>{Qk17LEsG|uH_&Jp9erDxR;8oWXg?U6SsKAFpEEkhV!M4V)3nB8 +zqAn)J)1*|D*bynXgE280gRzT-M2cr#BAyEWyWMZ0!3J1ib{dCL{%bGCo1M_L81q5J! +zSJTR1i7m7%DG_{c(k-3mS6#0=-oU@?d!2Radx@CJ+m}(F57vkMJnz{;l&)24sZNZ@ +z+RIuk+3Y1r7)fVTtq%)-Shh1iRY`-C^sbgbYAzbv(x=sazjlWs|NBp+Dm&boVf@wY +zxPfvy2JLQk|ZI>RUT;5~TVf!ZC>$=sWP=vRTwIc-@vneP54)7?d*#y@Ko)KUn#Wd_lpN +zdhn&_G##`TP=b>oVVdx+{j6@HEJ7y=#SFTy;Pagd@H_v@6@vST`2#&~;^E?FTA}aL +z&+^@0+Tq}phuDfG?&W~t6SaI&$7tEX5gO72Jbb5kA)7v8W=4;yTa^48ZRKn%$h>2O +zwzuRF3_9y*#P+Vn^YO*owZ)dt^PiY7smP6IcY)1!MoxAcPX}T1j=Xo7zt)`#2;L}4 +zvegtP61tcv^;ZbX1gg$J*CF^H$~;Z3Bcni3SbEqW@NuHoYlHP4#X|p#iYtK9!1o>2 +zwV@#=J-2lxA8Qn(Ff6GHNob{`aSm7u!^}HLBW!@S=fqrUEUfma#U0g)qS6yk?ptl* +zq?M1e)~(|TR;VhHYD&e@2od?i==m#X`z!Nj)8V%+vf|6V=8euIkLVe)?_%lvH@Nam +zR!|oXeX`@@xqtjYdqd5#L(J8bf1ScE5iU!{;t;hMu?{cC9T^psV3V1cru;4hM_SWV +zgzZLBS0?e5GD@1|t9m?6OW#dGP0B7kOkYy$B1Zvg9xyotS<;f=y~ZzMq`} +zJ)crJEV8asn2yb{8G`~~QC-mmHCCMu9jfLb5XaCN7*$k*c{}LL@I2c$T|ll7sTLf= +z?wtoAu0j%>XE{VGufihY1c=LXV+sDDQrFgI@+@gBjTBzNGwqA`8iGYg?Hw%Q9g42E +z*b674{mO{TxL9qCcjUAweQb-@2uLu&-isFGPc6BAAj0E +zk<&_Yn$DgbLYZQcW4g44i?+U~G^ynqlGWWa(bhaHblwPS9M&`~y(u4uu&xgotsKx% +ze}KjJoq38LHb*Pd4gWGslz)F^_)%sM889MYBEiO +zP6KWomi>`)=$ciF)s7o+a`WC*x5u+}9>%XC9S_%synh`4#J?1m>N?t8S4uSwQ>(OF +zELRSA4@cj(nJ-Lrctfv{ziXYY3g3*3M-Vj)Hn1Ai*g|NPkoOZ|Q%`+mhtjac$?IVKWLD`~r6k>vKF +zm(u-{MF#r9>7_wO4zCd(vmxwhF+G9^+QrS37znXK7^p{lm&a--o?4tdbDC)v`4TsQ +zFhY&TwDwptBy?;OYhu~uIyUktEzf`V0{8Ls_0c>MQk$nak!2eJspl8b9@H$=!TiBI +zx*@28IX~k1u_-nblSYBNFjJb<{GdS~1duz!H)W9Z6V{4*lFt3*9@%X{6ZD7*uk%aIBM8A{u3b`?44)W +z{YoQS4J +z7z^-K-s4shb=ej}#t>{kW&0wG0gmP_&b> +zJE(7hhK+5uaouFjwar_^T%Ytgp5_{8^=bt^`G=6xs=(i}&TMI@2y3P|@n(-m+^#xb +zadwgV78I7KG}C5=-;-JSTNgX(;pFPB1N)4eoI>rqrUPMEPOaCgSw?vxk9s=eOHwV=j&j`x%hZyno(=XPe6~#}&rEFVN<8(%cGL;HTf##;QGr;tM1;c9Xvdun@n0P* +z`}un9uDUJFF~*T{ZUdU%l3J}kNl_ZPjpsO3=+{T)Mi>il%Na|sY`->qlOxlN4nfv&ba(RUJ8NC3UM +zM_hkdLjls}T<>IqBy=x3lkKuKfa=z4JI6v0H;6yTNkE8zVWzfoxPpO_PC&pBsXl6} +z_BGjQUr`>f^*Pm_(rpTs7Mq!A=+GXU^JJmLVR~~%j>7jM^i=Dqy)}&2#@;%f?VZN2 +zVhfv^(4Wh2WRAfffFE*lm|TMw7wvqMw<4v%DTV13n!L##4xZGUrW<|Ilv6tsdX<7j +z-nZ=DJu4f1Px`kaS7X1Rv`S~*OP7+3pd3IQR;W2zq+|ywUS()shZXi{KA08xl>6xo +z^$m$1Qi4UsKGabft4*Xk#B)G%G#3c}APIaJrNjo*POkf+qhI7aTJKd>M5R5||CxE~ +zcn3bX0vFs1H<}(=Hh@36vvSODe%IAM^HgCQz@+{ZBE5)1!)R>iY&b8@&3kZ)oJt_~ +zR?U)phTtj3^1sPI2lg`7UBmIz9K4l7mz)Ju>Cf$nLZ$iaP);6^hCAjaAD0g;+(PHs5BKZouN?)cyawhAq)_+w%)KF +zhCndQ*J7I{3A5K+jh0jmZIa=A{f$W)u!{*wLMdm&t>?7zGPyX^eQDHP?ER?fG&D`f +z;UqB{O8~6yOr(P{AgGMlh&XN$1vK@Dd1I_`skNbGM|~A>!Co}Ctb8O#4iPZyJe;cH +zRC^pl7$E1AiW!$>Iq5?WoS94A-LYAEXyIU)>(#=9I3K3}1-?7yZi%eCsBJn`-7kwZ0TQwzFu2W1pogk53{N4$9RrVSSK(3nhM`psJSYr>e@rxKK`XMq!U;y=SB@i+lwk%b9n> +zvC|wrCnyxZZ9(%m87Vvt?m;@MWwJv>nk5Y3VnPm4?E{)T>|m{_ +zq-&dlPMe<|iQU3tl7TQ6Bn4b0qKl{Rf)sdE +zdH%@QZ8w!TD^A0Hq8A~eDQ$`)cG#ydBBwW8l&>8rG(3{T;V_;&VUhuVeV~CP$Md>6 +z(dL`jm%}=!7L(e<<5z`#r{5_z>ALN)q8R?w+I$*lMUiuP9B0=zy?LD7EjJEAbNCj0 +zFPM)xZ}5JXvifXz*oE6r}@M8!yOyiKKQK!f6rakT{!G0TWF>NPvbY;I7xI%2sEdx7>3( +zYmL?nX}L;PwJLN(Pt$AsTN&RRH|h}3+rPu-Zs(JOJe%D_nkx4&4q!9a`d2rfMP=bw +zqepFRURf=x1sz-q$FBo0LF9NLqvSK&m6M%*(5!<|4xkR9FsW6JlC4Wuzr1D%P{gVC +z>>vCKWWTDLj>5(V^4jygEM^q#FmC7d5Bae%*(ciKFCvB1%whK#W(2r81Q@Jny27wq +zopw>$ac~EUHSS~>=U+a`{wXo@rv7AOY6;UDB+AMWX>JtDj8aK&Ty8?(Se`gN5lNCPFjE@jiOVI{0<$m)@5+Vp;>hesHz-HdoeIsh)k9$8q8_u|preokw1?GX|g{7B2*T1ZP}Ubx8C;1H=xTwc@Ov1VfAkMOJ!jelDchsGErIxz>cG=lb}X)y_| +z8O@ak!Q$6Xq}Ng!b3_7pHsA99cWErCPB;OuQCSJV5=J +zD5Z{Jp7D7`n-2@56_1u+CT5YU72K*X4V_${0!&1!S<9SLe&K>ob1G@XTWqdezbR0G +za7=9pqRw=YesmQoHb1c#&}Exxur4I<7|}#OU2IWELO6 +zaRg1V7>=)}@+mWxN^Oa73{#$_WW!3(SfiSj6f +zg$_pYv#qwgFReA3^s-vPrNO{eZ79(WUt~Arne{{WG1igh@bZ1nh^(d<$Rp123M+wj +z#4Co7mJxDzm{#RR7kyxh+)T5J#d03Vd(@~v!0}>#^S-%TkTzP9641-pZy>+BI@Nj% +zFDH4?-O3>AcgKAA`1MDEhrQKA?Y&b+7OI<|2UvE{F8|54XbLZhrW(ltEwE%O%EwMXWk0EY&fI5AKRvmf9`Ol{&s(#`$Ub9F-&}zuPAccF!t- +z@ZZT&ls1t^?$P2yd;>i!k^|<17@-ag2c!Wvb@ZwQ=0&w5GQf$L0+xekXDks$#GD>J +z!(E{AGn-g3Ygx^>UL%|AEmvjna*ebKP0hflv`0tFO(0S@no4jC3Z-mthWYhqnkXY$ +z<+Qj0<|8lNm)?23M1Gtq*6L0u-L#SaJOdQ!XG&vSx-ZU(UYHm($P9AT~Uyy*I_MWo0Hc +zrgQWU0|z<|$&KLGIn5;Q5ACWP*z544A|YgAw325L{Tg#WmTUB7P@7&W%#DL7dlCo= +zKBjL=3_4*`K;XqS!1}K5Az(2L*b9f +z_1r-rKAHd*V2`~lu?NRwHL|VwFRTt0eYVi`)MgNXb*ASBR82ev(0L2tv1g{^Kcxz) +zxI0iLwpEUxD^8jsy4IvI@229aHp$><5718s4BYjKzvOjXKBg=+pWKbbw|Sqglu4=( +z%xN4V)R58-VN(U#)dNFgLKA@u2M6Ms;p>i4KT6%p2Don0!nLP?>^2;r +z4Y2HRWeNJY-*bAa2!t|`PC0WUG`bvlx+N8lEFc&+`Ji6#BP80iz;AiX7`OVmQqLS+lB~sqcCkjO;Krb2;BO_8F(f%|_oL@X^(eCF +zDh$jMK1US6^W1wi$YlPp0X5eE7RTn^F-8-)k@Y_4p41F9q7&29bD{dD>1Lf$#<-)# +ze#Tc^b?R*``jzz2C!}p(2KfBsUh30PF|W4c_5^YFbJlySCd@^_5>2iUA%w~1 +zV%&EkF2WMGsh+mpe$wso2xC|o!wk^O*C=gpQ+gm1iW}pVDn}R^82BPxPDV-&KVxQW +zd%2`%Md@?b{X62#<72qHum5*`lWNEzmV8iZ20mw~LajnTclznXkfx~ZjPxRMnhi`Q +zVlOxLS!3TQp|+wuF}tMoFPL~tZ=tj{dD}^WE`Np+T6hO-9xiN58z`d?{NCYr#~!EO +zd55uo*JHK2-+9oRa=e*`9?U~A@~qnBaDBp(`9pu)Lu<9BIV{`!%*eo>B1N5otz#m) +zEOA8icC*ctepkk)IZC3Q*KrO{o2y-~)8l{Mcm?Z+C9jMBjJ@c6-;l&2Q=pXO6fP|< +zKX6!FFH4qdm>08onj04mH(85b=mw1HVjj`_7UM+g&(`uW_;c`0$iq#s@kq`4>$zX) +zT520RM_^1CjFBs7@ +zx<;u142EvmL~bko4gX|px?$ZafVD;BV@gC+Oc115EN<23@T6yBqpz*epeZS7Hb>8? +zt4qt3!|J}Ze0bjMkMP7EoYwtq7{qJbR6#?4oPraGjtDjB8?vvr4=d{t^Od4_`OV$w +z`=97o%u6FjowoDwDH!F(kcCyx^S+Slz4z@-vg8FcSboBQgt|a%o$}r=)J~mxT-&6B4W$+dbLac5kjvuhhYxUuM(VFiYMw52>c28MDD-19k3WYk^O4nt3Cgw%@ +zj#S~uz-#Kx9hr5gNu2li-HGl~p|l>y*K4`O1X?g0Y$&;$#oT^37j4+Emlqi?s6U}o?X +zv3!#Wgfe(I3+;t#G{h@MZViI9zE=ptVAR5zF2>OQR3}p-lNDf6B5dn0Ph1#bRNODT +z*uAITGK{zP>uy1Lhi}p<1w!wDK!$^JgzXN3kB^QzPVV)rWbNfD_VG+wReTg#$kp0I +zqYEzS*tc4FYP^;Eo9h)KtwkF=lkI&dK8(XxO5NmG8YtAY>IbFC1?1f8!*CRz;LO@V +zu#Z9{6Qy-9eBwu)ex+LEraUmTfAx2Fe~o3Ew{$;Uk3AC##<a#nuhqjw7iT(KP+JWAWlH54T^?4h`cTzFuxG!qRVQ2B;wR@xe9b>VQ*S%d6YY@ +z|E0U#BaL4)HR*C(*wMxM*4D5L{meGKAv|(S`Pl9HH)hJn_cFgK)tmY;<>>od7PJcC +zgb4098;$IicQ%|A?Vqk%ziV0Vws+<4=H^kH>iZn~8{VBjc6U<*jiP2}>yV8+cdK5! +zK0m5qo;dQznsKWaQUvd^`Fh_Os0-2z6YXaR?1prg``1O9!5GHs +z8C7>v9kOy#`)s!7ILJPQjq()Ie(%vu%yUT4!AoSJk$%6bF3-dcEP#a5{}kGse1_ai +zWBc80`BywPDEnS5Ee#F}4BC8CkAAy~^qTfwk%$>&RjCGa`_5q34a(B4imM8M`bZzIaI%s#+=kLFt<^SmZdN(rw*$J+H&GuXr-~I7N +zN9bcf3f2%?#vZ@A3%ikyK5JmMm(mnKMt;tvP-C!8zpfRss8wpW1OqT911IxBOl=sj +zgq@r)isKI#4+KPs?^_L}+PkfE(LS*EqJU&EZMzy=ZhFyyZ;mM6yqrP_()XfAUz=<< +z6xF%ux}KfZo_E(?`$S)FcW>}1oj1boWxd73k9d&P-g0o;)nBmmyI7dzp=I!=*EqL$ +zrK=yaBeWaOac&icQ)TghA{_c9O?~T3JKo)X2|#t(9#kGR%=?m<4xpr}Xi7-dk|jVI +zT-qCaO#6xP8#?UOZx8+N_vWKpc7|WmzOFetLJB?48DHJ@ZkA3(h{+r6ChB~8GxHCWgEbpY2+YVHeb9Dj|2 +zj~EptMWhu%jfqm!X?U}`HR$kJb43@6;oUX~Fb?6@_bS;C+=< +zW4A)Ng=+!pyqP{4Lv5p??(vC=)upMvfG*doe*bgrmKsL&6|WS`p_;wh&ttb}**B67 +z!`HIpGqfyPndU3br87_g-UJZCAT45X;=&eXX(C1h3p`~X*5Qzd@>> +zSy9i_l{J#ls5@s9qWm6*?@F1Ny1*~o74evwv7=?_yVCC8#>4|#g#?|w%OOcxjw3NQ +z-;)yfz0qn*K5!32i3cs$WFhqm_)?H?%r3_yhCRN=EG4bR?^f7X%h>Kh4=g#_iwYXH +zNXs8xFRyn}t$xm)0 +zu;BU*j7zBD;Gwu`7KjM8YZ%r>%_f1Z`;kaOhz9z&V)5~u#^RXQ(|6Y55Au0t<5k1h +zfp@05Z6BZch(1r-h5FYp0)?%;Em0!{fK!tmQ-*qO9P=j2wW2OeSj1s7L +z$em}*W-<&`{U0UW8-sE;Ae~v}gzi0Jf7W??h^%x-cmz9J90Yd`*+o +z<)f`QfkdAOXGuSa(q9NkwCvTJcV~N#fm~4g;%Af8E!gCn&$rdRl?c8@*rnRAgEfmq +z-SHZNeN1XiGxN$XKlS;|#6dIDAmNzt$)&i}lvdX8PJXkhyB5b3z7dD(rYgGP1j?44 +z*C?%~-nw^rc#(c-9Lj!2jlV$Gy>Xt&#P*0t9E}-X8vQM~=B&AT?@L;k4wfeqGScKh +z>i+ZG&Bf-AejByn%<8L4o~Hb7M^ySodkS^wX>Mzigw8EkKwV33XKL|@gM%G@bMLLb +zy6F>1hnQbeg4GRP`L1@hL%vK6B54-5;{cc4E*u +z!H&!EP1jo5%8h~GiBtBKmlof<{#5x+4%Xq-gu(g{oCiDR;cbQYQhD;LfV&LNG<6fF +zL`zTn$oup*7>k7&gJ`h1Twx0+$zp+ARyw-e!aT3Ye6vO&0KWZO%{=-c6u0ZEStYBk +z^S-UB2*arr9tIOo?i4d!yRovUJq!)kcl~ylYTQPwyd7!Q&Di=o!v3hSvG<`|SF(A( +zdP*F&`RE`N1l41(($e?IKQSs{(hT-YIu3D&0KeWD9Cfl_$G-e22l_kJfrXO*JeF?w +zh#bMn>g`QK-802kn!g_t&IhG7ic6#DXE#BT+?kLo43u`&g9j2w)mb~Gqpo>9nmAj5t)j|9N}EF@E7goaB=zuRw1&ScOdiJ9k-7F}xk +zC+BFcDKXXLNKSDsni)HqmETp#)Pq*E=Q#^fy4x5QLi6&W#E!2t28L~NuJ=jH5x@Uw +zk5lBG +zrI;+71lGnotaeqHo@b9Ue}k#wZ9okWi_zRmatdpIZnjbg54X#n9^)M@4OSwYa>3OP +zn2-D|36(W7k{|g#ZMEP9c@k$>^DT!Ou4^2^e$oS;x13Xfg&@XGxeR5lTRuMkE$>QQ +z`#n#d0DXqqwvAU{L~HY1u~-+Uwa(<{W(1t%KL-tDxmSIS6Ujuf3||7KT?ZKqwE+;~ +zpnd#XsdW<0DniUcjokXfU?JXO%K8(&4e^j~fhTL8A{a~0ojbvM1uoSp4jPO6-RNhf +z^)#>Fr$xL&%MT{!Myge!u(!|IJftz@l)J9B?7R;)arBHO-pn;G5 +z-~xZRQRD@Sw)4z&8iaP+-|oVXX6iB3kbyxhhb=JGXT~O&?SNot +zYnC(5LX&0YDuEJ32=i3y7WC~f94NLFU`=wNx_eSs!)wR1btobN<`F`;0YP&+2ToxH +z$g<#Wsv%qutfr%(sMflMjkq-;kRB@HQ6PW{(Sw)VkTsOp>@OIE{J#n~Iayl7=CI2H +z(hQgfqHm0$KR2WTE~0v&3wSC5aOD9y4HkQWN?v>GVBa_t@DRxde+%xjG8+*3g1ew1ogLRda^;x)$Eh-6%>bfVFbB +zd$jPzCi@WQzk1->%R{021hD|X`i`GyPRM_syAeI+N}p@bpsl0ez&FEG3HI0(^10B8 +zO`-9o=P{}*t>#zn1(Gs!HQseqU>Svm$I2F&f{}e1|(>9O`*V1qSLLrCYgc;5K +zjPQT!JDkA(pGMU%z_fM505KdYBx_z`ea*gqVnsV!*tua21#Xoi{DqYl+Z09<8ZYp_ +z7nPxuS@OTXFJg0|Xll`JK+DHJrUDS01yKKM3~J}Kc>i?>3~@KqS^$1$INPz6hHV=g +zxs}J;ghlHbZknFjP+jH9OHu*(PUFG<4{x3SSIIid+)L}0!G8b}ukZX{`4QS47q$O~ +z6bejQ%Kvo1fC0YU=m$WeKPa22&$^lNF_1H)#ThhZg#AUNG>P8QuF%Kzd4cbL*iXT= +zZ<;Nvb0PfgTRlRsezB}H=DWs}GgZ9i9O~i(v^1U%iH(a`(8YhZmktZXwiv2F{)^5R +z({Q_#yb@;LYPMD0PtcW9S;Fnh8CRS0z78pjJrO7&I4zj;7jjtzI~4hEI#kkFMsT*; +zqS=9eRaC|`Rlwz~rc~^S;)IS56jEy(eEirrbeO*np}pV?`xiH;6+$iVuPyLWnEpBw +z5y1Xi7u7tK^dGg)|GHrtYA}^Zy??uFNE0;Y=|Eck@0AZ@q}DwLf6W#80(-!}=Z2ug +z_)c2`-+%Z8*&=c3xw6CQ|7#{)BO+*CmlES2gu0?&`%y=1=YQ=2O!-pHb=>n{|90s& +z-VbBDq^AFbREDRvtg}@~A^BJ4Z!3RA8%sk}Z93Z&Tr+fZKn*nj{qN&iN>evQCB%QCz?wonp#Lib2QCjH +z>i%o42p|ibx Date: Mon, 7 Oct 2024 22:09:42 -0400 Subject: [PATCH 37/43] f/n: Add support for ignoring vibrator effects --- ...d-support-for-ignoring-broken-sensor.patch | 2 +- ...support-to-fix-broken-Mediatek-gpufr.patch | 2 +- ...Support-optionally-ignoring-vibrator.patch | 80 +++++++++++++++++++ 3 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 frameworks/native/0003-vibratorservice-Support-optionally-ignoring-vibrator.patch diff --git a/frameworks/native/0001-sensorservice-Add-support-for-ignoring-broken-sensor.patch b/frameworks/native/0001-sensorservice-Add-support-for-ignoring-broken-sensor.patch index 0475bff..00f755a 100644 --- a/frameworks/native/0001-sensorservice-Add-support-for-ignoring-broken-sensor.patch +++ b/frameworks/native/0001-sensorservice-Add-support-for-ignoring-broken-sensor.patch @@ -1,7 +1,7 @@ From e84296f15137b076bf2504481cba80956eb793ae Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sun, 6 Oct 2024 09:06:48 -0400 -Subject: [PATCH 1/2] sensorservice: Add support for ignoring broken sensors +Subject: [PATCH 1/3] sensorservice: Add support for ignoring broken sensors This allows those sensors to be replaced by SensorFusion when possible. diff --git a/frameworks/native/0002-Add-MTK-GED-KPI-support-to-fix-broken-Mediatek-gpufr.patch b/frameworks/native/0002-Add-MTK-GED-KPI-support-to-fix-broken-Mediatek-gpufr.patch index 25c523d..e4fa388 100644 --- a/frameworks/native/0002-Add-MTK-GED-KPI-support-to-fix-broken-Mediatek-gpufr.patch +++ b/frameworks/native/0002-Add-MTK-GED-KPI-support-to-fix-broken-Mediatek-gpufr.patch @@ -1,7 +1,7 @@ From c84b2a4ea735ac9d399ca8b15ef7382f80929e22 Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Sat, 25 Nov 2023 08:15:28 -0500 -Subject: [PATCH 2/2] Add MTK GED KPI support to fix broken Mediatek gpufreq +Subject: [PATCH 2/3] Add MTK GED KPI support to fix broken Mediatek gpufreq Mediatek GPU scheduler likes to have the timestamps of the frames to be able to adjust DVFS. diff --git a/frameworks/native/0003-vibratorservice-Support-optionally-ignoring-vibrator.patch b/frameworks/native/0003-vibratorservice-Support-optionally-ignoring-vibrator.patch new file mode 100644 index 0000000..6c7eafc --- /dev/null +++ b/frameworks/native/0003-vibratorservice-Support-optionally-ignoring-vibrator.patch @@ -0,0 +1,80 @@ +From 0b65f687bfec1e43577477ccb8db09cb4cfbf4ac Mon Sep 17 00:00:00 2001 +From: Peter Cai +Date: Mon, 7 Oct 2024 22:07:58 -0400 +Subject: [PATCH 3/3] vibratorservice: Support optionally ignoring vibrator + effects + +On Unihertz Jelly Max the preloaded vibrator HAL is utterly broken. + +Change-Id: I308190a225932fba2a4aa1c830c03ab874d8032e +--- + .../vibratorservice/VibratorHalWrapper.cpp | 18 +++++++++++++++++- + 1 file changed, 17 insertions(+), 1 deletion(-) + +diff --git a/services/vibratorservice/VibratorHalWrapper.cpp b/services/vibratorservice/VibratorHalWrapper.cpp +index f10ba44..783b681 100644 +--- a/services/vibratorservice/VibratorHalWrapper.cpp ++++ b/services/vibratorservice/VibratorHalWrapper.cpp +@@ -16,6 +16,7 @@ + + #define LOG_TAG "VibratorHalWrapper" + ++#include + #include + #include + #include +@@ -41,6 +42,12 @@ namespace V1_2 = android::hardware::vibrator::V1_2; + namespace V1_3 = android::hardware::vibrator::V1_3; + namespace Aidl = android::hardware::vibrator; + ++#define RETURN_UNSUPPORTED_IF_IGNORED() \ ++ bool shouldIgnoreEffects = android::base::GetBoolProperty("persist.sys.phh.ignore_vibrator_effects", false); \ ++ if (shouldIgnoreEffects) { \ ++ return HalResult::unsupported(); \ ++ } ++ + namespace android { + + namespace vibrator { +@@ -60,7 +67,10 @@ Info HalWrapper::getInfo() { + getCapabilities(); + getPrimitiveDurations(); + std::lock_guard lock(mInfoMutex); +- if (mInfoCache.mSupportedEffects.isFailed()) { ++ bool shouldIgnoreEffects = android::base::GetBoolProperty("persist.sys.phh.ignore_vibrator_effects", false); ++ if (shouldIgnoreEffects) { ++ mInfoCache.mSupportedEffects = HalResult>::ok(std::vector()); ++ } else if (mInfoCache.mSupportedEffects.isFailed()) { + mInfoCache.mSupportedEffects = getSupportedEffectsInternal(); + } + if (mInfoCache.mSupportedBraking.isFailed()) { +@@ -252,6 +262,8 @@ HalResult AidlHalWrapper::alwaysOnDisable(int32_t id) { + + HalResult AidlHalWrapper::performEffect( + Effect effect, EffectStrength strength, const std::function& completionCallback) { ++ RETURN_UNSUPPORTED_IF_IGNORED(); ++ + HalResult capabilities = getCapabilities(); + bool supportsCallback = capabilities.isOk() && + static_cast(capabilities.value() & Capabilities::PERFORM_CALLBACK); +@@ -272,6 +284,8 @@ HalResult AidlHalWrapper::performEffect( + HalResult AidlHalWrapper::performComposedEffect( + const std::vector& primitives, + const std::function& completionCallback) { ++ RETURN_UNSUPPORTED_IF_IGNORED(); ++ + // This method should always support callbacks, so no need to double check. + auto cb = new HalCallbackWrapper(completionCallback); + +@@ -488,6 +502,8 @@ template + HalResult HidlHalWrapper::performInternal( + perform_fn performFn, sp handle, T effect, EffectStrength strength, + const std::function& completionCallback) { ++ RETURN_UNSUPPORTED_IF_IGNORED(); ++ + V1_0::Status status; + int32_t lengthMs; + auto effectCallback = [&status, &lengthMs](V1_0::Status retStatus, uint32_t retLengthMs) { +-- +2.44.0 + From ae7e9406c93837f1e8f30cf0751978bf7b084669 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Tue, 8 Oct 2024 08:48:22 -0400 Subject: [PATCH 38/43] f/native: Don't ignore vibrator effects that don't have a default fallback --- ...Support-optionally-ignoring-vibrator.patch | 52 +++++++++++-------- 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/frameworks/native/0003-vibratorservice-Support-optionally-ignoring-vibrator.patch b/frameworks/native/0003-vibratorservice-Support-optionally-ignoring-vibrator.patch index 6c7eafc..ce17570 100644 --- a/frameworks/native/0003-vibratorservice-Support-optionally-ignoring-vibrator.patch +++ b/frameworks/native/0003-vibratorservice-Support-optionally-ignoring-vibrator.patch @@ -1,4 +1,4 @@ -From 0b65f687bfec1e43577477ccb8db09cb4cfbf4ac Mon Sep 17 00:00:00 2001 +From 2c6a28725081d52b506ffa2d5dc0d9d2df6e095f Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Mon, 7 Oct 2024 22:07:58 -0400 Subject: [PATCH 3/3] vibratorservice: Support optionally ignoring vibrator @@ -8,11 +8,11 @@ On Unihertz Jelly Max the preloaded vibrator HAL is utterly broken. Change-Id: I308190a225932fba2a4aa1c830c03ab874d8032e --- - .../vibratorservice/VibratorHalWrapper.cpp | 18 +++++++++++++++++- - 1 file changed, 17 insertions(+), 1 deletion(-) + .../vibratorservice/VibratorHalWrapper.cpp | 31 +++++++++++++++++++ + 1 file changed, 31 insertions(+) diff --git a/services/vibratorservice/VibratorHalWrapper.cpp b/services/vibratorservice/VibratorHalWrapper.cpp -index f10ba44..783b681 100644 +index f10ba44..fd59517 100644 --- a/services/vibratorservice/VibratorHalWrapper.cpp +++ b/services/vibratorservice/VibratorHalWrapper.cpp @@ -16,6 +16,7 @@ @@ -23,32 +23,49 @@ index f10ba44..783b681 100644 #include #include #include -@@ -41,6 +42,12 @@ namespace V1_2 = android::hardware::vibrator::V1_2; +@@ -41,6 +42,22 @@ namespace V1_2 = android::hardware::vibrator::V1_2; namespace V1_3 = android::hardware::vibrator::V1_3; namespace Aidl = android::hardware::vibrator; ++const Effect EFFECT_WITH_FALLBACK[] = { ++ Effect::CLICK, ++ Effect::DOUBLE_CLICK, ++ Effect::HEAVY_CLICK, ++ Effect::TICK, ++}; ++ +#define RETURN_UNSUPPORTED_IF_IGNORED() \ + bool shouldIgnoreEffects = android::base::GetBoolProperty("persist.sys.phh.ignore_vibrator_effects", false); \ -+ if (shouldIgnoreEffects) { \ ++ auto casted_effect = static_cast(effect); \ ++ bool isEffectWithFallback = std::find(std::begin(EFFECT_WITH_FALLBACK), std::end(EFFECT_WITH_FALLBACK), casted_effect) \ ++ != std::end(EFFECT_WITH_FALLBACK); \ ++ if (shouldIgnoreEffects && isEffectWithFallback) { \ + return HalResult::unsupported(); \ + } + namespace android { namespace vibrator { -@@ -60,7 +67,10 @@ Info HalWrapper::getInfo() { +@@ -60,8 +77,18 @@ Info HalWrapper::getInfo() { getCapabilities(); getPrimitiveDurations(); std::lock_guard lock(mInfoMutex); -- if (mInfoCache.mSupportedEffects.isFailed()) { + bool shouldIgnoreEffects = android::base::GetBoolProperty("persist.sys.phh.ignore_vibrator_effects", false); -+ if (shouldIgnoreEffects) { -+ mInfoCache.mSupportedEffects = HalResult>::ok(std::vector()); -+ } else if (mInfoCache.mSupportedEffects.isFailed()) { + if (mInfoCache.mSupportedEffects.isFailed()) { mInfoCache.mSupportedEffects = getSupportedEffectsInternal(); ++ if (mInfoCache.mSupportedEffects.isOk()) { ++ std::vector filtered; ++ for (auto& effect : mInfoCache.mSupportedEffects.value()) { ++ if (std::find(std::begin(EFFECT_WITH_FALLBACK), std::end(EFFECT_WITH_FALLBACK), effect) == std::end(EFFECT_WITH_FALLBACK)) { ++ filtered.push_back(effect); ++ } ++ } ++ mInfoCache.mSupportedEffects = HalResult>::ok(filtered); ++ } } if (mInfoCache.mSupportedBraking.isFailed()) { -@@ -252,6 +262,8 @@ HalResult AidlHalWrapper::alwaysOnDisable(int32_t id) { + mInfoCache.mSupportedBraking = getSupportedBrakingInternal(); +@@ -252,6 +279,8 @@ HalResult AidlHalWrapper::alwaysOnDisable(int32_t id) { HalResult AidlHalWrapper::performEffect( Effect effect, EffectStrength strength, const std::function& completionCallback) { @@ -57,16 +74,7 @@ index f10ba44..783b681 100644 HalResult capabilities = getCapabilities(); bool supportsCallback = capabilities.isOk() && static_cast(capabilities.value() & Capabilities::PERFORM_CALLBACK); -@@ -272,6 +284,8 @@ HalResult AidlHalWrapper::performEffect( - HalResult AidlHalWrapper::performComposedEffect( - const std::vector& primitives, - const std::function& completionCallback) { -+ RETURN_UNSUPPORTED_IF_IGNORED(); -+ - // This method should always support callbacks, so no need to double check. - auto cb = new HalCallbackWrapper(completionCallback); - -@@ -488,6 +502,8 @@ template +@@ -488,6 +517,8 @@ template HalResult HidlHalWrapper::performInternal( perform_fn performFn, sp handle, T effect, EffectStrength strength, const std::function& completionCallback) { From 4006149f3d5f2046715f3c1362967e5c035aeda0 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 19 Oct 2024 14:45:59 -0400 Subject: [PATCH 39/43] Remove the ExactCalculator patch --- ...1-Temporarily-switch-targetSDK-to-34.patch | 26 ------------------- 1 file changed, 26 deletions(-) delete mode 100644 packages/apps/ExactCalculator/0001-Temporarily-switch-targetSDK-to-34.patch diff --git a/packages/apps/ExactCalculator/0001-Temporarily-switch-targetSDK-to-34.patch b/packages/apps/ExactCalculator/0001-Temporarily-switch-targetSDK-to-34.patch deleted file mode 100644 index b85f57b..0000000 --- a/packages/apps/ExactCalculator/0001-Temporarily-switch-targetSDK-to-34.patch +++ /dev/null @@ -1,26 +0,0 @@ -From a32887d1305e6095a8ba71b3fd60fe457c661b20 Mon Sep 17 00:00:00 2001 -From: Peter Cai -Date: Sat, 5 Oct 2024 10:39:15 -0400 -Subject: [PATCH] Temporarily switch targetSDK to 34 - -...before LineageOS pushes the SDK 35 updates ---- - Android.bp | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/Android.bp b/Android.bp -index 5f5359b..d9d135b 100644 ---- a/Android.bp -+++ b/Android.bp -@@ -19,7 +19,7 @@ android_app { - - resource_dirs: ["res"], - -- sdk_version: "current", -+ sdk_version: "34", - - overrides: ["Calculator"], - --- -2.44.0 - From 827e0d2a507b138f9dc0400d61d803d1cba7637e Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 21 Dec 2024 12:03:08 -0500 Subject: [PATCH 40/43] Refresh patches for AOSP 15 r6 --- ...m-to-fake-vendor-props-on-a-per-proc.patch | 2 +- ...orce-load-audio-policy-for-system-si.patch | 2 +- ...2DP-audio-ports-from-the-primary-HAL.patch | 2 +- ...gh-pitched-voice-on-Qualcomm-devices.patch | 2 +- .../0004-Fix-BT-in-call-on-CAF-devices.patch | 2 +- ...Make-camera-IDs-filter-out-optional.patch} | 10 +- ...nd-Q-behavior-respectively-for-tele.patch} | 32 +++--- ...support-glob-matching-for-properties.patch | 2 +- ...PackageUtils-Add-glob-matching-suppo.patch | 2 +- .../base/0003-Global-VPN-feature-1-2.patch | 32 +++--- ...ze-boot-animation-to-match-screen-si.patch | 6 +- ...ateForSlotIndex-in-SubscriptionManag.patch | 6 +- ...CallingIdentity-variant-with-both-ex.patch | 6 +- ...poofing-for-microG-Companion-Servic.patch} | 6 +- ...ubbleDataRepositoryTest-to-use-mocki.patch | 75 ------------- ...and-AIDL-fingerprint-services-are-m.patch} | 8 +- ....version.incremental-to-signal-OTA-.patch} | 30 +++--- ...k-before-setting-default-or-fallback.patch | 48 ++++----- ...treating-virtual-biometric-sensors-a.patch | 49 +++++++++ ...d-support-for-ignoring-broken-sensor.patch | 2 +- ...support-to-fix-broken-Mediatek-gpufr.patch | 30 +++--- ...Support-optionally-ignoring-vibrator.patch | 35 ++++-- ...s-static-ImsManager.updateImsService.patch | 2 +- ...ic-void-TelephonyMetrics.writeRilSen.patch | 2 +- ...ng-too-long-to-fit-into-a-91-chars-p.patch | 6 +- ...oller-Do-not-override-default-calli.patch} | 8 +- ...ert-Block-Binder-thread-until-incom.patch} | 10 +- ...de-target_sdk_version-to-34-for-now.patch} | 6 +- ...va_sdk_library-dependencies-explicit.patch | 31 ++++++ ...e-themed-icon-setting-in-ThemePicker.patch | 2 +- .../0002-Disable-QSB-in-BuildConfig.patch | 2 +- ...ly-expose-GridCustomizationsProvider.patch | 2 +- .../0001-Global-VPN-feature-2-2.patch | 10 +- .../0002-Settings-Bring-in-the-new-icon.patch | 10 +- ...0001-Add-wallpaper-privapp-whitelist.patch | 2 +- ...02-Add-wallpaper-default-permissions.patch | 2 +- ...-we-read-and-write-launcher-settings.patch | 4 +- ...ssion-for-launcher-preview-rendering.patch | 4 +- ...tatus-UNSUPPORTED_REMOTE_OR_LMP_FEAT.patch | 32 ++++++ ...-hci-Ignore-unexpected-status-events.patch | 42 -------- ..._interface-Optionally-use-sysbta-HAL.patch | 100 +++++++++--------- ...ort-for-V-gsi-on-pixel-5-R-base-kern.patch | 2 +- ...t-Override-select-system-properties.patch} | 8 +- ...art-console-service-when-debuggable.patch} | 14 +-- 44 files changed, 347 insertions(+), 343 deletions(-) rename frameworks/av/{0006-Make-camera-IDs-filter-out-optional.patch => 0005-Make-camera-IDs-filter-out-optional.patch} (87%) rename frameworks/av/{0005-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch => 0006-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch} (95%) rename frameworks/base/{0008-Allow-signature-spoofing-for-microG-Companion-Servic.patch => 0007-Allow-signature-spoofing-for-microG-Companion-Servic.patch} (98%) delete mode 100644 frameworks/base/0007-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch rename frameworks/base/{0009-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch => 0008-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch} (89%) rename frameworks/base/{0011-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch => 0009-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch} (90%) create mode 100644 frameworks/base/0011-Add-support-for-treating-virtual-biometric-sensors-a.patch rename frameworks/opt/telephony/{0004-SubscriptionController-Do-not-override-default-calli.patch => 0003-SubscriptionController-Do-not-override-default-calli.patch} (92%) rename frameworks/opt/telephony/{0003-Conditionally-revert-Block-Binder-thread-until-incom.patch => 0004-Conditionally-revert-Block-Binder-thread-until-incom.patch} (90%) rename packages/apps/Dialer/{0001-DNM-Downgrade-target_sdk_version-to-34-for-now.patch => 0001-Downgrade-target_sdk_version-to-34-for-now.patch} (74%) create mode 100644 packages/apps/Dialer/0002-Make-java_sdk_library-dependencies-explicit.patch create mode 100644 packages/modules/Bluetooth/0001-Don-t-crash-on-status-UNSUPPORTED_REMOTE_OR_LMP_FEAT.patch delete mode 100644 packages/modules/Bluetooth/0001-gd-hci-Ignore-unexpected-status-events.patch rename system/core/{0002-init-Override-select-system-properties.patch => 0001-init-Override-select-system-properties.patch} (88%) rename system/core/{0001-init-Do-not-start-console-service-when-debuggable.patch => 0002-init-Do-not-start-console-service-when-debuggable.patch} (65%) diff --git a/bionic/0001-Add-new-mechanism-to-fake-vendor-props-on-a-per-proc.patch b/bionic/0001-Add-new-mechanism-to-fake-vendor-props-on-a-per-proc.patch index 9ad8c37..7c00f25 100644 --- a/bionic/0001-Add-new-mechanism-to-fake-vendor-props-on-a-per-proc.patch +++ b/bionic/0001-Add-new-mechanism-to-fake-vendor-props-on-a-per-proc.patch @@ -1,4 +1,4 @@ -From 7222eae1b450166edb709164eaa060d50df0284c Mon Sep 17 00:00:00 2001 +From e0e96a633b717830325cd6189fff23e57d7ee6f1 Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Sat, 19 Feb 2022 08:20:25 -0500 Subject: [PATCH] Add new mechanism to fake vendor props on a per-process basis diff --git a/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch b/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch index bef710e..990b7b1 100644 --- a/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch +++ b/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch @@ -1,4 +1,4 @@ -From 94398a2d4ce14c0eeb86eecc4d6982a083bc910f Mon Sep 17 00:00:00 2001 +From 30492f22b249f2bd73085341f231da81ed290cf5 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 24 Aug 2022 15:42:39 -0400 Subject: [PATCH 1/6] APM: Optionally force-load audio policy for system-side diff --git a/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch b/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch index ea1a73b..4aaaff7 100644 --- a/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch +++ b/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch @@ -1,4 +1,4 @@ -From 2715a3a91706ea31bdfc4d258b9f9020c8a3100e Mon Sep 17 00:00:00 2001 +From 710bea3b445304ca1201b8923cdc3bf824d6a10e Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 25 Aug 2022 13:30:29 -0400 Subject: [PATCH 2/6] APM: Remove A2DP audio ports from the primary HAL diff --git a/frameworks/av/0003-voip-Fix-high-pitched-voice-on-Qualcomm-devices.patch b/frameworks/av/0003-voip-Fix-high-pitched-voice-on-Qualcomm-devices.patch index 12ad63d..1588f95 100644 --- a/frameworks/av/0003-voip-Fix-high-pitched-voice-on-Qualcomm-devices.patch +++ b/frameworks/av/0003-voip-Fix-high-pitched-voice-on-Qualcomm-devices.patch @@ -1,4 +1,4 @@ -From 3bc99248d1862bc3688efe2cb005e1c086119601 Mon Sep 17 00:00:00 2001 +From d2fda04e8ad3ff0d3fda168fd41e493e9db54e7a Mon Sep 17 00:00:00 2001 From: ponces Date: Mon, 24 Oct 2022 09:38:34 +0100 Subject: [PATCH 3/6] voip: Fix high pitched voice on Qualcomm devices diff --git a/frameworks/av/0004-Fix-BT-in-call-on-CAF-devices.patch b/frameworks/av/0004-Fix-BT-in-call-on-CAF-devices.patch index 63d09c1..f3492e0 100644 --- a/frameworks/av/0004-Fix-BT-in-call-on-CAF-devices.patch +++ b/frameworks/av/0004-Fix-BT-in-call-on-CAF-devices.patch @@ -1,4 +1,4 @@ -From 5a7663def04a88a90b7edb10bf8a038eb545d48d Mon Sep 17 00:00:00 2001 +From 68b78f8122c2ba128a8314a8ea3e8a50afc4158b Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Mon, 5 Aug 2019 18:09:50 +0200 Subject: [PATCH 4/6] Fix BT in-call on CAF devices diff --git a/frameworks/av/0006-Make-camera-IDs-filter-out-optional.patch b/frameworks/av/0005-Make-camera-IDs-filter-out-optional.patch similarity index 87% rename from frameworks/av/0006-Make-camera-IDs-filter-out-optional.patch rename to frameworks/av/0005-Make-camera-IDs-filter-out-optional.patch index 32468a4..4a56203 100644 --- a/frameworks/av/0006-Make-camera-IDs-filter-out-optional.patch +++ b/frameworks/av/0005-Make-camera-IDs-filter-out-optional.patch @@ -1,7 +1,7 @@ -From b3945062957bae75cc2816b6f62ecea7e437ff8c Mon Sep 17 00:00:00 2001 +From a20df6bb1d38d2bb402c16fc64fcafd20464a757 Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Mon, 21 Dec 2020 20:19:11 +0100 -Subject: [PATCH 6/6] Make camera IDs filter-out optional +Subject: [PATCH 5/6] Make camera IDs filter-out optional Nowadays most people have Camera 2 apps, and would like to have all cameras, rather than limit which cameras are available. @@ -11,10 +11,10 @@ Add a property for that. 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/services/camera/libcameraservice/common/CameraProviderManager.cpp b/services/camera/libcameraservice/common/CameraProviderManager.cpp -index 6416c11b69..d17d0136d1 100644 +index 51f06cb013..4892d80cfa 100644 --- a/services/camera/libcameraservice/common/CameraProviderManager.cpp +++ b/services/camera/libcameraservice/common/CameraProviderManager.cpp -@@ -320,7 +320,9 @@ std::vector CameraProviderManager::getAPI1CompatibleCameraDeviceIds +@@ -318,7 +318,9 @@ std::vector CameraProviderManager::getAPI1CompatibleCameraDeviceIds // API1 app doesn't handle logical and physical camera devices well. So // for each camera facing, only take the first id advertised by HAL in // all [logical, physical1, physical2, ...] id combos, and filter out the rest. @@ -25,7 +25,7 @@ index 6416c11b69..d17d0136d1 100644 collectDeviceIdsLocked(providerDeviceIds, publicDeviceIds, systemDeviceIds); } auto sortFunc = -@@ -1108,10 +1110,12 @@ SystemCameraKind CameraProviderManager::ProviderInfo::DeviceInfo3::getSystemCame +@@ -1102,10 +1104,12 @@ SystemCameraKind CameraProviderManager::ProviderInfo::DeviceInfo3::getSystemCame // Go through the capabilities and check if it has // ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SYSTEM_CAMERA diff --git a/frameworks/av/0005-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch b/frameworks/av/0006-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch similarity index 95% rename from frameworks/av/0005-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch rename to frameworks/av/0006-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch index 30fe042..af01c1e 100644 --- a/frameworks/av/0005-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch +++ b/frameworks/av/0006-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch @@ -1,7 +1,7 @@ -From f19eebbe64e22c684b7e3a00f182f740a946f776 Mon Sep 17 00:00:00 2001 +From 5ce88c0c583ad228cb456d68543cebb5c23390a7 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 18 Aug 2022 15:44:46 -0400 -Subject: [PATCH 5/6] APM: Restore S, R and Q behavior respectively for +Subject: [PATCH 6/6] APM: Restore S, R and Q behavior respectively for telephony audio This conditionally reverts part of b2e5cb (T), 51c9cc (S) and afd4ce (R) @@ -33,13 +33,13 @@ Change-Id: I56d36d2aef4319935cb88a3e4771b23c6d5b2145 --- .../managerdefault/AudioPolicyManager.cpp | 206 ++++++++++++------ .../managerdefault/AudioPolicyManager.h | 3 + - 2 files changed, 147 insertions(+), 62 deletions(-) + 2 files changed, 148 insertions(+), 61 deletions(-) diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp -index 07073c7678..71af25c146 100644 +index 1f8cedd290..cfac4a2090 100644 --- a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp +++ b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp -@@ -719,6 +719,17 @@ status_t AudioPolicyManager::updateCallRoutingInternal( +@@ -726,6 +726,17 @@ status_t AudioPolicyManager::updateCallRoutingInternal( ALOGV("%s device rxDevice %s txDevice %s", __func__, rxDevices.itemAt(0)->toString().c_str(), txSourceDevice->toString().c_str()); @@ -57,7 +57,7 @@ index 07073c7678..71af25c146 100644 auto telephonyRxModule = mHwModules.getModuleForDeviceType(AUDIO_DEVICE_IN_TELEPHONY_RX, AUDIO_FORMAT_DEFAULT); auto telephonyTxModule = -@@ -741,9 +752,20 @@ status_t AudioPolicyManager::updateCallRoutingInternal( +@@ -748,9 +759,20 @@ status_t AudioPolicyManager::updateCallRoutingInternal( ALOGE("%s() no telephony Tx and/or RX device", __func__); return INVALID_OPERATION; } @@ -81,7 +81,7 @@ index 07073c7678..71af25c146 100644 } else { // If the RX device is on the primary HW module, then use legacy routing method for // voice calls via setOutputDevice() on primary output. -@@ -764,7 +786,14 @@ status_t AudioPolicyManager::updateCallRoutingInternal( +@@ -774,7 +796,14 @@ status_t AudioPolicyManager::updateCallRoutingInternal( } muteWaitMs = setOutputDevices(__func__, mPrimaryOutput, rxDevices, true, delayMs); } else { // create RX path audio patch @@ -97,21 +97,21 @@ index 07073c7678..71af25c146 100644 // 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 -@@ -779,7 +808,12 @@ status_t AudioPolicyManager::updateCallRoutingInternal( - closeActiveClients(activeDesc); +@@ -790,6 +819,13 @@ status_t AudioPolicyManager::updateCallRoutingInternal( } } -- connectTelephonyTxAudioSource(txSourceDevice, txSinkDevice, delayMs); + 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); + } + } else if (fix_call_audio_patch()) { + disconnectTelephonyAudioSource(mCallTxSourceClient); } - if (waitMs != nullptr) { - *waitMs = muteWaitMs; -@@ -787,6 +821,36 @@ status_t AudioPolicyManager::updateCallRoutingInternal( +@@ -799,6 +835,36 @@ status_t AudioPolicyManager::updateCallRoutingInternal( return NO_ERROR; } @@ -148,7 +148,7 @@ index 07073c7678..71af25c146 100644 bool AudioPolicyManager::isDeviceOfModule( const sp& devDesc, const char *moduleId) const { sp module = mHwModules.getModuleFromName(moduleId); -@@ -5353,83 +5417,101 @@ status_t AudioPolicyManager::createAudioPatchInternal(const struct audio_patch * +@@ -5513,83 +5579,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 outputDesc; @@ -308,10 +308,10 @@ index 07073c7678..71af25c146 100644 AUDIO_STREAM_PATCH; patchBuilder.addSource(srcMixPortConfig); diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.h b/services/audiopolicy/managerdefault/AudioPolicyManager.h -index 1b4f33a961..6e9c99b18b 100644 +index 84edf34da4..4b1093cb23 100644 --- a/services/audiopolicy/managerdefault/AudioPolicyManager.h +++ b/services/audiopolicy/managerdefault/AudioPolicyManager.h -@@ -1009,6 +1009,9 @@ protected: +@@ -1013,6 +1013,9 @@ protected: SoundTriggerSessionCollection mSoundTriggerSessions; diff --git a/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch b/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch index 37e3138..327c2ce 100644 --- a/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch +++ b/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch @@ -1,4 +1,4 @@ -From da111d2b6b6f8e1edf6872d0a8f379c2ed6b676c Mon Sep 17 00:00:00 2001 +From 2b9fc3684d24ff3276f18c4de93402cf7d92e5c3 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Tue, 12 Oct 2021 21:37:22 -0400 Subject: [PATCH 01/11] PackageParser: support glob matching for properties diff --git a/frameworks/base/0002-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch b/frameworks/base/0002-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch index 456a19b..55b62b7 100644 --- a/frameworks/base/0002-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch +++ b/frameworks/base/0002-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch @@ -1,4 +1,4 @@ -From 1ad3c8a609bdeadeb402036ead657f071bdf1878 Mon Sep 17 00:00:00 2001 +From 6de413c8d88d2d6f02e81a4247af47b506ea4451 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 2 Sep 2022 21:36:06 -0400 Subject: [PATCH 02/11] FrameworkParsingPackageUtils: Add glob matching support diff --git a/frameworks/base/0003-Global-VPN-feature-1-2.patch b/frameworks/base/0003-Global-VPN-feature-1-2.patch index bc11e17..d7f7bca 100644 --- a/frameworks/base/0003-Global-VPN-feature-1-2.patch +++ b/frameworks/base/0003-Global-VPN-feature-1-2.patch @@ -1,4 +1,4 @@ -From 270746ccbb9824725951f371a401534eea9e9798 Mon Sep 17 00:00:00 2001 +From a5c2cffdac5181c437437fee002526d43a080c51 Mon Sep 17 00:00:00 2001 From: Oliver Scott Date: Thu, 8 Jul 2021 10:41:43 -0400 Subject: [PATCH 03/11] Global VPN feature [1/2] @@ -28,10 +28,10 @@ Signed-off-by: Mohammad Hasan Keramat J 3 files changed, 46 insertions(+), 5 deletions(-) diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java -index 5c392ae6b..594b034f3 100644 +index ef8b3d738..b5014f24e 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java -@@ -17891,6 +17891,12 @@ public final class Settings { +@@ -18029,6 +18029,12 @@ public final class Settings { CLOCKWORK_HOME_READY, }; @@ -72,10 +72,10 @@ index f39762766..c7dc809c9 100644 mVpnUserId = newUserInfo.restrictedProfileParentId; } else { diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java -index 5905b7de5..f8fcde0a3 100644 +index e1bb8a1a0..cf89eb842 100644 --- a/services/core/java/com/android/server/connectivity/Vpn.java +++ b/services/core/java/com/android/server/connectivity/Vpn.java -@@ -774,6 +774,15 @@ public class Vpn { +@@ -778,6 +778,15 @@ public class Vpn { return mAlwaysOn; } @@ -91,7 +91,7 @@ index 5905b7de5..f8fcde0a3 100644 /** * Checks if a VPN app supports always-on mode. * -@@ -1716,6 +1725,7 @@ public class Vpn { +@@ -1720,6 +1729,7 @@ public class Vpn { try { // Restricted users are not allowed to create VPNs, they are tied to Owner enforceNotRestrictedUser(); @@ -99,7 +99,7 @@ index 5905b7de5..f8fcde0a3 100644 final PackageManager packageManager = mUserIdContext.getPackageManager(); if (packageManager == null) { -@@ -1866,7 +1876,7 @@ public class Vpn { +@@ -1870,7 +1880,7 @@ public class Vpn { addUserToRanges(ranges, userId, allowedApplications, disallowedApplications); // If the user can have restricted profiles, assign all its restricted profiles too @@ -108,7 +108,7 @@ index 5905b7de5..f8fcde0a3 100644 final long token = Binder.clearCallingIdentity(); List users; try { -@@ -1875,7 +1885,8 @@ public class Vpn { +@@ -1879,7 +1889,8 @@ public class Vpn { Binder.restoreCallingIdentity(token); } for (UserInfo user : users) { @@ -118,7 +118,7 @@ index 5905b7de5..f8fcde0a3 100644 addUserToRanges(ranges, user.id, allowedApplications, disallowedApplications); } } -@@ -1956,7 +1967,8 @@ public class Vpn { +@@ -1960,7 +1971,8 @@ public class Vpn { public void onUserAdded(int userId) { // If the user is restricted tie them to the parent user's VPN UserInfo user = mUserManager.getUserInfo(userId); @@ -128,7 +128,7 @@ index 5905b7de5..f8fcde0a3 100644 synchronized(Vpn.this) { final Set> existingRanges = mNetworkCapabilities.getUids(); if (existingRanges != null) { -@@ -1985,7 +1997,8 @@ public class Vpn { +@@ -1989,7 +2001,8 @@ public class Vpn { public void onUserRemoved(int userId) { // clean up if restricted UserInfo user = mUserManager.getUserInfo(userId); @@ -138,7 +138,7 @@ index 5905b7de5..f8fcde0a3 100644 synchronized(Vpn.this) { final Set> existingRanges = mNetworkCapabilities.getUids(); if (existingRanges != null) { -@@ -2410,6 +2423,17 @@ public class Vpn { +@@ -2414,6 +2427,17 @@ public class Vpn { } } @@ -156,7 +156,7 @@ index 5905b7de5..f8fcde0a3 100644 /** * Start legacy VPN, controlling native daemons as needed. Creates a * secondary thread to perform connection work, returning quickly. -@@ -2493,6 +2517,7 @@ public class Vpn { +@@ -2497,6 +2521,7 @@ public class Vpn { new UserHandle(mUserId))) { throw new SecurityException("Restricted users cannot establish VPNs"); } @@ -164,7 +164,7 @@ index 5905b7de5..f8fcde0a3 100644 // Load certificates. String privateKey = ""; -@@ -4027,6 +4052,7 @@ public class Vpn { +@@ -4039,6 +4064,7 @@ public class Vpn { verifyCallingUidAndPackage(packageName); enforceNotRestrictedUser(); @@ -172,7 +172,7 @@ index 5905b7de5..f8fcde0a3 100644 validateRequiredFeatures(profile); if (profile.isRestrictedToTestNetworks) { -@@ -4069,6 +4095,7 @@ public class Vpn { +@@ -4081,6 +4107,7 @@ public class Vpn { verifyCallingUidAndPackage(packageName); enforceNotRestrictedUser(); @@ -180,7 +180,7 @@ index 5905b7de5..f8fcde0a3 100644 final long token = Binder.clearCallingIdentity(); try { -@@ -4138,6 +4165,7 @@ public class Vpn { +@@ -4150,6 +4177,7 @@ public class Vpn { requireNonNull(packageName, "No package name provided"); enforceNotRestrictedUser(); @@ -188,7 +188,7 @@ index 5905b7de5..f8fcde0a3 100644 // Prepare VPN for startup if (!prepare(packageName, null /* newPackage */, VpnManager.TYPE_VPN_PLATFORM)) { -@@ -4260,6 +4288,7 @@ public class Vpn { +@@ -4272,6 +4300,7 @@ public class Vpn { requireNonNull(packageName, "No package name provided"); enforceNotRestrictedUser(); diff --git a/frameworks/base/0004-Dynamically-resize-boot-animation-to-match-screen-si.patch b/frameworks/base/0004-Dynamically-resize-boot-animation-to-match-screen-si.patch index 7d8c6f9..44ff688 100644 --- a/frameworks/base/0004-Dynamically-resize-boot-animation-to-match-screen-si.patch +++ b/frameworks/base/0004-Dynamically-resize-boot-animation-to-match-screen-si.patch @@ -1,4 +1,4 @@ -From ad942f3c0450d09d8e39f79af90354fecc9cd873 Mon Sep 17 00:00:00 2001 +From 1357225dd52f3f2a6a1766c33eca32506b8f7ac2 Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Mon, 20 Dec 2021 15:01:41 -0500 Subject: [PATCH 04/11] Dynamically resize boot animation to match screen size @@ -9,10 +9,10 @@ Change-Id: I54e49fc6b8c670103852e212d1416e27ff976205 1 file changed, 22 insertions(+) diff --git a/cmds/bootanimation/BootAnimation.cpp b/cmds/bootanimation/BootAnimation.cpp -index 7eb9d0f3e..d2611e25f 100644 +index c2f6e3072..7213f3058 100644 --- a/cmds/bootanimation/BootAnimation.cpp +++ b/cmds/bootanimation/BootAnimation.cpp -@@ -618,6 +618,28 @@ status_t BootAnimation::readyToRun() { +@@ -619,6 +619,28 @@ status_t BootAnimation::readyToRun() { mFlingerSurface = s; mTargetInset = -1; diff --git a/frameworks/base/0005-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch b/frameworks/base/0005-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch index 99b0afb..9f67fed 100644 --- a/frameworks/base/0005-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch +++ b/frameworks/base/0005-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch @@ -1,4 +1,4 @@ -From 9ac87d38461af8732ddb8c5d450e89f19fe26b44 Mon Sep 17 00:00:00 2001 +From f89ddfd215de9269559afdd6b23e4eca56da8eef Mon Sep 17 00:00:00 2001 From: Andy CrossGate Yan Date: Wed, 2 Aug 2023 20:59:53 +0800 Subject: [PATCH 05/11] Restore getSimStateForSlotIndex in SubscriptionManager @@ -11,10 +11,10 @@ Change-Id: I41bac57c68055f369232359a464642daab94403b 1 file changed, 14 insertions(+) diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java -index 76b4e0052..6650551d7 100644 +index 6faef7ecf..33e3b6a0d 100644 --- a/telephony/java/android/telephony/SubscriptionManager.java +++ b/telephony/java/android/telephony/SubscriptionManager.java -@@ -2879,6 +2879,20 @@ public class SubscriptionManager { +@@ -2916,6 +2916,20 @@ public class SubscriptionManager { return TelephonyManager.getDefault().isNetworkRoaming(subId); } diff --git a/frameworks/base/0006-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch b/frameworks/base/0006-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch index ecd57fa..c087b5c 100644 --- a/frameworks/base/0006-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch +++ b/frameworks/base/0006-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch @@ -1,4 +1,4 @@ -From 86e7d4b971af424acc24d1df1f8994b8d9853b2b Mon Sep 17 00:00:00 2001 +From 6ed2fcbdc5aaadd1bb29f8bfd80cf9200515acb0 Mon Sep 17 00:00:00 2001 From: Andy CrossGate Yan Date: Sat, 12 Aug 2023 20:11:17 +0800 Subject: [PATCH 06/11] Add runWithCleanCallingIdentity variant with both @@ -12,7 +12,7 @@ Change-Id: If444290787025e130dce4bdeaf92372ae32793fe 1 file changed, 30 insertions(+) diff --git a/telephony/common/com/android/internal/telephony/util/TelephonyUtils.java b/telephony/common/com/android/internal/telephony/util/TelephonyUtils.java -index f31a87f2b..3f29d4bae 100644 +index 422433891..3bbecf0f2 100644 --- a/telephony/common/com/android/internal/telephony/util/TelephonyUtils.java +++ b/telephony/common/com/android/internal/telephony/util/TelephonyUtils.java @@ -47,7 +47,9 @@ import com.android.internal.telephony.ITelephony; @@ -25,7 +25,7 @@ index f31a87f2b..3f29d4bae 100644 import java.util.concurrent.Executor; import java.util.concurrent.TimeUnit; import java.util.function.Supplier; -@@ -158,6 +160,34 @@ public final class TelephonyUtils { +@@ -159,6 +161,34 @@ public final class TelephonyUtils { } } diff --git a/frameworks/base/0008-Allow-signature-spoofing-for-microG-Companion-Servic.patch b/frameworks/base/0007-Allow-signature-spoofing-for-microG-Companion-Servic.patch similarity index 98% rename from frameworks/base/0008-Allow-signature-spoofing-for-microG-Companion-Servic.patch rename to frameworks/base/0007-Allow-signature-spoofing-for-microG-Companion-Servic.patch index 808f428..9cf9f0c 100644 --- a/frameworks/base/0008-Allow-signature-spoofing-for-microG-Companion-Servic.patch +++ b/frameworks/base/0007-Allow-signature-spoofing-for-microG-Companion-Servic.patch @@ -1,7 +1,7 @@ -From 2220bb2e3219a9c1f0f918254414281afe57a354 Mon Sep 17 00:00:00 2001 +From 33667f43e841a799a6e34c28fecfce5fb7f470ef Mon Sep 17 00:00:00 2001 From: LuK1337 Date: Mon, 19 Feb 2024 16:20:04 +0100 -Subject: [PATCH 08/11] Allow signature spoofing for microG Companion/Services +Subject: [PATCH 07/11] Allow signature spoofing for microG Companion/Services This patch enables signature spoofing when the following conditions are met: @@ -41,7 +41,7 @@ index cc4c2b5bf..57263da93 100644 || newPkg.isForceQueryable() || ArrayUtils.contains(mForceQueryableByDevicePackageNames, diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java -index ee0159d72..1a63f2606 100644 +index 4665a72b0..ff736f3d0 100644 --- a/services/core/java/com/android/server/pm/ComputerEngine.java +++ b/services/core/java/com/android/server/pm/ComputerEngine.java @@ -102,6 +102,7 @@ import android.content.pm.UserPackage; diff --git a/frameworks/base/0007-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch b/frameworks/base/0007-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch deleted file mode 100644 index 186d9b7..0000000 --- a/frameworks/base/0007-Revert-Convert-BubbleDataRepositoryTest-to-use-mocki.patch +++ /dev/null @@ -1,75 +0,0 @@ -From c9b319d242965e38cb0ca0fa4850af126c15d487 Mon Sep 17 00:00:00 2001 -From: Peter Cai -Date: Sat, 9 Dec 2023 18:37:08 -0500 -Subject: [PATCH 07/11] Revert "Convert BubbleDataRepositoryTest to use - mockito-kotlin" - -This reverts commit 625a23ff22f0a9327b9a24341dfa0b8fbaf61a1b. ---- - .../Shell/tests/unittest/Android.bp | 1 - - .../shell/bubbles/BubbleDataRepositoryTest.kt | 17 ++++++++++------- - 2 files changed, 10 insertions(+), 8 deletions(-) - -diff --git a/libs/WindowManager/Shell/tests/unittest/Android.bp b/libs/WindowManager/Shell/tests/unittest/Android.bp -index 13f95ccea..850fc50c4 100644 ---- a/libs/WindowManager/Shell/tests/unittest/Android.bp -+++ b/libs/WindowManager/Shell/tests/unittest/Android.bp -@@ -48,7 +48,6 @@ android_test { - "frameworks-base-testutils", - "kotlinx-coroutines-android", - "kotlinx-coroutines-core", -- "mockito-kotlin2", - "mockito-target-extended-minus-junit4", - "truth", - "testables", -diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleDataRepositoryTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleDataRepositoryTest.kt -index e35995775..0e05e01a8 100644 ---- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleDataRepositoryTest.kt -+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleDataRepositoryTest.kt -@@ -29,11 +29,11 @@ import com.google.common.truth.Truth.assertThat - import org.junit.After - import org.junit.Before - import org.junit.Test --import org.mockito.kotlin.any --import org.mockito.kotlin.mock --import org.mockito.kotlin.never --import org.mockito.kotlin.spy --import org.mockito.kotlin.verify -+import org.mockito.Mockito -+import org.mockito.Mockito.mock -+import org.mockito.Mockito.never -+import org.mockito.Mockito.spy -+import org.mockito.Mockito.verify - - class BubbleDataRepositoryTest : ShellTestCase() { - -@@ -124,7 +124,7 @@ class BubbleDataRepositoryTest : ShellTestCase() { - - private val testHandler = Handler(Looper.getMainLooper()) - private val mainExecutor = HandlerExecutor(testHandler) -- private val launcherApps = mock() -+ private val launcherApps = mock(LauncherApps::class.java) - - private val persistedBubbles = SparseArray>() - -@@ -158,7 +158,8 @@ class BubbleDataRepositoryTest : ShellTestCase() { - assertThat(persistedBubbles).isEqualTo(validEntitiesByUser) - - // No invalid users, so no persist to disk happened -- verify(dataRepository, never()).persistToDisk(any()) -+ verify(dataRepository, never()).persistToDisk( -+ any(SparseArray>()::class.java)) - } - - @Test -@@ -198,4 +199,6 @@ class BubbleDataRepositoryTest : ShellTestCase() { - // Verify that persist to disk happened with the new valid entities list. - verify(dataRepository).persistToDisk(validEntitiesByUser) - } -+ -+ fun any(type: Class): T = Mockito.any(type) - } -\ No newline at end of file --- -2.44.0 - diff --git a/frameworks/base/0009-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch b/frameworks/base/0008-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch similarity index 89% rename from frameworks/base/0009-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch rename to frameworks/base/0008-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch index 0db1276..a06acd7 100644 --- a/frameworks/base/0009-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch +++ b/frameworks/base/0008-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch @@ -1,7 +1,7 @@ -From 49443a9f7beb8c1e736c2618aed8ccd8e11d67cc Mon Sep 17 00:00:00 2001 +From ad608b13f93f9532e4f7abcaabc6a3f735ad87ba Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sun, 22 Sep 2024 22:53:01 -0400 -Subject: [PATCH 09/11] AuthService: HIDL and AIDL fingerprint services are +Subject: [PATCH 08/11] AuthService: HIDL and AIDL fingerprint services are mutually exclusive ...and make sure that we prioritize AIDL over HIDL. This is essential @@ -14,10 +14,10 @@ Change-Id: I834297a44674820d813d8f6d376dfd294f084f3b 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/services/core/java/com/android/server/biometrics/AuthService.java b/services/core/java/com/android/server/biometrics/AuthService.java -index 2a1687209..e2ac79a34 100644 +index 2d802b21c..0730d634f 100644 --- a/services/core/java/com/android/server/biometrics/AuthService.java +++ b/services/core/java/com/android/server/biometrics/AuthService.java -@@ -890,15 +890,13 @@ public class AuthService extends SystemService { +@@ -908,15 +908,13 @@ public class AuthService extends SystemService { handlerProvider.getFingerprintHandler().post(() -> { final FingerprintSensorConfigurations mFingerprintSensorConfigurations = diff --git a/frameworks/base/0011-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch b/frameworks/base/0009-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch similarity index 90% rename from frameworks/base/0011-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch rename to frameworks/base/0009-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch index 94597ae..496282a 100644 --- a/frameworks/base/0011-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch +++ b/frameworks/base/0009-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch @@ -1,7 +1,7 @@ -From 22a165579df84085b3e18608264c616159b21bfe Mon Sep 17 00:00:00 2001 +From 35527df5e9e87a4af86d51e3290e7679f5a5f4cc Mon Sep 17 00:00:00 2001 From: dhacker29 Date: Tue, 24 Nov 2015 01:53:47 -0500 -Subject: [PATCH 11/11] fw/b: Use ro.build.version.incremental to signal OTA +Subject: [PATCH 09/11] fw/b: Use ro.build.version.incremental to signal OTA upgrades Co-authored-by: maxwen @@ -54,10 +54,10 @@ index ff80e614b..da3b68ecf 100644 } diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetXmlUtil.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetXmlUtil.java -index d781cd8d5..c1b2c5824 100644 +index ce9130ad5..737ecae1c 100644 --- a/services/appwidget/java/com/android/server/appwidget/AppWidgetXmlUtil.java +++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetXmlUtil.java -@@ -100,7 +100,7 @@ public class AppWidgetXmlUtil { +@@ -117,7 +117,7 @@ public class AppWidgetXmlUtil { out.attributeInt(null, ATTR_WIDGET_FEATURES, info.widgetFeatures); out.attributeInt(null, ATTR_DESCRIPTION_RES, info.descriptionRes); out.attributeBoolean(null, ATTR_PROVIDER_INHERITANCE, info.isExtendedFromAppWidgetProvider); @@ -66,7 +66,7 @@ index d781cd8d5..c1b2c5824 100644 } /** -@@ -111,7 +111,7 @@ public class AppWidgetXmlUtil { +@@ -128,7 +128,7 @@ public class AppWidgetXmlUtil { @NonNull final TypedXmlPullParser parser) { Objects.requireNonNull(parser); final String fingerprint = parser.getAttributeValue(null, ATTR_OS_FINGERPRINT); @@ -76,10 +76,10 @@ index d781cd8d5..c1b2c5824 100644 } final AppWidgetProviderInfo info = new AppWidgetProviderInfo(); diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java -index c0b8034b9..dd7d5cea8 100644 +index 611e0d862..0e343e18a 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java -@@ -2229,7 +2229,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService +@@ -2239,7 +2239,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService if (mIsUpgrade) { PackageManagerServiceUtils.logCriticalInfo(Log.INFO, "Upgrading from " + ver.fingerprint + " (" + ver.buildFingerprint + ") to " @@ -89,7 +89,7 @@ index c0b8034b9..dd7d5cea8 100644 } mPriorSdkVersion = mIsUpgrade ? ver.sdkVersion : -1; mInitAppsHelper = new InitAppsHelper(this, mApexManager, mInstallPackageHelper, -@@ -2387,7 +2388,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService +@@ -2397,7 +2398,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService | Installer.FLAG_CLEAR_APP_DATA_KEEP_ART_PROFILES); } } @@ -99,10 +99,10 @@ index c0b8034b9..dd7d5cea8 100644 } diff --git a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java -index ff8abf879..0babd99a5 100644 +index 975758241..54527a6b0 100644 --- a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java +++ b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java -@@ -1399,8 +1399,6 @@ public class PackageManagerServiceUtils { +@@ -1400,8 +1400,6 @@ public class PackageManagerServiceUtils { // that starts with "eng." to signify that this is an engineering build and not // destined for release. if (isUserDebugBuild && incrementalVersion.startsWith("eng.")) { @@ -111,7 +111,7 @@ index ff8abf879..0babd99a5 100644 // Heuristic: If the /system directory has been modified recently due to an "adb sync" // or a regular make, then blow away the cache. Note that mtimes are *NOT* reliable // in general and should not be used for production changes. In this specific case, -@@ -1408,6 +1406,7 @@ public class PackageManagerServiceUtils { +@@ -1409,6 +1407,7 @@ public class PackageManagerServiceUtils { File frameworkDir = new File(Environment.getRootDirectory(), "framework"); if (cacheDir.lastModified() < frameworkDir.lastModified()) { @@ -120,10 +120,10 @@ index ff8abf879..0babd99a5 100644 cacheDir = FileUtils.createDir(cacheBaseDir, cacheName); } diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java -index 39565526f..d410f237f 100644 +index 1f672a093..bef67a838 100644 --- a/services/core/java/com/android/server/pm/Settings.java +++ b/services/core/java/com/android/server/pm/Settings.java -@@ -484,7 +484,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile +@@ -485,7 +485,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile public void forceCurrent() { sdkVersion = Build.VERSION.SDK_INT; databaseVersion = CURRENT_DATABASE_VERSION; @@ -133,10 +133,10 @@ index 39565526f..d410f237f 100644 } } diff --git a/services/core/java/com/android/server/pm/ShortcutService.java b/services/core/java/com/android/server/pm/ShortcutService.java -index 1cd77ffce..b918cfa56 100644 +index 5518bfae8..e26eec659 100644 --- a/services/core/java/com/android/server/pm/ShortcutService.java +++ b/services/core/java/com/android/server/pm/ShortcutService.java -@@ -5248,7 +5248,7 @@ public class ShortcutService extends IShortcutService.Stub { +@@ -5259,7 +5259,7 @@ public class ShortcutService extends IShortcutService.Stub { // Injection point. String injectBuildFingerprint() { diff --git a/frameworks/base/0010-WebView-Add-check-before-setting-default-or-fallback.patch b/frameworks/base/0010-WebView-Add-check-before-setting-default-or-fallback.patch index b29ed3a..72d2b19 100644 --- a/frameworks/base/0010-WebView-Add-check-before-setting-default-or-fallback.patch +++ b/frameworks/base/0010-WebView-Add-check-before-setting-default-or-fallback.patch @@ -1,4 +1,4 @@ -From d312502517ffed128d9872d6521d041da457e97b Mon Sep 17 00:00:00 2001 +From fb0c9ab82954cf41bb985957d3eddfd190ca2ca5 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Sat, 21 Sep 2024 13:44:09 +0530 Subject: [PATCH 10/11] WebView: Add check before setting default or fallback @@ -6,12 +6,12 @@ Subject: [PATCH 10/11] WebView: Add check before setting default or fallback Signed-off-by: Pranav Vashi --- - .../webkit/WebViewUpdateServiceImpl.java | 14 ++++++- - .../webkit/WebViewUpdateServiceImpl2.java | 40 ++++++++++++++----- - 2 files changed, 42 insertions(+), 12 deletions(-) + .../webkit/WebViewUpdateServiceImpl.java | 14 ++++++-- + .../webkit/WebViewUpdateServiceImpl2.java | 34 ++++++++++++++----- + 2 files changed, 38 insertions(+), 10 deletions(-) diff --git a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java -index dcf20f97e..113bd4a54 100644 +index b9be4a2de..e98196f9f 100644 --- a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java +++ b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java @@ -15,6 +15,7 @@ @@ -20,9 +20,9 @@ index dcf20f97e..113bd4a54 100644 +import android.app.AppGlobals; import android.annotation.Nullable; - import android.content.Context; import android.content.pm.PackageInfo; -@@ -401,7 +402,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { + import android.content.pm.PackageManager.NameNotFoundException; +@@ -396,7 +397,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { @Override public WebViewProviderInfo getDefaultWebViewPackage() { for (WebViewProviderInfo provider : getWebViewPackages()) { @@ -31,7 +31,7 @@ index dcf20f97e..113bd4a54 100644 return provider; } } -@@ -411,6 +412,15 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { +@@ -406,6 +407,15 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { throw new AndroidRuntimeException("No available by default WebView Provider."); } @@ -47,7 +47,7 @@ index dcf20f97e..113bd4a54 100644 private static class ProviderAndPackageInfo { public final WebViewProviderInfo provider; public final PackageInfo packageInfo; -@@ -649,7 +659,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { +@@ -644,7 +654,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { */ private static WebViewProviderInfo getFallbackProvider(WebViewProviderInfo[] webviewPackages) { for (WebViewProviderInfo provider : webviewPackages) { @@ -57,7 +57,7 @@ index dcf20f97e..113bd4a54 100644 } } diff --git a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java -index 993597eed..b11b596d3 100644 +index 307c15b72..26d1195dc 100644 --- a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java +++ b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java @@ -15,6 +15,7 @@ @@ -66,9 +66,9 @@ index 993597eed..b11b596d3 100644 +import android.app.AppGlobals; import android.annotation.Nullable; - import android.content.Context; import android.content.pm.PackageInfo; -@@ -115,7 +116,7 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { + import android.content.pm.PackageManager.NameNotFoundException; +@@ -112,7 +113,7 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { WebViewProviderInfo defaultProvider = null; for (WebViewProviderInfo provider : webviewProviders) { @@ -77,7 +77,7 @@ index 993597eed..b11b596d3 100644 defaultProvider = provider; break; } -@@ -185,6 +186,15 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { +@@ -182,6 +183,15 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { } } @@ -93,7 +93,7 @@ index 993597eed..b11b596d3 100644 private boolean shouldTriggerRepairLocked() { if (mAttemptedToRepairBefore) { return false; -@@ -212,14 +222,24 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { +@@ -208,12 +218,20 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { } mAttemptedToRepairBefore = true; } @@ -101,32 +101,26 @@ index 993597eed..b11b596d3 100644 - TAG, - "No provider available for all users, trying to install and enable " - + mDefaultProvider.packageName); -- mSystemInterface.installExistingPackageForAllUsers( -- mContext, mDefaultProvider.packageName); -- mSystemInterface.enablePackageForAllUsers( -- mContext, mDefaultProvider.packageName, true); +- mSystemInterface.installExistingPackageForAllUsers(mDefaultProvider.packageName); +- mSystemInterface.enablePackageForAllUsers(mDefaultProvider.packageName, true); + + WebViewProviderInfo[] webviewProviders = mSystemInterface.getWebViewPackages(); + WebViewProviderInfo fallbackProvider = getFallbackProvider(webviewProviders); + if (fallbackProvider != null) { + Slog.w(TAG, "No valid provider, trying to install and enable " + + fallbackProvider.packageName); -+ mSystemInterface.installExistingPackageForAllUsers( -+ mContext, fallbackProvider.packageName); -+ mSystemInterface.enablePackageForAllUsers( -+ mContext, fallbackProvider.packageName, true); ++ mSystemInterface.installExistingPackageForAllUsers(fallbackProvider.packageName); ++ mSystemInterface.enablePackageForAllUsers(fallbackProvider.packageName, true); + } else { + Slog.w(TAG, "No provider available for all users, trying to install and enable " + + mDefaultProvider.packageName); -+ mSystemInterface.installExistingPackageForAllUsers( -+ mContext, mDefaultProvider.packageName); -+ mSystemInterface.enablePackageForAllUsers( -+ mContext, mDefaultProvider.packageName, true); ++ mSystemInterface.installExistingPackageForAllUsers(mDefaultProvider.packageName); ++ mSystemInterface.enablePackageForAllUsers(mDefaultProvider.packageName, true); + } } @Override -@@ -709,7 +729,7 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { +@@ -701,7 +719,7 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { */ private static WebViewProviderInfo getFallbackProvider(WebViewProviderInfo[] webviewPackages) { for (WebViewProviderInfo provider : webviewPackages) { diff --git a/frameworks/base/0011-Add-support-for-treating-virtual-biometric-sensors-a.patch b/frameworks/base/0011-Add-support-for-treating-virtual-biometric-sensors-a.patch new file mode 100644 index 0000000..fe53e4d --- /dev/null +++ b/frameworks/base/0011-Add-support-for-treating-virtual-biometric-sensors-a.patch @@ -0,0 +1,49 @@ +From a6a02e1099bee7d8749525e5fc092527fd2b1818 Mon Sep 17 00:00:00 2001 +From: Peter Cai +Date: Sat, 21 Dec 2024 11:04:35 -0500 +Subject: [PATCH 11/11] Add support for treating virtual biometric sensors as + real ones + +This happens on Unihertz Jelly Max. They forgot to change their sensor +instance name from "virtual" to something else. + +Change-Id: I106d41cd078e6b1e354c72ec35fa240a44397c5e +--- + .../fingerprint/FingerprintSensorConfigurations.java | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/core/java/android/hardware/fingerprint/FingerprintSensorConfigurations.java b/core/java/android/hardware/fingerprint/FingerprintSensorConfigurations.java +index 48c5887d8..bec56d9a6 100644 +--- a/core/java/android/hardware/fingerprint/FingerprintSensorConfigurations.java ++++ b/core/java/android/hardware/fingerprint/FingerprintSensorConfigurations.java +@@ -29,6 +29,7 @@ import android.os.Parcel; + import android.os.Parcelable; + import android.os.RemoteException; + import android.os.ServiceManager; ++import android.os.SystemProperties; + import android.util.Log; + import android.util.Slog; + +@@ -172,6 +173,10 @@ public class FingerprintSensorConfigurations implements Parcelable { + * @return real fqName + */ + public static String remapFqName(String fqName) { ++ if (SystemProperties.getBoolean("persist.sys.phh.virtual_sensors_are_real", false)) { ++ return fqName; ++ } ++ + if (!fqName.contains(IFingerprint.DESCRIPTOR + "/virtual")) { + return fqName; //no remap needed for real hardware HAL + } else { +@@ -185,7 +190,7 @@ public class FingerprintSensorConfigurations implements Parcelable { + * @return aidl interface + */ + public static IFingerprint getIFingerprint(String fqName) { +- if (fqName.contains("virtual")) { ++ if (fqName.contains("virtual") && !SystemProperties.getBoolean("persist.sys.phh.virtual_sensors_are_real", false)) { + String fqNameMapped = remapFqName(fqName); + Slog.i(TAG, "getIFingerprint fqName is mapped: " + fqName + "->" + fqNameMapped); + try { +-- +2.44.0 + diff --git a/frameworks/native/0001-sensorservice-Add-support-for-ignoring-broken-sensor.patch b/frameworks/native/0001-sensorservice-Add-support-for-ignoring-broken-sensor.patch index 00f755a..930e02b 100644 --- a/frameworks/native/0001-sensorservice-Add-support-for-ignoring-broken-sensor.patch +++ b/frameworks/native/0001-sensorservice-Add-support-for-ignoring-broken-sensor.patch @@ -1,4 +1,4 @@ -From e84296f15137b076bf2504481cba80956eb793ae Mon Sep 17 00:00:00 2001 +From ccd46a8a09baedf0fcad9648d75ac29468055a8f Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sun, 6 Oct 2024 09:06:48 -0400 Subject: [PATCH 1/3] sensorservice: Add support for ignoring broken sensors diff --git a/frameworks/native/0002-Add-MTK-GED-KPI-support-to-fix-broken-Mediatek-gpufr.patch b/frameworks/native/0002-Add-MTK-GED-KPI-support-to-fix-broken-Mediatek-gpufr.patch index e4fa388..3ff5f65 100644 --- a/frameworks/native/0002-Add-MTK-GED-KPI-support-to-fix-broken-Mediatek-gpufr.patch +++ b/frameworks/native/0002-Add-MTK-GED-KPI-support-to-fix-broken-Mediatek-gpufr.patch @@ -1,4 +1,4 @@ -From c84b2a4ea735ac9d399ca8b15ef7382f80929e22 Mon Sep 17 00:00:00 2001 +From 8dd1136bfd5a9dc403dc24839de2cbd1fe5cd273 Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Sat, 25 Nov 2023 08:15:28 -0500 Subject: [PATCH 2/3] Add MTK GED KPI support to fix broken Mediatek gpufreq @@ -16,16 +16,18 @@ than just standard DVFS. Thanks @sarthakroy2002 for the help and support (other people helped as well) + +Change-Id: Ic29a231ea8651efd598083611197aaa9e3c1fbbe --- libs/gui/Surface.cpp | 202 +++++++++++++++++++++++++++++++++ libs/gui/include/gui/Surface.h | 3 + 2 files changed, 205 insertions(+) diff --git a/libs/gui/Surface.cpp b/libs/gui/Surface.cpp -index 87fd448..8896973 100644 +index 66e7ddd..32070fa 100644 --- a/libs/gui/Surface.cpp +++ b/libs/gui/Surface.cpp -@@ -24,6 +24,9 @@ +@@ -26,6 +26,9 @@ #include #include #include @@ -81,9 +83,9 @@ index 87fd448..8896973 100644 +static int doMtkGedKpi = -1; +static int ged_fd = -1; - Surface::Surface(const sp& bufferProducer, bool controlledByApp, - const sp& surfaceControlHandle) -@@ -128,6 +165,47 @@ Surface::Surface(const sp& bufferProducer, bool controll + #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_PLATFORM_API_IMPROVEMENTS) + Surface::ProducerDeathListenerProxy::ProducerDeathListenerProxy(wp surfaceListener) +@@ -147,6 +184,47 @@ Surface::Surface(const sp& bufferProducer, bool controll mSwapIntervalZero = false; mMaxBufferCount = NUM_BUFFER_SLOTS; mSurfaceControlHandle = surfaceControlHandle; @@ -131,7 +133,7 @@ index 87fd448..8896973 100644 } Surface::~Surface() { -@@ -668,6 +746,36 @@ int Surface::dequeueBuffer(android_native_buffer_t** buffer, int* fenceFd) { +@@ -699,6 +777,36 @@ int Surface::dequeueBuffer(android_native_buffer_t** buffer, int* fenceFd) { } } @@ -168,7 +170,7 @@ index 87fd448..8896973 100644 if (fence->isValid()) { *fenceFd = fence->dup(); if (*fenceFd == -1) { -@@ -1111,6 +1219,60 @@ void Surface::onBufferQueuedLocked(int slot, sp fence, +@@ -1187,6 +1295,60 @@ void Surface::onBufferQueuedLocked(int slot, sp fence, } mQueueBufferCondition.broadcast(); @@ -229,16 +231,16 @@ index 87fd448..8896973 100644 if (CC_UNLIKELY(atrace_is_tag_enabled(ATRACE_TAG_GRAPHICS))) { static gui::FenceMonitor gpuCompletionThread("GPU completion"); -@@ -1899,6 +2061,46 @@ int Surface::connect( - - mConsumerRunningBehind = (output.numPendingBuffers >= 2); +@@ -2111,6 +2273,46 @@ int Surface::connect(int api, const sp& listener, bool reportBu + } + #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_PLATFORM_API_IMPROVEMENTS) } + + // For MTK GED KPI, we need to grab the Surface owner's PID + // and also know whether that owner is surfaceflinger + if (api == NATIVE_WINDOW_API_EGL && ged_fd >= 0) { + IPCThreadState *ipc = IPCThreadState::selfOrNull(); -+ const sp& token = listener->asBinder(listener); ++ const sp& token = IInterface::asBinder(mGraphicBufferProducer); + mPid = (token != NULL && NULL != token->localBinder()) + ? getpid() + : (ipc != nullptr)?ipc->getCallingPid():-1; @@ -277,10 +279,10 @@ index 87fd448..8896973 100644 mConnectedToCpu = true; // Clear the dirty region in case we're switching from a non-CPU API diff --git a/libs/gui/include/gui/Surface.h b/libs/gui/include/gui/Surface.h -index bdcaaf2..7cb27fc 100644 +index 14a3513..e0843a8 100644 --- a/libs/gui/include/gui/Surface.h +++ b/libs/gui/include/gui/Surface.h -@@ -649,6 +649,9 @@ protected: +@@ -742,6 +742,9 @@ protected: // Buffers that are successfully dequeued/attached and handed to clients std::unordered_set mDequeuedSlots; diff --git a/frameworks/native/0003-vibratorservice-Support-optionally-ignoring-vibrator.patch b/frameworks/native/0003-vibratorservice-Support-optionally-ignoring-vibrator.patch index ce17570..884ad94 100644 --- a/frameworks/native/0003-vibratorservice-Support-optionally-ignoring-vibrator.patch +++ b/frameworks/native/0003-vibratorservice-Support-optionally-ignoring-vibrator.patch @@ -1,4 +1,4 @@ -From 2c6a28725081d52b506ffa2d5dc0d9d2df6e095f Mon Sep 17 00:00:00 2001 +From 399022e4c7686d24d6738ad6a1c939998c6ac801 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Mon, 7 Oct 2024 22:07:58 -0400 Subject: [PATCH 3/3] vibratorservice: Support optionally ignoring vibrator @@ -8,24 +8,37 @@ On Unihertz Jelly Max the preloaded vibrator HAL is utterly broken. Change-Id: I308190a225932fba2a4aa1c830c03ab874d8032e --- + services/vibratorservice/Android.bp | 1 + .../vibratorservice/VibratorHalWrapper.cpp | 31 +++++++++++++++++++ - 1 file changed, 31 insertions(+) + 2 files changed, 32 insertions(+) +diff --git a/services/vibratorservice/Android.bp b/services/vibratorservice/Android.bp +index 4735ae5..6263b05 100644 +--- a/services/vibratorservice/Android.bp ++++ b/services/vibratorservice/Android.bp +@@ -41,6 +41,7 @@ cc_library_shared { + }, + + shared_libs: [ ++ "libbase", + "libbinder_ndk", + "libhidlbase", + "liblog", diff --git a/services/vibratorservice/VibratorHalWrapper.cpp b/services/vibratorservice/VibratorHalWrapper.cpp -index f10ba44..fd59517 100644 +index 4ac1618..ab027bd 100644 --- a/services/vibratorservice/VibratorHalWrapper.cpp +++ b/services/vibratorservice/VibratorHalWrapper.cpp -@@ -16,6 +16,7 @@ - +@@ -17,6 +17,7 @@ #define LOG_TAG "VibratorHalWrapper" + #include +#include #include - #include #include -@@ -41,6 +42,22 @@ namespace V1_2 = android::hardware::vibrator::V1_2; + #include +@@ -44,6 +45,22 @@ namespace V1_2 = android::hardware::vibrator::V1_2; namespace V1_3 = android::hardware::vibrator::V1_3; - namespace Aidl = android::hardware::vibrator; + namespace Aidl = aidl::android::hardware::vibrator; +const Effect EFFECT_WITH_FALLBACK[] = { + Effect::CLICK, @@ -46,7 +59,7 @@ index f10ba44..fd59517 100644 namespace android { namespace vibrator { -@@ -60,8 +77,18 @@ Info HalWrapper::getInfo() { +@@ -63,8 +80,18 @@ Info HalWrapper::getInfo() { getCapabilities(); getPrimitiveDurations(); std::lock_guard lock(mInfoMutex); @@ -65,7 +78,7 @@ index f10ba44..fd59517 100644 } if (mInfoCache.mSupportedBraking.isFailed()) { mInfoCache.mSupportedBraking = getSupportedBrakingInternal(); -@@ -252,6 +279,8 @@ HalResult AidlHalWrapper::alwaysOnDisable(int32_t id) { +@@ -295,6 +322,8 @@ HalResult AidlHalWrapper::alwaysOnDisable(int32_t id) { HalResult AidlHalWrapper::performEffect( Effect effect, EffectStrength strength, const std::function& completionCallback) { @@ -74,7 +87,7 @@ index f10ba44..fd59517 100644 HalResult capabilities = getCapabilities(); bool supportsCallback = capabilities.isOk() && static_cast(capabilities.value() & Capabilities::PERFORM_CALLBACK); -@@ -488,6 +517,8 @@ template +@@ -563,6 +592,8 @@ template HalResult HidlHalWrapper::performInternal( perform_fn performFn, sp handle, T effect, EffectStrength strength, const std::function& completionCallback) { diff --git a/frameworks/opt/net/ims/0001-Pie-MTK-IMS-calls-static-ImsManager.updateImsService.patch b/frameworks/opt/net/ims/0001-Pie-MTK-IMS-calls-static-ImsManager.updateImsService.patch index 9fffba3..b07e4d1 100644 --- a/frameworks/opt/net/ims/0001-Pie-MTK-IMS-calls-static-ImsManager.updateImsService.patch +++ b/frameworks/opt/net/ims/0001-Pie-MTK-IMS-calls-static-ImsManager.updateImsService.patch @@ -1,4 +1,4 @@ -From c776ae5c5e002aa824137df6b367b5873cb23fcf Mon Sep 17 00:00:00 2001 +From 7fc0423bce6be78bf802dcd16e9c3cb2b417c19b Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Sun, 14 Nov 2021 13:47:29 -0500 Subject: [PATCH] Pie MTK IMS calls static diff --git a/frameworks/opt/telephony/0001-Reintroduce-public-void-TelephonyMetrics.writeRilSen.patch b/frameworks/opt/telephony/0001-Reintroduce-public-void-TelephonyMetrics.writeRilSen.patch index 2c9d0e9..5b9bae9 100644 --- a/frameworks/opt/telephony/0001-Reintroduce-public-void-TelephonyMetrics.writeRilSen.patch +++ b/frameworks/opt/telephony/0001-Reintroduce-public-void-TelephonyMetrics.writeRilSen.patch @@ -1,4 +1,4 @@ -From 5c72e94d6d8822bae2a5dbfaaf47f4631bade8ae Mon Sep 17 00:00:00 2001 +From b172f8039cd27e782a964dc905de2efc6f4d84e4 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 1/4] Reintroduce 'public void diff --git a/frameworks/opt/telephony/0002-Fix-baseband-being-too-long-to-fit-into-a-91-chars-p.patch b/frameworks/opt/telephony/0002-Fix-baseband-being-too-long-to-fit-into-a-91-chars-p.patch index 0bb1e27..804d268 100644 --- a/frameworks/opt/telephony/0002-Fix-baseband-being-too-long-to-fit-into-a-91-chars-p.patch +++ b/frameworks/opt/telephony/0002-Fix-baseband-being-too-long-to-fit-into-a-91-chars-p.patch @@ -1,4 +1,4 @@ -From 2d369615a75bee5933d927874d25e8e758a52f2d Mon Sep 17 00:00:00 2001 +From 7dde5cf40fdf6c8c1d968d8baa9af7cc105e3201 Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Mon, 6 Dec 2021 16:28:22 -0500 Subject: [PATCH 2/4] Fix baseband being too long to fit into a 91 chars @@ -10,10 +10,10 @@ Change-Id: I1762e4a8cc137626be89f350229d6be162bdaf57 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java/com/android/internal/telephony/GsmCdmaPhone.java b/src/java/com/android/internal/telephony/GsmCdmaPhone.java -index 93a0c2f..2cabeb6 100644 +index 5d59327..b5f6509 100644 --- a/src/java/com/android/internal/telephony/GsmCdmaPhone.java +++ b/src/java/com/android/internal/telephony/GsmCdmaPhone.java -@@ -3444,7 +3444,7 @@ public class GsmCdmaPhone extends Phone { +@@ -3448,7 +3448,7 @@ public class GsmCdmaPhone extends Phone { String version = (String)ar.result; if (version != null) { int length = version.length(); diff --git a/frameworks/opt/telephony/0004-SubscriptionController-Do-not-override-default-calli.patch b/frameworks/opt/telephony/0003-SubscriptionController-Do-not-override-default-calli.patch similarity index 92% rename from frameworks/opt/telephony/0004-SubscriptionController-Do-not-override-default-calli.patch rename to frameworks/opt/telephony/0003-SubscriptionController-Do-not-override-default-calli.patch index ca1d37a..00655b6 100644 --- a/frameworks/opt/telephony/0004-SubscriptionController-Do-not-override-default-calli.patch +++ b/frameworks/opt/telephony/0003-SubscriptionController-Do-not-override-default-calli.patch @@ -1,7 +1,7 @@ -From d23d744b546bc88cd6489f9bcd39d001855cf2b8 Mon Sep 17 00:00:00 2001 +From f31cd295a7431bdb6c1cc126f32348d7fe84301a Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Mon, 5 Sep 2022 14:02:37 -0400 -Subject: [PATCH 4/4] SubscriptionController: Do not override default calling +Subject: [PATCH 3/4] SubscriptionController: Do not override default calling account from third-party apps When the user has selected a calling account from a third-party app as @@ -18,7 +18,7 @@ Change-Id: Iccab64e9b3b3ab4773bd8944d47c2006f229d472 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java b/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java -index 0e98a9e..c511b1f 100644 +index 353493b..9857641 100644 --- a/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java +++ b/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java @@ -86,6 +86,7 @@ import android.util.Base64; @@ -29,7 +29,7 @@ index 0e98a9e..c511b1f 100644 import com.android.internal.R; import com.android.internal.annotations.VisibleForTesting; -@@ -3221,7 +3222,22 @@ public class SubscriptionManagerService extends ISub.Stub { +@@ -3268,7 +3269,22 @@ public class SubscriptionManagerService extends ISub.Stub { TelecomManager telecomManager = mContext.getSystemService(TelecomManager.class); if (telecomManager != null) { diff --git a/frameworks/opt/telephony/0003-Conditionally-revert-Block-Binder-thread-until-incom.patch b/frameworks/opt/telephony/0004-Conditionally-revert-Block-Binder-thread-until-incom.patch similarity index 90% rename from frameworks/opt/telephony/0003-Conditionally-revert-Block-Binder-thread-until-incom.patch rename to frameworks/opt/telephony/0004-Conditionally-revert-Block-Binder-thread-until-incom.patch index 23a62de..4aa3b19 100644 --- a/frameworks/opt/telephony/0003-Conditionally-revert-Block-Binder-thread-until-incom.patch +++ b/frameworks/opt/telephony/0004-Conditionally-revert-Block-Binder-thread-until-incom.patch @@ -1,7 +1,7 @@ -From 0a4d81b29a66003ed09fab955e898908e9f6edd6 Mon Sep 17 00:00:00 2001 +From 0dd5ea9e9e05b4ef9e01d0c9c6a66a25b321791f Mon Sep 17 00:00:00 2001 From: ExactExampl Date: Tue, 11 Oct 2022 12:38:00 +0300 -Subject: [PATCH 3/4] Conditionally revert "Block Binder thread until incoming +Subject: [PATCH 4/4] Conditionally revert "Block Binder thread until incoming call process completes" * Legacy IMS packages handling incoming calls in such a way that @@ -17,7 +17,7 @@ Change-Id: I55a8f3bbca4a2b9a6bc7511e9fe2d0884a8818e5 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java -index e73eafd..2cf59c7 100644 +index 26b6e18..c6b3355 100644 --- a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java +++ b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java @@ -70,6 +70,7 @@ import android.os.Registrant; @@ -25,10 +25,10 @@ index e73eafd..2cf59c7 100644 import android.os.RemoteException; import android.os.SystemClock; +import android.os.SystemProperties; + import android.os.UserHandle; import android.preference.PreferenceManager; import android.provider.Settings; - import android.sysprop.TelephonyProperties; -@@ -389,7 +390,19 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { +@@ -390,7 +391,19 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { @Nullable public IImsCallSessionListener onIncomingCall( @NonNull IImsCallSession c, @Nullable String callId, @Nullable Bundle extras) { diff --git a/packages/apps/Dialer/0001-DNM-Downgrade-target_sdk_version-to-34-for-now.patch b/packages/apps/Dialer/0001-Downgrade-target_sdk_version-to-34-for-now.patch similarity index 74% rename from packages/apps/Dialer/0001-DNM-Downgrade-target_sdk_version-to-34-for-now.patch rename to packages/apps/Dialer/0001-Downgrade-target_sdk_version-to-34-for-now.patch index 46642ef..c73ca22 100644 --- a/packages/apps/Dialer/0001-DNM-Downgrade-target_sdk_version-to-34-for-now.patch +++ b/packages/apps/Dialer/0001-Downgrade-target_sdk_version-to-34-for-now.patch @@ -1,14 +1,14 @@ -From 6597fc02ebe5811ff69566aab6c8a48c7fcdeeb2 Mon Sep 17 00:00:00 2001 +From b60353d34c0eef8a6291c11e671a22298b3d6d99 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sun, 6 Oct 2024 14:22:49 -0400 -Subject: [PATCH] [DNM] Downgrade target_sdk_version to 34 for now +Subject: [PATCH 1/2] Downgrade target_sdk_version to 34 for now --- Android.bp | 1 + 1 file changed, 1 insertion(+) diff --git a/Android.bp b/Android.bp -index 388f4c0..498e7c8 100644 +index 388f4c00c..498e7c8f0 100644 --- a/Android.bp +++ b/Android.bp @@ -207,6 +207,7 @@ android_app { diff --git a/packages/apps/Dialer/0002-Make-java_sdk_library-dependencies-explicit.patch b/packages/apps/Dialer/0002-Make-java_sdk_library-dependencies-explicit.patch new file mode 100644 index 0000000..b4c41b2 --- /dev/null +++ b/packages/apps/Dialer/0002-Make-java_sdk_library-dependencies-explicit.patch @@ -0,0 +1,31 @@ +From da7c7a335475dc61375b470b1aa6cb425ed54514 Mon Sep 17 00:00:00 2001 +From: Jihoon Kang +Date: Fri, 30 Aug 2024 00:29:34 +0000 +Subject: [PATCH 2/2] Make java_sdk_library dependencies explicit + +modules should specify the submodule of java_sdk_library that the module +actually depends on + +Test: CI +Bug: 358613520 +Change-Id: I23a22e9d3dc001a5b061177273d407b01bb77a50 +--- + Android.bp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Android.bp b/Android.bp +index 498e7c8f0..299c1a6e7 100644 +--- a/Android.bp ++++ b/Android.bp +@@ -102,7 +102,7 @@ android_app { + exclude_srcs: ["java/com/android/dialer/rootcomponentgenerator/*.java"], + libs: [ + "auto_value_annotations", +- "org.apache.http.legacy", ++ "org.apache.http.legacy.stubs.system", + ], + optimize: { + proguard_flags_files: [ +-- +2.44.0 + diff --git a/packages/apps/Launcher3/0001-Expose-themed-icon-setting-in-ThemePicker.patch b/packages/apps/Launcher3/0001-Expose-themed-icon-setting-in-ThemePicker.patch index 4a47169..ce9567d 100644 --- a/packages/apps/Launcher3/0001-Expose-themed-icon-setting-in-ThemePicker.patch +++ b/packages/apps/Launcher3/0001-Expose-themed-icon-setting-in-ThemePicker.patch @@ -1,4 +1,4 @@ -From dfc41a9e3661541deb16120d668a2db258ac5bdc Mon Sep 17 00:00:00 2001 +From 88275c8b0d207286b34284ad69090b29b705c4c1 Mon Sep 17 00:00:00 2001 From: Danny Lin Date: Mon, 11 Oct 2021 20:48:44 -0700 Subject: [PATCH 1/3] Expose themed icon setting in ThemePicker diff --git a/packages/apps/Launcher3/0002-Disable-QSB-in-BuildConfig.patch b/packages/apps/Launcher3/0002-Disable-QSB-in-BuildConfig.patch index 08f2328..dfc0614 100644 --- a/packages/apps/Launcher3/0002-Disable-QSB-in-BuildConfig.patch +++ b/packages/apps/Launcher3/0002-Disable-QSB-in-BuildConfig.patch @@ -1,4 +1,4 @@ -From 3cdbed6a05724beff6104f6fa0bb20ff9b4e9a37 Mon Sep 17 00:00:00 2001 +From 8f504046ec34c16fbd8a1d2da8294ab84e3817fa Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 7 Jul 2023 18:13:32 -0400 Subject: [PATCH 2/3] Disable QSB in BuildConfig diff --git a/packages/apps/Launcher3/0003-Properly-expose-GridCustomizationsProvider.patch b/packages/apps/Launcher3/0003-Properly-expose-GridCustomizationsProvider.patch index 5c5451e..5e9c25f 100644 --- a/packages/apps/Launcher3/0003-Properly-expose-GridCustomizationsProvider.patch +++ b/packages/apps/Launcher3/0003-Properly-expose-GridCustomizationsProvider.patch @@ -1,4 +1,4 @@ -From a75d769d962e2356d2685dde26141edb312c8e00 Mon Sep 17 00:00:00 2001 +From 38d5e4a3a7bc358e77e7f9e2e8d2f4d1dfaed0b5 Mon Sep 17 00:00:00 2001 From: Luca Stefani Date: Fri, 1 Nov 2019 23:17:59 +0100 Subject: [PATCH 3/3] Properly expose GridCustomizationsProvider diff --git a/packages/apps/Settings/0001-Global-VPN-feature-2-2.patch b/packages/apps/Settings/0001-Global-VPN-feature-2-2.patch index 5cec122..7979d59 100644 --- a/packages/apps/Settings/0001-Global-VPN-feature-2-2.patch +++ b/packages/apps/Settings/0001-Global-VPN-feature-2-2.patch @@ -1,4 +1,4 @@ -From 55872bc4a7ac74319ba3798fa5ab69153591fec4 Mon Sep 17 00:00:00 2001 +From 824c2a99f9d139d523265e64c8628b3171a7b017 Mon Sep 17 00:00:00 2001 From: Oliver Scott Date: Thu, 8 Jul 2021 10:40:49 -0400 Subject: [PATCH 1/2] Global VPN feature [2/2] @@ -14,13 +14,13 @@ Change-Id: If4a552b8f59bc15f53c324afa93a67e086b9c5a9 3 files changed, 59 insertions(+), 1 deletion(-) diff --git a/res/values/strings.xml b/res/values/strings.xml -index f92fd2a..06871e7 100644 +index 7e363e6..cd3a83d 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml -@@ -13588,4 +13588,10 @@ +@@ -13670,4 +13670,10 @@ - - + + Search Settings + + + Global VPN diff --git a/packages/apps/Settings/0002-Settings-Bring-in-the-new-icon.patch b/packages/apps/Settings/0002-Settings-Bring-in-the-new-icon.patch index 1f5c21b..8898d32 100644 --- a/packages/apps/Settings/0002-Settings-Bring-in-the-new-icon.patch +++ b/packages/apps/Settings/0002-Settings-Bring-in-the-new-icon.patch @@ -1,4 +1,4 @@ -From 7f107defba4ab1ea850d8a9dbd897135c01dd9b9 Mon Sep 17 00:00:00 2001 +From bddf947575bc2ceebddbfcf120b0b8a6a1a967aa Mon Sep 17 00:00:00 2001 From: Asher Simonds Date: Sun, 3 Apr 2022 12:18:21 +0200 Subject: [PATCH 2/2] Settings: Bring in the new icon @@ -1605,17 +1605,17 @@ z6ETeSztRPj2WqpS>%sk}Z93Z&Tr+fZKn*nj{qN&iN>evQCB%QCz?wonp#Lib2QCjH z>i%o42p|ibx Date: Fri, 1 Nov 2019 21:14:29 +0100 Subject: [PATCH 1/4] Add wallpaper privapp whitelist diff --git a/packages/apps/ThemePicker/0002-Add-wallpaper-default-permissions.patch b/packages/apps/ThemePicker/0002-Add-wallpaper-default-permissions.patch index 9104516..40a73d6 100644 --- a/packages/apps/ThemePicker/0002-Add-wallpaper-default-permissions.patch +++ b/packages/apps/ThemePicker/0002-Add-wallpaper-default-permissions.patch @@ -1,4 +1,4 @@ -From db9fdfe26b4b012d6b56740fd8b2d47dbec3b1c6 Mon Sep 17 00:00:00 2001 +From 0e064d23f1b0dc300651d9d680927ecb26aa9013 Mon Sep 17 00:00:00 2001 From: LuK1337 Date: Tue, 15 Sep 2020 03:27:19 +0200 Subject: [PATCH 2/4] Add wallpaper default permissions diff --git a/packages/apps/ThemePicker/0003-Specify-we-read-and-write-launcher-settings.patch b/packages/apps/ThemePicker/0003-Specify-we-read-and-write-launcher-settings.patch index 47af42f..c041a3d 100644 --- a/packages/apps/ThemePicker/0003-Specify-we-read-and-write-launcher-settings.patch +++ b/packages/apps/ThemePicker/0003-Specify-we-read-and-write-launcher-settings.patch @@ -1,4 +1,4 @@ -From b78e135aa16d74add63252ed718e6079afcde7f3 Mon Sep 17 00:00:00 2001 +From 4c72c9bf019b1da8aa0888d1f4f22cc026aa87bf Mon Sep 17 00:00:00 2001 From: Luca Stefani Date: Fri, 1 Nov 2019 23:17:08 +0100 Subject: [PATCH 3/4] Specify we read and write launcher settings @@ -9,7 +9,7 @@ Change-Id: Ifc8196588443b007602118389ca76d34ab531f14 1 file changed, 3 insertions(+) diff --git a/AndroidManifest.xml b/AndroidManifest.xml -index 6e5844d..555d3b6 100755 +index f89ff6e..95f5b0e 100755 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -60,6 +60,9 @@ diff --git a/packages/apps/ThemePicker/0004-Add-permission-for-launcher-preview-rendering.patch b/packages/apps/ThemePicker/0004-Add-permission-for-launcher-preview-rendering.patch index 252ac50..3d4373e 100644 --- a/packages/apps/ThemePicker/0004-Add-permission-for-launcher-preview-rendering.patch +++ b/packages/apps/ThemePicker/0004-Add-permission-for-launcher-preview-rendering.patch @@ -1,4 +1,4 @@ -From 4ccfc277b6a3a2b534dc331eada45b15a154a55c Mon Sep 17 00:00:00 2001 +From 30d9a5682d8ae85d7f621b6509f7445fc70bae70 Mon Sep 17 00:00:00 2001 From: Danny Lin Date: Tue, 5 Oct 2021 22:40:58 -0700 Subject: [PATCH 4/4] Add permission for launcher preview rendering @@ -10,7 +10,7 @@ Change-Id: Ie707dcd98161e8f5993b0504295fddc3f395cd20 2 files changed, 2 insertions(+) diff --git a/AndroidManifest.xml b/AndroidManifest.xml -index 555d3b6..02fa70f 100755 +index 95f5b0e..8c55499 100755 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -13,6 +13,7 @@ diff --git a/packages/modules/Bluetooth/0001-Don-t-crash-on-status-UNSUPPORTED_REMOTE_OR_LMP_FEAT.patch b/packages/modules/Bluetooth/0001-Don-t-crash-on-status-UNSUPPORTED_REMOTE_OR_LMP_FEAT.patch new file mode 100644 index 0000000..e763608 --- /dev/null +++ b/packages/modules/Bluetooth/0001-Don-t-crash-on-status-UNSUPPORTED_REMOTE_OR_LMP_FEAT.patch @@ -0,0 +1,32 @@ +From 3aa174edd50a176986ab15f91bcb87b7cec160fa Mon Sep 17 00:00:00 2001 +From: DerTeufel +Date: Wed, 4 Jan 2023 21:39:37 +0100 +Subject: [PATCH 1/2] Don't crash on status:UNSUPPORTED_REMOTE_OR_LMP_FEATURE + +especially 'opcode:0x811 (SNIFF_SUBRATING)' which is the only one I had observed + +Change-Id: Ic57d6631185370cbfdeafdac00801c6ca27fb755 +--- + system/gd/hci/hci_layer.cc | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/system/gd/hci/hci_layer.cc b/system/gd/hci/hci_layer.cc +index 70a5f43b56..07d5d25a5c 100644 +--- a/system/gd/hci/hci_layer.cc ++++ b/system/gd/hci/hci_layer.cc +@@ -216,8 +216,10 @@ struct HciLayer::impl { + + bool is_vendor_specific = static_cast(op_code) & (0x3f << 10); + CommandStatusView status_view = CommandStatusView::Create(event); +- if (is_vendor_specific && (is_status && !command_queue_.front().waiting_for_status_) && +- (status_view.IsValid() && status_view.GetStatus() == ErrorCode::UNKNOWN_HCI_COMMAND)) { ++ if ((is_vendor_specific && (is_status && !command_queue_.front().waiting_for_status_) && ++ (status_view.IsValid() && status_view.GetStatus() == ErrorCode::UNKNOWN_HCI_COMMAND)) || ++ ((is_status && !command_queue_.front().waiting_for_status_) && ++ (status_view.IsValid() && status_view.GetStatus() == ErrorCode::UNSUPPORTED_REMOTE_OR_LMP_FEATURE))) { + // If this is a command status of a vendor specific command, and command complete is expected, + // we can't treat this as hard failure since we have no way of probing this lack of support at + // earlier time. Instead we let the command complete handler handle a empty Command Complete +-- +2.44.0 + diff --git a/packages/modules/Bluetooth/0001-gd-hci-Ignore-unexpected-status-events.patch b/packages/modules/Bluetooth/0001-gd-hci-Ignore-unexpected-status-events.patch deleted file mode 100644 index 0bc9623..0000000 --- a/packages/modules/Bluetooth/0001-gd-hci-Ignore-unexpected-status-events.patch +++ /dev/null @@ -1,42 +0,0 @@ -From e164e6032a9df3bf8814cdb8d6267b1c5663687f Mon Sep 17 00:00:00 2001 -From: Peter Cai -Date: Wed, 24 Aug 2022 10:41:29 -0400 -Subject: [PATCH 1/2] gd: hci: Ignore unexpected status events - -For some reason, on some old devices, the controller will report a -remote to support SNIFF_SUBRATING even when it does not. Just ignore the -error here (the status event comes from the failure response). - -Change-Id: Ifb9a65fd77f21d15a8dc1ced9240194d38218ef6 ---- - system/gd/hci/hci_layer.cc | 14 +++++++------- - 1 file changed, 7 insertions(+), 7 deletions(-) - -diff --git a/system/gd/hci/hci_layer.cc b/system/gd/hci/hci_layer.cc -index fe5fa33..9c411fb 100644 ---- a/system/gd/hci/hci_layer.cc -+++ b/system/gd/hci/hci_layer.cc -@@ -230,13 +230,13 @@ struct HciLayer::impl { - command_complete_view.IsValid(), "assert failed: command_complete_view.IsValid()"); - (*command_queue_.front().GetCallback())(command_complete_view); - } else { -- log::assert_that( -- command_queue_.front().waiting_for_status_ == is_status, -- "{} was not expecting {} event", -- OpCodeText(op_code), -- logging_id); -- -- (*command_queue_.front().GetCallback())(std::move(response_view)); -+ if (command_queue_.front().waiting_for_status_ == is_status) { -+ (*command_queue_.front().GetCallback())(std::move(response_view)); -+ } else { -+ CommandCompleteView command_complete_view = CommandCompleteView::Create( -+ EventView::Create(PacketView(std::make_shared>(std::vector())))); -+ (*command_queue_.front().GetCallback())(std::move(command_complete_view)); -+ } - } - - #ifdef TARGET_FLOSS --- -2.44.0 - diff --git a/packages/modules/Bluetooth/0002-audio_hal_interface-Optionally-use-sysbta-HAL.patch b/packages/modules/Bluetooth/0002-audio_hal_interface-Optionally-use-sysbta-HAL.patch index 93b4024..e28853d 100644 --- a/packages/modules/Bluetooth/0002-audio_hal_interface-Optionally-use-sysbta-HAL.patch +++ b/packages/modules/Bluetooth/0002-audio_hal_interface-Optionally-use-sysbta-HAL.patch @@ -1,4 +1,4 @@ -From 63b517cc58a937ba43ff7fe2527990b4b532521d Mon Sep 17 00:00:00 2001 +From 5949d86e40befe38ef57fc0fbbf18d2fe464332b Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 24 Aug 2022 15:45:18 -0400 Subject: [PATCH 2/2] audio_hal_interface: Optionally use sysbta HAL @@ -13,47 +13,47 @@ Change-Id: I59973e6ec84c5923be8a7c67b36b2e237f000860 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/system/audio_hal_interface/aidl/client_interface_aidl.cc b/system/audio_hal_interface/aidl/client_interface_aidl.cc -index f4cfee0..f98032e 100644 +index 15a20be5b9..412a1ab888 100644 --- a/system/audio_hal_interface/aidl/client_interface_aidl.cc +++ b/system/audio_hal_interface/aidl/client_interface_aidl.cc -@@ -68,7 +68,7 @@ bool BluetoothAudioClientInterface::IsValid() const { +@@ -69,7 +69,7 @@ BluetoothAudioClientInterface::BluetoothAudioClientInterface(IBluetoothTransport + bool BluetoothAudioClientInterface::IsValid() const { return provider_ != nullptr; } bool BluetoothAudioClientInterface::is_aidl_available() { - return AServiceManager_isDeclared( -- kDefaultAudioProviderFactoryInterface.c_str()); -+ audioProviderFactoryInterface().c_str()); +- return AServiceManager_isDeclared(kDefaultAudioProviderFactoryInterface.c_str()); ++ return AServiceManager_isDeclared(audioProviderFactoryInterface().c_str()); } - std::vector -@@ -84,7 +84,7 @@ BluetoothAudioClientInterface::GetAudioCapabilities(SessionType session_type) { + std::vector BluetoothAudioClientInterface::GetAudioCapabilities() const { +@@ -83,7 +83,7 @@ std::vector BluetoothAudioClientInterface::GetAudioCapabiliti + return capabilities; } - auto provider_factory = IBluetoothAudioProviderFactory::fromBinder( - ::ndk::SpAIBinder(AServiceManager_waitForService( -- kDefaultAudioProviderFactoryInterface.c_str()))); -+ audioProviderFactoryInterface().c_str()))); + auto provider_factory = IBluetoothAudioProviderFactory::fromBinder(::ndk::SpAIBinder( +- AServiceManager_waitForService(kDefaultAudioProviderFactoryInterface.c_str()))); ++ AServiceManager_waitForService(audioProviderFactoryInterface().c_str()))); if (provider_factory == nullptr) { log::error("can't get capability from unknown factory"); -@@ -112,7 +112,7 @@ BluetoothAudioClientInterface::GetProviderInfo( +@@ -108,7 +108,7 @@ BluetoothAudioClientInterface::GetProviderInfo( + if (provider_factory == nullptr) { - provider_factory = IBluetoothAudioProviderFactory::fromBinder( - ::ndk::SpAIBinder(AServiceManager_waitForService( -- kDefaultAudioProviderFactoryInterface.c_str()))); -+ audioProviderFactoryInterface().c_str()))); + provider_factory = IBluetoothAudioProviderFactory::fromBinder(::ndk::SpAIBinder( +- AServiceManager_waitForService(kDefaultAudioProviderFactoryInterface.c_str()))); ++ AServiceManager_waitForService(audioProviderFactoryInterface().c_str()))); } if (provider_factory == nullptr) { -@@ -193,7 +193,7 @@ void BluetoothAudioClientInterface::FetchAudioProvider() { - } - auto provider_factory = IBluetoothAudioProviderFactory::fromBinder( - ::ndk::SpAIBinder(AServiceManager_waitForService( -- kDefaultAudioProviderFactoryInterface.c_str()))); -+ audioProviderFactoryInterface().c_str()))); +@@ -184,7 +184,7 @@ void BluetoothAudioClientInterface::FetchAudioProvider() { + // re-registered, so we need to re-fetch the service. + for (int retry_no = 0; retry_no < kFetchAudioProviderRetryNumber; ++retry_no) { + auto provider_factory = IBluetoothAudioProviderFactory::fromBinder(::ndk::SpAIBinder( +- AServiceManager_waitForService(kDefaultAudioProviderFactoryInterface.c_str()))); ++ AServiceManager_waitForService(audioProviderFactoryInterface().c_str()))); - if (provider_factory == nullptr) { - log::error("can't get capability from unknown factory"); + if (provider_factory == nullptr) { + log::error("can't get capability 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 9b92319..643507e 100644 +index b5bb309ab2..e73009ba69 100644 --- a/system/audio_hal_interface/aidl/client_interface_aidl.h +++ b/system/audio_hal_interface/aidl/client_interface_aidl.h @@ -29,6 +29,7 @@ @@ -62,23 +62,23 @@ index 9b92319..643507e 100644 #include "transport_instance.h" +#include "osi/include/properties.h" - #define BLUETOOTH_AUDIO_HAL_PROP_DISABLED \ - "persist.bluetooth.bluetooth_audio_hal.disabled" -@@ -177,6 +178,12 @@ class BluetoothAudioClientInterface { + namespace bluetooth { + namespace audio { +@@ -163,6 +164,12 @@ protected: // "android.hardware.bluetooth.audio.IBluetoothAudioProviderFactory/default"; static inline const std::string kDefaultAudioProviderFactoryInterface = - std::string() + IBluetoothAudioProviderFactory::descriptor + "/default"; + std::string() + IBluetoothAudioProviderFactory::descriptor + "/default"; + static inline const std::string kSystemAudioProviderFactoryInterface = -+ std::string() + IBluetoothAudioProviderFactory::descriptor + "/sysbta"; ++ 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; ++ return osi_property_get_bool("persist.bluetooth.system_audio_hal.enabled", false) ++ ? kSystemAudioProviderFactoryInterface : kDefaultAudioProviderFactoryInterface; + } - private: + private: IBluetoothTransportInstance* transport_; diff --git a/system/audio_hal_interface/hal_version_manager.cc b/system/audio_hal_interface/hal_version_manager.cc -index c4e01bc..55ef87b 100644 +index 19c48c58da..b19da332c0 100644 --- a/system/audio_hal_interface/hal_version_manager.cc +++ b/system/audio_hal_interface/hal_version_manager.cc @@ -20,6 +20,7 @@ @@ -89,34 +89,34 @@ index c4e01bc..55ef87b 100644 #include -@@ -34,6 +35,12 @@ using ::aidl::android::hardware::bluetooth::audio:: +@@ -33,6 +34,12 @@ using ::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProviderFactor static const std::string kDefaultAudioProviderFactoryInterface = - std::string() + IBluetoothAudioProviderFactory::descriptor + "/default"; + std::string() + IBluetoothAudioProviderFactory::descriptor + "/default"; +static const std::string kSystemAudioProviderFactoryInterface = -+ std::string() + IBluetoothAudioProviderFactory::descriptor + "/sysbta"; ++ 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; ++ return osi_property_get_bool("persist.bluetooth.system_audio_hal.enabled", false) ++ ? kSystemAudioProviderFactoryInterface : kDefaultAudioProviderFactoryInterface; +} std::string toString(BluetoothAudioHalTransport transport) { switch (transport) { -@@ -75,7 +82,7 @@ BluetoothAudioHalVersion GetAidlInterfaceVersion() { +@@ -73,7 +80,7 @@ BluetoothAudioHalVersion GetAidlInterfaceVersion() { + static auto aidl_version = []() -> BluetoothAudioHalVersion { int version = 0; - auto provider_factory = IBluetoothAudioProviderFactory::fromBinder( - ::ndk::SpAIBinder(AServiceManager_waitForService( -- kDefaultAudioProviderFactoryInterface.c_str()))); -+ audioProviderFactoryInterface().c_str()))); + auto provider_factory = IBluetoothAudioProviderFactory::fromBinder(::ndk::SpAIBinder( +- AServiceManager_waitForService(kDefaultAudioProviderFactoryInterface.c_str()))); ++ AServiceManager_waitForService(audioProviderFactoryInterface().c_str()))); if (provider_factory == nullptr) { - log::error( -@@ -147,7 +154,7 @@ HalVersionManager::GetProvidersFactory_2_0() { + log::error("getInterfaceVersion: Can't get aidl version from unknown factory"); +@@ -138,7 +145,7 @@ android::sp HalVersionManager::GetProviders + HalVersionManager::HalVersionManager() { hal_transport_ = BluetoothAudioHalTransport::UNKNOWN; - if (AServiceManager_checkService( -- kDefaultAudioProviderFactoryInterface.c_str()) != nullptr) { -+ audioProviderFactoryInterface().c_str()) != nullptr) { +- if (AServiceManager_checkService(kDefaultAudioProviderFactoryInterface.c_str()) != nullptr) { ++ if (AServiceManager_checkService(audioProviderFactoryInterface().c_str()) != nullptr) { hal_version_ = GetAidlInterfaceVersion(); hal_transport_ = BluetoothAudioHalTransport::AIDL; return; diff --git a/packages/modules/Connectivity/0001-Revert-drop-support-for-V-gsi-on-pixel-5-R-base-kern.patch b/packages/modules/Connectivity/0001-Revert-drop-support-for-V-gsi-on-pixel-5-R-base-kern.patch index d80aced..dd475b3 100644 --- a/packages/modules/Connectivity/0001-Revert-drop-support-for-V-gsi-on-pixel-5-R-base-kern.patch +++ b/packages/modules/Connectivity/0001-Revert-drop-support-for-V-gsi-on-pixel-5-R-base-kern.patch @@ -1,4 +1,4 @@ -From 9d596e5d42b506b61cc114450d09264aa323f1b7 Mon Sep 17 00:00:00 2001 +From c632ab2581f8dbff4381aba8fd94979e71edc356 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 16 Mar 2024 15:27:27 -0400 Subject: [PATCH] Revert "drop support for V gsi on pixel 5 R base kernel" diff --git a/system/core/0002-init-Override-select-system-properties.patch b/system/core/0001-init-Override-select-system-properties.patch similarity index 88% rename from system/core/0002-init-Override-select-system-properties.patch rename to system/core/0001-init-Override-select-system-properties.patch index f66edbd..67dd777 100644 --- a/system/core/0002-init-Override-select-system-properties.patch +++ b/system/core/0001-init-Override-select-system-properties.patch @@ -1,7 +1,7 @@ -From 18b70443969bec36e1f8551b6f67a762df5fc210 Mon Sep 17 00:00:00 2001 +From bb84dbc1eafbe7604912a7cba72ae65417c2923d Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Wed, 23 Feb 2022 17:37:47 -0500 -Subject: [PATCH 2/2] init: Override select system properties +Subject: [PATCH 1/2] init: Override select system properties * adb secure props and logd can be overridden from system. @@ -11,10 +11,10 @@ Change-Id: I94efa3f108ae97711026f099f367b6bea325629f 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/init/property_service.cpp b/init/property_service.cpp -index 0d6eb15..16e0448 100644 +index f2606e3..d12fac1 100644 --- a/init/property_service.cpp +++ b/init/property_service.cpp -@@ -801,13 +801,20 @@ static void LoadProperties(char* data, const char* filter, const char* filename, +@@ -797,13 +797,20 @@ static void LoadProperties(char* data, const char* filter, const char* filename, std::string error; if (CheckPermissions(key, value, context, cr, &error) == PROP_SUCCESS) { auto it = properties->find(key); diff --git a/system/core/0001-init-Do-not-start-console-service-when-debuggable.patch b/system/core/0002-init-Do-not-start-console-service-when-debuggable.patch similarity index 65% rename from system/core/0001-init-Do-not-start-console-service-when-debuggable.patch rename to system/core/0002-init-Do-not-start-console-service-when-debuggable.patch index 9c00dd0..b7d0a88 100644 --- a/system/core/0001-init-Do-not-start-console-service-when-debuggable.patch +++ b/system/core/0002-init-Do-not-start-console-service-when-debuggable.patch @@ -1,7 +1,7 @@ -From 54428255201c9f02f4827961ad077c74ff126860 Mon Sep 17 00:00:00 2001 +From f1bdfa28ee093ca4db697560ccd4b1e4b24be937 Mon Sep 17 00:00:00 2001 From: Isaac Chen Date: Wed, 23 Jun 2021 13:07:30 +0800 -Subject: [PATCH 1/2] init: Do not start console service when debuggable +Subject: [PATCH 2/2] 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. @@ -13,19 +13,19 @@ Change-Id: I34cfd6b42d3b9aee4b3e63181480cfb8b1255f29 1 file changed, 3 deletions(-) diff --git a/rootdir/init.rc b/rootdir/init.rc -index 2443b7c..06cb386 100644 +index 1acd637..c3d963f 100644 --- a/rootdir/init.rc +++ b/rootdir/init.rc -@@ -1317,9 +1317,6 @@ on property:ro.debuggable=1 +@@ -1355,9 +1355,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 "" + # Multi-Gen LRU Experiment + on property:persist.device_config.mglru_native.lru_gen_config=none + write /sys/kernel/mm/lru_gen/enabled 0 -- 2.44.0 From 70205d489a5efdeb953b4cc5650e823211dedb15 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 22 Jan 2025 21:49:30 -0500 Subject: [PATCH 41/43] Re-pick LOS patches for signature spoofing --- ...support-glob-matching-for-properties.patch | 2 +- ...PackageUtils-Add-glob-matching-suppo.patch | 2 +- .../base/0003-Global-VPN-feature-1-2.patch | 2 +- ...ze-boot-animation-to-match-screen-si.patch | 2 +- ...ateForSlotIndex-in-SubscriptionManag.patch | 2 +- ...CallingIdentity-variant-with-both-ex.patch | 2 +- ...-and-AIDL-fingerprint-services-are-m.patch | 42 ++++ ...d.version.incremental-to-signal-OTA-.patch | 150 ++++++++++++ ...k-before-setting-default-or-fallback.patch | 134 ++++++++++ ...treating-virtual-biometric-sensors-a.patch | 49 ++++ ...spoofing-for-microG-Companion-Servic.patch | 229 ++++++++++++++++++ ...igningInfo-for-microG-Companion-Serv.patch | 49 ++++ 12 files changed, 659 insertions(+), 6 deletions(-) create mode 100644 frameworks/base/0007-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch create mode 100644 frameworks/base/0008-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch create mode 100644 frameworks/base/0009-WebView-Add-check-before-setting-default-or-fallback.patch create mode 100644 frameworks/base/0010-Add-support-for-treating-virtual-biometric-sensors-a.patch create mode 100644 frameworks/base/0011-Allow-signature-spoofing-for-microG-Companion-Servic.patch create mode 100644 frameworks/base/0012-Allow-spoofing-signingInfo-for-microG-Companion-Serv.patch diff --git a/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch b/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch index 327c2ce..d1fb022 100644 --- a/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch +++ b/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch @@ -1,7 +1,7 @@ From 2b9fc3684d24ff3276f18c4de93402cf7d92e5c3 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Tue, 12 Oct 2021 21:37:22 -0400 -Subject: [PATCH 01/11] PackageParser: support glob matching for properties +Subject: [PATCH 01/12] PackageParser: support glob matching for properties Needed to make phh's vendor overlays work --- diff --git a/frameworks/base/0002-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch b/frameworks/base/0002-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch index 55b62b7..32e344b 100644 --- a/frameworks/base/0002-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch +++ b/frameworks/base/0002-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch @@ -1,7 +1,7 @@ From 6de413c8d88d2d6f02e81a4247af47b506ea4451 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 2 Sep 2022 21:36:06 -0400 -Subject: [PATCH 02/11] FrameworkParsingPackageUtils: Add glob matching support +Subject: [PATCH 02/12] FrameworkParsingPackageUtils: Add glob matching support for properties This is now required in addition to the one in PackageParser in order diff --git a/frameworks/base/0003-Global-VPN-feature-1-2.patch b/frameworks/base/0003-Global-VPN-feature-1-2.patch index d7f7bca..d3a52d6 100644 --- a/frameworks/base/0003-Global-VPN-feature-1-2.patch +++ b/frameworks/base/0003-Global-VPN-feature-1-2.patch @@ -1,7 +1,7 @@ From a5c2cffdac5181c437437fee002526d43a080c51 Mon Sep 17 00:00:00 2001 From: Oliver Scott Date: Thu, 8 Jul 2021 10:41:43 -0400 -Subject: [PATCH 03/11] Global VPN feature [1/2] +Subject: [PATCH 03/12] Global VPN feature [1/2] * Modify existing VPN user range functions to conditionally have traffic from all users pass through the global VPN. diff --git a/frameworks/base/0004-Dynamically-resize-boot-animation-to-match-screen-si.patch b/frameworks/base/0004-Dynamically-resize-boot-animation-to-match-screen-si.patch index 44ff688..3e9a45b 100644 --- a/frameworks/base/0004-Dynamically-resize-boot-animation-to-match-screen-si.patch +++ b/frameworks/base/0004-Dynamically-resize-boot-animation-to-match-screen-si.patch @@ -1,7 +1,7 @@ From 1357225dd52f3f2a6a1766c33eca32506b8f7ac2 Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Mon, 20 Dec 2021 15:01:41 -0500 -Subject: [PATCH 04/11] Dynamically resize boot animation to match screen size +Subject: [PATCH 04/12] Dynamically resize boot animation to match screen size Change-Id: I54e49fc6b8c670103852e212d1416e27ff976205 --- diff --git a/frameworks/base/0005-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch b/frameworks/base/0005-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch index 9f67fed..bdace07 100644 --- a/frameworks/base/0005-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch +++ b/frameworks/base/0005-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch @@ -1,7 +1,7 @@ From f89ddfd215de9269559afdd6b23e4eca56da8eef Mon Sep 17 00:00:00 2001 From: Andy CrossGate Yan Date: Wed, 2 Aug 2023 20:59:53 +0800 -Subject: [PATCH 05/11] Restore getSimStateForSlotIndex in SubscriptionManager +Subject: [PATCH 05/12] Restore getSimStateForSlotIndex in SubscriptionManager MTK IMS still needs it here diff --git a/frameworks/base/0006-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch b/frameworks/base/0006-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch index c087b5c..1c73094 100644 --- a/frameworks/base/0006-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch +++ b/frameworks/base/0006-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch @@ -1,7 +1,7 @@ From 6ed2fcbdc5aaadd1bb29f8bfd80cf9200515acb0 Mon Sep 17 00:00:00 2001 From: Andy CrossGate Yan Date: Sat, 12 Aug 2023 20:11:17 +0800 -Subject: [PATCH 06/11] Add runWithCleanCallingIdentity variant with both +Subject: [PATCH 06/12] Add runWithCleanCallingIdentity variant with both executor and return value This complements the fixup to ImsPhoneCallTracker (in fw/o/t) for U diff --git a/frameworks/base/0007-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch b/frameworks/base/0007-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch new file mode 100644 index 0000000..06830e5 --- /dev/null +++ b/frameworks/base/0007-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch @@ -0,0 +1,42 @@ +From 8eec006d00e012f02a33cea8f631af15bdd14498 Mon Sep 17 00:00:00 2001 +From: Peter Cai +Date: Sun, 22 Sep 2024 22:53:01 -0400 +Subject: [PATCH 07/12] AuthService: HIDL and AIDL fingerprint services are + mutually exclusive + +...and make sure that we prioritize AIDL over HIDL. This is essential +for GSIs to boot on newer devices while having the HIDL property set for +compatibility with older ones. + +Change-Id: I834297a44674820d813d8f6d376dfd294f084f3b +--- + .../com/android/server/biometrics/AuthService.java | 10 ++++------ + 1 file changed, 4 insertions(+), 6 deletions(-) + +diff --git a/services/core/java/com/android/server/biometrics/AuthService.java b/services/core/java/com/android/server/biometrics/AuthService.java +index 2d802b21c..0730d634f 100644 +--- a/services/core/java/com/android/server/biometrics/AuthService.java ++++ b/services/core/java/com/android/server/biometrics/AuthService.java +@@ -908,15 +908,13 @@ public class AuthService extends SystemService { + + handlerProvider.getFingerprintHandler().post(() -> { + final FingerprintSensorConfigurations mFingerprintSensorConfigurations = +- new FingerprintSensorConfigurations(!(hidlConfigStrings != null +- && hidlConfigStrings.length > 0)); +- +- if (hidlConfigStrings != null && hidlConfigStrings.length > 0) { +- mFingerprintSensorConfigurations.addHidlSensors(hidlConfigStrings, context); +- } ++ new FingerprintSensorConfigurations(fingerprintAidlInstances != null ++ && fingerprintAidlInstances.length > 0); + + if (fingerprintAidlInstances != null && fingerprintAidlInstances.length > 0) { + mFingerprintSensorConfigurations.addAidlSensors(fingerprintAidlInstances); ++ } else if (hidlConfigStrings != null && hidlConfigStrings.length > 0) { ++ mFingerprintSensorConfigurations.addHidlSensors(hidlConfigStrings, context); + } + + if (fingerprintService != null) { +-- +2.44.0 + diff --git a/frameworks/base/0008-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch b/frameworks/base/0008-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch new file mode 100644 index 0000000..80643ad --- /dev/null +++ b/frameworks/base/0008-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch @@ -0,0 +1,150 @@ +From 0439e89b1442adc5d6bb2b876ca7bc87a0b0ebd1 Mon Sep 17 00:00:00 2001 +From: dhacker29 +Date: Tue, 24 Nov 2015 01:53:47 -0500 +Subject: [PATCH 08/12] fw/b: Use ro.build.version.incremental to signal OTA + upgrades + +Co-authored-by: maxwen +Co-authored-by: Sam Mortimer +Co-authored-by: Wang Han <416810799@qq.com> +Change-Id: If0eb969ba509981f9209ffa37a949d9042ef4c2a +--- + core/java/android/app/admin/SystemUpdateInfo.java | 4 ++-- + core/java/android/content/pm/PackagePartitions.java | 2 +- + .../java/com/android/server/appwidget/AppWidgetXmlUtil.java | 4 ++-- + .../java/com/android/server/pm/PackageManagerService.java | 5 +++-- + .../com/android/server/pm/PackageManagerServiceUtils.java | 3 +-- + services/core/java/com/android/server/pm/Settings.java | 2 +- + .../core/java/com/android/server/pm/ShortcutService.java | 2 +- + 7 files changed, 11 insertions(+), 11 deletions(-) + +diff --git a/core/java/android/app/admin/SystemUpdateInfo.java b/core/java/android/app/admin/SystemUpdateInfo.java +index 9e6c91f4e..7459b0e05 100644 +--- a/core/java/android/app/admin/SystemUpdateInfo.java ++++ b/core/java/android/app/admin/SystemUpdateInfo.java +@@ -133,7 +133,7 @@ public final class SystemUpdateInfo implements Parcelable { + out.startTag(null, tag); + out.attributeLong(null, ATTR_RECEIVED_TIME, mReceivedTime); + out.attributeInt(null, ATTR_SECURITY_PATCH_STATE, mSecurityPatchState); +- out.attribute(null, ATTR_ORIGINAL_BUILD , Build.FINGERPRINT); ++ out.attribute(null, ATTR_ORIGINAL_BUILD , Build.VERSION.INCREMENTAL); + out.endTag(null, tag); + } + +@@ -142,7 +142,7 @@ public final class SystemUpdateInfo implements Parcelable { + public static SystemUpdateInfo readFromXml(TypedXmlPullParser parser) { + // If an OTA has been applied (build fingerprint has changed), discard stale info. + final String buildFingerprint = parser.getAttributeValue(null, ATTR_ORIGINAL_BUILD ); +- if (!Build.FINGERPRINT.equals(buildFingerprint)) { ++ if (!Build.VERSION.INCREMENTAL.equals(buildFingerprint)) { + return null; + } + try { +diff --git a/core/java/android/content/pm/PackagePartitions.java b/core/java/android/content/pm/PackagePartitions.java +index ff80e614b..da3b68ecf 100644 +--- a/core/java/android/content/pm/PackagePartitions.java ++++ b/core/java/android/content/pm/PackagePartitions.java +@@ -131,7 +131,7 @@ public class PackagePartitions { + final String partitionName = SYSTEM_PARTITIONS.get(i).getName(); + digestProperties[i] = "ro." + partitionName + ".build.fingerprint"; + } +- digestProperties[SYSTEM_PARTITIONS.size()] = "ro.build.fingerprint"; // build fingerprint ++ digestProperties[SYSTEM_PARTITIONS.size()] = "ro.build.version.incremental"; + return SystemProperties.digestOf(digestProperties); + } + +diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetXmlUtil.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetXmlUtil.java +index ce9130ad5..737ecae1c 100644 +--- a/services/appwidget/java/com/android/server/appwidget/AppWidgetXmlUtil.java ++++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetXmlUtil.java +@@ -117,7 +117,7 @@ public class AppWidgetXmlUtil { + out.attributeInt(null, ATTR_WIDGET_FEATURES, info.widgetFeatures); + out.attributeInt(null, ATTR_DESCRIPTION_RES, info.descriptionRes); + out.attributeBoolean(null, ATTR_PROVIDER_INHERITANCE, info.isExtendedFromAppWidgetProvider); +- out.attribute(null, ATTR_OS_FINGERPRINT, Build.FINGERPRINT); ++ out.attribute(null, ATTR_OS_FINGERPRINT, Build.VERSION.INCREMENTAL); + } + + /** +@@ -128,7 +128,7 @@ public class AppWidgetXmlUtil { + @NonNull final TypedXmlPullParser parser) { + Objects.requireNonNull(parser); + final String fingerprint = parser.getAttributeValue(null, ATTR_OS_FINGERPRINT); +- if (!Build.FINGERPRINT.equals(fingerprint)) { ++ if (!Build.VERSION.INCREMENTAL.equals(fingerprint)) { + return null; + } + final AppWidgetProviderInfo info = new AppWidgetProviderInfo(); +diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java +index 611e0d862..0e343e18a 100644 +--- a/services/core/java/com/android/server/pm/PackageManagerService.java ++++ b/services/core/java/com/android/server/pm/PackageManagerService.java +@@ -2239,7 +2239,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService + if (mIsUpgrade) { + PackageManagerServiceUtils.logCriticalInfo(Log.INFO, + "Upgrading from " + ver.fingerprint + " (" + ver.buildFingerprint + ") to " +- + PackagePartitions.FINGERPRINT + " (" + Build.FINGERPRINT + ")"); ++ + PackagePartitions.FINGERPRINT ++ + " (" + Build.VERSION.INCREMENTAL + ")"); + } + mPriorSdkVersion = mIsUpgrade ? ver.sdkVersion : -1; + mInitAppsHelper = new InitAppsHelper(this, mApexManager, mInstallPackageHelper, +@@ -2397,7 +2398,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService + | Installer.FLAG_CLEAR_APP_DATA_KEEP_ART_PROFILES); + } + } +- ver.buildFingerprint = Build.FINGERPRINT; ++ ver.buildFingerprint = Build.VERSION.INCREMENTAL; + ver.fingerprint = PackagePartitions.FINGERPRINT; + } + +diff --git a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java +index 975758241..54527a6b0 100644 +--- a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java ++++ b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java +@@ -1400,8 +1400,6 @@ public class PackageManagerServiceUtils { + // that starts with "eng." to signify that this is an engineering build and not + // destined for release. + if (isUserDebugBuild && incrementalVersion.startsWith("eng.")) { +- Slog.w(TAG, "Wiping cache directory because the system partition changed."); +- + // Heuristic: If the /system directory has been modified recently due to an "adb sync" + // or a regular make, then blow away the cache. Note that mtimes are *NOT* reliable + // in general and should not be used for production changes. In this specific case, +@@ -1409,6 +1407,7 @@ public class PackageManagerServiceUtils { + File frameworkDir = + new File(Environment.getRootDirectory(), "framework"); + if (cacheDir.lastModified() < frameworkDir.lastModified()) { ++ Slog.w(TAG, "Wiping cache directory because the system partition changed."); + FileUtils.deleteContents(cacheBaseDir); + cacheDir = FileUtils.createDir(cacheBaseDir, cacheName); + } +diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java +index 1f672a093..bef67a838 100644 +--- a/services/core/java/com/android/server/pm/Settings.java ++++ b/services/core/java/com/android/server/pm/Settings.java +@@ -485,7 +485,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile + public void forceCurrent() { + sdkVersion = Build.VERSION.SDK_INT; + databaseVersion = CURRENT_DATABASE_VERSION; +- buildFingerprint = Build.FINGERPRINT; ++ buildFingerprint = Build.VERSION.INCREMENTAL; + fingerprint = PackagePartitions.FINGERPRINT; + } + } +diff --git a/services/core/java/com/android/server/pm/ShortcutService.java b/services/core/java/com/android/server/pm/ShortcutService.java +index 5518bfae8..e26eec659 100644 +--- a/services/core/java/com/android/server/pm/ShortcutService.java ++++ b/services/core/java/com/android/server/pm/ShortcutService.java +@@ -5259,7 +5259,7 @@ public class ShortcutService extends IShortcutService.Stub { + + // Injection point. + String injectBuildFingerprint() { +- return Build.FINGERPRINT; ++ return Build.VERSION.INCREMENTAL; + } + + final void wtf(String message) { +-- +2.44.0 + diff --git a/frameworks/base/0009-WebView-Add-check-before-setting-default-or-fallback.patch b/frameworks/base/0009-WebView-Add-check-before-setting-default-or-fallback.patch new file mode 100644 index 0000000..95e9bbb --- /dev/null +++ b/frameworks/base/0009-WebView-Add-check-before-setting-default-or-fallback.patch @@ -0,0 +1,134 @@ +From e9f37a43249f7816b78c4a8ce3a82f48db779567 Mon Sep 17 00:00:00 2001 +From: Pranav Vashi +Date: Sat, 21 Sep 2024 13:44:09 +0530 +Subject: [PATCH 09/12] WebView: Add check before setting default or fallback + provider + +Signed-off-by: Pranav Vashi +--- + .../webkit/WebViewUpdateServiceImpl.java | 14 ++++++-- + .../webkit/WebViewUpdateServiceImpl2.java | 34 ++++++++++++++----- + 2 files changed, 38 insertions(+), 10 deletions(-) + +diff --git a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java +index b9be4a2de..e98196f9f 100644 +--- a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java ++++ b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java +@@ -15,6 +15,7 @@ + */ + package com.android.server.webkit; + ++import android.app.AppGlobals; + import android.annotation.Nullable; + import android.content.pm.PackageInfo; + import android.content.pm.PackageManager.NameNotFoundException; +@@ -396,7 +397,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { + @Override + public WebViewProviderInfo getDefaultWebViewPackage() { + for (WebViewProviderInfo provider : getWebViewPackages()) { +- if (provider.availableByDefault) { ++ if (provider.availableByDefault && isPackageAvailable(provider.packageName)) { + return provider; + } + } +@@ -406,6 +407,15 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { + throw new AndroidRuntimeException("No available by default WebView Provider."); + } + ++ private static boolean isPackageAvailable(String packageName) { ++ try { ++ AppGlobals.getInitialApplication().getPackageManager().getPackageInfo(packageName, 0); ++ return true; ++ } catch (NameNotFoundException e) { ++ return false; ++ } ++ } ++ + private static class ProviderAndPackageInfo { + public final WebViewProviderInfo provider; + public final PackageInfo packageInfo; +@@ -644,7 +654,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { + */ + private static WebViewProviderInfo getFallbackProvider(WebViewProviderInfo[] webviewPackages) { + for (WebViewProviderInfo provider : webviewPackages) { +- if (provider.isFallback) { ++ if (provider.isFallback && isPackageAvailable(provider.packageName)) { + return provider; + } + } +diff --git a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java +index 307c15b72..26d1195dc 100644 +--- a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java ++++ b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java +@@ -15,6 +15,7 @@ + */ + package com.android.server.webkit; + ++import android.app.AppGlobals; + import android.annotation.Nullable; + import android.content.pm.PackageInfo; + import android.content.pm.PackageManager.NameNotFoundException; +@@ -112,7 +113,7 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { + + WebViewProviderInfo defaultProvider = null; + for (WebViewProviderInfo provider : webviewProviders) { +- if (provider.availableByDefault) { ++ if (provider.availableByDefault && isPackageAvailable(provider.packageName)) { + defaultProvider = provider; + break; + } +@@ -182,6 +183,15 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { + } + } + ++ private static boolean isPackageAvailable(String packageName) { ++ try { ++ AppGlobals.getInitialApplication().getPackageManager().getPackageInfo(packageName, 0); ++ return true; ++ } catch (NameNotFoundException e) { ++ return false; ++ } ++ } ++ + private boolean shouldTriggerRepairLocked() { + if (mAttemptedToRepairBefore) { + return false; +@@ -208,12 +218,20 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { + } + mAttemptedToRepairBefore = true; + } +- Slog.w( +- TAG, +- "No provider available for all users, trying to install and enable " +- + mDefaultProvider.packageName); +- mSystemInterface.installExistingPackageForAllUsers(mDefaultProvider.packageName); +- mSystemInterface.enablePackageForAllUsers(mDefaultProvider.packageName, true); ++ ++ WebViewProviderInfo[] webviewProviders = mSystemInterface.getWebViewPackages(); ++ WebViewProviderInfo fallbackProvider = getFallbackProvider(webviewProviders); ++ if (fallbackProvider != null) { ++ Slog.w(TAG, "No valid provider, trying to install and enable " ++ + fallbackProvider.packageName); ++ mSystemInterface.installExistingPackageForAllUsers(fallbackProvider.packageName); ++ mSystemInterface.enablePackageForAllUsers(fallbackProvider.packageName, true); ++ } else { ++ Slog.w(TAG, "No provider available for all users, trying to install and enable " ++ + mDefaultProvider.packageName); ++ mSystemInterface.installExistingPackageForAllUsers(mDefaultProvider.packageName); ++ mSystemInterface.enablePackageForAllUsers(mDefaultProvider.packageName, true); ++ } + } + + @Override +@@ -701,7 +719,7 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { + */ + private static WebViewProviderInfo getFallbackProvider(WebViewProviderInfo[] webviewPackages) { + for (WebViewProviderInfo provider : webviewPackages) { +- if (provider.isFallback) { ++ if (provider.isFallback && isPackageAvailable(provider.packageName)) { + return provider; + } + } +-- +2.44.0 + diff --git a/frameworks/base/0010-Add-support-for-treating-virtual-biometric-sensors-a.patch b/frameworks/base/0010-Add-support-for-treating-virtual-biometric-sensors-a.patch new file mode 100644 index 0000000..171abf4 --- /dev/null +++ b/frameworks/base/0010-Add-support-for-treating-virtual-biometric-sensors-a.patch @@ -0,0 +1,49 @@ +From 63814a8d4c25c343a7f3d3374ed4f085517fa8d0 Mon Sep 17 00:00:00 2001 +From: Peter Cai +Date: Sat, 21 Dec 2024 11:04:35 -0500 +Subject: [PATCH 10/12] Add support for treating virtual biometric sensors as + real ones + +This happens on Unihertz Jelly Max. They forgot to change their sensor +instance name from "virtual" to something else. + +Change-Id: I106d41cd078e6b1e354c72ec35fa240a44397c5e +--- + .../fingerprint/FingerprintSensorConfigurations.java | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/core/java/android/hardware/fingerprint/FingerprintSensorConfigurations.java b/core/java/android/hardware/fingerprint/FingerprintSensorConfigurations.java +index 48c5887d8..bec56d9a6 100644 +--- a/core/java/android/hardware/fingerprint/FingerprintSensorConfigurations.java ++++ b/core/java/android/hardware/fingerprint/FingerprintSensorConfigurations.java +@@ -29,6 +29,7 @@ import android.os.Parcel; + import android.os.Parcelable; + import android.os.RemoteException; + import android.os.ServiceManager; ++import android.os.SystemProperties; + import android.util.Log; + import android.util.Slog; + +@@ -172,6 +173,10 @@ public class FingerprintSensorConfigurations implements Parcelable { + * @return real fqName + */ + public static String remapFqName(String fqName) { ++ if (SystemProperties.getBoolean("persist.sys.phh.virtual_sensors_are_real", false)) { ++ return fqName; ++ } ++ + if (!fqName.contains(IFingerprint.DESCRIPTOR + "/virtual")) { + return fqName; //no remap needed for real hardware HAL + } else { +@@ -185,7 +190,7 @@ public class FingerprintSensorConfigurations implements Parcelable { + * @return aidl interface + */ + public static IFingerprint getIFingerprint(String fqName) { +- if (fqName.contains("virtual")) { ++ if (fqName.contains("virtual") && !SystemProperties.getBoolean("persist.sys.phh.virtual_sensors_are_real", false)) { + String fqNameMapped = remapFqName(fqName); + Slog.i(TAG, "getIFingerprint fqName is mapped: " + fqName + "->" + fqNameMapped); + try { +-- +2.44.0 + diff --git a/frameworks/base/0011-Allow-signature-spoofing-for-microG-Companion-Servic.patch b/frameworks/base/0011-Allow-signature-spoofing-for-microG-Companion-Servic.patch new file mode 100644 index 0000000..a1b057a --- /dev/null +++ b/frameworks/base/0011-Allow-signature-spoofing-for-microG-Companion-Servic.patch @@ -0,0 +1,229 @@ +From 73a7c9dcfd0752557d08d0e5972aa1ec9cad766a Mon Sep 17 00:00:00 2001 +From: LuK1337 +Date: Mon, 19 Feb 2024 16:20:04 +0100 +Subject: [PATCH 11/12] Allow signature spoofing for microG Companion/Services + +This patch enables signature spoofing when the following conditions are +met: +* Build is debuggable (userdebug/eng) +* Package name is com.android.vending or com.google.android.gms +* Package is signed with microG release keys +* Fake signature is correct + +Additionally, we let these apps be forceQueryable if they so desire. + +Change-Id: I8fc82ed266a2cc59636b662c7ea7e29c94f509b5 +--- + .../com/android/server/pm/AppsFilterImpl.java | 2 + + .../com/android/server/pm/ComputerEngine.java | 54 +++++++++++++++++++ + services/core/jni/Android.bp | 7 +++ + .../com_android_server_pm_ComputerEngine.cpp | 38 +++++++++++++ + services/core/jni/onload.cpp | 2 + + 5 files changed, 103 insertions(+) + create mode 100644 services/core/jni/com_android_server_pm_ComputerEngine.cpp + +diff --git a/services/core/java/com/android/server/pm/AppsFilterImpl.java b/services/core/java/com/android/server/pm/AppsFilterImpl.java +index cc4c2b5bf..57263da93 100644 +--- a/services/core/java/com/android/server/pm/AppsFilterImpl.java ++++ b/services/core/java/com/android/server/pm/AppsFilterImpl.java +@@ -36,6 +36,7 @@ import static com.android.server.pm.AppsFilterUtils.canQueryAsUpdateOwner; + import static com.android.server.pm.AppsFilterUtils.canQueryViaComponents; + import static com.android.server.pm.AppsFilterUtils.canQueryViaPackage; + import static com.android.server.pm.AppsFilterUtils.canQueryViaUsesLibrary; ++import static com.android.server.pm.ComputerEngine.isMicrogSigned; + + import android.annotation.NonNull; + import android.annotation.Nullable; +@@ -599,6 +600,7 @@ public final class AppsFilterImpl extends AppsFilterLocked implements Watchable, + newIsForceQueryable = mForceQueryable.contains(newPkgSetting.getAppId()) + /* shared user that is already force queryable */ + || newPkgSetting.isForceQueryableOverride() /* adb override */ ++ || (newPkg.isForceQueryable() && isMicrogSigned(newPkg)) + || (newPkgSetting.isSystem() && (mSystemAppsQueryable + || newPkg.isForceQueryable() + || ArrayUtils.contains(mForceQueryableByDevicePackageNames, +diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java +index 4665a72b0..2f73bb836 100644 +--- a/services/core/java/com/android/server/pm/ComputerEngine.java ++++ b/services/core/java/com/android/server/pm/ComputerEngine.java +@@ -102,6 +102,7 @@ import android.content.pm.UserPackage; + import android.content.pm.VersionedPackage; + import android.os.Binder; + import android.os.Build; ++import android.os.Bundle; + import android.os.IBinder; + import android.os.ParcelableException; + import android.os.PatternMatcher; +@@ -174,6 +175,7 @@ import java.util.Collections; + import java.util.Comparator; + import java.util.List; + import java.util.Objects; ++import java.util.Optional; + import java.util.Set; + import java.util.UUID; + +@@ -422,6 +424,10 @@ public class ComputerEngine implements Computer { + private final PackageManagerInternal.ExternalSourcesPolicy mExternalSourcesPolicy; + private final CrossProfileIntentResolverEngine mCrossProfileIntentResolverEngine; + ++ // Signatures used by microG ++ private static final Signature MICROG_FAKE_SIGNATURE = new Signature("308204433082032ba003020102020900c2e08746644a308d300d06092a864886f70d01010405003074310b3009060355040613025553311330110603550408130a43616c69666f726e6961311630140603550407130d4d6f756e7461696e205669657731143012060355040a130b476f6f676c6520496e632e3110300e060355040b1307416e64726f69643110300e06035504031307416e64726f6964301e170d3038303832313233313333345a170d3336303130373233313333345a3074310b3009060355040613025553311330110603550408130a43616c69666f726e6961311630140603550407130d4d6f756e7461696e205669657731143012060355040a130b476f6f676c6520496e632e3110300e060355040b1307416e64726f69643110300e06035504031307416e64726f696430820120300d06092a864886f70d01010105000382010d00308201080282010100ab562e00d83ba208ae0a966f124e29da11f2ab56d08f58e2cca91303e9b754d372f640a71b1dcb130967624e4656a7776a92193db2e5bfb724a91e77188b0e6a47a43b33d9609b77183145ccdf7b2e586674c9e1565b1f4c6a5955bff251a63dabf9c55c27222252e875e4f8154a645f897168c0b1bfc612eabf785769bb34aa7984dc7e2ea2764cae8307d8c17154d7ee5f64a51a44a602c249054157dc02cd5f5c0e55fbef8519fbe327f0b1511692c5a06f19d18385f5c4dbc2d6b93f68cc2979c70e18ab93866b3bd5db8999552a0e3b4c99df58fb918bedc182ba35e003c1b4b10dd244a8ee24fffd333872ab5221985edab0fc0d0b145b6aa192858e79020103a381d93081d6301d0603551d0e04160414c77d8cc2211756259a7fd382df6be398e4d786a53081a60603551d2304819e30819b8014c77d8cc2211756259a7fd382df6be398e4d786a5a178a4763074310b3009060355040613025553311330110603550408130a43616c69666f726e6961311630140603550407130d4d6f756e7461696e205669657731143012060355040a130b476f6f676c6520496e632e3110300e060355040b1307416e64726f69643110300e06035504031307416e64726f6964820900c2e08746644a308d300c0603551d13040530030101ff300d06092a864886f70d010104050003820101006dd252ceef85302c360aaace939bcff2cca904bb5d7a1661f8ae46b2994204d0ff4a68c7ed1a531ec4595a623ce60763b167297a7ae35712c407f208f0cb109429124d7b106219c084ca3eb3f9ad5fb871ef92269a8be28bf16d44c8d9a08e6cb2f005bb3fe2cb96447e868e731076ad45b33f6009ea19c161e62641aa99271dfd5228c5c587875ddb7f452758d661f6cc0cccb7352e424cc4365c523532f7325137593c4ae341f4db41edda0d0b1071a7c440f0fe9ea01cb627ca674369d084bd2fd911ff06cdbf2cfa10dc0f893ae35762919048c7efc64c7144178342f70581c9de573af55b390dd7fdb9418631895d5f759f30112687ff621410c069308a"); ++ private static final Signature MICROG_REAL_SIGNATURE = new Signature("308202ed308201d5a003020102020426ffa009300d06092a864886f70d01010b05003027310b300906035504061302444531183016060355040a130f4e4f47415050532050726f6a656374301e170d3132313030363132303533325a170d3337303933303132303533325a3027310b300906035504061302444531183016060355040a130f4e4f47415050532050726f6a65637430820122300d06092a864886f70d01010105000382010f003082010a02820101009a8d2a5336b0eaaad89ce447828c7753b157459b79e3215dc962ca48f58c2cd7650df67d2dd7bda0880c682791f32b35c504e43e77b43c3e4e541f86e35a8293a54fb46e6b16af54d3a4eda458f1a7c8bc1b7479861ca7043337180e40079d9cdccb7e051ada9b6c88c9ec635541e2ebf0842521c3024c826f6fd6db6fd117c74e859d5af4db04448965ab5469b71ce719939a06ef30580f50febf96c474a7d265bb63f86a822ff7b643de6b76e966a18553c2858416cf3309dd24278374bdd82b4404ef6f7f122cec93859351fc6e5ea947e3ceb9d67374fe970e593e5cd05c905e1d24f5a5484f4aadef766e498adf64f7cf04bddd602ae8137b6eea40722d0203010001a321301f301d0603551d0e04160414110b7aa9ebc840b20399f69a431f4dba6ac42a64300d06092a864886f70d01010b0500038201010007c32ad893349cf86952fb5a49cfdc9b13f5e3c800aece77b2e7e0e9c83e34052f140f357ec7e6f4b432dc1ed542218a14835acd2df2deea7efd3fd5e8f1c34e1fb39ec6a427c6e6f4178b609b369040ac1f8844b789f3694dc640de06e44b247afed11637173f36f5886170fafd74954049858c6096308fc93c1bc4dd5685fa7a1f982a422f2a3b36baa8c9500474cf2af91c39cbec1bc898d10194d368aa5e91f1137ec115087c31962d8f76cd120d28c249cf76f4c70f5baa08c70a7234ce4123be080cee789477401965cfe537b924ef36747e8caca62dfefdd1a6288dcb1c4fd2aaa6131a7ad254e9742022cfd597d2ca5c660ce9e41ff537e5a4041e37"); ++ + // PackageManagerService attributes that are primitives are referenced through the + // pms object directly. Primitives are the only attributes so referenced. + protected final PackageManagerService mService; +@@ -1481,6 +1487,49 @@ public class ComputerEngine implements Computer { + return result; + } + ++ private static native boolean isDebuggable(); ++ ++ public static boolean isMicrogSigned(AndroidPackage p) { ++ if (!isDebuggable()) { ++ return false; ++ } ++ ++ // Allowlist the following apps: ++ // * com.android.vending - microG Companion ++ // * com.google.android.gms - microG Services ++ if (!p.getPackageName().equals("com.android.vending") && ++ !p.getPackageName().equals("com.google.android.gms")) { ++ return false; ++ } ++ ++ return Signature.areExactMatch( ++ p.getSigningDetails(), new Signature[]{MICROG_REAL_SIGNATURE}); ++ } ++ ++ private static Optional generateFakeSignature(AndroidPackage p) { ++ if (!isMicrogSigned(p)) { ++ return Optional.empty(); ++ } ++ ++ Bundle metadata = p.getMetaData(); ++ if (metadata == null) { ++ return Optional.empty(); ++ } ++ ++ String fakeSignatureStr = metadata.getString("fake-signature"); ++ if (TextUtils.isEmpty(fakeSignatureStr)) { ++ return Optional.empty(); ++ } ++ ++ // Only MICROG_FAKE_SIGNATURE can be faked ++ Signature fakeSignature = new Signature(fakeSignatureStr); ++ if (!fakeSignature.equals(MICROG_FAKE_SIGNATURE)) { ++ return Optional.empty(); ++ } ++ ++ return Optional.of(fakeSignature); ++ } ++ + public final PackageInfo generatePackageInfo(PackageStateInternal ps, + @PackageManager.PackageInfoFlagsBits long flags, int userId) { + if (!mUserManager.exists(userId)) return null; +@@ -1536,6 +1585,11 @@ public class ComputerEngine implements Computer { + mApexManager.getActivePackageNameForApexModuleName(apexModuleName)); + } + } ++ ++ generateFakeSignature(p).ifPresent(fakeSignature -> { ++ packageInfo.signatures = new Signature[]{fakeSignature}; ++ }); ++ + return packageInfo; + } else if ((flags & (MATCH_UNINSTALLED_PACKAGES | MATCH_ARCHIVED_PACKAGES)) != 0 + && PackageUserStateUtils.isAvailable(state, flags)) { +diff --git a/services/core/jni/Android.bp b/services/core/jni/Android.bp +index a5085fc31..9a1d2bc2b 100644 +--- a/services/core/jni/Android.bp ++++ b/services/core/jni/Android.bp +@@ -74,6 +74,7 @@ cc_library_static { + "com_android_server_vibrator_VibratorManagerService.cpp", + "com_android_server_pdb_PersistentDataBlockService.cpp", + "com_android_server_am_LowMemDetector.cpp", ++ "com_android_server_pm_ComputerEngine.cpp", + "com_android_server_pm_PackageManagerShellCommandDataLoader.cpp", + "com_android_server_sensor_SensorService.cpp", + "com_android_server_wm_TaskFpsCallbackController.cpp", +@@ -97,6 +98,12 @@ cc_library_static { + header_libs: [ + "bionic_libc_platform_headers", + ], ++ ++ product_variables: { ++ debuggable: { ++ cflags: ["-DANDROID_DEBUGGABLE"], ++ } ++ }, + } + + cc_defaults { +diff --git a/services/core/jni/com_android_server_pm_ComputerEngine.cpp b/services/core/jni/com_android_server_pm_ComputerEngine.cpp +new file mode 100644 +index 000000000..bbe298097 +--- /dev/null ++++ b/services/core/jni/com_android_server_pm_ComputerEngine.cpp +@@ -0,0 +1,38 @@ ++/* ++ * Copyright (C) 2024 The LineageOS Project ++ * ++ * Licensed under the Apache License, Version 2.0 (the "License"); ++ * you may not use this file except in compliance with the License. ++ * You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the License for the specific language governing permissions and ++ * limitations under the License. ++ */ ++ ++#include ++ ++namespace android { ++ ++static bool isDebuggable(JNIEnv* env) { ++#ifdef ANDROID_DEBUGGABLE ++ return true; ++#else ++ return false; ++#endif ++} ++ ++static const JNINativeMethod method_table[] = { ++ {"isDebuggable", "()Z", (void*)isDebuggable}, ++}; ++ ++int register_android_server_com_android_server_pm_ComputerEngine(JNIEnv* env) { ++ return jniRegisterNativeMethods(env, "com/android/server/pm/ComputerEngine", ++ method_table, NELEM(method_table)); ++} ++ ++} // namespace android +diff --git a/services/core/jni/onload.cpp b/services/core/jni/onload.cpp +index 3c55d1824..5fac851d9 100644 +--- a/services/core/jni/onload.cpp ++++ b/services/core/jni/onload.cpp +@@ -59,6 +59,7 @@ int register_android_server_am_LowMemDetector(JNIEnv* env); + int register_android_server_utils_AnrTimer(JNIEnv *env); + int register_com_android_server_soundtrigger_middleware_AudioSessionProviderImpl(JNIEnv* env); + int register_com_android_server_soundtrigger_middleware_ExternalCaptureStateTracker(JNIEnv* env); ++int register_android_server_com_android_server_pm_ComputerEngine(JNIEnv* env); + int register_android_server_com_android_server_pm_PackageManagerShellCommandDataLoader(JNIEnv* env); + int register_android_server_AdbDebuggingManager(JNIEnv* env); + int register_android_server_FaceService(JNIEnv* env); +@@ -124,6 +125,7 @@ extern "C" jint JNI_OnLoad(JavaVM* vm, void* /* reserved */) + register_android_server_utils_AnrTimer(env); + register_com_android_server_soundtrigger_middleware_AudioSessionProviderImpl(env); + register_com_android_server_soundtrigger_middleware_ExternalCaptureStateTracker(env); ++ register_android_server_com_android_server_pm_ComputerEngine(env); + register_android_server_com_android_server_pm_PackageManagerShellCommandDataLoader(env); + register_android_server_AdbDebuggingManager(env); + register_android_server_FaceService(env); +-- +2.44.0 + diff --git a/frameworks/base/0012-Allow-spoofing-signingInfo-for-microG-Companion-Serv.patch b/frameworks/base/0012-Allow-spoofing-signingInfo-for-microG-Companion-Serv.patch new file mode 100644 index 0000000..4d0258a --- /dev/null +++ b/frameworks/base/0012-Allow-spoofing-signingInfo-for-microG-Companion-Serv.patch @@ -0,0 +1,49 @@ +From 125054a90b153342a08cebf025e8752fe0113b36 Mon Sep 17 00:00:00 2001 +From: Jonathan Klee +Date: Thu, 12 Dec 2024 15:27:57 +0100 +Subject: [PATCH 12/12] Allow spoofing signingInfo for microG + Companion/Services + +- Spoof PackageInfo signingInfo + signatures so that + G suite apps do not complain anymore. + +Change-Id: I86f182c9e1d18b0e997803842577a90ef740cfd1 +Signed-off-by: althafvly +--- + .../java/com/android/server/pm/ComputerEngine.java | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java +index 2f73bb836..4cf099aed 100644 +--- a/services/core/java/com/android/server/pm/ComputerEngine.java ++++ b/services/core/java/com/android/server/pm/ComputerEngine.java +@@ -168,6 +168,7 @@ import java.io.FileOutputStream; + import java.io.IOException; + import java.io.PrintWriter; + import java.nio.charset.StandardCharsets; ++import java.security.cert.CertificateException; + import java.util.ArrayList; + import java.util.Arrays; + import java.util.Collection; +@@ -1588,6 +1589,18 @@ public class ComputerEngine implements Computer { + + generateFakeSignature(p).ifPresent(fakeSignature -> { + packageInfo.signatures = new Signature[]{fakeSignature}; ++ try { ++ packageInfo.signingInfo = new SigningInfo( ++ new SigningDetails( ++ packageInfo.signatures, ++ SigningDetails.SignatureSchemeVersion.SIGNING_BLOCK_V3, ++ SigningDetails.toSigningKeys(packageInfo.signatures), ++ null ++ ) ++ ); ++ } catch (CertificateException e) { ++ Slog.e(TAG, "Caught an exception when creating signing keys: ", e); ++ } + }); + + return packageInfo; +-- +2.44.0 + From 489a84f1eeba8059f3b373f88a776313f72ab8b4 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sun, 26 Jan 2025 09:24:11 -0500 Subject: [PATCH 42/43] Fix fw/b patches --- ...support-glob-matching-for-properties.patch | 2 +- ...PackageUtils-Add-glob-matching-suppo.patch | 2 +- .../base/0003-Global-VPN-feature-1-2.patch | 2 +- ...ze-boot-animation-to-match-screen-si.patch | 2 +- ...ateForSlotIndex-in-SubscriptionManag.patch | 2 +- ...CallingIdentity-variant-with-both-ex.patch | 2 +- ...spoofing-for-microG-Companion-Servic.patch | 138 ---------------- ...-and-AIDL-fingerprint-services-are-m.patch | 2 +- ...-and-AIDL-fingerprint-services-are-m.patch | 42 ----- ...d.version.incremental-to-signal-OTA-.patch | 2 +- ...k-before-setting-default-or-fallback.patch | 2 +- ...d.version.incremental-to-signal-OTA-.patch | 150 ------------------ ...treating-virtual-biometric-sensors-a.patch | 2 +- ...k-before-setting-default-or-fallback.patch | 134 ---------------- ...treating-virtual-biometric-sensors-a.patch | 49 ------ ...spoofing-for-microG-Companion-Servic.patch | 2 +- ...igningInfo-for-microG-Companion-Serv.patch | 2 +- 17 files changed, 12 insertions(+), 525 deletions(-) delete mode 100644 frameworks/base/0007-Allow-signature-spoofing-for-microG-Companion-Servic.patch delete mode 100644 frameworks/base/0008-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch delete mode 100644 frameworks/base/0009-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch delete mode 100644 frameworks/base/0010-WebView-Add-check-before-setting-default-or-fallback.patch delete mode 100644 frameworks/base/0011-Add-support-for-treating-virtual-biometric-sensors-a.patch diff --git a/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch b/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch index d1fb022..026685c 100644 --- a/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch +++ b/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch @@ -1,4 +1,4 @@ -From 2b9fc3684d24ff3276f18c4de93402cf7d92e5c3 Mon Sep 17 00:00:00 2001 +From c4c114b281293a309e3f6b071292cf15b9939140 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Tue, 12 Oct 2021 21:37:22 -0400 Subject: [PATCH 01/12] PackageParser: support glob matching for properties diff --git a/frameworks/base/0002-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch b/frameworks/base/0002-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch index 32e344b..1c2cdfe 100644 --- a/frameworks/base/0002-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch +++ b/frameworks/base/0002-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch @@ -1,4 +1,4 @@ -From 6de413c8d88d2d6f02e81a4247af47b506ea4451 Mon Sep 17 00:00:00 2001 +From dc8561a3246568896b4b318ef479795cfe3e2ab3 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 2 Sep 2022 21:36:06 -0400 Subject: [PATCH 02/12] FrameworkParsingPackageUtils: Add glob matching support diff --git a/frameworks/base/0003-Global-VPN-feature-1-2.patch b/frameworks/base/0003-Global-VPN-feature-1-2.patch index d3a52d6..b1999f3 100644 --- a/frameworks/base/0003-Global-VPN-feature-1-2.patch +++ b/frameworks/base/0003-Global-VPN-feature-1-2.patch @@ -1,4 +1,4 @@ -From a5c2cffdac5181c437437fee002526d43a080c51 Mon Sep 17 00:00:00 2001 +From 8d6c74e9e8b2fea7686d1b6f2988af42d5f155c1 Mon Sep 17 00:00:00 2001 From: Oliver Scott Date: Thu, 8 Jul 2021 10:41:43 -0400 Subject: [PATCH 03/12] Global VPN feature [1/2] diff --git a/frameworks/base/0004-Dynamically-resize-boot-animation-to-match-screen-si.patch b/frameworks/base/0004-Dynamically-resize-boot-animation-to-match-screen-si.patch index 3e9a45b..92e736d 100644 --- a/frameworks/base/0004-Dynamically-resize-boot-animation-to-match-screen-si.patch +++ b/frameworks/base/0004-Dynamically-resize-boot-animation-to-match-screen-si.patch @@ -1,4 +1,4 @@ -From 1357225dd52f3f2a6a1766c33eca32506b8f7ac2 Mon Sep 17 00:00:00 2001 +From eb8e7dd21a6ec1daa87f0e49d3f890b2074539e9 Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Mon, 20 Dec 2021 15:01:41 -0500 Subject: [PATCH 04/12] Dynamically resize boot animation to match screen size diff --git a/frameworks/base/0005-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch b/frameworks/base/0005-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch index bdace07..494a15c 100644 --- a/frameworks/base/0005-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch +++ b/frameworks/base/0005-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch @@ -1,4 +1,4 @@ -From f89ddfd215de9269559afdd6b23e4eca56da8eef Mon Sep 17 00:00:00 2001 +From 255d90a95d3fb2c0b3b94e77fd787316b864a845 Mon Sep 17 00:00:00 2001 From: Andy CrossGate Yan Date: Wed, 2 Aug 2023 20:59:53 +0800 Subject: [PATCH 05/12] Restore getSimStateForSlotIndex in SubscriptionManager diff --git a/frameworks/base/0006-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch b/frameworks/base/0006-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch index 1c73094..59998b3 100644 --- a/frameworks/base/0006-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch +++ b/frameworks/base/0006-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch @@ -1,4 +1,4 @@ -From 6ed2fcbdc5aaadd1bb29f8bfd80cf9200515acb0 Mon Sep 17 00:00:00 2001 +From 23f602ae89883965cb8eee0b7b8000550104b535 Mon Sep 17 00:00:00 2001 From: Andy CrossGate Yan Date: Sat, 12 Aug 2023 20:11:17 +0800 Subject: [PATCH 06/12] Add runWithCleanCallingIdentity variant with both diff --git a/frameworks/base/0007-Allow-signature-spoofing-for-microG-Companion-Servic.patch b/frameworks/base/0007-Allow-signature-spoofing-for-microG-Companion-Servic.patch deleted file mode 100644 index 9cf9f0c..0000000 --- a/frameworks/base/0007-Allow-signature-spoofing-for-microG-Companion-Servic.patch +++ /dev/null @@ -1,138 +0,0 @@ -From 33667f43e841a799a6e34c28fecfce5fb7f470ef Mon Sep 17 00:00:00 2001 -From: LuK1337 -Date: Mon, 19 Feb 2024 16:20:04 +0100 -Subject: [PATCH 07/11] Allow signature spoofing for microG Companion/Services - -This patch enables signature spoofing when the following conditions are -met: -* Build is debuggable (userdebug/eng) -* Package name is com.android.vending or com.google.android.gms -* Package is signed with microG release keys -* Fake signature is correct - -Additionally, we let these apps be forceQueryable if they so desire. - -phh change: No need to be debuggable - -Change-Id: I8fc82ed266a2cc59636b662c7ea7e29c94f509b5 ---- - .../com/android/server/pm/AppsFilterImpl.java | 2 + - .../com/android/server/pm/ComputerEngine.java | 47 +++++++++++++++++++ - 2 files changed, 49 insertions(+) - -diff --git a/services/core/java/com/android/server/pm/AppsFilterImpl.java b/services/core/java/com/android/server/pm/AppsFilterImpl.java -index cc4c2b5bf..57263da93 100644 ---- a/services/core/java/com/android/server/pm/AppsFilterImpl.java -+++ b/services/core/java/com/android/server/pm/AppsFilterImpl.java -@@ -36,6 +36,7 @@ import static com.android.server.pm.AppsFilterUtils.canQueryAsUpdateOwner; - import static com.android.server.pm.AppsFilterUtils.canQueryViaComponents; - import static com.android.server.pm.AppsFilterUtils.canQueryViaPackage; - import static com.android.server.pm.AppsFilterUtils.canQueryViaUsesLibrary; -+import static com.android.server.pm.ComputerEngine.isMicrogSigned; - - import android.annotation.NonNull; - import android.annotation.Nullable; -@@ -599,6 +600,7 @@ public final class AppsFilterImpl extends AppsFilterLocked implements Watchable, - newIsForceQueryable = mForceQueryable.contains(newPkgSetting.getAppId()) - /* shared user that is already force queryable */ - || newPkgSetting.isForceQueryableOverride() /* adb override */ -+ || (newPkg.isForceQueryable() && isMicrogSigned(newPkg)) - || (newPkgSetting.isSystem() && (mSystemAppsQueryable - || newPkg.isForceQueryable() - || ArrayUtils.contains(mForceQueryableByDevicePackageNames, -diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java -index 4665a72b0..ff736f3d0 100644 ---- a/services/core/java/com/android/server/pm/ComputerEngine.java -+++ b/services/core/java/com/android/server/pm/ComputerEngine.java -@@ -102,6 +102,7 @@ import android.content.pm.UserPackage; - import android.content.pm.VersionedPackage; - import android.os.Binder; - import android.os.Build; -+import android.os.Bundle; - import android.os.IBinder; - import android.os.ParcelableException; - import android.os.PatternMatcher; -@@ -174,6 +175,7 @@ import java.util.Collections; - import java.util.Comparator; - import java.util.List; - import java.util.Objects; -+import java.util.Optional; - import java.util.Set; - import java.util.UUID; - -@@ -422,6 +424,10 @@ public class ComputerEngine implements Computer { - private final PackageManagerInternal.ExternalSourcesPolicy mExternalSourcesPolicy; - private final CrossProfileIntentResolverEngine mCrossProfileIntentResolverEngine; - -+ // Signatures used by microG -+ private static final Signature MICROG_FAKE_SIGNATURE = new Signature("308204433082032ba003020102020900c2e08746644a308d300d06092a864886f70d01010405003074310b3009060355040613025553311330110603550408130a43616c69666f726e6961311630140603550407130d4d6f756e7461696e205669657731143012060355040a130b476f6f676c6520496e632e3110300e060355040b1307416e64726f69643110300e06035504031307416e64726f6964301e170d3038303832313233313333345a170d3336303130373233313333345a3074310b3009060355040613025553311330110603550408130a43616c69666f726e6961311630140603550407130d4d6f756e7461696e205669657731143012060355040a130b476f6f676c6520496e632e3110300e060355040b1307416e64726f69643110300e06035504031307416e64726f696430820120300d06092a864886f70d01010105000382010d00308201080282010100ab562e00d83ba208ae0a966f124e29da11f2ab56d08f58e2cca91303e9b754d372f640a71b1dcb130967624e4656a7776a92193db2e5bfb724a91e77188b0e6a47a43b33d9609b77183145ccdf7b2e586674c9e1565b1f4c6a5955bff251a63dabf9c55c27222252e875e4f8154a645f897168c0b1bfc612eabf785769bb34aa7984dc7e2ea2764cae8307d8c17154d7ee5f64a51a44a602c249054157dc02cd5f5c0e55fbef8519fbe327f0b1511692c5a06f19d18385f5c4dbc2d6b93f68cc2979c70e18ab93866b3bd5db8999552a0e3b4c99df58fb918bedc182ba35e003c1b4b10dd244a8ee24fffd333872ab5221985edab0fc0d0b145b6aa192858e79020103a381d93081d6301d0603551d0e04160414c77d8cc2211756259a7fd382df6be398e4d786a53081a60603551d2304819e30819b8014c77d8cc2211756259a7fd382df6be398e4d786a5a178a4763074310b3009060355040613025553311330110603550408130a43616c69666f726e6961311630140603550407130d4d6f756e7461696e205669657731143012060355040a130b476f6f676c6520496e632e3110300e060355040b1307416e64726f69643110300e06035504031307416e64726f6964820900c2e08746644a308d300c0603551d13040530030101ff300d06092a864886f70d010104050003820101006dd252ceef85302c360aaace939bcff2cca904bb5d7a1661f8ae46b2994204d0ff4a68c7ed1a531ec4595a623ce60763b167297a7ae35712c407f208f0cb109429124d7b106219c084ca3eb3f9ad5fb871ef92269a8be28bf16d44c8d9a08e6cb2f005bb3fe2cb96447e868e731076ad45b33f6009ea19c161e62641aa99271dfd5228c5c587875ddb7f452758d661f6cc0cccb7352e424cc4365c523532f7325137593c4ae341f4db41edda0d0b1071a7c440f0fe9ea01cb627ca674369d084bd2fd911ff06cdbf2cfa10dc0f893ae35762919048c7efc64c7144178342f70581c9de573af55b390dd7fdb9418631895d5f759f30112687ff621410c069308a"); -+ private static final Signature MICROG_REAL_SIGNATURE = new Signature("308202ed308201d5a003020102020426ffa009300d06092a864886f70d01010b05003027310b300906035504061302444531183016060355040a130f4e4f47415050532050726f6a656374301e170d3132313030363132303533325a170d3337303933303132303533325a3027310b300906035504061302444531183016060355040a130f4e4f47415050532050726f6a65637430820122300d06092a864886f70d01010105000382010f003082010a02820101009a8d2a5336b0eaaad89ce447828c7753b157459b79e3215dc962ca48f58c2cd7650df67d2dd7bda0880c682791f32b35c504e43e77b43c3e4e541f86e35a8293a54fb46e6b16af54d3a4eda458f1a7c8bc1b7479861ca7043337180e40079d9cdccb7e051ada9b6c88c9ec635541e2ebf0842521c3024c826f6fd6db6fd117c74e859d5af4db04448965ab5469b71ce719939a06ef30580f50febf96c474a7d265bb63f86a822ff7b643de6b76e966a18553c2858416cf3309dd24278374bdd82b4404ef6f7f122cec93859351fc6e5ea947e3ceb9d67374fe970e593e5cd05c905e1d24f5a5484f4aadef766e498adf64f7cf04bddd602ae8137b6eea40722d0203010001a321301f301d0603551d0e04160414110b7aa9ebc840b20399f69a431f4dba6ac42a64300d06092a864886f70d01010b0500038201010007c32ad893349cf86952fb5a49cfdc9b13f5e3c800aece77b2e7e0e9c83e34052f140f357ec7e6f4b432dc1ed542218a14835acd2df2deea7efd3fd5e8f1c34e1fb39ec6a427c6e6f4178b609b369040ac1f8844b789f3694dc640de06e44b247afed11637173f36f5886170fafd74954049858c6096308fc93c1bc4dd5685fa7a1f982a422f2a3b36baa8c9500474cf2af91c39cbec1bc898d10194d368aa5e91f1137ec115087c31962d8f76cd120d28c249cf76f4c70f5baa08c70a7234ce4123be080cee789477401965cfe537b924ef36747e8caca62dfefdd1a6288dcb1c4fd2aaa6131a7ad254e9742022cfd597d2ca5c660ce9e41ff537e5a4041e37"); -+ - // PackageManagerService attributes that are primitives are referenced through the - // pms object directly. Primitives are the only attributes so referenced. - protected final PackageManagerService mService; -@@ -1481,6 +1487,42 @@ public class ComputerEngine implements Computer { - return result; - } - -+ public static boolean isMicrogSigned(AndroidPackage p) { -+ // Allowlist the following apps: -+ // * com.android.vending - microG Companion -+ // * com.google.android.gms - microG Services -+ if (!p.getPackageName().equals("com.android.vending") && -+ !p.getPackageName().equals("com.google.android.gms")) { -+ return false; -+ } -+ return Signature.areExactMatch( -+ p.getSigningDetails(), new Signature[]{MICROG_REAL_SIGNATURE}); -+ } -+ -+ private static Optional generateFakeSignature(AndroidPackage p) { -+ if (!isMicrogSigned(p)) { -+ return Optional.empty(); -+ } -+ -+ Bundle metadata = p.getMetaData(); -+ if (metadata == null) { -+ return Optional.empty(); -+ } -+ -+ String fakeSignatureStr = metadata.getString("fake-signature"); -+ if (TextUtils.isEmpty(fakeSignatureStr)) { -+ return Optional.empty(); -+ } -+ -+ // Only MICROG_FAKE_SIGNATURE can be faked -+ Signature fakeSignature = new Signature(fakeSignatureStr); -+ if (!fakeSignature.equals(MICROG_FAKE_SIGNATURE)) { -+ return Optional.empty(); -+ } -+ -+ return Optional.of(fakeSignature); -+ } -+ - public final PackageInfo generatePackageInfo(PackageStateInternal ps, - @PackageManager.PackageInfoFlagsBits long flags, int userId) { - if (!mUserManager.exists(userId)) return null; -@@ -1529,6 +1571,10 @@ public class ComputerEngine implements Computer { - packageInfo.packageName = packageInfo.applicationInfo.packageName = - resolveExternalPackageName(p); - -+ generateFakeSignature(p).ifPresent(fakeSignature -> { -+ packageInfo.signatures = new Signature[]{fakeSignature}; -+ }); -+ - if (Flags.provideInfoOfApkInApex()) { - final String apexModuleName = ps.getApexModuleName(); - if (apexModuleName != null) { -@@ -1536,6 +1582,7 @@ public class ComputerEngine implements Computer { - mApexManager.getActivePackageNameForApexModuleName(apexModuleName)); - } - } -+ - return packageInfo; - } else if ((flags & (MATCH_UNINSTALLED_PACKAGES | MATCH_ARCHIVED_PACKAGES)) != 0 - && PackageUserStateUtils.isAvailable(state, flags)) { --- -2.44.0 - diff --git a/frameworks/base/0007-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch b/frameworks/base/0007-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch index 06830e5..919d948 100644 --- a/frameworks/base/0007-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch +++ b/frameworks/base/0007-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch @@ -1,4 +1,4 @@ -From 8eec006d00e012f02a33cea8f631af15bdd14498 Mon Sep 17 00:00:00 2001 +From e61dbcd51f88e10833a08a6b4ae909e783c39ebc Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sun, 22 Sep 2024 22:53:01 -0400 Subject: [PATCH 07/12] AuthService: HIDL and AIDL fingerprint services are diff --git a/frameworks/base/0008-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch b/frameworks/base/0008-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch deleted file mode 100644 index a06acd7..0000000 --- a/frameworks/base/0008-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch +++ /dev/null @@ -1,42 +0,0 @@ -From ad608b13f93f9532e4f7abcaabc6a3f735ad87ba Mon Sep 17 00:00:00 2001 -From: Peter Cai -Date: Sun, 22 Sep 2024 22:53:01 -0400 -Subject: [PATCH 08/11] AuthService: HIDL and AIDL fingerprint services are - mutually exclusive - -...and make sure that we prioritize AIDL over HIDL. This is essential -for GSIs to boot on newer devices while having the HIDL property set for -compatibility with older ones. - -Change-Id: I834297a44674820d813d8f6d376dfd294f084f3b ---- - .../com/android/server/biometrics/AuthService.java | 10 ++++------ - 1 file changed, 4 insertions(+), 6 deletions(-) - -diff --git a/services/core/java/com/android/server/biometrics/AuthService.java b/services/core/java/com/android/server/biometrics/AuthService.java -index 2d802b21c..0730d634f 100644 ---- a/services/core/java/com/android/server/biometrics/AuthService.java -+++ b/services/core/java/com/android/server/biometrics/AuthService.java -@@ -908,15 +908,13 @@ public class AuthService extends SystemService { - - handlerProvider.getFingerprintHandler().post(() -> { - final FingerprintSensorConfigurations mFingerprintSensorConfigurations = -- new FingerprintSensorConfigurations(!(hidlConfigStrings != null -- && hidlConfigStrings.length > 0)); -- -- if (hidlConfigStrings != null && hidlConfigStrings.length > 0) { -- mFingerprintSensorConfigurations.addHidlSensors(hidlConfigStrings, context); -- } -+ new FingerprintSensorConfigurations(fingerprintAidlInstances != null -+ && fingerprintAidlInstances.length > 0); - - if (fingerprintAidlInstances != null && fingerprintAidlInstances.length > 0) { - mFingerprintSensorConfigurations.addAidlSensors(fingerprintAidlInstances); -+ } else if (hidlConfigStrings != null && hidlConfigStrings.length > 0) { -+ mFingerprintSensorConfigurations.addHidlSensors(hidlConfigStrings, context); - } - - if (fingerprintService != null) { --- -2.44.0 - diff --git a/frameworks/base/0008-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch b/frameworks/base/0008-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch index 80643ad..0381fd1 100644 --- a/frameworks/base/0008-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch +++ b/frameworks/base/0008-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch @@ -1,4 +1,4 @@ -From 0439e89b1442adc5d6bb2b876ca7bc87a0b0ebd1 Mon Sep 17 00:00:00 2001 +From 6dbbaaabb50bd674b52d8498d2583afe4a2ab8e9 Mon Sep 17 00:00:00 2001 From: dhacker29 Date: Tue, 24 Nov 2015 01:53:47 -0500 Subject: [PATCH 08/12] fw/b: Use ro.build.version.incremental to signal OTA diff --git a/frameworks/base/0009-WebView-Add-check-before-setting-default-or-fallback.patch b/frameworks/base/0009-WebView-Add-check-before-setting-default-or-fallback.patch index 95e9bbb..a8b25ea 100644 --- a/frameworks/base/0009-WebView-Add-check-before-setting-default-or-fallback.patch +++ b/frameworks/base/0009-WebView-Add-check-before-setting-default-or-fallback.patch @@ -1,4 +1,4 @@ -From e9f37a43249f7816b78c4a8ce3a82f48db779567 Mon Sep 17 00:00:00 2001 +From 72405ae53c5e7c06045a7569bd58b3a4868d2803 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Sat, 21 Sep 2024 13:44:09 +0530 Subject: [PATCH 09/12] WebView: Add check before setting default or fallback diff --git a/frameworks/base/0009-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch b/frameworks/base/0009-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch deleted file mode 100644 index 496282a..0000000 --- a/frameworks/base/0009-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch +++ /dev/null @@ -1,150 +0,0 @@ -From 35527df5e9e87a4af86d51e3290e7679f5a5f4cc Mon Sep 17 00:00:00 2001 -From: dhacker29 -Date: Tue, 24 Nov 2015 01:53:47 -0500 -Subject: [PATCH 09/11] fw/b: Use ro.build.version.incremental to signal OTA - upgrades - -Co-authored-by: maxwen -Co-authored-by: Sam Mortimer -Co-authored-by: Wang Han <416810799@qq.com> -Change-Id: If0eb969ba509981f9209ffa37a949d9042ef4c2a ---- - core/java/android/app/admin/SystemUpdateInfo.java | 4 ++-- - core/java/android/content/pm/PackagePartitions.java | 2 +- - .../java/com/android/server/appwidget/AppWidgetXmlUtil.java | 4 ++-- - .../java/com/android/server/pm/PackageManagerService.java | 5 +++-- - .../com/android/server/pm/PackageManagerServiceUtils.java | 3 +-- - services/core/java/com/android/server/pm/Settings.java | 2 +- - .../core/java/com/android/server/pm/ShortcutService.java | 2 +- - 7 files changed, 11 insertions(+), 11 deletions(-) - -diff --git a/core/java/android/app/admin/SystemUpdateInfo.java b/core/java/android/app/admin/SystemUpdateInfo.java -index 9e6c91f4e..7459b0e05 100644 ---- a/core/java/android/app/admin/SystemUpdateInfo.java -+++ b/core/java/android/app/admin/SystemUpdateInfo.java -@@ -133,7 +133,7 @@ public final class SystemUpdateInfo implements Parcelable { - out.startTag(null, tag); - out.attributeLong(null, ATTR_RECEIVED_TIME, mReceivedTime); - out.attributeInt(null, ATTR_SECURITY_PATCH_STATE, mSecurityPatchState); -- out.attribute(null, ATTR_ORIGINAL_BUILD , Build.FINGERPRINT); -+ out.attribute(null, ATTR_ORIGINAL_BUILD , Build.VERSION.INCREMENTAL); - out.endTag(null, tag); - } - -@@ -142,7 +142,7 @@ public final class SystemUpdateInfo implements Parcelable { - public static SystemUpdateInfo readFromXml(TypedXmlPullParser parser) { - // If an OTA has been applied (build fingerprint has changed), discard stale info. - final String buildFingerprint = parser.getAttributeValue(null, ATTR_ORIGINAL_BUILD ); -- if (!Build.FINGERPRINT.equals(buildFingerprint)) { -+ if (!Build.VERSION.INCREMENTAL.equals(buildFingerprint)) { - return null; - } - try { -diff --git a/core/java/android/content/pm/PackagePartitions.java b/core/java/android/content/pm/PackagePartitions.java -index ff80e614b..da3b68ecf 100644 ---- a/core/java/android/content/pm/PackagePartitions.java -+++ b/core/java/android/content/pm/PackagePartitions.java -@@ -131,7 +131,7 @@ public class PackagePartitions { - final String partitionName = SYSTEM_PARTITIONS.get(i).getName(); - digestProperties[i] = "ro." + partitionName + ".build.fingerprint"; - } -- digestProperties[SYSTEM_PARTITIONS.size()] = "ro.build.fingerprint"; // build fingerprint -+ digestProperties[SYSTEM_PARTITIONS.size()] = "ro.build.version.incremental"; - return SystemProperties.digestOf(digestProperties); - } - -diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetXmlUtil.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetXmlUtil.java -index ce9130ad5..737ecae1c 100644 ---- a/services/appwidget/java/com/android/server/appwidget/AppWidgetXmlUtil.java -+++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetXmlUtil.java -@@ -117,7 +117,7 @@ public class AppWidgetXmlUtil { - out.attributeInt(null, ATTR_WIDGET_FEATURES, info.widgetFeatures); - out.attributeInt(null, ATTR_DESCRIPTION_RES, info.descriptionRes); - out.attributeBoolean(null, ATTR_PROVIDER_INHERITANCE, info.isExtendedFromAppWidgetProvider); -- out.attribute(null, ATTR_OS_FINGERPRINT, Build.FINGERPRINT); -+ out.attribute(null, ATTR_OS_FINGERPRINT, Build.VERSION.INCREMENTAL); - } - - /** -@@ -128,7 +128,7 @@ public class AppWidgetXmlUtil { - @NonNull final TypedXmlPullParser parser) { - Objects.requireNonNull(parser); - final String fingerprint = parser.getAttributeValue(null, ATTR_OS_FINGERPRINT); -- if (!Build.FINGERPRINT.equals(fingerprint)) { -+ if (!Build.VERSION.INCREMENTAL.equals(fingerprint)) { - return null; - } - final AppWidgetProviderInfo info = new AppWidgetProviderInfo(); -diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java -index 611e0d862..0e343e18a 100644 ---- a/services/core/java/com/android/server/pm/PackageManagerService.java -+++ b/services/core/java/com/android/server/pm/PackageManagerService.java -@@ -2239,7 +2239,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService - if (mIsUpgrade) { - PackageManagerServiceUtils.logCriticalInfo(Log.INFO, - "Upgrading from " + ver.fingerprint + " (" + ver.buildFingerprint + ") to " -- + PackagePartitions.FINGERPRINT + " (" + Build.FINGERPRINT + ")"); -+ + PackagePartitions.FINGERPRINT -+ + " (" + Build.VERSION.INCREMENTAL + ")"); - } - mPriorSdkVersion = mIsUpgrade ? ver.sdkVersion : -1; - mInitAppsHelper = new InitAppsHelper(this, mApexManager, mInstallPackageHelper, -@@ -2397,7 +2398,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService - | Installer.FLAG_CLEAR_APP_DATA_KEEP_ART_PROFILES); - } - } -- ver.buildFingerprint = Build.FINGERPRINT; -+ ver.buildFingerprint = Build.VERSION.INCREMENTAL; - ver.fingerprint = PackagePartitions.FINGERPRINT; - } - -diff --git a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java -index 975758241..54527a6b0 100644 ---- a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java -+++ b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java -@@ -1400,8 +1400,6 @@ public class PackageManagerServiceUtils { - // that starts with "eng." to signify that this is an engineering build and not - // destined for release. - if (isUserDebugBuild && incrementalVersion.startsWith("eng.")) { -- Slog.w(TAG, "Wiping cache directory because the system partition changed."); -- - // Heuristic: If the /system directory has been modified recently due to an "adb sync" - // or a regular make, then blow away the cache. Note that mtimes are *NOT* reliable - // in general and should not be used for production changes. In this specific case, -@@ -1409,6 +1407,7 @@ public class PackageManagerServiceUtils { - File frameworkDir = - new File(Environment.getRootDirectory(), "framework"); - if (cacheDir.lastModified() < frameworkDir.lastModified()) { -+ Slog.w(TAG, "Wiping cache directory because the system partition changed."); - FileUtils.deleteContents(cacheBaseDir); - cacheDir = FileUtils.createDir(cacheBaseDir, cacheName); - } -diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java -index 1f672a093..bef67a838 100644 ---- a/services/core/java/com/android/server/pm/Settings.java -+++ b/services/core/java/com/android/server/pm/Settings.java -@@ -485,7 +485,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile - public void forceCurrent() { - sdkVersion = Build.VERSION.SDK_INT; - databaseVersion = CURRENT_DATABASE_VERSION; -- buildFingerprint = Build.FINGERPRINT; -+ buildFingerprint = Build.VERSION.INCREMENTAL; - fingerprint = PackagePartitions.FINGERPRINT; - } - } -diff --git a/services/core/java/com/android/server/pm/ShortcutService.java b/services/core/java/com/android/server/pm/ShortcutService.java -index 5518bfae8..e26eec659 100644 ---- a/services/core/java/com/android/server/pm/ShortcutService.java -+++ b/services/core/java/com/android/server/pm/ShortcutService.java -@@ -5259,7 +5259,7 @@ public class ShortcutService extends IShortcutService.Stub { - - // Injection point. - String injectBuildFingerprint() { -- return Build.FINGERPRINT; -+ return Build.VERSION.INCREMENTAL; - } - - final void wtf(String message) { --- -2.44.0 - diff --git a/frameworks/base/0010-Add-support-for-treating-virtual-biometric-sensors-a.patch b/frameworks/base/0010-Add-support-for-treating-virtual-biometric-sensors-a.patch index 171abf4..a66e02e 100644 --- a/frameworks/base/0010-Add-support-for-treating-virtual-biometric-sensors-a.patch +++ b/frameworks/base/0010-Add-support-for-treating-virtual-biometric-sensors-a.patch @@ -1,4 +1,4 @@ -From 63814a8d4c25c343a7f3d3374ed4f085517fa8d0 Mon Sep 17 00:00:00 2001 +From 6b38f9bcf7c1d49d9737a2caf4a758726516b095 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 21 Dec 2024 11:04:35 -0500 Subject: [PATCH 10/12] Add support for treating virtual biometric sensors as diff --git a/frameworks/base/0010-WebView-Add-check-before-setting-default-or-fallback.patch b/frameworks/base/0010-WebView-Add-check-before-setting-default-or-fallback.patch deleted file mode 100644 index 72d2b19..0000000 --- a/frameworks/base/0010-WebView-Add-check-before-setting-default-or-fallback.patch +++ /dev/null @@ -1,134 +0,0 @@ -From fb0c9ab82954cf41bb985957d3eddfd190ca2ca5 Mon Sep 17 00:00:00 2001 -From: Pranav Vashi -Date: Sat, 21 Sep 2024 13:44:09 +0530 -Subject: [PATCH 10/11] WebView: Add check before setting default or fallback - provider - -Signed-off-by: Pranav Vashi ---- - .../webkit/WebViewUpdateServiceImpl.java | 14 ++++++-- - .../webkit/WebViewUpdateServiceImpl2.java | 34 ++++++++++++++----- - 2 files changed, 38 insertions(+), 10 deletions(-) - -diff --git a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java -index b9be4a2de..e98196f9f 100644 ---- a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java -+++ b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java -@@ -15,6 +15,7 @@ - */ - package com.android.server.webkit; - -+import android.app.AppGlobals; - import android.annotation.Nullable; - import android.content.pm.PackageInfo; - import android.content.pm.PackageManager.NameNotFoundException; -@@ -396,7 +397,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { - @Override - public WebViewProviderInfo getDefaultWebViewPackage() { - for (WebViewProviderInfo provider : getWebViewPackages()) { -- if (provider.availableByDefault) { -+ if (provider.availableByDefault && isPackageAvailable(provider.packageName)) { - return provider; - } - } -@@ -406,6 +407,15 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { - throw new AndroidRuntimeException("No available by default WebView Provider."); - } - -+ private static boolean isPackageAvailable(String packageName) { -+ try { -+ AppGlobals.getInitialApplication().getPackageManager().getPackageInfo(packageName, 0); -+ return true; -+ } catch (NameNotFoundException e) { -+ return false; -+ } -+ } -+ - private static class ProviderAndPackageInfo { - public final WebViewProviderInfo provider; - public final PackageInfo packageInfo; -@@ -644,7 +654,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { - */ - private static WebViewProviderInfo getFallbackProvider(WebViewProviderInfo[] webviewPackages) { - for (WebViewProviderInfo provider : webviewPackages) { -- if (provider.isFallback) { -+ if (provider.isFallback && isPackageAvailable(provider.packageName)) { - return provider; - } - } -diff --git a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java -index 307c15b72..26d1195dc 100644 ---- a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java -+++ b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java -@@ -15,6 +15,7 @@ - */ - package com.android.server.webkit; - -+import android.app.AppGlobals; - import android.annotation.Nullable; - import android.content.pm.PackageInfo; - import android.content.pm.PackageManager.NameNotFoundException; -@@ -112,7 +113,7 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { - - WebViewProviderInfo defaultProvider = null; - for (WebViewProviderInfo provider : webviewProviders) { -- if (provider.availableByDefault) { -+ if (provider.availableByDefault && isPackageAvailable(provider.packageName)) { - defaultProvider = provider; - break; - } -@@ -182,6 +183,15 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { - } - } - -+ private static boolean isPackageAvailable(String packageName) { -+ try { -+ AppGlobals.getInitialApplication().getPackageManager().getPackageInfo(packageName, 0); -+ return true; -+ } catch (NameNotFoundException e) { -+ return false; -+ } -+ } -+ - private boolean shouldTriggerRepairLocked() { - if (mAttemptedToRepairBefore) { - return false; -@@ -208,12 +218,20 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { - } - mAttemptedToRepairBefore = true; - } -- Slog.w( -- TAG, -- "No provider available for all users, trying to install and enable " -- + mDefaultProvider.packageName); -- mSystemInterface.installExistingPackageForAllUsers(mDefaultProvider.packageName); -- mSystemInterface.enablePackageForAllUsers(mDefaultProvider.packageName, true); -+ -+ WebViewProviderInfo[] webviewProviders = mSystemInterface.getWebViewPackages(); -+ WebViewProviderInfo fallbackProvider = getFallbackProvider(webviewProviders); -+ if (fallbackProvider != null) { -+ Slog.w(TAG, "No valid provider, trying to install and enable " -+ + fallbackProvider.packageName); -+ mSystemInterface.installExistingPackageForAllUsers(fallbackProvider.packageName); -+ mSystemInterface.enablePackageForAllUsers(fallbackProvider.packageName, true); -+ } else { -+ Slog.w(TAG, "No provider available for all users, trying to install and enable " -+ + mDefaultProvider.packageName); -+ mSystemInterface.installExistingPackageForAllUsers(mDefaultProvider.packageName); -+ mSystemInterface.enablePackageForAllUsers(mDefaultProvider.packageName, true); -+ } - } - - @Override -@@ -701,7 +719,7 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { - */ - private static WebViewProviderInfo getFallbackProvider(WebViewProviderInfo[] webviewPackages) { - for (WebViewProviderInfo provider : webviewPackages) { -- if (provider.isFallback) { -+ if (provider.isFallback && isPackageAvailable(provider.packageName)) { - return provider; - } - } --- -2.44.0 - diff --git a/frameworks/base/0011-Add-support-for-treating-virtual-biometric-sensors-a.patch b/frameworks/base/0011-Add-support-for-treating-virtual-biometric-sensors-a.patch deleted file mode 100644 index fe53e4d..0000000 --- a/frameworks/base/0011-Add-support-for-treating-virtual-biometric-sensors-a.patch +++ /dev/null @@ -1,49 +0,0 @@ -From a6a02e1099bee7d8749525e5fc092527fd2b1818 Mon Sep 17 00:00:00 2001 -From: Peter Cai -Date: Sat, 21 Dec 2024 11:04:35 -0500 -Subject: [PATCH 11/11] Add support for treating virtual biometric sensors as - real ones - -This happens on Unihertz Jelly Max. They forgot to change their sensor -instance name from "virtual" to something else. - -Change-Id: I106d41cd078e6b1e354c72ec35fa240a44397c5e ---- - .../fingerprint/FingerprintSensorConfigurations.java | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) - -diff --git a/core/java/android/hardware/fingerprint/FingerprintSensorConfigurations.java b/core/java/android/hardware/fingerprint/FingerprintSensorConfigurations.java -index 48c5887d8..bec56d9a6 100644 ---- a/core/java/android/hardware/fingerprint/FingerprintSensorConfigurations.java -+++ b/core/java/android/hardware/fingerprint/FingerprintSensorConfigurations.java -@@ -29,6 +29,7 @@ import android.os.Parcel; - import android.os.Parcelable; - import android.os.RemoteException; - import android.os.ServiceManager; -+import android.os.SystemProperties; - import android.util.Log; - import android.util.Slog; - -@@ -172,6 +173,10 @@ public class FingerprintSensorConfigurations implements Parcelable { - * @return real fqName - */ - public static String remapFqName(String fqName) { -+ if (SystemProperties.getBoolean("persist.sys.phh.virtual_sensors_are_real", false)) { -+ return fqName; -+ } -+ - if (!fqName.contains(IFingerprint.DESCRIPTOR + "/virtual")) { - return fqName; //no remap needed for real hardware HAL - } else { -@@ -185,7 +190,7 @@ public class FingerprintSensorConfigurations implements Parcelable { - * @return aidl interface - */ - public static IFingerprint getIFingerprint(String fqName) { -- if (fqName.contains("virtual")) { -+ if (fqName.contains("virtual") && !SystemProperties.getBoolean("persist.sys.phh.virtual_sensors_are_real", false)) { - String fqNameMapped = remapFqName(fqName); - Slog.i(TAG, "getIFingerprint fqName is mapped: " + fqName + "->" + fqNameMapped); - try { --- -2.44.0 - diff --git a/frameworks/base/0011-Allow-signature-spoofing-for-microG-Companion-Servic.patch b/frameworks/base/0011-Allow-signature-spoofing-for-microG-Companion-Servic.patch index a1b057a..946f917 100644 --- a/frameworks/base/0011-Allow-signature-spoofing-for-microG-Companion-Servic.patch +++ b/frameworks/base/0011-Allow-signature-spoofing-for-microG-Companion-Servic.patch @@ -1,4 +1,4 @@ -From 73a7c9dcfd0752557d08d0e5972aa1ec9cad766a Mon Sep 17 00:00:00 2001 +From 881fb29e6d4510f1691dd9a483fa89367cc32b64 Mon Sep 17 00:00:00 2001 From: LuK1337 Date: Mon, 19 Feb 2024 16:20:04 +0100 Subject: [PATCH 11/12] Allow signature spoofing for microG Companion/Services diff --git a/frameworks/base/0012-Allow-spoofing-signingInfo-for-microG-Companion-Serv.patch b/frameworks/base/0012-Allow-spoofing-signingInfo-for-microG-Companion-Serv.patch index 4d0258a..4f8baec 100644 --- a/frameworks/base/0012-Allow-spoofing-signingInfo-for-microG-Companion-Serv.patch +++ b/frameworks/base/0012-Allow-spoofing-signingInfo-for-microG-Companion-Serv.patch @@ -1,4 +1,4 @@ -From 125054a90b153342a08cebf025e8752fe0113b36 Mon Sep 17 00:00:00 2001 +From 0c60edf128cc549f20fba38b33984d55c63adc43 Mon Sep 17 00:00:00 2001 From: Jonathan Klee Date: Thu, 12 Dec 2024 15:27:57 +0100 Subject: [PATCH 12/12] Allow spoofing signingInfo for microG From 9d9e775f06a7a8b41b76f743139f4dd69fe7be40 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sun, 16 Mar 2025 13:56:35 -0400 Subject: [PATCH 43/43] Refresh patchset for AOSP 15 r20 --- ...m-to-fake-vendor-props-on-a-per-proc.patch | 4 +- ...orce-load-audio-policy-for-system-si.patch | 4 +- ...2DP-audio-ports-from-the-primary-HAL.patch | 4 +- ...gh-pitched-voice-on-Qualcomm-devices.patch | 4 +- .../0004-Fix-BT-in-call-on-CAF-devices.patch | 4 +- ...-Make-camera-IDs-filter-out-optional.patch | 10 +- ...and-Q-behavior-respectively-for-tele.patch | 30 +- ...support-glob-matching-for-properties.patch | 6 +- ...PackageUtils-Add-glob-matching-suppo.patch | 8 +- .../base/0003-Global-VPN-feature-1-2.patch | 12 +- ...ze-boot-animation-to-match-screen-si.patch | 46 -- ...teForSlotIndex-in-SubscriptionManag.patch} | 10 +- ...allingIdentity-variant-with-both-ex.patch} | 6 +- ...and-AIDL-fingerprint-services-are-m.patch} | 6 +- ....version.incremental-to-signal-OTA-.patch} | 14 +- ...reating-virtual-biometric-sensors-a.patch} | 6 +- ...k-before-setting-default-or-fallback.patch | 67 +- ...poofing-for-microG-Companion-Servic.patch} | 32 +- ...gningInfo-for-microG-Companion-Serv.patch} | 12 +- ...d-support-for-ignoring-broken-sensor.patch | 8 +- ...support-to-fix-broken-Mediatek-gpufr.patch | 10 +- ...Support-optionally-ignoring-vibrator.patch | 14 +- ...t-Remove-flag-single_hop_screenshots.patch | 348 ++++++++ ...elease-fence-attachment-for-non-thre.patch | 334 ++++++++ ...06-Revert-Remove-release-fence-flags.patch | 755 ++++++++++++++++++ ...Revert-Remove-dead-code-from-LayerFE.patch | 97 +++ .../0001-Stop-using-resource-processor.patch | 24 + lineage-sdk/0002-Add-spninfo-schema.patch | 133 +++ ...ade-target_sdk_version-to-34-for-now.patch | 6 +- ...va_sdk_library-dependencies-explicit.patch | 6 +- ...-from-the-resource-processor-for-now.patch | 24 + ...e-themed-icon-setting-in-ThemePicker.patch | 6 +- .../0002-Disable-QSB-in-BuildConfig.patch | 4 +- ...ly-expose-GridCustomizationsProvider.patch | 4 +- ...0001-Settings-Bring-in-the-new-icon.patch} | 6 +- ...atch => 0002-Global-VPN-feature-2-2.patch} | 16 +- ...0001-Add-wallpaper-privapp-whitelist.patch | 4 +- ...02-Add-wallpaper-default-permissions.patch | 4 +- ...-we-read-and-write-launcher-settings.patch | 4 +- ...ssion-for-launcher-preview-rendering.patch | 4 +- ...interface-Optionally-use-sysbta-HAL.patch} | 91 ++- ...atus-UNSUPPORTED_REMOTE_OR_LMP_FEAT.patch} | 20 +- 42 files changed, 1948 insertions(+), 259 deletions(-) delete mode 100644 frameworks/base/0004-Dynamically-resize-boot-animation-to-match-screen-si.patch rename frameworks/base/{0005-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch => 0004-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch} (83%) rename frameworks/base/{0006-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch => 0005-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch} (94%) rename frameworks/base/{0007-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch => 0006-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch} (93%) rename frameworks/base/{0008-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch => 0007-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch} (96%) rename frameworks/base/{0010-Add-support-for-treating-virtual-biometric-sensors-a.patch => 0008-Add-support-for-treating-virtual-biometric-sensors-a.patch} (93%) rename frameworks/base/{0011-Allow-signature-spoofing-for-microG-Companion-Servic.patch => 0010-Allow-signature-spoofing-for-microG-Companion-Servic.patch} (94%) rename frameworks/base/{0012-Allow-spoofing-signingInfo-for-microG-Companion-Serv.patch => 0011-Allow-spoofing-signingInfo-for-microG-Companion-Serv.patch} (86%) create mode 100644 frameworks/native/0004-Revert-Remove-flag-single_hop_screenshots.patch create mode 100644 frameworks/native/0005-Revert-Reorder-release-fence-attachment-for-non-thre.patch create mode 100644 frameworks/native/0006-Revert-Remove-release-fence-flags.patch create mode 100644 frameworks/native/0007-Revert-Remove-dead-code-from-LayerFE.patch create mode 100644 lineage-sdk/0001-Stop-using-resource-processor.patch create mode 100644 lineage-sdk/0002-Add-spninfo-schema.patch create mode 100644 packages/apps/Dialer/0003-Opt-out-from-the-resource-processor-for-now.patch rename packages/apps/Settings/{0002-Settings-Bring-in-the-new-icon.patch => 0001-Settings-Bring-in-the-new-icon.patch} (99%) rename packages/apps/Settings/{0001-Global-VPN-feature-2-2.patch => 0002-Global-VPN-feature-2-2.patch} (93%) rename packages/modules/Bluetooth/{0002-audio_hal_interface-Optionally-use-sysbta-HAL.patch => 0001-audio_hal_interface-Optionally-use-sysbta-HAL.patch} (57%) rename packages/modules/Bluetooth/{0001-Don-t-crash-on-status-UNSUPPORTED_REMOTE_OR_LMP_FEAT.patch => 0002-Don-t-crash-on-status-UNSUPPORTED_REMOTE_OR_LMP_FEAT.patch} (66%) diff --git a/bionic/0001-Add-new-mechanism-to-fake-vendor-props-on-a-per-proc.patch b/bionic/0001-Add-new-mechanism-to-fake-vendor-props-on-a-per-proc.patch index 7c00f25..342df54 100644 --- a/bionic/0001-Add-new-mechanism-to-fake-vendor-props-on-a-per-proc.patch +++ b/bionic/0001-Add-new-mechanism-to-fake-vendor-props-on-a-per-proc.patch @@ -1,4 +1,4 @@ -From e0e96a633b717830325cd6189fff23e57d7ee6f1 Mon Sep 17 00:00:00 2001 +From 9f770e862954f07e8a7cce36aedd4879b10641c6 Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Sat, 19 Feb 2022 08:20:25 -0500 Subject: [PATCH] Add new mechanism to fake vendor props on a per-process basis @@ -132,5 +132,5 @@ index e0d38a8..4f54885 100644 static bool is_appcompat_override(const char* name) { -- -2.44.0 +2.48.1 diff --git a/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch b/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch index 990b7b1..4c060b8 100644 --- a/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch +++ b/frameworks/av/0001-APM-Optionally-force-load-audio-policy-for-system-si.patch @@ -1,4 +1,4 @@ -From 30492f22b249f2bd73085341f231da81ed290cf5 Mon Sep 17 00:00:00 2001 +From 875011b65d3839871b488b18d483fd56f2306a7b Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 24 Aug 2022 15:42:39 -0400 Subject: [PATCH 1/6] APM: Optionally force-load audio policy for system-side @@ -57,5 +57,5 @@ index 6f19a7a145..08836377b7 100644 // Global Configuration -- -2.44.0 +2.48.1 diff --git a/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch b/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch index 4aaaff7..2361724 100644 --- a/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch +++ b/frameworks/av/0002-APM-Remove-A2DP-audio-ports-from-the-primary-HAL.patch @@ -1,4 +1,4 @@ -From 710bea3b445304ca1201b8923cdc3bf824d6a10e Mon Sep 17 00:00:00 2001 +From d24b962cb20fb0a3e807d05c534f43f8bd0ce350 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 25 Aug 2022 13:30:29 -0400 Subject: [PATCH 2/6] APM: Remove A2DP audio ports from the primary HAL @@ -75,5 +75,5 @@ index 08836377b7..0f7c903909 100644 RouteTraits::Collection routes; -- -2.44.0 +2.48.1 diff --git a/frameworks/av/0003-voip-Fix-high-pitched-voice-on-Qualcomm-devices.patch b/frameworks/av/0003-voip-Fix-high-pitched-voice-on-Qualcomm-devices.patch index 1588f95..5b5432c 100644 --- a/frameworks/av/0003-voip-Fix-high-pitched-voice-on-Qualcomm-devices.patch +++ b/frameworks/av/0003-voip-Fix-high-pitched-voice-on-Qualcomm-devices.patch @@ -1,4 +1,4 @@ -From d2fda04e8ad3ff0d3fda168fd41e493e9db54e7a Mon Sep 17 00:00:00 2001 +From b3bc05d8e2bb94c4992a12a943d16c27554fa54d Mon Sep 17 00:00:00 2001 From: ponces Date: Mon, 24 Oct 2022 09:38:34 +0100 Subject: [PATCH 3/6] voip: Fix high pitched voice on Qualcomm devices @@ -52,5 +52,5 @@ index 0f7c903909..c4474cf1c2 100644 ALOGE("%s: No %s found", __func__, Attributes::name); return BAD_VALUE; -- -2.44.0 +2.48.1 diff --git a/frameworks/av/0004-Fix-BT-in-call-on-CAF-devices.patch b/frameworks/av/0004-Fix-BT-in-call-on-CAF-devices.patch index f3492e0..5373354 100644 --- a/frameworks/av/0004-Fix-BT-in-call-on-CAF-devices.patch +++ b/frameworks/av/0004-Fix-BT-in-call-on-CAF-devices.patch @@ -1,4 +1,4 @@ -From 68b78f8122c2ba128a8314a8ea3e8a50afc4158b Mon Sep 17 00:00:00 2001 +From 88eee2c55fa4e85aeef0df59c9b788b2b7868c6b Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Mon, 5 Aug 2019 18:09:50 +0200 Subject: [PATCH 4/6] Fix BT in-call on CAF devices @@ -127,5 +127,5 @@ index c4474cf1c2..c1df8f278b 100644 for (const xmlNode *children = cur->xmlChildrenNode; children != NULL; -- -2.44.0 +2.48.1 diff --git a/frameworks/av/0005-Make-camera-IDs-filter-out-optional.patch b/frameworks/av/0005-Make-camera-IDs-filter-out-optional.patch index 4a56203..aade36f 100644 --- a/frameworks/av/0005-Make-camera-IDs-filter-out-optional.patch +++ b/frameworks/av/0005-Make-camera-IDs-filter-out-optional.patch @@ -1,4 +1,4 @@ -From a20df6bb1d38d2bb402c16fc64fcafd20464a757 Mon Sep 17 00:00:00 2001 +From 79a670c8e20a8eb68849be7e3f9b4c0421d92073 Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Mon, 21 Dec 2020 20:19:11 +0100 Subject: [PATCH 5/6] Make camera IDs filter-out optional @@ -11,10 +11,10 @@ Add a property for that. 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/services/camera/libcameraservice/common/CameraProviderManager.cpp b/services/camera/libcameraservice/common/CameraProviderManager.cpp -index 51f06cb013..4892d80cfa 100644 +index a8d748028b..203a166a36 100644 --- a/services/camera/libcameraservice/common/CameraProviderManager.cpp +++ b/services/camera/libcameraservice/common/CameraProviderManager.cpp -@@ -318,7 +318,9 @@ std::vector CameraProviderManager::getAPI1CompatibleCameraDeviceIds +@@ -324,7 +324,9 @@ std::vector CameraProviderManager::getAPI1CompatibleCameraDeviceIds // API1 app doesn't handle logical and physical camera devices well. So // for each camera facing, only take the first id advertised by HAL in // all [logical, physical1, physical2, ...] id combos, and filter out the rest. @@ -25,7 +25,7 @@ index 51f06cb013..4892d80cfa 100644 collectDeviceIdsLocked(providerDeviceIds, publicDeviceIds, systemDeviceIds); } auto sortFunc = -@@ -1102,10 +1104,12 @@ SystemCameraKind CameraProviderManager::ProviderInfo::DeviceInfo3::getSystemCame +@@ -1108,10 +1110,12 @@ SystemCameraKind CameraProviderManager::ProviderInfo::DeviceInfo3::getSystemCame // Go through the capabilities and check if it has // ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SYSTEM_CAMERA @@ -43,5 +43,5 @@ index 51f06cb013..4892d80cfa 100644 } return SystemCameraKind::PUBLIC; -- -2.44.0 +2.48.1 diff --git a/frameworks/av/0006-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch b/frameworks/av/0006-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch index af01c1e..7a3e0d5 100644 --- a/frameworks/av/0006-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch +++ b/frameworks/av/0006-APM-Restore-S-R-and-Q-behavior-respectively-for-tele.patch @@ -1,4 +1,4 @@ -From 5ce88c0c583ad228cb456d68543cebb5c23390a7 Mon Sep 17 00:00:00 2001 +From d483a03149f587b3078d81256ac356382aafdd6b Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 18 Aug 2022 15:44:46 -0400 Subject: [PATCH 6/6] APM: Restore S, R and Q behavior respectively for @@ -36,10 +36,10 @@ Change-Id: I56d36d2aef4319935cb88a3e4771b23c6d5b2145 2 files changed, 148 insertions(+), 61 deletions(-) diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp -index 1f8cedd290..cfac4a2090 100644 +index 73b574ccfa..4c44acb966 100644 --- a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp +++ b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp -@@ -726,6 +726,17 @@ status_t AudioPolicyManager::updateCallRoutingInternal( +@@ -746,6 +746,17 @@ status_t AudioPolicyManager::updateCallRoutingInternal( ALOGV("%s device rxDevice %s txDevice %s", __func__, rxDevices.itemAt(0)->toString().c_str(), txSourceDevice->toString().c_str()); @@ -57,7 +57,7 @@ index 1f8cedd290..cfac4a2090 100644 auto telephonyRxModule = mHwModules.getModuleForDeviceType(AUDIO_DEVICE_IN_TELEPHONY_RX, AUDIO_FORMAT_DEFAULT); auto telephonyTxModule = -@@ -748,9 +759,20 @@ status_t AudioPolicyManager::updateCallRoutingInternal( +@@ -768,9 +779,20 @@ status_t AudioPolicyManager::updateCallRoutingInternal( ALOGE("%s() no telephony Tx and/or RX device", __func__); return INVALID_OPERATION; } @@ -81,7 +81,7 @@ index 1f8cedd290..cfac4a2090 100644 } else { // If the RX device is on the primary HW module, then use legacy routing method for // voice calls via setOutputDevice() on primary output. -@@ -774,7 +796,14 @@ status_t AudioPolicyManager::updateCallRoutingInternal( +@@ -794,7 +816,14 @@ status_t AudioPolicyManager::updateCallRoutingInternal( } muteWaitMs = setOutputDevices(__func__, mPrimaryOutput, rxDevices, true, delayMs); } else { // create RX path audio patch @@ -97,7 +97,7 @@ index 1f8cedd290..cfac4a2090 100644 // 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 -@@ -790,6 +819,13 @@ status_t AudioPolicyManager::updateCallRoutingInternal( +@@ -810,6 +839,13 @@ status_t AudioPolicyManager::updateCallRoutingInternal( } } connectTelephonyTxAudioSource(txSourceDevice, txSinkDevice, delayMs); @@ -111,7 +111,7 @@ index 1f8cedd290..cfac4a2090 100644 } else if (fix_call_audio_patch()) { disconnectTelephonyAudioSource(mCallTxSourceClient); } -@@ -799,6 +835,36 @@ status_t AudioPolicyManager::updateCallRoutingInternal( +@@ -819,6 +855,36 @@ status_t AudioPolicyManager::updateCallRoutingInternal( return NO_ERROR; } @@ -148,7 +148,7 @@ index 1f8cedd290..cfac4a2090 100644 bool AudioPolicyManager::isDeviceOfModule( const sp& devDesc, const char *moduleId) const { sp module = mHwModules.getModuleFromName(moduleId); -@@ -5513,83 +5579,101 @@ status_t AudioPolicyManager::createAudioPatchInternal(const struct audio_patch * +@@ -5636,83 +5702,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 outputDesc; @@ -166,14 +166,14 @@ index 1f8cedd290..cfac4a2090 100644 - : 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; +- DeviceIdVector selectedDeviceIds; - 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, +- &selectedDeviceIds, &isRequestedDeviceForExclusiveUse, - nullptr, &outputType, &isSpatialized, &isBitPerfect); - if (output == AUDIO_IO_HANDLE_NONE) { - ALOGV("%s no output for device %s", @@ -219,14 +219,14 @@ index 1f8cedd290..cfac4a2090 100644 + : 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; ++ DeviceIdVector selectedDeviceIds; + 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, ++ &selectedDeviceIds, &isRequestedDeviceForExclusiveUse, + nullptr, &outputType, &isSpatialized, &isBitPerfect); + if (output == AUDIO_IO_HANDLE_NONE) { + ALOGV("%s no output for device %s", @@ -308,10 +308,10 @@ index 1f8cedd290..cfac4a2090 100644 AUDIO_STREAM_PATCH; patchBuilder.addSource(srcMixPortConfig); diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.h b/services/audiopolicy/managerdefault/AudioPolicyManager.h -index 84edf34da4..4b1093cb23 100644 +index 44863eedc2..e8024942fd 100644 --- a/services/audiopolicy/managerdefault/AudioPolicyManager.h +++ b/services/audiopolicy/managerdefault/AudioPolicyManager.h -@@ -1013,6 +1013,9 @@ protected: +@@ -1017,6 +1017,9 @@ protected: SoundTriggerSessionCollection mSoundTriggerSessions; @@ -322,5 +322,5 @@ index 84edf34da4..4b1093cb23 100644 SourceClientCollection mAudioSources; -- -2.44.0 +2.48.1 diff --git a/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch b/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch index 026685c..64b9384 100644 --- a/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch +++ b/frameworks/base/0001-PackageParser-support-glob-matching-for-properties.patch @@ -1,7 +1,7 @@ -From c4c114b281293a309e3f6b071292cf15b9939140 Mon Sep 17 00:00:00 2001 +From 3c6a1bbffa88d93be209b41b911f192618a3b8e6 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Tue, 12 Oct 2021 21:37:22 -0400 -Subject: [PATCH 01/12] PackageParser: support glob matching for properties +Subject: [PATCH 01/11] PackageParser: support glob matching for properties Needed to make phh's vendor overlays work --- @@ -32,5 +32,5 @@ index 4b579e7db..8176cf8e8 100644 } return true; -- -2.44.0 +2.48.1 diff --git a/frameworks/base/0002-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch b/frameworks/base/0002-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch index 1c2cdfe..1f254fa 100644 --- a/frameworks/base/0002-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch +++ b/frameworks/base/0002-FrameworkParsingPackageUtils-Add-glob-matching-suppo.patch @@ -1,7 +1,7 @@ -From dc8561a3246568896b4b318ef479795cfe3e2ab3 Mon Sep 17 00:00:00 2001 +From 6d3e460a5e0df0f6ac2f653d0577560a2c8f32d3 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 2 Sep 2022 21:36:06 -0400 -Subject: [PATCH 02/12] FrameworkParsingPackageUtils: Add glob matching support +Subject: [PATCH 02/11] FrameworkParsingPackageUtils: Add glob matching support for properties This is now required in addition to the one in PackageParser in order @@ -13,7 +13,7 @@ Change-Id: Ie8679c0ffe03cead4a68bd2d0eb429f05af2d417 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java b/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java -index 153dd9a93..900151440 100644 +index e30f871b6..a2979f695 100644 --- a/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java +++ b/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java @@ -215,8 +215,16 @@ public class FrameworkParsingPackageUtils { @@ -36,5 +36,5 @@ index 153dd9a93..900151440 100644 } return true; -- -2.44.0 +2.48.1 diff --git a/frameworks/base/0003-Global-VPN-feature-1-2.patch b/frameworks/base/0003-Global-VPN-feature-1-2.patch index b1999f3..95a91cc 100644 --- a/frameworks/base/0003-Global-VPN-feature-1-2.patch +++ b/frameworks/base/0003-Global-VPN-feature-1-2.patch @@ -1,7 +1,7 @@ -From 8d6c74e9e8b2fea7686d1b6f2988af42d5f155c1 Mon Sep 17 00:00:00 2001 +From 176fce488f4206d10e3d4873bce3a43a97540890 Mon Sep 17 00:00:00 2001 From: Oliver Scott Date: Thu, 8 Jul 2021 10:41:43 -0400 -Subject: [PATCH 03/12] Global VPN feature [1/2] +Subject: [PATCH 03/11] Global VPN feature [1/2] * Modify existing VPN user range functions to conditionally have traffic from all users pass through the global VPN. @@ -28,10 +28,10 @@ Signed-off-by: Mohammad Hasan Keramat J 3 files changed, 46 insertions(+), 5 deletions(-) diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java -index ef8b3d738..b5014f24e 100644 +index 4acb6312f..dbc9845a8 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java -@@ -18029,6 +18029,12 @@ public final class Settings { +@@ -18232,6 +18232,12 @@ public final class Settings { CLOCKWORK_HOME_READY, }; @@ -72,7 +72,7 @@ index f39762766..c7dc809c9 100644 mVpnUserId = newUserInfo.restrictedProfileParentId; } else { diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java -index e1bb8a1a0..cf89eb842 100644 +index 4c5f65285..1c546be6f 100644 --- a/services/core/java/com/android/server/connectivity/Vpn.java +++ b/services/core/java/com/android/server/connectivity/Vpn.java @@ -778,6 +778,15 @@ public class Vpn { @@ -197,5 +197,5 @@ index e1bb8a1a0..cf89eb842 100644 // To stop the VPN profile, the caller must be the current prepared package and must be // running an Ikev2VpnProfile. -- -2.44.0 +2.48.1 diff --git a/frameworks/base/0004-Dynamically-resize-boot-animation-to-match-screen-si.patch b/frameworks/base/0004-Dynamically-resize-boot-animation-to-match-screen-si.patch deleted file mode 100644 index 92e736d..0000000 --- a/frameworks/base/0004-Dynamically-resize-boot-animation-to-match-screen-si.patch +++ /dev/null @@ -1,46 +0,0 @@ -From eb8e7dd21a6ec1daa87f0e49d3f890b2074539e9 Mon Sep 17 00:00:00 2001 -From: Pierre-Hugues Husson -Date: Mon, 20 Dec 2021 15:01:41 -0500 -Subject: [PATCH 04/12] Dynamically resize boot animation to match screen size - -Change-Id: I54e49fc6b8c670103852e212d1416e27ff976205 ---- - cmds/bootanimation/BootAnimation.cpp | 22 ++++++++++++++++++++++ - 1 file changed, 22 insertions(+) - -diff --git a/cmds/bootanimation/BootAnimation.cpp b/cmds/bootanimation/BootAnimation.cpp -index c2f6e3072..7213f3058 100644 ---- a/cmds/bootanimation/BootAnimation.cpp -+++ b/cmds/bootanimation/BootAnimation.cpp -@@ -619,6 +619,28 @@ status_t BootAnimation::readyToRun() { - mFlingerSurface = s; - mTargetInset = -1; - -+ if ( mAnimation != nullptr ) { -+ SLOGE("Got screen size %d, animation size %d", mWidth, mAnimation->width); -+ int origWidth = mAnimation->width; -+ if ( mAnimation->width*2 < mWidth ) { -+ SLOGE("Making animation bigger"); -+ mAnimation->width *= 2; -+ mAnimation->height *= 2; -+ } else if ( mWidth < mAnimation->width ) { -+ SLOGE("Making animation smaller"); -+ mAnimation->width /= 2; -+ mAnimation->height /= 2; -+ } -+ for (Animation::Part& part : mAnimation->parts) { -+ for(auto& frame: part.frames) { -+ if(frame.trimWidth == origWidth && frame.trimX == 0 && frame.trimY == 0) { -+ frame.trimWidth = mAnimation->width; -+ frame.trimHeight = mAnimation->height; -+ } -+ } -+ } -+ } -+ - // Rotate the boot animation according to the value specified in the sysprop - // ro.bootanim.set_orientation_. Four values are supported: ORIENTATION_0, - // ORIENTATION_90, ORIENTATION_180 and ORIENTATION_270. --- -2.44.0 - diff --git a/frameworks/base/0005-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch b/frameworks/base/0004-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch similarity index 83% rename from frameworks/base/0005-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch rename to frameworks/base/0004-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch index 494a15c..e3a0d7a 100644 --- a/frameworks/base/0005-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch +++ b/frameworks/base/0004-Restore-getSimStateForSlotIndex-in-SubscriptionManag.patch @@ -1,7 +1,7 @@ -From 255d90a95d3fb2c0b3b94e77fd787316b864a845 Mon Sep 17 00:00:00 2001 +From cca38c720efc73912913a59be2a3d261017c2863 Mon Sep 17 00:00:00 2001 From: Andy CrossGate Yan Date: Wed, 2 Aug 2023 20:59:53 +0800 -Subject: [PATCH 05/12] Restore getSimStateForSlotIndex in SubscriptionManager +Subject: [PATCH 04/11] Restore getSimStateForSlotIndex in SubscriptionManager MTK IMS still needs it here @@ -11,10 +11,10 @@ Change-Id: I41bac57c68055f369232359a464642daab94403b 1 file changed, 14 insertions(+) diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java -index 6faef7ecf..33e3b6a0d 100644 +index e0af22369..2175b3d96 100644 --- a/telephony/java/android/telephony/SubscriptionManager.java +++ b/telephony/java/android/telephony/SubscriptionManager.java -@@ -2916,6 +2916,20 @@ public class SubscriptionManager { +@@ -2913,6 +2913,20 @@ public class SubscriptionManager { return TelephonyManager.getDefault().isNetworkRoaming(subId); } @@ -36,5 +36,5 @@ index 6faef7ecf..33e3b6a0d 100644 * Set a field in the subscription database. Note not all fields are supported. * -- -2.44.0 +2.48.1 diff --git a/frameworks/base/0006-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch b/frameworks/base/0005-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch similarity index 94% rename from frameworks/base/0006-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch rename to frameworks/base/0005-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch index 59998b3..cf09852 100644 --- a/frameworks/base/0006-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch +++ b/frameworks/base/0005-Add-runWithCleanCallingIdentity-variant-with-both-ex.patch @@ -1,7 +1,7 @@ -From 23f602ae89883965cb8eee0b7b8000550104b535 Mon Sep 17 00:00:00 2001 +From f9a12ae1920588f2d75849462abf7d2ba9d0373b Mon Sep 17 00:00:00 2001 From: Andy CrossGate Yan Date: Sat, 12 Aug 2023 20:11:17 +0800 -Subject: [PATCH 06/12] Add runWithCleanCallingIdentity variant with both +Subject: [PATCH 05/11] Add runWithCleanCallingIdentity variant with both executor and return value This complements the fixup to ImsPhoneCallTracker (in fw/o/t) for U @@ -61,5 +61,5 @@ index 422433891..3bbecf0f2 100644 * Filter values in bundle to only basic types. */ -- -2.44.0 +2.48.1 diff --git a/frameworks/base/0007-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch b/frameworks/base/0006-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch similarity index 93% rename from frameworks/base/0007-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch rename to frameworks/base/0006-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch index 919d948..08ef74f 100644 --- a/frameworks/base/0007-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch +++ b/frameworks/base/0006-AuthService-HIDL-and-AIDL-fingerprint-services-are-m.patch @@ -1,7 +1,7 @@ -From e61dbcd51f88e10833a08a6b4ae909e783c39ebc Mon Sep 17 00:00:00 2001 +From 45736b5d760fdac0ec405f1620942ff9a7c023d9 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sun, 22 Sep 2024 22:53:01 -0400 -Subject: [PATCH 07/12] AuthService: HIDL and AIDL fingerprint services are +Subject: [PATCH 06/11] AuthService: HIDL and AIDL fingerprint services are mutually exclusive ...and make sure that we prioritize AIDL over HIDL. This is essential @@ -38,5 +38,5 @@ index 2d802b21c..0730d634f 100644 if (fingerprintService != null) { -- -2.44.0 +2.48.1 diff --git a/frameworks/base/0008-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch b/frameworks/base/0007-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch similarity index 96% rename from frameworks/base/0008-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch rename to frameworks/base/0007-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch index 0381fd1..c0b7b56 100644 --- a/frameworks/base/0008-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch +++ b/frameworks/base/0007-fw-b-Use-ro.build.version.incremental-to-signal-OTA-.patch @@ -1,7 +1,7 @@ -From 6dbbaaabb50bd674b52d8498d2583afe4a2ab8e9 Mon Sep 17 00:00:00 2001 +From 6cd16322e3d44ea9d96c74af96a967e48fa88d44 Mon Sep 17 00:00:00 2001 From: dhacker29 Date: Tue, 24 Nov 2015 01:53:47 -0500 -Subject: [PATCH 08/12] fw/b: Use ro.build.version.incremental to signal OTA +Subject: [PATCH 07/11] fw/b: Use ro.build.version.incremental to signal OTA upgrades Co-authored-by: maxwen @@ -76,7 +76,7 @@ index ce9130ad5..737ecae1c 100644 } final AppWidgetProviderInfo info = new AppWidgetProviderInfo(); diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java -index 611e0d862..0e343e18a 100644 +index aadf11227..8b0c4f42b 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -2239,7 +2239,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService @@ -99,7 +99,7 @@ index 611e0d862..0e343e18a 100644 } diff --git a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java -index 975758241..54527a6b0 100644 +index 7af39f74d..4bd83e739 100644 --- a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java +++ b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java @@ -1400,8 +1400,6 @@ public class PackageManagerServiceUtils { @@ -120,7 +120,7 @@ index 975758241..54527a6b0 100644 cacheDir = FileUtils.createDir(cacheBaseDir, cacheName); } diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java -index 1f672a093..bef67a838 100644 +index 485a28070..78086791a 100644 --- a/services/core/java/com/android/server/pm/Settings.java +++ b/services/core/java/com/android/server/pm/Settings.java @@ -485,7 +485,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile @@ -133,7 +133,7 @@ index 1f672a093..bef67a838 100644 } } diff --git a/services/core/java/com/android/server/pm/ShortcutService.java b/services/core/java/com/android/server/pm/ShortcutService.java -index 5518bfae8..e26eec659 100644 +index 1052c94d7..21481d216 100644 --- a/services/core/java/com/android/server/pm/ShortcutService.java +++ b/services/core/java/com/android/server/pm/ShortcutService.java @@ -5259,7 +5259,7 @@ public class ShortcutService extends IShortcutService.Stub { @@ -146,5 +146,5 @@ index 5518bfae8..e26eec659 100644 final void wtf(String message) { -- -2.44.0 +2.48.1 diff --git a/frameworks/base/0010-Add-support-for-treating-virtual-biometric-sensors-a.patch b/frameworks/base/0008-Add-support-for-treating-virtual-biometric-sensors-a.patch similarity index 93% rename from frameworks/base/0010-Add-support-for-treating-virtual-biometric-sensors-a.patch rename to frameworks/base/0008-Add-support-for-treating-virtual-biometric-sensors-a.patch index a66e02e..7f4f23a 100644 --- a/frameworks/base/0010-Add-support-for-treating-virtual-biometric-sensors-a.patch +++ b/frameworks/base/0008-Add-support-for-treating-virtual-biometric-sensors-a.patch @@ -1,7 +1,7 @@ -From 6b38f9bcf7c1d49d9737a2caf4a758726516b095 Mon Sep 17 00:00:00 2001 +From 8b3f59482cf7f27406d9a8c9ef717e6bc70cfb88 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 21 Dec 2024 11:04:35 -0500 -Subject: [PATCH 10/12] Add support for treating virtual biometric sensors as +Subject: [PATCH 08/11] Add support for treating virtual biometric sensors as real ones This happens on Unihertz Jelly Max. They forgot to change their sensor @@ -45,5 +45,5 @@ index 48c5887d8..bec56d9a6 100644 Slog.i(TAG, "getIFingerprint fqName is mapped: " + fqName + "->" + fqNameMapped); try { -- -2.44.0 +2.48.1 diff --git a/frameworks/base/0009-WebView-Add-check-before-setting-default-or-fallback.patch b/frameworks/base/0009-WebView-Add-check-before-setting-default-or-fallback.patch index a8b25ea..0ec495f 100644 --- a/frameworks/base/0009-WebView-Add-check-before-setting-default-or-fallback.patch +++ b/frameworks/base/0009-WebView-Add-check-before-setting-default-or-fallback.patch @@ -1,63 +1,16 @@ -From 72405ae53c5e7c06045a7569bd58b3a4868d2803 Mon Sep 17 00:00:00 2001 +From 2f4c395069d1dfd7cce9a896f17868aa4aaf91c4 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Sat, 21 Sep 2024 13:44:09 +0530 -Subject: [PATCH 09/12] WebView: Add check before setting default or fallback +Subject: [PATCH 09/11] WebView: Add check before setting default or fallback provider Signed-off-by: Pranav Vashi --- - .../webkit/WebViewUpdateServiceImpl.java | 14 ++++++-- .../webkit/WebViewUpdateServiceImpl2.java | 34 ++++++++++++++----- - 2 files changed, 38 insertions(+), 10 deletions(-) + 1 file changed, 26 insertions(+), 8 deletions(-) -diff --git a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java -index b9be4a2de..e98196f9f 100644 ---- a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java -+++ b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java -@@ -15,6 +15,7 @@ - */ - package com.android.server.webkit; - -+import android.app.AppGlobals; - import android.annotation.Nullable; - import android.content.pm.PackageInfo; - import android.content.pm.PackageManager.NameNotFoundException; -@@ -396,7 +397,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { - @Override - public WebViewProviderInfo getDefaultWebViewPackage() { - for (WebViewProviderInfo provider : getWebViewPackages()) { -- if (provider.availableByDefault) { -+ if (provider.availableByDefault && isPackageAvailable(provider.packageName)) { - return provider; - } - } -@@ -406,6 +407,15 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { - throw new AndroidRuntimeException("No available by default WebView Provider."); - } - -+ private static boolean isPackageAvailable(String packageName) { -+ try { -+ AppGlobals.getInitialApplication().getPackageManager().getPackageInfo(packageName, 0); -+ return true; -+ } catch (NameNotFoundException e) { -+ return false; -+ } -+ } -+ - private static class ProviderAndPackageInfo { - public final WebViewProviderInfo provider; - public final PackageInfo packageInfo; -@@ -644,7 +654,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { - */ - private static WebViewProviderInfo getFallbackProvider(WebViewProviderInfo[] webviewPackages) { - for (WebViewProviderInfo provider : webviewPackages) { -- if (provider.isFallback) { -+ if (provider.isFallback && isPackageAvailable(provider.packageName)) { - return provider; - } - } diff --git a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java -index 307c15b72..26d1195dc 100644 +index 9e8dc2690..9e415bf63 100644 --- a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java +++ b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java @@ -15,6 +15,7 @@ @@ -68,7 +21,7 @@ index 307c15b72..26d1195dc 100644 import android.annotation.Nullable; import android.content.pm.PackageInfo; import android.content.pm.PackageManager.NameNotFoundException; -@@ -112,7 +113,7 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { +@@ -113,7 +114,7 @@ class WebViewUpdateServiceImpl2 { WebViewProviderInfo defaultProvider = null; for (WebViewProviderInfo provider : webviewProviders) { @@ -77,7 +30,7 @@ index 307c15b72..26d1195dc 100644 defaultProvider = provider; break; } -@@ -182,6 +183,15 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { +@@ -182,6 +183,15 @@ class WebViewUpdateServiceImpl2 { } } @@ -93,7 +46,7 @@ index 307c15b72..26d1195dc 100644 private boolean shouldTriggerRepairLocked() { if (mAttemptedToRepairBefore) { return false; -@@ -208,12 +218,20 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { +@@ -208,12 +218,20 @@ class WebViewUpdateServiceImpl2 { } mAttemptedToRepairBefore = true; } @@ -119,8 +72,8 @@ index 307c15b72..26d1195dc 100644 + } } - @Override -@@ -701,7 +719,7 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { + public void prepareWebViewInSystemServer() { +@@ -691,7 +709,7 @@ class WebViewUpdateServiceImpl2 { */ private static WebViewProviderInfo getFallbackProvider(WebViewProviderInfo[] webviewPackages) { for (WebViewProviderInfo provider : webviewPackages) { @@ -130,5 +83,5 @@ index 307c15b72..26d1195dc 100644 } } -- -2.44.0 +2.48.1 diff --git a/frameworks/base/0011-Allow-signature-spoofing-for-microG-Companion-Servic.patch b/frameworks/base/0010-Allow-signature-spoofing-for-microG-Companion-Servic.patch similarity index 94% rename from frameworks/base/0011-Allow-signature-spoofing-for-microG-Companion-Servic.patch rename to frameworks/base/0010-Allow-signature-spoofing-for-microG-Companion-Servic.patch index 946f917..aa5d673 100644 --- a/frameworks/base/0011-Allow-signature-spoofing-for-microG-Companion-Servic.patch +++ b/frameworks/base/0010-Allow-signature-spoofing-for-microG-Companion-Servic.patch @@ -1,7 +1,7 @@ -From 881fb29e6d4510f1691dd9a483fa89367cc32b64 Mon Sep 17 00:00:00 2001 +From 30058cdf576d1496ca63560f878eacf940e36ea2 Mon Sep 17 00:00:00 2001 From: LuK1337 Date: Mon, 19 Feb 2024 16:20:04 +0100 -Subject: [PATCH 11/12] Allow signature spoofing for microG Companion/Services +Subject: [PATCH 10/11] Allow signature spoofing for microG Companion/Services This patch enables signature spoofing when the following conditions are met: @@ -43,10 +43,10 @@ index cc4c2b5bf..57263da93 100644 || newPkg.isForceQueryable() || ArrayUtils.contains(mForceQueryableByDevicePackageNames, diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java -index 4665a72b0..2f73bb836 100644 +index be2f58dc2..3eb3df412 100644 --- a/services/core/java/com/android/server/pm/ComputerEngine.java +++ b/services/core/java/com/android/server/pm/ComputerEngine.java -@@ -102,6 +102,7 @@ import android.content.pm.UserPackage; +@@ -103,6 +103,7 @@ import android.content.pm.UserPackage; import android.content.pm.VersionedPackage; import android.os.Binder; import android.os.Build; @@ -54,7 +54,7 @@ index 4665a72b0..2f73bb836 100644 import android.os.IBinder; import android.os.ParcelableException; import android.os.PatternMatcher; -@@ -174,6 +175,7 @@ import java.util.Collections; +@@ -176,6 +177,7 @@ import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Objects; @@ -62,7 +62,7 @@ index 4665a72b0..2f73bb836 100644 import java.util.Set; import java.util.UUID; -@@ -422,6 +424,10 @@ public class ComputerEngine implements Computer { +@@ -424,6 +426,10 @@ public class ComputerEngine implements Computer { private final PackageManagerInternal.ExternalSourcesPolicy mExternalSourcesPolicy; private final CrossProfileIntentResolverEngine mCrossProfileIntentResolverEngine; @@ -73,7 +73,7 @@ index 4665a72b0..2f73bb836 100644 // PackageManagerService attributes that are primitives are referenced through the // pms object directly. Primitives are the only attributes so referenced. protected final PackageManagerService mService; -@@ -1481,6 +1487,49 @@ public class ComputerEngine implements Computer { +@@ -1483,6 +1489,49 @@ public class ComputerEngine implements Computer { return result; } @@ -123,7 +123,7 @@ index 4665a72b0..2f73bb836 100644 public final PackageInfo generatePackageInfo(PackageStateInternal ps, @PackageManager.PackageInfoFlagsBits long flags, int userId) { if (!mUserManager.exists(userId)) return null; -@@ -1536,6 +1585,11 @@ public class ComputerEngine implements Computer { +@@ -1538,6 +1587,11 @@ public class ComputerEngine implements Computer { mApexManager.getActivePackageNameForApexModuleName(apexModuleName)); } } @@ -136,10 +136,10 @@ index 4665a72b0..2f73bb836 100644 } else if ((flags & (MATCH_UNINSTALLED_PACKAGES | MATCH_ARCHIVED_PACKAGES)) != 0 && PackageUserStateUtils.isAvailable(state, flags)) { diff --git a/services/core/jni/Android.bp b/services/core/jni/Android.bp -index a5085fc31..9a1d2bc2b 100644 +index 4c0cee404..a4d192c8e 100644 --- a/services/core/jni/Android.bp +++ b/services/core/jni/Android.bp -@@ -74,6 +74,7 @@ cc_library_static { +@@ -71,6 +71,7 @@ cc_library_static { "com_android_server_vibrator_VibratorManagerService.cpp", "com_android_server_pdb_PersistentDataBlockService.cpp", "com_android_server_am_LowMemDetector.cpp", @@ -147,7 +147,7 @@ index a5085fc31..9a1d2bc2b 100644 "com_android_server_pm_PackageManagerShellCommandDataLoader.cpp", "com_android_server_sensor_SensorService.cpp", "com_android_server_wm_TaskFpsCallbackController.cpp", -@@ -97,6 +98,12 @@ cc_library_static { +@@ -94,6 +95,12 @@ cc_library_static { header_libs: [ "bionic_libc_platform_headers", ], @@ -205,11 +205,11 @@ index 000000000..bbe298097 + +} // namespace android diff --git a/services/core/jni/onload.cpp b/services/core/jni/onload.cpp -index 3c55d1824..5fac851d9 100644 +index 09fd8d4ac..0d61a13d2 100644 --- a/services/core/jni/onload.cpp +++ b/services/core/jni/onload.cpp -@@ -59,6 +59,7 @@ int register_android_server_am_LowMemDetector(JNIEnv* env); - int register_android_server_utils_AnrTimer(JNIEnv *env); +@@ -58,6 +58,7 @@ int register_android_server_utils_AnrTimer(JNIEnv *env); + int register_android_server_utils_LazyJniRegistrar(JNIEnv* env); int register_com_android_server_soundtrigger_middleware_AudioSessionProviderImpl(JNIEnv* env); int register_com_android_server_soundtrigger_middleware_ExternalCaptureStateTracker(JNIEnv* env); +int register_android_server_com_android_server_pm_ComputerEngine(JNIEnv* env); @@ -217,7 +217,7 @@ index 3c55d1824..5fac851d9 100644 int register_android_server_AdbDebuggingManager(JNIEnv* env); int register_android_server_FaceService(JNIEnv* env); @@ -124,6 +125,7 @@ extern "C" jint JNI_OnLoad(JavaVM* vm, void* /* reserved */) - register_android_server_utils_AnrTimer(env); + register_android_server_utils_LazyJniRegistrar(env); register_com_android_server_soundtrigger_middleware_AudioSessionProviderImpl(env); register_com_android_server_soundtrigger_middleware_ExternalCaptureStateTracker(env); + register_android_server_com_android_server_pm_ComputerEngine(env); @@ -225,5 +225,5 @@ index 3c55d1824..5fac851d9 100644 register_android_server_AdbDebuggingManager(env); register_android_server_FaceService(env); -- -2.44.0 +2.48.1 diff --git a/frameworks/base/0012-Allow-spoofing-signingInfo-for-microG-Companion-Serv.patch b/frameworks/base/0011-Allow-spoofing-signingInfo-for-microG-Companion-Serv.patch similarity index 86% rename from frameworks/base/0012-Allow-spoofing-signingInfo-for-microG-Companion-Serv.patch rename to frameworks/base/0011-Allow-spoofing-signingInfo-for-microG-Companion-Serv.patch index 4f8baec..3a40baf 100644 --- a/frameworks/base/0012-Allow-spoofing-signingInfo-for-microG-Companion-Serv.patch +++ b/frameworks/base/0011-Allow-spoofing-signingInfo-for-microG-Companion-Serv.patch @@ -1,7 +1,7 @@ -From 0c60edf128cc549f20fba38b33984d55c63adc43 Mon Sep 17 00:00:00 2001 +From 31cfef8a4245e49b99fc36cc8eaf7b0452ae9985 Mon Sep 17 00:00:00 2001 From: Jonathan Klee Date: Thu, 12 Dec 2024 15:27:57 +0100 -Subject: [PATCH 12/12] Allow spoofing signingInfo for microG +Subject: [PATCH 11/11] Allow spoofing signingInfo for microG Companion/Services - Spoof PackageInfo signingInfo + signatures so that @@ -14,10 +14,10 @@ Signed-off-by: althafvly 1 file changed, 13 insertions(+) diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java -index 2f73bb836..4cf099aed 100644 +index 3eb3df412..6f5813065 100644 --- a/services/core/java/com/android/server/pm/ComputerEngine.java +++ b/services/core/java/com/android/server/pm/ComputerEngine.java -@@ -168,6 +168,7 @@ import java.io.FileOutputStream; +@@ -170,6 +170,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; import java.nio.charset.StandardCharsets; @@ -25,7 +25,7 @@ index 2f73bb836..4cf099aed 100644 import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; -@@ -1588,6 +1589,18 @@ public class ComputerEngine implements Computer { +@@ -1590,6 +1591,18 @@ public class ComputerEngine implements Computer { generateFakeSignature(p).ifPresent(fakeSignature -> { packageInfo.signatures = new Signature[]{fakeSignature}; @@ -45,5 +45,5 @@ index 2f73bb836..4cf099aed 100644 return packageInfo; -- -2.44.0 +2.48.1 diff --git a/frameworks/native/0001-sensorservice-Add-support-for-ignoring-broken-sensor.patch b/frameworks/native/0001-sensorservice-Add-support-for-ignoring-broken-sensor.patch index 930e02b..eba4188 100644 --- a/frameworks/native/0001-sensorservice-Add-support-for-ignoring-broken-sensor.patch +++ b/frameworks/native/0001-sensorservice-Add-support-for-ignoring-broken-sensor.patch @@ -1,7 +1,7 @@ -From ccd46a8a09baedf0fcad9648d75ac29468055a8f Mon Sep 17 00:00:00 2001 +From b02d33fe80bed126c8caeebb51ced31e9b0c710e Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sun, 6 Oct 2024 09:06:48 -0400 -Subject: [PATCH 1/3] sensorservice: Add support for ignoring broken sensors +Subject: [PATCH 1/7] sensorservice: Add support for ignoring broken sensors This allows those sensors to be replaced by SensorFusion when possible. @@ -11,7 +11,7 @@ Change-Id: I5509ee1f54fdf4838f6e3b109819a689f483cfc4 1 file changed, 17 insertions(+) diff --git a/services/sensorservice/SensorDevice.cpp b/services/sensorservice/SensorDevice.cpp -index 9c4d1ac..5a95096 100644 +index 9c4d1ace15..5a95096fdb 100644 --- a/services/sensorservice/SensorDevice.cpp +++ b/services/sensorservice/SensorDevice.cpp @@ -17,6 +17,7 @@ @@ -57,5 +57,5 @@ index 9c4d1ac..5a95096 100644 if (sensor.type < DEVICE_PRIVATE_BASE) { sensor.resolution = SensorDeviceUtils::resolutionForSensor(sensor); -- -2.44.0 +2.48.1 diff --git a/frameworks/native/0002-Add-MTK-GED-KPI-support-to-fix-broken-Mediatek-gpufr.patch b/frameworks/native/0002-Add-MTK-GED-KPI-support-to-fix-broken-Mediatek-gpufr.patch index 3ff5f65..77948ac 100644 --- a/frameworks/native/0002-Add-MTK-GED-KPI-support-to-fix-broken-Mediatek-gpufr.patch +++ b/frameworks/native/0002-Add-MTK-GED-KPI-support-to-fix-broken-Mediatek-gpufr.patch @@ -1,7 +1,7 @@ -From 8dd1136bfd5a9dc403dc24839de2cbd1fe5cd273 Mon Sep 17 00:00:00 2001 +From 050301ed102cd6b41756adf114243a3cfa8b70a6 Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Sat, 25 Nov 2023 08:15:28 -0500 -Subject: [PATCH 2/3] Add MTK GED KPI support to fix broken Mediatek gpufreq +Subject: [PATCH 2/7] Add MTK GED KPI support to fix broken Mediatek gpufreq Mediatek GPU scheduler likes to have the timestamps of the frames to be able to adjust DVFS. @@ -24,7 +24,7 @@ Change-Id: Ic29a231ea8651efd598083611197aaa9e3c1fbbe 2 files changed, 205 insertions(+) diff --git a/libs/gui/Surface.cpp b/libs/gui/Surface.cpp -index 66e7ddd..32070fa 100644 +index e41f9bbf43..d6863467a3 100644 --- a/libs/gui/Surface.cpp +++ b/libs/gui/Surface.cpp @@ -26,6 +26,9 @@ @@ -279,7 +279,7 @@ index 66e7ddd..32070fa 100644 mConnectedToCpu = true; // Clear the dirty region in case we're switching from a non-CPU API diff --git a/libs/gui/include/gui/Surface.h b/libs/gui/include/gui/Surface.h -index 14a3513..e0843a8 100644 +index 14a351316d..e0843a8016 100644 --- a/libs/gui/include/gui/Surface.h +++ b/libs/gui/include/gui/Surface.h @@ -742,6 +742,9 @@ protected: @@ -293,5 +293,5 @@ index 14a3513..e0843a8 100644 } // namespace android -- -2.44.0 +2.48.1 diff --git a/frameworks/native/0003-vibratorservice-Support-optionally-ignoring-vibrator.patch b/frameworks/native/0003-vibratorservice-Support-optionally-ignoring-vibrator.patch index 884ad94..3987492 100644 --- a/frameworks/native/0003-vibratorservice-Support-optionally-ignoring-vibrator.patch +++ b/frameworks/native/0003-vibratorservice-Support-optionally-ignoring-vibrator.patch @@ -1,7 +1,7 @@ -From 399022e4c7686d24d6738ad6a1c939998c6ac801 Mon Sep 17 00:00:00 2001 +From 37580f1924099111b2995e910ed64bb4182b9c39 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Mon, 7 Oct 2024 22:07:58 -0400 -Subject: [PATCH 3/3] vibratorservice: Support optionally ignoring vibrator +Subject: [PATCH 3/7] vibratorservice: Support optionally ignoring vibrator effects On Unihertz Jelly Max the preloaded vibrator HAL is utterly broken. @@ -13,7 +13,7 @@ Change-Id: I308190a225932fba2a4aa1c830c03ab874d8032e 2 files changed, 32 insertions(+) diff --git a/services/vibratorservice/Android.bp b/services/vibratorservice/Android.bp -index 4735ae5..6263b05 100644 +index 4735ae5897..6263b0506f 100644 --- a/services/vibratorservice/Android.bp +++ b/services/vibratorservice/Android.bp @@ -41,6 +41,7 @@ cc_library_shared { @@ -25,7 +25,7 @@ index 4735ae5..6263b05 100644 "libhidlbase", "liblog", diff --git a/services/vibratorservice/VibratorHalWrapper.cpp b/services/vibratorservice/VibratorHalWrapper.cpp -index 4ac1618..ab027bd 100644 +index 3ddc4f2aca..11178659ff 100644 --- a/services/vibratorservice/VibratorHalWrapper.cpp +++ b/services/vibratorservice/VibratorHalWrapper.cpp @@ -17,6 +17,7 @@ @@ -78,7 +78,7 @@ index 4ac1618..ab027bd 100644 } if (mInfoCache.mSupportedBraking.isFailed()) { mInfoCache.mSupportedBraking = getSupportedBrakingInternal(); -@@ -295,6 +322,8 @@ HalResult AidlHalWrapper::alwaysOnDisable(int32_t id) { +@@ -305,6 +332,8 @@ HalResult AidlHalWrapper::alwaysOnDisable(int32_t id) { HalResult AidlHalWrapper::performEffect( Effect effect, EffectStrength strength, const std::function& completionCallback) { @@ -87,7 +87,7 @@ index 4ac1618..ab027bd 100644 HalResult capabilities = getCapabilities(); bool supportsCallback = capabilities.isOk() && static_cast(capabilities.value() & Capabilities::PERFORM_CALLBACK); -@@ -563,6 +592,8 @@ template +@@ -582,6 +611,8 @@ template HalResult HidlHalWrapper::performInternal( perform_fn performFn, sp handle, T effect, EffectStrength strength, const std::function& completionCallback) { @@ -97,5 +97,5 @@ index 4ac1618..ab027bd 100644 int32_t lengthMs; auto effectCallback = [&status, &lengthMs](V1_0::Status retStatus, uint32_t retLengthMs) { -- -2.44.0 +2.48.1 diff --git a/frameworks/native/0004-Revert-Remove-flag-single_hop_screenshots.patch b/frameworks/native/0004-Revert-Remove-flag-single_hop_screenshots.patch new file mode 100644 index 0000000..160c390 --- /dev/null +++ b/frameworks/native/0004-Revert-Remove-flag-single_hop_screenshots.patch @@ -0,0 +1,348 @@ +From b12faaf3064de58caf0f6bfaf7fcac5a47f5024d Mon Sep 17 00:00:00 2001 +From: Peter Cai +Date: Sun, 16 Mar 2025 12:54:56 -0400 +Subject: [PATCH 4/7] Revert "Remove flag single_hop_screenshots" + +This reverts commit 16c4c32c55231dc241c386a0423710baa452b7de. + +Change-Id: Ib1618cd4e1f83ba1f211a04429538b32e8de79da +--- + .../surfaceflinger/RegionSamplingThread.cpp | 22 ++- + services/surfaceflinger/SurfaceFlinger.cpp | 184 ++++++++++++++---- + services/surfaceflinger/SurfaceFlinger.h | 10 +- + .../surfaceflinger/common/FlagManager.cpp | 2 + + .../common/include/common/FlagManager.h | 1 + + .../tests/unittests/TestableSurfaceFlinger.h | 3 +- + 6 files changed, 171 insertions(+), 51 deletions(-) + +diff --git a/services/surfaceflinger/RegionSamplingThread.cpp b/services/surfaceflinger/RegionSamplingThread.cpp +index 21d3396ebe..08f831c8e5 100644 +--- a/services/surfaceflinger/RegionSamplingThread.cpp ++++ b/services/surfaceflinger/RegionSamplingThread.cpp +@@ -353,13 +353,21 @@ void RegionSamplingThread::captureSample() { + sampledBounds.getSize(), ui::Dataspace::V0_SRGB, displayWeak, + RenderArea::Options::CAPTURE_SECURE_LAYERS); + +- std::vector>> layers; +- auto displayState = +- mFlinger.getSnapshotsFromMainThread(renderAreaBuilder, getLayerSnapshotsFn, layers); +- FenceResult fenceResult = +- mFlinger.captureScreenshot(renderAreaBuilder, buffer, kRegionSampling, kGrayscale, +- kIsProtected, kAttachGainmap, nullptr, displayState, layers) +- .get(); ++ FenceResult fenceResult; ++ if (FlagManager::getInstance().single_hop_screenshot()) { ++ std::vector>> layers; ++ auto displayState = ++ mFlinger.getSnapshotsFromMainThread(renderAreaBuilder, getLayerSnapshotsFn, layers); ++ fenceResult = mFlinger.captureScreenshot(renderAreaBuilder, buffer, kRegionSampling, ++ kGrayscale, kIsProtected, kAttachGainmap, nullptr, ++ displayState, layers) ++ .get(); ++ } else { ++ fenceResult = mFlinger.captureScreenshotLegacy(renderAreaBuilder, getLayerSnapshotsFn, ++ buffer, kRegionSampling, kGrayscale, ++ kIsProtected, kAttachGainmap, nullptr) ++ .get(); ++ } + if (fenceResult.ok()) { + fenceResult.value()->waitForever(LOG_TAG); + } +diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp +index 896d13d31d..852a8b81e1 100644 +--- a/services/surfaceflinger/SurfaceFlinger.cpp ++++ b/services/surfaceflinger/SurfaceFlinger.cpp +@@ -7389,41 +7389,79 @@ void SurfaceFlinger::captureScreenCommon(RenderAreaBuilderVariant renderAreaBuil + return; + } + +- std::vector>> layers; +- auto displayState = getSnapshotsFromMainThread(renderAreaBuilder, getLayerSnapshotsFn, layers); +- +- const bool supportsProtected = getRenderEngine().supportsProtectedContent(); +- bool hasProtectedLayer = false; +- if (allowProtected && supportsProtected) { +- hasProtectedLayer = layersHasProtectedLayer(layers); +- } +- const bool isProtected = hasProtectedLayer && allowProtected && supportsProtected; +- const uint32_t usage = GRALLOC_USAGE_HW_COMPOSER | GRALLOC_USAGE_HW_RENDER | +- GRALLOC_USAGE_HW_TEXTURE | +- (isProtected ? GRALLOC_USAGE_PROTECTED +- : GRALLOC_USAGE_SW_READ_OFTEN | GRALLOC_USAGE_SW_WRITE_OFTEN); +- sp buffer = +- getFactory().createGraphicBuffer(bufferSize.getWidth(), bufferSize.getHeight(), +- static_cast(reqPixelFormat), +- 1 /* layerCount */, usage, "screenshot"); +- +- const status_t bufferStatus = buffer->initCheck(); +- if (bufferStatus != OK) { +- // Animations may end up being really janky, but don't crash here. +- // Otherwise an irreponsible process may cause an SF crash by allocating +- // too much. +- ALOGE("%s: Buffer failed to allocate: %d", __func__, bufferStatus); +- invokeScreenCaptureError(bufferStatus, captureListener); +- return; ++ if (FlagManager::getInstance().single_hop_screenshot()) { ++ std::vector>> layers; ++ auto displayState = ++ getSnapshotsFromMainThread(renderAreaBuilder, getLayerSnapshotsFn, layers); ++ ++ const bool supportsProtected = getRenderEngine().supportsProtectedContent(); ++ bool hasProtectedLayer = false; ++ if (allowProtected && supportsProtected) { ++ hasProtectedLayer = layersHasProtectedLayer(layers); ++ } ++ const bool isProtected = hasProtectedLayer && allowProtected && supportsProtected; ++ const uint32_t usage = GRALLOC_USAGE_HW_COMPOSER | GRALLOC_USAGE_HW_RENDER | ++ GRALLOC_USAGE_HW_TEXTURE | ++ (isProtected ? GRALLOC_USAGE_PROTECTED ++ : GRALLOC_USAGE_SW_READ_OFTEN | GRALLOC_USAGE_SW_WRITE_OFTEN); ++ sp buffer = ++ getFactory().createGraphicBuffer(bufferSize.getWidth(), bufferSize.getHeight(), ++ static_cast(reqPixelFormat), ++ 1 /* layerCount */, usage, "screenshot"); ++ ++ const status_t bufferStatus = buffer->initCheck(); ++ if (bufferStatus != OK) { ++ // Animations may end up being really janky, but don't crash here. ++ // Otherwise an irreponsible process may cause an SF crash by allocating ++ // too much. ++ ALOGE("%s: Buffer failed to allocate: %d", __func__, bufferStatus); ++ invokeScreenCaptureError(bufferStatus, captureListener); ++ return; ++ } ++ const std::shared_ptr texture = std::make_shared< ++ renderengine::impl::ExternalTexture>(buffer, getRenderEngine(), ++ renderengine::impl::ExternalTexture::Usage:: ++ WRITEABLE); ++ auto futureFence = captureScreenshot(renderAreaBuilder, texture, false /* regionSampling */, ++ grayscale, isProtected, attachGainmap, captureListener, ++ displayState, layers); ++ futureFence.get(); ++ ++ } else { ++ const bool supportsProtected = getRenderEngine().supportsProtectedContent(); ++ bool hasProtectedLayer = false; ++ if (allowProtected && supportsProtected) { ++ auto layers = mScheduler->schedule([=]() { return getLayerSnapshotsFn(); }).get(); ++ hasProtectedLayer = layersHasProtectedLayer(layers); ++ } ++ const bool isProtected = hasProtectedLayer && allowProtected && supportsProtected; ++ const uint32_t usage = GRALLOC_USAGE_HW_COMPOSER | GRALLOC_USAGE_HW_RENDER | ++ GRALLOC_USAGE_HW_TEXTURE | ++ (isProtected ? GRALLOC_USAGE_PROTECTED ++ : GRALLOC_USAGE_SW_READ_OFTEN | GRALLOC_USAGE_SW_WRITE_OFTEN); ++ sp buffer = ++ getFactory().createGraphicBuffer(bufferSize.getWidth(), bufferSize.getHeight(), ++ static_cast(reqPixelFormat), ++ 1 /* layerCount */, usage, "screenshot"); ++ ++ const status_t bufferStatus = buffer->initCheck(); ++ if (bufferStatus != OK) { ++ // Animations may end up being really janky, but don't crash here. ++ // Otherwise an irreponsible process may cause an SF crash by allocating ++ // too much. ++ ALOGE("%s: Buffer failed to allocate: %d", __func__, bufferStatus); ++ invokeScreenCaptureError(bufferStatus, captureListener); ++ return; ++ } ++ const std::shared_ptr texture = std::make_shared< ++ renderengine::impl::ExternalTexture>(buffer, getRenderEngine(), ++ renderengine::impl::ExternalTexture::Usage:: ++ WRITEABLE); ++ auto futureFence = captureScreenshotLegacy(renderAreaBuilder, getLayerSnapshotsFn, texture, ++ false /* regionSampling */, grayscale, ++ isProtected, attachGainmap, captureListener); ++ futureFence.get(); + } +- const std::shared_ptr texture = std::make_shared< +- renderengine::impl::ExternalTexture>(buffer, getRenderEngine(), +- renderengine::impl::ExternalTexture::Usage:: +- WRITEABLE); +- auto futureFence = +- captureScreenshot(renderAreaBuilder, texture, false /* regionSampling */, grayscale, +- isProtected, attachGainmap, captureListener, displayState, layers); +- futureFence.get(); + } + + std::optional +@@ -7489,7 +7527,7 @@ ftl::SharedFuture SurfaceFlinger::captureScreenshot( + + ftl::SharedFuture renderFuture = + renderScreenImpl(renderArea.get(), buffer, regionSampling, grayscale, isProtected, +- captureResults, displayState, layers); ++ attachGainmap, captureResults, displayState, layers); + + if (captureResults.capturedHdrLayers && attachGainmap && + FlagManager::getInstance().true_hdr_screenshots()) { +@@ -7524,7 +7562,8 @@ ftl::SharedFuture SurfaceFlinger::captureScreenshot( + ScreenCaptureResults unusedResults; + ftl::SharedFuture hdrRenderFuture = + renderScreenImpl(renderArea.get(), hdrTexture, regionSampling, grayscale, +- isProtected, unusedResults, displayState, layers); ++ isProtected, attachGainmap, unusedResults, displayState, ++ layers); + + renderFuture = + ftl::Future(std::move(renderFuture)) +@@ -7570,10 +7609,67 @@ ftl::SharedFuture SurfaceFlinger::captureScreenshot( + return renderFuture; + } + ++ftl::SharedFuture SurfaceFlinger::captureScreenshotLegacy( ++ RenderAreaBuilderVariant renderAreaBuilder, GetLayerSnapshotsFunction getLayerSnapshotsFn, ++ const std::shared_ptr& buffer, bool regionSampling, ++ bool grayscale, bool isProtected, bool attachGainmap, ++ const sp& captureListener) { ++ SFTRACE_CALL(); ++ ++ auto takeScreenshotFn = [=, this, renderAreaBuilder = std::move(renderAreaBuilder)]() REQUIRES( ++ kMainThreadContext) mutable -> ftl::SharedFuture { ++ auto layers = getLayerSnapshotsFn(); ++ auto displayState = getDisplayStateFromRenderAreaBuilder(renderAreaBuilder); ++ ++ ScreenCaptureResults captureResults; ++ std::unique_ptr renderArea = ++ std::visit([](auto&& arg) -> std::unique_ptr { return arg.build(); }, ++ renderAreaBuilder); ++ ++ if (!renderArea) { ++ ALOGW("Skipping screen capture because of invalid render area."); ++ if (captureListener) { ++ captureResults.fenceResult = base::unexpected(NO_MEMORY); ++ captureListener->onScreenCaptureCompleted(captureResults); ++ } ++ return ftl::yield(base::unexpected(NO_ERROR)).share(); ++ } ++ ++ ftl::SharedFuture renderFuture = ++ renderScreenImpl(renderArea.get(), buffer, regionSampling, grayscale, isProtected, ++ attachGainmap, captureResults, displayState, layers); ++ ++ if (captureListener) { ++ // Defer blocking on renderFuture back to the Binder thread. ++ return ftl::Future(std::move(renderFuture)) ++ .then([captureListener, captureResults = std::move(captureResults)]( ++ FenceResult fenceResult) mutable -> FenceResult { ++ captureResults.fenceResult = std::move(fenceResult); ++ captureListener->onScreenCaptureCompleted(captureResults); ++ return base::unexpected(NO_ERROR); ++ }) ++ .share(); ++ } ++ return renderFuture; ++ }; ++ ++ // TODO(b/294936197): Run takeScreenshotsFn() in a binder thread to reduce the number ++ // of calls on the main thread. ++ auto future = ++ mScheduler->schedule(FTL_FAKE_GUARD(kMainThreadContext, std::move(takeScreenshotFn))); ++ ++ // Flatten nested futures. ++ auto chain = ftl::Future(std::move(future)).then([](ftl::SharedFuture future) { ++ return future; ++ }); ++ ++ return chain.share(); ++} ++ + ftl::SharedFuture SurfaceFlinger::renderScreenImpl( + const RenderArea* renderArea, const std::shared_ptr& buffer, +- bool regionSampling, bool grayscale, bool isProtected, ScreenCaptureResults& captureResults, +- std::optional& displayState, ++ bool regionSampling, bool grayscale, bool isProtected, bool attachGainmap, ++ ScreenCaptureResults& captureResults, std::optional& displayState, + std::vector>>& layers) { + SFTRACE_CALL(); + +@@ -7719,9 +7815,15 @@ ftl::SharedFuture SurfaceFlinger::renderScreenImpl( + // + // TODO(b/196334700) Once we use RenderEngineThreaded everywhere we can always defer the call + // to CompositionEngine::present. +- ftl::SharedFuture presentFuture = mRenderEngine->isThreaded() +- ? ftl::yield(present()).share() +- : mScheduler->schedule(std::move(present)).share(); ++ ftl::SharedFuture presentFuture; ++ if (FlagManager::getInstance().single_hop_screenshot()) { ++ presentFuture = mRenderEngine->isThreaded() ++ ? ftl::yield(present()).share() ++ : mScheduler->schedule(std::move(present)).share(); ++ } else { ++ presentFuture = mRenderEngine->isThreaded() ? ftl::defer(std::move(present)).share() ++ : ftl::yield(present()).share(); ++ } + + return presentFuture; + } +diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h +index 1e2c08747b..835cb572b4 100644 +--- a/services/surfaceflinger/SurfaceFlinger.h ++++ b/services/surfaceflinger/SurfaceFlinger.h +@@ -885,10 +885,16 @@ private: + std::optional& displayState, + std::vector>>& layers); + ++ ftl::SharedFuture captureScreenshotLegacy( ++ RenderAreaBuilderVariant, GetLayerSnapshotsFunction, ++ const std::shared_ptr&, bool regionSampling, ++ bool grayscale, bool isProtected, bool attachGainmap, ++ const sp&); ++ + ftl::SharedFuture renderScreenImpl( + const RenderArea*, const std::shared_ptr&, +- bool regionSampling, bool grayscale, bool isProtected, ScreenCaptureResults&, +- std::optional& displayState, ++ bool regionSampling, bool grayscale, bool isProtected, bool attachGainmap, ++ ScreenCaptureResults&, std::optional& displayState, + std::vector>>& layers); + + void readPersistentProperties(); +diff --git a/services/surfaceflinger/common/FlagManager.cpp b/services/surfaceflinger/common/FlagManager.cpp +index 5e78426c77..5c417ba748 100644 +--- a/services/surfaceflinger/common/FlagManager.cpp ++++ b/services/surfaceflinger/common/FlagManager.cpp +@@ -166,6 +166,7 @@ void FlagManager::dump(std::string& result) const { + DUMP_ACONFIG_FLAG(skip_invisible_windows_in_input); + DUMP_ACONFIG_FLAG(begone_bright_hlg); + DUMP_ACONFIG_FLAG(window_blur_kawase2); ++ DUMP_ACONFIG_FLAG(single_hop_screenshot); + + #undef DUMP_ACONFIG_FLAG + #undef DUMP_LEGACY_SERVER_FLAG +@@ -259,6 +260,7 @@ FLAG_MANAGER_ACONFIG_FLAG(local_tonemap_screenshots, "debug.sf.local_tonemap_scr + FLAG_MANAGER_ACONFIG_FLAG(override_trusted_overlay, ""); + FLAG_MANAGER_ACONFIG_FLAG(flush_buffer_slots_to_uncache, ""); + FLAG_MANAGER_ACONFIG_FLAG(force_compile_graphite_renderengine, ""); ++FLAG_MANAGER_ACONFIG_FLAG(single_hop_screenshot, ""); + FLAG_MANAGER_ACONFIG_FLAG(true_hdr_screenshots, "debug.sf.true_hdr_screenshots"); + FLAG_MANAGER_ACONFIG_FLAG(display_config_error_hal, ""); + FLAG_MANAGER_ACONFIG_FLAG(connected_display_hdr, "debug.sf.connected_display_hdr"); +diff --git a/services/surfaceflinger/common/include/common/FlagManager.h b/services/surfaceflinger/common/include/common/FlagManager.h +index d8887f538f..15284ba0ee 100644 +--- a/services/surfaceflinger/common/include/common/FlagManager.h ++++ b/services/surfaceflinger/common/include/common/FlagManager.h +@@ -95,6 +95,7 @@ public: + bool override_trusted_overlay() const; + bool flush_buffer_slots_to_uncache() const; + bool force_compile_graphite_renderengine() const; ++ bool single_hop_screenshot() const; + bool trace_frame_rate_override() const; + bool true_hdr_screenshots() const; + bool display_config_error_hal() const; +diff --git a/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h b/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h +index 7f0b7a6585..fd8bc0d22d 100644 +--- a/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h ++++ b/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h +@@ -475,7 +475,8 @@ public: + + return mFlinger->renderScreenImpl(renderArea.get(), buffer, regionSampling, + false /* grayscale */, false /* isProtected */, +- captureResults, displayState, layers); ++ false /* attachGainmap */, captureResults, displayState, ++ layers); + } + + auto getLayerSnapshotsForScreenshotsFn(ui::LayerStack layerStack, uint32_t uid) { +-- +2.48.1 + diff --git a/frameworks/native/0005-Revert-Reorder-release-fence-attachment-for-non-thre.patch b/frameworks/native/0005-Revert-Reorder-release-fence-attachment-for-non-thre.patch new file mode 100644 index 0000000..011881d --- /dev/null +++ b/frameworks/native/0005-Revert-Reorder-release-fence-attachment-for-non-thre.patch @@ -0,0 +1,334 @@ +From aa5e6f794b3e2c9f5bdbc40da702b14dd9a1764e Mon Sep 17 00:00:00 2001 +From: Peter Cai +Date: Sun, 16 Mar 2025 13:19:17 -0400 +Subject: [PATCH 5/7] Revert "Reorder release fence attachment for non-threaded + RE" + +This reverts commit 0b80c74300b73e937ee9a9cb58487bd126daa4d8. +--- + .../surfaceflinger/RegionSamplingThread.cpp | 11 ++- + services/surfaceflinger/SurfaceFlinger.cpp | 97 ++++++++++--------- + services/surfaceflinger/SurfaceFlinger.h | 16 ++- + .../tests/unittests/TestableSurfaceFlinger.h | 3 +- + 4 files changed, 69 insertions(+), 58 deletions(-) + +diff --git a/services/surfaceflinger/RegionSamplingThread.cpp b/services/surfaceflinger/RegionSamplingThread.cpp +index 08f831c8e5..011fd9e20a 100644 +--- a/services/surfaceflinger/RegionSamplingThread.cpp ++++ b/services/surfaceflinger/RegionSamplingThread.cpp +@@ -354,13 +354,14 @@ void RegionSamplingThread::captureSample() { + RenderArea::Options::CAPTURE_SECURE_LAYERS); + + FenceResult fenceResult; +- if (FlagManager::getInstance().single_hop_screenshot()) { +- std::vector>> layers; +- auto displayState = +- mFlinger.getSnapshotsFromMainThread(renderAreaBuilder, getLayerSnapshotsFn, layers); ++ if (FlagManager::getInstance().single_hop_screenshot() && ++ mFlinger.mRenderEngine->isThreaded()) { ++ std::vector> layerFEs; ++ auto displayState = mFlinger.getSnapshotsFromMainThread(renderAreaBuilder, ++ getLayerSnapshotsFn, layerFEs); + fenceResult = mFlinger.captureScreenshot(renderAreaBuilder, buffer, kRegionSampling, + kGrayscale, kIsProtected, kAttachGainmap, nullptr, +- displayState, layers) ++ displayState, layerFEs) + .get(); + } else { + fenceResult = mFlinger.captureScreenshotLegacy(renderAreaBuilder, getLayerSnapshotsFn, +diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp +index 852a8b81e1..067a8bafe0 100644 +--- a/services/surfaceflinger/SurfaceFlinger.cpp ++++ b/services/surfaceflinger/SurfaceFlinger.cpp +@@ -7335,10 +7335,9 @@ void SurfaceFlinger::attachReleaseFenceFutureToLayer(Layer* layer, LayerFE* laye + // typically a layer with DRM contents, or have the GRALLOC_USAGE_PROTECTED set on the buffer. + // A protected layer has no implication on whether it's secure, which is explicitly set by + // application to avoid being screenshot or drawn via unsecure display. +-bool SurfaceFlinger::layersHasProtectedLayer( +- const std::vector>>& layers) const { ++bool SurfaceFlinger::layersHasProtectedLayer(const std::vector>& layers) const { + bool protectedLayerFound = false; +- for (auto& [_, layerFE] : layers) { ++ for (auto& layerFE : layers) { + protectedLayerFound |= + (layerFE->mSnapshot->isVisible && layerFE->mSnapshot->hasProtectedContent); + if (protectedLayerFound) { +@@ -7354,21 +7353,15 @@ bool SurfaceFlinger::layersHasProtectedLayer( + // risk of deadlocks. + std::optional SurfaceFlinger::getSnapshotsFromMainThread( + RenderAreaBuilderVariant& renderAreaBuilder, GetLayerSnapshotsFunction getLayerSnapshotsFn, +- std::vector>>& layers) { ++ std::vector>& layerFEs) { + return mScheduler +- ->schedule([=, this, &renderAreaBuilder, &layers]() REQUIRES(kMainThreadContext) { ++ ->schedule([=, this, &renderAreaBuilder, &layerFEs]() REQUIRES(kMainThreadContext) { + SFTRACE_NAME("getSnapshotsFromMainThread"); +- layers = getLayerSnapshotsFn(); +- // Non-threaded RenderEngine eventually returns to the main thread a 2nd time +- // to complete the screenshot. Release fences should only be added during the 2nd +- // hop to main thread in order to avoid potential deadlocks from waiting for the +- // the future fence to fire. +- if (mRenderEngine->isThreaded()) { +- for (auto& [layer, layerFE] : layers) { +- attachReleaseFenceFutureToLayer(layer, layerFE.get(), +- ui::INVALID_LAYER_STACK); +- } ++ auto layers = getLayerSnapshotsFn(); ++ for (auto& [layer, layerFE] : layers) { ++ attachReleaseFenceFutureToLayer(layer, layerFE.get(), ui::INVALID_LAYER_STACK); + } ++ layerFEs = extractLayerFEs(layers); + return getDisplayStateFromRenderAreaBuilder(renderAreaBuilder); + }) + .get(); +@@ -7389,15 +7382,15 @@ void SurfaceFlinger::captureScreenCommon(RenderAreaBuilderVariant renderAreaBuil + return; + } + +- if (FlagManager::getInstance().single_hop_screenshot()) { +- std::vector>> layers; ++ if (FlagManager::getInstance().single_hop_screenshot() && mRenderEngine->isThreaded()) { ++ std::vector> layerFEs; + auto displayState = +- getSnapshotsFromMainThread(renderAreaBuilder, getLayerSnapshotsFn, layers); ++ getSnapshotsFromMainThread(renderAreaBuilder, getLayerSnapshotsFn, layerFEs); + + const bool supportsProtected = getRenderEngine().supportsProtectedContent(); + bool hasProtectedLayer = false; + if (allowProtected && supportsProtected) { +- hasProtectedLayer = layersHasProtectedLayer(layers); ++ hasProtectedLayer = layersHasProtectedLayer(layerFEs); + } + const bool isProtected = hasProtectedLayer && allowProtected && supportsProtected; + const uint32_t usage = GRALLOC_USAGE_HW_COMPOSER | GRALLOC_USAGE_HW_RENDER | +@@ -7424,7 +7417,7 @@ void SurfaceFlinger::captureScreenCommon(RenderAreaBuilderVariant renderAreaBuil + WRITEABLE); + auto futureFence = captureScreenshot(renderAreaBuilder, texture, false /* regionSampling */, + grayscale, isProtected, attachGainmap, captureListener, +- displayState, layers); ++ displayState, layerFEs); + futureFence.get(); + + } else { +@@ -7432,7 +7425,7 @@ void SurfaceFlinger::captureScreenCommon(RenderAreaBuilderVariant renderAreaBuil + bool hasProtectedLayer = false; + if (allowProtected && supportsProtected) { + auto layers = mScheduler->schedule([=]() { return getLayerSnapshotsFn(); }).get(); +- hasProtectedLayer = layersHasProtectedLayer(layers); ++ hasProtectedLayer = layersHasProtectedLayer(extractLayerFEs(layers)); + } + const bool isProtected = hasProtectedLayer && allowProtected && supportsProtected; + const uint32_t usage = GRALLOC_USAGE_HW_COMPOSER | GRALLOC_USAGE_HW_RENDER | +@@ -7500,13 +7493,22 @@ SurfaceFlinger::getDisplayStateFromRenderAreaBuilder(RenderAreaBuilderVariant& r + return std::nullopt; + } + ++std::vector> SurfaceFlinger::extractLayerFEs( ++ const std::vector>>& layers) const { ++ std::vector> layerFEs; ++ layerFEs.reserve(layers.size()); ++ for (const auto& [_, layerFE] : layers) { ++ layerFEs.push_back(layerFE); ++ } ++ return layerFEs; ++} ++ + ftl::SharedFuture SurfaceFlinger::captureScreenshot( + const RenderAreaBuilderVariant& renderAreaBuilder, + const std::shared_ptr& buffer, bool regionSampling, + bool grayscale, bool isProtected, bool attachGainmap, + const sp& captureListener, +- std::optional& displayState, +- std::vector>>& layers) { ++ std::optional& displayState, std::vector>& layerFEs) { + SFTRACE_CALL(); + + ScreenCaptureResults captureResults; +@@ -7525,9 +7527,11 @@ ftl::SharedFuture SurfaceFlinger::captureScreenshot( + float displayBrightnessNits = displayState.value().displayBrightnessNits; + float sdrWhitePointNits = displayState.value().sdrWhitePointNits; + ++ // Empty vector needed to pass into renderScreenImpl for legacy path ++ std::vector>> layers; + ftl::SharedFuture renderFuture = + renderScreenImpl(renderArea.get(), buffer, regionSampling, grayscale, isProtected, +- attachGainmap, captureResults, displayState, layers); ++ attachGainmap, captureResults, displayState, layers, layerFEs); + + if (captureResults.capturedHdrLayers && attachGainmap && + FlagManager::getInstance().true_hdr_screenshots()) { +@@ -7563,7 +7567,7 @@ ftl::SharedFuture SurfaceFlinger::captureScreenshot( + ftl::SharedFuture hdrRenderFuture = + renderScreenImpl(renderArea.get(), hdrTexture, regionSampling, grayscale, + isProtected, attachGainmap, unusedResults, displayState, +- layers); ++ layers, layerFEs); + + renderFuture = + ftl::Future(std::move(renderFuture)) +@@ -7619,6 +7623,9 @@ ftl::SharedFuture SurfaceFlinger::captureScreenshotLegacy( + auto takeScreenshotFn = [=, this, renderAreaBuilder = std::move(renderAreaBuilder)]() REQUIRES( + kMainThreadContext) mutable -> ftl::SharedFuture { + auto layers = getLayerSnapshotsFn(); ++ for (auto& [layer, layerFE] : layers) { ++ attachReleaseFenceFutureToLayer(layer, layerFE.get(), ui::INVALID_LAYER_STACK); ++ } + auto displayState = getDisplayStateFromRenderAreaBuilder(renderAreaBuilder); + + ScreenCaptureResults captureResults; +@@ -7635,9 +7642,10 @@ ftl::SharedFuture SurfaceFlinger::captureScreenshotLegacy( + return ftl::yield(base::unexpected(NO_ERROR)).share(); + } + ++ auto layerFEs = extractLayerFEs(layers); + ftl::SharedFuture renderFuture = + renderScreenImpl(renderArea.get(), buffer, regionSampling, grayscale, isProtected, +- attachGainmap, captureResults, displayState, layers); ++ attachGainmap, captureResults, displayState, layers, layerFEs); + + if (captureListener) { + // Defer blocking on renderFuture back to the Binder thread. +@@ -7670,10 +7678,10 @@ ftl::SharedFuture SurfaceFlinger::renderScreenImpl( + const RenderArea* renderArea, const std::shared_ptr& buffer, + bool regionSampling, bool grayscale, bool isProtected, bool attachGainmap, + ScreenCaptureResults& captureResults, std::optional& displayState, +- std::vector>>& layers) { ++ std::vector>>& layers, std::vector>& layerFEs) { + SFTRACE_CALL(); + +- for (auto& [_, layerFE] : layers) { ++ for (auto& layerFE : layerFEs) { + frontend::LayerSnapshot* snapshot = layerFE->mSnapshot.get(); + captureResults.capturedSecureLayers |= (snapshot->isVisible && snapshot->isSecure); + captureResults.capturedHdrLayers |= isHdrLayer(*snapshot); +@@ -7732,32 +7740,29 @@ ftl::SharedFuture SurfaceFlinger::renderScreenImpl( + captureResults.buffer = capturedBuffer->getBuffer(); + + ui::LayerStack layerStack{ui::DEFAULT_LAYER_STACK}; +- if (!layers.empty()) { +- const sp& layerFE = layers.back().second; ++ if (!layerFEs.empty()) { ++ const sp& layerFE = layerFEs.back(); + layerStack = layerFE->getCompositionState()->outputFilter.layerStack; + } + ++ auto copyLayerFEs = [&layerFEs]() { ++ std::vector> ceLayerFEs; ++ ceLayerFEs.reserve(layerFEs.size()); ++ for (const auto& layerFE : layerFEs) { ++ ceLayerFEs.push_back(layerFE); ++ } ++ return ceLayerFEs; ++ }; ++ + auto present = [this, buffer = capturedBuffer, dataspace = captureResults.capturedDataspace, + sdrWhitePointNits, displayBrightnessNits, grayscale, isProtected, +- layers = std::move(layers), layerStack, regionSampling, ++ layerFEs = copyLayerFEs(), layerStack, regionSampling, + renderArea = std::move(renderArea), renderIntent, + enableLocalTonemapping]() -> FenceResult { + std::unique_ptr compositionEngine = + mFactory.createCompositionEngine(); + compositionEngine->setRenderEngine(mRenderEngine.get()); + +- std::vector> layerFEs; +- layerFEs.reserve(layers.size()); +- for (auto& [layer, layerFE] : layers) { +- // Release fences were not yet added for non-threaded render engine. To avoid +- // deadlocks between main thread and binder threads waiting for the future fence +- // result, fences should be added to layers in the same hop onto the main thread. +- if (!mRenderEngine->isThreaded()) { +- attachReleaseFenceFutureToLayer(layer, layerFE.get(), ui::INVALID_LAYER_STACK); +- } +- layerFEs.push_back(layerFE); +- } +- + compositionengine::Output::ColorProfile colorProfile{.dataspace = dataspace, + .renderIntent = renderIntent}; + +@@ -7816,10 +7821,8 @@ ftl::SharedFuture SurfaceFlinger::renderScreenImpl( + // TODO(b/196334700) Once we use RenderEngineThreaded everywhere we can always defer the call + // to CompositionEngine::present. + ftl::SharedFuture presentFuture; +- if (FlagManager::getInstance().single_hop_screenshot()) { +- presentFuture = mRenderEngine->isThreaded() +- ? ftl::yield(present()).share() +- : mScheduler->schedule(std::move(present)).share(); ++ if (FlagManager::getInstance().single_hop_screenshot() && mRenderEngine->isThreaded()) { ++ presentFuture = ftl::yield(present()).share(); + } else { + presentFuture = mRenderEngine->isThreaded() ? ftl::defer(std::move(present)).share() + : ftl::yield(present()).share(); +diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h +index 835cb572b4..1df78acbf9 100644 +--- a/services/surfaceflinger/SurfaceFlinger.h ++++ b/services/surfaceflinger/SurfaceFlinger.h +@@ -861,14 +861,13 @@ private: + void attachReleaseFenceFutureToLayer(Layer* layer, LayerFE* layerFE, ui::LayerStack layerStack); + + // Checks if a protected layer exists in a list of layers. +- bool layersHasProtectedLayer(const std::vector>>& layers) const; ++ bool layersHasProtectedLayer(const std::vector>& layers) const; + + using OutputCompositionState = compositionengine::impl::OutputCompositionState; + + std::optional getSnapshotsFromMainThread( + RenderAreaBuilderVariant& renderAreaBuilder, +- GetLayerSnapshotsFunction getLayerSnapshotsFn, +- std::vector>>& layers); ++ GetLayerSnapshotsFunction getLayerSnapshotsFn, std::vector>& layerFEs); + + void captureScreenCommon(RenderAreaBuilderVariant, GetLayerSnapshotsFunction, + ui::Size bufferSize, ui::PixelFormat, bool allowProtected, +@@ -877,13 +876,19 @@ private: + std::optional getDisplayStateFromRenderAreaBuilder( + RenderAreaBuilderVariant& renderAreaBuilder) REQUIRES(kMainThreadContext); + ++ // Legacy layer raw pointer is not safe to access outside the main thread. ++ // Creates a new vector consisting only of LayerFEs, which can be safely ++ // accessed outside the main thread. ++ std::vector> extractLayerFEs( ++ const std::vector>>& layers) const; ++ + ftl::SharedFuture captureScreenshot( + const RenderAreaBuilderVariant& renderAreaBuilder, + const std::shared_ptr& buffer, bool regionSampling, + bool grayscale, bool isProtected, bool attachGainmap, + const sp& captureListener, + std::optional& displayState, +- std::vector>>& layers); ++ std::vector>& layerFEs); + + ftl::SharedFuture captureScreenshotLegacy( + RenderAreaBuilderVariant, GetLayerSnapshotsFunction, +@@ -895,7 +900,8 @@ private: + const RenderArea*, const std::shared_ptr&, + bool regionSampling, bool grayscale, bool isProtected, bool attachGainmap, + ScreenCaptureResults&, std::optional& displayState, +- std::vector>>& layers); ++ std::vector>>& layers, ++ std::vector>& layerFEs); + + void readPersistentProperties(); + +diff --git a/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h b/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h +index fd8bc0d22d..2ba739b462 100644 +--- a/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h ++++ b/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h +@@ -472,11 +472,12 @@ public: + ScreenCaptureResults captureResults; + auto displayState = std::optional{display->getCompositionDisplay()->getState()}; + auto layers = getLayerSnapshotsFn(); ++ auto layerFEs = mFlinger->extractLayerFEs(layers); + + return mFlinger->renderScreenImpl(renderArea.get(), buffer, regionSampling, + false /* grayscale */, false /* isProtected */, + false /* attachGainmap */, captureResults, displayState, +- layers); ++ layers, layerFEs); + } + + auto getLayerSnapshotsForScreenshotsFn(ui::LayerStack layerStack, uint32_t uid) { +-- +2.48.1 + diff --git a/frameworks/native/0006-Revert-Remove-release-fence-flags.patch b/frameworks/native/0006-Revert-Remove-release-fence-flags.patch new file mode 100644 index 0000000..4f4a188 --- /dev/null +++ b/frameworks/native/0006-Revert-Remove-release-fence-flags.patch @@ -0,0 +1,755 @@ +From c2edb476e76d96dc48ed0f5b46367d1b0137e8b7 Mon Sep 17 00:00:00 2001 +From: Peter Cai +Date: Sun, 16 Mar 2025 13:24:30 -0400 +Subject: [PATCH 6/7] Revert "Remove release fence flags" + +This reverts commit 0077fde3aba6f2bde4e878f88c0dd466350fc1b1. + +Change-Id: I04eb5f0a45cc63e55b6b74f2327d182cd9f15098 +--- + .../src/CompositionEngine.cpp | 32 +++-- + .../CompositionEngine/src/Output.cpp | 15 +- + .../tests/CompositionEngineTest.cpp | 5 + + .../CompositionEngine/tests/OutputTest.cpp | 134 ++++++++++++++++++ + services/surfaceflinger/Layer.cpp | 59 +++++++- + services/surfaceflinger/Layer.h | 16 +++ + services/surfaceflinger/LayerFE.cpp | 4 +- + .../surfaceflinger/RegionSamplingThread.cpp | 2 +- + services/surfaceflinger/SurfaceFlinger.cpp | 123 +++++++++++----- + .../TransactionCallbackInvoker.cpp | 11 +- + .../TransactionCallbackInvoker.h | 1 + + .../surfaceflinger/common/FlagManager.cpp | 4 + + .../common/include/common/FlagManager.h | 2 + + .../tests/TransactionTestHarnesses.h | 15 +- + 14 files changed, 364 insertions(+), 59 deletions(-) + +diff --git a/services/surfaceflinger/CompositionEngine/src/CompositionEngine.cpp b/services/surfaceflinger/CompositionEngine/src/CompositionEngine.cpp +index cfcce473a2..5c5d0cd74d 100644 +--- a/services/surfaceflinger/CompositionEngine/src/CompositionEngine.cpp ++++ b/services/surfaceflinger/CompositionEngine/src/CompositionEngine.cpp +@@ -198,23 +198,25 @@ void CompositionEngine::preComposition(CompositionRefreshArgs& args) { + // these buffers and fire a NO_FENCE to release it. This ensures that all + // promises for buffer releases are fulfilled at the end of composition. + void CompositionEngine::postComposition(CompositionRefreshArgs& args) { +- SFTRACE_CALL(); +- ALOGV(__FUNCTION__); +- +- for (auto& layerFE : args.layers) { +- if (layerFE->getReleaseFencePromiseStatus() == +- LayerFE::ReleaseFencePromiseStatus::INITIALIZED) { +- layerFE->setReleaseFence(Fence::NO_FENCE); ++ if (FlagManager::getInstance().ce_fence_promise()) { ++ SFTRACE_CALL(); ++ ALOGV(__FUNCTION__); ++ ++ for (auto& layerFE : args.layers) { ++ if (layerFE->getReleaseFencePromiseStatus() == ++ LayerFE::ReleaseFencePromiseStatus::INITIALIZED) { ++ layerFE->setReleaseFence(Fence::NO_FENCE); ++ } + } +- } + +- // List of layersWithQueuedFrames does not necessarily overlap with +- // list of layers, so those layersWithQueuedFrames also need any +- // unfulfilled promises to be resolved for completeness. +- for (auto& layerFE : args.layersWithQueuedFrames) { +- if (layerFE->getReleaseFencePromiseStatus() == +- LayerFE::ReleaseFencePromiseStatus::INITIALIZED) { +- layerFE->setReleaseFence(Fence::NO_FENCE); ++ // List of layersWithQueuedFrames does not necessarily overlap with ++ // list of layers, so those layersWithQueuedFrames also need any ++ // unfulfilled promises to be resolved for completeness. ++ for (auto& layerFE : args.layersWithQueuedFrames) { ++ if (layerFE->getReleaseFencePromiseStatus() == ++ LayerFE::ReleaseFencePromiseStatus::INITIALIZED) { ++ layerFE->setReleaseFence(Fence::NO_FENCE); ++ } + } + } + } +diff --git a/services/surfaceflinger/CompositionEngine/src/Output.cpp b/services/surfaceflinger/CompositionEngine/src/Output.cpp +index f9ed92d1ee..34773de107 100644 +--- a/services/surfaceflinger/CompositionEngine/src/Output.cpp ++++ b/services/surfaceflinger/CompositionEngine/src/Output.cpp +@@ -1664,7 +1664,13 @@ void Output::presentFrameAndReleaseLayers(bool flushEvenWhenDisabled) { + releaseFence = + Fence::merge("LayerRelease", releaseFence, frame.clientTargetAcquireFence); + } +- layer->getLayerFE().setReleaseFence(releaseFence); ++ if (FlagManager::getInstance().ce_fence_promise()) { ++ layer->getLayerFE().setReleaseFence(releaseFence); ++ } else { ++ layer->getLayerFE() ++ .onLayerDisplayed(ftl::yield(std::move(releaseFence)).share(), ++ outputState.layerFilter.layerStack); ++ } + } + + // We've got a list of layers needing fences, that are disjoint with +@@ -1672,7 +1678,12 @@ void Output::presentFrameAndReleaseLayers(bool flushEvenWhenDisabled) { + // supply them with the present fence. + for (auto& weakLayer : mReleasedLayers) { + if (const auto layer = weakLayer.promote()) { +- layer->setReleaseFence(frame.presentFence); ++ if (FlagManager::getInstance().ce_fence_promise()) { ++ layer->setReleaseFence(frame.presentFence); ++ } else { ++ layer->onLayerDisplayed(ftl::yield(frame.presentFence).share(), ++ outputState.layerFilter.layerStack); ++ } + } + } + +diff --git a/services/surfaceflinger/CompositionEngine/tests/CompositionEngineTest.cpp b/services/surfaceflinger/CompositionEngine/tests/CompositionEngineTest.cpp +index 3e0c390a5d..deb90deaf7 100644 +--- a/services/surfaceflinger/CompositionEngine/tests/CompositionEngineTest.cpp ++++ b/services/surfaceflinger/CompositionEngine/tests/CompositionEngineTest.cpp +@@ -29,6 +29,8 @@ + #include "TimeStats/TimeStats.h" + #include "mock/DisplayHardware/MockHWComposer.h" + ++#include ++ + using namespace com::android::graphics::surfaceflinger; + + namespace android::compositionengine { +@@ -491,6 +493,9 @@ struct CompositionEnginePostCompositionTest : public CompositionEngineTest { + }; + + TEST_F(CompositionEnginePostCompositionTest, postCompositionReleasesAllFences) { ++ SET_FLAG_FOR_TEST(com::android::graphics::surfaceflinger::flags::ce_fence_promise, true); ++ ASSERT_TRUE(FlagManager::getInstance().ce_fence_promise()); ++ + EXPECT_CALL(*mLayer1FE, getReleaseFencePromiseStatus) + .WillOnce(Return(LayerFE::ReleaseFencePromiseStatus::FULFILLED)); + EXPECT_CALL(*mLayer2FE, getReleaseFencePromiseStatus) +diff --git a/services/surfaceflinger/CompositionEngine/tests/OutputTest.cpp b/services/surfaceflinger/CompositionEngine/tests/OutputTest.cpp +index 442b603ca0..eb7f0ddc37 100644 +--- a/services/surfaceflinger/CompositionEngine/tests/OutputTest.cpp ++++ b/services/surfaceflinger/CompositionEngine/tests/OutputTest.cpp +@@ -35,6 +35,7 @@ + #include + #include + ++#include + #include + #include + +@@ -3289,9 +3290,57 @@ TEST_F(OutputPostFramebufferTest, ifEnabledMustFlipThenPresentThenSendPresentCom + mOutput.presentFrameAndReleaseLayers(kFlushEvenWhenDisabled); + } + ++TEST_F(OutputPostFramebufferTest, releaseFencesAreSentToLayerFE) { ++ SET_FLAG_FOR_TEST(com::android::graphics::surfaceflinger::flags::ce_fence_promise, false); ++ ASSERT_FALSE(FlagManager::getInstance().ce_fence_promise()); ++ // Simulate getting release fences from each layer, and ensure they are passed to the ++ // front-end layer interface for each layer correctly. ++ ++ mOutput.mState.isEnabled = true; ++ ++ // Create three unique fence instances ++ sp layer1Fence = sp::make(); ++ sp layer2Fence = sp::make(); ++ sp layer3Fence = sp::make(); ++ ++ Output::FrameFences frameFences; ++ frameFences.layerFences.emplace(&mLayer1.hwc2Layer, layer1Fence); ++ frameFences.layerFences.emplace(&mLayer2.hwc2Layer, layer2Fence); ++ frameFences.layerFences.emplace(&mLayer3.hwc2Layer, layer3Fence); ++ ++ EXPECT_CALL(mOutput, presentFrame()).WillOnce(Return(frameFences)); ++ EXPECT_CALL(*mRenderSurface, onPresentDisplayCompleted()); ++ ++ // Compare the pointers values of each fence to make sure the correct ones ++ // are passed. This happens to work with the current implementation, but ++ // would not survive certain calls like Fence::merge() which would return a ++ // new instance. ++ EXPECT_CALL(*mLayer1.layerFE, onLayerDisplayed(_, _)) ++ .WillOnce([&layer1Fence](ftl::SharedFuture futureFenceResult, ++ ui::LayerStack) { ++ EXPECT_EQ(FenceResult(layer1Fence), futureFenceResult.get()); ++ }); ++ EXPECT_CALL(*mLayer2.layerFE, onLayerDisplayed(_, _)) ++ .WillOnce([&layer2Fence](ftl::SharedFuture futureFenceResult, ++ ui::LayerStack) { ++ EXPECT_EQ(FenceResult(layer2Fence), futureFenceResult.get()); ++ }); ++ EXPECT_CALL(*mLayer3.layerFE, onLayerDisplayed(_, _)) ++ .WillOnce([&layer3Fence](ftl::SharedFuture futureFenceResult, ++ ui::LayerStack) { ++ EXPECT_EQ(FenceResult(layer3Fence), futureFenceResult.get()); ++ }); ++ ++ constexpr bool kFlushEvenWhenDisabled = false; ++ mOutput.presentFrameAndReleaseLayers(kFlushEvenWhenDisabled); ++} ++ + TEST_F(OutputPostFramebufferTest, releaseFencesAreSetInLayerFE) { ++ SET_FLAG_FOR_TEST(com::android::graphics::surfaceflinger::flags::ce_fence_promise, true); ++ ASSERT_TRUE(FlagManager::getInstance().ce_fence_promise()); + // Simulate getting release fences from each layer, and ensure they are passed to the + // front-end layer interface for each layer correctly. ++ + mOutput.mState.isEnabled = true; + + // Create three unique fence instances +@@ -3328,7 +3377,37 @@ TEST_F(OutputPostFramebufferTest, releaseFencesAreSetInLayerFE) { + mOutput.presentFrameAndReleaseLayers(kFlushEvenWhenDisabled); + } + ++TEST_F(OutputPostFramebufferTest, releaseFencesIncludeClientTargetAcquireFence) { ++ SET_FLAG_FOR_TEST(com::android::graphics::surfaceflinger::flags::ce_fence_promise, false); ++ ASSERT_FALSE(FlagManager::getInstance().ce_fence_promise()); ++ ++ mOutput.mState.isEnabled = true; ++ mOutput.mState.usesClientComposition = true; ++ ++ Output::FrameFences frameFences; ++ frameFences.clientTargetAcquireFence = sp::make(); ++ frameFences.layerFences.emplace(&mLayer1.hwc2Layer, sp::make()); ++ frameFences.layerFences.emplace(&mLayer2.hwc2Layer, sp::make()); ++ frameFences.layerFences.emplace(&mLayer3.hwc2Layer, sp::make()); ++ ++ EXPECT_CALL(mOutput, presentFrame()).WillOnce(Return(frameFences)); ++ EXPECT_CALL(*mRenderSurface, onPresentDisplayCompleted()); ++ ++ // Fence::merge is called, and since none of the fences are actually valid, ++ // Fence::NO_FENCE is returned and passed to each onLayerDisplayed() call. ++ // This is the best we can do without creating a real kernel fence object. ++ EXPECT_CALL(*mLayer1.layerFE, onLayerDisplayed).WillOnce(Return()); ++ EXPECT_CALL(*mLayer2.layerFE, onLayerDisplayed).WillOnce(Return()); ++ EXPECT_CALL(*mLayer3.layerFE, onLayerDisplayed).WillOnce(Return()); ++ ++ constexpr bool kFlushEvenWhenDisabled = false; ++ mOutput.presentFrameAndReleaseLayers(kFlushEvenWhenDisabled); ++} ++ + TEST_F(OutputPostFramebufferTest, setReleaseFencesIncludeClientTargetAcquireFence) { ++ SET_FLAG_FOR_TEST(com::android::graphics::surfaceflinger::flags::ce_fence_promise, true); ++ ASSERT_TRUE(FlagManager::getInstance().ce_fence_promise()); ++ + mOutput.mState.isEnabled = true; + mOutput.mState.usesClientComposition = true; + +@@ -3351,7 +3430,62 @@ TEST_F(OutputPostFramebufferTest, setReleaseFencesIncludeClientTargetAcquireFenc + mOutput.presentFrameAndReleaseLayers(kFlushEvenWhenDisabled); + } + ++TEST_F(OutputPostFramebufferTest, releasedLayersSentPresentFence) { ++ SET_FLAG_FOR_TEST(com::android::graphics::surfaceflinger::flags::ce_fence_promise, false); ++ ASSERT_FALSE(FlagManager::getInstance().ce_fence_promise()); ++ ++ mOutput.mState.isEnabled = true; ++ mOutput.mState.usesClientComposition = true; ++ ++ // This should happen even if there are no (current) output layers. ++ EXPECT_CALL(mOutput, getOutputLayerCount()).WillOnce(Return(0u)); ++ ++ // Load up the released layers with some mock instances ++ sp> releasedLayer1 = sp>::make(); ++ sp> releasedLayer2 = sp>::make(); ++ sp> releasedLayer3 = sp>::make(); ++ Output::ReleasedLayers layers; ++ layers.push_back(releasedLayer1); ++ layers.push_back(releasedLayer2); ++ layers.push_back(releasedLayer3); ++ mOutput.setReleasedLayers(std::move(layers)); ++ ++ // Set up a fake present fence ++ sp presentFence = sp::make(); ++ Output::FrameFences frameFences; ++ frameFences.presentFence = presentFence; ++ ++ EXPECT_CALL(mOutput, presentFrame()).WillOnce(Return(frameFences)); ++ EXPECT_CALL(*mRenderSurface, onPresentDisplayCompleted()); ++ ++ // Each released layer should be given the presentFence. ++ EXPECT_CALL(*releasedLayer1, onLayerDisplayed(_, _)) ++ .WillOnce([&presentFence](ftl::SharedFuture futureFenceResult, ++ ui::LayerStack) { ++ EXPECT_EQ(FenceResult(presentFence), futureFenceResult.get()); ++ }); ++ EXPECT_CALL(*releasedLayer2, onLayerDisplayed(_, _)) ++ .WillOnce([&presentFence](ftl::SharedFuture futureFenceResult, ++ ui::LayerStack) { ++ EXPECT_EQ(FenceResult(presentFence), futureFenceResult.get()); ++ }); ++ EXPECT_CALL(*releasedLayer3, onLayerDisplayed(_, _)) ++ .WillOnce([&presentFence](ftl::SharedFuture futureFenceResult, ++ ui::LayerStack) { ++ EXPECT_EQ(FenceResult(presentFence), futureFenceResult.get()); ++ }); ++ ++ constexpr bool kFlushEvenWhenDisabled = false; ++ mOutput.presentFrameAndReleaseLayers(kFlushEvenWhenDisabled); ++ ++ // After the call the list of released layers should have been cleared. ++ EXPECT_TRUE(mOutput.getReleasedLayersForTest().empty()); ++} ++ + TEST_F(OutputPostFramebufferTest, setReleasedLayersSentPresentFence) { ++ SET_FLAG_FOR_TEST(com::android::graphics::surfaceflinger::flags::ce_fence_promise, true); ++ ASSERT_TRUE(FlagManager::getInstance().ce_fence_promise()); ++ + mOutput.mState.isEnabled = true; + mOutput.mState.usesClientComposition = true; + +diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp +index 195461f47e..a8e60f1632 100644 +--- a/services/surfaceflinger/Layer.cpp ++++ b/services/surfaceflinger/Layer.cpp +@@ -805,6 +805,54 @@ void Layer::prepareReleaseCallbacks(ftl::Future futureFenceResult, + } + } + ++void Layer::onLayerDisplayed(ftl::SharedFuture futureFenceResult, ++ ui::LayerStack layerStack, ++ std::function&& continuation) { ++ sp ch = findCallbackHandle(); ++ ++ if (!FlagManager::getInstance().screenshot_fence_preservation() && continuation) { ++ futureFenceResult = ftl::Future(futureFenceResult).then(std::move(continuation)).share(); ++ } ++ ++ if (ch != nullptr) { ++ ch->previousReleaseCallbackId = mPreviousReleaseCallbackId; ++ ch->previousSharedReleaseFences.emplace_back(std::move(futureFenceResult)); ++ ch->name = mName; ++ } else if (FlagManager::getInstance().screenshot_fence_preservation()) { ++ // If we didn't get a release callback yet, e.g. some scenarios when capturing screenshots ++ // asynchronously, then make sure we don't drop the fence. ++ mPreviousReleaseFenceAndContinuations.emplace_back(std::move(futureFenceResult), ++ std::move(continuation)); ++ std::vector mergedFences; ++ sp prevFence = nullptr; ++ // For a layer that's frequently screenshotted, try to merge fences to make sure we don't ++ // grow unbounded. ++ for (const auto& futureAndContinuation : mPreviousReleaseFenceAndContinuations) { ++ auto result = futureAndContinuation.future.wait_for(0s); ++ if (result != std::future_status::ready) { ++ mergedFences.emplace_back(futureAndContinuation); ++ continue; ++ } ++ ++ mergeFence(getDebugName(), ++ futureAndContinuation.chain().get().value_or(Fence::NO_FENCE), prevFence); ++ } ++ if (prevFence != nullptr) { ++ mergedFences.emplace_back(ftl::yield(FenceResult(std::move(prevFence))).share()); ++ } ++ ++ mPreviousReleaseFenceAndContinuations.swap(mergedFences); ++ } ++ ++ if (mBufferInfo.mBuffer) { ++ mPreviouslyPresentedLayerStacks.push_back(layerStack); ++ } ++ ++ if (mDrawingState.frameNumber > 0) { ++ mDrawingState.previousFrameNumber = mDrawingState.frameNumber; ++ } ++} ++ + void Layer::releasePendingBuffer(nsecs_t dequeueReadyTime) { + for (const auto& handle : mDrawingState.callbackHandles) { + handle->bufferReleaseChannel = mBufferReleaseChannel; +@@ -1117,13 +1165,22 @@ bool Layer::setTransactionCompletedListeners(const std::vectoracquireTimeOrFence = mCallbackHandleAcquireTimeOrFence; + handle->frameNumber = mDrawingState.frameNumber; + handle->previousFrameNumber = mDrawingState.previousFrameNumber; +- if (mPreviousReleaseBufferEndpoint == handle->listener) { ++ if (FlagManager::getInstance().ce_fence_promise() && ++ mPreviousReleaseBufferEndpoint == handle->listener) { + // Add fence from previous screenshot now so that it can be dispatched to the + // client. + for (auto& [_, future] : mAdditionalPreviousReleaseFences) { + handle->previousReleaseFences.emplace_back(std::move(future)); + } + mAdditionalPreviousReleaseFences.clear(); ++ } else if (FlagManager::getInstance().screenshot_fence_preservation() && ++ mPreviousReleaseBufferEndpoint == handle->listener) { ++ // Add fences from previous screenshots now so that they can be dispatched to the ++ // client. ++ for (const auto& futureAndContinution : mPreviousReleaseFenceAndContinuations) { ++ handle->previousSharedReleaseFences.emplace_back(futureAndContinution.chain()); ++ } ++ mPreviousReleaseFenceAndContinuations.clear(); + } + // Store so latched time and release fence can be set + mDrawingState.callbackHandles.push_back(handle); +diff --git a/services/surfaceflinger/Layer.h b/services/surfaceflinger/Layer.h +index c234a75693..c4ffe1ef2d 100644 +--- a/services/surfaceflinger/Layer.h ++++ b/services/surfaceflinger/Layer.h +@@ -261,6 +261,8 @@ public: + + bool fenceHasSignaled() const; + void onPreComposition(nsecs_t refreshStartTime); ++ void onLayerDisplayed(ftl::SharedFuture, ui::LayerStack layerStack, ++ std::function&& continuation = nullptr); + + // Tracks mLastClientCompositionFence and gets the callback handle for this layer. + sp findCallbackHandle(); +@@ -389,6 +391,20 @@ public: + // from the layer. + std::vector mPreviouslyPresentedLayerStacks; + ++ struct FenceAndContinuation { ++ ftl::SharedFuture future; ++ std::function continuation; ++ ++ ftl::SharedFuture chain() const { ++ if (continuation) { ++ return ftl::Future(future).then(continuation).share(); ++ } else { ++ return future; ++ } ++ } ++ }; ++ std::vector mPreviousReleaseFenceAndContinuations; ++ + // Release fences for buffers that have not yet received a release + // callback. A release callback may not be given when capturing + // screenshots asynchronously. There may be no buffer update for the +diff --git a/services/surfaceflinger/LayerFE.cpp b/services/surfaceflinger/LayerFE.cpp +index fea7671af2..de64b271f5 100644 +--- a/services/surfaceflinger/LayerFE.cpp ++++ b/services/surfaceflinger/LayerFE.cpp +@@ -26,6 +26,7 @@ + + #include "LayerFE.h" + #include "SurfaceFlinger.h" ++#include "common/FlagManager.h" + #include "ui/FenceResult.h" + + namespace android { +@@ -82,7 +83,8 @@ LayerFE::~LayerFE() { + // Ensures that no promise is left unfulfilled before the LayerFE is destroyed. + // An unfulfilled promise could occur when a screenshot is attempted, but the + // render area is invalid and there is no memory for the capture result. +- if (mReleaseFencePromiseStatus == ReleaseFencePromiseStatus::INITIALIZED) { ++ if (FlagManager::getInstance().ce_fence_promise() && ++ mReleaseFencePromiseStatus == ReleaseFencePromiseStatus::INITIALIZED) { + setReleaseFence(Fence::NO_FENCE); + } + } +diff --git a/services/surfaceflinger/RegionSamplingThread.cpp b/services/surfaceflinger/RegionSamplingThread.cpp +index 011fd9e20a..06c2f26a6d 100644 +--- a/services/surfaceflinger/RegionSamplingThread.cpp ++++ b/services/surfaceflinger/RegionSamplingThread.cpp +@@ -355,7 +355,7 @@ void RegionSamplingThread::captureSample() { + + FenceResult fenceResult; + if (FlagManager::getInstance().single_hop_screenshot() && +- mFlinger.mRenderEngine->isThreaded()) { ++ FlagManager::getInstance().ce_fence_promise() && mFlinger.mRenderEngine->isThreaded()) { + std::vector> layerFEs; + auto displayState = mFlinger.getSnapshotsFromMainThread(renderAreaBuilder, + getLayerSnapshotsFn, layerFEs); +diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp +index 067a8bafe0..47a3c2c2bf 100644 +--- a/services/surfaceflinger/SurfaceFlinger.cpp ++++ b/services/surfaceflinger/SurfaceFlinger.cpp +@@ -2820,6 +2820,16 @@ CompositeResultsPerDisplay SurfaceFlinger::composite( + compositionengine::Feature::kSnapshotLayerMetadata); + + refreshArgs.bufferIdsToUncache = std::move(mBufferIdsToUncache); ++ ++ if (!FlagManager::getInstance().ce_fence_promise()) { ++ refreshArgs.layersWithQueuedFrames.reserve(mLayersWithQueuedFrames.size()); ++ for (auto& [layer, _] : mLayersWithQueuedFrames) { ++ if (const auto& layerFE = layer->getCompositionEngineLayerFE( ++ {static_cast(layer->sequence)})) ++ refreshArgs.layersWithQueuedFrames.push_back(layerFE); ++ } ++ } ++ + refreshArgs.outputColorSetting = mDisplayColorSetting; + refreshArgs.forceOutputColorMode = mForceColorMode; + +@@ -2883,38 +2893,54 @@ CompositeResultsPerDisplay SurfaceFlinger::composite( + layer->onPreComposition(refreshArgs.refreshStartTime); + } + +- for (auto& [layer, layerFE] : layers) { +- attachReleaseFenceFutureToLayer(layer, layerFE, +- layerFE->mSnapshot->outputFilter.layerStack); +- } +- +- refreshArgs.layersWithQueuedFrames.reserve(mLayersWithQueuedFrames.size()); +- for (auto& [layer, _] : mLayersWithQueuedFrames) { +- if (const auto& layerFE = +- layer->getCompositionEngineLayerFE({static_cast(layer->sequence)})) { +- refreshArgs.layersWithQueuedFrames.push_back(layerFE); +- // Some layers are not displayed and do not yet have a future release fence +- if (layerFE->getReleaseFencePromiseStatus() == +- LayerFE::ReleaseFencePromiseStatus::UNINITIALIZED || +- layerFE->getReleaseFencePromiseStatus() == +- LayerFE::ReleaseFencePromiseStatus::FULFILLED) { +- // layerStack is invalid because layer is not on a display +- attachReleaseFenceFutureToLayer(layer.get(), layerFE.get(), +- ui::INVALID_LAYER_STACK); ++ if (FlagManager::getInstance().ce_fence_promise()) { ++ for (auto& [layer, layerFE] : layers) { ++ attachReleaseFenceFutureToLayer(layer, layerFE, ++ layerFE->mSnapshot->outputFilter.layerStack); ++ } ++ ++ refreshArgs.layersWithQueuedFrames.reserve(mLayersWithQueuedFrames.size()); ++ for (auto& [layer, _] : mLayersWithQueuedFrames) { ++ if (const auto& layerFE = layer->getCompositionEngineLayerFE( ++ {static_cast(layer->sequence)})) { ++ refreshArgs.layersWithQueuedFrames.push_back(layerFE); ++ // Some layers are not displayed and do not yet have a future release fence ++ if (layerFE->getReleaseFencePromiseStatus() == ++ LayerFE::ReleaseFencePromiseStatus::UNINITIALIZED || ++ layerFE->getReleaseFencePromiseStatus() == ++ LayerFE::ReleaseFencePromiseStatus::FULFILLED) { ++ // layerStack is invalid because layer is not on a display ++ attachReleaseFenceFutureToLayer(layer.get(), layerFE.get(), ++ ui::INVALID_LAYER_STACK); ++ } + } + } +- } + +- mCompositionEngine->present(refreshArgs); +- moveSnapshotsFromCompositionArgs(refreshArgs, layers); ++ mCompositionEngine->present(refreshArgs); ++ moveSnapshotsFromCompositionArgs(refreshArgs, layers); + +- for (auto& [layer, layerFE] : layers) { +- CompositionResult compositionResult{layerFE->stealCompositionResult()}; +- if (compositionResult.lastClientCompositionFence) { +- layer->setWasClientComposed(compositionResult.lastClientCompositionFence); ++ for (auto& [layer, layerFE] : layers) { ++ CompositionResult compositionResult{layerFE->stealCompositionResult()}; ++ if (compositionResult.lastClientCompositionFence) { ++ layer->setWasClientComposed(compositionResult.lastClientCompositionFence); ++ } + } +- if (com_android_graphics_libgui_flags_apply_picture_profiles()) { +- mActivePictureUpdater.onLayerComposed(*layer, *layerFE, compositionResult); ++ ++ } else { ++ mCompositionEngine->present(refreshArgs); ++ moveSnapshotsFromCompositionArgs(refreshArgs, layers); ++ ++ for (auto [layer, layerFE] : layers) { ++ CompositionResult compositionResult{layerFE->stealCompositionResult()}; ++ for (auto& [releaseFence, layerStack] : compositionResult.releaseFences) { ++ layer->onLayerDisplayed(std::move(releaseFence), layerStack); ++ } ++ if (compositionResult.lastClientCompositionFence) { ++ layer->setWasClientComposed(compositionResult.lastClientCompositionFence); ++ } ++ if (com_android_graphics_libgui_flags_apply_picture_profiles()) { ++ mActivePictureUpdater.onLayerComposed(*layer, *layerFE, compositionResult); ++ } + } + } + +@@ -3196,8 +3222,13 @@ void SurfaceFlinger::onCompositionPresented(PhysicalDisplayId pacesetterId, + auto optDisplay = layerStackToDisplay.get(layerStack); + if (optDisplay && !optDisplay->get()->isVirtual()) { + auto fence = getHwComposer().getPresentFence(optDisplay->get()->getPhysicalId()); +- layer->prepareReleaseCallbacks(ftl::yield(fence), +- ui::INVALID_LAYER_STACK); ++ if (FlagManager::getInstance().ce_fence_promise()) { ++ layer->prepareReleaseCallbacks(ftl::yield(fence), ++ ui::INVALID_LAYER_STACK); ++ } else { ++ layer->onLayerDisplayed(ftl::yield(fence).share(), ++ ui::INVALID_LAYER_STACK); ++ } + } + } + layer->releasePendingBuffer(presentTime.ns()); +@@ -7382,7 +7413,8 @@ void SurfaceFlinger::captureScreenCommon(RenderAreaBuilderVariant renderAreaBuil + return; + } + +- if (FlagManager::getInstance().single_hop_screenshot() && mRenderEngine->isThreaded()) { ++ if (FlagManager::getInstance().single_hop_screenshot() && ++ FlagManager::getInstance().ce_fence_promise() && mRenderEngine->isThreaded()) { + std::vector> layerFEs; + auto displayState = + getSnapshotsFromMainThread(renderAreaBuilder, getLayerSnapshotsFn, layerFEs); +@@ -7623,8 +7655,10 @@ ftl::SharedFuture SurfaceFlinger::captureScreenshotLegacy( + auto takeScreenshotFn = [=, this, renderAreaBuilder = std::move(renderAreaBuilder)]() REQUIRES( + kMainThreadContext) mutable -> ftl::SharedFuture { + auto layers = getLayerSnapshotsFn(); +- for (auto& [layer, layerFE] : layers) { +- attachReleaseFenceFutureToLayer(layer, layerFE.get(), ui::INVALID_LAYER_STACK); ++ if (FlagManager::getInstance().ce_fence_promise()) { ++ for (auto& [layer, layerFE] : layers) { ++ attachReleaseFenceFutureToLayer(layer, layerFE.get(), ui::INVALID_LAYER_STACK); ++ } + } + auto displayState = getDisplayStateFromRenderAreaBuilder(renderAreaBuilder); + +@@ -7821,13 +7855,36 @@ ftl::SharedFuture SurfaceFlinger::renderScreenImpl( + // TODO(b/196334700) Once we use RenderEngineThreaded everywhere we can always defer the call + // to CompositionEngine::present. + ftl::SharedFuture presentFuture; +- if (FlagManager::getInstance().single_hop_screenshot() && mRenderEngine->isThreaded()) { ++ if (FlagManager::getInstance().single_hop_screenshot() && ++ FlagManager::getInstance().ce_fence_promise() && mRenderEngine->isThreaded()) { + presentFuture = ftl::yield(present()).share(); + } else { + presentFuture = mRenderEngine->isThreaded() ? ftl::defer(std::move(present)).share() + : ftl::yield(present()).share(); + } + ++ if (!FlagManager::getInstance().ce_fence_promise()) { ++ for (auto& [layer, layerFE] : layers) { ++ layer->onLayerDisplayed(presentFuture, ui::INVALID_LAYER_STACK, ++ [layerFE = std::move(layerFE)](FenceResult) { ++ if (FlagManager::getInstance() ++ .screenshot_fence_preservation()) { ++ const auto compositionResult = ++ layerFE->stealCompositionResult(); ++ const auto& fences = compositionResult.releaseFences; ++ // CompositionEngine may choose to cull layers that ++ // aren't visible, so pass a non-fence. ++ return fences.empty() ? Fence::NO_FENCE ++ : fences.back().first.get(); ++ } else { ++ return layerFE->stealCompositionResult() ++ .releaseFences.back() ++ .first.get(); ++ } ++ }); ++ } ++ } ++ + return presentFuture; + } + +diff --git a/services/surfaceflinger/TransactionCallbackInvoker.cpp b/services/surfaceflinger/TransactionCallbackInvoker.cpp +index b22ec66819..cc79acbbf5 100644 +--- a/services/surfaceflinger/TransactionCallbackInvoker.cpp ++++ b/services/surfaceflinger/TransactionCallbackInvoker.cpp +@@ -28,6 +28,7 @@ + #include "Utils/FenceUtils.h" + + #include ++#include + #include + #include + +@@ -126,8 +127,14 @@ status_t TransactionCallbackInvoker::addCallbackHandle(const sp& + if (surfaceControl) { + sp prevFence = nullptr; + +- for (auto& future : handle->previousReleaseFences) { +- mergeFence(handle->name.c_str(), future.get().value_or(Fence::NO_FENCE), prevFence); ++ if (FlagManager::getInstance().ce_fence_promise()) { ++ for (auto& future : handle->previousReleaseFences) { ++ mergeFence(handle->name.c_str(), future.get().value_or(Fence::NO_FENCE), prevFence); ++ } ++ } else { ++ for (const auto& future : handle->previousSharedReleaseFences) { ++ mergeFence(handle->name.c_str(), future.get().value_or(Fence::NO_FENCE), prevFence); ++ } + } + + handle->previousReleaseFence = prevFence; +diff --git a/services/surfaceflinger/TransactionCallbackInvoker.h b/services/surfaceflinger/TransactionCallbackInvoker.h +index 178ddbbe79..9c7bb0d588 100644 +--- a/services/surfaceflinger/TransactionCallbackInvoker.h ++++ b/services/surfaceflinger/TransactionCallbackInvoker.h +@@ -43,6 +43,7 @@ public: + std::string name; + sp previousReleaseFence; + std::vector> previousReleaseFences; ++ std::vector> previousSharedReleaseFences; + std::variant> acquireTimeOrFence = -1; + nsecs_t latchTime = -1; + std::optional transformHint = std::nullopt; +diff --git a/services/surfaceflinger/common/FlagManager.cpp b/services/surfaceflinger/common/FlagManager.cpp +index 5c417ba748..b86e815b57 100644 +--- a/services/surfaceflinger/common/FlagManager.cpp ++++ b/services/surfaceflinger/common/FlagManager.cpp +@@ -167,6 +167,8 @@ void FlagManager::dump(std::string& result) const { + DUMP_ACONFIG_FLAG(begone_bright_hlg); + DUMP_ACONFIG_FLAG(window_blur_kawase2); + DUMP_ACONFIG_FLAG(single_hop_screenshot); ++ DUMP_ACONFIG_FLAG(screenshot_fence_preservation); ++ DUMP_ACONFIG_FLAG(ce_fence_promise); + + #undef DUMP_ACONFIG_FLAG + #undef DUMP_LEGACY_SERVER_FLAG +@@ -268,6 +270,8 @@ FLAG_MANAGER_ACONFIG_FLAG(deprecate_frame_tracker, ""); + FLAG_MANAGER_ACONFIG_FLAG(skip_invisible_windows_in_input, ""); + FLAG_MANAGER_ACONFIG_FLAG(begone_bright_hlg, "debug.sf.begone_bright_hlg"); + FLAG_MANAGER_ACONFIG_FLAG(window_blur_kawase2, ""); ++FLAG_MANAGER_ACONFIG_FLAG(screenshot_fence_preservation, "debug.sf.screenshot_fence_preservation"); ++FLAG_MANAGER_ACONFIG_FLAG(ce_fence_promise, ""); + + /// Trunk stable server (R/W) flags /// + FLAG_MANAGER_ACONFIG_FLAG(refresh_rate_overlay_on_external_display, "") +diff --git a/services/surfaceflinger/common/include/common/FlagManager.h b/services/surfaceflinger/common/include/common/FlagManager.h +index 15284ba0ee..4766f6be38 100644 +--- a/services/surfaceflinger/common/include/common/FlagManager.h ++++ b/services/surfaceflinger/common/include/common/FlagManager.h +@@ -74,6 +74,7 @@ public: + bool fp16_client_target() const; + bool game_default_frame_rate() const; + bool enable_layer_command_batching() const; ++ bool screenshot_fence_preservation() const; + bool vulkan_renderengine() const; + bool vrr_bugfix_24q4() const; + bool vrr_bugfix_dropped_frame() const; +@@ -82,6 +83,7 @@ public: + bool dont_skip_on_early_ro() const; + bool no_vsyncs_on_screen_off() const; + bool protected_if_client() const; ++ bool ce_fence_promise() const; + bool idle_screen_refresh_rate_timeout() const; + bool graphite_renderengine() const; + bool filter_frames_before_trace_starts() const; +diff --git a/services/surfaceflinger/tests/TransactionTestHarnesses.h b/services/surfaceflinger/tests/TransactionTestHarnesses.h +index c95c875746..5899c7e8b6 100644 +--- a/services/surfaceflinger/tests/TransactionTestHarnesses.h ++++ b/services/surfaceflinger/tests/TransactionTestHarnesses.h +@@ -17,6 +17,7 @@ + #define ANDROID_TRANSACTION_TEST_HARNESSES + + #include ++#include + #include + + #include "LayerTransactionTest.h" +@@ -95,8 +96,12 @@ public: + #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) + t.setDisplayProjection(vDisplay, displayState.orientation, + Rect(displayState.layerStackSpaceRect), Rect(resolution)); +- t.setDisplayLayerStack(vDisplay, layerStack); +- t.setLayerStack(mirrorSc, layerStack); ++ if (FlagManager::getInstance().ce_fence_promise()) { ++ t.setDisplayLayerStack(vDisplay, layerStack); ++ t.setLayerStack(mirrorSc, layerStack); ++ } else { ++ t.setDisplayLayerStack(vDisplay, ui::DEFAULT_LAYER_STACK); ++ } + t.apply(); + SurfaceComposerClient::Transaction().apply(true); + +@@ -116,8 +121,10 @@ public: + // CompositionEngine::present may attempt to be called on the same + // display multiple times. The layerStack is set to invalid here so + // that the display is ignored if that scenario occurs. +- t.setLayerStack(mirrorSc, ui::INVALID_LAYER_STACK); +- t.apply(true); ++ if (FlagManager::getInstance().ce_fence_promise()) { ++ t.setLayerStack(mirrorSc, ui::INVALID_LAYER_STACK); ++ t.apply(true); ++ } + SurfaceComposerClient::destroyVirtualDisplay(vDisplay); + return sc; + } +-- +2.48.1 + diff --git a/frameworks/native/0007-Revert-Remove-dead-code-from-LayerFE.patch b/frameworks/native/0007-Revert-Remove-dead-code-from-LayerFE.patch new file mode 100644 index 0000000..d7849ef --- /dev/null +++ b/frameworks/native/0007-Revert-Remove-dead-code-from-LayerFE.patch @@ -0,0 +1,97 @@ +From 76923ab930a6fee15aa477bea3638e09fe7b604a Mon Sep 17 00:00:00 2001 +From: Peter Cai +Date: Sun, 16 Mar 2025 13:25:10 -0400 +Subject: [PATCH 7/7] Revert "Remove dead code from LayerFE" + +This reverts commit 330571240ff3d44fdbecbe513309d73ba82404e6. + +Change-Id: If3af99ec76a8c595dcd1ea22965f2d126d74a315 +--- + .../CompositionEngine/include/compositionengine/LayerFE.h | 3 +++ + .../include/compositionengine/mock/LayerFE.h | 3 +++ + services/surfaceflinger/LayerFE.cpp | 6 ++++++ + services/surfaceflinger/LayerFE.h | 3 +++ + 4 files changed, 15 insertions(+) + +diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/LayerFE.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/LayerFE.h +index cda4edc216..8199c929e5 100644 +--- a/services/surfaceflinger/CompositionEngine/include/compositionengine/LayerFE.h ++++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/LayerFE.h +@@ -148,6 +148,9 @@ public: + virtual std::optional prepareClientComposition( + ClientCompositionTargetSettings&) const = 0; + ++ // Called after the layer is displayed to update the presentation fence ++ virtual void onLayerDisplayed(ftl::SharedFuture, ui::LayerStack layerStack) = 0; ++ + // Initializes a promise for a buffer release fence and provides the future for that + // fence. This should only be called when a promise has not yet been created, or + // after the previous promise has already been fulfilled. Attempting to call this +diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/mock/LayerFE.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/mock/LayerFE.h +index 272fa3eef7..a236ebf180 100644 +--- a/services/surfaceflinger/CompositionEngine/include/compositionengine/mock/LayerFE.h ++++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/mock/LayerFE.h +@@ -50,6 +50,9 @@ public: + std::optional( + compositionengine::LayerFE::ClientCompositionTargetSettings&)); + ++ MOCK_METHOD(void, onLayerDisplayed, (ftl::SharedFuture, ui::LayerStack), ++ (override)); ++ + MOCK_METHOD0(createReleaseFenceFuture, ftl::Future()); + MOCK_METHOD1(setReleaseFence, void(const FenceResult&)); + MOCK_METHOD0(getReleaseFencePromiseStatus, LayerFE::ReleaseFencePromiseStatus()); +diff --git a/services/surfaceflinger/LayerFE.cpp b/services/surfaceflinger/LayerFE.cpp +index de64b271f5..012aa32c30 100644 +--- a/services/surfaceflinger/LayerFE.cpp ++++ b/services/surfaceflinger/LayerFE.cpp +@@ -28,6 +28,7 @@ + #include "SurfaceFlinger.h" + #include "common/FlagManager.h" + #include "ui/FenceResult.h" ++#include "ui/LayerStack.h" + + namespace android { + +@@ -355,6 +356,11 @@ CompositionResult LayerFE::stealCompositionResult() { + return result; + } + ++void LayerFE::onLayerDisplayed(ftl::SharedFuture futureFenceResult, ++ ui::LayerStack layerStack) { ++ mCompositionResult.releaseFences.emplace_back(std::move(futureFenceResult), layerStack); ++} ++ + const char* LayerFE::getDebugName() const { + return mName.c_str(); + } +diff --git a/services/surfaceflinger/LayerFE.h b/services/surfaceflinger/LayerFE.h +index 9483aebafa..ce6d27a91a 100644 +--- a/services/surfaceflinger/LayerFE.h ++++ b/services/surfaceflinger/LayerFE.h +@@ -25,12 +25,14 @@ + #include "compositionengine/LayerFE.h" + #include "compositionengine/LayerFECompositionState.h" + #include "renderengine/LayerSettings.h" ++#include "ui/LayerStack.h" + + #include + + namespace android { + + struct CompositionResult { ++ std::vector, ui::LayerStack>> releaseFences; + sp lastClientCompositionFence = nullptr; + bool wasPictureProfileCommitted = false; + // TODO(b/337330263): Why does LayerFE coming from SF have a null composition state? +@@ -46,6 +48,7 @@ public: + // compositionengine::LayerFE overrides + const compositionengine::LayerFECompositionState* getCompositionState() const override; + bool onPreComposition(bool updatingOutputGeometryThisFrame) override; ++ void onLayerDisplayed(ftl::SharedFuture, ui::LayerStack) override; + const char* getDebugName() const override; + int32_t getSequence() const override; + bool hasRoundedCorners() const override; +-- +2.48.1 + diff --git a/lineage-sdk/0001-Stop-using-resource-processor.patch b/lineage-sdk/0001-Stop-using-resource-processor.patch new file mode 100644 index 0000000..7e2ed2f --- /dev/null +++ b/lineage-sdk/0001-Stop-using-resource-processor.patch @@ -0,0 +1,24 @@ +From 6acc862452fd91732f63afa4a3829d0e249355e0 Mon Sep 17 00:00:00 2001 +From: Peter Cai +Date: Sun, 16 Mar 2025 13:55:53 -0400 +Subject: [PATCH 1/2] Stop using resource processor + +--- + Android.bp | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/Android.bp b/Android.bp +index 0b368c8e..a2dff379 100644 +--- a/Android.bp ++++ b/Android.bp +@@ -5,6 +5,7 @@ + + android_app { + name: "org.lineageos.platform-res", ++ use_resource_processor: false, + sdk_version: "core_platform", + certificate: "platform", + +-- +2.48.1 + diff --git a/lineage-sdk/0002-Add-spninfo-schema.patch b/lineage-sdk/0002-Add-spninfo-schema.patch new file mode 100644 index 0000000..3e7f7d4 --- /dev/null +++ b/lineage-sdk/0002-Add-spninfo-schema.patch @@ -0,0 +1,133 @@ +From 6cf57340bf1d906438a112942763c12eb35feb51 Mon Sep 17 00:00:00 2001 +From: Peter Cai +Date: Sun, 16 Mar 2025 13:56:06 -0400 +Subject: [PATCH 2/2] Add spninfo / schema + +--- + lib/SpnInfo.xsd | 47 +++++++++++++++++++++++++++++++++++++ + lib/schema/current.txt | 40 +++++++++++++++++++++++++++++++ + lib/schema/last_current.txt | 0 + lib/schema/last_removed.txt | 0 + lib/schema/removed.txt | 1 + + 5 files changed, 88 insertions(+) + create mode 100644 lib/SpnInfo.xsd + create mode 100644 lib/schema/current.txt + create mode 100644 lib/schema/last_current.txt + create mode 100644 lib/schema/last_removed.txt + create mode 100644 lib/schema/removed.txt + +diff --git a/lib/SpnInfo.xsd b/lib/SpnInfo.xsd +new file mode 100644 +index 00000000..d30630dc +--- /dev/null ++++ b/lib/SpnInfo.xsd +@@ -0,0 +1,47 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/lib/schema/current.txt b/lib/schema/current.txt +new file mode 100644 +index 00000000..13e52c67 +--- /dev/null ++++ b/lib/schema/current.txt +@@ -0,0 +1,40 @@ ++// Signature format: 2.0 ++package org.lineageos.lib.phone.spn { ++ ++ public class Item { ++ ctor public Item(); ++ method public String getCategories(); ++ method public String getLanguages(); ++ method public String getName(); ++ method public String getNumber(); ++ method public String getOrganization(); ++ method public String getWebsite(); ++ method public void setCategories(String); ++ method public void setLanguages(String); ++ method public void setName(String); ++ method public void setNumber(String); ++ method public void setOrganization(String); ++ method public void setWebsite(String); ++ } ++ ++ public class SensitivePN { ++ ctor public SensitivePN(); ++ method public java.util.List getItem(); ++ method public String getNetwork(); ++ method public void setNetwork(String); ++ } ++ ++ public class SensitivePNS { ++ ctor public SensitivePNS(); ++ method public java.util.List getSensitivePN(); ++ } ++ ++ public class XmlParser { ++ ctor public XmlParser(); ++ method public static org.lineageos.lib.phone.spn.SensitivePNS read(java.io.InputStream) throws javax.xml.datatype.DatatypeConfigurationException, java.io.IOException, org.xmlpull.v1.XmlPullParserException; ++ method public static String readText(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; ++ method public static void skip(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; ++ } ++ ++} ++ +diff --git a/lib/schema/last_current.txt b/lib/schema/last_current.txt +new file mode 100644 +index 00000000..e69de29b +diff --git a/lib/schema/last_removed.txt b/lib/schema/last_removed.txt +new file mode 100644 +index 00000000..e69de29b +diff --git a/lib/schema/removed.txt b/lib/schema/removed.txt +new file mode 100644 +index 00000000..d802177e +--- /dev/null ++++ b/lib/schema/removed.txt +@@ -0,0 +1 @@ ++// Signature format: 2.0 +-- +2.48.1 + diff --git a/packages/apps/Dialer/0001-Downgrade-target_sdk_version-to-34-for-now.patch b/packages/apps/Dialer/0001-Downgrade-target_sdk_version-to-34-for-now.patch index c73ca22..d3eddbe 100644 --- a/packages/apps/Dialer/0001-Downgrade-target_sdk_version-to-34-for-now.patch +++ b/packages/apps/Dialer/0001-Downgrade-target_sdk_version-to-34-for-now.patch @@ -1,7 +1,7 @@ -From b60353d34c0eef8a6291c11e671a22298b3d6d99 Mon Sep 17 00:00:00 2001 +From 4a576ac73698b2232c51a4b6b3c9a21845801136 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sun, 6 Oct 2024 14:22:49 -0400 -Subject: [PATCH 1/2] Downgrade target_sdk_version to 34 for now +Subject: [PATCH 1/3] Downgrade target_sdk_version to 34 for now --- Android.bp | 1 + @@ -20,5 +20,5 @@ index 388f4c00c..498e7c8f0 100644 srcs: [ "java/**/I*.aidl", -- -2.44.0 +2.48.1 diff --git a/packages/apps/Dialer/0002-Make-java_sdk_library-dependencies-explicit.patch b/packages/apps/Dialer/0002-Make-java_sdk_library-dependencies-explicit.patch index b4c41b2..20157f8 100644 --- a/packages/apps/Dialer/0002-Make-java_sdk_library-dependencies-explicit.patch +++ b/packages/apps/Dialer/0002-Make-java_sdk_library-dependencies-explicit.patch @@ -1,7 +1,7 @@ -From da7c7a335475dc61375b470b1aa6cb425ed54514 Mon Sep 17 00:00:00 2001 +From 080c04159988f202694f087f442e3e32f18d4625 Mon Sep 17 00:00:00 2001 From: Jihoon Kang Date: Fri, 30 Aug 2024 00:29:34 +0000 -Subject: [PATCH 2/2] Make java_sdk_library dependencies explicit +Subject: [PATCH 2/3] Make java_sdk_library dependencies explicit modules should specify the submodule of java_sdk_library that the module actually depends on @@ -27,5 +27,5 @@ index 498e7c8f0..299c1a6e7 100644 optimize: { proguard_flags_files: [ -- -2.44.0 +2.48.1 diff --git a/packages/apps/Dialer/0003-Opt-out-from-the-resource-processor-for-now.patch b/packages/apps/Dialer/0003-Opt-out-from-the-resource-processor-for-now.patch new file mode 100644 index 0000000..679f9c3 --- /dev/null +++ b/packages/apps/Dialer/0003-Opt-out-from-the-resource-processor-for-now.patch @@ -0,0 +1,24 @@ +From fa83fab06f1bd59551b926a224e0cf4cdfcb86da Mon Sep 17 00:00:00 2001 +From: Peter Cai +Date: Sun, 16 Mar 2025 13:51:15 -0400 +Subject: [PATCH 3/3] Opt-out from the resource processor (for now) + +--- + Android.bp | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/Android.bp b/Android.bp +index 299c1a6e7..b35b8913e 100644 +--- a/Android.bp ++++ b/Android.bp +@@ -9,6 +9,7 @@ package { + + android_app { + name: "Dialer", ++ use_resource_processor: false, + aaptflags: [ + "--auto-add-overlay", + "--extra-packages com.android.contacts.common", +-- +2.48.1 + diff --git a/packages/apps/Launcher3/0001-Expose-themed-icon-setting-in-ThemePicker.patch b/packages/apps/Launcher3/0001-Expose-themed-icon-setting-in-ThemePicker.patch index ce9567d..486e8d4 100644 --- a/packages/apps/Launcher3/0001-Expose-themed-icon-setting-in-ThemePicker.patch +++ b/packages/apps/Launcher3/0001-Expose-themed-icon-setting-in-ThemePicker.patch @@ -1,4 +1,4 @@ -From 88275c8b0d207286b34284ad69090b29b705c4c1 Mon Sep 17 00:00:00 2001 +From 09d183a632ab5ba6ef0f1f76765fc94ef24035f4 Mon Sep 17 00:00:00 2001 From: Danny Lin Date: Mon, 11 Oct 2021 20:48:44 -0700 Subject: [PATCH 1/3] Expose themed icon setting in ThemePicker @@ -24,7 +24,7 @@ index 517bd6d..89291c1 100644 diff --git a/quickstep/AndroidManifest-launcher.xml b/quickstep/AndroidManifest-launcher.xml -index c6e2d8c..1d7405e 100644 +index 80d8154..813ef75 100644 --- a/quickstep/AndroidManifest-launcher.xml +++ b/quickstep/AndroidManifest-launcher.xml @@ -65,6 +65,9 @@ @@ -38,5 +38,5 @@ index c6e2d8c..1d7405e 100644 -- -2.44.0 +2.48.1 diff --git a/packages/apps/Launcher3/0002-Disable-QSB-in-BuildConfig.patch b/packages/apps/Launcher3/0002-Disable-QSB-in-BuildConfig.patch index dfc0614..e509abe 100644 --- a/packages/apps/Launcher3/0002-Disable-QSB-in-BuildConfig.patch +++ b/packages/apps/Launcher3/0002-Disable-QSB-in-BuildConfig.patch @@ -1,4 +1,4 @@ -From 8f504046ec34c16fbd8a1d2da8294ab84e3817fa Mon Sep 17 00:00:00 2001 +From c2cafe53a8b6acf97dc9a634ada0d4ab53b5fd9f Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 7 Jul 2023 18:13:32 -0400 Subject: [PATCH 2/3] Disable QSB in BuildConfig @@ -22,5 +22,5 @@ index 6d4f56d..2630ec1 100644 /** * Flag to state if the widget on the top of the first screen should be shown. -- -2.44.0 +2.48.1 diff --git a/packages/apps/Launcher3/0003-Properly-expose-GridCustomizationsProvider.patch b/packages/apps/Launcher3/0003-Properly-expose-GridCustomizationsProvider.patch index 5e9c25f..a139ad7 100644 --- a/packages/apps/Launcher3/0003-Properly-expose-GridCustomizationsProvider.patch +++ b/packages/apps/Launcher3/0003-Properly-expose-GridCustomizationsProvider.patch @@ -1,4 +1,4 @@ -From 38d5e4a3a7bc358e77e7f9e2e8d2f4d1dfaed0b5 Mon Sep 17 00:00:00 2001 +From de7b698be0f1e01b337672d919854e3a28b8685f Mon Sep 17 00:00:00 2001 From: Luca Stefani Date: Fri, 1 Nov 2019 23:17:59 +0100 Subject: [PATCH 3/3] Properly expose GridCustomizationsProvider @@ -24,5 +24,5 @@ index 80d2eac..53bdfff 100644 - Search Settings +@@ -13910,4 +13910,10 @@ + Circle to Search + + Touch and hold the Home button or the navigation handle to search using the content on your screen. + + + Global VPN @@ -176,5 +176,5 @@ index 00c8f59..c4f447f 100644 private static final String TAG = "CannotConnect"; private static final String ARG_VPN_LABEL = "label"; -- -2.44.0 +2.48.1 diff --git a/packages/apps/ThemePicker/0001-Add-wallpaper-privapp-whitelist.patch b/packages/apps/ThemePicker/0001-Add-wallpaper-privapp-whitelist.patch index 81d4696..bbd0589 100644 --- a/packages/apps/ThemePicker/0001-Add-wallpaper-privapp-whitelist.patch +++ b/packages/apps/ThemePicker/0001-Add-wallpaper-privapp-whitelist.patch @@ -1,4 +1,4 @@ -From 7ef009b2434c5cf9f7d4ec9f114336d6a43d888f Mon Sep 17 00:00:00 2001 +From bc50b3024c266f307ce804ef1887062cf1f34944 Mon Sep 17 00:00:00 2001 From: Luca Stefani Date: Fri, 1 Nov 2019 21:14:29 +0100 Subject: [PATCH 1/4] Add wallpaper privapp whitelist @@ -61,5 +61,5 @@ index 0000000..e3f3b65 + + -- -2.44.0 +2.48.1 diff --git a/packages/apps/ThemePicker/0002-Add-wallpaper-default-permissions.patch b/packages/apps/ThemePicker/0002-Add-wallpaper-default-permissions.patch index 40a73d6..d8876d5 100644 --- a/packages/apps/ThemePicker/0002-Add-wallpaper-default-permissions.patch +++ b/packages/apps/ThemePicker/0002-Add-wallpaper-default-permissions.patch @@ -1,4 +1,4 @@ -From 0e064d23f1b0dc300651d9d680927ecb26aa9013 Mon Sep 17 00:00:00 2001 +From b255f705538f7e55d445c60c1a12f60dd309df1d Mon Sep 17 00:00:00 2001 From: LuK1337 Date: Tue, 15 Sep 2020 03:27:19 +0200 Subject: [PATCH 2/4] Add wallpaper default permissions @@ -82,5 +82,5 @@ index 0000000..41b23ce + + -- -2.44.0 +2.48.1 diff --git a/packages/apps/ThemePicker/0003-Specify-we-read-and-write-launcher-settings.patch b/packages/apps/ThemePicker/0003-Specify-we-read-and-write-launcher-settings.patch index c041a3d..3ccf62b 100644 --- a/packages/apps/ThemePicker/0003-Specify-we-read-and-write-launcher-settings.patch +++ b/packages/apps/ThemePicker/0003-Specify-we-read-and-write-launcher-settings.patch @@ -1,4 +1,4 @@ -From 4c72c9bf019b1da8aa0888d1f4f22cc026aa87bf Mon Sep 17 00:00:00 2001 +From 623014b94ae4bb08328684bb077b05973ab858eb Mon Sep 17 00:00:00 2001 From: Luca Stefani Date: Fri, 1 Nov 2019 23:17:08 +0100 Subject: [PATCH 3/4] Specify we read and write launcher settings @@ -23,5 +23,5 @@ index f89ff6e..95f5b0e 100755 tools:replace="android:icon,android:name" android:extractNativeLibs="false" -- -2.44.0 +2.48.1 diff --git a/packages/apps/ThemePicker/0004-Add-permission-for-launcher-preview-rendering.patch b/packages/apps/ThemePicker/0004-Add-permission-for-launcher-preview-rendering.patch index 3d4373e..8734c72 100644 --- a/packages/apps/ThemePicker/0004-Add-permission-for-launcher-preview-rendering.patch +++ b/packages/apps/ThemePicker/0004-Add-permission-for-launcher-preview-rendering.patch @@ -1,4 +1,4 @@ -From 30d9a5682d8ae85d7f621b6509f7445fc70bae70 Mon Sep 17 00:00:00 2001 +From 5880006d7be5eeb3fff8a6d9154ae16e2e6ffac7 Mon Sep 17 00:00:00 2001 From: Danny Lin Date: Tue, 5 Oct 2021 22:40:58 -0700 Subject: [PATCH 4/4] Add permission for launcher preview rendering @@ -33,5 +33,5 @@ index e3f3b65..47133be 100644 -- -2.44.0 +2.48.1 diff --git a/packages/modules/Bluetooth/0002-audio_hal_interface-Optionally-use-sysbta-HAL.patch b/packages/modules/Bluetooth/0001-audio_hal_interface-Optionally-use-sysbta-HAL.patch similarity index 57% rename from packages/modules/Bluetooth/0002-audio_hal_interface-Optionally-use-sysbta-HAL.patch rename to packages/modules/Bluetooth/0001-audio_hal_interface-Optionally-use-sysbta-HAL.patch index e28853d..8cfbae3 100644 --- a/packages/modules/Bluetooth/0002-audio_hal_interface-Optionally-use-sysbta-HAL.patch +++ b/packages/modules/Bluetooth/0001-audio_hal_interface-Optionally-use-sysbta-HAL.patch @@ -1,19 +1,86 @@ -From 5949d86e40befe38ef57fc0fbbf18d2fe464332b Mon Sep 17 00:00:00 2001 +From 73a87c7bcc594cc3da4b9c2394cda066d36bb557 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 24 Aug 2022 15:45:18 -0400 -Subject: [PATCH 2/2] audio_hal_interface: Optionally use sysbta HAL +Subject: [PATCH 1/2] audio_hal_interface: Optionally use sysbta HAL Required to support sysbta, our system-side bt audio implementation. Change-Id: I59973e6ec84c5923be8a7c67b36b2e237f000860 --- + .../aidl/a2dp/client_interface_aidl.cc | 8 ++++---- + .../aidl/a2dp/client_interface_aidl.h | 7 +++++++ .../audio_hal_interface/aidl/client_interface_aidl.cc | 8 ++++---- .../audio_hal_interface/aidl/client_interface_aidl.h | 7 +++++++ system/audio_hal_interface/hal_version_manager.cc | 11 +++++++++-- - 3 files changed, 20 insertions(+), 6 deletions(-) + 5 files changed, 31 insertions(+), 10 deletions(-) +diff --git a/system/audio_hal_interface/aidl/a2dp/client_interface_aidl.cc b/system/audio_hal_interface/aidl/a2dp/client_interface_aidl.cc +index f022ec3ea2..283beb22fa 100644 +--- a/system/audio_hal_interface/aidl/a2dp/client_interface_aidl.cc ++++ b/system/audio_hal_interface/aidl/a2dp/client_interface_aidl.cc +@@ -58,7 +58,7 @@ BluetoothAudioClientInterface::~BluetoothAudioClientInterface() { + bool BluetoothAudioClientInterface::IsValid() const { return provider_ != nullptr; } + + bool BluetoothAudioClientInterface::is_aidl_available() { +- return AServiceManager_isDeclared(kDefaultAudioProviderFactoryInterface.c_str()); ++ return AServiceManager_isDeclared(audioProviderFactoryInterface().c_str()); + } + + std::vector BluetoothAudioClientInterface::GetAudioCapabilities() const { +@@ -72,7 +72,7 @@ std::vector BluetoothAudioClientInterface::GetAudioCapabiliti + return capabilities; + } + auto provider_factory = IBluetoothAudioProviderFactory::fromBinder(::ndk::SpAIBinder( +- AServiceManager_waitForService(kDefaultAudioProviderFactoryInterface.c_str()))); ++ AServiceManager_waitForService(audioProviderFactoryInterface().c_str()))); + + if (provider_factory == nullptr) { + log::error("can't get capability from unknown factory"); +@@ -97,7 +97,7 @@ BluetoothAudioClientInterface::GetProviderInfo( + + if (provider_factory == nullptr) { + provider_factory = IBluetoothAudioProviderFactory::fromBinder(::ndk::SpAIBinder( +- AServiceManager_waitForService(kDefaultAudioProviderFactoryInterface.c_str()))); ++ AServiceManager_waitForService(audioProviderFactoryInterface().c_str()))); + } + + if (provider_factory == nullptr) { +@@ -173,7 +173,7 @@ void BluetoothAudioClientInterface::FetchAudioProvider() { + // re-registered, so we need to re-fetch the service. + for (int retry_no = 0; retry_no < kFetchAudioProviderRetryNumber; ++retry_no) { + auto provider_factory = IBluetoothAudioProviderFactory::fromBinder(::ndk::SpAIBinder( +- AServiceManager_waitForService(kDefaultAudioProviderFactoryInterface.c_str()))); ++ AServiceManager_waitForService(audioProviderFactoryInterface().c_str()))); + + if (provider_factory == nullptr) { + log::error("can't get capability from unknown factory"); +diff --git a/system/audio_hal_interface/aidl/a2dp/client_interface_aidl.h b/system/audio_hal_interface/aidl/a2dp/client_interface_aidl.h +index a45ff946f2..4c99832e1b 100644 +--- a/system/audio_hal_interface/aidl/a2dp/client_interface_aidl.h ++++ b/system/audio_hal_interface/aidl/a2dp/client_interface_aidl.h +@@ -28,6 +28,7 @@ + #include "bta/le_audio/broadcaster/broadcaster_types.h" + #include "bta/le_audio/le_audio_types.h" + #include "transport_instance.h" ++#include "osi/include/properties.h" + + // Keep after audio_aidl_interfaces.h because of + // conflicting definitions. +@@ -156,6 +157,12 @@ protected: + // "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/aidl/client_interface_aidl.cc b/system/audio_hal_interface/aidl/client_interface_aidl.cc -index 15a20be5b9..412a1ab888 100644 +index 176b355eeb..9d8ddd2cac 100644 --- a/system/audio_hal_interface/aidl/client_interface_aidl.cc +++ b/system/audio_hal_interface/aidl/client_interface_aidl.cc @@ -69,7 +69,7 @@ BluetoothAudioClientInterface::BluetoothAudioClientInterface(IBluetoothTransport @@ -43,7 +110,7 @@ index 15a20be5b9..412a1ab888 100644 } if (provider_factory == nullptr) { -@@ -184,7 +184,7 @@ void BluetoothAudioClientInterface::FetchAudioProvider() { +@@ -140,7 +140,7 @@ void BluetoothAudioClientInterface::FetchAudioProvider() { // re-registered, so we need to re-fetch the service. for (int retry_no = 0; retry_no < kFetchAudioProviderRetryNumber; ++retry_no) { auto provider_factory = IBluetoothAudioProviderFactory::fromBinder(::ndk::SpAIBinder( @@ -53,7 +120,7 @@ index 15a20be5b9..412a1ab888 100644 if (provider_factory == nullptr) { log::error("can't get capability 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 b5bb309ab2..e73009ba69 100644 +index a3c60384ab..ee5901e32a 100644 --- a/system/audio_hal_interface/aidl/client_interface_aidl.h +++ b/system/audio_hal_interface/aidl/client_interface_aidl.h @@ -29,6 +29,7 @@ @@ -64,7 +131,7 @@ index b5bb309ab2..e73009ba69 100644 namespace bluetooth { namespace audio { -@@ -163,6 +164,12 @@ protected: +@@ -150,6 +151,12 @@ protected: // "android.hardware.bluetooth.audio.IBluetoothAudioProviderFactory/default"; static inline const std::string kDefaultAudioProviderFactoryInterface = std::string() + IBluetoothAudioProviderFactory::descriptor + "/default"; @@ -78,7 +145,7 @@ index b5bb309ab2..e73009ba69 100644 private: IBluetoothTransportInstance* transport_; diff --git a/system/audio_hal_interface/hal_version_manager.cc b/system/audio_hal_interface/hal_version_manager.cc -index 19c48c58da..b19da332c0 100644 +index f9843df858..3931bc6a8d 100644 --- a/system/audio_hal_interface/hal_version_manager.cc +++ b/system/audio_hal_interface/hal_version_manager.cc @@ -20,6 +20,7 @@ @@ -89,7 +156,7 @@ index 19c48c58da..b19da332c0 100644 #include -@@ -33,6 +34,12 @@ using ::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProviderFactor +@@ -32,6 +33,12 @@ using ::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProviderFactor static const std::string kDefaultAudioProviderFactoryInterface = std::string() + IBluetoothAudioProviderFactory::descriptor + "/default"; @@ -102,7 +169,7 @@ index 19c48c58da..b19da332c0 100644 std::string toString(BluetoothAudioHalTransport transport) { switch (transport) { -@@ -73,7 +80,7 @@ BluetoothAudioHalVersion GetAidlInterfaceVersion() { +@@ -72,7 +79,7 @@ BluetoothAudioHalVersion GetAidlInterfaceVersion() { static auto aidl_version = []() -> BluetoothAudioHalVersion { int version = 0; auto provider_factory = IBluetoothAudioProviderFactory::fromBinder(::ndk::SpAIBinder( @@ -111,7 +178,7 @@ index 19c48c58da..b19da332c0 100644 if (provider_factory == nullptr) { log::error("getInterfaceVersion: Can't get aidl version from unknown factory"); -@@ -138,7 +145,7 @@ android::sp HalVersionManager::GetProviders +@@ -137,7 +144,7 @@ android::sp HalVersionManager::GetProviders HalVersionManager::HalVersionManager() { hal_transport_ = BluetoothAudioHalTransport::UNKNOWN; @@ -121,5 +188,5 @@ index 19c48c58da..b19da332c0 100644 hal_transport_ = BluetoothAudioHalTransport::AIDL; return; -- -2.44.0 +2.48.1 diff --git a/packages/modules/Bluetooth/0001-Don-t-crash-on-status-UNSUPPORTED_REMOTE_OR_LMP_FEAT.patch b/packages/modules/Bluetooth/0002-Don-t-crash-on-status-UNSUPPORTED_REMOTE_OR_LMP_FEAT.patch similarity index 66% rename from packages/modules/Bluetooth/0001-Don-t-crash-on-status-UNSUPPORTED_REMOTE_OR_LMP_FEAT.patch rename to packages/modules/Bluetooth/0002-Don-t-crash-on-status-UNSUPPORTED_REMOTE_OR_LMP_FEAT.patch index e763608..d03275d 100644 --- a/packages/modules/Bluetooth/0001-Don-t-crash-on-status-UNSUPPORTED_REMOTE_OR_LMP_FEAT.patch +++ b/packages/modules/Bluetooth/0002-Don-t-crash-on-status-UNSUPPORTED_REMOTE_OR_LMP_FEAT.patch @@ -1,7 +1,7 @@ -From 3aa174edd50a176986ab15f91bcb87b7cec160fa Mon Sep 17 00:00:00 2001 +From 29c09f59e76930a00cefd474c96eb40e63a475f5 Mon Sep 17 00:00:00 2001 From: DerTeufel Date: Wed, 4 Jan 2023 21:39:37 +0100 -Subject: [PATCH 1/2] Don't crash on status:UNSUPPORTED_REMOTE_OR_LMP_FEATURE +Subject: [PATCH 2/2] Don't crash on status:UNSUPPORTED_REMOTE_OR_LMP_FEATURE especially 'opcode:0x811 (SNIFF_SUBRATING)' which is the only one I had observed @@ -11,22 +11,22 @@ Change-Id: Ic57d6631185370cbfdeafdac00801c6ca27fb755 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/system/gd/hci/hci_layer.cc b/system/gd/hci/hci_layer.cc -index 70a5f43b56..07d5d25a5c 100644 +index 1311815633..7b913888b2 100644 --- a/system/gd/hci/hci_layer.cc +++ b/system/gd/hci/hci_layer.cc -@@ -216,8 +216,10 @@ struct HciLayer::impl { - - bool is_vendor_specific = static_cast(op_code) & (0x3f << 10); +@@ -238,8 +238,10 @@ struct HciLayer::impl { + using WaitingFor = CommandQueueEntry::WaitingFor; + WaitingFor waiting_for = command_queue_.front().waiting_for_; CommandStatusView status_view = CommandStatusView::Create(event); -- if (is_vendor_specific && (is_status && !command_queue_.front().waiting_for_status_) && +- if (is_vendor_specific && (is_status && waiting_for == WaitingFor::COMPLETE) && - (status_view.IsValid() && status_view.GetStatus() == ErrorCode::UNKNOWN_HCI_COMMAND)) { -+ if ((is_vendor_specific && (is_status && !command_queue_.front().waiting_for_status_) && ++ if ((is_vendor_specific && (is_status && waiting_for == WaitingFor::COMPLETE) && + (status_view.IsValid() && status_view.GetStatus() == ErrorCode::UNKNOWN_HCI_COMMAND)) || -+ ((is_status && !command_queue_.front().waiting_for_status_) && ++ ((is_status && waiting_for == WaitingFor::COMPLETE) && + (status_view.IsValid() && status_view.GetStatus() == ErrorCode::UNSUPPORTED_REMOTE_OR_LMP_FEATURE))) { // If this is a command status of a vendor specific command, and command complete is expected, // we can't treat this as hard failure since we have no way of probing this lack of support at // earlier time. Instead we let the command complete handler handle a empty Command Complete -- -2.44.0 +2.48.1