/* * Copyright (C) 2022 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.oplus" #include #include #include using ::android::base::ReadFileToString; using ::android::base::Trim; using ::android::base::WriteStringToFile; namespace { constexpr const char* kGestureEnableIndepPath = "/proc/touchpanel/double_tap_enable_indep"; } // anonymous namespace namespace vendor { namespace lineage { namespace touch { namespace V1_0 { namespace implementation { Return TouchscreenGesture::getSupportedGestures(getSupportedGestures_cb resultCb) { std::vector gestures; for (const auto& [id, name] : kGestureNames) { if (kSupportedGestures & (1 << id)) { gestures.push_back({static_cast(gestures.size()), name, kGestureStartKey + id}); } } resultCb(gestures); return Void(); } Return TouchscreenGesture::setGestureEnabled(const Gesture& gesture, bool enabled) { std::string tmp; int contents = 0; if (ReadFileToString(kGestureEnableIndepPath, &tmp)) { contents = std::stoi(Trim(tmp), nullptr, 16); } if (enabled) { contents |= (1 << (gesture.keycode - kGestureStartKey)); } else { contents &= ~(1 << (gesture.keycode - kGestureStartKey)); } return WriteStringToFile(std::to_string(contents), kGestureEnableIndepPath, true); } } // namespace implementation } // namespace V1_0 } // namespace touch } // namespace lineage } // namespace vendor