Initial commit for Android 10, syncing up to v201

This commit is contained in:
Andy CrossGate Yan
2019-10-23 09:02:48 +00:00
commit 017c525e4f
111 changed files with 8014 additions and 0 deletions

View File

@@ -0,0 +1,56 @@
From 9f8c77fea17968dd20e76b83b28f2fce2630a087 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/36] Fix backlight control on Galaxy S9(+)
Change-Id: I1fbbb47939c377597ef8ad6b88b2acea5f4acaa6
---
.../android/server/lights/LightsService.java | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/services/core/java/com/android/server/lights/LightsService.java b/services/core/java/com/android/server/lights/LightsService.java
index ac906bb23d3..e23e2cd3c4d 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.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.os.PowerManager;
+import android.os.SystemProperties;
import android.os.Trace;
import android.provider.Settings;
import android.util.Slog;
@@ -71,6 +72,7 @@ public class LightsService extends SystemService {
": brightness=0x" + Integer.toHexString(brightness));
return;
}
+
// Ideally, we'd like to set the brightness mode through the SF/HWC as well, but
// right now we just fall back to the old path through Lights brightessMode is
// anything but USER or the device shouldBeInLowPersistenceMode().
@@ -86,11 +88,18 @@ public class LightsService extends SystemService {
}
SurfaceControl.setDisplayBrightness(mDisplayToken,
(float) brightness / mSurfaceControlMaximumBrightness);
- } else {
- int color = brightness & 0x000000ff;
- color = 0xff000000 | (color << 16) | (color << 8) | color;
- setLightLocked(color, LIGHT_FLASH_NONE, 0, 0, brightnessMode);
+ 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.17.1

View File

@@ -0,0 +1,31 @@
From ae073ba9abbd86e82d06261ad260ea27fbc04f14 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] 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
---
.../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 72f40cc0351..20ffd687e89 100644
--- a/services/core/java/com/android/server/StorageManagerService.java
+++ b/services/core/java/com/android/server/StorageManagerService.java
@@ -1282,7 +1282,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;
} else if (vol.disk.isSd()) {
vol.mountFlags |= VolumeInfo.MOUNT_FLAG_VISIBLE;
--
2.17.1

View File

@@ -0,0 +1,52 @@
From 78dcdf304f0baa325fe8d39e2e7cb64b46b9a089 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/36] 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 2b471fec9c8..4518c7e66a5 100644
--- a/core/jni/android_util_AssetManager.cpp
+++ b/core/jni/android_util_AssetManager.cpp
@@ -163,7 +163,7 @@ static void NativeVerifySystemIdmaps(JNIEnv* /*env*/, jclass /*clazz*/) {
}
// Generic idmap parameters
- const char* argv[10];
+ const char* argv[11];
int argc = 0;
struct stat st;
@@ -207,6 +207,10 @@ static void NativeVerifySystemIdmaps(JNIEnv* /*env*/, jclass /*clazz*/) {
argv[argc++] = AssetManager::OEM_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 fa5f931470b..488c2f8e9e8 100644
--- a/core/jni/fd_utils.cpp
+++ b/core/jni/fd_utils.cpp
@@ -118,7 +118,8 @@ bool FileDescriptorWhitelist::IsAllowed(const std::string& path) const {
|| android::base::StartsWith(path, kSystemOdmOverlayDir)
|| android::base::StartsWith(path, kOdmOverlayDir)
|| android::base::StartsWith(path, kSystemOemOverlayDir)
- || android::base::StartsWith(path, kOemOverlayDir))
+ || android::base::StartsWith(path, kOemOverlayDir)
+ || android::base::StartsWith(path, "/system/overlay"))
&& android::base::EndsWith(path, kApkSuffix)
&& path.find("/../") == std::string::npos) {
return true;
--
2.17.1

View File

@@ -0,0 +1,25 @@
From e1a57d1f38bb45e69c9a2178ab34fd08adafe810 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/36] 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 2ed6c77baa0..c574a03c9a3 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.17.1

View File

@@ -0,0 +1,28 @@
From c318f6086d6c12bb92de652440ee985256fd60c2 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/36] Fix(?) #62
---
.../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 6a4dbc8d722..39535c32860 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
@@ -1117,7 +1117,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.17.1

View File

@@ -0,0 +1,36 @@
From 6556ccbc704c6cb4a3bae5e9411082f6e1e1ff71 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/36] S9 brightness override only for screen
Change-Id: Ie16a46336fa64850014b962429f7a20ff569222f
---
.../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 e23e2cd3c4d..327979166c2 100644
--- a/services/core/java/com/android/server/lights/LightsService.java
+++ b/services/core/java/com/android/server/lights/LightsService.java
@@ -91,11 +91,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.17.1

View File

@@ -0,0 +1,35 @@
From 21d4fc3b58aa737f78378c0df4987604bf4e32e0 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/36] [WIP] Fix OP6 brightness
---
.../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 327979166c2..f0035c67f4a 100644
--- a/services/core/java/com/android/server/lights/LightsService.java
+++ b/services/core/java/com/android/server/lights/LightsService.java
@@ -97,6 +97,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.17.1

View File

@@ -0,0 +1,31 @@
From 7235d15f8ba322a1806a8736751cac88cecb9b53 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/36] Try to make brightness more generic using property set
by rw-system
---
.../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 f0035c67f4a..529026a1e7c 100644
--- a/services/core/java/com/android/server/lights/LightsService.java
+++ b/services/core/java/com/android/server/lights/LightsService.java
@@ -100,9 +100,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.17.1

View File

@@ -0,0 +1,35 @@
From 5d557f64f712c73d97669f10532b5a2867c6f1d3 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/36] 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 d69dd79555a..2be6d23ac78 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.17.1

View File

@@ -0,0 +1,25 @@
From a95da9d8c3508280233a42dcbfc6440fbc95c563 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/36] 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 2be6d23ac78..0acff23d031 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.17.1

View File

@@ -0,0 +1,27 @@
From 695e8613f1bcee3f03269eb7f28ed9a91b41e2ad 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/36] Add Qualcomm starlte
---
.../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 529026a1e7c..65f9ea87ae5 100644
--- a/services/core/java/com/android/server/lights/LightsService.java
+++ b/services/core/java/com/android/server/lights/LightsService.java
@@ -93,7 +93,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.17.1

View File

@@ -0,0 +1,33 @@
From f1176c850abc148002e5986db5ccecac116b91c9 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/36] [Galaxy S9] "remaining" of HAL onEnroll is actually a
percent of progress
Change-Id: I8a586163eca93ae3c5bd968d1e7ddbf994ddcc91
---
.../server/biometrics/fingerprint/FingerprintService.java | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/services/core/java/com/android/server/biometrics/fingerprint/FingerprintService.java b/services/core/java/com/android/server/biometrics/fingerprint/FingerprintService.java
index 24fd1b7a6da..dc56a95217c 100644
--- a/services/core/java/com/android/server/biometrics/fingerprint/FingerprintService.java
+++ b/services/core/java/com/android/server/biometrics/fingerprint/FingerprintService.java
@@ -588,7 +588,13 @@ public class FingerprintService extends BiometricServiceBase {
final Fingerprint fingerprint =
new Fingerprint(getBiometricUtils().getUniqueName(getContext(), groupId),
groupId, fingerId, deviceId);
- FingerprintService.super.handleEnrollResult(fingerprint, 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;
+
+ FingerprintService.super.handleEnrollResult(fingerprint, remaining2);
});
}
--
2.17.1

View File

@@ -0,0 +1,25 @@
From ca9cc0e485753ac43ea8fba76638b00495669f39 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/36] 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 19f8203f750..4e0fcbb7358 100755
--- a/telephony/java/android/telephony/CarrierConfigManager.java
+++ b/telephony/java/android/telephony/CarrierConfigManager.java
@@ -3073,7 +3073,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_SUPPORT_EMERGENCY_SMS_OVER_IMS_BOOL, false);
--
2.17.1

View File

@@ -0,0 +1,26 @@
From 1597769b8c2d3faabd76ba20368409293709a2d5 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 14/36] 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 0acff23d031..d1dde52732f 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.17.1

View File

