mirror of
https://github.com/yurisieucuti/treble_evolution.git
synced 2024-11-24 08:36:19 +00:00
238 lines
12 KiB
Diff
238 lines
12 KiB
Diff
From 4ea8bf16b09efa429affed2df6348899845d3688 Mon Sep 17 00:00:00 2001
|
|
From: Pierre-Hugues Husson <phh@phh.me>
|
|
Date: Mon, 29 Jan 2024 17:15:38 -0500
|
|
Subject: [PATCH 46/51] Bunch of FOD stuff -- commonize refreshing the
|
|
services, start supporting AIDL Samsung
|
|
|
|
---
|
|
.../server/biometrics/AuthService.java | 157 +++++++++++++++---
|
|
1 file changed, 138 insertions(+), 19 deletions(-)
|
|
|
|
diff --git a/services/core/java/com/android/server/biometrics/AuthService.java b/services/core/java/com/android/server/biometrics/AuthService.java
|
|
index 13e7aff02a15..9965050c88a5 100644
|
|
--- a/services/core/java/com/android/server/biometrics/AuthService.java
|
|
+++ b/services/core/java/com/android/server/biometrics/AuthService.java
|
|
@@ -45,6 +45,7 @@ import android.hardware.biometrics.IAuthService;
|
|
import android.hardware.biometrics.IBiometricEnabledOnKeyguardCallback;
|
|
import android.hardware.biometrics.IBiometricService;
|
|
import android.hardware.biometrics.IBiometricServiceReceiver;
|
|
+import android.hardware.biometrics.fingerprint.IFingerprint;
|
|
import android.hardware.biometrics.IInvalidationCallback;
|
|
import android.hardware.biometrics.ITestSession;
|
|
import android.hardware.biometrics.ITestSessionCallback;
|
|
@@ -94,6 +95,7 @@ import android.os.Build;
|
|
import vendor.samsung.hardware.biometrics.fingerprint.V3_0.ISehBiometricsFingerprint;
|
|
import vendor.goodix.hardware.biometrics.fingerprint.V2_1.IGoodixFingerprintDaemon;
|
|
import vendor.samsung.hardware.sysinput.V1_0.ISehSysInputDev;
|
|
+import vendor.samsung.hardware.biometrics.fingerprint.ISehFingerprint;
|
|
|
|
import vendor.xiaomi.hardware.fingerprintextension.V1_0.IXiaomiFingerprint;
|
|
|
|
@@ -117,6 +119,8 @@ public class AuthService extends SystemService {
|
|
|
|
private FileObserver fodFileObserver = null;
|
|
private ISehBiometricsFingerprint mSamsungFingerprint = null;
|
|
+ private ISehFingerprint mSamsungFingerprintAidl = null;
|
|
+ private vendor.samsung.hardware.sysinput.ISehSysInputDev mSamsungSysinputAidl = null;
|
|
|
|
private IXiaomiFingerprint mXiaomiFingerprint = null;
|
|
|
|
@@ -717,6 +721,101 @@ public class AuthService extends SystemService {
|
|
* └── for (s : p.sensors)
|
|
* └── BiometricService.registerAuthenticator(s)
|
|
*/
|
|
+
|
|
+ private static void samsungSysinputCommand(String arg) {
|
|
+ try {
|
|
+ android.util.Log.e("PHH-Enroll", "SysinputCommand " + arg);
|
|
+ var name = "default";
|
|
+ var fqName = vendor.samsung.hardware.sysinput.ISehSysInputDev.DESCRIPTOR + "/" + name;
|
|
+ var b = android.os.Binder.allowBlocking(android.os.ServiceManager.waitForDeclaredService(fqName));
|
|
+ var samsungSysinputAidl = vendor.samsung.hardware.sysinput.ISehSysInputDev.Stub.asInterface(b);
|
|
+ Thread.sleep(100);
|
|
+ samsungSysinputAidl.setProperty(1 /*DEFAULT_TSP*/, 18, arg);
|
|
+ android.util.Log.e("PHH-Enroll", "Done SysinputCommand");
|
|
+ } catch(Throwable t) {
|
|
+ android.util.Log.e("PHH-Enroll", "SysinputCommand", t);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ private void refreshVendorServices() {
|
|
+ try {
|
|
+ mSamsungFingerprint = ISehBiometricsFingerprint.getService();
|
|
+ android.util.Log.e("PHH", "Got samsung fingerprint HAL");
|
|
+ } catch(Exception e) {
|
|
+ if (e instanceof java.util.NoSuchElementException) {
|
|
+ android.util.Log.e("PHH", "Failed getting Samsung fingerprint HAL, doesn't exist");
|
|
+ } else {
|
|
+ android.util.Log.e("PHH", "Failed getting Samsung fingerprint HAL", e);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ try {
|
|
+ final String name = "default";
|
|
+ final String fqName = IFingerprint.DESCRIPTOR + "/" + name;
|
|
+ final IBinder fpBinder = Binder.allowBlocking(ServiceManager.waitForDeclaredService(fqName));
|
|
+ //final IFingerprint fp = IFingerprint.Stub.asInterface(fpBinder);
|
|
+ mSamsungFingerprintAidl = ISehFingerprint.Stub.asInterface(fpBinder.getExtension());
|
|
+ } catch(Exception e) {
|
|
+ android.util.Log.e("PHH", "Failed getting Samsung fingerprint AIDL HAL", e);
|
|
+ }
|
|
+
|
|
+ try {
|
|
+ final String name = "default";
|
|
+ final String fqName = vendor.samsung.hardware.sysinput.ISehSysInputDev.DESCRIPTOR + "/" + name;
|
|
+ final IBinder b = Binder.allowBlocking(ServiceManager.waitForDeclaredService(fqName));
|
|
+ mSamsungSysinputAidl = vendor.samsung.hardware.sysinput.ISehSysInputDev.Stub.asInterface(b);
|
|
+ mSamsungSysinputAidl.registerCallback(new vendor.samsung.hardware.sysinput.ISehSysInputCallback.Stub() {
|
|
+ @Override
|
|
+ public void onReportInformation(int type, String data) {
|
|
+ android.util.Log.e("PHH", "Received Sysinput Report Information " +type + ", " + data);
|
|
+ }
|
|
+ @Override
|
|
+ public void onReportRawData(int type, int count, int[] data) {
|
|
+ android.util.Log.e("PHH", "Received Sysinput Report RawData " + type + ", " + count);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public int getInterfaceVersion() {
|
|
+ return this.VERSION;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public String getInterfaceHash() {
|
|
+ return this.HASH;
|
|
+ }
|
|
+ });
|
|
+ String res;
|
|
+ res = mSamsungSysinputAidl.getProperty(1, 1);
|
|
+ Thread.sleep(100);
|
|
+ android.util.Log.e("PHH", "Got Samsung sysinput aidl feature " + res);
|
|
+ res = mSamsungSysinputAidl.getProperty(1, 2);
|
|
+ Thread.sleep(100);
|
|
+ android.util.Log.e("PHH", "Got Samsung sysinput aidl cmd_list " + res);
|
|
+ res = mSamsungSysinputAidl.getProperty(1, 3);
|
|
+ Thread.sleep(100);
|
|
+ android.util.Log.e("PHH", "Got Samsung sysinput aidl scrub_pos " + res);
|
|
+ res = mSamsungSysinputAidl.getProperty(1, 4);
|
|
+ Thread.sleep(100);
|
|
+ android.util.Log.e("PHH", "Got Samsung sysinput aidl fod_info " + res);
|
|
+ res = mSamsungSysinputAidl.getProperty(1, 5);
|
|
+ Thread.sleep(100);
|
|
+ android.util.Log.e("PHH", "Got Samsung sysinput aidl fod_pos " + res);
|
|
+ } catch(Exception e) {
|
|
+ android.util.Log.e("PHH", "Failed getting Samsung fingerprint AIDL HAL", e);
|
|
+ }
|
|
+
|
|
+ try {
|
|
+ mXiaomiFingerprint = IXiaomiFingerprint.getService();
|
|
+ android.util.Log.e("PHH", "Got xiaomi fingerprint HAL");
|
|
+ } catch(Exception e) {
|
|
+ if (e instanceof java.util.NoSuchElementException) {
|
|
+ android.util.Log.e("PHH", "Failed getting xiaomi fingerprint HAL, doesn't exist");
|
|
+ } else {
|
|
+ android.util.Log.e("PHH", "Failed getting xiaomi fingerprint HAL", e);
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+
|
|
@Override
|
|
public void onStart() {
|
|
mBiometricService = mInjector.getBiometricService();
|
|
@@ -744,20 +843,11 @@ public class AuthService extends SystemService {
|
|
// Registers HIDL and AIDL authenticators, but only HIDL configs need to be provided.
|
|
registerAuthenticators(hidlConfigs);
|
|
|
|
+ refreshVendorServices();
|
|
+
|
|
mInjector.publishBinderService(this, mImpl);
|
|
- try {
|
|
- mSamsungFingerprint = ISehBiometricsFingerprint.getService();
|
|
- android.util.Log.e("PHH", "Got samsung fingerprint HAL");
|
|
- } catch(Exception e) {
|
|
- android.util.Log.e("PHH", "Failed getting Samsung fingerprint HAL", e);
|
|
- }
|
|
- try {
|
|
- mXiaomiFingerprint = IXiaomiFingerprint.getService();
|
|
- android.util.Log.e("PHH", "Got xiaomi fingerprint HAL");
|
|
- } catch(Exception e) {
|
|
- android.util.Log.e("PHH", "Failed getting xiaomi fingerprint HAL", e);
|
|
- }
|
|
- if(samsungHasCmd("fod_enable") && mSamsungFingerprint != null) {
|
|
+ //samsungSysinputCommand("fod_icon_visible,1");
|
|
+ if(samsungHasCmd("fod_enable") && (mSamsungFingerprint != null || mSamsungFingerprintAidl != null)) {
|
|
samsungCmd("fod_enable,1,1,0");
|
|
String actualMaskBrightnessPath = "/sys/class/lcd/panel/actual_mask_brightness";
|
|
android.util.Log.e("PHH-Enroll", "Reading actual brightness file gives " + readFile(actualMaskBrightnessPath));
|
|
@@ -765,9 +855,7 @@ public class AuthService extends SystemService {
|
|
@Override
|
|
public void onEvent(int event, String path) {
|
|
String actualMask = readFile(actualMaskBrightnessPath);
|
|
- try {
|
|
- mSamsungFingerprint = ISehBiometricsFingerprint.getService();
|
|
- } catch(Exception e) {}
|
|
+ refreshVendorServices();
|
|
Slog.d("PHH-Enroll", "New actual mask brightness is " + actualMask);
|
|
try {
|
|
int eventReq = 0;
|
|
@@ -1012,22 +1100,53 @@ public class AuthService extends SystemService {
|
|
udfpsProps[2] = (int)mW;
|
|
|
|
try {
|
|
- mSamsungFingerprint = ISehBiometricsFingerprint.getService();
|
|
+ ISehBiometricsFingerprint samsungFingerprint = null;
|
|
+ samsungFingerprint = ISehBiometricsFingerprint.getService();
|
|
Slog.d("PHH-Enroll", "Samsung ask for sensor status");
|
|
- mSamsungFingerprint.sehRequest(6, 0, new java.util.ArrayList(), (int retval, java.util.ArrayList<Byte> out) -> {
|
|
+ samsungFingerprint.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");
|
|
- mSamsungFingerprint.sehRequest(32, 0, new java.util.ArrayList(), (int retval, java.util.ArrayList<Byte> out) -> {
|
|
+ samsungFingerprint.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) {
|
|
+ if (e instanceof java.util.NoSuchElementException) {
|
|
+ Slog.d("PHH-Enroll", "Failed setting samsung3.0 fingerprint recognition, doesn't exist");
|
|
+ } else {
|
|
+ Slog.d("PHH-Enroll", "Failed setting samsung3.0 fingerprint recognition", e);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ try {
|
|
+ final String name = "default";
|
|
+ final String fqName = IFingerprint.DESCRIPTOR + "/" + name;
|
|
+ final IBinder fpBinder = Binder.allowBlocking(ServiceManager.waitForDeclaredService(fqName));
|
|
+ final IFingerprint fp = IFingerprint.Stub.asInterface(fpBinder);
|
|
+ final ISehFingerprint fpaidl = ISehFingerprint.Stub.asInterface(fpBinder.getExtension());
|
|
+
|
|
+ Slog.d("PHH-Enroll", "Samsung ask for sensor status");
|
|
+ vendor.samsung.hardware.biometrics.fingerprint.SehResult sehres = fpaidl.sehRequest(0, 6, 0, new byte[0]);
|
|
+
|
|
+ Slog.d("PHH-Enroll", "Result is " + sehres.retValue);
|
|
+ for(int i=0; i<sehres.data.length; i++) {
|
|
+ Slog.d("PHH-Enroll", "\t" + i + ":" + sehres.data[i]);
|
|
+ }
|
|
+
|
|
+ Slog.d("PHH-Enroll", "Samsung ask for sensor brightness value");
|
|
+ sehres = fpaidl.sehRequest(0, 32, 0, new byte[0]);
|
|
+
|
|
+ Slog.d("PHH-Enroll", "Result is " + sehres.retValue);
|
|
+ for(int i=0; i<sehres.data.length; i++) {
|
|
+ Slog.d("PHH-Enroll", "\t" + i + ":" + sehres.data[i]);
|
|
+ }
|
|
} catch(Exception e) {
|
|
Slog.d("PHH-Enroll", "Failed setting samsung3.0 fingerprint recognition", e);
|
|
}
|
|
--
|
|
2.25.1
|
|
|