From de7a524f4b1440c8055e906805c9d530729b71e4 Mon Sep 17 00:00:00 2001 From: Joey Rizzoli Date: Tue, 22 Aug 2017 16:16:04 +0200 Subject: [PATCH] sdm845-common: Add touchscreen gestures lineagehw Change-Id: I40a656e90f0b6f2b4ae6b596d4c28cc383b7c9fa Signed-off-by: Joey Rizzoli --- BoardConfigCommon.mk | 4 + .../hardware/TouchscreenGestures.java | 119 ++++++++++++++++++ rootdir/etc/init.qcom.rc | 29 +++++ 3 files changed, 152 insertions(+) create mode 100644 lineagehw/org/lineageos/hardware/TouchscreenGestures.java diff --git a/BoardConfigCommon.mk b/BoardConfigCommon.mk index 5cd61fb..75742eb 100644 --- a/BoardConfigCommon.mk +++ b/BoardConfigCommon.mk @@ -74,6 +74,10 @@ WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY ?= true # Display TARGET_USES_HWC2 := true +# Lineage Hardware +BOARD_HARDWARE_CLASS += \ + $(COMMON_PATH)/lineagehw + # Partitions BOARD_BOOTIMAGE_PARTITION_SIZE := 67108864 BOARD_SYSTEMIMAGE_PARTITION_SIZE := 2998927360 diff --git a/lineagehw/org/lineageos/hardware/TouchscreenGestures.java b/lineagehw/org/lineageos/hardware/TouchscreenGestures.java new file mode 100644 index 0000000..0113073 --- /dev/null +++ b/lineagehw/org/lineageos/hardware/TouchscreenGestures.java @@ -0,0 +1,119 @@ +/* + * Copyright (C) 2016 The CyanogenMod Project + * (C) 2017 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. + */ + +package org.lineageos.hardware; + +import android.util.Log; + +import lineageos.hardware.TouchscreenGesture; + +import org.lineageos.internal.util.FileUtils; + +/** + * Touchscreen gestures API + * + * A device may implement several touchscreen gestures for use while + * the display is turned off, such as drawing alphabets and shapes. + * These gestures can be interpreted by userspace to activate certain + * actions and launch certain apps, such as to skip music tracks, + * to turn on the flashlight, or to launch the camera app. + * + * This *should always* be supported by the hardware directly. + * A lot of recent touch controllers have a firmware option for this. + * + * This API provides support for enumerating the gestures + * supported by the touchscreen. + */ +public class TouchscreenGestures { + + private static final String LOG_TAG = TouchscreenGestures.class.getSimpleName(); + + private static final String[] GESTURE_PATHS = { + "/proc/touchpanel/double_swipe_enable", + "/proc/touchpanel/up_arrow_enable", + "/proc/touchpanel/right_arrow_enable", + "/proc/touchpanel/down_arrow_enable", + "/proc/touchpanel/left_arrow_enable", + "/proc/touchpanel/up_swipe_enable", + "/proc/touchpanel/right_swipe_enable", + "/proc/touchpanel/down_swipe_enable", + "/proc/touchpanel/left_swipe_enable", + "/proc/touchpanel/letter_m_enable", + "/proc/touchpanel/letter_o_enable", + "/proc/touchpanel/letter_s_enable", + "/proc/touchpanel/letter_w_enable", + }; + + // Id, name, keycode + private static final TouchscreenGesture[] TOUCHSCREEN_GESTURES = { + new TouchscreenGesture(0, "Two fingers down swipe", 251), + new TouchscreenGesture(1, "Up arrow", 252), + new TouchscreenGesture(2, "Right arrow", 254), + new TouchscreenGesture(3, "Down arrow", 255), + new TouchscreenGesture(4, "Left arrow", 253), + new TouchscreenGesture(5, "One finger up swipe", 66), + new TouchscreenGesture(6, "One finger right swipe", 65), + new TouchscreenGesture(7, "One finger down swipe", 64), + new TouchscreenGesture(8, "One finger left swipe", 63), + new TouchscreenGesture(9, "Letter M", 247), + new TouchscreenGesture(10, "Letter O", 250), + new TouchscreenGesture(11, "Letter S", 248), + new TouchscreenGesture(12, "Letter W", 246), + }; + + /** + * Whether device supports touchscreen gestures + * + * @return boolean Supported devices must return always true + */ + public static boolean isSupported() { + boolean supported = false; + for (String path : GESTURE_PATHS) { + if (!FileUtils.isFileWritable(path) || + !FileUtils.isFileReadable(path)) { + Log.e(LOG_TAG, path + " is non-writable or non-readable!"); + continue; + } + supported = true; + } + return supported; + } + + /* + * Get the list of available gestures. A mode has an integer + * identifier and a string name. + * + * It is the responsibility of the upper layers to + * map the name to a human-readable format or perform translation. + */ + public static TouchscreenGesture[] getAvailableGestures() { + return TOUCHSCREEN_GESTURES; + } + + /** + * This method allows to set the activation status of a gesture + * + * @param gesture The gesture to be activated + * state The new activation status of the gesture + * @return boolean Must be false if gesture is not supported + * or the operation failed; true in any other case. + */ + public static boolean setGestureEnabled( + final TouchscreenGesture gesture, final boolean state) { + return FileUtils.writeLine(GESTURE_PATHS[gesture.id], state ? "1" : "0"); + } +} diff --git a/rootdir/etc/init.qcom.rc b/rootdir/etc/init.qcom.rc index 023a204..1065eaf 100644 --- a/rootdir/etc/init.qcom.rc +++ b/rootdir/etc/init.qcom.rc @@ -1,3 +1,32 @@ +on boot + # Touchpanel + chmod 0660 /proc/touchpanel/double_swipe_enable + chmod 0660 /proc/touchpanel/down_arrow_enable + chmod 0660 /proc/touchpanel/down_swipe_enable + chmod 0660 /proc/touchpanel/left_arrow_enable + chmod 0660 /proc/touchpanel/left_swipe_enable + chmod 0660 /proc/touchpanel/letter_m_enable + chmod 0660 /proc/touchpanel/letter_o_enable + chmod 0660 /proc/touchpanel/letter_s_enable + chmod 0660 /proc/touchpanel/letter_w_enable + chmod 0660 /proc/touchpanel/right_arrow_enabl + chmod 0660 /proc/touchpanel/right_swipe_enabl + chmod 0660 /proc/touchpanel/up_arrow_enable + chmod 0660 /proc/touchpanel/up_swipe_enable + chown system system /proc/touchpanel/double_swipe_enable + chown system system /proc/touchpanel/down_arrow_enable + chown system system /proc/touchpanel/down_swipe_enable + chown system system /proc/touchpanel/left_arrow_enable + chown system system /proc/touchpanel/left_swipe_enable + chown system system /proc/touchpanel/letter_m_enable + chown system system /proc/touchpanel/letter_o_enable + chown system system /proc/touchpanel/letter_s_enable + chown system system /proc/touchpanel/letter_w_enable + chown system system /proc/touchpanel/right_arrow_enabl + chown system system /proc/touchpanel/right_swipe_enabl + chown system system /proc/touchpanel/up_arrow_enable + chown system system /proc/touchpanel/up_swipe_enable + service dashd /sbin/dashd class core critical