• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2012 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5  * use this file except in compliance with the License. You may obtain a copy of
6  * the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13  * License for the specific language governing permissions and limitations under
14  * the License.
15  */
16 
17 package com.android.inputmethod.keyboard.internal;
18 
19 import com.android.inputmethod.latin.LatinImeLogger;
20 
21 public final class TouchPositionCorrection {
22     private static final int TOUCH_POSITION_CORRECTION_RECORD_SIZE = 3;
23 
24     private boolean mEnabled;
25     private float[] mXs;
26     private float[] mYs;
27     private float[] mRadii;
28 
load(final String[] data)29     public void load(final String[] data) {
30         final int dataLength = data.length;
31         if (dataLength % TOUCH_POSITION_CORRECTION_RECORD_SIZE != 0) {
32             if (LatinImeLogger.sDBG) {
33                 throw new RuntimeException(
34                         "the size of touch position correction data is invalid");
35             }
36             return;
37         }
38 
39         final int length = dataLength / TOUCH_POSITION_CORRECTION_RECORD_SIZE;
40         mXs = new float[length];
41         mYs = new float[length];
42         mRadii = new float[length];
43         try {
44             for (int i = 0; i < dataLength; ++i) {
45                 final int type = i % TOUCH_POSITION_CORRECTION_RECORD_SIZE;
46                 final int index = i / TOUCH_POSITION_CORRECTION_RECORD_SIZE;
47                 final float value = Float.parseFloat(data[i]);
48                 if (type == 0) {
49                     mXs[index] = value;
50                 } else if (type == 1) {
51                     mYs[index] = value;
52                 } else {
53                     mRadii[index] = value;
54                 }
55             }
56             mEnabled = dataLength > 0;
57         } catch (NumberFormatException e) {
58             if (LatinImeLogger.sDBG) {
59                 throw new RuntimeException(
60                         "the number format for touch position correction data is invalid");
61             }
62             mEnabled = false;
63             mXs = null;
64             mYs = null;
65             mRadii = null;
66         }
67     }
68 
69     // For test only
setEnabled(final boolean enabled)70     public void setEnabled(final boolean enabled) {
71         mEnabled = enabled;
72     }
73 
isValid()74     public boolean isValid() {
75         return mEnabled;
76     }
77 
getRows()78     public int getRows() {
79         return mRadii.length;
80     }
81 
getX(final int row)82     public float getX(final int row) {
83         return 0.0f;
84         // Touch position correction data for X coordinate is obsolete.
85         // return mXs[row];
86     }
87 
getY(final int row)88     public float getY(final int row) {
89         return mYs[row];
90     }
91 
getRadius(final int row)92     public float getRadius(final int row) {
93         return mRadii[row];
94     }
95 }
96