Compare commits
No commits in common. "lineage-17.1" and "lineage-21-light" have entirely different histories.
lineage-17
...
lineage-21
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
/patches_treble_personal/vendor_hardware_overlay
|
@ -1,37 +0,0 @@
|
||||
From 3e18df7a3462d3b81ac4cbc23b1e8721f2f3722c Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Thu, 3 Jan 2019 17:50:03 +0100
|
||||
Subject: [PATCH 1/2] Read SDK version override from property
|
||||
|
||||
Change-Id: I88ca5d0bde15ee4f2b2bd1255e98f9592973dbf9
|
||||
---
|
||||
linker/linker.cpp | 6 ++++--
|
||||
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/linker/linker.cpp b/linker/linker.cpp
|
||||
index 6941fde20..c4730ec20 100644
|
||||
--- a/linker/linker.cpp
|
||||
+++ b/linker/linker.cpp
|
||||
@@ -4296,7 +4296,9 @@ std::vector<android_namespace_t*> init_default_namespaces(const char* executable
|
||||
}
|
||||
|
||||
uint32_t target_sdk = config->target_sdk_version();
|
||||
-#ifdef SDK_VERSION_OVERRIDES
|
||||
+
|
||||
+ std::string sdkVersionOverrides = android::base::GetProperty("persist.sys.phh.sdk_override", "");
|
||||
+ static const char *SDK_VERSION_OVERRIDES = sdkVersionOverrides.c_str();
|
||||
for (const auto& entry : android::base::Split(SDK_VERSION_OVERRIDES, " ")) {
|
||||
auto splitted = android::base::Split(entry, "=");
|
||||
if (splitted.size() == 2 && splitted[0] == executable_path) {
|
||||
@@ -4305,7 +4307,7 @@ std::vector<android_namespace_t*> init_default_namespaces(const char* executable
|
||||
}
|
||||
}
|
||||
DEBUG("Target SDK for %s = %d", executable_path, target_sdk);
|
||||
-#endif
|
||||
+
|
||||
set_application_target_sdk_version(target_sdk);
|
||||
|
||||
std::vector<android_namespace_t*> created_namespaces;
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,36 +0,0 @@
|
||||
From 1823be14501a6c116f6d5e87570dea1af2c68413 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Thu, 12 Sep 2019 12:54:23 +0200
|
||||
Subject: [PATCH 2/2] Use vndk_lite ld.config only on same-version vendor
|
||||
|
||||
When running Q over P lite, there is currently absolutely no chance the
|
||||
device boots, because it will be using Q vndk.
|
||||
Thus using ld.config.28.txt when running Q over P lite gives a little more
|
||||
chance for the device to boot, than when using vndk_lite ld.config.
|
||||
Also, once this patch is applied, the required effort to boot
|
||||
Q over P lite is exclusively in vndk, which is manageable.
|
||||
|
||||
Change-Id: I55257cd7c738b1d20582e198e1d5621e1c87a03e
|
||||
---
|
||||
linker/linker.cpp | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/linker/linker.cpp b/linker/linker.cpp
|
||||
index c4730ec20..337811951 100644
|
||||
--- a/linker/linker.cpp
|
||||
+++ b/linker/linker.cpp
|
||||
@@ -4147,7 +4147,10 @@ static std::string get_ld_config_file_apex_path(const char* executable_path) {
|
||||
}
|
||||
|
||||
static std::string get_ld_config_file_vndk_path() {
|
||||
- if (android::base::GetBoolProperty("ro.vndk.lite", false)) {
|
||||
+ bool same_version_system_vendor = false;
|
||||
+ if(std::to_string(__ANDROID_API__) == Config::get_vndk_version_string('.'))
|
||||
+ same_version_system_vendor = true;
|
||||
+ if (android::base::GetBoolProperty("ro.vndk.lite", false) && same_version_system_vendor) {
|
||||
return kLdConfigVndkLiteFilePath;
|
||||
}
|
||||
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,26 +0,0 @@
|
||||
From a1b739f4631bfaa8a15cdc70081819b1d9360332 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Thu, 12 Sep 2019 20:31:07 +0200
|
||||
Subject: [PATCH] Don't reboot if we couldn't get bootctrl
|
||||
|
||||
Change-Id: Id1793660bd1c97ab369607f58a772ca3512ec1af
|
||||
---
|
||||
update_verifier/update_verifier.cpp | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/update_verifier/update_verifier.cpp b/update_verifier/update_verifier.cpp
|
||||
index d04c455d..27e9f616 100644
|
||||
--- a/update_verifier/update_verifier.cpp
|
||||
+++ b/update_verifier/update_verifier.cpp
|
||||
@@ -310,7 +310,7 @@ int update_verifier(int argc, char** argv) {
|
||||
sp<IBootControl> module = IBootControl::getService();
|
||||
if (module == nullptr) {
|
||||
LOG(ERROR) << "Error getting bootctrl module.";
|
||||
- return reboot_device();
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
uint32_t current_slot = module->getCurrentSlot();
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,25 +0,0 @@
|
||||
From 5b235ab7e686c58433d623fe5355125d9c9fdd35 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Fri, 6 Sep 2019 15:10:28 +0200
|
||||
Subject: [PATCH] Whitelist radio HALs (needed because they need to e in
|
||||
framework because of weird jarjar issue)
|
||||
|
||||
Change-Id: If1ccbedde92955bb86f4c6db6d68502784de1d8d
|
||||
---
|
||||
core/tasks/check_boot_jars/package_whitelist.txt | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/core/tasks/check_boot_jars/package_whitelist.txt b/core/tasks/check_boot_jars/package_whitelist.txt
|
||||
index a2ebd491d..3545bbd88 100644
|
||||
--- a/core/tasks/check_boot_jars/package_whitelist.txt
|
||||
+++ b/core/tasks/check_boot_jars/package_whitelist.txt
|
||||
@@ -264,3 +264,6 @@ org\.ifaa\.android\.manager.*
|
||||
com\.nvidia\.*
|
||||
com\.nvidia\.profilemanager\.*
|
||||
com\.nvidia\.NvCPLSvc\.*
|
||||
+
|
||||
+vendor\.samsung\.hardware\.radio\.V1_2
|
||||
+vendor\.mediatek\.hardware\.radio\.V2_0
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,49 +0,0 @@
|
||||
From 8387b818fb3d921f718d7088a78db0842f8e5d41 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Sat, 14 Sep 2019 21:25:07 +0200
|
||||
Subject: [PATCH 2/3] Add BOARD_SYSTEMIMAGE_AS_SYSTEM parameter to build SaS
|
||||
GSI
|
||||
|
||||
Change-Id: I764f0ef4e3be9a338fbe93944445cedc29d2bb81
|
||||
---
|
||||
core/Makefile | 1 +
|
||||
tools/releasetools/build_image.py | 4 ++++
|
||||
2 files changed, 5 insertions(+)
|
||||
|
||||
diff --git a/core/Makefile b/core/Makefile
|
||||
index a5eef489f..1d0c63e23 100644
|
||||
--- a/core/Makefile
|
||||
+++ b/core/Makefile
|
||||
@@ -1378,6 +1378,7 @@ endif # PRODUCT_USE_DYNAMIC_PARTITIONS
|
||||
# $(3): additional "key=value" pairs to append to the dictionary file.
|
||||
define generate-image-prop-dictionary
|
||||
$(if $(filter $(2),system),\
|
||||
+ $(if $(BOARD_SYSTEMIMAGE_AS_SYSTEM),$(hide) echo "system_as_system=$(BOARD_SYSTEMIMAGE_AS_SYSTEM)" >> $(1))
|
||||
$(if $(BOARD_SYSTEMIMAGE_PARTITION_SIZE),$(hide) echo "system_size=$(BOARD_SYSTEMIMAGE_PARTITION_SIZE)" >> $(1))
|
||||
$(if $(INTERNAL_SYSTEM_OTHER_PARTITION_SIZE),$(hide) echo "system_other_size=$(INTERNAL_SYSTEM_OTHER_PARTITION_SIZE)" >> $(1))
|
||||
$(if $(BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE),$(hide) echo "system_fs_type=$(BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE)" >> $(1))
|
||||
diff --git a/tools/releasetools/build_image.py b/tools/releasetools/build_image.py
|
||||
index 641a6e19f..7d4f1c328 100755
|
||||
--- a/tools/releasetools/build_image.py
|
||||
+++ b/tools/releasetools/build_image.py
|
||||
@@ -157,6 +157,8 @@ def SetUpInDirAndFsConfig(origin_in, prop_dict):
|
||||
|
||||
if prop_dict["mount_point"] != "system":
|
||||
return origin_in, fs_config
|
||||
+ if "system_as_system" in prop_dict:
|
||||
+ return origin_in, fs_config
|
||||
|
||||
if "first_pass" in prop_dict:
|
||||
prop_dict["mount_point"] = "/"
|
||||
@@ -564,6 +566,8 @@ def ImagePropFromGlobalDict(glob_dict, mount_point):
|
||||
if not copy_prop("system_extfs_rsv_pct", "extfs_rsv_pct"):
|
||||
d["extfs_rsv_pct"] = "0"
|
||||
copy_prop("system_reserved_size", "partition_reserved_size")
|
||||
+
|
||||
+ copy_prop("system_as_system", "system_as_system")
|
||||
elif mount_point == "system_other":
|
||||
# We inherit the selinux policies of /system since we contain some of its
|
||||
# files.
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,21 +0,0 @@
|
||||
From 9434797f88d439d3dff8c7af733dcea2cdfed7ab Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Sun, 22 Mar 2020 18:09:04 +0100
|
||||
Subject: [PATCH 3/3] Skip mounting /oem, because if it exists, it includes
|
||||
framework-level stuff we dont want
|
||||
|
||||
---
|
||||
target/product/gsi/skip_mount.cfg | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/target/product/gsi/skip_mount.cfg b/target/product/gsi/skip_mount.cfg
|
||||
index 549767edf..327676384 100644
|
||||
--- a/target/product/gsi/skip_mount.cfg
|
||||
+++ b/target/product/gsi/skip_mount.cfg
|
||||
@@ -1,2 +1,3 @@
|
||||
/product
|
||||
/product_services
|
||||
+/oem
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,27 +0,0 @@
|
||||
From 0fcb4cf13bf9b59218267fa54f4334c397da96f4 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Fri, 2 Mar 2018 22:49:55 +0100
|
||||
Subject: [PATCH 1/8] Enable multipl_decls by default. This is needed because
|
||||
8.0 init doesn't add -m
|
||||
|
||||
Change-Id: I43dc661d519f7b8576d72a828d8cbd444592bf5e
|
||||
---
|
||||
secilc/secilc.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/secilc/secilc.c b/secilc/secilc.c
|
||||
index ad6862ba..8799e99a 100644
|
||||
--- a/secilc/secilc.c
|
||||
+++ b/secilc/secilc.c
|
||||
@@ -90,7 +90,7 @@ int main(int argc, char *argv[])
|
||||
int target = SEPOL_TARGET_SELINUX;
|
||||
int mls = -1;
|
||||
int disable_dontaudit = 0;
|
||||
- int multiple_decls = 0;
|
||||
+ int multiple_decls = 1;
|
||||
int disable_neverallow = 0;
|
||||
int preserve_tunables = 0;
|
||||
int handle_unknown = -1;
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,26 +0,0 @@
|
||||
From 59e09675460e91cb989bc04886edb9aed738c63a Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Mon, 9 Apr 2018 00:19:49 +0200
|
||||
Subject: [PATCH 2/8] Increase default log_level to get actual selinux error in
|
||||
kmsg
|
||||
|
||||
---
|
||||
secilc/secilc.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/secilc/secilc.c b/secilc/secilc.c
|
||||
index 8799e99a..631b4b0a 100644
|
||||
--- a/secilc/secilc.c
|
||||
+++ b/secilc/secilc.c
|
||||
@@ -101,7 +101,7 @@ int main(int argc, char *argv[])
|
||||
int opt_index = 0;
|
||||
char *fc_buf = NULL;
|
||||
size_t fc_size;
|
||||
- enum cil_log_level log_level = CIL_ERR;
|
||||
+ enum cil_log_level log_level = CIL_WARN;
|
||||
static struct option long_opts[] = {
|
||||
{"help", no_argument, 0, 'h'},
|
||||
{"verbose", no_argument, 0, 'v'},
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,40 +0,0 @@
|
||||
From bb0fa90347c9acd0a4b215b9f2244d2761667bdc Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Mon, 3 Dec 2018 20:54:54 +0100
|
||||
Subject: [PATCH 3/8] Kirin:: Workaround some conflicting Kirin tether SELinux
|
||||
context
|
||||
|
||||
Some Kirin devices declared some android.hardware.tetheroffload HALs,
|
||||
but they didn't use AOSP contexts.
|
||||
This leads to libselinux aborting when loading hwservice_contexts.
|
||||
|
||||
Workaround it the ugly way, by making them match.
|
||||
This most likely kills tetheroffload for those devices.
|
||||
---
|
||||
libselinux/src/label_backends_android.c | 10 ++++++++++
|
||||
1 file changed, 10 insertions(+)
|
||||
|
||||
diff --git a/libselinux/src/label_backends_android.c b/libselinux/src/label_backends_android.c
|
||||
index eaca5947..ab92985b 100644
|
||||
--- a/libselinux/src/label_backends_android.c
|
||||
+++ b/libselinux/src/label_backends_android.c
|
||||
@@ -62,6 +62,16 @@ static int nodups_specs(struct saved_data *data)
|
||||
curr_spec->property_key)) {
|
||||
if (strcmp(spec_arr[jj].lr.ctx_raw,
|
||||
curr_spec->lr.ctx_raw)) {
|
||||
+ if(strcmp(spec_arr[jj].lr.ctx_raw, "u:object_r:hal_ipacm_hwservice:s0") == 0) {
|
||||
+ free(spec_arr[jj].lr.ctx_raw);
|
||||
+ spec_arr[jj].lr.ctx_raw = strdup("u:object_r:hal_tetheroffload_hwservice:s0");
|
||||
+ continue;
|
||||
+ }
|
||||
+ if(strcmp(curr_spec->lr.ctx_raw, "u:object_r:hal_ipacm_hwservice:s0") == 0) {
|
||||
+ free(curr_spec->lr.ctx_raw);
|
||||
+ curr_spec->lr.ctx_raw = strdup("u:object_r:hal_tetheroffload_hwservice:s0");
|
||||
+ continue;
|
||||
+ }
|
||||
rc = -1;
|
||||
errno = EINVAL;
|
||||
selinux_log
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,43 +0,0 @@
|
||||
From 8d23d9c14cc95edd2f3fc31433357e6249af1a11 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Fri, 6 Sep 2019 15:07:25 +0200
|
||||
Subject: [PATCH 4/8] Allow /devices/virtual/block/ genfscon conflict (seen on
|
||||
Xiaomi Mi 9)
|
||||
|
||||
Change-Id: I06e4e9d5b82d61a8aeab595b47e2589249675895
|
||||
---
|
||||
libsepol/cil/src/cil_post.c | 18 +++++++++++++++++-
|
||||
1 file changed, 17 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/libsepol/cil/src/cil_post.c b/libsepol/cil/src/cil_post.c
|
||||
index 0b09cecc..255c9e12 100644
|
||||
--- a/libsepol/cil/src/cil_post.c
|
||||
+++ b/libsepol/cil/src/cil_post.c
|
||||
@@ -477,7 +477,23 @@ int cil_post_genfscon_context_compare(const void *a, const void *b)
|
||||
{
|
||||
struct cil_genfscon *a_genfscon = *(struct cil_genfscon**)a;
|
||||
struct cil_genfscon *b_genfscon = *(struct cil_genfscon**)b;
|
||||
- return context_compare(a_genfscon->context, b_genfscon->context);
|
||||
+ int rc = context_compare(a_genfscon->context, b_genfscon->context);
|
||||
+ if(rc) {
|
||||
+ fprintf(stderr, "hello %s\n", a_genfscon->fs_str);
|
||||
+ int bypass = 0;
|
||||
+ /*
|
||||
+ * This conflict has been seen on Xiaomi Mi 9:
|
||||
+ * - AOSP Q says (genfscon sysfs /devices/virtual/block/ (u object_r sysfs_devices_block ((s0) (s0))))
|
||||
+ * - stock rom says (genfscon sysfs /devices/virtual/block/ (u object_r sysfs_ufs_target ((s0) (s0))))
|
||||
+ */
|
||||
+ if(strcmp(a_genfscon->path_str, "/devices/virtual/block/") == 0)
|
||||
+ bypass = 1;
|
||||
+ if(bypass == 1) {
|
||||
+ fprintf(stderr, "Received conflicting %s vs %s but ignore\n", a_genfscon->path_str, b_genfscon->path_str);
|
||||
+ return 0;
|
||||
+ }
|
||||
+ }
|
||||
+ return rc;
|
||||
}
|
||||
|
||||
int cil_post_netifcon_context_compare(const void *a, const void *b)
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,44 +0,0 @@
|
||||
From 2613e4dd6fe7b351581799e11980104b25e443f1 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Thu, 12 Sep 2019 20:34:28 +0200
|
||||
Subject: [PATCH 5/8] Most horrific: Remove ramdisk's zygote init scripts
|
||||
|
||||
This is needed because:
|
||||
- only secilc is run soon enough in /system to
|
||||
remove it
|
||||
- placing an init.zygote in system won't have init replace it, it's the
|
||||
first that appears that wins
|
||||
|
||||
Change-Id: I8be31ceb9ef2124d04994d9fb08fc8012a2f819e
|
||||
---
|
||||
secilc/secilc.c | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/secilc/secilc.c b/secilc/secilc.c
|
||||
index 631b4b0a..3dd6e7ce 100644
|
||||
--- a/secilc/secilc.c
|
||||
+++ b/secilc/secilc.c
|
||||
@@ -34,6 +34,8 @@
|
||||
#include <getopt.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
+#include <unistd.h>
|
||||
+
|
||||
#ifdef ANDROID
|
||||
#include <cil/cil.h>
|
||||
#else
|
||||
@@ -121,6 +123,11 @@ int main(int argc, char *argv[])
|
||||
};
|
||||
int i;
|
||||
|
||||
+ unlink("/init.zygote32.rc");
|
||||
+ unlink("/init.zygote64_32.rc");
|
||||
+ unlink("/init.zygote64.rc");
|
||||
+ unlink("/init.zygote32_64.rc");
|
||||
+
|
||||
while (1) {
|
||||
opt_char = getopt_long(argc, argv, "o:f:U:hvt:M:PDmNc:GX:", long_opts, &opt_index);
|
||||
if (opt_char == -1) {
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,44 +0,0 @@
|
||||
From 0646089ab1c663e04dd7ba364c6e06db3fb67695 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Thu, 12 Sep 2019 20:37:04 +0200
|
||||
Subject: [PATCH 6/8] if service is "rcs", accept conflict. Seen on Moto E5
|
||||
|
||||
Change-Id: I0cc2d0fad83f403f2b5d7458039b1564ce5ed9dd
|
||||
---
|
||||
libselinux/src/label_backends_android.c | 14 ++++++++++++--
|
||||
1 file changed, 12 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/libselinux/src/label_backends_android.c b/libselinux/src/label_backends_android.c
|
||||
index ab92985b..ca16327c 100644
|
||||
--- a/libselinux/src/label_backends_android.c
|
||||
+++ b/libselinux/src/label_backends_android.c
|
||||
@@ -72,14 +72,24 @@ static int nodups_specs(struct saved_data *data)
|
||||
curr_spec->lr.ctx_raw = strdup("u:object_r:hal_tetheroffload_hwservice:s0");
|
||||
continue;
|
||||
}
|
||||
- rc = -1;
|
||||
- errno = EINVAL;
|
||||
selinux_log
|
||||
(SELINUX_ERROR,
|
||||
"Multiple different specifications for %s (%s and %s).\n",
|
||||
curr_spec->property_key,
|
||||
spec_arr[jj].lr.ctx_raw,
|
||||
curr_spec->lr.ctx_raw);
|
||||
+ int ignore = 0;
|
||||
+ /*
|
||||
+ * This issue has been found on Moto E5
|
||||
+ * E SELinux : Multiple different specifications for rcs (u:object_r:radio_service:s0 and u:object_r:mot_rcs_service:s0).
|
||||
+ */
|
||||
+ if(!strcmp(curr_spec->property_key, "rcs"))
|
||||
+ ignore = 1;
|
||||
+
|
||||
+ if(!ignore) {
|
||||
+ rc = -1;
|
||||
+ errno = EINVAL;
|
||||
+ }
|
||||
} else {
|
||||
selinux_log
|
||||
(SELINUX_WARNING,
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,84 +0,0 @@
|
||||
From 619185d4d8d3af1b86a2aba200659ad6ae09b44a Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Fri, 25 Oct 2019 13:29:20 +0200
|
||||
Subject: [PATCH 7/8] Fix boot on Moto devices using unknown class
|
||||
|
||||
vendor sepolicy never contains new class or classorder, and are not
|
||||
allowed to.
|
||||
Though this is not tested, and it turns out Moto did it anyway.
|
||||
This raises an issue, because class need to be ordered, and thus the cil
|
||||
contains the ordering. This ordering needs to be merged.
|
||||
Android 10 added new classes, so the ordering can no longer be merged,
|
||||
and secilc fails on those devices, preventing boot.
|
||||
|
||||
Considering vendor are not supposed to declare new class (and thus
|
||||
declare classorder), this fix ignores class-es/classorder in vendor
|
||||
SELinux policy.
|
||||
|
||||
Since the vendor selinux policy has allows rules based on this context,
|
||||
those allows will fail since the class doesn't exist.
|
||||
Workaround this by ignoring rules with the problematic class
|
||||
( keystore_moto_key )
|
||||
|
||||
Lucky us, this new class `keystore_moto_key` is used by Moto for
|
||||
framework to framework (more accurately priv app to keymaster), since
|
||||
our own framework doesn't use this class, simply ignoring it fixes the
|
||||
issue.
|
||||
|
||||
Change-Id: I66339857634ebfdba359f12a99dfd0bff709d80b
|
||||
---
|
||||
libsepol/cil/src/cil_build_ast.c | 24 ++++++++++++++++++++++++
|
||||
1 file changed, 24 insertions(+)
|
||||
|
||||
diff --git a/libsepol/cil/src/cil_build_ast.c b/libsepol/cil/src/cil_build_ast.c
|
||||
index b90b0f60..6f391940 100644
|
||||
--- a/libsepol/cil/src/cil_build_ast.c
|
||||
+++ b/libsepol/cil/src/cil_build_ast.c
|
||||
@@ -386,6 +386,14 @@ int cil_gen_class(struct cil_db *db, struct cil_tree_node *parse_current, struct
|
||||
struct cil_tree_node *perms = NULL;
|
||||
int rc = SEPOL_ERR;
|
||||
|
||||
+ {
|
||||
+ const char* path = cil_tree_get_cil_path(parse_current);
|
||||
+ if(strstr(path, "vendor")) {
|
||||
+ cil_clear_node(ast_node);
|
||||
+ return SEPOL_OK;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
rc = __cil_verify_syntax(parse_current, syntax, syntax_len);
|
||||
if (rc != SEPOL_OK) {
|
||||
goto exit;
|
||||
@@ -452,6 +460,14 @@ int cil_gen_classorder(struct cil_db *db, struct cil_tree_node *parse_current, s
|
||||
struct cil_list_item *head = NULL;
|
||||
int rc = SEPOL_ERR;
|
||||
|
||||
+ {
|
||||
+ const char* path = cil_tree_get_cil_path(parse_current);
|
||||
+ if(strstr(path, "vendor")) {
|
||||
+ cil_clear_node(ast_node);
|
||||
+ return SEPOL_OK;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
if (db == NULL || parse_current == NULL || ast_node == NULL) {
|
||||
goto exit;
|
||||
}
|
||||
@@ -2050,6 +2066,14 @@ int cil_gen_avrule(struct cil_tree_node *parse_current, struct cil_tree_node *as
|
||||
rule->src_str = parse_current->next->data;
|
||||
rule->tgt_str = parse_current->next->next->data;
|
||||
|
||||
+ {
|
||||
+ const char *classname = parse_current->next->next->next->cl_head->data;
|
||||
+ if(strcmp(classname, "keystore_moto_key") == 0) {
|
||||
+ cil_clear_node(ast_node);
|
||||
+ return SEPOL_OK;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
rc = cil_fill_classperms_list(parse_current->next->next->next, &rule->perms.classperms);
|
||||
if (rc != SEPOL_OK) {
|
||||
goto exit;
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,27 +0,0 @@
|
||||
From 6e9400a75c7193ba7e4d5050e3a0e71627d38ce8 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Sun, 24 May 2020 17:22:22 +0200
|
||||
Subject: [PATCH 8/8] Allow mismatches of exfat genfscon
|
||||
|
||||
---
|
||||
libsepol/cil/src/cil_post.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/libsepol/cil/src/cil_post.c b/libsepol/cil/src/cil_post.c
|
||||
index 255c9e12..f97c65c1 100644
|
||||
--- a/libsepol/cil/src/cil_post.c
|
||||
+++ b/libsepol/cil/src/cil_post.c
|
||||
@@ -488,6 +488,10 @@ int cil_post_genfscon_context_compare(const void *a, const void *b)
|
||||
*/
|
||||
if(strcmp(a_genfscon->path_str, "/devices/virtual/block/") == 0)
|
||||
bypass = 1;
|
||||
+ if(strcmp(a_genfscon->fs_str, "exfat") == 0 || strcmp(a_genfscon->fs_str, "esdfs") == 0) {
|
||||
+ if(strcmp(a_genfscon->path_str, "/") == 0)
|
||||
+ bypass = 1;
|
||||
+ }
|
||||
if(bypass == 1) {
|
||||
fprintf(stderr, "Received conflicting %s vs %s but ignore\n", a_genfscon->path_str, b_genfscon->path_str);
|
||||
return 0;
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,59 +0,0 @@
|
||||
From fd42c051ba56676ce593d5313ae2d72d85133a6a Mon Sep 17 00:00:00 2001
|
||||
From: Peter Cai <peter@typeblog.net>
|
||||
Date: Tue, 22 Oct 2019 20:54:25 +0800
|
||||
Subject: [PATCH] GrGLCaps: allow ignoring vendor-supplied texture swizzle flag
|
||||
|
||||
* This is broken on MTK 8.1 vendor
|
||||
|
||||
Change-Id: I1ccae06f643f01e4ea6539e1d4e3c7df8d6e30ae
|
||||
---
|
||||
Android.bp | 1 +
|
||||
src/gpu/gl/GrGLCaps.h | 11 +++++++++++
|
||||
2 files changed, 12 insertions(+)
|
||||
|
||||
diff --git a/Android.bp b/Android.bp
|
||||
index 3d2ab6d370..099cd6ba0b 100644
|
||||
--- a/Android.bp
|
||||
+++ b/Android.bp
|
||||
@@ -3,6 +3,7 @@
|
||||
cc_library_static {
|
||||
name: "libskia",
|
||||
host_supported: true,
|
||||
+ shared_libs: [ "libbase" ],
|
||||
cflags: [
|
||||
"-U_FORTIFY_SOURCE",
|
||||
"-DATRACE_TAG=ATRACE_TAG_VIEW",
|
||||
diff --git a/src/gpu/gl/GrGLCaps.h b/src/gpu/gl/GrGLCaps.h
|
||||
index 4a97e84cf8..aee7a5509e 100644
|
||||
--- a/src/gpu/gl/GrGLCaps.h
|
||||
+++ b/src/gpu/gl/GrGLCaps.h
|
||||
@@ -17,6 +17,11 @@
|
||||
#include "SkTHash.h"
|
||||
#include "SkTArray.h"
|
||||
|
||||
+#if defined(SK_BUILD_FOR_ANDROID)
|
||||
+#include "android-base/properties.h"
|
||||
+using android::base::GetBoolProperty;
|
||||
+#endif
|
||||
+
|
||||
class GrGLContextInfo;
|
||||
class GrGLRenderTarget;
|
||||
|
||||
@@ -330,8 +335,14 @@ public:
|
||||
/// Are textures with GL_TEXTURE_RECTANGLE type supported.
|
||||
bool rectangleTextureSupport() const { return fRectangleTextureSupport; }
|
||||
|
||||
+#if !defined(SK_BUILD_FOR_ANDROID)
|
||||
/// GL_ARB_texture_swizzle
|
||||
bool textureSwizzleSupport() const { return fTextureSwizzleSupport; }
|
||||
+#else
|
||||
+ bool textureSwizzleSupport() const {
|
||||
+ return !GetBoolProperty("ro.skia.ignore_swizzle", false) && fTextureSwizzleSupport;
|
||||
+ }
|
||||
+#endif
|
||||
|
||||
bool mipMapLevelAndLodControlSupport() const { return fMipMapLevelAndLodControlSupport; }
|
||||
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,81 +0,0 @@
|
||||
From 9873f460d3a40ca739e4c069068b32990dc2fff8 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Tue, 24 Apr 2018 00:14:28 +0200
|
||||
Subject: [PATCH 01/17] FIH devices: Fix "Earpiece" audio output
|
||||
|
||||
On some FIH devices (confirmed on Razer, and probably on Aquos SS2),
|
||||
Earpiece is not listed in attachedDevices, and devicePort's profile
|
||||
mentions it is AUDIO_CHANNEL_IN_MONO, instead of AUDIO_CHANNEL_OUT_MONO.
|
||||
|
||||
Detect such cases (output device, but got only AUDIO_CHANNEL_IN_MONO),
|
||||
and fix both channelMasks and attachedDevices
|
||||
|
||||
Change-Id: I4a88ba6d34d0fcd346eeea2ca903772f0271040a
|
||||
---
|
||||
.../managerdefinitions/src/Serializer.cpp | 27 ++++++++++++++++---
|
||||
1 file changed, 24 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||
index 5f820c214..0b561320b 100644
|
||||
--- a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||
+++ b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||
@@ -395,14 +395,22 @@ Return<AudioGainTraits::Element> AudioGainTraits::deserialize(const xmlNode *cur
|
||||
}
|
||||
|
||||
Return<AudioProfileTraits::Element> AudioProfileTraits::deserialize(const xmlNode *cur,
|
||||
- PtrSerializingCtx /*serializingContext*/)
|
||||
+ PtrSerializingCtx serializingContext)
|
||||
{
|
||||
+ bool isOutput = serializingContext != nullptr;
|
||||
std::string samplingRates = getXmlAttribute(cur, Attributes::samplingRates);
|
||||
std::string format = getXmlAttribute(cur, Attributes::format);
|
||||
std::string channels = getXmlAttribute(cur, Attributes::channelMasks);
|
||||
+ ChannelTraits::Collection channelsMask = channelMasksFromString(channels, ",");
|
||||
+
|
||||
+ //Some Foxconn devices have wrong earpiece channel mask, leading to no channel mask
|
||||
+ if(channelsMask.size() == 1 && channelsMask[0] == AUDIO_CHANNEL_IN_MONO && isOutput) {
|
||||
+ fixedEarpieceChannels = true;
|
||||
+ channelsMask = channelMasksFromString("AUDIO_CHANNEL_OUT_MONO", ",");
|
||||
+ }
|
||||
|
||||
Element profile = new AudioProfile(formatFromString(format, gDynamicFormat),
|
||||
- channelMasksFromString(channels, ","),
|
||||
+ channelsMask,
|
||||
samplingRatesFromString(samplingRates, ","));
|
||||
|
||||
profile->setDynamicFormat(profile->getFormat() == gDynamicFormat);
|
||||
@@ -517,10 +525,15 @@ Return<DevicePortTraits::Element> DevicePortTraits::deserialize(const xmlNode *c
|
||||
}
|
||||
|
||||
AudioProfileTraits::Collection profiles;
|
||||
- status_t status = deserializeCollection<AudioProfileTraits>(cur, &profiles, NULL);
|
||||
+ status_t status;
|
||||
+ if(audio_is_output_devices(type))
|
||||
+ status = deserializeCollection<AudioProfileTraits>(doc, root, profiles, (PtrSerializingCtx)1);
|
||||
+ else
|
||||
+ status = deserializeCollection<AudioProfileTraits>(cur, &profiles, NULL);
|
||||
if (status != NO_ERROR) {
|
||||
return Status::fromStatusT(status);
|
||||
}
|
||||
+
|
||||
if (profiles.isEmpty()) {
|
||||
profiles.add(AudioProfile::createFullDynamic());
|
||||
}
|
||||
@@ -672,6 +685,14 @@ Return<ModuleTraits::Element> ModuleTraits::deserialize(const xmlNode *cur, PtrS
|
||||
}
|
||||
}
|
||||
}
|
||||
+
|
||||
+ if(fixedEarpieceChannels) {
|
||||
+ sp<DeviceDescriptor> device =
|
||||
+ module->getDeclaredDevices().getDeviceFromTagName(String8("Earpiece"));
|
||||
+ if(device != 0)
|
||||
+ ctx->addAvailableDevice(device);
|
||||
+ fixedEarpieceChannels = false;
|
||||
+ }
|
||||
return module;
|
||||
}
|
||||
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,31 +0,0 @@
|
||||
From 09e90d056e41e8ef6d0527e7e34a54053c607b3a Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Pohl <pohl199885@gmail.com>
|
||||
Date: Fri, 15 Jun 2018 19:58:07 +0200
|
||||
Subject: [PATCH 02/17] Fix WiFi-Display on Huawei devices (EMUI 8.0)
|
||||
|
||||
Huaweis media stack doesn't handle intra-refresh-mode, so skip the error instead.
|
||||
|
||||
Thanks to Chris Vandomelen for pointing that out.
|
||||
---
|
||||
media/libstagefright/ACodec.cpp | 5 ++---
|
||||
1 file changed, 2 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp
|
||||
index 55e8130e4..e8b493183 100644
|
||||
--- a/media/libstagefright/ACodec.cpp
|
||||
+++ b/media/libstagefright/ACodec.cpp
|
||||
@@ -4366,9 +4366,8 @@ status_t ACodec::setupAVCEncoderParameters(const sp<AMessage> &msg) {
|
||||
if (msg->findInt32("intra-refresh-mode", &intraRefreshMode)) {
|
||||
err = setCyclicIntraMacroblockRefresh(msg, intraRefreshMode);
|
||||
if (err != OK) {
|
||||
- ALOGE("Setting intra macroblock refresh mode (%d) failed: 0x%x",
|
||||
- err, intraRefreshMode);
|
||||
- return err;
|
||||
+ ALOGE("setupAVCEncoderParameters(): set intra-refresh-mode failed, ignoring..");
|
||||
+ //return err;
|
||||
}
|
||||
}
|
||||
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,34 +0,0 @@
|
||||
From 90390678c846d34aae136aa1557643619c524830 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Sun, 19 Aug 2018 22:59:06 +0200
|
||||
Subject: [PATCH 03/17] Kirin:: Remove lock to prevent self-lock
|
||||
|
||||
With Huawei Camera HAL, we get the following call order:
|
||||
cameraserver CameraService::enumerateProviders (*)
|
||||
=> HAL ICameraProvider::getVendorTags
|
||||
=> HAL ICameraProviderCallback::cameraDeviceStatusChange
|
||||
=> cameraserver CameraService::addState
|
||||
=> cameraserver CameraService::updateCameraNumAndIds (*)
|
||||
|
||||
The two functions marked with (*) take mServiceLock
|
||||
Hence the safe-lock
|
||||
---
|
||||
services/camera/libcameraservice/CameraService.cpp | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp
|
||||
index 95e4e6eb7..077e3b238 100644
|
||||
--- a/services/camera/libcameraservice/CameraService.cpp
|
||||
+++ b/services/camera/libcameraservice/CameraService.cpp
|
||||
@@ -271,7 +271,7 @@ bool CameraService::isPublicallyHiddenSecureCamera(const String8& cameraId) {
|
||||
}
|
||||
|
||||
void CameraService::updateCameraNumAndIds() {
|
||||
- Mutex::Autolock l(mServiceLock);
|
||||
+ //Mutex::Autolock l(mServiceLock);
|
||||
mNumberOfCameras = mCameraProviderManager->getCameraCount();
|
||||
mNormalDeviceIds =
|
||||
mCameraProviderManager->getAPI1CompatibleCameraDeviceIds();
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,27 +0,0 @@
|
||||
From 1fe92753746f4410f5ac97abcef083276940cfee Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Sun, 19 Aug 2018 23:05:26 +0200
|
||||
Subject: [PATCH 04/17] We might not have a mFlashlight at this state, but
|
||||
that's ok
|
||||
|
||||
Change-Id: I0ae65c0be4931b4e3cbda2d0cc64acc4f5018a73
|
||||
---
|
||||
services/camera/libcameraservice/CameraService.cpp | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp
|
||||
index 077e3b238..bbfd90a28 100644
|
||||
--- a/services/camera/libcameraservice/CameraService.cpp
|
||||
+++ b/services/camera/libcameraservice/CameraService.cpp
|
||||
@@ -299,7 +299,7 @@ void CameraService::addStates(const String8 id) {
|
||||
isPublicallyHiddenSecureCamera));
|
||||
}
|
||||
|
||||
- if (mFlashlight->hasFlashUnit(id)) {
|
||||
+ if (mFlashlight != nullptr && mFlashlight->hasFlashUnit(id)) {
|
||||
Mutex::Autolock al(mTorchStatusMutex);
|
||||
mTorchStatusMap.add(id, TorchModeStatus::AVAILABLE_OFF);
|
||||
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,62 +0,0 @@
|
||||
From 669ad001302e6e6d749ae0f66026c8ce00d259fe Mon Sep 17 00:00:00 2001
|
||||
From: Artem Borisov <dedsa2002@gmail.com>
|
||||
Date: Tue, 25 Sep 2018 12:39:22 +0300
|
||||
Subject: [PATCH 05/17] CameraService: Support calling addStates in
|
||||
enumerateProviders
|
||||
|
||||
Some pre-P camera HALs trigger onDeviceStatusChange callback during HAL init.
|
||||
This is horribly wrong and causes a race condition between enumerateProviders
|
||||
and onDeviceStatusChange. While it wasn't really harmful in O, in P call sequence
|
||||
was changed and now this race condition leads to two problems: null pointer dereference
|
||||
in addStates because mFlashlight is not initialized at a proper timing; mServiceLock
|
||||
deadlock because updateCameraNumAndIds and enumerateProviders are called at the same time.
|
||||
Moving addStates back to enumerateProviders makes the sequence more similar to O, and doesn't
|
||||
let these two issues to happen.
|
||||
Enable TARGET_CAMERA_NEEDS_ADD_STATES_IN_ENUMERATE when it is necessary.
|
||||
|
||||
@Dil3mm4 edit: Instead of TARGET_CAMERA_NEEDS_ADD_STATES_IN_ENUMERATE let's use a system property to make it more generic and suitable for GSI use.
|
||||
|
||||
Change-Id: Ife25b9753fdb679ab0c77f385e1b8527551a4711
|
||||
---
|
||||
.../camera/libcameraservice/CameraService.cpp | 16 ++++++++++++++++
|
||||
1 file changed, 16 insertions(+)
|
||||
|
||||
diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp
|
||||
index bbfd90a28..7046384b3 100644
|
||||
--- a/services/camera/libcameraservice/CameraService.cpp
|
||||
+++ b/services/camera/libcameraservice/CameraService.cpp
|
||||
@@ -212,6 +212,20 @@ status_t CameraService::enumerateProviders() {
|
||||
|
||||
for (auto& cameraId : deviceIds) {
|
||||
String8 id8 = String8(cameraId.c_str());
|
||||
+ if (property_get_bool("persist.sys.camera.huawei", false)) {
|
||||
+ bool cameraFound = false;
|
||||
+ {
|
||||
+ Mutex::Autolock lock(mCameraStatesLock);
|
||||
+ auto iter = mCameraStates.find(id8);
|
||||
+ if (iter != mCameraStates.end()) {
|
||||
+ cameraFound = true;
|
||||
+ }
|
||||
+ }
|
||||
+ if (!cameraFound) {
|
||||
+ addStates(id8);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
if (getCameraState(id8) == nullptr) {
|
||||
onDeviceStatusChanged(id8, CameraDeviceStatus::PRESENT);
|
||||
}
|
||||
@@ -337,8 +351,10 @@ void CameraService::onDeviceStatusChanged(const String8& id,
|
||||
ALOGI("%s: Unknown camera ID %s, a new camera is added",
|
||||
__FUNCTION__, id.string());
|
||||
|
||||
+ if (!property_get_bool("persist.sys.camera.huawei", false)) {
|
||||
// First add as absent to make sure clients are notified below
|
||||
addStates(id);
|
||||
+ }
|
||||
|
||||
updateStatus(newStatus, id);
|
||||
} else {
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,25 +0,0 @@
|
||||
From 8ad118d1fcfba6e9911aa099f354594787ad264b Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Sun, 9 Dec 2018 15:56:59 +0100
|
||||
Subject: [PATCH 06/17] Revert "Set rlimit rtprio for cameraserver"
|
||||
|
||||
This reverts commit 4ae244cab4fe715fc2729e906b7dda3075fbbac3.
|
||||
|
||||
We need to revert this because some init/systems (Moto E5, G6) doesn't
|
||||
like this instruction at all (read: this prevents boot)
|
||||
---
|
||||
camera/cameraserver/cameraserver.rc | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
diff --git a/camera/cameraserver/cameraserver.rc b/camera/cameraserver/cameraserver.rc
|
||||
index a9aae0b15..fea5a1d5c 100644
|
||||
--- a/camera/cameraserver/cameraserver.rc
|
||||
+++ b/camera/cameraserver/cameraserver.rc
|
||||
@@ -4,4 +4,3 @@ service cameraserver /system/bin/cameraserver
|
||||
group audio camera input drmrpc
|
||||
ioprio rt 4
|
||||
writepid /dev/cpuset/camera-daemon/tasks /dev/stune/top-app/tasks
|
||||
- rlimit rtprio 10 10
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,33 +0,0 @@
|
||||
From 293b2fb176c081a4e3db518009864c1a4c4053fd Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Wed, 4 Sep 2019 22:28:56 +0200
|
||||
Subject: [PATCH 07/17] fixup! FIH devices: Fix "Earpiece" audio output
|
||||
|
||||
---
|
||||
.../audiopolicy/common/managerdefinitions/src/Serializer.cpp | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||
index 0b561320b..c8cb54b5f 100644
|
||||
--- a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||
+++ b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||
@@ -394,6 +394,7 @@ Return<AudioGainTraits::Element> AudioGainTraits::deserialize(const xmlNode *cur
|
||||
}
|
||||
}
|
||||
|
||||
+static bool fixedEarpieceChannels = false;
|
||||
Return<AudioProfileTraits::Element> AudioProfileTraits::deserialize(const xmlNode *cur,
|
||||
PtrSerializingCtx serializingContext)
|
||||
{
|
||||
@@ -527,7 +528,7 @@ Return<DevicePortTraits::Element> DevicePortTraits::deserialize(const xmlNode *c
|
||||
AudioProfileTraits::Collection profiles;
|
||||
status_t status;
|
||||
if(audio_is_output_devices(type))
|
||||
- status = deserializeCollection<AudioProfileTraits>(doc, root, profiles, (PtrSerializingCtx)1);
|
||||
+ status = deserializeCollection<AudioProfileTraits>(cur, &profiles, (PtrSerializingCtx)1);
|
||||
else
|
||||
status = deserializeCollection<AudioProfileTraits>(cur, &profiles, NULL);
|
||||
if (status != NO_ERROR) {
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,26 +0,0 @@
|
||||
From 6f4e7e032ca73db15cb01737c24de543780718da Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Mon, 5 Aug 2019 17:27:47 +0200
|
||||
Subject: [PATCH 08/17] Fix use-after-free (object on stack)
|
||||
|
||||
Change-Id: I9ae666b10873eac4e7a55032071e7b15b0de058a
|
||||
---
|
||||
.../audiopolicy/common/managerdefinitions/src/Serializer.cpp | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||
index c8cb54b5f..9f2bdc4b3 100644
|
||||
--- a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||
+++ b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||
@@ -517,7 +517,7 @@ Return<DevicePortTraits::Element> DevicePortTraits::deserialize(const xmlNode *c
|
||||
if (!encodedFormatsLiteral.empty()) {
|
||||
encodedFormats = formatsFromString(encodedFormatsLiteral, " ");
|
||||
}
|
||||
- Element deviceDesc = new DeviceDescriptor(type, encodedFormats, String8(name.c_str()));
|
||||
+ Element deviceDesc = new DeviceDescriptor(type, encodedFormats, String8(strdup(name.c_str())));
|
||||
|
||||
std::string address = getXmlAttribute(cur, Attributes::address);
|
||||
if (!address.empty()) {
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,129 +0,0 @@
|
||||
From f303633bdac9176d45ca8a9073f2f9850406ebf8 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Mon, 5 Aug 2019 18:09:50 +0200
|
||||
Subject: [PATCH 09/17] Fix BT in-call on CAF devices
|
||||
|
||||
See https://github.com/phhusson/treble_experimentations/issues/374
|
||||
|
||||
In Qualcomm's BSP audio_policy_configuration.xml, one route is missing,
|
||||
from primary output and telephony to BT SCO.
|
||||
|
||||
Add it if we detect telephony and bt sco, but no such route.
|
||||
|
||||
Change-Id: Ifea0f88276ec9a0811f3cb1973c4b06f2c82077b
|
||||
---
|
||||
.../managerdefinitions/src/Serializer.cpp | 91 +++++++++++++++++++
|
||||
1 file changed, 91 insertions(+)
|
||||
|
||||
diff --git a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||
index 9f2bdc4b3..9c7e5c49d 100644
|
||||
--- a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||
+++ b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||
@@ -607,6 +607,96 @@ Return<RouteTraits::Element> RouteTraits::deserialize(const xmlNode *cur, PtrSer
|
||||
return route;
|
||||
}
|
||||
|
||||
+static void fixupQualcommBtScoRoute(RouteTraits::Collection& routes, DevicePortTraits::Collection& devicePorts, HwModule* ctx) {
|
||||
+ // On many Qualcomm devices, there is a BT SCO Headset Mic => primary input mix
|
||||
+ // But Telephony Rx => BT SCO Headset route is missing
|
||||
+ // When we detect such case, add the missing route
|
||||
+
|
||||
+ // If we have:
|
||||
+ // <route type="mix" sink="Telephony Tx" sources="voice_tx"/>
|
||||
+ // <route type="mix" sink="primary input" sources="Built-In Mic,Built-In Back Mic,Wired Headset Mic,BT SCO Headset Mic"/>
|
||||
+ // <devicePort tagName="BT SCO Headset" type="AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET" role="sink" />
|
||||
+ // And no <route type="mix" sink="BT SCO Headset" />
|
||||
+
|
||||
+ // Add:
|
||||
+ // <route type="mix" sink="BT SCO Headset" sources="primary output,deep_buffer,compressed_offload,Telephony Rx"/>
|
||||
+ bool foundBtScoHeadsetDevice = false;
|
||||
+ for(const auto& device: devicePorts) {
|
||||
+ if(device->getTagName() == String8("BT SCO Headset")) {
|
||||
+ foundBtScoHeadsetDevice = true;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ if(!foundBtScoHeadsetDevice) {
|
||||
+ ALOGE("No BT SCO Headset device found, don't patch policy");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ bool foundTelephony = false;
|
||||
+ bool foundBtScoInput = false;
|
||||
+ bool foundScoHeadsetRoute = false;
|
||||
+ for(const auto& route: routes) {
|
||||
+ ALOGE("Looking at route %d\n", route->getType());
|
||||
+ if(route->getType() != AUDIO_ROUTE_MIX)
|
||||
+ continue;
|
||||
+ auto sink = route->getSink();
|
||||
+ ALOGE("... With sink %s\n", sink->getTagName().c_str());
|
||||
+ if(sink->getTagName() == String8("Telephony Tx")) {
|
||||
+ foundTelephony = true;
|
||||
+ continue;
|
||||
+ }
|
||||
+ if(sink->getTagName() == String8("BT SCO Headset")) {
|
||||
+ foundScoHeadsetRoute = true;
|
||||
+ break;
|
||||
+ }
|
||||
+ for(const auto& source: route->getSources()) {
|
||||
+ ALOGE("... With source %s\n", source->getTagName().c_str());
|
||||
+ if(source->getTagName() == String8("BT SCO Headset Mic")) {
|
||||
+ foundBtScoInput = true;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ //The route we want to add is already there
|
||||
+ ALOGE("Done looking for existing routes");
|
||||
+ if(foundScoHeadsetRoute)
|
||||
+ return;
|
||||
+
|
||||
+ ALOGE("No existing route found... %d %d", foundTelephony ? 1 : 0, foundBtScoInput ? 1 : 0);
|
||||
+ //We couldn't find the routes we assume are required for the function we want to add
|
||||
+ if(!foundTelephony || !foundBtScoInput)
|
||||
+ return;
|
||||
+ ALOGE("Adding our own.");
|
||||
+
|
||||
+ // Add:
|
||||
+ // <route type="mix" sink="BT SCO Headset" sources="primary output,deep_buffer,compressed_offload,Telephony Rx"/>
|
||||
+ AudioRoute *newRoute = new AudioRoute(AUDIO_ROUTE_MIX);
|
||||
+
|
||||
+ auto sink = ctx->findPortByTagName(String8("BT SCO Headset"));
|
||||
+ ALOGE("Got sink %p\n", sink.get());
|
||||
+ newRoute->setSink(sink);
|
||||
+
|
||||
+ AudioPortVector sources;
|
||||
+ for(const auto& sourceName: {
|
||||
+ "primary output",
|
||||
+ "deep_buffer",
|
||||
+ "compressed_offload",
|
||||
+ "Telephony Rx"
|
||||
+ }) {
|
||||
+ auto source = ctx->findPortByTagName(String8(sourceName));
|
||||
+ ALOGE("Got source %p\n", source.get());
|
||||
+ sources.add(source);
|
||||
+ source->addRoute(newRoute);
|
||||
+ }
|
||||
+
|
||||
+ newRoute->setSources(sources);
|
||||
+
|
||||
+ sink->addRoute(newRoute);
|
||||
+
|
||||
+ auto ret = routes.add(newRoute);
|
||||
+ ALOGE("route add returned %zd", ret);
|
||||
+}
|
||||
+
|
||||
Return<ModuleTraits::Element> ModuleTraits::deserialize(const xmlNode *cur, PtrSerializingCtx ctx)
|
||||
{
|
||||
std::string name = getXmlAttribute(cur, Attributes::name);
|
||||
@@ -646,6 +736,7 @@ Return<ModuleTraits::Element> ModuleTraits::deserialize(const xmlNode *cur, PtrS
|
||||
if (status != NO_ERROR) {
|
||||
return Status::fromStatusT(status);
|
||||
}
|
||||
+ fixupQualcommBtScoRoute(routes, devicePorts, module.get());
|
||||
module->setRoutes(routes);
|
||||
|
||||
for (const xmlNode *children = cur->xmlChildrenNode; children != NULL;
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,31 +0,0 @@
|
||||
From 7125c20e64937da5ee8134baae39e2136629b307 Mon Sep 17 00:00:00 2001
|
||||
From: Vincent Vidal <vincent.vidal@onera.fr>
|
||||
Date: Thu, 12 Sep 2019 14:17:14 +0200
|
||||
Subject: [PATCH 10/17] Fix null pointer for unknown audio sources in "Fix BT
|
||||
in-call on CAF devices"
|
||||
|
||||
Some audio sources may not exist on some devices (e.g. Axon 7), leading to a segmentation fault.
|
||||
---
|
||||
.../common/managerdefinitions/src/Serializer.cpp | 6 ++++--
|
||||
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||
index 9c7e5c49d..8bfdb5b0a 100644
|
||||
--- a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||
+++ b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||
@@ -685,8 +685,10 @@ static void fixupQualcommBtScoRoute(RouteTraits::Collection& routes, DevicePortT
|
||||
}) {
|
||||
auto source = ctx->findPortByTagName(String8(sourceName));
|
||||
ALOGE("Got source %p\n", source.get());
|
||||
- sources.add(source);
|
||||
- source->addRoute(newRoute);
|
||||
+ if (source.get() != nullptr) {
|
||||
+ sources.add(source);
|
||||
+ source->addRoute(newRoute);
|
||||
+ }
|
||||
}
|
||||
|
||||
newRoute->setSources(sources);
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,94 +0,0 @@
|
||||
From 53e025a518a6a662f533e2e08b50ebaed223957c Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Tue, 1 Oct 2019 13:35:49 +0200
|
||||
Subject: [PATCH 11/17] Add (partial, cam id is hardcoded) support for Asus ZF6
|
||||
motor camera
|
||||
|
||||
Change-Id: Iea6e1370780a1d16f728748d1d948d092532d8fe
|
||||
---
|
||||
.../camera/libcameraservice/CameraService.cpp | 26 +++++++++++++++++++
|
||||
.../camera/libcameraservice/CameraService.h | 3 +++
|
||||
2 files changed, 29 insertions(+)
|
||||
|
||||
diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp
|
||||
index 7046384b3..100db9e3c 100644
|
||||
--- a/services/camera/libcameraservice/CameraService.cpp
|
||||
+++ b/services/camera/libcameraservice/CameraService.cpp
|
||||
@@ -25,6 +25,7 @@
|
||||
#include <ctime>
|
||||
#include <string>
|
||||
#include <sys/types.h>
|
||||
+#include <sys/wait.h>
|
||||
#include <inttypes.h>
|
||||
#include <pthread.h>
|
||||
|
||||
@@ -133,6 +134,7 @@ Mutex CameraService::sProxyMutex;
|
||||
sp<hardware::ICameraServiceProxy> CameraService::sCameraServiceProxy;
|
||||
|
||||
CameraService::CameraService() :
|
||||
+ mPhysicalFrontCamStatus(false),
|
||||
mEventLog(DEFAULT_EVENT_LOG_LENGTH),
|
||||
mNumberOfCameras(0),
|
||||
mSoundRef(0), mInitialized(false) {
|
||||
@@ -1579,6 +1581,7 @@ Status CameraService::connectHelper(const sp<CALLBACK>& cameraCb, const String8&
|
||||
mServiceLock.lock();
|
||||
} else {
|
||||
// Otherwise, add client to active clients list
|
||||
+ physicalFrontCam(cameraId == "1");
|
||||
finishConnectLocked(client, partial);
|
||||
|
||||
sp<ICameraMotor> cameraMotor = ICameraMotor::getService();
|
||||
@@ -1594,6 +1597,27 @@ Status CameraService::connectHelper(const sp<CALLBACK>& cameraCb, const String8&
|
||||
return ret;
|
||||
}
|
||||
|
||||
+void CameraService::physicalFrontCam(bool on) {
|
||||
+ if(on == mPhysicalFrontCamStatus) return;
|
||||
+ mPhysicalFrontCamStatus = on;
|
||||
+
|
||||
+ if(access("/dev/asusMotoDrv", F_OK) == 0) {
|
||||
+ int pid = fork();
|
||||
+ if(pid == 0) {
|
||||
+ const char* cmd[] = {
|
||||
+ "/system/bin/asus-motor",
|
||||
+ "0",
|
||||
+ NULL
|
||||
+ };
|
||||
+ cmd[1] = on ? "0" : "1";
|
||||
+ execve("/system/bin/asus-motor", (char**)cmd, environ);
|
||||
+ _exit(1);
|
||||
+ } else {
|
||||
+ waitpid(pid, NULL, 0);
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
Status CameraService::setTorchMode(const String16& cameraId, bool enabled,
|
||||
const sp<IBinder>& clientBinder) {
|
||||
Mutex::Autolock lock(mServiceLock);
|
||||
@@ -2466,6 +2490,8 @@ binder::Status CameraService::BasicClient::disconnect() {
|
||||
cameraMotor->onDisconnect(mCameraIdStr.string());
|
||||
}
|
||||
|
||||
+ sCameraService->physicalFrontCam(false);
|
||||
+
|
||||
sCameraService->removeByClient(this);
|
||||
sCameraService->logDisconnected(mCameraIdStr, mClientPid, String8(mClientPackageName));
|
||||
sCameraService->mCameraProviderManager->removeRef(CameraProviderManager::DeviceMode::CAMERA,
|
||||
diff --git a/services/camera/libcameraservice/CameraService.h b/services/camera/libcameraservice/CameraService.h
|
||||
index bcaca9ffc..2607bc257 100644
|
||||
--- a/services/camera/libcameraservice/CameraService.h
|
||||
+++ b/services/camera/libcameraservice/CameraService.h
|
||||
@@ -182,6 +182,9 @@ public:
|
||||
// Monitored UIDs availability notification
|
||||
void notifyMonitoredUids();
|
||||
|
||||
+ bool mPhysicalFrontCamStatus;
|
||||
+ void physicalFrontCam(bool on);
|
||||
+
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
// Client functionality
|
||||
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,38 +0,0 @@
|
||||
From 922e144d1ceba361f0a92372e3fda5161249fc74 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Tue, 3 Dec 2019 14:04:17 +0100
|
||||
Subject: [PATCH 12/17] Fix for some Huawei camera (that's not ideal because it
|
||||
is a revert, it needs to be further investigated and cleaned)
|
||||
|
||||
---
|
||||
services/camera/libcameraservice/CameraService.cpp | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp
|
||||
index 100db9e3c..6a68a40b9 100644
|
||||
--- a/services/camera/libcameraservice/CameraService.cpp
|
||||
+++ b/services/camera/libcameraservice/CameraService.cpp
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
#define LOG_TAG "CameraService"
|
||||
#define ATRACE_TAG ATRACE_TAG_CAMERA
|
||||
-//#define LOG_NDEBUG 0
|
||||
+#define LOG_NDEBUG 0
|
||||
|
||||
#include <algorithm>
|
||||
#include <climits>
|
||||
@@ -228,9 +228,9 @@ status_t CameraService::enumerateProviders() {
|
||||
}
|
||||
}
|
||||
|
||||
- if (getCameraState(id8) == nullptr) {
|
||||
+ //if (getCameraState(id8) == nullptr) {
|
||||
onDeviceStatusChanged(id8, CameraDeviceStatus::PRESENT);
|
||||
- }
|
||||
+ //}
|
||||
}
|
||||
|
||||
return OK;
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,57 +0,0 @@
|
||||
From 00a797e23bf88d6cd28f32155a02c40b4f9b91cb Mon Sep 17 00:00:00 2001
|
||||
From: Peter Cai <peter@typeblog.net>
|
||||
Date: Thu, 23 Jan 2020 11:13:43 +0800
|
||||
Subject: [PATCH 13/17] audiopolicy: try again with trimmed audio port name if
|
||||
not found
|
||||
|
||||
* In Spreadtrum BSP, some audio routes may contain ports with extra
|
||||
spaces at the beginning and the end, causing audiopolicy to refuse to
|
||||
load and leading to broken audio.
|
||||
|
||||
* Fix this by retrying with trimmed port name when not found. Do not
|
||||
use trimmed name all the time because a white space is a valid
|
||||
character in port name, and we cannot be sure nobody is using it for
|
||||
legitimite purposes.
|
||||
---
|
||||
.../managerdefinitions/src/Serializer.cpp | 18 ++++++++++++++++--
|
||||
1 file changed, 16 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||
index 8bfdb5b0a..4bdb082ba 100644
|
||||
--- a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||
+++ b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||
@@ -550,6 +550,17 @@ Return<DevicePortTraits::Element> DevicePortTraits::deserialize(const xmlNode *c
|
||||
return deviceDesc;
|
||||
}
|
||||
|
||||
+char* trim(char * s) {
|
||||
+ int l = strlen(s);
|
||||
+
|
||||
+ if (l > 0) {
|
||||
+ while (isspace(s[l - 1])) --l;
|
||||
+ while (*s && isspace(*s)) ++s, --l;
|
||||
+ }
|
||||
+
|
||||
+ return strndup(s, l);
|
||||
+}
|
||||
+
|
||||
Return<RouteTraits::Element> RouteTraits::deserialize(const xmlNode *cur, PtrSerializingCtx ctx)
|
||||
{
|
||||
std::string type = getXmlAttribute(cur, Attributes::type);
|
||||
@@ -590,8 +601,11 @@ Return<RouteTraits::Element> RouteTraits::deserialize(const xmlNode *cur, PtrSer
|
||||
if (strlen(devTag) != 0) {
|
||||
sp<AudioPort> source = ctx->findPortByTagName(String8(devTag));
|
||||
if (source == NULL) {
|
||||
- ALOGE("%s: no source found with name=%s", __func__, devTag);
|
||||
- return Status::fromStatusT(BAD_VALUE);
|
||||
+ source = ctx->findPortByTagName(String8(trim(devTag)));
|
||||
+ if (source == NULL) {
|
||||
+ ALOGE("%s: no source found with name=%s", __func__, devTag);
|
||||
+ return Status::fromStatusT(BAD_VALUE);
|
||||
+ }
|
||||
}
|
||||
sources.add(source);
|
||||
}
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,45 +0,0 @@
|
||||
From e17862fc2b519ccddf7d578968a89f35ceaacfb1 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Mon, 13 Apr 2020 21:01:16 +0200
|
||||
Subject: [PATCH 14/17] There are three SCO devices. Fallback from one to the
|
||||
others if needed
|
||||
|
||||
---
|
||||
.../managerdefinitions/src/HwModule.cpp | 21 +++++++++++++++++++
|
||||
1 file changed, 21 insertions(+)
|
||||
|
||||
diff --git a/services/audiopolicy/common/managerdefinitions/src/HwModule.cpp b/services/audiopolicy/common/managerdefinitions/src/HwModule.cpp
|
||||
index 1f9b725a2..ecba6023d 100644
|
||||
--- a/services/audiopolicy/common/managerdefinitions/src/HwModule.cpp
|
||||
+++ b/services/audiopolicy/common/managerdefinitions/src/HwModule.cpp
|
||||
@@ -294,6 +294,27 @@ sp <HwModule> HwModuleCollection::getModuleForDeviceTypes(audio_devices_t type,
|
||||
}
|
||||
}
|
||||
}
|
||||
+ //We didn't find one? Ok but all SCOs are equivalent surely?
|
||||
+ if(type == AUDIO_DEVICE_OUT_BLUETOOTH_SCO ||
|
||||
+ type == AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET ||
|
||||
+ type == AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT) {
|
||||
+ ALOGE("Fallback SCO");
|
||||
+ if(type != AUDIO_DEVICE_OUT_BLUETOOTH_SCO) {
|
||||
+ auto ret = getModuleForDeviceTypes(AUDIO_DEVICE_OUT_BLUETOOTH_SCO, encodedFormat);
|
||||
+ ALOGE("Fallback SCO simple? %s", (ret != nullptr) ? "yes" : "no");
|
||||
+ if(ret != nullptr) return ret;
|
||||
+ }
|
||||
+ if(type != AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET) {
|
||||
+ auto ret = getModuleForDeviceTypes(AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET, encodedFormat);
|
||||
+ ALOGE("Fallback SCO headset? %s", (ret != nullptr) ? "yes" : "no");
|
||||
+ if(ret != nullptr) return ret;
|
||||
+ }
|
||||
+ if(type != AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT) {
|
||||
+ auto ret = getModuleForDeviceTypes(AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT, encodedFormat);
|
||||
+ ALOGE("Fallback SCO carkit? %s", (ret != nullptr) ? "yes" : "no");
|
||||
+ if(ret != nullptr) return ret;
|
||||
+ }
|
||||
+ }
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,71 +0,0 @@
|
||||
From 9fef86bc540a7fa95432d5bc8da3fc18b07ae843 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Thu, 14 May 2020 19:54:55 +0200
|
||||
Subject: [PATCH 15/17] Add persist.sys.phh.samsung.camera_ids property to
|
||||
access hidden Samsung cameras
|
||||
|
||||
---
|
||||
services/camera/libcameraservice/Android.bp | 1 +
|
||||
.../common/CameraProviderManager.cpp | 13 +++++++++++--
|
||||
2 files changed, 12 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/services/camera/libcameraservice/Android.bp b/services/camera/libcameraservice/Android.bp
|
||||
index c4bc0f1a9..d6a4d6132 100644
|
||||
--- a/services/camera/libcameraservice/Android.bp
|
||||
+++ b/services/camera/libcameraservice/Android.bp
|
||||
@@ -108,6 +108,7 @@ cc_library_shared {
|
||||
"android.hardware.camera.device@3.4",
|
||||
"android.hardware.camera.device@3.5",
|
||||
"vendor.lineage.camera.motor@1.0",
|
||||
+ "vendor.samsung.hardware.camera.provider@3.0",
|
||||
],
|
||||
|
||||
export_shared_lib_headers: [
|
||||
diff --git a/services/camera/libcameraservice/common/CameraProviderManager.cpp b/services/camera/libcameraservice/common/CameraProviderManager.cpp
|
||||
index fdb565750..9c1c70c84 100644
|
||||
--- a/services/camera/libcameraservice/common/CameraProviderManager.cpp
|
||||
+++ b/services/camera/libcameraservice/common/CameraProviderManager.cpp
|
||||
@@ -21,6 +21,7 @@
|
||||
#include "CameraProviderManager.h"
|
||||
|
||||
#include <android/hardware/camera/device/3.5/ICameraDevice.h>
|
||||
+#include <vendor/samsung/hardware/camera/provider/3.0/ISehCameraProvider.h>
|
||||
|
||||
#include <algorithm>
|
||||
#include <chrono>
|
||||
@@ -1225,6 +1226,9 @@ status_t CameraProviderManager::ProviderInfo::initialize(
|
||||
mMinorVersion = 4;
|
||||
}
|
||||
|
||||
+ auto samsungCast = vendor::samsung::hardware::camera::provider::V3_0::ISehCameraProvider::castFrom(interface);
|
||||
+ auto samsungProvider = samsungCast.isOk() ? static_cast<sp<vendor::samsung::hardware::camera::provider::V3_0::ISehCameraProvider>>(samsungCast) : nullptr;
|
||||
+
|
||||
// cameraDeviceStatusChange callbacks may be called (and causing new devices added)
|
||||
// before setCallback returns
|
||||
hardware::Return<Status> status = interface->setCallback(this);
|
||||
@@ -1269,7 +1273,7 @@ status_t CameraProviderManager::ProviderInfo::initialize(
|
||||
|
||||
// Get initial list of camera devices, if any
|
||||
std::vector<std::string> devices;
|
||||
- hardware::Return<void> ret = interface->getCameraIdList([&status, this, &devices](
|
||||
+ auto cb = [&status, this, &devices](
|
||||
Status idStatus,
|
||||
const hardware::hidl_vec<hardware::hidl_string>& cameraDeviceNames) {
|
||||
status = idStatus;
|
||||
@@ -1286,7 +1290,12 @@ status_t CameraProviderManager::ProviderInfo::initialize(
|
||||
mProviderPublicCameraIds.push_back(id);
|
||||
}
|
||||
}
|
||||
- } });
|
||||
+ } };
|
||||
+ hardware::Return<void> ret;
|
||||
+ if(samsungProvider != nullptr && property_get_bool("persist.sys.phh.samsung.camera_ids", false))
|
||||
+ ret = samsungProvider->sehGetCameraIdList(cb);
|
||||
+ else
|
||||
+ ret = interface->getCameraIdList(cb);
|
||||
if (!ret.isOk()) {
|
||||
ALOGE("%s: Transaction error in getting camera ID list from provider '%s': %s",
|
||||
__FUNCTION__, mProviderName.c_str(), linked.description().c_str());
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,45 +0,0 @@
|
||||
From b629b586c808f6e8e3415b578f10fe02b63b1631 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Tue, 19 May 2020 14:01:14 +0200
|
||||
Subject: [PATCH 16/17] Add a property to force camera timestamp source
|
||||
|
||||
Some devices wrongly report their timesource
|
||||
Camera's timesource can either be CLOCK_MONOTONIC, or CLOCK_BOOTTIME
|
||||
The former doesn't increment in sleep, while the later does.
|
||||
There is a camera HAL property for that, though some devices don't
|
||||
report it properly.
|
||||
|
||||
This issue happens on Xiaomi Redmi 7A, it needs to force the value to 1
|
||||
|
||||
Add a property persist.sys.phh.camera.force_timestampsource to force
|
||||
timestamp source.
|
||||
---
|
||||
.../libcameraservice/device3/Camera3Device.cpp | 12 ++++++++++--
|
||||
1 file changed, 10 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/services/camera/libcameraservice/device3/Camera3Device.cpp b/services/camera/libcameraservice/device3/Camera3Device.cpp
|
||||
index 93e18cfee..9cc44f1ec 100644
|
||||
--- a/services/camera/libcameraservice/device3/Camera3Device.cpp
|
||||
+++ b/services/camera/libcameraservice/device3/Camera3Device.cpp
|
||||
@@ -299,8 +299,16 @@ status_t Camera3Device::initializeCommonLocked() {
|
||||
// Measure the clock domain offset between camera and video/hw_composer
|
||||
camera_metadata_entry timestampSource =
|
||||
mDeviceInfo.find(ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE);
|
||||
- if (timestampSource.count > 0 && timestampSource.data.u8[0] ==
|
||||
- ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME) {
|
||||
+ int timestampSourceValue = 0;
|
||||
+ if ((timestampSource.count > 0 && timestampSource.data.u8[0] ==
|
||||
+ ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME)) {
|
||||
+ timestampSourceValue = 1;
|
||||
+ }
|
||||
+ int forceTimestampSource = property_get_int32("persist.sys.phh.camera.force_timestampsource", -1);
|
||||
+ //Don't override if it's -1, default value
|
||||
+ if(forceTimestampSource == 0) timestampSourceValue = 0;
|
||||
+ if(forceTimestampSource == 1) timestampSourceValue = 1;
|
||||
+ if (timestampSourceValue == 1) {
|
||||
mTimestampOffset = getMonoToBoottimeOffset();
|
||||
}
|
||||
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,325 +0,0 @@
|
||||
From 95e61a23a96f0274d222e4ef84ee8583fc36baab Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Mon, 25 May 2020 21:26:54 +0200
|
||||
Subject: [PATCH 17/17] Add persist.sys.phh.disable_a2dp_offload property to
|
||||
force a2dp offload
|
||||
|
||||
---
|
||||
media/libstagefright/ACodec.cpp | 20 +-
|
||||
.../managerdefinitions/src/Serializer.cpp | 180 +++++++++++++++++-
|
||||
.../managerdefault/AudioPolicyManager.cpp | 3 +
|
||||
3 files changed, 197 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp
|
||||
index e8b493183..310740ab5 100644
|
||||
--- a/media/libstagefright/ACodec.cpp
|
||||
+++ b/media/libstagefright/ACodec.cpp
|
||||
@@ -1166,6 +1166,9 @@ status_t ACodec::configureOutputBuffersFromNativeWindow(
|
||||
return err;
|
||||
}
|
||||
|
||||
+ ALOGE("Window undequeued buffers is %d\n", *minUndequeuedBuffers);
|
||||
+ ALOGE("Consumerrequested %d\n", def.nBufferCountMin);
|
||||
+
|
||||
// FIXME: assume that surface is controlled by app (native window
|
||||
// returns the number for the case when surface is not controlled by app)
|
||||
// FIXME2: This means that minUndeqeueudBufs can be 1 larger than reported
|
||||
@@ -1178,22 +1181,29 @@ status_t ACodec::configureOutputBuffersFromNativeWindow(
|
||||
// 2. try to allocate two (2) additional buffers to reduce starvation from
|
||||
// the consumer
|
||||
// plus an extra buffer to account for incorrect minUndequeuedBufs
|
||||
- for (OMX_U32 extraBuffers = 2 + 1; /* condition inside loop */; extraBuffers--) {
|
||||
- OMX_U32 newBufferCount =
|
||||
- def.nBufferCountMin + *minUndequeuedBuffers + extraBuffers;
|
||||
+ for (int extraBuffers = 2 + 1; /* condition inside loop */; extraBuffers--) {
|
||||
+ int a = def.nBufferCountMin;
|
||||
+ int b = *minUndequeuedBuffers;
|
||||
+ int c = extraBuffers;
|
||||
+ int newBufferCount = a+b+c;
|
||||
def.nBufferCountActual = newBufferCount;
|
||||
err = mOMXNode->setParameter(
|
||||
OMX_IndexParamPortDefinition, &def, sizeof(def));
|
||||
|
||||
if (err == OK) {
|
||||
- *minUndequeuedBuffers += extraBuffers;
|
||||
+ ALOGE("Managed to allocate %d buffers (%d extra)\n", newBufferCount, extraBuffers);
|
||||
+ if(extraBuffers > 0) {
|
||||
+ *minUndequeuedBuffers += extraBuffers;
|
||||
+ } else {
|
||||
+ *minUndequeuedBuffers -= -extraBuffers;
|
||||
+ }
|
||||
break;
|
||||
}
|
||||
|
||||
ALOGW("[%s] setting nBufferCountActual to %u failed: %d",
|
||||
mComponentName.c_str(), newBufferCount, err);
|
||||
/* exit condition */
|
||||
- if (extraBuffers == 0) {
|
||||
+ if (extraBuffers == -2 || newBufferCount == 1) {
|
||||
return err;
|
||||
}
|
||||
}
|
||||
diff --git a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||
index 4bdb082ba..d144f8991 100644
|
||||
--- a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||
+++ b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||
@@ -29,6 +29,7 @@
|
||||
#include <utils/StrongPointer.h>
|
||||
#include <utils/Errors.h>
|
||||
#include <utils/RefBase.h>
|
||||
+#include <cutils/properties.h>
|
||||
#include "Serializer.h"
|
||||
#include "TypeConverter.h"
|
||||
|
||||
@@ -36,6 +37,8 @@ namespace android {
|
||||
|
||||
namespace {
|
||||
|
||||
+static bool forceDisableA2dpOffload = false;
|
||||
+
|
||||
// TODO(mnaganov): Consider finding an alternative for using HIDL code.
|
||||
using hardware::Return;
|
||||
using hardware::Status;
|
||||
@@ -316,7 +319,7 @@ status_t deserializeCollection(const xmlNode *cur,
|
||||
return status;
|
||||
}
|
||||
} else {
|
||||
- return BAD_VALUE;
|
||||
+ ALOGE("Ignoring...");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -732,12 +735,34 @@ Return<ModuleTraits::Element> ModuleTraits::deserialize(const xmlNode *cur, PtrS
|
||||
|
||||
Element module = new HwModule(name.c_str(), versionMajor, versionMinor);
|
||||
|
||||
+ bool isA2dpModule = strcmp(name.c_str(), "a2dp") == 0;
|
||||
+ bool isPrimaryModule = strcmp(name.c_str(), "primary") == 0;
|
||||
+
|
||||
// Deserialize childrens: Audio Mix Port, Audio Device Ports (Source/Sink), Audio Routes
|
||||
MixPortTraits::Collection mixPorts;
|
||||
status_t status = deserializeCollection<MixPortTraits>(cur, &mixPorts, NULL);
|
||||
if (status != NO_ERROR) {
|
||||
return Status::fromStatusT(status);
|
||||
}
|
||||
+ if(forceDisableA2dpOffload && isA2dpModule) {
|
||||
+ for(const auto& mixPort: mixPorts) {
|
||||
+ ALOGE("Disable a2dp offload...? %s", mixPort->getTagName().c_str());
|
||||
+ //"a2dp" sw module already has a2dp out
|
||||
+ if(mixPort->getTagName() == String8("a2dp output")) {
|
||||
+ forceDisableA2dpOffload = false;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ if(forceDisableA2dpOffload && isA2dpModule) {
|
||||
+ //Add
|
||||
+ //<mixPort name="a2dp output" role="source"/>
|
||||
+ auto mixPort = new IOProfile(String8("a2dp output"), AUDIO_PORT_ROLE_SOURCE);
|
||||
+ AudioProfileTraits::Collection profiles;
|
||||
+ profiles.add(AudioProfile::createFullDynamic());
|
||||
+ mixPort->setAudioProfiles(profiles);
|
||||
+ mixPorts.push_back(mixPort);
|
||||
+ }
|
||||
module->setProfiles(mixPorts);
|
||||
|
||||
DevicePortTraits::Collection devicePorts;
|
||||
@@ -745,6 +770,89 @@ Return<ModuleTraits::Element> ModuleTraits::deserialize(const xmlNode *cur, PtrS
|
||||
if (status != NO_ERROR) {
|
||||
return Status::fromStatusT(status);
|
||||
}
|
||||
+ Vector<String8> a2dpOuts;
|
||||
+ a2dpOuts.push_back(String8("BT A2DP Out"));
|
||||
+ a2dpOuts.push_back(String8("BT A2DP Headphones"));
|
||||
+ a2dpOuts.push_back(String8("BT A2DP Speaker"));
|
||||
+ if(forceDisableA2dpOffload) {
|
||||
+ if(isA2dpModule) {
|
||||
+ //<devicePort tagName="BT A2DP Out" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP" role="sink" address="lhdc_a2dp">
|
||||
+ // <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||
+ // samplingRates="44100,48000,96000"
|
||||
+ // channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
|
||||
+ //</devicePort>
|
||||
+ if(true) {
|
||||
+ FormatVector formats;
|
||||
+ auto devicePortOut = new DeviceDescriptor(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP, formats, String8(strdup("BT A2DP Out")));
|
||||
+ AudioProfileTraits::Collection profiles;
|
||||
+ ChannelsVector channels;
|
||||
+ SampleRateVector sampleRates;
|
||||
+ channels.add(AUDIO_CHANNEL_OUT_STEREO);
|
||||
+ sampleRates.add(44100);
|
||||
+ sampleRates.add(48000);
|
||||
+ sampleRates.add(96000);
|
||||
+ auto profile = new AudioProfile(AUDIO_FORMAT_PCM_16_BIT, channels, sampleRates);
|
||||
+ profiles.add(profile);
|
||||
+ devicePortOut->setAudioProfiles(profiles);
|
||||
+ devicePortOut->setAddress(String8("lhdc_a2dp"));
|
||||
+ devicePorts.add(devicePortOut);
|
||||
+ }
|
||||
+ //<devicePort tagName="BT A2DP Headphones" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES" role="sink" address="lhdc_a2dp">
|
||||
+ // <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||
+ // samplingRates="44100,48000,96000"
|
||||
+ // channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
|
||||
+ //</devicePort>
|
||||
+ if(true) {
|
||||
+ FormatVector formats;
|
||||
+ auto devicePortOut = new DeviceDescriptor(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES, formats, String8(strdup("BT A2DP Headphones")));
|
||||
+ AudioProfileTraits::Collection profiles;
|
||||
+ ChannelsVector channels;
|
||||
+ SampleRateVector sampleRates;
|
||||
+ channels.add(AUDIO_CHANNEL_OUT_STEREO);
|
||||
+ sampleRates.add(44100);
|
||||
+ sampleRates.add(48000);
|
||||
+ sampleRates.add(96000);
|
||||
+ auto profile = new AudioProfile(AUDIO_FORMAT_PCM_16_BIT, channels, sampleRates);
|
||||
+ profiles.add(profile);
|
||||
+ devicePortOut->setAudioProfiles(profiles);
|
||||
+ devicePortOut->setAddress(String8("lhdc_a2dp"));
|
||||
+ devicePorts.add(devicePortOut);
|
||||
+ }
|
||||
+ //<devicePort tagName="BT A2DP Speaker" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER" role="sink" address="lhdc_a2dp">
|
||||
+ // <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||
+ // samplingRates="44100,48000,96000"
|
||||
+ // channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
|
||||
+ //</devicePort>
|
||||
+ if(true) {
|
||||
+ FormatVector formats;
|
||||
+ auto devicePortOut = new DeviceDescriptor(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER, formats, String8(strdup("BT A2DP Speaker")));
|
||||
+ AudioProfileTraits::Collection profiles;
|
||||
+ ChannelsVector channels;
|
||||
+ SampleRateVector sampleRates;
|
||||
+ channels.add(AUDIO_CHANNEL_OUT_STEREO);
|
||||
+ sampleRates.add(44100);
|
||||
+ sampleRates.add(48000);
|
||||
+ sampleRates.add(96000);
|
||||
+ auto profile = new AudioProfile(AUDIO_FORMAT_PCM_16_BIT, channels, sampleRates);
|
||||
+ profiles.add(profile);
|
||||
+ devicePortOut->setAudioProfiles(profiles);
|
||||
+ devicePortOut->setAddress(String8("lhdc_a2dp"));
|
||||
+ devicePorts.add(devicePortOut);
|
||||
+
|
||||
+ }
|
||||
+ } else if(isPrimaryModule) {
|
||||
+ for(const auto& out: a2dpOuts) {
|
||||
+ auto iterA = std::find_if(devicePorts.begin(), devicePorts.end(), [out](const auto port) {
|
||||
+ if(port->getTagName() == out) return true;
|
||||
+ return false;
|
||||
+ });
|
||||
+ if(iterA != devicePorts.end()) {
|
||||
+ ALOGE("Erasing device port %s", (*iterA)->getTagName().c_str());
|
||||
+ devicePorts.erase(iterA);
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
module->setDeclaredDevices(devicePorts);
|
||||
|
||||
RouteTraits::Collection routes;
|
||||
@@ -752,7 +860,76 @@ Return<ModuleTraits::Element> ModuleTraits::deserialize(const xmlNode *cur, PtrS
|
||||
if (status != NO_ERROR) {
|
||||
return Status::fromStatusT(status);
|
||||
}
|
||||
+ if(forceDisableA2dpOffload) {
|
||||
+ if(strcmp(name.c_str(), "primary") == 0) {
|
||||
+ for(const auto& out: a2dpOuts) {
|
||||
+ auto iterA = std::find_if(routes.begin(), routes.end(), [out](const auto route) {
|
||||
+ if(route->getType() != AUDIO_ROUTE_MIX)
|
||||
+ return false;
|
||||
+ auto sink = route->getSink();
|
||||
+ if(sink->getTagName() == out) {
|
||||
+ return true;
|
||||
+ }
|
||||
+ return false;
|
||||
+ });
|
||||
+ if(iterA != routes.end()) {
|
||||
+ auto sink = (*iterA)->getSink()->getTagName();
|
||||
+ ALOGE("Erasing route %s", sink.c_str());
|
||||
+ routes.erase(iterA);
|
||||
+ }
|
||||
+ }
|
||||
+ } else if(isA2dpModule) {
|
||||
+ //<route type="mix" sink="BT A2DP Out"
|
||||
+ // sources="a2dp output"/>
|
||||
+ if(true) {
|
||||
+ auto newRoute = new AudioRoute(AUDIO_ROUTE_MIX);
|
||||
+ auto sink = module->findPortByTagName(String8("BT A2DP Out"));
|
||||
+ auto source = module->findPortByTagName(String8("a2dp output"));
|
||||
+ newRoute->setSink(sink);
|
||||
+ AudioPortVector sources;
|
||||
+ sources.add(source);
|
||||
+
|
||||
+ sink->addRoute(newRoute);
|
||||
+ source->addRoute(newRoute);
|
||||
+ newRoute->setSources(sources);
|
||||
+
|
||||
+ routes.add(newRoute);
|
||||
+ }
|
||||
+ //<route type="mix" sink="BT A2DP Headphones"
|
||||
+ // sources="a2dp output"/>
|
||||
+ if(true) {
|
||||
+ auto newRoute = new AudioRoute(AUDIO_ROUTE_MIX);
|
||||
+ auto sink = module->findPortByTagName(String8("BT A2DP Headphones"));
|
||||
+ auto source = module->findPortByTagName(String8("a2dp output"));
|
||||
+ newRoute->setSink(sink);
|
||||
+ AudioPortVector sources;
|
||||
+ sources.add(source);
|
||||
+
|
||||
+ sink->addRoute(newRoute);
|
||||
+ source->addRoute(newRoute);
|
||||
+ newRoute->setSources(sources);
|
||||
+ routes.add(newRoute);
|
||||
+ }
|
||||
+ //<route type="mix" sink="BT A2DP Speaker"
|
||||
+ // sources="a2dp output"/>
|
||||
+ if(true) {
|
||||
+ auto newRoute = new AudioRoute(AUDIO_ROUTE_MIX);
|
||||
+ auto sink = module->findPortByTagName(String8("BT A2DP Speaker"));
|
||||
+ auto source = module->findPortByTagName(String8("a2dp output"));
|
||||
+ newRoute->setSink(sink);
|
||||
+ AudioPortVector sources;
|
||||
+ sources.add(source);
|
||||
+
|
||||
+ sink->addRoute(newRoute);
|
||||
+ source->addRoute(newRoute);
|
||||
+ newRoute->setSources(sources);
|
||||
+ routes.add(newRoute);
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ ALOGE("Good morning");
|
||||
fixupQualcommBtScoRoute(routes, devicePorts, module.get());
|
||||
+ ALOGE("Good morning2");
|
||||
module->setRoutes(routes);
|
||||
|
||||
for (const xmlNode *children = cur->xmlChildrenNode; children != NULL;
|
||||
@@ -922,6 +1099,7 @@ status_t PolicySerializer::deserialize(const char *configFile, AudioPolicyConfig
|
||||
status_t deserializeAudioPolicyFile(const char *fileName, AudioPolicyConfig *config)
|
||||
{
|
||||
PolicySerializer serializer;
|
||||
+ forceDisableA2dpOffload = property_get_bool("persist.sys.phh.disable_a2dp_offload", false);
|
||||
return serializer.deserialize(fileName, config);
|
||||
}
|
||||
|
||||
diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
|
||||
index 642559089..c5fad0d6c 100644
|
||||
--- a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
|
||||
+++ b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
|
||||
@@ -76,6 +76,8 @@ static const std::vector<audio_channel_mask_t> surroundChannelMasksOrder = {{
|
||||
AUDIO_CHANNEL_OUT_2POINT1POINT2, AUDIO_CHANNEL_OUT_2POINT0POINT2,
|
||||
AUDIO_CHANNEL_OUT_5POINT1, AUDIO_CHANNEL_OUT_STEREO }};
|
||||
|
||||
+static bool forceDisableA2dpOffload = false;
|
||||
+
|
||||
// ----------------------------------------------------------------------------
|
||||
// AudioPolicyInterface implementation
|
||||
// ----------------------------------------------------------------------------
|
||||
@@ -4256,6 +4258,7 @@ static status_t deserializeAudioPolicyXmlConfig(AudioPolicyConfig &config) {
|
||||
} else if (property_get_bool("persist.bluetooth.bluetooth_audio_hal.disabled", false)) {
|
||||
fileNames.push_back(AUDIO_POLICY_BLUETOOTH_LEGACY_HAL_XML_CONFIG_FILE_NAME);
|
||||
}
|
||||
+ forceDisableA2dpOffload = property_get_bool("persist.sys.phh.disable_a2dp_offload", false);
|
||||
fileNames.push_back(AUDIO_POLICY_XML_CONFIG_FILE_NAME);
|
||||
|
||||
for (const char* fileName : fileNames) {
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,56 +0,0 @@
|
||||
From 005da321c7023c10bb9eb637b9bde2c9bff065d1 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/58] 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 0a308846181..347543584e4 100644
|
||||
--- a/services/core/java/com/android/server/lights/LightsService.java
|
||||
+++ b/services/core/java/com/android/server/lights/LightsService.java
|
||||
@@ -22,6 +22,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;
|
||||
@@ -72,6 +73,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().
|
||||
@@ -88,11 +90,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.25.1
|
||||
|
@ -1,31 +0,0 @@
|
||||
From 318cda922fc2b2ed25519fc92bb58da4dc349db6 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/58] 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 263efacb097..39a60e1778f 100644
|
||||
--- a/services/core/java/com/android/server/StorageManagerService.java
|
||||
+++ b/services/core/java/com/android/server/StorageManagerService.java
|
||||
@@ -1283,7 +1283,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.25.1
|
||||
|
@ -1,52 +0,0 @@
|
||||
From cc8745759acea40bb31f384b4fb70d33c4dd6a00 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/58] 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 8ba2559ec2e..45b3c6a909d 100644
|
||||
--- a/core/jni/fd_utils.cpp
|
||||
+++ b/core/jni/fd_utils.cpp
|
||||
@@ -119,7 +119,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.25.1
|
||||
|
@ -1,28 +0,0 @@
|
||||
From cd2464e7cfe3b9effe431e66a06fd1a8f42fe04d 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 04/58] 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 98323908c8d..5b69c434f46 100644
|
||||
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
|
||||
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
|
||||
@@ -1214,7 +1214,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.25.1
|
||||
|
@ -1,36 +0,0 @@
|
||||
From 21dbb7af9d7f40b7f28a763a7498326e18d1f6d1 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 05/58] 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 347543584e4..bc424682a86 100644
|
||||
--- a/services/core/java/com/android/server/lights/LightsService.java
|
||||
+++ b/services/core/java/com/android/server/lights/LightsService.java
|
||||
@@ -93,11 +93,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.25.1
|
||||
|
@ -1,35 +0,0 @@
|
||||
From 464f2398bb33b5d9e3e9ea0ec150e8c180e2a808 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 06/58] 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 bc424682a86..c33a9c6cb1b 100644
|
||||
--- a/services/core/java/com/android/server/lights/LightsService.java
|
||||
+++ b/services/core/java/com/android/server/lights/LightsService.java
|
||||
@@ -99,6 +99,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.25.1
|
||||
|
@ -1,31 +0,0 @@
|
||||
From f61186905bf0425fe8a56c966fb87adbefea61f4 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 07/58] 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 c33a9c6cb1b..b2f444f00e1 100644
|
||||
--- a/services/core/java/com/android/server/lights/LightsService.java
|
||||
+++ b/services/core/java/com/android/server/lights/LightsService.java
|
||||
@@ -102,9 +102,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.25.1
|
||||
|
@ -1,35 +0,0 @@
|
||||
From 397240e75f8a5e80280f9f0cd8fb0133a509ef94 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 08/58] 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.25.1
|
||||
|
@ -1,25 +0,0 @@
|
||||
From 2d5671a1241bcb8cdee11180de11a04c4f184a2d 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 09/58] 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.25.1
|
||||
|
@ -1,27 +0,0 @@
|
||||
From 506721861c7d8844885e03d0115272d643eb148d 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 10/58] 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 b2f444f00e1..939437f82a4 100644
|
||||
--- a/services/core/java/com/android/server/lights/LightsService.java
|
||||
+++ b/services/core/java/com/android/server/lights/LightsService.java
|
||||
@@ -95,7 +95,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.25.1
|
||||
|
@ -1,33 +0,0 @@
|
||||
From df349c13c31ac523ac0e054338f9270049a428bd 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 11/58] "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 320e1022873..9789c49f069 100644
|
||||
--- a/services/core/java/com/android/server/biometrics/fingerprint/FingerprintService.java
|
||||
+++ b/services/core/java/com/android/server/biometrics/fingerprint/FingerprintService.java
|
||||
@@ -590,7 +590,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.25.1
|
||||
|
@ -1,25 +0,0 @@
|
||||
From 5727db8ca1ca71a847443b2d37a2ab4ed45b01ed 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 12/58] 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 e209a42c4ba..7f19121d78c 100644
|
||||
--- a/telephony/java/android/telephony/CarrierConfigManager.java
|
||||
+++ b/telephony/java/android/telephony/CarrierConfigManager.java
|
||||
@@ -3333,7 +3333,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.25.1
|
||||
|
@ -1,26 +0,0 @@
|
||||
From 8ad9065fbaa02e368be5ba5576fe98ff1f4be856 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 13/58] 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.25.1
|
||||
|
@ -1,44 +0,0 @@
|
||||
From 238fc8c9b0297df0205b988a4fcccc4dc8b620bc 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 14/58] 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.25.1
|
||||
|
@ -1,28 +0,0 @@
|
||||
From eb32a6fa5aebe2e021ba998ddf3970275b4da9a9 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 15/58] 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 939437f82a4..f7c07044d66 100644
|
||||
--- a/services/core/java/com/android/server/lights/LightsService.java
|
||||
+++ b/services/core/java/com/android/server/lights/LightsService.java
|
||||
@@ -95,9 +95,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.25.1
|
||||
|
@ -1,30 +0,0 @@
|
||||
From 2b4b81841941cad4f0b0a3cccbf023a9c819b30e 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 16/58] 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 f7c07044d66..f1a22ee2dc4 100644
|
||||
--- a/services/core/java/com/android/server/lights/LightsService.java
|
||||
+++ b/services/core/java/com/android/server/lights/LightsService.java
|
||||
@@ -96,7 +96,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.25.1
|
||||
|
@ -1,39 +0,0 @@
|
||||
From d4633552f1162cdacd769291a1ee08493a3b8816 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 17/58] 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 55e8e19fd27..7107bba3292 100644
|
||||
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
|
||||
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
|
||||
@@ -2835,6 +2835,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.
|
||||
@@ -3068,7 +3074,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.25.1
|
||||
|
@ -1,26 +0,0 @@
|
||||
From 7cf02f6a837cbba31bc214a8716be7e0d1055762 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 18/58] 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 f1a22ee2dc4..15ab8cecfb5 100644
|
||||
--- a/services/core/java/com/android/server/lights/LightsService.java
|
||||
+++ b/services/core/java/com/android/server/lights/LightsService.java
|
||||
@@ -95,7 +95,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.25.1
|
||||
|
@ -1,36 +0,0 @@
|
||||
From d2029feef32f7e15327013c7c58db5616ed8235c 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 19/58] 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 11c1632b00f..3c8bee02ca1 100644
|
||||
--- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
|
||||
+++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
|
||||
@@ -734,6 +734,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()) {
|
||||
@@ -741,9 +744,6 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
||||
return;
|
||||
}
|
||||
|
||||
- mUsageStats = LocalServices.getService(UsageStatsManagerInternal.class);
|
||||
- mNetworkStats = LocalServices.getService(NetworkStatsManagerInternal.class);
|
||||
-
|
||||
synchronized (mUidRulesFirstLock) {
|
||||
synchronized (mNetworkPoliciesSecondLock) {
|
||||
updatePowerSaveWhitelistUL();
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,33 +0,0 @@
|
||||
From e29eb86fe7f515b84816c824fc9e342e03f67df8 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 20/58] 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 15ab8cecfb5..31033d57616 100644
|
||||
--- a/services/core/java/com/android/server/lights/LightsService.java
|
||||
+++ b/services/core/java/com/android/server/lights/LightsService.java
|
||||
@@ -95,6 +95,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.25.1
|
||||
|
@ -1,70 +0,0 @@
|
||||
From 587b2c2d290643b0280f139141e9dd774c8edbca 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 21/58] 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..2f77726d5bd 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) {
|
||||
@@ -152,6 +156,21 @@ static void setLight_native(
|
||||
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(
|
||||
colorARGB, flashMode, onMS, offMS, brightnessMode);
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,28 +0,0 @@
|
||||
From f7297b9796d2d01dabf58256af529999977e74f5 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 22/58] 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 31033d57616..feba6bf8205 100644
|
||||
--- a/services/core/java/com/android/server/lights/LightsService.java
|
||||
+++ b/services/core/java/com/android/server/lights/LightsService.java
|
||||
@@ -104,7 +104,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.25.1
|
||||
|
@ -1,48 +0,0 @@
|
||||
From 63685ef6795e3b47f227ae5770c063969072644b 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 23/58] 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 feba6bf8205..f9ac8db09ea 100644
|
||||
--- a/services/core/java/com/android/server/lights/LightsService.java
|
||||
+++ b/services/core/java/com/android/server/lights/LightsService.java
|
||||
@@ -104,16 +104,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.25.1
|
||||
|
@ -1,29 +0,0 @@
|
||||
From 350739eec1738cebf50a64d4ae19fb61c3db769c 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 24/58] 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 9789c49f069..f6e0742aa67 100644
|
||||
--- a/services/core/java/com/android/server/biometrics/fingerprint/FingerprintService.java
|
||||
+++ b/services/core/java/com/android/server/biometrics/fingerprint/FingerprintService.java
|
||||
@@ -592,8 +592,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.25.1
|
||||
|
@ -1,37 +0,0 @@
|
||||
From 376f6e380451b51ded4e34403016a528ed62157b 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 25/58] 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.25.1
|
||||
|
@ -1,45 +0,0 @@
|
||||
From 4d1a24a3ea96184572bc741647b5cd43d4eae032 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 26/58] 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 e546534eb4c..6ac1589aab0 100644
|
||||
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
|
||||
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
|
||||
@@ -522,6 +522,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);
|
||||
@@ -1936,6 +1943,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.25.1
|
||||
|
@ -1,30 +0,0 @@
|
||||
From 231fd535554b81a5ef85aca4783da05bdbd330ec 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 27/58] 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 523f802141e..211ea50ddc9 100644
|
||||
--- a/services/core/jni/com_android_server_power_PowerManagerService.cpp
|
||||
+++ b/services/core/jni/com_android_server_power_PowerManagerService.cpp
|
||||
@@ -98,7 +98,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.25.1
|
||||
|
@ -1,31 +0,0 @@
|
||||
From 792cdc6603531eca7a91e3111ca3fd11b3711994 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 28/58] 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 6ac1589aab0..84f16c4af23 100644
|
||||
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
|
||||
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
|
||||
@@ -522,6 +522,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.25.1
|
||||
|
@ -1,411 +0,0 @@
|
||||
From 67d493c638ff4c901a5ca76f91141b8b6b6a7b57 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 29/58] 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 | 13 +-
|
||||
7 files changed, 254 insertions(+), 11 deletions(-)
|
||||
create mode 100644 services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
|
||||
diff --git a/Android.bp b/Android.bp
|
||||
index bdd88034655..5e79350ac5c 100644
|
||||
--- a/Android.bp
|
||||
+++ b/Android.bp
|
||||
@@ -779,6 +779,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 f6e0742aa67..92c0cc5dc85 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);
|
||||
+ }
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -181,7 +203,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);
|
||||
@@ -727,6 +748,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
|
||||
@@ -954,6 +976,7 @@ public class FingerprintService extends BiometricServiceBase {
|
||||
Slog.w(TAG, "startPreEnroll: no fingerprint HAL!");
|
||||
return 0;
|
||||
}
|
||||
+ mFacola.show();
|
||||
try {
|
||||
return daemon.preEnroll();
|
||||
} catch (RemoteException e) {
|
||||
@@ -968,6 +991,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 7107bba3292..8d2badb825a 100644
|
||||
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
|
||||
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
|
||||
@@ -2835,12 +2835,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 2f77726d5bd..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;
|
||||
|
||||
@@ -156,19 +159,23 @@ static void setLight_native(
|
||||
colorARGB = (colorAlpha << 24) + (colorARGB & 0x00FFFFFF);
|
||||
}
|
||||
|
||||
- sp<ISecLight> secHal = ISecLight::getService();
|
||||
+ if(!sSecTried) {
|
||||
+ sSecHal = ISecLight::getService();
|
||||
+ sSecTried = true;
|
||||
+ }
|
||||
|
||||
- if(secHal != nullptr) {
|
||||
+ 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.25.1
|
||||
|
@ -1,65 +0,0 @@
|
||||
From 12eee8e8f124d017db9265d587d3eabdcfe50803 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 30/58] 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.25.1
|
||||
|
@ -1,31 +0,0 @@
|
||||
From 3c029d1d6858aaa232e9706f847c390addf0fd96 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 31/58] 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 2b50d04233e..a21c6e2c8ef 100644
|
||||
--- a/services/core/jni/com_android_server_lights_LightsService.cpp
|
||||
+++ b/services/core/jni/com_android_server_lights_LightsService.cpp
|
||||
@@ -161,7 +161,7 @@ static void setLight_native(
|
||||
|
||||
if(!sSecTried) {
|
||||
sSecHal = ISecLight::getService();
|
||||
- sSecTried = true;
|
||||
+ //sSecTried = true;
|
||||
}
|
||||
|
||||
if(sSecHal != nullptr) {
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,121 +0,0 @@
|
||||
From 6f450d9a22c3155a1732dbc1bcbcaed2a5a8d052 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 32/58] 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.25.1
|
||||
|
@ -1,166 +0,0 @@
|
||||
From c37bc2054b6e8e8d7e5d469e082e423f56d092fc 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 33/58] 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 535a8bc9db7..a164cb186a9 100644
|
||||
--- a/core/java/android/content/pm/PackageParser.java
|
||||
+++ b/core/java/android/content/pm/PackageParser.java
|
||||
@@ -1355,6 +1355,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 {
|
||||
@@ -1394,6 +1395,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 {
|
||||
@@ -2574,7 +2576,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 179abe958b1..264e85d8eca 100644
|
||||
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
|
||||
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
|
||||
@@ -2668,6 +2668,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.25.1
|
||||
|
@ -1,97 +0,0 @@
|
||||
From a950589b497f0e635205591b358aaa18e45e74c3 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 34/58] 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 92c0cc5dc85..1323c5ec0dd 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();
|
||||
@@ -220,6 +230,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
|
||||
@@ -643,6 +654,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.25.1
|
||||
|
@ -1,26 +0,0 @@
|
||||
From 9cd57490c483e5a5b94d32d8fda5cc095734734d 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 35/58] 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.25.1
|
||||
|
@ -1,35 +0,0 @@
|
||||
From 6806da584a014aa51429e4779f999f83a0e826be Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Sun, 27 Oct 2019 16:27:55 +0100
|
||||
Subject: [PATCH 36/58] Fix crash on some devices by checking for null client
|
||||
|
||||
Some device get the following system_server crash:
|
||||
*** FATAL EXCEPTION IN SYSTEM PROCESS: main
|
||||
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.android.server.biometrics.ClientMonitor.onEnumerationResult(android.hardware.biometrics.BiometricAuthenticator$Identifier, int)' on a null object reference
|
||||
at com.android.server.biometrics.BiometricServiceBase.handleEnumerate(BiometricServiceBase.java:777)
|
||||
at com.android.server.biometrics.fingerprint.FingerprintService.access$6901(FingerprintService.java:93)
|
||||
at com.android.server.biometrics.fingerprint.FingerprintService$1.lambda$onEnumerate$5$FingerprintService$1(FingerprintService.java:686)
|
||||
at com.android.server.biometrics.fingerprint.-$$Lambda$FingerprintService$1$3I9ge5BoesXZUovbayCOCR754fc.run(Unknown Source:10)
|
||||
|
||||
Fix it by checking for `null` client before acting on it
|
||||
|
||||
Change-Id: If39d8c1b26c8c0a44b3d9292b646cb71ff258a95
|
||||
---
|
||||
.../java/com/android/server/biometrics/BiometricServiceBase.java | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/services/core/java/com/android/server/biometrics/BiometricServiceBase.java b/services/core/java/com/android/server/biometrics/BiometricServiceBase.java
|
||||
index 37a08de62fc..292798721c6 100644
|
||||
--- a/services/core/java/com/android/server/biometrics/BiometricServiceBase.java
|
||||
+++ b/services/core/java/com/android/server/biometrics/BiometricServiceBase.java
|
||||
@@ -792,6 +792,7 @@ public abstract class BiometricServiceBase extends SystemService
|
||||
protected void handleEnumerate(BiometricAuthenticator.Identifier identifier, int remaining) {
|
||||
ClientMonitor client = getCurrentClient();
|
||||
|
||||
+ if(client == null) return;
|
||||
client.onEnumerationResult(identifier, remaining);
|
||||
|
||||
// All templates in the HAL for this user were enumerated
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,475 +0,0 @@
|
||||
From ca4db4fe51356d20bf26142c188b6a691075c123 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Sun, 15 Dec 2019 16:38:44 +0100
|
||||
Subject: [PATCH 37/58] Support Samsung Q Light HAL
|
||||
|
||||
Change-Id: Ic5745eb115a14de348391e69ed6bf3c2a24b157e
|
||||
---
|
||||
services/core/jni/Android.bp | 1 +
|
||||
services/core/jni/Android.bp.orig | 165 ++++++++++++++
|
||||
...om_android_server_lights_LightsService.cpp | 26 +++
|
||||
...droid_server_lights_LightsService.cpp.orig | 207 ++++++++++++++++++
|
||||
4 files changed, 399 insertions(+)
|
||||
create mode 100644 services/core/jni/Android.bp.orig
|
||||
create mode 100644 services/core/jni/com_android_server_lights_LightsService.cpp.orig
|
||||
|
||||
diff --git a/services/core/jni/Android.bp b/services/core/jni/Android.bp
|
||||
index d8645012e24..3ffa7561028 100644
|
||||
--- a/services/core/jni/Android.bp
|
||||
+++ b/services/core/jni/Android.bp
|
||||
@@ -136,6 +136,7 @@ cc_defaults {
|
||||
"suspend_control_aidl_interface-cpp",
|
||||
"vendor.lineage.power@1.0",
|
||||
"vendor.samsung.hardware.light@2.0",
|
||||
+ "vendor.samsung.hardware.light@3.0",
|
||||
],
|
||||
|
||||
static_libs: [
|
||||
diff --git a/services/core/jni/Android.bp.orig b/services/core/jni/Android.bp.orig
|
||||
new file mode 100644
|
||||
index 00000000000..d8645012e24
|
||||
--- /dev/null
|
||||
+++ b/services/core/jni/Android.bp.orig
|
||||
@@ -0,0 +1,165 @@
|
||||
+cc_library_static {
|
||||
+ name: "libservices.core",
|
||||
+ defaults: ["libservices.core-libs"],
|
||||
+
|
||||
+ cflags: [
|
||||
+ "-Wall",
|
||||
+ "-Werror",
|
||||
+ "-Wno-unused-parameter",
|
||||
+ "-Wthread-safety",
|
||||
+
|
||||
+ "-DEGL_EGLEXT_PROTOTYPES",
|
||||
+ "-DGL_GLEXT_PROTOTYPES",
|
||||
+ ],
|
||||
+
|
||||
+ srcs: [
|
||||
+ "BroadcastRadio/JavaRef.cpp",
|
||||
+ "BroadcastRadio/NativeCallbackThread.cpp",
|
||||
+ "BroadcastRadio/BroadcastRadioService.cpp",
|
||||
+ "BroadcastRadio/Tuner.cpp",
|
||||
+ "BroadcastRadio/TunerCallback.cpp",
|
||||
+ "BroadcastRadio/convert.cpp",
|
||||
+ "BroadcastRadio/regions.cpp",
|
||||
+ "com_android_server_AlarmManagerService.cpp",
|
||||
+ "com_android_server_am_BatteryStatsService.cpp",
|
||||
+ "com_android_server_connectivity_Vpn.cpp",
|
||||
+ "com_android_server_connectivity_tethering_OffloadHardwareInterface.cpp",
|
||||
+ "com_android_server_ConsumerIrService.cpp",
|
||||
+ "com_android_server_devicepolicy_CryptoTestHelper.cpp",
|
||||
+ "com_android_server_HardwarePropertiesManagerService.cpp",
|
||||
+ "com_android_server_hdmi_HdmiCecController.cpp",
|
||||
+ "com_android_server_input_InputManagerService.cpp",
|
||||
+ "com_android_server_lights_LightsService.cpp",
|
||||
+ "com_android_server_location_GnssLocationProvider.cpp",
|
||||
+ "com_android_server_locksettings_SyntheticPasswordManager.cpp",
|
||||
+ "com_android_server_net_NetworkStatsService.cpp",
|
||||
+ "com_android_server_power_PowerManagerService.cpp",
|
||||
+ "com_android_server_security_VerityUtils.cpp",
|
||||
+ "com_android_server_SerialService.cpp",
|
||||
+ "com_android_server_storage_AppFuseBridge.cpp",
|
||||
+ "com_android_server_SystemServer.cpp",
|
||||
+ "com_android_server_TestNetworkService.cpp",
|
||||
+ "com_android_server_tv_TvUinputBridge.cpp",
|
||||
+ "com_android_server_tv_TvInputHal.cpp",
|
||||
+ "com_android_server_vr_VrManagerService.cpp",
|
||||
+ "com_android_server_UsbAlsaJackDetector.cpp",
|
||||
+ "com_android_server_UsbDeviceManager.cpp",
|
||||
+ "com_android_server_UsbDescriptorParser.cpp",
|
||||
+ "com_android_server_UsbMidiDevice.cpp",
|
||||
+ "com_android_server_UsbHostManager.cpp",
|
||||
+ "com_android_server_VibratorService.cpp",
|
||||
+ "com_android_server_PersistentDataBlockService.cpp",
|
||||
+ "com_android_server_GraphicsStatsService.cpp",
|
||||
+ "com_android_server_am_AppCompactor.cpp",
|
||||
+ "com_android_server_am_LowMemDetector.cpp",
|
||||
+ "onload.cpp",
|
||||
+ ":lib_networkStatsFactory_native",
|
||||
+ ],
|
||||
+
|
||||
+ include_dirs: [
|
||||
+ "bionic/libc/private",
|
||||
+ "frameworks/base/libs",
|
||||
+ "frameworks/native/services",
|
||||
+ "system/gatekeeper/include",
|
||||
+ ],
|
||||
+}
|
||||
+
|
||||
+cc_defaults {
|
||||
+ name: "libservices.core-libs",
|
||||
+ shared_libs: [
|
||||
+ "libandroid_runtime",
|
||||
+ "libandroidfw",
|
||||
+ "libaudioclient",
|
||||
+ "libbase",
|
||||
+ "libappfuse",
|
||||
+ "libbinder",
|
||||
+ "libcutils",
|
||||
+ "libcrypto",
|
||||
+ "liblog",
|
||||
+ "libhardware",
|
||||
+ "libhardware_legacy",
|
||||
+ "libhidlbase",
|
||||
+ "libkeystore_binder",
|
||||
+ "libmtp",
|
||||
+ "libnativehelper",
|
||||
+ "libutils",
|
||||
+ "libui",
|
||||
+ "libinput",
|
||||
+ "libinputflinger",
|
||||
+ "libinputflinger_base",
|
||||
+ "libinputservice",
|
||||
+ "libschedulerservicehidl",
|
||||
+ "libsensorservice",
|
||||
+ "libsensorservicehidl",
|
||||
+ "libgui",
|
||||
+ "libusbhost",
|
||||
+ "libtinyalsa",
|
||||
+ "libEGL",
|
||||
+ "libGLESv2",
|
||||
+ "libnetutils",
|
||||
+ "libhidlbase",
|
||||
+ "libhidltransport",
|
||||
+ "libhwbinder",
|
||||
+ "libutils",
|
||||
+ "libhwui",
|
||||
+ "libbpf_android",
|
||||
+ "libnetdbpf",
|
||||
+ "libnetdutils",
|
||||
+ "libpsi",
|
||||
+ "android.hardware.audio.common@2.0",
|
||||
+ "android.hardware.broadcastradio@1.0",
|
||||
+ "android.hardware.broadcastradio@1.1",
|
||||
+ "android.hardware.contexthub@1.0",
|
||||
+ "android.hardware.gnss@1.0",
|
||||
+ "android.hardware.gnss@1.1",
|
||||
+ "android.hardware.gnss@2.0",
|
||||
+ "android.hardware.gnss.measurement_corrections@1.0",
|
||||
+ "android.hardware.gnss.visibility_control@1.0",
|
||||
+ "android.hardware.input.classifier@1.0",
|
||||
+ "android.hardware.ir@1.0",
|
||||
+ "android.hardware.light@2.0",
|
||||
+ "android.hardware.power@1.0",
|
||||
+ "android.hardware.power@1.1",
|
||||
+ "android.hardware.power.stats@1.0",
|
||||
+ "android.hardware.tetheroffload.config@1.0",
|
||||
+ "android.hardware.thermal@1.0",
|
||||
+ "android.hardware.tv.cec@1.0",
|
||||
+ "android.hardware.tv.input@1.0",
|
||||
+ "android.hardware.vibrator@1.0",
|
||||
+ "android.hardware.vibrator@1.1",
|
||||
+ "android.hardware.vibrator@1.2",
|
||||
+ "android.hardware.vibrator@1.3",
|
||||
+ "android.hardware.vr@1.0",
|
||||
+ "android.frameworks.schedulerservice@1.0",
|
||||
+ "android.frameworks.sensorservice@1.0",
|
||||
+ "android.system.suspend@1.0",
|
||||
+ "suspend_control_aidl_interface-cpp",
|
||||
+ "vendor.lineage.power@1.0",
|
||||
+ "vendor.samsung.hardware.light@2.0",
|
||||
+ ],
|
||||
+
|
||||
+ static_libs: [
|
||||
+ "android.hardware.broadcastradio@common-utils-1x-lib",
|
||||
+ ],
|
||||
+
|
||||
+ product_variables: {
|
||||
+ arc: {
|
||||
+ shared_libs: [
|
||||
+ "libarcbridge",
|
||||
+ "libarcbridgeservice",
|
||||
+ "libarctimer",
|
||||
+ "libbase",
|
||||
+ "libcap",
|
||||
+ "libchrome",
|
||||
+ "libmojo",
|
||||
+ ],
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+filegroup {
|
||||
+ name: "lib_networkStatsFactory_native",
|
||||
+ srcs: [
|
||||
+ "com_android_server_net_NetworkStatsFactory.cpp",
|
||||
+ ],
|
||||
+}
|
||||
diff --git a/services/core/jni/com_android_server_lights_LightsService.cpp b/services/core/jni/com_android_server_lights_LightsService.cpp
|
||||
index a21c6e2c8ef..dedc7734131 100644
|
||||
--- a/services/core/jni/com_android_server_lights_LightsService.cpp
|
||||
+++ b/services/core/jni/com_android_server_lights_LightsService.cpp
|
||||
@@ -25,6 +25,8 @@
|
||||
#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 <vendor/samsung/hardware/light/3.0/ISehLight.h>
|
||||
+#include <vendor/samsung/hardware/light/3.0/types.h>
|
||||
#include <android-base/chrono_utils.h>
|
||||
#include <utils/misc.h>
|
||||
#include <utils/Log.h>
|
||||
@@ -44,9 +46,13 @@ using Return = ::android::hardware::Return<T>;
|
||||
|
||||
using ISecLight = ::vendor::samsung::hardware::light::V2_0::ISecLight;
|
||||
using SecType = ::vendor::samsung::hardware::light::V2_0::SecType;
|
||||
+using ISehLight = ::vendor::samsung::hardware::light::V3_0::ISehLight;
|
||||
+using SehType = ::vendor::samsung::hardware::light::V3_0::SehType;
|
||||
+using SehLightState = ::vendor::samsung::hardware::light::V3_0::SehLightState;
|
||||
static bool sLightSupported = true;
|
||||
|
||||
static sp<ISecLight> sSecHal;
|
||||
+static sp<ISehLight> sSehHal;
|
||||
static bool sSecTried = false;
|
||||
|
||||
static bool validate(jint light, jint flash, jint brightness) {
|
||||
@@ -161,6 +167,7 @@ static void setLight_native(
|
||||
|
||||
if(!sSecTried) {
|
||||
sSecHal = ISecLight::getService();
|
||||
+ sSehHal = ISehLight::getService();
|
||||
//sSecTried = true;
|
||||
}
|
||||
|
||||
@@ -178,6 +185,25 @@ static void setLight_native(
|
||||
return;
|
||||
}
|
||||
|
||||
+ if(sSehHal != nullptr && light == 0 && flashMode == static_cast<jint>(Flash::HARDWARE)) {
|
||||
+ SehType type = static_cast<SehType>(light);
|
||||
+ SehLightState state {};
|
||||
+ state.flashMode = Flash::NONE;
|
||||
+ Brightness brightness = static_cast<Brightness>(brightnessMode);
|
||||
+ state.brightnessMode = brightness;
|
||||
+ state.extendedBrightness = colorARGB;
|
||||
+
|
||||
+ {
|
||||
+ android::base::Timer t;
|
||||
+ Return<Status> ret = sSehHal->sehSetLight(type, state);
|
||||
+ if(!ret.isOk()) {
|
||||
+ ALOGE("Failed to issue set light command.");
|
||||
+ }
|
||||
+ if (t.duration() > 50ms) ALOGD("Excessive delay setting light");
|
||||
+ }
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
Type type = static_cast<Type>(light);
|
||||
LightState state = constructState(
|
||||
colorARGB, flashMode, onMS, offMS, brightnessMode);
|
||||
diff --git a/services/core/jni/com_android_server_lights_LightsService.cpp.orig b/services/core/jni/com_android_server_lights_LightsService.cpp.orig
|
||||
new file mode 100644
|
||||
index 00000000000..a21c6e2c8ef
|
||||
--- /dev/null
|
||||
+++ b/services/core/jni/com_android_server_lights_LightsService.cpp.orig
|
||||
@@ -0,0 +1,207 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2009 The Android Open Source Project
|
||||
+ * Copyright (C) 2015 The CyanogenMod 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.
|
||||
+ */
|
||||
+
|
||||
+#define LOG_TAG "LightsService"
|
||||
+
|
||||
+#include "jni.h"
|
||||
+#include <nativehelper/JNIHelp.h>
|
||||
+#include "android_runtime/AndroidRuntime.h"
|
||||
+
|
||||
+#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>
|
||||
+#include <map>
|
||||
+#include <stdio.h>
|
||||
+
|
||||
+namespace android {
|
||||
+
|
||||
+using Brightness = ::android::hardware::light::V2_0::Brightness;
|
||||
+using Flash = ::android::hardware::light::V2_0::Flash;
|
||||
+using ILight = ::android::hardware::light::V2_0::ILight;
|
||||
+using LightState = ::android::hardware::light::V2_0::LightState;
|
||||
+using Status = ::android::hardware::light::V2_0::Status;
|
||||
+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 sp<ISecLight> sSecHal;
|
||||
+static bool sSecTried = false;
|
||||
+
|
||||
+static bool validate(jint light, jint flash, jint brightness) {
|
||||
+ bool valid = true;
|
||||
+
|
||||
+ if (light < 0 || light >= static_cast<jint>(Type::COUNT)) {
|
||||
+ ALOGE("Invalid light parameter %d.", light);
|
||||
+ valid = false;
|
||||
+ }
|
||||
+
|
||||
+ if (flash != static_cast<jint>(Flash::NONE) &&
|
||||
+ flash != static_cast<jint>(Flash::TIMED) &&
|
||||
+ flash != static_cast<jint>(Flash::HARDWARE)) {
|
||||
+ ALOGE("Invalid flash parameter %d.", flash);
|
||||
+ valid = false;
|
||||
+ }
|
||||
+
|
||||
+ if (brightness != static_cast<jint>(Brightness::USER) &&
|
||||
+ brightness != static_cast<jint>(Brightness::SENSOR) &&
|
||||
+ brightness != static_cast<jint>(Brightness::LOW_PERSISTENCE)) {
|
||||
+ ALOGE("Invalid brightness parameter %d.", brightness);
|
||||
+ valid = false;
|
||||
+ }
|
||||
+
|
||||
+ if (brightness == static_cast<jint>(Brightness::LOW_PERSISTENCE) &&
|
||||
+ light != static_cast<jint>(Type::BACKLIGHT)) {
|
||||
+ ALOGE("Cannot set low-persistence mode for non-backlight device.");
|
||||
+ valid = false;
|
||||
+ }
|
||||
+
|
||||
+ return valid;
|
||||
+}
|
||||
+
|
||||
+static LightState constructState(
|
||||
+ jint colorARGB,
|
||||
+ jint flashMode,
|
||||
+ jint onMS,
|
||||
+ jint offMS,
|
||||
+ jint brightnessMode){
|
||||
+ Flash flash = static_cast<Flash>(flashMode);
|
||||
+ Brightness brightness = static_cast<Brightness>(brightnessMode);
|
||||
+
|
||||
+ LightState state{};
|
||||
+
|
||||
+ if (brightness == Brightness::LOW_PERSISTENCE) {
|
||||
+ state.flashMode = Flash::NONE;
|
||||
+ } else {
|
||||
+ // Only set non-brightness settings when not in low-persistence mode
|
||||
+ state.flashMode = flash;
|
||||
+ state.flashOnMs = onMS;
|
||||
+ state.flashOffMs = offMS;
|
||||
+ }
|
||||
+
|
||||
+ state.color = colorARGB;
|
||||
+ state.brightnessMode = brightness;
|
||||
+
|
||||
+ return state;
|
||||
+}
|
||||
+
|
||||
+static void processReturn(
|
||||
+ const Return<Status> &ret,
|
||||
+ Type type,
|
||||
+ const LightState &state) {
|
||||
+ if (!ret.isOk()) {
|
||||
+ ALOGE("Failed to issue set light command.");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ switch (static_cast<Status>(ret)) {
|
||||
+ case Status::SUCCESS:
|
||||
+ break;
|
||||
+ case Status::LIGHT_NOT_SUPPORTED:
|
||||
+ ALOGE("Light requested not available on this device. %d", type);
|
||||
+ break;
|
||||
+ case Status::BRIGHTNESS_NOT_SUPPORTED:
|
||||
+ ALOGE("Brightness parameter not supported on this device: %d",
|
||||
+ state.brightnessMode);
|
||||
+ break;
|
||||
+ case Status::UNKNOWN:
|
||||
+ default:
|
||||
+ ALOGE("Unknown error setting light.");
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void setLight_native(
|
||||
+ JNIEnv* /* env */,
|
||||
+ jobject /* clazz */,
|
||||
+ jint light,
|
||||
+ jint colorARGB,
|
||||
+ jint flashMode,
|
||||
+ jint onMS,
|
||||
+ jint offMS,
|
||||
+ jint brightnessMode,
|
||||
+ jint brightnessLevel) {
|
||||
+
|
||||
+ if (!sLightSupported) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ if (!validate(light, flashMode, brightnessMode)) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ if (brightnessLevel > 0 && brightnessLevel <= 0xFF) {
|
||||
+ int colorAlpha = (colorARGB & 0xFF000000) >> 24;
|
||||
+ if (colorAlpha == 0x00) {
|
||||
+ colorAlpha = 0xFF;
|
||||
+ }
|
||||
+ colorAlpha = (colorAlpha * brightnessLevel) / 0xFF;
|
||||
+ colorARGB = (colorAlpha << 24) + (colorARGB & 0x00FFFFFF);
|
||||
+ }
|
||||
+
|
||||
+ 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 = 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);
|
||||
+ LightState state = constructState(
|
||||
+ colorARGB, flashMode, onMS, offMS, brightnessMode);
|
||||
+
|
||||
+ {
|
||||
+ android::base::Timer t;
|
||||
+ sp<ILight> hal = ILight::getService();
|
||||
+ if (hal == nullptr) {
|
||||
+ sLightSupported = false;
|
||||
+ return;
|
||||
+ }
|
||||
+ Return<Status> ret = hal->setLight(type, state);
|
||||
+ processReturn(ret, type, state);
|
||||
+ if (t.duration() > 50ms) ALOGD("Excessive delay setting light");
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static const JNINativeMethod method_table[] = {
|
||||
+ { "setLight_native", "(IIIIIII)V", (void*)setLight_native },
|
||||
+};
|
||||
+
|
||||
+int register_android_server_LightsService(JNIEnv *env) {
|
||||
+ return jniRegisterNativeMethods(env, "com/android/server/lights/LightsService",
|
||||
+ method_table, NELEM(method_table));
|
||||
+}
|
||||
+
|
||||
+};
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,46 +0,0 @@
|
||||
From 47c5660af8f54286d6c525e211077c05f9689ca8 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Sun, 15 Dec 2019 16:58:38 +0100
|
||||
Subject: [PATCH 38/58] Add a nodim property for FacolaView
|
||||
|
||||
Set persist.sys.phh.nodim to true to remove diming/full brightness
|
||||
---
|
||||
.../android/server/biometrics/fingerprint/FacolaView.java | 8 ++++++--
|
||||
1 file changed, 6 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
index 4ff373a108d..08436019bc9 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,7 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
|
||||
private final WindowManager mWM;
|
||||
private final boolean samsungFod = samsungHasCmd("fod_enable");
|
||||
+ private final boolean noDim;
|
||||
|
||||
private boolean mHidden = true;
|
||||
FacolaView(Context context) {
|
||||
@@ -68,6 +69,7 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
mHandlerThread.start();
|
||||
mHandler = new Handler(mHandlerThread.getLooper());
|
||||
|
||||
+ noDim = android.os.SystemProperties.getBoolean("persist.sys.phh.nodim", false);
|
||||
String[] location = android.os.SystemProperties.get("persist.vendor.sys.fp.fod.location.X_Y", "").split(",");
|
||||
String[] size = android.os.SystemProperties.get("persist.vendor.sys.fp.fod.size.width_height", "").split(",");
|
||||
Slog.d("PHH-Enroll", "FacolaView hello");
|
||||
@@ -149,8 +151,10 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
return false;
|
||||
}
|
||||
|
||||
- mParams.dimAmount = TOUCHED_DIM;
|
||||
- mParams.screenBrightness = 1.0f;
|
||||
+ if(!noDim) {
|
||||
+ mParams.dimAmount = TOUCHED_DIM;
|
||||
+ mParams.screenBrightness = 1.0f;
|
||||
+ }
|
||||
mWM.updateViewLayout(this, mParams);
|
||||
|
||||
return true;
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,90 +0,0 @@
|
||||
From fffb6c1f4bf48d2bdc1a1b3c24b97d32bdaa4cca Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Sun, 15 Dec 2019 22:14:12 +0100
|
||||
Subject: [PATCH 39/58] Add Samsung's Q power HAL to fix suspend
|
||||
|
||||
Change-Id: I1edd4de9932ab089b7051f1329f60c15b9d99aaa
|
||||
---
|
||||
services/core/jni/Android.bp | 1 +
|
||||
...ndroid_server_power_PowerManagerService.cpp | 18 ++++++++++++++++++
|
||||
2 files changed, 19 insertions(+)
|
||||
|
||||
diff --git a/services/core/jni/Android.bp b/services/core/jni/Android.bp
|
||||
index 3ffa7561028..8f44be480c9 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.miscpower@2.0",
|
||||
"vendor.samsung.hardware.light@2.0",
|
||||
"vendor.samsung.hardware.light@3.0",
|
||||
],
|
||||
diff --git a/services/core/jni/com_android_server_power_PowerManagerService.cpp b/services/core/jni/com_android_server_power_PowerManagerService.cpp
|
||||
index 211ea50ddc9..bf0599fe18a 100644
|
||||
--- a/services/core/jni/com_android_server_power_PowerManagerService.cpp
|
||||
+++ b/services/core/jni/com_android_server_power_PowerManagerService.cpp
|
||||
@@ -21,6 +21,7 @@
|
||||
#include <android/hardware/power/1.1/IPower.h>
|
||||
#include <android/system/suspend/1.0/ISystemSuspend.h>
|
||||
#include <android/system/suspend/ISuspendControlService.h>
|
||||
+#include <vendor/samsung/hardware/miscpower/2.0/ISehMiscPower.h>
|
||||
#include <nativehelper/JNIHelp.h>
|
||||
#include <vendor/lineage/power/1.0/ILineagePower.h>
|
||||
#include "jni.h"
|
||||
@@ -58,6 +59,7 @@ using IPowerV1_1 = android::hardware::power::V1_1::IPower;
|
||||
using IPowerV1_0 = android::hardware::power::V1_0::IPower;
|
||||
using ILineagePowerV1_0 = vendor::lineage::power::V1_0::ILineagePower;
|
||||
using vendor::lineage::power::V1_0::LineageFeature;
|
||||
+using ISehMiscPower = vendor::samsung::hardware::miscpower::V2_0::ISehMiscPower;
|
||||
|
||||
namespace android {
|
||||
|
||||
@@ -74,6 +76,7 @@ static jobject gPowerManagerServiceObj;
|
||||
static sp<IPowerV1_0> gPowerHalV1_0_ = nullptr;
|
||||
static sp<IPowerV1_1> gPowerHalV1_1_ = nullptr;
|
||||
static sp<ILineagePowerV1_0> gLineagePowerHalV1_0_ = nullptr;
|
||||
+static sp<ISehMiscPower> gSehMiscPower = nullptr;
|
||||
static bool gPowerHalExists = true;
|
||||
static bool gLineagePowerHalExists = true;
|
||||
static std::mutex gPowerHalMutex;
|
||||
@@ -98,6 +101,7 @@ static bool checkAndClearExceptionFromCallback(JNIEnv* env, const char* methodNa
|
||||
// The caller must be holding gPowerHalMutex.
|
||||
static void connectPowerHalLocked() {
|
||||
if (gPowerHalExists && gPowerHalV1_0_ == nullptr) {
|
||||
+ gSehMiscPower = ISehMiscPower::getService();
|
||||
gPowerHalV1_0_ = IPowerV1_0::getService("miscpower");
|
||||
if(gPowerHalV1_0_ == nullptr)
|
||||
gPowerHalV1_0_ = IPowerV1_0::getService();
|
||||
@@ -130,6 +134,12 @@ void connectLineagePowerHalLocked() {
|
||||
}
|
||||
}
|
||||
|
||||
+sp<ISehMiscPower> getSehMiscPower() {
|
||||
+ std::lock_guard<std::mutex> lock(gPowerHalMutex);
|
||||
+ connectPowerHalLocked();
|
||||
+ return gSehMiscPower;
|
||||
+}
|
||||
+
|
||||
// Retrieve a copy of PowerHAL V1_0
|
||||
sp<IPowerV1_0> getPowerHalV1_0() {
|
||||
std::lock_guard<std::mutex> lock(gPowerHalMutex);
|
||||
@@ -314,6 +324,14 @@ static void nativeSetInteractive(JNIEnv* /* env */, jclass /* clazz */, jboolean
|
||||
enable ? "true" : "false", enable ? "on" : "off");
|
||||
}
|
||||
}
|
||||
+ sp<ISehMiscPower> sehMiscPower = getSehMiscPower();
|
||||
+ if(sehMiscPower != nullptr) {
|
||||
+ android::base::Timer t;
|
||||
+ Return<void> ret = sehMiscPower->setInteractiveAsync(enable, 0);
|
||||
+ if(!ret.isOk()) {
|
||||
+ ALOGE("set interactive async() failed: seh misc setInteractiveAsync");
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
|
||||
static void nativeSetAutoSuspend(JNIEnv* /* env */, jclass /* clazz */, jboolean enable) {
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,117 +0,0 @@
|
||||
From 2edb7c4d383365654a4e650041e0d85fd8fa2f9c Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Sun, 15 Dec 2019 23:19:32 +0100
|
||||
Subject: [PATCH 40/58] FacolaView: Support goodix ext and fix wrong forced
|
||||
brightness
|
||||
|
||||
---
|
||||
services/core/Android.bp | 1 +
|
||||
.../biometrics/fingerprint/FacolaView.java | 30 ++++++++++++++-----
|
||||
2 files changed, 23 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/services/core/Android.bp b/services/core/Android.bp
|
||||
index 2e7118da1c0..ccf1ca99b54 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.goodix.extend.service-V2.0-java",
|
||||
"vendor.xiaomi.hardware.fingerprintextension-V1.0-java",
|
||||
],
|
||||
}
|
||||
diff --git a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
index 08436019bc9..651cc97be39 100644
|
||||
--- a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
+++ b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
@@ -36,6 +36,7 @@ import java.io.FileReader;
|
||||
import java.io.PrintWriter;
|
||||
|
||||
import vendor.xiaomi.hardware.fingerprintextension.V1_0.IXiaomiFingerprint;
|
||||
+import vendor.goodix.extend.service.V2_0.IGoodixFPExtendService;
|
||||
|
||||
import android.os.Handler;
|
||||
import android.os.HandlerThread;
|
||||
@@ -46,6 +47,7 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
private final Paint mPaintFingerprint = new Paint();
|
||||
private final Paint mPaintShow = new Paint();
|
||||
private IXiaomiFingerprint mXiaomiFingerprint = null;
|
||||
+ private IGoodixFPExtendService mGoodixFingerprint = null;
|
||||
private boolean mInsideCircle = false;
|
||||
private final WindowManager.LayoutParams mParams = new WindowManager.LayoutParams();
|
||||
|
||||
@@ -94,11 +96,17 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
setOnTouchListener(this);
|
||||
mWM = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);
|
||||
Slog.d("PHH-Enroll", "Created facola...");
|
||||
- try {
|
||||
- if(mW != -1)
|
||||
+ if(mW != -1) {
|
||||
+ try {
|
||||
mXiaomiFingerprint = IXiaomiFingerprint.getService();
|
||||
- } catch(Exception e) {
|
||||
- Slog.d("PHH-Enroll", "Failed getting xiaomi fingerprint service", e);
|
||||
+ } catch(Exception e) {
|
||||
+ Slog.d("PHH-Enroll", "Failed getting xiaomi fingerprint service", e);
|
||||
+ }
|
||||
+ try {
|
||||
+ mGoodixFingerprint = IGoodixFPExtendService.getService();
|
||||
+ } catch(Exception e) {
|
||||
+ Slog.d("PHH-Enroll", "Failed getting goodix fingerprint service", e);
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -113,6 +121,8 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
int nitValue = 2;
|
||||
if(mXiaomiFingerprint != null)
|
||||
mXiaomiFingerprint.extCmd(0xa, nitValue);
|
||||
+ if(mGoodixFingerprint != null)
|
||||
+ mXiaomiFingerprint.extCmd(10, 1);
|
||||
} catch(Exception e) {
|
||||
Slog.d("PHH-Enroll", "Failed calling xiaomi fp extcmd");
|
||||
}
|
||||
@@ -122,6 +132,8 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
try {
|
||||
if(mXiaomiFingerprint != null)
|
||||
mXiaomiFingerprint.extCmd(0xa, 0);
|
||||
+ if(mGoodixFingerprint != null)
|
||||
+ mXiaomiFingerprint.extCmd(10, 0);
|
||||
} catch(Exception e) {
|
||||
Slog.d("PHH-Enroll", "Failed calling xiaomi fp extcmd");
|
||||
}
|
||||
@@ -151,10 +163,10 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
return false;
|
||||
}
|
||||
|
||||
- if(!noDim) {
|
||||
- mParams.dimAmount = TOUCHED_DIM;
|
||||
- mParams.screenBrightness = 1.0f;
|
||||
- }
|
||||
+ if(!noDim) {
|
||||
+ mParams.dimAmount = TOUCHED_DIM;
|
||||
+ mParams.screenBrightness = 1.0f;
|
||||
+ }
|
||||
mWM.updateViewLayout(this, mParams);
|
||||
|
||||
return true;
|
||||
@@ -164,6 +176,7 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
Slog.d("PHH-Enroll", "Show", new Exception());
|
||||
if(!mHidden) return;
|
||||
mHidden = false;
|
||||
+ mInsideCircle = false;
|
||||
if(samsungFod) {
|
||||
samsungCmd("fod_enable,1,1");
|
||||
}
|
||||
@@ -191,6 +204,7 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
WindowManager.LayoutParams.FLAG_DIM_BEHIND |
|
||||
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
|
||||
mParams.dimAmount = UNTOUCHED_DIM;
|
||||
+ mParams.screenBrightness = .0f;
|
||||
|
||||
mParams.packageName = "android";
|
||||
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,59 +0,0 @@
|
||||
From 6963785c01498fcb54b697bb2530ecd7a8297f56 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Mon, 16 Dec 2019 19:31:12 +0100
|
||||
Subject: [PATCH 41/58] Fix (big) goodix integration mistakes
|
||||
|
||||
---
|
||||
.../biometrics/fingerprint/FacolaView.java | 19 ++++++++++++-------
|
||||
1 file changed, 12 insertions(+), 7 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 651cc97be39..b8ca25a48d2 100644
|
||||
--- a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
+++ b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
@@ -119,10 +119,11 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
if(mInsideCircle) {
|
||||
try {
|
||||
int nitValue = 2;
|
||||
- if(mXiaomiFingerprint != null)
|
||||
+ if(mXiaomiFingerprint != null) {
|
||||
mXiaomiFingerprint.extCmd(0xa, nitValue);
|
||||
- if(mGoodixFingerprint != null)
|
||||
- mXiaomiFingerprint.extCmd(10, 1);
|
||||
+ } else if(mGoodixFingerprint != null) {
|
||||
+ mGoodixFingerprint.goodixExtendCommand(10, 1);
|
||||
+ }
|
||||
} catch(Exception e) {
|
||||
Slog.d("PHH-Enroll", "Failed calling xiaomi fp extcmd");
|
||||
}
|
||||
@@ -130,10 +131,11 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
canvas.drawCircle(mW/2, mH/2, (float) (mW/2.0f), this.mPaintFingerprint);
|
||||
} else {
|
||||
try {
|
||||
- if(mXiaomiFingerprint != null)
|
||||
+ if(mXiaomiFingerprint != null) {
|
||||
mXiaomiFingerprint.extCmd(0xa, 0);
|
||||
- if(mGoodixFingerprint != null)
|
||||
- mXiaomiFingerprint.extCmd(10, 0);
|
||||
+ } else if(mGoodixFingerprint != null) {
|
||||
+ mGoodixFingerprint.goodixExtendCommand(10, 0);
|
||||
+ }
|
||||
} catch(Exception e) {
|
||||
Slog.d("PHH-Enroll", "Failed calling xiaomi fp extcmd");
|
||||
}
|
||||
@@ -226,8 +228,11 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
if(mX == -1 || mY == -1 || mW == -1 || mH == -1) return;
|
||||
|
||||
try {
|
||||
- if(mXiaomiFingerprint != null)
|
||||
+ if(mXiaomiFingerprint != null) {
|
||||
mXiaomiFingerprint.extCmd(0xa, 0);
|
||||
+ } else if(mGoodixFingerprint != null) {
|
||||
+ mXiaomiFingerprint.extCmd(10, 0);
|
||||
+ }
|
||||
} catch(Exception e) {
|
||||
Slog.d("PHH-Enroll", "Failed calling xiaomi fp extcmd");
|
||||
}
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,56 +0,0 @@
|
||||
From 7117854a66e39ec6db3deb5caa02bb7008ed3650 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Cai <peter@typeblog.net>
|
||||
Date: Thu, 2 Jan 2020 10:16:49 +0800
|
||||
Subject: [PATCH 42/58] fix crashing on devices with higher aspect ratio down
|
||||
to sw288dp
|
||||
|
||||
* This is what the Qin 2 (Pro) is.
|
||||
|
||||
Change-Id: I2289a23b706b512a99a541221576960407c098e7
|
||||
---
|
||||
.../SystemUI/res/values-sw288dp/dimens.xml | 33 +++++++++++++++++++
|
||||
1 file changed, 33 insertions(+)
|
||||
create mode 100644 packages/SystemUI/res/values-sw288dp/dimens.xml
|
||||
|
||||
diff --git a/packages/SystemUI/res/values-sw288dp/dimens.xml b/packages/SystemUI/res/values-sw288dp/dimens.xml
|
||||
new file mode 100644
|
||||
index 00000000000..40adc2e6879
|
||||
--- /dev/null
|
||||
+++ b/packages/SystemUI/res/values-sw288dp/dimens.xml
|
||||
@@ -0,0 +1,33 @@
|
||||
+<?xml version="1.0" encoding="utf-8"?>
|
||||
+<!--
|
||||
+ ~ 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
|
||||
+ -->
|
||||
+<resources>
|
||||
+ <!-- Global actions grid -->
|
||||
+ <dimen name="global_actions_grid_vertical_padding">3dp</dimen>
|
||||
+ <dimen name="global_actions_grid_horizontal_padding">3dp</dimen>
|
||||
+
|
||||
+ <dimen name="global_actions_grid_item_side_margin">5dp</dimen>
|
||||
+ <dimen name="global_actions_grid_item_vertical_margin">4dp</dimen>
|
||||
+ <dimen name="global_actions_grid_item_width">64dp</dimen>
|
||||
+ <dimen name="global_actions_grid_item_height">64dp</dimen>
|
||||
+
|
||||
+ <dimen name="global_actions_grid_item_icon_width">20dp</dimen>
|
||||
+ <dimen name="global_actions_grid_item_icon_height">20dp</dimen>
|
||||
+ <dimen name="global_actions_grid_item_icon_top_margin">12dp</dimen>
|
||||
+ <dimen name="global_actions_grid_item_icon_side_margin">22dp</dimen>
|
||||
+ <dimen name="global_actions_grid_item_icon_bottom_margin">4dp</dimen>
|
||||
+
|
||||
+</resources>
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,29 +0,0 @@
|
||||
From 1269ddf783c8d092c5eb51324ea9bb53230789af Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Sat, 22 Feb 2020 23:25:51 +0100
|
||||
Subject: [PATCH 43/58] FacolaView] Allow system-side properties (vendor-side
|
||||
works only with proper selinux)
|
||||
|
||||
---
|
||||
.../com/android/server/biometrics/fingerprint/FacolaView.java | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
index b8ca25a48d2..f77e8282689 100644
|
||||
--- a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
+++ b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
@@ -73,7 +73,11 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
|
||||
noDim = android.os.SystemProperties.getBoolean("persist.sys.phh.nodim", false);
|
||||
String[] location = android.os.SystemProperties.get("persist.vendor.sys.fp.fod.location.X_Y", "").split(",");
|
||||
+ if(location.length == 0)
|
||||
+ location = android.os.SystemProperties.get("persist.sys.fp.fod.location.X_Y", "").split(",");
|
||||
String[] size = android.os.SystemProperties.get("persist.vendor.sys.fp.fod.size.width_height", "").split(",");
|
||||
+ if(size.length == 0)
|
||||
+ size = android.os.SystemProperties.get("persist.sys.fp.fod.size.width_height", "").split(",");
|
||||
Slog.d("PHH-Enroll", "FacolaView hello");
|
||||
if(size.length == 2 && location.length == 2) {
|
||||
Slog.d("PHH-Enroll", "Got real values");
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,49 +0,0 @@
|
||||
From d829818f8aaf25aaa6ae99f8220a73a2717342a5 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Sat, 22 Feb 2020 23:45:54 +0100
|
||||
Subject: [PATCH 44/58] report press events to oppo fingerprint sensor
|
||||
|
||||
---
|
||||
.../biometrics/fingerprint/FacolaView.java | 16 ++++++++++++++++
|
||||
1 file changed, 16 insertions(+)
|
||||
|
||||
diff --git a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
index f77e8282689..0fb4254eb60 100644
|
||||
--- a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
+++ b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
@@ -114,6 +114,20 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
}
|
||||
}
|
||||
|
||||
+ private final File oppoFod = new File("/sys/kernel/oppo_display/notify_fppress");
|
||||
+ private void oppoPress(boolean pressed) {
|
||||
+ if(!oppoFod.exists()) return;
|
||||
+ try {
|
||||
+ String v = "0";
|
||||
+ if(pressed) v = "1";
|
||||
+ PrintWriter writer = new PrintWriter(oppoFod, "UTF-8");
|
||||
+ writer.println(v);
|
||||
+ writer.close();
|
||||
+ } catch(Exception e) {
|
||||
+ Slog.d("PHH", "Failed to notify oppo fp press", e);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
@Override
|
||||
protected void onDraw(Canvas canvas) {
|
||||
super.onDraw(canvas);
|
||||
@@ -131,9 +145,11 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
} catch(Exception e) {
|
||||
Slog.d("PHH-Enroll", "Failed calling xiaomi fp extcmd");
|
||||
}
|
||||
+ oppoPress(true);
|
||||
|
||||
canvas.drawCircle(mW/2, mH/2, (float) (mW/2.0f), this.mPaintFingerprint);
|
||||
} else {
|
||||
+ oppoPress(false);
|
||||
try {
|
||||
if(mXiaomiFingerprint != null) {
|
||||
mXiaomiFingerprint.extCmd(0xa, 0);
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,86 +0,0 @@
|
||||
From 89f7440821343b3a55e75be79e4a58305f0bd660 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Mon, 2 Mar 2020 21:13:36 +0100
|
||||
Subject: [PATCH 45/58] Add support for samsung optical under-display
|
||||
fingerprint
|
||||
|
||||
---
|
||||
services/core/Android.bp | 1 +
|
||||
.../biometrics/fingerprint/FacolaView.java | 17 +++++++++++++++--
|
||||
2 files changed, 16 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/services/core/Android.bp b/services/core/Android.bp
|
||||
index ccf1ca99b54..ba6c5fcf7ee 100644
|
||||
--- a/services/core/Android.bp
|
||||
+++ b/services/core/Android.bp
|
||||
@@ -56,6 +56,7 @@ java_library_static {
|
||||
"netd_aidl_interface-V2-java",
|
||||
"netd_event_listener_interface-java",
|
||||
"vendor.goodix.extend.service-V2.0-java",
|
||||
+ "vendor.samsung.hardware.biometrics.fingerprint-V2.1-java",
|
||||
"vendor.xiaomi.hardware.fingerprintextension-V1.0-java",
|
||||
],
|
||||
}
|
||||
diff --git a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
index 0fb4254eb60..edd13988e49 100644
|
||||
--- a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
+++ b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
@@ -37,6 +37,7 @@ import java.io.PrintWriter;
|
||||
|
||||
import vendor.xiaomi.hardware.fingerprintextension.V1_0.IXiaomiFingerprint;
|
||||
import vendor.goodix.extend.service.V2_0.IGoodixFPExtendService;
|
||||
+import vendor.samsung.hardware.biometrics.fingerprint.V2_1.ISecBiometricsFingerprint;
|
||||
|
||||
import android.os.Handler;
|
||||
import android.os.HandlerThread;
|
||||
@@ -48,6 +49,7 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
private final Paint mPaintShow = new Paint();
|
||||
private IXiaomiFingerprint mXiaomiFingerprint = null;
|
||||
private IGoodixFPExtendService mGoodixFingerprint = null;
|
||||
+ private ISecBiometricsFingerprint mSamsungFingerprint = null;
|
||||
private boolean mInsideCircle = false;
|
||||
private final WindowManager.LayoutParams mParams = new WindowManager.LayoutParams();
|
||||
|
||||
@@ -111,6 +113,11 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
} catch(Exception e) {
|
||||
Slog.d("PHH-Enroll", "Failed getting goodix fingerprint service", e);
|
||||
}
|
||||
+ try {
|
||||
+ mSamsungFingerprint = ISecBiometricsFingerprint.getService();
|
||||
+ } catch(Exception e) {
|
||||
+ Slog.d("PHH-Enroll", "Failed getting samsung fingerprint service", e);
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -141,9 +148,12 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
mXiaomiFingerprint.extCmd(0xa, nitValue);
|
||||
} else if(mGoodixFingerprint != null) {
|
||||
mGoodixFingerprint.goodixExtendCommand(10, 1);
|
||||
+ } else if(mSamsungFingerprint != null) {
|
||||
+ mSamsungFingerprint.request(22 /* SEM_FINGER_STATE */, 0, 2 /* pressed */, new java.util.ArrayList<Byte>(),
|
||||
+ (int retval, java.util.ArrayList<Byte> out) -> {} );
|
||||
}
|
||||
} catch(Exception e) {
|
||||
- Slog.d("PHH-Enroll", "Failed calling xiaomi fp extcmd");
|
||||
+ Slog.d("PHH-Enroll", "Failed calling fp extcmd", e);
|
||||
}
|
||||
oppoPress(true);
|
||||
|
||||
@@ -155,9 +165,12 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
mXiaomiFingerprint.extCmd(0xa, 0);
|
||||
} else if(mGoodixFingerprint != null) {
|
||||
mGoodixFingerprint.goodixExtendCommand(10, 0);
|
||||
+ } else if(mSamsungFingerprint != null) {
|
||||
+ mSamsungFingerprint.request(22 /* SEM_FINGER_STATE */, 0, 1 /* released */, new java.util.ArrayList<Byte>(),
|
||||
+ (int retval, java.util.ArrayList<Byte> out) -> {} );
|
||||
}
|
||||
} catch(Exception e) {
|
||||
- Slog.d("PHH-Enroll", "Failed calling xiaomi fp extcmd");
|
||||
+ Slog.d("PHH-Enroll", "Failed calling fp extcmd", e);
|
||||
}
|
||||
canvas.drawCircle(mW/2, mH/2, (float) (mW/2.0f), this.mPaintShow);
|
||||
}
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,29 +0,0 @@
|
||||
From 5c0dc33ebcbb06c0a1408f651c408afca1b606cc Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Mon, 2 Mar 2020 21:13:47 +0100
|
||||
Subject: [PATCH 46/58] Fix persist.sys.fp.fod override
|
||||
|
||||
---
|
||||
.../com/android/server/biometrics/fingerprint/FacolaView.java | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
index edd13988e49..2c1ba76f529 100644
|
||||
--- a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
+++ b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
@@ -75,10 +75,10 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
|
||||
noDim = android.os.SystemProperties.getBoolean("persist.sys.phh.nodim", false);
|
||||
String[] location = android.os.SystemProperties.get("persist.vendor.sys.fp.fod.location.X_Y", "").split(",");
|
||||
- if(location.length == 0)
|
||||
+ if(location.length != 2)
|
||||
location = android.os.SystemProperties.get("persist.sys.fp.fod.location.X_Y", "").split(",");
|
||||
String[] size = android.os.SystemProperties.get("persist.vendor.sys.fp.fod.size.width_height", "").split(",");
|
||||
- if(size.length == 0)
|
||||
+ if(size.length != 2)
|
||||
size = android.os.SystemProperties.get("persist.sys.fp.fod.size.width_height", "").split(",");
|
||||
Slog.d("PHH-Enroll", "FacolaView hello");
|
||||
if(size.length == 2 && location.length == 2) {
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,40 +0,0 @@
|
||||
From c9cc25cbfb382cbfad7f0694118e1791719c8f87 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Tue, 10 Mar 2020 23:30:17 +0100
|
||||
Subject: [PATCH 47/58] Allow disabling of fingerprint cleanups, needed on some
|
||||
Realme devices that cant enumerate
|
||||
|
||||
---
|
||||
.../android/server/biometrics/BiometricServiceBase.java | 9 ++++++---
|
||||
1 file changed, 6 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/services/core/java/com/android/server/biometrics/BiometricServiceBase.java b/services/core/java/com/android/server/biometrics/BiometricServiceBase.java
|
||||
index 292798721c6..aa94e2e2d40 100644
|
||||
--- a/services/core/java/com/android/server/biometrics/BiometricServiceBase.java
|
||||
+++ b/services/core/java/com/android/server/biometrics/BiometricServiceBase.java
|
||||
@@ -326,6 +326,7 @@ public abstract class BiometricServiceBase extends SystemService
|
||||
private List<? extends BiometricAuthenticator.Identifier> mEnrolledList;
|
||||
// List of templates to remove from the HAL
|
||||
private List<BiometricAuthenticator.Identifier> mUnknownHALTemplates = new ArrayList<>();
|
||||
+ final boolean mNocleanup = android.os.SystemProperties.getBoolean("persist.sys.phh.fingerprint.nocleanup", false);
|
||||
|
||||
InternalEnumerateClient(Context context,
|
||||
DaemonWrapper daemon, long halDeviceId, IBinder token,
|
||||
@@ -370,9 +371,11 @@ public abstract class BiometricServiceBase extends SystemService
|
||||
BiometricAuthenticator.Identifier identifier = mEnrolledList.get(i);
|
||||
Slog.e(getTag(), "doTemplateCleanup(): Removing dangling template from framework: "
|
||||
+ identifier.getBiometricId() + " "
|
||||
- + identifier.getName());
|
||||
- mUtils.removeBiometricForUser(getContext(),
|
||||
- getTargetUserId(), identifier.getBiometricId());
|
||||
+ + identifier.getName() + " /// " + mNocleanup);
|
||||
+ if(!mNocleanup) {
|
||||
+ mUtils.removeBiometricForUser(getContext(),
|
||||
+ getTargetUserId(), identifier.getBiometricId());
|
||||
+ }
|
||||
StatsLog.write(StatsLog.BIOMETRIC_SYSTEM_HEALTH_ISSUE_DETECTED,
|
||||
statsModality(),
|
||||
BiometricsProtoEnums.ISSUE_UNKNOWN_TEMPLATE_ENROLLED_FRAMEWORK);
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,293 +0,0 @@
|
||||
From 8bec1b57d67df8b2d14b41f91ab909246e655ad0 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Tue, 10 Mar 2020 23:32:00 +0100
|
||||
Subject: [PATCH 48/58] Support Realme FOD
|
||||
|
||||
List of changes:
|
||||
- Enable dimlayer_hbm. This dims the framebuffer, while putting screen
|
||||
into HBM. From user's POV, brightness didn't change, but this enables
|
||||
HBM facola.
|
||||
- Have two separate FOD layers
|
||||
This is needed because hwcomposer is expecting two FOD layers to tell
|
||||
fingerprint HAL that UI is ready.
|
||||
Also, using the second magical layer makes this second layer OVER the
|
||||
dim, so it is running at full brightness.
|
||||
- All devices are now moved to two layers.
|
||||
- Sending events to other HALs have been delayed by 200ms, to account
|
||||
for slow brightness change
|
||||
---
|
||||
services/core/Android.bp | 1 +
|
||||
.../biometrics/fingerprint/FacolaView.java | 146 ++++++++++++++++--
|
||||
2 files changed, 132 insertions(+), 15 deletions(-)
|
||||
|
||||
diff --git a/services/core/Android.bp b/services/core/Android.bp
|
||||
index ba6c5fcf7ee..334d0d04067 100644
|
||||
--- a/services/core/Android.bp
|
||||
+++ b/services/core/Android.bp
|
||||
@@ -57,6 +57,7 @@ java_library_static {
|
||||
"netd_event_listener_interface-java",
|
||||
"vendor.goodix.extend.service-V2.0-java",
|
||||
"vendor.samsung.hardware.biometrics.fingerprint-V2.1-java",
|
||||
+ "vendor.oppo.hardware.biometrics.fingerprint-V2.1-java",
|
||||
"vendor.xiaomi.hardware.fingerprintextension-V1.0-java",
|
||||
],
|
||||
}
|
||||
diff --git a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
index 2c1ba76f529..42f21d63430 100644
|
||||
--- a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
+++ b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
@@ -19,6 +19,7 @@ package com.android.server.biometrics.fingerprint;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Paint;
|
||||
+import android.graphics.Point;
|
||||
import android.content.Context;
|
||||
import android.view.View.OnTouchListener;
|
||||
import android.view.View;
|
||||
@@ -39,19 +40,23 @@ import vendor.xiaomi.hardware.fingerprintextension.V1_0.IXiaomiFingerprint;
|
||||
import vendor.goodix.extend.service.V2_0.IGoodixFPExtendService;
|
||||
import vendor.samsung.hardware.biometrics.fingerprint.V2_1.ISecBiometricsFingerprint;
|
||||
|
||||
+import android.hardware.display.DisplayManager;
|
||||
+
|
||||
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 int mX, mY, mW, mH;
|
||||
private final Paint mPaintFingerprint = new Paint();
|
||||
private final Paint mPaintShow = new Paint();
|
||||
private IXiaomiFingerprint mXiaomiFingerprint = null;
|
||||
private IGoodixFPExtendService mGoodixFingerprint = null;
|
||||
private ISecBiometricsFingerprint mSamsungFingerprint = null;
|
||||
+ private vendor.oppo.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprint mOppoFingerprint = null;
|
||||
private boolean mInsideCircle = false;
|
||||
private final WindowManager.LayoutParams mParams = new WindowManager.LayoutParams();
|
||||
+ private final WindowManager.LayoutParams mParamsTouched = new WindowManager.LayoutParams();
|
||||
|
||||
private final static float UNTOUCHED_DIM = .1f;
|
||||
private final static float TOUCHED_DIM = .9f;
|
||||
@@ -60,20 +65,34 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
private final Handler mHandler;
|
||||
|
||||
private final WindowManager mWM;
|
||||
+ private final DisplayManager mDM;
|
||||
private final boolean samsungFod = samsungHasCmd("fod_enable");
|
||||
- private final boolean noDim;
|
||||
+ private boolean noDim;
|
||||
|
||||
+ private boolean mFullGreenDisplayed = false;
|
||||
+ private final View mFullGreen;
|
||||
private boolean mHidden = true;
|
||||
FacolaView(Context context) {
|
||||
super(context);
|
||||
|
||||
+ mFullGreen = new ImageView(context) {
|
||||
+ @Override
|
||||
+ protected void onDraw(Canvas canvas) {
|
||||
+ super.onDraw(canvas);
|
||||
+ canvas.drawCircle(mW/2, mH/2, (float) (mW/2.0f), mPaintFingerprint);
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ mWM = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);
|
||||
+ mDM = (DisplayManager) getContext().getSystemService(Context.DISPLAY_SERVICE);
|
||||
+
|
||||
android.util.Log.d("PHH", "Samsung FOD " + samsungFod);
|
||||
|
||||
mHandlerThread = new HandlerThread("FacolaThread");
|
||||
mHandlerThread.start();
|
||||
mHandler = new Handler(mHandlerThread.getLooper());
|
||||
|
||||
- noDim = android.os.SystemProperties.getBoolean("persist.sys.phh.nodim", false);
|
||||
+ noDim = android.os.SystemProperties.getBoolean("persist.sys.phh.nodim", true);
|
||||
String[] location = android.os.SystemProperties.get("persist.vendor.sys.fp.fod.location.X_Y", "").split(",");
|
||||
if(location.length != 2)
|
||||
location = android.os.SystemProperties.get("persist.sys.fp.fod.location.X_Y", "").split(",");
|
||||
@@ -94,13 +113,29 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
mH = -1;
|
||||
}
|
||||
|
||||
+ int oppoSize = android.os.SystemProperties.getInt("persist.vendor.fingerprint.optical.iconsize", 0);
|
||||
+ if(oppoSize > 0) {
|
||||
+ mW = oppoSize;
|
||||
+ mH = oppoSize;
|
||||
+ }
|
||||
+ int oppoLocation = android.os.SystemProperties.getInt("persist.vendor.fingerprint.optical.iconlocation", 0);
|
||||
+ if(oppoLocation > 0) {
|
||||
+ Slog.d("PHH-Enroll", "Got Oppo icon location " + oppoLocation);
|
||||
+ Point p = new Point();
|
||||
+ mDM.getDisplay(0).getRealSize(p);
|
||||
+ Slog.d("PHH-Enroll", "\tscreen size " + p.x + ", " + p.y);
|
||||
+ mX = p.x/2 - mW/2;
|
||||
+ mY = p.y - mH/2 - oppoLocation;
|
||||
+ Slog.d("PHH-Enroll", "\tfacola at " + mX + ", " + mY);
|
||||
+ noDim = true;
|
||||
+ }
|
||||
+
|
||||
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...");
|
||||
if(mW != -1) {
|
||||
try {
|
||||
@@ -118,6 +153,17 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
} catch(Exception e) {
|
||||
Slog.d("PHH-Enroll", "Failed getting samsung fingerprint service", e);
|
||||
}
|
||||
+ try {
|
||||
+ mOppoFingerprint = vendor.oppo.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprint.getService();
|
||||
+ } catch(Exception e) {
|
||||
+ Slog.d("PHH-Enroll", "Failed getting oppo fingerprint service", e);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if(mX != -1) {
|
||||
+ android.os.SystemProperties.set("persist.sys.phh.has_fod", "true");
|
||||
+ } else {
|
||||
+ android.os.SystemProperties.set("persist.sys.phh.has_fod", "false");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -143,21 +189,53 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
//TODO w!=h?
|
||||
if(mInsideCircle) {
|
||||
try {
|
||||
- int nitValue = 2;
|
||||
- if(mXiaomiFingerprint != null) {
|
||||
- mXiaomiFingerprint.extCmd(0xa, nitValue);
|
||||
- } else if(mGoodixFingerprint != null) {
|
||||
- mGoodixFingerprint.goodixExtendCommand(10, 1);
|
||||
- } else if(mSamsungFingerprint != null) {
|
||||
- mSamsungFingerprint.request(22 /* SEM_FINGER_STATE */, 0, 2 /* pressed */, new java.util.ArrayList<Byte>(),
|
||||
- (int retval, java.util.ArrayList<Byte> out) -> {} );
|
||||
+ mParamsTouched.x = mX;
|
||||
+ mParamsTouched.y = mY;
|
||||
+
|
||||
+ mParamsTouched.height = mW;
|
||||
+ mParamsTouched.width = mH;
|
||||
+ mParamsTouched.format = PixelFormat.TRANSLUCENT;
|
||||
+
|
||||
+ mParamsTouched.type = WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY;
|
||||
+ mParamsTouched.setTitle("Fingerprint on display.touched");
|
||||
+ mParamsTouched.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
|
||||
+ WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
|
||||
+ mParamsTouched.dimAmount = UNTOUCHED_DIM;
|
||||
+ if(!noDim) {
|
||||
+ mParamsTouched.dimAmount = TOUCHED_DIM;
|
||||
+ mParamsTouched.screenBrightness = 1.0f;
|
||||
}
|
||||
+
|
||||
+ mParamsTouched.packageName = "android";
|
||||
+
|
||||
+ mParamsTouched.gravity = Gravity.TOP | Gravity.LEFT;
|
||||
+ if(!mFullGreenDisplayed && !mHidden) {
|
||||
+ mHandler.post( () -> {
|
||||
+ Slog.d("PHH-Enroll", "Adding full green because of finger pressed");
|
||||
+ mFullGreenDisplayed = true;
|
||||
+ mWM.addView(mFullGreen, mParamsTouched);
|
||||
+ });
|
||||
+ }
|
||||
+
|
||||
+ int nitValue = 2;
|
||||
+ mHandler.postDelayed( () -> {
|
||||
+ try {
|
||||
+ if(mXiaomiFingerprint != null) {
|
||||
+ mXiaomiFingerprint.extCmd(0xa, nitValue);
|
||||
+ } else if(mGoodixFingerprint != null) {
|
||||
+ mGoodixFingerprint.goodixExtendCommand(10, 1);
|
||||
+ } else if(mSamsungFingerprint != null) {
|
||||
+ mSamsungFingerprint.request(22 /* SEM_FINGER_STATE */, 0, 2 /* pressed */, new java.util.ArrayList<Byte>(),
|
||||
+ (int retval, java.util.ArrayList<Byte> out) -> {} );
|
||||
+ }
|
||||
+ } catch(Exception e) {
|
||||
+ Slog.d("PHH-Enroll", "Failed calling late fp extcmd", e);
|
||||
+ }
|
||||
+ }, 200);
|
||||
} catch(Exception e) {
|
||||
Slog.d("PHH-Enroll", "Failed calling fp extcmd", e);
|
||||
}
|
||||
oppoPress(true);
|
||||
-
|
||||
- canvas.drawCircle(mW/2, mH/2, (float) (mW/2.0f), this.mPaintFingerprint);
|
||||
} else {
|
||||
oppoPress(false);
|
||||
try {
|
||||
@@ -172,8 +250,15 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
} catch(Exception e) {
|
||||
Slog.d("PHH-Enroll", "Failed calling fp extcmd", e);
|
||||
}
|
||||
- canvas.drawCircle(mW/2, mH/2, (float) (mW/2.0f), this.mPaintShow);
|
||||
+ if(mFullGreenDisplayed) {
|
||||
+ mHandler.post( () -> {
|
||||
+ Slog.d("PHH-Enroll", "Removing full green because of finger released");
|
||||
+ mFullGreenDisplayed = false;
|
||||
+ mWM.removeView(mFullGreen);
|
||||
+ });
|
||||
+ }
|
||||
}
|
||||
+ canvas.drawCircle(mW/2, mH/2, (float) (mW/2.0f), this.mPaintShow);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -211,7 +296,15 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
Slog.d("PHH-Enroll", "Show", new Exception());
|
||||
if(!mHidden) return;
|
||||
mHidden = false;
|
||||
+ if(mOppoFingerprint != null) {
|
||||
+ try {
|
||||
+ mOppoFingerprint.setScreenState(vendor.oppo.hardware.biometrics.fingerprint.V2_1.FingerprintScreenState.FINGERPRINT_SCREEN_ON);
|
||||
+ } catch(Exception e) {
|
||||
+ Slog.d("PHH-Enroll", "Failed setting oppo screen state", e);
|
||||
+ }
|
||||
+ }
|
||||
mInsideCircle = false;
|
||||
+ writeFile("/sys/kernel/oppo_display/dimlayer_hbm", "1");
|
||||
if(samsungFod) {
|
||||
samsungCmd("fod_enable,1,1");
|
||||
}
|
||||
@@ -254,7 +347,20 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
mInsideCircle = false;
|
||||
Slog.d("PHH-Enroll", "Hide", new Exception());
|
||||
if(mHidden) return;
|
||||
+ if(mOppoFingerprint != null) {
|
||||
+ try {
|
||||
+ mOppoFingerprint.setScreenState(vendor.oppo.hardware.biometrics.fingerprint.V2_1.FingerprintScreenState.FINGERPRINT_SCREEN_ON);
|
||||
+ } catch(Exception e) {
|
||||
+ Slog.d("PHH-Enroll", "Failed setting oppo screen state", e);
|
||||
+ }
|
||||
+ }
|
||||
+ writeFile("/sys/kernel/oppo_display/dimlayer_hbm", "0");
|
||||
mHidden = true;
|
||||
+ if(mFullGreenDisplayed) {
|
||||
+ Slog.d("PHH-Enroll", "Removing full green because of hide");
|
||||
+ mFullGreenDisplayed = false;
|
||||
+ mWM.removeView(mFullGreen);
|
||||
+ }
|
||||
if(samsungFod) {
|
||||
samsungCmd("fod_enable,0");
|
||||
}
|
||||
@@ -325,4 +431,14 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
}
|
||||
}
|
||||
|
||||
+ private static void writeFile(String path, String value) {
|
||||
+ try {
|
||||
+ PrintWriter writer = new PrintWriter(path, "UTF-8");
|
||||
+ writer.println(value);
|
||||
+ writer.close();
|
||||
+ } catch(Exception e) {
|
||||
+ android.util.Log.d("PHH", "Failed writing to " + path + ": " + value);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
}
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,88 +0,0 @@
|
||||
From b071b7633f20b176aee53cbf8baed331a2483019 Mon Sep 17 00:00:00 2001
|
||||
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||
Date: Mon, 30 Mar 2020 10:07:00 +0000
|
||||
Subject: [PATCH 49/58] Support Huawei light HAL
|
||||
|
||||
For https://github.com/phhusson/treble_experimentations/issues/1204
|
||||
|
||||
Change-Id: I719a13eb66a46703b7ff0e00113f9b98b3244996
|
||||
---
|
||||
services/core/jni/Android.bp | 1 +
|
||||
...om_android_server_lights_LightsService.cpp | 30 +++++++++++++++++++
|
||||
2 files changed, 31 insertions(+)
|
||||
|
||||
diff --git a/services/core/jni/Android.bp b/services/core/jni/Android.bp
|
||||
index 8f44be480c9..2bc6a15129f 100644
|
||||
--- a/services/core/jni/Android.bp
|
||||
+++ b/services/core/jni/Android.bp
|
||||
@@ -138,6 +138,7 @@ cc_defaults {
|
||||
"vendor.samsung.hardware.miscpower@2.0",
|
||||
"vendor.samsung.hardware.light@2.0",
|
||||
"vendor.samsung.hardware.light@3.0",
|
||||
+ "vendor.huawei.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 dedc7734131..7c2a0b6203d 100644
|
||||
--- a/services/core/jni/com_android_server_lights_LightsService.cpp
|
||||
+++ b/services/core/jni/com_android_server_lights_LightsService.cpp
|
||||
@@ -27,6 +27,7 @@
|
||||
#include <vendor/samsung/hardware/light/2.0/types.h>
|
||||
#include <vendor/samsung/hardware/light/3.0/ISehLight.h>
|
||||
#include <vendor/samsung/hardware/light/3.0/types.h>
|
||||
+#include <vendor/huawei/hardware/light/2.0/ILight.h>
|
||||
#include <android-base/chrono_utils.h>
|
||||
#include <utils/misc.h>
|
||||
#include <utils/Log.h>
|
||||
@@ -49,11 +50,15 @@ using SecType = ::vendor::samsung::hardware::light::V2_0::SecType;
|
||||
using ISehLight = ::vendor::samsung::hardware::light::V3_0::ISehLight;
|
||||
using SehType = ::vendor::samsung::hardware::light::V3_0::SehType;
|
||||
using SehLightState = ::vendor::samsung::hardware::light::V3_0::SehLightState;
|
||||
+using ILightHw = ::vendor::huawei::hardware::light::V2_0::ILight;
|
||||
+using LightStateHw = ::android::hardware::light::V2_0::LightState;
|
||||
static bool sLightSupported = true;
|
||||
|
||||
static sp<ISecLight> sSecHal;
|
||||
static sp<ISehLight> sSehHal;
|
||||
static bool sSecTried = false;
|
||||
+static sp<ILightHw> sHwHal;
|
||||
+static bool sHwTried = false;
|
||||
|
||||
static bool validate(jint light, jint flash, jint brightness) {
|
||||
bool valid = true;
|
||||
@@ -204,6 +209,31 @@ static void setLight_native(
|
||||
return;
|
||||
}
|
||||
|
||||
+ if (!sHwTried) {
|
||||
+ sHwHal = ILightHw::getService();
|
||||
+ //sHwTried = true;
|
||||
+ }
|
||||
+
|
||||
+ if (sHwHal != nullptr && light == 0) {
|
||||
+ ALOGE("sHwHal triggered!");
|
||||
+ int brightness = colorARGB & 0xff;
|
||||
+ int hwBrightness = brightness << 4;
|
||||
+ LightState state = constructState(hwBrightness, flashMode, onMS, offMS, brightnessMode);
|
||||
+ bool got260 = false;
|
||||
+ sHwHal->HWgetSupportedTypes([&](auto types) {
|
||||
+ for (const auto& type: types) {
|
||||
+ if (type == 260) {
|
||||
+ ALOGE("sHwHal reports 260 as a supported type");
|
||||
+ got260 = true;
|
||||
+ }
|
||||
+ }
|
||||
+ });
|
||||
+ if (got260) {
|
||||
+ sHwHal->HWsetLight(260, state);
|
||||
+ return;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
Type type = static_cast<Type>(light);
|
||||
LightState state = constructState(
|
||||
colorARGB, flashMode, onMS, offMS, brightnessMode);
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,33 +0,0 @@
|
||||
From fe62d8d4d08605687312ca28f722978191e4ac41 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Sun, 5 Apr 2020 16:32:46 +0200
|
||||
Subject: [PATCH 50/58] Always allow overriding the number of work profiles
|
||||
|
||||
---
|
||||
.../java/com/android/server/pm/UserManagerService.java | 10 ++--------
|
||||
1 file changed, 2 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
|
||||
index 82bc41fcdcd..4a3da73cf42 100644
|
||||
--- a/services/core/java/com/android/server/pm/UserManagerService.java
|
||||
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
|
||||
@@ -4438,14 +4438,8 @@ public class UserManagerService extends IUserManager.Stub {
|
||||
|
||||
@VisibleForTesting
|
||||
static int getMaxManagedProfiles() {
|
||||
- // Allow overriding max managed profiles on debuggable builds for testing
|
||||
- // of multiple profiles.
|
||||
- if (!Build.IS_DEBUGGABLE) {
|
||||
- return MAX_MANAGED_PROFILES;
|
||||
- } else {
|
||||
- return SystemProperties.getInt("persist.sys.max_profiles",
|
||||
- MAX_MANAGED_PROFILES);
|
||||
- }
|
||||
+ return SystemProperties.getInt("persist.sys.max_profiles",
|
||||
+ MAX_MANAGED_PROFILES);
|
||||
}
|
||||
|
||||
@GuardedBy("mUsersLock")
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,25 +0,0 @@
|
||||
From 7a5d752d18a11b7a64e13879cdf42235bcd54237 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Thu, 9 Apr 2020 22:57:47 +0200
|
||||
Subject: [PATCH 51/58] Additional fod command for non-optical samsung devices
|
||||
running Q vendor
|
||||
|
||||
---
|
||||
.../com/android/server/biometrics/fingerprint/FacolaView.java | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
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 42f21d63430..a87f7e78af4 100644
|
||||
--- a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
+++ b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
@@ -307,6 +307,7 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
writeFile("/sys/kernel/oppo_display/dimlayer_hbm", "1");
|
||||
if(samsungFod) {
|
||||
samsungCmd("fod_enable,1,1");
|
||||
+ samsungCmd("fod_enable,1,1,0");
|
||||
}
|
||||
if(mX == -1 || mY == -1 || mW == -1 || mH == -1) return;
|
||||
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,40 +0,0 @@
|
||||
From d12f98cc2bde44b689cd4be62ba6e7d1b9fc8d9e Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Wed, 20 May 2020 17:28:26 +0200
|
||||
Subject: [PATCH 52/58] Add a backlight listener, to be used by FOD to properly
|
||||
set dim
|
||||
|
||||
---
|
||||
.../core/java/com/android/server/lights/LightsService.java | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/services/core/java/com/android/server/lights/LightsService.java b/services/core/java/com/android/server/lights/LightsService.java
|
||||
index f9ac8db09ea..6b0dbc336bb 100644
|
||||
--- a/services/core/java/com/android/server/lights/LightsService.java
|
||||
+++ b/services/core/java/com/android/server/lights/LightsService.java
|
||||
@@ -31,10 +31,14 @@ import android.view.SurfaceControl;
|
||||
import com.android.server.SystemService;
|
||||
|
||||
public class LightsService extends SystemService {
|
||||
+ public interface OnBacklightChange {
|
||||
+ void onBacklightChange(int newBacklight);
|
||||
+ }
|
||||
static final String TAG = "LightsService";
|
||||
static final boolean DEBUG = false;
|
||||
|
||||
final LightImpl mLights[] = new LightImpl[LightsManager.LIGHT_ID_COUNT];
|
||||
+ public static OnBacklightChange backlightChangeListener;
|
||||
|
||||
private final class LightImpl extends Light {
|
||||
|
||||
@@ -92,6 +96,7 @@ public class LightsService extends SystemService {
|
||||
(float) brightness / mSurfaceControlMaximumBrightness);
|
||||
return;
|
||||
}
|
||||
+ if(mId == 0 && backlightChangeListener != null) backlightChangeListener.onBacklightChange(brightness);
|
||||
|
||||
if(mId == 0) {
|
||||
String fp = SystemProperties.get("ro.vendor.build.fingerprint", "hello");
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,48 +0,0 @@
|
||||
From 84c844aca01d2a838ae19be6b7961811852fa31f Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Wed, 20 May 2020 17:39:50 +0200
|
||||
Subject: [PATCH 53/58] Don't show facola on preenroll, wait for enroll
|
||||
|
||||
---
|
||||
.../server/biometrics/fingerprint/FingerprintService.java | 4 +---
|
||||
1 file changed, 1 insertion(+), 3 deletions(-)
|
||||
|
||||
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 1323c5ec0dd..c53607786df 100644
|
||||
--- a/services/core/java/com/android/server/biometrics/fingerprint/FingerprintService.java
|
||||
+++ b/services/core/java/com/android/server/biometrics/fingerprint/FingerprintService.java
|
||||
@@ -176,7 +176,6 @@ public class FingerprintService extends BiometricServiceBase {
|
||||
@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;
|
||||
}
|
||||
@@ -185,7 +184,6 @@ public class FingerprintService extends BiometricServiceBase {
|
||||
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;
|
||||
}
|
||||
@@ -744,6 +742,7 @@ public class FingerprintService extends BiometricServiceBase {
|
||||
Slog.w(TAG, "enroll(): no fingerprint HAL!");
|
||||
return ERROR_ESRCH;
|
||||
}
|
||||
+ mFacola.show();
|
||||
return daemon.enroll(cryptoToken, groupId, timeout);
|
||||
}
|
||||
|
||||
@@ -990,7 +989,6 @@ public class FingerprintService extends BiometricServiceBase {
|
||||
Slog.w(TAG, "startPreEnroll: no fingerprint HAL!");
|
||||
return 0;
|
||||
}
|
||||
- mFacola.show();
|
||||
try {
|
||||
return daemon.preEnroll();
|
||||
} catch (RemoteException e) {
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,531 +0,0 @@
|
||||
From 5528cf273e0e2e4b33ad5202a494ebc4018216ae Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Wed, 20 May 2020 21:17:58 +0200
|
||||
Subject: [PATCH 54/58] Add support for new Goodix, Samsung, Xiaomi FODs
|
||||
|
||||
- Xiaomi on MIUI12 has new magical Z to trigger HBM, and trigger feedback. Dim layer is done by kernel, but we need to set alpha
|
||||
- Samsung has usageBits to trigger HBM and trigger feedback
|
||||
- Goodix has nothing specific just send events
|
||||
---
|
||||
services/core/Android.bp | 2 +
|
||||
.../biometrics/fingerprint/FacolaView.java | 323 +++++++++++++++---
|
||||
2 files changed, 285 insertions(+), 40 deletions(-)
|
||||
|
||||
diff --git a/services/core/Android.bp b/services/core/Android.bp
|
||||
index 334d0d04067..8dcb4396953 100644
|
||||
--- a/services/core/Android.bp
|
||||
+++ b/services/core/Android.bp
|
||||
@@ -56,7 +56,9 @@ java_library_static {
|
||||
"netd_aidl_interface-V2-java",
|
||||
"netd_event_listener_interface-java",
|
||||
"vendor.goodix.extend.service-V2.0-java",
|
||||
+ "vendor.goodix.hardware.biometrics.fingerprint-V2.1-java",
|
||||
"vendor.samsung.hardware.biometrics.fingerprint-V2.1-java",
|
||||
+ "vendor.samsung.hardware.biometrics.fingerprint-V3.0-java",
|
||||
"vendor.oppo.hardware.biometrics.fingerprint-V2.1-java",
|
||||
"vendor.xiaomi.hardware.fingerprintextension-V1.0-java",
|
||||
],
|
||||
diff --git a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
index a87f7e78af4..d3d58aff6c0 100644
|
||||
--- a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
+++ b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
@@ -35,30 +35,38 @@ import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.PrintWriter;
|
||||
+import java.util.Arrays;
|
||||
|
||||
import vendor.xiaomi.hardware.fingerprintextension.V1_0.IXiaomiFingerprint;
|
||||
import vendor.goodix.extend.service.V2_0.IGoodixFPExtendService;
|
||||
import vendor.samsung.hardware.biometrics.fingerprint.V2_1.ISecBiometricsFingerprint;
|
||||
+import vendor.samsung.hardware.biometrics.fingerprint.V3_0.ISehBiometricsFingerprint;
|
||||
|
||||
import android.hardware.display.DisplayManager;
|
||||
|
||||
+import android.os.Build;
|
||||
+import android.os.FileObserver;
|
||||
import android.os.Handler;
|
||||
import android.os.HandlerThread;
|
||||
import android.os.ServiceManager;
|
||||
|
||||
+import android.util.DisplayMetrics;
|
||||
+
|
||||
public class FacolaView extends ImageView implements OnTouchListener {
|
||||
private int mX, mY, mW, mH;
|
||||
private final Paint mPaintFingerprint = new Paint();
|
||||
private final Paint mPaintShow = new Paint();
|
||||
private IXiaomiFingerprint mXiaomiFingerprint = null;
|
||||
private IGoodixFPExtendService mGoodixFingerprint = null;
|
||||
+ private vendor.goodix.hardware.biometrics.fingerprint.V2_1.IGoodixFingerprintDaemon mGoodixFingerprintV2_1 = null;
|
||||
private ISecBiometricsFingerprint mSamsungFingerprint = null;
|
||||
+ private ISehBiometricsFingerprint mSamsungFingerprint3_0 = null;
|
||||
private vendor.oppo.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprint mOppoFingerprint = null;
|
||||
private boolean mInsideCircle = false;
|
||||
private final WindowManager.LayoutParams mParams = new WindowManager.LayoutParams();
|
||||
private final WindowManager.LayoutParams mParamsTouched = new WindowManager.LayoutParams();
|
||||
|
||||
- private final static float UNTOUCHED_DIM = .1f;
|
||||
+ private final static float UNTOUCHED_DIM = .0f;
|
||||
private final static float TOUCHED_DIM = .9f;
|
||||
|
||||
private final HandlerThread mHandlerThread;
|
||||
@@ -68,10 +76,17 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
private final DisplayManager mDM;
|
||||
private final boolean samsungFod = samsungHasCmd("fod_enable");
|
||||
private boolean noDim;
|
||||
+ private boolean bypassedBrightness;
|
||||
+ private boolean isDown = false;
|
||||
+
|
||||
+ private java.util.ArrayList<Object> objectsToKeep = new java.util.ArrayList();
|
||||
+
|
||||
+ private static boolean doneCalibrationOnce = true;
|
||||
|
||||
private boolean mFullGreenDisplayed = false;
|
||||
private final View mFullGreen;
|
||||
private boolean mHidden = true;
|
||||
+ private boolean xiaomiAsynchronous = false;
|
||||
FacolaView(Context context) {
|
||||
super(context);
|
||||
|
||||
@@ -86,13 +101,18 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
mWM = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);
|
||||
mDM = (DisplayManager) getContext().getSystemService(Context.DISPLAY_SERVICE);
|
||||
|
||||
+ Point displayRealSize = new Point();
|
||||
+ DisplayMetrics displayMetrics = new DisplayMetrics();
|
||||
+ mDM.getDisplay(0).getRealSize(displayRealSize);
|
||||
+ mDM.getDisplay(0).getMetrics(displayMetrics);
|
||||
+
|
||||
android.util.Log.d("PHH", "Samsung FOD " + samsungFod);
|
||||
|
||||
mHandlerThread = new HandlerThread("FacolaThread");
|
||||
mHandlerThread.start();
|
||||
mHandler = new Handler(mHandlerThread.getLooper());
|
||||
|
||||
- noDim = android.os.SystemProperties.getBoolean("persist.sys.phh.nodim", true);
|
||||
+ noDim = android.os.SystemProperties.getBoolean("persist.sys.phh.nodim", false);
|
||||
String[] location = android.os.SystemProperties.get("persist.vendor.sys.fp.fod.location.X_Y", "").split(",");
|
||||
if(location.length != 2)
|
||||
location = android.os.SystemProperties.get("persist.sys.fp.fod.location.X_Y", "").split(",");
|
||||
@@ -107,12 +127,25 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
mW = Integer.parseInt(size[0]);
|
||||
mH = Integer.parseInt(size[1]);
|
||||
} else {
|
||||
+ //a50
|
||||
+ //mX = -1;//443;// - 190/2;
|
||||
+ //mY = -1;// 1972;// - 190 / 2;
|
||||
+ //mW = -1;//190;
|
||||
+ //mH = -1;//190;
|
||||
+
|
||||
+ //x2 pro
|
||||
+ //mX = 445;// - 190/2;
|
||||
+ //mY = 1988;// - 190/2;
|
||||
+ //mW = 190;
|
||||
+ //mH = 190;
|
||||
mX = -1;
|
||||
mY = -1;
|
||||
mW = -1;
|
||||
mH = -1;
|
||||
}
|
||||
|
||||
+ mParamsTouched.dimAmount = 0;
|
||||
+
|
||||
int oppoSize = android.os.SystemProperties.getInt("persist.vendor.fingerprint.optical.iconsize", 0);
|
||||
if(oppoSize > 0) {
|
||||
mW = oppoSize;
|
||||
@@ -121,15 +154,16 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
int oppoLocation = android.os.SystemProperties.getInt("persist.vendor.fingerprint.optical.iconlocation", 0);
|
||||
if(oppoLocation > 0) {
|
||||
Slog.d("PHH-Enroll", "Got Oppo icon location " + oppoLocation);
|
||||
- Point p = new Point();
|
||||
- mDM.getDisplay(0).getRealSize(p);
|
||||
- Slog.d("PHH-Enroll", "\tscreen size " + p.x + ", " + p.y);
|
||||
- mX = p.x/2 - mW/2;
|
||||
- mY = p.y - mH/2 - oppoLocation;
|
||||
+ Slog.d("PHH-Enroll", "\tscreen size " + displayRealSize.x + ", " + displayRealSize.y);
|
||||
+ mX = displayRealSize.x/2 - mW/2;
|
||||
+ mY = displayRealSize.y - mH/2 - oppoLocation;
|
||||
Slog.d("PHH-Enroll", "\tfacola at " + mX + ", " + mY);
|
||||
noDim = true;
|
||||
}
|
||||
|
||||
+ String gammaStr = android.os.SystemProperties.get("persist.sys.phh.fod.gamma", "2.2");
|
||||
+ float gamma = Float.parseFloat(gammaStr);
|
||||
+
|
||||
mPaintFingerprint.setAntiAlias(true);
|
||||
mPaintFingerprint.setColor(Color.GREEN);
|
||||
|
||||
@@ -148,11 +182,21 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
} catch(Exception e) {
|
||||
Slog.d("PHH-Enroll", "Failed getting goodix fingerprint service", e);
|
||||
}
|
||||
+ try {
|
||||
+ mGoodixFingerprintV2_1 = vendor.goodix.hardware.biometrics.fingerprint.V2_1.IGoodixFingerprintDaemon.getService();
|
||||
+ } catch(Exception e) {
|
||||
+ Slog.d("PHH-Enroll", "Failed getting goodix2 fingerprint service", e);
|
||||
+ }
|
||||
try {
|
||||
mSamsungFingerprint = ISecBiometricsFingerprint.getService();
|
||||
} catch(Exception e) {
|
||||
Slog.d("PHH-Enroll", "Failed getting samsung fingerprint service", e);
|
||||
}
|
||||
+ try {
|
||||
+ mSamsungFingerprint3_0 = ISehBiometricsFingerprint.getService();
|
||||
+ } catch(Exception e) {
|
||||
+ Slog.d("PHH-Enroll", "Failed getting samsung 3.0 fingerprint service", e);
|
||||
+ }
|
||||
try {
|
||||
mOppoFingerprint = vendor.oppo.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprint.getService();
|
||||
} catch(Exception e) {
|
||||
@@ -160,13 +204,154 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
}
|
||||
}
|
||||
|
||||
+ if(mSamsungFingerprint3_0 != null || mSamsungFingerprint != null) {
|
||||
+ noDim = true;
|
||||
+ bypassedBrightness = true;
|
||||
+
|
||||
+ String fodPositionString = readFile("/sys/class/fingerprint/fingerprint/position");
|
||||
+ final String brightnessFile;
|
||||
+ if("qcom".equals(Build.HARDWARE))
|
||||
+ brightnessFile = "/sys/class/backlight/panel0-backlight/brightness";
|
||||
+ else
|
||||
+ brightnessFile = "/sys/class/lcd/panel/device/backlight/panel/brightness";
|
||||
+
|
||||
+ String maskBrightnessStr = readFile("/sys/class/lcd/panel/mask_brightness");
|
||||
+ String actualMaskBrightnessPath = "/sys/class/lcd/panel/actual_mask_brightness";
|
||||
+
|
||||
+ if(fodPositionString != null && maskBrightnessStr != null) {
|
||||
+ double maskBrightness = Double.parseDouble(maskBrightnessStr);
|
||||
+ String[] fodPositionArray = readFile("/sys/class/fingerprint/fingerprint/position").split(",");
|
||||
+ float bottomMM = Float.parseFloat(fodPositionArray[0]);
|
||||
+ float areaSizeMM = Float.parseFloat(fodPositionArray[5]);
|
||||
+
|
||||
+ float bottomInch = bottomMM * 0.0393700787f;
|
||||
+ float areaSizeInch = areaSizeMM * 0.0393700787f;
|
||||
+
|
||||
+ int bottomPx = (int)(bottomInch * displayMetrics.ydpi);
|
||||
+ int areaSizePx = (int)(areaSizeInch * displayMetrics.ydpi);
|
||||
+ mW = areaSizePx;
|
||||
+ mH = areaSizePx;
|
||||
+ mX = displayRealSize.x/2 - mW/2;
|
||||
+ mY = displayRealSize.y - bottomPx - mH;
|
||||
+ Slog.d("PHH-Enroll", "Samsung computed " + mX + "," + mY + "; " + mW + "x" + mH);
|
||||
+
|
||||
+ String cmd = String.format("fod_rect,%d,%d,%d,%d", mX, mY, mX+mW, mY+mH);
|
||||
+ samsungCmd(cmd);
|
||||
+
|
||||
+ Slog.d("PHH-Enroll", "Reading brightness file gives " + readFile(brightnessFile));
|
||||
+ FileObserver samsungCallback = new FileObserver(brightnessFile, FileObserver.MODIFY) {
|
||||
+ //Don't use LightsService' observer, because Samsung's brightness file is in nits, which makes for much more accurate computation
|
||||
+ @Override
|
||||
+ public void onEvent(int event, String path) {
|
||||
+ String currentBrightnessStr = readFile(brightnessFile);
|
||||
+ Slog.d("PHH-Enroll", "New brightness is " + currentBrightnessStr);
|
||||
+ int currentBrightness = Integer.parseInt(currentBrightnessStr);
|
||||
+
|
||||
+ mHandler.post( () -> {
|
||||
+ double dim = 1.0d - Math.pow( (currentBrightness / maskBrightness), 1/gamma);
|
||||
+ Slog.d("PHH-Enroll", "Setting dim to " + dim);
|
||||
+ mParamsTouched.dimAmount = (float)dim;
|
||||
+ if(!mHidden) {
|
||||
+ Slog.d("PHH-Enroll", "++Setting dim to " + dim);
|
||||
+ if(mFullGreenDisplayed && !mHidden) {
|
||||
+ mWM.updateViewLayout(mFullGreen, mParamsTouched);
|
||||
+ }
|
||||
+ }
|
||||
+ });
|
||||
+ }
|
||||
+ };
|
||||
+ samsungCallback.startWatching();
|
||||
+ objectsToKeep.add(samsungCallback);
|
||||
+
|
||||
+ Slog.d("PHH-Enroll", "Reading actual brightness file gives " + readFile(actualMaskBrightnessPath));
|
||||
+ FileObserver actualMaskObserver = new FileObserver(actualMaskBrightnessPath, FileObserver.MODIFY) {
|
||||
+ @Override
|
||||
+ public void onEvent(int event, String path) {
|
||||
+ String actualMask = readFile(actualMaskBrightnessPath);
|
||||
+ Slog.d("PHH-Enroll", "New actual mask brightness is " + actualMask);
|
||||
+ try {
|
||||
+ int eventReq = 0;
|
||||
+ if("0".equals(actualMask)) {
|
||||
+ eventReq = 1; //released
|
||||
+ } else {
|
||||
+ eventReq = 2; //pressed
|
||||
+ }
|
||||
+ if(mSamsungFingerprint != null) {
|
||||
+ mSamsungFingerprint.request(22 /* SEM_FINGER_STATE */, 0, eventReq, new java.util.ArrayList<Byte>(),
|
||||
+ (int retval, java.util.ArrayList<Byte> out) -> {} );
|
||||
+ } else if(mSamsungFingerprint3_0 != null) {
|
||||
+ mSamsungFingerprint3_0.sehRequest(22 /* SEM_FINGER_STATE */, eventReq, new java.util.ArrayList<Byte>(),
|
||||
+ (int retval, java.util.ArrayList<Byte> out) -> {} );
|
||||
+ }
|
||||
+ } catch(Exception e) {
|
||||
+ Slog.d("PHH-Enroll", "Failed setting samsung event for mask observer", e);
|
||||
+ }
|
||||
+ }
|
||||
+ };
|
||||
+ actualMaskObserver.startWatching();
|
||||
+ objectsToKeep.add(actualMaskObserver);
|
||||
+
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ String xiaomiFodReadyPath = "/sys/class/drm/card0-DSI-1/fod_ui_ready";
|
||||
+ if(new File(xiaomiFodReadyPath).exists()) {
|
||||
+ xiaomiAsynchronous = true;
|
||||
+ FileObserver xiaomiUiReadyCb = new FileObserver(xiaomiFodReadyPath, FileObserver.MODIFY) {
|
||||
+ @Override
|
||||
+ public void onEvent(int event, String path) {
|
||||
+ String currentUiReady = readFile(xiaomiFodReadyPath);
|
||||
+ Slog.d("PHH-Enroll", "New fod ready is " + currentUiReady);
|
||||
+
|
||||
+ mHandler.post( () -> {
|
||||
+ try {
|
||||
+ if("0".equals(currentUiReady)) {
|
||||
+ mXiaomiFingerprint.extCmd(0xa, 0);
|
||||
+ } else if("1".equals(currentUiReady)) {
|
||||
+ mXiaomiFingerprint.extCmd(0xa, 1);
|
||||
+ }
|
||||
+ } catch(Exception e) {
|
||||
+ Slog.d("PHH-Enroll", "Failed Xiaomi async extcmd", e);
|
||||
+ }
|
||||
+ });
|
||||
+ }
|
||||
+ };
|
||||
+ xiaomiUiReadyCb.startWatching();
|
||||
+ objectsToKeep.add(xiaomiUiReadyCb);
|
||||
+ }
|
||||
+
|
||||
if(mX != -1) {
|
||||
android.os.SystemProperties.set("persist.sys.phh.has_fod", "true");
|
||||
} else {
|
||||
android.os.SystemProperties.set("persist.sys.phh.has_fod", "false");
|
||||
}
|
||||
+ com.android.server.lights.LightsService.backlightChangeListener = new com.android.server.lights.LightsService.OnBacklightChange() {
|
||||
+ public void onBacklightChange(int brightness) {
|
||||
+ //Simple (but wrong) math assuming 255 is max brightness with 2.2 screen gamma and linear backlight
|
||||
+ double dim = (1.0 - Math.pow(brightness/255.0, 1/gamma));
|
||||
+
|
||||
+ int alpha = (int)(255.0*dim);
|
||||
+ Slog.d("PHH-Enroll", "Setting Xiaomi dim alpha to " + alpha + ", from " + brightness);
|
||||
+ writeFile("/sys/class/drm/card0-DSI-1/dim_alpha", Integer.toString(alpha));
|
||||
+
|
||||
+ mHandler.post( () -> {
|
||||
+ if(!noDim) {
|
||||
+ Slog.d("PHH-Enroll", "Setting dim to " + dim);
|
||||
+ mParams.dimAmount = (float)dim;
|
||||
+ if(!mHidden) {
|
||||
+ Slog.d("PHH-Enroll", "++Setting dim to " + dim);
|
||||
+ mWM.updateViewLayout(FacolaView.this, mParams);
|
||||
+ }
|
||||
+ }
|
||||
+ });
|
||||
+ }
|
||||
+ };
|
||||
+
|
||||
+ bypassedBrightness = hbmCtrl1.exists() || noDim;
|
||||
}
|
||||
|
||||
+ private final File hbmCtrl1 = new File("/proc/leds/hbm_mode");
|
||||
+
|
||||
private final File oppoFod = new File("/sys/kernel/oppo_display/notify_fppress");
|
||||
private void oppoPress(boolean pressed) {
|
||||
if(!oppoFod.exists()) return;
|
||||
@@ -199,11 +384,14 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
mParamsTouched.type = WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY;
|
||||
mParamsTouched.setTitle("Fingerprint on display.touched");
|
||||
mParamsTouched.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
|
||||
- WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
|
||||
- mParamsTouched.dimAmount = UNTOUCHED_DIM;
|
||||
+ WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN |
|
||||
+ WindowManager.LayoutParams.FLAG_DIM_BEHIND;
|
||||
+ writeFile(hbmCtrl1, "1");
|
||||
if(!noDim) {
|
||||
- mParamsTouched.dimAmount = TOUCHED_DIM;
|
||||
mParamsTouched.screenBrightness = 1.0f;
|
||||
+ if(!bypassedBrightness) {
|
||||
+ mParamsTouched.screenBrightness = 1.0f;
|
||||
+ }
|
||||
}
|
||||
|
||||
mParamsTouched.packageName = "android";
|
||||
@@ -216,39 +404,52 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
mWM.addView(mFullGreen, mParamsTouched);
|
||||
});
|
||||
}
|
||||
-
|
||||
- int nitValue = 2;
|
||||
- mHandler.postDelayed( () -> {
|
||||
- try {
|
||||
- if(mXiaomiFingerprint != null) {
|
||||
+ if(!isDown) {
|
||||
+ isDown = true;
|
||||
+ int nitValue = 2;
|
||||
+ mHandler.postDelayed( () -> {
|
||||
+ try {
|
||||
+ if(mXiaomiFingerprint != null && !xiaomiAsynchronous) {
|
||||
mXiaomiFingerprint.extCmd(0xa, nitValue);
|
||||
- } else if(mGoodixFingerprint != null) {
|
||||
+ } else if(mGoodixFingerprint != null) {
|
||||
mGoodixFingerprint.goodixExtendCommand(10, 1);
|
||||
- } else if(mSamsungFingerprint != null) {
|
||||
- mSamsungFingerprint.request(22 /* SEM_FINGER_STATE */, 0, 2 /* pressed */, new java.util.ArrayList<Byte>(),
|
||||
+ } else if(mGoodixFingerprintV2_1 != null) {
|
||||
+ mGoodixFingerprintV2_1.sendCommand(0x600, new java.util.ArrayList<Byte>(),
|
||||
(int retval, java.util.ArrayList<Byte> out) -> {} );
|
||||
- }
|
||||
- } catch(Exception e) {
|
||||
- Slog.d("PHH-Enroll", "Failed calling late fp extcmd", e);
|
||||
- }
|
||||
- }, 200);
|
||||
+ }
|
||||
+ } catch(Exception e) {
|
||||
+ Slog.d("PHH-Enroll", "Failed calling late fp extcmd", e);
|
||||
+ }
|
||||
+ }, 200);
|
||||
+ }
|
||||
} catch(Exception e) {
|
||||
Slog.d("PHH-Enroll", "Failed calling fp extcmd", e);
|
||||
}
|
||||
oppoPress(true);
|
||||
} else {
|
||||
+ writeFile(hbmCtrl1, "1");
|
||||
oppoPress(false);
|
||||
- try {
|
||||
- if(mXiaomiFingerprint != null) {
|
||||
- mXiaomiFingerprint.extCmd(0xa, 0);
|
||||
- } else if(mGoodixFingerprint != null) {
|
||||
- mGoodixFingerprint.goodixExtendCommand(10, 0);
|
||||
- } else if(mSamsungFingerprint != null) {
|
||||
- mSamsungFingerprint.request(22 /* SEM_FINGER_STATE */, 0, 1 /* released */, new java.util.ArrayList<Byte>(),
|
||||
- (int retval, java.util.ArrayList<Byte> out) -> {} );
|
||||
+ if(isDown) {
|
||||
+ isDown = false;
|
||||
+ try {
|
||||
+ if(mXiaomiFingerprint != null && !xiaomiAsynchronous) {
|
||||
+ mXiaomiFingerprint.extCmd(0xa, 0);
|
||||
+ } else if(mGoodixFingerprint != null) {
|
||||
+ mGoodixFingerprint.goodixExtendCommand(10, 0);
|
||||
+ } else if(mGoodixFingerprintV2_1 != null) {
|
||||
+ mGoodixFingerprintV2_1.sendCommand(0x601, new java.util.ArrayList<Byte>(),
|
||||
+ (int retval, java.util.ArrayList<Byte> out) -> {});
|
||||
+ } else if(mSamsungFingerprint != null) {
|
||||
+ mSamsungFingerprint.request(22 /* SEM_FINGER_STATE */, 0, 1 /* released */, new java.util.ArrayList<Byte>(),
|
||||
+ (int retval, java.util.ArrayList<Byte> out) -> {} );
|
||||
+ } else if(mSamsungFingerprint3_0 != null) {
|
||||
+ mSamsungFingerprint3_0.sehRequest(22 /* SEM_FINGER_STATE */, 1 /* released */, new java.util.ArrayList<Byte>(),
|
||||
+ (int retval, java.util.ArrayList<Byte> out) -> {} );
|
||||
+ }
|
||||
+ } catch(Exception e) {
|
||||
+ Slog.d("PHH-Enroll", "Failed calling fp extcmd", e);
|
||||
}
|
||||
- } catch(Exception e) {
|
||||
- Slog.d("PHH-Enroll", "Failed calling fp extcmd", e);
|
||||
+
|
||||
}
|
||||
if(mFullGreenDisplayed) {
|
||||
mHandler.post( () -> {
|
||||
@@ -278,7 +479,9 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
|
||||
if(!mInsideCircle) {
|
||||
mParams.screenBrightness = .0f;
|
||||
- mParams.dimAmount = UNTOUCHED_DIM;
|
||||
+ if(!noDim) {
|
||||
+ mParams.dimAmount = UNTOUCHED_DIM;
|
||||
+ }
|
||||
mWM.updateViewLayout(this, mParams);
|
||||
return false;
|
||||
}
|
||||
@@ -296,6 +499,34 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
Slog.d("PHH-Enroll", "Show", new Exception());
|
||||
if(!mHidden) return;
|
||||
mHidden = false;
|
||||
+ try {
|
||||
+ mSamsungFingerprint = ISecBiometricsFingerprint.getService();
|
||||
+ mSamsungFingerprint.request(20 /* SEM_FINGER_STATE */, 0, 0 /* released */, new java.util.ArrayList<Byte>(),
|
||||
+ (int retval, java.util.ArrayList<Byte> out) -> {} );
|
||||
+ } catch(Exception e) {
|
||||
+ Slog.d("PHH-Enroll", "Failed setting fast fingerprint recognition");
|
||||
+ }
|
||||
+ try {
|
||||
+ mSamsungFingerprint3_0 = ISehBiometricsFingerprint.getService();
|
||||
+ Slog.d("PHH-Enroll", "Samsung ask for sensor status");
|
||||
+ mSamsungFingerprint3_0.sehRequest(6, 0, new java.util.ArrayList(), (int retval, java.util.ArrayList<Byte> out) -> {
|
||||
+ Slog.d("PHH-Enroll", "Result is " + retval);
|
||||
+ for(int i=0; i<out.size(); i++) {
|
||||
+ Slog.d("PHH-Enroll", "\t" + i + ":" + out.get(i));
|
||||
+ }
|
||||
+ } );
|
||||
+ Slog.d("PHH-Enroll", "Samsung ask for sensor brightness value");
|
||||
+ mSamsungFingerprint3_0.sehRequest(32, 0, new java.util.ArrayList(), (int retval, java.util.ArrayList<Byte> out) -> {
|
||||
+ Slog.d("PHH-Enroll", "Result is " + retval);
|
||||
+ for(int i=0; i<out.size(); i++) {
|
||||
+ Slog.d("PHH-Enroll", "\t" + i + ":" + out.get(i));
|
||||
+ }
|
||||
+ } );
|
||||
+
|
||||
+ } catch(Exception e) {
|
||||
+ Slog.d("PHH-Enroll", "Failed setting samsung3.0 fingerprint recognition", e);
|
||||
+ }
|
||||
+
|
||||
if(mOppoFingerprint != null) {
|
||||
try {
|
||||
mOppoFingerprint.setScreenState(vendor.oppo.hardware.biometrics.fingerprint.V2_1.FingerprintScreenState.FINGERPRINT_SCREEN_ON);
|
||||
@@ -327,13 +558,17 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
mParams.format = PixelFormat.TRANSLUCENT;
|
||||
|
||||
mParams.type = WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY;
|
||||
- mParams.setTitle("Fingerprint on display");
|
||||
+ mParams.setTitle("Fingerprint on display.untouched");
|
||||
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.screenBrightness = .0f;
|
||||
+ if(!noDim) {
|
||||
+ mParams.dimAmount = UNTOUCHED_DIM;
|
||||
+ mParams.screenBrightness = .0f;
|
||||
+ } else {
|
||||
+ mParams.dimAmount = 0;
|
||||
+ }
|
||||
|
||||
mParams.packageName = "android";
|
||||
|
||||
@@ -370,8 +605,6 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
try {
|
||||
if(mXiaomiFingerprint != null) {
|
||||
mXiaomiFingerprint.extCmd(0xa, 0);
|
||||
- } else if(mGoodixFingerprint != null) {
|
||||
- mXiaomiFingerprint.extCmd(10, 0);
|
||||
}
|
||||
} catch(Exception e) {
|
||||
Slog.d("PHH-Enroll", "Failed calling xiaomi fp extcmd");
|
||||
@@ -417,7 +650,7 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
}
|
||||
}
|
||||
|
||||
- private static void samsungCmd(String cmd) {
|
||||
+ public static void samsungCmd(String cmd) {
|
||||
try {
|
||||
PrintWriter writer = new PrintWriter("/sys/devices/virtual/sec/tsp/cmd", "UTF-8");
|
||||
writer.println(cmd);
|
||||
@@ -442,4 +675,14 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
}
|
||||
}
|
||||
|
||||
+ private static void writeFile(File file, String value) {
|
||||
+ try {
|
||||
+ PrintWriter writer = new PrintWriter(file, "UTF-8");
|
||||
+ writer.println(value);
|
||||
+ writer.close();
|
||||
+ } catch(Exception e) {
|
||||
+ android.util.Log.d("PHH", "Failed writing to " + file + ": " + value);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
}
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,33 +0,0 @@
|
||||
From 5bc5806b8570dcd25aae6bcb27926037a48855de Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Thu, 21 May 2020 16:12:42 +0200
|
||||
Subject: [PATCH 55/58] On MIUI12 vendor, we don't want our own diming
|
||||
|
||||
---
|
||||
.../com/android/server/biometrics/fingerprint/FacolaView.java | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
index d3d58aff6c0..8afbbc0dce0 100644
|
||||
--- a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
+++ b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
@@ -81,8 +81,6 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
|
||||
private java.util.ArrayList<Object> objectsToKeep = new java.util.ArrayList();
|
||||
|
||||
- private static boolean doneCalibrationOnce = true;
|
||||
-
|
||||
private boolean mFullGreenDisplayed = false;
|
||||
private final View mFullGreen;
|
||||
private boolean mHidden = true;
|
||||
@@ -297,6 +295,7 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
String xiaomiFodReadyPath = "/sys/class/drm/card0-DSI-1/fod_ui_ready";
|
||||
if(new File(xiaomiFodReadyPath).exists()) {
|
||||
xiaomiAsynchronous = true;
|
||||
+ noDim = true;
|
||||
FileObserver xiaomiUiReadyCb = new FileObserver(xiaomiFodReadyPath, FileObserver.MODIFY) {
|
||||
@Override
|
||||
public void onEvent(int event, String path) {
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,59 +0,0 @@
|
||||
From 2f5a9ff1301647e242dc37d25387dff5ed652207 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Thu, 21 May 2020 18:41:57 +0200
|
||||
Subject: [PATCH 56/58] Add mUiHidden which is guarded by Handler. This is
|
||||
needed because backlight listener might intervene at the wrong time
|
||||
|
||||
---
|
||||
.../android/server/biometrics/fingerprint/FacolaView.java | 7 ++++++-
|
||||
1 file changed, 6 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 8afbbc0dce0..aeb81f5b7c9 100644
|
||||
--- a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
+++ b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
@@ -84,6 +84,7 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
private boolean mFullGreenDisplayed = false;
|
||||
private final View mFullGreen;
|
||||
private boolean mHidden = true;
|
||||
+ private boolean mUiHidden = true;
|
||||
private boolean xiaomiAsynchronous = false;
|
||||
FacolaView(Context context) {
|
||||
super(context);
|
||||
@@ -216,6 +217,8 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
String maskBrightnessStr = readFile("/sys/class/lcd/panel/mask_brightness");
|
||||
String actualMaskBrightnessPath = "/sys/class/lcd/panel/actual_mask_brightness";
|
||||
|
||||
+ Slog.d("PHH-Enroll", "Got fod position, mask brightness " + fodPositionString + ", " + maskBrightnessStr);
|
||||
+
|
||||
if(fodPositionString != null && maskBrightnessStr != null) {
|
||||
double maskBrightness = Double.parseDouble(maskBrightnessStr);
|
||||
String[] fodPositionArray = readFile("/sys/class/fingerprint/fingerprint/position").split(",");
|
||||
@@ -337,7 +340,7 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
if(!noDim) {
|
||||
Slog.d("PHH-Enroll", "Setting dim to " + dim);
|
||||
mParams.dimAmount = (float)dim;
|
||||
- if(!mHidden) {
|
||||
+ if(!mUiHidden) {
|
||||
Slog.d("PHH-Enroll", "++Setting dim to " + dim);
|
||||
mWM.updateViewLayout(FacolaView.this, mParams);
|
||||
}
|
||||
@@ -573,6 +576,7 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
|
||||
mParams.gravity = Gravity.TOP | Gravity.LEFT;
|
||||
mHandler.post( () -> {
|
||||
+ mUiHidden = false;
|
||||
mWM.addView(this, mParams);
|
||||
});
|
||||
|
||||
@@ -618,6 +622,7 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
|
||||
Slog.d("PHH-Enroll", "Removed facola");
|
||||
mHandler.post( () -> {
|
||||
+ mUiHidden = true;
|
||||
mWM.removeView(this);
|
||||
});
|
||||
}
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,84 +0,0 @@
|
||||
From ce6a18178130952fd1238d2fa66aceef1c114ed1 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Thu, 21 May 2020 18:42:20 +0200
|
||||
Subject: [PATCH 57/58] Always try to get FOD HALs, because we check samsung
|
||||
HAL later to compute width
|
||||
|
||||
---
|
||||
.../biometrics/fingerprint/FacolaView.java | 60 +++++++++----------
|
||||
1 file changed, 29 insertions(+), 31 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 aeb81f5b7c9..3536093a4ee 100644
|
||||
--- a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
+++ b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
@@ -170,37 +170,35 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
mPaintShow.setColor(Color.argb(0x18, 0x00, 0xff, 0x00));
|
||||
setOnTouchListener(this);
|
||||
Slog.d("PHH-Enroll", "Created facola...");
|
||||
- if(mW != -1) {
|
||||
- try {
|
||||
- mXiaomiFingerprint = IXiaomiFingerprint.getService();
|
||||
- } catch(Exception e) {
|
||||
- Slog.d("PHH-Enroll", "Failed getting xiaomi fingerprint service", e);
|
||||
- }
|
||||
- try {
|
||||
- mGoodixFingerprint = IGoodixFPExtendService.getService();
|
||||
- } catch(Exception e) {
|
||||
- Slog.d("PHH-Enroll", "Failed getting goodix fingerprint service", e);
|
||||
- }
|
||||
- try {
|
||||
- mGoodixFingerprintV2_1 = vendor.goodix.hardware.biometrics.fingerprint.V2_1.IGoodixFingerprintDaemon.getService();
|
||||
- } catch(Exception e) {
|
||||
- Slog.d("PHH-Enroll", "Failed getting goodix2 fingerprint service", e);
|
||||
- }
|
||||
- try {
|
||||
- mSamsungFingerprint = ISecBiometricsFingerprint.getService();
|
||||
- } catch(Exception e) {
|
||||
- Slog.d("PHH-Enroll", "Failed getting samsung fingerprint service", e);
|
||||
- }
|
||||
- try {
|
||||
- mSamsungFingerprint3_0 = ISehBiometricsFingerprint.getService();
|
||||
- } catch(Exception e) {
|
||||
- Slog.d("PHH-Enroll", "Failed getting samsung 3.0 fingerprint service", e);
|
||||
- }
|
||||
- try {
|
||||
- mOppoFingerprint = vendor.oppo.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprint.getService();
|
||||
- } catch(Exception e) {
|
||||
- Slog.d("PHH-Enroll", "Failed getting oppo fingerprint service", e);
|
||||
- }
|
||||
+ try {
|
||||
+ mXiaomiFingerprint = IXiaomiFingerprint.getService();
|
||||
+ } catch(Exception e) {
|
||||
+ Slog.d("PHH-Enroll", "Failed getting xiaomi fingerprint service", e);
|
||||
+ }
|
||||
+ try {
|
||||
+ mGoodixFingerprint = IGoodixFPExtendService.getService();
|
||||
+ } catch(Exception e) {
|
||||
+ Slog.d("PHH-Enroll", "Failed getting goodix fingerprint service", e);
|
||||
+ }
|
||||
+ try {
|
||||
+ mGoodixFingerprintV2_1 = vendor.goodix.hardware.biometrics.fingerprint.V2_1.IGoodixFingerprintDaemon.getService();
|
||||
+ } catch(Exception e) {
|
||||
+ Slog.d("PHH-Enroll", "Failed getting goodix2 fingerprint service", e);
|
||||
+ }
|
||||
+ try {
|
||||
+ mSamsungFingerprint = ISecBiometricsFingerprint.getService();
|
||||
+ } catch(Exception e) {
|
||||
+ Slog.d("PHH-Enroll", "Failed getting samsung fingerprint service", e);
|
||||
+ }
|
||||
+ try {
|
||||
+ mSamsungFingerprint3_0 = ISehBiometricsFingerprint.getService();
|
||||
+ } catch(Exception e) {
|
||||
+ Slog.d("PHH-Enroll", "Failed getting samsung 3.0 fingerprint service", e);
|
||||
+ }
|
||||
+ try {
|
||||
+ mOppoFingerprint = vendor.oppo.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprint.getService();
|
||||
+ } catch(Exception e) {
|
||||
+ Slog.d("PHH-Enroll", "Failed getting oppo fingerprint service", e);
|
||||
}
|
||||
|
||||
if(mSamsungFingerprint3_0 != null || mSamsungFingerprint != null) {
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,25 +0,0 @@
|
||||
From cb07b8475b5b0c9da86012d4c260a404a2e5c640 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Sat, 6 Jun 2020 18:21:56 +0200
|
||||
Subject: [PATCH 58/58] HOME deserves to wake-up devices just as well as back
|
||||
and menu
|
||||
|
||||
---
|
||||
core/java/android/view/KeyEvent.java | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/core/java/android/view/KeyEvent.java b/core/java/android/view/KeyEvent.java
|
||||
index fee2503ccad..7bdeaa6e83e 100644
|
||||
--- a/core/java/android/view/KeyEvent.java
|
||||
+++ b/core/java/android/view/KeyEvent.java
|
||||
@@ -1935,6 +1935,7 @@ public class KeyEvent extends InputEvent implements Parcelable {
|
||||
switch (keyCode) {
|
||||
case KeyEvent.KEYCODE_BACK:
|
||||
case KeyEvent.KEYCODE_MENU:
|
||||
+ case KeyEvent.KEYCODE_HOME:
|
||||
case KeyEvent.KEYCODE_WAKEUP:
|
||||
case KeyEvent.KEYCODE_PAIRING:
|
||||
case KeyEvent.KEYCODE_STEM_1:
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,27 +0,0 @@
|
||||
From 0b98498b3b9768fabd4b9a45e6ce23c6bcbc93a1 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Tue, 14 Aug 2018 21:01:35 +0200
|
||||
Subject: [PATCH 1/8] AOSP 8.0/8.1 didn't use presentOrValidate, so it's
|
||||
broken. Don't use it
|
||||
|
||||
Change-Id: If86793dba3738680280f9dc0f7e7c802c0836690
|
||||
---
|
||||
services/surfaceflinger/DisplayHardware/HWComposer.cpp | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
|
||||
index 1099041b4..2021c26b0 100644
|
||||
--- a/services/surfaceflinger/DisplayHardware/HWComposer.cpp
|
||||
+++ b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
|
||||
@@ -424,7 +424,7 @@ status_t HWComposer::prepare(DisplayId displayId, const compositionengine::Outpu
|
||||
// The check below is incorrect. We actually rely on HWC here to fall
|
||||
// back to validate when there is any client layer.
|
||||
displayData.validateWasSkipped = false;
|
||||
- if (!displayData.hasClientComposition) {
|
||||
+ if ((false)) {
|
||||
sp<Fence> outPresentFence;
|
||||
uint32_t state = UINT32_MAX;
|
||||
error = hwcDisplay->presentOrValidate(&numTypes, &numRequests, &outPresentFence , &state);
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,28 +0,0 @@
|
||||
From f4a49874650b6192a821a6e755f600745b34210a Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Sun, 19 Aug 2018 23:07:24 +0200
|
||||
Subject: [PATCH 2/8] Ignore usage bits verification
|
||||
|
||||
This didn't ignore as of 8.1, so we're ""safe""
|
||||
|
||||
Change-Id: I40c1d588c1fa104d844322b469f76e52bee1495a
|
||||
---
|
||||
libs/ui/Gralloc2.cpp | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/libs/ui/Gralloc2.cpp b/libs/ui/Gralloc2.cpp
|
||||
index 2dd11b141..3ebf9808d 100644
|
||||
--- a/libs/ui/Gralloc2.cpp
|
||||
+++ b/libs/ui/Gralloc2.cpp
|
||||
@@ -115,7 +115,7 @@ status_t Gralloc2Mapper::validateBufferDescriptorInfo(
|
||||
if (descriptorInfo->usage & ~validUsageBits) {
|
||||
ALOGE("buffer descriptor contains invalid usage bits 0x%" PRIx64,
|
||||
descriptorInfo->usage & ~validUsageBits);
|
||||
- return BAD_VALUE;
|
||||
+ //return BAD_VALUE;
|
||||
}
|
||||
return NO_ERROR;
|
||||
}
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,43 +0,0 @@
|
||||
From 66d21d061b9c9f745c5cb199c29268f519425d71 Mon Sep 17 00:00:00 2001
|
||||
From: phh <phh@phh.me>
|
||||
Date: Wed, 22 Aug 2018 08:57:52 +0000
|
||||
Subject: [PATCH 3/8] Enable fallback to old ro.sf.hwrotation property
|
||||
|
||||
Change-Id: I46b75a15b85fc5bda31357a4beeb7dab77bd6fe1
|
||||
---
|
||||
services/surfaceflinger/SurfaceFlinger.cpp | 18 ++++++++++++++++++
|
||||
1 file changed, 18 insertions(+)
|
||||
|
||||
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
|
||||
index e2ba4de6d..d66c8a8f5 100644
|
||||
--- a/services/surfaceflinger/SurfaceFlinger.cpp
|
||||
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
|
||||
@@ -339,7 +339,25 @@ SurfaceFlinger::SurfaceFlinger(Factory& factory) : SurfaceFlinger(factory, SkipI
|
||||
SurfaceFlinger::primaryDisplayOrientation = DisplayState::eOrientationDefault;
|
||||
break;
|
||||
}
|
||||
+
|
||||
ALOGV("Primary Display Orientation is set to %2d.", SurfaceFlinger::primaryDisplayOrientation);
|
||||
+ if(tmpPrimaryDisplayOrientation == SurfaceFlingerProperties::primary_display_orientation_values::ORIENTATION_0) {
|
||||
+ int sfRotation = property_get_int32("ro.sf.hwrotation", -1);
|
||||
+ switch(sfRotation) {
|
||||
+ case 0:
|
||||
+ SurfaceFlinger::primaryDisplayOrientation = DisplayState::eOrientationDefault;
|
||||
+ break;
|
||||
+ case 90:
|
||||
+ SurfaceFlinger::primaryDisplayOrientation = DisplayState::eOrientation90;
|
||||
+ break;
|
||||
+ case 180:
|
||||
+ SurfaceFlinger::primaryDisplayOrientation = DisplayState::eOrientation180;
|
||||
+ break;
|
||||
+ case 270:
|
||||
+ SurfaceFlinger::primaryDisplayOrientation = DisplayState::eOrientation270;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
|
||||
mInternalDisplayPrimaries = sysprop::getDisplayNativePrimaries();
|
||||
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,32 +0,0 @@
|
||||
From 1a0eb93d4e59e5857cd0afd3560647258955c6ed Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Mon, 12 Aug 2019 23:48:37 +0200
|
||||
Subject: [PATCH 4/8] Some Samsung devices requires lying colorspace
|
||||
|
||||
Change-Id: I4153b8e7abc10c519565e4e4386c6388621477b2
|
||||
---
|
||||
opengl/libs/EGL/egl_platform_entries.cpp | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
diff --git a/opengl/libs/EGL/egl_platform_entries.cpp b/opengl/libs/EGL/egl_platform_entries.cpp
|
||||
index a3bb6debe..bfa4a9bb2 100644
|
||||
--- a/opengl/libs/EGL/egl_platform_entries.cpp
|
||||
+++ b/opengl/libs/EGL/egl_platform_entries.cpp
|
||||
@@ -459,8 +459,14 @@ EGLBoolean eglGetConfigAttribImpl(EGLDisplay dpy, EGLConfig config,
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// Translates EGL color spaces to Android data spaces.
|
||||
+static int samsungColorspace = -1;
|
||||
static android_dataspace dataSpaceFromEGLColorSpace(EGLint colorspace) {
|
||||
+ if(samsungColorspace == -1) {
|
||||
+ samsungColorspace = property_get_bool("persist.sys.phh.samsung_colorspace", false);
|
||||
+ }
|
||||
if (colorspace == EGL_GL_COLORSPACE_LINEAR_KHR) {
|
||||
+ if(samsungColorspace)
|
||||
+ return HAL_DATASPACE_UNKNOWN;
|
||||
return HAL_DATASPACE_UNKNOWN;
|
||||
} else if (colorspace == EGL_GL_COLORSPACE_SRGB_KHR) {
|
||||
return HAL_DATASPACE_V0_SRGB;
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,37 +0,0 @@
|
||||
From c1f0158346aace39261b787854e10d58e9d905fe Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Wed, 14 Aug 2019 23:37:10 +0200
|
||||
Subject: [PATCH 5/8] On Samsung, we need to send a hack-message to HAL to get
|
||||
all Sensors
|
||||
|
||||
Change-Id: Id6a1fa48340de61c418493668e9abd22c2599376
|
||||
---
|
||||
services/sensorservice/SensorDevice.cpp | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/services/sensorservice/SensorDevice.cpp b/services/sensorservice/SensorDevice.cpp
|
||||
index 717f31769..45d6c679b 100644
|
||||
--- a/services/sensorservice/SensorDevice.cpp
|
||||
+++ b/services/sensorservice/SensorDevice.cpp
|
||||
@@ -30,7 +30,9 @@
|
||||
#include <cinttypes>
|
||||
#include <thread>
|
||||
|
||||
+#include <android-base/properties.h>
|
||||
using namespace android::hardware::sensors;
|
||||
+
|
||||
using namespace android::hardware::sensors::V1_0;
|
||||
using namespace android::hardware::sensors::V1_0::implementation;
|
||||
using android::hardware::sensors::V2_0::ISensorsCallback;
|
||||
@@ -115,6 +117,8 @@ SensorDevice::SensorDevice()
|
||||
void SensorDevice::initializeSensorList() {
|
||||
float minPowerMa = 0.001; // 1 microAmp
|
||||
|
||||
+ if(::android::base::GetBoolProperty("persist.sys.phh.samsung_sensors", false))
|
||||
+ setMode(5555);
|
||||
checkReturn(mSensors->getSensorsList(
|
||||
[&](const auto &list) {
|
||||
const size_t count = list.size();
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,91 +0,0 @@
|
||||
From a92fa788759b5b4550bf4d2778077af78dbc3af7 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre Couillaud <pierre.couillaud@broadcom.com>
|
||||
Date: Tue, 27 Aug 2019 13:43:22 -0700
|
||||
Subject: [PATCH 6/8] SurfaceFlinger: retain the sideband layer information for
|
||||
composition
|
||||
|
||||
when present, the sideband layer stream information is not saved into
|
||||
the BufferQueueLayer::mSidebandStream, during "latchSidebandStream".
|
||||
|
||||
this subsequently leads to such layer being marked as non visible in the
|
||||
composition stack and to be drop from advertisement to hardware composer
|
||||
even though a sideband layer is defined in the rest of the framework.
|
||||
|
||||
this seems to be a regression introduced during android 9 to android 10
|
||||
revamp of the SurfaceFlinger for buffer latching. latching a sideband layer is actually harmless since there is no buffer associated with it that need to be waited on from the gpu side.
|
||||
|
||||
the fix proposed here allows to maintain the knowledge of the sideband
|
||||
layer and make it visible in the composition stack for hardware composer to handle adequately.
|
||||
|
||||
for illustration purposes, the relevant snippet of the layer composition
|
||||
stack are posted here from "dumpsys SurfaceFlinger", highlighting the
|
||||
issue with ">>>".
|
||||
|
||||
[before]:
|
||||
|
||||
* compositionengine::Layer 0xa959b34c (SurfaceView - <truncated>)
|
||||
frontend:
|
||||
isSecure=false geomUsesSourceCrop=false geomBufferUsesDisplayInverseTransform=false
|
||||
geomLayerTransform 0x00000000 (ROT_0 ) 0x00 (IDENTITY )
|
||||
1.0000 0.0000 0.0000
|
||||
0.0000 1.0000 0.0000
|
||||
0.0000 0.0000 1.0000
|
||||
|
||||
geomBufferSize=[0 0 -1 -1] geomContentCrop=[0 0 -1 -1] geomCrop=[0 0 -1 -1] geomBufferTransform=0
|
||||
Region geomActiveTransparentRegion (this=0xa959b3f8, count=1)
|
||||
[ 0, 0, 0, 0]
|
||||
geomLayerBounds=[0.000000 0.000000 0.000000 0.000000]
|
||||
blend=INVALID (0) alpha=1.000000
|
||||
>>> type=0 appId=0 composition type=INVALID (0)
|
||||
buffer: buffer=0x0 slot=-1
|
||||
>>> sideband stream=0x9b509900
|
||||
color=[0 0 0]
|
||||
dataspace=UNKNOWN (0) hdr metadata types=0 colorTransform=<truncated>
|
||||
|
||||
[after]:
|
||||
|
||||
* compositionengine::Layer 0xa9a5034c (SurfaceView - <truncated>)
|
||||
frontend:
|
||||
isSecure=false geomUsesSourceCrop=true geomBufferUsesDisplayInverseTransform=false
|
||||
geomLayerTransform 0x00000000 (ROT_0 ) 0x00 (IDENTITY )
|
||||
1.0000 0.0000 0.0000
|
||||
0.0000 1.0000 0.0000
|
||||
0.0000 0.0000 1.0000
|
||||
|
||||
geomBufferSize=[0 0 -1 -1] geomContentCrop=[0 0 -1 -1] geomCrop=[0 0 1920 1080] geomBufferTransform=0
|
||||
Region geomActiveTransparentRegion (this=0xa9a503f8, count=1)
|
||||
[ 0, 0, 0, 0]
|
||||
geomLayerBounds=[0.000000 0.000000 1920.000000 1080.000000]
|
||||
blend=NONE (1) alpha=1.000000
|
||||
>>> type=1 appId=10064 composition type=SIDEBAND (5)
|
||||
buffer: buffer=0x0 slot=-1
|
||||
>>> sideband stream=0x9a1472b0
|
||||
color=[0 0 0]
|
||||
dataspace=UNKNOWN (0) hdr metadata types=0 colorTransform=<truncated>
|
||||
|
||||
Bug: 140128098
|
||||
refs #SWANDROID-6178
|
||||
|
||||
Signed-off-by: Pierre Couillaud <pierre.couillaud@broadcom.com>
|
||||
---
|
||||
services/surfaceflinger/BufferQueueLayer.cpp | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/services/surfaceflinger/BufferQueueLayer.cpp b/services/surfaceflinger/BufferQueueLayer.cpp
|
||||
index eb1bf66cd..af5fe6246 100644
|
||||
--- a/services/surfaceflinger/BufferQueueLayer.cpp
|
||||
+++ b/services/surfaceflinger/BufferQueueLayer.cpp
|
||||
@@ -243,8 +243,9 @@ bool BufferQueueLayer::latchSidebandStream(bool& recomputeVisibleRegions) {
|
||||
bool sidebandStreamChanged = true;
|
||||
if (mSidebandStreamChanged.compare_exchange_strong(sidebandStreamChanged, false)) {
|
||||
// mSidebandStreamChanged was changed to false
|
||||
+ mSidebandStream = mConsumer->getSidebandStream();
|
||||
auto& layerCompositionState = getCompositionLayer()->editState().frontEnd;
|
||||
- layerCompositionState.sidebandStream = mConsumer->getSidebandStream();
|
||||
+ layerCompositionState.sidebandStream = mSidebandStream;
|
||||
if (layerCompositionState.sidebandStream != nullptr) {
|
||||
setTransactionFlags(eTransactionNeeded);
|
||||
mFlinger->setTransactionFlags(eTraversalNeeded);
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,40 +0,0 @@
|
||||
From 46a9476a66d10d574724ee37aa87c80cf90d1cdc Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Tue, 10 Mar 2020 23:26:55 +0100
|
||||
Subject: [PATCH 7/8] Use BKK's hwcomposer hacks to properly display FOD layers
|
||||
|
||||
Insecure hack: Set FOD layers to magical Z values to trigger
|
||||
OPPO/Realme/Oneplus' whole blitter behaviours:
|
||||
- reports touch event to fingerprint driver
|
||||
- removes dim on touched layer
|
||||
---
|
||||
.../CompositionEngine/src/OutputLayer.cpp | 13 ++++++++++++-
|
||||
1 file changed, 12 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp b/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp
|
||||
index 5ce72b087..23b29d6fd 100644
|
||||
--- a/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp
|
||||
+++ b/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp
|
||||
@@ -335,7 +335,18 @@ void OutputLayer::writeStateToHWC(bool includeGeometry) const {
|
||||
static_cast<int32_t>(error));
|
||||
}
|
||||
|
||||
- if (auto error = hwcLayer->setZOrder(mState.z); error != HWC2::Error::None) {
|
||||
+ int z = mState.z;
|
||||
+ if(strstr(mLayerFE->getDebugName(), "Fingerprint on display") != nullptr) {
|
||||
+ ALOGE("Found fingerprint on display!");
|
||||
+ z = 0x41000031;
|
||||
+ }
|
||||
+
|
||||
+ if(strstr(mLayerFE->getDebugName(), "Fingerprint on display.touched") != nullptr) {
|
||||
+ ALOGE("Found fingerprint on display touched!");
|
||||
+ z = 0x41000033;
|
||||
+ }
|
||||
+
|
||||
+ if (auto error = hwcLayer->setZOrder(z); error != HWC2::Error::None) {
|
||||
ALOGE("[%s] Failed to set Z %u: %s (%d)", mLayerFE->getDebugName(), mState.z,
|
||||
to_string(error).c_str(), static_cast<int32_t>(error));
|
||||
}
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,125 +0,0 @@
|
||||
From 3da16d65f8c84a4d4d29ad2ea351d9cb48fe3110 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Wed, 20 May 2020 21:16:56 +0200
|
||||
Subject: [PATCH 8/8] Samsung + Xiaomi new FOD HBM controls
|
||||
|
||||
---
|
||||
services/surfaceflinger/BufferQueueLayer.cpp | 22 ++++++++++++++++--
|
||||
.../CompositionEngine/src/OutputLayer.cpp | 23 +++++++++++++++++--
|
||||
2 files changed, 41 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/services/surfaceflinger/BufferQueueLayer.cpp b/services/surfaceflinger/BufferQueueLayer.cpp
|
||||
index af5fe6246..13c32fb72 100644
|
||||
--- a/services/surfaceflinger/BufferQueueLayer.cpp
|
||||
+++ b/services/surfaceflinger/BufferQueueLayer.cpp
|
||||
@@ -24,6 +24,7 @@
|
||||
#include <compositionengine/impl/OutputLayerCompositionState.h>
|
||||
#include <gui/BufferQueueConsumer.h>
|
||||
#include <system/window.h>
|
||||
+#include <cutils/properties.h>
|
||||
|
||||
#include "BufferQueueLayer.h"
|
||||
#include "LayerRejecter.h"
|
||||
@@ -31,6 +32,14 @@
|
||||
|
||||
#include "TimeStats/TimeStats.h"
|
||||
|
||||
+static bool sCheckedProps = false;
|
||||
+static bool sSamsungFod = false;
|
||||
+static void init_fod_props() {
|
||||
+ if(sCheckedProps) return;
|
||||
+ sCheckedProps = true;
|
||||
+ sSamsungFod = property_get_bool("persist.sys.phh.fod.samsung", false);
|
||||
+}
|
||||
+
|
||||
namespace android {
|
||||
|
||||
BufferQueueLayer::BufferQueueLayer(const LayerCreationArgs& args) : BufferLayer(args) {}
|
||||
@@ -538,7 +547,10 @@ void BufferQueueLayer::onFirstRef() {
|
||||
mConsumer =
|
||||
new BufferLayerConsumer(consumer, mFlinger->getRenderEngine(), mTextureName, this);
|
||||
}
|
||||
- mConsumer->setConsumerUsageBits(getEffectiveUsage(0));
|
||||
+ init_fod_props();
|
||||
+
|
||||
+ uint64_t usageBits = getEffectiveUsage(0);
|
||||
+ mConsumer->setConsumerUsageBits(usageBits);
|
||||
mConsumer->setContentsChangedListener(this);
|
||||
mConsumer->setName(mName);
|
||||
|
||||
@@ -564,10 +576,16 @@ status_t BufferQueueLayer::setDefaultBufferProperties(uint32_t w, uint32_t h, Pi
|
||||
}
|
||||
|
||||
mFormat = format;
|
||||
+ init_fod_props();
|
||||
|
||||
setDefaultBufferSize(w, h);
|
||||
mConsumer->setDefaultBufferFormat(format);
|
||||
- mConsumer->setConsumerUsageBits(getEffectiveUsage(0));
|
||||
+ uint64_t usageBits = getEffectiveUsage(0);
|
||||
+ if(sSamsungFod && strstr(mName.c_str(), "Fingerprint on display.touched") != nullptr) {
|
||||
+ ALOGE("Found on touched layer!");
|
||||
+ usageBits |= 0x400000000LL;
|
||||
+ }
|
||||
+ mConsumer->setConsumerUsageBits(usageBits);
|
||||
|
||||
return NO_ERROR;
|
||||
}
|
||||
diff --git a/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp b/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp
|
||||
index 23b29d6fd..0d7c9897a 100644
|
||||
--- a/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp
|
||||
+++ b/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp
|
||||
@@ -23,9 +23,14 @@
|
||||
#include <compositionengine/impl/OutputCompositionState.h>
|
||||
#include <compositionengine/impl/OutputLayer.h>
|
||||
#include <compositionengine/impl/OutputLayerCompositionState.h>
|
||||
+#include <cutils/properties.h>
|
||||
|
||||
#include "DisplayHardware/HWComposer.h"
|
||||
|
||||
+static bool sCheckedProps = false;
|
||||
+static bool sBBKFod = false;
|
||||
+static bool sXiaomiFod = false;
|
||||
+
|
||||
namespace android::compositionengine {
|
||||
|
||||
OutputLayer::~OutputLayer() = default;
|
||||
@@ -316,6 +321,12 @@ void OutputLayer::writeStateToHWC(bool includeGeometry) const {
|
||||
return;
|
||||
}
|
||||
|
||||
+ if(!sCheckedProps) {
|
||||
+ sCheckedProps = true;
|
||||
+ sBBKFod = property_get_bool("persist.sys.phh.fod.bbk", false);
|
||||
+ sXiaomiFod = property_get_bool("persist.sys.phh.fod.xiaomi", false);
|
||||
+ }
|
||||
+
|
||||
if (includeGeometry) {
|
||||
// Output dependent state
|
||||
|
||||
@@ -338,12 +349,20 @@ void OutputLayer::writeStateToHWC(bool includeGeometry) const {
|
||||
int z = mState.z;
|
||||
if(strstr(mLayerFE->getDebugName(), "Fingerprint on display") != nullptr) {
|
||||
ALOGE("Found fingerprint on display!");
|
||||
- z = 0x41000031;
|
||||
+ if(sBBKFod) {
|
||||
+ z = 0x41000031;
|
||||
+ } else if(sXiaomiFod) {
|
||||
+ z |= 0x1000000;
|
||||
+ }
|
||||
}
|
||||
|
||||
if(strstr(mLayerFE->getDebugName(), "Fingerprint on display.touched") != nullptr) {
|
||||
ALOGE("Found fingerprint on display touched!");
|
||||
- z = 0x41000033;
|
||||
+ if(sBBKFod) {
|
||||
+ z = 0x41000033;
|
||||
+ } else if(sXiaomiFod) {
|
||||
+ z |= 0x2000000;
|
||||
+ }
|
||||
}
|
||||
|
||||
if (auto error = hwcLayer->setZOrder(z); error != HWC2::Error::None) {
|
||||
--
|
||||
2.25.1
|
||||
|
@ -1,130 +0,0 @@
|
||||
From dd8b2df79e6974c043adbd1ae734e4911fd3f314 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Tue, 14 Aug 2018 16:59:12 +0200
|
||||
Subject: [PATCH 1/4] Revert "SupplicantManager: Remove
|
||||
|ensure_config_file_exists|"
|
||||
|
||||
This reverts commit f61dc8cd7dadda5741d6e4a1bb6b576ba89cc24b.
|
||||
---
|
||||
libwifi_system/supplicant_manager.cpp | 97 +++++++++++++++++++++++++++
|
||||
1 file changed, 97 insertions(+)
|
||||
|
||||
diff --git a/libwifi_system/supplicant_manager.cpp b/libwifi_system/supplicant_manager.cpp
|
||||
index 60720d40f..f22eea92e 100644
|
||||
--- a/libwifi_system/supplicant_manager.cpp
|
||||
+++ b/libwifi_system/supplicant_manager.cpp
|
||||
@@ -33,7 +33,89 @@ namespace wifi_system {
|
||||
namespace {
|
||||
|
||||
const char kSupplicantInitProperty[] = "init.svc.wpa_supplicant";
|
||||
+const char kSupplicantConfigTemplatePath[] =
|
||||
+ "/etc/wifi/wpa_supplicant.conf";
|
||||
+const char kSupplicantConfigFile[] = "/data/misc/wifi/wpa_supplicant.conf";
|
||||
+const char kP2pConfigFile[] = "/data/misc/wifi/p2p_supplicant.conf";
|
||||
const char kSupplicantServiceName[] = "wpa_supplicant";
|
||||
+constexpr mode_t kConfigFileMode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP;
|
||||
+
|
||||
+int ensure_config_file_exists(const char* config_file) {
|
||||
+ char buf[2048];
|
||||
+ int srcfd, destfd;
|
||||
+ int nread;
|
||||
+ int ret;
|
||||
+ std::string templatePath;
|
||||
+
|
||||
+ ret = access(config_file, R_OK | W_OK);
|
||||
+ if ((ret == 0) || (errno == EACCES)) {
|
||||
+ if ((ret != 0) && (chmod(config_file, kConfigFileMode) != 0)) {
|
||||
+ LOG(ERROR) << "Cannot set RW to \"" << config_file << "\": "
|
||||
+ << strerror(errno);
|
||||
+ return false;
|
||||
+ }
|
||||
+ return true;
|
||||
+ } else if (errno != ENOENT) {
|
||||
+ LOG(ERROR) << "Cannot access \"" << config_file << "\": "
|
||||
+ << strerror(errno);
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ std::string configPathSystem =
|
||||
+ std::string("/system") + std::string(kSupplicantConfigTemplatePath);
|
||||
+ std::string configPathVendor =
|
||||
+ std::string("/vendor") + std::string(kSupplicantConfigTemplatePath);
|
||||
+ srcfd = TEMP_FAILURE_RETRY(open(configPathSystem.c_str(), O_RDONLY));
|
||||
+ templatePath = configPathSystem;
|
||||
+ if (srcfd < 0) {
|
||||
+ int errnoSystem = errno;
|
||||
+ srcfd = TEMP_FAILURE_RETRY(open(configPathVendor.c_str(), O_RDONLY));
|
||||
+ templatePath = configPathVendor;
|
||||
+ if (srcfd < 0) {
|
||||
+ int errnoVendor = errno;
|
||||
+ LOG(ERROR) << "Cannot open \"" << configPathSystem << "\": "
|
||||
+ << strerror(errnoSystem);
|
||||
+ LOG(ERROR) << "Cannot open \"" << configPathVendor << "\": "
|
||||
+ << strerror(errnoVendor);
|
||||
+ return false;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ destfd = TEMP_FAILURE_RETRY(open(config_file,
|
||||
+ O_CREAT | O_RDWR,
|
||||
+ kConfigFileMode));
|
||||
+ if (destfd < 0) {
|
||||
+ close(srcfd);
|
||||
+ LOG(ERROR) << "Cannot create \"" << config_file << "\": "
|
||||
+ << strerror(errno);
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ while ((nread = TEMP_FAILURE_RETRY(read(srcfd, buf, sizeof(buf)))) != 0) {
|
||||
+ if (nread < 0) {
|
||||
+ LOG(ERROR) << "Error reading \"" << templatePath
|
||||
+ << "\": " << strerror(errno);
|
||||
+ close(srcfd);
|
||||
+ close(destfd);
|
||||
+ unlink(config_file);
|
||||
+ return false;
|
||||
+ }
|
||||
+ TEMP_FAILURE_RETRY(write(destfd, buf, nread));
|
||||
+ }
|
||||
+
|
||||
+ close(destfd);
|
||||
+ close(srcfd);
|
||||
+
|
||||
+ /* chmod is needed because open() didn't set permisions properly */
|
||||
+ if (chmod(config_file, kConfigFileMode) < 0) {
|
||||
+ LOG(ERROR) << "Error changing permissions of " << config_file
|
||||
+ << " to 0660: " << strerror(errno);
|
||||
+ unlink(config_file);
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ return true;
|
||||
+}
|
||||
|
||||
} // namespace
|
||||
|
||||
@@ -49,6 +131,21 @@ bool SupplicantManager::StartSupplicant() {
|
||||
return true;
|
||||
}
|
||||
|
||||
+ /* Before starting the daemon, make sure its config file exists */
|
||||
+ if (ensure_config_file_exists(kSupplicantConfigFile) < 0) {
|
||||
+ LOG(ERROR) << "Wi-Fi will not be enabled";
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ /*
|
||||
+ * Some devices have another configuration file for the p2p interface.
|
||||
+ * However, not all devices have this, and we'll let it slide if it
|
||||
+ * is missing. For devices that do expect this file to exist,
|
||||
+ * supplicant will refuse to start and emit a good error message.
|
||||
+ * No need to check for it here.
|
||||
+ */
|
||||
+ (void)ensure_config_file_exists(kP2pConfigFile);
|
||||
+
|
||||
/*
|
||||
* Get a reference to the status property, so we can distinguish
|
||||
* the case where it goes stopped => running => stopped (i.e.,
|
||||
--
|
||||
2.25.1
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user