Changes for January 2022, syncing up to v400.h

This commit is contained in:
Andy CrossGate Yan
2022-01-13 14:32:50 +00:00
parent 463b837c1b
commit d4c58201c8
98 changed files with 2429 additions and 751 deletions

View File

@@ -1,7 +1,7 @@
From ed69eff0e245bc8a8b7c3334b5c30323a09dbfc3 Mon Sep 17 00:00:00 2001
From 6a586c8d51eddc005f1215e73327321296c047fd Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Tue, 5 Oct 2021 17:59:16 -0400
Subject: [PATCH 01/24] Fallback to stupid autobrightness if brightness values
Subject: [PATCH 01/28] Fallback to stupid autobrightness if brightness values
are broken
This is needed because of:

View File

@@ -1,7 +1,7 @@
From c3bc53d43b9c4789bab8c532c44cc6f423810801 Mon Sep 17 00:00:00 2001
From 19e1c2ec405a3a378fd80b86716d65692da7a1cd Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Tue, 28 Nov 2017 18:28:04 +0100
Subject: [PATCH 02/24] Relax requirement for visible flag to sdcards
Subject: [PATCH 02/28] Relax requirement for visible flag to sdcards
The vast majority of sdcard readers are stable enough to be declared by
the API. (I see no counter-example)

View File

@@ -1,7 +1,7 @@
From 9dda80f5f617988755425931377956386d70a703 Mon Sep 17 00:00:00 2001
From 52c14e64a80eede9b3e82afd54fd4e6cf5862cf1 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Thu, 17 May 2018 20:28:35 +0200
Subject: [PATCH 03/24] Don't crash if there is IR HAL is not declared
Subject: [PATCH 03/28] Don't crash if there is IR HAL is not declared
Change-Id: I3afded27441bbee8244d5fda544b3e6d1238dc1b
---

View File

@@ -1,7 +1,7 @@
From 639661b3368671a56a3a2b114d6ffb5c1e6ee95f Mon Sep 17 00:00:00 2001
From 33fb74d694502c95ee26f331ea308114f8506b90 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Mon, 6 Aug 2018 12:49:00 +0200
Subject: [PATCH 04/24] Show APN Settings for CDMA carriers
Subject: [PATCH 04/28] Show APN Settings for CDMA carriers
---
telephony/java/android/telephony/CarrierConfigManager.java | 2 +-

View File

