diff --git a/interfaces/Android.bp b/interfaces/Android.bp new file mode 100644 index 0000000..a5936a7 --- /dev/null +++ b/interfaces/Android.bp @@ -0,0 +1,4 @@ +hidl_package_root { + name: "com.fingerprints", + path: "device/motorola/msm8953-common/interfaces", +} diff --git a/interfaces/extension/1.0/Android.bp b/interfaces/extension/1.0/Android.bp new file mode 100644 index 0000000..d9d976f --- /dev/null +++ b/interfaces/extension/1.0/Android.bp @@ -0,0 +1,11 @@ +hidl_interface { + name: "com.fingerprints.extension@1.0", + root: "com.fingerprints", + srcs: [ + "IFingerprintNavigation.hal", + ], + interfaces: [ + "android.hidl.base@1.0", + ], + gen_java: false, +} diff --git a/interfaces/extension/1.0/IFingerprintNavigation.hal b/interfaces/extension/1.0/IFingerprintNavigation.hal new file mode 100644 index 0000000..bb371a6 --- /dev/null +++ b/interfaces/extension/1.0/IFingerprintNavigation.hal @@ -0,0 +1,6 @@ +package com.fingerprints.extension@1.0; + +interface IFingerprintNavigation { + setNavigation(bool enabled); + isEnabled() generates (bool isEnabled); +}; diff --git a/overlay/frameworks/base/core/res/res/values/config.xml b/overlay/frameworks/base/core/res/res/values/config.xml index 8e9b16d..02403f2 100644 --- a/overlay/frameworks/base/core/res/res/values/config.xml +++ b/overlay/frameworks/base/core/res/res/values/config.xml @@ -17,10 +17,6 @@ - - true - true @@ -31,15 +27,6 @@ on the headphone/microphone jack. When false use the older uevent framework. --> true - - - /system/priv-app/MotoActions/MotoActions.apk - - - - com.moto.actions.KeyHandler - - 125 diff --git a/sepolicy/vendor/file_contexts b/sepolicy/vendor/file_contexts index a26e859..ede1dd5 100644 --- a/sepolicy/vendor/file_contexts +++ b/sepolicy/vendor/file_contexts @@ -46,6 +46,7 @@ /(vendor|system/vendor)/bin/hw/android\.hardware\.biometrics\.fingerprint@2\.1-fpcservice u:object_r:hal_fingerprint_fpc_exec:s0 /(vendor|system/vendor)/bin/hw/android\.hardware\.biometrics\.fingerprint@2\.1-service-ets u:object_r:hal_fingerprint_fpc_exec:s0 /(vendor|system/vendor)/bin/hw/android\.hardware\.light@2\.0-service\.msm8953 u:object_r:hal_light_default_exec:s0 +/(vendor|system/vendor)/bin/hw/vendor\.lineage\.touch@1\.0-service\.msm8953 u:object_r:hal_lineage_touch_default_exec:s0 /(vendor|system/vendor)/bin/hw/vendor\.dolby\.hardware\.dms@1\.0-service u:object_r:hal_dms_default_exec:s0 /(vendor|system/vendor)/bin/init\.mmi\.(laser|usb)\.sh u:object_r:qti_init_shell_exec:s0 /(vendor|system/vendor)/bin/init\.qcom\.power\.sh u:object_r:qti_init_shell_exec:s0 diff --git a/sepolicy/vendor/hal_lineage_touch_default.te b/sepolicy/vendor/hal_lineage_touch_default.te new file mode 100644 index 0000000..c554eb3 --- /dev/null +++ b/sepolicy/vendor/hal_lineage_touch_default.te @@ -0,0 +1,5 @@ +# Allow binder communication with hal_fingerprint +binder_call(hal_lineage_touch_default, hal_fingerprint) + +# Allow hal_lineage_touch_default to find fpc_extension_service +allow hal_lineage_touch_default fpc_extension_service:hwservice_manager find; diff --git a/touch/Android.bp b/touch/Android.bp new file mode 100644 index 0000000..998af86 --- /dev/null +++ b/touch/Android.bp @@ -0,0 +1,32 @@ +// Copyright (C) 2019 The LineageOS Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +cc_binary { + name: "vendor.lineage.touch@1.0-service.msm8953", + init_rc: ["vendor.lineage.touch@1.0-service.msm8953.rc"], + defaults: ["hidl_defaults"], + relative_install_path: "hw", + vendor: true, + srcs: [ + "KeyDisabler.cpp", + "service.cpp" + ], + shared_libs: [ + "libbase", + "libhidlbase", + "libutils", + "com.fingerprints.extension@1.0", + "vendor.lineage.touch@1.0", + ], +} diff --git a/touch/KeyDisabler.cpp b/touch/KeyDisabler.cpp new file mode 100644 index 0000000..b8a43f6 --- /dev/null +++ b/touch/KeyDisabler.cpp @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2019 The LineageOS Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +#include "KeyDisabler.h" + +namespace vendor { +namespace lineage { +namespace touch { +namespace V1_0 { +namespace implementation { + +KeyDisabler::KeyDisabler() { + mHasKeyDisabler = false; + + mFingerprintNavigation = IFingerprintNavigation::getService(); + if (mFingerprintNavigation != nullptr) + mHasKeyDisabler = true; +} + +// Methods from ::vendor::lineage::touch::V1_0::IKeyDisabler follow. +Return KeyDisabler::isEnabled() { + if (!mHasKeyDisabler) return false; + + return mFingerprintNavigation->isEnabled(); +} + +Return KeyDisabler::setEnabled(bool enabled) { + if (!mHasKeyDisabler) return false; + + mFingerprintNavigation->setNavigation(!enabled); + return true; +} + +} // namespace implementation +} // namespace V1_0 +} // namespace touch +} // namespace lineage +} // namespace vendor diff --git a/touch/KeyDisabler.h b/touch/KeyDisabler.h new file mode 100644 index 0000000..86d12c6 --- /dev/null +++ b/touch/KeyDisabler.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2019 The LineageOS Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef VENDOR_LINEAGE_TOUCH_V1_0_KEYDISABLER_H +#define VENDOR_LINEAGE_TOUCH_V1_0_KEYDISABLER_H + +#include +#include + +namespace vendor { +namespace lineage { +namespace touch { +namespace V1_0 { +namespace implementation { + +using ::android::hardware::Return; +using ::android::sp; +using ::com::fingerprints::extension::V1_0::IFingerprintNavigation; + +class KeyDisabler : public IKeyDisabler { + public: + KeyDisabler(); + + // Methods from ::vendor::lineage::touch::V1_0::IKeyDisabler follow. + Return isEnabled() override; + Return setEnabled(bool enabled) override; + + private: + bool mHasKeyDisabler; + sp mFingerprintNavigation; +}; + +} // namespace implementation +} // namespace V1_0 +} // namespace touch +} // namespace lineage +} // namespace vendor + +#endif // VENDOR_LINEAGE_TOUCH_V1_0_KEYDISABLER_H diff --git a/touch/service.cpp b/touch/service.cpp new file mode 100644 index 0000000..e07000d --- /dev/null +++ b/touch/service.cpp @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2019 The LineageOS Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define LOG_TAG "vendor.lineage.touch@1.0-service.msm8953" + +#include +#include + +#include "KeyDisabler.h" + +using android::OK; +using android::sp; +using android::status_t; +using android::hardware::configureRpcThreadpool; +using android::hardware::joinRpcThreadpool; + +using ::vendor::lineage::touch::V1_0::IKeyDisabler; +using ::vendor::lineage::touch::V1_0::implementation::KeyDisabler; + +int main() { + sp keyDisabler; + status_t status; + + LOG(INFO) << "Touch HAL service is starting."; + + keyDisabler = new KeyDisabler(); + if (keyDisabler == nullptr) { + LOG(ERROR) << "Can not create an instance of Touch HAL KeyDisabler Iface, exiting."; + goto shutdown; + } + + configureRpcThreadpool(1, true /*callerWillJoin*/); + + status = keyDisabler->registerAsService(); + if (status != OK) { + LOG(ERROR) << "Could not register service for Touch HAL KeyDisabler Iface (" + << status << ")"; + goto shutdown; + } + + LOG(INFO) << "Touch HAL service is ready."; + joinRpcThreadpool(); + // Should not pass this line + +shutdown: + // In normal operation, we don't expect the thread pool to shutdown + LOG(ERROR) << "Touch HAL service is shutting down."; + return 1; +} diff --git a/touch/vendor.lineage.touch@1.0-service.msm8953.rc b/touch/vendor.lineage.touch@1.0-service.msm8953.rc new file mode 100644 index 0000000..2ddf4a5 --- /dev/null +++ b/touch/vendor.lineage.touch@1.0-service.msm8953.rc @@ -0,0 +1,4 @@ +service vendor.touch-hal-1-0-msm8953 /vendor/bin/hw/vendor.lineage.touch@1.0-service.msm8953 + class hal + user system + group system