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
*/
package org.lineageos.settings.device
import android.app.NotificationManager
import android.app.Service
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.content.SharedPreferences
import android.hardware.input.InputManager
import android.media.AudioManager
import android.media.AudioSystem
import android.os.IBinder
import android.os.UEventObserver
import android.os.VibrationEffect
import android.os.Vibrator
import android.provider.Settings
import android.view.InputDevice
import android.view.KeyEvent
import androidx.preference.PreferenceManager
import com.android.internal.os.DeviceKeyHandler
class KeyHandler : Service() {
private lateinit var audioManager: AudioManager
private lateinit var notificationManager: NotificationManager
private lateinit var vibrator: Vibrator
private lateinit var sharedPreferences: SharedPreferences
import java.io.File
class KeyHandler(context: Context) : DeviceKeyHandler {
private val audioManager = context.getSystemService(AudioManager::class.java)
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 val broadcastReceiver = object : BroadcastReceiver() {
@@ -39,49 +48,30 @@ class KeyHandler : Service() {
}
}
private val alertSliderEventObserver = object : UEventObserver() {
private val lock = Any()
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(
init {
context.registerReceiver(
broadcastReceiver,
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) {
when (mode) {

View File

@@ -2,5 +2,5 @@
if [[ -f /mnt/vendor/persist/engineermode/tri_state_hall_data ]]; then
CALIBRATION_DATA="$(cat /mnt/vendor/persist/engineermode/tri_state_hall_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