@@ -1,7 +1,7 @@
From a80899cb43a7a0876e2484807dea69c7ddb0b3be Mon Sep 17 00:00:00 2001
From b9d12e89208f1b10efbf6d64b9c1b8613b6b336c Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Thu, 8 Nov 2018 23:04:03 +0100
Subject: [PATCH 05/24] Re-order services so that it works even without qtaguid
Subject: [PATCH 05/28] Re-order services so that it works even without qtaguid
Change-Id: I0c0f527b3ae151d45c68f7ac6c205da3f34e74df
---
@@ -9,10 +9,10 @@ Change-Id: I0c0f527b3ae151d45c68f7ac6c205da3f34e74df
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
index cfefffcdd2e8..197fed7c8834 100644
index 9c664b6da4f2..8ebcfb667161 100644
--- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
+++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
@@ -845,6 +845,10 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
@@ -878,6 +878,10 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
Trace.traceBegin(Trace.TRACE_TAG_NETWORK, "systemReady");
final int oldPriority = Process.getThreadPriority(Process.myTid());
try {
@@ -23,7 +23,7 @@ index cfefffcdd2e8..197fed7c8834 100644
// Boost thread's priority during system server init
Process.setThreadPriority(Process.THREAD_PRIORITY_FOREGROUND);
if (!isBandwidthControlEnabled()) {
@@ -852,10 +856,6 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
@@ -885,10 +889,6 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
return;
}

View File

@@ -1,7 +1,7 @@
From b16ff9568fb76c327e71d32878c6b182a3d8acd4 Mon Sep 17 00:00:00 2001
From 073b07985a88b4ab54a9451503d58070de0f0721 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Sun, 24 Mar 2019 23:05:14 +0100
Subject: [PATCH 06/24] Support samsung Pie and Q light hal
Subject: [PATCH 06/28] Support samsung Pie and Q light hal
Change-Id: I01f94acd7d0672733e48854d80368f9ac6f861c6
---
@@ -23,10 +23,10 @@ index 81532bcba0ae..8ddc16aae3d7 100644
static_libs: [
diff --git a/services/core/jni/com_android_server_lights_LightsService.cpp b/services/core/jni/com_android_server_lights_LightsService.cpp
index 26f6d7428fcc..268b59a58010 100644
index 35d8219651d7..b45b2137d0e6 100644
--- a/services/core/jni/com_android_server_lights_LightsService.cpp
+++ b/services/core/jni/com_android_server_lights_LightsService.cpp
@@ -22,6 +22,10 @@
@@ -23,6 +23,10 @@
#include <android/hardware/light/2.0/ILight.h>
#include <android/hardware/light/2.0/types.h>
@@ -37,7 +37,7 @@ index 26f6d7428fcc..268b59a58010 100644
#include <android-base/chrono_utils.h>
#include <utils/misc.h>
#include <utils/Log.h>
@@ -39,8 +43,17 @@ using Type = ::android::hardware::light::V2_0::Type;
@@ -40,8 +44,17 @@ using Type = ::android::hardware::light::V2_0::Type;
template<typename T>
using Return = ::android::hardware::Return<T>;
@@ -55,8 +55,8 @@ index 26f6d7428fcc..268b59a58010 100644
static bool validate(jint light, jint flash, jint brightness) {
bool valid = true;
@@ -141,6 +154,44 @@ static void setLight_native(
return;
@@ -152,6 +165,44 @@ static void setLight_native(
colorARGB = (colorAlpha << 24) + (colorARGB & 0x00FFFFFF);
}
+ if(!sSecTried) {

View File

@@ -1,7 +1,7 @@
From 14f642d18be9bb7de7ea4409021880d8ae0c279b Mon Sep 17 00:00:00 2001
From 489e8a00a23c0dd6fbef5f1e69b2f7ed3fbc04d7 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Mon, 12 Aug 2019 23:08:26 +0200
Subject: [PATCH 07/24] Add support for samsung touch, physical and hover
Subject: [PATCH 07/28] Add support for samsung touch, physical and hover
proximity sensor as fallback to real proximity sensor
Change-Id: I7a0f8b4665c802140d19197d850b77b2a7ac1865
@@ -10,10 +10,10 @@ Change-Id: I7a0f8b4665c802140d19197d850b77b2a7ac1865
1 file changed, 35 insertions(+)
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
index 1224902aa7be..00fab25350dc 100644
index f543a562687c..82b1260e79dc 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
@@ -1700,6 +1700,27 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
@@ -1726,6 +1726,27 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
? Sensor.TYPE_PROXIMITY : SensorUtils.NO_FALLBACK;
mProximitySensor = SensorUtils.findSensor(mSensorManager, proxSensor.type, proxSensor.name,
fallbackType);
@@ -41,7 +41,7 @@ index 1224902aa7be..00fab25350dc 100644
if (mProximitySensor != null) {
mProximityThreshold = Math.min(mProximitySensor.getMaximumRange(),
TYPICAL_PROXIMITY_THRESHOLD);
@@ -2465,6 +2486,20 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
@@ -2491,6 +2512,20 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
public void onSensorChanged(SensorEvent event) {
if (mProximitySensorEnabled) {
final long time = SystemClock.uptimeMillis();

View File

@@ -1,7 +1,7 @@
From 433f76bd4145480f67496d409e01a0f8b235879f Mon Sep 17 00:00:00 2001
From e69df4088c108effd45e8741047ee1afd8ca2ce5 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Sun, 5 Apr 2020 16:32:46 +0200
Subject: [PATCH 08/24] Always allow overriding the number of work profiles
Subject: [PATCH 08/28] Always allow overriding the number of work profiles
Change-Id: I6eb09aa71663c6fbe7563e3038bffcabdba0ff6a
---

View File

@@ -1,7 +1,7 @@
From 2e867d814f8f7675058085aea23b5cb95f8588f9 Mon Sep 17 00:00:00 2001
From 901baaf78da74754054309406fb5211170a38552 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Sat, 6 Jun 2020 18:21:56 +0200
Subject: [PATCH 09/24] HOME deserves to wake-up devices just as well as back
Subject: [PATCH 09/28] HOME deserves to wake-up devices just as well as back
and menu
Change-Id: Ia562bafd8c620d00c17e8eb338e4701c6c4a3c3a
@@ -10,12 +10,12 @@ Change-Id: Ia562bafd8c620d00c17e8eb338e4701c6c4a3c3a
1 file changed, 1 insertion(+)
diff --git a/core/java/android/view/KeyEvent.java b/core/java/android/view/KeyEvent.java
index cda9b233576c..bb35e3172165 100644
index 63fa3323b5b5..b1a845990df3 100644
--- a/core/java/android/view/KeyEvent.java
+++ b/core/java/android/view/KeyEvent.java
@@ -1988,6 +1988,7 @@ public class KeyEvent extends InputEvent implements Parcelable {
switch (keyCode) {
@@ -1995,6 +1995,7 @@ public class KeyEvent extends InputEvent implements Parcelable {
case KeyEvent.KEYCODE_CAMERA:
case KeyEvent.KEYCODE_FOCUS:
case KeyEvent.KEYCODE_MENU:
+ case KeyEvent.KEYCODE_HOME:
case KeyEvent.KEYCODE_PAIRING:

View File

@@ -1,7 +1,7 @@
From acf92f0e0d9efaf2453aacb16b58eccb914094c4 Mon Sep 17 00:00:00 2001
From 14e1ced9fe14016d081618bb41a451227cd538d8 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Tue, 29 Sep 2020 22:39:47 +0200
Subject: [PATCH 10/24] Some devices have proximity sensor reporting NaN as max
Subject: [PATCH 10/28] Some devices have proximity sensor reporting NaN as max
range for some reason. Make them behave standard way by setting 5 cm
Change-Id: I3c39e3e914a05903c140235702e0480d2d58a612
@@ -10,10 +10,10 @@ Change-Id: I3c39e3e914a05903c140235702e0480d2d58a612
1 file changed, 3 insertions(+)
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
index 00fab25350dc..3c49a01e00b4 100644
index 82b1260e79dc..a9de9e1ff19a 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
@@ -1724,6 +1724,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
@@ -1750,6 +1750,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
if (mProximitySensor != null) {
mProximityThreshold = Math.min(mProximitySensor.getMaximumRange(),
TYPICAL_PROXIMITY_THRESHOLD);

View File

@@ -1,7 +1,7 @@
From cc5cb64f17283c81d884e75ee38ef6c292d3ca46 Mon Sep 17 00:00:00 2001
From f8fb9e614a976c475edc26770347f9eee623d85c Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Tue, 29 Sep 2020 22:40:10 +0200
Subject: [PATCH 11/24] Fix brightness range not being complete on Samsung
Subject: [PATCH 11/28] Fix brightness range not being complete on Samsung
devices
On some devices, minimum brightness is 0, which totally messes with
@@ -15,10 +15,10 @@ Change-Id: I4d97cbc32490949e83272b81ec6320a5483310b1
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index f0ebe290c837..76af7630819c 100644
index 62d9991254bd..24932bd4d201 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -993,9 +993,11 @@ public final class PowerManagerService extends SystemService
@@ -1040,9 +1040,11 @@ public final class PowerManagerService extends SystemService
if (min == INVALID_BRIGHTNESS_IN_CONFIG || max == INVALID_BRIGHTNESS_IN_CONFIG
|| def == INVALID_BRIGHTNESS_IN_CONFIG) {

View File

@@ -1,7 +1,7 @@
From 42ab9d35ed55b576d7e7257a18fd984c79d63b9b Mon Sep 17 00:00:00 2001
From ccb4d4cf65dcb79d237caa9192bb863ef5809edd Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Sun, 25 Oct 2020 23:57:26 +0100
Subject: [PATCH 12/24] Re-implement fnmatch-like behaviour for RRO java-side
Subject: [PATCH 12/28] Re-implement fnmatch-like behaviour for RRO java-side
Change-Id: Id38292a9a1453aa87b8401c1fdb390fa4e63c7d1
---

View File

@@ -1,7 +1,7 @@
From 2319811d1b5e5055c236807ce0ff8be759056741 Mon Sep 17 00:00:00 2001
From 924e19514d9bc0c67c64560fba9d7fc3432e8981 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Sun, 6 Dec 2020 12:20:08 +0100
Subject: [PATCH 13/24] Make rounded corners padding overridable with
Subject: [PATCH 13/28] Make rounded corners padding overridable with
persist.sys.phh.rounded_corners_padding
Change-Id: I481c1c8849b2f22a7cdfb2896a6d3c2e7e3b44d9
@@ -12,7 +12,7 @@ Change-Id: I481c1c8849b2f22a7cdfb2896a6d3c2e7e3b44d9
3 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
index 84b961e7c48a..a5150000f47c 100644
index d2af6f88915f..3478ec463573 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
@@ -22,6 +22,7 @@ import android.content.res.Configuration;
@@ -23,7 +23,7 @@ index 84b961e7c48a..a5150000f47c 100644
import android.util.AttributeSet;
import android.util.Pair;
import android.view.DisplayCutout;
@@ -234,8 +235,10 @@ public class QuickStatusBarHeader extends FrameLayout {
@@ -238,8 +239,10 @@ public class QuickStatusBarHeader extends FrameLayout implements TunerService.Tu
mConfigShowBatteryEstimate = resources.getBoolean(R.bool.config_showBatteryEstimateQSBH);
@@ -37,7 +37,7 @@ index 84b961e7c48a..a5150000f47c 100644
int qsOffsetHeight = resources.getDimensionPixelSize(
com.android.internal.R.dimen.quick_qs_offset_height);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java
index 788665269edb..f9c6ebbd26e3 100644
index c1191aa71ef4..a32e7c4765ef 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java
@@ -30,6 +30,7 @@ import android.graphics.Color;
@@ -48,10 +48,10 @@ index 788665269edb..f9c6ebbd26e3 100644
import android.util.AttributeSet;
import android.util.Pair;
import android.util.TypedValue;
@@ -196,8 +197,10 @@ public class KeyguardStatusBarView extends RelativeLayout implements
@@ -193,8 +194,10 @@ public class KeyguardStatusBarView extends RelativeLayout implements
R.dimen.ongoing_appops_dot_min_padding);
mCutoutSideNudge = getResources().getDimensionPixelSize(
R.dimen.display_cutout_margin_consumption);
mShowPercentAvailable = getContext().getResources().getBoolean(
com.android.internal.R.bool.config_battery_percentage_setting_available);
- mRoundedCornerPadding = res.getDimensionPixelSize(
- R.dimen.rounded_corner_content_padding);
+ mRoundedCornerPadding = SystemProperties.getInt("persist.sys.phh.rounded_corners_padding", -1);

View File

@@ -1,7 +1,7 @@
From 3e636d6cf6d3f10c5578ba79f8246278b5b1205f Mon Sep 17 00:00:00 2001
From dd87ec1187b8be38995b734dbdfe3598dfd59cdb Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Fri, 11 Dec 2020 14:41:09 +0100
Subject: [PATCH 14/24] Remove useless notification about "console" service
Subject: [PATCH 14/28] Remove useless notification about "console" service
being running
---

View File

@@ -1,7 +1,7 @@
From b78db2908f199c2ecdbb2c9e8f08cc96c399d986 Mon Sep 17 00:00:00 2001
From bdffa8303310e05d4fba777d5f1e00b62d20db19 Mon Sep 17 00:00:00 2001
From: Peter Cai <peter@typeblog.net>
Date: Wed, 16 Dec 2020 21:24:12 +0800
Subject: [PATCH 15/24] Revert "Remove unused SystemProperties.set"
Subject: [PATCH 15/28] Revert "Remove unused SystemProperties.set"
This reverts commit debb4616ef67f9ed5054eca51ec58592358ff55f.

View File

@@ -1,7 +1,7 @@
From 557bd0cca4cee3c3137cba9035eb254772436eae Mon Sep 17 00:00:00 2001
From 6384008d3e04db21fe384cba9879b915cded98ab Mon Sep 17 00:00:00 2001
From: Peter Cai <peter@typeblog.net>
Date: Wed, 16 Dec 2020 13:46:15 +0800
Subject: [PATCH 16/24] TelephonyManager: bring back getNetworkClass()
Subject: [PATCH 16/28] TelephonyManager: bring back getNetworkClass()
This partially reverts commit c058cac051ab083dc7fb7ea6aa85699110b2e9bf.

View File

@@ -1,7 +1,7 @@
From b51669eff63818a15122ee274e50792b2772ecba Mon Sep 17 00:00:00 2001
From 3026abf6ca577e885c2481c39826b16104a49ac2 Mon Sep 17 00:00:00 2001
From: Peter Cai <peter@typeblog.net>
Date: Wed, 16 Dec 2020 21:26:45 +0800
Subject: [PATCH 17/24] TelephonyManager: add API annotations for
Subject: [PATCH 17/28] TelephonyManager: add API annotations for
setTelephonyProperty
* This method was added back by reverting commit

View File

@@ -1,7 +1,7 @@
From 9b926fe1972bf2f8139a8a00b2f452d4e3cabdea Mon Sep 17 00:00:00 2001
From 78a5652a8d86f51f479ced7b08864fe71f630905 Mon Sep 17 00:00:00 2001
From: Alberto Ponces <ponces26@gmail.com>
Date: Tue, 2 Feb 2021 10:20:51 +0000
Subject: [PATCH 18/24] Fix Wakelock issue
Subject: [PATCH 18/28] Fix Wakelock issue
Prevent SystemUI crash due to "WakeLock under-locked Doze" (issue #12) by only releasing a wakelock that was not already released
---

View File

@@ -1,7 +1,7 @@
From ec9c979cb9c2399380292d775d068ce596ba855d Mon Sep 17 00:00:00 2001
From 2cb4389377b69c5e53101536333838c6aa63d4fa Mon Sep 17 00:00:00 2001
From: Arne Coucheron <arco68@gmail.com>
Date: Thu, 5 Nov 2020 05:38:44 +0100
Subject: [PATCH 19/24] SystemUI: Use AVCProfileMain for screen recorder
Subject: [PATCH 19/28] SystemUI: Use AVCProfileMain for screen recorder
Some devices don't support the High profile very well.
Use Main profile, which is more compatible, so they

View File

@@ -1,7 +1,7 @@
From e63f6286978d095c26a24253b503c3964db6ab68 Mon Sep 17 00:00:00 2001
From 357f0fac32fc59b8f6349febd3a65f2ffb820279 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Sat, 20 Mar 2021 14:31:01 +0100
Subject: [PATCH 20/24] Automatically detect pick up sensor, so that an overlay
Subject: [PATCH 20/28] Automatically detect pick up sensor, so that an overlay
is required for the sole purpose of enabling pulse doze on pick up sensor
---

View File

@@ -1,7 +1,7 @@
From 69a948909ec0ac6d2fb89fdfeadee0df09437df0 Mon Sep 17 00:00:00 2001
From f4f5e6173024f2057f4d4ffcdc77028d03b004e2 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Tue, 23 Mar 2021 19:43:26 +0100
Subject: [PATCH 21/24] Catch broken mainBuiltInDisplayCutoutRectApproximation
Subject: [PATCH 21/28] Catch broken mainBuiltInDisplayCutoutRectApproximation
Some devices (Redmi Note 9T) have:
mainBuiltInDisplayCutoutRectApproximation = @android:mainBuiltInDisplayCutout

View File

@@ -1,7 +1,7 @@
From 97d62e3f56c39729d3756166599999216fbc2639 Mon Sep 17 00:00:00 2001
From 0935d80aa90b9575b77bd55a37432a5f4a6c3747 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Sat, 24 Mar 2018 08:01:48 +0100
Subject: [PATCH 22/24] backlight: Fix backlight control on Galaxy S9(+)
Subject: [PATCH 22/28] backlight: Fix backlight control on Galaxy S9(+)
Change-Id: I1fbbb47939c377597ef8ad6b88b2acea5f4acaa6
@@ -53,10 +53,10 @@ Change-Id: I4e85178327d2bb63d5d0a37786058843662a89ba
1 file changed, 46 insertions(+)
diff --git a/services/core/java/com/android/server/lights/LightsService.java b/services/core/java/com/android/server/lights/LightsService.java
index 91f14de040fe..8fa9c4f3a698 100644
index fea6b29d9260..caf9eba7d9a8 100644
--- a/services/core/java/com/android/server/lights/LightsService.java
+++ b/services/core/java/com/android/server/lights/LightsService.java
@@ -31,6 +31,7 @@ import android.os.IBinder;
@@ -32,6 +32,7 @@ import android.os.IBinder;
import android.os.Looper;
import android.os.RemoteException;
import android.os.ServiceManager;
@@ -64,7 +64,7 @@ index 91f14de040fe..8fa9c4f3a698 100644
import android.os.Trace;
import android.provider.Settings;
import android.util.Slog;
@@ -294,6 +295,51 @@ public class LightsService extends SystemService {
@@ -295,6 +296,51 @@ public class LightsService extends SystemService {
return;
}
int brightnessInt = BrightnessSynchronizer.brightnessFloatToInt(brightness);

View File

@@ -1,7 +1,7 @@
From 38da0b29efb2577ebd9295a45617160e3caec696 Mon Sep 17 00:00:00 2001
From 7b0c25ae3dfe6af5d9d9a2b2518964f7c5f034bf Mon Sep 17 00:00:00 2001
From: Danny Lin <danny@kdrag0n.dev>
Date: Sat, 16 Oct 2021 05:27:57 -0700
Subject: [PATCH 23/24] Add support for app signature spoofing
Subject: [PATCH 23/28] 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
@@ -56,10 +56,10 @@ index 1de47b548a5c..52c7ea2e1321 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 cd6af189a04a..318a7f06494e 100644
index 76b8547cea2a..8bd3206d1e3a 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -3189,6 +3189,21 @@
@@ -3199,6 +3199,21 @@
android:description="@string/permdesc_getPackageSize"
android:protectionLevel="normal" />
@@ -105,7 +105,7 @@ index b58638cc3ade..8cf98fa56bf6 100644
<string name="permlab_statusBar">disable or modify status bar</string>
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index b77483012ee8..04f55ae83ef0 100644
index f69922f64787..7d0ba265ff7e 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -3325,6 +3325,29 @@ public class PackageManagerService extends IPackageManager.Stub

View File

@@ -1,7 +1,7 @@
From 4881811426c4f2f28d1f053ef73441c53d1238a5 Mon Sep 17 00:00:00 2001
From 7003808f45a75893726d4073da9132c314091e98 Mon Sep 17 00:00:00 2001
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
Date: Sat, 4 Sep 2021 08:26:30 +0000
Subject: [PATCH 24/24] Revert "Switch long-press power behavior in AOSP."
Subject: [PATCH 24/28] Revert "Switch long-press power behavior in AOSP."
This reverts commit 803c77a0a24624111944832098c6f65158051dc4.
---
@@ -9,19 +9,19 @@ This reverts commit 803c77a0a24624111944832098c6f65158051dc4.
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 0abeff91e511..b7dfd49b7b78 100644
index 380f2b362668..3ce1886fef6d 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -955,7 +955,7 @@
4 - Go to voice assist
@@ -956,7 +956,7 @@
5 - Go to assistant (Settings.Secure.ASSISTANT)
6 - Toggle torch on / off (if screen is off)
-->
- <integer name="config_longPressOnPowerBehavior">5</integer>
+ <integer name="config_longPressOnPowerBehavior">1</integer>
<!-- The time in milliseconds after which a press on power button is considered "long". -->
<integer name="config_longPressOnPowerDurationMs">500</integer>
@@ -987,7 +987,7 @@
@@ -988,7 +988,7 @@
1 - Mute toggle
2 - Global actions menu
-->

View File

@@ -0,0 +1,28 @@
From 72faf5ce1446d48e39961177519c92359e066312 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Fri, 17 Dec 2021 17:16:14 -0500
Subject: [PATCH 25/28] Reduce the size of udfps enroll progress bar. Some
devices have their udfps pretty low, and the progress bar would make the icon
at the wrong place
Change-Id: I1609ad9ca316293dcaaf07f7e681d11aadfcd29c
---
packages/SystemUI/res/values/config.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index dbbb54f7ad6e..d0098b32f384 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -637,7 +637,7 @@
<!-- The radius of the enrollment progress bar, in dp -->
<integer name="config_udfpsEnrollProgressBar" translatable="false">
- 280
+ 70
</integer>
<!-- package name of a built-in camera app to use to restrict implicit intent resolution
--
2.25.1

View File

@@ -0,0 +1,592 @@
From 380896691e59acbc1af203a2433adaba68c1b5ee Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Sun, 19 Dec 2021 17:08:22 -0500
Subject: [PATCH 26/28] Add UDFPS support for various devices
Successfully tested on Galaxy A51, Xiaomi Mi 9, and OnePlus Nord 2
- Detect UDFPS properties (udfps support and x/y/r) based on
OEM-specific methods
- Hardcode UDFPS properties for some devices
- Call OEM-specific functions on touchDown/touchUp
Change-Id: I9448f06a46c178652f5b216717d914b8db55c993
---
.../systemui/biometrics/UdfpsSurfaceView.java | 2 +-
.../systemui/biometrics/UdfpsView.java | 53 +++-
services/core/Android.bp | 4 +
.../server/biometrics/AuthService.java | 262 +++++++++++++++++-
.../sensors/fingerprint/UdfpsHelper.java | 115 +++++++-
5 files changed, 418 insertions(+), 18 deletions(-)
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsSurfaceView.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsSurfaceView.java
index 77fad35d32d4..51409b9c533a 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsSurfaceView.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsSurfaceView.java
@@ -69,7 +69,7 @@ public class UdfpsSurfaceView extends SurfaceView implements SurfaceHolder.Callb
mSensorPaint = new Paint(0 /* flags */);
mSensorPaint.setAntiAlias(true);
- mSensorPaint.setARGB(255, 255, 255, 255);
+ mSensorPaint.setARGB(255, 0, 255, 0);
mSensorPaint.setStyle(Paint.Style.FILL);
}
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsView.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsView.java
index 8a213ec502e4..335edf4819de 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsView.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsView.java
@@ -41,6 +41,12 @@ import com.android.systemui.R;
import com.android.systemui.biometrics.UdfpsHbmTypes.HbmType;
import com.android.systemui.doze.DozeReceiver;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.PrintWriter;
+
+
/**
* A view containing 1) A SurfaceView for HBM, and 2) A normal drawable view for all other
* animations.
@@ -50,7 +56,7 @@ public class UdfpsView extends FrameLayout implements DozeReceiver, UdfpsIllumin
private static final String SETTING_HBM_TYPE =
"com.android.systemui.biometrics.UdfpsSurfaceView.hbmType";
- private static final @HbmType int DEFAULT_HBM_TYPE = UdfpsHbmTypes.LOCAL_HBM;
+ private static final @HbmType int DEFAULT_HBM_TYPE = UdfpsHbmTypes.GLOBAL_HBM;
private static final int DEBUG_TEXT_SIZE_PX = 32;
@@ -70,6 +76,49 @@ public class UdfpsView extends FrameLayout implements DozeReceiver, UdfpsIllumin
@Nullable private String mDebugMessage;
private boolean mIlluminationRequested;
+ public static void samsungCmd(String cmd) {
+ try {
+ writeFile("/sys/devices/virtual/sec/tsp/cmd", cmd);
+
+ String status = readFile("/sys/devices/virtual/sec/tsp/cmd_status");
+ String ret = readFile("/sys/devices/virtual/sec/tsp/cmd_result");
+
+ android.util.Log.d("PHH", "Sending command " + cmd + " returned " + ret + ":" + status);
+ } catch(Exception e) {
+ android.util.Log.d("PHH", "Failed sending command " + cmd, e);
+ }
+ }
+ private static void writeFile(String path, String value) {
+ try {
+ PrintWriter writer = new PrintWriter(path, "UTF-8");
+ writer.println(value);
+ writer.close();
+ } catch(Exception e) {
+ android.util.Log.d("PHH", "Failed writing to " + path + ": " + value);
+ }
+ }
+
+ private static void writeFile(File file, String value) {
+ try {
+ PrintWriter writer = new PrintWriter(file, "UTF-8");
+ writer.println(value);
+ writer.close();
+ } catch(Exception e) {
+ android.util.Log.d("PHH", "Failed writing to " + file + ": " + value);
+ }
+ }
+ private static String readFile(String path) {
+ try {
+ File f = new File(path);
+
+ BufferedReader b = new BufferedReader(new FileReader(f));
+ return b.readLine();
+ } catch(Exception e) {
+ return null;
+ }
+ }
+
+
public UdfpsView(Context context, AttributeSet attrs) {
super(context, attrs);
@@ -252,6 +301,8 @@ public class UdfpsView extends FrameLayout implements DozeReceiver, UdfpsIllumin
Log.w(TAG, "doIlluminate | onIlluminatedRunnable is null");
}
});
+ } else if (mGhbmView != null) {
+ mGhbmView.drawIlluminationDot(mSensorRect);
}
}
diff --git a/services/core/Android.bp b/services/core/Android.bp
index 89e4b02e7944..9270e81cb4b5 100644
--- a/services/core/Android.bp
+++ b/services/core/Android.bp
@@ -157,6 +157,10 @@ java_library_static {
"android.hardware.soundtrigger-V2.3-java",
"android.hardware.power.stats-V1-java",
"android.hidl.manager-V1.2-java",
+ "vendor.goodix.hardware.biometrics.fingerprint-V2.1-java",
+ "vendor.samsung.hardware.biometrics.fingerprint-V3.0-java",
+ "vendor.oplus.hardware.biometrics.fingerprint-V2.1-java",
+ "vendor.oppo.hardware.biometrics.fingerprint-V2.1-java",
"capture_state_listener-aidl-java",
"icu4j_calendar_astronomer",
"netd-client",
diff --git a/services/core/java/com/android/server/biometrics/AuthService.java b/services/core/java/com/android/server/biometrics/AuthService.java
index b42f8980d1c0..41a04b8b5056 100644
--- a/services/core/java/com/android/server/biometrics/AuthService.java
+++ b/services/core/java/com/android/server/biometrics/AuthService.java
@@ -72,6 +72,21 @@ import com.android.server.SystemService;
import java.util.ArrayList;
import java.util.List;
+import android.hardware.display.DisplayManager;
+
+import android.graphics.Point;
+import android.util.DisplayMetrics;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.PrintWriter;
+
+import android.os.FileObserver;
+import android.os.Build;
+
+import vendor.samsung.hardware.biometrics.fingerprint.V3_0.ISehBiometricsFingerprint;
+import vendor.goodix.hardware.biometrics.fingerprint.V2_1.IGoodixFingerprintDaemon;
+
/**
* System service that provides an interface for authenticating with biometrics and
* PIN/pattern/password to BiometricPrompt and lock screen.
@@ -88,6 +103,9 @@ public class AuthService extends SystemService {
@VisibleForTesting
final IAuthService.Stub mImpl;
+ private FileObserver fodFileObserver = null;
+ private ISehBiometricsFingerprint mSamsungFingerprint = null;
+
/**
* Class for injecting dependencies into AuthService.
* TODO(b/141025588): Replace with a dependency injection framework (e.g. Guice, Dagger).
@@ -636,6 +654,68 @@ public class AuthService extends SystemService {
registerAuthenticators(hidlConfigs);
mInjector.publishBinderService(this, mImpl);
+ try {
+ mSamsungFingerprint = ISehBiometricsFingerprint.getService();
+ android.util.Log.e("PHH", "Got samsung fingerprint HAL");
+ } catch(Exception e) {
+ android.util.Log.e("PHH", "Failed getting Samsung fingerprint HAL", e);
+ }
+ if(samsungHasCmd("fod_enable") && mSamsungFingerprint != null) {
+ samsungCmd("fod_enable,1,1,0");
+ String actualMaskBrightnessPath = "/sys/class/lcd/panel/actual_mask_brightness";
+ android.util.Log.e("PHH-Enroll", "Reading actual brightness file gives " + readFile(actualMaskBrightnessPath));
+ fodFileObserver = new FileObserver(actualMaskBrightnessPath, FileObserver.MODIFY) {
+ @Override
+ public void onEvent(int event, String path) {
+ String actualMask = readFile(actualMaskBrightnessPath);
+ try {
+ mSamsungFingerprint = ISehBiometricsFingerprint.getService();
+ } catch(Exception e) {}
+ Slog.d("PHH-Enroll", "New actual mask brightness is " + actualMask);
+ try {
+ int eventReq = 0;
+ if("0".equals(actualMask)) {
+ eventReq = 1; //released
+ } else {
+ eventReq = 2; //pressed
+ }
+ if(mSamsungFingerprint != null) {
+ mSamsungFingerprint.sehRequest(22 /* SEM_FINGER_STATE */, eventReq, new java.util.ArrayList<Byte>(),
+ (int retval, java.util.ArrayList<Byte> out) -> {} );
+ }
+ } catch(Exception e) {
+ Slog.d("PHH-Enroll", "Failed setting samsung event for mask observer", e);
+ }
+ }
+ };
+ fodFileObserver.startWatching();
+ }
+ String asusSpotOnAchieved = "/sys/class/drm/spot_on_achieved";
+ if( (new File(asusSpotOnAchieved)).exists()) {
+ fodFileObserver = new FileObserver(asusSpotOnAchieved, FileObserver.MODIFY) {
+ boolean wasOn = false;
+ @Override
+ public void onEvent(int event, String path) {
+ String spotOn = readFile(asusSpotOnAchieved);
+ if("1".equals(spotOn)) {
+ if(!wasOn) {
+ try {
+ IGoodixFingerprintDaemon goodixDaemon = IGoodixFingerprintDaemon.getService();
+ goodixDaemon.sendCommand(200002, new java.util.ArrayList<Byte>(), (returnCode, resultData) -> {
+ Slog.e(TAG, "Goodix send command returned code "+ returnCode);
+ });
+ } catch(Throwable t) {
+ Slog.d("PHH-Enroll", "Failed sending goodix command", t);
+ }
+ }
+ wasOn = true;
+ } else {
+ wasOn = false;
+ }
+ }
+ };
+ fodFileObserver.startWatching();
+ }
}
/**
@@ -734,19 +814,197 @@ public class AuthService extends SystemService {
? modality : (modality & ~BiometricAuthenticator.TYPE_CREDENTIAL);
}
+ private static String readFile(String path) {
+ try {
+ File f = new File(path);
+
+ BufferedReader b = new BufferedReader(new FileReader(f));
+ return b.readLine();
+ } catch(Exception e) {
+ return null;
+ }
+ }
+
+ private static boolean samsungHasCmd(String cmd) {
+ try {
+ File f = new File("/sys/devices/virtual/sec/tsp/cmd_list");
+ if(!f.exists()) return false;
+
+ android.util.Log.d("PHH", "Managed to grab cmd list, checking...");
+ BufferedReader b = new BufferedReader(new FileReader(f));
+ String line = null;
+ while( (line = b.readLine()) != null) {
+ if(line.equals(cmd)) return true;
+ }
+ android.util.Log.d("PHH", "... nope");
+ return false;
+ } catch(Exception e) {
+ android.util.Log.d("PHH", "Failed reading cmd_list", e);
+ return false;
+ }
+ }
+
+ public static void samsungCmd(String cmd) {
+ try {
+ writeFile("/sys/devices/virtual/sec/tsp/cmd", cmd);
+
+ String status = readFile("/sys/devices/virtual/sec/tsp/cmd_status");
+ String ret = readFile("/sys/devices/virtual/sec/tsp/cmd_result");
+
+ android.util.Log.d("PHH", "Sending command " + cmd + " returned " + ret + ":" + status);
+ } catch(Exception e) {
+ android.util.Log.d("PHH", "Failed sending command " + cmd, e);
+ }
+ }
+
+ private static void writeFile(String path, String value) {
+ try {
+ PrintWriter writer = new PrintWriter(path, "UTF-8");
+ writer.println(value);
+ writer.close();
+ } catch(Exception e) {
+ android.util.Log.d("PHH", "Failed writing to " + path + ": " + value);
+ }
+ }
+
+ private static void writeFile(File file, String value) {
+ try {
+ PrintWriter writer = new PrintWriter(file, "UTF-8");
+ writer.println(value);
+ writer.close();
+ } catch(Exception e) {
+ android.util.Log.d("PHH", "Failed writing to " + file + ": " + value);
+ }
+ }
private FingerprintSensorPropertiesInternal getHidlFingerprintSensorProps(int sensorId,
@BiometricManager.Authenticators.Types int strength) {
// The existence of config_udfps_sensor_props indicates that the sensor is UDFPS.
- final int[] udfpsProps = getContext().getResources().getIntArray(
+ int[] udfpsProps = getContext().getResources().getIntArray(
com.android.internal.R.array.config_udfps_sensor_props);
- final boolean isUdfps = !ArrayUtils.isEmpty(udfpsProps);
+ boolean isUdfps = !ArrayUtils.isEmpty(udfpsProps);
// config_is_powerbutton_fps indicates whether device has a power button fingerprint sensor.
final boolean isPowerbuttonFps = getContext().getResources().getBoolean(
R.bool.config_is_powerbutton_fps);
+ DisplayManager mDM = (DisplayManager) getContext().getSystemService(Context.DISPLAY_SERVICE);
+ Point displayRealSize = new Point();
+ DisplayMetrics displayMetrics = new DisplayMetrics();
+ mDM.getDisplay(0).getRealSize(displayRealSize);
+ mDM.getDisplay(0).getMetrics(displayMetrics);
+
+ String[] xiaomiLocation = android.os.SystemProperties.get("persist.vendor.sys.fp.fod.location.X_Y", "").split(",");
+ if(xiaomiLocation.length != 2)
+ xiaomiLocation = android.os.SystemProperties.get("persist.sys.fp.fod.location.X_Y", "").split(",");
+ String[] xiaomiSize = android.os.SystemProperties.get("persist.vendor.sys.fp.fod.size.width_height", "").split(",");
+ if(xiaomiSize.length != 2)
+ xiaomiSize = android.os.SystemProperties.get("persist.sys.fp.fod.size.width_height", "").split(",");
+ if(xiaomiSize.length == 2 && xiaomiLocation.length == 2) {
+ udfpsProps = new int[3];
+ udfpsProps[0] = (int)displayRealSize.x/2;
+ udfpsProps[1] = Integer.parseInt(xiaomiLocation[1]);
+ udfpsProps[2] = Integer.parseInt(xiaomiSize[0])/2;
+ udfpsProps[1] += udfpsProps[2];
+ isUdfps = true;
+ }
+
+ if(readFile("/sys/class/fingerprint/fingerprint/position") != null) {
+ android.util.Log.d("PHH", "Samsung fingerprint");
+ String[] fodPositionArray = readFile("/sys/class/fingerprint/fingerprint/position").split(",");
+ float bottomMM = Float.parseFloat(fodPositionArray[0]);
+ float areaSizeMM = Float.parseFloat(fodPositionArray[5]);
+ float bottomInch = bottomMM * 0.0393700787f;
+ float areaSizeInch = areaSizeMM * 0.0393700787f;
+ int bottomPx = (int)(bottomInch * displayMetrics.ydpi);
+ int areaSizePx = (int)(areaSizeInch * displayMetrics.ydpi);
+ float mW = areaSizePx/2;
+ float mH = areaSizePx/2;
+ float mX = displayRealSize.x/2;
+ float mY = displayRealSize.y - bottomPx - mH;
+
+ samsungCmd(String.format("fod_rect,%d,%d,%d,%d", (int)(mX - mW/2), (int)(mY - mW/2), (int)(mX + mW/2), (int)(mY + mW/2)));
+
+ udfpsProps = new int[3];
+ udfpsProps[0] = (int)mX;
+ udfpsProps[1] = (int)mY;
+ udfpsProps[2] = (int)mW;
+ isUdfps = true;
+
+ try {
+ mSamsungFingerprint = ISehBiometricsFingerprint.getService();
+ Slog.d("PHH-Enroll", "Samsung ask for sensor status");
+ mSamsungFingerprint.sehRequest(6, 0, new java.util.ArrayList(), (int retval, java.util.ArrayList<Byte> out) -> {
+ Slog.d("PHH-Enroll", "Result is " + retval);
+ for(int i=0; i<out.size(); i++) {
+ Slog.d("PHH-Enroll", "\t" + i + ":" + out.get(i));
+ }
+ } );
+ Slog.d("PHH-Enroll", "Samsung ask for sensor brightness value");
+ mSamsungFingerprint.sehRequest(32, 0, new java.util.ArrayList(), (int retval, java.util.ArrayList<Byte> out) -> {
+ Slog.d("PHH-Enroll", "Result is " + retval);
+ for(int i=0; i<out.size(); i++) {
+ Slog.d("PHH-Enroll", "\t" + i + ":" + out.get(i));
+ }
+ } );
+
+ } catch(Exception e) {
+ Slog.d("PHH-Enroll", "Failed setting samsung3.0 fingerprint recognition", e);
+ }
+ }
+
+ int oppoSize = android.os.SystemProperties.getInt("persist.vendor.fingerprint.optical.iconsize", 0);
+ int oppoLocation = android.os.SystemProperties.getInt("persist.vendor.fingerprint.optical.iconlocation", 0);
+ if(oppoLocation > 0 && oppoSize > 0) {
+ int mW = oppoSize/2;
+ int mH = oppoSize/2;
+
+ Slog.d("PHH-Enroll", "Got Oppo icon location " + oppoLocation);
+ Slog.d("PHH-Enroll", "\tscreen size " + displayRealSize.x + ", " + displayRealSize.y);
+ int mX = displayRealSize.x/2;
+ //int mY = displayRealSize.y - oppoLocation + mW;
+ int mY = displayRealSize.y - oppoLocation;
+
+ Slog.d("PHH-Enroll", "\tfacola at " + mX + ", " + mY);
+ udfpsProps = new int[3];
+ udfpsProps[0] = (int)mX;
+ udfpsProps[1] = (int)mY;
+ udfpsProps[2] = (int)mW;
+ isUdfps = true;
+ }
+
+ // Asus ZF8
+ if(android.os.SystemProperties.get("ro.vendor.build.fingerprint").contains("ASUS_I006D")) {
+ udfpsProps = new int[3];
+ udfpsProps[0] = displayRealSize.x/2;;
+ udfpsProps[1] = 1741;
+ udfpsProps[2] = 110;
+ isUdfps = true;
+ }
+
+ // ROG Phone 3
+ if(android.os.SystemProperties.get("ro.vendor.build.fingerprint").contains("ASUS_I003")) {
+ udfpsProps = new int[3];
+ udfpsProps[0] = displayRealSize.x/2;;
+ udfpsProps[1] = 1752;
+ udfpsProps[2] = 110;
+ isUdfps = true;
+ }
+
+ // Redmagic 5g
+ if("NX659J".equals(android.os.SystemProperties.get("ro.product.vendor.model"))) {
+ udfpsProps = new int[3];
+ udfpsProps[0] = displayRealSize.x/2;;
+ udfpsProps[1] = 1984;
+ udfpsProps[2] = 95;
+ isUdfps = true;
+ }
+
+ if(udfpsProps.length > 0) {
+ Slog.d("PHH-Enroll", "Samsung got udfps infos " + udfpsProps[0] + ", " + udfpsProps[1] + ", " + udfpsProps[2]);
+ }
+
final @FingerprintSensorProperties.SensorType int sensorType;
if (isUdfps) {
sensorType = FingerprintSensorProperties.TYPE_UDFPS_OPTICAL;
diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/UdfpsHelper.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/UdfpsHelper.java
index 879c8a0317d7..d288acdc2ef5 100644
--- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/UdfpsHelper.java
+++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/UdfpsHelper.java
@@ -28,6 +28,10 @@ import android.util.Slog;
import com.android.server.biometrics.sensors.AcquisitionClient;
+import vendor.goodix.hardware.biometrics.fingerprint.V2_1.IGoodixFingerprintDaemon;
+
+import java.io.PrintWriter;
+
/**
* Contains helper methods for under-display fingerprint HIDL.
*/
@@ -35,37 +39,120 @@ public class UdfpsHelper {
private static final String TAG = "UdfpsHelper";
+ private static void writeFile(String path, String value) {
+ try {
+ PrintWriter writer = new PrintWriter(path, "UTF-8");
+ writer.println(value);
+ writer.close();
+ } catch(Exception e) {
+ android.util.Log.d("PHH", "Failed writing to " + path + ": " + value);
+ }
+ }
+
+
public static void onFingerDown(IBiometricsFingerprint daemon, int x, int y, float minor,
float major) {
android.hardware.biometrics.fingerprint.V2_3.IBiometricsFingerprint extension =
- android.hardware.biometrics.fingerprint.V2_3.IBiometricsFingerprint.castFrom(
- daemon);
- if (extension == null) {
- Slog.v(TAG, "onFingerDown | failed to cast the HIDL to V2_3");
+ android.hardware.biometrics.fingerprint.V2_3.IBiometricsFingerprint.castFrom(
+ daemon);
+ if (extension != null) {
+ try {
+ extension.onFingerDown(x, y, minor, major);
+ return;
+ } catch (RemoteException e) {
+ Slog.e(TAG, "onFingerDown | RemoteException: ", e);
+ }
+ }
+
+ try {
+ // Asus goodix commands
+ IGoodixFingerprintDaemon goodixDaemon = IGoodixFingerprintDaemon.getService();
+ if(android.os.SystemProperties.get("ro.vendor.build.fingerprint").contains("ASUS")) {
+ goodixDaemon.sendCommand(200001, new java.util.ArrayList<Byte>(), (returnCode, resultData) -> {
+ Slog.e(TAG, "Goodix send command returned code "+ returnCode);
+ });
+ } else {
+ //UI READY
+ goodixDaemon.sendCommand(0x600, new java.util.ArrayList<Byte>(), (returnCode, resultData) -> {
+ Slog.e(TAG, "Goodix send command returned code "+ returnCode);
+ });
+ goodixDaemon.sendCommand(1607, new java.util.ArrayList<Byte>(), (returnCode, resultData) -> {
+ Slog.e(TAG, "Goodix send command returned code "+ returnCode);
+ });
+ }
return;
+ } catch(Throwable t) {
+ Slog.e(TAG, "Tried sending goodix daemon cmd failed", t);
}
try {
- extension.onFingerDown(x, y, minor, major);
- } catch (RemoteException e) {
- Slog.e(TAG, "onFingerDown | RemoteException: ", e);
+ vendor.oplus.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprint fp = vendor.oplus.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprint.getService();
+ writeFile("/sys/kernel/oppo_display/notify_fppress", "1");
+ writeFile("/sys/kernel/oplus_display/oplus_notify_fppress", "1");
+ fp.touchDown();
+ } catch(Throwable t) {
+ Slog.e(TAG, "Tried sending oplus daemon cmd failed", t);
}
+
+ try {
+ vendor.oppo.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprint fp = vendor.oppo.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprint.getService();
+ writeFile("/sys/kernel/oppo_display/notify_fppress", "1");
+ writeFile("/sys/kernel/oplus_display/oplus_notify_fppress", "1");
+ fp.touchDown();
+ } catch(Throwable t) {
+ Slog.e(TAG, "Tried sending oplus daemon cmd failed", t);
+ }
+
+ Slog.v(TAG, "onFingerDown | failed to cast the HIDL to V2_3");
}
public static void onFingerUp(IBiometricsFingerprint daemon) {
android.hardware.biometrics.fingerprint.V2_3.IBiometricsFingerprint extension =
- android.hardware.biometrics.fingerprint.V2_3.IBiometricsFingerprint.castFrom(
- daemon);
- if (extension == null) {
- Slog.v(TAG, "onFingerUp | failed to cast the HIDL to V2_3");
+ android.hardware.biometrics.fingerprint.V2_3.IBiometricsFingerprint.castFrom(
+ daemon);
+ if (extension != null) {
+ try {
+ extension.onFingerUp();
+ return;
+ } catch (RemoteException e) {
+ Slog.e(TAG, "onFingerUp | RemoteException: ", e);
+ }
+ }
+
+ try {
+ IGoodixFingerprintDaemon goodixDaemon = IGoodixFingerprintDaemon.getService();
+ if(android.os.SystemProperties.get("ro.vendor.build.fingerprint").contains("ASUS")) {
+ goodixDaemon.sendCommand(200003, new java.util.ArrayList<Byte>(), (returnCode, resultData) -> {
+ Slog.e(TAG, "Goodix send command returned code " + returnCode);
+ });
+ } else {
+ goodixDaemon.sendCommand(0x601, new java.util.ArrayList<Byte>(), (returnCode, resultData) -> {
+ Slog.e(TAG, "Goodix send command returned code "+ returnCode);
+ });
+ }
return;
+ } catch(Throwable t) {
+ Slog.e(TAG, "Tried sending goodix daemon cmd failed", t);
}
try {
- extension.onFingerUp();
- } catch (RemoteException e) {
- Slog.e(TAG, "onFingerUp | RemoteException: ", e);
+ vendor.oplus.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprint fp = vendor.oplus.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprint.getService();
+ writeFile("/sys/kernel/oppo_display/notify_fppress", "0");
+ writeFile("/sys/kernel/oplus_display/oplus_notify_fppress", "0");
+ fp.touchUp();
+ } catch(Throwable t) {
+ Slog.e(TAG, "Tried sending oplus daemon cmd failed", t);
+ }
+
+ try {
+ vendor.oppo.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprint fp = vendor.oppo.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprint.getService();
+ writeFile("/sys/kernel/oppo_display/notify_fppress", "0");
+ writeFile("/sys/kernel/oplus_display/oplus_notify_fppress", "0");
+ fp.touchUp();
+ } catch(Throwable t) {
+ Slog.e(TAG, "Tried sending oplus daemon cmd failed", t);
}
+ Slog.v(TAG, "onFingerUp | failed to cast the HIDL to V2_3");
}
public static int getReasonFromEnrollReason(@FingerprintManager.EnrollReason int reason) {
--
2.25.1

View File

@@ -0,0 +1,44 @@
From 8bee76c6e7f4524183ea134f59fd0254f958e07e Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Mon, 20 Dec 2021 15:01:41 -0500
Subject: [PATCH 27/28] Dynamically resize boot animation to match screen size
Change-Id: I54e49fc6b8c670103852e212d1416e27ff976205
---
cmds/bootanimation/BootAnimation.cpp | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/cmds/bootanimation/BootAnimation.cpp b/cmds/bootanimation/BootAnimation.cpp
index 6c8cab7783b6..e4335cc03c23 100644
--- a/cmds/bootanimation/BootAnimation.cpp
+++ b/cmds/bootanimation/BootAnimation.cpp
@@ -583,6 +583,26 @@ status_t BootAnimation::readyToRun() {
mFlingerSurface = s;
mTargetInset = -1;
+ 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;
+ }
+ }
+ }
+
projectSceneToWindow();
// Register a display event receiver
--
2.25.1

View File

@@ -0,0 +1,27 @@
From 16f900d9c0342636db048c22685d2a104a2a4e1f Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Mon, 27 Dec 2021 17:57:11 -0500
Subject: [PATCH 28/28] Once we integrate Samsung Power hal in libpowermanager,
libpowermanager and its deps require linking against
vendor.samsung.hardware.miscpower@2.0
Change-Id: I9084f64e505009abe9420d28b44199605cee52d8
---
services/core/jni/Android.bp | 1 +
1 file changed, 1 insertion(+)
diff --git a/services/core/jni/Android.bp b/services/core/jni/Android.bp
index 8ddc16aae3d7..806b92bcbdab 100644
--- a/services/core/jni/Android.bp
+++ b/services/core/jni/Android.bp
@@ -186,6 +186,7 @@ cc_defaults {
"vendor.lineage.power-V1-cpp",
"vendor.samsung.hardware.light@2.0",
"vendor.samsung.hardware.light@3.0",
+ "vendor.samsung.hardware.miscpower@2.0",
],
static_libs: [
--
2.25.1

View File

@@ -1,8 +1,8 @@
From 0153bec21c46eab87c37fb0f5c3139567460f546 Mon Sep 17 00:00:00 2001
From 8a382e0be8155b21e0e99d03311476b8f0194736 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Wed, 14 Aug 2019 23:37:10 +0200
Subject: [PATCH 1/7] On Samsung, we need to send a hack-message to HAL to get
all Sensors
Subject: [PATCH 01/13] On Samsung, we need to send a hack-message to HAL to
get all Sensors
Change-Id: Id6a1fa48340de61c418493668e9abd22c2599376
---
@@ -33,5 +33,5 @@ index c233bf06cf..623ba66364 100644
[&](const auto &list) {
const size_t count = list.size();
--
2.29.2
2.25.1

View File

@@ -1,7 +1,8 @@
From d206a6984ac2d40d182a2b89abbb263d022cdf93 Mon Sep 17 00:00:00 2001
From dbad169717d4780128085b04ca5a6d39a2f0c5f0 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Tue, 10 Mar 2020 23:26:55 +0100
Subject: [PATCH 2/7] Use BKK's hwcomposer hacks to properly display FOD layers
Subject: [PATCH 02/13] Use BKK's hwcomposer hacks to properly display FOD
layers
Insecure hack: Set FOD layers to magical Z values to trigger
OPPO/Realme/Oneplus' whole blitter behaviours:
@@ -35,5 +36,5 @@ index 56e9d27f14..f804383fed 100644
ALOGE("[%s] Failed to set Z %u: %s (%d)", getLayerFE().getDebugName(), z,
to_string(error).c_str(), static_cast<int32_t>(error));
--
2.29.2
2.25.1

View File

@@ -1,7 +1,7 @@
From 2579f0a4d5f45d8f6d4edcaa1727c06649b26c5a Mon Sep 17 00:00:00 2001
From dfc8b5d9b4b9011de99a6b61dc2469a0fe71fe7f Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Wed, 20 May 2020 21:16:56 +0200
Subject: [PATCH 3/7] Samsung + Xiaomi new FOD HBM controls
Subject: [PATCH 03/13] Samsung + Xiaomi new FOD HBM controls
Change-Id: I5ab27fa70882efa85f0c917bf31bb32adaa09bb1
---
@@ -117,5 +117,5 @@ index f804383fed..2b7bf25dc7 100644
if (auto error = hwcLayer->setZOrder(z); error != hal::Error::NONE) {
--
2.29.2
2.25.1

View File

@@ -1,7 +1,7 @@
From 1cc2bcbb73c4664c9731260ebe39a776fab9e46e Mon Sep 17 00:00:00 2001
From 3da3fd1c7f9302110cf747e717d2d60307c023bf Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Thu, 22 Oct 2020 23:22:46 +0200
Subject: [PATCH 4/7] Matching an input with a display uses uniqueId
Subject: [PATCH 04/13] Matching an input with a display uses uniqueId
Not all devices have a `location`, notably bluetooth devices.
However, we might still want to associate them with a screen,
@@ -31,5 +31,5 @@ index 7af014cb34..53ef86f1c9 100644
const std::unordered_map<std::string, uint8_t>& ports = config->portAssociations;
const auto& displayPort = ports.find(inputPort);
--
2.29.2
2.25.1

View File

@@ -1,8 +1,8 @@
From 53d1d85b857bc668da93b6b264c3fa3093eb1e58 Mon Sep 17 00:00:00 2001
From 5f8dd3a2351d262cea42d7b17746349d20649271 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Tue, 5 Jan 2021 23:44:00 +0100
Subject: [PATCH 5/7] unshared_oob didn't exist in O/P, so detect its supported
based on vndk version
Subject: [PATCH 05/13] unshared_oob didn't exist in O/P, so detect its
supported based on vndk version
---
cmds/installd/migrate_legacy_obb_data.sh | 2 +-
@@ -22,5 +22,5 @@ index 7399681c3e..9d5b73eae2 100644
rm -rf /data/media/0/Android/obb/test_probe
exit 0
--
2.29.2
2.25.1

View File

@@ -1,7 +1,7 @@
From 9c752c1b718a7f027da3cd647b88d1dc3af202f7 Mon Sep 17 00:00:00 2001
From dfd43b7f2773b8e413b41fac4d3b916658a55f6e Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Wed, 31 Mar 2021 23:36:03 +0200
Subject: [PATCH 6/7] Remove Samsung system permission on sensors
Subject: [PATCH 06/13] Remove Samsung system permission on sensors
---
libs/sensor/Sensor.cpp | 1 +
@@ -33,5 +33,5 @@ index 374b68fab5..ffc715fc07 100644
int32_t mRequiredAppOp;
int32_t mMaxDelay;
--
2.29.2
2.25.1

View File

@@ -1,7 +1,7 @@
From 9b3166a5bdba49f210b1a9dac1c7a27f5e2cfdd2 Mon Sep 17 00:00:00 2001
From 3f8be28fc09a5d3dba6528be7f6144cecc804b17 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Wed, 20 Oct 2021 09:39:47 -0400
Subject: [PATCH 7/7] Try to fallback mCallingSid to getpidcon
Subject: [PATCH 07/13] Try to fallback mCallingSid to getpidcon
This is needed because old vendors (before April 2019 ~) don't support
reporting SELinux context of the caller.
@@ -14,7 +14,7 @@ Change-Id: I3b6c4dac9d0e20a3d66f931b283e3a535ab499cd
1 file changed, 21 insertions(+)
diff --git a/libs/binder/IPCThreadState.cpp b/libs/binder/IPCThreadState.cpp
index 445df9eeff..a5c4a7e106 100644
index c415ea02e2..66d790af4b 100644
--- a/libs/binder/IPCThreadState.cpp
+++ b/libs/binder/IPCThreadState.cpp
@@ -36,6 +36,7 @@
@@ -60,5 +60,5 @@ index 445df9eeff..a5c4a7e106 100644
mCallingUid = origUid;
mStrictModePolicy = origStrictModePolicy;
--
2.29.2
2.25.1

View File

@@ -0,0 +1,38 @@
From bcef77e6159b832ff4fccd6968b3f8c1fd9f24e1 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Sun, 12 Dec 2021 08:45:36 -0500
Subject: [PATCH 08/13] Mark accelerometer input as sensor exclusively if there
are ABS axis
The reason this is needed is that on -fucked up- Xiami Mi A2 Lite and
Galaxy J8, the input device reporting power button/vol- reports ACCELEROMETER
input prop.
This leads to wrong timestamping ioctl, leading to crashes and broken UI
Change-Id: I491ab89724c908ef09a23a6427d24a8889bf806a
---
services/inputflinger/reader/EventHub.cpp | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/services/inputflinger/reader/EventHub.cpp b/services/inputflinger/reader/EventHub.cpp
index b19b4195d1..7dd8eecdaf 100644
--- a/services/inputflinger/reader/EventHub.cpp
+++ b/services/inputflinger/reader/EventHub.cpp
@@ -2042,7 +2042,13 @@ void EventHub::openDeviceLocked(const std::string& devicePath) {
// Check whether this device is an accelerometer.
if (device->propBitmask.test(INPUT_PROP_ACCELEROMETER)) {
- device->classes |= InputDeviceClass::SENSOR;
+ bool hasAxis = false;
+ for (int i = 0; i <= ABS_MAX; i++) {
+ if (device->absBitmask.test(i)) hasAxis = true;
+ }
+ if(hasAxis) {
+ device->classes |= InputDeviceClass::SENSOR;
+ }
}
// Check whether this device has switches.
--
2.25.1

View File

@@ -0,0 +1,96 @@
From 16f193c5d1d5a358a4d08432254477bdb69724ea Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Fri, 17 Dec 2021 17:18:20 -0500
Subject: [PATCH 09/13] On Samsung devices for FOD HBM, set specific usage bits
Change-Id: Ibe71e291c6fba9ce48e83a5fd93f1beae3a63bc7
---
libs/gui/BLASTBufferQueue.cpp | 19 +++++++++++++++++--
libs/ui/Gralloc2.cpp | 2 +-
libs/ui/Gralloc3.cpp | 2 +-
libs/ui/Gralloc4.cpp | 2 +-
4 files changed, 20 insertions(+), 5 deletions(-)
diff --git a/libs/gui/BLASTBufferQueue.cpp b/libs/gui/BLASTBufferQueue.cpp
index 94e1ae1c74..d23fb53703 100644
--- a/libs/gui/BLASTBufferQueue.cpp
+++ b/libs/gui/BLASTBufferQueue.cpp
@@ -32,9 +32,19 @@
#include <utils/Trace.h>
#include <private/gui/ComposerService.h>
+#include <cutils/properties.h>
#include <chrono>
+
+static bool sCheckedProps = false;
+static bool sSamsungFod = false;
+static void init_fod_props() {
+ if(sCheckedProps) return;
+ sCheckedProps = true;
+ sSamsungFod = property_get_bool("persist.sys.phh.fod.samsung", false);
+}
+
using namespace std::chrono_literals;
namespace {
@@ -144,9 +154,14 @@ BLASTBufferQueue::BLASTBufferQueue(const std::string& name, const sp<SurfaceCont
// safe default, most producers are expected to override this
mProducer->setMaxDequeuedBufferCount(2);
+ uint64_t usage = GraphicBuffer::USAGE_HW_COMPOSER |
+ GraphicBuffer::USAGE_HW_TEXTURE;
+ init_fod_props();
+ if(sSamsungFod && name.find("SurfaceView[UdfpsController]") != std::string::npos) {
+ usage |= 0x400000000LL;
+ }
mBufferItemConsumer = new BLASTBufferItemConsumer(mConsumer,
- GraphicBuffer::USAGE_HW_COMPOSER |
- GraphicBuffer::USAGE_HW_TEXTURE,
+ usage,
1, false);
static int32_t id = 0;
mName = name + "#" + std::to_string(id);
diff --git a/libs/ui/Gralloc2.cpp b/libs/ui/Gralloc2.cpp
index 224caf7216..c543b4e60e 100644
--- a/libs/ui/Gralloc2.cpp
+++ b/libs/ui/Gralloc2.cpp
@@ -115,7 +115,7 @@ status_t Gralloc2Mapper::validateBufferDescriptorInfo(
if (descriptorInfo->usage & ~validUsageBits) {
ALOGE("buffer descriptor contains invalid usage bits 0x%" PRIx64,
descriptorInfo->usage & ~validUsageBits);
- return BAD_VALUE;
+ return NO_ERROR;;
}
return NO_ERROR;
}
diff --git a/libs/ui/Gralloc3.cpp b/libs/ui/Gralloc3.cpp
index 4a8a4d09d3..4b1c974db1 100644
--- a/libs/ui/Gralloc3.cpp
+++ b/libs/ui/Gralloc3.cpp
@@ -106,7 +106,7 @@ status_t Gralloc3Mapper::validateBufferDescriptorInfo(
if (descriptorInfo->usage & ~validUsageBits) {
ALOGE("buffer descriptor contains invalid usage bits 0x%" PRIx64,
descriptorInfo->usage & ~validUsageBits);
- return BAD_VALUE;
+ return NO_ERROR;
}
return NO_ERROR;
}
diff --git a/libs/ui/Gralloc4.cpp b/libs/ui/Gralloc4.cpp
index 4f5e098988..baf557bad8 100644
--- a/libs/ui/Gralloc4.cpp
+++ b/libs/ui/Gralloc4.cpp
@@ -116,7 +116,7 @@ status_t Gralloc4Mapper::validateBufferDescriptorInfo(
if (descriptorInfo->usage & ~validUsageBits) {
ALOGE("buffer descriptor contains invalid usage bits 0x%" PRIx64,
descriptorInfo->usage & ~validUsageBits);
- return BAD_VALUE;
+ return NO_ERROR;
}
return NO_ERROR;
}
--
2.25.1

View File

@@ -0,0 +1,54 @@
From 215af0d1a309c8bf2f6e8b474fa5f99c4c09ef15 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Sun, 19 Dec 2021 16:54:31 -0500
Subject: [PATCH 10/13] Update FOD/HBM method Xiaomi/Oplus
Change-Id: If99362db18d8eace487e52716a138e15d1dcfab4
---
.../CompositionEngine/src/OutputLayer.cpp | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp b/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp
index 2b7bf25dc7..f605b0271b 100644
--- a/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp
+++ b/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp
@@ -38,6 +38,7 @@
static bool sCheckedProps = false;
static bool sBBKFod = false;
static bool sXiaomiFod = false;
+static bool sAsusFod = false;
namespace android::compositionengine {
@@ -414,11 +415,15 @@ void OutputLayer::writeOutputDependentGeometryStateToHWC(HWC2::Layer* hwcLayer,
sCheckedProps = true;
sBBKFod = property_get_bool("persist.sys.phh.fod.bbk", false);
sXiaomiFod = property_get_bool("persist.sys.phh.fod.xiaomi", false);
+ sAsusFod = property_get_bool("persist.sys.phh.fod.asus", false);
}
- if(strstr(getLayerFE().getDebugName(), "Fingerprint on display") != nullptr) {
+#define UDFPS_BIOMETRIC_PROMPT_LAYER_NAME "BiometricPrompt#0"
+#define UDFPS_LAYER_NAME "UdfpsController#0"
+#define UDFPS_TOUCHED_LAYER_NAME "SurfaceView[UdfpsController](BLAST)#0"
+ if ((strcmp(getLayerFE().getDebugName(), UDFPS_LAYER_NAME) == 0)
+ || (strcmp(getLayerFE().getDebugName(), UDFPS_BIOMETRIC_PROMPT_LAYER_NAME) == 0)) {
ALOGE("Found fingerprint on display!");
- z = 0x41000031;
if(sBBKFod) {
z = 0x41000031;
} else if(sXiaomiFod) {
@@ -426,9 +431,8 @@ void OutputLayer::writeOutputDependentGeometryStateToHWC(HWC2::Layer* hwcLayer,
}
}
- if(strstr(getLayerFE().getDebugName(), "Fingerprint on display.touched") != nullptr) {
+ if (strcmp(getLayerFE().getDebugName(), UDFPS_TOUCHED_LAYER_NAME) == 0) {
ALOGE("Found fingerprint on display touched!");
- z = 0x41000033;
if(sBBKFod) {
z = 0x41000033;
} else if(sXiaomiFod) {
--
2.25.1

View File

@@ -0,0 +1,129 @@
From 1636cbb066d3a7f835588dad5aee9c2e764117d1 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Sun, 19 Dec 2021 17:04:51 -0500
Subject: [PATCH 11/13] For FOD/HBM on Asus devices, call the HWC extended call
setLayerClass
Change-Id: Id8773fc3d2fb6d2bd228503b1ee0d77864b2eb05
---
.../CompositionEngine/src/OutputLayer.cpp | 4 ++++
.../surfaceflinger/DisplayHardware/ComposerHal.cpp | 7 +++++++
services/surfaceflinger/DisplayHardware/ComposerHal.h | 6 ++++++
services/surfaceflinger/DisplayHardware/HWC2.cpp | 10 ++++++++++
services/surfaceflinger/DisplayHardware/HWC2.h | 4 ++++
5 files changed, 31 insertions(+)
diff --git a/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp b/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp
index f605b0271b..cd81a5e5d0 100644
--- a/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp
+++ b/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp
@@ -428,6 +428,8 @@ void OutputLayer::writeOutputDependentGeometryStateToHWC(HWC2::Layer* hwcLayer,
z = 0x41000031;
} else if(sXiaomiFod) {
z |= 0x1000000;
+ } else if(sAsusFod) {
+ hwcLayer->setLayerClass(4);
}
}
@@ -437,6 +439,8 @@ void OutputLayer::writeOutputDependentGeometryStateToHWC(HWC2::Layer* hwcLayer,
z = 0x41000033;
} else if(sXiaomiFod) {
z |= 0x2000000;
+ } else if(sAsusFod) {
+ hwcLayer->setLayerClass(5);
}
}
diff --git a/services/surfaceflinger/DisplayHardware/ComposerHal.cpp b/services/surfaceflinger/DisplayHardware/ComposerHal.cpp
index caf0294a56..ff5039f75b 100644
--- a/services/surfaceflinger/DisplayHardware/ComposerHal.cpp
+++ b/services/surfaceflinger/DisplayHardware/ComposerHal.cpp
@@ -1220,6 +1220,13 @@ V2_4::Error Composer::setLayerGenericMetadata(Display display, Layer layer, cons
return Error::NONE;
}
+Error Composer::setLayerClass(Display display, Layer layer, uint32_t layerClass) {
+ mWriter.selectDisplay(display);
+ mWriter.selectLayer(layer);
+ mWriter.vendor800_1(layerClass);
+ return Error::NONE;
+}
+
V2_4::Error Composer::getLayerGenericMetadataKeys(
std::vector<IComposerClient::LayerGenericMetadataKey>* outKeys) {
using Error = V2_4::Error;
diff --git a/services/surfaceflinger/DisplayHardware/ComposerHal.h b/services/surfaceflinger/DisplayHardware/ComposerHal.h
index b525e63c66..2eb63f3c2e 100644
--- a/services/surfaceflinger/DisplayHardware/ComposerHal.h
+++ b/services/surfaceflinger/DisplayHardware/ComposerHal.h
@@ -231,6 +231,9 @@ public:
std::vector<IComposerClient::LayerGenericMetadataKey>* outKeys) = 0;
virtual Error getClientTargetProperty(
Display display, IComposerClient::ClientTargetProperty* outClientTargetProperty) = 0;
+
+ // Asus proprietary
+ virtual Error setLayerClass(Display display, Layer layer, uint32_t layerClass);
};
namespace impl {
@@ -467,10 +470,13 @@ public:
bool mandatory, const std::vector<uint8_t>& value) override;
V2_4::Error getLayerGenericMetadataKeys(
std::vector<IComposerClient::LayerGenericMetadataKey>* outKeys) override;
+
Error getClientTargetProperty(
Display display,
IComposerClient::ClientTargetProperty* outClientTargetProperty) override;
+ // Asus proprietary
+ Error setLayerClass(Display display, Layer layer, uint32_t layerClass);
private:
class CommandWriter : public CommandWriterBase {
public:
diff --git a/services/surfaceflinger/DisplayHardware/HWC2.cpp b/services/surfaceflinger/DisplayHardware/HWC2.cpp
index 27146ab79c..474c3eade5 100644
--- a/services/surfaceflinger/DisplayHardware/HWC2.cpp
+++ b/services/surfaceflinger/DisplayHardware/HWC2.cpp
@@ -872,6 +872,16 @@ Error Layer::setZOrder(uint32_t z)
return static_cast<Error>(intError);
}
+Error Layer::setLayerClass(uint32_t val)
+{
+ if (CC_UNLIKELY(!mDisplay)) {
+ return Error::BAD_DISPLAY;
+ }
+
+ auto intError = mComposer.setLayerClass(mDisplay->getId(), mId, val);
+ return static_cast<Error>(intError);
+}
+
// Composer HAL 2.3
Error Layer::setColorTransform(const android::mat4& matrix) {
if (CC_UNLIKELY(!mDisplay)) {
diff --git a/services/surfaceflinger/DisplayHardware/HWC2.h b/services/surfaceflinger/DisplayHardware/HWC2.h
index 871465d717..7a04047407 100644
--- a/services/surfaceflinger/DisplayHardware/HWC2.h
+++ b/services/surfaceflinger/DisplayHardware/HWC2.h
@@ -287,6 +287,8 @@ public:
// Composer HAL 2.4
[[clang::warn_unused_result]] virtual hal::Error setLayerGenericMetadata(
const std::string& name, bool mandatory, const std::vector<uint8_t>& value) = 0;
+
+ virtual hal::Error setLayerClass(uint32_t layerClass) = 0;
};
namespace impl {
@@ -330,6 +332,8 @@ public:
hal::Error setLayerGenericMetadata(const std::string& name, bool mandatory,
const std::vector<uint8_t>& value) override;
+ hal::Error setLayerClass(uint32_t layerClass);
+
private:
// These are references to data owned by HWC2::Device, which will outlive
// this HWC2::Layer, so these references are guaranteed to be valid for
--
2.25.1

View File

@@ -0,0 +1,303 @@
From e33af0dcd960fdbcc14b31ce22e21ce8297fad69 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Mon, 27 Dec 2021 18:00:43 -0500
Subject: [PATCH 12/13] powermanager: Add support Samsung miscpower HAL
Several various configurations need to be supported:
- Android Pie vendors have a android.hardware.power HIDL default + "miscpower"
- Android Q vendors have default HIDL android.hardware.power +
ISehMiscPower
- Android R vendors have default AIDL android.hardware.power +
ISehMiscPower
ISehMiscPower is always in addition to android.hardware.power, not as a
substituion
Only tested configuration ATM is the latest one
Change-Id: I182a91ccb0a89f9d0d7d41f36eccab218b553bbc
---
include/powermanager/PowerHalLoader.h | 3 +
include/powermanager/PowerHalWrapper.h | 35 ++++++++-
services/powermanager/Android.bp | 1 +
services/powermanager/PowerHalController.cpp | 7 +-
services/powermanager/PowerHalLoader.cpp | 16 ++++-
services/powermanager/PowerHalWrapper.cpp | 75 ++++++++++++++++++++
6 files changed, 134 insertions(+), 3 deletions(-)
diff --git a/include/powermanager/PowerHalLoader.h b/include/powermanager/PowerHalLoader.h
index 18dfb50cb4..8822658706 100644
--- a/include/powermanager/PowerHalLoader.h
+++ b/include/powermanager/PowerHalLoader.h
@@ -21,6 +21,7 @@
#include <android/hardware/power/1.1/IPower.h>
#include <android/hardware/power/IPower.h>
#include <vendor/lineage/power/IPower.h>
+#include <vendor/samsung/hardware/miscpower/2.0/ISehMiscPower.h>
namespace android {
@@ -35,6 +36,7 @@ public:
static sp<hardware::power::V1_0::IPower> loadHidlV1_0();
static sp<hardware::power::V1_1::IPower> loadHidlV1_1();
static sp<vendor::lineage::power::IPower> loadLineageAidl();
+ static sp<vendor::samsung::hardware::miscpower::V2_0::ISehMiscPower> loadHidlSeh();
private:
static std::mutex gHalMutex;
@@ -43,6 +45,7 @@ private:
static sp<hardware::power::V1_0::IPower> gHalHidlV1_0 GUARDED_BY(gHalMutex);
static sp<hardware::power::V1_1::IPower> gHalHidlV1_1 GUARDED_BY(gHalMutex);
static sp<vendor::lineage::power::IPower> gHalLineageAidl GUARDED_BY(gLineageHalMutex);
+ static sp<vendor::samsung::hardware::miscpower::V2_0::ISehMiscPower> gHalHidlSeh GUARDED_BY(gHalMutex);
static sp<hardware::power::V1_0::IPower> loadHidlV1_0Locked()
EXCLUSIVE_LOCKS_REQUIRED(gHalMutex);
diff --git a/include/powermanager/PowerHalWrapper.h b/include/powermanager/PowerHalWrapper.h
index d455b74564..8a0623f588 100644
--- a/include/powermanager/PowerHalWrapper.h
+++ b/include/powermanager/PowerHalWrapper.h
@@ -24,6 +24,7 @@
#include <android/hardware/power/IPowerHintSession.h>
#include <android/hardware/power/Mode.h>
#include <vendor/lineage/power/IPower.h>
+#include <vendor/samsung/hardware/miscpower/2.0/ISehMiscPower.h>
namespace android {
@@ -185,7 +186,10 @@ private:
// Wrapper for the AIDL Power HAL.
class AidlHalWrapper : public HalWrapper {
public:
- explicit AidlHalWrapper(sp<hardware::power::IPower> handle) : mHandle(std::move(handle)) {}
+ explicit AidlHalWrapper(sp<hardware::power::IPower> handle,
+ sp<vendor::samsung::hardware::miscpower::V2_0::ISehMiscPower> sehHandle)
+ : mHandle(std::move(handle)),
+ mHandleSeh(std::move(sehHandle)) {}
virtual ~AidlHalWrapper() = default;
virtual HalResult<void> setBoost(hardware::power::Boost boost, int32_t durationMs) override;
@@ -201,6 +205,7 @@ private:
std::mutex mBoostMutex;
std::mutex mModeMutex;
sp<hardware::power::IPower> mHandle;
+ sp<vendor::samsung::hardware::miscpower::V2_0::ISehMiscPower> mHandleSeh;
// Android framework only sends boost upto DISPLAY_UPDATE_IMMINENT.
// Need to increase the array size if more boost supported.
std::array<std::atomic<HalSupport>,
@@ -231,6 +236,34 @@ private:
sp<vendor::lineage::power::IPower> mHandle;
};
+class HidlHalWrapperSeh : public HalWrapper {
+public:
+ explicit HidlHalWrapperSeh(sp<vendor::samsung::hardware::miscpower::V2_0::ISehMiscPower> hal1,
+ sp<android::hardware::power::V1_1::IPower> hal2,
+ sp<android::hardware::power::V1_0::IPower> hal3)
+ : mHandleSeh(std::move(hal1)),
+ mHandle11(std::move(hal2)),
+ mHandle10(std::move(hal3)) {}
+ virtual ~HidlHalWrapperSeh() = default;
+
+ virtual HalResult<void> setBoost(hardware::power::Boost boost, int32_t durationMs) override;
+ virtual HalResult<void> setMode(hardware::power::Mode mode, bool enabled) override;
+ virtual HalResult<sp<hardware::power::IPowerHintSession>> createHintSession(
+ int32_t tgid, int32_t uid, const std::vector<int32_t>& threadIds,
+ int64_t durationNanos) override;
+ virtual HalResult<int64_t> getHintSessionPreferredRate() override;
+ virtual HalResult<int> getFeature(vendor::lineage::power::Feature feature) override;
+
+protected:
+ virtual HalResult<void> sendPowerHint(hardware::power::V1_0::PowerHint hintId, uint32_t data);
+
+private:
+ sp<vendor::samsung::hardware::miscpower::V2_0::ISehMiscPower> mHandleSeh;
+ sp<android::hardware::power::V1_1::IPower> mHandle11;
+ sp<android::hardware::power::V1_0::IPower> mHandle10;
+ HalResult<void> setInteractive(bool enabled);
+ HalResult<void> setFeature(hardware::power::V1_0::Feature feature, bool enabled);
+};
}; // namespace power
diff --git a/services/powermanager/Android.bp b/services/powermanager/Android.bp
index e27e620729..e77cdc32b2 100644
--- a/services/powermanager/Android.bp
+++ b/services/powermanager/Android.bp
@@ -40,6 +40,7 @@ cc_library_shared {
"android.hardware.power@1.1",
"android.hardware.power-V2-cpp",
"vendor.lineage.power-V1-cpp",
+ "vendor.samsung.hardware.miscpower@2.0",
],
cflags: [
diff --git a/services/powermanager/PowerHalController.cpp b/services/powermanager/PowerHalController.cpp
index 7a1b5f7c0a..8577c3b931 100644
--- a/services/powermanager/PowerHalController.cpp
+++ b/services/powermanager/PowerHalController.cpp
@@ -20,6 +20,7 @@
#include <android/hardware/power/IPower.h>
#include <android/hardware/power/IPowerHintSession.h>
#include <android/hardware/power/Mode.h>
+#include <vendor/samsung/hardware/miscpower/2.0/ISehMiscPower.h>
#include <powermanager/PowerHalController.h>
#include <powermanager/PowerHalLoader.h>
#include <utils/Log.h>
@@ -35,11 +36,15 @@ namespace power {
std::unique_ptr<HalWrapper> HalConnector::connect() {
sp<IPower> halAidl = PowerHalLoader::loadAidl();
+ sp<vendor::samsung::hardware::miscpower::V2_0::ISehMiscPower> halHidlSeh = PowerHalLoader::loadHidlSeh();
if (halAidl) {
- return std::make_unique<AidlHalWrapper>(halAidl);
+ return std::make_unique<AidlHalWrapper>(halAidl, halHidlSeh);
}
sp<V1_0::IPower> halHidlV1_0 = PowerHalLoader::loadHidlV1_0();
sp<V1_1::IPower> halHidlV1_1 = PowerHalLoader::loadHidlV1_1();
+ if (halHidlSeh) {
+ return std::make_unique<HidlHalWrapperSeh>(halHidlSeh, halHidlV1_1, halHidlV1_0);
+ }
if (halHidlV1_1) {
return std::make_unique<HidlHalWrapperV1_1>(halHidlV1_0, halHidlV1_1);
}
diff --git a/services/powermanager/PowerHalLoader.cpp b/services/powermanager/PowerHalLoader.cpp
index e5c636344d..803888dabb 100644
--- a/services/powermanager/PowerHalLoader.cpp
+++ b/services/powermanager/PowerHalLoader.cpp
@@ -18,6 +18,7 @@
#include <android/hardware/power/1.1/IPower.h>
#include <android/hardware/power/IPower.h>
+#include <vendor/samsung/hardware/miscpower/2.0/ISehMiscPower.h>
#include <binder/IServiceManager.h>
#include <hardware/power.h>
#include <hardware_legacy/power.h>
@@ -59,6 +60,7 @@ sp<IPower> PowerHalLoader::gHalAidl = nullptr;
sp<V1_0::IPower> PowerHalLoader::gHalHidlV1_0 = nullptr;
sp<V1_1::IPower> PowerHalLoader::gHalHidlV1_1 = nullptr;
sp<LineageAidl::IPower> PowerHalLoader::gHalLineageAidl = nullptr;
+sp<vendor::samsung::hardware::miscpower::V2_0::ISehMiscPower> PowerHalLoader::gHalHidlSeh = nullptr;
void PowerHalLoader::unloadAll() {
std::lock_guard<std::mutex> lock(gHalMutex);
@@ -98,10 +100,22 @@ sp<LineageAidl::IPower> PowerHalLoader::loadLineageAidl() {
return loadHal<LineageAidl::IPower>(gHalExists, gHalLineageAidl, loadFn, "Lineage AIDL");
}
+sp<vendor::samsung::hardware::miscpower::V2_0::ISehMiscPower> PowerHalLoader::loadHidlSeh() {
+ std::lock_guard<std::mutex> lock(gHalMutex);
+ static bool gHalExists = true;
+ static auto loadFn = []() { return vendor::samsung::hardware::miscpower::V2_0::ISehMiscPower::getService(); };
+ return loadHal<vendor::samsung::hardware::miscpower::V2_0::ISehMiscPower>(gHalExists, gHalHidlSeh, loadFn, "HIDL SEH v1.1");
+}
+
sp<V1_0::IPower> PowerHalLoader::loadHidlV1_0Locked() {
static bool gHalExists = true;
+ static auto loadFnSec = []() { return V1_0::IPower::getService("power"); };
+ auto hal = loadHal<V1_0::IPower>(gHalExists, gHalHidlV1_0, loadFnSec, "HIDL v1.0");
+
static auto loadFn = []() { return V1_0::IPower::getService(); };
- return loadHal<V1_0::IPower>(gHalExists, gHalHidlV1_0, loadFn, "HIDL v1.0");
+ if(hal == nullptr)
+ hal = loadHal<V1_0::IPower>(gHalExists, gHalHidlV1_0, loadFn, "HIDL v1.0");
+ return hal;
}
// -------------------------------------------------------------------------------------------------
diff --git a/services/powermanager/PowerHalWrapper.cpp b/services/powermanager/PowerHalWrapper.cpp
index 49659e796e..775cdcf800 100644
--- a/services/powermanager/PowerHalWrapper.cpp
+++ b/services/powermanager/PowerHalWrapper.cpp
@@ -220,6 +220,10 @@ HalResult<void> AidlHalWrapper::setMode(Mode mode, bool enabled) {
std::unique_lock<std::mutex> lock(mModeMutex);
size_t idx = static_cast<size_t>(mode);
+ if (mHandleSeh != nullptr && mode == Mode::INTERACTIVE) {
+ mHandleSeh->setInteractiveAsync(enabled, false);
+ }
+
// Quick return if mode is not supported by HAL
if (idx >= mModeSupportedArray.size() || mModeSupportedArray[idx] == HalSupport::OFF) {
ALOGV("Skipped setMode %s because Power HAL doesn't support it", toString(mode).c_str());
@@ -296,6 +300,77 @@ HalResult<int> LineageAidlHalWrapper::getFeature(LineageAidl::Feature feature) {
return HalResult<int>::fromStatus(ret, value);
}
+HalResult<void> HidlHalWrapperSeh::setBoost(Boost boost, int32_t durationMs) {
+ if (boost == Boost::INTERACTION) {
+ return sendPowerHint(V1_0::PowerHint::INTERACTION, durationMs);
+ } else {
+ ALOGV("Skipped setBoost %s because Power HAL AIDL not available", toString(boost).c_str());
+ return HalResult<void>::unsupported();
+ }
+}
+
+HalResult<void> HidlHalWrapperSeh::setMode(Mode mode, bool enabled) {
+ uint32_t data = enabled ? 1 : 0;
+ switch (mode) {
+ case Mode::LAUNCH:
+ return sendPowerHint(V1_0::PowerHint::LAUNCH, data);
+ case Mode::LOW_POWER:
+ return sendPowerHint(V1_0::PowerHint::LOW_POWER, data);
+ case Mode::SUSTAINED_PERFORMANCE:
+ return sendPowerHint(V1_0::PowerHint::SUSTAINED_PERFORMANCE, data);
+ case Mode::VR:
+ return sendPowerHint(V1_0::PowerHint::VR_MODE, data);
+ case Mode::INTERACTIVE:
+ return setInteractive(enabled);
+ case Mode::DOUBLE_TAP_TO_WAKE:
+ return setFeature(V1_0::Feature::POWER_FEATURE_DOUBLE_TAP_TO_WAKE, enabled);
+ default:
+ ALOGV("Skipped setMode %s because Power HAL AIDL not available",
+ toString(mode).c_str());
+ return HalResult<void>::unsupported();
+ }
+}
+
+HalResult<void> HidlHalWrapperSeh::sendPowerHint(V1_0::PowerHint hintId, uint32_t data) {
+ if(mHandle11 != nullptr) {
+ auto ret = mHandle11->powerHintAsync(hintId, data);
+ return HalResult<void>::fromReturn(ret);
+ } else {
+ auto ret = mHandle10->powerHint(hintId, data);
+ return HalResult<void>::fromReturn(ret);
+ }
+}
+
+HalResult<void> HidlHalWrapperSeh::setInteractive(bool enabled) {
+ if(mHandleSeh != nullptr) {
+ mHandleSeh->setInteractiveAsync(enabled, false);
+ }
+ auto ret = mHandle10->setInteractive(enabled);
+ return HalResult<void>::fromReturn(ret);
+}
+
+HalResult<void> HidlHalWrapperSeh::setFeature(V1_0::Feature feature, bool enabled) {
+ auto ret = mHandle10->setFeature(feature, enabled);
+ return HalResult<void>::fromReturn(ret);
+}
+
+HalResult<sp<Aidl::IPowerHintSession>> HidlHalWrapperSeh::createHintSession(
+ int32_t, int32_t, const std::vector<int32_t>& threadIds, int64_t) {
+ ALOGV("Skipped createHintSession(task num=%zu) because Power HAL not available",
+ threadIds.size());
+ return HalResult<sp<Aidl::IPowerHintSession>>::unsupported();
+}
+
+HalResult<int64_t> HidlHalWrapperSeh::getHintSessionPreferredRate() {
+ ALOGV("Skipped getHintSessionPreferredRate because Power HAL not available");
+ return HalResult<int64_t>::unsupported();
+}
+
+HalResult<int> HidlHalWrapperSeh::getFeature(LineageAidl::Feature) {
+ ALOGV("Skipped getFeature because Power HAL not available");
+ return HalResult<int>::unsupported();
+}
+
// -------------------------------------------------------------------------------------------------
} // namespace power
--
2.25.1

View File

@@ -0,0 +1,31 @@
From 184f59f82b11e4180a12586ab01b926b9187c418 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Wed, 12 Jan 2022 04:07:34 -0500
Subject: [PATCH 13/13] Fix loading power hidl v1.0
Change-Id: Ife20a98d2a11c79c7b42f359f30c28e2dede1f25
---
services/powermanager/PowerHalLoader.cpp | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/services/powermanager/PowerHalLoader.cpp b/services/powermanager/PowerHalLoader.cpp
index 803888dabb..f04abdcbd0 100644
--- a/services/powermanager/PowerHalLoader.cpp
+++ b/services/powermanager/PowerHalLoader.cpp
@@ -108,10 +108,11 @@ sp<vendor::samsung::hardware::miscpower::V2_0::ISehMiscPower> PowerHalLoader::lo
}
sp<V1_0::IPower> PowerHalLoader::loadHidlV1_0Locked() {
- static bool gHalExists = true;
+ static bool gSecHalExists = true;
static auto loadFnSec = []() { return V1_0::IPower::getService("power"); };
- auto hal = loadHal<V1_0::IPower>(gHalExists, gHalHidlV1_0, loadFnSec, "HIDL v1.0");
+ auto hal = loadHal<V1_0::IPower>(gSecHalExists, gHalHidlV1_0, loadFnSec, "HIDL v1.0");
+ static bool gHalExists = true;
static auto loadFn = []() { return V1_0::IPower::getService(); };
if(hal == nullptr)
hal = loadHal<V1_0::IPower>(gHalExists, gHalHidlV1_0, loadFn, "HIDL v1.0");
--
2.25.1

View File

@@ -1,7 +1,7 @@
From 2b520b6933e681f69925b6c974742cff29cf47df Mon Sep 17 00:00:00 2001
From cc24a7e886eff42a0e2f160cabb2c11d87c1a384 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Sun, 13 Oct 2019 17:21:31 +0800
Subject: [PATCH 1/3] telephony: forward-port support for forceCognitive
Subject: [PATCH 1/4] telephony: forward-port support for forceCognitive
* This is needed on some MTK devices. Android 10 refactored some code,
so now the "non-persistent/cognitive" filter is relocated to RIL and

View File

@@ -1,7 +1,7 @@
From d230672d53c64266bcf699d27c8951975f918d3f Mon Sep 17 00:00:00 2001
From fcfb842f7f35b38c07062f40a344412323317c2e Mon Sep 17 00:00:00 2001
From: Artem Borisov <dedsa2002@gmail.com>
Date: Sat, 10 Nov 2018 17:19:17 +0000
Subject: [PATCH 2/3] Telephony: Don not call onUssdRelease for Huawei RIL
Subject: [PATCH 2/4] Telephony: Don not call onUssdRelease for Huawei RIL
Huawei RIL doesn't seem to work properly with USSD_MODE_NW_RELEASE,
always releasing USSD when it should be finished instead.

View File

@@ -1,7 +1,7 @@
From cc77f6e8d407e9aa7c178c014ce7fb2faf23092a Mon Sep 17 00:00:00 2001
From 467090b06364a3c7874406eac519ef92c425bc82 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Mon, 6 Dec 2021 16:28:22 -0500
Subject: [PATCH 3/3] Fix baseband being too long to fit into a 91 chars
Subject: [PATCH 3/4] Fix baseband being too long to fit into a 91 chars
property, preventing telephony subsystem from starting
Change-Id: I1762e4a8cc137626be89f350229d6be162bdaf57

View File

@@ -0,0 +1,47 @@
From fdf6b444ee616a00e8f2c96817fc94913015ab7d 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 4/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)
invoke this method in their `sendSms` method; Google, in their infinite wisdom,
decided that this method needed a message ID passed in as well, changing the signature
to 'public void TelephonyMetrics.writeRilSendSms(int, int, int, int, long)' and resulting
in a MethodNotFoundException being raised in com.mediatek.ims, crashing it.
Fixes https://github.com/phhusson/treble_experimentations/issues/2125.
Co-authored-by: Sarah Vandomelen <sarah@sightworks.com>
Change-Id: Ib7a3a41e049cb9c9f937e8c6f771a29495738223
---
.../telephony/metrics/TelephonyMetrics.java | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/src/java/com/android/internal/telephony/metrics/TelephonyMetrics.java b/src/java/com/android/internal/telephony/metrics/TelephonyMetrics.java
index 5e43876df8..c375d9c8b6 100644
--- a/src/java/com/android/internal/telephony/metrics/TelephonyMetrics.java
+++ b/src/java/com/android/internal/telephony/metrics/TelephonyMetrics.java
@@ -2311,6 +2311,19 @@ public class TelephonyMetrics {
smsSession.increaseExpectedResponse();
}
+ /**
+ * Write Send SMS event (backwards-compatible method for R and earlier IMS implementations)
+ *
+ * @param phoneId Phone id
+ * @param rilSerial RIL request serial number
+ * @param tech SMS RAT
+ * @param format SMS format. Either {@link SmsMessage#FORMAT_3GPP} or
+ * {@link SmsMessage#FORMAT_3GPP2}.
+ */
+ public void writeRilSendSms(int phoneId, int rilSerial, int tech, int format) {
+ writeRilSendSms(phoneId, rilSerial, tech, format, 0);
+ }
+
/**
* Write Send SMS event using ImsService. Expecting response from
* {@link #writeOnSmsSolicitedResponse}.
--
2.25.1

View File

@@ -0,0 +1,31 @@
From eadaea9b045787edb3d2be27fa2cdb1bf29f6763 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Sun, 19 Dec 2021 17:03:15 -0500
Subject: [PATCH] Add a vendor800 command, to be able to call vendor-specific
hwc functions
Change-Id: Icbef1e9e3a331ae3bd5a05687d545851d94d88a8
---
.../composer-command-buffer/2.1/ComposerCommandBuffer.h | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/graphics/composer/2.1/utils/command-buffer/include/composer-command-buffer/2.1/ComposerCommandBuffer.h b/graphics/composer/2.1/utils/command-buffer/include/composer-command-buffer/2.1/ComposerCommandBuffer.h
index 499d3b96e..489578468 100644
--- a/graphics/composer/2.1/utils/command-buffer/include/composer-command-buffer/2.1/ComposerCommandBuffer.h
+++ b/graphics/composer/2.1/utils/command-buffer/include/composer-command-buffer/2.1/ComposerCommandBuffer.h
@@ -402,6 +402,12 @@ class CommandWriterBase {
endCommand();
}
+ void vendor800_1(uint32_t val) {
+ beginCommand(0x800 << 16, 1);
+ write(val);
+ endCommand();
+ }
+
protected:
template <typename T>
void beginCommand(T command, uint16_t length) {
--
2.25.1

View File

@@ -1,54 +0,0 @@
From e408adb5e9f3cf907392b7af9080df588e4e5b26 Mon Sep 17 00:00:00 2001
From: Andreas Schneider <asn@cryptomilk.org>
Date: Mon, 7 Jun 2021 13:23:02 -0400
Subject: [PATCH] On Samsung devices, we need to tell Audio HAL if we're
running narrow band or wide band
Change-Id: Ibfa0f632d9acbb920a85a613ce4e2f1d26556bd1
---
.../android/bluetooth/hfp/HeadsetStateMachine.java | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/src/com/android/bluetooth/hfp/HeadsetStateMachine.java b/src/com/android/bluetooth/hfp/HeadsetStateMachine.java
index 03ba99ac2..20267d08a 100644
--- a/src/com/android/bluetooth/hfp/HeadsetStateMachine.java
+++ b/src/com/android/bluetooth/hfp/HeadsetStateMachine.java
@@ -87,6 +87,9 @@ public class HeadsetStateMachine extends StateMachine {
private static final String HEADSET_WBS = "bt_wbs";
private static final String HEADSET_AUDIO_FEATURE_ON = "on";
private static final String HEADSET_AUDIO_FEATURE_OFF = "off";
+ private static final String HEADSET_G_SCO_SAMPLERATE = "g_sco_samplerate";
+ private static final String HEADSET_G_WB_SAMPLERATE = "16000";
+ private static final String HEADSET_G_NB_SAMPLERATE = "8000";
static final int CONNECT = 1;
static final int DISCONNECT = 2;
@@ -1549,6 +1552,12 @@ public class HeadsetStateMachine extends StateMachine {
HEADSET_WBS + "=" + mAudioParams.getOrDefault(HEADSET_WBS,
HEADSET_AUDIO_FEATURE_OFF)
});
+ keyValuePairs = keyValuePairs.concat(";"
+ + HEADSET_G_SCO_SAMPLERATE
+ + "="
+ + mAudioParams.getOrDefault(
+ HEADSET_G_SCO_SAMPLERATE,
+ HEADSET_G_NB_SAMPLERATE));
Log.i(TAG, "setAudioParameters for " + mDevice + ": " + keyValuePairs);
mSystemInterface.getAudioManager().setParameters(keyValuePairs);
}
@@ -1689,10 +1698,12 @@ public class HeadsetStateMachine extends StateMachine {
String prevWbs = mAudioParams.getOrDefault(HEADSET_WBS, HEADSET_AUDIO_FEATURE_OFF);
switch (wbsConfig) {
case HeadsetHalConstants.BTHF_WBS_YES:
+ mAudioParams.put(HEADSET_G_SCO_SAMPLERATE, HEADSET_G_WB_SAMPLERATE);
mAudioParams.put(HEADSET_WBS, HEADSET_AUDIO_FEATURE_ON);
break;
case HeadsetHalConstants.BTHF_WBS_NO:
case HeadsetHalConstants.BTHF_WBS_NONE:
+ mAudioParams.put(HEADSET_G_SCO_SAMPLERATE, HEADSET_G_NB_SAMPLERATE);
mAudioParams.put(HEADSET_WBS, HEADSET_AUDIO_FEATURE_OFF);
break;
default:
--
2.29.2

View File

@@ -0,0 +1,24 @@
From e3aaba55ee98ad1914f46590292bb0f017bc3149 Mon Sep 17 00:00:00 2001
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
Date: Mon, 10 Jan 2022 03:31:18 +0000
Subject: [PATCH] Report SCO sample rate by default
Change-Id: I12c14e2206f5dc20fefe30a2197798773a894988
---
res/values/config.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/res/values/config.xml b/res/values/config.xml
index 42ecca47f..952b96510 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -136,5 +136,5 @@
<bool name="enable_gd_up_to_scanning_layer">false</bool>
<!-- If true, SCO sample rate will be reported via g_sco_samplerate audio parameter -->
- <bool name="sco_report_samplerate">false</bool>
+ <bool name="sco_report_samplerate">true</bool>
</resources>
--
2.25.1