Sync up to v219

This commit is contained in:
Andy CrossGate Yan 2020-06-07 13:26:14 +00:00
parent 23b58fa57f
commit 133b4799cc
20 changed files with 1552 additions and 165 deletions

View File

@ -0,0 +1,27 @@
From b54a7a80c84c693549a77c57e2dc5a023928f524 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.17.1

View File

@ -0,0 +1,71 @@
From a280506c41623f2c2e0f96651189ec4b5e19bad1 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] 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.17.1

View File

@ -0,0 +1,45 @@
From 51622b87d04e709067335e38ae2257c21dde00a5 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 23/24] 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 93e18cfee3..9cc44f1ec9 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.17.1

View File

@ -0,0 +1,325 @@
From 637819ddb60b3a5c16e21b68e448f21e621699b1 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 24/24] 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 0271ecef34..7824b590a6 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 4bdb082ba1..d144f8991d 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 a984b10c03..5b7750b437 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.17.1

View File

@ -8,7 +8,7 @@ Subject: [PATCH 13/36] Show APN Settings for CDMA carriers
1 file changed, 1 insertion(+), 1 deletion(-) 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java
index 19f8203f750..4e0fcbb7358 100755 index 19f8203f750..4e0fcbb7358 100644
--- a/telephony/java/android/telephony/CarrierConfigManager.java --- a/telephony/java/android/telephony/CarrierConfigManager.java
+++ b/telephony/java/android/telephony/CarrierConfigManager.java +++ b/telephony/java/android/telephony/CarrierConfigManager.java
@@ -3073,7 +3073,7 @@ public class CarrierConfigManager { @@ -3073,7 +3073,7 @@ public class CarrierConfigManager {

View File

@ -1,4 +1,4 @@
From 8049bd5138e52042ed47b8b0700753cb77b57641 Mon Sep 17 00:00:00 2001 From 66452f7948361f504cb2d41249c04d53f56ca7d6 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me> From: Pierre-Hugues Husson <phh@phh.me>
Date: Sun, 24 Mar 2019 23:05:14 +0100 Date: Sun, 24 Mar 2019 23:05:14 +0100
Subject: [PATCH] Support new samsung light hal Subject: [PATCH] Support new samsung light hal
@ -22,7 +22,7 @@ index fdcefd42316..d8645012e24 100644
static_libs: [ static_libs: [
diff --git a/services/core/jni/com_android_server_lights_LightsService.cpp b/services/core/jni/com_android_server_lights_LightsService.cpp diff --git a/services/core/jni/com_android_server_lights_LightsService.cpp b/services/core/jni/com_android_server_lights_LightsService.cpp
index 35d8219651d..20de7985d1d 100644 index 35d8219651d..2f77726d5bd 100644
--- a/services/core/jni/com_android_server_lights_LightsService.cpp --- a/services/core/jni/com_android_server_lights_LightsService.cpp
+++ b/services/core/jni/com_android_server_lights_LightsService.cpp +++ b/services/core/jni/com_android_server_lights_LightsService.cpp
@@ -23,6 +23,8 @@ @@ -23,6 +23,8 @@
@ -43,11 +43,10 @@ index 35d8219651d..20de7985d1d 100644
static bool sLightSupported = true; static bool sLightSupported = true;
static bool validate(jint light, jint flash, jint brightness) { static bool validate(jint light, jint flash, jint brightness) {
@@ -151,6 +155,21 @@ static void setLight_native( @@ -152,6 +156,21 @@ static void setLight_native(
colorAlpha = (colorAlpha * brightnessLevel) / 0xFF;
colorARGB = (colorAlpha << 24) + (colorARGB & 0x00FFFFFF); colorARGB = (colorAlpha << 24) + (colorARGB & 0x00FFFFFF);
} }
+
+ sp<ISecLight> secHal = ISecLight::getService(); + sp<ISecLight> secHal = ISecLight::getService();
+ +
+ if(secHal != nullptr) { + if(secHal != nullptr) {
@ -62,9 +61,10 @@ index 35d8219651d..20de7985d1d 100644
+ if (t.duration() > 50ms) ALOGD("Excessive delay setting light"); + if (t.duration() > 50ms) ALOGD("Excessive delay setting light");
+ } + }
+ } + }
+
Type type = static_cast<Type>(light); Type type = static_cast<Type>(light);
LightState state = constructState( LightState state = constructState(
colorARGB, flashMode, onMS, offMS, brightnessMode);
-- --
2.17.1 2.17.1

View File

@ -1,4 +1,4 @@
From b15c825ccb48260a85695db41aff138787d1817f Mon Sep 17 00:00:00 2001 From ad26b4fe426344371cd018050025d7ca4d47bec2 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me> From: Pierre-Hugues Husson <phh@phh.me>
Date: Sun, 24 Mar 2019 22:48:39 +0100 Date: Sun, 24 Mar 2019 22:48:39 +0100
Subject: [PATCH] wip Subject: [PATCH] wip
@ -11,15 +11,15 @@ Change-Id: I50fa9a7a670cef5b93fc4a3a027f1587b1214831
.../fingerprint/FingerprintService.java | 26 ++- .../fingerprint/FingerprintService.java | 26 ++-
.../testharness/TestHarnessModeService.java | 7 +- .../testharness/TestHarnessModeService.java | 7 +-
.../com/android/server/wm/ActivityRecord.java | 6 - .../com/android/server/wm/ActivityRecord.java | 6 -
...om_android_server_lights_LightsService.cpp | 15 +- ...om_android_server_lights_LightsService.cpp | 13 +-
7 files changed, 255 insertions(+), 12 deletions(-) 7 files changed, 254 insertions(+), 11 deletions(-)
create mode 100644 services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java create mode 100644 services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
diff --git a/Android.bp b/Android.bp diff --git a/Android.bp b/Android.bp
index 16abdbf79de..d01dc639c8f 100644 index bdd88034655..5e79350ac5c 100644
--- a/Android.bp --- a/Android.bp
+++ b/Android.bp +++ b/Android.bp
@@ -777,6 +777,8 @@ java_defaults { @@ -779,6 +779,8 @@ java_defaults {
"android.hardware.vibrator-V1.2-java", "android.hardware.vibrator-V1.2-java",
"android.hardware.vibrator-V1.3-java", "android.hardware.vibrator-V1.3-java",
"android.hardware.wifi-V1.0-java-constants", "android.hardware.wifi-V1.0-java-constants",
@ -257,7 +257,7 @@ index 00000000000..8829bcb7e48
+ } + }
+} +}
diff --git a/services/core/java/com/android/server/biometrics/fingerprint/FingerprintService.java b/services/core/java/com/android/server/biometrics/fingerprint/FingerprintService.java diff --git a/services/core/java/com/android/server/biometrics/fingerprint/FingerprintService.java b/services/core/java/com/android/server/biometrics/fingerprint/FingerprintService.java
index 19593e7e047..c7de87126e8 100644 index f6e0742aa67..92c0cc5dc85 100644
--- a/services/core/java/com/android/server/biometrics/fingerprint/FingerprintService.java --- a/services/core/java/com/android/server/biometrics/fingerprint/FingerprintService.java
+++ b/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 { @@ -120,8 +120,10 @@ public class FingerprintService extends BiometricServiceBase {
@ -298,7 +298,7 @@ index 19593e7e047..c7de87126e8 100644
} }
/** /**
@@ -180,7 +202,6 @@ public class FingerprintService extends BiometricServiceBase { @@ -181,7 +203,6 @@ public class FingerprintService extends BiometricServiceBase {
/** /**
* The following methods contain common code which is shared in biometrics/common. * The following methods contain common code which is shared in biometrics/common.
*/ */
@ -306,7 +306,7 @@ index 19593e7e047..c7de87126e8 100644
@Override // Binder call @Override // Binder call
public long preEnroll(IBinder token) { public long preEnroll(IBinder token) {
checkPermission(MANAGE_FINGERPRINT); checkPermission(MANAGE_FINGERPRINT);
@@ -725,6 +746,7 @@ public class FingerprintService extends BiometricServiceBase { @@ -727,6 +748,7 @@ public class FingerprintService extends BiometricServiceBase {
mAlarmManager = context.getSystemService(AlarmManager.class); mAlarmManager = context.getSystemService(AlarmManager.class);
context.registerReceiver(mLockoutReceiver, new IntentFilter(getLockoutResetIntent()), context.registerReceiver(mLockoutReceiver, new IntentFilter(getLockoutResetIntent()),
getLockoutBroadcastPermission(), null /* handler */); getLockoutBroadcastPermission(), null /* handler */);
@ -314,7 +314,7 @@ index 19593e7e047..c7de87126e8 100644
} }
@Override @Override
@@ -952,6 +974,7 @@ public class FingerprintService extends BiometricServiceBase { @@ -954,6 +976,7 @@ public class FingerprintService extends BiometricServiceBase {
Slog.w(TAG, "startPreEnroll: no fingerprint HAL!"); Slog.w(TAG, "startPreEnroll: no fingerprint HAL!");
return 0; return 0;
} }
@ -322,7 +322,7 @@ index 19593e7e047..c7de87126e8 100644
try { try {
return daemon.preEnroll(); return daemon.preEnroll();
} catch (RemoteException e) { } catch (RemoteException e) {
@@ -966,6 +989,7 @@ public class FingerprintService extends BiometricServiceBase { @@ -968,6 +991,7 @@ public class FingerprintService extends BiometricServiceBase {
Slog.w(TAG, "startPostEnroll: no fingerprint HAL!"); Slog.w(TAG, "startPostEnroll: no fingerprint HAL!");
return 0; return 0;
} }
@ -349,10 +349,10 @@ index fcf87ee2a4b..0aa948417c1 100644
// There's no data to apply, so leave it as-is. // There's no data to apply, so leave it as-is.
return null; return null;
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index 479babc4c7d..1f972dd4918 100644 index d9c85c0ca50..0740f70bbf4 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java --- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -2833,12 +2833,6 @@ final class ActivityRecord extends ConfigurationContainer { @@ -2835,12 +2835,6 @@ final class ActivityRecord extends ConfigurationContainer {
// TODO(b/36505427): Consider moving this method and similar ones to ConfigurationContainer. // TODO(b/36505427): Consider moving this method and similar ones to ConfigurationContainer.
private void updateOverrideConfiguration() { private void updateOverrideConfiguration() {
final Configuration overrideConfig = mTmpConfig; final Configuration overrideConfig = mTmpConfig;
@ -366,7 +366,7 @@ index 479babc4c7d..1f972dd4918 100644
if (mCompatDisplayInsets != null) { if (mCompatDisplayInsets != null) {
// The override configuration is set only once in size compatibility mode. // 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 diff --git a/services/core/jni/com_android_server_lights_LightsService.cpp b/services/core/jni/com_android_server_lights_LightsService.cpp
index 20de7985d1d..2b50d04233e 100644 index 2f77726d5bd..2b50d04233e 100644
--- a/services/core/jni/com_android_server_lights_LightsService.cpp --- a/services/core/jni/com_android_server_lights_LightsService.cpp
+++ b/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; @@ -46,6 +46,9 @@ using ISecLight = ::vendor::samsung::hardware::light::V2_0::ISecLight;
@ -379,19 +379,17 @@ index 20de7985d1d..2b50d04233e 100644
static bool validate(jint light, jint flash, jint brightness) { static bool validate(jint light, jint flash, jint brightness) {
bool valid = true; bool valid = true;
@@ -155,20 +158,24 @@ static void setLight_native( @@ -156,19 +159,23 @@ static void setLight_native(
colorAlpha = (colorAlpha * brightnessLevel) / 0xFF;
colorARGB = (colorAlpha << 24) + (colorARGB & 0x00FFFFFF); colorARGB = (colorAlpha << 24) + (colorARGB & 0x00FFFFFF);
} }
-
- sp<ISecLight> secHal = ISecLight::getService();
- if(secHal != nullptr) { - sp<ISecLight> secHal = ISecLight::getService();
+ if(!sSecTried) { + if(!sSecTried) {
+ sSecHal = ISecLight::getService(); + sSecHal = ISecLight::getService();
+ sSecTried = true; + sSecTried = true;
+ } + }
+
- if(secHal != nullptr) {
+ if(sSecHal != nullptr) { + if(sSecHal != nullptr) {
SecType type = static_cast<SecType>(light); SecType type = static_cast<SecType>(light);
LightState state = constructState( LightState state = constructState(

View File

@ -1,21 +1,23 @@
From b5ed01a87952a16e928390aec2aaa531c2bd623d Mon Sep 17 00:00:00 2001 From 1026ff090a11633027dd62fcff8fe91e2cdea732 Mon Sep 17 00:00:00 2001
From: Peter Cai <peter@typeblog.net> From: Peter Cai <peter@typeblog.net>
Date: Thu, 2 Jan 2020 10:16:49 +0800 Date: Thu, 2 Jan 2020 10:16:49 +0800
Subject: [PATCH 46/46] fix crashing on devices with higher aspect ratio down Subject: [PATCH] fix crashing on devices with higher aspect ratio down to
to sw288dp sw288dp
* This is what the Qin 2 (Pro) is. * This is what the Qin 2 (Pro) is.
Change-Id: I2289a23b706b512a99a541221576960407c098e7
--- ---
.../SystemUI/res/values-sw288dp/dimens.xml | 34 +++++++++++++++++++ .../SystemUI/res/values-sw288dp/dimens.xml | 33 +++++++++++++++++++
1 file changed, 34 insertions(+) 1 file changed, 33 insertions(+)
create mode 100644 packages/SystemUI/res/values-sw288dp/dimens.xml 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 diff --git a/packages/SystemUI/res/values-sw288dp/dimens.xml b/packages/SystemUI/res/values-sw288dp/dimens.xml
new file mode 100644 new file mode 100644
index 00000000000..2774554ec64 index 00000000000..40adc2e6879
--- /dev/null --- /dev/null
+++ b/packages/SystemUI/res/values-sw288dp/dimens.xml +++ b/packages/SystemUI/res/values-sw288dp/dimens.xml
@@ -0,0 +1,34 @@ @@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="utf-8"?>
+<!-- +<!--
+ ~ Copyright (C) 2019 The Android Open Source Project + ~ Copyright (C) 2019 The Android Open Source Project
@ -49,7 +51,6 @@ index 00000000000..2774554ec64
+ <dimen name="global_actions_grid_item_icon_bottom_margin">4dp</dimen> + <dimen name="global_actions_grid_item_icon_bottom_margin">4dp</dimen>
+ +
+</resources> +</resources>
+
-- --
2.17.1 2.17.1

View File

@ -1,63 +0,0 @@
From 1f986fdcdbf2788cc1df26c032a08bce89b1427d Mon Sep 17 00:00:00 2001
From: "Chris.CC Lee" <chriscclee@google.com>
Date: Mon, 3 Feb 2020 17:33:19 +0800
Subject: [PATCH 47/49] Fix AoD front scrim being opaque at DOZE_PULSING.
When doze state changed from DOZE to DOZE_PULSING on devices not
supporting doze_brightness_sensor_type sensor, there would be no
sensor events to update the AoD front scrim. And due to the scrim was
set to opaque at DOZE state, most views on the statusbar will be
invisible. This patch change the scrim to transparent again at leaving
DOZE state.
Bug: 148129743
Test: atest DozeScreenBrightnessTest
Change-Id: I2c079d081b04f00a929ae5c4475639685f9f7e69
---
.../systemui/doze/DozeScreenBrightness.java | 4 ++++
.../systemui/doze/DozeScreenBrightnessTest.java | 14 ++++++++++++++
2 files changed, 18 insertions(+)
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java b/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java
index bd6882c01bb..c27e633f2a9 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java
@@ -161,6 +161,10 @@ public class DozeScreenBrightness extends BroadcastReceiver implements DozeMachi
// again, it will only show after the brightness sensor has stabilized,
// avoiding a potential flicker.
scrimOpacity = 255;
+ } else if (!mScreenOff && mLightSensor == null) {
+ // No light sensor but previous state turned the screen black. Make the scrim
+ // transparent and below views visible.
+ scrimOpacity = 0;
} else if (brightnessReady) {
// Only unblank scrim once brightness is ready.
scrimOpacity = computeScrimOpacity(sensorValue);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java
index 392c677b982..1347175c7d3 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java
@@ -170,6 +170,20 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
assertEquals(DEFAULT_BRIGHTNESS, mServiceFake.screenBrightness);
}
+ @Test
+ public void testPulsing_withoutLightSensor_setsAoDDimmingScrimTransparent() throws Exception {
+ mScreen = new DozeScreenBrightness(mContext, mServiceFake, mSensorManager,
+ null /* sensor */, mHostFake, null /* handler */,
+ DEFAULT_BRIGHTNESS, SENSOR_TO_BRIGHTNESS, SENSOR_TO_OPACITY,
+ true /* debuggable */);
+ mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
+ mScreen.transitionTo(INITIALIZED, DOZE);
+
+ mScreen.transitionTo(DOZE, DOZE_REQUEST_PULSE);
+
+ assertEquals(0f, mHostFake.aodDimmingScrimOpacity, 0.001f /* delta */);
+ }
+
@Test
public void testNullSensor() throws Exception {
mScreen = new DozeScreenBrightness(mContext, mServiceFake, mSensorManager,
--
2.17.1

View File

@ -0,0 +1,40 @@
From 5d0e8590f692a4cc868310dbc61d502f204cfbaa 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 59/65] 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 777a00daf31..9d7975d63b4 100644
--- a/services/core/java/com/android/server/lights/LightsService.java
+++ b/services/core/java/com/android/server/lights/LightsService.java
@@ -30,10 +30,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 {
@@ -90,6 +94,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.17.1

View File

@ -0,0 +1,48 @@
From 7e7cdc92f9f23fa9ea1fb1b6d7cea37f0301f899 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 60/65] 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.17.1

View File

@ -0,0 +1,531 @@
From 5624ce8b0cadf9cc588aadc8f216073a1eb8385f 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 61/65] 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 dd0575c0b02..910e2fcf64c 100644
--- a/services/core/Android.bp
+++ b/services/core/Android.bp
@@ -55,7 +55,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.17.1

View File

@ -0,0 +1,33 @@
From 80751a02c586e3280e41dc457b6ba3aa3404f5a4 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 62/65] 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.17.1

View File

@ -0,0 +1,59 @@
From a788201da61532891201d3dddcbdfb9a97d0a089 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 63/65] 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.17.1

View File

@ -0,0 +1,84 @@
From f2c5806a14c89a6f029e7d27117749df4210bf10 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 64/65] 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.17.1

View File

@ -0,0 +1,125 @@
From 8502ea88bf1ac84ceaa6495c6831a55c733212ad 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.17.1

View File

@ -0,0 +1,58 @@
From c43fc9cdeb2a41da244279ec86473e9504f4311b Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Mon, 25 May 2020 21:25:12 +0200
Subject: [PATCH 3/3] Add persist.sys.phh.disable_a2dp_offload property to
force a2dp offload
---
btif/src/btif_av.cc | 7 ++++++-
stack/a2dp/a2dp_codec_config.cc | 7 ++++++-
2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/btif/src/btif_av.cc b/btif/src/btif_av.cc
index 24e32ec10..fa537ba4e 100644
--- a/btif/src/btif_av.cc
+++ b/btif/src/btif_av.cc
@@ -959,9 +959,14 @@ bt_status_t BtifAvSource::Init(
osi_property_get("ro.bluetooth.a2dp_offload.supported", value_sup, "false");
osi_property_get("persist.bluetooth.a2dp_offload.disabled", value_dis,
"false");
+ char value_phh[PROPERTY_VALUE_MAX] = {'\0'};
+ osi_property_get("persist.sys.phh.disable_a2dp_offload", value_phh, "false");
a2dp_offload_enabled_ =
(strcmp(value_sup, "true") == 0) && (strcmp(value_dis, "false") == 0);
- BTIF_TRACE_DEBUG("a2dp_offload.enable = %d", a2dp_offload_enabled_);
+ if(strcmp(value_phh, "true") == 0)
+ a2dp_offload_enabled_ = false;
+
+ LOG_ERROR(LOG_TAG, "a2dp_offload.enable = %s", a2dp_offload_enabled_ ? "on" : "off");
callbacks_ = callbacks;
bta_av_co_init(codec_priorities);
diff --git a/stack/a2dp/a2dp_codec_config.cc b/stack/a2dp/a2dp_codec_config.cc
index edf7e0c46..143eed7a3 100644
--- a/stack/a2dp/a2dp_codec_config.cc
+++ b/stack/a2dp/a2dp_codec_config.cc
@@ -560,13 +560,18 @@ bool A2dpCodecs::init() {
char* tok = NULL;
char* tmp_token = NULL;
bool offload_codec_support[BTAV_A2DP_CODEC_INDEX_MAX] = {false};
- char value_sup[PROPERTY_VALUE_MAX], value_dis[PROPERTY_VALUE_MAX];
+ char value_sup[PROPERTY_VALUE_MAX], value_dis[PROPERTY_VALUE_MAX], value_phh[PROPERTY_VALUE_MAX];
osi_property_get("ro.bluetooth.a2dp_offload.supported", value_sup, "false");
osi_property_get("persist.bluetooth.a2dp_offload.disabled", value_dis,
"false");
+ osi_property_get("persist.sys.phh.disable_a2dp_offload", value_phh, "false");
a2dp_offload_status =
(strcmp(value_sup, "true") == 0) && (strcmp(value_dis, "false") == 0);
+ if(strcmp(value_phh, "true") == 0)
+ a2dp_offload_status = false;
+
+ LOG_ERROR(LOG_TAG, "Got a2dp offload status %s", a2dp_offload_status ? "on" : "off");
if (a2dp_offload_status) {
char value_cap[PROPERTY_VALUE_MAX];
--
2.17.1

View File

@ -1,34 +0,0 @@
From 51a0a2ece994b4a5feddf1f080c51ff57028b2c9 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Fri, 6 Sep 2019 15:09:45 +0200
Subject: [PATCH 06/12] HACK XXX Never check adb key
Change-Id: Ic933023724c80f4a30725bb23de03fba9c5fbd12
---
adb/daemon/main.cpp | 3 +++
1 file changed, 3 insertions(+)
diff --git a/adb/daemon/main.cpp b/adb/daemon/main.cpp
index e5a49171b..90fefc901 100644
--- a/adb/daemon/main.cpp
+++ b/adb/daemon/main.cpp
@@ -205,6 +205,7 @@ int adbd_main(int server_port) {
// descriptor will always be open.
adbd_cloexec_auth_socket();
+#if 0
#if defined(ALLOW_ADBD_NO_AUTH)
// If ro.adb.secure is unset, default to no authentication required.
auth_required = android::base::GetBoolProperty("ro.adb.secure", false);
@@ -213,6 +214,8 @@ int adbd_main(int server_port) {
auth_required = android::base::GetBoolProperty("ro.adb.secure", false);
}
#endif
+#endif
+ auth_required = false;
adbd_auth_init();
--
2.17.1

View File

@ -1,34 +0,0 @@
From 1d7724b6731f8f430b993fd92f34924597c7fed6 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Thu, 5 Dec 2019 16:01:26 +0100
Subject: [PATCH 16/16] Revert "HACK XXX Never check adb key"
This reverts commit 52e211961f89e2b83bad61a4c017697214e80f01.
---
adb/daemon/main.cpp | 3 ---
1 file changed, 3 deletions(-)
diff --git a/adb/daemon/main.cpp b/adb/daemon/main.cpp
index 90fefc901..e5a49171b 100644
--- a/adb/daemon/main.cpp
+++ b/adb/daemon/main.cpp
@@ -205,7 +205,6 @@ int adbd_main(int server_port) {
// descriptor will always be open.
adbd_cloexec_auth_socket();
-#if 0
#if defined(ALLOW_ADBD_NO_AUTH)
// If ro.adb.secure is unset, default to no authentication required.
auth_required = android::base::GetBoolProperty("ro.adb.secure", false);
@@ -214,8 +213,6 @@ int adbd_main(int server_port) {
auth_required = android::base::GetBoolProperty("ro.adb.secure", false);
}
#endif
-#endif
- auth_required = false;
adbd_auth_init();
--
2.17.1

View File

@ -0,0 +1,73 @@
From 190246ee8a6cd75b3f414eae7489e83843b9e6bf Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Sun, 24 May 2020 16:55:00 +0200
Subject: [PATCH 3/3] Revert "Don't set esdfs or exfat genfscon. Assume OEM
does"
This reverts commit dd26ec1f5e1deb0626e12efc2ee966509da0f4fc.
---
prebuilts/api/28.0/private/genfs_contexts | 4 ++--
prebuilts/api/29.0/private/genfs_contexts | 4 ++--
private/genfs_contexts | 4 ++--
3 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/prebuilts/api/28.0/private/genfs_contexts b/prebuilts/api/28.0/private/genfs_contexts
index 56cd92da9..7e2ea5092 100644
--- a/prebuilts/api/28.0/private/genfs_contexts
+++ b/prebuilts/api/28.0/private/genfs_contexts
@@ -231,12 +231,12 @@ genfscon debugfs /tracing/events/fence/
genfscon inotifyfs / u:object_r:inotify:s0
genfscon vfat / u:object_r:vfat:s0
-#genfscon exfat / u:object_r:exfat:s0
+genfscon exfat / u:object_r:exfat:s0
genfscon debugfs / u:object_r:debugfs:s0
genfscon fuse / u:object_r:fuse:s0
genfscon configfs / u:object_r:configfs:s0
genfscon sdcardfs / u:object_r:sdcardfs:s0
-#genfscon esdfs / u:object_r:sdcardfs:s0
+genfscon esdfs / u:object_r:sdcardfs:s0
genfscon pstore / u:object_r:pstorefs:s0
genfscon functionfs / u:object_r:functionfs:s0
genfscon usbfs / u:object_r:usbfs:s0
diff --git a/prebuilts/api/29.0/private/genfs_contexts b/prebuilts/api/29.0/private/genfs_contexts
index 71f982413..d2819b194 100644
--- a/prebuilts/api/29.0/private/genfs_contexts
+++ b/prebuilts/api/29.0/private/genfs_contexts
@@ -287,12 +287,12 @@ genfscon debugfs /kcov u:object_r:debugfs_kcov:s0
genfscon inotifyfs / u:object_r:inotify:s0
genfscon vfat / u:object_r:vfat:s0
-#genfscon exfat / u:object_r:exfat:s0
+genfscon exfat / u:object_r:exfat:s0
genfscon debugfs / u:object_r:debugfs:s0
genfscon fuse / u:object_r:fuse:s0
genfscon configfs / u:object_r:configfs:s0
genfscon sdcardfs / u:object_r:sdcardfs:s0
-#genfscon esdfs / u:object_r:sdcardfs:s0
+genfscon esdfs / u:object_r:sdcardfs:s0
genfscon pstore / u:object_r:pstorefs:s0
genfscon functionfs / u:object_r:functionfs:s0
genfscon usbfs / u:object_r:usbfs:s0
diff --git a/private/genfs_contexts b/private/genfs_contexts
index 71f982413..d2819b194 100644
--- a/private/genfs_contexts
+++ b/private/genfs_contexts
@@ -287,12 +287,12 @@ genfscon debugfs /kcov u:object_r:debugfs_kcov:s0
genfscon inotifyfs / u:object_r:inotify:s0
genfscon vfat / u:object_r:vfat:s0
-#genfscon exfat / u:object_r:exfat:s0
+genfscon exfat / u:object_r:exfat:s0
genfscon debugfs / u:object_r:debugfs:s0
genfscon fuse / u:object_r:fuse:s0
genfscon configfs / u:object_r:configfs:s0
genfscon sdcardfs / u:object_r:sdcardfs:s0
-#genfscon esdfs / u:object_r:sdcardfs:s0
+genfscon esdfs / u:object_r:sdcardfs:s0
genfscon pstore / u:object_r:pstorefs:s0
genfscon functionfs / u:object_r:functionfs:s0
genfscon usbfs / u:object_r:usbfs:s0
--
2.17.1