Sync up to v119

This commit is contained in:
AndyCGYan 2019-09-03 12:42:00 +00:00
parent 04c4a9e1b3
commit 81616af6df
11 changed files with 1570 additions and 6 deletions

View File

@ -1,25 +1,25 @@
From e3f08c02ab7d0bc5d0efcc9eb3ad98d9a3a98e32 Mon Sep 17 00:00:00 2001 From 7369d2c37720cc88bbb28c6487b0209732ac52fa Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me> From: Pierre-Hugues Husson <phh@phh.me>
Date: Sat, 24 Mar 2018 08:01:48 +0100 Date: Sat, 24 Mar 2018 08:01:48 +0100
Subject: [PATCH 01/31] Fix backlight control on Galaxy S9(+) Subject: [PATCH] Fix backlight control on Galaxy S9(+)
--- ---
.../core/java/com/android/server/lights/LightsService.java | 7 +++++++ .../core/java/com/android/server/lights/LightsService.java | 7 +++++++
1 file changed, 7 insertions(+) 1 file changed, 7 insertions(+)
diff --git a/services/core/java/com/android/server/lights/LightsService.java b/services/core/java/com/android/server/lights/LightsService.java diff --git a/services/core/java/com/android/server/lights/LightsService.java b/services/core/java/com/android/server/lights/LightsService.java
index a94ed608b9c..762b0ae4037 100644 index 9dee0171683..378e7c367b1 100644
--- a/services/core/java/com/android/server/lights/LightsService.java --- a/services/core/java/com/android/server/lights/LightsService.java
+++ b/services/core/java/com/android/server/lights/LightsService.java +++ b/services/core/java/com/android/server/lights/LightsService.java
@@ -21,6 +21,7 @@ import android.app.ActivityManager; @@ -23,6 +23,7 @@ import android.content.Context;
import android.content.Context; import android.content.pm.PackageManager;
import android.os.Handler; import android.os.Handler;
import android.os.Message; import android.os.Message;
+import android.os.SystemProperties; +import android.os.SystemProperties;
import android.os.Trace; import android.os.Trace;
import android.provider.Settings; import android.provider.Settings;
import android.util.Slog; import android.util.Slog;
@@ -52,6 +53,12 @@ public class LightsService extends SystemService { @@ -54,6 +55,12 @@ public class LightsService extends SystemService {
return; return;
} }

View File

