diff --git a/Touchscreen/Android.mk b/Touchscreen/Android.mk new file mode 100644 index 0000000..3966b30 --- /dev/null +++ b/Touchscreen/Android.mk @@ -0,0 +1,14 @@ +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_MODULE_TAGS := optional +LOCAL_SRC_FILES := $(call all-subdir-java-files) + +LOCAL_CERTIFICATE := platform +LOCAL_PRIVILEGED_MODULE := true +LOCAL_PACKAGE_NAME := Touchscreen +LOCAL_PROGUARD_ENABLED := disabled + +LOCAL_DEX_PREOPT := false + +include $(BUILD_PACKAGE) diff --git a/Touchscreen/AndroidManifest.xml b/Touchscreen/AndroidManifest.xml new file mode 100644 index 0000000..50e3b92 --- /dev/null +++ b/Touchscreen/AndroidManifest.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + diff --git a/Touchscreen/res/values/strings.xml b/Touchscreen/res/values/strings.xml new file mode 100644 index 0000000..1bd9b00 --- /dev/null +++ b/Touchscreen/res/values/strings.xml @@ -0,0 +1,4 @@ + + + Hardware Overlay Picker + diff --git a/Touchscreen/src/me/phh/treble/touchscreen/Starter.java b/Touchscreen/src/me/phh/treble/touchscreen/Starter.java new file mode 100644 index 0000000..bc5fcf4 --- /dev/null +++ b/Touchscreen/src/me/phh/treble/touchscreen/Starter.java @@ -0,0 +1,91 @@ +package me.phh.treble.touchscreen; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.om.IOverlayManager; +import android.hardware.input.InputManager; +import android.view.InputDevice; +import android.view.MotionEvent; +import android.hardware.input.TouchCalibration; +import android.os.RemoteException; +import android.os.ServiceManager; +import android.os.SystemProperties; +import android.util.Log; + +public class Starter extends BroadcastReceiver { + private final static String TAG = "TouchScreen"; + + private int getRotation(Context ctxt, Intent intent) { + int rotation = -1; + String vndFingerprint = SystemProperties.get("ro.vendor.build.fingerprint", ""); + int hwrotation = SystemProperties.getInt("ro.sf.hwrotation", -1); + if(vndFingerprint.contains("full_x970_t10") && hwrotation == 270) { + rotation = 271; + } + if(intent.hasExtra("rotation")) { + rotation = intent.getIntExtra("rotation", rotation); + } + return rotation; + } + + @Override + public void onReceive(Context ctxt, Intent intent) { + int rotation = getRotation(ctxt, intent); + if(rotation == -1) return; + android.util.Log.d("PHH", "Applying rotation " + rotation); + InputManager im = ctxt.getSystemService(InputManager.class); + int[] ids = im.getInputDeviceIds(); + for(int id: ids) { + InputDevice dev = im.getInputDevice(id); + String descriptor = dev.getDescriptor(); + android.util.Log.d("PHH", "Checking device " + descriptor + ":" + dev.getSources()); + if( (dev.getSources() & InputDevice.SOURCE_TOUCHSCREEN) == InputDevice.SOURCE_TOUCHSCREEN ) { + InputDevice.MotionRange rangeX = dev.getMotionRange(MotionEvent.AXIS_X); + InputDevice.MotionRange rangeY = dev.getMotionRange(MotionEvent.AXIS_Y); + + float dX = rangeX.getMax(); + float dY = rangeY.getMax(); + //TouchCalibration cal = new TouchCalibration( + // 0.0f, dX/dY, 0.0f, + // dY/dX, 0.0f, 0.0f); + TouchCalibration cal; + if(rotation == 0) { + cal = new TouchCalibration( + 1.0f, 0.0f, 0.0f, + 0.0f, 1.0f, 0.0f); + } else if(rotation == 90) { + cal = new TouchCalibration( + 0.0f, dX/dY, 0.0f, + dY/dX, 0.0f, 0.0f); + } else if(rotation == 91) { + cal = new TouchCalibration( + 0.0f, -dX/dY, dX, + dY/dX, 0.0f, 0.0f); + } else if(rotation == 180) { + cal = new TouchCalibration( + -1.0f, 0.0f, dX, + 0.0f, -1.0f, dY); + } else if(rotation == 270) { + cal = new TouchCalibration( + 0.0f, -dX/dY, dX, + -dY/dX, 0.0f, dY); + } else if(rotation == 271) { + cal = new TouchCalibration( + 0.0f, dX/dY, 0.0f, + -dY/dX, 0.0f, dY); + } else { + cal = new TouchCalibration( + 1.0f, 0.0f, 0.0f, + 0.0f, 1.0f, 0.0f); + } + + android.util.Log.d("PHH", "Setting touch calibration " + dY/dX + ":" + dX/dY); + im.setTouchCalibration(descriptor, 0, cal); + im.setTouchCalibration(descriptor, 1, cal); + im.setTouchCalibration(descriptor, 2, cal); + im.setTouchCalibration(descriptor, 3, cal); + } + } + } +} diff --git a/overlay.mk b/overlay.mk index 38f1eec..948962d 100644 --- a/overlay.mk +++ b/overlay.mk @@ -5,7 +5,8 @@ PRODUCT_PACKAGES += \ treble-overlay-Telephony-LTE \ treble-overlay-SystemUI-FalseLocks \ HardwareOverlayPicker \ - QtiAudio + QtiAudio \ + Touchscreen PRODUCT_PACKAGES += \