OSDN Git Service

バイブレーションを実行できるようにする。表示の桁を少し見直し。
[gokigen/JoggingTimer.git] / wear / src / main / java / net / osdn / gokigen / joggingtimer / MyTimerCounter.java
1 package net.osdn.gokigen.joggingtimer;
2
3 import java.text.SimpleDateFormat;
4 import java.util.ArrayList;
5 import java.util.List;
6 import java.util.Locale;
7
8 import android.text.format.DateFormat;
9 import android.os.Parcel;
10 import android.os.Parcelable;
11 import android.os.SystemClock;
12
13 /**
14  *    My Timer counter
15  *
16  */
17 public class MyTimerCounter implements Parcelable, ITimerCounter
18 {
19     private boolean isTimerStopped = true;
20     private long startTime = 0;
21     private long stopTime = 0;
22     private List<Long> elapsedTime = null;
23
24     MyTimerCounter()
25     {
26         elapsedTime = new ArrayList<>();
27     }
28
29
30     /**
31      *  Converts time value from long to string
32      * @param millis  time(milliseconds)
33      * @return  hh:mm:ss.S
34      */
35     static CharSequence getTimeString(long millis)
36     {
37         int ms = (int) ((millis % 1000) / 100);
38         int sec = (int) (millis / 1000) % 60;
39         int minutes = (int) ((millis / (1000 * 60)) % 60);
40         int hours = (int) ((millis / (1000 * 60 * 60)) % 24);
41
42         if (hours < 1)
43         {
44             // 1時間経過していない時は、時間表示は省略する
45             return (String.format(Locale.US,"%02d'%02d\"%d", minutes, sec, ms));
46         }
47         return (String.format(Locale.US,"%d:%02d'%02d\"%d", hours, minutes, sec, ms));
48         //return (DateFormat.format("hh:mm:ss.S", time));
49     }
50
51     /**
52      *   Is my timer running?
53      *
54      * @return  true : running, false : stopped
55      */
56     @Override
57     public boolean isStarted()
58     {
59         return (!isTimerStopped);
60     }
61
62     /**
63      *   Start Timer
64      *
65      */
66     @Override
67     public void start()
68     {
69         if (isTimerStopped)
70         {
71             startTime = SystemClock.elapsedRealtime();
72             stopTime = 0;
73             elapsedTime.clear();
74             elapsedTime.add(startTime);
75             isTimerStopped = false;
76         }
77     }
78
79     @Override
80     public void timeStamp()
81     {
82         if (!isTimerStopped)
83         {
84             elapsedTime.add(SystemClock.elapsedRealtime());
85         }
86     }
87
88     @Override
89     public void stop()
90     {
91         if (!isTimerStopped)
92         {
93             stopTime = SystemClock.elapsedRealtime();
94             elapsedTime.add(stopTime);
95             isTimerStopped = true;
96         }
97     }
98
99     @Override
100     public void reset()
101     {
102         if (isTimerStopped)
103         {
104             startTime = 0;
105             stopTime = 0;
106             elapsedTime.clear();
107         }
108     }
109
110     @Override
111     public List<Long> getTimerList()
112     {
113         return (elapsedTime);
114     }
115
116     @Override
117     public int getElapsedCount()
118     {
119         return (elapsedTime.size());
120     }
121
122     @Override
123     public long getPastTime()
124     {
125         long currentTime = SystemClock.elapsedRealtime();
126         if (isTimerStopped)
127         {
128             if (elapsedTime.size() == 0)
129             {
130                 // カウンタクリア状態なので...
131                 return (0);
132             }
133             return (getLastElapsedTime());
134         }
135         return (currentTime - startTime);
136     }
137
138     @Override
139     public long getLastElapsedTime()
140     {
141         try
142         {
143             return ((elapsedTime.get(elapsedTime.size() - 1)) - startTime);
144         }
145         catch (Exception e)
146         {
147             e.printStackTrace();
148         }
149         return (0);
150     }
151
152     @Override
153     public long getCurrentElapsedTime()
154     {
155         long currentTime = SystemClock.elapsedRealtime();
156         try
157         {
158             return (currentTime - (elapsedTime.get(elapsedTime.size() - 1)));
159         }
160         catch (Exception e)
161         {
162             e.printStackTrace();
163         }
164         return (currentTime - startTime);
165     }
166
167     @Override
168     public int describeContents()
169     {
170         return 0;
171     }
172
173     @Override
174     public void writeToParcel(Parcel dest, int flags)
175     {
176         dest.writeInt(isTimerStopped ? 1 : 0);
177         dest.writeLong(startTime);
178         dest.writeLong(stopTime);
179         dest.writeList(elapsedTime);
180     }
181
182     public static final Parcelable.Creator<MyTimerCounter> CREATOR = new Parcelable.Creator<MyTimerCounter>()
183     {
184         public MyTimerCounter createFromParcel(Parcel in)
185         {
186             return (new MyTimerCounter(in));
187         }
188
189         public MyTimerCounter[] newArray(int size)
190         {
191             return (new MyTimerCounter[size]);
192         }
193     };
194
195     private MyTimerCounter(Parcel in)
196     {
197         try
198         {
199             isTimerStopped = (in.readInt() == 1);
200             startTime = in.readLong();
201             stopTime = in.readLong();
202             in.readList(elapsedTime, Long.class.getClassLoader());
203         }
204         catch (Exception e)
205         {
206             e.printStackTrace();
207         }
208     }
209 }