Sync up to v208
This commit is contained in:
@@ -0,0 +1,475 @@
|
||||
From 6d0a4d0c2d14754f42189e8bce03e3f40d8d5668 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Sun, 15 Dec 2019 16:38:44 +0100
|
||||
Subject: [PATCH] Support Samsung Q Light HAL
|
||||
|
||||
Change-Id: Ic5745eb115a14de348391e69ed6bf3c2a24b157e
|
||||
---
|
||||
services/core/jni/Android.bp | 1 +
|
||||
services/core/jni/Android.bp.orig | 165 ++++++++++++++
|
||||
...om_android_server_lights_LightsService.cpp | 26 +++
|
||||
...droid_server_lights_LightsService.cpp.orig | 207 ++++++++++++++++++
|
||||
4 files changed, 399 insertions(+)
|
||||
create mode 100644 services/core/jni/Android.bp.orig
|
||||
create mode 100644 services/core/jni/com_android_server_lights_LightsService.cpp.orig
|
||||
|
||||
diff --git a/services/core/jni/Android.bp b/services/core/jni/Android.bp
|
||||
index d8645012e24..3ffa7561028 100644
|
||||
--- a/services/core/jni/Android.bp
|
||||
+++ b/services/core/jni/Android.bp
|
||||
@@ -136,6 +136,7 @@ cc_defaults {
|
||||
"suspend_control_aidl_interface-cpp",
|
||||
"vendor.lineage.power@1.0",
|
||||
"vendor.samsung.hardware.light@2.0",
|
||||
+ "vendor.samsung.hardware.light@3.0",
|
||||
],
|
||||
|
||||
static_libs: [
|
||||
diff --git a/services/core/jni/Android.bp.orig b/services/core/jni/Android.bp.orig
|
||||
new file mode 100644
|
||||
index 00000000000..d8645012e24
|
||||
--- /dev/null
|
||||
+++ b/services/core/jni/Android.bp.orig
|
||||
@@ -0,0 +1,165 @@
|
||||
+cc_library_static {
|
||||
+ name: "libservices.core",
|
||||
+ defaults: ["libservices.core-libs"],
|
||||
+
|
||||
+ cflags: [
|
||||
+ "-Wall",
|
||||
+ "-Werror",
|
||||
+ "-Wno-unused-parameter",
|
||||
+ "-Wthread-safety",
|
||||
+
|
||||
+ "-DEGL_EGLEXT_PROTOTYPES",
|
||||
+ "-DGL_GLEXT_PROTOTYPES",
|
||||
+ ],
|
||||
+
|
||||
+ srcs: [
|
||||
+ "BroadcastRadio/JavaRef.cpp",
|
||||
+ "BroadcastRadio/NativeCallbackThread.cpp",
|
||||
+ "BroadcastRadio/BroadcastRadioService.cpp",
|
||||
+ "BroadcastRadio/Tuner.cpp",
|
||||
+ "BroadcastRadio/TunerCallback.cpp",
|
||||
+ "BroadcastRadio/convert.cpp",
|
||||
+ "BroadcastRadio/regions.cpp",
|
||||
+ "com_android_server_AlarmManagerService.cpp",
|
||||
+ "com_android_server_am_BatteryStatsService.cpp",
|
||||
+ "com_android_server_connectivity_Vpn.cpp",
|
||||
+ "com_android_server_connectivity_tethering_OffloadHardwareInterface.cpp",
|
||||
+ "com_android_server_ConsumerIrService.cpp",
|
||||
+ "com_android_server_devicepolicy_CryptoTestHelper.cpp",
|
||||
+ "com_android_server_HardwarePropertiesManagerService.cpp",
|
||||
+ "com_android_server_hdmi_HdmiCecController.cpp",
|
||||
+ "com_android_server_input_InputManagerService.cpp",
|
||||
+ "com_android_server_lights_LightsService.cpp",
|
||||
+ "com_android_server_location_GnssLocationProvider.cpp",
|
||||
+ "com_android_server_locksettings_SyntheticPasswordManager.cpp",
|
||||
+ "com_android_server_net_NetworkStatsService.cpp",
|
||||
+ "com_android_server_power_PowerManagerService.cpp",
|
||||
+ "com_android_server_security_VerityUtils.cpp",
|
||||
+ "com_android_server_SerialService.cpp",
|
||||
+ "com_android_server_storage_AppFuseBridge.cpp",
|
||||
+ "com_android_server_SystemServer.cpp",
|
||||
+ "com_android_server_TestNetworkService.cpp",
|
||||
+ "com_android_server_tv_TvUinputBridge.cpp",
|
||||
+ "com_android_server_tv_TvInputHal.cpp",
|
||||
+ "com_android_server_vr_VrManagerService.cpp",
|
||||
+ "com_android_server_UsbAlsaJackDetector.cpp",
|
||||
+ "com_android_server_UsbDeviceManager.cpp",
|
||||
+ "com_android_server_UsbDescriptorParser.cpp",
|
||||
+ "com_android_server_UsbMidiDevice.cpp",
|
||||
+ "com_android_server_UsbHostManager.cpp",
|
||||
+ "com_android_server_VibratorService.cpp",
|
||||
+ "com_android_server_PersistentDataBlockService.cpp",
|
||||
+ "com_android_server_GraphicsStatsService.cpp",
|
||||
+ "com_android_server_am_AppCompactor.cpp",
|
||||
+ "com_android_server_am_LowMemDetector.cpp",
|
||||
+ "onload.cpp",
|
||||
+ ":lib_networkStatsFactory_native",
|
||||
+ ],
|
||||
+
|
||||
+ include_dirs: [
|
||||
+ "bionic/libc/private",
|
||||
+ "frameworks/base/libs",
|
||||
+ "frameworks/native/services",
|
||||
+ "system/gatekeeper/include",
|
||||
+ ],
|
||||
+}
|
||||
+
|
||||
+cc_defaults {
|
||||
+ name: "libservices.core-libs",
|
||||
+ shared_libs: [
|
||||
+ "libandroid_runtime",
|
||||
+ "libandroidfw",
|
||||
+ "libaudioclient",
|
||||
+ "libbase",
|
||||
+ "libappfuse",
|
||||
+ "libbinder",
|
||||
+ "libcutils",
|
||||
+ "libcrypto",
|
||||
+ "liblog",
|
||||
+ "libhardware",
|
||||
+ "libhardware_legacy",
|
||||
+ "libhidlbase",
|
||||
+ "libkeystore_binder",
|
||||
+ "libmtp",
|
||||
+ "libnativehelper",
|
||||
+ "libutils",
|
||||
+ "libui",
|
||||
+ "libinput",
|
||||
+ "libinputflinger",
|
||||
+ "libinputflinger_base",
|
||||
+ "libinputservice",
|
||||
+ "libschedulerservicehidl",
|
||||
+ "libsensorservice",
|
||||
+ "libsensorservicehidl",
|
||||
+ "libgui",
|
||||
+ "libusbhost",
|
||||
+ "libtinyalsa",
|
||||
+ "libEGL",
|
||||
+ "libGLESv2",
|
||||
+ "libnetutils",
|
||||
+ "libhidlbase",
|
||||
+ "libhidltransport",
|
||||
+ "libhwbinder",
|
||||
+ "libutils",
|
||||
+ "libhwui",
|
||||
+ "libbpf_android",
|
||||
+ "libnetdbpf",
|
||||
+ "libnetdutils",
|
||||
+ "libpsi",
|
||||
+ "android.hardware.audio.common@2.0",
|
||||
+ "android.hardware.broadcastradio@1.0",
|
||||
+ "android.hardware.broadcastradio@1.1",
|
||||
+ "android.hardware.contexthub@1.0",
|
||||
+ "android.hardware.gnss@1.0",
|
||||
+ "android.hardware.gnss@1.1",
|
||||
+ "android.hardware.gnss@2.0",
|
||||
+ "android.hardware.gnss.measurement_corrections@1.0",
|
||||
+ "android.hardware.gnss.visibility_control@1.0",
|
||||
+ "android.hardware.input.classifier@1.0",
|
||||
+ "android.hardware.ir@1.0",
|
||||
+ "android.hardware.light@2.0",
|
||||
+ "android.hardware.power@1.0",
|
||||
+ "android.hardware.power@1.1",
|
||||
+ "android.hardware.power.stats@1.0",
|
||||
+ "android.hardware.tetheroffload.config@1.0",
|
||||
+ "android.hardware.thermal@1.0",
|
||||
+ "android.hardware.tv.cec@1.0",
|
||||
+ "android.hardware.tv.input@1.0",
|
||||
+ "android.hardware.vibrator@1.0",
|
||||
+ "android.hardware.vibrator@1.1",
|
||||
+ "android.hardware.vibrator@1.2",
|
||||
+ "android.hardware.vibrator@1.3",
|
||||
+ "android.hardware.vr@1.0",
|
||||
+ "android.frameworks.schedulerservice@1.0",
|
||||
+ "android.frameworks.sensorservice@1.0",
|
||||
+ "android.system.suspend@1.0",
|
||||
+ "suspend_control_aidl_interface-cpp",
|
||||
+ "vendor.lineage.power@1.0",
|
||||
+ "vendor.samsung.hardware.light@2.0",
|
||||
+ ],
|
||||
+
|
||||
+ static_libs: [
|
||||
+ "android.hardware.broadcastradio@common-utils-1x-lib",
|
||||
+ ],
|
||||
+
|
||||
+ product_variables: {
|
||||
+ arc: {
|
||||
+ shared_libs: [
|
||||
+ "libarcbridge",
|
||||
+ "libarcbridgeservice",
|
||||
+ "libarctimer",
|
||||
+ "libbase",
|
||||
+ "libcap",
|
||||
+ "libchrome",
|
||||
+ "libmojo",
|
||||
+ ],
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+filegroup {
|
||||
+ name: "lib_networkStatsFactory_native",
|
||||
+ srcs: [
|
||||
+ "com_android_server_net_NetworkStatsFactory.cpp",
|
||||
+ ],
|
||||
+}
|
||||
diff --git a/services/core/jni/com_android_server_lights_LightsService.cpp b/services/core/jni/com_android_server_lights_LightsService.cpp
|
||||
index a21c6e2c8ef..dedc7734131 100644
|
||||
--- a/services/core/jni/com_android_server_lights_LightsService.cpp
|
||||
+++ b/services/core/jni/com_android_server_lights_LightsService.cpp
|
||||
@@ -25,6 +25,8 @@
|
||||
#include <android/hardware/light/2.0/types.h>
|
||||
#include <vendor/samsung/hardware/light/2.0/ISecLight.h>
|
||||
#include <vendor/samsung/hardware/light/2.0/types.h>
|
||||
+#include <vendor/samsung/hardware/light/3.0/ISehLight.h>
|
||||
+#include <vendor/samsung/hardware/light/3.0/types.h>
|
||||
#include <android-base/chrono_utils.h>
|
||||
#include <utils/misc.h>
|
||||
#include <utils/Log.h>
|
||||
@@ -44,9 +46,13 @@ using Return = ::android::hardware::Return<T>;
|
||||
|
||||
using ISecLight = ::vendor::samsung::hardware::light::V2_0::ISecLight;
|
||||
using SecType = ::vendor::samsung::hardware::light::V2_0::SecType;
|
||||
+using ISehLight = ::vendor::samsung::hardware::light::V3_0::ISehLight;
|
||||
+using SehType = ::vendor::samsung::hardware::light::V3_0::SehType;
|
||||
+using SehLightState = ::vendor::samsung::hardware::light::V3_0::SehLightState;
|
||||
static bool sLightSupported = true;
|
||||
|
||||
static sp<ISecLight> sSecHal;
|
||||
+static sp<ISehLight> sSehHal;
|
||||
static bool sSecTried = false;
|
||||
|
||||
static bool validate(jint light, jint flash, jint brightness) {
|
||||
@@ -161,6 +167,7 @@ static void setLight_native(
|
||||
|
||||
if(!sSecTried) {
|
||||
sSecHal = ISecLight::getService();
|
||||
+ sSehHal = ISehLight::getService();
|
||||
//sSecTried = true;
|
||||
}
|
||||
|
||||
@@ -178,6 +185,25 @@ static void setLight_native(
|
||||
return;
|
||||
}
|
||||
|
||||
+ if(sSehHal != nullptr && light == 0 && flashMode == static_cast<jint>(Flash::HARDWARE)) {
|
||||
+ SehType type = static_cast<SehType>(light);
|
||||
+ SehLightState state {};
|
||||
+ state.flashMode = Flash::NONE;
|
||||
+ Brightness brightness = static_cast<Brightness>(brightnessMode);
|
||||
+ state.brightnessMode = brightness;
|
||||
+ state.extendedBrightness = colorARGB;
|
||||
+
|
||||
+ {
|
||||
+ android::base::Timer t;
|
||||
+ Return<Status> ret = sSehHal->sehSetLight(type, state);
|
||||
+ if(!ret.isOk()) {
|
||||
+ ALOGE("Failed to issue set light command.");
|
||||
+ }
|
||||
+ if (t.duration() > 50ms) ALOGD("Excessive delay setting light");
|
||||
+ }
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
Type type = static_cast<Type>(light);
|
||||
LightState state = constructState(
|
||||
colorARGB, flashMode, onMS, offMS, brightnessMode);
|
||||
diff --git a/services/core/jni/com_android_server_lights_LightsService.cpp.orig b/services/core/jni/com_android_server_lights_LightsService.cpp.orig
|
||||
new file mode 100644
|
||||
index 00000000000..a21c6e2c8ef
|
||||
--- /dev/null
|
||||
+++ b/services/core/jni/com_android_server_lights_LightsService.cpp.orig
|
||||
@@ -0,0 +1,207 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2009 The Android Open Source Project
|
||||
+ * Copyright (C) 2015 The CyanogenMod 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.
|
||||
+ */
|
||||
+
|
||||
+#define LOG_TAG "LightsService"
|
||||
+
|
||||
+#include "jni.h"
|
||||
+#include <nativehelper/JNIHelp.h>
|
||||
+#include "android_runtime/AndroidRuntime.h"
|
||||
+
|
||||
+#include <android/hardware/light/2.0/ILight.h>
|
||||
+#include <android/hardware/light/2.0/types.h>
|
||||
+#include <vendor/samsung/hardware/light/2.0/ISecLight.h>
|
||||
+#include <vendor/samsung/hardware/light/2.0/types.h>
|
||||
+#include <android-base/chrono_utils.h>
|
||||
+#include <utils/misc.h>
|
||||
+#include <utils/Log.h>
|
||||
+#include <map>
|
||||
+#include <stdio.h>
|
||||
+
|
||||
+namespace android {
|
||||
+
|
||||
+using Brightness = ::android::hardware::light::V2_0::Brightness;
|
||||
+using Flash = ::android::hardware::light::V2_0::Flash;
|
||||
+using ILight = ::android::hardware::light::V2_0::ILight;
|
||||
+using LightState = ::android::hardware::light::V2_0::LightState;
|
||||
+using Status = ::android::hardware::light::V2_0::Status;
|
||||
+using Type = ::android::hardware::light::V2_0::Type;
|
||||
+template<typename T>
|
||||
+using Return = ::android::hardware::Return<T>;
|
||||
+
|
||||
+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;
|
||||
+
|
||||
+ if (light < 0 || light >= static_cast<jint>(Type::COUNT)) {
|
||||
+ ALOGE("Invalid light parameter %d.", light);
|
||||
+ valid = false;
|
||||
+ }
|
||||
+
|
||||
+ if (flash != static_cast<jint>(Flash::NONE) &&
|
||||
+ flash != static_cast<jint>(Flash::TIMED) &&
|
||||
+ flash != static_cast<jint>(Flash::HARDWARE)) {
|
||||
+ ALOGE("Invalid flash parameter %d.", flash);
|
||||
+ valid = false;
|
||||
+ }
|
||||
+
|
||||
+ if (brightness != static_cast<jint>(Brightness::USER) &&
|
||||
+ brightness != static_cast<jint>(Brightness::SENSOR) &&
|
||||
+ brightness != static_cast<jint>(Brightness::LOW_PERSISTENCE)) {
|
||||
+ ALOGE("Invalid brightness parameter %d.", brightness);
|
||||
+ valid = false;
|
||||
+ }
|
||||
+
|
||||
+ if (brightness == static_cast<jint>(Brightness::LOW_PERSISTENCE) &&
|
||||
+ light != static_cast<jint>(Type::BACKLIGHT)) {
|
||||
+ ALOGE("Cannot set low-persistence mode for non-backlight device.");
|
||||
+ valid = false;
|
||||
+ }
|
||||
+
|
||||
+ return valid;
|
||||
+}
|
||||
+
|
||||
+static LightState constructState(
|
||||
+ jint colorARGB,
|
||||
+ jint flashMode,
|
||||
+ jint onMS,
|
||||
+ jint offMS,
|
||||
+ jint brightnessMode){
|
||||
+ Flash flash = static_cast<Flash>(flashMode);
|
||||
+ Brightness brightness = static_cast<Brightness>(brightnessMode);
|
||||
+
|
||||
+ LightState state{};
|
||||
+
|
||||
+ if (brightness == Brightness::LOW_PERSISTENCE) {
|
||||
+ state.flashMode = Flash::NONE;
|
||||
+ } else {
|
||||
+ // Only set non-brightness settings when not in low-persistence mode
|
||||
+ state.flashMode = flash;
|
||||
+ state.flashOnMs = onMS;
|
||||
+ state.flashOffMs = offMS;
|
||||
+ }
|
||||
+
|
||||
+ state.color = colorARGB;
|
||||
+ state.brightnessMode = brightness;
|
||||
+
|
||||
+ return state;
|
||||
+}
|
||||
+
|
||||
+static void processReturn(
|
||||
+ const Return<Status> &ret,
|
||||
+ Type type,
|
||||
+ const LightState &state) {
|
||||
+ if (!ret.isOk()) {
|
||||
+ ALOGE("Failed to issue set light command.");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ switch (static_cast<Status>(ret)) {
|
||||
+ case Status::SUCCESS:
|
||||
+ break;
|
||||
+ case Status::LIGHT_NOT_SUPPORTED:
|
||||
+ ALOGE("Light requested not available on this device. %d", type);
|
||||
+ break;
|
||||
+ case Status::BRIGHTNESS_NOT_SUPPORTED:
|
||||
+ ALOGE("Brightness parameter not supported on this device: %d",
|
||||
+ state.brightnessMode);
|
||||
+ break;
|
||||
+ case Status::UNKNOWN:
|
||||
+ default:
|
||||
+ ALOGE("Unknown error setting light.");
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void setLight_native(
|
||||
+ JNIEnv* /* env */,
|
||||
+ jobject /* clazz */,
|
||||
+ jint light,
|
||||
+ jint colorARGB,
|
||||
+ jint flashMode,
|
||||
+ jint onMS,
|
||||
+ jint offMS,
|
||||
+ jint brightnessMode,
|
||||
+ jint brightnessLevel) {
|
||||
+
|
||||
+ if (!sLightSupported) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ if (!validate(light, flashMode, brightnessMode)) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ if (brightnessLevel > 0 && brightnessLevel <= 0xFF) {
|
||||
+ int colorAlpha = (colorARGB & 0xFF000000) >> 24;
|
||||
+ if (colorAlpha == 0x00) {
|
||||
+ colorAlpha = 0xFF;
|
||||
+ }
|
||||
+ colorAlpha = (colorAlpha * brightnessLevel) / 0xFF;
|
||||
+ colorARGB = (colorAlpha << 24) + (colorARGB & 0x00FFFFFF);
|
||||
+ }
|
||||
+
|
||||
+ if(!sSecTried) {
|
||||
+ sSecHal = ISecLight::getService();
|
||||
+ //sSecTried = true;
|
||||
+ }
|
||||
+
|
||||
+ if(sSecHal != nullptr) {
|
||||
+ SecType type = static_cast<SecType>(light);
|
||||
+ LightState state = constructState(
|
||||
+ colorARGB, flashMode, onMS, offMS, brightnessMode);
|
||||
+
|
||||
+ {
|
||||
+ android::base::Timer t;
|
||||
+ 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);
|
||||
+ LightState state = constructState(
|
||||
+ colorARGB, flashMode, onMS, offMS, brightnessMode);
|
||||
+
|
||||
+ {
|
||||
+ android::base::Timer t;
|
||||
+ sp<ILight> hal = ILight::getService();
|
||||
+ if (hal == nullptr) {
|
||||
+ sLightSupported = false;
|
||||
+ return;
|
||||
+ }
|
||||
+ Return<Status> ret = hal->setLight(type, state);
|
||||
+ processReturn(ret, type, state);
|
||||
+ if (t.duration() > 50ms) ALOGD("Excessive delay setting light");
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static const JNINativeMethod method_table[] = {
|
||||
+ { "setLight_native", "(IIIIIII)V", (void*)setLight_native },
|
||||
+};
|
||||
+
|
||||
+int register_android_server_LightsService(JNIEnv *env) {
|
||||
+ return jniRegisterNativeMethods(env, "com/android/server/lights/LightsService",
|
||||
+ method_table, NELEM(method_table));
|
||||
+}
|
||||
+
|
||||
+};
|
||||
--
|
||||
2.17.1
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
From 6d095a568c1b3abc27bd9111155353c3688a761e Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Sun, 15 Dec 2019 16:58:38 +0100
|
||||
Subject: [PATCH 42/45] Add a nodim property for FacolaView
|
||||
|
||||
Set persist.sys.phh.nodim to true to remove diming/full brightness
|
||||
---
|
||||
.../android/server/biometrics/fingerprint/FacolaView.java | 8 ++++++--
|
||||
1 file changed, 6 insertions(+), 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 4ff373a108d..08436019bc9 100644
|
||||
--- a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
+++ b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
@@ -57,6 +57,7 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
|
||||
private final WindowManager mWM;
|
||||
private final boolean samsungFod = samsungHasCmd("fod_enable");
|
||||
+ private final boolean noDim;
|
||||
|
||||
private boolean mHidden = true;
|
||||
FacolaView(Context context) {
|
||||
@@ -68,6 +69,7 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
mHandlerThread.start();
|
||||
mHandler = new Handler(mHandlerThread.getLooper());
|
||||
|
||||
+ 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(",");
|
||||
String[] size = android.os.SystemProperties.get("persist.vendor.sys.fp.fod.size.width_height", "").split(",");
|
||||
Slog.d("PHH-Enroll", "FacolaView hello");
|
||||
@@ -149,8 +151,10 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
return false;
|
||||
}
|
||||
|
||||
- mParams.dimAmount = TOUCHED_DIM;
|
||||
- mParams.screenBrightness = 1.0f;
|
||||
+ if(!noDim) {
|
||||
+ mParams.dimAmount = TOUCHED_DIM;
|
||||
+ mParams.screenBrightness = 1.0f;
|
||||
+ }
|
||||
mWM.updateViewLayout(this, mParams);
|
||||
|
||||
return true;
|
||||
--
|
||||
2.17.1
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
From 23fac793a4950f84a88ee2d5ceb3045d703a46e6 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Sun, 15 Dec 2019 22:14:12 +0100
|
||||
Subject: [PATCH] Add Samsung's Q power HAL to fix suspend
|
||||
|
||||
Change-Id: I1edd4de9932ab089b7051f1329f60c15b9d99aaa
|
||||
---
|
||||
services/core/jni/Android.bp | 1 +
|
||||
...ndroid_server_power_PowerManagerService.cpp | 18 ++++++++++++++++++
|
||||
2 files changed, 19 insertions(+)
|
||||
|
||||
diff --git a/services/core/jni/Android.bp b/services/core/jni/Android.bp
|
||||
index 3ffa7561028..8f44be480c9 100644
|
||||
--- a/services/core/jni/Android.bp
|
||||
+++ b/services/core/jni/Android.bp
|
||||
@@ -135,6 +135,7 @@ cc_defaults {
|
||||
"android.system.suspend@1.0",
|
||||
"suspend_control_aidl_interface-cpp",
|
||||
"vendor.lineage.power@1.0",
|
||||
+ "vendor.samsung.hardware.miscpower@2.0",
|
||||
"vendor.samsung.hardware.light@2.0",
|
||||
"vendor.samsung.hardware.light@3.0",
|
||||
],
|
||||
diff --git a/services/core/jni/com_android_server_power_PowerManagerService.cpp b/services/core/jni/com_android_server_power_PowerManagerService.cpp
|
||||
index 211ea50ddc9..bf0599fe18a 100644
|
||||
--- a/services/core/jni/com_android_server_power_PowerManagerService.cpp
|
||||
+++ b/services/core/jni/com_android_server_power_PowerManagerService.cpp
|
||||
@@ -21,6 +21,7 @@
|
||||
#include <android/hardware/power/1.1/IPower.h>
|
||||
#include <android/system/suspend/1.0/ISystemSuspend.h>
|
||||
#include <android/system/suspend/ISuspendControlService.h>
|
||||
+#include <vendor/samsung/hardware/miscpower/2.0/ISehMiscPower.h>
|
||||
#include <nativehelper/JNIHelp.h>
|
||||
#include <vendor/lineage/power/1.0/ILineagePower.h>
|
||||
#include "jni.h"
|
||||
@@ -58,6 +59,7 @@ using IPowerV1_1 = android::hardware::power::V1_1::IPower;
|
||||
using IPowerV1_0 = android::hardware::power::V1_0::IPower;
|
||||
using ILineagePowerV1_0 = vendor::lineage::power::V1_0::ILineagePower;
|
||||
using vendor::lineage::power::V1_0::LineageFeature;
|
||||
+using ISehMiscPower = vendor::samsung::hardware::miscpower::V2_0::ISehMiscPower;
|
||||
|
||||
namespace android {
|
||||
|
||||
@@ -74,6 +76,7 @@ static jobject gPowerManagerServiceObj;
|
||||
static sp<IPowerV1_0> gPowerHalV1_0_ = nullptr;
|
||||
static sp<IPowerV1_1> gPowerHalV1_1_ = nullptr;
|
||||
static sp<ILineagePowerV1_0> gLineagePowerHalV1_0_ = nullptr;
|
||||
+static sp<ISehMiscPower> gSehMiscPower = nullptr;
|
||||
static bool gPowerHalExists = true;
|
||||
static bool gLineagePowerHalExists = true;
|
||||
static std::mutex gPowerHalMutex;
|
||||
@@ -98,6 +101,7 @@ static bool checkAndClearExceptionFromCallback(JNIEnv* env, const char* methodNa
|
||||
// The caller must be holding gPowerHalMutex.
|
||||
static void connectPowerHalLocked() {
|
||||
if (gPowerHalExists && gPowerHalV1_0_ == nullptr) {
|
||||
+ gSehMiscPower = ISehMiscPower::getService();
|
||||
gPowerHalV1_0_ = IPowerV1_0::getService("miscpower");
|
||||
if(gPowerHalV1_0_ == nullptr)
|
||||
gPowerHalV1_0_ = IPowerV1_0::getService();
|
||||
@@ -130,6 +134,12 @@ void connectLineagePowerHalLocked() {
|
||||
}
|
||||
}
|
||||
|
||||
+sp<ISehMiscPower> getSehMiscPower() {
|
||||
+ std::lock_guard<std::mutex> lock(gPowerHalMutex);
|
||||
+ connectPowerHalLocked();
|
||||
+ return gSehMiscPower;
|
||||
+}
|
||||
+
|
||||
// Retrieve a copy of PowerHAL V1_0
|
||||
sp<IPowerV1_0> getPowerHalV1_0() {
|
||||
std::lock_guard<std::mutex> lock(gPowerHalMutex);
|
||||
@@ -314,6 +324,14 @@ static void nativeSetInteractive(JNIEnv* /* env */, jclass /* clazz */, jboolean
|
||||
enable ? "true" : "false", enable ? "on" : "off");
|
||||
}
|
||||
}
|
||||
+ sp<ISehMiscPower> sehMiscPower = getSehMiscPower();
|
||||
+ if(sehMiscPower != nullptr) {
|
||||
+ android::base::Timer t;
|
||||
+ Return<void> ret = sehMiscPower->setInteractiveAsync(enable, 0);
|
||||
+ if(!ret.isOk()) {
|
||||
+ ALOGE("set interactive async() failed: seh misc setInteractiveAsync");
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
|
||||
static void nativeSetAutoSuspend(JNIEnv* /* env */, jclass /* clazz */, jboolean enable) {
|
||||
--
|
||||
2.17.1
|
||||
|
||||
@@ -0,0 +1,117 @@
|
||||
From e156f6e2e7af7d743dc5ea52fe6a5623730141ef Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Sun, 15 Dec 2019 23:19:32 +0100
|
||||
Subject: [PATCH 44/45] FacolaView: Support goodix ext and fix wrong forced
|
||||
brightness
|
||||
|
||||
---
|
||||
services/core/Android.bp | 1 +
|
||||
.../biometrics/fingerprint/FacolaView.java | 30 ++++++++++++++-----
|
||||
2 files changed, 23 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/services/core/Android.bp b/services/core/Android.bp
|
||||
index b2e8af938f3..9f83e49c27d 100644
|
||||
--- a/services/core/Android.bp
|
||||
+++ b/services/core/Android.bp
|
||||
@@ -54,6 +54,7 @@ java_library_static {
|
||||
"dnsresolver_aidl_interface-V2-java",
|
||||
"netd_aidl_interface-V2-java",
|
||||
"netd_event_listener_interface-java",
|
||||
+ "vendor.goodix.extend.service-V2.0-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 08436019bc9..651cc97be39 100644
|
||||
--- a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
+++ b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
@@ -36,6 +36,7 @@ import java.io.FileReader;
|
||||
import java.io.PrintWriter;
|
||||
|
||||
import vendor.xiaomi.hardware.fingerprintextension.V1_0.IXiaomiFingerprint;
|
||||
+import vendor.goodix.extend.service.V2_0.IGoodixFPExtendService;
|
||||
|
||||
import android.os.Handler;
|
||||
import android.os.HandlerThread;
|
||||
@@ -46,6 +47,7 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
private final Paint mPaintFingerprint = new Paint();
|
||||
private final Paint mPaintShow = new Paint();
|
||||
private IXiaomiFingerprint mXiaomiFingerprint = null;
|
||||
+ private IGoodixFPExtendService mGoodixFingerprint = null;
|
||||
private boolean mInsideCircle = false;
|
||||
private final WindowManager.LayoutParams mParams = new WindowManager.LayoutParams();
|
||||
|
||||
@@ -94,11 +96,17 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
setOnTouchListener(this);
|
||||
mWM = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);
|
||||
Slog.d("PHH-Enroll", "Created facola...");
|
||||
- try {
|
||||
- if(mW != -1)
|
||||
+ if(mW != -1) {
|
||||
+ try {
|
||||
mXiaomiFingerprint = IXiaomiFingerprint.getService();
|
||||
- } catch(Exception e) {
|
||||
- Slog.d("PHH-Enroll", "Failed getting xiaomi fingerprint service", e);
|
||||
+ } 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);
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -113,6 +121,8 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
int nitValue = 2;
|
||||
if(mXiaomiFingerprint != null)
|
||||
mXiaomiFingerprint.extCmd(0xa, nitValue);
|
||||
+ if(mGoodixFingerprint != null)
|
||||
+ mXiaomiFingerprint.extCmd(10, 1);
|
||||
} catch(Exception e) {
|
||||
Slog.d("PHH-Enroll", "Failed calling xiaomi fp extcmd");
|
||||
}
|
||||
@@ -122,6 +132,8 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
try {
|
||||
if(mXiaomiFingerprint != null)
|
||||
mXiaomiFingerprint.extCmd(0xa, 0);
|
||||
+ if(mGoodixFingerprint != null)
|
||||
+ mXiaomiFingerprint.extCmd(10, 0);
|
||||
} catch(Exception e) {
|
||||
Slog.d("PHH-Enroll", "Failed calling xiaomi fp extcmd");
|
||||
}
|
||||
@@ -151,10 +163,10 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
return false;
|
||||
}
|
||||
|
||||
- if(!noDim) {
|
||||
- mParams.dimAmount = TOUCHED_DIM;
|
||||
- mParams.screenBrightness = 1.0f;
|
||||
- }
|
||||
+ if(!noDim) {
|
||||
+ mParams.dimAmount = TOUCHED_DIM;
|
||||
+ mParams.screenBrightness = 1.0f;
|
||||
+ }
|
||||
mWM.updateViewLayout(this, mParams);
|
||||
|
||||
return true;
|
||||
@@ -164,6 +176,7 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
Slog.d("PHH-Enroll", "Show", new Exception());
|
||||
if(!mHidden) return;
|
||||
mHidden = false;
|
||||
+ mInsideCircle = false;
|
||||
if(samsungFod) {
|
||||
samsungCmd("fod_enable,1,1");
|
||||
}
|
||||
@@ -191,6 +204,7 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
WindowManager.LayoutParams.FLAG_DIM_BEHIND |
|
||||
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
|
||||
mParams.dimAmount = UNTOUCHED_DIM;
|
||||
+ mParams.screenBrightness = .0f;
|
||||
|
||||
mParams.packageName = "android";
|
||||
|
||||
--
|
||||
2.17.1
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
From 482586467473be36e881922152c9cf410ab0b73c Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Hugues Husson <phh@phh.me>
|
||||
Date: Mon, 16 Dec 2019 19:31:12 +0100
|
||||
Subject: [PATCH 45/45] Fix (big) goodix integration mistakes
|
||||
|
||||
---
|
||||
.../biometrics/fingerprint/FacolaView.java | 19 ++++++++++++-------
|
||||
1 file changed, 12 insertions(+), 7 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 651cc97be39..b8ca25a48d2 100644
|
||||
--- a/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
+++ b/services/core/java/com/android/server/biometrics/fingerprint/FacolaView.java
|
||||
@@ -119,10 +119,11 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
if(mInsideCircle) {
|
||||
try {
|
||||
int nitValue = 2;
|
||||
- if(mXiaomiFingerprint != null)
|
||||
+ if(mXiaomiFingerprint != null) {
|
||||
mXiaomiFingerprint.extCmd(0xa, nitValue);
|
||||
- if(mGoodixFingerprint != null)
|
||||
- mXiaomiFingerprint.extCmd(10, 1);
|
||||
+ } else if(mGoodixFingerprint != null) {
|
||||
+ mGoodixFingerprint.goodixExtendCommand(10, 1);
|
||||
+ }
|
||||
} catch(Exception e) {
|
||||
Slog.d("PHH-Enroll", "Failed calling xiaomi fp extcmd");
|
||||
}
|
||||
@@ -130,10 +131,11 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
canvas.drawCircle(mW/2, mH/2, (float) (mW/2.0f), this.mPaintFingerprint);
|
||||
} else {
|
||||
try {
|
||||
- if(mXiaomiFingerprint != null)
|
||||
+ if(mXiaomiFingerprint != null) {
|
||||
mXiaomiFingerprint.extCmd(0xa, 0);
|
||||
- if(mGoodixFingerprint != null)
|
||||
- mXiaomiFingerprint.extCmd(10, 0);
|
||||
+ } else if(mGoodixFingerprint != null) {
|
||||
+ mGoodixFingerprint.goodixExtendCommand(10, 0);
|
||||
+ }
|
||||
} catch(Exception e) {
|
||||
Slog.d("PHH-Enroll", "Failed calling xiaomi fp extcmd");
|
||||
}
|
||||
@@ -226,8 +228,11 @@ public class FacolaView extends ImageView implements OnTouchListener {
|
||||
if(mX == -1 || mY == -1 || mW == -1 || mH == -1) return;
|
||||
|
||||
try {
|
||||
- if(mXiaomiFingerprint != null)
|
||||
+ 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");
|
||||
}
|
||||
--
|
||||
2.17.1
|
||||
|
||||
Reference in New Issue
Block a user