@@ -0,0 +1,31 @@
From 807d3807f81b4893cd5186c60cfcf94920281a41 Mon Sep 17 00:00:00 2001
From: Steve Kondik <steve@cyngn.com>
Date: Sat, 3 Jan 2015 05:13:26 -0800
Subject: [PATCH 16/36] 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
---
.../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 5cccc77ac53..e7d5315a2b9 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -2040,7 +2040,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.17.1

View File

@@ -0,0 +1,44 @@
From d7a6847541ff67793487d581067ca724b3144c60 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Tue, 21 Aug 2018 22:24:02 +0200
Subject: [PATCH] Don't wake IR HAL to the infinity and beyond
---
.../core/java/com/android/server/ConsumerIrService.java | 7 -------
services/core/jni/com_android_server_ConsumerIrService.cpp | 2 +-
2 files changed, 1 insertion(+), 8 deletions(-)
diff --git a/services/core/java/com/android/server/ConsumerIrService.java b/services/core/java/com/android/server/ConsumerIrService.java
index 2ed6c77baa0..82ec033bc30 100644
--- a/services/core/java/com/android/server/ConsumerIrService.java
+++ b/services/core/java/com/android/server/ConsumerIrService.java
@@ -46,13 +46,6 @@ public class ConsumerIrService extends IConsumerIrService.Stub {
mWakeLock.setReferenceCounted(true);
mHasNativeHal = halOpen();
- if (mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CONSUMER_IR)) {
- 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!");
- }
}
@Override
diff --git a/services/core/jni/com_android_server_ConsumerIrService.cpp b/services/core/jni/com_android_server_ConsumerIrService.cpp
index 2ca348b3ae4..148fba9a688 100644
--- a/services/core/jni/com_android_server_ConsumerIrService.cpp
+++ b/services/core/jni/com_android_server_ConsumerIrService.cpp
@@ -36,7 +36,7 @@ static sp<IConsumerIr> mHal;
static jboolean halOpen(JNIEnv* /* env */, jobject /* obj */) {
// TODO(b/31632518)
- mHal = IConsumerIr::getService();
+ mHal = IConsumerIr::tryGetService();
return mHal != nullptr;
}
--
2.17.1

View File

