diff --git a/patches/platform_external_selinux/0008-Allow-mismatches-of-exfat-genfscon.patch b/patches/platform_external_selinux/0008-Allow-mismatches-of-exfat-genfscon.patch new file mode 100644 index 0000000..65e8981 --- /dev/null +++ b/patches/platform_external_selinux/0008-Allow-mismatches-of-exfat-genfscon.patch @@ -0,0 +1,27 @@ +From b54a7a80c84c693549a77c57e2dc5a023928f524 Mon Sep 17 00:00:00 2001 +From: Pierre-Hugues Husson +Date: Sun, 24 May 2020 17:22:22 +0200 +Subject: [PATCH 8/8] Allow mismatches of exfat genfscon + +--- + libsepol/cil/src/cil_post.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/libsepol/cil/src/cil_post.c b/libsepol/cil/src/cil_post.c +index 255c9e12..f97c65c1 100644 +--- a/libsepol/cil/src/cil_post.c ++++ b/libsepol/cil/src/cil_post.c +@@ -488,6 +488,10 @@ int cil_post_genfscon_context_compare(const void *a, const void *b) + */ + if(strcmp(a_genfscon->path_str, "/devices/virtual/block/") == 0) + bypass = 1; ++ if(strcmp(a_genfscon->fs_str, "exfat") == 0 || strcmp(a_genfscon->fs_str, "esdfs") == 0) { ++ if(strcmp(a_genfscon->path_str, "/") == 0) ++ bypass = 1; ++ } + if(bypass == 1) { + fprintf(stderr, "Received conflicting %s vs %s but ignore\n", a_genfscon->path_str, b_genfscon->path_str); + return 0; +-- +2.17.1 + diff --git a/patches/platform_frameworks_av/0022-Add-persist.sys.phh.samsung.camera_ids-property-to-a.patch b/patches/platform_frameworks_av/0022-Add-persist.sys.phh.samsung.camera_ids-property-to-a.patch new file mode 100644 index 0000000..30bb9c6 --- /dev/null +++ b/patches/platform_frameworks_av/0022-Add-persist.sys.phh.samsung.camera_ids-property-to-a.patch @@ -0,0 +1,71 @@ +From a280506c41623f2c2e0f96651189ec4b5e19bad1 Mon Sep 17 00:00:00 2001 +From: Pierre-Hugues Husson +Date: Thu, 14 May 2020 19:54:55 +0200 +Subject: [PATCH] Add persist.sys.phh.samsung.camera_ids property to access + hidden Samsung cameras + +--- + services/camera/libcameraservice/Android.bp | 1 + + .../common/CameraProviderManager.cpp | 13 +++++++++++-- + 2 files changed, 12 insertions(+), 2 deletions(-) + +diff --git a/services/camera/libcameraservice/Android.bp b/services/camera/libcameraservice/Android.bp +index c4bc0f1a9..d6a4d6132 100644 +--- a/services/camera/libcameraservice/Android.bp ++++ b/services/camera/libcameraservice/Android.bp +@@ -108,6 +108,7 @@ cc_library_shared { + "android.hardware.camera.device@3.4", + "android.hardware.camera.device@3.5", + "vendor.lineage.camera.motor@1.0", ++ "vendor.samsung.hardware.camera.provider@3.0", + ], + + export_shared_lib_headers: [ +diff --git a/services/camera/libcameraservice/common/CameraProviderManager.cpp b/services/camera/libcameraservice/common/CameraProviderManager.cpp +index fdb565750..9c1c70c84 100644 +--- a/services/camera/libcameraservice/common/CameraProviderManager.cpp ++++ b/services/camera/libcameraservice/common/CameraProviderManager.cpp +@@ -21,6 +21,7 @@ + #include "CameraProviderManager.h" + + #include ++#include + + #include + #include +@@ -1225,6 +1226,9 @@ status_t CameraProviderManager::ProviderInfo::initialize( + mMinorVersion = 4; + } + ++ auto samsungCast = vendor::samsung::hardware::camera::provider::V3_0::ISehCameraProvider::castFrom(interface); ++ auto samsungProvider = samsungCast.isOk() ? static_cast>(samsungCast) : nullptr; ++ + // cameraDeviceStatusChange callbacks may be called (and causing new devices added) + // before setCallback returns + hardware::Return status = interface->setCallback(this); +@@ -1269,7 +1273,7 @@ status_t CameraProviderManager::ProviderInfo::initialize( + + // Get initial list of camera devices, if any + std::vector devices; +- hardware::Return ret = interface->getCameraIdList([&status, this, &devices]( ++ auto cb = [&status, this, &devices]( + Status idStatus, + const hardware::hidl_vec& cameraDeviceNames) { + status = idStatus; +@@ -1286,7 +1290,12 @@ status_t CameraProviderManager::ProviderInfo::initialize( + mProviderPublicCameraIds.push_back(id); + } + } +- } }); ++ } }; ++ hardware::Return ret; ++ if(samsungProvider != nullptr && property_get_bool("persist.sys.phh.samsung.camera_ids", false)) ++ ret = samsungProvider->sehGetCameraIdList(cb); ++ else ++ ret = interface->getCameraIdList(cb); + if (!ret.isOk()) { + ALOGE("%s: Transaction error in getting camera ID list from provider '%s': %s", + __FUNCTION__, mProviderName.c_str(), linked.description().c_str()); +-- +2.17.1 + diff --git a/patches/platform_frameworks_av/0023-Add-a-property-to-force-camera-timestamp-source.patch b/patches/platform_frameworks_av/0023-Add-a-property-to-force-camera-timestamp-source.patch new file mode 100644 index 0000000..cd96f17 --- /dev/null +++ b/patches/platform_frameworks_av/0023-Add-a-property-to-force-camera-timestamp-source.patch @@ -0,0 +1,45 @@ +From 51622b87d04e709067335e38ae2257c21dde00a5 Mon Sep 17 00:00:00 2001 +From: Pierre-Hugues Husson +Date: Tue, 19 May 2020 14:01:14 +0200 +Subject: [PATCH 23/24] Add a property to force camera timestamp source + +Some devices wrongly report their timesource +Camera's timesource can either be CLOCK_MONOTONIC, or CLOCK_BOOTTIME +The former doesn't increment in sleep, while the later does. +There is a camera HAL property for that, though some devices don't +report it properly. + +This issue happens on Xiaomi Redmi 7A, it needs to force the value to 1 + +Add a property persist.sys.phh.camera.force_timestampsource to force +timestamp source. +--- + .../libcameraservice/device3/Camera3Device.cpp | 12 ++++++++++-- + 1 file changed, 10 insertions(+), 2 deletions(-) + +diff --git a/services/camera/libcameraservice/device3/Camera3Device.cpp b/services/camera/libcameraservice/device3/Camera3Device.cpp +index 93e18cfee3..9cc44f1ec9 100644 +--- a/services/camera/libcameraservice/device3/Camera3Device.cpp ++++ b/services/camera/libcameraservice/device3/Camera3Device.cpp +@@ -299,8 +299,16 @@ status_t Camera3Device::initializeCommonLocked() { + // Measure the clock domain offset between camera and video/hw_composer + camera_metadata_entry timestampSource = + mDeviceInfo.find(ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE); +- if (timestampSource.count > 0 && timestampSource.data.u8[0] == +- ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME) { ++ int timestampSourceValue = 0; ++ if ((timestampSource.count > 0 && timestampSource.data.u8[0] == ++ ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME)) { ++ timestampSourceValue = 1; ++ } ++ int forceTimestampSource = property_get_int32("persist.sys.phh.camera.force_timestampsource", -1); ++ //Don't override if it's -1, default value ++ if(forceTimestampSource == 0) timestampSourceValue = 0; ++ if(forceTimestampSource == 1) timestampSourceValue = 1; ++ if (timestampSourceValue == 1) { + mTimestampOffset = getMonoToBoottimeOffset(); + } + +-- +2.17.1 + diff --git a/patches/platform_frameworks_av/0024-Add-persist.sys.phh.disable_a2dp_offload-property-to.patch b/patches/platform_frameworks_av/0024-Add-persist.sys.phh.disable_a2dp_offload-property-to.patch new file mode 100644 index 0000000..a40bc70 --- /dev/null +++ b/patches/platform_frameworks_av/0024-Add-persist.sys.phh.disable_a2dp_offload-property-to.patch @@ -0,0 +1,325 @@ +From 637819ddb60b3a5c16e21b68e448f21e621699b1 Mon Sep 17 00:00:00 2001 +From: Pierre-Hugues Husson +Date: Mon, 25 May 2020 21:26:54 +0200 +Subject: [PATCH 24/24] Add persist.sys.phh.disable_a2dp_offload property to + force a2dp offload + +--- + media/libstagefright/ACodec.cpp | 20 +- + .../managerdefinitions/src/Serializer.cpp | 180 +++++++++++++++++- + .../managerdefault/AudioPolicyManager.cpp | 3 + + 3 files changed, 197 insertions(+), 6 deletions(-) + +diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp +index 0271ecef34..7824b590a6 100644 +--- a/media/libstagefright/ACodec.cpp ++++ b/media/libstagefright/ACodec.cpp +@@ -1166,6 +1166,9 @@ status_t ACodec::configureOutputBuffersFromNativeWindow( + return err; + } + ++ ALOGE("Window undequeued buffers is %d\n", *minUndequeuedBuffers); ++ ALOGE("Consumerrequested %d\n", def.nBufferCountMin); ++ + // FIXME: assume that surface is controlled by app (native window + // returns the number for the case when surface is not controlled by app) + // FIXME2: This means that minUndeqeueudBufs can be 1 larger than reported +@@ -1178,22 +1181,29 @@ status_t ACodec::configureOutputBuffersFromNativeWindow( + // 2. try to allocate two (2) additional buffers to reduce starvation from + // the consumer + // plus an extra buffer to account for incorrect minUndequeuedBufs +- for (OMX_U32 extraBuffers = 2 + 1; /* condition inside loop */; extraBuffers--) { +- OMX_U32 newBufferCount = +- def.nBufferCountMin + *minUndequeuedBuffers + extraBuffers; ++ for (int extraBuffers = 2 + 1; /* condition inside loop */; extraBuffers--) { ++ int a = def.nBufferCountMin; ++ int b = *minUndequeuedBuffers; ++ int c = extraBuffers; ++ int newBufferCount = a+b+c; + def.nBufferCountActual = newBufferCount; + err = mOMXNode->setParameter( + OMX_IndexParamPortDefinition, &def, sizeof(def)); + + if (err == OK) { +- *minUndequeuedBuffers += extraBuffers; ++ ALOGE("Managed to allocate %d buffers (%d extra)\n", newBufferCount, extraBuffers); ++ if(extraBuffers > 0) { ++ *minUndequeuedBuffers += extraBuffers; ++ } else { ++ *minUndequeuedBuffers -= -extraBuffers; ++ } + break; + } + + ALOGW("[%s] setting nBufferCountActual to %u failed: %d", + mComponentName.c_str(), newBufferCount, err); + /* exit condition */ +- if (extraBuffers == 0) { ++ if (extraBuffers == -2 || newBufferCount == 1) { + return err; + } + } +diff --git a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp +index 4bdb082ba1..d144f8991d 100644 +--- a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp ++++ b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp +@@ -29,6 +29,7 @@ + #include + #include + #include ++#include + #include "Serializer.h" + #include "TypeConverter.h" + +@@ -36,6 +37,8 @@ namespace android { + + namespace { + ++static bool forceDisableA2dpOffload = false; ++ + // TODO(mnaganov): Consider finding an alternative for using HIDL code. + using hardware::Return; + using hardware::Status; +@@ -316,7 +319,7 @@ status_t deserializeCollection(const xmlNode *cur, + return status; + } + } else { +- return BAD_VALUE; ++ ALOGE("Ignoring..."); + } + } + } +@@ -732,12 +735,34 @@ Return ModuleTraits::deserialize(const xmlNode *cur, PtrS + + Element module = new HwModule(name.c_str(), versionMajor, versionMinor); + ++ bool isA2dpModule = strcmp(name.c_str(), "a2dp") == 0; ++ bool isPrimaryModule = strcmp(name.c_str(), "primary") == 0; ++ + // Deserialize childrens: Audio Mix Port, Audio Device Ports (Source/Sink), Audio Routes + MixPortTraits::Collection mixPorts; + status_t status = deserializeCollection(cur, &mixPorts, NULL); + if (status != NO_ERROR) { + return Status::fromStatusT(status); + } ++ if(forceDisableA2dpOffload && isA2dpModule) { ++ for(const auto& mixPort: mixPorts) { ++ ALOGE("Disable a2dp offload...? %s", mixPort->getTagName().c_str()); ++ //"a2dp" sw module already has a2dp out ++ if(mixPort->getTagName() == String8("a2dp output")) { ++ forceDisableA2dpOffload = false; ++ break; ++ } ++ } ++ } ++ if(forceDisableA2dpOffload && isA2dpModule) { ++ //Add ++ // ++ auto mixPort = new IOProfile(String8("a2dp output"), AUDIO_PORT_ROLE_SOURCE); ++ AudioProfileTraits::Collection profiles; ++ profiles.add(AudioProfile::createFullDynamic()); ++ mixPort->setAudioProfiles(profiles); ++ mixPorts.push_back(mixPort); ++ } + module->setProfiles(mixPorts); + + DevicePortTraits::Collection devicePorts; +@@ -745,6 +770,89 @@ Return ModuleTraits::deserialize(const xmlNode *cur, PtrS + if (status != NO_ERROR) { + return Status::fromStatusT(status); + } ++ Vector a2dpOuts; ++ a2dpOuts.push_back(String8("BT A2DP Out")); ++ a2dpOuts.push_back(String8("BT A2DP Headphones")); ++ a2dpOuts.push_back(String8("BT A2DP Speaker")); ++ if(forceDisableA2dpOffload) { ++ if(isA2dpModule) { ++ // ++ // ++ // ++ if(true) { ++ FormatVector formats; ++ auto devicePortOut = new DeviceDescriptor(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP, formats, String8(strdup("BT A2DP Out"))); ++ AudioProfileTraits::Collection profiles; ++ ChannelsVector channels; ++ SampleRateVector sampleRates; ++ channels.add(AUDIO_CHANNEL_OUT_STEREO); ++ sampleRates.add(44100); ++ sampleRates.add(48000); ++ sampleRates.add(96000); ++ auto profile = new AudioProfile(AUDIO_FORMAT_PCM_16_BIT, channels, sampleRates); ++ profiles.add(profile); ++ devicePortOut->setAudioProfiles(profiles); ++ devicePortOut->setAddress(String8("lhdc_a2dp")); ++ devicePorts.add(devicePortOut); ++ } ++ // ++ // ++ // ++ if(true) { ++ FormatVector formats; ++ auto devicePortOut = new DeviceDescriptor(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES, formats, String8(strdup("BT A2DP Headphones"))); ++ AudioProfileTraits::Collection profiles; ++ ChannelsVector channels; ++ SampleRateVector sampleRates; ++ channels.add(AUDIO_CHANNEL_OUT_STEREO); ++ sampleRates.add(44100); ++ sampleRates.add(48000); ++ sampleRates.add(96000); ++ auto profile = new AudioProfile(AUDIO_FORMAT_PCM_16_BIT, channels, sampleRates); ++ profiles.add(profile); ++ devicePortOut->setAudioProfiles(profiles); ++ devicePortOut->setAddress(String8("lhdc_a2dp")); ++ devicePorts.add(devicePortOut); ++ } ++ // ++ // ++ // ++ if(true) { ++ FormatVector formats; ++ auto devicePortOut = new DeviceDescriptor(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER, formats, String8(strdup("BT A2DP Speaker"))); ++ AudioProfileTraits::Collection profiles; ++ ChannelsVector channels; ++ SampleRateVector sampleRates; ++ channels.add(AUDIO_CHANNEL_OUT_STEREO); ++ sampleRates.add(44100); ++ sampleRates.add(48000); ++ sampleRates.add(96000); ++ auto profile = new AudioProfile(AUDIO_FORMAT_PCM_16_BIT, channels, sampleRates); ++ profiles.add(profile); ++ devicePortOut->setAudioProfiles(profiles); ++ devicePortOut->setAddress(String8("lhdc_a2dp")); ++ devicePorts.add(devicePortOut); ++ ++ } ++ } else if(isPrimaryModule) { ++ for(const auto& out: a2dpOuts) { ++ auto iterA = std::find_if(devicePorts.begin(), devicePorts.end(), [out](const auto port) { ++ if(port->getTagName() == out) return true; ++ return false; ++ }); ++ if(iterA != devicePorts.end()) { ++ ALOGE("Erasing device port %s", (*iterA)->getTagName().c_str()); ++ devicePorts.erase(iterA); ++ } ++ } ++ } ++ } + module->setDeclaredDevices(devicePorts); + + RouteTraits::Collection routes; +@@ -752,7 +860,76 @@ Return ModuleTraits::deserialize(const xmlNode *cur, PtrS + if (status != NO_ERROR) { + return Status::fromStatusT(status); + } ++ if(forceDisableA2dpOffload) { ++ if(strcmp(name.c_str(), "primary") == 0) { ++ for(const auto& out: a2dpOuts) { ++ auto iterA = std::find_if(routes.begin(), routes.end(), [out](const auto route) { ++ if(route->getType() != AUDIO_ROUTE_MIX) ++ return false; ++ auto sink = route->getSink(); ++ if(sink->getTagName() == out) { ++ return true; ++ } ++ return false; ++ }); ++ if(iterA != routes.end()) { ++ auto sink = (*iterA)->getSink()->getTagName(); ++ ALOGE("Erasing route %s", sink.c_str()); ++ routes.erase(iterA); ++ } ++ } ++ } else if(isA2dpModule) { ++ // ++ if(true) { ++ auto newRoute = new AudioRoute(AUDIO_ROUTE_MIX); ++ auto sink = module->findPortByTagName(String8("BT A2DP Out")); ++ auto source = module->findPortByTagName(String8("a2dp output")); ++ newRoute->setSink(sink); ++ AudioPortVector sources; ++ sources.add(source); ++ ++ sink->addRoute(newRoute); ++ source->addRoute(newRoute); ++ newRoute->setSources(sources); ++ ++ routes.add(newRoute); ++ } ++ // ++ if(true) { ++ auto newRoute = new AudioRoute(AUDIO_ROUTE_MIX); ++ auto sink = module->findPortByTagName(String8("BT A2DP Headphones")); ++ auto source = module->findPortByTagName(String8("a2dp output")); ++ newRoute->setSink(sink); ++ AudioPortVector sources; ++ sources.add(source); ++ ++ sink->addRoute(newRoute); ++ source->addRoute(newRoute); ++ newRoute->setSources(sources); ++ routes.add(newRoute); ++ } ++ // ++ if(true) { ++ auto newRoute = new AudioRoute(AUDIO_ROUTE_MIX); ++ auto sink = module->findPortByTagName(String8("BT A2DP Speaker")); ++ auto source = module->findPortByTagName(String8("a2dp output")); ++ newRoute->setSink(sink); ++ AudioPortVector sources; ++ sources.add(source); ++ ++ sink->addRoute(newRoute); ++ source->addRoute(newRoute); ++ newRoute->setSources(sources); ++ routes.add(newRoute); ++ } ++ } ++ } ++ ALOGE("Good morning"); + fixupQualcommBtScoRoute(routes, devicePorts, module.get()); ++ ALOGE("Good morning2"); + module->setRoutes(routes); + + for (const xmlNode *children = cur->xmlChildrenNode; children != NULL; +@@ -922,6 +1099,7 @@ status_t PolicySerializer::deserialize(const char *configFile, AudioPolicyConfig + status_t deserializeAudioPolicyFile(const char *fileName, AudioPolicyConfig *config) + { + PolicySerializer serializer; ++ forceDisableA2dpOffload = property_get_bool("persist.sys.phh.disable_a2dp_offload", false); + return serializer.deserialize(fileName, config); + } + +diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp +index a984b10c03..5b7750b437 100644 +--- a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp ++++ b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp +@@ -76,6 +76,8 @@ static const std::vector surroundChannelMasksOrder = {{ + AUDIO_CHANNEL_OUT_2POINT1POINT2, AUDIO_CHANNEL_OUT_2POINT0POINT2, + AUDIO_CHANNEL_OUT_5POINT1, AUDIO_CHANNEL_OUT_STEREO }}; + ++static bool forceDisableA2dpOffload = false; ++ + // ---------------------------------------------------------------------------- + // AudioPolicyInterface implementation + // ---------------------------------------------------------------------------- +@@ -4256,6 +4258,7 @@ static status_t deserializeAudioPolicyXmlConfig(AudioPolicyConfig &config) { + } else if (property_get_bool("persist.bluetooth.bluetooth_audio_hal.disabled", false)) { + fileNames.push_back(AUDIO_POLICY_BLUETOOTH_LEGACY_HAL_XML_CONFIG_FILE_NAME); + } ++ forceDisableA2dpOffload = property_get_bool("persist.sys.phh.disable_a2dp_offload", false); + fileNames.push_back(AUDIO_POLICY_XML_CONFIG_FILE_NAME); + + for (const char* fileName : fileNames) { +-- +2.17.1 + diff --git a/patches/platform_frameworks_base/0013-Show-APN-Settings-for-CDMA-carriers.patch b/patches/platform_frameworks_base/0013-Show-APN-Settings-for-CDMA-carriers.patch index f52d683..61d0201 100644 --- a/patches/platform_frameworks_base/0013-Show-APN-Settings-for-CDMA-carriers.patch +++ b/patches/platform_frameworks_base/0013-Show-APN-Settings-for-CDMA-carriers.patch @@ -8,7 +8,7 @@ Subject: [PATCH 13/36] Show APN Settings for CDMA carriers 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java -index 19f8203f750..4e0fcbb7358 100755 +index 19f8203f750..4e0fcbb7358 100644 --- a/telephony/java/android/telephony/CarrierConfigManager.java +++ b/telephony/java/android/telephony/CarrierConfigManager.java @@ -3073,7 +3073,7 @@ public class CarrierConfigManager { diff --git a/patches/platform_frameworks_base/0024-Support-new-samsung-light-hal.patch b/patches/platform_frameworks_base/0024-Support-new-samsung-light-hal.patch index a016c2f..7957aa3 100644 --- a/patches/platform_frameworks_base/0024-Support-new-samsung-light-hal.patch +++ b/patches/platform_frameworks_base/0024-Support-new-samsung-light-hal.patch @@ -1,4 +1,4 @@ -From 8049bd5138e52042ed47b8b0700753cb77b57641 Mon Sep 17 00:00:00 2001 +From 66452f7948361f504cb2d41249c04d53f56ca7d6 Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Sun, 24 Mar 2019 23:05:14 +0100 Subject: [PATCH] Support new samsung light hal @@ -22,7 +22,7 @@ index fdcefd42316..d8645012e24 100644 static_libs: [ diff --git a/services/core/jni/com_android_server_lights_LightsService.cpp b/services/core/jni/com_android_server_lights_LightsService.cpp -index 35d8219651d..20de7985d1d 100644 +index 35d8219651d..2f77726d5bd 100644 --- a/services/core/jni/com_android_server_lights_LightsService.cpp +++ b/services/core/jni/com_android_server_lights_LightsService.cpp @@ -23,6 +23,8 @@ @@ -43,11 +43,10 @@ index 35d8219651d..20de7985d1d 100644 static bool sLightSupported = true; static bool validate(jint light, jint flash, jint brightness) { -@@ -151,6 +155,21 @@ static void setLight_native( - colorAlpha = (colorAlpha * brightnessLevel) / 0xFF; +@@ -152,6 +156,21 @@ static void setLight_native( colorARGB = (colorAlpha << 24) + (colorARGB & 0x00FFFFFF); } -+ + + sp secHal = ISecLight::getService(); + + if(secHal != nullptr) { @@ -62,9 +61,10 @@ index 35d8219651d..20de7985d1d 100644 + if (t.duration() > 50ms) ALOGD("Excessive delay setting light"); + } + } - ++ Type type = static_cast(light); LightState state = constructState( + colorARGB, flashMode, onMS, offMS, brightnessMode); -- 2.17.1 diff --git a/patches/platform_frameworks_base/0033-wip.patch b/patches/platform_frameworks_base/0033-wip.patch index aab2d25..b647291 100644 --- a/patches/platform_frameworks_base/0033-wip.patch +++ b/patches/platform_frameworks_base/0033-wip.patch @@ -1,4 +1,4 @@ -From b15c825ccb48260a85695db41aff138787d1817f Mon Sep 17 00:00:00 2001 +From ad26b4fe426344371cd018050025d7ca4d47bec2 Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Sun, 24 Mar 2019 22:48:39 +0100 Subject: [PATCH] wip @@ -11,15 +11,15 @@ Change-Id: I50fa9a7a670cef5b93fc4a3a027f1587b1214831 .../fingerprint/FingerprintService.java | 26 ++- .../testharness/TestHarnessModeService.java | 7 +- .../com/android/server/wm/ActivityRecord.java | 6 - - ...om_android_server_lights_LightsService.cpp | 15 +- - 7 files changed, 255 insertions(+), 12 deletions(-) + ...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 16abdbf79de..d01dc639c8f 100644 +index bdd88034655..5e79350ac5c 100644 --- a/Android.bp +++ b/Android.bp -@@ -777,6 +777,8 @@ java_defaults { +@@ -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", @@ -257,7 +257,7 @@ index 00000000000..8829bcb7e48 + } +} 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 19593e7e047..c7de87126e8 100644 +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 { @@ -298,7 +298,7 @@ index 19593e7e047..c7de87126e8 100644 } /** -@@ -180,7 +202,6 @@ public class FingerprintService extends BiometricServiceBase { +@@ -181,7 +203,6 @@ public class FingerprintService extends BiometricServiceBase { /** * The following methods contain common code which is shared in biometrics/common. */ @@ -306,7 +306,7 @@ index 19593e7e047..c7de87126e8 100644 @Override // Binder call public long preEnroll(IBinder token) { checkPermission(MANAGE_FINGERPRINT); -@@ -725,6 +746,7 @@ public class FingerprintService extends BiometricServiceBase { +@@ -727,6 +748,7 @@ public class FingerprintService extends BiometricServiceBase { mAlarmManager = context.getSystemService(AlarmManager.class); context.registerReceiver(mLockoutReceiver, new IntentFilter(getLockoutResetIntent()), getLockoutBroadcastPermission(), null /* handler */); @@ -314,7 +314,7 @@ index 19593e7e047..c7de87126e8 100644 } @Override -@@ -952,6 +974,7 @@ public class FingerprintService extends BiometricServiceBase { +@@ -954,6 +976,7 @@ public class FingerprintService extends BiometricServiceBase { Slog.w(TAG, "startPreEnroll: no fingerprint HAL!"); return 0; } @@ -322,7 +322,7 @@ index 19593e7e047..c7de87126e8 100644 try { return daemon.preEnroll(); } catch (RemoteException e) { -@@ -966,6 +989,7 @@ public class FingerprintService extends BiometricServiceBase { +@@ -968,6 +991,7 @@ public class FingerprintService extends BiometricServiceBase { Slog.w(TAG, "startPostEnroll: no fingerprint HAL!"); return 0; } @@ -349,10 +349,10 @@ index fcf87ee2a4b..0aa948417c1 100644 // 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 479babc4c7d..1f972dd4918 100644 +index d9c85c0ca50..0740f70bbf4 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java -@@ -2833,12 +2833,6 @@ final class ActivityRecord extends ConfigurationContainer { +@@ -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; @@ -366,7 +366,7 @@ index 479babc4c7d..1f972dd4918 100644 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 20de7985d1d..2b50d04233e 100644 +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; @@ -379,19 +379,17 @@ index 20de7985d1d..2b50d04233e 100644 static bool validate(jint light, jint flash, jint brightness) { bool valid = true; -@@ -155,20 +158,24 @@ static void setLight_native( - colorAlpha = (colorAlpha * brightnessLevel) / 0xFF; +@@ -156,19 +159,23 @@ static void setLight_native( colorARGB = (colorAlpha << 24) + (colorARGB & 0x00FFFFFF); } -- -- sp secHal = ISecLight::getService(); -- if(secHal != nullptr) { +- sp secHal = ISecLight::getService(); + if(!sSecTried) { + sSecHal = ISecLight::getService(); + sSecTried = true; + } -+ + +- if(secHal != nullptr) { + if(sSecHal != nullptr) { SecType type = static_cast(light); LightState state = constructState( diff --git a/patches/platform_frameworks_base/0046-fix-crashing-on-devices-with-higher-aspect-ratio-dow.patch b/patches/platform_frameworks_base/0046-fix-crashing-on-devices-with-higher-aspect-ratio-dow.patch index 3a8cb4b..68bf55d 100644 --- a/patches/platform_frameworks_base/0046-fix-crashing-on-devices-with-higher-aspect-ratio-dow.patch +++ b/patches/platform_frameworks_base/0046-fix-crashing-on-devices-with-higher-aspect-ratio-dow.patch @@ -1,21 +1,23 @@ -From b5ed01a87952a16e928390aec2aaa531c2bd623d Mon Sep 17 00:00:00 2001 +From 1026ff090a11633027dd62fcff8fe91e2cdea732 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 2 Jan 2020 10:16:49 +0800 -Subject: [PATCH 46/46] fix crashing on devices with higher aspect ratio down - to sw288dp +Subject: [PATCH] fix crashing on devices with higher aspect ratio down to + sw288dp * This is what the Qin 2 (Pro) is. + +Change-Id: I2289a23b706b512a99a541221576960407c098e7 --- - .../SystemUI/res/values-sw288dp/dimens.xml | 34 +++++++++++++++++++ - 1 file changed, 34 insertions(+) + .../SystemUI/res/values-sw288dp/dimens.xml | 33 +++++++++++++++++++ + 1 file changed, 33 insertions(+) create mode 100644 packages/SystemUI/res/values-sw288dp/dimens.xml diff --git a/packages/SystemUI/res/values-sw288dp/dimens.xml b/packages/SystemUI/res/values-sw288dp/dimens.xml new file mode 100644 -index 00000000000..2774554ec64 +index 00000000000..40adc2e6879 --- /dev/null +++ b/packages/SystemUI/res/values-sw288dp/dimens.xml -@@ -0,0 +1,34 @@ +@@ -0,0 +1,33 @@ + +