Sync up to v219
This commit is contained in:
@@ -8,7 +8,7 @@ Subject: [PATCH 13/36] Show APN Settings for CDMA carriers
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java
|
||||
index 19f8203f750..4e0fcbb7358 100755
|
||||
index 19f8203f750..4e0fcbb7358 100644
|
||||
--- a/telephony/java/android/telephony/CarrierConfigManager.java
|
||||
+++ b/telephony/java/android/telephony/CarrierConfigManager.java
|
||||
@@ -3073,7 +3073,7 @@ public class CarrierConfigManager {
|
||||
|
||||
@@ -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>
|
||||
Date: Sun, 24 Mar 2019 23:05:14 +0100
|
||||
Subject: [PATCH] Support new samsung light hal
|
||||
@@ -22,7 +22,7 @@ index fdcefd42316..d8645012e24 100644
|
||||
|
||||
static_libs: [
|
||||
diff --git a/services/core/jni/com_android_server_lights_LightsService.cpp b/services/core/jni/com_android_server_lights_LightsService.cpp
|
||||
index 35d8219651d..20de7985d1d 100644
|
||||
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 @@
|
||||
@@ -43,11 +43,10 @@ index 35d8219651d..20de7985d1d 100644
|
||||
static bool sLightSupported = true;
|
||||
|
||||
static bool validate(jint light, jint flash, jint brightness) {
|
||||
@@ -151,6 +155,21 @@ static void setLight_native(
|
||||
colorAlpha = (colorAlpha * brightnessLevel) / 0xFF;
|
||||
@@ -152,6 +156,21 @@ static void setLight_native(
|
||||
colorARGB = (colorAlpha << 24) + (colorARGB & 0x00FFFFFF);
|
||||
}
|
||||
+
|
||||
|
||||
+ sp<ISecLight> secHal = ISecLight::getService();
|
||||
+
|
||||
+ if(secHal != nullptr) {
|
||||
@@ -62,9 +61,10 @@ index 35d8219651d..20de7985d1d 100644
|
||||
+ if (t.duration() > 50ms) ALOGD("Excessive delay setting light");
|
||||
+ }
|
||||
+ }
|
||||
|
||||
+
|
||||
Type type = static_cast<Type>(light);
|
||||
LightState state = constructState(
|
||||
colorARGB, flashMode, onMS, offMS, brightnessMode);
|
||||
--
|
||||
2.17.1
|
||||
|
||||
|
||||
@@ -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>
|
||||
Date: Sun, 24 Mar 2019 22:48:39 +0100
|
||||
Subject: [PATCH] wip
|
||||
@@ -11,15 +11,15 @@ Change-Id: I50fa9a7a670cef5b93fc4a3a027f1587b1214831
|
||||
.../fingerprint/FingerprintService.java | 26 ++-
|
||||
.../testharness/TestHarnessModeService.java | 7 +-
|
||||
.../com/android/server/wm/ActivityRecord.java | 6 -
|
||||
...om_android_server_lights_LightsService.cpp | 15 +-
|
||||
7 files changed, 255 insertions(+), 12 deletions(-)
|
||||
...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 16abdbf79de..d01dc639c8f 100644
|
||||
index bdd88034655..5e79350ac5c 100644
|
||||
--- a/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.3-java",
|
||||
"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
|
||||
index 19593e7e047..c7de87126e8 100644
|
||||
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 {
|
||||
@@ -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.
|
||||
*/
|
||||
@@ -306,7 +306,7 @@ index 19593e7e047..c7de87126e8 100644
|
||||
@Override // Binder call
|
||||
public long preEnroll(IBinder token) {
|
||||
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);
|
||||
context.registerReceiver(mLockoutReceiver, new IntentFilter(getLockoutResetIntent()),
|
||||
getLockoutBroadcastPermission(), null /* handler */);
|
||||
@@ -314,7 +314,7 @@ index 19593e7e047..c7de87126e8 100644
|
||||
}
|
||||
|
||||
@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!");
|
||||
return 0;
|
||||
}
|
||||
@@ -322,7 +322,7 @@ index 19593e7e047..c7de87126e8 100644
|
||||
try {
|
||||
return daemon.preEnroll();
|
||||
} 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!");
|
||||
return 0;
|
||||
}
|
||||
@@ -349,10 +349,10 @@ index fcf87ee2a4b..0aa948417c1 100644
|
||||
// There's no data to apply, so leave it as-is.
|
||||
return null;
|
||||
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
|
||||
index 479babc4c7d..1f972dd4918 100644
|
||||
index d9c85c0ca50..0740f70bbf4 100644
|
||||
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
|
||||
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
|
||||
@@ -2833,12 +2833,6 @@ final class ActivityRecord extends ConfigurationContainer {
|
||||
@@ -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;
|
||||
@@ -366,7 +366,7 @@ index 479babc4c7d..1f972dd4918 100644
|
||||
if (mCompatDisplayInsets != null) {
|
||||
// The override configuration is set only once in size compatibility mode.
|
||||
diff --git a/services/core/jni/com_android_server_lights_LightsService.cpp b/services/core/jni/com_android_server_lights_LightsService.cpp
|
||||
index 20de7985d1d..2b50d04233e 100644
|
||||
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;
|
||||
@@ -379,19 +379,17 @@ index 20de7985d1d..2b50d04233e 100644
|
||||
static bool validate(jint light, jint flash, jint brightness) {
|
||||
bool valid = true;
|
||||
|
||||
@@ -155,20 +158,24 @@ static void setLight_native(
|
||||
colorAlpha = (colorAlpha * brightnessLevel) / 0xFF;
|
||||
@@ -156,19 +159,23 @@ static void setLight_native(
|
||||
colorARGB = (colorAlpha << 24) + (colorARGB & 0x00FFFFFF);
|
||||
}
|
||||
-
|
||||
- sp<ISecLight> secHal = ISecLight::getService();
|
||||
|
||||
- if(secHal != nullptr) {
|
||||
- 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(
|
||||
|
||||
+9
-8
@@ -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>
|
||||
Date: Thu, 2 Jan 2020 10:16:49 +0800
|
||||
Subject: [PATCH 46/46] fix crashing on devices with higher aspect ratio down
|
||||
to sw288dp
|
||||
Subject: [PATCH] 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 | 34 +++++++++++++++++++
|
||||
1 file changed, 34 insertions(+)
|
||||
.../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..2774554ec64
|
||||
index 00000000000..40adc2e6879
|
||||
--- /dev/null
|
||||
+++ b/packages/SystemUI/res/values-sw288dp/dimens.xml
|
||||
@@ -0,0 +1,34 @@
|
||||
@@ -0,0 +1,33 @@
|
||||
+<?xml version="1.0" encoding="utf-8"?>
|
||||
+<!--
|
||||
+ ~ 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>
|
||||
+
|
||||
+</resources>
|
||||
+
|
||||
--
|
||||
2.17.1
|
||||
|
||||
|
||||
-63
@@ -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
|
||||
|
||||
+40
@@ -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
|
||||
|
||||
+48
@@ -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
|
||||
|
||||
+531
@@ -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
|
||||
|
||||
+33
@@ -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
|
||||
|
||||
+59
@@ -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
|
||||
|
||||
+84
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user