summaryrefslogtreecommitdiff
path: root/java/com/android/incallui/answer/impl/classifier/Stroke.java
blob: a334249463254a84d44f7768d1f490fc4923c569 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/*
 * Copyright (C) 2016 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License
 */

package com.android.incallui.answer.impl.classifier;

import java.util.ArrayList;

/**
 * Contains data about a stroke (a single trace, all the events from a given id from the
 * DOWN/POINTER_DOWN event till the UP/POINTER_UP/CANCEL event.)
 */
class Stroke {

  private static final float NANOS_TO_SECONDS = 1e9f;

  private ArrayList<Point> points = new ArrayList<>();
  private long startTimeNano;
  private long endTimeNano;
  private float length;
  private final float dpi;

  public Stroke(long eventTimeNano, float dpi) {
    this.dpi = dpi;
    startTimeNano = endTimeNano = eventTimeNano;
  }

  public void addPoint(float x, float y, long eventTimeNano) {
    endTimeNano = eventTimeNano;
    Point point = new Point(x / dpi, y / dpi, eventTimeNano - startTimeNano);
    if (!points.isEmpty()) {
      length += points.get(points.size() - 1).dist(point);
    }
    points.add(point);
  }

  public int getCount() {
    return points.size();
  }

  public float getTotalLength() {
    return length;
  }

  public float getEndPointLength() {
    return points.get(0).dist(points.get(points.size() - 1));
  }

  public long getDurationNanos() {
    return endTimeNano - startTimeNano;
  }

  public float getDurationSeconds() {
    return (float) getDurationNanos() / NANOS_TO_SECONDS;
  }

  public ArrayList<Point> getPoints() {
    return points;
  }
}