Andy CrossGate Yan 79b5b414a7 Regenerate patches
frameworks/base got too messy, time to clean it up
2021-02-14 10:41:04 +00:00

412 lines
16 KiB
Diff

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