Compare commits
69 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bd7c47e793 | ||
|
|
02dd7c3c56 | ||
|
|
f62a2c9eeb | ||
|
|
4e2ce1d8d8 | ||
|
|
230888e2bf | ||
|
|
36013e8d1e | ||
|
|
d94967c306 | ||
|
|
7e0d5aee84 | ||
|
|
a047cd0e9c | ||
|
|
ce2e14c9cb | ||
|
|
070b86f599 | ||
|
|
5afba6fd79 | ||
|
|
1d8c9ea4be | ||
|
|
5c60662e3e | ||
|
|
93279a0cd0 | ||
|
|
57366c40d5 | ||
|
|
dd598de4bc | ||
|
|
fab72f6b5b | ||
|
|
c2e5046b68 | ||
|
|
46e5d2d42b | ||
|
|
30d76ef466 | ||
|
|
c8d7bb56f5 | ||
|
|
a0aa2970a7 | ||
|
|
be34cb1415 | ||
|
|
caaf1534cf | ||
|
|
ce9b047f39 | ||
|
|
ce324574da | ||
|
|
126ff7676b | ||
|
|
70a27f6856 | ||
|
|
785a2b1d9d | ||
|
|
bba31b00d2 | ||
|
|
505310f835 | ||
|
|
b14334f2d5 | ||
|
|
0b6822d5f3 | ||
|
|
598db92c74 | ||
|
|
6a4f5955bb | ||
|
|
8324f4930e | ||
|
|
2ed020295d | ||
|
|
9034fe2625 | ||
|
|
c89510a83d | ||
|
|
37ad6f91a8 | ||
|
|
f103b97ebb | ||
|
|
f8ba52c219 | ||
|
|
1ca613f5fc | ||
|
|
de18245d3d | ||
|
|
fc3cea066b | ||
|
|
a8358855a7 | ||
|
|
55e2934dd1 | ||
|
|
6af2127ff2 | ||
|
|
933e0e1264 | ||
|
|
7538a10c0e | ||
|
|
3f91fa1724 | ||
|
|
98cf605161 | ||
|
|
f5b202281a | ||
|
|
636ce206a0 | ||
|
|
33a419e8c1 | ||
|
|
064c24617e | ||
|
|
4d7a952308 | ||
|
|
06bfc823ef | ||
|
|
641b58600b | ||
|
|
6454f6c267 | ||
|
|
6785f93e35 | ||
|
|
3bb55820e8 | ||
|
|
0b8722e673 | ||
|
|
3a4813d67b | ||
|
|
1300e116bc | ||
|
|
88247d9e05 | ||
|
|
bb6f814a3d | ||
|
|
b56de4957c |
@@ -21,9 +21,43 @@ android_app {
|
||||
required: [
|
||||
"co.aospa.euicc.xml",
|
||||
"hidden-api-whitelist-co.aospa.euicc.xml",
|
||||
"EuiccGoogle",
|
||||
],
|
||||
}
|
||||
|
||||
android_app_import {
|
||||
name: "EuiccGoogle",
|
||||
owner: "xiaomi",
|
||||
apk: "proprietary/product/priv-app/EuiccGoogle/EuiccGoogle.apk",
|
||||
preprocessed: true,
|
||||
presigned: true,
|
||||
dex_preopt: {
|
||||
enabled: false,
|
||||
},
|
||||
privileged: true,
|
||||
product_specific: true,
|
||||
required: [
|
||||
"default-permissions-euicc.xml",
|
||||
"privapp-permissions-euiccgoogle.xml",
|
||||
],
|
||||
}
|
||||
|
||||
prebuilt_etc {
|
||||
sub_dir: "default-permissions",
|
||||
name: "default-permissions-euicc.xml",
|
||||
filename: "default-permissions-euicc.xml",
|
||||
src: "default-permissions-euicc.xml",
|
||||
product_specific: true,
|
||||
}
|
||||
|
||||
prebuilt_etc {
|
||||
sub_dir: "permissions",
|
||||
name: "privapp-permissions-euiccgoogle.xml",
|
||||
filename: "privapp-permissions-euiccgoogle.xml",
|
||||
src: "privapp-permissions-euiccgoogle.xml",
|
||||
product_specific: true,
|
||||
}
|
||||
|
||||
prebuilt_etc {
|
||||
sub_dir: "permissions",
|
||||
name: "co.aospa.euicc.xml",
|
||||
|
||||
40
Euicc/default-permissions-euicc.xml
Normal file
40
Euicc/default-permissions-euicc.xml
Normal file
@@ -0,0 +1,40 @@
|
||||
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
|
||||
|
||||
<!-- Copyright (C) 2019 Google Inc.
|
||||
|
||||
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.
|
||||
-->
|
||||
|
||||
<!--
|
||||
This file contains permissions to be granted by default. Default
|
||||
permissions are granted to special platform components and to apps
|
||||
that are approved to get default grants. The special components
|
||||
are apps that are expected tto work out-of-the-box as they provide
|
||||
core use cases such as default dialer, default email, etc. These
|
||||
grants are managed by the platform. The apps that are additionally
|
||||
approved for default grants are ones that provide carrier specific
|
||||
functionality, ones legally required at some location, ones providing
|
||||
alternative disclosure and opt-out UI, ones providing highlight features
|
||||
of a dedicated device, etc. This file contains only the latter exceptions.
|
||||
Fixed permissions cannot be controlled by the user and need a special
|
||||
approval. Typically these are to ensure either legally mandated functions
|
||||
or the app is considered a part of the OS.
|
||||
-->
|
||||
|
||||
<exceptions>
|
||||
<exception
|
||||
package="com.google.android.euicc">
|
||||
<!-- Notifications -->
|
||||
<permission name="android.permission.POST_NOTIFICATIONS" fixed="false"/>
|
||||
</exception>
|
||||
</exceptions>
|
||||
25
Euicc/privapp-permissions-euiccgoogle.xml
Normal file
25
Euicc/privapp-permissions-euiccgoogle.xml
Normal file
@@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<permissions>
|
||||
<privapp-permissions package="com.google.android.euicc">
|
||||
<permission name="android.permission.ACCESS_NETWORK_STATE"/>
|
||||
<permission name="android.permission.CHANGE_COMPONENT_ENABLED_STATE"/>
|
||||
<permission name="android.permission.FOREGROUND_SERVICE"/>
|
||||
<permission name="android.permission.MODIFY_PHONE_STATE"/>
|
||||
<permission name="android.permission.INTERNET"/>
|
||||
<permission name="android.permission.READ_PRIVILEGED_PHONE_STATE"/>
|
||||
<permission name="android.permission.REBOOT"/>
|
||||
<permission name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||
<permission name="android.permission.START_FOREGROUND_SERVICES_FROM_BACKGROUND"/>
|
||||
<permission name="android.permission.VIBRATE"/>
|
||||
<permission name="android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS"/>
|
||||
<permission name="android.permission.WRITE_SECURE_SETTINGS"/>
|
||||
<permission name="com.android.permission.INSTALL_EXISTING_PACKAGES"/>
|
||||
<permission name="com.android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS"/>
|
||||
<permission name="com.android.permission.INSTALL_EXISTING_PACKAGES" />
|
||||
<permission name="android.permission.START_ACTIVITIES_FROM_BACKGROUND"/>
|
||||
<permission name="android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS"/>
|
||||
<permission name="android.permission.READ_NETWORK_USAGE_HISTORY"/>
|
||||
<permission name="com.google.android.setupwizard.SETUP_COMPAT_SERVICE"/>
|
||||
<permission name="com.google.android.permission.USE_GRIL" />
|
||||
</privapp-permissions>
|
||||
</permissions>
|
||||
BIN
Euicc/proprietary/product/priv-app/EuiccGoogle/EuiccGoogle.apk
Normal file
BIN
Euicc/proprietary/product/priv-app/EuiccGoogle/EuiccGoogle.apk
Normal file
Binary file not shown.
@@ -4,6 +4,6 @@
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources>
|
||||
<string name="sim_illustration_lottie_mappings_json">{\"sim_illustration_lottie_mappings\":[{\"devices\":[\"diting\"],\"illustration_lottie\":\"sim_illustration_lottie_bottom\"}]}</string>
|
||||
<string name="sim_slot_mappings_json">{\"sim-slot-mappings\":[{\"devices\":[\"diting\"],\"esim-slot-ids\":[1],\"psim-slot-ids\":[0]}]}</string>
|
||||
<string name="sim_illustration_lottie_mappings_json">{\"sim_illustration_lottie_mappings\":[{\"devices\":[\"diting\",\"ziyi\",\"nuwa\",\"fuxi\"],\"illustration_lottie\":\"sim_illustration_lottie_bottom\"}]}</string>
|
||||
<string name="sim_slot_mappings_json">{\"sim-slot-mappings\":[{\"devices\":[\"diting\",\"ziyi\",\"nuwa\",\"fuxi\"],\"esim-slot-ids\":[1],\"psim-slot-ids\":[0]}]}</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
|
||||
* SPDX-FileCopyrightText: 2022-2025 The LineageOS Project
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
@@ -46,11 +46,11 @@ class IfaaService : Service() {
|
||||
|
||||
override fun startBIOManager(authType: Int) = when (authType) {
|
||||
AUTH_TYPE_FINGERPRINT -> {
|
||||
val intent = Intent(Settings.ACTION_SECURITY_SETTINGS).apply {
|
||||
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
}
|
||||
|
||||
applicationContext.startActivity(intent)
|
||||
applicationContext.startActivity(
|
||||
Intent(Settings.ACTION_SECURITY_SETTINGS).apply {
|
||||
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
}
|
||||
)
|
||||
|
||||
COMMAND_OK
|
||||
}
|
||||
|
||||
10
README.md
Normal file
10
README.md
Normal file
@@ -0,0 +1,10 @@
|
||||
# hardware/xiaomi
|
||||
|
||||
## Soong options
|
||||
|
||||
| Namespace | Variable | Description | Default |
|
||||
| --------- | -------- | ----------- | ------- |
|
||||
| XIAOMI_BIOMETRICS_FINGERPRINT | RUN_32BIT | Opt to run service in 32-bit mode only | false |
|
||||
| XIAOMI_TOUCH | HIGH_TOUCH_POLLING_PATH | HighTouchPollingRate feature control path | |
|
||||
| XIAOMI_TOUCH | KEY_DISABLER_CONTROL_PATH | KeyDisabler feature control path | |
|
||||
| XIAOMI_TOUCH | KEY_SWAPPER_CONTROL_PATH | KeySwapper feature control path | |
|
||||
@@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2024 The LineageOS Project
|
||||
// Copyright (C) 2024-2025 The LineageOS Project
|
||||
// 2024 Paranoid Android
|
||||
//
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
@@ -8,9 +8,9 @@
|
||||
soong_config_module_type {
|
||||
name: "xiaomi_hardware_biometrics_config_default",
|
||||
module_type: "cc_defaults",
|
||||
config_namespace: "xiaomi_hardware_biometrics",
|
||||
config_namespace: "XIAOMI_BIOMETRICS_FINGERPRINT",
|
||||
bool_variables: [
|
||||
"run_32bit",
|
||||
"RUN_32BIT",
|
||||
],
|
||||
properties: ["compile_multilib"],
|
||||
}
|
||||
@@ -19,7 +19,7 @@ xiaomi_hardware_biometrics_config_default {
|
||||
name: "xiaomi_hardware_biometrics_config_default",
|
||||
|
||||
soong_config_variables: {
|
||||
run_32bit: {
|
||||
RUN_32BIT: {
|
||||
conditions_default: {
|
||||
compile_multilib: "64",
|
||||
},
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2024 The LineageOS Project
|
||||
* Copyright (C) 2024-2025 The LineageOS Project
|
||||
* 2024 Paranoid Android
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
@@ -12,8 +12,11 @@
|
||||
#include "util/Util.h"
|
||||
|
||||
#include <android-base/logging.h>
|
||||
#include <android-base/properties.h>
|
||||
#include <android-base/strings.h>
|
||||
|
||||
using ::android::base::SetProperty;
|
||||
|
||||
namespace aidl::android::hardware::biometrics::fingerprint {
|
||||
|
||||
namespace {
|
||||
@@ -67,15 +70,19 @@ Fingerprint::Fingerprint(std::shared_ptr<FingerprintConfig> config) : mConfig(st
|
||||
}
|
||||
ALOGI("Opened fingerprint HAL, class: %s, module_id: %s", class_name.c_str(),
|
||||
class_module_id.c_str());
|
||||
SetProperty("persist.vendor.sys.fp.vendor", class_name);
|
||||
break;
|
||||
}
|
||||
if (!mDevice) {
|
||||
ALOGE("Can't open any fingerprint HAL module");
|
||||
SetProperty("persist.vendor.sys.fp.vendor", "none");
|
||||
}
|
||||
}
|
||||
|
||||
std::string sensorTypeProp = mConfig->get<std::string>("type");
|
||||
if (sensorTypeProp == "udfps" || sensorTypeProp == "udfps_optical") {
|
||||
SetProperty("ro.hardware.fp.udfps", "true");
|
||||
|
||||
if (sensorTypeProp == "udfps") {
|
||||
mSensorType = FingerprintSensorType::UNDER_DISPLAY_ULTRASONIC;
|
||||
} else {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2024 The LineageOS Project
|
||||
* Copyright (C) 2024-2025 The LineageOS Project
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
@@ -364,9 +364,15 @@ void Session::notify(const fingerprint_msg_t* msg) {
|
||||
HardwareAuthToken authToken;
|
||||
translate(hat, authToken);
|
||||
|
||||
if (mUdfpsHandler) {
|
||||
mUdfpsHandler->onAuthenticationSucceeded();
|
||||
}
|
||||
mCb->onAuthenticationSucceeded(msg->data.authenticated.finger.fid, authToken);
|
||||
mLockoutTracker.reset(true);
|
||||
} else {
|
||||
if (mUdfpsHandler) {
|
||||
mUdfpsHandler->onAuthenticationFailed();
|
||||
}
|
||||
mCb->onAuthenticationFailed();
|
||||
mLockoutTracker.addFailedAttempt();
|
||||
checkSensorLockout();
|
||||
|
||||
@@ -5,5 +5,5 @@ service vendor.fingerprint-default /vendor/bin/hw/android.hardware.biometrics.fi
|
||||
class late_start
|
||||
user system
|
||||
group system input uhid
|
||||
capabilities SYS_NICE
|
||||
shutdown critical
|
||||
task_profiles ProcessCapacityHigh MaxPerformance
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
//
|
||||
// SPDX-FileCopyrightText: 2024 The LineageOS Project
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
cc_binary {
|
||||
name: "android.hardware.ir-service.xiaomi",
|
||||
relative_install_path: "hw",
|
||||
vendor: true,
|
||||
init_rc: ["android.hardware.ir-service.xiaomi.rc"],
|
||||
vintf_fragments: ["android.hardware.ir-service.xiaomi.xml"],
|
||||
srcs: [
|
||||
"ConsumerIr.cpp",
|
||||
"service.cpp",
|
||||
],
|
||||
shared_libs: [
|
||||
"libbase",
|
||||
"libbinder_ndk",
|
||||
"android.hardware.ir-V1-ndk",
|
||||
],
|
||||
}
|
||||
@@ -1,80 +0,0 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#define LOG_TAG "ConsumerIr"
|
||||
|
||||
#include "ConsumerIr.h"
|
||||
|
||||
#include <android-base/logging.h>
|
||||
#include <fcntl.h>
|
||||
#include <linux/lirc.h>
|
||||
#include <string>
|
||||
|
||||
using std::vector;
|
||||
|
||||
namespace aidl {
|
||||
namespace android {
|
||||
namespace hardware {
|
||||
namespace ir {
|
||||
|
||||
static const std::string kIrDevice = "/dev/lirc0";
|
||||
|
||||
static vector<ConsumerIrFreqRange> kRangeVec{
|
||||
{.minHz = 30000, .maxHz = 60000},
|
||||
};
|
||||
|
||||
::ndk::ScopedAStatus ConsumerIr::getCarrierFreqs(vector<ConsumerIrFreqRange>* _aidl_return) {
|
||||
*_aidl_return = kRangeVec;
|
||||
|
||||
return ::ndk::ScopedAStatus::ok();
|
||||
}
|
||||
|
||||
::ndk::ScopedAStatus ConsumerIr::transmit(int32_t carrierFreqHz, const vector<int32_t>& pattern) {
|
||||
size_t entries = pattern.size();
|
||||
|
||||
if (entries == 0) {
|
||||
return ::ndk::ScopedAStatus::ok();
|
||||
}
|
||||
|
||||
int fd = open(kIrDevice.c_str(), O_RDWR);
|
||||
if (fd < 0) {
|
||||
LOG(ERROR) << "Failed to open " << kIrDevice << ", error " << fd;
|
||||
|
||||
return ::ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_STATE);
|
||||
}
|
||||
|
||||
int rc = ioctl(fd, LIRC_SET_SEND_CARRIER, &carrierFreqHz);
|
||||
if (rc < 0) {
|
||||
LOG(ERROR) << "Failed to set carrier " << carrierFreqHz << ", error: " << errno;
|
||||
|
||||
close(fd);
|
||||
|
||||
return ::ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
|
||||
}
|
||||
|
||||
if ((entries & 1) != 0) {
|
||||
rc = write(fd, pattern.data(), entries * sizeof(int32_t));
|
||||
} else {
|
||||
rc = write(fd, pattern.data(), (entries - 1) * sizeof(int32_t));
|
||||
usleep(pattern[entries - 1]);
|
||||
}
|
||||
|
||||
if (rc < 0) {
|
||||
LOG(ERROR) << "Failed to write pattern, " << entries << " entries, error: " << errno;
|
||||
|
||||
close(fd);
|
||||
|
||||
return ::ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_STATE);
|
||||
}
|
||||
|
||||
close(fd);
|
||||
|
||||
return ::ndk::ScopedAStatus::ok();
|
||||
}
|
||||
|
||||
} // namespace ir
|
||||
} // namespace hardware
|
||||
} // namespace android
|
||||
} // namespace aidl
|
||||
@@ -1,27 +0,0 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2024 The LineageOS Project
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <aidl/android/hardware/ir/BnConsumerIr.h>
|
||||
|
||||
namespace aidl {
|
||||
namespace android {
|
||||
namespace hardware {
|
||||
namespace ir {
|
||||
|
||||
class ConsumerIr : public BnConsumerIr {
|
||||
public:
|
||||
::ndk::ScopedAStatus getCarrierFreqs(
|
||||
::std::vector<::aidl::android::hardware::ir::ConsumerIrFreqRange>* _aidl_return)
|
||||
override;
|
||||
::ndk::ScopedAStatus transmit(int32_t carrierFreqHz,
|
||||
const ::std::vector<int32_t>& pattern) override;
|
||||
};
|
||||
|
||||
} // namespace ir
|
||||
} // namespace hardware
|
||||
} // namespace android
|
||||
} // namespace aidl
|
||||
@@ -1,14 +0,0 @@
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2024 The LineageOS Project
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
on early-boot
|
||||
# IR device
|
||||
chown system system /dev/lirc0
|
||||
|
||||
service vendor.ir-default /vendor/bin/hw/android.hardware.ir-service.xiaomi
|
||||
class hal
|
||||
user system
|
||||
group system
|
||||
shutdown critical
|
||||
@@ -1,11 +0,0 @@
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<manifest version="1.0" type="device">
|
||||
<hal format="aidl">
|
||||
<name>android.hardware.ir</name>
|
||||
<version>1</version>
|
||||
<fqname>IConsumerIr/default</fqname>
|
||||
</hal>
|
||||
</manifest>
|
||||
@@ -1,24 +0,0 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2024 The LineageOS Project
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#include "ConsumerIr.h"
|
||||
|
||||
#include <android-base/logging.h>
|
||||
#include <android/binder_manager.h>
|
||||
#include <android/binder_process.h>
|
||||
|
||||
using aidl::android::hardware::ir::ConsumerIr;
|
||||
|
||||
int main() {
|
||||
ABinderProcess_setThreadPoolMaxThreadCount(0);
|
||||
std::shared_ptr<ConsumerIr> hal = ::ndk::SharedRefBase::make<ConsumerIr>();
|
||||
|
||||
const std::string instance = std::string(ConsumerIr::descriptor) + "/default";
|
||||
binder_status_t status = AServiceManager_addService(hal->asBinder().get(), instance.c_str());
|
||||
CHECK_EQ(status, STATUS_OK);
|
||||
|
||||
ABinderProcess_joinThreadPool();
|
||||
return EXIT_FAILURE; // should not reach
|
||||
}
|
||||
@@ -38,7 +38,7 @@ cc_binary {
|
||||
"android.hardware.sensors@2.0-ScopedWakelock",
|
||||
"android.hardware.sensors@2.0",
|
||||
"android.hardware.sensors@2.1",
|
||||
"android.hardware.sensors-V2-ndk",
|
||||
"android.hardware.sensors-V3-ndk",
|
||||
"libbase",
|
||||
"libcutils",
|
||||
"libfmq",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<manifest version="1.0" type="device">
|
||||
<hal format="aidl">
|
||||
<name>android.hardware.sensors</name>
|
||||
<version>2</version>
|
||||
<version>3</version>
|
||||
<fqname>ISensors/default</fqname>
|
||||
</hal>
|
||||
</manifest>
|
||||
|
||||
48
aidl/touch/Android.bp
Normal file
48
aidl/touch/Android.bp
Normal file
@@ -0,0 +1,48 @@
|
||||
//
|
||||
// SPDX-FileCopyrightText: 2025 The LineageOS Project
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
cc_binary {
|
||||
name: "vendor.lineage.touch-service.xiaomi",
|
||||
init_rc: ["vendor.lineage.touch-service.xiaomi.rc"],
|
||||
vintf_fragments: select(soong_config_variable("XIAOMI_TOUCH", "HIGH_TOUCH_POLLING_PATH"), {
|
||||
any: ["vendor.lineage.touch-service.xiaomi-htpr.xml"],
|
||||
default: [],
|
||||
}) + select(soong_config_variable("XIAOMI_TOUCH", "KEY_DISABLER_CONTROL_PATH"), {
|
||||
any: ["vendor.lineage.touch-service.xiaomi-kd.xml"],
|
||||
default: [],
|
||||
}) + select(soong_config_variable("XIAOMI_TOUCH", "KEY_SWAPPER_CONTROL_PATH"), {
|
||||
any: ["vendor.lineage.touch-service.xiaomi-ks.xml"],
|
||||
default: [],
|
||||
}),
|
||||
relative_install_path: "hw",
|
||||
proprietary: true,
|
||||
cppflags: select(soong_config_variable("XIAOMI_TOUCH", "HIGH_TOUCH_POLLING_PATH"), {
|
||||
any @ flag_val: ["-DHTPR_CONTROL_PATH=\"" + flag_val + "\""],
|
||||
default: [],
|
||||
}) + select(soong_config_variable("XIAOMI_TOUCH", "KEY_DISABLER_CONTROL_PATH"), {
|
||||
any @ flag_val: ["-DKD_CONTROL_PATH=\"" + flag_val + "\""],
|
||||
default: [],
|
||||
}) + select(soong_config_variable("XIAOMI_TOUCH", "KEY_SWAPPER_CONTROL_PATH"), {
|
||||
any @ flag_val: ["-DKS_CONTROL_PATH=\"" + flag_val + "\""],
|
||||
default: [],
|
||||
}),
|
||||
srcs: select(soong_config_variable("XIAOMI_TOUCH", "HIGH_TOUCH_POLLING_PATH"), {
|
||||
any: ["HighTouchPollingRate.cpp"],
|
||||
default: [],
|
||||
}) + select(soong_config_variable("XIAOMI_TOUCH", "KEY_DISABLER_CONTROL_PATH"), {
|
||||
any: ["KeyDisabler.cpp"],
|
||||
default: [],
|
||||
}) + select(soong_config_variable("XIAOMI_TOUCH", "KEY_SWAPPER_CONTROL_PATH"), {
|
||||
any: ["KeySwapper.cpp"],
|
||||
default: [],
|
||||
}) + ["service.cpp"],
|
||||
shared_libs: [
|
||||
"libbase",
|
||||
"libbinder_ndk",
|
||||
"liblog",
|
||||
"libutils",
|
||||
"vendor.lineage.touch-V1-ndk",
|
||||
],
|
||||
}
|
||||
46
aidl/touch/HighTouchPollingRate.cpp
Normal file
46
aidl/touch/HighTouchPollingRate.cpp
Normal file
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2025 The LineageOS Project
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#define LOG_TAG "vendor.lineage.touch-service.xiaomi"
|
||||
|
||||
#include "HighTouchPollingRate.h"
|
||||
|
||||
#include <android-base/file.h>
|
||||
#include <android-base/logging.h>
|
||||
#include <android-base/strings.h>
|
||||
|
||||
using ::android::base::ReadFileToString;
|
||||
using ::android::base::Trim;
|
||||
using ::android::base::WriteStringToFile;
|
||||
|
||||
namespace aidl {
|
||||
namespace vendor {
|
||||
namespace lineage {
|
||||
namespace touch {
|
||||
|
||||
ndk::ScopedAStatus HighTouchPollingRate::getEnabled(bool* _aidl_return) {
|
||||
std::string buf;
|
||||
if (!ReadFileToString(HTPR_CONTROL_PATH, &buf)) {
|
||||
LOG(ERROR) << "Failed to read current HighTouchPollingRate state";
|
||||
return ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
|
||||
}
|
||||
|
||||
*_aidl_return = Trim(buf) == "1";
|
||||
return ndk::ScopedAStatus::ok();
|
||||
}
|
||||
|
||||
ndk::ScopedAStatus HighTouchPollingRate::setEnabled(bool enabled) {
|
||||
if (!WriteStringToFile(enabled ? "1" : "0", HTPR_CONTROL_PATH)) {
|
||||
LOG(ERROR) << "Failed to write HighTouchPollingRate state";
|
||||
return ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
|
||||
}
|
||||
|
||||
return ndk::ScopedAStatus::ok();
|
||||
}
|
||||
|
||||
} // namespace touch
|
||||
} // namespace lineage
|
||||
} // namespace vendor
|
||||
} // namespace aidl
|
||||
24
aidl/touch/HighTouchPollingRate.h
Normal file
24
aidl/touch/HighTouchPollingRate.h
Normal file
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2025 The LineageOS Project
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <aidl/vendor/lineage/touch/BnHighTouchPollingRate.h>
|
||||
|
||||
namespace aidl {
|
||||
namespace vendor {
|
||||
namespace lineage {
|
||||
namespace touch {
|
||||
|
||||
class HighTouchPollingRate : public BnHighTouchPollingRate {
|
||||
public:
|
||||
ndk::ScopedAStatus getEnabled(bool* _aidl_return) override;
|
||||
ndk::ScopedAStatus setEnabled(bool enabled) override;
|
||||
};
|
||||
|
||||
} // namespace touch
|
||||
} // namespace lineage
|
||||
} // namespace vendor
|
||||
} // namespace aidl
|
||||
46
aidl/touch/KeyDisabler.cpp
Normal file
46
aidl/touch/KeyDisabler.cpp
Normal file
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2025 The LineageOS Project
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#define LOG_TAG "vendor.lineage.touch-service.xiaomi"
|
||||
|
||||
#include "KeyDisabler.h"
|
||||
|
||||
#include <android-base/file.h>
|
||||
#include <android-base/logging.h>
|
||||
#include <android-base/strings.h>
|
||||
|
||||
using ::android::base::ReadFileToString;
|
||||
using ::android::base::Trim;
|
||||
using ::android::base::WriteStringToFile;
|
||||
|
||||
namespace aidl {
|
||||
namespace vendor {
|
||||
namespace lineage {
|
||||
namespace touch {
|
||||
|
||||
ndk::ScopedAStatus KeyDisabler::getEnabled(bool* _aidl_return) {
|
||||
std::string buf;
|
||||
if (!ReadFileToString(KD_CONTROL_PATH, &buf)) {
|
||||
LOG(ERROR) << "Failed to read current KeyDisabler state";
|
||||
return ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
|
||||
}
|
||||
|
||||
*_aidl_return = Trim(buf) == "0";
|
||||
return ndk::ScopedAStatus::ok();
|
||||
}
|
||||
|
||||
ndk::ScopedAStatus KeyDisabler::setEnabled(bool enabled) {
|
||||
if (!WriteStringToFile(enabled ? "0" : "1", KD_CONTROL_PATH, true)) {
|
||||
LOG(ERROR) << "Failed to write KeyDisabler state";
|
||||
return ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
|
||||
}
|
||||
|
||||
return ndk::ScopedAStatus::ok();
|
||||
}
|
||||
|
||||
} // namespace touch
|
||||
} // namespace lineage
|
||||
} // namespace vendor
|
||||
} // namespace aidl
|
||||
24
aidl/touch/KeyDisabler.h
Normal file
24
aidl/touch/KeyDisabler.h
Normal file
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2025 The LineageOS Project
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <aidl/vendor/lineage/touch/BnKeyDisabler.h>
|
||||
|
||||
namespace aidl {
|
||||
namespace vendor {
|
||||
namespace lineage {
|
||||
namespace touch {
|
||||
|
||||
class KeyDisabler : public BnKeyDisabler {
|
||||
public:
|
||||
ndk::ScopedAStatus getEnabled(bool* _aidl_return) override;
|
||||
ndk::ScopedAStatus setEnabled(bool enabled) override;
|
||||
};
|
||||
|
||||
} // namespace touch
|
||||
} // namespace lineage
|
||||
} // namespace vendor
|
||||
} // namespace aidl
|
||||
46
aidl/touch/KeySwapper.cpp
Normal file
46
aidl/touch/KeySwapper.cpp
Normal file
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2025 The LineageOS Project
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#define LOG_TAG "vendor.lineage.touch-service.xiaomi"
|
||||
|
||||
#include "KeySwapper.h"
|
||||
|
||||
#include <android-base/file.h>
|
||||
#include <android-base/logging.h>
|
||||
#include <android-base/strings.h>
|
||||
|
||||
using ::android::base::ReadFileToString;
|
||||
using ::android::base::Trim;
|
||||
using ::android::base::WriteStringToFile;
|
||||
|
||||
namespace aidl {
|
||||
namespace vendor {
|
||||
namespace lineage {
|
||||
namespace touch {
|
||||
|
||||
ndk::ScopedAStatus KeySwapper::getEnabled(bool* _aidl_return) {
|
||||
std::string buf;
|
||||
if (!ReadFileToString(KS_CONTROL_PATH, &buf)) {
|
||||
LOG(ERROR) << "Failed to read current KeySwapper state";
|
||||
return ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
|
||||
}
|
||||
|
||||
*_aidl_return = Trim(buf) == "1";
|
||||
return ndk::ScopedAStatus::ok();
|
||||
}
|
||||
|
||||
ndk::ScopedAStatus KeySwapper::setEnabled(bool enabled) {
|
||||
if (!WriteStringToFile(enabled ? "1" : "0", KS_CONTROL_PATH, true)) {
|
||||
LOG(ERROR) << "Failed to write KeySwapper state";
|
||||
return ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
|
||||
}
|
||||
|
||||
return ndk::ScopedAStatus::ok();
|
||||
}
|
||||
|
||||
} // namespace touch
|
||||
} // namespace lineage
|
||||
} // namespace vendor
|
||||
} // namespace aidl
|
||||
24
aidl/touch/KeySwapper.h
Normal file
24
aidl/touch/KeySwapper.h
Normal file
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2025 The LineageOS Project
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <aidl/vendor/lineage/touch/BnKeySwapper.h>
|
||||
|
||||
namespace aidl {
|
||||
namespace vendor {
|
||||
namespace lineage {
|
||||
namespace touch {
|
||||
|
||||
class KeySwapper : public BnKeySwapper {
|
||||
public:
|
||||
ndk::ScopedAStatus getEnabled(bool* _aidl_return) override;
|
||||
ndk::ScopedAStatus setEnabled(bool enabled) override;
|
||||
};
|
||||
|
||||
} // namespace touch
|
||||
} // namespace lineage
|
||||
} // namespace vendor
|
||||
} // namespace aidl
|
||||
48
aidl/touch/service.cpp
Normal file
48
aidl/touch/service.cpp
Normal file
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2025 The LineageOS Project
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#define LOG_TAG "vendor.lineage.touch-service.xiaomi"
|
||||
|
||||
#include "HighTouchPollingRate.h"
|
||||
#include "KeyDisabler.h"
|
||||
#include "KeySwapper.h"
|
||||
|
||||
#include <android-base/logging.h>
|
||||
#include <android/binder_manager.h>
|
||||
#include <android/binder_process.h>
|
||||
|
||||
using aidl::vendor::lineage::touch::HighTouchPollingRate;
|
||||
using aidl::vendor::lineage::touch::KeyDisabler;
|
||||
using aidl::vendor::lineage::touch::KeySwapper;
|
||||
|
||||
int main() {
|
||||
binder_status_t status = STATUS_OK;
|
||||
|
||||
ABinderProcess_setThreadPoolMaxThreadCount(0);
|
||||
|
||||
#ifdef HTPR_CONTROL_PATH
|
||||
std::shared_ptr<HighTouchPollingRate> htpr = ndk::SharedRefBase::make<HighTouchPollingRate>();
|
||||
const std::string htpr_instance = std::string(HighTouchPollingRate::descriptor) + "/default";
|
||||
status = AServiceManager_addService(htpr->asBinder().get(), htpr_instance.c_str());
|
||||
CHECK_EQ(status, STATUS_OK) << "Failed to add service " << htpr_instance << " " << status;
|
||||
#endif
|
||||
|
||||
#ifdef KD_CONTROL_PATH
|
||||
std::shared_ptr<KeyDisabler> kd = ndk::SharedRefBase::make<KeyDisabler>();
|
||||
const std::string kd_instance = std::string(KeyDisabler::descriptor) + "/default";
|
||||
status = AServiceManager_addService(kd->asBinder().get(), kd_instance.c_str());
|
||||
CHECK_EQ(status, STATUS_OK) << "Failed to add service " << kd_instance << " " << status;
|
||||
#endif
|
||||
|
||||
#ifdef KS_CONTROL_PATH
|
||||
std::shared_ptr<KeySwapper> ks = ndk::SharedRefBase::make<KeySwapper>();
|
||||
const std::string ks_instance = std::string(KeySwapper::descriptor) + "/default";
|
||||
status = AServiceManager_addService(ks->asBinder().get(), ks_instance.c_str());
|
||||
CHECK_EQ(status, STATUS_OK) << "Failed to add service " << ks_instance << " " << status;
|
||||
#endif
|
||||
|
||||
ABinderProcess_joinThreadPool();
|
||||
return EXIT_FAILURE; // should not reach
|
||||
}
|
||||
@@ -1,8 +1,7 @@
|
||||
<manifest version="1.0" type="device">
|
||||
<hal format="hidl">
|
||||
<hal format="aidl">
|
||||
<name>vendor.lineage.touch</name>
|
||||
<transport>hwbinder</transport>
|
||||
<version>1.0</version>
|
||||
<version>1</version>
|
||||
<interface>
|
||||
<name>IHighTouchPollingRate</name>
|
||||
<instance>default</instance>
|
||||
10
aidl/touch/vendor.lineage.touch-service.xiaomi-kd.xml
Normal file
10
aidl/touch/vendor.lineage.touch-service.xiaomi-kd.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<manifest version="1.0" type="device">
|
||||
<hal format="aidl">
|
||||
<name>vendor.lineage.touch</name>
|
||||
<version>1</version>
|
||||
<interface>
|
||||
<name>IKeyDisabler</name>
|
||||
<instance>default</instance>
|
||||
</interface>
|
||||
</hal>
|
||||
</manifest>
|
||||
10
aidl/touch/vendor.lineage.touch-service.xiaomi-ks.xml
Normal file
10
aidl/touch/vendor.lineage.touch-service.xiaomi-ks.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<manifest version="1.0" type="device">
|
||||
<hal format="aidl">
|
||||
<name>vendor.lineage.touch</name>
|
||||
<version>1</version>
|
||||
<interface>
|
||||
<name>IKeySwapper</name>
|
||||
<instance>default</instance>
|
||||
</interface>
|
||||
</hal>
|
||||
</manifest>
|
||||
4
aidl/touch/vendor.lineage.touch-service.xiaomi.rc
Normal file
4
aidl/touch/vendor.lineage.touch-service.xiaomi.rc
Normal file
@@ -0,0 +1,4 @@
|
||||
service vendor.touch-hal /vendor/bin/hw/vendor.lineage.touch-service.xiaomi
|
||||
class hal
|
||||
user system
|
||||
group system
|
||||
@@ -10,7 +10,8 @@
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
||||
|
||||
<application
|
||||
android:allowBackup="true"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:allowBackup="false"
|
||||
android:label="@string/dolby_title"
|
||||
android:persistent="true">
|
||||
|
||||
@@ -36,6 +37,10 @@
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.CATEGORY_CONTENT_MUSIC" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
</intent-filter>
|
||||
<meta-data android:name="com.android.settings.category"
|
||||
android:value="com.android.settings.category.ia.sound" />
|
||||
<meta-data android:name="com.android.settings.summary_uri"
|
||||
|
||||
12
dolby/res/drawable/ic_launcher_background.xml
Normal file
12
dolby/res/drawable/ic_launcher_background.xml
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector android:height="108.0dip" android:width="108.0dip" android:viewportWidth="108.0" android:viewportHeight="108.0"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt">
|
||||
<group android:scaleX="1.3544992" android:scaleY="1.3544992" android:translateX="-23.22" android:translateY="-23.22">
|
||||
<group>
|
||||
<clip-path android:pathData="M57.01,57.01m-54,0a54,54 0,1 1,108 0a54,54 0,1 1,-108 0" />
|
||||
<path android:fillColor="#ffeaedef" android:pathData="M-1.9,-1.9h117.82v117.82h-117.82z" />
|
||||
<path android:fillColor="@drawable/ic_launcher_background__0" android:pathData="M-1.9,115.92l0,-117.82l117.82,0l-117.82,117.82z" />
|
||||
<path android:fillColor="@drawable/ic_launcher_background__1" android:pathData="M-1.9,-1.9h117.82v117.82h-117.82z" android:strokeAlpha="0.2" android:fillAlpha="0.2" />
|
||||
</group>
|
||||
</group>
|
||||
</vector>
|
||||
6
dolby/res/drawable/ic_launcher_background__0.xml
Normal file
6
dolby/res/drawable/ic_launcher_background__0.xml
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<gradient android:angle="0.0" android:type="linear" android:startX="57.01" android:startY="56.4" android:endX="57.01" android:endY="-1.58"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt">
|
||||
<item android:color="#ffffffff" android:offset="0.0" />
|
||||
<item android:color="#fff3f5f6" android:offset="1.0" />
|
||||
</gradient>
|
||||
6
dolby/res/drawable/ic_launcher_background__1.xml
Normal file
6
dolby/res/drawable/ic_launcher_background__1.xml
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<gradient android:angle="0.0" android:type="linear" android:startX="-1.9" android:startY="115.92" android:endX="115.92" android:endY="-1.9"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt">
|
||||
<item android:color="#ff80d0ce" android:offset="0.0" />
|
||||
<item android:color="#ff9fa8da" android:offset="1.0" />
|
||||
</gradient>
|
||||
8
dolby/res/drawable/ic_launcher_foreground.xml
Normal file
8
dolby/res/drawable/ic_launcher_foreground.xml
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector android:height="108.0dip" android:width="108.0dip" android:viewportWidth="108.0" android:viewportHeight="108.0"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<group android:scaleX="0.84" android:scaleY="0.84" android:translateX="23.76" android:translateY="23.76">
|
||||
<path android:fillColor="#ff465461" android:pathData="M12,19.13h5a16.87,16.87 0,0 1,0 33.74H12Z" />
|
||||
<path android:fillColor="#ff465461" android:pathData="M60,52.87H55a16.87,16.87 0,0 1,0 -33.74h5Z" />
|
||||
</group>
|
||||
</vector>
|
||||
4
dolby/res/drawable/ic_launcher_mono.xml
Normal file
4
dolby/res/drawable/ic_launcher_mono.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="108dp" android:width="108dp" android:viewportWidth="108" android:viewportHeight="108">
|
||||
<path android:fillColor="#000000" android:pathData="M36.6305484,38 C45.6078241,38.1592687 52.837468,45.7082857 52.837468,54.9974325 C52.837468,64.2865794 45.6078241,71.8355964 36.6307694,71.9948651 L32,72 L32,38 L36.6305484,38 Z M36.999,43.017 L36.999,66.977 L37.1225728,66.9701894 C42.9872179,66.559014 47.6837958,61.5395304 47.8337726,55.3050128 L47.837468,54.9974325 C47.837468,48.6211219 43.0833381,43.4425908 37.1223719,43.0246757 L36.999,43.017 Z M71.3694516,38 C62.3921759,38.1592687 55.162532,45.7082857 55.162532,54.9974325 C55.162532,64.2865794 62.3921759,71.8355964 71.3692306,71.9948651 L76,72 L76,38 L71.3694516,38 Z M71.000532,43.017 L71.000532,66.977 L70.8774272,66.9701894 C65.0127821,66.559014 60.3162042,61.5395304 60.1662274,55.3050128 L60.162532,54.9974325 C60.162532,48.6211219 64.9166619,43.4425908 70.8776281,43.0246757 L71.000532,43.017 Z" android:strokeWidth="1"/>
|
||||
</vector>
|
||||
7
dolby/res/mipmap-anydpi/ic_launcher.xml
Normal file
7
dolby/res/mipmap-anydpi/ic_launcher.xml
Normal file
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@drawable/ic_launcher_background" />
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
||||
<monochrome android:drawable="@drawable/ic_launcher_mono" />
|
||||
</adaptive-icon>
|
||||
@@ -17,7 +17,7 @@ class DolbyActivity : CollapsingToolbarBaseActivity() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
fragmentManager.beginTransaction()
|
||||
.replace(com.android.settingslib.collapsingtoolbar.R.id.content_frame, DolbySettingsFragment(), TAG)
|
||||
.commit()
|
||||
.replace(com.android.settingslib.collapsingtoolbar.R.id.content_frame, DolbySettingsFragment(), TAG)
|
||||
.commit()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ internal class DolbyController private constructor(
|
||||
private val context: Context
|
||||
) {
|
||||
private var dolbyEffect = DolbyAudioEffect(EFFECT_PRIORITY, audioSession = 0)
|
||||
private val audioManager = context.getSystemService(AudioManager::class.java)
|
||||
private val audioManager = context.getSystemService(AudioManager::class.java)!!
|
||||
private val handler = Handler(context.mainLooper)
|
||||
|
||||
// Restore current profile on every media session
|
||||
@@ -57,10 +57,10 @@ internal class DolbyController private constructor(
|
||||
field = value
|
||||
dlog(TAG, "setRegisterCallbacks($value)")
|
||||
if (value) {
|
||||
audioManager!!.registerAudioPlaybackCallback(playbackCallback, handler)
|
||||
audioManager.registerAudioPlaybackCallback(playbackCallback, handler)
|
||||
audioManager.registerAudioDeviceCallback(audioDeviceCallback, handler)
|
||||
} else {
|
||||
audioManager!!.unregisterAudioPlaybackCallback(playbackCallback)
|
||||
audioManager.unregisterAudioPlaybackCallback(playbackCallback)
|
||||
audioManager.unregisterAudioDeviceCallback(audioDeviceCallback)
|
||||
}
|
||||
}
|
||||
@@ -102,13 +102,13 @@ internal class DolbyController private constructor(
|
||||
dsOn = prefs.getBoolean(DolbyConstants.PREF_ENABLE, true)
|
||||
|
||||
context.resources.getStringArray(R.array.dolby_profile_values)
|
||||
.map { it.toInt() }
|
||||
.forEach { profile ->
|
||||
// Reset dolby first to prevent it from loading bad settings
|
||||
dolbyEffect.resetProfileSpecificSettings(profile)
|
||||
// Now restore our profile-specific settings
|
||||
restoreSettings(profile)
|
||||
}
|
||||
.map { it.toInt() }
|
||||
.forEach { profile ->
|
||||
// Reset dolby first to prevent it from loading bad settings
|
||||
dolbyEffect.resetProfileSpecificSettings(profile)
|
||||
// Now restore our profile-specific settings
|
||||
restoreSettings(profile)
|
||||
}
|
||||
|
||||
// Finally restore the current profile.
|
||||
setCurrentProfile()
|
||||
@@ -174,6 +174,13 @@ internal class DolbyController private constructor(
|
||||
profile = prefs.getString(DolbyConstants.PREF_PROFILE, "0" /*dynamic*/)!!.toInt()
|
||||
}
|
||||
|
||||
fun setDsOnAndPersist(dsOn: Boolean) {
|
||||
this.dsOn = dsOn
|
||||
PreferenceManager.getDefaultSharedPreferences(context).edit()
|
||||
.putBoolean(DolbyConstants.PREF_ENABLE, dsOn)
|
||||
.apply()
|
||||
}
|
||||
|
||||
fun getProfileName(): String? {
|
||||
val profile = dolbyEffect.profile.toString()
|
||||
val profiles = context.resources.getStringArray(R.array.dolby_profile_values)
|
||||
@@ -202,8 +209,8 @@ internal class DolbyController private constructor(
|
||||
dlog(TAG, "setPreset: $value")
|
||||
checkEffect()
|
||||
val gains = value.split(",")
|
||||
.map { it.toInt() }
|
||||
.toIntArray()
|
||||
.map { it.toInt() }
|
||||
.toIntArray()
|
||||
dolbyEffect.setDapParameter(DsParam.GEQ_BAND_GAINS, gains, profile)
|
||||
}
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ class DolbyTileService : TileService() {
|
||||
|
||||
override fun onClick() {
|
||||
val isDsOn = dolbyController.dsOn
|
||||
dolbyController.dsOn = !isDsOn
|
||||
dolbyController.setDsOnAndPersist(!isDsOn) // toggle
|
||||
qsTile.apply {
|
||||
state = if (isDsOn) Tile.STATE_INACTIVE else Tile.STATE_ACTIVE
|
||||
updateTile()
|
||||
|
||||
@@ -58,13 +58,14 @@ class SummaryProvider : ContentProvider() {
|
||||
): Int = 0
|
||||
|
||||
private fun getDolbySummary(): String {
|
||||
val dolbyController = DolbyController.getInstance(context!!)
|
||||
val context = context!!
|
||||
val dolbyController = DolbyController.getInstance(context)
|
||||
if (!dolbyController.dsOn) {
|
||||
return context!!.getString(R.string.dolby_off)
|
||||
return context.getString(R.string.dolby_off)
|
||||
}
|
||||
return dolbyController.getProfileName()?.let {
|
||||
context!!.getString(R.string.dolby_on_with_profile, it)
|
||||
} ?: context!!.getString(R.string.dolby_on)
|
||||
context.getString(R.string.dolby_on_with_profile, it)
|
||||
} ?: context.getString(R.string.dolby_on)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ fun TooltipIconButton(
|
||||
onClick: () -> Unit
|
||||
) {
|
||||
TooltipBox(
|
||||
positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(),
|
||||
positionProvider = TooltipDefaults.rememberTooltipPositionProvider(),
|
||||
tooltip = {
|
||||
Text(text)
|
||||
},
|
||||
|
||||
@@ -40,24 +40,24 @@ class DolbyPreferenceStore(
|
||||
|
||||
override fun putBoolean(key: String, value: Boolean) =
|
||||
getSharedPreferences(key).edit()
|
||||
.putBoolean(key, value)
|
||||
.apply()
|
||||
.putBoolean(key, value)
|
||||
.apply()
|
||||
|
||||
override fun getBoolean(key: String, defValue: Boolean) =
|
||||
getSharedPreferences(key).getBoolean(key, defValue)
|
||||
|
||||
override fun putInt(key: String, value: Int) =
|
||||
getSharedPreferences(key).edit()
|
||||
.putInt(key, value)
|
||||
.apply()
|
||||
.putInt(key, value)
|
||||
.apply()
|
||||
|
||||
override fun getInt(key: String, defValue: Int) =
|
||||
getSharedPreferences(key).getInt(key, defValue)
|
||||
|
||||
override fun putString(key: String, value: String?) =
|
||||
getSharedPreferences(key).edit()
|
||||
.putString(key, value)
|
||||
.apply()
|
||||
.putString(key, value)
|
||||
.apply()
|
||||
|
||||
override fun getString(key: String, defValue: String?) =
|
||||
getSharedPreferences(key).getString(key, defValue)
|
||||
|
||||
@@ -13,6 +13,7 @@ import android.media.AudioManager
|
||||
import android.os.Bundle
|
||||
import android.os.Handler
|
||||
import android.widget.CompoundButton
|
||||
import android.widget.CompoundButton.OnCheckedChangeListener
|
||||
import android.widget.Toast
|
||||
import androidx.preference.ListPreference
|
||||
import androidx.preference.Preference
|
||||
@@ -37,7 +38,7 @@ import co.aospa.dolby.xiaomi.R
|
||||
import com.android.settingslib.widget.MainSwitchPreference
|
||||
|
||||
class DolbySettingsFragment : PreferenceFragment(),
|
||||
OnPreferenceChangeListener, CompoundButton.OnCheckedChangeListener {
|
||||
OnPreferenceChangeListener, OnCheckedChangeListener {
|
||||
|
||||
private val switchBar by lazy {
|
||||
findPreference<MainSwitchPreference>(PREF_ENABLE)!!
|
||||
@@ -74,7 +75,7 @@ class DolbySettingsFragment : PreferenceFragment(),
|
||||
}
|
||||
|
||||
private val dolbyController by lazy { DolbyController.getInstance(context) }
|
||||
private val audioManager by lazy { context.getSystemService(AudioManager::class.java) }
|
||||
private val audioManager by lazy { context.getSystemService(AudioManager::class.java)!! }
|
||||
private val handler = Handler()
|
||||
|
||||
private var isOnSpeaker = true
|
||||
@@ -141,14 +142,14 @@ class DolbySettingsFragment : PreferenceFragment(),
|
||||
true
|
||||
}
|
||||
|
||||
audioManager!!.registerAudioDeviceCallback(audioDeviceCallback, handler)
|
||||
audioManager.registerAudioDeviceCallback(audioDeviceCallback, handler)
|
||||
updateSpeakerState()
|
||||
updateProfileSpecificPrefs()
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
dlog(TAG, "onDestroyView")
|
||||
audioManager!!.unregisterAudioDeviceCallback(audioDeviceCallback)
|
||||
audioManager.unregisterAudioDeviceCallback(audioDeviceCallback)
|
||||
super.onDestroyView()
|
||||
}
|
||||
|
||||
@@ -209,7 +210,7 @@ class DolbySettingsFragment : PreferenceFragment(),
|
||||
}
|
||||
|
||||
private fun updateSpeakerState() {
|
||||
val device = audioManager!!.getDevicesForAttributes(ATTRIBUTES_MEDIA)[0]
|
||||
val device = audioManager.getDevicesForAttributes(ATTRIBUTES_MEDIA)[0]
|
||||
isOnSpeaker = (device.type == AudioDeviceInfo.TYPE_BUILTIN_SPEAKER)
|
||||
}
|
||||
|
||||
@@ -299,7 +300,7 @@ class DolbySettingsFragment : PreferenceFragment(),
|
||||
companion object {
|
||||
private const val TAG = "DolbySettingsFragment"
|
||||
private val ATTRIBUTES_MEDIA = AudioAttributes.Builder()
|
||||
.setUsage(AudioAttributes.USAGE_MEDIA)
|
||||
.build()
|
||||
.setUsage(AudioAttributes.USAGE_MEDIA)
|
||||
.build()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2022 The LineageOS Project
|
||||
* Copyright (C) 2022,2025 The LineageOS Project
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
@@ -13,12 +13,14 @@ class UdfpsHandler {
|
||||
public:
|
||||
virtual ~UdfpsHandler() = default;
|
||||
|
||||
virtual void init(fingerprint_device_t* device) = 0;
|
||||
virtual void onFingerDown(uint32_t x, uint32_t y, float minor, float major) = 0;
|
||||
virtual void onFingerUp() = 0;
|
||||
virtual void init(fingerprint_device_t* device) {};
|
||||
virtual void onFingerDown(uint32_t x, uint32_t y, float minor, float major) {};
|
||||
virtual void onFingerUp() {};
|
||||
|
||||
virtual void onAcquired(int32_t result, int32_t vendorCode) = 0;
|
||||
virtual void cancel() = 0;
|
||||
virtual void onAcquired(int32_t result, int32_t vendorCode) {};
|
||||
virtual void onAuthenticationSucceeded() {};
|
||||
virtual void onAuthenticationFailed() {};
|
||||
virtual void cancel() {};
|
||||
};
|
||||
|
||||
struct UdfpsHandlerFactory {
|
||||
|
||||
@@ -1,45 +0,0 @@
|
||||
//
|
||||
// Copyright (C) 2022 The LineageOS Project
|
||||
//
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
soong_config_module_type {
|
||||
name: "xiaomi_touch_hal_cc_defaults",
|
||||
module_type: "cc_defaults",
|
||||
config_namespace: "XIAOMI_TOUCH",
|
||||
value_variables: ["HIGH_TOUCH_POLLING_PATH"],
|
||||
properties: ["cppflags"],
|
||||
}
|
||||
|
||||
xiaomi_touch_hal_cc_defaults {
|
||||
name: "xiaomi_touch_hal_defaults",
|
||||
soong_config_variables: {
|
||||
HIGH_TOUCH_POLLING_PATH: {
|
||||
cppflags: ["-DHIGH_TOUCH_POLLING_PATH=\"%s\""],
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
cc_binary {
|
||||
name: "vendor.lineage.touch@1.0-service.xiaomi",
|
||||
defaults: [
|
||||
"hidl_defaults",
|
||||
"xiaomi_touch_hal_defaults",
|
||||
],
|
||||
vintf_fragments: ["vendor.lineage.touch@1.0-service.xiaomi.xml"],
|
||||
init_rc: ["vendor.lineage.touch@1.0-service.xiaomi.rc"],
|
||||
relative_install_path: "hw",
|
||||
proprietary: true,
|
||||
srcs: [
|
||||
"HighTouchPollingRate.cpp",
|
||||
"service.cpp",
|
||||
],
|
||||
shared_libs: [
|
||||
"libbase",
|
||||
"libbinder",
|
||||
"libhidlbase",
|
||||
"libutils",
|
||||
"vendor.lineage.touch@1.0",
|
||||
],
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2022 The LineageOS Project
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#define LOG_TAG "HighTouchPollingRateService"
|
||||
|
||||
#include "HighTouchPollingRate.h"
|
||||
|
||||
#include <fstream>
|
||||
|
||||
namespace vendor {
|
||||
namespace lineage {
|
||||
namespace touch {
|
||||
namespace V1_0 {
|
||||
namespace implementation {
|
||||
|
||||
Return<bool> HighTouchPollingRate::isEnabled() {
|
||||
std::ifstream file(HIGH_TOUCH_POLLING_PATH);
|
||||
int enabled;
|
||||
file >> enabled;
|
||||
|
||||
return enabled == 1;
|
||||
}
|
||||
|
||||
Return<bool> HighTouchPollingRate::setEnabled(bool enabled) {
|
||||
std::ofstream file(HIGH_TOUCH_POLLING_PATH);
|
||||
file << (enabled ? "1" : "0");
|
||||
return !file.fail();
|
||||
}
|
||||
|
||||
} // namespace implementation
|
||||
} // namespace V1_0
|
||||
} // namespace touch
|
||||
} // namespace lineage
|
||||
} // namespace vendor
|
||||
@@ -1,30 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2022 The LineageOS Project
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <vendor/lineage/touch/1.0/IHighTouchPollingRate.h>
|
||||
|
||||
namespace vendor {
|
||||
namespace lineage {
|
||||
namespace touch {
|
||||
namespace V1_0 {
|
||||
namespace implementation {
|
||||
|
||||
using ::android::hardware::Return;
|
||||
|
||||
class HighTouchPollingRate : public IHighTouchPollingRate {
|
||||
public:
|
||||
// Methods from ::vendor::lineage::touch::V1_0::IHighTouchPollingRate follow.
|
||||
Return<bool> isEnabled() override;
|
||||
Return<bool> setEnabled(bool enabled) override;
|
||||
};
|
||||
|
||||
} // namespace implementation
|
||||
} // namespace V1_0
|
||||
} // namespace touch
|
||||
} // namespace lineage
|
||||
} // namespace vendor
|
||||
@@ -1,33 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2022 The LineageOS Project
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#define LOG_TAG "lineage.touch@1.0-service.xiaomi"
|
||||
|
||||
#include <android-base/logging.h>
|
||||
#include <hidl/HidlTransportSupport.h>
|
||||
|
||||
#include "HighTouchPollingRate.h"
|
||||
|
||||
using ::vendor::lineage::touch::V1_0::IHighTouchPollingRate;
|
||||
using ::vendor::lineage::touch::V1_0::implementation::HighTouchPollingRate;
|
||||
|
||||
int main() {
|
||||
android::sp<IHighTouchPollingRate> highTouchPollingRate = new HighTouchPollingRate();
|
||||
|
||||
android::hardware::configureRpcThreadpool(1, true);
|
||||
|
||||
if (highTouchPollingRate->registerAsService() != android::OK) {
|
||||
LOG(ERROR) << "Cannot register touchscreen high polling rate HAL service.";
|
||||
return 1;
|
||||
}
|
||||
|
||||
LOG(INFO) << "Touchscreen HAL service ready.";
|
||||
|
||||
android::hardware::joinRpcThreadpool();
|
||||
|
||||
LOG(ERROR) << "Touchscreen HAL service failed to join thread pool.";
|
||||
return 1;
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
service vendor.touch-hal-1-0 /vendor/bin/hw/vendor.lineage.touch@1.0-service.xiaomi
|
||||
interface vendor.lineage.touch@1.0::IHighTouchPollingRate default
|
||||
class hal
|
||||
user system
|
||||
group system
|
||||
@@ -1,3 +1,8 @@
|
||||
//
|
||||
// SPDX-FileCopyrightText: 2020-2025 The LineageOS Project
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
hidl_package_root {
|
||||
name: "com.fingerprints",
|
||||
path: "hardware/xiaomi/interfaces/fingerprints",
|
||||
@@ -12,3 +17,129 @@ hidl_package_root {
|
||||
name: "vendor.xiaomi",
|
||||
path: "hardware/xiaomi/interfaces/xiaomi",
|
||||
}
|
||||
|
||||
prebuilt_hidl_interfaces {
|
||||
name: "hidl_com_fingerprints_extension_interface",
|
||||
interfaces: [
|
||||
"com.fingerprints.extension@3.0::IFingerprintAuthenticator",
|
||||
"com.fingerprints.extension@3.0::IFingerprintCalibration",
|
||||
"com.fingerprints.extension@3.0::IFingerprintEngineering",
|
||||
"com.fingerprints.extension@3.0::IFingerprintNavigation",
|
||||
"com.fingerprints.extension@3.0::IFingerprintOptical",
|
||||
"com.fingerprints.extension@3.0::IFingerprintRecalibration",
|
||||
"com.fingerprints.extension@3.0::IFingerprintSenseTouch",
|
||||
"com.fingerprints.extension@3.0::IFingerprintSensorTest",
|
||||
],
|
||||
}
|
||||
|
||||
prebuilt_hidl_interfaces {
|
||||
name: "hidl_vendor_focaltech_fingerprint_interface",
|
||||
interfaces: [
|
||||
"vendor.focaltech.fingerprint@1.0::IFocalFingerprintService",
|
||||
],
|
||||
}
|
||||
|
||||
prebuilt_hidl_interfaces {
|
||||
name: "hidl_vendor_goodix_hardware_cap_biometrics_fingerprint_interface",
|
||||
interfaces: [
|
||||
"vendor.goodix.hardware.cap.biometrics.fingerprint@2.1::IGoodixFingerprintDaemon",
|
||||
"vendor.goodix.hardware.cap.biometrics.fingerprint@2.1::IGoodixFingerprintDaemonExt",
|
||||
],
|
||||
}
|
||||
|
||||
prebuilt_hidl_interfaces {
|
||||
name: "hidl_vendor_pixelworks_hardware_display_interface",
|
||||
interfaces: [
|
||||
"vendor.pixelworks.hardware.display@1.0::IIris",
|
||||
],
|
||||
}
|
||||
|
||||
prebuilt_hidl_interfaces {
|
||||
name: "hidl_vendor_silead_hardware_fingerprintext_interface",
|
||||
interfaces: [
|
||||
"vendor.silead.hardware.fingerprintext@1.0::ISileadFingerprint",
|
||||
],
|
||||
}
|
||||
|
||||
prebuilt_hidl_interfaces {
|
||||
name: "hidl_vendor_synaptics_fingerprints_interfaces_extensions_interface",
|
||||
interfaces: [
|
||||
"vendor.synaptics.fingerprints.interfaces.extensions@1.0::IFpCollection",
|
||||
"vendor.synaptics.fingerprints.interfaces.extensions@1.0::INavigation",
|
||||
"vendor.synaptics.fingerprints.interfaces.extensions@1.0::ISensorTest",
|
||||
],
|
||||
}
|
||||
|
||||
prebuilt_hidl_interfaces {
|
||||
name: "hidl_vendor_xiaomi_hardware_bgservice_interface",
|
||||
interfaces: [
|
||||
"vendor.xiaomi.hardware.bgservice@1.0::IBGService",
|
||||
],
|
||||
}
|
||||
|
||||
prebuilt_hidl_interfaces {
|
||||
name: "hidl_vendor_xiaomi_hardware_cameraperf_interface",
|
||||
interfaces: [
|
||||
"vendor.xiaomi.hardware.cameraperf@1.0::IMiCameraPerfService",
|
||||
],
|
||||
}
|
||||
|
||||
prebuilt_hidl_interfaces {
|
||||
name: "hidl_vendor_xiaomi_hardware_campostproc_interface",
|
||||
interfaces: [
|
||||
"vendor.xiaomi.hardware.campostproc@1.0::IMiPostProcService",
|
||||
],
|
||||
}
|
||||
|
||||
prebuilt_hidl_interfaces {
|
||||
name: "hidl_vendor_xiaomi_hardware_citsensorservice_interface",
|
||||
interfaces: [
|
||||
"vendor.xiaomi.hardware.citsensorservice@1.0::ICitSensorService",
|
||||
"vendor.xiaomi.hardware.citsensorservice@1.1::ICitSensorService",
|
||||
],
|
||||
}
|
||||
|
||||
prebuilt_hidl_interfaces {
|
||||
name: "hidl_vendor_xiaomi_hardware_dtool_interface",
|
||||
interfaces: [
|
||||
"vendor.xiaomi.hardware.dtool@1.0::IDtool",
|
||||
],
|
||||
}
|
||||
|
||||
prebuilt_hidl_interfaces {
|
||||
name: "hidl_vendor_xiaomi_hardware_micharge_interface",
|
||||
interfaces: [
|
||||
"vendor.xiaomi.hardware.micharge@1.0::IMiCharge",
|
||||
],
|
||||
}
|
||||
|
||||
prebuilt_hidl_interfaces {
|
||||
name: "hidl_vendor_xiaomi_hardware_quickcamera_interface",
|
||||
interfaces: [
|
||||
"vendor.xiaomi.hardware.quickcamera@1.0::IQuickCameraService",
|
||||
],
|
||||
}
|
||||
|
||||
prebuilt_hidl_interfaces {
|
||||
name: "hidl_vendor_xiaomi_hardware_tidaservice_interface",
|
||||
interfaces: [
|
||||
"vendor.xiaomi.hardware.tidaservice@1.0::ITidaService",
|
||||
"vendor.xiaomi.hardware.tidaservice@1.1::ITidaService",
|
||||
"vendor.xiaomi.hardware.tidaservice@1.2::ITidaService",
|
||||
],
|
||||
}
|
||||
|
||||
prebuilt_hidl_interfaces {
|
||||
name: "hidl_vendor_xiaomi_sensor_citsensorservice_interface",
|
||||
interfaces: [
|
||||
"vendor.xiaomi.sensor.citsensorservice@1.1::ICitSensorService",
|
||||
"vendor.xiaomi.sensor.citsensorservice@2.0::ICitSensorService",
|
||||
],
|
||||
}
|
||||
|
||||
prebuilt_hidl_interfaces {
|
||||
name: "hidl_vendor_xiaomi_sensor_communicate_interface",
|
||||
interfaces: [
|
||||
"vendor.xiaomi.sensor.communicate@1.0::ISensorCommunicate",
|
||||
],
|
||||
}
|
||||
|
||||
@@ -19,12 +19,12 @@ package vendor.xiaomi.hardware.displayfeature@1.0;
|
||||
import @1.0::IDisplayFeatureCallback;
|
||||
|
||||
interface IDisplayFeature {
|
||||
notifyBrightness(uint32_t brightness);
|
||||
registerCallback(uint32_t displayId, IDisplayFeatureCallback callback) generates (Status status);
|
||||
sendMessage(uint32_t index, uint32_t value, string cmd);
|
||||
sendPanelCommand(string cmd) generates (Status status);
|
||||
sendPostProcCommand(uint32_t cmd, uint32_t value) generates (Status status);
|
||||
sendRefreshCommand() generates (Status status);
|
||||
setFeature(uint32_t displayId, uint32_t caseId, uint32_t modeId, uint32_t cookie) generates (Status status);
|
||||
registerCallback(uint32_t displayId, IDisplayFeatureCallback callback) generates (Status status);
|
||||
setFunction(uint32_t displayId, uint32_t caseId, uint32_t modeId, uint32_t cookie) generates (Status status);
|
||||
sendMessage(uint32_t index, uint32_t value, string cmd);
|
||||
notifyBrightness(uint32_t brightness);
|
||||
sendPanelCommand(string cmd) generates (Status status);
|
||||
sendRefreshCommand() generates (Status status);
|
||||
sendPostProcCommand(uint32_t cmd, uint32_t value) generates (Status status);
|
||||
};
|
||||
|
||||
@@ -14,8 +14,5 @@ cc_library_shared {
|
||||
"libcutils",
|
||||
"libutils",
|
||||
],
|
||||
static_libs: [
|
||||
"libc++fs",
|
||||
],
|
||||
export_include_dirs: ["."],
|
||||
}
|
||||
|
||||
@@ -57,22 +57,6 @@
|
||||
<instance>default</instance>
|
||||
</interface>
|
||||
</hal>
|
||||
<hal format="hidl" optional="true">
|
||||
<name>vendor.dolby.hardware.dms</name>
|
||||
<version>2.0</version>
|
||||
<interface>
|
||||
<name>IDms</name>
|
||||
<instance>default</instance>
|
||||
</interface>
|
||||
</hal>
|
||||
<hal format="hidl" optional="true">
|
||||
<name>vendor.dolby_v3_6.hardware.dms360</name>
|
||||
<version>2.0</version>
|
||||
<interface>
|
||||
<name>IDms</name>
|
||||
<instance>default</instance>
|
||||
</interface>
|
||||
</hal>
|
||||
<hal format="hidl" optional="true">
|
||||
<name>vendor.goodix.hardware.biometrics.fingerprint</name>
|
||||
<version>2.1</version>
|
||||
@@ -113,6 +97,30 @@
|
||||
<instance>default</instance>
|
||||
</interface>
|
||||
</hal>
|
||||
<hal format="hidl" optional="true">
|
||||
<name>vendor.dolby.hardware.dms</name>
|
||||
<version>2.0</version>
|
||||
<interface>
|
||||
<name>IDms</name>
|
||||
<instance>default</instance>
|
||||
</interface>
|
||||
</hal>
|
||||
<hal format="hidl" optional="true">
|
||||
<name>vendor.dolby_sp.hardware.dmssp</name>
|
||||
<version>2.0</version>
|
||||
<interface>
|
||||
<name>IDms</name>
|
||||
<instance>default</instance>
|
||||
</interface>
|
||||
</hal>
|
||||
<hal format="hidl" optional="true">
|
||||
<name>vendor.dolby_v3_6.hardware.dms360</name>
|
||||
<version>2.0</version>
|
||||
<interface>
|
||||
<name>IDms</name>
|
||||
<instance>default</instance>
|
||||
</interface>
|
||||
</hal>
|
||||
<hal format="hidl" optional="true">
|
||||
<name>vendor.goodix.hardware.fingerprintextension</name>
|
||||
<version>1.0</version>
|
||||
@@ -161,6 +169,14 @@
|
||||
<instance>default</instance>
|
||||
</interface>
|
||||
</hal>
|
||||
<hal format="hidl" optional="true">
|
||||
<name>vendor.xiaomi.hardware.cameraperf</name>
|
||||
<version>1.0</version>
|
||||
<interface>
|
||||
<name>IMiCameraPerfService</name>
|
||||
<instance>default</instance>
|
||||
</interface>
|
||||
</hal>
|
||||
<hal format="hidl" optional="true">
|
||||
<name>vendor.xiaomi.hardware.campostproc</name>
|
||||
<version>1.0</version>
|
||||
@@ -169,6 +185,14 @@
|
||||
<instance>default</instance>
|
||||
</interface>
|
||||
</hal>
|
||||
<hal format="hidl" optional="true">
|
||||
<name>vendor.xiaomi.hardware.citsensorservice</name>
|
||||
<version>1.0-1</version>
|
||||
<interface>
|
||||
<name>ICitSensorService</name>
|
||||
<instance>default</instance>
|
||||
</interface>
|
||||
</hal>
|
||||
<hal format="hidl" optional="true">
|
||||
<name>vendor.xiaomi.hardware.displayfeature</name>
|
||||
<version>1.0</version>
|
||||
@@ -177,6 +201,14 @@
|
||||
<instance>default</instance>
|
||||
</interface>
|
||||
</hal>
|
||||
<hal format="hidl" optional="true">
|
||||
<name>vendor.xiaomi.hardware.dtool</name>
|
||||
<version>1.0</version>
|
||||
<interface>
|
||||
<name>IDtool</name>
|
||||
<instance>default</instance>
|
||||
</interface>
|
||||
</hal>
|
||||
<hal format="hidl" optional="true">
|
||||
<name>vendor.xiaomi.hardware.fingerprintextension</name>
|
||||
<version>1.0</version>
|
||||
@@ -262,7 +294,6 @@
|
||||
</hal>
|
||||
<hal format="hidl" optional="true">
|
||||
<name>vendor.xiaomi.hw.touchfeature</name>
|
||||
<transport>hwbinder</transport>
|
||||
<version>1.0</version>
|
||||
<interface>
|
||||
<name>ITouchFeature</name>
|
||||
|
||||
Reference in New Issue
Block a user