Merge in upstream changes

From :https://github.com/phhusson/treble_patches

Change-Id: I785ed4d854f28f661b1b48530dc10a5adf076e74
diff --git a/patches/platform_frameworks_base/0001-Fix-backlight-control-on-Galaxy-S9.patch b/patches/platform_frameworks_base/0001-Fix-backlight-control-on-Galaxy-S9.patch
new file mode 100644
index 0000000..46691c6
--- /dev/null
+++ b/patches/platform_frameworks_base/0001-Fix-backlight-control-on-Galaxy-S9.patch
@@ -0,0 +1,37 @@
+From 83c5a5d0e192b901ec36059bf2fb1fc8d63de1a7 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 01/19] Fix backlight control on Galaxy S9(+)
+
+---
+ services/core/java/com/android/server/lights/LightsService.java | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/services/core/java/com/android/server/lights/LightsService.java b/services/core/java/com/android/server/lights/LightsService.java
+index a94ed60..762b0ae 100644
+--- a/services/core/java/com/android/server/lights/LightsService.java
++++ b/services/core/java/com/android/server/lights/LightsService.java
+@@ -21,6 +21,7 @@ import android.app.ActivityManager;
+ import android.content.Context;
+ import android.os.Handler;
+ import android.os.Message;
++import android.os.SystemProperties;
+ import android.os.Trace;
+ import android.provider.Settings;
+ import android.util.Slog;
+@@ -52,6 +53,12 @@ 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;
++		}
++
+                 int color = brightness & 0x000000ff;
+                 color = 0xff000000 | (color << 16) | (color << 8) | color;
+                 setLightLocked(color, LIGHT_FLASH_NONE, 0, 0, brightnessMode);
+-- 
+2.7.4
+
diff --git a/patches/platform_frameworks_base/0002-Relax-requirement-for-visible-flag-to-sdcards.patch b/patches/platform_frameworks_base/0002-Relax-requirement-for-visible-flag-to-sdcards.patch
new file mode 100644
index 0000000..4ce0d86
--- /dev/null
+++ b/patches/platform_frameworks_base/0002-Relax-requirement-for-visible-flag-to-sdcards.patch
@@ -0,0 +1,31 @@
+From 4547592e86f29d043daf0f3385c802949fa73193 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/19] 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)
+FBE broke adoptable storage with SDCard, hence this need.
+
+Change-Id: Ia616671c03562d1eadaff5531a5c708a62d7ad3a
+---
+ services/core/java/com/android/server/StorageManagerService.java | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java
+index 183be9b..e8f2ad1 100644
+--- a/services/core/java/com/android/server/StorageManagerService.java
++++ b/services/core/java/com/android/server/StorageManagerService.java
+@@ -1178,7 +1178,8 @@ class StorageManagerService extends IStorageManager.Stub
+ 
+             // Adoptable public disks are visible to apps, since they meet
+             // public API requirement of being in a stable location.
+-            if (vol.disk.isAdoptable()) {
++	    // Assume all SDs match this as well
++            if (vol.disk.isAdoptable() || vol.disk.isSd()) {
+                 vol.mountFlags |= VolumeInfo.MOUNT_FLAG_VISIBLE;
+             }
+ 
+-- 
+2.7.4
+
diff --git a/patches/platform_frameworks_base/0003-Also-scan-system-overlay.patch b/patches/platform_frameworks_base/0003-Also-scan-system-overlay.patch
new file mode 100644
index 0000000..a64821d
--- /dev/null
+++ b/patches/platform_frameworks_base/0003-Also-scan-system-overlay.patch
@@ -0,0 +1,52 @@
+From b3bf3329f50ba0fc4a494a772d5f76b66dc67a2c 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 03/19] Also scan /system/overlay
+
+Change-Id: Ib0223560606b80cdaaa986b159b34b4db0154589
+---
+ 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 fa9f445..1d3bf73 100644
+--- a/core/jni/android_util_AssetManager.cpp
++++ b/core/jni/android_util_AssetManager.cpp
+@@ -149,7 +149,7 @@ static void NativeVerifySystemIdmaps(JNIEnv* /*env*/, jclass /*clazz*/) {
+       }
+ 
+       // Generic idmap parameters
+-      const char* argv[8];
++      const char* argv[9];
+       int argc = 0;
+       struct stat st;
+ 
+@@ -179,6 +179,10 @@ static void NativeVerifySystemIdmaps(JNIEnv* /*env*/, jclass /*clazz*/) {
+         argv[argc++] = AssetManager::PRODUCT_OVERLAY_DIR;
+       }
+ 
++      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 c5904e0..6548215 100644
+--- a/core/jni/fd_utils.cpp
++++ b/core/jni/fd_utils.cpp
+@@ -93,7 +93,8 @@ bool FileDescriptorWhitelist::IsAllowed(const std::string& path) const {
+        || android::base::StartsWith(path, kOverlaySubdir)
+        || android::base::StartsWith(path, kVendorOverlayDir)
+        || android::base::StartsWith(path, kSystemProductOverlayDir)
+-       || android::base::StartsWith(path, kProductOverlayDir))
++       || android::base::StartsWith(path, kProductOverlayDir)
++       || 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/0004-Don-t-crash-if-there-is-IR-HAL-is-not-declared.patch b/patches/platform_frameworks_base/0004-Don-t-crash-if-there-is-IR-HAL-is-not-declared.patch
new file mode 100644
index 0000000..43cfc48
--- /dev/null
+++ b/patches/platform_frameworks_base/0004-Don-t-crash-if-there-is-IR-HAL-is-not-declared.patch
@@ -0,0 +1,25 @@
+From 89b3b71fc07b7069b7c5f345762925b9743e6361 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 04/19] 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/0005-Fix-62.patch b/patches/platform_frameworks_base/0005-Fix-62.patch
new file mode 100644
index 0000000..caf028d
--- /dev/null
+++ b/patches/platform_frameworks_base/0005-Fix-62.patch
@@ -0,0 +1,28 @@
+From ca27968613cbe47b158a690f82347586264bbe54 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 05/19] 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 62cd13b..7efbdb8 100644
+--- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
++++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
+@@ -891,7 +891,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/0006-S9-brightness-override-only-for-screen.patch b/patches/platform_frameworks_base/0006-S9-brightness-override-only-for-screen.patch
new file mode 100644
index 0000000..3ecbdb3
--- /dev/null
+++ b/patches/platform_frameworks_base/0006-S9-brightness-override-only-for-screen.patch
@@ -0,0 +1,35 @@
+From 5b5bafd457463ca4c90d3d2470703655179220ae 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 06/19] 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/0007-WIP-Fix-OP6-brightness.patch b/patches/platform_frameworks_base/0007-WIP-Fix-OP6-brightness.patch
new file mode 100644
index 0000000..8aafc40
--- /dev/null
+++ b/patches/platform_frameworks_base/0007-WIP-Fix-OP6-brightness.patch
@@ -0,0 +1,35 @@
+From c23233a753225db8dcb6c74c53c0edc0ab2be44e 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 07/19] [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/0008-Try-to-make-brightness-more-generic-using-property-s.patch b/patches/platform_frameworks_base/0008-Try-to-make-brightness-more-generic-using-property-s.patch
new file mode 100644
index 0000000..4619a1b
--- /dev/null
+++ b/patches/platform_frameworks_base/0008-Try-to-make-brightness-more-generic-using-property-s.patch
@@ -0,0 +1,31 @@
+From c87dbdb6ff897e1f25ce90acf136b4606337db00 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 08/19] 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/0009-property-matching-RROs-allow-to-prefix-the-value-wit.patch b/patches/platform_frameworks_base/0009-property-matching-RROs-allow-to-prefix-the-value-wit.patch
new file mode 100644
index 0000000..d5dd3af
--- /dev/null
+++ b/patches/platform_frameworks_base/0009-property-matching-RROs-allow-to-prefix-the-value-wit.patch
@@ -0,0 +1,35 @@
+From af7f850833c9de9d3f055406038dfe7c9108a0e3 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 09/19] 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/0010-Fix-typo-on-fnmatch-return-value-check.patch b/patches/platform_frameworks_base/0010-Fix-typo-on-fnmatch-return-value-check.patch
new file mode 100644
index 0000000..dac4cc7
--- /dev/null
+++ b/patches/platform_frameworks_base/0010-Fix-typo-on-fnmatch-return-value-check.patch
@@ -0,0 +1,25 @@
+From 88e3e3df61a84c0a569fe128e1e22776af2e9aa8 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 10/19] 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/0011-Add-Qualcomm-starlte.patch b/patches/platform_frameworks_base/0011-Add-Qualcomm-starlte.patch
new file mode 100644
index 0000000..cea8a7c
--- /dev/null
+++ b/patches/platform_frameworks_base/0011-Add-Qualcomm-starlte.patch
@@ -0,0 +1,27 @@
+From f91ab52edbb4ed99689e0347f08cb9cd135bdbc5 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 11/19] 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/0012-Galaxy-S9-remaining-of-HAL-onEnroll-is-actually-a-pe.patch b/patches/platform_frameworks_base/0012-Galaxy-S9-remaining-of-HAL-onEnroll-is-actually-a-pe.patch
new file mode 100644
index 0000000..3493467
--- /dev/null
+++ b/patches/platform_frameworks_base/0012-Galaxy-S9-remaining-of-HAL-onEnroll-is-actually-a-pe.patch
@@ -0,0 +1,30 @@
+From 880144142eec1864485ae289d6772e046453612d 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 12/19] [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 06329e57..6f09433 100644
+--- a/services/core/java/com/android/server/fingerprint/FingerprintService.java
++++ b/services/core/java/com/android/server/fingerprint/FingerprintService.java
+@@ -1046,7 +1046,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_base/0013-Show-APN-Settings-for-CDMA-carriers.patch b/patches/platform_frameworks_base/0013-Show-APN-Settings-for-CDMA-carriers.patch
new file mode 100644
index 0000000..5330a7c
--- /dev/null
+++ b/patches/platform_frameworks_base/0013-Show-APN-Settings-for-CDMA-carriers.patch
@@ -0,0 +1,25 @@
+From 879613f77988fb4b1c628fd51e6b330e02cddfc3 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 13/19] Show APN Settings for CDMA carriers
+
+---
+ telephony/java/android/telephony/CarrierConfigManager.java | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java
+index f66164c..0cf93a1 100644
+--- a/telephony/java/android/telephony/CarrierConfigManager.java
++++ b/telephony/java/android/telephony/CarrierConfigManager.java
+@@ -2019,7 +2019,7 @@ public class CarrierConfigManager {
+         sDefaults.putBoolean(KEY_MDN_IS_ADDITIONAL_VOICEMAIL_NUMBER_BOOL, false);
+         sDefaults.putBoolean(KEY_OPERATOR_SELECTION_EXPAND_BOOL, true);
+         sDefaults.putBoolean(KEY_PREFER_2G_BOOL, true);
+-        sDefaults.putBoolean(KEY_SHOW_APN_SETTING_CDMA_BOOL, false);
++        sDefaults.putBoolean(KEY_SHOW_APN_SETTING_CDMA_BOOL, true);
+         sDefaults.putBoolean(KEY_SHOW_CDMA_CHOICES_BOOL, false);
+         sDefaults.putBoolean(KEY_SMS_REQUIRES_DESTINATION_NUMBER_CONVERSION_BOOL, false);
+         sDefaults.putBoolean(KEY_SHOW_ONSCREEN_DIAL_BUTTON_BOOL, true);
+-- 
+2.7.4
+
diff --git a/patches/platform_frameworks_base/0014-Change-SignalStrentgh-to-change-behaviour-based-on-p.patch b/patches/platform_frameworks_base/0014-Change-SignalStrentgh-to-change-behaviour-based-on-p.patch
new file mode 100644
index 0000000..82f6545
--- /dev/null
+++ b/patches/platform_frameworks_base/0014-Change-SignalStrentgh-to-change-behaviour-based-on-p.patch
@@ -0,0 +1,78 @@
+From fd818b3249a795d3e231fa9346372c183099c745 Mon Sep 17 00:00:00 2001
+From: Pierre-Hugues Husson <phh@phh.me>
+Date: Mon, 6 Aug 2018 20:01:44 +0200
+Subject: [PATCH 14/19] Change SignalStrentgh to change behaviour based on
+ property
+
+Change-Id: I940ed724047567ec5195ac93ea04574c3d92f70b
+---
+ .../java/android/telephony/SignalStrength.java     | 39 +++++++++++++++-------
+ 1 file changed, 27 insertions(+), 12 deletions(-)
+
+diff --git a/telephony/java/android/telephony/SignalStrength.java b/telephony/java/android/telephony/SignalStrength.java
+index 4e56396..ff906d3 100644
+--- a/telephony/java/android/telephony/SignalStrength.java
++++ b/telephony/java/android/telephony/SignalStrength.java
+@@ -854,6 +854,7 @@ public class SignalStrength implements Parcelable {
+          * RSRQ = quality of signal dB = Number of Resource blocks*RSRP/RSSI
+          * SNR = gain = signal/noise ratio = -10log P1/P2 dB
+          */
++        String method = android.os.SystemProperties.get("persist.sys.signal.level", "default");
+         int rssiIconLevel = SIGNAL_STRENGTH_NONE_OR_UNKNOWN, rsrpIconLevel = -1, snrIconLevel = -1;
+ 
+         if (mLteRsrp > MAX_LTE_RSRP || mLteRsrp < MIN_LTE_RSRP) {
+@@ -897,6 +898,32 @@ public class SignalStrength implements Parcelable {
+                 + rsrpIconLevel + " snrIconLevel:" + snrIconLevel
+                 + " lteRsrpBoost:" + mLteRsrpBoost);
+ 
++        /* Valid values are (0-63, 99) as defined in TS 36.331 */
++        // TODO the range here is probably supposed to be (0..31, 99). It's unclear if anyone relies
++        // on the current incorrect range check, so this will be fixed in a future release with more
++        // soak time
++        if (mLteSignalStrength > 63) rssiIconLevel = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
++        else if (mLteSignalStrength >= 12) rssiIconLevel = SIGNAL_STRENGTH_GREAT;
++        else if (mLteSignalStrength >= 8) rssiIconLevel = SIGNAL_STRENGTH_GOOD;
++        else if (mLteSignalStrength >= 5) rssiIconLevel = SIGNAL_STRENGTH_MODERATE;
++        else if (mLteSignalStrength >= 0) rssiIconLevel = SIGNAL_STRENGTH_POOR;
++
++        if (DBG) log("getLTELevel - rssi:" + mLteSignalStrength + " rssiIconLevel:"
++                + rssiIconLevel);
++
++        if("rsrp".equals(method)) {
++            if(rsrpIconLevel == -1) rsrpIconLevel = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
++            return rsrpIconLevel;
++        }
++        if("rssnr".equals(method)) {
++            if(snrIconLevel == -1) snrIconLevel = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
++            return snrIconLevel;
++        }
++        if("rssi".equals(method)) {
++            if(rssiIconLevel == -1) rssiIconLevel = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
++            return rssiIconLevel;
++        }
++
+         /* Choose a measurement type to use for notification */
+         if (snrIconLevel != -1 && rsrpIconLevel != -1) {
+             /*
+@@ -911,18 +938,6 @@ public class SignalStrength implements Parcelable {
+ 
+         if (rsrpIconLevel != -1) return rsrpIconLevel;
+ 
+-        /* Valid values are (0-63, 99) as defined in TS 36.331 */
+-        // TODO the range here is probably supposed to be (0..31, 99). It's unclear if anyone relies
+-        // on the current incorrect range check, so this will be fixed in a future release with more
+-        // soak time
+-        if (mLteSignalStrength > 63) rssiIconLevel = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
+-        else if (mLteSignalStrength >= 12) rssiIconLevel = SIGNAL_STRENGTH_GREAT;
+-        else if (mLteSignalStrength >= 8) rssiIconLevel = SIGNAL_STRENGTH_GOOD;
+-        else if (mLteSignalStrength >= 5) rssiIconLevel = SIGNAL_STRENGTH_MODERATE;
+-        else if (mLteSignalStrength >= 0) rssiIconLevel = SIGNAL_STRENGTH_POOR;
+-
+-        if (DBG) log("getLteLevel - rssi:" + mLteSignalStrength + " rssiIconLevel:"
+-                + rssiIconLevel);
+         return rssiIconLevel;
+ 
+     }
+-- 
+2.7.4
+
diff --git a/patches/platform_frameworks_base/0015-idmap-Don-t-silently-ignore-RROs-with-same-priority.patch b/patches/platform_frameworks_base/0015-idmap-Don-t-silently-ignore-RROs-with-same-priority.patch
new file mode 100644
index 0000000..6d6b1e5
--- /dev/null
+++ b/patches/platform_frameworks_base/0015-idmap-Don-t-silently-ignore-RROs-with-same-priority.patch
@@ -0,0 +1,26 @@
+From 3ec335c1a6346e2f5ee03bf603839b730c12928c Mon Sep 17 00:00:00 2001
+From: Pierre-Hugues Husson <phh@phh.me>
+Date: Sun, 19 Aug 2018 10:51:06 +0200
+Subject: [PATCH 15/19] idmap: Don't silently ignore RROs with same priority
+
+Change-Id: I64a6899f1b30e0cd9e9a872b7ca83d831f038cbe
+---
+ cmds/idmap/scan.cpp | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/cmds/idmap/scan.cpp b/cmds/idmap/scan.cpp
+index 0acff23..d1dde52 100644
+--- a/cmds/idmap/scan.cpp
++++ b/cmds/idmap/scan.cpp
+@@ -29,6 +29,8 @@ namespace {
+ 
+         bool operator<(Overlay const& rhs) const
+         {
++            if(rhs.priority == priority)
++                return rhs.apk_path > apk_path;
+             return rhs.priority > priority;
+         }
+ 
+-- 
+2.7.4
+
diff --git a/patches/platform_frameworks_base/0016-Move-SysuiDarkThemeOverlay-to-system.patch b/patches/platform_frameworks_base/0016-Move-SysuiDarkThemeOverlay-to-system.patch
new file mode 100644
index 0000000..e052a73
--- /dev/null
+++ b/patches/platform_frameworks_base/0016-Move-SysuiDarkThemeOverlay-to-system.patch
@@ -0,0 +1,24 @@
+From 9629e7118d06a375d96f2967be54f3c2348b5b89 Mon Sep 17 00:00:00 2001
+From: Pierre-Hugues Husson <phh@phh.me>
+Date: Sun, 19 Aug 2018 10:57:21 +0200
+Subject: [PATCH 16/19] Move SysuiDarkThemeOverlay to /system
+
+Change-Id: I31b3edc5d1abcc1163a13e63c909fee9d27ff432
+---
+ packages/overlays/SysuiDarkThemeOverlay/Android.mk | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/packages/overlays/SysuiDarkThemeOverlay/Android.mk b/packages/overlays/SysuiDarkThemeOverlay/Android.mk
+index 7b277bc..89cfcf8 100644
+--- a/packages/overlays/SysuiDarkThemeOverlay/Android.mk
++++ b/packages/overlays/SysuiDarkThemeOverlay/Android.mk
+@@ -11,4 +11,5 @@ LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
+ LOCAL_PACKAGE_NAME := SysuiDarkThemeOverlay
+ LOCAL_SDK_VERSION := current
+ 
+-include $(BUILD_RRO_PACKAGE)
++LOCAL_IS_RUNTIME_RESOURCE_OVERLAY := true
++include $(BUILD_PACKAGE)
+-- 
+2.7.4
+
diff --git a/patches/platform_frameworks_base/0017-Reintroduce-button-backlight-and-respective-inactivi.patch b/patches/platform_frameworks_base/0017-Reintroduce-button-backlight-and-respective-inactivi.patch
new file mode 100644
index 0000000..ccee4a4
--- /dev/null
+++ b/patches/platform_frameworks_base/0017-Reintroduce-button-backlight-and-respective-inactivi.patch
@@ -0,0 +1,120 @@
+From 4459e03e52773a42d83bca5a02172d658e7fc2b9 Mon Sep 17 00:00:00 2001
+From: Ricardo Cerqueira <cyanogenmod@cerqueira.org>
+Date: Fri, 23 Nov 2012 14:23:16 +0000
+Subject: [PATCH 17/19] Reintroduce button-backlight (and respective inactivity
+ timeout)
+
+The power manager rewrite from Change I1d7a52e98f0449f76d70bf421f6a7f245957d1d7
+completely removed support for control of the button backlights, which makes
+all capacitive buttons out there stay dark. The commit message in that change
+mentions it hasn't been implemented _yet_, so this fix should be temporary
+until upstream does their own implementation
+
+[RC: Updated to 5.0]
+
+Change-Id: I6094c446e0b8c23f57d30652a3cbd35dee5e821a
+---
+ .../android/server/display/DisplayPowerController.java    | 11 +++++++++++
+ .../com/android/server/power/PowerManagerService.java     | 15 +++++++++++++++
+ 2 files changed, 26 insertions(+)
+
+diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
+index 99412c5..bb6f65c 100644
+--- a/services/core/java/com/android/server/display/DisplayPowerController.java
++++ b/services/core/java/com/android/server/display/DisplayPowerController.java
+@@ -21,6 +21,7 @@ import com.android.internal.app.IBatteryStats;
+ import com.android.server.LocalServices;
+ import com.android.server.am.BatteryStatsService;
+ import com.android.server.policy.WindowManagerPolicy;
++import com.android.server.lights.LightsManager;
+ 
+ import android.animation.Animator;
+ import android.animation.ObjectAnimator;
+@@ -141,6 +142,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
+     // Battery stats.
+     private final IBatteryStats mBatteryStats;
+ 
++    // The lights service.
++    private final LightsManager mLights;
++
+     // The sensor manager.
+     private final SensorManager mSensorManager;
+ 
+@@ -374,6 +378,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
+         mCallbacks = callbacks;
+ 
+         mBatteryStats = BatteryStatsService.getService();
++        mLights = LocalServices.getService(LightsManager.class);
+         mSensorManager = sensorManager;
+         mWindowManagerPolicy = LocalServices.getService(WindowManagerPolicy.class);
+         mBlanker = blanker;
+@@ -769,6 +774,12 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
+         // Use zero brightness when screen is off.
+         if (state == Display.STATE_OFF) {
+             brightness = PowerManager.BRIGHTNESS_OFF;
++            mLights.getLight(LightsManager.LIGHT_ID_BUTTONS).setBrightness(brightness);
++        }
++
++        // Disable button lights when dozing
++        if (state == Display.STATE_DOZE || state == Display.STATE_DOZE_SUSPEND) {
++            mLights.getLight(LightsManager.LIGHT_ID_BUTTONS).setBrightness(PowerManager.BRIGHTNESS_OFF);
+         }
+ 
+         // Always use the VR brightness when in the VR state.
+diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
+index 697801f..9b8584e 100644
+--- a/services/core/java/com/android/server/power/PowerManagerService.java
++++ b/services/core/java/com/android/server/power/PowerManagerService.java
+@@ -222,6 +222,12 @@ public final class PowerManagerService extends SystemService
+     // Persistent property for last reboot reason
+     private static final String LAST_REBOOT_PROPERTY = "persist.sys.boot.reason";
+ 
++    // Add button light timeout
++    private static final int BUTTON_ON_DURATION = 5 * 1000;
++
++    // File location for last reboot reason
++    private static final String LAST_REBOOT_LOCATION = "/data/misc/reboot/last_reboot_reason";
++
+     private final Context mContext;
+     private final ServiceThread mHandlerThread;
+     private final PowerManagerHandler mHandler;
+@@ -242,6 +248,7 @@ public final class PowerManagerService extends SystemService
+     private SettingsObserver mSettingsObserver;
+     private DreamManagerInternal mDreamManager;
+     private Light mAttentionLight;
++    private Light mButtonsLight;
+ 
+     private final Object mLock = LockGuard.installNewLock(LockGuard.INDEX_POWER);
+ 
+@@ -770,6 +777,7 @@ public final class PowerManagerService extends SystemService
+ 
+             mLightsManager = getLocalService(LightsManager.class);
+             mAttentionLight = mLightsManager.getLight(LightsManager.LIGHT_ID_ATTENTION);
++            mButtonsLight = mLightsManager.getLight(LightsManager.LIGHT_ID_BUTTONS);
+ 
+             // Initialize display power management.
+             mDisplayManagerInternal.initPowerManagement(
+@@ -1953,6 +1961,7 @@ public final class PowerManagerService extends SystemService
+                 final long screenOffTimeout = getScreenOffTimeoutLocked(sleepTimeout);
+                 final long screenDimDuration = getScreenDimDurationLocked(screenOffTimeout);
+                 final boolean userInactiveOverride = mUserInactiveOverrideFromWindowManager;
++                final int screenBrightness = mScreenBrightnessSettingDefault;
+                 final long nextProfileTimeout = getNextProfileTimeoutLocked(now);
+ 
+                 mUserActivitySummary = 0;
+@@ -1960,6 +1969,12 @@ public final class PowerManagerService extends SystemService
+                     nextTimeout = mLastUserActivityTime
+                             + screenOffTimeout - screenDimDuration;
+                     if (now < nextTimeout) {
++                        if (now > mLastUserActivityTime + BUTTON_ON_DURATION) {
++                            mButtonsLight.setBrightness(0);
++                        } else {
++                            mButtonsLight.setBrightness(screenBrightness);
++                            nextTimeout = now + BUTTON_ON_DURATION;
++                        }
+                         mUserActivitySummary = USER_ACTIVITY_SCREEN_BRIGHT;
+                     } else {
+                         nextTimeout = mLastUserActivityTime + screenOffTimeout;
+-- 
+2.7.4
+
diff --git a/patches/platform_frameworks_base/0018-power-Disable-keyboard-button-lights-while-dozing-dr.patch b/patches/platform_frameworks_base/0018-power-Disable-keyboard-button-lights-while-dozing-dr.patch
new file mode 100644
index 0000000..7411c5f
--- /dev/null
+++ b/patches/platform_frameworks_base/0018-power-Disable-keyboard-button-lights-while-dozing-dr.patch
@@ -0,0 +1,31 @@
+From 70a48b3381acd2b8cf0ef090c188ae95635d5921 Mon Sep 17 00:00:00 2001
+From: Steve Kondik <steve@cyngn.com>
+Date: Sat, 3 Jan 2015 05:13:26 -0800
+Subject: [PATCH 18/19] power: Disable keyboard/button lights while
+ dozing/dreaming
+
+ * With hardkeys and doze mode enabled, entering suspend results in
+   an epic battle over the lights. It's a bad situation. Disable
+   them when we're sleepy.
+
+Change-Id: I7f1fc35a1573717d1ea101a07c4171d6f66d1553
+---
+ services/core/java/com/android/server/power/PowerManagerService.java | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
+index 9b8584e..0620f2e 100644
+--- a/services/core/java/com/android/server/power/PowerManagerService.java
++++ b/services/core/java/com/android/server/power/PowerManagerService.java
+@@ -1965,7 +1965,7 @@ public final class PowerManagerService extends SystemService
+                 final long nextProfileTimeout = getNextProfileTimeoutLocked(now);
+ 
+                 mUserActivitySummary = 0;
+-                if (mLastUserActivityTime >= mLastWakeTime) {
++                if (mWakefulness == WAKEFULNESS_AWAKE && mLastUserActivityTime >= mLastWakeTime) {
+                     nextTimeout = mLastUserActivityTime
+                             + screenOffTimeout - screenDimDuration;
+                     if (now < nextTimeout) {
+-- 
+2.7.4
+
diff --git a/patches/platform_frameworks_base/0019-It-is-okay-not-to-have-wifi-in-SystemUI-on-FDE-lock.patch b/patches/platform_frameworks_base/0019-It-is-okay-not-to-have-wifi-in-SystemUI-on-FDE-lock.patch
new file mode 100644
index 0000000..aab3dbc
--- /dev/null
+++ b/patches/platform_frameworks_base/0019-It-is-okay-not-to-have-wifi-in-SystemUI-on-FDE-lock.patch
@@ -0,0 +1,54 @@
+From bfa2cabcbae2e6b67acda5fad79e98104f66b915 Mon Sep 17 00:00:00 2001
+From: Pierre-Hugues Husson <phh@phh.me>
+Date: Mon, 20 Aug 2018 22:27:02 +0200
+Subject: [PATCH 19/19] It is okay not to have wifi in SystemUI (on FDE lock)
+
+---
+ .../SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java     | 2 +-
+ .../com/android/systemui/statusbar/policy/HotspotControllerImpl.java  | 1 +
+ .../com/android/systemui/statusbar/policy/WifiSignalController.java   | 4 +++-
+ 3 files changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
+index d8f0886..76cd70d 100644
+--- a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
++++ b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
+@@ -207,7 +207,7 @@ public class WifiTracker implements LifecycleObserver, OnStart, OnStop, OnDestro
+         mConnectivityManager = connectivityManager;
+ 
+         // check if verbose logging developer option has been turned on or off
+-        sVerboseLogging = (mWifiManager.getVerboseLoggingLevel() > 0);
++        sVerboseLogging = mWifiManager != null ? (mWifiManager.getVerboseLoggingLevel() > 0) : false;
+ 
+         mFilter = filter;
+ 
+diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java
+index d6d0673..07db5f8 100644
+--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java
++++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java
+@@ -113,6 +113,7 @@ public class HotspotControllerImpl implements HotspotController, WifiManager.Sof
+      */
+     private void updateWifiStateListeners(boolean shouldListen) {
+         mWifiStateReceiver.setListening(shouldListen);
++        if(mWifiManager == null) return;
+         if (shouldListen) {
+             mWifiManager.registerSoftApCallback(
+                     this,
+diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java
+index e5e576d..78b3050 100644
+--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java
++++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java
+@@ -59,7 +59,9 @@ public class WifiSignalController extends
+         mHasMobileData = hasMobileData;
+         Handler handler = new WifiHandler(Looper.getMainLooper());
+         mWifiChannel = new AsyncChannel();
+-        Messenger wifiMessenger = wifiManager.getWifiServiceMessenger();
++        Messenger wifiMessenger = null;
++        if(wifiManager != null)
++            wifiMessenger = wifiManager.getWifiServiceMessenger();
+         if (wifiMessenger != null) {
+             mWifiChannel.connect(context, handler, wifiMessenger);
+         }
+-- 
+2.7.4
+