@@ -0,0 +1,28 @@
From 410c6135bef8bc83e49b182f7d3408c46ca47584 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Thu, 23 Aug 2018 23:39:16 +0200
Subject: [PATCH 18/36] Switch samsung light fingerprint match to regexp, to
include Note9
---
.../core/java/com/android/server/lights/LightsService.java | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/services/core/java/com/android/server/lights/LightsService.java b/services/core/java/com/android/server/lights/LightsService.java
index 65f9ea87ae5..aa014bf9ff4 100644
--- a/services/core/java/com/android/server/lights/LightsService.java
+++ b/services/core/java/com/android/server/lights/LightsService.java
@@ -93,9 +93,7 @@ public class LightsService extends SystemService {
if(mId == 0) {
String fp = SystemProperties.get("ro.vendor.build.fingerprint", "hello");
- if(
- fp.contains("starlte") || fp.contains("star2lte") ||
- fp.contains("starqlte") || fp.contains("star2qlte")) {
+ if(fp.matches(".*(crown|star)[q2]*lte.*")) {
setLightLocked(brightness*100, LIGHT_FLASH_HARDWARE, 0, 0, brightnessMode);
return;
}
--
2.17.1

View File

@@ -0,0 +1,30 @@
From 378df1aac9a2b439e20dcc60d216f8c15974fdca Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Mon, 27 Aug 2018 00:47:13 +0200
Subject: [PATCH 19/36] Add a property toggle to enable high brightness range
on samsung device
---
.../core/java/com/android/server/lights/LightsService.java | 6 +++++-
1 file changed, 5 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 aa014bf9ff4..a18ae0d6159 100644
--- a/services/core/java/com/android/server/lights/LightsService.java
+++ b/services/core/java/com/android/server/lights/LightsService.java
@@ -94,7 +94,11 @@ public class LightsService extends SystemService {
if(mId == 0) {
String fp = SystemProperties.get("ro.vendor.build.fingerprint", "hello");
if(fp.matches(".*(crown|star)[q2]*lte.*")) {
- setLightLocked(brightness*100, LIGHT_FLASH_HARDWARE, 0, 0, brightnessMode);
+ int newBrightness = brightness * 100;
+ if(SystemProperties.getBoolean("persist.sys.samsung.full_brightness", false)) {
+ newBrightness = (int) (brightness * 40960.0 / 255.0);
+ }
+ setLightLocked(newBrightness, LIGHT_FLASH_HARDWARE, 0, 0, brightnessMode);
return;
}
--
2.17.1

View File

@@ -0,0 +1,39 @@
From 6c3996a1e42192a481ac029932fc1c4eade50488 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Wed, 29 Aug 2018 11:05:54 +0200
Subject: [PATCH 20/36] Add a property to override pre-o max aspect ratio
Change-Id: Id001a19fab7680feda841202b6e91c490d0d5ffa
---
.../core/java/com/android/server/wm/ActivityRecord.java | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index 371a9435643..5b61f215f3f 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -2837,6 +2837,12 @@ final class ActivityRecord extends ConfigurationContainer {
// TODO(b/36505427): Consider moving this method and similar ones to ConfigurationContainer.
private void updateOverrideConfiguration() {
final Configuration overrideConfig = mTmpConfig;
+ if(info.applicationInfo.targetSdkVersion < O) {
+ try {
+ maxAspectRatio = Float.parseFloat(SystemProperties.get("persist.sys.max_aspect_ratio.pre_o", ""));
+ } catch (Throwable t) {}
+ Log.d("PHH", "Overrode aspect ratio because pre-o to " + maxAspectRatio);
+ }
if (shouldUseSizeCompatMode()) {
if (mCompatDisplayInsets != null) {
// The override configuration is set only once in size compatibility mode.
@@ -3070,7 +3076,7 @@ final class ActivityRecord extends ConfigurationContainer {
// TODO(b/36505427): Consider moving this method and similar ones to ConfigurationContainer.
private void computeBounds(Rect outBounds, Rect containingAppBounds) {
outBounds.setEmpty();
- final float maxAspectRatio = info.maxAspectRatio;
+ float maxAspectRatio = info.maxAspectRatio;
final ActivityStack stack = getActivityStack();
final float minAspectRatio = info.minAspectRatio;
--
2.17.1

View File

@@ -0,0 +1,26 @@
From 05ed3ef7fba2ae7fc012ca296c60af4238c91550 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Tue, 28 Aug 2018 20:39:26 +0200
Subject: [PATCH 21/36] Add japanese S9
---
.../core/java/com/android/server/lights/LightsService.java | 3 ++-
1 file changed, 2 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 a18ae0d6159..37e03880f1e 100644
--- a/services/core/java/com/android/server/lights/LightsService.java
+++ b/services/core/java/com/android/server/lights/LightsService.java
@@ -93,7 +93,8 @@ public class LightsService extends SystemService {
if(mId == 0) {
String fp = SystemProperties.get("ro.vendor.build.fingerprint", "hello");
- if(fp.matches(".*(crown|star)[q2]*lte.*")) {
+ if(fp.matches(".*(crown|star)[q2]*lte.*") ||
+ fp.matches(".*(SC-0[23]K|SCV3[89]).*")) {
int newBrightness = brightness * 100;
if(SystemProperties.getBoolean("persist.sys.samsung.full_brightness", false)) {
newBrightness = (int) (brightness * 40960.0 / 255.0);
--
2.17.1

View File

@@ -0,0 +1,36 @@
From 089eae49049ea602363949e8593acfd5447530c6 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Thu, 8 Nov 2018 23:04:03 +0100
Subject: [PATCH 22/36] Re-order services so that it works even without qtaguid
---
.../com/android/server/net/NetworkPolicyManagerService.java | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
index 6c34e1313f7..337b22c3587 100644
--- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
+++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
@@ -725,6 +725,9 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
Trace.traceBegin(Trace.TRACE_TAG_NETWORK, "systemReady");
final int oldPriority = Process.getThreadPriority(Process.myTid());
try {
+ mUsageStats = LocalServices.getService(UsageStatsManagerInternal.class);
+ mNetworkStats = LocalServices.getService(NetworkStatsManagerInternal.class);
+
// Boost thread's priority during system server init
Process.setThreadPriority(Process.THREAD_PRIORITY_FOREGROUND);
if (!isBandwidthControlEnabled()) {
@@ -732,9 +735,6 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
return;
}
- mUsageStats = LocalServices.getService(UsageStatsManagerInternal.class);
- mNetworkStats = LocalServices.getService(NetworkStatsManagerInternal.class);
-
synchronized (mUidRulesFirstLock) {
synchronized (mNetworkPoliciesSecondLock) {
updatePowerSaveWhitelistUL();
--
2.17.1

View File

@@ -0,0 +1,33 @@
From 1fa1945234225aa9d6201a7da2990fd17b544dc7 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Sun, 10 Mar 2019 19:35:06 +0100
Subject: [PATCH 23/36] Different value for astarqlte. Probably more devices to
add later
---
.../java/com/android/server/lights/LightsService.java | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/services/core/java/com/android/server/lights/LightsService.java b/services/core/java/com/android/server/lights/LightsService.java
index 37e03880f1e..993483c342b 100644
--- a/services/core/java/com/android/server/lights/LightsService.java
+++ b/services/core/java/com/android/server/lights/LightsService.java
@@ -93,6 +93,15 @@ public class LightsService extends SystemService {
if(mId == 0) {
String fp = SystemProperties.get("ro.vendor.build.fingerprint", "hello");
+ if(fp.matches(".*astarqlte.*")) {
+ int newBrightness = brightness;
+ if(SystemProperties.getBoolean("persist.sys.samsung.full_brightness", false)) {
+ newBrightness = (int) (brightness * 365.0 / 255.0);
+ }
+ setLightLocked(newBrightness, LIGHT_FLASH_HARDWARE, 0, 0, brightnessMode);
+ return;
+ }
+
if(fp.matches(".*(crown|star)[q2]*lte.*") ||
fp.matches(".*(SC-0[23]K|SCV3[89]).*")) {
int newBrightness = brightness * 100;
--
2.17.1

View File

@@ -0,0 +1,70 @@
From 8049bd5138e52042ed47b8b0700753cb77b57641 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Sun, 24 Mar 2019 23:05:14 +0100
Subject: [PATCH] Support new samsung light hal
Change-Id: I88ca834894320129737b4e31fa8f7e5ee918889a
---
services/core/jni/Android.bp | 1 +
...om_android_server_lights_LightsService.cpp | 19 +++++++++++++++++++
2 files changed, 20 insertions(+)
diff --git a/services/core/jni/Android.bp b/services/core/jni/Android.bp
index fdcefd42316..d8645012e24 100644
--- a/services/core/jni/Android.bp
+++ b/services/core/jni/Android.bp
@@ -135,6 +135,7 @@ cc_defaults {
"android.system.suspend@1.0",
"suspend_control_aidl_interface-cpp",
"vendor.lineage.power@1.0",
+ "vendor.samsung.hardware.light@2.0",
],
static_libs: [
diff --git a/services/core/jni/com_android_server_lights_LightsService.cpp b/services/core/jni/com_android_server_lights_LightsService.cpp
index 35d8219651d..20de7985d1d 100644
--- a/services/core/jni/com_android_server_lights_LightsService.cpp
+++ b/services/core/jni/com_android_server_lights_LightsService.cpp
@@ -23,6 +23,8 @@
#include <android/hardware/light/2.0/ILight.h>
#include <android/hardware/light/2.0/types.h>
+#include <vendor/samsung/hardware/light/2.0/ISecLight.h>
+#include <vendor/samsung/hardware/light/2.0/types.h>
#include <android-base/chrono_utils.h>
#include <utils/misc.h>
#include <utils/Log.h>
@@ -40,6 +42,8 @@ using Type = ::android::hardware::light::V2_0::Type;
template<typename T>
using Return = ::android::hardware::Return<T>;
+using ISecLight = ::vendor::samsung::hardware::light::V2_0::ISecLight;
+using SecType = ::vendor::samsung::hardware::light::V2_0::SecType;
static bool sLightSupported = true;
static bool validate(jint light, jint flash, jint brightness) {
@@ -151,6 +155,21 @@ static void setLight_native(
colorAlpha = (colorAlpha * brightnessLevel) / 0xFF;
colorARGB = (colorAlpha << 24) + (colorARGB & 0x00FFFFFF);
}
+
+ sp<ISecLight> secHal = ISecLight::getService();
+
+ if(secHal != nullptr) {
+ SecType type = static_cast<SecType>(light);
+ LightState state = constructState(
+ colorARGB, flashMode, onMS, offMS, brightnessMode);
+
+ {
+ android::base::Timer t;
+ Return<Status> ret = secHal->setLightSec(type, state);
+ processReturn(ret, static_cast<Type>(light), state);
+ if (t.duration() > 50ms) ALOGD("Excessive delay setting light");
+ }
+ }
Type type = static_cast<Type>(light);
LightState state = constructState(
--
2.17.1

View File

@@ -0,0 +1,28 @@
From 454a0898504d1af98f687ebdbc8bc7b13a3d3ff5 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Wed, 24 Apr 2019 20:09:53 +0200
Subject: [PATCH 25/36] Fix backlight on S10*. Add an additional property to
check, so testers can try it more easily
---
.../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 993483c342b..a578ed894c4 100644
--- a/services/core/java/com/android/server/lights/LightsService.java
+++ b/services/core/java/com/android/server/lights/LightsService.java
@@ -102,7 +102,9 @@ public class LightsService extends SystemService {
return;
}
- if(fp.matches(".*(crown|star)[q2]*lte.*") ||
+ if(SystemProperties.getInt("persist.sys.phh.samsung_backlight", 0) == 1 ||
+ fp.matches(".*beyond.*lte.*") ||
+ fp.matches(".*(crown|star)[q2]*lte.*") ||
fp.matches(".*(SC-0[23]K|SCV3[89]).*")) {
int newBrightness = brightness * 100;
if(SystemProperties.getBoolean("persist.sys.samsung.full_brightness", false)) {
--
2.17.1

View File

@@ -0,0 +1,48 @@
From 571bf63da97814631982b28b41f96781a13848a8 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Tue, 2 Jul 2019 21:15:07 +0200
Subject: [PATCH 26/36] Make samsung light HAL more overridable
---
.../android/server/lights/LightsService.java | 24 ++++++++++++-------
1 file changed, 15 insertions(+), 9 deletions(-)
diff --git a/services/core/java/com/android/server/lights/LightsService.java b/services/core/java/com/android/server/lights/LightsService.java
index a578ed894c4..ac102c94770 100644
--- a/services/core/java/com/android/server/lights/LightsService.java
+++ b/services/core/java/com/android/server/lights/LightsService.java
@@ -102,16 +102,22 @@ public class LightsService extends SystemService {
return;
}
- if(SystemProperties.getInt("persist.sys.phh.samsung_backlight", 0) == 1 ||
- fp.matches(".*beyond.*lte.*") ||
- fp.matches(".*(crown|star)[q2]*lte.*") ||
- fp.matches(".*(SC-0[23]K|SCV3[89]).*")) {
- int newBrightness = brightness * 100;
- if(SystemProperties.getBoolean("persist.sys.samsung.full_brightness", false)) {
- newBrightness = (int) (brightness * 40960.0 / 255.0);
+ int useSamsungBacklight = SystemProperties.getInt("persist.sys.phh.samsung_backlight", -1);
+ if(useSamsungBacklight != 0) {
+ if(useSamsungBacklight > 0 ||
+ fp.matches(".*beyond.*lte.*") ||
+ fp.matches(".*(crown|star)[q2]*lte.*") ||
+ fp.matches(".*(SC-0[23]K|SCV3[89]).*")) {
+ int ratio = 100;
+ if(useSamsungBacklight > 1)
+ ratio = useSamsungBacklight;
+ int newBrightness = brightness * ratio;
+ if(SystemProperties.getBoolean("persist.sys.samsung.full_brightness", false)) {
+ newBrightness = (int) (brightness * 40960.0 / 255.0);
+ }
+ setLightLocked(newBrightness, LIGHT_FLASH_HARDWARE, 0, 0, brightnessMode);
+ return;
}
- setLightLocked(newBrightness, LIGHT_FLASH_HARDWARE, 0, 0, brightnessMode);
- return;
}
boolean qcomExtendBrightness = SystemProperties.getBoolean("persist.extend.brightness", false);
--
2.17.1

View File

@@ -0,0 +1,29 @@
From d02ed45de2a9ad381a735ae0649f61dbca1f1d41 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Tue, 2 Jul 2019 21:19:29 +0200
Subject: [PATCH 27/36] Make Samsung fingerprint broken HAL overridable
Change-Id: I8be38daa7c80fdb61e9209f12215e6daea171d03
---
.../server/biometrics/fingerprint/FingerprintService.java | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/services/core/java/com/android/server/biometrics/fingerprint/FingerprintService.java b/services/core/java/com/android/server/biometrics/fingerprint/FingerprintService.java
index dc56a95217c..19593e7e047 100644
--- a/services/core/java/com/android/server/biometrics/fingerprint/FingerprintService.java
+++ b/services/core/java/com/android/server/biometrics/fingerprint/FingerprintService.java
@@ -590,8 +590,10 @@ public class FingerprintService extends BiometricServiceBase {
groupId, fingerId, deviceId);
int remaining2 = remaining;
+ int overrideSamsung = android.os.SystemProperties.getInt("persist.sys.phh.samsung_fingerprint", -1);
+
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")))
+ if(overrideSamsung == 1 || (overrideSamsung != 0 && fp != null && fp.startsWith("samsung/")))
remaining2 = 100 - remaining2;
FingerprintService.super.handleEnrollResult(fingerprint, remaining2);
--
2.17.1

View File

@@ -0,0 +1,37 @@
From 677389d4f112ca9368d55e1eb661727e5974eeb1 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Sun, 11 Aug 2019 10:30:37 +0200
Subject: [PATCH 29/36] Add property to use linear brightness slider
---
.../com/android/settingslib/display/BrightnessUtils.java | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/packages/SettingsLib/src/com/android/settingslib/display/BrightnessUtils.java b/packages/SettingsLib/src/com/android/settingslib/display/BrightnessUtils.java
index 55723f9d8ed..da8ce4a67e9 100644
--- a/packages/SettingsLib/src/com/android/settingslib/display/BrightnessUtils.java
+++ b/packages/SettingsLib/src/com/android/settingslib/display/BrightnessUtils.java
@@ -50,7 +50,12 @@ public class BrightnessUtils {
* @param max The maximum acceptable value for the setting.
* @return The corresponding setting value.
*/
+ private static final boolean useLinearBrightness = android.os.SystemProperties.getBoolean("persist.sys.phh.linear_brightness", false);
public static final int convertGammaToLinear(int val, int min, int max) {
+ if(useLinearBrightness) {
+ if(val < 4) return 1;
+ return val/4;
+ }
final float normalizedVal = MathUtils.norm(0, GAMMA_SPACE_MAX, val);
final float ret;
if (normalizedVal <= R) {
@@ -87,6 +92,7 @@ public class BrightnessUtils {
* @return The corresponding slider value
*/
public static final int convertLinearToGamma(int val, int min, int max) {
+ if(useLinearBrightness) return val*4;
// For some reason, HLG normalizes to the range [0, 12] rather than [0, 1]
final float normalizedVal = MathUtils.norm(min, max, val) * 12;
final float ret;
--
2.17.1

View File

@@ -0,0 +1,45 @@
From f93124e38386cc549fa02126c776098923f73ed7 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Mon, 12 Aug 2019 23:08:26 +0200
Subject: [PATCH 30/36] Add support for samsung touch proximity sensor as
fallback to real proximity sensor
---
.../server/display/DisplayPowerController.java | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
index fb381c33cbc..a262c86b7c7 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
@@ -529,6 +529,13 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
if (!DEBUG_PRETEND_PROXIMITY_SENSOR_ABSENT) {
mProximitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
+ if(mProximitySensor == null) {
+ List<Sensor> sensors = mSensorManager.getSensorList(Sensor.TYPE_ALL);
+ for(Sensor sensor: sensors) {
+ if("com.samsung.sensor.touch_proximity".equals(sensor.getStringType()))
+ mProximitySensor = sensor;
+ }
+ }
if (mProximitySensor != null) {
mProximityThreshold = Math.min(mProximitySensor.getMaximumRange(),
TYPICAL_PROXIMITY_THRESHOLD);
@@ -1944,6 +1951,13 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
public void onSensorChanged(SensorEvent event) {
if (mProximitySensorEnabled) {
final long time = SystemClock.uptimeMillis();
+ if("com.samsung.sensor.touch_proximity".equals(mProximitySensor.getStringType())) {
+ int v = (int)event.values[0];
+ boolean positive = (v <= 4);
+ android.util.Log.d("PHH", "Samsung sensor changed " + positive + ":" + v);
+ handleProximitySensorEvent(time, positive);
+ return;
+ }
final float distance = event.values[0];
boolean positive = distance >= 0.0f && distance < mProximityThreshold;
handleProximitySensorEvent(time, positive);
--
2.17.1

View File

@@ -0,0 +1,30 @@
From f852fefd22c754345767a7c3d3024f4f93791a3d Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Wed, 14 Aug 2019 08:50:47 +0200
Subject: [PATCH 31/36] Use Samsung power HAL
Samsung likes to have two android.hardware.power@1.0 implementation
side-by-side, one that works, one that doesn't.
Pick the one that works.
---
.../core/jni/com_android_server_power_PowerManagerService.cpp | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/services/core/jni/com_android_server_power_PowerManagerService.cpp b/services/core/jni/com_android_server_power_PowerManagerService.cpp
index 73bb579bd27..a211eef3d24 100644
--- a/services/core/jni/com_android_server_power_PowerManagerService.cpp
+++ b/services/core/jni/com_android_server_power_PowerManagerService.cpp
@@ -92,7 +92,9 @@ static bool checkAndClearExceptionFromCallback(JNIEnv* env, const char* methodNa
// The caller must be holding gPowerHalMutex.
static void connectPowerHalLocked() {
if (gPowerHalExists && gPowerHalV1_0_ == nullptr) {
- gPowerHalV1_0_ = IPowerV1_0::getService();
+ gPowerHalV1_0_ = IPowerV1_0::getService("miscpower");
+ if(gPowerHalV1_0_ == nullptr)
+ gPowerHalV1_0_ = IPowerV1_0::getService();
if (gPowerHalV1_0_ != nullptr) {
ALOGI("Loaded power HAL 1.0 service");
// Try cast to powerHAL V1_1
--
2.17.1

View File

@@ -0,0 +1,31 @@
From 32ce2b67710daf2e8b81f99a3660210f96d04f3a Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Wed, 14 Aug 2019 23:36:45 +0200
Subject: [PATCH 32/36] Also add com.samsung.sensor.physical_proximity (if
available, it is more a true proximity sensor than touch proximity sensor)
---
.../com/android/server/display/DisplayPowerController.java | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
index a262c86b7c7..7c38f62b256 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
@@ -529,6 +529,13 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
if (!DEBUG_PRETEND_PROXIMITY_SENSOR_ABSENT) {
mProximitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
+ if(mProximitySensor == null) {
+ List<Sensor> sensors = mSensorManager.getSensorList(Sensor.TYPE_ALL);
+ for(Sensor sensor: sensors) {
+ if("com.samsung.sensor.physical_proximity".equals(sensor.getStringType()))
+ mProximitySensor = sensor;
+ }
+ }
if(mProximitySensor == null) {
List<Sensor> sensors = mSensorManager.getSensorList(Sensor.TYPE_ALL);
for(Sensor sensor: sensors) {
--
2.17.1

View File

@@ -0,0 +1,413 @@
From b15c825ccb48260a85695db41aff138787d1817f Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Sun, 24 Mar 2019 22:48:39 +0100
Subject: [PATCH] wip
Change-Id: I50fa9a7a670cef5b93fc4a3a027f1587b1214831
---
Android.bp | 2 +
services/core/Android.bp | 1 +
.../biometrics/fingerprint/FacolaView.java | 210 ++++++++++++++++++
.../fingerprint/FingerprintService.java | 26 ++-
.../testharness/TestHarnessModeService.java | 7 +-
.../com/android/server/wm/ActivityRecord.java | 6 -
...om_android_server_lights_LightsService.cpp | 15 +-
7 files changed, 255 insertions(+), 12 deletions(-)
create mode 100644 services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
diff --git a/Android.bp b/Android.bp
index 16abdbf79de..d01dc639c8f 100644
--- a/Android.bp
+++ b/Android.bp
@@ -777,6 +777,8 @@ java_defaults {
"android.hardware.vibrator-V1.2-java",
"android.hardware.vibrator-V1.3-java",
"android.hardware.wifi-V1.0-java-constants",
+ "vendor.mediatek.hardware.radio-V2.0-java",
+ "vendor.samsung.hardware.radio-V1.2-java",
"devicepolicyprotosnano",
],
diff --git a/services/core/Android.bp b/services/core/Android.bp
index ee26710cf7b..2e7118da1c0 100644
--- a/services/core/Android.bp
+++ b/services/core/Android.bp
@@ -55,6 +55,7 @@ java_library_static {
"dnsresolver_aidl_interface-V2-java",
"netd_aidl_interface-V2-java",
"netd_event_listener_interface-java",
+ "vendor.xiaomi.hardware.fingerprintextension-V1.0-java",
],
}
diff --git a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
new file mode 100644
index 00000000000..8829bcb7e48
--- /dev/null
+++ b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
@@ -0,0 +1,210 @@
+/**
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.biometrics.fingerprint;
+
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.content.Context;
+import android.view.View.OnTouchListener;
+import android.view.View;
+import android.widget.ImageView;
+import android.view.MotionEvent;
+import android.util.Slog;
+
+import android.view.WindowManager;
+import android.graphics.PixelFormat;
+import android.view.Gravity;
+
+import java.io.PrintWriter;
+
+import vendor.xiaomi.hardware.fingerprintextension.V1_0.IXiaomiFingerprint;
+
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.ServiceManager;
+
+public class FacolaView extends ImageView implements OnTouchListener {
+ private final int mX, mY, mW, mH;
+ private final Paint mPaintFingerprint = new Paint();
+ private final Paint mPaintShow = new Paint();
+ private IXiaomiFingerprint mXiaomiFingerprint = null;
+ private boolean mInsideCircle = false;
+ private final WindowManager.LayoutParams mParams = new WindowManager.LayoutParams();
+
+ private final static float UNTOUCHED_DIM = .1f;
+ private final static float TOUCHED_DIM = .9f;
+
+ private final HandlerThread mHandlerThread;
+ private final Handler mHandler;
+
+ private final WindowManager mWM;
+ FacolaView(Context context) {
+ super(context);
+
+ mHandlerThread = new HandlerThread("FacolaThread");
+ mHandlerThread.start();
+ mHandler = new Handler(mHandlerThread.getLooper());
+
+ String[] location = android.os.SystemProperties.get("persist.vendor.sys.fp.fod.location.X_Y", "").split(",");
+ String[] size = android.os.SystemProperties.get("persist.vendor.sys.fp.fod.size.width_height", "").split(",");
+ Slog.d("PHH-Enroll", "FacolaView hello");
+ if(size.length == 2 && location.length == 2) {
+ Slog.d("PHH-Enroll", "Got real values");
+ mX = Integer.parseInt(location[0]);
+ mY = Integer.parseInt(location[1]);
+ mW = Integer.parseInt(size[0]);
+ mH = Integer.parseInt(size[1]);
+ } else {
+ mX = -1;
+ mY = -1;
+ mW = -1;
+ mH = -1;
+ }
+
+ mPaintFingerprint.setAntiAlias(true);
+ mPaintFingerprint.setColor(Color.GREEN);
+
+ mPaintShow.setAntiAlias(true);
+ mPaintShow.setColor(Color.argb(0x18, 0x00, 0xff, 0x00));
+ setOnTouchListener(this);
+ mWM = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);
+ Slog.d("PHH-Enroll", "Created facola...");
+ try {
+ if(mW != -1)
+ mXiaomiFingerprint = IXiaomiFingerprint.getService();
+ } catch(Exception e) {
+ Slog.d("PHH-Enroll", "Failed getting xiaomi fingerprint service", e);
+ }
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ super.onDraw(canvas);
+
+ Slog.d("PHH-Enroll", "Drawing at " + mX + ", " + mY + ", " + mW + ", " + mH);
+ //TODO w!=h?
+ if(mInsideCircle) {
+ try {
+ int nitValue = 3;
+ if(mXiaomiFingerprint != null)
+ mXiaomiFingerprint.extCmd(0xa, nitValue);
+ } catch(Exception e) {
+ Slog.d("PHH-Enroll", "Failed calling xiaomi fp extcmd");
+ }
+
+ canvas.drawCircle(mW/2, mH/2, (float) (mW/2.0f), this.mPaintFingerprint);
+ } else {
+ try {
+ if(mXiaomiFingerprint != null)
+ mXiaomiFingerprint.extCmd(0xa, 0);
+ } catch(Exception e) {
+ Slog.d("PHH-Enroll", "Failed calling xiaomi fp extcmd");
+ }
+ canvas.drawCircle(mW/2, mH/2, (float) (mW/2.0f), this.mPaintShow);
+ }
+ }
+
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ float x = event.getAxisValue(MotionEvent.AXIS_X);
+ float y = event.getAxisValue(MotionEvent.AXIS_Y);
+
+ boolean newInside = (x > 0 && x < mW) && (y > 0 && y < mW);
+ if(event.getAction() == MotionEvent.ACTION_UP)
+ newInside = false;
+
+ Slog.d("PHH-Enroll", "Got action " + event.getAction() + ", x = " + x + ", y = " + y + ", inside = " + mInsideCircle + "/" + newInside);
+ if(newInside == mInsideCircle) return mInsideCircle;
+ mInsideCircle = newInside;
+
+ invalidate();
+
+ if(!mInsideCircle) {
+ mParams.screenBrightness = .0f;
+ mParams.dimAmount = UNTOUCHED_DIM;
+ mWM.updateViewLayout(this, mParams);
+ return false;
+ }
+
+ mParams.dimAmount = TOUCHED_DIM;
+ mParams.screenBrightness = 1.0f;
+ mWM.updateViewLayout(this, mParams);
+
+ return true;
+ }
+
+ public void show() {
+ Slog.d("PHH-Enroll", "Show", new Exception());
+ if(mX == -1 || mY == -1 || mW == -1 || mH == -1) return;
+
+ try {
+ PrintWriter writer = new PrintWriter("/sys/devices/virtual/touch/tp_dev/fod_status", "UTF-8");
+ writer.println("1");
+ writer.close();
+ } catch(Exception e) {
+ Slog.d("PHH-Enroll", "Failed setting fod status for touchscreen");
+ }
+
+ mParams.x = mX;
+ mParams.y = mY;
+
+ mParams.height = mW;
+ mParams.width = mH;
+ mParams.format = PixelFormat.TRANSLUCENT;
+
+ mParams.type = WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY;
+ mParams.setTitle("Fingerprint on display");
+ mParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
+ WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH |
+ WindowManager.LayoutParams.FLAG_DIM_BEHIND |
+ WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
+ mParams.dimAmount = UNTOUCHED_DIM;
+
+ mParams.packageName = "android";
+
+ mParams.gravity = Gravity.TOP | Gravity.LEFT;
+ mHandler.post( () -> {
+ mWM.addView(this, mParams);
+ });
+
+ }
+
+ public void hide() {
+ Slog.d("PHH-Enroll", "Hide", new Exception());
+ if(mX == -1 || mY == -1 || mW == -1 || mH == -1) return;
+
+ try {
+ if(mXiaomiFingerprint != null)
+ mXiaomiFingerprint.extCmd(0xa, 0);
+ } catch(Exception e) {
+ Slog.d("PHH-Enroll", "Failed calling xiaomi fp extcmd");
+ }
+ try {
+ PrintWriter writer = new PrintWriter("/sys/devices/virtual/touch/tp_dev/fod_status", "UTF-8");
+ writer.println("0");
+ writer.close();
+ } catch(Exception e) {
+ Slog.d("PHH-Enroll", "Failed setting fod status for touchscreen");
+ }
+
+ Slog.d("PHH-Enroll", "Removed facola");
+ mHandler.post( () -> {
+ mWM.removeView(this);
+ });
+ }
+}
diff --git a/services/core/java/com/android/server/biometrics/fingerprint/FingerprintService.java b/services/core/java/com/android/server/biometrics/fingerprint/FingerprintService.java
index 19593e7e047..c7de87126e8 100644
--- a/services/core/java/com/android/server/biometrics/fingerprint/FingerprintService.java
+++ b/services/core/java/com/android/server/biometrics/fingerprint/FingerprintService.java
@@ -120,8 +120,10 @@ public class FingerprintService extends BiometricServiceBase {
}
}
}
+ private FacolaView mFacola;
private final class FingerprintAuthClient extends AuthenticationClientImpl {
+
@Override
protected boolean isFingerprint() {
return true;
@@ -170,6 +172,26 @@ public class FingerprintService extends BiometricServiceBase {
return super.handleFailedAttempt();
}
+
+ @Override
+ public boolean onAcquired(int acquiredInfo, int vendorCode) {
+ boolean result = super.onAcquired(acquiredInfo, vendorCode);
+ android.util.Log.d("PHH-Enroll", "acquired ret " + result);
+ if(result) mFacola.hide();
+ return result;
+ }
+
+ @Override
+ public int start() {
+ mFacola.show();
+ return super.start();
+ }
+
+ @Override
+ public int stop(boolean initiatedByClient) {
+ mFacola.hide();
+ return super.stop(initiatedByClient);
+ }
}
/**
@@ -180,7 +202,6 @@ public class FingerprintService extends BiometricServiceBase {
/**
* The following methods contain common code which is shared in biometrics/common.
*/
-
@Override // Binder call
public long preEnroll(IBinder token) {
checkPermission(MANAGE_FINGERPRINT);
@@ -725,6 +746,7 @@ public class FingerprintService extends BiometricServiceBase {
mAlarmManager = context.getSystemService(AlarmManager.class);
context.registerReceiver(mLockoutReceiver, new IntentFilter(getLockoutResetIntent()),
getLockoutBroadcastPermission(), null /* handler */);
+ mFacola = new FacolaView(context);
}
@Override
@@ -952,6 +974,7 @@ public class FingerprintService extends BiometricServiceBase {
Slog.w(TAG, "startPreEnroll: no fingerprint HAL!");
return 0;
}
+ mFacola.show();
try {
return daemon.preEnroll();
} catch (RemoteException e) {
@@ -966,6 +989,7 @@ public class FingerprintService extends BiometricServiceBase {
Slog.w(TAG, "startPostEnroll: no fingerprint HAL!");
return 0;
}
+ mFacola.hide();
try {
return daemon.postEnroll();
} catch (RemoteException e) {
diff --git a/services/core/java/com/android/server/testharness/TestHarnessModeService.java b/services/core/java/com/android/server/testharness/TestHarnessModeService.java
index fcf87ee2a4b..0aa948417c1 100644
--- a/services/core/java/com/android/server/testharness/TestHarnessModeService.java
+++ b/services/core/java/com/android/server/testharness/TestHarnessModeService.java
@@ -150,7 +150,12 @@ public class TestHarnessModeService extends SystemService {
+ "PersistentDataBlockManagerInternal was bound!");
return null;
}
- byte[] testHarnessModeData = blockManager.getTestHarnessModeData();
+ byte[] testHarnessModeData = null;
+ try {
+ testHarnessModeData = blockManager.getTestHarnessModeData();
+ } catch(Exception e) {
+ Slog.e(TAG, "Failed to read block for test harness", e);
+ }
if (testHarnessModeData == null || testHarnessModeData.length == 0) {
// There's no data to apply, so leave it as-is.
return null;
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index 479babc4c7d..1f972dd4918 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -2833,12 +2833,6 @@ final class ActivityRecord extends ConfigurationContainer {
// TODO(b/36505427): Consider moving this method and similar ones to ConfigurationContainer.
private void updateOverrideConfiguration() {
final Configuration overrideConfig = mTmpConfig;
- if(info.applicationInfo.targetSdkVersion < O) {
- try {
- maxAspectRatio = Float.parseFloat(SystemProperties.get("persist.sys.max_aspect_ratio.pre_o", ""));
- } catch (Throwable t) {}
- Log.d("PHH", "Overrode aspect ratio because pre-o to " + maxAspectRatio);
- }
if (shouldUseSizeCompatMode()) {
if (mCompatDisplayInsets != null) {
// The override configuration is set only once in size compatibility mode.
diff --git a/services/core/jni/com_android_server_lights_LightsService.cpp b/services/core/jni/com_android_server_lights_LightsService.cpp
index 20de7985d1d..2b50d04233e 100644
--- a/services/core/jni/com_android_server_lights_LightsService.cpp
+++ b/services/core/jni/com_android_server_lights_LightsService.cpp
@@ -46,6 +46,9 @@ using ISecLight = ::vendor::samsung::hardware::light::V2_0::ISecLight;
using SecType = ::vendor::samsung::hardware::light::V2_0::SecType;
static bool sLightSupported = true;
+static sp<ISecLight> sSecHal;
+static bool sSecTried = false;
+
static bool validate(jint light, jint flash, jint brightness) {
bool valid = true;
@@ -155,20 +158,24 @@ static void setLight_native(
colorAlpha = (colorAlpha * brightnessLevel) / 0xFF;
colorARGB = (colorAlpha << 24) + (colorARGB & 0x00FFFFFF);
}
-
- sp<ISecLight> secHal = ISecLight::getService();
- if(secHal != nullptr) {
+ if(!sSecTried) {
+ sSecHal = ISecLight::getService();
+ sSecTried = true;
+ }
+
+ if(sSecHal != nullptr) {
SecType type = static_cast<SecType>(light);
LightState state = constructState(
colorARGB, flashMode, onMS, offMS, brightnessMode);
{
android::base::Timer t;
- Return<Status> ret = secHal->setLightSec(type, state);
+ Return<Status> ret = sSecHal->setLightSec(type, state);
processReturn(ret, static_cast<Type>(light), state);
if (t.duration() > 50ms) ALOGD("Excessive delay setting light");
}
+ return;
}
Type type = static_cast<Type>(light);
--
2.17.1

View File

@@ -0,0 +1,65 @@
From 8167bee50010c872b82a2183e0ac17779b6b565e Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Mon, 12 Aug 2019 23:10:21 +0200
Subject: [PATCH 34/36] User statsd/incidentd arent known to init 8.0. disable
those services
Change-Id: I074654e194f764ffbc6961ff0ae304e36a9b5d1e
---
cmds/incidentd/incidentd.rc | 10 +++++-----
cmds/statsd/statsd.rc | 18 +++++++++---------
2 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/cmds/incidentd/incidentd.rc b/cmds/incidentd/incidentd.rc
index 9c16a1c52e8..cc20c936fda 100644
--- a/cmds/incidentd/incidentd.rc
+++ b/cmds/incidentd/incidentd.rc
@@ -12,11 +12,11 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-service incidentd /system/bin/incidentd
- class main
- user incidentd
- group incidentd log readproc
- capabilities KILL SYS_PTRACE
+#service incidentd /system/bin/incidentd
+# class main
+# user incidentd
+# group incidentd log readproc
+# capabilities KILL SYS_PTRACE
on post-fs-data
# Create directory for incidentd
diff --git a/cmds/statsd/statsd.rc b/cmds/statsd/statsd.rc
index a98ecd586b4..564cf98d0a9 100644
--- a/cmds/statsd/statsd.rc
+++ b/cmds/statsd/statsd.rc
@@ -12,15 +12,15 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-service statsd /system/bin/statsd
- class main
- socket statsdw dgram+passcred 0222 statsd statsd
- user statsd
- group statsd log
- writepid /dev/cpuset/system-background/tasks
-
-on property:ro.statsd.enable=false
- stop statsd
+#service statsd /system/bin/statsd
+# class main
+# socket statsdw dgram+passcred 0222 statsd statsd
+# user statsd
+# group statsd log
+# writepid /dev/cpuset/system-background/tasks
+#
+#on property:ro.statsd.enable=false
+# stop statsd
on post-fs-data
# Create directory for statsd
--
2.17.1

View File

@@ -0,0 +1,31 @@
From e73eb752f04a301bb4195a40ef3d73be5bb705d6 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Thu, 12 Sep 2019 20:38:08 +0200
Subject: [PATCH 35/36] Check for samsung light service everytime
This is needed because it is possible sec light service isn't ready at
that time.
TODO: check that the services exists at all, so that this is done only
on Samsung devices
Change-Id: I30f049f3b06f83c455301b589b3558ff384ec300
---
services/core/jni/com_android_server_lights_LightsService.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/services/core/jni/com_android_server_lights_LightsService.cpp b/services/core/jni/com_android_server_lights_LightsService.cpp
index bea321da890..75793a7c0f2 100644
--- a/services/core/jni/com_android_server_lights_LightsService.cpp
+++ b/services/core/jni/com_android_server_lights_LightsService.cpp
@@ -150,7 +150,7 @@ static void setLight_native(
if(!sSecTried) {
sSecHal = ISecLight::getService();
- sSecTried = true;
+ //sSecTried = true;
}
if(sSecHal != nullptr) {
--
2.17.1

View File

@@ -0,0 +1,121 @@
From f2c2a6a4707dde7f62d29aa5b204d96f9693e0e0 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Thu, 12 Sep 2019 20:39:50 +0200
Subject: [PATCH 36/36] Forawrdport Samsung "fod" support for ultrasound fp
Change-Id: I9f787a01dab922cd94f9e552a6f3f53a00ca8448
---
.../biometrics/fingerprint/FacolaView.java | 61 ++++++++++++++++++-
1 file changed, 58 insertions(+), 3 deletions(-)
diff --git a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
index 8829bcb7e48..f61582990cf 100644
--- a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
+++ b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
@@ -30,6 +30,9 @@ import android.view.WindowManager;
import android.graphics.PixelFormat;
import android.view.Gravity;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
import java.io.PrintWriter;
import vendor.xiaomi.hardware.fingerprintextension.V1_0.IXiaomiFingerprint;
@@ -53,9 +56,12 @@ public class FacolaView extends ImageView implements OnTouchListener {
private final Handler mHandler;
private final WindowManager mWM;
+ private final boolean samsungFod = samsungHasCmd("fod_enable");
FacolaView(Context context) {
super(context);
+ android.util.Log.d("PHH", "Samsung FOD " + samsungFod);
+
mHandlerThread = new HandlerThread("FacolaThread");
mHandlerThread.start();
mHandler = new Handler(mHandlerThread.getLooper());
@@ -64,7 +70,7 @@ public class FacolaView extends ImageView implements OnTouchListener {
String[] size = android.os.SystemProperties.get("persist.vendor.sys.fp.fod.size.width_height", "").split(",");
Slog.d("PHH-Enroll", "FacolaView hello");
if(size.length == 2 && location.length == 2) {
- Slog.d("PHH-Enroll", "Got real values");
+ Slog.d("PHH-Enroll", "Got real values");
mX = Integer.parseInt(location[0]);
mY = Integer.parseInt(location[1]);
mW = Integer.parseInt(size[0]);
@@ -149,7 +155,10 @@ public class FacolaView extends ImageView implements OnTouchListener {
}
public void show() {
- Slog.d("PHH-Enroll", "Show", new Exception());
+ Slog.d("PHH-Enroll", "Show", new Exception());
+ if(samsungFod) {
+ samsungCmd("fod_enable,1,1");
+ }
if(mX == -1 || mY == -1 || mW == -1 || mH == -1) return;
try {
@@ -185,7 +194,10 @@ public class FacolaView extends ImageView implements OnTouchListener {
}
public void hide() {
- Slog.d("PHH-Enroll", "Hide", new Exception());
+ Slog.d("PHH-Enroll", "Hide", new Exception());
+ if(samsungFod) {
+ samsungCmd("fod_enable,0");
+ }
if(mX == -1 || mY == -1 || mW == -1 || mH == -1) return;
try {
@@ -207,4 +219,47 @@ public class FacolaView extends ImageView implements OnTouchListener {
mWM.removeView(this);
});
}
+
+ private static boolean samsungHasCmd(String cmd) {
+ try {
+ File f = new File("/sys/devices/virtual/sec/tsp/cmd_list");
+ if(!f.exists()) return false;
+
+ BufferedReader b = new BufferedReader(new FileReader(f));
+ String line = null;
+ while( (line = b.readLine()) != null) {
+ if(line.equals(cmd)) return true;
+ }
+ return false;
+ } catch(Exception e) {
+ return false;
+ }
+ }
+
+ private static String readFile(String path) {
+ try {
+ File f = new File(path);
+
+ BufferedReader b = new BufferedReader(new FileReader(f));
+ return b.readLine();
+ } catch(Exception e) {
+ return null;
+ }
+ }
+
+ private static void samsungCmd(String cmd) {
+ try {
+ PrintWriter writer = new PrintWriter("/sys/devices/virtual/sec/tsp/cmd", "UTF-8");
+ writer.println(cmd);
+ writer.close();
+
+ String status = readFile("/sys/devices/virtual/sec/tsp/cmd_status");
+ String ret = readFile("/sys/devices/virtual/sec/tsp/cmd_result");
+
+ android.util.Log.d("PHH", "Sending command " + cmd + " returned " + ret + ":" + status);
+ } catch(Exception e) {
+ android.util.Log.d("PHH", "Failed sending command " + cmd, e);
+ }
+ }
+
}
--
2.17.1

View File

@@ -0,0 +1,166 @@
From f1e202e71f6ab47a1870aa91e65d8c777770b88d Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Mon, 14 Oct 2019 23:50:46 +0200
Subject: [PATCH 37/38] Scan /system/overlay and fix support for properties in
idmap2
Change-Id: Ic04b5b1cc7b5d8cee67b1e2fdaa8aa793546b6d6
---
cmds/idmap2/idmap2/Scan.cpp | 6 ++++-
cmds/idmap2/include/idmap2/ResourceUtils.h | 3 +++
cmds/idmap2/libidmap2/ResourceUtils.cpp | 26 +++++++++++++++++++
.../android/content/pm/PackageParser.java | 9 ++++++-
core/jni/android_util_AssetManager.cpp | 3 +++
.../server/pm/PackageManagerService.java | 6 +++++
6 files changed, 51 insertions(+), 2 deletions(-)
diff --git a/cmds/idmap2/idmap2/Scan.cpp b/cmds/idmap2/idmap2/Scan.cpp
index cfac5f31e2e..adac1ef88cf 100644
--- a/cmds/idmap2/idmap2/Scan.cpp
+++ b/cmds/idmap2/idmap2/Scan.cpp
@@ -159,13 +159,17 @@ Result<Unit> Scan(const std::vector<std::string>& args) {
Result<OverlayManifestInfo> overlay_info =
ExtractOverlayManifestInfo(path, /* assert_overlay */ false);
if (!overlay_info) {
- return overlay_info.GetError();
+ continue;
}
if (!overlay_info->is_static) {
continue;
}
+ if (!overlay_info->property_match) {
+ continue;
+ }
+
if (overlay_info->target_package.empty() ||
overlay_info->target_package != target_package_name) {
continue;
diff --git a/cmds/idmap2/include/idmap2/ResourceUtils.h b/cmds/idmap2/include/idmap2/ResourceUtils.h
index 8797a788dd1..0f98f4d1a2d 100644
--- a/cmds/idmap2/include/idmap2/ResourceUtils.h
+++ b/cmds/idmap2/include/idmap2/ResourceUtils.h
@@ -30,6 +30,9 @@ namespace android::idmap2::utils {
struct OverlayManifestInfo {
std::string target_package; // NOLINT(misc-non-private-member-variables-in-classes)
std::string target_name; // NOLINT(misc-non-private-member-variables-in-classes)
+ std::string property_name; // NOLINT(misc-non-private-member-variables-in-classes)
+ std::string property_value; // NOLINT(misc-non-private-member-variables-in-classes)
+ bool property_match; // NOLINT(misc-non-private-member-variables-in-classes)
bool is_static; // NOLINT(misc-non-private-member-variables-in-classes)
int priority = -1; // NOLINT(misc-non-private-member-variables-in-classes)
};
diff --git a/cmds/idmap2/libidmap2/ResourceUtils.cpp b/cmds/idmap2/libidmap2/ResourceUtils.cpp
index 71ba3f0f1ac..7fda402b80f 100644
--- a/cmds/idmap2/libidmap2/ResourceUtils.cpp
+++ b/cmds/idmap2/libidmap2/ResourceUtils.cpp
@@ -18,7 +18,9 @@
#include <memory>
#include <string>
+#include <fnmatch.h>
+#include "android-base/properties.h"
#include "androidfw/StringPiece.h"
#include "androidfw/Util.h"
#include "idmap2/Result.h"
@@ -93,6 +95,30 @@ Result<OverlayManifestInfo> ExtractOverlayManifestInfo(const std::string& path,
info.target_name = iter->second;
}
+ iter = tag->find("requiredSystemPropertyName");
+ if (iter != tag->end()) {
+ info.property_name = iter->second;
+ }
+
+ iter = tag->find("requiredSystemPropertyValue");
+ if (iter != tag->end()) {
+ info.property_value = iter->second;
+ }
+
+ info.property_match = false;
+ if(!info.property_name.empty() && !info.property_value.empty()) {
+ std::string prop = android::base::GetProperty(info.property_name, "");
+ if(info.property_value == prop) {
+ info.property_match = true;
+ }
+ if(info.property_value[0] == '+') {
+ info.property_match =
+ fnmatch(info.property_value.c_str()+1, prop.c_str(), 0) == 0;
+ }
+ } else {
+ info.property_match = true;
+ }
+
iter = tag->find("isStatic");
if (iter != tag->end()) {
info.is_static = std::stoul(iter->second) != 0U;
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index b3776787cc2..2147cc61728 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -1353,6 +1353,7 @@ public class PackageParser {
} catch (PackageParserException e) {
throw e;
} catch (Exception e) {
+ android.util.Log.d("PHH", "failed reading manifest because of", e);
throw new PackageParserException(INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION,
"Failed to read manifest from " + apkPath, e);
} finally {
@@ -1392,6 +1393,7 @@ public class PackageParser {
} catch (PackageParserException e) {
throw e;
} catch (Exception e) {
+ android.util.Log.d("PHH", "failed reading manifest because of", e);
throw new PackageParserException(INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION,
"Failed to read manifest from " + apkPath, e);
} finally {
@@ -2556,7 +2558,12 @@ public class PackageParser {
// check property value - make sure it is both set and equal to expected value
final String currValue = SystemProperties.get(propName);
- return (currValue != null && currValue.equals(propValue));
+ if(propValue.charAt(0) == '+') {
+ String valRegexp = propValue.replace("*", ".*").substring(1);
+ return currValue != null && currValue.matches(valRegexp);
+ } else {
+ return (currValue != null && currValue.equals(propValue));
+ }
}
/**
diff --git a/core/jni/android_util_AssetManager.cpp b/core/jni/android_util_AssetManager.cpp
index 4518c7e66a5..9e1b6db9ad9 100644
--- a/core/jni/android_util_AssetManager.cpp
+++ b/core/jni/android_util_AssetManager.cpp
@@ -233,6 +233,9 @@ static jobjectArray NativeCreateIdmapsForStaticOverlaysTargetingAndroid(JNIEnv*
// --input-directory can be given multiple times, but idmap2 expects the directory to exist
std::vector<std::string> input_dirs;
struct stat st;
+ if (stat("/system/overlay", &st) == 0) {
+ input_dirs.push_back("/system/overlay");
+ }
if (stat(AssetManager::VENDOR_OVERLAY_DIR, &st) == 0) {
input_dirs.push_back(AssetManager::VENDOR_OVERLAY_DIR);
}
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 7469e099421..203eb793610 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -2608,6 +2608,12 @@ public class PackageManagerService extends IPackageManager.Stub
// any apps.)
// For security and version matching reason, only consider overlay packages if they
// reside in the right directory.
+ scanDirTracedLI(new File("/system/overlay"),
+ mDefParseFlags
+ | PackageParser.PARSE_IS_SYSTEM_DIR,
+ scanFlags
+ | SCAN_AS_SYSTEM,
+ 0);
scanDirTracedLI(new File(VENDOR_OVERLAY_DIR),
mDefParseFlags
| PackageParser.PARSE_IS_SYSTEM_DIR,
--
2.17.1

View File

@@ -0,0 +1,97 @@
From 9bba3cbb885f9917c120bfc7f072002f9e8cd4ed Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Tue, 22 Oct 2019 00:33:23 +0200
Subject: [PATCH 38/38] Improve FacolaView life cycle, though it is still
missing few cases. It might require to change BiometricServiceBase for actual
fix
Change-Id: Ida96f8aca360c23cd5535f0ee92fd77dada2ebec
---
.../server/biometrics/fingerprint/FacolaView.java | 9 ++++++++-
.../biometrics/fingerprint/FingerprintService.java | 14 ++++++++++++++
2 files changed, 22 insertions(+), 1 deletion(-)
diff --git a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
index f61582990cf..4ff373a108d 100644
--- a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
+++ b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
@@ -57,6 +57,8 @@ public class FacolaView extends ImageView implements OnTouchListener {
private final WindowManager mWM;
private final boolean samsungFod = samsungHasCmd("fod_enable");
+
+ private boolean mHidden = true;
FacolaView(Context context) {
super(context);
@@ -106,7 +108,7 @@ public class FacolaView extends ImageView implements OnTouchListener {
//TODO w!=h?
if(mInsideCircle) {
try {
- int nitValue = 3;
+ int nitValue = 2;
if(mXiaomiFingerprint != null)
mXiaomiFingerprint.extCmd(0xa, nitValue);
} catch(Exception e) {
@@ -156,6 +158,8 @@ public class FacolaView extends ImageView implements OnTouchListener {
public void show() {
Slog.d("PHH-Enroll", "Show", new Exception());
+ if(!mHidden) return;
+ mHidden = false;
if(samsungFod) {
samsungCmd("fod_enable,1,1");
}
@@ -194,7 +198,10 @@ public class FacolaView extends ImageView implements OnTouchListener {
}
public void hide() {
+ mInsideCircle = false;
Slog.d("PHH-Enroll", "Hide", new Exception());
+ if(mHidden) return;
+ mHidden = true;
if(samsungFod) {
samsungCmd("fod_enable,0");
}
diff --git a/services/core/java/com/android/server/biometrics/fingerprint/FingerprintService.java b/services/core/java/com/android/server/biometrics/fingerprint/FingerprintService.java
index c7de87126e8..972b4703860 100644
--- a/services/core/java/com/android/server/biometrics/fingerprint/FingerprintService.java
+++ b/services/core/java/com/android/server/biometrics/fingerprint/FingerprintService.java
@@ -181,6 +181,16 @@ public class FingerprintService extends BiometricServiceBase {
return result;
}
+ @Override
+ public boolean onAuthenticated(BiometricAuthenticator.Identifier identifier,
+ boolean authenticated, ArrayList<Byte> token) {
+ boolean result = super.onAuthenticated(identifier, authenticated, token);
+ android.util.Log.d("PHH-Enroll", "auth-ed ret " + result);
+ if(result) mFacola.hide();
+ return result;
+ }
+
+
@Override
public int start() {
mFacola.show();
@@ -219,6 +229,7 @@ public class FingerprintService extends BiometricServiceBase {
final IFingerprintServiceReceiver receiver, final int flags,
final String opPackageName) {
checkPermission(MANAGE_FINGERPRINT);
+ mFacola.show();
final boolean restricted = isRestricted();
final int groupId = userId; // default group for fingerprint enrollment
@@ -641,6 +652,9 @@ public class FingerprintService extends BiometricServiceBase {
public void onError(final long deviceId, final int error, final int vendorCode) {
mHandler.post(() -> {
FingerprintService.super.handleError(deviceId, error, vendorCode);
+ if ( error == BiometricConstants.BIOMETRIC_ERROR_CANCELED) {
+ mFacola.hide();
+ }
// TODO: this chunk of code should be common to all biometric services
if (error == BiometricConstants.BIOMETRIC_ERROR_HW_UNAVAILABLE) {
// If we get HW_UNAVAILABLE, try to connect again later...
--
2.17.1

View File

@@ -0,0 +1,26 @@
From 12005c0b0a7f7e9c33bd8cf79ffaee609c43dafb Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Tue, 22 Oct 2019 15:31:54 +0200
Subject: [PATCH 39/39] Link hwui with libbase, because of updated skia
dependency
Change-Id: I201df2cd8f66674948b56fb6d5be5e8c3cb48bd1
---
libs/hwui/Android.bp | 1 +
1 file changed, 1 insertion(+)
diff --git a/libs/hwui/Android.bp b/libs/hwui/Android.bp
index ebba4cb79df..b9808751130 100644
--- a/libs/hwui/Android.bp
+++ b/libs/hwui/Android.bp
@@ -70,6 +70,7 @@ cc_defaults {
"libandroidfw",
"libcrypto",
"libsync",
+ "libbase",
],
static_libs: [
"libEGL_blobCache",
--
2.17.1