From 90d7ed3178786c885956834dca326dafd4f7764a Mon Sep 17 00:00:00 2001 From: Andy CrossGate Yan Date: Mon, 9 Mar 2020 03:43:52 +0000 Subject: [PATCH] Sync up to v213 --- ...again-with-trimmed-audio-port-name-i.patch | 57 ++++++++++++ ...ss-events-to-oppo-fingerprint-sensor.patch | 49 ++++++++++ ...samsung-optical-under-display-finger.patch | 86 ++++++++++++++++++ ...0053-Fix-persist.sys.fp.fod-override.patch | 29 ++++++ ...etain-the-sideband-layer-information.patch | 91 +++++++++++++++++++ ...list-RILs.-It-might-get-blacklisted-.patch | 26 ++++++ 6 files changed, 338 insertions(+) create mode 100644 patches/platform_frameworks_av/0013-audiopolicy-try-again-with-trimmed-audio-port-name-i.patch create mode 100644 patches/platform_frameworks_base/0050-WIP-report-press-events-to-oppo-fingerprint-sensor.patch create mode 100644 patches/platform_frameworks_base/0052-Add-support-for-samsung-optical-under-display-finger.patch create mode 100644 patches/platform_frameworks_base/0053-Fix-persist.sys.fp.fod-override.patch create mode 100644 patches/platform_frameworks_native/0006-SurfaceFlinger-retain-the-sideband-layer-information.patch create mode 100644 patches/platform_frameworks_opt_telephony/0009-HACK-Never-blacklist-RILs.-It-might-get-blacklisted-.patch diff --git a/patches/platform_frameworks_av/0013-audiopolicy-try-again-with-trimmed-audio-port-name-i.patch b/patches/platform_frameworks_av/0013-audiopolicy-try-again-with-trimmed-audio-port-name-i.patch new file mode 100644 index 0000000..7e5a1f5 --- /dev/null +++ b/patches/platform_frameworks_av/0013-audiopolicy-try-again-with-trimmed-audio-port-name-i.patch @@ -0,0 +1,57 @@ +From 283eb4c984c6e0d878599c9a6fcc4e891cbb24f4 Mon Sep 17 00:00:00 2001 +From: Peter Cai +Date: Thu, 23 Jan 2020 11:13:43 +0800 +Subject: [PATCH 13/13] audiopolicy: try again with trimmed audio port name if + not found + +* In Spreadtrum BSP, some audio routes may contain ports with extra + spaces at the beginning and the end, causing audiopolicy to refuse to + load and leading to broken audio. + +* Fix this by retrying with trimmed port name when not found. Do not + use trimmed name all the time because a white space is a valid + character in port name, and we cannot be sure nobody is using it for + legitimite purposes. +--- + .../managerdefinitions/src/Serializer.cpp | 18 ++++++++++++++++-- + 1 file changed, 16 insertions(+), 2 deletions(-) + +diff --git a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp +index 8bfdb5b0a..4bdb082ba 100644 +--- a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp ++++ b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp +@@ -550,6 +550,17 @@ Return DevicePortTraits::deserialize(const xmlNode *c + return deviceDesc; + } + ++char* trim(char * s) { ++ int l = strlen(s); ++ ++ if (l > 0) { ++ while (isspace(s[l - 1])) --l; ++ while (*s && isspace(*s)) ++s, --l; ++ } ++ ++ return strndup(s, l); ++} ++ + Return RouteTraits::deserialize(const xmlNode *cur, PtrSerializingCtx ctx) + { + std::string type = getXmlAttribute(cur, Attributes::type); +@@ -590,8 +601,11 @@ Return RouteTraits::deserialize(const xmlNode *cur, PtrSer + if (strlen(devTag) != 0) { + sp source = ctx->findPortByTagName(String8(devTag)); + if (source == NULL) { +- ALOGE("%s: no source found with name=%s", __func__, devTag); +- return Status::fromStatusT(BAD_VALUE); ++ source = ctx->findPortByTagName(String8(trim(devTag))); ++ if (source == NULL) { ++ ALOGE("%s: no source found with name=%s", __func__, devTag); ++ return Status::fromStatusT(BAD_VALUE); ++ } + } + sources.add(source); + } +-- +2.17.1 + diff --git a/patches/platform_frameworks_base/0050-WIP-report-press-events-to-oppo-fingerprint-sensor.patch b/patches/platform_frameworks_base/0050-WIP-report-press-events-to-oppo-fingerprint-sensor.patch new file mode 100644 index 0000000..9053166 --- /dev/null +++ b/patches/platform_frameworks_base/0050-WIP-report-press-events-to-oppo-fingerprint-sensor.patch @@ -0,0 +1,49 @@ +From 29fbc5853ee25d3cd72db8f87aec6addd863e677 Mon Sep 17 00:00:00 2001 +From: Pierre-Hugues Husson +Date: Sat, 22 Feb 2020 23:45:54 +0100 +Subject: [PATCH 50/53] [WIP] report press events to oppo fingerprint sensor + +--- + .../biometrics/fingerprint/FacolaView.java | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +diff --git a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java +index f77e8282689..0fb4254eb60 100644 +--- a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java ++++ b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java +@@ -114,6 +114,20 @@ public class FacolaView extends ImageView implements OnTouchListener { + } + } + ++ private final File oppoFod = new File("/sys/kernel/oppo_display/notify_fppress"); ++ private void oppoPress(boolean pressed) { ++ if(!oppoFod.exists()) return; ++ try { ++ String v = "0"; ++ if(pressed) v = "1"; ++ PrintWriter writer = new PrintWriter(oppoFod, "UTF-8"); ++ writer.println(v); ++ writer.close(); ++ } catch(Exception e) { ++ Slog.d("PHH", "Failed to notify oppo fp press", e); ++ } ++ } ++ + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); +@@ -131,9 +145,11 @@ public class FacolaView extends ImageView implements OnTouchListener { + } catch(Exception e) { + Slog.d("PHH-Enroll", "Failed calling xiaomi fp extcmd"); + } ++ oppoPress(true); + + canvas.drawCircle(mW/2, mH/2, (float) (mW/2.0f), this.mPaintFingerprint); + } else { ++ oppoPress(false); + try { + if(mXiaomiFingerprint != null) { + mXiaomiFingerprint.extCmd(0xa, 0); +-- +2.17.1 + diff --git a/patches/platform_frameworks_base/0052-Add-support-for-samsung-optical-under-display-finger.patch b/patches/platform_frameworks_base/0052-Add-support-for-samsung-optical-under-display-finger.patch new file mode 100644 index 0000000..715b885 --- /dev/null +++ b/patches/platform_frameworks_base/0052-Add-support-for-samsung-optical-under-display-finger.patch @@ -0,0 +1,86 @@ +From bc7c0ed48c84ea421d84049a5fdf509f0bdf8f8c Mon Sep 17 00:00:00 2001 +From: Pierre-Hugues Husson +Date: Mon, 2 Mar 2020 21:13:36 +0100 +Subject: [PATCH 52/53] Add support for samsung optical under-display + fingerprint + +--- + services/core/Android.bp | 1 + + .../biometrics/fingerprint/FacolaView.java | 17 +++++++++++++++-- + 2 files changed, 16 insertions(+), 2 deletions(-) + +diff --git a/services/core/Android.bp b/services/core/Android.bp +index 9f83e49c27d..84a5450dc05 100644 +--- a/services/core/Android.bp ++++ b/services/core/Android.bp +@@ -55,6 +55,7 @@ java_library_static { + "netd_aidl_interface-V2-java", + "netd_event_listener_interface-java", + "vendor.goodix.extend.service-V2.0-java", ++ "vendor.samsung.hardware.biometrics.fingerprint-V2.1-java", + "vendor.xiaomi.hardware.fingerprintextension-V1.0-java", + ], + } +diff --git a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java +index 0fb4254eb60..edd13988e49 100644 +--- a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java ++++ b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java +@@ -37,6 +37,7 @@ import java.io.PrintWriter; + + import vendor.xiaomi.hardware.fingerprintextension.V1_0.IXiaomiFingerprint; + import vendor.goodix.extend.service.V2_0.IGoodixFPExtendService; ++import vendor.samsung.hardware.biometrics.fingerprint.V2_1.ISecBiometricsFingerprint; + + import android.os.Handler; + import android.os.HandlerThread; +@@ -48,6 +49,7 @@ public class FacolaView extends ImageView implements OnTouchListener { + private final Paint mPaintShow = new Paint(); + private IXiaomiFingerprint mXiaomiFingerprint = null; + private IGoodixFPExtendService mGoodixFingerprint = null; ++ private ISecBiometricsFingerprint mSamsungFingerprint = null; + private boolean mInsideCircle = false; + private final WindowManager.LayoutParams mParams = new WindowManager.LayoutParams(); + +@@ -111,6 +113,11 @@ public class FacolaView extends ImageView implements OnTouchListener { + } catch(Exception e) { + Slog.d("PHH-Enroll", "Failed getting goodix fingerprint service", e); + } ++ try { ++ mSamsungFingerprint = ISecBiometricsFingerprint.getService(); ++ } catch(Exception e) { ++ Slog.d("PHH-Enroll", "Failed getting samsung fingerprint service", e); ++ } + } + } + +@@ -141,9 +148,12 @@ public class FacolaView extends ImageView implements OnTouchListener { + mXiaomiFingerprint.extCmd(0xa, nitValue); + } else if(mGoodixFingerprint != null) { + mGoodixFingerprint.goodixExtendCommand(10, 1); ++ } else if(mSamsungFingerprint != null) { ++ mSamsungFingerprint.request(22 /* SEM_FINGER_STATE */, 0, 2 /* pressed */, new java.util.ArrayList(), ++ (int retval, java.util.ArrayList out) -> {} ); + } + } catch(Exception e) { +- Slog.d("PHH-Enroll", "Failed calling xiaomi fp extcmd"); ++ Slog.d("PHH-Enroll", "Failed calling fp extcmd", e); + } + oppoPress(true); + +@@ -155,9 +165,12 @@ public class FacolaView extends ImageView implements OnTouchListener { + mXiaomiFingerprint.extCmd(0xa, 0); + } else if(mGoodixFingerprint != null) { + mGoodixFingerprint.goodixExtendCommand(10, 0); ++ } else if(mSamsungFingerprint != null) { ++ mSamsungFingerprint.request(22 /* SEM_FINGER_STATE */, 0, 1 /* released */, new java.util.ArrayList(), ++ (int retval, java.util.ArrayList out) -> {} ); + } + } catch(Exception e) { +- Slog.d("PHH-Enroll", "Failed calling xiaomi fp extcmd"); ++ Slog.d("PHH-Enroll", "Failed calling fp extcmd", e); + } + canvas.drawCircle(mW/2, mH/2, (float) (mW/2.0f), this.mPaintShow); + } +-- +2.17.1 + diff --git a/patches/platform_frameworks_base/0053-Fix-persist.sys.fp.fod-override.patch b/patches/platform_frameworks_base/0053-Fix-persist.sys.fp.fod-override.patch new file mode 100644 index 0000000..03ef66b --- /dev/null +++ b/patches/platform_frameworks_base/0053-Fix-persist.sys.fp.fod-override.patch @@ -0,0 +1,29 @@ +From 3b6fbd406c98211525f37d4d1e341d7750a652f0 Mon Sep 17 00:00:00 2001 +From: Pierre-Hugues Husson +Date: Mon, 2 Mar 2020 21:13:47 +0100 +Subject: [PATCH 53/53] Fix persist.sys.fp.fod override + +--- + .../com/android/server/biometrics/fingerprint/FacolaView.java | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java +index edd13988e49..2c1ba76f529 100644 +--- a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java ++++ b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java +@@ -75,10 +75,10 @@ public class FacolaView extends ImageView implements OnTouchListener { + + noDim = android.os.SystemProperties.getBoolean("persist.sys.phh.nodim", false); + String[] location = android.os.SystemProperties.get("persist.vendor.sys.fp.fod.location.X_Y", "").split(","); +- if(location.length == 0) ++ if(location.length != 2) + location = android.os.SystemProperties.get("persist.sys.fp.fod.location.X_Y", "").split(","); + String[] size = android.os.SystemProperties.get("persist.vendor.sys.fp.fod.size.width_height", "").split(","); +- if(size.length == 0) ++ if(size.length != 2) + size = android.os.SystemProperties.get("persist.sys.fp.fod.size.width_height", "").split(","); + Slog.d("PHH-Enroll", "FacolaView hello"); + if(size.length == 2 && location.length == 2) { +-- +2.17.1 + diff --git a/patches/platform_frameworks_native/0006-SurfaceFlinger-retain-the-sideband-layer-information.patch b/patches/platform_frameworks_native/0006-SurfaceFlinger-retain-the-sideband-layer-information.patch new file mode 100644 index 0000000..c141359 --- /dev/null +++ b/patches/platform_frameworks_native/0006-SurfaceFlinger-retain-the-sideband-layer-information.patch @@ -0,0 +1,91 @@ +From 723d8f84e0376b97840fa5e287a994823f6f5be4 Mon Sep 17 00:00:00 2001 +From: Pierre Couillaud +Date: Tue, 27 Aug 2019 13:43:22 -0700 +Subject: [PATCH 6/6] SurfaceFlinger: retain the sideband layer information for + composition + +when present, the sideband layer stream information is not saved into +the BufferQueueLayer::mSidebandStream, during "latchSidebandStream". + +this subsequently leads to such layer being marked as non visible in the +composition stack and to be drop from advertisement to hardware composer +even though a sideband layer is defined in the rest of the framework. + +this seems to be a regression introduced during android 9 to android 10 +revamp of the SurfaceFlinger for buffer latching. latching a sideband layer is actually harmless since there is no buffer associated with it that need to be waited on from the gpu side. + +the fix proposed here allows to maintain the knowledge of the sideband +layer and make it visible in the composition stack for hardware composer to handle adequately. + +for illustration purposes, the relevant snippet of the layer composition +stack are posted here from "dumpsys SurfaceFlinger", highlighting the +issue with ">>>". + +[before]: + +* compositionengine::Layer 0xa959b34c (SurfaceView - ) + frontend: + isSecure=false geomUsesSourceCrop=false geomBufferUsesDisplayInverseTransform=false + geomLayerTransform 0x00000000 (ROT_0 ) 0x00 (IDENTITY ) + 1.0000 0.0000 0.0000 + 0.0000 1.0000 0.0000 + 0.0000 0.0000 1.0000 + + geomBufferSize=[0 0 -1 -1] geomContentCrop=[0 0 -1 -1] geomCrop=[0 0 -1 -1] geomBufferTransform=0 + Region geomActiveTransparentRegion (this=0xa959b3f8, count=1) + [ 0, 0, 0, 0] + geomLayerBounds=[0.000000 0.000000 0.000000 0.000000] + blend=INVALID (0) alpha=1.000000 +>>> type=0 appId=0 composition type=INVALID (0) + buffer: buffer=0x0 slot=-1 +>>> sideband stream=0x9b509900 + color=[0 0 0] + dataspace=UNKNOWN (0) hdr metadata types=0 colorTransform= + +[after]: + +* compositionengine::Layer 0xa9a5034c (SurfaceView - ) + frontend: + isSecure=false geomUsesSourceCrop=true geomBufferUsesDisplayInverseTransform=false + geomLayerTransform 0x00000000 (ROT_0 ) 0x00 (IDENTITY ) + 1.0000 0.0000 0.0000 + 0.0000 1.0000 0.0000 + 0.0000 0.0000 1.0000 + + geomBufferSize=[0 0 -1 -1] geomContentCrop=[0 0 -1 -1] geomCrop=[0 0 1920 1080] geomBufferTransform=0 + Region geomActiveTransparentRegion (this=0xa9a503f8, count=1) + [ 0, 0, 0, 0] + geomLayerBounds=[0.000000 0.000000 1920.000000 1080.000000] + blend=NONE (1) alpha=1.000000 +>>> type=1 appId=10064 composition type=SIDEBAND (5) + buffer: buffer=0x0 slot=-1 +>>> sideband stream=0x9a1472b0 + color=[0 0 0] + dataspace=UNKNOWN (0) hdr metadata types=0 colorTransform= + +Bug: 140128098 +refs #SWANDROID-6178 + +Signed-off-by: Pierre Couillaud +--- + services/surfaceflinger/BufferQueueLayer.cpp | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/services/surfaceflinger/BufferQueueLayer.cpp b/services/surfaceflinger/BufferQueueLayer.cpp +index f35a4fd49..cbb9d658e 100644 +--- a/services/surfaceflinger/BufferQueueLayer.cpp ++++ b/services/surfaceflinger/BufferQueueLayer.cpp +@@ -243,8 +243,9 @@ bool BufferQueueLayer::latchSidebandStream(bool& recomputeVisibleRegions) { + bool sidebandStreamChanged = true; + if (mSidebandStreamChanged.compare_exchange_strong(sidebandStreamChanged, false)) { + // mSidebandStreamChanged was changed to false ++ mSidebandStream = mConsumer->getSidebandStream(); + auto& layerCompositionState = getCompositionLayer()->editState().frontEnd; +- layerCompositionState.sidebandStream = mConsumer->getSidebandStream(); ++ layerCompositionState.sidebandStream = mSidebandStream; + if (layerCompositionState.sidebandStream != nullptr) { + setTransactionFlags(eTransactionNeeded); + mFlinger->setTransactionFlags(eTraversalNeeded); +-- +2.17.1 + diff --git a/patches/platform_frameworks_opt_telephony/0009-HACK-Never-blacklist-RILs.-It-might-get-blacklisted-.patch b/patches/platform_frameworks_opt_telephony/0009-HACK-Never-blacklist-RILs.-It-might-get-blacklisted-.patch new file mode 100644 index 0000000..9283429 --- /dev/null +++ b/patches/platform_frameworks_opt_telephony/0009-HACK-Never-blacklist-RILs.-It-might-get-blacklisted-.patch @@ -0,0 +1,26 @@ +From 064f8936cd6d5e6d9a44a72bbc8600d092135e2c Mon Sep 17 00:00:00 2001 +From: Pierre-Hugues Husson +Date: Mon, 2 Mar 2020 21:11:25 +0100 +Subject: [PATCH 9/9] [HACK] Never blacklist RILs. It might get blacklisted for + bad reasons + +--- + src/java/com/android/internal/telephony/RIL.java | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/java/com/android/internal/telephony/RIL.java b/src/java/com/android/internal/telephony/RIL.java +index 32ddd4e07..7565798f7 100644 +--- a/src/java/com/android/internal/telephony/RIL.java ++++ b/src/java/com/android/internal/telephony/RIL.java +@@ -504,7 +504,7 @@ public class RIL extends BaseCommands implements CommandsInterface { + mRadioProxyCookie.incrementAndGet()); + mRadioProxy.setResponseFunctions(mRadioResponse, mRadioIndication); + } else { +- mDisabledRadioServices.add(mPhoneId); ++ //mDisabledRadioServices.add(mPhoneId); + riljLoge("getRadioProxy: mRadioProxy for " + + HIDL_SERVICE_NAME[mPhoneId] + " is disabled"); + } +-- +2.17.1 +