1d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke/* 2d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke * Copyright (C) 2014 The Android Open Source Project 3d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke * 4d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke * Licensed under the Apache License, Version 2.0 (the "License"); 5d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke * you may not use this file except in compliance with the License. 6d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke * You may obtain a copy of the License at 7d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke * 8d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke * http://www.apache.org/licenses/LICENSE-2.0 9d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke * 10d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke * Unless required by applicable law or agreed to in writing, software 11d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke * distributed under the License is distributed on an "AS IS" BASIS, 12d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke * See the License for the specific language governing permissions and 14d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke * limitations under the License. 15d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke */ 16d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke 17d6396d67201fb2b64d13070324bb115c9c23b08aJason Gereckepackage android.hardware.input; 18d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke 19d6396d67201fb2b64d13070324bb115c9c23b08aJason Gereckeimport android.os.Parcel; 20d6396d67201fb2b64d13070324bb115c9c23b08aJason Gereckeimport android.os.Parcelable; 21d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke 22d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke/** 23d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke * Encapsulates calibration data for input devices. 24d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke * 25d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke * @hide 26d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke */ 27d6396d67201fb2b64d13070324bb115c9c23b08aJason Gereckepublic class TouchCalibration implements Parcelable { 28d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke 29d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke public static final TouchCalibration IDENTITY = new TouchCalibration(); 30d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke 31d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke public static final Parcelable.Creator<TouchCalibration> CREATOR 32d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke = new Parcelable.Creator<TouchCalibration>() { 33d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke public TouchCalibration createFromParcel(Parcel in) { 34d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke return new TouchCalibration(in); 35d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke } 36d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke 37d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke public TouchCalibration[] newArray(int size) { 38d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke return new TouchCalibration[size]; 39d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke } 40d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke }; 41d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke 42d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke private final float mXScale, mXYMix, mXOffset; 43d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke private final float mYXMix, mYScale, mYOffset; 44d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke 45d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke /** 46d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke * Create a new TouchCalibration initialized to the identity transformation. 47d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke */ 48d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke public TouchCalibration() { 49d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke this(1,0,0,0,1,0); 50d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke } 51d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke 52d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke /** 53d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke * Create a new TouchCalibration from affine transformation paramters. 54d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke * @param xScale Influence of input x-axis value on output x-axis value. 55d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke * @param xyMix Influence of input y-axis value on output x-axis value. 56d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke * @param xOffset Constant offset to be applied to output x-axis value. 57d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke * @param yXMix Influence of input x-axis value on output y-axis value. 58d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke * @param yScale Influence of input y-axis value on output y-axis value. 59d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke * @param yOffset Constant offset to be applied to output y-axis value. 60d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke */ 61d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke public TouchCalibration(float xScale, float xyMix, float xOffset, 62d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke float yxMix, float yScale, float yOffset) { 63d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke mXScale = xScale; 64d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke mXYMix = xyMix; 65d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke mXOffset = xOffset; 66d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke mYXMix = yxMix; 67d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke mYScale = yScale; 68d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke mYOffset = yOffset; 69d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke } 70d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke 71d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke public TouchCalibration(Parcel in) { 72d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke mXScale = in.readFloat(); 73d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke mXYMix = in.readFloat(); 74d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke mXOffset = in.readFloat(); 75d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke mYXMix = in.readFloat(); 76d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke mYScale = in.readFloat(); 77d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke mYOffset = in.readFloat(); 78d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke } 79d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke 80d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke @Override 81d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke public void writeToParcel(Parcel dest, int flags) { 82d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke dest.writeFloat(mXScale); 83d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke dest.writeFloat(mXYMix); 84d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke dest.writeFloat(mXOffset); 85d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke dest.writeFloat(mYXMix); 86d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke dest.writeFloat(mYScale); 87d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke dest.writeFloat(mYOffset); 88d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke } 89d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke 90d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke @Override 91d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke public int describeContents() { 92d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke return 0; 93d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke } 94d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke 95d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke public float[] getAffineTransform() { 96d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke return new float[] { mXScale, mXYMix, mXOffset, mYXMix, mYScale, mYOffset }; 97d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke } 98d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke 99d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke @Override 100d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke public boolean equals(Object obj) { 101d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke if (obj == this) { 102d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke return true; 103d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke } else if (obj instanceof TouchCalibration) { 104d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke TouchCalibration cal = (TouchCalibration)obj; 105d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke 106d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke return (cal.mXScale == mXScale) && 107d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke (cal.mXYMix == mXYMix) && 108d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke (cal.mXOffset == mXOffset) && 109d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke (cal.mYXMix == mYXMix) && 110d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke (cal.mYScale == mYScale) && 111d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke (cal.mYOffset == mYOffset); 112d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke } else { 113d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke return false; 114d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke } 115d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke } 116d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke 117d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke @Override 118d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke public int hashCode() { 119d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke return Float.floatToIntBits(mXScale) ^ 120d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke Float.floatToIntBits(mXYMix) ^ 121d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke Float.floatToIntBits(mXOffset) ^ 122d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke Float.floatToIntBits(mYXMix) ^ 123d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke Float.floatToIntBits(mYScale) ^ 124d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke Float.floatToIntBits(mYOffset); 125d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke } 126d5f7ed9fe9dc3590f6ef9cb7470e29e836a95907Michael Wright 127d5f7ed9fe9dc3590f6ef9cb7470e29e836a95907Michael Wright @Override 128d5f7ed9fe9dc3590f6ef9cb7470e29e836a95907Michael Wright public String toString() { 129d5f7ed9fe9dc3590f6ef9cb7470e29e836a95907Michael Wright return String.format("[%f, %f, %f, %f, %f, %f]", 130d5f7ed9fe9dc3590f6ef9cb7470e29e836a95907Michael Wright mXScale, mXYMix, mXOffset, mYXMix, mYScale, mYOffset); 131d5f7ed9fe9dc3590f6ef9cb7470e29e836a95907Michael Wright } 132d6396d67201fb2b64d13070324bb115c9c23b08aJason Gerecke} 133