@ -0,0 +1,37 @@
From 2dcdcc26c6f48915fc9b036f7c72adc29b110901 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Sun, 11 Aug 2019 10:30:37 +0200
Subject: [PATCH 36/40] Add property to use linear brightness slider
---
.../com/android/settingslib/display/BrightnessUtils.java | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/packages/SettingsLib/src/com/android/settingslib/display/BrightnessUtils.java b/packages/SettingsLib/src/com/android/settingslib/display/BrightnessUtils.java
index 55723f9d8ed..da8ce4a67e9 100644
--- a/packages/SettingsLib/src/com/android/settingslib/display/BrightnessUtils.java
+++ b/packages/SettingsLib/src/com/android/settingslib/display/BrightnessUtils.java
@@ -50,7 +50,12 @@ public class BrightnessUtils {
* @param max The maximum acceptable value for the setting.
* @return The corresponding setting value.
*/
+ private static final boolean useLinearBrightness = android.os.SystemProperties.getBoolean("persist.sys.phh.linear_brightness", false);
public static final int convertGammaToLinear(int val, int min, int max) {
+ if(useLinearBrightness) {
+ if(val < 4) return 1;
+ return val/4;
+ }
final float normalizedVal = MathUtils.norm(0, GAMMA_SPACE_MAX, val);
final float ret;
if (normalizedVal <= R) {
@@ -87,6 +92,7 @@ public class BrightnessUtils {
* @return The corresponding slider value
*/
public static final int convertLinearToGamma(int val, int min, int max) {
+ if(useLinearBrightness) return val*4;
// For some reason, HLG normalizes to the range [0, 12] rather than [0, 1]
final float normalizedVal = MathUtils.norm(min, max, val) * 12;
final float ret;
--
2.17.1

View File

@ -0,0 +1,53 @@
From 2b3f995ecdc7c8c8c066d698f66d2ea4f9f6cb56 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Mon, 12 Aug 2019 23:08:26 +0200
Subject: [PATCH 37/40] Add support for samsung touch proximity sensor as
fallback to real proximity sensor
---
.../server/display/DisplayPowerController.java | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
index 6f0a51bf107..32cece6f893 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
@@ -62,6 +62,7 @@ import com.android.server.am.BatteryStatsService;
import com.android.server.policy.WindowManagerPolicy;
import java.io.PrintWriter;
+import java.util.List;
/**
* Controls the power state of the display.
@@ -501,6 +502,13 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
if (!DEBUG_PRETEND_PROXIMITY_SENSOR_ABSENT) {
mProximitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
+ if(mProximitySensor == null) {
+ List<Sensor> sensors = mSensorManager.getSensorList(Sensor.TYPE_ALL);
+ for(Sensor sensor: sensors) {
+ if("com.samsung.sensor.touch_proximity".equals(sensor.getStringType()))
+ mProximitySensor = sensor;
+ }
+ }
if (mProximitySensor != null) {
mProximityThreshold = Math.min(mProximitySensor.getMaximumRange(),
TYPICAL_PROXIMITY_THRESHOLD);
@@ -1816,6 +1824,13 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
public void onSensorChanged(SensorEvent event) {
if (mProximitySensorEnabled) {
final long time = SystemClock.uptimeMillis();
+ if("com.samsung.sensor.touch_proximity".equals(mProximitySensor.getStringType())) {
+ int v = (int)event.values[0];
+ boolean positive = (v <= 4);
+ android.util.Log.d("PHH", "Samsung sensor changed " + positive + ":" + v);
+ handleProximitySensorEvent(time, positive);
+ return;
+ }
final float distance = event.values[0];
boolean positive = distance >= 0.0f && distance < mProximityThreshold;
handleProximitySensorEvent(time, positive);
--
2.17.1

View File

@ -0,0 +1,107 @@
From 400520d763e99653b8ebf81ed38e178bea2443b5 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Mon, 12 Aug 2019 23:10:21 +0200
Subject: [PATCH 38/40] Add Samsung `fod_enable` for under-display fingerprint.
For the moment only ultra-sonic works
---
.../server/fingerprint/FacolaView.java | 54 +++++++++++++++++++
1 file changed, 54 insertions(+)
diff --git a/services/core/java/com/android/server/fingerprint/FacolaView.java b/services/core/java/com/android/server/fingerprint/FacolaView.java
index 86f03360ad0..254c1f99b44 100644
--- a/services/core/java/com/android/server/fingerprint/FacolaView.java
+++ b/services/core/java/com/android/server/fingerprint/FacolaView.java
@@ -32,6 +32,9 @@ import android.view.Gravity;
import android.os.Handler;
import android.os.Looper;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
import java.io.PrintWriter;
import vendor.xiaomi.hardware.fingerprintextension.V1_0.IXiaomiFingerprint;
@@ -53,9 +56,12 @@ public class FacolaView extends ImageView implements OnTouchListener {
private boolean visible = false;
private final WindowManager mWM;
+ private final boolean samsungFod = samsungHasCmd("fod_enable");
FacolaView(Context context) {
super(context);
+ android.util.Log.d("PHH", "Samsung FOD " + samsungFod);
+
mMainHandler = new Handler(Looper.getMainLooper());
String[] location = android.os.SystemProperties.get("persist.vendor.sys.fp.fod.location.X_Y", "").split(",");
@@ -157,6 +163,9 @@ public class FacolaView extends ImageView implements OnTouchListener {
}
public void show() {
+ if(samsungFod) {
+ samsungCmd("fod_enable,1,1");
+ }
if(mX == -1 || mY == -1 || mW == -1 || mH == -1) return;
try {
@@ -191,6 +200,9 @@ public class FacolaView extends ImageView implements OnTouchListener {
}
public void hide() {
+ if(samsungFod) {
+ samsungCmd("fod_enable,0");
+ }
if(mX == -1 || mY == -1 || mW == -1 || mH == -1) return;
try {
@@ -211,4 +223,46 @@ public class FacolaView extends ImageView implements OnTouchListener {
mWM.removeView(this);
visible = false;
}
+
+ private static boolean samsungHasCmd(String cmd) {
+ try {
+ File f = new File("/sys/devices/virtual/sec/tsp/cmd_list");
+ if(!f.exists()) return false;
+
+ BufferedReader b = new BufferedReader(new FileReader(f));
+ String line = null;
+ while( (line = b.readLine()) != null) {
+ if(line.equals(cmd)) return true;
+ }
+ return false;
+ } catch(Exception e) {
+ return false;
+ }
+ }
+
+ private static String readFile(String path) {
+ try {
+ File f = new File(path);
+
+ BufferedReader b = new BufferedReader(new FileReader(f));
+ return b.readLine();
+ } catch(Exception e) {
+ return null;
+ }
+ }
+
+ private static void samsungCmd(String cmd) {
+ try {
+ PrintWriter writer = new PrintWriter("/sys/devices/virtual/sec/tsp/cmd", "UTF-8");
+ writer.println(cmd);
+ writer.close();
+
+ String status = readFile("/sys/devices/virtual/sec/tsp/cmd_status");
+ String ret = readFile("/sys/devices/virtual/sec/tsp/cmd_result");
+
+ android.util.Log.d("PHH", "Sending command " + cmd + " returned " + ret + ":" + status);
+ } catch(Exception e) {
+ android.util.Log.d("PHH", "Failed sending command " + cmd, e);
+ }
+ }
}
--
2.17.1

View File

@ -0,0 +1,30 @@
From 2699dc1cb20a07e8bccf60b47d556d10289bb3b3 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Wed, 14 Aug 2019 08:50:47 +0200
Subject: [PATCH 39/40] Use Samsung power HAL
Samsung likes to have two android.hardware.power@1.0 implementation
side-by-side, one that works, one that doesn't.
Pick the one that works.
---
.../core/jni/com_android_server_power_PowerManagerService.cpp | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/services/core/jni/com_android_server_power_PowerManagerService.cpp b/services/core/jni/com_android_server_power_PowerManagerService.cpp
index b2d35d4153a..3cac85139c5 100644
--- a/services/core/jni/com_android_server_power_PowerManagerService.cpp
+++ b/services/core/jni/com_android_server_power_PowerManagerService.cpp
@@ -84,7 +84,9 @@ static bool checkAndClearExceptionFromCallback(JNIEnv* env, const char* methodNa
// The caller must be holding gPowerHalMutex.
static void connectPowerHalLocked() {
if (gPowerHalExists && gPowerHalV1_0_ == nullptr) {
- gPowerHalV1_0_ = IPowerV1_0::getService();
+ gPowerHalV1_0_ = IPowerV1_0::getService("miscpower");
+ if(gPowerHalV1_0_ == nullptr)
+ gPowerHalV1_0_ = IPowerV1_0::getService();
if (gPowerHalV1_0_ != nullptr) {
ALOGI("Loaded power HAL 1.0 service");
// Try cast to powerHAL V1_1
--
2.17.1

View File

@ -0,0 +1,31 @@
From ad4d27e4be4048fa178d4755be4e2063e3204246 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Wed, 14 Aug 2019 23:36:45 +0200
Subject: [PATCH 40/40] Also add com.samsung.sensor.physical_proximity (if
available, it is more a true proximity sensor than touch proximity sensor)
---
.../com/android/server/display/DisplayPowerController.java | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
index 32cece6f893..9ffc8a817e2 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
@@ -502,6 +502,13 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
if (!DEBUG_PRETEND_PROXIMITY_SENSOR_ABSENT) {
mProximitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
+ if(mProximitySensor == null) {
+ List<Sensor> sensors = mSensorManager.getSensorList(Sensor.TYPE_ALL);
+ for(Sensor sensor: sensors) {
+ if("com.samsung.sensor.physical_proximity".equals(sensor.getStringType()))
+ mProximitySensor = sensor;
+ }
+ }
if(mProximitySensor == null) {
List<Sensor> sensors = mSensorManager.getSensorList(Sensor.TYPE_ALL);
for(Sensor sensor: sensors) {
--
2.17.1

View File

@ -0,0 +1,31 @@
From 725b2c6c7b45072c96531656711b89bf9b6b502a Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Mon, 12 Aug 2019 23:48:37 +0200
Subject: [PATCH 5/6] Some Samsung devices requires lying colorspace
---
opengl/libs/EGL/eglApi.cpp | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/opengl/libs/EGL/eglApi.cpp b/opengl/libs/EGL/eglApi.cpp
index c65bddfbb..3cde19af1 100644
--- a/opengl/libs/EGL/eglApi.cpp
+++ b/opengl/libs/EGL/eglApi.cpp
@@ -454,8 +454,14 @@ EGLBoolean eglGetConfigAttrib(EGLDisplay dpy, EGLConfig config,
// ----------------------------------------------------------------------------
// Translates EGL color spaces to Android data spaces.
+static int samsungColorspace = -1;
static android_dataspace dataSpaceFromEGLColorSpace(EGLint colorspace) {
+ if(samsungColorspace == -1) {
+ samsungColorspace = property_get_bool("persist.sys.phh.samsung_colorspace", false);
+ }
if (colorspace == EGL_GL_COLORSPACE_LINEAR_KHR) {
+ if(samsungColorspace)
+ return HAL_DATASPACE_UNKNOWN;
return HAL_DATASPACE_SRGB_LINEAR;
} else if (colorspace == EGL_GL_COLORSPACE_SRGB_KHR) {
return HAL_DATASPACE_SRGB;
--
2.17.1

View File

@ -0,0 +1,35 @@
From 663f83cdb9628315a8501a24d85eee6df707e1ae Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Wed, 14 Aug 2019 23:37:10 +0200
Subject: [PATCH 6/6] On Samsung, we need to send a hack-message to HAL to get
all Sensors
---
services/sensorservice/SensorDevice.cpp | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/services/sensorservice/SensorDevice.cpp b/services/sensorservice/SensorDevice.cpp
index 115a983bc..7fe05190e 100644
--- a/services/sensorservice/SensorDevice.cpp
+++ b/services/sensorservice/SensorDevice.cpp
@@ -26,6 +26,8 @@
#include <cinttypes>
#include <thread>
+#include <android-base/properties.h>
+
using namespace android::hardware::sensors::V1_0;
using namespace android::hardware::sensors::V1_0::implementation;
using android::hardware::hidl_vec;
@@ -59,6 +61,8 @@ SensorDevice::SensorDevice()
float minPowerMa = 0.001; // 1 microAmp
+ if(::android::base::GetBoolProperty("persist.sys.phh.samsung_sensors", false))
+ setMode(5555);
checkReturn(mSensors->getSensorsList(
[&](const auto &list) {
const size_t count = list.size();
--
2.17.1

View File

@ -0,0 +1,76 @@
From 544b54a5a560262561b41bfce9735138d3aac7a8 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Wed, 7 Aug 2019 16:45:03 +0200
Subject: [PATCH 09/10] Add a Samsung safeplace remover. It will reboot to
recovery when it does so, just reboot normally
Change-Id: Iaee40b23c4041ef8e89b9a3217c693ab02a1def4
---
init/init.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 44 insertions(+)
diff --git a/init/init.cpp b/init/init.cpp
index 168e68042..93836fdbd 100644
--- a/init/init.cpp
+++ b/init/init.cpp
@@ -543,6 +543,48 @@ static void InstallSigtermHandler() {
register_epoll_handler(sigterm_signal_fd, HandleSigtermSignal);
}
+static void DisableSamsungSafeplace() {
+ static const char before[] = {
+ 0x82, 0x1B, 0x80, 0x12
+ };
+ static const char after[] = {
+ 0xE2, 0xFF, 0x8F, 0x12
+ };
+
+ int fd = open("/dev/block/by-name/boot", O_RDWR);
+ LOG(INFO) << "opened boot! " << fd;
+ if(fd < 0) return;
+
+ off_t end = lseek(fd, 0, SEEK_END);
+ LOG(INFO) << "Found size! " << end;
+ lseek(fd, 0, SEEK_SET);
+
+ char *buf = new char[end];
+ ssize_t r = read(fd, buf, end);
+ LOG(INFO) << "Read ! " << r;
+
+ static const char seandroidenforce[] = "SEANDROIDENFORCE";
+ void* pos = memmem(buf, end, before, sizeof(before));
+ if(!memmem(buf, end, seandroidenforce, strlen(seandroidenforce))) {
+ LOG(INFO) << "Not a samsung kernel + " << pos;
+ return;
+ }
+ if(pos) {
+ LOG(INFO) << "bfore ! " << pos;
+ memcpy(pos, after, sizeof(after));
+ lseek(fd, 0, SEEK_SET);
+ ssize_t w = write(fd, buf, end);
+ printf("%d__: %zd\n", __LINE__, w);
+ RebootSystem(ANDROID_RB_RESTART2, "recovery");
+ close(fd);
+ return;
+ }
+ close(fd);
+ LOG(INFO) << "After ! " << memmem(buf, end, after, sizeof(after));
+
+ return;
+}
+
int main(int argc, char** argv) {
if (!strcmp(basename(argv[0]), "ueventd")) {
return ueventd_main(argc, argv);
@@ -616,6 +658,8 @@ int main(int argc, char** argv) {
SetInitAvbVersionInRecovery();
+ DisableSamsungSafeplace();
+
// Enable seccomp if global boot option was passed (otherwise it is enabled in zygote).
global_seccomp();
--
2.17.1

View File

@ -0,0 +1,70 @@
From e6db829c4c05539b585c125ecf9f10265ce650c4 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Thu, 22 Aug 2019 20:27:54 +0200
Subject: [PATCH 10/10] Always close boot file descriptor. This lead to zygote
not starting. Should probably add cloexec later
Change-Id: Ia58f953c0edc7c85705dc75c3b4e3478f1eb00a7
---
init/init.cpp | 24 +++++++++++++++---------
1 file changed, 15 insertions(+), 9 deletions(-)
diff --git a/init/init.cpp b/init/init.cpp
index 93836fdbd..5843974a9 100644
--- a/init/init.cpp
+++ b/init/init.cpp
@@ -551,36 +551,42 @@ static void DisableSamsungSafeplace() {
0xE2, 0xFF, 0x8F, 0x12
};
+ char *buf;
+ off_t end;
+ ssize_t r, w;
+ void *pos;
+ static const char seandroidenforce[] = "SEANDROIDENFORCE";
+
int fd = open("/dev/block/by-name/boot", O_RDWR);
LOG(INFO) << "opened boot! " << fd;
- if(fd < 0) return;
+ if(fd < 0) goto end;
- off_t end = lseek(fd, 0, SEEK_END);
+ end = lseek(fd, 0, SEEK_END);
LOG(INFO) << "Found size! " << end;
lseek(fd, 0, SEEK_SET);
- char *buf = new char[end];
- ssize_t r = read(fd, buf, end);
+ buf = new char[end];
+ r = read(fd, buf, end);
LOG(INFO) << "Read ! " << r;
- static const char seandroidenforce[] = "SEANDROIDENFORCE";
- void* pos = memmem(buf, end, before, sizeof(before));
+ pos = memmem(buf, end, before, sizeof(before));
if(!memmem(buf, end, seandroidenforce, strlen(seandroidenforce))) {
LOG(INFO) << "Not a samsung kernel + " << pos;
- return;
+ goto end;
}
if(pos) {
LOG(INFO) << "bfore ! " << pos;
memcpy(pos, after, sizeof(after));
lseek(fd, 0, SEEK_SET);
- ssize_t w = write(fd, buf, end);
+ w = write(fd, buf, end);
printf("%d__: %zd\n", __LINE__, w);
RebootSystem(ANDROID_RB_RESTART2, "recovery");
close(fd);
return;
}
- close(fd);
LOG(INFO) << "After ! " << memmem(buf, end, after, sizeof(after));
+end:
+ close(fd);
return;
}
--
2.17.1