OSDN Git Service

複数プロセス、プリファレンス保存の不具合あり
[train-delayed/source.git] / workspace / TrainDelayed / src / com / td / HistoryActivity.java
1 package com.td;\r
2 \r
3 import java.util.Calendar;\r
4 import java.util.Date;\r
5 import java.util.List;\r
6 \r
7 import org.afree.chart.AFreeChart;\r
8 import org.afree.chart.ChartFactory;\r
9 import org.afree.chart.plot.PlotOrientation;\r
10 import org.afree.data.category.DefaultCategoryDataset;\r
11 \r
12 import android.content.Context;\r
13 import android.content.Intent;\r
14 import android.content.res.Configuration;\r
15 import android.os.Bundle;\r
16 import android.view.View;\r
17 import android.view.View.OnClickListener;\r
18 import android.widget.Button;\r
19 import android.widget.HorizontalScrollView;\r
20 import android.widget.TextView;\r
21 \r
22 import com.td.db.History;\r
23 import com.td.db.HistoryDao;\r
24 import com.td.db.Train;\r
25 import com.td.db.TrainDao;\r
26 import com.td.utility.BaseActivity;\r
27 import com.td.utility.DBCache;\r
28 import com.td.utility.DateUtil;\r
29 import com.td.utility.Debug;\r
30 import com.td.utility.EditPrefUtil;\r
31 \r
32 public class HistoryActivity extends BaseActivity {\r
33         public static final String PREF_HIS_YMD_POS = "HIS_YMD_POS";\r
34 \r
35         public static final String PREF_HIS_ST_HOUR = "HIS_ST_HOUR";\r
36         public static final String PREF_HIS_ST_MINUTE = "HIS_ST_MINUTE";\r
37         public static final String PREF_HIS_EN_HOUR = "HIS_EN_HOUR";\r
38         public static final String PREF_HIS_EN_MINUTE = "HIS_EN_MINUTE";\r
39 \r
40         public static final String PREF_HIS_YMD = "HIS_YMD";\r
41 \r
42         public static final String PREF_HIS_DATA = "HIS_DATA";\r
43 \r
44         public static final int[] unit = { 10, 30, 60 };\r
45 \r
46         private EditPrefUtil pref = new EditPrefUtil(this);\r
47         private TextView textView1;\r
48     private HorizontalScrollView scrollView;\r
49     private HistoryView historyView;\r
50     \r
51         private int prefYmdPos;\r
52 \r
53         private int prefStHour;\r
54         private int prefStMinute;\r
55         private int prefEnHour;\r
56         private int prefEnMinute;\r
57 \r
58         private Date currentDate;\r
59         \r
60         private int scrollViewWidth = 0;\r
61         private int prevSx;\r
62 \r
63         @Override\r
64         public void onCreate(Bundle savedInstanceState) {\r
65                 super.onCreate(savedInstanceState);\r
66                 setContentView(R.layout.history);\r
67                 \r
68                 try {\r
69                         Button button1 = (Button) findViewById(R.id.button11);\r
70                         button1.setOnClickListener(new OnClickListener() {\r
71                                 public void onClick(View view) {\r
72                                         Intent intent = new Intent(HistoryActivity.this,\r
73                                                         (Class<?>) HistoryListActivity.class);\r
74                                         startActivityForResult(intent, 0);\r
75                                 }\r
76                         });\r
77 \r
78                         Button button2 = (Button) findViewById(R.id.button12);\r
79                         button2.setOnClickListener(new OnClickListener() {\r
80                                 public void onClick(View view) {\r
81                                         HistoryConfActivity.init(HistoryActivity.this);\r
82                                         Intent intent = new Intent(HistoryActivity.this,\r
83                                                         (Class<?>) HistoryConfActivity.class);\r
84                                         startActivityForResult(intent, 0);\r
85                                 }\r
86                         });\r
87 \r
88                         Button button3 = (Button) findViewById(R.id.button13);\r
89                         button3.setOnClickListener(new OnClickListener() {\r
90                                 public void onClick(View view) {\r
91                                         HistoryActivity.this.finish();\r
92                                 }\r
93                         });\r
94 \r
95                         textView1 = (TextView) findViewById(R.id.textView11);\r
96                         scrollView = (HorizontalScrollView) findViewById(R.id.scrollView11);\r
97                         historyView = (HistoryView) findViewById(R.id.historyView11);\r
98                         historyView.setHistoryActivity(this);\r
99                 } catch (Exception e) {\r
100                         Debug.d(this, null, e);\r
101                         showDialog(this, e);                    \r
102                 }\r
103         }\r
104 \r
105         @Override\r
106         public void onWindowFocusChanged(boolean hasFocus) {\r
107                 int width = scrollView.getWidth();\r
108                 setScrollViewWidth(width);              \r
109                 \r
110                 super.onWindowFocusChanged(hasFocus);\r
111         }\r
112 \r
113         // TODO\r
114 //      @Override\r
115 //    public void onConfigurationChanged(Configuration newConfig ) {\r
116 //              int width = scrollView.getWidth();\r
117 //              setScrollViewWidth(width);              \r
118 //              \r
119 //        super.onConfigurationChanged(newConfig);\r
120 //    }\r
121         \r
122         @Override\r
123         protected void onStart() {\r
124                 super.onStart();\r
125 \r
126                 try {\r
127                         Calendar cal = Calendar.getInstance();\r
128                         Date date = cal.getTime();\r
129 \r
130                         int H = 3;\r
131                         \r
132                         prefEnHour = pref.getInt(PREF_HIS_EN_HOUR, date.getHours());\r
133                         prefEnMinute = pref.getInt(PREF_HIS_EN_MINUTE, date.getMinutes());\r
134                         cal = Calendar.getInstance();\r
135                         cal.set(Calendar.HOUR_OF_DAY, prefEnHour);\r
136                         cal.set(Calendar.MINUTE, prefEnMinute);\r
137                         date = cal.getTime();\r
138                         int h = date.getHours();\r
139                         int hour = 0;\r
140                         int minute = 0;\r
141                         if (h >= H){\r
142                                 cal.add(Calendar.HOUR, -H);\r
143                         \r
144                                 Date startDate = cal.getTime();\r
145                                 hour = startDate.getHours();\r
146                                 minute = startDate.getMinutes();\r
147                         }\r
148                         prefStHour = pref.getInt(PREF_HIS_ST_HOUR, hour);\r
149                         prefStMinute = pref.getInt(PREF_HIS_ST_MINUTE, minute);\r
150 \r
151                         int M = DateUtil.WEEK;\r
152                         prefYmdPos = pref.getInt(PREF_HIS_YMD_POS, M - 1);\r
153 \r
154                         cal.add(Calendar.DATE, -(M - (prefYmdPos + 1)));\r
155                         currentDate = cal.getTime();\r
156 \r
157                         pref.update();\r
158                         \r
159                         HistoryDao hisDao = HistoryDao.getInstance();\r
160                         TrainDao traDao = TrainDao.getInstance();\r
161                         DBCache<Train, Long> cache = new DBCache<Train, Long>(traDao);\r
162                         \r
163                         int ymd = DateUtil.getYmd(currentDate.getYear(),\r
164                                         currentDate.getMonth(), currentDate.getDate());\r
165                         int from = DateUtil.getHm(prefStHour, prefStMinute);\r
166                         int to = DateUtil.getHm(prefEnHour, prefEnMinute);\r
167                         \r
168                         pref.put(PREF_HIS_YMD, ymd);\r
169                         pref.update();\r
170                         \r
171                         List<History> list = hisDao.search(this, ymd, from, to);\r
172 \r
173                         DefaultCategoryDataset dataset = new DefaultCategoryDataset();\r
174                         for (History history : list) {\r
175                                 long val = history.getNum();\r
176                                 int hm = history.getHm();\r
177                                 String text = DateUtil.formattedHm(hm);\r
178                                 \r
179                                 long id = history.getRouteId();\r
180                                 Train train = cache.get(Long.valueOf(id));\r
181                                 if (train != null){\r
182                                         String route = train.getName();\r
183 \r
184                                         if (Debug.isDebug()){\r
185                                                 Debug.d(this, id + " " + route + " " + text + " " + val);\r
186                                         }\r
187                                         dataset.setValue(val, route, text);\r
188                                 }\r
189                         }\r
190 \r
191                         AFreeChart chart = ChartFactory.createLineChart(\r
192                                         getString(R.string.history_tite),\r
193                                         getString(R.string.time_title),\r
194                                         getString(R.string.tpm_title),\r
195                                         dataset, PlotOrientation.VERTICAL, true,\r
196                                         false, false);\r
197                         historyView.setChart(chart);\r
198                         \r
199                         String text = DateUtil.formattedDate(ymd, from, to);\r
200                         textView1.setText(text);\r
201                         \r
202                 } catch (Exception e) {\r
203                         Debug.d(this, null, e);\r
204                         showDialog(this, e);                    \r
205                 }\r
206         }\r
207 \r
208         @Override\r
209         protected void onStop() {\r
210                 super.onStop();\r
211         }\r
212 \r
213         @Override\r
214         protected void onActivityResult(int requestCode, int resultCode, Intent data) {\r
215                 super.onActivityResult(requestCode, resultCode, data);\r
216                 \r
217                 switch (resultCode){\r
218                 case RESULT_OK:\r
219                         // \90Ý\92è\82ª\95Ï\8dX\82³\82ê\82½\82Ì\82Å\81A\92l\82ð\93Ç\82Ý\92¼\82·\r
220                         pref.remove(PREF_HIS_DATA);\r
221                         break;\r
222                 case RESULT_CANCELED:\r
223                         break;\r
224                 }\r
225         }\r
226 \r
227         public void setScrollViewWidth(int scrollViewWidth) {\r
228                 if (scrollViewWidth <= 0){\r
229                         return;\r
230                 }\r
231                 this.scrollViewWidth = scrollViewWidth;\r
232                 scrollView.requestLayout();\r
233         }\r
234 \r
235         public int getScrollViewWidth() {\r
236                 return scrollViewWidth;\r
237         }\r
238 \r
239         public static void init(Context context) {\r
240                 EditPrefUtil pref = new EditPrefUtil(context);\r
241 \r
242                 pref.remove(PREF_HIS_YMD_POS);\r
243 \r
244                 pref.remove(PREF_HIS_ST_HOUR);\r
245                 pref.remove(PREF_HIS_ST_MINUTE);\r
246                 pref.remove(PREF_HIS_EN_HOUR);\r
247                 pref.remove(PREF_HIS_EN_MINUTE);\r
248 \r
249                 pref.remove(PREF_HIS_DATA);\r
250                 \r
251                 pref.update();\r
252         }\r
253         \r
254         public void preMagnification(){\r
255                 prevSx = scrollView.getScrollX();\r
256         }\r
257         \r
258         public void magnification(float prefDw, float dw){\r
259                 float ddw = dw / prefDw;\r
260                 float prevCx = prevSx + scrollViewWidth / 2;\r
261                 // float cx = sx * ddw + scrollViewWidth / 2;\r
262                 // prevCx - cx = (1 - ddw) * sx;\r
263                 // cx = prevCx - (1 - ddw) * sx;\r
264                 float sx = prevCx - (1 - ddw) * prevSx - scrollViewWidth / 2;\r
265                 \r
266                 scrollView.scrollTo((int)sx, 0);\r
267         }\r
268 }\r