New patches, AOSP v22
diff --git a/patches/platform_external_selinux/0006-Increase-default-log_level-to-get-actual-selinux-err.patch b/patches/platform_external_selinux/0006-Increase-default-log_level-to-get-actual-selinux-err.patch
new file mode 100644
index 0000000..8431dd5
--- /dev/null
+++ b/patches/platform_external_selinux/0006-Increase-default-log_level-to-get-actual-selinux-err.patch
@@ -0,0 +1,26 @@
+From 4ff61714d1a790cafc868c1aba0c24d646e45cc0 Mon Sep 17 00:00:00 2001
+From: Pierre-Hugues Husson <phh@phh.me>
+Date: Mon, 9 Apr 2018 00:19:49 +0200
+Subject: [PATCH 6/6] Increase default log_level to get actual selinux error in
+ kmsg
+
+---
+ secilc/secilc.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/secilc/secilc.c b/secilc/secilc.c
+index e30572e..4a1b09e 100644
+--- a/secilc/secilc.c
++++ b/secilc/secilc.c
+@@ -101,7 +101,7 @@ int main(int argc, char *argv[])
+ int opt_index = 0;
+ char *fc_buf = NULL;
+ size_t fc_size;
+- enum cil_log_level log_level = CIL_ERR;
++ enum cil_log_level log_level = CIL_WARN;
+ static struct option long_opts[] = {
+ {"help", no_argument, 0, 'h'},
+ {"verbose", no_argument, 0, 'v'},
+--
+2.7.4
+
diff --git a/patches/platform_frameworks_av/0001-FIH-devices-Fix-Earpiece-audio-output.patch b/patches/platform_frameworks_av/0001-FIH-devices-Fix-Earpiece-audio-output.patch
new file mode 100644
index 0000000..1cf9498
--- /dev/null
+++ b/patches/platform_frameworks_av/0001-FIH-devices-Fix-Earpiece-audio-output.patch
@@ -0,0 +1,78 @@
+From 25e8b3145db1134d114f54ab8b3f4bff9bb5a062 Mon Sep 17 00:00:00 2001
+From: Pierre-Hugues Husson <phh@phh.me>
+Date: Tue, 24 Apr 2018 00:14:28 +0200
+Subject: [PATCH 1/2] FIH devices: Fix "Earpiece" audio output
+
+On some FIH devices (confirmed on Razer, and probably on Aquos SS2),
+Earpiece is not listed in attachedDevices, and devicePort's profile
+mentions it is AUDIO_CHANNEL_IN_MONO, instead of AUDIO_CHANNEL_OUT_MONO.
+
+Detect such cases (output device, but got only AUDIO_CHANNEL_IN_MONO),
+and fix both channelMasks and attachedDevices
+
+Change-Id: I4a88ba6d34d0fcd346eeea2ca903772f0271040a
+---
+ .../common/managerdefinitions/src/Serializer.cpp | 25 +++++++++++++++++++---
+ 1 file changed, 22 insertions(+), 3 deletions(-)
+
+diff --git a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
+index a224004..f58d7e5 100644
+--- a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
++++ b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
+@@ -191,16 +191,25 @@ const char AudioProfileTraits::Attributes::name[] = "name";
+ const char AudioProfileTraits::Attributes::samplingRates[] = "samplingRates";
+ const char AudioProfileTraits::Attributes::format[] = "format";
+ const char AudioProfileTraits::Attributes::channelMasks[] = "channelMasks";
++static bool fixedEarpieceChannels = false;
+
+ status_t AudioProfileTraits::deserialize(_xmlDoc */*doc*/, const _xmlNode *root, PtrElement &profile,
+- PtrSerializingCtx /*serializingContext*/)
++ PtrSerializingCtx serializingContext)
+ {
++ bool isOutput = serializingContext != nullptr;
+ string samplingRates = getXmlAttribute(root, Attributes::samplingRates);
+ string format = getXmlAttribute(root, Attributes::format);
+ string channels = getXmlAttribute(root, Attributes::channelMasks);
++ ChannelTraits::Collection channelsMask = channelMasksFromString(channels, ",");
++
++ //Some Foxconn devices have wrong earpiece channel mask, leading to no channel mask
++ if(channelsMask.size() == 1 && channelsMask[0] == AUDIO_CHANNEL_IN_MONO && isOutput) {
++ fixedEarpieceChannels = true;
++ channelsMask = channelMasksFromString("AUDIO_CHANNEL_OUT_MONO", ",");
++ }
+
+ profile = new Element(formatFromString(format, gDynamicFormat),
+- channelMasksFromString(channels, ","),
++ channelsMask,
+ samplingRatesFromString(samplingRates, ","));
+
+ profile->setDynamicFormat(profile->getFormat() == gDynamicFormat);
+@@ -316,7 +325,10 @@ status_t DevicePortTraits::deserialize(_xmlDoc *doc, const _xmlNode *root, PtrEl
+ }
+
+ AudioProfileTraits::Collection profiles;
+- deserializeCollection<AudioProfileTraits>(doc, root, profiles, NULL);
++ if(audio_is_output_devices(type))
++ deserializeCollection<AudioProfileTraits>(doc, root, profiles, (PtrSerializingCtx)1);
++ else
++ deserializeCollection<AudioProfileTraits>(doc, root, profiles, NULL);
+ if (profiles.isEmpty()) {
+ sp <AudioProfile> dynamicProfile = new AudioProfile(gDynamicFormat,
+ ChannelsVector(), SampleRateVector());
+@@ -481,6 +493,13 @@ status_t ModuleTraits::deserialize(xmlDocPtr doc, const xmlNode *root, PtrElemen
+ }
+ children = children->next;
+ }
++ if(fixedEarpieceChannels) {
++ sp<DeviceDescriptor> device =
++ module->getDeclaredDevices().getDeviceFromTagName(String8("Earpiece"));
++ if(device != 0)
++ ctx->addAvailableDevice(device);
++ fixedEarpieceChannels = false;
++ }
+ return NO_ERROR;
+ }
+
+--
+2.7.4
+
diff --git a/patches/platform_frameworks_av/0002-Fix-WiFi-Display-on-Huawei-devices-EMUI-8.0.patch b/patches/platform_frameworks_av/0002-Fix-WiFi-Display-on-Huawei-devices-EMUI-8.0.patch
new file mode 100644
index 0000000..c5987fa
--- /dev/null
+++ b/patches/platform_frameworks_av/0002-Fix-WiFi-Display-on-Huawei-devices-EMUI-8.0.patch
@@ -0,0 +1,31 @@
+From e31fc7df0316ea378dbb737c4699ee6441b0f068 Mon Sep 17 00:00:00 2001
+From: Alexander Pohl <pohl199885@gmail.com>
+Date: Fri, 15 Jun 2018 19:58:07 +0200
+Subject: [PATCH 2/2] Fix WiFi-Display on Huawei devices (EMUI 8.0)
+
+Huaweis media stack doesn't handle intra-refresh-mode, so skip the error instead.
+
+Thanks to Chris Vandomelen for pointing that out.
+---
+ media/libstagefright/ACodec.cpp | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp
+index a2eb9a8..e5eefcb 100644
+--- a/media/libstagefright/ACodec.cpp
++++ b/media/libstagefright/ACodec.cpp
+@@ -4244,9 +4244,8 @@ status_t ACodec::setupAVCEncoderParameters(const sp<AMessage> &msg) {
+ if (msg->findInt32("intra-refresh-mode", &intraRefreshMode)) {
+ err = setCyclicIntraMacroblockRefresh(msg, intraRefreshMode);
+ if (err != OK) {
+- ALOGE("Setting intra macroblock refresh mode (%d) failed: 0x%x",
+- err, intraRefreshMode);
+- return err;
++ ALOGE("setupAVCEncoderParameters(): set intra-refresh-mode failed, ignoring..");
++ //return err;
+ }
+ }
+
+--
+2.7.4
+
diff --git a/patches/platform_frameworks_base/0001-renderthread-relax-error-handling-for-wide-gamut-EGL.patch b/patches/platform_frameworks_base/0001-renderthread-relax-error-handling-for-wide-gamut-EGL.patch
index 81c8692..62d7ab7 100644
--- a/patches/platform_frameworks_base/0001-renderthread-relax-error-handling-for-wide-gamut-EGL.patch
+++ b/patches/platform_frameworks_base/0001-renderthread-relax-error-handling-for-wide-gamut-EGL.patch
@@ -1,7 +1,7 @@
-From 5063cdf366ef61b1151f5376ca106f77719404ee Mon Sep 17 00:00:00 2001
+From c4d6cce4e0e601677108be08a0c72ee58a9cb4b7 Mon Sep 17 00:00:00 2001
From: Rob Herring <robh@kernel.org>
Date: Wed, 29 Nov 2017 09:26:31 -0600
-Subject: [PATCH 1/6] renderthread: relax error handling for wide gamut EGL
+Subject: [PATCH 01/16] renderthread: relax error handling for wide gamut EGL
configs
It is valid to advertise EGL_EXT_pixel_format_float, but not have a
diff --git a/patches/platform_frameworks_base/0002-Reintroduce-button-backlight-and-respective-inactivi.patch b/patches/platform_frameworks_base/0002-Reintroduce-button-backlight-and-respective-inactivi.patch
index 5321082..eeb693f 100644
--- a/patches/platform_frameworks_base/0002-Reintroduce-button-backlight-and-respective-inactivi.patch
+++ b/patches/platform_frameworks_base/0002-Reintroduce-button-backlight-and-respective-inactivi.patch
@@ -1,7 +1,7 @@
-From d7116d97f5a71b125be642494d897aed4ef31c60 Mon Sep 17 00:00:00 2001
+From 1672d35b1d213d54adf7ef20bcc6344683e0969f Mon Sep 17 00:00:00 2001
From: Ricardo Cerqueira <cyanogenmod@cerqueira.org>
Date: Fri, 23 Nov 2012 14:23:16 +0000
-Subject: [PATCH 2/6] Reintroduce button-backlight (and respective inactivity
+Subject: [PATCH 02/16] Reintroduce button-backlight (and respective inactivity
timeout)
The power manager rewrite from Change I1d7a52e98f0449f76d70bf421f6a7f245957d1d7
diff --git a/patches/platform_frameworks_base/0003-power-Disable-keyboard-button-lights-while-dozing-dr.patch b/patches/platform_frameworks_base/0003-power-Disable-keyboard-button-lights-while-dozing-dr.patch
index 2f72489..70fbc6c 100644
--- a/patches/platform_frameworks_base/0003-power-Disable-keyboard-button-lights-while-dozing-dr.patch
+++ b/patches/platform_frameworks_base/0003-power-Disable-keyboard-button-lights-while-dozing-dr.patch
@@ -1,7 +1,7 @@
-From 0ac1c80ec58bee78a6240a197c68975b284e984c Mon Sep 17 00:00:00 2001
+From c7329117006efae651d4adc315cb5663fb62e2e6 Mon Sep 17 00:00:00 2001
From: Steve Kondik <steve@cyngn.com>
Date: Sat, 3 Jan 2015 05:13:26 -0800
-Subject: [PATCH 3/6] power: Disable keyboard/button lights while
+Subject: [PATCH 03/16] power: Disable keyboard/button lights while
dozing/dreaming
* With hardkeys and doze mode enabled, entering suspend results in
diff --git a/patches/platform_frameworks_base/0004-Fix-backlight-control-on-Galaxy-S9.patch b/patches/platform_frameworks_base/0004-Fix-backlight-control-on-Galaxy-S9.patch
index 60c03f1..513decf 100644
--- a/patches/platform_frameworks_base/0004-Fix-backlight-control-on-Galaxy-S9.patch
+++ b/patches/platform_frameworks_base/0004-Fix-backlight-control-on-Galaxy-S9.patch
@@ -1,7 +1,7 @@
-From ec221199a674603080ab183c912bf5a48cbf2f28 Mon Sep 17 00:00:00 2001
+From a82315411eca9c1bb28216eb537f5a63b8a5fb94 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 4/6] Fix backlight control on Galaxy S9(+)
+Subject: [PATCH 04/16] Fix backlight control on Galaxy S9(+)
---
services/core/java/com/android/server/lights/LightsService.java | 7 +++++++
diff --git a/patches/platform_frameworks_base/0005-Relax-requirement-for-visible-flag-to-sdcards.patch b/patches/platform_frameworks_base/0005-Relax-requirement-for-visible-flag-to-sdcards.patch
index 645a1b3..3b124d3 100644
--- a/patches/platform_frameworks_base/0005-Relax-requirement-for-visible-flag-to-sdcards.patch
+++ b/patches/platform_frameworks_base/0005-Relax-requirement-for-visible-flag-to-sdcards.patch
@@ -1,7 +1,7 @@
-From 284d851a55d31127dfe140197968d6daaa2d92e9 Mon Sep 17 00:00:00 2001
+From d807609094b6da867f2cb2672a6c36fb6bddaf05 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 5/6] Relax requirement for visible flag to sdcards
+Subject: [PATCH 05/16] 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)
diff --git a/patches/platform_frameworks_base/0006-Also-scan-product-overlay-for-RRO.patch b/patches/platform_frameworks_base/0006-Also-scan-product-overlay-for-RRO.patch
new file mode 100644
index 0000000..c2bb075
--- /dev/null
+++ b/patches/platform_frameworks_base/0006-Also-scan-product-overlay-for-RRO.patch
@@ -0,0 +1,51 @@
+From 1fef41d82a1e7a2bbafebcf519a60c888ffd3c4b Mon Sep 17 00:00:00 2001
+From: Pierre-Hugues Husson <pierre-hugues.husson@softathome.com>
+Date: Tue, 24 Apr 2018 18:08:59 +0200
+Subject: [PATCH 06/16] Also scan /product/overlay for RRO
+
+---
+ core/jni/android_util_AssetManager.cpp | 6 +++++-
+ core/jni/fd_utils.cpp | 3 ++-
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/core/jni/android_util_AssetManager.cpp b/core/jni/android_util_AssetManager.cpp
+index b137da3..30d8abe 100644
+--- a/core/jni/android_util_AssetManager.cpp
++++ b/core/jni/android_util_AssetManager.cpp
+@@ -164,7 +164,7 @@ static void verifySystemIdmaps()
+ }
+
+ // Generic idmap parameters
+- const char* argv[8];
++ const char* argv[9];
+ int argc = 0;
+ struct stat st;
+
+@@ -189,6 +189,10 @@ static void verifySystemIdmaps()
+ argv[argc++] = AssetManager::OVERLAY_DIR;
+ }
+
++ if (stat("/product/overlay/", &st) == 0) {
++ argv[argc++] = "/product/overlay";
++ }
++
+ // Finally, invoke idmap (if any overlay directory exists)
+ if (argc > 5) {
+ execv(AssetManager::IDMAP_BIN, (char* const*)argv);
+diff --git a/core/jni/fd_utils.cpp b/core/jni/fd_utils.cpp
+index 956b724..496b140 100644
+--- a/core/jni/fd_utils.cpp
++++ b/core/jni/fd_utils.cpp
+@@ -89,7 +89,8 @@ bool FileDescriptorWhitelist::IsAllowed(const std::string& path) const {
+
+ if ((android::base::StartsWith(path, kOverlayDir)
+ || android::base::StartsWith(path, kOverlaySubdir)
+- || android::base::StartsWith(path, kVendorOverlayDir))
++ || android::base::StartsWith(path, kVendorOverlayDir)
++ || android::base::StartsWith(path, "/product/overlay"))
+ && android::base::EndsWith(path, kApkSuffix)
+ && path.find("/../") == std::string::npos) {
+ return true;
+--
+2.7.4
+
diff --git a/patches/platform_frameworks_base/0006-Include-gapps-modifications-for-webview.patch b/patches/platform_frameworks_base/0006-Include-gapps-modifications-for-webview.patch
deleted file mode 100644
index 4fcdb08..0000000
--- a/patches/platform_frameworks_base/0006-Include-gapps-modifications-for-webview.patch
+++ /dev/null
@@ -1,102 +0,0 @@
-From 3ed5a82453bbe5f6d58324ea14a4b8c5583ab7a8 Mon Sep 17 00:00:00 2001
-From: Pierre-Hugues Husson <phh@phh.me>
-Date: Mon, 26 Sep 2016 13:17:56 +0200
-Subject: [PATCH 6/6] Include gapps modifications for webview
-
-webview_packages: prefer the more powerful webview packages
-
-If Gapps are installed, better webview providers
-become avaliable.
-
-This commit adds support for those and makes the system
-choose the best provider: Chrome Stable>Google Webview>AOSP Webview
-
-It also allows the user to choose between additional
-providers from Play Store: Chrome Beta, Chrome Dev and Chrome Canary.
-
-AOSP WebView is used as Fallback in case no Gapps were installed.
-If Gapps were detected, AOSP WebView will be blocked and cannot be
-chosen any more.
-
-This patch is a collobarative work of:
-
-mfonville <maarten.fonville@gmail.com> @mfonville
-rapperskull <rapper.skull@hotmail.it> @rapperskull
-Arne-Christian Blystad <arne.christian.blystad@bartec-pixavi.com> @Blystad
-Alex Naidis <alex.naidis@linux.com> @TheCrazyLex
-
-You can find more information on this topic here: opengapps/aosp_build#76
-
-Change-Id: I3beecf38c75600ec05c9018259dfe3b539b73614
-Signed-off-by: Alex Naidis <alex.naidis@linux.com>
-
-webview_packages: correct signature definition for Chrome Stable
-
-This is an incremental fix onto this patch:
-https://github.com/AOSPA/android_frameworks_base/commit/d36582165d4694da101cc65755af0841d443c80e
-
-Previously the definition of the signature for Chrome Stable
-was ignored since it wasn't inside the definition of Chrome
-Stable as webviewprovider.
-
-Thanks goes to @AKPWebDesign for initially noticing this.
-
-Change-Id: Id5c051859e7e51e11304874ec2defaa11aede1bf
-Signed-off-by: Alex Naidis <alex.naidis@linux.com>
-
-webview_packages: fix incorrect signatures
-
-Chrome Stable and Google Webview had incorrect
-signatures. That was due to an incorrect method
-of determining the right signature.
-
-That mistake wasn't noticed because Android
-disables the signature check on "userdebug" and
-"eng" builds. It is only enabled on "user" builds.
-
-So this commit replaces the wrong signatures
-of Chrome Stable and Google Webview by the
-correct ones and thus makes them avaliable
-webview providers on "user" builds.
-
-Main credits go to @KreAch3R for his
-extensive research on the issue.
-
-Change-Id: I081783b59254bfed0b2e3568ba8ae2801d86efea
-Signed-off-by: Alex Naidis <alex.naidis@linux.com>
----
- core/res/res/xml/config_webview_packages.xml | 19 +++++++++++++++++--
- 1 file changed, 17 insertions(+), 2 deletions(-)
-
-diff --git a/core/res/res/xml/config_webview_packages.xml b/core/res/res/xml/config_webview_packages.xml
-index f062b59..574f7c1 100644
---- a/core/res/res/xml/config_webview_packages.xml
-+++ b/core/res/res/xml/config_webview_packages.xml
-@@ -15,7 +15,22 @@
- -->
-
- <webviewproviders>
-- <!-- The default WebView implementation -->
-- <webviewprovider description="Android WebView" packageName="com.android.webview" availableByDefault="true">
-+
-+ <webviewprovider description="Chrome Stable" packageName="com.android.chrome" availableByDefault="true">
-+ <signature>MIIEQzCCAyugAwIBAgIJAMLgh0ZkSjCNMA0GCSqGSIb3DQEBBAUAMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDAeFw0wODA4MjEyMzEzMzRaFw0zNjAxMDcyMzEzMzRaMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBAKtWLgDYO6IIrgqWbxJOKdoR8qtW0I9Y4sypEwPpt1TTcvZApxsdyxMJZ2JORland2qSGT2y5b+3JKkedxiLDmpHpDsz2WCbdxgxRczfey5YZnTJ4VZbH0xqWVW/8lGmPav5xVwnIiJS6HXk+BVKZF+JcWjAsb/GEuq/eFdpuzSqeYTcfi6idkyugwfYwXFU1+5fZKUaRKYCwkkFQVfcAs1fXA5V+++FGfvjJ/CxURaSxaBvGdGDhfXE28LWuT9ozCl5xw4Yq5OGazvV24mZVSoOO0yZ31j7kYvtwYK6NeADwbSxDdJEqO4k//0zOHKrUiGYXtqw/A0LFFtqoZKFjnkCAQOjgdkwgdYwHQYDVR0OBBYEFMd9jMIhF1Ylmn/Tgt9r45jk14alMIGmBgNVHSMEgZ4wgZuAFMd9jMIhF1Ylmn/Tgt9r45jk14aloXikdjB0MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLR29vZ2xlIEluYy4xEDAOBgNVBAsTB0FuZHJvaWQxEDAOBgNVBAMTB0FuZHJvaWSCCQDC4IdGZEowjTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBAUAA4IBAQBt0lLO74UwLDYKqs6Tm8/yzKkEu116FmH4rkaymUIE0P9KaMftGlMexFlaYjzmB2OxZyl6euNXEsQH8gjwyxCUKRJNexBiGcCEyj6z+a1fuHHvkiaai+KL8W1EyNmgjmyy8AW7P+LLlkR+ho5zEHatRbM/YAnqGcFh5iZBqpknHf1SKMXFh4dd239FJ1jWYfbMDMy3NS5CTMQ2XFI1MvcyUTdZPErjQfTbQe3aDQsQcafEQPD+nqActifKZ0Np0IS9L9kR/wbNvyz6ENwPiTrjV2KRkEjH78ZMcUQXg0L3BYHJ3lc69Vs5Ddf9uUGGMYldX3WfMBEmh/9iFBDAaTCK</signature>
-+ </webviewprovider>
-+ <webviewprovider description="Chrome Beta" packageName="com.chrome.beta">
-+ <signature>MIIDwzCCAqugAwIBAgIJAOoj9MXoVhH6MA0GCSqGSIb3DQEBBQUAMHgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKDAtHb29nbGUgSW5jLjEQMA4GA1UECwwHQW5kcm9pZDEUMBIGA1UEAwwLY2hyb21lX2JldGEwHhcNMTYwMjI5MTUxNTIzWhcNNDMwNzE3MTUxNTIzWjB4MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEUMBIGA1UECgwLR29vZ2xlIEluYy4xEDAOBgNVBAsMB0FuZHJvaWQxFDASBgNVBAMMC2Nocm9tZV9iZXRhMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAo/wW27nRxVqGbFOyXr8jtv2pc2Ke8XMr6Sfs+3JK2licVaAljGFpLtWH4wUdb50w/QQSPALNLSSyuK/94rtp5Jjs4RSJI+whuewV/R6El+mFXBO3Ek5/op4UrOsR91IM4emvS67Ji2u8gp5EmttVgJtllFZCbtZLPmKuTaOkOB+EdWIxrYiHVEEaAcQpEHa9UgWUZ0bMfPj8j3F0w+Ak2ttmTjoFGLaZjuBAYwfdctN1b0sdLT9Lif45kMCb8QwPp0F9/ozs0rrTc+I6vnTS8kfFQfk7GIE4Hgm+cYQEHkIA6gLJxUVWvPZGdulAZw7wPt/neOkazHNZPcV4pYuNLQIDAQABo1AwTjAdBgNVHQ4EFgQU5t7dhcZfOSixRsiJ1E46JhzPlwowHwYDVR0jBBgwFoAU5t7dhcZfOSixRsiJ1E46JhzPlwowDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAZO2jB8P1d8ki3KZILvp27a2VM3DInlp8I8UgG3gh7nBQfTrnZr5M1PL8eFHqX7MEvAiGCMTcrPklEhjtcHK/c7BcdeCWq6oL56UK3JTl33RxJcjmjrz3e3VI6ehRSm1feNAkMD0Nr2RWr2LCYheAEmwTPtluLOJS+i7WhnXJzBtg5UpUFEbdFYenqUbDzya+cUVp0197k7hUTs8/Hxs0wf79o/TZXzTBq9eYQkiITonRN8+5QCBl1XmZKV0IHkzGFES1RP+fTiZpIjZT+W4tasHgs9QTTks4CCpyHBAy+uy7tApe1AxCzihgecCfUN1hWIltKwGZS6EE0bu0OXPzaQ==</signature>
-+ </webviewprovider>
-+ <webviewprovider description="Chrome Dev" packageName="com.chrome.dev">
-+ <signature>MIIDwTCCAqmgAwIBAgIJAOSN+O0cdii5MA0GCSqGSIb3DQEBBQUAMHcxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKDAtHb29nbGUgSW5jLjEQMA4GA1UECwwHQW5kcm9pZDETMBEGA1UEAwwKY2hyb21lX2RldjAeFw0xNjAyMjkxNzUwMDdaFw00MzA3MTcxNzUwMDdaMHcxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKDAtHb29nbGUgSW5jLjEQMA4GA1UECwwHQW5kcm9pZDETMBEGA1UEAwwKY2hyb21lX2RldjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOYPj6Y9rVt8xizSHDYjDEkDfFZAgSiZ9T6tevkQXsFyfaq3Gk3h2qssi29G6cTPJ2VXFKlVB71wSXv5p9/LEcDQPWQiO3Q2cLmgUXxyhJWXI3g96tPAhZQX2q6SC37ZQdiBR/raMO70DAkvCyBGtNplsvutzSE3oZ7LYfzB8vTbe7zCh3fDYSS/7xb3ZVvFqydHS40uVq1qqg1S80Pge7tW3pDGsPMZN7yA4yfmsvA1rbHm9N8t3Rc9hqzh6OxNAAgRB535YcsWL7iF+mpdFILXk3jLYT0nMvMnB83rsdgnRREjlGQYHl2mh8+6CqujsW/eICDq/LR6BYDyqHhk0ECAwEAAaNQME4wHQYDVR0OBBYEFKzsl07JglgpbeYDYGqsgqRDo+01MB8GA1UdIwQYMBaAFKzsl07JglgpbeYDYGqsgqRDo+01MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBACka6SFF6xAcj8L8O6R36++E09DTiGZEjvKT8eIycgcQQ+p1WUmPb6M2EJpN6zvvSE62ussmXdzf8rIyc0JXA8jbViZt62Y39epNENFxPTLN9QzXlT+w8AW73Ka3cnbOuL5EgoDl8fM79WVlARY3X+wB/jGNrkiGIdRm2IZIeAodWgC2mtXMiferyYBKz2/F2bhnU6DwgCbegS8trFjEWviijWdJ+lBdobn7LRc3orZCtHl8UyvRDi7cye3sK9y3BM39k0g20F21wTNHAonnvL6zbuNgpd+UEsVxDpOeWrEdBFN7Md0CI2wnu8eA8ljJD45v0WWMEoxsIi131g5piNM=</signature>
-+ </webviewprovider>
-+ <webviewprovider description="Chrome Canary" packageName="com.chrome.canary">
-+ <signature>MIIDxzCCAq+gAwIBAgIJAML7APITsgV7MA0GCSqGSIb3DQEBBQUAMHoxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKDAtHb29nbGUgSW5jLjEQMA4GA1UECwwHQW5kcm9pZDEWMBQGA1UEAwwNY2hyb21lX2NhbmFyeTAeFw0xNjAyMjkxOTA5MDdaFw00MzA3MTcxOTA5MDdaMHoxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKDAtHb29nbGUgSW5jLjEQMA4GA1UECwwHQW5kcm9pZDEWMBQGA1UEAwwNY2hyb21lX2NhbmFyeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANXfeAoZlr0ya1HBzIfAz/nLLjpPJeAPvuX5dueaxmiQgv2hNG22acriFuiiJI6TU0t8AIVJD5Ifbc4OOuA0zeFhdzWWGnmTRH6x27WI7bzOKnAqOvv21ZBmE9i8Vo++K13xWdTs3qVn1bn9oUONxFu0wKDzXYZhoj1Jom0RZGjXm16xuPlEuOzMcjiNBDoYuxPAXkMcK/G1gP4P4nAV8Rd/GGIjKRS/SUtcShhoAMOQhs4WIEkUrvEVRwhBDIbpM87oFbCVdBH38r0XS6F6CdhPJsKFhoEfq4c01HZqNmDpCPA8AAcCuSWqmXoTIqs7OqkWgduE2bInbWU7WMaTl+kCAwEAAaNQME4wHQYDVR0OBBYEFB/AsC4iPAqaLoNytNSx29qByI7+MB8GA1UdIwQYMBaAFB/AsC4iPAqaLoNytNSx29qByI7+MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAMb2Td3ro/+MGVnCPAbwBSOZMVLUKGqt6zr8CShW9mtFHnmy29EaWSYYAj1M4+6Vpkq85NsgBEck7rnUjV8A3Q0NKdTys1KRKJqVvQRBN6SwqQenSf/abxQCa8Z+69rh+3BkIU1HLtu5lrMDZwon5H91L5mpORn6vItd20uW132lwSDeUEW2CHslTrodoFuTUcSUlRiq/URfUH3baO1QHXkxpQwrBPKL5deJfcZnxh5MAtAGSQL7gHvayEFlDppETXdDO7vgGTH2dEK2TjKWALbGiKkxSqjRyTNt4/FOj10TqNRdUamj+ydVJgzGQ8bki4Vc6NnKm/r4asusxapkVR4=</signature>
- </webviewprovider>
-+ <webviewprovider description="Google WebView" packageName="com.google.android.webview" availableByDefault="true">
-+<signature>MIIDuzCCAqOgAwIBAgIJANi6DgBQG4ZTMA0GCSqGSIb3DQEBBQUAMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKDAtHb29nbGUgSW5jLjEQMA4GA1UECwwHQW5kcm9pZDEQMA4GA1UEAwwHd2VidmlldzAeFw0xNDA4MDgyMzIwMjBaFw00MTEyMjQyMzIwMjBaMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKDAtHb29nbGUgSW5jLjEQMA4GA1UECwwHQW5kcm9pZDEQMA4GA1UEAwwHd2VidmlldzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbtaFX0r5aZJMAbPVMAgK1ZZ29dTn91VsGxXv2hqrQo7IpqEy2JmPvPnoMsSiuTAe+UcQy8oKDQ2aYVSAd1DGIy+nSRyFTt3LSIAdwSBkB1qT4a+OqkpsR6bSNXQXQ18lCQu9gREY3h3QlYBQAyzRxw4hRGlrXAzuSz1Ec4W+6x4nLG5DG61MAMR8ClF9XSqbmGB3kyZ70A0X9OPYYxiMWP1ExaYvpaVqjyZZcrPwr+vtW8oCuGBUtHpBUH3OoG+9s2YMcgLG7vCK9awKDqlPcJSpIAAj6uGs4gORmkqxZRMskLSTWbhP4p+3Ap8jYzTVB6Y1/DMVmYTWRMcPW0macCAwEAAaNQME4wHQYDVR0OBBYEFJ6bAR6/QVm4w9LRSGQiaR5Rhp3TMB8GA1UdIwQYMBaAFJ6bAR6/QVm4w9LRSGQiaR5Rhp3TMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAEQu8QiVxax7/diEiJrgKE1LwdXsIygJK/KnaKdnYEkAQpeu/QmrLiycm+OFbL1qHJIB7OuI/PQBUtcaNSiJSCVgtwtEbZWWIdsynqG/Nf4aGOndXegSQNRH54M05sRHLoeRycPrY7xQlEwGikNFR76+5UdwFBQI3Gn22g6puJnVukQm/wXQ+ajoiS4QclrNlixoDQsZ4STLH4+Wju2wIWKFFArIhVEIlbamq+p6BghuzH3aIz/Fy0YTQKi7SA+0fuNeCaqlSm5pYSt6p5CH89y1Fr+wFc5r3iLRnUwRcy08ESC7bZJnxV3d/YQ5valTxBbzku/dQbXVj/xg69H8l8M</signature>
-+</webviewprovider>
-+ <!-- The default WebView implementation -->
-+ <webviewprovider description="AOSP WebView" packageName="com.android.webview" availableByDefault="true" isFallback="true" />
- </webviewproviders>
---
-2.7.4
-
diff --git a/patches/platform_frameworks_base/0007-Also-scan-system-overlay.patch b/patches/platform_frameworks_base/0007-Also-scan-system-overlay.patch
new file mode 100644
index 0000000..ec64a33
--- /dev/null
+++ b/patches/platform_frameworks_base/0007-Also-scan-system-overlay.patch
@@ -0,0 +1,51 @@
+From e89aed22785fc3ce5aa0bd75c6410003dbc55245 Mon Sep 17 00:00:00 2001
+From: Pierre-Hugues Husson <phh@phh.me>
+Date: Tue, 1 May 2018 17:47:36 +0200
+Subject: [PATCH 07/16] Also scan /system/overlay
+
+---
+ core/jni/android_util_AssetManager.cpp | 6 +++++-
+ core/jni/fd_utils.cpp | 3 ++-
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/core/jni/android_util_AssetManager.cpp b/core/jni/android_util_AssetManager.cpp
+index 30d8abe..9ec1a75 100644
+--- a/core/jni/android_util_AssetManager.cpp
++++ b/core/jni/android_util_AssetManager.cpp
+@@ -164,7 +164,7 @@ static void verifySystemIdmaps()
+ }
+
+ // Generic idmap parameters
+- const char* argv[9];
++ const char* argv[10];
+ int argc = 0;
+ struct stat st;
+
+@@ -193,6 +193,10 @@ static void verifySystemIdmaps()
+ argv[argc++] = "/product/overlay";
+ }
+
++ if (stat("/system/overlay/", &st) == 0) {
++ argv[argc++] = "/system/overlay";
++ }
++
+ // Finally, invoke idmap (if any overlay directory exists)
+ if (argc > 5) {
+ execv(AssetManager::IDMAP_BIN, (char* const*)argv);
+diff --git a/core/jni/fd_utils.cpp b/core/jni/fd_utils.cpp
+index 496b140..6ba3798 100644
+--- a/core/jni/fd_utils.cpp
++++ b/core/jni/fd_utils.cpp
+@@ -90,7 +90,8 @@ bool FileDescriptorWhitelist::IsAllowed(const std::string& path) const {
+ if ((android::base::StartsWith(path, kOverlayDir)
+ || android::base::StartsWith(path, kOverlaySubdir)
+ || android::base::StartsWith(path, kVendorOverlayDir)
+- || android::base::StartsWith(path, "/product/overlay"))
++ || android::base::StartsWith(path, "/product/overlay")
++ || android::base::StartsWith(path, "/system/overlay"))
+ && android::base::EndsWith(path, kApkSuffix)
+ && path.find("/../") == std::string::npos) {
+ return true;
+--
+2.7.4
+
diff --git a/patches/platform_frameworks_base/0008-Don-t-crash-if-there-is-IR-HAL-is-not-declared.patch b/patches/platform_frameworks_base/0008-Don-t-crash-if-there-is-IR-HAL-is-not-declared.patch
new file mode 100644
index 0000000..7e0fbe7
--- /dev/null
+++ b/patches/platform_frameworks_base/0008-Don-t-crash-if-there-is-IR-HAL-is-not-declared.patch
@@ -0,0 +1,25 @@
+From b099c00a7e70e730a4d1c7227e911f8f09ffd5f3 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 08/16] Don't crash if there is IR HAL is not declared
+
+---
+ services/core/java/com/android/server/ConsumerIrService.java | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/services/core/java/com/android/server/ConsumerIrService.java b/services/core/java/com/android/server/ConsumerIrService.java
+index 2ed6c77..c574a03 100644
+--- a/services/core/java/com/android/server/ConsumerIrService.java
++++ b/services/core/java/com/android/server/ConsumerIrService.java
+@@ -50,8 +50,6 @@ public class ConsumerIrService extends IConsumerIrService.Stub {
+ if (!mHasNativeHal) {
+ throw new RuntimeException("FEATURE_CONSUMER_IR present, but no IR HAL loaded!");
+ }
+- } else if (mHasNativeHal) {
+- throw new RuntimeException("IR HAL present, but FEATURE_CONSUMER_IR is not set!");
+ }
+ }
+
+--
+2.7.4
+
diff --git a/patches/platform_frameworks_base/0009-Fix-62.patch b/patches/platform_frameworks_base/0009-Fix-62.patch
new file mode 100644
index 0000000..2cbe176
--- /dev/null
+++ b/patches/platform_frameworks_base/0009-Fix-62.patch
@@ -0,0 +1,28 @@
+From 90b1f32b2e4bbc22ee9dbbf586a804639fbe90f4 Mon Sep 17 00:00:00 2001
+From: Pierre-Hugues Husson <phh@phh.me>
+Date: Wed, 30 May 2018 14:05:30 +0200
+Subject: [PATCH 09/16] Fix(?) #62
+
+---
+ .../SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
+index cd23c97..7a0e1cb 100644
+--- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
++++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
+@@ -837,7 +837,10 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
+
+ @Override
+ public void onAuthenticationError(int errMsgId, CharSequence errString) {
+- handleFingerprintError(errMsgId, errString.toString());
++ if(errString != null)
++ handleFingerprintError(errMsgId, errString.toString());
++ else
++ handleFingerprintError(errMsgId, "unknown error");
+ }
+
+ @Override
+--
+2.7.4
+
diff --git a/patches/platform_frameworks_base/0010-S9-brightness-override-only-for-screen.patch b/patches/platform_frameworks_base/0010-S9-brightness-override-only-for-screen.patch
new file mode 100644
index 0000000..8cc2205
--- /dev/null
+++ b/patches/platform_frameworks_base/0010-S9-brightness-override-only-for-screen.patch
@@ -0,0 +1,35 @@
+From 6ef0f1fc726df642fef81ccd15edde6e9daaed53 Mon Sep 17 00:00:00 2001
+From: Pierre-Hugues Husson <pierre-hugues.husson@softathome.com>
+Date: Thu, 7 Jun 2018 13:36:51 +0200
+Subject: [PATCH 10/16] S9 brightness override only for screen
+
+---
+ .../core/java/com/android/server/lights/LightsService.java | 12 +++++++-----
+ 1 file changed, 7 insertions(+), 5 deletions(-)
+
+diff --git a/services/core/java/com/android/server/lights/LightsService.java b/services/core/java/com/android/server/lights/LightsService.java
+index 762b0ae..eb25943 100644
+--- a/services/core/java/com/android/server/lights/LightsService.java
++++ b/services/core/java/com/android/server/lights/LightsService.java
+@@ -53,11 +53,13 @@ public class LightsService extends SystemService {
+ return;
+ }
+
+- String fp = SystemProperties.get("ro.vendor.build.fingerprint", "hello");
+- if(fp.contains("starlte") || fp.contains("star2lte")) {
+- setLightLocked(brightness*100, LIGHT_FLASH_HARDWARE, 0, 0, brightnessMode);
+- return;
+- }
++ if(mId == 0) {
++ String fp = SystemProperties.get("ro.vendor.build.fingerprint", "hello");
++ if(fp.contains("starlte") || fp.contains("star2lte")) {
++ setLightLocked(brightness*100, LIGHT_FLASH_HARDWARE, 0, 0, brightnessMode);
++ return;
++ }
++ }
+
+ int color = brightness & 0x000000ff;
+ color = 0xff000000 | (color << 16) | (color << 8) | color;
+--
+2.7.4
+
diff --git a/patches/platform_frameworks_base/0011-WIP-Fix-OP6-brightness.patch b/patches/platform_frameworks_base/0011-WIP-Fix-OP6-brightness.patch
new file mode 100644
index 0000000..0a036ec
--- /dev/null
+++ b/patches/platform_frameworks_base/0011-WIP-Fix-OP6-brightness.patch
@@ -0,0 +1,35 @@
+From d68bb6edb78ecc043456474e6f57725a319f0a81 Mon Sep 17 00:00:00 2001
+From: Pierre-Hugues Husson <pierre-hugues.husson@softathome.com>
+Date: Thu, 7 Jun 2018 13:42:02 +0200
+Subject: [PATCH 11/16] [WIP] Fix OP6 brightness
+
+---
+ .../core/java/com/android/server/lights/LightsService.java | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+diff --git a/services/core/java/com/android/server/lights/LightsService.java b/services/core/java/com/android/server/lights/LightsService.java
+index eb25943..a77af44 100644
+--- a/services/core/java/com/android/server/lights/LightsService.java
++++ b/services/core/java/com/android/server/lights/LightsService.java
+@@ -59,6 +59,18 @@ public class LightsService extends SystemService {
+ setLightLocked(brightness*100, LIGHT_FLASH_HARDWARE, 0, 0, brightnessMode);
+ return;
+ }
++
++ boolean qcomExtendBrightness = SystemProperties.getBoolean("persist.extend.brightness", false);
++ int scale = SystemProperties.getInt("persist.display.max_brightness", 1023);
++ if(fp.contains("OnePlus6")) {
++ qcomExtendBrightness = true;
++ scale = 1023;
++ }
++
++ if(qcomExtendBrightness) {
++ setLightLocked(brightness * scale / 255, LIGHT_FLASH_NONE, 0, 0, brightnessMode);
++ return;
++ }
+ }
+
+ int color = brightness & 0x000000ff;
+--
+2.7.4
+
diff --git a/patches/platform_frameworks_base/0012-Try-to-make-brightness-more-generic-using-property-s.patch b/patches/platform_frameworks_base/0012-Try-to-make-brightness-more-generic-using-property-s.patch
new file mode 100644
index 0000000..d48a466
--- /dev/null
+++ b/patches/platform_frameworks_base/0012-Try-to-make-brightness-more-generic-using-property-s.patch
@@ -0,0 +1,31 @@
+From 33bc4de58fe68c44a270adbaeadd68e7756e98a6 Mon Sep 17 00:00:00 2001
+From: Pierre-Hugues Husson <phh@phh.me>
+Date: Sun, 10 Jun 2018 22:54:55 +0200
+Subject: [PATCH 12/16] Try to make brightness more generic using property set
+ by rw-system
+
+---
+ services/core/java/com/android/server/lights/LightsService.java | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/services/core/java/com/android/server/lights/LightsService.java b/services/core/java/com/android/server/lights/LightsService.java
+index a77af44..4dc44de 100644
+--- a/services/core/java/com/android/server/lights/LightsService.java
++++ b/services/core/java/com/android/server/lights/LightsService.java
+@@ -62,9 +62,11 @@ public class LightsService extends SystemService {
+
+ boolean qcomExtendBrightness = SystemProperties.getBoolean("persist.extend.brightness", false);
+ int scale = SystemProperties.getInt("persist.display.max_brightness", 1023);
+- if(fp.contains("OnePlus6")) {
++ //This is set by vndk-detect
++ int qcomScale = SystemProperties.getInt("persist.sys.qcom-brightness", -1);
++ if(qcomScale != -1) {
+ qcomExtendBrightness = true;
+- scale = 1023;
++ scale = qcomScale;
+ }
+
+ if(qcomExtendBrightness) {
+--
+2.7.4
+
diff --git a/patches/platform_frameworks_base/0013-property-matching-RROs-allow-to-prefix-the-value-wit.patch b/patches/platform_frameworks_base/0013-property-matching-RROs-allow-to-prefix-the-value-wit.patch
new file mode 100644
index 0000000..3621435
--- /dev/null
+++ b/patches/platform_frameworks_base/0013-property-matching-RROs-allow-to-prefix-the-value-wit.patch
@@ -0,0 +1,35 @@
+From 02f3116e5a71bef5643bc9a6e6e7cdc9a0d1cf06 Mon Sep 17 00:00:00 2001
+From: Pierre-Hugues Husson <phh@phh.me>
+Date: Tue, 12 Jun 2018 22:55:32 +0200
+Subject: [PATCH 13/16] property-matching RROs: allow to prefix the value with
+ + to do glob match instead of exact match
+
+---
+ cmds/idmap/scan.cpp | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/cmds/idmap/scan.cpp b/cmds/idmap/scan.cpp
+index d69dd79..2be6d23 100644
+--- a/cmds/idmap/scan.cpp
++++ b/cmds/idmap/scan.cpp
+@@ -1,5 +1,6 @@
+ #include <dirent.h>
+ #include <inttypes.h>
++#include <fnmatch.h>
+ #include <sys/file.h>
+ #include <sys/stat.h>
+
+@@ -92,6 +93,10 @@ namespace {
+ property_get(prop, propBuf, NULL);
+ val = strndup16to8(value.string(), value.size());
+
++ if(val[0]=='+') {
++ return fnmatch(val+1, propBuf, 0) != 0;
++ }
++
+ return (strcmp(propBuf, val) == 0);
+ }
+
+--
+2.7.4
+
diff --git a/patches/platform_frameworks_base/0014-Fix-typo-on-fnmatch-return-value-check.patch b/patches/platform_frameworks_base/0014-Fix-typo-on-fnmatch-return-value-check.patch
new file mode 100644
index 0000000..cdc860d
--- /dev/null
+++ b/patches/platform_frameworks_base/0014-Fix-typo-on-fnmatch-return-value-check.patch
@@ -0,0 +1,25 @@
+From b8fd5db5611395bef9b7338d70d1279317849334 Mon Sep 17 00:00:00 2001
+From: Song Fuchang <song.fc@gmail.com>
+Date: Sun, 17 Jun 2018 22:39:37 +0800
+Subject: [PATCH 14/16] Fix typo on fnmatch return value check
+
+---
+ cmds/idmap/scan.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmds/idmap/scan.cpp b/cmds/idmap/scan.cpp
+index 2be6d23..0acff23 100644
+--- a/cmds/idmap/scan.cpp
++++ b/cmds/idmap/scan.cpp
+@@ -94,7 +94,7 @@ namespace {
+ val = strndup16to8(value.string(), value.size());
+
+ if(val[0]=='+') {
+- return fnmatch(val+1, propBuf, 0) != 0;
++ return fnmatch(val+1, propBuf, 0) == 0;
+ }
+
+ return (strcmp(propBuf, val) == 0);
+--
+2.7.4
+
diff --git a/patches/platform_frameworks_base/0015-Add-Qualcomm-starlte.patch b/patches/platform_frameworks_base/0015-Add-Qualcomm-starlte.patch
new file mode 100644
index 0000000..61adacd
--- /dev/null
+++ b/patches/platform_frameworks_base/0015-Add-Qualcomm-starlte.patch
@@ -0,0 +1,27 @@
+From 983bd7a99b11e25b620fe37622f1f3a7f81dc7bd Mon Sep 17 00:00:00 2001
+From: Pierre-Hugues Husson <phh@phh.me>
+Date: Mon, 25 Jun 2018 22:43:32 +0200
+Subject: [PATCH 15/16] Add Qualcomm starlte
+
+---
+ services/core/java/com/android/server/lights/LightsService.java | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/services/core/java/com/android/server/lights/LightsService.java b/services/core/java/com/android/server/lights/LightsService.java
+index 4dc44de..2886f29 100644
+--- a/services/core/java/com/android/server/lights/LightsService.java
++++ b/services/core/java/com/android/server/lights/LightsService.java
+@@ -55,7 +55,9 @@ public class LightsService extends SystemService {
+
+ if(mId == 0) {
+ String fp = SystemProperties.get("ro.vendor.build.fingerprint", "hello");
+- if(fp.contains("starlte") || fp.contains("star2lte")) {
++ if(
++ fp.contains("starlte") || fp.contains("star2lte") ||
++ fp.contains("starqlte") || fp.contains("star2qlte")) {
+ setLightLocked(brightness*100, LIGHT_FLASH_HARDWARE, 0, 0, brightnessMode);
+ return;
+ }
+--
+2.7.4
+
diff --git a/patches/platform_frameworks_base/0016-Galaxy-S9-remaining-of-HAL-onEnroll-is-actually-a-pe.patch b/patches/platform_frameworks_base/0016-Galaxy-S9-remaining-of-HAL-onEnroll-is-actually-a-pe.patch
new file mode 100644
index 0000000..50564d2
--- /dev/null
+++ b/patches/platform_frameworks_base/0016-Galaxy-S9-remaining-of-HAL-onEnroll-is-actually-a-pe.patch
@@ -0,0 +1,30 @@
+From 352a0b282645b142c4a57fd165e35b39602953b9 Mon Sep 17 00:00:00 2001
+From: Pierre-Hugues Husson <phh@phh.me>
+Date: Mon, 2 Jul 2018 23:36:39 +0200
+Subject: [PATCH 16/16] [Galaxy S9] "remaining" of HAL onEnroll is actually a
+ percent of progress
+
+---
+ .../java/com/android/server/fingerprint/FingerprintService.java | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/services/core/java/com/android/server/fingerprint/FingerprintService.java b/services/core/java/com/android/server/fingerprint/FingerprintService.java
+index b1c165e..3cfa367 100644
+--- a/services/core/java/com/android/server/fingerprint/FingerprintService.java
++++ b/services/core/java/com/android/server/fingerprint/FingerprintService.java
+@@ -955,7 +955,11 @@ public class FingerprintService extends SystemService implements IHwBinder.Death
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+- handleEnrollResult(deviceId, fingerId, groupId, remaining);
++ int remaining2 = remaining;
++ String fp = android.os.SystemProperties.get("ro.vendor.build.fingerprint");
++ if(fp != null && (fp.contains("starlte") || fp.contains("star2lte") || fp.contains("starqlte") || fp.contains("star2qlte")))
++ remaining2 = 100 - remaining2;
++ handleEnrollResult(deviceId, fingerId, groupId, remaining2);
+ }
+ });
+ }
+--
+2.7.4
+
diff --git a/patches/platform_frameworks_opt_telephony/0001-Make-better-signal-levels-on-Huawei-devices.patch b/patches/platform_frameworks_opt_telephony/0001-Make-better-signal-levels-on-Huawei-devices.patch
new file mode 100644
index 0000000..48a7819
--- /dev/null
+++ b/patches/platform_frameworks_opt_telephony/0001-Make-better-signal-levels-on-Huawei-devices.patch
@@ -0,0 +1,127 @@
+From 5585d35cee6b6776c291b9e0f40132eee8bb2db0 Mon Sep 17 00:00:00 2001
+From: Pierre-Hugues Husson <phh@phh.me>
+Date: Sat, 14 Apr 2018 15:53:15 +0200
+Subject: [PATCH] Make better signal levels on Huawei devices
+
+All credits to OpenKirin team, and meticulus
+
+Change-Id: I1b1b80996ee88b6107c0cfd754caa4a1bfbaf13f
+---
+ src/java/com/android/internal/telephony/RIL.java | 99 ++++++++++++++++++++++++
+ 1 file changed, 99 insertions(+)
+
+diff --git a/src/java/com/android/internal/telephony/RIL.java b/src/java/com/android/internal/telephony/RIL.java
+index 226ee8e..5392ca2 100644
+--- a/src/java/com/android/internal/telephony/RIL.java
++++ b/src/java/com/android/internal/telephony/RIL.java
+@@ -5092,8 +5092,107 @@ public final class RIL extends BaseCommands implements CommandsInterface {
+ return response;
+ }
+
++ static SignalStrength convertHalSignalStrengthHuawei(
++ android.hardware.radio.V1_0.SignalStrength signalStrength) {
++ int gsmSignalStrength = signalStrength.gw.signalStrength;
++ int gsmBitErrorRate = signalStrength.gw.bitErrorRate;
++ int mWcdmaRscp = 0;
++ int mWcdmaEcio = 0;
++ int cdmaDbm = signalStrength.cdma.dbm;
++ int cdmaEcio = signalStrength.cdma.ecio;
++ int evdoDbm = signalStrength.evdo.dbm;
++ int evdoEcio = signalStrength.evdo.ecio;
++ int evdoSnr = signalStrength.evdo.signalNoiseRatio;
++ int lteSignalStrength = signalStrength.lte.signalStrength;
++ int lteRsrp = signalStrength.lte.rsrp;
++ int lteRsrq = signalStrength.lte.rsrq;
++ int lteRssnr = signalStrength.lte.rssnr;
++ int lteCqi = signalStrength.lte.cqi;
++ int mGsm = 0;
++ int mRat = 0;
++
++ if (lteRsrp != 0) { // LTE
++ if (lteRsrp > -20) lteSignalStrength = 64; // None or Unknown
++ else if (lteRsrp >= -97) lteSignalStrength = 63; // Great
++ else if (lteRsrp >= -105) lteSignalStrength = 11; // Good
++ else if (lteRsrp >= -113) lteSignalStrength = 7; // Moderate
++ else if (lteRsrp >= -120) lteSignalStrength = 4; // Poor
++ else if (lteRsrp >= -140) lteSignalStrength = 64; // None or Unknown
++ } else if (gsmSignalStrength == 0 && lteRsrp == 0) { // 3G
++ lteRsrp = (mWcdmaRscp & 0xFF) - 256;
++ lteRsrq = (mWcdmaEcio & 0xFF) - 256;
++ if (lteRsrp > -20) { // None or Unknown
++ lteSignalStrength = 64;
++ lteRssnr = -200;
++ } else if (lteRsrp >= -85) { // Great
++ lteSignalStrength = 63;
++ lteRssnr = 300;
++ } else if (lteRsrp >= -95) { // Good
++ lteSignalStrength = 11;
++ lteRssnr = 129;
++ } else if (lteRsrp >= -105) { // Moderate
++ lteSignalStrength = 7;
++ lteRssnr = 44;
++ } else if (lteRsrp >= -115) { // Poor
++ lteSignalStrength = 4;
++ lteRssnr = 9;
++ } else if (lteRsrp >= -140) { // None or Unknown
++ lteSignalStrength = 64;
++ lteRssnr = -200;
++ }
++ } else if (mWcdmaRscp == 0 && lteRsrp == 0) { // 2G
++ lteRsrp = (gsmSignalStrength & 0xFF) - 256;
++ if (lteRsrp > -20) { // None or Unknown
++ lteSignalStrength = 64;
++ lteRsrq = -21;
++ lteRssnr = -200;
++ } else if (lteRsrp >= -85) { // Great
++ lteSignalStrength = 63;
++ lteRsrq = -3;
++ lteRssnr = 300;
++ } else if (lteRsrp >= -95) { // Good
++ lteSignalStrength = 11;
++ lteRsrq = -7;
++ lteRssnr = 129;
++ } else if (lteRsrp >= -105) { // Moderate
++ lteSignalStrength = 7;
++ lteRsrq = -12;
++ lteRssnr = 44;
++ } else if (lteRsrp >= -115) { // Poor
++ lteSignalStrength = 4;
++ lteRsrq = -17;
++ lteRssnr = 9;
++ } else if (lteRsrp >= -140) { // None or Unknown
++ lteSignalStrength = 64;
++ lteRsrq = -21;
++ lteRssnr = -200;
++ }
++ }
++
++ return new SignalStrength(gsmSignalStrength,
++ gsmSignalStrength,
++ cdmaDbm,
++ cdmaEcio,
++ evdoDbm,
++ evdoEcio,
++ evdoSnr,
++ lteSignalStrength,
++ lteRsrp,
++ lteRsrq,
++ lteRssnr,
++ lteCqi,
++ signalStrength.tdScdma.rscp,
++ false);
++ }
++
+ static SignalStrength convertHalSignalStrength(
+ android.hardware.radio.V1_0.SignalStrength signalStrength) {
++
++ String hardware = android.os.SystemProperties.get("ro.hardware", "");
++ if(hardware.contains("hi3660") || hardware.contains("hi6250") || hardware.contains("hi3670") || hardware.contains("kirin"))
++ return convertHalSignalStrengthHuawei(signalStrength);
++
++
+ return new SignalStrength(signalStrength.gw.signalStrength,
+ signalStrength.gw.bitErrorRate,
+ signalStrength.cdma.dbm,
+--
+2.7.4
+
diff --git a/patches/platform_system_core/0001-Revert-logd-add-passcred-for-logdw-socket.patch b/patches/platform_system_core/0001-Revert-logd-add-passcred-for-logdw-socket.patch
index 69b57c0..85ed78d 100644
--- a/patches/platform_system_core/0001-Revert-logd-add-passcred-for-logdw-socket.patch
+++ b/patches/platform_system_core/0001-Revert-logd-add-passcred-for-logdw-socket.patch
@@ -1,7 +1,7 @@
-From 1b1d4e8de5de1347f0cae699d8f154b82d6195f2 Mon Sep 17 00:00:00 2001
+From 57e6583545cdf028fde5aa189f8f29068dfd8fa8 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Sun, 10 Dec 2017 00:26:21 +0100
-Subject: [PATCH] Revert "logd: add "+passcred" for logdw socket"
+Subject: [PATCH 1/2] Revert "logd: add "+passcred" for logdw socket"
This reverts commit 54d8ff1121440d0ef4565ce0ab3751f82fdb393c.
diff --git a/patches/platform_system_core/0002-On-S9-disable-enable-TS-on-suspend-resume.patch b/patches/platform_system_core/0002-On-S9-disable-enable-TS-on-suspend-resume.patch
new file mode 100644
index 0000000..e3d3104
--- /dev/null
+++ b/patches/platform_system_core/0002-On-S9-disable-enable-TS-on-suspend-resume.patch
@@ -0,0 +1,103 @@
+From 849b729e175fb847bf0e497e772cffeb2b4795de Mon Sep 17 00:00:00 2001
+From: Pierre-Hugues Husson <phh@phh.me>
+Date: Sat, 26 May 2018 12:15:54 +0200
+Subject: [PATCH 2/2] On S9/+, disable/enable TS on suspend/resume
+
+---
+ libsuspend/autosuspend_wakeup_count.c | 58 +++++++++++++++++++++++++++++++++++
+ 1 file changed, 58 insertions(+)
+
+diff --git a/libsuspend/autosuspend_wakeup_count.c b/libsuspend/autosuspend_wakeup_count.c
+index 2da204a..4cdbb18 100644
+--- a/libsuspend/autosuspend_wakeup_count.c
++++ b/libsuspend/autosuspend_wakeup_count.c
+@@ -28,6 +28,8 @@
+ #include <sys/stat.h>
+ #include <sys/types.h>
+ #include <unistd.h>
++#include <stdio.h>
++#include <cutils/properties.h>
+
+ #include <log/log.h>
+
+@@ -55,14 +57,61 @@ static void update_sleep_time(bool success) {
+ sleep_time = MIN(sleep_time * 2, 60000000);
+ }
+
++const char* samsung_touchscreen_readname(const char* path) {
++ char fullPath[PATH_MAX];
++ sprintf(fullPath, "%s/name", path);
++ int fd = open(fullPath, O_RDONLY);
++
++ static char name[1024] = "unknown";
++ int len = read(fd, name, sizeof(name));
++ if(len == -1)
++ strcpy(name, "unknown");
++ else
++ name[len] = 0;
++ close(fd);
++ return name;
++}
++
++static int samsung_touchscreen_enabled_fd() {
++ int fd = -1;
++ for(int i=0; i<30; i++) {
++ char path[1024];
++ sprintf(path, "/sys/class/input/input%d", i);
++ const char* name = samsung_touchscreen_readname(path);
++ if(strcmp(name, "sec_touchscreen") == 0 ||
++ strcmp(name, "sec_touchscreen\n") == 0) {
++ char fullPath[PATH_MAX];
++ sprintf(fullPath, "%s/enabled", path);
++ fd = open(fullPath, O_RDWR);
++ if(fd == -1)
++ ALOGE("Got error %s", strerror(errno));
++ }
++ }
++ return fd;
++}
++
++static int samsung_touchscreen_set(int enable) {
++ int fd;
++ fd = samsung_touchscreen_enabled_fd();
++ if(fd == -1) return 0;
++ if(write(fd, enable ? "1" : "0", 1) == -1) return 0;
++ close(fd);
++ return 1;
++}
++
+ static void *suspend_thread_func(void *arg __attribute__((unused)))
+ {
++ char prop[PROPERTY_VALUE_MAX];
+ char buf[80];
+ char wakeup_count[20];
+ int wakeup_count_len;
+ int ret;
+ bool success = true;
+
++ property_get("ro.hardware", prop, "toto");
++ //bool samsungTs = strstr(prop, "samsungexynos9810") != NULL;
++ bool samsungTs = true;
++
+ while (1) {
+ update_sleep_time(success);
+ usleep(sleep_time);
+@@ -99,6 +148,15 @@ static void *suspend_thread_func(void *arg __attribute__((unused)))
+ ALOGV("%s: write %s to %s\n", __func__, sleep_state, SYS_POWER_STATE);
+ ret = TEMP_FAILURE_RETRY(write(state_fd, sleep_state, strlen(sleep_state)));
+ if (ret >= 0) {
++ if(samsungTs) {
++ ALOGE("Resetting Samsung TS");
++ samsung_touchscreen_set(0);
++ int ret = 0;
++ for(int i=0; i< 10 && !ret; i++) {
++ ret = samsung_touchscreen_set(1);
++ ALOGE("Resetting Samsung TS: try %d", i);
++ }
++ }
+ success = true;
+ }
+ void (*func)(bool success) = wakeup_func;
+--
+2.7.4
+
diff --git a/patches/platform_system_libvintf/0001-HACK-Support-sepolicy-vndk-26.patch b/patches/platform_system_libvintf/0001-HACK-Support-sepolicy-vndk-26.patch
new file mode 100644
index 0000000..2eb4949
--- /dev/null
+++ b/patches/platform_system_libvintf/0001-HACK-Support-sepolicy-vndk-26.patch
@@ -0,0 +1,26 @@
+From ee971dbb9ae4a9f9ad4c8c713dfe1097e91a848d Mon Sep 17 00:00:00 2001
+From: Pierre-Hugues Husson <phh@phh.me>
+Date: Tue, 1 May 2018 22:52:09 +0200
+Subject: [PATCH 1/2] HACK: Support sepolicy vndk 26
+
+Change-Id: I715a7fffb98ac0cf9d01768362bed0b95afcb687
+---
+ assemble_vintf.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/assemble_vintf.cpp b/assemble_vintf.cpp
+index 974c7fc..69d1d27 100644
+--- a/assemble_vintf.cpp
++++ b/assemble_vintf.cpp
+@@ -266,7 +266,7 @@ class AssembleVintf {
+ }
+
+ matrix->framework.mSepolicy =
+- Sepolicy(kernelSepolicyVers, {{sepolicyVers.majorVer, sepolicyVers.minorVer}});
++ Sepolicy(kernelSepolicyVers, {{sepolicyVers.majorVer, sepolicyVers.minorVer}, { 26, 0}});
+
+ Version avbMetaVersion;
+ if (!getFlag("FRAMEWORK_VBMETA_VERSION", &avbMetaVersion)) {
+--
+2.7.4
+
diff --git a/patches/platform_system_libvintf/0002-Say-we-support-AVB-1.0.patch b/patches/platform_system_libvintf/0002-Say-we-support-AVB-1.0.patch
new file mode 100644
index 0000000..8408ed1
--- /dev/null
+++ b/patches/platform_system_libvintf/0002-Say-we-support-AVB-1.0.patch
@@ -0,0 +1,25 @@
+From 98c42d9a0f3bee91b8ff4715e00ab28db4cc26b3 Mon Sep 17 00:00:00 2001
+From: Pierre-Hugues Husson <phh@phh.me>
+Date: Sun, 10 Jun 2018 23:23:31 +0200
+Subject: [PATCH 2/2] Say we support AVB 1.0
+
+Change-Id: Ica39d42e7b5fc78bc476c413a97a1c488da51fa8
+---
+ parse_xml.cpp | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/parse_xml.cpp b/parse_xml.cpp
+index 0094f81..5a6d7fa 100644
+--- a/parse_xml.cpp
++++ b/parse_xml.cpp
+@@ -862,6 +862,7 @@ struct CompatibilityMatrixConverter : public XmlNodeConverter<CompatibilityMatri
+ appendChildren(root, matrixKernelConverter, m.framework.mKernels, d);
+ appendChild(root, sepolicyConverter(m.framework.mSepolicy, d));
+ appendChild(root, avbConverter(m.framework.mAvbMetaVersion, d));
++ appendChild(root, avbConverter({1, 0}, d));
+ } else if (m.mType == SchemaType::DEVICE) {
+ appendChild(root, vndkConverter(m.device.mVndk, d));
+ }
+--
+2.7.4
+
diff --git a/patches/platform_system_netd/0001-device-Huawei-Kirin-960-accept-broken-rpfilter-match.patch b/patches/platform_system_netd/0001-device-Huawei-Kirin-960-accept-broken-rpfilter-match.patch
new file mode 100644
index 0000000..b91dd39
--- /dev/null
+++ b/patches/platform_system_netd/0001-device-Huawei-Kirin-960-accept-broken-rpfilter-match.patch
@@ -0,0 +1,29 @@
+From aef5c4c70702bfd952e037f0e8242522fa1e42b7 Mon Sep 17 00:00:00 2001
+From: Pierre-Hugues Husson <phh@phh.me>
+Date: Mon, 2 Jul 2018 22:01:43 +0200
+Subject: [PATCH] [device] ::Huawei Kirin 960:: accept broken rpfilter match
+
+How bad a security flaw is this?
+People lived with rpfilter on IPv4 for a very long time...
+
+Change-Id: I9aa63d18e54a8254133adf97bf757c03d6b66757
+---
+ server/NatController.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/server/NatController.cpp b/server/NatController.cpp
+index 58c732d..d270dd3 100644
+--- a/server/NatController.cpp
++++ b/server/NatController.cpp
+@@ -205,7 +205,7 @@ int NatController::setForwardRules(bool add, const char *intIface, const char *e
+ "*raw\n"
+ "%s %s -i %s -m rpfilter --invert ! -s fe80::/64 -j DROP\n"
+ "COMMIT\n", op, LOCAL_RAW_PREROUTING, intIface);
+- if (iptablesRestoreFunction(V6, rpfilterCmd) == -1 && add) {
++ if (iptablesRestoreFunction(V6, rpfilterCmd) == -1 && add && false) {
+ return -1;
+ }
+
+--
+2.7.4
+