Sync up to v214
This commit is contained in:
parent
90d7ed3178
commit
80a47a7f4f
@ -0,0 +1,40 @@
|
|||||||
|
From b0d4bdf42853edee3ee12acf269c8891af63060c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Tue, 10 Mar 2020 23:30:17 +0100
|
||||||
|
Subject: [PATCH 54/55] Allow disabling of fingerprint cleanups, needed on some
|
||||||
|
Realme devices that cant enumerate
|
||||||
|
|
||||||
|
---
|
||||||
|
.../android/server/biometrics/BiometricServiceBase.java | 9 ++++++---
|
||||||
|
1 file changed, 6 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/services/core/java/com/android/server/biometrics/BiometricServiceBase.java b/services/core/java/com/android/server/biometrics/BiometricServiceBase.java
|
||||||
|
index 4031cd32829..e74343ce4de 100644
|
||||||
|
--- a/services/core/java/com/android/server/biometrics/BiometricServiceBase.java
|
||||||
|
+++ b/services/core/java/com/android/server/biometrics/BiometricServiceBase.java
|
||||||
|
@@ -323,6 +323,7 @@ public abstract class BiometricServiceBase extends SystemService
|
||||||
|
private List<? extends BiometricAuthenticator.Identifier> mEnrolledList;
|
||||||
|
// List of templates to remove from the HAL
|
||||||
|
private List<BiometricAuthenticator.Identifier> mUnknownHALTemplates = new ArrayList<>();
|
||||||
|
+ final boolean mNocleanup = android.os.SystemProperties.getBoolean("persist.sys.phh.fingerprint.nocleanup", false);
|
||||||
|
|
||||||
|
InternalEnumerateClient(Context context,
|
||||||
|
DaemonWrapper daemon, long halDeviceId, IBinder token,
|
||||||
|
@@ -367,9 +368,11 @@ public abstract class BiometricServiceBase extends SystemService
|
||||||
|
BiometricAuthenticator.Identifier identifier = mEnrolledList.get(i);
|
||||||
|
Slog.e(getTag(), "doTemplateCleanup(): Removing dangling template from framework: "
|
||||||
|
+ identifier.getBiometricId() + " "
|
||||||
|
- + identifier.getName());
|
||||||
|
- mUtils.removeBiometricForUser(getContext(),
|
||||||
|
- getTargetUserId(), identifier.getBiometricId());
|
||||||
|
+ + identifier.getName() + " /// " + mNocleanup);
|
||||||
|
+ if(!mNocleanup) {
|
||||||
|
+ mUtils.removeBiometricForUser(getContext(),
|
||||||
|
+ getTargetUserId(), identifier.getBiometricId());
|
||||||
|
+ }
|
||||||
|
StatsLog.write(StatsLog.BIOMETRIC_SYSTEM_HEALTH_ISSUE_DETECTED,
|
||||||
|
statsModality(),
|
||||||
|
BiometricsProtoEnums.ISSUE_UNKNOWN_TEMPLATE_ENROLLED_FRAMEWORK);
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
293
patches/platform_frameworks_base/0055-Support-Realme-FOD.patch
Normal file
293
patches/platform_frameworks_base/0055-Support-Realme-FOD.patch
Normal file
@ -0,0 +1,293 @@
|
|||||||
|
From 612be3c02c49dc81924a58bf503bb04dfaa6b639 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Tue, 10 Mar 2020 23:32:00 +0100
|
||||||
|
Subject: [PATCH 55/55] Support Realme FOD
|
||||||
|
|
||||||
|
List of changes:
|
||||||
|
- Enable dimlayer_hbm. This dims the framebuffer, while putting screen
|
||||||
|
into HBM. From user's POV, brightness didn't change, but this enables
|
||||||
|
HBM facola.
|
||||||
|
- Have two separate FOD layers
|
||||||
|
This is needed because hwcomposer is expecting two FOD layers to tell
|
||||||
|
fingerprint HAL that UI is ready.
|
||||||
|
Also, using the second magical layer makes this second layer OVER the
|
||||||
|
dim, so it is running at full brightness.
|
||||||
|
- All devices are now moved to two layers.
|
||||||
|
- Sending events to other HALs have been delayed by 200ms, to account
|
||||||
|
for slow brightness change
|
||||||
|
---
|
||||||
|
services/core/Android.bp | 1 +
|
||||||
|
.../biometrics/fingerprint/FacolaView.java | 146 ++++++++++++++++--
|
||||||
|
2 files changed, 132 insertions(+), 15 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/services/core/Android.bp b/services/core/Android.bp
|
||||||
|
index 84a5450dc05..dd0575c0b02 100644
|
||||||
|
--- a/services/core/Android.bp
|
||||||
|
+++ b/services/core/Android.bp
|
||||||
|
@@ -56,6 +56,7 @@ java_library_static {
|
||||||
|
"netd_event_listener_interface-java",
|
||||||
|
"vendor.goodix.extend.service-V2.0-java",
|
||||||
|
"vendor.samsung.hardware.biometrics.fingerprint-V2.1-java",
|
||||||
|
+ "vendor.oppo.hardware.biometrics.fingerprint-V2.1-java",
|
||||||
|
"vendor.xiaomi.hardware.fingerprintextension-V1.0-java",
|
||||||
|
],
|
||||||
|
}
|
||||||
|
diff --git a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||||
|
index 2c1ba76f529..42f21d63430 100644
|
||||||
|
--- a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||||
|
+++ b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||||
|
@@ -19,6 +19,7 @@ package com.android.server.biometrics.fingerprint;
|
||||||
|
import android.graphics.Canvas;
|
||||||
|
import android.graphics.Color;
|
||||||
|
import android.graphics.Paint;
|
||||||
|
+import android.graphics.Point;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.view.View.OnTouchListener;
|
||||||
|
import android.view.View;
|
||||||
|
@@ -39,19 +40,23 @@ import vendor.xiaomi.hardware.fingerprintextension.V1_0.IXiaomiFingerprint;
|
||||||
|
import vendor.goodix.extend.service.V2_0.IGoodixFPExtendService;
|
||||||
|
import vendor.samsung.hardware.biometrics.fingerprint.V2_1.ISecBiometricsFingerprint;
|
||||||
|
|
||||||
|
+import android.hardware.display.DisplayManager;
|
||||||
|
+
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.os.HandlerThread;
|
||||||
|
import android.os.ServiceManager;
|
||||||
|
|
||||||
|
public class FacolaView extends ImageView implements OnTouchListener {
|
||||||
|
- private final int mX, mY, mW, mH;
|
||||||
|
+ private int mX, mY, mW, mH;
|
||||||
|
private final Paint mPaintFingerprint = new Paint();
|
||||||
|
private final Paint mPaintShow = new Paint();
|
||||||
|
private IXiaomiFingerprint mXiaomiFingerprint = null;
|
||||||
|
private IGoodixFPExtendService mGoodixFingerprint = null;
|
||||||
|
private ISecBiometricsFingerprint mSamsungFingerprint = null;
|
||||||
|
+ private vendor.oppo.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprint mOppoFingerprint = null;
|
||||||
|
private boolean mInsideCircle = false;
|
||||||
|
private final WindowManager.LayoutParams mParams = new WindowManager.LayoutParams();
|
||||||
|
+ private final WindowManager.LayoutParams mParamsTouched = new WindowManager.LayoutParams();
|
||||||
|
|
||||||
|
private final static float UNTOUCHED_DIM = .1f;
|
||||||
|
private final static float TOUCHED_DIM = .9f;
|
||||||
|
@@ -60,20 +65,34 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||||
|
private final Handler mHandler;
|
||||||
|
|
||||||
|
private final WindowManager mWM;
|
||||||
|
+ private final DisplayManager mDM;
|
||||||
|
private final boolean samsungFod = samsungHasCmd("fod_enable");
|
||||||
|
- private final boolean noDim;
|
||||||
|
+ private boolean noDim;
|
||||||
|
|
||||||
|
+ private boolean mFullGreenDisplayed = false;
|
||||||
|
+ private final View mFullGreen;
|
||||||
|
private boolean mHidden = true;
|
||||||
|
FacolaView(Context context) {
|
||||||
|
super(context);
|
||||||
|
|
||||||
|
+ mFullGreen = new ImageView(context) {
|
||||||
|
+ @Override
|
||||||
|
+ protected void onDraw(Canvas canvas) {
|
||||||
|
+ super.onDraw(canvas);
|
||||||
|
+ canvas.drawCircle(mW/2, mH/2, (float) (mW/2.0f), mPaintFingerprint);
|
||||||
|
+ };
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ mWM = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);
|
||||||
|
+ mDM = (DisplayManager) getContext().getSystemService(Context.DISPLAY_SERVICE);
|
||||||
|
+
|
||||||
|
android.util.Log.d("PHH", "Samsung FOD " + samsungFod);
|
||||||
|
|
||||||
|
mHandlerThread = new HandlerThread("FacolaThread");
|
||||||
|
mHandlerThread.start();
|
||||||
|
mHandler = new Handler(mHandlerThread.getLooper());
|
||||||
|
|
||||||
|
- noDim = android.os.SystemProperties.getBoolean("persist.sys.phh.nodim", false);
|
||||||
|
+ noDim = android.os.SystemProperties.getBoolean("persist.sys.phh.nodim", true);
|
||||||
|
String[] location = android.os.SystemProperties.get("persist.vendor.sys.fp.fod.location.X_Y", "").split(",");
|
||||||
|
if(location.length != 2)
|
||||||
|
location = android.os.SystemProperties.get("persist.sys.fp.fod.location.X_Y", "").split(",");
|
||||||
|
@@ -94,13 +113,29 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||||
|
mH = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ int oppoSize = android.os.SystemProperties.getInt("persist.vendor.fingerprint.optical.iconsize", 0);
|
||||||
|
+ if(oppoSize > 0) {
|
||||||
|
+ mW = oppoSize;
|
||||||
|
+ mH = oppoSize;
|
||||||
|
+ }
|
||||||
|
+ int oppoLocation = android.os.SystemProperties.getInt("persist.vendor.fingerprint.optical.iconlocation", 0);
|
||||||
|
+ if(oppoLocation > 0) {
|
||||||
|
+ Slog.d("PHH-Enroll", "Got Oppo icon location " + oppoLocation);
|
||||||
|
+ Point p = new Point();
|
||||||
|
+ mDM.getDisplay(0).getRealSize(p);
|
||||||
|
+ Slog.d("PHH-Enroll", "\tscreen size " + p.x + ", " + p.y);
|
||||||
|
+ mX = p.x/2 - mW/2;
|
||||||
|
+ mY = p.y - mH/2 - oppoLocation;
|
||||||
|
+ Slog.d("PHH-Enroll", "\tfacola at " + mX + ", " + mY);
|
||||||
|
+ noDim = true;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
mPaintFingerprint.setAntiAlias(true);
|
||||||
|
mPaintFingerprint.setColor(Color.GREEN);
|
||||||
|
|
||||||
|
mPaintShow.setAntiAlias(true);
|
||||||
|
mPaintShow.setColor(Color.argb(0x18, 0x00, 0xff, 0x00));
|
||||||
|
setOnTouchListener(this);
|
||||||
|
- mWM = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);
|
||||||
|
Slog.d("PHH-Enroll", "Created facola...");
|
||||||
|
if(mW != -1) {
|
||||||
|
try {
|
||||||
|
@@ -118,6 +153,17 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||||
|
} catch(Exception e) {
|
||||||
|
Slog.d("PHH-Enroll", "Failed getting samsung fingerprint service", e);
|
||||||
|
}
|
||||||
|
+ try {
|
||||||
|
+ mOppoFingerprint = vendor.oppo.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprint.getService();
|
||||||
|
+ } catch(Exception e) {
|
||||||
|
+ Slog.d("PHH-Enroll", "Failed getting oppo fingerprint service", e);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if(mX != -1) {
|
||||||
|
+ android.os.SystemProperties.set("persist.sys.phh.has_fod", "true");
|
||||||
|
+ } else {
|
||||||
|
+ android.os.SystemProperties.set("persist.sys.phh.has_fod", "false");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -143,21 +189,53 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||||
|
//TODO w!=h?
|
||||||
|
if(mInsideCircle) {
|
||||||
|
try {
|
||||||
|
- int nitValue = 2;
|
||||||
|
- if(mXiaomiFingerprint != null) {
|
||||||
|
- mXiaomiFingerprint.extCmd(0xa, nitValue);
|
||||||
|
- } else if(mGoodixFingerprint != null) {
|
||||||
|
- mGoodixFingerprint.goodixExtendCommand(10, 1);
|
||||||
|
- } else if(mSamsungFingerprint != null) {
|
||||||
|
- mSamsungFingerprint.request(22 /* SEM_FINGER_STATE */, 0, 2 /* pressed */, new java.util.ArrayList<Byte>(),
|
||||||
|
- (int retval, java.util.ArrayList<Byte> out) -> {} );
|
||||||
|
+ mParamsTouched.x = mX;
|
||||||
|
+ mParamsTouched.y = mY;
|
||||||
|
+
|
||||||
|
+ mParamsTouched.height = mW;
|
||||||
|
+ mParamsTouched.width = mH;
|
||||||
|
+ mParamsTouched.format = PixelFormat.TRANSLUCENT;
|
||||||
|
+
|
||||||
|
+ mParamsTouched.type = WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY;
|
||||||
|
+ mParamsTouched.setTitle("Fingerprint on display.touched");
|
||||||
|
+ mParamsTouched.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
|
||||||
|
+ WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
|
||||||
|
+ mParamsTouched.dimAmount = UNTOUCHED_DIM;
|
||||||
|
+ if(!noDim) {
|
||||||
|
+ mParamsTouched.dimAmount = TOUCHED_DIM;
|
||||||
|
+ mParamsTouched.screenBrightness = 1.0f;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ mParamsTouched.packageName = "android";
|
||||||
|
+
|
||||||
|
+ mParamsTouched.gravity = Gravity.TOP | Gravity.LEFT;
|
||||||
|
+ if(!mFullGreenDisplayed && !mHidden) {
|
||||||
|
+ mHandler.post( () -> {
|
||||||
|
+ Slog.d("PHH-Enroll", "Adding full green because of finger pressed");
|
||||||
|
+ mFullGreenDisplayed = true;
|
||||||
|
+ mWM.addView(mFullGreen, mParamsTouched);
|
||||||
|
+ });
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ int nitValue = 2;
|
||||||
|
+ mHandler.postDelayed( () -> {
|
||||||
|
+ try {
|
||||||
|
+ if(mXiaomiFingerprint != null) {
|
||||||
|
+ mXiaomiFingerprint.extCmd(0xa, nitValue);
|
||||||
|
+ } else if(mGoodixFingerprint != null) {
|
||||||
|
+ mGoodixFingerprint.goodixExtendCommand(10, 1);
|
||||||
|
+ } else if(mSamsungFingerprint != null) {
|
||||||
|
+ mSamsungFingerprint.request(22 /* SEM_FINGER_STATE */, 0, 2 /* pressed */, new java.util.ArrayList<Byte>(),
|
||||||
|
+ (int retval, java.util.ArrayList<Byte> out) -> {} );
|
||||||
|
+ }
|
||||||
|
+ } catch(Exception e) {
|
||||||
|
+ Slog.d("PHH-Enroll", "Failed calling late fp extcmd", e);
|
||||||
|
+ }
|
||||||
|
+ }, 200);
|
||||||
|
} catch(Exception e) {
|
||||||
|
Slog.d("PHH-Enroll", "Failed calling fp extcmd", e);
|
||||||
|
}
|
||||||
|
oppoPress(true);
|
||||||
|
-
|
||||||
|
- canvas.drawCircle(mW/2, mH/2, (float) (mW/2.0f), this.mPaintFingerprint);
|
||||||
|
} else {
|
||||||
|
oppoPress(false);
|
||||||
|
try {
|
||||||
|
@@ -172,8 +250,15 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||||
|
} catch(Exception e) {
|
||||||
|
Slog.d("PHH-Enroll", "Failed calling fp extcmd", e);
|
||||||
|
}
|
||||||
|
- canvas.drawCircle(mW/2, mH/2, (float) (mW/2.0f), this.mPaintShow);
|
||||||
|
+ if(mFullGreenDisplayed) {
|
||||||
|
+ mHandler.post( () -> {
|
||||||
|
+ Slog.d("PHH-Enroll", "Removing full green because of finger released");
|
||||||
|
+ mFullGreenDisplayed = false;
|
||||||
|
+ mWM.removeView(mFullGreen);
|
||||||
|
+ });
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
+ canvas.drawCircle(mW/2, mH/2, (float) (mW/2.0f), this.mPaintShow);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@@ -211,7 +296,15 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||||
|
Slog.d("PHH-Enroll", "Show", new Exception());
|
||||||
|
if(!mHidden) return;
|
||||||
|
mHidden = false;
|
||||||
|
+ if(mOppoFingerprint != null) {
|
||||||
|
+ try {
|
||||||
|
+ mOppoFingerprint.setScreenState(vendor.oppo.hardware.biometrics.fingerprint.V2_1.FingerprintScreenState.FINGERPRINT_SCREEN_ON);
|
||||||
|
+ } catch(Exception e) {
|
||||||
|
+ Slog.d("PHH-Enroll", "Failed setting oppo screen state", e);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
mInsideCircle = false;
|
||||||
|
+ writeFile("/sys/kernel/oppo_display/dimlayer_hbm", "1");
|
||||||
|
if(samsungFod) {
|
||||||
|
samsungCmd("fod_enable,1,1");
|
||||||
|
}
|
||||||
|
@@ -254,7 +347,20 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||||
|
mInsideCircle = false;
|
||||||
|
Slog.d("PHH-Enroll", "Hide", new Exception());
|
||||||
|
if(mHidden) return;
|
||||||
|
+ if(mOppoFingerprint != null) {
|
||||||
|
+ try {
|
||||||
|
+ mOppoFingerprint.setScreenState(vendor.oppo.hardware.biometrics.fingerprint.V2_1.FingerprintScreenState.FINGERPRINT_SCREEN_ON);
|
||||||
|
+ } catch(Exception e) {
|
||||||
|
+ Slog.d("PHH-Enroll", "Failed setting oppo screen state", e);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ writeFile("/sys/kernel/oppo_display/dimlayer_hbm", "0");
|
||||||
|
mHidden = true;
|
||||||
|
+ if(mFullGreenDisplayed) {
|
||||||
|
+ Slog.d("PHH-Enroll", "Removing full green because of hide");
|
||||||
|
+ mFullGreenDisplayed = false;
|
||||||
|
+ mWM.removeView(mFullGreen);
|
||||||
|
+ }
|
||||||
|
if(samsungFod) {
|
||||||
|
samsungCmd("fod_enable,0");
|
||||||
|
}
|
||||||
|
@@ -325,4 +431,14 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ private static void writeFile(String path, String value) {
|
||||||
|
+ try {
|
||||||
|
+ PrintWriter writer = new PrintWriter(path, "UTF-8");
|
||||||
|
+ writer.println(value);
|
||||||
|
+ writer.close();
|
||||||
|
+ } catch(Exception e) {
|
||||||
|
+ android.util.Log.d("PHH", "Failed writing to " + path + ": " + value);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
@ -0,0 +1,40 @@
|
|||||||
|
From c982ade7da4d434e0a779b003e6bfcc6141232b6 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Tue, 10 Mar 2020 23:26:55 +0100
|
||||||
|
Subject: [PATCH 7/7] Use BKK's hwcomposer hacks to properly display FOD layers
|
||||||
|
|
||||||
|
Insecure hack: Set FOD layers to magical Z values to trigger
|
||||||
|
OPPO/Realme/Oneplus' whole blitter behaviours:
|
||||||
|
- reports touch event to fingerprint driver
|
||||||
|
- removes dim on touched layer
|
||||||
|
---
|
||||||
|
.../CompositionEngine/src/OutputLayer.cpp | 13 ++++++++++++-
|
||||||
|
1 file changed, 12 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp b/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp
|
||||||
|
index 5ce72b087..23b29d6fd 100644
|
||||||
|
--- a/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp
|
||||||
|
+++ b/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp
|
||||||
|
@@ -335,7 +335,18 @@ void OutputLayer::writeStateToHWC(bool includeGeometry) const {
|
||||||
|
static_cast<int32_t>(error));
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (auto error = hwcLayer->setZOrder(mState.z); error != HWC2::Error::None) {
|
||||||
|
+ int z = mState.z;
|
||||||
|
+ if(strstr(mLayerFE->getDebugName(), "Fingerprint on display") != nullptr) {
|
||||||
|
+ ALOGE("Found fingerprint on display!");
|
||||||
|
+ z = 0x41000031;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if(strstr(mLayerFE->getDebugName(), "Fingerprint on display.touched") != nullptr) {
|
||||||
|
+ ALOGE("Found fingerprint on display touched!");
|
||||||
|
+ z = 0x41000033;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (auto error = hwcLayer->setZOrder(z); error != HWC2::Error::None) {
|
||||||
|
ALOGE("[%s] Failed to set Z %u: %s (%d)", mLayerFE->getDebugName(), mState.z,
|
||||||
|
to_string(error).c_str(), static_cast<int32_t>(error));
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
@ -1,32 +0,0 @@
|
|||||||
From d184ff43ee1dd74f64fd9a0db99c29a225c22147 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Pierre-Hugues Husson <phh@phh.me>
|
|
||||||
Date: Mon, 16 Sep 2019 13:49:05 +0200
|
|
||||||
Subject: [PATCH 6/6] Check needsCheckpoint only if checkpoint is supported
|
|
||||||
|
|
||||||
This is needed because some devices (Xiaomi MiPad 4, uncertified)
|
|
||||||
declares a bootctrl HAL in manifest, but doesn't have it.
|
|
||||||
vold will then hang in needsCheckpoint waiting for bootctrl
|
|
||||||
|
|
||||||
Change-Id: I2dafcbca7e994d7a3ac36ef3698590db2ab482fa
|
|
||||||
---
|
|
||||||
cryptfs.cpp | 4 +++-
|
|
||||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/cryptfs.cpp b/cryptfs.cpp
|
|
||||||
index 07617e9..dbdc5af 100644
|
|
||||||
--- a/cryptfs.cpp
|
|
||||||
+++ b/cryptfs.cpp
|
|
||||||
@@ -1643,7 +1643,9 @@ static int cryptfs_restart_internal(int restart_main) {
|
|
||||||
SLOGE("Failed to setexeccon");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
- bool needs_cp = android::vold::cp_needsCheckpoint();
|
|
||||||
+ bool supportsCheckpoint = false;
|
|
||||||
+ android::vold::cp_supportsCheckpoint(supportsCheckpoint);
|
|
||||||
+ bool needs_cp = supportsCheckpoint && android::vold::cp_needsCheckpoint();
|
|
||||||
while ((mount_rc = fs_mgr_do_mount(&fstab_default, DATA_MNT_POINT, crypto_blkdev, 0,
|
|
||||||
needs_cp)) != 0) {
|
|
||||||
if (mount_rc == FS_MGR_DOMNT_BUSY) {
|
|
||||||
--
|
|
||||||
2.17.1
|
|
||||||
|
|
@ -0,0 +1,38 @@
|
|||||||
|
From e4a3ff285cb25559117d38d573e79a6fc34cc9f5 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Sat, 7 Mar 2020 14:49:09 +0100
|
||||||
|
Subject: [PATCH 8/9] Failing to create facedata shouldn't be fatal
|
||||||
|
|
||||||
|
Some Pie vendors create it on their own, so SELinux would deny that
|
||||||
|
Also not all devices have face unlock anyway
|
||||||
|
|
||||||
|
See https://github.com/phhusson/treble_experimentations/issues/1119
|
||||||
|
---
|
||||||
|
vold_prepare_subdirs.cpp | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/vold_prepare_subdirs.cpp b/vold_prepare_subdirs.cpp
|
||||||
|
index a620edd..e07528f 100644
|
||||||
|
--- a/vold_prepare_subdirs.cpp
|
||||||
|
+++ b/vold_prepare_subdirs.cpp
|
||||||
|
@@ -136,7 +136,7 @@ static bool prepare_subdirs(const std::string& volume_uuid, int user_id, int fla
|
||||||
|
}
|
||||||
|
auto facedata_path = vendor_de_path + "/facedata";
|
||||||
|
if (!prepare_dir(sehandle, 0700, AID_SYSTEM, AID_SYSTEM, facedata_path)) {
|
||||||
|
- return false;
|
||||||
|
+ LOG(ERROR) << "Failed preparing folder for de facedata";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (flags & android::os::IVold::STORAGE_FLAG_CE) {
|
||||||
|
@@ -156,7 +156,7 @@ static bool prepare_subdirs(const std::string& volume_uuid, int user_id, int fla
|
||||||
|
auto vendor_ce_path = android::vold::BuildDataVendorCePath(user_id);
|
||||||
|
auto facedata_path = vendor_ce_path + "/facedata";
|
||||||
|
if (!prepare_dir(sehandle, 0700, AID_SYSTEM, AID_SYSTEM, facedata_path)) {
|
||||||
|
- return false;
|
||||||
|
+ LOG(ERROR) << "Failed preparing folder for de facedata";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
@ -0,0 +1,25 @@
|
|||||||
|
From 110923dbe0191b030e1ee6f25f3109de78a8f876 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Wed, 11 Mar 2020 14:02:35 +0100
|
||||||
|
Subject: [PATCH 9/9] Every voldmanaged storage is adoptable
|
||||||
|
|
||||||
|
---
|
||||||
|
main.cpp | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/main.cpp b/main.cpp
|
||||||
|
index 27a701b..cd1d6dd 100644
|
||||||
|
--- a/main.cpp
|
||||||
|
+++ b/main.cpp
|
||||||
|
@@ -249,7 +249,7 @@ static int process_config(VolumeManager* vm, bool* has_adoptable, bool* has_quot
|
||||||
|
std::string nickname(entry.label);
|
||||||
|
int flags = 0;
|
||||||
|
|
||||||
|
- if (entry.is_encryptable()) {
|
||||||
|
+ if (entry.is_encryptable() || true) {
|
||||||
|
flags |= android::vold::Disk::Flags::kAdoptable;
|
||||||
|
*has_adoptable = true;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user