KeyHandler: Adjust for Oplus

Change-Id: Icc5e6583f48756fc765970c9e7a0f27425f37105
This commit is contained in:
LuK1337
2022-04-10 21:04:40 +02:00
parent a446bb68c6
commit 99f10d3d04
2 changed files with 40 additions and 50 deletions

View File

@@ -1,32 +1,41 @@
/* /*
* Copyright (C) 2021 The LineageOS Project * Copyright (C) 2021-2022 The LineageOS Project
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
package org.lineageos.settings.device package org.lineageos.settings.device
import android.app.NotificationManager import android.app.NotificationManager
import android.app.Service
import android.content.BroadcastReceiver import android.content.BroadcastReceiver
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.IntentFilter import android.content.IntentFilter
import android.content.SharedPreferences import android.hardware.input.InputManager
import android.media.AudioManager import android.media.AudioManager
import android.media.AudioSystem import android.media.AudioSystem
import android.os.IBinder
import android.os.UEventObserver
import android.os.VibrationEffect import android.os.VibrationEffect
import android.os.Vibrator import android.os.Vibrator
import android.provider.Settings import android.provider.Settings
import android.view.InputDevice
import android.view.KeyEvent import android.view.KeyEvent
import androidx.preference.PreferenceManager import com.android.internal.os.DeviceKeyHandler
class KeyHandler : Service() { import java.io.File
private lateinit var audioManager: AudioManager
private lateinit var notificationManager: NotificationManager class KeyHandler(context: Context) : DeviceKeyHandler {
private lateinit var vibrator: Vibrator private val audioManager = context.getSystemService(AudioManager::class.java)
private lateinit var sharedPreferences: SharedPreferences private val inputManager = context.getSystemService(InputManager::class.java)
private val notificationManager = context.getSystemService(NotificationManager::class.java)
private val vibrator = context.getSystemService(Vibrator::class.java)
private val packageContext = context.createPackageContext(
KeyHandler::class.java.getPackage()!!.name, 0
)
private val sharedPreferences
get() = packageContext.getSharedPreferences(
packageContext.packageName + "_preferences",
Context.MODE_PRIVATE or Context.MODE_MULTI_PROCESS
)
private var wasMuted = false private var wasMuted = false
private val broadcastReceiver = object : BroadcastReceiver() { private val broadcastReceiver = object : BroadcastReceiver() {
@@ -39,49 +48,30 @@ class KeyHandler : Service() {
} }
} }
private val alertSliderEventObserver = object : UEventObserver() { init {
private val lock = Any() context.registerReceiver(
override fun onUEvent(event: UEvent) {
synchronized(lock) {
event.get("SWITCH_STATE")?.let {
handleMode(it.toInt())
return
}
event.get("STATE")?.let {
val none = it.contains("USB=0")
val vibration = it.contains("HOST=0")
val silent = it.contains("null)=0")
if (none && !vibration && !silent) {
handleMode(POSITION_BOTTOM)
} else if (!none && vibration && !silent) {
handleMode(POSITION_MIDDLE)
} else if (!none && !vibration && silent) {
handleMode(POSITION_TOP)
}
return
}
}
}
}
override fun onCreate() {
audioManager = getSystemService(AudioManager::class.java)
notificationManager = getSystemService(NotificationManager::class.java)
vibrator = getSystemService(Vibrator::class.java)
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)
registerReceiver(
broadcastReceiver, broadcastReceiver,
IntentFilter(AudioManager.STREAM_MUTE_CHANGED_ACTION) IntentFilter(AudioManager.STREAM_MUTE_CHANGED_ACTION)
) )
alertSliderEventObserver.startObserving("tri-state-key")
alertSliderEventObserver.startObserving("tri_state_key")
} }
override fun onBind(intent: Intent?): IBinder? = null override fun handleKeyEvent(event: KeyEvent): KeyEvent? {
if (event.action != KeyEvent.ACTION_DOWN) {
return event
}
if (inputManager.getInputDevice(event.deviceId).name != "oplus,hall_tri_state_key") {
return event
}
when (File("/proc/tristatekey/tri_state").readText().trim()) {
"1" -> handleMode(POSITION_TOP)
"2" -> handleMode(POSITION_MIDDLE)
"3" -> handleMode(POSITION_BOTTOM)
}
return null
}
private fun vibrateIfNeeded(mode: Int) { private fun vibrateIfNeeded(mode: Int) {
when (mode) { when (mode) {

View File

@@ -2,5 +2,5 @@
if [[ -f /mnt/vendor/persist/engineermode/tri_state_hall_data ]]; then if [[ -f /mnt/vendor/persist/engineermode/tri_state_hall_data ]]; then
CALIBRATION_DATA="$(cat /mnt/vendor/persist/engineermode/tri_state_hall_data)" CALIBRATION_DATA="$(cat /mnt/vendor/persist/engineermode/tri_state_hall_data)"
CALIBRATION_DATA="${CALIBRATION_DATA//;/,}" CALIBRATION_DATA="${CALIBRATION_DATA//;/,}"
echo -n $CALIBRATION_DATA > /sys/devices/platform/soc/soc:tri_state_key/hall_data_calib echo -n $CALIBRATION_DATA > /proc/tristatekey/hall_data_calib
fi fi